Šķîþ ţö ḿàîñ çöñţéñţ

Ḿàŕķđöŵñ îñ ţĥé ÜÎ

Šéṽéŕàļ ḿéţàđàţà ƒîéļđš ţĥàţ ƒļöŵ ƒŕöḿ ţĥé ƒŕàḿéŵöŕķ ţö ţĥé ÜΚ (ţööļ àñđ ƒöŕḿàţ đéšçŕîþţîöñš, ƒöŕḿàţ öṽéŕṽîéŵš, þàŕàḿéţéŕ ĥéļþ, éẋàḿþļé đéšçŕîþţîöñš, ļöñĝ-ƒöŕḿ đöçš) àŕé àüţĥöŕéđ àš ḿàŕķđöŵñ ŕàţĥéŕ ţĥàñ þļàîñ ţéẋţ. Ţĥîš ñöţé îš ţĥé çàñöñîçàļ ļîšţ öƒ ŵĥîçĥ ƒîéļđš çàŕŕý ḿàŕķđöŵñ àñđ ţĥé šîñĝļé çöḿþöñéñţ éṽéŕý ÜÎ ḿüšţ üšé ţö ŕéñđéŕ ţĥéḿ.

Ţŵö šéñšéš öƒ "ḿàŕķđöŵñ". Ţĥîš ñöţé îš àƃöüţ ḿàŕķđöŵñ üšéđ àš ÜÎ çöþýdescription ţĥàţ çöñţàîñš **bold**, `code`, öŕ à ļîñķ). Îţ îš üñŕéļàţéđ ţö ţĥé Ḿàŕķđöŵñ đàţà ƒöŕḿàţ (core/formats/markdown/, core/formats/mdx/), ţĥé çöñţéñţ neokapi ŕéàđš àñđ ŵŕîţéš. Ķééþ ţĥé ţŵö šéþàŕàţé.

Ţĥé ŕüļé

Ñéṽéŕ đŕöþ à ḿàŕķđöŵñ-ƃéàŕîñĝ ƒîéļđ šţŕàîĝĥţ îñţö ĴŠẊ àš à šţŕîñĝ. Ŕéñđéŕîñĝ {tool.description} šĥöŵš ļîţéŕàļ ** àñđ ƃàçķţîçķš àñđ ḿàñĝļéš ļîñķš. Ŕéñđéŕ îţ ţĥŕöüĝĥ ţĥé šĥàŕéđ ţýþéšéţ þŕîḿîţîṽé îñšţéàđ:

import { Markdown } from "@neokapi/ui-primitives"; // or "@neokapi/ui" in bowrain apps

// Dedicated detail / doc view — block prose:
<Markdown>{tool.description}</Markdown>

// Compact context (clamped list row, table cell, tooltip, chip,
// CardDescription) — inline flow, no block margins:
<Markdown inline>{tool.description}</Markdown>

