chatlab-cli 0.24.1 → 0.25.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/dist/chat-command-5XMRLXZM.mjs +166 -0
  2. package/dist/chat-command-5XMRLXZM.mjs.map +1 -0
  3. package/dist/{chunk-N5DGZQB4.mjs → chunk-7VG6QGQ2.mjs} +1543 -664
  4. package/dist/chunk-7VG6QGQ2.mjs.map +1 -0
  5. package/dist/{chunk-QJI6AOAT.mjs → chunk-CUCDRAY6.mjs} +17 -25
  6. package/dist/chunk-CUCDRAY6.mjs.map +1 -0
  7. package/dist/chunk-FDK6SPCG.mjs +40 -0
  8. package/dist/chunk-FDK6SPCG.mjs.map +1 -0
  9. package/dist/{chunk-ZL322NVL.mjs → chunk-GTCTDD2Z.mjs} +116 -504
  10. package/dist/chunk-GTCTDD2Z.mjs.map +1 -0
  11. package/dist/{chunk-43XWYC3M.mjs → chunk-JE3FOFF7.mjs} +219 -123
  12. package/dist/chunk-JE3FOFF7.mjs.map +1 -0
  13. package/dist/{chunk-QY6P2YS7.mjs → chunk-PDQFSQO6.mjs} +59 -33
  14. package/dist/chunk-PDQFSQO6.mjs.map +1 -0
  15. package/dist/chunk-WYHGWTA4.mjs +485 -0
  16. package/dist/chunk-WYHGWTA4.mjs.map +1 -0
  17. package/dist/{chunk-CIIQ3S2X.mjs → chunk-YZYP5ST6.mjs} +37 -8
  18. package/dist/chunk-YZYP5ST6.mjs.map +1 -0
  19. package/dist/cli.mjs +3 -2
  20. package/dist/{http-TPX74BLK.mjs → http-C3CGXUBU.mjs} +8 -6
  21. package/dist/{import-B745DRHD.mjs → import-VS7L5JDX.mjs} +4 -4
  22. package/dist/index.mjs +10 -8
  23. package/dist/{mcp-YWAVG5XW.mjs → mcp-6VXDPUQK.mjs} +11 -6
  24. package/dist/mcp-6VXDPUQK.mjs.map +1 -0
  25. package/dist/{stream-import-OPALPVWF.mjs → stream-import-TFDBNVIW.mjs} +3 -3
  26. package/dist-web/assets/{DebugToolsPanel-DaSNc1o-.css → DebugToolsPanel-vn-bnUxn.css} +1 -1
  27. package/dist-web/assets/DebugToolsPanel.vue_vue_type_script_setup_true_lang-B1xZmp9r.js +161 -0
  28. package/dist-web/assets/{EChartWordcloud-VpNJDurs.js → EChartWordcloud-CzhfrEF_.js} +1 -1
  29. package/dist-web/assets/{MessageExportModal-CSfaY25B.js → MessageExportModal-B79pPBL9.js} +1 -1
  30. package/dist-web/assets/{electron-BUeXfvxT.js → electron-DRkrjeIl.js} +1 -1
  31. package/dist-web/assets/electron-Dv8jdn_2.js +1 -0
  32. package/dist-web/assets/{fetch-RDFt3hmp.js → fetch-BmZIm6mS.js} +1 -1
  33. package/dist-web/assets/fetch-BqLy63aj.js +1 -0
  34. package/dist-web/assets/fetch-BstX-wd4.js +1 -0
  35. package/dist-web/assets/{fetch-BohUj3CQ.js → fetch-Bvcxe5PI.js} +1 -1
  36. package/dist-web/assets/{fetch-BneHn5qk.js → fetch-CDamdvtb.js} +1 -1
  37. package/dist-web/assets/{fetch-DypPduyQ.js → fetch-DWg-2kOp.js} +1 -1
  38. package/dist-web/assets/{fetch-CARsBVl0.js → fetch-DfgdagMN.js} +1 -1
  39. package/dist-web/assets/{fetch-Ck3tjoLa.js → fetch-Drk9dLaF.js} +1 -1
  40. package/dist-web/assets/{fetch-B2q6973s.js → fetch-Y-_WsCuk.js} +1 -1
  41. package/dist-web/assets/{fetch-BGMRmQx0.js → fetch-ph2_d79v.js} +1 -1
  42. package/dist-web/assets/{index-Bvlj3dMn.js → index-9urfJP1r.js} +1 -1
  43. package/dist-web/assets/index-CfKjh0Jr.js +9 -0
  44. package/dist-web/assets/index-CprJOAB1.css +1 -0
  45. package/dist-web/assets/{index-BvaWRM6_.js → index-DMWf5On7.js} +1 -1
  46. package/dist-web/assets/{index-DCWvD-4L.js → index-D_hHm7bQ.js} +2 -2
  47. package/dist-web/assets/index-MCdpiX_O.js +173 -0
  48. package/dist-web/assets/{index-C5LrQG3N.js → index-deYDOVUa.js} +4 -4
  49. package/dist-web/assets/vendor-echarts-CITQeskI.js +11 -0
  50. package/dist-web/assets/{vendor-echarts-wordcloud-CZ9gsX8l.js → vendor-echarts-wordcloud-B1kQMklB.js} +1 -1
  51. package/dist-web/assets/{vendor-nuxt-ui-BYU7dz8t.js → vendor-nuxt-ui-C_8CsH6e.js} +1 -1
  52. package/dist-web/assets/{vendor-reka-ui-CnB0mMNX.js → vendor-reka-ui-CIMXwvEp.js} +1 -1
  53. package/dist-web/assets/{web-CXPkmhis.js → web-XJV6Vj5t.js} +1 -1
  54. package/dist-web/index.html +4 -4
  55. package/package.json +1 -1
  56. package/dist/chunk-43XWYC3M.mjs.map +0 -1
  57. package/dist/chunk-CIIQ3S2X.mjs.map +0 -1
  58. package/dist/chunk-N5DGZQB4.mjs.map +0 -1
  59. package/dist/chunk-QJI6AOAT.mjs.map +0 -1
  60. package/dist/chunk-QY6P2YS7.mjs.map +0 -1
  61. package/dist/chunk-ZL322NVL.mjs.map +0 -1
  62. package/dist/mcp-YWAVG5XW.mjs.map +0 -1
  63. package/dist-web/assets/DebugToolsPanel.vue_vue_type_script_setup_true_lang-BBDrsJfe.js +0 -161
  64. package/dist-web/assets/electron-BynNUuEA.js +0 -1
  65. package/dist-web/assets/fetch-BtHwWs8A.js +0 -1
  66. package/dist-web/assets/fetch-DzNuFdFM.js +0 -1
  67. package/dist-web/assets/index-BRwEubUe.js +0 -173
  68. package/dist-web/assets/index-DB-iqXzV.css +0 -1
  69. package/dist-web/assets/index-DS1rzk1I.js +0 -8
  70. package/dist-web/assets/vendor-echarts-C5u62NnM.js +0 -11
  71. /package/dist/{http-TPX74BLK.mjs.map → http-C3CGXUBU.mjs.map} +0 -0
  72. /package/dist/{import-B745DRHD.mjs.map → import-VS7L5JDX.mjs.map} +0 -0
  73. /package/dist/{stream-import-OPALPVWF.mjs.map → stream-import-TFDBNVIW.mjs.map} +0 -0
