支持把目录附加到会话(临时处理)
This commit is contained in:
@@ -46,7 +46,9 @@ import type {
|
||||
} from "@/lib/types"
|
||||
import {
|
||||
ATTACH_FILE_TO_SESSION_EVENT,
|
||||
APPEND_TEXT_TO_SESSION_EVENT,
|
||||
type AttachFileToSessionDetail,
|
||||
type AppendTextToSessionDetail,
|
||||
} from "@/lib/session-attachment-events"
|
||||
import { ModeSelector } from "@/components/chat/mode-selector"
|
||||
import { SessionConfigSelector } from "@/components/chat/session-config-selector"
|
||||
@@ -778,6 +780,29 @@ export function MessageInput({
|
||||
}
|
||||
}, [appendResourceAttachments, attachmentTabId])
|
||||
|
||||
useEffect(() => {
|
||||
if (!attachmentTabId) return
|
||||
|
||||
const handleAppendText = (event: Event) => {
|
||||
const customEvent = event as CustomEvent<AppendTextToSessionDetail>
|
||||
if (!customEvent.detail) return
|
||||
if (customEvent.detail.tabId !== attachmentTabId) return
|
||||
const appendText = customEvent.detail.text
|
||||
setText((prev) => {
|
||||
if (prev.length === 0) return appendText
|
||||
return prev.endsWith(" ") ? prev + appendText : prev + " " + appendText
|
||||
})
|
||||
requestAnimationFrame(() => {
|
||||
textareaRef.current?.focus()
|
||||
})
|
||||
}
|
||||
|
||||
window.addEventListener(APPEND_TEXT_TO_SESSION_EVENT, handleAppendText)
|
||||
return () => {
|
||||
window.removeEventListener(APPEND_TEXT_TO_SESSION_EVENT, handleAppendText)
|
||||
}
|
||||
}, [attachmentTabId])
|
||||
|
||||
useEffect(() => {
|
||||
let cancelled = false
|
||||
const unlisteners: Array<() => void | Promise<void>> = []
|
||||
|
||||
@@ -38,7 +38,10 @@ import {
|
||||
stopFileTreeWatch,
|
||||
} from "@/lib/tauri"
|
||||
import { disposeTauriListener } from "@/lib/tauri-listener"
|
||||
import { emitAttachFileToSession } from "@/lib/session-attachment-events"
|
||||
import {
|
||||
emitAttachFileToSession,
|
||||
emitAppendTextToSession,
|
||||
} from "@/lib/session-attachment-events"
|
||||
import type {
|
||||
FileTreeChangedEvent,
|
||||
FileTreeNode,
|
||||
@@ -612,6 +615,17 @@ function RenderNode({
|
||||
const isGitMenuDisabled = !gitEnabled || isGitignoreIgnored
|
||||
const shouldRenderChildren = expandedPaths.has(node.path)
|
||||
|
||||
const handleAttachDirToSession = () => {
|
||||
if (!activeSessionTabId) return
|
||||
const relativePath = node.path.endsWith("/")
|
||||
? `@${node.path} `
|
||||
: `@${node.path}/ `
|
||||
emitAppendTextToSession({
|
||||
tabId: activeSessionTabId,
|
||||
text: relativePath,
|
||||
})
|
||||
}
|
||||
|
||||
const handleOpenDirInSystemExplorer = async () => {
|
||||
try {
|
||||
await revealItemInDir(absolutePath)
|
||||
@@ -669,6 +683,12 @@ function RenderNode({
|
||||
</FileTreeFolder>
|
||||
</ContextMenuTrigger>
|
||||
<ContextMenuContent>
|
||||
<ContextMenuItem
|
||||
onSelect={handleAttachDirToSession}
|
||||
disabled={!activeSessionTabId}
|
||||
>
|
||||
{t("attachToCurrentSession")}
|
||||
</ContextMenuItem>
|
||||
<ContextMenuSub>
|
||||
<ContextMenuSubTrigger>{t("new")}</ContextMenuSubTrigger>
|
||||
<ContextMenuSubContent>
|
||||
|
||||
Reference in New Issue
Block a user