DevLog:2025年11月6日

1、让Cursor将当前版本(v0.2)打包,Cursor这次还同步创建了发布说明文档,其中包括版本信息、安装说明、更新内容、系统要求、支持的AI平台、反馈与支持、注意事项等内容,看起来还是挺规范的

2、已经用上了v0.2版本,以后对话时多多使用,修正问题并进一步优化,同时我还询问了Cursor下一个版本的建议,以细节补充和优化为主,Cursor给出了高、中、低三个不同优先级的建议,但我个人还是觉得有些并不着急

3、高优先级建议包括停止生成按钮(发送消息后按钮变成停止生成按钮,可以随时点击停止)、会话重命名/自动命名(其实现在可以重命名,也会自动获取用户的最后一个问题作为会话的名字)、消息复制按钮(已有)、快捷键支持(比如给创建新对话、切换模型、搜索等功能指定快捷键,这个可以有)、错误处理优化(更友好的错误提示、API限流处理、离线模式、崩溃日志等,我暂时不需要)

4、中优先级建议包括重新生成功能、代码块复制(这个可以有)、消息时间显示(我忽略了这一点,现在还真没有)、空状态设计(无对话、无收藏时的引导界面,这个好像也已经有了)、数据导出功能(收藏内容导出成.md还是比较实用的)

5、低优先级建议包括主题色自定义(花里胡哨,不需要)、使用统计(显示使用次数、Token消耗等,后面可以加上)、标签分类(暂不需要)、字体调节(暂不需要)、帮助文档(暂不需要)

6、总结一下,v0.3要增加的功能包括:停止生成按钮、快捷键支持、代码块复制、消息时间显示、数据导出功能、使用统计,也都是一些细节上的补全

7、目前在进行中的开发项目,移动端有ChatWith、NoteWith和DoitWith,Mac端有ChatWith for Mac和NoteWith for Mac,NoteWith for Mac是由移动端NoteWith修改而来,功能上相当于在ChatWith基础上增加了备忘录和待办事项功能,整合的功能比较多,后续可能会考虑删掉待办事项功能,留给DoitWith,且AI对话功能需要重复开发,暂时先搁置,接下来继续开发移动端NoteWith

8、将近三个月没有修改过NoteWith了,甚至都忘了它的功能都有啥,先让Cursor梳理一下目前的项目,都有哪些功能,有哪些优化建议,在梳理过程中,先整理了应用功能与优化建议文档,然后检查发现了重复文件,Cursor建议先清理重复文件(我还发现目前应用文件夹里有多个Trae创建的项目文件备份和.sh文件,也都不需要了,一并清理掉)、清理调试打印和未使用的代码,后面可以考虑更换数据持久化方案为Core Data,然后优化性能、扩展功能等等

9、Cursor直接删掉了15个无用文件(应用能否正常运行还有待验证),然后我删掉了多余的空文件夹,和之前不知道啥时候、由哪个AI工具编写的重构指南文件,以及一个项目初始化脚本setup.sh

10、时隔三个月再次启动了iOS模拟器,iOS 26已经发布,模拟器也换成了iPhone 17 Pro、iOS 26.0,并且部分界面也自动变成了iOS 26的效果,比如底部的AI对话、备忘录、我的三个按钮及其切换效果,决定趁现在应用功能还很简单,结合近期修改ChatWith for Mac的经历,先开启一个新对话,把NoteWith的AI对话和备忘录的数据永久化方式改为Core Data,AI模型、设置等仍然采用UserDefaults

11、Cursor的建议是使用Core Data存储Note、AIChatSession、AIMessage、SearchLink、deletedNotes,仍然使用UserDefaults来保存AIConfig和应用设置,因为Core Data适合结构化数据,支持关系、查询和迁移,UserDefaults适合小量配置,访问频繁但更新不频繁

