Skip to content

Releases: inthhq/leadtype

leadtype@0.4.1

Choose a tag to compare

@github-actions github-actions released this 07 Jul 20:12
a89492a

Patch Changes

  • fd79078: Use named OpenAPI request body examples in generated code samples and avoid repeating them as standalone request examples before the snippets.

leadtype@0.4.0

Choose a tag to compare

@github-actions github-actions released this 07 Jul 09:39
a086d96

Minor Changes

  • 40a0215: Batch Git frontmatter enrichment during convertAllMdx (closes #108).

    When enrichFrontmatterFromGit is enabled, batch conversion now reads Git history once for the docs tree and maps results back to each converted file instead of spawning git log per file. A 120-file synthetic docs benchmark measured the Git metadata read dropping from ~2.36s of per-file process spawning to ~12ms for the batched read; end-to-end conversion added ~27ms over no enrichment.

    The enrichment remains best-effort for shallow clones, missing Git, and untracked files. lastModified still comes from the latest file commit, while lastAuthor now falls back to the latest non-bot author when the newest commit was authored by automation.

  • 40a0215: Add generated API catalog and homepage discovery Link helpers for agent-readable sites.

    generate and generateAgentArtifacts() now emit /.well-known/api-catalog alongside robots and sitemap artifacts, route handlers can serve it dynamically, and leadtype/llm/readability exports helpers for RFC 8288 Link headers that advertise the catalog, service docs, service description, and sitemap. Robots output also includes scanner-friendly AI crawler aliases and renders Content-Signals in ai-train, search, ai-input order.

  • 40a0215: Use Satteri and the native markdown pipeline for agent-facing markdown conversion.

    convertAllMdx, convertMdxFile, convertMdxToMarkdown, and leadtype generate now parse MDX through Satteri and run native markdown transforms/stringification for agent-facing output.

    The legacy agent-side Remark conversion path has been removed. This removes markdownEngine, the leadtype/remark compatibility export, and legacy aliases such as defaultRemarkPlugins, legacyDefaultMarkdownTransforms, and builtinFlattenerPlugins. Source-MDX bundler APIs under leadtype/mdx and leadtype/mdx/source remain intact.

  • 40a0215: Add an opt-in prune option to convertAllMdx that removes orphaned .md
    outputs when a source page is deleted or renamed.

    Previously a renamed page left its old .md behind in outDir — a live URL
    with stale content that leaked into sitemaps, link checks, and search
    indexing — and every consumer had to hand-roll the same garbage-collection
    step. With prune: true, convertAllMdx deletes any .md under outDir
    that the current source set did not produce, then removes directories the
    deletions emptied.

    Guardrails:

    • Only .md files are candidates; other files sharing outDir are never
      touched, and symlinks are never followed.
    • Pruning is skipped (with a warning) when any page fails to convert or when
      srcDir resolves to zero pages, so a partial or misconfigured run never
      mass-deletes output.
    • pruneKeep globs (relative to outDir) exempt .md files written by
      other tools, e.g. pruneKeep: ["sitemap.md", "mirrors/**"]. Nothing is
      exempted implicitly.
    • While pruning, the run holds the same per-outDir lock as
      leadtype generate (reentrant when generate itself is the caller;
      LEADTYPE_NO_LOCK=1 opts out), so a prune cannot delete output a
      concurrent run just wrote.
  • 40a0215: Add a generatedAt option to the agent artifact generators so manifests and
    timestamp fallbacks can be reproduced byte-for-byte across deterministic builds.

  • 40a0215: Make leadtype lint config-aware, so a bare leadtype lint validates the
    same source tree — with the same routing rules — that generate builds.

    • Config discovery: with no --src, lint finds leadtype.config.* at
      the project root or docs.config.* in ./docs / ./content, exactly like
      generate, and lints that tree. Flags still override everything. A config
      that fails to load reports a lint failure instead of crashing.
    • Mount-aware link checking: routes are derived with the config's
      mounts applied, and links under every mount prefix (e.g. /changelog/v1)
      are validated like /docs/... links — including catching stale /docs/...
      paths to pages that moved under a mount. Links under generated trees (the
      OpenAPI output prefix) are assumed valid, since those routes only exist
      after leadtype generate.
    • The config's own links are linted (new config-link rule): curated
      navigation entries matching no page and llms.sections links to missing
      routes are errors; feed source.urlPrefix values matching no pages and
      redirects.removed paths that are live again are warnings. Previously
      these bypassed lint and only surfaced when generate blew up.
    • New lint block in the docs config: lint.ignore replaces the default
      ignore globs, lint.unknownFieldSeverity sets the unknown-field default,
      and lint.rules remaps any rule's severity ("off" / "warn" /
      "error") across the CLI and the lintDocs() API (new rules, mounts,
      and assumeValidLinkPrefixes options).
  • 7f91c26: Add the opt-in external-link lint rule — the scheduled-CI half of the
    dead-link story (internal links are checked deterministically in PR CI;
    external URLs need the network, so they run on a schedule instead of in the
    merge gate).

    • Enable with leadtype lint --external-links (scheduled workflows) or a
      lint.rules["external-link"] severity in the docs config; a
      copy-pasteable weekly GitHub Actions recipe ships in the validate-in-ci
      docs.
    • Robust by default: HEAD with GET fallback for servers that reject HEAD,
      one retry on network hiccups, rate-limiting (429) treated as skip rather
      than failure, per-URL dedupe across pages, and bounded concurrency.
    • Confirmed-live URLs are cached under node_modules/.cache/leadtype/
      (default 7 days, lint.externalLinks.ttlHours); failures are never
      cached, so a site that comes back is noticed on the next run.
      lint.externalLinks.ignore mutes known-flaky URL prefixes.
    • Violations carry the page file and line like every other rule.
  • 40a0215: Expand leadtype lint's internal link coverage (closes the gaps tracked in
    #86):

    • Relative links (./sibling, ../guides/x, extension optional) resolve
      against their source file and validate like absolute links; links that
      climb out of the docs tree are errors.
    • Anchor validation (new invalid-anchor rule): same-page #fragment
      links and fragments on cross-page docs links must match a heading anchor on
      the target page. Anchors are extracted from the rendered markdown with the
      same slugger and duplicate handling that builds the site TOC — includes
      expanded — so lint and the rendered site cannot disagree. (Running this on
      leadtype's own docs immediately found three anchors that had been silently
      broken on the live site.)
    • Redirect-aware messages: with redirect tracking enabled, an
      invalid-link whose target matches a lockfile redirect reports
      "moved to <new path> — update the link" instead of a bare missing-route
      error.
    • Link-check scope and non-goals are documented in the lint reference.
  • 40a0215: Add parse-level code snippet linting (snippet:parse, the first tier of
    #93): every fenced code block with a known language must parse — TS/TSX/JS
    via the TypeScript parser (skipped when the optional typescript peer
    dependency isn't installed), JSON and YAML via real parsers.

    Docs snippets are deliberately fragmentary, so the checker is
    fragment-tolerant before it reports: bare API signatures, key: value
    config excerpts, object- and type-shape blocks, sibling JSX examples, and
    ... ellipsis lines all parse without annotation, as do JSON comments,
    trailing commas, and multi-document YAML. Anything else can be marked
    deliberate with a twoslash-style // @noErrors line — the same directive
    the upcoming typecheck tier honors.

    Tuned on leadtype's own 51-page docs corpus: zero annotations needed, and
    the only findings were real bugs (a JSX component in a ts fence and
    config excerpts that couldn't parse standalone).

  • 40a0215: Add opt-in TypeScript snippet typechecking (snippet:types) — the flagship
    tier of code-snippet linting: with lint: { snippets: { typecheck: true } }
    in the docs config, module-shaped ts/tsx snippets are assembled into
    virtual modules and typechecked against your project's tsconfig.json and
    real node_modules. When a package API changes, every doc example still
    calling the old API fails lint — docs that can't rot.

    • Twoslash conventions: // @filename: name.ts builds multi-file examples
      (parts can import each other), // @check opts a fragment in,
      // @noErrors opts anything out, and // ---cut--- hides setup lines
      from rendered output while they still typecheck. A new default markdown
      transform strips all directives from generated mirrors and converted
      output, so the authoring convention never reaches readers.
    • Scope is deliberately practical: only snippets containing import/export
      are checked by default (the copy-pasteable ones), imports of packages your
      project doesn't install degrade to any instead of failing, and JSX
      environment gaps (no React installed) are tolerated — strictness applies
      to everything that resolves, most importantly the documented package
      itself.
    • All snippets check in one shared compiler program, so cost stays flat
      regardless of snippet count.
  • 331a912: Add a ChildrenTypeRegistry augmentation hook to leadtype/mdx, so
    framework consumers type children once per...

Read more

leadtype@0.3.1

Choose a tag to compare

@github-actions github-actions released this 12 Jun 22:06
125ac3e

Patch Changes

  • 5fc0f1a: Fix the docs MCP server 500ing in serverless production deployments. leadtype/mcp previously loaded @modelcontextprotocol/sdk through a variable-specifier dynamic import, which bundlers and serverless file tracing (Vercel/NFT) cannot see — so deployments that resolved the SDK locally shipped functions without it and every /mcp request failed with "the optional peer dependency @modelcontextprotocol/sdk is not installed". The SDK is now imported statically by mcp/server, mcp/http, and mcp/stdio, so tracing includes it automatically. Importing leadtype/mcp therefore requires the SDK to be installed (it was already required to serve requests); the CLI still runs every non-serving command — including leadtype mcp --check — without it by loading the server lazily.
  • 5fc0f1a: Recognize current retrieval AI agents in robots.txt policies and isAgentUserAgent: Claude-SearchBot, Claude-User, Perplexity-User, Gemini-Deep-Research, DeepSeekBot, and Meta-ExternalFetcher join the retrieval crawler list, so block-training policies keep them allowed and block-ai policies actually cover them instead of letting them fall through to the User-agent: * group.
  • 5fc0f1a: Add NLWeb support under a new leadtype/nlweb entry. createAskHandler() mounts a Web-standard NLWeb /ask endpoint over the generated docs artifacts — list-mode answers backed by the same search index the docs MCP server uses, returning { query_id, _meta, results } documents (each result carries url/name/site/score/description/schema_object) or SSE start/result/complete events when streaming is requested via prefer.streaming, ?streaming=, or an Accept: text/event-stream header. Setting agents.nlweb.enabled in the docs config makes leadtype generate emit a schema.org JSONL feed at /feeds/schema.jsonl, a /schema-map.xml listing it, and a Schemamap: directive in robots.txt (also available directly via renderRobotsTxt/createRobotsTxtResponse's new schemamapUrlPath).
  • 5fc0f1a: Richer MCP discovery surface. The generated server card now carries top-level name, description, serverUrl, and tools[] (static summaries of the enabled docs tools, configurable via agents.mcp.tools) alongside the existing serverInfo/transport fields, matching what agent-readiness scanners read. generate additionally writes a discovery copy of the card to /.well-known/mcp.json, and the root llms.txt gains an ## Agent Interfaces section linking the MCP endpoint, its server card, and the NLWeb /ask endpoint when those surfaces are enabled.

leadtype@0.3.0

Choose a tag to compare

@github-actions github-actions released this 12 Jun 07:52
b1f4ca0

Minor Changes

  • b141edd: Add browser-side WebMCP docs tools, framework lifecycle helpers, and CLI scaffolding.
  • 9bf1f94: Add generateAgentArtifacts() to leadtype/llm — a bring-your-own-pages entry point that emits the full agent artifact set (llms.txt plus the .well-known copy, per-page Markdown mirrors at ${urlPath}.md with canonical_url/last_updated frontmatter, sitemap.xml/sitemap.md, robots.txt with Content-Signals, and a root-level agent-readability manifest) from an in-memory page list instead of an .mdx docs tree, so CMS-backed blogs, marketing sites, and data-driven pages can publish agent artifacts without the docs pipeline. emitRootCrawlerFiles: false supports microfrontend fragments whose host app owns the origin-level crawler files. Root URL mounts (urlPrefix: "/") now resolve correctly instead of emitting //page paths.
  • 873c833: Move generate capability toggles toward config-driven defaults. leadtype generate now enriches markdown with Git-derived lastModified and lastAuthor by default, skipping safely when git metadata is unavailable. Bundle-mode MCP artifacts are inferred from agents.mcp.enabled, while the legacy --mcp, --enrich-git, and init --webmcp shortcut flags remain supported with deprecation warnings.
  • a223c49: Add config-driven RSS and Atom feed generation for URL-prefixed docs content.

Patch Changes

  • 9bf1f94: Reorganize the docs into capability-led sections (Docs Pipeline, AEO & Agent Readability, Writing for Agents, Search & AI Answers, Package Docs, Integrations) with a new AEO overview page mapping every agent artifact to the agent-readability spec and scoring rubrics. Page URLs moved (/docs/build/* and /docs/sources/*/docs/pipeline|aeo|integrations/*, /docs/authoring/*/docs/writing/*); the bundled AGENTS.md and docs ship the new structure, and leadtype.dev serves 301 redirects from the old paths.

  • 85a8893: Skip bot and automation authors when deriving generated markdown lastAuthor, falling back to the latest human commit for the file while preserving lastModified from the latest commit. Projects can add repo-specific automation names with git.ignoredAuthors in docs.config.ts.

  • fa6d9b8: Exclude shared/ and _shared/ route segments from public docs search and answer sources by default, with search: true as an explicit opt-in for public shared pages.

  • fc23b34: Emit SoftwareApplication alongside SoftwareSourceCode for library site JSON-LD so product identity checks can recognize documented packages.

  • e61351a: Emit Agent Skills discovery manifests in the v0.2.0 format ($schema plus per-entry type/url/sha256-hex digest, with legacy path/integrity kept for older consumers) and support richer Organization JSON-LD identity fields from docs config — email, sameAs, contactPoint, and address — with fail-loud validation of unknown contactPoint/address keys.

  • 4a61a33: Emit sitemap and robots artifacts at the site root only so generated crawler discovery files are effective without duplicate /docs copies.

  • 100e4db: Fix docs search crashes and superlinear query latency on large corpora.

    Indexing a corpus containing terms that collide with Object.prototype members (for example a doc mentioning constructor) crashed createDocsSearchIndex, and querying such a term crashed searchDocs on a JSON.parse'd index. The term postings record is now built with a null prototype and query-time lookups (including synonym expansion) use Object.hasOwn guards.

    searchDocs also did a linear chunk scan and built an excerpt for every scored chunk, making query cost O(matched chunks × total chunks). Chunk-id lookups now use a cached map and excerpts are built only for results that survive the limit, with identical ranking. On a 20k-chunk corpus this cuts p95 query latency from ~665 ms to ~186 ms and makes latency scale linearly with corpus size.

leadtype@0.2.1

Choose a tag to compare

@github-actions github-actions released this 04 Jun 16:18
5dce76c

Patch Changes

  • ac5f294: Support string-literal property names in AutoTypeTable extraction and add a real c15t docs repro pipeline for source-config driven generation.
  • ac5f294: Add mount-aware docs generation for serving source subtrees at top-level URLs and allow root navigation page entries such as "index" without wrapping them in a group.
  • ac5f294: Add defineFrameworkNavigation for shared framework docs sections.

leadtype@0.2.0

Choose a tag to compare

@github-actions github-actions released this 04 Jun 12:18
ad894de

Minor Changes

  • dd55845: Add sourceConfig inheritance for remote collections, making the pinned source
    docs UI path first-class.

    Docs UI repos can now set sourceConfig: true on a remote defineCollection
    to load docs.config.{ts,js,mjs,cjs} from the synced source collection and
    inherit source-owned navigation, legacy groups, frontmatterSchema, and
    flatteners. Explicit collection fields in the docs UI repo still win, while
    site-owned fields such as product, organization, agents, llms, output
    paths, and framework routes stay in the UI repo.

    Use this when a package/source repo owns MDX and docs semantics, but a separate
    docs UI repo owns rendering, deployment, and a reviewed source ref.

  • e115ca0: Flesh out /.well-known/agent-card.json as a proper A2A AgentCard.

    It now emits the standard fields — name, description, url (the MCP endpoint when enabled,
    else the site), version, capabilities, defaultInputModes/defaultOutputModes, and each
    skill as { id, name, description, tags } — plus provider and documentationUrl. provider
    reuses the top-level organization (same entity) and documentationUrl is product.docs
    (default <baseUrl>/docs); both are overridable. The previous non-standard mcp field is
    dropped (the MCP endpoint is now the standard url).

  • e115ca0: Add an agent-skills surface: /.well-known/agent-skills + a bundled SKILL.md (DESIGN-2.md Phase 3).

    leadtype generate now emits a discoverable SKILL.md surface (the
    open Agent Skills format used by Claude Code, Cursor, Codex, Copilot, …). Default-on:

    • Site mode: /.well-known/agent-skills/index.json (discovery manifest with sha256 integrity)
      • <name>/SKILL.md per skill + a minimal /.well-known/agent-card.json (A2A).
    • Bundle mode (--bundle): a single SKILL.md at the package root, next to AGENTS.md.

    The auto docs-skill is a thin pointer that adapts to the surface — bundled AGENTS.md/docs
    offline, else /llms.txt + the MCP server when agents.mcp.enabled. Declare capability skills via
    agents.skills.items[] (name, description, license?, compatibility?, allowedTools?,
    body/bodyPath); docsSkill: false drops the auto one, agentCard: false skips the card. New
    generateSkillArtifacts exported from leadtype/llm.

    Dogfooded: apps/example emits the site surface (and now scores 100/100 on leadtype score);
    leadtype's own published tarball ships a SKILL.md.

  • e115ca0: Make renderSiteJsonLd config-driven, and bake the JSON-LD options into the manifest.

    The site-level JSON-LD graph is derived from the top-level organization (→ Organization)
    and product (kind/category/repositorySoftwareApplication/SoftwareSourceCode),
    flowing through generategenerateAgentReadabilityArtifacts → the agent-readability.json
    manifest. renderSiteJsonLd(manifest, overrides?) reads it (explicit overrides still win), so a
    host emits the site graph once with renderSiteJsonLd(manifest) — no need to repeat the
    org/software options at the call site.

    Dogfooded in apps/example: the shared docs.config.ts sets organization + product.kind: "library" (→ SoftwareSourceCode) + agents.robots, marks Changelog optional: true, and
    the root layout emits renderSiteJsonLd(manifest) so every page's TechArticle @id
    references resolve.

  • e115ca0: Add the agents.robots config block to set the crawler policy from leadtype.config.

    defineDocsConfig({
      product: { name, summary },
      agents: {
        robots: { policy: "block-training", signals: { aiInput: "yes" } },
      },
    });

    leadtype generate reads agents.robots.{policy,signals} and threads them into the generated
    robots.txt (and its Content-Signal line). All fields optional — zero-config stays balanced.
    This is the additive agents block from the design; further keys (e.g. jsonLd) extend it.

  • 4042306: Surface the root-AGENTS.md pointer as the headline bundle-setup step (closes #66).

    • leadtype generate --bundle now prints the consumer-pointer snippet on success (text mode only — --json output stays a clean machine record). The snippet is filled in with the package's installable npm name, read from the output package's package.json (falling back to the product name), so it works for scoped names too.
    • leadtype init now writes the root-AGENTS.md pointer by default, dogfooding the same pattern: it creates AGENTS.md if absent, refreshes a marker-delimited (<!-- leadtype:start -->…<!-- leadtype:end -->) block in place on re-run, or appends it to an existing file — never overwriting user content. Honors --dry-run and is listed in --json output. This points the agent helping you set up leadtype at leadtype's own bundled docs.
    • Docs lead with the pointer as required setup: the Bundle docs into a package guide opens with a two-step callout and a dedicated Point consumers at the bundle section, the README bundle path spells out the snippet, and the quickstart shows init emitting the pointer. All cite the eval result (bundle-read ~29% unprompted → ~90–100% with the pointer).

    Why: bundled docs only pay off when an agent actually reads them, and our evals show agents rarely discover the bundle on their own. The root pointer is the cheapest fix, so we now teach it at the point of use instead of burying it in the docs.

  • 8b84f60: Add collections config and leadtype sync for declarative multi-source docs (closes #42, #44).

    • New defineCollection({ repository?, ref?, cacheDir?, dir, prefix?, schema?, groups?, include?, exclude? }) helper, and collections?: Record<string, DocsCollection> on DocsConfig. Local-only collections omit repository; remote collections clone the repo at ref into cacheDir (default .leadtype/sources/<repo-slug>@<ref>). Multiple collections sharing a (repository, ref) pair share one clone.
    • New leadtype sync command: --refresh re-fetches and fast-forwards, --offline errors on cache miss, --repo <pat> filters by repository URL substring. State tracked in <cacheDir>/.leadtype-sync.json.
    • leadtype generate learns --sync, --refresh, --offline (mutually exclusive). Default behavior errors clearly when a remote cache is missing, naming the affected collection(s).
    • New project-level config: leadtype.config.{ts,js,mjs,cjs} looked up in cwd before the legacy per-docs-dir docs.config.* path. Setting both top-level groups and collections is rejected at load.
    • leadtype lint discovers leadtype.config.ts automatically and runs lint per collection, applying each collection's schema if set. Violations are prefixed with [collection:<key>].
    • git-not-installed surfaces as an actionable message instead of a raw ENOENT.

    Legacy projects (single docs folder, top-level groups in docs.config.ts, --docs-dir flags) are unchanged — the legacy code path is byte-identical to before.

    Known limitation: leadtype sync has no built-in timeout; a long network stall will hang the process. Track via Ctrl-C for now; a configurable per-operation timeout is planned.

  • aca9e8f: Add config-driven docs navigation with nested sections, explicit page placement,
    wildcard includes, and root-relative page references.

    defineDocsConfig() and defineCollection() now accept navigation, which is used by
    resolveDocsNavigation(), llms.txt, full-context generation, Agent
    Readability, AGENTS.md, source navigation, and CLI generation. Frontmatter
    group remains supported as taxonomy, validation metadata, and fallback
    navigation for projects that have not adopted navigation.

    This also updates the example docs site and c15t example to dogfood root
    navigation nodes as top-level docs areas, with the active root node's pages and
    children rendered as sidebar sections.

  • e115ca0: Restructure defineDocsConfig around three clear concepts: identity (product + organization), content (llms), and navigation — so it's obvious what each field is for and where it ends up.

    Breaking config changes (all shipping in this release):

    Before After
    product.summary product.tagline
    product.blocks llms.sections
    nav (top-level + per-collection) navigation
    agents.jsonLd.organization top-level organization
    agents.jsonLd.software.isLibrary product.kind: "library"
    agents.jsonLd.software.applicationCategory product.category
    agents.skills.agentCard agents.agentCard.enabled

    product is now pure identity (name, tagline, homepage, docs, repository, kind, category) reused across llms.txt, JSON-LD, and the agent card. organization (who publishes the product) feeds the JSON-LD Organization node and the agent-card provider — resolving the old ambiguity of whether organization meant the product or its maintainer. product.repository is emitted as JSON-LD codeRepository; product.docs becomes the agent-card documentationUrl.

    New exported helper resolveAgentInputs(config) translates the config's identity blocks into the low-level generator inputs (generateLlmsTxt, generateAgentReadabilityArtifacts, generateSkillArtifacts), so code composing those generators by hand shares...

Read more

leadtype@0.1.2

Choose a tag to compare

@github-actions github-actions released this 13 May 17:38
18b5636

Patch Changes

  • f7107d3: Ship the v1 headless integration surface plus docs polish.

    New public API

    • createDocsSource({ contentDir }) at the root — framework-neutral docs source primitive returning navigation, page loading, search index, and standalone include resolution. Works with Next App Router, Astro, Vite + Vue/Solid/Svelte, Nuxt, SvelteKit, and any MDX-aware bundler.
    • leadtype/mdx subpath — typed prop contracts for every custom MDX tag (CalloutProps, TabsProps, StepProps, TypeTableProps, …) plus mdxSourcePlugins (a remark preset that expands <include> and resolves <ExtractedTypeTable> at build time while leaving custom tags as JSX). Framework-neutral — children is typed as unknown so consumers intersect with React/Vue/Svelte/Solid/Astro child types.
    • leadtype/fumadocs subpath — thin adapter mapping createDocsSource() to fumadocs-core's Source interface, including meta.json walking. fumadocs-core >= 15 is an optional peer dependency.

    New helpers

    • convertMdxFile(path, plugins) from leadtype/convert — returns { ast, frontmatter, data, markdown } in memory for a single MDX file.
    • resolveInclude(specifier, options) from leadtype/mdx — standalone include resolver, no remark transform required. Plus parseIncludeSpecifier, extractMdxSection, resolveIncludePath.
    • remarkResolveTypeTableJsx — source-preset variant of the type-table plugin that emits <TypeTable properties={…} /> JSX (vs. the existing markdown-flattening variant).

    Frontmatter contract

    • New optional order: field. Pages with explicit order sort first within their group (ascending); pages without order fall back to alphabetical urlPath ordering. Conventionally numbered in tens for insertion room.

    Navigation

    • resolveDocsNavigation accepts an optional docsDirName config field (defaults to "docs") for projects whose docs folder isn't named docs/.

    Bug fixes

    • Mermaid blocks in agent-flattened markdown no longer destroy <br/> line-break syntax (was being replaced with / and - in two passes). Mermaid renderers now receive valid syntax with multi-line node labels intact.
    • The mermaid plugin's outer-backtick stripper now handles the common chart={`flowchart LR\n...`} inline form, not just backticks-on-their-own-lines.

leadtype@0.1.1

Choose a tag to compare

@github-actions github-actions released this 12 May 03:03
1c66660

Patch Changes

  • 92192a7: Fix the CLI direct-run check so package-manager bin shims and symlinked workspace installs correctly run leadtype generate.

  • 60c285c: Add first-class support for multiple docs source folders and custom URL mounts, including mounted search, LLM, and Agent Readability metadata. The generate command also expands include partials before emitting markdown artifacts, and extracted type tables resolve source paths from the original project root in multi-source builds.

  • 1bca5cf: Shrink published install closure by swapping out heavier deps:

    • gray-mattervfile-matter + yaml (drops js-yaml, kind-of, section-matter, strip-bom-string from the closure).
    • jiti moved from dependencies to optional peerDependencies — only required when authoring docs.config.ts; .js/.mjs/.cjs configs load via native import().
    • decode-named-character-reference dropped — entity decode inside <Steps> titles now uses a small inline map.
    • mdast-util-to-markdown dropped in prompt.remark — serialization now goes through the existing remark() processor.
    • mdast-util-compact dropped in steps.remark — small in-tree adjacent-text/blockquote merge inlined.
    • unist-builder dropped — u(...) calls replaced with mdast object literals.
    • unist-util-is dropped — 7 is(node, "type") call sites switched to node.type === "type".

    Behavior change: YAML frontmatter timestamps now round-trip through the yaml package's timestamp tag. Date-only scalars like 2026-04-19 emit as 2026-04-19 (compact) instead of 2026-04-19T00:00:00.000Z. Datetime scalars without sub-second precision emit as 2026-04-19T12:00:00 instead of 2026-04-19T12:00:00.000Z. The values remain Date instances in JS, so consuming code is unaffected.

  • 3e03d9d: Replace fast-glob with tinyglobby to shrink the dependency tree (16 transitive deps → 3) and reduce install footprint (~1.2 MB → ~240 KB). Globbing behavior and call-site options are unchanged.

leadtype@0.1.0

Choose a tag to compare

@github-actions github-actions released this 11 May 18:07
4c7ab4c

Minor Changes