Files
tutti/packages/agent/gui/agent-gui/agentGuiNode/agentRichText/agentRichTextMentionSuggestionSuppression.ts
agent-radar 2ed3415fb7
Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 20:17:27 +08:00

48 lines
1.3 KiB
TypeScript

export interface AgentRichTextContentEditingKey {
key: string;
metaKey: boolean;
ctrlKey: boolean;
altKey: boolean;
}
export function createAgentRichTextMentionSuggestionSuppression(
initialValue: string
): {
isSuppressed: () => boolean;
releaseForContentEditingKey: (event: AgentRichTextContentEditingKey) => void;
setRestoredValue: (value: string) => void;
suppressTextInsertion: (text: string) => void;
} {
let restoredValue = initialValue.includes("@");
let transientInsertion = false;
return {
isSuppressed: () => restoredValue || transientInsertion,
releaseForContentEditingKey: (event) => {
if (
!event.metaKey &&
!event.ctrlKey &&
!event.altKey &&
(event.key.length === 1 ||
event.key === "Backspace" ||
event.key === "Delete")
) {
restoredValue = false;
}
},
setRestoredValue: (value) => {
restoredValue = value.includes("@");
},
suppressTextInsertion: (text) => {
transientInsertion = text.includes("@") && !text.endsWith("@");
if (!transientInsertion) {
return;
}
// timing: keep suppression through the synchronous editor insertion only.
window.setTimeout(() => {
transientInsertion = false;
}, 0);
}
};
}