DevLog:2025年9月1日

1、今天继续完善应用细节,先从拆分待办事项列表为单独文件开始,将待办事项分组拆分为单独的文件,并且参考备忘录界面的布局,使用HSplitView,可调节宽度,最小宽度200,理想宽度300,最大宽度400,这样NoteWith的三大模块布局就一致了,并且更便于后续维护
2、Curso陆续创建了TodoGroupListView(分组列表视图)、TodoItemListView(待办事项列表视图),之后重构TodoListView以使用HSplitView,删除其中重复的组件定义,这样TodoListView就成了主视图,并使用HSplitView组合两个子视图
3、多次调整细节后,三个列表的样式基本一致了,同样的列表宽度(最小、理想、最大、默认宽度)、同样的标题位置、同样的分割线、同样的右侧界面顶栏高度、同样的新建按钮,这样在细节上更加统一了
4、今天Cursor的响应速度变得好慢,频繁出现We‘re having trouble connecting to the model provider.的提示,需要反复点击Try again,等待几分钟之后虽然理解了我的意图,执行起来也非常慢,但再重启一次之后好像速度快了很多,看来可能是我两天时间没有使用,但又一直没关导致的
5、Views/Common目录下的ErrorWrapper文件不知道是干啥用的,让Cursor确认了下,这是一个未使用的错误包装器类型,可能是上次对项目架构进行重构时创建的文件,但现在没有使用,于是让Cursor删掉了ErrorWrapper,同时也删掉了重构指南文档REFACTORING_GUIDE.md
6、还得让Cursor记住在创建新文件之后要将其添加到项目中,只创建文件、不添加到项目就开始构建测试的问题,已经出现过多次了,于是在Cursor的设置中添加这条Rule,看样子以后遇到类似的频繁出现的问题,还是要明确提出,才有机会被识别成Memory,就会更容易添加

DevLog:2025年8月29日

1、首先让Cursor把深度思考内容的底色换成浅灰色,目前的颜色在AI对话界面中略显突兀,因为提问和回答内容都改成了白色
2、需要继续优化AI回答内容的Markdown渲染效果,渲染后的内容能否不以空格替代语法占的位置?比如加粗的文字前后都有两个空格,Cursor表示在Markdown样式应用的过程中,代码使用了NSColor.clear来隐藏语法标记,但这只是让语法标记变透明,并未真正移除它们占用的空间,需要用字符串替换来真正移除语法标记
3、但测试发现使用字符串替换的效果不好,回答内容被截断,且原本使用了同一个Markdown语法的内容,部分文字有渲染效果,部分没有,尝试用属性应用而不是字符串替换,一顿操作之后,又回到了之前的效果,渲染后的内容还是以空格替代了语法标记占的位置,又是一个悬而未决的问题
4、如果改用SwiftUI的Text来渲染AI对话内容,会失去文本选择功能、失去右键菜单、文本搜索等高级文本交互功能,Markdown渲染也会有限制,还是继续保持目前的NSTextView吧
5、发现在AI对话列表中点击右键修改标题时会弹出弹窗,可以在弹窗里输入新标题,但弹窗上方一直有一个空的icon,之前也修改过多次,但删不掉,于是要求改成点击右键修改标题,直接在对话标题位置修改、回车确认,修改过程中发现AIChatSessionListView和AIChatView在功能上有一些重叠,Cursor分析后发现AIChatSessionListView没有被使用,AIChatView中包含了了会话列表和聊天功能,于是决定把会话列表相关功能从AIChatView中迁移到AIChatSessionListView里,这样更便于后续对聊天功能和列表功能进行分别管理,然后修正了导航栏消失、部分界面变成四栏布局等问题
6、接下来需要统一一下AI对话列表和AI对话之间、备忘录列表和备忘录详情之间的分割线样式、底色样式,选中样式,以及拖动调整比例的功能,在实现这一需求的过程中,将ContentView中有关AI对话列表功能完全移动到了AIChatSessionListView中,这下ContentView就只专注于导航和界面切换了,减少了跨组件的状态传递,符合单一职责原则
7、然后统一了两个列表的默认宽度(最小200、理想300、默认300、最大400)和样式(首次打开和切换时不选中任何一条内容、每个条目都不需要用圆角,翻译一下,正确的说法应该是移除自动选中和圆角设计)
8、发现在Views/Notes/Components文件夹下有两个文件,SearchBarView和EmptyStateView,但不知道这两个文件现在还有没有用,这是之前使用UserDefaults来存储数据时,Cursor拆分的组件,现在NotesListView里已经有了重复的组件,SearchBarView用于在备忘录中搜索内容,EmptyStateView是空状态显示组件,Cursor建议删掉这两个文件,我觉得目前这俩文件好像也没啥用了,甚至这两个文件都没有被项目文件引用,删完之后项目结构更加整洁了
9、AI对话和备忘录列表修改告一段落之后,我又开始看待办事项分组列表,询问Cursor后发现这个列表不是单独的文件,是TodoListView文件的中的一个组件,并且备忘录界面使用了HSplitView,可调节宽度,待办事项界面使用了HStack,固定布局,虽然备忘录分组管理的功能完整,但界面布局和AI对话、备忘录列表不一致,还是决定以后要改成一致的

