@get-technology-inc/jamf-docs-mcp-server 4.0.7 → 4.1.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.
- package/dist/core/services/article-service.d.ts.map +1 -1
- package/dist/core/services/article-service.js +19 -2
- package/dist/core/services/article-service.js.map +1 -1
- package/dist/core/services/ft-internal-link.d.ts +27 -0
- package/dist/core/services/ft-internal-link.d.ts.map +1 -1
- package/dist/core/services/ft-internal-link.js +35 -9
- package/dist/core/services/ft-internal-link.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"article-service.d.ts","sourceRoot":"","sources":["../../../src/core/services/article-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAmC,MAAM,aAAa,CAAC;AAC5G,OAAO,EAA6B,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"article-service.d.ts","sourceRoot":"","sources":["../../../src/core/services/article-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAmC,MAAM,aAAa,CAAC;AAC5G,OAAO,EAA6B,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAQzF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAsCrD;;;GAGG;AACH,MAAM,WAAW,yBAA0B,SAAQ,mBAAmB;IACpE,oFAAoF;IACpF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AAED,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,kBAAkB,CAAC,CAyG7B;AAID;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,kBAAkB,EACzB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CAwD7B"}
|
|
@@ -11,7 +11,7 @@ import { TOKEN_CONFIG } from '../constants.js';
|
|
|
11
11
|
import { buildDisplayUrl, parseUrl } from './topic-resolver.js';
|
|
12
12
|
import { fetchTopicContent, fetchTopicMetadata } from './ft-client.js';
|
|
13
13
|
import { parseArticle } from './content-parser.js';
|
|
14
|
-
import { buildInternalLinkResolver, collectInternalLinkMapIds, } from './ft-internal-link.js';
|
|
14
|
+
import { buildInternalLinkResolver, collectInternalLinkMapIds, fetchTopicAncestors, } from './ft-internal-link.js';
|
|
15
15
|
import { getMetaValue, bundleStemToDisplayName, FT_META } from '../utils/ft-metadata.js';
|
|
16
16
|
import { extractSections, extractSummary, extractSection, truncateToTokenLimit, createTokenInfo, } from './tokenizer.js';
|
|
17
17
|
export async function fetchArticleFromFt(cache, mapId, contentId, articleUrl, options) {
|
|
@@ -40,11 +40,28 @@ export async function fetchArticleFromFt(cache, mapId, contentId, articleUrl, op
|
|
|
40
40
|
includeRelated: true,
|
|
41
41
|
resolveInternalLink,
|
|
42
42
|
});
|
|
43
|
+
// The `/content` fragment is the article body, and a breadcrumb belongs to
|
|
44
|
+
// the reader shell around it, so `parsed.breadcrumb` is empty for every FT
|
|
45
|
+
// topic — the selector has nothing to match. The hierarchy exists only in
|
|
46
|
+
// the map's TOC, which is already fetched and cached here for internal
|
|
47
|
+
// links, so the fallback is a second lookup rather than a second fetch.
|
|
48
|
+
// Still a fallback and not a replacement: a page served as full HTML does
|
|
49
|
+
// have a breadcrumb in its markup, and that one is what the site itself
|
|
50
|
+
// renders.
|
|
51
|
+
const breadcrumb = parsed.breadcrumb.length > 0
|
|
52
|
+
? parsed.breadcrumb
|
|
53
|
+
: await fetchTopicAncestors({
|
|
54
|
+
cache,
|
|
55
|
+
mapId,
|
|
56
|
+
contentId,
|
|
57
|
+
ttl: options.cacheTtl,
|
|
58
|
+
logger: options.logger,
|
|
59
|
+
});
|
|
43
60
|
// Metadata title is authoritative; parseArticle h1 is only a fallback
|
|
44
61
|
const title = (topicMeta.title !== undefined && topicMeta.title !== '')
|
|
45
62
|
? topicMeta.title
|
|
46
63
|
: parsed.title;
|
|
47
|
-
cached = { title, parsed, displayUrl, product, version };
|
|
64
|
+
cached = { title, parsed: { ...parsed, breadcrumb }, displayUrl, product, version };
|
|
48
65
|
await cache.set(cacheKey, cached, options.cacheTtl);
|
|
49
66
|
}
|
|
50
67
|
const { title, parsed, displayUrl, product, version } = cached;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"article-service.js","sourceRoot":"","sources":["../../../src/core/services/article-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,eAAe,EAAE,QAAQ,EAA2B,MAAM,qBAAqB,CAAC;AACzF,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,YAAY,EAA6B,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EACL,yBAAyB,EACzB,yBAAyB,
|
|
1
|
+
{"version":3,"file":"article-service.js","sourceRoot":"","sources":["../../../src/core/services/article-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -71,4 +71,31 @@ export interface InternalLinkResolverOptions {
|
|
|
71
71
|
* on every article: topics without internal links pay nothing.
|
|
72
72
|
*/
|
|
73
73
|
export declare function buildInternalLinkResolver(options: InternalLinkResolverOptions): Promise<InternalLinkResolver>;
|
|
74
|
+
/**
|
|
75
|
+
* Where a topic sits in its map, nearest root first, excluding the topic
|
|
76
|
+
* itself. Empty when the map's TOC will not load or does not list the topic.
|
|
77
|
+
*
|
|
78
|
+
* This exists because the breadcrumb is not in the topic payload. FT's
|
|
79
|
+
* `/content` fragment is the article body only — a breadcrumb is part of the
|
|
80
|
+
* reader shell — and the topic metadata endpoint has no ancestry field either
|
|
81
|
+
* (it has `dita:topicPath`, which is a source-file path, not the published
|
|
82
|
+
* hierarchy, and does not match what a reader sees). The map's TOC is the one
|
|
83
|
+
* place the hierarchy exists, and it is already fetched and cached for
|
|
84
|
+
* internal-link resolution, so this is a second lookup over the same index
|
|
85
|
+
* rather than a second fetch.
|
|
86
|
+
*
|
|
87
|
+
* Failure is an empty chain, never a partial or invented one: a breadcrumb
|
|
88
|
+
* missing its middle would read as a real path to somewhere that does not
|
|
89
|
+
* exist.
|
|
90
|
+
*/
|
|
91
|
+
export interface TopicAncestryOptions {
|
|
92
|
+
cache: CacheProvider;
|
|
93
|
+
/** The topic's own map — ancestry is only defined within it. */
|
|
94
|
+
mapId: string;
|
|
95
|
+
contentId: string;
|
|
96
|
+
/** TTL for the cached index; `undefined` uses the cache default. */
|
|
97
|
+
ttl?: number | undefined;
|
|
98
|
+
logger?: Logger | undefined;
|
|
99
|
+
}
|
|
100
|
+
export declare function fetchTopicAncestors(options: TopicAncestryOptions): Promise<string[]>;
|
|
74
101
|
//# sourceMappingURL=ft-internal-link.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ft-internal-link.d.ts","sourceRoot":"","sources":["../../../src/core/services/ft-internal-link.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAKrD,uEAAuE;AACvE,eAAO,MAAM,mBAAmB,qBAAqB,CAAC;AAEtD;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,kDACoB,CAAC;AAExD;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;AAExF,mEAAmE;AACnE,eAAO,MAAM,iBAAiB,EAAE,oBAAsC,CAAC;AAQvE;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAiBhE;
|
|
1
|
+
{"version":3,"file":"ft-internal-link.d.ts","sourceRoot":"","sources":["../../../src/core/services/ft-internal-link.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAKrD,uEAAuE;AACvE,eAAO,MAAM,mBAAmB,qBAAqB,CAAC;AAEtD;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,kDACoB,CAAC;AAExD;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;AAExF,mEAAmE;AACnE,eAAO,MAAM,iBAAiB,EAAE,oBAAsC,CAAC;AAQvE;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAiBhE;AAuED,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,aAAa,CAAC;IACrB,sEAAsE;IACtE,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,oEAAoE;IACpE,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AAED;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,oBAAoB,CAAC,CA0B/B;AAID;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,aAAa,CAAC;IACrB,gEAAgE;IAChE,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,MAAM,EAAE,CAAC,CAanB"}
|
|
@@ -72,28 +72,41 @@ export function collectInternalLinkMapIds(html) {
|
|
|
72
72
|
}
|
|
73
73
|
return [...mapIds];
|
|
74
74
|
}
|
|
75
|
-
|
|
76
|
-
|
|
75
|
+
// v2: entries under v1 hold only the tocId map, so they would answer an
|
|
76
|
+
// ancestry lookup with nothing and look like a topic that has no parents.
|
|
77
|
+
const TOC_INDEX_CACHE_PREFIX = 'ft-tocindex:v2:';
|
|
78
|
+
function indexTocNodes(nodes, into, ancestors) {
|
|
77
79
|
for (const node of nodes) {
|
|
78
80
|
// Both fields are declared required, but `FtTocNode` is a bare cast over
|
|
79
81
|
// `response.json()` with no runtime validation behind it — the same reason
|
|
80
82
|
// `title` and `children` are optional on that type. An empty value here
|
|
81
83
|
// would index a link to nowhere, so it is skipped rather than stored.
|
|
82
84
|
if (node.tocId !== '' && node.prettyUrl !== '') {
|
|
83
|
-
into[node.tocId] = buildDisplayUrl(node.prettyUrl);
|
|
85
|
+
into.urlByTocId[node.tocId] = buildDisplayUrl(node.prettyUrl);
|
|
84
86
|
}
|
|
87
|
+
// A node with an empty contentId is a grouping heading: it still
|
|
88
|
+
// contributes a title to its children's chain, but nothing addresses it as
|
|
89
|
+
// a topic. Checked the same way as `tocId`/`prettyUrl` above, for the same
|
|
90
|
+
// reason — `FtTocNode` is a bare cast over `response.json()`.
|
|
91
|
+
if (node.contentId !== '' && ancestors.length > 0) {
|
|
92
|
+
into.ancestorsByContentId[node.contentId] = [...ancestors];
|
|
93
|
+
}
|
|
94
|
+
// A titleless node would put a blank rung in every descendant's chain, so
|
|
95
|
+
// it is skipped as an ancestor while its children are still walked.
|
|
96
|
+
const title = node.title ?? '';
|
|
97
|
+
const childAncestors = title === '' ? ancestors : [...ancestors, title];
|
|
85
98
|
// Absent `children` means a leaf, the same as an empty list.
|
|
86
|
-
indexTocNodes(node.children ?? [], into);
|
|
99
|
+
indexTocNodes(node.children ?? [], into, childAncestors);
|
|
87
100
|
}
|
|
88
101
|
}
|
|
89
|
-
async function
|
|
102
|
+
async function loadMapTocIndex(cache, mapId, ttl) {
|
|
90
103
|
const cacheKey = `${TOC_INDEX_CACHE_PREFIX}${mapId}`;
|
|
91
104
|
const cached = await cache.get(cacheKey);
|
|
92
105
|
if (cached !== null) {
|
|
93
106
|
return cached;
|
|
94
107
|
}
|
|
95
|
-
const index = {};
|
|
96
|
-
indexTocNodes(await fetchMapToc(mapId), index);
|
|
108
|
+
const index = { urlByTocId: {}, ancestorsByContentId: {} };
|
|
109
|
+
indexTocNodes(await fetchMapToc(mapId), index, []);
|
|
97
110
|
await cache.set(cacheKey, index, ttl);
|
|
98
111
|
return index;
|
|
99
112
|
}
|
|
@@ -111,7 +124,7 @@ export async function buildInternalLinkResolver(options) {
|
|
|
111
124
|
const indexes = new Map();
|
|
112
125
|
await Promise.all(mapIds.map(async (mapId) => {
|
|
113
126
|
try {
|
|
114
|
-
indexes.set(mapId, await
|
|
127
|
+
indexes.set(mapId, await loadMapTocIndex(cache, mapId, ttl));
|
|
115
128
|
}
|
|
116
129
|
catch (error) {
|
|
117
130
|
// A TOC that will not load costs its links, not the article. The map
|
|
@@ -122,6 +135,19 @@ export async function buildInternalLinkResolver(options) {
|
|
|
122
135
|
` its internal links will render without a destination: ${reason}`);
|
|
123
136
|
}
|
|
124
137
|
}));
|
|
125
|
-
return (mapId, tocId) => indexes.get(mapId)?.[tocId];
|
|
138
|
+
return (mapId, tocId) => indexes.get(mapId)?.urlByTocId[tocId];
|
|
139
|
+
}
|
|
140
|
+
export async function fetchTopicAncestors(options) {
|
|
141
|
+
const { cache, mapId, contentId, ttl, logger } = options;
|
|
142
|
+
try {
|
|
143
|
+
const index = await loadMapTocIndex(cache, mapId, ttl);
|
|
144
|
+
return index.ancestorsByContentId[contentId] ?? [];
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
148
|
+
logger?.warning(`ft-internal-link: TOC index unavailable for map ${mapId},` +
|
|
149
|
+
` this article will have no breadcrumb: ${reason}`);
|
|
150
|
+
return [];
|
|
151
|
+
}
|
|
126
152
|
}
|
|
127
153
|
//# sourceMappingURL=ft-internal-link.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ft-internal-link.js","sourceRoot":"","sources":["../../../src/core/services/ft-internal-link.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAKtD,kEAAkE;AAElE,uEAAuE;AACvE,MAAM,CAAC,MAAM,mBAAmB,GAAG,kBAAkB,CAAC;AAEtD;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GACjC,QAAQ,mBAAmB,0BAA0B,CAAC;AAQxD,mEAAmE;AACnE,MAAM,CAAC,MAAM,iBAAiB,GAAyB,GAAG,EAAE,CAAC,SAAS,CAAC;AAEvE,kEAAkE;AAElE,MAAM,WAAW,GAAG,kBAAkB,CAAC;AACvC,MAAM,cAAc,GAAG,qCAAqC,CAAC;AAC7D,MAAM,cAAc,GAAG,qCAAqC,CAAC;AAE7D;;;;;;;;GAQG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAAY;IACpD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACxC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/C,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;YAC5E,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;AACrB,CAAC;
|
|
1
|
+
{"version":3,"file":"ft-internal-link.js","sourceRoot":"","sources":["../../../src/core/services/ft-internal-link.ts"],"names":[],"mappings":"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"}
|