Ţĥé þŕîḿîţîṽé ļîṽéš àţ packages/ui/src/components/ui/markdown.tsx àñđ îš éẋþöŕţéđ ƒŕöḿ @neokapi/ui-primitives. @neokapi/ui (bowrain'š šĥàŕéđ þàçķàĝé) ŕé-éẋþöŕţš îţ, šö bowrain àþþš îḿþöŕţ îţ ƒŕöḿ @neokapi/ui.

  • Îţ ŵŕàþš react-markdown + remark-gfm ƒöŕ ŕéñđéŕîñĝ (ĜîţĤüƃ-ƒļàṽöüŕéđ ḿàŕķđöŵñ: ţàƃļéš, šţŕîķéţĥŕöüĝĥ, àüţöļîñķš, ţàšķ ļîšţš) àñđ ŕéñđéŕš ŕéàçţ-ḿàŕķđöŵñ'š đéƒàüļţ ĤŢḾĻ.
  • Ƃļöçķ šţýļîñĝ îš ţĥé šĥàŕéđ .typeset ļàýéŕ (packages/ui/src/styles/typeset.css), öüŕ îḿþļéḿéñţàţîöñ öƒ ţĥé šĥàđçñ/ţýþéšéţ çöñţŕàçţ: öñé ÇŠŠ ƒîļé, ţĥŕéé çöñţŕöļš (--typeset-size / --typeset-leading / --typeset-flow) ţĥàţ éṽéŕýţĥîñĝ éļšé đéŕîṽéš ƒŕöḿ, žéŕö-šþéçîƒîçîţý :where() ŕüļéš îñ @layer components (šö Ţàîļŵîñđ üţîļîţîéš šţîļļ öṽéŕŕîđé), margin-block-start-öñļý ƒļöŵ (šţŕéàḿ-šţàƃļé), àñđ çöļöüŕš ḿàþþéđ ţö öüŕ ţĥéḿé ţöķéñš (ţĥéḿéš ļîĝĥţ/đàŕķ ƒöŕ ƒŕéé). Îţ îš ñöţ @tailwindcss/typography (ŵĥîçĥ ţĥé ŕéþö đöéš ñöţ šĥîþ). Ṽàŕîàñţš: .typeset-docs (đéƒàüļţ) àñđ .typeset-chat (ţĥé variant þŕöþ). Öþţ à šüƃţŕéé öüţ ŵîţĥ not-typeset / data-not-typeset.
  • Ţĥé ÇŠŠ îš @importéđ ƒŕöḿ styles/theme-tokens.css, ŵĥîçĥ éṽéŕý àþþ àļŕéàđý îḿþöŕţš, šö ţĥéŕé îš ñö þéŕ-àþþ ÇŠŠ ŵîŕîñĝ.
  • inline ḿöđé îš à šḿàļļ ƃéšþöķé þàţĥ (ţýþéšéţ îš ƃļöçķ-öŕîéñţéđ): îţ çöļļàþšéš þàŕàĝŕàþĥš ţö îñļîñé ƒļöŵ àñđ đéĝŕàđéš ƃļöçķ çöñšţŕüçţš (ĥéàđîñĝš, ļîšţš, ŕüļéš) ţö ļîĝĥţŵéîĝĥţ îñļîñé éǫüîṽàļéñţš, šö à öñé-ļîñé çļàḿþéđ ŕöŵ ñéṽéŕ šĥöŵš ļîţéŕàļ ḿàŕķüþ.
  • Éḿþţý/ŵĥîţéšþàçé îñþüţ ŕéñđéŕš ñöţĥîñĝ.

Đö ñöţ ĥàñđ-ŕöļļ àñöţĥéŕ ŕéñđéŕéŕ (à ļöçàļ react-markdown ŵŕàþþéŕ, à ŕéĝéẋ markdownToHtml + dangerouslySetInnerHTML, öŕ à ƃéšþöķé components ḿàþ). Ţĥöšé đŕîƒţ àþàŕţ àñđ àŕé ĥöŵ ţĥé "ḿàŕķđöŵñ šĥöŵñ àš à ŕàŵ šţŕîñĝ" ƃüĝš çŕéþţ îñ. Ţĥéŕé îš öñé ŕéñđéŕéŕ.

Ƒîéļđš ţĥàţ çàŕŕý ḿàŕķđöŵñ

Ţĥéšé àŕé ţĥé ƒîéļđš ţĥé ÜΚ ţŕéàţ (öŕ šĥöüļđ ţŕéàţ) àš ḿàŕķđöŵñ. Ţĥé Ĝö šţŕüçţš àñđ ţĥé ḿîŕŕöŕîñĝ ŢýþéŠçŕîþţ ţýþéš àŕé àññöţàţéđ ŵîţĥ à Markdown. / Markdown: çöḿḿéñţ šö ţĥé çöñţŕàçţ îš đîšçöṽéŕàƃļé àţ ţĥé đéƒîñîţîöñ.

ÇöñçéŕñƑîéļđĜö đéƒîñîţîöñŢŠ ḿîŕŕöŕ
ŢööļDescriptioncore/registry/tool.go ToolInfo.Description; core/schema/schema.go ToolMeta.Descriptionpackages/contract-types ComponentSchema; đéšķţöþ api.ts ţööļ ĐŢÖš
Ţööļ çöñƒîĝDescription (þéŕ þŕöþéŕţý)core/schema/schema.go PropertySchema.Description, ComponentSchema.Descriptioncontract-types PropertySchema.description, ParameterGroup.description
ƑöŕḿàţDescription, Overviewcore/format/spec/spec.go Spec.Description, Variant.Description, ConfigKey.Description, Feature.Description, Example.Descriptionŕéƒéŕéñçé-đàţà ReferenceDoc.overview; đéšķţöþ FilterDoc.overview
ƑļöŵDescriptioncore/flow/definition.go FlowDefinition.Descriptionđéšķţöþ/bowrain ƒļöŵ ĐŢÖš
ÞļüĝîñDescription (öñé ļîñé öƒ îñļîñé ḿàŕķđöŵñ)core/plugin/manifest/manifest.go Manifest.Descriptionþļüĝîñ ĐŢÖš
Ŕéƒéŕéñçé đöçšOverview, Limitations, ProcessingNotes, þàŕàḿ Help/Description, éẋàḿþļé Descriptionscripts/gen-refs/model.go Doc.*, DocParam.*, DocExample.Descriptionpackages/reference-data/src/types.ts ReferenceDoc.*
ÇöḿḿàñđLong (ļöñĝ ĥéļþ)(ÇĻÎ ĥéļþ çàţàļöĝš)packages/reference-data CommandEntry.long
ÞŕöṽîđéŕDescription (ḿöđéļ/þŕöṽîđéŕ)providers/ai/provider.go Descriptionþŕöṽîđéŕ ĐŢÖš

Šĥöŕţ display_name, šîñĝļé-ŵöŕđ source/type ƃàđĝéš, ţàƃ ļàƃéļš, àñđ translate="no" đöçüḿéñţ-çöñţéñţ þŕéṽîéŵš çàŕŕý ñö ḿàŕķđöŵñ, šö ļéàṽé ţĥéḿ þļàîñ.

Ŵĥéŕé îţ ŕéñđéŕš ţöđàý

Ţĥé þŕîḿîţîṽé îš üšéđ àçŕöšš éṽéŕý Ŕéàçţ ÜÎ:

  • Kapi Đéšķţöþ (apps/kapi-desktop/frontend): ţööļ đéţàîļ + ļîšţ (ToolRunnerPage), ƒļöŵ đéšçŕîþţîöñš (FlowsPage), þļüĝîñ đéšçŕîþţîöñš (PluginManager), ƒöŕḿàţ öṽéŕṽîéŵ + þŕéšéţš (FormatsPage), àñđ ţĥé đöçš þàñéļ (DocsPanel).
  • Ƒļöŵ éđîţöŕ (packages/flow-editor): ţööļ þàļéţţé éñţŕîéš, šţéþ éẋàḿþļé àñđ þàŕàḿéţéŕ đéšçŕîþţîöñš, ţéḿþļàţé çàŕđš.
  • Bowrain ÜÎ (bowrain/packages/ui): ƒüļļ-þàĝé ţööļ/ƒöŕḿàţ đöçš (ToolDocViewer), ţööļ/ƒîļţéŕ çöñƒîĝ ƒîéļđ đéšçŕîþţîöñš, àñđ ţĥé bowrain đéšķţöþ šéţţîñĝš þàĝé.

Ţĥé đöçš šîţé (web/, Đöçüšàüŕüš) ĥàš îţš öŵñ Markdown.tsx ŵŕàþþéŕ ƒöŕ ţĥé ĝéñéŕàţéđ ŕéƒéŕéñçé đàţàšéţ. Îţ îš à šéþàŕàţé ƃüîļđ (îţš öŵñ ÇŠŠ ḿöđüļé, ñö @neokapi/ui-primitives đéþéñđéñçý) àñđ ŕéñđéŕš ţĥé šàḿé šéţ öƒ ƒîéļđš ļîšţéđ àƃöṽé ţĥŕöüĝĥ react-markdown + remark-gfm.

Ŵĥéñ ýöü àđđ à ƒîéļđ

΃ ýöü àđđ à ḿéţàđàţà ƒîéļđ ţĥàţ àüţĥöŕš ŵîļļ ŵŕîţé ḿàŕķđöŵñ îñţö:

  1. Àññöţàţé ţĥé Ĝö šţŕüçţ ƒîéļđ àñđ îţš ŢýþéŠçŕîþţ ḿîŕŕöŕ ŵîţĥ à Markdown. çöḿḿéñţ.
  2. Àđđ îţ ţö ţĥé ţàƃļé àƃöṽé.
  3. Ŕéñđéŕ îţ ŵîţĥ <Markdown> / <Markdown inline>, ñéṽéŕ àš à ŕàŵ šţŕîñĝ.

Ķééþ ţĥé ḿàŕķđöŵñ ļîĝĥţ. Ţĥéšé àŕé đéšçŕîþţîöñš àñđ ĥéļþ ţéẋţ, ñöţ đöçüḿéñţš: îñļîñé éḿþĥàšîš, çöđé šþàñš, ļîñķš, šĥöŕţ ļîšţš. Ƒöļļöŵ ţĥé ŕéĝîšţéŕ îñ ƃŕàñđ-çöḿḿüñîçàţîöñ.