ai-mind-map 1.1.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 (154) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +554 -0
  3. package/dist/change-tracker/change-log.d.ts +160 -0
  4. package/dist/change-tracker/change-log.d.ts.map +1 -0
  5. package/dist/change-tracker/change-log.js +507 -0
  6. package/dist/change-tracker/change-log.js.map +1 -0
  7. package/dist/change-tracker/diff-engine.d.ts +149 -0
  8. package/dist/change-tracker/diff-engine.d.ts.map +1 -0
  9. package/dist/change-tracker/diff-engine.js +530 -0
  10. package/dist/change-tracker/diff-engine.js.map +1 -0
  11. package/dist/change-tracker/watcher.d.ts +137 -0
  12. package/dist/change-tracker/watcher.d.ts.map +1 -0
  13. package/dist/change-tracker/watcher.js +300 -0
  14. package/dist/change-tracker/watcher.js.map +1 -0
  15. package/dist/cli.d.ts +20 -0
  16. package/dist/cli.d.ts.map +1 -0
  17. package/dist/cli.js +937 -0
  18. package/dist/cli.js.map +1 -0
  19. package/dist/config.d.ts +38 -0
  20. package/dist/config.d.ts.map +1 -0
  21. package/dist/config.js +222 -0
  22. package/dist/config.js.map +1 -0
  23. package/dist/context/compressor.d.ts +49 -0
  24. package/dist/context/compressor.d.ts.map +1 -0
  25. package/dist/context/compressor.js +769 -0
  26. package/dist/context/compressor.js.map +1 -0
  27. package/dist/context/progressive-disclosure.d.ts +71 -0
  28. package/dist/context/progressive-disclosure.d.ts.map +1 -0
  29. package/dist/context/progressive-disclosure.js +470 -0
  30. package/dist/context/progressive-disclosure.js.map +1 -0
  31. package/dist/context/token-budget.d.ts +121 -0
  32. package/dist/context/token-budget.d.ts.map +1 -0
  33. package/dist/context/token-budget.js +282 -0
  34. package/dist/context/token-budget.js.map +1 -0
  35. package/dist/index.d.ts +13 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +944 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/install.d.ts +66 -0
  40. package/dist/install.d.ts.map +1 -0
  41. package/dist/install.js +946 -0
  42. package/dist/install.js.map +1 -0
  43. package/dist/knowledge-graph/architecture.d.ts +213 -0
  44. package/dist/knowledge-graph/architecture.d.ts.map +1 -0
  45. package/dist/knowledge-graph/architecture.js +585 -0
  46. package/dist/knowledge-graph/architecture.js.map +1 -0
  47. package/dist/knowledge-graph/cypher.d.ts +113 -0
  48. package/dist/knowledge-graph/cypher.d.ts.map +1 -0
  49. package/dist/knowledge-graph/cypher.js +1051 -0
  50. package/dist/knowledge-graph/cypher.js.map +1 -0
  51. package/dist/knowledge-graph/dead-code.d.ts +121 -0
  52. package/dist/knowledge-graph/dead-code.d.ts.map +1 -0
  53. package/dist/knowledge-graph/dead-code.js +331 -0
  54. package/dist/knowledge-graph/dead-code.js.map +1 -0
  55. package/dist/knowledge-graph/flow-analyzer.d.ts +167 -0
  56. package/dist/knowledge-graph/flow-analyzer.d.ts.map +1 -0
  57. package/dist/knowledge-graph/flow-analyzer.js +739 -0
  58. package/dist/knowledge-graph/flow-analyzer.js.map +1 -0
  59. package/dist/knowledge-graph/graph.d.ts +291 -0
  60. package/dist/knowledge-graph/graph.d.ts.map +1 -0
  61. package/dist/knowledge-graph/graph.js +978 -0
  62. package/dist/knowledge-graph/graph.js.map +1 -0
  63. package/dist/knowledge-graph/index.d.ts +17 -0
  64. package/dist/knowledge-graph/index.d.ts.map +1 -0
  65. package/dist/knowledge-graph/index.js +14 -0
  66. package/dist/knowledge-graph/index.js.map +1 -0
  67. package/dist/knowledge-graph/indexer.d.ts +112 -0
  68. package/dist/knowledge-graph/indexer.d.ts.map +1 -0
  69. package/dist/knowledge-graph/indexer.js +506 -0
  70. package/dist/knowledge-graph/indexer.js.map +1 -0
  71. package/dist/knowledge-graph/pagerank.d.ts +141 -0
  72. package/dist/knowledge-graph/pagerank.d.ts.map +1 -0
  73. package/dist/knowledge-graph/pagerank.js +493 -0
  74. package/dist/knowledge-graph/pagerank.js.map +1 -0
  75. package/dist/knowledge-graph/parser.d.ts +55 -0
  76. package/dist/knowledge-graph/parser.d.ts.map +1 -0
  77. package/dist/knowledge-graph/parser.js +1090 -0
  78. package/dist/knowledge-graph/parser.js.map +1 -0
  79. package/dist/knowledge-graph/snapshot.d.ts +107 -0
  80. package/dist/knowledge-graph/snapshot.d.ts.map +1 -0
  81. package/dist/knowledge-graph/snapshot.js +435 -0
  82. package/dist/knowledge-graph/snapshot.js.map +1 -0
  83. package/dist/memory/decision-log.d.ts +151 -0
  84. package/dist/memory/decision-log.d.ts.map +1 -0
  85. package/dist/memory/decision-log.js +482 -0
  86. package/dist/memory/decision-log.js.map +1 -0
  87. package/dist/memory/persistent-memory.d.ts +182 -0
  88. package/dist/memory/persistent-memory.d.ts.map +1 -0
  89. package/dist/memory/persistent-memory.js +579 -0
  90. package/dist/memory/persistent-memory.js.map +1 -0
  91. package/dist/memory/session-memory.d.ts +165 -0
  92. package/dist/memory/session-memory.d.ts.map +1 -0
  93. package/dist/memory/session-memory.js +382 -0
  94. package/dist/memory/session-memory.js.map +1 -0
  95. package/dist/stress-test.d.ts +10 -0
  96. package/dist/stress-test.d.ts.map +1 -0
  97. package/dist/stress-test.js +258 -0
  98. package/dist/stress-test.js.map +1 -0
  99. package/dist/tools/advanced-tools.d.ts +32 -0
  100. package/dist/tools/advanced-tools.d.ts.map +1 -0
  101. package/dist/tools/advanced-tools.js +480 -0
  102. package/dist/tools/advanced-tools.js.map +1 -0
  103. package/dist/tools/change-tools.d.ts +76 -0
  104. package/dist/tools/change-tools.d.ts.map +1 -0
  105. package/dist/tools/change-tools.js +93 -0
  106. package/dist/tools/change-tools.js.map +1 -0
  107. package/dist/tools/context-tools.d.ts +68 -0
  108. package/dist/tools/context-tools.d.ts.map +1 -0
  109. package/dist/tools/context-tools.js +141 -0
  110. package/dist/tools/context-tools.js.map +1 -0
  111. package/dist/tools/debug-tools.d.ts +25 -0
  112. package/dist/tools/debug-tools.d.ts.map +1 -0
  113. package/dist/tools/debug-tools.js +286 -0
  114. package/dist/tools/debug-tools.js.map +1 -0
  115. package/dist/tools/evolving-tools.d.ts +23 -0
  116. package/dist/tools/evolving-tools.d.ts.map +1 -0
  117. package/dist/tools/evolving-tools.js +207 -0
  118. package/dist/tools/evolving-tools.js.map +1 -0
  119. package/dist/tools/flow-tools.d.ts +24 -0
  120. package/dist/tools/flow-tools.d.ts.map +1 -0
  121. package/dist/tools/flow-tools.js +265 -0
  122. package/dist/tools/flow-tools.js.map +1 -0
  123. package/dist/tools/graph-tools.d.ts +71 -0
  124. package/dist/tools/graph-tools.d.ts.map +1 -0
  125. package/dist/tools/graph-tools.js +165 -0
  126. package/dist/tools/graph-tools.js.map +1 -0
  127. package/dist/tools/memory-tools.d.ts +62 -0
  128. package/dist/tools/memory-tools.d.ts.map +1 -0
  129. package/dist/tools/memory-tools.js +195 -0
  130. package/dist/tools/memory-tools.js.map +1 -0
  131. package/dist/tools/smart-tools.d.ts +23 -0
  132. package/dist/tools/smart-tools.d.ts.map +1 -0
  133. package/dist/tools/smart-tools.js +482 -0
  134. package/dist/tools/smart-tools.js.map +1 -0
  135. package/dist/tools/snapshot-tools.d.ts +19 -0
  136. package/dist/tools/snapshot-tools.d.ts.map +1 -0
  137. package/dist/tools/snapshot-tools.js +149 -0
  138. package/dist/tools/snapshot-tools.js.map +1 -0
  139. package/dist/types.d.ts +181 -0
  140. package/dist/types.d.ts.map +1 -0
  141. package/dist/types.js +45 -0
  142. package/dist/types.js.map +1 -0
  143. package/dist/utils/logger.d.ts +59 -0
  144. package/dist/utils/logger.d.ts.map +1 -0
  145. package/dist/utils/logger.js +142 -0
  146. package/dist/utils/logger.js.map +1 -0
  147. package/dist/utils/token-counter.d.ts +51 -0
  148. package/dist/utils/token-counter.d.ts.map +1 -0
  149. package/dist/utils/token-counter.js +181 -0
  150. package/dist/utils/token-counter.js.map +1 -0
  151. package/install.ps1 +321 -0
  152. package/install.sh +345 -0
  153. package/package.json +94 -0
  154. package/setup.bat +62 -0
