bobs-workshop 0.2.7 → 0.3.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 (36) 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 +82 -75
  14. package/dist/tools/searchTools.js.map +1 -1
  15. package/dist/tools/semgrep-patterns.js +296 -0
  16. package/dist/tools/semgrep-patterns.js.map +1 -0
  17. package/dist/tools/structural/__tests__/orchestrator.test.js +61 -0
  18. package/dist/tools/structural/__tests__/orchestrator.test.js.map +1 -0
  19. package/dist/tools/structural/cache.js +226 -0
  20. package/dist/tools/structural/cache.js.map +1 -0
  21. package/dist/tools/structural/engines/python/index.js +118 -0
  22. package/dist/tools/structural/engines/python/index.js.map +1 -0
  23. package/dist/tools/structural/engines/typescript/__tests__/typescript-engine.test.js +97 -0
  24. package/dist/tools/structural/engines/typescript/__tests__/typescript-engine.test.js.map +1 -0
  25. package/dist/tools/structural/engines/typescript/analyzer.js +433 -0
  26. package/dist/tools/structural/engines/typescript/analyzer.js.map +1 -0
  27. package/dist/tools/structural/engines/typescript/index.js +381 -0
  28. package/dist/tools/structural/engines/typescript/index.js.map +1 -0
  29. package/dist/tools/structural/engines/typescript/utils.js +279 -0
  30. package/dist/tools/structural/engines/typescript/utils.js.map +1 -0
  31. package/dist/tools/structural/index.js +248 -0
  32. package/dist/tools/structural/index.js.map +1 -0
  33. package/dist/tools/structural/types.js +18 -0
  34. package/dist/tools/structural/types.js.map +1 -0
  35. package/package.json +5 -1
  36. package/public/.well-known/mcp/manifest.json +6 -5
