@contiva/sapbtp-docs-mcp 1.0.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 (91) hide show
  1. package/LICENSE +395 -0
  2. package/README.md +386 -0
  3. package/build/cache/embedding-cache.d.ts +39 -0
  4. package/build/cache/embedding-cache.d.ts.map +1 -0
  5. package/build/cache/embedding-cache.js +105 -0
  6. package/build/cache/embedding-cache.js.map +1 -0
  7. package/build/cache/file-cache.d.ts +40 -0
  8. package/build/cache/file-cache.d.ts.map +1 -0
  9. package/build/cache/file-cache.js +124 -0
  10. package/build/cache/file-cache.js.map +1 -0
  11. package/build/cache/search-cache.d.ts +39 -0
  12. package/build/cache/search-cache.d.ts.map +1 -0
  13. package/build/cache/search-cache.js +97 -0
  14. package/build/cache/search-cache.js.map +1 -0
  15. package/build/index.d.ts +3 -0
  16. package/build/index.d.ts.map +1 -0
  17. package/build/index.js +17 -0
  18. package/build/index.js.map +1 -0
  19. package/build/indexing/file-registry.d.ts +47 -0
  20. package/build/indexing/file-registry.d.ts.map +1 -0
  21. package/build/indexing/file-registry.js +130 -0
  22. package/build/indexing/file-registry.js.map +1 -0
  23. package/build/indexing/topic-index.d.ts +57 -0
  24. package/build/indexing/topic-index.d.ts.map +1 -0
  25. package/build/indexing/topic-index.js +181 -0
  26. package/build/indexing/topic-index.js.map +1 -0
  27. package/build/parsers/links.d.ts +14 -0
  28. package/build/parsers/links.d.ts.map +1 -0
  29. package/build/parsers/links.js +80 -0
  30. package/build/parsers/links.js.map +1 -0
  31. package/build/parsers/markdown.d.ts +10 -0
  32. package/build/parsers/markdown.d.ts.map +1 -0
  33. package/build/parsers/markdown.js +120 -0
  34. package/build/parsers/markdown.js.map +1 -0
  35. package/build/parsers/metadata.d.ts +19 -0
  36. package/build/parsers/metadata.d.ts.map +1 -0
  37. package/build/parsers/metadata.js +63 -0
  38. package/build/parsers/metadata.js.map +1 -0
  39. package/build/search/fulltext.d.ts +20 -0
  40. package/build/search/fulltext.d.ts.map +1 -0
  41. package/build/search/fulltext.js +117 -0
  42. package/build/search/fulltext.js.map +1 -0
  43. package/build/search/ranking.d.ts +27 -0
  44. package/build/search/ranking.d.ts.map +1 -0
  45. package/build/search/ranking.js +119 -0
  46. package/build/search/ranking.js.map +1 -0
  47. package/build/search/semantic.d.ts +53 -0
  48. package/build/search/semantic.d.ts.map +1 -0
  49. package/build/search/semantic.js +260 -0
  50. package/build/search/semantic.js.map +1 -0
  51. package/build/search/title.d.ts +18 -0
  52. package/build/search/title.d.ts.map +1 -0
  53. package/build/search/title.js +95 -0
  54. package/build/search/title.js.map +1 -0
  55. package/build/server.d.ts +32 -0
  56. package/build/server.d.ts.map +1 -0
  57. package/build/server.js +183 -0
  58. package/build/server.js.map +1 -0
  59. package/build/tools/get-related.d.ts +64 -0
  60. package/build/tools/get-related.d.ts.map +1 -0
  61. package/build/tools/get-related.js +203 -0
  62. package/build/tools/get-related.js.map +1 -0
  63. package/build/tools/list-topics.d.ts +43 -0
  64. package/build/tools/list-topics.d.ts.map +1 -0
  65. package/build/tools/list-topics.js +63 -0
  66. package/build/tools/list-topics.js.map +1 -0
  67. package/build/tools/read-article.d.ts +42 -0
  68. package/build/tools/read-article.d.ts.map +1 -0
  69. package/build/tools/read-article.js +89 -0
  70. package/build/tools/read-article.js.map +1 -0
  71. package/build/tools/search.d.ts +57 -0
  72. package/build/tools/search.d.ts.map +1 -0
  73. package/build/tools/search.js +109 -0
  74. package/build/tools/search.js.map +1 -0
  75. package/build/types/index.d.ts +179 -0
  76. package/build/types/index.d.ts.map +1 -0
  77. package/build/types/index.js +2 -0
  78. package/build/types/index.js.map +1 -0
  79. package/build/utils/docs-downloader.d.ts +9 -0
  80. package/build/utils/docs-downloader.d.ts.map +1 -0
  81. package/build/utils/docs-downloader.js +82 -0
  82. package/build/utils/docs-downloader.js.map +1 -0
  83. package/build/utils/paths.d.ts +67 -0
  84. package/build/utils/paths.d.ts.map +1 -0
  85. package/build/utils/paths.js +132 -0
  86. package/build/utils/paths.js.map +1 -0
  87. package/build/utils/text-processing.d.ts +62 -0
  88. package/build/utils/text-processing.d.ts.map +1 -0
  89. package/build/utils/text-processing.js +214 -0
  90. package/build/utils/text-processing.js.map +1 -0
  91. package/package.json +63 -0
