bobs-workshop 0.3.3 → 3.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 (200) hide show
  1. package/LICENSE +2 -2
  2. package/README.md +199 -210
  3. package/bin/bobs-workshop.js +109 -0
  4. package/config/agents.json +27 -0
  5. package/dist/plugins/bobs-workshop.js +34 -0
  6. package/dist/tools/background-agent/cancel.d.ts +3 -0
  7. package/dist/tools/background-agent/cancel.d.ts.map +1 -0
  8. package/dist/tools/background-agent/cancel.js +52 -0
  9. package/dist/tools/background-agent/concurrency.d.ts +15 -0
  10. package/dist/tools/background-agent/concurrency.d.ts.map +1 -0
  11. package/dist/tools/background-agent/concurrency.js +61 -0
  12. package/dist/tools/background-agent/index.d.ts +8 -0
  13. package/dist/tools/background-agent/index.d.ts.map +1 -0
  14. package/dist/tools/background-agent/index.js +7 -0
  15. package/dist/tools/background-agent/launch.d.ts +6 -0
  16. package/dist/tools/background-agent/launch.d.ts.map +1 -0
  17. package/dist/tools/background-agent/launch.js +33 -0
  18. package/dist/tools/background-agent/list.d.ts +7 -0
  19. package/dist/tools/background-agent/list.d.ts.map +1 -0
  20. package/dist/tools/background-agent/list.js +40 -0
  21. package/dist/tools/background-agent/manager.d.ts +29 -0
  22. package/dist/tools/background-agent/manager.d.ts.map +1 -0
  23. package/dist/tools/background-agent/manager.js +388 -0
  24. package/dist/tools/background-agent/output.d.ts +3 -0
  25. package/dist/tools/background-agent/output.d.ts.map +1 -0
  26. package/dist/tools/background-agent/output.js +41 -0
  27. package/dist/tools/background-agent/types.d.ts +46 -0
  28. package/dist/tools/background-agent/types.d.ts.map +1 -0
  29. package/dist/tools/background-agent/types.js +1 -0
  30. package/dist/tools/index.d.ts +9 -0
  31. package/dist/tools/index.d.ts.map +1 -0
  32. package/dist/tools/index.js +8 -0
  33. package/dist/tools/manual/index.d.ts +3 -0
  34. package/dist/tools/manual/index.d.ts.map +1 -0
  35. package/dist/tools/manual/index.js +2 -0
  36. package/dist/tools/manual/manual-update.d.ts +4 -0
  37. package/dist/tools/manual/manual-update.d.ts.map +1 -0
  38. package/dist/tools/manual/manual-update.js +190 -0
  39. package/dist/tools/manual/verify-manual.d.ts +4 -0
  40. package/dist/tools/manual/verify-manual.d.ts.map +1 -0
  41. package/dist/tools/manual/verify-manual.js +51 -0
  42. package/package.json +34 -66
  43. package/postinstall.js +193 -0
  44. package/src/agents/alice.md +466 -0
  45. package/src/agents/bob-rev.md +493 -0
  46. package/src/agents/bob-send.md +277 -0
  47. package/src/agents/bob.md +442 -0
  48. package/src/agents/trace.md +451 -0
  49. package/src/plugins/bobs-workshop.ts +45 -0
  50. package/src/skills/api-patterns/SKILL.md +376 -0
  51. package/src/skills/architecture/SKILL.md +271 -0
  52. package/src/skills/bobs-workshop/performance/icon.svg +3 -0
  53. package/src/skills/brainstorming/SKILL.md +210 -0
  54. package/src/skills/clean-code/SKILL.md +151 -0
  55. package/src/skills/code-review-checklist/SKILL.md +220 -0
  56. package/src/skills/database-design/SKILL.md +271 -0
  57. package/src/skills/exploration/SKILL.md +257 -0
  58. package/src/skills/frontend-ui-ux/SKILL.md +78 -0
  59. package/src/skills/git-master/SKILL.md +1105 -0
  60. package/src/skills/performance/SKILL.md +144 -0
  61. package/src/skills/performance/icon.svg +3 -0
  62. package/src/skills/plan-writing/SKILL.md +225 -0
  63. package/src/skills/security/SKILL.md +410 -0
  64. package/src/skills/simplification/SKILL.md +238 -0
  65. package/src/skills/systematic-debugging/SKILL.md +175 -0
  66. package/src/skills/testing-patterns/SKILL.md +305 -0
  67. package/src/skills/verification/SKILL.md +286 -0
  68. package/src/tools/background-agent/cancel.ts +67 -0
  69. package/src/tools/background-agent/concurrency.ts +71 -0
  70. package/src/tools/background-agent/index.ts +7 -0
  71. package/src/tools/background-agent/launch.ts +39 -0
  72. package/src/tools/background-agent/list.ts +50 -0
  73. package/src/tools/background-agent/manager.ts +466 -0
  74. package/src/tools/background-agent/output.ts +57 -0
  75. package/src/tools/background-agent/types.ts +55 -0
  76. package/src/tools/index.ts +8 -0
  77. package/src/tools/manual/index.ts +2 -0
  78. package/src/tools/manual/manual-update.ts +197 -0
  79. package/src/tools/manual/verify-manual.ts +60 -0
  80. package/uninstall.js +64 -0
  81. package/Claude.md +0 -162
  82. package/bin/bobs-mcp-server.js +0 -11
  83. package/bin/bobs-mcp.js +0 -130
  84. package/dist/api/taskLogger.js +0 -106
  85. package/dist/api/taskLogger.js.map +0 -1
  86. package/dist/cli/checker.js +0 -401
  87. package/dist/cli/checker.js.map +0 -1
  88. package/dist/cli/cleanup.js +0 -131
  89. package/dist/cli/cleanup.js.map +0 -1
  90. package/dist/cli/debug.js +0 -157
  91. package/dist/cli/debug.js.map +0 -1
  92. package/dist/cli/health.js +0 -97
  93. package/dist/cli/health.js.map +0 -1
  94. package/dist/cli/setup.js +0 -81
  95. package/dist/cli/setup.js.map +0 -1
  96. package/dist/cli/workshop.js +0 -42
  97. package/dist/cli/workshop.js.map +0 -1
  98. package/dist/dashboard/server.js +0 -1203
  99. package/dist/dashboard/server.js.map +0 -1
  100. package/dist/index.js +0 -960
  101. package/dist/index.js.map +0 -1
  102. package/dist/prompts/architect.js +0 -221
  103. package/dist/prompts/architect.js.map +0 -1
  104. package/dist/prompts/debugger.js +0 -257
  105. package/dist/prompts/debugger.js.map +0 -1
  106. package/dist/prompts/engineer.js +0 -249
  107. package/dist/prompts/engineer.js.map +0 -1
  108. package/dist/prompts/orchestrator.js +0 -304
  109. package/dist/prompts/orchestrator.js.map +0 -1
  110. package/dist/prompts/reviewer.js +0 -289
  111. package/dist/prompts/reviewer.js.map +0 -1
  112. package/dist/services/activitySummarizer.js +0 -388
  113. package/dist/services/activitySummarizer.js.map +0 -1
  114. package/dist/services/changeValidator.js +0 -396
  115. package/dist/services/changeValidator.js.map +0 -1
  116. package/dist/services/claudeOrchestrator.js +0 -343
  117. package/dist/services/claudeOrchestrator.js.map +0 -1
  118. package/dist/services/fileMonitor.js +0 -250
  119. package/dist/services/fileMonitor.js.map +0 -1
  120. package/dist/services/implementationSummarizer.js +0 -306
  121. package/dist/services/implementationSummarizer.js.map +0 -1
  122. package/dist/services/liveMonitor.js +0 -315
  123. package/dist/services/liveMonitor.js.map +0 -1
  124. package/dist/services/mcpAuditLogger.js +0 -104
  125. package/dist/services/mcpAuditLogger.js.map +0 -1
  126. package/dist/services/mcpLogger.js +0 -223
  127. package/dist/services/mcpLogger.js.map +0 -1
  128. package/dist/services/tmuxManager.js +0 -541
  129. package/dist/services/tmuxManager.js.map +0 -1
  130. package/dist/tools/approvalTools.js +0 -244
  131. package/dist/tools/approvalTools.js.map +0 -1
  132. package/dist/tools/autoDebugger.js +0 -147
  133. package/dist/tools/autoDebugger.js.map +0 -1
  134. package/dist/tools/cleanupService.js +0 -221
  135. package/dist/tools/cleanupService.js.map +0 -1
  136. package/dist/tools/dashboardTools.js +0 -342
  137. package/dist/tools/dashboardTools.js.map +0 -1
  138. package/dist/tools/developmentNudges.js +0 -336
  139. package/dist/tools/developmentNudges.js.map +0 -1
  140. package/dist/tools/gitTools.js +0 -741
  141. package/dist/tools/gitTools.js.map +0 -1
  142. package/dist/tools/orchestratorTools.js +0 -832
  143. package/dist/tools/orchestratorTools.js.map +0 -1
  144. package/dist/tools/searchCache.js +0 -64
  145. package/dist/tools/searchCache.js.map +0 -1
  146. package/dist/tools/searchTools.js +0 -1107
  147. package/dist/tools/searchTools.js.map +0 -1
  148. package/dist/tools/semgrep-patterns.js +0 -296
  149. package/dist/tools/semgrep-patterns.js.map +0 -1
  150. package/dist/tools/specTools.js +0 -332
  151. package/dist/tools/specTools.js.map +0 -1
  152. package/dist/tools/structural/__tests__/orchestrator.test.js +0 -61
  153. package/dist/tools/structural/__tests__/orchestrator.test.js.map +0 -1
  154. package/dist/tools/structural/cache.js +0 -226
  155. package/dist/tools/structural/cache.js.map +0 -1
  156. package/dist/tools/structural/engines/python/index.js +0 -118
  157. package/dist/tools/structural/engines/python/index.js.map +0 -1
  158. package/dist/tools/structural/engines/typescript/__tests__/typescript-engine.test.js +0 -97
  159. package/dist/tools/structural/engines/typescript/__tests__/typescript-engine.test.js.map +0 -1
  160. package/dist/tools/structural/engines/typescript/analyzer.js +0 -433
  161. package/dist/tools/structural/engines/typescript/analyzer.js.map +0 -1
  162. package/dist/tools/structural/engines/typescript/index.js +0 -381
  163. package/dist/tools/structural/engines/typescript/index.js.map +0 -1
  164. package/dist/tools/structural/engines/typescript/utils.js +0 -279
  165. package/dist/tools/structural/engines/typescript/utils.js.map +0 -1
  166. package/dist/tools/structural/index.js +0 -248
  167. package/dist/tools/structural/index.js.map +0 -1
  168. package/dist/tools/structural/types.js +0 -18
  169. package/dist/tools/structural/types.js.map +0 -1
  170. package/dist/tools/tmuxTools.js +0 -100
  171. package/dist/tools/tmuxTools.js.map +0 -1
  172. package/dist/tools/workRecorder.js +0 -215
  173. package/dist/tools/workRecorder.js.map +0 -1
  174. package/dist/tools/worktreeTools.js +0 -705
  175. package/dist/tools/worktreeTools.js.map +0 -1
  176. package/dist/utils/__tests__/integration.test.js +0 -57
  177. package/dist/utils/__tests__/integration.test.js.map +0 -1
  178. package/dist/utils/__tests__/serverDetection.test.js +0 -151
  179. package/dist/utils/__tests__/serverDetection.test.js.map +0 -1
  180. package/dist/utils/errorHandling.js +0 -336
  181. package/dist/utils/errorHandling.js.map +0 -1
  182. package/dist/utils/processManager.js +0 -172
  183. package/dist/utils/processManager.js.map +0 -1
  184. package/dist/utils/reliability.js +0 -263
  185. package/dist/utils/reliability.js.map +0 -1
  186. package/dist/utils/responseFormatter.js +0 -250
  187. package/dist/utils/responseFormatter.js.map +0 -1
  188. package/dist/utils/serverDetection.js +0 -133
  189. package/dist/utils/serverDetection.js.map +0 -1
  190. package/dist/utils/specMigration.js +0 -105
  191. package/dist/utils/specMigration.js.map +0 -1
  192. package/dist/validation/schemas.js +0 -299
  193. package/dist/validation/schemas.js.map +0 -1
  194. package/public/.well-known/mcp/manifest.json +0 -473
  195. package/public/index.html +0 -3157
  196. package/public/index.html.backup +0 -2805
  197. package/public/index.html.backup2 +0 -1292
  198. package/scripts/cleanup-system-logs.ts +0 -121
  199. package/scripts/init-workspace.js +0 -63
  200. package/scripts/install-search-tools.js +0 -116
@@ -1,279 +0,0 @@
1
- import { Project, SyntaxKind, ts } from "ts-morph";
2
- import { glob } from "glob";
3
- import { minimatch } from "minimatch";
4
- import path from "path";
5
- import * as fs from "fs";
6
- import { cacheManager } from "../../cache.js";
7
- // Re-export for backward compatibility
8
- export const fileCache = {
9
- get: (key) => {
10
- const cached = cacheManager.getCachedFile(key);
11
- return cached?.then(c => c?.sourceFile);
12
- },
13
- set: (key, value) => {
14
- cacheManager.setCachedFile(key, value);
15
- },
16
- clear: () => cacheManager.clearFileCache()
17
- };
18
- export const symbolCache = {
19
- get: (key) => cacheManager.getCachedSymbol(key),
20
- set: (key, value) => cacheManager.setCachedSymbol(key, value),
21
- clear: () => cacheManager.clearSymbolCache()
22
- };
23
- export const performanceConfig = {
24
- maxMemoryMB: 2048,
25
- batchSize: 50,
26
- cacheStrategy: "memory",
27
- gcInterval: 100
28
- };
29
- export const timeoutLimits = {
30
- singleFile: 5000,
31
- symbolSearch: 10000,
32
- projectAnalysis: 60000,
33
- impactAnalysis: 30000,
34
- };
35
- export const securityConfig = {
36
- allowedPaths: ["./src", "./tests", "./lib"],
37
- excludePatterns: ["**/node_modules/**", "**/.git/**", "**/dist/**", "**/build/**"],
38
- maxFileSize: 5 * 1024 * 1024,
39
- maxPathDepth: 10,
40
- };
41
- export function findProjectRoot(filePath) {
42
- let currentDir = path.dirname(path.resolve(filePath));
43
- // First priority: look for tsconfig.json (closest to the file)
44
- let tsConfigDir = null;
45
- let tempDir = currentDir;
46
- while (tempDir !== path.dirname(tempDir)) {
47
- if (fs.existsSync(path.join(tempDir, 'tsconfig.json'))) {
48
- tsConfigDir = tempDir;
49
- break;
50
- }
51
- tempDir = path.dirname(tempDir);
52
- }
53
- // If we found a tsconfig.json, use it
54
- if (tsConfigDir) {
55
- return tsConfigDir;
56
- }
57
- // Fallback: look for package.json or .git
58
- while (currentDir !== path.dirname(currentDir)) {
59
- if (fs.existsSync(path.join(currentDir, 'package.json')) ||
60
- fs.existsSync(path.join(currentDir, '.git'))) {
61
- return currentDir;
62
- }
63
- currentDir = path.dirname(currentDir);
64
- }
65
- // Final fallback to the directory containing the file
66
- return path.dirname(path.resolve(filePath));
67
- }
68
- export function createProject(rootPath, includeNodeModules = false) {
69
- const workingDir = rootPath || process.cwd();
70
- // Check if there's a tsconfig.json file
71
- const tsConfigPath = path.join(workingDir, 'tsconfig.json');
72
- const hasTsConfig = fs.existsSync(tsConfigPath);
73
- // If we have a tsconfig and we're not doing symbol analysis (includeNodeModules), use it
74
- if (hasTsConfig && !includeNodeModules) {
75
- try {
76
- const project = new Project({
77
- tsConfigFilePath: tsConfigPath,
78
- skipAddingFilesFromTsConfig: true,
79
- useInMemoryFileSystem: false,
80
- skipFileDependencyResolution: false // Enable for language service operations
81
- });
82
- return project;
83
- }
84
- catch (error) {
85
- // If tsconfig parsing fails, fall back to default options
86
- console.error('Failed to parse tsconfig.json, using defaults:', error);
87
- }
88
- }
89
- // Use default compiler options for symbol analysis or when tsconfig is not available
90
- const baseOptions = {
91
- target: ts.ScriptTarget.ES2022,
92
- module: ts.ModuleKind.ESNext,
93
- moduleResolution: ts.ModuleResolutionKind.Bundler,
94
- allowJs: true,
95
- declaration: true,
96
- esModuleInterop: true,
97
- allowSyntheticDefaultImports: true,
98
- strict: false, // Disable strict mode for better compatibility
99
- skipLibCheck: true,
100
- noEmit: true,
101
- resolveJsonModule: true,
102
- isolatedModules: true,
103
- allowImportingTsExtensions: false,
104
- noResolve: false,
105
- jsx: ts.JsxEmit.ReactJSX,
106
- };
107
- if (includeNodeModules) {
108
- const projectRoot = workingDir;
109
- baseOptions.typeRoots = [
110
- path.join(projectRoot, "node_modules/@types"),
111
- path.join(projectRoot, "node_modules")
112
- ];
113
- baseOptions.baseUrl = projectRoot;
114
- baseOptions.paths = {
115
- "*": ["node_modules/*", "node_modules/@types/*"]
116
- };
117
- }
118
- const project = new Project({
119
- compilerOptions: baseOptions,
120
- skipAddingFilesFromTsConfig: true,
121
- useInMemoryFileSystem: false,
122
- skipFileDependencyResolution: false // Enable for language service operations
123
- });
124
- return project;
125
- }
126
- export function findClosestTsConfig(filePath) {
127
- let currentDir = path.dirname(path.resolve(filePath));
128
- // Walk up from the target path looking only for tsconfig.json
129
- while (currentDir !== path.dirname(currentDir)) {
130
- const tsConfigPath = path.join(currentDir, 'tsconfig.json');
131
- if (fs.existsSync(tsConfigPath)) {
132
- return currentDir;
133
- }
134
- currentDir = path.dirname(currentDir);
135
- }
136
- return null;
137
- }
138
- export function nodeToLocation(node) {
139
- const sourceFile = node.getSourceFile();
140
- const start = sourceFile.getLineAndColumnAtPos(node.getStart());
141
- const end = sourceFile.getLineAndColumnAtPos(node.getEnd());
142
- return {
143
- file: sourceFile.getFilePath(),
144
- position: {
145
- line: start.line - 1,
146
- character: start.column - 1
147
- },
148
- endPosition: {
149
- line: end.line - 1,
150
- character: end.column - 1
151
- }
152
- };
153
- }
154
- export function positionToOffset(sourceFile, position) {
155
- const character = position.character ?? 0;
156
- const pos = sourceFile.compilerNode.getPositionOfLineAndCharacter(position.line, character);
157
- return pos;
158
- }
159
- export function getSymbolKind(node) {
160
- const kind = node.getKind();
161
- switch (kind) {
162
- case SyntaxKind.ClassDeclaration:
163
- return "class";
164
- case SyntaxKind.InterfaceDeclaration:
165
- return "interface";
166
- case SyntaxKind.EnumDeclaration:
167
- return "enum";
168
- case SyntaxKind.FunctionDeclaration:
169
- case SyntaxKind.FunctionExpression:
170
- case SyntaxKind.ArrowFunction:
171
- return "function";
172
- case SyntaxKind.MethodDeclaration:
173
- case SyntaxKind.MethodSignature:
174
- return "method";
175
- case SyntaxKind.PropertyDeclaration:
176
- case SyntaxKind.PropertySignature:
177
- return "property";
178
- case SyntaxKind.VariableDeclaration:
179
- return "variable";
180
- case SyntaxKind.Parameter:
181
- return "parameter";
182
- case SyntaxKind.TypeAliasDeclaration:
183
- return "type";
184
- case SyntaxKind.ModuleDeclaration:
185
- return "module";
186
- case SyntaxKind.NamespaceKeyword:
187
- return "namespace";
188
- default:
189
- return "variable";
190
- }
191
- }
192
- export async function findFiles(pattern, basePath = process.cwd()) {
193
- const files = await glob(pattern, {
194
- cwd: basePath,
195
- absolute: true,
196
- ignore: securityConfig.excludePatterns,
197
- });
198
- return files.filter(file => {
199
- const relativePath = path.relative(basePath, file);
200
- const depth = relativePath.split(path.sep).length;
201
- return depth <= securityConfig.maxPathDepth;
202
- });
203
- }
204
- export function matchesScope(filePath, scope) {
205
- if (!scope)
206
- return true;
207
- if (scope.fileTypes) {
208
- const ext = path.extname(filePath);
209
- if (!scope.fileTypes.includes(ext))
210
- return false;
211
- }
212
- if (scope.excludeFiles) {
213
- for (const pattern of scope.excludeFiles) {
214
- if (minimatch(filePath, pattern))
215
- return false;
216
- }
217
- }
218
- if (scope.includeFiles) {
219
- for (const pattern of scope.includeFiles) {
220
- if (minimatch(filePath, pattern))
221
- return true;
222
- }
223
- return false;
224
- }
225
- return true;
226
- }
227
- export function validatePath(filePath, allowNodeModules = false) {
228
- // Path validation removed - allow analyzing files from any location
229
- return;
230
- }
231
- export function getNodeComplexity(node) {
232
- let complexity = 1;
233
- node.forEachDescendant(child => {
234
- const kind = child.getKind();
235
- if (kind === SyntaxKind.IfStatement ||
236
- kind === SyntaxKind.ForStatement ||
237
- kind === SyntaxKind.ForInStatement ||
238
- kind === SyntaxKind.ForOfStatement ||
239
- kind === SyntaxKind.WhileStatement ||
240
- kind === SyntaxKind.DoStatement ||
241
- kind === SyntaxKind.ConditionalExpression ||
242
- kind === SyntaxKind.CatchClause ||
243
- kind === SyntaxKind.CaseClause ||
244
- kind === SyntaxKind.BinaryExpression) {
245
- complexity++;
246
- }
247
- });
248
- return complexity;
249
- }
250
- export function getTypeString(type, maxLength = 500) {
251
- const typeText = type.getText();
252
- if (typeText.length > maxLength) {
253
- return typeText.substring(0, maxLength - 3) + "...";
254
- }
255
- return typeText;
256
- }
257
- export async function checkMemoryUsage() {
258
- const usage = process.memoryUsage();
259
- const heapUsedMB = usage.heapUsed / 1024 / 1024;
260
- const cacheMemoryMB = cacheManager.getMemoryUsage() / 1024 / 1024;
261
- if (heapUsedMB + cacheMemoryMB > performanceConfig.maxMemoryMB * 0.9) {
262
- if (global.gc) {
263
- global.gc();
264
- }
265
- await cacheManager.clearAll();
266
- }
267
- }
268
- export class TimeoutError extends Error {
269
- constructor(operation, limit) {
270
- super(`Operation '${operation}' timed out after ${limit}ms`);
271
- }
272
- }
273
- export function withTimeout(promise, operation, limit) {
274
- return Promise.race([
275
- promise,
276
- new Promise((_, reject) => setTimeout(() => reject(new TimeoutError(operation, limit)), limit))
277
- ]);
278
- }
279
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../src/tools/structural/engines/typescript/utils.ts"],"names":[],"mappings":"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"}
@@ -1,248 +0,0 @@
1
- import * as fs from "fs";
2
- import * as path from "path";
3
- import { TypeScriptEngine } from "./engines/typescript/index.js";
4
- import { ErrorCode, AnalysisError } from "./types.js";
5
- /**
6
- * Structural Search Orchestrator
7
- *
8
- * Coordinates AST-based structural searches across different languages.
9
- * Routes queries to appropriate engines (TypeScript, Python, etc.)
10
- */
11
- export class StructuralSearchOrchestrator {
12
- constructor() {
13
- this.engines = new Map([
14
- ["typescript", new TypeScriptEngine()],
15
- ["javascript", new TypeScriptEngine()], // JS uses TS engine
16
- ["tsx", new TypeScriptEngine()],
17
- ["jsx", new TypeScriptEngine()],
18
- // ["python", new PythonEngine()], // Disabled until Phase 2
19
- ]);
20
- }
21
- /**
22
- * Main search method - analyzes query and routes to appropriate engine
23
- */
24
- async search(query, options) {
25
- const language = this.detectLanguage(options.scope || process.cwd());
26
- const engine = this.selectEngine(language);
27
- if (!engine) {
28
- throw new AnalysisError({
29
- code: ErrorCode.PARSE_ERROR,
30
- message: `No structural search engine available for language: ${language}`,
31
- details: {
32
- suggestion: "Structural search currently supports TypeScript/JavaScript. Use lexical or semantic search for other languages."
33
- }
34
- });
35
- }
36
- const operation = this.parseOperation(query);
37
- const scope = options.scope || process.cwd();
38
- switch (operation.type) {
39
- case "references":
40
- if (!operation.symbol) {
41
- throw new AnalysisError({
42
- code: ErrorCode.INVALID_PATTERN,
43
- message: "Symbol name is required for references search"
44
- });
45
- }
46
- return engine.findReferences(operation.symbol, scope, options);
47
- case "definition":
48
- if (!operation.symbol) {
49
- throw new AnalysisError({
50
- code: ErrorCode.INVALID_PATTERN,
51
- message: "Symbol name is required for definition search"
52
- });
53
- }
54
- const def = await engine.findDefinition(operation.symbol, scope, options);
55
- return def ? [def] : [];
56
- case "dependencies":
57
- // If a target file is specified in the query, resolve it relative to scope
58
- const targetPath = operation.target
59
- ? (path.isAbsolute(operation.target) ? operation.target : path.join(scope, operation.target))
60
- : scope;
61
- return engine.getDependencies(targetPath, options);
62
- case "architectural-issues":
63
- // Architect-specific: find architectural problems
64
- if (language === "typescript" || language === "javascript") {
65
- const tsEngine = engine;
66
- const issues = await tsEngine.findArchitecturalIssues(scope);
67
- return issues.map(issue => ({
68
- file: issue.location.file,
69
- line: issue.location.position.line,
70
- symbol: issue.type,
71
- kind: "variable",
72
- context: `${issue.severity.toUpperCase()}: ${issue.message}`,
73
- relevance: issue.severity === "error" ? 1.0 : issue.severity === "warning" ? 0.7 : 0.5
74
- }));
75
- }
76
- return [];
77
- case "call-graph":
78
- // Debugger-specific: show call relationships
79
- if (!operation.symbol) {
80
- throw new AnalysisError({
81
- code: ErrorCode.INVALID_PATTERN,
82
- message: "Symbol name is required for call graph analysis"
83
- });
84
- }
85
- // For now, use references as a proxy for call graph
86
- return engine.findReferences(operation.symbol, scope, options);
87
- case "unused-exports":
88
- // Engineer-specific: find unused exports
89
- if (language === "typescript" || language === "javascript") {
90
- const tsEngine = engine;
91
- const unused = await tsEngine.findUnusedExports(scope);
92
- return unused.map(item => ({
93
- file: item.location.file,
94
- line: item.location.position.line,
95
- symbol: item.name,
96
- kind: item.kind,
97
- context: `Unused export from ${item.exportedFrom}`,
98
- relevance: 0.8
99
- }));
100
- }
101
- return [];
102
- default:
103
- throw new AnalysisError({
104
- code: ErrorCode.INVALID_PATTERN,
105
- message: `Unsupported operation type: ${operation.type}`
106
- });
107
- }
108
- }
109
- /**
110
- * Detect programming language from project structure
111
- */
112
- detectLanguage(projectPath) {
113
- // Check if path looks like a file (has extension), even if it doesn't exist
114
- const ext = path.extname(projectPath).substring(1);
115
- if (ext) {
116
- // Normalize extensions to language names
117
- if (ext === 'ts' || ext === 'tsx')
118
- return 'typescript';
119
- if (ext === 'js' || ext === 'jsx')
120
- return 'javascript';
121
- if (ext === 'py')
122
- return 'python';
123
- return ext || "typescript";
124
- }
125
- // If it's an existing file, use its extension
126
- if (fs.existsSync(projectPath) && fs.statSync(projectPath).isFile()) {
127
- return "typescript"; // Default for files without extension
128
- }
129
- // Check for project indicators
130
- const indicators = [
131
- { file: "tsconfig.json", language: "typescript" },
132
- { file: "package.json", language: "typescript" }, // Assume TypeScript for Node projects
133
- { file: "requirements.txt", language: "python" },
134
- { file: "setup.py", language: "python" },
135
- { file: "pyproject.toml", language: "python" },
136
- ];
137
- for (const { file, language } of indicators) {
138
- if (fs.existsSync(path.join(projectPath, file))) {
139
- return language;
140
- }
141
- }
142
- // Default to TypeScript
143
- return "typescript";
144
- }
145
- /**
146
- * Select appropriate engine for language
147
- */
148
- selectEngine(language) {
149
- return this.engines.get(language);
150
- }
151
- /**
152
- * Parse natural language query to extract operation intent
153
- *
154
- * Supported patterns (from spec):
155
- * - US-1: "find references to UserService"
156
- * - US-1: "show all usages of calculatePrice"
157
- * - US-2: "go to definition of AuthToken"
158
- * - US-2: "where is validateInput defined"
159
- * - US-3: "show dependencies for user.ts"
160
- * - US-3: "what does api/auth.ts import"
161
- */
162
- parseOperation(query) {
163
- const normalized = query.toLowerCase().trim();
164
- const original = query.trim(); // Preserve original casing for symbol names
165
- // Pattern 1: References
166
- if (normalized.match(/find references (to|for|of)\s+(\w+)/) ||
167
- normalized.match(/show (all )?usages? (of|for)\s+(\w+)/) ||
168
- normalized.match(/where is (\w+) used/) ||
169
- normalized.match(/who uses (\w+)/)) {
170
- // Extract symbol from original query to preserve casing
171
- const symbolMatch = original.match(/(?:to|for|of|used|uses)\s+(\w+)/) ||
172
- original.match(/where is (\w+)/);
173
- const symbol = symbolMatch ? symbolMatch[1] : undefined;
174
- return {
175
- type: "references",
176
- symbol
177
- };
178
- }
179
- // Pattern 2: Definition
180
- if (normalized.match(/go to definition (of|for)\s+(\w+)/) ||
181
- normalized.match(/where is (\w+) defined/) ||
182
- normalized.match(/find definition (of|for)\s+(\w+)/) ||
183
- normalized.match(/show (\w+) definition/)) {
184
- // Extract symbol from original query to preserve casing
185
- const symbolMatch = original.match(/(?:of|for|is)\s+(\w+)(?:\s+defined)?/) ||
186
- original.match(/show (\w+)/);
187
- const symbol = symbolMatch ? symbolMatch[1] : undefined;
188
- return {
189
- type: "definition",
190
- symbol
191
- };
192
- }
193
- // Pattern 3: Dependencies
194
- if (normalized.match(/show dependencies (for|of)\s+(.+)/) ||
195
- normalized.match(/what does (.+) import/) ||
196
- normalized.match(/list imports (in|for)\s+(.+)/) ||
197
- normalized.match(/dependencies (of|for)\s+(.+)/)) {
198
- // Extract from original query to preserve casing
199
- const targetMatch = original.match(/(?:for|of)\s+(.+)$/) ||
200
- original.match(/what does (.+) import/) ||
201
- original.match(/(?:in|for)\s+(.+)$/);
202
- const target = targetMatch ? targetMatch[1].trim() : undefined;
203
- return {
204
- type: "dependencies",
205
- target
206
- };
207
- }
208
- // Pattern 4: Call graph
209
- if (normalized.match(/call graph (for|of)\s+(\w+)/) ||
210
- normalized.match(/what calls (\w+)/) ||
211
- normalized.match(/show callers (of|for)\s+(\w+)/)) {
212
- // Extract symbol from original query to preserve casing
213
- const symbolMatch = original.match(/(?:for|of|calls)\s+(\w+)/) ||
214
- original.match(/what calls (\w+)/);
215
- const symbol = symbolMatch ? symbolMatch[1] : undefined;
216
- return {
217
- type: "call-graph",
218
- symbol
219
- };
220
- }
221
- // Pattern 5: Architectural issues
222
- if (normalized.match(/find (circular|architectural) (dependencies|issues)/) ||
223
- normalized.match(/check architecture/) ||
224
- normalized.match(/analyze (architecture|structure)/) ||
225
- normalized.match(/circular dependencies/)) {
226
- return {
227
- type: "architectural-issues"
228
- };
229
- }
230
- // Pattern 6: Unused exports
231
- if (normalized.match(/find unused exports/) ||
232
- normalized.match(/show unused exports/) ||
233
- normalized.match(/list unused exports/) ||
234
- normalized.match(/unused (code|exports)/)) {
235
- return {
236
- type: "unused-exports"
237
- };
238
- }
239
- // Default: Try to extract symbol name and assume references search
240
- const words = original.split(/\s+/); // Use original to detect CamelCase
241
- const potentialSymbol = words.find(w => /^[A-Z][a-zA-Z0-9]*$/.test(w)); // CamelCase
242
- return {
243
- type: "references",
244
- symbol: potentialSymbol
245
- };
246
- }
247
- }
248
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/structural/index.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- export var ErrorCode;
2
- (function (ErrorCode) {
3
- ErrorCode["FILE_NOT_FOUND"] = "FILE_NOT_FOUND";
4
- ErrorCode["PARSE_ERROR"] = "PARSE_ERROR";
5
- ErrorCode["TIMEOUT"] = "TIMEOUT";
6
- ErrorCode["MEMORY_LIMIT"] = "MEMORY_LIMIT";
7
- ErrorCode["INVALID_PATTERN"] = "INVALID_PATTERN";
8
- ErrorCode["SCOPE_ERROR"] = "SCOPE_ERROR";
9
- })(ErrorCode || (ErrorCode = {}));
10
- export class AnalysisError extends Error {
11
- constructor(data) {
12
- super(data.message);
13
- this.code = data.code;
14
- this.details = data.details;
15
- this.name = "AnalysisError";
16
- }
17
- }
18
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/tools/structural/types.ts"],"names":[],"mappings":"AAwHA,MAAM,CAAN,IAAY,SAOX;AAPD,WAAY,SAAS;IACnB,8CAAiC,CAAA;IACjC,wCAA2B,CAAA;IAC3B,gCAAmB,CAAA;IACnB,0CAA6B,CAAA;IAC7B,gDAAmC,CAAA;IACnC,wCAA2B,CAAA;AAC7B,CAAC,EAPW,SAAS,KAAT,SAAS,QAOpB;AAUD,MAAM,OAAO,aAAc,SAAQ,KAAK;IAYtC,YAAY,IAYX;QACC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF"}