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/index.cjs
CHANGED
|
@@ -1666,7 +1666,10 @@ var init_discover = __esm({
|
|
|
1666
1666
|
`);
|
|
1667
1667
|
}
|
|
1668
1668
|
}, "diagnostic");
|
|
1669
|
-
DEFAULT_LIMITS = {
|
|
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:
|
|
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 ===
|
|
6208
|
-
throw new Error(`Persistence verification failed: claim ${
|
|
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
|
|
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
|
|
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
|
|
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(
|
|
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
|
|
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
|
|
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(
|
|
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
|
|
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
|
|
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(
|
|
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
|
|
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
|
|
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(
|
|
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 ${
|
|
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 ${
|
|
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 ${
|
|
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(
|
|
9111
|
+
const existing = await findClaimAcrossAllSources(claimId, scope, sourceProject);
|
|
8789
9112
|
if (existing) {
|
|
8790
9113
|
const acquiredAt = existing.acquiredAt ? ` (acquired ${existing.acquiredAt})` : "";
|
|
8791
|
-
|
|
8792
|
-
|
|
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:
|
|
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 ===
|
|
8821
|
-
throw new Error(`Acquisition verification failed: claim ${
|
|
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:
|
|
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
|
|
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 ??
|
|
12648
|
-
var resolveGovernanceFilePath = /* @__PURE__ */ __name((directory) =>
|
|
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
|
|
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 ??
|
|
13381
|
-
var resolveStopFilePath = /* @__PURE__ */ __name((directory) =>
|
|
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.
|
|
14183
|
+
version: "0.1.3"};
|
|
13849
14184
|
|
|
13850
14185
|
// index.ts
|
|
13851
14186
|
var dotmem = {
|