open-mem 0.14.0 → 0.14.2
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/CHANGELOG.md +6 -0
- package/README.md +58 -1
- package/dist/claude-code.js +88 -87
- package/dist/cursor.js +88 -87
- package/dist/daemon/manager.d.ts +33 -5
- package/dist/daemon/manager.d.ts.map +1 -1
- package/dist/daemon/pid.d.ts +23 -0
- package/dist/daemon/pid.d.ts.map +1 -1
- package/dist/daemon.js +35 -34
- package/dist/db/advisory-lock.d.ts +40 -0
- package/dist/db/advisory-lock.d.ts.map +1 -0
- package/dist/db/database.d.ts +37 -4
- package/dist/db/database.d.ts.map +1 -1
- package/dist/doctor.js +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +99 -98
- package/dist/maintenance.js +48 -45
- package/dist/mcp.js +72 -71
- package/dist/platform-worker.d.ts.map +1 -1
- package/dist/runtime/queue-runtime.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export type ProcessRole = "plugin" | "daemon" | "platform-worker-claude" | "platform-worker-cursor" | "maintenance";
|
|
2
|
+
export declare const DEFAULT_WRITE_LOCK_ROLE: ProcessRole;
|
|
3
|
+
interface LockOwnerMetadata {
|
|
4
|
+
pid: number;
|
|
5
|
+
role: ProcessRole;
|
|
6
|
+
hostname: string;
|
|
7
|
+
acquiredAt: string;
|
|
8
|
+
ownerId?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface WriteLockHandle {
|
|
11
|
+
lockPath: string;
|
|
12
|
+
role: ProcessRole;
|
|
13
|
+
waitDurationMs: number;
|
|
14
|
+
reentrant: boolean;
|
|
15
|
+
release: () => void;
|
|
16
|
+
}
|
|
17
|
+
export interface AcquireWriteLockOptions {
|
|
18
|
+
role: ProcessRole;
|
|
19
|
+
timeoutMs?: number;
|
|
20
|
+
retryIntervalMs?: number;
|
|
21
|
+
ownerId?: string;
|
|
22
|
+
now?: () => number;
|
|
23
|
+
}
|
|
24
|
+
export declare class AdvisoryLockTimeoutError extends Error {
|
|
25
|
+
readonly lockPath: string;
|
|
26
|
+
readonly role: ProcessRole;
|
|
27
|
+
readonly waitDurationMs: number;
|
|
28
|
+
readonly owner: LockOwnerMetadata | null;
|
|
29
|
+
constructor(params: {
|
|
30
|
+
lockPath: string;
|
|
31
|
+
role: ProcessRole;
|
|
32
|
+
waitDurationMs: number;
|
|
33
|
+
owner: LockOwnerMetadata | null;
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
export declare function getAdvisoryWriteLockPath(dbPath: string): string;
|
|
37
|
+
export declare function acquireWriteLock(lockPath: string, options: AcquireWriteLockOptions): WriteLockHandle;
|
|
38
|
+
export declare function withWriteLock<T>(lockPath: string, options: AcquireWriteLockOptions, operation: () => T): T;
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=advisory-lock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advisory-lock.d.ts","sourceRoot":"","sources":["../../src/db/advisory-lock.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,WAAW,GACpB,QAAQ,GACR,QAAQ,GACR,wBAAwB,GACxB,wBAAwB,GACxB,aAAa,CAAC;AAEjB,eAAO,MAAM,uBAAuB,EAAE,WAAsB,CAAC;AAE7D,UAAU,iBAAiB;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAOD,MAAM,WAAW,eAAe;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,WAAW,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACvC,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACnB;AAED,qBAAa,wBAAyB,SAAQ,KAAK;IAClD,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,IAAI,EAAE,WAAW,CAAC;IAClC,SAAgB,cAAc,EAAE,MAAM,CAAC;IACvC,SAAgB,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAAC;gBAEpC,MAAM,EAAE;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,WAAW,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;QACvB,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAAC;KAChC;CAUD;AA4FD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED,wBAAgB,gBAAgB,CAC/B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,uBAAuB,GAC9B,eAAe,CA4FjB;AAED,wBAAgB,aAAa,CAAC,CAAC,EAC9B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,uBAAuB,EAChC,SAAS,EAAE,MAAM,CAAC,GAChB,CAAC,CAOH"}
|
package/dist/db/database.d.ts
CHANGED
|
@@ -1,6 +1,22 @@
|
|
|
1
1
|
import { Database as BunDatabase, type SQLQueryBindings } from "bun:sqlite";
|
|
2
|
+
import { type AcquireWriteLockOptions, type ProcessRole } from "./advisory-lock";
|
|
2
3
|
/** Param array accepted by query helpers */
|
|
3
4
|
type Params = SQLQueryBindings[];
|
|
5
|
+
export interface DatabaseOptions {
|
|
6
|
+
processRole?: ProcessRole;
|
|
7
|
+
}
|
|
8
|
+
export type WalCheckpointMode = "PASSIVE" | "FULL" | "RESTART" | "TRUNCATE";
|
|
9
|
+
export interface WalCheckpointResult {
|
|
10
|
+
mode: WalCheckpointMode;
|
|
11
|
+
busy: number;
|
|
12
|
+
logFrames: number;
|
|
13
|
+
checkpointedFrames: number;
|
|
14
|
+
}
|
|
15
|
+
export interface IntegrityCheckResult {
|
|
16
|
+
ok: boolean;
|
|
17
|
+
messages: string[];
|
|
18
|
+
maxErrors: number;
|
|
19
|
+
}
|
|
4
20
|
/** A database migration with version, name, and SQL to apply. */
|
|
5
21
|
export interface Migration {
|
|
6
22
|
version: number;
|
|
@@ -15,22 +31,31 @@ export interface Migration {
|
|
|
15
31
|
export declare class Database {
|
|
16
32
|
private db;
|
|
17
33
|
private dbPath;
|
|
34
|
+
private advisoryWriteLockPath;
|
|
35
|
+
private processRole;
|
|
36
|
+
private transactionDepth;
|
|
18
37
|
private _hasVectorExtension;
|
|
19
38
|
static enableExtensionSupport(): boolean;
|
|
20
|
-
constructor(dbPath: string);
|
|
39
|
+
constructor(dbPath: string, options?: DatabaseOptions);
|
|
21
40
|
private open;
|
|
22
41
|
private configure;
|
|
42
|
+
private runConfigureStage;
|
|
43
|
+
private throwConfigureFailure;
|
|
23
44
|
private applyPragmas;
|
|
24
45
|
private loadExtensions;
|
|
25
46
|
get hasVectorExtension(): boolean;
|
|
26
|
-
private deleteSidecarFiles;
|
|
27
|
-
private deleteDatabaseFiles;
|
|
28
47
|
private ensureMigrationTable;
|
|
29
48
|
/**
|
|
30
49
|
* Run pending migrations in version order. Already-applied migrations
|
|
31
50
|
* are skipped. Each migration runs inside a transaction.
|
|
32
51
|
*/
|
|
33
52
|
migrate(migrations: Migration[]): void;
|
|
53
|
+
/**
|
|
54
|
+
* Retry a synchronous database operation with exponential backoff.
|
|
55
|
+
* Transient errors (SQLITE_BUSY, SQLITE_IOERR_VNODE, etc.) are retried
|
|
56
|
+
* up to MAX_RETRIES times; all other errors propagate immediately.
|
|
57
|
+
*/
|
|
58
|
+
private withRetry;
|
|
34
59
|
/** Execute a write statement (INSERT / UPDATE / DELETE) with optional params */
|
|
35
60
|
run(sql: string, params?: Params): void;
|
|
36
61
|
/** Fetch a single row, or null if not found */
|
|
@@ -41,6 +66,14 @@ export declare class Database {
|
|
|
41
66
|
exec(sql: string): void;
|
|
42
67
|
/** Wrap a function in a SQLite transaction — auto-commits or rolls back */
|
|
43
68
|
transaction<T>(fn: () => T): T;
|
|
69
|
+
/** Advisory write lock path associated with this database path. */
|
|
70
|
+
get writeLockPath(): string;
|
|
71
|
+
/**
|
|
72
|
+
* Execute a callback under the cross-process advisory write lock.
|
|
73
|
+
*/
|
|
74
|
+
withAdvisoryWriteLock<T>(role: ProcessRole, fn: () => T, options?: Omit<AcquireWriteLockOptions, "role">): T;
|
|
75
|
+
checkpointWal(mode?: WalCheckpointMode): WalCheckpointResult;
|
|
76
|
+
integrityCheck(maxErrors?: number): IntegrityCheckResult;
|
|
44
77
|
/** Close the database connection */
|
|
45
78
|
close(): void;
|
|
46
79
|
/** Check whether the connection is still usable */
|
|
@@ -49,6 +82,6 @@ export declare class Database {
|
|
|
49
82
|
get raw(): BunDatabase;
|
|
50
83
|
}
|
|
51
84
|
/** Create and configure a Database instance at the given path */
|
|
52
|
-
export declare function createDatabase(dbPath: string): Database;
|
|
85
|
+
export declare function createDatabase(dbPath: string, options?: DatabaseOptions): Database;
|
|
53
86
|
export {};
|
|
54
87
|
//# sourceMappingURL=database.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/db/database.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,IAAI,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/db/database.ts"],"names":[],"mappings":"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"}
|
package/dist/doctor.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
// @bun
|
|
3
|
-
import{parseArgs as W}from"util";import{existsSync as E,readFileSync as B}from"fs";import{join as x}from"path";import{existsSync as S,readdirSync as M,readFileSync as O}from"fs";import{join as P}from"path";var p={id:"code",name:"Code",description:"Default coding workflow mode",observationTypes:["decision","bugfix","feature","refactor","discovery","change"],conceptVocabulary:["how-it-works","why-it-exists","what-changed","problem-solution","gotcha","pattern","trade-off"],entityTypes:["technology","library","pattern","concept","file","person","project","other"],relationshipTypes:["uses","depends_on","implements","extends","related_to","replaces","configures"]};function n(e){return{...e,observationTypes:[...e.observationTypes],conceptVocabulary:[...e.conceptVocabulary],entityTypes:[...e.entityTypes],relationshipTypes:[...e.relationshipTypes],promptOverrides:e.promptOverrides?{...e.promptOverrides}:void 0}}function w(e){if(!e||typeof e!=="object")return!1;let s=e,r=(t)=>Array.isArray(t)&&t.every((a)=>typeof a==="string"),i=(t)=>typeof t==="object"&&t!==null&&!Array.isArray(t)&&Object.values(t).every((a)=>typeof a==="string");return typeof s.id==="string"&&(s.extends===void 0||typeof s.extends==="string")&&(s.locale===void 0||typeof s.locale==="string")&&(s.name===void 0||typeof s.name==="string")&&(s.description===void 0||typeof s.description==="string")&&(s.observationTypes===void 0||r(s.observationTypes))&&(s.conceptVocabulary===void 0||r(s.conceptVocabulary))&&(s.entityTypes===void 0||r(s.entityTypes))&&(s.relationshipTypes===void 0||r(s.relationshipTypes))&&(s.promptOverrides===void 0||i(s.promptOverrides))}function A(e){return typeof e.name==="string"&&typeof e.description==="string"&&Array.isArray(e.observationTypes)&&Array.isArray(e.conceptVocabulary)&&Array.isArray(e.entityTypes)&&Array.isArray(e.relationshipTypes)}function b(e,s){return{...e,...s,id:s.id,name:s.name??e.name,description:s.description??e.description,observationTypes:s.observationTypes??e.observationTypes,conceptVocabulary:s.conceptVocabulary??e.conceptVocabulary,entityTypes:s.entityTypes??e.entityTypes,relationshipTypes:s.relationshipTypes??e.relationshipTypes,promptOverrides:{...e.promptOverrides??{},...s.promptOverrides??{}}}}class l{modesDir;constructor(e){this.modesDir=e}loadAllRaw(){let e=new Map;if(!S(this.modesDir))return e;for(let s of M(this.modesDir)){if(!s.endsWith(".json"))continue;let r=P(this.modesDir,s);try{let i=O(r,"utf-8"),t=JSON.parse(i);if(!w(t))continue;if(e.has(t.id))console.warn(`[open-mem] Duplicate mode id "${t.id}" in ${r}; overriding previous definition.`);e.set(t.id,t)}catch{}}return e}resolveById(e,s){let r=new Set,i=!1,t=(d)=>{if(r.has(d))return i=!0,n(p);r.add(d);let o=s.get(d);if(!o)return n(p);if(!o.extends){if(!A(o))return n(p);return b(n(p),o)}let T=t(o.extends);if(i)return n(p);return b(T,o)},a=t(e);return i?n(p):n(a)}}var V=x(import.meta.dir,"."),D=new l(V),u=null;function $(){if(u)return u;return u=D.loadAllRaw(),u}function h(){return[...$().keys()].sort()}var J={dbPath:".open-mem/memory.db",provider:"google",apiKey:void 0,model:"gemini-2.5-flash-lite",maxTokensPerCompression:1024,compressionEnabled:!0,contextInjectionEnabled:!0,maxContextTokens:4000,batchSize:5,batchIntervalMs:30000,ignoredTools:[],minOutputLength:50,maxIndexEntries:20,sensitivePatterns:[],retentionDays:90,maxDatabaseSizeMb:500,logLevel:"warn",contextShowTokenCosts:!0,contextObservationTypes:"all",contextFullObservationCount:3,maxObservations:50,contextShowLastSummary:!0,rateLimitingEnabled:!0,folderContextEnabled:!0,folderContextMaxDepth:5,folderContextMode:"dispersed",folderContextFilename:"AGENTS.md",daemonEnabled:!1,dashboardEnabled:!1,dashboardPort:3737,platformOpenCodeEnabled:!0,platformClaudeCodeEnabled:!1,platformCursorEnabled:!1,mcpProtocolVersion:"2024-11-05",mcpSupportedProtocolVersions:["2024-11-05"],embeddingDimension:void 0,conflictResolutionEnabled:!1,conflictSimilarityBandLow:0.7,conflictSimilarityBandHigh:0.92,userMemoryEnabled:!1,userMemoryDbPath:"~/.config/open-mem/user-memory.db",userMemoryMaxContextTokens:1000,rerankingEnabled:!1,rerankingMaxCandidates:20,entityExtractionEnabled:!1,fallbackProviders:void 0,mode:"code"};function N(){let e={};if(process.env.OPEN_MEM_DB_PATH)e.dbPath=process.env.OPEN_MEM_DB_PATH;if(process.env.OPEN_MEM_PROVIDER)e.provider=process.env.OPEN_MEM_PROVIDER;if(process.env.OPEN_MEM_MODEL)e.model=process.env.OPEN_MEM_MODEL;if(process.env.OPEN_MEM_MAX_CONTEXT_TOKENS)e.maxContextTokens=Number.parseInt(process.env.OPEN_MEM_MAX_CONTEXT_TOKENS,10);if(process.env.OPEN_MEM_COMPRESSION==="false")e.compressionEnabled=!1;if(process.env.OPEN_MEM_CONTEXT_INJECTION==="false")e.contextInjectionEnabled=!1;if(process.env.OPEN_MEM_IGNORED_TOOLS)e.ignoredTools=process.env.OPEN_MEM_IGNORED_TOOLS.split(",").map((s)=>s.trim());if(process.env.OPEN_MEM_BATCH_SIZE)e.batchSize=Number.parseInt(process.env.OPEN_MEM_BATCH_SIZE,10);if(process.env.OPEN_MEM_RETENTION_DAYS)e.retentionDays=Number.parseInt(process.env.OPEN_MEM_RETENTION_DAYS,10);if(process.env.OPEN_MEM_LOG_LEVEL)e.logLevel=process.env.OPEN_MEM_LOG_LEVEL;if(process.env.OPEN_MEM_CONTEXT_SHOW_TOKEN_COSTS==="false")e.contextShowTokenCosts=!1;if(process.env.OPEN_MEM_CONTEXT_TYPES)e.contextObservationTypes=process.env.OPEN_MEM_CONTEXT_TYPES==="all"?"all":process.env.OPEN_MEM_CONTEXT_TYPES.split(",").map((s)=>s.trim());if(process.env.OPEN_MEM_CONTEXT_FULL_COUNT)e.contextFullObservationCount=Number.parseInt(process.env.OPEN_MEM_CONTEXT_FULL_COUNT,10);if(process.env.OPEN_MEM_MAX_OBSERVATIONS)e.maxObservations=Number.parseInt(process.env.OPEN_MEM_MAX_OBSERVATIONS,10);if(process.env.OPEN_MEM_CONTEXT_SHOW_LAST_SUMMARY==="false")e.contextShowLastSummary=!1;if(process.env.OPEN_MEM_RATE_LIMITING==="false")e.rateLimitingEnabled=!1;if(process.env.OPEN_MEM_FOLDER_CONTEXT==="false")e.folderContextEnabled=!1;if(process.env.OPEN_MEM_FOLDER_CONTEXT_MAX_DEPTH)e.folderContextMaxDepth=Number.parseInt(process.env.OPEN_MEM_FOLDER_CONTEXT_MAX_DEPTH,10);if(process.env.OPEN_MEM_FOLDER_CONTEXT_MODE==="single")e.folderContextMode="single";if(process.env.OPEN_MEM_FOLDER_CONTEXT_MODE==="dispersed")e.folderContextMode="dispersed";if(process.env.OPEN_MEM_FOLDER_CONTEXT_FILENAME)e.folderContextFilename=process.env.OPEN_MEM_FOLDER_CONTEXT_FILENAME;if(process.env.OPEN_MEM_DAEMON==="true")e.daemonEnabled=!0;if(process.env.OPEN_MEM_DASHBOARD==="true")e.dashboardEnabled=!0;if(process.env.OPEN_MEM_DASHBOARD_PORT)e.dashboardPort=Number.parseInt(process.env.OPEN_MEM_DASHBOARD_PORT,10);if(process.env.OPEN_MEM_PLATFORM_OPENCODE==="false")e.platformOpenCodeEnabled=!1;if(process.env.OPEN_MEM_PLATFORM_CLAUDE_CODE==="true")e.platformClaudeCodeEnabled=!0;if(process.env.OPEN_MEM_PLATFORM_CURSOR==="true")e.platformCursorEnabled=!0;if(process.env.OPEN_MEM_MCP_PROTOCOL_VERSION)e.mcpProtocolVersion=process.env.OPEN_MEM_MCP_PROTOCOL_VERSION;if(process.env.OPEN_MEM_MCP_SUPPORTED_PROTOCOLS)e.mcpSupportedProtocolVersions=process.env.OPEN_MEM_MCP_SUPPORTED_PROTOCOLS.split(",").map((s)=>s.trim()).filter(Boolean);if(process.env.OPEN_MEM_EMBEDDING_DIMENSION)e.embeddingDimension=Number.parseInt(process.env.OPEN_MEM_EMBEDDING_DIMENSION,10);if(process.env.OPEN_MEM_CONFLICT_RESOLUTION==="true")e.conflictResolutionEnabled=!0;if(process.env.OPEN_MEM_CONFLICT_BAND_LOW){let s=Number.parseFloat(process.env.OPEN_MEM_CONFLICT_BAND_LOW);if(!Number.isNaN(s))e.conflictSimilarityBandLow=s}if(process.env.OPEN_MEM_CONFLICT_BAND_HIGH){let s=Number.parseFloat(process.env.OPEN_MEM_CONFLICT_BAND_HIGH);if(!Number.isNaN(s))e.conflictSimilarityBandHigh=s}if(process.env.OPEN_MEM_USER_MEMORY==="true")e.userMemoryEnabled=!0;if(process.env.OPEN_MEM_USER_MEMORY_DB_PATH)e.userMemoryDbPath=process.env.OPEN_MEM_USER_MEMORY_DB_PATH;if(process.env.OPEN_MEM_USER_MEMORY_MAX_TOKENS)e.userMemoryMaxContextTokens=Number.parseInt(process.env.OPEN_MEM_USER_MEMORY_MAX_TOKENS,10);if(process.env.OPEN_MEM_RERANKING==="true")e.rerankingEnabled=!0;if(process.env.OPEN_MEM_RERANKING_MAX_CANDIDATES)e.rerankingMaxCandidates=Number.parseInt(process.env.OPEN_MEM_RERANKING_MAX_CANDIDATES,10);if(process.env.OPEN_MEM_ENTITY_EXTRACTION==="true")e.entityExtractionEnabled=!0;if(process.env.OPEN_MEM_FALLBACK_PROVIDERS)e.fallbackProviders=process.env.OPEN_MEM_FALLBACK_PROVIDERS.split(",").map((s)=>s.trim()).filter(Boolean);if(process.env.OPEN_MEM_MODE)e.mode=process.env.OPEN_MEM_MODE;return e}function q(e){let s=`${e}/.open-mem/config.json`;if(!E(s))return{};try{let r=B(s,"utf-8"),i=JSON.parse(r);if(!i||typeof i!=="object"||Array.isArray(i))return{};return i}catch{return{}}}function z(e){switch(e){case"google":return 768;case"openai":return 1536;case"bedrock":return 1024;case"anthropic":return 0;case"openrouter":return 0;default:return 768}}function g(e,s){let r=q(e),i=N(),t={...J,...r,...i,...s};if(!t.dbPath.startsWith("/"))t.dbPath=`${e}/${t.dbPath}`;if(!process.env.OPEN_MEM_PROVIDER&&!s?.provider){if(process.env.GOOGLE_GENERATIVE_AI_API_KEY||process.env.GEMINI_API_KEY)t.provider="google";else if(process.env.ANTHROPIC_API_KEY)t.provider="anthropic";else if(process.env.AWS_BEARER_TOKEN_BEDROCK||process.env.AWS_ACCESS_KEY_ID||process.env.AWS_PROFILE)t.provider="bedrock";else if(process.env.OPENROUTER_API_KEY)t.provider="openrouter"}if(!t.apiKey)switch(t.provider){case"google":t.apiKey=process.env.GOOGLE_GENERATIVE_AI_API_KEY||process.env.GEMINI_API_KEY;break;case"anthropic":t.apiKey=process.env.ANTHROPIC_API_KEY;break;case"openai":t.apiKey=process.env.OPENAI_API_KEY;break;case"openrouter":t.apiKey=process.env.OPENROUTER_API_KEY;break;case"bedrock":break}if(t.provider==="openrouter"&&t.model==="gemini-2.5-flash-lite")t.model="google/gemini-2.5-flash-lite";if(t.embeddingDimension===void 0)t.embeddingDimension=z(t.provider);if(t.mode&&!h().includes(t.mode))t.mode="code";return t}import{existsSync as H}from"fs";import{dirname as I}from"path";class y{run(e){let s=[];return s.push(this.checkDbDir(e)),s.push(this.checkProviderConfig(e)),s.push(this.checkVectorSupport(e)),s.push(this.checkAdapters(e)),s.push(this.checkDashboardPort(e)),{ok:s.every((i)=>i.status!=="fail"),checks:s}}checkDbDir(e){let s=I(e.dbPath);return H(s)?{id:"db-dir",status:"pass",message:"Database directory exists.",details:{dir:s}}:{id:"db-dir",status:"warn",message:"Database directory does not exist yet. It will be created on first run.",details:{dir:s}}}checkProviderConfig(e){if(!e.compressionEnabled)return{id:"provider-config",status:"pass",message:"Compression is disabled; provider API key is optional."};if(e.provider==="bedrock")return{id:"provider-config",status:"pass",message:"Bedrock provider selected; API key is not required."};if(!e.apiKey)return{id:"provider-config",status:"fail",message:"Compression is enabled but no provider API key is configured.",details:{provider:e.provider}};return{id:"provider-config",status:"pass",message:"Provider API key is configured.",details:{provider:e.provider}}}checkVectorSupport(e){if(!(e.provider==="google"||e.provider==="openai"||e.provider==="bedrock"))return{id:"vector-support",status:"warn",message:"Provider does not support embeddings; search will use FTS-only fallback.",details:{provider:e.provider}};return{id:"vector-support",status:"pass",message:"Provider supports embeddings.",details:{provider:e.provider,dimension:e.embeddingDimension}}}checkAdapters(e){let s=[["opencode",e.platformOpenCodeEnabled!==!1],["claude-code",e.platformClaudeCodeEnabled===!0],["cursor",e.platformCursorEnabled===!0]].filter(([,r])=>r);if(s.length===0)return{id:"adapters",status:"fail",message:"No platform adapters are enabled."};return{id:"adapters",status:"pass",message:`Enabled adapters: ${s.map(([r])=>r).join(", ")}`}}checkDashboardPort(e){if(!e.dashboardEnabled)return{id:"dashboard",status:"pass",message:"Dashboard is disabled."};if(e.dashboardPort<1||e.dashboardPort>65535)return{id:"dashboard",status:"fail",message:"Dashboard port is outside the valid range (1-65535).",details:{dashboardPort:e.dashboardPort}};return{id:"dashboard",status:"pass",message:"Dashboard port configuration looks valid.",details:{dashboardPort:e.dashboardPort}}}}import{spawnSync as m}from"child_process";import{dirname as K,resolve as k}from"path";function Q(e){try{let s=m("git",["rev-parse","--git-common-dir"],{cwd:e,encoding:"utf-8",timeout:5000});if(s.status!==0||!s.stdout)return null;let r=s.stdout.trim();if(r===".git")return null;let i=m("git",["rev-parse","--git-dir"],{cwd:e,encoding:"utf-8",timeout:5000});if(i.status!==0||!i.stdout)return null;let t=i.stdout.trim(),a=k(e,r),d=k(e,t);if(a===d)return null;let o=K(a);if(o===a||o==="/")return null;return o}catch{return null}}function C(e){return Q(e)??e}var{values:f}=W({args:Bun.argv.slice(2),options:{project:{type:"string",short:"p"},json:{type:"boolean",default:!1}},allowPositionals:!1}),X=typeof f.project==="string"?f.project:process.cwd(),Y=C(X),Z=g(Y),c=new y().run(Z);if(f.json)console.log(JSON.stringify(c,null,2)),process.exit(c.ok?0:1);for(let e of c.checks){let s=e.status==="pass"?"\u2705":e.status==="warn"?"\u26A0\uFE0F":"\u274C";if(console.log(`${s} ${e.id}: ${e.message}`),e.details)console.log(` ${JSON.stringify(e.details)}`)}if(!c.ok)console.error(`
|
|
3
|
+
import{parseArgs as W}from"util";import{existsSync as E,readFileSync as B}from"fs";import{join as x}from"path";import{existsSync as S,readdirSync as M,readFileSync as O}from"fs";import{join as P}from"path";var p={id:"code",name:"Code",description:"Default coding workflow mode",observationTypes:["decision","bugfix","feature","refactor","discovery","change"],conceptVocabulary:["how-it-works","why-it-exists","what-changed","problem-solution","gotcha","pattern","trade-off"],entityTypes:["technology","library","pattern","concept","file","person","project","other"],relationshipTypes:["uses","depends_on","implements","extends","related_to","replaces","configures"]};function n(e){return{...e,observationTypes:[...e.observationTypes],conceptVocabulary:[...e.conceptVocabulary],entityTypes:[...e.entityTypes],relationshipTypes:[...e.relationshipTypes],promptOverrides:e.promptOverrides?{...e.promptOverrides}:void 0}}function w(e){if(!e||typeof e!=="object")return!1;let s=e,r=(t)=>Array.isArray(t)&&t.every((a)=>typeof a==="string"),i=(t)=>typeof t==="object"&&t!==null&&!Array.isArray(t)&&Object.values(t).every((a)=>typeof a==="string");return typeof s.id==="string"&&(s.extends===void 0||typeof s.extends==="string")&&(s.locale===void 0||typeof s.locale==="string")&&(s.name===void 0||typeof s.name==="string")&&(s.description===void 0||typeof s.description==="string")&&(s.observationTypes===void 0||r(s.observationTypes))&&(s.conceptVocabulary===void 0||r(s.conceptVocabulary))&&(s.entityTypes===void 0||r(s.entityTypes))&&(s.relationshipTypes===void 0||r(s.relationshipTypes))&&(s.promptOverrides===void 0||i(s.promptOverrides))}function A(e){return typeof e.name==="string"&&typeof e.description==="string"&&Array.isArray(e.observationTypes)&&Array.isArray(e.conceptVocabulary)&&Array.isArray(e.entityTypes)&&Array.isArray(e.relationshipTypes)}function b(e,s){return{...e,...s,id:s.id,name:s.name??e.name,description:s.description??e.description,observationTypes:s.observationTypes??e.observationTypes,conceptVocabulary:s.conceptVocabulary??e.conceptVocabulary,entityTypes:s.entityTypes??e.entityTypes,relationshipTypes:s.relationshipTypes??e.relationshipTypes,promptOverrides:{...e.promptOverrides??{},...s.promptOverrides??{}}}}class l{modesDir;constructor(e){this.modesDir=e}loadAllRaw(){let e=new Map;if(!S(this.modesDir))return e;for(let s of M(this.modesDir)){if(!s.endsWith(".json"))continue;let r=P(this.modesDir,s);try{let i=O(r,"utf-8"),t=JSON.parse(i);if(!w(t))continue;if(e.has(t.id))console.warn(`[open-mem] Duplicate mode id "${t.id}" in ${r}; overriding previous definition.`);e.set(t.id,t)}catch{}}return e}resolveById(e,s){let r=new Set,i=!1,t=(d)=>{if(r.has(d))return i=!0,n(p);r.add(d);let o=s.get(d);if(!o)return n(p);if(!o.extends){if(!A(o))return n(p);return b(n(p),o)}let T=t(o.extends);if(i)return n(p);return b(T,o)},a=t(e);return i?n(p):n(a)}}var V=x(import.meta.dir,"."),D=new l(V),u=null;function $(){if(u)return u;return u=D.loadAllRaw(),u}function h(){return[...$().keys()].sort()}var J={dbPath:".open-mem/memory.db",provider:"google",apiKey:void 0,model:"gemini-2.5-flash-lite",maxTokensPerCompression:1024,compressionEnabled:!0,contextInjectionEnabled:!0,maxContextTokens:4000,batchSize:5,batchIntervalMs:30000,ignoredTools:[],minOutputLength:50,maxIndexEntries:20,sensitivePatterns:[],retentionDays:90,maxDatabaseSizeMb:500,logLevel:"warn",contextShowTokenCosts:!0,contextObservationTypes:"all",contextFullObservationCount:3,maxObservations:50,contextShowLastSummary:!0,rateLimitingEnabled:!0,folderContextEnabled:!0,folderContextMaxDepth:5,folderContextMode:"single",folderContextFilename:"AGENTS.md",daemonEnabled:!1,dashboardEnabled:!1,dashboardPort:3737,platformOpenCodeEnabled:!0,platformClaudeCodeEnabled:!1,platformCursorEnabled:!1,mcpProtocolVersion:"2024-11-05",mcpSupportedProtocolVersions:["2024-11-05"],embeddingDimension:void 0,conflictResolutionEnabled:!1,conflictSimilarityBandLow:0.7,conflictSimilarityBandHigh:0.92,userMemoryEnabled:!1,userMemoryDbPath:"~/.config/open-mem/user-memory.db",userMemoryMaxContextTokens:1000,rerankingEnabled:!1,rerankingMaxCandidates:20,entityExtractionEnabled:!1,fallbackProviders:void 0,mode:"code"};function N(){let e={};if(process.env.OPEN_MEM_DB_PATH)e.dbPath=process.env.OPEN_MEM_DB_PATH;if(process.env.OPEN_MEM_PROVIDER)e.provider=process.env.OPEN_MEM_PROVIDER;if(process.env.OPEN_MEM_MODEL)e.model=process.env.OPEN_MEM_MODEL;if(process.env.OPEN_MEM_MAX_CONTEXT_TOKENS)e.maxContextTokens=Number.parseInt(process.env.OPEN_MEM_MAX_CONTEXT_TOKENS,10);if(process.env.OPEN_MEM_COMPRESSION==="false")e.compressionEnabled=!1;if(process.env.OPEN_MEM_CONTEXT_INJECTION==="false")e.contextInjectionEnabled=!1;if(process.env.OPEN_MEM_IGNORED_TOOLS)e.ignoredTools=process.env.OPEN_MEM_IGNORED_TOOLS.split(",").map((s)=>s.trim());if(process.env.OPEN_MEM_BATCH_SIZE)e.batchSize=Number.parseInt(process.env.OPEN_MEM_BATCH_SIZE,10);if(process.env.OPEN_MEM_RETENTION_DAYS)e.retentionDays=Number.parseInt(process.env.OPEN_MEM_RETENTION_DAYS,10);if(process.env.OPEN_MEM_LOG_LEVEL)e.logLevel=process.env.OPEN_MEM_LOG_LEVEL;if(process.env.OPEN_MEM_CONTEXT_SHOW_TOKEN_COSTS==="false")e.contextShowTokenCosts=!1;if(process.env.OPEN_MEM_CONTEXT_TYPES)e.contextObservationTypes=process.env.OPEN_MEM_CONTEXT_TYPES==="all"?"all":process.env.OPEN_MEM_CONTEXT_TYPES.split(",").map((s)=>s.trim());if(process.env.OPEN_MEM_CONTEXT_FULL_COUNT)e.contextFullObservationCount=Number.parseInt(process.env.OPEN_MEM_CONTEXT_FULL_COUNT,10);if(process.env.OPEN_MEM_MAX_OBSERVATIONS)e.maxObservations=Number.parseInt(process.env.OPEN_MEM_MAX_OBSERVATIONS,10);if(process.env.OPEN_MEM_CONTEXT_SHOW_LAST_SUMMARY==="false")e.contextShowLastSummary=!1;if(process.env.OPEN_MEM_RATE_LIMITING==="false")e.rateLimitingEnabled=!1;if(process.env.OPEN_MEM_FOLDER_CONTEXT==="false")e.folderContextEnabled=!1;if(process.env.OPEN_MEM_FOLDER_CONTEXT_MAX_DEPTH)e.folderContextMaxDepth=Number.parseInt(process.env.OPEN_MEM_FOLDER_CONTEXT_MAX_DEPTH,10);if(process.env.OPEN_MEM_FOLDER_CONTEXT_MODE==="single")e.folderContextMode="single";if(process.env.OPEN_MEM_FOLDER_CONTEXT_MODE==="dispersed")e.folderContextMode="dispersed";if(process.env.OPEN_MEM_FOLDER_CONTEXT_FILENAME)e.folderContextFilename=process.env.OPEN_MEM_FOLDER_CONTEXT_FILENAME;if(process.env.OPEN_MEM_DAEMON==="true")e.daemonEnabled=!0;if(process.env.OPEN_MEM_DASHBOARD==="true")e.dashboardEnabled=!0;if(process.env.OPEN_MEM_DASHBOARD_PORT)e.dashboardPort=Number.parseInt(process.env.OPEN_MEM_DASHBOARD_PORT,10);if(process.env.OPEN_MEM_PLATFORM_OPENCODE==="false")e.platformOpenCodeEnabled=!1;if(process.env.OPEN_MEM_PLATFORM_CLAUDE_CODE==="true")e.platformClaudeCodeEnabled=!0;if(process.env.OPEN_MEM_PLATFORM_CURSOR==="true")e.platformCursorEnabled=!0;if(process.env.OPEN_MEM_MCP_PROTOCOL_VERSION)e.mcpProtocolVersion=process.env.OPEN_MEM_MCP_PROTOCOL_VERSION;if(process.env.OPEN_MEM_MCP_SUPPORTED_PROTOCOLS)e.mcpSupportedProtocolVersions=process.env.OPEN_MEM_MCP_SUPPORTED_PROTOCOLS.split(",").map((s)=>s.trim()).filter(Boolean);if(process.env.OPEN_MEM_EMBEDDING_DIMENSION)e.embeddingDimension=Number.parseInt(process.env.OPEN_MEM_EMBEDDING_DIMENSION,10);if(process.env.OPEN_MEM_CONFLICT_RESOLUTION==="true")e.conflictResolutionEnabled=!0;if(process.env.OPEN_MEM_CONFLICT_BAND_LOW){let s=Number.parseFloat(process.env.OPEN_MEM_CONFLICT_BAND_LOW);if(!Number.isNaN(s))e.conflictSimilarityBandLow=s}if(process.env.OPEN_MEM_CONFLICT_BAND_HIGH){let s=Number.parseFloat(process.env.OPEN_MEM_CONFLICT_BAND_HIGH);if(!Number.isNaN(s))e.conflictSimilarityBandHigh=s}if(process.env.OPEN_MEM_USER_MEMORY==="true")e.userMemoryEnabled=!0;if(process.env.OPEN_MEM_USER_MEMORY_DB_PATH)e.userMemoryDbPath=process.env.OPEN_MEM_USER_MEMORY_DB_PATH;if(process.env.OPEN_MEM_USER_MEMORY_MAX_TOKENS)e.userMemoryMaxContextTokens=Number.parseInt(process.env.OPEN_MEM_USER_MEMORY_MAX_TOKENS,10);if(process.env.OPEN_MEM_RERANKING==="true")e.rerankingEnabled=!0;if(process.env.OPEN_MEM_RERANKING_MAX_CANDIDATES)e.rerankingMaxCandidates=Number.parseInt(process.env.OPEN_MEM_RERANKING_MAX_CANDIDATES,10);if(process.env.OPEN_MEM_ENTITY_EXTRACTION==="true")e.entityExtractionEnabled=!0;if(process.env.OPEN_MEM_FALLBACK_PROVIDERS)e.fallbackProviders=process.env.OPEN_MEM_FALLBACK_PROVIDERS.split(",").map((s)=>s.trim()).filter(Boolean);if(process.env.OPEN_MEM_MODE)e.mode=process.env.OPEN_MEM_MODE;return e}function q(e){let s=`${e}/.open-mem/config.json`;if(!E(s))return{};try{let r=B(s,"utf-8"),i=JSON.parse(r);if(!i||typeof i!=="object"||Array.isArray(i))return{};return i}catch{return{}}}function z(e){switch(e){case"google":return 768;case"openai":return 1536;case"bedrock":return 1024;case"anthropic":return 0;case"openrouter":return 0;default:return 768}}function g(e,s){let r=q(e),i=N(),t={...J,...r,...i,...s};if(!t.dbPath.startsWith("/"))t.dbPath=`${e}/${t.dbPath}`;if(!process.env.OPEN_MEM_PROVIDER&&!s?.provider){if(process.env.GOOGLE_GENERATIVE_AI_API_KEY||process.env.GEMINI_API_KEY)t.provider="google";else if(process.env.ANTHROPIC_API_KEY)t.provider="anthropic";else if(process.env.AWS_BEARER_TOKEN_BEDROCK||process.env.AWS_ACCESS_KEY_ID||process.env.AWS_PROFILE)t.provider="bedrock";else if(process.env.OPENROUTER_API_KEY)t.provider="openrouter"}if(!t.apiKey)switch(t.provider){case"google":t.apiKey=process.env.GOOGLE_GENERATIVE_AI_API_KEY||process.env.GEMINI_API_KEY;break;case"anthropic":t.apiKey=process.env.ANTHROPIC_API_KEY;break;case"openai":t.apiKey=process.env.OPENAI_API_KEY;break;case"openrouter":t.apiKey=process.env.OPENROUTER_API_KEY;break;case"bedrock":break}if(t.provider==="openrouter"&&t.model==="gemini-2.5-flash-lite")t.model="google/gemini-2.5-flash-lite";if(t.embeddingDimension===void 0)t.embeddingDimension=z(t.provider);if(t.mode&&!h().includes(t.mode))t.mode="code";return t}import{existsSync as H}from"fs";import{dirname as I}from"path";class y{run(e){let s=[];return s.push(this.checkDbDir(e)),s.push(this.checkProviderConfig(e)),s.push(this.checkVectorSupport(e)),s.push(this.checkAdapters(e)),s.push(this.checkDashboardPort(e)),{ok:s.every((i)=>i.status!=="fail"),checks:s}}checkDbDir(e){let s=I(e.dbPath);return H(s)?{id:"db-dir",status:"pass",message:"Database directory exists.",details:{dir:s}}:{id:"db-dir",status:"warn",message:"Database directory does not exist yet. It will be created on first run.",details:{dir:s}}}checkProviderConfig(e){if(!e.compressionEnabled)return{id:"provider-config",status:"pass",message:"Compression is disabled; provider API key is optional."};if(e.provider==="bedrock")return{id:"provider-config",status:"pass",message:"Bedrock provider selected; API key is not required."};if(!e.apiKey)return{id:"provider-config",status:"fail",message:"Compression is enabled but no provider API key is configured.",details:{provider:e.provider}};return{id:"provider-config",status:"pass",message:"Provider API key is configured.",details:{provider:e.provider}}}checkVectorSupport(e){if(!(e.provider==="google"||e.provider==="openai"||e.provider==="bedrock"))return{id:"vector-support",status:"warn",message:"Provider does not support embeddings; search will use FTS-only fallback.",details:{provider:e.provider}};return{id:"vector-support",status:"pass",message:"Provider supports embeddings.",details:{provider:e.provider,dimension:e.embeddingDimension}}}checkAdapters(e){let s=[["opencode",e.platformOpenCodeEnabled!==!1],["claude-code",e.platformClaudeCodeEnabled===!0],["cursor",e.platformCursorEnabled===!0]].filter(([,r])=>r);if(s.length===0)return{id:"adapters",status:"fail",message:"No platform adapters are enabled."};return{id:"adapters",status:"pass",message:`Enabled adapters: ${s.map(([r])=>r).join(", ")}`}}checkDashboardPort(e){if(!e.dashboardEnabled)return{id:"dashboard",status:"pass",message:"Dashboard is disabled."};if(e.dashboardPort<1||e.dashboardPort>65535)return{id:"dashboard",status:"fail",message:"Dashboard port is outside the valid range (1-65535).",details:{dashboardPort:e.dashboardPort}};return{id:"dashboard",status:"pass",message:"Dashboard port configuration looks valid.",details:{dashboardPort:e.dashboardPort}}}}import{spawnSync as m}from"child_process";import{dirname as K,resolve as k}from"path";function Q(e){try{let s=m("git",["rev-parse","--git-common-dir"],{cwd:e,encoding:"utf-8",timeout:5000});if(s.status!==0||!s.stdout)return null;let r=s.stdout.trim();if(r===".git")return null;let i=m("git",["rev-parse","--git-dir"],{cwd:e,encoding:"utf-8",timeout:5000});if(i.status!==0||!i.stdout)return null;let t=i.stdout.trim(),a=k(e,r),d=k(e,t);if(a===d)return null;let o=K(a);if(o===a||o==="/")return null;return o}catch{return null}}function C(e){return Q(e)??e}var{values:f}=W({args:Bun.argv.slice(2),options:{project:{type:"string",short:"p"},json:{type:"boolean",default:!1}},allowPositionals:!1}),X=typeof f.project==="string"?f.project:process.cwd(),Y=C(X),Z=g(Y),c=new y().run(Z);if(f.json)console.log(JSON.stringify(c,null,2)),process.exit(c.ok?0:1);for(let e of c.checks){let s=e.status==="pass"?"\u2705":e.status==="warn"?"\u26A0\uFE0F":"\u274C";if(console.log(`${s} ${e.id}: ${e.message}`),e.details)console.log(` ${JSON.stringify(e.details)}`)}if(!c.ok)console.error(`
|
|
4
4
|
open-mem doctor found blocking issues.`),process.exit(1);console.log(`
|
|
5
5
|
open-mem doctor: all critical checks passed.`);
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAgDA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAgDA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAkFlD;;;GAGG;AACH,wBAA8B,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,CAkUvE"}
|