@@ -0,0 +1,63 @@
1
+ /**
2
+ * List topics tool handler
3
+ */
4
+ export class ListTopicsTool {
5
+ topicIndex;
6
+ constructor(topicIndex) {
7
+ this.topicIndex = topicIndex;
8
+ }
9
+ /**
10
+ * Lists documentation topics in hierarchical structure
11
+ */
12
+ async execute(input) {
13
+ const { area, depth = 2, parentPath } = input;
14
+ if (parentPath) {
15
+ // Get topics under specific parent
16
+ const topics = this.topicIndex.getTopicsUnderPath(area, parentPath);
17
+ return {
18
+ area,
19
+ topics,
20
+ totalTopics: topics.length,
21
+ };
22
+ }
23
+ // Get topics with depth limit
24
+ const topics = this.topicIndex.getTopicsWithDepth(area, depth);
25
+ return {
26
+ area,
27
+ topics,
28
+ totalTopics: this.topicIndex.getHierarchy(area)?.totalTopics || 0,
29
+ };
30
+ }
31
+ /**
32
+ * Gets the tool schema for MCP
33
+ */
34
+ static getSchema() {
35
+ return {
36
+ name: 'list_topics',
37
+ description: 'List documentation topics in a hierarchical structure. Can show the entire TOC or a specific section.',
38
+ inputSchema: {
39
+ type: 'object',
40
+ properties: {
41
+ area: {
42
+ type: 'string',
43
+ enum: ['ISuite', 'apim'],
44
+ description: 'Documentation area to list topics for (ci area does not have an index)'
45
+ },
46
+ depth: {
47
+ type: 'number',
48
+ description: 'How many levels deep to show (1-5)',
49
+ default: 2,
50
+ minimum: 1,
51
+ maximum: 5
52
+ },
53
+ parentPath: {
54
+ type: 'string',
55
+ description: 'Show topics under this parent path only (optional)'
56
+ }
57
+ },
58
+ required: ['area']
59
+ }
60
+ };
61
+ }
62
+ }
63
+ //# sourceMappingURL=list-topics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-topics.js","sourceRoot":"","sources":["../../src/tools/list-topics.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,OAAO,cAAc;IACL;IAApB,YAAoB,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;IAAG,CAAC;IAE9C;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,KAAsB;QAClC,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;QAE9C,IAAI,UAAU,EAAE,CAAC;YACf,mCAAmC;YACnC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAEpE,OAAO;gBACL,IAAI;gBACJ,MAAM;gBACN,WAAW,EAAE,MAAM,CAAC,MAAM;aAC3B,CAAC;QACJ,CAAC;QAED,8BAA8B;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAE/D,OAAO;YACL,IAAI;YACJ,MAAM;YACN,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,WAAW,IAAI,CAAC;SAClE,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,SAAS;QACd,OAAO;YACL,IAAI,EAAE,aAAa;YACnB,WAAW,EAAE,uGAAuG;YACpH,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,IAAI,EAAE;wBACJ,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;wBACxB,WAAW,EAAE,wEAAwE;qBACtF;oBACD,KAAK,EAAE;wBACL,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,oCAAoC;wBACjD,OAAO,EAAE,CAAC;wBACV,OAAO,EAAE,CAAC;wBACV,OAAO,EAAE,CAAC;qBACX;oBACD,UAAU,EAAE;wBACV,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,oDAAoD;qBAClE;iBACF;gBACD,QAAQ,EAAE,CAAC,MAAM,CAAC;aACnB;SACF,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,42 @@
1
+ import type { ReadArticleInput, ReadArticleOutput } from '../types/index.js';
2
+ import { FileRegistry } from '../indexing/file-registry.js';
3
+ import { FileCache } from '../cache/file-cache.js';
4
+ /**
5
+ * Read article tool handler
6
+ */
7
+ export declare class ReadArticleTool {
8
+ private registry;
9
+ private fileCache;
10
+ constructor(registry: FileRegistry, fileCache: FileCache);
11
+ /**
12
+ * Reads an article by file path or LOIO ID
13
+ */
14
+ execute(input: ReadArticleInput): Promise<ReadArticleOutput>;
15
+ /**
16
+ * Resolves identifier (path or LOIO ID) to file path
17
+ */
18
+ private resolveIdentifier;
19
+ /**
20
+ * Gets the tool schema for MCP
21
+ */
22
+ static getSchema(): {
23
+ name: string;
24
+ description: string;
25
+ inputSchema: {
26
+ type: string;
27
+ properties: {
28
+ identifier: {
29
+ type: string;
30
+ description: string;
31
+ };
32
+ resolveLinks: {
33
+ type: string;
34
+ description: string;
35
+ default: boolean;
36
+ };
37
+ };
38
+ required: string[];
39
+ };
40
+ };
41
+ }
42
+ //# sourceMappingURL=read-article.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-article.d.ts","sourceRoot":"","sources":["../../src/tools/read-article.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAInD;;GAEG;AACH,qBAAa,eAAe;IAExB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,SAAS;gBADT,QAAQ,EAAE,YAAY,EACtB,SAAS,EAAE,SAAS;IAG9B;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAwClE;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAiBzB;;OAEG;IACH,MAAM,CAAC,SAAS;;;;;;;;;;;;;;;;;;;CAqBjB"}
@@ -0,0 +1,89 @@
1
+ import { resolveLinksInContent, extractRelatedLinks } from '../parsers/links.js';
2
+ import { existsSync } from 'fs';
3
+ /**
4
+ * Read article tool handler
5
+ */
6
+ export class ReadArticleTool {
7
+ registry;
8
+ fileCache;
9
+ constructor(registry, fileCache) {
10
+ this.registry = registry;
11
+ this.fileCache = fileCache;
12
+ }
13
+ /**
14
+ * Reads an article by file path or LOIO ID
15
+ */
16
+ async execute(input) {
17
+ const { identifier, resolveLinks = true } = input;
18
+ // Determine if identifier is a path or LOIO ID
19
+ const filePath = this.resolveIdentifier(identifier);
20
+ if (!filePath) {
21
+ throw new Error(`Article not found: ${identifier}`);
22
+ }
23
+ if (!existsSync(filePath)) {
24
+ throw new Error(`Article file does not exist: ${filePath}`);
25
+ }
26
+ // Get parsed document
27
+ const doc = await this.fileCache.get(filePath);
28
+ // Process content
29
+ let content = doc.content;
30
+ if (resolveLinks) {
31
+ content = resolveLinksInContent(content, filePath);
32
+ }
33
+ // Extract related links
34
+ const relatedLinksParsed = extractRelatedLinks(doc.content, filePath);
35
+ const relatedLinks = relatedLinksParsed.map(link => link.absolutePath);
36
+ return {
37
+ title: doc.title,
38
+ filePath: doc.metadata.filePath,
39
+ loioId: doc.loioId,
40
+ content,
41
+ metadata: {
42
+ area: doc.metadata.area,
43
+ relatedLinks,
44
+ },
45
+ };
46
+ }
47
+ /**
48
+ * Resolves identifier (path or LOIO ID) to file path
49
+ */
50
+ resolveIdentifier(identifier) {
51
+ // Check if it's a LOIO ID
52
+ if (identifier.startsWith('loio')) {
53
+ const entry = this.registry.getByLoioId(identifier);
54
+ return entry ? entry.filePath : null;
55
+ }
56
+ // Check if it's a direct file path
57
+ if (existsSync(identifier)) {
58
+ return identifier;
59
+ }
60
+ // Try to find in registry
61
+ const entry = this.registry.getByPath(identifier);
62
+ return entry ? entry.filePath : null;
63
+ }
64
+ /**
65
+ * Gets the tool schema for MCP
66
+ */
67
+ static getSchema() {
68
+ return {
69
+ name: 'read_article',
70
+ description: 'Read the full content of a documentation article by file path or LOIO ID. Returns formatted markdown content with resolved links.',
71
+ inputSchema: {
72
+ type: 'object',
73
+ properties: {
74
+ identifier: {
75
+ type: 'string',
76
+ description: 'Either the file path (e.g., "docs/ISuite/what-is-sap-integration-suite-5cc6987.md") or LOIO ID (e.g., "loio5cc6987511104c418b7cb4c25f3d9cb0")'
77
+ },
78
+ resolveLinks: {
79
+ type: 'boolean',
80
+ description: 'Convert relative links to absolute paths',
81
+ default: true
82
+ }
83
+ },
84
+ required: ['identifier']
85
+ }
86
+ };
87
+ }
88
+ }
89
+ //# sourceMappingURL=read-article.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-article.js","sourceRoot":"","sources":["../../src/tools/read-article.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import type { SearchToolInput, CombinedSearchResults } from '../types/index.js';
2
+ import { FullTextSearch } from '../search/fulltext.js';
3
+ import { TitleSearch } from '../search/title.js';
4
+ import { SemanticSearch } from '../search/semantic.js';
5
+ import { SearchCache } from '../cache/search-cache.js';
6
+ /**
7
+ * Search documentation tool handler
8
+ */
9
+ export declare class SearchTool {
10
+ private fulltextSearch;
11
+ private titleSearch;
12
+ private semanticSearch;
13
+ private searchCache;
14
+ private ranking;
15
+ constructor(fulltextSearch: FullTextSearch, titleSearch: TitleSearch, semanticSearch: SemanticSearch, searchCache: SearchCache);
16
+ /**
17
+ * Executes search based on input parameters
18
+ */
19
+ execute(input: SearchToolInput): Promise<CombinedSearchResults>;
20
+ /**
21
+ * Gets the tool schema for MCP
22
+ */
23
+ static getSchema(): {
24
+ name: string;
25
+ description: string;
26
+ inputSchema: {
27
+ type: string;
28
+ properties: {
29
+ query: {
30
+ type: string;
31
+ description: string;
32
+ };
33
+ searchType: {
34
+ type: string;
35
+ enum: string[];
36
+ description: string;
37
+ default: string;
38
+ };
39
+ area: {
40
+ type: string;
41
+ enum: string[];
42
+ description: string;
43
+ default: string;
44
+ };
45
+ limit: {
46
+ type: string;
47
+ description: string;
48
+ default: number;
49
+ minimum: number;
50
+ maximum: number;
51
+ };
52
+ };
53
+ required: string[];
54
+ };
55
+ };
56
+ }
57
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD;;GAEG;AACH,qBAAa,UAAU;IAInB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,WAAW;IANrB,OAAO,CAAC,OAAO,CAAgB;gBAGrB,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,WAAW;IAKlC;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAiErE;;OAEG;IACH,MAAM,CAAC,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCjB"}
@@ -0,0 +1,109 @@
1
+ import { SearchRanking } from '../search/ranking.js';
2
+ /**
3
+ * Search documentation tool handler
4
+ */
5
+ export class SearchTool {
6
+ fulltextSearch;
7
+ titleSearch;
8
+ semanticSearch;
9
+ searchCache;
10
+ ranking;
11
+ constructor(fulltextSearch, titleSearch, semanticSearch, searchCache) {
12
+ this.fulltextSearch = fulltextSearch;
13
+ this.titleSearch = titleSearch;
14
+ this.semanticSearch = semanticSearch;
15
+ this.searchCache = searchCache;
16
+ this.ranking = new SearchRanking();
17
+ }
18
+ /**
19
+ * Executes search based on input parameters
20
+ */
21
+ async execute(input) {
22
+ const { query, searchType = 'all', area = 'all', limit = 20 } = input;
23
+ const startTime = Date.now();
24
+ // Check cache first
25
+ const cached = this.searchCache.get(query, searchType, area);
26
+ if (cached) {
27
+ return {
28
+ results: cached.slice(0, limit),
29
+ totalResults: cached.length,
30
+ searchType,
31
+ queryTime: Date.now() - startTime,
32
+ };
33
+ }
34
+ // Perform search based on type
35
+ let results;
36
+ if (searchType === 'fulltext') {
37
+ results = await this.fulltextSearch.search({ query, area, limit });
38
+ }
39
+ else if (searchType === 'title') {
40
+ results = await this.titleSearch.search({ query, area, limit });
41
+ }
42
+ else if (searchType === 'semantic') {
43
+ results = await this.semanticSearch.search({ query, area, limit });
44
+ }
45
+ else if (searchType === 'all') {
46
+ // Run all three searches in parallel
47
+ const [fulltextResults, titleResults, semanticResults] = await Promise.all([
48
+ this.fulltextSearch.search({ query, area, limit: limit * 2 }),
49
+ this.titleSearch.search({ query, area, limit: limit * 2 }),
50
+ this.semanticSearch.search({ query, area, limit: limit * 2 }).catch(() => []), // Fallback if semantic search not initialized
51
+ ]);
52
+ // Combine results
53
+ results = this.ranking.combineResults(fulltextResults, titleResults, semanticResults);
54
+ // Limit final results
55
+ results = results.slice(0, limit);
56
+ }
57
+ else {
58
+ throw new Error(`Invalid search type: ${searchType}`);
59
+ }
60
+ // Cache results
61
+ this.searchCache.set(query, searchType, area, results);
62
+ const queryTime = Date.now() - startTime;
63
+ return {
64
+ results,
65
+ totalResults: results.length,
66
+ searchType,
67
+ queryTime,
68
+ };
69
+ }
70
+ /**
71
+ * Gets the tool schema for MCP
72
+ */
73
+ static getSchema() {
74
+ return {
75
+ name: 'search_documentation',
76
+ description: 'Search SAP Business Technology Platform documentation using full-text, title-based, or semantic search. Returns relevant documentation articles with snippets.',
77
+ inputSchema: {
78
+ type: 'object',
79
+ properties: {
80
+ query: {
81
+ type: 'string',
82
+ description: 'Search query string'
83
+ },
84
+ searchType: {
85
+ type: 'string',
86
+ enum: ['fulltext', 'title', 'semantic', 'all'],
87
+ description: 'Type of search: fulltext (content search), title (title matching), semantic (AI-based), all (combined)',
88
+ default: 'all'
89
+ },
90
+ area: {
91
+ type: 'string',
92
+ enum: ['ISuite', 'ci', 'apim', 'all'],
93
+ description: 'Limit search to specific documentation area. ISuite = main Integration Suite, ci = Cloud Integration, apim = API Management',
94
+ default: 'all'
95
+ },
96
+ limit: {
97
+ type: 'number',
98
+ description: 'Maximum number of results to return (1-50)',
99
+ default: 20,
100
+ minimum: 1,
101
+ maximum: 50
102
+ }
103
+ },
104
+ required: ['query']
105
+ }
106
+ };
107
+ }
108
+ }
109
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,179 @@
1
+ export type DocumentArea = 'ISuite' | 'ci' | 'apim';
2
+ export type SearchType = 'fulltext' | 'title' | 'semantic' | 'all';
3
+ export type MatchType = 'fulltext' | 'title' | 'semantic' | 'combined';
4
+ export type RelationshipType = 'explicit_link' | 'semantic' | 'combined';
5
+ export type EmbeddingProvider = 'local' | 'voyage' | 'openai';
6
+ export interface DocumentMetadata {
7
+ loioId: string;
8
+ title: string;
9
+ area: DocumentArea;
10
+ filePath: string;
11
+ relativePath: string;
12
+ lastModified: Date;
13
+ size: number;
14
+ }
15
+ export interface ParsedDocument {
16
+ title: string;
17
+ loioId: string;
18
+ content: string;
19
+ cleanText: string;
20
+ links: ParsedLink[];
21
+ headings: Heading[];
22
+ images: string[];
23
+ metadata: DocumentMetadata;
24
+ }
25
+ export interface ParsedLink {
26
+ text: string;
27
+ href: string;
28
+ absolutePath: string;
29
+ isExternal: boolean;
30
+ anchor?: string;
31
+ }
32
+ export interface Heading {
33
+ level: number;
34
+ text: string;
35
+ anchor: string;
36
+ }
37
+ export interface SearchOptions {
38
+ query: string;
39
+ searchType?: SearchType;
40
+ area?: DocumentArea | 'all';
41
+ limit?: number;
42
+ }
43
+ export interface FullTextSearchOptions {
44
+ query: string;
45
+ area?: DocumentArea | 'all';
46
+ limit?: number;
47
+ }
48
+ export interface TitleSearchOptions {
49
+ query: string;
50
+ area?: DocumentArea | 'all';
51
+ limit?: number;
52
+ }
53
+ export interface SemanticSearchOptions {
54
+ query: string;
55
+ area?: DocumentArea | 'all';
56
+ limit?: number;
57
+ }
58
+ export interface SearchResult {
59
+ filePath: string;
60
+ relativePath: string;
61
+ title: string;
62
+ loioId: string;
63
+ snippet: string;
64
+ score: number;
65
+ matchType: MatchType;
66
+ area: DocumentArea;
67
+ }
68
+ export interface CombinedSearchResults {
69
+ results: SearchResult[];
70
+ totalResults: number;
71
+ searchType: SearchType;
72
+ queryTime: number;
73
+ }
74
+ export interface Topic {
75
+ title: string;
76
+ path: string;
77
+ level: number;
78
+ children: Topic[];
79
+ loioId?: string;
80
+ }
81
+ export interface TopicHierarchy {
82
+ area: DocumentArea;
83
+ topics: Topic[];
84
+ totalTopics: number;
85
+ }
86
+ export interface FileRegistryEntry {
87
+ filePath: string;
88
+ relativePath: string;
89
+ title: string;
90
+ loioId: string;
91
+ area: DocumentArea;
92
+ }
93
+ export interface CacheEntry<T> {
94
+ data: T;
95
+ timestamp: number;
96
+ mtime?: number;
97
+ }
98
+ export interface CacheStats {
99
+ hits: number;
100
+ misses: number;
101
+ size: number;
102
+ maxSize: number;
103
+ }
104
+ export interface EmbeddingCacheData {
105
+ version: string;
106
+ model: string;
107
+ provider: EmbeddingProvider;
108
+ createdAt: string;
109
+ embeddings: EmbeddingEntry[];
110
+ }
111
+ export interface EmbeddingEntry {
112
+ filePath: string;
113
+ title: string;
114
+ loioId: string;
115
+ chunkIndex: number;
116
+ text: string;
117
+ embedding: number[];
118
+ }
119
+ export interface TextChunk {
120
+ text: string;
121
+ chunkIndex: number;
122
+ startOffset: number;
123
+ endOffset: number;
124
+ }
125
+ export interface SearchToolInput {
126
+ query: string;
127
+ searchType?: SearchType;
128
+ area?: DocumentArea | 'all';
129
+ limit?: number;
130
+ }
131
+ export interface ReadArticleInput {
132
+ identifier: string;
133
+ resolveLinks?: boolean;
134
+ }
135
+ export interface ReadArticleOutput {
136
+ title: string;
137
+ filePath: string;
138
+ loioId: string;
139
+ content: string;
140
+ metadata: {
141
+ area: DocumentArea;
142
+ relatedLinks: string[];
143
+ };
144
+ }
145
+ export interface ListTopicsInput {
146
+ area: DocumentArea;
147
+ depth?: number;
148
+ parentPath?: string;
149
+ }
150
+ export interface GetRelatedArticlesInput {
151
+ identifier: string;
152
+ method?: 'links' | 'semantic' | 'both';
153
+ limit?: number;
154
+ }
155
+ export interface RelatedArticle {
156
+ title: string;
157
+ filePath: string;
158
+ relationshipType: RelationshipType;
159
+ score: number;
160
+ loioId?: string;
161
+ }
162
+ export interface GetRelatedArticlesOutput {
163
+ sourceArticle: {
164
+ title: string;
165
+ filePath: string;
166
+ loioId: string;
167
+ };
168
+ relatedArticles: RelatedArticle[];
169
+ }
170
+ export interface ServerConfig {
171
+ docsPath: string;
172
+ cacheDir: string;
173
+ fileCacheSize: number;
174
+ searchCacheTTL: number;
175
+ embeddingProvider: EmbeddingProvider;
176
+ voyageApiKey?: string;
177
+ openaiApiKey?: string;
178
+ }
179
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Checks if documentation exists and downloads it if necessary
3
+ */
4
+ export declare function ensureDocsAvailable(docsPath: string): Promise<boolean>;
5
+ /**
6
+ * Gets the size of the docs directory in MB
7
+ */
8
+ export declare function getDocsSize(docsPath: string): Promise<number>;
9
+ //# sourceMappingURL=docs-downloader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-downloader.d.ts","sourceRoot":"","sources":["../../src/utils/docs-downloader.ts"],"names":[],"mappings":"AAaA;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA6B5E;AAmCD;;GAEG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAWnE"}