chatlab-cli 0.35.0 → 0.36.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 (218) hide show
  1. package/README.md +7 -7
  2. package/dist/{chat-command-24RYGJAS.mjs → chat-command-XPJ43KSW.mjs} +11 -11
  3. package/dist/chat-command-XPJ43KSW.mjs.map +1 -0
  4. package/dist/{chunk-7IGBPZMI.mjs → chunk-2JPFBIAG.mjs} +268 -76
  5. package/dist/chunk-2JPFBIAG.mjs.map +1 -0
  6. package/dist/{chunk-GQMCDWZQ.mjs → chunk-5MJO4AJB.mjs} +2 -2
  7. package/dist/{chunk-QKEARRFH.mjs → chunk-67HNPYZJ.mjs} +3 -3
  8. package/dist/{chunk-U36TQMAF.mjs → chunk-6QP47LID.mjs} +2 -2
  9. package/dist/{chunk-4GWWKHWA.mjs → chunk-FJOGBUXU.mjs} +892 -6990
  10. package/dist/chunk-FJOGBUXU.mjs.map +1 -0
  11. package/dist/{chunk-KIMJXKZO.mjs → chunk-JOVL7OTW.mjs} +2 -2
  12. package/dist/{chunk-ZBPPLXM4.mjs → chunk-L7TIIVAY.mjs} +63 -63
  13. package/dist/chunk-L7TIIVAY.mjs.map +1 -0
  14. package/dist/{chunk-DC7IUDNV.mjs → chunk-NFTCEJBJ.mjs} +27 -9
  15. package/dist/chunk-NFTCEJBJ.mjs.map +1 -0
  16. package/dist/{chunk-KXDJ7N6N.mjs → chunk-NQHZPSW2.mjs} +2 -2
  17. package/dist/chunk-Q3NEL2KK.mjs +19126 -0
  18. package/dist/chunk-Q3NEL2KK.mjs.map +1 -0
  19. package/dist/{chunk-DEFEU567.mjs → chunk-R73XMAB2.mjs} +13 -11
  20. package/dist/chunk-R73XMAB2.mjs.map +1 -0
  21. package/dist/{chunk-BRZ6YIBR.mjs → chunk-X2QBH24F.mjs} +8 -3
  22. package/dist/chunk-X2QBH24F.mjs.map +1 -0
  23. package/dist/chunk-YKMQLAVP.mjs +25 -0
  24. package/dist/chunk-YKMQLAVP.mjs.map +1 -0
  25. package/dist/cli.mjs +10 -10
  26. package/dist/contacts-worker.mjs +2 -2
  27. package/dist/global-insight-worker.mjs +136 -4
  28. package/dist/global-insight-worker.mjs.map +1 -1
  29. package/dist/{http-3K4YMWDE.mjs → http-5RVY5J5U.mjs} +13 -13
  30. package/dist/{import-D4LV565A.mjs → import-ILTWVHKU.mjs} +8 -8
  31. package/dist/index.mjs +13 -13
  32. package/dist/{mcp-KL22FKQ2.mjs → mcp-Y2YXOFB4.mjs} +9 -9
  33. package/dist/people-relationships-worker.mjs +2 -2
  34. package/dist/semantic-index-worker.mjs +1 -1
  35. package/dist/{service-KZTHBDQ5.mjs → service-ZAHXRSFD.mjs} +6 -6
  36. package/dist/service-ZAHXRSFD.mjs.map +1 -0
  37. package/dist/{src-COIB6Z4P.mjs → src-OV5ZNE3Z.mjs} +124 -98
  38. package/dist/{stream-import-FSXCFG4M.mjs → stream-import-XOUM3Z5W.mjs} +8 -8
  39. package/dist/{undici-MU5I3L6Q.mjs → undici-UGXDRJLV.mjs} +193 -193
  40. package/dist/undici-UGXDRJLV.mjs.map +1 -0
  41. package/dist/{update-checker-3N7HQEP2.mjs → update-checker-UL2FBLXH.mjs} +3 -5
  42. package/dist/{update-checker-3N7HQEP2.mjs.map → update-checker-UL2FBLXH.mjs.map} +1 -1
  43. package/dist/{worker-runtime-DPS2LURI.mjs → worker-runtime-JNGURHDM.mjs} +6 -6
  44. package/dist-cli-web/assets/AISettingsTab-vvjijrc5.js +1 -0
  45. package/dist-cli-web/assets/{AboutTab-DMPziKjj.js → AboutTab-CxI8zJNz.js} +1 -1
  46. package/dist-cli-web/assets/ActionToolsPanel.vue_vue_type_script_setup_true_lang-w0hHEodr.js +110 -0
  47. package/dist-cli-web/assets/Alert-_MYcI_E2.js +1 -0
  48. package/dist-cli-web/assets/ApiSettingsTab-CK7U6dVA.js +2 -0
  49. package/dist-cli-web/assets/BatchManageTab-1WnEqqpB.js +1 -0
  50. package/dist-cli-web/assets/{BufferResource-BXSJADxx.js → BufferResource-i64DlwQT.js} +1 -1
  51. package/dist-cli-web/assets/{CanvasRenderer-Cq--8UQ_.js → CanvasRenderer-B76mEt9A.js} +1 -1
  52. package/dist-cli-web/assets/ChatRecordDrawer-Bp6OSCrz.js +1 -0
  53. package/dist-cli-web/assets/ChatRecordWorkspace-CyfPIlIy.js +11 -0
  54. package/dist-cli-web/assets/ChatRecordWorkspace-D_oJMtqh.css +1 -0
  55. package/dist-cli-web/assets/Checkbox-Ci7IeRw1.js +1 -0
  56. package/dist-cli-web/assets/DataDirCleanupNotice-Dh63pOLt.js +1 -0
  57. package/dist-cli-web/assets/DatePicker.vue_vue_type_script_setup_true_lang-DqNBNa1D.js +1 -0
  58. package/dist-cli-web/assets/DebugToolsPanel-CbNsD9co.js +1 -0
  59. package/dist-cli-web/assets/EChart.vue_vue_type_script_setup_true_lang-YeqmodwE.js +1 -0
  60. package/dist-cli-web/assets/EChartBar.vue_vue_type_script_setup_true_lang-C3pZmq0v.js +1 -0
  61. package/dist-cli-web/assets/EChartLine.vue_vue_type_script_setup_true_lang-Co6olfwv.js +1 -0
  62. package/dist-cli-web/assets/{EChartWordcloud-KV0MdsDE.js → EChartWordcloud-rDusZwSq.js} +1 -1
  63. package/dist-cli-web/assets/{Filter-DVaqcFmI.js → Filter-yxkeHO78.js} +1 -1
  64. package/dist-cli-web/assets/GlobalTaskBar-BlZ-fFiq.js +1 -0
  65. package/dist-cli-web/assets/GroupRelationshipGalaxyView-BXQBX0zJ.js +1 -0
  66. package/dist-cli-web/assets/Label-CFAZFBQX.js +1 -0
  67. package/dist-cli-web/assets/LoadingState.vue_vue_type_script_setup_true_lang-CwgpqtMZ.js +1 -0
  68. package/dist-cli-web/assets/MessageExportModal-DU71grc7.js +1 -0
  69. package/dist-cli-web/assets/PageHeader-BDPf4NuI.js +1 -0
  70. package/dist-cli-web/assets/PageTabs.vue_vue_type_script_setup_true_lang-_j82asQU.js +1 -0
  71. package/dist-cli-web/assets/{RelationshipGalaxyCanvas-6EamagxG.js → RelationshipGalaxyCanvas-BODk18aA.js} +14 -14
  72. package/dist-cli-web/assets/RelationshipGalaxyThreeCanvas-BJyuRiC-.js +4168 -0
  73. package/dist-cli-web/assets/RelationshipGalaxyThreeCanvas-CCasBcBQ.css +1 -0
  74. package/dist-cli-web/assets/{RenderTargetSystem-mYuj4uBS.js → RenderTargetSystem-CVMvAUSv.js} +1 -1
  75. package/dist-cli-web/assets/RovingFocusItem-DC_06OmN.js +1 -0
  76. package/dist-cli-web/assets/ScreenCaptureModal-DrBFDOtC.js +1 -0
  77. package/dist-cli-web/assets/SectionTabs.vue_vue_type_script_setup_true_lang-C-Zj2biH.js +1 -0
  78. package/dist-cli-web/assets/Select-DLK2LYhO.js +1 -0
  79. package/dist-cli-web/assets/SettingsModal-BFkxzo0Y.css +1 -0
  80. package/dist-cli-web/assets/SettingsModal-DqaR4Dx5.js +2 -0
  81. package/dist-cli-web/assets/StorageTab-B0ebN0f8.js +1 -0
  82. package/dist-cli-web/assets/Switch-CokhQWxm.js +1 -0
  83. package/dist-cli-web/assets/Tabs-D1UiZNaZ.js +1 -0
  84. package/dist-cli-web/assets/Tabs-N3Q-Mpqi.js +1 -0
  85. package/dist-cli-web/assets/{ThemeCard.vue_vue_type_script_setup_true_lang-DPIvbq75.js → ThemeCard.vue_vue_type_script_setup_true_lang-OT-I0mbU.js} +1 -1
  86. package/dist-cli-web/assets/TimeSelect.vue_vue_type_script_setup_true_lang-Ccunouyf.js +1 -0
  87. package/dist-cli-web/assets/{VisuallyHiddenInput-BOdkR_GC.js → VisuallyHiddenInput-OAJEt_Y5.js} +1 -1
  88. package/dist-cli-web/assets/{WebGLRenderer-BB8ukBI_.js → WebGLRenderer-DuUeftYD.js} +1 -1
  89. package/dist-cli-web/assets/{WebGPURenderer-DDOzF1Kc.js → WebGPURenderer-DoWQxiWZ.js} +1 -1
  90. package/dist-cli-web/assets/aiChat-CdADfRnU.js +8 -0
  91. package/dist-cli-web/assets/{browserAll-BRqlnNxq.js → browserAll-Cb-mtR2y.js} +1 -1
  92. package/dist-cli-web/assets/{cli-web-ClAJ6Tao.js → cli-web-BHQCZLLg.js} +1 -1
  93. package/dist-cli-web/assets/{fetch-LY-yerw1.js → fetch-AvsnJLWJ.js} +1 -1
  94. package/dist-cli-web/assets/{fetch-Dy38lkAa.js → fetch-B-6tyYWu.js} +1 -1
  95. package/dist-cli-web/assets/{fetch-Bcy2T8Fe.js → fetch-B4PYy5JS.js} +1 -1
  96. package/dist-cli-web/assets/{fetch-DWAIk_6_.js → fetch-BbcFaCRB.js} +1 -1
  97. package/dist-cli-web/assets/fetch-BkA_so1e.js +1 -0
  98. package/dist-cli-web/assets/{fetch-q480XYZQ.js → fetch-BzXuAaT3.js} +8 -5
  99. package/dist-cli-web/assets/fetch-CW2fKvGp.js +1 -0
  100. package/dist-cli-web/assets/{fetch-DijSOvop.js → fetch-DEub4tOo.js} +1 -1
  101. package/dist-cli-web/assets/{fetch-CGu53cxT.js → fetch-DLTlYnDB.js} +1 -1
  102. package/dist-cli-web/assets/fetch-Qs38Hx1V.js +1 -0
  103. package/dist-cli-web/assets/{fetch-CP1afnT0.js → fetch-sYDJ-Zs8.js} +1 -1
  104. package/dist-cli-web/assets/{fetch-DzKlTaLz.js → fetch-ul8-uQIb.js} +1 -1
  105. package/dist-cli-web/assets/host-B6SQ6OGo.js +1 -0
  106. package/dist-cli-web/assets/host-DYIkQqvY.js +1 -0
  107. package/dist-cli-web/assets/{index-Di6FmCdk.js → index--IEkRjKe.js} +10 -10
  108. package/dist-cli-web/assets/index-9iaY_EWG.js +1 -0
  109. package/dist-cli-web/assets/index-B4J99zv3.css +1 -0
  110. package/dist-cli-web/assets/index-BBeqtL8d.css +1 -0
  111. package/dist-cli-web/assets/index-BnaLj2dx.css +1 -0
  112. package/dist-cli-web/assets/index-C7omDgiJ.js +2 -0
  113. package/dist-cli-web/assets/index-CHsM84U1.js +2 -0
  114. package/dist-cli-web/assets/index-CL8u01Pf.js +137 -0
  115. package/dist-cli-web/assets/{index-CNzv7aBW.js → index-CShh95fU.js} +1 -1
  116. package/dist-cli-web/assets/index-C_OS8Y8W.js +1 -0
  117. package/dist-cli-web/assets/{index-BRV_D8dv.js → index-D64XYYts.js} +1 -1
  118. package/dist-cli-web/assets/index-DrCc8p_I.css +1 -0
  119. package/dist-cli-web/assets/index-Dz_ddyZS.css +1 -0
  120. package/dist-cli-web/assets/index-UpTe1KzQ.js +1 -0
  121. package/dist-cli-web/assets/index-a8Hw6eD8.js +1 -0
  122. package/dist-cli-web/assets/index-jwjzZNKm.js +1 -0
  123. package/dist-cli-web/assets/index-pkxlF8Ee.js +1 -0
  124. package/dist-cli-web/assets/index-sWxuTsa7.js +36 -0
  125. package/dist-cli-web/assets/{people-page-header-Bh3KXD4g.js → people-page-header-0jvXFFnh.js} +1 -1
  126. package/dist-cli-web/assets/{prompt-DcAcgQiB.js → prompt-BPYj29Vq.js} +1 -1
  127. package/dist-cli-web/assets/{semantic-index-config-builder-CK6v64Y1.js → semantic-index-config-builder-vO37z355.js} +1 -1
  128. package/dist-cli-web/assets/service-CVoA9yNf.js +1 -0
  129. package/dist-cli-web/assets/{service-YZnJyEMq.js → service-D29Vftq9.js} +1 -1
  130. package/dist-cli-web/assets/service-DMysyLCa.js +1 -0
  131. package/dist-cli-web/assets/{useFormControl-B-aXrJZN.js → useFormControl-DVawP2DO.js} +1 -1
  132. package/dist-cli-web/assets/useTable-Bv3R_Hux.js +1 -0
  133. package/dist-cli-web/assets/useToast-BA0EwImD.js +1 -0
  134. package/dist-cli-web/assets/{vendor-echarts-DfAMQxdr.js → vendor-echarts-hTLhTs52.js} +5 -5
  135. package/dist-cli-web/assets/{vendor-echarts-wordcloud-BsaEJTPY.js → vendor-echarts-wordcloud-B8CF_NgP.js} +1 -1
  136. package/dist-cli-web/assets/{vendor-zrender-PFmZe1EY.js → vendor-zrender-D8psf1AA.js} +2 -2
  137. package/dist-cli-web/assets/{webworkerAll-Dwqmy_YO.js → webworkerAll-ZPE_yGnC.js} +1 -1
  138. package/dist-cli-web/index.html +2 -2
  139. package/package.json +4 -4
  140. package/dist/chat-command-24RYGJAS.mjs.map +0 -1
  141. package/dist/chunk-22YJOBA3.mjs +0 -9826
  142. package/dist/chunk-22YJOBA3.mjs.map +0 -1
  143. package/dist/chunk-4GWWKHWA.mjs.map +0 -1
  144. package/dist/chunk-7IGBPZMI.mjs.map +0 -1
  145. package/dist/chunk-BRZ6YIBR.mjs.map +0 -1
  146. package/dist/chunk-DC7IUDNV.mjs.map +0 -1
  147. package/dist/chunk-DEFEU567.mjs.map +0 -1
  148. package/dist/chunk-QZCNVAH6.mjs +0 -14
  149. package/dist/chunk-QZCNVAH6.mjs.map +0 -1
  150. package/dist/chunk-ZBPPLXM4.mjs.map +0 -1
  151. package/dist/service-KZTHBDQ5.mjs.map +0 -1
  152. package/dist/undici-MU5I3L6Q.mjs.map +0 -1
  153. package/dist-cli-web/assets/AISettingsTab-rQC2ocFH.js +0 -1
  154. package/dist-cli-web/assets/ActionToolsPanel.vue_vue_type_script_setup_true_lang-CnRLt_1j.js +0 -110
  155. package/dist-cli-web/assets/Alert--bTQXRcZ.js +0 -1
  156. package/dist-cli-web/assets/ApiSettingsTab-CtXl4I28.js +0 -2
  157. package/dist-cli-web/assets/BatchManageTab-1KaCPweN.js +0 -1
  158. package/dist-cli-web/assets/ChatRecordDrawer-BC0F7ok1.js +0 -11
  159. package/dist-cli-web/assets/ChatRecordDrawer-Tt6UduRC.css +0 -1
  160. package/dist-cli-web/assets/Checkbox-CwajNPGF.js +0 -1
  161. package/dist-cli-web/assets/DataDirCleanupNotice-D0Oruka2.js +0 -1
  162. package/dist-cli-web/assets/DatePicker.vue_vue_type_script_setup_true_lang-C4CsoIlq.js +0 -1
  163. package/dist-cli-web/assets/DebugToolsPanel-DVDwS-wz.js +0 -1
  164. package/dist-cli-web/assets/GlobalTaskBar-DpPMX0jx.js +0 -1
  165. package/dist-cli-web/assets/GroupRelationshipGalaxyView-CLnO3phW.js +0 -1
  166. package/dist-cli-web/assets/Label-Bt2U4lGy.js +0 -1
  167. package/dist-cli-web/assets/LoadingState.vue_vue_type_script_setup_true_lang-Cnshyn0f.js +0 -1
  168. package/dist-cli-web/assets/MessageExportModal-BozaR9UZ.js +0 -1
  169. package/dist-cli-web/assets/PageHeader-CEe0xTl3.js +0 -1
  170. package/dist-cli-web/assets/PageTabs.vue_vue_type_script_setup_true_lang-D2DZrrnv.js +0 -1
  171. package/dist-cli-web/assets/RelationshipGalaxyThreeCanvas-B6GB4PWS.js +0 -4108
  172. package/dist-cli-web/assets/RelationshipGalaxyThreeCanvas-TYGOUDiv.css +0 -1
  173. package/dist-cli-web/assets/RovingFocusItem-B2y6BG1a.js +0 -1
  174. package/dist-cli-web/assets/ScreenCaptureModal-BvAtSNNR.js +0 -1
  175. package/dist-cli-web/assets/SectionTabs.vue_vue_type_script_setup_true_lang-ueEF4zHE.js +0 -1
  176. package/dist-cli-web/assets/Select-Cm4I8u9n.js +0 -1
  177. package/dist-cli-web/assets/SettingsModal-CjVax3I6.css +0 -1
  178. package/dist-cli-web/assets/SettingsModal-Cwshzj7i.js +0 -2
  179. package/dist-cli-web/assets/StorageTab-D7HzH16Y.js +0 -1
  180. package/dist-cli-web/assets/Switch-BVw4e_19.js +0 -1
  181. package/dist-cli-web/assets/Tabs-Dqwkh3Ea.js +0 -1
  182. package/dist-cli-web/assets/Tabs-OrJkANIA.js +0 -1
  183. package/dist-cli-web/assets/TimeSelect.vue_vue_type_script_setup_true_lang-dEdo6CqM.js +0 -1
  184. package/dist-cli-web/assets/aiChat-CzFSFuOJ.js +0 -8
  185. package/dist-cli-web/assets/annual-summary-time-range-CmrAqcuj.js +0 -1
  186. package/dist-cli-web/assets/base-CawUl6ET.js +0 -1
  187. package/dist-cli-web/assets/dateFormat-DXuDxIye.js +0 -1
  188. package/dist-cli-web/assets/fetch-3_xX8Yi8.js +0 -1
  189. package/dist-cli-web/assets/index-0dp58uL4.css +0 -1
  190. package/dist-cli-web/assets/index-1X7zdLgJ.css +0 -1
  191. package/dist-cli-web/assets/index-4enwdBcq.css +0 -1
  192. package/dist-cli-web/assets/index-AudHHbMs.js +0 -1
  193. package/dist-cli-web/assets/index-CF4DTbvD.js +0 -1
  194. package/dist-cli-web/assets/index-CMLoht5R.js +0 -1
  195. package/dist-cli-web/assets/index-CMPHZH6B.css +0 -1
  196. package/dist-cli-web/assets/index-CXUTiy-V.js +0 -1
  197. package/dist-cli-web/assets/index-D5m0P4ss.js +0 -36
  198. package/dist-cli-web/assets/index-DkOrt7_X.js +0 -2
  199. package/dist-cli-web/assets/index-Dlb6fC68.js +0 -1
  200. package/dist-cli-web/assets/index-IA7YUjQX.js +0 -2
  201. package/dist-cli-web/assets/index-ZsZwPLWy.css +0 -1
  202. package/dist-cli-web/assets/index-kzU381y1.js +0 -1
  203. package/dist-cli-web/assets/index-z8Vogc-b.js +0 -137
  204. package/dist-cli-web/assets/lazy-overlay-visibility-Bd9ZFOgR.js +0 -1
  205. package/dist-cli-web/assets/member-select-utils-BXZ3oHct.js +0 -1
  206. package/dist-cli-web/assets/useTable-DPEMaGby.js +0 -1
  207. package/dist-cli-web/assets/useToast-B36MzFFy.js +0 -1
  208. /package/dist/{chunk-GQMCDWZQ.mjs.map → chunk-5MJO4AJB.mjs.map} +0 -0
  209. /package/dist/{chunk-QKEARRFH.mjs.map → chunk-67HNPYZJ.mjs.map} +0 -0
  210. /package/dist/{chunk-U36TQMAF.mjs.map → chunk-6QP47LID.mjs.map} +0 -0
  211. /package/dist/{chunk-KIMJXKZO.mjs.map → chunk-JOVL7OTW.mjs.map} +0 -0
  212. /package/dist/{chunk-KXDJ7N6N.mjs.map → chunk-NQHZPSW2.mjs.map} +0 -0
  213. /package/dist/{http-3K4YMWDE.mjs.map → http-5RVY5J5U.mjs.map} +0 -0
  214. /package/dist/{import-D4LV565A.mjs.map → import-ILTWVHKU.mjs.map} +0 -0
  215. /package/dist/{mcp-KL22FKQ2.mjs.map → mcp-Y2YXOFB4.mjs.map} +0 -0
  216. /package/dist/{src-COIB6Z4P.mjs.map → src-OV5ZNE3Z.mjs.map} +0 -0
  217. /package/dist/{stream-import-FSXCFG4M.mjs.map → stream-import-XOUM3Z5W.mjs.map} +0 -0
  218. /package/dist/{worker-runtime-DPS2LURI.mjs.map → worker-runtime-JNGURHDM.mjs.map} +0 -0
@@ -11,14 +11,14 @@ import {
11
11
  getServerAiLogger,
12
12
  getSkillManagerCore,
13
13
  initServerAiLogger
14
- } from "./chunk-DEFEU567.mjs";
14
+ } from "./chunk-R73XMAB2.mjs";
15
15
  import {
16
16
  AGENT_TOOL_REGISTRY,
17
17
  CoreDataProvider
18
- } from "./chunk-BRZ6YIBR.mjs";
18
+ } from "./chunk-X2QBH24F.mjs";
19
19
  import {
20
20
  resolveCliLocalEmbeddingRuntimeConfig
21
- } from "./chunk-U36TQMAF.mjs";
21
+ } from "./chunk-6QP47LID.mjs";
22
22
  import {
23
23
  analyzeIncrementalImport,
24
24
  analyzeNewImport,
@@ -26,10 +26,10 @@ import {
26
26
  autoImportBatch,
27
27
  incrementalImport,
28
28
  streamImport
29
- } from "./chunk-QKEARRFH.mjs";
29
+ } from "./chunk-67HNPYZJ.mjs";
30
30
  import {
31
31
  assertCliDataDirCompatible
32
- } from "./chunk-GQMCDWZQ.mjs";
32
+ } from "./chunk-5MJO4AJB.mjs";
33
33
  import {
34
34
  getVersion
35
35
  } from "./chunk-5ADKYYNA.mjs";
