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.js CHANGED
@@ -1653,7 +1653,10 @@ var init_discover = __esm({
1653
1653
  `);
1654
1654
  }
1655
1655
  }, "diagnostic");
1656
- DEFAULT_LIMITS = { current: 5, deep: 25 };
1656
+ DEFAULT_LIMITS = {
1657
+ current: 8,
1658
+ deep: 25
1659
+ };
1657
1660
  FIELD_ORDER = [
1658
1661
  "id",
1659
1662
  "knowledge",
@@ -5417,6 +5420,267 @@ var init_user_identity = __esm({
5417
5420
  }
5418
5421
  });
5419
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
+
5420
5684
  // core/profile/ai.json
5421
5685
  var ai_default;
5422
5686
  var init_ai = __esm({
@@ -6073,12 +6337,12 @@ var init_staging = __esm({
6073
6337
  });
6074
6338
 
6075
6339
  // core/knowledge/loops.ts
6076
- function joinPath3(base, child) {
6340
+ function joinPath4(base, child) {
6077
6341
  const separator3 = process.platform === "win32" ? "\\" : "/";
6078
6342
  return `${base.replace(/[\\/]+/g, separator3)}${separator3}${child}`;
6079
6343
  }
6080
6344
  function resolveLoopsFilePath() {
6081
- return joinPath3(resolveUserDotMemPath(), LOOPS_FILE_NAME);
6345
+ return joinPath4(resolveUserDotMemPath(), LOOPS_FILE_NAME);
6082
6346
  }
6083
6347
  async function readFile(path) {
6084
6348
  try {
@@ -6210,7 +6474,7 @@ var init_loops = __esm({
6210
6474
  init_user_paths();
6211
6475
  LOOPS_FILE_NAME = "loops.json";
6212
6476
  LOOPS_FORMAT_VERSION = 1;
6213
- __name(joinPath3, "joinPath");
6477
+ __name(joinPath4, "joinPath");
6214
6478
  __name(resolveLoopsFilePath, "resolveLoopsFilePath");
6215
6479
  __name(readFile, "readFile");
6216
6480
  __name(writeFile, "writeFile");
@@ -6306,12 +6570,12 @@ var init_session = __esm({
6306
6570
  });
6307
6571
 
6308
6572
  // core/knowledge/exemplars.ts
6309
- function joinPath4(base, child) {
6573
+ function joinPath5(base, child) {
6310
6574
  const separator3 = process.platform === "win32" ? "\\" : "/";
6311
6575
  return `${base.replace(/[\\/]+/g, separator3)}${separator3}${child}`;
6312
6576
  }
6313
6577
  function resolveExemplarsPath() {
6314
- return joinPath4(resolveUserDotMemPath(), EXEMPLARS_FILE_NAME);
6578
+ return joinPath5(resolveUserDotMemPath(), EXEMPLARS_FILE_NAME);
6315
6579
  }
6316
6580
  async function readFile2(path) {
6317
6581
  try {
@@ -6448,7 +6712,7 @@ var init_exemplars = __esm({
6448
6712
  init_user_paths();
6449
6713
  EXEMPLARS_FILE_NAME = "exemplars.json";
6450
6714
  EXEMPLARS_FORMAT_VERSION = 1;
6451
- __name(joinPath4, "joinPath");
6715
+ __name(joinPath5, "joinPath");
6452
6716
  __name(resolveExemplarsPath, "resolveExemplarsPath");
6453
6717
  __name(readFile2, "readFile");
6454
6718
  __name(writeFile2, "writeFile");
@@ -6463,12 +6727,12 @@ var init_exemplars = __esm({
6463
6727
  });
6464
6728
 
6465
6729
  // core/knowledge/personality-anchor.ts
6466
- function joinPath5(base, child) {
6730
+ function joinPath6(base, child) {
6467
6731
  const separator3 = process.platform === "win32" ? "\\" : "/";
6468
6732
  return `${base.replace(/[\\/]+/g, separator3)}${separator3}${child}`;
6469
6733
  }
6470
6734
  function resolvePersonalityAnchorPath() {
6471
- return joinPath5(resolveUserDotMemPath(), PERSONALITY_ANCHOR_FILE_NAME);
6735
+ return joinPath6(resolveUserDotMemPath(), PERSONALITY_ANCHOR_FILE_NAME);
6472
6736
  }
6473
6737
  async function readFile3(path) {
6474
6738
  try {
@@ -6656,7 +6920,7 @@ var init_personality_anchor = __esm({
6656
6920
  init_user_paths();
6657
6921
  PERSONALITY_ANCHOR_FILE_NAME = "personality-anchor.json";
6658
6922
  PERSONALITY_ANCHOR_FORMAT_VERSION = 1;
6659
- __name(joinPath5, "joinPath");
6923
+ __name(joinPath6, "joinPath");
6660
6924
  __name(resolvePersonalityAnchorPath, "resolvePersonalityAnchorPath");
6661
6925
  __name(readFile3, "readFile");
6662
6926
  __name(writeFile3, "writeFile");
@@ -6699,6 +6963,7 @@ var init_knowledge = __esm({
6699
6963
  init_storage_location();
6700
6964
  init_storage_settings();
6701
6965
  init_user_identity();
6966
+ init_user_language();
6702
6967
  init_identity_resolution();
6703
6968
  init_identity_governance();
6704
6969
  init_effective_contract();
@@ -9771,6 +10036,17 @@ var memory = {
9771
10036
  return profile.get(id);
9772
10037
  }
9773
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
+ },
9774
10050
  /** Note surface: store and retrieve markdown files and text blocks. */
9775
10051
  note: {
9776
10052
  async add(opts) {