@anuma/sdk 3.6.3 → 3.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/expo/{chunk-FKACNV6X.mjs → chunk-AAB7OG7Q.mjs} +2 -2
- package/dist/expo/{chunk-DFVCS3QQ.mjs → chunk-BOY27A2C.mjs} +30 -3
- package/dist/expo/{consolidate-3QQPUWD6.mjs → consolidate-HKN32P5W.mjs} +25 -11
- package/dist/expo/index.cjs +107 -42
- package/dist/expo/index.d.mts +9 -0
- package/dist/expo/index.d.ts +9 -0
- package/dist/expo/index.mjs +51 -33
- package/dist/{react/recall-JOLS3V4B.mjs → expo/recall-YVU7OSSJ.mjs} +2 -2
- package/dist/react/{chunk-ZGMHRWOR.mjs → chunk-3VPEZDYL.mjs} +2 -2
- package/dist/react/{chunk-DFVCS3QQ.mjs → chunk-BOY27A2C.mjs} +30 -3
- package/dist/react/{consolidate-3MXZV3G7.mjs → consolidate-7UUX56GM.mjs} +25 -11
- package/dist/react/index.cjs +107 -42
- package/dist/react/index.d.mts +9 -0
- package/dist/react/index.d.ts +9 -0
- package/dist/react/index.mjs +51 -33
- package/dist/{expo/recall-VZHV7ILE.mjs → react/recall-Z7BWJ67X.mjs} +2 -2
- package/dist/server/{chunk-66UWDXS3.mjs → chunk-LSKFJNLF.mjs} +2 -2
- package/dist/server/{chunk-AHJT66EO.mjs → chunk-MIXEASUP.mjs} +30 -3
- package/dist/server/{consolidate-CN2GQV4D.mjs → consolidate-BKLNVH5Y.mjs} +25 -11
- package/dist/server/index.cjs +107 -42
- package/dist/server/index.d.mts +36 -0
- package/dist/server/index.d.ts +36 -0
- package/dist/server/index.mjs +51 -33
- package/dist/server/{recall-UTVH2XPK.mjs → recall-XEOLXA6P.mjs} +2 -2
- package/package.json +3 -2
package/dist/server/index.mjs
CHANGED
|
@@ -125,7 +125,7 @@ import {
|
|
|
125
125
|
updateVaultMemoryOp,
|
|
126
126
|
upsertMessageOp,
|
|
127
127
|
vaultMemoryToStored
|
|
128
|
-
} from "./chunk-
|
|
128
|
+
} from "./chunk-LSKFJNLF.mjs";
|
|
129
129
|
import {
|
|
130
130
|
createStreamingDeAnonymizer,
|
|
131
131
|
resolvePiiRedactor
|
|
@@ -135,8 +135,9 @@ import {
|
|
|
135
135
|
extractJsonCandidate,
|
|
136
136
|
getLogger,
|
|
137
137
|
resolvePortalAuthHeaders,
|
|
138
|
-
supportsResponseFormat
|
|
139
|
-
|
|
138
|
+
supportsResponseFormat,
|
|
139
|
+
validateEndpointOverride
|
|
140
|
+
} from "./chunk-MIXEASUP.mjs";
|
|
140
141
|
import {
|
|
141
142
|
BASE_URL,
|
|
142
143
|
__commonJS,
|
|
@@ -5094,10 +5095,10 @@ function injectionSignatureCatalog() {
|
|
|
5094
5095
|
}
|
|
5095
5096
|
|
|
5096
5097
|
// src/lib/memory/retain.ts
|
|
5097
|
-
var DEFAULT_AUTO_MERGE_THRESHOLD = 0.
|
|
5098
|
+
var DEFAULT_AUTO_MERGE_THRESHOLD = 0.8;
|
|
5098
5099
|
var DEFAULT_SCOPE = "private";
|
|
5099
|
-
var DEFAULT_CONSOLIDATE_THRESHOLD = 0.
|
|
5100
|
-
var DEFAULT_CONSOLIDATE_TOP_K =
|
|
5100
|
+
var DEFAULT_CONSOLIDATE_THRESHOLD = 0.55;
|
|
5101
|
+
var DEFAULT_CONSOLIDATE_TOP_K = 20;
|
|
5101
5102
|
async function retain(content, ctx, options = {}) {
|
|
5102
5103
|
const trimmed = content.trim();
|
|
5103
5104
|
if (trimmed.length === 0) {
|
|
@@ -5106,18 +5107,18 @@ async function retain(content, ctx, options = {}) {
|
|
|
5106
5107
|
const enableAutoMerge = options.enableAutoMerge ?? true;
|
|
5107
5108
|
const threshold = options.autoMergeThreshold ?? DEFAULT_AUTO_MERGE_THRESHOLD;
|
|
5108
5109
|
const resolvedScope = options.scope ?? DEFAULT_SCOPE;
|
|
5109
|
-
let
|
|
5110
|
+
let supersedeTargetIds = [];
|
|
5110
5111
|
let supersedeContent;
|
|
5111
5112
|
if (enableAutoMerge) {
|
|
5112
5113
|
if (options.consolidateOptions) {
|
|
5113
5114
|
const outcome = await tryConsolidate(trimmed, ctx, options);
|
|
5114
5115
|
if (outcome) {
|
|
5115
5116
|
if ("done" in outcome) return outcome.done;
|
|
5116
|
-
|
|
5117
|
+
supersedeTargetIds = outcome.supersede;
|
|
5117
5118
|
supersedeContent = outcome.content;
|
|
5118
5119
|
}
|
|
5119
5120
|
}
|
|
5120
|
-
if (
|
|
5121
|
+
if (supersedeTargetIds.length === 0) {
|
|
5121
5122
|
const matches = await searchVaultMemories(
|
|
5122
5123
|
trimmed,
|
|
5123
5124
|
ctx.vaultCtx,
|
|
@@ -5221,18 +5222,42 @@ async function retain(content, ctx, options = {}) {
|
|
|
5221
5222
|
// memory's tier. The DB op re-validates against the known set.
|
|
5222
5223
|
...options.trustTier !== void 0 && { trustTier: options.trustTier }
|
|
5223
5224
|
};
|
|
5224
|
-
if (
|
|
5225
|
+
if (supersedeTargetIds.length > 0) {
|
|
5226
|
+
const [primaryTargetId, ...restTargetIds] = supersedeTargetIds;
|
|
5225
5227
|
const { created: created2, retired } = await createSupersedingMemoryOp(
|
|
5226
5228
|
ctx.vaultCtx,
|
|
5227
5229
|
createOpts,
|
|
5228
|
-
|
|
5230
|
+
primaryTargetId
|
|
5229
5231
|
);
|
|
5230
5232
|
if (created2 && retired) {
|
|
5231
5233
|
ctx.vaultCache.set(created2.uniqueId, Float32Array.from(embedding));
|
|
5234
|
+
const liveLeftovers = [];
|
|
5235
|
+
for (const staleId of restTargetIds) {
|
|
5236
|
+
let ok = false;
|
|
5237
|
+
try {
|
|
5238
|
+
ok = await supersedeVaultMemoryOp(ctx.vaultCtx, staleId, created2.uniqueId) === true;
|
|
5239
|
+
} catch {
|
|
5240
|
+
}
|
|
5241
|
+
if (ok) continue;
|
|
5242
|
+
const stillLive = await getVaultMemoryOp(ctx.vaultCtx, staleId).catch(() => null);
|
|
5243
|
+
if (stillLive && !stillLive.supersededBy) liveLeftovers.push(staleId);
|
|
5244
|
+
}
|
|
5245
|
+
if (liveLeftovers.length > 0) {
|
|
5246
|
+
getLogger().warn(
|
|
5247
|
+
"[memory/retain] supersede left duplicate row(s) live \u2014 will reconcile at next consolidation",
|
|
5248
|
+
{
|
|
5249
|
+
newMemoryId: created2.uniqueId,
|
|
5250
|
+
leftover: liveLeftovers.length,
|
|
5251
|
+
// Log the specific ids (opaque record ids, not content) so an
|
|
5252
|
+
// operator can identify exactly which rows are still active.
|
|
5253
|
+
leftoverIds: liveLeftovers
|
|
5254
|
+
}
|
|
5255
|
+
);
|
|
5256
|
+
}
|
|
5232
5257
|
return {
|
|
5233
5258
|
action: "supersede",
|
|
5234
5259
|
memoryId: created2.uniqueId,
|
|
5235
|
-
targetId:
|
|
5260
|
+
targetId: primaryTargetId,
|
|
5236
5261
|
proofCount: 1
|
|
5237
5262
|
};
|
|
5238
5263
|
}
|
|
@@ -5315,13 +5340,19 @@ async function tryConsolidate(trimmed, ctx, options) {
|
|
|
5315
5340
|
content: m.content,
|
|
5316
5341
|
similarity: m.similarity
|
|
5317
5342
|
}));
|
|
5318
|
-
const { consolidateMemory: doConsolidate } = await import("./consolidate-
|
|
5343
|
+
const { consolidateMemory: doConsolidate } = await import("./consolidate-BKLNVH5Y.mjs");
|
|
5319
5344
|
const decision = await doConsolidate(trimmed, candidates, consolidateOptions);
|
|
5320
5345
|
if (decision.action === "create") return null;
|
|
5321
|
-
if (decision.action === "supersede" && decision.
|
|
5322
|
-
const
|
|
5323
|
-
if (
|
|
5324
|
-
|
|
5346
|
+
if (decision.action === "supersede" && decision.content) {
|
|
5347
|
+
const requestedIds = decision.targetIds?.length ? decision.targetIds : decision.targetId ? [decision.targetId] : [];
|
|
5348
|
+
if (requestedIds.length === 0) return null;
|
|
5349
|
+
const valid = [];
|
|
5350
|
+
for (const id of requestedIds) {
|
|
5351
|
+
const existing = await getVaultMemoryOp(ctx.vaultCtx, id);
|
|
5352
|
+
if (existing && !existing.supersededBy) valid.push(id);
|
|
5353
|
+
}
|
|
5354
|
+
if (valid.length === 0) return null;
|
|
5355
|
+
return { supersede: valid, content: decision.content };
|
|
5325
5356
|
}
|
|
5326
5357
|
if (decision.action === "noop" && decision.targetId) {
|
|
5327
5358
|
const existing = await getVaultMemoryOp(ctx.vaultCtx, decision.targetId);
|
|
@@ -7058,6 +7089,9 @@ When a memory refers to one of these, reuse the EXACT existing name (same spelli
|
|
|
7058
7089
|
...options.apiKey !== void 0 && { apiKey: options.apiKey },
|
|
7059
7090
|
...options.getToken !== void 0 && { getToken: options.getToken },
|
|
7060
7091
|
...options.baseUrl !== void 0 && { baseUrl: options.baseUrl },
|
|
7092
|
+
...options.endpointOverride !== void 0 && {
|
|
7093
|
+
endpointOverride: options.endpointOverride
|
|
7094
|
+
},
|
|
7061
7095
|
model: options.model ?? DEFAULT_EXTRACTION_MODEL,
|
|
7062
7096
|
systemPrompt: SYSTEM_PROMPT4,
|
|
7063
7097
|
userMessage: `${vocabularyNote}Memories:
|
|
@@ -11326,22 +11360,6 @@ function linkAbortSignals(a, b) {
|
|
|
11326
11360
|
}
|
|
11327
11361
|
};
|
|
11328
11362
|
}
|
|
11329
|
-
function validateEndpointOverride(override) {
|
|
11330
|
-
const trimmed = override.trim();
|
|
11331
|
-
if (trimmed === "") {
|
|
11332
|
-
return {
|
|
11333
|
-
valid: false,
|
|
11334
|
-
message: 'endpointOverride must be a non-empty, root-relative path (e.g. "/api/v1/utility/responses"); received an empty or whitespace-only string'
|
|
11335
|
-
};
|
|
11336
|
-
}
|
|
11337
|
-
if (trimmed.startsWith("//") || trimmed.includes("://")) {
|
|
11338
|
-
return {
|
|
11339
|
-
valid: false,
|
|
11340
|
-
message: `endpointOverride must be a root-relative path (e.g. "/api/v1/utility/responses"), not a protocol-relative or absolute URL; received "${trimmed}"`
|
|
11341
|
-
};
|
|
11342
|
-
}
|
|
11343
|
-
return { valid: true, endpoint: trimmed.startsWith("/") ? trimmed : `/${trimmed}` };
|
|
11344
|
-
}
|
|
11345
11363
|
async function runToolLoop(options) {
|
|
11346
11364
|
const {
|
|
11347
11365
|
model,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@anuma/sdk",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.8.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "./dist/index.cjs",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -139,7 +139,8 @@
|
|
|
139
139
|
"knip": "knip",
|
|
140
140
|
"check-exports": "publint && attw --pack --ignore-rules no-resolution false-cjs && node scripts/assert-no-client-self-import.mjs",
|
|
141
141
|
"check": "pnpm run lint && pnpm run knip && pnpm run format && pnpm run generate",
|
|
142
|
-
"eval:extraction": "tsx test/memory/src/extraction/benchmark.test.ts"
|
|
142
|
+
"eval:extraction": "tsx test/memory/src/extraction/benchmark.test.ts",
|
|
143
|
+
"eval:consolidation": "tsx test/memory/src/consolidation/benchmark.test.ts"
|
|
143
144
|
},
|
|
144
145
|
"repository": {
|
|
145
146
|
"type": "git",
|