aitu-app 0.6.78 → 0.6.80

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 (203) hide show
  1. package/README.md +3 -3
  2. package/assets/CanvasAudioPlayer-CSFENxi6.js +2 -0
  3. package/assets/ChatDrawer-CWZQP5R5.css +1 -0
  4. package/assets/ChatDrawer-sVEVW11M.js +11 -0
  5. package/assets/ChatMessagesArea-Cnb94V8-.js +7 -0
  6. package/assets/ChatMessagesArea-PlF5AwzD.css +1 -0
  7. package/assets/DeferredAIInputBar-D99l6sBS.js +8 -0
  8. package/assets/DrawnixDeferredFeatures-78cIu-ev.js +2 -0
  9. package/assets/{KnowledgeBaseContent-DcX5Jofx.js → KnowledgeBaseContent-DZ-1fPZa.js} +10 -10
  10. package/assets/{MVCreator-DllHozYg.js → MVCreator-BV8KDR6E.js} +8 -8
  11. package/assets/ModelBenchmarkWorkbench-DL6r0Z_5.js +2 -0
  12. package/assets/MusicAnalyzer-D9Bpmhym.css +1 -0
  13. package/assets/{MusicAnalyzer-DDeT6g3c.js → MusicAnalyzer-DQtjf36o.js} +2 -2
  14. package/assets/{MusicAnalyzer-CHcQ5t4P.js → MusicAnalyzer-u_5sy56T.js} +1 -1
  15. package/assets/PromptHistoryTool-B-ktaOpK.js +2 -0
  16. package/assets/PromptHistoryTool-BH7hq916.css +1 -0
  17. package/assets/ResizableDivider-BpUFdkte.js +1 -0
  18. package/assets/TaskQueuePanel-BLD1r7_I.js +1 -0
  19. package/assets/{VideoAnalyzer-BSLz1FaI.js → VideoAnalyzer-Bjv9pyDs.js} +2 -2
  20. package/assets/ai-generation-preferences-service-BSpgVCHz.js +1 -0
  21. package/assets/arc-CnA_FoJK.js +1 -0
  22. package/assets/{arc-BU2KKCa_.js → arc-DDvk_-VM.js} +1 -1
  23. package/assets/{batch-image-generation-Bg68r_Ql.js → batch-image-generation-N-lwbjRE.js} +3 -3
  24. package/assets/{blockDiagram-38ab4fdb-BCGEnMME.js → blockDiagram-38ab4fdb-B2G4wjZe.js} +6 -6
  25. package/assets/{blockDiagram-38ab4fdb-CsZR5uC5.js → blockDiagram-38ab4fdb-DBkZWrKk.js} +1 -1
  26. package/assets/{browser-DpICcNby.js → browser-ZXTF4AKv.js} +1 -1
  27. package/assets/{c4Diagram-3d4e48cf-9fuiuFdV.js → c4Diagram-3d4e48cf-BFg-wccg.js} +1 -1
  28. package/assets/{c4Diagram-3d4e48cf-WM4wd_GR.js → c4Diagram-3d4e48cf-CmyNnfip.js} +1 -1
  29. package/assets/{canvas-insertion-CdUQF7IV.js → canvas-insertion-CKIoVZ9a.js} +1 -1
  30. package/assets/channel-BQh3J7kz.js +1 -0
  31. package/assets/channel-CPsF_uSp.js +1 -0
  32. package/assets/{classDiagram-70f12bd4-DcYDedz1.js → classDiagram-70f12bd4-BoP-e23u.js} +2 -2
  33. package/assets/{classDiagram-70f12bd4-CBVHTwQu.js → classDiagram-70f12bd4-UTHJc2XA.js} +1 -1
  34. package/assets/classDiagram-v2-f2320105-BeBc2H-D.js +2 -0
  35. package/assets/{classDiagram-v2-f2320105-jpCwaHEd.js → classDiagram-v2-f2320105-Bjwz5ljW.js} +1 -1
  36. package/assets/{clipper-jvd5rF5a.js → clipper-NoHaeWV4.js} +1 -1
  37. package/assets/clone-CA2KqVCK.js +1 -0
  38. package/assets/createText-2e5e7dd3-Bsu7vT-L.js +8 -0
  39. package/assets/{createText-2e5e7dd3-x5lOIwut.js → createText-2e5e7dd3-DrWUfa-s.js} +1 -1
  40. package/assets/{edges-e0da2a9e-CbrF4nbD.js → edges-e0da2a9e-B9sYOHRt.js} +1 -1
  41. package/assets/{edges-e0da2a9e-Ch6PBwWs.js → edges-e0da2a9e-DX4IQMED.js} +1 -1
  42. package/assets/{erDiagram-9861fffd-DSlNVuAZ.js → erDiagram-9861fffd-B-LfsIMf.js} +1 -1
  43. package/assets/{erDiagram-9861fffd-Bq07elcI.js → erDiagram-9861fffd-DPdud_LA.js} +1 -1
  44. package/assets/{flowDb-956e92f1-Ti5YC4Vv.js → flowDb-956e92f1-C3xKlizM.js} +1 -1
  45. package/assets/{flowDb-956e92f1-BqPCJlZp.js → flowDb-956e92f1-Ck5oiEta.js} +1 -1
  46. package/assets/{flowDiagram-66a62f08-CPDuG3rY.js → flowDiagram-66a62f08-Bkt2NoHM.js} +4 -4
  47. package/assets/{flowDiagram-66a62f08-D3GSABFi.js → flowDiagram-66a62f08-CJnxo6dI.js} +1 -1
  48. package/assets/flowDiagram-v2-96b9c2cf-MnwxRDMO.js +1 -0
  49. package/assets/flowDiagram-v2-96b9c2cf-U7nNPvdl.js +1 -0
  50. package/assets/{flowchart-elk-definition-4a651766-BH09NeLA.js → flowchart-elk-definition-4a651766-2XkrsdKI.js} +2 -2
  51. package/assets/{flowchart-elk-definition-4a651766-BLaLPCDV.js → flowchart-elk-definition-4a651766-ec8y1a8S.js} +1 -1
  52. package/assets/{ganttDiagram-c361ad54-DL9ZeaEc.js → ganttDiagram-c361ad54-1TA0mZY_.js} +3 -3
  53. package/assets/{ganttDiagram-c361ad54-Sp9M1KHP.js → ganttDiagram-c361ad54-D-OrVtXV.js} +3 -3
  54. package/assets/{gitGraphDiagram-72cf32ee-BWwmRKo-.js → gitGraphDiagram-72cf32ee-Blt3RsBD.js} +1 -1
  55. package/assets/{gitGraphDiagram-72cf32ee-BSf1fsDV.js → gitGraphDiagram-72cf32ee-CKf6xgO1.js} +1 -1
  56. package/assets/{graph-g-2U7grQ.js → graph-CUYgHJmb.js} +1 -1
  57. package/assets/{graph--nPw8zXQ.js → graph-WeSRtsZO.js} +1 -1
  58. package/assets/{index-ZrVeQUWo.js → index--MqiaN5t.js} +1 -1
  59. package/assets/{index-C5eu4uSl.js → index-0b_TeH8L.js} +11 -11
  60. package/assets/{index-3862675e-BXwbZ2pz.js → index-3862675e-C2ipEQC8.js} +1 -1
  61. package/assets/{index-3862675e-D6Zy95zZ.js → index-3862675e-CeX6VlsU.js} +1 -1
  62. package/assets/{index-CLJUfzvO.js → index-B-J0JJak.js} +1 -1
  63. package/assets/{index-TkfyNewx.js → index-B7Hj7g41.js} +1 -1
  64. package/assets/{index-eZfwJ9bV.js → index-BS_v5cOh.js} +1 -1
  65. package/assets/index-Btk31p7r.js +1 -0
  66. package/assets/{index-DH12_HTj.js → index-C-Samsu3.js} +2 -2
  67. package/assets/index-C-llNX01.js +1 -0
  68. package/assets/index-C8c9icsH.js +2 -0
  69. package/assets/{index-D7b5fX1d.js → index-CAn2jfNg.js} +1 -1
  70. package/assets/{index-Dz8sghkK.js → index-CK2zt94U.js} +1 -1
  71. package/assets/{index-CfgvFFx3.js → index-CP51k4n6.js} +17 -17
  72. package/assets/{index-DI0OV6F8.js → index-CXBhIy30.js} +1 -1
  73. package/assets/index-C_Mj1wbj.js +2 -0
  74. package/assets/{index-BwSnJN93.js → index-CbfE0MBd.js} +1 -1
  75. package/assets/{index-C3qD42ws.js → index-CjeDxq0c.js} +1 -1
  76. package/assets/{index-DqMndQiP.js → index-Ct7OFnWK.js} +1 -1
  77. package/assets/{index-BaCHOxhI.js → index-CxxUIkx1.js} +1 -1
  78. package/assets/{index-B2dttXd7.js → index-D2Kc-3MO.js} +1 -1
  79. package/assets/{index-Bq8mPedC.js → index-DK0XEByD.js} +1 -1
  80. package/assets/{index-DllL1sx1.js → index-DQcV2DYj.js} +1 -1
  81. package/assets/{index-BP77pG9S.js → index-DSKRBuhn.js} +73 -73
  82. package/assets/{index-BXzGHPXz.js → index-DXqL8NRE.js} +2 -2
  83. package/assets/{index-B7V7-Vxz.js → index-DcLrRIlS.js} +1 -1
  84. package/assets/{index-D4pIkh3S.js → index-DdA-dF0D.js} +1 -1
  85. package/assets/{index-QkP3EC02.js → index-DdxTnVj5.js} +1 -1
  86. package/assets/{index-CmyOpFTN.js → index-DmrnShhc.js} +1 -1
  87. package/assets/{index-Bti3m-iW.js → index-QO0uGVDP.js} +1 -1
  88. package/assets/{index-BPR_DyGD.js → index-aIKXDB1M.js} +1 -1
  89. package/assets/{index-DIiIUyb-.js → index-n6JhNACm.js} +1 -1
  90. package/assets/{index-BWrcsh8u.js → index-qbS_W7PW.js} +1 -1
  91. package/assets/index-v7iKPBEu.css +1 -0
  92. package/assets/{infoDiagram-f8f76790-DpFqCCNv.js → infoDiagram-f8f76790-DEWQ3NXc.js} +1 -1
  93. package/assets/{infoDiagram-f8f76790-G2JpJJP7.js → infoDiagram-f8f76790-u_qjHFCm.js} +3 -3
  94. package/assets/{journeyDiagram-49397b02-DLLTobRM.js → journeyDiagram-49397b02-C8A30CBr.js} +1 -1
  95. package/assets/{journeyDiagram-49397b02-BdESGMrv.js → journeyDiagram-49397b02-hQJfqZih.js} +1 -1
  96. package/assets/{layout-WSR0vNPO.js → layout-CFKTKeqQ.js} +1 -1
  97. package/assets/{layout-CVkuImk4.js → layout-DvRyabpG.js} +1 -1
  98. package/assets/{line-D3bnG227.js → line-C72F34Po.js} +1 -1
  99. package/assets/{line-DQuMJveY.js → line-W5R41tQ1.js} +1 -1
  100. package/assets/{linear-CciP-97N.js → linear-7FXykgHM.js} +1 -1
  101. package/assets/{linear-Z6vFvuwc.js → linear-CVyOPUvz.js} +1 -1
  102. package/assets/main-BO0HWBB1.js +42 -0
  103. package/assets/{main-8DNjLY6L.css → main-DAuE07rf.css} +1 -1
  104. package/assets/{mermaid.core-CwZQb0ud.js → mermaid.core-2VcXhn43.js} +4 -4
  105. package/assets/{mindmap-definition-fc14e90a-BnJ8OOTI.js → mindmap-definition-fc14e90a-CcVXKGg4.js} +1 -1
  106. package/assets/{mindmap-definition-fc14e90a-CxQMydCW.js → mindmap-definition-fc14e90a-DRDYXe84.js} +2 -2
  107. package/assets/model-benchmark-launcher-C2qBiDlM.js +1 -0
  108. package/assets/{photo-wall-splitter-BZ88W5Zy.js → photo-wall-splitter-CFntSOdS.js} +1 -1
  109. package/assets/{pieDiagram-8a3498a8-BSDdkTeu.js → pieDiagram-8a3498a8-Be9dl9pU.js} +1 -1
  110. package/assets/{pieDiagram-8a3498a8-D6VtAoja.js → pieDiagram-8a3498a8-DXZOJYBv.js} +5 -5
  111. package/assets/ppt-generation-B5fKT_by.js +48 -0
  112. package/assets/{quadrantDiagram-120e2f19-C8k2xuBd.js → quadrantDiagram-120e2f19-DoU7aQSp.js} +3 -3
  113. package/assets/{quadrantDiagram-120e2f19-BbFV0VXY.js → quadrantDiagram-120e2f19-l5K9mx26.js} +1 -1
  114. package/assets/{requirementDiagram-deff3bca-C3xMdzJV.js → requirementDiagram-deff3bca-DN_87Wxe.js} +1 -1
  115. package/assets/{requirementDiagram-deff3bca-CpjqKjYZ.js → requirementDiagram-deff3bca-DOooq7kx.js} +1 -1
  116. package/assets/retry-image-BmIVuAVu.js +6 -0
  117. package/assets/{sankeyDiagram-04a897e0-Bjvig9bW.js → sankeyDiagram-04a897e0-BB33nO6_.js} +1 -1
  118. package/assets/{sankeyDiagram-04a897e0-BBJJgsFv.js → sankeyDiagram-04a897e0-CCa0hwml.js} +2 -2
  119. package/assets/{sequenceDiagram-704730f1-PFC_9IFI.js → sequenceDiagram-704730f1-CNhXZiix.js} +1 -1
  120. package/assets/{sequenceDiagram-704730f1-DX1MmBN_.js → sequenceDiagram-704730f1-ZqQ1QrY-.js} +1 -1
  121. package/assets/settings-dialog-BFuWTeQR.js +1 -0
  122. package/assets/{skill-dsl-parser-syNWYxFu.js → skill-dsl-parser-b-aB3P5u.js} +1 -1
  123. package/assets/{stateDiagram-587899a1-Dc3mI_B_.js → stateDiagram-587899a1-BBlOIJr7.js} +1 -1
  124. package/assets/{stateDiagram-587899a1-SFMUVAam.js → stateDiagram-587899a1-BhomZ0AN.js} +1 -1
  125. package/assets/{stateDiagram-v2-d93cdb3a-P4Yt2p_j.js → stateDiagram-v2-d93cdb3a-BpJsgMa0.js} +1 -1
  126. package/assets/stateDiagram-v2-d93cdb3a-CuOn9du2.js +1 -0
  127. package/assets/{styles-6aaf32cf-C3jnr3hV.js → styles-6aaf32cf-C2WEewoA.js} +1 -1
  128. package/assets/{styles-6aaf32cf-b6AdP7fu.js → styles-6aaf32cf-CTtf8moq.js} +1 -1
  129. package/assets/{styles-9a916d00-BUiD9iBe.js → styles-9a916d00-44Xi2-39.js} +1 -1
  130. package/assets/{styles-9a916d00-ii0XTdIm.js → styles-9a916d00-DUU3VgNe.js} +4 -4
  131. package/assets/{styles-c10674c1-DbTSpy3W.js → styles-c10674c1--AhWSGg7.js} +1 -1
  132. package/assets/styles-c10674c1-DS-wE3tK.js +116 -0
  133. package/assets/{svgDrawCommon-08f97a94-D4gIV05W.js → svgDrawCommon-08f97a94-CXcvtSSy.js} +1 -1
  134. package/assets/{svgDrawCommon-08f97a94-BK6lD4D6.js → svgDrawCommon-08f97a94-Dyqh4V2s.js} +1 -1
  135. package/assets/{timeline-definition-85554ec2-Bl2y548G.js → timeline-definition-85554ec2-k788753O.js} +1 -1
  136. package/assets/{timeline-definition-85554ec2-CWKg_JxG.js → timeline-definition-85554ec2-sw6-UuBe.js} +1 -1
  137. package/assets/tool-windows-BEnZdJqF.js +2948 -0
  138. package/assets/{tool-windows-CUNbW1Tz.css → tool-windows-D61Le6TE.css} +1 -1
  139. package/assets/ttd-dialog-BJzXAZ0l.js +99 -0
  140. package/assets/useCharacters-DRBoWvvj.css +1 -0
  141. package/assets/useCharacters-gsV4K8Hn.js +2 -0
  142. package/assets/{useWorkflowSubmission-BizuDmuw.js → useWorkflowSubmission-XRR21P6Y.js} +10 -10
  143. package/assets/{video-analyze-6v3Y-rUE.js → video-analyze-CpbnpSiI.js} +1 -1
  144. package/assets/{video-generation-DnmTlWnm.js → video-generation-BXhS7x-a.js} +2 -2
  145. package/assets/video-recovery-service-6G2lkWcu.js +1 -0
  146. package/assets/workflow-generation-utils-CYxtSHl0.js +3 -0
  147. package/assets/workflow-submission-service-DygSzydV.js +4 -0
  148. package/assets/{xychartDiagram-e933f94c-CJX9_9WF.js → xychartDiagram-e933f94c-CvTTDwPb.js} +3 -3
  149. package/assets/{xychartDiagram-e933f94c-Cep8CQEH.js → xychartDiagram-e933f94c-Ga9zi9ha.js} +1 -1
  150. package/changelog.json +45 -0
  151. package/idle-prefetch-manifest.json +310 -306
  152. package/manifest.json +3 -3
  153. package/package.json +1 -1
  154. package/precache-manifest.json +10 -10
  155. package/sitemap.xml +37 -0
  156. package/sw-debug/app.js +269 -156
  157. package/sw-debug/backup-restore.js +235 -103
  158. package/sw-debug/crypto-helper.js +116 -120
  159. package/sw-debug/duplex-client.js +33 -19
  160. package/sw-debug/gist-management.js +938 -655
  161. package/sw-debug/sw-communication.js +87 -50
  162. package/sw.js +5 -5
  163. package/version.json +7 -17
  164. package/assets/CanvasAudioPlayer-DutgwdiU.js +0 -2
  165. package/assets/ChatDrawer-0jNvKIoI.css +0 -1
  166. package/assets/ChatDrawer-E6Fog16I.js +0 -11
  167. package/assets/ChatMessagesArea-Bgwiz_XP.js +0 -250
  168. package/assets/ChatMessagesArea-DyR_wHFQ.css +0 -1
  169. package/assets/DeferredAIInputBar-CPkD8Cv9.js +0 -8
  170. package/assets/DrawnixDeferredFeatures-Cul76-88.js +0 -2
  171. package/assets/ModelBenchmarkWorkbench-Dv9SNYTi.js +0 -2
  172. package/assets/MusicAnalyzer-DhtRGpAp.css +0 -1
  173. package/assets/ResizableDivider-CaG9JQbJ.js +0 -1
  174. package/assets/TaskQueuePanel-BNhNzGp5.js +0 -1
  175. package/assets/ai-generation-preferences-service-BF7QkuJp.js +0 -1
  176. package/assets/arc-DmGoDCEL.js +0 -1
  177. package/assets/channel-CZjE-WNp.js +0 -1
  178. package/assets/channel-SXZD6bG3.js +0 -1
  179. package/assets/classDiagram-v2-f2320105-CsxWGkSy.js +0 -2
  180. package/assets/clone-C4mvvMDb.js +0 -1
  181. package/assets/createText-2e5e7dd3-CkXS3l7I.js +0 -5
  182. package/assets/flowDiagram-v2-96b9c2cf-BCcJ-cre.js +0 -1
  183. package/assets/flowDiagram-v2-96b9c2cf-DCVaFEgV.js +0 -1
  184. package/assets/index-3eqA7Bag.js +0 -1
  185. package/assets/index-7Q-aiwln.js +0 -4
  186. package/assets/index-B1XP5g7P.css +0 -1
  187. package/assets/index-BHPTfCZM.js +0 -1
  188. package/assets/index-BqHZCcen.js +0 -2
  189. package/assets/index-DcZrElEK.js +0 -2
  190. package/assets/index-gQ7LgvSv.js +0 -12
  191. package/assets/main-BFEkxCOK.js +0 -56
  192. package/assets/model-benchmark-launcher-Ct3lYXVq.js +0 -1
  193. package/assets/ppt-generation-FzjP_rp0.js +0 -48
  194. package/assets/settings-dialog-CQM4v791.js +0 -1
  195. package/assets/stateDiagram-v2-d93cdb3a-DmnBjHpC.js +0 -1
  196. package/assets/styles-c10674c1-Bt89Yy8Q.js +0 -116
  197. package/assets/tool-windows-DOIu9TAD.js +0 -2975
  198. package/assets/ttd-dialog-DI4kQSg8.js +0 -99
  199. package/assets/useCharacters-Chv4Ky7x.js +0 -7
  200. package/assets/useCharacters-OrDbG69o.css +0 -1
  201. package/assets/video-recovery-service-BeRoh0s2.js +0 -1
  202. package/assets/workflow-generation-utils-me381Cax.js +0 -3
  203. package/assets/workflow-submission-service-YOpo7g37.js +0 -4
