@get-technology-inc/jamf-docs-mcp-server 1.1.0 → 1.3.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 (94) hide show
  1. package/README.md +233 -21
  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 +125 -1
  7. package/dist/constants.d.ts.map +1 -1
  8. package/dist/constants.js +187 -14
  9. package/dist/constants.js.map +1 -1
  10. package/dist/index.js +43 -7
  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.map +1 -1
  29. package/dist/resources/index.js +78 -2
  30. package/dist/resources/index.js.map +1 -1
  31. package/dist/schemas/index.d.ts +10 -7
  32. package/dist/schemas/index.d.ts.map +1 -1
  33. package/dist/schemas/index.js +18 -16
  34. package/dist/schemas/index.js.map +1 -1
  35. package/dist/schemas/output.d.ts +78 -0
  36. package/dist/schemas/output.d.ts.map +1 -0
  37. package/dist/schemas/output.js +78 -0
  38. package/dist/schemas/output.js.map +1 -0
  39. package/dist/services/cache.d.ts +37 -3
  40. package/dist/services/cache.d.ts.map +1 -1
  41. package/dist/services/cache.js +139 -15
  42. package/dist/services/cache.js.map +1 -1
  43. package/dist/services/metadata.d.ts +4 -0
  44. package/dist/services/metadata.d.ts.map +1 -1
  45. package/dist/services/metadata.js +52 -9
  46. package/dist/services/metadata.js.map +1 -1
  47. package/dist/services/scraper.d.ts +9 -1
  48. package/dist/services/scraper.d.ts.map +1 -1
  49. package/dist/services/scraper.js +171 -20
  50. package/dist/services/scraper.js.map +1 -1
  51. package/dist/services/tokenizer.d.ts +5 -0
  52. package/dist/services/tokenizer.d.ts.map +1 -1
  53. package/dist/services/tokenizer.js +20 -5
  54. package/dist/services/tokenizer.js.map +1 -1
  55. package/dist/tools/get-article.d.ts.map +1 -1
  56. package/dist/tools/get-article.js +37 -11
  57. package/dist/tools/get-article.js.map +1 -1
  58. package/dist/tools/get-toc.d.ts.map +1 -1
  59. package/dist/tools/get-toc.js +54 -10
  60. package/dist/tools/get-toc.js.map +1 -1
  61. package/dist/tools/list-products.d.ts.map +1 -1
  62. package/dist/tools/list-products.js +34 -15
  63. package/dist/tools/list-products.js.map +1 -1
  64. package/dist/tools/search.d.ts.map +1 -1
  65. package/dist/tools/search.js +83 -22
  66. package/dist/tools/search.js.map +1 -1
  67. package/dist/transport/http.d.ts +12 -0
  68. package/dist/transport/http.d.ts.map +1 -0
  69. package/dist/transport/http.js +297 -0
  70. package/dist/transport/http.js.map +1 -0
  71. package/dist/transport/index.d.ts +13 -0
  72. package/dist/transport/index.d.ts.map +1 -0
  73. package/dist/transport/index.js +40 -0
  74. package/dist/transport/index.js.map +1 -0
  75. package/dist/types.d.ts +30 -9
  76. package/dist/types.d.ts.map +1 -1
  77. package/dist/types.js.map +1 -1
  78. package/dist/utils/doc-type.d.ts +9 -0
  79. package/dist/utils/doc-type.d.ts.map +1 -0
  80. package/dist/utils/doc-type.js +16 -0
  81. package/dist/utils/doc-type.js.map +1 -0
  82. package/dist/utils/progress.d.ts +13 -0
  83. package/dist/utils/progress.d.ts.map +1 -0
  84. package/dist/utils/progress.js +18 -0
  85. package/dist/utils/progress.js.map +1 -0
  86. package/dist/utils/sanitize.d.ts +30 -0
  87. package/dist/utils/sanitize.d.ts.map +1 -0
  88. package/dist/utils/sanitize.js +57 -0
  89. package/dist/utils/sanitize.js.map +1 -0
  90. package/dist/utils/url.d.ts +11 -0
  91. package/dist/utils/url.d.ts.map +1 -0
  92. package/dist/utils/url.js +23 -0
  93. package/dist/utils/url.js.map +1 -0
  94. package/package.json +11 -4
