Files
Ed Zynda 25410af440 feat: add smart @ attachments with MIME detection and MCP resource support
Phase 1: Smart @ for local files
- ProcessFileAttachments now returns FileAttachmentResult with separate
  ProcessedText and FileParts fields instead of a plain string
- Binary files (images, audio, video, PDFs, etc.) detected via MIME type
  are extracted as multimodal FileParts instead of XML-wrapped text garbage
- detectMediaType() uses extension-based lookup then content sniffing
- isBinaryMediaType() classifies image/*, audio/*, video/*, and specific
  application types as binary
- @mcp:server:uri token format for referencing MCP resources in text
- All 4 submission paths (TUI submit, TUI steer, MCP prompt, CLI) updated
- App.RunOnceWithFiles/RunOnceResultWithFiles/RunOnceWithDisplayAndFiles
  added for non-interactive multimodal submission

Phase 2: MCP resources in @ autocomplete
- MCPToolManager gains loadServerResources(), GetResources(), ReadResource(),
  SubscribeResource(), UnsubscribeResource(), RefreshServerResources()
- MCPResource and MCPResourceContent types for resource metadata/content
- FileSuggestion extended with IsMCPResource, MCPServerName, MCPResourceURI
- InputComponent.SetMCPResourceProvider() wires resource suggestions into
  the @ popup alongside local files
- @ popup merges local file suggestions with MCP resource suggestions,
  sorted by fuzzy match score
- MCP resources display 'mcp:servername' in the popup description
- Selecting an MCP resource inserts @mcp:server:uri format
- ProcessFileAttachments resolves @mcp: tokens via MCPResourceReader callback
- Text resources are XML-wrapped as <resource>; binary resources become
  FileParts for multimodal submission
- Agent, Kit SDK, and cmd/root.go wired end-to-end

Phase 3: Resource subscriptions (foundation)
- SubscribeResource/UnsubscribeResource on MCPToolManager
- onResourcesChanged callback for live refresh (wired but not yet
  triggering UI refresh automatically)
- RefreshServerResources for manual resource list refresh
2026-04-15 13:01:36 +03:00

70 lines
2.2 KiB
Go

package ui
// This file re-exports types from subpackages for backward compatibility.
// External importers can continue using ui.XXX without needing to import
// from subpackages directly.
import (
"github.com/mark3labs/kit/internal/ui/commands"
"github.com/mark3labs/kit/internal/ui/core"
"github.com/mark3labs/kit/internal/ui/fileutil"
"github.com/mark3labs/kit/internal/ui/prefs"
"github.com/mark3labs/kit/internal/ui/style"
)
// Re-export from core package
type (
ImageAttachment = core.ImageAttachment
SubmitMsg = core.SubmitMsg
CancelTimerExpiredMsg = core.CancelTimerExpiredMsg
TreeNodeSelectedMsg = core.TreeNodeSelectedMsg
TreeCancelledMsg = core.TreeCancelledMsg
ShellCommandMsg = core.ShellCommandMsg
ShellCommandResultMsg = core.ShellCommandResultMsg
)
// Re-export from commands package
type (
SlashCommand = commands.SlashCommand
ExtensionCommand = commands.ExtensionCommand
)
// Re-export functions and types from fileutil package
var ProcessFileAttachments = fileutil.ProcessFileAttachments
// Re-export types from fileutil
type (
FileAttachmentResult = fileutil.FileAttachmentResult
FilePart = fileutil.FilePart
MCPResourceReader = fileutil.MCPResourceReader
)
// Re-export from prefs package
var (
LoadThemePreference = prefs.LoadThemePreference
SaveThemePreference = prefs.SaveThemePreference
LoadModelPreference = prefs.LoadModelPreference
SaveModelPreference = prefs.SaveModelPreference
LoadThinkingLevelPreference = prefs.LoadThinkingLevelPreference
SaveThinkingLevelPreference = prefs.SaveThinkingLevelPreference
)
// Re-export from style package
type (
Theme = style.Theme
MarkdownThemeColors = style.MarkdownThemeColors
)
var (
GetTheme = style.GetTheme
SetTheme = style.SetTheme
DefaultTheme = style.DefaultTheme
ApplyTheme = style.ApplyTheme
ApplyThemeWithoutSave = style.ApplyThemeWithoutSave
ListThemes = style.ListThemes
RegisterThemeFromConfig = style.RegisterThemeFromConfig
KitBanner = style.KitBanner
AdaptiveColor = style.AdaptiveColor
IsDarkBackground = style.IsDarkBackground
)