@@ -86,7 +86,13 @@ async function performRestore(file) {
86
86
  throw new Error(`不支持的备份版本: ${manifest.version}`);
87
87
  }
88
88
 
89
- const stats = { prompts: 0, projects: 0, tasks: 0, knowledgeBase: 0, assets: 0 };
89
+ const stats = {
90
+ prompts: 0,
91
+ projects: 0,
92
+ tasks: 0,
93
+ knowledgeBase: 0,
94
+ assets: 0,
95
+ };
90
96
 
91
97
  // 1. 恢复提示词
92
98
  if (manifest.includes?.prompts !== false) {
@@ -126,7 +132,6 @@ async function performRestore(file) {
126
132
  progressContainer.remove();
127
133
  showRestoreSuccessNotification(stats, manifest);
128
134
  }, 500);
129
-
130
135
  } catch (error) {
131
136
  progressContainer.remove();
132
137
  throw error;
@@ -147,8 +152,10 @@ async function restorePrompts(zip) {
147
152
  const mergePromptList = async (kvKey, incoming) => {
148
153
  if (!incoming || incoming.length === 0) return 0;
149
154
  const existing = (await readKVItem(kvKey)) || [];
150
- const existingContents = new Set(existing.map(p => p.content));
151
- const newItems = incoming.filter(p => p.content && !existingContents.has(p.content));
155
+ const existingContents = new Set(existing.map((p) => p.content));
156
+ const newItems = incoming.filter(
157
+ (p) => p.content && !existingContents.has(p.content)
158
+ );
152
159
  if (newItems.length > 0) {
153
160
  await writeKVItem(kvKey, [...existing, ...newItems]);
154
161
  }
@@ -156,8 +163,14 @@ async function restorePrompts(zip) {
156
163
  };
157
164
 
158
165
  count += await mergePromptList(KV_KEYS.PROMPT_HISTORY, data.promptHistory);
159
- count += await mergePromptList(KV_KEYS.VIDEO_PROMPT_HISTORY, data.videoPromptHistory);
160
- count += await mergePromptList(KV_KEYS.IMAGE_PROMPT_HISTORY, data.imagePromptHistory);
166
+ count += await mergePromptList(
167
+ KV_KEYS.VIDEO_PROMPT_HISTORY,
168
+ data.videoPromptHistory
169
+ );
170
+ count += await mergePromptList(
171
+ KV_KEYS.IMAGE_PROMPT_HISTORY,
172
+ data.imagePromptHistory
173
+ );
161
174
 
162
175
  // 恢复预设设置(如果本地没有则写入)
163
176
  if (data.presetSettings) {
@@ -206,21 +219,29 @@ async function restoreProjects(zip) {
206
219
  });
207
220
  }
208
221
  } catch (err) {
209
- console.debug('[Restore] Failed to parse board file:', file.name, err);
222
+ void err;
210
223
  }
211
224
  }
