Commit Graph

215 Commits

Author SHA1 Message Date
ruitanglin e444817c5d fix(citations): render external links as badges during streaming
During streaming when citations are still loading (isLoadingCitations=true),
all external links should be rendered as badges since we don't know yet
which links are citations. After streaming completes, only links in
citationMap are rendered as badges.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-06 16:09:03 +08:00
ruitanglin e9648b11cd fix(citations): parse citations in reasoning content
When only reasoning content exists (no main content), the citations
block was not being parsed and removed. Now reasoning content also
goes through parseCitations to hide the raw citations block.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-06 16:04:49 +08:00
ruitanglin 0cf8ba86d1 fix(artifacts): only render citation badges for links in citationMap
Same fix as message-list-item: project URLs and regular links in
artifact file preview should be rendered as plain links, not badges.
Only actual citations (in citationMap) should be rendered as badges.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-06 15:55:53 +08:00
ruitanglin 7a3a5f5196 fix(citations): only render citation badges for links in citationMap
Project URLs and regular links should be rendered as plain underlined
links, not as citation badges. Only links that are actual citations
(present in citationMap) should be rendered as badges.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-06 15:15:45 +08:00
ruitanglin c87f176fac fix(citations): use markdown link text as fallback for display
When citation data is not available, use the markdown link text
(children) as display text instead of just the domain. This ensures
that links like [OpenJudge](github.com/...) show 'OpenJudge' instead
of just 'github.com'.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-06 15:06:51 +08:00
ruitanglin 34a199c6f3 fix(messages): prevent URL autolink bleeding into adjacent text
For human messages, disable remark-gfm autolink feature to prevent
URLs from incorrectly including adjacent text (especially Chinese
characters) as part of the link. This ensures that when users input
"https://example.com 帮我分析", only the URL becomes a link.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-06 14:30:57 +08:00
ruitanglin bcbbf9cf3f fix(citations): only render CitationLink badges for AI messages
Human messages should display links as plain underlined text,
not as citation badges. This preserves the original user input
appearance when users paste URLs in their messages.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-06 14:28:28 +08:00
ruitanglin 0f9e3d508b fix(citations): improve citation link rendering and copy behavior
- Use citation.title for display text in CitationLink to ensure correct
  titles show during streaming (instead of generic "Source" text)
- Render all external links as CitationLink badges for consistent styling
  during streaming output
- Add removeAllCitations when copying message content to clipboard
- Simplify citations_format prompt for cleaner AI output

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-04 16:34:12 +08:00
ruitanglin 1e2675beb3 feat(citations): add shared citation components and optimize code
## New Features
- Add `CitationLink` shared component for rendering citation hover cards
- Add `CitationsLoadingIndicator` component for showing loading state
- Add `removeAllCitations` utility to strip all citations from content
- Add backend support for removing citations when downloading markdown files
- Add i18n support for citation loading messages (en-US, zh-CN)

## Code Optimizations
- Remove duplicate `ExternalLinkBadge` component, reuse `CitationLink` instead
- Consolidate `remarkPlugins` config in `streamdownPlugins` to avoid duplication
- Remove unused imports: `Citation`, `buildCitationMap`, `extractDomainFromUrl`, etc.
- Remove unused `messages` parameter from `ToolCall` component
- Remove unused `isWriteFile` parameter from `ArtifactFilePreview` component
- Remove unused `useI18n` hook from `MessageContent` component

## Bug Fixes
- Fix `remarkGfm` plugin configuration that prevented table rendering
- Fix React Hooks rule violation: move `useMemo` to component top level
- Replace `||` with `??` for nullish coalescing in clipboard data

## Code Cleanup
- Remove debug console.log/info statements from:
  - `threads/hooks.ts`
  - `notification/hooks.ts`
  - `memory-settings-page.tsx`