@@ -0,0 +1,433 @@
1
+ import { Node, SyntaxKind, ts } from "ts-morph";
2
+ import { nodeToLocation, getSymbolKind, getTypeString, positionToOffset } from "./utils.js";
3
+ export function extractSymbolInfo(node, includePrivate = false, includeDefinition = false) {
4
+ const symbol = node.getSymbol();
5
+ if (!symbol)
6
+ return null;
7
+ const name = symbol.getName();
8
+ if (!includePrivate && name.startsWith("_"))
9
+ return null;
10
+ const kind = getSymbolKind(node);
11
+ const type = node.getType();
12
+ const modifiers = [];
13
+ if (Node.isModifierable(node)) {
14
+ if (node.hasModifier(SyntaxKind.PublicKeyword))
15
+ modifiers.push("public");
16
+ if (node.hasModifier(SyntaxKind.PrivateKeyword))
17
+ modifiers.push("private");
18
+ if (node.hasModifier(SyntaxKind.ProtectedKeyword))
19
+ modifiers.push("protected");
20
+ if (node.hasModifier(SyntaxKind.StaticKeyword))
21
+ modifiers.push("static");
22
+ if (node.hasModifier(SyntaxKind.AsyncKeyword))
23
+ modifiers.push("async");
24
+ if (node.hasModifier(SyntaxKind.ReadonlyKeyword))
25
+ modifiers.push("readonly");
26
+ if (node.hasModifier(SyntaxKind.AbstractKeyword))
27
+ modifiers.push("abstract");
28
+ }
29
+ const documentation = symbol.getJsDocTags().map(tag => `@${tag.getName()}${tag.getText() ? ` ${tag.getText()}` : ""}`).join("\n");
30
+ const location = nodeToLocation(node);
31
+ let definition;
32
+ if (includeDefinition) {
33
+ definition = getSymbolDefinition(symbol);
34
+ }
35
+ return {
36
+ name,
37
+ kind,
38
+ type: getTypeString(type),
39
+ location: {
40
+ file: location.file,
41
+ line: location.position.line
42
+ },
43
+ documentation: documentation || undefined,
44
+ modifiers: modifiers.length > 0 ? modifiers : undefined,
45
+ relationships: extractRelationships(node),
46
+ definition
47
+ };
48
+ }
49
+ function extractRelationships(node) {
50
+ const relationships = {};
51
+ if (Node.isClassDeclaration(node) || Node.isInterfaceDeclaration(node)) {
52
+ const heritage = node.getHeritageClauses();
53
+ const extendsClause = heritage.find(h => h.getToken() === SyntaxKind.ExtendsKeyword);
54
+ if (extendsClause) {
55
+ const extendsNodes = extendsClause.getTypeNodes();
56
+ if (extendsNodes.length > 0) {
57
+ relationships.extends = extendsNodes.map(expr => ({
58
+ name: expr.getText(),
59
+ kind: "class"
60
+ }));
61
+ }
62
+ }
63
+ if (Node.isClassDeclaration(node)) {
64
+ const implementsNodes = node.getImplements() || [];
65
+ if (implementsNodes.length > 0) {
66
+ relationships.implements = implementsNodes.map(expr => ({
67
+ name: expr.getText(),
68
+ kind: "interface"
69
+ }));
70
+ }
71
+ }
72
+ }
73
+ return Object.keys(relationships).length > 0 ? relationships : undefined;
74
+ }
75
+ function getSymbolDefinition(symbol) {
76
+ const declarations = symbol.getDeclarations();
77
+ if (declarations.length === 0) {
78
+ // Try to get the aliased symbol if this is an alias
79
+ const aliasedSymbol = symbol.getAliasedSymbol();
80
+ if (aliasedSymbol && aliasedSymbol !== symbol) {
81
+ return getSymbolDefinition(aliasedSymbol);
82
+ }
83
+ return undefined;
84
+ }
85
+ // Sort declarations by preference
86
+ const sortedDeclarations = declarations.slice().sort((a, b) => {
87
+ const aFile = a.getSourceFile().getFilePath();
88
+ const bFile = b.getSourceFile().getFilePath();
89
+ // 1. Prefer non-.d.ts files (actual source)
90
+ const aIsDts = aFile.endsWith('.d.ts');
91
+ const bIsDts = bFile.endsWith('.d.ts');
92
+ if (aIsDts !== bIsDts) {
93
+ return aIsDts ? 1 : -1;
94
+ }
95
+ // 2. If both are .d.ts, prefer node_modules over @types
96
+ const aIsNodeModules = aFile.includes('node_modules') && !aFile.includes('node_modules/@types');
97
+ const bIsNodeModules = bFile.includes('node_modules') && !bFile.includes('node_modules/@types');
98
+ if (aIsNodeModules !== bIsNodeModules) {
99
+ return aIsNodeModules ? -1 : 1;
100
+ }
101
+ // 3. Prefer shorter paths (closer to root)
102
+ return aFile.length - bFile.length;
103
+ });
104
+ const primaryDeclaration = sortedDeclarations[0];
105
+ const sourceFile = primaryDeclaration.getSourceFile();
106
+ const startPos = sourceFile.getLineAndColumnAtPos(primaryDeclaration.getStart());
107
+ return {
108
+ file: sourceFile.getFilePath(),
109
+ line: startPos.line - 1 // Convert to 0-based indexing
110
+ };
111
+ }
112
+ export function analyzeSourceFile(sourceFile, analysisType, depth = 2, includePrivate = false, includeDefinition = false) {
113
+ const symbols = [];
114
+ const imports = [];
115
+ const exports = [];
116
+ if (analysisType === "symbols" || analysisType === "all") {
117
+ sourceFile.forEachDescendant(node => {
118
+ if (isDeclarationNode(node)) {
119
+ const symbolInfo = extractSymbolInfo(node, includePrivate, includeDefinition);
120
+ if (symbolInfo) {
121
+ symbols.push(symbolInfo);
122
+ }
123
+ }
124
+ });
125
+ }
126
+ if (analysisType === "dependencies" || analysisType === "all") {
127
+ sourceFile.getImportDeclarations().forEach(importDecl => {
128
+ const moduleSpecifier = importDecl.getModuleSpecifierValue();
129
+ const namedImports = importDecl.getNamedImports().map(ni => ni.getName());
130
+ const defaultImport = importDecl.getDefaultImport()?.getText();
131
+ const namespaceImport = importDecl.getNamespaceImport()?.getText();
132
+ const allImports = [
133
+ ...(defaultImport ? [defaultImport] : []),
134
+ ...(namespaceImport ? [namespaceImport] : []),
135
+ ...namedImports
136
+ ];
137
+ if (allImports.length > 0) {
138
+ imports.push({
139
+ moduleSpecifier,
140
+ symbols: allImports,
141
+ isTypeOnly: importDecl.isTypeOnly()
142
+ });
143
+ }
144
+ });
145
+ sourceFile.getExportDeclarations().forEach(exportDecl => {
146
+ const namedExports = exportDecl.getNamedExports().map(ne => ne.getName());
147
+ exports.push(...namedExports);
148
+ });
149
+ sourceFile.getExportedDeclarations().forEach((declarations, name) => {
150
+ exports.push(name);
151
+ });
152
+ }
153
+ const diagnostics = sourceFile.getPreEmitDiagnostics().map(diag => ({
154
+ message: diag.getMessageText().toString(),
155
+ severity: getDiagnosticSeverity(diag.getCategory()),
156
+ code: diag.getCode()?.toString()
157
+ }));
158
+ return {
159
+ symbols,
160
+ diagnostics,
161
+ imports,
162
+ exports
163
+ };
164
+ }
165
+ function isDeclarationNode(node) {
166
+ return Node.isClassDeclaration(node) ||
167
+ Node.isInterfaceDeclaration(node) ||
168
+ Node.isFunctionDeclaration(node) ||
169
+ Node.isVariableDeclaration(node) ||
170
+ Node.isTypeAliasDeclaration(node) ||
171
+ Node.isEnumDeclaration(node) ||
172
+ Node.isMethodDeclaration(node) ||
173
+ Node.isPropertyDeclaration(node) ||
174
+ Node.isGetAccessorDeclaration(node) ||
175
+ Node.isSetAccessorDeclaration(node);
176
+ }
177
+ function getDiagnosticSeverity(category) {
178
+ switch (category) {
179
+ case ts.DiagnosticCategory.Error:
180
+ return "error";
181
+ case ts.DiagnosticCategory.Warning:
182
+ return "warning";
183
+ default:
184
+ return "info";
185
+ }
186
+ }
187
+ export function findSymbolAtPosition(sourceFile, position) {
188
+ const offset = positionToOffset(sourceFile, position);
189
+ return sourceFile.getDescendantAtPos(offset);
190
+ }
191
+ export function findSymbolOnLine(sourceFile, line, maxSearchAttempts = 3) {
192
+ const lines = sourceFile.getFullText().split("\n");
193
+ // Try the specified line first, then expand search
194
+ for (let attempt = 0; attempt < maxSearchAttempts; attempt++) {
195
+ const searchLines = [];
196
+ if (attempt === 0) {
197
+ // First attempt: only the specified line
198
+ searchLines.push(line);
199
+ }
200
+ else {
201
+ // Subsequent attempts: expand radius
202
+ for (let offset = -attempt; offset <= attempt; offset++) {
203
+ const searchLine = line + offset;
204
+ if (searchLine >= 0 && searchLine < lines.length && !searchLines.includes(searchLine)) {
205
+ searchLines.push(searchLine);
206
+ }
207
+ }
208
+ }
209
+ for (const searchLine of searchLines) {
210
+ const lineText = lines[searchLine];
211
+ if (!lineText || lineText.trim().length === 0)
212
+ continue;
213
+ // Find all identifiers on this line by looking for word characters
214
+ const identifierMatches = Array.from(lineText.matchAll(/\b[a-zA-Z_$][a-zA-Z0-9_$]*\b/g));
215
+ for (const match of identifierMatches) {
216
+ if (match.index !== undefined) {
217
+ const position = { line: searchLine, character: match.index };
218
+ const node = findSymbolAtPosition(sourceFile, position);
219
+ if (node && node.getSymbol()) {
220
+ return node;
221
+ }
222
+ }
223
+ }
224
+ }
225
+ }
226
+ return undefined;
227
+ }
228
+ export function getTypeHierarchy(node, direction, maxDepth = 5) {
229
+ const hierarchy = [];
230
+ const visited = new Set();
231
+ function processType(type, depth) {
232
+ if (depth > maxDepth)
233
+ return;
234
+ const symbol = type.getSymbol();
235
+ if (!symbol)
236
+ return;
237
+ const name = symbol.getName();
238
+ if (visited.has(name))
239
+ return;
240
+ visited.add(name);
241
+ const declarations = symbol.getDeclarations();
242
+ if (declarations.length === 0)
243
+ return;
244
+ const declaration = declarations[0];
245
+ const typeInfo = {
246
+ name,
247
+ kind: getTypeKind(declaration),
248
+ location: nodeToLocation(declaration),
249
+ generics: getGenericParameters(declaration)
250
+ };
251
+ hierarchy.push(typeInfo);
252
+ if (direction === "ancestors" || direction === "both") {
253
+ const baseTypes = type.getBaseTypes();
254
+ baseTypes.forEach(baseType => processType(baseType, depth + 1));
255
+ }
256
+ if (direction === "descendants" || direction === "both") {
257
+ // Finding descendants requires project-wide analysis
258
+ // This would need to be implemented by searching all files
259
+ }
260
+ }
261
+ const type = node.getType();
262
+ processType(type, 0);
263
+ return hierarchy;
264
+ }
265
+ function getTypeKind(node) {
266
+ if (Node.isClassDeclaration(node))
267
+ return "class";
268
+ if (Node.isInterfaceDeclaration(node))
269
+ return "interface";
270
+ if (Node.isEnumDeclaration(node))
271
+ return "enum";
272
+ return "type";
273
+ }
274
+ function getGenericParameters(node) {
275
+ if (!Node.isTypeParametered(node))
276
+ return undefined;
277
+ const params = node.getTypeParameters();
278
+ if (params.length === 0)
279
+ return undefined;
280
+ return params.map(p => p.getName());
281
+ }
282
+ export function extractMembers(node) {
283
+ const members = [];
284
+ if (Node.isClassDeclaration(node) || Node.isInterfaceDeclaration(node)) {
285
+ const type = node.getType();
286
+ const properties = type.getProperties();
287
+ properties.forEach(prop => {
288
+ const propDecl = prop.getValueDeclaration();
289
+ if (!propDecl)
290
+ return;
291
+ let kind = "property";
292
+ let visibility = "public";
293
+ let isStatic = false;
294
+ if (Node.isMethodDeclaration(propDecl)) {
295
+ kind = "method";
296
+ }
297
+ else if (Node.isGetAccessorDeclaration(propDecl)) {
298
+ kind = "getter";
299
+ }
300
+ else if (Node.isSetAccessorDeclaration(propDecl)) {
301
+ kind = "setter";
302
+ }
303
+ if (Node.isModifierable(propDecl)) {
304
+ if (propDecl.hasModifier(SyntaxKind.PrivateKeyword))
305
+ visibility = "private";
306
+ else if (propDecl.hasModifier(SyntaxKind.ProtectedKeyword))
307
+ visibility = "protected";
308
+ isStatic = propDecl.hasModifier(SyntaxKind.StaticKeyword);
309
+ }
310
+ members.push({
311
+ name: prop.getName(),
312
+ kind,
313
+ visibility,
314
+ type: getTypeString(prop.getTypeAtLocation(propDecl)),
315
+ static: isStatic
316
+ });
317
+ });
318
+ }
319
+ return members;
320
+ }
321
+ export function analyzeSymbolDeclaration(node, maxTypeLength = Number.MAX_SAFE_INTEGER) {
322
+ const symbol = node.getSymbol();
323
+ if (!symbol)
324
+ return null;
325
+ const name = symbol.getName();
326
+ const kind = getSymbolKind(node);
327
+ const type = node.getType();
328
+ const location = nodeToLocation(node);
329
+ const result = {
330
+ name,
331
+ kind,
332
+ type: getTypeString(type, maxTypeLength),
333
+ location
334
+ };
335
+ // Extract function/method parameters
336
+ if (Node.isFunctionDeclaration(node) || Node.isMethodDeclaration(node) || Node.isArrowFunction(node)) {
337
+ const params = node.getParameters();
338
+ result.parameters = params.map(param => ({
339
+ name: param.getName(),
340
+ type: getTypeString(param.getType(), maxTypeLength),
341
+ optional: param.hasQuestionToken(),
342
+ defaultValue: param.getInitializer()?.getText()
343
+ }));
344
+ const returnType = node.getReturnType();
345
+ result.returnType = getTypeString(returnType, maxTypeLength);
346
+ result.signature = node.getText();
347
+ }
348
+ // Extract class/interface members
349
+ if (Node.isClassDeclaration(node) || Node.isInterfaceDeclaration(node)) {
350
+ result.members = [];
351
+ // Get properties
352
+ node.getProperties().forEach(prop => {
353
+ const propType = prop.getType();
354
+ result.members.push({
355
+ name: prop.getName(),
356
+ type: getTypeString(propType, maxTypeLength),
357
+ kind: "property",
358
+ visibility: getVisibility(prop),
359
+ static: prop.hasModifier(SyntaxKind.StaticKeyword),
360
+ optional: prop.hasQuestionToken()
361
+ });
362
+ });
363
+ // Get methods
364
+ node.getMethods().forEach(method => {
365
+ const methodType = method.getType();
366
+ const isStatic = Node.isMethodDeclaration(method) ? method.hasModifier(SyntaxKind.StaticKeyword) : false;
367
+ result.members.push({
368
+ name: method.getName(),
369
+ type: getTypeString(methodType, maxTypeLength),
370
+ kind: "method",
371
+ visibility: getVisibility(method),
372
+ static: isStatic,
373
+ optional: false
374
+ });
375
+ });
376
+ // Get getters/setters
377
+ node.getGetAccessors().forEach(getter => {
378
+ const getterType = getter.getType();
379
+ result.members.push({
380
+ name: getter.getName(),
381
+ type: getTypeString(getterType, maxTypeLength),
382
+ kind: "getter",
383
+ visibility: getVisibility(getter),
384
+ static: getter.hasModifier(SyntaxKind.StaticKeyword),
385
+ optional: false
386
+ });
387
+ });
388
+ node.getSetAccessors().forEach(setter => {
389
+ const setterType = setter.getType();
390
+ result.members.push({
391
+ name: setter.getName(),
392
+ type: getTypeString(setterType, maxTypeLength),
393
+ kind: "setter",
394
+ visibility: getVisibility(setter),
395
+ static: setter.hasModifier(SyntaxKind.StaticKeyword),
396
+ optional: false
397
+ });
398
+ });
399
+ }
400
+ // Extract generics
401
+ if (Node.isTypeParametered(node)) {
402
+ const typeParams = node.getTypeParameters();
403
+ if (typeParams.length > 0) {
404
+ result.generics = typeParams.map(tp => tp.getName());
405
+ }
406
+ }
407
+ // Extract enum members
408
+ if (Node.isEnumDeclaration(node)) {
409
+ result.members = node.getMembers().map(member => ({
410
+ name: member.getName(),
411
+ type: getTypeString(member.getType(), maxTypeLength),
412
+ kind: "property",
413
+ visibility: "public",
414
+ static: false,
415
+ optional: false
416
+ }));
417
+ }
418
+ // Extract type alias details
419
+ if (Node.isTypeAliasDeclaration(node)) {
420
+ result.signature = node.getText();
421
+ }
422
+ return result;
423
+ }
424
+ function getVisibility(node) {
425
+ if (Node.isModifierable(node)) {
426
+ if (node.hasModifier(SyntaxKind.PrivateKeyword))
427
+ return "private";
428
+ if (node.hasModifier(SyntaxKind.ProtectedKeyword))
429
+ return "protected";
430
+ }
431
+ return "public";
432
+ }
433
+ //# sourceMappingURL=analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../../../../src/tools/structural/engines/typescript/analyzer.ts"],"names":[],"mappings":"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"}