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.js
CHANGED
|
@@ -1653,7 +1653,10 @@ var init_discover = __esm({
|
|
|
1653
1653
|
`);
|
|
1654
1654
|
}
|
|
1655
1655
|
}, "diagnostic");
|
|
1656
|
-
DEFAULT_LIMITS = {
|
|
1656
|
+
DEFAULT_LIMITS = {
|
|
1657
|
+
current: 8,
|
|
1658
|
+
deep: 25
|
|
1659
|
+
};
|
|
1657
1660
|
FIELD_ORDER = [
|
|
1658
1661
|
"id",
|
|
1659
1662
|
"knowledge",
|
|
@@ -2878,7 +2881,7 @@ var init_policy_store = __esm({
|
|
|
2878
2881
|
});
|
|
2879
2882
|
|
|
2880
2883
|
// core/knowledge/acquisition-limits.ts
|
|
2881
|
-
var MEMORY_ACQUIRE_LIMITS, MEMORY_ACQUIRE_LIMITS_MCP, MEMORY_STORE_LIMITS, DOTMEM_ACQUIRE_ERROR_CODES, MemoryAcquireLimitError, MemoryAcquireConcurrencyError, encoder, serializedBytes, measureKnowledge, checkAcquireLimits;
|
|
2884
|
+
var MEMORY_ACQUIRE_LIMITS, MEMORY_ACQUIRE_LIMITS_MCP, MEMORY_STORE_LIMITS, DOTMEM_ACQUIRE_ERROR_CODES, MemoryAcquireLimitError, MemoryAcquireConcurrencyError, MemoryAcquireDuplicateClaimError, encoder, serializedBytes, measureKnowledge, checkAcquireLimits;
|
|
2882
2885
|
var init_acquisition_limits = __esm({
|
|
2883
2886
|
"core/knowledge/acquisition-limits.ts"() {
|
|
2884
2887
|
MEMORY_ACQUIRE_LIMITS = Object.freeze({
|
|
@@ -2901,7 +2904,8 @@ var init_acquisition_limits = __esm({
|
|
|
2901
2904
|
STORE_UNREADABLE: "DOTMEM_STORE_UNREADABLE",
|
|
2902
2905
|
CONCURRENT_WRITE: "DOTMEM_CONCURRENT_WRITE",
|
|
2903
2906
|
SESSION_ACQUIRE_LIMIT: "DOTMEM_SESSION_ACQUIRE_LIMIT",
|
|
2904
|
-
POLICY_REFUSED: "DOTMEM_POLICY_REFUSED"
|
|
2907
|
+
POLICY_REFUSED: "DOTMEM_POLICY_REFUSED",
|
|
2908
|
+
DUPLICATE_CLAIM: "DOTMEM_DUPLICATE_CLAIM"
|
|
2905
2909
|
});
|
|
2906
2910
|
MemoryAcquireLimitError = class extends Error {
|
|
2907
2911
|
static {
|
|
@@ -2925,6 +2929,17 @@ var init_acquisition_limits = __esm({
|
|
|
2925
2929
|
this.name = "MemoryAcquireConcurrencyError";
|
|
2926
2930
|
}
|
|
2927
2931
|
};
|
|
2932
|
+
MemoryAcquireDuplicateClaimError = class extends Error {
|
|
2933
|
+
static {
|
|
2934
|
+
__name(this, "MemoryAcquireDuplicateClaimError");
|
|
2935
|
+
}
|
|
2936
|
+
code = DOTMEM_ACQUIRE_ERROR_CODES.DUPLICATE_CLAIM;
|
|
2937
|
+
retryable = false;
|
|
2938
|
+
constructor(message, options) {
|
|
2939
|
+
super(message, options);
|
|
2940
|
+
this.name = "MemoryAcquireDuplicateClaimError";
|
|
2941
|
+
}
|
|
2942
|
+
};
|
|
2928
2943
|
encoder = new TextEncoder();
|
|
2929
2944
|
serializedBytes = /* @__PURE__ */ __name((value) => {
|
|
2930
2945
|
const json = JSON.stringify(value);
|
|
@@ -5405,6 +5420,267 @@ var init_user_identity = __esm({
|
|
|
5405
5420
|
}
|
|
5406
5421
|
});
|
|
5407
5422
|
|
|
5423
|
+
// core/knowledge/user-language.ts
|
|
5424
|
+
var user_language_exports = {};
|
|
5425
|
+
__export(user_language_exports, {
|
|
5426
|
+
DEFAULT_LANGUAGE: () => DEFAULT_LANGUAGE,
|
|
5427
|
+
DEFAULT_RESPONSE_LANGUAGE: () => DEFAULT_RESPONSE_LANGUAGE,
|
|
5428
|
+
DEFAULT_USER_LANGUAGE: () => DEFAULT_USER_LANGUAGE,
|
|
5429
|
+
LANGUAGE_DEFAULT: () => LANGUAGE_DEFAULT,
|
|
5430
|
+
LANGUAGE_PREFERENCE_FILE_NAME: () => LANGUAGE_PREFERENCE_FILE_NAME,
|
|
5431
|
+
PREFERENCES_FILE_NAME: () => PREFERENCES_FILE_NAME,
|
|
5432
|
+
USER_LANGUAGE_DEFAULT: () => USER_LANGUAGE_DEFAULT,
|
|
5433
|
+
USER_LANGUAGE_FILE_NAME: () => USER_LANGUAGE_FILE_NAME,
|
|
5434
|
+
USER_LANGUAGE_PREFERENCE_FILE_NAME: () => USER_LANGUAGE_PREFERENCE_FILE_NAME,
|
|
5435
|
+
USER_PREFERENCES_FILE_NAME: () => USER_PREFERENCES_FILE_NAME,
|
|
5436
|
+
getLanguagePreference: () => getLanguagePreference,
|
|
5437
|
+
getResponseLanguage: () => getResponseLanguage,
|
|
5438
|
+
getUserLanguage: () => getUserLanguage,
|
|
5439
|
+
getUserLanguagePreference: () => getUserLanguagePreference,
|
|
5440
|
+
isItalian: () => isItalian,
|
|
5441
|
+
language: () => language,
|
|
5442
|
+
languageTag: () => languageTag,
|
|
5443
|
+
loadLanguagePreference: () => loadLanguagePreference,
|
|
5444
|
+
loadUserLanguage: () => loadUserLanguage,
|
|
5445
|
+
loadUserLanguagePreference: () => loadUserLanguagePreference,
|
|
5446
|
+
preferredLanguage: () => preferredLanguage,
|
|
5447
|
+
readUserLanguage: () => readUserLanguage,
|
|
5448
|
+
resolveLanguage: () => resolveLanguage,
|
|
5449
|
+
resolveLanguagePath: () => resolveLanguagePath,
|
|
5450
|
+
resolveLanguagePreference: () => resolveLanguagePreference,
|
|
5451
|
+
resolveLanguagePreferencePath: () => resolveLanguagePreferencePath,
|
|
5452
|
+
resolveResponseLanguage: () => resolveResponseLanguage,
|
|
5453
|
+
resolveUserLanguage: () => resolveUserLanguage,
|
|
5454
|
+
resolveUserLanguagePath: () => resolveUserLanguagePath,
|
|
5455
|
+
resolveUserLanguagePreferencePath: () => resolveUserLanguagePreferencePath,
|
|
5456
|
+
responseLanguage: () => responseLanguage,
|
|
5457
|
+
saveLanguagePreference: () => saveLanguagePreference,
|
|
5458
|
+
saveUserLanguage: () => saveUserLanguage,
|
|
5459
|
+
setUserLanguage: () => setUserLanguage,
|
|
5460
|
+
userLanguage: () => userLanguage,
|
|
5461
|
+
writeUserLanguage: () => writeUserLanguage
|
|
5462
|
+
});
|
|
5463
|
+
function joinPath3(base, child) {
|
|
5464
|
+
const separator3 = process.platform === "win32" ? "\\" : "/";
|
|
5465
|
+
return `${base.replace(/[\\/]+/g, separator3)}${separator3}${child}`;
|
|
5466
|
+
}
|
|
5467
|
+
function resolveUserLanguagePath() {
|
|
5468
|
+
return joinPath3(resolveUserDotMemPath(), USER_LANGUAGE_FILE_NAME);
|
|
5469
|
+
}
|
|
5470
|
+
function resolveUserLanguagePreferencePath() {
|
|
5471
|
+
return resolveUserLanguagePath();
|
|
5472
|
+
}
|
|
5473
|
+
function resolveLanguagePath() {
|
|
5474
|
+
return resolveUserLanguagePath();
|
|
5475
|
+
}
|
|
5476
|
+
function resolveLanguagePreferencePath() {
|
|
5477
|
+
return resolveUserLanguagePath();
|
|
5478
|
+
}
|
|
5479
|
+
function readJsonFile(path) {
|
|
5480
|
+
const fs = getSyncFs();
|
|
5481
|
+
if (!fs) return null;
|
|
5482
|
+
let raw;
|
|
5483
|
+
try {
|
|
5484
|
+
raw = fs.readFileSync(path, "utf8");
|
|
5485
|
+
} catch {
|
|
5486
|
+
return null;
|
|
5487
|
+
}
|
|
5488
|
+
if (typeof raw !== "string") return null;
|
|
5489
|
+
if (raw.charCodeAt(0) === 65279) raw = raw.slice(1);
|
|
5490
|
+
try {
|
|
5491
|
+
return JSON.parse(raw);
|
|
5492
|
+
} catch {
|
|
5493
|
+
return null;
|
|
5494
|
+
}
|
|
5495
|
+
}
|
|
5496
|
+
function extractLanguage(value) {
|
|
5497
|
+
if (value === null || value === void 0) return null;
|
|
5498
|
+
if (typeof value === "string") {
|
|
5499
|
+
const trimmed = value.trim();
|
|
5500
|
+
return trimmed ? trimmed : null;
|
|
5501
|
+
}
|
|
5502
|
+
if (typeof value !== "object" || Array.isArray(value)) return null;
|
|
5503
|
+
for (const key of LANGUAGE_KEYS) {
|
|
5504
|
+
if (Object.prototype.hasOwnProperty.call(value, key)) {
|
|
5505
|
+
const candidate = extractLanguage(value[key]);
|
|
5506
|
+
if (candidate) return candidate;
|
|
5507
|
+
}
|
|
5508
|
+
}
|
|
5509
|
+
for (const containerKey of ["preferences", "user", "agent", "config", "settings", "storage"]) {
|
|
5510
|
+
if (Object.prototype.hasOwnProperty.call(value, containerKey)) {
|
|
5511
|
+
const candidate = extractLanguage(value[containerKey]);
|
|
5512
|
+
if (candidate) return candidate;
|
|
5513
|
+
}
|
|
5514
|
+
}
|
|
5515
|
+
return null;
|
|
5516
|
+
}
|
|
5517
|
+
function loadUserLanguage() {
|
|
5518
|
+
const fs = getSyncFs();
|
|
5519
|
+
const anchor = resolveUserDotMemPath();
|
|
5520
|
+
if (fs) {
|
|
5521
|
+
for (const name of LANGUAGE_FILE_NAMES) {
|
|
5522
|
+
const candidatePath = joinPath3(anchor, name);
|
|
5523
|
+
const parsed = readJsonFile(candidatePath);
|
|
5524
|
+
const language2 = extractLanguage(parsed);
|
|
5525
|
+
if (language2) return language2;
|
|
5526
|
+
}
|
|
5527
|
+
try {
|
|
5528
|
+
const govPath = joinPath3(joinPath3(anchor, "policy"), "identity-governance.json");
|
|
5529
|
+
const gov = readJsonFile(govPath);
|
|
5530
|
+
const language2 = extractLanguage(gov);
|
|
5531
|
+
if (language2) return language2;
|
|
5532
|
+
} catch {
|
|
5533
|
+
}
|
|
5534
|
+
try {
|
|
5535
|
+
const settingsPath = joinPath3(anchor, "dotmem.settings.json");
|
|
5536
|
+
const settings = readJsonFile(settingsPath);
|
|
5537
|
+
const language2 = extractLanguage(settings);
|
|
5538
|
+
if (language2) return language2;
|
|
5539
|
+
} catch {
|
|
5540
|
+
}
|
|
5541
|
+
}
|
|
5542
|
+
const env = globalThis?.process?.env;
|
|
5543
|
+
const envLang = env?.DOTMEM_LANGUAGE || env?.DOTMEM_RESPONSE_LANGUAGE || env?.DOTMEM_USER_LANGUAGE;
|
|
5544
|
+
if (typeof envLang === "string" && envLang.trim()) return envLang.trim();
|
|
5545
|
+
return DEFAULT_USER_LANGUAGE;
|
|
5546
|
+
}
|
|
5547
|
+
function readUserLanguage() {
|
|
5548
|
+
return loadUserLanguage();
|
|
5549
|
+
}
|
|
5550
|
+
function getUserLanguage() {
|
|
5551
|
+
return loadUserLanguage();
|
|
5552
|
+
}
|
|
5553
|
+
function resolveUserLanguage() {
|
|
5554
|
+
return loadUserLanguage();
|
|
5555
|
+
}
|
|
5556
|
+
function resolveLanguage() {
|
|
5557
|
+
return loadUserLanguage();
|
|
5558
|
+
}
|
|
5559
|
+
function loadLanguagePreference() {
|
|
5560
|
+
return loadUserLanguage();
|
|
5561
|
+
}
|
|
5562
|
+
function getLanguagePreference() {
|
|
5563
|
+
return loadUserLanguage();
|
|
5564
|
+
}
|
|
5565
|
+
function resolveLanguagePreference() {
|
|
5566
|
+
return loadUserLanguage();
|
|
5567
|
+
}
|
|
5568
|
+
function loadUserLanguagePreference() {
|
|
5569
|
+
return loadUserLanguage();
|
|
5570
|
+
}
|
|
5571
|
+
function getUserLanguagePreference() {
|
|
5572
|
+
return loadUserLanguage();
|
|
5573
|
+
}
|
|
5574
|
+
function resolveResponseLanguage() {
|
|
5575
|
+
return loadUserLanguage();
|
|
5576
|
+
}
|
|
5577
|
+
function getResponseLanguage() {
|
|
5578
|
+
return loadUserLanguage();
|
|
5579
|
+
}
|
|
5580
|
+
async function setUserLanguage(language2) {
|
|
5581
|
+
const fsMod = await import('fs/promises');
|
|
5582
|
+
const path = resolveUserLanguagePath();
|
|
5583
|
+
const dir = parentStoragePath(path);
|
|
5584
|
+
await fsMod.mkdir(dir, { recursive: true });
|
|
5585
|
+
const payload = { format: "dotmem.language", version: 1, language: String(language2).trim() };
|
|
5586
|
+
const temporary = `${path}.${process.pid}.${Date.now().toString(36)}.tmp`;
|
|
5587
|
+
await fsMod.writeFile(temporary, `${JSON.stringify(payload, null, 2)}
|
|
5588
|
+
`, "utf8");
|
|
5589
|
+
await fsMod.rename(temporary, path);
|
|
5590
|
+
return payload.language;
|
|
5591
|
+
}
|
|
5592
|
+
async function saveUserLanguage(language2) {
|
|
5593
|
+
return setUserLanguage(language2);
|
|
5594
|
+
}
|
|
5595
|
+
async function writeUserLanguage(language2) {
|
|
5596
|
+
return setUserLanguage(language2);
|
|
5597
|
+
}
|
|
5598
|
+
async function saveLanguagePreference(language2) {
|
|
5599
|
+
return setUserLanguage(language2);
|
|
5600
|
+
}
|
|
5601
|
+
function isItalian(language2) {
|
|
5602
|
+
const value = (language2 ?? loadUserLanguage()).toLowerCase();
|
|
5603
|
+
return value === "it" || value === "it-it" || value.startsWith("it-");
|
|
5604
|
+
}
|
|
5605
|
+
function languageTag() {
|
|
5606
|
+
return loadUserLanguage();
|
|
5607
|
+
}
|
|
5608
|
+
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;
|
|
5609
|
+
var init_user_language = __esm({
|
|
5610
|
+
"core/knowledge/user-language.ts"() {
|
|
5611
|
+
init_user_paths();
|
|
5612
|
+
init_storage_paths();
|
|
5613
|
+
USER_LANGUAGE_FILE_NAME = "language.json";
|
|
5614
|
+
USER_LANGUAGE_PREFERENCE_FILE_NAME = "user-language.json";
|
|
5615
|
+
LANGUAGE_PREFERENCE_FILE_NAME = "language-preference.json";
|
|
5616
|
+
USER_PREFERENCES_FILE_NAME = "user-preferences.json";
|
|
5617
|
+
PREFERENCES_FILE_NAME = "preferences.json";
|
|
5618
|
+
DEFAULT_USER_LANGUAGE = "it-IT";
|
|
5619
|
+
DEFAULT_LANGUAGE = "it-IT";
|
|
5620
|
+
USER_LANGUAGE_DEFAULT = "it-IT";
|
|
5621
|
+
LANGUAGE_DEFAULT = "it-IT";
|
|
5622
|
+
DEFAULT_RESPONSE_LANGUAGE = "it-IT";
|
|
5623
|
+
LANGUAGE_FILE_NAMES = [
|
|
5624
|
+
USER_LANGUAGE_FILE_NAME,
|
|
5625
|
+
USER_LANGUAGE_PREFERENCE_FILE_NAME,
|
|
5626
|
+
LANGUAGE_PREFERENCE_FILE_NAME,
|
|
5627
|
+
USER_PREFERENCES_FILE_NAME,
|
|
5628
|
+
PREFERENCES_FILE_NAME,
|
|
5629
|
+
"config.json",
|
|
5630
|
+
"user-config.json",
|
|
5631
|
+
"agent-config.json",
|
|
5632
|
+
"dotmem.config.json"
|
|
5633
|
+
];
|
|
5634
|
+
LANGUAGE_KEYS = [
|
|
5635
|
+
"language",
|
|
5636
|
+
"Language",
|
|
5637
|
+
"responseLanguage",
|
|
5638
|
+
"response_language",
|
|
5639
|
+
"preferredLanguage",
|
|
5640
|
+
"preferred_language",
|
|
5641
|
+
"userLanguage",
|
|
5642
|
+
"user_language",
|
|
5643
|
+
"defaultLanguage",
|
|
5644
|
+
"default_language",
|
|
5645
|
+
"locale",
|
|
5646
|
+
"lang",
|
|
5647
|
+
"uiLanguage",
|
|
5648
|
+
"ui_language",
|
|
5649
|
+
"conversationLanguage",
|
|
5650
|
+
"conversation_language"
|
|
5651
|
+
];
|
|
5652
|
+
__name(joinPath3, "joinPath");
|
|
5653
|
+
__name(resolveUserLanguagePath, "resolveUserLanguagePath");
|
|
5654
|
+
__name(resolveUserLanguagePreferencePath, "resolveUserLanguagePreferencePath");
|
|
5655
|
+
__name(resolveLanguagePath, "resolveLanguagePath");
|
|
5656
|
+
__name(resolveLanguagePreferencePath, "resolveLanguagePreferencePath");
|
|
5657
|
+
__name(readJsonFile, "readJsonFile");
|
|
5658
|
+
__name(extractLanguage, "extractLanguage");
|
|
5659
|
+
__name(loadUserLanguage, "loadUserLanguage");
|
|
5660
|
+
__name(readUserLanguage, "readUserLanguage");
|
|
5661
|
+
__name(getUserLanguage, "getUserLanguage");
|
|
5662
|
+
__name(resolveUserLanguage, "resolveUserLanguage");
|
|
5663
|
+
__name(resolveLanguage, "resolveLanguage");
|
|
5664
|
+
__name(loadLanguagePreference, "loadLanguagePreference");
|
|
5665
|
+
__name(getLanguagePreference, "getLanguagePreference");
|
|
5666
|
+
__name(resolveLanguagePreference, "resolveLanguagePreference");
|
|
5667
|
+
__name(loadUserLanguagePreference, "loadUserLanguagePreference");
|
|
5668
|
+
__name(getUserLanguagePreference, "getUserLanguagePreference");
|
|
5669
|
+
__name(resolveResponseLanguage, "resolveResponseLanguage");
|
|
5670
|
+
__name(getResponseLanguage, "getResponseLanguage");
|
|
5671
|
+
__name(setUserLanguage, "setUserLanguage");
|
|
5672
|
+
__name(saveUserLanguage, "saveUserLanguage");
|
|
5673
|
+
__name(writeUserLanguage, "writeUserLanguage");
|
|
5674
|
+
__name(saveLanguagePreference, "saveLanguagePreference");
|
|
5675
|
+
__name(isItalian, "isItalian");
|
|
5676
|
+
__name(languageTag, "languageTag");
|
|
5677
|
+
userLanguage = loadUserLanguage();
|
|
5678
|
+
language = loadUserLanguage();
|
|
5679
|
+
responseLanguage = loadUserLanguage();
|
|
5680
|
+
preferredLanguage = loadUserLanguage();
|
|
5681
|
+
}
|
|
5682
|
+
});
|
|
5683
|
+
|
|
5408
5684
|
// core/profile/ai.json
|
|
5409
5685
|
var ai_default;
|
|
5410
5686
|
var init_ai = __esm({
|
|
@@ -5813,6 +6089,45 @@ var init_project_identity = __esm({
|
|
|
5813
6089
|
}
|
|
5814
6090
|
});
|
|
5815
6091
|
|
|
6092
|
+
// core/knowledge/uuid.ts
|
|
6093
|
+
var generateUuidV7;
|
|
6094
|
+
var init_uuid = __esm({
|
|
6095
|
+
"core/knowledge/uuid.ts"() {
|
|
6096
|
+
generateUuidV7 = /* @__PURE__ */ __name(() => {
|
|
6097
|
+
const cryptoObj = globalThis.crypto;
|
|
6098
|
+
const ms = Date.now();
|
|
6099
|
+
const rand = new Uint8Array(10);
|
|
6100
|
+
if (cryptoObj && typeof cryptoObj.getRandomValues === "function") {
|
|
6101
|
+
cryptoObj.getRandomValues(rand);
|
|
6102
|
+
} else {
|
|
6103
|
+
for (let i2 = 0; i2 < rand.length; i2 += 1) {
|
|
6104
|
+
rand[i2] = Math.floor(Math.random() * 256);
|
|
6105
|
+
}
|
|
6106
|
+
}
|
|
6107
|
+
const bytes = new Uint8Array(16);
|
|
6108
|
+
bytes[0] = ms / 1099511627776 & 255;
|
|
6109
|
+
bytes[1] = ms / 4294967296 & 255;
|
|
6110
|
+
bytes[2] = ms / 16777216 & 255;
|
|
6111
|
+
bytes[3] = ms / 65536 & 255;
|
|
6112
|
+
bytes[4] = ms / 256 & 255;
|
|
6113
|
+
bytes[5] = ms & 255;
|
|
6114
|
+
const randA = (rand[0] << 8 | rand[1]) & 4095;
|
|
6115
|
+
bytes[6] = 112 | randA >> 8;
|
|
6116
|
+
bytes[7] = randA & 255;
|
|
6117
|
+
bytes[8] = 128 | rand[2] & 63;
|
|
6118
|
+
bytes[9] = rand[3];
|
|
6119
|
+
bytes[10] = rand[4];
|
|
6120
|
+
bytes[11] = rand[5];
|
|
6121
|
+
bytes[12] = rand[6];
|
|
6122
|
+
bytes[13] = rand[7];
|
|
6123
|
+
bytes[14] = rand[8];
|
|
6124
|
+
bytes[15] = rand[9];
|
|
6125
|
+
const hex = Array.from(bytes).map((byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
6126
|
+
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
|
|
6127
|
+
}, "generateUuidV7");
|
|
6128
|
+
}
|
|
6129
|
+
});
|
|
6130
|
+
|
|
5816
6131
|
// core/knowledge/staging.ts
|
|
5817
6132
|
var DOTMEM_STAGE_FORMAT, DOTMEM_STAGE_VERSION, StageFileError, generateRequestId, nodeCwd, resolveStagingDirectory, stagePathFor, nodeFs6, normalizeClaimIds, revisionFromOptions, writeStageFile, readStageFile, validateStageFile, commitStageFile, cleanupStageFile;
|
|
5818
6133
|
var init_staging = __esm({
|
|
@@ -5824,6 +6139,7 @@ var init_staging = __esm({
|
|
|
5824
6139
|
init_store_queue();
|
|
5825
6140
|
init_state();
|
|
5826
6141
|
init_project_identity();
|
|
6142
|
+
init_uuid();
|
|
5827
6143
|
init_project_anchor();
|
|
5828
6144
|
DOTMEM_STAGE_FORMAT = "dotmem.stage";
|
|
5829
6145
|
DOTMEM_STAGE_VERSION = 1;
|
|
@@ -5867,9 +6183,11 @@ var init_staging = __esm({
|
|
|
5867
6183
|
return void 0;
|
|
5868
6184
|
}, "revisionFromOptions");
|
|
5869
6185
|
writeStageFile = /* @__PURE__ */ __name(async (claim, scope, sourceProject) => {
|
|
6186
|
+
const claimId = claim.id && claim.id.trim() ? claim.id.trim() : generateUuidV7();
|
|
5870
6187
|
const sanitized = sanitizeKnowledge(claim.knowledge);
|
|
5871
6188
|
const sanitizedClaim = {
|
|
5872
6189
|
...claim,
|
|
6190
|
+
id: claimId,
|
|
5873
6191
|
knowledge: sanitized.knowledge
|
|
5874
6192
|
};
|
|
5875
6193
|
const requestId = generateRequestId();
|
|
@@ -5967,11 +6285,12 @@ var init_staging = __esm({
|
|
|
5967
6285
|
...validated.claim,
|
|
5968
6286
|
knowledge: boundary.knowledge
|
|
5969
6287
|
};
|
|
6288
|
+
const claimId = sanitizedClaim.id && sanitizedClaim.id.trim() ? sanitizedClaim.id.trim() : generateUuidV7();
|
|
5970
6289
|
const kind = boundary.kind ?? "experience";
|
|
5971
6290
|
const target = await resolveMemoryTarget(kind, scope, sourceProject);
|
|
5972
6291
|
const revision = revisionFromOptions(sanitizedClaim);
|
|
5973
6292
|
const claim = buildClaimRecord({
|
|
5974
|
-
id:
|
|
6293
|
+
id: claimId,
|
|
5975
6294
|
knowledge: sanitizedClaim.knowledge,
|
|
5976
6295
|
applicability: sanitizedClaim.applicability,
|
|
5977
6296
|
evidence: sanitizedClaim.evidence,
|
|
@@ -5991,13 +6310,13 @@ var init_staging = __esm({
|
|
|
5991
6310
|
});
|
|
5992
6311
|
});
|
|
5993
6312
|
const verification = await target.repository.load();
|
|
5994
|
-
if (!verification.claims.some((c) => c.id ===
|
|
5995
|
-
throw new Error(`Persistence verification failed: claim ${
|
|
6313
|
+
if (!verification.claims.some((c) => c.id === claimId)) {
|
|
6314
|
+
throw new Error(`Persistence verification failed: claim ${claimId} was not persisted`);
|
|
5996
6315
|
}
|
|
5997
6316
|
await cleanupStageFile(requestId);
|
|
5998
6317
|
return {
|
|
5999
6318
|
requestId,
|
|
6000
|
-
claimId
|
|
6319
|
+
claimId,
|
|
6001
6320
|
sourceId: target.sourceId,
|
|
6002
6321
|
scope,
|
|
6003
6322
|
kind
|
|
@@ -6018,12 +6337,12 @@ var init_staging = __esm({
|
|
|
6018
6337
|
});
|
|
6019
6338
|
|
|
6020
6339
|
// core/knowledge/loops.ts
|
|
6021
|
-
function
|
|
6340
|
+
function joinPath4(base, child) {
|
|
6022
6341
|
const separator3 = process.platform === "win32" ? "\\" : "/";
|
|
6023
6342
|
return `${base.replace(/[\\/]+/g, separator3)}${separator3}${child}`;
|
|
6024
6343
|
}
|
|
6025
6344
|
function resolveLoopsFilePath() {
|
|
6026
|
-
return
|
|
6345
|
+
return joinPath4(resolveUserDotMemPath(), LOOPS_FILE_NAME);
|
|
6027
6346
|
}
|
|
6028
6347
|
async function readFile(path) {
|
|
6029
6348
|
try {
|
|
@@ -6155,7 +6474,7 @@ var init_loops = __esm({
|
|
|
6155
6474
|
init_user_paths();
|
|
6156
6475
|
LOOPS_FILE_NAME = "loops.json";
|
|
6157
6476
|
LOOPS_FORMAT_VERSION = 1;
|
|
6158
|
-
__name(
|
|
6477
|
+
__name(joinPath4, "joinPath");
|
|
6159
6478
|
__name(resolveLoopsFilePath, "resolveLoopsFilePath");
|
|
6160
6479
|
__name(readFile, "readFile");
|
|
6161
6480
|
__name(writeFile, "writeFile");
|
|
@@ -6251,12 +6570,12 @@ var init_session = __esm({
|
|
|
6251
6570
|
});
|
|
6252
6571
|
|
|
6253
6572
|
// core/knowledge/exemplars.ts
|
|
6254
|
-
function
|
|
6573
|
+
function joinPath5(base, child) {
|
|
6255
6574
|
const separator3 = process.platform === "win32" ? "\\" : "/";
|
|
6256
6575
|
return `${base.replace(/[\\/]+/g, separator3)}${separator3}${child}`;
|
|
6257
6576
|
}
|
|
6258
6577
|
function resolveExemplarsPath() {
|
|
6259
|
-
return
|
|
6578
|
+
return joinPath5(resolveUserDotMemPath(), EXEMPLARS_FILE_NAME);
|
|
6260
6579
|
}
|
|
6261
6580
|
async function readFile2(path) {
|
|
6262
6581
|
try {
|
|
@@ -6393,7 +6712,7 @@ var init_exemplars = __esm({
|
|
|
6393
6712
|
init_user_paths();
|
|
6394
6713
|
EXEMPLARS_FILE_NAME = "exemplars.json";
|
|
6395
6714
|
EXEMPLARS_FORMAT_VERSION = 1;
|
|
6396
|
-
__name(
|
|
6715
|
+
__name(joinPath5, "joinPath");
|
|
6397
6716
|
__name(resolveExemplarsPath, "resolveExemplarsPath");
|
|
6398
6717
|
__name(readFile2, "readFile");
|
|
6399
6718
|
__name(writeFile2, "writeFile");
|
|
@@ -6408,12 +6727,12 @@ var init_exemplars = __esm({
|
|
|
6408
6727
|
});
|
|
6409
6728
|
|
|
6410
6729
|
// core/knowledge/personality-anchor.ts
|
|
6411
|
-
function
|
|
6730
|
+
function joinPath6(base, child) {
|
|
6412
6731
|
const separator3 = process.platform === "win32" ? "\\" : "/";
|
|
6413
6732
|
return `${base.replace(/[\\/]+/g, separator3)}${separator3}${child}`;
|
|
6414
6733
|
}
|
|
6415
6734
|
function resolvePersonalityAnchorPath() {
|
|
6416
|
-
return
|
|
6735
|
+
return joinPath6(resolveUserDotMemPath(), PERSONALITY_ANCHOR_FILE_NAME);
|
|
6417
6736
|
}
|
|
6418
6737
|
async function readFile3(path) {
|
|
6419
6738
|
try {
|
|
@@ -6601,7 +6920,7 @@ var init_personality_anchor = __esm({
|
|
|
6601
6920
|
init_user_paths();
|
|
6602
6921
|
PERSONALITY_ANCHOR_FILE_NAME = "personality-anchor.json";
|
|
6603
6922
|
PERSONALITY_ANCHOR_FORMAT_VERSION = 1;
|
|
6604
|
-
__name(
|
|
6923
|
+
__name(joinPath6, "joinPath");
|
|
6605
6924
|
__name(resolvePersonalityAnchorPath, "resolvePersonalityAnchorPath");
|
|
6606
6925
|
__name(readFile3, "readFile");
|
|
6607
6926
|
__name(writeFile3, "writeFile");
|
|
@@ -6644,6 +6963,7 @@ var init_knowledge = __esm({
|
|
|
6644
6963
|
init_storage_location();
|
|
6645
6964
|
init_storage_settings();
|
|
6646
6965
|
init_user_identity();
|
|
6966
|
+
init_user_language();
|
|
6647
6967
|
init_identity_resolution();
|
|
6648
6968
|
init_identity_governance();
|
|
6649
6969
|
init_effective_contract();
|
|
@@ -8386,6 +8706,8 @@ init_router();
|
|
|
8386
8706
|
init_store_queue();
|
|
8387
8707
|
init_staging();
|
|
8388
8708
|
init_user_paths();
|
|
8709
|
+
init_uuid();
|
|
8710
|
+
init_acquisition_limits();
|
|
8389
8711
|
init_storage_coordinator();
|
|
8390
8712
|
init_mem_repository();
|
|
8391
8713
|
function normalizeClaimIds3(value) {
|
|
@@ -8436,9 +8758,10 @@ async function findClaimAcrossAllSources(claimId, scope, sourceProject) {
|
|
|
8436
8758
|
__name(findClaimAcrossAllSources, "findClaimAcrossAllSources");
|
|
8437
8759
|
var acquire = {
|
|
8438
8760
|
async acquire(opts) {
|
|
8761
|
+
const claimId = opts.id && opts.id.trim() ? opts.id.trim() : generateUuidV7();
|
|
8439
8762
|
if (opts.scope === void 0 && opts.applicability?.scope !== void 0) {
|
|
8440
8763
|
throw new Error(
|
|
8441
|
-
`Claim ${
|
|
8764
|
+
`Claim ${claimId} uses applicability.scope for routing. Use top-level scope instead.`
|
|
8442
8765
|
);
|
|
8443
8766
|
}
|
|
8444
8767
|
const scope = opts.scope ?? "project";
|
|
@@ -8449,19 +8772,18 @@ var acquire = {
|
|
|
8449
8772
|
}
|
|
8450
8773
|
const boundary = await crossAcquisitionBoundary(opts);
|
|
8451
8774
|
if (boundary.sanitized && DEV) {
|
|
8452
|
-
console.warn(`[dotmem] Sanitized secret values from claim ${
|
|
8775
|
+
console.warn(`[dotmem] Sanitized secret values from claim ${claimId}`);
|
|
8453
8776
|
}
|
|
8454
8777
|
if (boundary.removedTierFields > 0 && DEV) {
|
|
8455
|
-
console.warn(`[dotmem] Removed ${boundary.removedTierFields} non-authoritative tier field(s) from claim ${
|
|
8778
|
+
console.warn(`[dotmem] Removed ${boundary.removedTierFields} non-authoritative tier field(s) from claim ${claimId}`);
|
|
8456
8779
|
}
|
|
8457
8780
|
const kind = boundary.kind;
|
|
8458
8781
|
const target = await resolveMemoryTarget(kind, scope, sourceProject);
|
|
8459
|
-
const existing = await findClaimAcrossAllSources(
|
|
8782
|
+
const existing = await findClaimAcrossAllSources(claimId, scope, sourceProject);
|
|
8460
8783
|
if (existing) {
|
|
8461
8784
|
const acquiredAt = existing.acquiredAt ? ` (acquired ${existing.acquiredAt})` : "";
|
|
8462
|
-
|
|
8463
|
-
|
|
8464
|
-
);
|
|
8785
|
+
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.`;
|
|
8786
|
+
throw new MemoryAcquireDuplicateClaimError("A claim with this ID already exists.", { cause: new Error(detail) });
|
|
8465
8787
|
}
|
|
8466
8788
|
const revision = revisionFromAcquire2(opts);
|
|
8467
8789
|
const repository = target.repository;
|
|
@@ -8471,7 +8793,7 @@ var acquire = {
|
|
|
8471
8793
|
const next = updateKnowledge(state3, {
|
|
8472
8794
|
basedOnVersion: state3.version,
|
|
8473
8795
|
claims: [buildClaimRecord({
|
|
8474
|
-
id:
|
|
8796
|
+
id: claimId,
|
|
8475
8797
|
knowledge: boundary.knowledge,
|
|
8476
8798
|
applicability: opts.applicability,
|
|
8477
8799
|
evidence: opts.evidence,
|
|
@@ -8488,10 +8810,11 @@ var acquire = {
|
|
|
8488
8810
|
});
|
|
8489
8811
|
});
|
|
8490
8812
|
const verification = await target.repository.load();
|
|
8491
|
-
if (!verification.claims.some((claim) => claim.id ===
|
|
8492
|
-
throw new Error(`Acquisition verification failed: claim ${
|
|
8813
|
+
if (!verification.claims.some((claim) => claim.id === claimId)) {
|
|
8814
|
+
throw new Error(`Acquisition verification failed: claim ${claimId} was not persisted`);
|
|
8493
8815
|
}
|
|
8494
|
-
dispatch.set("dotmem:memory:acquired", { detail: { id:
|
|
8816
|
+
dispatch.set("dotmem:memory:acquired", { detail: { id: claimId } });
|
|
8817
|
+
return claimId;
|
|
8495
8818
|
},
|
|
8496
8819
|
async acquireStaged(opts) {
|
|
8497
8820
|
const scope = opts.scope ?? "project";
|
|
@@ -8499,7 +8822,8 @@ var acquire = {
|
|
|
8499
8822
|
const sourceProject = resolvedProjectId ? normalizeProjectId(resolvedProjectId) : void 0;
|
|
8500
8823
|
const { requestId } = await writeStageFile(opts, scope, sourceProject);
|
|
8501
8824
|
try {
|
|
8502
|
-
await commitStageFile(requestId);
|
|
8825
|
+
const result = await commitStageFile(requestId);
|
|
8826
|
+
return result.claimId;
|
|
8503
8827
|
} catch (error) {
|
|
8504
8828
|
if (error instanceof StageFileError) {
|
|
8505
8829
|
await cleanupStageFile(requestId);
|
|
@@ -9712,6 +10036,17 @@ var memory = {
|
|
|
9712
10036
|
return profile.get(id);
|
|
9713
10037
|
}
|
|
9714
10038
|
},
|
|
10039
|
+
/** Persistent default response language (canonical user config). */
|
|
10040
|
+
language: {
|
|
10041
|
+
async get() {
|
|
10042
|
+
const m = await Promise.resolve().then(() => (init_user_language(), user_language_exports));
|
|
10043
|
+
return m.resolveUserLanguage();
|
|
10044
|
+
},
|
|
10045
|
+
async set(value) {
|
|
10046
|
+
const m = await Promise.resolve().then(() => (init_user_language(), user_language_exports));
|
|
10047
|
+
return m.setUserLanguage(value);
|
|
10048
|
+
}
|
|
10049
|
+
},
|
|
9715
10050
|
/** Note surface: store and retrieve markdown files and text blocks. */
|
|
9716
10051
|
note: {
|
|
9717
10052
|
async add(opts) {
|