@@ -5,7 +5,28 @@
5
5
  * without needing to call tools. Data is fetched from the API
6
6
  * with fallback to static constants.
7
7
  */
8
- import { getProductsResourceData, getTopicsResourceData } from '../services/metadata.js';
8
+ import { ResourceTemplate } from '@modelcontextprotocol/sdk/server/mcp.js';
9
+ import { JAMF_PRODUCTS } from '../constants.js';
10
+ import { getProductsResourceData, getTopicsResourceData, getAvailableVersions } from '../services/metadata.js';
11
+ import { fetchTableOfContents } from '../services/scraper.js';
12
+ import { completeProduct } from '../completions.js';
13
+ function validateProductId(productId, uri) {
14
+ const productIdStr = String(productId);
15
+ if (productIdStr in JAMF_PRODUCTS) {
16
+ return { valid: true, id: productIdStr };
17
+ }
18
+ const validIds = Object.keys(JAMF_PRODUCTS).join(', ');
19
+ return {
20
+ valid: false,
21
+ errorResponse: {
22
+ contents: [{
23
+ uri: uri.href,
24
+ mimeType: 'text/plain',
25
+ text: `Invalid product ID: "${productIdStr}". Valid products: ${validIds}`,
26
+ }],
27
+ },
28
+ };
29
+ }
9
30
  /**
10
31
  * Register all MCP resources
11
32
  */
@@ -40,6 +61,61 @@ export function registerResources(server) {
40
61
  }]
41
62
  };
42
63
  });
43
- console.error('Registered resources: jamf://products, jamf://topics');
64
+ // Resource template: Product-specific TOC
65
+ server.registerResource('product-toc', new ResourceTemplate('jamf://products/{productId}/toc', {
66
+ list: undefined,
67
+ complete: { productId: completeProduct },
68
+ }), {
69
+ title: 'Product Table of Contents',
70
+ description: 'Table of contents for a specific Jamf product documentation',
71
+ mimeType: 'application/json',
72
+ }, async (uri, { productId }) => {
73
+ const validation = validateProductId(productId, uri);
74
+ if (!validation.valid) {
75
+ return validation.errorResponse;
76
+ }
77
+ const tocResult = await fetchTableOfContents(validation.id, 'current', {
78
+ maxTokens: 20000,
79
+ });
80
+ return {
81
+ contents: [{
82
+ uri: uri.href,
83
+ mimeType: 'application/json',
84
+ text: JSON.stringify({
85
+ product: JAMF_PRODUCTS[validation.id].name,
86
+ totalEntries: tocResult.pagination.totalItems,
87
+ toc: tocResult.toc,
88
+ }, null, 2),
89
+ }],
90
+ };
91
+ });
92
+ // Resource template: Product-specific versions
93
+ server.registerResource('product-versions', new ResourceTemplate('jamf://products/{productId}/versions', {
94
+ list: undefined,
95
+ complete: { productId: completeProduct },
96
+ }), {
97
+ title: 'Product Documentation Versions',
98
+ description: 'Available documentation versions for a specific Jamf product',
99
+ mimeType: 'application/json',
100
+ }, async (uri, { productId }) => {
101
+ const validation = validateProductId(productId, uri);
102
+ if (!validation.valid) {
103
+ return validation.errorResponse;
104
+ }
105
+ const versions = await getAvailableVersions(validation.id);
106
+ return {
107
+ contents: [{
108
+ uri: uri.href,
109
+ mimeType: 'application/json',
110
+ text: JSON.stringify({
111
+ product: JAMF_PRODUCTS[validation.id].name,
112
+ productId: validation.id,
113
+ versions,
114
+ latestVersion: JAMF_PRODUCTS[validation.id].latestVersion,
115
+ }, null, 2),
116
+ }],
117
+ };
118
+ });
119
+ console.error('Registered resources: jamf://products, jamf://topics,', 'jamf://products/{productId}/toc, jamf://products/{productId}/versions');
44
120
  }
