@get-technology-inc/jamf-docs-mcp-server 1.0.0 → 1.2.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 (103) hide show
  1. package/README.md +61 -139
  2. package/dist/completions.d.ts +13 -0
  3. package/dist/completions.d.ts.map +1 -0
  4. package/dist/completions.js +31 -0
  5. package/dist/completions.js.map +1 -0
  6. package/dist/constants.d.ts +123 -1
  7. package/dist/constants.d.ts.map +1 -1
  8. package/dist/constants.js +187 -17
  9. package/dist/constants.js.map +1 -1
  10. package/dist/index.js +46 -6
  11. package/dist/index.js.map +1 -1
  12. package/dist/prompts/compare-versions.d.ts +7 -0
  13. package/dist/prompts/compare-versions.d.ts.map +1 -0
  14. package/dist/prompts/compare-versions.js +56 -0
  15. package/dist/prompts/compare-versions.js.map +1 -0
  16. package/dist/prompts/index.d.ts +6 -0
  17. package/dist/prompts/index.d.ts.map +1 -0
  18. package/dist/prompts/index.js +12 -0
  19. package/dist/prompts/index.js.map +1 -0
  20. package/dist/prompts/setup-guide.d.ts +7 -0
  21. package/dist/prompts/setup-guide.d.ts.map +1 -0
  22. package/dist/prompts/setup-guide.js +53 -0
  23. package/dist/prompts/setup-guide.js.map +1 -0
  24. package/dist/prompts/troubleshoot.d.ts +7 -0
  25. package/dist/prompts/troubleshoot.d.ts.map +1 -0
  26. package/dist/prompts/troubleshoot.js +52 -0
  27. package/dist/prompts/troubleshoot.js.map +1 -0
  28. package/dist/resources/index.d.ts +13 -0
  29. package/dist/resources/index.d.ts.map +1 -0
  30. package/dist/resources/index.js +121 -0
  31. package/dist/resources/index.js.map +1 -0
  32. package/dist/schemas/index.d.ts +29 -63
  33. package/dist/schemas/index.d.ts.map +1 -1
  34. package/dist/schemas/index.js +35 -16
  35. package/dist/schemas/index.js.map +1 -1
  36. package/dist/schemas/output.d.ts +63 -0
  37. package/dist/schemas/output.d.ts.map +1 -0
  38. package/dist/schemas/output.js +63 -0
  39. package/dist/schemas/output.js.map +1 -0
  40. package/dist/services/cache.d.ts +37 -12
  41. package/dist/services/cache.d.ts.map +1 -1
  42. package/dist/services/cache.js +141 -41
  43. package/dist/services/cache.js.map +1 -1
  44. package/dist/services/metadata.d.ts +78 -0
  45. package/dist/services/metadata.d.ts.map +1 -0
  46. package/dist/services/metadata.js +362 -0
  47. package/dist/services/metadata.js.map +1 -0
  48. package/dist/services/scraper.d.ts +3 -2
  49. package/dist/services/scraper.d.ts.map +1 -1
  50. package/dist/services/scraper.js +170 -145
  51. package/dist/services/scraper.js.map +1 -1
  52. package/dist/services/search-suggestions.d.ts +27 -0
  53. package/dist/services/search-suggestions.d.ts.map +1 -0
  54. package/dist/services/search-suggestions.js +193 -0
  55. package/dist/services/search-suggestions.js.map +1 -0
  56. package/dist/services/tokenizer.d.ts +17 -1
  57. package/dist/services/tokenizer.d.ts.map +1 -1
  58. package/dist/services/tokenizer.js +122 -66
  59. package/dist/services/tokenizer.js.map +1 -1
  60. package/dist/tools/get-article.d.ts +1 -1
  61. package/dist/tools/get-article.d.ts.map +1 -1
  62. package/dist/tools/get-article.js +145 -70
  63. package/dist/tools/get-article.js.map +1 -1
  64. package/dist/tools/get-toc.d.ts +1 -1
  65. package/dist/tools/get-toc.d.ts.map +1 -1
  66. package/dist/tools/get-toc.js +107 -47
  67. package/dist/tools/get-toc.js.map +1 -1
  68. package/dist/tools/list-products.d.ts +1 -1
  69. package/dist/tools/list-products.d.ts.map +1 -1
  70. package/dist/tools/list-products.js +42 -13
  71. package/dist/tools/list-products.js.map +1 -1
  72. package/dist/tools/search.d.ts +1 -1
  73. package/dist/tools/search.d.ts.map +1 -1
  74. package/dist/tools/search.js +142 -69
  75. package/dist/tools/search.js.map +1 -1
  76. package/dist/transport/http.d.ts +12 -0
  77. package/dist/transport/http.d.ts.map +1 -0
  78. package/dist/transport/http.js +297 -0
  79. package/dist/transport/http.js.map +1 -0
  80. package/dist/transport/index.d.ts +13 -0
  81. package/dist/transport/index.d.ts.map +1 -0
  82. package/dist/transport/index.js +40 -0
  83. package/dist/transport/index.js.map +1 -0
  84. package/dist/types.d.ts +12 -18
  85. package/dist/types.d.ts.map +1 -1
  86. package/dist/types.js.map +1 -1
  87. package/dist/utils/doc-type.d.ts +9 -0
  88. package/dist/utils/doc-type.d.ts.map +1 -0
  89. package/dist/utils/doc-type.js +16 -0
  90. package/dist/utils/doc-type.js.map +1 -0
  91. package/dist/utils/progress.d.ts +13 -0
  92. package/dist/utils/progress.d.ts.map +1 -0
  93. package/dist/utils/progress.js +18 -0
  94. package/dist/utils/progress.js.map +1 -0
  95. package/dist/utils/sanitize.d.ts +30 -0
  96. package/dist/utils/sanitize.d.ts.map +1 -0
  97. package/dist/utils/sanitize.js +57 -0
  98. package/dist/utils/sanitize.js.map +1 -0
  99. package/dist/utils/url.d.ts +11 -0
  100. package/dist/utils/url.d.ts.map +1 -0
  101. package/dist/utils/url.js +23 -0
  102. package/dist/utils/url.js.map +1 -0
  103. package/package.json +8 -5
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Search suggestions service
3
+ *
4
+ * Generates helpful suggestions when a search returns no results.
5
+ */
6
+ import { type TopicId } from '../constants.js';
7
+ /**
8
+ * Search suggestion result
9
+ */
10
+ export interface SearchSuggestions {
11
+ simplifiedQuery: string | null;
12
+ alternativeKeywords: string[];
13
+ suggestedTopics: {
14
+ id: TopicId;
15
+ name: string;
16
+ }[];
17
+ tips: string[];
18
+ }
19
+ /**
20
+ * Generate search suggestions for a query that returned no results
21
+ */
22
+ export declare function generateSearchSuggestions(query: string, hasProductFilter?: boolean, hasTopicFilter?: boolean): SearchSuggestions;
23
+ /**
24
+ * Format search suggestions as markdown
25
+ */
26
+ export declare function formatSearchSuggestions(query: string, suggestions: SearchSuggestions): string;
27
+ //# sourceMappingURL=search-suggestions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-suggestions.d.ts","sourceRoot":"","sources":["../../src/services/search-suggestions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAe,KAAK,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,eAAe,EAAE;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACjD,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AA6KD;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,EACb,gBAAgB,UAAQ,EACxB,cAAc,UAAQ,GACrB,iBAAiB,CASnB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,iBAAiB,GAAG,MAAM,CA4B7F"}
@@ -0,0 +1,193 @@
1
+ /**
2
+ * Search suggestions service
3
+ *
4
+ * Generates helpful suggestions when a search returns no results.
5
+ */
6
+ import { JAMF_TOPICS } from '../constants.js';
7
+ /**
8
+ * Common word mappings for synonyms
9
+ */
10
+ const KEYWORD_SYNONYMS = {
11
+ 'sso': ['single sign-on', 'authentication', 'identity', 'login'],
12
+ 'login': ['sign-in', 'authentication', 'sso', 'connect'],
13
+ 'mdm': ['mobile device management', 'device management', 'enrollment'],
14
+ 'deploy': ['deployment', 'install', 'distribute', 'push'],
15
+ 'config': ['configuration', 'settings', 'setup', 'configure'],
16
+ 'policy': ['policies', 'rule', 'rules', 'enforcement'],
17
+ 'profile': ['profiles', 'configuration profile', 'payload'],
18
+ 'app': ['application', 'apps', 'software'],
19
+ 'update': ['upgrade', 'patch', 'software update'],
20
+ 'security': ['protection', 'secure', 'compliance'],
21
+ 'user': ['users', 'account', 'accounts', 'identity'],
22
+ 'group': ['groups', 'smart group', 'static group'],
23
+ 'script': ['scripts', 'bash', 'shell', 'automation'],
24
+ 'api': ['rest api', 'classic api', 'jamf pro api'],
25
+ 'certificate': ['certificates', 'cert', 'ssl', 'tls'],
26
+ 'network': ['wifi', 'vpn', 'networking', 'proxy'],
27
+ 'filevault': ['encryption', 'disk encryption', 'recovery key'],
28
+ 'inventory': ['hardware', 'software', 'collection', 'attributes'],
29
+ 'remote': ['remote management', 'vnc', 'screen sharing'],
30
+ 'protect': ['protection', 'threat', 'malware', 'security']
31
+ };
32
+ /**
33
+ * Stop words to filter out from queries
34
+ */
35
+ const STOP_WORDS = new Set([
36
+ 'the', 'a', 'an', 'is', 'are', 'was', 'were', 'be', 'been', 'being',
37
+ 'have', 'has', 'had', 'do', 'does', 'did', 'will', 'would', 'could',
38
+ 'should', 'may', 'might', 'must', 'shall', 'can', 'need', 'to', 'of',
39
+ 'in', 'for', 'on', 'with', 'at', 'by', 'from', 'as', 'into', 'through',
40
+ 'during', 'before', 'after', 'above', 'below', 'between', 'under',
41
+ 'and', 'or', 'but', 'if', 'then', 'else', 'when', 'up', 'down', 'out',
42
+ 'how', 'what', 'where', 'why', 'who', 'which', 'this', 'that', 'these',
43
+ 'those', 'it', 'its', 'my', 'your', 'our', 'their', 'i', 'you', 'we',
44
+ 'they', 'me', 'him', 'her', 'us', 'them', 'jamf'
45
+ ]);
46
+ /**
47
+ * Extract meaningful keywords from a query
48
+ */
49
+ function extractKeywords(query) {
50
+ return query
51
+ .toLowerCase()
52
+ .replace(/[^\w\s-]/g, ' ')
53
+ .split(/\s+/)
54
+ .filter(word => word.length > 1 && !STOP_WORDS.has(word));
55
+ }
56
+ /**
57
+ * Simplify a query by removing stop words and keeping key terms
58
+ */
59
+ function simplifyQuery(query) {
60
+ const keywords = extractKeywords(query);
61
+ if (keywords.length === 0) {
62
+ return null;
63
+ }
64
+ // If query is already simple (2 words or less), no simplification needed
65
+ if (keywords.length <= 2) {
66
+ return null;
67
+ }
68
+ // Keep the most important 2-3 keywords
69
+ return keywords.slice(0, 3).join(' ');
70
+ }
71
+ /**
72
+ * Find alternative keywords based on synonyms
73
+ */
74
+ function findAlternativeKeywords(query) {
75
+ const keywords = extractKeywords(query);
76
+ const alternatives = new Set();
77
+ for (const keyword of keywords) {
78
+ // Check if keyword has synonyms
79
+ const synonyms = KEYWORD_SYNONYMS[keyword];
80
+ if (synonyms !== undefined) {
81
+ for (const syn of synonyms) {
82
+ alternatives.add(syn);
83
+ }
84
+ }
85
+ // Check if keyword is a synonym of another word
86
+ for (const [key, syns] of Object.entries(KEYWORD_SYNONYMS)) {
87
+ if (syns.includes(keyword)) {
88
+ alternatives.add(key);
89
+ }
90
+ }
91
+ }
92
+ // Remove original keywords from alternatives
93
+ for (const keyword of keywords) {
94
+ alternatives.delete(keyword);
95
+ }
96
+ return Array.from(alternatives).slice(0, 5);
97
+ }
98
+ /**
99
+ * Find relevant topics based on query keywords
100
+ */
101
+ function findRelevantTopics(query) {
102
+ const keywords = extractKeywords(query);
103
+ const scoredTopics = [];
104
+ for (const [topicId, topic] of Object.entries(JAMF_TOPICS)) {
105
+ let score = 0;
106
+ // Check topic name
107
+ const topicNameLower = topic.name.toLowerCase();
108
+ for (const keyword of keywords) {
109
+ if (topicNameLower.includes(keyword)) {
110
+ score += 3;
111
+ }
112
+ }
113
+ // Check topic keywords
114
+ for (const topicKeyword of topic.keywords) {
115
+ const tkLower = topicKeyword.toLowerCase();
116
+ for (const keyword of keywords) {
117
+ if (tkLower.includes(keyword) || keyword.includes(tkLower)) {
118
+ score += 1;
119
+ }
120
+ }
121
+ }
122
+ if (score > 0) {
123
+ scoredTopics.push({
124
+ id: topicId,
125
+ name: topic.name,
126
+ score
127
+ });
128
+ }
129
+ }
130
+ // Sort by score and return top 3
131
+ return scoredTopics
132
+ .sort((a, b) => b.score - a.score)
133
+ .slice(0, 3)
134
+ .map(({ id, name }) => ({ id, name }));
135
+ }
136
+ /**
137
+ * Generate tips based on query characteristics
138
+ */
139
+ function generateTips(query, hasFilters) {
140
+ const tips = [];
141
+ const keywords = extractKeywords(query);
142
+ if (keywords.length > 4) {
143
+ tips.push('Try using fewer, more specific keywords');
144
+ }
145
+ if (hasFilters) {
146
+ tips.push('Try removing filters to broaden your search');
147
+ }
148
+ if (query.includes('"')) {
149
+ tips.push('Try removing quotes for a broader search');
150
+ }
151
+ tips.push('Browse the table of contents with `jamf_docs_get_toc`');
152
+ return tips;
153
+ }
154
+ /**
155
+ * Generate search suggestions for a query that returned no results
156
+ */
157
+ export function generateSearchSuggestions(query, hasProductFilter = false, hasTopicFilter = false) {
158
+ const hasFilters = hasProductFilter || hasTopicFilter;
159
+ return {
160
+ simplifiedQuery: simplifyQuery(query),
161
+ alternativeKeywords: findAlternativeKeywords(query),
162
+ suggestedTopics: findRelevantTopics(query),
163
+ tips: generateTips(query, hasFilters)
164
+ };
165
+ }
166
+ /**
167
+ * Format search suggestions as markdown
168
+ */
169
+ export function formatSearchSuggestions(query, suggestions) {
170
+ let output = `No results found for "${query}"\n\n`;
171
+ output += '## Search Suggestions\n\n';
172
+ if (suggestions.simplifiedQuery !== null) {
173
+ output += `**Try simpler query**: \`${suggestions.simplifiedQuery}\`\n\n`;
174
+ }
175
+ if (suggestions.alternativeKeywords.length > 0) {
176
+ output += `**Alternative keywords**: ${suggestions.alternativeKeywords.map(k => `\`${k}\``).join(', ')}\n\n`;
177
+ }
178
+ if (suggestions.suggestedTopics.length > 0) {
179
+ output += '**Try filtering by topic**:\n';
180
+ for (const topic of suggestions.suggestedTopics) {
181
+ output += `- \`topic="${topic.id}"\` - ${topic.name}\n`;
182
+ }
183
+ output += '\n';
184
+ }
185
+ if (suggestions.tips.length > 0) {
186
+ output += '**Tips**:\n';
187
+ for (const tip of suggestions.tips) {
188
+ output += `- ${tip}\n`;
189
+ }
190
+ }
191
+ return output;
192
+ }
193
+ //# sourceMappingURL=search-suggestions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-suggestions.js","sourceRoot":"","sources":["../../src/services/search-suggestions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAgB,MAAM,iBAAiB,CAAC;AAY5D;;GAEG;AACH,MAAM,gBAAgB,GAA6B;IACjD,KAAK,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,UAAU,EAAE,OAAO,CAAC;IAChE,OAAO,EAAE,CAAC,SAAS,EAAE,gBAAgB,EAAE,KAAK,EAAE,SAAS,CAAC;IACxD,KAAK,EAAE,CAAC,0BAA0B,EAAE,mBAAmB,EAAE,YAAY,CAAC;IACtE,QAAQ,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,CAAC;IACzD,QAAQ,EAAE,CAAC,eAAe,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC;IAC7D,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC;IACtD,SAAS,EAAE,CAAC,UAAU,EAAE,uBAAuB,EAAE,SAAS,CAAC;IAC3D,KAAK,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,CAAC;IAC1C,QAAQ,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,iBAAiB,CAAC;IACjD,UAAU,EAAE,CAAC,YAAY,EAAE,QAAQ,EAAE,YAAY,CAAC;IAClD,MAAM,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC;IACpD,OAAO,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,cAAc,CAAC;IAClD,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC;IACpD,KAAK,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,cAAc,CAAC;IAClD,aAAa,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC;IACrD,SAAS,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,CAAC;IACjD,WAAW,EAAE,CAAC,YAAY,EAAE,iBAAiB,EAAE,cAAc,CAAC;IAC9D,WAAW,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,CAAC;IACjE,QAAQ,EAAE,CAAC,mBAAmB,EAAE,KAAK,EAAE,gBAAgB,CAAC;IACxD,SAAS,EAAE,CAAC,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC;CAC3D,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC;IACzB,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO;IACnE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IACnE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI;IACpE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS;IACtE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO;IACjE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK;IACrE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;IACtE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI;IACpE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM;CACjD,CAAC,CAAC;AAEH;;GAEG;AACH,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,KAAK;SACT,WAAW,EAAE;SACb,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC;SACzB,KAAK,CAAC,KAAK,CAAC;SACZ,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAExC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,yEAAyE;IACzE,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uCAAuC;IACvC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAAC,KAAa;IAC5C,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IAEvC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,gCAAgC;QAChC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;gBAC3B,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,gDAAgD;QAChD,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC3D,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAED,6CAA6C;IAC7C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,KAAa;IACvC,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,YAAY,GAAmD,EAAE,CAAC;IAExE,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAC3D,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,mBAAmB;QACnB,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAChD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBACrC,KAAK,IAAI,CAAC,CAAC;YACb,CAAC;QACH,CAAC;QAED,uBAAuB;QACvB,KAAK,MAAM,YAAY,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC1C,MAAM,OAAO,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;YAC3C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC3D,KAAK,IAAI,CAAC,CAAC;gBACb,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,YAAY,CAAC,IAAI,CAAC;gBAChB,EAAE,EAAE,OAAkB;gBACtB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,KAAK;aACN,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,iCAAiC;IACjC,OAAO,YAAY;SAChB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;SACjC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACX,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,KAAa,EAAE,UAAmB;IACtD,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAExC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACf,IAAI,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;IAEnE,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,KAAa,EACb,gBAAgB,GAAG,KAAK,EACxB,cAAc,GAAG,KAAK;IAEtB,MAAM,UAAU,GAAG,gBAAgB,IAAI,cAAc,CAAC;IAEtD,OAAO;QACL,eAAe,EAAE,aAAa,CAAC,KAAK,CAAC;QACrC,mBAAmB,EAAE,uBAAuB,CAAC,KAAK,CAAC;QACnD,eAAe,EAAE,kBAAkB,CAAC,KAAK,CAAC;QAC1C,IAAI,EAAE,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC;KACtC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAa,EAAE,WAA8B;IACnF,IAAI,MAAM,GAAG,yBAAyB,KAAK,OAAO,CAAC;IACnD,MAAM,IAAI,2BAA2B,CAAC;IAEtC,IAAI,WAAW,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC;QACzC,MAAM,IAAI,4BAA4B,WAAW,CAAC,eAAe,QAAQ,CAAC;IAC5E,CAAC;IAED,IAAI,WAAW,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,6BAA6B,WAAW,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IAC/G,CAAC;IAED,IAAI,WAAW,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,+BAA+B,CAAC;QAC1C,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,eAAe,EAAE,CAAC;YAChD,MAAM,IAAI,cAAc,KAAK,CAAC,EAAE,SAAS,KAAK,CAAC,IAAI,IAAI,CAAC;QAC1D,CAAC;QACD,MAAM,IAAI,IAAI,CAAC;IACjB,CAAC;IAED,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,aAAa,CAAC;QACxB,KAAK,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -13,6 +13,17 @@ export interface TruncateResult {
13
13
  tokenInfo: TokenInfo;
