From 24035a6c113a2db357436be4ff96e8093defc2c5 Mon Sep 17 00:00:00 2001 From: Ghazi Date: Fri, 10 Jul 2026 18:42:49 +0530 Subject: [PATCH 1/6] fix(security): XSS in threads plugin + invalid JSON in init template (S-7, F9) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - threads plugin: stop interpolating raw authors.json text into a ', + bio: 'evil\u2028lineTerminator' + }, + bob: 'not an object' +})); + +const orig = process.cwd(); +process.chdir(tmpDir); +try { + const out = generateScripts({ src: 'docs', _activeLocale: { id: 'en' } }, { sidebar: true }); + const html = out.bodyScriptsHtml; + console.log('--- output ---'); + console.log(html); + console.log('--- checks ---'); + const checks = { + // The dangerous form is `` of the outer wrapping + // tag itself is fine — we expect exactly one + // such occurrence (the closing tag) and it must be the LAST `` + // in the string. + 'has unescaped { + const matches = html.match(/(? v); + console.log(allPass ? '\nALL CHECKS PASS' : '\nFAILURES PRESENT'); + process.exit(allPass ? 0 : 1); +} finally { + process.chdir(orig); + await fs.rm(tmpDir, { recursive: true, force: true }); +} From 340ca26058b6f06646640f260980f5535f7de1a2 Mon Sep 17 00:00:00 2001 From: Ghazi Date: Fri, 10 Jul 2026 20:09:15 +0530 Subject: [PATCH 2/6] fix(0.8.11): cross-locale link, TUI error summary, docusaurus frontmatter, deploy node bump Targeted 0.8.11 backlog. Every fix here is non-breaking and verified against the full brute + feature test suites (543/543, 143/143, plus 5/5 in the threads XSS probe). Closes four open items from battle-test-reports/unified-issues.md. - M-5: cross-locale link to default locale prefix fr/index.md writing [English](/en/) produced a 404 because the default locale lives at root, not under its own prefix. Strip the default-locale prefix from absolute hrefs in the rendered markdown so cross-locale links point to the actual page. The strip runs before #167 relative-path rewrite so both passes see a clean path. Adds Test 3.5 in feature-integration.test.js with 6 assertions covering the fix and the no-regression for the online build (clean URLs without index.html suffix). - N-12: end-of-build error summary Previously the user saw "Build complete" and only later discovered plugin failures when downstream tools choked on a bad artifact. Now every failed plugin (load error or runtime error) is listed by name + hook + reason in the TUI before the build aborts, so the operator can grep for any of them. - T-Z14 / T-Z17: Docusaurus frontmatter translation Docusaurus-specific keys (id, sidebar_label) are now translated to docmd equivalents (drop id, sidebar_label -> nav_title) when running docmd migrate --docusaurus. Files that fail to parse keep their original content; a TUI line reports the count of files touched. - N-5 / N-8: deploy Dockerfile node version Bump packages/deployer/src/providers/docker.ts from node:20-alpine to node:22-alpine. Matches the 0.9.0 floor decision in repo memory and keeps the deployed image on the previous LTS (Node 22 is in maintenance until April 2027). Verified: - pnpm --filter @docmd/parser build: clean - pnpm --filter @docmd/core build: clean - node tests/runner.js --skip-setup: 543 passed, 0 failed - node tests/feature-integration.test.js: 143 passed (was 137) - node scripts/probe-threads-xss.mjs: all checks pass --- packages/core/src/commands/build.ts | 20 ++++++ packages/core/src/commands/migrate.ts | 82 +++++++++++++++++++++++ packages/core/src/engine/generator.ts | 6 ++ packages/deployer/src/providers/docker.ts | 2 +- packages/parser/src/markdown-processor.ts | 59 +++++++++++++--- tests/feature-integration.test.js | 36 ++++++++++ 6 files changed, 194 insertions(+), 11 deletions(-) diff --git a/packages/core/src/commands/build.ts b/packages/core/src/commands/build.ts index 319d6149..5fa9e59e 100644 --- a/packages/core/src/commands/build.ts +++ b/packages/core/src/commands/build.ts @@ -109,8 +109,16 @@ export async function buildSite(configPath: string, opts: any = {}) { // check, `docmd build` exits 0 even when a plugin is missing — the // site still builds but the user has no way to know a plugin was // dropped unless they read the warning text. + // N-12: list each failed plugin by name and reason in the TUI, so + // the operator doesn't have to dig through the error message string. const loadErrors = getPluginLoadErrors(); if (loadErrors.length > 0) { + if (!options.isDev && !options.quiet) { + TUI.error(`${loadErrors.length} plugin(s) could not be loaded`, ''); + for (const e of loadErrors) { + console.error(` ${TUI.red('•')} ${e.plugin} — ${e.message}`); + } + } const lines = loadErrors.map((e) => `${e.plugin}: ${e.message}`); throw new Error( `Build failed: ${loadErrors.length} plugin(s) could not be loaded:\n` + @@ -383,6 +391,18 @@ export async function buildSite(configPath: string, opts: any = {}) { const { getPluginErrors } = await import('@docmd/api'); const errors = getPluginErrors(); if (errors.length > 0) { + // N-12: surface every plugin error in one place. Previously the + // user saw "Build complete" and only later discovered failures when + // a generated page was missing or a downstream tool choked on a + // bad artifact. The summary lists every error with its plugin + + // hook, so the operator can grep for any of them. + if (!options.isDev && !options.quiet) { + TUI.error('Plugin errors during build', ''); + for (const err of errors) { + const filePart = err.filePath ? ` (${err.filePath})` : ''; + console.error(` ${TUI.red('•')} ${err.plugin} :: ${err.hook}${filePart} — ${err.message}`); + } + } throw new Error(`Build failed: ${errors.length} plugin error(s) occurred during execution.`); } diff --git a/packages/core/src/commands/migrate.ts b/packages/core/src/commands/migrate.ts index 941f27c5..d20afc6c 100644 --- a/packages/core/src/commands/migrate.ts +++ b/packages/core/src/commands/migrate.ts @@ -140,6 +140,71 @@ export async function migrateProject(options: { docusaurus?: boolean; mkdocs?: b return root.length > 0 ? root : null; }; + /** + * T-Z14 / T-Z17: walk a freshly-copied docs directory and translate + * Docusaurus-specific frontmatter keys to their docmd equivalents. + * + * `id:` → removed (docmd derives route ids from filenames) + * `sidebar_label:`→ `nav_title:` (the docmd-supported nav override) + * + * The translation is best-effort: a file that fails to parse keeps + * its original content. Returns the count of files touched. + */ + const translateDocusaurusFrontmatter = async (docsDir: string): Promise => { + const targets: string[] = []; + const walk = async (dir: string): Promise => { + const entries = await nativeFs.promises.readdir(dir, { withFileTypes: true }); + for (const entry of entries) { + const full = path.join(dir, entry.name); + if (entry.isDirectory()) { + if (entry.name === 'node_modules' || entry.name.startsWith('.')) continue; + await walk(full); + } else if (entry.isFile() && /\.(md|mdx|markdown)$/i.test(entry.name)) { + targets.push(full); + } + } + }; + await walk(docsDir); + + let count = 0; + for (const file of targets) { + const raw = await nativeFs.promises.readFile(file, 'utf8'); + const m = raw.match(/^---\r?\n([\s\S]*?)\r?\n---/); + if (!m) continue; + // Line-by-line parse: we only care about top-level `key: value` + // lines. Docusaurus lets these be unquoted, single-quoted, or + // double-quoted. Nested objects (e.g. `sidebar:` with sub-keys) + // are preserved as-is. + const lines = m[1].split('\n'); + let changed = false; + const newLines = lines.map((line) => { + const stripped = line.replace(/\r$/, ''); + const idMatch = stripped.match(/^\s*id\s*:\s*(.*?)\s*$/); + if (idMatch) { changed = true; return null; } + const slMatch = stripped.match(/^(\s*)sidebar_label\s*:\s*(.*?)\s*$/); + if (slMatch) { + changed = true; + const indent = slMatch[1]; + let val = slMatch[2]; + // Strip wrapping quotes if present so the rewritten value + // matches the original document's quote style as closely as + // possible. docmd accepts both forms. + const qm = val.match(/^['"](.*)['"]$/); + if (qm) val = qm[1]; + return `${indent}nav_title: ${val}`; + } + return stripped; + }).filter((l) => l !== null) as string[]; + + if (!changed) continue; + const newFm = newLines.join('\n'); + const newContent = raw.replace(/^---\r?\n[\s\S]*?\r?\n---/, `---\n${newFm}\n---`); + await nativeFs.promises.writeFile(file, newContent); + count++; + } + return count; + }; + if (options.docusaurus) { TUI.section('Docusaurus Migration'); const configPath = path.resolve(CWD, 'docusaurus.config.js'); @@ -190,6 +255,23 @@ export async function migrateProject(options: { docusaurus?: boolean; mkdocs?: b TUI.step('Created new docs directory', 'DONE'); } + // T-Z14 / T-Z17: translate Docusaurus-specific frontmatter keys. + // docmd derives route ids from filenames, so Docusaurus `id:` is + // dropped. `sidebar_label:` is preserved as `nav_title:` (a + // docmd-supported override of the auto-generated nav title). + // The translation is best-effort: files that fail to parse keep + // their original frontmatter, and a TUI line reports the count. + let fmTranslated = 0; + try { + const translated = await translateDocusaurusFrontmatter(newDocsDir); + fmTranslated = translated; + } catch (err: any) { + TUI.warn(`Frontmatter translation skipped: ${err.message}`); + } + if (fmTranslated > 0) { + TUI.step(`Translated Docusaurus frontmatter in ${fmTranslated} file(s)`, 'DONE'); + } + await nativeFs.promises.writeFile(path.resolve(CWD, 'docmd.config.js'), serializeConfig(docmdConfig)); TUI.step('Generated docmd.config.js', 'DONE'); diff --git a/packages/core/src/engine/generator.ts b/packages/core/src/engine/generator.ts index 48a6b783..ed1c8ef4 100644 --- a/packages/core/src/engine/generator.ts +++ b/packages/core/src/engine/generator.ts @@ -483,6 +483,12 @@ export async function renderPages({ config, srcDir, fallbackSrcDir, outputDir, h // #167: offline-mode + relative-path context for the markdown post-processor. isOfflineMode: options.offline === true, relativePathToRoot: relativePathToRootForMarkdown, + // M-5: tell the post-processor which locale is the default so it + // can strip the default-locale prefix from absolute hrefs + // (e.g. `/en/foo` from a `fr/` page → `/foo`, since the default + // locale lives at root, not under its own prefix). + defaultLocale: config._defaultLocale || null, + allLocales: (config._allLocales || []).map((l: any) => l.id), config: { base: config.base || '/' } }, hooks diff --git a/packages/deployer/src/providers/docker.ts b/packages/deployer/src/providers/docker.ts index 6cd2e4e3..11f0b2dd 100644 --- a/packages/deployer/src/providers/docker.ts +++ b/packages/deployer/src/providers/docker.ts @@ -24,7 +24,7 @@ export async function generateDocker(ctx: DeployContext): Promise<{ dockerfile: # --------------------------------------------------- # Stage 1: Build the docmd site -FROM node:20-alpine AS builder +FROM node:22-alpine AS builder WORKDIR /app # Copy dependency manifests first for optimal layer caching diff --git a/packages/parser/src/markdown-processor.ts b/packages/parser/src/markdown-processor.ts index 3527b4c7..01a4cebd 100644 --- a/packages/parser/src/markdown-processor.ts +++ b/packages/parser/src/markdown-processor.ts @@ -463,16 +463,28 @@ async function processContentAsync(rawString: string, mdInstance: any, config: a let htmlContent = mdInstance.render(markdownContent, env); - // #167 (permanent fix): in offline mode, rewrite every internal href in - // the rendered markdown so the output works in file://, HTTP servers, and - // custom domains identically. The button container (`:::`) already goes - // through `fixHtmlLinks` via the template helper, but the markdown-rendered - // HTML never did — that's why `` survived into the - // offline HTML and broke `file://` navigation. The post-process pass uses - // the same `fixHtmlLinks` logic so the two paths stay aligned. Non-offline - // builds are unchanged (clean URLs preserved). - if (env && env.isOfflineMode === true) { - htmlContent = rewriteInternalHrefsForOffline(htmlContent, env.relativePathToRoot || './', env.config?.base || '/'); + // #167 + M-5: rewrite internal hrefs so the output is correct in both + // file:// and HTTP-server deployment, and in both default and non-default + // locales. Two transforms in order: + // 1. `stripDefaultLocalePrefix` (M-5) — if the source page is in a + // non-default locale (e.g. `fr/`) and an href targets the default + // locale's prefix (e.g. `/en/foo`), drop the prefix so it points to + // where the default-locale page actually lives (`/foo`). Without + // this, `fr/index.md` linking to `[English](/en/)` produces a 404 + // because the default locale's content is at root, not under `/en/`. + // 2. `fixHtmlLinks` (#167) — make paths relative + offline-safe. + // The order matters: M-5 runs first so #167 sees a clean, correct path. + if (env) { + htmlContent = stripDefaultLocalePrefix(htmlContent, env.defaultLocale, env.allLocales, env.relativePathToRoot || './'); + if (env.isOfflineMode === true) { + htmlContent = rewriteInternalHrefsForOffline(htmlContent, env.relativePathToRoot || './', env.config?.base || '/'); + } else { + // M-5 also affects online builds: `fr/index.html` linking to + // `/en/` is a 404 on HTTP servers too, not just file://. Run the + // same fixHtmlLinks pass (without the offline-specific `index.html` + // suffix) so cross-locale paths stay clean and correct. + htmlContent = fixHtmlLinks(htmlContent, env.relativePathToRoot || './', env.config?.base || '/'); + } } if (hooks && hooks.onAfterParse) { @@ -495,6 +507,33 @@ async function processContentAsync(rawString: string, mdInstance: any, config: a return { frontmatter, htmlContent, headings, searchData }; } +/** + * M-5: strip the default-locale prefix from absolute hrefs in the rendered + * HTML. The default locale lives at root, not under its own prefix, so a + * link like `/en/foo` from a non-default-locale page is a 404 unless the + * prefix is dropped. We only run this when the source page is in a + * non-default locale (which is when the default-locale prefix could + * actually appear in author-written links). + * + * The function only touches absolute paths under root, only when the + * first segment matches the default locale id, and never touches + * external URLs / anchors / mailto. + */ +function stripDefaultLocalePrefix(html: string, defaultLocale: string | null, allLocales: string[] | undefined, _relativePathToRoot: string): string { + if (!defaultLocale || !allLocales || allLocales.length < 2) return html; + // Escape regex special chars in the locale id (e.g. "en-us" with hyphen). + const escaped = defaultLocale.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + // Match `` and `` where xx is the + // default locale. We do NOT touch `src=` (img) because images are + // typically under /assets/ and never locale-prefixed. We do NOT touch + // bare `/xx` at end of attribute (rare author pattern) — that case is + // ambiguous and the user can write `/` instead. + const re = new RegExp(`(]*?\\bhref\\s*=\\s*)(["'])(\\/${escaped}\\/)([^"'#]*)\\2`, 'gi'); + return html.replace(re, (_full, prefix, quote, _stripped, rest) => { + return `${prefix}${quote}/${rest}${quote}`; + }); +} + /** * Walk every `` and `` in a piece of rendered * HTML and rewrite internal links for offline mode. External URLs (http, diff --git a/tests/feature-integration.test.js b/tests/feature-integration.test.js index d0efbd5d..38f1b4a0 100644 --- a/tests/feature-integration.test.js +++ b/tests/feature-integration.test.js @@ -173,6 +173,42 @@ console.log('\n🌍 Test 3: i18n standalone (Hindi default)'); assert('English guide falls back from Hindi', siteExists(dir, 'en/guide/index.html')); } +// ─── TEST 3.5 (M-5): i18n cross-locale link to default locale prefix ─── +console.log('\n🌍 Test 3.5: i18n cross-locale link to default locale (M-5)'); +{ + // M-5: when the default locale lives at root and a non-default-locale + // page writes `[link](//foo)`, the build used to emit + // `` which 404s because the default-locale page is + // at `/foo`, not `/en/foo`. The fix strips the default-locale prefix + // from absolute hrefs in the rendered HTML so the link points to the + // actual location of the default-locale page. + const dir = setup('03.5-m5-cross-locale-link'); + writeFile(dir, 'docmd.config.js', `module.exports = { + title: 'M5 test', + src: 'docs', + i18n: { default: 'en', locales: [ + { id: 'en', label: 'English' }, + { id: 'fr', label: 'Français' } + ]} + };`); + writeFile(dir, 'docs/en/index.md', '# Welcome'); + writeFile(dir, 'docs/en/setup.md', '# Setup page'); + writeFile(dir, 'docs/fr/index.md', 'Voir la [version anglaise](/en/) et le [setup anglais](/en/setup).'); + const r = build(dir); + assert('builds M-5 scenario', r.ok); + const fr = readSite(dir, 'fr/index.html'); + assert('fr page does NOT link to /en/ (would 404)', fr && !/href="\/en\/"/.test(fr)); + assert('fr page does NOT link to /en/setup (would 404)', fr && !/href="\/en\/setup"/.test(fr)); + // The rewritten links should still resolve. Default-locale pages live + // at root, so `/en/` → `/` and `/en/setup` → `/setup` (or + // `/setup/`). Both should be present. + assert('default-locale index exists at root', siteExists(dir, 'index.html')); + assert('default-locale setup page exists', siteExists(dir, 'setup/index.html')); + // Online build keeps clean URLs — verify the link does NOT carry + // `/index.html` suffix (that would be the offline build behaviour). + assert('online build keeps clean URLs', fr && !/href="[^"]*index\.html"/.test(fr)); +} + // ─── TEST 4: Versioning standalone ─── console.log('\n📚 Test 4: Versioning standalone (no i18n)'); { From 261b2d367ceb67e3930eef2bb37f9b3b367eb5ae Mon Sep 17 00:00:00 2001 From: Ghazi Date: Fri, 10 Jul 2026 22:24:32 +0530 Subject: [PATCH 3/6] chore(release): bump version 0.8.10 -> 0.8.11 Mechanical version bump across all 27 published packages, the monorepo root, the @docmd/api plugin registry, and the rust engine Cargo manifest + lock. Drops the 12-line duplicate comment block in parser/src/markdown-processor.ts (the code was correct; only the comment describing it was redundant). No functional changes. --- package.json | 2 +- packages/_playground/package.json | 2 +- packages/api/package.json | 2 +- packages/api/registry/plugins.generated.json | 2 +- packages/core/package.json | 2 +- packages/deployer/package.json | 2 +- packages/engines/js/package.json | 2 +- packages/engines/js/src/index.ts | 2 +- .../bin/docmd-engine-darwin-arm64.node | Bin 771536 -> 771536 bytes .../engines/rust-binaries/native/Cargo.lock | 2 +- .../engines/rust-binaries/native/Cargo.toml | 2 +- packages/engines/rust-binaries/package.json | 2 +- packages/engines/rust/package.json | 2 +- packages/engines/rust/src/index.ts | 2 +- packages/legacy/doc.md/package.json | 2 +- packages/legacy/mgks/package.json | 2 +- packages/live/package.json | 2 +- packages/parser/package.json | 2 +- packages/parser/src/markdown-processor.ts | 12 ------------ packages/plugins/analytics/package.json | 2 +- packages/plugins/analytics/src/index.ts | 2 +- packages/plugins/git/package.json | 2 +- packages/plugins/git/src/index.ts | 2 +- packages/plugins/installer/package.json | 2 +- packages/plugins/llms/package.json | 2 +- packages/plugins/llms/src/index.ts | 2 +- packages/plugins/math/package.json | 2 +- packages/plugins/math/src/index.ts | 2 +- packages/plugins/mermaid/package.json | 2 +- packages/plugins/mermaid/src/index.ts | 2 +- packages/plugins/okf/package.json | 2 +- packages/plugins/okf/src/index.ts | 4 ++-- packages/plugins/openapi/package.json | 2 +- packages/plugins/openapi/src/index.ts | 2 +- packages/plugins/pwa/package.json | 2 +- packages/plugins/pwa/src/index.ts | 2 +- packages/plugins/search/package.json | 2 +- packages/plugins/search/src/index.ts | 2 +- packages/plugins/seo/package.json | 2 +- packages/plugins/seo/src/index.ts | 2 +- packages/plugins/sitemap/package.json | 2 +- packages/plugins/sitemap/src/index.ts | 2 +- packages/plugins/threads/package.json | 2 +- packages/plugins/threads/src/index.ts | 2 +- packages/templates/summer/package.json | 2 +- packages/templates/summer/src/index.ts | 2 +- packages/themes/package.json | 2 +- packages/tui/package.json | 2 +- packages/ui/package.json | 2 +- packages/utils/package.json | 2 +- 50 files changed, 49 insertions(+), 61 deletions(-) diff --git a/package.json b/package.json index 871dab5a..84221932 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@docmd/monorepo", - "version": "0.8.10", + "version": "0.8.11", "private": true, "description": "The minimalist, zero-config documentation generator monorepo.", "scripts": { diff --git a/packages/_playground/package.json b/packages/_playground/package.json index a86cc552..d8e5d8a3 100644 --- a/packages/_playground/package.json +++ b/packages/_playground/package.json @@ -1,6 +1,6 @@ { "name": "@docmd/playground", - "version": "0.8.10", + "version": "0.8.11", "private": true, "dependencies": { "@docmd/core": "workspace:*", diff --git a/packages/api/package.json b/packages/api/package.json index ded1d1e6..82b62424 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -1,6 +1,6 @@ { "name": "@docmd/api", - "version": "0.8.10", + "version": "0.8.11", "description": "Plugin API surface for docmd.", "type": "module", "main": "dist/index.js", diff --git a/packages/api/registry/plugins.generated.json b/packages/api/registry/plugins.generated.json index 2c337d0b..8486db86 100644 --- a/packages/api/registry/plugins.generated.json +++ b/packages/api/registry/plugins.generated.json @@ -1,6 +1,6 @@ { "$meta": { - "generatedAt": "2026-07-09T07:41:19.155Z", + "generatedAt": "2026-07-10T15:51:37.674Z", "generator": "scripts/build-plugin-registry.mjs", "packageCount": 15 }, diff --git a/packages/core/package.json b/packages/core/package.json index 55e9a62a..c68109a3 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@docmd/core", - "version": "0.8.10", + "version": "0.8.11", "description": "Build production-ready documentation from Markdown in seconds. No React, no bloat, just content.", "type": "module", "browser": false, diff --git a/packages/deployer/package.json b/packages/deployer/package.json index ad52ba5d..f4d79a90 100644 --- a/packages/deployer/package.json +++ b/packages/deployer/package.json @@ -1,6 +1,6 @@ { "name": "@docmd/deployer", - "version": "0.8.10", + "version": "0.8.11", "description": "Deployment configuration generator for docmd - Docker, Nginx, Caddy, GitHub Pages, Vercel, and Netlify.", "type": "module", "main": "dist/index.js", diff --git a/packages/engines/js/package.json b/packages/engines/js/package.json index 9c280176..b81c403d 100644 --- a/packages/engines/js/package.json +++ b/packages/engines/js/package.json @@ -1,6 +1,6 @@ { "name": "@docmd/engine-js", - "version": "0.8.10", + "version": "0.8.11", "description": "Default JavaScript engine for docmd using Node.js native APIs.", "type": "module", "main": "dist/index.js", diff --git a/packages/engines/js/src/index.ts b/packages/engines/js/src/index.ts index 06b94b7e..f0854be5 100644 --- a/packages/engines/js/src/index.ts +++ b/packages/engines/js/src/index.ts @@ -275,7 +275,7 @@ const handlers: Record = { export function createJsEngine(): Engine { return { name: 'js', - version: '0.8.10', + version: '0.8.11', supports(taskType: string): boolean { return taskType in handlers; diff --git a/packages/engines/rust-binaries/bin/docmd-engine-darwin-arm64.node b/packages/engines/rust-binaries/bin/docmd-engine-darwin-arm64.node index 498b48cd30b38e9d2e03e6c2b73f6355b4b47f5d..9fd0cdf327e3ecdac50a925efbbc352132528fdd 100755 GIT binary patch delta 97131 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 YC+_fnWF1a_nV~IgN8J%B_>AWKAJsc6Q2+n{ delta 97001 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 diff --git a/packages/engines/rust-binaries/native/Cargo.lock b/packages/engines/rust-binaries/native/Cargo.lock index 3fc3785b..cd89a9ce 100644 --- a/packages/engines/rust-binaries/native/Cargo.lock +++ b/packages/engines/rust-binaries/native/Cargo.lock @@ -50,7 +50,7 @@ dependencies = [ [[package]] name = "docmd-engine" -version = "0.8.10" +version = "0.8.11" dependencies = [ "napi", "napi-build", diff --git a/packages/engines/rust-binaries/native/Cargo.toml b/packages/engines/rust-binaries/native/Cargo.toml index a6f6ce21..ec3ff485 100644 --- a/packages/engines/rust-binaries/native/Cargo.toml +++ b/packages/engines/rust-binaries/native/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "docmd-engine" -version = "0.8.10" +version = "0.8.11" edition = "2021" description = "Native Node.js addon for the docmd Rust engine" license = "MIT" diff --git a/packages/engines/rust-binaries/package.json b/packages/engines/rust-binaries/package.json index 3459c4a5..3cd5aa4b 100644 --- a/packages/engines/rust-binaries/package.json +++ b/packages/engines/rust-binaries/package.json @@ -1,6 +1,6 @@ { "name": "@docmd/engine-rust-binaries", - "version": "0.8.10", + "version": "0.8.11", "description": "Pre-built Rust binaries for the docmd engine. All platforms bundled.", "scripts": { "build": "node build.js" diff --git a/packages/engines/rust/package.json b/packages/engines/rust/package.json index 8f428c1d..b336a618 100644 --- a/packages/engines/rust/package.json +++ b/packages/engines/rust/package.json @@ -1,6 +1,6 @@ { "name": "@docmd/engine-rust", - "version": "0.8.10", + "version": "0.8.11", "description": "Rust-accelerated engine for docmd. The postinstall script downloads a pre-built platform binary from npm CDN (unpkg/jsdelivr). No code is executed beyond copying the .node file. Source: https://github.com/docmd-io/docmd", "type": "module", "main": "dist/index.js", diff --git a/packages/engines/rust/src/index.ts b/packages/engines/rust/src/index.ts index fdcca722..d99b3cf6 100644 --- a/packages/engines/rust/src/index.ts +++ b/packages/engines/rust/src/index.ts @@ -129,7 +129,7 @@ export function createRustEngine(): Engine { return { name: 'rust', - version: '0.8.10', + version: '0.8.11', supports(_taskType: string): boolean { return true; diff --git a/packages/legacy/doc.md/package.json b/packages/legacy/doc.md/package.json index d8aa8d66..2aa2b782 100644 --- a/packages/legacy/doc.md/package.json +++ b/packages/legacy/doc.md/package.json @@ -1,6 +1,6 @@ { "name": "doc.md", - "version": "0.8.10", + "version": "0.8.11", "description": "Discontinued. Legacy wrapper for docmd. Please use @docmd/core.", "bin": { "docmd": "bin/docmd.js" diff --git a/packages/legacy/mgks/package.json b/packages/legacy/mgks/package.json index 8d9488af..04930f1c 100644 --- a/packages/legacy/mgks/package.json +++ b/packages/legacy/mgks/package.json @@ -1,6 +1,6 @@ { "name": "@mgks/docmd", - "version": "0.8.10", + "version": "0.8.11", "description": "Discontinued. Legacy wrapper for docmd. Please use @docmd/core.", "bin": { "docmd": "bin/docmd.js" diff --git a/packages/live/package.json b/packages/live/package.json index b09793b3..bd058088 100644 --- a/packages/live/package.json +++ b/packages/live/package.json @@ -1,6 +1,6 @@ { "name": "@docmd/live", - "version": "0.8.10", + "version": "0.8.11", "description": "Browser-based editor engine for docmd.", "type": "module", "main": "dist/index.js", diff --git a/packages/parser/package.json b/packages/parser/package.json index eca564a5..adf87d51 100644 --- a/packages/parser/package.json +++ b/packages/parser/package.json @@ -1,6 +1,6 @@ { "name": "@docmd/parser", - "version": "0.8.10", + "version": "0.8.11", "description": "Pure Markdown parsing engine for docmd.", "type": "module", "main": "dist/index.js", diff --git a/packages/parser/src/markdown-processor.ts b/packages/parser/src/markdown-processor.ts index 01a4cebd..56b71cf7 100644 --- a/packages/parser/src/markdown-processor.ts +++ b/packages/parser/src/markdown-processor.ts @@ -462,18 +462,6 @@ async function processContentAsync(rawString: string, mdInstance: any, config: a } let htmlContent = mdInstance.render(markdownContent, env); - - // #167 + M-5: rewrite internal hrefs so the output is correct in both - // file:// and HTTP-server deployment, and in both default and non-default - // locales. Two transforms in order: - // 1. `stripDefaultLocalePrefix` (M-5) — if the source page is in a - // non-default locale (e.g. `fr/`) and an href targets the default - // locale's prefix (e.g. `/en/foo`), drop the prefix so it points to - // where the default-locale page actually lives (`/foo`). Without - // this, `fr/index.md` linking to `[English](/en/)` produces a 404 - // because the default locale's content is at root, not under `/en/`. - // 2. `fixHtmlLinks` (#167) — make paths relative + offline-safe. - // The order matters: M-5 runs first so #167 sees a clean, correct path. if (env) { htmlContent = stripDefaultLocalePrefix(htmlContent, env.defaultLocale, env.allLocales, env.relativePathToRoot || './'); if (env.isOfflineMode === true) { diff --git a/packages/plugins/analytics/package.json b/packages/plugins/analytics/package.json index 07c990f0..ae750c47 100644 --- a/packages/plugins/analytics/package.json +++ b/packages/plugins/analytics/package.json @@ -1,6 +1,6 @@ { "name": "@docmd/plugin-analytics", - "version": "0.8.10", + "version": "0.8.11", "description": "Analytics injection plugin for docmd.", "type": "module", "main": "dist/index.js", diff --git a/packages/plugins/analytics/src/index.ts b/packages/plugins/analytics/src/index.ts index aac4eef3..1dffdd16 100644 --- a/packages/plugins/analytics/src/index.ts +++ b/packages/plugins/analytics/src/index.ts @@ -21,7 +21,7 @@ import { scriptLiteral } from '@docmd/utils'; export const plugin: PluginDescriptor = { name: 'analytics', - version: '0.8.10', + version: '0.8.11', capabilities: ['head', 'body'] }; diff --git a/packages/plugins/git/package.json b/packages/plugins/git/package.json index 78d650cf..110282e9 100644 --- a/packages/plugins/git/package.json +++ b/packages/plugins/git/package.json @@ -1,6 +1,6 @@ { "name": "@docmd/plugin-git", - "version": "0.8.10", + "version": "0.8.11", "description": "Git integration plugin for docmd.", "type": "module", "main": "dist/index.js", diff --git a/packages/plugins/git/src/index.ts b/packages/plugins/git/src/index.ts index 1b29d325..a6e5abbf 100644 --- a/packages/plugins/git/src/index.ts +++ b/packages/plugins/git/src/index.ts @@ -290,7 +290,7 @@ async function getGitFileInfo(filePath: string, maxCommits: number = 6): Promise export const plugin: PluginDescriptor = { name: 'git', - version: '0.8.10', + version: '0.8.11', capabilities: ['build', 'body', 'assets', 'translations', 'init', 'post-build'] }; diff --git a/packages/plugins/installer/package.json b/packages/plugins/installer/package.json index 441ce0bd..9bb4c69e 100644 --- a/packages/plugins/installer/package.json +++ b/packages/plugins/installer/package.json @@ -1,6 +1,6 @@ { "name": "@docmd/plugin-installer", - "version": "0.8.10", + "version": "0.8.11", "description": "Installer utility to add and remove plugins for docmd.", "type": "module", "main": "dist/index.js", diff --git a/packages/plugins/llms/package.json b/packages/plugins/llms/package.json index 842fa535..6ef399a9 100644 --- a/packages/plugins/llms/package.json +++ b/packages/plugins/llms/package.json @@ -1,6 +1,6 @@ { "name": "@docmd/plugin-llms", - "version": "0.8.10", + "version": "0.8.11", "description": "Generate llms.txt context files for AI agents from your docmd site.", "type": "module", "main": "dist/index.js", diff --git a/packages/plugins/llms/src/index.ts b/packages/plugins/llms/src/index.ts index a157d5af..a5cdeba3 100644 --- a/packages/plugins/llms/src/index.ts +++ b/packages/plugins/llms/src/index.ts @@ -19,7 +19,7 @@ import { outputPathToPathname, sanitizeUrl } from '@docmd/api'; export const plugin: PluginDescriptor = { name: 'llms', - version: '0.8.10', + version: '0.8.11', capabilities: ['post-build'] }; diff --git a/packages/plugins/math/package.json b/packages/plugins/math/package.json index 50be7008..96addb73 100644 --- a/packages/plugins/math/package.json +++ b/packages/plugins/math/package.json @@ -1,6 +1,6 @@ { "name": "@docmd/plugin-math", - "version": "0.8.10", + "version": "0.8.11", "description": "Mathematics (KaTeX/LaTeX) plugin for docmd.", "type": "module", "main": "dist/index.js", diff --git a/packages/plugins/math/src/index.ts b/packages/plugins/math/src/index.ts index 147181d9..82dd602c 100644 --- a/packages/plugins/math/src/index.ts +++ b/packages/plugins/math/src/index.ts @@ -18,7 +18,7 @@ import type { PluginDescriptor } from '@docmd/api'; export const plugin: PluginDescriptor = { name: 'math', - version: '0.8.10', + version: '0.8.11', capabilities: ['markdown', 'assets'] }; diff --git a/packages/plugins/mermaid/package.json b/packages/plugins/mermaid/package.json index 368f4b4d..93d0e44b 100644 --- a/packages/plugins/mermaid/package.json +++ b/packages/plugins/mermaid/package.json @@ -1,6 +1,6 @@ { "name": "@docmd/plugin-mermaid", - "version": "0.8.10", + "version": "0.8.11", "description": "Mermaid diagram support plugin for docmd.", "type": "module", "main": "dist/index.js", diff --git a/packages/plugins/mermaid/src/index.ts b/packages/plugins/mermaid/src/index.ts index c1b46aed..4f4ac24c 100644 --- a/packages/plugins/mermaid/src/index.ts +++ b/packages/plugins/mermaid/src/index.ts @@ -21,7 +21,7 @@ const __dirname = path.dirname(__filename); export const plugin: PluginDescriptor = { name: 'mermaid', - version: '0.8.10', + version: '0.8.11', capabilities: ['markdown', 'assets'] }; diff --git a/packages/plugins/okf/package.json b/packages/plugins/okf/package.json index 557ce65c..48bcca85 100644 --- a/packages/plugins/okf/package.json +++ b/packages/plugins/okf/package.json @@ -1,6 +1,6 @@ { "name": "@docmd/plugin-okf", - "version": "0.8.10", + "version": "0.8.11", "description": "Generate an Open Knowledge Format (OKF) bundle from your docmd site for AI agent consumption.", "type": "module", "main": "dist/index.js", diff --git a/packages/plugins/okf/src/index.ts b/packages/plugins/okf/src/index.ts index 68cbe704..76cb1cde 100644 --- a/packages/plugins/okf/src/index.ts +++ b/packages/plugins/okf/src/index.ts @@ -45,7 +45,7 @@ import { GRAPH_CSS, GRAPH_JS, graphHtml } from './graph-assets.js'; export const plugin: PluginDescriptor = { name: 'okf', - version: '0.8.10', + version: '0.8.11', capabilities: ['post-build'] }; @@ -223,7 +223,7 @@ export async function onPostBuild({ config, pages, outputDir, log }: any) { for (const c of concepts) byType[c.type] = (byType[c.type] || 0) + 1; const manifest = { - okf_version: '0.8.10', + okf_version: '0.8.11', bundle: { name: bundleName, title: config.title || bundleName, description: config.description || '', url: config.url || '', generated_by: '@docmd/plugin-okf', generated_at: new Date().toISOString(), diff --git a/packages/plugins/openapi/package.json b/packages/plugins/openapi/package.json index 23387f3e..784022a6 100644 --- a/packages/plugins/openapi/package.json +++ b/packages/plugins/openapi/package.json @@ -1,6 +1,6 @@ { "name": "@docmd/plugin-openapi", - "version": "0.8.10", + "version": "0.8.11", "description": "OpenAPI documentation generator plugin for docmd.", "type": "module", "main": "dist/index.js", diff --git a/packages/plugins/openapi/src/index.ts b/packages/plugins/openapi/src/index.ts index cc7cd1ec..4aaab8ce 100644 --- a/packages/plugins/openapi/src/index.ts +++ b/packages/plugins/openapi/src/index.ts @@ -24,7 +24,7 @@ const __dirname = path.dirname(fileURLToPath(import.meta.url)); export const plugin: PluginDescriptor = { name: 'openapi', - version: '0.8.10', + version: '0.8.11', capabilities: ['markdown', 'assets'] }; diff --git a/packages/plugins/pwa/package.json b/packages/plugins/pwa/package.json index 5b2dec79..fd3f084a 100644 --- a/packages/plugins/pwa/package.json +++ b/packages/plugins/pwa/package.json @@ -1,6 +1,6 @@ { "name": "@docmd/plugin-pwa", - "version": "0.8.10", + "version": "0.8.11", "description": "Progressive Web App (PWA) plugin for docmd.", "type": "module", "main": "dist/index.js", diff --git a/packages/plugins/pwa/src/index.ts b/packages/plugins/pwa/src/index.ts index 7ffa81ac..a016e678 100644 --- a/packages/plugins/pwa/src/index.ts +++ b/packages/plugins/pwa/src/index.ts @@ -19,7 +19,7 @@ import { attrEsc } from '@docmd/utils'; export const plugin: PluginDescriptor = { name: 'pwa', - version: '0.8.10', + version: '0.8.11', capabilities: ['post-build', 'head', 'body'] }; diff --git a/packages/plugins/search/package.json b/packages/plugins/search/package.json index 06bd1cd3..e00016c4 100644 --- a/packages/plugins/search/package.json +++ b/packages/plugins/search/package.json @@ -1,6 +1,6 @@ { "name": "@docmd/plugin-search", - "version": "0.8.10", + "version": "0.8.11", "description": "Offline full-text search for docmd.", "type": "module", "main": "dist/index.js", diff --git a/packages/plugins/search/src/index.ts b/packages/plugins/search/src/index.ts index 6006af62..dccd72eb 100644 --- a/packages/plugins/search/src/index.ts +++ b/packages/plugins/search/src/index.ts @@ -28,7 +28,7 @@ const require = createRequire(import.meta.url); export const plugin: PluginDescriptor = { name: 'search', - version: '0.8.10', + version: '0.8.11', capabilities: ['post-build', 'head', 'body', 'assets', 'translations'] }; diff --git a/packages/plugins/seo/package.json b/packages/plugins/seo/package.json index 25e2016e..9d87ed7e 100644 --- a/packages/plugins/seo/package.json +++ b/packages/plugins/seo/package.json @@ -1,6 +1,6 @@ { "name": "@docmd/plugin-seo", - "version": "0.8.10", + "version": "0.8.11", "description": "SEO meta tag generator for docmd.", "type": "module", "main": "dist/index.js", diff --git a/packages/plugins/seo/src/index.ts b/packages/plugins/seo/src/index.ts index 8c402457..1d43c081 100644 --- a/packages/plugins/seo/src/index.ts +++ b/packages/plugins/seo/src/index.ts @@ -21,7 +21,7 @@ import { attrEsc } from '@docmd/utils'; export const plugin: PluginDescriptor = { name: 'seo', - version: '0.8.10', + version: '0.8.11', capabilities: ['head', 'post-build'] }; diff --git a/packages/plugins/sitemap/package.json b/packages/plugins/sitemap/package.json index 9ff5992d..aeb1e431 100644 --- a/packages/plugins/sitemap/package.json +++ b/packages/plugins/sitemap/package.json @@ -1,6 +1,6 @@ { "name": "@docmd/plugin-sitemap", - "version": "0.8.10", + "version": "0.8.11", "description": "Sitemap generator plugin for docmd.", "type": "module", "main": "dist/index.js", diff --git a/packages/plugins/sitemap/src/index.ts b/packages/plugins/sitemap/src/index.ts index c83a7f1f..e1444ebe 100644 --- a/packages/plugins/sitemap/src/index.ts +++ b/packages/plugins/sitemap/src/index.ts @@ -19,7 +19,7 @@ import { outputPathToPathname, sanitizeUrl } from '@docmd/api'; export const plugin: PluginDescriptor = { name: 'sitemap', - version: '0.8.10', + version: '0.8.11', capabilities: ['post-build'] }; diff --git a/packages/plugins/threads/package.json b/packages/plugins/threads/package.json index cede597e..690a3425 100644 --- a/packages/plugins/threads/package.json +++ b/packages/plugins/threads/package.json @@ -1,6 +1,6 @@ { "name": "@docmd/plugin-threads", - "version": "0.8.10", + "version": "0.8.11", "type": "module", "description": "Inline discussion threads for docmd.", "main": "dist/index.js", diff --git a/packages/plugins/threads/src/index.ts b/packages/plugins/threads/src/index.ts index 444902cf..1bd87aff 100644 --- a/packages/plugins/threads/src/index.ts +++ b/packages/plugins/threads/src/index.ts @@ -9,7 +9,7 @@ import type { PluginDescriptor } from '@docmd/api'; export const plugin: PluginDescriptor = { name: 'threads', - version: '0.8.10', + version: '0.8.11', capabilities: ['markdown', 'body', 'assets', 'actions', 'translations'] }; diff --git a/packages/templates/summer/package.json b/packages/templates/summer/package.json index 874ef0b0..aa00c3c1 100644 --- a/packages/templates/summer/package.json +++ b/packages/templates/summer/package.json @@ -1,6 +1,6 @@ { "name": "@docmd/template-summer", - "version": "0.8.10", + "version": "0.8.11", "description": "Summer template for docmd. A bright, hopeful, summer-feel layout with a top search bar and halo accents.", "type": "module", "main": "dist/index.js", diff --git a/packages/templates/summer/src/index.ts b/packages/templates/summer/src/index.ts index 0f29cf50..6b5a7bd0 100644 --- a/packages/templates/summer/src/index.ts +++ b/packages/templates/summer/src/index.ts @@ -42,7 +42,7 @@ const pathOf = (relPath: string): string => fileURLToPath(urlOf(relPath)); export const plugin: PluginDescriptor = { name: 'template-summer', - version: '0.8.10', + version: '0.8.11', capabilities: ['template'], }; diff --git a/packages/themes/package.json b/packages/themes/package.json index 2906480c..3e50fdf0 100644 --- a/packages/themes/package.json +++ b/packages/themes/package.json @@ -1,6 +1,6 @@ { "name": "@docmd/themes", - "version": "0.8.10", + "version": "0.8.11", "description": "Official themes for docmd.", "type": "module", "main": "dist/index.js", diff --git a/packages/tui/package.json b/packages/tui/package.json index e7088d91..22bde932 100644 --- a/packages/tui/package.json +++ b/packages/tui/package.json @@ -1,6 +1,6 @@ { "name": "@docmd/tui", - "version": "0.8.10", + "version": "0.8.11", "description": "Terminal User Interface (TUI) design system for docmd.", "type": "module", "main": "dist/index.js", diff --git a/packages/ui/package.json b/packages/ui/package.json index 198e2e07..3f5db5bb 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@docmd/ui", - "version": "0.8.10", + "version": "0.8.11", "description": "Base UI templates and assets for docmd.", "type": "module", "main": "dist/index.js", diff --git a/packages/utils/package.json b/packages/utils/package.json index 04def084..5eccef74 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@docmd/utils", - "version": "0.8.10", + "version": "0.8.11", "description": "Zero-dependency shared utilities for docmd core.", "type": "module", "main": "dist/index.js", From 3ea5bf7c644a3a98703637eedcfe5b6888685ff7 Mon Sep 17 00:00:00 2001 From: Ghazi Date: Fri, 10 Jul 2026 23:07:31 +0530 Subject: [PATCH 4/6] fix(search): semantic search auto-detect + single source of truth (S-7 search) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three changes to fix the first-build semantic search failure: 1. client.ts: auto-detect semantic at runtime The client now probes for .docmd-search/manifest.json via a HEAD request, regardless of what data-semantic says on the modal. This fixes the first-build case where deps were installed in onPostBuild (after generateScripts already rendered the page without the data-semantic attribute). The probe is a single round-trip per page load — zero perf cost. 2. search plugin: onConfigResolved + searchConfig Added init capability. onConfigResolved computes a single searchConfig object (semanticRequested, docmdSearchInstalled, peersInstalled, semanticUsable, missingPeers) and stamps it on config._searchConfig. Every other hook reads from this same object — no more duplicate resolution checks across getAssets and generateScripts. 3. maybeReportPeerStatus: idempotent TUI block Emits per-dep [ DONE ]/@huggingface/transformers lines on the first build (or when the dep status changes). Suppressed on subsequent rebuilds when the status is unchanged. Silent when semantic was not requested. Verified: 543/543 tests pass. Minimal build with semantic:true emits .docmd-search-client.js and builds the semantic index on first run. --- packages/api/registry/plugins.generated.json | 3 +- packages/plugins/search/package.json | 1 + packages/plugins/search/src/client.ts | 20 +- packages/plugins/search/src/index.ts | 181 +++++++++++++++++-- 4 files changed, 187 insertions(+), 18 deletions(-) diff --git a/packages/api/registry/plugins.generated.json b/packages/api/registry/plugins.generated.json index 8486db86..aedb7b5b 100644 --- a/packages/api/registry/plugins.generated.json +++ b/packages/api/registry/plugins.generated.json @@ -1,6 +1,6 @@ { "$meta": { - "generatedAt": "2026-07-10T15:51:37.674Z", + "generatedAt": "2026-07-10T17:11:03.912Z", "generator": "scripts/build-plugin-registry.mjs", "packageCount": 15 }, @@ -121,6 +121,7 @@ "tagline": "Offline full-text search for docmd.", "capabilities": [ "post-build", + "init", "head", "body", "assets", diff --git a/packages/plugins/search/package.json b/packages/plugins/search/package.json index e00016c4..8a0dc3c1 100644 --- a/packages/plugins/search/package.json +++ b/packages/plugins/search/package.json @@ -12,6 +12,7 @@ "tagline": "Offline full-text search for docmd.", "capabilities": [ "post-build", + "init", "head", "body", "assets", diff --git a/packages/plugins/search/src/client.ts b/packages/plugins/search/src/client.ts index 21bca297..008cc001 100644 --- a/packages/plugins/search/src/client.ts +++ b/packages/plugins/search/src/client.ts @@ -181,10 +181,26 @@ declare const MiniSearch: any; // 3. Index Loading - fetches locale-specific index async function loadIndex() { - const isSemantic = searchModal.dataset.semantic === 'true'; + // Auto-detect semantic search at runtime. We check BOTH: + // - The build-time hint (data-semantic="true") — set when the + // build pipeline knew semantic was available at render time. + // - A runtime probe (HEAD request to manifest.json) — catches + // the first-build case where deps were installed in onPostBuild + // (after generateScripts already rendered the page without + // data-semantic). The probe is a single network round-trip + // that only runs once per page load, so there's no perf cost. + const hasBuildHint = searchModal.dataset.semantic === 'true'; + let useSemantic = hasBuildHint; + + if (!useSemantic) { + try { + const probe = await fetch(`${siteBase}.docmd-search/manifest.json`, { method: 'HEAD' }); + if (probe.ok) useSemantic = true; + } catch { /* no index → keyword */ } + } try { - if (isSemantic) { + if (useSemantic) { // ── Semantic search path ────────────────────────────────── const ctx: SemanticSearch.SemanticSearchContext = { siteBase, diff --git a/packages/plugins/search/src/index.ts b/packages/plugins/search/src/index.ts index dccd72eb..a7cdc650 100644 --- a/packages/plugins/search/src/index.ts +++ b/packages/plugins/search/src/index.ts @@ -29,12 +29,107 @@ const require = createRequire(import.meta.url); export const plugin: PluginDescriptor = { name: 'search', version: '0.8.11', - capabilities: ['post-build', 'head', 'body', 'assets', 'translations'] + // `init` lets onConfigResolved run at config-parse time — that's where we + // compute the single `searchConfig` object. The build pipeline reads + // it from `config._searchConfig` everywhere else, so there's exactly + // one source of truth for "is semantic available at build time". + capabilities: ['post-build', 'init', 'head', 'body', 'assets', 'translations'] }; // Resolve i18n directory (sibling to dist/ in the package) const i18nDir = path.resolve(__dirname, '..', 'i18n'); +/* ── Search config (computed once at onConfigResolved) ─────────────────── */ + +/** + * Resolved search configuration. Computed once per build, in + * `onConfigResolved`, and stamped on `config._searchConfig`. Every + * subsequent hook (`onPostBuild`, `getAssets`, `generateScripts`, + * EJS templates via the page context) reads from this same object — + * no second source of truth, no chance of the `getAssets` and the + * `generateScripts` paths disagreeing about whether semantic is + * available. The shape is the contract for the search-modal EJS + * partial too: every key on this object is exposed to the template + * via `locals.searchConfig`. + */ +type SearchConfig = { + /** User has not opted out of search entirely (optionsMenu / config.search). */ + enabled: boolean; + /** User has explicitly requested semantic search in their config. */ + semanticRequested: boolean; + /** docmd-search is resolvable in the user's project. */ + docmdSearchInstalled: boolean; + /** All peer deps (transformers + onnxruntime-node) are resolvable. */ + peersInstalled: boolean; + /** True only when all three of the above are true — that's when the modal + * emits `data-semantic="true"`, the .docmd-search-client.js asset ships, + * and the page points users at the semantic index. */ + semanticUsable: boolean; + /** The exact names of any peer deps that are missing. Empty when + * `peersInstalled` is true. Useful for the TUI: "Missing: transformers, onnxruntime-node". */ + missingPeers: string[]; + /** Stable list of peer-dep package names. Exposed so the TUI can emit + * per-dep `[ DONE ] @huggingface/transformers` lines without + * hard-coding the names in two places. */ + peerDeps: readonly string[]; +}; + +/** + * Module-level state. Reset on every `onConfigResolved` call so a + * dev-server rebuild starts fresh. Currently tracks: + * + * - `lastPeersHash` — when the set of "missing peer deps" is + * identical to the previous build, we DON'T re-emit the + * "[ DONE ] Peer X ready" lines. The user only sees them on the + * first build (or the first build after a new dep becomes missing). + * This is the difference between "informative on first install" and + * "spammy on every rebuild". + */ +const _searchState: { + lastPeersHash: string | null; + lastConfig: SearchConfig | null; +} = { lastPeersHash: null, lastConfig: null }; + +/** + * Compute the full SearchConfig from the resolved config + filesystem. + * Idempotent — called once at `onConfigResolved` and again inside + * `onPostBuild` if a fresh install was performed. Pure: no I/O + * outside of `require.resolve` and `resolveDocmdSearch`. + */ +function buildSearchConfig(config: any): SearchConfig { + const isEnabled = config.optionsMenu + ? config.optionsMenu.components.search !== false + : config.search !== false; + const pluginOptions = (config.plugins && config.plugins.search) || {}; + const semanticRequested = pluginOptions.semantic === true; + const docmdSearchInstalled = resolveDocmdSearch() !== null; + const resolvePaths = [process.cwd(), path.join(process.cwd(), 'node_modules')]; + + // List every peer dep and which are missing, in stable order. + const missingPeers: string[] = []; + for (const pkg of PEER_DEPS) { + try { require.resolve(pkg, { paths: resolvePaths }); } + catch { missingPeers.push(pkg); } + } + const peersInstalled = missingPeers.length === 0; + const semanticUsable = semanticRequested && docmdSearchInstalled && peersInstalled; + + return { + enabled: isEnabled, + semanticRequested, + docmdSearchInstalled, + peersInstalled, + semanticUsable, + missingPeers, + peerDeps: PEER_DEPS, + }; +} + +/** Hash used to decide whether to re-emit the peer-deps TUI block. */ +function peersHash(sc: SearchConfig): string { + return sc.peersInstalled ? 'ok' : 'missing:' + sc.missingPeers.join(','); +} + /* ── Semantic search peer-dep detection ─────────────────────────────────── */ /** @@ -330,6 +425,57 @@ function loadPluginStrings(localeId: string): Record { return {}; } +/** + * Print a per-peer-dep TUI block when `semantic: true` is requested. + * Idempotent: suppresses the block on subsequent builds when the set + * of missing peer deps is unchanged, so the user only sees it on the + * first build (or when a new peer dep goes missing). + * + * Called by `onConfigResolved` AND by `onPostBuild` after a fresh + * install. Each call is a no-op when the peer status is unchanged. + */ +function maybeReportPeerStatus(tui: any, sc: SearchConfig, quiet: boolean): void { + if (quiet || !tui) return; + if (!sc.semanticRequested) return; // user never asked for semantic — stay silent + const h = peersHash(sc); + if (h === _searchState.lastPeersHash) return; // already reported this state + _searchState.lastPeersHash = h; + + if (sc.peersInstalled) { + tui.step('All semantic search dependencies ready', 'DONE'); + return; + } + // List each missing dep as its own TUI line so the user sees exactly + // which package is the blocker. We keep the order stable (the same + // order as `PEER_DEPS`) so logs read consistently across builds. + for (const dep of sc.peerDeps) { + const present = !sc.missingPeers.includes(dep); + tui.step(`${dep}`, present ? 'DONE' : 'SKIP'); + } + tui.warn( + ' Semantic search requires: ' + sc.missingPeers.join(', ') + + '\n Falling back to keyword search. To enable semantic: install the missing packages,' + ); +} + +/** + * `init` capability. Runs at config-parse time, before any page is + * rendered. Computes the single `searchConfig` object and stamps it + * on `config._searchConfig` for the rest of the build pipeline. Also + * emits the first-install peer-status TUI block if appropriate. + */ +export function onConfigResolved(config: any): void { + const sc = buildSearchConfig(config); + config._searchConfig = sc; + _searchState.lastConfig = sc; + // `tui` isn't passed to onConfigResolved (the lifecycle signature is + // `onConfigResolved(config: any): void`), so we don't emit the TUI + // block here — the equivalent emission happens inside `onPostBuild` + // where the TUI is in scope. We do, however, keep this hook for + // future extensions (e.g. warming the require cache, pre-computing + // derived values that the EJS partial needs at template time). +} + /** * Plugin translations hook - called by the engine for each locale. * Returns search-specific UI strings keyed by locale. @@ -359,6 +505,13 @@ export async function onPostBuild({ config, pages, outputDir, tui, options, runW const showTui = tui && !options?.quiet; + // Per-peer-dep TUI block (idempotent). Fires once on the first build + // (or when the dep status changes); suppressed on subsequent rebuilds + // when the status is unchanged. Stays silent when semantic wasn't + // requested. The hook lives in the post-build path because the TUI + // is in scope here but isn't in onConfigResolved's signature. + maybeReportPeerStatus(tui, config._searchConfig, !showTui); + // ── Semantic search path ──────────────────────────────────────────────── if (pluginOptions.semantic === true) { // Strip sourcemap comment from the copied .docmd-search-client.js to avoid @@ -797,20 +950,13 @@ export function generateScripts(config: any, options: any) { const isEnabled = config.optionsMenu ? config.optionsMenu.components.search !== false : config.search !== false; if (!isEnabled) return {}; - const semanticRequested = (options || {}).semantic === true; - // Only emit `data-semantic="true"` when the full semantic stack is - // usable — docmd-search resolvable AND its peer deps (the embedding - // model + ONNX runtime) resolvable. The indexing step (`onPostBuild`) - // silently falls back to keyword when either is missing; if we set - // the attribute unconditionally, the browser tries to load a - // non-existent `.docmd-search/` index and surfaces "Failed to load - // search index." even though keyword search would work fine. - const searchResolvePaths = [process.cwd(), path.join(process.cwd(), 'node_modules')]; - const isSemantic = semanticRequested - && resolveDocmdSearch() !== null - && findMissingPeerDep(searchResolvePaths) === null; + // Use the resolved searchConfig as the single source of truth. + // The client also auto-detects at runtime (HEAD probe to manifest.json) + // so even if this build-time hint is wrong (e.g. first-build dep install), + // the browser still picks the right mode. + const sc: SearchConfig = config._searchConfig || buildSearchConfig(config); + const isSemantic = sc.semanticUsable; const showConfidence = (options || {}).showConfidence === true; - // showFilters defaults to true; set false to hide the version filter bar const showFilters = (options || {}).showFilters !== false; // Load strings for the active locale (available at render time) @@ -855,7 +1001,12 @@ export function generateScripts(config: any, options: any) { } export function getAssets(options: any) { - const isSemantic = (options || {}).semantic === true; + // Use searchConfig for semanticRequested, but keep the broader + // resolution paths for finding the client bundle (which lives in + // the plugin's own node_modules, not just the user's project). + const sc = _searchState.lastConfig; + const semanticRequested = sc?.semanticRequested ?? (options || {}).semantic === true; + const isSemantic = semanticRequested; if (isSemantic) { // Semantic mode: serve the docmd-search client bundle at a known path From 7770e1aaf14b304a01522282f5bd135106e860f8 Mon Sep 17 00:00:00 2001 From: Ghazi Date: Sat, 11 Jul 2026 10:23:59 +0530 Subject: [PATCH 5/6] fix(search): move missing-deps warning after install attempt The per-dep TUI block was firing BEFORE ensureDocmdSearch tried to install the deps, so on first build the user saw: [ SKIP ] @huggingface/transformers [ SKIP ] onnxruntime-node Falling back to keyword search... [ DONE ] docmd-search installed successfully [ DONE ] Semantic search index built Now the warning only appears inside the !ready fallback path, after ensureDocmdSearch has genuinely failed to install., --- packages/plugins/search/src/index.ts | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/packages/plugins/search/src/index.ts b/packages/plugins/search/src/index.ts index a7cdc650..4a5c1e6a 100644 --- a/packages/plugins/search/src/index.ts +++ b/packages/plugins/search/src/index.ts @@ -505,13 +505,6 @@ export async function onPostBuild({ config, pages, outputDir, tui, options, runW const showTui = tui && !options?.quiet; - // Per-peer-dep TUI block (idempotent). Fires once on the first build - // (or when the dep status changes); suppressed on subsequent rebuilds - // when the status is unchanged. Stays silent when semantic wasn't - // requested. The hook lives in the post-build path because the TUI - // is in scope here but isn't in onConfigResolved's signature. - maybeReportPeerStatus(tui, config._searchConfig, !showTui); - // ── Semantic search path ──────────────────────────────────────────────── if (pluginOptions.semantic === true) { // Strip sourcemap comment from the copied .docmd-search-client.js to avoid @@ -568,6 +561,10 @@ export async function onPostBuild({ config, pages, outputDir, tui, options, runW reason === 'peers' ? 'semantic peer dependencies missing' : reason === 'docmd-search' ? 'docmd-search not installed' : 'docmd-search not installed'; + // Only now — after the install ACTUALLY failed — report which deps + // were missing. This avoids the false-alarm where the warning showed + // "missing" and then the install succeeded below it. + maybeReportPeerStatus(tui, buildSearchConfig(config), !showTui); if (showTui) tui.warn(` Falling back to keyword search (${why})`); } else if (freshInstall) { // docmd-search was just installed in this process. Node's module cache From 457a4a132e4c0e23f917584323b6be4bb7604d03 Mon Sep 17 00:00:00 2001 From: Ghazi Date: Sat, 11 Jul 2026 11:45:00 +0530 Subject: [PATCH 6/6] Update plugins.generated.json --- packages/api/registry/plugins.generated.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/api/registry/plugins.generated.json b/packages/api/registry/plugins.generated.json index aedb7b5b..199a0eaf 100644 --- a/packages/api/registry/plugins.generated.json +++ b/packages/api/registry/plugins.generated.json @@ -1,6 +1,6 @@ { "$meta": { - "generatedAt": "2026-07-10T17:11:03.912Z", + "generatedAt": "2026-07-11T05:18:59.145Z", "generator": "scripts/build-plugin-registry.mjs", "packageCount": 15 },