DevLog:2025年8月28日

1、本周着实有点忙,这两天一行未改,先继续修正AI对话内容显示不全的问题,现在只显示一行或者几行,需要滑动才能看到全文,Cursor认为这是一些文本显示组件没有正确设置高度约束导致的
2、还没测试,有点纠结为什么每次新打开一个Cursor对话,就会在修改后尝试直接启动应用,每次都需要我跟它强调下不要直接打开应用,构建下看看有没有编译错误就行,然后在Cursor设置的Rules&Memories中发现了它可以根据过往对话内容学习我的偏好,并且列出了我的这项要求“The user prefers that the assistant not open the application automatically”,果断同意
3、查看已保存的记忆时,发现其中还有一条“用户要求每次构建时,默认使用iPhone 16模拟器,除非用户单独指定其它机型”,稍微修改了下,增加了“在构建iOS应用时”
4、继续测试,发现仍未解决,Cursor继续修改了文本容器的配置、文本视图的垂直调整大小设置等等, 但未解决问题,Cursor再次提出要用Swift的Text组件来替换NSTextView,在确认不会影响备忘录(只修改MarkdownWithCodeBlocksView,不修改备忘录使用的渲染组件)之后,我同意了替换
5、现在AI问答的内容可以完整显示了,但无法选择回答的内容了,且有部分Markdown语法的渲染效果不太好,比如链接不能点击直接打开、同时应用加粗和标题语法的内容仍然会看到语法标记等等,于是让Cursor检查一下还有没有其它的语法渲染效果可以优化一下
6、Swift的Text无法实现文本选择,还是回到了NSTextView,然后AI问答内容又不正常显示了,所有的AI问答内容都只能看到一行,继续修改,多次修改后终于可以同时实现问答内容全部显示、文本选择和Markdown渲染了,发现在和Cursor对话时,问题描述要尽量详细,并且每次修改后有什么变化都要一起告诉它,便于它判断上一步的修改方法是否正确,让下一步的修改更有针对性
7、虽然达成了上述目标,但用户消息和AI消息的一直有白色的底色,多次修改也去不了,于是换个思路,将用户消息和AI消息的浅绿、浅蓝底色统一为NSTextView的默认底色,再调整了间距等细节
8、今天到此为止了,明天继续优化Markdown渲染效果,看能否去掉隐藏的Markdown语法占据的位置,现在回答内容里的空格有点多,然后把默认行间距调整为1.2倍,现在排版有些太紧巴了
9、另外吐槽一下,最近遇到Connection Failed提示的次数有点多

DevLog:2025年8月25日

1、接下来优化文字选择相关功能,我的目标是可以选择AI对话内容中的部分文字,测试发现目前的NoteWith在选择AI对话内容的部分文字时,无法同时选择掺杂了了不同Markdown语法的内容,比如同一行文字里如果既有加粗的文字也有普通文本,就无法选择,如果这一行文字只有H3或者普通文本,就可以选择
2、Cursor理解了我的需求,但没完全理解,它还在延续上周对备忘录功能的修改,表示当前的WYSIWYG Markdown编辑器通过隐藏Markdown语法标记(将颜色设置为透明)来实现视觉效果,这回导致文本选择问题,因为不同的Markdown语法被分割成了不同的文本片段,于是Cursor主要修改了NoteEditView文件,改进了文本视图配置、添加文本存储代理、实现NSTextStorageDelegate、改进选择范围处理,测试发现备忘录中的内容的确可以跨行、跨语法选择了
3、但其实我是想让Cursor处理AI对话中文字内容无法跨Markdown语法选择的问题,在和Cursor明确后,它修改了MarkdownWithCodeBlocksView(其中使用NSTextViewWrapper来渲染各种Markdown元素),创建了新的ImprovedMarkdownTextView(实际名字是OptimizedMarkdownTextView),使用单个NSTextView来渲染整个文本内容,并删除旧的MarkdownLineView结构,修改过程中甚至还直接删掉了整个MarkdownWithCodeBlocksView,因为Cursor觉得它太复杂了?
4、Cursor重新创建了MarkdownWithCodeBlocksView,让整个Markdown内容在一个NSTextView中,但实测发现AI对话内容无法正常渲染,且应用非常卡顿,在不同对话间切换时甚至会卡死,原因可能是过多的调试输出、复杂的正则表达式处理、频繁的文本存储更新、重复的样式应用等,之后测试时发现AI回答内容无法正常渲染,有的看不到任何回答,有的会显示在一个小框里,没有展开显示,不过现在已经可以跨语法选择了,还是有成果的
5、截了多张AI回答以小框显示的图给Cursor之后,它判断可能是NSTextView的高度没有正确设置,需要让NSTextView能够根据内容自动调整高度,修改一轮之后问题依然存在,甚至还差一点就给我替换成SwiftUI的Text视图,赶紧拦住,后面重开一个对话再修改这个问题吧