212
225
 
213
226
  const existingFolders = await readAllFromIDB(
214
- IDB_STORES.WORKSPACE.name, IDB_STORES.WORKSPACE.stores.FOLDERS
227
+ IDB_STORES.WORKSPACE.name,
228
+ IDB_STORES.WORKSPACE.stores.FOLDERS
229
+ );
230
+ const folderRestore = await restoreProjectFolders(
231
+ zip,
232
+ existingFolders || [],
233
+ drawnixFiles.map((file) => file.name)
215
234
  );
216
- const folderRestore = await restoreProjectFolders(zip, existingFolders || [], drawnixFiles.map(file => file.name));
217
235
 
218
236
  // 写入画板(upsert)
219
237
  if (boards.length > 0) {
220
238
  const existingBoards = await readAllFromIDB(
221
- IDB_STORES.WORKSPACE.name, IDB_STORES.WORKSPACE.stores.BOARDS
239
+ IDB_STORES.WORKSPACE.name,
240
+ IDB_STORES.WORKSPACE.stores.BOARDS
241
+ );
242
+ const existingBoardMap = new Map(
243
+ (existingBoards || []).map((b) => [b.id, b])
222
244
  );
223
- const existingBoardMap = new Map((existingBoards || []).map(b => [b.id, b]));
224
245
 
225
246
  for (let i = 0; i < boards.length; i++) {
226
247
  const board = boards[i];
@@ -231,20 +252,27 @@ async function restoreProjects(zip) {
231
252
  const filePath = drawnixFiles[i]?.name || '';
232
253
  const relativePath = filePath.replace(/^projects\//, '');
233
254
  const parts = relativePath.split('/');
234
- const folderPath = parts.length > 1 ? parts.slice(0, -1).join('/') : null;
255
+ const folderPath =
256
+ parts.length > 1 ? parts.slice(0, -1).join('/') : null;
235
257
  const folderId = folderPath
236
- ? folderRestore.pathToId.get(folderPath)
237
- || (board.folderId ? folderRestore.importedToLocalId.get(board.folderId) : null)
238
- || board.folderId
239
- || null
258
+ ? folderRestore.pathToId.get(folderPath) ||
259
+ (board.folderId
260
+ ? folderRestore.importedToLocalId.get(board.folderId)
261
+ : null) ||
262
+ board.folderId ||
263
+ null
240
264
  : null;
241
- await writeToIDB(IDB_STORES.WORKSPACE.name, IDB_STORES.WORKSPACE.stores.BOARDS, {
242
- ...board,
243
- folderId,
244
- });
265
+ await writeToIDB(
266
+ IDB_STORES.WORKSPACE.name,
267
+ IDB_STORES.WORKSPACE.stores.BOARDS,
268
+ {
269
+ ...board,
270
+ folderId,
271
+ }
272
+ );
245
273
  count++;
246
274
  } catch (err) {
247
- console.debug('[Restore] Failed to write board:', board.id, err);
275
+ void err;
248
276
  }
249
277
  }
250
278
  }
@@ -262,14 +290,21 @@ async function restoreTasks(zip) {
262
290
  const tasks = JSON.parse(await tasksFile.async('string'));
263
291
  if (!Array.isArray(tasks) || tasks.length === 0) return 0;
264
292
 
265
- const existingTasks = await readAllFromIDB(SW_TASK_QUEUE_DB.name, SW_TASK_QUEUE_DB.stores.TASKS);
266
- const existingIds = new Set((existingTasks || []).map(t => t.id));
293
+ const existingTasks = await readAllFromIDB(
294
+ SW_TASK_QUEUE_DB.name,
295
+ SW_TASK_QUEUE_DB.stores.TASKS
296
+ );
297
+ const existingIds = new Set((existingTasks || []).map((t) => t.id));
267
298
 
268
- const newTasks = tasks.filter(t => !existingIds.has(t.id));
299
+ const newTasks = tasks.filter((t) => !existingIds.has(t.id));
269
300
  if (newTasks.length > 0) {
270
301
  // 标记为远程同步,避免 SW 重新执行
271
- const markedTasks = newTasks.map(t => ({ ...t, syncedFromRemote: true }));
272
- await writeBatchToIDB(SW_TASK_QUEUE_DB.name, SW_TASK_QUEUE_DB.stores.TASKS, markedTasks);
302
+ const markedTasks = newTasks.map((t) => ({ ...t, syncedFromRemote: true }));
303
+ await writeBatchToIDB(
304
+ SW_TASK_QUEUE_DB.name,
305
+ SW_TASK_QUEUE_DB.stores.TASKS,
306
+ markedTasks
307
+ );
273
308
  }
274
309
 
275
310
  return newTasks.length;
@@ -300,16 +335,24 @@ async function restoreAssets(zip, onProgress) {
300
335
  try {
301
336
  const meta = JSON.parse(await file.async('string'));
302
337
  const assetId = meta.id;
303
- if (!assetId) { processedCount++; continue; }
338
+ if (!assetId) {
339
+ processedCount++;
340
+ continue;
341
+ }
304
342
 
305
343
  // 查找对应的二进制文件
306
- const binaryFile = findBinaryFile(assetsFolder, relativePath, meta.mimeType);
344
+ const binaryFile = findBinaryFile(
345
+ assetsFolder,
346
+ relativePath,
347
+ meta.mimeType
348
+ );
307
349
 
308
350
  if (binaryFile) {
309
351
  const blob = await binaryFile.async('blob');
310
352
  if (blob.size > 0 && meta.url) {
311
353
  // 写入 Cache Storage(为每个 URL 创建独立 Response)
312
- const contentType = meta.mimeType || blob.type || 'application/octet-stream';
354
+ const contentType =
355
+ meta.mimeType || blob.type || 'application/octet-stream';
313
356
  const response = new Response(blob, {
314
357
  headers: { 'Content-Type': contentType },
315
358
  });
@@ -329,7 +372,11 @@ async function restoreAssets(zip, onProgress) {
329
372
  lastUsed: meta.updatedAt || meta.createdAt,
330
373
  metadata: meta.metadata,
331
374
  };
332
- await writeToIDB(IDB_STORES.UNIFIED_CACHE.name, IDB_STORES.UNIFIED_CACHE.store, cacheItem);
375
+ await writeToIDB(
376
+ IDB_STORES.UNIFIED_CACHE.name,
377
+ IDB_STORES.UNIFIED_CACHE.store,
378
+ cacheItem
379
+ );
333
380
  } else {
334
381
  // 本地素材 → aitu-assets
335
382
  await writeToIDB(IDB_STORES.ASSETS.name, IDB_STORES.ASSETS.store, meta);
@@ -337,7 +384,7 @@ async function restoreAssets(zip, onProgress) {
337
384
 
338
385
  count++;
339
386
  } catch (err) {
340
- console.debug('[Restore] Failed to restore asset:', relativePath, err);
387
+ void err;
341
388
  }
342
389
 
343
390
  processedCount++;
@@ -356,30 +403,35 @@ async function restoreKnowledgeBase(zip) {
356
403
 
357
404
  const data = JSON.parse(await kbFile.async('string'));
358
405
  const result = await importKnowledgeBaseData(data, {
359
- getAllDirectories: () => readAllFromIDB(
360
- IDB_STORES.KNOWLEDGE_BASE.name,
361
- IDB_STORES.KNOWLEDGE_BASE.stores.DIRECTORIES
362
- ),
363
- getDirectoryById: (id) => readItemFromIDB(
364
- IDB_STORES.KNOWLEDGE_BASE.name,
365
- IDB_STORES.KNOWLEDGE_BASE.stores.DIRECTORIES,
366
- id
367
- ),
368
- putDirectory: (_id, value) => writeToIDB(
369
- IDB_STORES.KNOWLEDGE_BASE.name,
370
- IDB_STORES.KNOWLEDGE_BASE.stores.DIRECTORIES,
371
- value
372
- ),
373
- getTagById: (id) => readItemFromIDB(
374
- IDB_STORES.KNOWLEDGE_BASE.name,
375
- IDB_STORES.KNOWLEDGE_BASE.stores.TAGS,
376
- id
377
- ),
378
- putTag: (_id, value) => writeToIDB(
379
- IDB_STORES.KNOWLEDGE_BASE.name,
380
- IDB_STORES.KNOWLEDGE_BASE.stores.TAGS,
381
- value
382
- ),
406
+ getAllDirectories: () =>
407
+ readAllFromIDB(
408
+ IDB_STORES.KNOWLEDGE_BASE.name,
409
+ IDB_STORES.KNOWLEDGE_BASE.stores.DIRECTORIES
410
+ ),
411
+ getDirectoryById: (id) =>
412
+ readItemFromIDB(
413
+ IDB_STORES.KNOWLEDGE_BASE.name,
414
+ IDB_STORES.KNOWLEDGE_BASE.stores.DIRECTORIES,
415
+ id
416
+ ),
417
+ putDirectory: (_id, value) =>
418
+ writeToIDB(
419
+ IDB_STORES.KNOWLEDGE_BASE.name,
420
+ IDB_STORES.KNOWLEDGE_BASE.stores.DIRECTORIES,
421
+ value
422
+ ),
423
+ getTagById: (id) =>
424
+ readItemFromIDB(
425
+ IDB_STORES.KNOWLEDGE_BASE.name,
426
+ IDB_STORES.KNOWLEDGE_BASE.stores.TAGS,
427
+ id
428
+ ),
429
+ putTag: (_id, value) =>
430
+ writeToIDB(
431
+ IDB_STORES.KNOWLEDGE_BASE.name,
432
+ IDB_STORES.KNOWLEDGE_BASE.stores.TAGS,
433
+ value
434
+ ),
383
435
  getNoteById: async (id) => {
384
436
  const meta = await readItemFromIDB(
385
437
  IDB_STORES.KNOWLEDGE_BASE.name,
@@ -397,36 +449,42 @@ async function restoreKnowledgeBase(zip) {
397
449
  content: contentRecord?.content ?? '',
398
450
  };
399
451
  },
400
- putNoteMeta: (_id, value) => writeToIDB(
401
- IDB_STORES.KNOWLEDGE_BASE.name,
402
- IDB_STORES.KNOWLEDGE_BASE.stores.NOTES,
403
- value
404
- ),
405
- putNoteContent: (_id, value) => writeToIDB(
406
- IDB_STORES.KNOWLEDGE_BASE.name,
407
- IDB_STORES.KNOWLEDGE_BASE.stores.NOTE_CONTENTS,
408
- value
409
- ),
410
- getNoteTagById: (id) => readItemFromIDB(
411
- IDB_STORES.KNOWLEDGE_BASE.name,
412
- IDB_STORES.KNOWLEDGE_BASE.stores.NOTE_TAGS,
413
- id
414
- ),
415
- putNoteTag: (_id, value) => writeToIDB(
416
- IDB_STORES.KNOWLEDGE_BASE.name,
417
- IDB_STORES.KNOWLEDGE_BASE.stores.NOTE_TAGS,
418
- value
419
- ),
420
- getNoteImageById: (id) => readItemFromIDB(
421
- IDB_STORES.KNOWLEDGE_BASE.name,
422
- IDB_STORES.KNOWLEDGE_BASE.stores.NOTE_IMAGES,
423
- id
424
- ),
425
- putNoteImage: (_id, value) => writeToIDB(
426
- IDB_STORES.KNOWLEDGE_BASE.name,
427
- IDB_STORES.KNOWLEDGE_BASE.stores.NOTE_IMAGES,
428
- value
429
- ),
452
+ putNoteMeta: (_id, value) =>
453
+ writeToIDB(
454
+ IDB_STORES.KNOWLEDGE_BASE.name,
455
+ IDB_STORES.KNOWLEDGE_BASE.stores.NOTES,
456
+ value
457
+ ),
458
+ putNoteContent: (_id, value) =>
459
+ writeToIDB(
460
+ IDB_STORES.KNOWLEDGE_BASE.name,
461
+ IDB_STORES.KNOWLEDGE_BASE.stores.NOTE_CONTENTS,
462
+ value
463
+ ),
464
+ getNoteTagById: (id) =>
465
+ readItemFromIDB(
466
+ IDB_STORES.KNOWLEDGE_BASE.name,
467
+ IDB_STORES.KNOWLEDGE_BASE.stores.NOTE_TAGS,
468
+ id
469
+ ),
470
+ putNoteTag: (_id, value) =>
471
+ writeToIDB(
472
+ IDB_STORES.KNOWLEDGE_BASE.name,
473
+ IDB_STORES.KNOWLEDGE_BASE.stores.NOTE_TAGS,
474
+ value
475
+ ),
476
+ getNoteImageById: (id) =>
477
+ readItemFromIDB(
478
+ IDB_STORES.KNOWLEDGE_BASE.name,
479
+ IDB_STORES.KNOWLEDGE_BASE.stores.NOTE_IMAGES,
480
+ id
481
+ ),
482
+ putNoteImage: (_id, value) =>
483
+ writeToIDB(
484
+ IDB_STORES.KNOWLEDGE_BASE.name,
485
+ IDB_STORES.KNOWLEDGE_BASE.stores.NOTE_IMAGES,
486
+ value
487
+ ),
430
488
  });
431
489
 
432
490
  return result.noteCount;
@@ -435,28 +493,47 @@ async function restoreKnowledgeBase(zip) {
435
493
  async function restoreProjectFolders(zip, existingFolders, drawnixFilePaths) {
436
494
  const importedToLocalId = new Map();
437
495
  const pathToId = new Map();
438
- const folderKeyMap = new Map(existingFolders.map(folder => [getFolderKey(folder.name, folder.parentId), folder]));
496
+ const folderKeyMap = new Map(
497
+ existingFolders.map((folder) => [
498
+ getFolderKey(folder.name, folder.parentId),
499
+ folder,
500
+ ])
501
+ );
439
502
  const foldersFile = zip.file('projects/_folders.json');
440
503
 
441
504
  if (foldersFile) {
442
505
  const parsed = JSON.parse(await foldersFile.async('string'));
443
- const importedFolders = Array.isArray(parsed) ? parsed : parsed?.folders || [];
444
- const folderMap = new Map(importedFolders.map(folder => [folder.id, folder]));
506
+ const importedFolders = Array.isArray(parsed)
507
+ ? parsed
508
+ : parsed?.folders || [];
509
+ const folderMap = new Map(
510
+ importedFolders.map((folder) => [folder.id, folder])
511
+ );
445
512
  const sortedFolders = [...importedFolders].sort((a, b) => {
446
513
  const depthA = getFolderDepth(a, folderMap);
447
514
  const depthB = getFolderDepth(b, folderMap);
448
- return depthA - depthB || (a.order || 0) - (b.order || 0) || a.name.localeCompare(b.name);
515
+ return (
516
+ depthA - depthB ||
517
+ (a.order || 0) - (b.order || 0) ||
518
+ a.name.localeCompare(b.name)
519
+ );
449
520
  });
450
521
 
451
522
  for (const folder of sortedFolders) {
452
- const mappedParentId = folder.parentId ? importedToLocalId.get(folder.parentId) || null : null;
453
- const existingById = existingFolders.find(item => item.id === folder.id);
523
+ const mappedParentId = folder.parentId
524
+ ? importedToLocalId.get(folder.parentId) || null
525
+ : null;
526
+ const existingById = existingFolders.find(
527
+ (item) => item.id === folder.id
528
+ );
454
529
  if (existingById) {
455
530
  importedToLocalId.set(folder.id, existingById.id);
456
531
  continue;
457
532
  }
458
533
 
459
- const existingByKey = folderKeyMap.get(getFolderKey(folder.name, mappedParentId));
534
+ const existingByKey = folderKeyMap.get(
535
+ getFolderKey(folder.name, mappedParentId)
536
+ );
460
537
  if (existingByKey) {
461
538
  importedToLocalId.set(folder.id, existingByKey.id);
462
539
  continue;
@@ -466,13 +543,23 @@ async function restoreProjectFolders(zip, existingFolders, drawnixFilePaths) {
466
543
  ...folder,
467
544
  parentId: mappedParentId,
468
545
  };
469
- await writeToIDB(IDB_STORES.WORKSPACE.name, IDB_STORES.WORKSPACE.stores.FOLDERS, nextFolder);
546
+ await writeToIDB(
547
+ IDB_STORES.WORKSPACE.name,
548
+ IDB_STORES.WORKSPACE.stores.FOLDERS,
549
+ nextFolder
550
+ );
470
551
  existingFolders.push(nextFolder);
471
- folderKeyMap.set(getFolderKey(nextFolder.name, nextFolder.parentId), nextFolder);
552
+ folderKeyMap.set(
553
+ getFolderKey(nextFolder.name, nextFolder.parentId),
554
+ nextFolder
555
+ );
472
556
  importedToLocalId.set(folder.id, nextFolder.id);
473
557
  }
474
558
 
475
- const allFolders = await readAllFromIDB(IDB_STORES.WORKSPACE.name, IDB_STORES.WORKSPACE.stores.FOLDERS);
559
+ const allFolders = await readAllFromIDB(
560
+ IDB_STORES.WORKSPACE.name,
561
+ IDB_STORES.WORKSPACE.stores.FOLDERS
562
+ );
476
563
  const fullPathMap = buildFolderPathMap(allFolders || []);
477
564
  for (const [folderId, folderPath] of fullPathMap.entries()) {
478
565
  pathToId.set(folderPath, folderId);
@@ -493,7 +580,9 @@ async function restoreProjectFolders(zip, existingFolders, drawnixFilePaths) {
493
580
  }
494
581
 
495
582
  const folder = {
496
- id: `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`,
583
+ id: `${Date.now().toString(36)}-${Math.random()
584
+ .toString(36)
585
+ .slice(2, 10)}`,
497
586
  name: folderName,
498
587
  parentId,
499
588
  order: existingFolders.length,
@@ -501,7 +590,11 @@ async function restoreProjectFolders(zip, existingFolders, drawnixFilePaths) {
501
590
  createdAt: Date.now(),
502
591
  updatedAt: Date.now(),
503
592
  };
504
- await writeToIDB(IDB_STORES.WORKSPACE.name, IDB_STORES.WORKSPACE.stores.FOLDERS, folder);
593
+ await writeToIDB(
594
+ IDB_STORES.WORKSPACE.name,
595
+ IDB_STORES.WORKSPACE.stores.FOLDERS,
596
+ folder
597
+ );
505
598
  existingFolders.push(folder);
506
599
  folderKeyMap.set(getFolderKey(folder.name, folder.parentId), folder);
507
600
  pathToId.set(folderPath, folder.id);
@@ -536,7 +629,9 @@ function showRestoreProgress() {
536
629
  */
537
630
  function showRestoreSuccessNotification(stats, manifest) {
538
631
  const partInfo = manifest.partIndex
539
- ? ` (分片 ${manifest.partIndex}${manifest.totalParts ? '/' + manifest.totalParts : ''})`
632
+ ? ` (分片 ${manifest.partIndex}${
633
+ manifest.totalParts ? '/' + manifest.totalParts : ''
634
+ })`
540
635
  : '';
541
636
  const notification = document.createElement('div');
542
637
  notification.className = 'import-notification restore-notification';
@@ -547,11 +642,48 @@ function showRestoreSuccessNotification(stats, manifest) {
547
642
  <strong>恢复成功${partInfo}</strong>
548
643
  <p class="counts">
549
644
  ${stats.prompts > 0 ? `新增提示词: ${stats.prompts}` : ''}
550
- ${stats.projects > 0 ? `${stats.prompts > 0 ? ' | ' : ''}画板: ${stats.projects}` : ''}
551
- ${stats.tasks > 0 ? `${(stats.prompts + stats.projects) > 0 ? ' | ' : ''}任务: ${stats.tasks}` : ''}
552
- ${stats.knowledgeBase > 0 ? `${(stats.prompts + stats.projects + stats.tasks) > 0 ? ' | ' : ''}知识库笔记: ${stats.knowledgeBase}` : ''}
553
- ${stats.assets > 0 ? `${(stats.prompts + stats.projects + stats.tasks + stats.knowledgeBase) > 0 ? ' | ' : ''}素材: ${stats.assets}` : ''}
554
- ${(stats.prompts + stats.projects + stats.tasks + stats.knowledgeBase + stats.assets) === 0 ? '所有数据已是最新,无需更新' : ''}
645
+ ${
646
+ stats.projects > 0
647
+ ? `${stats.prompts > 0 ? ' | ' : ''}画板: ${stats.projects}`
648
+ : ''
649
+ }
650
+ ${
651
+ stats.tasks > 0
652
+ ? `${stats.prompts + stats.projects > 0 ? ' | ' : ''}任务: ${
653
+ stats.tasks
654
+ }`
655
+ : ''
656
+ }
657
+ ${
658
+ stats.knowledgeBase > 0
659
+ ? `${
660
+ stats.prompts + stats.projects + stats.tasks > 0 ? ' | ' : ''
661
+ }知识库笔记: ${stats.knowledgeBase}`
662
+ : ''
663
+ }
664
+ ${
665
+ stats.assets > 0
666
+ ? `${
667
+ stats.prompts +
668
+ stats.projects +
669
+ stats.tasks +
670
+ stats.knowledgeBase >
671
+ 0
672
+ ? ' | '
673
+ : ''
674
+ }素材: ${stats.assets}`
675
+ : ''
676
+ }
677
+ ${
678
+ stats.prompts +
679
+ stats.projects +
680
+ stats.tasks +
681
+ stats.knowledgeBase +
682
+ stats.assets ===
683
+ 0
684
+ ? '所有数据已是最新,无需更新'
685
+ : ''
686
+ }
555
687
  </p>
556
688
  </div>
557
689
  <button class="close" onclick="this.parentElement.parentElement.remove()">×</button>