brainstorming
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation).
markstream-installInstall and wire markstream-vue, markstream-react, markstream-vue2, markstream-angular, or markstream-svelte into an existing repository. Use when Codex needs to choose the right package, install the smallest framework-specific peer-dependency set, fix CSS/reset order, choose Vue 3 renderer mode and built-in, plain, or custom code-block paths, decide betwee…
Independent GitHub snapshot · Automated classification · Original documentation governs
content, nodes, and Vue 3 virtual-scroll coordination, or add a minimal working renderer example.Use this skill when the task is "add markstream to an app" or "fix a broken markstream install".
Read references/scenarios.md before making dependency choices.
package.json, app entry files, Tailwind or UnoCSS config, and whether the repo is SSR or streaming-focused.markstream-vue, markstream-vue2, markstream-react, markstream-angular, or markstream-svelte.markstream-svelte only for Svelte 5 apps.peerDependencies; peer availability differs by renderer.stream-diffs for the enhanced File/Diff surface, omit it for automatic <pre><code> fallback, or set render-code-blocks-as-pre to force the plain path.@antv/infographic plus setInfographicLoader(...) only when infographic fences are needed.preloadCodeBlockRuntime from markstream-vue. If the application intentionally owns a runtime controller, import that advanced API directly from stream-diffs.@import 'markstream-*/index.css' layer(components);.katex/dist/katex.min.css when math is enabled.content for static or low-frequency rendering.vue-virtual-scroller, do not stop at a trivial renderer. Use MarkstreamVirtualTimeline or useMarkstreamVirtualAdapter() and follow docs/guide/performance.md.mode by surface before tuning lower-level props.
mode="chat": AI chat or SSE output; lightweight batches, fade=false, max-live-nodes=0, and smooth-streaming="auto".mode="docs": rich document surfaces; default mode, larger batches, tooltips, and fade.mode="minimal": lightweight non-chat surfaces.smooth-streaming controls output pacing and fade controls opacity; they can be enabled together. mode="chat" keeps fade=false as a lightweight default. Add fade when gradual text reveal is desired; keep it off when animation cost matters more.stream-diffs when installed. Use render-code-blocks-as-pre for a forced plain path or setCustomComponents(customId, { code_block: ... }) for a scoped application-owned renderer.content and built-in smooth streaming.
smoothStreaming="auto" / smooth-streaming="auto".typewriter=true or maxLiveNodes <= 0 / max-live-nodes <= 0.typewriter only controls the blinking cursor and defaults to false.fade controls node enter and streamed-text fade animations and defaults to true.fade=false / :fade="false" / [fade]="false" to avoid fade stacking.final becomes true.
mode="chat", final, optional fade for gradual reveal, and optional typewriter for a cursor.mode="chat" on the same chat row; use :smooth-streaming="false", typewriter=false, and choose fade independently; it may remain enabled during both streaming and history display.mode="minimal" for lightweight non-chat recovered content, and use mode="docs" only for rich document surfaces.smoothStreaming="auto" / smooth-streaming="auto", fade=false, typewriter=true.smoothStreaming=false / smooth-streaming=false, fade=true, typewriter=false.smoothStreaming={isStreaming ? 'auto' : false}, fade={!isStreaming}; this is not a required coupling.nodes + final only for worker preparsing, shared AST stores, or custom AST control.typewriter="simple" for a lightweight cursor on high-frequency streams; use precise mode only when the cursor must follow complex inline layout.useStickToBottom from markstream-vue/utils; call scheduleScrollToBottom() after the content update instead of starting a smooth scrollIntoView() animation for every token. Use MarkstreamVirtualTimeline with stick-to-bottom="auto" for long mixed timelines.nodes, use useSmoothMarkdownStream: enqueue() chunks, finish() when done, render from visible, wait for caughtUp before final parsing.safe, and Mermaid runs in strict mode by default.customId / custom-id plus scoped setCustomComponents(...).nodes.mode only when the surface should use rich docs defaults.content for most streaming chat now that built-in smooth streaming is available across Vue 3, Vue 2, React, Svelte, and Angular.nodes only when another layer owns parsing or AST transforms.metrics.totalHeight, not the renderer DOM height.content for streaming, smooth streaming (smooth-streaming="auto") is on by default for typewriter or max-live-nodes <= 0. Set :smooth-streaming="false" to preserve raw chunk cadence.docs/guide/ai-chat-streaming.md for Vue 3 examples.stream-diffs; there is no stream-monaco or Shiki direct integration in current versions.CodeBlockNode and top-level renderer configuration use the same codeBlockOptions / CodeBlockOptions contract. Keep component chrome in codeBlockProps; do not nest runtime options there.@pierre/diffs WorkerPoolManager through setStreamDiffsWorkerPool(...). The host builds the pool with its own bundler and adds @pierre/diffs as a direct dependency. This is a Vue 3-only enhancement; the other framework packages do not expose it.htmlPolicy / html-policy="trusted" and mermaidProps.isStrict = false instead of changing app-wide defaults blindly.docs/guide/installation.mddocs/guide/usage.mddocs/guide/performance.mddocs/guide/troubleshooting.mddocs/guide/component-overrides.md