Skip to content

feat(rich-editor): rich markdown field + @ mentions for skill & deploy modals#5215

Merged
waleedlatif1 merged 32 commits into
stagingfrom
rich-md-skills-deploy
Jun 27, 2026
Merged

feat(rich-editor): rich markdown field + @ mentions for skill & deploy modals#5215
waleedlatif1 merged 32 commits into
stagingfrom
rich-md-skills-deploy

Conversation

@waleedlatif1

Copy link
Copy Markdown
Collaborator

Summary

  • Add a controlled, file-less RichMarkdownField (sibling of the file-viewer editor) and use it for the skill Content field and the deploy version description — same WYSIWYG markdown experience, with placeholder/typography matched to the chip fields
  • Add an @-mention menu (TipTap suggestion) that inserts portable [label](sim:kind/id) markdown links for files, folders, tables, knowledge bases, workflows, skills, and integrations; wired into both the field and the file viewer via a shared useEditorMentions hook, with the popup lifecycle + menu chrome shared with the / slash command
  • Fix a false "Unsaved changes" on open: a deferred mount-time transaction re-serialized non-canonical markdown (Monaco-era files) and tripped the dirty check — the dirty baseline is now normalized to the editor's canonical form (round-trip-unsafe files untouched)
  • Always show the deployment version number (v3 · name) so a named version keeps a short, never-truncated reference
  • Skill import: drop the standalone paste box (the Create-tab Content editor now auto-destructures a pasted full SKILL.md), and reorder to GitHub → Upload

Type of Change

  • New feature

Testing

  • Tested manually; bun run type-check, biome, and check:api-validation clean; 351 file-viewer/skills/deploy unit tests pass (incl. new round-trip, dirty-on-open, and sim-link regression tests)

Checklist

  • Code follows project style guidelines
  • Self-reviewed my changes
  • Tests added/updated and passing
  • No new warnings introduced
  • I confirm that I have read and agree to the terms outlined in the Contributor License Agreement (CLA)

@vercel

vercel Bot commented Jun 25, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
docs Skipped Skipped Jun 27, 2026 12:29am

Request Review

@cursor

cursor Bot commented Jun 25, 2026

Copy link
Copy Markdown

PR Summary

Medium Risk
Large, user-facing editor and autosave/dirty-baseline changes; mentions pull workspace data on first open. Broad docs/API surface but mostly documentation; regression coverage added for mentions, dirty-on-open, and suggestion key conflicts.

Overview
Introduces a controlled RichMarkdownField for modal/chip forms (same TipTap stack as the file viewer, optional streaming, round-trip-unsafe fallback to raw markdown, no image upload — slash Image hidden when upload isn’t wired).

Adds an @ mention menu that inserts portable [label](sim:kind/id) links, renders as inline chips in the file editor (Cmd/Ctrl-click navigates when enabled), and lazy-loads workspace entities via a per-editor store. / and @ menus now share popup positioning, keyboard nav, and ARIA wiring, with distinct suggestion plugin keys so both can mount together.

Fixes false “unsaved changes” on open by optional normalizeBaseline on fetched content (canonical editor serialization; skipped during/after agent streams) and tighter frontmatter vs --- thematic break detection.

File viewer editor improvements: divider/image keyboard selection and Backspace behavior, suggestion-aware arrow keys, upload progress toasts, safer non-image drops, linked-badge markdown serialization, and CSS for mentions and range-selected leaf nodes.

Docs/icons: new file_manage_sharing, PagerDuty/Zendesk trigger sections, Supabase Edge Function invoke and storage/upsert doc updates, table upsert/schema fields; Icypeas branding refresh; Sakana icon (Azure DevOps icon removed from docs icons).

Settings shell: optional Docs chip on the panel header and section action slot.

Reviewed by Cursor Bugbot for commit bda9400. Configure here.

@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@greptile review

@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@cursor review

@greptile-apps

