dep-context-mcp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/README.md +380 -0
  2. package/dist/analysis/relationships.d.ts +25 -0
  3. package/dist/analysis/relationships.d.ts.map +1 -0
  4. package/dist/analysis/relationships.js +26 -0
  5. package/dist/analysis/relationships.js.map +1 -0
  6. package/dist/build-info.d.ts +15 -0
  7. package/dist/build-info.d.ts.map +1 -0
  8. package/dist/build-info.js +24 -0
  9. package/dist/build-info.js.map +1 -0
  10. package/dist/cache/manager.d.ts +19 -0
  11. package/dist/cache/manager.d.ts.map +1 -0
  12. package/dist/cache/manager.js +131 -0
  13. package/dist/cache/manager.js.map +1 -0
  14. package/dist/cache/registry.d.ts +44 -0
  15. package/dist/cache/registry.d.ts.map +1 -0
  16. package/dist/cache/registry.js +92 -0
  17. package/dist/cache/registry.js.map +1 -0
  18. package/dist/config/loader.d.ts +62 -0
  19. package/dist/config/loader.d.ts.map +1 -0
  20. package/dist/config/loader.js +193 -0
  21. package/dist/config/loader.js.map +1 -0
  22. package/dist/extraction/examples.d.ts +22 -0
  23. package/dist/extraction/examples.d.ts.map +1 -0
  24. package/dist/extraction/examples.js +109 -0
  25. package/dist/extraction/examples.js.map +1 -0
  26. package/dist/extraction/external-resolver.d.ts +26 -0
  27. package/dist/extraction/external-resolver.d.ts.map +1 -0
  28. package/dist/extraction/external-resolver.js +79 -0
  29. package/dist/extraction/external-resolver.js.map +1 -0
  30. package/dist/extraction/import-tracker.d.ts +58 -0
  31. package/dist/extraction/import-tracker.d.ts.map +1 -0
  32. package/dist/extraction/import-tracker.js +113 -0
  33. package/dist/extraction/import-tracker.js.map +1 -0
  34. package/dist/extraction/readme.d.ts +19 -0
  35. package/dist/extraction/readme.d.ts.map +1 -0
  36. package/dist/extraction/readme.js +79 -0
  37. package/dist/extraction/readme.js.map +1 -0
  38. package/dist/extraction/snapshot.d.ts +32 -0
  39. package/dist/extraction/snapshot.d.ts.map +1 -0
  40. package/dist/extraction/snapshot.js +258 -0
  41. package/dist/extraction/snapshot.js.map +1 -0
  42. package/dist/extraction/typescript.d.ts +104 -0
  43. package/dist/extraction/typescript.d.ts.map +1 -0
  44. package/dist/extraction/typescript.js +647 -0
  45. package/dist/extraction/typescript.js.map +1 -0
  46. package/dist/index.d.ts +9 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +329 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/resolver/package.d.ts +62 -0
  51. package/dist/resolver/package.d.ts.map +1 -0
  52. package/dist/resolver/package.js +334 -0
  53. package/dist/resolver/package.js.map +1 -0
  54. package/dist/tools/get-dependency.d.ts +55 -0
  55. package/dist/tools/get-dependency.d.ts.map +1 -0
  56. package/dist/tools/get-dependency.js +105 -0
  57. package/dist/tools/get-dependency.js.map +1 -0
  58. package/dist/tools/index-dependencies.d.ts +51 -0
  59. package/dist/tools/index-dependencies.d.ts.map +1 -0
  60. package/dist/tools/index-dependencies.js +90 -0
  61. package/dist/tools/index-dependencies.js.map +1 -0
  62. package/dist/tools/index-status.d.ts +36 -0
  63. package/dist/tools/index-status.d.ts.map +1 -0
  64. package/dist/tools/index-status.js +45 -0
  65. package/dist/tools/index-status.js.map +1 -0
  66. package/dist/tools/list.d.ts +48 -0
  67. package/dist/tools/list.d.ts.map +1 -0
  68. package/dist/tools/list.js +55 -0
  69. package/dist/tools/list.js.map +1 -0
  70. package/dist/tools/refresh.d.ts +59 -0
  71. package/dist/tools/refresh.d.ts.map +1 -0
  72. package/dist/tools/refresh.js +109 -0
  73. package/dist/tools/refresh.js.map +1 -0
  74. package/dist/tools/relationships.d.ts +41 -0
  75. package/dist/tools/relationships.d.ts.map +1 -0
  76. package/dist/tools/relationships.js +36 -0
  77. package/dist/tools/relationships.js.map +1 -0
  78. package/dist/tools/search-codebase.d.ts +64 -0
  79. package/dist/tools/search-codebase.d.ts.map +1 -0
  80. package/dist/tools/search-codebase.js +117 -0
  81. package/dist/tools/search-codebase.js.map +1 -0
  82. package/dist/tools/search.d.ts +37 -0
  83. package/dist/tools/search.d.ts.map +1 -0
  84. package/dist/tools/search.js +77 -0
  85. package/dist/tools/search.js.map +1 -0
  86. package/dist/utils/logger.d.ts +19 -0
  87. package/dist/utils/logger.d.ts.map +1 -0
  88. package/dist/utils/logger.js +71 -0
  89. package/dist/utils/logger.js.map +1 -0
  90. package/dist/vector/chroma.d.ts +38 -0
  91. package/dist/vector/chroma.d.ts.map +1 -0
  92. package/dist/vector/chroma.js +69 -0
  93. package/dist/vector/chroma.js.map +1 -0
  94. package/dist/vector/chunker.d.ts +29 -0
  95. package/dist/vector/chunker.d.ts.map +1 -0
  96. package/dist/vector/chunker.js +205 -0
  97. package/dist/vector/chunker.js.map +1 -0
  98. package/dist/vector/embeddings.d.ts +36 -0
  99. package/dist/vector/embeddings.d.ts.map +1 -0
  100. package/dist/vector/embeddings.js +106 -0
  101. package/dist/vector/embeddings.js.map +1 -0
  102. package/dist/vector/file-store.d.ts +10 -0
  103. package/dist/vector/file-store.d.ts.map +1 -0
  104. package/dist/vector/file-store.js +80 -0
  105. package/dist/vector/file-store.js.map +1 -0
  106. package/dist/vector/index-manager.d.ts +39 -0
  107. package/dist/vector/index-manager.d.ts.map +1 -0
  108. package/dist/vector/index-manager.js +105 -0
  109. package/dist/vector/index-manager.js.map +1 -0
  110. package/dist/vector/provider-factory.d.ts +23 -0
  111. package/dist/vector/provider-factory.d.ts.map +1 -0
  112. package/dist/vector/provider-factory.js +50 -0
  113. package/dist/vector/provider-factory.js.map +1 -0
  114. package/dist/vector/storage-factory.d.ts +17 -0
  115. package/dist/vector/storage-factory.d.ts.map +1 -0
  116. package/dist/vector/storage-factory.js +55 -0
  117. package/dist/vector/storage-factory.js.map +1 -0
  118. package/package.json +60 -0
