Add mobile advanced prompts
This commit is contained in:
1 parent
337ae35897
commit
f4683457ee
1 file changed
+90
@@ -36,6 +36,7 @@ import {
|
||||
Search,
|
||||
Settings,
|
||||
ShieldCheck,
|
||||
Sparkles,
|
||||
Tag,
|
||||
Trash2,
|
||||
Upload,
|
||||
@@ -121,6 +122,26 @@ const ALL_TOKEN_SCOPES = [
|
||||
"read:tags",
|
||||
"write:tags",
|
||||
];
|
||||
const ADVANCED_PROMPTS = [
|
||||
{
|
||||
id: "persona",
|
||||
title: "人物画像",
|
||||
prompt:
|
||||
"请通过 EdgeEver MCP 读取我的笔记,基于真实笔记内容为我整理一份人物画像。请只根据笔记中的证据判断,不要做心理诊断,不要夸张定性。输出包括:长期关注的主题、做事偏好、能力线索、反复出现的问题、近期动向,并在每条结论后列出相关笔记标题或 memo id。",
|
||||
},
|
||||
{
|
||||
id: "knowledgeMap",
|
||||
title: "知识图谱",
|
||||
prompt:
|
||||
"请通过 EdgeEver MCP 读取我的笔记,为我整理一份知识地图。请找出主要知识领域、每个领域下的关键概念、相关笔记、我已经掌握的部分和还需要补齐的问题。输出结构要适合后续继续学习和写作。",
|
||||
},
|
||||
{
|
||||
id: "tagAdvice",
|
||||
title: "标签建议",
|
||||
prompt:
|
||||
"请通过 EdgeEver MCP 读取我的笔记和现有标签,帮我设计一套更清晰的标签体系。请指出重复、过细、过宽或命名不一致的标签,并给出合并、重命名和新增标签建议。先不要修改笔记,等我确认后再执行。",
|
||||
},
|
||||
];
|
||||
|
||||
type MobileView = "notes" | "search" | "account" | "settings";
|
||||
type MemoView = "notebook" | "trash";
|
||||
@@ -160,6 +181,7 @@ export const WorkspaceScreen = () => {
|
||||
const [resourcesOpen, setResourcesOpen] = useState(false);
|
||||
const [apiTokensOpen, setApiTokensOpen] = useState(false);
|
||||
const [evernoteGuideOpen, setEvernoteGuideOpen] = useState(false);
|
||||
const [advancedPlayOpen, setAdvancedPlayOpen] = useState(false);
|
||||
const [systemInfoOpen, setSystemInfoOpen] = useState(false);
|
||||
const [revisionMemo, setRevisionMemo] = useState<MemoDetail | null>(null);
|
||||
const [selectedMemoIds, setSelectedMemoIds] = useState<Set<string>>(() => new Set());
|
||||
@@ -563,6 +585,7 @@ export const WorkspaceScreen = () => {
|
||||
<SettingsView
|
||||
notebookCount={notebooks.length}
|
||||
memoCount={memoCount}
|
||||
onOpenAdvancedPlay={() => setAdvancedPlayOpen(true)}
|
||||
onOpenApiTokens={() => setApiTokensOpen(true)}
|
||||
onOpenEvernoteGuide={() => setEvernoteGuideOpen(true)}
|
||||
onOpenNotebookManager={() => setNotebookManagerOpen(true)}
|
||||
@@ -614,6 +637,7 @@ export const WorkspaceScreen = () => {
|
||||
<ResourcesModal activeMemo={selectedMemo} onClose={() => setResourcesOpen(false)} visible={resourcesOpen} />
|
||||
<ApiTokensModal baseUrl={session?.baseUrl ?? ""} onClose={() => setApiTokensOpen(false)} visible={apiTokensOpen} />
|
||||
<EvernoteGuideModal onClose={() => setEvernoteGuideOpen(false)} visible={evernoteGuideOpen} />
|
||||
<AdvancedPlayModal onClose={() => setAdvancedPlayOpen(false)} visible={advancedPlayOpen} />
|
||||
<SystemInfoModal baseUrl={session?.baseUrl ?? ""} memoCount={memoCount} notebookCount={notebooks.length} onClose={() => setSystemInfoOpen(false)} visible={systemInfoOpen} />
|
||||
<RevisionHistoryModal
|
||||
memo={revisionMemo}
|
||||
@@ -937,6 +961,7 @@ const SettingsView = ({
|
||||
isSyncingQueue,
|
||||
memoCount,
|
||||
notebookCount,
|
||||
onOpenAdvancedPlay,
|
||||
onOpenApiTokens,
|
||||
onOpenEvernoteGuide,
|
||||
onOpenNotebookManager,
|
||||
@@ -951,6 +976,7 @@ const SettingsView = ({
|
||||
isSyncingQueue: boolean;
|
||||
memoCount: number;
|
||||
notebookCount: number;
|
||||
onOpenAdvancedPlay: () => void;
|
||||
onOpenApiTokens: () => void;
|
||||
onOpenEvernoteGuide: () => void;
|
||||
onOpenNotebookManager: () => void;
|
||||
@@ -982,6 +1008,9 @@ const SettingsView = ({
|
||||
<Pressable onPress={onOpenEvernoteGuide}>
|
||||
<PanelRow label="Evernote 导入指引" value="MCP 迁移流程与 Prompt" />
|
||||
</Pressable>
|
||||
<Pressable onPress={onOpenAdvancedPlay}>
|
||||
<PanelRow label="进阶玩法" value="人物画像、知识图谱、标签建议 Prompt" />
|
||||
</Pressable>
|
||||
<Pressable onPress={onOpenSystemInfo}>
|
||||
<PanelRow label="系统信息" value="版本、平台、实例、统计" />
|
||||
</Pressable>
|
||||
@@ -1863,6 +1892,52 @@ const EvernoteGuideModal = ({ onClose, visible }: { onClose: () => void; visible
|
||||
</Modal>
|
||||
);
|
||||
|
||||
const AdvancedPlayModal = ({ onClose, visible }: { onClose: () => void; visible: boolean }) => {
|
||||
const [copiedPromptId, setCopiedPromptId] = useState<string | null>(null);
|
||||
|
||||
const copyPrompt = async (promptId: string, prompt: string) => {
|
||||
await Clipboard.setStringAsync(prompt);
|
||||
setCopiedPromptId(promptId);
|
||||
setTimeout(() => setCopiedPromptId((current) => (current === promptId ? null : current)), 1600);
|
||||
};
|
||||
|
||||
return (
|
||||
<Modal animationType="slide" onRequestClose={onClose} presentationStyle="pageSheet" visible={visible}>
|
||||
<SafeAreaView style={styles.modalSafeArea}>
|
||||
<View style={styles.modalHeader}>
|
||||
<IconButton onPress={onClose}>
|
||||
<X color="#0f172a" size={20} />
|
||||
</IconButton>
|
||||
<Text style={styles.modalTitle}>进阶玩法</Text>
|
||||
<View style={styles.iconButtonPlaceholder} />
|
||||
</View>
|
||||
|
||||
<ScrollView contentContainerStyle={styles.editorForm}>
|
||||
<View style={styles.guideHero}>
|
||||
<Sparkles color="#047857" size={24} />
|
||||
<Text style={styles.panelValue}>搭配 AI Agent 的进阶工作流</Text>
|
||||
<Text style={styles.panelLabel}>复制 Prompt 后,配合 EdgeEver MCP 让 AI 读取真实笔记并输出结构化结果。</Text>
|
||||
</View>
|
||||
|
||||
{ADVANCED_PROMPTS.map((item) => (
|
||||
<View key={item.id} style={styles.promptCard}>
|
||||
<View style={styles.promptCardHeader}>
|
||||
<Text style={styles.panelValue}>{item.title}</Text>
|
||||
<ActionButton label={copiedPromptId === item.id ? "已复制" : "复制"} onPress={() => copyPrompt(item.id, item.prompt)}>
|
||||
{copiedPromptId === item.id ? <ShieldCheck color="#047857" size={16} /> : <Copy color="#0f172a" size={16} />}
|
||||
</ActionButton>
|
||||
</View>
|
||||
<Text selectable style={styles.revisionPreviewText}>
|
||||
{item.prompt}
|
||||
</Text>
|
||||
</View>
|
||||
))}
|
||||
</ScrollView>
|
||||
</SafeAreaView>
|
||||
</Modal>
|
||||
);
|
||||
};
|
||||
|
||||
const GuideStep = ({ body, title }: { body: string; title: string }) => (
|
||||
<View style={styles.guideStep}>
|
||||
<Text style={styles.panelValue}>{title}</Text>
|
||||
@@ -4070,6 +4145,21 @@ const styles = StyleSheet.create({
|
||||
gap: 6,
|
||||
padding: 14,
|
||||
},
|
||||
promptCard: {
|
||||
backgroundColor: "#ffffff",
|
||||
borderColor: "#e2e8f0",
|
||||
borderRadius: 8,
|
||||
borderWidth: 1,
|
||||
gap: 10,
|
||||
padding: 14,
|
||||
},
|
||||
promptCardHeader: {
|
||||
alignItems: "center",
|
||||
flexDirection: "row",
|
||||
flexWrap: "wrap",
|
||||
gap: 10,
|
||||
justifyContent: "space-between",
|
||||
},
|
||||
templateCard: {
|
||||
alignItems: "center",
|
||||
backgroundColor: "#ffffff",
|
||||
|
||||
Reference in new issue
Block a user