skannr 0.1.1

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 (142) hide show
  1. package/.eslintrc.js +22 -0
  2. package/README.md +109 -0
  3. package/dist/agent-cli.d.ts +7 -0
  4. package/dist/agent-cli.d.ts.map +1 -0
  5. package/dist/agent-cli.js +364 -0
  6. package/dist/agent-cli.js.map +1 -0
  7. package/dist/agent.d.ts +115 -0
  8. package/dist/agent.d.ts.map +1 -0
  9. package/dist/agent.js +340 -0
  10. package/dist/agent.js.map +1 -0
  11. package/dist/benchmark.d.ts +53 -0
  12. package/dist/benchmark.d.ts.map +1 -0
  13. package/dist/benchmark.js +307 -0
  14. package/dist/benchmark.js.map +1 -0
  15. package/dist/cache.d.ts +97 -0
  16. package/dist/cache.d.ts.map +1 -0
  17. package/dist/cache.js +284 -0
  18. package/dist/cache.js.map +1 -0
  19. package/dist/cli.d.ts +6 -0
  20. package/dist/cli.d.ts.map +1 -0
  21. package/dist/cli.js +238 -0
  22. package/dist/cli.js.map +1 -0
  23. package/dist/config.d.ts +8 -0
  24. package/dist/config.d.ts.map +1 -0
  25. package/dist/config.js +52 -0
  26. package/dist/config.js.map +1 -0
  27. package/dist/index.d.ts +18 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +176 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/languages/GenericAdapter.d.ts +10 -0
  32. package/dist/languages/GenericAdapter.d.ts.map +1 -0
  33. package/dist/languages/GenericAdapter.js +41 -0
  34. package/dist/languages/GenericAdapter.js.map +1 -0
  35. package/dist/languages/LanguageAdapter.d.ts +14 -0
  36. package/dist/languages/LanguageAdapter.d.ts.map +1 -0
  37. package/dist/languages/LanguageAdapter.js +3 -0
  38. package/dist/languages/LanguageAdapter.js.map +1 -0
  39. package/dist/languages/PythonAdapter.d.ts +10 -0
  40. package/dist/languages/PythonAdapter.d.ts.map +1 -0
  41. package/dist/languages/PythonAdapter.js +98 -0
  42. package/dist/languages/PythonAdapter.js.map +1 -0
  43. package/dist/languages/TypeScriptAdapter.d.ts +17 -0
  44. package/dist/languages/TypeScriptAdapter.d.ts.map +1 -0
  45. package/dist/languages/TypeScriptAdapter.js +321 -0
  46. package/dist/languages/TypeScriptAdapter.js.map +1 -0
  47. package/dist/languages/registry.d.ts +4 -0
  48. package/dist/languages/registry.d.ts.map +1 -0
  49. package/dist/languages/registry.js +86 -0
  50. package/dist/languages/registry.js.map +1 -0
  51. package/dist/mapper.d.ts +49 -0
  52. package/dist/mapper.d.ts.map +1 -0
  53. package/dist/mapper.js +386 -0
  54. package/dist/mapper.js.map +1 -0
  55. package/dist/ranker-enhanced.d.ts +37 -0
  56. package/dist/ranker-enhanced.d.ts.map +1 -0
  57. package/dist/ranker-enhanced.js +395 -0
  58. package/dist/ranker-enhanced.js.map +1 -0
  59. package/dist/ranker.d.ts +14 -0
  60. package/dist/ranker.d.ts.map +1 -0
  61. package/dist/ranker.js +105 -0
  62. package/dist/ranker.js.map +1 -0
  63. package/dist/rocket-chat-scope.d.ts +7 -0
  64. package/dist/rocket-chat-scope.d.ts.map +1 -0
  65. package/dist/rocket-chat-scope.js +95 -0
  66. package/dist/rocket-chat-scope.js.map +1 -0
  67. package/dist/scanner.d.ts +16 -0
  68. package/dist/scanner.d.ts.map +1 -0
  69. package/dist/scanner.js +228 -0
  70. package/dist/scanner.js.map +1 -0
  71. package/dist/skeletonizer.d.ts +5 -0
  72. package/dist/skeletonizer.d.ts.map +1 -0
  73. package/dist/skeletonizer.js +52 -0
  74. package/dist/skeletonizer.js.map +1 -0
  75. package/dist/tokenizer.d.ts +9 -0
  76. package/dist/tokenizer.d.ts.map +1 -0
  77. package/dist/tokenizer.js +21 -0
  78. package/dist/tokenizer.js.map +1 -0
  79. package/dist/types.d.ts +68 -0
  80. package/dist/types.d.ts.map +1 -0
  81. package/dist/types.js +6 -0
  82. package/dist/types.js.map +1 -0
  83. package/gemini-extension/GEMINI.md +26 -0
  84. package/gemini-extension/gemini-extension.json +12 -0
  85. package/gemini-extension/package.json +14 -0
  86. package/gemini-extension/src/server.ts +63 -0
  87. package/gemini-extension/tsconfig.json +14 -0
  88. package/jest.config.js +5 -0
  89. package/package.json +46 -0
  90. package/src/agent-cli.ts +383 -0
  91. package/src/agent.ts +344 -0
  92. package/src/benchmark.ts +389 -0
  93. package/src/cache.ts +317 -0
  94. package/src/cli.ts +223 -0
  95. package/src/config.ts +22 -0
  96. package/src/index.ts +215 -0
  97. package/src/languages/GenericAdapter.ts +44 -0
  98. package/src/languages/LanguageAdapter.ts +14 -0
  99. package/src/languages/PythonAdapter.ts +74 -0
  100. package/src/languages/TypeScriptAdapter.ts +338 -0
  101. package/src/languages/registry.ts +49 -0
  102. package/src/mapper.ts +448 -0
  103. package/src/ranker-enhanced.ts +460 -0
  104. package/src/ranker.ts +92 -0
  105. package/src/scanner.ts +201 -0
  106. package/src/skeletonizer.ts +16 -0
  107. package/src/tokenizer.ts +20 -0
  108. package/src/types.ts +71 -0
  109. package/tests/agent.tools.test.ts +81 -0
  110. package/tests/benchmark.test.ts +31 -0
  111. package/tests/fixtures/sample.py +17 -0
  112. package/tests/fixtures/sample.ts +13 -0
  113. package/tests/fixtures/src/api/routes.ts +1 -0
  114. package/tests/fixtures/src/auth/permission.ts +3 -0
  115. package/tests/ranker-enhanced.test.ts +68 -0
  116. package/tests/ranker.test.ts +75 -0
  117. package/tests/scanner.scope.test.ts +41 -0
  118. package/tests/setup-fixtures.js +29 -0
  119. package/tests/skeletonizer.test.ts +142 -0
  120. package/tsconfig.json +21 -0
  121. package/uca-landing/index.html +17 -0
  122. package/uca-landing/package.json +23 -0
  123. package/uca-landing/postcss.config.js +6 -0
  124. package/uca-landing/src/App.jsx +43 -0
  125. package/uca-landing/src/components/AgentMode.jsx +45 -0
  126. package/uca-landing/src/components/CliReference.jsx +49 -0
  127. package/uca-landing/src/components/Features.jsx +63 -0
  128. package/uca-landing/src/components/Footer.jsx +35 -0
  129. package/uca-landing/src/components/Hero.jsx +124 -0
  130. package/uca-landing/src/components/HowItWorks.jsx +60 -0
  131. package/uca-landing/src/components/Install.jsx +90 -0
  132. package/uca-landing/src/components/LanguageSupport.jsx +63 -0
  133. package/uca-landing/src/components/Navbar.jsx +86 -0
  134. package/uca-landing/src/components/Problem.jsx +51 -0
  135. package/uca-landing/src/components/Reveal.jsx +40 -0
  136. package/uca-landing/src/components/WorksWith.jsx +59 -0
  137. package/uca-landing/src/hooks/useScrollNav.js +13 -0
  138. package/uca-landing/src/hooks/useTypewriter.js +41 -0
  139. package/uca-landing/src/index.css +13 -0
  140. package/uca-landing/src/main.jsx +10 -0
  141. package/uca-landing/tailwind.config.js +68 -0
  142. package/uca-landing/vite.config.js +6 -0