12、接下来创建Core Data模型文件和相关组件,创建了备忘录、AI对话、AI消息、搜索链接四个实体及对应的扩展类,重构了DataManager,并更新了项目文件,和以往修改数据永久化方式一样,这次Cursor也增加了迁移机制,首次运行时会自动将现有的UserDefaults数据迁移到Core Data,但因为当前应用还没有发布,不需要迁移机制,让Cursor去掉了迁移机制,并且修复了构建错误,具体使用体验怎么样,哪些功能受到了影响,明天再测试,然后引入三方库MarkdownUI和RichTextKit,完善AI问答和备忘录的渲染效果和编辑体验

DevLog:2025年11月4日

1、继续试用ChatWith,发现目前的应用在使用支持深度思考的模型时,思考内容好像限制了显示高度,一旦达到高度限制,就不会随着思考的内容继续自动滚动,Cursor表示思考内容的显示高度的确固定在了400点,且超出之后会出现滚动条,但超过400点后就不会再自动滚动,在修改过程中发现了另一个问题,好像在对话中切换了另一个模型,再提出新问题时应用就会卡死

2、Cursor分析了可能导致应用卡死的几个问题:Core Data并发冲突、通知监听器生命周期、状态读取时序、缺少状态同步,特别是Core Data并发冲突,由于直接在主线程修改Core Data managedobject,如果此时用户立即发送消息,可能造成并发访问冲突,updateAISession可能触发Core Data save操作,与其他操作冲突,明天继续修改这个问题

3、添加其他模型来测试Base URL的填写方法,之前已经要求Cursor将其改为用户手动填写AI服务的跟地址,应用会自动补全路径,比如api.openai.com、openrouter.ai/api,然后针对火山引擎的“应用”(bots)做了特别优化,需要填写完整地址https://ark.cn-beijing.volces.com/api/v3/bots/,测试发现百度云千帆的Base URL填写仍然有问题,比如我填写官网提供的https://qianfan.baidubce.com/v2/chat/completions就会连接失败,删掉v2往后的内容也不行,只填写https://qianfan.baidubce.com也不行,与其设定各种复杂的自动补全规则,倒不如直接要求用户填写完整的Base URL,或者应用内置一些常用的Base URL来的简单

附上常用的几个AI的Base URL:

OpenAI

https://api.openai.com/v1/chat/completions

DeepSeek

https://api.deepseek.com/v1/chat/completions

OpenRouter

https://openrouter.ai/api/v1/chat/completions

硅基流动

https://api.siliconflow.cn/v1/chat/completions

火山方舟

https://ark.cn-beijing.volces.com/api/v3/chat/completions

https://ark.cn-beijing.volces.com/api/v3/bots/chat/completions

百度云千帆

https://qianfan.baidubce.com/v2/chat/completions

阿里云百炼

https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions

4、询问Cursor目前应用在Base URL补全方面的规则是怎样的,根据回答内容,规则包括:

1.如果没有http://或https://,就自动添加https://

2.如果URL末尾有斜杠,就自动移除

3.如果已经包含完整路径,就不做任何修改

4.如果包含部分路径,就自动补全,比如补全v1,补全/chat/completions

5.如果只有基础URL,就自动补全/v1/chat/completions

按照这套规则,我填写了完整的百度云千帆的Base URL,应该能正常使用才对,但填写完整地址之后测试仍然提示404

5、问题可能出现在自动补全v1上,也就是在“包含/chat/completions但不包含v1时,会自动添加v1前缀,包含/api/、/bots/、/v3/、/v2/,且不含/chat/时,则添加chat/completions”这里,根据Cursor给出的示例,可能会出现/v1出现在/chat/completions之后的情况

6、目前的规则的确有些复杂,可能用户在填写过程中也会不知道该填写完整的地址还是部分地址,倒不如直接在应用里内置几个常用的、完整的Base URL,由用户自行选择,要求:目前的规则有些复杂,我希望能在添加和编辑AI模型界面,预置几个常用的API平台的完整Base URL,用户只需要填写备注、模型名称、选择模型提供商、填写API Key、填写Tavily API Key即可使用模型