45
121
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACtB,MAAM,yBAAyB,CAAC;AAEjC;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAiB;IACjD,4CAA4C;IAC5C,MAAM,CAAC,gBAAgB,CACrB,UAAU,EACV,iBAAiB,EACjB;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,uKAAuK;QACpL,QAAQ,EAAE,kBAAkB;KAC7B,EACD,KAAK,IAAI,EAAE;QACT,MAAM,IAAI,GAAG,MAAM,uBAAuB,EAAE,CAAC;QAC7C,OAAO;YACL,QAAQ,EAAE,CAAC;oBACT,GAAG,EAAE,iBAAiB;oBACtB,QAAQ,EAAE,kBAAkB;oBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;iBACpC,CAAC;SACH,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,0CAA0C;IAC1C,MAAM,CAAC,gBAAgB,CACrB,QAAQ,EACR,eAAe,EACf;QACE,KAAK,EAAE,2BAA2B;QAClC,WAAW,EAAE,iHAAiH;QAC9H,QAAQ,EAAE,kBAAkB;KAC7B,EACD,KAAK,IAAI,EAAE;QACT,MAAM,IAAI,GAAG,MAAM,qBAAqB,EAAE,CAAC;QAC3C,OAAO;YACL,QAAQ,EAAE,CAAC;oBACT,GAAG,EAAE,eAAe;oBACpB,QAAQ,EAAE,kBAAkB;oBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;iBACpC,CAAC;SACH,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;AACxE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"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"}
@@ -17,13 +17,16 @@ export type ListProductsInput = z.infer<typeof ListProductsInputSchema>;
17
17
  */