DevLog:2025年8月22日

1、从7月23日首次付费到昨天,已使用Cursor编辑了90511行代码,马上突破10万行
2、我发现在修改待办事项和编辑AI模型时有一个共性的问题:选一条AI模型或待办事项,点编辑时,会出现一个小的空白弹窗,选另一条AI模型或待办事项点击“编辑”时才会出现编辑窗口,之后就能正常编辑所有的AI模型和待办事项了,看看是不是AIModelSettingsView、AIModelManangementView、TodoDetailView这几个文件的问题,另外AIModelSettingsView里面为何还有针对gpt-4、gpt-3.5-turbo、deepseek-r1、claude-3的图标和颜色设置?我不需要这些预置的设置,模型由用户自行添加就可以了
3、Cursor表示根本原因在于Sheet逻辑显示不正确,可能是这三个文件使用了isPresented和if let的组合,当第一次点击编辑时,状态变量可能还没有正确设置,导致显示空白弹窗,同时也删除了预置的模型设置,问题顺利解决
4、从代码来看,AIModelSettingsView、AIModelManangementView,这两个文件的功能好像有些重合,询问Cursor后发现前者未被使用,且是一个独立的弹窗界面(可能是在AI对话界面选择模型-管理模型时的弹窗,但之前已经去掉了这里的“管理”按钮),后者正在SettingsDetailView中被调用,即设置-模型管理,于是让Cursor删除了冗余的AIModelSettingsAView文件
5、接下来让Cursor给AI模型管理界面添加一个测试功能,点击测试按钮可以测试能否正常响应,这样可以避免信息填错但一时未发现影响使用的情况,Cursor直接在AI模型管理界面每个模型的右侧增加了测试按钮,并且用颜色来区分测试状态,橙色为测试中,绿色为连接成功,并且显示响应时间,红色为失败,测试了下目前我添加的四个模型,deepseek V3响应时间最长,1373ms,火山方舟平台的deepseek r1响应时间最短,244ms,来自OpenRouter的claude 3.7 sonnet响应时间竟然仅有253ms,还是很让我惊讶的
6、改完上面的几个小问题之后,继续测试和完善待办事项相关功能,我发现“编辑待办事项”界面的优先级设置有八个按钮(包含文字和图标),但是不是只有四个分级?比如我点击文字“普通”,对应的优先级是紧急,我点击文字“低”,对应的优先级是普通,另外,我需要去掉“事项标题”、第二行“优先级”、“选择分组”这些文字,有点多余了,Cursor表示之前使用的是segmented样式的Picker,可能导致显示8个按钮且对应关系混乱,改成了自定义按钮样式,确保只有四个优先级,并且简化了界面上的说明文字,这样界面就更简洁了
7、接下来是截止日期设置的优化、添加重复频率功能,目前截止日期并非强制要求填写,但我需要必须填写截止日期,并且需要重复频率功能,也添加到这个页面,和选择日期的功能放在同一行,重复频率包含每天、每周、每月、每年,只要选择了重复频率,就要在待办事项列表中体现重复频率
8、发现新建待办事项和编辑待办事项两个视图好像界面不一样,但功能是一样的,实际上新建待办事项对应的文件是AddTodoView,编辑待办事项对应的文件是TodoDetailView,于是要求Cursor也修改了另一个文件的优先级选择按钮样式,并打开两个文件,手动对齐了下界面上的文字显示效果,但感觉还是略显杂乱
9、还有一个问题,即使只有一条截止日期是今天的Todo条目,也会在待办事项页面右上角显示1逾期、1今日,我需要的是真正过期的Todo条目,比如截止日期是昨天的Todo条目,才被判定为逾期条目,Cursor表示问题在于overdueItems的计算逻辑,同时还修正了overdueTodoCount的计算逻辑、isOverdue方法
10、然后调整分组相关逻辑,要求每次创建新的待办事项时,都默认选择“默认”分组,编辑待办事项时,显示当前这条待办所在的分组
11、剩余其它功能规划:1.可以选择AI对话内容中的部分文字并进行复制等操作 2.完善设置中的导入/导出功能,支持将外部内容导入到备忘录,支持将备忘录导出成txt或md,下周再说

DevLog:2025年8月21日

