@imqueue/mcp
Advanced tools
| import ranker from "./search-ranker.cjs"; | ||
| export type Hit = Parameters<typeof ranker.groupKey>[0]; | ||
| export type RankerRecord = Hit["record"]; | ||
| export type RankerIndex = Parameters<typeof ranker.prepare>[0]; | ||
| export type RankerSectionIndex = Parameters<typeof ranker.prepareSections>[0]; | ||
| export { ranker }; | ||
| /** | ||
| * The feed shape this ranker reads. Compared against every feed it is handed. | ||
| * | ||
| * Records are positional arrays, so a field inserted mid-tuple throws nothing and | ||
| * returns nothing empty — it scores the wrong text, at full confidence. This server | ||
| * makes that worse than it is on the website: the ranker here is PINNED to a commit | ||
| * while the feeds are fetched from the LIVE site, so the two can drift apart without | ||
| * anybody deploying anything. | ||
| */ | ||
| export declare const FEED_V: number; | ||
| /** | ||
| * Fail a feed whose shape this ranker does not read. | ||
| * | ||
| * Throwing beats scoring: a wrong answer that looks right is the failure mode this | ||
| * whole file exists to avoid, and `searchDocs` already has a path for "the feeds are | ||
| * unusable" that degrades to the curated index. | ||
| * | ||
| * A feed with NO version is accepted, once: `v` was added to the feeds in the same | ||
| * change that added it here, and refusing an unversioned feed would mean this server | ||
| * could not read a site that had not deployed yet. That tolerance should be removed | ||
| * when FEED_V next moves. | ||
| */ | ||
| export declare function assertFeedVersion(name: string, feed: { | ||
| v?: number; | ||
| }): void; | ||
| /** The plain text of a section hit, for a result's description. */ | ||
| export declare function sectionText(hit: Hit): string; |
| // The search ranker, and the one place this server touches it. | ||
| // | ||
| // It is not implemented here. It is github.com/imqueue/search-ranker, pinned as a | ||
| // submodule and pinned to the same commit by the imqueue.com repo, so this server and | ||
| // the website's own search box answer a query with the same code. Before the split | ||
| // they did not: on 3,657 agent-shaped queries the website's ranker put a correct | ||
| // result in the top 6 for 99.5% of them against this server's 83.9%, and no query at | ||
| // all was answered by the old ranker and not the new one. The gap was invisible | ||
| // because nothing compared them. | ||
| // | ||
| // THE IMPORT IS STATIC ON PURPOSE. A dynamic import would let a missing or | ||
| // unbundleable ranker turn into a runtime failure inside a tool call — and | ||
| // scripts/smoke.mjs tolerates network failures, so it would be reported as "the docs | ||
| // were unreachable" rather than "this build has no ranker". Static means the module | ||
| // graph is wrong at load: the smoke handshake fails, and so does the Worker bundle. | ||
| // | ||
| // It resolves in all three places from this one specifier because | ||
| // scripts/copy-ranker.mjs writes the file into both src/ and dist/ — see that script | ||
| // for why the extension is .cjs and why the copy is not avoidable. | ||
| import ranker from "./search-ranker.cjs"; | ||
| /** | ||
| * Slot 3 of a section tuple: the section's plain text. | ||
| * | ||
| * A magic number, and it stays one deliberately rather than being imported: the | ||
| * ranker does not export its tuple offsets (they are internals of a file whose other | ||
| * consumer is a browser). What makes it safe is that slots 0–4 come from the FEED, so | ||
| * this offset is part of the shape `FEED_V` versions — move it and | ||
| * `assertFeedVersion` below is what shouts, in the same change. | ||
| */ | ||
| const S_TEXT = 3; | ||
| export { ranker }; | ||
| /** | ||
| * The feed shape this ranker reads. Compared against every feed it is handed. | ||
| * | ||
| * Records are positional arrays, so a field inserted mid-tuple throws nothing and | ||
| * returns nothing empty — it scores the wrong text, at full confidence. This server | ||
| * makes that worse than it is on the website: the ranker here is PINNED to a commit | ||
| * while the feeds are fetched from the LIVE site, so the two can drift apart without | ||
| * anybody deploying anything. | ||
| */ | ||
| export const FEED_V = ranker.FEED_V; | ||
| /** | ||
| * Fail a feed whose shape this ranker does not read. | ||
| * | ||
| * Throwing beats scoring: a wrong answer that looks right is the failure mode this | ||
| * whole file exists to avoid, and `searchDocs` already has a path for "the feeds are | ||
| * unusable" that degrades to the curated index. | ||
| * | ||
| * A feed with NO version is accepted, once: `v` was added to the feeds in the same | ||
| * change that added it here, and refusing an unversioned feed would mean this server | ||
| * could not read a site that had not deployed yet. That tolerance should be removed | ||
| * when FEED_V next moves. | ||
| */ | ||
| export function assertFeedVersion(name, feed) { | ||
| if (feed.v !== undefined && feed.v !== FEED_V) { | ||
| throw new Error(`${name} is feed v${feed.v} but this ranker reads v${FEED_V}. ` | ||
| + "The pinned ranker (vendor/search-ranker) is out of step with the live site — " | ||
| + "update the submodule."); | ||
| } | ||
| } | ||
| /** The plain text of a section hit, for a result's description. */ | ||
| export function sectionText(hit) { | ||
| const text = hit.section?.[S_TEXT]; | ||
| return typeof text === "string" ? text : ""; | ||
| } | ||
| //# sourceMappingURL=ranker.js.map |
| {"version":3,"file":"ranker.js","sourceRoot":"","sources":["../src/ranker.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,EAAE;AACF,kFAAkF;AAClF,sFAAsF;AACtF,mFAAmF;AACnF,iFAAiF;AACjF,qFAAqF;AACrF,gFAAgF;AAChF,iCAAiC;AACjC,EAAE;AACF,2EAA2E;AAC3E,2EAA2E;AAC3E,qFAAqF;AACrF,oFAAoF;AACpF,oFAAoF;AACpF,EAAE;AACF,kEAAkE;AAClE,qFAAqF;AACrF,mEAAmE;AAEnE,OAAO,MAAM,MAAM,qBAAqB,CAAC;AAEzC;;;;;;;;GAQG;AACH,MAAM,MAAM,GAAG,CAAC,CAAC;AASjB,OAAO,EAAE,MAAM,EAAE,CAAC;AAElB;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,MAAM,GAAW,MAAM,CAAC,MAAM,CAAC;AAE5C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,IAAoB;IAClE,IAAI,IAAI,CAAC,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,aAAa,IAAI,CAAC,CAAC,2BAA2B,MAAM,IAAI;cAC3D,+EAA+E;cAC/E,uBAAuB,CAC5B,CAAC;IACJ,CAAC;AACH,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,WAAW,CAAC,GAAQ;IAClC,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;IAEnC,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9C,CAAC"} |
Sorry, the diff of this file is too big to display
+95
-23
@@ -0,1 +1,2 @@ | ||
| import { type RankerIndex, type RankerSectionIndex } from "./ranker.js"; | ||
| export interface DocEntry { | ||
@@ -34,31 +35,87 @@ title: string; | ||
| /** | ||
| * Fetch + parse /api/search-index.json into doc entries (cached). | ||
| * The four search feeds, prepared for the ranker. | ||
| * | ||
| * llms.txt lists only the two package indexes, so without this feed a query for | ||
| * a symbol name — the most natural thing to search for — matches nothing at all. | ||
| * A missing or unreachable feed is not fatal: the curated index on its own still | ||
| * answers how-to questions, so this degrades to the previous behaviour. | ||
| * `prepare()` and `prepareSections()` annotate their argument IN PLACE and return it, | ||
| * so what is cached here is the prepared object itself. That is also what makes the | ||
| * caching worth doing: preparing tier 2 folds and counts ~640 kB of prose, measured at | ||
| * 46.6 ms, which is most of a cold isolate's budget. | ||
| */ | ||
| export declare function loadApiIndex(): Promise<DocEntry[]>; | ||
| export interface Corpus { | ||
| at: number; | ||
| index: RankerIndex; | ||
| text: RankerSectionIndex; | ||
| /** imqueue.com's two tiers. Null when the peer feeds are absent — see loadCorpus. */ | ||
| peerIndex: RankerIndex | null; | ||
| peerText: RankerSectionIndex | null; | ||
| } | ||
| /** | ||
| * Rank doc entries by overlap of query terms with title (weighted), section, | ||
| * description and url. Every term's contribution is scaled by `weigher()`, so a | ||
| * rare, specific term outweighs one the whole corpus shares. | ||
| * Fetch, version-check and prepare the four feeds (cached, deduped). | ||
| * | ||
| * Curated pages match on all of those. API symbol pages match on the symbol name | ||
| * only: 350 symbols share so much vocabulary with each other and with the guides | ||
| * ("method", "options", "queue", "message") that scoring their sections and | ||
| * summaries freely would bury every conceptual answer under near-identical | ||
| * symbol hits. A summary term only refines a symbol that already matched by name. | ||
| * imqueue.org's own two tiers are REQUIRED — without them there is nothing to rank | ||
| * and no fallback that would not be a second, unmeasured ranker. The peer tiers are | ||
| * best-effort, and their absence is the one degradation worth naming: it is the | ||
| * commercial half of the corpus, so `pricing commercial license` stops answering from | ||
| * imqueue.com and answers from imqueue.org's own /license/ instead — a plausible | ||
| * answer, from the wrong edition, with no error anywhere. That is the failure this | ||
| * server's whole peer-feed story exists to prevent, so it degrades loudly in the log | ||
| * rather than silently in the results. | ||
| */ | ||
| export declare function loadCorpus(): Promise<Corpus>; | ||
| /** | ||
| * `/search-sections.json` — anchor -> `[start, end)` line range into the page's markdown | ||
| * mirror. Verified against the built mirrors: the offsets are **0-indexed and absolute in | ||
| * the file**, `start` is the heading's own line, and the last range's `end` is the line | ||
| * count. (They could easily not have been: the generator's `splitSections()` sees a | ||
| * substring of the file, so imqueue.com's build computes a `bodyLine` offset to make them | ||
| * absolute, and `check-search-index.js` asserts all four properties every build.) | ||
| */ | ||
| export interface SectionRanges { | ||
| v: number; | ||
| pages: Record<string, Record<string, [number, number]>>; | ||
| } | ||
| /** One section of a page, with the heading path that says where it sits. */ | ||
| export interface DocSection { | ||
| /** The heading text, without its `#` marks. */ | ||
| heading: string; | ||
| /** Enclosing headings, outermost first — the page title, then any parent sections. */ | ||
| ancestors: string[]; | ||
| /** 1-based position among the page's indexed sections, in document order. */ | ||
| index: number; | ||
| total: number; | ||
| } | ||
| /** | ||
| * Cut one section out of a page's markdown. | ||
| * | ||
| * Returns null when the anchor is not indexed, which the caller reports rather than | ||
| * papering over: silently serving the whole page for a misspelt fragment teaches an agent | ||
| * that its fragment worked. | ||
| * | ||
| * The ancestor chain is derived from the markdown rather than carried in the feed. It has | ||
| * to be read anyway, the headings above `start` are exactly the enclosing ones, and a | ||
| * derived chain cannot disagree with the text it is describing. | ||
| */ | ||
| export declare function sliceSection(markdown: string, ranges: Record<string, [number, number]>, anchor: string): { | ||
| markdown: string; | ||
| section: DocSection; | ||
| } | null; | ||
| /** | ||
| * Search the docs: the four feeds, the shared ranker, and nothing of our own. | ||
| * | ||
| * `limit` is applied here rather than inside the ranker because the ranker does not | ||
| * take one — it returns everything above its relative and absolute floors, which is | ||
| * how the website can show groups. See the note on eviction in the plan: the hits this | ||
| * drops are a measured question, not a settled one. | ||
| */ | ||
| export declare function searchDocs(query: string, limit?: number, pkg?: string): Promise<DocEntry[]>; | ||
| /** | ||
| * The ranker, separated from the fetching so it can be tested on a fixed corpus. | ||
| * The search, separated from the fetching so it can be tested on a fixed corpus. | ||
| * | ||
| * Every defect this function has had was a ranking defect, and none of them were | ||
| * catchable while the only way to run it was against the live site: the corpus | ||
| * moves, so an assertion about what comes back either encodes today's content or | ||
| * nothing at all. See test/ranking.test.ts. | ||
| * The same split the old ranker had, and for the same reason it gave: every defect this | ||
| * has ever had was a defect of *what comes back*, and none of them are assertable while | ||
| * the only way to run it is against the live site — the corpus moves, so a test written | ||
| * against it encodes today's content rather than the rule. What is testable here is now | ||
| * the mapping rather than the ranking: the ranking belongs to the submodule and is | ||
| * measured by imqueue.com's KPI harness. | ||
| */ | ||
| export declare function rankEntries(curated: DocEntry[], symbols: DocEntry[], query: string, limit?: number, pkg?: string): DocEntry[]; | ||
| export declare function rankCorpus(corpus: Corpus, curated: DocEntry[], query: string, limit?: number, pkg?: string): DocEntry[]; | ||
| /** | ||
@@ -87,7 +144,22 @@ * What to tell a caller whose query matched nothing. | ||
| export declare function mirrorUrl(pageUrl: string): string; | ||
| /** Fetch the full markdown of a doc page by its page URL or path. */ | ||
| export declare function getDoc(pageUrl: string): Promise<{ | ||
| export interface DocResult { | ||
| url: string; | ||
| markdown: string; | ||
| truncated: boolean; | ||
| }>; | ||
| /** Present when a `#fragment` was given and resolved to one indexed section. */ | ||
| section?: DocSection; | ||
| /** Present when a `#fragment` was given and could NOT be resolved. */ | ||
| fragmentMiss?: { | ||
| anchor: string; | ||
| available: string[]; | ||
| }; | ||
| } | ||
| /** | ||
| * Fetch the markdown of a doc page by its page URL or path. | ||
| * | ||
| * A `#fragment` returns just that section, with the heading path above it. Before this, | ||
| * the fragment was dropped in `mirrorUrl()` (it reads `URL.pathname`) and every result was | ||
| * the whole page — so `search_docs`, whose best results ARE section anchors, handed back an | ||
| * anchor that the very next call silently widened to 9 kB. | ||
| */ | ||
| export declare function getDoc(pageUrl: string): Promise<DocResult>; |
+447
-437
| // Docs access for the @imqueue MCP server. | ||
| // | ||
| // The docs live on imqueue.org as machine-readable feeds: | ||
| // * /llms.txt — curated index: `## Section` + `- [Title](url): description` | ||
| // * /api/search-index.json — every exported symbol of the current majors: | ||
| // [{ name, kind, package, url, summary, deprecated? }] | ||
| // * /<page-url>index.md — a plain-markdown mirror of every page (also <page>.md) | ||
| // * /blog/search-index.json — [{ title, url, summary, topics, ... }] | ||
| // * /search-index.json every page, API symbol and question-shaped section | ||
| // * /search-text.json the prose corpus at heading-section granularity | ||
| // * /search-peer-index.json the same two shapes for imqueue.com, copied onto | ||
| // * /search-peer-text.json imqueue.org's origin at build time | ||
| // * /llms.txt curated index: `## Section` + `- [Title](url): description` | ||
| // * /<page-url>index.md a plain-markdown mirror of every page (also <page>.md) | ||
| // | ||
| // THE RANKING IS NOT IMPLEMENTED HERE ANY MORE. Those first four feeds are exactly | ||
| // what the website's own search box reads, and src/ranker.ts is the same code, pinned | ||
| // as a submodule to the same commit imqueue.com pins. This server used to carry its | ||
| // own ranker over its own feed, and the two answered the same question differently: | ||
| // measured over 3,657 agent-shaped queries, the website's ranker returned a correct | ||
| // result in the top 6 for 99.5% of them against this server's 83.9%, and there was no | ||
| // query the old ranker answered that the new one does not. Nothing had ever compared | ||
| // them, which is how a 15-point gap survives. | ||
| // | ||
| // llms.txt stays, and is now used for one thing: the human-written `section` label a | ||
| // caller reads. It is the only place that text exists. | ||
| // | ||
| // imqueue.com serves the same shapes for the commercial edition — licensing, pricing | ||
| // and support, which the framework docs deliberately do not cover. | ||
| // and support, which the framework docs deliberately do not cover. Note the peer feeds | ||
| // are fetched from **imqueue.org**, not from imqueue.com: the website copies them | ||
| // across at build time so its own search never makes a cross-origin request, and | ||
| // reading them from one origin means one host to be reachable instead of two. | ||
| // | ||
| // We fetch these at runtime (so the server never ships stale copies) and cache them | ||
| // in-process. Only those two hosts are ever fetched. | ||
| import { assertFeedVersion, ranker, sectionText, } from "./ranker.js"; | ||
| const SITE = "https://imqueue.org"; | ||
@@ -37,3 +54,2 @@ /** | ||
| let indexCache = null; | ||
| let apiCache = null; | ||
| /** | ||
@@ -133,3 +149,3 @@ * How long any single upstream fetch may take. | ||
| // "cannot search the docs" while holding one is the worst of both outcomes — | ||
| // and unlike loadApiIndex, which has always degraded gracefully, this threw. | ||
| // this used to throw. `loadCorpus` degrades the same way, for the same reason. | ||
| if (indexCache) | ||
@@ -161,203 +177,188 @@ return indexCache.entries; | ||
| } | ||
| let corpusCache = null; | ||
| /** | ||
| * Fetch + parse /api/search-index.json into doc entries (cached). | ||
| * | ||
| * llms.txt lists only the two package indexes, so without this feed a query for | ||
| * a symbol name — the most natural thing to search for — matches nothing at all. | ||
| * A missing or unreachable feed is not fatal: the curated index on its own still | ||
| * answers how-to questions, so this degrades to the previous behaviour. | ||
| * De-duplicates concurrent loads. Nearly a megabyte of JSON, so two tool calls | ||
| * arriving together on a cold isolate would otherwise both fetch and both prepare it. | ||
| */ | ||
| export async function loadApiIndex() { | ||
| if (apiCache && Date.now() - apiCache.at < TTL_MS) | ||
| return apiCache.entries; | ||
| let entries = []; | ||
| try { | ||
| const res = await get(`${SITE}/api/search-index.json`); | ||
| if (res.ok) { | ||
| const raw = await res.json(); | ||
| entries = (Array.isArray(raw) ? raw : []) | ||
| .filter((s) => s && typeof s.name === "string" && typeof s.url === "string") | ||
| .map((s) => ({ | ||
| title: s.name, | ||
| url: `${SITE}${s.url}`, | ||
| // The deprecation marker leads, so an agent scanning results sees it | ||
| // before it copies the symbol into code. | ||
| description: s.deprecated | ||
| ? `DEPRECATED — do not use in new code. ${s.summary || ""}`.trim() | ||
| : s.summary || "", | ||
| section: `API · ${s.package || "@imqueue"}${s.kind ? ` ${s.kind}` : ""}`, | ||
| symbol: true, | ||
| })); | ||
| } | ||
| let corpusInFlight = null; | ||
| async function feed(path, optional) { | ||
| const res = await get(`${SITE}${path}`); | ||
| if (!res.ok) { | ||
| if (optional) | ||
| return null; | ||
| throw new Error(`${path}: HTTP ${res.status}`); | ||
| } | ||
| catch { | ||
| // Offline, or the feed is not deployed yet — searchDocs carries on without it. | ||
| } | ||
| // Only replace a good cache with a good result. This used to assign | ||
| // unconditionally, so ONE transient failure past the TTL emptied the symbol index | ||
| // for the next hour — 1,152 symbols silently unsearchable, and search_docs still | ||
| // answering successfully with prose only, which is the hardest kind of outage to | ||
| // notice. | ||
| if (!entries.length && apiCache?.entries.length) | ||
| return apiCache.entries; | ||
| apiCache = { at: Date.now(), entries }; | ||
| return entries; | ||
| return res.json(); | ||
| } | ||
| const STOP = new Set([ | ||
| "the", "a", "an", "and", "or", "of", "to", "in", "for", "on", "with", | ||
| "is", "are", "how", "do", "does", "i", "my", "me", "it", "that", "this", | ||
| // Empty verbs and fillers that a spoken question carries and a title does not | ||
| // mean: "how do I GET a typed client" must not match `ICache.get`, and "how do | ||
| // I USE x" must not match every `useX`. | ||
| "get", "use", "using", "need", "want", "real", "from", "by", | ||
| "you", "your", "we", "as", "at", "if", "than", "then", "there", | ||
| ]); | ||
| function tokenize(s) { | ||
| const out = new Set(); | ||
| for (const token of s.toLowerCase().split(/[^a-z0-9@/+.-]+/)) { | ||
| if (token.length > 1 && !STOP.has(token)) { | ||
| out.add(token); | ||
| } | ||
| // A dotted or slashed reference is one token above, which on its own can | ||
| // never match anything: `RedisQueue.send` has to also yield `redisqueue` | ||
| // and `send`, and `@imqueue/core` has to also yield `core`. | ||
| if (/[./]/.test(token)) { | ||
| for (const part of token.split(/[./]+/)) { | ||
| if (part.length > 1 && !STOP.has(part)) { | ||
| out.add(part); | ||
| } | ||
| /** | ||
| * Fetch, version-check and prepare the four feeds (cached, deduped). | ||
| * | ||
| * imqueue.org's own two tiers are REQUIRED — without them there is nothing to rank | ||
| * and no fallback that would not be a second, unmeasured ranker. The peer tiers are | ||
| * best-effort, and their absence is the one degradation worth naming: it is the | ||
| * commercial half of the corpus, so `pricing commercial license` stops answering from | ||
| * imqueue.com and answers from imqueue.org's own /license/ instead — a plausible | ||
| * answer, from the wrong edition, with no error anywhere. That is the failure this | ||
| * server's whole peer-feed story exists to prevent, so it degrades loudly in the log | ||
| * rather than silently in the results. | ||
| */ | ||
| export async function loadCorpus() { | ||
| if (corpusCache && Date.now() - corpusCache.at < TTL_MS) | ||
| return corpusCache; | ||
| if (corpusInFlight) | ||
| return corpusInFlight; | ||
| corpusInFlight = (async () => { | ||
| try { | ||
| const [index, text, peerIndex, peerText] = await Promise.all([ | ||
| feed("/search-index.json", false), | ||
| feed("/search-text.json", false), | ||
| feed("/search-peer-index.json", true), | ||
| feed("/search-peer-text.json", true), | ||
| ]); | ||
| // Before preparing, not after: a shape this ranker cannot read must not be | ||
| // scored at all, and prepare() would happily annotate the wrong fields. | ||
| assertFeedVersion("/search-index.json", index); | ||
| assertFeedVersion("/search-text.json", text); | ||
| if (peerIndex) | ||
| assertFeedVersion("/search-peer-index.json", peerIndex); | ||
| if (peerText) | ||
| assertFeedVersion("/search-peer-text.json", peerText); | ||
| if (!peerIndex || !peerText) { | ||
| console.error("imqueue.com's search feeds are unavailable — licensing, pricing and support " | ||
| + "questions will answer from the framework docs instead of the commercial site."); | ||
| } | ||
| corpusCache = { | ||
| at: Date.now(), | ||
| index: ranker.prepare(index), | ||
| text: ranker.prepareSections(text), | ||
| peerIndex: peerIndex ? ranker.prepare(peerIndex) : null, | ||
| peerText: peerText ? ranker.prepareSections(peerText) : null, | ||
| }; | ||
| return corpusCache; | ||
| } | ||
| } | ||
| return [...out]; | ||
| catch (e) { | ||
| // A usable copy may be sitting in the cache past its TTL, and it is a far better | ||
| // answer than "cannot search the docs" — same reasoning as loadIndex. | ||
| if (corpusCache) | ||
| return corpusCache; | ||
| throw new Error(`Failed to load the search corpus from ${SITE} ` | ||
| + `(${e instanceof Error ? e.message : String(e)})`); | ||
| } | ||
| finally { | ||
| corpusInFlight = null; | ||
| } | ||
| })(); | ||
| return corpusInFlight; | ||
| } | ||
| const formsMemo = new Map(); | ||
| const sectionsCache = new Map(); | ||
| const sectionsInFlight = new Map(); | ||
| /** | ||
| * A token plus its plausible other inflections. | ||
| * Load one edition's section ranges. Keyed by ORIGIN because `get_doc` reads both hosts. | ||
| * | ||
| * Case-folding alone meant "authentication" returned NOTHING while "auth" put the | ||
| * tutorial's auth service at #1, and "caching" found two package indexes while | ||
| * "cache" found six real pages. Zero results is not a neutral outcome: it is | ||
| * positive evidence to the model that the corpus does not cover the topic, so it | ||
| * stops asking and answers from its priors. | ||
| * | ||
| * Deliberately NOT a stemmer that reduces to one canonical root — getting that | ||
| * right per word is exactly the part that goes wrong. Both the corpus and the | ||
| * query are expanded to a SET of candidate forms and matched form-to-form, so a | ||
| * wrong guess costs a missed match rather than a wrong one. `-ing`/`-ed`/`-tion` | ||
| * emit the bare stem and an `e`-restored variant precisely because we cannot tell | ||
| * which of `cach`/`cache` is real. | ||
| * | ||
| * There is no synonym map, and there should not be: "login" and "pricing" return | ||
| * nothing because no page on imqueue.org covers them, which is a corpus problem | ||
| * (and, for pricing, an edition problem — see the imqueue.com entries loaded | ||
| * below). Faking recall with synonyms would hide that. | ||
| * OPTIONAL BY DESIGN — every failure path returns null, and the caller then serves the | ||
| * whole page. Slicing is an improvement on returning 9 kB, not a precondition for reading | ||
| * a doc, so a missing or unreadable feed must cost a caller a bigger answer and never an | ||
| * error. That is also why the version mismatch is caught here rather than thrown: a feed | ||
| * this build cannot read is exactly as useful as no feed. | ||
| */ | ||
| function formsOf(token) { | ||
| const memo = formsMemo.get(token); | ||
| if (memo) | ||
| return memo; | ||
| const forms = new Set([token]); | ||
| const add = (s) => { | ||
| if (s.length > 2 && !STOP.has(s)) | ||
| forms.add(s); | ||
| }; | ||
| if (/ies$/.test(token)) { | ||
| add(`${token.slice(0, -3)}y`); // retries -> retry | ||
| } | ||
| else if (/(?:ses|xes|zes|ches|shes)$/.test(token)) { | ||
| add(token.slice(0, -2)); // caches -> cache, matches -> match | ||
| } | ||
| else if (/es$/.test(token)) { | ||
| add(token.slice(0, -1)); | ||
| add(token.slice(0, -2)); | ||
| } | ||
| else if (/[^s]s$/.test(token)) { | ||
| add(token.slice(0, -1)); // jobs -> job | ||
| } | ||
| if (/ing$/.test(token)) { | ||
| const base = token.slice(0, -3); | ||
| add(base); | ||
| add(`${base}e`); // caching -> cach, cache | ||
| } | ||
| if (/ed$/.test(token)) { | ||
| const base = token.slice(0, -2); | ||
| add(base); | ||
| add(`${base}e`); // traced -> trac, trace | ||
| } | ||
| if (/(?:tion|sion)$/.test(token)) { | ||
| const base = token.slice(0, -4); | ||
| add(base); | ||
| add(`${base}e`); // validation -> valida, validate | ||
| add(`${base}t`); // -> validat, so it meets validated's own stem | ||
| } | ||
| const list = [...forms]; | ||
| formsMemo.set(token, list); | ||
| return list; | ||
| async function loadSections(origin) { | ||
| const hit = sectionsCache.get(origin); | ||
| if (hit && Date.now() - hit.at < TTL_MS) | ||
| return hit.ranges; | ||
| const flight = sectionsInFlight.get(origin); | ||
| if (flight) | ||
| return flight; | ||
| const load = (async () => { | ||
| try { | ||
| const res = await get(`${origin}/search-sections.json`); | ||
| if (!res.ok) | ||
| throw new Error(`HTTP ${res.status}`); | ||
| const ranges = (await res.json()); | ||
| assertFeedVersion("/search-sections.json", ranges); | ||
| if (!ranges.pages || typeof ranges.pages !== "object") { | ||
| throw new Error("no `pages` map"); | ||
| } | ||
| sectionsCache.set(origin, { at: Date.now(), ranges }); | ||
| return ranges; | ||
| } | ||
| catch (e) { | ||
| // Stale beats absent, for the same reason loadCorpus prefers it: a range list is | ||
| // append-mostly, so last hour's copy slices today's page correctly far more often | ||
| // than not, and a wrong range shows up as a heading mismatch below. | ||
| if (hit) | ||
| return hit.ranges; | ||
| console.error(`${origin}/search-sections.json is unavailable ` | ||
| + `(${e instanceof Error ? e.message : String(e)}) — get_doc will return whole pages.`); | ||
| return null; | ||
| } | ||
| finally { | ||
| sectionsInFlight.delete(origin); | ||
| } | ||
| })(); | ||
| sectionsInFlight.set(origin, load); | ||
| return load; | ||
| } | ||
| /** Literal tokens plus every inflection of each — the set matching runs on. */ | ||
| function matchTerms(s) { | ||
| const out = new Set(); | ||
| for (const t of tokenize(s)) { | ||
| for (const f of formsOf(t)) | ||
| out.add(f); | ||
| } | ||
| return [...out]; | ||
| } | ||
| const headingOf = (line) => { | ||
| const m = /^(#{1,6})\s+(.+?)\s*$/.exec(line); | ||
| return m ? { level: m[1].length, text: m[2] } : null; | ||
| }; | ||
| /** | ||
| * The title split at identifier boundaries: `MigrateDownOptions.generateOnly` -> | ||
| * `migrate down options generate only`. | ||
| * Cut one section out of a page's markdown. | ||
| * | ||
| * Partial title matching used `title.includes(t)` with no boundary check, which | ||
| * put six `@imqueue/pg-prisma` migration symbols in all six slots for "rate | ||
| * limiting" — 'rate' is inside 'migrate' and 'generate' — while | ||
| * `@imqueue/http-protect`, whose own one-liner is "Per-IP rate limiting and | ||
| * banning", returned nothing. "rate limit per IP" was worse: 'ip' inside | ||
| * 'descrIPtion'. | ||
| * Returns null when the anchor is not indexed, which the caller reports rather than | ||
| * papering over: silently serving the whole page for a misspelt fragment teaches an agent | ||
| * that its fragment worked. | ||
| * | ||
| * A prefix match on a segment keeps the case the original code was written for | ||
| * ('options' still starts with 'option') and kills both false positives. The | ||
| * four-character floor is what stops two- and three-letter fragments matching | ||
| * across the whole corpus. | ||
| * The ancestor chain is derived from the markdown rather than carried in the feed. It has | ||
| * to be read anyway, the headings above `start` are exactly the enclosing ones, and a | ||
| * derived chain cannot disagree with the text it is describing. | ||
| */ | ||
| function titleSegments(title) { | ||
| return title | ||
| .split(/[^A-Za-z0-9]+|(?=[A-Z])/) | ||
| .map((s) => s.toLowerCase()) | ||
| .filter((s) => s.length > 1); | ||
| export function sliceSection(markdown, ranges, anchor) { | ||
| const range = ranges[anchor]; | ||
| if (!range) | ||
| return null; | ||
| const lines = markdown.split("\n"); | ||
| const [start, end] = range; | ||
| if (start >= lines.length) | ||
| return null; | ||
| const own = headingOf(lines[start]); | ||
| // The range's first line must BE the heading. If it is not, this feed and this mirror | ||
| // disagree — a stale cached range against a rewritten page — and half a section is a | ||
| // worse answer than the whole page. | ||
| if (!own) | ||
| return null; | ||
| const ordered = Object.entries(ranges) | ||
| .sort((a, b) => a[1][0] - b[1][0]) | ||
| .map(([key]) => key); | ||
| // Innermost-first while walking backwards, so each kept heading must enclose the one | ||
| // before it; reversed at the end into reading order. | ||
| const ancestors = []; | ||
| let deepest = own.level; | ||
| for (let i = start - 1; i >= 0; i--) { | ||
| const h = headingOf(lines[i]); | ||
| if (h && h.level < deepest) { | ||
| ancestors.push(h.text); | ||
| deepest = h.level; | ||
| if (deepest === 1) | ||
| break; | ||
| } | ||
| } | ||
| return { | ||
| markdown: lines.slice(start, Math.min(end, lines.length)).join("\n").replace(/\s+$/, ""), | ||
| section: { | ||
| heading: own.text, | ||
| ancestors: ancestors.reverse(), | ||
| index: ordered.indexOf(anchor) + 1, | ||
| total: ordered.length, | ||
| }, | ||
| }; | ||
| } | ||
| const MIN_PARTIAL = 4; | ||
| /** | ||
| * What a blog post's score is multiplied by (see the comment at the demotion). | ||
| * 0.75 loses a near-tie to a doc page and wins a decisive one. | ||
| */ | ||
| const BLOG_WEIGHT = 0.75; | ||
| /** | ||
| * What a match earns when one side of it is an inflection rather than the word | ||
| * actually written, applied once per derived side. | ||
| * | ||
| * Expanding both the corpus and the query buys recall, and it costs precision if | ||
| * a guessed form counts for as much as a real one: "redis cluster setup" lost | ||
| * `ClusteredRedisQueue` from first place to three unrelated `redis` options, | ||
| * because every page saying "clustered" now also votes for `cluster` and diluted | ||
| * its weight. Discounting derived matches keeps the recall and gives the term | ||
| * someone actually typed the louder vote. | ||
| */ | ||
| const INFLECTION_WEIGHT = 0.6; | ||
| function segmentPrefixHit(segments, term) { | ||
| return term.length >= MIN_PARTIAL && segments.some((s) => s.startsWith(term)); | ||
| } | ||
| /** 1 for a blog post, 0 for documentation. */ | ||
| function isBlog(e) { | ||
| return e.section === "Articles" || e.url.includes("/blog/") ? 1 : 0; | ||
| } | ||
| /** | ||
| * True when `e` belongs to `pkg` — the `package` filter of `search_docs`. | ||
| * | ||
| * Accepts `http-protect` or `@imqueue/http-protect`. Symbol sections carry the | ||
| * package name; curated package indexes carry it in the URL, and they are the one | ||
| * kind of prose page that belongs in a package-scoped answer. | ||
| * Accepts `http-protect` or `@imqueue/http-protect`. Kept for `suggest()` and for the | ||
| * curated half; the ranker does its own package filtering (see `scopedQuery`). | ||
| */ | ||
| function inPackage(e, pkg) { | ||
| const short = pkg.trim().replace(/^@imqueue\//, "").toLowerCase(); | ||
| const short = shortPackage(pkg); | ||
| if (!short) | ||
@@ -368,259 +369,222 @@ return true; | ||
| } | ||
| let weighCache = null; | ||
| function shortPackage(pkg) { | ||
| return pkg.trim().replace(/^@imqueue\//, "").toLowerCase(); | ||
| } | ||
| /** | ||
| * Weight a term by how rare it is across the corpus (normalised IDF, 0..1). | ||
| * Fold a curated llms.txt URL into the key the feeds use: a root-relative path. | ||
| * | ||
| * Every page here is about @imqueue services, so `imqueue`, `service` and | ||
| * `queue` occur in a large share of titles while saying nothing about which page | ||
| * answers the question. Paying them the same as the one term that discriminates | ||
| * is what broke natural-language queries: "how do I expose a method on an | ||
| * @imqueue service?" scored three "X vs @imqueue" comparison articles above the | ||
| * `expose` reference, because each matched `imqueue` AND `service` in its title | ||
| * for +5 apiece while `expose` earned +5 once. Long conversational questions — | ||
| * i.e. everything a chat user types — hit that every time, and a client that | ||
| * gets three off-topic essays concludes this server cannot answer and falls back | ||
| * to a web search. | ||
| * The two feeds hold root-relative URLs for their own edition, while llms.txt entries | ||
| * are written however the site writes them, and both editions have a `/license/` and a | ||
| * `/contact/` that are different pages. So the key carries the host. | ||
| */ | ||
| function urlKey(u, base = SITE) { | ||
| try { | ||
| const url = new URL(u, base); | ||
| return `${url.hostname}${url.pathname.replace(/\/+$/, "")}`; | ||
| } | ||
| catch { | ||
| return u; | ||
| } | ||
| } | ||
| /** | ||
| * Section label per result, and the ONE thing llms.txt is still read for. | ||
| * | ||
| * The df map is derived from the two cached feeds and cached against their | ||
| * identity, so it is rebuilt only when a feed is refetched. | ||
| * `section` is a frozen output field of search_docs and a caller reads it to decide | ||
| * whether it is looking at the framework or at the licence, so it has to keep meaning | ||
| * what it meant. Four sources, in falling order of how hand-made they are: | ||
| * | ||
| * * an API symbol keeps today's exact `API · @imqueue/pkg kind` shape. Not cosmetic: | ||
| * packages.ts detects the mutually-exclusive pairs by looking for a package name in | ||
| * `section + url`, so a label that stopped naming the package would silently stop | ||
| * the pg-prisma/pg-sequelize and opentelemetry/datadog advisories from firing; | ||
| * * otherwise the curated llms.txt section, which is the only hand-written one | ||
| * ("Guides", "Commercial · imqueue.com"); | ||
| * * otherwise the page's own kind from the feed — Recipe, Tutorial, CLI, Glossary, | ||
| * Compare, Article — which is better than any label derivable from the URL; | ||
| * * and an answer names the page it was lifted out of, because a question-shaped | ||
| * result is only useful if you can see what it is an answer within. | ||
| */ | ||
| function corpus(curated, symbols) { | ||
| if (weighCache && weighCache.curated === curated && weighCache.symbols === symbols) { | ||
| return weighCache; | ||
| function labelFor(hit, curated) { | ||
| const { record } = hit; | ||
| const host = hit.external ? "imqueue.com" : "imqueue.org"; | ||
| if (record.g === 1) { | ||
| return `API · ${record.p || "@imqueue"}${record.k ? ` ${record.k}` : ""}`; | ||
| } | ||
| const df = new Map(); | ||
| const all = [...curated, ...symbols]; | ||
| const prepared = all.map((e) => { | ||
| const titleLiteral = tokenize(e.title); | ||
| const segments = titleSegments(e.title); | ||
| const strongLiteral = new Set([...titleLiteral, ...segments]); | ||
| const strong = new Set(); | ||
| for (const t of strongLiteral) { | ||
| for (const f of formsOf(t)) | ||
| strong.add(f); | ||
| } | ||
| return { | ||
| e, | ||
| titleLiteral, | ||
| strong, | ||
| strongLiteral, | ||
| segments, | ||
| sectionTerms: new Set(matchTerms(e.section)), | ||
| summaryTerms: new Set(matchTerms(e.description)), | ||
| hay: `${e.section} ${e.description} ${e.url}`.toLowerCase(), | ||
| blog: isBlog(e), | ||
| }; | ||
| }); | ||
| // Document frequency over the SAME expanded forms the scorer matches on, so an | ||
| // inflection gets its real rarity. Counting only literals would leave every | ||
| // stem absent from the map and therefore weighted as the rarest thing in the | ||
| // corpus — the inverse of what it is. | ||
| for (const p of prepared) { | ||
| const seen = new Set([...p.strong, ...p.sectionTerms, ...p.summaryTerms]); | ||
| for (const t of seen) | ||
| df.set(t, (df.get(t) || 0) + 1); | ||
| const label = curated.get(urlKey(record.u, hit.external ? COM : SITE)); | ||
| if (label) | ||
| return label; | ||
| // On an answer record `k` holds the PARENT PAGE'S TITLE, not a kind — the field is | ||
| // overloaded by group in the feed. Titles are long, so it is trimmed rather than | ||
| // repeated whole into every result. | ||
| if (record.g === 2 && record.k) { | ||
| return `Answer · ${truncate(record.k, 60)}`; | ||
| } | ||
| const n = all.length || 1; | ||
| const norm = Math.log(n + 1); | ||
| const memo = new Map(); | ||
| const weigh = (term) => { | ||
| let w = memo.get(term); | ||
| if (w === undefined) { | ||
| // Floored rather than zeroed: a query made only of ubiquitous words must | ||
| // still rank something instead of returning nothing at all. | ||
| w = Math.max(0.05, Math.log((n + 1) / ((df.get(term) || 0) + 1)) / norm); | ||
| memo.set(term, w); | ||
| } | ||
| return w; | ||
| }; | ||
| weighCache = { curated, symbols, weigh, df, prepared }; | ||
| return weighCache; | ||
| const kind = record.k && record.k !== "Docs" ? record.k : "Docs"; | ||
| return hit.external ? `${kind} · imqueue.com` : kind; | ||
| } | ||
| /** Cut at a word boundary, so a description does not end mid-identifier. */ | ||
| function truncate(text, max) { | ||
| const clean = text.replace(/\s+/g, " ").trim(); | ||
| if (clean.length <= max) | ||
| return clean; | ||
| const cut = clean.slice(0, max); | ||
| const space = cut.lastIndexOf(" "); | ||
| return `${(space > max * 0.6 ? cut.slice(0, space) : cut).trimEnd()}…`; | ||
| } | ||
| /** | ||
| * Rank doc entries by overlap of query terms with title (weighted), section, | ||
| * description and url. Every term's contribution is scaled by `weigher()`, so a | ||
| * rare, specific term outweighs one the whole corpus shares. | ||
| * How much of a matched section to hand back as the description. | ||
| * | ||
| * Curated pages match on all of those. API symbol pages match on the symbol name | ||
| * only: 350 symbols share so much vocabulary with each other and with the guides | ||
| * ("method", "options", "queue", "message") that scoring their sections and | ||
| * summaries freely would bury every conceptual answer under near-identical | ||
| * symbol hits. A summary term only refines a symbol that already matched by name. | ||
| * The website shows a 190-character snippet highlighted around the query. An agent has | ||
| * no highlighting and a much better use for the text, so this is generous by | ||
| * comparison — but still a description, not a read: `get_doc` is one call away and | ||
| * Phase 3 will return the section itself. | ||
| */ | ||
| export async function searchDocs(query, limit = 6, pkg) { | ||
| const [curated, symbols] = await Promise.all([loadIndex(), loadApiIndex()]); | ||
| return rankEntries(curated, symbols, query, limit, pkg); | ||
| const SECTION_CHARS = 320; | ||
| function describe(hit) { | ||
| const { record } = hit; | ||
| // A section hit's own record carries no summary (the ranker synthesises it from the | ||
| // page and the heading), so the matched prose IS the description. | ||
| if (hit.section) | ||
| return truncate(sectionText(hit), SECTION_CHARS); | ||
| const summary = truncate(record.s || "", SECTION_CHARS); | ||
| // The deprecation marker leads, so an agent scanning results sees it before it | ||
| // copies the symbol into code. | ||
| return record.d ? `DEPRECATED — do not use in new code. ${summary}`.trim() : summary; | ||
| } | ||
| /** | ||
| * The ranker, separated from the fetching so it can be tested on a fixed corpus. | ||
| * Drop the website's site-priority rule, keeping everything else about the order. | ||
| * | ||
| * Every defect this function has had was a ranking defect, and none of them were | ||
| * catchable while the only way to run it was against the live site: the corpus | ||
| * moves, so an assertion about what comes back either encodes today's content or | ||
| * nothing at all. See test/ranking.test.ts. | ||
| * The ranker sorts `(a.external ? 1 : 0) - (b.external ? 1 : 0)` FIRST, so on | ||
| * imqueue.org every imqueue.org result precedes every imqueue.com one however much | ||
| * better the imqueue.com one is. That is right for a website and its own comment says | ||
| * why — "THE SITE YOU ARE ON WINS" — because a reader on imqueue.org asking about | ||
| * licensing should see imqueue.org's own licence page before the commercial site's. | ||
| * | ||
| * AN MCP CLIENT IS ON NO SITE. It asked about pricing, and pricing exists only on | ||
| * imqueue.com. Measured against the live feeds with the rule in force: `commercial | ||
| * license` and `is imqueue free for commercial use` returned NO imqueue.com result at | ||
| * all inside the default limit of 6, and `pricing commercial license` returned one at | ||
| * #5 — gone at `limit: 3`. That is a regression on precisely the question this server | ||
| * went out of its way to fix, and the kind that reads as a confident answer from the | ||
| * wrong edition rather than as an error. | ||
| * | ||
| * Re-sorting here rather than changing the ranker keeps the website byte-identical, and | ||
| * it is the honest place for it: this is the one ranking rule that encodes *where the | ||
| * reader is standing*, which is a property of the caller and not of the corpus. | ||
| * | ||
| * It cannot change WHICH hits come back, only their order — the ranker's per-group | ||
| * floor keys local and peer groups separately (`"x:" + groupKey(hit)`) and its | ||
| * per-page cap is keyed by URL, so both had already been applied when `search()` | ||
| * returned. The remaining keys are the ranker's own tie-breaks, kept verbatim: | ||
| * shortest title, then shortest URL. | ||
| */ | ||
| export function rankEntries(curated, symbols, query, limit = 6, pkg) { | ||
| const terms = matchTerms(query); | ||
| if (!terms.length) | ||
| return curated.slice(0, limit); | ||
| // A question wants a page that explains; an identifier wants the symbol. Both | ||
| // shapes match the same words, so without this distinction "how do I handle | ||
| // errors in a service?" ranks `IMQOptions.handleSignals` — a property page | ||
| // that answers nothing — above the guides, which is what makes a client give | ||
| // up on this server and go and search the web instead. | ||
| const asksHow = /\b(how|what|which|why|when|where|can|should|do|does|is|are)\b/i.test(query); | ||
| // Curated entries come first so that a tie between a guide and a symbol page | ||
| // for the same URL keeps the guide's hand-written description (stable sort). | ||
| const asked = new Set(terms); | ||
| // The words actually typed, as opposed to the inflections derived from them. | ||
| const literal = new Set(tokenize(query)); | ||
| const { weigh, prepared } = corpus(curated, symbols); | ||
| const pool = pkg ? prepared.filter((p) => inPackage(p.e, pkg)) : prepared; | ||
| const scored = pool.map((p) => { | ||
| const { e } = p; | ||
| let score = 0; | ||
| let titleHit = false; | ||
| let namedHit = false; | ||
| let contextHit = false; | ||
| let summaryOnly = false; | ||
| // A match is discounted once for each side of it that is a guessed form | ||
| // rather than a written word, so literal-to-literal always wins. | ||
| const asWritten = (t) => (literal.has(t) ? 1 : INFLECTION_WEIGHT); | ||
| for (const t of terms) { | ||
| if (p.strong.has(t)) { | ||
| // Whole-token or whole-segment hit: `send` in `RedisQueue.send`, `redis` | ||
| // in `ClusteredRedisQueue`. | ||
| score += 5 * weigh(t) * asWritten(t) * (p.strongLiteral.has(t) ? 1 : INFLECTION_WEIGHT); | ||
| titleHit = true; | ||
| namedHit = true; | ||
| } | ||
| else if (segmentPrefixHit(p.segments, t)) { | ||
| score += 3 * weigh(t) * asWritten(t); // partial hit: `option` in `IMQOptions` | ||
| titleHit = true; | ||
| } | ||
| } | ||
| // The package a symbol belongs to lives in its section and was never scored, | ||
| // so "opentelemetry" matched exactly one entry — the package index — while 26 | ||
| // opentelemetry symbols sat unmatched in the same feed, and "tracing" returned | ||
| // six @imqueue/datadog results and no @imqueue/opentelemetry. That inverts the | ||
| // project's own advice: datadog is only for a fleet already standing on | ||
| // Datadog's agent, and installing both patches the same rpc hooks. | ||
| for (const t of terms) { | ||
| if (!p.strong.has(t) && p.sectionTerms.has(t)) { | ||
| score += 2 * weigh(t) * asWritten(t); | ||
| contextHit = true; | ||
| } | ||
| } | ||
| if (e.symbol) { | ||
| // Symbol summaries used to be scored ONLY as a tie-breaker on a name that | ||
| // had already matched — `if (e.symbol && !titleHit) return 0` — which made | ||
| // all 1,152 hand-written summaries unreachable on their own. "how do I stop | ||
| // a service cleanly on SIGTERM" scored `IMQOptions.handleSignals`, whose | ||
| // summary is literally "Enable process signal handling (SIGTERM, SIGINT, | ||
| // SIGABRT)", at exactly zero. | ||
| // | ||
| // So a summary now scores by itself, at low weight and capped at one term: | ||
| // enough to be findable, never enough to outrank the prose page written to | ||
| // answer the question. Capped rather than accumulated because symbol | ||
| // summaries repeat the same handful of words across a whole class. | ||
| const hits = terms.filter((t) => p.summaryTerms.has(t)); | ||
| if (hits.length) { | ||
| const best = Math.max(...hits.map((t) => weigh(t) * asWritten(t))); | ||
| if (titleHit || contextHit) { | ||
| score += best; | ||
| } | ||
| else { | ||
| score += 0.8 * best; | ||
| summaryOnly = true; | ||
| } | ||
| } | ||
| if (!titleHit && !contextHit && !summaryOnly) { | ||
| return { p, score: 0, summaryOnly }; | ||
| } | ||
| } | ||
| else { | ||
| for (const t of terms) { | ||
| if (p.hay.includes(t)) { | ||
| score += weigh(t) * asWritten(t); | ||
| } | ||
| } | ||
| } | ||
| // A query naming a whole title — "ClusteredRedisQueue" — wants that page, not | ||
| // its twenty members, every one of which also contains the class name. | ||
| // Scaled by the most distinctive word in the title, so covering all of | ||
| // `expose` earns far more than covering all of a title made of common words. | ||
| // | ||
| // Tested against the LITERAL title tokens, matched through their inflections: | ||
| // testing the expanded set instead would lose the bonus for every title whose | ||
| // words the query spelled differently. | ||
| if (p.titleLiteral.length && p.titleLiteral.every((t) => formsOf(t).some((f) => asked.has(f)))) { | ||
| score += 4 * Math.max(...p.titleLiteral.map(weigh)); | ||
| } | ||
| // Two kinds of symbol page that cannot answer a "how do I …" question however | ||
| // well the name matches: a single field or constructor of one class, and a | ||
| // page matched only on a fragment of its name — `run` inside `runWithRequest`, | ||
| // `handle` inside `handleSignals`. A symbol whose name a term hits whole, | ||
| // like `expose`, is exactly the right answer and stays where it scored. | ||
| if (asksHow && e.symbol && (!namedHit || /\b(property|variable|constructor)\b/.test(e.section))) { | ||
| score *= 0.5; | ||
| } | ||
| // Documentation should lead whenever the docs cover the question: articles are | ||
| // long-form and mention every term in the vocabulary, so on raw relevance they | ||
| // beat the pages written to answer it — "how do I expose a method?" used to | ||
| // come back as three "X vs @imqueue" comparison essays. | ||
| // | ||
| // This was a PRIMARY SORT KEY, which overcorrected: two pg-pubsub constants | ||
| // that merely contain the words outranked the 2,000-word article about | ||
| // graceful shutdown, and for "how do I stop a service cleanly on SIGTERM" the | ||
| // article did not appear at all. A multiplier keeps the preference while | ||
| // letting a decisively better article still lead — which is the page an answer | ||
| // engine would actually cite. | ||
| if (p.blog) | ||
| score *= BLOG_WEIGHT; | ||
| return { p, score, summaryOnly }; | ||
| }); | ||
| const hits = scored.filter((x) => x.score > 0); | ||
| // Equal scores break toward prose: a symbol reached only through its summary is | ||
| // by definition a weaker answer than a page that matched outright. | ||
| const ranked = hits.sort((a, b) => b.score - a.score || Number(a.summaryOnly) - Number(b.summaryOnly)); | ||
| // A package index is listed both in llms.txt and in the symbol feed. | ||
| const seen = new Set(); | ||
| function byScore(hits) { | ||
| return [...hits].sort((a, b) => b.score - a.score | ||
| || a.record.t.length - b.record.t.length | ||
| || a.record.u.length - b.record.u.length); | ||
| } | ||
| /** | ||
| * Turn the ranker's hits into the tool's own result shape. | ||
| * | ||
| * The URL is the part that must not be got wrong. Feed records hold root-relative | ||
| * paths for THEIR OWN edition, and `external` is the only thing that says which | ||
| * edition that is — so prefixing every record with imqueue.org would hand back | ||
| * imqueue.org URLs for imqueue.com's pricing pages. They would 404 through `get_doc`, | ||
| * and returning URLs a caller cannot use is the one change here that would force a | ||
| * major version bump rather than a minor one. | ||
| */ | ||
| function toEntries(hits, curated, limit) { | ||
| const out = []; | ||
| // A class's members all carry its name, so they all score alike: without a cap, | ||
| // "redis cluster setup" fills every slot with ClusteredRedisQueue methods and | ||
| // pushes out the guide that actually answers it. | ||
| const perParent = new Map(); | ||
| // The same member name across DIFFERENT classes is the other way six | ||
| // near-identical pages fill the answer, and the per-parent cap cannot see it: | ||
| // "how do I stop a service cleanly on SIGTERM" returned IMQService.stop, | ||
| // ClusteredRedisQueue.stop, IMessageQueue.stop, RedisQueue.stop, | ||
| // AnyJobQueue.stop and BaseJobQueue.stop — six different parents, one answer | ||
| // repeated, and no room left for the option that actually handles signals or the | ||
| // article written about it. | ||
| const perLeaf = new Map(); | ||
| const maxPerName = Math.max(2, Math.ceil(limit / 3)); | ||
| for (const { p: { e } } of ranked) { | ||
| if (seen.has(e.url)) | ||
| continue; | ||
| const dot = e.symbol ? e.title.lastIndexOf(".") : -1; | ||
| const parent = dot > 0 ? e.title.slice(0, dot) : null; | ||
| // A class's own page is never capped, by either rule — that is usually the | ||
| // page worth reading first. | ||
| const leaf = dot > 0 ? e.title.slice(dot + 1).toLowerCase() : null; | ||
| if (parent && (perParent.get(parent) || 0) >= maxPerName) | ||
| continue; | ||
| if (leaf && (perLeaf.get(leaf) || 0) >= maxPerName) | ||
| continue; | ||
| if (parent) | ||
| perParent.set(parent, (perParent.get(parent) || 0) + 1); | ||
| if (leaf) | ||
| perLeaf.set(leaf, (perLeaf.get(leaf) || 0) + 1); | ||
| seen.add(e.url); | ||
| out.push(e); | ||
| for (const hit of byScore(hits)) { | ||
| if (out.length >= limit) | ||
| break; | ||
| out.push({ | ||
| title: hit.record.t, | ||
| url: `${hit.external ? COM : SITE}${hit.record.u}`, | ||
| description: describe(hit), | ||
| section: labelFor(hit, curated), | ||
| ...(hit.record.g === 1 ? { symbol: true } : {}), | ||
| }); | ||
| } | ||
| return out; | ||
| } | ||
| /** URL key -> curated section label, for both editions. */ | ||
| function curatedSections(entries) { | ||
| const map = new Map(); | ||
| for (const e of entries) { | ||
| // imqueue.com's entries are the ones whose section carries the suffix loadIndex | ||
| // appends, and their URLs are relative to imqueue.com. | ||
| const base = e.section.endsWith(" · imqueue.com") ? COM : SITE; | ||
| map.set(urlKey(e.url, base), e.section); | ||
| } | ||
| return map; | ||
| } | ||
| /** | ||
| * Express the `package` filter as the ranker's own `pkg:` syntax. | ||
| * | ||
| * Reusing the ranker's filter rather than post-filtering its output is the whole point: | ||
| * a filter applied afterwards would take the top N and then discard from them, so a | ||
| * scoped search would return fewer results than it found, or none at all. | ||
| * | ||
| * Two consequences of the ranker's implementation, both accepted deliberately: | ||
| * a scoped query matches on the record's own `package` field, so it reaches API | ||
| * symbols and package index pages but not a guide that merely discusses the package; | ||
| * and the ranker skips the prose tier entirely while a filter is set, so a scoped | ||
| * search returns reference rather than articles. Both are what the website does, and | ||
| * "what the website does" is the property this whole change is for. | ||
| */ | ||
| function scopedQuery(query, pkg) { | ||
| const short = pkg ? shortPackage(pkg) : ""; | ||
| return short ? `pkg:${short} ${query}` : query; | ||
| } | ||
| /** | ||
| * Search the docs: the four feeds, the shared ranker, and nothing of our own. | ||
| * | ||
| * `limit` is applied here rather than inside the ranker because the ranker does not | ||
| * take one — it returns everything above its relative and absolute floors, which is | ||
| * how the website can show groups. See the note on eviction in the plan: the hits this | ||
| * drops are a measured question, not a settled one. | ||
| */ | ||
| export async function searchDocs(query, limit = 6, pkg) { | ||
| const [corpus, curated] = await Promise.all([loadCorpus(), loadIndex()]); | ||
| return rankCorpus(corpus, curated, query, limit, pkg); | ||
| } | ||
| /** | ||
| * The search, separated from the fetching so it can be tested on a fixed corpus. | ||
| * | ||
| * The same split the old ranker had, and for the same reason it gave: every defect this | ||
| * has ever had was a defect of *what comes back*, and none of them are assertable while | ||
| * the only way to run it is against the live site — the corpus moves, so a test written | ||
| * against it encodes today's content rather than the rule. What is testable here is now | ||
| * the mapping rather than the ranking: the ranking belongs to the submodule and is | ||
| * measured by imqueue.com's KPI harness. | ||
| */ | ||
| export function rankCorpus(corpus, curated, query, limit = 6, pkg) { | ||
| // Assigned per search rather than once at load: the corpus can be refetched behind | ||
| // us, and `search()` is synchronous, so setting it immediately before the call is | ||
| // what makes an interleaved refresh unable to score half of one corpus and half of | ||
| // another. | ||
| ranker.state.t1 = corpus.index; | ||
| ranker.state.t2 = corpus.text; | ||
| ranker.state.x1 = corpus.peerIndex; | ||
| ranker.state.x2 = corpus.peerText; | ||
| const parsed = ranker.parseQuery(scopedQuery(query, pkg)); | ||
| // A query with no terms in it matches EVERYTHING, not nothing — verified against the | ||
| // ranker: with `terms` empty every record clears the score floor, so `" "` came back | ||
| // as the whole corpus truncated to `limit`, in ranked order, presented as relevant. | ||
| // | ||
| // On the website that is unreachable, which is why it is not a bug there: the dialog | ||
| // does not search an empty input. Here it is reachable, because `search_docs` bounds | ||
| // `query` at min(1) and whitespace satisfies that. The old ranker had the same hole and | ||
| // answered it with the first N curated pages, so this is not a regression — it is an | ||
| // edge that was never closed. | ||
| // | ||
| // Zero results is both the honest answer and the more useful one: server.ts turns an | ||
| // empty result into what the corpus covers plus the indexed terms nearest the query, | ||
| // which is information the model cannot have. | ||
| if (!parsed.terms.length) | ||
| return []; | ||
| return toEntries(ranker.search(parsed), curatedSections(curated), limit); | ||
| } | ||
| /** | ||
| * What to tell a caller whose query matched nothing. | ||
@@ -635,4 +599,3 @@ * | ||
| export async function suggest(query) { | ||
| const [curated, symbols] = await Promise.all([loadIndex(), loadApiIndex()]); | ||
| const { df } = corpus(curated, symbols); | ||
| const curated = await loadIndex(); | ||
| const sections = []; | ||
@@ -643,3 +606,23 @@ for (const e of curated) { | ||
| } | ||
| const asked = tokenize(query); | ||
| // The vocabulary now comes from the PROSE corpus's own document frequencies — 5,310 | ||
| // terms over 719 sections, built by prepareSections. That is a straight upgrade on | ||
| // what this used to read: the old df map was built from titles, sections and | ||
| // summaries only, so "the indexed terms nearest your query" could not offer a word | ||
| // that appears in the documentation but in no title. | ||
| // | ||
| // It is also the only part of this function that can fail, so it fails alone: naming | ||
| // what the corpus covers is still worth returning when the feeds are unreachable. | ||
| let df = {}; | ||
| let asked = []; | ||
| try { | ||
| const corpus = await loadCorpus(); | ||
| df = corpus.text.df ?? {}; | ||
| // The ranker's own tokenizer, not a second one. It folds and splits exactly as the | ||
| // search did, which is what makes "nearest to your query" mean nearest to the | ||
| // query that actually ran. | ||
| asked = ranker.parseQuery(query).terms; | ||
| } | ||
| catch { | ||
| return { sections, nearest: [] }; | ||
| } | ||
| const scoredTerms = []; | ||
@@ -650,3 +633,4 @@ // Five, not four: a four-character prefix offered `characters` and `charges` for | ||
| const NEAR_PREFIX = 5; | ||
| for (const [term, n] of df) { | ||
| const NEAR_CONTAINS = 4; | ||
| for (const term of Object.keys(df)) { | ||
| // "Nearest" means shares a real prefix with, or contains, something asked for | ||
@@ -656,6 +640,6 @@ // — enough to surface `authenticated` for "authentication" without pretending | ||
| const near = asked.some((t) => (t.length >= NEAR_PREFIX && term.startsWith(t.slice(0, NEAR_PREFIX))) | ||
| || (t.length >= MIN_PARTIAL && term.includes(t)) | ||
| || (term.length >= MIN_PARTIAL && t.includes(term))); | ||
| || (t.length >= NEAR_CONTAINS && term.includes(t)) | ||
| || (term.length >= NEAR_CONTAINS && t.includes(term))); | ||
| if (near && !asked.includes(term)) | ||
| scoredTerms.push({ term, n }); | ||
| scoredTerms.push({ term, n: df[term] ?? 0 }); | ||
| } | ||
@@ -686,4 +670,13 @@ // Commonest first: a term one page uses once is a worse suggestion than one the | ||
| } | ||
| /** Fetch the full markdown of a doc page by its page URL or path. */ | ||
| /** | ||
| * Fetch the markdown of a doc page by its page URL or path. | ||
| * | ||
| * A `#fragment` returns just that section, with the heading path above it. Before this, | ||
| * the fragment was dropped in `mirrorUrl()` (it reads `URL.pathname`) and every result was | ||
| * the whole page — so `search_docs`, whose best results ARE section anchors, handed back an | ||
| * anchor that the very next call silently widened to 9 kB. | ||
| */ | ||
| export async function getDoc(pageUrl) { | ||
| const asked = assertImqueueUrl(pageUrl); | ||
| const anchor = decodeURIComponent(asked.hash.replace(/^#/, "")).trim(); | ||
| const mUrl = mirrorUrl(pageUrl); | ||
@@ -717,12 +710,29 @@ const res = await get(mUrl); | ||
| const body = await res.text(); | ||
| if (body.length > MAX_DOC_BYTES) { | ||
| // The fragment path first, so the size cap below applies to whatever is actually being | ||
| // returned — a section of a 200 kB page is not a truncated page. | ||
| if (anchor) { | ||
| const ranges = await loadSections(asked.origin); | ||
| const key = asked.pathname.endsWith("/") ? asked.pathname : `${asked.pathname}/`; | ||
| const page = ranges?.pages[key] ?? ranges?.pages[asked.pathname]; | ||
| const cut = page ? sliceSection(body, page, anchor) : null; | ||
| if (cut) { | ||
| return { url: mUrl, markdown: cut.markdown, truncated: false, section: cut.section }; | ||
| } | ||
| // Whole page, and SAY SO. An agent that mistypes an anchor and gets a plausible page | ||
| // back has been told its fragment worked, and will keep citing it. | ||
| return { | ||
| url: mUrl, | ||
| markdown: `${body.slice(0, MAX_DOC_BYTES)}\n\n[truncated: ${body.length} bytes total, ` | ||
| + `${MAX_DOC_BYTES} returned. Read a specific page instead of the whole set.]`, | ||
| truncated: true, | ||
| markdown: capped(body), | ||
| truncated: body.length > MAX_DOC_BYTES, | ||
| fragmentMiss: { anchor, available: page ? Object.keys(page) : [] }, | ||
| }; | ||
| } | ||
| return { url: mUrl, markdown: body, truncated: false }; | ||
| return { url: mUrl, markdown: capped(body), truncated: body.length > MAX_DOC_BYTES }; | ||
| } | ||
| function capped(body) { | ||
| if (body.length <= MAX_DOC_BYTES) | ||
| return body; | ||
| return `${body.slice(0, MAX_DOC_BYTES)}\n\n[truncated: ${body.length} bytes total, ` | ||
| + `${MAX_DOC_BYTES} returned. Read a specific page instead of the whole set.]`; | ||
| } | ||
| //# sourceMappingURL=docs.js.map |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"docs.js","sourceRoot":"","sources":["../src/docs.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"docs.js","sourceRoot":"","sources":["../src/docs.ts"],"names":[],"mappings":"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"} |
+23
-2
@@ -250,3 +250,3 @@ // Shared @imqueue MCP server factory. Every tool is registered here once and the | ||
| ...meta("Read an @imqueue doc page", "read", true), // fetches a live page from imqueue.org (host-locked) | ||
| description: "Fetch the full markdown of an @imqueue documentation page by its URL (as returned by search_docs). Returns plain markdown suitable for reading and quoting. Only imqueue.org (framework docs) and imqueue.com (licensing, pricing, support) URLs are fetched; anything else is refused. Very large pages are truncated, which the result reports.", | ||
| description: "Fetch the markdown of an @imqueue documentation page by its URL (as returned by search_docs). Returns plain markdown suitable for reading and quoting. Pass a URL with a #fragment — which is what search_docs returns for a section result — to get just that section plus the heading path above it; pass the URL without one to read the whole page. Only imqueue.org (framework docs) and imqueue.com (licensing, pricing, support) URLs are fetched; anything else is refused. Very large pages are truncated, which the result reports.", | ||
| inputSchema: { | ||
@@ -283,4 +283,25 @@ url: z.string().describe("An imqueue.org or imqueue.com page URL, e.g. https://imqueue.org/get-started/"), | ||
| const doc = await getDoc(url); | ||
| // The header, and it is load-bearing rather than decorative. A section arrives with | ||
| // no surrounding page, so without the heading path a caller cannot tell whether | ||
| // "Verify" belongs to the delayed-work recipe or the auth tutorial, and without the | ||
| // count it cannot tell that eleven more sections exist. Both go in `content`: the | ||
| // output schema is part of the frozen listing surface, so nothing is added to it. | ||
| const lines = [`Source: ${doc.url}`]; | ||
| if (doc.section) { | ||
| const path = [...doc.section.ancestors, doc.section.heading].join(" › "); | ||
| lines.push(`Section: ${path}`); | ||
| lines.push(`This is section ${doc.section.index} of ${doc.section.total} on the page. ` | ||
| + `Call get_doc on ${doc.url.replace(/index\.md$/, "")} without a #fragment ` | ||
| + "to read the whole page."); | ||
| } | ||
| else if (doc.fragmentMiss) { | ||
| lines.push(`Note: #${doc.fragmentMiss.anchor} is not an indexed section of this page, ` | ||
| + "so the whole page is returned."); | ||
| if (doc.fragmentMiss.available.length) { | ||
| lines.push(`Indexed sections: ${doc.fragmentMiss.available.slice(0, 20).join(", ")}` | ||
| + (doc.fragmentMiss.available.length > 20 ? ", …" : "")); | ||
| } | ||
| } | ||
| return { | ||
| content: [{ type: "text", text: `Source: ${doc.url}\n\n${doc.markdown}` }], | ||
| content: [{ type: "text", text: `${lines.join("\n")}\n\n${doc.markdown}` }], | ||
| structuredContent: { | ||
@@ -287,0 +308,0 @@ url: doc.url, |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"} |
+8
-7
| { | ||
| "name": "@imqueue/mcp", | ||
| "version": "3.3.0", | ||
| "version": "3.4.0", | ||
| "mcpName": "org.imqueue/mcp", | ||
@@ -38,6 +38,7 @@ "description": "Model Context Protocol server for @imqueue — lets AI coding agents search the docs and scaffold typed services & clients.", | ||
| "scripts": { | ||
| "build": "tsc", | ||
| "ranker": "node scripts/copy-ranker.mjs", | ||
| "build": "npm run ranker && tsc", | ||
| "start": "node dist/index.js", | ||
| "dev": "tsx src/index.ts", | ||
| "test": "tsx --test test/*.test.ts", | ||
| "dev": "npm run ranker && tsx src/index.ts", | ||
| "test": "npm run ranker && tsx --test test/*.test.ts", | ||
| "typecheck:test": "tsc --noEmit -p tsconfig.test.json", | ||
@@ -50,5 +51,5 @@ "verify": "npm run build && npm run typecheck:worker && npm run typecheck:test && npm test && npm run smoke", | ||
| "postpublish": "node scripts/postpublish.mjs", | ||
| "typecheck:worker": "tsc --noEmit -p worker/tsconfig.json", | ||
| "dev:worker": "wrangler dev", | ||
| "deploy:worker": "wrangler deploy" | ||
| "typecheck:worker": "npm run ranker && tsc --noEmit -p worker/tsconfig.json", | ||
| "dev:worker": "npm run ranker && wrangler dev", | ||
| "deploy:worker": "npm run ranker && wrangler deploy" | ||
| }, | ||
@@ -55,0 +56,0 @@ "dependencies": { |
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
378732
58.54%26
18.18%4983
115.71%