linguclaw 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.
Files changed (168) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +161 -0
  3. package/dist/agent-system.d.ts +196 -0
  4. package/dist/agent-system.d.ts.map +1 -0
  5. package/dist/agent-system.js +738 -0
  6. package/dist/agent-system.js.map +1 -0
  7. package/dist/alphabeta.d.ts +54 -0
  8. package/dist/alphabeta.d.ts.map +1 -0
  9. package/dist/alphabeta.js +193 -0
  10. package/dist/alphabeta.js.map +1 -0
  11. package/dist/browser.d.ts +62 -0
  12. package/dist/browser.d.ts.map +1 -0
  13. package/dist/browser.js +224 -0
  14. package/dist/browser.js.map +1 -0
  15. package/dist/cli.d.ts +7 -0
  16. package/dist/cli.d.ts.map +1 -0
  17. package/dist/cli.js +565 -0
  18. package/dist/cli.js.map +1 -0
  19. package/dist/code-parser.d.ts +39 -0
  20. package/dist/code-parser.d.ts.map +1 -0
  21. package/dist/code-parser.js +385 -0
  22. package/dist/code-parser.js.map +1 -0
  23. package/dist/config.d.ts +66 -0
  24. package/dist/config.d.ts.map +1 -0
  25. package/dist/config.js +232 -0
  26. package/dist/config.js.map +1 -0
  27. package/dist/core/engine.d.ts +359 -0
  28. package/dist/core/engine.d.ts.map +1 -0
  29. package/dist/core/engine.js +127 -0
  30. package/dist/core/engine.js.map +1 -0
  31. package/dist/daemon.d.ts +29 -0
  32. package/dist/daemon.d.ts.map +1 -0
  33. package/dist/daemon.js +212 -0
  34. package/dist/daemon.js.map +1 -0
  35. package/dist/email-receiver.d.ts +63 -0
  36. package/dist/email-receiver.d.ts.map +1 -0
  37. package/dist/email-receiver.js +553 -0
  38. package/dist/email-receiver.js.map +1 -0
  39. package/dist/git-integration.d.ts +180 -0
  40. package/dist/git-integration.d.ts.map +1 -0
  41. package/dist/git-integration.js +850 -0
  42. package/dist/git-integration.js.map +1 -0
  43. package/dist/inbox.d.ts +84 -0
  44. package/dist/inbox.d.ts.map +1 -0
  45. package/dist/inbox.js +198 -0
  46. package/dist/inbox.js.map +1 -0
  47. package/dist/index.d.ts +6 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +41 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/languages/cpp.d.ts +51 -0
  52. package/dist/languages/cpp.d.ts.map +1 -0
  53. package/dist/languages/cpp.js +930 -0
  54. package/dist/languages/cpp.js.map +1 -0
  55. package/dist/languages/csharp.d.ts +79 -0
  56. package/dist/languages/csharp.d.ts.map +1 -0
  57. package/dist/languages/csharp.js +1776 -0
  58. package/dist/languages/csharp.js.map +1 -0
  59. package/dist/languages/go.d.ts +50 -0
  60. package/dist/languages/go.d.ts.map +1 -0
  61. package/dist/languages/go.js +882 -0
  62. package/dist/languages/go.js.map +1 -0
  63. package/dist/languages/java.d.ts +47 -0
  64. package/dist/languages/java.d.ts.map +1 -0
  65. package/dist/languages/java.js +649 -0
  66. package/dist/languages/java.js.map +1 -0
  67. package/dist/languages/python.d.ts +47 -0
  68. package/dist/languages/python.d.ts.map +1 -0
  69. package/dist/languages/python.js +655 -0
  70. package/dist/languages/python.js.map +1 -0
  71. package/dist/languages/rust.d.ts +61 -0
  72. package/dist/languages/rust.d.ts.map +1 -0
  73. package/dist/languages/rust.js +1064 -0
  74. package/dist/languages/rust.js.map +1 -0
  75. package/dist/logger.d.ts +20 -0
  76. package/dist/logger.d.ts.map +1 -0
  77. package/dist/logger.js +133 -0
  78. package/dist/logger.js.map +1 -0
  79. package/dist/longterm-memory.d.ts +47 -0
  80. package/dist/longterm-memory.d.ts.map +1 -0
  81. package/dist/longterm-memory.js +300 -0
  82. package/dist/longterm-memory.js.map +1 -0
  83. package/dist/memory.d.ts +42 -0
  84. package/dist/memory.d.ts.map +1 -0
  85. package/dist/memory.js +274 -0
  86. package/dist/memory.js.map +1 -0
  87. package/dist/messaging.d.ts +103 -0
  88. package/dist/messaging.d.ts.map +1 -0
  89. package/dist/messaging.js +645 -0
  90. package/dist/messaging.js.map +1 -0
  91. package/dist/multi-provider.d.ts +69 -0
  92. package/dist/multi-provider.d.ts.map +1 -0
  93. package/dist/multi-provider.js +484 -0
  94. package/dist/multi-provider.js.map +1 -0
  95. package/dist/orchestrator.d.ts +65 -0
  96. package/dist/orchestrator.d.ts.map +1 -0
  97. package/dist/orchestrator.js +441 -0
  98. package/dist/orchestrator.js.map +1 -0
  99. package/dist/plugins.d.ts +52 -0
  100. package/dist/plugins.d.ts.map +1 -0
  101. package/dist/plugins.js +215 -0
  102. package/dist/plugins.js.map +1 -0
  103. package/dist/prism-orchestrator.d.ts +26 -0
  104. package/dist/prism-orchestrator.d.ts.map +1 -0
  105. package/dist/prism-orchestrator.js +191 -0
  106. package/dist/prism-orchestrator.js.map +1 -0
  107. package/dist/prism.d.ts +46 -0
  108. package/dist/prism.d.ts.map +1 -0
  109. package/dist/prism.js +188 -0
  110. package/dist/prism.js.map +1 -0
  111. package/dist/privacy.d.ts +23 -0
  112. package/dist/privacy.d.ts.map +1 -0
  113. package/dist/privacy.js +220 -0
  114. package/dist/privacy.js.map +1 -0
  115. package/dist/proactive.d.ts +30 -0
  116. package/dist/proactive.d.ts.map +1 -0
  117. package/dist/proactive.js +260 -0
  118. package/dist/proactive.js.map +1 -0
  119. package/dist/refactoring-engine.d.ts +100 -0
  120. package/dist/refactoring-engine.d.ts.map +1 -0
  121. package/dist/refactoring-engine.js +717 -0
  122. package/dist/refactoring-engine.js.map +1 -0
  123. package/dist/resilience.d.ts +43 -0
  124. package/dist/resilience.d.ts.map +1 -0
  125. package/dist/resilience.js +200 -0
  126. package/dist/resilience.js.map +1 -0
  127. package/dist/safety.d.ts +40 -0
  128. package/dist/safety.d.ts.map +1 -0
  129. package/dist/safety.js +133 -0
  130. package/dist/safety.js.map +1 -0
  131. package/dist/sandbox.d.ts +33 -0
  132. package/dist/sandbox.d.ts.map +1 -0
  133. package/dist/sandbox.js +173 -0
  134. package/dist/sandbox.js.map +1 -0
  135. package/dist/scheduler.d.ts +72 -0
  136. package/dist/scheduler.d.ts.map +1 -0
  137. package/dist/scheduler.js +374 -0
  138. package/dist/scheduler.js.map +1 -0
  139. package/dist/semantic-memory.d.ts +70 -0
  140. package/dist/semantic-memory.d.ts.map +1 -0
  141. package/dist/semantic-memory.js +430 -0
  142. package/dist/semantic-memory.js.map +1 -0
  143. package/dist/skills.d.ts +97 -0
  144. package/dist/skills.d.ts.map +1 -0
  145. package/dist/skills.js +575 -0
  146. package/dist/skills.js.map +1 -0
  147. package/dist/static/dashboard.html +853 -0
  148. package/dist/static/hub.html +772 -0
  149. package/dist/static/index.html +818 -0
  150. package/dist/static/logo.svg +24 -0
  151. package/dist/static/workflow-editor.html +913 -0
  152. package/dist/tools.d.ts +67 -0
  153. package/dist/tools.d.ts.map +1 -0
  154. package/dist/tools.js +303 -0
  155. package/dist/tools.js.map +1 -0
  156. package/dist/types.d.ts +295 -0
  157. package/dist/types.d.ts.map +1 -0
  158. package/dist/types.js +90 -0
  159. package/dist/types.js.map +1 -0
  160. package/dist/web.d.ts +76 -0
  161. package/dist/web.d.ts.map +1 -0
  162. package/dist/web.js +2139 -0
  163. package/dist/web.js.map +1 -0
  164. package/dist/workflow-engine.d.ts +114 -0
  165. package/dist/workflow-engine.d.ts.map +1 -0
  166. package/dist/workflow-engine.js +855 -0
  167. package/dist/workflow-engine.js.map +1 -0
  168. package/package.json +77 -0
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Semantic Memory - TF-IDF based vector search using SQLite
3
+ * No external API or ML library required. Production-ready.
4
+ */
5
+ interface SearchResult {
6
+ id: string;
7
+ content: string;
8
+ category: string;
9
+ metadata: Record<string, any>;
10
+ score: number;
11
+ }
12
+ /**
13
+ * SemanticMemory - Full semantic search with TF-IDF vectors stored in SQLite
14
+ */
15
+ export declare class SemanticMemory {
16
+ private db;
17
+ private vectorizer;
18
+ private dbPath;
19
+ private dirty;
20
+ private initialized;
21
+ constructor(dbPath?: string);
22
+ init(): boolean;
23
+ /**
24
+ * Store a document with automatic embedding
25
+ */
26
+ store(id: string, content: string, category?: string, metadata?: Record<string, any>): boolean;
27
+ /**
28
+ * Semantic search - find documents similar to query
29
+ */
30
+ search(query: string, limit?: number, category?: string, minScore?: number): SearchResult[];
31
+ /**
32
+ * Text-based fallback search
33
+ */
34
+ private textSearch;
35
+ /**
36
+ * Rebuild TF-IDF index from all documents
37
+ */
38
+ rebuildIndex(): void;
39
+ /**
40
+ * Retrieve a specific document by ID
41
+ */
42
+ get(id: string): {
43
+ content: string;
44
+ category: string;
45
+ metadata: Record<string, any>;
46
+ } | null;
47
+ /**
48
+ * Delete a document
49
+ */
50
+ delete(id: string): boolean;
51
+ /**
52
+ * Get stats
53
+ */
54
+ getStats(): {
55
+ totalDocuments: number;
56
+ categories: Record<string, number>;
57
+ vocabularySize: number;
58
+ };
59
+ /**
60
+ * Find similar documents to a given document
61
+ */
62
+ findSimilar(docId: string, limit?: number): SearchResult[];
63
+ /**
64
+ * Close database connection
65
+ */
66
+ close(): void;
67
+ }
68
+ export declare function getSemanticMemory(): SemanticMemory;
69
+ export {};
70
+ //# sourceMappingURL=semantic-memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-memory.d.ts","sourceRoot":"","sources":["../src/semantic-memory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmBH,UAAU,YAAY;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;CACf;AAqJD;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAkC;IAC5C,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,WAAW,CAAkB;gBAEzB,MAAM,CAAC,EAAE,MAAM;IAK3B,IAAI,IAAI,OAAO;IA8Cf;;OAEG;IACH,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAkB,EAAE,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAAG,OAAO;IAoB7G;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAa,GAAG,YAAY,EAAE;IAwDrG;;OAEG;IACH,OAAO,CAAC,UAAU;IA2BlB;;OAEG;IACH,YAAY,IAAI,IAAI;IAqCpB;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE,GAAG,IAAI;IAa5F;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAY3B;;OAEG;IACH,QAAQ,IAAI;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE;IAsBlG;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,YAAY,EAAE;IAM7D;;OAEG;IACH,KAAK,IAAI,IAAI;CAMd;AAKD,wBAAgB,iBAAiB,IAAI,cAAc,CAMlD"}
@@ -0,0 +1,430 @@
1
+ "use strict";
2
+ /**
3
+ * Semantic Memory - TF-IDF based vector search using SQLite
4
+ * No external API or ML library required. Production-ready.
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.SemanticMemory = void 0;
11
+ exports.getSemanticMemory = getSemanticMemory;
12
+ const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
13
+ const path_1 = __importDefault(require("path"));
14
+ const fs_1 = __importDefault(require("fs"));
15
+ const logger_1 = require("./logger");
16
+ const logger = (0, logger_1.getLogger)();
17
+ /**
18
+ * TF-IDF Vectorizer - converts text to numerical vectors for similarity search
19
+ */
20
+ class TFIDFVectorizer {
21
+ vocabulary = new Map();
22
+ idf = new Map();
23
+ vocabSize = 0;
24
+ documentCount = 0;
25
+ documentFreq = new Map();
26
+ // Tokenize text into terms
27
+ tokenize(text) {
28
+ return text
29
+ .toLowerCase()
30
+ .replace(/[^\w\s]/g, ' ')
31
+ .split(/\s+/)
32
+ .filter(t => t.length > 1 && t.length < 50)
33
+ .filter(t => !this.isStopWord(t));
34
+ }
35
+ isStopWord(word) {
36
+ const stopWords = new Set([
37
+ 'the', 'a', 'an', 'is', 'are', 'was', 'were', 'be', 'been', 'being',
38
+ 'have', 'has', 'had', 'do', 'does', 'did', 'will', 'would', 'could',
39
+ 'should', 'may', 'might', 'shall', 'can', 'need', 'dare', 'ought',
40
+ 'used', 'to', 'of', 'in', 'for', 'on', 'with', 'at', 'by', 'from',
41
+ 'as', 'into', 'through', 'during', 'before', 'after', 'above', 'below',
42
+ 'between', 'out', 'off', 'over', 'under', 'again', 'further', 'then',
43
+ 'once', 'here', 'there', 'when', 'where', 'why', 'how', 'all', 'each',
44
+ 'every', 'both', 'few', 'more', 'most', 'other', 'some', 'such', 'no',
45
+ 'not', 'only', 'own', 'same', 'so', 'than', 'too', 'very', 'just',
46
+ 'because', 'but', 'and', 'or', 'if', 'while', 'that', 'this', 'it',
47
+ 'its', 'his', 'her', 'their', 'my', 'your', 'our', 'we', 'they',
48
+ 'he', 'she', 'me', 'him', 'them', 'what', 'which', 'who', 'whom',
49
+ 've', 've', 'll', 're', 'don', 'doesn', 'didn', 'won', 'wouldn',
50
+ 'bir', 've', 'ile', 'bu', 'da', 'de', 'den', 'dan', 'bir',
51
+ 'var', 'yok', 'ama', 'fakat', 'icin', 'için', 'gibi', 'kadar',
52
+ ]);
53
+ return stopWords.has(word);
54
+ }
55
+ // Build or update vocabulary from a set of documents
56
+ buildVocabulary(documents) {
57
+ this.documentCount = documents.length;
58
+ this.documentFreq.clear();
59
+ // Count document frequency for each term
60
+ for (const doc of documents) {
61
+ const terms = new Set(this.tokenize(doc));
62
+ for (const term of terms) {
63
+ this.documentFreq.set(term, (this.documentFreq.get(term) || 0) + 1);
64
+ }
65
+ }
66
+ // Build vocabulary (top N terms by document frequency, excluding very rare)
67
+ const maxVocab = 5000;
68
+ const sorted = Array.from(this.documentFreq.entries())
69
+ .filter(([_, freq]) => freq >= 1) // At least 1 document
70
+ .sort((a, b) => b[1] - a[1])
71
+ .slice(0, maxVocab);
72
+ this.vocabulary.clear();
73
+ sorted.forEach(([term], idx) => this.vocabulary.set(term, idx));
74
+ this.vocabSize = this.vocabulary.size;
75
+ // Compute IDF
76
+ this.idf.clear();
77
+ for (const [term, freq] of this.documentFreq) {
78
+ if (this.vocabulary.has(term)) {
79
+ this.idf.set(term, Math.log((this.documentCount + 1) / (freq + 1)) + 1);
80
+ }
81
+ }
82
+ }
83
+ // Convert text to TF-IDF vector
84
+ vectorize(text) {
85
+ if (this.vocabSize === 0)
86
+ return [];
87
+ const terms = this.tokenize(text);
88
+ const tf = new Map();
89
+ // Count term frequency
90
+ for (const term of terms) {
91
+ tf.set(term, (tf.get(term) || 0) + 1);
92
+ }
93
+ // Build TF-IDF vector
94
+ const vector = new Array(this.vocabSize).fill(0);
95
+ const totalTerms = terms.length || 1;
96
+ for (const [term, count] of tf) {
97
+ const idx = this.vocabulary.get(term);
98
+ if (idx !== undefined) {
99
+ const termFreq = count / totalTerms;
100
+ const idfVal = this.idf.get(term) || 1;
101
+ vector[idx] = termFreq * idfVal;
102
+ }
103
+ }
104
+ // L2 normalize
105
+ const norm = Math.sqrt(vector.reduce((sum, v) => sum + v * v, 0));
106
+ if (norm > 0) {
107
+ for (let i = 0; i < vector.length; i++) {
108
+ vector[i] /= norm;
109
+ }
110
+ }
111
+ return vector;
112
+ }
113
+ // Compute cosine similarity between two vectors
114
+ static cosineSimilarity(a, b) {
115
+ if (a.length !== b.length || a.length === 0)
116
+ return 0;
117
+ let dot = 0;
118
+ for (let i = 0; i < a.length; i++) {
119
+ dot += a[i] * b[i];
120
+ }
121
+ return dot; // Vectors are already L2 normalized
122
+ }
123
+ // Serialize/deserialize for persistence
124
+ serialize() {
125
+ return JSON.stringify({
126
+ vocabulary: Array.from(this.vocabulary.entries()),
127
+ idf: Array.from(this.idf.entries()),
128
+ vocabSize: this.vocabSize,
129
+ documentCount: this.documentCount,
130
+ documentFreq: Array.from(this.documentFreq.entries()),
131
+ });
132
+ }
133
+ static deserialize(data) {
134
+ const v = new TFIDFVectorizer();
135
+ try {
136
+ const parsed = JSON.parse(data);
137
+ v.vocabulary = new Map(parsed.vocabulary);
138
+ v.idf = new Map(parsed.idf);
139
+ v.vocabSize = parsed.vocabSize;
140
+ v.documentCount = parsed.documentCount;
141
+ v.documentFreq = new Map(parsed.documentFreq);
142
+ }
143
+ catch (err) {
144
+ logger.warn(`Failed to deserialize vectorizer: ${err.message}`);
145
+ }
146
+ return v;
147
+ }
148
+ }
149
+ /**
150
+ * SemanticMemory - Full semantic search with TF-IDF vectors stored in SQLite
151
+ */
152
+ class SemanticMemory {
153
+ db = null;
154
+ vectorizer;
155
+ dbPath;
156
+ dirty = false; // Needs re-vectorization
157
+ initialized = false;
158
+ constructor(dbPath) {
159
+ this.dbPath = dbPath || path_1.default.join(process.env.HOME || '~', '.linguclaw', 'semantic-memory.db');
160
+ this.vectorizer = new TFIDFVectorizer();
161
+ }
162
+ init() {
163
+ try {
164
+ const dir = path_1.default.dirname(this.dbPath);
165
+ if (!fs_1.default.existsSync(dir))
166
+ fs_1.default.mkdirSync(dir, { recursive: true });
167
+ this.db = new better_sqlite3_1.default(this.dbPath);
168
+ // Create tables
169
+ this.db.exec(`
170
+ CREATE TABLE IF NOT EXISTS documents (
171
+ id TEXT PRIMARY KEY,
172
+ content TEXT NOT NULL,
173
+ category TEXT DEFAULT 'general',
174
+ metadata TEXT DEFAULT '{}',
175
+ embedding TEXT DEFAULT '[]',
176
+ created_at TEXT NOT NULL,
177
+ updated_at TEXT NOT NULL
178
+ )
179
+ `);
180
+ this.db.exec(`
181
+ CREATE TABLE IF NOT EXISTS vectorizer_state (
182
+ id INTEGER PRIMARY KEY CHECK (id = 1),
183
+ state TEXT NOT NULL,
184
+ updated_at TEXT NOT NULL
185
+ )
186
+ `);
187
+ this.db.exec('CREATE INDEX IF NOT EXISTS idx_doc_category ON documents(category)');
188
+ this.db.exec('CREATE INDEX IF NOT EXISTS idx_doc_created ON documents(created_at)');
189
+ // Restore vectorizer state
190
+ const stateRow = this.db.prepare('SELECT state FROM vectorizer_state WHERE id = 1').get();
191
+ if (stateRow) {
192
+ this.vectorizer = TFIDFVectorizer.deserialize(stateRow.state);
193
+ }
194
+ this.initialized = true;
195
+ logger.info(`Semantic memory initialized at ${this.dbPath}`);
196
+ return true;
197
+ }
198
+ catch (err) {
199
+ logger.error(`Semantic memory init failed: ${err.message}`);
200
+ return false;
201
+ }
202
+ }
203
+ /**
204
+ * Store a document with automatic embedding
205
+ */
206
+ store(id, content, category = 'general', metadata = {}) {
207
+ if (!this.db || !this.initialized)
208
+ return false;
209
+ try {
210
+ const now = new Date().toISOString();
211
+ const embedding = this.vectorizer.vectorize(content);
212
+ this.db.prepare(`
213
+ INSERT OR REPLACE INTO documents (id, content, category, metadata, embedding, created_at, updated_at)
214
+ VALUES (?, ?, ?, ?, ?, COALESCE((SELECT created_at FROM documents WHERE id = ?), ?), ?)
215
+ `).run(id, content, category, JSON.stringify(metadata), JSON.stringify(embedding), id, now, now);
216
+ this.dirty = true;
217
+ return true;
218
+ }
219
+ catch (err) {
220
+ logger.error(`Semantic store failed for ${id}: ${err.message}`);
221
+ return false;
222
+ }
223
+ }
224
+ /**
225
+ * Semantic search - find documents similar to query
226
+ */
227
+ search(query, limit = 10, category, minScore = 0.05) {
228
+ if (!this.db || !this.initialized)
229
+ return [];
230
+ try {
231
+ // Rebuild index if needed
232
+ if (this.dirty) {
233
+ this.rebuildIndex();
234
+ }
235
+ const queryVector = this.vectorizer.vectorize(query);
236
+ if (queryVector.length === 0) {
237
+ // Fallback to text search if vectorizer has no vocabulary
238
+ return this.textSearch(query, limit, category);
239
+ }
240
+ // Load all documents and compute similarity
241
+ let sql = 'SELECT id, content, category, metadata, embedding FROM documents';
242
+ const params = [];
243
+ if (category) {
244
+ sql += ' WHERE category = ?';
245
+ params.push(category);
246
+ }
247
+ const rows = this.db.prepare(sql).all(...params);
248
+ const scored = [];
249
+ for (const row of rows) {
250
+ try {
251
+ const docVector = JSON.parse(row.embedding);
252
+ if (docVector.length !== queryVector.length)
253
+ continue;
254
+ const score = TFIDFVectorizer.cosineSimilarity(queryVector, docVector);
255
+ if (score >= minScore) {
256
+ scored.push({
257
+ id: row.id,
258
+ content: row.content,
259
+ category: row.category,
260
+ metadata: JSON.parse(row.metadata),
261
+ score,
262
+ });
263
+ }
264
+ }
265
+ catch {
266
+ // Skip documents with invalid embeddings
267
+ }
268
+ }
269
+ // Sort by score descending
270
+ scored.sort((a, b) => b.score - a.score);
271
+ return scored.slice(0, limit);
272
+ }
273
+ catch (err) {
274
+ logger.error(`Semantic search failed: ${err.message}`);
275
+ return [];
276
+ }
277
+ }
278
+ /**
279
+ * Text-based fallback search
280
+ */
281
+ textSearch(query, limit, category) {
282
+ if (!this.db)
283
+ return [];
284
+ let sql = 'SELECT id, content, category, metadata FROM documents WHERE content LIKE ?';
285
+ const params = [`%${query}%`];
286
+ if (category) {
287
+ sql += ' AND category = ?';
288
+ params.push(category);
289
+ }
290
+ sql += ' LIMIT ?';
291
+ params.push(limit);
292
+ const rows = this.db.prepare(sql).all(...params);
293
+ return rows.map(row => {
294
+ let metadata = {};
295
+ try {
296
+ metadata = JSON.parse(row.metadata || '{}');
297
+ }
298
+ catch { /* skip invalid */ }
299
+ return {
300
+ id: row.id,
301
+ content: row.content,
302
+ category: row.category,
303
+ metadata,
304
+ score: 0.5,
305
+ };
306
+ });
307
+ }
308
+ /**
309
+ * Rebuild TF-IDF index from all documents
310
+ */
311
+ rebuildIndex() {
312
+ if (!this.db)
313
+ return;
314
+ try {
315
+ const rows = this.db.prepare('SELECT id, content FROM documents').all();
316
+ if (rows.length === 0) {
317
+ this.dirty = false;
318
+ return;
319
+ }
320
+ // Rebuild vocabulary
321
+ this.vectorizer.buildVocabulary(rows.map(r => r.content));
322
+ // Re-embed all documents
323
+ const updateStmt = this.db.prepare('UPDATE documents SET embedding = ? WHERE id = ?');
324
+ const transaction = this.db.transaction(() => {
325
+ for (const row of rows) {
326
+ const embedding = this.vectorizer.vectorize(row.content);
327
+ updateStmt.run(JSON.stringify(embedding), row.id);
328
+ }
329
+ });
330
+ transaction();
331
+ // Save vectorizer state
332
+ this.db.prepare(`
333
+ INSERT OR REPLACE INTO vectorizer_state (id, state, updated_at)
334
+ VALUES (1, ?, ?)
335
+ `).run(this.vectorizer.serialize(), new Date().toISOString());
336
+ this.dirty = false;
337
+ logger.info(`Semantic index rebuilt: ${rows.length} documents`);
338
+ }
339
+ catch (err) {
340
+ logger.error(`Index rebuild failed: ${err.message}`);
341
+ }
342
+ }
343
+ /**
344
+ * Retrieve a specific document by ID
345
+ */
346
+ get(id) {
347
+ if (!this.db)
348
+ return null;
349
+ try {
350
+ const row = this.db.prepare('SELECT content, category, metadata FROM documents WHERE id = ?').get(id);
351
+ if (!row)
352
+ return null;
353
+ return { content: row.content, category: row.category, metadata: JSON.parse(row.metadata || '{}') };
354
+ }
355
+ catch (err) {
356
+ logger.error(`Semantic get failed for ${id}: ${err.message}`);
357
+ return null;
358
+ }
359
+ }
360
+ /**
361
+ * Delete a document
362
+ */
363
+ delete(id) {
364
+ if (!this.db)
365
+ return false;
366
+ try {
367
+ const result = this.db.prepare('DELETE FROM documents WHERE id = ?').run(id);
368
+ if (result.changes > 0)
369
+ this.dirty = true;
370
+ return result.changes > 0;
371
+ }
372
+ catch (err) {
373
+ logger.error(`Semantic delete failed for ${id}: ${err.message}`);
374
+ return false;
375
+ }
376
+ }
377
+ /**
378
+ * Get stats
379
+ */
380
+ getStats() {
381
+ if (!this.db)
382
+ return { totalDocuments: 0, categories: {}, vocabularySize: 0 };
383
+ try {
384
+ const total = this.db.prepare('SELECT COUNT(*) as count FROM documents').get().count;
385
+ const catRows = this.db.prepare('SELECT category, COUNT(*) as count FROM documents GROUP BY category').all();
386
+ const categories = {};
387
+ for (const row of catRows) {
388
+ categories[row.category] = row.count;
389
+ }
390
+ return {
391
+ totalDocuments: total,
392
+ categories,
393
+ vocabularySize: this.vectorizer['vocabSize'] || 0,
394
+ };
395
+ }
396
+ catch (err) {
397
+ logger.error(`Semantic stats failed: ${err.message}`);
398
+ return { totalDocuments: 0, categories: {}, vocabularySize: 0 };
399
+ }
400
+ }
401
+ /**
402
+ * Find similar documents to a given document
403
+ */
404
+ findSimilar(docId, limit = 5) {
405
+ const doc = this.get(docId);
406
+ if (!doc)
407
+ return [];
408
+ return this.search(doc.content, limit + 1).filter(r => r.id !== docId).slice(0, limit);
409
+ }
410
+ /**
411
+ * Close database connection
412
+ */
413
+ close() {
414
+ if (this.db) {
415
+ this.db.close();
416
+ this.db = null;
417
+ }
418
+ }
419
+ }
420
+ exports.SemanticMemory = SemanticMemory;
421
+ // Global instance
422
+ let semanticMemoryInstance = null;
423
+ function getSemanticMemory() {
424
+ if (!semanticMemoryInstance) {
425
+ semanticMemoryInstance = new SemanticMemory();
426
+ semanticMemoryInstance.init();
427
+ }
428
+ return semanticMemoryInstance;
429
+ }
430
+ //# sourceMappingURL=semantic-memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-memory.js","sourceRoot":"","sources":["../src/semantic-memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Skills system - modular automation and task execution
3
+ * TypeScript equivalent of Python skills.py
4
+ */
5
+ import { SkillType, SkillResult } from './types';
6
+ export declare abstract class BaseSkill {
7
+ abstract readonly NAME: string;
8
+ abstract readonly DESCRIPTION: string;
9
+ abstract readonly VERSION: string;
10
+ abstract readonly AUTHOR: string;
11
+ abstract readonly TYPE: SkillType;
12
+ config: Record<string, any>;
13
+ constructor(config?: Record<string, any>);
14
+ abstract execute(params: Record<string, any>): Promise<SkillResult>;
15
+ getSchema(): Record<string, any>;
16
+ }
17
+ export declare class EmailSkill extends BaseSkill {
18
+ NAME: string;
19
+ DESCRIPTION: string;
20
+ VERSION: string;
21
+ AUTHOR: string;
22
+ TYPE: SkillType;
23
+ execute(params: Record<string, any>): Promise<SkillResult>;
24
+ private sendEmail;
25
+ }
26
+ export declare class CalendarSkill extends BaseSkill {
27
+ NAME: string;
28
+ DESCRIPTION: string;
29
+ VERSION: string;
30
+ AUTHOR: string;
31
+ TYPE: SkillType;
32
+ execute(params: Record<string, any>): Promise<SkillResult>;
33
+ private createEvent;
34
+ }
35
+ export declare class FileSkill extends BaseSkill {
36
+ NAME: string;
37
+ DESCRIPTION: string;
38
+ VERSION: string;
39
+ AUTHOR: string;
40
+ TYPE: SkillType;
41
+ execute(params: Record<string, any>): Promise<SkillResult>;
42
+ private organizeFiles;
43
+ private searchFiles;
44
+ private backupFiles;
45
+ private copyRecursive;
46
+ }
47
+ export declare class WebSearchSkill extends BaseSkill {
48
+ NAME: string;
49
+ DESCRIPTION: string;
50
+ VERSION: string;
51
+ AUTHOR: string;
52
+ TYPE: SkillType;
53
+ execute(params: Record<string, any>): Promise<SkillResult>;
54
+ private search;
55
+ private fetchPage;
56
+ }
57
+ export declare class SystemSkill extends BaseSkill {
58
+ NAME: string;
59
+ DESCRIPTION: string;
60
+ VERSION: string;
61
+ AUTHOR: string;
62
+ TYPE: SkillType;
63
+ execute(params: Record<string, any>): Promise<SkillResult>;
64
+ private systemInfo;
65
+ private getUptime;
66
+ private getDisk;
67
+ private safeExec;
68
+ }
69
+ export declare class NoteSkill extends BaseSkill {
70
+ NAME: string;
71
+ DESCRIPTION: string;
72
+ VERSION: string;
73
+ AUTHOR: string;
74
+ TYPE: SkillType;
75
+ private notesPath;
76
+ constructor(config?: Record<string, any>);
77
+ execute(params: Record<string, any>): Promise<SkillResult>;
78
+ private loadNotes;
79
+ private saveNotes;
80
+ private addNote;
81
+ private listNotes;
82
+ private searchNotes;
83
+ private deleteNote;
84
+ }
85
+ export declare class SkillManager {
86
+ skills: Map<string, BaseSkill>;
87
+ skillsDir: string;
88
+ constructor(skillsDir?: string);
89
+ register(skill: BaseSkill): void;
90
+ unregister(name: string): void;
91
+ get(name: string): BaseSkill | undefined;
92
+ listSkills(): Array<Record<string, any>>;
93
+ execute(skillName: string, params: Record<string, any>): Promise<SkillResult>;
94
+ loadBuiltinSkills(): void;
95
+ }
96
+ export declare function getSkillManager(): SkillManager;
97
+ //# sourceMappingURL=skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"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"}