package/.eslintrc.js ADDED
@@ -0,0 +1,22 @@
1
+ module.exports = {
2
+ parser: '@typescript-eslint/parser',
3
+ extends: [
4
+ 'eslint:recommended',
5
+ 'plugin:@typescript-eslint/recommended',
6
+ ],
7
+ parserOptions: {
8
+ ecmaVersion: 2022,
9
+ sourceType: 'module',
10
+ },
11
+ env: {
12
+ node: true,
13
+ es6: true,
14
+ jest: true,
15
+ },
16
+ rules: {
17
+ '@typescript-eslint/explicit-function-return-type': 'off',
18
+ '@typescript-eslint/no-explicit-any': 'warn',
19
+ '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
20
+ 'no-console': 'off',
21
+ },
22
+ };
package/README.md ADDED
@@ -0,0 +1,109 @@
1
+ # Skannr
2
+
3
+ A CLI tool and MCP server that helps AI agents understand **any codebase**.
4
+ It scans files, generates compressed structural "skeletons", and ranks results
5
+ using hybrid retrieval — reducing token usage by ~96% vs full file scans.
6
+
7
+ ## How It Works
8
+
9
+ 1. You point it at any repo with `--root /path/to/repo`
10
+ 2. It auto-detects the language (TypeScript, JavaScript, Python, or generic fallback)
11
+ 3. It auto-discovers your project's modules from the folder structure
12
+ 4. For your question, it ranks the most relevant files using lexical + structural + dependency-graph analysis
13
+ 5. It strips function bodies from files (keeping types, signatures, imports)
14
+ 6. Returns compact skeletons an AI can reason over without blowing the context window
15
+
16
+ ## Install
17
+
18
+ ```bash
19
+ npm install -g skannr
20
+ ```
21
+
22
+ ## Usage
23
+
24
+ ### CLI
25
+
26
+ ```bash
27
+ # Basic
28
+ skannr --question "how does authentication work?" --root /path/to/any/repo
29
+
30
+ # Limit results
31
+ skannr --question "database connection setup" --root . --limit 5
32
+
33
+ # Focus on specific modules (auto-discovered if not specified)
34
+ skannr --question "permission checks" --root . --modules auth,middleware
35
+
36
+ # Force language
37
+ skannr --question "class structure" --root /path/to/python/project --lang python
38
+
39
+ # Interactive agent mode
40
+ skannr-agent --root /path/to/repo
41
+
42
+ # Cache management
43
+ skannr --cache-stats
44
+ skannr --cache-clear
45
+ skannr --question "..." --skip-cache
46
+ ```
47
+
48
+ ### MCP Server (use with Gemini CLI, Claude Code, Cursor, etc.)
49
+
50
+ ```json
51
+ {
52
+ "mcpServers": {
53
+ "skannr": {
54
+ "command": "npx",
55
+ "args": ["skannr"]
56
+ }
57
+ }
58
+ }
59
+ ```
60
+
61
+ ### Config File (optional)
62
+
63
+ Drop a `code-analyzer.config.json` in your repo root:
64
+
65
+ ```json
66
+ {
67
+ "modules": {
68
+ "auth": ["src/auth", "lib/auth"],
69
+ "api": ["src/api", "src/routes"]
70
+ },
71
+ "exclude": ["**/generated/**", "**/migrations/**"],
72
+ "extensions": [".ts", ".js"],
73
+ "defaultLimit": 10
74
+ }
75
+ ```
76
+
77
+ ## Supported Languages
78
+
79
+ | Language | Skeleton Support |
80
+ |---|---|
81
+ | TypeScript / TSX | Full AST (ts-morph) |
82
+ | JavaScript / JSX | Full AST (ts-morph) |
83
+ | Python | Regex-based (signatures + types) |
84
+ | Others | First 50 lines (generic fallback) |
85
+
86
+ ## Performance
87
+
88
+ Benchmarked on large TypeScript monorepo:
89
+
90
+ | Metric | Result |
91
+ |---|---|
92
+ | Token Reduction vs Full Scan | ~96.5% |
93
+ | Token Reduction vs Top-N | ~78.2% |
94
+ | Avg keyword coverage | ~75% |
95
+ | Directory diversity (top-5) | ~80% |
96
+ | Average execution time | ~1.2s |
97
+
98
+ ## Interactive Agent Commands
99
+
100
+ ```
101
+ /help Show all commands
102
+ /files List retrieved files
103
+ /symbols <query> Search for symbols
104
+ /symbol <id> Get full implementation
105
+ /deps <file> Show imports for a file
106
+ /refresh Re-analyze with new context
107
+ /stats Show mapping statistics
108
+ /exit Quit
109
+ ```
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Agent CLI - Interactive code analysis with Gemini AI
4
+ * This demonstrates the agentic code analysis workflow
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=agent-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-cli.d.ts","sourceRoot":"","sources":["../src/agent-cli.ts"],"names":[],"mappings":";AAEA;;;GAGG"}
@@ -0,0 +1,364 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * Agent CLI - Interactive code analysis with Gemini AI
5
+ * This demonstrates the agentic code analysis workflow
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ const agent_1 = require("./agent");
42
+ const index_1 = require("./index");
43
+ const readline = __importStar(require("readline"));
44
+ const path = __importStar(require("path"));
45
+ function buildSkeletonContext(result, includeScores) {
46
+ return result.files
47
+ .map((file) => {
48
+ if (includeScores) {
49
+ return `=== ${file.path} (score: ${file.score.toFixed(2)}) ===\n${file.skeleton}`;
50
+ }
51
+ return `=== ${file.path} ===\n${file.skeleton}`;
52
+ })
53
+ .join('\n\n');
54
+ }
55
+ function printEvidence(result) {
56
+ console.log('📚 Retrieval Evidence:');
57
+ for (const file of result.files.slice(0, 10)) {
58
+ console.log(`- ${file.path} (score: ${file.score.toFixed(2)})`);
59
+ }
60
+ console.log('');
61
+ }
62
+ function printInteractiveHelp() {
63
+ console.log('Commands:');
64
+ console.log(' /help Show this help');
65
+ console.log(' /files List currently retrieved files');
66
+ console.log(' /symbols <query> Search symbols in loaded mapping');
67
+ console.log(' /symbol <symbolId> Show full implementation for a symbol');
68
+ console.log(' /deps <filePath> Show imports and symbols for a file');
69
+ console.log(' /refresh Re-analyze project and refresh context');
70
+ console.log(' /stats Show mapping statistics');
71
+ console.log(' /exit Quit interactive mode');
72
+ console.log('');
73
+ }
74
+ /**
75
+ * Parse command line arguments
76
+ */
77
+ function parseArgs() {
78
+ const args = process.argv.slice(2);
79
+ let root = process.cwd();
80
+ let question = '';
81
+ let limit = 10;
82
+ let apiKey = process.env.GEMINI_API_KEY;
83
+ let model = 'gemini-2.0-flash-exp';
84
+ let interactive = false;
85
+ for (let i = 0; i < args.length; i++) {
86
+ const arg = args[i];
87
+ if (arg === '--root' && i + 1 < args.length) {
88
+ root = args[i + 1];
89
+ i++;
90
+ }
91
+ else if (arg === '--question' && i + 1 < args.length) {
92
+ question = args[i + 1];
93
+ i++;
94
+ }
95
+ else if (arg === '--limit' && i + 1 < args.length) {
96
+ limit = parseInt(args[i + 1], 10);
97
+ if (isNaN(limit) || limit < 1) {
98
+ console.error('Error: --limit must be a positive number');
99
+ return null;
100
+ }
101
+ i++;
102
+ }
103
+ else if (arg === '--api-key' && i + 1 < args.length) {
104
+ apiKey = args[i + 1];
105
+ i++;
106
+ }
107
+ else if (arg === '--model' && i + 1 < args.length) {
108
+ model = args[i + 1];
109
+ i++;
110
+ }
111
+ else if (arg === '--interactive' || arg === '-i') {
112
+ interactive = true;
113
+ }
114
+ else if (arg === '--help' || arg === '-h') {
115
+ printHelp();
116
+ return null;
117
+ }
118
+ else {
119
+ console.error(`Unknown argument: ${arg}`);
120
+ printHelp();
121
+ return null;
122
+ }
123
+ }
124
+ if (!apiKey) {
125
+ console.error('Error: GEMINI_API_KEY environment variable or --api-key is required\n');
126
+ return null;
127
+ }
128
+ if (!question && !interactive) {
129
+ console.error('Error: --question is required (or use --interactive for chat mode)\n');
130
+ printHelp();
131
+ return null;
132
+ }
133
+ return { root, question, limit, apiKey, model, interactive };
134
+ }
135
+ /**
136
+ * Print help message
137
+ */
138
+ function printHelp() {
139
+ console.log(`
140
+ uca-agent - AI-Powered Code Analysis Agent
141
+
142
+ Usage:
143
+ uca-agent --question "<text>" [options]
144
+ uca-agent --interactive [options]
145
+
146
+ Options:
147
+ --root <path> Project root directory (default: current directory)
148
+ --question "<text>" Question to analyze (required unless --interactive)
149
+ --limit <number> Number of top files to analyze (default: 10)
150
+ --api-key <key> Gemini API key (or set GEMINI_API_KEY env var)
151
+ --model <name> Gemini model name (default: gemini-2.0-flash-exp)
152
+ --interactive, -i Start interactive chat mode
153
+ --help, -h Show this help message
154
+
155
+ Example:
156
+ uca-agent --question "How does authentication work?"
157
+ uca-agent --interactive --root ./my-project
158
+ uca-agent --question "Find all API endpoints" --limit 15
159
+
160
+ Environment Variables:
161
+ GEMINI_API_KEY Gemini API key (alternative to --api-key)
162
+ `);
163
+ }
164
+ /**
165
+ * Run single question mode
166
+ */
167
+ async function runSingleQuestion(args) {
168
+ console.log('🔍 Analyzing codebase...\n');
169
+ // Step 1: Generate skeletons with mapping
170
+ const result = await (0, index_1.analyzeProject)({
171
+ root: args.root,
172
+ question: args.question,
173
+ limit: args.limit,
174
+ generateMapping: true,
175
+ });
176
+ if (result.files.length === 0) {
177
+ console.log('No files found for analysis.');
178
+ return;
179
+ }
180
+ console.log(`📊 Found ${result.files.length} relevant files\n`);
181
+ // Prepare skeleton context
182
+ const skeletonContext = buildSkeletonContext(result, true);
183
+ // Step 2: Create agent and load mapping
184
+ const agent = (0, agent_1.createCodeAnalysisAgent)(args.apiKey, args.model);
185
+ const mappingPath = path.join(result.root, 'code-analyzer.mapping.json');
186
+ agent.loadMapping(mappingPath);
187
+ const stats = agent.getStats();
188
+ console.log(`📝 Loaded mapping: ${stats.totalFiles} files, ${stats.totalSymbols} symbols\n`);
189
+ console.log(`🤖 Agent is analyzing...\n`);
190
+ // Step 3: Send to agent
191
+ const response = await agent.chat(args.question, skeletonContext);
192
+ console.log('📋 Agent Response:\n');
193
+ console.log(response);
194
+ console.log('\n');
195
+ printEvidence(result);
196
+ }
197
+ /**
198
+ * Run interactive mode
199
+ */
200
+ async function runInteractive(args) {
201
+ console.log('🚀 Starting interactive code analysis agent...\n');
202
+ console.log('First, let me analyze your codebase.\n');
203
+ const buildState = async () => {
204
+ const result = await (0, index_1.analyzeProject)({
205
+ root: args.root,
206
+ question: 'code structure and organization',
207
+ limit: args.limit,
208
+ generateMapping: true,
209
+ });
210
+ if (result.files.length === 0) {
211
+ return {
212
+ result,
213
+ skeletonContext: '',
214
+ };
215
+ }
216
+ return {
217
+ result,
218
+ skeletonContext: buildSkeletonContext(result, false),
219
+ };
220
+ };
221
+ // Step 1: Generate skeletons with mapping
222
+ let state = await buildState();
223
+ if (state.result.files.length === 0) {
224
+ console.log('No files found for analysis.');
225
+ return;
226
+ }
227
+ console.log(`📊 Analyzed ${state.result.files.length} files\n`);
228
+ // Step 2: Create agent and load mapping
229
+ const agent = (0, agent_1.createCodeAnalysisAgent)(args.apiKey, args.model);
230
+ const mappingPath = path.join(state.result.root, 'code-analyzer.mapping.json');
231
+ agent.loadMapping(mappingPath);
232
+ const stats = agent.getStats();
233
+ console.log(`📝 Mapping: ${stats.totalFiles} files, ${stats.totalSymbols} symbols\n`);
234
+ console.log('💬 Ready for questions! Type /help for commands.\n');
235
+ // Step 3: Interactive loop
236
+ const rl = readline.createInterface({
237
+ input: process.stdin,
238
+ output: process.stdout,
239
+ });
240
+ const askQuestion = () => {
241
+ rl.question('You: ', async (input) => {
242
+ const question = input.trim();
243
+ if (question.toLowerCase() === 'exit' || question.toLowerCase() === '/exit') {
244
+ console.log('\n👋 Goodbye!');
245
+ rl.close();
246
+ return;
247
+ }
248
+ if (question.toLowerCase() === 'stats' || question.toLowerCase() === '/stats') {
249
+ console.log('\n📊 Statistics:');
250
+ console.log(JSON.stringify(agent.getStats(), null, 2));
251
+ console.log('');
252
+ askQuestion();
253
+ return;
254
+ }
255
+ if (question.toLowerCase() === '/help') {
256
+ console.log('');
257
+ printInteractiveHelp();
258
+ askQuestion();
259
+ return;
260
+ }
261
+ if (question.toLowerCase() === '/files') {
262
+ console.log('');
263
+ printEvidence(state.result);
264
+ askQuestion();
265
+ return;
266
+ }
267
+ if (question.toLowerCase() === '/refresh') {
268
+ console.log('\n🔄 Refreshing project analysis...');
269
+ state = await buildState();
270
+ const refreshedMappingPath = path.join(state.result.root, 'code-analyzer.mapping.json');
271
+ agent.loadMapping(refreshedMappingPath);
272
+ console.log(`✅ Refreshed ${state.result.files.length} files\n`);
273
+ askQuestion();
274
+ return;
275
+ }
276
+ if (question.startsWith('/symbols ')) {
277
+ const query = question.slice('/symbols '.length).trim();
278
+ if (!query) {
279
+ console.log('\nUsage: /symbols <query>\n');
280
+ askQuestion();
281
+ return;
282
+ }
283
+ const symbols = agent.searchSymbols(query);
284
+ console.log('\n🔎 Symbol Search Result:');
285
+ console.log(JSON.stringify(symbols, null, 2));
286
+ console.log('');
287
+ askQuestion();
288
+ return;
289
+ }
290
+ if (question.startsWith('/symbol ')) {
291
+ const symbolId = question.slice('/symbol '.length).trim();
292
+ if (!symbolId) {
293
+ console.log('\nUsage: /symbol <symbolId>\n');
294
+ askQuestion();
295
+ return;
296
+ }
297
+ const symbol = agent.getSymbolDetails(symbolId);
298
+ console.log('\n🧩 Symbol Details:');
299
+ console.log(JSON.stringify(symbol, null, 2));
300
+ console.log('');
301
+ askQuestion();
302
+ return;
303
+ }
304
+ if (question.startsWith('/deps ')) {
305
+ const filePath = question.slice('/deps '.length).trim();
306
+ if (!filePath) {
307
+ console.log('\nUsage: /deps <filePath>\n');
308
+ askQuestion();
309
+ return;
310
+ }
311
+ const deps = agent.analyzeFileDependencies(filePath);
312
+ console.log('\n🕸️ File Dependencies:');
313
+ console.log(JSON.stringify(deps, null, 2));
314
+ console.log('');
315
+ askQuestion();
316
+ return;
317
+ }
318
+ if (!question) {
319
+ askQuestion();
320
+ return;
321
+ }
322
+ console.log('\n🤖 Agent: ');
323
+ try {
324
+ const response = await agent.chat(question, state.skeletonContext);
325
+ console.log(response);
326
+ console.log('');
327
+ printEvidence(state.result);
328
+ }
329
+ catch (error) {
330
+ console.error('Error:', error instanceof Error ? error.message : error);
331
+ }
332
+ console.log('');
333
+ askQuestion();
334
+ });
335
+ };
336
+ askQuestion();
337
+ }
338
+ /**
339
+ * Main CLI function
340
+ */
341
+ async function main() {
342
+ const args = parseArgs();
343
+ if (!args) {
344
+ process.exit(1);
345
+ }
346
+ try {
347
+ if (args.interactive) {
348
+ await runInteractive(args);
349
+ }
350
+ else {
351
+ await runSingleQuestion(args);
352
+ }
353
+ }
354
+ catch (error) {
355
+ console.error('Error:', error instanceof Error ? error.message : error);
356
+ process.exit(1);
357
+ }
358
+ }
359
+ // Run CLI
360
+ main().catch((error) => {
361
+ console.error('Unexpected error:', error);
362
+ process.exit(1);
363
+ });
364
+ //# sourceMappingURL=agent-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-cli.js","sourceRoot":"","sources":["../src/agent-cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Gemini AI Agent Integration for Code Analysis
3
+ * This module provides tool definitions and agent setup for agentic code analysis
4
+ */
5
+ import { SchemaType } from '@google/generative-ai';
6
+ /**
7
+ * Tool definition for getting symbol details
8
+ */
9
+ export declare const getSymbolDetailsTool: {
10
+ name: string;
11
+ description: string;
12
+ parameters: {
13
+ type: SchemaType;
14
+ properties: {
15
+ symbolId: {
16
+ type: SchemaType;
17
+ description: string;
18
+ };
19
+ };
20
+ required: string[];
21
+ };
22
+ };
23
+ /**
24
+ * Tool definition for searching code symbols
25
+ */
26
+ export declare const searchSymbolsTool: {
27
+ name: string;
28
+ description: string;
29
+ parameters: {
30
+ type: SchemaType;
31
+ properties: {
32
+ query: {
33
+ type: SchemaType;
34
+ description: string;
35
+ };
36
+ symbolType: {
37
+ type: SchemaType;
38
+ description: string;
39
+ enum: string[];
40
+ };
41
+ };
42
+ required: string[];
43
+ };
44
+ };
45
+ /**
46
+ * Tool definition for analyzing file dependencies
47
+ */
48
+ export declare const analyzeFileDependenciesTool: {
49
+ name: string;
50
+ description: string;
51
+ parameters: {
52
+ type: SchemaType;
53
+ properties: {
54
+ filePath: {
55
+ type: SchemaType;
56
+ description: string;
57
+ };
58
+ };
59
+ required: string[];
60
+ };
61
+ };
62
+ /**
63
+ * Code Analysis Agent
64
+ */
65
+ export declare class CodeAnalysisAgent {
66
+ private genAI;
67
+ private mapping;
68
+ private model;
69
+ constructor(apiKey: string, modelName?: string);
70
+ /**
71
+ * Load symbol mapping
72
+ */
73
+ loadMapping(mappingPath: string): void;
74
+ /**
75
+ * Handle tool calls from the model
76
+ */
77
+ private handleToolCall;
78
+ /**
79
+ * Get symbol details
80
+ */
81
+ private handleGetSymbolDetails;
82
+ /**
83
+ * Search symbols
84
+ */
85
+ private handleSearchSymbols;
86
+ /**
87
+ * Analyze file dependencies
88
+ */
89
+ private handleAnalyzeFileDependencies;
90
+ /**
91
+ * Start a conversation with the agent
92
+ */
93
+ chat(userMessage: string, skeletonContext?: string): Promise<string>;
94
+ /**
95
+ * Local wrapper for symbol search without model invocation.
96
+ */
97
+ searchSymbols(query: string, symbolType?: string): any;
98
+ /**
99
+ * Local wrapper for fetching symbol implementation by ID.
100
+ */
101
+ getSymbolDetails(symbolId: string): any;
102
+ /**
103
+ * Local wrapper for file dependency analysis.
104
+ */
105
+ analyzeFileDependencies(filePath: string): any;
106
+ /**
107
+ * Get statistics about the loaded mapping
108
+ */
109
+ getStats(): any;
110
+ }
111
+ /**
112
+ * Helper function to create an agent instance
113
+ */
114
+ export declare function createCodeAnalysisAgent(apiKey: string, modelName?: string): CodeAnalysisAgent;
115
+ //# sourceMappingURL=agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAsB,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAKvE;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;CAehC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;CAmB7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;CAcvC,CAAC;AAEF;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,KAAK,CAAM;gBAEP,MAAM,EAAE,MAAM,EAAE,SAAS,GAAE,MAA+B;IAgBtE;;OAEG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAQtC;;OAEG;YACW,cAAc;IAkB5B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAsB9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAwC3B;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAqCrC;;OAEG;IACG,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiD1E;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,GAAG;IAItD;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG;IAIvC;;OAEG;IACH,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG;IAI9C;;OAEG;IACH,QAAQ,IAAI,GAAG;CAuBhB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAE7F"}