dotmem 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -9
- package/cli.cjs +1418 -65
- package/cli.js +1418 -65
- package/global.cjs +363 -28
- package/global.js +363 -28
- package/index.cjs +373 -38
- package/index.js +373 -38
- package/mcp.cjs +385 -43
- package/mcp.js +385 -43
- package/package.json +1 -1
- package/types/memory.d.ts +1 -1
package/global.cjs
CHANGED
|
@@ -1657,7 +1657,10 @@ var init_discover = __esm({
|
|
|
1657
1657
|
`);
|
|
1658
1658
|
}
|
|
1659
1659
|
}, "diagnostic");
|
|
1660
|
-
DEFAULT_LIMITS = {
|
|
1660
|
+
DEFAULT_LIMITS = {
|
|
1661
|
+
current: 8,
|
|
1662
|
+
deep: 25
|
|
1663
|
+
};
|
|
1661
1664
|
FIELD_ORDER = [
|
|
1662
1665
|
"id",
|
|
1663
1666
|
"knowledge",
|
|
@@ -2882,7 +2885,7 @@ var init_policy_store = __esm({
|
|
|
2882
2885
|
});
|
|
2883
2886
|
|
|
2884
2887
|
// core/knowledge/acquisition-limits.ts
|
|
2885
|
-
var MEMORY_ACQUIRE_LIMITS, MEMORY_ACQUIRE_LIMITS_MCP, MEMORY_STORE_LIMITS, DOTMEM_ACQUIRE_ERROR_CODES, MemoryAcquireLimitError, MemoryAcquireConcurrencyError, encoder, serializedBytes, measureKnowledge, checkAcquireLimits;
|
|
2888
|
+
var MEMORY_ACQUIRE_LIMITS, MEMORY_ACQUIRE_LIMITS_MCP, MEMORY_STORE_LIMITS, DOTMEM_ACQUIRE_ERROR_CODES, MemoryAcquireLimitError, MemoryAcquireConcurrencyError, MemoryAcquireDuplicateClaimError, encoder, serializedBytes, measureKnowledge, checkAcquireLimits;
|
|
2886
2889
|
var init_acquisition_limits = __esm({
|
|
2887
2890
|
"core/knowledge/acquisition-limits.ts"() {
|
|
2888
2891
|
MEMORY_ACQUIRE_LIMITS = Object.freeze({
|
|
@@ -2905,7 +2908,8 @@ var init_acquisition_limits = __esm({
|
|
|
2905
2908
|
STORE_UNREADABLE: "DOTMEM_STORE_UNREADABLE",
|
|
2906
2909
|
CONCURRENT_WRITE: "DOTMEM_CONCURRENT_WRITE",
|
|
2907
2910
|
SESSION_ACQUIRE_LIMIT: "DOTMEM_SESSION_ACQUIRE_LIMIT",
|
|
2908
|
-
POLICY_REFUSED: "DOTMEM_POLICY_REFUSED"
|
|
2911
|
+
POLICY_REFUSED: "DOTMEM_POLICY_REFUSED",
|
|
2912
|
+
DUPLICATE_CLAIM: "DOTMEM_DUPLICATE_CLAIM"
|
|
2909
2913
|
});
|
|
2910
2914
|
MemoryAcquireLimitError = class extends Error {
|
|
2911
2915
|
static {
|
|
@@ -2929,6 +2933,17 @@ var init_acquisition_limits = __esm({
|
|
|
2929
2933
|
this.name = "MemoryAcquireConcurrencyError";
|
|
2930
2934
|
}
|
|
2931
2935
|
};
|
|
2936
|
+
MemoryAcquireDuplicateClaimError = class extends Error {
|
|
2937
|
+
static {
|
|
2938
|
+
__name(this, "MemoryAcquireDuplicateClaimError");
|
|
2939
|
+
}
|
|
2940
|
+
code = DOTMEM_ACQUIRE_ERROR_CODES.DUPLICATE_CLAIM;
|
|
2941
|
+
retryable = false;
|
|
2942
|
+
constructor(message, options) {
|
|
2943
|
+
super(message, options);
|
|
2944
|
+
this.name = "MemoryAcquireDuplicateClaimError";
|
|
2945
|
+
}
|
|
2946
|
+
};
|
|
2932
2947
|
encoder = new TextEncoder();
|
|
2933
2948
|
serializedBytes = /* @__PURE__ */ __name((value) => {
|
|
2934
2949
|
const json = JSON.stringify(value);
|
|
@@ -5409,6 +5424,267 @@ var init_user_identity = __esm({
|
|
|
5409
5424
|
}
|
|
5410
5425
|
});
|
|
5411
5426
|
|
|
5427
|
+
// core/knowledge/user-language.ts
|
|
5428
|
+
var user_language_exports = {};
|
|
5429
|
+
__export(user_language_exports, {
|
|
5430
|
+
DEFAULT_LANGUAGE: () => DEFAULT_LANGUAGE,
|
|
5431
|
+
DEFAULT_RESPONSE_LANGUAGE: () => DEFAULT_RESPONSE_LANGUAGE,
|
|
5432
|
+
DEFAULT_USER_LANGUAGE: () => DEFAULT_USER_LANGUAGE,
|
|
5433
|
+
LANGUAGE_DEFAULT: () => LANGUAGE_DEFAULT,
|
|
5434
|
+
LANGUAGE_PREFERENCE_FILE_NAME: () => LANGUAGE_PREFERENCE_FILE_NAME,
|
|
5435
|
+
PREFERENCES_FILE_NAME: () => PREFERENCES_FILE_NAME,
|
|
5436
|
+
USER_LANGUAGE_DEFAULT: () => USER_LANGUAGE_DEFAULT,
|
|
5437
|
+
USER_LANGUAGE_FILE_NAME: () => USER_LANGUAGE_FILE_NAME,
|
|
5438
|
+
USER_LANGUAGE_PREFERENCE_FILE_NAME: () => USER_LANGUAGE_PREFERENCE_FILE_NAME,
|
|
5439
|
+
USER_PREFERENCES_FILE_NAME: () => USER_PREFERENCES_FILE_NAME,
|
|
5440
|
+
getLanguagePreference: () => getLanguagePreference,
|
|
5441
|
+
getResponseLanguage: () => getResponseLanguage,
|
|
5442
|
+
getUserLanguage: () => getUserLanguage,
|
|
5443
|
+
getUserLanguagePreference: () => getUserLanguagePreference,
|
|
5444
|
+
isItalian: () => isItalian,
|
|
5445
|
+
language: () => language,
|
|
5446
|
+
languageTag: () => languageTag,
|
|
5447
|
+
loadLanguagePreference: () => loadLanguagePreference,
|
|
5448
|
+
loadUserLanguage: () => loadUserLanguage,
|
|
5449
|
+
loadUserLanguagePreference: () => loadUserLanguagePreference,
|
|
5450
|
+
preferredLanguage: () => preferredLanguage,
|
|
5451
|
+
readUserLanguage: () => readUserLanguage,
|
|
5452
|
+
resolveLanguage: () => resolveLanguage,
|
|
5453
|
+
resolveLanguagePath: () => resolveLanguagePath,
|
|
5454
|
+
resolveLanguagePreference: () => resolveLanguagePreference,
|
|
5455
|
+
resolveLanguagePreferencePath: () => resolveLanguagePreferencePath,
|
|
5456
|
+
resolveResponseLanguage: () => resolveResponseLanguage,
|
|
5457
|
+
resolveUserLanguage: () => resolveUserLanguage,
|
|
5458
|
+
resolveUserLanguagePath: () => resolveUserLanguagePath,
|
|
5459
|
+
resolveUserLanguagePreferencePath: () => resolveUserLanguagePreferencePath,
|
|
5460
|
+
responseLanguage: () => responseLanguage,
|
|
5461
|
+
saveLanguagePreference: () => saveLanguagePreference,
|
|
5462
|
+
saveUserLanguage: () => saveUserLanguage,
|
|
5463
|
+
setUserLanguage: () => setUserLanguage,
|
|
5464
|
+
userLanguage: () => userLanguage,
|
|
5465
|
+
writeUserLanguage: () => writeUserLanguage
|
|
5466
|
+
});
|
|
5467
|
+
function joinPath3(base, child) {
|
|
5468
|
+
const separator3 = process.platform === "win32" ? "\\" : "/";
|
|
5469
|
+
return `${base.replace(/[\\/]+/g, separator3)}${separator3}${child}`;
|
|
5470
|
+
}
|
|
5471
|
+
function resolveUserLanguagePath() {
|
|
5472
|
+
return joinPath3(resolveUserDotMemPath(), USER_LANGUAGE_FILE_NAME);
|
|
5473
|
+
}
|
|
5474
|
+
function resolveUserLanguagePreferencePath() {
|
|
5475
|
+
return resolveUserLanguagePath();
|
|
5476
|
+
}
|
|
5477
|
+
function resolveLanguagePath() {
|
|
5478
|
+
return resolveUserLanguagePath();
|
|
5479
|
+
}
|
|
5480
|
+
function resolveLanguagePreferencePath() {
|
|
5481
|
+
return resolveUserLanguagePath();
|
|
5482
|
+
}
|
|
5483
|
+
function readJsonFile(path) {
|
|
5484
|
+
const fs = getSyncFs();
|
|
5485
|
+
if (!fs) return null;
|
|
5486
|
+
let raw;
|
|
5487
|
+
try {
|
|
5488
|
+
raw = fs.readFileSync(path, "utf8");
|
|
5489
|
+
} catch {
|
|
5490
|
+
return null;
|
|
5491
|
+
}
|
|
5492
|
+
if (typeof raw !== "string") return null;
|
|
5493
|
+
if (raw.charCodeAt(0) === 65279) raw = raw.slice(1);
|
|
5494
|
+
try {
|
|
5495
|
+
return JSON.parse(raw);
|
|
5496
|
+
} catch {
|
|
5497
|
+
return null;
|
|
5498
|
+
}
|
|
5499
|
+
}
|
|
5500
|
+
function extractLanguage(value) {
|
|
5501
|
+
if (value === null || value === void 0) return null;
|
|
5502
|
+
if (typeof value === "string") {
|
|
5503
|
+
const trimmed = value.trim();
|
|
5504
|
+
return trimmed ? trimmed : null;
|
|
5505
|
+
}
|
|
5506
|
+
if (typeof value !== "object" || Array.isArray(value)) return null;
|
|
5507
|
+
for (const key of LANGUAGE_KEYS) {
|
|
5508
|
+
if (Object.prototype.hasOwnProperty.call(value, key)) {
|
|
5509
|
+
const candidate = extractLanguage(value[key]);
|
|
5510
|
+
if (candidate) return candidate;
|
|
5511
|
+
}
|
|
5512
|
+
}
|
|
5513
|
+
for (const containerKey of ["preferences", "user", "agent", "config", "settings", "storage"]) {
|
|
5514
|
+
if (Object.prototype.hasOwnProperty.call(value, containerKey)) {
|
|
5515
|
+
const candidate = extractLanguage(value[containerKey]);
|
|
5516
|
+
if (candidate) return candidate;
|
|
5517
|
+
}
|
|
5518
|
+
}
|
|
5519
|
+
return null;
|
|
5520
|
+
}
|
|
5521
|
+
function loadUserLanguage() {
|
|
5522
|
+
const fs = getSyncFs();
|
|
5523
|
+
const anchor = resolveUserDotMemPath();
|
|
5524
|
+
if (fs) {
|
|
5525
|
+
for (const name of LANGUAGE_FILE_NAMES) {
|
|
5526
|
+
const candidatePath = joinPath3(anchor, name);
|
|
5527
|
+
const parsed = readJsonFile(candidatePath);
|
|
5528
|
+
const language2 = extractLanguage(parsed);
|
|
5529
|
+
if (language2) return language2;
|
|
5530
|
+
}
|
|
5531
|
+
try {
|
|
5532
|
+
const govPath = joinPath3(joinPath3(anchor, "policy"), "identity-governance.json");
|
|
5533
|
+
const gov = readJsonFile(govPath);
|
|
5534
|
+
const language2 = extractLanguage(gov);
|
|
5535
|
+
if (language2) return language2;
|
|
5536
|
+
} catch {
|
|
5537
|
+
}
|
|
5538
|
+
try {
|
|
5539
|
+
const settingsPath = joinPath3(anchor, "dotmem.settings.json");
|
|
5540
|
+
const settings = readJsonFile(settingsPath);
|
|
5541
|
+
const language2 = extractLanguage(settings);
|
|
5542
|
+
if (language2) return language2;
|
|
5543
|
+
} catch {
|
|
5544
|
+
}
|
|
5545
|
+
}
|
|
5546
|
+
const env = globalThis?.process?.env;
|
|
5547
|
+
const envLang = env?.DOTMEM_LANGUAGE || env?.DOTMEM_RESPONSE_LANGUAGE || env?.DOTMEM_USER_LANGUAGE;
|
|
5548
|
+
if (typeof envLang === "string" && envLang.trim()) return envLang.trim();
|
|
5549
|
+
return DEFAULT_USER_LANGUAGE;
|
|
5550
|
+
}
|
|
5551
|
+
function readUserLanguage() {
|
|
5552
|
+
return loadUserLanguage();
|
|
5553
|
+
}
|
|
5554
|
+
function getUserLanguage() {
|
|
5555
|
+
return loadUserLanguage();
|
|
5556
|
+
}
|
|
5557
|
+
function resolveUserLanguage() {
|
|
5558
|
+
return loadUserLanguage();
|
|
5559
|
+
}
|
|
5560
|
+
function resolveLanguage() {
|
|
5561
|
+
return loadUserLanguage();
|
|
5562
|
+
}
|
|
5563
|
+
function loadLanguagePreference() {
|
|
5564
|
+
return loadUserLanguage();
|
|
5565
|
+
}
|
|
5566
|
+
function getLanguagePreference() {
|
|
5567
|
+
return loadUserLanguage();
|
|
5568
|
+
}
|
|
5569
|
+
function resolveLanguagePreference() {
|
|
5570
|
+
return loadUserLanguage();
|
|
5571
|
+
}
|
|
5572
|
+
function loadUserLanguagePreference() {
|
|
5573
|
+
return loadUserLanguage();
|
|
5574
|
+
}
|
|
5575
|
+
function getUserLanguagePreference() {
|
|
5576
|
+
return loadUserLanguage();
|
|
5577
|
+
}
|
|
5578
|
+
function resolveResponseLanguage() {
|
|
5579
|
+
return loadUserLanguage();
|
|
5580
|
+
}
|
|
5581
|
+
function getResponseLanguage() {
|
|
5582
|
+
return loadUserLanguage();
|
|
5583
|
+
}
|
|
5584
|
+
async function setUserLanguage(language2) {
|
|
5585
|
+
const fsMod = await import('fs/promises');
|
|
5586
|
+
const path = resolveUserLanguagePath();
|
|
5587
|
+
const dir = parentStoragePath(path);
|
|
5588
|
+
await fsMod.mkdir(dir, { recursive: true });
|
|
5589
|
+
const payload = { format: "dotmem.language", version: 1, language: String(language2).trim() };
|
|
5590
|
+
const temporary = `${path}.${process.pid}.${Date.now().toString(36)}.tmp`;
|
|
5591
|
+
await fsMod.writeFile(temporary, `${JSON.stringify(payload, null, 2)}
|
|
5592
|
+
`, "utf8");
|
|
5593
|
+
await fsMod.rename(temporary, path);
|
|
5594
|
+
return payload.language;
|
|
5595
|
+
}
|
|
5596
|
+
async function saveUserLanguage(language2) {
|
|
5597
|
+
return setUserLanguage(language2);
|
|
5598
|
+
}
|
|
5599
|
+
async function writeUserLanguage(language2) {
|
|
5600
|
+
return setUserLanguage(language2);
|
|
5601
|
+
}
|
|
5602
|
+
async function saveLanguagePreference(language2) {
|
|
5603
|
+
return setUserLanguage(language2);
|
|
5604
|
+
}
|
|
5605
|
+
function isItalian(language2) {
|
|
5606
|
+
const value = (language2 ?? loadUserLanguage()).toLowerCase();
|
|
5607
|
+
return value === "it" || value === "it-it" || value.startsWith("it-");
|
|
5608
|
+
}
|
|
5609
|
+
function languageTag() {
|
|
5610
|
+
return loadUserLanguage();
|
|
5611
|
+
}
|
|
5612
|
+
var USER_LANGUAGE_FILE_NAME, USER_LANGUAGE_PREFERENCE_FILE_NAME, LANGUAGE_PREFERENCE_FILE_NAME, USER_PREFERENCES_FILE_NAME, PREFERENCES_FILE_NAME, DEFAULT_USER_LANGUAGE, DEFAULT_LANGUAGE, USER_LANGUAGE_DEFAULT, LANGUAGE_DEFAULT, DEFAULT_RESPONSE_LANGUAGE, LANGUAGE_FILE_NAMES, LANGUAGE_KEYS, userLanguage, language, responseLanguage, preferredLanguage;
|
|
5613
|
+
var init_user_language = __esm({
|
|
5614
|
+
"core/knowledge/user-language.ts"() {
|
|
5615
|
+
init_user_paths();
|
|
5616
|
+
init_storage_paths();
|
|
5617
|
+
USER_LANGUAGE_FILE_NAME = "language.json";
|
|
5618
|
+
USER_LANGUAGE_PREFERENCE_FILE_NAME = "user-language.json";
|
|
5619
|
+
LANGUAGE_PREFERENCE_FILE_NAME = "language-preference.json";
|
|
5620
|
+
USER_PREFERENCES_FILE_NAME = "user-preferences.json";
|
|
5621
|
+
PREFERENCES_FILE_NAME = "preferences.json";
|
|
5622
|
+
DEFAULT_USER_LANGUAGE = "it-IT";
|
|
5623
|
+
DEFAULT_LANGUAGE = "it-IT";
|
|
5624
|
+
USER_LANGUAGE_DEFAULT = "it-IT";
|
|
5625
|
+
LANGUAGE_DEFAULT = "it-IT";
|
|
5626
|
+
DEFAULT_RESPONSE_LANGUAGE = "it-IT";
|
|
5627
|
+
LANGUAGE_FILE_NAMES = [
|
|
5628
|
+
USER_LANGUAGE_FILE_NAME,
|
|
5629
|
+
USER_LANGUAGE_PREFERENCE_FILE_NAME,
|
|
5630
|
+
LANGUAGE_PREFERENCE_FILE_NAME,
|
|
5631
|
+
USER_PREFERENCES_FILE_NAME,
|
|
5632
|
+
PREFERENCES_FILE_NAME,
|
|
5633
|
+
"config.json",
|
|
5634
|
+
"user-config.json",
|
|
5635
|
+
"agent-config.json",
|
|
5636
|
+
"dotmem.config.json"
|
|
5637
|
+
];
|
|
5638
|
+
LANGUAGE_KEYS = [
|
|
5639
|
+
"language",
|
|
5640
|
+
"Language",
|
|
5641
|
+
"responseLanguage",
|
|
5642
|
+
"response_language",
|
|
5643
|
+
"preferredLanguage",
|
|
5644
|
+
"preferred_language",
|
|
5645
|
+
"userLanguage",
|
|
5646
|
+
"user_language",
|
|
5647
|
+
"defaultLanguage",
|
|
5648
|
+
"default_language",
|
|
5649
|
+
"locale",
|
|
5650
|
+
"lang",
|
|
5651
|
+
"uiLanguage",
|
|
5652
|
+
"ui_language",
|
|
5653
|
+
"conversationLanguage",
|
|
5654
|
+
"conversation_language"
|
|
5655
|
+
];
|
|
5656
|
+
__name(joinPath3, "joinPath");
|
|
5657
|
+
__name(resolveUserLanguagePath, "resolveUserLanguagePath");
|
|
5658
|
+
__name(resolveUserLanguagePreferencePath, "resolveUserLanguagePreferencePath");
|
|
5659
|
+
__name(resolveLanguagePath, "resolveLanguagePath");
|
|
5660
|
+
__name(resolveLanguagePreferencePath, "resolveLanguagePreferencePath");
|
|
5661
|
+
__name(readJsonFile, "readJsonFile");
|
|
5662
|
+
__name(extractLanguage, "extractLanguage");
|
|
5663
|
+
__name(loadUserLanguage, "loadUserLanguage");
|
|
5664
|
+
__name(readUserLanguage, "readUserLanguage");
|
|
5665
|
+
__name(getUserLanguage, "getUserLanguage");
|
|
5666
|
+
__name(resolveUserLanguage, "resolveUserLanguage");
|
|
5667
|
+
__name(resolveLanguage, "resolveLanguage");
|
|
5668
|
+
__name(loadLanguagePreference, "loadLanguagePreference");
|
|
5669
|
+
__name(getLanguagePreference, "getLanguagePreference");
|
|
5670
|
+
__name(resolveLanguagePreference, "resolveLanguagePreference");
|
|
5671
|
+
__name(loadUserLanguagePreference, "loadUserLanguagePreference");
|
|
5672
|
+
__name(getUserLanguagePreference, "getUserLanguagePreference");
|
|
5673
|
+
__name(resolveResponseLanguage, "resolveResponseLanguage");
|
|
5674
|
+
__name(getResponseLanguage, "getResponseLanguage");
|
|
5675
|
+
__name(setUserLanguage, "setUserLanguage");
|
|
5676
|
+
__name(saveUserLanguage, "saveUserLanguage");
|
|
5677
|
+
__name(writeUserLanguage, "writeUserLanguage");
|
|
5678
|
+
__name(saveLanguagePreference, "saveLanguagePreference");
|
|
5679
|
+
__name(isItalian, "isItalian");
|
|
5680
|
+
__name(languageTag, "languageTag");
|
|
5681
|
+
userLanguage = loadUserLanguage();
|
|
5682
|
+
language = loadUserLanguage();
|
|
5683
|
+
responseLanguage = loadUserLanguage();
|
|
5684
|
+
preferredLanguage = loadUserLanguage();
|
|
5685
|
+
}
|
|
5686
|
+
});
|
|
5687
|
+
|
|
5412
5688
|
// core/profile/ai.json
|
|
5413
5689
|
var ai_default;
|
|
5414
5690
|
var init_ai = __esm({
|
|
@@ -5817,6 +6093,45 @@ var init_project_identity = __esm({
|
|
|
5817
6093
|
}
|
|
5818
6094
|
});
|
|
5819
6095
|
|
|
6096
|
+
// core/knowledge/uuid.ts
|
|
6097
|
+
var generateUuidV7;
|
|
6098
|
+
var init_uuid = __esm({
|
|
6099
|
+
"core/knowledge/uuid.ts"() {
|
|
6100
|
+
generateUuidV7 = /* @__PURE__ */ __name(() => {
|
|
6101
|
+
const cryptoObj = globalThis.crypto;
|
|
6102
|
+
const ms = Date.now();
|
|
6103
|
+
const rand = new Uint8Array(10);
|
|
6104
|
+
if (cryptoObj && typeof cryptoObj.getRandomValues === "function") {
|
|
6105
|
+
cryptoObj.getRandomValues(rand);
|
|
6106
|
+
} else {
|
|
6107
|
+
for (let i2 = 0; i2 < rand.length; i2 += 1) {
|
|
6108
|
+
rand[i2] = Math.floor(Math.random() * 256);
|
|
6109
|
+
}
|
|
6110
|
+
}
|
|
6111
|
+
const bytes = new Uint8Array(16);
|
|
6112
|
+
bytes[0] = ms / 1099511627776 & 255;
|
|
6113
|
+
bytes[1] = ms / 4294967296 & 255;
|
|
6114
|
+
bytes[2] = ms / 16777216 & 255;
|
|
6115
|
+
bytes[3] = ms / 65536 & 255;
|
|
6116
|
+
bytes[4] = ms / 256 & 255;
|
|
6117
|
+
bytes[5] = ms & 255;
|
|
6118
|
+
const randA = (rand[0] << 8 | rand[1]) & 4095;
|
|
6119
|
+
bytes[6] = 112 | randA >> 8;
|
|
6120
|
+
bytes[7] = randA & 255;
|
|
6121
|
+
bytes[8] = 128 | rand[2] & 63;
|
|
6122
|
+
bytes[9] = rand[3];
|
|
6123
|
+
bytes[10] = rand[4];
|
|
6124
|
+
bytes[11] = rand[5];
|
|
6125
|
+
bytes[12] = rand[6];
|
|
6126
|
+
bytes[13] = rand[7];
|
|
6127
|
+
bytes[14] = rand[8];
|
|
6128
|
+
bytes[15] = rand[9];
|
|
6129
|
+
const hex = Array.from(bytes).map((byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
6130
|
+
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
|
|
6131
|
+
}, "generateUuidV7");
|
|
6132
|
+
}
|
|
6133
|
+
});
|
|
6134
|
+
|
|
5820
6135
|
// core/knowledge/staging.ts
|
|
5821
6136
|
var DOTMEM_STAGE_FORMAT, DOTMEM_STAGE_VERSION, StageFileError, generateRequestId, nodeCwd, resolveStagingDirectory, stagePathFor, nodeFs6, normalizeClaimIds, revisionFromOptions, writeStageFile, readStageFile, validateStageFile, commitStageFile, cleanupStageFile;
|
|
5822
6137
|
var init_staging = __esm({
|
|
@@ -5828,6 +6143,7 @@ var init_staging = __esm({
|
|
|
5828
6143
|
init_store_queue();
|
|
5829
6144
|
init_state();
|
|
5830
6145
|
init_project_identity();
|
|
6146
|
+
init_uuid();
|
|
5831
6147
|
init_project_anchor();
|
|
5832
6148
|
DOTMEM_STAGE_FORMAT = "dotmem.stage";
|
|
5833
6149
|
DOTMEM_STAGE_VERSION = 1;
|
|
@@ -5871,9 +6187,11 @@ var init_staging = __esm({
|
|
|
5871
6187
|
return void 0;
|
|
5872
6188
|
}, "revisionFromOptions");
|
|
5873
6189
|
writeStageFile = /* @__PURE__ */ __name(async (claim, scope, sourceProject) => {
|
|
6190
|
+
const claimId = claim.id && claim.id.trim() ? claim.id.trim() : generateUuidV7();
|
|
5874
6191
|
const sanitized = sanitizeKnowledge(claim.knowledge);
|
|
5875
6192
|
const sanitizedClaim = {
|
|
5876
6193
|
...claim,
|
|
6194
|
+
id: claimId,
|
|
5877
6195
|
knowledge: sanitized.knowledge
|
|
5878
6196
|
};
|
|
5879
6197
|
const requestId = generateRequestId();
|
|
@@ -5971,11 +6289,12 @@ var init_staging = __esm({
|
|
|
5971
6289
|
...validated.claim,
|
|
5972
6290
|
knowledge: boundary.knowledge
|
|
5973
6291
|
};
|
|
6292
|
+
const claimId = sanitizedClaim.id && sanitizedClaim.id.trim() ? sanitizedClaim.id.trim() : generateUuidV7();
|
|
5974
6293
|
const kind = boundary.kind ?? "experience";
|
|
5975
6294
|
const target = await resolveMemoryTarget(kind, scope, sourceProject);
|
|
5976
6295
|
const revision = revisionFromOptions(sanitizedClaim);
|
|
5977
6296
|
const claim = buildClaimRecord({
|
|
5978
|
-
id:
|
|
6297
|
+
id: claimId,
|
|
5979
6298
|
knowledge: sanitizedClaim.knowledge,
|
|
5980
6299
|
applicability: sanitizedClaim.applicability,
|
|
5981
6300
|
evidence: sanitizedClaim.evidence,
|
|
@@ -5995,13 +6314,13 @@ var init_staging = __esm({
|
|
|
5995
6314
|
});
|
|
5996
6315
|
});
|
|
5997
6316
|
const verification = await target.repository.load();
|
|
5998
|
-
if (!verification.claims.some((c) => c.id ===
|
|
5999
|
-
throw new Error(`Persistence verification failed: claim ${
|
|
6317
|
+
if (!verification.claims.some((c) => c.id === claimId)) {
|
|
6318
|
+
throw new Error(`Persistence verification failed: claim ${claimId} was not persisted`);
|
|
6000
6319
|
}
|
|
6001
6320
|
await cleanupStageFile(requestId);
|
|
6002
6321
|
return {
|
|
6003
6322
|
requestId,
|
|
6004
|
-
claimId
|
|
6323
|
+
claimId,
|
|
6005
6324
|
sourceId: target.sourceId,
|
|
6006
6325
|
scope,
|
|
6007
6326
|
kind
|
|
@@ -6022,12 +6341,12 @@ var init_staging = __esm({
|
|
|
6022
6341
|
});
|
|
6023
6342
|
|
|
6024
6343
|
// core/knowledge/loops.ts
|
|
6025
|
-
function
|
|
6344
|
+
function joinPath4(base, child) {
|
|
6026
6345
|
const separator3 = process.platform === "win32" ? "\\" : "/";
|
|
6027
6346
|
return `${base.replace(/[\\/]+/g, separator3)}${separator3}${child}`;
|
|
6028
6347
|
}
|
|
6029
6348
|
function resolveLoopsFilePath() {
|
|
6030
|
-
return
|
|
6349
|
+
return joinPath4(resolveUserDotMemPath(), LOOPS_FILE_NAME);
|
|
6031
6350
|
}
|
|
6032
6351
|
async function readFile(path) {
|
|
6033
6352
|
try {
|
|
@@ -6159,7 +6478,7 @@ var init_loops = __esm({
|
|
|
6159
6478
|
init_user_paths();
|
|
6160
6479
|
LOOPS_FILE_NAME = "loops.json";
|
|
6161
6480
|
LOOPS_FORMAT_VERSION = 1;
|
|
6162
|
-
__name(
|
|
6481
|
+
__name(joinPath4, "joinPath");
|
|
6163
6482
|
__name(resolveLoopsFilePath, "resolveLoopsFilePath");
|
|
6164
6483
|
__name(readFile, "readFile");
|
|
6165
6484
|
__name(writeFile, "writeFile");
|
|
@@ -6255,12 +6574,12 @@ var init_session = __esm({
|
|
|
6255
6574
|
});
|
|
6256
6575
|
|
|
6257
6576
|
// core/knowledge/exemplars.ts
|
|
6258
|
-
function
|
|
6577
|
+
function joinPath5(base, child) {
|
|
6259
6578
|
const separator3 = process.platform === "win32" ? "\\" : "/";
|
|
6260
6579
|
return `${base.replace(/[\\/]+/g, separator3)}${separator3}${child}`;
|
|
6261
6580
|
}
|
|
6262
6581
|
function resolveExemplarsPath() {
|
|
6263
|
-
return
|
|
6582
|
+
return joinPath5(resolveUserDotMemPath(), EXEMPLARS_FILE_NAME);
|
|
6264
6583
|
}
|
|
6265
6584
|
async function readFile2(path) {
|
|
6266
6585
|
try {
|
|
@@ -6397,7 +6716,7 @@ var init_exemplars = __esm({
|
|
|
6397
6716
|
init_user_paths();
|
|
6398
6717
|
EXEMPLARS_FILE_NAME = "exemplars.json";
|
|
6399
6718
|
EXEMPLARS_FORMAT_VERSION = 1;
|
|
6400
|
-
__name(
|
|
6719
|
+
__name(joinPath5, "joinPath");
|
|
6401
6720
|
__name(resolveExemplarsPath, "resolveExemplarsPath");
|
|
6402
6721
|
__name(readFile2, "readFile");
|
|
6403
6722
|
__name(writeFile2, "writeFile");
|
|
@@ -6412,12 +6731,12 @@ var init_exemplars = __esm({
|
|
|
6412
6731
|
});
|
|
6413
6732
|
|
|
6414
6733
|
// core/knowledge/personality-anchor.ts
|
|
6415
|
-
function
|
|
6734
|
+
function joinPath6(base, child) {
|
|
6416
6735
|
const separator3 = process.platform === "win32" ? "\\" : "/";
|
|
6417
6736
|
return `${base.replace(/[\\/]+/g, separator3)}${separator3}${child}`;
|
|
6418
6737
|
}
|
|
6419
6738
|
function resolvePersonalityAnchorPath() {
|
|
6420
|
-
return
|
|
6739
|
+
return joinPath6(resolveUserDotMemPath(), PERSONALITY_ANCHOR_FILE_NAME);
|
|
6421
6740
|
}
|
|
6422
6741
|
async function readFile3(path) {
|
|
6423
6742
|
try {
|
|
@@ -6605,7 +6924,7 @@ var init_personality_anchor = __esm({
|
|
|
6605
6924
|
init_user_paths();
|
|
6606
6925
|
PERSONALITY_ANCHOR_FILE_NAME = "personality-anchor.json";
|
|
6607
6926
|
PERSONALITY_ANCHOR_FORMAT_VERSION = 1;
|
|
6608
|
-
__name(
|
|
6927
|
+
__name(joinPath6, "joinPath");
|
|
6609
6928
|
__name(resolvePersonalityAnchorPath, "resolvePersonalityAnchorPath");
|
|
6610
6929
|
__name(readFile3, "readFile");
|
|
6611
6930
|
__name(writeFile3, "writeFile");
|
|
@@ -6648,6 +6967,7 @@ var init_knowledge = __esm({
|
|
|
6648
6967
|
init_storage_location();
|
|
6649
6968
|
init_storage_settings();
|
|
6650
6969
|
init_user_identity();
|
|
6970
|
+
init_user_language();
|
|
6651
6971
|
init_identity_resolution();
|
|
6652
6972
|
init_identity_governance();
|
|
6653
6973
|
init_effective_contract();
|
|
@@ -8390,6 +8710,8 @@ init_router();
|
|
|
8390
8710
|
init_store_queue();
|
|
8391
8711
|
init_staging();
|
|
8392
8712
|
init_user_paths();
|
|
8713
|
+
init_uuid();
|
|
8714
|
+
init_acquisition_limits();
|
|
8393
8715
|
init_storage_coordinator();
|
|
8394
8716
|
init_mem_repository();
|
|
8395
8717
|
function normalizeClaimIds3(value) {
|
|
@@ -8440,9 +8762,10 @@ async function findClaimAcrossAllSources(claimId, scope, sourceProject) {
|
|
|
8440
8762
|
__name(findClaimAcrossAllSources, "findClaimAcrossAllSources");
|
|
8441
8763
|
var acquire = {
|
|
8442
8764
|
async acquire(opts) {
|
|
8765
|
+
const claimId = opts.id && opts.id.trim() ? opts.id.trim() : generateUuidV7();
|
|
8443
8766
|
if (opts.scope === void 0 && opts.applicability?.scope !== void 0) {
|
|
8444
8767
|
throw new Error(
|
|
8445
|
-
`Claim ${
|
|
8768
|
+
`Claim ${claimId} uses applicability.scope for routing. Use top-level scope instead.`
|
|
8446
8769
|
);
|
|
8447
8770
|
}
|
|
8448
8771
|
const scope = opts.scope ?? "project";
|
|
@@ -8453,19 +8776,18 @@ var acquire = {
|
|
|
8453
8776
|
}
|
|
8454
8777
|
const boundary = await crossAcquisitionBoundary(opts);
|
|
8455
8778
|
if (boundary.sanitized && DEV) {
|
|
8456
|
-
console.warn(`[dotmem] Sanitized secret values from claim ${
|
|
8779
|
+
console.warn(`[dotmem] Sanitized secret values from claim ${claimId}`);
|
|
8457
8780
|
}
|
|
8458
8781
|
if (boundary.removedTierFields > 0 && DEV) {
|
|
8459
|
-
console.warn(`[dotmem] Removed ${boundary.removedTierFields} non-authoritative tier field(s) from claim ${
|
|
8782
|
+
console.warn(`[dotmem] Removed ${boundary.removedTierFields} non-authoritative tier field(s) from claim ${claimId}`);
|
|
8460
8783
|
}
|
|
8461
8784
|
const kind = boundary.kind;
|
|
8462
8785
|
const target = await resolveMemoryTarget(kind, scope, sourceProject);
|
|
8463
|
-
const existing = await findClaimAcrossAllSources(
|
|
8786
|
+
const existing = await findClaimAcrossAllSources(claimId, scope, sourceProject);
|
|
8464
8787
|
if (existing) {
|
|
8465
8788
|
const acquiredAt = existing.acquiredAt ? ` (acquired ${existing.acquiredAt})` : "";
|
|
8466
|
-
|
|
8467
|
-
|
|
8468
|
-
);
|
|
8789
|
+
const detail = `Claim id ${claimId} already exists in ${existing.sourceId}${acquiredAt}. Use a revision relationship (retracts/supersedes/refines) to revise it, or run 'npx dotmem doctor' to audit duplicates.`;
|
|
8790
|
+
throw new MemoryAcquireDuplicateClaimError("A claim with this ID already exists.", { cause: new Error(detail) });
|
|
8469
8791
|
}
|
|
8470
8792
|
const revision = revisionFromAcquire2(opts);
|
|
8471
8793
|
const repository = target.repository;
|
|
@@ -8475,7 +8797,7 @@ var acquire = {
|
|
|
8475
8797
|
const next = updateKnowledge(state3, {
|
|
8476
8798
|
basedOnVersion: state3.version,
|
|
8477
8799
|
claims: [buildClaimRecord({
|
|
8478
|
-
id:
|
|
8800
|
+
id: claimId,
|
|
8479
8801
|
knowledge: boundary.knowledge,
|
|
8480
8802
|
applicability: opts.applicability,
|
|
8481
8803
|
evidence: opts.evidence,
|
|
@@ -8492,10 +8814,11 @@ var acquire = {
|
|
|
8492
8814
|
});
|
|
8493
8815
|
});
|
|
8494
8816
|
const verification = await target.repository.load();
|
|
8495
|
-
if (!verification.claims.some((claim) => claim.id ===
|
|
8496
|
-
throw new Error(`Acquisition verification failed: claim ${
|
|
8817
|
+
if (!verification.claims.some((claim) => claim.id === claimId)) {
|
|
8818
|
+
throw new Error(`Acquisition verification failed: claim ${claimId} was not persisted`);
|
|
8497
8819
|
}
|
|
8498
|
-
memorio.dispatch.set("dotmem:memory:acquired", { detail: { id:
|
|
8820
|
+
memorio.dispatch.set("dotmem:memory:acquired", { detail: { id: claimId } });
|
|
8821
|
+
return claimId;
|
|
8499
8822
|
},
|
|
8500
8823
|
async acquireStaged(opts) {
|
|
8501
8824
|
const scope = opts.scope ?? "project";
|
|
@@ -8503,7 +8826,8 @@ var acquire = {
|
|
|
8503
8826
|
const sourceProject = resolvedProjectId ? normalizeProjectId(resolvedProjectId) : void 0;
|
|
8504
8827
|
const { requestId } = await writeStageFile(opts, scope, sourceProject);
|
|
8505
8828
|
try {
|
|
8506
|
-
await commitStageFile(requestId);
|
|
8829
|
+
const result = await commitStageFile(requestId);
|
|
8830
|
+
return result.claimId;
|
|
8507
8831
|
} catch (error) {
|
|
8508
8832
|
if (error instanceof StageFileError) {
|
|
8509
8833
|
await cleanupStageFile(requestId);
|
|
@@ -9716,6 +10040,17 @@ var memory = {
|
|
|
9716
10040
|
return profile.get(id);
|
|
9717
10041
|
}
|
|
9718
10042
|
},
|
|
10043
|
+
/** Persistent default response language (canonical user config). */
|
|
10044
|
+
language: {
|
|
10045
|
+
async get() {
|
|
10046
|
+
const m = await Promise.resolve().then(() => (init_user_language(), user_language_exports));
|
|
10047
|
+
return m.resolveUserLanguage();
|
|
10048
|
+
},
|
|
10049
|
+
async set(value) {
|
|
10050
|
+
const m = await Promise.resolve().then(() => (init_user_language(), user_language_exports));
|
|
10051
|
+
return m.setUserLanguage(value);
|
|
10052
|
+
}
|
|
10053
|
+
},
|
|
9719
10054
|
/** Note surface: store and retrieve markdown files and text blocks. */
|
|
9720
10055
|
note: {
|
|
9721
10056
|
async add(opts) {
|