7、Cursor在修改过程中创建了APIProvider枚举,包含10个常用平台(OpenAI、DeepSeek、Anthropic Claude、OpenRouter、Google Gemini、智谱GLM、月之暗面Kimi、百度文心一言、阿里通义千问、腾讯混元、自定义),这样就不再需要配置路径补全规则,用起来也更方便了,先添加几个模型试试,再决定要不要增加或删减APIProvider

8、在修正因为使用中文引号导致构建失败的错误之后,百度云千帆和火山方舟的API都可成功连接,当API提供商选择自定义时,需在“高级设置”的Base URL中填写完整地址,即带有/chat/completions的地址

9、APIProvider需要增加硅基流动、火山方舟、百度云千帆、阿里云百炼,这四个都放在“自定义”前面,另外我发现在选择某个APIProvider之后,模型名称部分也会出现预置的模型名称,但我不需要,改成由用户手动填写模型名称,修改之后测试了几个不同的模型,都可以成功连接了

DevLog:2025年10月31日

1、今天开始继续完善NoteWith for Mac,并且持续试用ChatWith for Mac,积累下一个版本的优化点

2、参考之前ChatWith for Mac的经验,先让Cursor按照目前的功能模块梳理一下文件结构,另外笔记功能也看下有没有合适的三方库可以较好地支持富文本编辑,就像渲染AI回答内容的markdown-ui一样

3、目前应用包含的功能模块有AI对话、备忘录、待办事项、设置、搜索以及通用组件,架构上分成了Models数据模型、Services服务层、ViewModels视图模型、Views视图层,数据存储方式上,备忘录、AI对话都采用了Core Data,但TodoItems和TodoGroups以及AIConfigs仍然是用的UserDefaults

4、然后让Cursor根据目前的架构整理了一下文件夹,代码组织清晰了一些,接下来运行一下试试,看看都哪些功能需要调整

5、首先,目前的备忘录在打开时默认是预览模式,需要在详情里点一下然后切换到编辑模式,询问Cursor有没有比较好用的三方库,能让目前的备忘录模块实现类似苹果备忘录的富文本编辑功能,且不需要在预览和编辑模式间切换,Cursor给出了三个方案,方案一是RichTextKit,专为SwiftUI设计,支持实时富文本编辑(所见即所得),无需在编辑/预览模式间切换,且API简洁,易于集成,可以实现类似苹果备忘录的编辑体验;方案二是AttributedString+NSTextView,即对当前的方案进行优化,这个方案我是肯定不会用的,相当于又倒退了;方案三是ProseMirror via WKWebView,可以实现功能完整的富文本编辑器,支持表格、列表、链接等,但因为需要通过WebView嵌入,导致性能开销较大,且与SwiftUI的集成略复杂,体积也较大

6、综合看下来只有方案一最符合我的需求,下周再让Cursor集成RichTextKit,试试效果

DevLog:2025年10月30日

1、有半个月没有打开Cursor了,这段时间Cursor已经更新到了2.0,界面上的最大变化就是在原本的Editor模式之外增加了一个Agents模式,暂时还没有发现具体的区别是啥

2、带我入门的Cherry Studio近期也在频繁更新,但感觉越来越臃肿了,目前已经有助手、智能体、小程序、知识库、文件、代码工具、笔记等功能模块,但我常用的也就第一个,也就是目前ChatWith for Mac的核心功能,后续可能会将收藏功能改成知识库,其它的暂时都用不到,而且目前Cherry Studio的响应速度也越来越慢,尤其在开启联网搜索后,先要深度思考一段时间,再调用联网搜索的结果,再从联网搜索结果中总结整理,整个过程比豆包的深度思考模式(边搜边思考)还慢,甚至让我又打开了界面丑陋但功能简洁的Chatbox