@@ -0,0 +1,117 @@
1
+ /**
2
+ * MCP Tool: search_codebase
3
+ *
4
+ * Semantic search across indexed dependencies using vector embeddings.
5
+ * Auto-indexes on first search if no index exists.
6
+ */
7
+ import { logger } from '../utils/logger.js';
8
+ import { extract, followReExports } from '../extraction/typescript.js';
9
+ import { createExternalPackageResolver } from '../extraction/external-resolver.js';
10
+ /**
11
+ * Auto-index production dependencies
12
+ */
13
+ async function autoIndex(deps) {
14
+ const { indexManager, resolver, config, listProductionDeps } = deps;
15
+ if (!indexManager)
16
+ return { indexed: 0, failed: [] };
17
+ const packages = await listProductionDeps();
18
+ const failed = [];
19
+ let indexed = 0;
20
+ for (const pkg of packages) {
21
+ try {
22
+ if (indexManager.isPackageIndexed(pkg.name, pkg.version))
23
+ continue;
24
+ const resolved = await resolver.resolve(pkg.name);
25
+ if (!resolved.success || !resolved.metadata?.typesPath)
26
+ continue;
27
+ const externalResolver = createExternalPackageResolver(config.nodeModulesPath);
28
+ const extraction = await extract(resolved.metadata.typesPath);
29
+ const withReExports = await followReExports(extraction, resolved.metadata.typesPath, new Set(), { externalResolver });
30
+ const count = await indexManager.indexPackage(pkg.name, pkg.version, withReExports);
31
+ if (count > 0)
32
+ indexed++;
33
+ }
34
+ catch {
35
+ failed.push(pkg.name);
36
+ }
37
+ }
38
+ return { indexed, failed };
39
+ }
40
+ /**
41
+ * Creates the search_codebase tool handler
42
+ */
43
+ export function createSearchCodebaseHandler(deps) {
44
+ return async function searchCodebase(input) {
45
+ const { indexManager } = deps;
46
+ const start = performance.now();
47
+ if (!indexManager) {
48
+ return {
49
+ results: [],
50
+ totalIndexed: 0,
51
+ message: 'Vector search is not enabled. Configure vectorSearch in config to enable semantic search.'
52
+ };
53
+ }
54
+ let status = indexManager.getStatus();
55
+ let autoIndexed = false;
56
+ // Auto-index if no packages indexed yet
57
+ if (status.totalChunks === 0) {
58
+ logger.debug('No index found, auto-indexing production dependencies');
59
+ const indexStart = performance.now();
60
+ const result = await autoIndex(deps);
61
+ autoIndexed = result.indexed > 0;
62
+ logger.debug('Auto-indexing complete', {
63
+ indexed: result.indexed,
64
+ failed: result.failed.length,
65
+ durationMs: Math.round(performance.now() - indexStart)
66
+ });
67
+ status = indexManager.getStatus();
68
+ }
69
+ if (status.totalChunks === 0) {
70
+ return {
71
+ results: [],
72
+ totalIndexed: 0,
73
+ message: 'No packages with type definitions found to index.'
74
+ };
75
+ }
76
+ const searchStart = performance.now();
77
+ const results = await indexManager.search(input.query, {
78
+ limit: input.limit ?? 10,
79
+ packageName: input.packageName
80
+ });
81
+ logger.debug('Search complete', {
82
+ query: input.query,
83
+ results: results.length,
84
+ searchMs: Math.round(performance.now() - searchStart),
85
+ totalMs: Math.round(performance.now() - start)
86
+ });
87
+ return {
88
+ results,
89
+ totalIndexed: status.totalChunks,
90
+ autoIndexed: autoIndexed || undefined
91
+ };
92
+ };
93
+ }
94
+ /** Tool definition for MCP */
95
+ export const searchCodebaseToolDef = {
96
+ name: 'search_codebase',
97
+ description: 'Search installed package APIs by natural language. Use BEFORE implementing features to find relevant functions. Auto-indexes on first use. Examples: "validation utilities", "date formatting", "HTTP client methods"',
98
+ inputSchema: {
99
+ type: 'object',
100
+ properties: {
101
+ query: {
102
+ type: 'string',
103
+ description: 'Natural language description of what you\'re looking for (e.g., "function to debounce calls")'
104
+ },
105
+ limit: {
106
+ type: 'number',
107
+ description: 'Maximum results to return (default: 10)'
108
+ },
109
+ packageName: {
110
+ type: 'string',
111
+ description: 'Optional: limit search to a specific package when user explicitly names one'
112
+ }
113
+ },
114
+ required: ['query']
115
+ }
116
+ };
117
+ //# sourceMappingURL=search-codebase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-codebase.js","sourceRoot":"","sources":["../../src/tools/search-codebase.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * MCP Tool: search_dependencies
3
+ *
4
+ * Text-based search across installed dependencies.
5
+ * Searches package names and descriptions with relevance scoring.
6
+ */
7
+ export interface SearchDependenciesInput {
8
+ query: string;
9
+ limit?: number;
10
+ }
11
+ export interface SearchResult {
12
+ packageName: string;
13
+ version: string;
14
+ description: string | undefined;
15
+ score: number;
16
+ matchType: 'exact' | 'prefix' | 'contains' | 'description';
17
+ }
18
+ export interface SearchDependenciesOutput {
19
+ results: SearchResult[];
20
+ totalMatches: number;
21
+ query: string;
22
+ }
23
+ export interface PackageResolverLike {
24
+ listAllDependencies(includeDev?: boolean): Promise<Array<{
25
+ name: string;
26
+ version: string;
27
+ description: string | undefined;
28
+ }>>;
29
+ }
30
+ export interface SearchDependenciesDeps {
31
+ resolver: PackageResolverLike;
32
+ }
33
+ /**
34
+ * Creates the search_dependencies tool handler
35
+ */
36
+ export declare function createSearchDependenciesHandler(deps: SearchDependenciesDeps): (input: SearchDependenciesInput) => Promise<SearchDependenciesOutput>;
37
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,GAAG,SAAS,CAAA;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,aAAa,CAAA;CAC3D;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,mBAAmB,CAAC,UAAU,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;QACvD,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;QACf,WAAW,EAAE,MAAM,GAAG,SAAS,CAAA;KAChC,CAAC,CAAC,CAAA;CACJ;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,mBAAmB,CAAA;CAC9B;AA2CD;;GAEG;AACH,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,sBAAsB,IAExE,OAAO,uBAAuB,KAC7B,OAAO,CAAC,wBAAwB,CAAC,CAyCrC"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * MCP Tool: search_dependencies
3
+ *
4
+ * Text-based search across installed dependencies.
5
+ * Searches package names and descriptions with relevance scoring.
6
+ */
7
+ /**
8
+ * Calculates relevance score for a package match
9
+ *
10
+ * Scoring:
11
+ * - Exact name match: 1.0
12
+ * - Name starts with query: 0.9
13
+ * - Name contains query: 0.7
14
+ * - Description contains query: 0.5
15
+ */
16
+ function calculateScore(packageName, description, query) {
17
+ const lowerName = packageName.toLowerCase();
18
+ const lowerQuery = query.toLowerCase();
19
+ const lowerDesc = description?.toLowerCase() ?? '';
20
+ // Exact match
21
+ if (lowerName === lowerQuery) {
22
+ return { score: 1.0, matchType: 'exact' };
23
+ }
24
+ // Name starts with query
25
+ if (lowerName.startsWith(lowerQuery)) {
26
+ return { score: 0.9, matchType: 'prefix' };
27
+ }
28
+ // Name contains query
29
+ if (lowerName.includes(lowerQuery)) {
30
+ return { score: 0.7, matchType: 'contains' };
31
+ }
32
+ // Description contains query
33
+ if (lowerDesc.includes(lowerQuery)) {
34
+ return { score: 0.5, matchType: 'description' };
35
+ }
36
+ return null;
37
+ }
38
+ /**
39
+ * Creates the search_dependencies tool handler
40
+ */
41
+ export function createSearchDependenciesHandler(deps) {
42
+ return async function searchDependencies(input) {
43
+ const { query, limit = 10 } = input;
44
+ const { resolver } = deps;
45
+ // Get all dependencies
46
+ const dependencies = await resolver.listAllDependencies(true);
47
+ // Score and filter matches
48
+ const matches = [];
49
+ for (const dep of dependencies) {
50
+ const result = calculateScore(dep.name, dep.description, query);
51
+ if (result) {
52
+ matches.push({
53
+ packageName: dep.name,
54
+ version: dep.version,
55
+ description: dep.description,
56
+ score: result.score,
57
+ matchType: result.matchType
58
+ });
59
+ }
60
+ }
61
+ // Sort by score (descending), then by name (ascending)
62
+ matches.sort((a, b) => {
63
+ if (b.score !== a.score) {
64
+ return b.score - a.score;
65
+ }
66
+ return a.packageName.localeCompare(b.packageName);
67
+ });
68
+ // Apply limit
69
+ const results = matches.slice(0, limit);
70
+ return {
71
+ results,
72
+ totalMatches: matches.length,
73
+ query
74
+ };
75
+ };
76
+ }
77
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiCH;;;;;;;;GAQG;AACH,SAAS,cAAc,CACrB,WAAmB,EACnB,WAA+B,EAC/B,KAAa;IAEb,MAAM,SAAS,GAAG,WAAW,CAAC,WAAW,EAAE,CAAA;IAC3C,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAA;IACtC,MAAM,SAAS,GAAG,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA;IAElD,cAAc;IACd,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;QAC7B,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,CAAA;IAC3C,CAAC;IAED,yBAAyB;IACzB,IAAI,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACrC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAA;IAC5C,CAAC;IAED,sBAAsB;IACtB,IAAI,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACnC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,UAAU,EAAE,CAAA;IAC9C,CAAC;IAED,6BAA6B;IAC7B,IAAI,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACnC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,aAAa,EAAE,CAAA;IACjD,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,+BAA+B,CAAC,IAA4B;IAC1E,OAAO,KAAK,UAAU,kBAAkB,CACtC,KAA8B;QAE9B,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,EAAE,EAAE,GAAG,KAAK,CAAA;QACnC,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAA;QAEzB,uBAAuB;QACvB,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAA;QAE7D,2BAA2B;QAC3B,MAAM,OAAO,GAAmB,EAAE,CAAA;QAElC,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;YAE/D,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC;oBACX,WAAW,EAAE,GAAG,CAAC,IAAI;oBACrB,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,WAAW,EAAE,GAAG,CAAC,WAAW;oBAC5B,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,SAAS,EAAE,MAAM,CAAC,SAAS;iBAC5B,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QAED,uDAAuD;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACpB,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;gBACxB,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAA;YAC1B,CAAC;YACD,OAAO,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAA;QACnD,CAAC,CAAC,CAAA;QAEF,cAAc;QACd,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;QAEvC,OAAO;YACL,OAAO;YACP,YAAY,EAAE,OAAO,CAAC,MAAM;YAC5B,KAAK;SACN,CAAA;IACH,CAAC,CAAA;AACH,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Simple logger with level support
3
+ * Logs to stderr so MCP clients can capture
4
+ */
5
+ export type LogLevel = 'error' | 'warn' | 'info' | 'debug' | 'trace';
6
+ export declare function setLogLevel(level: LogLevel): void;
7
+ export declare function getLogLevel(): LogLevel;
8
+ export declare const logger: {
9
+ error(message: string, data?: Record<string, unknown>): void;
10
+ warn(message: string, data?: Record<string, unknown>): void;
11
+ info(message: string, data?: Record<string, unknown>): void;
12
+ debug(message: string, data?: Record<string, unknown>): void;
13
+ trace(message: string, data?: Record<string, unknown>): void;
14
+ /** Log with timing info */
15
+ timed<T>(label: string, fn: () => T): T;
16
+ /** Log async with timing info */
17
+ timedAsync<T>(label: string, fn: () => Promise<T>): Promise<T>;
18
+ };
19
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAA;AAYpE,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAEjD;AAED,wBAAgB,WAAW,IAAI,QAAQ,CAEtC;AAcD,eAAO,MAAM,MAAM;mBACF,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;kBAG9C,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;kBAG7C,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;mBAG5C,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;mBAG7C,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI5D,2BAA2B;UACrB,CAAC,SAAS,MAAM,MAAM,MAAM,CAAC,GAAG,CAAC;IASvC,iCAAiC;eAChB,CAAC,SAAS,MAAM,MAAM,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAQrE,CAAA"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Simple logger with level support
3
+ * Logs to stderr so MCP clients can capture
4
+ */
5
+ const LEVELS = {
6
+ error: 0,
7
+ warn: 1,
8
+ info: 2,
9
+ debug: 3,
10
+ trace: 4
11
+ };
12
+ let currentLevel = process.env.LOG_LEVEL || 'info';
13
+ export function setLogLevel(level) {
14
+ currentLevel = level;
15
+ }
16
+ export function getLogLevel() {
17
+ return currentLevel;
18
+ }
19
+ function shouldLog(level) {
20
+ return LEVELS[level] <= LEVELS[currentLevel];
21
+ }
22
+ function formatMessage(level, message, data) {
23
+ const prefix = `[dep-context] [${level.toUpperCase()}]`;
24
+ if (data) {
25
+ return `${prefix} ${message} ${JSON.stringify(data)}`;
26
+ }
27
+ return `${prefix} ${message}`;
28
+ }
29
+ export const logger = {
30
+ error(message, data) {
31
+ if (shouldLog('error'))
32
+ console.error(formatMessage('error', message, data));
33
+ },
34
+ warn(message, data) {
35
+ if (shouldLog('warn'))
36
+ console.error(formatMessage('warn', message, data));
37
+ },
38
+ info(message, data) {
39
+ if (shouldLog('info'))
40
+ console.error(formatMessage('info', message, data));
41
+ },
42
+ debug(message, data) {
43
+ if (shouldLog('debug'))
44
+ console.error(formatMessage('debug', message, data));
45
+ },
46
+ trace(message, data) {
47
+ if (shouldLog('trace'))
48
+ console.error(formatMessage('trace', message, data));
49
+ },
50
+ /** Log with timing info */
51
+ timed(label, fn) {
52
+ if (!shouldLog('debug'))
53
+ return fn();
54
+ const start = performance.now();
55
+ const result = fn();
56
+ const duration = Math.round(performance.now() - start);
57
+ console.error(formatMessage('debug', `${label} completed`, { durationMs: duration }));
58
+ return result;
59
+ },
60
+ /** Log async with timing info */
61
+ async timedAsync(label, fn) {
62
+ if (!shouldLog('debug'))
63
+ return fn();
64
+ const start = performance.now();
65
+ const result = await fn();
66
+ const duration = Math.round(performance.now() - start);
67
+ console.error(formatMessage('debug', `${label} completed`, { durationMs: duration }));
68
+ return result;
69
+ }
70
+ };
71
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * ChromaDB integration for vector storage and search
3
+ */
4
+ export interface ChunkDocument {
5
+ id: string;
6
+ content: string;
7
+ embedding: number[];
8
+ metadata: {
9
+ packageName: string;
10
+ version: string;
11
+ contentType: string;
12
+ name: string;
13
+ signature?: string;
14
+ };
15
+ }
16
+ export interface SearchResult {
17
+ id: string;
18
+ content: string;
19
+ score: number;
20
+ metadata: ChunkDocument['metadata'];
21
+ }
22
+ export interface SearchOptions {
23
+ limit?: number;
24
+ packageName?: string;
25
+ contentType?: string;
26
+ }
27
+ export interface VectorStore {
28
+ add(docs: ChunkDocument[]): Promise<void>;
29
+ search(embedding: number[], options?: SearchOptions): Promise<SearchResult[]>;
30
+ removeByPackage(packageName: string): Promise<void>;
31
+ clear(): Promise<void>;
32
+ }
33
+ export interface ChromaConfig {
34
+ host?: string;
35
+ collectionName?: string;
36
+ }
37
+ export declare function createChromaStore(config?: ChromaConfig): Promise<VectorStore>;
38
+ //# sourceMappingURL=chroma.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chroma.d.ts","sourceRoot":"","sources":["../../src/vector/chroma.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,QAAQ,EAAE;QACR,WAAW,EAAE,MAAM,CAAA;QACnB,OAAO,EAAE,MAAM,CAAA;QACf,WAAW,EAAE,MAAM,CAAA;QACnB,IAAI,EAAE,MAAM,CAAA;QACZ,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB,CAAA;CACF;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;CACpC;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACzC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IAC7E,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACnD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,wBAAsB,iBAAiB,CAAC,MAAM,GAAE,YAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAmEvF"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * ChromaDB integration for vector storage and search
3
+ */
4
+ import { ChromaClient } from 'chromadb';
5
+ export async function createChromaStore(config = {}) {
6
+ // Use ephemeral (in-memory) if no host specified
7
+ const client = config.host
8
+ ? new ChromaClient({ path: config.host })
9
+ : new ChromaClient();
10
+ const collectionName = config.collectionName ?? 'dep-context';
11
+ let collection;
12
+ try {
13
+ collection = await client.getOrCreateCollection({ name: collectionName });
14
+ }
15
+ catch (err) {
16
+ const host = config.host ?? 'localhost:8000';
17
+ throw new Error(`ChromaDB not available at ${host}. Is it running? Try: docker run -d -p 8000:8000 chromadb/chroma`);
18
+ }
19
+ async function add(docs) {
20
+ if (docs.length === 0)
21
+ return;
22
+ try {
23
+ await collection.upsert({
24
+ ids: docs.map(d => d.id),
25
+ embeddings: docs.map(d => d.embedding),
26
+ documents: docs.map(d => d.content),
27
+ metadatas: docs.map(d => d.metadata)
28
+ });
29
+ }
30
+ catch (err) {
31
+ throw new Error(`ChromaDB write failed: ${err.message}. Is ChromaDB still running?`);
32
+ }
33
+ }
34
+ async function search(embedding, options = {}) {
35
+ const where = {};
36
+ if (options.packageName)
37
+ where.packageName = options.packageName;
38
+ if (options.contentType)
39
+ where.contentType = options.contentType;
40
+ let results;
41
+ try {
42
+ results = await collection.query({
43
+ queryEmbeddings: [embedding],
44
+ nResults: options.limit ?? 10,
45
+ where: Object.keys(where).length > 0 ? where : undefined
46
+ });
47
+ }
48
+ catch (err) {
49
+ throw new Error(`ChromaDB query failed: ${err.message}. Is ChromaDB still running?`);
50
+ }
51
+ if (!results.ids[0])
52
+ return [];
53
+ return results.ids[0].map((id, i) => ({
54
+ id,
55
+ content: results.documents[0]?.[i] ?? '',
56
+ score: results.distances?.[0]?.[i] ?? 0,
57
+ metadata: results.metadatas[0]?.[i]
58
+ }));
59
+ }
60
+ async function removeByPackage(packageName) {
61
+ await collection.delete({ where: { packageName } });
62
+ }
63
+ async function clear() {
64
+ await client.deleteCollection({ name: collectionName });
65
+ collection = await client.createCollection({ name: collectionName });
66
+ }
67
+ return { add, search, removeByPackage, clear };
68
+ }
69
+ //# sourceMappingURL=chroma.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chroma.js","sourceRoot":"","sources":["../../src/vector/chroma.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Semantic chunker - breaks extracted API info into embeddable chunks
3
+ */
4
+ import type { ExtractionResult } from '../extraction/typescript.js';
5
+ import type { CodeExample } from '../extraction/examples.js';
6
+ export interface ChunkMetadata {
7
+ packageName: string;
8
+ version: string;
9
+ contentType: 'function' | 'class' | 'method' | 'interface' | 'type';
10
+ name: string;
11
+ signature?: string;
12
+ importPath?: string;
13
+ }
14
+ export interface Chunk {
15
+ id: string;
16
+ content: string;
17
+ metadata: ChunkMetadata;
18
+ }
19
+ export interface ChunkerOptions {
20
+ packageName: string;
21
+ version: string;
22
+ maxTokens?: number;
23
+ examples?: CodeExample[];
24
+ }
25
+ /**
26
+ * Chunks extraction results into embeddable pieces
27
+ */
28
+ export declare function chunkExtraction(extraction: ExtractionResult, options: ChunkerOptions): Chunk[];
29
+ //# sourceMappingURL=chunker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunker.d.ts","sourceRoot":"","sources":["../../src/vector/chunker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAKjB,MAAM,6BAA6B,CAAA;AACpC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAE5D,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAA;IACnE,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,aAAa,CAAA;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAA;CACzB;AAwID;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,gBAAgB,EAAE,OAAO,EAAE,cAAc,GAAG,KAAK,EAAE,CAoG9F"}