Repository navigation
feat(server): agents can read, list and search the fork's integration links - #424
Merged
Merged
Conversation
…links Agents could only attach Slack, Discord, Notion and Granola links to other threads' messages, and could not see what their own thread was linked to beyond Linear and GitHub. Add read_context_link, which reads any link the composer recognises through T3's integrations and returns the text a chip would send, and replace list_thread_issues with list_thread_links, which covers every integration's thread link. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ions Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
adampeterhiggins
added a commit
that referenced
this pull request
Oct 21, 2026
* test(server): restore fork tests dropped by the upstream sync The upstream test cull in #415 removed fork-only coverage for subfolder session import, imported-session resume, unguarded Claude overage silence and MCP tool-name uniqueness across the fork's toolkits. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(web): restore the command palette's fork actions lost in the upstream sync Upstream sync #415 rebuilt the command palette and dropped the fork's actions and views, leaving their hooks, reducer cases, and shortcuts orphaned. Restores, in the new structure: - New thread from PR, branch, or issue; Import conversation… - Export transcript, Show agents, Run scheduled task now (single task or a submenu, plus the run-scheduled-task open intent) - Attach thread / Linear / Notion / Granola / Slack / Discord / GitHub issue / pull request / repository, and link/unlink for GitHub, Linear, Slack, Discord, Notion and Granola - Open/close split view and focus the other pane; show/hide sidebar tabs - The Needs attention submenu and its attentionInbox.open shortcut - Deleting the `>` that came from the file picker returns to file search - Thread search shows tab-group-name matches again - Restart agent session goes through useRestartAgentSession Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(web): restore composer fork behaviour lost in the upstream sync Upstream sync #415 split the composer and silently dropped several fork behaviours. Port them back into the new structure: - @ menu Chats tab (Files/Chats/Agents/Models): Files lists paths only, Chats lists sibling chat tabs then other threads, opens on Chats when only chats match, has its own empty states, and picking a chat tab captures its summary as a thread-tab chip at the caret. - Pasted, stash-restored and draft-restored chips keep checkout, repository, thread-tab, issue, Slack/Discord/Notion/Granola, subagent, link and model context; stashing clears the thread's snapshot records. - Chips inserted mid-message land at the insertion caret (pending snapshot). - Citation comments get Save as draft and the Add to queue label. - composer.saveDraft keybinding works again. - A quick-message submit waits for attachment uploads. - File rows whose bytes are being restored show "Restoring…". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(web): only the focused split pane's composer answers stash and save-draft keys Restores the fork's split-pane guard dropped in the #415 sync. Both panes mount a composer with a window-level key handler, so without it one shortcut stashed or saved a draft in both panes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(web): restore fork timeline and file-link behaviour lost in the upstream sync The #415 sync split MessagesTimeline and ChatMarkdown into smaller files and dropped fork behaviour along the way. Port it into the new structure: - Fork into new tab on user messages (onForkFromMessage through the row context) - Tool-call and thought hover preview cards on collapsed work rows, with the expanded row and card sharing ToolCallDetails/toolCallDetailOutput - Copyable path breadcrumbs on collapsed and live tool rows - View diagnostics on failed turns - Workspace changed divider for moved threads - @handle and Attach to parent chat on the Subagent of divider - Linear/Granola monochrome brand marks for tool activity icons - File links follow the Open in default and extension rules, offer an Open with submenu and Open in T3 file viewer, and keep the registry mention hover - Restored scroll offsets stay inside rows that rewrapped while hidden Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(web): restore PR panel, PR page, sidebar pin and work-log behaviour lost in the upstream sync The upstream sync (#415) silently dropped several fork behaviours while upstream split the PR panel and page into smaller components. Port them back into the new structure: - PR panel: cite quotes from descriptions and comments (#329) and save a fix or selection as a thread draft (#353) again; the Guide and Code tabs only offer drafts for server threads. - PR header number, repository link and "Open on host" menu item follow the "Open links in" setting, and the number's context menu opens through it. - Thread PR panel renders the watch status line again (#98). - PR page filter counts read every involvement plus the search, ignore the unsearched baseline while a search is typed, show loading rows, and the applied filters render as removable pills below the controls. - Pinned sidebar rows keep the pin trailing, outside the hover swap (#150). - Work log labels read/search tools by what they did instead of "linked issues" (#424). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follows #419, which gave agents Linear reads.
Agents couldn't use T3 Code's Slack, Discord, Notion or Granola connections themselves, to read or to search. They could only attach those links to messages for other threads (
contextLinks). They also couldn't see what their own thread was linked to, becauselist_thread_issuescovered only Linear and GitHub. This hits Codex hardest, since it has no Slack, Notion, Linear or Granola MCP server of its own. Codex and Cursor ran about 40% of recent threads.read_context_link(url)reads any link the composer recognises and returns the same text a context chip gives the agent. That covers Slack and Discord messages with their threads, Notion pages, Granola notes, Linear issues, GitHub issues, and GitHub releases, tags, branches and commits. It reusesMcpContextLinks, which gains areadmethod next toattach, so it behaves exactly likecontextLinks: the same integration-off checks, the same Notion sharing hint, and errors that say "read" instead of "attach". Repository and pull request links are refused with a pointer to the right tool. The text comes fromformatComposerContextProviderPayload, now exported, which is what providers receive for a chip.list_thread_linksreplaceslist_thread_issues. It returns the thread group's Linear, GitHub, Slack, Discord, Notion and Granola links, or null for each one that isn't linked. The Slack, Discord, Notion and Granola link services gain aforThreadmethod, the same one Linear's has.search_slack_messagesandsearch_notion_pagesfind links to read: Slack with its own search syntax (newest 20 results), Notion by title among the pages shared with the connection. They wrap the sameSlackApi.searchMessages/NotionApi.searchPagesthe composer pickers use, and refuse while the integration is turned off in settings.Work-log labels, summaries and
docs/fork-differences.mdare updated. While here,McpContextLinks.attachis moved toEffect.fnto satisfyprefer-effect-fn.Tests:
vp test runonMcpContextLinks.test.ts,mcp/toolkits, the Slack, Notion, Granola and Discord server folders, andt3ToolSummary.test.ts, plus typecheck of server, shared, client-runtime and web. ThreeOrchestratorMcpService.*tests fail with an unimplementedprepareMessageWorkspacemock; they fail the same way onmain.Done by Claude Opus 5.5 in Claude Code via T3 Code.
🤖 Generated with Claude Code