@remnic/plugin-openclaw 1.0.10 → 1.0.11
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/{calibration-674TDQNV.js → calibration-WCHOK6DX.js} +12 -4
- package/dist/capsule-cli-TFKLAG3S.js +329 -0
- package/dist/capsule-crypto-K3IRTKRH.js +17 -0
- package/dist/capsule-export-CVA3CKUQ.js +265 -0
- package/dist/capsule-import-CFX7BY5W.js +16 -0
- package/dist/capsule-merge-7RVOHJK3.js +189 -0
- package/dist/{causal-chain-OKDZSDEB.js → causal-chain-WYN5QOPS.js} +3 -2
- package/dist/{causal-consolidation-5BEXLQV5.js → causal-consolidation-JD6KJJH6.js} +16 -12
- package/dist/{causal-retrieval-3BKBXVXD.js → causal-retrieval-NZHQOZOE.js} +6 -5
- package/dist/{causal-trajectory-graph-RQIT37DN.js → causal-trajectory-graph-VBPE2WPM.js} +1 -1
- package/dist/chunk-37NKFWSO.js +233 -0
- package/dist/chunk-3G7FAF6S.js +60 -0
- package/dist/{chunk-Z7GRLVK3.js → chunk-3GUF7RQI.js} +235 -19
- package/dist/chunk-3I7RHWYT.js +214 -0
- package/dist/chunk-4G2XCSD2.js +186 -0
- package/dist/chunk-6IWEAUN6.js +148 -0
- package/dist/{chunk-LN5UZQVG.js → chunk-6UFI73TJ.js} +5 -3
- package/dist/chunk-7OQEPGQF.js +529 -0
- package/dist/chunk-B52XADV3.js +244 -0
- package/dist/chunk-BU5KJVWF.js +78 -0
- package/dist/chunk-CXM7EBAO.js +289 -0
- package/dist/chunk-ETJZRIAM.js +227 -0
- package/dist/chunk-FQRSVYY4.js +110 -0
- package/dist/chunk-HRGFO6AW.js +349 -0
- package/dist/chunk-I6B2W2IY.js +47 -0
- package/dist/chunk-JZBOXOUC.js +259 -0
- package/dist/chunk-K7EUBNDD.js +185 -0
- package/dist/chunk-L4PRBB2A.js +1860 -0
- package/dist/chunk-MBIFE6SA.js +250 -0
- package/dist/chunk-N7EOZY6F.js +400 -0
- package/dist/chunk-NKVIN6RD.js +118 -0
- package/dist/chunk-OEI7GLV2.js +17 -0
- package/dist/{chunk-S2ISS4AH.js → chunk-P3DIW2SD.js} +10 -10
- package/dist/{chunk-7TENHBV2.js → chunk-RQCTMECT.js} +10 -48
- package/dist/chunk-SSFTU6LP.js +182 -0
- package/dist/{chunk-BXTMZDRT.js → chunk-SVSQAG6M.js} +7 -5
- package/dist/chunk-TLVIQLB4.js +874 -0
- package/dist/{chunk-JJSNPSCD.js → chunk-TNH24SF6.js} +352 -50
- package/dist/chunk-TVKKIS53.js +720 -0
- package/dist/{chunk-YHH3SXKD.js → chunk-WPINX4MF.js} +1 -59
- package/dist/{chunk-HCFFXBLV.js → chunk-XMSDA5WA.js} +5 -1861
- package/dist/chunk-YGGGUTG3.js +125 -0
- package/dist/chunk-YGXXBRV7.js +10 -0
- package/dist/cipher-VHAFCG7Z.js +27 -0
- package/dist/dreams-ledger-3I52ISYR.js +285 -0
- package/dist/{engine-65C2J63X.js → engine-VMTFKFGO.js} +5 -2
- package/dist/{fallback-llm-LVK5PDIM.js → fallback-llm-WCWNGIQ3.js} +2 -1
- package/dist/first-start-migration-I24M2JEE.js +258 -0
- package/dist/forget-NI4RBDPB.js +68 -0
- package/dist/fs-utils-PZRI2HDZ.js +29 -0
- package/dist/graph-edge-decay-5CVKWBYH.js +203 -0
- package/dist/index.js +9775 -2900
- package/dist/kdf-H5B23ZM2.js +25 -0
- package/dist/memory-governance-DWGFV4FX.js +25 -0
- package/dist/metadata-JAGIWHEA.js +20 -0
- package/dist/migrate-from-identity-anchor-N3354WMP.js +7 -0
- package/dist/path-5LCUBAAZ.js +8 -0
- package/dist/peers-JF2I6RCR.js +43 -0
- package/dist/purge-XN2VSPZ2.js +204 -0
- package/dist/secure-store-FWJ7LBPH.js +149 -0
- package/dist/state-PVISYXRH.js +7 -0
- package/dist/state-store-LP5BO6SF.js +15 -0
- package/dist/{storage-DM4ZGOCN.js → storage-T2OGFUF4.js} +3 -1
- package/dist/tier-stats-IZNW66NC.js +147 -0
- package/dist/trace-NJESSGH7.js +289 -0
- package/dist/tui-MGK2LYJY.js +12 -0
- package/dist/types-H5R5D3WF.js +30 -0
- package/openclaw.plugin.json +519 -4
- package/package.json +1 -1
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
// ../remnic-core/src/lifecycle.ts
|
|
2
|
+
var DEFAULT_POLICY = {
|
|
3
|
+
promoteHeatThreshold: 0.55,
|
|
4
|
+
staleDecayThreshold: 0.65,
|
|
5
|
+
archiveDecayThreshold: 0.85,
|
|
6
|
+
protectedCategories: ["decision", "principle", "commitment", "preference", "procedure"]
|
|
7
|
+
};
|
|
8
|
+
function clamp01(value) {
|
|
9
|
+
if (!Number.isFinite(value)) return 0;
|
|
10
|
+
if (value < 0) return 0;
|
|
11
|
+
if (value > 1) return 1;
|
|
12
|
+
return value;
|
|
13
|
+
}
|
|
14
|
+
function clampLifecycleThreshold(value) {
|
|
15
|
+
return clamp01(value);
|
|
16
|
+
}
|
|
17
|
+
function parseIsoMs(value) {
|
|
18
|
+
if (!value) return null;
|
|
19
|
+
const ms = Date.parse(value);
|
|
20
|
+
return Number.isFinite(ms) ? ms : null;
|
|
21
|
+
}
|
|
22
|
+
function daysSince(value, nowMs) {
|
|
23
|
+
const ts = parseIsoMs(value);
|
|
24
|
+
if (ts === null) return 365;
|
|
25
|
+
return Math.max(0, (nowMs - ts) / 864e5);
|
|
26
|
+
}
|
|
27
|
+
function confidenceTierWeight(frontmatter) {
|
|
28
|
+
switch (frontmatter.confidenceTier) {
|
|
29
|
+
case "explicit":
|
|
30
|
+
return 1;
|
|
31
|
+
case "implied":
|
|
32
|
+
return 0.8;
|
|
33
|
+
case "inferred":
|
|
34
|
+
return 0.6;
|
|
35
|
+
case "speculative":
|
|
36
|
+
return 0.35;
|
|
37
|
+
default:
|
|
38
|
+
return clamp01(frontmatter.confidence ?? 0.5);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function accessWeight(accessCount) {
|
|
42
|
+
const raw = accessCount ?? 0;
|
|
43
|
+
if (raw <= 0) return 0;
|
|
44
|
+
return clamp01(Math.log1p(raw) / Math.log1p(20));
|
|
45
|
+
}
|
|
46
|
+
function recencyWeight(frontmatter, nowMs) {
|
|
47
|
+
const lastTouch = frontmatter.lastAccessed ?? frontmatter.updated ?? frontmatter.created;
|
|
48
|
+
const ageDays = daysSince(lastTouch, nowMs);
|
|
49
|
+
return clamp01(1 - ageDays / 90);
|
|
50
|
+
}
|
|
51
|
+
function feedbackWeight(signals) {
|
|
52
|
+
const raw = (signals?.feedbackScore ?? 0) + (signals?.actionPriorScore ?? 0);
|
|
53
|
+
return clamp01((raw + 1) / 2);
|
|
54
|
+
}
|
|
55
|
+
function boundedFeedbackScore(signals) {
|
|
56
|
+
const raw = (signals?.feedbackScore ?? 0) + (signals?.actionPriorScore ?? 0);
|
|
57
|
+
if (!Number.isFinite(raw)) return 0;
|
|
58
|
+
if (raw < -1) return -1;
|
|
59
|
+
if (raw > 1) return 1;
|
|
60
|
+
return raw;
|
|
61
|
+
}
|
|
62
|
+
function isProtectedMemory(frontmatter, policy) {
|
|
63
|
+
return frontmatter.policyClass === "protected" || policy.protectedCategories.includes(frontmatter.category);
|
|
64
|
+
}
|
|
65
|
+
function resolveLifecycleState(frontmatter) {
|
|
66
|
+
if (frontmatter.status === "archived") return "archived";
|
|
67
|
+
return frontmatter.lifecycleState ?? "candidate";
|
|
68
|
+
}
|
|
69
|
+
function computeHeat(memory, now, signals) {
|
|
70
|
+
const frontmatter = memory.frontmatter;
|
|
71
|
+
if (frontmatter.status === "archived") return 0;
|
|
72
|
+
const inputs = computeLifecycleValueInputs(memory, now, signals);
|
|
73
|
+
const causalBoost = clamp01(signals?.causalImpactScore ?? 0) * 0.05;
|
|
74
|
+
const score = inputs.confidence * 0.25 + inputs.access * 0.3 + inputs.recency * 0.2 + inputs.importance * 0.15 + inputs.feedback * 0.1 + causalBoost - inputs.disputedPenalty;
|
|
75
|
+
return clamp01(score);
|
|
76
|
+
}
|
|
77
|
+
function computeLifecycleValueInputs(memory, now, signals) {
|
|
78
|
+
const frontmatter = memory.frontmatter;
|
|
79
|
+
const nowMs = now.getTime();
|
|
80
|
+
return {
|
|
81
|
+
confidence: confidenceTierWeight(frontmatter),
|
|
82
|
+
access: accessWeight(frontmatter.accessCount),
|
|
83
|
+
recency: recencyWeight(frontmatter, nowMs),
|
|
84
|
+
importance: clamp01(frontmatter.importance?.score ?? 0.5),
|
|
85
|
+
feedback: feedbackWeight(signals),
|
|
86
|
+
disputedPenalty: frontmatter.verificationState === "disputed" ? 0.2 : 0
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
function computeDecay(memory, now, signals) {
|
|
90
|
+
const frontmatter = memory.frontmatter;
|
|
91
|
+
if (frontmatter.status === "archived") return 1;
|
|
92
|
+
const nowMs = now.getTime();
|
|
93
|
+
const ageDays = daysSince(frontmatter.updated ?? frontmatter.created, nowMs);
|
|
94
|
+
const staleAccessDays = daysSince(frontmatter.lastAccessed, nowMs);
|
|
95
|
+
const ageRisk = clamp01(ageDays / 180);
|
|
96
|
+
const staleAccessRisk = clamp01(staleAccessDays / 120);
|
|
97
|
+
const confidenceRisk = 1 - confidenceTierWeight(frontmatter);
|
|
98
|
+
const feedbackRisk = clamp01((boundedFeedbackScore(signals) * -1 + 1) / 2);
|
|
99
|
+
const heat = computeHeat(memory, now, signals);
|
|
100
|
+
const score = ageRisk * 0.3 + staleAccessRisk * 0.25 + confidenceRisk * 0.2 + feedbackRisk * 0.1 + (1 - heat) * 0.15;
|
|
101
|
+
return clamp01(score);
|
|
102
|
+
}
|
|
103
|
+
function toTerminalDisputedState(currentState) {
|
|
104
|
+
if (currentState === "archived") return "archived";
|
|
105
|
+
return "stale";
|
|
106
|
+
}
|
|
107
|
+
function isActiveEligible(verificationState) {
|
|
108
|
+
return verificationState === "user_confirmed" || verificationState === "system_inferred";
|
|
109
|
+
}
|
|
110
|
+
function decideLifecycleTransition(memory, policy, now, signals) {
|
|
111
|
+
const mergedPolicy = { ...DEFAULT_POLICY, ...policy };
|
|
112
|
+
const frontmatter = memory.frontmatter;
|
|
113
|
+
const currentState = resolveLifecycleState(frontmatter);
|
|
114
|
+
const heatScore = computeHeat(memory, now, signals);
|
|
115
|
+
const decayScore = computeDecay(memory, now, signals);
|
|
116
|
+
const protectedMemory = isProtectedMemory(frontmatter, mergedPolicy);
|
|
117
|
+
if (currentState === "archived") {
|
|
118
|
+
return {
|
|
119
|
+
currentState,
|
|
120
|
+
nextState: "archived",
|
|
121
|
+
heatScore,
|
|
122
|
+
decayScore,
|
|
123
|
+
changed: false,
|
|
124
|
+
reason: "archived_is_terminal"
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
if (frontmatter.verificationState === "disputed") {
|
|
128
|
+
const nextState = toTerminalDisputedState(currentState);
|
|
129
|
+
return {
|
|
130
|
+
currentState,
|
|
131
|
+
nextState,
|
|
132
|
+
heatScore,
|
|
133
|
+
decayScore,
|
|
134
|
+
changed: nextState !== currentState,
|
|
135
|
+
reason: "disputed_memories_do_not_promote_to_active"
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
if (decayScore >= mergedPolicy.archiveDecayThreshold && !protectedMemory) {
|
|
139
|
+
return {
|
|
140
|
+
currentState,
|
|
141
|
+
nextState: "archived",
|
|
142
|
+
heatScore,
|
|
143
|
+
decayScore,
|
|
144
|
+
changed: true,
|
|
145
|
+
reason: "decay_exceeded_archive_threshold"
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
if (decayScore >= mergedPolicy.staleDecayThreshold) {
|
|
149
|
+
return {
|
|
150
|
+
currentState,
|
|
151
|
+
nextState: "stale",
|
|
152
|
+
heatScore,
|
|
153
|
+
decayScore,
|
|
154
|
+
changed: currentState !== "stale",
|
|
155
|
+
reason: "decay_exceeded_stale_threshold"
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
if (heatScore >= mergedPolicy.promoteHeatThreshold) {
|
|
159
|
+
const nextState = isActiveEligible(frontmatter.verificationState) ? "active" : "validated";
|
|
160
|
+
return {
|
|
161
|
+
currentState,
|
|
162
|
+
nextState,
|
|
163
|
+
heatScore,
|
|
164
|
+
decayScore,
|
|
165
|
+
changed: currentState !== nextState,
|
|
166
|
+
reason: "heat_exceeded_promote_threshold"
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
return {
|
|
170
|
+
currentState,
|
|
171
|
+
nextState: currentState,
|
|
172
|
+
heatScore,
|
|
173
|
+
decayScore,
|
|
174
|
+
changed: false,
|
|
175
|
+
reason: "no_transition"
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
export {
|
|
180
|
+
clamp01,
|
|
181
|
+
clampLifecycleThreshold,
|
|
182
|
+
daysSince,
|
|
183
|
+
resolveLifecycleState,
|
|
184
|
+
computeLifecycleValueInputs,
|
|
185
|
+
decideLifecycleTransition
|
|
186
|
+
};
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
// ../remnic-core/src/secure-store/kdf.ts
|
|
2
|
+
import { scryptSync, timingSafeEqual } from "crypto";
|
|
3
|
+
import { createRequire } from "module";
|
|
4
|
+
var requireArgon2 = createRequire(import.meta.url);
|
|
5
|
+
var argon2Runtime;
|
|
6
|
+
function loadArgon2Runtime() {
|
|
7
|
+
try {
|
|
8
|
+
argon2Runtime ??= requireArgon2("@node-rs/argon2");
|
|
9
|
+
return argon2Runtime;
|
|
10
|
+
} catch (cause) {
|
|
11
|
+
throw new Error(
|
|
12
|
+
"Argon2id KDF requires @node-rs/argon2 to be installed and loadable on this platform. Use scrypt compatibility mode for stores that must run without the Argon2 native binding.",
|
|
13
|
+
{ cause }
|
|
14
|
+
);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
var DEFAULT_SCRYPT_PARAMS = Object.freeze({
|
|
18
|
+
// 2^17. Hex-coding the literal would obscure the doubling chain.
|
|
19
|
+
N: 1 << 17,
|
|
20
|
+
r: 8,
|
|
21
|
+
p: 1,
|
|
22
|
+
keyLength: 32,
|
|
23
|
+
// 256 MiB ceiling — comfortably above the 128 MiB scrypt needs at N=2^17.
|
|
24
|
+
maxmem: 256 * 1024 * 1024
|
|
25
|
+
});
|
|
26
|
+
var DEFAULT_ARGON2ID_PARAMS = Object.freeze({
|
|
27
|
+
memoryKiB: 64 * 1024,
|
|
28
|
+
iterations: 3,
|
|
29
|
+
parallelism: 4,
|
|
30
|
+
keyLength: 32
|
|
31
|
+
});
|
|
32
|
+
var KDF_SALT_LENGTH = 16;
|
|
33
|
+
var KDF_KEY_LENGTH = 32;
|
|
34
|
+
function validateScryptParams(params) {
|
|
35
|
+
const { N, r, p, keyLength, maxmem } = params;
|
|
36
|
+
if (!Number.isInteger(N) || N < 2) {
|
|
37
|
+
throw new Error(`scrypt N must be an integer \u2265 2, got ${N}`);
|
|
38
|
+
}
|
|
39
|
+
if (N > 2 ** 30) {
|
|
40
|
+
throw new Error(`scrypt N is unreasonably large (max 2^30), got ${N}`);
|
|
41
|
+
}
|
|
42
|
+
if (!Number.isInteger(Math.log2(N))) {
|
|
43
|
+
throw new Error(`scrypt N must be a power of 2, got ${N}`);
|
|
44
|
+
}
|
|
45
|
+
if (!Number.isInteger(r) || r < 1) {
|
|
46
|
+
throw new Error(`scrypt r must be a positive integer, got ${r}`);
|
|
47
|
+
}
|
|
48
|
+
if (!Number.isInteger(p) || p < 1) {
|
|
49
|
+
throw new Error(`scrypt p must be a positive integer, got ${p}`);
|
|
50
|
+
}
|
|
51
|
+
if (!Number.isInteger(keyLength) || keyLength < 16) {
|
|
52
|
+
throw new Error(
|
|
53
|
+
`scrypt keyLength must be \u2265 16 (need 32 for AES-256), got ${keyLength}`
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
if (!Number.isInteger(maxmem) || maxmem < 1024) {
|
|
57
|
+
throw new Error(`scrypt maxmem must be a sane positive integer, got ${maxmem}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function validateArgon2idParams(params) {
|
|
61
|
+
const { memoryKiB, iterations, parallelism, keyLength } = params;
|
|
62
|
+
if (!Number.isInteger(memoryKiB) || memoryKiB < 8) {
|
|
63
|
+
throw new Error(`argon2id memoryKiB must be an integer \u2265 8, got ${memoryKiB}`);
|
|
64
|
+
}
|
|
65
|
+
if (!Number.isInteger(iterations) || iterations < 1) {
|
|
66
|
+
throw new Error(`argon2id iterations must be a positive integer, got ${iterations}`);
|
|
67
|
+
}
|
|
68
|
+
if (!Number.isInteger(parallelism) || parallelism < 1 || parallelism > 255) {
|
|
69
|
+
throw new Error(`argon2id parallelism must be an integer in [1, 255], got ${parallelism}`);
|
|
70
|
+
}
|
|
71
|
+
if (!Number.isInteger(keyLength) || keyLength !== KDF_KEY_LENGTH) {
|
|
72
|
+
throw new Error(
|
|
73
|
+
`argon2id keyLength must be ${KDF_KEY_LENGTH} (AES-256 requires a 32-byte key), got ${keyLength}`
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
function deriveKeyScrypt(passphrase, salt, params = DEFAULT_SCRYPT_PARAMS) {
|
|
78
|
+
if (typeof passphrase !== "string") {
|
|
79
|
+
throw new Error("passphrase must be a string");
|
|
80
|
+
}
|
|
81
|
+
if (passphrase.length === 0) {
|
|
82
|
+
throw new Error("passphrase must not be empty");
|
|
83
|
+
}
|
|
84
|
+
if (!(salt instanceof Uint8Array) || salt.length < 8) {
|
|
85
|
+
throw new Error(
|
|
86
|
+
`salt must be a Uint8Array of at least 8 bytes, got ${salt?.length ?? "non-buffer"}`
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
validateScryptParams(params);
|
|
90
|
+
return scryptSync(passphrase, Buffer.from(salt), params.keyLength, {
|
|
91
|
+
N: params.N,
|
|
92
|
+
r: params.r,
|
|
93
|
+
p: params.p,
|
|
94
|
+
maxmem: params.maxmem
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
function deriveKeyArgon2id(passphrase, salt, params = DEFAULT_ARGON2ID_PARAMS) {
|
|
98
|
+
if (typeof passphrase !== "string") {
|
|
99
|
+
throw new Error("passphrase must be a string");
|
|
100
|
+
}
|
|
101
|
+
if (passphrase.length === 0) {
|
|
102
|
+
throw new Error("passphrase must not be empty");
|
|
103
|
+
}
|
|
104
|
+
if (!(salt instanceof Uint8Array) || salt.length < 8) {
|
|
105
|
+
throw new Error(
|
|
106
|
+
`salt must be a Uint8Array of at least 8 bytes, got ${salt?.length ?? "non-buffer"}`
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
validateArgon2idParams(params);
|
|
110
|
+
const { Algorithm, Version, hashRawSync } = loadArgon2Runtime();
|
|
111
|
+
return hashRawSync(passphrase, {
|
|
112
|
+
algorithm: Algorithm.Argon2id,
|
|
113
|
+
version: Version.V0x13,
|
|
114
|
+
memoryCost: params.memoryKiB,
|
|
115
|
+
timeCost: params.iterations,
|
|
116
|
+
parallelism: params.parallelism,
|
|
117
|
+
outputLen: params.keyLength,
|
|
118
|
+
salt
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
function deriveKey(algorithm, passphrase, salt, params) {
|
|
122
|
+
if (algorithm === "scrypt") {
|
|
123
|
+
return deriveKeyScrypt(passphrase, salt, params);
|
|
124
|
+
}
|
|
125
|
+
if (algorithm === "argon2id") {
|
|
126
|
+
return deriveKeyArgon2id(passphrase, salt, params);
|
|
127
|
+
}
|
|
128
|
+
throw new Error(`unknown KDF algorithm: ${algorithm}`);
|
|
129
|
+
}
|
|
130
|
+
function constantTimeEqual(a, b) {
|
|
131
|
+
if (a.length !== b.length) {
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
134
|
+
return timingSafeEqual(Buffer.from(a), Buffer.from(b));
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
export {
|
|
138
|
+
DEFAULT_SCRYPT_PARAMS,
|
|
139
|
+
DEFAULT_ARGON2ID_PARAMS,
|
|
140
|
+
KDF_SALT_LENGTH,
|
|
141
|
+
KDF_KEY_LENGTH,
|
|
142
|
+
validateScryptParams,
|
|
143
|
+
validateArgon2idParams,
|
|
144
|
+
deriveKeyScrypt,
|
|
145
|
+
deriveKeyArgon2id,
|
|
146
|
+
deriveKey,
|
|
147
|
+
constantTimeEqual
|
|
148
|
+
};
|
|
@@ -1,14 +1,16 @@
|
|
|
1
|
+
import {
|
|
2
|
+
countRecallTokenOverlap,
|
|
3
|
+
normalizeRecallTokens
|
|
4
|
+
} from "./chunk-WPINX4MF.js";
|
|
1
5
|
import {
|
|
2
6
|
assertIsoRecordedAt,
|
|
3
7
|
assertSafePathSegment,
|
|
4
8
|
assertString,
|
|
5
|
-
countRecallTokenOverlap,
|
|
6
9
|
isRecord,
|
|
7
|
-
normalizeRecallTokens,
|
|
8
10
|
optionalString,
|
|
9
11
|
optionalStringArray,
|
|
10
12
|
validateStringRecord
|
|
11
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-3G7FAF6S.js";
|
|
12
14
|
import {
|
|
13
15
|
listJsonFiles,
|
|
14
16
|
readJsonFile
|