源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
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
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
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
import { createRichTextMentionMarkdown } from "@tutti-os/ui-rich-text/core";
|
||||
|
||||
export const browserElementMentionKind = "browser-element";
|
||||
|
||||
export interface BrowserElementMentionReference {
|
||||
context: string;
|
||||
id: string;
|
||||
tagName: string;
|
||||
workspaceId: string;
|
||||
}
|
||||
|
||||
export interface BrowserElementMentionIdentity {
|
||||
label: string;
|
||||
scope?: Readonly<Record<string, string>>;
|
||||
}
|
||||
|
||||
export interface BrowserElementMentionPresentation {
|
||||
name: string;
|
||||
workspaceId?: string;
|
||||
}
|
||||
|
||||
export function createBrowserElementMentionMarkdown(
|
||||
reference: BrowserElementMentionReference
|
||||
): string {
|
||||
const tagName = normalizeBrowserElementTagName(reference.tagName);
|
||||
const context = reference.context.trim();
|
||||
const workspaceId = reference.workspaceId.trim();
|
||||
if (!tagName || !context || !workspaceId) {
|
||||
return "";
|
||||
}
|
||||
return createRichTextMentionMarkdown({
|
||||
providerId: browserElementMentionKind,
|
||||
entityId: reference.id,
|
||||
label: tagName,
|
||||
scope: { context, tag: tagName, workspaceId }
|
||||
});
|
||||
}
|
||||
|
||||
export function browserElementMentionLabel(tagName: string): string {
|
||||
const normalized = normalizeBrowserElementTagName(tagName);
|
||||
return normalized ? `<${normalized}>` : "";
|
||||
}
|
||||
|
||||
export function presentBrowserElementMention(
|
||||
mention: BrowserElementMentionIdentity
|
||||
): BrowserElementMentionPresentation | null {
|
||||
const label = browserElementMentionLabel(
|
||||
mention.scope?.tag?.trim() || mention.label
|
||||
);
|
||||
if (!label) {
|
||||
return null;
|
||||
}
|
||||
const workspaceId = mention.scope?.workspaceId?.trim() ?? "";
|
||||
return {
|
||||
name: label,
|
||||
...(workspaceId ? { workspaceId } : {})
|
||||
};
|
||||
}
|
||||
|
||||
function normalizeBrowserElementTagName(value: string): string {
|
||||
return value
|
||||
.trim()
|
||||
.toLowerCase()
|
||||
.replace(/[^a-z0-9:-]/gu, "")
|
||||
.slice(0, 100);
|
||||
}
|
||||
Reference in New Issue
Block a user