Skip to content

Refactor snippets storage to SQLite and enhance AI code features#79

Merged
qianmoQ merged 22 commits into
devlive-community:devfrom
qianmoQ:dev-26.1.0
Jun 5, 2026
Merged

Refactor snippets storage to SQLite and enhance AI code features#79
qianmoQ merged 22 commits into
devlive-community:devfrom
qianmoQ:dev-26.1.0

Conversation

@qianmoQ

@qianmoQ qianmoQ commented Jun 5, 2026

Copy link
Copy Markdown
Member

No description provided.

qianmoQ added 22 commits June 5, 2026 16:35
- useSnippets:localStorage 存储,前缀/语言/描述/内容,按语言匹配
- 编辑器 Tab 展开:光标前单词等于片段前缀时按 Tab 展开,$0/${0} 为光标落点,未匹配回落到默认缩进(Prec.highest)
- SnippetManager 管理面板(增删改),接入命令面板
- 用 keymap 实现,无需新增 @codemirror/autocomplete 依赖,避免实例冲突
- 新增 snippets 表与 get_snippets/save_snippet/delete_snippet 命令,存于 codeforge.sqlite(与执行历史/AI 对话同库)
- useSnippets 改为调用后端,启动时载入;保留内存 ref 供编辑器 Tab 展开同步读取
- 一次性迁移旧的 localStorage 片段到数据库后清除
- 新增 kv_store 表与 kv_get_all/kv_set/kv_delete 命令
- 前端 useKvStore:启动前一次性载入缓存,同步读取、异步落库
- 迁移 shortcuts/ai-config/run-configs/session-tabs/recent-folders/sidebar/watch-mode/面板尺寸/skipped_version 等全部 localStorage 到数据库
- main.ts 挂载前先 loadKvStore

feat: AI 代码预测(幽灵补全,Tab 接受)
- aiComplete 扩展:StateField + widget 渲染灰色幽灵文本,Tab 接受/Esc 取消(Prec.highest,高于代码片段 Tab)
- App 防抖请求 ai_chat 预测后续代码并 dispatch 显示;开关存数据库,命令面板可切换
- 编辑器头部状态区在请求中显示「AI 预测中…」(脉冲 Sparkles),用计数器避免并发请求闪烁
- 开启功能时若未配置 API Key 明确 toast 提示,避免静默无反应让用户困惑
aiComplete 暴露 ghostActive 响应式信号(updateListener 同步),编辑器头部状态区在补全显示时给出操作提示
AiAssistant 的「应用」不再直接覆盖编辑器,改为弹出 DiffView(当前红→AI 建议绿),点「应用」确认后替换。DiffView 增加 title/subtitle/confirmLabel 与 confirm 事件
- Rust:portable-pty 启动真实 shell,terminal_create/write/resize/kill 命令,后台线程把 PTY 输出经 terminal-output 事件推送,进程退出发 terminal-exit
- 前端:Terminal.vue 用 xterm.js 渲染,跟随深色主题、可拖拽改高度、ResizeObserver 自适应、cwd 取当前文件夹
- 接入快捷键(Mod+`)与命令面板;底部停靠面板
终端不再跟随应用主题,浅色模式下不再出现白底(与为深色设计的 shell 提示符不搭);统一用深色背景,与面板容器一致
- 不再用 fixed 浮层覆盖,改为 App 纵向布局列里的 flex-shrink-0 子项,上方主区域 flex-1 自动收缩
- 拖拽分隔条改用 bg-gray-200 dark:bg-gray-700 主题色,不再是黑条
新增 cursorInfo 扩展(updateListener 监听选区),编辑器头部状态区显示「行 X, 列 Y」,有选中时显示「已选 N」
打开文件时记录到数据库(recent-files,最多 30),快速打开空查询时最近文件按时间优先展示并标注「最近」
命令面板新增「AI 格式化代码」:请求 AI 返回整理后的完整代码,复用应用前差异预览确认后替换;复用 useAiConfig 与 cleanCompletion
Terminal.vue 重构为多会话:标签栏可新建(+)/切换/关闭单个终端,每个 tab 独立 xterm 实例与 PTY 会话(按 id 路由输出),仅渲染激活会话、切换时重新 fit;关闭最后一个标签收起面板
- ⌄ 改为收起(collapse):仅隐藏面板、保留 PTY 会话与历史,不再卸载重置
- App 首次打开后保持挂载,用 v-show 切换显示;仅关闭所有标签才彻底卸载
- 标签栏改用统一深色配色(#252526/#1e1e1e),浅色模式下不再出现浅栏配深色激活页的割裂
编辑器头部把已保存文件的路径显示为可点击层级(相对已打开文件夹),点击任一段在访达/资源管理器中定位;未命名草稿仍显示文件名
之前根目录直属文件的相对路径只有文件名一段,看起来像没有面包屑。改为首段显示文件夹名(DockDoor › icon.json);未打开文件夹时显示绝对路径末几段
之前 replace_all 因两个 header 分支缩进不同只替换了一个,仅编辑器布局仍是旧的 currentFileName 兜底,所以看起来面包屑没生效。补上第二个分支
- 图标/标题/右侧光标信息加 whitespace-nowrap + flex-shrink-0,不再被挤换行
- 面包屑外层 min-w-0 overflow-x-auto,过长时横向滚动;段落不截断不换行
- 两个布局分支头部一致处理
滚动条遮挡了路径文字,改用与标签栏一致的隐藏方案(仍可滚动)
按既有插件架构,在 src-tauri/src/plugins/ 下各加一个独立插件文件并在 mod.rs/manager.rs 注册:
- json(.json) / xml(.xml) / yaml(.yaml) / markdown(.md) / text(.txt)
- 均为不可编译型,run_command 为 cat $filename,console 输出
- 启动时经 merge_plugins_config 自动并入配置,文件树/检测/语言下拉自动识别对应扩展名
- getLanguageExtension 增加 json/yaml/markdown/xml/text 的高亮(lang-json/markdown/yaml)
- 新增通用 text.svg 图标,语言图标缺失时 @error 回落(头部与标签页)
- 为 json/xml/yaml/markdown 各加 SVG 图标(text 复用已有)
- 语言注册表支持插件声明多个扩展名(逗号/空格分隔);YAML 插件 extension 改为 yaml,yml,文件名取首个
@qianmoQ qianmoQ merged commit 5db73c3 into devlive-community:dev Jun 5, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant