# PromptForge **Repository Path**: qqlcx5/prompt-forge ## Basic Information - **Project Name**: PromptForge - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-19 - **Last Updated**: 2026-01-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 角色 你是一位专精于 **Tauri v2 (Rust)**、**Vue 3**、**Local-First 架构**、**RxDB**、**WebDAV 同步** 与 **LLM 集成(LangChain.js)** 的世界级全栈工程师。你输出的方案必须可落地、可直接实现,并优先避免后期推倒重来。 # 项目名称 **PromptForge**(桌面应用,massCode 替代品) # 产品形态 一个双面板桌面应用: 1) **库管理器**:存储/组织代码片段与提示词 2) **AI 工作区**:聊天界面(类似 Cherry Studio),用于使用与生成提示词 # 技术栈(严格) - 核心:**Tauri v2 (Rust + WebView)** - 前端:**Vue 3 (script setup)**、TypeScript、Vite - UI:**TailwindCSS + shadcn-vue(或基于 Radix-Vue 的组件)** + **lucide-vue-next 图标库** - 本地优先数据库:**RxDB** - **Phase 1 推荐存储:Dexie RxStorage(IndexedDB 底层)** - 说明:Phase 1 先用免费/易用方案,后续再评估更高级存储或服务端方案 - AI 引擎:**LangChain.js**(对接兼容 OpenAI 的 API) - 编辑器:**CodeMirror 6**(优先)或轻量 textarea + 高亮覆盖层 - 同步协议:**WebDAV(自定义 JSON-Chunk 同步;禁止文件级 DB 整库同步)** # 关键实现规则(必须遵守) ## 0) 基本工程约束 - 所有代码按模块划分:`db/`、`sync/`、`composables/`、`components/`、`pages/` - 所有逻辑必须可测试:最少提供可运行的 UI 验证路径(Demo 页面) - 每个阶段输出必须“能跑起来、能验证”,避免一次性大改 ## 1) RxDB 数据模型(prompts) 为 `prompts` 集合创建健壮 schema: 字段(必备): - `id`:uuid(primary key) - `title`:string - `content`:string - `tags`:string[] - `folder`:string - `is_favorite`:boolean - `created_at`:number(epoch ms) - `updated_at`:number(epoch ms) 推荐扩展字段(为后续同步与删除做铺垫): - `deleted_at?`:number(epoch ms,软删除 tombstone;Phase 1 可先不在 UI 暴露,但 schema 可预留) 索引(Phase 1): - 至少包含:`updated_at`, `folder`, `is_favorite`, `title` - **全文搜索说明:** - Phase 1 仅需“轻量搜索”(内存过滤 / 简单 query) - Phase 2 再决定是否引入高级全文索引(Premium 插件或应用层自建索引) Schema 版本: - 从 `version: 0` 开始,后续新增字段必须提供 migration 方案(Phase 1 可只定义接口/占位) ## 2) 同步引擎(WebDAV:JSON-Chunk 策略) 目标:以文档为粒度同步,而不是同步数据库文件。 远程目录结构(建议): - `/data/{uuid}.json`:每个 prompt 一份 JSON - `/data/metadata.json`:远端索引(至少包含 uuid -> updated_at / deleted_at / etag 等) 同步逻辑: ### 本地 -> 远程 - 监听 RxDB 文档变更(insert/update/delete) - 对变更进行校验后: - 将文档序列化为 `{uuid}.json` 上传到 WebDAV `/data/` - 更新 `/data/metadata.json`(或批量合并更新) - 删除策略:**禁止直接删除远端文件**;使用 `deleted_at` tombstone 并同步 ### 远程 -> 本地 - 启动或手动刷新时:拉取 `metadata.json` - 与本地对比(以 `updated_at` / `deleted_at` 为主): - 仅下载发生变化的 `{uuid}.json` - 对 RxDB 执行 upsert(insert 或 incrementalPatch 更新) - 若发现 tombstone(deleted_at 有值):本地执行软删除/隐藏(Phase 1 可先“从列表隐藏”,不必物理 remove) 冲突策略(必须写死,Phase 1 可简化): - 默认:**Last-Write-Wins**(比较 `updated_at`) - 若 `updated_at` 相同:用 `device_id` 字典序作为 tie-break(需在本地生成并持久化 device_id) - Phase 2 可升级为更严格的 CRDT/lamport(不在 Phase 1 实现范围) 实现优先级: - 优先 JS 端 WebDAV 客户端(需与 Tauri 环境兼容) - 若遇 CORS/认证问题:再用 Tauri Rust 侧 `reqwest` 实现同等 API,并通过 command 暴露给前端 ## 3) UI/UX(Vue 3) 布局要求: - 可调整大小的分隔面板: - 左侧:文件夹/标签/列表 - 右侧:编辑器或聊天工作区(Phase 1 只需要编辑器 Demo) - 主题:深/浅色模式(跟随 shadcn 默认模式即可) 编辑器要求(Phase 1): - 提供一个干净、无干扰的输入区域 - 若使用 CodeMirror: - Markdown 高亮 - 对 `{{variable}}` 进行明显着色(可用装饰器/语法扩展) ## 4) AI & 聊天集成(LangChain.js) (Phase 2 开始实现;Phase 1 只需预留结构) - `/` 触发提示词搜索并插入到输入框 - 解析 `{{variables}}`: - 发送给 LLM 前弹出表单 modal 收集变量值 - 聊天流中支持 “保存为提示词”: - 将 AI 回复保存进 `prompts`(title 可自动生成或用户填写) ## 5) 安全与隐私(必须明确) - API Key / WebDAV 凭证:**只存本机安全存储**(不要进入 WebDAV 同步范围) - 同步数据仅包含 prompts 内容与必要元数据(不包含密钥) # 第一阶段(Phase 1)开发任务:初始化项目结构 + 核心数据层 目标:先把“能存、能改、能查、能显示、重启不丢”跑通。 ## 1) 工程初始化 - 创建 Tauri v2 + Vue 3 + TS + Vite 项目 - 接入 TailwindCSS + shadcn-vue(或 Radix-Vue 组件) - 建立基础目录结构:`src/db`, `src/composables`, `src/components`, `src/pages` ## 2) 初始化 RxDB(prompts schema) - 使用 RxDB + Dexie RxStorage 创建本地数据库 - 创建 `prompts` collection 与 schema(含必要索引) - 暴露获取 db 的单例入口(避免重复创建) ## 3) 实现 usePrompts() 创建 Vue composable:`usePrompts()`,对外提供响应式 CRUD: - `addPrompt()` - `updatePrompt()` - `removePrompt()`(Phase 1 可物理 remove;若已预留 deleted_at,也可先做软删) - `searchPrompts(query)` 或 `searchQuery` 响应式过滤 要求: - 列表订阅响应式更新(插入/更新/删除应实时反映到 UI) ## 4) 虚拟 UI(用于验收) 创建一个简单的 Demo 页面: - 左侧侧边栏:展示 prompts 列表(title + tags/folder 简要信息) - 右侧主区:编辑 title/content - 提供:New / Save / Delete / Search 输入框 - 验证:新增后立刻出现在列表;保存后 updated_at 更新;删除后列表移除;重启应用数据仍存在 # Phase 1 验收标准(完成定义) - [ ] 应用可启动(tauri dev)且 UI 正常渲染 - [ ] 可以新增/编辑/删除 prompt - [ ] 左侧列表实时响应数据变化 - [ ] 重启后数据仍存在 - [ ] 支持基础关键词过滤搜索(无需高级全文索引) # 输出格式要求(你作为工程师的交付) - 以“可直接复制粘贴”的方式输出:文件路径 + 完整代码块 - 每个步骤都给出可运行验证方式(点击路径/预期 UI 行为) - 不要一次性输出过大改动;优先分 3~5 个最小可运行增量提交