3、在前段时间修改搜索页、联网搜索逻辑,并调整部分界面显示效果后,今天打包一个当前版本,继续使用并在使用中发现问题、看是否要增加新功能

4、询问Cursor当前应用都在哪些地方限定了版本号?根据Cursor的回答,在Xcode项目配置文件ChatWith.xcodeproj/project.pbxproj中有MARKETING_VERSION(市场版本号)和CURRENT_PROJECT_VERSION(构建版本号),在设置详情SettingsDetailView中有硬编码的版本号,Cursor建议改为动态获取,已修改

5、然后让不同的AI来设计应用图标,用同样的指令试了豆包、ima、ChatGPT,还是ChatGPT的效果更好,豆包生成的图标混杂了一些奇怪的字符,ima生成的图标审美有些差,有些“复古”,ChatGPT生成的图标很简洁耐看,然后让ChatGPT先不做圆角效果,可以平铺整个画面,我再用Xcode中的AppIcon来生成图标,也能很好地理解我的需求并提供了图片

6、在添加图标前,发现目前的Assets文件中的AppIcon.appiconset/Contents.json配置仍是为移动设备设计的,当然还是因为这个应用是从iOS应用修改而来的,于是让Cursor修改了Contents.json为macOS配置

7、在翻看ChatGPT提供的图标设置方法时,发现它可以帮我生成可以直接拖入Xcode的AppIcon.iconset文件夹,其中包含所有尺寸的图标,我把ChatGPT提供的压缩包中的文件放到对应的路径之后再打包应用,果然已经有图标了,ChatGPT还是厉害

DevLog:2025年10月15日

1、上次修改搜索功能之后,增加了点击搜索结果立刻跳转到应用的对应内容的功能,实测可以跳转到对话的对应位置,但不能跳转到收藏的对应位置,在搜索结果页面,对话和收藏条目下的更新时间显示也有问题,对话内容创建于几天几小时前,收藏内容更新于几天几小时前,统一成创建于年月日,小时分钟,与对话列表和收藏列表条目的时间显示形式一致,让Cursor检查并修正一下

2、修改过程中发现,前者是因为CoreData对象不能直接跨不同的实例传递,需要通过ID来传递和查找Note对象,后者是将相对的时间格式改成绝对的时间格式,修改后测试,时间显示正常了,但点击对话和收藏的搜索结果都无法直接跳转到对应位置

3、通过反复的添加调试信息、反馈调试信息定位并解决了问题,并且适当缩短了等待时间,目前点击搜索结果中的对话内容可以直接跳转到对话所在位置,点击收藏内容可以直接打开对应的收藏条目,已经基本实现了优化搜索页面的需求

4、上次修改应用时,我想到可能需要按照macOS 26的最新设计规范来调整一下ChatWith for Mac的界面,于是询问Cursor“你熟悉最新的macOS Tahoe应用设计规范吗?如果要对当前的应用的UI做一些针对macOS Tahoe的优化,你有什么建议?在进行这些修改后,还能否兼容macOS Tahoe之前的系统?”Cursor的回答很诚实:我需要先确认一下您提到的 macOS 版本。根据我的知识(截止到2024年4月),Apple 的最新版本是 macOS Sonoma (14.x) 和 macOS Sequoia (15.x)。我没有关于”macOS Tahoe”的具体信息。

5、不过Cursor也给了一些既适用于macOS 14.0 Sonoma,也能保持向后兼容的UI优化建议,包括材质和视觉层次、增大圆角和边距、使用Typography排版、增加hover效果等交互反馈、使用多色SF Symbols等等,这些都是锦上添花的东西,不急,还是继续优化功能更要紧

6、下一步计划增加上传图片和文档的功能,在对话界面的联网搜索和发送按钮之间增加附件按钮,点击可以上传本地的图片或文件(主要是文档格式),上传之后不直接发送给 AI,可以在输入框补充一些文字需求,一并提交

DevLog:2025年10月11日

1、节前发现的遗留问题如下,今天开始逐步修改:

1.当前搜索页面缺少返回按钮,实际上搜索功能目前还不全,搜完能看到关键词所在的对话/收藏,但点击不会跳转到对应条目,还得再完善下

2.联网搜索的触发词有点少,比如“今年”就无法触发搜索,需要进一步扩充,或者增加一个联网搜索按钮,点亮后开启联网搜索,或者改一下逻辑,在添加模型时只要填了Tavily Key,就开启联网搜索,并且在选择模型界面显示是否填写了Tavily Key,如果填写了就显示“联网搜索已开启”

3.问题太长时,对话界面上方的标题可能会断行,需要限制一下字数

2、首先修改上面的问题2,决定先用第三种方案,来解决部分AI模型因为训练数据比较老导致回答内容易出现错误的问题,要求Cursor修改一下联网搜索功能的逻辑,不再通过关键词判定是否开启联网搜索,而是在添加模型时只要填了Tavily Key,就会一直开启联网搜索,并且在选择AI模型界面显示“联网搜索已开启”,未填写Tavily Key的AI模型,则显示“联网搜索未开启”

3、但在这次修改后只要点击发送问题应用就会卡死,结合DEBUG信息,Cursor认为这是因为每次发送消息都会进行联网搜索会阻塞主线程,导致应用卡主,并且会消耗大量API配额、增加不必要的延迟,于是又给我改回了之前的方案1

4、可能方案2会比较合适?尝试让Cursor在发送按钮旁边增加一个“联网搜索已开启/已关闭” 的按钮,需要用户手动开启/关闭,默认是关闭状态,不用关键词来判定是否开启联网搜索,但在发送问题后仍然会让应用卡住,Cursor分析表示虽然代码本身是异步的,但可能存在网络请求没有超时控制(Tavily搜索请求可能长时间等待)、缺少用户反馈(用户不知道搜索正在进行)等问题,于是给TavilySearchService添加了超时控制、给AIService添加了搜索状态反馈,改进了AIViewModel和AIChatView的UI状态显示,但依然没有解决问题,甚至现在即使不打开联网搜索开关,点击发送按钮时应用也会卡死,而且也没有看到Cursor给AIService添加的调试信息

5、近期Cursor频繁更新,先更新一下再重新开启对话来修正这个问题,另外在将电脑系统更新到最新的macOS  Tahoe 26之后,由于整个系统的界面都有变化,ChatWith的一些UI也发生了变化,比如对话界面有些消息的边框看不到了,输入框的边框也看不到了,后面也需要调整下

DevLog:2025年9月26日

1、询问Cursor如何将当前的应用打包,没想到Cursor竟然直接用Archive命令给我完成了打包,并且创建了ExportOptions.plist配置文件,并使用macOS Developer证书签名,生成了通用的双架构二进制文件,并输出为.app应用程序包,放到了ChatWith_Distribution文件夹下,另有一个名为ChatWith_v1.0_macOS的分发包,应用大小3.5MB(毕竟应用的功能还很简单)

2、找到了第一个用户,直接发了分发包,解压放到Mac的“应用程序”文件夹,但打开时会提示:Apple无法验证ChatWith是否包含可能危害Mac安全或泄露隐私的恶意软件,需要在设置中允许一下,可能是没有签名吧,这个以后再说

3、发现了如下bug:

1.对话界面切换模型按钮无法直达添加模型界面,新用户首次打开应用可能会有点困惑

2.联网搜索的触发词有点少,比如“今年”就无法触发搜索,需要进一步扩充,或者增加一个联网搜索按钮,点亮后开启联网搜索,或者改一下逻辑,在添加模型时只要填了Tavily Key,就开启联网搜索,并且在选择模型界面显示是否填写了Tavily Key,如果填写了就显示联网搜索已开启

3.问题太长时,对话界面上方的标题可能会断行,需要限制一下字数

DevLog:2025年9月19日

1、决定让Cursor适当美化当前应用,包括调整间距和圆角、使用系统颜色、添加悬停效果、优化图标使用等,Cursor标识已经按照现代macOS设计趋势对ChatWith应用进行了全面的界面优化,主要改进包括:间距和圆角优化、系统颜色使用、悬停效果和动画、图标优化、卡片式设计、侧边栏现代化、设置页面优化、搜索界面优化等,使应用具备了更直观的交互、更舒适的阅读、更现代的外观和更好的可用性(Cursor每次对自己的作品都非常自信)

2、测试发现好像也没有太大的变化,侧边栏图标和间距更大了,AI对话和收藏两个列表的条目增加了卡片效果,选中时的动效和颜色有调整,但选中时的边框太粗了,让Cursor调整了下,选中条目时文字会稍微变大导致稍微有点糊,这种负优化还是要去掉,并且选中置顶的内容时,不要增加蓝色边框,也让Cursor一并调整了

3、然后修改了对话详情页面上方的标题,和AI对话列表的标题保持一致,即我询问AI的最后一个问题,猜测对话详情页对应的文件是AIChatView,选中文件并Add File to Cursor Chat,并直接提出需求,这样就减少了定位问题的复杂度,以后要逐渐深入了解应用的文件结构,修改起来也会比较快

4、设置列表SettingsListView还是略显局促,下周再修改

DevLog:2025年9月18日

1、先测试一下目前这个ChatWith for Mac的功能是否完整,然后考虑在保持简洁的基础上,对UI进行一些美化

2、第一个问题就是在收藏AI对话消息后,收藏的内容没有同步到备忘录中,解决之后发现备忘录没有默认标题,跟Cursor明确备忘录标题默认用“备忘录+收藏时间”,AI对话列表的标题下方添加最近一次AI回答内容的前20个字作为描述

3、目前AI对话列表中的条目仍无法获取最近一次回答内容的前20字作为描述,并且AI对话和备忘录两个界面的中间栏宽度默认好像是400,有点宽了,其实300就够了,但我希望的是默认300,最大400,先让Cursor去掉了AI对话列表中的描述文字,只留标题和更新时间,这样代码和界面就更简洁了

4、多次修改宽度限定和调节/保存机制未果,决定先简化需求,固定宽度为300,不允许调整,然后将“备忘录”改为“收藏”,不再需要编辑和预览的切换,始终显示预览状态就行,再在标题右侧添加一个“复制”按钮,点击可以复制收藏内容到剪贴板。Cursor修改了导航菜单,修改了NotesListView中的标题和文本,添加了复制到剪贴板的功能,移除NoteEditView的编辑功能、自动保存功能、编辑视图等等,至此已经将NoteWith基本修改成了ChatWith

5、然后再次更加了AI对话列表中标题下方显示描述文字的功能,这样对话和收藏两个列表页的样式就保持一致了,然后扫了一遍目前应用中存在的“AI对话”和“备忘录”,统一改成“对话”和“收藏”,涉及的文件包括负责搜索功能的SearchWindowView、负责回收站功能的RecycleBinView、设置页面SettingsDetailView、AI对话视图AIChatView、备忘录视图模型NotesViewModel

6、让Cursor去掉了我现在暂时还不需要的导入数据和导出数据功能,以后如果需要,并且想好了要怎么用这两个功能时,再添加

7、突发奇想,想看看目前这个应用的界面有没有什么可以优化的地方,直接问Cursor:结合近年来macOS端应用的趋势,你觉得现在这个应用的界面有没有可以优化的地方?Cursor给列举了非常多趋势和建议,高优先级优化包括侧边栏现代化、列表项卡片化、颜色系统优化,中优先级优化包括间距和布局、交互反馈、搜索体验,以及几项我看起来没啥用的低优先级优化,决定明天先让Cursor进行调整间距和圆角、使用系统颜色、添加悬停效果、优化图标使用等优化