@@ -62,55 +62,51 @@ import {
62
62
  isDictDownloaded,
63
63
  segmentText,
64
64
  serializeChatLabToJsonl
65
- } from "./chunk-DC7IUDNV.mjs";
65
+ } from "./chunk-NFTCEJBJ.mjs";
66
66
  import {
67
- AIChatManager,
68
67
  ArchiveImportError,
69
68
  ArchiveImportSourceManager,
70
69
  IMPORT_IN_PROGRESS_ERROR_KEY,
71
70
  ImportIdempotencyCache,
72
71
  ImportInProgressError,
73
72
  MergeSessionCache,
73
+ NavigationLayoutValidationError,
74
74
  PARSER_FORMAT_IDS,
75
75
  SEMANTIC_INDEX_CONFIG_FILE,
76
76
  SemanticIndexConfigStore,
77
77
  TempDbWriter,
78
- buildPiModel,
79
- countMessagesTokens,
80
78
  createChatLabTempDir,
81
79
  createContactsService,
82
80
  createGlobalInsightService,
83
- createLlmRuntimeStores,
81
+ createNavigationLayoutService,
84
82
  createPeopleRelationshipsService,
83
+ createTimeInvestmentService,
85
84
  detectAllFormats,
86
85
  detectFormat,
87
86
  exportSessionToJson,
88
87
  export_service_exports,
89
- fetchRemoteModels,
90
88
  findEntryFileInDirectory,
91
89
  getChatLabTempScopeDir,
92
- getDefaultRulesForLocale,
93
90
  getSupportedFormats,
94
91
  hashImportBody,
95
92
  isSemanticIndexConfigured,
96
93
  isValidImportSessionId,
97
94
  logNativeParserStatus,
98
95
  member_service_exports,
99
- mergeRulesForLocale,
100
96
  owner_profile_service_exports,
101
97
  persistSemanticIndexConfig,
102
98
  pushImport,
103
99
  resolveSemanticIndexApiKeySet,
104
- runSimpleLlmStream,
105
100
  scanMultiChatFile,
106
101
  session_index_service_exports,
107
102
  session_service_exports,
108
103
  streamParseFileInfo,
109
- summary_service_exports,
110
- validateApiKey
111
- } from "./chunk-4GWWKHWA.mjs";
104
+ summary_service_exports
105
+ } from "./chunk-FJOGBUXU.mjs";
112
106
  import {
107
+ AIChatManager,
113
108
  ALL_MIGRATIONS,
109
+ ANNUAL_SUMMARY_PLUGIN_ID,
114
110
  BUILTIN_MODELS,
115
111
  BUILTIN_PROVIDERS,
116
112
  BUILTIN_TOOL_CATALOG,
@@ -121,10 +117,19 @@ import {
121
117
  GROUP_RELATIONSHIP_GALAXY_ALGORITHM_VERSION,
122
118
  MigrationRunner,
123
119
  POS_TAG_DEFINITIONS,
120
+ TIME_INVESTMENT_PLUGIN_ID,
124
121
  appLogger,
122
+ assertValidTopicDayKey,
123
+ buildPiModel,
124
+ chatTopicWorkCoordinator,
125
+ countMessagesTokens,
126
+ createChatTopicModelClient,
127
+ createChatTopicService,
125
128
  createDatabaseManagerAdapter,
129
+ createLlmRuntimeStores,
126
130
  executeReadonlySql,
127
131
  executeSql,
132
+ fetchRemoteModels,
128
133
  getAvailableYears,
129
134
  getBuiltinModelsByProvider,
130
135
  getCatchphraseAnalysis,
@@ -132,6 +137,7 @@ import {
132
137
  getClusterGraph,
133
138
  getDailyActivity,
134
139
  getDbFileVersion,
140
+ getDefaultRulesForLocale,
135
141
  getDivingAnalysis,
136
142
  getDragonKingAnalysis,
137
143
  getGroupRelationshipGalaxy,
@@ -165,11 +171,14 @@ import {
165
171
  initAppLogger,
166
172
  isNewerStableVersion,
167
173
  loadConfig,
174
+ mergeRulesForLocale,
168
175
  queryMessages,
176
+ runSimpleLlmStream,
169
177
  stripAvatarFields,
178
+ validateApiKey,
170
179
  verifyCliDataPath,
171
180
  writeConfigField
172
- } from "./chunk-22YJOBA3.mjs";
181
+ } from "./chunk-Q3NEL2KK.mjs";
173
182
 
174
183
  // src/http/index.ts
175
184
  import * as fs11 from "fs";
@@ -795,6 +804,11 @@ function registerRestRoutes(server2, ctx) {
795
804
  registerImportRoutes(server2, ctx);
796
805
  }
797
806
 
807
+ // ../../packages/http-routes/src/plugins/node.ts
808
+ function registerNodePlugins(server2, context, plugins) {
809
+ for (const plugin of plugins) plugin.registerHttpRoutes(server2, context);
810
+ }
811
+
798
812
  // ../../packages/http-routes/src/routes/web/ai-agent-stream.ts
799
813
  var activeAgentAborts = /* @__PURE__ */ new Map();
800
814
  function registerAiAgentStreamRoutes(server2, ctx) {
@@ -823,6 +837,7 @@ data: ${JSON.stringify(data)}
823
837
  reply.raw.end();
824
838
  };
825
839
  safeSendSSE("meta", { requestId });
840
+ const releaseInteractiveWork = chatTopicWorkCoordinator.beginInteractiveWork();
826
841
  reply.raw.on("close", () => {
827
842
  if (!abortController.signal.aborted) {
828
843
  abortController.abort();
@@ -842,6 +857,7 @@ data: ${JSON.stringify(data)}
842
857
  const msg = error instanceof Error ? error.message : String(error);
843
858
  safeSendSSE("error", { type: "error", error: { name: "ServerError", message: msg } });
844
859
  } finally {
860
+ releaseInteractiveWork();
845
861
  if (!emittedDone) safeSendSSE("done", { type: "done", isFinished: true });
846
862
  activeAgentAborts.delete(requestId);
847
863
  safeEnd();
@@ -1024,6 +1040,93 @@ function registerAiChatRoutes(server2, ctx) {
1024
1040
  });
1025
1041
  }
1026
1042
 
1043
+ // ../../packages/http-routes/src/routes/web/ai-chat-topics.ts
1044
+ function registerAiChatTopicRoutes(server2, ctx) {
1045
+ let service = null;
1046
+ const getService = () => {
1047
+ if (!ctx.runtimeIdentity) throw new Error("Chat topic routes require a runtime identity");
1048
+ service ??= createChatTopicService({
1049
+ runtime: ctx.sessionAdapter,
1050
+ pathProvider: ctx.pathProvider,
1051
+ runtimeIdentity: ctx.runtimeIdentity,
1052
+ nativeBinding: ctx.nativeBinding,
1053
+ getModelClient() {
1054
+ const config = ctx.llmConfigStore?.getFastModelConfig();
1055
+ return config ? createChatTopicModelClient(config) : null;
1056
+ }
1057
+ });
1058
+ return service;
1059
+ };
1060
+ server2.addHook("onClose", async () => {
1061
+ service?.close();
1062
+ });
1063
+ server2.post(
1064
+ "/_web/sessions/:id/topics/preflight",
1065
+ async (request) => getService().preflight(request.params.id, requireCreateRequest(request.body))
1066
+ );
1067
+ server2.post(
1068
+ "/_web/sessions/:id/topics/runs",
1069
+ async (request, reply) => {
1070
+ const run = getService().start(request.params.id, requireCreateRequest(request.body));
1071
+ return reply.code(run.status === "completed" ? 200 : 202).send(run);
1072
+ }
1073
+ );
1074
+ server2.post("/_web/sessions/:id/topics/days/:dayKey/generate", async (request, reply) => {
1075
+ const run = getService().generateDay(
1076
+ request.params.id,
1077
+ request.params.dayKey,
1078
+ requireTimezone(request.body?.timezone),
1079
+ request.body?.locale
1080
+ );
1081
+ return reply.code(run.status === "completed" ? 200 : 202).send(run);
1082
+ });
1083
+ server2.get(
1084
+ "/_web/sessions/:id/topics/runs/latest",
1085
+ async (request) => getService().getLatestRun(request.params.id)
1086
+ );
1087
+ server2.get(
1088
+ "/_web/sessions/:id/topics/runs/:runId",
1089
+ async (request, reply) => {
1090
+ const run = getService().getRun(request.params.id, request.params.runId);
1091
+ return run ?? reply.code(404).send({ error: "Chat topic run not found" });
1092
+ }
1093
+ );
1094
+ for (const action of ["pause", "resume", "cancel"]) {
1095
+ server2.post(
1096
+ `/_web/sessions/:id/topics/runs/:runId/${action}`,
1097
+ async (request) => getService()[action](request.params.id, request.params.runId)
1098
+ );
1099
+ }
1100
+ server2.get(
1101
+ "/_web/sessions/:id/topics/days/:dayKey",
1102
+ async (request) => getService().getDay(request.params.id, request.params.dayKey, requireTimezone(request.query.timezone))
1103
+ );
1104
+ server2.delete(
1105
+ "/_web/sessions/:id/topics/days/:dayKey",
1106
+ async (request) => ({ success: getService().deleteDay(request.params.id, request.params.dayKey) })
1107
+ );
1108
+ }
1109
+ function requireCreateRequest(value) {
1110
+ if (!value || !["today", "year", "custom", "all"].includes(value.rangeKind)) {
1111
+ throw Object.assign(new Error("Invalid chat topic range"), { statusCode: 400 });
1112
+ }
1113
+ const timezone = requireTimezone(value.timezone);
1114
+ if (value.rangeKind === "custom") {
1115
+ if (typeof value.startDay !== "string" || value.startDay.trim() === "") {
1116
+ throw Object.assign(new Error("A start day is required for a custom topic range"), { statusCode: 400 });
1117
+ }
1118
+ assertValidTopicDayKey(value.startDay);
1119
+ return { ...value, timezone, startDay: value.startDay };
1120
+ }
1121
+ return { rangeKind: value.rangeKind, timezone, locale: value.locale };
1122
+ }
1123
+ function requireTimezone(value) {
1124
+ if (typeof value !== "string" || value.trim() === "") {
1125
+ throw Object.assign(new Error("Timezone is required"), { statusCode: 400 });
1126
+ }
1127
+ return value;
1128
+ }
1129
+
1027
1130
  // ../../packages/http-routes/src/routes/web/ai-llm-stream.ts
1028
1131
  function registerAiLlmStreamRoutes(server2, ctx) {
1029
1132
  const store = ctx.llmConfigStore;
@@ -1550,6 +1653,7 @@ function registerAiRoutes(server2, ctx, options) {
1550
1653
  registerAiAgentStreamRoutes(server2, ctx);
1551
1654
  registerAiToolRoutes(server2, ctx);
1552
1655
  registerAiChatRoutes(server2, ctx);
1656
+ registerAiChatTopicRoutes(server2, ctx);
1553
1657
  registerAiSummaryRoutes(server2, ctx);
1554
1658
  registerAiLogRoutes(server2, ctx);
1555
1659
  registerSemanticIndexRoutes(server2, ctx);
@@ -2234,43 +2338,6 @@ function registerExportRoutes(server2, ctx) {
2234
2338
  });
2235
2339
  }
2236
2340
 
2237
- // ../../packages/http-routes/src/routes/web/global-insight.ts
2238
- function registerGlobalInsightRoutes(server2, ctx) {
2239
- const service = ctx.globalInsightService ?? createGlobalInsightService({
2240
- adapter: ctx.sessionAdapter,
2241
- pathProvider: ctx.pathProvider,
2242
- runtimeIdentity: ctx.runtimeIdentity,
2243
- nativeBinding: ctx.nativeBinding
2244
- });
2245
- server2.addHook("onClose", async () => service.close());
2246
- server2.get("/_web/global-insight/annual-summary", async (request) => {
2247
- return service.getAnnualSummary({
2248
- ...parseRange(request.query),
2249
- acceptStale: isTruthy2(request.query.acceptStale)
2250
- });
2251
- });
2252
- server2.post(
2253
- "/_web/global-insight/annual-summary/recompute",
2254
- async (request) => service.startRecompute(parseRange(request.query))
2255
- );
2256
- }
2257
- function parseRange(query) {
2258
- const mode = query.mode === "recent" ? "recent" : "year";
2259
- return {
2260
- mode,
2261
- year: parseInteger(query.year),
2262
- days: query.days === "365" ? 365 : void 0
2263
- };
2264
- }
2265
- function parseInteger(value) {
2266
- if (!value) return void 0;
2267
- const parsed = Number(value);
2268
- return Number.isInteger(parsed) ? parsed : void 0;
2269
- }
2270
- function isTruthy2(value) {
2271
- return value === "1" || value === "true" || value === "yes";
2272
- }
2273
-
2274
2341
  // ../../packages/http-routes/src/routes/web/logs.ts
2275
2342
  function registerLogRoutes(server2) {
2276
2343
  server2.post("/_web/logs/report", async (req, reply) => {
@@ -2363,6 +2430,27 @@ function isHttpClientError(error) {
2363
2430
  return error instanceof Error && "statusCode" in error && typeof error.statusCode === "number" && error.statusCode >= 400 && error.statusCode < 500;
2364
2431
  }
2365
2432
 
2433
+ // ../../packages/http-routes/src/routes/web/navigation-layout.ts
2434
+ function registerNavigationLayoutRoutes(server2, context) {
2435
+ const service = context.navigationLayoutService ?? createNavigationLayoutService(context.pathProvider.getSystemDir());
2436
+ server2.get("/_web/navigation-layout", async () => service.load());
2437
+ server2.put("/_web/navigation-layout", async (request, reply) => {
2438
+ try {
2439
+ const layout = service.save(request.body);
2440
+ return { status: "saved", layout };
2441
+ } catch (error) {
2442
+ if (error instanceof NavigationLayoutValidationError) {
2443
+ return reply.code(400).send({ error: "INVALID_NAVIGATION_LAYOUT" });
2444
+ }
2445
+ throw error;
2446
+ }
2447
+ });
2448
+ server2.delete("/_web/navigation-layout", async () => {
2449
+ service.reset();
2450
+ return { status: "missing", layout: null };
2451
+ });
2452
+ }
2453
+
2366
2454
  // ../../packages/http-routes/src/routes/web/merge.ts
2367
2455
  import * as fs4 from "fs";
2368
2456
  import * as path6 from "path";
@@ -2628,7 +2716,7 @@ function registerPeopleRelationshipsRoutes(server2, ctx) {
2628
2716
  });
2629
2717
  server2.get("/_web/people/relationships", async (request) => {
2630
2718
  return service.getGraph({
2631
- acceptStale: isTruthy3(request.query.acceptStale),
2719
+ acceptStale: isTruthy2(request.query.acceptStale),
2632
2720
  timeRangePreset: parseContactsTimeRangePreset2(request.query.timeRange),
2633
2721
  graphScope: parsePeopleRelationshipsGraphScope(request.query.scope),
2634
2722
  query: request.query.q
@@ -2645,14 +2733,14 @@ function registerPeopleRelationshipsRoutes(server2, ctx) {
2645
2733
  "/_web/people/relationships/:key/neighborhood",
2646
2734
  async (request) => {
2647
2735
  return service.getNeighborhood(request.params.key, {
2648
- acceptStale: isTruthy3(request.query.acceptStale),
2736
+ acceptStale: isTruthy2(request.query.acceptStale),
2649
2737
  timeRangePreset: parseContactsTimeRangePreset2(request.query.timeRange),
2650
2738
  graphScope: parsePeopleRelationshipsGraphScope(request.query.scope)
2651
2739
  });
2652
2740
  }
2653
2741
  );
2654
2742
  }
2655
- function isTruthy3(value) {
2743
+ function isTruthy2(value) {
2656
2744
  return value === "1" || value === "true" || value === "yes";
2657
2745
  }
2658
2746
  function parseContactsTimeRangePreset2(value) {
@@ -2741,14 +2829,21 @@ function registerSessionRoutes(server2, ctx) {
2741
2829
  };
2742
2830
  server2.get("/_web/sessions", async () => {
2743
2831
  const aiChatCounts = ctx.aiChatManager?.getAIChatCountsBySession();
2832
+ const excludedSessionIds = new Set(preferences().load().ownerExcludedSessionIds);
2744
2833
  return session_service_exports.listAnalysisSessions(adapter, {
2745
2834
  resolveOverview: (db, sessionId) => session_service_exports.resolveValidatedSessionOverview(db, sessionId, cacheDir),
2746
- enrichSession: aiChatCounts?.size ? (dto) => ({ ...dto, aiConversationCount: aiChatCounts.get(dto.id) ?? 0 }) : void 0
2835
+ enrichSession: (dto) => ({
2836
+ ...dto,
2837
+ aiConversationCount: aiChatCounts?.get(dto.id) ?? 0,
2838
+ ownerExcluded: excludedSessionIds.has(dto.id)
2839
+ })
2747
2840
  });
2748
2841
  });
2749
2842
  server2.get("/_web/sessions/:id", async (request) => {
2843
+ const excludedSessionIds = new Set(preferences().load().ownerExcludedSessionIds);
2750
2844
  const session = session_service_exports.getAnalysisSession(adapter, request.params.id, {
2751
- resolveOverview: (db, sessionId) => session_service_exports.resolveValidatedSessionOverview(db, sessionId, cacheDir)
2845
+ resolveOverview: (db, sessionId) => session_service_exports.resolveValidatedSessionOverview(db, sessionId, cacheDir),
2846
+ enrichSession: (dto) => ({ ...dto, ownerExcluded: excludedSessionIds.has(dto.id) })
2752
2847
  });
2753
2848
  if (!session) {
2754
2849
  throw Object.assign(new Error(`Session not found: ${request.params.id}`), { statusCode: 404 });
@@ -2760,16 +2855,14 @@ function registerSessionRoutes(server2, ctx) {
2760
2855
  });
2761
2856
  server2.delete("/_web/sessions/:id", async (request, reply) => {
2762
2857
  const { id } = request.params;
2763
- try {
2764
- await ctx.beforeDeleteSession?.(id);
2765
- const deleted = session_service_exports.deleteSession(adapter, id);
2766
- if (!deleted) {
2767
- return reply.code(404).send({ success: false, error: "File not found" });
2768
- }
2769
- return { success: true };
2770
- } catch (err) {
2771
- return reply.code(500).send({ success: false, error: String(err) });
2858
+ await chatTopicWorkCoordinator.prepareSessionDelete(id);
2859
+ await ctx.beforeDeleteSession?.(id);
2860
+ const deleted = session_service_exports.deleteSession(adapter, id);
2861
+ if (!deleted) {
2862
+ return reply.code(404).send({ success: false, error: "File not found" });
2772
2863
  }
2864
+ owner_profile_service_exports.clearOwnerExclusions(preferences(), [id]);
2865
+ return { success: true };
2773
2866
  });
2774
2867
  server2.patch("/_web/sessions/:id/name", async (request) => {
2775
2868
  session_service_exports.renameSession(adapter, request.params.id, request.body.name);
@@ -2779,6 +2872,7 @@ function registerSessionRoutes(server2, ctx) {
2779
2872
  "/_web/sessions/:id/owner",
2780
2873
  async (request) => {
2781
2874
  session_service_exports.updateSessionOwnerId(adapter, request.params.id, request.body.ownerId ?? null);
2875
+ if (request.body.ownerId) owner_profile_service_exports.clearOwnerExclusions(preferences(), [request.params.id]);
2782
2876
  return { success: true };
2783
2877
  }
2784
2878
  );
@@ -2796,8 +2890,8 @@ function registerSessionRoutes(server2, ctx) {
2796
2890
  );
2797
2891
  }
2798
2892
  );
2799
- server2.post("/_web/sessions/:id/owner/dismiss-prompt", async (request) => {
2800
- owner_profile_service_exports.dismissOwnerPrompt(preferences(), request.params.id);
2893
+ server2.post("/_web/sessions/:id/owner/exclude", async (request) => {
2894
+ owner_profile_service_exports.excludeOwnerSession(preferences(), request.params.id);
2801
2895
  return { success: true };
2802
2896
  });
2803
2897
  }
@@ -2879,7 +2973,8 @@ function registerWebRoutes(server2, ctx, options) {
2879
2973
  registerMemberRoutes(server2, resolvedCtx);
2880
2974
  registerContactsRoutes(server2, resolvedCtx);
2881
2975
  registerPeopleRelationshipsRoutes(server2, resolvedCtx);
2882
- registerGlobalInsightRoutes(server2, resolvedCtx);
2976
+ registerNavigationLayoutRoutes(server2, resolvedCtx);
2977
+ registerNodePlugins(server2, resolvedCtx, options?.nodePlugins ?? []);
2883
2978
  registerPreferencesRoutes(server2, resolvedCtx);
2884
2979
  registerAnalyticsRoutes(server2, resolvedCtx);
2885
2980
  registerSqlRoutes(server2, resolvedCtx);
@@ -2899,6 +2994,100 @@ function registerSharedRoutes(server2, ctx, options) {
2899
2994
  registerWebRoutes(server2, ctx, options);
2900
2995
  }
2901
2996
 
2997
+ // ../../packages/http-routes/src/plugins/builtin/annual-summary/index.ts
2998
+ var annualSummaryNodePlugin = {
2999
+ id: ANNUAL_SUMMARY_PLUGIN_ID,
3000
+ registerHttpRoutes(server2, context) {
3001
+ let preferences = context.preferencesManager;
3002
+ const getExcludedSessionIds = () => {
3003
+ preferences ??= new PreferencesManager(context.pathProvider.getSystemDir());
3004
+ return preferences.load().ownerExcludedSessionIds;
3005
+ };
3006
+ const service = context.globalInsightService ?? createGlobalInsightService({
3007
+ adapter: context.sessionAdapter,
3008
+ pathProvider: context.pathProvider,
3009
+ runtimeIdentity: context.runtimeIdentity,
3010
+ nativeBinding: context.nativeBinding,
3011
+ getExcludedSessionIds
3012
+ });
3013
+ server2.addHook("onClose", () => service.close());
3014
+ server2.get(
3015
+ "/_web/global-insight/annual-summary",
3016
+ async (request) => service.getAnnualSummary({
3017
+ ...parseRange(request.query),
3018
+ acceptStale: isTruthy3(request.query.acceptStale)
3019
+ })
3020
+ );
3021
+ server2.post(
3022
+ "/_web/global-insight/annual-summary/recompute",
3023
+ async (request) => service.startRecompute(parseRange(request.query))
3024
+ );
3025
+ }
3026
+ };
3027
+ function parseRange(query) {
3028
+ const mode = query.mode === "recent" ? "recent" : "year";
3029
+ return {
3030
+ mode,
3031
+ year: parseInteger(query.year),
3032
+ days: query.days === "365" ? 365 : void 0
3033
+ };
3034
+ }
3035
+ function parseInteger(value) {
3036
+ if (!value) return void 0;
3037
+ const parsed = Number(value);
3038
+ return Number.isInteger(parsed) ? parsed : void 0;
3039
+ }
3040
+ function isTruthy3(value) {
3041
+ return value === "1" || value === "true" || value === "yes";
3042
+ }
3043
+
3044
+ // ../../packages/http-routes/src/plugins/builtin/time-investment/index.ts
3045
+ var timeInvestmentNodePlugin = {
3046
+ id: TIME_INVESTMENT_PLUGIN_ID,
3047
+ registerHttpRoutes(server2, context) {
3048
+ let preferences = context.preferencesManager;
3049
+ const getExcludedSessionIds = () => {
3050
+ preferences ??= new PreferencesManager(context.pathProvider.getSystemDir());
3051
+ return preferences.load().ownerExcludedSessionIds;
3052
+ };
3053
+ const service = context.timeInvestmentService ?? createTimeInvestmentService({
3054
+ adapter: context.sessionAdapter,
3055
+ pathProvider: context.pathProvider,
3056
+ runtimeIdentity: context.runtimeIdentity,
3057
+ nativeBinding: context.nativeBinding,
3058
+ getExcludedSessionIds
3059
+ });
3060
+ server2.addHook("onClose", () => service.close());
3061
+ server2.get(
3062
+ "/_web/global-insight/time-investment",
3063
+ async (request) => service.getTimeInvestment({
3064
+ ...parseRange2(request.query),
3065
+ acceptStale: isTruthy4(request.query.acceptStale)
3066
+ })
3067
+ );
3068
+ server2.post(
3069
+ "/_web/global-insight/time-investment/recompute",
3070
+ async (request) => service.startRecompute(parseRange2(request.query))
3071
+ );
3072
+ }
3073
+ };
3074
+ function parseRange2(query) {
3075
+ const mode = query.mode === "recent" ? "recent" : "year";
3076
+ return {
3077
+ mode,
3078
+ year: parseInteger2(query.year),
3079
+ days: query.days === "365" ? 365 : void 0
3080
+ };
3081
+ }
3082
+ function parseInteger2(value) {
3083
+ if (!value) return void 0;
3084
+ const parsed = Number(value);
3085
+ return Number.isInteger(parsed) ? parsed : void 0;
3086
+ }
3087
+ function isTruthy4(value) {
3088
+ return value === "1" || value === "true" || value === "yes";
3089
+ }
3090
+
2902
3091
  // ../../packages/http-routes/src/routes/web/automation.ts
2903
3092
  function requireAutomation(ctx) {
2904
3093
  return ctx.automation ?? null;
@@ -3572,10 +3761,10 @@ function registerWebRoutes2(server2, dbManager2, options) {
3572
3761
  const resolvedPathProvider = options?.pathProvider ?? fallbackPathProvider;
3573
3762
  const ai = options?.aiContext;
3574
3763
  const cliStreamImport = async (dm, filePath) => {
3575
- const { streamImport: streamImport2 } = await import("./stream-import-FSXCFG4M.mjs");
3764
+ const { streamImport: streamImport2 } = await import("./stream-import-XOUM3Z5W.mjs");
3576
3765
  const result = await streamImport2(dm, filePath);
3577
3766
  if (!result.success) {
3578
- const { IMPORT_IN_PROGRESS_ERROR_KEY: IMPORT_IN_PROGRESS_ERROR_KEY2, ImportInProgressError: ImportInProgressError2 } = await import("./src-COIB6Z4P.mjs");
3767
+ const { IMPORT_IN_PROGRESS_ERROR_KEY: IMPORT_IN_PROGRESS_ERROR_KEY2, ImportInProgressError: ImportInProgressError2 } = await import("./src-OV5ZNE3Z.mjs");
3579
3768
  if (result.error === IMPORT_IN_PROGRESS_ERROR_KEY2) throw new ImportInProgressError2();
3580
3769
  throw new Error(result.error || "Import failed");
3581
3770
  }
@@ -3641,7 +3830,10 @@ function registerWebRoutes2(server2, dbManager2, options) {
3641
3830
  runAgentStream: ai.runAgentStream
3642
3831
  }
3643
3832
  },
3644
- ai ? { requireAi: true } : void 0
3833
+ {
3834
+ nodePlugins: [annualSummaryNodePlugin, timeInvestmentNodePlugin],
3835
+ ...ai && { requireAi: true }
3836
+ }
3645
3837
  );
3646
3838
  registerImportRoutes2(server2, dbManager2);
3647
3839
  server2.get("/_web/system/check-update", async () => {
@@ -4751,4 +4943,4 @@ export {
4751
4943
  startHttpServer,
4752
4944
  stopHttpServer
4753
4945
  };
4754
- //# sourceMappingURL=chunk-7IGBPZMI.mjs.map
4946
+ //# sourceMappingURL=chunk-2JPFBIAG.mjs.map