greptile-apps Bot commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR adds a controlled RichMarkdownField component (WYSIWYG TipTap editor) used in the skill Content field and deploy version description, alongside an @-mention system that inserts portable [label](sim:kind/id) links for workspace entities. It also fixes a false "Unsaved changes" state on file open by normalizing the dirty-check baseline to the editor's canonical form.

  • RichMarkdownField: File-less sibling of the file viewer editor with streaming support, paste interception, and a round-trip safety gate (falls back to raw textarea for lossy markdown). Shared useEditorMentions hook wires both the file viewer and modal fields to the same reactive mention data.
  • @-mention menu: TipTap Suggestion extension triggered after whitespace (not inside emails/handles), inserts sim:<kind>/<id> links rendered as inline icon+label chips. A per-editor MentionStore (external store pattern) bridges React Query data into the detached TipTap popup tree.
  • Deploy + skill UX: Version label always shows vN · name so named versions keep a stable numeric reference; description field upgraded to rich markdown with abort-signal-backed SSE cancellation; skill import reordered and the paste box replaced by auto-destructuring in the Content editor.

Confidence Score: 5/5

Safe to merge; the changes are well-isolated, thoroughly tested, and the abort/cleanup paths for SSE streams are correctly wired.

The new RichMarkdownField and mention system are additive and gated by feature-specific props (workspaceId, onPasteText). The dirty-on-open fix uses an explicit normalization baseline that is intentionally excluded from streaming paths via a render-time latch. AbortSignal is correctly threaded through the full SSE pipeline and swallowed in onError. The one style inconsistency in versions.tsx has no runtime impact.

No files require special attention; versions.tsx has a minor import path inconsistency (relative vs alias) compared to its sibling general.tsx.

Important Files Changed

Filename Overview
apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/rich-markdown-editor/rich-markdown-field.tsx New controlled WYSIWYG markdown field component with round-trip safety gate, streaming support, and paste interception. Well-structured with proper frontmatter handling and canonical-seed comparison to avoid false dirty state.
apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/use-editable-file-content.ts Added normalizeBaseline option with an everStreamedRef latch that correctly gates normalization away from streaming mounts, preventing false dirty-on-open while preserving stream-reconcile integrity.
apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/rich-markdown-editor/mention/mention.ts New @-mention TipTap extension. Correctly gates the trigger after whitespace (preventing email address false positives), disables in code blocks, and uses per-editor storage to hold the reactive item store.
apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/rich-markdown-editor/mention/mention-node.ts Headless mention node with markdown tokenizer, input rule, and label escaping for bracket-safe round-tripping. Schema-only module with no React/block-registry imports keeps the headless path light.
apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/rich-markdown-editor/menus/suggestion-popup.ts Extracted shared popup lifecycle (floating-ui positioning, autoUpdate, React renderer teardown) used by both the slash command and mention menus. Correctly appends inside the nearest [role="dialog"] to bypass Radix's scroll-lock.
apps/sim/app/workspace/[workspaceId]/skills/components/skill-modal/skill-modal.tsx Replaces the textarea Content field with RichMarkdownField (dynamic import), adds contentSeed for programmatic remount, and introduces paste-destructuring of full SKILL.md pastes gated on a real YAML name: key.
apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/deploy/components/deploy-modal/components/general/components/version-description-modal.tsx Upgraded description field to RichMarkdownField, added AbortController for unmount-time cancellation of in-flight SSE streams, and raised the character limit to 50,000 with a client-side guard.
apps/sim/hooks/queries/deployments.ts Threads AbortSignal through the full generation pipeline (state fetches, SSE stream). AbortError is correctly swallowed in onError to avoid spurious error logging on user-initiated cancellation.
apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/deploy/components/deploy-modal/components/general/components/versions.tsx Uses formatVersionLabel to always show the version number; refactored the label layout to prevent long custom names truncating the stable vN reference. Import path for format-version-label uses a long alias instead of the cleaner '../format-version-label' relative import.

Sequence Diagram

