memobank-cli 0.2.0 → 0.4.0
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/dist/cli.js +95 -12
- package/dist/cli.js.map +1 -1
- package/dist/commands/capture.d.ts +1 -0
- package/dist/commands/capture.d.ts.map +1 -1
- package/dist/commands/capture.js +14 -4
- package/dist/commands/capture.js.map +1 -1
- package/dist/commands/install.d.ts +1 -0
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +56 -4
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/onboarding.d.ts +8 -7
- package/dist/commands/onboarding.d.ts.map +1 -1
- package/dist/commands/onboarding.js +336 -343
- package/dist/commands/onboarding.js.map +1 -1
- package/dist/commands/recall.d.ts +4 -2
- package/dist/commands/recall.d.ts.map +1 -1
- package/dist/commands/recall.js +20 -29
- package/dist/commands/recall.js.map +1 -1
- package/dist/commands/scan.d.ts +27 -0
- package/dist/commands/scan.d.ts.map +1 -0
- package/dist/commands/scan.js +147 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/commands/team.d.ts +18 -0
- package/dist/commands/team.d.ts.map +1 -0
- package/dist/commands/team.js +215 -0
- package/dist/commands/team.js.map +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -1
- package/dist/core/embedding.d.ts +1 -1
- package/dist/core/embedding.d.ts.map +1 -1
- package/dist/core/embedding.js +13 -0
- package/dist/core/embedding.js.map +1 -1
- package/dist/core/reranker.d.ts +14 -0
- package/dist/core/reranker.d.ts.map +1 -0
- package/dist/core/reranker.js +64 -0
- package/dist/core/reranker.js.map +1 -0
- package/dist/core/retriever.d.ts +2 -5
- package/dist/core/retriever.d.ts.map +1 -1
- package/dist/core/retriever.js +51 -16
- package/dist/core/retriever.js.map +1 -1
- package/dist/core/sanitizer.d.ts +10 -0
- package/dist/core/sanitizer.d.ts.map +1 -1
- package/dist/core/sanitizer.js +57 -39
- package/dist/core/sanitizer.js.map +1 -1
- package/dist/core/store.d.ts +9 -19
- package/dist/core/store.d.ts.map +1 -1
- package/dist/core/store.js +69 -47
- package/dist/core/store.js.map +1 -1
- package/dist/engines/lancedb-engine.d.ts.map +1 -1
- package/dist/engines/lancedb-engine.js +2 -1
- package/dist/engines/lancedb-engine.js.map +1 -1
- package/dist/platforms/claude-code.d.ts.map +1 -1
- package/dist/platforms/claude-code.js +13 -0
- package/dist/platforms/claude-code.js.map +1 -1
- package/dist/platforms/gemini.d.ts +7 -0
- package/dist/platforms/gemini.d.ts.map +1 -0
- package/dist/platforms/gemini.js +87 -0
- package/dist/platforms/gemini.js.map +1 -0
- package/dist/platforms/qwen.d.ts +7 -0
- package/dist/platforms/qwen.d.ts.map +1 -0
- package/dist/platforms/qwen.js +87 -0
- package/dist/platforms/qwen.js.map +1 -0
- package/dist/types.d.ts +20 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -2
- package/dist/commands/setup.d.ts +0 -9
- package/dist/commands/setup.d.ts.map +0 -1
- package/dist/commands/setup.js +0 -354
- package/dist/commands/setup.js.map +0 -1
package/dist/config.js
CHANGED
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CH,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/core/embedding.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Generates vector embeddings using OpenAI-compatible APIs
|
|
4
4
|
* Supports: OpenAI, Azure, Ollama, and other compatible providers
|
|
5
5
|
*/
|
|
6
|
-
export type EmbeddingProvider = 'openai' | 'azure' | 'ollama' | 'custom';
|
|
6
|
+
export type EmbeddingProvider = 'openai' | 'azure' | 'ollama' | 'jina' | 'custom';
|
|
7
7
|
export interface EmbeddingConfig {
|
|
8
8
|
provider: EmbeddingProvider;
|
|
9
9
|
model: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedding.d.ts","sourceRoot":"","sources":["../../src/core/embedding.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"embedding.d.ts","sourceRoot":"","sources":["../../src/core/embedding.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;AAElF,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAkB;gBAEpB,MAAM,EAAE,eAAe;IAYnC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAazB;;;;OAIG;IACG,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAiBxD;;;;OAIG;IACG,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAmB9D;;;OAGG;IACG,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IASzC;;;OAGG;IACH,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE;QAC5B,SAAS,EAAE;YACT,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,KAAK,CAAC,EAAE,MAAM,CAAC;YACf,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,UAAU,CAAC,EAAE,MAAM,CAAC;SACrB,CAAC;KACH,GAAG,eAAe,GAAG,IAAI;IAsC1B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAa9B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;CAgCpC"}
|
package/dist/core/embedding.js
CHANGED
|
@@ -28,6 +28,8 @@ class EmbeddingGenerator {
|
|
|
28
28
|
return 'http://localhost:11434/v1';
|
|
29
29
|
case 'azure':
|
|
30
30
|
return 'https://api.openai.com/v1'; // Azure uses different format
|
|
31
|
+
case 'jina':
|
|
32
|
+
return 'https://api.jina.ai/v1';
|
|
31
33
|
default:
|
|
32
34
|
return 'https://api.openai.com/v1';
|
|
33
35
|
}
|
|
@@ -101,6 +103,11 @@ class EmbeddingGenerator {
|
|
|
101
103
|
// Ollama doesn't require an API key
|
|
102
104
|
apiKey = undefined;
|
|
103
105
|
}
|
|
106
|
+
else if (provider === 'jina') {
|
|
107
|
+
apiKey = process.env.JINA_API_KEY;
|
|
108
|
+
if (!apiKey)
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
104
111
|
else {
|
|
105
112
|
// OpenAI, Azure, etc. need API key from environment
|
|
106
113
|
apiKey = process.env.OPENAI_API_KEY || process.env.AZURE_API_KEY;
|
|
@@ -132,6 +139,8 @@ class EmbeddingGenerator {
|
|
|
132
139
|
return 'mxbai-embed-large'; // Popular Ollama embedding model
|
|
133
140
|
case 'azure':
|
|
134
141
|
return 'text-embedding-ada-002';
|
|
142
|
+
case 'jina':
|
|
143
|
+
return 'jina-embeddings-v3';
|
|
135
144
|
default:
|
|
136
145
|
return 'text-embedding-3-small';
|
|
137
146
|
}
|
|
@@ -150,6 +159,10 @@ class EmbeddingGenerator {
|
|
|
150
159
|
'nomic-embed-text': 768,
|
|
151
160
|
'all-minilm': 384,
|
|
152
161
|
'all-mpnet-base-v2': 768,
|
|
162
|
+
// Jina
|
|
163
|
+
'jina-embeddings-v3': 1024,
|
|
164
|
+
'jina-embeddings-v2-base-en': 768,
|
|
165
|
+
'jina-embeddings-v2-small-en': 512,
|
|
153
166
|
};
|
|
154
167
|
// Try exact match first
|
|
155
168
|
if (modelDimensions[model]) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedding.js","sourceRoot":"","sources":["../../src/core/embedding.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"embedding.js","sourceRoot":"","sources":["../../src/core/embedding.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reranker module
|
|
3
|
+
* Supports Jina AI and Cohere reranking APIs
|
|
4
|
+
*/
|
|
5
|
+
import { RecallResult } from '../types';
|
|
6
|
+
export type RerankerProvider = 'jina' | 'cohere';
|
|
7
|
+
export interface RerankerConfig {
|
|
8
|
+
provider: RerankerProvider;
|
|
9
|
+
model?: string;
|
|
10
|
+
top_n?: number;
|
|
11
|
+
apiKey?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function rerank(query: string, results: RecallResult[], config: RerankerConfig): Promise<RecallResult[]>;
|
|
14
|
+
//# sourceMappingURL=reranker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reranker.d.ts","sourceRoot":"","sources":["../../src/core/reranker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEjD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAcD,wBAAsB,MAAM,CAC1B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,YAAY,EAAE,EACvB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,YAAY,EAAE,CAAC,CAazB"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Reranker module
|
|
4
|
+
* Supports Jina AI and Cohere reranking APIs
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.rerank = rerank;
|
|
8
|
+
function getApiKey(provider, override) {
|
|
9
|
+
if (override)
|
|
10
|
+
return override;
|
|
11
|
+
if (provider === 'jina')
|
|
12
|
+
return process.env.JINA_API_KEY || '';
|
|
13
|
+
if (provider === 'cohere')
|
|
14
|
+
return process.env.COHERE_API_KEY || '';
|
|
15
|
+
return '';
|
|
16
|
+
}
|
|
17
|
+
function getDefaultModel(provider) {
|
|
18
|
+
if (provider === 'jina')
|
|
19
|
+
return 'jina-reranker-v2-base-multilingual';
|
|
20
|
+
return 'rerank-v3.5';
|
|
21
|
+
}
|
|
22
|
+
async function rerank(query, results, config) {
|
|
23
|
+
const apiKey = getApiKey(config.provider, config.apiKey);
|
|
24
|
+
if (!apiKey)
|
|
25
|
+
throw new Error(`No API key found for reranker provider: ${config.provider}`);
|
|
26
|
+
const model = config.model || getDefaultModel(config.provider);
|
|
27
|
+
const top_n = config.top_n ?? results.length;
|
|
28
|
+
const documents = results.map(r => `${r.memory.name}: ${r.memory.description}\n${r.memory.content.slice(0, 300)}`);
|
|
29
|
+
if (config.provider === 'jina') {
|
|
30
|
+
return rerankJina(query, results, documents, model, top_n, apiKey);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
return rerankCohere(query, results, documents, model, top_n, apiKey);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
async function rerankJina(query, results, documents, model, top_n, apiKey) {
|
|
37
|
+
const response = await fetch('https://api.jina.ai/v1/rerank', {
|
|
38
|
+
method: 'POST',
|
|
39
|
+
headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${apiKey}` },
|
|
40
|
+
body: JSON.stringify({ model, query, documents, top_n }),
|
|
41
|
+
});
|
|
42
|
+
if (!response.ok)
|
|
43
|
+
throw new Error(`Jina rerank failed: ${response.status} ${await response.text()}`);
|
|
44
|
+
const data = await response.json();
|
|
45
|
+
return data.results.map(r => ({
|
|
46
|
+
...results[r.index],
|
|
47
|
+
score: r.relevance_score,
|
|
48
|
+
}));
|
|
49
|
+
}
|
|
50
|
+
async function rerankCohere(query, results, documents, model, top_n, apiKey) {
|
|
51
|
+
const response = await fetch('https://api.cohere.com/v2/rerank', {
|
|
52
|
+
method: 'POST',
|
|
53
|
+
headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${apiKey}` },
|
|
54
|
+
body: JSON.stringify({ model, query, documents, top_n, return_documents: false }),
|
|
55
|
+
});
|
|
56
|
+
if (!response.ok)
|
|
57
|
+
throw new Error(`Cohere rerank failed: ${response.status} ${await response.text()}`);
|
|
58
|
+
const data = await response.json();
|
|
59
|
+
return data.results.map(r => ({
|
|
60
|
+
...results[r.index],
|
|
61
|
+
score: r.relevance_score,
|
|
62
|
+
}));
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=reranker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reranker.js","sourceRoot":"","sources":["../../src/core/reranker.ts"],"names":[],"mappings":"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"}
|
package/dist/core/retriever.d.ts
CHANGED
|
@@ -1,16 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Retriever module
|
|
3
3
|
* Orchestrates engine search and formats output for MEMORY.md injection
|
|
4
|
-
* Tracks access patterns for lifecycle management
|
|
5
4
|
*/
|
|
6
|
-
import { RecallResult, MemoConfig } from '../types';
|
|
5
|
+
import { RecallResult, MemoConfig, MemoryScope } from '../types';
|
|
7
6
|
import { EngineAdapter } from '../engines/engine-adapter';
|
|
8
7
|
/**
|
|
9
8
|
* Recall memories for a query
|
|
10
|
-
* Returns both the results and formatted markdown
|
|
11
|
-
* Records access for lifecycle tracking
|
|
12
9
|
*/
|
|
13
|
-
export declare function recall(query: string, repoRoot: string, config: MemoConfig, engine?: EngineAdapter): Promise<{
|
|
10
|
+
export declare function recall(query: string, repoRoot: string, config: MemoConfig, engine?: EngineAdapter, scope?: MemoryScope, explain?: boolean): Promise<{
|
|
14
11
|
results: RecallResult[];
|
|
15
12
|
markdown: string;
|
|
16
13
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retriever.d.ts","sourceRoot":"","sources":["../../src/core/retriever.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"retriever.d.ts","sourceRoot":"","sources":["../../src/core/retriever.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAU1D;;GAEG;AACH,wBAAsB,MAAM,CAC1B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,UAAU,EAClB,MAAM,CAAC,EAAE,aAAa,EACtB,KAAK,GAAE,WAAmB,EAC1B,OAAO,GAAE,OAAe,GACvB,OAAO,CAAC;IAAE,OAAO,EAAE,YAAY,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAiDxD;AAwDD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,YAAY,EAAE,EACvB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,IAAI,CAEN"}
|
package/dist/core/retriever.js
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Retriever module
|
|
4
4
|
* Orchestrates engine search and formats output for MEMORY.md injection
|
|
5
|
-
* Tracks access patterns for lifecycle management
|
|
6
5
|
*/
|
|
7
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
7
|
exports.recall = recall;
|
|
@@ -10,43 +9,70 @@ exports.writeRecallResults = writeRecallResults;
|
|
|
10
9
|
const store_1 = require("./store");
|
|
11
10
|
const text_engine_1 = require("../engines/text-engine");
|
|
12
11
|
const lifecycle_manager_1 = require("./lifecycle-manager");
|
|
13
|
-
|
|
12
|
+
const reranker_1 = require("./reranker");
|
|
14
13
|
function estimateTokenCount(text) {
|
|
15
14
|
return Math.ceil(text.length / 4);
|
|
16
15
|
}
|
|
17
16
|
/**
|
|
18
17
|
* Recall memories for a query
|
|
19
|
-
* Returns both the results and formatted markdown
|
|
20
|
-
* Records access for lifecycle tracking
|
|
21
18
|
*/
|
|
22
|
-
async function recall(query, repoRoot, config, engine) {
|
|
23
|
-
|
|
24
|
-
const memories = (0, store_1.loadAll)(repoRoot);
|
|
25
|
-
// Use provided engine or default to text engine
|
|
19
|
+
async function recall(query, repoRoot, config, engine, scope = 'all', explain = false) {
|
|
20
|
+
const memories = (0, store_1.loadAll)(repoRoot, scope);
|
|
26
21
|
const searchEngine = engine || new text_engine_1.TextEngine();
|
|
27
|
-
|
|
22
|
+
const accessLogs = (0, lifecycle_manager_1.loadAccessLogs)(repoRoot);
|
|
28
23
|
let results = await searchEngine.search(query, memories, config.memory.top_k);
|
|
29
|
-
//
|
|
24
|
+
// Apply access frequency boost
|
|
25
|
+
results = results.map(result => {
|
|
26
|
+
const log = accessLogs[result.memory.path];
|
|
27
|
+
const accessCount = log?.accessCount ?? 0;
|
|
28
|
+
const boost = Math.min(1.5, 1.0 + Math.log1p(accessCount) / 10);
|
|
29
|
+
return { ...result, score: Math.min(1.0, result.score * boost) };
|
|
30
|
+
});
|
|
31
|
+
results.sort((a, b) => b.score - a.score);
|
|
30
32
|
for (const result of results) {
|
|
31
33
|
(0, lifecycle_manager_1.recordAccess)(repoRoot, result.memory.path, query);
|
|
32
34
|
}
|
|
33
|
-
//
|
|
34
|
-
|
|
35
|
+
// Apply reranker if configured
|
|
36
|
+
if (config.reranker?.enabled && results.length > 1) {
|
|
37
|
+
try {
|
|
38
|
+
results = await (0, reranker_1.rerank)(query, results, {
|
|
39
|
+
provider: config.reranker.provider,
|
|
40
|
+
model: config.reranker.model,
|
|
41
|
+
top_n: config.reranker.top_n ?? config.memory.top_k,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
catch (e) {
|
|
45
|
+
// Reranker failure is non-fatal — use original order
|
|
46
|
+
console.warn(`Reranker skipped: ${e.message}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (explain && results.length > 0 && results.every(r => !r.scoreBreakdown)) {
|
|
50
|
+
console.warn('--explain: score breakdown not available for the current engine.');
|
|
51
|
+
}
|
|
52
|
+
let markdown = formatResultsAsMarkdown(results, query, config.embedding.engine, memories.length, scope, explain);
|
|
35
53
|
let tokenCount = estimateTokenCount(markdown);
|
|
36
54
|
if (tokenCount > config.memory.token_budget) {
|
|
37
|
-
// Remove results until under budget
|
|
38
55
|
while (results.length > 0 && tokenCount > config.memory.token_budget) {
|
|
39
56
|
results.pop();
|
|
40
|
-
markdown = formatResultsAsMarkdown(results, query, config.embedding.engine, memories.length);
|
|
57
|
+
markdown = formatResultsAsMarkdown(results, query, config.embedding.engine, memories.length, scope, explain);
|
|
41
58
|
tokenCount = estimateTokenCount(markdown);
|
|
42
59
|
}
|
|
43
60
|
}
|
|
44
61
|
return { results, markdown };
|
|
45
62
|
}
|
|
63
|
+
function scopeLabel(scope) {
|
|
64
|
+
if (scope === 'team') {
|
|
65
|
+
return '👥 team';
|
|
66
|
+
}
|
|
67
|
+
if (scope === 'personal') {
|
|
68
|
+
return '👤 personal';
|
|
69
|
+
}
|
|
70
|
+
return '';
|
|
71
|
+
}
|
|
46
72
|
/**
|
|
47
73
|
* Format recall results as markdown for MEMORY.md
|
|
48
74
|
*/
|
|
49
|
-
function formatResultsAsMarkdown(results, query, engine, totalMemories) {
|
|
75
|
+
function formatResultsAsMarkdown(results, query, engine, totalMemories, scope = 'all', explain = false) {
|
|
50
76
|
let markdown = `<!-- Last updated: ${new Date().toISOString()} | query: "${query}" | engine: ${engine} | top ${results.length} of ${totalMemories} -->\n\n`;
|
|
51
77
|
markdown += `## Recalled Memory\n\n`;
|
|
52
78
|
if (results.length === 0) {
|
|
@@ -58,10 +84,19 @@ function formatResultsAsMarkdown(results, query, engine, totalMemories) {
|
|
|
58
84
|
const confidenceStr = memory.confidence ? ` · ${memory.confidence} confidence` : '';
|
|
59
85
|
const tagStr = memory.tags.length > 0 ? ` · tags: ${memory.tags.join(', ')}` : '';
|
|
60
86
|
const relativePath = memory.path.replace(/^.*\/memobank\//, '');
|
|
61
|
-
|
|
87
|
+
// Show scope label only when results come from both sources
|
|
88
|
+
const showScope = scope === 'all' && memory.scope !== undefined;
|
|
89
|
+
const sourcePart = showScope ? ` | ${scopeLabel(memory.scope)}` : '';
|
|
90
|
+
markdown += `### [score: ${score.toFixed(2)}${sourcePart}] ${memory.name}${confidenceStr}\n`;
|
|
91
|
+
if (explain && result.scoreBreakdown) {
|
|
92
|
+
const b = result.scoreBreakdown;
|
|
93
|
+
const parts = [`keyword(${b.keyword.toFixed(2)})`, `tags(${b.tags.toFixed(2)})`, `recency(${b.recency.toFixed(2)})`];
|
|
94
|
+
markdown += ` matched: ${parts.join(' + ')}\n`;
|
|
95
|
+
}
|
|
62
96
|
markdown += `> ${memory.description}\n`;
|
|
63
97
|
markdown += `> \`${relativePath}\`${tagStr}\n\n`;
|
|
64
98
|
}
|
|
99
|
+
markdown += `---\n*To flag a result: memo correct <file> --reason "not relevant"*\n\n`;
|
|
65
100
|
}
|
|
66
101
|
const tokenCount = estimateTokenCount(markdown);
|
|
67
102
|
markdown += `---\n`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retriever.js","sourceRoot":"","sources":["../../src/core/retriever.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"retriever.js","sourceRoot":"","sources":["../../src/core/retriever.ts"],"names":[],"mappings":"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"}
|
package/dist/core/sanitizer.d.ts
CHANGED
|
@@ -6,4 +6,14 @@
|
|
|
6
6
|
* Sanitize content by replacing sensitive patterns with [REDACTED]
|
|
7
7
|
*/
|
|
8
8
|
export declare function sanitize(content: string): string;
|
|
9
|
+
export interface SecretFinding {
|
|
10
|
+
line: number;
|
|
11
|
+
content: string;
|
|
12
|
+
label: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Scan content for potential secrets without modifying it.
|
|
16
|
+
* Returns human-readable findings with line numbers.
|
|
17
|
+
*/
|
|
18
|
+
export declare function scanForSecrets(content: string): string[];
|
|
9
19
|
//# sourceMappingURL=sanitizer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sanitizer.d.ts","sourceRoot":"","sources":["../../src/core/sanitizer.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"sanitizer.d.ts","sourceRoot":"","sources":["../../src/core/sanitizer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAyBH;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAkBhD;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAgBxD"}
|
package/dist/core/sanitizer.js
CHANGED
|
@@ -5,53 +5,71 @@
|
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.sanitize = sanitize;
|
|
8
|
+
exports.scanForSecrets = scanForSecrets;
|
|
9
|
+
/** Patterns used both for sanitization and scanning */
|
|
10
|
+
const SECRET_PATTERNS = [
|
|
11
|
+
{ pattern: /sk-[A-Za-z0-9]{20,}/g, label: 'OpenAI API key' },
|
|
12
|
+
{ pattern: /ghp_[A-Za-z0-9]{36}/g, label: 'GitHub token' },
|
|
13
|
+
{ pattern: /Bearer [A-Za-z0-9._-]{20,}/g, label: 'Bearer token' },
|
|
14
|
+
{ pattern: /AKIA[0-9A-Z]{16}/g, label: 'AWS access key' },
|
|
15
|
+
{ pattern: /eyJ[A-Za-z0-9._-]{50,}\.[A-Za-z0-9._-]+\.[A-Za-z0-9._-]+/g, label: 'JWT token' },
|
|
16
|
+
{ pattern: /[A-Z_]+=["']?[A-Za-z0-9/+]{20,}["']?/g, label: '.env secret' },
|
|
17
|
+
// IPv4 private ranges (full octets to avoid matching version numbers/dates)
|
|
18
|
+
{ pattern: /\b192\.168\.\d{1,3}\.\d{1,3}\b/g, label: 'private IP (192.168.x.x)' },
|
|
19
|
+
{ pattern: /\b10\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/g, label: 'private IP (10.x.x.x)' },
|
|
20
|
+
{ pattern: /\b172\.(1[6-9]|2\d|3[01])\.\d{1,3}\.\d{1,3}\b/g, label: 'private IP (172.16-31.x.x)' },
|
|
21
|
+
// IPv6
|
|
22
|
+
{ pattern: /\b([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}\b/g, label: 'IPv6 address' },
|
|
23
|
+
// Semantic password/secret patterns
|
|
24
|
+
{ pattern: /password\s*(is|=|:)\s*\S+/gi, label: 'password value' },
|
|
25
|
+
{ pattern: /secret\s*(is|=|:)\s*\S+/gi, label: 'secret value' },
|
|
26
|
+
{ pattern: /token\s*(is|=|:)\s*\S+/gi, label: 'token value' },
|
|
27
|
+
// Chinese-language patterns
|
|
28
|
+
{ pattern: /密码[是为::]\s*\S+/g, label: '中文密码' },
|
|
29
|
+
{ pattern: /密钥[是为::]\s*\S+/g, label: '中文密钥' },
|
|
30
|
+
];
|
|
8
31
|
/**
|
|
9
32
|
* Sanitize content by replacing sensitive patterns with [REDACTED]
|
|
10
33
|
*/
|
|
11
34
|
function sanitize(content) {
|
|
12
35
|
let sanitized = content;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
//
|
|
19
|
-
sanitized = sanitized.replace(/Bearer [A-Za-z0-9._-]{20,}/g, 'Bearer [REDACTED]');
|
|
20
|
-
// 2. IP addresses
|
|
21
|
-
// IPv4
|
|
22
|
-
sanitized = sanitized.replace(/\b\d{1,3}(\.\d{1,3}){3}\b/g, (match) => {
|
|
23
|
-
const parts = match.split('.');
|
|
24
|
-
// Check if it's a valid IP (all parts 0-255)
|
|
25
|
-
if (parts.every((part) => {
|
|
26
|
-
const num = parseInt(part, 10);
|
|
27
|
-
return num >= 0 && num <= 255;
|
|
28
|
-
})) {
|
|
29
|
-
return '[REDACTED]';
|
|
30
|
-
}
|
|
31
|
-
return match;
|
|
32
|
-
});
|
|
33
|
-
// IPv6 (simplified pattern)
|
|
34
|
-
sanitized = sanitized.replace(/\b([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}\b/g, '[REDACTED]');
|
|
35
|
-
// 3. JWT tokens
|
|
36
|
-
sanitized = sanitized.replace(/eyJ[A-Za-z0-9._-]{50,}\.[A-Za-z0-9._-]+\.[A-Za-z0-9._-]+/g, '[REDACTED]');
|
|
37
|
-
// 4. .env-style variables with long values
|
|
38
|
-
sanitized = sanitized.replace(/[A-Z_]+=["']?[A-Za-z0-9/+]{20,}["']?/g, (match) => {
|
|
39
|
-
// Replace the value part only
|
|
40
|
-
return match.replace(/=["']?[A-Za-z0-9/+]{20,}["']?/, '=[REDACTED]');
|
|
41
|
-
});
|
|
42
|
-
// 5. AWS Access Keys
|
|
43
|
-
sanitized = sanitized.replace(/AKIA[0-9A-Z]{16}/g, '[REDACTED]');
|
|
44
|
-
// 6. Generic API keys (alphanumeric with special chars, 20+ chars)
|
|
36
|
+
for (const { pattern } of SECRET_PATTERNS) {
|
|
37
|
+
// Reset lastIndex for global patterns
|
|
38
|
+
pattern.lastIndex = 0;
|
|
39
|
+
sanitized = sanitized.replace(pattern, '[REDACTED]');
|
|
40
|
+
}
|
|
41
|
+
// Generic 20+ char alphanumeric (excludes hashes)
|
|
45
42
|
sanitized = sanitized.replace(/\b[A-Za-z0-9_\-]{20,}\b/g, (match) => {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
if (/^[a-f0-9]{40}$/.test(match))
|
|
50
|
-
return match;
|
|
51
|
-
|
|
52
|
-
|
|
43
|
+
if (/^[a-f0-9]{32}$/.test(match)) {
|
|
44
|
+
return match;
|
|
45
|
+
} // MD5
|
|
46
|
+
if (/^[a-f0-9]{40}$/.test(match)) {
|
|
47
|
+
return match;
|
|
48
|
+
} // SHA1
|
|
49
|
+
if (/^[a-f0-9]{64}$/.test(match)) {
|
|
50
|
+
return match;
|
|
51
|
+
} // SHA256
|
|
53
52
|
return '[REDACTED]';
|
|
54
53
|
});
|
|
55
54
|
return sanitized;
|
|
56
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* Scan content for potential secrets without modifying it.
|
|
58
|
+
* Returns human-readable findings with line numbers.
|
|
59
|
+
*/
|
|
60
|
+
function scanForSecrets(content) {
|
|
61
|
+
const lines = content.split('\n');
|
|
62
|
+
const findings = [];
|
|
63
|
+
for (let i = 0; i < lines.length; i++) {
|
|
64
|
+
const line = lines[i];
|
|
65
|
+
for (const { pattern, label } of SECRET_PATTERNS) {
|
|
66
|
+
pattern.lastIndex = 0;
|
|
67
|
+
if (pattern.test(line)) {
|
|
68
|
+
findings.push(`line ${i + 1} (${label}): ${line.substring(0, 120)}`);
|
|
69
|
+
break; // one finding per line
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return findings;
|
|
74
|
+
}
|
|
57
75
|
//# sourceMappingURL=sanitizer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sanitizer.js","sourceRoot":"","sources":["../../src/core/sanitizer.ts"],"names":[],"mappings":";AAAA;;;GAGG;;
|
|
1
|
+
{"version":3,"file":"sanitizer.js","sourceRoot":"","sources":["../../src/core/sanitizer.ts"],"names":[],"mappings":"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"}
|
package/dist/core/store.d.ts
CHANGED
|
@@ -2,30 +2,20 @@
|
|
|
2
2
|
* File I/O layer for memobank
|
|
3
3
|
* Reads and writes .md files with YAML frontmatter
|
|
4
4
|
*/
|
|
5
|
-
import { MemoryFile } from '../types';
|
|
6
|
-
/**
|
|
7
|
-
* Find memobank root directory
|
|
8
|
-
* Resolution order:
|
|
9
|
-
* 1. --repo CLI flag (passed as parameter)
|
|
10
|
-
* 2. MEMOBANK_REPO env var
|
|
11
|
-
* 3. meta/config.yaml in cwd or parent dirs (walk up)
|
|
12
|
-
* 4. ~/.memobank/<git-repo-name>/
|
|
13
|
-
* 5. ~/.memobank/default/
|
|
14
|
-
*/
|
|
5
|
+
import { MemoryFile, MemoryScope } from '../types';
|
|
15
6
|
export declare function findRepoRoot(cwd: string, repoFlag?: string): string;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
export declare function loadAll(repoRoot: string): MemoryFile[];
|
|
7
|
+
export declare function getPersonalDir(repoRoot: string): string;
|
|
8
|
+
export declare function getTeamDir(repoRoot: string): string;
|
|
9
|
+
export declare function loadAll(repoRoot: string, scope?: MemoryScope): MemoryFile[];
|
|
20
10
|
/**
|
|
21
11
|
* Load a single memory file
|
|
22
12
|
*/
|
|
23
13
|
export declare function loadFile(filePath: string): MemoryFile;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
14
|
+
export declare function writeMemory(repoRoot: string, memory: Omit<MemoryFile, 'path' | 'scope'>): string;
|
|
15
|
+
export declare function migrateToPersonal(repoRoot: string): {
|
|
16
|
+
migrated: string[];
|
|
17
|
+
skipped: string[];
|
|
18
|
+
};
|
|
29
19
|
/**
|
|
30
20
|
* Update MEMORY.md with recall results
|
|
31
21
|
*/
|
package/dist/core/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/core/store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAAE,UAAU,EAA0B,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/core/store.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAAE,UAAU,EAA0B,WAAW,EAAE,MAAM,UAAU,CAAC;AAI3E,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAsBnE;AAMD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEnD;AAoBD,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,GAAE,WAAmB,GAAG,UAAU,EAAE,CAqBlF;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAwBrD;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,MAAM,CAgChG;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CA4B7F;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,KAAK,CAAC;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,EACrD,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,IAAI,CAwBN;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI5D"}
|