DevLog:2025年9月17日

1、昨天已经基本实现了模型添加、AI对话的基础功能,今天继续完善,首先是添加多个模型并在对话时切换模型,首先在添加两个模型之后,发现设置-可用模型的模型列表里,两个模型之间有两条分割线,而且创建新模型时,无法保存我填写的新API密钥和基础URL,而是沿用了我添加的第一个模型的API密钥和基础URL

2、首先更新了AIModel结构体,添加了apiKey和baseURL字段,移除了isDefault字段,修复了ModelEditView的保存逻辑,更新了模型测试逻辑和对话配置逻辑,使用模型自己的API配置进行对话,而不是使用全局的API配置(早就应该这样了),然后移除了modelRow函数中的Divider():,去掉了多余的分割线,再次测试,两个问题成功解决

3、但AI对话窗口里又出现了回答在上、问题在下的情况,另外切换模型的弹窗显示也有问题,先修复切换模型的弹窗的显示效果,同时修复一下AI对话列表的选中状态,目前根本看不出来选中了哪个对话,修改后仍然不能在对话列表中标示出当前选中的对话,还需要再修改

4、先用硅基流动的DeepSeek R1 API测试了一个需要联网获取最新信息的问题,发现目前思考过程没有展示、AI回答内容没有经Markdown渲染、看不到Tavily提供的资料链接,决定让Cursor同时修复这些问题,并明确要求使用MarkdownUI来进行Markdown渲染,其实之前已经有了一部分支持这些功能的代码,但功能不完整,Cursor列出了Todo,一步步修改,稍后一并给Cursor反馈问题

5、Cursor一次修改了思考过程展示/折叠和展开、Markdown渲染、Tavily资料链接显示等功能,其中在Markdown渲染上,先创建了一个新的文件MarkdownView,但没有添加到项目里,提示构建失败,于是又重新启用现有的MarkdownRenderer,并且引入了MarkdownUI,同时还保留了自定义AttributedString实现作为备选方案,原因貌似是MarkdownUI只支持14.0以上的macOS,我觉得没有必要保留备选方案,之前修改NoteWith时已经验证了MarkdownUI的渲染效果,于是要求Cursor去掉了自定义实现相关代码,使用MarkdownUI作为唯一的渲染方案,MarkdownRenderer代码更加简洁了

6、接下来测试一下思考过程、Markdown渲染、Tavily链接的显示效果,先把AI对话内容的显示顺序搞定,然后处理了一下点击AI对话右上角无法切换模型的问题(原因是ChatView的模型选择回调中代码被注释掉了,没有实际实现模型切换功能,而且每个对话都显示第一个可用模型,而不是用户选择的模型,模型切换没有保存到对话中,我需要为每个对话独立保存选择的模型),Cursor自称目前已经实现如下目标:新对话默认使用第一个可用模型、点击右上角的模型名称选择其它模型、选择的模型立即保存到该对话中、每个对话都有自己独立的模型选择、重启应用后每个对话仍然使用之前选择的模型

7、模型可以正常切换了,但试了几个问题,发现无法触发应用通过Tavily获取最新信息,Cursor分析发现虽然Tavily密钥已经存储在模型中,但实际的消息发送逻辑中没有使用Tavily服务,需要实现Tavily集成,创建了一个新的Tavily服务类TavilyService,并修改了OpenAIService,表示当提问时应用会自动通过Tavily获取最新信息

8、测试发现即使是不支持深度思考的模型,回答内容里也会出现思考过程区域,而且回答内容没有经过Markdown渲染,也看不到Tavily的资料链接,在用MarkdownUI来实现Markdown渲染效果的过程中,Cursor多次创建和删除Package文件(因为一直没有真正引入MarkdownUI),多次用命令行修改MarkdownRenderer,多次尝试不使用MarkdownUI,而是换用SwiftUI的原生功能来实现基本的Markdown渲染,不知道为啥今天反复出现这种“退步”的操作,我多次打断,反复强调要用MarkdownUI来渲染