%%{init: {'theme': 'neutral'}}%%
sequenceDiagram
    participant User
    participant Editor as TipTap Editor
    participant Mention as Mention Extension
    participant Hook as useEditorMentions
    participant Store as MentionStore
    participant RQ as React Query (useMarkdownMentions)
    participant API as Workspace APIs

    User->>Editor: "types "@""
    Editor->>Mention: Suggestion.allow() check
    Mention-->>Editor: true (after whitespace / start-of-block)
    Mention->>Store: render() → onOpen callback
    Store->>Hook: setActive(true)
    Hook->>RQ: enable queries (files, folders, skills, workflows…)
    RQ->>API: fetch workspace entities
    API-->>RQ: data
    RQ-->>Hook: MentionItem[]
    Hook->>Store: store.set(items)
    Store-->>Editor: useSyncExternalStore notify → MentionList re-renders

    User->>Editor: selects item from MentionList
    Mention->>Editor: insertContent([mention node, text " "])
    Editor->>Editor: renderMarkdown → [label](sim:kind/id)
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
sequenceDiagram
    participant User
    participant Editor as TipTap Editor
    participant Mention as Mention Extension
    participant Hook as useEditorMentions
    participant Store as MentionStore
    participant RQ as React Query (useMarkdownMentions)
    participant API as Workspace APIs

    User->>Editor: "types "@""
    Editor->>Mention: Suggestion.allow() check
    Mention-->>Editor: true (after whitespace / start-of-block)
    Mention->>Store: render() → onOpen callback
    Store->>Hook: setActive(true)
    Hook->>RQ: enable queries (files, folders, skills, workflows…)
    RQ->>API: fetch workspace entities
    API-->>RQ: data
    RQ-->>Hook: MentionItem[]
    Hook->>Store: store.set(items)
    Store-->>Editor: useSyncExternalStore notify → MentionList re-renders

    User->>Editor: selects item from MentionList
    Mention->>Editor: insertContent([mention node, text " "])
    Editor->>Editor: renderMarkdown → [label](sim:kind/id)
Loading

Reviews (29): Last reviewed commit: "fix(rich-editor): raw-fallback paste hoo..." | Re-trigger Greptile

@greptile-apps

greptile-apps Bot commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR adds a controlled RichMarkdownField (TipTap-backed, file-less) and wires it into the skill Content field and the deploy version description editor. It also introduces a full @-mention system (TipTap suggestion extension, reactive MentionStore, useMarkdownMentions aggregator, and useEditorMentions coordinator) that inserts portable sim:<kind>/<id> markdown links. A normalizeMarkdownContent baseline fix prevents false "unsaved changes" on open, and version display is refactored to always show the numeric v3 · name format.

  • RichMarkdownField reuses all existing TipTap extensions/parsers with no file I/O and is dynamically imported (ssr: false) in modals; streaming mode mirrors AI-generated content and settles back to editable when generation ends.
  • The @ menu is lazy-activated (queries disabled until first @ trigger), populates reactively via useSyncExternalStore into a detached ReactRenderer, and shares all popup chrome with the / slash-command menu through a refactored createSuggestionPopupRenderer.
  • normalizeMarkdownContent round-trips markdown through the editor's serializer to produce the canonical form, preventing the deferred mount-time re-serialization from falsely marking files dirty on open.

Confidence Score: 4/5

The PR is safe to merge. The core mechanics — duplicate plugin key prevention, sim: link round-trip, dirty-on-open baseline, streaming mirror — are all covered by new tests. The two findings are both about edge-case consistency rather than broken paths.

Two inconsistencies worth addressing before shipping: folders and skills lack the same { enabled: active } guard that files and knowledgeBases carry, so those queries may fire early if the underlying hooks don't self-gate on empty string. And the new !editValue.trim() guard silently swallows attempts to clear a named version's label with no feedback to the user. Neither blocks the primary feature paths.

use-markdown-mentions.ts (inconsistent enabled gating) and versions.tsx (silent no-op when clearing a version name).

Important Files Changed