@@ -0,0 +1,173 @@
1
+ import{a as se,b as X,g as le,i as rt,n as Re,d as ze,o as ct,c as lt}from"./vendor-nuxt-ui-C_8CsH6e.js";import{u as K,b as fe,c as Me,T as dt,d as mt,_ as je,s as ve,e as xe,f as ie,g as we,h as Oe,i as Be,j as Ve,k as He,l as Te,m as pt,I as ut,n as Le,C as ht,o as gt}from"./index-CfKjh0Jr.js";import{p as Q,d as de,G as o,H as N,K as E,a5 as e,L as m,T as a,u as t,R,b as w,h as B,U as D,Q as z,P as p,Z as V,a3 as Z,O as Ee,w as pe,a9 as yt,au as ft,F as vt,a0 as xt,n as bt,bA as It,bH as At}from"./vendor-reka-ui-CIMXwvEp.js";import{M as wt,_ as Fe,a as kt}from"./index-DMWf5On7.js";import"./vendor-snapdom-XnBoh1gd.js";function _t(x){const s=!!x;return{shouldOpenLanguageModal:!s,shouldContinue:s}}const Ct={class:"language-select-modal flex flex-col p-6"},Lt={class:"mb-6 flex flex-col items-center text-center"},St={class:"mb-4 flex h-14 w-14 items-center justify-center rounded-2xl bg-linear-to-br from-pink-100 to-rose-100 dark:from-pink-900/30 dark:to-rose-900/30"},Pt={class:"text-xl font-bold text-gray-900 dark:text-white"},Wt={class:"mt-1 text-sm text-gray-500 dark:text-gray-400"},Mt={class:"mb-6 flex justify-center"},Tt=Q({__name:"LanguageSelectModal",emits:["done"],setup(x,{emit:s}){const n=s,{t:y}=K(),i=fe(),g=w(!1),d=B(()=>mt.map(v=>({label:v.nativeName,value:v.code}))),c=B({get:()=>i.locale,set:v=>i.setLocale(v)});de(async()=>{try{const v=await Me().getLocale(),u=_t(v);g.value=u.shouldOpenLanguageModal,u.shouldContinue&&n("done")}catch{g.value=!0}});function I(){Me().saveLocale(i.locale).catch(()=>{}),g.value=!1,n("done")}return(v,u)=>{const k=se,P=X,b=le;return o(),N(b,{open:g.value,"prevent-close":"",ui:{content:"sm:max-w-md",overlay:"backdrop-blur-sm"}},{content:E(()=>[e("div",Ct,[e("div",Lt,[e("div",St,[m(k,{name:"i-heroicons-language",class:"h-7 w-7 text-pink-600 dark:text-pink-400"})]),e("h2",Pt,a(t(y)("common.languageSelect.title")),1),e("p",Wt,a(t(y)("common.languageSelect.subtitle")),1)]),e("div",Mt,[m(dt,{modelValue:c.value,"onUpdate:modelValue":u[0]||(u[0]=F=>c.value=F),size:"md",items:d.value},null,8,["modelValue","items"])]),m(P,{block:"",color:"primary",size:"lg",class:"bg-pink-500 hover:bg-pink-600 dark:bg-pink-600 dark:hover:bg-pink-700",onClick:I},{default:E(()=>[R(a(t(y)("common.languageSelect.next")),1)]),_:1})])]),_:1},8,["open"])}}}),Et=je(Tt,[["__scopeId","data-v-88304e66"]]),Ft=`欢迎使用 ChatLab,它是一款**开源、本地化的聊天记录分析工具**。
2
+
3
+ 我们相信,你有权理解自己的社交数据。但聊天记录不只属于你,它同时承载着你朋友、家人、同事的话语与信任。因此,在使用本工具之前,请认真阅读以下条款。
4
+
5
+ ## 1. 核心功能与独立性
6
+
7
+ - **仅分析,不导出**:本工具仅用于对已导出的聊天记录进行分析。我们不提供任何解密、抓包或导出工具,从第三方聊天软件获取数据是你的个人行为。
8
+ - **第三方独立工具**:本项目为独立开源项目,**与任何聊天平台、公司或组织等无关联**。
9
+
10
+ ## 2. 数据隐私与安全
11
+
12
+ - **纯本地分析**:默认情况下,聊天记录的存储与分析均在你的设备本地完成,**零上传**。
13
+ - **AI 功能例外**:若你主动启用 AI 功能,相关聊天数据将发送至你配置的第三方模型服务商(如 OpenAI、DeepSeek 或其他服务商)。请在使用前自行评估数据的敏感程度,**避免发送高度私密的内容**。该第三方服务商的隐私政策独立于本项目,请自行查阅。
14
+ - **功能性联网**:应用会通过网络获取更新提示、使用说明及配置信息。此过程不会上传任何本地数据。
15
+ - **匿名使用统计**:为了优化产品,软件会收集**非敏感**的数据(如版本号、操作系统类型等)。这些数据不含任何个人信息,你可以在设置中随时关闭此功能。
16
+
17
+ ## 3. 数据授权与使用限制
18
+
19
+ 聊天记录中不只有你的数据——它同样包含对话另一方的内容。请在使用时遵守以下原则:
20
+
21
+ - **合法授权原则**:你仅可处理你**本人参与**的聊天记录。聊天记录中涉及的其他参与者同样拥有隐私权,若分析内容涉及特定个人隐私(**私聊对象、群聊成员**),请务必确保已获得相关人员的知情同意。
22
+ - **禁止非法用途**:
23
+ - **严禁**用于窃取、监控或分析未经授权的他人隐私。
24
+ - **严禁**分析通过非法手段(如非法入侵、账号窃取、数据劫持等)获取的聊天记录。
25
+ - **严禁**将分析结果用于骚扰、诈骗、人肉搜索或任何侵犯他人权益的行为。
26
+ - **严禁**利用本软件生成的分析内容(含 AI 生成内容)编造、传播虚假信息或误导性信息。
27
+
28
+ ## 4. 风险警告
29
+
30
+ - **官方渠道**:请仅通过 [chatlab.fun](https://chatlab.fun) 或 [GitHub Release](https://github.com/ChatLab/ChatLab/releases) 下载本软件。
31
+ - **供应链风险**:本项目代码完全开源,任何人均可二次打包。他人分享的非官方版本可能会植入恶意代码,导致你的 API Token、聊天记录或本地数据泄露,请务必保持警惕。
32
+ - **结果准确性**:软件和 AI 生成的分析结果可能存在错误或"幻觉",仅供参考,不应作为法律证据或正式决策依据。
33
+
34
+ ## 5. 免责声明
35
+
36
+ - **软件用途**:本软件仅供技术研究、学习与交流目的使用。
37
+ - **平台合规性**:用户需自行承担获取聊天记录行为的合规性。若因分析行为违反了原始数据来源平台的服务条款而导致账号受限,作者不承担任何责任。
38
+ - **隐私责任**:若因你对本工具的使用方式侵犯了他人隐私权或其他合法权益,相关责任由你自行承担。
39
+ - **责任自负**:使用本软件产生的一切后果(包括但不限于数据丢失、隐私纠纷、法律责任)均由用户自行承担。
40
+ - **适用法律**:本声明适用你所在司法管辖区的相关法律。如本声明与当地强制性法律规定存在冲突,以当地法律为准。
41
+ - **接受声明**:下载、安装或使用本软件,即表示你已阅读、理解并同意本声明的所有条款。如不同意,请立即停止使用并删除相关程序。
42
+
43
+ 修订日期:2026-03-14
44
+ `,$e=`Welcome to ChatLab, an **open-source, local-first tool for analyzing chat records**.
45
+
46
+ We believe you should be able to understand your own social data. But chat histories do not belong to you alone; they also carry the words and trust of your friends, family, and colleagues. Please read the following terms carefully before using this tool.
47
+
48
+ ## 1. Core Functionality & Independence
49
+
50
+ - **Analysis Only, No Exporting**: This tool is intended only for analyzing chat records that have already been exported. We do not provide any decryption, packet capture, or export tools. Obtaining data from third-party chat platforms is your own action and responsibility.
51
+ - **Independent Third-Party Tool**: This project is an independent open-source project and **is not affiliated with any chat platform, company, or organization**.
52
+
53
+ ## 2. Data Privacy & Security
54
+
55
+ - **Purely Local Analysis**: By default, chat records are stored and analyzed entirely on your device with **zero uploads**.
56
+ - **AI Feature Exception**: If you choose to enable AI features, relevant chat data will be sent to the third-party model provider you configure (such as OpenAI, DeepSeek, or another provider). Before using this feature, assess how sensitive your data is and **avoid sending highly private content**. The privacy practices of that third-party provider are independent from this project, so please review their policies yourself.
57
+ - **Functional Networking**: The app connects to the internet to fetch update notices, usage instructions, and configuration data. No local data is uploaded in this process.
58
+ - **Anonymous Usage Statistics**: To improve the product, the app may collect **non-sensitive** data (such as version numbers and operating system type). This data does not include personal information, and you can disable this feature at any time in Settings.
59
+
60
+ ## 3. Data Authorization & Usage Restrictions
61
+
62
+ Chat histories do not contain only your data. They also include what the other people in the conversation said. Please follow these principles when using this tool:
63
+
64
+ - **Lawful Authorization Principle**: You may only process chat records in which you **personally participated**. Other participants in those conversations also have privacy rights. If your analysis involves the privacy of identifiable individuals, especially **private chat contacts or group members**, you must ensure that you have obtained their informed consent.
65
+ - **Forbidden Uses**:
66
+ - It is **strictly prohibited** to use this tool to steal, monitor, or analyze another person's private information without authorization.
67
+ - It is **strictly prohibited** to analyze chat records obtained through illegal means, including unauthorized intrusion, account theft, or data hijacking.
68
+ - It is **strictly prohibited** to use analysis results for harassment, fraud, doxing, or any other conduct that infringes on the rights of others.
69
+ - It is **strictly prohibited** to use analysis content generated by this software, including AI-generated content, to fabricate or spread false or misleading information.
70
+
71
+ ## 4. Risk Warning
72
+
73
+ - **Official Channels**: Please download this software only from [chatlab.fun](https://chatlab.fun) or [GitHub Releases](https://github.com/ChatLab/ChatLab/releases).
74
+ - **Supply Chain Risk**: This project is fully open-source, so anyone can repackage it. Unofficial versions shared by others may contain malicious code that could expose your API tokens, chat records, or local data. Please stay vigilant.
75
+ - **Accuracy of Results**: Analysis results generated by the software or AI may contain errors or hallucinations. They are for reference only and should not be used as legal evidence or as the basis for formal decisions.
76
+
77
+ ## 5. Disclaimer
78
+
79
+ - **Software Purpose**: This software is provided for technical research, learning, and communication purposes only.
80
+ - **Platform Compliance**: You are solely responsible for ensuring that your acquisition and analysis of chat records complies with the terms of the original platform. The author assumes no liability if your account is restricted because your actions violate those terms.
81
+ - **Privacy Responsibility**: If the way you use this tool infringes another person's privacy or other lawful rights, you are solely responsible for the consequences.
82
+ - **Sole Responsibility**: All consequences arising from the use of this software, including but not limited to data loss, privacy disputes, and legal liability, are your sole responsibility.
83
+ - **Applicable Law**: This statement is governed by the laws applicable in your jurisdiction. If any part of this statement conflicts with mandatory local law, the local law shall prevail.
84
+ - **Acceptance of Statement**: By downloading, installing, or using this software, you acknowledge that you have read, understood, and agreed to all terms of this statement. If you do not agree, please stop using the software immediately and delete all related files.
85
+
86
+ Last Updated: March 14, 2026
87
+ `,$t=`歡迎使用 ChatLab。這是一款**開源、以本機優先的聊天紀錄分析工具**。
88
+
89
+ 我們相信,你有權理解自己的社交資料。但聊天紀錄不只屬於你,也承載著朋友、家人、同事的話語與信任。因此,在使用本工具前,請先仔細閱讀以下條款。
90
+
91
+ ## 1. 核心功能與獨立性
92
+
93
+ - **僅分析,不提供匯出能力**:本工具僅用於分析你已自行匯出的聊天紀錄。我們不提供任何解密、抓包或匯出工具;從第三方聊天平台取得資料屬於你自己的行為與責任。
94
+ - **獨立第三方工具**:本專案為獨立開源專案,**與任何聊天平台、公司或組織皆無關聯**。
95
+
96
+ ## 2. 資料隱私與安全
97
+
98
+ - **純本機分析**:預設情況下,聊天紀錄的儲存與分析都在你的裝置本機完成,**零上傳**。
99
+ - **AI 功能例外**:若你主動啟用 AI 功能,相關聊天資料會傳送至你設定的第三方模型服務商(如 OpenAI、DeepSeek 或其他服務商)。使用前請自行評估資料的敏感程度,**避免傳送高度私密的內容**。該第三方服務商的隱私政策獨立於本專案,請自行查閱。
100
+ - **功能性連網**:應用程式會透過網路取得更新通知、使用說明及設定資訊。此過程不會上傳任何本機資料。
101
+ - **匿名使用統計**:為了改善產品,軟體可能收集**非敏感**資料(如版本號、作業系統類型等)。這些資料不包含任何個人資訊,你也可以在設定中隨時關閉此功能。
102
+
103
+ ## 3. 資料授權與使用限制
104
+
105
+ 聊天紀錄中不只有你的資料,也包含對話另一方的內容。使用本工具時,請遵守以下原則:
106
+
107
+ - **合法授權原則**:你僅可處理你**本人參與**的聊天紀錄。聊天紀錄中的其他參與者同樣享有隱私權;若分析內容涉及特定個人的隱私,尤其是**私聊對象或群聊成員**,請務必先取得相關人士的知情同意。
108
+ - **禁止非法用途**:
109
+ - **嚴禁**用於竊取、監控或分析未經授權的他人隱私。
110
+ - **嚴禁**分析透過非法手段(如非法入侵、帳號竊取、資料劫持等)取得的聊天記錄。
111
+ - **嚴禁**將分析結果用於騷擾、詐騙、人肉搜尋或任何侵犯他人權益的行為。
112
+ - **嚴禁**利用本軟體產生的分析內容(含 AI 產生內容)編造、傳播虛假資訊或誤導性資訊。
113
+
114
+ ## 4. 風險警告
115
+
116
+ - **官方下載管道**:請僅透過 [chatlab.fun](https://chatlab.fun) 或 [GitHub Releases](https://github.com/ChatLab/ChatLab/releases) 下載本軟體。
117
+ - **供應鏈風險**:本專案程式碼完全開源,任何人都可再次打包。非官方版本可能植入惡意程式碼,導致你的 API Token、聊天紀錄或本機資料外洩,請務必提高警覺。
118
+ - **結果準確性**:軟體與 AI 產生的分析結果可能有誤或出現「幻覺」,僅供參考,不應作為法律證據或正式決策依據。
119
+
120
+ ## 5. 免責聲明
121
+
122
+ - **軟體用途**:本軟體僅供技術研究、學習與交流使用。
123
+ - **平台合規性**:取得聊天紀錄行為的合規性由使用者自行負責。若分析行為違反原始資料來源平台的服務條款,導致帳號受限或其他後果,作者不承擔任何責任。
124
+ - **隱私責任**:若你對本工具的使用方式侵犯了他人的隱私權或其他合法權益,相關責任由你自行承擔。
125
+ - **責任自負**:使用本軟體所產生的一切後果,包括但不限於資料遺失、隱私糾紛或法律責任,均由使用者自行承擔。
126
+ - **適用法律**:本聲明適用你所在司法管轄區的相關法律;若本聲明與當地強制性法律規定牴觸,應以當地法律為準。
127
+ - **接受聲明**:下載、安裝或使用本軟體,即表示你已閱讀、理解並同意本聲明全部內容;若不同意,請立即停止使用並刪除相關程式。
128
+
129
+ 修訂日期:2026-03-14
130
+ `,Ut=`ChatLab へようこそ。ChatLab は、**オープンソースかつローカル完結型のチャット履歴分析ツール**です。
131
+
132
+ 私たちは、あなたが自分のソーシャルデータを理解する権利を尊重しています。ただし、チャット履歴はあなただけのものではなく、友人、家族、同僚の言葉や信頼も含んでいます。本ツールを利用する前に、以下の内容をよくお読みください。
133
+
134
+ ## 1. コア機能と独立性
135
+
136
+ - **分析専用で、取得機能は提供しません**:本ツールは、すでにエクスポート済みのチャット履歴を分析するためのものです。復号、パケットキャプチャ、エクスポートツールは提供していません。第三者のチャットプラットフォームからデータを取得する行為は、利用者自身の判断と責任で行ってください。
137
+ - **独立した第三者ツールです**:本プロジェクトは独立したオープンソースプロジェクトであり、**いかなるチャットプラットフォーム、企業、団体とも関係ありません**。
138
+
139
+ ## 2. データのプライバシーとセキュリティ
140
+
141
+ - **ローカル完結の分析**:初期設定では、チャット履歴の保存と分析はすべて端末内で行われ、**外部へアップロードされません**。
142
+ - **AI 機能利用時の例外**:AI 機能を有効にした場合、関連するチャットデータは、利用者が設定した外部モデル提供事業者(OpenAI、DeepSeek、その他の事業者など)に送信されます。利用前にデータの機微性を十分に確認し、**特に私的性の高い内容は送信しないでください**。当該事業者のプライバシーポリシーは本プロジェクトとは別に定められているため、各自で確認してください。
143
+ - **機能上必要な通信**:アプリは、更新案内、利用ガイド、設定情報を取得するために通信を行います。この過程でローカルデータが送信されることはありません。
144
+ - **匿名の利用統計**:製品改善のため、バージョン番号や OS 種別などの**非機微情報**を収集する場合があります。これらのデータには個人情報は含まれず、設定画面からいつでも無効にできます。
145
+
146
+ ## 3. データ利用の範囲と制限
147
+
148
+ チャット履歴に含まれるのは、あなたのデータだけではありません。会話相手の発言や情報も含まれます。本ツールを利用する際は、以下の原則を守ってください。
149
+
150
+ - **正当な権限があるデータのみ扱ってください**:処理できるのは、**自分が参加した**チャット履歴に限られます。その履歴に含まれる他の参加者にもプライバシー権があります。分析対象が特定の個人のプライバシー、特に**個人チャットの相手やグループチャットの参加者**に及ぶ場合は、必ず事前に十分な説明と同意を得てください。
151
+ - **禁止される用途**:
152
+ - 他者の未承認のプライバシーを窃取、監視、または分析する目的での使用は**厳禁**です。
153
+ - 違法な手段(不正アクセス、アカウント窃取、データハイジャックなど)で取得したチャット記録の分析は**厳禁**です。
154
+ - 分析結果を嫌がらせ、詐欺、晒し行為(人肉検索)、または他者の権利を侵害するいかなる行為に使用することは**厳禁**です。
155
+ - 本ソフトウェアが生成した分析コンテンツ(AI 生成コンテンツを含む)を使用して、虚偽または誤解を招く情報を捏造または拡散することは**厳禁**です。
156
+
157
+ ## 4. 注意事項
158
+
159
+ - **公式配布元のみ利用してください**:本ソフトウェアは [chatlab.fun](https://chatlab.fun) または [GitHub Releases](https://github.com/ChatLab/ChatLab/releases) からのみ入手してください。
160
+ - **サプライチェーンリスクに注意してください**:本プロジェクトは完全オープンソースのため、第三者が再配布版を作成できます。非公式版には悪意あるコードが含まれる可能性があり、API トークン、チャット履歴、ローカルデータの漏えいにつながるおそれがあります。
161
+ - **結果の正確性は保証されません**:ソフトウェアや AI が生成する分析結果には、誤りやハルシネーションが含まれる可能性があります。参考情報として扱い、法的証拠や正式な判断材料には使用しないでください。
162
+
163
+ ## 5. 免責事項
164
+
165
+ - **利用目的**:本ソフトウェアは、技術研究、学習、交流を目的として提供されています。
166
+ - **各プラットフォームの規約遵守は利用者の責任です**:チャット履歴の取得や分析が、元のサービスの利用規約に抵触した結果としてアカウント制限などが発生しても、作者は責任を負いません。
167
+ - **プライバシー侵害に関する責任**:本ツールの利用方法によって他者のプライバシー権その他の適法な権利を侵害した場合、その責任は利用者自身が負います。
168
+ - **利用は自己責任です**:本ソフトウェアの利用によって生じたいかなる結果も、利用者自身の責任となります。これにはデータ損失、プライバシー上の争い、法的責任などが含まれます。
169
+ - **準拠法**:本声明には、利用者が所在する法域で適用される法令が適用されます。本声明の内容が現地の強行法規と抵触する場合は、当該法令が優先されます。
170
+ - **本声明への同意**:本ソフトウェアをダウンロード、インストール、または使用した時点で、本声明の内容を読み、理解し、同意したものとみなされます。同意できない場合は、直ちに使用を中止し、関連ファイルを削除してください。
171
+
172
+ 改訂日:2026年3月14日
173
+ `,Dt={class:"agreement-modal flex max-h-[85vh] flex-col p-6"},Nt={class:"mb-4 flex items-center gap-3"},Rt={class:"flex h-12 w-12 items-center justify-center rounded-xl bg-linear-to-br from-pink-100 to-rose-100 dark:from-pink-900/30 dark:to-rose-900/30"},zt={class:"text-xl font-bold text-gray-900 dark:text-white"},jt={class:"text-sm text-gray-500 dark:text-gray-400"},Ot={class:"mb-6 flex-1 overflow-y-auto pr-4"},Bt=["innerHTML"],Vt={class:"flex items-center justify-end gap-3 border-t border-gray-200 pt-4 dark:border-gray-700"},ke="2.0",ge="chatlab_agreement_version",Ht=Q({__name:"AgreementModal",setup(x,{expose:s}){const{t:n}=K(),y=fe(),{locale:i}=ve(y),g=w(!1),d=w(!1),c=new wt({html:!1,breaks:!0,linkify:!0,typographer:!0});c.renderer.rules.link_open=(A,h,$,L,S)=>(A[h].attrSet("target","_blank"),A[h].attrSet("rel","noopener noreferrer"),S.renderToken(A,h,$));const I={"zh-CN":Ft,"zh-TW":$t,"en-US":$e,"ja-JP":Ut},v=B(()=>I[i.value]??$e),u=B(()=>c.render(v.value));function k(){localStorage.setItem(ge,ke),g.value=!1}function P(){localStorage.removeItem(ge),window.api?.send?.("window-close")}function b(){const A=localStorage.getItem(ge);A&&A!==ke&&(d.value=!0),g.value=!0}function F(){return localStorage.getItem(ge)!==ke}return s({open:b,needsAgreement:F}),(A,h)=>{const $=se,L=rt,S=X,C=le;return o(),N(C,{open:g.value,"prevent-close":"",ui:{content:"md:w-full max-w-2xl",overlay:"backdrop-blur-sm"}},{content:E(()=>[e("div",Dt,[e("div",Nt,[e("div",Rt,[m($,{name:"i-heroicons-document-text",class:"h-6 w-6 text-pink-600 dark:text-pink-400"})]),e("div",null,[e("h2",zt,a(t(n)("common.agreement.title")),1),e("p",jt,a(t(n)("common.agreement.subtitle")),1)])]),d.value?(o(),N(L,{key:0,icon:"i-heroicons-exclamation-triangle",title:t(n)("common.agreement.updateNotice"),class:"mb-4 pt-2"},null,8,["title"])):D("",!0),e("div",Ot,[e("div",{class:"agreement-content",innerHTML:u.value},null,8,Bt)]),e("div",Vt,[m(S,{variant:"ghost",color:"neutral",size:"lg",onClick:P},{default:E(()=>[R(a(t(n)("common.agreement.disagree")),1)]),_:1}),m(S,{color:"primary",size:"lg",class:"bg-pink-500 hover:bg-pink-600 dark:bg-pink-600 dark:hover:bg-pink-700",onClick:k},{default:E(()=>[R(a(t(n)("common.agreement.agree")),1)]),_:1})])])]),_:1},8,["open"])}}}),qt=je(Ht,[["__scopeId","data-v-af4bfd14"]]),Gt={class:"p-6 text-center"},Qt={class:"mb-2 text-lg font-semibold text-gray-900 dark:text-white"},Kt={key:0,class:"mb-3 text-sm text-gray-500 dark:text-gray-400"},Jt={key:1,class:"mb-4 rounded-lg bg-gray-50 p-3 text-left dark:bg-gray-800"},Yt={class:"mb-2 text-xs font-medium text-gray-500 dark:text-gray-400"},Zt={class:"space-y-2"},Xt={class:"text-sm text-gray-700 dark:text-gray-300"},es={class:"text-xs text-gray-400 dark:text-gray-500"},ts={key:2,class:"mb-4 rounded-lg bg-red-50 p-3 text-left text-sm text-red-600 dark:bg-red-900/20 dark:text-red-400"},ss={class:"flex flex-col gap-2"},as={class:"flex items-start gap-2"},os={class:"text-xs text-red-500 dark:text-red-400"},is={class:"flex gap-3"},ns=Q({__name:"MigrationModal",setup(x){const{t:s}=K(),n=xe(),{migrationCount:y,pendingMigrations:i,isMigrating:g}=ve(n),d=w(!1),c=w(null),I=w(!1),v=B(()=>c.value!==null);async function u(){c.value=null,I.value=!1;const P=await n.runMigration();P.success?(d.value=!1,await n.loadSessions()):(c.value=P.error||s("home.migration.failed"),I.value=!0,await n.loadSessions())}function k(){v.value&&(d.value=!1)}return de(async()=>{(await n.checkMigration()).needsMigration&&(d.value=!0)}),(P,b)=>{const F=se,A=X,h=le;return o(),N(h,{open:d.value,ui:{content:"max-w-md"},"prevent-close":!v.value},{content:E(()=>[e("div",Gt,[e("div",{class:z(["mx-auto mb-4 flex h-14 w-14 items-center justify-center rounded-full",c.value?"bg-amber-100 dark:bg-amber-900/30":"bg-blue-100 dark:bg-blue-900/30"])},[m(F,{name:c.value?"i-heroicons-exclamation-triangle":"i-heroicons-arrow-up-circle",class:z(c.value?"h-7 w-7 text-amber-500":"h-7 w-7 text-blue-500")},null,8,["name","class"])],2),e("h3",Qt,a(c.value?t(s)("home.migration.partialFailed"):t(s)("home.migration.title")),1),c.value?D("",!0):(o(),p("p",Kt,[R(a(t(s)("home.migration.description",{count:t(y)}))+" ",1),b[0]||(b[0]=e("br",null,null,-1)),R(" "+a(t(s)("home.migration.note")),1)])),t(i).length>0&&!c.value?(o(),p("div",Jt,[e("p",Yt,a(t(s)("home.migration.upgradeContent")),1),e("ul",Zt,[(o(!0),p(V,null,Z(t(i),$=>(o(),p("li",{key:$.version,class:"flex items-start gap-2"},[m(F,{name:"i-heroicons-check-circle",class:"mt-0.5 h-4 w-4 shrink-0 text-green-500"}),e("div",null,[e("p",Xt,a($.userMessage),1),e("p",es,a($.description),1)])]))),128))])])):D("",!0),c.value?(o(),p("div",ts,[e("div",ss,[e("div",as,[m(F,{name:"i-heroicons-exclamation-circle",class:"mt-0.5 h-4 w-4 shrink-0"}),e("span",null,a(c.value),1)]),e("p",os,a(t(s)("home.migration.errorHint")),1)])])):D("",!0),e("div",is,[v.value?(o(),N(A,{key:0,color:"neutral",variant:"outline",size:"lg",class:"flex-1",onClick:k},{default:E(()=>[R(a(t(s)("home.migration.close")),1)]),_:1})):D("",!0),m(A,{color:"primary",size:"lg",loading:t(g),class:z(v.value?"flex-1":"w-full"),onClick:u},{default:E(()=>[R(a(t(g)?t(s)("home.migration.upgrading"):c.value?t(s)("home.migration.retry"):t(s)("home.migration.upgradeNow")),1)]),_:1},8,["loading","class"])])])]),_:1},8,["open","prevent-close"])}}}),rs={class:"min-w-0 flex-1"},cs={class:"truncate text-sm font-medium text-gray-900 dark:text-white"},ls={key:0,class:"text-xs text-gray-500 dark:text-gray-400"},ds={class:"text-xs text-gray-400"},_e=Q({__name:"FileListItem",props:{name:{},statusIcon:{},statusClass:{},progressText:{},index:{},total:{},highlight:{type:Boolean}},setup(x){return(s,n)=>{const y=se;return o(),p("div",{class:z(["flex items-center gap-3 rounded-lg px-3 py-2 transition-colors",{"bg-pink-50/50 dark:bg-pink-500/5":x.highlight}])},[m(y,{name:x.statusIcon,class:z(["h-5 w-5 shrink-0",x.statusClass])},null,8,["name","class"]),e("div",rs,[e("p",cs,a(x.name),1),x.progressText?(o(),p("p",ls,a(x.progressText),1)):D("",!0),Ee(s.$slots,"extra")]),e("span",ds,a(x.index+1)+"/"+a(x.total),1),Ee(s.$slots,"action")],2)}}}),ms={class:"min-h-[200px]"},ps={key:0,class:"flex flex-col items-center justify-center py-12"},us={class:"text-gray-500 dark:text-gray-400"},hs={key:1,class:"flex flex-col items-center justify-center py-12"},gs={class:"text-red-600 dark:text-red-400"},ys={key:2},fs={class:"mb-2 flex items-center justify-between"},vs={class:"flex items-center gap-2"},xs={class:"text-xs text-gray-400"},bs={key:0,class:"text-sm font-medium text-pink-600 dark:text-pink-400"},Is={class:"max-h-[420px] space-y-0.5 overflow-y-auto pr-1"},As=["onClick"],ws={class:"min-w-0 flex-1"},ks={class:"truncate text-sm font-medium text-gray-900 dark:text-white"},_s={class:"text-xs text-gray-500 dark:text-gray-400"},Cs={key:3,class:"flex flex-col items-center justify-center py-12"},Ls={class:"text-gray-500 dark:text-gray-400"},Ss={class:"flex w-full justify-end gap-2"},Ps=Q({__name:"ChatSelector",props:{open:{type:Boolean},filePath:{}},emits:["update:open","select"],setup(x,{emit:s}){const n=x,y=s,{t:i}=K(),g=B({get:()=>n.open,set:S=>y("update:open",S)}),d=w([]),c=w(!1),I=w(null),v=w(new Set),u=B(()=>v.value.size),k=B(()=>d.value.length>0&&v.value.size===d.value.length);function P(S){const C=S.toLowerCase();return C.includes("personal")||C.includes("private_chat")||C.includes("bot")||C.includes("saved")?"i-heroicons-user":C.includes("group")||C.includes("supergroup")||C.includes("channel")?"i-heroicons-user-group":"i-heroicons-chat-bubble-left-right"}function b(S){return S.replace(/_/g," ").replace(/\b\w/g,C=>C.toUpperCase())}async function F(){c.value=!0,I.value=null,d.value=[],v.value=new Set;try{const S=await ie().scanMultiChatFile(n.filePath);S.length>0?d.value=S:I.value=i("home.chatSelector.scanFailed")}catch(S){I.value=String(S)}finally{c.value=!1}}pe(()=>n.open,S=>{S&&n.filePath&&F()});function A(S){const C=new Set(v.value);C.has(S)?C.delete(S):C.add(S),v.value=C}function h(){k.value?v.value=new Set:v.value=new Set(d.value.map(S=>S.index))}function $(){const S=d.value.filter(C=>v.value.has(C.index));g.value=!1,y("select",S)}function L(){g.value=!1}return(S,C)=>{const ee=se,j=X,H=Re,ce=le;return o(),N(ce,{open:g.value,"onUpdate:open":C[1]||(C[1]=_=>g.value=_),title:t(i)("home.chatSelector.title")},{body:E(()=>[e("div",ms,[c.value?(o(),p("div",ps,[m(ee,{name:"i-heroicons-arrow-path",class:"mb-4 h-8 w-8 animate-spin text-pink-500"}),e("p",us,a(t(i)("home.chatSelector.scanning")),1)])):I.value?(o(),p("div",hs,[m(ee,{name:"i-heroicons-exclamation-circle",class:"mb-4 h-8 w-8 text-red-500"}),e("p",gs,a(I.value),1),m(j,{class:"mt-4",size:"sm",variant:"soft",onClick:F},{default:E(()=>[R(a(t(i)("home.chatSelector.retry")),1)]),_:1})])):d.value.length>0?(o(),p("div",ys,[e("div",fs,[e("div",vs,[m(H,{"model-value":k.value,label:t(i)("home.chatSelector.selectAll"),size:"sm","onUpdate:modelValue":h},null,8,["model-value","label"]),e("span",xs," ("+a(t(i)("home.chatSelector.chatCount",{count:d.value.length}))+") ",1)]),u.value>0?(o(),p("span",bs,a(t(i)("home.chatSelector.selected",{count:u.value})),1)):D("",!0)]),e("div",Is,[(o(!0),p(V,null,Z(d.value,_=>(o(),p("div",{key:_.index,class:z(["flex cursor-pointer items-center gap-2 rounded-lg px-2.5 py-1.5 transition-colors",v.value.has(_.index)?"bg-pink-50 dark:bg-pink-500/10":"hover:bg-gray-100 dark:hover:bg-gray-800"]),onClick:M=>A(_.index)},[m(H,{"model-value":v.value.has(_.index),size:"sm",onClick:C[0]||(C[0]=yt(()=>{},["stop"]))},null,8,["model-value"]),e("div",{class:z(["flex h-7 w-7 shrink-0 items-center justify-center rounded-md",v.value.has(_.index)?"bg-pink-100 dark:bg-pink-500/20":"bg-gray-100 dark:bg-gray-700"])},[m(ee,{name:P(_.type),class:z(["h-3.5 w-3.5",v.value.has(_.index)?"text-pink-600 dark:text-pink-400":"text-gray-500 dark:text-gray-400"])},null,8,["name","class"])],2),e("div",ws,[e("p",ks,a(_.name||`Chat ${_.id}`),1),e("p",_s,a(b(_.type))+" · "+a(t(i)("home.chatSelector.messageCount",{count:_.messageCount.toLocaleString()})),1)])],10,As))),128))])])):(o(),p("div",Cs,[m(ee,{name:"i-heroicons-chat-bubble-left-right",class:"mb-4 h-8 w-8 text-gray-400"}),e("p",Ls,a(t(i)("home.chatSelector.noChats")),1)]))])]),footer:E(()=>[e("div",Ss,[m(j,{variant:"ghost",color:"neutral",onClick:L},{default:E(()=>[R(a(t(i)("common.cancel")),1)]),_:1}),m(j,{disabled:u.value===0,onClick:$},{default:E(()=>[R(a(t(i)("home.chatSelector.import",{count:u.value})),1)]),_:1},8,["disabled"])])]),_:1},8,["open","title"])}}}),Ws={class:"min-h-[200px]"},Ms={class:"mb-3 text-sm text-gray-500 dark:text-gray-400"},Ts={key:0,class:"flex items-center justify-center py-12"},Es={key:1,class:"max-h-[400px] space-y-3 overflow-y-auto pr-1"},Fs={class:"mb-1 flex items-center gap-1.5 px-1"},$s={class:"text-xs font-medium text-gray-400 uppercase"},Us={class:"space-y-0.5"},Ds=["onClick"],Ns={class:"min-w-0 flex-1"},Rs={class:"text-sm font-medium text-gray-900 dark:text-white"},zs={class:"text-xs text-gray-400"},js={class:"flex w-full justify-end gap-2"},Os=Q({__name:"FormatSelectorModal",props:{open:{type:Boolean},filePath:{}},emits:["update:open","select"],setup(x,{emit:s}){const n=x,y=s,{t:i}=K(),g=B({get:()=>n.open,set:A=>y("update:open",A)}),d=w([]),c=w(!1),I=w(null),v=new Set(["whatsapp","line","unknown"]),u=B(()=>{const A=new Map;for(const h of d.value){if(!v.has(h.platform))continue;const $=A.get(h.platform)??[];$.push(h),A.set(h.platform,$)}return A});function k(A){const h=A.toLowerCase();return h.includes("whatsapp")?"i-simple-icons-whatsapp":h.includes("telegram")?"i-simple-icons-telegram":h.includes("line")?"i-simple-icons-line":h.includes("qq")?"i-simple-icons-tencentqq":h.includes("wechat")||h.includes("weixin")?"i-simple-icons-wechat":h.includes("discord")?"i-simple-icons-discord":h.includes("instagram")?"i-simple-icons-instagram":(h.includes("chatlab"),"i-heroicons-chat-bubble-left-right")}async function P(){c.value=!0;try{const A=await ie().getSupportedFormats();d.value=A}catch{d.value=[]}finally{c.value=!1}}pe(()=>n.open,A=>{A&&(I.value=null,P())});function b(){I.value&&(g.value=!1,y("select",I.value))}function F(){g.value=!1}return(A,h)=>{const $=se,L=X,S=le;return o(),N(S,{open:g.value,"onUpdate:open":h[0]||(h[0]=C=>g.value=C),title:t(i)("home.formatSelector.title")},{body:E(()=>[e("div",Ws,[e("p",Ms,a(t(i)("home.formatSelector.hint")),1),c.value?(o(),p("div",Ts,[m($,{name:"i-heroicons-arrow-path",class:"h-6 w-6 animate-spin text-pink-500"})])):(o(),p("div",Es,[(o(!0),p(V,null,Z(u.value,([C,ee])=>(o(),p("div",{key:C},[e("div",Fs,[m($,{name:k(C),class:"h-3.5 w-3.5 text-gray-400"},null,8,["name"]),e("span",$s,a(C),1)]),e("div",Us,[(o(!0),p(V,null,Z(ee,j=>(o(),p("div",{key:j.id,class:z(["flex cursor-pointer items-center gap-2.5 rounded-lg px-2.5 py-2 transition-colors",I.value===j.id?"bg-pink-50 ring-1 ring-pink-200 dark:bg-pink-500/10 dark:ring-pink-500/30":"hover:bg-gray-100 dark:hover:bg-gray-800"]),onClick:H=>I.value=j.id},[e("div",{class:z(["flex h-5 w-5 shrink-0 items-center justify-center rounded-full border-2 transition-colors",I.value===j.id?"border-pink-500 bg-pink-500":"border-gray-300 dark:border-gray-600"])},[I.value===j.id?(o(),N($,{key:0,name:"i-heroicons-check-20-solid",class:"h-3 w-3 text-white"})):D("",!0)],2),e("div",Ns,[e("p",Rs,a(j.name),1),e("p",zs,a(j.extensions.join(", ")),1)])],10,Ds))),128))])]))),128))]))])]),footer:E(()=>[e("div",js,[m(L,{variant:"ghost",color:"neutral",onClick:F},{default:E(()=>[R(a(t(i)("common.cancel")),1)]),_:1}),m(L,{disabled:!I.value,onClick:b},{default:E(()=>[R(a(t(i)("home.formatSelector.confirm")),1)]),_:1},8,["disabled"])])]),_:1},8,["open","title"])}}}),Bs={class:"w-full flex flex-col items-center space-y-6"},Vs={key:0,class:"w-full max-w-4xl rounded-3xl border border-gray-200/50 bg-gray-100/50 px-8 py-6 backdrop-blur-md dark:border-white/10 dark:bg-gray-800/40"},Hs={class:"mb-4 flex items-center justify-between"},qs={class:"flex items-center gap-3"},Gs={class:"flex h-10 w-10 items-center justify-center rounded-xl bg-pink-50 dark:bg-pink-500/10"},Qs={class:"text-lg font-semibold text-gray-900 dark:text-white"},Ks={class:"text-sm text-gray-500 dark:text-gray-400"},Js={class:"max-h-52 space-y-2 overflow-y-auto"},Ys={key:1,class:"w-full max-w-4xl rounded-3xl border border-gray-200/50 bg-gray-100/50 px-8 py-6 backdrop-blur-md dark:border-white/10 dark:bg-gray-800/40"},Zs={class:"mb-4 flex items-center justify-between"},Xs={class:"flex items-center gap-3"},ea={class:"flex h-10 w-10 items-center justify-center rounded-xl bg-pink-50 dark:bg-pink-500/10"},ta={class:"text-lg font-semibold text-gray-900 dark:text-white"},sa={class:"text-sm text-gray-500 dark:text-gray-400"},aa={class:"max-h-52 space-y-2 overflow-y-auto"},oa={key:2,class:"w-full max-w-4xl rounded-3xl border border-gray-200/50 bg-gray-100/50 px-8 py-6 backdrop-blur-md dark:border-white/10 dark:bg-gray-800/40"},ia={class:"flex items-center justify-between"},na={class:"flex items-center gap-3"},ra={class:"flex h-10 w-10 items-center justify-center rounded-xl bg-green-50 dark:bg-green-500/10"},ca={class:"text-lg font-semibold text-gray-900 dark:text-white"},la={class:"text-sm text-gray-500 dark:text-gray-400"},da={class:"flex items-center gap-2"},ma={key:3,class:"w-full max-w-4xl rounded-3xl border border-gray-200/50 bg-gray-100/50 px-8 py-6 backdrop-blur-md dark:border-white/10 dark:bg-gray-800/40"},pa={class:"mb-4 flex items-center justify-between"},ua={class:"flex items-center gap-3"},ha={class:"text-lg font-semibold text-gray-900 dark:text-white"},ga={class:"text-sm text-gray-500 dark:text-gray-400"},ya={class:"max-h-52 space-y-2 overflow-y-auto"},fa={key:0,class:"text-xs text-red-500"},va={key:1,class:"text-xs text-gray-500"},xa={class:"w-full min-w-80 text-center"},ba={class:"mb-4 text-lg font-semibold text-gray-900 dark:text-white"},Ia={class:"mx-auto w-full max-w-md"},Aa={class:"mt-3 text-sm text-gray-500 dark:text-gray-400"},wa={class:"text-lg font-semibold text-gray-900 dark:text-white"},ka={class:"mt-3 text-sm text-gray-500 dark:text-gray-400"},_a={key:5,class:"h-6 flex flex-wrap items-center justify-center gap-4"},Ca={class:"flex items-center gap-2"},La={class:"max-w-xs px-3 py-2 text-xs text-gray-600 dark:text-gray-300"},Sa={key:6,class:"flex max-w-lg flex-col items-center gap-3 rounded-lg bg-red-50 px-4 py-4 dark:bg-red-900/20"},Pa={class:"flex items-center gap-2 text-sm text-red-600 dark:text-red-400"},Wa={key:0,class:"w-full rounded-md bg-gray-100 px-3 py-2 text-xs text-gray-700 dark:bg-gray-800 dark:text-gray-300"},Ma={class:"flex items-start gap-2"},Ta={class:"space-y-1"},Ea={key:0},Fa={key:1,class:"text-xs text-gray-500 dark:text-gray-400"},$a={class:"flex gap-2"},Ua=Q({__name:"ImportArea",setup(x){const{t:s}=K(),n=xe(),{isImporting:y,importProgress:i,isBatchImporting:g,batchFiles:d,batchImportResult:c,isMergeImporting:I,mergeFiles:v,mergeStage:u,mergeError:k,mergeResult:P}=ve(n),b=w(!1),F=w(""),A=w(!1),h=w("");async function $(l){try{const f=Oe();await Be().generate(l,f)}catch(f){console.error("自动生成会话索引失败:",f)}}const L=w(null),S=w(!1),C=w(null),ee=ze(),j=w(!1),H=B(()=>y.value||g.value||I.value),ce=B(()=>{if(!g.value||d.value.length===0)return null;const l=d.value.filter(r=>r.status==="success"||r.status==="failed"||r.status==="cancelled").length,f=d.value.findIndex(r=>r.status==="importing");return{completed:l,total:d.value.length,currentIndex:f}});function _(l){if(l.startsWith("error.")){const f=`home.import.errors.${l.slice(6)}`,r=s(f);return r!==f?r:l}return l}async function M(l){const f=await Ve().getSession(l);if(f){const r=f.type==="private"?"private-chat":"group-chat";ee.push({name:r,params:{id:l}})}}const q=w(null),ae=w(!1);async function me(){if(L.value=null,S.value=!1,C.value=null,ae.value){Ge();return}q.value?.openFileDialog()}async function O({files:l,paths:f}){L.value=null,S.value=!1,C.value=null,l.length>0?await J(l):L.value=s("home.import.cannotReadPath")}async function J(l){const f=ie();if(l.length===1){const r=l[0],T=await f.detectFormat(r);if(T?.multiChat){G.value=r;const U=await f.scanMultiChatFile(r);if(U.length>0){ue.value=U.map(Y=>({index:Y.index,name:Y.name,type:Y.type,id:Y.id,messageCount:Y.messageCount})),b.value=!0;return}}T||(he.value=r,h.value=r.name),await re(r)}else for(const r of l)await re(r)}const G=w(null),ue=w([]);async function re(l,f){y.value=!0,i.value={stage:"detecting",progress:0,message:""};try{const r=await ie().importFile(l,f,T=>{T.stage!=="done"&&(i.value=T)});i.value&&(i.value.progress=100),await new Promise(T=>setTimeout(T,300)),r.success&&r.sessionId?(await n.loadSessions(),n.selectSession(r.sessionId),await M(r.sessionId)):L.value=_(r.error||"error.import_failed")}catch(r){L.value=String(r)}finally{y.value=!1,setTimeout(()=>{i.value=null},500)}}const Se=w(null);async function Ge(){L.value=null,Se.value?.openFileDialog()}async function Qe({files:l}){l.length!==0&&(L.value=null,await be(l))}async function Ke({files:l,dirPath:f}){L.value=null,S.value=!1,C.value=null,f?await be(f):l.length>0&&await be(l)}async function be(l){y.value=!0,i.value={stage:"detecting",progress:0,message:""};try{const f=await ie().importDirectory(l,void 0,r=>{r.stage!=="done"&&(i.value=r)});i.value&&(i.value.progress=100),await new Promise(r=>setTimeout(r,300)),f.success&&f.sessionId?(await n.loadSessions(),n.selectSession(f.sessionId),await M(f.sessionId)):L.value=_(f.error||"error.import_failed")}catch(f){L.value=String(f)}finally{y.value=!1,setTimeout(()=>{i.value=null},500)}}const he=w(null);async function Je(l){if(he.value){const r=he.value;he.value=null,await re(r,{formatId:l});return}const f=h.value;if(f){L.value=null,C.value=null,y.value=!0,i.value={stage:"detecting",progress:0,message:""};try{const r=await ie().importFile(f,{formatId:l},T=>{T.stage!=="done"&&(i.value=T)});i.value&&(i.value.progress=100),await new Promise(T=>setTimeout(T,300)),r.success&&r.sessionId?(await n.loadSessions(),n.selectSession(r.sessionId),await $(r.sessionId),await M(r.sessionId)):L.value=_(r.error||"error.import_failed")}catch(r){L.value=String(r)}finally{y.value=!1,setTimeout(()=>{i.value=null},500)}}}async function Ye(l){if(l.length===0)return;if(G.value){const r=G.value;if(G.value=null,ue.value=[],l.length===1)await re(r,{chatIndex:l[0].index});else for(const T of l)await re(r,{chatIndex:T.index});return}const f=F.value;if(l.length===1){y.value=!0,i.value={stage:"detecting",progress:0,message:""};try{const r=await ie().importFile(f,{chatIndex:l[0].index},T=>{T.stage!=="done"&&(i.value=T)});i.value&&(i.value.progress=100),await new Promise(T=>setTimeout(T,300)),r.success&&r.sessionId?(await n.loadSessions(),n.selectSession(r.sessionId),await $(r.sessionId),await M(r.sessionId)):L.value=_(r.error||"error.import_failed")}catch(r){L.value=String(r)}finally{y.value=!1,setTimeout(()=>{i.value=null},500)}}else{g.value=!0,d.value=l.map(U=>({path:`${f}#${U.index}`,name:U.name||`Chat ${U.id}`,status:"pending"}));let r=0,T=0;for(let U=0;U<l.length;U++){const Y=l[U];d.value[U].status="importing";try{const oe=await ie().importFile(f,{chatIndex:Y.index},W=>{W.stage!=="done"&&(d.value[U].progress=W)});oe.success&&oe.sessionId?(d.value[U].status="success",d.value[U].sessionId=oe.sessionId,r++,await $(oe.sessionId)):(d.value[U].status="failed",d.value[U].error=oe.error,T++)}catch(oe){d.value[U].status="failed",d.value[U].error=String(oe),T++}}await n.loadSessions(),g.value=!1,c.value={total:l.length,success:r,failed:T,cancelled:0,files:d.value.map(U=>({path:U.path,name:U.name,status:U.status,sessionId:U.sessionId,error:U.error}))}}}async function Ze(){if(P.value?.sessionId){const l=P.value.sessionId;n.clearMergeImportResult(),await M(l)}}function Pe(){n.clearMergeImportResult()}function Xe(){n.cancelBatchImport()}function et(){n.clearBatchImportResult()}async function tt(l){n.clearBatchImportResult(),await M(l)}async function st(){const l=await we().getLatestImportLog();l.success&&l.path?await we().showInFolder(l.path):await we().openDir("logs")}function at(){if(!i.value)return"";switch(i.value.stage){case"detecting":return s("home.import.progress.detecting");case"reading":return s("home.import.progress.reading");case"parsing":return s("home.import.progress.parsing");case"saving":return s("home.import.progress.saving");case"done":return s("home.import.progress.done");case"error":return s("home.import.progress.error");default:return""}}function ot(){if(!i.value)return"";const{messagesProcessed:l,totalBytes:f,bytesRead:r}=i.value;if(l&&l>0)return s("home.import.processed",{count:l.toLocaleString()});if(f&&r){const T=Math.round(r/f*100),U=(r/1024/1024).toFixed(1),Y=(f/1024/1024).toFixed(1);return`${U} MB / ${Y} MB (${T}%)`}return i.value.message||""}const We={pending:{icon:"i-heroicons-clock",class:"text-gray-400"},importing:{icon:"i-heroicons-arrow-path",class:"text-pink-500 animate-spin"},parsing:{icon:"i-heroicons-arrow-path",class:"text-pink-500 animate-spin"},success:{icon:"i-heroicons-check-circle",class:"text-green-500"},done:{icon:"i-heroicons-check-circle",class:"text-green-500"},failed:{icon:"i-heroicons-x-circle",class:"text-red-500"},cancelled:{icon:"i-heroicons-minus-circle",class:"text-gray-400"}},Ie=l=>We[l]?.icon??"i-heroicons-question-mark-circle",Ae=l=>We[l]?.class??"text-gray-400";function it(l){if(l.status==="pending")return s("home.import.batch.waiting");if(l.status==="cancelled")return s("home.import.batch.skipped");if(l.status==="success")return s("home.import.batch.success");if(l.status==="failed")return _(l.error||"error.import_failed");if(l.progress){const{stage:f,messagesProcessed:r}=l.progress;return f==="parsing"&&r?s("home.import.processed",{count:r.toLocaleString()}):s(`home.import.progress.${f}`)}return""}const nt=l=>l.info?s("home.import.merge.messageCount",{count:l.info.messageCount.toLocaleString()}):"";return(l,f)=>{const r=se,T=X,U=ct,Y=Re,oe=lt;return o(),p("div",Bs,[t(g)&&t(d).length>0?(o(),p("div",Vs,[e("div",Hs,[e("div",qs,[e("div",Gs,[m(r,{name:"i-heroicons-arrow-path",class:"h-5 w-5 animate-spin text-pink-600 dark:text-pink-400"})]),e("div",null,[e("p",Qs,a(t(s)("home.import.batch.importing")),1),e("p",Ks,a(t(s)("home.import.batch.progressCount",{current:(ce.value?.completed||0)+1,total:ce.value?.total||0})),1)])]),m(T,{color:"error",variant:"soft",size:"sm",icon:"i-heroicons-stop-circle",onClick:Xe},{default:E(()=>[R(a(t(s)("home.import.batch.cancel")),1)]),_:1})]),e("div",Js,[(o(!0),p(V,null,Z(t(d),(W,ne)=>(o(),N(_e,{key:W.path,name:W.name,"status-icon":Ie(W.status),"status-class":Ae(W.status),"progress-text":it(W),index:ne,total:t(d).length,highlight:W.status==="importing"},null,8,["name","status-icon","status-class","progress-text","index","total","highlight"]))),128))])])):t(I)&&t(u)!=="done"?(o(),p("div",Ys,[e("div",Zs,[e("div",Xs,[e("div",ea,[t(u)!=="error"?(o(),N(r,{key:0,name:"i-heroicons-arrow-path",class:"h-5 w-5 animate-spin text-pink-600 dark:text-pink-400"})):(o(),N(r,{key:1,name:"i-heroicons-x-circle",class:"h-5 w-5 text-red-600 dark:text-red-400"}))]),e("div",null,[e("p",ta,a(t(u)==="error"?t(s)("home.import.merge.failed"):t(s)("home.import.merge.importing")),1),e("p",sa,a(t(u)==="parsing"?t(s)("home.import.merge.parsing"):"")+" "+a(t(u)==="merging"?t(s)("home.import.merge.merging"):"")+" "+a(t(u)==="error"?t(k):""),1)])]),t(u)==="error"?(o(),N(T,{key:0,color:"neutral",variant:"ghost",size:"sm",icon:"i-heroicons-x-mark",onClick:Pe})):D("",!0)]),e("div",aa,[(o(!0),p(V,null,Z(t(v),(W,ne)=>(o(),N(_e,{key:W.path,name:W.name,"status-icon":Ie(W.status),"status-class":Ae(W.status),"progress-text":nt(W),index:ne,total:t(v).length,highlight:W.status==="parsing"},null,8,["name","status-icon","status-class","progress-text","index","total","highlight"]))),128))])])):t(I)&&t(u)==="done"&&t(P)?(o(),p("div",oa,[e("div",ia,[e("div",na,[e("div",ra,[m(r,{name:"i-heroicons-check-circle",class:"h-5 w-5 text-green-600 dark:text-green-400"})]),e("div",null,[e("p",ca,a(t(s)("home.import.merge.completed")),1),e("p",la,a(t(s)("home.import.merge.completedHint",{count:t(v).length})),1)])]),e("div",da,[m(T,{color:"neutral",variant:"ghost",size:"sm",icon:"i-heroicons-x-mark",onClick:Pe}),m(T,{size:"sm",onClick:Ze},{default:E(()=>[R(a(t(s)("home.import.batch.view")),1)]),_:1})])])])):t(c)?(o(),p("div",ma,[e("div",pa,[e("div",ua,[e("div",{class:z(["flex h-10 w-10 items-center justify-center rounded-xl",t(c).failed===0?"bg-green-50 dark:bg-green-500/10":"bg-amber-50 dark:bg-amber-500/10"])},[m(r,{name:t(c).failed===0?"i-heroicons-check-circle":"i-heroicons-exclamation-triangle",class:z(["h-5 w-5",t(c).failed===0?"text-green-600 dark:text-green-400":"text-amber-600 dark:text-amber-400"])},null,8,["name","class"])],2),e("div",null,[e("p",ha,a(t(s)("home.import.batch.completed")),1),e("p",ga,a(t(s)("home.import.batch.summary",{success:t(c).success,failed:t(c).failed,cancelled:t(c).cancelled})),1)])]),m(T,{color:"neutral",variant:"ghost",size:"sm",icon:"i-heroicons-x-mark",onClick:et})]),e("div",ya,[(o(!0),p(V,null,Z(t(c).files,(W,ne)=>(o(),N(_e,{key:W.path,name:W.name,"status-icon":Ie(W.status),"status-class":Ae(W.status),index:ne,total:t(c).files.length},ft({extra:E(()=>[W.status==="failed"?(o(),p("p",fa,a(_(W.error||"error.import_failed")),1)):W.status==="cancelled"?(o(),p("p",va,a(t(s)("home.import.batch.skipped")),1)):D("",!0)]),_:2},[W.status==="success"&&W.sessionId?{name:"action",fn:E(()=>[m(T,{size:"xs",variant:"soft",onClick:ti=>tt(W.sessionId)},{default:E(()=>[R(a(t(s)("home.import.batch.view")),1)]),_:1},8,["onClick"])]),key:"0"}:void 0]),1032,["name","status-icon","status-class","index","total"]))),128))])])):(o(),N(t(Fe),{key:4,ref_key:"dropZoneRef",ref:q,accept:[".json",".jsonl",".txt"],disabled:H.value,multiple:!0,class:"w-full max-w-md",onFiles:O,onDirectoryDrop:Ke},{default:E(({isDragOver:W})=>[e("div",{class:z(["group relative flex w-full cursor-pointer flex-col items-center justify-center rounded-3xl border border-gray-200/50 bg-gray-100/50 px-8 h-[190px] sm:h-[220px] backdrop-blur-md transition-all duration-300 hover:border-pink-500/30 hover:bg-gray-100/80 hover:shadow-2xl hover:shadow-pink-500/10 focus:outline-none focus:ring-4 focus:ring-pink-500/20 sm:px-12 dark:border-white/10 dark:bg-gray-800/40 dark:hover:border-pink-500/30 dark:hover:bg-gray-800/60",{"border-pink-500/50 bg-pink-50/50 dark:border-pink-400/50 dark:bg-pink-500/10":W&&!H.value,"cursor-not-allowed opacity-70":H.value}]),onClick:f[1]||(f[1]=ne=>!H.value&&me())},[e("div",{class:z(["mb-5 flex h-16 w-16 items-center justify-center rounded-2xl transition-transform duration-300 group-hover:scale-105",{"scale-105":W&&!H.value,"animate-pulse":t(y)}])},[t(y)?(o(),N(r,{key:1,name:"i-heroicons-arrow-path",class:"h-8 w-8 animate-spin text-pink-600 dark:text-pink-400"})):(o(),N(r,{key:0,name:"i-heroicons-arrow-up-tray",class:"h-8 w-8 text-pink-600 transition-transform duration-200 group-hover:-translate-y-1 dark:text-pink-400"}))],2),e("div",xa,[t(y)&&t(i)?(o(),p(V,{key:0},[e("p",ba,a(at()),1),e("div",Ia,[m(U,{modelValue:t(i).progress,"onUpdate:modelValue":f[0]||(f[0]=ne=>t(i).progress=ne),size:"md"},null,8,["modelValue"])]),e("p",Aa,a(ot()),1)],64)):(o(),p(V,{key:1},[e("p",wa,a(W?t(s)("home.import.dropHint"):t(s)("home.import.clickHint")),1),e("p",ka,a(t(s)("home.import.multipleHint")),1)],64))])],2)]),_:1},8,["disabled"])),m(t(Fe),{ref_key:"dirDropZoneRef",ref:Se,directory:!0,class:"hidden",onFiles:Qe},null,512),!H.value&&!t(c)?(o(),p("div",_a,[m(Y,{modelValue:ae.value,"onUpdate:modelValue":f[2]||(f[2]=W=>ae.value=W),label:t(s)("home.import.importFolder"),"input-class":"h-4 w-4",size:"sm","label-class":"text-sm font-medium text-gray-600 dark:text-gray-300"},null,8,["modelValue","label"]),e("div",Ca,[m(Y,{modelValue:j.value,"onUpdate:modelValue":f[3]||(f[3]=W=>j.value=W),label:t(s)("home.import.options.mergeImport"),"input-class":"h-4 w-4",size:"sm","label-class":"text-sm font-medium text-gray-600 dark:text-gray-300"},null,8,["modelValue","label"]),m(oe,{mode:"hover"},{content:E(()=>[e("div",La,a(t(s)("home.import.options.mergeImportHint")),1)]),default:E(()=>[m(r,{name:"i-heroicons-question-mark-circle",class:"h-4 w-4 text-gray-400 hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300"})]),_:1})])])):D("",!0),L.value?(o(),p("div",Sa,[e("div",Pa,[m(r,{name:"i-heroicons-exclamation-circle",class:"h-5 w-5 shrink-0"}),e("span",null,a(L.value),1)]),C.value?(o(),p("div",Wa,[e("div",Ma,[m(r,{name:"i-heroicons-chart-bar",class:"mt-0.5 h-4 w-4 shrink-0"}),e("div",Ta,[C.value.detectedFormat?(o(),p("div",Ea,a(t(s)("home.import.diagnostics.format"))+a(C.value.detectedFormat),1)):D("",!0),e("div",null,a(t(s)("home.import.diagnostics.received"))+a(C.value.messagesReceived)+" "+a(t(s)("home.import.diagnostics.written"))+a(C.value.messagesWritten)+" "+a(t(s)("home.import.diagnostics.skipped"))+a(C.value.messagesSkipped),1)])])])):D("",!0),h.value||S.value?(o(),p("p",Fa,a(t(s)("home.import.errors.actionHint")),1)):D("",!0),e("div",$a,[h.value?(o(),N(T,{key:0,size:"xs",onClick:f[4]||(f[4]=W=>A.value=!0)},{default:E(()=>[R(a(t(s)("home.formatSelector.manualSelect")),1)]),_:1})):D("",!0),S.value?(o(),N(T,{key:1,size:"xs",variant:"soft",onClick:st},{default:E(()=>[R(a(t(s)("home.import.viewLog")),1)]),_:1})):D("",!0)])])):D("",!0),m(Ps,{open:b.value,"onUpdate:open":f[5]||(f[5]=W=>b.value=W),"file-path":F.value,onSelect:Ye},null,8,["open","file-path"]),m(Os,{open:A.value,"onUpdate:open":f[6]||(f[6]=W=>A.value=W),"file-path":h.value,onSelect:Je},null,8,["open","file-path"])])}}}),Da={class:"flex justify-center select-none"},Na=["onClick"],Ra=Q({__name:"ImportTabSelector",props:{modelValue:{}},emits:["update:modelValue"],setup(x,{emit:s}){const n=x,y=s,{t:i}=K(),g=[{id:"file",labelKey:"home.tabs.file"},{id:"api",labelKey:"home.tabs.api"},{id:"push",labelKey:"home.tabs.push"}],d=w([]),c=w(null);let I=null;const v=w({width:"0px",transform:"translateX(0px)",opacity:0}),u=async()=>{await bt();const k=g.findIndex(P=>P.id===n.modelValue);if(k!==-1&&d.value[k]){const P=d.value[k];v.value={width:`${P.offsetWidth+6}px`,transform:`translateX(${P.offsetLeft-3}px)`,opacity:1}}else v.value.opacity=0};return pe(()=>n.modelValue,()=>{u()}),de(()=>{u(),typeof ResizeObserver<"u"&&c.value&&(I=new ResizeObserver(()=>{u()}),I.observe(c.value))}),vt(()=>{I&&I.disconnect()}),(k,P)=>(o(),p("div",Da,[e("div",{ref_key:"containerRef",ref:c,class:"relative flex items-center justify-center gap-1.5 rounded-full bg-gray-50/60 p-[3px] shadow-inner ring-1 ring-inset ring-gray-900/5 backdrop-blur-md dark:bg-gray-800/40 dark:ring-white/10 z-0 overflow-visible"},[e("div",{class:"absolute left-0 inset-y-0 -z-10 rounded-full bg-white ring-[1.5px] ring-primary-500 shadow-sm transition-all duration-350 ease-out dark:bg-primary-700/15 dark:ring-primary-500",style:xt(v.value)},null,4),(o(),p(V,null,Z(g,(b,F)=>e("button",{key:b.id,ref_for:!0,ref:A=>{A&&(d.value[F]=A)},class:z(["relative z-10 flex h-[32px] items-center justify-center whitespace-nowrap rounded-full px-5 text-[13px] font-medium transition-colors duration-200 cursor-pointer",[x.modelValue===b.id?"text-primary-600 dark:text-primary-400":"text-gray-500 hover:bg-gray-200/50 hover:text-gray-800 dark:text-gray-400 dark:hover:bg-gray-700/50 dark:hover:text-gray-200"]]),onClick:A=>y("update:modelValue",b.id)},a(t(i)(b.labelKey)),11,Na)),64))],512)]))}}),za={class:"w-full flex flex-col items-center space-y-6"},ja={class:"flex h-[190px] sm:h-[220px] w-full max-w-md flex-col items-center justify-center rounded-3xl border border-gray-200/50 bg-gray-100/50 px-8 backdrop-blur-md dark:border-white/10 dark:bg-gray-800/40 select-none text-center sm:px-12"},Oa={class:"mb-2 flex h-10 w-10 sm:h-12 sm:w-12 items-center justify-center"},Ba={class:"text-sm text-gray-500 dark:text-gray-400 leading-relaxed"},Va=Q({__name:"AutoSyncCard",setup(x){const{t:s}=K(),n=He();function y(){n.openSettings("api","sync")}return(i,g)=>{const d=se,c=X;return o(),p("div",za,[e("div",ja,[e("div",Oa,[m(d,{name:"i-heroicons-cloud-arrow-down",class:"h-6 w-6 sm:h-8 sm:w-8 text-pink-600 dark:text-pink-400"})]),e("p",Ba,a(t(s)("home.tabs.apiDescription")),1),m(c,{class:"mt-3 font-semibold cursor-pointer",color:"primary",variant:"solid",icon:"i-heroicons-cog-6-tooth",onClick:y},{default:E(()=>[R(a(t(s)("home.tabs.apiButton")),1)]),_:1})]),g[0]||(g[0]=e("div",{class:"h-6 w-full opacity-0 pointer-events-none"},null,-1))])}}}),Ha={class:"w-full flex flex-col items-center space-y-6"},qa={class:"flex h-[190px] sm:h-[220px] w-full max-w-md flex-col items-center justify-center rounded-3xl border border-gray-200/50 bg-gray-100/50 px-8 backdrop-blur-md dark:border-white/10 dark:bg-gray-800/40 select-none text-center sm:px-12"},Ga={class:"mb-2 flex h-10 w-10 sm:h-12 sm:w-12 items-center justify-center"},Qa={class:"text-sm text-gray-500 dark:text-gray-400 leading-relaxed"},Ka=Q({__name:"ApiImportCard",setup(x){const{t:s}=K(),n=He();function y(){n.openSettings("api","api")}return(i,g)=>{const d=se,c=X;return o(),p("div",Ha,[e("div",qa,[e("div",Ga,[m(d,{name:"i-heroicons-cpu-chip",class:"h-6 w-6 sm:h-8 sm:w-8 text-pink-600 dark:text-pink-400"})]),e("p",Qa,a(t(s)("home.tabs.pushDescription")),1),m(c,{class:"mt-3 font-semibold cursor-pointer",color:"primary",variant:"solid",icon:"i-heroicons-cog-6-tooth",onClick:y},{default:E(()=>[R(a(t(s)("home.tabs.pushButton")),1)]),_:1})]),g[0]||(g[0]=e("div",{class:"h-6 w-full opacity-0 pointer-events-none"},null,-1))])}}}),Ja=["BR","A","IMG"],Ya={A:["href","target","rel"],IMG:["src","alt","title","width","height"],BR:[]},Za=["http:","https:"];function Xa(x){return new Set((x&&x.length>0?x:Ja).map(s=>s.toUpperCase()))}function eo(x){const s=x&&Object.keys(x).length>0?x:Ya,n={};for(const[y,i]of Object.entries(s))n[y.toUpperCase()]=new Set(i.map(g=>g.toLowerCase()));return n}function Ue(x,s){const n=x.trim();if(!n)return!1;const y=n.toLowerCase();if(y.startsWith("javascript:")||y.startsWith("vbscript:")||y.startsWith("data:"))return!1;try{const i=new URL(n,window.location.origin);return s.includes(i.protocol)}catch{return!1}}function to(x,s={}){const n=Xa(s.allowedTags),y=eo(s.allowedAttrs),i=s.allowedProtocols&&s.allowedProtocols.length>0?s.allowedProtocols:Za,d=new DOMParser().parseFromString(x||"","text/html"),c=I=>{const v=Array.from(I.children);for(const u of v){const k=u.tagName;if(!n.has(k)){const b=u.parentNode;if(b){for(;u.firstChild;)b.insertBefore(u.firstChild,u);b.removeChild(u)}continue}const P=y[k]||new Set;for(const b of Array.from(u.attributes))P.has(b.name.toLowerCase())||u.removeAttribute(b.name);if(k==="A"){const b=u.getAttribute("href")?.trim()||"";Ue(b,i)||u.removeAttribute("href");const F=u.getAttribute("target");F&&F!=="_blank"&&u.setAttribute("target","_blank"),u.getAttribute("href")&&u.setAttribute("rel","noopener noreferrer")}if(k==="IMG"){const b=u.getAttribute("src")?.trim()||"";Ue(b,i)||u.removeAttribute("src")}c(u)}};return c(d.body),d.body.innerHTML}const so={feat:{icon:"i-heroicons-sparkles",color:"text-green-500",bgColor:"bg-green-100 dark:bg-green-900/30"},fix:{icon:"i-heroicons-wrench-screwdriver",color:"text-amber-500",bgColor:"bg-amber-100 dark:bg-amber-900/30"},refactor:{icon:"i-heroicons-arrow-path-rounded-square",color:"text-indigo-500",bgColor:"bg-indigo-100 dark:bg-indigo-900/30"},docs:{icon:"i-heroicons-document-text",color:"text-cyan-600",bgColor:"bg-cyan-100 dark:bg-cyan-900/30"},chore:{icon:"i-heroicons-cog-6-tooth",color:"text-gray-500",bgColor:"bg-gray-100 dark:bg-gray-700/30"},style:{icon:"i-heroicons-paint-brush",color:"text-blue-500",bgColor:"bg-blue-100 dark:bg-blue-900/30"},ci:{icon:"i-heroicons-command-line",color:"text-teal-500",bgColor:"bg-teal-100 dark:bg-teal-900/30"}};function Ce(x){return so[x]}const ao=JSON.parse('[{"version":"0.25.1","date":"2026-06-08","summary":"新增数据目录兼容门禁,防止旧版运行时误写已升级的数据;并新增 CLI ai chat 命令。","changes":[{"type":"feat","items":["新增数据目录兼容门禁:写入 v6 schema 数据后自动记录最低可读写运行时版本,防止旧版本误写已升级的数据目录","数据库访问前校验数据目录兼容版本,版本不满足时拒绝操作","【桌面端】启动时校验数据目录兼容版本,不满足时弹窗提示并退出","【CLI】启动时校验数据目录兼容版本,不满足时立即退出","【CLI】新增 ai chat 命令,支持在终端与 AI 进行多轮交互对话"]},{"type":"fix","items":["使用打包版本号(而非 Electron 开发模式报告的 0.0.0)写入兼容门禁,并强制要求运行时身份标识","数据库迁移和导入完成后正确写入兼容门禁;启动迁移失败时立即报错,不再静默忽略","【MCP】启动时主动校验数据目录兼容性,版本不满足时提前退出,避免写入不兼容数据","【桌面端】HTTP API 将兼容门禁错误映射为 409 响应,方便前端展示升级提示","【CLI】规范化 AI 工具名称,修复 ai chat 命令的边界处理问题"]},{"type":"refactor","items":["对齐 AI 对话与 segment 标识符命名规范"]},{"type":"test","items":["补充解析器、配置迁移、数据库迁移、HTTP 路由和 AI 工具的测试覆盖"]},{"type":"docs","items":["新增数据目录兼容门禁公开文档,说明多版本共享数据目录的限制与升级规则"]}]},{"version":"0.25.0","date":"2026-06-07","summary":"AI 对话现在支持通过技能生成图表,修复工具轮次、桌面标题栏和开发服务生命周期问题。","changes":[{"type":"feat","items":["新增斜杠触发的 AI 图表运行时,支持在对话中生成并渲染 ECharts 图表","优化 AI 图表结果展示体验,补充图表渲染状态和多类型图表适配"]},{"type":"fix","items":["提升 AI Agent 默认工具调用轮次,减少复杂任务中过早停止的问题","修复预设问题标签和侧边栏元素层叠顺序异常","【CLI Web】修复开发后端生命周期清理不完整的问题","【桌面端】修复自动技能未注册图表工具,导致图表技能无法完整执行的问题","【桌面端】修复 Windows 标题栏覆盖层切换主题后缓存未刷新和显示不平滑的问题"]},{"type":"refactor","items":["集中管理 AI 图表运行时策略,统一 CLI 与桌面端的图表工具启用规则","精简技能菜单与 Skill Manager 的重复逻辑"]},{"type":"docs","items":["更新 iMessage 聊天记录导出指南"]},{"type":"chore","items":["移除公开仓库中的维护者专用技能目录,转为私有维护上下文管理"]}]},{"version":"0.24.1","date":"2026-06-04","summary":"新增应用内更新提醒与 AI 预处理默认规则,修复更新提示和脱敏配置保存问题。","changes":[{"type":"feat","items":["新增应用内更新提醒入口,侧边栏可提示并打开最新版本说明","新增 AI 预处理默认配置,自动启用数据清洗、去噪和脱敏等基础规则","支持按分组管理 AI 脱敏规则,便于维护内置与自定义规则"]},{"type":"fix","items":["修复更新提醒缓存失败结果、旧版本缓存和 CLI Web 开发占位版本导致的错误 New 标记","修复 AI 预处理执行前未正确应用内置脱敏规则的问题","修复脱敏规则偏好保存时空覆盖无法清除旧内置规则开关的问题","修复旧版内置脱敏规则迁移后覆盖设置丢失的问题"]},{"type":"docs","items":["新增公开开发指南,补充本地开发、目录职责和协作规范"]},{"type":"ci","items":["发布流程新增 Markdown 版本日志链接"]}]},{"version":"0.24.0","date":"2026-06-03","summary":"新增 CLI Web 认证与数据目录迁移能力,统一多端 HTTP 路由,并修复数据迁移、AI 配置和导入刷新问题。","changes":[{"type":"feat","items":["新增多语言版本日志 Markdown 生成能力","支持在存储管理中忽略旧数据迁移提示","【CLI Web】新增登录页、Token 认证和记住登录状态","【CLI Web】支持数据目录迁移流程,可在 Web 设置中切换并迁移数据目录","【CLI】新增 --require-auth 参数,用于保护 /_web/* API 访问","【桌面端】新增内部 HTTP 服务,支持前端统一通过服务适配层访问共享接口"]},{"type":"fix","items":["修复数据目录迁移与数据库迁移流程中的多处边界问题,避免旧库字段缺失或路径切换导致读取失败","修复数据目录迁移提示在旧数据不存在或目录变更后仍错误显示的问题","修复增量导入后侧边栏消息数量未刷新的问题","修复侧边栏折叠状态仅存于 sessionStorage 导致刷新后丢失的问题","修复 AI 配置编辑时已保存密钥未正确启用拉取模型和验证按钮的问题","修复 AI 共享 SSE 流式响应的稳定性问题","修复自定义数据源新增弹窗未强制填写 Token 的问题","【桌面端】将图表插件计算移入 Worker,避免主线程计算阻塞"]},{"type":"refactor","items":["抽取 @openchatlab/http-routes 共享包,统一 CLI Web 与桌面端的 HTTP 路由实现","将 AI 配置、助手、技能、会话、流式响应、缓存和合并相关接口迁移到共享 HTTP 路由","精简桌面端 IPC 桥接层,移除遗留的 AI、会话索引、LLM、Assistant、Skill、NLP 等 IPC 兼容代码","统一前端服务层,减少 Electron 与 Web 模式的分支实现"]},{"type":"perf","items":["压缩主进程构建产物,并延迟加载 tiktoken rank table,降低启动和打包体积压力"]},{"type":"ci","items":["修复 Windows 发布流程中的 zstd 缓存问题,并补充 CLI 更新发布说明"]},{"type":"chore","items":["调整 Node 类型检查项目配置,覆盖桌面端与共享 Node 代码"]}]},{"version":"0.23.1","date":"2026-06-01","summary":"新增 clb 短别名与端口预检引导,修复守护进程静默退出及暗色模式标题栏等多处问题。","changes":[{"type":"feat","items":["优化页面顶部标题栏与工具栏布局","【CLI】启动前主动检测端口占用,被占用时给出换端口或 lsof 引导,避免延迟报错","【CLI】新增 clb 作为 chatlab 命令的短别名"]},{"type":"fix","items":["修复侧边栏 Tooltip 位置异常及 Nuxt UI v4 API 兼容问题","修复标题栏暗色模式出现红色背景与层叠顺序错误","规范 AI 消息角色参数类型,加强对话测试断言","【CLI】修复守护进程启动入口错误导致服务启动后静默退出的问题","【CLI】改善端口检测的错误处理与提示信息","【CLI】修复 Web 模式下缺少 chatlab.fun 反向代理路由的问题"]}]},{"version":"0.23.0","date":"2026-05-31","summary":"重构消息编辑交互,新增推理等级按模型独立配置,统一 CLI 启动入口,修复多处推理识别与计算问题。","changes":[{"type":"feat","items":["新增消息派生(Fork)功能,可从任意 AI 回复处创建独立分支会话","状态栏新增推理强度选择器,支持为每个推理模型单独记忆并切换思维等级","推理等级控制新增 default/auto 选项,扩展对 Kimi、Doubao、Gemini 等更多模型家族的覆盖","消息分析视图拆分为「类型分析」和「时间分析」两个标签页,增加丰富统计洞察卡片","批量重建会话索引前新增确认弹窗,防止误操作清空现有摘要","演示数据扩展为 4 个文件,覆盖群组及多个私聊场景","【CLI】新增统一启动命令 chatlab start,支持 --headless 和 --no-open 参数","【CLI】新增后台服务模式,支持 chatlab start --daemon 安装为系统服务,以及 stop/status 命令"]},{"type":"fix","items":["修复消息编辑可能导致数据丢失和状态错误的多个并发安全问题","修复思维等级与上下文窗口计算未使用当前激活模型 ID 的问题","修复自定义模型仅含 chat 能力时推理识别失败,补全启发式回退逻辑","修复 Kimi、Doubao 等模型在选择 auto 思维等级时被静默禁用的问题","【CLI】修复 start 命令未启动 Web 开发后端的问题","【CLI】修复 Linux 上服务路径含空格时守护进程启动失败的问题"]},{"type":"refactor","items":["重构消息分支系统为「编辑并重新生成」模型,支持仅更新当前轮或覆盖后续消息两种模式","移除模型配置中的「推理模型」和「禁用思维模式」开关,改为按能力自动推断","简化模型切换按钮 UI,优化会话索引加载性能"]}]},{"version":"0.22.1","date":"2026-05-29","summary":"新增会话摘要详细程度配置,修复服务版批量摘要卡死、AI 配置编辑误判及多处 AI 凭据检测问题。","changes":[{"type":"feat","items":["新增会话摘要详细程度设置,支持「简洁」与「标准」两种策略,可在 AI 设置中切换"]},{"type":"fix","items":["修复 OpenAI 兼容模式下修改 Base URL 后未重新验证凭据的问题","修复 API Key 已设检测逻辑错误,防止旧 key 被意外复用","修复批量生成摘要时点击停止需等待当前请求完成才响应的问题","【CLI Web】修复批量生成摘要导致页面卡死的问题","【CLI Web】修复批量生成摘要时未遵循已选会话范围的问题","【CLI Web】修复编辑 AI 配置时第三方服务被误判为本地服务的问题"]},{"type":"refactor","items":["将会话索引国际化 key 从 storage 命名空间迁移至 ai 命名空间"]},{"type":"style","items":["优化聊天记录列表密度与消息气泡样式"]},{"type":"docs","items":["重整文档站导航结构,将快速开始迁移至使用指南目录"]}]},{"version":"0.22.0","date":"2026-05-26","summary":"本次优化了软件默认状态的样式,并新增 CLI Web 更新与存储管理能力,优化首页导入、文档站和多端稳定性。","changes":[{"type":"feat","items":["首页导入区重构为分入口体验,新增 API 导入和自动同步入口","版本日志改为随应用本地打包,减少运行时远程依赖","【CLI Web】新增存储管理能力,可在 Web 设置中查看和管理数据缓存","【CLI】新增更新检查与自动更新流程,并接入 CLI Web 检查更新","【文档站】新增独立文档站 docs.chatlab.fun"]},{"type":"fix","items":["修复首页快捷开始按钮缺失的问题","修复国际化 key 路径错误和 ECharts 废弃 API 用法","修复自更新与迁移重试流程中的安全保护问题","【桌面端】修复统一迁移可能回退数据目录改动的问题","【CLI Web】修复发现新版本时展示必然失败的“立即更新”操作","【CLI Web】禁用不可用的 Web 自更新执行流程","【CLI Web】修复文件管理操作通过 shell 打开带来的兼容性和安全问题","【CLI Web】修复数据目录提示后 Web 服务无法继续启动的问题","【CLI Web】补齐合并相关 API 兼容层","【CLI】优化更新检查的异步缓存、按键交互和开发模式跳过逻辑"]},{"type":"refactor","items":["迁移文档链接到 docs.chatlab.fun","【设置】将会话索引移入 AI 设置并调整设置页排序"]},{"type":"style","items":["优化侧边栏密度,并增强 Tab 选择器在深色模式下的对比度"]},{"type":"docs","items":["重整公开文档站结构与导出说明"]},{"type":"chore","items":["将工作区包迁移为 ESM","隔离文档站工作区依赖","将发布版本日志移出 docs 目录"]}]},{"version":"0.21.1","date":"2026-05-23","summary":"优化同步拉取可靠性与数据安全性,新增移除订阅时清理聊天记录选项,并修复 UI 动画和弹窗交互问题。","changes":[{"type":"feat","items":["Pull 同步后自动生成会话索引","新增移除订阅时清理已导入聊天记录的选项","【CLI Web】版本日志弹窗支持按版本截图,Markdown 列表修正改为可选","【MCP】新增 ci 变更类型的图标与国际化支持"]},{"type":"fix","items":["修复 Pull 同步在小页面场景下可能丢失数据的问题,并校验重试导入结果","修复拉取同步后会话索引未自动生成的问题","修复 Pull 完成或数据删除后侧边栏会话列表未刷新的问题","修复远端服务不支持分页时无法获取全部会话的问题","优化拉取同步的重试机制与分页策略,提升稳定性","修复会话存在性校验缺少 schema 检查导致表缺失报错的问题","修复强制生成会话索引弹窗在失败时意外关闭的问题","修复空会话状态下会话索引弹窗阻塞页面的问题","【桌面端】修复应用版本号显示为 0.0.0 时自动回退读取 package.json 版本","【CLI Web】同步图标改为原地旋转动画,避免出现独立加载器"]},{"type":"docs","items":["更新 Pull 协议文档为 since+nextSince 分页模式"]}]},{"version":"0.21.0","date":"2026-05-22","summary":"本次新增支持 MCP,统一多端导入与服务层,并修复 Web、AI、同步和发布稳定性问题。","changes":[{"type":"feat","items":["Electron 与 Web 模式支持统一的文件夹导入流程,适配多文件聊天记录格式","【MCP】新增独立命令入口,并在设置页接入 MCP 配置","【MCP】Server 扩展到 19 个工具,并支持紧凑文本与 JSON 双格式输出"]},{"type":"fix","items":["修复目录导入路径处理不稳导致的导入失败风险","修复新增订阅时可能出现的同步竞态问题","修复 MiniMax 流式响应中的 <think> 内容未正确识别为思考事件的问题","【CLI Web】修复增量导入不可用的问题","【CLI Web】修复会话不存在、成员历史等行为与桌面端不一致的问题","【CLI Web】修复开发服务的 Node 运行时配置问题","【MCP】修复启动时原生模块 ABI 绑定不一致的问题"]},{"type":"refactor","items":["统一 CLI Web 与 Electron 的共享服务层,减少路由与 IPC 中的重复业务逻辑","【MCP】瘦身对外暴露的工具注册表,降低外部 AI Agent 的工具 schema 成本","【MCP】将核心能力抽取为独立共享包,简化 CLI 与桌面端集成","【MCP】精简设置页集成方式,降低桌面端辅助代码复杂度"]},{"type":"ci","items":["【CLI】发布流程支持同步发布 npm 包"]},{"type":"docs","items":["补充 changelog 端特有变更的前缀与排序规则"]},{"type":"chore","items":["【CLI】【MCP】补齐 npm 发布所需配置和发布说明"]}]},{"version":"0.20.0","date":"2026-05-19","summary":"本次更新统一了多端核心架构,并优化 AI、导入、同步和桌面构建稳定性。为下个版本的独立 Web、CLI 与 MCP 能力做准备,使用CLI前必须升级至此版本以完成数据预迁移。","changes":[{"type":"feat","items":["新增独立 CLI、HTTP API 服务和 MCP Server,为命令行、Web 与 AI 代理集成提供基础能力","新增独立 Web 构建与一键启动能力,支持通过 CLI 启动 Web UI 并自动打开浏览器","Web 模式支持聊天记录导入、Demo 导入、会话查询、成员查询、搜索与分析等核心流程","Web 模式接入 AI 对话、模型配置、自定义 Provider/Model、上下文压缩和流式事件展示","导入能力升级为共享流式管道,支持多格式解析、增量导入、导入分析和自动生成会话索引","新增合并、Markdown 导出和会话缓存相关服务端能力","新增同步共享包和 CLI 自动化支持,为后续多端同步能力打基础","新增后端偏好设置持久化,并支持 CLI 首次运行时自动检测和迁移桌面端数据"]},{"type":"fix","items":["修复 Web 模式下会话索引、跨域代理、Demo 保护和运行时异常等问题","修复 Web 模式下应用版本显示为空的问题","修复 AI Agent 证据检索、Web 端事件流和错误格式化等问题","修复同步展示与导入逻辑不一致的问题","修复 CLI 开发模式下 ESM 模块解析问题","修复 CLI 安装后可能找不到既有桌面端数据的问题","修复 Electron 包拆分后数据迁移路径不一致的问题","修复打包后 Worker 线程间接依赖 electron 模块导致崩溃的问题","修复 Electron 构建、依赖安装和 better-sqlite3 原生模块重编译相关问题"]},{"type":"refactor","items":["将项目迁移为多端工作区结构,拆分 apps/desktop、apps/cli 与多个共享 packages","将解析器、配置、数据库适配、查询、迁移、NLP、会话缓存、导入、合并、导出和同步逻辑抽取为共享模块","将 AI Agent、工具系统、预处理、上下文压缩、RAG、LLM 配置、助手和技能管理抽取为共享运行时能力","统一 Electron、CLI Web 和 MCP 的 AI 工具命名、工具注册和数据访问方式","统一数据目录、消息查询、成员查询、会话索引、SQL 执行和导入去重等核心逻辑","将 CLI 从 packages/server 迁移到 apps/cli,并补齐 npm 发布构建链路","将纯前端图表模块迁移到 src/features,保持 packages 目录仅存放可复用共享包","移除多处 Electron 侧纯转发文件和废弃代码,减少重复实现"]},{"type":"build","items":["升级 Vite 等构建工具链","新增 CLI tsup 构建、Web 资源打包和 npm 发布所需配置","调整 Electron 桌面端构建配置,移除 Linux 桌面构建目标"]},{"type":"docs","items":["补充版本策略、提交 scope 约定和相关开发文档"]}]},{"version":"0.19.0","date":"2026-05-06","summary":"本次更新支持了 AI 上下文自动压缩能力,新增 Demo 示例,并优化模型配置与调试体验。","changes":[{"type":"feat","items":["支持模型上下文窗口预设和自定义配置","支持 AI 对话上下文自动压缩及相关配置","优化上下文压缩流程与状态展示","调试模式新增原始数据查看,并支持记录完整 LLM 上下文","优化 AI 模型配置文案、表单和设置页展示","移除向量模型配置逻辑,简化相关设置","新用户可在空状态直接查看 Demo 示例","迁移到 pnpm workspace 项目结构"]},{"type":"fix","items":["修复快速模型跟随默认助手时可能使用错误模型的问题","修复 Demo 按钮在空数据状态下不显示的问题","修复主进程直接依赖未声明 axios 导致启动失败的风险"]}]},{"version":"0.18.4","date":"2026-04-29","summary":"本次更新优化了模型稳定性,同时支持远程获取模型列表,优化 AI 错误详情展示与部分样式等。","changes":[{"type":"feat","items":["支持远程获取模型列表","OpenAI 兼容 API 地址自动补全 /v1 并支持实时预览","优化 AI 对话错误详情展示","优化部分展示样式"]},{"type":"fix","items":["修复部分逻辑漏洞"]},{"type":"chore","items":["优化同步日志技能逻辑"]}]},{"version":"0.18.3","date":"2026-04-28","summary":"支持配置快捷工具入口位置,优化默认时间筛选,并修复弹窗层级与数据目录安全提示。","changes":[{"type":"feat","items":["支持配置快捷工具入口位置","优化默认时间筛选体验","禁止将数据目录设置在应用安装目录下"]},{"type":"fix","items":["修复弹窗样式覆盖问题","修复设置页内弹窗被遮挡的层级问题"]}]},{"version":"0.18.2","date":"2026-04-26","summary":"新增订阅类型选择、远程会话分页发现与每次拉取条数配置。","changes":[{"type":"feat","items":["订阅会话时支持按类型筛选与选择","支持远程会话分页发现与按需加载更多","支持为数据源配置每次拉取的消息条数"]}]},{"version":"0.18.1","date":"2026-04-24","summary":"新增 DeepSeek V4 支持,新增开机自启动选项,优化设置与界面体验,并修复 AI 对话链接打开方式。<br/>从本版本开始,项目将正式迁移至ChatLab组织。","changes":[{"type":"feat","items":["迁移至 ChatLab 组织","优化全局样式表现","优化快速提问展示逻辑","优化设置弹窗弹出方式","支持开机自启动","支持 DeepSeek V4 模型"]},{"type":"fix","items":["修复 AI 对话中的链接未在浏览器中打开的问题"]}]},{"version":"0.18.0","date":"2026-04-23","summary":"优化 AI 对话交互逻辑,统一多处分析入口,优化数据源同步与 Windows 更新稳定性。","changes":[{"type":"feat","items":["AI 助手交互逻辑优化","调整添加数据源表单提示文案","工具 Panel 新增 Mini 模式","将聊天记录查看器迁移到工具 Panel","统一关系分析相关 Tab","将语录模块整体迁移到洞察","将关键词分析迁移到实验室"]},{"type":"fix","items":["修复存量类型警告","Pull 增量同步增加 60 秒重叠窗口,避免消息丢失","Pull 拉取时固定 limit=1000,避免远端数据源导出过多数据导致卡顿","修复 Windows 更新时 NSIS 弹窗导致静默安装中断的问题"]}]},{"version":"0.17.5","date":"2026-04-21","summary":"修复了大量BUG。","changes":[{"type":"feat","items":["优化关系卡片样式","以原生机器标识逻辑替换 node-machine-id 依赖,提升 Linux 下 API 密钥修改稳定性","合并聊天记录时支持可选保留原记录","预设服务与第三方服务 API 地址旁新增验证按钮"]},{"type":"fix","items":["优化 dataSource 迁移策略,提升迁移安全性","修复话题在消息过少时空状态显示异常","修复本地模型验证失效问题","修复切换对话后所选 Tab 被重置的问题","修复旧版 dataSources 升级后自动化页面白屏问题"]}]},{"version":"0.17.4","date":"2026-04-19","summary":"实现 Import API v1 完整协议并新增层级数据源管理,现已支持聊天记录自动同步。","changes":[{"type":"feat","items":["实现 Import API v1 完整协议与层级数据源管理"]}]},{"version":"0.17.3","date":"2026-04-17","summary":"私聊新增语言偏好Tab,侧边栏对话列表支持排序筛选,完善 AI 服务商与模型配置能力,并修复时间筛选重置问题。","changes":[{"type":"feat","items":["对话列表新增排序与筛选能力","新增语言偏好页签,支持偏好查看","优化界面样式细节与视觉一致性","AI 服务商新增 Anthropic 支持","模型第三方服务支持自选接口类型","AI 模型配置支持自定义名称"]},{"type":"fix","items":["修复从设置或 AI 对话页返回后时间筛选被重置为“全部”的问题"]},{"type":"refactor","items":["抽离语言偏好为共享类型,减少重复定义"]}]},{"version":"0.17.2","date":"2026-04-15","summary":"新增跨平台数据合并与成员消息合并,强化词库与更新安全校验,优化暗色体验与日志能力,以及修复若干BUG。","changes":[{"type":"feat","items":["成员管理支持成员消息合并","支持跨平台聊天数据合并","数据管理部分表头支持排序","话题分析入口迁移至洞察模块","新增 AI 日志文件原始路径记录","优化暗色模式配色,提升视觉体验"]},{"type":"fix","items":["修复词库刷新与合并 ID 碰撞问题","为 OpenAI 兼容请求补充运行时 User-Agent 请求头","修复暗色截图导出背景透明异常","词库下载新增 SHA256 完整性校验","收紧远程配置拉取策略并强化更新安装确认"]},{"type":"chore","items":["新增 ARM Linux 的 deb 安装包构建支持","优化日志同步流程"]},{"type":"docs","items":["新增繁体中文文档"]}]},{"version":"0.17.1","date":"2026-04-13","summary":"重构话题模块并新增话题卡片,优化词云关键词过滤与查询缓存逻辑,支持远程下载分词词库及繁体中文词库,完善 WhatsApp 检测逻辑。","changes":[{"type":"feat","items":["重构话题模块,新增话题卡片展示","词云支持关键词过滤","支持远程下载分词词库,新增繁体中文词库支持","查询缓存逻辑优化","部分 Loading 交互统一","完善 WhatsApp 检测逻辑"]},{"type":"ci","items":["新增官网文档站并支持自动化同步与构建"]}]},{"version":"0.17.0","date":"2026-04-12","summary":"重构并优化总览、视图等卡片的样式,这个版本的审美大幅度提升!并完善 WhatsApp 导入解析逻辑,同时在导入失败后支持指定格式导入,完善了截图与调试能力。","changes":[{"type":"feat","items":["新增 WhatsApp V2 时间戳弹性解析,自动适配不同地区导出格式","完善 WhatsApp 聊天记录检测机制","新增指定格式导入能力","消息页新增分享卡片","DEBUG 模式新增快速调试工具","优化总览身份卡并统一时间范围查询逻辑","重构总览模块卡片并抽离主题色卡片,预留配色模式","统一卡片最大宽度与首页工具布局,支持全局工具侧边栏","主题卡片支持截屏,并默认关闭截图移动端适配","移除诊断建议并新增提示"]},{"type":"fix","items":["修复 WhatsApp 时间解析正则与行匹配正则宽严不一致问题","修复 WhatsApp 12 小时制时间与 NNBSP 字符解析兼容性问题"]},{"type":"chore","items":["缓存 electron 与 electron-builder 二进制文件以加速 CI 打包"]}]},{"version":"0.16.0","date":"2026-04-10","summary":"新增私聊主动性分析视图,并修复模型编辑弹窗自定义模型丢失问题。","changes":[{"type":"feat","items":["私聊场景新增主动性分析视图","优化页脚区域展示与交互","优化语录模块下半部分逻辑"]},{"type":"fix","items":["修复第三方/本地服务编辑弹窗丢失多个自定义模型的问题"]}]},{"version":"0.15.0","date":"2026-04-08","summary":"大幅度优化搜索与查询性能,搜索工具支持自动携带上下文消息,优化AI模型配置并新增部分服务商,并支持 Linux 平台。","changes":[{"type":"feat","items":["增加查询缓存以加速访问","搜索工具支持自动携带上下文消息","重构模型配置逻辑","新用户首次启动时优先弹出语言选择弹窗","实验室新增基础调试工具","移除旧版提示词"]},{"type":"fix","items":["修复 Windows 浅色模式下标题栏按钮区域背景色与应用不一致问题","修复 CI 打包工作流中 Node 24 与 pnpm 对齐相关问题","补全工具调用显示名称的 i18n 翻译"]},{"type":"refactor","items":["优化 AI 配置弹窗代码组织"]},{"type":"chore","items":["升级到 Node 24","支持 Linux 打包"]},{"type":"docs","items":["更新文档"]}]},{"version":"0.14.2","date":"2026-04-07","summary":"本次更新聚焦 AI 对话体验升级,新增AI对话复制、优化 UI,并支持了 FTS5 全文搜索工具,精简部分工具搜索参数,并补强错误提示与测试能力。","changes":[{"type":"feat","items":["新增 7 天内记住助手选择功能","AI 对话支持一键复制消息内容","优化 AI 对话样式与整体交互体验","支持 FTS5 全文搜索并新增快速搜索工具","精简部分工具搜索参数,降低 token 开销","新增 Electron 应用 E2E 测试框架,支持端口管理与实例隔离"]},{"type":"fix","items":["完善 AI 对话错误提示,提升问题定位效率"]},{"type":"refactor","items":["整理 AI 对话模块代码结构","抽取会话分析页公共逻辑并统一头部文案"]},{"type":"test","items":["补充可复用的 E2E 启动器冒烟测试能力"]},{"type":"docs","items":["更新项目说明中的引导图片"]},{"type":"style","items":["统一部分代码格式,提升可读性"]}]},{"version":"0.14.1","date":"2026-04-02","summary":"本次更新聚焦首页架构调整,优化UI,以及提升 SQL 对话体验、统计读取性能与AI工具质量。","changes":[{"type":"feat","items":["优化总览页样式","优化 SQL 对话模块交互逻辑","将成员管理迁移到首页并调整相关 Tab 模块布局","新增部分 AI 工具并补充获取聊天概览能力","新增对话数据缓存管理模块,提升统计数据读取性能","完善版本日志弹窗的类型展示"]},{"type":"fix","items":["修复 SQL Lab 与摘要生成中 AI 错误被静默吞没的问题"]},{"type":"refactor","items":["重构 AI 工具分类体系,提升工具组织的可维护性"]},{"type":"chore","items":["废弃部分低价值 AI 工具,精简可用工具集"]}]},{"version":"0.14.0","date":"2026-03-28","summary":"支持通过 API 导入与查询聊天消息,优化总览和设置体验,并修复消息去重、AI 会话与趋势展示等问题。","changes":[{"type":"feat","items":["支持 API 导入","支持 API 导出","设置页支持选择默认进入的会话标签页","优化总览页面样式","优化整体界面样式与 API 服务设置界面","点击预设问题后可直接发起提问","优化身份卡片与助手选择交互"]},{"type":"fix","items":["修复消息去重误判,并统一空字符串去重语义","修复 AI 会话链路与前端 type-check 错误","增加默认 assistant 兜底逻辑,修复异常场景","修复每日消息趋势不展示的问题"]},{"type":"refactor","items":["清理 parser、worker、RAG 与 merger 的历史类型问题"]},{"type":"chore","items":["新增 assistant 配置生成技能"]}]},{"version":"0.13.0","date":"2026-03-16","summary":"AI对话支持助手模式,对话支持使用技能,输入框支持快捷选择,完善对话与设置界面,支持繁体中文与日语,部分 UI 调整,并修复多项稳定性问题。","changes":[{"type":"feat","items":["完成助手模式初版并完善助手逻辑与分析工具能力","上线助手市场与技能市场,聊天对话支持使用技能","支持 @ 选择成员协作","支持繁体中文与日语国际化","设置页面重构并优化部分 UI 细节","优化总览模块样式与对话界面体验","调整导出聊天记录的展示位置","移除旧版提示词系统与自定义筛选 AI 功能","切换页面时调用模型不再中断"]},{"type":"fix","items":["修复 Gemini API 配置问题","修复 NLP 停用词调用顺序导致的报错"]},{"type":"refactor","items":["重构 AIChat 组织结构","重构目录位置与工程结构"]},{"type":"docs","items":["更新用户协议与项目文档"]},{"type":"chore","items":["优化版本日志构建流程"]},{"type":"style","items":["统一代码格式与 lint 规则输出"]}]},{"version":"0.12.1","date":"2026-02-27","summary":"新增聊天记录预处理与调试能力,重构 Agent/LLM 架构,并修复国际化与 Windows 主题显示问题。","changes":[{"type":"feat","items":["新增聊天记录预处理管道","新增预处理设置界面与配置管理能力","Agent 支持基于会话的上下文时间线与运行状态展示","新增 AI 调试模式并增强日志可观测性"]},{"type":"fix","items":["修复英文设置下部分界面未国际化的问题","修复 Windows 下动态更新 overlay 颜色时主题不一致的问题"]},{"type":"refactor","items":["拆分 Agent 单体实现为模块化架构","工具系统重构为 AgentTool + TypeBox 结构并补齐 i18n","统一 LLM 访问层,收敛为 pi-ai 方案","重构数据流方向与 IPC 协议并完成前端适配","引入共享类型并优化 ChatStatusBar 国际化","将部分图表重构为插件化结构"]},{"type":"chore","items":["移除过度设计的 sessionLog 模块","移除 @ai-sdk 相关依赖与旧版 LLM 服务实现","临时隐藏向量模型配置入口","更新项目描述文案"]},{"type":"style","items":["执行 ESLint 自动格式化,统一代码风格"]}]},{"version":"0.11.2","date":"2026-02-15","summary":"优化聊天记录导入机制,优化管理页面,增强多平台聊天记录兼容性。","changes":[{"type":"feat","items":["增强 LINE 与 WhatsApp 解析器兼容格式","优化聊天记录嗅探层,支持轮询检测与回退机制","管理页面支持 Shift 多选","管理页面新增展示聊天摘要数量与 AI 对话数量","优化主页面布局,提升可用空间","优化 Windows 下右上角控制栏样式"]},{"type":"docs","items":["更新项目文档"]}]},{"version":"0.11.0","date":"2026-02-13","summary":"支持 Telegram 导入,优化增量导入体验,完善国际化配置,修复索引失效与页面闪烁等问题。","changes":[{"type":"feat","items":["完善 AI 调用、日志与主进程配置的国际化支持","支持 Telegram 聊天记录导入","优化增量导入交互与相关文案","优化打开协议的交互体验"]},{"type":"fix","items":["修复增量导入后索引失效的问题(resolve #81)","修复 WhatsApp 使用 iPhone 导出后无法识别的问题(resolve #82)","修复切换对话页面出现双闪的问题"]},{"type":"chore","items":["优化 TypeScript 配置","调整 i18n 构建配置","优化技能相关工程配置"]}]},{"version":"0.10.0","date":"2026-02-11","summary":"新增互动频率分析能力,优化会话查询链路,并修复增量索引与数据库扫描相关问题。","changes":[{"type":"feat","items":["新增互动频率分析视图,支持更直观地观察成员互动趋势","优化会话查询相关逻辑与处理链路"]},{"type":"fix","items":["修复增量更新后会话索引生成范围不准确的问题(fix #79)","修复迁移与会话扫描时误处理非聊天 SQLite 文件的问题"]},{"type":"refactor","items":["重构会话查询模块,提升查询结构可维护性"]},{"type":"chore","items":["移除 transformers 相关依赖并更新工程配置"]}]},{"version":"0.9.4","date":"2026-02-08","summary":"优化时间筛选与 AI 配置体验,对 API Key 进行本地加密,并修复 LINE 聊天记录解析问题。","changes":[{"type":"feat","items":["时间筛选支持更多灵活选择","API Key 支持本地加密存储","新用户首次进入不再显示版本日志","优化 AI 对话底部配置状态展示","数据目录迁移后支持立即重启软件"]},{"type":"fix","items":["修复 LINE 聊天记录解析问题"]},{"type":"docs","items":["更新项目文档"]}]},{"version":"0.9.3","date":"2026-02-03","summary":"支持自定义数据目录,修复大量已知问题。","changes":[{"type":"feat","items":["设置内新增数据目录位置配置","数据存储目录迁移逻辑优化","目录切换新增确认弹窗","解析逻辑优化(WeFlow / Echotrace)"]},{"type":"fix","items":["修复 Windows 自定义筛选时消息量过大导致崩溃的问题","修复第三方中转 API 调用 tool_call 导致对话异常结束的问题","修复部分 WhatsApp 聊天记录无法正确识别的问题","修复管理页面表头层级显示问题"]},{"type":"refactor","items":["重构 session 查询模块","完善迁移日志输出"]}]},{"version":"0.9.2","date":"2026-02-02","summary":"榜单改为图表展示,优化词云生成逻辑,优化本地 AI 推理模型,改进聊天记录筛选与日期选择器,并在启动后预加载关键路由提升体验。","changes":[{"type":"feat","items":["榜单重构为图表展示","词云效果优化","推理模型优化","消息会话搜索与筛选联动优化","日期选择器交互优化","启动后预加载关键路由"]},{"type":"chore","items":["preload 模块化拆分","优化 analytics 逻辑","升级 ESLint 并进行代码格式化"]}]},{"version":"0.9.1","date":"2026-01-30","summary":"支持了 LINE 聊天记录的导入,新增批量管理,聊天对话支持搜索,修复了一些已知问题。","changes":[{"type":"feat","items":["新增批量管理,支持批量删除和合并","支持聊天对话搜索","支持 LINE 聊天记录导入","兼容 WeFlow 导出的 JSON 格式","成员列表改为后端分页加载","优化部分文案"]},{"type":"fix","items":["修复 Windows 在更新时,Worker 占用导致软件无法关闭的问题"]}]},{"version":"0.9.0","date":"2026-01-28","summary":"支持了 NLP 分词能力,语录 Tab 下新增词云;新增视图功能,支持展示更多图表;支持了系统代理跟随;优化了部分页面和样式。","changes":[{"type":"feat","items":["用户选择器性能优化,支持虚拟加载","迁移榜单到视图Tab","引入分词能力,并新增词云子Tab","优化群聊页Tab文案","网络代理支持跟随系统代理","版本日志显示判断逻辑优化"]},{"type":"style","items":["markdown渲染样式优化"]}]},{"version":"0.8.0","date":"2026-01-26","summary":"新增了会话摘要与向量检索能力,每次版本更新后会弹窗展示更新内容,优化了部分界面交互,同时修复了一些已知问题。","changes":[{"type":"feat","items":["聊天会话支持摘要功能","新增批量生成会话摘要逻辑","支持向量模型配置和相关检索","导入聊天记录报错时记录更详细的日志","每次更新新版本后,自动打开版本日志供用户查看","首页新增Footer,展示常用链接","侧边栏移除帮助与反馈"]},{"type":"fix","items":["修复 shuakami-jsonl 解析错误(fix #50)"]}]},{"version":"0.7.0","date":"2026-01-23","summary":"优化了 AI 对话体验,改进了更新逻辑,图表方案使用 Echarts 替代 chart.js。","changes":[{"type":"feat","items":["优化更新逻辑","完善AI对话错误日志","聊天对话底部支持快速选择对话模型","优化默认提示词,带点幽默","Echarts 替换 chart.js","取消注册协议逻辑"]}]},{"version":"0.6.0","date":"2026-01-21","summary":"接入了 AI sdk,提高了 AI 对话 的稳定性;AI对话新增展示思考内容块;对部分样式进行了优化。","changes":[{"type":"feat","items":["新增定位日志功能","接入AI sdk","追加思考内容块","解决全局弹窗会被首页顶部拖拽区域遮挡的问题","优化windows下右上角关闭样式"]}]},{"version":"0.5.2","date":"2026-01-20","summary":"支持了合并导入,同时修复了一些问题。","changes":[{"type":"feat","items":["支持合并导入","主面板显示聊天记录起止时间","拖拽区域优化"]},{"type":"fix","items":["优化构建配置以解决macOS x64编译问题","消息记录查看器在windows下关闭按钮样式问题","macOS 打包时需在对应架构上编译(fixes #36)"]}]},{"version":"0.5.1","date":"2026-01-16","summary":"修复了一些问题。","changes":[{"type":"feat","items":["文案优化"]},{"type":"fix","items":["修复windows下关闭软件进程不退出的问题(#33)","修复数字输入框BUG (resolve #34)"]}]},{"version":"0.5.0","date":"2026-01-14","summary":"支持了 instagram 聊天记录导入;首页支持了批量导入;聊天页面支持了增量导入。","changes":[{"type":"feat","items":["支持 instagram 聊天记录导入","逻辑优化","系统提示词预设功能优化","支持增量导入","支持批量导入","样式优化","Windows 端支持原生窗口控制并实现主题同步 (#31)"]},{"type":"chore","items":["移除componenst.d.ts"]}]},{"version":"0.4.1","date":"2026-01-13","summary":"进行了一些样式和交互上的优化。","changes":[{"type":"feat","items":["提示词支持预览","优化AI对话状态栏","优化迁移表逻辑","侧边栏支持显示头像","样式优化","替换原生窗口控制栏","优化全局背景色","关闭软件时清理 Worker"]},{"type":"fix","items":["修复主题模式设置跟随系统不生效的问题","修复更新弹窗提示内容排版问题"]}]},{"version":"0.4.0","date":"2026-01-12","summary":"导入支持 shuakami-jsonl 格式;优化了 AI 对话,现在更加节省token了;导入聊天记录时支持生成会话索引,同时消息查看器也支持按索引查看;软件更新支持了加速镜像。","changes":[{"type":"feat","items":["兼容shuakami-jsonl","优化Loading","新增自定义筛选","重构预设词系统,支持通用预设词","精简系统提示词以节省token","新增会话相关function calling调用","处理消息跳转到上下文逻辑","聊天记录查看器支持查看会话索引和快速跳转","重构设置弹窗,新增会话索引设置","导入聊天记录支持生成会话索引","重构设置弹窗","优化基础组件交互样式","优化首页样式","优化更新加速逻辑","添加加速镜像"]}]},{"version":"0.3.1","date":"2026-01-09","summary":"已适配 Discord 导入;各个解析器支持了回复类型的导入;软件存储目录迁移至更规范的目录;导入时支持角色导入;对导入报错支持了更详细的诊断和提示;部分细节优化。","changes":[{"type":"feat","items":["数据表升级改为在主进程升级","自动检查更新时忽略beta版本","将数据存储目录迁移到userData下","各个解析器重新支持回复消息导入","支持平台消息id和回复id,同时进行表迁移","支持Tyrrrz/DiscordChatExporter消息格式导入","member表支持角色","增强chatlab格式检测行为","确保点击导入和拖入导入的逻辑一致","支持更详细的格式诊断"]},{"type":"fix","items":["修复部分用户platformId 为空的情况"]}]},{"version":"0.3.0","date":"2026-01-08","summary":"进行了全量的国际化支持,支持中英文切换;一些功能优化。","changes":[{"type":"feat","items":["SQL实验室支持导出","AI对话支持导出","完成最终国际化","AI模型错误时显式报错","SQL结果支持跳转消息查看器","优化系统prompt,支持prompt市场"]}]},{"version":"0.2.0","date":"2025-12-29","summary":"支持配置代理;导入时支持显示错误日志;优化部分界面交互,以及部分功能更新。","changes":[{"type":"feat","items":["消息管理器支持显示系统消息","优化导入逻辑,错误时会显示导入日志","WhatsApp支持英文格式消息导入","支持配置代理(resolve #7)","优化AI模型界面交互","添加用户配置API教程","1、新增GLM两个免费调用模型 2、新增豆包服务商和对应的最新模型","AI回复不输出think内容"]}]},{"version":"0.1.3","date":"2025-12-25","summary":"修复了一些问题。","changes":[{"type":"fix","items":["修复 Echotrace 解析器错误"]}]},{"version":"0.1.2","date":"2025-12-25","summary":"支持了深色模式;AI对话中,系统提示词中支持传递给用户身份。","changes":[{"type":"feat","items":["AI对话中,系统提示词中支持传递给用户身份","聊天记录查看器中,Owner显示在右侧","支持数据库升级","成员Tab中支持设置Owner视角","支持深色模式"]},{"type":"fix","items":["修复私聊误判为群聊的问题"]}]},{"version":"0.1.1","date":"2025-12-24","summary":"已适配 WhatsApp 聊天记录的导入;支持旧版 QQ 讨论组格式的分析。","changes":[{"type":"feat","items":["聊天会话底部显示token消耗","支持WhatsApp原生格式消息","支持旧版QQ txt版本的讨论组格式"]},{"type":"fix","items":["修复消息管理器层级过低的问题"]}]},{"version":"0.1.0","date":"2025-12-23","summary":"项目开源并发布。","changes":[{"type":"feat","items":["init"]}]}]'),oo=JSON.parse('[{"version":"0.25.1","date":"2026-06-08","summary":"Introduce a data directory compatibility gate to prevent older runtimes from writing to upgraded data directories, and add a CLI `ai chat` command.","changes":[{"type":"feat","items":["Add a data directory compatibility gate: after writing v6 schema data, record the minimum required runtime version to prevent older runtimes from corrupting upgraded directories","Verify data directory compatibility before each database operation and reject access when the version requirement is not met","Desktop: Check data directory compatibility at startup and show an error dialog before quitting if the requirement is not met","CLI: Check data directory compatibility at startup and exit immediately if the requirement is not met","CLI: Add the `ai chat` command for multi-turn AI conversations directly in the terminal"]},{"type":"fix","items":["Use the packaged app version (not Electron\'s dev-mode 0.0.0) when writing the compatibility gate, and require a valid runtime identity","Write the compatibility gate after database migrations and imports complete; abort startup migrations immediately on failure instead of failing silently","MCP: Check data directory compatibility at startup and exit early to prevent writing incompatible data","Desktop: Map compatibility gate errors to 409 responses in the HTTP API so the frontend can show an upgrade prompt","CLI: Normalize AI tool names and fix edge cases in the `ai chat` command"]},{"type":"refactor","items":["Align AI chat and segment identifier naming"]},{"type":"test","items":["Add test coverage for the parser, config migration, database migration, HTTP routes, and AI tools"]},{"type":"docs","items":["Add public documentation for the data directory compatibility gate, explaining version restrictions and upgrade rules when sharing a data directory"]}]},{"version":"0.25.0","date":"2026-06-07","summary":"AI chat can now generate charts through skills, with fixes for tool rounds, the desktop title bar, and the development service lifecycle.","changes":[{"type":"feat","items":["Add a slash-activated AI chart runtime that can generate and render ECharts charts in conversations","Improve the AI chart result experience with clearer rendering states and support for more chart types"]},{"type":"fix","items":["Increase the default AI Agent tool round limit to reduce early stops in complex tasks","Fix preset question chips and sidebar elements stacking incorrectly","CLI Web: Fix incomplete cleanup of the development backend lifecycle","Desktop: Register the chart tool for automatic skills so chart skills can run correctly","Desktop: Refresh the Windows title bar overlay cache after theme changes and smooth its display"]},{"type":"refactor","items":["Centralize the AI chart runtime policy and unify chart tool enablement across CLI and desktop","Deduplicate skill menu and Skill Manager logic"]},{"type":"docs","items":["Update the iMessage chat export guide"]},{"type":"chore","items":["Move maintainer-only skills out of the public repository into private maintenance context"]}]},{"version":"0.24.1","date":"2026-06-04","summary":"Adds in-app update notices and default AI preprocessing rules, with fixes for update badges and desensitization settings.","changes":[{"type":"feat","items":["Add an in-app update notice entry so the sidebar can surface the latest release details","Add default AI preprocessing settings for data cleaning, denoising, and desensitization","Support grouped AI desensitization rules to make built-in and custom rules easier to manage"]},{"type":"fix","items":["Fix incorrect New badges caused by failed update checks, stale update caches, and CLI Web development placeholder versions","Fix built-in desensitization rules not being applied before AI preprocessing runs","Fix empty desensitization preference overrides not clearing previously saved built-in rule switches","Fix legacy built-in desensitization rule overrides being lost during migration"]},{"type":"docs","items":["Add a public development guide covering local setup, directory responsibilities, and collaboration conventions"]},{"type":"ci","items":["Add Markdown changelog links to the release workflow"]}]},{"version":"0.24.0","date":"2026-06-03","summary":"Adds CLI Web authentication and data directory migration, unifies cross-platform HTTP routes, and fixes data migration, AI settings, and import refresh issues.","changes":[{"type":"feat","items":["Add Markdown generation for multilingual release notes","Allow legacy data migration prompts to be ignored from storage management","[CLI Web] Add a login page, token authentication, and persistent login state","[CLI Web] Support data directory migration from Web settings","[CLI] Add the --require-auth flag to protect /_web/* API access","[Desktop] Add an internal HTTP service so the frontend can use shared service adapters"]},{"type":"fix","items":["Fix multiple edge cases in data directory and database migrations to prevent missing legacy columns or failed reads after path changes","Fix legacy data migration prompts appearing incorrectly when no legacy data exists or after directory changes","Fix sidebar message counts not refreshing after incremental imports","Fix sidebar collapsed state being lost after refresh because it was stored only in sessionStorage","Fix fetch-models and validate buttons not being enabled when editing AI settings with a saved key","Fix stability issues in shared AI SSE streaming","Fix custom data source creation not requiring a token","[Desktop] Move chart plugin computation to a worker to avoid blocking the main thread"]},{"type":"refactor","items":["Extract the @openchatlab/http-routes shared package to unify HTTP route implementations across CLI Web and Desktop","Move AI settings, assistants, skills, conversations, streaming responses, cache, and merge APIs to shared HTTP routes","Trim the desktop IPC bridge by removing legacy AI, session index, LLM, Assistant, Skill, and NLP compatibility handlers","Unify the frontend service layer to reduce Electron/Web mode branching"]},{"type":"perf","items":["Minify the main process bundle and lazy-load the tiktoken rank table to reduce startup and package size pressure"]},{"type":"ci","items":["Fix the Windows release workflow zstd cache issue and add CLI update notes to release notes"]},{"type":"chore","items":["Align Node type-check projects to cover desktop and shared Node code"]}]},{"version":"0.23.1","date":"2026-06-01","summary":"Adds a clb command alias and port conflict detection with actionable guidance. Fixes daemon silent exit and several UI issues in dark mode.","changes":[{"type":"feat","items":["Improve the page header and toolbar layout","[CLI] Detect port conflicts before startup and display clear guidance (switch port or run lsof) instead of a delayed EADDRINUSE error","[CLI] Add clb as a short alias for the chatlab command"]},{"type":"fix","items":["Fix sidebar tooltip misplacement and Nuxt UI v4 API compatibility","Fix red background and incorrect z-index layering in the title bar under dark mode","Tighten AI message role parameter types and strengthen conversation test assertions","[CLI] Fix daemon entry point error that caused the service to exit silently after startup","[CLI] Improve error handling and messaging for port conflict detection","[CLI] Fix missing chatlab.fun reverse proxy route in web mode"]}]},{"version":"0.23.0","date":"2026-05-31","summary":"Overhauls message editing with a fork/regenerate model, adds per-model thinking level controls, unifies the CLI entry point, and fixes multiple reasoning detection and computation issues.","changes":[{"type":"feat","items":["Add a Fork button to AI replies to branch the conversation from any point into an independent session","Add a per-model thinking level selector in the status bar, with the choice remembered per model slot","Extend thinking level controls with default and auto options, covering Kimi, Doubao, Gemini, and more model families","Split the message analysis view into Type Analysis and Time Analysis tabs, each with enriched statistical insight cards","Add a confirmation dialog before regenerating all session indexes to prevent accidental data loss","Expand demo data to 4 files covering group and multiple private chat scenarios","【CLI】Add unified chatlab start command with --headless and --no-open flags","【CLI】Add daemon mode via chatlab start --daemon to install as a system service, with stop and status commands"]},{"type":"fix","items":["Fix multiple concurrency issues in message editing that could cause data loss or stale state","Fix thinking level and context window computation not using the active model ID","Fix reasoning detection failure for custom models with only chat capabilities by adding a heuristic fallback","Fix thinking being silently disabled for Kimi, Doubao, and similar models when the auto level is selected","【CLI】Fix the start command failing to launch the web development backend","【CLI】Fix daemon startup failure on Linux when the service path contains spaces"]},{"type":"refactor","items":["Refactor the message branching system to an edit-and-regenerate model, supporting both current-round-only and overwrite-all modes","Remove the manual Reasoning Model and Disable Thinking toggles in favor of automatic inference from model capabilities","Simplify the model switcher button UI and improve session index loading performance"]}]},{"version":"0.22.1","date":"2026-05-29","summary":"Adds session summary detail level settings, and fixes CLI Web batch summary freeze, AI config edit misidentification, and several API credential detection issues.","changes":[{"type":"feat","items":["Add session summary detail level setting with \\"Brief\\" and \\"Standard\\" strategies, configurable in AI settings"]},{"type":"fix","items":["Fix missing credential revalidation when changing Base URL in OpenAI-compatible mode","Fix incorrect API key detection logic to prevent stale key reuse","Fix stop button not responding immediately during batch summary generation","[CLI Web] Fix page freeze caused by batch summary generation","[CLI Web] Fix batch summary generation not honoring the selected session scope","[CLI Web] Fix third-party AI service misidentified as local when editing config"]},{"type":"refactor","items":["Move session index i18n keys from the storage namespace to the ai namespace"]},{"type":"style","items":["Improve chat record list density and message bubble styling"]},{"type":"docs","items":["Restructure documentation site navigation and move Quick Start under the Usage section"]}]},{"version":"0.22.0","date":"2026-05-26","summary":"This update improves the default UI styling, adds CLI Web update and storage management features, and strengthens home import, documentation, and multi-platform stability.","changes":[{"type":"feat","items":["Restructure the home import area into separate entry points, with new API import and auto-sync options","Bundle changelogs with the app to reduce runtime dependency on remote resources","【CLI Web】Add storage management in Web settings for viewing and managing data cache","【CLI】Add update checking and auto-update flow, with update checks exposed in CLI Web","【Docs】Add the standalone docs.chatlab.fun documentation site"]},{"type":"fix","items":["Restore missing quick start buttons on the home page","Fix incorrect i18n key paths and deprecated ECharts api.style() usage","Harden self-update and migration retry safety checks","【Desktop】Prevent unified migration from reverting data directory changes","【CLI Web】Remove the broken Update Now action when a new version is detected","【CLI Web】Disable the unavailable Web self-update execution path","【CLI Web】Fix file manager actions that relied on shell execution, improving compatibility and safety","【CLI Web】Keep the Web service running after data directory warnings","【CLI Web】Add compatibility shims for merge-related APIs","【CLI】Improve update checks with async caching, better keypress handling, and a development-mode bypass"]},{"type":"refactor","items":["Move documentation links to docs.chatlab.fun","【Settings】Move session index into AI settings and reorder the settings tabs"]},{"type":"style","items":["Improve sidebar density and increase tab selector contrast in dark mode"]},{"type":"docs","items":["Restructure the public documentation site and export guide"]},{"type":"chore","items":["Migrate workspace packages to ESM","Isolate documentation site workspace dependencies","Move release changelogs out of the docs directory"]}]},{"version":"0.21.1","date":"2026-05-23","summary":"Improve pull sync reliability and data safety, add an option to clean up imported chats when removing subscriptions, and fix UI animation and modal interaction issues.","changes":[{"type":"feat","items":["Auto-generate session index after pull sync","Add option to delete imported chats when removing a subscription","【CLI Web】Support per-version screenshots in the changelog modal and make Markdown list fixes opt-in","【MCP】Add icon and i18n support for the ci change type"]},{"type":"fix","items":["Fix potential data loss on small pages during pull sync and validate retry import results","Fix session index not auto-generating after pull sync completes","Fix sidebar session list not refreshing after pull completes or data is deleted","Fix inability to fetch all sessions when the remote server lacks pagination support","Improve pull sync retry logic and pagination strategy for better stability","Fix missing schema check in session existence validation that caused \'no such table\' errors","Fix forced session index modal unexpectedly closing on generation failure","Fix session index modal blocking the page when sessions are empty","【Desktop】Fall back to the package.json version when app.getVersion returns 0.0.0","【CLI Web】Sync icon now spins in-place instead of showing a separate loader"]},{"type":"docs","items":["Update Pull protocol docs to the since+nextSince pagination model"]}]},{"version":"0.21.0","date":"2026-05-22","summary":"This update adds MCP support, unifies multi-platform import and service layers, and improves Web, AI, sync, and release stability.","changes":[{"type":"feat","items":["Support a unified folder import flow across Electron and Web mode for multi-file chat history formats","【MCP】Add a standalone command entry and integrate MCP settings into the settings page","【MCP】Expand the server to 19 tools with compact text and JSON output formats"]},{"type":"fix","items":["Harden directory import path handling to reduce import failure risks","Fix a race condition that could occur when adding new subscriptions","Parse MiniMax streaming <think> content correctly as thinking events","【CLI Web】Fix incremental import support","【CLI Web】Keep session not-found and member history behavior aligned with the desktop app","【CLI Web】Fix the Node runtime configuration for the development server","【MCP】Fix native module ABI binding mismatches during startup"]},{"type":"refactor","items":["Unify the shared service layer for CLI Web and Electron to reduce duplicated route and IPC logic","【MCP】Trim the externally exposed tool registry to reduce tool schema cost for external AI agents","【MCP】Extract core MCP capabilities into a standalone shared package and simplify CLI and desktop integration","【MCP】Simplify settings page integration and reduce desktop-side helper complexity"]},{"type":"ci","items":["【CLI】Publish the npm package as part of the release workflow"]},{"type":"docs","items":["Document prefix and ordering rules for platform-specific changelog entries"]},{"type":"chore","items":["【CLI】【MCP】Complete the configuration and release notes needed for npm publishing"]}]},{"version":"0.20.0","date":"2026-05-19","summary":"This update unifies the core multi-platform architecture and improves AI, import, sync, and desktop build stability. It also prepares for the standalone Web, CLI, and MCP capabilities in the next release; please update before using the CLI so data can be pre-migrated.","changes":[{"type":"feat","items":["Add standalone CLI, HTTP API service, and MCP Server foundations for command-line use, Web, and AI agent integrations","Add a standalone Web build and one-command startup flow, including launching the Web UI from the CLI and opening the browser automatically","Support core Web-mode workflows, including chat import, demo import, session queries, member queries, search, and analysis","Connect Web mode to AI chat, model configuration, custom providers and models, context compression, and streamed event display","Upgrade imports to a shared streaming pipeline with multi-format parsing, incremental import, import analysis, and automatic session index generation","Add server-side capabilities for merge workflows, Markdown export, and session caching","Add the shared sync package and CLI automation support as groundwork for future multi-platform sync","Add backend persistence for preferences and automatically detect and migrate desktop data on first CLI run"]},{"type":"fix","items":["Fix Web-mode issues around session indexes, CORS proxying, demo safeguards, and runtime errors","Fix the app version showing as empty in Web mode","Fix AI Agent evidence retrieval, Web event streaming, and error formatting issues","Fix inconsistencies between sync display and import logic","Fix ESM module resolution in CLI development mode","Fix cases where the CLI could not find existing desktop data after installation","Fix data migration path mismatches after extracting the Electron package","Fix packaged Worker crashes caused by an indirect dependency on the electron module","Fix Electron build, dependency installation, and better-sqlite3 native rebuild issues"]},{"type":"refactor","items":["Move the project to a multi-platform workspace structure with apps/desktop, apps/cli, and shared packages","Extract parser, configuration, database adapters, queries, migrations, NLP, session cache, import, merge, export, and sync logic into shared modules","Extract AI Agent, tools, preprocessing, context compression, RAG, LLM configuration, assistant, and skill management into shared runtime capabilities","Unify AI tool naming, tool registration, and data access across Electron, CLI Web, and MCP","Unify core logic for data directories, message queries, member queries, session indexes, SQL execution, and import deduplication","Move the CLI from packages/server to apps/cli and complete the npm publishing build pipeline","Move frontend-only chart modules into src/features so packages only contain reusable shared libraries","Remove several Electron-side passthrough files and obsolete code to reduce duplicate implementations"]},{"type":"build","items":["Upgrade Vite and related build tooling","Add CLI tsup builds, Web asset bundling, and npm publishing configuration","Adjust Electron desktop build settings and remove Linux desktop build targets"]},{"type":"docs","items":["Document versioning, commit scope conventions, and related development notes"]}]},{"version":"0.19.0","date":"2026-05-06","summary":"This update adds AI context auto-compression, introduces demo data for new users, and improves model configuration and debugging.","changes":[{"type":"feat","items":["Add model context window presets and custom configuration.","Add AI chat context auto-compression and related settings.","Improve the context compression flow and status display.","Add raw data viewing in debug mode and record full LLM context.","Improve AI model configuration copy, forms, and settings displays.","Remove vector model configuration to simplify related settings.","Let new users try demo data directly from the empty state.","Migrate the project structure to pnpm workspace."]},{"type":"fix","items":["Fix the fast model follow-assistant mode using the wrong model in some cases.","Fix the demo button not appearing in the empty data state.","Fix a startup risk caused by undeclared axios imports in the main process."]}]},{"version":"0.18.4","date":"2026-04-29","summary":"This update optimizes model stability, supports fetching remote model lists, improves AI error detail presentation, and refines some styles.","changes":[{"type":"feat","items":["Support fetching remote model lists.","Auto-complete `/v1` for OpenAI-compatible API addresses with real-time preview support.","Improve the presentation of AI chat error details.","Refine parts of the display styling."]},{"type":"fix","items":["Fix some logic vulnerabilities."]},{"type":"chore","items":["Optimize the logic of the sync-changelog skill."]}]},{"version":"0.18.3","date":"2026-04-28","summary":"This release adds configurable quick tool entry placement, improves the default time filter, and fixes modal layering and data directory safety messaging.","changes":[{"type":"feat","items":["Add a setting for the placement of the quick tool entry.","Improve the default time filter experience.","Prevent data directories from being set inside the app installation directory."]},{"type":"fix","items":["Fix modal style override issues.","Fix modal layering issues in the settings page."]}]},{"version":"0.18.2","date":"2026-04-26","summary":"This release adds session type filters for subscriptions, paginated remote session discovery, and configurable per-request message limits.","changes":[{"type":"feat","items":["Add session type filtering and selection when subscribing to sessions.","Add paginated remote session discovery with on-demand loading.","Allow each data source to configure how many messages are fetched per request."]}]},{"version":"0.18.1","date":"2026-04-24","summary":"This release adds DeepSeek V4 support and a launch-at-startup option, improves the settings and overall UI experience, and fixes how links open in AI chat.<br/>Starting with this release, the project is officially moving to the ChatLab organization.","changes":[{"type":"feat","items":["Move the project to the ChatLab organization.","Refine the global visual style.","Improve how quick prompts are presented.","Improve how the settings modal opens.","Add launch-at-startup support.","Add support for the DeepSeek V4 model."]},{"type":"fix","items":["Fix links in AI chat so they open in the browser."]}]},{"version":"0.18.0","date":"2026-04-23","summary":"This release improves AI chat interactions, consolidates several analysis entry points, and makes data source sync and Windows updates more reliable.","changes":[{"type":"feat","items":["Improve AI assistant interactions.","Update the helper text in the Add Data Source form.","Add a Mini mode to the Tool Panel.","Move the chat history viewer into the Tool Panel.","Unify the relationship analysis tabs.","Move the Quotes module into Insights.","Move keyword analysis into Labs."]},{"type":"fix","items":["Fix existing type warnings.","Add a 60-second overlap window to Pull incremental sync to prevent missed messages.","Set Pull requests to `limit=1000` to avoid slowdowns when remote sources export too much data at once.","Fix a Windows update issue where an NSIS popup could interrupt silent installation."]}]},{"version":"0.17.5","date":"2026-04-21","summary":"This release focuses on a broad set of bug fixes to improve overall stability.","changes":[{"type":"feat","items":["Refined the visual style of relationship cards.","Replaced the `node-machine-id` dependency with native machine identity logic to improve API key update reliability on Linux.","Added an option to keep original records when merging chat histories.","Added a verification button next to API endpoints for preset and third-party services."]},{"type":"fix","items":["Hardened the data source migration strategy for safer migrations.","Fixed incorrect empty-state rendering for topics with very few messages.","Fixed local model validation failures.","Fixed an issue where the selected tab reset after switching conversations.","Fixed a white-screen issue in Automation pages after upgrading legacy `dataSources` structures."]}]},{"version":"0.17.4","date":"2026-04-19","summary":"Implemented the full Import API v1 protocol and added hierarchical data source management, now supporting automatic chat history sync.","changes":[{"type":"feat","items":["Implement the full Import API v1 protocol with hierarchical data source management."]}]},{"version":"0.17.3","date":"2026-04-17","summary":"This release adds a language preference tab for private chats, introduces sorting and filtering in the sidebar conversation list, improves AI provider and model configuration, and fixes a time filter reset issue.","changes":[{"type":"feat","items":["Add sorting and filtering to the conversation list.","Add a Language Preference tab for viewing language preferences.","Refine UI details for better visual consistency.","Add Anthropic as an AI provider option.","Allow selecting API interface types for third-party model services.","Allow custom display names for AI model configurations."]},{"type":"fix","items":["Fix an issue where the time filter reset to \\"All\\" after returning from Settings or the AI Chat page."]},{"type":"refactor","items":["Extract language preference definitions into shared types to reduce duplication."]}]},{"version":"0.17.2","date":"2026-04-15","summary":"This update adds cross-platform data merge and member message merge, strengthens dictionary and update security checks, improves the dark theme experience and logging, and fixes several bugs.","changes":[{"type":"feat","items":["Support merging member messages in member management.","Support merging chat data across platforms.","Add sorting support to selected table columns in data management.","Move the topic analysis entry point to Insights.","Add original file path recording for AI log files.","Improve dark theme colors for better visual comfort."]},{"type":"fix","items":["Fix dictionary refresh and merge ID collision issues.","Add runtime User-Agent headers for OpenAI-compatible requests.","Fix transparent background issues when exporting dark-theme screenshots.","Add SHA256 integrity verification for dictionary downloads.","Tighten remote config fetching and strengthen update installation confirmation."]},{"type":"chore","items":["Add deb package build support for ARM Linux.","Optimize the changelog sync flow."]},{"type":"docs","items":["Add Traditional Chinese documentation."]}]},{"version":"0.17.1","date":"2026-04-13","summary":"Refactored the Topics module with a new topic card view, improved word cloud keyword filtering and query caching, added remote tokenizer dictionary downloads with Traditional Chinese support, and improved WhatsApp detection.","changes":[{"type":"feat","items":["Refactor the Topics module and add a topic card view.","Add keyword filtering to the word cloud.","Support remote tokenizer dictionary downloads with Traditional Chinese dictionary included.","Improve query cache logic for faster lookups.","Standardize loading indicators across components.","Improve WhatsApp chat detection reliability."]},{"type":"ci","items":["Launch the official documentation site with automated sync and deployment."]}]},{"version":"0.17.0","date":"2026-04-12","summary":"This release strengthens WhatsApp import parsing and specified-format imports, while refreshing Overview cards and adding sharing, screenshots, and debugging utilities.","changes":[{"type":"feat","items":["Add a flexible WhatsApp V2 timestamp parser that adapts to export variants across regions.","Improve WhatsApp chat log detection.","Add specified-format import support.","Add a sharing card in the Messages tab.","Add quick debugging tools in DEBUG mode.","Improve the Overview identity card and unify time-range query logic.","Refactor Overview module cards and extract a theme color card with reserved palette modes.","Unify maximum card width and elevate Home tools into a global tools sidebar.","Add screenshot support for theme cards and disable mobile screenshot adaptation by default.","Remove diagnostic suggestions and add new prompts."]},{"type":"fix","items":["Fix inconsistency between WhatsApp time-parsing regex rules and line-matching regex rules.","Fix compatibility issues when parsing WhatsApp 12-hour time formats and NNBSP characters."]},{"type":"chore","items":["Cache electron and electron-builder binaries to speed up CI packaging."]}]},{"version":"0.16.0","date":"2026-04-10","summary":"This update adds a new initiative analysis view for private chats and fixes missing custom models in the model-edit dialog.","changes":[{"type":"feat","items":["Add a new initiative analysis view for private chats.","Improve the footer presentation and interactions.","Refine the logic in the lower section of the quotes module."]},{"type":"fix","items":["Fix an issue where multiple custom models could disappear in the third-party/local service edit dialog."]}]},{"version":"0.15.0","date":"2026-04-08","summary":"This release significantly improves search and query performance with context-aware search, streamlines AI model configuration with added providers, and adds Linux platform support.","changes":[{"type":"feat","items":["Add query caching to speed up access.","Enable automatic context carry-over in search tools.","Refactor the model configuration flow.","Show a language selection dialog on first launch for new users.","Add basic debugging tools in the Lab.","Remove legacy prompts."]},{"type":"fix","items":["Fix inconsistent title bar button background color in Windows light mode.","Fix CI packaging workflow alignment issues between Node 24 and pnpm.","Fill in missing i18n translations for tool invocation display names."]},{"type":"refactor","items":["Improve the code organization of the AI configuration modal."]},{"type":"chore","items":["Upgrade to Node 24.","Add Linux packaging support."]},{"type":"docs","items":["Update documentation."]}]},{"version":"0.14.2","date":"2026-04-07","summary":"This update improves the AI chat experience with copy support, cleaner UI, new FTS5 full-text search tools, leaner search parameters, and clearer error feedback with stronger test coverage.","changes":[{"type":"feat","items":["Add a 7-day memory for assistant selection.","Add one-click message copying in AI chat.","Improve AI chat styling and overall interaction flow.","Add FTS5 full-text search support with a quick search tool.","Trim search parameters in selected tools to reduce token usage.","Add an E2E testing framework for Electron apps with port management and instance isolation."]},{"type":"fix","items":["Improve AI chat error messages to make issues easier to diagnose."]},{"type":"refactor","items":["Reorganize the AI chat module code structure.","Extract shared logic from the session analysis page and unify header copy."]},{"type":"test","items":["Add reusable smoke-test coverage for the E2E app launcher."]},{"type":"docs","items":["Update intro images in project documentation."]},{"type":"style","items":["Standardize parts of the code formatting to improve readability."]}]},{"version":"0.14.1","date":"2026-04-02","summary":"This update refines the Home information architecture and UI, while improving SQL conversation UX, stats read performance, and AI tool quality.","changes":[{"type":"feat","items":["Improve the Overview page styling.","Improve interaction flows in the SQL conversation module.","Move member management to Home and adjust related tab layouts.","Add new AI tools, including a tool for chat overview retrieval.","Add a conversation data cache manager to speed up stats loading.","Improve changelog modal type presentation."]},{"type":"fix","items":["Fix silently swallowed AI errors in SQL Lab and summary generation."]},{"type":"refactor","items":["Refactor AI tool categorization to improve maintainability."]},{"type":"chore","items":["Deprecate low-value AI tools to keep the toolset focused."]}]},{"version":"0.14.0","date":"2026-03-28","summary":"Add API import/export and preset prompts, improve Overview and settings flows, and fix message deduplication, AI conversation flow, and daily trend display.","changes":[{"type":"feat","items":["Add API import","Add API export","Let preset questions send immediately when selected","Add a Settings option for the default tab when opening a chat session","Improve the Overview page styling","Refine the overall UI and the API service settings screen","Improve identity cards and assistant selection interactions"]},{"type":"fix","items":["Fix false positives in message deduplication and unify empty-string deduplication behavior","Fix AI conversation flow issues and frontend type-check errors","Add a fallback default assistant for edge cases","Fix daily message trends not rendering"]},{"type":"refactor","items":["Clean up legacy typing issues across the parser, worker, RAG, and merger modules"]},{"type":"chore","items":["Add a skill for generating assistant configurations"]}]},{"version":"0.13.0","date":"2026-03-16","summary":"Assistant Mode is here with skills in chat, quick input actions, improved chat and settings UI, Traditional Chinese and Japanese support, UI refinements, and multiple stability fixes.","changes":[{"type":"feat","items":["Shipped the first Assistant Mode release with improved assistant logic and analysis tools","Launched the Assistant and Skill marketplaces; chats can now use skills","Added @-mention member selection for collaboration","Added Traditional Chinese and Japanese localization","Refactored Settings and refined UI details","Improved Overview styling and chat experience","Moved the export chat history entry point","Removed the legacy prompt system and custom AI filtering","Model calls no longer stop when switching pages"]},{"type":"fix","items":["Fixed Gemini API configuration issues","Fixed an error caused by stopword processing order in NLP"]},{"type":"refactor","items":["Refactored AIChat organization","Restructured directory and project layout"]},{"type":"docs","items":["Updated the user agreement and project docs"]},{"type":"chore","items":["Improved the changelog build pipeline"]},{"type":"style","items":["Standardized code formatting and lint output"]}]},{"version":"0.12.1","date":"2026-02-27","summary":"Add chat-history preprocessing and AI debugging, refactor the Agent/LLM architecture, and fix i18n and Windows theme consistency issues.","changes":[{"type":"feat","items":["Add a chat-history preprocessing pipeline.","Add preprocessing settings UI and configuration management.","Add session-based context timelines and runtime status for the Agent.","Add an AI debug mode with improved log observability."]},{"type":"fix","items":["Fix partial UI text not being localized under English settings.","Fix overlay color updates not matching the active theme on Windows."]},{"type":"refactor","items":["Split the monolithic Agent implementation into a modular architecture.","Refactor the tool system to AgentTool + TypeBox and complete i18n support.","Unify the LLM access layer under the pi-ai implementation.","Refactor data-flow direction and IPC contracts, with corresponding frontend adaptation.","Introduce shared types and improve ChatStatusBar i18n.","Refactor parts of the chart stack into a plugin-based architecture."]},{"type":"chore","items":["Remove the over-engineered sessionLog module.","Remove @ai-sdk dependencies and legacy LLM service implementations.","Temporarily hide the vector model configuration entry.","Update project description copy."]},{"type":"style","items":["Run ESLint auto-fix to unify code style."]}]},{"version":"0.11.2","date":"2026-02-15","summary":"Improve chat import workflows and management tools, while enhancing cross-platform parser compatibility.","changes":[{"type":"feat","items":["Improve parser compatibility for LINE and WhatsApp formats.","Improve the chat sniffing layer with polling detection and a fallback strategy.","Support Shift multi-select in the Manage page.","Show chat summary count and AI conversation count in the Manage page.","Optimize the main-page layout to provide more usable space.","Improve top-right window controls styling on Windows."]},{"type":"docs","items":["Update project documentation."]}]},{"version":"0.11.0","date":"2026-02-13","summary":"Add Telegram import, improve incremental import UX, strengthen i18n coverage, and fix indexing and page flicker issues.","changes":[{"type":"feat","items":["Expand i18n support across AI calls, logs, and main-process configuration.","Add support for importing Telegram chat history.","Improve the incremental import flow and related copy.","Improve the interaction flow when opening protocol links."]},{"type":"fix","items":["Fix index invalidation after incremental imports (resolve #81).","Fix WhatsApp iPhone-exported chats not being recognized (resolve #82).","Fix a double-flicker issue when switching to the chat page."]},{"type":"chore","items":["Optimize TypeScript configuration.","Adjust i18n build configuration.","Improve skill-related project configuration."]}]},{"version":"0.10.0","date":"2026-02-11","summary":"Add interaction frequency analysis, improve the session query pipeline, and fix issues in incremental indexing and database scanning.","changes":[{"type":"feat","items":["Add an interaction frequency analysis view to make member interaction trends easier to understand.","Improve session query logic and processing flow."]},{"type":"fix","items":["Fix inaccurate session index generation scope after incremental updates (fix #79).","Fix non-chat SQLite files being incorrectly processed during migration and session scanning."]},{"type":"refactor","items":["Refactor the session query module to improve maintainability."]},{"type":"chore","items":["Remove transformers-related dependencies and update project configuration."]}]},{"version":"0.9.4","date":"2026-02-08","summary":"Improved time filtering and AI configuration UX, added local API key encryption, and fixed LINE chat log parsing.","changes":[{"type":"feat","items":["Add more flexible time-filtering options.","Store API keys with local encryption.","Hide release notes for first-time users.","Improve the configuration status display in the AI chat footer.","Allow the app to restart immediately after data directory migration."]},{"type":"fix","items":["Fix parsing issues for LINE chat logs."]},{"type":"docs","items":["Update project documentation."]}]},{"version":"0.9.3","date":"2026-02-03","summary":"Support custom data directories and fix many known issues.","changes":[{"type":"feat","items":["Add a data directory location setting","Optimize data directory migration logic","Add a confirmation dialog for directory switching","Improve parser logic (WeFlow / Echotrace)"]},{"type":"fix","items":["Fix crashes on Windows when custom filtering processes large message volumes","Fix conversations ending early when third-party relay APIs call tool_call","Fix some WhatsApp chat logs not being detected correctly","Fix manage page header stacking above settings"]},{"type":"refactor","items":["Refactor session query module","Improve migration logging"]}]},{"version":"0.9.2","date":"2026-02-02","summary":"Rankings are now displayed as charts; word cloud generation and the local AI inference model are optimized; chat record filtering and the date picker are improved; and key routes are preloaded after launch.","changes":[{"type":"feat","items":["Refactor rankings to chart-based views","Optimize word cloud output","Optimize inference models","Improve linked search + filter in chat records","Enhance date picker interactions","Preload key routes after app launch"]},{"type":"chore","items":["Modularize preload APIs","Optimize analytics logic","Upgrade ESLint and format code"]}]},{"version":"0.9.1","date":"2026-01-30","summary":"Add LINE chat import, batch management, and chat search, plus fixes for known issues.","changes":[{"type":"feat","items":["Add batch management with batch delete and merge","Support chat conversation search","Support LINE chat import","Compatible with WeFlow exported JSON format","Member list uses backend pagination","Improve some copy"]},{"type":"fix","items":["Fix Windows app not closing during updates due to Worker occupation"]}]},{"version":"0.9.0","date":"2026-01-28","summary":"Add NLP capabilities with a word cloud page under the Quotes tab; add a Views tab for more charts; support following system proxy settings; and refine some pages and styles.","changes":[{"type":"feat","items":["Optimize user selector performance with virtualized loading","Move rankings to the Views tab","Introduce tokenization and add a word cloud sub-tab","Improve group chat tab copy","Network proxy follows system proxy settings","Optimize release notes display logic"]},{"type":"style","items":["Improve Markdown rendering styles"]}]},{"version":"0.8.0","date":"2026-01-26","summary":"This update adds session summaries and vector retrieval; shows release notes after each update; improves parts of the UI; and fixes some known issues.","changes":[{"type":"feat","items":["Remove Help & Feedback from the sidebar","Add a footer on the home page with common links","Automatically open release notes after updating to a new version","Optimize batch session summary generation","Add session summaries in chat","Support vector model configuration and retrieval","Log more detailed errors when chat import fails"]},{"type":"fix","items":["Fix shuakami-jsonl parsing error (fix #50)"]}]},{"version":"0.7.0","date":"2026-01-23","summary":"Improve the AI chat experience, and refine update logic and charting.","changes":[{"type":"feat","items":["Improve update logic","Improve AI chat error logs","Quick model selection at the bottom of chat","Improve default prompts with a touch of humor","Replace chart.js with ECharts","Remove registration agreement logic"]}]},{"version":"0.6.0","date":"2026-01-21","summary":"Integrate AI SDK to improve AI chat stability; add a thinking content block; and refine some styles","changes":[{"type":"feat","items":["Add a log locator feature","Integrate AI SDK","Add a thinking content block","Fix global modals being covered by the home page drag area","Improve top-right close button style on Windows"]}]},{"version":"0.5.2","date":"2026-01-20","summary":"Support merged imports; fix several issues","changes":[{"type":"feat","items":["Support merged imports","Show chat log start/end time on the main panel","Improve the drag-and-drop area"]},{"type":"fix","items":["Improve build config to fix macOS x64 compilation","Fix close button style in the message viewer on Windows","Require building on the target architecture for macOS packaging (fixes #36)"]}]},{"version":"0.5.1","date":"2026-01-16","summary":"Fix several issues","changes":[{"type":"feat","items":["Improve copy"]},{"type":"fix","items":["Fix app process not exiting on Windows when closing (#33)","Fix number input bug (resolve #34)"]}]},{"version":"0.5.0","date":"2026-01-14","summary":"Support Instagram chat import; add batch and incremental import","changes":[{"type":"feat","items":["Support Instagram chat import","Logic improvements","Improve system prompt presets","Support incremental import","Support batch import","Style improvements","Support native window controls and theme sync on Windows (#31)"]},{"type":"chore","items":["Remove componenst.d.ts"]}]},{"version":"0.4.1","date":"2026-01-13","summary":"This release focuses on style and interaction improvements, with no major new features","changes":[{"type":"feat","items":["Prompt preview support","Improve AI chat status bar","Improve table migration logic","Show avatars in the sidebar","Style improvements","Replace native window controls bar","Improve global background color","Clean up Worker on app exit"]},{"type":"fix","items":["Fix theme-follow-system setting not working","Fix update modal layout issues"]}]},{"version":"0.4.0","date":"2026-01-12","summary":"Import now supports shuakami-jsonl; AI chat is optimized to save tokens; imports can generate session indexes and the viewer can jump by index; updates now support acceleration mirrors","changes":[{"type":"feat","items":["Compatibility with shuakami-jsonl","Improve loading state","Add custom filters","Refactor preset system with shared presets","Trim system prompts to save tokens","Add session-related function calling","Handle message jumps with context","Message viewer supports session index and quick jump","Refactor settings modal and add session index settings","Generate session index when importing chats","Refactor settings modal","Improve base component interactions","Improve home page styling","Improve update acceleration logic","Add acceleration mirrors"]}]},{"version":"0.3.1","date":"2026-01-09","summary":"Add Discord import support; parsers now import reply messages; storage moves to a more standard location; role import is supported; import errors provide more detailed diagnostics; and various improvements","changes":[{"type":"feat","items":["Move table upgrades to the main process","Ignore beta versions during auto-update checks","Move data storage to userData","Parsers re-enable reply message import","Support platform message IDs and reply IDs with table migration","Support Tyrrrz/DiscordChatExporter import format","Support roles in the member table","Enhance ChatLab format detection","Align click import and drag import behaviors","Provide more detailed format diagnostics"]},{"type":"fix","items":["Fix some users having empty platformId"]}]},{"version":"0.3.0","date":"2026-01-08","summary":"Add English support and various improvements","changes":[{"type":"feat","items":["SQL Lab supports export","AI chat supports export","Finalize localization","Show explicit errors for AI model failures","SQL results can jump to the message viewer","Improve system prompts and support a prompt marketplace"]}]},{"version":"0.2.0","date":"2025-12-29","summary":"Support proxy configuration; show error logs on import; improve some UI interactions; and add feature updates","changes":[{"type":"feat","items":["Message manager shows system messages","Improve import flow and show logs on errors","WhatsApp supports English-format message import","Support proxy configuration (resolve #7)","Improve AI model UI interactions","Add API tutorial for user configuration","Add two free GLM models; add Doubao provider and latest models","AI replies no longer output think content"]}]},{"version":"0.1.3","date":"2025-12-25","summary":"Fix several issues","changes":[{"type":"fix","items":["Fix Echotrace parser errors"]}]},{"version":"0.1.2","date":"2025-12-25","summary":"Add dark mode and allow passing user identity in system prompts during AI chats","changes":[{"type":"feat","items":["Allow passing user identity in system prompts during AI chats","Show Owner on the right in the message viewer","Support database upgrades","Allow Owner view in the Members tab","Support dark mode"]},{"type":"fix","items":["Fix private chats misidentified as group chats"]}]},{"version":"0.1.1","date":"2025-12-24","summary":"Support WhatsApp and legacy QQ chat analysis","changes":[{"type":"feat","items":["Show token usage at the bottom of chat sessions","Support native WhatsApp message format","Support legacy QQ txt group format"]},{"type":"fix","items":["Fix message manager z-index being too low"]}]},{"version":"0.1.0","date":"2025-12-23","summary":"Project launch","changes":[{"type":"feat","items":["Initial release"]}]}]'),io=JSON.parse('[{"version":"0.25.1","date":"2026-06-08","summary":"データディレクトリの互換性ゲートを導入し、古いランタイムによるデータの上書きを防止。CLI に ai chat コマンドを追加しました。","changes":[{"type":"feat","items":["データディレクトリ互換性ゲートを追加:v6 スキーマのデータ書き込み後に最低互換ランタイムバージョンを記録し、古いバージョンによる上書きを防ぎます","データベース操作前に互換バージョンを検証し、要件を満たさない場合はアクセスを拒否します","【デスクトップ】起動時にデータディレクトリの互換バージョンを確認し、要件を満たさない場合はエラーダイアログを表示して終了します","【CLI】起動時にデータディレクトリの互換バージョンを確認し、要件を満たさない場合は即座に終了します","【CLI】ai chat コマンドを追加し、ターミナルから AI とのマルチターン対話が可能になりました"]},{"type":"fix","items":["互換性ゲートの書き込みに Electron 開発モードの 0.0.0 ではなくパッケージ版バージョン番号を使用するよう修正し、ランタイム ID を必須化しました","データベース移行とインポート完了後に互換性ゲートを正しく書き込むよう修正し、起動時の移行失敗は即座にエラーとして報告するようにしました","【MCP】起動時に互換バージョンを確認し、要件未満の場合は早期終了して不整合なデータの書き込みを防ぎます","【デスクトップ】HTTP API で互換性ゲートエラーを 409 レスポンスにマッピングし、フロントエンドでアップグレード案内を表示しやすくしました","【CLI】AI ツール名を正規化し、ai chat コマンドのエッジケースを修正しました"]},{"type":"refactor","items":["AI チャットと segment 識別子の命名を統一しました"]},{"type":"test","items":["パーサー、設定移行、データベース移行、HTTP ルート、AI ツールのテストカバレッジを追加しました"]},{"type":"docs","items":["データディレクトリ互換性ゲートの公開ドキュメントを追加し、バージョン間でデータディレクトリを共有する際の制限とアップグレード手順を説明しました"]}]},{"version":"0.25.0","date":"2026-06-07","summary":"AI チャットでスキルからグラフを生成できるようになり、ツール実行回数、デスクトップのタイトルバー、開発サービスのライフサイクルに関する問題を修正しました。","changes":[{"type":"feat","items":["スラッシュ操作で起動できる AI グラフ実行環境を追加し、会話内で ECharts グラフを生成・表示できるようにしました","AI グラフ結果の表示体験を改善し、レンダリング状態と複数のグラフ種別への対応を追加しました"]},{"type":"fix","items":["AI Agent の既定のツール実行回数を増やし、複雑なタスクが途中で止まりにくくしました","プリセット質問チップとサイドバー要素の重なり順が崩れる問題を修正しました","【CLI Web】開発バックエンドのライフサイクル cleanup が不完全になる問題を修正しました","【デスクトップ】自動スキルでグラフツールが登録されず、グラフスキルを正しく実行できない問題を修正しました","【デスクトップ】Windows のタイトルバー overlay がテーマ切り替え後にキャッシュを更新せず、表示が不安定になる問題を修正しました"]},{"type":"refactor","items":["AI グラフ実行ポリシーを一元化し、CLI とデスクトップでのグラフツール有効化ルールを統一しました","スキルメニューと Skill Manager の重複ロジックを整理しました"]},{"type":"docs","items":["iMessage のチャット履歴エクスポート手順を更新しました"]},{"type":"chore","items":["公開リポジトリからメンテナー専用スキルを削除し、非公開のメンテナンスコンテキストで管理するようにしました"]}]},{"version":"0.24.1","date":"2026-06-04","summary":"アプリ内更新通知と AI 前処理のデフォルトルールを追加し、更新バッジと匿名化設定の保存に関する問題を修正しました。","changes":[{"type":"feat","items":["アプリ内の更新通知入口を追加し、サイドバーから最新バージョンの内容を確認できるようにしました","AI 前処理のデフォルト設定を追加し、データクリーニング、ノイズ除去、匿名化の基本ルールを自動で有効化しました","AI 匿名化ルールをグループ単位で管理できるようにし、組み込みルールとカスタムルールを扱いやすくしました"]},{"type":"fix","items":["更新チェック失敗時の結果、古いキャッシュ、CLI Web の開発用プレースホルダーバージョンによって New バッジが誤表示される問題を修正","AI 前処理の実行前に組み込み匿名化ルールが正しく適用されない問題を修正","匿名化ルールの設定を空の上書きとして保存した際、以前の組み込みルール切り替えが消えない問題を修正","旧形式の組み込み匿名化ルールを移行した後、上書き設定が失われる問題を修正"]},{"type":"docs","items":["公開開発ガイドを追加し、ローカル開発、ディレクトリの役割、協作ルールを整理しました"]},{"type":"ci","items":["リリースフローに Markdown 版の更新履歴リンクを追加しました"]}]},{"version":"0.24.0","date":"2026-06-03","summary":"CLI Web の認証とデータディレクトリ移行に対応し、複数環境の HTTP ルートを統一。データ移行、AI設定、インポート後の更新に関する問題を修正しました。","changes":[{"type":"feat","items":["多言語リリースノートから Markdown を生成できるようにしました","ストレージ管理で旧データ移行の案内を無視できるようにしました","【CLI Web】ログインページ、Token 認証、ログイン状態の保持に対応","【CLI Web】Web 設定からデータディレクトリを切り替え、移行できるようにしました","【CLI】/_web/* API へのアクセスを保護する --require-auth フラグを追加","【デスクトップ】内部 HTTP サービスを追加し、フロントエンドから共有サービスアダプター経由で共通 API を利用できるようにしました"]},{"type":"fix","items":["データディレクトリ移行とデータベース移行の複数の境界ケースを修正し、旧データベースの列不足やパス切り替え後の読み取り失敗を防止","旧データが存在しない場合やディレクトリ変更後にも移行案内が誤って表示される問題を修正","増分インポート後にサイドバーのメッセージ数が更新されない問題を修正","サイドバーの折りたたみ状態が sessionStorage のみに保存され、再読み込み後に失われる問題を修正","保存済みキーで AI 設定を編集する際、モデル取得と検証ボタンが正しく有効化されない問題を修正","共有 AI SSE ストリーミングの安定性に関する問題を修正","カスタムデータソース追加時に Token が必須になっていなかった問題を修正","【デスクトップ】グラフプラグインの計算を Worker に移し、メインスレッドのブロックを回避"]},{"type":"refactor","items":["@openchatlab/http-routes 共有パッケージを抽出し、CLI Web とデスクトップの HTTP ルート実装を統一","AI 設定、アシスタント、スキル、会話、ストリーミングレスポンス、キャッシュ、マージ関連 API を共有 HTTP ルートへ移行","デスクトップの IPC ブリッジを整理し、旧 AI、セッションインデックス、LLM、Assistant、Skill、NLP などの互換ハンドラーを削除","フロントエンドのサービス層を統一し、Electron / Web モード間の分岐を削減"]},{"type":"perf","items":["メインプロセスのビルド成果物を圧縮し、tiktoken rank table を遅延読み込みにして、起動時とパッケージサイズの負荷を軽減"]},{"type":"ci","items":["Windows リリースフローの zstd キャッシュ問題を修正し、CLI 更新に関するリリースノートを追加"]},{"type":"chore","items":["Node の型チェック対象を調整し、デスクトップと共有 Node コードをカバーするようにしました"]}]},{"version":"0.23.1","date":"2026-06-01","summary":"clb コマンドの短縮エイリアスを追加し、ポート競合を起動前に検出して案内するようにしました。デーモンのサイレント終了やダークモードのタイトルバーなど複数の問題を修正しました。","changes":[{"type":"feat","items":["ページ上部のタイトルバーとツールバーのレイアウトを改善","【CLI】起動前にポートの使用状況を確認し、競合時にポート変更や lsof コマンドを案内するよう変更(遅延エラーの解消)","【CLI】chatlab コマンドの短縮エイリアスとして clb を追加"]},{"type":"fix","items":["サイドバーの Tooltip 位置のズレと Nuxt UI v4 API の互換性問題を修正","ダークモード時のタイトルバーに赤い背景と重なり順の誤りが生じる問題を修正","AI メッセージのロールパラメータの型を整理し、会話テストのアサーションを強化","【CLI】デーモンの起動エントリが誤っていたため、サービス起動後にサイレント終了する問題を修正","【CLI】ポート競合検出のエラー処理とメッセージを改善","【CLI】Web モードで chatlab.fun へのリバースプロキシルートが欠落していた問題を修正"]}]},{"version":"0.23.0","date":"2026-05-31","summary":"メッセージ編集をフォーク/再生成モデルに刷新し、モデルごとの推論レベル設定を追加。CLIの起動コマンドを統一し、推論検出・計算に関する複数の問題を修正。","changes":[{"type":"feat","items":["AI返答の任意の箇所から会話を分岐できるFork機能を追加","ステータスバーに推論強度セレクターを追加し、モデルごとに思考レベルを記憶・切替可能に","推論レベル制御にdefault/autoオプションを追加し、Kimi・Doubao・Geminiなど多数のモデルファミリーに対応","メッセージ分析ビューを「タイプ分析」と「時間分析」の2タブに分割し、統計インサイトカードを強化","セッションインデックスの一括再生成前に確認ダイアログを追加し、既存サマリーの誤削除を防止","デモデータを4ファイルに拡充し、グループおよび複数のプライベートチャットシナリオをカバー","【CLI】統一起動コマンド chatlab start を追加。--headlessおよび--no-openフラグに対応","【CLI】chatlab start --daemonでシステムサービスとして登録するデーモンモードを追加。stopおよびstatusコマンドも利用可能"]},{"type":"fix","items":["メッセージ編集時にデータ損失やステート不整合を引き起こす可能性のある並行処理の問題を複数修正","思考レベルとコンテキストウィンドウの計算でアクティブなモデルIDが使用されない問題を修正","chat能力のみを持つカスタムモデルで推論検出が失敗する問題を修正し、ヒューリスティックフォールバックを追加","KimiやDoubaoなどのモデルでautoレベルを選択すると思考が無効化される問題を修正","【CLI】startコマンドがWebバックエンドを起動しない問題を修正","【CLI】Linuxでサービスパスにスペースが含まれる場合にデーモン起動が失敗する問題を修正"]},{"type":"refactor","items":["メッセージ分岐システムを編集・再生成モデルに刷新。現在のラウンドのみの更新と後続メッセージの上書きの2モードに対応","モデル設定の「推論モデル」「思考無効化」トグルを廃止し、モデルの能力に基づく自動推論に変更","モデル切替ボタンのUIを簡素化し、セッションインデックスの読み込みパフォーマンスを改善"]}]},{"version":"0.22.1","date":"2026-05-29","summary":"セッションサマリーの詳細レベル設定を追加。CLI Web のバッチサマリーフリーズ、AI設定編集時の誤判定、API認証情報の検出に関する複数の問題を修正。","changes":[{"type":"feat","items":["セッションサマリーの詳細レベル設定を追加。「簡潔」と「標準」の2種類から選択でき、AI設定で切り替え可能"]},{"type":"fix","items":["OpenAI互換モードでBase URLを変更した後に認証情報が再検証されない問題を修正","APIキー設定済みの判定ロジックを修正し、古いキーの誤再利用を防止","バッチサマリー生成中に停止ボタンが即座に反応しない問題を修正","【CLI Web】バッチサマリー生成によってページがフリーズする問題を修正","【CLI Web】バッチサマリー生成時に選択済みセッションの範囲が反映されない問題を修正","【CLI Web】AI設定の編集時にサードパーティサービスがローカルサービスと誤判定される問題を修正"]},{"type":"refactor","items":["セッションインデックスのi18nキーをstorageネームスペースからaiネームスペースへ移動"]},{"type":"style","items":["チャット記録リストの密度とメッセージバブルのスタイルを改善"]},{"type":"docs","items":["ドキュメントサイトのナビゲーション構造を整理し、クイックスタートをUsageセクションへ移動"]}]},{"version":"0.22.0","date":"2026-05-26","summary":"既定状態の UI スタイルを改善し、CLI Web の更新・ストレージ管理を追加。ホームのインポート、ドキュメントサイト、複数プラットフォームの安定性も改善しました。","changes":[{"type":"feat","items":["ホームのインポートエリアを入口別に整理し、API インポートと自動同期の入口を追加","更新履歴をアプリに同梱し、実行時のリモート依存を削減","【CLI Web】Web 設定でデータキャッシュを確認・管理できるストレージ管理機能を追加","【CLI】更新チェックと自動更新フローを追加し、CLI Web の更新チェックにも対応","【ドキュメント】独立したドキュメントサイト docs.chatlab.fun を追加"]},{"type":"fix","items":["ホームのクイックスタートボタンが表示されない問題を修正","i18n key パスの誤りと、非推奨の ECharts api.style() 使用を修正","自己更新とマイグレーション再試行フローの安全保護を強化","【デスクトップ】統一マイグレーションでデータディレクトリの変更が戻る可能性がある問題を修正","【CLI Web】新しいバージョン検出時に必ず失敗する「今すぐ更新」操作を表示しないように修正","【CLI Web】利用できない Web 自己更新の実行フローを無効化","【CLI Web】ファイル管理操作が shell 実行に依存していた問題を修正し、互換性と安全性を改善","【CLI Web】データディレクトリ警告後も Web サービスを継続できるように修正","【CLI Web】マージ関連 API の互換レイヤーを補完","【CLI】更新チェックの非同期キャッシュ、キー入力の操作性、開発モードのスキップ処理を改善"]},{"type":"refactor","items":["ドキュメントリンクを docs.chatlab.fun へ移行","【設定】セッションインデックスを AI 設定へ移動し、設定タブの並び順を調整"]},{"type":"style","items":["サイドバーの密度を調整し、ダークモードでのタブ選択 UI のコントラストを改善"]},{"type":"docs","items":["公開ドキュメントサイトの構成とエクスポート説明を整理"]},{"type":"chore","items":["ワークスペースパッケージを ESM に移行","ドキュメントサイトのワークスペース依存関係を分離","リリース更新履歴を docs ディレクトリ外へ移動"]}]},{"version":"0.21.1","date":"2026-05-23","summary":"Pull 同期の信頼性とデータの安全性を改善し、サブスクリプション削除時にインポート済みチャットをクリーンアップするオプションを追加。UI アニメーションとモーダルの操作に関する問題を修正しました。","changes":[{"type":"feat","items":["Pull 同期後にセッションインデックスを自動生成","サブスクリプション削除時にインポート済みチャットを削除するオプションを追加","【CLI Web】更新履歴モーダルでバージョンごとのスクリーンショットに対応、Markdown リスト修正をオプションに変更","【MCP】ci 変更タイプのアイコンと多言語対応を追加"]},{"type":"fix","items":["Pull 同期時の小ページでデータが失われる可能性がある問題を修正し、リトライインポート結果の検証を追加","Pull 同期完了後にセッションインデックスが自動生成されない問題を修正","Pull 完了またはデータ削除後にサイドバーのセッションリストが更新されない問題を修正","リモートサーバーがページネーション未対応の場合に全セッションを取得できない問題を修正","Pull 同期のリトライロジックとページネーション戦略を最適化し、安定性を向上","セッション存在チェック時のスキーマ検証が不足し、テーブル未検出エラーが発生する問題を修正","強制セッションインデックス生成モーダルが生成失敗時に予期せず閉じる問題を修正","セッションが空の状態でセッションインデックスモーダルがページをブロックする問題を修正","【デスクトップ】app.getVersion が 0.0.0 を返す場合に package.json のバージョンにフォールバック","【CLI Web】独立したローダーを表示せず、同期アイコンをその場で回転アニメーションに変更"]},{"type":"docs","items":["Pull プロトコルのドキュメントを since+nextSince ページネーションモデルに更新"]}]},{"version":"0.21.0","date":"2026-05-22","summary":"MCP 対応を追加し、複数プラットフォームのインポートとサービス層を統一しました。Web、AI、同期、リリースの安定性も改善しています。","changes":[{"type":"feat","items":["Electron と Web モードで共通のフォルダーインポートフローに対応し、複数ファイルのチャット履歴形式を扱えるように改善","【MCP】独立したコマンドエントリを追加し、設定画面から MCP 設定を扱えるように改善","【MCP】Server のツール数を 19 個に拡張し、コンパクトなテキスト出力と JSON 出力に対応"]},{"type":"fix","items":["ディレクトリインポートのパス処理を強化し、インポート失敗のリスクを低減","新しいサブスクリプション追加時に発生する可能性がある同期の競合を修正","MiniMax のストリーミング応答に含まれる <think> 内容を思考イベントとして正しく処理するように修正","【CLI Web】差分インポートが使えない問題を修正","【CLI Web】セッション未検出やメンバー履歴の挙動がデスクトップ版と一致しない問題を修正","【CLI Web】開発サーバーの Node ランタイム設定を修正","【MCP】起動時のネイティブモジュール ABI バインディング不一致を修正"]},{"type":"refactor","items":["CLI Web と Electron の共通サービス層を統一し、ルートと IPC に重複していた業務ロジックを削減","【MCP】外部に公開するツール登録を整理し、外部 AI Agent 向けのツール schema コストを削減","【MCP】中核機能を独立した共通パッケージへ抽出し、CLI とデスクトップ版の連携を簡素化","【MCP】設定画面への統合方法を整理し、デスクトップ側の補助コードを簡素化"]},{"type":"ci","items":["【CLI】リリースフローで npm パッケージをあわせて公開できるように改善"]},{"type":"docs","items":["プラットフォーム固有の changelog 項目に使う接頭辞と並び順のルールを補足"]},{"type":"chore","items":["【CLI】【MCP】npm 公開に必要な設定とリリース説明を整備"]}]},{"version":"0.20.0","date":"2026-05-19","summary":"今回の更新では、複数プラットフォーム向けの中核アーキテクチャを統一し、AI、インポート、同期、デスクトップ版ビルドの安定性を改善しました。次回バージョンで提供予定の独立した Web、CLI、MCP 機能に向けた準備も含まれるため、CLI を使う前に本バージョンへ更新してデータの事前移行を完了してください。","changes":[{"type":"feat","items":["独立した CLI、HTTP API サービス、MCP Server の基盤を追加し、コマンドライン、Web、AI エージェント連携に対応","独立した Web ビルドとワンコマンド起動を追加し、CLI から Web UI を起動してブラウザを自動で開けるように改善","Web モードでチャット履歴のインポート、Demo インポート、セッション照会、メンバー照会、検索、分析などの主要フローに対応","Web モードで AI チャット、モデル設定、カスタム Provider/Model、コンテキスト圧縮、ストリーミングイベント表示に対応","インポート処理を共通のストリーミングパイプラインへ更新し、複数形式の解析、差分インポート、インポート分析、セッションインデックスの自動生成に対応","マージ処理、Markdown エクスポート、セッションキャッシュに関するサーバー機能を追加","今後の複数プラットフォーム同期に向けて、共通同期パッケージと CLI 自動化サポートを追加","バックエンドでの設定永続化を追加し、CLI 初回起動時にデスクトップ版データを自動検出して移行できるように改善"]},{"type":"fix","items":["Web モードのセッションインデックス、CORS プロキシ、Demo 保護、実行時エラーに関する問題を修正","Web モードでアプリのバージョンが空表示になる問題を修正","AI Agent の根拠取得、Web 側イベントストリーム、エラー整形に関する問題を修正","同期表示とインポート処理の不整合を修正","CLI 開発モードでの ESM モジュール解決問題を修正","CLI インストール後に既存のデスクトップ版データを見つけられない場合がある問題を修正","Electron パッケージ分割後のデータ移行パス不整合を修正","パッケージ版で Worker スレッドが electron モジュールへ間接依存してクラッシュする問題を修正","Electron のビルド、依存関係のインストール、better-sqlite3 ネイティブモジュールの再ビルドに関する問題を修正"]},{"type":"refactor","items":["プロジェクトを複数プラットフォーム向けのワークスペース構成へ移行し、apps/desktop、apps/cli、複数の共通 packages に分割","パーサー、設定、データベースアダプター、クエリ、マイグレーション、NLP、セッションキャッシュ、インポート、マージ、エクスポート、同期処理を共通モジュールへ抽出","AI Agent、ツールシステム、前処理、コンテキスト圧縮、RAG、LLM 設定、アシスタント、スキル管理を共通ランタイム機能として抽出","Electron、CLI Web、MCP の AI ツール名、ツール登録、データアクセス方法を統一","データディレクトリ、メッセージ照会、メンバー照会、セッションインデックス、SQL 実行、インポート重複排除などの中核ロジックを統一","CLI を packages/server から apps/cli へ移行し、npm 公開向けのビルドフローを整備","フロントエンド専用のチャートモジュールを src/features へ移動し、packages には再利用可能な共通ライブラリのみを配置","Electron 側の単純な転送ファイルと不要になったコードを削除し、重複実装を削減"]},{"type":"build","items":["Vite などのビルドツールチェーンを更新","CLI の tsup ビルド、Web アセットのバンドル、npm 公開に必要な設定を追加","Electron デスクトップ版のビルド設定を調整し、Linux デスクトップ版のビルド対象を削除"]},{"type":"docs","items":["バージョン運用、コミット scope のルール、関連する開発ドキュメントを補足"]}]},{"version":"0.19.0","date":"2026-05-06","summary":"AI コンテキストの自動圧縮に対応し、Demo サンプルを追加しました。あわせてモデル設定とデバッグ体験を改善しています。","changes":[{"type":"feat","items":["モデルのコンテキストウィンドウのプリセットとカスタム設定に対応しました。","AI チャットのコンテキスト自動圧縮と関連設定に対応しました。","コンテキスト圧縮の流れとステータス表示を改善しました。","デバッグモードで元データを確認できるようにし、完全な LLM コンテキストの記録に対応しました。","AI モデル設定の文言、フォーム、設定画面の表示を改善しました。","ベクトルモデル設定を削除し、関連設定を整理しました。","新規ユーザーが空の状態から Demo サンプルを直接確認できるようにしました。","プロジェクト構成を pnpm workspace に移行しました。"]},{"type":"fix","items":["高速モデルがデフォルトアシスタントに追従する際、一部のケースで誤ったモデルを使う問題を修正しました。","データが空の状態で Demo ボタンが表示されない問題を修正しました。","メインプロセスで未宣言の axios に直接依存し、起動に失敗する可能性がある問題を修正しました。"]}]},{"version":"0.18.4","date":"2026-04-29","summary":"今回の更新では、モデルの安定性を最適化し、リモートのモデル一覧取得に対応しました。あわせてAIのエラー詳細表示と一部のスタイルを改善しました。","changes":[{"type":"feat","items":["リモートのモデル一覧取得に対応しました。","OpenAI 互換 API アドレスの /v1 自動補完とリアルタイムプレビューに対応しました。","AI チャットのエラー詳細表示を改善しました。","一部の表示スタイルを改善しました。"]},{"type":"fix","items":["一部のロジックの脆弱性を修正しました。"]},{"type":"chore","items":["同期ログスキルのロジックを最適化しました。"]}]},{"version":"0.18.3","date":"2026-04-28","summary":"クイックツール入口の配置設定に対応し、デフォルトの時間フィルターを改善しました。あわせて、モーダルの重なり順とデータ保存先の安全案内も修正しています。","changes":[{"type":"feat","items":["クイックツール入口の配置を設定できるようにしました。","デフォルトの時間フィルターの使い勝手を改善しました。","データ保存先をアプリのインストールディレクトリ内に設定できないようにしました。"]},{"type":"fix","items":["モーダルのスタイルが上書きされる問題を修正しました。","設定ページ内でモーダルが背面に隠れる重なり順の問題を修正しました。"]}]},{"version":"0.18.2","date":"2026-04-26","summary":"購読時の種類選択、リモート会話のページ分割取得、1 回あたりの取得件数設定に対応しました。","changes":[{"type":"feat","items":["会話を購読する際に、種類で絞り込んで選択できるようにしました。","リモート会話のページ分割取得と、必要に応じた追加読み込みに対応しました。","データソースごとに、1 回の取得で読み込むメッセージ件数を設定できるようにしました。"]}]},{"version":"0.18.1","date":"2026-04-24","summary":"DeepSeek V4 への対応と自動起動オプションを追加し、設定まわりと全体の UI 体験を改善しました。あわせて、AI チャット内リンクの開き方も修正しています。<br/>このバージョンから、プロジェクトは正式に ChatLab 組織へ移行します。","changes":[{"type":"feat","items":["プロジェクトを ChatLab 組織へ移行","全体のスタイル表現を改善","クイック質問の表示ロジックを改善","設定モーダルの開き方を改善","自動起動に対応","DeepSeek V4 モデルに対応"]},{"type":"fix","items":["AI チャット内のリンクがブラウザで開かない問題を修正"]}]},{"version":"0.18.0","date":"2026-04-23","summary":"AI チャットの操作性を改善し、複数の分析導線を整理するとともに、データソース同期と Windows 更新の安定性を向上しました。","changes":[{"type":"feat","items":["AI アシスタントの操作フローを改善","データソース追加フォームの案内文を調整","Tool Panel に Mini モードを追加","チャット履歴ビューアを Tool Panel へ移動","関係分析まわりのタブ構成を統一","Quotes モジュールを Insights へ移動","キーワード分析を Labs へ移動"]},{"type":"fix","items":["既存の型警告を修正","Pull の増分同期に 60 秒の重複ウィンドウを追加し、メッセージ取りこぼしを防止","Pull リクエストの `limit=1000` を固定し、リモートデータソースの一括出力による重さを抑制","Windows 更新時に NSIS ポップアップでサイレントインストールが中断される問題を修正"]}]},{"version":"0.17.5","date":"2026-04-21","summary":"本リリースでは多数の不具合を修正し、全体の安定性を改善しました。","changes":[{"type":"feat","items":["関係カードのスタイルを改善しました。","`node-machine-id` 依存をネイティブなマシン識別ロジックに置き換え、Linux での API キー更新の安定性を向上しました。","チャット履歴の統合時に、元データを保持するオプションを追加しました。","プリセットサービスとサードパーティサービスの API エンドポイント横に検証ボタンを追加しました。"]},{"type":"fix","items":["dataSource の移行戦略を見直し、移行の安全性を向上しました。","メッセージ数が少ない話題で空状態の表示が崩れる問題を修正しました。","ローカルモデルの検証が失敗する問題を修正しました。","会話を切り替えた後に選択中タブがリセットされる不具合を修正しました。","旧 dataSources 構造からのアップグレード後に自動化ページが白画面になる問題を修正しました。"]}]},{"version":"0.17.4","date":"2026-04-19","summary":"Import API v1 の完全な仕様実装と階層型データソース管理を追加し、チャット履歴の自動同期に対応しました。","changes":[{"type":"feat","items":["Import API v1 の完全な仕様と階層型データソース管理を実装"]}]},{"version":"0.17.3","date":"2026-04-17","summary":"今回の更新では、プライベートチャットに言語設定タブを追加し、サイドバーの会話リストで並び替えと絞り込みに対応。AIプロバイダーとモデル設定を拡充し、時間フィルターがリセットされる不具合を修正しました。","changes":[{"type":"feat","items":["会話リストで並び替えと絞り込みに対応","言語設定タブを追加し、言語設定を確認可能に","UIスタイルの細部を調整し、視覚的一貫性を向上","AIプロバイダーに Anthropic を追加","モデルのサードパーティサービスでインターフェース種別の選択に対応","AIモデル設定でカスタム名の設定に対応"]},{"type":"fix","items":["設定画面またはAIチャット画面から戻った際に、時間フィルターが「すべて」にリセットされる問題を修正"]},{"type":"refactor","items":["言語設定を共通型として切り出し、重複定義を削減"]}]},{"version":"0.17.2","date":"2026-04-15","summary":"今回の更新では、クロスプラットフォームのデータ統合とメンバーメッセージ統合を追加し、辞書と更新処理の安全性チェックを強化。ダークモード体験とログ機能を改善し、複数の不具合を修正しました。","changes":[{"type":"feat","items":["メンバー管理でメンバーメッセージの統合に対応","プラットフォームをまたいだチャットデータ統合に対応","データ管理で一部テーブル列のソートに対応","トピック分析の入口をインサイトモジュールへ移動","AI ログファイルの元パス記録を追加","ダークモードの配色を調整し、視認性を改善"]},{"type":"fix","items":["辞書更新時のリフレッシュ処理と統合 ID 衝突の問題を修正","OpenAI 互換リクエストに実行時 User-Agent ヘッダーを追加","ダークモードでのスクリーンショット書き出し時に背景が透過する問題を修正","辞書ダウンロードに SHA256 整合性検証を追加","リモート設定取得を厳格化し、更新インストール確認を強化"]},{"type":"chore","items":["ARM Linux 向け deb パッケージビルド対応を追加","更新ログ同期フローを最適化"]},{"type":"docs","items":["繁体字中国語ドキュメントを追加"]}]},{"version":"0.17.1","date":"2026-04-13","summary":"トピックモジュールを再設計してトピックカードを追加し、ワードクラウドのキーワードフィルタリングとクエリキャッシュを改善。リモート分かち書き辞書のダウンロードと繁体字中国語辞書に対応し、WhatsApp 検出ロジックも強化しました。","changes":[{"type":"feat","items":["トピックモジュールを再設計し、トピックカード表示を追加","ワードクラウドにキーワードフィルタリングを追加","リモート分かち書き辞書のダウンロードに対応し、繁体字中国語辞書を追加","クエリキャッシュロジックを改善","ローディング表示を統一","WhatsApp 検出の精度を向上"]},{"type":"ci","items":["公式ドキュメントサイトを開設し、自動同期・デプロイに対応"]}]},{"version":"0.17.0","date":"2026-04-12","summary":"今回の更新では、WhatsAppインポート解析と指定形式インポートを強化し、概要カード構成を刷新するとともに、共有・スクリーンショット・デバッグ機能を追加しました。","changes":[{"type":"feat","items":["WhatsApp V2 のタイムスタンプを柔軟に解析し、地域ごとのエクスポート差分に自動対応","WhatsApp チャット履歴の検出ロジックを改善","指定形式インポートに対応","メッセージタブに共有カードを追加","DEBUG モードにクイックデバッグツールを追加","概要のプロフィールカードを改善し、期間指定クエリのロジックを統一","概要モジュールのカード構成を再設計し、テーマカラーカードを分離して配色モード拡張に備えた","カード最大幅を統一し、ホームのツールをグローバルサイドバーへ昇格","テーマカードのスクリーンショットに対応し、モバイル向けスクリーンショット最適化を既定で無効化","診断提案を削除し、新しいヒント表示を追加"]},{"type":"fix","items":["WhatsApp の時刻解析正規表現と行マッチ正規表現の厳密さが一致しない問題を修正","WhatsApp の12時間表記時刻と NNBSP 文字の解析互換性問題を修正"]},{"type":"chore","items":["CI パッケージング高速化のため、electron と electron-builder のバイナリをキャッシュ"]}]},{"version":"0.16.0","date":"2026-04-10","summary":"今回の更新では、個別チャットに能動性分析ビューを追加し、モデル編集ダイアログでカスタムモデルが消える問題を修正しました。","changes":[{"type":"feat","items":["個別チャットに能動性分析ビューを追加","フッター領域の表示と操作性を改善","引用モジュール下部のロジックを改善"]},{"type":"fix","items":["サードパーティー/ローカルサービスの編集ダイアログで、複数のカスタムモデルが失われる問題を修正"]}]},{"version":"0.15.0","date":"2026-04-08","summary":"今回のリリースでは、検索・クエリ性能を大幅に改善し、検索ツールのコンテキスト自動引き継ぎ、AI モデル設定の最適化と一部プロバイダー追加、Linux 対応を行いました。","changes":[{"type":"feat","items":["クエリキャッシュを追加し、アクセス速度を向上","検索ツールでコンテキストの自動引き継ぎに対応","モデル設定ロジックを再構成","新規ユーザーの初回起動時に言語選択ダイアログを優先表示","ラボに基本的なデバッグツールを追加","旧プロンプトを削除"]},{"type":"fix","items":["Windows ライトモードでタイトルバー右上ボタン領域の背景色が不一致になる問題を修正","CI パッケージングワークフローにおける Node 24 と pnpm の整合性問題を修正","ツール呼び出し表示名の i18n 翻訳不足を補完"]},{"type":"refactor","items":["AI 設定モーダルのコード構成を改善"]},{"type":"chore","items":["Node 24 へアップグレード","Linux パッケージングに対応"]},{"type":"docs","items":["ドキュメントを更新"]}]},{"version":"0.14.2","date":"2026-04-07","summary":"今回の更新では、AI 会話体験を中心に改善し、会話コピー、UI 最適化、FTS5 全文検索ツール対応に加えて、検索パラメータの整理とエラー表示・テスト体制の強化を行いました。","changes":[{"type":"feat","items":["アシスタント選択を 7 日間記憶する機能を追加","AI 会話でメッセージのワンクリックコピーに対応","AI 会話のスタイルと全体の操作体験を改善","FTS5 全文検索に対応し、クイック検索ツールを追加","一部ツールの検索パラメータを整理し、token 消費を削減","Electron アプリ向けに、ポート管理とインスタンス分離に対応した E2E テスト基盤を追加"]},{"type":"fix","items":["AI 会話のエラー表示を改善し、原因の特定をしやすく修正"]},{"type":"refactor","items":["AI 会話モジュールのコード構成を整理","セッション分析ページの共通ロジックを抽出し、ヘッダー文言を統一"]},{"type":"test","items":["再利用可能な E2E ランチャーのスモークテストを追加"]},{"type":"docs","items":["プロジェクトドキュメント内の導入画像を更新"]},{"type":"style","items":["一部コードのフォーマットを統一し、可読性を向上"]}]},{"version":"0.14.1","date":"2026-04-02","summary":"今回の更新では、ホームの情報構成と UI を見直し、SQL 会話の操作性、統計読み込み性能、AI ツール品質を改善しました。","changes":[{"type":"feat","items":["概要ページのスタイルを改善","SQL 会話モジュールの操作フローを改善","メンバー管理をホームへ移し、関連タブ構成を調整","チャット概要取得を含む一部 AI ツールを追加","会話データのキャッシュ管理モジュールを追加し、統計読み込みを高速化","更新ログモーダルのタイプ表示を改善"]},{"type":"fix","items":["SQL Lab と要約生成で AI エラーが黙って握りつぶされる問題を修正"]},{"type":"refactor","items":["AI ツール分類を再設計し、保守性を向上"]},{"type":"chore","items":["利用価値の低い AI ツールを廃止し、ツールセットを整理"]}]},{"version":"0.14.0","date":"2026-03-28","summary":"APIのインポート/エクスポートとプリセット質問を追加し、概要画面と設定体験を改善。あわせて重複排除、AI会話フロー、日次メッセージ推移の表示問題を修正しました。","changes":[{"type":"feat","items":["APIインポートに対応","APIエクスポートに対応","プリセット質問を選ぶとそのまま送信できるように","設定画面で会話の既定タブを選択可能に","概要画面のスタイルを改善","全体のUIとAPIサービス設定画面を改善","プロフィールカードとアシスタント選択の操作感を改善"]},{"type":"fix","items":["メッセージ重複判定の誤検知を修正し、空文字列の重複排除ルールを統一","AI会話フローの不具合とフロントエンドのtype-checkエラーを修正","例外時のための既定assistantフォールバックを追加","日次メッセージ推移が表示されない問題を修正"]},{"type":"refactor","items":["parser、worker、RAG、merger に残っていた古い型の問題を整理"]},{"type":"chore","items":["assistant 設定生成スキルを追加"]}]},{"version":"0.13.0","date":"2026-03-16","summary":"AIチャットにアシスタントモードを追加し、チャットでスキル利用と入力欄のクイック選択に対応。会話/設定画面を改善し、繁体字中国語と日本語に対応、UIの調整と安定性修正を行いました。","changes":[{"type":"feat","items":["アシスタントモード初版をリリースし、アシスタントロジックと分析ツール機能を強化","アシスタントマーケットとスキルマーケットを公開、チャットでスキルを利用可能に","「@」でメンバー選択して協業できるように","繁体字中国語と日本語のローカライズに対応","設定画面を再構成し、一部 UI を改善","概要モジュールのスタイルと会話画面体験を改善","チャット履歴エクスポートの表示位置を調整","旧プロンプトシステムと AI のカスタムフィルタ機能を削除","ページ切替時にモデル呼び出しが中断しないように"]},{"type":"fix","items":["Gemini API の設定問題を修正","NLP のストップワード呼び出し順序によるエラーを修正"]},{"type":"refactor","items":["AIChat の構成をリファクタリング","ディレクトリ配置とプロジェクト構成を整理"]},{"type":"docs","items":["利用規約とプロジェクトドキュメントを更新"]},{"type":"chore","items":["バージョンログのビルドフローを改善"]},{"type":"style","items":["コードフォーマットと lint 規則の出力を統一"]}]},{"version":"0.12.1","date":"2026-02-27","summary":"チャット履歴の前処理とデバッグ機能を追加し、Agent/LLM アーキテクチャを再構成。あわせて国際化と Windows テーマ表示の不整合を修正しました。","changes":[{"type":"feat","items":["チャット履歴の前処理パイプラインを追加","前処理設定画面と設定管理機能を追加","Agent でセッション単位のコンテキストタイムラインと実行状態を表示","AI デバッグモードを追加し、ログの可観測性を向上"]},{"type":"fix","items":["英語設定時に一部 UI が未翻訳だった問題を修正","Windows で overlay 色を動的更新した際にテーマ表示が揃わない問題を修正"]},{"type":"refactor","items":["Agent の単一実装をモジュール構成へ分割","ツールシステムを AgentTool + TypeBox 構成へ再編し、i18n を補完","LLM アクセス層を統一し、pi-ai ベースへ集約","データフローと IPC 契約を見直し、フロントエンド側も対応","共有型を導入し、ChatStatusBar の国際化を改善","一部のチャートをプラグイン構成へ再編"]},{"type":"chore","items":["過剰設計だった sessionLog モジュールを削除","@ai-sdk 関連依存と旧 LLM サービス実装を削除","ベクトルモデル設定の入口を一時的に非表示化","プロジェクト説明文を更新"]},{"type":"style","items":["ESLint の自動修正を実行し、コードスタイルを統一"]}]},{"version":"0.11.2","date":"2026-02-15","summary":"チャット履歴の取り込みと管理画面を改善し、複数プラットフォームの履歴互換性を強化しました。","changes":[{"type":"feat","items":["LINE と WhatsApp パーサーの形式互換性を強化","チャット履歴の判定レイヤーを改善し、ポーリング検出とフォールバック機構に対応","管理画面で Shift 複数選択に対応","管理画面でチャット要約数と AI チャット数を表示","ホーム画面のレイアウトを見直し、使えるスペースを拡大","Windows の右上コントロールバーの見た目を改善"]},{"type":"docs","items":["プロジェクト文書を更新"]}]},{"version":"0.11.0","date":"2026-02-13","summary":"Telegram の取り込みに対応し、増分インポート体験と国際化設定を改善。あわせて索引不整合や画面のちらつきも修正しました。","changes":[{"type":"feat","items":["AI 呼び出し、ログ、メインプロセス設定まわりの国際化対応を拡充","Telegram チャット履歴のインポートに対応","増分インポートの操作フローと関連文言を改善","利用規約リンクを開く際の体験を改善"]},{"type":"fix","items":["増分インポート後に索引が無効になる問題を修正(resolve #81)","iPhone から書き出した WhatsApp 履歴を認識できない問題を修正(resolve #82)","チャット画面切り替え時の二重ちらつきを修正"]},{"type":"chore","items":["TypeScript 設定を最適化","i18n ビルド設定を調整","skill 関連の開発設定を整理"]}]},{"version":"0.10.0","date":"2026-02-11","summary":"やり取り頻度の分析機能を追加し、セッション検索の流れを改善。あわせて増分索引とデータベース走査まわりの問題を修正しました。","changes":[{"type":"feat","items":["やり取り頻度を分析できるビューを追加し、メンバー間の動きが見やすくなりました","セッション検索のロジックと処理フローを改善"]},{"type":"fix","items":["増分更新後にセッション索引の生成範囲が不正確になる問題を修正(fix #79)","移行やセッション走査時に非チャット用 SQLite ファイルを誤処理する問題を修正"]},{"type":"refactor","items":["セッション検索モジュールを再構成し、保守性を向上"]},{"type":"chore","items":["transformers 関連依存を削除し、開発設定を更新"]}]},{"version":"0.9.4","date":"2026-02-08","summary":"期間絞り込みと AI 設定まわりを改善し、API Key のローカル暗号化に対応。加えて LINE 履歴の解析問題を修正しました。","changes":[{"type":"feat","items":["期間絞り込みの選択肢をより柔軟に拡充","API Key のローカル暗号化保存に対応","初回利用ユーザーには更新履歴を表示しないよう変更","AI チャット下部の設定ステータス表示を改善","データディレクトリ移行後にすぐ再起動できるよう対応"]},{"type":"fix","items":["LINE チャット履歴の解析問題を修正"]},{"type":"docs","items":["プロジェクト文書を更新"]}]},{"version":"0.9.3","date":"2026-02-03","summary":"カスタムデータディレクトリに対応し、多数の既知問題を修正しました。","changes":[{"type":"feat","items":["設定画面にデータディレクトリ位置の設定項目を追加","データ保存先の移行ロジックを改善","ディレクトリ切り替え時の確認ダイアログを追加","パーサーロジックを改善(WeFlow / Echotrace)"]},{"type":"fix","items":["Windows で大量メッセージを絞り込むとクラッシュする問題を修正","外部中継 API が tool_call を返した際に会話が異常終了する問題を修正","一部の WhatsApp 履歴を正しく認識できない問題を修正","管理画面のヘッダー階層表示の問題を修正"]},{"type":"refactor","items":["session 検索モジュールを再構成","移行ログ出力を改善"]}]},{"version":"0.9.2","date":"2026-02-02","summary":"ランキングをグラフ表示へ刷新し、ワードクラウドやローカル AI 推論モデルを改善。履歴絞り込みと日付選択も見直し、起動後の主要ルート事前読込にも対応しました。","changes":[{"type":"feat","items":["ランキングをチャート表示へ刷新","ワードクラウドの見え方を改善","推論モデルを最適化","チャット履歴の検索と絞り込みの連携を改善","日付選択 UI の操作性を改善","起動後に主要ルートを先読み"]},{"type":"chore","items":["preload をモジュール化","analytics ロジックを改善","ESLint を更新し、コード整形を実施"]}]},{"version":"0.9.1","date":"2026-01-30","summary":"LINE 履歴の取り込み、バッチ管理、チャット検索に対応し、既知の問題もいくつか修正しました。","changes":[{"type":"feat","items":["一括管理を追加し、まとめて削除・結合に対応","チャット検索に対応","LINE チャット履歴のインポートに対応","WeFlow が出力する JSON 形式に対応","メンバー一覧をバックエンド分页読み込みへ変更","一部文言を改善"]},{"type":"fix","items":["Windows 更新時に Worker が残ってアプリを閉じられない問題を修正"]}]},{"version":"0.9.0","date":"2026-01-28","summary":"NLP 分かち書きに対応し、名言集タブにワードクラウドを追加。Views タブでより多くのグラフを表示できるようになり、システムプロキシ追従にも対応しました。","changes":[{"type":"feat","items":["ユーザーセレクターの性能を改善し、仮想リスト読み込みに対応","ランキングを Views タブへ移動","分かち書きを導入し、ワードクラウド用のサブタブを追加","グループチャットタブの文言を改善","ネットワークプロキシがシステム設定に追従","更新履歴の表示判定ロジックを改善"]},{"type":"style","items":["Markdown 表示スタイルを改善"]}]},{"version":"0.8.0","date":"2026-01-26","summary":"セッション要約とベクトル検索を追加し、更新後のリリースノート表示や一部 UI 体験も改善。あわせて既知の問題を修正しました。","changes":[{"type":"feat","items":["チャットセッションに要約機能を追加","セッション要約の一括生成ロジックを追加","ベクトルモデル設定と関連検索に対応","チャット履歴の取り込み失敗時に、より詳しいログを記録","新バージョン更新後に更新履歴を自動表示","ホームに共通リンク付き Footer を追加","サイドバーから Help & Feedback を削除"]},{"type":"fix","items":["shuakami-jsonl の解析エラーを修正(fix #50)"]}]},{"version":"0.7.0","date":"2026-01-23","summary":"AI チャット体験と更新処理を改善し、チャート基盤を chart.js から ECharts へ移行しました。","changes":[{"type":"feat","items":["更新ロジックを改善","AI チャットのエラーログを改善","チャット下部からモデルを素早く切り替え可能に","既定プロンプトを見直し、少しユーモアを加味","chart.js を ECharts に置き換え","登録規約ロジックを削除"]}]},{"version":"0.6.0","date":"2026-01-21","summary":"AI SDK を導入して AI チャットの安定性を高め、思考内容ブロックを追加。あわせて一部スタイルも調整しました。","changes":[{"type":"feat","items":["ログ位置を特定しやすくする機能を追加","AI SDK を導入","思考内容ブロックを追加","ホーム上部のドラッグ領域にグローバルモーダルが隠れる問題を解消","Windows 右上の閉じるボタンの見た目を改善"]}]},{"version":"0.5.2","date":"2026-01-20","summary":"結合インポートに対応し、いくつかの問題を修正しました。","changes":[{"type":"feat","items":["結合インポートに対応","メインパネルにチャット履歴の開始日時と終了日時を表示","ドラッグ&ドロップ領域を改善"]},{"type":"fix","items":["macOS x64 ビルド問題を解消するためビルド設定を改善","Windows のメッセージビューアで閉じるボタンの見た目が崩れる問題を修正","macOS パッケージング時は対象アーキテクチャ上でビルドが必要なよう修正(fixes #36)"]}]},{"version":"0.5.1","date":"2026-01-16","summary":"いくつかの問題を修正しました。","changes":[{"type":"feat","items":["文言を改善"]},{"type":"fix","items":["Windows でアプリを閉じてもプロセスが残る問題を修正(#33)","数値入力欄の不具合を修正(resolve #34)"]}]},{"version":"0.5.0","date":"2026-01-14","summary":"Instagram 履歴の取り込みに対応し、ホームでは一括インポート、チャット画面では増分インポートが使えるようになりました。","changes":[{"type":"feat","items":["Instagram チャット履歴のインポートに対応","各種ロジックを改善","システムプロンプトのプリセット機能を改善","増分インポートに対応","一括インポートに対応","スタイルを改善","Windows でネイティブウィンドウ操作とテーマ同期に対応(#31)"]},{"type":"chore","items":["componenst.d.ts を削除"]}]},{"version":"0.4.1","date":"2026-01-13","summary":"見た目と操作まわりを中心に改善しました。","changes":[{"type":"feat","items":["プロンプトのプレビューに対応","AI チャットのステータスバーを改善","マイグレーションテーブルのロジックを改善","サイドバーでアバター表示に対応","スタイルを改善","ネイティブウィンドウコントロールバーを置き換え","グローバル背景色を改善","アプリ終了時に Worker をクリーンアップ"]},{"type":"fix","items":["テーマ設定の「システムに従う」が効かない問題を修正","アップデートダイアログのレイアウト崩れを修正"]}]},{"version":"0.4.0","date":"2026-01-12","summary":"shuakami-jsonl の取り込みに対応し、AI チャットをより省 Token 化。取り込み時のセッション索引生成とビューアからの快速ジャンプにも対応し、アップデート高速化ミラーも追加しました。","changes":[{"type":"feat","items":["shuakami-jsonl に対応","Loading 表示を改善","カスタムフィルターを追加","プリセット文言システムを再構成し、共通プリセットに対応","Token 節約のためシステムプロンプトを簡潔化","セッション関連の function calling を追加","メッセージから前後文脈へジャンプする処理を追加","チャット履歴ビューアでセッション索引表示と高速ジャンプに対応","設定ダイアログを再構成し、セッション索引設定を追加","チャット履歴取り込み時にセッション索引を生成","設定ダイアログを再構成","基本コンポーネントの操作スタイルを改善","ホーム画面の見た目を改善","アップデート高速化ロジックを改善","高速化ミラーを追加"]}]},{"version":"0.3.1","date":"2026-01-09","summary":"Discord インポートに対応し、各パーサーで返信メッセージを取り込めるよう改善。保存先もより標準的な場所へ移し、取り込み診断も詳しくなりました。","changes":[{"type":"feat","items":["テーブル更新処理をメインプロセス側へ移動","自動更新確認時に beta 版を無視","データ保存先を userData 配下へ移動","各パーサーで返信メッセージ取り込みを再対応","プラットフォームメッセージ ID と返信 ID に対応し、同時にテーブル移行も実施","Tyrrrz/DiscordChatExporter 形式の取り込みに対応","member テーブルでロールに対応","ChatLab 形式の検出挙動を強化","クリック取り込みとドラッグ取り込みの挙動を統一","より詳細な形式診断に対応"]},{"type":"fix","items":["一部ユーザーで platformId が空になる問題を修正"]}]},{"version":"0.3.0","date":"2026-01-08","summary":"国際化対応をひと通り整え、中国語と英語の切り替えに対応。あわせていくつかの機能も改善しました。","changes":[{"type":"feat","items":["SQL ラボのエクスポートに対応","AI チャットのエクスポートに対応","国際化対応をひと通り完了","AI モデルエラー時に明示的なエラーを表示","SQL 結果からメッセージビューアへジャンプ可能に","システム prompt を改善し、prompt マーケットに対応"]}]},{"version":"0.2.0","date":"2025-12-29","summary":"プロキシ設定に対応し、インポート時のエラーログ表示を追加。あわせて UI 操作と一部機能を改善しました。","changes":[{"type":"feat","items":["メッセージマネージャーでシステムメッセージ表示に対応","インポート処理を改善し、エラー時にログを表示","WhatsApp の英語形式メッセージ取り込みに対応","プロキシ設定に対応(resolve #7)","AI モデル画面の操作性を改善","ユーザー設定 API のチュートリアルを追加","無料の GLM モデル 2 種を追加し、Doubao プロバイダーと最新モデルを追加","AI 応答で think 内容を出力しないよう調整"]}]},{"version":"0.1.3","date":"2025-12-25","summary":"いくつかの問題を修正しました。","changes":[{"type":"fix","items":["Echotrace パーサーの不具合を修正"]}]},{"version":"0.1.2","date":"2025-12-25","summary":"ダークモードに対応し、AI チャットのシステムプロンプトでユーザー情報を渡せるようになりました。","changes":[{"type":"feat","items":["AI チャットのシステムプロンプトでユーザー情報を受け渡し可能に","チャット履歴ビューア右側に Owner を表示","データベース更新に対応","メンバータブで Owner 視点の設定に対応","ダークモードに対応"]},{"type":"fix","items":["個人チャットをグループチャットと誤判定する問題を修正"]}]},{"version":"0.1.1","date":"2025-12-24","summary":"WhatsApp チャット履歴の取り込みに対応し、旧版 QQ 討論組形式の分析も可能になりました。","changes":[{"type":"feat","items":["チャットセッション下部に Token 使用量を表示","WhatsApp ネイティブ形式メッセージに対応","旧版 QQ txt 討論組形式に対応"]},{"type":"fix","items":["メッセージマネージャーの z-index が低すぎる問題を修正"]}]},{"version":"0.1.0","date":"2025-12-23","summary":"プロジェクトを公開し、初回リリースしました。","changes":[{"type":"feat","items":["init"]}]}]'),no=JSON.parse('[{"version":"0.25.1","date":"2026-06-08","summary":"新增資料目錄相容性門禁,防止舊版執行環境誤寫已升級的資料;並新增 CLI ai chat 指令。","changes":[{"type":"feat","items":["新增資料目錄相容性門禁:寫入 v6 schema 資料後自動記錄最低可存取的執行環境版本,防止舊版本誤寫已升級的資料目錄","資料庫操作前校驗資料目錄相容版本,不符合要求時拒絕存取","【桌面版】啟動時校驗資料目錄相容版本,不符合時顯示提示視窗並結束","【CLI】啟動時校驗資料目錄相容版本,不符合時立即結束","【CLI】新增 ai chat 指令,支援在終端機與 AI 進行多輪對話"]},{"type":"fix","items":["改用打包版本號(而非 Electron 開發模式回報的 0.0.0)寫入相容性門禁,並強制要求執行環境身分識別","資料庫遷移與匯入完成後正確寫入相容性門禁;啟動遷移失敗時立即回報錯誤,不再靜默忽略","【MCP】啟動時主動校驗資料目錄相容性,版本不符時提前結束,避免寫入不相容資料","【桌面版】HTTP API 將相容性門禁錯誤對應為 409 回應,方便前端顯示升級提示","【CLI】規範化 AI 工具名稱,修正 ai chat 指令的邊界處理問題"]},{"type":"refactor","items":["統一 AI 對話與 segment 識別碼的命名規範"]},{"type":"test","items":["補充解析器、設定遷移、資料庫遷移、HTTP 路由與 AI 工具的測試覆蓋"]},{"type":"docs","items":["新增資料目錄相容性門禁公開文件,說明多版本共用資料目錄的限制與升級規則"]}]},{"version":"0.25.0","date":"2026-06-07","summary":"AI 對話現在可透過技能產生圖表,並修正工具輪次、桌面標題列與開發服務生命週期問題。","changes":[{"type":"feat","items":["新增以斜線指令觸發的 AI 圖表執行環境,可在對話中產生並渲染 ECharts 圖表","改善 AI 圖表結果呈現,補上更清楚的渲染狀態與多種圖表類型支援"]},{"type":"fix","items":["提高 AI Agent 預設工具呼叫輪次,減少複雜任務過早停止的情況","修正預設問題標籤與側邊欄元素的層疊順序異常","【CLI Web】修正開發後端生命週期清理不完整的問題","【桌面版】修正自動技能未註冊圖表工具,導致圖表技能無法完整執行的問題","【桌面版】修正 Windows 標題列覆蓋層在切換主題後快取未更新與顯示不順的問題"]},{"type":"refactor","items":["集中管理 AI 圖表執行策略,統一 CLI 與桌面版的圖表工具啟用規則","精簡技能選單與 Skill Manager 的重複邏輯"]},{"type":"docs","items":["更新 iMessage 聊天記錄匯出指南"]},{"type":"chore","items":["移除公開儲存庫中的維護者專用技能目錄,改由私有維護上下文管理"]}]},{"version":"0.24.1","date":"2026-06-04","summary":"新增應用內更新提醒與 AI 預處理預設規則,並修正更新標記與脫敏設定保存問題。","changes":[{"type":"feat","items":["新增應用內更新提醒入口,側邊欄可顯示最新版本說明","新增 AI 預處理預設設定,自動啟用資料清理、去噪與脫敏等基礎規則","支援以群組管理 AI 脫敏規則,方便維護內建與自訂規則"]},{"type":"fix","items":["修正更新檢查失敗結果、舊版快取與 CLI Web 開發占位版本造成錯誤 New 標記的問題","修正 AI 預處理執行前未正確套用內建脫敏規則的問題","修正脫敏規則偏好以空覆蓋儲存時,無法清除舊內建規則開關的問題","修正舊版內建脫敏規則遷移後覆蓋設定遺失的問題"]},{"type":"docs","items":["新增公開開發指南,補充本機開發、目錄職責與協作規範"]},{"type":"ci","items":["發布流程新增 Markdown 版本更新記錄連結"]}]},{"version":"0.24.0","date":"2026-06-03","summary":"新增 CLI Web 驗證與資料目錄遷移能力,統一多端 HTTP 路由,並修正資料遷移、AI 設定與匯入刷新問題。","changes":[{"type":"feat","items":["新增多語版本更新記錄的 Markdown 產生能力","支援在儲存空間管理中忽略舊資料遷移提示","【CLI Web】新增登入頁、Token 驗證與記住登入狀態","【CLI Web】支援資料目錄遷移流程,可在 Web 設定中切換並遷移資料目錄","【CLI】新增 --require-auth 參數,用於保護 /_web/* API 存取","【桌面端】新增內部 HTTP 服務,讓前端可透過統一服務轉接層使用共享介面"]},{"type":"fix","items":["修正資料目錄遷移與資料庫遷移流程中的多個邊界情境,避免舊資料庫欄位缺失或路徑切換後讀取失敗","修正舊資料不存在或目錄變更後,資料遷移提示仍錯誤顯示的問題","修正增量匯入後側邊欄訊息數量未更新的問題","修正側邊欄收合狀態只存於 sessionStorage,導致重新整理後遺失的問題","修正編輯 AI 設定且已儲存金鑰時,拉取模型與驗證按鈕未正確啟用的問題","修正 AI 共享 SSE 串流回應的穩定性問題","修正新增自訂資料來源時未強制填寫 Token 的問題","【桌面端】將圖表外掛運算移至 Worker,避免阻塞主執行緒"]},{"type":"refactor","items":["抽出 @openchatlab/http-routes 共享套件,統一 CLI Web 與桌面端的 HTTP 路由實作","將 AI 設定、助手、技能、對話、串流回應、快取與合併相關 API 遷移到共享 HTTP 路由","精簡桌面端 IPC 橋接層,移除舊版 AI、對話索引、LLM、Assistant、Skill、NLP 等相容處理程式","統一前端服務層,減少 Electron 與 Web 模式的分支實作"]},{"type":"perf","items":["壓縮主程序建置產物,並延遲載入 tiktoken rank table,降低啟動與打包體積壓力"]},{"type":"ci","items":["修正 Windows 發布流程中的 zstd 快取問題,並補充 CLI 更新發布說明"]},{"type":"chore","items":["調整 Node 型別檢查專案設定,涵蓋桌面端與共享 Node 程式碼"]}]},{"version":"0.23.1","date":"2026-06-01","summary":"新增 clb 短別名與連接埠預檢提示,修正背景程式靜默退出及深色模式標題列等多處問題。","changes":[{"type":"feat","items":["最佳化頁面頂部標題列與工具列排版","【CLI】啟動前主動偵測連接埠佔用,被佔用時提示切換埠號或執行 lsof,避免延遲報錯","【CLI】新增 clb 作為 chatlab 指令的短別名"]},{"type":"fix","items":["修正側邊欄 Tooltip 位置異常及 Nuxt UI v4 API 相容問題","修正標題列在深色模式下出現紅色背景與層疊順序錯誤","規範 AI 訊息角色參數型別,強化對話測試斷言","【CLI】修正背景程式啟動入口錯誤導致服務啟動後靜默退出的問題","【CLI】改善連接埠偵測的錯誤處理與提示訊息","【CLI】修正 Web 模式下缺少 chatlab.fun 反向代理路由的問題"]}]},{"version":"0.23.0","date":"2026-05-31","summary":"重構訊息編輯互動,新增推理等級按模型獨立設定,統一 CLI 啟動入口,修正多處推理識別與計算問題。","changes":[{"type":"feat","items":["新增訊息分叉(Fork)功能,可從任意 AI 回覆處建立獨立分支對話","狀態列新增推理強度選擇器,支援為每個推理模型個別記憶並切換思維等級","推理等級控制新增 default/auto 選項,擴展對 Kimi、Doubao、Gemini 等更多模型系列的支援","訊息分析檢視拆分為「類型分析」與「時間分析」兩個分頁,提供豐富統計洞察卡片","批次重建對話索引前新增確認彈窗,防止誤操作清空現有摘要","示範資料擴充為 4 個檔案,涵蓋群組及多個私訊場景","【CLI】新增統一啟動指令 chatlab start,支援 --headless 和 --no-open 參數","【CLI】新增背景服務模式,支援 chatlab start --daemon 安裝為系統服務,以及 stop/status 指令"]},{"type":"fix","items":["修正訊息編輯可能導致資料遺失與狀態錯誤的多個並發安全問題","修正思維等級與上下文視窗計算未使用當前啟用模型 ID 的問題","修正自訂模型僅含 chat 能力時推理識別失敗,補全啟發式回退邏輯","修正 Kimi、Doubao 等模型在選擇 auto 思維等級時被靜默停用的問題","【CLI】修正 start 指令未啟動 Web 開發後端的問題","【CLI】修正 Linux 上服務路徑含空格時背景服務啟動失敗的問題"]},{"type":"refactor","items":["重構訊息分支系統為「編輯並重新產生」模型,支援僅更新當前輪或覆蓋後續訊息兩種模式","移除模型設定中的「推理模型」與「停用思維模式」開關,改為依能力自動推斷","簡化模型切換按鈕介面,優化對話索引載入效能"]}]},{"version":"0.22.1","date":"2026-05-29","summary":"新增對話摘要詳細程度設定,修正 CLI Web 批次摘要凍結、AI 設定編輯誤判及多項憑證偵測問題。","changes":[{"type":"feat","items":["新增對話摘要詳細程度設定,支援「簡潔」與「標準」兩種策略,可在 AI 設定中切換"]},{"type":"fix","items":["修正 OpenAI 相容模式下變更 Base URL 後未重新驗證憑證的問題","修正 API 金鑰已設偵測邏輯錯誤,避免舊金鑰被誤用","修正批次產生摘要時點擊停止需等待當前請求完成才回應的問題","【CLI Web】修正批次產生摘要導致頁面凍結的問題","【CLI Web】修正批次產生摘要時未遵循已選取工作階段範圍的問題","【CLI Web】修正編輯 AI 設定時第三方服務被誤判為本機服務的問題"]},{"type":"refactor","items":["將工作階段索引的國際化 key 從 storage 命名空間遷移至 ai 命名空間"]},{"type":"style","items":["最佳化聊天記錄清單密度與訊息氣泡樣式"]},{"type":"docs","items":["重整文件站導覽結構,將快速開始移至使用指南目錄"]}]},{"version":"0.22.0","date":"2026-05-26","summary":"本次優化軟體預設狀態的介面樣式,並新增 CLI Web 更新與儲存管理能力,同時改善首頁匯入、文件站與多端穩定性。","changes":[{"type":"feat","items":["首頁匯入區改為分入口設計,新增 API 匯入與自動同步入口","版本紀錄改為隨應用程式本地打包,減少執行時對遠端資源的依賴","【CLI Web】新增儲存管理功能,可在 Web 設定中檢視並管理資料快取","【CLI】新增更新檢查與自動更新流程,並接入 CLI Web 的更新檢查","【文件站】新增獨立文件站 docs.chatlab.fun"]},{"type":"fix","items":["修正首頁快捷開始按鈕缺失的問題","修正國際化 key 路徑錯誤與 ECharts 廢棄 api.style() 用法","強化自動更新與遷移重試流程中的安全保護","【桌面端】修正統一遷移可能回退資料目錄改動的問題","【CLI Web】修正發現新版本時顯示必定失敗的「立即更新」操作","【CLI Web】停用不可用的 Web 自動更新執行流程","【CLI Web】修正檔案管理操作依賴 shell 開啟造成的相容性與安全性問題","【CLI Web】修正資料目錄提示後 Web 服務無法繼續啟動的問題","【CLI Web】補齊合併相關 API 相容層","【CLI】優化更新檢查的非同步快取、按鍵互動與開發模式略過邏輯"]},{"type":"refactor","items":["將文件連結遷移到 docs.chatlab.fun","【設定】將會話索引移入 AI 設定,並調整設定頁排序"]},{"type":"style","items":["優化側邊欄密度,並提升深色模式下 Tab 選擇器的對比度"]},{"type":"docs","items":["重整公開文件站結構與匯出說明"]},{"type":"chore","items":["將工作區套件遷移為 ESM","隔離文件站工作區依賴","將發布版本紀錄移出 docs 目錄"]}]},{"version":"0.21.1","date":"2026-05-23","summary":"優化 Pull 同步可靠性與資料安全性,新增移除訂閱時清除已匯入聊天記錄的選項,並修正 UI 動畫與彈窗互動問題。","changes":[{"type":"feat","items":["Pull 同步完成後自動產生會話索引","新增移除訂閱時清除已匯入聊天記錄的選項","【CLI Web】版本紀錄彈窗支援依版本截圖,Markdown 列表修正改為可選","【MCP】新增 ci 變更類型的圖示與多語系支援"]},{"type":"fix","items":["修正 Pull 同步在小頁面情境下可能遺失資料的問題,並驗證重試匯入結果","修正拉取同步後會話索引未自動產生的問題","修正 Pull 完成或資料刪除後側邊欄會話列表未重新整理的問題","修正遠端服務不支援分頁時無法取得全部會話的問題","優化拉取同步的重試機制與分頁策略,提升穩定性","修正會話存在性檢查缺少 schema 驗證導致資料表不存在報錯的問題","修正強制產生會話索引彈窗在失敗時意外關閉的問題","修正空會話狀態下會話索引彈窗阻塞頁面的問題","【桌面端】修正應用程式版本號顯示為 0.0.0 時自動回退讀取 package.json 版本","【CLI Web】同步圖示改為原地旋轉動畫,不再出現獨立的載入指示器"]},{"type":"docs","items":["更新 Pull 協議文件為 since+nextSince 分頁模式"]}]},{"version":"0.21.0","date":"2026-05-22","summary":"本次更新新增 MCP 支援,統一多端匯入與服務層,並改善 Web、AI、同步與發布穩定性。","changes":[{"type":"feat","items":["Electron 與 Web 模式支援一致的資料夾匯入流程,可處理多檔聊天記錄格式","【MCP】新增獨立命令入口,並在設定頁接入 MCP 設定","【MCP】Server 擴充至 19 個工具,並支援精簡文字與 JSON 兩種輸出格式"]},{"type":"fix","items":["強化資料夾匯入路徑處理,降低匯入失敗風險","修復新增訂閱時可能發生的同步競態問題","修復 MiniMax 串流回應中的 <think> 內容未正確識別為思考事件的問題","【CLI Web】修復增量匯入無法使用的問題","【CLI Web】修復會話不存在與成員歷史等行為和桌面版不一致的問題","【CLI Web】修復開發服務的 Node 執行環境設定問題","【MCP】修復啟動時原生模組 ABI 綁定不一致的問題"]},{"type":"refactor","items":["統一 CLI Web 與 Electron 的共用服務層,減少路由與 IPC 中的重複業務邏輯","【MCP】精簡對外暴露的工具註冊表,降低外部 AI Agent 的工具 schema 成本","【MCP】將核心能力抽取為獨立共用套件,簡化 CLI 與桌面版整合","【MCP】精簡設定頁整合方式,降低桌面端輔助程式碼複雜度"]},{"type":"ci","items":["【CLI】發布流程支援同步發布 npm 套件"]},{"type":"docs","items":["補充 changelog 端特有變更的前綴與排序規則"]},{"type":"chore","items":["【CLI】【MCP】補齊 npm 發布所需設定與發布說明"]}]},{"version":"0.20.0","date":"2026-05-19","summary":"本次更新統一多端核心架構,並改善 AI、匯入、同步與桌面版建置穩定性。同時為下一版的獨立 Web、CLI 與 MCP 能力預做準備;使用 CLI 前請先升級到此版本,以完成資料預遷移。","changes":[{"type":"feat","items":["新增獨立 CLI、HTTP API 服務與 MCP Server,為命令列、Web 與 AI Agent 整合提供基礎能力","新增獨立 Web 建置與一鍵啟動流程,支援透過 CLI 啟動 Web UI 並自動開啟瀏覽器","Web 模式支援聊天記錄匯入、Demo 匯入、會話查詢、成員查詢、搜尋與分析等核心流程","Web 模式接入 AI 對話、模型設定、自訂 Provider/Model、上下文壓縮與串流事件顯示","匯入能力升級為共用串流管線,支援多格式解析、增量匯入、匯入分析與自動產生會話索引","新增合併流程、Markdown 匯出與會話快取相關的服務端能力","新增同步共用套件與 CLI 自動化支援,作為後續多端同步能力的基礎","新增後端偏好設定持久化,並支援 CLI 首次執行時自動偵測與遷移桌面版資料"]},{"type":"fix","items":["修復 Web 模式下會話索引、跨來源代理、Demo 保護與執行階段錯誤等問題","修復 Web 模式下應用程式版本顯示為空的問題","修復 AI Agent 證據檢索、Web 端事件串流與錯誤格式化等問題","修復同步顯示與匯入邏輯不一致的問題","修復 CLI 開發模式下的 ESM 模組解析問題","修復 CLI 安裝後可能找不到既有桌面版資料的問題","修復 Electron 套件拆分後資料遷移路徑不一致的問題","修復打包後 Worker 執行緒間接依賴 electron 模組導致崩潰的問題","修復 Electron 建置、依賴安裝與 better-sqlite3 原生模組重建相關問題"]},{"type":"refactor","items":["將專案調整為多端工作區結構,拆分 apps/desktop、apps/cli 與多個共用 packages","將解析器、設定、資料庫適配、查詢、遷移、NLP、會話快取、匯入、合併、匯出與同步邏輯抽取為共用模組","將 AI Agent、工具系統、預處理、上下文壓縮、RAG、LLM 設定、助手與技能管理抽取為共用執行階段能力","統一 Electron、CLI Web 與 MCP 的 AI 工具命名、工具註冊與資料存取方式","統一資料目錄、訊息查詢、成員查詢、會話索引、SQL 執行與匯入去重等核心邏輯","將 CLI 從 packages/server 遷移到 apps/cli,並補齊 npm 發布建置流程","將純前端圖表模組遷移到 src/features,讓 packages 目錄只保留可重用的共用套件","移除多處 Electron 側純轉發檔案與廢棄程式碼,減少重複實作"]},{"type":"build","items":["升級 Vite 等建置工具鏈","新增 CLI tsup 建置、Web 資源打包與 npm 發布所需設定","調整 Electron 桌面版建置設定,移除 Linux 桌面版建置目標"]},{"type":"docs","items":["補充版本策略、提交 scope 約定與相關開發文件"]}]},{"version":"0.19.0","date":"2026-05-06","summary":"本次更新支援 AI 上下文自動壓縮,新增 Demo 範例,並優化模型設定與除錯體驗。","changes":[{"type":"feat","items":["支援模型上下文視窗預設與自訂設定","支援 AI 對話上下文自動壓縮與相關設定","優化上下文壓縮流程與狀態顯示","除錯模式新增原始資料檢視,並支援記錄完整 LLM 上下文","優化 AI 模型設定文案、表單與設定頁顯示","移除向量模型設定,簡化相關設定項目","新使用者可在空狀態直接查看 Demo 範例","遷移至 pnpm workspace 專案結構"]},{"type":"fix","items":["修正快速模型跟隨預設助手時,部分情況可能使用錯誤模型的問題","修正空資料狀態下不顯示 Demo 按鈕的問題","修正主行程直接依賴未宣告 axios,可能造成啟動失敗的風險"]}]},{"version":"0.18.4","date":"2026-04-29","summary":"本次更新優化了模型的穩定性,同時支援遠端取得模型清單,優化 AI 錯誤詳細資訊的顯示與部分介面樣式等。","changes":[{"type":"feat","items":["支援遠端取得模型清單","OpenAI 相容 API 網址自動補齊 /v1 並支援即時預覽","優化 AI 對話錯誤詳細資訊的顯示","優化部分顯示樣式"]},{"type":"fix","items":["修復部分邏輯漏洞"]},{"type":"chore","items":["優化同步日誌技能的邏輯"]}]},{"version":"0.18.3","date":"2026-04-28","summary":"本次更新支援設定快捷工具入口位置,優化預設時間篩選,並修正彈窗層級與資料目錄安全提示。","changes":[{"type":"feat","items":["支援設定快捷工具入口位置","優化預設時間篩選體驗","禁止將資料目錄設在應用程式安裝目錄內"]},{"type":"fix","items":["修正彈窗樣式被覆蓋的問題","修正設定頁內彈窗被遮擋的層級問題"]}]},{"version":"0.18.2","date":"2026-04-26","summary":"本次更新新增訂閱類型選擇、遠端會話分頁發現,以及每次拉取訊息數量的設定。","changes":[{"type":"feat","items":["訂閱會話時支援依類型篩選與選取","支援遠端會話分頁發現與按需載入更多","支援為資料來源設定每次拉取的訊息數量"]}]},{"version":"0.18.1","date":"2026-04-24","summary":"本次更新新增 DeepSeek V4 支援與開機自動啟動選項,優化設定與整體介面體驗,並修正 AI 對話中的連結開啟方式。<br/>從這個版本開始,專案將正式遷移至 ChatLab 組織。","changes":[{"type":"feat","items":["遷移至 ChatLab 組織","優化全域樣式表現","優化快速提問的顯示邏輯","優化設定彈窗的開啟方式","支援開機自動啟動","支援 DeepSeek V4 模型"]},{"type":"fix","items":["修正 AI 對話中的連結未在瀏覽器中開啟的問題"]}]},{"version":"0.18.0","date":"2026-04-23","summary":"本次更新優化 AI 對話互動、整合多個分析入口,並提升資料來源同步與 Windows 更新的穩定性。","changes":[{"type":"feat","items":["優化 AI 助手互動流程","調整新增資料來源表單的提示文案","工具 Panel 新增 Mini 模式","將聊天記錄檢視器移至工具 Panel","統一關係分析相關分頁","將語錄模組整體移至洞察","將關鍵字分析移至實驗室"]},{"type":"fix","items":["修正既有型別警告","Pull 增量同步加入 60 秒重疊視窗,避免漏掉訊息","Pull 拉取固定使用 `limit=1000`,避免遠端資料來源一次匯出過多資料造成卡頓","修正 Windows 更新時 NSIS 彈窗中斷靜默安裝的問題"]}]},{"version":"0.17.5","date":"2026-04-21","summary":"本次更新聚焦大量錯誤修復,整體穩定性與可用性皆有所提升。","changes":[{"type":"feat","items":["優化關係卡片樣式。","以原生機器識別邏輯取代 `node-machine-id` 依賴,提升 Linux 下 API 金鑰修改穩定性。","合併聊天記錄時新增可選保留原始記錄。","在預設服務與第三方服務的 API 位址旁新增驗證按鈕。"]},{"type":"fix","items":["優化 dataSource 遷移策略,提升遷移安全性。","修正話題在訊息過少時空狀態顯示異常。","修正本地模型驗證失效問題。","修正切換對話後已選分頁被重置的問題。","修正舊版 dataSources 升級後自動化頁面白屏問題。"]}]},{"version":"0.17.4","date":"2026-04-19","summary":"完成 Import API v1 完整協定並新增分層資料來源管理,現已支援聊天記錄自動同步。","changes":[{"type":"feat","items":["完成 Import API v1 完整協定與分層資料來源管理"]}]},{"version":"0.17.3","date":"2026-04-17","summary":"本次更新為私聊新增語言偏好分頁,側邊欄對話清單支援排序與篩選,完善 AI 服務商與模型設定能力,並修正時間篩選重置問題。","changes":[{"type":"feat","items":["對話清單新增排序與篩選功能","新增語言偏好分頁,可檢視偏好內容","優化介面樣式細節,提升視覺一致性","AI 服務商新增 Anthropic 支援","模型第三方服務支援自行選擇介面類型","AI 模型設定支援自訂名稱"]},{"type":"fix","items":["修正從設定或 AI 對話頁返回後,時間篩選會被重置為「全部」的問題"]},{"type":"refactor","items":["將語言偏好抽離為共用型別,減少重複定義"]}]},{"version":"0.17.2","date":"2026-04-15","summary":"本次更新新增跨平台資料合併與成員訊息合併,強化詞庫與更新安全檢查,優化深色模式體驗與日誌能力,並修復多項問題。","changes":[{"type":"feat","items":["成員管理支援合併成員訊息","支援跨平台聊天資料合併","資料管理中部分表頭支援排序","將話題分析入口移至洞察模組","新增 AI 日誌檔案原始路徑紀錄","優化深色模式配色,提升視覺體驗"]},{"type":"fix","items":["修正詞庫刷新與合併 ID 衝突問題","為 OpenAI 相容請求補上執行期 User-Agent 標頭","修正深色模式截圖匯出背景透明異常","詞庫下載新增 SHA256 完整性檢查","收斂遠端設定拉取策略並強化更新安裝確認"]},{"type":"chore","items":["新增 ARM Linux 的 deb 安裝包建置支援","優化版本日誌同步流程"]},{"type":"docs","items":["新增繁體中文文件"]}]},{"version":"0.17.1","date":"2026-04-13","summary":"重構話題模組並新增話題卡片展示,優化詞雲關鍵詞篩選與查詢快取邏輯,支援遠端下載分詞詞庫及繁體中文詞庫,並完善 WhatsApp 偵測邏輯。","changes":[{"type":"feat","items":["重構話題模組,新增話題卡片展示","詞雲支援關鍵詞篩選","支援遠端下載分詞詞庫,新增繁體中文詞庫支援","查詢快取邏輯優化","部分讀取中介面互動統一","完善 WhatsApp 偵測邏輯"]},{"type":"ci","items":["新增官網文件站,支援自動化同步與部署"]}]},{"version":"0.17.0","date":"2026-04-12","summary":"本次更新強化 WhatsApp 匯入解析與指定格式匯入,並重整總覽卡片體系,補上分享、截圖與除錯工具能力。","changes":[{"type":"feat","items":["新增 WhatsApp V2 時間戳彈性解析,可自動適配不同地區匯出格式","完善 WhatsApp 聊天紀錄偵測機制","新增指定格式匯入能力","在訊息分頁新增分享卡片","DEBUG 模式新增快速除錯工具","優化總覽身份卡並統一時間範圍查詢邏輯","重構總覽模組卡片並抽離主題色卡片,預留配色模式","統一卡片最大寬度,並將首頁工具升級為全域工具側邊欄","主題卡片支援截圖,並預設關閉截圖的行動端適配","移除診斷建議並新增提示"]},{"type":"fix","items":["修正 WhatsApp 時間解析正則與行匹配正則寬嚴不一致的問題","修正 WhatsApp 12 小時制時間與 NNBSP 字元的解析相容性問題"]},{"type":"chore","items":["快取 electron 與 electron-builder 二進位檔以加速 CI 打包"]}]},{"version":"0.16.0","date":"2026-04-10","summary":"本次更新新增私聊主動性分析視圖,並修正模型編輯視窗中自訂模型遺失的問題。","changes":[{"type":"feat","items":["私聊場景新增主動性分析視圖","優化頁尾區域的呈現與互動","優化語錄模組下半部邏輯"]},{"type":"fix","items":["修正第三方/本地服務編輯視窗會遺失多個自訂模型的問題"]}]},{"version":"0.15.0","date":"2026-04-08","summary":"本次版本大幅優化搜尋與查詢效能,搜尋工具可自動帶入上下文訊息,並優化 AI 模型設定、新增部分服務商,同時支援 Linux 平台。","changes":[{"type":"feat","items":["新增查詢快取以加快存取速度","搜尋工具支援自動帶入上下文訊息","重構模型設定邏輯","新使用者首次啟動時優先顯示語言選擇視窗","實驗室新增基礎除錯工具","移除舊版提示詞"]},{"type":"fix","items":["修正 Windows 淺色模式下標題列按鈕區背景色與應用不一致的問題","修正 CI 打包流程中 Node 24 與 pnpm 對齊相關問題","補齊工具呼叫顯示名稱的 i18n 翻譯"]},{"type":"refactor","items":["優化 AI 設定彈窗的程式碼組織"]},{"type":"chore","items":["升級至 Node 24","支援 Linux 打包"]},{"type":"docs","items":["更新文件"]}]},{"version":"0.14.2","date":"2026-04-07","summary":"本次更新聚焦 AI 對話體驗升級,新增對話複製、優化介面,並支援 FTS5 全文搜尋工具,同步精簡部分搜尋參數並強化錯誤提示與測試能力。","changes":[{"type":"feat","items":["新增可在 7 天內記住助手選擇的功能","AI 對話支援一鍵複製訊息內容","優化 AI 對話樣式與整體互動體驗","支援 FTS5 全文搜尋,並新增快速搜尋工具","精簡部分工具的搜尋參數,降低 token 消耗","新增 Electron 應用 E2E 測試框架,支援連接埠管理與實例隔離"]},{"type":"fix","items":["完善 AI 對話錯誤提示,提升問題定位效率"]},{"type":"refactor","items":["整理 AI 對話模組程式結構","抽出會話分析頁共用邏輯並統一頁首文案"]},{"type":"test","items":["補充可重複使用的 E2E 啟動器冒煙測試能力"]},{"type":"docs","items":["更新專案文件中的導覽圖片"]},{"type":"style","items":["統一部分程式碼格式,提升可讀性"]}]},{"version":"0.14.1","date":"2026-04-02","summary":"本次更新聚焦首頁資訊架構調整與介面優化,同步提升 SQL 對話體驗、統計讀取效能與 AI 工具品質。","changes":[{"type":"feat","items":["優化總覽頁樣式","優化 SQL 對話模組互動流程","將成員管理移至首頁,並調整相關分頁配置","新增部分 AI 工具,包含聊天概覽取得能力","新增對話資料快取管理模組,提升統計讀取效能","完善版本日誌彈窗的類型呈現"]},{"type":"fix","items":["修復 SQL Lab 與摘要產生流程中 AI 錯誤被靜默吞沒的問題"]},{"type":"refactor","items":["重構 AI 工具分類體系,提升工具組織的可維護性"]},{"type":"chore","items":["淘汰部分低價值 AI 工具,精簡可用工具集"]}]},{"version":"0.14.0","date":"2026-03-28","summary":"新增 API 匯入匯出與預設提問,優化總覽與設定體驗,並修復訊息去重、AI 對話流程與每日訊息趨勢顯示問題。","changes":[{"type":"feat","items":["新增 API 匯入","新增 API 匯出","點選預設問題後可直接送出提問","設定頁支援選擇會話預設進入的分頁","優化總覽頁樣式","優化整體介面樣式與 API 服務設定頁","優化身份卡片與助手選擇互動"]},{"type":"fix","items":["修復訊息去重誤判,並統一空字串的去重行為","修復 AI 對話流程與前端 type-check 錯誤","補上預設 assistant 的兜底邏輯,修復例外情境","修復每日訊息趨勢未顯示的問題"]},{"type":"refactor","items":["整理 parser、worker、RAG 與 merger 的歷史型別問題"]},{"type":"chore","items":["新增 assistant 設定產生技能"]}]},{"version":"0.13.0","date":"2026-03-16","summary":"AI 對話支援助手模式,對話可使用技能,輸入框支援快捷選擇,完善對話與設定介面,支援繁體中文與日文,並調整部分 UI,同時修復多項穩定性問題。","changes":[{"type":"feat","items":["完成助手模式初版並強化助手邏輯與分析工具能力","上線助手市集與技能市集,聊天對話支援使用技能","支援以 @ 選擇成員協作","支援繁體中文與日文在地化","設定頁面重構並優化部分 UI 細節","優化總覽模組樣式與對話介面體驗","調整匯出聊天記錄的入口位置","移除舊版提示詞系統與自訂篩選 AI 功能","切換頁面時模型呼叫不再中斷"]},{"type":"fix","items":["修復 Gemini API 設定問題","修復 NLP 停用詞呼叫順序導致的錯誤"]},{"type":"refactor","items":["重構 AIChat 組織結構","重構目錄位置與專案結構"]},{"type":"docs","items":["更新使用者協議與專案文件"]},{"type":"chore","items":["優化版本日誌建置流程"]},{"type":"style","items":["統一程式碼格式與 lint 規則輸出"]}]},{"version":"0.12.1","date":"2026-02-27","summary":"新增聊天紀錄前處理與除錯能力,重構 Agent/LLM 架構,並修復國際化與 Windows 主題顯示問題。","changes":[{"type":"feat","items":["新增聊天紀錄前處理流程","新增前處理設定介面與設定管理能力","Agent 支援依會話顯示上下文時間軸與執行狀態","新增 AI 除錯模式並提升日誌可觀測性"]},{"type":"fix","items":["修復英文設定下部分介面未完成國際化的問題","修復 Windows 動態更新 overlay 色彩時主題不一致的問題"]},{"type":"refactor","items":["將 Agent 單體實作拆分為模組化架構","將工具系統重構為 AgentTool + TypeBox 結構並補齊 i18n","統一 LLM 存取層,收斂為 pi-ai 方案","重構資料流方向與 IPC 協議,並完成前端適配","引入共享型別並優化 ChatStatusBar 國際化","將部分圖表重構為外掛化架構"]},{"type":"chore","items":["移除過度設計的 sessionLog 模組","移除 @ai-sdk 相關依賴與舊版 LLM 服務實作","暫時隱藏向量模型設定入口","更新專案描述文案"]},{"type":"style","items":["執行 ESLint 自動修正,統一程式碼風格"]}]},{"version":"0.11.2","date":"2026-02-15","summary":"優化聊天紀錄匯入機制與管理頁體驗,並提升多平台聊天紀錄的相容性。","changes":[{"type":"feat","items":["強化 LINE 與 WhatsApp 解析器的格式相容性","優化聊天紀錄嗅探層,支援輪詢偵測與回退機制","管理頁支援 Shift 多選","管理頁新增顯示聊天摘要數量與 AI 對話數量","優化首頁版面,提升可用空間","優化 Windows 右上角控制列樣式"]},{"type":"docs","items":["更新專案文件"]}]},{"version":"0.11.0","date":"2026-02-13","summary":"支援 Telegram 匯入,優化增量匯入體驗,補齊國際化設定,並修復索引失效與頁面閃爍等問題。","changes":[{"type":"feat","items":["補齊 AI 呼叫、日誌與主進程設定的國際化支援","支援 Telegram 聊天紀錄匯入","優化增量匯入互動與相關文案","優化開啟協議時的互動體驗"]},{"type":"fix","items":["修復增量匯入後索引失效的問題(resolve #81)","修復 WhatsApp 使用 iPhone 匯出後無法辨識的問題(resolve #82)","修復切換對話頁面時出現雙重閃爍的問題"]},{"type":"chore","items":["優化 TypeScript 設定","調整 i18n 建置設定","優化技能相關工程設定"]}]},{"version":"0.10.0","date":"2026-02-11","summary":"新增互動頻率分析能力,優化會話查詢流程,並修復增量索引與資料庫掃描相關問題。","changes":[{"type":"feat","items":["新增互動頻率分析視圖,更直觀地觀察成員互動趨勢","優化會話查詢相關邏輯與處理流程"]},{"type":"fix","items":["修復增量更新後會話索引產生範圍不準確的問題(fix #79)","修復遷移與會話掃描時誤處理非聊天 SQLite 檔案的問題"]},{"type":"refactor","items":["重構會話查詢模組,提升查詢結構可維護性"]},{"type":"chore","items":["移除 transformers 相關依賴並更新工程設定"]}]},{"version":"0.9.4","date":"2026-02-08","summary":"優化時間篩選與 AI 設定體驗,新增 API Key 本機加密,並修復 LINE 聊天紀錄解析問題。","changes":[{"type":"feat","items":["時間篩選支援更多彈性選項","API Key 支援本機加密儲存","新用戶首次進入時不再顯示版本日誌","優化 AI 對話底部的設定狀態顯示","資料目錄遷移後支援立即重新啟動軟體"]},{"type":"fix","items":["修復 LINE 聊天紀錄解析問題"]},{"type":"docs","items":["更新專案文件"]}]},{"version":"0.9.3","date":"2026-02-03","summary":"支援自訂資料目錄,並修復多項已知問題。","changes":[{"type":"feat","items":["設定中新增資料目錄位置選項","優化資料儲存目錄遷移邏輯","切換目錄時新增確認彈窗","優化解析邏輯(WeFlow / Echotrace)"]},{"type":"fix","items":["修復 Windows 自訂篩選時訊息量過大導致崩潰的問題","修復第三方中轉 API 呼叫 tool_call 導致對話異常結束的問題","修復部分 WhatsApp 聊天紀錄無法正確辨識的問題","修復管理頁表頭層級顯示問題"]},{"type":"refactor","items":["重構 session 查詢模組","補強遷移日誌輸出"]}]},{"version":"0.9.2","date":"2026-02-02","summary":"排行榜改為圖表呈現,優化詞雲與本機 AI 推理模型,改進聊天紀錄篩選與日期選擇器,並在啟動後預先載入關鍵路由。","changes":[{"type":"feat","items":["排行榜改為圖表展示","優化詞雲效果","優化推理模型","優化訊息會話搜尋與篩選的聯動體驗","優化日期選擇器互動","啟動後預先載入關鍵路由"]},{"type":"chore","items":["將 preload 模組化拆分","優化 analytics 邏輯","升級 ESLint 並整理程式碼格式"]}]},{"version":"0.9.1","date":"2026-01-30","summary":"支援 LINE 聊天紀錄匯入,新增批次管理與聊天搜尋,並修復一些已知問題。","changes":[{"type":"feat","items":["新增批次管理,支援批次刪除與合併","支援聊天搜尋","支援 LINE 聊天紀錄匯入","相容 WeFlow 匯出的 JSON 格式","成員列表改為後端分頁載入","優化部分文案"]},{"type":"fix","items":["修復 Windows 更新時因 Worker 占用導致軟體無法關閉的問題"]}]},{"version":"0.9.0","date":"2026-01-28","summary":"支援 NLP 分詞能力,語錄頁新增詞雲;新增視圖功能可展示更多圖表;支援系統代理跟隨,並優化部分頁面與樣式。","changes":[{"type":"feat","items":["優化使用者選擇器效能,支援虛擬載入","將排行榜移至視圖分頁","引入分詞能力,並新增詞雲子分頁","優化群聊頁分頁文案","網路代理支援跟隨系統代理","優化版本日誌顯示判斷邏輯"]},{"type":"style","items":["優化 Markdown 渲染樣式"]}]},{"version":"0.8.0","date":"2026-01-26","summary":"新增會話摘要與向量檢索能力,版本更新後會顯示更新內容,優化部分介面互動,並修復一些已知問題。","changes":[{"type":"feat","items":["聊天會話支援摘要功能","新增批次產生會話摘要邏輯","支援向量模型設定與相關檢索","匯入聊天紀錄報錯時記錄更詳細的日誌","每次更新到新版本後自動開啟版本日誌","首頁新增 Footer,顯示常用連結","側邊欄移除幫助與回饋"]},{"type":"fix","items":["修復 shuakami-jsonl 解析錯誤(fix #50)"]}]},{"version":"0.7.0","date":"2026-01-23","summary":"優化 AI 對話體驗,改進更新流程,並以 ECharts 取代 chart.js。","changes":[{"type":"feat","items":["優化更新流程","補強 AI 對話錯誤日誌","聊天底部支援快速切換對話模型","優化預設提示詞,增加一點幽默感","以 ECharts 取代 chart.js","移除註冊協議邏輯"]}]},{"version":"0.6.0","date":"2026-01-21","summary":"接入 AI SDK 提升 AI 對話穩定性,新增思考內容區塊,並優化部分樣式。","changes":[{"type":"feat","items":["新增定位日誌功能","接入 AI SDK","新增思考內容區塊","解決全域彈窗被首頁上方拖曳區域遮擋的問題","優化 Windows 右上角關閉按鈕樣式"]}]},{"version":"0.5.2","date":"2026-01-20","summary":"支援合併匯入,並修復一些問題。","changes":[{"type":"feat","items":["支援合併匯入","主面板顯示聊天紀錄起訖時間","優化拖曳區域"]},{"type":"fix","items":["優化建置設定以修復 macOS x64 編譯問題","修復訊息紀錄檢視器在 Windows 下的關閉按鈕樣式問題","macOS 打包時需在對應架構上編譯(fixes #36)"]}]},{"version":"0.5.1","date":"2026-01-16","summary":"修復一些問題。","changes":[{"type":"feat","items":["優化文案"]},{"type":"fix","items":["修復 Windows 下關閉軟體後程序未退出的問題(#33)","修復數字輸入框 BUG(resolve #34)"]}]},{"version":"0.5.0","date":"2026-01-14","summary":"支援 Instagram 聊天紀錄匯入;首頁支援批次匯入;聊天頁支援增量匯入。","changes":[{"type":"feat","items":["支援 Instagram 聊天紀錄匯入","優化整體邏輯","優化系統提示詞預設功能","支援增量匯入","支援批次匯入","優化樣式","Windows 端支援原生視窗控制並實作主題同步(#31)"]},{"type":"chore","items":["移除 componenst.d.ts"]}]},{"version":"0.4.1","date":"2026-01-13","summary":"優化部分樣式與互動體驗。","changes":[{"type":"feat","items":["提示詞支援預覽","優化 AI 對話狀態列","優化遷移表邏輯","側邊欄支援顯示頭像","優化樣式","替換原生視窗控制列","優化全域背景色","關閉軟體時清理 Worker"]},{"type":"fix","items":["修復主題模式設定跟隨系統不生效的問題","修復更新彈窗提示內容排版問題"]}]},{"version":"0.4.0","date":"2026-01-12","summary":"匯入支援 shuakami-jsonl 格式;AI 對話更省 Token;匯入聊天紀錄時可建立會話索引,查看器也支援依索引快速跳轉;軟體更新支援加速鏡像。","changes":[{"type":"feat","items":["相容 shuakami-jsonl","優化 Loading 體驗","新增自訂篩選","重構預設詞系統,支援通用預設詞","精簡系統提示詞以節省 Token","新增會話相關 function calling 呼叫","處理訊息跳轉到上下文的邏輯","聊天紀錄檢視器支援查看會話索引與快速跳轉","重構設定彈窗,新增會話索引設定","匯入聊天紀錄時支援產生會話索引","重構設定彈窗","優化基礎元件互動樣式","優化首頁樣式","優化更新加速邏輯","新增加速鏡像"]}]},{"version":"0.3.1","date":"2026-01-09","summary":"已適配 Discord 匯入;各解析器支援回覆類型匯入;軟體儲存目錄遷移至更標準的位置;匯入支援角色;匯入報錯提供更詳細的診斷與提示,並帶來一些細節優化。","changes":[{"type":"feat","items":["資料表升級改由主進程執行","自動檢查更新時忽略 beta 版本","將資料儲存目錄遷移到 userData 下","各解析器重新支援回覆訊息匯入","支援平台訊息 ID 與回覆 ID,並同步進行資料表遷移","支援 Tyrrrz/DiscordChatExporter 訊息格式匯入","member 表支援角色","強化 ChatLab 格式偵測行為","確保點擊匯入與拖曳匯入的邏輯一致","支援更詳細的格式診斷"]},{"type":"fix","items":["修復部分使用者 platformId 為空的情況"]}]},{"version":"0.3.0","date":"2026-01-08","summary":"完成完整國際化支援,支援中英文切換,並進一步優化部分功能。","changes":[{"type":"feat","items":["SQL 實驗室支援匯出","AI 對話支援匯出","完成最終國際化","AI 模型出錯時顯示明確錯誤","SQL 結果支援跳轉到訊息檢視器","優化系統 prompt,支援 prompt 市集"]}]},{"version":"0.2.0","date":"2025-12-29","summary":"支援代理設定;匯入時支援顯示錯誤日誌;優化部分介面互動,並帶來一些功能更新。","changes":[{"type":"feat","items":["訊息管理器支援顯示系統訊息","優化匯入流程,錯誤時會顯示匯入日誌","WhatsApp 支援英文格式訊息匯入","支援設定代理(resolve #7)","優化 AI 模型介面互動","新增使用者設定 API 教學","新增 2 個免費 GLM 模型,並加入豆包服務商與最新模型","AI 回覆不再輸出 think 內容"]}]},{"version":"0.1.3","date":"2025-12-25","summary":"修復一些問題。","changes":[{"type":"fix","items":["修復 Echotrace 解析器錯誤"]}]},{"version":"0.1.2","date":"2025-12-25","summary":"支援深色模式;AI 對話中的系統提示詞可帶入使用者身分。","changes":[{"type":"feat","items":["AI 對話中的系統提示詞可帶入使用者身分","聊天紀錄檢視器中,Owner 顯示在右側","支援資料庫升級","成員分頁支援設定 Owner 視角","支援深色模式"]},{"type":"fix","items":["修復將私聊誤判為群聊的問題"]}]},{"version":"0.1.1","date":"2025-12-24","summary":"已適配 WhatsApp 聊天紀錄匯入;支援舊版 QQ 討論組格式分析。","changes":[{"type":"feat","items":["聊天會話底部顯示 Token 消耗","支援 WhatsApp 原生格式訊息","支援舊版 QQ txt 討論組格式"]},{"type":"fix","items":["修復訊息管理器層級過低的問題"]}]},{"version":"0.1.0","date":"2025-12-23","summary":"專案正式開源發布。","changes":[{"type":"feat","items":["init"]}]}]'),De={"en-US":oo,"zh-CN":ao,"zh-TW":no,"ja-JP":io};function te(x){return x?x.trim().replace(/^v/i,""):null}function ye(x){return De[x]??De["en-US"]}function qe(x){return ye(x)[0]?.version||null}function ro(x,s){const n=te(s);return n?ye(x).some(y=>te(y.version)===n):!1}function co(x,s){const n=te(s),y=te(qe(x));return!!(n&&y&&n===y)}const lo={class:"flex max-h-[80vh] flex-col"},mo={class:"flex items-center justify-between border-b border-gray-200 px-6 py-4 dark:border-gray-700"},po={class:"flex items-center gap-3"},uo={class:"flex h-10 w-10 items-center justify-center rounded-xl bg-linear-to-br from-pink-500 to-pink-600"},ho={class:"text-lg font-semibold text-gray-900 dark:text-white"},go={class:"text-sm text-gray-500 dark:text-gray-400"},yo={class:"flex-1 overflow-y-auto px-6 py-4"},fo={key:0,class:"flex items-center justify-center py-12"},vo={key:1,class:"flex flex-col items-center justify-center py-12 text-center"},xo={class:"text-sm text-gray-500 dark:text-gray-400"},bo={key:2,class:"space-y-6"},Io=["onMouseenter"],Ao={key:0,class:"absolute left-[15px] top-10 h-[calc(100%-20px)] w-[2px] bg-gray-200 dark:bg-gray-700"},wo={class:"flex items-start gap-4"},ko={class:"flex-1 pt-0.5"},_o=["onClick"],Co={class:"flex items-center gap-3"},Lo={class:"text-base font-bold text-gray-900 dark:text-white"},So={key:0,class:"rounded-full bg-pink-100 px-2 py-0.5 text-xs font-medium text-pink-600 dark:bg-pink-900/30 dark:text-pink-400"},Po={key:1,class:"rounded-full bg-green-100 px-2 py-0.5 text-xs font-medium text-green-600 dark:bg-green-900/30 dark:text-green-400"},Wo={class:"mt-0.5 text-sm text-gray-500 dark:text-gray-400"},Mo=["innerHTML"],To={class:"mt-3 space-y-3"},Eo={class:"mb-2 flex items-center gap-2"},Fo={class:"text-xs font-medium text-gray-600 dark:text-gray-400"},$o={class:"space-y-1.5 pl-7"},Uo={class:"border-t border-gray-200 px-6 py-4 dark:border-gray-700"},Do={class:"flex items-center justify-between"},No={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},Ro={key:1},Ne="chatlab_changelog_read_version",zo="chatlab_agreement_version",jo=Q({__name:"ChangelogModal",setup(x,{expose:s}){const{t:n}=K(),y=fe(),{locale:i}=ve(y),g=w(!1),d=w(!1),c=w(null),I=w(new Map),v=w(null),u=w(null),k={allowedTags:["br","a","img"],allowedAttrs:{a:["href","target","rel"],img:["src","alt","title","width","height"]}};function P(_,M){const q=b(_,M);I.value.set(_,!q)}function b(_,M){return I.value.has(_)?I.value.get(_):u.value?F(_):M===0}function F(_){const M=te(u.value);return M?te(_)===M:!1}const A=w([]);async function h(){d.value=!0,c.value=null;try{A.value=ye(i.value)}catch(_){console.error("Failed to load bundled changelogs:",_),c.value=n("home.changelog.loadError")}finally{d.value=!1}}pe(i,()=>{g.value&&A.value.length>0&&h()});function $(_){return{feat:n("home.changelog.types.feat"),fix:n("home.changelog.types.fix"),refactor:n("home.changelog.types.refactor"),docs:n("home.changelog.types.docs"),chore:n("home.changelog.types.chore"),style:n("home.changelog.types.style"),ci:n("home.changelog.types.ci")}[_]||_}function L(_){const M=new Date(_);return i.value==="zh-CN"?`${M.getFullYear()}年${M.getMonth()+1}月${M.getDate()}日`:M.toLocaleDateString("en-US",{year:"numeric",month:"long",day:"numeric"})}function S(_){localStorage.setItem(Ne,_)}async function C(){try{if(!localStorage.getItem(zo))return;const _=await Te().getVersion(),M=te(_);if(!M)return;const q=localStorage.getItem(Ne),ae=te(q);if(q===null){S(M);return}if(ae===M)return;const me=ye(i.value);if(!te(qe(i.value))||!co(i.value,M)||!ro(i.value,M))return;setTimeout(()=>{j(me,M),S(M)},500)}catch(_){console.error("Failed to check new version:",_)}}async function ee(){try{u.value=te(await Te().getVersion())}catch{u.value=null}I.value.clear(),g.value=!0,A.value.length===0&&h()}function j(_,M){A.value=_,u.value=M||null,I.value.clear(),g.value=!0}function H(){g.value=!1}function ce(){return A.value[0]?.version||null}return de(()=>{C()}),s({open:ee,openWithData:j,close:H,fetchChangelogs:h,getLatestVersion:ce}),(_,M)=>{const q=se,ae=X,me=le;return o(),N(me,{open:g.value,ui:{content:"max-w-2xl"},"onUpdate:open":M[1]||(M[1]=O=>g.value=O)},{content:E(()=>[e("div",lo,[e("div",mo,[e("div",po,[e("div",uo,[m(q,{name:"i-heroicons-document-text",class:"h-5 w-5 text-white"})]),e("div",null,[e("h2",ho,a(t(n)("home.changelog.title")),1),e("p",go,a(t(n)("home.changelog.subtitle")),1)])]),m(ae,{color:"neutral",variant:"ghost",icon:"i-heroicons-x-mark",onClick:H})]),e("div",yo,[d.value?(o(),p("div",fo,[m(q,{name:"i-heroicons-arrow-path",class:"h-6 w-6 animate-spin text-gray-400"})])):c.value?(o(),p("div",vo,[m(q,{name:"i-heroicons-exclamation-circle",class:"h-10 w-10 text-red-400 mb-3"}),e("p",xo,a(c.value),1),m(ae,{color:"primary",variant:"soft",size:"sm",class:"mt-3",onClick:h},{default:E(()=>[R(a(t(n)("home.changelog.retry")),1)]),_:1})])):(o(),p("div",bo,[(o(!0),p(V,null,Z(A.value,(O,J)=>(o(),p("div",{key:O.version,class:"relative group","data-changelog-entry":"",onMouseenter:G=>v.value=O.version,onMouseleave:M[0]||(M[0]=G=>v.value=null)},[J<A.value.length-1?(o(),p("div",Ao)):D("",!0),e("div",wo,[e("div",{class:z(["relative z-10 flex h-8 w-8 shrink-0 items-center justify-center rounded-full",J===0?"bg-pink-500":"bg-gray-300 dark:bg-gray-600"])},[m(q,{name:J===0?"i-heroicons-star":"i-heroicons-tag",class:z(["h-4 w-4",J===0?"text-white":"text-gray-600 dark:text-gray-300"])},null,8,["name","class"])],2),e("div",ko,[e("div",{class:"cursor-pointer select-none",onClick:G=>P(O.version,J)},[e("div",Co,[e("h3",Lo,"v"+a(O.version),1),J===0?(o(),p("span",So,a(t(n)("home.changelog.latest")),1)):D("",!0),F(O.version)?(o(),p("span",Po,a(t(n)("home.changelog.current")),1)):D("",!0),m(q,{name:"i-heroicons-chevron-down",class:z(["h-4 w-4 text-gray-400 transition-transform duration-200",{"rotate-180":b(O.version,J)}])},null,8,["class"])]),e("p",Wo,a(L(O.date)),1),e("p",{class:"mt-2 text-sm font-medium text-gray-700 dark:text-gray-300",innerHTML:t(to)(O.summary,k)},null,8,Mo)],8,_o),It(e("div",To,[(o(!0),p(V,null,Z(O.changes,G=>(o(),p("div",{key:G.type,class:"rounded-lg border border-gray-100 bg-gray-50/50 p-3 dark:border-gray-700/50 dark:bg-gray-800/30"},[e("div",Eo,[e("div",{class:z(["flex h-5 w-5 items-center justify-center rounded",t(Ce)(G.type)?.bgColor])},[m(q,{name:t(Ce)(G.type)?.icon,class:z(["h-3 w-3",t(Ce)(G.type)?.color])},null,8,["name","class"])],2),e("span",Fo,a($(G.type)),1)]),e("ul",$o,[(o(!0),p(V,null,Z(G.items,(ue,re)=>(o(),p("li",{key:re,class:"relative text-sm text-gray-600 dark:text-gray-400"},[M[2]||(M[2]=e("span",{class:"absolute -left-4 top-2 h-1.5 w-1.5 rounded-full bg-gray-300 dark:bg-gray-600"},null,-1)),R(" "+a(ue),1)]))),128))])]))),128))],512),[[At,b(O.version,J)]])])]),b(O.version,J)&&v.value===O.version?(o(),N(kt,{key:1,class:"absolute right-0 top-0 z-20",size:"xs",type:"element","target-selector":"[data-changelog-entry]"})):D("",!0)],40,Io))),128))]))]),e("div",Uo,[e("div",Do,[A.value.length>0?(o(),p("p",No,a(t(n)("home.changelog.total",{count:A.value.length})),1)):(o(),p("span",Ro)),m(ae,{color:"primary",variant:"soft",onClick:H},{default:E(()=>[R(a(t(n)("home.changelog.close")),1)]),_:1})])])])]),_:1},8,["open"])}}}),Oo={class:"absolute bottom-4 left-0 right-0"},Bo={class:"flex items-center justify-center"},Vo={key:0,class:"mx-2 text-gray-300 dark:text-gray-600"},Ho=["onClick"],qo=Q({__name:"HomeFooter",emits:["openChangelog","openTerms"],setup(x,{emit:s}){const n=s,{t:y,locale:i}=K(),g=B(()=>{const h=Le(i.value),$=h?`/${h}`:"";return`${ht}${$}/config.json`}),d=B(()=>`chatlab_app_config_${i.value}`);function c(){return[{id:"website",icon:"i-heroicons-globe-alt",title:y("home.footer.website"),url:`https://chatlab.fun${pt(i.value)}`},{id:"github",icon:"i-simple-icons-github",title:"Github",url:"https://github.com/ChatLab/ChatLab"},{id:"terms",icon:"i-heroicons-document-text",title:y("home.footer.terms"),action:"terms"},{id:"changelog",icon:"i-heroicons-document-text",title:y("home.changelog.title"),action:"changelog"}]}const I=w(c()),v=w(null),u=B(()=>!v.value?.show||!v.value.url?null:{title:v.value.name,url:v.value.url});function k(){try{const h=localStorage.getItem(d.value);if(h)return JSON.parse(h).homeFooterExtraLinks||null}catch(h){console.warn("[HomeFooter] 读取缓存额外链接失败,将使用默认链接。",h)}return null}function P(){try{const h=localStorage.getItem(d.value);if(h)return JSON.parse(h).socialData||null}catch(h){console.warn("[HomeFooter] 读取缓存社交配置失败,将使用默认配置。",h)}return null}async function b(){const h=k();h&&h.length>0&&(I.value=[...c(),...h]);const $=P();$&&(v.value=$);try{let L;if(!ut){const S=await fetch(g.value);if(!S.ok)return;L=await S.json()}localStorage.setItem(d.value,JSON.stringify(L)),localStorage.setItem("chatlab_app_config",JSON.stringify(L)),L.homeFooterExtraLinks&&Array.isArray(L.homeFooterExtraLinks)&&(I.value=[...c(),...L.homeFooterExtraLinks]),L.socialData&&(v.value=L.socialData)}catch(L){console.warn("[HomeFooter] 拉取远程配置失败,将继续使用本地配置。",L)}}function F(h){h.action==="changelog"?n("openChangelog"):h.action==="terms"?n("openTerms"):h.url&&window.open(h.url,"_blank")}function A(){u.value?.url&&window.open(u.value.url,"_blank")}return de(()=>{b()}),pe(i,()=>{I.value=c(),b()}),(h,$)=>(o(),p("div",Oo,[e("div",Bo,[(o(!0),p(V,null,Z(I.value,(L,S)=>(o(),p(V,{key:L.id},[S>0?(o(),p("span",Vo,"·")):D("",!0),e("button",{class:"text-sm text-gray-500 hover:text-primary transition-colors dark:text-gray-400 dark:hover:text-primary",onClick:C=>F(L)},a(L.title),9,Ho)],64))),128)),u.value?(o(),p(V,{key:0},[$[0]||($[0]=e("span",{class:"mx-2 text-gray-300 dark:text-gray-600"},"·",-1)),e("button",{class:"text-sm text-gray-500 hover:text-primary transition-colors dark:text-gray-400 dark:hover:text-primary",onClick:A},a(u.value.title),1)],64)):D("",!0)])]))}}),Go={class:"flex flex-col items-center gap-2"},Qo={key:0,class:"text-xs text-red-500 dark:text-red-400"},Ko=Q({__name:"DemoImportButton",setup(x){const{t:s}=K(),n=ze(),y=xe(),i=fe(),g=w(!1),d=w("downloading"),c=w(null);async function I(k){const P=await Ve().getSession(k);if(P){const b=P.type==="private"?"private-chat":"group-chat";n.push({name:b,params:{id:k}})}}async function v(){const k=Le(i.locale)||"en";return ie().importDemo(k,P=>{d.value=P.stage})}async function u(){g.value=!0,c.value=null,d.value="downloading";try{const k=await v();if(k.success&&k.groupSessionId){await y.loadSessions(),y.selectSession(k.groupSessionId);try{const P=Oe(),b=Be();await b.generate(k.groupSessionId,P),k.privateSessionIds?.length&&await Promise.all(k.privateSessionIds.map(F=>b.generate(F,P)))}catch(P){console.error("自动生成会话索引失败:",P)}await I(k.groupSessionId)}else c.value=k.error||s("home.demo.failed")}catch(k){c.value=String(k)}finally{g.value=!1}}return(k,P)=>{const b=X;return o(),p("div",Go,[m(b,{"trailing-icon":g.value?void 0:"i-heroicons-chevron-right-20-solid",loading:g.value,disabled:g.value,onClick:u},{default:E(()=>[R(a(g.value?d.value==="downloading"?t(s)("home.demo.downloading"):t(s)("home.demo.importing"):t(s)("home.demo.viewExample")),1)]),_:1},8,["trailing-icon","loading","disabled"]),c.value?(o(),p("p",Qo,a(c.value),1)):D("",!0)])}}}),Jo={class:"relative flex h-full w-full overflow-hidden pt-4"},Yo={class:"relative h-full w-full overflow-y-auto"},Zo={class:"flex min-h-full w-full flex-col items-center justify-center px-4 py-12"},Xo=["src"],ei={class:"text-3xl font-bold tracking-tight text-gray-900 dark:text-white leading-none"},ri=Q({__name:"index",setup(x){const{t:s,locale:n}=K(),y=xe(),i=w("file"),g=w(!1);de(()=>{requestAnimationFrame(()=>{g.value=!0})});const d=w(null),c=w(null);function I(){c.value?.needsAgreement()&&c.value.open()}async function v(){d.value?.open()}function u(){c.value?.open()}const k=B(()=>y.sessions.length===0),P=B(()=>{const b=Le(n.value);return`https://docs.chatlab.fun${b?`/${b}`:"/en"}/usage/how-to-export?utm_source=app`});return(b,F)=>{const A=X;return o(),p("div",Jo,[F[1]||(F[1]=e("div",{class:"absolute left-0 right-0 top-0 z-10 h-[50px]",style:{"-webkit-app-region":"drag"}},null,-1)),e("div",Yo,[e("div",Zo,[e("div",{class:z(["relative xl:mb-6 mb-4 flex items-center justify-center gap-4 select-none transition-all duration-700 ease-out",g.value?"opacity-100 translate-y-0":"opacity-0 translate-y-3"])},[e("img",{src:t(gt),alt:"ChatLab",class:"h-10 w-10 select-none pointer-events-none"},null,8,Xo),e("h1",ei,a(t(s)("home.tagline")),1)],2),e("div",{class:z(["mb-6 transition-all duration-700 ease-out delay-100",g.value?"opacity-100 translate-y-0":"opacity-0 translate-y-3"])},[m(Ra,{modelValue:i.value,"onUpdate:modelValue":F[0]||(F[0]=h=>i.value=h)},null,8,["modelValue"])],2),e("div",{class:z(["w-full transition-all duration-700 ease-out delay-200",g.value?"opacity-100 translate-y-0":"opacity-0 translate-y-3"])},[i.value==="file"?(o(),N(Ua,{key:0})):i.value==="api"?(o(),N(Va,{key:1})):i.value==="push"?(o(),N(Ka,{key:2})):D("",!0)],2),e("div",{class:z(["mt-6 flex items-center gap-3 transition-all duration-700 ease-out delay-300",g.value?"opacity-100 translate-y-0":"opacity-0 translate-y-3"])},[k.value?(o(),N(Ko,{key:0})):D("",!0),m(A,{href:P.value,target:"_blank","trailing-icon":"i-heroicons-chevron-right-20-solid"},{default:E(()=>[R(a(t(s)("home.quickStart.export")),1)]),_:1},8,["href"])],2)]),m(qo,{onOpenChangelog:v,onOpenTerms:u})]),m(Et,{onDone:I}),m(qt,{ref_key:"agreementModalRef",ref:c},null,512),m(ns),m(jo,{ref_key:"changelogModalRef",ref:d},null,512)])}}});export{ri as default};