dotmem 0.1.2 → 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.
Files changed (10) hide show
  1. package/README.md +5 -5
  2. package/cli.cjs +1334 -41
  3. package/cli.js +1334 -41
  4. package/global.cjs +286 -10
  5. package/global.js +286 -10
  6. package/index.cjs +296 -20
  7. package/index.js +296 -20
  8. package/mcp.cjs +300 -19
  9. package/mcp.js +300 -19
  10. package/package.json +1 -1
package/global.cjs CHANGED
@@ -1657,7 +1657,10 @@ var init_discover = __esm({
1657
1657
  `);
1658
1658
  }
1659
1659
  }, "diagnostic");
1660
- DEFAULT_LIMITS = { current: 5, deep: 25 };
1660
+ DEFAULT_LIMITS = {
1661
+ current: 8,
1662
+ deep: 25
1663
+ };
1661
1664
  FIELD_ORDER = [
1662
1665
  "id",
1663
1666
  "knowledge",
@@ -5421,6 +5424,267 @@ var init_user_identity = __esm({
5421
5424
  }
5422
5425
  });
5423
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
+
5424
5688
  // core/profile/ai.json
5425
5689
  var ai_default;
5426
5690
  var init_ai = __esm({
@@ -6077,12 +6341,12 @@ var init_staging = __esm({
6077
6341
  });
6078
6342
 
6079
6343
  // core/knowledge/loops.ts
6080
- function joinPath3(base, child) {
6344
+ function joinPath4(base, child) {
6081
6345
  const separator3 = process.platform === "win32" ? "\\" : "/";
6082
6346
  return `${base.replace(/[\\/]+/g, separator3)}${separator3}${child}`;
6083
6347
  }
6084
6348
  function resolveLoopsFilePath() {
6085
- return joinPath3(resolveUserDotMemPath(), LOOPS_FILE_NAME);
6349
+ return joinPath4(resolveUserDotMemPath(), LOOPS_FILE_NAME);
6086
6350
  }
6087
6351
  async function readFile(path) {
6088
6352
  try {
@@ -6214,7 +6478,7 @@ var init_loops = __esm({
6214
6478
  init_user_paths();
6215
6479
  LOOPS_FILE_NAME = "loops.json";
6216
6480
  LOOPS_FORMAT_VERSION = 1;
6217
- __name(joinPath3, "joinPath");
6481
+ __name(joinPath4, "joinPath");
6218
6482
  __name(resolveLoopsFilePath, "resolveLoopsFilePath");
6219
6483
  __name(readFile, "readFile");
6220
6484
  __name(writeFile, "writeFile");
@@ -6310,12 +6574,12 @@ var init_session = __esm({
6310
6574
  });
6311
6575
 
6312
6576
  // core/knowledge/exemplars.ts
6313
- function joinPath4(base, child) {
6577
+ function joinPath5(base, child) {
6314
6578
  const separator3 = process.platform === "win32" ? "\\" : "/";
6315
6579
  return `${base.replace(/[\\/]+/g, separator3)}${separator3}${child}`;
6316
6580
  }
6317
6581
  function resolveExemplarsPath() {
6318
- return joinPath4(resolveUserDotMemPath(), EXEMPLARS_FILE_NAME);
6582
+ return joinPath5(resolveUserDotMemPath(), EXEMPLARS_FILE_NAME);
6319
6583
  }
6320
6584
  async function readFile2(path) {
6321
6585
  try {
@@ -6452,7 +6716,7 @@ var init_exemplars = __esm({
6452
6716
  init_user_paths();
6453
6717
  EXEMPLARS_FILE_NAME = "exemplars.json";
6454
6718
  EXEMPLARS_FORMAT_VERSION = 1;
6455
- __name(joinPath4, "joinPath");
6719
+ __name(joinPath5, "joinPath");
6456
6720
  __name(resolveExemplarsPath, "resolveExemplarsPath");
6457
6721
  __name(readFile2, "readFile");
6458
6722
  __name(writeFile2, "writeFile");
@@ -6467,12 +6731,12 @@ var init_exemplars = __esm({
6467
6731
  });
6468
6732
 
6469
6733
  // core/knowledge/personality-anchor.ts
6470
- function joinPath5(base, child) {
6734
+ function joinPath6(base, child) {
6471
6735
  const separator3 = process.platform === "win32" ? "\\" : "/";
6472
6736
  return `${base.replace(/[\\/]+/g, separator3)}${separator3}${child}`;
6473
6737
  }
6474
6738
  function resolvePersonalityAnchorPath() {
6475
- return joinPath5(resolveUserDotMemPath(), PERSONALITY_ANCHOR_FILE_NAME);
6739
+ return joinPath6(resolveUserDotMemPath(), PERSONALITY_ANCHOR_FILE_NAME);
6476
6740
  }
6477
6741
  async function readFile3(path) {
6478
6742
  try {
@@ -6660,7 +6924,7 @@ var init_personality_anchor = __esm({
6660
6924
  init_user_paths();
6661
6925
  PERSONALITY_ANCHOR_FILE_NAME = "personality-anchor.json";
6662
6926
  PERSONALITY_ANCHOR_FORMAT_VERSION = 1;
6663
- __name(joinPath5, "joinPath");
6927
+ __name(joinPath6, "joinPath");
6664
6928
  __name(resolvePersonalityAnchorPath, "resolvePersonalityAnchorPath");
6665
6929
  __name(readFile3, "readFile");
6666
6930
  __name(writeFile3, "writeFile");
@@ -6703,6 +6967,7 @@ var init_knowledge = __esm({
6703
6967
  init_storage_location();
6704
6968
  init_storage_settings();
6705
6969
  init_user_identity();
6970
+ init_user_language();
6706
6971
  init_identity_resolution();
6707
6972
  init_identity_governance();
6708
6973
  init_effective_contract();
@@ -9775,6 +10040,17 @@ var memory = {
9775
10040
  return profile.get(id);
9776
10041
  }
9777
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
+ },
9778
10054
  /** Note surface: store and retrieve markdown files and text blocks. */
9779
10055
  note: {
9780
10056
  async add(opts) {