@dbx-tools/appkit-memory 0.0.0-stage → 0.9.132
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/LICENSE +202 -0
- package/README.md +116 -2
- package/index.ts +17 -0
- package/lib/index.d.ts +13 -0
- package/lib/index.js +14 -0
- package/lib/smoke/mastra-tool.d.ts +1 -0
- package/lib/smoke/mastra-tool.js +46 -0
- package/lib/src/_contracts.d.ts +71 -0
- package/lib/src/_contracts.js +63 -0
- package/lib/src/_mastra.d.ts +11 -0
- package/lib/src/_mastra.js +66 -0
- package/lib/src/config.d.ts +70 -0
- package/lib/src/config.js +87 -0
- package/lib/src/databricks/_runtime.d.ts +18 -0
- package/lib/src/databricks/_runtime.js +79 -0
- package/lib/src/databricks/client.d.ts +48 -0
- package/lib/src/databricks/client.js +174 -0
- package/lib/src/databricks/index.d.ts +3 -0
- package/lib/src/databricks/index.js +6 -0
- package/lib/src/graphiti/_backend.d.ts +9 -0
- package/lib/src/graphiti/_backend.js +214 -0
- package/lib/src/graphiti/index.d.ts +3 -0
- package/lib/src/graphiti/index.js +6 -0
- package/lib/src/graphiti/options.d.ts +7 -0
- package/lib/src/graphiti/options.js +7 -0
- package/lib/src/graphiti/runtime.d.ts +49 -0
- package/lib/src/graphiti/runtime.js +170 -0
- package/lib/src/plugin.d.ts +38 -0
- package/lib/src/plugin.js +196 -0
- package/lib/tsconfig.tsbuildinfo +1 -0
- package/package.json +104 -4
- package/src/_contracts.ts +107 -0
- package/src/_mastra.ts +80 -0
- package/src/config.ts +134 -0
- package/src/databricks/_runtime.ts +103 -0
- package/src/databricks/client.ts +251 -0
- package/src/databricks/index.ts +7 -0
- package/src/graphiti/_backend.ts +282 -0
- package/src/graphiti/index.ts +7 -0
- package/src/graphiti/options.ts +17 -0
- package/src/graphiti/runtime.ts +261 -0
- package/src/plugin.ts +254 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optional Mastra output-processor attachment.
|
|
3
|
+
*
|
|
4
|
+
* Loaded only when the memory plugin finds a registered Mastra sibling.
|
|
5
|
+
*
|
|
6
|
+
* @module
|
|
7
|
+
*/
|
|
8
|
+
import { pluginRegistry } from "@dbx-tools/appkit";
|
|
9
|
+
import { errorUtils, log, object } from "@dbx-tools/shared-core";
|
|
10
|
+
const logger = log.logger("memory/mastra");
|
|
11
|
+
/** Attach a memory-owned turn saver through Mastra's generic processor extension. */
|
|
12
|
+
export async function attachMastraTurnSaver(context, saveTurn) {
|
|
13
|
+
const mastraModule = await import("@dbx-tools/appkit-mastra");
|
|
14
|
+
const plugin = pluginRegistry.instance(context, mastraModule.mastra);
|
|
15
|
+
if (!plugin)
|
|
16
|
+
return false;
|
|
17
|
+
plugin.exports().registerOutputProcessor((agentId) => ({
|
|
18
|
+
id: `appkit_memory_${agentId}`,
|
|
19
|
+
name: "AppKit memory turn saver",
|
|
20
|
+
description: "Saves completed turns to the configured fallback memory backend.",
|
|
21
|
+
processOutputResult: async ({ messageList, requestContext, abortSignal }) => {
|
|
22
|
+
const scope = mastraModule.memory.requestMemoryScope(requestContext);
|
|
23
|
+
if (!scope)
|
|
24
|
+
return messageList;
|
|
25
|
+
const actorId = typeof scope.resource === "string" ? scope.resource : undefined;
|
|
26
|
+
const threadId = typeof scope.thread === "string" ? scope.thread : undefined;
|
|
27
|
+
if (!actorId || !threadId)
|
|
28
|
+
return messageList;
|
|
29
|
+
const user = latestText(messageList.get.input.db(), "user");
|
|
30
|
+
const assistant = latestText(messageList.get.response.db(), "assistant");
|
|
31
|
+
if (!user || !assistant)
|
|
32
|
+
return messageList;
|
|
33
|
+
try {
|
|
34
|
+
await saveTurn({
|
|
35
|
+
agentId,
|
|
36
|
+
actorId,
|
|
37
|
+
threadId,
|
|
38
|
+
user,
|
|
39
|
+
assistant,
|
|
40
|
+
}, abortSignal);
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
logger.warn("turn save failed", { error: errorUtils.toError(error), agentId });
|
|
44
|
+
}
|
|
45
|
+
return messageList;
|
|
46
|
+
},
|
|
47
|
+
}));
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
function latestText(messages, role) {
|
|
51
|
+
for (let index = messages.length - 1; index >= 0; index -= 1) {
|
|
52
|
+
const message = messages[index];
|
|
53
|
+
if (message?.role !== role)
|
|
54
|
+
continue;
|
|
55
|
+
const text = message.content.parts
|
|
56
|
+
.flatMap((part) => object.isRecord(part) && part.type === "text" && typeof part.text === "string"
|
|
57
|
+
? [part.text]
|
|
58
|
+
: [])
|
|
59
|
+
.join("\n")
|
|
60
|
+
.trim();
|
|
61
|
+
if (text)
|
|
62
|
+
return text;
|
|
63
|
+
}
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX21hc3RyYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fbWFzdHJhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUlqRSxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBTzNDLHFGQUFxRjtBQUNyRixNQUFNLENBQUMsS0FBSyxVQUFVLHFCQUFxQixDQUN6QyxPQUF5QyxFQUN6QyxRQUFtRTtJQUVuRSxNQUFNLFlBQVksR0FBRyxNQUFNLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQzlELE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyRSxJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQzFCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNyRCxFQUFFLEVBQUUsaUJBQWlCLE9BQU8sRUFBRTtRQUM5QixJQUFJLEVBQUUsMEJBQTBCO1FBQ2hDLFdBQVcsRUFBRSxrRUFBa0U7UUFDL0UsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFO1lBQzFFLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLEtBQUs7Z0JBQUUsT0FBTyxXQUFXLENBQUM7WUFDL0IsTUFBTSxPQUFPLEdBQUcsT0FBTyxLQUFLLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ2hGLE1BQU0sUUFBUSxHQUFHLE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUM3RSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsUUFBUTtnQkFBRSxPQUFPLFdBQVcsQ0FBQztZQUM5QyxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDNUQsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3pFLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTO2dCQUFFLE9BQU8sV0FBVyxDQUFDO1lBQzVDLElBQUksQ0FBQztnQkFDSCxNQUFNLFFBQVEsQ0FDWjtvQkFDRSxPQUFPO29CQUNQLE9BQU87b0JBQ1AsUUFBUTtvQkFDUixJQUFJO29CQUNKLFNBQVM7aUJBQ1YsRUFDRCxXQUFXLENBQ1osQ0FBQztZQUNKLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ2pGLENBQUM7WUFDRCxPQUFPLFdBQVcsQ0FBQztRQUNyQixDQUFDO0tBQ0YsQ0FBQyxDQUFDLENBQUM7SUFDSixPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FDakIsUUFBa0MsRUFDbEMsSUFBMEI7SUFFMUIsS0FBSyxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUM3RCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsSUFBSSxPQUFPLEVBQUUsSUFBSSxLQUFLLElBQUk7WUFBRSxTQUFTO1FBQ3JDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSzthQUMvQixPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUNoQixNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRO1lBQzVFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDYixDQUFDLENBQUMsRUFBRSxDQUNQO2FBQ0EsSUFBSSxDQUFDLElBQUksQ0FBQzthQUNWLElBQUksRUFBRSxDQUFDO1FBQ1YsSUFBSSxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUM7SUFDeEIsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE9wdGlvbmFsIE1hc3RyYSBvdXRwdXQtcHJvY2Vzc29yIGF0dGFjaG1lbnQuXG4gKlxuICogTG9hZGVkIG9ubHkgd2hlbiB0aGUgbWVtb3J5IHBsdWdpbiBmaW5kcyBhIHJlZ2lzdGVyZWQgTWFzdHJhIHNpYmxpbmcuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IHBsdWdpblJlZ2lzdHJ5IH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG5pbXBvcnQgeyBlcnJvclV0aWxzLCBsb2csIG9iamVjdCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5cbmltcG9ydCB0eXBlIHsgTWVtb3J5VHVybiB9IGZyb20gXCIuL19jb250cmFjdHMudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcIm1lbW9yeS9tYXN0cmFcIik7XG5cbmludGVyZmFjZSBNZW1vcnlNZXNzYWdlIHtcbiAgcmVhZG9ubHkgcm9sZTogc3RyaW5nO1xuICByZWFkb25seSBjb250ZW50OiB7IHJlYWRvbmx5IHBhcnRzOiByZWFkb25seSB1bmtub3duW10gfTtcbn1cblxuLyoqIEF0dGFjaCBhIG1lbW9yeS1vd25lZCB0dXJuIHNhdmVyIHRocm91Z2ggTWFzdHJhJ3MgZ2VuZXJpYyBwcm9jZXNzb3IgZXh0ZW5zaW9uLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGF0dGFjaE1hc3RyYVR1cm5TYXZlcihcbiAgY29udGV4dDogcGx1Z2luUmVnaXN0cnkuUGx1Z2luQ29udGV4dExpa2UsXG4gIHNhdmVUdXJuOiAodHVybjogTWVtb3J5VHVybiwgc2lnbmFsPzogQWJvcnRTaWduYWwpID0+IFByb21pc2U8dm9pZD4sXG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgbWFzdHJhTW9kdWxlID0gYXdhaXQgaW1wb3J0KFwiQGRieC10b29scy9hcHBraXQtbWFzdHJhXCIpO1xuICBjb25zdCBwbHVnaW4gPSBwbHVnaW5SZWdpc3RyeS5pbnN0YW5jZShjb250ZXh0LCBtYXN0cmFNb2R1bGUubWFzdHJhKTtcbiAgaWYgKCFwbHVnaW4pIHJldHVybiBmYWxzZTtcbiAgcGx1Z2luLmV4cG9ydHMoKS5yZWdpc3Rlck91dHB1dFByb2Nlc3NvcigoYWdlbnRJZCkgPT4gKHtcbiAgICBpZDogYGFwcGtpdF9tZW1vcnlfJHthZ2VudElkfWAsXG4gICAgbmFtZTogXCJBcHBLaXQgbWVtb3J5IHR1cm4gc2F2ZXJcIixcbiAgICBkZXNjcmlwdGlvbjogXCJTYXZlcyBjb21wbGV0ZWQgdHVybnMgdG8gdGhlIGNvbmZpZ3VyZWQgZmFsbGJhY2sgbWVtb3J5IGJhY2tlbmQuXCIsXG4gICAgcHJvY2Vzc091dHB1dFJlc3VsdDogYXN5bmMgKHsgbWVzc2FnZUxpc3QsIHJlcXVlc3RDb250ZXh0LCBhYm9ydFNpZ25hbCB9KSA9PiB7XG4gICAgICBjb25zdCBzY29wZSA9IG1hc3RyYU1vZHVsZS5tZW1vcnkucmVxdWVzdE1lbW9yeVNjb3BlKHJlcXVlc3RDb250ZXh0KTtcbiAgICAgIGlmICghc2NvcGUpIHJldHVybiBtZXNzYWdlTGlzdDtcbiAgICAgIGNvbnN0IGFjdG9ySWQgPSB0eXBlb2Ygc2NvcGUucmVzb3VyY2UgPT09IFwic3RyaW5nXCIgPyBzY29wZS5yZXNvdXJjZSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHRocmVhZElkID0gdHlwZW9mIHNjb3BlLnRocmVhZCA9PT0gXCJzdHJpbmdcIiA/IHNjb3BlLnRocmVhZCA6IHVuZGVmaW5lZDtcbiAgICAgIGlmICghYWN0b3JJZCB8fCAhdGhyZWFkSWQpIHJldHVybiBtZXNzYWdlTGlzdDtcbiAgICAgIGNvbnN0IHVzZXIgPSBsYXRlc3RUZXh0KG1lc3NhZ2VMaXN0LmdldC5pbnB1dC5kYigpLCBcInVzZXJcIik7XG4gICAgICBjb25zdCBhc3Npc3RhbnQgPSBsYXRlc3RUZXh0KG1lc3NhZ2VMaXN0LmdldC5yZXNwb25zZS5kYigpLCBcImFzc2lzdGFudFwiKTtcbiAgICAgIGlmICghdXNlciB8fCAhYXNzaXN0YW50KSByZXR1cm4gbWVzc2FnZUxpc3Q7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBzYXZlVHVybihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgICAgYWN0b3JJZCxcbiAgICAgICAgICAgIHRocmVhZElkLFxuICAgICAgICAgICAgdXNlcixcbiAgICAgICAgICAgIGFzc2lzdGFudCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFib3J0U2lnbmFsLFxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oXCJ0dXJuIHNhdmUgZmFpbGVkXCIsIHsgZXJyb3I6IGVycm9yVXRpbHMudG9FcnJvcihlcnJvciksIGFnZW50SWQgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbWVzc2FnZUxpc3Q7XG4gICAgfSxcbiAgfSkpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gbGF0ZXN0VGV4dChcbiAgbWVzc2FnZXM6IHJlYWRvbmx5IE1lbW9yeU1lc3NhZ2VbXSxcbiAgcm9sZTogXCJ1c2VyXCIgfCBcImFzc2lzdGFudFwiLFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgZm9yIChsZXQgaW5kZXggPSBtZXNzYWdlcy5sZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleCAtPSAxKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IG1lc3NhZ2VzW2luZGV4XTtcbiAgICBpZiAobWVzc2FnZT8ucm9sZSAhPT0gcm9sZSkgY29udGludWU7XG4gICAgY29uc3QgdGV4dCA9IG1lc3NhZ2UuY29udGVudC5wYXJ0c1xuICAgICAgLmZsYXRNYXAoKHBhcnQpID0+XG4gICAgICAgIG9iamVjdC5pc1JlY29yZChwYXJ0KSAmJiBwYXJ0LnR5cGUgPT09IFwidGV4dFwiICYmIHR5cGVvZiBwYXJ0LnRleHQgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICA/IFtwYXJ0LnRleHRdXG4gICAgICAgICAgOiBbXSxcbiAgICAgIClcbiAgICAgIC5qb2luKFwiXFxuXCIpXG4gICAgICAudHJpbSgpO1xuICAgIGlmICh0ZXh0KSByZXR1cm4gdGV4dDtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuIl19
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Top-level AppKit memory plugin configuration.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import type { BasePluginConfig } from "@databricks/appkit";
|
|
7
|
+
import { type GraphitiOptions } from "@dbx-tools/shared-graphiti";
|
|
8
|
+
import type { JSONSchema7 } from "json-schema";
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
export declare const DatabricksMemoryOptionsSchema: z.ZodObject<{
|
|
11
|
+
memoryStore: z.ZodOptional<z.ZodString>;
|
|
12
|
+
mode: z.ZodDefault<z.ZodEnum<{
|
|
13
|
+
auto: "auto";
|
|
14
|
+
required: "required";
|
|
15
|
+
}>>;
|
|
16
|
+
}, z.core.$strict>;
|
|
17
|
+
export type DatabricksMemoryOptions = z.input<typeof DatabricksMemoryOptionsSchema>;
|
|
18
|
+
export declare const MemoryPluginOptionsSchema: z.ZodObject<{
|
|
19
|
+
databricks: z.ZodDefault<z.ZodUnion<readonly [z.ZodLiteral<"auto">, z.ZodBoolean, z.ZodObject<{
|
|
20
|
+
memoryStore: z.ZodOptional<z.ZodString>;
|
|
21
|
+
mode: z.ZodDefault<z.ZodEnum<{
|
|
22
|
+
auto: "auto";
|
|
23
|
+
required: "required";
|
|
24
|
+
}>>;
|
|
25
|
+
}, z.core.$strict>]>>;
|
|
26
|
+
graphiti: z.ZodDefault<z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
|
|
27
|
+
postgresRole: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
28
|
+
profile: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
29
|
+
bearer: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
30
|
+
graphitiHome: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
31
|
+
modelClass: z.ZodOptional<z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
32
|
+
"chat-thinking": "chat-thinking";
|
|
33
|
+
"chat-balanced": "chat-balanced";
|
|
34
|
+
"chat-fast": "chat-fast";
|
|
35
|
+
}>>>>;
|
|
36
|
+
temperature: z.ZodOptional<z.ZodDefault<z.ZodCoercedNumber<number>>>;
|
|
37
|
+
structuredOutputMode: z.ZodOptional<z.ZodDefault<z.ZodString>>;
|
|
38
|
+
startupTimeoutMs: z.ZodOptional<z.ZodDefault<z.ZodCoercedNumber<number>>>;
|
|
39
|
+
listen: z.ZodOptional<z.ZodDefault<z.ZodType<{
|
|
40
|
+
scheme: "tcp";
|
|
41
|
+
host: string;
|
|
42
|
+
port: number;
|
|
43
|
+
}, unknown, z.core.$ZodTypeInternals<{
|
|
44
|
+
scheme: "tcp";
|
|
45
|
+
host: string;
|
|
46
|
+
port: number;
|
|
47
|
+
}, unknown>>>>;
|
|
48
|
+
databaseUrl: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
49
|
+
databaseSchema: z.ZodOptional<z.ZodDefault<z.ZodString>>;
|
|
50
|
+
}, z.core.$strict>]>>;
|
|
51
|
+
saveTurns: z.ZodDefault<z.ZodUnion<readonly [z.ZodLiteral<"auto">, z.ZodBoolean]>>;
|
|
52
|
+
}, z.core.$strict>;
|
|
53
|
+
export type MemoryPluginOptions = z.input<typeof MemoryPluginOptionsSchema>;
|
|
54
|
+
/** AppKit base configuration plus the memory plugin's serialized options. */
|
|
55
|
+
export type MemoryPluginConfig = BasePluginConfig & MemoryPluginOptions;
|
|
56
|
+
/** Resolved Databricks store identity and availability policy. */
|
|
57
|
+
export interface ResolvedDatabricksMemoryOptions {
|
|
58
|
+
readonly memoryStore: string;
|
|
59
|
+
readonly mode: "auto" | "required";
|
|
60
|
+
}
|
|
61
|
+
/** Fully resolved top-level memory configuration. */
|
|
62
|
+
export interface ResolvedMemoryPluginConfig {
|
|
63
|
+
readonly databricks: false | ResolvedDatabricksMemoryOptions;
|
|
64
|
+
readonly graphiti: false | GraphitiOptions;
|
|
65
|
+
readonly saveTurns: "auto" | boolean;
|
|
66
|
+
}
|
|
67
|
+
/** JSON Schema published through the AppKit memory plugin manifest. */
|
|
68
|
+
export declare const MEMORY_CONFIG_SCHEMA: JSONSchema7;
|
|
69
|
+
/** Resolve plugin defaults without parsing unrelated AppKit base fields. */
|
|
70
|
+
export declare function resolveMemoryPluginConfig(config?: MemoryPluginConfig): ResolvedMemoryPluginConfig;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Top-level AppKit memory plugin configuration.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { projectUtils } from "@dbx-tools/core";
|
|
7
|
+
import { stringUtils } from "@dbx-tools/shared-core";
|
|
8
|
+
import { GraphitiOptionsSchema, graphitiOptionOverrides, } from "@dbx-tools/shared-graphiti";
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
export const DatabricksMemoryOptionsSchema = z
|
|
11
|
+
.object({
|
|
12
|
+
memoryStore: z
|
|
13
|
+
.string()
|
|
14
|
+
.trim()
|
|
15
|
+
.min(1)
|
|
16
|
+
.optional()
|
|
17
|
+
.describe("Existing Databricks Agent Memory Store id or resource name."),
|
|
18
|
+
mode: z
|
|
19
|
+
.enum(["auto", "required"])
|
|
20
|
+
.default("auto")
|
|
21
|
+
.describe("Whether an inaccessible managed-memory store falls back or fails."),
|
|
22
|
+
})
|
|
23
|
+
.strict()
|
|
24
|
+
.describe("Databricks managed-memory backend configuration.");
|
|
25
|
+
const GraphitiMemoryOptionsSchema = GraphitiOptionsSchema.partial().describe("Graphiti option overrides for the lazy fallback.");
|
|
26
|
+
export const MemoryPluginOptionsSchema = z
|
|
27
|
+
.object({
|
|
28
|
+
databricks: z
|
|
29
|
+
.union([z.literal("auto"), z.boolean(), DatabricksMemoryOptionsSchema])
|
|
30
|
+
.default("auto")
|
|
31
|
+
.describe("Databricks managed memory mode: auto falls back, true requires access, and false disables it."),
|
|
32
|
+
graphiti: z
|
|
33
|
+
.union([z.boolean(), GraphitiMemoryOptionsSchema])
|
|
34
|
+
.default(true)
|
|
35
|
+
.describe("Lazy Graphiti fallback configuration, enabled by default."),
|
|
36
|
+
saveTurns: z
|
|
37
|
+
.union([z.literal("auto"), z.boolean()])
|
|
38
|
+
.default("auto")
|
|
39
|
+
.describe("Completed-turn saving mode: auto attaches when possible, true requires attachment, and false disables it."),
|
|
40
|
+
})
|
|
41
|
+
.strict()
|
|
42
|
+
.describe("AppKit memory plugin options.");
|
|
43
|
+
/** JSON Schema published through the AppKit memory plugin manifest. */
|
|
44
|
+
export const MEMORY_CONFIG_SCHEMA = z.toJSONSchema(MemoryPluginOptionsSchema);
|
|
45
|
+
/** Resolve plugin defaults without parsing unrelated AppKit base fields. */
|
|
46
|
+
export function resolveMemoryPluginConfig(config = {}) {
|
|
47
|
+
const parsed = MemoryPluginOptionsSchema.parse({
|
|
48
|
+
databricks: config.databricks,
|
|
49
|
+
graphiti: config.graphiti,
|
|
50
|
+
saveTurns: config.saveTurns,
|
|
51
|
+
});
|
|
52
|
+
if (parsed.databricks === false && parsed.graphiti === false) {
|
|
53
|
+
throw new Error("AppKit memory requires at least one enabled backend");
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
databricks: parsed.databricks === false
|
|
57
|
+
? false
|
|
58
|
+
: {
|
|
59
|
+
memoryStore: typeof parsed.databricks === "object" && parsed.databricks.memoryStore
|
|
60
|
+
? resourceId(parsed.databricks.memoryStore, "memory-stores")
|
|
61
|
+
: defaultMemoryStore(),
|
|
62
|
+
mode: parsed.databricks === true
|
|
63
|
+
? "required"
|
|
64
|
+
: typeof parsed.databricks === "object"
|
|
65
|
+
? parsed.databricks.mode
|
|
66
|
+
: "auto",
|
|
67
|
+
},
|
|
68
|
+
graphiti: config.graphiti === false
|
|
69
|
+
? false
|
|
70
|
+
: config.graphiti === undefined || config.graphiti === true
|
|
71
|
+
? {}
|
|
72
|
+
: graphitiOptionOverrides(config.graphiti),
|
|
73
|
+
saveTurns: parsed.saveTurns,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function defaultMemoryStore() {
|
|
77
|
+
const slug = stringUtils.toSlugWithOptions({ maxLength: 56, truncateStrategy: "hash" }, projectUtils.name());
|
|
78
|
+
const id = /^[a-z]/.test(slug) ? slug : `app-${slug}`;
|
|
79
|
+
return (id.length < 3 ? `${id}-store` : id).slice(0, 56);
|
|
80
|
+
}
|
|
81
|
+
function resourceId(value, prefix) {
|
|
82
|
+
const trimmed = value.trim().replace(new RegExp(`^${prefix}/`), "");
|
|
83
|
+
if (!trimmed)
|
|
84
|
+
throw new Error(`${prefix} id is required`);
|
|
85
|
+
return trimmed;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBR0gsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHVCQUF1QixHQUV4QixNQUFNLDRCQUE0QixDQUFDO0FBRXBDLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFFeEIsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQztLQUMzQyxNQUFNLENBQUM7SUFDTixXQUFXLEVBQUUsQ0FBQztTQUNYLE1BQU0sRUFBRTtTQUNSLElBQUksRUFBRTtTQUNOLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDTixRQUFRLEVBQUU7U0FDVixRQUFRLENBQUMsNkRBQTZELENBQUM7SUFDMUUsSUFBSSxFQUFFLENBQUM7U0FDSixJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7U0FDMUIsT0FBTyxDQUFDLE1BQU0sQ0FBQztTQUNmLFFBQVEsQ0FBQyxtRUFBbUUsQ0FBQztDQUNqRixDQUFDO0tBQ0QsTUFBTSxFQUFFO0tBQ1IsUUFBUSxDQUFDLGtEQUFrRCxDQUFDLENBQUM7QUFJaEUsTUFBTSwyQkFBMkIsR0FBRyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQzFFLGtEQUFrRCxDQUNuRCxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsQ0FBQztLQUN2QyxNQUFNLENBQUM7SUFDTixVQUFVLEVBQUUsQ0FBQztTQUNWLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLDZCQUE2QixDQUFDLENBQUM7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LENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMzRCxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsS0FBYSxFQUFFLE1BQWM7SUFDL0MsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEUsSUFBSSxDQUFDLE9BQU87UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQyxDQUFDO0lBQzFELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRvcC1sZXZlbCBBcHBLaXQgbWVtb3J5IHBsdWdpbiBjb25maWd1cmF0aW9uLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEJhc2VQbHVnaW5Db25maWcgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBwcm9qZWN0VXRpbHMgfSBmcm9tIFwiQGRieC10b29scy9jb3JlXCI7XG5pbXBvcnQgeyBzdHJpbmdVdGlscyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQge1xuICBHcmFwaGl0aU9wdGlvbnNTY2hlbWEsXG4gIGdyYXBoaXRpT3B0aW9uT3ZlcnJpZGVzLFxuICB0eXBlIEdyYXBoaXRpT3B0aW9ucyxcbn0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWdyYXBoaXRpXCI7XG5pbXBvcnQgdHlwZSB7IEpTT05TY2hlbWE3IH0gZnJvbSBcImpzb24tc2NoZW1hXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG5leHBvcnQgY29uc3QgRGF0YWJyaWNrc01lbW9yeU9wdGlvbnNTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIG1lbW9yeVN0b3JlOiB6XG4gICAgICAuc3RyaW5nKClcbiAgICAgIC50cmltKClcbiAgICAgIC5taW4oMSlcbiAgICAgIC5vcHRpb25hbCgpXG4gICAgICAuZGVzY3JpYmUoXCJFeGlzdGluZyBEYXRhYnJpY2tzIEFnZW50IE1lbW9yeSBTdG9yZSBpZCBvciByZXNvdXJjZSBuYW1lLlwiKSxcbiAgICBtb2RlOiB6XG4gICAgICAuZW51bShbXCJhdXRvXCIsIFwicmVxdWlyZWRcIl0pXG4gICAgICAuZGVmYXVsdChcImF1dG9cIilcbiAgICAgIC5kZXNjcmliZShcIldoZXRoZXIgYW4gaW5hY2Nlc3NpYmxlIG1hbmFnZWQtbWVtb3J5IHN0b3JlIGZhbGxzIGJhY2sgb3IgZmFpbHMuXCIpLFxuICB9KVxuICAuc3RyaWN0KClcbiAgLmRlc2NyaWJlKFwiRGF0YWJyaWNrcyBtYW5hZ2VkLW1lbW9yeSBiYWNrZW5kIGNvbmZpZ3VyYXRpb24uXCIpO1xuXG5leHBvcnQgdHlwZSBEYXRhYnJpY2tzTWVtb3J5T3B0aW9ucyA9IHouaW5wdXQ8dHlwZW9mIERhdGFicmlja3NNZW1vcnlPcHRpb25zU2NoZW1hPjtcblxuY29uc3QgR3JhcGhpdGlNZW1vcnlPcHRpb25zU2NoZW1hID0gR3JhcGhpdGlPcHRpb25zU2NoZW1hLnBhcnRpYWwoKS5kZXNjcmliZShcbiAgXCJHcmFwaGl0aSBvcHRpb24gb3ZlcnJpZGVzIGZvciB0aGUgbGF6eSBmYWxsYmFjay5cIixcbik7XG5cbmV4cG9ydCBjb25zdCBNZW1vcnlQbHVnaW5PcHRpb25zU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBkYXRhYnJpY2tzOiB6XG4gICAgICAudW5pb24oW3oubGl0ZXJhbChcImF1dG9cIiksIHouYm9vbGVhbigpLCBEYXRhYnJpY2tzTWVtb3J5T3B0aW9uc1NjaGVtYV0pXG4gICAgICAuZGVmYXVsdChcImF1dG9cIilcbiAgICAgIC5kZXNjcmliZShcbiAgICAgICAgXCJEYXRhYnJpY2tzIG1hbmFnZWQgbWVtb3J5IG1vZGU6IGF1dG8gZmFsbHMgYmFjaywgdHJ1ZSByZXF1aXJlcyBhY2Nlc3MsIGFuZCBmYWxzZSBkaXNhYmxlcyBpdC5cIixcbiAgICAgICksXG4gICAgZ3JhcGhpdGk6IHpcbiAgICAgIC51bmlvbihbei5ib29sZWFuKCksIEdyYXBoaXRpTWVtb3J5T3B0aW9uc1NjaGVtYV0pXG4gICAgICAuZGVmYXVsdCh0cnVlKVxuICAgICAgLmRlc2NyaWJlKFwiTGF6eSBHcmFwaGl0aSBmYWxsYmFjayBjb25maWd1cmF0aW9uLCBlbmFibGVkIGJ5IGRlZmF1bHQuXCIpLFxuICAgIHNhdmVUdXJuczogelxuICAgICAgLnVuaW9uKFt6LmxpdGVyYWwoXCJhdXRvXCIpLCB6LmJvb2xlYW4oKV0pXG4gICAgICAuZGVmYXVsdChcImF1dG9cIilcbiAgICAgIC5kZXNjcmliZShcbiAgICAgICAgXCJDb21wbGV0ZWQtdHVybiBzYXZpbmcgbW9kZTogYXV0byBhdHRhY2hlcyB3aGVuIHBvc3NpYmxlLCB0cnVlIHJlcXVpcmVzIGF0dGFjaG1lbnQsIGFuZCBmYWxzZSBkaXNhYmxlcyBpdC5cIixcbiAgICAgICksXG4gIH0pXG4gIC5zdHJpY3QoKVxuICAuZGVzY3JpYmUoXCJBcHBLaXQgbWVtb3J5IHBsdWdpbiBvcHRpb25zLlwiKTtcblxuZXhwb3J0IHR5cGUgTWVtb3J5UGx1Z2luT3B0aW9ucyA9IHouaW5wdXQ8dHlwZW9mIE1lbW9yeVBsdWdpbk9wdGlvbnNTY2hlbWE+O1xuXG4vKiogQXBwS2l0IGJhc2UgY29uZmlndXJhdGlvbiBwbHVzIHRoZSBtZW1vcnkgcGx1Z2luJ3Mgc2VyaWFsaXplZCBvcHRpb25zLiAqL1xuZXhwb3J0IHR5cGUgTWVtb3J5UGx1Z2luQ29uZmlnID0gQmFzZVBsdWdpbkNvbmZpZyAmIE1lbW9yeVBsdWdpbk9wdGlvbnM7XG5cbi8qKiBSZXNvbHZlZCBEYXRhYnJpY2tzIHN0b3JlIGlkZW50aXR5IGFuZCBhdmFpbGFiaWxpdHkgcG9saWN5LiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZERhdGFicmlja3NNZW1vcnlPcHRpb25zIHtcbiAgcmVhZG9ubHkgbWVtb3J5U3RvcmU6IHN0cmluZztcbiAgcmVhZG9ubHkgbW9kZTogXCJhdXRvXCIgfCBcInJlcXVpcmVkXCI7XG59XG5cbi8qKiBGdWxseSByZXNvbHZlZCB0b3AtbGV2ZWwgbWVtb3J5IGNvbmZpZ3VyYXRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVkTWVtb3J5UGx1Z2luQ29uZmlnIHtcbiAgcmVhZG9ubHkgZGF0YWJyaWNrczogZmFsc2UgfCBSZXNvbHZlZERhdGFicmlja3NNZW1vcnlPcHRpb25zO1xuICByZWFkb25seSBncmFwaGl0aTogZmFsc2UgfCBHcmFwaGl0aU9wdGlvbnM7XG4gIHJlYWRvbmx5IHNhdmVUdXJuczogXCJhdXRvXCIgfCBib29sZWFuO1xufVxuXG4vKiogSlNPTiBTY2hlbWEgcHVibGlzaGVkIHRocm91Z2ggdGhlIEFwcEtpdCBtZW1vcnkgcGx1Z2luIG1hbmlmZXN0LiAqL1xuZXhwb3J0IGNvbnN0IE1FTU9SWV9DT05GSUdfU0NIRU1BID0gei50b0pTT05TY2hlbWEoTWVtb3J5UGx1Z2luT3B0aW9uc1NjaGVtYSkgYXMgSlNPTlNjaGVtYTc7XG5cbi8qKiBSZXNvbHZlIHBsdWdpbiBkZWZhdWx0cyB3aXRob3V0IHBhcnNpbmcgdW5yZWxhdGVkIEFwcEtpdCBiYXNlIGZpZWxkcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTWVtb3J5UGx1Z2luQ29uZmlnKFxuICBjb25maWc6IE1lbW9yeVBsdWdpbkNvbmZpZyA9IHt9LFxuKTogUmVzb2x2ZWRNZW1vcnlQbHVnaW5Db25maWcge1xuICBjb25zdCBwYXJzZWQgPSBNZW1vcnlQbHVnaW5PcHRpb25zU2NoZW1hLnBhcnNlKHtcbiAgICBkYXRhYnJpY2tzOiBjb25maWcuZGF0YWJyaWNrcyxcbiAgICBncmFwaGl0aTogY29uZmlnLmdyYXBoaXRpLFxuICAgIHNhdmVUdXJuczogY29uZmlnLnNhdmVUdXJucyxcbiAgfSk7XG4gIGlmIChwYXJzZWQuZGF0YWJyaWNrcyA9PT0gZmFsc2UgJiYgcGFyc2VkLmdyYXBoaXRpID09PSBmYWxzZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkFwcEtpdCBtZW1vcnkgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGVuYWJsZWQgYmFja2VuZFwiKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGRhdGFicmlja3M6XG4gICAgICBwYXJzZWQuZGF0YWJyaWNrcyA9PT0gZmFsc2VcbiAgICAgICAgPyBmYWxzZVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIG1lbW9yeVN0b3JlOlxuICAgICAgICAgICAgICB0eXBlb2YgcGFyc2VkLmRhdGFicmlja3MgPT09IFwib2JqZWN0XCIgJiYgcGFyc2VkLmRhdGFicmlja3MubWVtb3J5U3RvcmVcbiAgICAgICAgICAgICAgICA/IHJlc291cmNlSWQocGFyc2VkLmRhdGFicmlja3MubWVtb3J5U3RvcmUsIFwibWVtb3J5LXN0b3Jlc1wiKVxuICAgICAgICAgICAgICAgIDogZGVmYXVsdE1lbW9yeVN0b3JlKCksXG4gICAgICAgICAgICBtb2RlOlxuICAgICAgICAgICAgICBwYXJzZWQuZGF0YWJyaWNrcyA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgID8gXCJyZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgOiB0eXBlb2YgcGFyc2VkLmRhdGFicmlja3MgPT09IFwib2JqZWN0XCJcbiAgICAgICAgICAgICAgICAgID8gcGFyc2VkLmRhdGFicmlja3MubW9kZVxuICAgICAgICAgICAgICAgICAgOiBcImF1dG9cIixcbiAgICAgICAgICB9LFxuICAgIGdyYXBoaXRpOlxuICAgICAgY29uZmlnLmdyYXBoaXRpID09PSBmYWxzZVxuICAgICAgICA/IGZhbHNlXG4gICAgICAgIDogY29uZmlnLmdyYXBoaXRpID09PSB1bmRlZmluZWQgfHwgY29uZmlnLmdyYXBoaXRpID09PSB0cnVlXG4gICAgICAgICAgPyB7fVxuICAgICAgICAgIDogZ3JhcGhpdGlPcHRpb25PdmVycmlkZXMoY29uZmlnLmdyYXBoaXRpKSxcbiAgICBzYXZlVHVybnM6IHBhcnNlZC5zYXZlVHVybnMsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRNZW1vcnlTdG9yZSgpOiBzdHJpbmcge1xuICBjb25zdCBzbHVnID0gc3RyaW5nVXRpbHMudG9TbHVnV2l0aE9wdGlvbnMoXG4gICAgeyBtYXhMZW5ndGg6IDU2LCB0cnVuY2F0ZVN0cmF0ZWd5OiBcImhhc2hcIiB9LFxuICAgIHByb2plY3RVdGlscy5uYW1lKCksXG4gICk7XG4gIGNvbnN0IGlkID0gL15bYS16XS8udGVzdChzbHVnKSA/IHNsdWcgOiBgYXBwLSR7c2x1Z31gO1xuICByZXR1cm4gKGlkLmxlbmd0aCA8IDMgPyBgJHtpZH0tc3RvcmVgIDogaWQpLnNsaWNlKDAsIDU2KTtcbn1cblxuZnVuY3Rpb24gcmVzb3VyY2VJZCh2YWx1ZTogc3RyaW5nLCBwcmVmaXg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHRyaW1tZWQgPSB2YWx1ZS50cmltKCkucmVwbGFjZShuZXcgUmVnRXhwKGBeJHtwcmVmaXh9L2ApLCBcIlwiKTtcbiAgaWYgKCF0cmltbWVkKSB0aHJvdyBuZXcgRXJyb3IoYCR7cHJlZml4fSBpZCBpcyByZXF1aXJlZGApO1xuICByZXR1cm4gdHJpbW1lZDtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Request-scoped Databricks managed-memory routing.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { type WorkspaceClient } from "@databricks/appkit";
|
|
7
|
+
import { type RecallMemoryInput, type RecallMemoryResult, type RememberMemoryInput, type RememberMemoryResult } from "../_contracts.ts";
|
|
8
|
+
import type { ResolvedDatabricksMemoryOptions } from "../config.ts";
|
|
9
|
+
/** Databricks backend that selects the active request credential for each call. */
|
|
10
|
+
export declare class DatabricksMemoryRuntime {
|
|
11
|
+
private readonly workspaceClient;
|
|
12
|
+
readonly options: ResolvedDatabricksMemoryOptions;
|
|
13
|
+
constructor(workspaceClient: WorkspaceClient, options: ResolvedDatabricksMemoryOptions);
|
|
14
|
+
available(actorId: string, signal?: AbortSignal): Promise<boolean>;
|
|
15
|
+
remember(actorId: string, input: RememberMemoryInput, signal?: AbortSignal): Promise<RememberMemoryResult>;
|
|
16
|
+
recall(actorId: string, input: RecallMemoryInput, signal?: AbortSignal): Promise<RecallMemoryResult>;
|
|
17
|
+
private requestClient;
|
|
18
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Request-scoped Databricks managed-memory routing.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { getExecutionContext } from "@databricks/appkit";
|
|
7
|
+
import { createCache, getOrSet } from "@dbx-tools/cache/cache";
|
|
8
|
+
import { RecallMemoryInputSchema, } from "../_contracts.js";
|
|
9
|
+
import { ManagedAgentMemoryClient } from "./client.js";
|
|
10
|
+
const ACCESS_CACHE_TTL_MS = 5 * 60_000;
|
|
11
|
+
const accessCache = createCache({
|
|
12
|
+
maxEntries: 1_000,
|
|
13
|
+
ttl: ACCESS_CACHE_TTL_MS,
|
|
14
|
+
useClone: false,
|
|
15
|
+
});
|
|
16
|
+
/** Databricks backend that selects the active request credential for each call. */
|
|
17
|
+
export class DatabricksMemoryRuntime {
|
|
18
|
+
workspaceClient;
|
|
19
|
+
options;
|
|
20
|
+
constructor(workspaceClient, options) {
|
|
21
|
+
this.workspaceClient = workspaceClient;
|
|
22
|
+
this.options = options;
|
|
23
|
+
}
|
|
24
|
+
async available(actorId, signal) {
|
|
25
|
+
const request = this.requestClient(actorId);
|
|
26
|
+
return ((await getOrSet(accessCache, request.cacheKey, () => request.client.available(signal))) ??
|
|
27
|
+
false);
|
|
28
|
+
}
|
|
29
|
+
async remember(actorId, input, signal) {
|
|
30
|
+
const entry = await this.requestClient(actorId).client.saveMemory({
|
|
31
|
+
actorId,
|
|
32
|
+
...input,
|
|
33
|
+
...(signal ? { signal } : {}),
|
|
34
|
+
});
|
|
35
|
+
return {
|
|
36
|
+
backend: "databricks",
|
|
37
|
+
memory: {
|
|
38
|
+
path: entry.path,
|
|
39
|
+
content: entry.content ?? input.content,
|
|
40
|
+
...(entry.description ? { description: entry.description } : {}),
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
async recall(actorId, input, signal) {
|
|
45
|
+
const parsed = RecallMemoryInputSchema.parse(input);
|
|
46
|
+
const results = await this.requestClient(actorId).client.searchMemory({
|
|
47
|
+
actorId,
|
|
48
|
+
query: parsed.query,
|
|
49
|
+
limit: parsed.limit,
|
|
50
|
+
...(signal ? { signal } : {}),
|
|
51
|
+
});
|
|
52
|
+
return {
|
|
53
|
+
backend: "databricks",
|
|
54
|
+
memories: results.map(({ entry, score }) => ({
|
|
55
|
+
path: entry.path,
|
|
56
|
+
content: entry.content ?? "",
|
|
57
|
+
...(entry.description ? { description: entry.description } : {}),
|
|
58
|
+
...(score === undefined ? {} : { score }),
|
|
59
|
+
})),
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
requestClient(actorId) {
|
|
63
|
+
let workspaceClient = this.workspaceClient;
|
|
64
|
+
let credentialId = actorId;
|
|
65
|
+
try {
|
|
66
|
+
const execution = getExecutionContext();
|
|
67
|
+
workspaceClient = execution.client;
|
|
68
|
+
credentialId = "userId" in execution ? execution.userId : execution.serviceUserId;
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// Startup and tests have no active AppKit request context.
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
client: new ManagedAgentMemoryClient(workspaceClient, this.options),
|
|
75
|
+
cacheKey: `${this.options.memoryStore}:${credentialId}:${actorId}`,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX3J1bnRpbWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGF0YWJyaWNrcy9fcnVudGltZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBRUgsT0FBTyxFQUFFLG1CQUFtQixFQUF3QixNQUFNLG9CQUFvQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFL0QsT0FBTyxFQUNMLHVCQUF1QixHQUt4QixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV2RCxNQUFNLG1CQUFtQixHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdkMsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBQzlCLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLEdBQUcsRUFBRSxtQkFBbUI7SUFDeEIsUUFBUSxFQUFFLEtBQUs7Q0FDaEIsQ0FBQyxDQUFDO0FBRUgsbUZBQW1GO0FBQ25GLE1BQU0sT0FBTyx1QkFBdUI7SUFFZjtJQUNSO0lBRlgsWUFDbUIsZUFBZ0MsRUFDeEMsT0FBd0M7UUFEaEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ3hDLFlBQU8sR0FBUCxPQUFPLENBQWlDO0lBQ2hELENBQUM7SUFFSixLQUFLLENBQUMsU0FBUyxDQUFDLE9BQWUsRUFBRSxNQUFvQjtRQUNuRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVDLE9BQU8sQ0FDTCxDQUFDLE1BQU0sUUFBUSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDdkYsS0FBSyxDQUNOLENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVEsQ0FD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cGVkIERhdGFicmlja3MgbWFuYWdlZC1tZW1vcnkgcm91dGluZy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgZ2V0RXhlY3V0aW9uQ29udGV4dCwgdHlwZSBXb3Jrc3BhY2VDbGllbnQgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBjcmVhdGVDYWNoZSwgZ2V0T3JTZXQgfSBmcm9tIFwiQGRieC10b29scy9jYWNoZS9jYWNoZVwiO1xuXG5pbXBvcnQge1xuICBSZWNhbGxNZW1vcnlJbnB1dFNjaGVtYSxcbiAgdHlwZSBSZWNhbGxNZW1vcnlJbnB1dCxcbiAgdHlwZSBSZWNhbGxNZW1vcnlSZXN1bHQsXG4gIHR5cGUgUmVtZW1iZXJNZW1vcnlJbnB1dCxcbiAgdHlwZSBSZW1lbWJlck1lbW9yeVJlc3VsdCxcbn0gZnJvbSBcIi4uL19jb250cmFjdHMudHNcIjtcbmltcG9ydCB0eXBlIHsgUmVzb2x2ZWREYXRhYnJpY2tzTWVtb3J5T3B0aW9ucyB9IGZyb20gXCIuLi9jb25maWcudHNcIjtcbmltcG9ydCB7IE1hbmFnZWRBZ2VudE1lbW9yeUNsaWVudCB9IGZyb20gXCIuL2NsaWVudC50c1wiO1xuXG5jb25zdCBBQ0NFU1NfQ0FDSEVfVFRMX01TID0gNSAqIDYwXzAwMDtcbmNvbnN0IGFjY2Vzc0NhY2hlID0gY3JlYXRlQ2FjaGUoe1xuICBtYXhFbnRyaWVzOiAxXzAwMCxcbiAgdHRsOiBBQ0NFU1NfQ0FDSEVfVFRMX01TLFxuICB1c2VDbG9uZTogZmFsc2UsXG59KTtcblxuLyoqIERhdGFicmlja3MgYmFja2VuZCB0aGF0IHNlbGVjdHMgdGhlIGFjdGl2ZSByZXF1ZXN0IGNyZWRlbnRpYWwgZm9yIGVhY2ggY2FsbC4gKi9cbmV4cG9ydCBjbGFzcyBEYXRhYnJpY2tzTWVtb3J5UnVudGltZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgd29ya3NwYWNlQ2xpZW50OiBXb3Jrc3BhY2VDbGllbnQsXG4gICAgcmVhZG9ubHkgb3B0aW9uczogUmVzb2x2ZWREYXRhYnJpY2tzTWVtb3J5T3B0aW9ucyxcbiAgKSB7fVxuXG4gIGFzeW5jIGF2YWlsYWJsZShhY3RvcklkOiBzdHJpbmcsIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVxdWVzdCA9IHRoaXMucmVxdWVzdENsaWVudChhY3RvcklkKTtcbiAgICByZXR1cm4gKFxuICAgICAgKGF3YWl0IGdldE9yU2V0KGFjY2Vzc0NhY2hlLCByZXF1ZXN0LmNhY2hlS2V5LCAoKSA9PiByZXF1ZXN0LmNsaWVudC5hdmFpbGFibGUoc2lnbmFsKSkpID8/XG4gICAgICBmYWxzZVxuICAgICk7XG4gIH1cblxuICBhc3luYyByZW1lbWJlcihcbiAgICBhY3RvcklkOiBzdHJpbmcsXG4gICAgaW5wdXQ6IFJlbWVtYmVyTWVtb3J5SW5wdXQsXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gICk6IFByb21pc2U8UmVtZW1iZXJNZW1vcnlSZXN1bHQ+IHtcbiAgICBjb25zdCBlbnRyeSA9IGF3YWl0IHRoaXMucmVxdWVzdENsaWVudChhY3RvcklkKS5jbGllbnQuc2F2ZU1lbW9yeSh7XG4gICAgICBhY3RvcklkLFxuICAgICAgLi4uaW5wdXQsXG4gICAgICAuLi4oc2lnbmFsID8geyBzaWduYWwgfSA6IHt9KSxcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgYmFja2VuZDogXCJkYXRhYnJpY2tzXCIsXG4gICAgICBtZW1vcnk6IHtcbiAgICAgICAgcGF0aDogZW50cnkucGF0aCxcbiAgICAgICAgY29udGVudDogZW50cnkuY29udGVudCA/PyBpbnB1dC5jb250ZW50LFxuICAgICAgICAuLi4oZW50cnkuZGVzY3JpcHRpb24gPyB7IGRlc2NyaXB0aW9uOiBlbnRyeS5kZXNjcmlwdGlvbiB9IDoge30pLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgcmVjYWxsKFxuICAgIGFjdG9ySWQ6IHN0cmluZyxcbiAgICBpbnB1dDogUmVjYWxsTWVtb3J5SW5wdXQsXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gICk6IFByb21pc2U8UmVjYWxsTWVtb3J5UmVzdWx0PiB7XG4gICAgY29uc3QgcGFyc2VkID0gUmVjYWxsTWVtb3J5SW5wdXRTY2hlbWEucGFyc2UoaW5wdXQpO1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLnJlcXVlc3RDbGllbnQoYWN0b3JJZCkuY2xpZW50LnNlYXJjaE1lbW9yeSh7XG4gICAgICBhY3RvcklkLFxuICAgICAgcXVlcnk6IHBhcnNlZC5xdWVyeSxcbiAgICAgIGxpbWl0OiBwYXJzZWQubGltaXQsXG4gICAgICAuLi4oc2lnbmFsID8geyBzaWduYWwgfSA6IHt9KSxcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgYmFja2VuZDogXCJkYXRhYnJpY2tzXCIsXG4gICAgICBtZW1vcmllczogcmVzdWx0cy5tYXAoKHsgZW50cnksIHNjb3JlIH0pID0+ICh7XG4gICAgICAgIHBhdGg6IGVudHJ5LnBhdGgsXG4gICAgICAgIGNvbnRlbnQ6IGVudHJ5LmNvbnRlbnQgPz8gXCJcIixcbiAgICAgICAgLi4uKGVudHJ5LmRlc2NyaXB0aW9uID8geyBkZXNjcmlwdGlvbjogZW50cnkuZGVzY3JpcHRpb24gfSA6IHt9KSxcbiAgICAgICAgLi4uKHNjb3JlID09PSB1bmRlZmluZWQgPyB7fSA6IHsgc2NvcmUgfSksXG4gICAgICB9KSksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVxdWVzdENsaWVudChhY3RvcklkOiBzdHJpbmcpOiB7XG4gICAgY2xpZW50OiBNYW5hZ2VkQWdlbnRNZW1vcnlDbGllbnQ7XG4gICAgY2FjaGVLZXk6IHN0cmluZztcbiAgfSB7XG4gICAgbGV0IHdvcmtzcGFjZUNsaWVudCA9IHRoaXMud29ya3NwYWNlQ2xpZW50O1xuICAgIGxldCBjcmVkZW50aWFsSWQgPSBhY3RvcklkO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBleGVjdXRpb24gPSBnZXRFeGVjdXRpb25Db250ZXh0KCk7XG4gICAgICB3b3Jrc3BhY2VDbGllbnQgPSBleGVjdXRpb24uY2xpZW50O1xuICAgICAgY3JlZGVudGlhbElkID0gXCJ1c2VySWRcIiBpbiBleGVjdXRpb24gPyBleGVjdXRpb24udXNlcklkIDogZXhlY3V0aW9uLnNlcnZpY2VVc2VySWQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBTdGFydHVwIGFuZCB0ZXN0cyBoYXZlIG5vIGFjdGl2ZSBBcHBLaXQgcmVxdWVzdCBjb250ZXh0LlxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgY2xpZW50OiBuZXcgTWFuYWdlZEFnZW50TWVtb3J5Q2xpZW50KHdvcmtzcGFjZUNsaWVudCwgdGhpcy5vcHRpb25zKSxcbiAgICAgIGNhY2hlS2V5OiBgJHt0aGlzLm9wdGlvbnMubWVtb3J5U3RvcmV9OiR7Y3JlZGVudGlhbElkfToke2FjdG9ySWR9YCxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Databricks Agent Memory REST client.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import type { WorkspaceClient } from "@databricks/appkit";
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
import type { ResolvedDatabricksMemoryOptions } from "../config.ts";
|
|
9
|
+
export declare const ManagedMemoryEntrySchema: z.ZodObject<{
|
|
10
|
+
name: z.ZodOptional<z.ZodString>;
|
|
11
|
+
actor_id: z.ZodString;
|
|
12
|
+
session_id: z.ZodOptional<z.ZodString>;
|
|
13
|
+
path: z.ZodString;
|
|
14
|
+
content: z.ZodOptional<z.ZodString>;
|
|
15
|
+
description: z.ZodOptional<z.ZodString>;
|
|
16
|
+
source_type: z.ZodOptional<z.ZodString>;
|
|
17
|
+
create_time: z.ZodOptional<z.ZodString>;
|
|
18
|
+
update_time: z.ZodOptional<z.ZodString>;
|
|
19
|
+
}, z.core.$loose>;
|
|
20
|
+
export type ManagedMemoryEntry = z.infer<typeof ManagedMemoryEntrySchema>;
|
|
21
|
+
/** One managed-memory search result with its optional backend score. */
|
|
22
|
+
export interface ManagedMemorySearchResult {
|
|
23
|
+
readonly entry: ManagedMemoryEntry;
|
|
24
|
+
readonly score?: number;
|
|
25
|
+
}
|
|
26
|
+
/** Thin REST client for actor-scoped Databricks Agent Memory operations. */
|
|
27
|
+
export declare class ManagedAgentMemoryClient {
|
|
28
|
+
private readonly client;
|
|
29
|
+
readonly memoryStore: string;
|
|
30
|
+
constructor(client: WorkspaceClient, options: ResolvedDatabricksMemoryOptions);
|
|
31
|
+
available(signal?: AbortSignal): Promise<boolean>;
|
|
32
|
+
searchMemory(input: {
|
|
33
|
+
actorId: string;
|
|
34
|
+
query: string;
|
|
35
|
+
limit: number;
|
|
36
|
+
signal?: AbortSignal;
|
|
37
|
+
}): Promise<ManagedMemorySearchResult[]>;
|
|
38
|
+
saveMemory(input: {
|
|
39
|
+
actorId: string;
|
|
40
|
+
path: string;
|
|
41
|
+
content: string;
|
|
42
|
+
description?: string;
|
|
43
|
+
signal?: AbortSignal;
|
|
44
|
+
}): Promise<ManagedMemoryEntry>;
|
|
45
|
+
private createMemory;
|
|
46
|
+
private listMemoryEntries;
|
|
47
|
+
private updateMemory;
|
|
48
|
+
}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Databricks Agent Memory REST client.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { databricks } from "@dbx-tools/appkit";
|
|
7
|
+
import { errorUtils } from "@dbx-tools/shared-core";
|
|
8
|
+
import { z } from "zod";
|
|
9
|
+
export const ManagedMemoryEntrySchema = z
|
|
10
|
+
.object({
|
|
11
|
+
name: z.string().optional().describe("Managed memory entry resource name."),
|
|
12
|
+
actor_id: z.string().describe("Trusted application actor identifier."),
|
|
13
|
+
session_id: z.string().optional().describe("Associated session identifier."),
|
|
14
|
+
path: z.string().describe("Absolute memory path."),
|
|
15
|
+
content: z.string().optional().describe("Memory content."),
|
|
16
|
+
description: z.string().optional().describe("Memory retrieval description."),
|
|
17
|
+
source_type: z.string().optional().describe("Entry writer type."),
|
|
18
|
+
create_time: z.string().optional().describe("Entry creation timestamp."),
|
|
19
|
+
update_time: z.string().optional().describe("Entry update timestamp."),
|
|
20
|
+
})
|
|
21
|
+
.loose()
|
|
22
|
+
.describe("Databricks managed memory entry.");
|
|
23
|
+
const SearchMemoryResponseSchema = z
|
|
24
|
+
.object({
|
|
25
|
+
managed_memory_entries: z
|
|
26
|
+
.array(ManagedMemoryEntrySchema)
|
|
27
|
+
.optional()
|
|
28
|
+
.describe("Compatibility list of matching entries."),
|
|
29
|
+
results: z
|
|
30
|
+
.array(z
|
|
31
|
+
.object({
|
|
32
|
+
managed_memory_entry: ManagedMemoryEntrySchema.describe("Matching memory entry."),
|
|
33
|
+
score: z.number().optional().describe("BM25 relevance score."),
|
|
34
|
+
})
|
|
35
|
+
.loose())
|
|
36
|
+
.optional()
|
|
37
|
+
.describe("Ranked memory search results."),
|
|
38
|
+
})
|
|
39
|
+
.loose()
|
|
40
|
+
.describe("Databricks managed memory search response.");
|
|
41
|
+
const ListMemoryResponseSchema = z
|
|
42
|
+
.object({
|
|
43
|
+
managed_memory_entries: z
|
|
44
|
+
.array(ManagedMemoryEntrySchema)
|
|
45
|
+
.optional()
|
|
46
|
+
.describe("Managed memory entries in this page."),
|
|
47
|
+
next_page_token: z.string().optional().describe("Next page token."),
|
|
48
|
+
})
|
|
49
|
+
.loose()
|
|
50
|
+
.describe("Page of Databricks managed memory entries.");
|
|
51
|
+
/** Thin REST client for actor-scoped Databricks Agent Memory operations. */
|
|
52
|
+
export class ManagedAgentMemoryClient {
|
|
53
|
+
client;
|
|
54
|
+
memoryStore;
|
|
55
|
+
constructor(client, options) {
|
|
56
|
+
this.client = client;
|
|
57
|
+
this.memoryStore = options.memoryStore;
|
|
58
|
+
}
|
|
59
|
+
async available(signal) {
|
|
60
|
+
try {
|
|
61
|
+
await this.client.apiClient.request({
|
|
62
|
+
path: `/api/2.0/agents/memory-stores/${encodeURIComponent(this.memoryStore)}`,
|
|
63
|
+
method: "GET",
|
|
64
|
+
headers: new Headers({ accept: "application/json" }),
|
|
65
|
+
raw: false,
|
|
66
|
+
}, signal ? databricks.toContext(signal) : undefined);
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
if (errorUtils.errorContext(error).hasStatusCode(403, 404))
|
|
71
|
+
return false;
|
|
72
|
+
throw error;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
async searchMemory(input) {
|
|
76
|
+
const response = SearchMemoryResponseSchema.parse(await this.client.apiClient.request({
|
|
77
|
+
path: `/api/2.0/agents/memory-stores/${encodeURIComponent(this.memoryStore)}/entries:search`,
|
|
78
|
+
method: "POST",
|
|
79
|
+
headers: new Headers({
|
|
80
|
+
accept: "application/json",
|
|
81
|
+
"content-type": "application/json",
|
|
82
|
+
}),
|
|
83
|
+
raw: false,
|
|
84
|
+
payload: {
|
|
85
|
+
actor_id: input.actorId,
|
|
86
|
+
query: input.query,
|
|
87
|
+
page_size: input.limit,
|
|
88
|
+
},
|
|
89
|
+
}, input.signal ? databricks.toContext(input.signal) : undefined));
|
|
90
|
+
if (response.results) {
|
|
91
|
+
return response.results.map((result) => ({
|
|
92
|
+
entry: result.managed_memory_entry,
|
|
93
|
+
...(result.score === undefined ? {} : { score: result.score }),
|
|
94
|
+
}));
|
|
95
|
+
}
|
|
96
|
+
return (response.managed_memory_entries ?? []).map((entry) => ({ entry }));
|
|
97
|
+
}
|
|
98
|
+
async saveMemory(input) {
|
|
99
|
+
const existing = (await this.listMemoryEntries(input))[0];
|
|
100
|
+
if (existing?.name) {
|
|
101
|
+
return this.updateMemory(existing, input);
|
|
102
|
+
}
|
|
103
|
+
try {
|
|
104
|
+
return await this.createMemory(input);
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
if (!errorUtils.errorContext(error).hasStatusCode(409))
|
|
108
|
+
throw error;
|
|
109
|
+
const raced = (await this.listMemoryEntries(input))[0];
|
|
110
|
+
if (!raced?.name)
|
|
111
|
+
throw error;
|
|
112
|
+
return this.updateMemory(raced, input);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
async createMemory(input) {
|
|
116
|
+
return ManagedMemoryEntrySchema.parse(await this.client.apiClient.request({
|
|
117
|
+
path: `/api/2.0/agents/memory-stores/${encodeURIComponent(this.memoryStore)}/entries`,
|
|
118
|
+
method: "POST",
|
|
119
|
+
headers: new Headers({
|
|
120
|
+
accept: "application/json",
|
|
121
|
+
"content-type": "application/json",
|
|
122
|
+
}),
|
|
123
|
+
raw: false,
|
|
124
|
+
payload: {
|
|
125
|
+
actor_id: input.actorId,
|
|
126
|
+
path: input.path,
|
|
127
|
+
content: input.content,
|
|
128
|
+
...(input.description ? { description: input.description } : {}),
|
|
129
|
+
source_type: "MANAGED_MEMORY_ENTRY_SOURCE_TYPE_AGENT",
|
|
130
|
+
},
|
|
131
|
+
}, input.signal ? databricks.toContext(input.signal) : undefined));
|
|
132
|
+
}
|
|
133
|
+
async listMemoryEntries(input) {
|
|
134
|
+
const response = ListMemoryResponseSchema.parse(await this.client.apiClient.request({
|
|
135
|
+
path: `/api/2.0/agents/memory-stores/${encodeURIComponent(this.memoryStore)}/entries`,
|
|
136
|
+
method: "GET",
|
|
137
|
+
headers: new Headers({ accept: "application/json" }),
|
|
138
|
+
query: {
|
|
139
|
+
actor_id: input.actorId,
|
|
140
|
+
path: input.path,
|
|
141
|
+
page_size: 100,
|
|
142
|
+
},
|
|
143
|
+
raw: false,
|
|
144
|
+
}, input.signal ? databricks.toContext(input.signal) : undefined));
|
|
145
|
+
return (response.managed_memory_entries ?? []).filter((entry) => entry.path === input.path);
|
|
146
|
+
}
|
|
147
|
+
async updateMemory(current, input) {
|
|
148
|
+
const headers = new Headers({
|
|
149
|
+
accept: "application/json",
|
|
150
|
+
"content-type": "application/json",
|
|
151
|
+
});
|
|
152
|
+
await this.client.config.authenticate(headers);
|
|
153
|
+
const response = await fetch(new URL(`/api/2.0/agents/${current.name
|
|
154
|
+
.split("/")
|
|
155
|
+
.map((part) => encodeURIComponent(part))
|
|
156
|
+
.join("/")}?update_mask=content,description`, (await this.client.config.getHost()).toString()), {
|
|
157
|
+
method: "PATCH",
|
|
158
|
+
headers,
|
|
159
|
+
body: JSON.stringify({
|
|
160
|
+
actor_id: input.actorId,
|
|
161
|
+
path: input.path,
|
|
162
|
+
content: input.content,
|
|
163
|
+
...(input.description ? { description: input.description } : {}),
|
|
164
|
+
}),
|
|
165
|
+
...(input.signal ? { signal: input.signal } : {}),
|
|
166
|
+
});
|
|
167
|
+
const body = await response.json().catch(() => undefined);
|
|
168
|
+
if (!response.ok) {
|
|
169
|
+
throw Object.assign(new Error(`Databricks Agent Memory request failed (${response.status})`), { statusCode: response.status, response: body });
|
|
170
|
+
}
|
|
171
|
+
return ManagedMemoryEntrySchema.parse(body);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RhdGFicmlja3MvY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFHSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFJeEIsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQztLQUN0QyxNQUFNLENBQUM7SUFDTixJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxxQ0FBcUMsQ0FBQztJQUMzRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyx1Q0FBdUMsQ0FBQztJQUN0RSxVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxnQ0FBZ0MsQ0FBQztJQUM1RSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQztJQUNsRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztJQUMxRCxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQywrQkFBK0IsQ0FBQztJQUM1RSxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQztJQUNqRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQywyQkFBMkIs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TUFBTSxJQUFJLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDakIsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUNqQixJQUFJLEtBQUssQ0FBQywyQ0FBMkMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQ3hFLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUNoRCxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sd0JBQXdCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRGF0YWJyaWNrcyBBZ2VudCBNZW1vcnkgUkVTVCBjbGllbnQuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB0eXBlIHsgV29ya3NwYWNlQ2xpZW50IH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgZGF0YWJyaWNrcyB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuaW1wb3J0IHsgZXJyb3JVdGlscyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG5pbXBvcnQgdHlwZSB7IFJlc29sdmVkRGF0YWJyaWNrc01lbW9yeU9wdGlvbnMgfSBmcm9tIFwiLi4vY29uZmlnLnRzXCI7XG5cbmV4cG9ydCBjb25zdCBNYW5hZ2VkTWVtb3J5RW50cnlTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIG5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIk1hbmFnZWQgbWVtb3J5IGVudHJ5IHJlc291cmNlIG5hbWUuXCIpLFxuICAgIGFjdG9yX2lkOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiVHJ1c3RlZCBhcHBsaWNhdGlvbiBhY3RvciBpZGVudGlmaWVyLlwiKSxcbiAgICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJBc3NvY2lhdGVkIHNlc3Npb24gaWRlbnRpZmllci5cIiksXG4gICAgcGF0aDogei5zdHJpbmcoKS5kZXNjcmliZShcIkFic29sdXRlIG1lbW9yeSBwYXRoLlwiKSxcbiAgICBjb250ZW50OiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJNZW1vcnkgY29udGVudC5cIiksXG4gICAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIk1lbW9yeSByZXRyaWV2YWwgZGVzY3JpcHRpb24uXCIpLFxuICAgIHNvdXJjZV90eXBlOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJFbnRyeSB3cml0ZXIgdHlwZS5cIiksXG4gICAgY3JlYXRlX3RpbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkVudHJ5IGNyZWF0aW9uIHRpbWVzdGFtcC5cIiksXG4gICAgdXBkYXRlX3RpbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkVudHJ5IHVwZGF0ZSB0aW1lc3RhbXAuXCIpLFxuICB9KVxuICAubG9vc2UoKVxuICAuZGVzY3JpYmUoXCJEYXRhYnJpY2tzIG1hbmFnZWQgbWVtb3J5IGVudHJ5LlwiKTtcblxuZXhwb3J0IHR5cGUgTWFuYWdlZE1lbW9yeUVudHJ5ID0gei5pbmZlcjx0eXBlb2YgTWFuYWdlZE1lbW9yeUVudHJ5U2NoZW1hPjtcblxuY29uc3QgU2VhcmNoTWVtb3J5UmVzcG9uc2VTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIG1hbmFnZWRfbWVtb3J5X2VudHJpZXM6IHpcbiAgICAgIC5hcnJheShNYW5hZ2VkTWVtb3J5RW50cnlTY2hlbWEpXG4gICAgICAub3B0aW9uYWwoKVxuICAgICAgLmRlc2NyaWJlKFwiQ29tcGF0aWJpbGl0eSBsaXN0IG9mIG1hdGNoaW5nIGVudHJpZXMuXCIpLFxuICAgIHJlc3VsdHM6IHpcbiAgICAgIC5hcnJheShcbiAgICAgICAgelxuICAgICAgICAgIC5vYmplY3Qoe1xuICAgICAgICAgICAgbWFuYWdlZF9tZW1vcnlfZW50cnk6IE1hbmFnZWRNZW1vcnlFbnRyeVNjaGVtYS5kZXNjcmliZShcIk1hdGNoaW5nIG1lbW9yeSBlbnRyeS5cIiksXG4gICAgICAgICAgICBzY29yZTogei5udW1iZXIoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiQk0yNSByZWxldmFuY2Ugc2NvcmUuXCIpLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmxvb3NlKCksXG4gICAgICApXG4gICAgICAub3B0aW9uYWwoKVxuICAgICAgLmRlc2NyaWJlKFwiUmFua2VkIG1lbW9yeSBzZWFyY2ggcmVzdWx0cy5cIiksXG4gIH0pXG4gIC5sb29zZSgpXG4gIC5kZXNjcmliZShcIkRhdGFicmlja3MgbWFuYWdlZCBtZW1vcnkgc2VhcmNoIHJlc3BvbnNlLlwiKTtcblxuY29uc3QgTGlzdE1lbW9yeVJlc3BvbnNlU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBtYW5hZ2VkX21lbW9yeV9lbnRyaWVzOiB6XG4gICAgICAuYXJyYXkoTWFuYWdlZE1lbW9yeUVudHJ5U2NoZW1hKVxuICAgICAgLm9wdGlvbmFsKClcbiAgICAgIC5kZXNjcmliZShcIk1hbmFnZWQgbWVtb3J5IGVudHJpZXMgaW4gdGhpcyBwYWdlLlwiKSxcbiAgICBuZXh0X3BhZ2VfdG9rZW46IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIk5leHQgcGFnZSB0b2tlbi5cIiksXG4gIH0pXG4gIC5sb29zZSgpXG4gIC5kZXNjcmliZShcIlBhZ2Ugb2YgRGF0YWJyaWNrcyBtYW5hZ2VkIG1lbW9yeSBlbnRyaWVzLlwiKTtcblxuLyoqIE9uZSBtYW5hZ2VkLW1lbW9yeSBzZWFyY2ggcmVzdWx0IHdpdGggaXRzIG9wdGlvbmFsIGJhY2tlbmQgc2NvcmUuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hbmFnZWRNZW1vcnlTZWFyY2hSZXN1bHQge1xuICByZWFkb25seSBlbnRyeTogTWFuYWdlZE1lbW9yeUVudHJ5O1xuICByZWFkb25seSBzY29yZT86IG51bWJlcjtcbn1cblxuLyoqIFRoaW4gUkVTVCBjbGllbnQgZm9yIGFjdG9yLXNjb3BlZCBEYXRhYnJpY2tzIEFnZW50IE1lbW9yeSBvcGVyYXRpb25zLiAqL1xuZXhwb3J0IGNsYXNzIE1hbmFnZWRBZ2VudE1lbW9yeUNsaWVudCB7XG4gIHJlYWRvbmx5IG1lbW9yeVN0b3JlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBjbGllbnQ6IFdvcmtzcGFjZUNsaWVudCxcbiAgICBvcHRpb25zOiBSZXNvbHZlZERhdGFicmlja3NNZW1vcnlPcHRpb25zLFxuICApIHtcbiAgICB0aGlzLm1lbW9yeVN0b3JlID0gb3B0aW9ucy5tZW1vcnlTdG9yZTtcbiAgfVxuXG4gIGFzeW5jIGF2YWlsYWJsZShzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNsaWVudC5hcGlDbGllbnQucmVxdWVzdChcbiAgICAgICAge1xuICAgICAgICAgIHBhdGg6IGAvYXBpLzIuMC9hZ2VudHMvbWVtb3J5LXN0b3Jlcy8ke2VuY29kZVVSSUNvbXBvbmVudCh0aGlzLm1lbW9yeVN0b3JlKX1gLFxuICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyh7IGFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSksXG4gICAgICAgICAgcmF3OiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICAgc2lnbmFsID8gZGF0YWJyaWNrcy50b0NvbnRleHQoc2lnbmFsKSA6IHVuZGVmaW5lZCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yVXRpbHMuZXJyb3JDb250ZXh0KGVycm9yKS5oYXNTdGF0dXNDb2RlKDQwMywgNDA0KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2VhcmNoTWVtb3J5KGlucHV0OiB7XG4gICAgYWN0b3JJZDogc3RyaW5nO1xuICAgIHF1ZXJ5OiBzdHJpbmc7XG4gICAgbGltaXQ6IG51bWJlcjtcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8TWFuYWdlZE1lbW9yeVNlYXJjaFJlc3VsdFtdPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBTZWFyY2hNZW1vcnlSZXNwb25zZVNjaGVtYS5wYXJzZShcbiAgICAgIGF3YWl0IHRoaXMuY2xpZW50LmFwaUNsaWVudC5yZXF1ZXN0KFxuICAgICAgICB7XG4gICAgICAgICAgcGF0aDogYC9hcGkvMi4wL2FnZW50cy9tZW1vcnktc3RvcmVzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMubWVtb3J5U3RvcmUpfS9lbnRyaWVzOnNlYXJjaGAsXG4gICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgICBoZWFkZXJzOiBuZXcgSGVhZGVycyh7XG4gICAgICAgICAgICBhY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICAgICAgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgcmF3OiBmYWxzZSxcbiAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICBhY3Rvcl9pZDogaW5wdXQuYWN0b3JJZCxcbiAgICAgICAgICAgIHF1ZXJ5OiBpbnB1dC5xdWVyeSxcbiAgICAgICAgICAgIHBhZ2Vfc2l6ZTogaW5wdXQubGltaXQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgaW5wdXQuc2lnbmFsID8gZGF0YWJyaWNrcy50b0NvbnRleHQoaW5wdXQuc2lnbmFsKSA6IHVuZGVmaW5lZCxcbiAgICAgICksXG4gICAgKTtcbiAgICBpZiAocmVzcG9uc2UucmVzdWx0cykge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLnJlc3VsdHMubWFwKChyZXN1bHQpID0+ICh7XG4gICAgICAgIGVudHJ5OiByZXN1bHQubWFuYWdlZF9tZW1vcnlfZW50cnksXG4gICAgICAgIC4uLihyZXN1bHQuc2NvcmUgPT09IHVuZGVmaW5lZCA/IHt9IDogeyBzY29yZTogcmVzdWx0LnNjb3JlIH0pLFxuICAgICAgfSkpO1xuICAgIH1cbiAgICByZXR1cm4gKHJlc3BvbnNlLm1hbmFnZWRfbWVtb3J5X2VudHJpZXMgPz8gW10pLm1hcCgoZW50cnkpID0+ICh7IGVudHJ5IH0pKTtcbiAgfVxuXG4gIGFzeW5jIHNhdmVNZW1vcnkoaW5wdXQ6IHtcbiAgICBhY3RvcklkOiBzdHJpbmc7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8TWFuYWdlZE1lbW9yeUVudHJ5PiB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSAoYXdhaXQgdGhpcy5saXN0TWVtb3J5RW50cmllcyhpbnB1dCkpWzBdO1xuICAgIGlmIChleGlzdGluZz8ubmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlTWVtb3J5KGV4aXN0aW5nIGFzIE1hbmFnZWRNZW1vcnlFbnRyeSAmIHsgbmFtZTogc3RyaW5nIH0sIGlucHV0KTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNyZWF0ZU1lbW9yeShpbnB1dCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghZXJyb3JVdGlscy5lcnJvckNvbnRleHQoZXJyb3IpLmhhc1N0YXR1c0NvZGUoNDA5KSkgdGhyb3cgZXJyb3I7XG4gICAgICBjb25zdCByYWNlZCA9IChhd2FpdCB0aGlzLmxpc3RNZW1vcnlFbnRyaWVzKGlucHV0KSlbMF07XG4gICAgICBpZiAoIXJhY2VkPy5uYW1lKSB0aHJvdyBlcnJvcjtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZU1lbW9yeShyYWNlZCBhcyBNYW5hZ2VkTWVtb3J5RW50cnkgJiB7IG5hbWU6IHN0cmluZyB9LCBpbnB1dCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVNZW1vcnkoaW5wdXQ6IHtcbiAgICBhY3RvcklkOiBzdHJpbmc7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgfSk6IFByb21pc2U8TWFuYWdlZE1lbW9yeUVudHJ5PiB7XG4gICAgcmV0dXJuIE1hbmFnZWRNZW1vcnlFbnRyeVNjaGVtYS5wYXJzZShcbiAgICAgIGF3YWl0IHRoaXMuY2xpZW50LmFwaUNsaWVudC5yZXF1ZXN0KFxuICAgICAgICB7XG4gICAgICAgICAgcGF0aDogYC9hcGkvMi4wL2FnZW50cy9tZW1vcnktc3RvcmVzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMubWVtb3J5U3RvcmUpfS9lbnRyaWVzYCxcbiAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHtcbiAgICAgICAgICAgIGFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgICBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICB9KSxcbiAgICAgICAgICByYXc6IGZhbHNlLFxuICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgIGFjdG9yX2lkOiBpbnB1dC5hY3RvcklkLFxuICAgICAgICAgICAgcGF0aDogaW5wdXQucGF0aCxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGlucHV0LmNvbnRlbnQsXG4gICAgICAgICAgICAuLi4oaW5wdXQuZGVzY3JpcHRpb24gPyB7IGRlc2NyaXB0aW9uOiBpbnB1dC5kZXNjcmlwdGlvbiB9IDoge30pLFxuICAgICAgICAgICAgc291cmNlX3R5cGU6IFwiTUFOQUdFRF9NRU1PUllfRU5UUllfU09VUkNFX1RZUEVfQUdFTlRcIixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBpbnB1dC5zaWduYWwgPyBkYXRhYnJpY2tzLnRvQ29udGV4dChpbnB1dC5zaWduYWwpIDogdW5kZWZpbmVkLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsaXN0TWVtb3J5RW50cmllcyhpbnB1dDoge1xuICAgIGFjdG9ySWQ6IHN0cmluZztcbiAgICBwYXRoOiBzdHJpbmc7XG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIH0pOiBQcm9taXNlPE1hbmFnZWRNZW1vcnlFbnRyeVtdPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBMaXN0TWVtb3J5UmVzcG9uc2VTY2hlbWEucGFyc2UoXG4gICAgICBhd2FpdCB0aGlzLmNsaWVudC5hcGlDbGllbnQucmVxdWVzdChcbiAgICAgICAge1xuICAgICAgICAgIHBhdGg6IGAvYXBpLzIuMC9hZ2VudHMvbWVtb3J5LXN0b3Jlcy8ke2VuY29kZVVSSUNvbXBvbmVudCh0aGlzLm1lbW9yeVN0b3JlKX0vZW50cmllc2AsXG4gICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHsgYWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIiB9KSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgYWN0b3JfaWQ6IGlucHV0LmFjdG9ySWQsXG4gICAgICAgICAgICBwYXRoOiBpbnB1dC5wYXRoLFxuICAgICAgICAgICAgcGFnZV9zaXplOiAxMDAsXG4gICAgICAgICAgfSxcbiAgICAgICAgICByYXc6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICBpbnB1dC5zaWduYWwgPyBkYXRhYnJpY2tzLnRvQ29udGV4dChpbnB1dC5zaWduYWwpIDogdW5kZWZpbmVkLFxuICAgICAgKSxcbiAgICApO1xuICAgIHJldHVybiAocmVzcG9uc2UubWFuYWdlZF9tZW1vcnlfZW50cmllcyA/PyBbXSkuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkucGF0aCA9PT0gaW5wdXQucGF0aCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZU1lbW9yeShcbiAgICBjdXJyZW50OiBNYW5hZ2VkTWVtb3J5RW50cnkgJiB7IG5hbWU6IHN0cmluZyB9LFxuICAgIGlucHV0OiB7XG4gICAgICBhY3RvcklkOiBzdHJpbmc7XG4gICAgICBwYXRoOiBzdHJpbmc7XG4gICAgICBjb250ZW50OiBzdHJpbmc7XG4gICAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICAgIH0sXG4gICk6IFByb21pc2U8TWFuYWdlZE1lbW9yeUVudHJ5PiB7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKHtcbiAgICAgIGFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICBcImNvbnRlbnQtdHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICB9KTtcbiAgICBhd2FpdCB0aGlzLmNsaWVudC5jb25maWcuYXV0aGVudGljYXRlKGhlYWRlcnMpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXG4gICAgICBuZXcgVVJMKFxuICAgICAgICBgL2FwaS8yLjAvYWdlbnRzLyR7Y3VycmVudC5uYW1lXG4gICAgICAgICAgLnNwbGl0KFwiL1wiKVxuICAgICAgICAgIC5tYXAoKHBhcnQpID0+IGVuY29kZVVSSUNvbXBvbmVudChwYXJ0KSlcbiAgICAgICAgICAuam9pbihcIi9cIil9P3VwZGF0ZV9tYXNrPWNvbnRlbnQsZGVzY3JpcHRpb25gLFxuICAgICAgICAoYXdhaXQgdGhpcy5jbGllbnQuY29uZmlnLmdldEhvc3QoKSkudG9TdHJpbmcoKSxcbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDogXCJQQVRDSFwiLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgYWN0b3JfaWQ6IGlucHV0LmFjdG9ySWQsXG4gICAgICAgICAgcGF0aDogaW5wdXQucGF0aCxcbiAgICAgICAgICBjb250ZW50OiBpbnB1dC5jb250ZW50LFxuICAgICAgICAgIC4uLihpbnB1dC5kZXNjcmlwdGlvbiA/IHsgZGVzY3JpcHRpb246IGlucHV0LmRlc2NyaXB0aW9uIH0gOiB7fSksXG4gICAgICAgIH0pLFxuICAgICAgICAuLi4oaW5wdXQuc2lnbmFsID8geyBzaWduYWw6IGlucHV0LnNpZ25hbCB9IDoge30pLFxuICAgICAgfSxcbiAgICApO1xuICAgIGNvbnN0IGJvZHkgPSBhd2FpdCByZXNwb25zZS5qc29uKCkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBPYmplY3QuYXNzaWduKFxuICAgICAgICBuZXcgRXJyb3IoYERhdGFicmlja3MgQWdlbnQgTWVtb3J5IHJlcXVlc3QgZmFpbGVkICgke3Jlc3BvbnNlLnN0YXR1c30pYCksXG4gICAgICAgIHsgc3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZTogYm9keSB9LFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIE1hbmFnZWRNZW1vcnlFbnRyeVNjaGVtYS5wYXJzZShib2R5KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// GENERATED by projen watch - DO NOT EDIT.
|
|
2
|
+
// Regenerated from the exporting modules in ./src.
|
|
3
|
+
// Hand edits are overwritten on the next watch; this file is read-only.
|
|
4
|
+
export * as client from "./client.js";
|
|
5
|
+
export { ManagedMemoryEntrySchema, ManagedAgentMemoryClient } from "./client.js";
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGF0YWJyaWNrcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxPQUFPLEtBQUssTUFBTSxNQUFNLGFBQWEsQ0FBQztBQUN0QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHRU5FUkFURUQgYnkgcHJvamVuIHdhdGNoIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHRoZSBleHBvcnRpbmcgbW9kdWxlcyBpbiAuL3NyYy5cbi8vIEhhbmQgZWRpdHMgYXJlIG92ZXJ3cml0dGVuIG9uIHRoZSBuZXh0IHdhdGNoOyB0aGlzIGZpbGUgaXMgcmVhZC1vbmx5LlxuXG5leHBvcnQgKiBhcyBjbGllbnQgZnJvbSBcIi4vY2xpZW50LnRzXCI7XG5leHBvcnQgeyBNYW5hZ2VkTWVtb3J5RW50cnlTY2hlbWEsIE1hbmFnZWRBZ2VudE1lbW9yeUNsaWVudCB9IGZyb20gXCIuL2NsaWVudC50c1wiO1xuZXhwb3J0IHR5cGUgeyBNYW5hZ2VkTWVtb3J5RW50cnksIE1hbmFnZWRNZW1vcnlTZWFyY2hSZXN1bHQgfSBmcm9tIFwiLi9jbGllbnQudHNcIjtcbiJdfQ==
|