[{"data":1,"prerenderedAt":1342},["ShallowReactive",2],{"navigation_docs":3,"-docs-key-features-snippet-search":158,"-docs-key-features-snippet-search-surround":1337},[4,15,74,98,113],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started",[10],{"title":11,"path":12,"stem":13,"icon":14},"Zeeq Introduction","\u002Fdocs\u002Fgetting-started\u002Fintroduction","docs\u002F1.getting-started\u002F1.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"children":19,"page":6},"Key Features","\u002Fdocs\u002Fkey-features","docs\u002F3.key-features",[20,25,30,35,40,45,50,55,59,64,69],{"title":21,"path":22,"stem":23,"icon":24},"Membership Invitations","\u002Fdocs\u002Fkey-features\u002Fmembership-invitations","docs\u002F3.key-features\u002F1.membership-invitations","i-hugeicons-cube",{"title":26,"path":27,"stem":28,"icon":29},"Command Palette","\u002Fdocs\u002Fkey-features\u002Fcommand-palette","docs\u002F3.key-features\u002F10.command-palette","i-hugeicons-search-01",{"title":31,"path":32,"stem":33,"icon":34},"Library Import and Export","\u002Fdocs\u002Fkey-features\u002Flibrary-import-export","docs\u002F3.key-features\u002F11.library-import-export","i-lucide-package-open",{"title":36,"path":37,"stem":38,"icon":39},"LLM Settings Configuration","\u002Fdocs\u002Fkey-features\u002Fllm-settings-configuration","docs\u002F3.key-features\u002F2.llm-settings-configuration","i-hugeicons-ai-magic",{"title":41,"path":42,"stem":43,"icon":44},"Agent Code Review Findings","\u002Fdocs\u002Fkey-features\u002Fagent-code-review-findings","docs\u002F3.key-features\u002F3.agent-code-review-findings","i-lucide-list-checks",{"title":46,"path":47,"stem":48,"icon":49},"Credentials & API Tokens","\u002Fdocs\u002Fkey-features\u002Fcredentials","docs\u002F3.key-features\u002F4.credentials","i-hugeicons-key-01",{"title":51,"path":52,"stem":53,"icon":54},"Manual Document Libraries","\u002Fdocs\u002Fkey-features\u002Fmanual-document-libraries","docs\u002F3.key-features\u002F5.manual-document-libraries","i-lucide-library-big",{"title":56,"path":57,"stem":58,"icon":29},"Snippet Search","\u002Fdocs\u002Fkey-features\u002Fsnippet-search","docs\u002F3.key-features\u002F6.snippet-search",{"title":60,"path":61,"stem":62,"icon":63},"Shared Prompt Fragment","\u002Fdocs\u002Fkey-features\u002Fshared-prompt-fragment","docs\u002F3.key-features\u002F7.shared-prompt-fragment","i-lucide-notebook-pen",{"title":65,"path":66,"stem":67,"icon":68},"Code Review Sources & Telemetry","\u002Fdocs\u002Fkey-features\u002Fcode-review-sources","docs\u002F3.key-features\u002F8.code-review-sources","i-hugeicons-book-01",{"title":70,"path":71,"stem":72,"icon":73},"Excluding Documents from Code Reviews","\u002Fdocs\u002Fkey-features\u002Fcode-review-document-exclusion","docs\u002F3.key-features\u002F9.code-review-document-exclusion","i-lucide-eye-off",{"title":75,"path":76,"stem":77,"children":78,"page":6},"Runtime Configuration","\u002Fdocs\u002Fconfiguration","docs\u002F5.configuration",[79,84,89,93],{"title":80,"path":81,"stem":82,"icon":83},"Google Cloud Configuration","\u002Fdocs\u002Fconfiguration\u002Fgcp-runtime","docs\u002F5.configuration\u002F1.gcp-runtime","i-hugeicons-google",{"title":85,"path":86,"stem":87,"icon":88},"GitHub Configuration","\u002Fdocs\u002Fconfiguration\u002Fgithub-configuration","docs\u002F5.configuration\u002F2.github-configuration","i-hugeicons-github",{"title":90,"path":91,"stem":92},"Local OpenIddict Certificates","\u002Fdocs\u002Fconfiguration\u002Flocal-openiddict-certificates","docs\u002F5.configuration\u002F3.local-openiddict-certificates",{"title":94,"path":95,"stem":96,"icon":97},"System Admin Access","\u002Fdocs\u002Fconfiguration\u002Fsystem-admin-access","docs\u002F5.configuration\u002F4.system-admin-access","i-hugeicons-shield-01",{"title":99,"path":100,"stem":101,"children":102,"page":6},"Metrics","\u002Fdocs\u002Fmetrics","docs\u002F6.metrics",[103,108],{"title":104,"path":105,"stem":106,"icon":107},"Metrics Dashboard","\u002Fdocs\u002Fmetrics\u002Fmetrics-dashboard","docs\u002F6.metrics\u002F1.metrics-dashboard","i-hugeicons-analytics-01",{"title":109,"path":110,"stem":111,"icon":112},"Metrics Pipeline","\u002Fdocs\u002Fmetrics\u002Fmetrics-pipeline","docs\u002F6.metrics\u002F2.metrics-pipeline","i-hugeicons-database-02",{"title":114,"path":115,"stem":116,"children":117,"page":6},"Design and Architecture","\u002Fdocs\u002Farchitecture","docs\u002F9.architecture",[118,123,128,133,137,141,145,150,154],{"title":119,"path":120,"stem":121,"icon":122},"Caching","\u002Fdocs\u002Farchitecture\u002Fcaching","docs\u002F9.architecture\u002F1.caching","i-lucide-database",{"title":124,"path":125,"stem":126,"icon":127},"Messaging and Queueing","\u002Fdocs\u002Farchitecture\u002Fmessaging-and-queueing","docs\u002F9.architecture\u002F2.messaging-and-queueing","i-lucide-message-square",{"title":129,"path":130,"stem":131,"icon":132},"GitHub Comment Rendering","\u002Fdocs\u002Farchitecture\u002Fgithub-comment-rendering","docs\u002F9.architecture\u002F3.github-comment-rendering","i-lucide-github",{"title":134,"path":135,"stem":136},"GitHub Integration","\u002Fdocs\u002Farchitecture\u002Fgithub-integration","docs\u002F9.architecture\u002F4.github-integration",{"title":138,"path":139,"stem":140},"LLM Settings and Secret Storage","\u002Fdocs\u002Farchitecture\u002Fllm-settings-and-secret-storage","docs\u002F9.architecture\u002F5.llm-settings-and-secret-storage",{"title":142,"path":143,"stem":144},"Organization Activation and Routes","\u002Fdocs\u002Farchitecture\u002Forganization-activation-and-routes","docs\u002F9.architecture\u002F6.organization-activation-and-routes",{"title":146,"path":147,"stem":148,"icon":149},"MCP Uploaded-Diff Code Reviews","\u002Fdocs\u002Farchitecture\u002Fmcp-uploaded-diff-code-reviews","docs\u002F9.architecture\u002F7.mcp-uploaded-diff-code-reviews","i-lucide-file-search",{"title":151,"path":152,"stem":153},"Repository Content Ingest","\u002Fdocs\u002Farchitecture\u002Frepository-content-ingest","docs\u002F9.architecture\u002F8.repository-content-ingest",{"title":155,"path":156,"stem":157},"Telemetry Ingest","\u002Fdocs\u002Farchitecture\u002Ftelemetry-ingest","docs\u002F9.architecture\u002F9.telemetry-ingest",{"id":159,"title":56,"body":160,"description":1330,"extension":1331,"links":1332,"meta":1333,"navigation":1334,"path":57,"seo":1335,"stem":58,"__hash__":1336},"docs\u002Fdocs\u002F3.key-features\u002F6.snippet-search.md",{"type":161,"value":162,"toc":1314},"minimark",[163,168,177,180,230,237,241,260,263,279,286,291,298,302,325,329,357,364,387,394,439,465,469,472,506,509,576,583,595,599,605,668,683,690,909,927,934,938,944,1141,1147,1247,1251,1284,1295,1299,1310],[164,165,167],"h2",{"id":166},"summary","Summary",[169,170,171,172,176],"p",{},"Every document in a library (both manually-written private libraries and org-subscribed public sources) is automatically broken into ",[173,174,175],"strong",{},"snippets"," — prose sections and fenced code blocks — and indexed for fast, ranked retrieval. Snippet search lets an agent find the specific passage or code sample it needs across a whole corpus, instead of reading full documents one at a time.",[169,178,179],{},"There are two snippet kinds:",[181,182,183,199],"table",{},[184,185,186],"thead",{},[187,188,189,193,196],"tr",{},[190,191,192],"th",{},"Kind",[190,194,195],{},"Source",[190,197,198],{},"Content",[200,201,202,217],"tbody",{},[187,203,204,211,214],{},[205,206,207],"td",{},[208,209,210],"code",{},"Section",[205,212,213],{},"A document's prose, split by heading",[205,215,216],{},"Body text, excluding fenced code",[187,218,219,224,227],{},[205,220,221],{},[208,222,223],{},"Code",[205,225,226],{},"A document's fenced code blocks",[205,228,229],{},"The code fence content, plus its language and preceding-text context",[169,231,232,233,236],{},"Snippets are retrieved with ",[173,234,235],{},"hybrid ranking",": a semantic (vector) arm finds conceptually related content even without matching words, and a full-text arm finds exact keyword\u002Fidentifier matches. Results from both arms are fused with Reciprocal Rank Fusion (RRF), plus a boost when the query's extracted code identifiers overlap a snippet's own identifiers.",[164,238,240],{"id":239},"indexing","Indexing",[169,242,243,244,247,248,251,252,255,256,259],{},"Snippets are produced and embedded by a background sweep (",[208,245,246],{},"SnippetIndexingHostedService","), not synchronously on write. When a document's content changes, its ",[208,249,250],{},"ProcessingStatus"," resets to ",[208,253,254],{},"Pending","; the sweep ticks every 30 seconds (",[208,257,258],{},"AppSettings:SnippetIndexing:SweepIntervalSeconds",") and drains the entire pending backlog each tick — a large backfill runs at full throughput, not one batch per tick.",[169,261,262],{},"Each tick runs two stages:",[264,265,266,273],"ol",{},[267,268,269,272],"li",{},[173,270,271],{},"Parse and compose",": pending documents are parsed, split into section\u002Fcode snippets, and reconciled against previously stored rows by content hash. An unchanged snippet keeps its existing embedding; changed or new snippets get a fresh row with a null embedding, ready to be picked up by the next stage.",[267,274,275,278],{},[173,276,277],{},"Embed",": snippets with a missing or stale embedding are claimed in batches and sent to the embedding provider. Snippets are always full-text searchable immediately after step 1 — the vector arm only lights up once step 2 completes for that row.",[169,280,281,282,285],{},"A document that fails to parse is marked ",[208,283,284],{},"Failed"," and does not stall the rest of the sweep.",[287,288,290],"h3",{"id":289},"degraded-mode","Degraded mode",[169,292,293,294,297],{},"If the embedding provider is unavailable or times out (query path only — the sweep retries internally), search silently falls back to full-text-only ranking rather than failing the request. Callers can detect this via the ",[208,295,296],{},"degraded"," flag on results.",[287,299,301],{"id":300},"re-embedding-on-model-change","Re-embedding on model change",[169,303,304,305,308,309,312,313,316,317,320,321,324],{},"Each snippet's ",[208,306,307],{},"embedding_model"," column is stamped with the model + dimension count used to embed it (e.g. ",[208,310,311],{},"qwen3-embedding-8b@768","). Changing ",[208,314,315],{},"AppSettings:Llm:Embeddings:Model"," or ",[208,318,319],{},":Dimensions"," makes every existing row's stamp stale, so the sweep automatically re-claims and re-embeds the whole corpus with no separate migration or backfill script — the claim query matches on ",[208,322,323],{},"embedding_model IS DISTINCT FROM {current model}",".",[287,326,328],{"id":327},"forcing-a-full-reindex","Forcing a full reindex",[169,330,331,332,334,335,337,338,341,342,344,345,347,348,352,353,356],{},"The sweep only reprocesses a document when its ",[208,333,250],{}," is ",[208,336,254],{},"\u002F",[208,339,340],{},"Stale",", or a stale ",[208,343,240],{}," row (crash recovery). A document whose content hasn't changed since it was last indexed never becomes ",[208,346,254],{}," on its own — which matters whenever the ",[349,350,351],"em",{},"parsing or composition logic itself"," changes (e.g. a ",[208,354,355],{},"SnippetIdentifierExtractor"," tuning pass), since that kind of change isn't reflected in any stored row's content hash.",[169,358,359,360,363],{},"To force every document back through parse → compose → (re-)embed, reset ",[208,361,362],{},"processing_status"," directly:",[365,366,371],"pre",{"className":367,"code":368,"language":369,"meta":370,"style":370},"language-sql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","UPDATE zeeq.docs_library_documents SET processing_status = 'Pending', updated_at = now();\nUPDATE zeeq.docs_public_documents SET processing_status = 'Pending', updated_at = now();\n","sql","",[208,372,373,381],{"__ignoreMap":370},[374,375,378],"span",{"class":376,"line":377},"line",1,[374,379,380],{},"UPDATE zeeq.docs_library_documents SET processing_status = 'Pending', updated_at = now();\n",[374,382,384],{"class":376,"line":383},2,[374,385,386],{},"UPDATE zeeq.docs_public_documents SET processing_status = 'Pending', updated_at = now();\n",[169,388,389,390,393],{},"Scope to one library or one public source instead of the whole corpus by adding a ",[208,391,392],{},"WHERE",":",[365,395,397],{"className":367,"code":396,"language":369,"meta":370,"style":370},"UPDATE zeeq.docs_library_documents\nSET processing_status = 'Pending', updated_at = now()\nWHERE organization_id = '\u003Corg_id>' AND library_id = '\u003Clibrary_id>';\n\nUPDATE zeeq.docs_public_documents\nSET processing_status = 'Pending', updated_at = now()\nWHERE public_source_id = '\u003Cpublic_source_id>';\n",[208,398,399,404,409,415,422,428,433],{"__ignoreMap":370},[374,400,401],{"class":376,"line":377},[374,402,403],{},"UPDATE zeeq.docs_library_documents\n",[374,405,406],{"class":376,"line":383},[374,407,408],{},"SET processing_status = 'Pending', updated_at = now()\n",[374,410,412],{"class":376,"line":411},3,[374,413,414],{},"WHERE organization_id = '\u003Corg_id>' AND library_id = '\u003Clibrary_id>';\n",[374,416,418],{"class":376,"line":417},4,[374,419,421],{"emptyLinePlaceholder":420},true,"\n",[374,423,425],{"class":376,"line":424},5,[374,426,427],{},"UPDATE zeeq.docs_public_documents\n",[374,429,431],{"class":376,"line":430},6,[374,432,408],{},[374,434,436],{"class":376,"line":435},7,[374,437,438],{},"WHERE public_source_id = '\u003Cpublic_source_id>';\n",[169,440,441,442,445,446,449,450,453,454,457,458,337,461,464],{},"The sweep picks these up on its next tick (",[208,443,444],{},"SweepIntervalSeconds",", 30s by default) — no restart needed. Reconciliation still matches composed snippets against stored rows by ",[208,447,448],{},"(Kind, ContentHash, Ordinal)",": since content is unchanged, every row matches and keeps its existing embedding (no wasted provider calls), but ",[208,451,452],{},"EmbeddingPayload"," and ",[208,455,456],{},"Identifiers"," are unconditionally refreshed on a match — the same self-healing fix in ",[208,459,460],{},"PostgresLibraryDocumentSnippetStore",[208,462,463],{},"PostgresPublicDocumentSnippetStore"," that stops a parsing\u002Fextraction logic change from being silently invisible on already-indexed content.",[164,466,468],{"id":467},"mcp-tools","MCP Tools",[169,470,471],{},"Two MCP tools expose snippet search to agents, split by kind so an agent can target the retrieval mode it actually needs:",[181,473,474,484],{},[184,475,476],{},[187,477,478,481],{},[190,479,480],{},"Tool",[190,482,483],{},"Use for",[200,485,486,496],{},[187,487,488,493],{},[205,489,490],{},[208,491,492],{},"search_sections",[205,494,495],{},"Conceptual guidance, constraints, rationale, tradeoffs, edge cases, and best practices — prose.",[187,497,498,503],{},[205,499,500],{},[208,501,502],{},"search_code_snippets",[205,504,505],{},"Concrete code patterns, reference implementations, API shapes, local idioms, and boilerplate.",[169,507,508],{},"Both tools share the same required\u002Foptional parameters:",[181,510,511,524],{},[184,512,513],{},[187,514,515,518,521],{},[190,516,517],{},"Parameter",[190,519,520],{},"Required",[190,522,523],{},"Notes",[200,525,526,539,551,564],{},[187,527,528,533,536],{},[205,529,530],{},[208,531,532],{},"library",[205,534,535],{},"Yes",[205,537,538],{},"Exactly one library name — there is no \"search all libraries\" mode. The org id is always read from claims, never from tool input.",[187,540,541,546,548],{},[205,542,543],{},[208,544,545],{},"query",[205,547,535],{},[205,549,550],{},"Task\u002Ftopic intent, plus relevant key phrases, symbols, or identifiers.",[187,552,553,558,561],{},[205,554,555],{},[208,556,557],{},"excludeDocumentPaths",[205,559,560],{},"No",[205,562,563],{},"Document paths already read; excluded from results.",[187,565,566,571,573],{},[205,567,568],{},[208,569,570],{},"maxResults",[205,572,560],{},[205,574,575],{},"Defaults to 5, clamped to 1..15.",[169,577,578,579,582],{},"Results are formatted as markdown, grouped by source document, with a pointer to ",[208,580,581],{},"read_document_by_path"," for the full document. A degraded-mode search appends a single note line stating that semantic ranking was unavailable.",[169,584,585,586,337,588,590,591,594],{},"Prefer ",[208,587,492],{},[208,589,502],{}," over reading whole documents when only a focused passage is needed — they are the finer-grained sibling of ",[208,592,593],{},"search_documents",", which ranks whole documents rather than snippets within them.",[164,596,598],{"id":597},"http-api","HTTP API",[169,600,601,604],{},[208,602,603],{},"GET \u002Fapi\u002Fv1\u002Forgs\u002F{orgId}\u002Flibraries\u002F{name}\u002Fsnippets\u002Fsearch"," — org and library are both route segments, matching every other library\u002Fdocument endpoint's convention.",[181,606,607,618],{},[184,608,609],{},[187,610,611,614,616],{},[190,612,613],{},"Query parameter",[190,615,520],{},[190,617,523],{},[200,619,620,636,647,658],{},[187,621,622,627,629],{},[205,623,624],{},[208,625,626],{},"kind",[205,628,535],{},[205,630,631,316,634,324],{},[208,632,633],{},"section",[208,635,208],{},[187,637,638,642,644],{},[205,639,640],{},[208,641,545],{},[205,643,535],{},[205,645,646],{},"Search text.",[187,648,649,653,655],{},[205,650,651],{},[208,652,557],{},[205,654,560],{},[205,656,657],{},"Repeated query parameter.",[187,659,660,664,666],{},[205,661,662],{},[208,663,570],{},[205,665,560],{},[205,667,575],{},[169,669,670,671,674,675,316,677,679,680,324],{},"An unknown library name returns ",[208,672,673],{},"404","; a missing\u002Finvalid ",[208,676,626],{},[208,678,545],{}," returns ",[208,681,682],{},"400",[169,684,685,686,689],{},"Each result row includes the same fields the MCP tools use to rank internally, so this endpoint doubles as a ",[173,687,688],{},"tuning workbench"," — it exists to let a person inspect and tune ranking, not just to serve results:",[365,691,695],{"className":692,"code":693,"language":694,"meta":370,"style":370},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"documentPath\": \"guides\u002Fgetting-started.md\",\n  \"documentTitle\": \"Getting Started\",\n  \"headingPath\": \"Guide > Install > Linux\",\n  \"header\": \"Install\",\n  \"language\": null,\n  \"content\": \"...\",\n  \"score\": 0.031,\n  \"vectorRank\": 1,\n  \"textRank\": 3,\n  \"identifierMatch\": false,\n  \"degraded\": false\n}\n","json",[208,696,697,703,729,748,768,788,802,822,840,857,874,889,903],{"__ignoreMap":370},[374,698,699],{"class":376,"line":377},[374,700,702],{"class":701},"sMK4o","{\n",[374,704,705,708,712,715,717,720,724,726],{"class":376,"line":383},[374,706,707],{"class":701},"  \"",[374,709,711],{"class":710},"spNyl","documentPath",[374,713,714],{"class":701},"\"",[374,716,393],{"class":701},[374,718,719],{"class":701}," \"",[374,721,723],{"class":722},"sfazB","guides\u002Fgetting-started.md",[374,725,714],{"class":701},[374,727,728],{"class":701},",\n",[374,730,731,733,736,738,740,742,744,746],{"class":376,"line":411},[374,732,707],{"class":701},[374,734,735],{"class":710},"documentTitle",[374,737,714],{"class":701},[374,739,393],{"class":701},[374,741,719],{"class":701},[374,743,5],{"class":722},[374,745,714],{"class":701},[374,747,728],{"class":701},[374,749,750,752,755,757,759,761,764,766],{"class":376,"line":417},[374,751,707],{"class":701},[374,753,754],{"class":710},"headingPath",[374,756,714],{"class":701},[374,758,393],{"class":701},[374,760,719],{"class":701},[374,762,763],{"class":722},"Guide > Install > Linux",[374,765,714],{"class":701},[374,767,728],{"class":701},[374,769,770,772,775,777,779,781,784,786],{"class":376,"line":424},[374,771,707],{"class":701},[374,773,774],{"class":710},"header",[374,776,714],{"class":701},[374,778,393],{"class":701},[374,780,719],{"class":701},[374,782,783],{"class":722},"Install",[374,785,714],{"class":701},[374,787,728],{"class":701},[374,789,790,792,795,797,799],{"class":376,"line":430},[374,791,707],{"class":701},[374,793,794],{"class":710},"language",[374,796,714],{"class":701},[374,798,393],{"class":701},[374,800,801],{"class":701}," null,\n",[374,803,804,806,809,811,813,815,818,820],{"class":376,"line":435},[374,805,707],{"class":701},[374,807,808],{"class":710},"content",[374,810,714],{"class":701},[374,812,393],{"class":701},[374,814,719],{"class":701},[374,816,817],{"class":722},"...",[374,819,714],{"class":701},[374,821,728],{"class":701},[374,823,825,827,830,832,834,838],{"class":376,"line":824},8,[374,826,707],{"class":701},[374,828,829],{"class":710},"score",[374,831,714],{"class":701},[374,833,393],{"class":701},[374,835,837],{"class":836},"sbssI"," 0.031",[374,839,728],{"class":701},[374,841,843,845,848,850,852,855],{"class":376,"line":842},9,[374,844,707],{"class":701},[374,846,847],{"class":710},"vectorRank",[374,849,714],{"class":701},[374,851,393],{"class":701},[374,853,854],{"class":836}," 1",[374,856,728],{"class":701},[374,858,860,862,865,867,869,872],{"class":376,"line":859},10,[374,861,707],{"class":701},[374,863,864],{"class":710},"textRank",[374,866,714],{"class":701},[374,868,393],{"class":701},[374,870,871],{"class":836}," 3",[374,873,728],{"class":701},[374,875,877,879,882,884,886],{"class":376,"line":876},11,[374,878,707],{"class":701},[374,880,881],{"class":710},"identifierMatch",[374,883,714],{"class":701},[374,885,393],{"class":701},[374,887,888],{"class":701}," false,\n",[374,890,892,894,896,898,900],{"class":376,"line":891},12,[374,893,707],{"class":701},[374,895,296],{"class":710},[374,897,714],{"class":701},[374,899,393],{"class":701},[374,901,902],{"class":701}," false\n",[374,904,906],{"class":376,"line":905},13,[374,907,908],{"class":701},"}\n",[169,910,911,337,913,915,916,919,920,923,924,926],{},[208,912,847],{},[208,914,864],{}," are 1-based ranks within each arm; ",[208,917,918],{},"0"," means the row was ",[173,921,922],{},"not"," a hit in that arm at all (not literal rank zero). ",[208,925,829],{}," is the fused RRF score, higher first.",[169,928,929,930,933],{},"The existing library \"Test search\" panel in the web UI (",[208,931,932],{},"src\u002Fweb\u002Fsrc\u002Fviews\u002Flibraries\u002FDocumentSearchPanel.vue",") exposes this endpoint through a three-mode toggle (Documents \u002F Sections \u002F Code) alongside the existing document search, rendering the score components so ranking behavior can be inspected visually.",[164,935,937],{"id":936},"configuration","Configuration",[287,939,941],{"id":940},"appsettingssnippetindexing",[208,942,943],{},"AppSettings:SnippetIndexing",[181,945,946,959],{},[184,947,948],{},[187,949,950,953,956],{},[190,951,952],{},"Key",[190,954,955],{},"Default",[190,957,958],{},"Purpose",[200,960,961,976,990,1005,1020,1035,1049,1064,1079,1094,1109,1124],{},[187,962,963,968,973],{},[205,964,965],{},[208,966,967],{},"Enabled",[205,969,970],{},[208,971,972],{},"true",[205,974,975],{},"Master switch for the sweep.",[187,977,978,982,987],{},[205,979,980],{},[208,981,444],{},[205,983,984],{},[208,985,986],{},"30",[205,988,989],{},"Tick period; each tick drains the full pending backlog.",[187,991,992,997,1002],{},[205,993,994],{},[208,995,996],{},"ClaimBatchSize",[205,998,999],{},[208,1000,1001],{},"16",[205,1003,1004],{},"Documents claimed per claim round.",[187,1006,1007,1012,1017],{},[205,1008,1009],{},[208,1010,1011],{},"MaxParseConcurrency",[205,1013,1014],{},[208,1015,1016],{},"4",[205,1018,1019],{},"Parse\u002Fcompose stage width (CPU-bound).",[187,1021,1022,1027,1032],{},[205,1023,1024],{},[208,1025,1026],{},"EmbeddingBatchSize",[205,1028,1029],{},[208,1030,1031],{},"64",[205,1033,1034],{},"Snippets sent per embedding provider call.",[187,1036,1037,1042,1046],{},[205,1038,1039],{},[208,1040,1041],{},"MaxEmbeddingConcurrency",[205,1043,1044],{},[208,1045,1016],{},[205,1047,1048],{},"In-flight embedding provider calls.",[187,1050,1051,1056,1061],{},[205,1052,1053],{},[208,1054,1055],{},"PipelineCapacity",[205,1057,1058],{},[208,1059,1060],{},"8",[205,1062,1063],{},"Bounded channel capacity per pipeline stage.",[187,1065,1066,1071,1076],{},[205,1067,1068],{},[208,1069,1070],{},"MaxPayloadTokens",[205,1072,1073],{},[208,1074,1075],{},"8000",[205,1077,1078],{},"Embedding payload truncation ceiling.",[187,1080,1081,1086,1091],{},[205,1082,1083],{},[208,1084,1085],{},"EmbeddingLeaseMinutes",[205,1087,1088],{},[208,1089,1090],{},"10",[205,1092,1093],{},"Durable embedding-claim lease; reclaims orphaned claims from a crashed worker.",[187,1095,1096,1101,1106],{},[205,1097,1098],{},[208,1099,1100],{},"MinSectionChars",[205,1102,1103],{},[208,1104,1105],{},"80",[205,1107,1108],{},"Trivial sections below this length are skipped.",[187,1110,1111,1116,1121],{},[205,1112,1113],{},[208,1114,1115],{},"MaxSnippetsPerDocument",[205,1117,1118],{},[208,1119,1120],{},"500",[205,1122,1123],{},"Per-document snippet cap.",[187,1125,1126,1131,1135],{},[205,1127,1128],{},[208,1129,1130],{},"StaleIndexingMinutes",[205,1132,1133],{},[208,1134,1090],{},[205,1136,1137,1138,1140],{},"Age after which an ",[208,1139,240],{}," document is reclaimable — crash recovery.",[287,1142,1144],{"id":1143},"appsettingsllmembeddings",[208,1145,1146],{},"AppSettings:Llm:Embeddings",[181,1148,1149,1159],{},[184,1150,1151],{},[187,1152,1153,1155,1157],{},[190,1154,952],{},[190,1156,955],{},[190,1158,958],{},[200,1160,1161,1178,1193,1208,1232],{},[187,1162,1163,1167,1172],{},[205,1164,1165],{},[208,1166,967],{},[205,1168,1169],{},[208,1170,1171],{},"false",[205,1173,1174,1175,1177],{},"Master switch. When ",[208,1176,1171],{},", snippets are still parsed\u002Fcomposed and full-text searchable, but never get a vector — search runs in degraded (FTS-only) mode for every query.",[187,1179,1180,1185,1190],{},[205,1181,1182],{},[208,1183,1184],{},"Endpoint",[205,1186,1187],{},[208,1188,1189],{},"https:\u002F\u002Fapi.fireworks.ai\u002Finference\u002Fv1",[205,1191,1192],{},"OpenAI-compatible embeddings endpoint.",[187,1194,1195,1200,1205],{},[205,1196,1197],{},[208,1198,1199],{},"Model",[205,1201,1202],{},[208,1203,1204],{},"accounts\u002Ffireworks\u002Fmodels\u002Fqwen3-embedding-8b",[205,1206,1207],{},"Embedding model identifier.",[187,1209,1210,1215,1218],{},[205,1211,1212],{},[208,1213,1214],{},"ApiKey",[205,1216,1217],{},"—",[205,1219,1220,1221,1224,1225,1227,1228,1231],{},"Bound from ",[208,1222,1223],{},"AppSettings:Llm:Embeddings:ApiKey","; required outside Development when ",[208,1226,967],{},". Separate from the chat-completion key (",[208,1229,1230],{},"AppSettings:Llm:Models:Fast:ApiKey",") — different model, rotated independently.",[187,1233,1234,1239,1244],{},[205,1235,1236],{},[208,1237,1238],{},"Dimensions",[205,1240,1241],{},[208,1242,1243],{},"768",[205,1245,1246],{},"MRL truncation target passed to the provider per call.",[287,1248,1250],{"id":1249},"local-development","Local development",[365,1252,1256],{"className":1253,"code":1254,"language":1255,"meta":370,"style":370},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","dotnet user-secrets set \"AppSettings:Llm:Embeddings:ApiKey\" \"\u003Cfireworks-key>\"\n","bash",[208,1257,1258],{"__ignoreMap":370},[374,1259,1260,1264,1267,1270,1272,1274,1276,1278,1281],{"class":376,"line":377},[374,1261,1263],{"class":1262},"sBMFI","dotnet",[374,1265,1266],{"class":722}," user-secrets",[374,1268,1269],{"class":722}," set",[374,1271,719],{"class":701},[374,1273,1223],{"class":722},[374,1275,714],{"class":701},[374,1277,719],{"class":701},[374,1279,1280],{"class":722},"\u003Cfireworks-key>",[374,1282,1283],{"class":701},"\"\n",[169,1285,1286,1287,1290,1291,1294],{},"Same Fireworks account key used for the chat-completion ",[208,1288,1289],{},"Fast"," tier authorizes both — one account key, two separately-configured settings slices. Without this key set (or with ",[208,1292,1293],{},"Enabled: false","), the sweep still parses and full-text-indexes every document; only the vector arm is inactive, and search runs degraded.",[287,1296,1298],{"id":1297},"production","Production",[169,1300,1301,1302,1305,1306,324],{},"The embeddings API key ships as a Secret Manager secret (",[208,1303,1304],{},"AppSettings__Llm__Embeddings__ApiKey","), mounted as an environment variable on both the web service and worker pool — see ",[1307,1308,80],"a",{"href":1309},"\u002Fdocs\u002Fconfiguration\u002Fgcp-runtime#secrets-required",[1311,1312,1313],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":370,"searchDepth":383,"depth":383,"links":1315},[1316,1317,1322,1323,1324],{"id":166,"depth":383,"text":167},{"id":239,"depth":383,"text":240,"children":1318},[1319,1320,1321],{"id":289,"depth":411,"text":290},{"id":300,"depth":411,"text":301},{"id":327,"depth":411,"text":328},{"id":467,"depth":383,"text":468},{"id":597,"depth":383,"text":598},{"id":936,"depth":383,"text":937,"children":1325},[1326,1327,1328,1329],{"id":940,"depth":411,"text":943},{"id":1143,"depth":411,"text":1146},{"id":1249,"depth":411,"text":1250},{"id":1297,"depth":411,"text":1298},"Hybrid semantic + full-text search over indexed document sections and code snippets.","md",null,{},{"icon":29},{"title":56,"description":1330},"7e0pkYKd-5L9Cx5ALQ8lYgMYtn-pkPBjd-LIMPLSnNI",[1338,1340],{"title":51,"path":52,"stem":53,"description":1339,"icon":54,"children":-1},"How teams create, manage, search, and read manually maintained Markdown libraries.",{"title":60,"path":61,"stem":62,"description":1341,"icon":63,"children":-1},"Repository-wide guidance injected into every reviewer agent's prompt.",1784297365799]