1、昨天把备忘录编辑功能由TextEditor换成了NSTextView,已经具备编辑、保存、选择、右键菜单等基础功能,今天继续测试并丰富备忘录编辑功能
2、测试发现目前备忘录未应用Markdown渲染,只显示了纯文本,未实现像Obsidian那种“所见即所得”的效果,Cursor表示需要将编辑器升级为支持实时Markdown渲染的WYSIWYG编辑器(不知道这个名字是啥意思),替换整个SimpleTextEditor为WYSIWYGMarkdownEditor
3、修改过程中发现又使用了NSColor.systemGray6这种iOS上才有的颜色,难道还是从iOS应用转为macOS应用的后遗症?
4、修改之后,部分Markdown语法已经实现了所见即所得的效果,比如标题1、标题2、标题3、有序列表、无需列表,但是粗体、斜体、行内代码三个语法虽然可以所见即所得,换行时渲染效果就会失效,而且编辑器内不支持通过快捷键command+Z实现撤销操作,Cursor先修复了撤销操作,然后通过改进样式应用逻辑来修复部分语法渲染失效的问题
5、编辑器出现了不能插入任何语法标记的问题,且刚刚insertMarkdown函数只是简单的在文本末尾添加内容,而不是在光标位置插入内容,Cursor进行了同步修改,自称可以实现在光标位置插入、包围格式智能光标、行级智能格式换行等等
6、再次测试,发现粗体、斜体、代码块这三个功能不好用,比如点击粗体按钮后,会在光标位置插入对应的Markdown语法,且光标在中间,但输入文字后,不会应用粗体效果,且部分文字会消失,斜体也是这样,代码块貌似不能正常闭合,会影响到后文的渲染,继续让Cursor修改
7、多次修改后,还出现了看不到备忘录内容的问题,Cursor创建了一个临时调试的简化版本,并增加调试信息来定位问题,粗体和斜体的正则表达式好像一直有问题,这几天一直在修复这个问题
8、在Cursor对编辑器进行“根本架构层面”的修改之后,文字可以正常输入、窗口可以随意调整、粗体也能正常渲染了,但我发现备忘录里应用Markdown语法后的内容,有的会同时显示语法标记和渲染效果,有的只显示渲染效果,Cursor更建议所有Markdown语法都隐藏标记,于是陆续隐藏了标题、列表、引用样式的语法标记,显示效果还可以,后面继续优化
9、接下来增加待办事项模块,在导航栏的“备忘录”下面增加“待办事项”,并由Cursor来设计一些待办事项相关功能,同时在搜索、数据统计、回收站中也增加待办事项相关功能,测试一下看看Cursor能够做到什么程度
10、Cursor创建了待办事项数据模型、在DataManager中添加待办事项管理功能、创建待办事项视图模型、创建待办事项主视图、创建添加待办事项视图、创建添加分组视图、创建待办事项详情视图,并更新导航栏、更新搜索功能、更新设置(数据统计、回收站),果然这次创建了很多新文件后,又没有更新项目文件就开始构建,甚至还想使用Xcode的命令行工具来添加文件,但明明可以直接修改项目文件,我叫停了使用脚本的操作,要求Cursor直接修改项目文件
11、然后再次构建测试,修复多个新文件中出现的macOS不支持的API,之后构建成功,据Cursor总结,目前已实现了完整的GRUD操作(创建、读取、更新、删除)、分组管理(支持自定义分组和颜色标识)、优先级系统(四个等级的优先级管理)、截止日期、智能分类(自动分类逾期、今日、其它待办)、搜索集成、数据统计、回收站及UI适配macOS
12、测试待办事项相关功能之前先让Cursor统计了下当前的代码量,目前整个NoteWith共有8292行Swift代码
13、开始测试并修复待办事项模块的问题,包括1.新建待办的界面显示不正常 2.新建分组的界面显示不正常,Cursor不仅修改了这两个视图,还修改了TodoDetailView,并设置了三个视图的固定窗口尺寸,显示不正常的原因在于,在macOS上,NavigationView和Form的组合可能会导致显示问题,改为VStack和ScrollView的自定义布局
14、之后在测试添加分组时,发现DEBUG信息中出现大量的颜色名称(Cursor创建的待办事项模块可以用不同颜色来区分分组),但这些颜色没有在应用的资源目录中定义,导致系统无法找到对应的颜色资源,Cursor修改了多个文件来解决颜色问题,使用了系统预定义颜色,并创建颜色转换函数
15、解决之后,测试待办事项添加、修改相关的功能,比如待办事项列表里看不到星期几,添加待办时可以精确到小时和分钟(其实我只需要精确到年月日),两个问题均已解决,今天就到这里了
16、怎么感觉现在这个NoteWith越来越像Notion了?原本我是在仿ima的

DevLog:2025年8月20日