Filename Overview
apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/rich-markdown-editor/mention/use-markdown-mentions.ts New hook aggregating workspace entities for the @ menu; folders and skills queries omit { enabled: active } while files and knowledgeBases explicitly include it.
apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/rich-markdown-editor/mention/mention.ts New TipTap extension wiring the @ mention popup; uses a distinct plugin key to coexist with slash-command, and correctly gates on whitespace/start-of-block to avoid triggering inside email addresses.
apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/rich-markdown-editor/mention/mention-list.tsx New @ menu list component mirroring slash-command list chrome; uses useSyncExternalStore for reactive updates from the MentionStore.
apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/rich-markdown-editor/menus/suggestion-popup.ts New shared popup renderer for both slash-command and @ mention suggestion popups; properly handles double-teardown (destroy + onExit) via null-checks, safe in all cleanup paths.
apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/rich-markdown-editor/rich-markdown-field.tsx New controlled WYSIWYG markdown field for modal embed; correctly holds frontmatter out-of-band, handles streaming mirror, and intercepts paste for SKILL.md destructuring.
apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/use-editable-file-content.ts Adds normalizeBaseline option to prevent false dirty-on-open for canonically-serialized files; everStreamedRef latch correctly skips normalization for any mount that ever streams.
apps/sim/app/workspace/[workspaceId]/skills/components/skill-modal/skill-modal.tsx Replaces plain textarea with RichMarkdownField; contentSeed key remounts editor on programmatic import, and onPasteText handles SKILL.md paste-destructuring.
apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/deploy/components/deploy-modal/components/general/components/version-description-modal.tsx Upgrades description field to RichMarkdownField with 2000-char limit enforced via isTooLong guard; uses isStreaming=isGenerating to mirror AI-generated content into the editor.
apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/deploy/components/deploy-modal/components/general/components/versions.tsx Refactors version display to always show numeric version alongside name (v3 · name); rename now starts empty with placeholder, and empty-name saves are blocked at the guard.
apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/rich-markdown-editor/normalize-content.ts New utility normalizing markdown to canonical editor form to neutralize false dirty-on-open signals; correctly skips round-trip-unsafe content.
apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/deploy/components/deploy-modal/components/general/format-version-label.ts Tiny pure helper formatting v3 or v3 · name; used consistently across all version label sites in general.tsx and versions.tsx.
apps/sim/app/workspace/[workspaceId]/files/components/file-viewer/rich-markdown-editor/mention/mention-store.ts Minimal external store bridging React Query data into TipTap's detached ReactRenderer; identity-checks on set to avoid spurious listener notifications.

Sequence Diagram

%%{init: {'theme': 'neutral'}}%%
sequenceDiagram
    participant Host as Host Component
    participant UEM as useEditorMentions
    participant UMM as useMarkdownMentions
    participant Store as MentionStore
    participant Ext as Mention Extension
    participant List as MentionList

    Host->>UEM: mount (workspaceId)
    UEM->>Ext: "storage.enabled = true"
    UEM->>Ext: "storage.onOpen = () => setActive(true)"
    Note over UMM: queries disabled (active=false)

    Host->>Ext: "user types @"
    Ext->>Ext: allow() → true
    Ext->>UEM: onOpen() → setActive(true)
    UEM->>UMM: "enabled=true → React Query fires"
    UMM-->>UEM: items[] (async)
    UEM->>Store: store.set(items)
    Store-->>List: useSyncExternalStore notify
    List-->>Host: menu populated reactively

    Host->>List: user selects item
    List->>Ext: command(item)
    Ext->>Ext: insertContent [label](sim:kind/id)
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
sequenceDiagram
    participant Host as Host Component
    participant UEM as useEditorMentions
    participant UMM as useMarkdownMentions
    participant Store as MentionStore
    participant Ext as Mention Extension
    participant List as MentionList

    Host->>UEM: mount (workspaceId)
    UEM->>Ext: "storage.enabled = true"
    UEM->>Ext: "storage.onOpen = () => setActive(true)"
    Note over UMM: queries disabled (active=false)

    Host->>Ext: "user types @"
    Ext->>Ext: allow() → true
    Ext->>UEM: onOpen() → setActive(true)
    UEM->>UMM: "enabled=true → React Query fires"
    UMM-->>UEM: items[] (async)
    UEM->>Store: store.set(items)
    Store-->>List: useSyncExternalStore notify
    List-->>Host: menu populated reactively

    Host->>List: user selects item
    List->>Ext: command(item)
    Ext->>Ext: insertContent [label](sim:kind/id)