14
14
  remainingSections?: ArticleSection[];
15
15
  }
16
+ /**
17
+ * Result of summary extraction
18
+ */
19
+ export interface SummaryResult {
20
+ title: string;
21
+ summary: string;
22
+ outline: ArticleSection[];
23
+ totalTokens: number;
24
+ estimatedReadTime: number;
25
+ tokenInfo: TokenInfo;
26
+ }
16
27
  /**
17
28
  * Result of section extraction
18
29
  */
@@ -25,7 +36,7 @@ export interface ExtractSectionResult {
25
36
  * Estimate token count for a text string
26
37
  * Uses different ratios for code blocks vs normal text
27
38
  */
28
- export declare function estimateTokens(text: string): number;
39
+ export declare function estimateTokens(text: string | null | undefined): number;
29
40
  /**
30
41
  * Create a TokenInfo object
31
42
  */
@@ -45,6 +56,11 @@ export declare function extractSection(content: string, sectionIdentifier: strin
45
56
  * - Lists remaining sections when truncated
46
57
  */
47
58
  export declare function truncateToTokenLimit(content: string, maxTokens?: number): TruncateResult;
59
+ /**
60
+ * Extract summary from Markdown content
61
+ * Returns the first paragraph and an outline of sections with token estimates
62
+ */
63
+ export declare function extractSummary(content: string, title: string, maxTokens?: number): SummaryResult;
48
64
  /**
49
65
  * Calculate pagination info
50
66
  */
@@ -1 +1 @@
1
- {"version":3,"file":"tokenizer.d.ts","sourceRoot":"","sources":["../../src/services/tokenizer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,SAAS,CAAC;IACrB,iBAAiB,CAAC,EAAE,cAAc,EAAE,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAE,SAAS,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAgBnD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,SAAS,GAAE,OAAe,GACzB,SAAS,CAMX;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,EAAE,CAiDjE;AAYD;;GAEG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,iBAAiB,EAAE,MAAM,EACzB,SAAS,GAAE,MAAwC,GAClD,oBAAoB,CAyDtB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,MAAwC,GAClD,cAAc,CAiFhB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf;IACD,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAcA;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,EACzC,KAAK,EAAE,CAAC,EAAE,EACV,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,EACjC,IAAI,GAAE,MAAU,EAChB,QAAQ,GAAE,MAAW,GACpB;IACD,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE;QACV,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;CACH,CAsCA"}
1
+ {"version":3,"file":"tokenizer.d.ts","sourceRoot":"","sources":["../../src/services/tokenizer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,SAAS,CAAC;IACrB,iBAAiB,CAAC,EAAE,cAAc,EAAE,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,SAAS,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAE,SAAS,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAgBtE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,SAAS,UAAQ,GAChB,SAAS,CAMX;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,EAAE,CAkCjE;AAYD;;GAEG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,iBAAiB,EAAE,MAAM,EACzB,SAAS,GAAE,MAAwC,GAClD,oBAAoB,CAyCtB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,MAAwC,GAClD,cAAc,CAiFhB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,SAAS,GAAE,MAAwC,GAClD,aAAa,CAwFf;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf;IACD,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAcA;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,EACzC,KAAK,EAAE,CAAC,EAAE,EACV,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,EACjC,IAAI,SAAI,EACR,QAAQ,SAAK,GACZ;IACD,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE;QACV,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;CACH,CAsCA"}
@@ -10,17 +10,13 @@ import { TOKEN_CONFIG } from '../constants.js';
10
10
  * Uses different ratios for code blocks vs normal text
11
11
  */
12
12
  export function estimateTokens(text) {
13
- if (!text) {
13
+ if (text === null || text === undefined || text === '') {
14
14
  return 0;
15
15
  }
16
- // Split content into code blocks and regular text
17
16
  const codeBlockRegex = /```[\s\S]*?```/g;
18
- const codeBlocks = text.match(codeBlockRegex) || [];
17
+ const codeBlocks = text.match(codeBlockRegex) ?? [];
19
18
  const regularText = text.replace(codeBlockRegex, '');
20
- // Calculate tokens for each type
21
- const codeTokens = codeBlocks.reduce((sum, block) => {
22
- return sum + Math.ceil(block.length / TOKEN_CONFIG.CODE_CHARS_PER_TOKEN);
23
- }, 0);
19
+ const codeTokens = codeBlocks.reduce((sum, block) => sum + Math.ceil(block.length / TOKEN_CONFIG.CODE_CHARS_PER_TOKEN), 0);
24
20
  const textTokens = Math.ceil(regularText.length / TOKEN_CONFIG.CHARS_PER_TOKEN);
25
21
  return codeTokens + textTokens;
26
22
  }
@@ -42,44 +38,31 @@ export function extractSections(content) {
42
38
  const lines = content.split('\n');
43
39
  let currentSection = null;
44
40
  let sectionContent = '';
45
- for (let i = 0; i < lines.length; i++) {
46
- const line = lines[i] ?? '';
47
- const headingMatch = line.match(/^(#{1,6})\s+(.+)$/);
48
- if (headingMatch) {
49
- // Save previous section
50
- if (currentSection) {
51
- const id = generateSectionId(currentSection.title);
52
- sections.push({
53
- id,
54
- title: currentSection.title,
55
- level: currentSection.level,
56
- tokenCount: estimateTokens(sectionContent)
57
- });
58
- }
59
- // Start new section
60
- const title = headingMatch[2]?.trim() ?? '';
61
- const level = headingMatch[1]?.length ?? 1;
41
+ function saveCurrentSection() {
42
+ if (currentSection !== null) {
43
+ sections.push({
44
+ id: generateSectionId(currentSection.title),
45
+ title: currentSection.title,
46
+ level: currentSection.level,
47
+ tokenCount: estimateTokens(sectionContent)
48
+ });
49
+ }
50
+ }
51
+ for (const line of lines) {
52
+ const headingMatch = /^(#{1,6})\s+(.+)$/.exec(line);
53
+ if (headingMatch !== null) {
54
+ saveCurrentSection();
62
55
  currentSection = {
63
- title,
64
- level,
65
- startLine: i
56
+ title: headingMatch[2]?.trim() ?? '',
57
+ level: headingMatch[1]?.length ?? 1
66
58
  };
67
- sectionContent = line + '\n';
59
+ sectionContent = `${line}\n`;
68
60
  }
69
- else if (currentSection) {
70
- sectionContent += line + '\n';
61
+ else if (currentSection !== null) {
62
+ sectionContent += `${line}\n`;
71
63
  }
72
64
  }
73
- // Don't forget the last section
74
- if (currentSection) {
75
- const id = generateSectionId(currentSection.title);
76
- sections.push({
77
- id,
78
- title: currentSection.title,
79
- level: currentSection.level,
80
- tokenCount: estimateTokens(sectionContent)
81
- });
82
- }
65
+ saveCurrentSection();
83
66
  return sections;
84
67
  }
85
68
  /**
@@ -97,43 +80,31 @@ function generateSectionId(title) {
97
80
  export function extractSection(content, sectionIdentifier, maxTokens = TOKEN_CONFIG.DEFAULT_MAX_TOKENS) {
98
81
  const lines = content.split('\n');
99
82
  const normalizedId = generateSectionId(sectionIdentifier);
100
- let inTargetSection = false;
101
- let targetLevel = 0;
102
83
  const sectionLines = [];
103
84
  let foundSection = null;
104
- for (let i = 0; i < lines.length; i++) {
105
- const line = lines[i] ?? '';
106
- const headingMatch = line.match(/^(#{1,6})\s+(.+)$/);
107
- if (headingMatch) {
85
+ let targetLevel = 0;
86
+ for (const line of lines) {
87
+ const headingMatch = /^(#{1,6})\s+(.+)$/.exec(line);
88
+ if (headingMatch !== null) {
108
89
  const level = headingMatch[1]?.length ?? 1;
109
90
  const title = headingMatch[2]?.trim() ?? '';
110
91
  const id = generateSectionId(title);
111
- if (inTargetSection) {
112
- // Check if we've reached a heading at the same or higher level
113
- if (level <= targetLevel) {
114
- break; // End of target section
115
- }
92
+ // End section if we hit same or higher level heading
93
+ if (foundSection !== null && level <= targetLevel) {
94
+ break;
116
95
  }
117
96
  // Check if this is the target section
118
- if (id === normalizedId || title.toLowerCase().includes(sectionIdentifier.toLowerCase())) {
119
- inTargetSection = true;
97
+ if (foundSection === null && (id === normalizedId || title.toLowerCase().includes(sectionIdentifier.toLowerCase()))) {
120
98
  targetLevel = level;
121
- foundSection = {
122
- id,
123
- title,
124
- level,
125
- tokenCount: 0 // Will be calculated later
126
- };
99
+ foundSection = { id, title, level, tokenCount: 0 };
127
100
  }
128
101
  }
129
- if (inTargetSection) {
102
+ if (foundSection !== null) {
130
103
  sectionLines.push(line);
131
104
  }
132
105
  }
133
- const sectionContent = sectionLines.join('\n');
134
- // Apply token limit with smart truncation
135
- const truncateResult = truncateToTokenLimit(sectionContent, maxTokens);
136
- if (foundSection) {
106
+ const truncateResult = truncateToTokenLimit(sectionLines.join('\n'), maxTokens);
107
+ if (foundSection !== null) {
137
108
  foundSection.tokenCount = truncateResult.tokenInfo.tokenCount;
138
109
  }
139
110
  return {
@@ -176,7 +147,7 @@ export function truncateToTokenLimit(content, maxTokens = TOKEN_CONFIG.DEFAULT_M
176
147
  if (line.startsWith('```')) {
177
148
  inCodeBlock = !inCodeBlock;
178
149
  }
179
- const lineTokens = estimateTokens(line + '\n');
150
+ const lineTokens = estimateTokens(`${line}\n`);
180
151
  if (runningTokens + lineTokens > effectiveMax) {
181
152
  // Close any open code block
182
153
  if (inCodeBlock) {
@@ -216,12 +187,97 @@ export function truncateToTokenLimit(content, maxTokens = TOKEN_CONFIG.DEFAULT_M
216
187
  remainingSections
217
188
  };
218
189
  }
190
+ /**
191
+ * Extract summary from Markdown content
192
+ * Returns the first paragraph and an outline of sections with token estimates
193
+ */
194
+ export function extractSummary(content, title, maxTokens = TOKEN_CONFIG.DEFAULT_MAX_TOKENS) {
195
+ const lines = content.split('\n');
196
+ const sections = extractSections(content);
197
+ const totalTokens = estimateTokens(content);
198
+ // Extract first meaningful paragraph (skip headings, code blocks, and empty lines)
199
+ let summary = '';
200
+ let inParagraph = false;
201
+ let inCodeBlock = false;
202
+ for (const line of lines) {
203
+ // Track code blocks
204
+ if (line.startsWith('```')) {
205
+ inCodeBlock = !inCodeBlock;
206
+ if (inParagraph) {
207
+ break;
208
+ }
209
+ continue;
210
+ }
211
+ // Skip content inside code blocks
212
+ if (inCodeBlock) {
213
+ continue;
214
+ }
215
+ // Skip headings
216
+ if (line.startsWith('#')) {
217
+ if (inParagraph) {
218
+ break;
219
+ }
220
+ continue;
221
+ }
222
+ // Skip empty lines at the start
223
+ if (line.trim() === '' && !inParagraph) {
224
+ continue;
225
+ }
226
+ // Skip list items and other non-paragraph content
227
+ if (line.trim().startsWith('-') || line.trim().startsWith('*') || line.trim().startsWith('|')) {
228
+ if (inParagraph) {
229
+ break;
230
+ }
231
+ continue;
232
+ }
233
+ // Found content
234
+ if (line.trim() !== '') {
235
+ inParagraph = true;
236
+ summary += `${line} `;
237
+ }
238
+ else if (inParagraph) {
239
+ // End of paragraph
240
+ break;
241
+ }
242
+ }
243
+ summary = summary.trim();
244
+ // If no paragraph found, use first 200 chars of content
245
+ if (summary === '') {
246
+ const plainText = content.replace(/^#+\s+.+$/gm, '').replace(/\n+/g, ' ').trim();
247
+ summary = plainText.slice(0, 200) + (plainText.length > 200 ? '...' : '');
248
+ }
249
+ // Estimate read time (assuming 200 words per minute, ~5 chars per word)
250
+ const wordCount = Math.ceil(content.length / 5);
251
+ const estimatedReadTime = Math.max(1, Math.ceil(wordCount / 200));
252
+ // Build the summary output
253
+ let output = `# ${title}\n\n`;
254
+ output += `## Summary\n\n${summary}\n\n`;
255
+ output += `## Article Outline (${sections.length} sections)\n\n`;
256
+ for (const section of sections) {
257
+ const indent = ' '.repeat(Math.max(0, section.level - 1));
258
+ output += `${indent}- ${section.title} (~${section.tokenCount} tokens)\n`;
259
+ }
260
+ output += `\n*Estimated read time: ${estimatedReadTime} min | Total: ${totalTokens.toLocaleString()} tokens*\n`;
261
+ const outputTokens = estimateTokens(output);
262
+ return {
263
+ title,
264
+ summary,
265
+ outline: sections,
266
+ totalTokens,
267
+ estimatedReadTime,
268
+ tokenInfo: {
269
+ tokenCount: outputTokens,
270
+ truncated: false,
271
+ maxTokens
272
+ }
273
+ };
274
+ }
219
275
  /**
220
276
  * Calculate pagination info
221
277
  */
222
278
  export function calculatePagination(totalItems, page, pageSize) {
223
279
  const totalPages = Math.ceil(totalItems / pageSize);
224
- const normalizedPage = Math.min(Math.max(1, page), totalPages || 1);
280
+ const normalizedPage = Math.min(Math.max(1, page), Math.max(totalPages, 1));
225
281
  return {
226
282
  page: normalizedPage,
227
283
  pageSize,
@@ -1 +1 @@
1
- {"version":3,"file":"tokenizer.js","sourceRoot":"","sources":["../../src/services/tokenizer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tokenizer.js","sourceRoot":"","sources":["../../src/services/tokenizer.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,6 @@
2
2
  * jamf_docs_get_article tool
3
3
  * Retrieve the full content of a specific Jamf documentation article.
4
4
  */
5
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
5
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
6
6
  export declare function registerGetArticleTool(server: McpServer): void;
7
7
  //# sourceMappingURL=get-article.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-article.d.ts","sourceRoot":"","sources":["../../src/tools/get-article.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA6DpE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiJ9D"}
1
+ {"version":3,"file":"get-article.d.ts","sourceRoot":"","sources":["../../src/tools/get-article.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAsNzE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiH9D"}