antri_cli 1.26.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 (171) hide show
  1. package/README.md +92 -0
  2. package/bin/antri.js +2 -0
  3. package/dist/cli/banner.d.ts +22 -0
  4. package/dist/cli/banner.d.ts.map +1 -0
  5. package/dist/cli/banner.js +133 -0
  6. package/dist/cli/banner.js.map +1 -0
  7. package/dist/cli/dialogs/filePicker.d.ts +23 -0
  8. package/dist/cli/dialogs/filePicker.d.ts.map +1 -0
  9. package/dist/cli/dialogs/filePicker.js +106 -0
  10. package/dist/cli/dialogs/filePicker.js.map +1 -0
  11. package/dist/cli/dialogs/modelPicker.d.ts +10 -0
  12. package/dist/cli/dialogs/modelPicker.d.ts.map +1 -0
  13. package/dist/cli/dialogs/modelPicker.js +205 -0
  14. package/dist/cli/dialogs/modelPicker.js.map +1 -0
  15. package/dist/cli/dialogs/profilePicker.d.ts +11 -0
  16. package/dist/cli/dialogs/profilePicker.d.ts.map +1 -0
  17. package/dist/cli/dialogs/profilePicker.js +185 -0
  18. package/dist/cli/dialogs/profilePicker.js.map +1 -0
  19. package/dist/cli/dialogs/providerPicker.d.ts +19 -0
  20. package/dist/cli/dialogs/providerPicker.d.ts.map +1 -0
  21. package/dist/cli/dialogs/providerPicker.js +205 -0
  22. package/dist/cli/dialogs/providerPicker.js.map +1 -0
  23. package/dist/cli/prompt.d.ts +3 -0
  24. package/dist/cli/prompt.d.ts.map +1 -0
  25. package/dist/cli/prompt.js +50 -0
  26. package/dist/cli/prompt.js.map +1 -0
  27. package/dist/cli/promptToolkit.d.ts +14 -0
  28. package/dist/cli/promptToolkit.d.ts.map +1 -0
  29. package/dist/cli/promptToolkit.js +389 -0
  30. package/dist/cli/promptToolkit.js.map +1 -0
  31. package/dist/cli/renderer.d.ts +21 -0
  32. package/dist/cli/renderer.d.ts.map +1 -0
  33. package/dist/cli/renderer.js +97 -0
  34. package/dist/cli/renderer.js.map +1 -0
  35. package/dist/cli/shortcuts.d.ts +13 -0
  36. package/dist/cli/shortcuts.d.ts.map +1 -0
  37. package/dist/cli/shortcuts.js +414 -0
  38. package/dist/cli/shortcuts.js.map +1 -0
  39. package/dist/core/agent.d.ts +15 -0
  40. package/dist/core/agent.d.ts.map +1 -0
  41. package/dist/core/agent.js +232 -0
  42. package/dist/core/agent.js.map +1 -0
  43. package/dist/core/citations.d.ts +19 -0
  44. package/dist/core/citations.d.ts.map +1 -0
  45. package/dist/core/citations.js +40 -0
  46. package/dist/core/citations.js.map +1 -0
  47. package/dist/core/config.d.ts +16 -0
  48. package/dist/core/config.d.ts.map +1 -0
  49. package/dist/core/config.js +172 -0
  50. package/dist/core/config.js.map +1 -0
  51. package/dist/core/crawler.d.ts +18 -0
  52. package/dist/core/crawler.d.ts.map +1 -0
  53. package/dist/core/crawler.js +83 -0
  54. package/dist/core/crawler.js.map +1 -0
  55. package/dist/core/debugger.d.ts +20 -0
  56. package/dist/core/debugger.d.ts.map +1 -0
  57. package/dist/core/debugger.js +105 -0
  58. package/dist/core/debugger.js.map +1 -0
  59. package/dist/core/dialectic.d.ts +23 -0
  60. package/dist/core/dialectic.d.ts.map +1 -0
  61. package/dist/core/dialectic.js +300 -0
  62. package/dist/core/dialectic.js.map +1 -0
  63. package/dist/core/goalLoop.d.ts +14 -0
  64. package/dist/core/goalLoop.d.ts.map +1 -0
  65. package/dist/core/goalLoop.js +104 -0
  66. package/dist/core/goalLoop.js.map +1 -0
  67. package/dist/core/history.d.ts +13 -0
  68. package/dist/core/history.d.ts.map +1 -0
  69. package/dist/core/history.js +53 -0
  70. package/dist/core/history.js.map +1 -0
  71. package/dist/core/metaOptimizer.d.ts +27 -0
  72. package/dist/core/metaOptimizer.d.ts.map +1 -0
  73. package/dist/core/metaOptimizer.js +98 -0
  74. package/dist/core/metaOptimizer.js.map +1 -0
  75. package/dist/core/sandbox.d.ts +29 -0
  76. package/dist/core/sandbox.d.ts.map +1 -0
  77. package/dist/core/sandbox.js +141 -0
  78. package/dist/core/sandbox.js.map +1 -0
  79. package/dist/core/scraper.d.ts +22 -0
  80. package/dist/core/scraper.d.ts.map +1 -0
  81. package/dist/core/scraper.js +180 -0
  82. package/dist/core/scraper.js.map +1 -0
  83. package/dist/core/search.d.ts +27 -0
  84. package/dist/core/search.d.ts.map +1 -0
  85. package/dist/core/search.js +222 -0
  86. package/dist/core/search.js.map +1 -0
  87. package/dist/core/skillSynthesizer.d.ts +43 -0
  88. package/dist/core/skillSynthesizer.d.ts.map +1 -0
  89. package/dist/core/skillSynthesizer.js +147 -0
  90. package/dist/core/skillSynthesizer.js.map +1 -0
  91. package/dist/core/tools.d.ts +12 -0
  92. package/dist/core/tools.d.ts.map +1 -0
  93. package/dist/core/tools.js +467 -0
  94. package/dist/core/tools.js.map +1 -0
  95. package/dist/core/updater.d.ts +9 -0
  96. package/dist/core/updater.d.ts.map +1 -0
  97. package/dist/core/updater.js +63 -0
  98. package/dist/core/updater.js.map +1 -0
  99. package/dist/index.d.ts +3 -0
  100. package/dist/index.d.ts.map +1 -0
  101. package/dist/index.js +92 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/memory/consolidation.d.ts +17 -0
  104. package/dist/memory/consolidation.d.ts.map +1 -0
  105. package/dist/memory/consolidation.js +42 -0
  106. package/dist/memory/consolidation.js.map +1 -0
  107. package/dist/memory/episodic.d.ts +15 -0
  108. package/dist/memory/episodic.d.ts.map +1 -0
  109. package/dist/memory/episodic.js +97 -0
  110. package/dist/memory/episodic.js.map +1 -0
  111. package/dist/memory/manager.d.ts +24 -0
  112. package/dist/memory/manager.d.ts.map +1 -0
  113. package/dist/memory/manager.js +97 -0
  114. package/dist/memory/manager.js.map +1 -0
  115. package/dist/memory/profile.d.ts +21 -0
  116. package/dist/memory/profile.d.ts.map +1 -0
  117. package/dist/memory/profile.js +111 -0
  118. package/dist/memory/profile.js.map +1 -0
  119. package/dist/memory/semantic.d.ts +24 -0
  120. package/dist/memory/semantic.d.ts.map +1 -0
  121. package/dist/memory/semantic.js +102 -0
  122. package/dist/memory/semantic.js.map +1 -0
  123. package/dist/memory/types.d.ts +45 -0
  124. package/dist/memory/types.d.ts.map +1 -0
  125. package/dist/memory/types.js +2 -0
  126. package/dist/memory/types.js.map +1 -0
  127. package/dist/memory/vectorStore.d.ts +18 -0
  128. package/dist/memory/vectorStore.d.ts.map +1 -0
  129. package/dist/memory/vectorStore.js +103 -0
  130. package/dist/memory/vectorStore.js.map +1 -0
  131. package/dist/profiles/profileManager.d.ts +25 -0
  132. package/dist/profiles/profileManager.d.ts.map +1 -0
  133. package/dist/profiles/profileManager.js +205 -0
  134. package/dist/profiles/profileManager.js.map +1 -0
  135. package/dist/providers/anthropic.d.ts +14 -0
  136. package/dist/providers/anthropic.d.ts.map +1 -0
  137. package/dist/providers/anthropic.js +80 -0
  138. package/dist/providers/anthropic.js.map +1 -0
  139. package/dist/providers/base.d.ts +7 -0
  140. package/dist/providers/base.d.ts.map +1 -0
  141. package/dist/providers/base.js +2 -0
  142. package/dist/providers/base.js.map +1 -0
  143. package/dist/providers/gemini.d.ts +14 -0
  144. package/dist/providers/gemini.d.ts.map +1 -0
  145. package/dist/providers/gemini.js +77 -0
  146. package/dist/providers/gemini.js.map +1 -0
  147. package/dist/providers/index.d.ts +4 -0
  148. package/dist/providers/index.d.ts.map +1 -0
  149. package/dist/providers/index.js +65 -0
  150. package/dist/providers/index.js.map +1 -0
  151. package/dist/providers/mock.d.ts +8 -0
  152. package/dist/providers/mock.d.ts.map +1 -0
  153. package/dist/providers/mock.js +62 -0
  154. package/dist/providers/mock.js.map +1 -0
  155. package/dist/providers/models.d.ts +8 -0
  156. package/dist/providers/models.d.ts.map +1 -0
  157. package/dist/providers/models.js +403 -0
  158. package/dist/providers/models.js.map +1 -0
  159. package/dist/providers/openai.d.ts +18 -0
  160. package/dist/providers/openai.d.ts.map +1 -0
  161. package/dist/providers/openai.js +162 -0
  162. package/dist/providers/openai.js.map +1 -0
  163. package/dist/types.d.ts +116 -0
  164. package/dist/types.d.ts.map +1 -0
  165. package/dist/types.js +2 -0
  166. package/dist/types.js.map +1 -0
  167. package/dist/utils/logger.d.ts +23 -0
  168. package/dist/utils/logger.d.ts.map +1 -0
  169. package/dist/utils/logger.js +26 -0
  170. package/dist/utils/logger.js.map +1 -0
  171. package/package.json +57 -0
