@gotza02/mathinking 3.1.7 → 3.1.9
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 +12 -1
- package/dist/schemas/brain.schema.d.ts +16 -0
- package/dist/schemas/brain.schema.d.ts.map +1 -1
- package/dist/schemas/brain.schema.js +14 -10
- package/dist/schemas/brain.schema.js.map +1 -1
- package/dist/sse-server.js +2 -1
- package/dist/sse-server.js.map +1 -1
- package/dist/test-new-features.d.ts +2 -0
- package/dist/test-new-features.d.ts.map +1 -0
- package/dist/test-new-features.js +62 -0
- package/dist/test-new-features.js.map +1 -0
- package/dist/tools/orchestrator.d.ts.map +1 -1
- package/dist/tools/orchestrator.js +93 -26
- package/dist/tools/orchestrator.js.map +1 -1
- package/dist/tools/sequential-thinking.d.ts +2 -0
- package/dist/tools/sequential-thinking.d.ts.map +1 -1
- package/dist/tools/sequential-thinking.js +265 -46
- package/dist/tools/sequential-thinking.js.map +1 -1
- package/dist/types/index.d.ts +17 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/dag.d.ts.map +1 -1
- package/dist/utils/dag.js +4 -7
- package/dist/utils/dag.js.map +1 -1
- package/dist/utils/fs-helper.d.ts +12 -0
- package/dist/utils/fs-helper.d.ts.map +1 -0
- package/dist/utils/fs-helper.js +45 -0
- package/dist/utils/fs-helper.js.map +1 -0
- package/dist/utils/memory.d.ts +2 -2
- package/dist/utils/memory.d.ts.map +1 -1
- package/dist/utils/memory.js +24 -11
- package/dist/utils/memory.js.map +1 -1
- package/dist/utils/mutex.d.ts.map +1 -1
- package/dist/utils/mutex.js +1 -1
- package/dist/utils/mutex.js.map +1 -1
- package/dist/utils/resilience.d.ts.map +1 -1
- package/dist/utils/resilience.js +5 -8
- package/dist/utils/resilience.js.map +1 -1
- package/dist/utils/tool-cache.d.ts +2 -2
- package/dist/utils/tool-cache.d.ts.map +1 -1
- package/dist/utils/tool-cache.js +2 -0
- package/dist/utils/tool-cache.js.map +1 -1
- package/dist/utils/vector-memory.d.ts +3 -2
- package/dist/utils/vector-memory.d.ts.map +1 -1
- package/dist/utils/vector-memory.js +34 -23
- package/dist/utils/vector-memory.js.map +1 -1
- package/package.json +1 -1
package/dist/utils/resilience.js
CHANGED
|
@@ -4,10 +4,7 @@ export class ResilienceManager {
|
|
|
4
4
|
strategies = [];
|
|
5
5
|
replanHandler = null;
|
|
6
6
|
// 🔒 Security: Allowed directory roots for auto-mkdir
|
|
7
|
-
ALLOWED_ROOTS = [
|
|
8
|
-
process.cwd(),
|
|
9
|
-
path.join(os.homedir(), 'tmp', 'mathinking')
|
|
10
|
-
];
|
|
7
|
+
ALLOWED_ROOTS = [process.cwd(), path.join(os.homedir(), 'tmp', 'mathinking')];
|
|
11
8
|
constructor() {
|
|
12
9
|
this.registerDefaultStrategies();
|
|
13
10
|
}
|
|
@@ -21,7 +18,7 @@ export class ResilienceManager {
|
|
|
21
18
|
// Resolve to absolute path (also normalizes ../ etc)
|
|
22
19
|
const resolvedPath = path.resolve(expandedPath);
|
|
23
20
|
// Check if path is within allowed roots
|
|
24
|
-
const isAllowed = this.ALLOWED_ROOTS.some(root => {
|
|
21
|
+
const isAllowed = this.ALLOWED_ROOTS.some((root) => {
|
|
25
22
|
const resolvedRoot = path.resolve(root);
|
|
26
23
|
return resolvedPath.startsWith(resolvedRoot);
|
|
27
24
|
});
|
|
@@ -66,7 +63,7 @@ export class ResilienceManager {
|
|
|
66
63
|
error.message.includes('ENOENT') &&
|
|
67
64
|
error.message.includes('no such file or directory'));
|
|
68
65
|
},
|
|
69
|
-
getRecoveryAction: async (
|
|
66
|
+
getRecoveryAction: async (_error, task, manager) => {
|
|
70
67
|
const filePath = (task.toolInput?.file_path || task.toolInput?.path);
|
|
71
68
|
if (!filePath)
|
|
72
69
|
return { type: 'retry', description: 'Retry' }; // Should not happen
|
|
@@ -87,7 +84,7 @@ export class ResilienceManager {
|
|
|
87
84
|
(task.toolInput?.command).includes('npm install') &&
|
|
88
85
|
(error.message.includes('code 1') || error.message.includes('command failed')));
|
|
89
86
|
},
|
|
90
|
-
getRecoveryAction: async (
|
|
87
|
+
getRecoveryAction: async (_error, task, _manager) => {
|
|
91
88
|
const cmd = task.toolInput?.command;
|
|
92
89
|
if (!cmd.includes('--force') && !cmd.includes('--legacy-peer-deps')) {
|
|
93
90
|
return {
|
|
@@ -104,7 +101,7 @@ export class ResilienceManager {
|
|
|
104
101
|
matches: (error) => {
|
|
105
102
|
return error.message.includes('ETIMEDOUT') || error.message.includes('fetch failed');
|
|
106
103
|
},
|
|
107
|
-
getRecoveryAction: async (
|
|
104
|
+
getRecoveryAction: async (_error, _task, _manager) => {
|
|
108
105
|
// 🔧 Calculate exponential backoff based on retry count
|
|
109
106
|
// The orchestrator will use this to delay before retrying
|
|
110
107
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resilience.js","sourceRoot":"","sources":["../../src/utils/resilience.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"resilience.js","sourceRoot":"","sources":["../../src/utils/resilience.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export declare class ToolCache {
|
|
2
2
|
private cache;
|
|
3
3
|
constructor(maxSize?: number, ttl?: number);
|
|
4
|
-
get(toolName: string, input:
|
|
5
|
-
set(toolName: string, input:
|
|
4
|
+
get(toolName: string, input: unknown): any | undefined;
|
|
5
|
+
set(toolName: string, input: unknown, output: unknown): void;
|
|
6
6
|
private generateKey;
|
|
7
7
|
}
|
|
8
8
|
export declare const toolCache: ToolCache;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-cache.d.ts","sourceRoot":"","sources":["../../src/utils/tool-cache.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tool-cache.d.ts","sourceRoot":"","sources":["../../src/utils/tool-cache.ts"],"names":[],"mappings":"AAEA,qBAAa,SAAS;IAEpB,OAAO,CAAC,KAAK,CAAwB;gBAEzB,OAAO,GAAE,MAAW,EAAE,GAAG,GAAE,MAAsB;IAQ7D,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,GAAG,GAAG,SAAS;IAKtD,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAK5D,OAAO,CAAC,WAAW;CAGpB;AAED,eAAO,MAAM,SAAS,WAAkB,CAAC"}
|
package/dist/utils/tool-cache.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { LRUCache } from 'lru-cache';
|
|
2
2
|
export class ToolCache {
|
|
3
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
3
4
|
cache;
|
|
4
5
|
constructor(maxSize = 50, ttl = 1000 * 60 * 5) {
|
|
5
6
|
this.cache = new LRUCache({
|
|
@@ -7,6 +8,7 @@ export class ToolCache {
|
|
|
7
8
|
ttl: ttl
|
|
8
9
|
});
|
|
9
10
|
}
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
10
12
|
get(toolName, input) {
|
|
11
13
|
const key = this.generateKey(toolName, input);
|
|
12
14
|
return this.cache.get(key);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-cache.js","sourceRoot":"","sources":["../../src/utils/tool-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-cache.js","sourceRoot":"","sources":["../../src/utils/tool-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,MAAM,OAAO,SAAS;IACpB,8DAA8D;IACtD,KAAK,CAAwB;IAErC,YAAY,UAAkB,EAAE,EAAE,MAAc,IAAI,GAAG,EAAE,GAAG,CAAC;QAC3D,IAAI,CAAC,KAAK,GAAG,IAAI,QAAQ,CAAC;YACxB,GAAG,EAAE,OAAO;YACZ,GAAG,EAAE,GAAG;SACT,CAAC,CAAC;IACL,CAAC;IAED,8DAA8D;IAC9D,GAAG,CAAC,QAAgB,EAAE,KAAc;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,GAAG,CAAC,QAAgB,EAAE,KAAc,EAAE,MAAe;QACnD,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC9B,CAAC;IAEO,WAAW,CAAC,QAAgB,EAAE,KAAc;QAClD,OAAO,GAAG,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;IAChD,CAAC;CACF;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC"}
|
|
@@ -4,15 +4,16 @@ export declare class VectorMemoryManager {
|
|
|
4
4
|
private entries;
|
|
5
5
|
private tfidf;
|
|
6
6
|
private initialized;
|
|
7
|
+
private mutex;
|
|
7
8
|
constructor();
|
|
8
9
|
private init;
|
|
9
10
|
private embed;
|
|
10
|
-
add(content: string, metadata?: Record<string,
|
|
11
|
+
add(content: string, metadata?: Record<string, unknown>): Promise<VectorEntry>;
|
|
11
12
|
search(query: string, limit?: number): Promise<{
|
|
12
13
|
item: VectorEntry;
|
|
13
14
|
score: number;
|
|
14
15
|
}[]>;
|
|
15
|
-
private
|
|
16
|
+
private saveInternal;
|
|
16
17
|
}
|
|
17
18
|
export declare const vectorMemory: VectorMemoryManager;
|
|
18
19
|
//# sourceMappingURL=vector-memory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vector-memory.d.ts","sourceRoot":"","sources":["../../src/utils/vector-memory.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,WAAW,CAAkB;;
|
|
1
|
+
{"version":3,"file":"vector-memory.d.ts","sourceRoot":"","sources":["../../src/utils/vector-memory.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,KAAK,CAAe;;YASd,IAAI;YAmBJ,KAAK;IAKb,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAsBlF,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;YAoCjF,YAAY;CAO3B;AAED,eAAO,MAAM,YAAY,qBAA4B,CAAC"}
|
|
@@ -3,66 +3,76 @@ import * as path from 'path';
|
|
|
3
3
|
import * as os from 'os';
|
|
4
4
|
import { v4 as uuidv4 } from 'uuid';
|
|
5
5
|
import natural from 'natural';
|
|
6
|
+
import { Mutex } from './mutex.js';
|
|
6
7
|
export class VectorMemoryManager {
|
|
7
8
|
storagePath;
|
|
8
9
|
entries = [];
|
|
9
10
|
tfidf;
|
|
10
11
|
initialized = false;
|
|
12
|
+
mutex = new Mutex();
|
|
11
13
|
constructor() {
|
|
12
14
|
this.storagePath = path.join(os.homedir(), '.mathinking', 'vector_memory.json');
|
|
13
15
|
this.tfidf = new natural.TfIdf();
|
|
14
|
-
|
|
16
|
+
// Don't call init() in constructor as it's async.
|
|
17
|
+
// It will be called lazily in methods.
|
|
15
18
|
}
|
|
16
19
|
async init() {
|
|
20
|
+
if (this.initialized)
|
|
21
|
+
return;
|
|
17
22
|
try {
|
|
18
23
|
const dir = path.dirname(this.storagePath);
|
|
19
24
|
await fs.mkdir(dir, { recursive: true });
|
|
20
25
|
const data = await fs.readFile(this.storagePath, 'utf8');
|
|
21
26
|
this.entries = JSON.parse(data);
|
|
22
|
-
this.entries.forEach(entry => {
|
|
27
|
+
this.entries.forEach((entry) => {
|
|
23
28
|
this.tfidf.addDocument(entry.content);
|
|
24
29
|
});
|
|
25
30
|
}
|
|
26
|
-
catch
|
|
31
|
+
catch {
|
|
27
32
|
this.entries = [];
|
|
28
33
|
}
|
|
29
34
|
this.initialized = true;
|
|
30
35
|
}
|
|
31
|
-
async embed(
|
|
36
|
+
async embed(_text) {
|
|
37
|
+
// Placeholder for actual embedding logic
|
|
32
38
|
return [];
|
|
33
39
|
}
|
|
34
40
|
async add(content, metadata = {}) {
|
|
35
|
-
|
|
41
|
+
return await this.mutex.dispatch(async () => {
|
|
36
42
|
await this.init();
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
43
|
+
this.tfidf.addDocument(content);
|
|
44
|
+
const vector = []; // Future: await this.embed(content);
|
|
45
|
+
const entry = {
|
|
46
|
+
id: uuidv4(),
|
|
47
|
+
content,
|
|
48
|
+
vector,
|
|
49
|
+
metadata,
|
|
50
|
+
createdAt: new Date().toISOString()
|
|
51
|
+
};
|
|
52
|
+
this.entries.push(entry);
|
|
53
|
+
await this.saveInternal(); // Use internal save without extra lock
|
|
54
|
+
return entry;
|
|
55
|
+
});
|
|
49
56
|
}
|
|
50
57
|
async search(query, limit = 5) {
|
|
51
|
-
|
|
58
|
+
// Search is read-only, but we need to ensure init is done.
|
|
59
|
+
// We use a light check or lock if strictly necessary, but usually init check is enough.
|
|
60
|
+
// For safety against concurrent init, we can lock.
|
|
61
|
+
await this.mutex.dispatch(async () => {
|
|
52
62
|
await this.init();
|
|
63
|
+
});
|
|
53
64
|
const measures = [];
|
|
54
65
|
this.tfidf.tfidfs(query, (i, measure) => {
|
|
55
66
|
measures.push({ index: i, measure });
|
|
56
67
|
});
|
|
57
68
|
if (measures.length === 0) {
|
|
58
|
-
|
|
69
|
+
// Quiet warning or strictly log debug
|
|
59
70
|
}
|
|
60
71
|
const results = measures
|
|
61
72
|
.sort((a, b) => b.measure - a.measure)
|
|
62
73
|
.slice(0, limit)
|
|
63
|
-
.map(m => {
|
|
74
|
+
.map((m) => {
|
|
64
75
|
if (!this.entries[m.index]) {
|
|
65
|
-
console.error(`Mismatch! Index ${m.index} not in entries (len: ${this.entries.length})`);
|
|
66
76
|
return null;
|
|
67
77
|
}
|
|
68
78
|
return {
|
|
@@ -70,10 +80,11 @@ export class VectorMemoryManager {
|
|
|
70
80
|
score: m.measure
|
|
71
81
|
};
|
|
72
82
|
})
|
|
73
|
-
.filter(r => r !== null);
|
|
83
|
+
.filter((r) => r !== null);
|
|
74
84
|
return results;
|
|
75
85
|
}
|
|
76
|
-
|
|
86
|
+
// Internal save function (caller must hold lock)
|
|
87
|
+
async saveInternal() {
|
|
77
88
|
try {
|
|
78
89
|
await fs.writeFile(this.storagePath, JSON.stringify(this.entries), 'utf8');
|
|
79
90
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vector-memory.js","sourceRoot":"","sources":["../../src/utils/vector-memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,OAAO,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"vector-memory.js","sourceRoot":"","sources":["../../src/utils/vector-memory.ts"],"names":[],"mappings":"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"}
|