1、今天主要测试和优化备忘录功能,以及设置模块,首先设置界面目前有一个“设置概览”页,包括了数据统计和快速操作(导出数据、重置设置),但我不需要重置设置功能,且已经有单独的“数据管理”界面,决定让Cursor去掉“设置概览”,点击导航栏的“设置”时,默认打开AI模型管理,之后又修改了外观模式切换功能的样式,改成了三行,点击切换
2、然后来看备忘录功能,首先经过了多次修改之后,印象中备忘录应该是集成了TextEditor,但这个纯文本编辑器功能太过简单,且不能修改格式,进一步跟Cursor确认下:目前的备忘录功能,采用了哪个编辑器?是纯文本还是富文本?能否使用富文本编辑器?你推荐用怎样的方案?
3、Cursor推荐使用Markdown编辑器,优势在于:可以保持纯文本存储,数据兼容性好,支持丰富的格式化功能,且已有Markdown渲染基础设施(MarkdownRenderer),可以通过Markdown语法实现富文本效果,文件体积小,性能好,实现方式是:编辑时显示Markdown语法,预览时渲染为富文本,支持实时切换预览
4、同时Cursor还给到了具体的实施建议:添加编辑/预览切换、集成现有的Markdown渲染、语法高亮、工具栏,决定让Cursor按此建议实施,再结合测试情况调整,我不太想要编辑/预览切换按钮,比较符合直觉的方式应该是打开时就是预览,点击一下自动切换到编辑模式,先看看Cursor改的怎么样
5、Cursor基于NSTextView创建了自定义的CustomMarkdownEditor组件,换掉了原有的TextEditor,并且增加了Markdown工具栏、语法高亮功能等,支持字数统计、自动保存,测试发现打开一条备忘录后编辑器中看不到备忘录的内容,且出现了大量的“Modifying state during view update, this will cause undefined behavior”的提示,Cursor表示这是由于自定义编辑器实现中的状态管理问题导致的
6、在修复过程中,没想到Cursor直接删掉了刚刚创建的CustomMarkdownEditor,又改回了TextEditor,但的确可以看到其中的内容、可以切换编辑/预览状态,也可以保存修改了,并且也能应用MarkdownRenderer实现对Markdown语法的渲染,但针对粗体、斜体、行内代码三种Markdown语法,仍然缺乏对应的渲染机制,于是提示Cursor优化MarkdownRenderer
7、多次修改MarkdownRenderer等文件,希望能够实现对粗体、斜体、行内代码的正常渲染,但依然有问题,原因应该还是AI对话和备忘录模块都在使用的MarkdownRenderer和MarkdownWithCodeBlocksView等文件的问题,继续让Cursor修改,特别是最后卡在了斜体的渲染上,我发现NoteWith在备忘录和Markdown渲染上,混用了SwiftUI的Text和AttributedString,以及NSTextViewWrapper和NSAttributedString,这会让应用变复杂,于是要求只用NSTextView和NSAttributedString,目前的方案是编辑器是TextEditor,渲染器是NSTextView和NSAttributedString
8、多次修改后依然无法正常显示斜体和粗斜体,其它格式都可以正常渲染和显示,到底问题出在哪儿了?询问Cursor有没有必要将TextEditor替换成NSTextView?这样是否能简化Markdown语法的渲染?Cursor分析后表示目前使用的方案是编辑模式使用SwiftUI TextEditor,预览模式使用MarkdownWithCodeBlocksView自定义渲染,渲染管道使用了NSAttributedString+NSTextViewWrapper,这一方案编辑体验好,预览功能独立,不影响编辑,但需要解决复杂的字体属性传递问题,且编辑和预览体验不一致,如果将TextEditor替换为NSTextView,可以统一渲染系统,减少复杂性,可以实现实时预览(所见即所得),以及更好的字体属性控制,缺点在于编辑体验可能变差,需要处理光标位置、选择范围等复杂逻辑,且可能影响性能,但我个人更偏向所见即所得的编辑体验,比较符合直觉
9、Cursor在进行上述分析的同时,也建议再用颜色+背景+字体的测试方法来确定下颜色属性、北京属性和字体属性是否能正确应用,测试发现问题可能出在斜体字体的创建上(感觉这么长时间的测试好像白测了),我再给Cursor一个机会,但斜体依然不能正常显示,决定将TextEditor切换为NSTextView
10、切换之后,使用了统一的渲染架构,编辑和预览使用相同的底层技术,且Cursor表示NSTextView在macOS上性能更好,未来可以轻松添加富文本编辑功能,先试试看吧
11、首先就有一个大BUG,编辑视图看不到备忘录的内容,更别提编辑了,但预览视图可以看到,有没有必要使用编辑和预览两种视图?Cursor先通过设置textView.delegate导致文本变化无法正确同步的问题,但仍然看不到其中的内容,决定让Cursor改成所见即所得的编辑方式,但修改后编辑器都点不开,简化了一些功能后也依然无法正常使用,Cursor在修复时推测可能是文字颜色或字体渲染问题,继续添加调试信息来定位问题
12、Cursor在设置编辑器的初始尺寸之后,解决了看不到备忘录内容的问题,目前备忘录内容可打开,可编辑,可保存,可以看到光标,后续再测试其它格式设置按钮
13、今日剩余其它功能规划:1.给AI模型添加界面增加一个测试按钮,添加新模型时先试一下能不能正常响应 2.可以选择AI对话内容中的部分文字并进行复制等操作 3.完善设置中增加导入/导出功能,支持将外部内容导入到备忘录,支持将备忘录导出成txt或md

DevLog:2025年8月19日