@@ -0,0 +1,102 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import os from 'os';
4
+ import { VectorStore } from './vectorStore.js';
5
+ const MEMORY_DIR = path.join(os.homedir(), '.antri', 'memory');
6
+ const SEMANTIC_FILE = path.join(MEMORY_DIR, 'semantic_store.json');
7
+ export class SemanticMemory {
8
+ items = [];
9
+ constructor() {
10
+ this.ensureDirectory();
11
+ this.load();
12
+ this.seedInitialKnowledge();
13
+ }
14
+ ensureDirectory() {
15
+ if (!fs.existsSync(MEMORY_DIR)) {
16
+ fs.mkdirSync(MEMORY_DIR, { recursive: true });
17
+ }
18
+ }
19
+ load() {
20
+ try {
21
+ if (fs.existsSync(SEMANTIC_FILE)) {
22
+ const raw = fs.readFileSync(SEMANTIC_FILE, 'utf-8');
23
+ this.items = JSON.parse(raw);
24
+ }
25
+ }
26
+ catch {
27
+ this.items = [];
28
+ }
29
+ }
30
+ save() {
31
+ try {
32
+ this.ensureDirectory();
33
+ fs.writeFileSync(SEMANTIC_FILE, JSON.stringify(this.items, null, 2), 'utf-8');
34
+ }
35
+ catch { }
36
+ }
37
+ /**
38
+ * Indexes a new knowledge snippet into the vector store
39
+ */
40
+ async store(text, category = 'lesson_learned', metadata = {}, geminiApiKey) {
41
+ const vector = await VectorStore.generateEmbedding(text, geminiApiKey);
42
+ const item = {
43
+ id: `sem_${Date.now()}_${Math.random().toString(36).substring(2, 7)}`,
44
+ timestamp: Date.now(),
45
+ text,
46
+ category,
47
+ vector,
48
+ metadata,
49
+ };
50
+ this.items.push(item);
51
+ this.save();
52
+ return item;
53
+ }
54
+ /**
55
+ * Performs semantic vector cosine similarity search
56
+ */
57
+ async search(query, topK = 3, threshold = 0.25, geminiApiKey) {
58
+ if (this.items.length === 0)
59
+ return [];
60
+ const queryVector = await VectorStore.generateEmbedding(query, geminiApiKey);
61
+ const scored = this.items.map((item) => {
62
+ const similarity = VectorStore.cosineSimilarity(queryVector, item.vector);
63
+ return { item, similarity };
64
+ });
65
+ return scored
66
+ .filter((s) => s.similarity >= threshold)
67
+ .sort((a, b) => b.similarity - a.similarity)
68
+ .slice(0, topK);
69
+ }
70
+ count() {
71
+ return this.items.length;
72
+ }
73
+ getAll() {
74
+ return this.items;
75
+ }
76
+ clear() {
77
+ this.items = [];
78
+ this.save();
79
+ }
80
+ async seedInitialKnowledge() {
81
+ if (this.items.length === 0) {
82
+ const initialNuggets = [
83
+ {
84
+ text: 'In TypeScript projects with NodeNext ESM modules, always use .js file extensions in relative imports even when authoring .ts source files.',
85
+ category: 'architecture_insight',
86
+ },
87
+ {
88
+ text: 'When performing raw-mode terminal line erasure, using upward relative movement without extra newlines prevents off-by-one cursor overwrites.',
89
+ category: 'problem_solution',
90
+ },
91
+ {
92
+ text: 'NVIDIA NIM endpoints on standard developer accounts execute ultra-fast inference on meta/llama-3.1-8b-instruct and Step 3.7 Flash models.',
93
+ category: 'api_guide',
94
+ },
95
+ ];
96
+ for (const nug of initialNuggets) {
97
+ await this.store(nug.text, nug.category, { tags: ['best-practices'] });
98
+ }
99
+ }
100
+ }
101
+ }
102
+ //# sourceMappingURL=semantic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic.js","sourceRoot":"","sources":["../../src/memory/semantic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ export interface Episode {
2
+ id: string;
3
+ timestamp: number;
4
+ sessionId: string;
5
+ query: string;
6
+ response: string;
7
+ toolsUsed: string[];
8
+ debateStages?: string[];
9
+ tags: string[];
10
+ }
11
+ export interface SemanticVectorItem {
12
+ id: string;
13
+ timestamp: number;
14
+ text: string;
15
+ category: 'problem_solution' | 'architecture_insight' | 'api_guide' | 'lesson_learned' | 'domain_knowledge';
16
+ vector: number[];
17
+ metadata: {
18
+ sourceQuery?: string;
19
+ workspace?: string;
20
+ tags?: string[];
21
+ confidence?: number;
22
+ };
23
+ }
24
+ export interface UserProfileMemory {
25
+ userName?: string;
26
+ preferredLanguage?: string;
27
+ codeStyle?: {
28
+ indentation?: string;
29
+ typingStrictness?: string;
30
+ testFramework?: string;
31
+ };
32
+ preferredModels?: string[];
33
+ customRules: string[];
34
+ totalSessions: number;
35
+ totalQueries: number;
36
+ lastConsolidatedAt?: number;
37
+ }
38
+ export interface RecalledContext {
39
+ episodes: Episode[];
40
+ semanticInsights: SemanticVectorItem[];
41
+ workspaceConventions: string[];
42
+ userPreferences: string[];
43
+ hasMemories: boolean;
44
+ }
45
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/memory/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,kBAAkB,GAAG,sBAAsB,GAAG,WAAW,GAAG,gBAAgB,GAAG,kBAAkB,CAAC;IAC5G,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE;QACR,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE;QACV,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,gBAAgB,EAAE,kBAAkB,EAAE,CAAC;IACvC,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,EAAE,OAAO,CAAC;CACtB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/memory/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ export declare class VectorStore {
2
+ private static readonly VECTOR_DIM;
3
+ /**
4
+ * Generates a normalized semantic embedding vector for a given text
5
+ */
6
+ static generateEmbedding(text: string, geminiApiKey?: string): Promise<number[]>;
7
+ /**
8
+ * Generates a 128-dimensional dense semantic feature vector
9
+ */
10
+ private static generateLocalSemanticVector;
11
+ /**
12
+ * Calculates cosine similarity between two vectors (-1.0 to 1.0)
13
+ */
14
+ static cosineSimilarity(a: number[], b: number[]): number;
15
+ private static normalize;
16
+ private static hashString;
17
+ }
18
+ //# sourceMappingURL=vectorStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vectorStore.d.ts","sourceRoot":"","sources":["../../src/memory/vectorStore.ts"],"names":[],"mappings":"AAAA,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAO;IAEzC;;OAEG;WACiB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA+B7F;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,2BAA2B;IAqC1C;;OAEG;WACW,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM;IAiBhE,OAAO,CAAC,MAAM,CAAC,SAAS;IAQxB,OAAO,CAAC,MAAM,CAAC,UAAU;CAO1B"}
@@ -0,0 +1,103 @@
1
+ export class VectorStore {
2
+ static VECTOR_DIM = 128;
3
+ /**
4
+ * Generates a normalized semantic embedding vector for a given text
5
+ */
6
+ static async generateEmbedding(text, geminiApiKey) {
7
+ // 1. Try Gemini Embeddings API if key is available
8
+ if (geminiApiKey) {
9
+ try {
10
+ const res = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/text-embedding-004:embedContent?key=${geminiApiKey}`, {
11
+ method: 'POST',
12
+ headers: { 'Content-Type': 'application/json' },
13
+ body: JSON.stringify({
14
+ model: 'models/text-embedding-004',
15
+ content: { parts: [{ text }] },
16
+ }),
17
+ signal: AbortSignal.timeout(3000),
18
+ });
19
+ if (res.ok) {
20
+ const data = (await res.json());
21
+ if (data.embedding?.values && Array.isArray(data.embedding.values)) {
22
+ return this.normalize(data.embedding.values.slice(0, this.VECTOR_DIM));
23
+ }
24
+ }
25
+ }
26
+ catch {
27
+ // Fallback to local semantic vectorizer
28
+ }
29
+ }
30
+ // 2. High-performance deterministic Semantic Bag-of-Subwords & N-gram Vectorizer
31
+ return this.generateLocalSemanticVector(text);
32
+ }
33
+ /**
34
+ * Generates a 128-dimensional dense semantic feature vector
35
+ */
36
+ static generateLocalSemanticVector(text) {
37
+ const vector = new Array(this.VECTOR_DIM).fill(0);
38
+ const cleaned = text.toLowerCase().replace(/[^a-z0-9_\-\s]/g, ' ');
39
+ const tokens = cleaned.split(/\s+/).filter((t) => t.length > 1);
40
+ if (tokens.length === 0)
41
+ return vector;
42
+ // Token frequency & semantic hash projection
43
+ for (let i = 0; i < tokens.length; i++) {
44
+ const token = tokens[i];
45
+ const weight = 1 / Math.sqrt(i + 1);
46
+ // Unigram hash
47
+ const h1 = this.hashString(token);
48
+ const idx1 = Math.abs(h1) % this.VECTOR_DIM;
49
+ vector[idx1] += (h1 > 0 ? 1 : -1) * weight * 1.5;
50
+ // Bigram hash if possible
51
+ if (i < tokens.length - 1) {
52
+ const bigram = `${token}_${tokens[i + 1]}`;
53
+ const h2 = this.hashString(bigram);
54
+ const idx2 = Math.abs(h2) % this.VECTOR_DIM;
55
+ vector[idx2] += (h2 > 0 ? 1 : -1) * weight * 2.0;
56
+ }
57
+ // Subword character trigrams
58
+ for (let j = 0; j <= token.length - 3; j++) {
59
+ const tri = token.slice(j, j + 3);
60
+ const h3 = this.hashString(tri);
61
+ const idx3 = Math.abs(h3) % this.VECTOR_DIM;
62
+ vector[idx3] += (h3 > 0 ? 1 : -1) * 0.4;
63
+ }
64
+ }
65
+ return this.normalize(vector);
66
+ }
67
+ /**
68
+ * Calculates cosine similarity between two vectors (-1.0 to 1.0)
69
+ */
70
+ static cosineSimilarity(a, b) {
71
+ if (!a || !b || a.length === 0 || b.length === 0)
72
+ return 0;
73
+ const len = Math.min(a.length, b.length);
74
+ let dot = 0;
75
+ let normA = 0;
76
+ let normB = 0;
77
+ for (let i = 0; i < len; i++) {
78
+ dot += a[i] * b[i];
79
+ normA += a[i] * a[i];
80
+ normB += b[i] * b[i];
81
+ }
82
+ if (normA === 0 || normB === 0)
83
+ return 0;
84
+ return dot / (Math.sqrt(normA) * Math.sqrt(normB));
85
+ }
86
+ static normalize(vec) {
87
+ let norm = 0;
88
+ for (const v of vec)
89
+ norm += v * v;
90
+ norm = Math.sqrt(norm);
91
+ if (norm === 0)
92
+ return vec;
93
+ return vec.map((v) => v / norm);
94
+ }
95
+ static hashString(str) {
96
+ let hash = 5381;
97
+ for (let i = 0; i < str.length; i++) {
98
+ hash = (hash * 33) ^ str.charCodeAt(i);
99
+ }
100
+ return hash;
101
+ }
102
+ }
103
+ //# sourceMappingURL=vectorStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vectorStore.js","sourceRoot":"","sources":["../../src/memory/vectorStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { ProfileInfo } from '../types.js';
2
+ export declare class ProfileManager {
3
+ private profilesDir;
4
+ private activeProfile;
5
+ constructor(customDir?: string);
6
+ private ensureDirectory;
7
+ private initDefaultProfile;
8
+ private loadActiveProfileName;
9
+ getActiveProfileName(): string;
10
+ setActiveProfile(name: string): boolean;
11
+ listProfiles(): ProfileInfo[];
12
+ getActiveProfileContent(): string;
13
+ createProfile(name: string, description?: string): ProfileInfo;
14
+ /**
15
+ * Appends an observed user insight, preference, or feedback item to active profile markdown
16
+ */
17
+ appendNoteToActiveProfile(note: string): void;
18
+ /**
19
+ * Real-time feedback and preference extractor: Analyzes user prompt for thinking styles, feedback, or directives
20
+ */
21
+ extractAndRecordNotes(userPrompt: string): string | null;
22
+ renderActiveProfile(): void;
23
+ }
24
+ export declare const profileManager: ProfileManager;
25
+ //# sourceMappingURL=profileManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profileManager.d.ts","sourceRoot":"","sources":["../../src/profiles/profileManager.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK1C,qBAAa,cAAc;IACzB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,aAAa,CAAuB;gBAEhC,SAAS,CAAC,EAAE,MAAM;IAO9B,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,kBAAkB;IAuB1B,OAAO,CAAC,qBAAqB;IAatB,oBAAoB,IAAI,MAAM;IAI9B,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAkBvC,YAAY,IAAI,WAAW,EAAE;IAyC7B,uBAAuB,IAAI,MAAM;IAUjC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,WAAW;IAiCrE;;OAEG;IACI,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAwBpD;;OAEG;IACI,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAuBxD,mBAAmB,IAAI,IAAI;CAQnC;AAED,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
@@ -0,0 +1,205 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import os from 'os';
4
+ import chalk from 'chalk';
5
+ const PROFILES_DIR = path.join(os.homedir(), '.antri', 'profiles');
6
+ const ACTIVE_PROFILE_FILE = path.join(PROFILES_DIR, '.active_profile');
7
+ export class ProfileManager {
8
+ profilesDir;
9
+ activeProfile = 'profile_1';
10
+ constructor(customDir) {
11
+ this.profilesDir = customDir || PROFILES_DIR;
12
+ this.ensureDirectory();
13
+ this.initDefaultProfile();
14
+ this.loadActiveProfileName();
15
+ }
16
+ ensureDirectory() {
17
+ if (!fs.existsSync(this.profilesDir)) {
18
+ fs.mkdirSync(this.profilesDir, { recursive: true });
19
+ }
20
+ }
21
+ initDefaultProfile() {
22
+ const profile1Path = path.join(this.profilesDir, 'profile_1.md');
23
+ if (!fs.existsSync(profile1Path)) {
24
+ const template = `# šŸ‘¤ User Profile: profile_1
25
+ - Created: ${new Date().toISOString()}
26
+ - Description: Default user profile for proactive guidance, step-by-step roadmaps, and adaptive notes.
27
+
28
+ ## 🧠 Style of Thinking & Preferences
29
+ - Communication: Direct, structured, asks clarifying questions when decisions have trade-offs.
30
+ - Execution: Leads the way step-by-step with clear explanations.
31
+ - Adaptability: Continuously incorporates user feedback and refines solutions.
32
+
33
+ ## šŸ“ Notes & Captured Insights
34
+ - [${new Date().toLocaleDateString()}]: Initialized profile_1. Leading the way and taking notes on user thinking style.
35
+
36
+ ## šŸ› ļø Code Conventions & Architectural Preferences
37
+ - Architecture: Modular, clean, idiomatic code with explicit type safety.
38
+ - Documentation: Self-documenting code with concise explanations.
39
+ `;
40
+ fs.writeFileSync(profile1Path, template, 'utf-8');
41
+ }
42
+ }
43
+ loadActiveProfileName() {
44
+ try {
45
+ if (fs.existsSync(ACTIVE_PROFILE_FILE)) {
46
+ const name = fs.readFileSync(ACTIVE_PROFILE_FILE, 'utf-8').trim();
47
+ if (name && fs.existsSync(path.join(this.profilesDir, `${name}.md`))) {
48
+ this.activeProfile = name;
49
+ return;
50
+ }
51
+ }
52
+ }
53
+ catch { }
54
+ this.activeProfile = 'profile_1';
55
+ }
56
+ getActiveProfileName() {
57
+ return this.activeProfile;
58
+ }
59
+ setActiveProfile(name) {
60
+ const cleanName = name.replace(/\.md$/, '').trim();
61
+ const targetPath = path.join(this.profilesDir, `${cleanName}.md`);
62
+ if (!fs.existsSync(targetPath)) {
63
+ // Auto-create if not exists
64
+ this.createProfile(cleanName);
65
+ }
66
+ this.activeProfile = cleanName;
67
+ try {
68
+ fs.writeFileSync(ACTIVE_PROFILE_FILE, cleanName, 'utf-8');
69
+ return true;
70
+ }
71
+ catch {
72
+ return false;
73
+ }
74
+ }
75
+ listProfiles() {
76
+ this.ensureDirectory();
77
+ const files = fs.readdirSync(this.profilesDir).filter((f) => f.endsWith('.md'));
78
+ const profiles = [];
79
+ for (const file of files) {
80
+ const id = file.replace(/\.md$/, '');
81
+ const filePath = path.join(this.profilesDir, file);
82
+ const stat = fs.statSync(filePath);
83
+ const content = fs.readFileSync(filePath, 'utf-8');
84
+ const lines = content.split('\n');
85
+ let notesCount = 0;
86
+ let inNotesSection = false;
87
+ for (const l of lines) {
88
+ if (l.startsWith('## šŸ“ Notes')) {
89
+ inNotesSection = true;
90
+ continue;
91
+ }
92
+ if (inNotesSection && l.startsWith('## ')) {
93
+ inNotesSection = false;
94
+ }
95
+ if (inNotesSection && l.trim().startsWith('- [')) {
96
+ notesCount++;
97
+ }
98
+ }
99
+ profiles.push({
100
+ id,
101
+ name: id,
102
+ filePath,
103
+ isActive: id === this.activeProfile,
104
+ notesCount,
105
+ lastModified: stat.mtimeMs,
106
+ preview: lines.slice(0, 10).join('\n'),
107
+ });
108
+ }
109
+ return profiles.sort((a, b) => (b.isActive ? 1 : 0) - (a.isActive ? 1 : 0));
110
+ }
111
+ getActiveProfileContent() {
112
+ const filePath = path.join(this.profilesDir, `${this.activeProfile}.md`);
113
+ if (fs.existsSync(filePath)) {
114
+ try {
115
+ return fs.readFileSync(filePath, 'utf-8');
116
+ }
117
+ catch { }
118
+ }
119
+ return '';
120
+ }
121
+ createProfile(name, description) {
122
+ const cleanName = name.toLowerCase().replace(/[^a-z0-9_-]/g, '_').trim() || `profile_${Date.now()}`;
123
+ const filePath = path.join(this.profilesDir, `${cleanName}.md`);
124
+ const template = `# šŸ‘¤ User Profile: ${cleanName}
125
+ - Created: ${new Date().toISOString()}
126
+ - Description: ${description || `Custom thinking style and preference profile for ${cleanName}.`}
127
+
128
+ ## 🧠 Style of Thinking & Preferences
129
+ - Communication: Proactively leads the way, asks clarifying questions, and adapts step-by-step.
130
+ - Pace: Fast and iterative.
131
+
132
+ ## šŸ“ Notes & Captured Insights
133
+ - [${new Date().toLocaleDateString()}]: Created profile '${cleanName}'. Ready to capture feedback and thinking style.
134
+
135
+ ## šŸ› ļø Code Conventions & Architectural Preferences
136
+ - Standard conventions apply. Will adapt as user chats in this profile.
137
+ `;
138
+ fs.writeFileSync(filePath, template, 'utf-8');
139
+ this.setActiveProfile(cleanName);
140
+ return {
141
+ id: cleanName,
142
+ name: cleanName,
143
+ filePath,
144
+ isActive: true,
145
+ notesCount: 1,
146
+ lastModified: Date.now(),
147
+ preview: template,
148
+ };
149
+ }
150
+ /**
151
+ * Appends an observed user insight, preference, or feedback item to active profile markdown
152
+ */
153
+ appendNoteToActiveProfile(note) {
154
+ const filePath = path.join(this.profilesDir, `${this.activeProfile}.md`);
155
+ if (!fs.existsSync(filePath))
156
+ return;
157
+ try {
158
+ let content = fs.readFileSync(filePath, 'utf-8');
159
+ const timestamp = new Date().toLocaleDateString();
160
+ const entry = `- [${timestamp}]: ${note.trim()}`;
161
+ if (content.includes(entry))
162
+ return; // Avoid exact duplicates
163
+ if (content.includes('## šŸ“ Notes & Captured Insights')) {
164
+ content = content.replace('## šŸ“ Notes & Captured Insights', `## šŸ“ Notes & Captured Insights\n${entry}`);
165
+ }
166
+ else {
167
+ content += `\n## šŸ“ Notes & Captured Insights\n${entry}\n`;
168
+ }
169
+ fs.writeFileSync(filePath, content, 'utf-8');
170
+ }
171
+ catch { }
172
+ }
173
+ /**
174
+ * Real-time feedback and preference extractor: Analyzes user prompt for thinking styles, feedback, or directives
175
+ */
176
+ extractAndRecordNotes(userPrompt) {
177
+ const lower = userPrompt.toLowerCase().trim();
178
+ // Check for explicit preference / feedback patterns
179
+ const patterns = [
180
+ /(?:i prefer|i like|i always use|my style is|always use|never use|don't use|do not use)\s+([^.!?\n]+)/i,
181
+ /(?:from now on|remember that|keep in mind that|note that)\s+([^.!?\n]+)/i,
182
+ /(?:i want you to|make sure to|focus on|i think of this as)\s+([^.!?\n]+)/i,
183
+ /(?:let's do|instead of .+ let's use)\s+([^.!?\n]+)/i,
184
+ ];
185
+ for (const pattern of patterns) {
186
+ const match = userPrompt.match(pattern);
187
+ if (match && match[1] && match[1].length > 4 && match[1].length < 200) {
188
+ const extracted = match[0].trim();
189
+ this.appendNoteToActiveProfile(extracted);
190
+ return extracted;
191
+ }
192
+ }
193
+ return null;
194
+ }
195
+ renderActiveProfile() {
196
+ const content = this.getActiveProfileContent();
197
+ console.log(chalk.bold.hex('#c084fc')(`\nšŸ‘¤ Active Profile: ${this.activeProfile}`));
198
+ console.log(chalk.hex('#334155')('─'.repeat(72)));
199
+ console.log(chalk.hex('#94a3b8')(content));
200
+ console.log(chalk.hex('#334155')('─'.repeat(72)));
201
+ console.log();
202
+ }
203
+ }
204
+ export const profileManager = new ProfileManager();
205
+ //# sourceMappingURL=profileManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profileManager.js","sourceRoot":"","sources":["../../src/profiles/profileManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { LLMProvider } from './base.js';
2
+ import { ChatMessage, ToolDefinition, StreamCallbacks } from '../types.js';
3
+ export declare class AnthropicProvider implements LLMProvider {
4
+ name: string;
5
+ defaultModel: string;
6
+ private apiKey;
7
+ private model;
8
+ constructor(options: {
9
+ apiKey?: string;
10
+ model?: string;
11
+ });
12
+ sendMessageStream(messages: ChatMessage[], tools: ToolDefinition[], callbacks: StreamCallbacks): Promise<string>;
13
+ }
14
+ //# sourceMappingURL=anthropic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE3E,qBAAa,iBAAkB,YAAW,WAAW;IAC5C,IAAI,EAAE,MAAM,CAAe;IAC3B,YAAY,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;gBAEV,OAAO,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAM3C,iBAAiB,CAC5B,QAAQ,EAAE,WAAW,EAAE,EACvB,KAAK,EAAE,cAAc,EAAE,EACvB,SAAS,EAAE,eAAe,GACzB,OAAO,CAAC,MAAM,CAAC;CA8EnB"}
@@ -0,0 +1,80 @@
1
+ export class AnthropicProvider {
2
+ name = 'anthropic';
3
+ defaultModel;
4
+ apiKey;
5
+ model;
6
+ constructor(options) {
7
+ this.apiKey = options.apiKey || '';
8
+ this.model = options.model || 'claude-3-5-sonnet-20241022';
9
+ this.defaultModel = this.model;
10
+ }
11
+ async sendMessageStream(messages, tools, callbacks) {
12
+ if (!this.apiKey) {
13
+ throw new Error('ANTHROPIC_API_KEY is not set. Use /key anthropic <your-key> or set it in .env');
14
+ }
15
+ const systemMsg = messages.find((m) => m.role === 'system')?.content || '';
16
+ const conversationMessages = messages
17
+ .filter((m) => m.role !== 'system')
18
+ .map((m) => ({
19
+ role: m.role === 'assistant' ? 'assistant' : 'user',
20
+ content: m.content,
21
+ }));
22
+ const payload = {
23
+ model: this.model,
24
+ max_tokens: 4096,
25
+ messages: conversationMessages,
26
+ stream: true,
27
+ };
28
+ if (systemMsg) {
29
+ payload.system = systemMsg;
30
+ }
31
+ const response = await fetch('https://api.anthropic.com/v1/messages', {
32
+ method: 'POST',
33
+ headers: {
34
+ 'Content-Type': 'application/json',
35
+ 'x-api-key': this.apiKey,
36
+ 'anthropic-version': '2023-06-01',
37
+ },
38
+ body: JSON.stringify(payload),
39
+ });
40
+ if (!response.ok) {
41
+ const errText = await response.text();
42
+ throw new Error(`Anthropic API error (${response.status}): ${errText}`);
43
+ }
44
+ if (!response.body) {
45
+ throw new Error('Anthropic response body is null');
46
+ }
47
+ const reader = response.body.getReader();
48
+ const decoder = new TextDecoder('utf-8');
49
+ let fullContent = '';
50
+ let buffer = '';
51
+ while (true) {
52
+ const { done, value } = await reader.read();
53
+ if (done)
54
+ break;
55
+ buffer += decoder.decode(value, { stream: true });
56
+ const lines = buffer.split('\n');
57
+ buffer = lines.pop() || '';
58
+ for (const line of lines) {
59
+ const trimmed = line.trim();
60
+ if (trimmed.startsWith('data: ')) {
61
+ try {
62
+ const data = JSON.parse(trimmed.slice(6));
63
+ if (data.type === 'content_block_delta' && data.delta?.text) {
64
+ fullContent += data.delta.text;
65
+ callbacks.onToken(data.delta.text);
66
+ }
67
+ }
68
+ catch {
69
+ // Ignore parse errors on chunks
70
+ }
71
+ }
72
+ }
73
+ }
74
+ if (callbacks.onComplete) {
75
+ callbacks.onComplete(fullContent);
76
+ }
77
+ return fullContent;
78
+ }
79
+ }
80
+ //# sourceMappingURL=anthropic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"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"}