Loading

Reviews (2): Last reviewed commit: "feat(rich-editor): rich markdown field +..." | Re-trigger Greptile

@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@greptile review

@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@cursor review

@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@greptile review

@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@cursor review

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit b393ea9. Configure here.

@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@greptile review

@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@cursor review

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit bb68df9. Configure here.

@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@greptile review

@waleedlatif1 waleedlatif1 force-pushed the rich-md-skills-deploy branch from bb68df9 to c46ef1b Compare June 25, 2026 23:51
@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@cursor review

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit c46ef1b. Configure here.

@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@greptile review

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit b40bbd4. Configure here.

…cursor

- Backspace at the start of an empty block whose previous sibling is a divider/image removes the
  blank line (instead of deleting the leaf) and selects the divider above; a non-empty block selects
  the leaf so a second Backspace deletes it (highlight-before-delete).
- Select-all (and any range selection) now visibly highlights dividers/images, which the native text
  highlight skips because leaves carry no text — via a decoration that paints a selection band.
- The gap cursor between two adjacent leaves no longer draws its stray caret (matching Linear); the
  position stays functional. Leading/trailing gap cursors keep their caret.
- Unit tests for the backspace + select-all behavior.
@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@greptile review

@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@cursor review

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit 31d1c92. Configure here.

…nd-trip, a11y

- Split mention-node into the schema-only `MarkdownMention` (mention-node.ts, no React/registry)
  and the live `MentionChip` node view (mention-chip.tsx); move the live factory to
  editor-extensions.ts and inject node views via DI. The headless round-trip path
  (markdown-parse/normalize-content/round-trip-safety) no longer pulls the 269-block registry —
  it now bundles for the browser with zero node-builtin deps.
- A sized + linked image serializes as `[![alt](src)](href)` (dropping the unrepresentable size)
  instead of `[<img>](href)`, which the tokenizer can't reparse — the link is preserved, no silent
  data loss. Also escape the href title symmetrically.
- Wire the suggestion menus as an ARIA combobox: while open, the editor gets
  aria-haspopup/expanded/controls and an aria-activedescendant tracking the active option, so screen
  readers announce it; cleared on close. Empty state is a role=status live region.
@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@greptile review

@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@cursor review

… cap

The per-group MAX_PER_GROUP limit is meant to keep the unfiltered menu from flooding; applying it
while a query is active hid matches past the eighth in a category, so search couldn't reach them.
Cap only when there's no query. Adds a regression test (12 matches shown when searching).
@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@greptile review

@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@cursor review

- mentionIcon never returns undefined: an empty/unrecognized kind (schema default '', or a future
  kind on a sim: link) falls back to a generic icon instead of crashing the chip's render. Adds tests.
- Add a mention input rule so typing `[label](sim:kind/id)` becomes a chip on the closing paren —
  matching the paste/load path (the tokenizer), which previously left typed syntax as literal text.
  A plain InputRule (full-range replace) is used; nodeInputRule would keep the surrounding brackets.
@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@greptile review

@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@cursor review

…n list

- RawMarkdownField now honors onPasteText (e.g. skill SKILL.md destructuring), so a full-document
  paste is intercepted in the raw fallback too, not only the WYSIWYG path.
- Bound the @-mention list while filtering (MAX_WHEN_FILTERED) so lifting the per-group cap for search
  can't render thousands of rows in the non-virtualized menu on a broad query; search still reaches
  deep matches well before the bound. Adds a test.
- Tighten an extensions.ts doc comment (the headless path omits the registry + node-view construction,
  not React itself).
@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@greptile review

@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@cursor review

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit bda9400. Configure here.

@waleedlatif1 waleedlatif1 merged commit c7eda5b into staging Jun 27, 2026
16 checks passed
@waleedlatif1 waleedlatif1 deleted the rich-md-skills-deploy branch June 27, 2026 00:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant