fix(web,mobile): render Codex citations and artifact templates - #8584
Conversation
- parse Codex file directives into clickable file links on web and mobile - preserve unfinished, escaped, and code-block citations as literal text - update copy text to use markdown links for cited files
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Warning Your free Security trial is over. An organization admin can activate Security or dismiss this notice. Comment |
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
There was a problem hiding this comment.
One blocking finding in apps/web/src/components/ChatMarkdown.tsx: enabling remark-directive for all chat markdown changes how ordinary text is rendered, because only codex-file-citation directives get a handler.
Secondary, non-blocking note: the mobile side normalizes citations for copy (copiedText in ThreadFeed.tsx), but the web assistant copy button (MessagesTimeline.tsx → resolveAssistantMessageCopyState → MessageCopyButton) still copies the raw message.text, so copied web output keeps the private :codex-file-citation{...} syntax that the rendered chip now hides. Worth aligning with the mobile behavior in a follow-up.
Posted via Macroscope — UI Consistency
ApprovabilityVerdict: Not approved Macroscope's review found this PR not approvable — This PR adds new Codex citation rendering and an interactive artifact-template workflow across web and mobile, backed by a substantial shared Markdown parser and composer integration. The production-path behavior and new user-facing capability warrant human review. No code changes detected at You can add or adjust custom eligibility rules. Learn more. |
There was a problem hiding this comment.
Two residual gaps in the new remarkCodexFileCitations directive handling in apps/web/src/components/ChatMarkdown.tsx. Both are rendering regressions introduced by enabling remark-directive on all chat markdown; details inline.
Posted via Macroscope — UI Consistency
There was a problem hiding this comment.
One finding: enabling remarkDirective for the whole chat pipeline changes the markdown grammar for all message text, which regresses two unrelated rendering paths. Details inline.
Posted via Macroscope — UI Consistency
There was a problem hiding this comment.
One finding: the task-list marker offsets ChatMarkdown reports are now computed against the citation-transformed source, but the only consumer (FilePreviewPanel) applies them to the original file contents.
Posted via Macroscope — UI Consistency
There was a problem hiding this comment.
Reviewed the web-side citation rendering change (ChatMarkdown.tsx, MessagesTimeline.logic.ts). The pre-parse rewrite now runs outside the render pipeline, so the earlier directive-grammar regressions (flow directives losing their paragraph wrapper, directive-like prose in links, over-indented list recovery) no longer apply, and task-list offsets stay on the original source when onTaskListChange is supplied. One leftover from the previous approach is noted inline; nothing blocking.
Posted via Macroscope — UI Consistency
Dismissing prior approval to re-evaluate c5ce1fd
- parse `::artifact-template` directives into interactive cards - let web and mobile insert the template prompt into the composer
Dismissing prior approval to re-evaluate 92b91bc
There was a problem hiding this comment.
Reviewed the web-side Codex directive rendering (ChatMarkdown, markdown-codex-directives, markdown-clipboard, ChatView/MessagesTimeline wiring) for shared-primitive use, Tailwind/CSS ownership, and interaction semantics. The artifact-template card correctly uses the Button primitive with semantic tokens and owner-local classes, the passive-vs-actionable card contract is respected at each ChatMarkdown call site, and every environment-scoped action still resolves scope explicitly. One regression risk on the streaming hot path is noted inline.
Posted via Macroscope — UI Consistency
There was a problem hiding this comment.
One finding: the assistant message copy button now emits Codex directive source that no longer appears anywhere in the rendered message, and it disagrees with the highlight-and-copy path this PR wires up. Details inline.
Posted via Macroscope — UI Consistency
…-handling # Conflicts: # apps/web/src/components/ChatView.logic.ts
There was a problem hiding this comment.
One finding on the Codex directive pipeline in ChatMarkdown. Details inline.
Posted via Macroscope — UI Consistency
There was a problem hiding this comment.
Two behaviors that earlier revisions of this branch fixed have regressed in the current rewrite. Both are on the web surfaces this check covers.
Posted via Macroscope — UI Consistency
…-handling # Conflicts: # apps/web/src/components/ChatMarkdown.tsx
…-handling # Conflicts: # apps/web/src/components/ChatView.logic.ts
…-handling # Conflicts: # apps/web/src/components/ChatView.logic.ts
…-handling # Conflicts: # apps/mobile/src/features/threads/ThreadFeed.tsx # apps/web/src/components/chat/MessagesTimeline.tsx
…-handling # Conflicts: # apps/mobile/src/features/threads/ThreadFeed.tsx # apps/web/src/components/ChatMarkdown.tsx # apps/web/src/components/chat/MessagesTimeline.tsx
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 314bc9c. Configure here.
## What's Changed * fix(web): reduce title bar scroll fade height by @maria-rcks in pingdotgg/t3code#8799 * fix(windows): strip quotes from repaired PATH by @UtkarshUsername in pingdotgg/t3code#8746 * fix(web): open agent images in expanded preview by @maria-rcks in pingdotgg/t3code#8807 * fix(git): follow repository instructions in generated source control text by @maria-rcks in pingdotgg/t3code#8804 * fix(server): stop overpricing cached Claude tokens by @SunkenInTime in pingdotgg/t3code#8806 * fix(web): keep image preview above sidebar control by @maria-rcks in pingdotgg/t3code#8811 * fix(web): keep right panel synced with agent edits by @maria-rcks in pingdotgg/t3code#8803 * fix(web,mobile): render Codex citations and artifact templates by @Yash-Singh1 in pingdotgg/t3code#8584 * chore: add Windows setup script to t3.json by @UtkarshUsername in pingdotgg/t3code#8814 * fix(web): fold interim turn responses by @maria-rcks in pingdotgg/t3code#8828 * fix(web): use circle alert for failed tool calls by @maria-rcks in pingdotgg/t3code#8840 * feat(mobile): add offline iPhone voice input by @t3dotgg in pingdotgg/t3code#8614 **Full Changelog**: pingdotgg/t3code@v0.0.37-nightly.20260830.1232...v0.0.37-nightly.20260831.1233 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.37-nightly.20260831.1233
## What's Changed * Remove Messages Glass Lab experiment by @juliusmarminge in pingdotgg/t3code#8599 * Require human review for pull requests changing product defaults by @juliusmarminge in pingdotgg/t3code#8603 * fix(codex): avoid quadratic app-server input buffering by @juliusmarminge in pingdotgg/t3code#8605 * fix(mobile): stabilize iOS header item transitions by @juliusmarminge in pingdotgg/t3code#8607 * chore(mobile): upgrade to Expo SDK 57 by @juliusmarminge in pingdotgg/t3code#8609 * fix(mobile): harden native header toolbar items by @juliusmarminge in pingdotgg/t3code#8611 * fix(server): stop querying Claude context usage after turns by @t3dotgg in pingdotgg/t3code#8610 * chore: vouch ryanrhughes by @t3dotgg in pingdotgg/t3code#8613 * feat(web): attach PDFs, ZIPs, and other files to a turn by @t3dotgg in pingdotgg/t3code#8236 * feat(web): keybinding settings as settings rows by @StiensWout in pingdotgg/t3code#8532 * feat: let an environment publish themes as a file by @ryanrhughes in pingdotgg/t3code#8569 * fix(web): clean up provider settings list and editor by @StiensWout in pingdotgg/t3code#8504 * fix(web): keep project picker popup inside the sidebar by @SunkenInTime in pingdotgg/t3code#8627 * fix(mobile): prevent header overflow and back-button artifacts by @juliusmarminge in pingdotgg/t3code#8624 * fix(server): retry automatic thread title generation by @Bil0000 in pingdotgg/t3code#8087 * fix(client-runtime): refresh edited pull request comments by @Bil0000 in pingdotgg/t3code#8094 * fix(web): four composer spacing defects by @Bil0000 in pingdotgg/t3code#8090 * perf(desktop): skip duplicate browser updates by @Bil0000 in pingdotgg/t3code#8018 * fix(web): render nested markdown images correctly by @flamboh in pingdotgg/t3code#8501 * fix(web): unify activity logs and composer banners by @juliusmarminge in pingdotgg/t3code#8693 * fix(mobile): reduce dev-client reload and Metro startup cost by @juliusmarminge in pingdotgg/t3code#8694 * revert(web): restore previous composer banners by @t3dotgg in pingdotgg/t3code#8733 * test(web): remove tests for unreachable helpers by @t3-code[bot] in pingdotgg/t3code#8738 * feat(mobile): update tool summaries and chat transitions by @juliusmarminge in pingdotgg/t3code#8793 * feat(web): play video attachments in chat by @Bil0000 in pingdotgg/t3code#8688 * fix(web,mobile): snooze menu no longer offers the same wake time twice by @vitalyiegorov in pingdotgg/t3code#8741 * fix(grok): allow model changes in existing threads by @ahmed-besic in pingdotgg/t3code#8392 * feat(mobile): pick, share, and receive files in threads by @t3dotgg in pingdotgg/t3code#8237 * fix(web): reduce title bar scroll fade height by @maria-rcks in pingdotgg/t3code#8799 * fix(windows): strip quotes from repaired PATH by @UtkarshUsername in pingdotgg/t3code#8746 * fix(web): open agent images in expanded preview by @maria-rcks in pingdotgg/t3code#8807 * fix(git): follow repository instructions in generated source control text by @maria-rcks in pingdotgg/t3code#8804 * fix(server): stop overpricing cached Claude tokens by @SunkenInTime in pingdotgg/t3code#8806 * fix(web): keep image preview above sidebar control by @maria-rcks in pingdotgg/t3code#8811 * fix(web): keep right panel synced with agent edits by @maria-rcks in pingdotgg/t3code#8803 * fix(web,mobile): render Codex citations and artifact templates by @Yash-Singh1 in pingdotgg/t3code#8584 * chore: add Windows setup script to t3.json by @UtkarshUsername in pingdotgg/t3code#8814 * fix(web): fold interim turn responses by @maria-rcks in pingdotgg/t3code#8828 * fix(web): use circle alert for failed tool calls by @maria-rcks in pingdotgg/t3code#8840 * feat(mobile): add offline iPhone voice input by @t3dotgg in pingdotgg/t3code#8614 * fix(web): prevent pull request metadata overlap by @MatthewFeroz in pingdotgg/t3code#8790 ## New Contributors * @ryanrhughes made their first contribution in pingdotgg/t3code#8569 * @ahmed-besic made their first contribution in pingdotgg/t3code#8392 * @MatthewFeroz made their first contribution in pingdotgg/t3code#8790 **Full Changelog**: pingdotgg/t3code@v0.0.36...v0.0.37 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.37

Artifact template skill UI:

What Changed
packages/client-runtimeand wired them into the chat feed render path.Why
Codex file citations were appearing as plain text in some client surfaces, which made them harder to read and prevented users from interacting with them as links.
This change normalizes citation rendering at the shared client layer so web and mobile stay consistent without duplicating citation-specific parsing logic in each app.
UI Changes
Checklist
Note
Medium Risk
Touches chat markdown parsing, sanitization, and composer draft mutation across web and mobile; behavior is heavily tested but directive edge cases could still affect message rendering.
Overview
Adds shared Codex markdown directive handling in
client-runtime(remarkCodexDirectives, citation/template helpers) and wires it through webChatMarkdownand mobileThreadFeed.Assistant messages now turn
:codex-file-citation{…}into file link chips and::artifact-template{…}into template cards (with optional Use template when a composer is available). Use template appends the kind-specific Codex skill prompt viaappendCodexArtifactTemplateUsePrompt(no duplicate if already at the end of the draft) and focuses the composer. Copy and clipboard serialization use rendered text (links /Name (Document template)) instead of raw directive syntax; malformed, streaming-incomplete, escaped, or in-code directives stay literal.Web sanitization allows artifact-template
divdata attributes; mobile splits markdown around template segments for native rendering.Reviewed by Cursor Bugbot for commit 314bc9c. Bugbot is set up for automated code reviews on this repo. Configure here.
Note
Render Codex file citations and artifact-template cards in web and mobile chat
remarkCodexDirectivesplugin inpackages/client-runtimethat parses:codex-file-citationand::artifact-templatedirectives into renderable AST nodes, leaving malformed or unrelated colon syntax as literal textChatMarkdownrenders citations as Markdown links and artifact templates asCodexArtifactTemplateCardcomponents with an optional 'Use template' button; mobileThreadFeeddoes the same by splitting markdown into template and non-template segmentsappendCodexArtifactTemplateUsePrompt(skips insertion if the prompt is already present) and focuses the composerDisplay Name (Presentation label)for templates) instead of raw directive syntaxCHAT_MARKDOWN_SANITIZE_SCHEMAnow allows extradivdata attributes (CODEX_ARTIFACT_TEMPLATE_HAST_PROPERTIES) so artifact-template metadata survives sanitization; reviewers should verify no unintended attributes pass throughMacroscope summarized 314bc9c.