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/index.cjs CHANGED
@@ -1666,7 +1666,10 @@ var init_discover = __esm({
1666
1666
  `);
1667
1667
  }
1668
1668
  }, "diagnostic");
1669
- DEFAULT_LIMITS = { current: 5, deep: 25 };
1669
+ DEFAULT_LIMITS = {
1670
+ current: 8,
1671
+ deep: 25
1672
+ };
1670
1673
  FIELD_ORDER = [
1671
1674
  "id",
1672
1675
  "knowledge",
@@ -2891,7 +2894,7 @@ var init_policy_store = __esm({
2891
2894
  });
2892
2895
 
2893
2896
  // core/knowledge/acquisition-limits.ts
2894
- var MEMORY_ACQUIRE_LIMITS, MEMORY_ACQUIRE_LIMITS_MCP, MEMORY_STORE_LIMITS, DOTMEM_ACQUIRE_ERROR_CODES, MemoryAcquireLimitError, MemoryAcquireConcurrencyError, encoder, serializedBytes, measureKnowledge, checkAcquireLimits;
2897
+ var MEMORY_ACQUIRE_LIMITS, MEMORY_ACQUIRE_LIMITS_MCP, MEMORY_STORE_LIMITS, DOTMEM_ACQUIRE_ERROR_CODES, MemoryAcquireLimitError, MemoryAcquireConcurrencyError, MemoryAcquireDuplicateClaimError, encoder, serializedBytes, measureKnowledge, checkAcquireLimits;
2895
2898
  var init_acquisition_limits = __esm({
2896
2899
  "core/knowledge/acquisition-limits.ts"() {
2897
2900
  MEMORY_ACQUIRE_LIMITS = Object.freeze({
@@ -2914,7 +2917,8 @@ var init_acquisition_limits = __esm({
2914
2917
  STORE_UNREADABLE: "DOTMEM_STORE_UNREADABLE",
2915
2918
  CONCURRENT_WRITE: "DOTMEM_CONCURRENT_WRITE",
2916
2919
  SESSION_ACQUIRE_LIMIT: "DOTMEM_SESSION_ACQUIRE_LIMIT",
2917
- POLICY_REFUSED: "DOTMEM_POLICY_REFUSED"
2920
+ POLICY_REFUSED: "DOTMEM_POLICY_REFUSED",
2921
+ DUPLICATE_CLAIM: "DOTMEM_DUPLICATE_CLAIM"
2918
2922
  });
2919
2923
  MemoryAcquireLimitError = class extends Error {
2920
2924
  static {
@@ -2938,6 +2942,17 @@ var init_acquisition_limits = __esm({
2938
2942
  this.name = "MemoryAcquireConcurrencyError";
2939
2943
  }
2940
2944
  };
2945
+ MemoryAcquireDuplicateClaimError = class extends Error {
2946
+ static {
2947
+ __name(this, "MemoryAcquireDuplicateClaimError");
2948
+ }
2949
+ code = DOTMEM_ACQUIRE_ERROR_CODES.DUPLICATE_CLAIM;
2950
+ retryable = false;
2951
+ constructor(message, options) {
2952
+ super(message, options);
2953
+ this.name = "MemoryAcquireDuplicateClaimError";
2954
+ }
2955
+ };
2941
2956
  encoder = new TextEncoder();
2942
2957
  serializedBytes = /* @__PURE__ */ __name((value) => {
2943
2958
  const json = JSON.stringify(value);
@@ -5618,6 +5633,267 @@ var init_user_identity = __esm({
5618
5633
  }
5619
5634
  });
5620
5635
 
5636
+ // core/knowledge/user-language.ts
5637
+ var user_language_exports = {};
5638
+ __export(user_language_exports, {
5639
+ DEFAULT_LANGUAGE: () => DEFAULT_LANGUAGE,
5640
+ DEFAULT_RESPONSE_LANGUAGE: () => DEFAULT_RESPONSE_LANGUAGE,
5641
+ DEFAULT_USER_LANGUAGE: () => DEFAULT_USER_LANGUAGE,
5642
+ LANGUAGE_DEFAULT: () => LANGUAGE_DEFAULT,
5643
+ LANGUAGE_PREFERENCE_FILE_NAME: () => LANGUAGE_PREFERENCE_FILE_NAME,
5644
+ PREFERENCES_FILE_NAME: () => PREFERENCES_FILE_NAME,
5645
+ USER_LANGUAGE_DEFAULT: () => USER_LANGUAGE_DEFAULT,
5646
+ USER_LANGUAGE_FILE_NAME: () => USER_LANGUAGE_FILE_NAME,
5647
+ USER_LANGUAGE_PREFERENCE_FILE_NAME: () => USER_LANGUAGE_PREFERENCE_FILE_NAME,
5648
+ USER_PREFERENCES_FILE_NAME: () => USER_PREFERENCES_FILE_NAME,
5649
+ getLanguagePreference: () => getLanguagePreference,
5650
+ getResponseLanguage: () => getResponseLanguage,
5651
+ getUserLanguage: () => getUserLanguage,
5652
+ getUserLanguagePreference: () => getUserLanguagePreference,
5653
+ isItalian: () => isItalian,
5654
+ language: () => language,
5655
+ languageTag: () => languageTag,
5656
+ loadLanguagePreference: () => loadLanguagePreference,
5657
+ loadUserLanguage: () => loadUserLanguage,
5658
+ loadUserLanguagePreference: () => loadUserLanguagePreference,
5659
+ preferredLanguage: () => preferredLanguage,
5660
+ readUserLanguage: () => readUserLanguage,
5661
+ resolveLanguage: () => resolveLanguage,
5662
+ resolveLanguagePath: () => resolveLanguagePath,
5663
+ resolveLanguagePreference: () => resolveLanguagePreference,
5664
+ resolveLanguagePreferencePath: () => resolveLanguagePreferencePath,
5665
+ resolveResponseLanguage: () => resolveResponseLanguage,
5666
+ resolveUserLanguage: () => resolveUserLanguage,
5667
+ resolveUserLanguagePath: () => resolveUserLanguagePath,
5668
+ resolveUserLanguagePreferencePath: () => resolveUserLanguagePreferencePath,
5669
+ responseLanguage: () => responseLanguage,
5670
+ saveLanguagePreference: () => saveLanguagePreference,
5671
+ saveUserLanguage: () => saveUserLanguage,
5672
+ setUserLanguage: () => setUserLanguage,
5673
+ userLanguage: () => userLanguage,
5674
+ writeUserLanguage: () => writeUserLanguage
5675
+ });
5676
+ function joinPath3(base, child) {
5677
+ const separator3 = process.platform === "win32" ? "\\" : "/";
5678
+ return `${base.replace(/[\\/]+/g, separator3)}${separator3}${child}`;
5679
+ }
5680
+ function resolveUserLanguagePath() {
5681
+ return joinPath3(resolveUserDotMemPath(), USER_LANGUAGE_FILE_NAME);
5682
+ }
5683
+ function resolveUserLanguagePreferencePath() {
5684
+ return resolveUserLanguagePath();
5685
+ }
5686
+ function resolveLanguagePath() {
5687
+ return resolveUserLanguagePath();
5688
+ }
5689
+ function resolveLanguagePreferencePath() {
5690
+ return resolveUserLanguagePath();
5691
+ }
5692
+ function readJsonFile(path) {
5693
+ const fs = getSyncFs();
5694
+ if (!fs) return null;
5695
+ let raw;
5696
+ try {
5697
+ raw = fs.readFileSync(path, "utf8");
5698
+ } catch {
5699
+ return null;
5700
+ }
5701
+ if (typeof raw !== "string") return null;
5702
+ if (raw.charCodeAt(0) === 65279) raw = raw.slice(1);
5703
+ try {
5704
+ return JSON.parse(raw);
5705
+ } catch {
5706
+ return null;
5707
+ }
5708
+ }
5709
+ function extractLanguage(value) {
5710
+ if (value === null || value === void 0) return null;
5711
+ if (typeof value === "string") {
5712
+ const trimmed = value.trim();
5713
+ return trimmed ? trimmed : null;
5714
+ }
5715
+ if (typeof value !== "object" || Array.isArray(value)) return null;
5716
+ for (const key of LANGUAGE_KEYS) {
5717
+ if (Object.prototype.hasOwnProperty.call(value, key)) {
5718
+ const candidate = extractLanguage(value[key]);
5719
+ if (candidate) return candidate;
5720
+ }
5721
+ }
5722
+ for (const containerKey of ["preferences", "user", "agent", "config", "settings", "storage"]) {
5723
+ if (Object.prototype.hasOwnProperty.call(value, containerKey)) {
5724
+ const candidate = extractLanguage(value[containerKey]);
5725
+ if (candidate) return candidate;
5726
+ }
5727
+ }
5728
+ return null;
5729
+ }
5730
+ function loadUserLanguage() {
5731
+ const fs = getSyncFs();
5732
+ const anchor = resolveUserDotMemPath();
5733
+ if (fs) {
5734
+ for (const name of LANGUAGE_FILE_NAMES) {
5735
+ const candidatePath = joinPath3(anchor, name);
5736
+ const parsed = readJsonFile(candidatePath);
5737
+ const language2 = extractLanguage(parsed);
5738
+ if (language2) return language2;
5739
+ }
5740
+ try {
5741
+ const govPath = joinPath3(joinPath3(anchor, "policy"), "identity-governance.json");
5742
+ const gov = readJsonFile(govPath);
5743
+ const language2 = extractLanguage(gov);
5744
+ if (language2) return language2;
5745
+ } catch {
5746
+ }
5747
+ try {
5748
+ const settingsPath = joinPath3(anchor, "dotmem.settings.json");
5749
+ const settings = readJsonFile(settingsPath);
5750
+ const language2 = extractLanguage(settings);
5751
+ if (language2) return language2;
5752
+ } catch {
5753
+ }
5754
+ }
5755
+ const env = globalThis?.process?.env;
5756
+ const envLang = env?.DOTMEM_LANGUAGE || env?.DOTMEM_RESPONSE_LANGUAGE || env?.DOTMEM_USER_LANGUAGE;
5757
+ if (typeof envLang === "string" && envLang.trim()) return envLang.trim();
5758
+ return DEFAULT_USER_LANGUAGE;
5759
+ }
5760
+ function readUserLanguage() {
5761
+ return loadUserLanguage();
5762
+ }
5763
+ function getUserLanguage() {
5764
+ return loadUserLanguage();
5765
+ }
5766
+ function resolveUserLanguage() {
5767
+ return loadUserLanguage();
5768
+ }
5769
+ function resolveLanguage() {
5770
+ return loadUserLanguage();
5771
+ }
5772
+ function loadLanguagePreference() {
5773
+ return loadUserLanguage();
5774
+ }
5775
+ function getLanguagePreference() {
5776
+ return loadUserLanguage();
5777
+ }
5778
+ function resolveLanguagePreference() {
5779
+ return loadUserLanguage();
5780
+ }
5781
+ function loadUserLanguagePreference() {
5782
+ return loadUserLanguage();
5783
+ }
5784
+ function getUserLanguagePreference() {
5785
+ return loadUserLanguage();
5786
+ }
5787
+ function resolveResponseLanguage() {
5788
+ return loadUserLanguage();
5789
+ }
5790
+ function getResponseLanguage() {
5791
+ return loadUserLanguage();
5792
+ }
5793
+ async function setUserLanguage(language2) {
5794
+ const fsMod = await import('fs/promises');
5795
+ const path = resolveUserLanguagePath();
5796
+ const dir = parentStoragePath(path);
5797
+ await fsMod.mkdir(dir, { recursive: true });
5798
+ const payload = { format: "dotmem.language", version: 1, language: String(language2).trim() };
5799
+ const temporary = `${path}.${process.pid}.${Date.now().toString(36)}.tmp`;
5800
+ await fsMod.writeFile(temporary, `${JSON.stringify(payload, null, 2)}
5801
+ `, "utf8");
5802
+ await fsMod.rename(temporary, path);
5803
+ return payload.language;
5804
+ }
5805
+ async function saveUserLanguage(language2) {
5806
+ return setUserLanguage(language2);
5807
+ }
5808
+ async function writeUserLanguage(language2) {
5809
+ return setUserLanguage(language2);
5810
+ }
5811
+ async function saveLanguagePreference(language2) {
5812
+ return setUserLanguage(language2);
5813
+ }
5814
+ function isItalian(language2) {
5815
+ const value = (language2 ?? loadUserLanguage()).toLowerCase();
5816
+ return value === "it" || value === "it-it" || value.startsWith("it-");
5817
+ }
5818
+ function languageTag() {
5819
+ return loadUserLanguage();
5820
+ }
5821
+ 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;
5822
+ var init_user_language = __esm({
5823
+ "core/knowledge/user-language.ts"() {
5824
+ init_user_paths();
5825
+ init_storage_paths();
5826
+ USER_LANGUAGE_FILE_NAME = "language.json";
5827
+ USER_LANGUAGE_PREFERENCE_FILE_NAME = "user-language.json";
5828
+ LANGUAGE_PREFERENCE_FILE_NAME = "language-preference.json";
5829
+ USER_PREFERENCES_FILE_NAME = "user-preferences.json";
5830
+ PREFERENCES_FILE_NAME = "preferences.json";
5831
+ DEFAULT_USER_LANGUAGE = "it-IT";
5832
+ DEFAULT_LANGUAGE = "it-IT";
5833
+ USER_LANGUAGE_DEFAULT = "it-IT";
5834
+ LANGUAGE_DEFAULT = "it-IT";
5835
+ DEFAULT_RESPONSE_LANGUAGE = "it-IT";
5836
+ LANGUAGE_FILE_NAMES = [
5837
+ USER_LANGUAGE_FILE_NAME,
5838
+ USER_LANGUAGE_PREFERENCE_FILE_NAME,
5839
+ LANGUAGE_PREFERENCE_FILE_NAME,
5840
+ USER_PREFERENCES_FILE_NAME,
5841
+ PREFERENCES_FILE_NAME,
5842
+ "config.json",
5843
+ "user-config.json",
5844
+ "agent-config.json",
5845
+ "dotmem.config.json"
5846
+ ];
5847
+ LANGUAGE_KEYS = [
5848
+ "language",
5849
+ "Language",
5850
+ "responseLanguage",
5851
+ "response_language",
5852
+ "preferredLanguage",
5853
+ "preferred_language",
5854
+ "userLanguage",
5855
+ "user_language",
5856
+ "defaultLanguage",
5857
+ "default_language",
5858
+ "locale",
5859
+ "lang",
5860
+ "uiLanguage",
5861
+ "ui_language",
5862
+ "conversationLanguage",
5863
+ "conversation_language"
5864
+ ];
5865
+ __name(joinPath3, "joinPath");
5866
+ __name(resolveUserLanguagePath, "resolveUserLanguagePath");
5867
+ __name(resolveUserLanguagePreferencePath, "resolveUserLanguagePreferencePath");
5868
+ __name(resolveLanguagePath, "resolveLanguagePath");
5869
+ __name(resolveLanguagePreferencePath, "resolveLanguagePreferencePath");
5870
+ __name(readJsonFile, "readJsonFile");
5871
+ __name(extractLanguage, "extractLanguage");
5872
+ __name(loadUserLanguage, "loadUserLanguage");
5873
+ __name(readUserLanguage, "readUserLanguage");
5874
+ __name(getUserLanguage, "getUserLanguage");
5875
+ __name(resolveUserLanguage, "resolveUserLanguage");
5876
+ __name(resolveLanguage, "resolveLanguage");
5877
+ __name(loadLanguagePreference, "loadLanguagePreference");
5878
+ __name(getLanguagePreference, "getLanguagePreference");
5879
+ __name(resolveLanguagePreference, "resolveLanguagePreference");
5880
+ __name(loadUserLanguagePreference, "loadUserLanguagePreference");
5881
+ __name(getUserLanguagePreference, "getUserLanguagePreference");
5882
+ __name(resolveResponseLanguage, "resolveResponseLanguage");
5883
+ __name(getResponseLanguage, "getResponseLanguage");
5884
+ __name(setUserLanguage, "setUserLanguage");
5885
+ __name(saveUserLanguage, "saveUserLanguage");
5886
+ __name(writeUserLanguage, "writeUserLanguage");
5887
+ __name(saveLanguagePreference, "saveLanguagePreference");
5888
+ __name(isItalian, "isItalian");
5889
+ __name(languageTag, "languageTag");
5890
+ userLanguage = loadUserLanguage();
5891
+ language = loadUserLanguage();
5892
+ responseLanguage = loadUserLanguage();
5893
+ preferredLanguage = loadUserLanguage();
5894
+ }
5895
+ });
5896
+
5621
5897
  // core/profile/ai.json
5622
5898
  var ai_default;
5623
5899
  var init_ai = __esm({
@@ -6026,6 +6302,45 @@ var init_project_identity = __esm({
6026
6302
  }
6027
6303
  });
6028
6304
 
6305
+ // core/knowledge/uuid.ts
6306
+ var generateUuidV7;
6307
+ var init_uuid = __esm({
6308
+ "core/knowledge/uuid.ts"() {
6309
+ generateUuidV7 = /* @__PURE__ */ __name(() => {
6310
+ const cryptoObj = globalThis.crypto;
6311
+ const ms = Date.now();
6312
+ const rand = new Uint8Array(10);
6313
+ if (cryptoObj && typeof cryptoObj.getRandomValues === "function") {
6314
+ cryptoObj.getRandomValues(rand);
6315
+ } else {
6316
+ for (let i2 = 0; i2 < rand.length; i2 += 1) {
6317
+ rand[i2] = Math.floor(Math.random() * 256);
6318
+ }
6319
+ }
6320
+ const bytes = new Uint8Array(16);
6321
+ bytes[0] = ms / 1099511627776 & 255;
6322
+ bytes[1] = ms / 4294967296 & 255;
6323
+ bytes[2] = ms / 16777216 & 255;
6324
+ bytes[3] = ms / 65536 & 255;
6325
+ bytes[4] = ms / 256 & 255;
6326
+ bytes[5] = ms & 255;
6327
+ const randA = (rand[0] << 8 | rand[1]) & 4095;
6328
+ bytes[6] = 112 | randA >> 8;
6329
+ bytes[7] = randA & 255;
6330
+ bytes[8] = 128 | rand[2] & 63;
6331
+ bytes[9] = rand[3];
6332
+ bytes[10] = rand[4];
6333
+ bytes[11] = rand[5];
6334
+ bytes[12] = rand[6];
6335
+ bytes[13] = rand[7];
6336
+ bytes[14] = rand[8];
6337
+ bytes[15] = rand[9];
6338
+ const hex = Array.from(bytes).map((byte) => byte.toString(16).padStart(2, "0")).join("");
6339
+ return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
6340
+ }, "generateUuidV7");
6341
+ }
6342
+ });
6343
+
6029
6344
  // core/knowledge/staging.ts
6030
6345
  var DOTMEM_STAGE_FORMAT, DOTMEM_STAGE_VERSION, StageFileError, generateRequestId, nodeCwd, resolveStagingDirectory, stagePathFor, nodeFs6, normalizeClaimIds, revisionFromOptions, writeStageFile, readStageFile, validateStageFile, commitStageFile, cleanupStageFile;
6031
6346
  var init_staging = __esm({
@@ -6037,6 +6352,7 @@ var init_staging = __esm({
6037
6352
  init_store_queue();
6038
6353
  init_state();
6039
6354
  init_project_identity();
6355
+ init_uuid();
6040
6356
  init_project_anchor();
6041
6357
  DOTMEM_STAGE_FORMAT = "dotmem.stage";
6042
6358
  DOTMEM_STAGE_VERSION = 1;
@@ -6080,9 +6396,11 @@ var init_staging = __esm({
6080
6396
  return void 0;
6081
6397
  }, "revisionFromOptions");
6082
6398
  writeStageFile = /* @__PURE__ */ __name(async (claim, scope, sourceProject) => {
6399
+ const claimId = claim.id && claim.id.trim() ? claim.id.trim() : generateUuidV7();
6083
6400
  const sanitized = sanitizeKnowledge(claim.knowledge);
6084
6401
  const sanitizedClaim = {
6085
6402
  ...claim,
6403
+ id: claimId,
6086
6404
  knowledge: sanitized.knowledge
6087
6405
  };
6088
6406
  const requestId = generateRequestId();
@@ -6180,11 +6498,12 @@ var init_staging = __esm({
6180
6498
  ...validated.claim,
6181
6499
  knowledge: boundary.knowledge
6182
6500
  };
6501
+ const claimId = sanitizedClaim.id && sanitizedClaim.id.trim() ? sanitizedClaim.id.trim() : generateUuidV7();
6183
6502
  const kind = boundary.kind ?? "experience";
6184
6503
  const target = await resolveMemoryTarget(kind, scope, sourceProject);
6185
6504
  const revision = revisionFromOptions(sanitizedClaim);
6186
6505
  const claim = buildClaimRecord({
6187
- id: sanitizedClaim.id,
6506
+ id: claimId,
6188
6507
  knowledge: sanitizedClaim.knowledge,
6189
6508
  applicability: sanitizedClaim.applicability,
6190
6509
  evidence: sanitizedClaim.evidence,
@@ -6204,13 +6523,13 @@ var init_staging = __esm({
6204
6523
  });
6205
6524
  });
6206
6525
  const verification = await target.repository.load();
6207
- if (!verification.claims.some((c) => c.id === sanitizedClaim.id)) {
6208
- throw new Error(`Persistence verification failed: claim ${sanitizedClaim.id} was not persisted`);
6526
+ if (!verification.claims.some((c) => c.id === claimId)) {
6527
+ throw new Error(`Persistence verification failed: claim ${claimId} was not persisted`);
6209
6528
  }
6210
6529
  await cleanupStageFile(requestId);
6211
6530
  return {
6212
6531
  requestId,
6213
- claimId: sanitizedClaim.id,
6532
+ claimId,
6214
6533
  sourceId: target.sourceId,
6215
6534
  scope,
6216
6535
  kind
@@ -6231,12 +6550,12 @@ var init_staging = __esm({
6231
6550
  });
6232
6551
 
6233
6552
  // core/knowledge/loops.ts
6234
- function joinPath3(base, child) {
6553
+ function joinPath4(base, child) {
6235
6554
  const separator3 = process.platform === "win32" ? "\\" : "/";
6236
6555
  return `${base.replace(/[\\/]+/g, separator3)}${separator3}${child}`;
6237
6556
  }
6238
6557
  function resolveLoopsFilePath() {
6239
- return joinPath3(resolveUserDotMemPath(), LOOPS_FILE_NAME);
6558
+ return joinPath4(resolveUserDotMemPath(), LOOPS_FILE_NAME);
6240
6559
  }
6241
6560
  async function readFile(path) {
6242
6561
  try {
@@ -6368,7 +6687,7 @@ var init_loops = __esm({
6368
6687
  init_user_paths();
6369
6688
  LOOPS_FILE_NAME = "loops.json";
6370
6689
  LOOPS_FORMAT_VERSION = 1;
6371
- __name(joinPath3, "joinPath");
6690
+ __name(joinPath4, "joinPath");
6372
6691
  __name(resolveLoopsFilePath, "resolveLoopsFilePath");
6373
6692
  __name(readFile, "readFile");
6374
6693
  __name(writeFile, "writeFile");
@@ -6457,12 +6776,12 @@ var init_violations = __esm({
6457
6776
  });
6458
6777
 
6459
6778
  // core/knowledge/session.ts
6460
- function joinPath4(base, child) {
6779
+ function joinPath5(base, child) {
6461
6780
  const separator3 = process.platform === "win32" ? "\\" : "/";
6462
6781
  return `${base.replace(/[\\/]+/g, separator3)}${separator3}${child}`;
6463
6782
  }
6464
6783
  function resolveSessionFilePath() {
6465
- return joinPath4(resolveUserDotMemPath(), SESSION_FILE_NAME);
6784
+ return joinPath5(resolveUserDotMemPath(), SESSION_FILE_NAME);
6466
6785
  }
6467
6786
  async function readFile2(path) {
6468
6787
  try {
@@ -6495,7 +6814,7 @@ var init_session = __esm({
6495
6814
  "core/knowledge/session.ts"() {
6496
6815
  init_user_paths();
6497
6816
  SESSION_FILE_NAME = "session.json";
6498
- __name(joinPath4, "joinPath");
6817
+ __name(joinPath5, "joinPath");
6499
6818
  __name(resolveSessionFilePath, "resolveSessionFilePath");
6500
6819
  __name(readFile2, "readFile");
6501
6820
  DEFAULT_SESSION = {
@@ -6510,12 +6829,12 @@ var init_session = __esm({
6510
6829
  });
6511
6830
 
6512
6831
  // core/knowledge/exemplars.ts
6513
- function joinPath5(base, child) {
6832
+ function joinPath6(base, child) {
6514
6833
  const separator3 = process.platform === "win32" ? "\\" : "/";
6515
6834
  return `${base.replace(/[\\/]+/g, separator3)}${separator3}${child}`;
6516
6835
  }
6517
6836
  function resolveExemplarsPath() {
6518
- return joinPath5(resolveUserDotMemPath(), EXEMPLARS_FILE_NAME);
6837
+ return joinPath6(resolveUserDotMemPath(), EXEMPLARS_FILE_NAME);
6519
6838
  }
6520
6839
  async function readFile3(path) {
6521
6840
  try {
@@ -6652,7 +6971,7 @@ var init_exemplars = __esm({
6652
6971
  init_user_paths();
6653
6972
  EXEMPLARS_FILE_NAME = "exemplars.json";
6654
6973
  EXEMPLARS_FORMAT_VERSION = 1;
6655
- __name(joinPath5, "joinPath");
6974
+ __name(joinPath6, "joinPath");
6656
6975
  __name(resolveExemplarsPath, "resolveExemplarsPath");
6657
6976
  __name(readFile3, "readFile");
6658
6977
  __name(writeFile2, "writeFile");
@@ -6667,12 +6986,12 @@ var init_exemplars = __esm({
6667
6986
  });
6668
6987
 
6669
6988
  // core/knowledge/personality-anchor.ts
6670
- function joinPath6(base, child) {
6989
+ function joinPath7(base, child) {
6671
6990
  const separator3 = process.platform === "win32" ? "\\" : "/";
6672
6991
  return `${base.replace(/[\\/]+/g, separator3)}${separator3}${child}`;
6673
6992
  }
6674
6993
  function resolvePersonalityAnchorPath() {
6675
- return joinPath6(resolveUserDotMemPath(), PERSONALITY_ANCHOR_FILE_NAME);
6994
+ return joinPath7(resolveUserDotMemPath(), PERSONALITY_ANCHOR_FILE_NAME);
6676
6995
  }
6677
6996
  async function readFile4(path) {
6678
6997
  try {
@@ -6860,7 +7179,7 @@ var init_personality_anchor = __esm({
6860
7179
  init_user_paths();
6861
7180
  PERSONALITY_ANCHOR_FILE_NAME = "personality-anchor.json";
6862
7181
  PERSONALITY_ANCHOR_FORMAT_VERSION = 1;
6863
- __name(joinPath6, "joinPath");
7182
+ __name(joinPath7, "joinPath");
6864
7183
  __name(resolvePersonalityAnchorPath, "resolvePersonalityAnchorPath");
6865
7184
  __name(readFile4, "readFile");
6866
7185
  __name(writeFile3, "writeFile");
@@ -6903,6 +7222,7 @@ var init_knowledge = __esm({
6903
7222
  init_storage_location();
6904
7223
  init_storage_settings();
6905
7224
  init_user_identity();
7225
+ init_user_language();
6906
7226
  init_identity_resolution();
6907
7227
  init_identity_governance();
6908
7228
  init_effective_contract();
@@ -8715,6 +9035,8 @@ init_router();
8715
9035
  init_store_queue();
8716
9036
  init_staging();
8717
9037
  init_user_paths();
9038
+ init_uuid();
9039
+ init_acquisition_limits();
8718
9040
  init_storage_coordinator();
8719
9041
  init_mem_repository();
8720
9042
  function normalizeClaimIds3(value) {
@@ -8765,9 +9087,10 @@ async function findClaimAcrossAllSources(claimId, scope, sourceProject) {
8765
9087
  __name(findClaimAcrossAllSources, "findClaimAcrossAllSources");
8766
9088
  var acquire = {
8767
9089
  async acquire(opts) {
9090
+ const claimId = opts.id && opts.id.trim() ? opts.id.trim() : generateUuidV7();
8768
9091
  if (opts.scope === void 0 && opts.applicability?.scope !== void 0) {
8769
9092
  throw new Error(
8770
- `Claim ${opts.id} uses applicability.scope for routing. Use top-level scope instead.`
9093
+ `Claim ${claimId} uses applicability.scope for routing. Use top-level scope instead.`
8771
9094
  );
8772
9095
  }
8773
9096
  const scope = opts.scope ?? "project";
@@ -8778,19 +9101,18 @@ var acquire = {
8778
9101
  }
8779
9102
  const boundary = await crossAcquisitionBoundary(opts);
8780
9103
  if (boundary.sanitized && DEV) {
8781
- console.warn(`[dotmem] Sanitized secret values from claim ${opts.id}`);
9104
+ console.warn(`[dotmem] Sanitized secret values from claim ${claimId}`);
8782
9105
  }
8783
9106
  if (boundary.removedTierFields > 0 && DEV) {
8784
- console.warn(`[dotmem] Removed ${boundary.removedTierFields} non-authoritative tier field(s) from claim ${opts.id}`);
9107
+ console.warn(`[dotmem] Removed ${boundary.removedTierFields} non-authoritative tier field(s) from claim ${claimId}`);
8785
9108
  }
8786
9109
  const kind = boundary.kind;
8787
9110
  const target = await resolveMemoryTarget(kind, scope, sourceProject);
8788
- const existing = await findClaimAcrossAllSources(opts.id, scope, sourceProject);
9111
+ const existing = await findClaimAcrossAllSources(claimId, scope, sourceProject);
8789
9112
  if (existing) {
8790
9113
  const acquiredAt = existing.acquiredAt ? ` (acquired ${existing.acquiredAt})` : "";
8791
- throw new Error(
8792
- `Claim id ${opts.id} already exists in ${existing.sourceId}${acquiredAt}. Use a revision relationship (retracts/supersedes/refines) to revise it, or run 'npx dotmem doctor' to audit duplicates.`
8793
- );
9114
+ 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.`;
9115
+ throw new MemoryAcquireDuplicateClaimError("A claim with this ID already exists.", { cause: new Error(detail) });
8794
9116
  }
8795
9117
  const revision = revisionFromAcquire2(opts);
8796
9118
  const repository = target.repository;
@@ -8800,7 +9122,7 @@ var acquire = {
8800
9122
  const next = updateKnowledge(state3, {
8801
9123
  basedOnVersion: state3.version,
8802
9124
  claims: [buildClaimRecord({
8803
- id: opts.id,
9125
+ id: claimId,
8804
9126
  knowledge: boundary.knowledge,
8805
9127
  applicability: opts.applicability,
8806
9128
  evidence: opts.evidence,
@@ -8817,10 +9139,11 @@ var acquire = {
8817
9139
  });
8818
9140
  });
8819
9141
  const verification = await target.repository.load();
8820
- if (!verification.claims.some((claim) => claim.id === opts.id)) {
8821
- throw new Error(`Acquisition verification failed: claim ${opts.id} was not persisted`);
9142
+ if (!verification.claims.some((claim) => claim.id === claimId)) {
9143
+ throw new Error(`Acquisition verification failed: claim ${claimId} was not persisted`);
8822
9144
  }
8823
- memorio.dispatch.set("dotmem:memory:acquired", { detail: { id: opts.id } });
9145
+ memorio.dispatch.set("dotmem:memory:acquired", { detail: { id: claimId } });
9146
+ return claimId;
8824
9147
  },
8825
9148
  async acquireStaged(opts) {
8826
9149
  const scope = opts.scope ?? "project";
@@ -8828,7 +9151,8 @@ var acquire = {
8828
9151
  const sourceProject = resolvedProjectId ? normalizeProjectId(resolvedProjectId) : void 0;
8829
9152
  const { requestId } = await writeStageFile(opts, scope, sourceProject);
8830
9153
  try {
8831
- await commitStageFile(requestId);
9154
+ const result = await commitStageFile(requestId);
9155
+ return result.claimId;
8832
9156
  } catch (error) {
8833
9157
  if (error instanceof StageFileError) {
8834
9158
  await cleanupStageFile(requestId);
@@ -10041,6 +10365,17 @@ var memory = {
10041
10365
  return profile.get(id);
10042
10366
  }
10043
10367
  },
10368
+ /** Persistent default response language (canonical user config). */
10369
+ language: {
10370
+ async get() {
10371
+ const m = await Promise.resolve().then(() => (init_user_language(), user_language_exports));
10372
+ return m.resolveUserLanguage();
10373
+ },
10374
+ async set(value) {
10375
+ const m = await Promise.resolve().then(() => (init_user_language(), user_language_exports));
10376
+ return m.setUserLanguage(value);
10377
+ }
10378
+ },
10044
10379
  /** Note surface: store and retrieve markdown files and text blocks. */
10045
10380
  note: {
10046
10381
  async add(opts) {
@@ -12640,12 +12975,12 @@ var GovernancePolicyError = class extends Error {
12640
12975
  };
12641
12976
  var requiredText3 = /* @__PURE__ */ __name((v) => typeof v === "string" && v.trim().length > 0, "requiredText");
12642
12977
  var nowIso2 = /* @__PURE__ */ __name(() => (/* @__PURE__ */ new Date()).toISOString(), "nowIso");
12643
- var joinPath7 = /* @__PURE__ */ __name((base, child) => {
12978
+ var joinPath8 = /* @__PURE__ */ __name((base, child) => {
12644
12979
  const sep = process.platform === "win32" ? "\\" : "/";
12645
12980
  return `${base.replace(/[\\/]+/g, sep)}${sep}${child}`;
12646
12981
  }, "joinPath");
12647
- var resolveGovernanceDir = /* @__PURE__ */ __name((directory) => directory ?? joinPath7(resolveUserDotMemPath(), "policy"), "resolveGovernanceDir");
12648
- var resolveGovernanceFilePath = /* @__PURE__ */ __name((directory) => joinPath7(resolveGovernanceDir(directory), GOVERNANCE_FILE_NAME), "resolveGovernanceFilePath");
12982
+ var resolveGovernanceDir = /* @__PURE__ */ __name((directory) => directory ?? joinPath8(resolveUserDotMemPath(), "policy"), "resolveGovernanceDir");
12983
+ var resolveGovernanceFilePath = /* @__PURE__ */ __name((directory) => joinPath8(resolveGovernanceDir(directory), GOVERNANCE_FILE_NAME), "resolveGovernanceFilePath");
12649
12984
  var ROLE_CAPABILITIES = {
12650
12985
  "human-owner": /* @__PURE__ */ new Set(["policy.propose", "policy.review", "policy.approve", "policy.reject", "policy.activate", "policy.suspend", "policy.retire", "role.bind", "governance.read", "governance.audit.read", "agent.execute", "guardrail.stop.activate", "guardrail.stop.release"]),
12651
12986
  "human-approver": /* @__PURE__ */ new Set(["policy.review", "policy.approve", "policy.reject", "governance.read", "governance.audit.read", "guardrail.stop.activate", "guardrail.stop.release"]),
@@ -13373,12 +13708,12 @@ var GuardrailError = class extends Error {
13373
13708
  };
13374
13709
  var requiredText4 = /* @__PURE__ */ __name((v) => typeof v === "string" && v.trim().length > 0, "requiredText");
13375
13710
  var nowIso3 = /* @__PURE__ */ __name(() => (/* @__PURE__ */ new Date()).toISOString(), "nowIso");
13376
- var joinPath8 = /* @__PURE__ */ __name((base, child) => {
13711
+ var joinPath9 = /* @__PURE__ */ __name((base, child) => {
13377
13712
  const sep = process.platform === "win32" ? "\\" : "/";
13378
13713
  return `${base.replace(/[\\/]+/g, sep)}${sep}${child}`;
13379
13714
  }, "joinPath");
13380
- var resolveGuardrailDir = /* @__PURE__ */ __name((directory) => directory ?? joinPath8(resolveUserDotMemPath(), "policy"), "resolveGuardrailDir");
13381
- var resolveStopFilePath = /* @__PURE__ */ __name((directory) => joinPath8(resolveGuardrailDir(directory), STOP_FILE_NAME), "resolveStopFilePath");
13715
+ var resolveGuardrailDir = /* @__PURE__ */ __name((directory) => directory ?? joinPath9(resolveUserDotMemPath(), "policy"), "resolveGuardrailDir");
13716
+ var resolveStopFilePath = /* @__PURE__ */ __name((directory) => joinPath9(resolveGuardrailDir(directory), STOP_FILE_NAME), "resolveStopFilePath");
13382
13717
  var ACTIONS_REQUIRING_TRUSTED_IDENTITY = /* @__PURE__ */ new Set([
13383
13718
  "agent.execute",
13384
13719
  "guardrail.stop.activate",
@@ -13845,7 +14180,7 @@ var EPITEMIC_STATUSES2 = [
13845
14180
 
13846
14181
  // app.json
13847
14182
  var app_default = {
13848
- version: "0.1.1"};
14183
+ version: "0.1.3"};
13849
14184
 
13850
14185
  // index.ts
13851
14186
  var dotmem = {