9、已经有部分文字可以呈现渲染后的效果,但表格还是无法正常显示,参考NoteWith,可能要对表格和代码块的显示进行单独的优化,猜测上面重复同样的操作可能是因为这个对话的上下文太长了导致的,后面在Cursor里开一个新对话再修改这些内容

10、又遇到了刚刚进行的问答没有被保存到对话里的问题,在修改ChatWith,将用户消息和AI消息更新后都调用onUpdate将其保存到Core Data后,问题解决

11、在修改MarkdownRenderer以支持对表格和代码块的渲染优化时,Cursor反复检查MarkdownUI的版本、添加MarkdownUI默认的表格和代码块渲染样式、添加自定义的表格和代码块渲染样式,然后删除这些内容,多次操作后相当于没有做任何的修改

12、决定试试让Cursor创建单独的文件来处理表格和代码块的渲染,并且使用MarkdownUI,Cursor创建了TableRenderer和CodeBlockRenderer,并将新文件添加到项目,但多次尝试后,即使已经将这两个新文件集成到AssistantMessageView之后,仍然未能实现对表格的正常渲染

13、由于目前的ChatWith是由iOS应用修改而来,且在修改过程中对代码和架构进行了大量的调整,怀疑目前有部分文件功能是重复的,让Cursor列举结构和分工后发现ChatWrapper是多余的、ChatView过于庞大、且组件职责不清晰,比如ChatMessageListSection和ChatMessageListView功能重复、ChatInputSection和ChatInputView功能重复,Cursor建议简化架构、删除冗余文件、重新组织文件结构,决定让Cursor实施这些优化

14、修改完成后架构更清晰(每个文件职责单一,易于维护,减少了不必要的中间层),代码更简洁(ChatView从436行减少到约280行,移除了重复的组件子定义),维护性更好(组件独立,便于单独测试和修改,文件结构更符合SwiftUI最佳实践),当然每次Cursor在修改完后都会这么说,还是要实际测试一下修改成果

15、继续测试具体的功能,首先发现在与支持深度思考的DeepSeek R1模型对话时,思考内容和回答内容混在了一起,未能像之前规划的那样分成两块,并且思考内容要可以折叠,可以展开,Cursor在分析后修改了OpenAIService中的seperateThinkAndAnswer函数,以正确解析思考内容,但仍然没有解决问题

16、我现在觉得可能将iOS版的ChatWith修改成Mac版,再逐个测试、恢复功能,可能是做了大量的重复工作,既然之前NoteWith for Mac已经基本可用了,那其实可以对它进行简化,实现我对ChatWith for Mac的一系列需求,于是复制了一份NoteWith for Mac的源文件,并要求Cursor将应用的名字改成ChatWith,这一过程包括将应用名称由NoteWith改为ChatWith、更新XCode项目文件中的名称引用、更新Swift文件中的名称引用、更新Info.plist文件、重命名相关文件夹和文件等

17、Cursor很快完成了修改,并且按照我的反馈替换掉了一些漏网之鱼,接下来就是去掉待办事项模块、测试功能了,后面可能还要把备忘录替换为收藏,去掉待办事项模块及相关功能包括了分析待办事项模块的组件和依赖、移除待办事项相关的数据模型、移除待办事项相关的视图、移除待办事项相关的视图模型、从DataManager中移除待办事项相关代码、从导航中移除待办事项相关项目、从项目文件中移除待办事项相关文件等步骤,并且根据我的反馈删掉了两处遗留的待办事项相关功能

18、构建成功后,整理了文件结构,特别是Views文件夹下既有AIChat和Notes两个文件夹来存放AI对话和备忘录相关的视图文件,又有大量视图文件散落在Views文件夹下,ViewModels文件夹也有类似问题,移动文件并更新project.pbxproj中的路径后,问题解决,结构清晰了一些