aismemory 0.7.5 → 0.8.2
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 +247 -7
- package/dist/__tests__/agent-archive.test.d.ts +1 -0
- package/dist/__tests__/agent-archive.test.js +153 -0
- package/dist/__tests__/agent-archive.test.js.map +1 -0
- package/dist/__tests__/agent-key-mode.test.js +121 -6
- package/dist/__tests__/agent-key-mode.test.js.map +1 -1
- package/dist/__tests__/agent-load-persistence.test.js +22 -6
- package/dist/__tests__/agent-load-persistence.test.js.map +1 -1
- package/dist/__tests__/ais-http.test.js +23 -3
- package/dist/__tests__/ais-http.test.js.map +1 -1
- package/dist/__tests__/auto-handoff.test.js +56 -0
- package/dist/__tests__/auto-handoff.test.js.map +1 -1
- package/dist/__tests__/bond-link-survives-exit.test.d.ts +1 -0
- package/dist/__tests__/bond-link-survives-exit.test.js +177 -0
- package/dist/__tests__/bond-link-survives-exit.test.js.map +1 -0
- package/dist/__tests__/credential-resolution.test.js +56 -8
- package/dist/__tests__/credential-resolution.test.js.map +1 -1
- package/dist/__tests__/credential-whoami.test.d.ts +8 -0
- package/dist/__tests__/credential-whoami.test.js +93 -0
- package/dist/__tests__/credential-whoami.test.js.map +1 -0
- package/dist/__tests__/device-flow-gate-e2e.test.js +6 -4
- package/dist/__tests__/device-flow-gate-e2e.test.js.map +1 -1
- package/dist/__tests__/doctor.test.js +176 -85
- package/dist/__tests__/doctor.test.js.map +1 -1
- package/dist/__tests__/full-context-view-forwarding.test.d.ts +1 -0
- package/dist/__tests__/full-context-view-forwarding.test.js +80 -0
- package/dist/__tests__/full-context-view-forwarding.test.js.map +1 -0
- package/dist/__tests__/hydration.test.js +56 -1
- package/dist/__tests__/hydration.test.js.map +1 -1
- package/dist/__tests__/install.test.d.ts +1 -0
- package/dist/__tests__/install.test.js +126 -0
- package/dist/__tests__/install.test.js.map +1 -0
- package/dist/__tests__/integration.test.js +1 -0
- package/dist/__tests__/integration.test.js.map +1 -1
- package/dist/__tests__/lost-agent.test.js +51 -0
- package/dist/__tests__/lost-agent.test.js.map +1 -1
- package/dist/__tests__/mcp-tools.test.js +210 -3
- package/dist/__tests__/mcp-tools.test.js.map +1 -1
- package/dist/__tests__/memory-write-failure.test.js +4 -8
- package/dist/__tests__/memory-write-failure.test.js.map +1 -1
- package/dist/__tests__/no-registered-keys-disk-bearer-fallback.test.js +4 -7
- package/dist/__tests__/no-registered-keys-disk-bearer-fallback.test.js.map +1 -1
- package/dist/__tests__/pending-device-flow-e2e.test.js +22 -1
- package/dist/__tests__/pending-device-flow-e2e.test.js.map +1 -1
- package/dist/__tests__/pending-device-flow-resume.test.d.ts +1 -0
- package/dist/__tests__/pending-device-flow-resume.test.js +104 -0
- package/dist/__tests__/pending-device-flow-resume.test.js.map +1 -0
- package/dist/__tests__/prompt-resource.test.js +1 -0
- package/dist/__tests__/prompt-resource.test.js.map +1 -1
- package/dist/__tests__/provisional-register-mcp-remember.test.js +4 -8
- package/dist/__tests__/provisional-register-mcp-remember.test.js.map +1 -1
- package/dist/__tests__/reconnect-survival-e2e.test.js +3 -4
- package/dist/__tests__/reconnect-survival-e2e.test.js.map +1 -1
- package/dist/__tests__/refresh.test.js +24 -2
- package/dist/__tests__/refresh.test.js.map +1 -1
- package/dist/__tests__/request-timeout.test.d.ts +1 -0
- package/dist/__tests__/request-timeout.test.js +40 -0
- package/dist/__tests__/request-timeout.test.js.map +1 -0
- package/dist/__tests__/resolve-agent-preference-e2e.test.js +15 -3
- package/dist/__tests__/resolve-agent-preference-e2e.test.js.map +1 -1
- package/dist/__tests__/retry-after.test.d.ts +4 -0
- package/dist/__tests__/retry-after.test.js +134 -0
- package/dist/__tests__/retry-after.test.js.map +1 -0
- package/dist/__tests__/run-pass-mode.test.d.ts +1 -0
- package/dist/__tests__/run-pass-mode.test.js +130 -0
- package/dist/__tests__/run-pass-mode.test.js.map +1 -0
- package/dist/__tests__/session-identity.test.d.ts +1 -0
- package/dist/__tests__/session-identity.test.js +213 -0
- package/dist/__tests__/session-identity.test.js.map +1 -0
- package/dist/__tests__/version-check.test.js +1 -1
- package/dist/__tests__/workspace-key-mode.test.js +194 -16
- package/dist/__tests__/workspace-key-mode.test.js.map +1 -1
- package/dist/agent-archive.d.ts +36 -0
- package/dist/agent-archive.js +69 -0
- package/dist/agent-archive.js.map +1 -0
- package/dist/agent-key-mode.js +86 -29
- package/dist/agent-key-mode.js.map +1 -1
- package/dist/ais-http-error.d.ts +7 -2
- package/dist/ais-http-error.js +18 -5
- package/dist/ais-http-error.js.map +1 -1
- package/dist/ais-http.d.ts +2 -0
- package/dist/ais-http.js +41 -19
- package/dist/ais-http.js.map +1 -1
- package/dist/auto-handoff.js +33 -1
- package/dist/auto-handoff.js.map +1 -1
- package/dist/cli/doctor.d.ts +5 -2
- package/dist/cli/doctor.js +72 -15
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/install.d.ts +6 -0
- package/dist/cli/install.js +52 -0
- package/dist/cli/install.js.map +1 -0
- package/dist/cli/orientation.d.ts +2 -0
- package/dist/cli/orientation.js +31 -1
- package/dist/cli/orientation.js.map +1 -1
- package/dist/credential-whoami.d.ts +50 -0
- package/dist/credential-whoami.js +91 -0
- package/dist/credential-whoami.js.map +1 -0
- package/dist/hydration.js +8 -0
- package/dist/hydration.js.map +1 -1
- package/dist/index.js +213 -50
- package/dist/index.js.map +1 -1
- package/dist/mcp/tools.d.ts +18 -4
- package/dist/mcp/tools.js +107 -12
- package/dist/mcp/tools.js.map +1 -1
- package/dist/pending-device-flow.d.ts +31 -0
- package/dist/pending-device-flow.js +38 -0
- package/dist/pending-device-flow.js.map +1 -1
- package/dist/refresh.js +5 -1
- package/dist/refresh.js.map +1 -1
- package/dist/request-timeout.d.ts +26 -0
- package/dist/request-timeout.js +49 -0
- package/dist/request-timeout.js.map +1 -0
- package/dist/retry-after.d.ts +26 -0
- package/dist/retry-after.js +42 -0
- package/dist/retry-after.js.map +1 -0
- package/dist/run-pass-mode.d.ts +16 -0
- package/dist/run-pass-mode.js +274 -0
- package/dist/run-pass-mode.js.map +1 -0
- package/dist/session-identity.d.ts +40 -0
- package/dist/session-identity.js +179 -0
- package/dist/session-identity.js.map +1 -0
- package/dist/telemetry.d.ts +1 -1
- package/dist/telemetry.js.map +1 -1
- package/dist/tool-args.d.ts +13 -1
- package/dist/tool-args.js +27 -1
- package/dist/tool-args.js.map +1 -1
- package/dist/types.d.ts +32 -0
- package/dist/workspace-key-mode.js +100 -26
- package/dist/workspace-key-mode.js.map +1 -1
- package/package.json +4 -6
- package/dist/harness-identity.d.ts +0 -17
- package/dist/harness-identity.js +0 -105
- package/dist/harness-identity.js.map +0 -1
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session identity — one identity per PROCESS, never per machine.
|
|
3
|
+
*
|
|
4
|
+
* A session's identity is chosen at launch through the AIS_AGENT_ID
|
|
5
|
+
* environment variable (exported in the launching shell, or set in the `env`
|
|
6
|
+
* block of that session's own MCP config) and can be switched in-session with
|
|
7
|
+
* the agent_load tool. Many agents run on one machine at the same time; that
|
|
8
|
+
* is the product. Nothing here pins a machine, an install or a harness to a
|
|
9
|
+
* single agent (CORBOT-FBDC8652).
|
|
10
|
+
*
|
|
11
|
+
* The gate below only REFUSES a write whose live agent does not match the
|
|
12
|
+
* identity this session selected. It never installs a pin anywhere, and it
|
|
13
|
+
* never reads shared per-machine state.
|
|
14
|
+
*/
|
|
15
|
+
import { readdirSync } from 'node:fs';
|
|
16
|
+
import { createHash } from 'node:crypto';
|
|
17
|
+
import { homedir } from 'node:os';
|
|
18
|
+
import { join } from 'node:path';
|
|
19
|
+
import { z } from 'zod';
|
|
20
|
+
import { AisHttpError } from './ais-http-error.js';
|
|
21
|
+
import { AisRequestTimeoutError } from './request-timeout.js';
|
|
22
|
+
const sessionIdentitySchema = z.object({
|
|
23
|
+
version: z.literal(1),
|
|
24
|
+
/** How this session's identity was selected. */
|
|
25
|
+
source: z.enum(['env', 'agent_load']),
|
|
26
|
+
agentId: z.string().regex(/^[a-zA-Z0-9][a-zA-Z0-9-]{0,127}$/),
|
|
27
|
+
}).strict();
|
|
28
|
+
export const IDENTITY_REPAIR = 'Set AIS_AGENT_ID for THIS session only — export it in the shell that launches aismemory, or set it in the env block of this session\'s own MCP config — then restart the session and run aismemory doctor. Switch agents inside a session with agent_load. Never pin a machine, install or harness to one agent; other sessions on this machine run as other agents.';
|
|
29
|
+
/** The directory the removed per-harness manifest pin used to write to. */
|
|
30
|
+
const LEGACY_HARNESS_DIR = ['.aismemory', 'harnesses'];
|
|
31
|
+
export const RECENT_IDENTITY_CONFIRMATION_TTL_MS = 5 * 60 * 1000;
|
|
32
|
+
export const WHOAMI_RETRY_BACKOFF_MS = [250, 500];
|
|
33
|
+
const confirmations = new Map();
|
|
34
|
+
const defaultSleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
35
|
+
function confirmationKey(agentId, credentialKey) {
|
|
36
|
+
return `${agentId}\n${credentialKey}`;
|
|
37
|
+
}
|
|
38
|
+
function clearConfirmationsForAgent(agentId) {
|
|
39
|
+
for (const key of Array.from(confirmations.keys())) {
|
|
40
|
+
if (key.startsWith(`${agentId}\n`))
|
|
41
|
+
confirmations.delete(key);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function rememberConfirmation(agentId, credentialKey, confirmedAtMs) {
|
|
45
|
+
confirmations.set(confirmationKey(agentId, credentialKey), { confirmedAtMs });
|
|
46
|
+
}
|
|
47
|
+
function hasRecentConfirmation(agentId, credentialKey, nowMs) {
|
|
48
|
+
const confirmation = confirmations.get(confirmationKey(agentId, credentialKey));
|
|
49
|
+
if (confirmation === undefined)
|
|
50
|
+
return false;
|
|
51
|
+
const ageMs = nowMs - confirmation.confirmedAtMs;
|
|
52
|
+
return ageMs >= 0 && ageMs < RECENT_IDENTITY_CONFIRMATION_TTL_MS;
|
|
53
|
+
}
|
|
54
|
+
function isFetchNetworkError(error) {
|
|
55
|
+
if (!(error instanceof TypeError))
|
|
56
|
+
return false;
|
|
57
|
+
const cause = error.cause;
|
|
58
|
+
if (cause instanceof Error) {
|
|
59
|
+
const code = cause.code;
|
|
60
|
+
return typeof code === 'string' && (code.startsWith('UND_ERR_') ||
|
|
61
|
+
['ECONNRESET', 'ECONNREFUSED', 'ENOTFOUND', 'EAI_AGAIN', 'ETIMEDOUT', 'EPIPE'].includes(code));
|
|
62
|
+
}
|
|
63
|
+
if (cause instanceof AggregateError) {
|
|
64
|
+
return cause.errors.some((item) => {
|
|
65
|
+
if (!(item instanceof Error))
|
|
66
|
+
return false;
|
|
67
|
+
const code = item.code;
|
|
68
|
+
return typeof code === 'string' && ['ECONNRESET', 'ECONNREFUSED', 'ENOTFOUND', 'EAI_AGAIN', 'ETIMEDOUT', 'EPIPE'].includes(code);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
function isWhoamiUnavailable(error) {
|
|
74
|
+
if (error instanceof AisHttpError) {
|
|
75
|
+
return error.status === 429 || error.status >= 500;
|
|
76
|
+
}
|
|
77
|
+
if (error instanceof AisRequestTimeoutError)
|
|
78
|
+
return true;
|
|
79
|
+
return isFetchNetworkError(error);
|
|
80
|
+
}
|
|
81
|
+
function parseConfirmedAgentId(result) {
|
|
82
|
+
const parsed = z.object({ success: z.literal(true), data: z.object({
|
|
83
|
+
id: z.string().optional(), agentId: z.string().optional(),
|
|
84
|
+
}) }).safeParse(result);
|
|
85
|
+
if (!parsed.success)
|
|
86
|
+
return null;
|
|
87
|
+
return parsed.data.data.id ?? parsed.data.data.agentId ?? null;
|
|
88
|
+
}
|
|
89
|
+
export function identityCredentialFingerprint(kind, credential) {
|
|
90
|
+
return `${kind}:${createHash('sha256').update(credential).digest('hex')}`;
|
|
91
|
+
}
|
|
92
|
+
export function clearPinnedIdentityConfirmation(pin, credentialKey) {
|
|
93
|
+
if (!pin)
|
|
94
|
+
return;
|
|
95
|
+
if (credentialKey === undefined) {
|
|
96
|
+
clearConfirmationsForAgent(pin.agentId);
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
confirmations.delete(confirmationKey(pin.agentId, credentialKey));
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Lists leftover per-harness manifest files from the removed machine-wide pin.
|
|
103
|
+
* They are read by nothing; doctor only reports them so a human can delete
|
|
104
|
+
* them deliberately. Never deletes anything.
|
|
105
|
+
*/
|
|
106
|
+
export function legacyHarnessManifests(home = homedir()) {
|
|
107
|
+
try {
|
|
108
|
+
const dir = join(home, ...LEGACY_HARNESS_DIR);
|
|
109
|
+
return readdirSync(dir).filter((name) => name.endsWith('.json')).sort().map((name) => join(dir, name));
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
return [];
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/** Reads this process's own identity. No file, no shared state, no machine-wide pin. */
|
|
116
|
+
export function loadSessionIdentity(env = process.env) {
|
|
117
|
+
// Trim before validating: secret injection (a sourced .env file, a CI secret,
|
|
118
|
+
// a Kubernetes secret mount) commonly appends a trailing newline. This runs
|
|
119
|
+
// BEFORE main()'s agent-API-key check, so an untrimmed value failed the
|
|
120
|
+
// agentId regex here and killed the process with a raw schema error — agent
|
|
121
|
+
// API key mode could never engage even though its own loader trims for
|
|
122
|
+
// exactly this reason (CORBOT-D8D35CF0).
|
|
123
|
+
const agentId = env['AIS_AGENT_ID']?.trim();
|
|
124
|
+
if (agentId === undefined || agentId === '')
|
|
125
|
+
return null;
|
|
126
|
+
return sessionIdentitySchema.parse({ version: 1, source: 'env', agentId });
|
|
127
|
+
}
|
|
128
|
+
/** The identity this session holds after a successful in-session agent_load switch. */
|
|
129
|
+
export function switchedTo(previous, agentId) {
|
|
130
|
+
return sessionIdentitySchema.parse({ version: previous.version, source: 'agent_load', agentId });
|
|
131
|
+
}
|
|
132
|
+
export function assertPinnedAgent(pin, agentId) {
|
|
133
|
+
if (!pin)
|
|
134
|
+
return;
|
|
135
|
+
if (pin.agentId !== agentId) {
|
|
136
|
+
clearConfirmationsForAgent(pin.agentId);
|
|
137
|
+
throw new Error(`Identity gate: expected ${pin.agentId}, received ${agentId}. Writes stopped. ${IDENTITY_REPAIR}`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/** Verify the same whoami response exposed by the selected auth adapter, before every mutation. */
|
|
141
|
+
export async function verifyPinnedIdentity(pin, agentId, whoami, options) {
|
|
142
|
+
if (!pin)
|
|
143
|
+
return;
|
|
144
|
+
assertPinnedAgent(pin, agentId);
|
|
145
|
+
const credentialKey = options.credentialKey;
|
|
146
|
+
const clock = options.clock ?? Date.now;
|
|
147
|
+
const sleep = options.sleep ?? defaultSleep;
|
|
148
|
+
for (let attempt = 0; attempt <= WHOAMI_RETRY_BACKOFF_MS.length; attempt += 1) {
|
|
149
|
+
let result;
|
|
150
|
+
try {
|
|
151
|
+
result = await whoami();
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
if (!isWhoamiUnavailable(error)) {
|
|
155
|
+
clearConfirmationsForAgent(pin.agentId);
|
|
156
|
+
throw new Error(`Identity gate: whoami did not confirm ${agentId}. Writes stopped. ${IDENTITY_REPAIR}`);
|
|
157
|
+
}
|
|
158
|
+
const backoffMs = WHOAMI_RETRY_BACKOFF_MS[attempt];
|
|
159
|
+
if (backoffMs !== undefined) {
|
|
160
|
+
await sleep(backoffMs);
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
if (!options.freshOnly && hasRecentConfirmation(agentId, credentialKey, clock()))
|
|
164
|
+
return;
|
|
165
|
+
throw new Error(`Identity gate: whoami unavailable for ${agentId}. Writes stopped. ${IDENTITY_REPAIR}`);
|
|
166
|
+
}
|
|
167
|
+
if (parseConfirmedAgentId(result) === agentId) {
|
|
168
|
+
rememberConfirmation(agentId, credentialKey, clock());
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
clearConfirmationsForAgent(pin.agentId);
|
|
172
|
+
throw new Error(`Identity gate: whoami did not confirm ${agentId}. Writes stopped. ${IDENTITY_REPAIR}`);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
export function requiresIdentityGate(name, args) {
|
|
176
|
+
return ['remember', 'handoff', 'dream', 'inbox_send'].includes(name) ||
|
|
177
|
+
(name === 'inbox_read' && args['ack'] === true);
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=session-identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-identity.js","sourceRoot":"","sources":["../src/session-identity.ts"],"names":[],"mappings":"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"}
|
package/dist/telemetry.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type TelemetryEventName = 'auth.device_flow.start' | 'auth.key.success' | 'auth.key.fallback' | 'auth.key.autoenroll' | 'auth.renew.success' | 'auth.renew.retry' | 'auth.renew.hard_expiry' | 'tool.call' | 'ais.http.failure' | 'ais.http.retry';
|
|
1
|
+
export type TelemetryEventName = 'auth.device_flow.start' | 'auth.device_flow.resume' | 'auth.key.success' | 'auth.key.fallback' | 'auth.key.autoenroll' | 'auth.renew.success' | 'auth.renew.retry' | 'auth.renew.hard_expiry' | 'tool.call' | 'ais.http.failure' | 'ais.http.retry';
|
|
2
2
|
export interface TelemetryEvent {
|
|
3
3
|
event: TelemetryEventName;
|
|
4
4
|
ts: string;
|
package/dist/telemetry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AA+BzC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AAEnD,gEAAgE;AAChE,MAAM,UAAU,kBAAkB;IAChC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrE,OAAO,GAAG,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC9C,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACzE,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,aAAa,CAAC,KAAmD;IAC/E,IAAI,CAAC,kBAAkB,EAAE;QAAE,OAAO;IAClC,MAAM,OAAO,GAAmB;QAC9B,GAAG,KAAK;QACR,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACzC,CAAC;IACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC7E,CAAC"}
|
package/dist/tool-args.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ export declare const rememberArgsSchema: z.ZodObject<{
|
|
|
18
18
|
task: "task";
|
|
19
19
|
}>>>;
|
|
20
20
|
importance: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
21
|
+
tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
21
22
|
}, z.core.$strip>;
|
|
22
23
|
export declare const recallArgsSchema: z.ZodObject<{
|
|
23
24
|
principalAgentId: z.ZodOptional<z.ZodString>;
|
|
@@ -31,6 +32,7 @@ export declare const recallArgsSchema: z.ZodObject<{
|
|
|
31
32
|
goal: "goal";
|
|
32
33
|
task: "task";
|
|
33
34
|
}>>;
|
|
35
|
+
tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
34
36
|
}, z.core.$strip>;
|
|
35
37
|
export declare const handoffArgsSchema: z.ZodObject<{
|
|
36
38
|
summary: z.ZodOptional<z.ZodString>;
|
|
@@ -44,7 +46,16 @@ export declare const agentLoadArgsSchema: z.ZodObject<{
|
|
|
44
46
|
}, z.core.$strip>;
|
|
45
47
|
/** Tools with no parameters — reject unexpected keys. */
|
|
46
48
|
export declare const emptyArgsSchema: z.ZodObject<{}, z.core.$strict>;
|
|
47
|
-
/**
|
|
49
|
+
/**
|
|
50
|
+
* full_context: optional delegated-read principal + configurable memory limit (CORBOT-45FE6ECE).
|
|
51
|
+
*
|
|
52
|
+
* `maxTokens` mirrors the server's own bounds — MIN_MAX_TOKENS/MAX_MAX_TOKENS in
|
|
53
|
+
* packages/agent-identity-service/src/api/routes/full-context.ts. This package ships
|
|
54
|
+
* standalone to npm and cannot import from agent-identity-service, so the range is
|
|
55
|
+
* duplicated here on purpose; keep it in sync by hand if the server side changes.
|
|
56
|
+
*/
|
|
57
|
+
export declare const FULL_CONTEXT_MIN_MAX_TOKENS = 500;
|
|
58
|
+
export declare const FULL_CONTEXT_MAX_MAX_TOKENS = 20000;
|
|
48
59
|
export declare const fullContextArgsSchema: z.ZodObject<{
|
|
49
60
|
principalAgentId: z.ZodOptional<z.ZodString>;
|
|
50
61
|
memoriesLimit: z.ZodOptional<z.ZodNumber>;
|
|
@@ -53,6 +64,7 @@ export declare const fullContextArgsSchema: z.ZodObject<{
|
|
|
53
64
|
lean: "lean";
|
|
54
65
|
bootstrap: "bootstrap";
|
|
55
66
|
}>>;
|
|
67
|
+
maxTokens: z.ZodOptional<z.ZodNumber>;
|
|
56
68
|
}, z.core.$strict>;
|
|
57
69
|
export declare const INBOX_MAX_BODY_CHARS = 8000;
|
|
58
70
|
export declare const INBOX_MAX_TASK_ID_CHARS = 128;
|
package/dist/tool-args.js
CHANGED
|
@@ -8,6 +8,13 @@ export const MAX_MEMORY_CONTENT_LENGTH = 256 * 1024;
|
|
|
8
8
|
/** Max recall limit (matches AIS memory-handlers). */
|
|
9
9
|
export const MAX_QUERY_LIMIT = 100;
|
|
10
10
|
const memoryTypeSchema = z.enum(['fact', 'event', 'lesson', 'context', 'goal', 'task']);
|
|
11
|
+
/**
|
|
12
|
+
* Memory tags (Jaire C5). The service trims, lower-cases, de-duplicates and
|
|
13
|
+
* validates them (1-64 chars of a-z 0-9 . _ : -, at most 20); this only
|
|
14
|
+
* checks the shape.
|
|
15
|
+
*/
|
|
16
|
+
const tagsArgSchema = z.array(z.string({ message: 'tags must be strings' }), { message: 'tags must be an array of strings' })
|
|
17
|
+
.max(20, 'a memory can carry at most 20 tags');
|
|
11
18
|
export const rememberArgsSchema = z.object({
|
|
12
19
|
content: z
|
|
13
20
|
.string({ message: 'content is required and must be a string' })
|
|
@@ -15,6 +22,7 @@ export const rememberArgsSchema = z.object({
|
|
|
15
22
|
.max(MAX_MEMORY_CONTENT_LENGTH, `content exceeds maximum length of ${MAX_MEMORY_CONTENT_LENGTH} bytes`),
|
|
16
23
|
type: memoryTypeSchema.optional().default('context'),
|
|
17
24
|
importance: z.number().min(0).max(1).optional().default(0.5),
|
|
25
|
+
tags: tagsArgSchema.optional(),
|
|
18
26
|
});
|
|
19
27
|
/**
|
|
20
28
|
* Optional delegated-read principal (CORBOT-3785D10D).
|
|
@@ -34,6 +42,8 @@ export const recallArgsSchema = z.object({
|
|
|
34
42
|
.max(MAX_MEMORY_CONTENT_LENGTH, `query exceeds maximum length of ${MAX_MEMORY_CONTENT_LENGTH} bytes`),
|
|
35
43
|
limit: z.number().int().min(1).max(MAX_QUERY_LIMIT).optional(),
|
|
36
44
|
type: memoryTypeSchema.optional(),
|
|
45
|
+
/** Only memories carrying every one of these tags. */
|
|
46
|
+
tags: tagsArgSchema.optional(),
|
|
37
47
|
});
|
|
38
48
|
export const handoffArgsSchema = z.object({
|
|
39
49
|
summary: z
|
|
@@ -63,13 +73,29 @@ export const agentLoadArgsSchema = z.object({
|
|
|
63
73
|
});
|
|
64
74
|
/** Tools with no parameters — reject unexpected keys. */
|
|
65
75
|
export const emptyArgsSchema = z.object({}).strict();
|
|
66
|
-
/**
|
|
76
|
+
/**
|
|
77
|
+
* full_context: optional delegated-read principal + configurable memory limit (CORBOT-45FE6ECE).
|
|
78
|
+
*
|
|
79
|
+
* `maxTokens` mirrors the server's own bounds — MIN_MAX_TOKENS/MAX_MAX_TOKENS in
|
|
80
|
+
* packages/agent-identity-service/src/api/routes/full-context.ts. This package ships
|
|
81
|
+
* standalone to npm and cannot import from agent-identity-service, so the range is
|
|
82
|
+
* duplicated here on purpose; keep it in sync by hand if the server side changes.
|
|
83
|
+
*/
|
|
84
|
+
export const FULL_CONTEXT_MIN_MAX_TOKENS = 500;
|
|
85
|
+
export const FULL_CONTEXT_MAX_MAX_TOKENS = 20_000;
|
|
67
86
|
export const fullContextArgsSchema = z
|
|
68
87
|
.object({
|
|
69
88
|
principalAgentId: principalAgentIdSchema.optional(),
|
|
70
89
|
memoriesLimit: z.number().int().min(1).max(50).optional(),
|
|
71
90
|
/** View mode: full (default), lean (bounded), bootstrap (cross-harness session start). */
|
|
72
91
|
view: z.enum(['full', 'lean', 'bootstrap']).optional(),
|
|
92
|
+
/** Token ceiling for the bounded views (lean, bootstrap). */
|
|
93
|
+
maxTokens: z
|
|
94
|
+
.number()
|
|
95
|
+
.int()
|
|
96
|
+
.min(FULL_CONTEXT_MIN_MAX_TOKENS)
|
|
97
|
+
.max(FULL_CONTEXT_MAX_MAX_TOKENS)
|
|
98
|
+
.optional(),
|
|
73
99
|
})
|
|
74
100
|
.strict();
|
|
75
101
|
// ── Agent inbox (CORBOT-7115B8AE) ───────────────────────────────────────
|
package/dist/tool-args.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-args.js","sourceRoot":"","sources":["../src/tool-args.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,2EAA2E;AAC3E,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,GAAG,IAAI,CAAC;AAEpD,sDAAsD;AACtD,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAC;AAEnC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAExF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,OAAO,EAAE,CAAC;SACP,MAAM,CAAC,EAAE,OAAO,EAAE,0CAA0C,EAAE,CAAC;SAC/D,GAAG,CAAC,CAAC,EAAE,0CAA0C,CAAC;SAClD,GAAG,CACF,yBAAyB,EACzB,qCAAqC,yBAAyB,QAAQ,CACvE;IACH,IAAI,EAAE,gBAAgB,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;IACpD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-args.js","sourceRoot":"","sources":["../src/tool-args.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -31,6 +31,36 @@ export interface AgentHandoff {
|
|
|
31
31
|
taskContext: string;
|
|
32
32
|
createdAt: string;
|
|
33
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* The server's load receipt (CORBOT-2DDFC7A0): what a context load actually
|
|
36
|
+
* selected, what it left out and why, and the NAME and VERSION of the rule
|
|
37
|
+
* that decided. Mirrors the AIS response shape structurally — agentmemory is
|
|
38
|
+
* published standalone and cannot import the service's own types — so it is
|
|
39
|
+
* deliberately permissive: unknown reasons and extra fields pass through
|
|
40
|
+
* rather than failing the load. Absent when the server predates the field.
|
|
41
|
+
*/
|
|
42
|
+
export interface LoadReceiptSection {
|
|
43
|
+
section: string;
|
|
44
|
+
count: number;
|
|
45
|
+
bytes: number;
|
|
46
|
+
}
|
|
47
|
+
export interface LoadReceiptOmission {
|
|
48
|
+
section: string;
|
|
49
|
+
reason: string;
|
|
50
|
+
detail: string;
|
|
51
|
+
droppedCount?: number;
|
|
52
|
+
}
|
|
53
|
+
export interface LoadReceipt {
|
|
54
|
+
rule: {
|
|
55
|
+
name: string;
|
|
56
|
+
version: string;
|
|
57
|
+
description: string;
|
|
58
|
+
};
|
|
59
|
+
view: string;
|
|
60
|
+
loaded: LoadReceiptSection[];
|
|
61
|
+
omitted: LoadReceiptOmission[];
|
|
62
|
+
totalBytes: number;
|
|
63
|
+
}
|
|
34
64
|
export interface AgentContext {
|
|
35
65
|
identity: AgentIdentity;
|
|
36
66
|
personality: AgentPersonality | null;
|
|
@@ -42,4 +72,6 @@ export interface AgentContext {
|
|
|
42
72
|
lastHandoff: AgentHandoff | null;
|
|
43
73
|
assembledAt: string;
|
|
44
74
|
totalTokens: number;
|
|
75
|
+
/** Null when the server returned no receipt (older AIS deployment). */
|
|
76
|
+
receipt: LoadReceipt | null;
|
|
45
77
|
}
|
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
* No device flow, no OAuth credential file, no DID key-auth.
|
|
8
8
|
*
|
|
9
9
|
* Server-side contract: the key authenticates ONLY
|
|
10
|
-
* `/v1/agents/:agentId/{memory,goals,dream,full-context}
|
|
10
|
+
* `/v1/agents/:agentId/{memory,goals,dream,full-context,inbox,handoff}`
|
|
11
|
+
* (ALLOWED_AGENT_SUBRESOURCES in workspaceKeyAuth.ts), but unlike
|
|
11
12
|
* agent API keys, a workspace key may be granted access to multiple
|
|
12
13
|
* agents. `agent_load` is supported: it switches the active agent by
|
|
13
14
|
* probing the new agent's memory endpoint; a 403 AGENT_NOT_GRANTED
|
|
@@ -16,9 +17,14 @@
|
|
|
16
17
|
* Precedence: workspace key -> agent API key -> DID/device flow.
|
|
17
18
|
*/
|
|
18
19
|
import { AisHttpError, duplicateMemoryResult } from './ais-http-error.js';
|
|
20
|
+
import { getAisRequestTimeoutMs, toAisRequestError } from './request-timeout.js';
|
|
19
21
|
import { emitTelemetry } from './telemetry.js';
|
|
20
22
|
import { OutOfScopeToolError } from './agent-key-mode.js';
|
|
21
|
-
import {
|
|
23
|
+
import { readInboxAndMaybeAck } from './inbox-client.js';
|
|
24
|
+
import { orient } from './cli/orientation.js';
|
|
25
|
+
import { AGENT_ARCHIVE_KEY_MODE_DETAIL } from './agent-archive.js';
|
|
26
|
+
import { fetchCredentialWhoami } from './credential-whoami.js';
|
|
27
|
+
import { parseEmptyToolArgs, parseRecallArgs, parseFullContextArgs, parseRememberArgs, parseAgentLoadArgs, parseGoalCreateArgs, parseGoalListArgs, parseGoalUpdateProgressArgs, parseGoalCompleteArgs, parseInboxSendArgs, parseInboxReadArgs, parseInboxAckArgs, parseHandoffArgs, } from './tool-args.js';
|
|
22
28
|
/** Thrown by loadWorkspaceKeyConfig when AIS_WORKSPACE_KEY is set without AIS_AGENT_ID. */
|
|
23
29
|
export class WorkspaceKeyConfigError extends Error {
|
|
24
30
|
constructor(message) {
|
|
@@ -88,13 +94,20 @@ export async function wksKeyPost(aisUrl, path, workspaceKey, body, fetchImpl = g
|
|
|
88
94
|
'Content-Type': 'application/json',
|
|
89
95
|
'x-workspace-key': workspaceKey,
|
|
90
96
|
};
|
|
97
|
+
const timeoutMs = getAisRequestTimeoutMs();
|
|
91
98
|
let res;
|
|
92
99
|
try {
|
|
93
|
-
res = await fetchImpl(`${aisUrl}${path}`, {
|
|
100
|
+
res = await fetchImpl(`${aisUrl}${path}`, {
|
|
101
|
+
method: 'POST',
|
|
102
|
+
headers,
|
|
103
|
+
body: JSON.stringify(body),
|
|
104
|
+
signal: AbortSignal.timeout(timeoutMs),
|
|
105
|
+
});
|
|
94
106
|
}
|
|
95
107
|
catch (err) {
|
|
96
|
-
|
|
97
|
-
|
|
108
|
+
const wrapped = toAisRequestError(err, path, timeoutMs);
|
|
109
|
+
emitTelemetry({ event: 'ais.http.failure', path, error: wrapped instanceof Error ? wrapped.message : String(wrapped) });
|
|
110
|
+
throw wrapped;
|
|
98
111
|
}
|
|
99
112
|
const data = await readJson(res);
|
|
100
113
|
if (!res.ok) {
|
|
@@ -104,13 +117,18 @@ export async function wksKeyPost(aisUrl, path, workspaceKey, body, fetchImpl = g
|
|
|
104
117
|
return data;
|
|
105
118
|
}
|
|
106
119
|
export async function wksKeyGet(aisUrl, path, workspaceKey, fetchImpl = globalThis.fetch) {
|
|
120
|
+
const timeoutMs = getAisRequestTimeoutMs();
|
|
107
121
|
let res;
|
|
108
122
|
try {
|
|
109
|
-
res = await fetchImpl(`${aisUrl}${path}`, {
|
|
123
|
+
res = await fetchImpl(`${aisUrl}${path}`, {
|
|
124
|
+
headers: { 'x-workspace-key': workspaceKey },
|
|
125
|
+
signal: AbortSignal.timeout(timeoutMs),
|
|
126
|
+
});
|
|
110
127
|
}
|
|
111
128
|
catch (err) {
|
|
112
|
-
|
|
113
|
-
|
|
129
|
+
const wrapped = toAisRequestError(err, path, timeoutMs);
|
|
130
|
+
emitTelemetry({ event: 'ais.http.failure', path, error: wrapped instanceof Error ? wrapped.message : String(wrapped) });
|
|
131
|
+
throw wrapped;
|
|
114
132
|
}
|
|
115
133
|
const data = await readJson(res);
|
|
116
134
|
if (!res.ok) {
|
|
@@ -124,13 +142,20 @@ export async function wksKeyPatch(aisUrl, path, workspaceKey, body, fetchImpl =
|
|
|
124
142
|
'Content-Type': 'application/json',
|
|
125
143
|
'x-workspace-key': workspaceKey,
|
|
126
144
|
};
|
|
145
|
+
const timeoutMs = getAisRequestTimeoutMs();
|
|
127
146
|
let res;
|
|
128
147
|
try {
|
|
129
|
-
res = await fetchImpl(`${aisUrl}${path}`, {
|
|
148
|
+
res = await fetchImpl(`${aisUrl}${path}`, {
|
|
149
|
+
method: 'PATCH',
|
|
150
|
+
headers,
|
|
151
|
+
body: JSON.stringify(body),
|
|
152
|
+
signal: AbortSignal.timeout(timeoutMs),
|
|
153
|
+
});
|
|
130
154
|
}
|
|
131
155
|
catch (err) {
|
|
132
|
-
|
|
133
|
-
|
|
156
|
+
const wrapped = toAisRequestError(err, path, timeoutMs);
|
|
157
|
+
emitTelemetry({ event: 'ais.http.failure', path, error: wrapped instanceof Error ? wrapped.message : String(wrapped) });
|
|
158
|
+
throw wrapped;
|
|
134
159
|
}
|
|
135
160
|
const data = await readJson(res);
|
|
136
161
|
if (!res.ok) {
|
|
@@ -152,6 +177,7 @@ export async function dispatchToolWorkspaceKeyMode(aisUrl, config, name, rawArgs
|
|
|
152
177
|
content: args.content,
|
|
153
178
|
type: args.type,
|
|
154
179
|
importance: args.importance,
|
|
180
|
+
...(args.tags !== undefined && { tags: args.tags }),
|
|
155
181
|
}, fetchImpl);
|
|
156
182
|
}
|
|
157
183
|
catch (err) {
|
|
@@ -170,6 +196,8 @@ export async function dispatchToolWorkspaceKeyMode(aisUrl, config, name, rawArgs
|
|
|
170
196
|
params.set('limit', String(args.limit));
|
|
171
197
|
if (args.type !== undefined)
|
|
172
198
|
params.set('types', args.type);
|
|
199
|
+
if (args.tags !== undefined && args.tags.length > 0)
|
|
200
|
+
params.set('tags', args.tags.join(','));
|
|
173
201
|
if (args.principalAgentId !== undefined) {
|
|
174
202
|
params.set('principalAgentId', args.principalAgentId);
|
|
175
203
|
}
|
|
@@ -182,6 +210,10 @@ export async function dispatchToolWorkspaceKeyMode(aisUrl, config, name, rawArgs
|
|
|
182
210
|
fcParams.set('principalAgentId', fcArgs.principalAgentId);
|
|
183
211
|
if (fcArgs.memoriesLimit !== undefined)
|
|
184
212
|
fcParams.set('memoriesLimit', String(fcArgs.memoriesLimit));
|
|
213
|
+
if (fcArgs.view !== undefined)
|
|
214
|
+
fcParams.set('view', fcArgs.view);
|
|
215
|
+
if (fcArgs.maxTokens !== undefined)
|
|
216
|
+
fcParams.set('maxTokens', String(fcArgs.maxTokens));
|
|
185
217
|
const fcQs = fcParams.toString();
|
|
186
218
|
const fcPath = `/v1/agents/${agentId}/full-context${fcQs ? `?${fcQs}` : ''}`;
|
|
187
219
|
return wksKeyGet(aisUrl, fcPath, workspaceKey, fetchImpl);
|
|
@@ -191,16 +223,15 @@ export async function dispatchToolWorkspaceKeyMode(aisUrl, config, name, rawArgs
|
|
|
191
223
|
return wksKeyPost(aisUrl, `/v1/agents/${agentId}/dream`, workspaceKey, {}, fetchImpl);
|
|
192
224
|
case 'whoami': {
|
|
193
225
|
parseEmptyToolArgs(rawArgs);
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
data: {
|
|
198
|
-
agentId,
|
|
199
|
-
authMode: 'workspace-key',
|
|
200
|
-
keyValid: true,
|
|
201
|
-
},
|
|
202
|
-
};
|
|
226
|
+
// Same passthrough as agent-key mode (CORBOT-49535E96): ask AIS what this
|
|
227
|
+
// key can do, fall back to the liveness probe on an older server.
|
|
228
|
+
return fetchCredentialWhoami(agentId, 'workspace-key', () => wksKeyGet(aisUrl, `/v1/agents/${agentId}/whoami`, workspaceKey, fetchImpl), () => wksKeyGet(aisUrl, `/v1/agents/${agentId}/memory?limit=1`, workspaceKey, fetchImpl));
|
|
203
229
|
}
|
|
230
|
+
case 'orientation_check':
|
|
231
|
+
// Pure, read-only, local comparison — no AIS round trip, no scope check
|
|
232
|
+
// needed. orient() validates its own input and throws on a malformed
|
|
233
|
+
// manifest; the caller's outer catch turns that into an {error} result.
|
|
234
|
+
return orient(rawArgs);
|
|
204
235
|
case 'agent_load': {
|
|
205
236
|
const args = parseAgentLoadArgs(rawArgs);
|
|
206
237
|
const targetAgentId = args.query.trim();
|
|
@@ -254,12 +285,55 @@ export async function dispatchToolWorkspaceKeyMode(aisUrl, config, name, rawArgs
|
|
|
254
285
|
...(args.lessonsLearned !== undefined ? { lessonsLearned: args.lessonsLearned } : {}),
|
|
255
286
|
}, fetchImpl);
|
|
256
287
|
}
|
|
257
|
-
//
|
|
258
|
-
//
|
|
259
|
-
//
|
|
260
|
-
//
|
|
261
|
-
|
|
262
|
-
|
|
288
|
+
// CORBOT-E894A10A: inbox and handoff are in the workspace key's scope. They
|
|
289
|
+
// were added to the server allowlist (ALLOWED_AGENT_SUBRESOURCES in
|
|
290
|
+
// workspaceKeyAuth.ts) on 2026-09-16 by CORBOT-11E4535B; the four cases
|
|
291
|
+
// below forward what the server already permits. Each is scoped by the
|
|
292
|
+
// explicit (key, agent) grant row server-side, so an agent this key was not
|
|
293
|
+
// granted is still 403 — exactly as for memory, goals, dream and
|
|
294
|
+
// full-context above. Payload shapes mirror agent-key-mode.ts so a caller
|
|
295
|
+
// sees the same contract in either auth mode.
|
|
296
|
+
case 'inbox_send': {
|
|
297
|
+
const args = parseInboxSendArgs(rawArgs);
|
|
298
|
+
return wksKeyPost(aisUrl, `/v1/agents/${agentId}/inbox`, workspaceKey, {
|
|
299
|
+
recipientAgentId: args.recipientAgentId,
|
|
300
|
+
kind: args.kind,
|
|
301
|
+
body: args.body,
|
|
302
|
+
...(args.threadId !== undefined ? { threadId: args.threadId } : {}),
|
|
303
|
+
...(args.taskId !== undefined ? { taskId: args.taskId } : {}),
|
|
304
|
+
...(args.inReplyTo !== undefined ? { inReplyTo: args.inReplyTo } : {}),
|
|
305
|
+
...(args.messageId !== undefined ? { messageId: args.messageId } : {}),
|
|
306
|
+
...(args.ttlSeconds !== undefined ? { ttlSeconds: args.ttlSeconds } : {}),
|
|
307
|
+
}, fetchImpl);
|
|
308
|
+
}
|
|
309
|
+
case 'inbox_read': {
|
|
310
|
+
const args = parseInboxReadArgs(rawArgs);
|
|
311
|
+
const params = new URLSearchParams();
|
|
312
|
+
if (args.cursor !== undefined)
|
|
313
|
+
params.set('cursor', args.cursor);
|
|
314
|
+
params.set('limit', String(args.limit));
|
|
315
|
+
params.set('unreadOnly', String(args.unreadOnly));
|
|
316
|
+
return readInboxAndMaybeAck(args, () => wksKeyGet(aisUrl, `/v1/agents/${agentId}/inbox?${params}`, workspaceKey, fetchImpl), (messageIds) => wksKeyPost(aisUrl, `/v1/agents/${agentId}/inbox/ack`, workspaceKey, { messageIds }, fetchImpl));
|
|
317
|
+
}
|
|
318
|
+
case 'inbox_ack': {
|
|
319
|
+
const args = parseInboxAckArgs(rawArgs);
|
|
320
|
+
return wksKeyPost(aisUrl, `/v1/agents/${agentId}/inbox/ack`, workspaceKey, { messageIds: args.messageIds }, fetchImpl);
|
|
321
|
+
}
|
|
322
|
+
case 'handoff': {
|
|
323
|
+
// The route is own-agent only — the service pins the path agent to the
|
|
324
|
+
// active agent — so the agent id comes from the config, never from the
|
|
325
|
+
// caller's arguments.
|
|
326
|
+
const args = parseHandoffArgs(rawArgs);
|
|
327
|
+
return wksKeyPost(aisUrl, `/v1/agents/${agentId}/handoff`, workspaceKey, {
|
|
328
|
+
...(args.summary !== undefined ? { summary: args.summary } : {}),
|
|
329
|
+
...(args.keyLearnings !== undefined ? { keyLearnings: args.keyLearnings } : {}),
|
|
330
|
+
...(args.docPath !== undefined ? { docPath: args.docPath } : {}),
|
|
331
|
+
...(args.docPrUrl !== undefined ? { docPrUrl: args.docPrUrl } : {}),
|
|
332
|
+
}, fetchImpl);
|
|
333
|
+
}
|
|
334
|
+
case 'agent_archive':
|
|
335
|
+
case 'agent_delete':
|
|
336
|
+
throw new OutOfScopeToolError(name, AGENT_ARCHIVE_KEY_MODE_DETAIL);
|
|
263
337
|
default:
|
|
264
338
|
return UNKNOWN_TOOL_WORKSPACE_KEY_MODE;
|
|
265
339
|
}
|