- Fix import order in `message-group.tsx`

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-04 11:56:10 +08:00
Henry Li 552d1c3a9a feat: add memory settings page 2026-02-03 18:18:56 +08:00
Henry Li 4fd9a2de8e docs: add README.md 2026-02-02 23:24:58 +08:00
Henry Li 268b7f911c fix: fix position 2026-02-02 16:40:43 +08:00
Henry Li 8bc9d1b226 fix: set default state for todo list collapse to true 2026-02-02 14:46:26 +08:00
Henry Li e01127eec9 fix: set default state for todo list collapse to false 2026-02-02 14:46:10 +08:00
Henry Li 26acd6f3ad feat: enhance welcome component and input box with skill mode handling and localization updates 2026-02-02 14:44:23 +08:00
Henry Li 9cc41139cb feat: update button in skill settings to include icon 2026-02-02 14:31:44 +08:00
Henry Li b5e9eeea99 feat: update button styling for artifacts tooltip 2026-02-02 11:43:02 +08:00
Henry Li e673405c00 feat: add suggestions 2026-02-02 11:21:30 +08:00
Henry Li b1227bb911 feat: integrate PromptInputProvider into ChatLayout and utilize prompt input controller in ChatPage 2026-02-02 10:18:02 +08:00
Henry Li f1db301d77 feat: add file icons 2026-02-02 10:02:31 +08:00
Henry Li 02400e0e8c feat: add file icon 2026-02-02 09:49:44 +08:00
Henry Li 0091da1aee feat: adjust tooltips 2026-02-02 09:32:18 +08:00
Henry Li 076c1f0985 feat: wrap path and command in Tooltip for enhanced user experience 2026-02-02 09:23:36 +08:00
Henry Li 33e82a7abe fix: update TooltipContent component to handle sideOffset correctly and add shadow styling 2026-02-02 09:23:24 +08:00
Henry Li ac16a73a47 docs: add comments 2026-02-02 09:11:05 +08:00
Henry Li 7da0a03dd0 feat: add skeleton 2026-02-02 09:05:33 +08:00
Henry Li 1eb4da6c75 feat: dynamic title 2026-02-02 09:05:24 +08:00
Henry Li b50fbf83d0 feat: use `create skill` as title 2026-02-02 08:43:37 +08:00
Henry Li 890a8379ce feat: update skills 2026-02-01 11:12:08 +08:00
Henry Li e28d5d2cf9 docs: update artifacts 2026-02-01 11:05:00 +08:00
Henry Li 88e1c7c0b3 feat: add new demo 2026-02-01 10:58:27 +08:00
Henry Li a1267875fa feat: add tooltip for installation 2026-02-01 10:55:08 +08:00
Henry Li 45fab66a7d fix: add translations 2026-01-31 22:49:59 +08:00
Henry Li 7d3e7eb1c9 docs: rephrasing 2026-01-31 22:42:17 +08:00
Henry Li 67ec1162cb feat: implement create skill 2026-01-31 22:31:25 +08:00
hetaoBackend 41f8b931c9 feat: add .skill file preview support
Enable previewing .skill files (ZIP archives) by extracting and displaying
their SKILL.md content. Add caching to avoid repeated ZIP extraction.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 22:27:06 +08:00
hetaoBackend 5834b15af7 feat: add skill installation API endpoint
Add POST /api/skills/install endpoint to install .skill files from
thread's user-data directory. The endpoint extracts the ZIP archive,
validates SKILL.md frontmatter, and installs to skills/custom/.

Frontend Install buttons now call the API instead of downloading.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 22:10:05 +08:00
Henry Li 8ecb6b3d1d fix: fix eslint errors and warnings 2026-01-31 21:46:31 +08:00
Henry Li 9c3b928f1d feat: preview the message if possible 2026-01-31 20:22:15 +08:00
Henry Li 2ba687b239 fix: fix eslint errors 2026-01-31 11:11:13 +08:00
Henry Li c62caf95c4 feat: add notification 2026-01-31 11:08:27 +08:00
Henry Li 4e0571f3b3 feat: change email 2026-01-30 22:32:47 +08:00
Henry Li 21e12d91eb fix: fix condition of displaying artifacts 2026-01-30 21:51:18 +08:00
Henry Li 1bb91bb267 feat: support Github Flavored Markdown 2026-01-30 16:41:18 +08:00
Henry Li 05794e29d1 chore: remove 2026-01-30 11:01:09 +08:00
Henry Li 939745d027 feat: re-arrange icons 2026-01-29 16:17:41 +08:00
Henry Li 66deedf3b2 fix: add max width 2026-01-29 16:12:30 +08:00
Henry Li 79955d2e6c feat: display mode 2026-01-29 15:57:08 +08:00
Henry Li 98e08a85c9 feat: use "mode" instead of "thinking_enabled" and "is_plan_mode" 2026-01-29 15:48:50 +08:00
Henry Li 0ba82a9fd7 fix: fix renaming 2026-01-29 15:31:56 +08:00