@@ -0,0 +1,149 @@
1
+ /**
2
+ * AI Mind Map — Snapshot & Delta MCP Tools
3
+ *
4
+ * The most important tools in the entire system for token savings.
5
+ * These replace the need to read the full codebase at session start.
6
+ *
7
+ * mindmap_project_map → THE map. One call = entire project understood.
8
+ * mindmap_change_delta → Only what changed since last time.
9
+ * mindmap_session_start → Everything combined: map + delta + memories.
10
+ */
11
+ import { z } from 'zod';
12
+ import { SnapshotEngine } from '../knowledge-graph/snapshot.js';
13
+ const defaultEstimator = {
14
+ estimate: (text) => Math.ceil(text.length / 4),
15
+ };
16
+ function mcpText(result) {
17
+ return {
18
+ content: [{ type: 'text', text: JSON.stringify(result) }],
19
+ };
20
+ }
21
+ function ok(data, estimator, saved = 0) {
22
+ const serialised = JSON.stringify(data);
23
+ const tokens = estimator.estimate(serialised);
24
+ return { success: true, data, tokenCount: tokens, tokensSaved: saved };
25
+ }
26
+ function fail(message) {
27
+ return { success: false, data: null, tokenCount: 0, tokensSaved: 0, message };
28
+ }
29
+ // ============================================================
30
+ // Registration
31
+ // ============================================================
32
+ export function registerSnapshotTools(server, graph, config, estimator = defaultEstimator) {
33
+ const engine = new SnapshotEngine(graph, config);
34
+ // ── mindmap_project_map ───────────────────────────────────
35
+ server.tool('mindmap_project_map', `🗺️ THE PROJECT MAP. Returns a compact representation of the ENTIRE project
36
+ in ~1500-3000 tokens instead of 50,000+. Contains:
37
+ - Every file with its symbols (functions, classes, types)
38
+ - Architecture layer classification (UI, service, controller, DB, etc.)
39
+ - Entry points (main files, routes)
40
+ - Most-connected symbols (hotspots)
41
+ - Token savings report
42
+
43
+ THIS IS THE #1 TOKEN SAVER. Call this ONCE at the start of any session
44
+ instead of reading the whole codebase.`, {}, async () => {
45
+ try {
46
+ const snapshot = engine.generateSnapshot();
47
+ return mcpText(ok({
48
+ projectMap: snapshot.fileMap,
49
+ layers: snapshot.layers,
50
+ entryPoints: snapshot.entryPoints,
51
+ hotspots: snapshot.hotspots,
52
+ stats: snapshot.stats,
53
+ tokenSavings: snapshot.tokenCost,
54
+ }, estimator, snapshot.tokenCost.saved));
55
+ }
56
+ catch (err) {
57
+ const msg = err instanceof Error ? err.message : String(err);
58
+ return mcpText(fail(`project_map failed: ${msg}`));
59
+ }
60
+ });
61
+ // ── mindmap_change_delta ──────────────────────────────────
62
+ server.tool('mindmap_change_delta', `🔄 CHANGE DELTA. Shows ONLY what changed since the last session or a given time.
63
+ Instead of re-reading the whole project, the AI gets a compact list of:
64
+ - Which files were added/modified/deleted
65
+ - Which symbols were affected in each file
66
+ - New symbols that were created
67
+ - Hot files (most changed)
68
+
69
+ Use this at session start AFTER mindmap_project_map to understand the current state.`, {
70
+ since: z
71
+ .union([
72
+ z.enum(['last_session', 'today', 'this_week', '1h', '3h', '6h', '12h', '24h']),
73
+ z.string().datetime(),
74
+ ])
75
+ .default('last_session')
76
+ .describe('How far back to look'),
77
+ }, async ({ since }) => {
78
+ try {
79
+ const timestamp = resolveTimestamp(since);
80
+ const delta = await engine.generateChangeDelta(timestamp, since);
81
+ return mcpText(ok(delta, estimator));
82
+ }
83
+ catch (err) {
84
+ const msg = err instanceof Error ? err.message : String(err);
85
+ return mcpText(fail(`change_delta failed: ${msg}`));
86
+ }
87
+ });
88
+ // ── mindmap_session_start ─────────────────────────────────
89
+ server.tool('mindmap_session_start', `🚀 SESSION START — the SINGLE most important tool call.
90
+ Returns EVERYTHING the AI needs to start working in ONE call:
91
+ 1. Complete project map (all files + symbols)
92
+ 2. Change delta (what changed since last session)
93
+ 3. Stored memories (important facts from previous sessions)
94
+
95
+ Call this ONCE at the very beginning of every conversation.
96
+ This single call replaces reading the entire codebase.
97
+ Typical cost: ~2000-4000 tokens vs 50,000+ for full read.`, {
98
+ since: z
99
+ .union([
100
+ z.enum(['last_session', 'today', 'this_week', '1h', '3h', '6h', '12h', '24h']),
101
+ z.string().datetime(),
102
+ ])
103
+ .default('last_session')
104
+ .describe('How far back to look for changes'),
105
+ }, async ({ since }) => {
106
+ try {
107
+ const timestamp = resolveTimestamp(since);
108
+ const preamble = await engine.generatePreamble(timestamp);
109
+ return mcpText(ok({
110
+ projectMap: preamble.projectMap,
111
+ changeDelta: preamble.changeDelta,
112
+ memories: preamble.memories,
113
+ tokenCost: preamble.tokenCost,
114
+ tip: 'You now have full project context. Use mindmap_trace_flow, mindmap_get_code_snippet, or mindmap_debug_changes for specific tasks.',
115
+ }, estimator, Math.max(0, 50000 - preamble.tokenCost)));
116
+ }
117
+ catch (err) {
118
+ const msg = err instanceof Error ? err.message : String(err);
119
+ return mcpText(fail(`session_start failed: ${msg}`));
120
+ }
121
+ });
122
+ }
123
+ // ============================================================
124
+ // Utilities
125
+ // ============================================================
126
+ function resolveTimestamp(since) {
127
+ const now = Date.now();
128
+ switch (since) {
129
+ case 'last_session': return now - 4 * 60 * 60 * 1000;
130
+ case 'today': {
131
+ const d = new Date();
132
+ d.setHours(0, 0, 0, 0);
133
+ return d.getTime();
134
+ }
135
+ case 'this_week': {
136
+ const d = new Date();
137
+ d.setDate(d.getDate() - d.getDay());
138
+ d.setHours(0, 0, 0, 0);
139
+ return d.getTime();
140
+ }
141
+ case '1h': return now - 1 * 3600000;
142
+ case '3h': return now - 3 * 3600000;
143
+ case '6h': return now - 6 * 3600000;
144
+ case '12h': return now - 12 * 3600000;
145
+ case '24h': return now - 24 * 3600000;
146
+ default: return new Date(since).getTime();
147
+ }
148
+ }
149
+ //# sourceMappingURL=snapshot-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot-tools.js","sourceRoot":"","sources":["../../src/tools/snapshot-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,181 @@
1
+ /**
2
+ * AI Mind Map — Shared Type Definitions
3
+ *
4
+ * Core types used across all components of the Mind Map system.
5
+ * Inspired by codebase-memory-mcp, Aider repo maps, and Mem0 architectures.
6
+ */
7
+ export type NodeType = 'file' | 'function' | 'class' | 'method' | 'interface' | 'type_alias' | 'enum' | 'variable' | 'constant' | 'module' | 'namespace' | 'property' | 'constructor' | 'decorator' | 'route' | 'component' | 'hook' | 'test' | 'config';
8
+ export type EdgeType = 'calls' | 'imports' | 'exports' | 'inherits' | 'implements' | 'uses' | 'decorates' | 'overrides' | 'contains' | 'tests' | 'depends_on' | 'routes_to';
9
+ export interface GraphNode {
10
+ id: string;
11
+ type: NodeType;
12
+ name: string;
13
+ qualifiedName: string;
14
+ filePath: string;
15
+ startLine: number;
16
+ endLine: number;
17
+ signature: string;
18
+ docComment: string | null;
19
+ hash: string;
20
+ language: string;
21
+ visibility: 'public' | 'private' | 'protected' | 'internal' | 'unknown';
22
+ isAsync: boolean;
23
+ isStatic: boolean;
24
+ isExported: boolean;
25
+ parameters?: ParameterInfo[];
26
+ returnType?: string;
27
+ updatedAt: number;
28
+ }
29
+ export interface ParameterInfo {
30
+ name: string;
31
+ type: string | null;
32
+ defaultValue: string | null;
33
+ isOptional: boolean;
34
+ isRest: boolean;
35
+ }
36
+ export interface GraphEdge {
37
+ sourceId: string;
38
+ targetId: string;
39
+ type: EdgeType;
40
+ metadata?: Record<string, string>;
41
+ }
42
+ export type ChangeType = 'created' | 'modified' | 'deleted' | 'renamed';
43
+ export interface FileChange {
44
+ filePath: string;
45
+ changeType: ChangeType;
46
+ oldPath?: string;
47
+ summary: string;
48
+ symbolsAffected: string[];
49
+ linesAdded: number;
50
+ linesRemoved: number;
51
+ timestamp: number;
52
+ sessionId: string;
53
+ /** Actual git diff content (patch hunks) for this file — if available. */
54
+ diffContent?: string;
55
+ }
56
+ export interface ChangeSession {
57
+ sessionId: string;
58
+ startedAt: number;
59
+ endedAt: number | null;
60
+ totalChanges: number;
61
+ filesModified: string[];
62
+ summary: string;
63
+ }
64
+ export type MemoryCategory = 'architecture' | 'convention' | 'decision' | 'gotcha' | 'dependency' | 'workflow' | 'context' | 'preference' | 'lesson_learned' | 'todo';
65
+ export interface Memory {
66
+ id: number;
67
+ category: MemoryCategory;
68
+ content: string;
69
+ importance: number;
70
+ tags: string[];
71
+ relatedFiles: string[];
72
+ createdAt: number;
73
+ lastAccessedAt: number;
74
+ accessCount: number;
75
+ sessionId: string;
76
+ source: 'agent' | 'user' | 'auto';
77
+ }
78
+ export interface Decision {
79
+ id: number;
80
+ title: string;
81
+ description: string;
82
+ rationale: string;
83
+ alternatives: string[];
84
+ consequences: string[];
85
+ relatedFiles: string[];
86
+ tags: string[];
87
+ decidedAt: number;
88
+ decidedBy: string;
89
+ status: 'active' | 'superseded' | 'reversed';
90
+ supersededBy?: number;
91
+ }
92
+ export interface SessionSummary {
93
+ sessionId: string;
94
+ startedAt: number;
95
+ endedAt: number;
96
+ tasksCompleted: string[];
97
+ filesModified: string[];
98
+ decisionseMade: string[];
99
+ memoriesCreated: number;
100
+ tokensSaved: number;
101
+ summary: string;
102
+ }
103
+ export type CompressionLevel = 'minimal' | 'moderate' | 'aggressive';
104
+ export type ContentType = 'source_code' | 'build_log' | 'test_output' | 'stack_trace' | 'json_data' | 'markdown' | 'plain_text' | 'diff' | 'config_file';
105
+ export interface TokenBudget {
106
+ graphResults: number;
107
+ changeSummary: number;
108
+ memoryRetrieval: number;
109
+ fileContent: number;
110
+ totalContext: number;
111
+ }
112
+ export interface ContextTier {
113
+ tier: 1 | 2 | 3;
114
+ label: string;
115
+ description: string;
116
+ tokenBudget: number;
117
+ alwaysLoaded: boolean;
118
+ }
119
+ export interface ContextPackage {
120
+ tier1: string;
121
+ tier2: string;
122
+ tier3: string;
123
+ totalTokens: number;
124
+ tokensSaved: number;
125
+ breakdown: {
126
+ component: string;
127
+ tokens: number;
128
+ budget: number;
129
+ }[];
130
+ }
131
+ export interface MindMapConfig {
132
+ /** Root directory of the project to index */
133
+ projectRoot: string;
134
+ /** Languages to parse (auto-detected if not specified) */
135
+ languages: string[];
136
+ /** Glob patterns to ignore (in addition to .gitignore) */
137
+ ignore: string[];
138
+ /** Token budgets per component */
139
+ tokenBudgets: TokenBudget;
140
+ /** Memory configuration */
141
+ memory: {
142
+ maxMemories: number;
143
+ decayRate: number;
144
+ importanceThreshold: number;
145
+ maxDecisions: number;
146
+ };
147
+ /** Compression level for context engine */
148
+ compression: CompressionLevel;
149
+ /** Database file path */
150
+ dbPath: string;
151
+ /** Enable file watcher for real-time updates */
152
+ watchEnabled: boolean;
153
+ /** File watcher debounce delay in ms */
154
+ watchDebounceMs: number;
155
+ /** Maximum file size to index (bytes) */
156
+ maxFileSize: number;
157
+ /** Enable PageRank relevance ranking */
158
+ pageRankEnabled: boolean;
159
+ }
160
+ export declare const DEFAULT_CONFIG: MindMapConfig;
161
+ export interface MindMapStats {
162
+ indexedFiles: number;
163
+ totalNodes: number;
164
+ totalEdges: number;
165
+ totalMemories: number;
166
+ totalDecisions: number;
167
+ totalChangesTracked: number;
168
+ lastIndexedAt: number | null;
169
+ lastChangeAt: number | null;
170
+ dbSizeBytes: number;
171
+ languageBreakdown: Record<string, number>;
172
+ tokensSavedEstimate: number;
173
+ }
174
+ export interface ToolResult {
175
+ success: boolean;
176
+ data: unknown;
177
+ tokenCount: number;
178
+ tokensSaved: number;
179
+ message?: string;
180
+ }
181
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,45 @@
1
+ /**
2
+ * AI Mind Map — Shared Type Definitions
3
+ *
4
+ * Core types used across all components of the Mind Map system.
5
+ * Inspired by codebase-memory-mcp, Aider repo maps, and Mem0 architectures.
6
+ */
7
+ export const DEFAULT_CONFIG = {
8
+ projectRoot: process.cwd(),
9
+ languages: [], // Auto-detect
10
+ ignore: [
11
+ 'node_modules', '.git', 'dist', 'build', 'out', '.next',
12
+ '__pycache__', '.pytest_cache', 'venv', '.venv', 'env',
13
+ 'target', 'bin/Debug', 'bin/Release', 'obj',
14
+ '.idea', '.vscode', '.vs',
15
+ 'coverage', '.nyc_output',
16
+ '*.min.js', '*.min.css', '*.map',
17
+ '*.lock', 'package-lock.json', 'yarn.lock', 'pnpm-lock.yaml',
18
+ '*.png', '*.jpg', '*.jpeg', '*.gif', '*.svg', '*.ico',
19
+ '*.woff', '*.woff2', '*.ttf', '*.eot',
20
+ '*.pdf', '*.zip', '*.tar', '*.gz',
21
+ '*.exe', '*.dll', '*.so', '*.dylib',
22
+ '*.pyc', '*.pyo', '*.class',
23
+ '.env', '.env.local', '.env.production',
24
+ ],
25
+ tokenBudgets: {
26
+ graphResults: 2000,
27
+ changeSummary: 1000,
28
+ memoryRetrieval: 1500,
29
+ fileContent: 3000,
30
+ totalContext: 10000,
31
+ },
32
+ memory: {
33
+ maxMemories: 500,
34
+ decayRate: 0.95,
35
+ importanceThreshold: 0.1,
36
+ maxDecisions: 200,
37
+ },
38
+ compression: 'moderate',
39
+ dbPath: '.mindmap/mindmap.db',
40
+ watchEnabled: true,
41
+ watchDebounceMs: 500,
42
+ maxFileSize: 512 * 1024, // 512KB
43
+ pageRankEnabled: true,
44
+ };
45
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA6PH,MAAM,CAAC,MAAM,cAAc,GAAkB;IAC3C,WAAW,EAAE,OAAO,CAAC,GAAG,EAAE;IAC1B,SAAS,EAAE,EAAE,EAAG,cAAc;IAC9B,MAAM,EAAE;QACN,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO;QACvD,aAAa,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK;QACtD,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,KAAK;QAC3C,OAAO,EAAE,SAAS,EAAE,KAAK;QACzB,UAAU,EAAE,aAAa;QACzB,UAAU,EAAE,WAAW,EAAE,OAAO;QAChC,QAAQ,EAAE,mBAAmB,EAAE,WAAW,EAAE,gBAAgB;QAC5D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO;QACrD,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO;QACrC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM;QACjC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS;QACnC,OAAO,EAAE,OAAO,EAAE,SAAS;QAC3B,MAAM,EAAE,YAAY,EAAE,iBAAiB;KACxC;IACD,YAAY,EAAE;QACZ,YAAY,EAAE,IAAI;QAClB,aAAa,EAAE,IAAI;QACnB,eAAe,EAAE,IAAI;QACrB,WAAW,EAAE,IAAI;QACjB,YAAY,EAAE,KAAK;KACpB;IACD,MAAM,EAAE;QACN,WAAW,EAAE,GAAG;QAChB,SAAS,EAAE,IAAI;QACf,mBAAmB,EAAE,GAAG;QACxB,YAAY,EAAE,GAAG;KAClB;IACD,WAAW,EAAE,UAAU;IACvB,MAAM,EAAE,qBAAqB;IAC7B,YAAY,EAAE,IAAI;IAClB,eAAe,EAAE,GAAG;IACpB,WAAW,EAAE,GAAG,GAAG,IAAI,EAAG,QAAQ;IAClC,eAAe,EAAE,IAAI;CACtB,CAAC"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * AI Mind Map — Logger Utility
3
+ *
4
+ * Simple structured logger that writes to stderr so it does not interfere
5
+ * with the MCP JSON-RPC protocol on stdout.
6
+ *
7
+ * Features:
8
+ * - Four log levels: debug, info, warn, error
9
+ * - ISO-8601 timestamp prefix
10
+ * - Optional file logging (append mode)
11
+ * - Runtime-configurable log level
12
+ */
13
+ /** Supported log levels ordered by severity. */
14
+ export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
15
+ /** Configuration for the Logger. */
16
+ export interface LoggerOptions {
17
+ /** Minimum level to emit. Default: `'info'`. */
18
+ level?: LogLevel;
19
+ /** Optional file path to append log lines to. */
20
+ filePath?: string;
21
+ /** Prefix prepended to every message (e.g. component name). */
22
+ prefix?: string;
23
+ /** Whether to include colours in stderr output. Default: `true`. */
24
+ colors?: boolean;
25
+ }
26
+ /**
27
+ * Lightweight logger that writes to stderr and optionally to a file.
28
+ *
29
+ * ```ts
30
+ * const log = new Logger({ level: 'debug', prefix: 'Indexer' });
31
+ * log.info('Indexed 42 files');
32
+ * log.error('Failed to parse', filePath);
33
+ * ```
34
+ */
35
+ export declare class Logger {
36
+ private level;
37
+ private prefix;
38
+ private colors;
39
+ private fileStream;
40
+ constructor(options?: LoggerOptions);
41
+ /** Log a debug-level message. */
42
+ debug(...args: unknown[]): void;
43
+ /** Log an info-level message. */
44
+ info(...args: unknown[]): void;
45
+ /** Log a warning-level message. */
46
+ warn(...args: unknown[]): void;
47
+ /** Log an error-level message. */
48
+ error(...args: unknown[]): void;
49
+ /** Update the minimum log level at runtime. */
50
+ setLevel(level: LogLevel): void;
51
+ /** Return the current effective log level. */
52
+ getLevel(): LogLevel;
53
+ /** Create a child logger that inherits settings but adds a sub-prefix. */
54
+ child(subPrefix: string): Logger;
55
+ /** Flush and close the file stream (if any). */
56
+ close(): void;
57
+ private emit;
58
+ }
59
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,gDAAgD;AAChD,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAoB3D,oCAAoC;AACpC,MAAM,WAAW,aAAa;IAC5B,gDAAgD;IAChD,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,UAAU,CAA4B;gBAElC,OAAO,GAAE,aAAkB;IAoBvC,iCAAiC;IACjC,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI/B,iCAAiC;IACjC,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI9B,mCAAmC;IACnC,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI9B,kCAAkC;IAClC,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI/B,+CAA+C;IAC/C,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAI/B,8CAA8C;IAC9C,QAAQ,IAAI,QAAQ;IAMpB,0EAA0E;IAC1E,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAWhC,gDAAgD;IAChD,KAAK,IAAI,IAAI;IASb,OAAO,CAAC,IAAI;CAwCb"}
@@ -0,0 +1,142 @@
1
+ /**
2
+ * AI Mind Map — Logger Utility
3
+ *
4
+ * Simple structured logger that writes to stderr so it does not interfere
5
+ * with the MCP JSON-RPC protocol on stdout.
6
+ *
7
+ * Features:
8
+ * - Four log levels: debug, info, warn, error
9
+ * - ISO-8601 timestamp prefix
10
+ * - Optional file logging (append mode)
11
+ * - Runtime-configurable log level
12
+ */
13
+ import { createWriteStream, mkdirSync } from 'node:fs';
14
+ import { dirname } from 'node:path';
15
+ /** Numeric severity for comparison — lower means more verbose. */
16
+ const LEVEL_VALUE = {
17
+ debug: 0,
18
+ info: 1,
19
+ warn: 2,
20
+ error: 3,
21
+ };
22
+ /** ANSI colour codes used only for stderr output (not file). */
23
+ const LEVEL_COLOR = {
24
+ debug: '\x1b[90m', // grey
25
+ info: '\x1b[36m', // cyan
26
+ warn: '\x1b[33m', // yellow
27
+ error: '\x1b[31m', // red
28
+ };
29
+ const RESET = '\x1b[0m';
30
+ /**
31
+ * Lightweight logger that writes to stderr and optionally to a file.
32
+ *
33
+ * ```ts
34
+ * const log = new Logger({ level: 'debug', prefix: 'Indexer' });
35
+ * log.info('Indexed 42 files');
36
+ * log.error('Failed to parse', filePath);
37
+ * ```
38
+ */
39
+ export class Logger {
40
+ level;
41
+ prefix;
42
+ colors;
43
+ fileStream = null;
44
+ constructor(options = {}) {
45
+ this.level = LEVEL_VALUE[options.level ?? 'info'];
46
+ this.prefix = options.prefix ?? 'MindMap';
47
+ this.colors = options.colors ?? true;
48
+ if (options.filePath) {
49
+ try {
50
+ mkdirSync(dirname(options.filePath), { recursive: true });
51
+ this.fileStream = createWriteStream(options.filePath, { flags: 'a' });
52
+ }
53
+ catch {
54
+ // If we can't open the log file, silently fall back to stderr-only.
55
+ process.stderr.write(`[Logger] WARNING: Could not open log file at ${options.filePath}\n`);
56
+ }
57
+ }
58
+ }
59
+ // ── Public API ─────────────────────────────────────────────
60
+ /** Log a debug-level message. */
61
+ debug(...args) {
62
+ this.emit('debug', args);
63
+ }
64
+ /** Log an info-level message. */
65
+ info(...args) {
66
+ this.emit('info', args);
67
+ }
68
+ /** Log a warning-level message. */
69
+ warn(...args) {
70
+ this.emit('warn', args);
71
+ }
72
+ /** Log an error-level message. */
73
+ error(...args) {
74
+ this.emit('error', args);
75
+ }
76
+ /** Update the minimum log level at runtime. */
77
+ setLevel(level) {
78
+ this.level = LEVEL_VALUE[level];
79
+ }
80
+ /** Return the current effective log level. */
81
+ getLevel() {
82
+ const entries = Object.entries(LEVEL_VALUE);
83
+ const match = entries.find(([, v]) => v === this.level);
84
+ return match ? match[0] : 'info';
85
+ }
86
+ /** Create a child logger that inherits settings but adds a sub-prefix. */
87
+ child(subPrefix) {
88
+ const child = new Logger({
89
+ level: this.getLevel(),
90
+ prefix: `${this.prefix}:${subPrefix}`,
91
+ colors: this.colors,
92
+ });
93
+ // Share the same file stream so we don't open multiple handles.
94
+ child.fileStream = this.fileStream;
95
+ return child;
96
+ }
97
+ /** Flush and close the file stream (if any). */
98
+ close() {
99
+ if (this.fileStream) {
100
+ this.fileStream.end();
101
+ this.fileStream = null;
102
+ }
103
+ }
104
+ // ── Internals ──────────────────────────────────────────────
105
+ emit(level, args) {
106
+ if (LEVEL_VALUE[level] < this.level) {
107
+ return;
108
+ }
109
+ const timestamp = new Date().toISOString();
110
+ const levelTag = level.toUpperCase().padEnd(5);
111
+ const message = args
112
+ .map((a) => {
113
+ if (a instanceof Error) {
114
+ return a.stack ?? a.message;
115
+ }
116
+ if (typeof a === 'string') {
117
+ return a;
118
+ }
119
+ try {
120
+ return JSON.stringify(a);
121
+ }
122
+ catch {
123
+ return String(a);
124
+ }
125
+ })
126
+ .join(' ');
127
+ // Plain line for file logging.
128
+ const plainLine = `${timestamp} [${levelTag}] [${this.prefix}] ${message}\n`;
129
+ // Coloured line for stderr.
130
+ if (this.colors) {
131
+ const color = LEVEL_COLOR[level];
132
+ process.stderr.write(`${color}${timestamp} [${levelTag}]${RESET} [${this.prefix}] ${message}\n`);
133
+ }
134
+ else {
135
+ process.stderr.write(plainLine);
136
+ }
137
+ if (this.fileStream) {
138
+ this.fileStream.write(plainLine);
139
+ }
140
+ }
141
+ }
142
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,kEAAkE;AAClE,MAAM,WAAW,GAA6B;IAC5C,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;CACT,CAAC;AAEF,gEAAgE;AAChE,MAAM,WAAW,GAA6B;IAC5C,KAAK,EAAE,UAAU,EAAG,OAAO;IAC3B,IAAI,EAAE,UAAU,EAAI,OAAO;IAC3B,IAAI,EAAE,UAAU,EAAI,SAAS;IAC7B,KAAK,EAAE,UAAU,EAAG,MAAM;CAC3B,CAAC;AAEF,MAAM,KAAK,GAAG,SAAS,CAAC;AAcxB;;;;;;;;GAQG;AACH,MAAM,OAAO,MAAM;IACT,KAAK,CAAS;IACd,MAAM,CAAS;IACf,MAAM,CAAU;IAChB,UAAU,GAAuB,IAAI,CAAC;IAE9C,YAAY,UAAyB,EAAE;QACrC,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,SAAS,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC;QAErC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC1D,IAAI,CAAC,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YACxE,CAAC;YAAC,MAAM,CAAC;gBACP,oEAAoE;gBACpE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,gDAAgD,OAAO,CAAC,QAAQ,IAAI,CACrE,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,8DAA8D;IAE9D,iCAAiC;IACjC,KAAK,CAAC,GAAG,IAAe;QACtB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,iCAAiC;IACjC,IAAI,CAAC,GAAG,IAAe;QACrB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,mCAAmC;IACnC,IAAI,CAAC,GAAG,IAAe;QACrB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,kCAAkC;IAClC,KAAK,CAAC,GAAG,IAAe;QACtB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,+CAA+C;IAC/C,QAAQ,CAAC,KAAe;QACtB,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,8CAA8C;IAC9C,QAAQ;QACN,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,CAAyB,CAAC;QACpE,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC;QACxD,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACnC,CAAC;IAED,0EAA0E;IAC1E,KAAK,CAAC,SAAiB;QACrB,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC;YACvB,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE;YACtB,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,IAAI,SAAS,EAAE;YACrC,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QACH,gEAAgE;QAChE,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,gDAAgD;IAChD,KAAK;QACH,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;YACtB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;IACH,CAAC;IAED,8DAA8D;IAEtD,IAAI,CAAC,KAAe,EAAE,IAAe;QAC3C,IAAI,WAAW,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YACpC,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,IAAI;aACjB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACT,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC;gBACvB,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,OAAO,CAAC;YAC9B,CAAC;YACD,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAC1B,OAAO,CAAC,CAAC;YACX,CAAC;YACD,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC3B,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC;QACH,CAAC,CAAC;aACD,IAAI,CAAC,GAAG,CAAC,CAAC;QAEb,+BAA+B;QAC/B,MAAM,SAAS,GAAG,GAAG,SAAS,KAAK,QAAQ,MAAM,IAAI,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC;QAE7E,4BAA4B;QAC5B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,KAAK,GAAG,SAAS,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,KAAK,OAAO,IAAI,CAC3E,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAClC,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * AI Mind Map — Fast Token Counter
3
+ *
4
+ * Provides a fast, dependency-free approximation of GPT-style token counts
5
+ * without loading the heavy tiktoken library.
6
+ *
7
+ * Algorithm:
8
+ * 1. Split input by whitespace and punctuation boundaries.
9
+ * 2. Count the resulting chunks.
10
+ * 3. Apply a calibrated multiplier (1.3) for sub-word tokenisation.
11
+ * 4. Add a correction for special / non-ASCII characters.
12
+ *
13
+ * Accuracy: within ~10% of the real cl100k_base token count.
14
+ * Performance: <1 ms for 10 K-character strings.
15
+ */
16
+ /**
17
+ * Estimate the token count of `text` using a fast heuristic.
18
+ *
19
+ * @param text - The input string.
20
+ * @returns Estimated token count (integer, ≥ 0).
21
+ */
22
+ export declare function estimateTokens(text: string): number;
23
+ /**
24
+ * Estimate the token count for an array of strings (summed).
25
+ *
26
+ * @param texts - The input strings.
27
+ * @returns Total estimated token count.
28
+ */
29
+ export declare function estimateTokensMany(texts: string[]): number;
30
+ /**
31
+ * Truncate `text` so that its estimated token count is ≤ `maxTokens`.
32
+ *
33
+ * The function tries to cut at a logical boundary (end of paragraph,
34
+ * end of function, end of sentence, etc.) rather than mid-word.
35
+ *
36
+ * @param text - The input string.
37
+ * @param maxTokens - Maximum token budget.
38
+ * @param suffix - Optional suffix appended to indicate truncation.
39
+ * Defaults to `"\n... [truncated]"`.
40
+ * @returns The (possibly truncated) string.
41
+ */
42
+ export declare function truncateToTokenBudget(text: string, maxTokens: number, suffix?: string): string;
43
+ /**
44
+ * Check whether `text` fits within the given token budget.
45
+ *
46
+ * @param text - The input string.
47
+ * @param maxTokens - Maximum allowed tokens.
48
+ * @returns `true` if estimated tokens ≤ maxTokens.
49
+ */
50
+ export declare function fitsWithinBudget(text: string, maxTokens: number): boolean;
51
+ //# sourceMappingURL=token-counter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-counter.d.ts","sourceRoot":"","sources":["../../src/utils/token-counter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAwBH;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAmCnD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAM1D;AAmBD;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,MAA4B,GACnC,MAAM,CAoDR;AAwBD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAEzE"}