🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

@imqueue/mcp

Package Overview
Dependencies
Maintainers
2
Versions
34
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@imqueue/mcp - npm Package Compare versions

Comparing version
3.3.0
to
3.4.0
+33
dist/ranker.d.ts
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 +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":"AAAA,2CAA2C;AAC3C,EAAE;AACF,0DAA0D;AAC1D,iFAAiF;AACjF,8EAA8E;AAC9E,+EAA+E;AAC/E,iEAAiE;AACjE,0FAA0F;AAC1F,qFAAqF;AACrF,EAAE;AACF,mFAAmF;AACnF,sFAAsF;AACtF,oFAAoF;AACpF,oFAAoF;AACpF,oFAAoF;AACpF,sFAAsF;AACtF,qFAAqF;AACrF,8CAA8C;AAC9C,EAAE;AACF,qFAAqF;AACrF,uDAAuD;AACvD,EAAE;AACF,qFAAqF;AACrF,uFAAuF;AACvF,kFAAkF;AAClF,iFAAiF;AACjF,8EAA8E;AAC9E,EAAE;AACF,oFAAoF;AACpF,qDAAqD;AAErD,OAAO,EACL,iBAAiB,EACjB,MAAM,EACN,WAAW,GAIZ,MAAM,aAAa,CAAC;AAErB,MAAM,IAAI,GAAG,qBAAqB,CAAC;AACnC;;;;;;GAMG;AACH,MAAM,GAAG,GAAG,qBAAqB,CAAC;AAClC,MAAM,KAAK,GAAG,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AAC7C,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,sBAAsB;AAErD;;;;;;;;GAQG;AACH,MAAM,aAAa,GAAG,OAAO,CAAC;AAW9B,IAAI,UAAU,GAA+C,IAAI,CAAC;AAElE;;;;;;;GAOG;AACH,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAE9B;;;;;;;GAOG;AACH,IAAI,SAAS,GAAG,aAAa,CAAC;AAE9B,MAAM,UAAU,YAAY,CAAC,EAAU;IACrC,SAAS,GAAG,EAAE,CAAC;AACjB,CAAC;AAED,8EAA8E;AAC9E,KAAK,UAAU,GAAG,CAAC,GAAW;IAC5B,OAAO,KAAK,CAAC,GAAG,EAAE;QAChB,OAAO,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE;QACpC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,gBAAgB,CAAC;KAC9C,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,CAAS;IACjC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAE7B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CACb,qBAAqB,GAAG,CAAC,IAAI,gDAAgD;cACzE,2CAA2C,CAChD,CAAC;IACJ,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,aAAa,GAAG,EAAE;IAC3D,MAAM,OAAO,GAAe,EAAE,CAAC;IAC/B,IAAI,OAAO,GAAG,SAAS,CAAC;IAExB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAExC,IAAI,CAAC,EAAE,CAAC;YACN,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACtB,SAAS;QACX,CAAC;QAED,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAEnE,IAAI,CAAC,EAAE,CAAC;YACN,OAAO,CAAC,IAAI,CAAC;gBACX,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;gBAClB,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;gBAChB,uEAAuE;gBACvE,wEAAwE;gBACxE,sDAAsD;gBACtD,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,kCAAkC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE;gBAChF,OAAO,EAAE,OAAO,GAAG,aAAa;aACjC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,IAAI,UAAU,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,EAAE,GAAG,MAAM;QAAE,OAAO,UAAU,CAAC,OAAO,CAAC;IAEjF,IAAI,IAAY,CAAC;IAEjB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,IAAI,WAAW,CAAC,CAAC;QAE1C,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAEnD,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,6EAA6E;QAC7E,6EAA6E;QAC7E,+EAA+E;QAC/E,IAAI,UAAU;YAAE,OAAO,UAAU,CAAC,OAAO,CAAC;QAE1C,MAAM,IAAI,KAAK,CACb,6BAA6B,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAC3E,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAEhD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,GAAG,WAAW,CAAC,CAAC;QAE5C,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;YACd,yEAAyE;YACzE,6EAA6E;YAC7E,gEAAgE;YAChE,KAAK,MAAM,CAAC,IAAI,YAAY,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,EAAE,gBAAgB,CAAC,EAAE,CAAC;gBACpE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;oBACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAChB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,4DAA4D;IAC9D,CAAC;IAED,UAAU,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC;IAEzC,OAAO,OAAO,CAAC;AACjB,CAAC;AAmBD,IAAI,WAAW,GAAkB,IAAI,CAAC;AACtC;;;GAGG;AACH,IAAI,cAAc,GAA2B,IAAI,CAAC;AAElD,KAAK,UAAU,IAAI,CAAC,IAAY,EAAE,QAAiB;IACjD,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC;IAExC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,IAAI,QAAQ;YAAE,OAAO,IAAI,CAAC;QAE1B,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,UAAU,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,IAAI,WAAW,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,EAAE,GAAG,MAAM;QAAE,OAAO,WAAW,CAAC;IAC5E,IAAI,cAAc;QAAE,OAAO,cAAc,CAAC;IAE1C,cAAc,GAAG,CAAC,KAAK,IAAI,EAAE;QAC3B,IAAI,CAAC;YACH,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAC3D,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAyB;gBACzD,IAAI,CAAC,mBAAmB,EAAE,KAAK,CAAgC;gBAC/D,IAAI,CAAC,yBAAyB,EAAE,IAAI,CAAgC;gBACpE,IAAI,CAAC,wBAAwB,EAAE,IAAI,CAAuC;aAC3E,CAAC,CAAC;YAEH,2EAA2E;YAC3E,wEAAwE;YACxE,iBAAiB,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;YAC/C,iBAAiB,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;YAE7C,IAAI,SAAS;gBAAE,iBAAiB,CAAC,yBAAyB,EAAE,SAAS,CAAC,CAAC;YACvE,IAAI,QAAQ;gBAAE,iBAAiB,CAAC,wBAAwB,EAAE,QAAQ,CAAC,CAAC;YAEpE,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC5B,OAAO,CAAC,KAAK,CACX,8EAA8E;sBAC1E,+EAA+E,CACpF,CAAC;YACJ,CAAC;YAED,WAAW,GAAG;gBACZ,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;gBACd,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;gBAC5B,IAAI,EAAE,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC;gBAClC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI;gBACvD,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;aAC7D,CAAC;YAEF,OAAO,WAAW,CAAC;QACrB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,iFAAiF;YACjF,sEAAsE;YACtE,IAAI,WAAW;gBAAE,OAAO,WAAW,CAAC;YAEpC,MAAM,IAAI,KAAK,CACb,yCAAyC,IAAI,GAAG;kBAC5C,IAAI,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CACtD,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,cAAc,GAAG,IAAI,CAAC;QACxB,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;IAEL,OAAO,cAAc,CAAC;AACxB,CAAC;AAeD,MAAM,aAAa,GAAG,IAAI,GAAG,EAAiD,CAAC;AAC/E,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAyC,CAAC;AAE1E;;;;;;;;GAQG;AACH,KAAK,UAAU,YAAY,CAAC,MAAc;IACxC,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEtC,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,MAAM;QAAE,OAAO,GAAG,CAAC,MAAM,CAAC;IAE3D,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAE5C,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE;QACvB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM,uBAAuB,CAAC,CAAC;YAExD,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YAEnD,MAAM,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAkB,CAAC;YAEnD,iBAAiB,CAAC,uBAAuB,EAAE,MAAmC,CAAC,CAAC;YAEhF,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACtD,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;YACpC,CAAC;YAED,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YAEtD,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,iFAAiF;YACjF,kFAAkF;YAClF,oEAAoE;YACpE,IAAI,GAAG;gBAAE,OAAO,GAAG,CAAC,MAAM,CAAC;YAE3B,OAAO,CAAC,KAAK,CACX,GAAG,MAAM,uCAAuC;kBAC5C,IAAI,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,sCAAsC,CACzF,CAAC;YAEF,OAAO,IAAI,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;IAEL,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAEnC,OAAO,IAAI,CAAC;AACd,CAAC;AAaD,MAAM,SAAS,GAAG,CAAC,IAAY,EAA0C,EAAE;IACzE,MAAM,CAAC,GAAG,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE7C,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACvD,CAAC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAC1B,QAAgB,EAChB,MAAwC,EACxC,MAAc;IAEd,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAE7B,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;IAE3B,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEvC,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAEpC,sFAAsF;IACtF,qFAAqF;IACrF,oCAAoC;IACpC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAEtB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SACnC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACjC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IAEvB,qFAAqF;IACrF,qDAAqD;IACrD,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,IAAI,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC;IAExB,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAE9B,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,OAAO,EAAE,CAAC;YAC3B,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACvB,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC;YAElB,IAAI,OAAO,KAAK,CAAC;gBAAE,MAAM;QAC3B,CAAC;IACH,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QACxF,OAAO,EAAE;YACP,OAAO,EAAE,GAAG,CAAC,IAAI;YACjB,SAAS,EAAE,SAAS,CAAC,OAAO,EAAE;YAC9B,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;YAClC,KAAK,EAAE,OAAO,CAAC,MAAM;SACtB;KACF,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,SAAS,CAAC,CAAW,EAAE,GAAW;IACzC,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAEhC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,OAAO,CACL,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,KAAK,EAAE,CAAC;WAClD,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,KAAK,GAAG,CAAC,CAClD,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AAC7D,CAAC;AAED;;;;;;GAMG;AACH,SAAS,MAAM,CAAC,CAAS,EAAE,IAAI,GAAG,IAAI;IACpC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAE7B,OAAO,GAAG,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAS,QAAQ,CAAC,GAAQ,EAAE,OAA4B;IACtD,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IACvB,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC;IAE1D,IAAI,MAAM,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO,SAAS,MAAM,CAAC,CAAC,IAAI,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC5E,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAEvE,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IAExB,mFAAmF;IACnF,iFAAiF;IACjF,oCAAoC;IACpC,IAAI,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC;QAC/B,OAAO,YAAY,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IAC9C,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAEjE,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC;AACvD,CAAC;AAED,4EAA4E;AAC5E,SAAS,QAAQ,CAAC,IAAY,EAAE,GAAW;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAE/C,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,KAAK,CAAC;IAEtC,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAEnC,OAAO,GAAG,CAAC,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC;AACzE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,aAAa,GAAG,GAAG,CAAC;AAE1B,SAAS,QAAQ,CAAC,GAAQ;IACxB,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAEvB,oFAAoF;IACpF,kEAAkE;IAClE,IAAI,GAAG,CAAC,OAAO;QAAE,OAAO,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,aAAa,CAAC,CAAC;IAElE,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,aAAa,CAAC,CAAC;IAExD,+EAA+E;IAC/E,+BAA+B;IAC/B,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,wCAAwC,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;AACvF,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,SAAS,OAAO,CAAC,IAAW;IAC1B,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CACnB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACP,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;WACd,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;WACrC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAC3C,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,SAAS,CAAC,IAAW,EAAE,OAA4B,EAAE,KAAa;IACzE,MAAM,GAAG,GAAe,EAAE,CAAC;IAE3B,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,IAAI,GAAG,CAAC,MAAM,IAAI,KAAK;YAAE,MAAM;QAE/B,GAAG,CAAC,IAAI,CAAC;YACP,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YACnB,GAAG,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE;YAClD,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC;YAC1B,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;YAC/B,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChD,CAAC,CAAC;IACL,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,2DAA2D;AAC3D,SAAS,eAAe,CAAC,OAAmB;IAC1C,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEtC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,gFAAgF;QAChF,uDAAuD;QACvD,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QAE/D,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAS,WAAW,CAAC,KAAa,EAAE,GAAY;IAC9C,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE3C,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AACjD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAa,EAAE,KAAK,GAAG,CAAC,EAAE,GAAY;IACrE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IAEzE,OAAO,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;AACxD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,UAAU,CACxB,MAAc,EACd,OAAmB,EACnB,KAAa,EACb,KAAK,GAAG,CAAC,EACT,GAAY;IAEZ,mFAAmF;IACnF,kFAAkF;IAClF,mFAAmF;IACnF,WAAW;IACX,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC;IAC/B,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAC9B,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC;IACnC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC;IAElC,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAE1D,qFAAqF;IACrF,uFAAuF;IACvF,oFAAoF;IACpF,EAAE;IACF,qFAAqF;IACrF,qFAAqF;IACrF,wFAAwF;IACxF,qFAAqF;IACrF,8BAA8B;IAC9B,EAAE;IACF,qFAAqF;IACrF,qFAAqF;IACrF,8CAA8C;IAC9C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAEpC,OAAO,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;AAC3E,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAa;IACzC,MAAM,OAAO,GAAG,MAAM,SAAS,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC9D,CAAC;IAED,oFAAoF;IACpF,mFAAmF;IACnF,6EAA6E;IAC7E,mFAAmF;IACnF,qDAAqD;IACrD,EAAE;IACF,qFAAqF;IACrF,kFAAkF;IAClF,IAAI,EAAE,GAA2B,EAAE,CAAC;IACpC,IAAI,KAAK,GAAa,EAAE,CAAC;IAEzB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;QAElC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;QAC1B,mFAAmF;QACnF,8EAA8E;QAC9E,2BAA2B;QAC3B,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACnC,CAAC;IAED,MAAM,WAAW,GAAkC,EAAE,CAAC;IACtD,iFAAiF;IACjF,gFAAgF;IAChF,sDAAsD;IACtD,MAAM,WAAW,GAAG,CAAC,CAAC;IACtB,MAAM,aAAa,GAAG,CAAC,CAAC;IAExB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QACnC,8EAA8E;QAC9E,8EAA8E;QAC9E,yBAAyB;QACzB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CACrB,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,CAAC,MAAM,IAAI,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;eAClE,CAAC,CAAC,CAAC,MAAM,IAAI,aAAa,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;eAC/C,CAAC,IAAI,CAAC,MAAM,IAAI,aAAa,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CACxD,CAAC;QAEF,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,gFAAgF;IAChF,8BAA8B;IAC9B,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAErF,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AAC/B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,MAAM,GAAG,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACtC,MAAM,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC;IACvB,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAE7C,0EAA0E;IAC1E,gEAAgE;IAChE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,IAAI,CAAC;IAE5D,OAAO,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;AACjE,CAAC;AAYD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAAe;IAC1C,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACvE,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;IAE5B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;QAE1B,wEAAwE;QACxE,2EAA2E;QAC3E,8EAA8E;QAC9E,4EAA4E;QAC5E,oCAAoC;QACpC,IAAI,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;YAE5C,OAAO;gBACL,GAAG,EAAE,IAAI;gBACT,QAAQ,EAAE;oBACR,KAAK,IAAI,EAAE;oBACX,EAAE;oBACF,0EAA0E;oBAC1E,wBAAwB,GAAG,CAAC,MAAM,iBAAiB,IAAI,GAAG;oBAC1D,EAAE;oBACF,uEAAuE;oBACvE,uBAAuB,IAAI,GAAG;iBAC/B,CAAC,IAAI,CAAC,IAAI,CAAC;gBACZ,SAAS,EAAE,KAAK;aACjB,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,KAAK,CACb,mBAAmB,IAAI,UAAU,GAAG,CAAC,MAAM,8CAA8C,CAC1F,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAE9B,uFAAuF;IACvF,iEAAiE;IACjE,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,GAAG,CAAC;QACjF,MAAM,IAAI,GAAG,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACjE,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAE3D,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QACvF,CAAC;QAED,qFAAqF;QACrF,mEAAmE;QACnE,OAAO;YACL,GAAG,EAAE,IAAI;YACT,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC;YACtB,SAAS,EAAE,IAAI,CAAC,MAAM,GAAG,aAAa;YACtC,YAAY,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;SACnE,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,GAAG,aAAa,EAAE,CAAC;AACvF,CAAC;AAED,SAAS,MAAM,CAAC,IAAY;IAC1B,IAAI,IAAI,CAAC,MAAM,IAAI,aAAa;QAAE,OAAO,IAAI,CAAC;IAE9C,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,mBAAmB,IAAI,CAAC,MAAM,gBAAgB;UAChF,GAAG,aAAa,4DAA4D,CAAC;AACnF,CAAC"}

@@ -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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"}
{
"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": {