1、今天还是修正BUG的一天,先处理昨天的遗留问题:1.AI回答内容里的“.”都显示成了“。”,网址和代码都受此影响;2.思考内容虽然支持流式输出,但始终只能看到两行,看不到全部思考内容;3.提出问题后,只有主动滑动一下才能看到底部的“AI正在思考中”的提示
2、开启了一个新对话,先修正英文句号都被替换成中文句号的问题,Cursor添加了一些调试信息来帮助定位问题,在开启新对话并测试的过程中发现这个问题竟然已经被解决了,我一直在看之前存在错误的对话内容,竟然没有变成正常的渲染结果?先保留调试信息,便于以后再测试其它
3、接下来修正第二个问题,在和支持深度思考的模型对话时,思考内容虽然支持流式输出,但始终只能看到两行,看不到全部思考内容,在修正这个问题之后,我添加了火山方舟的bot,填写了完整的Base URL(https://ark.cn-beijing.volces.com/api/v3/bots/),但对话时收到404错误信息,看来是之前的URL处理逻辑存在问题,Cursor修改了判断逻辑,如果是完整路径就直接使用,如果只有部分路径就自动添加前缀,如果包含api、bots、v3、v2,就直接使用,不添加额外路径,如果是基础路径就自动补全,再多次测试后发现火山方舟的bot路径依然需要应用自动补全后面的/chat/completions,这下常用的模型路径基本都OK了
4、接下来是昨天遗留的第三个问题:提出问题后,只有主动滑动一下才能看到底部的“AI正在思考中”的提示,Cursor改进滚动目标判断、优化滚动时机、增强加载状态处理、改进滚动锚点之后,在发送消息后界面即可自动滚动到底部,显示“AI正在思考中”的提示,搞定
5、继续,这次设置一下打开新对话时的默认模型,直接用模型列表里的第一个模型,“选择AI模型”界面,去掉右上方的“管理模型”按钮,在未打开任何AI对话时,界面右上角不显示“选择模型”
6、接下来修改一下AI对话列表和备忘录列表,两个列表中的条目点击区域都需要加大,整个横条都可以点击;两个列表都需要增加右键菜单,AI对话列表的右键菜单包含置顶/取消置顶(底色有所区别,带pin.fill图标)、修改(弹出对话框修改标题)、删除,备忘录列表的右键菜单包含置顶/取消置顶(置顶后底色有所区别,带pin.fill图标)、删除,Cursor在修改过程中先实现了AI列表页的邮件菜单,但备忘录列表页不支持,提示Cursor对比两个列表的右键菜单实现方式,并去掉了多余的NoteRowView定义,到这里右键菜单和点击区域都搞定了
7、发现刚刚删除的AI对话内容没有出现在设置-回收站里,让Cursor修复回收站相关功能,需求是:目前设置中已有回收站管理入口,但我删除的内容没有出现在回收站里,需要修复一下回收站功能,将回收站分为备忘录回收站和AI对话回收站两部分,可分别管理被删除的备忘录和AI对话,可清空回收站、永久删除、还原到对应的列表中
8、修改过程中虽然Cursor添加了多处调试信息,但测试时我点击设置-回收站,都没有出现调试信息,后来发现其实有两处回收站管理入口,一处是设置-回收站,一处是设置-快速操作-管理回收站,上一步Cursor添加的回收站管理功能都对应第二个入口,但我需要的是第一个入口,于是让Cursor进行了修改,Cursor同时去掉了原有的RecycleBinManagementView(简单界面且功能不完整)
9、Cursor在修改过程中机械地将RecycleBinView嵌入到了SettingsView里,就像把一个弹窗直接放进了界面里一样,不仅丑而且还有单独的标题和关闭按钮,于是让Cursor对回收站界面稍作优化,这次移除了冗余的标题栏,优化了标签页设计,改进了空状态提示,并且优化了列表项设计,风格与应用整体保持统一
10、其它功能规划:1.给AI模型添加界面增加一个测试按钮,添加新模型时先试一下能不能正常响应 2.可以选择AI对话内容中的部分文字并进行复制等操作 3.设置界面已经有数据管理功能,就不需要“设置概览”这个界面了 4.在设置中增加导入/导出功能,支持将外部内容导入到备忘录,支持将备忘录导出成txt或md,当然这些都是小改动,后面还想把Todo功能加进来,让应用功能更丰富一些
11、之前iOS版的DoitWith已经具备了一些核心功能,我询问Cursor能否将这一应用的功能整合进来,并且复用已有的文件和代码,Cursor回复可以,需要提供核心视图文件、数据名、关键功能和其它特殊需求,但由于DoitWith使用的是UserDefaults而非Core Data,Curs建议迁移到Core Data,与备忘录和AI对话使用统一的数据层,并给出了“基础功能整合(创建Todo数据类型、实现基本的GRUD操作、添加导航入口)-功能完善(添加优先级、分类、截止日期、实现搜索和筛选、添加回收站支持)-高级功能(AI助手集成、提醒功能、数据导入导出)”的分阶段实施步骤
12、虽然Cursor觉得可以这样操作,但我还是决定重新创建Todo功能,后续再详细规划需求,分布执行,这样应用就变成了NoteWith-Note/Chat/Doit, all in One

DevLog:2025年8月18日

1、截至目前已经用Cursor编辑了63939行代码,今天继续让Cursor恢复各个模块的功能,并优化应用界面和交互,整体原则就是优先用已有的代码
2、首先是AI对话相关功能,从添加模型开始,添加模型功能目前不能正常使用,填写所有信息并点击添加后,没有保存到模型列表里,且添加模型界面需要增加一个备注字段,优先用已有的代码来实现此功能
3、在可以保存模型之后,发现只能删除,不能编辑模型,且API Key、Tavily Key都是以明文显示,也不安全,点击AI对话右上角的模型切换按钮,也看不到目前已有的模型,继续让Cursor修正
4、一直以来都是使用Cursor的Auto模式,但今天第一次见到它出现了思考过程,今天这是在调用什么支持深度思考的模型了吗?
5、继续调整模型添加和选择相关功能,比如把备注字段放在添加和编辑模型界面的最上面,对话界面右上角也显示备注字段,显示选择状态等等
6、AI模型的添加、编辑、切换基本搞定,接下来测试对话过程,首先遇到的问题是:已经填写了AI模型的信息,但提问后反馈“错误,未找到指定的AI模型”,在修改过程中发现目前存在aiModels和aiConfigs两种模型数据混用的情况,于是让Cursor检查有无其它功能仍在混用,Cursor检查后建议完全迁移到aiConfigs,因为它功能更完整,且不需要Core Data的复杂性,已经实现了完整的GRUD操作
7、有点疑惑UserDefaults和Core Data两种数据存储方式竟然可以混用?询问Cursor目前哪些地方用了UserDefaults,哪些地方用了Core Data,Cursor在梳理后表示现在的确是“分层混用”的状态,Core Data管理业务数据(笔记、会话、消息),UserDefaults管理轻量设置(外观、Tavily Key)以及AI模型配置aiConfigs,技术上是合理的,决定暂时保持目前的混用状态
8、继续测试AI对话相关功能,发现无论我问哪个模型,都会收到“这是一个模拟的AI问答。您的问题是:你好”的回答;对话内容没能保存到对话列表里;即使模型不支持深度思考,也会显示思考过程,看一下是怎么回事,并且尽量使用已有的文件和代码来解决问题
9、再次测试时发现无论使用哪个模型都会收到模拟的回答,而不是真实的AI的回答,并且AI问答列表显示的内容也有问题,继续让Cursor修正,Cursor表示是为了先确保实现其它功能,避免因误调用产生费用,而且即使真实调用失败时界面也能正常流转,但我不需要这种所谓的兜底方案,于是直接让Cursor真实调用AI模型,不需要模拟回答
10、然后又遇到了“网络连接错误”的提示,怀疑可能是Base URL的问题,询问Cursor之后,决定让应用自动补全/chat/completions,并且在AI模型添加/编辑界面增加说明文字,防止用户填错,Cursor添加了智能URL自动补全机制,如果用户只输入了基础地址(如 api.openai.com),会自动添加 https:// 和 /v1/chat/completions,如果用户已经包含了部分路径,会智能补全,从而避免重复添加路径导致的双重拼接问题,测试发现只需要填写最简单的网址就可以,比如https://api.deepseek.com、https://openrouter.ai/api
11、然后我发现无论模型是否支持深度思考,在回答时都会显示思考过程区域,如果模型不支持深度思考,就看不到完整的回答内容,让Cursor增加了自动判断模型是否支持深度思考的机制,修改过程中Cursor在AI模型设置中增加了深度思考开关,将决定权交给用户,我觉得还是自动判断更方便,于是改成了自动判断是否支持深度思考的方式
12、现在可以正常判断出deepseek r1支持深度思考了,思考过程可以展开/折叠,但即使展开也看不到思考过程的详细内容,在回答过程中,界面无法随着回答内容自动向下滚动,且看不到完整的回答内容,Cursor在修改过程中改进思考过程内容、改进自动滚动逻辑、改进内容更新机制,在测试过程中发现之前的MarkdownRenderer和CodeBlock相关功能还都有效,太棒了!
13、我之前有要求Cursor在AI对话页的每条消息下面添加三个按钮,收藏、复制、删除,不知道现在还有没有相关代码,没有的话就重新添加三个按钮和对应的功能,针对这一需求,修改后竟然给思考过程和回答内容增加了不同的背景色,但思考过程应该在回答内容上方,继续调整
14、调整完这些之后,AI对话界面的问题和回答都统一居左了,让Cursor调整了下,问题在左边,思考和回答在右边,然后点击收藏消息时,不要滚动到底部,保持在当前的浏览位置就行
15、接下来测试Tavily相关功能是否正常,询问deepseek r1一个需要搜索最新信息的问题,同步测试下深度思考是否正常,能否看到搜索链接,能否点击打开对应页面,能否收藏等功能,发现1.深度思考可以按句流式输出,但看不到完整的思考内容,只能看到最后两行 2.目前项目文件里已有Tavily相关文件和代码,回答内容的下方需要展示Tavily参考的链接,并且可以点击打开链接,看看现有的文件是否支持该功能 3.回答内容中包含网址时,其中的“.”会显示为“。” 4.点击收藏按钮,虽然提示收藏成功,但没有出现在备忘录列表里,四个问题全部反馈给Cursor修改
16、今日遗留问题:1.AI回答内容里的“.”都显示成了“。”,网址和代码都受此影响;2.思考内容虽然支持流式输出,但始终只能看到两行,看不到全部思考内容;3.提出问题后,只有主动滑动一下才能看到底部的“AI正在思考中”的提示
17、Cursor已经开始建议我“Start a new chat for better results”,难道是这个对话里内容太多了?明天重新开启一个对话之后再修正这三个遗留问题,然后测试其它功能

DevLog:2025年8月17日

1、今天重点优化备忘录相关功能,首先我发现备忘录列表里显示的备忘录内容不会随修改更新,比如备忘录里明明有文字,列表里却显示“空内容”,另外需要把备忘录标题下面的“文本编辑器”和右侧的字数统计去掉,因为界面右下角已经有字数统计了
2、修正这一问题后,发现又看不到支持深度思考的模型的思考过程了,并且在AI回答时,界面也不会自动向下滚动,可能是昨天将MessageView从AIChatView中拆分出来之后又有部分功能丢失了?先把这部分功能加回来,然后优化一下输出时的卡顿问题
3、继续优化备忘录,测试时发现了“列表顺序会随着点击发生变化,而不是只有修改内容时才会变化”和“光标自动跳转到结尾”的问题,在修改过程中,我发现虽然目前用的TextEditor是纯文本编辑器,但当前仍然有用到NSAttributedString来进行富文本处理,其实现在不需要处理富文本了,于是让Cursor去掉了富文本相关的代码
4、发现部分备忘录内容可以正常显示,部分不能,Cursor排查后发现Note模型有两个内容字段,一是markdownContent的纯文本内容,二是attrbutedContent的富文本内容,Cursor修改后改为二者均可正常显示,且优先使用前者,如果前者为空则使用后者
5、在修正备忘录问题的过程中,让Cursor去掉了知识库相关功能,暂时没有想好知识库该怎么用,而且知识库目前的存储也是以备忘录的形式存储的,和备忘录有些重合,先优化备忘录模块,后面再考虑更加其它功能吧
6、然后又修正了AI对话删除之后同时存在于列表和回收站的问题,修正了AI对话右上角无法切换模型的问题,奇怪的是之前我明明记得有一个AIModelSelectorView文件,啥时候消失了?
7、在让Cursor美化AIModelSelectorView时,美化有些过度了,并且再次出现了macOS不支持的SystemGray颜色,仍然时从iOS迁移至macOS的后遗症
8、结合当前应用的功能,让Cursor更新README,同时更新了应用的版本号为0.1,涉及info.plist和project.pbxproj两个文件
9、还在纠结数据的存储方式,因为UserDefaults主要用于存储一些配置相关的数据,在存储大小、性能、数据完整性、扩展性上均有限制,Cursor建议在数据量增长后迁移到Core Data或SQLite,比如数据大小超过5MB时,但因为对话内容中有大量的Markdown渲染,还有备忘录功能,数据可能很快就超过5MB了
10、决定先把目前的0.1备份一下,然后把数据存储机制改成Core Data,并且不需要迁移已有数据
11、Cursor表示要完成这一迁移,需要如下步骤 1.首先创建Core Data模型文件 2.创建Core Data管理器 3.更新数据模型以使用Core Data 4.更新DataManager以使用Core Data 5.更新相关的ViewModels,接下来当然又是修改项目文件、修复编译错误的漫长过程,待完成后再挨个测试功能
12、在修复编译错误的过程中,Cursor为了能更快解决编译错误竟然删除了五个视图文件,我拒绝,让它重新创建这五个文件,然后修正错误,因为担心后面还会再删除其它文件导致应用功能大量缺失
13、累计修复了:类型定义问题、可选值处理、方法签名修复、ScrollViewReader问题、Core Data关系处理、视图组件修复,以及几处警告,终于可以成功构建了
14、接下来测试功能,一打开App天都塌了,缺失了大量功能,接下来逐个修复,
1.备忘录界面没有创建备忘录的按钮 2.去掉预置模型中的所有模型,让用户自己添加,并且在添加模型界面增加Tavily密钥字段 3.AI模型管理界面无法关闭或返回 4.整体布局也很奇怪
15、Cursor还是将应用改成了三栏式布局,之后恢复设置功能,其中包含统一管理模型、数据统计、切换深色浅色模式、管理回收站等功能,并且提出优先让Cursor使用已有的文件和代码
16、然后调整了关于、模型管理功能(既然已经没有预置模型,那就不再需要每次打开应用时都删除了)、调整搜索功能(在导航栏里添加搜索按钮,点击弹出搜索弹窗,去掉备忘录界面的搜索按钮),仍然要求优先用已有的代码,目前已经恢复了应用的布局,今后再恢复各个功能