bobs-workshop 0.3.0 → 0.3.2

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 (34) hide show
  1. package/Claude.md +30 -4
  2. package/README.md +2 -2
  3. package/dist/index.js +4 -4
  4. package/dist/index.js.map +1 -1
  5. package/dist/prompts/architect.js +6 -1
  6. package/dist/prompts/architect.js.map +1 -1
  7. package/dist/prompts/debugger.js +5 -0
  8. package/dist/prompts/debugger.js.map +1 -1
  9. package/dist/prompts/engineer.js +6 -1
  10. package/dist/prompts/engineer.js.map +1 -1
  11. package/dist/prompts/reviewer.js +6 -1
  12. package/dist/prompts/reviewer.js.map +1 -1
  13. package/dist/tools/searchTools.js +111 -18
  14. package/dist/tools/searchTools.js.map +1 -1
  15. package/dist/tools/structural/__tests__/orchestrator.test.js +61 -0
  16. package/dist/tools/structural/__tests__/orchestrator.test.js.map +1 -0
  17. package/dist/tools/structural/cache.js +226 -0
  18. package/dist/tools/structural/cache.js.map +1 -0
  19. package/dist/tools/structural/engines/python/index.js +118 -0
  20. package/dist/tools/structural/engines/python/index.js.map +1 -0
  21. package/dist/tools/structural/engines/typescript/__tests__/typescript-engine.test.js +97 -0
  22. package/dist/tools/structural/engines/typescript/__tests__/typescript-engine.test.js.map +1 -0
  23. package/dist/tools/structural/engines/typescript/analyzer.js +433 -0
  24. package/dist/tools/structural/engines/typescript/analyzer.js.map +1 -0
  25. package/dist/tools/structural/engines/typescript/index.js +381 -0
  26. package/dist/tools/structural/engines/typescript/index.js.map +1 -0
  27. package/dist/tools/structural/engines/typescript/utils.js +279 -0
  28. package/dist/tools/structural/engines/typescript/utils.js.map +1 -0
  29. package/dist/tools/structural/index.js +248 -0
  30. package/dist/tools/structural/index.js.map +1 -0
  31. package/dist/tools/structural/types.js +18 -0
  32. package/dist/tools/structural/types.js.map +1 -0
  33. package/package.json +7 -5
  34. package/public/.well-known/mcp/manifest.json +6 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../src/tools/structural/engines/typescript/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,248 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/structural/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
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
@@ -0,0 +1 @@
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bobs-workshop",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "description": "Bob's Workshop — agentic development helper with observability, guard rails, research, and review capabilities",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -26,15 +26,17 @@
26
26
  "chokidar": "^4.0.3",
27
27
  "express": "^4.x",
28
28
  "fs-extra": "^11.x",
29
+ "glob": "^10.3.10",
30
+ "lru-cache": "^10.1.0",
31
+ "minimatch": "^9.0.3",
29
32
  "multer": "^2.0.2",
30
33
  "simple-git": "^3.x",
34
+ "ts-morph": "^23.0.0",
31
35
  "uuid": "^9.x",
32
- "zod": "^3.x"
33
- },
34
- "optionalDependencies": {
36
+ "zod": "^3.x",
35
37
  "@lvce-editor/ripgrep": "^2.4.0"
36
38
  },
37
- "devDependencies": {
39
+ "devDependencies": {
38
40
  "@types/chokidar": "^1.7.5",
39
41
  "@types/express": "^5.0.3",
40
42
  "@types/fs-extra": "^11.0.4",
@@ -173,14 +173,14 @@
173
173
  "mcp__bobs-workshop__bob_code_search": {
174
174
  "title": "Code Search",
175
175
  "category": "search",
176
- "description": "Phase-aware unified search combining semantic (semgrep) and lexical (ripgrep) search capabilities. Automatically selects best search mode based on query and phase context.",
177
- "enhancements": ["mode_banner", "smart_query_routing", "summary_output", "phase_aware_analysis"],
176
+ "description": "Phase-aware hybrid search combining semantic (semgrep), lexical (ripgrep), and structural (AST-based) search. Automatically selects best mode based on query and phase context. Structural mode provides symbol references, definitions, and dependency analysis for TypeScript/JavaScript.",
177
+ "enhancements": ["mode_banner", "smart_query_routing", "summary_output", "phase_aware_analysis", "structural_ast_analysis"],
178
178
  "permissions": { "file_read": true },
179
179
  "rate_limits": { "rps": 6, "burst": 12 },
180
180
  "timeouts": { "ms": 6000 },
181
181
  "input_schema": {
182
- "query": "string (REQUIRED) - search query or pattern",
183
- "mode": "enum(auto,semantic,lexical)? - auto selects best mode based on query",
182
+ "query": "string (REQUIRED) - search query, pattern, or structural query (e.g., 'find references to UserService', 'show dependencies for api.ts')",
183
+ "mode": "enum(auto,semantic,lexical,structural)? - auto selects best mode based on query (structural for symbol/dependency queries)",
184
184
  "phase": "enum(architect,engineer,debugger,reviewer)? - role context for specialized analysis rules",
185
185
  "path": "string? - directory to search within (defaults to current directory)",
186
186
  "includeHidden": "boolean? - include hidden files/folders",
@@ -198,7 +198,8 @@
198
198
  },
199
199
  "usage_guidelines": [
200
200
  "Use phase parameter to get specialized analysis relevant to your role",
201
- "mode=auto (default) automatically selects semantic or lexical based on query complexity",
201
+ "mode=auto (default) automatically routes to structural, semantic, or lexical based on query type",
202
+ "Structural mode: AST-based analysis for 'find references to X', 'show dependencies', 'go to definition' (TypeScript/JavaScript only)",
202
203
  "Semantic mode: Best for finding patterns, similar code structures, or architectural analysis",
203
204
  "Lexical mode: Best for exact matches, symbol lookups, or simple string searches",
204
205
  "Combine with path parameter to scope searches to specific directories",