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.js
CHANGED
|
@@ -1662,7 +1662,10 @@ var init_discover = __esm({
|
|
|
1662
1662
|
`);
|
|
1663
1663
|
}
|
|
1664
1664
|
}, "diagnostic");
|
|
1665
|
-
DEFAULT_LIMITS = {
|
|
1665
|
+
DEFAULT_LIMITS = {
|
|
1666
|
+
current: 8,
|
|
1667
|
+
deep: 25
|
|
1668
|
+
};
|
|
1666
1669
|
FIELD_ORDER = [
|
|
1667
1670
|
"id",
|
|
1668
1671
|
"knowledge",
|
|
@@ -2887,7 +2890,7 @@ var init_policy_store = __esm({
|
|
|
2887
2890
|
});
|
|
2888
2891
|
|
|
2889
2892
|
// core/knowledge/acquisition-limits.ts
|
|
2890
|
-
var MEMORY_ACQUIRE_LIMITS, MEMORY_ACQUIRE_LIMITS_MCP, MEMORY_STORE_LIMITS, DOTMEM_ACQUIRE_ERROR_CODES, MemoryAcquireLimitError, MemoryAcquireConcurrencyError, encoder, serializedBytes, measureKnowledge, checkAcquireLimits;
|
|
2893
|
+
var MEMORY_ACQUIRE_LIMITS, MEMORY_ACQUIRE_LIMITS_MCP, MEMORY_STORE_LIMITS, DOTMEM_ACQUIRE_ERROR_CODES, MemoryAcquireLimitError, MemoryAcquireConcurrencyError, MemoryAcquireDuplicateClaimError, encoder, serializedBytes, measureKnowledge, checkAcquireLimits;
|
|
2891
2894
|
var init_acquisition_limits = __esm({
|
|
2892
2895
|
"core/knowledge/acquisition-limits.ts"() {
|
|
2893
2896
|
MEMORY_ACQUIRE_LIMITS = Object.freeze({
|
|
@@ -2910,7 +2913,8 @@ var init_acquisition_limits = __esm({
|
|
|
2910
2913
|
STORE_UNREADABLE: "DOTMEM_STORE_UNREADABLE",
|
|
2911
2914
|
CONCURRENT_WRITE: "DOTMEM_CONCURRENT_WRITE",
|
|
2912
2915
|
SESSION_ACQUIRE_LIMIT: "DOTMEM_SESSION_ACQUIRE_LIMIT",
|
|
2913
|
-
POLICY_REFUSED: "DOTMEM_POLICY_REFUSED"
|
|
2916
|
+
POLICY_REFUSED: "DOTMEM_POLICY_REFUSED",
|
|
2917
|
+
DUPLICATE_CLAIM: "DOTMEM_DUPLICATE_CLAIM"
|
|
2914
2918
|
});
|
|
2915
2919
|
MemoryAcquireLimitError = class extends Error {
|
|
2916
2920
|
static {
|
|
@@ -2934,6 +2938,17 @@ var init_acquisition_limits = __esm({
|
|
|
2934
2938
|
this.name = "MemoryAcquireConcurrencyError";
|
|
2935
2939
|
}
|
|
2936
2940
|
};
|
|
2941
|
+
MemoryAcquireDuplicateClaimError = class extends Error {
|
|
2942
|
+
static {
|
|
2943
|
+
__name(this, "MemoryAcquireDuplicateClaimError");
|
|
2944
|
+
}
|
|
2945
|
+
code = DOTMEM_ACQUIRE_ERROR_CODES.DUPLICATE_CLAIM;
|
|
2946
|
+
retryable = false;
|
|
2947
|
+
constructor(message, options) {
|
|
2948
|
+
super(message, options);
|
|
2949
|
+
this.name = "MemoryAcquireDuplicateClaimError";
|
|
2950
|
+
}
|
|
2951
|
+
};
|
|
2937
2952
|
encoder = new TextEncoder();
|
|
2938
2953
|
serializedBytes = /* @__PURE__ */ __name((value) => {
|
|
2939
2954
|
const json = JSON.stringify(value);
|
|
@@ -5614,6 +5629,267 @@ var init_user_identity = __esm({
|
|
|
5614
5629
|
}
|
|
5615
5630
|
});
|
|
5616
5631
|
|
|
5632
|
+
// core/knowledge/user-language.ts
|
|
5633
|
+
var user_language_exports = {};
|
|
5634
|
+
__export(user_language_exports, {
|
|
5635
|
+
DEFAULT_LANGUAGE: () => DEFAULT_LANGUAGE,
|
|
5636
|
+
DEFAULT_RESPONSE_LANGUAGE: () => DEFAULT_RESPONSE_LANGUAGE,
|
|
5637
|
+
DEFAULT_USER_LANGUAGE: () => DEFAULT_USER_LANGUAGE,
|
|
5638
|
+
LANGUAGE_DEFAULT: () => LANGUAGE_DEFAULT,
|
|
5639
|
+
LANGUAGE_PREFERENCE_FILE_NAME: () => LANGUAGE_PREFERENCE_FILE_NAME,
|
|
5640
|
+
PREFERENCES_FILE_NAME: () => PREFERENCES_FILE_NAME,
|
|
5641
|
+
USER_LANGUAGE_DEFAULT: () => USER_LANGUAGE_DEFAULT,
|
|
5642
|
+
USER_LANGUAGE_FILE_NAME: () => USER_LANGUAGE_FILE_NAME,
|
|
5643
|
+
USER_LANGUAGE_PREFERENCE_FILE_NAME: () => USER_LANGUAGE_PREFERENCE_FILE_NAME,
|
|
5644
|
+
USER_PREFERENCES_FILE_NAME: () => USER_PREFERENCES_FILE_NAME,
|
|
5645
|
+
getLanguagePreference: () => getLanguagePreference,
|
|
5646
|
+
getResponseLanguage: () => getResponseLanguage,
|
|
5647
|
+
getUserLanguage: () => getUserLanguage,
|
|
5648
|
+
getUserLanguagePreference: () => getUserLanguagePreference,
|
|
5649
|
+
isItalian: () => isItalian,
|
|
5650
|
+
language: () => language,
|
|
5651
|
+
languageTag: () => languageTag,
|
|
5652
|
+
loadLanguagePreference: () => loadLanguagePreference,
|
|
5653
|
+
loadUserLanguage: () => loadUserLanguage,
|
|
5654
|
+
loadUserLanguagePreference: () => loadUserLanguagePreference,
|
|
5655
|
+
preferredLanguage: () => preferredLanguage,
|
|
5656
|
+
readUserLanguage: () => readUserLanguage,
|
|
5657
|
+
resolveLanguage: () => resolveLanguage,
|
|
5658
|
+
resolveLanguagePath: () => resolveLanguagePath,
|
|
5659
|
+
resolveLanguagePreference: () => resolveLanguagePreference,
|
|
5660
|
+
resolveLanguagePreferencePath: () => resolveLanguagePreferencePath,
|
|
5661
|
+
resolveResponseLanguage: () => resolveResponseLanguage,
|
|
5662
|
+
resolveUserLanguage: () => resolveUserLanguage,
|
|
5663
|
+
resolveUserLanguagePath: () => resolveUserLanguagePath,
|
|
5664
|
+
resolveUserLanguagePreferencePath: () => resolveUserLanguagePreferencePath,
|
|
5665
|
+
responseLanguage: () => responseLanguage,
|
|
5666
|
+
saveLanguagePreference: () => saveLanguagePreference,
|
|
5667
|
+
saveUserLanguage: () => saveUserLanguage,
|
|
5668
|
+
setUserLanguage: () => setUserLanguage,
|
|
5669
|
+
userLanguage: () => userLanguage,
|
|
5670
|
+
writeUserLanguage: () => writeUserLanguage
|
|
5671
|
+
});
|
|
5672
|
+
function joinPath3(base, child) {
|
|
5673
|
+
const separator3 = process.platform === "win32" ? "\\" : "/";
|
|
5674
|
+
return `${base.replace(/[\\/]+/g, separator3)}${separator3}${child}`;
|
|
5675
|
+
}
|
|
5676
|
+
function resolveUserLanguagePath() {
|
|
5677
|
+
return joinPath3(resolveUserDotMemPath(), USER_LANGUAGE_FILE_NAME);
|
|
5678
|
+
}
|
|
5679
|
+
function resolveUserLanguagePreferencePath() {
|
|
5680
|
+
return resolveUserLanguagePath();
|
|
5681
|
+
}
|
|
5682
|
+
function resolveLanguagePath() {
|
|
5683
|
+
return resolveUserLanguagePath();
|
|
5684
|
+
}
|
|
5685
|
+
function resolveLanguagePreferencePath() {
|
|
5686
|
+
return resolveUserLanguagePath();
|
|
5687
|
+
}
|
|
5688
|
+
function readJsonFile(path) {
|
|
5689
|
+
const fs = getSyncFs();
|
|
5690
|
+
if (!fs) return null;
|
|
5691
|
+
let raw;
|
|
5692
|
+
try {
|
|
5693
|
+
raw = fs.readFileSync(path, "utf8");
|
|
5694
|
+
} catch {
|
|
5695
|
+
return null;
|
|
5696
|
+
}
|
|
5697
|
+
if (typeof raw !== "string") return null;
|
|
5698
|
+
if (raw.charCodeAt(0) === 65279) raw = raw.slice(1);
|
|
5699
|
+
try {
|
|
5700
|
+
return JSON.parse(raw);
|
|
5701
|
+
} catch {
|
|
5702
|
+
return null;
|
|
5703
|
+
}
|
|
5704
|
+
}
|
|
5705
|
+
function extractLanguage(value) {
|
|
5706
|
+
if (value === null || value === void 0) return null;
|
|
5707
|
+
if (typeof value === "string") {
|
|
5708
|
+
const trimmed = value.trim();
|
|
5709
|
+
return trimmed ? trimmed : null;
|
|
5710
|
+
}
|
|
5711
|
+
if (typeof value !== "object" || Array.isArray(value)) return null;
|
|
5712
|
+
for (const key of LANGUAGE_KEYS) {
|
|
5713
|
+
if (Object.prototype.hasOwnProperty.call(value, key)) {
|
|
5714
|
+
const candidate = extractLanguage(value[key]);
|
|
5715
|
+
if (candidate) return candidate;
|
|
5716
|
+
}
|
|
5717
|
+
}
|
|
5718
|
+
for (const containerKey of ["preferences", "user", "agent", "config", "settings", "storage"]) {
|
|
5719
|
+
if (Object.prototype.hasOwnProperty.call(value, containerKey)) {
|
|
5720
|
+
const candidate = extractLanguage(value[containerKey]);
|
|
5721
|
+
if (candidate) return candidate;
|
|
5722
|
+
}
|
|
5723
|
+
}
|
|
5724
|
+
return null;
|
|
5725
|
+
}
|
|
5726
|
+
function loadUserLanguage() {
|
|
5727
|
+
const fs = getSyncFs();
|
|
5728
|
+
const anchor = resolveUserDotMemPath();
|
|
5729
|
+
if (fs) {
|
|
5730
|
+
for (const name of LANGUAGE_FILE_NAMES) {
|
|
5731
|
+
const candidatePath = joinPath3(anchor, name);
|
|
5732
|
+
const parsed = readJsonFile(candidatePath);
|
|
5733
|
+
const language2 = extractLanguage(parsed);
|
|
5734
|
+
if (language2) return language2;
|
|
5735
|
+
}
|
|
5736
|
+
try {
|
|
5737
|
+
const govPath = joinPath3(joinPath3(anchor, "policy"), "identity-governance.json");
|
|
5738
|
+
const gov = readJsonFile(govPath);
|
|
5739
|
+
const language2 = extractLanguage(gov);
|
|
5740
|
+
if (language2) return language2;
|
|
5741
|
+
} catch {
|
|
5742
|
+
}
|
|
5743
|
+
try {
|
|
5744
|
+
const settingsPath = joinPath3(anchor, "dotmem.settings.json");
|
|
5745
|
+
const settings = readJsonFile(settingsPath);
|
|
5746
|
+
const language2 = extractLanguage(settings);
|
|
5747
|
+
if (language2) return language2;
|
|
5748
|
+
} catch {
|
|
5749
|
+
}
|
|
5750
|
+
}
|
|
5751
|
+
const env = globalThis?.process?.env;
|
|
5752
|
+
const envLang = env?.DOTMEM_LANGUAGE || env?.DOTMEM_RESPONSE_LANGUAGE || env?.DOTMEM_USER_LANGUAGE;
|
|
5753
|
+
if (typeof envLang === "string" && envLang.trim()) return envLang.trim();
|
|
5754
|
+
return DEFAULT_USER_LANGUAGE;
|
|
5755
|
+
}
|
|
5756
|
+
function readUserLanguage() {
|
|
5757
|
+
return loadUserLanguage();
|
|
5758
|
+
}
|
|
5759
|
+
function getUserLanguage() {
|
|
5760
|
+
return loadUserLanguage();
|
|
5761
|
+
}
|
|
5762
|
+
function resolveUserLanguage() {
|
|
5763
|
+
return loadUserLanguage();
|
|
5764
|
+
}
|
|
5765
|
+
function resolveLanguage() {
|
|
5766
|
+
return loadUserLanguage();
|
|
5767
|
+
}
|
|
5768
|
+
function loadLanguagePreference() {
|
|
5769
|
+
return loadUserLanguage();
|
|
5770
|
+
}
|
|
5771
|
+
function getLanguagePreference() {
|
|
5772
|
+
return loadUserLanguage();
|
|
5773
|
+
}
|
|
5774
|
+
function resolveLanguagePreference() {
|
|
5775
|
+
return loadUserLanguage();
|
|
5776
|
+
}
|
|
5777
|
+
function loadUserLanguagePreference() {
|
|
5778
|
+
return loadUserLanguage();
|
|
5779
|
+
}
|
|
5780
|
+
function getUserLanguagePreference() {
|
|
5781
|
+
return loadUserLanguage();
|
|
5782
|
+
}
|
|
5783
|
+
function resolveResponseLanguage() {
|
|
5784
|
+
return loadUserLanguage();
|
|
5785
|
+
}
|
|
5786
|
+
function getResponseLanguage() {
|
|
5787
|
+
return loadUserLanguage();
|
|
5788
|
+
}
|
|
5789
|
+
async function setUserLanguage(language2) {
|
|
5790
|
+
const fsMod = await import('fs/promises');
|
|
5791
|
+
const path = resolveUserLanguagePath();
|
|
5792
|
+
const dir = parentStoragePath(path);
|
|
5793
|
+
await fsMod.mkdir(dir, { recursive: true });
|
|
5794
|
+
const payload = { format: "dotmem.language", version: 1, language: String(language2).trim() };
|
|
5795
|
+
const temporary = `${path}.${process.pid}.${Date.now().toString(36)}.tmp`;
|
|
5796
|
+
await fsMod.writeFile(temporary, `${JSON.stringify(payload, null, 2)}
|
|
5797
|
+
`, "utf8");
|
|
5798
|
+
await fsMod.rename(temporary, path);
|
|
5799
|
+
return payload.language;
|
|
5800
|
+
}
|
|
5801
|
+
async function saveUserLanguage(language2) {
|
|
5802
|
+
return setUserLanguage(language2);
|
|
5803
|
+
}
|
|
5804
|
+
async function writeUserLanguage(language2) {
|
|
5805
|
+
return setUserLanguage(language2);
|
|
5806
|
+
}
|
|
5807
|
+
async function saveLanguagePreference(language2) {
|
|
5808
|
+
return setUserLanguage(language2);
|
|
5809
|
+
}
|
|
5810
|
+
function isItalian(language2) {
|
|
5811
|
+
const value = (language2 ?? loadUserLanguage()).toLowerCase();
|
|
5812
|
+
return value === "it" || value === "it-it" || value.startsWith("it-");
|
|
5813
|
+
}
|
|
5814
|
+
function languageTag() {
|
|
5815
|
+
return loadUserLanguage();
|
|
5816
|
+
}
|
|
5817
|
+
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;
|
|
5818
|
+
var init_user_language = __esm({
|
|
5819
|
+
"core/knowledge/user-language.ts"() {
|
|
5820
|
+
init_user_paths();
|
|
5821
|
+
init_storage_paths();
|
|
5822
|
+
USER_LANGUAGE_FILE_NAME = "language.json";
|
|
5823
|
+
USER_LANGUAGE_PREFERENCE_FILE_NAME = "user-language.json";
|
|
5824
|
+
LANGUAGE_PREFERENCE_FILE_NAME = "language-preference.json";
|
|
5825
|
+
USER_PREFERENCES_FILE_NAME = "user-preferences.json";
|
|
5826
|
+
PREFERENCES_FILE_NAME = "preferences.json";
|
|
5827
|
+
DEFAULT_USER_LANGUAGE = "it-IT";
|
|
5828
|
+
DEFAULT_LANGUAGE = "it-IT";
|
|
5829
|
+
USER_LANGUAGE_DEFAULT = "it-IT";
|
|
5830
|
+
LANGUAGE_DEFAULT = "it-IT";
|
|
5831
|
+
DEFAULT_RESPONSE_LANGUAGE = "it-IT";
|
|
5832
|
+
LANGUAGE_FILE_NAMES = [
|
|
5833
|
+
USER_LANGUAGE_FILE_NAME,
|
|
5834
|
+
USER_LANGUAGE_PREFERENCE_FILE_NAME,
|
|
5835
|
+
LANGUAGE_PREFERENCE_FILE_NAME,
|
|
5836
|
+
USER_PREFERENCES_FILE_NAME,
|
|
5837
|
+
PREFERENCES_FILE_NAME,
|
|
5838
|
+
"config.json",
|
|
5839
|
+
"user-config.json",
|
|
5840
|
+
"agent-config.json",
|
|
5841
|
+
"dotmem.config.json"
|
|
5842
|
+
];
|
|
5843
|
+
LANGUAGE_KEYS = [
|
|
5844
|
+
"language",
|
|
5845
|
+
"Language",
|
|
5846
|
+
"responseLanguage",
|
|
5847
|
+
"response_language",
|
|
5848
|
+
"preferredLanguage",
|
|
5849
|
+
"preferred_language",
|
|
5850
|
+
"userLanguage",
|
|
5851
|
+
"user_language",
|
|
5852
|
+
"defaultLanguage",
|
|
5853
|
+
"default_language",
|
|
5854
|
+
"locale",
|
|
5855
|
+
"lang",
|
|
5856
|
+
"uiLanguage",
|
|
5857
|
+
"ui_language",
|
|
5858
|
+
"conversationLanguage",
|
|
5859
|
+
"conversation_language"
|
|
5860
|
+
];
|
|
5861
|
+
__name(joinPath3, "joinPath");
|
|
5862
|
+
__name(resolveUserLanguagePath, "resolveUserLanguagePath");
|
|
5863
|
+
__name(resolveUserLanguagePreferencePath, "resolveUserLanguagePreferencePath");
|
|
5864
|
+
__name(resolveLanguagePath, "resolveLanguagePath");
|
|
5865
|
+
__name(resolveLanguagePreferencePath, "resolveLanguagePreferencePath");
|
|
5866
|
+
__name(readJsonFile, "readJsonFile");
|
|
5867
|
+
__name(extractLanguage, "extractLanguage");
|
|
5868
|
+
__name(loadUserLanguage, "loadUserLanguage");
|
|
5869
|
+
__name(readUserLanguage, "readUserLanguage");
|
|
5870
|
+
__name(getUserLanguage, "getUserLanguage");
|
|
5871
|
+
__name(resolveUserLanguage, "resolveUserLanguage");
|
|
5872
|
+
__name(resolveLanguage, "resolveLanguage");
|
|
5873
|
+
__name(loadLanguagePreference, "loadLanguagePreference");
|
|
5874
|
+
__name(getLanguagePreference, "getLanguagePreference");
|
|
5875
|
+
__name(resolveLanguagePreference, "resolveLanguagePreference");
|
|
5876
|
+
__name(loadUserLanguagePreference, "loadUserLanguagePreference");
|
|
5877
|
+
__name(getUserLanguagePreference, "getUserLanguagePreference");
|
|
5878
|
+
__name(resolveResponseLanguage, "resolveResponseLanguage");
|
|
5879
|
+
__name(getResponseLanguage, "getResponseLanguage");
|
|
5880
|
+
__name(setUserLanguage, "setUserLanguage");
|
|
5881
|
+
__name(saveUserLanguage, "saveUserLanguage");
|
|
5882
|
+
__name(writeUserLanguage, "writeUserLanguage");
|
|
5883
|
+
__name(saveLanguagePreference, "saveLanguagePreference");
|
|
5884
|
+
__name(isItalian, "isItalian");
|
|
5885
|
+
__name(languageTag, "languageTag");
|
|
5886
|
+
userLanguage = loadUserLanguage();
|
|
5887
|
+
language = loadUserLanguage();
|
|
5888
|
+
responseLanguage = loadUserLanguage();
|
|
5889
|
+
preferredLanguage = loadUserLanguage();
|
|
5890
|
+
}
|
|
5891
|
+
});
|
|
5892
|
+
|
|
5617
5893
|
// core/profile/ai.json
|
|
5618
5894
|
var ai_default;
|
|
5619
5895
|
var init_ai = __esm({
|
|
@@ -6022,6 +6298,45 @@ var init_project_identity = __esm({
|
|
|
6022
6298
|
}
|
|
6023
6299
|
});
|
|
6024
6300
|
|
|
6301
|
+
// core/knowledge/uuid.ts
|
|
6302
|
+
var generateUuidV7;
|
|
6303
|
+
var init_uuid = __esm({
|
|
6304
|
+
"core/knowledge/uuid.ts"() {
|
|
6305
|
+
generateUuidV7 = /* @__PURE__ */ __name(() => {
|
|
6306
|
+
const cryptoObj = globalThis.crypto;
|
|
6307
|
+
const ms = Date.now();
|
|
6308
|
+
const rand = new Uint8Array(10);
|
|
6309
|
+
if (cryptoObj && typeof cryptoObj.getRandomValues === "function") {
|
|
6310
|
+
cryptoObj.getRandomValues(rand);
|
|
6311
|
+
} else {
|
|
6312
|
+
for (let i2 = 0; i2 < rand.length; i2 += 1) {
|
|
6313
|
+
rand[i2] = Math.floor(Math.random() * 256);
|
|
6314
|
+
}
|
|
6315
|
+
}
|
|
6316
|
+
const bytes = new Uint8Array(16);
|
|
6317
|
+
bytes[0] = ms / 1099511627776 & 255;
|
|
6318
|
+
bytes[1] = ms / 4294967296 & 255;
|
|
6319
|
+
bytes[2] = ms / 16777216 & 255;
|
|
6320
|
+
bytes[3] = ms / 65536 & 255;
|
|
6321
|
+
bytes[4] = ms / 256 & 255;
|
|
6322
|
+
bytes[5] = ms & 255;
|
|
6323
|
+
const randA = (rand[0] << 8 | rand[1]) & 4095;
|
|
6324
|
+
bytes[6] = 112 | randA >> 8;
|
|
6325
|
+
bytes[7] = randA & 255;
|
|
6326
|
+
bytes[8] = 128 | rand[2] & 63;
|
|
6327
|
+
bytes[9] = rand[3];
|
|
6328
|
+
bytes[10] = rand[4];
|
|
6329
|
+
bytes[11] = rand[5];
|
|
6330
|
+
bytes[12] = rand[6];
|
|
6331
|
+
bytes[13] = rand[7];
|
|
6332
|
+
bytes[14] = rand[8];
|
|
6333
|
+
bytes[15] = rand[9];
|
|
6334
|
+
const hex = Array.from(bytes).map((byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
6335
|
+
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
|
|
6336
|
+
}, "generateUuidV7");
|
|
6337
|
+
}
|
|
6338
|
+
});
|
|
6339
|
+
|
|
6025
6340
|
// core/knowledge/staging.ts
|
|
6026
6341
|
var DOTMEM_STAGE_FORMAT, DOTMEM_STAGE_VERSION, StageFileError, generateRequestId, nodeCwd, resolveStagingDirectory, stagePathFor, nodeFs6, normalizeClaimIds, revisionFromOptions, writeStageFile, readStageFile, validateStageFile, commitStageFile, cleanupStageFile;
|
|
6027
6342
|
var init_staging = __esm({
|
|
@@ -6033,6 +6348,7 @@ var init_staging = __esm({
|
|
|
6033
6348
|
init_store_queue();
|
|
6034
6349
|
init_state();
|
|
6035
6350
|
init_project_identity();
|
|
6351
|
+
init_uuid();
|
|
6036
6352
|
init_project_anchor();
|
|
6037
6353
|
DOTMEM_STAGE_FORMAT = "dotmem.stage";
|
|
6038
6354
|
DOTMEM_STAGE_VERSION = 1;
|
|
@@ -6076,9 +6392,11 @@ var init_staging = __esm({
|
|
|
6076
6392
|
return void 0;
|
|
6077
6393
|
}, "revisionFromOptions");
|
|
6078
6394
|
writeStageFile = /* @__PURE__ */ __name(async (claim, scope, sourceProject) => {
|
|
6395
|
+
const claimId = claim.id && claim.id.trim() ? claim.id.trim() : generateUuidV7();
|
|
6079
6396
|
const sanitized = sanitizeKnowledge(claim.knowledge);
|
|
6080
6397
|
const sanitizedClaim = {
|
|
6081
6398
|
...claim,
|
|
6399
|
+
id: claimId,
|
|
6082
6400
|
knowledge: sanitized.knowledge
|
|
6083
6401
|
};
|
|
6084
6402
|
const requestId = generateRequestId();
|
|
@@ -6176,11 +6494,12 @@ var init_staging = __esm({
|
|
|
6176
6494
|
...validated.claim,
|
|
6177
6495
|
knowledge: boundary.knowledge
|
|
6178
6496
|
};
|
|
6497
|
+
const claimId = sanitizedClaim.id && sanitizedClaim.id.trim() ? sanitizedClaim.id.trim() : generateUuidV7();
|
|
6179
6498
|
const kind = boundary.kind ?? "experience";
|
|
6180
6499
|
const target = await resolveMemoryTarget(kind, scope, sourceProject);
|
|
6181
6500
|
const revision = revisionFromOptions(sanitizedClaim);
|
|
6182
6501
|
const claim = buildClaimRecord({
|
|
6183
|
-
id:
|
|
6502
|
+
id: claimId,
|
|
6184
6503
|
knowledge: sanitizedClaim.knowledge,
|
|
6185
6504
|
applicability: sanitizedClaim.applicability,
|
|
6186
6505
|
evidence: sanitizedClaim.evidence,
|
|
@@ -6200,13 +6519,13 @@ var init_staging = __esm({
|
|
|
6200
6519
|
});
|
|
6201
6520
|
});
|
|
6202
6521
|
const verification = await target.repository.load();
|
|
6203
|
-
if (!verification.claims.some((c) => c.id ===
|
|
6204
|
-
throw new Error(`Persistence verification failed: claim ${
|
|
6522
|
+
if (!verification.claims.some((c) => c.id === claimId)) {
|
|
6523
|
+
throw new Error(`Persistence verification failed: claim ${claimId} was not persisted`);
|
|
6205
6524
|
}
|
|
6206
6525
|
await cleanupStageFile(requestId);
|
|
6207
6526
|
return {
|
|
6208
6527
|
requestId,
|
|
6209
|
-
claimId
|
|
6528
|
+
claimId,
|
|
6210
6529
|
sourceId: target.sourceId,
|
|
6211
6530
|
scope,
|
|
6212
6531
|
kind
|
|
@@ -6227,12 +6546,12 @@ var init_staging = __esm({
|
|
|
6227
6546
|
});
|
|
6228
6547
|
|
|
6229
6548
|
// core/knowledge/loops.ts
|
|
6230
|
-
function
|
|
6549
|
+
function joinPath4(base, child) {
|
|
6231
6550
|
const separator3 = process.platform === "win32" ? "\\" : "/";
|
|
6232
6551
|
return `${base.replace(/[\\/]+/g, separator3)}${separator3}${child}`;
|
|
6233
6552
|
}
|
|
6234
6553
|
function resolveLoopsFilePath() {
|
|
6235
|
-
return
|
|
6554
|
+
return joinPath4(resolveUserDotMemPath(), LOOPS_FILE_NAME);
|
|
6236
6555
|
}
|
|
6237
6556
|
async function readFile(path) {
|
|
6238
6557
|
try {
|
|
@@ -6364,7 +6683,7 @@ var init_loops = __esm({
|
|
|
6364
6683
|
init_user_paths();
|
|
6365
6684
|
LOOPS_FILE_NAME = "loops.json";
|
|
6366
6685
|
LOOPS_FORMAT_VERSION = 1;
|
|
6367
|
-
__name(
|
|
6686
|
+
__name(joinPath4, "joinPath");
|
|
6368
6687
|
__name(resolveLoopsFilePath, "resolveLoopsFilePath");
|
|
6369
6688
|
__name(readFile, "readFile");
|
|
6370
6689
|
__name(writeFile, "writeFile");
|
|
@@ -6453,12 +6772,12 @@ var init_violations = __esm({
|
|
|
6453
6772
|
});
|
|
6454
6773
|
|
|
6455
6774
|
// core/knowledge/session.ts
|
|
6456
|
-
function
|
|
6775
|
+
function joinPath5(base, child) {
|
|
6457
6776
|
const separator3 = process.platform === "win32" ? "\\" : "/";
|
|
6458
6777
|
return `${base.replace(/[\\/]+/g, separator3)}${separator3}${child}`;
|
|
6459
6778
|
}
|
|
6460
6779
|
function resolveSessionFilePath() {
|
|
6461
|
-
return
|
|
6780
|
+
return joinPath5(resolveUserDotMemPath(), SESSION_FILE_NAME);
|
|
6462
6781
|
}
|
|
6463
6782
|
async function readFile2(path) {
|
|
6464
6783
|
try {
|
|
@@ -6491,7 +6810,7 @@ var init_session = __esm({
|
|
|
6491
6810
|
"core/knowledge/session.ts"() {
|
|
6492
6811
|
init_user_paths();
|
|
6493
6812
|
SESSION_FILE_NAME = "session.json";
|
|
6494
|
-
__name(
|
|
6813
|
+
__name(joinPath5, "joinPath");
|
|
6495
6814
|
__name(resolveSessionFilePath, "resolveSessionFilePath");
|
|
6496
6815
|
__name(readFile2, "readFile");
|
|
6497
6816
|
DEFAULT_SESSION = {
|
|
@@ -6506,12 +6825,12 @@ var init_session = __esm({
|
|
|
6506
6825
|
});
|
|
6507
6826
|
|
|
6508
6827
|
// core/knowledge/exemplars.ts
|
|
6509
|
-
function
|
|
6828
|
+
function joinPath6(base, child) {
|
|
6510
6829
|
const separator3 = process.platform === "win32" ? "\\" : "/";
|
|
6511
6830
|
return `${base.replace(/[\\/]+/g, separator3)}${separator3}${child}`;
|
|
6512
6831
|
}
|
|
6513
6832
|
function resolveExemplarsPath() {
|
|
6514
|
-
return
|
|
6833
|
+
return joinPath6(resolveUserDotMemPath(), EXEMPLARS_FILE_NAME);
|
|
6515
6834
|
}
|
|
6516
6835
|
async function readFile3(path) {
|
|
6517
6836
|
try {
|
|
@@ -6648,7 +6967,7 @@ var init_exemplars = __esm({
|
|
|
6648
6967
|
init_user_paths();
|
|
6649
6968
|
EXEMPLARS_FILE_NAME = "exemplars.json";
|
|
6650
6969
|
EXEMPLARS_FORMAT_VERSION = 1;
|
|
6651
|
-
__name(
|
|
6970
|
+
__name(joinPath6, "joinPath");
|
|
6652
6971
|
__name(resolveExemplarsPath, "resolveExemplarsPath");
|
|
6653
6972
|
__name(readFile3, "readFile");
|
|
6654
6973
|
__name(writeFile2, "writeFile");
|
|
@@ -6663,12 +6982,12 @@ var init_exemplars = __esm({
|
|
|
6663
6982
|
});
|
|
6664
6983
|
|
|
6665
6984
|
// core/knowledge/personality-anchor.ts
|
|
6666
|
-
function
|
|
6985
|
+
function joinPath7(base, child) {
|
|
6667
6986
|
const separator3 = process.platform === "win32" ? "\\" : "/";
|
|
6668
6987
|
return `${base.replace(/[\\/]+/g, separator3)}${separator3}${child}`;
|
|
6669
6988
|
}
|
|
6670
6989
|
function resolvePersonalityAnchorPath() {
|
|
6671
|
-
return
|
|
6990
|
+
return joinPath7(resolveUserDotMemPath(), PERSONALITY_ANCHOR_FILE_NAME);
|
|
6672
6991
|
}
|
|
6673
6992
|
async function readFile4(path) {
|
|
6674
6993
|
try {
|
|
@@ -6856,7 +7175,7 @@ var init_personality_anchor = __esm({
|
|
|
6856
7175
|
init_user_paths();
|
|
6857
7176
|
PERSONALITY_ANCHOR_FILE_NAME = "personality-anchor.json";
|
|
6858
7177
|
PERSONALITY_ANCHOR_FORMAT_VERSION = 1;
|
|
6859
|
-
__name(
|
|
7178
|
+
__name(joinPath7, "joinPath");
|
|
6860
7179
|
__name(resolvePersonalityAnchorPath, "resolvePersonalityAnchorPath");
|
|
6861
7180
|
__name(readFile4, "readFile");
|
|
6862
7181
|
__name(writeFile3, "writeFile");
|
|
@@ -6899,6 +7218,7 @@ var init_knowledge = __esm({
|
|
|
6899
7218
|
init_storage_location();
|
|
6900
7219
|
init_storage_settings();
|
|
6901
7220
|
init_user_identity();
|
|
7221
|
+
init_user_language();
|
|
6902
7222
|
init_identity_resolution();
|
|
6903
7223
|
init_identity_governance();
|
|
6904
7224
|
init_effective_contract();
|
|
@@ -8711,6 +9031,8 @@ init_router();
|
|
|
8711
9031
|
init_store_queue();
|
|
8712
9032
|
init_staging();
|
|
8713
9033
|
init_user_paths();
|
|
9034
|
+
init_uuid();
|
|
9035
|
+
init_acquisition_limits();
|
|
8714
9036
|
init_storage_coordinator();
|
|
8715
9037
|
init_mem_repository();
|
|
8716
9038
|
function normalizeClaimIds3(value) {
|
|
@@ -8761,9 +9083,10 @@ async function findClaimAcrossAllSources(claimId, scope, sourceProject) {
|
|
|
8761
9083
|
__name(findClaimAcrossAllSources, "findClaimAcrossAllSources");
|
|
8762
9084
|
var acquire = {
|
|
8763
9085
|
async acquire(opts) {
|
|
9086
|
+
const claimId = opts.id && opts.id.trim() ? opts.id.trim() : generateUuidV7();
|
|
8764
9087
|
if (opts.scope === void 0 && opts.applicability?.scope !== void 0) {
|
|
8765
9088
|
throw new Error(
|
|
8766
|
-
`Claim ${
|
|
9089
|
+
`Claim ${claimId} uses applicability.scope for routing. Use top-level scope instead.`
|
|
8767
9090
|
);
|
|
8768
9091
|
}
|
|
8769
9092
|
const scope = opts.scope ?? "project";
|
|
@@ -8774,19 +9097,18 @@ var acquire = {
|
|
|
8774
9097
|
}
|
|
8775
9098
|
const boundary = await crossAcquisitionBoundary(opts);
|
|
8776
9099
|
if (boundary.sanitized && DEV) {
|
|
8777
|
-
console.warn(`[dotmem] Sanitized secret values from claim ${
|
|
9100
|
+
console.warn(`[dotmem] Sanitized secret values from claim ${claimId}`);
|
|
8778
9101
|
}
|
|
8779
9102
|
if (boundary.removedTierFields > 0 && DEV) {
|
|
8780
|
-
console.warn(`[dotmem] Removed ${boundary.removedTierFields} non-authoritative tier field(s) from claim ${
|
|
9103
|
+
console.warn(`[dotmem] Removed ${boundary.removedTierFields} non-authoritative tier field(s) from claim ${claimId}`);
|
|
8781
9104
|
}
|
|
8782
9105
|
const kind = boundary.kind;
|
|
8783
9106
|
const target = await resolveMemoryTarget(kind, scope, sourceProject);
|
|
8784
|
-
const existing = await findClaimAcrossAllSources(
|
|
9107
|
+
const existing = await findClaimAcrossAllSources(claimId, scope, sourceProject);
|
|
8785
9108
|
if (existing) {
|
|
8786
9109
|
const acquiredAt = existing.acquiredAt ? ` (acquired ${existing.acquiredAt})` : "";
|
|
8787
|
-
|
|
8788
|
-
|
|
8789
|
-
);
|
|
9110
|
+
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.`;
|
|
9111
|
+
throw new MemoryAcquireDuplicateClaimError("A claim with this ID already exists.", { cause: new Error(detail) });
|
|
8790
9112
|
}
|
|
8791
9113
|
const revision = revisionFromAcquire2(opts);
|
|
8792
9114
|
const repository = target.repository;
|
|
@@ -8796,7 +9118,7 @@ var acquire = {
|
|
|
8796
9118
|
const next = updateKnowledge(state3, {
|
|
8797
9119
|
basedOnVersion: state3.version,
|
|
8798
9120
|
claims: [buildClaimRecord({
|
|
8799
|
-
id:
|
|
9121
|
+
id: claimId,
|
|
8800
9122
|
knowledge: boundary.knowledge,
|
|
8801
9123
|
applicability: opts.applicability,
|
|
8802
9124
|
evidence: opts.evidence,
|
|
@@ -8813,10 +9135,11 @@ var acquire = {
|
|
|
8813
9135
|
});
|
|
8814
9136
|
});
|
|
8815
9137
|
const verification = await target.repository.load();
|
|
8816
|
-
if (!verification.claims.some((claim) => claim.id ===
|
|
8817
|
-
throw new Error(`Acquisition verification failed: claim ${
|
|
9138
|
+
if (!verification.claims.some((claim) => claim.id === claimId)) {
|
|
9139
|
+
throw new Error(`Acquisition verification failed: claim ${claimId} was not persisted`);
|
|
8818
9140
|
}
|
|
8819
|
-
dispatch.set("dotmem:memory:acquired", { detail: { id:
|
|
9141
|
+
dispatch.set("dotmem:memory:acquired", { detail: { id: claimId } });
|
|
9142
|
+
return claimId;
|
|
8820
9143
|
},
|
|
8821
9144
|
async acquireStaged(opts) {
|
|
8822
9145
|
const scope = opts.scope ?? "project";
|
|
@@ -8824,7 +9147,8 @@ var acquire = {
|
|
|
8824
9147
|
const sourceProject = resolvedProjectId ? normalizeProjectId(resolvedProjectId) : void 0;
|
|
8825
9148
|
const { requestId } = await writeStageFile(opts, scope, sourceProject);
|
|
8826
9149
|
try {
|
|
8827
|
-
await commitStageFile(requestId);
|
|
9150
|
+
const result = await commitStageFile(requestId);
|
|
9151
|
+
return result.claimId;
|
|
8828
9152
|
} catch (error) {
|
|
8829
9153
|
if (error instanceof StageFileError) {
|
|
8830
9154
|
await cleanupStageFile(requestId);
|
|
@@ -10037,6 +10361,17 @@ var memory = {
|
|
|
10037
10361
|
return profile.get(id);
|
|
10038
10362
|
}
|
|
10039
10363
|
},
|
|
10364
|
+
/** Persistent default response language (canonical user config). */
|
|
10365
|
+
language: {
|
|
10366
|
+
async get() {
|
|
10367
|
+
const m = await Promise.resolve().then(() => (init_user_language(), user_language_exports));
|
|
10368
|
+
return m.resolveUserLanguage();
|
|
10369
|
+
},
|
|
10370
|
+
async set(value) {
|
|
10371
|
+
const m = await Promise.resolve().then(() => (init_user_language(), user_language_exports));
|
|
10372
|
+
return m.setUserLanguage(value);
|
|
10373
|
+
}
|
|
10374
|
+
},
|
|
10040
10375
|
/** Note surface: store and retrieve markdown files and text blocks. */
|
|
10041
10376
|
note: {
|
|
10042
10377
|
async add(opts) {
|
|
@@ -12636,12 +12971,12 @@ var GovernancePolicyError = class extends Error {
|
|
|
12636
12971
|
};
|
|
12637
12972
|
var requiredText3 = /* @__PURE__ */ __name((v) => typeof v === "string" && v.trim().length > 0, "requiredText");
|
|
12638
12973
|
var nowIso2 = /* @__PURE__ */ __name(() => (/* @__PURE__ */ new Date()).toISOString(), "nowIso");
|
|
12639
|
-
var
|
|
12974
|
+
var joinPath8 = /* @__PURE__ */ __name((base, child) => {
|
|
12640
12975
|
const sep = process.platform === "win32" ? "\\" : "/";
|
|
12641
12976
|
return `${base.replace(/[\\/]+/g, sep)}${sep}${child}`;
|
|
12642
12977
|
}, "joinPath");
|
|
12643
|
-
var resolveGovernanceDir = /* @__PURE__ */ __name((directory) => directory ??
|
|
12644
|
-
var resolveGovernanceFilePath = /* @__PURE__ */ __name((directory) =>
|
|
12978
|
+
var resolveGovernanceDir = /* @__PURE__ */ __name((directory) => directory ?? joinPath8(resolveUserDotMemPath(), "policy"), "resolveGovernanceDir");
|
|
12979
|
+
var resolveGovernanceFilePath = /* @__PURE__ */ __name((directory) => joinPath8(resolveGovernanceDir(directory), GOVERNANCE_FILE_NAME), "resolveGovernanceFilePath");
|
|
12645
12980
|
var ROLE_CAPABILITIES = {
|
|
12646
12981
|
"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"]),
|
|
12647
12982
|
"human-approver": /* @__PURE__ */ new Set(["policy.review", "policy.approve", "policy.reject", "governance.read", "governance.audit.read", "guardrail.stop.activate", "guardrail.stop.release"]),
|
|
@@ -13369,12 +13704,12 @@ var GuardrailError = class extends Error {
|
|
|
13369
13704
|
};
|
|
13370
13705
|
var requiredText4 = /* @__PURE__ */ __name((v) => typeof v === "string" && v.trim().length > 0, "requiredText");
|
|
13371
13706
|
var nowIso3 = /* @__PURE__ */ __name(() => (/* @__PURE__ */ new Date()).toISOString(), "nowIso");
|
|
13372
|
-
var
|
|
13707
|
+
var joinPath9 = /* @__PURE__ */ __name((base, child) => {
|
|
13373
13708
|
const sep = process.platform === "win32" ? "\\" : "/";
|
|
13374
13709
|
return `${base.replace(/[\\/]+/g, sep)}${sep}${child}`;
|
|
13375
13710
|
}, "joinPath");
|
|
13376
|
-
var resolveGuardrailDir = /* @__PURE__ */ __name((directory) => directory ??
|
|
13377
|
-
var resolveStopFilePath = /* @__PURE__ */ __name((directory) =>
|
|
13711
|
+
var resolveGuardrailDir = /* @__PURE__ */ __name((directory) => directory ?? joinPath9(resolveUserDotMemPath(), "policy"), "resolveGuardrailDir");
|
|
13712
|
+
var resolveStopFilePath = /* @__PURE__ */ __name((directory) => joinPath9(resolveGuardrailDir(directory), STOP_FILE_NAME), "resolveStopFilePath");
|
|
13378
13713
|
var ACTIONS_REQUIRING_TRUSTED_IDENTITY = /* @__PURE__ */ new Set([
|
|
13379
13714
|
"agent.execute",
|
|
13380
13715
|
"guardrail.stop.activate",
|
|
@@ -13841,7 +14176,7 @@ var EPITEMIC_STATUSES2 = [
|
|
|
13841
14176
|
|
|
13842
14177
|
// app.json
|
|
13843
14178
|
var app_default = {
|
|
13844
|
-
version: "0.1.
|
|
14179
|
+
version: "0.1.3"};
|
|
13845
14180
|
|
|
13846
14181
|
// index.ts
|
|
13847
14182
|
var dotmem = {
|