18
18
  export declare const SearchInputSchema: z.ZodObject<{
19
19
  query: z.ZodString;
20
- product: z.ZodOptional<z.ZodEnum<{
20
+ product: import("@modelcontextprotocol/sdk/server/completable.js").CompletableSchema<z.ZodOptional<z.ZodEnum<{
21
21
  [x: string]: string;
22
- }>>;
23
- topic: z.ZodOptional<z.ZodEnum<{
22
+ }>>>;
23
+ topic: import("@modelcontextprotocol/sdk/server/completable.js").CompletableSchema<z.ZodOptional<z.ZodEnum<{
24
+ [x: string]: string;
25
+ }>>>;
26
+ version: import("@modelcontextprotocol/sdk/server/completable.js").CompletableSchema<z.ZodOptional<z.ZodString>>;
27
+ docType: z.ZodOptional<z.ZodEnum<{
24
28
  [x: string]: string;
25
29
  }>>;
26
- version: z.ZodOptional<z.ZodString>;
27
30
  limit: z.ZodDefault<z.ZodNumber>;
28
31
  page: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
29
32
  maxTokens: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
@@ -48,10 +51,10 @@ export type GetArticleInput = z.infer<typeof GetArticleInputSchema>;
48
51
  * Schema for jamf_docs_get_toc
49
52
  */
50
53
  export declare const GetTocInputSchema: z.ZodObject<{
51
- product: z.ZodEnum<{
54
+ product: import("@modelcontextprotocol/sdk/server/completable.js").CompletableSchema<z.ZodEnum<{
52
55
  [x: string]: string;
53
- }>;
54
- version: z.ZodOptional<z.ZodString>;
56
+ }>>;
57
+ version: import("@modelcontextprotocol/sdk/server/completable.js").CompletableSchema<z.ZodOptional<z.ZodString>>;
55
58
  page: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
56
59
  maxTokens: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
57
60
  outputMode: z.ZodDefault<z.ZodEnum<typeof OutputMode>>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,cAAc,EACd,UAAU,EAMX,MAAM,iBAAiB,CAAC;AA8BzB;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;kBAYzB,CAAC;AAEZ,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;kBAwCnB,CAAC;AAEZ,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;kBAgCvB,CAAC;AAEZ,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;kBAuBnB,CAAC;AAEZ,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,cAAc,EACd,UAAU,EAOX,MAAM,iBAAiB,CAAC;AA0BzB;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;kBAYzB,CAAC;AAEZ,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;kBAqDnB,CAAC;AAEZ,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;kBAgCvB,CAAC;AAEZ,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;kBA6BnB,CAAC;AAEZ,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
@@ -2,11 +2,10 @@
2
2
  * Zod schemas for input validation
3
3
  */
4
4
  import { z } from 'zod';
5
- import { ResponseFormat, OutputMode, JAMF_PRODUCTS, CONTENT_LIMITS, TOKEN_CONFIG, PAGINATION_CONFIG, JAMF_TOPICS } from '../constants.js';
6
- // Valid product IDs
7
- const productIds = Object.keys(JAMF_PRODUCTS);
8
- // Valid topic IDs
9
- const topicIds = Object.keys(JAMF_TOPICS);
5
+ import { completable } from '@modelcontextprotocol/sdk/server/completable.js';
6
+ import { ResponseFormat, OutputMode, CONTENT_LIMITS, TOKEN_CONFIG, PAGINATION_CONFIG, PRODUCT_IDS, TOPIC_IDS, DOC_TYPE_IDS } from '../constants.js';
7
+ import { completeProduct, completeTopic, completeVersion } from '../completions.js';
8
+ import { isAllowedHostname } from '../utils/url.js';
10
9
  // Response format enum
11
10
  const ResponseFormatSchema = z.nativeEnum(ResponseFormat);
12
11
  // Output mode enum
@@ -47,15 +46,18 @@ export const SearchInputSchema = z.object({
47
46
  .min(2, 'Query must be at least 2 characters')
48
47
  .max(200, 'Query must not exceed 200 characters')
49
48
  .describe('Search keywords to find in Jamf documentation'),
50
- product: z.enum(productIds)
49
+ product: completable(z.enum(PRODUCT_IDS)
51
50
  .optional()
52
- .describe('Filter by product: jamf-pro, jamf-school, jamf-connect, jamf-protect'),
53
- topic: z.enum(topicIds)
51
+ .describe('Filter by product: jamf-pro, jamf-school, jamf-connect, jamf-protect'), completeProduct),
52
+ topic: completable(z.enum(TOPIC_IDS)
54
53
  .optional()
55
- .describe('Filter by topic: enrollment, profiles, security, inventory, policies, smart-groups, apps, identity, api, network'),
56
- version: z.string()
54
+ .describe('Filter by topic: enrollment, profiles, security, inventory, policies, smart-groups, apps, identity, api, network'), completeTopic),
55
+ version: completable(z.string()
57
56
  .optional()
58
- .describe('Filter by version (e.g., "11.5.0", "10.x")'),
57
+ .describe('Filter by version (e.g., "11.5.0", "10.x")'), completeVersion),
58
+ docType: z.enum(DOC_TYPE_IDS)
59
+ .optional()
60
+ .describe('Filter by document type: documentation, release-notes, install-guide, technical-paper, configuration-guide, training'),
59
61
  limit: z.number()
60
62
  .int()
61
63
  .min(1)
@@ -81,7 +83,7 @@ export const SearchInputSchema = z.object({
81
83
  export const GetArticleInputSchema = z.object({
82
84
  url: z.string()
83
85
  .url('Must be a valid URL')
84
- .refine((url) => url.includes('docs.jamf.com') || url.includes('learn.jamf.com'), 'URL must be from docs.jamf.com or learn.jamf.com')
86
+ .refine((url) => isAllowedHostname(url), 'URL must be from docs.jamf.com or learn.jamf.com')
85
87
  .describe('Full URL of the Jamf documentation article'),
86
88
  section: z.string()
87
89
  .optional()
@@ -106,11 +108,11 @@ export const GetArticleInputSchema = z.object({
106
108
  * Schema for jamf_docs_get_toc
107
109
  */
108
110
  export const GetTocInputSchema = z.object({
109
- product: z.enum(productIds)
110
- .describe('Product ID: jamf-pro, jamf-school, jamf-connect, jamf-protect'),
111
- version: z.string()
111
+ product: completable(z.enum(PRODUCT_IDS)
112
+ .describe('Product ID: jamf-pro, jamf-school, jamf-connect, jamf-protect'), completeProduct),
113
+ version: completable(z.string()
112
114
  .optional()
113
- .describe('Specific version (defaults to latest)'),
115
+ .describe('Specific version (defaults to latest)'), completeVersion),
114
116
  page: PageSchema
115
117
  .optional()
116
118
  .describe(`Page number for pagination (1-${PAGINATION_CONFIG.MAX_PAGE}, default: 1)`),
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Zod output schemas for structured tool output (outputSchema + structuredContent)
3
+ */
4
+ import { z } from 'zod';
5
+ export declare const ProductListOutputSchema: z.ZodObject<{
6
+ products: z.ZodArray<z.ZodObject<{
7
+ id: z.ZodString;
8
+ name: z.ZodString;
9
+ description: z.ZodString;
10
+ currentVersion: z.ZodString;
11
+ availableVersions: z.ZodArray<z.ZodString>;
12
+ hasContent: z.ZodBoolean;
13
+ }, z.core.$strip>>;
14
+ topics: z.ZodArray<z.ZodObject<{
15
+ id: z.ZodString;
16
+ name: z.ZodString;
17
+ keywords: z.ZodArray<z.ZodString>;
18
+ }, z.core.$strip>>;
19
+ }, z.core.$strip>;
20
+ export declare const SearchOutputSchema: z.ZodObject<{
21
+ query: z.ZodString;
22
+ totalResults: z.ZodNumber;
23
+ page: z.ZodNumber;
24
+ totalPages: z.ZodNumber;
25
+ hasMore: z.ZodBoolean;
26
+ results: z.ZodArray<z.ZodObject<{
27
+ title: z.ZodString;
28
+ url: z.ZodString;
29
+ snippet: z.ZodString;
30
+ product: z.ZodString;
31
+ version: z.ZodOptional<z.ZodString>;
32
+ docType: z.ZodOptional<z.ZodString>;
33
+ }, z.core.$strip>>;
34
+ suggestions: z.ZodOptional<z.ZodArray<z.ZodString>>;
35
+ filterRelaxation: z.ZodOptional<z.ZodObject<{
36
+ removed: z.ZodArray<z.ZodString>;
37
+ original: z.ZodRecord<z.ZodString, z.ZodString>;
38
+ message: z.ZodString;
39
+ }, z.core.$strip>>;
40
+ versionNote: z.ZodOptional<z.ZodString>;
41
+ relevanceNote: z.ZodOptional<z.ZodString>;
42
+ truncatedContent: z.ZodOptional<z.ZodObject<{
43
+ omittedCount: z.ZodNumber;
44
+ omittedItems: z.ZodArray<z.ZodObject<{
45
+ title: z.ZodString;
46
+ estimatedTokens: z.ZodNumber;
47
+ }, z.core.$strip>>;
48
+ }, z.core.$strip>>;
49
+ }, z.core.$strip>;
50
+ export declare const ArticleOutputSchema: z.ZodObject<{
51
+ title: z.ZodString;
52
+ url: z.ZodString;
53
+ content: z.ZodString;
54
+ product: z.ZodOptional<z.ZodString>;
55
+ version: z.ZodOptional<z.ZodString>;
56
+ lastUpdated: z.ZodOptional<z.ZodString>;
57
+ breadcrumb: z.ZodOptional<z.ZodArray<z.ZodString>>;
58
+ sections: z.ZodArray<z.ZodObject<{
59
+ id: z.ZodString;
60
+ title: z.ZodString;
61
+ level: z.ZodNumber;
62
+ tokenCount: z.ZodNumber;
63
+ }, z.core.$strip>>;
64
+ truncated: z.ZodBoolean;
65
+ }, z.core.$strip>;
66
+ export declare const TocOutputSchema: z.ZodObject<{
67
+ product: z.ZodString;
68
+ version: z.ZodString;
69
+ totalEntries: z.ZodNumber;
70
+ page: z.ZodNumber;
71
+ totalPages: z.ZodNumber;
72
+ hasMore: z.ZodBoolean;
73
+ entries: z.ZodArray<z.ZodObject<{
74
+ title: z.ZodString;
75
+ url: z.ZodString;
76
+ }, z.core.$strip>>;
77
+ }, z.core.$strip>;
78
+ //# sourceMappingURL=output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/schemas/output.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;iBAclC,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA6B7B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;iBAe9B,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;iBAW1B,CAAC"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Zod output schemas for structured tool output (outputSchema + structuredContent)
3
+ */
4
+ import { z } from 'zod';
5
+ export const ProductListOutputSchema = z.object({
6
+ products: z.array(z.object({
7
+ id: z.string(),
8
+ name: z.string(),
9
+ description: z.string(),
10
+ currentVersion: z.string(),
11
+ availableVersions: z.array(z.string()),
12
+ hasContent: z.boolean(),
13
+ })),
14
+ topics: z.array(z.object({
15
+ id: z.string(),
16
+ name: z.string(),
17
+ keywords: z.array(z.string()),
18
+ })),
19
+ });
20
+ export const SearchOutputSchema = z.object({
21
+ query: z.string(),
22
+ totalResults: z.number(),
23
+ page: z.number(),
24
+ totalPages: z.number(),
25
+ hasMore: z.boolean(),
26
+ results: z.array(z.object({
27
+ title: z.string(),
28
+ url: z.string(),
29
+ snippet: z.string(),
30
+ product: z.string(),
31
+ version: z.string().optional(),
32
+ docType: z.string().optional(),
33
+ })),
34
+ suggestions: z.array(z.string()).optional(),
35
+ filterRelaxation: z.object({
36
+ removed: z.array(z.string()),
37
+ original: z.record(z.string(), z.string()),
38
+ message: z.string(),
39
+ }).optional(),
40
+ versionNote: z.string().optional(),
41
+ relevanceNote: z.string().optional(),
42
+ truncatedContent: z.object({
43
+ omittedCount: z.number(),
44
+ omittedItems: z.array(z.object({
45
+ title: z.string(),
46
+ estimatedTokens: z.number(),
47
+ })),
48
+ }).optional(),
49
+ });
50
+ export const ArticleOutputSchema = z.object({
51
+ title: z.string(),
52
+ url: z.string(),
53
+ content: z.string(),
54
+ product: z.string().optional(),
55
+ version: z.string().optional(),
56
+ lastUpdated: z.string().optional(),
57
+ breadcrumb: z.array(z.string()).optional(),
58
+ sections: z.array(z.object({
59
+ id: z.string(),
60
+ title: z.string(),
61
+ level: z.number(),
62
+ tokenCount: z.number(),
63
+ })),
64
+ truncated: z.boolean(),
65
+ });
66
+ export const TocOutputSchema = z.object({
67
+ product: z.string(),
68
+ version: z.string(),
69
+ totalEntries: z.number(),
70
+ page: z.number(),
71
+ totalPages: z.number(),
72
+ hasMore: z.boolean(),
73
+ entries: z.array(z.object({
74
+ title: z.string(),
75
+ url: z.string(),
76
+ })),
77
+ });
78
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/schemas/output.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACzB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;QACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;QACvB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;QAC1B,iBAAiB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACtC,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE;KACxB,CAAC,CAAC;IACH,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACvB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;QACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KAC9B,CAAC,CAAC;CACJ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACxB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;QACf,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC9B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC/B,CAAC,CAAC;IACH,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC3C,gBAAgB,EAAE,CAAC,CAAC,MAAM,CAAC;QACzB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC5B,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;KACpB,CAAC,CAAC,QAAQ,EAAE;IACb,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,gBAAgB,EAAE,CAAC,CAAC,MAAM,CAAC;QACzB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;QACxB,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;YAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;YACjB,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;SAC5B,CAAC,CAAC;KACJ,CAAC,CAAC,QAAQ,EAAE;CACd,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC1C,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACzB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;QACd,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;KACvB,CAAC,CAAC;IACH,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;CACvB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACxB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;KAChB,CAAC,CAAC;CACJ,CAAC,CAAC"}
@@ -1,22 +1,56 @@
1
1
  /**
2
2
  * Caching service for Jamf documentation
3
3
  *
4
- * Provides file-based caching with TTL support
4
+ * Provides file-based caching with TTL support and LRU memory eviction
5
5
  */
6
+ import { z } from 'zod';
6
7
  /**
7
- * File-based cache implementation
8
+ * Zod schema for validating cache entries read from disk
9
+ */
10
+ export declare const CacheEntrySchema: z.ZodObject<{
11
+ data: z.ZodUnknown;
12
+ timestamp: z.ZodNumber;
13
+ ttl: z.ZodNumber;
14
+ }, z.core.$strip>;
15
+ /**
16
+ * File-based cache implementation with LRU-bounded memory cache
8
17
  */
9
18
  declare class FileCache {
10
19
  private readonly cacheDir;
20
+ private readonly maxEntries;
11
21
  private readonly memoryCache;
12
- constructor(cacheDir?: string);
22
+ private readonly lruMap;
23
+ private readonly lruHead;
24
+ private readonly lruTail;
25
+ private dirCreated;
26
+ constructor(cacheDir?: string, maxEntries?: number);
13
27
  private static getCacheKey;
14
28
  private getCachePath;
15
29
  private ensureCacheDir;
30
+ /**
31
+ * Move a node to the front of the LRU list (most recently used)
32
+ */
33
+ private lruMoveToFront;
34
+ /**
35
+ * Add a key to the LRU list (at front)
36
+ */
37
+ private lruAdd;
38
+ /**
39
+ * Remove a key from the LRU list
40
+ */
41
+ private lruRemove;
42
+ /**
43
+ * Evict the least recently used entry from memory cache
44
+ */
45
+ private lruEvictLeast;
16
46
  /**
17
47
  * Get a value from cache
18
48
  */
19
49
  get<T>(key: string): Promise<T | null>;
50
+ /**
51
+ * Store in memory cache, evicting LRU entry if at capacity
52
+ */
53
+ private memoryCacheSet;
20
54
  /**
21
55
  * Set a value in cache
22
56
  */
@@ -1 +1 @@
1
- {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/services/cache.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH;;GAEG;AACH,cAAM,SAAS;IACb,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA0C;gBAE1D,QAAQ,GAAE,MAAkB;IAIxC,OAAO,CAAC,MAAM,CAAC,WAAW;IAI1B,OAAO,CAAC,YAAY;YAIN,cAAc;IAI5B;;OAEG;IACG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAiC5C;;OAEG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,GAAE,MAAkC,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB7F;;OAEG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAa5B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAwBzF;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;CAmC/B;AAGD,eAAO,MAAM,KAAK,WAAkB,CAAC"}
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/services/cache.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;iBAI3B,CAAC;AAWH;;GAEG;AACH,cAAM,SAAS;IACb,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA0C;IACtE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA8B;IACrD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwD;IAChF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwD;IAChF,OAAO,CAAC,UAAU,CAAS;gBAEf,QAAQ,GAAE,MAAkB,EAAE,UAAU,GAAE,MAA0B;IAOhF,OAAO,CAAC,MAAM,CAAC,WAAW;IAI1B,OAAO,CAAC,YAAY;YAIN,cAAc;IAM5B;;OAEG;IACH,OAAO,CAAC,cAAc;IAWtB;;OAEG;IACH,OAAO,CAAC,MAAM;IAWd;;OAEG;IACH,OAAO,CAAC,SAAS;IAUjB;;OAEG;IACH,OAAO,CAAC,aAAa;IAOrB;;OAEG;IACG,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IA4C5C;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB;;OAEG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,GAAE,MAAkC,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB7F;;OAEG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB5B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAwBzF;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;CAoD/B;AAGD,eAAO,MAAM,KAAK,WAAkB,CAAC"}