@nextclaw/ui 0.12.23 → 0.12.25

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 (215) hide show
  1. package/CHANGELOG.md +136 -0
  2. package/dist/assets/api-DGD9_Bg4.js +15 -0
  3. package/dist/assets/app-manager-provider-oYdeYPSv.js +1 -0
  4. package/dist/assets/{book-open-DDlN5MvX.js → book-open-BcnAiKde.js} +1 -1
  5. package/dist/assets/channels-list-page-FJDuPwU6.js +8 -0
  6. package/dist/assets/chat-page-D1fMNBrT.js +1 -0
  7. package/dist/assets/config-split-page-CcrEUtwu.js +1 -0
  8. package/dist/assets/cpu-DPPwMzoC.js +3 -0
  9. package/dist/assets/{createLucideIcon-BLMK3QUd.js → createLucideIcon-DzY6wN61.js} +1 -1
  10. package/dist/assets/desktop-kk7qvZ-v.js +3 -0
  11. package/dist/assets/desktop-update-config-CP8dFYXK.js +1 -0
  12. package/dist/assets/{dialog-dxsKz7jJ.js → dialog-BKo0RItd.js} +1 -1
  13. package/dist/assets/{dist-DsYTOyq7.js → dist-CFiwgaLs.js} +1 -1
  14. package/dist/assets/doc-browser-CAhfnm0D.js +1 -0
  15. package/dist/assets/{doc-browser-context-BJuMaI3o.js → doc-browser-context-FukQHvyo.js} +1 -1
  16. package/dist/assets/doc-browser-p9DDNPWB.js +1 -0
  17. package/dist/assets/doc-browser-rZIQIjuw.js +1 -0
  18. package/dist/assets/download-CMM8po31.js +1 -0
  19. package/dist/assets/{es2015-V75WQJ2s.js → es2015-BhznEEyJ.js} +1 -1
  20. package/dist/assets/{external-link-DwfSfTLB.js → external-link-CpEvG65F.js} +1 -1
  21. package/dist/assets/i18n-D1144VAA.js +1 -0
  22. package/dist/assets/index-D-AAMKCt.js +103 -0
  23. package/dist/assets/index-DnBeV2Xm.css +1 -0
  24. package/dist/assets/{key-round-CJ5gDAAG.js → key-round-DUq47t0P.js} +1 -1
  25. package/dist/assets/marketplace-page-BrCLRIc4.js +105 -0
  26. package/dist/assets/marketplace-page-odDpPYEs.js +1 -0
  27. package/dist/assets/mcp-marketplace-page-CfbOBgKK.js +1 -0
  28. package/dist/assets/mcp-marketplace-page-DIq_SpMe.js +40 -0
  29. package/dist/assets/model-config-Bc6VVnxy.js +1 -0
  30. package/dist/assets/{notice-card-D1RNsTn_.js → notice-card-Dr6xCwva.js} +1 -1
  31. package/dist/assets/play-AqrNslHI.js +1 -0
  32. package/dist/assets/plus-B-YHtTNC.js +1 -0
  33. package/dist/assets/{popover-BMyiifTA.js → popover-BDFNiLlg.js} +1 -1
  34. package/dist/assets/provider-scoped-model-input-BMTp4BEH.js +1 -0
  35. package/dist/assets/providers-list-DN0tvISH.js +1 -0
  36. package/dist/assets/refresh-cw-CrbD8EkT.js +1 -0
  37. package/dist/assets/remote-Dr3jcfWP.js +1 -0
  38. package/dist/assets/{rotate-cw-BZ2JObNs.js → rotate-cw-BN9yjccP.js} +1 -1
  39. package/dist/assets/runtime-config-page-CRWOwBbl.js +1 -0
  40. package/dist/assets/{save-euRxl8pI.js → save-CO_4qf6b.js} +1 -1
  41. package/dist/assets/{search-CLd7m0M7.js → search-CRtQwr-h.js} +1 -1
  42. package/dist/assets/search-config-C4c1yZSP.js +1 -0
  43. package/dist/assets/secrets-config-zAF30YfO.js +3 -0
  44. package/dist/assets/{select-DTdzR8j8.js → select-BUTwE_lC.js} +1 -1
  45. package/dist/assets/{setting-row-CvKngoNI.js → setting-row-BavcnXw1.js} +1 -1
  46. package/dist/assets/settings-MWL2SMyk.js +1 -0
  47. package/dist/assets/{sparkles-DVfeSVJQ.js → sparkles-BmgOD4nY.js} +1 -1
  48. package/dist/assets/{status-dot-ChvPCib9.js → status-dot-l3kPFdq_.js} +1 -1
  49. package/dist/assets/{tabs-custom-Hia_ong0.js → tabs-custom-D48zdZoc.js} +1 -1
  50. package/dist/assets/{tag-chip-BywQeHJj.js → tag-chip-Dm2Lqnpu.js} +1 -1
  51. package/dist/assets/use-config-Cyv5IuSt.js +1 -0
  52. package/dist/assets/use-infinite-scroll-loader-Cvz8ZteY.js +1 -0
  53. package/dist/assets/x-BeyYA_h6.js +1 -0
  54. package/dist/index.html +29 -40
  55. package/package.json +9 -9
  56. package/src/app/components/layout/sidebar.layout.test.tsx +2 -4
  57. package/src/app/components/theme-provider.tsx +1 -0
  58. package/src/app/configs/app-navigation.config.ts +0 -6
  59. package/src/app/index.tsx +4 -7
  60. package/src/features/agents/components/agents-page.test.tsx +25 -15
  61. package/src/features/agents/components/agents-page.tsx +133 -172
  62. package/src/features/channels/components/config/channel-form.test.tsx +1 -0
  63. package/src/features/channels/components/config/channel-form.tsx +4 -3
  64. package/src/features/channels/components/config/weixin-channel-auth-section.test.tsx +38 -1
  65. package/src/features/channels/components/config/weixin-channel-auth-section.tsx +137 -40
  66. package/src/features/channels/index.ts +1 -1
  67. package/src/features/channels/utils/channel-form-fields.utils.test.ts +26 -0
  68. package/src/features/channels/utils/channel-form-fields.utils.ts +32 -18
  69. package/src/features/chat/components/chat-session-workspace-panel-nav.tsx +23 -4
  70. package/src/features/chat/components/chat-session-workspace-panel.tsx +34 -2
  71. package/src/features/chat/components/chat-sidebar-session-item.tsx +9 -3
  72. package/src/features/chat/components/conversation/chat-conversation-header.test.tsx +71 -0
  73. package/src/features/chat/components/conversation/chat-conversation-header.tsx +6 -0
  74. package/src/features/chat/components/conversation/chat-conversation-panel.test.tsx +181 -61
  75. package/src/features/chat/components/conversation/chat-conversation-panel.tsx +56 -25
  76. package/src/features/chat/components/conversation/session-header/chat-session-header-actions.test.tsx +24 -0
  77. package/src/features/chat/components/conversation/session-header/chat-session-header-actions.tsx +26 -5
  78. package/src/features/chat/components/layout/chat-sidebar-utility-menu.tsx +174 -0
  79. package/src/features/chat/components/layout/chat-sidebar.test.tsx +119 -8
  80. package/src/features/chat/components/layout/chat-sidebar.tsx +57 -75
  81. package/src/features/chat/components/providers/chat-presenter.provider.tsx +2 -0
  82. package/src/features/chat/components/workspace/session-cron-job-content.tsx +103 -0
  83. package/src/features/chat/hooks/use-hydrated-ncp-agent.test.tsx +6 -0
  84. package/src/features/chat/hooks/use-ncp-agent-runtime.test.tsx +172 -69
  85. package/src/features/chat/hooks/use-ncp-chat-derived-state.ts +2 -2
  86. package/src/features/chat/hooks/use-ncp-chat-page-data.test.tsx +70 -0
  87. package/src/features/chat/hooks/use-ncp-chat-page-data.ts +7 -7
  88. package/src/features/chat/hooks/use-ncp-child-session-tabs-view.ts +2 -8
  89. package/src/features/chat/hooks/use-ncp-session-conversation.test.tsx +10 -0
  90. package/src/features/chat/hooks/use-ncp-session-conversation.ts +2 -1
  91. package/src/features/chat/hooks/use-ncp-session-list-view.ts +1 -2
  92. package/src/features/chat/hooks/use-selected-session-context-window-indicator.ts +2 -4
  93. package/src/features/chat/managers/chat-session-list.manager.test.ts +21 -20
  94. package/src/features/chat/managers/chat-session-list.manager.ts +15 -24
  95. package/src/features/chat/managers/ncp-chat-input.manager.test.ts +22 -13
  96. package/src/features/chat/managers/ncp-chat-input.manager.ts +4 -2
  97. package/src/features/chat/managers/ncp-chat-presenter.manager.ts +6 -0
  98. package/src/features/chat/managers/ncp-chat-thread.manager.test.ts +52 -1
  99. package/src/features/chat/managers/ncp-chat-thread.manager.ts +21 -0
  100. package/src/features/chat/pages/ncp-chat-page.tsx +28 -17
  101. package/src/features/chat/stores/chat-session-list.store.ts +0 -3
  102. package/src/features/chat/stores/chat-thread.store.ts +4 -0
  103. package/src/features/chat/types/chat-stream.types.ts +1 -1
  104. package/src/features/chat/utils/chat-session-display.utils.test.ts +83 -1
  105. package/src/features/chat/utils/chat-session-display.utils.ts +73 -0
  106. package/src/features/chat/utils/ncp-session-adapter.utils.test.ts +22 -0
  107. package/src/features/chat/utils/ncp-session-adapter.utils.ts +33 -1
  108. package/src/features/marketplace/components/curated-shelves/marketplace-curated-scene-route.test.tsx +235 -0
  109. package/src/features/marketplace/components/curated-shelves/marketplace-curated-shelves.config.ts +162 -0
  110. package/src/features/marketplace/components/curated-shelves/marketplace-curated-shelves.tsx +355 -0
  111. package/src/features/marketplace/components/curated-shelves/marketplace-shelf-card.tsx +118 -0
  112. package/src/features/marketplace/components/detail-doc/marketplace-detail-doc-renderer.ts +201 -0
  113. package/src/features/marketplace/components/detail-doc/marketplace-detail-doc.test.ts +40 -0
  114. package/src/features/marketplace/components/marketplace-catalog-grid.tsx +114 -0
  115. package/src/features/marketplace/components/marketplace-detail-doc.ts +73 -24
  116. package/src/features/marketplace/components/marketplace-item-icon.tsx +45 -0
  117. package/src/features/marketplace/components/marketplace-list-card.tsx +177 -93
  118. package/src/features/marketplace/components/marketplace-page-detail.test.tsx +9 -2
  119. package/src/features/marketplace/components/marketplace-page-parts.tsx +1 -1
  120. package/src/features/marketplace/components/marketplace-page.test.tsx +25 -6
  121. package/src/features/marketplace/components/marketplace-page.tsx +154 -132
  122. package/src/features/marketplace/hooks/use-marketplace-curated-scene-route.ts +97 -0
  123. package/src/features/marketplace/hooks/use-marketplace.ts +59 -3
  124. package/src/features/system-status/components/config/runtime-agent-list-card.tsx +4 -8
  125. package/src/features/system-status/components/config/runtime-binding-list-card.tsx +5 -7
  126. package/src/features/system-status/components/config/runtime-config-editor.tsx +1 -19
  127. package/src/features/system-status/components/config/runtime-entry-list-card.tsx +10 -11
  128. package/src/features/system-status/components/config/runtime-settings-card.tsx +15 -23
  129. package/src/features/system-status/components/runtime-control-card.test.tsx +8 -6
  130. package/src/features/system-status/components/runtime-control-card.tsx +7 -6
  131. package/src/features/system-status/pages/runtime-config-page.test.tsx +19 -9
  132. package/src/features/system-status/pages/runtime-config-page.tsx +2 -3
  133. package/src/features/system-status/utils/runtime-config-agent.utils.ts +4 -4
  134. package/src/features/system-status/utils/system-status.utils.ts +31 -6
  135. package/src/index.css +8 -0
  136. package/src/platforms/desktop/components/desktop-app-shell.test.tsx +67 -0
  137. package/src/platforms/desktop/components/desktop-app-shell.tsx +46 -18
  138. package/src/platforms/desktop/components/desktop-window-chrome.tsx +30 -0
  139. package/src/platforms/desktop/index.ts +6 -0
  140. package/src/platforms/desktop/types/desktop-update.types.ts +3 -0
  141. package/src/platforms/desktop/utils/desktop-host.utils.ts +56 -0
  142. package/src/shared/components/common/brand-header.tsx +36 -16
  143. package/src/shared/components/config/provider-form-support.ts +2 -22
  144. package/src/shared/components/cron-config.tsx +12 -58
  145. package/src/shared/components/doc-browser/doc-browser.tsx +4 -4
  146. package/src/shared/components/ui/select.tsx +19 -7
  147. package/src/shared/lib/api/channel-auth.types.ts +1 -0
  148. package/src/shared/lib/api/ncp-session-query-cache.test.ts +26 -1
  149. package/src/shared/lib/api/ncp-session-query-cache.ts +5 -1
  150. package/src/shared/lib/api/ncp-session.types.ts +9 -0
  151. package/src/shared/lib/api/types.ts +12 -1
  152. package/src/shared/lib/api/utils/marketplace.utils.ts +7 -1
  153. package/src/shared/lib/cron/cron-job-view.utils.ts +59 -0
  154. package/src/shared/lib/cron/index.ts +1 -0
  155. package/src/shared/lib/i18n/{channel-auth.ts → channel-auth.constants.ts} +31 -0
  156. package/src/shared/lib/i18n/chat-labels.utils.ts +3 -2
  157. package/src/shared/lib/i18n/index.ts +20 -59
  158. package/src/shared/lib/i18n/{runtime-control.ts → runtime-control-labels.utils.ts} +30 -1
  159. package/src/shared/lib/provider-models/index.test.ts +39 -0
  160. package/src/shared/lib/provider-models/index.ts +1 -3
  161. package/src/shared/lib/ui-document-title/index.ts +0 -1
  162. package/tsconfig.json +1 -0
  163. package/vite.config.ts +1 -1
  164. package/vitest.config.ts +1 -1
  165. package/dist/assets/api-BGd3rgv_.js +0 -15
  166. package/dist/assets/app-manager-provider-BuJ_U9eC.js +0 -1
  167. package/dist/assets/app-navigation.config-BTdUuqXS.js +0 -1
  168. package/dist/assets/channels-list-page-BrwymXPe.js +0 -8
  169. package/dist/assets/chat-DGM6K3Qs.js +0 -61
  170. package/dist/assets/chat-page-DpmXMWNS.js +0 -1
  171. package/dist/assets/chunk-JZWAC4HX-Kydj4yEz.js +0 -3
  172. package/dist/assets/config-split-page-DIOCjj2Q.js +0 -1
  173. package/dist/assets/desktop-update-config-BGKiqc6q.js +0 -1
  174. package/dist/assets/doc-browser-C8FM5fC0.js +0 -1
  175. package/dist/assets/doc-browser-RJUOL_GO.js +0 -1
  176. package/dist/assets/doc-browser-p82AdNO-.js +0 -1
  177. package/dist/assets/folder-CeJKPx5P.js +0 -1
  178. package/dist/assets/hash-BqxRTZW5.js +0 -1
  179. package/dist/assets/i18n-DnTGDIRw.js +0 -1
  180. package/dist/assets/index-BrEdR78s.js +0 -2
  181. package/dist/assets/index-D8MKmXtO.css +0 -1
  182. package/dist/assets/loader-circle-fd-vQKtW.js +0 -1
  183. package/dist/assets/logo-badge-KAe-7d8c.js +0 -1
  184. package/dist/assets/logos-C4sYP1Vl.js +0 -1
  185. package/dist/assets/marketplace-page-B2Pm2RDJ.js +0 -1
  186. package/dist/assets/marketplace-page-CPHxlYL8.js +0 -49
  187. package/dist/assets/mcp-marketplace-page-BcjVmw36.js +0 -1
  188. package/dist/assets/mcp-marketplace-page-CswPXSjf.js +0 -40
  189. package/dist/assets/message-square-z_osm9c0.js +0 -1
  190. package/dist/assets/model-config-Cmruiqdx.js +0 -1
  191. package/dist/assets/play-Dv6Nr1Ew.js +0 -1
  192. package/dist/assets/plus-D8eKFY7h.js +0 -1
  193. package/dist/assets/provider-scoped-model-input-D7ACiMAO.js +0 -1
  194. package/dist/assets/providers-list-gg7LrfuB.js +0 -1
  195. package/dist/assets/refresh-ccw-ByVwmnN_.js +0 -1
  196. package/dist/assets/refresh-cw-PcqoYB3K.js +0 -1
  197. package/dist/assets/remote-Db2M39Cv.js +0 -1
  198. package/dist/assets/runtime-config-page-BT_VV41p.js +0 -1
  199. package/dist/assets/search-config-0VTPpz-w.js +0 -1
  200. package/dist/assets/secrets-config-DwQbLLEy.js +0 -3
  201. package/dist/assets/sessions-config-page-CAG7Zevv.js +0 -2
  202. package/dist/assets/settings-drbWqzA4.js +0 -1
  203. package/dist/assets/skeleton-BK1SOSRA.js +0 -1
  204. package/dist/assets/theme-provider-COAwWFv8.js +0 -2
  205. package/dist/assets/tooltip-BOYp8Ue7.js +0 -1
  206. package/dist/assets/trash-2-CBsHCfqq.js +0 -1
  207. package/dist/assets/use-config-DTwhNDQE.js +0 -1
  208. package/dist/assets/use-confirm-dialog-oeSqhmrx.js +0 -1
  209. package/dist/assets/use-infinite-scroll-loader-X3KGuME8.js +0 -1
  210. package/dist/assets/use-viewport-layout-C0NJAVXs.js +0 -1
  211. package/dist/assets/x-CM-XDMpk.js +0 -1
  212. package/src/features/chat/components/config/sessions-config-detail-pane.tsx +0 -244
  213. package/src/features/chat/pages/sessions-config-page.test.tsx +0 -152
  214. package/src/features/chat/pages/sessions-config-page.tsx +0 -192
  215. /package/dist/assets/{config-hints-MogHYQ8G.js → config-hints-BNfpOL4J.js} +0 -0
package/dist/index.html CHANGED
@@ -78,46 +78,35 @@
78
78
  })();
79
79
  </script>
80
80
  <title>NextClaw</title>
81
- <script type="module" crossorigin src="/assets/index-BrEdR78s.js"></script>
82
- <link rel="modulepreload" crossorigin href="/assets/i18n-DnTGDIRw.js">
83
- <link rel="modulepreload" crossorigin href="/assets/chunk-JZWAC4HX-Kydj4yEz.js">
84
- <link rel="modulepreload" crossorigin href="/assets/api-BGd3rgv_.js">
85
- <link rel="modulepreload" crossorigin href="/assets/es2015-V75WQJ2s.js">
86
- <link rel="modulepreload" crossorigin href="/assets/createLucideIcon-BLMK3QUd.js">
87
- <link rel="modulepreload" crossorigin href="/assets/select-DTdzR8j8.js">
88
- <link rel="modulepreload" crossorigin href="/assets/dist-DsYTOyq7.js">
89
- <link rel="modulepreload" crossorigin href="/assets/x-CM-XDMpk.js">
90
- <link rel="modulepreload" crossorigin href="/assets/dialog-dxsKz7jJ.js">
91
- <link rel="modulepreload" crossorigin href="/assets/popover-BMyiifTA.js">
92
- <link rel="modulepreload" crossorigin href="/assets/tooltip-BOYp8Ue7.js">
93
- <link rel="modulepreload" crossorigin href="/assets/refresh-cw-PcqoYB3K.js">
94
- <link rel="modulepreload" crossorigin href="/assets/use-config-DTwhNDQE.js">
95
- <link rel="modulepreload" crossorigin href="/assets/theme-provider-COAwWFv8.js">
96
- <link rel="modulepreload" crossorigin href="/assets/search-CLd7m0M7.js">
97
- <link rel="modulepreload" crossorigin href="/assets/book-open-DDlN5MvX.js">
98
- <link rel="modulepreload" crossorigin href="/assets/external-link-DwfSfTLB.js">
99
- <link rel="modulepreload" crossorigin href="/assets/folder-CeJKPx5P.js">
100
- <link rel="modulepreload" crossorigin href="/assets/logos-C4sYP1Vl.js">
101
- <link rel="modulepreload" crossorigin href="/assets/loader-circle-fd-vQKtW.js">
102
- <link rel="modulepreload" crossorigin href="/assets/plus-D8eKFY7h.js">
103
- <link rel="modulepreload" crossorigin href="/assets/refresh-ccw-ByVwmnN_.js">
104
- <link rel="modulepreload" crossorigin href="/assets/settings-drbWqzA4.js">
105
- <link rel="modulepreload" crossorigin href="/assets/sparkles-DVfeSVJQ.js">
106
- <link rel="modulepreload" crossorigin href="/assets/trash-2-CBsHCfqq.js">
107
- <link rel="modulepreload" crossorigin href="/assets/doc-browser-context-BJuMaI3o.js">
108
- <link rel="modulepreload" crossorigin href="/assets/doc-browser-p82AdNO-.js">
109
- <link rel="modulepreload" crossorigin href="/assets/doc-browser-C8FM5fC0.js">
110
- <link rel="modulepreload" crossorigin href="/assets/use-viewport-layout-C0NJAVXs.js">
111
- <link rel="modulepreload" crossorigin href="/assets/logo-badge-KAe-7d8c.js">
112
- <link rel="modulepreload" crossorigin href="/assets/skeleton-BK1SOSRA.js">
113
- <link rel="modulepreload" crossorigin href="/assets/chat-DGM6K3Qs.js">
114
- <link rel="modulepreload" crossorigin href="/assets/key-round-CJ5gDAAG.js">
115
- <link rel="modulepreload" crossorigin href="/assets/message-square-z_osm9c0.js">
116
- <link rel="modulepreload" crossorigin href="/assets/app-navigation.config-BTdUuqXS.js">
117
- <link rel="modulepreload" crossorigin href="/assets/notice-card-D1RNsTn_.js">
118
- <link rel="modulepreload" crossorigin href="/assets/status-dot-ChvPCib9.js">
119
- <link rel="modulepreload" crossorigin href="/assets/app-manager-provider-BuJ_U9eC.js">
120
- <link rel="stylesheet" crossorigin href="/assets/index-D8MKmXtO.css">
81
+ <script type="module" crossorigin src="/assets/index-D-AAMKCt.js"></script>
82
+ <link rel="modulepreload" crossorigin href="/assets/i18n-D1144VAA.js">
83
+ <link rel="modulepreload" crossorigin href="/assets/createLucideIcon-DzY6wN61.js">
84
+ <link rel="modulepreload" crossorigin href="/assets/cpu-DPPwMzoC.js">
85
+ <link rel="modulepreload" crossorigin href="/assets/api-DGD9_Bg4.js">
86
+ <link rel="modulepreload" crossorigin href="/assets/es2015-BhznEEyJ.js">
87
+ <link rel="modulepreload" crossorigin href="/assets/select-BUTwE_lC.js">
88
+ <link rel="modulepreload" crossorigin href="/assets/dist-CFiwgaLs.js">
89
+ <link rel="modulepreload" crossorigin href="/assets/x-BeyYA_h6.js">
90
+ <link rel="modulepreload" crossorigin href="/assets/dialog-BKo0RItd.js">
91
+ <link rel="modulepreload" crossorigin href="/assets/popover-BDFNiLlg.js">
92
+ <link rel="modulepreload" crossorigin href="/assets/search-CRtQwr-h.js">
93
+ <link rel="modulepreload" crossorigin href="/assets/book-open-BcnAiKde.js">
94
+ <link rel="modulepreload" crossorigin href="/assets/download-CMM8po31.js">
95
+ <link rel="modulepreload" crossorigin href="/assets/key-round-DUq47t0P.js">
96
+ <link rel="modulepreload" crossorigin href="/assets/notice-card-Dr6xCwva.js">
97
+ <link rel="modulepreload" crossorigin href="/assets/status-dot-l3kPFdq_.js">
98
+ <link rel="modulepreload" crossorigin href="/assets/app-manager-provider-oYdeYPSv.js">
99
+ <link rel="modulepreload" crossorigin href="/assets/settings-MWL2SMyk.js">
100
+ <link rel="modulepreload" crossorigin href="/assets/refresh-cw-CrbD8EkT.js">
101
+ <link rel="modulepreload" crossorigin href="/assets/sparkles-BmgOD4nY.js">
102
+ <link rel="modulepreload" crossorigin href="/assets/external-link-CpEvG65F.js">
103
+ <link rel="modulepreload" crossorigin href="/assets/plus-B-YHtTNC.js">
104
+ <link rel="modulepreload" crossorigin href="/assets/doc-browser-context-FukQHvyo.js">
105
+ <link rel="modulepreload" crossorigin href="/assets/doc-browser-rZIQIjuw.js">
106
+ <link rel="modulepreload" crossorigin href="/assets/doc-browser-CAhfnm0D.js">
107
+ <link rel="modulepreload" crossorigin href="/assets/use-config-Cyv5IuSt.js">
108
+ <link rel="modulepreload" crossorigin href="/assets/desktop-kk7qvZ-v.js">
109
+ <link rel="stylesheet" crossorigin href="/assets/index-DnBeV2Xm.css">
121
110
  </head>
122
111
 
123
112
  <body>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nextclaw/ui",
3
- "version": "0.12.23",
3
+ "version": "0.12.25",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -28,14 +28,14 @@
28
28
  "tailwind-merge": "^2.5.4",
29
29
  "zod": "^3.23.8",
30
30
  "zustand": "^5.0.2",
31
- "@nextclaw/agent-chat": "0.1.13",
32
- "@nextclaw/client-sdk": "0.1.3",
33
- "@nextclaw/agent-chat-ui": "0.3.15",
34
- "@nextclaw/shared": "0.1.2",
35
- "@nextclaw/ncp-react": "0.4.28",
36
- "@nextclaw/ncp-http-agent-client": "0.3.20",
37
- "@nextclaw/ncp": "0.5.8",
38
- "@nextclaw/server": "0.12.15"
31
+ "@nextclaw/agent-chat": "0.1.15",
32
+ "@nextclaw/agent-chat-ui": "0.3.17",
33
+ "@nextclaw/client-sdk": "0.1.5",
34
+ "@nextclaw/ncp": "0.5.10",
35
+ "@nextclaw/ncp-http-agent-client": "0.3.22",
36
+ "@nextclaw/ncp-react": "0.4.30",
37
+ "@nextclaw/server": "0.12.17",
38
+ "@nextclaw/shared": "0.1.4"
39
39
  },
40
40
  "devDependencies": {
41
41
  "@testing-library/react": "^16.3.0",
@@ -2,6 +2,7 @@ import { render, screen, within } from '@testing-library/react';
2
2
  import { MemoryRouter } from 'react-router-dom';
3
3
  import { describe, expect, it, vi } from 'vitest';
4
4
  import { Sidebar } from '@/app/components/layout/sidebar';
5
+ import type * as RemoteFeature from '@/features/remote';
5
6
 
6
7
  const mocks = vi.hoisted(() => ({
7
8
  openAccountPanel: vi.fn(),
@@ -31,9 +32,7 @@ vi.mock('@/app/components/app-manager-provider', () => ({
31
32
  }));
32
33
 
33
34
  vi.mock('@/features/remote', async () => {
34
- const actual = await vi.importActual<typeof import('@/features/remote')>(
35
- '@/features/remote'
36
- );
35
+ const actual = await vi.importActual<typeof RemoteFeature>('@/features/remote');
37
36
  return {
38
37
  ...actual,
39
38
  useRemoteStatus: () => mocks.remoteStatus
@@ -116,7 +115,6 @@ describe('Sidebar', () => {
116
115
  'Updates',
117
116
  'Remote Access',
118
117
  'Security',
119
- 'Sessions',
120
118
  'Secrets',
121
119
  'Cron Jobs',
122
120
  'Plugins',
@@ -28,6 +28,7 @@ export function ThemeProvider({ children }: { children: ReactNode }) {
28
28
 
29
29
  useEffect(() => {
30
30
  pwaShellThemeManager.syncTheme(theme);
31
+ void window.nextclawDesktop?.setShellTheme?.(theme);
31
32
  }, [theme]);
32
33
 
33
34
  useEffect(() => {
@@ -5,7 +5,6 @@ import {
5
5
  BrainCircuit,
6
6
  Cpu,
7
7
  Download,
8
- History,
9
8
  KeyRound,
10
9
  Languages,
11
10
  MessageCircle,
@@ -126,11 +125,6 @@ export function getSettingsNavItems(
126
125
  label: translate("security"),
127
126
  icon: Shield,
128
127
  },
129
- {
130
- target: "/sessions",
131
- label: translate("sessions"),
132
- icon: History,
133
- },
134
128
  {
135
129
  target: "/secrets",
136
130
  label: translate("secrets"),
package/src/app/index.tsx CHANGED
@@ -47,9 +47,6 @@ const DesktopUpdateConfigPage = lazy(async () => ({
47
47
  const SecurityConfigPage = lazy(async () => ({
48
48
  default: (await import("@/components/config/security-config")).SecurityConfig,
49
49
  }));
50
- const SessionsConfigPage = lazy(async () => ({
51
- default: (await import("@/components/config/SessionsConfig")).SessionsConfig,
52
- }));
53
50
  const SecretsConfigPage = lazy(async () => ({
54
51
  default: (await import("@/components/config/SecretsConfig")).SecretsConfig,
55
52
  }));
@@ -109,6 +106,10 @@ const protectedRouteDefinitions: ProtectedRouteDefinition[] = [
109
106
  path: "/skills",
110
107
  element: createLazyElement(<ChatPage view="skills" />),
111
108
  },
109
+ {
110
+ path: "/skills/scenes/:scene",
111
+ element: createLazyElement(<ChatPage view="skills" />),
112
+ },
112
113
  {
113
114
  path: "/cron",
114
115
  element: createLazyElement(<ChatPage view="cron" />),
@@ -145,10 +146,6 @@ const protectedRouteDefinitions: ProtectedRouteDefinition[] = [
145
146
  path: "/security",
146
147
  element: createLazyElement(<SecurityConfigPage />),
147
148
  },
148
- {
149
- path: "/sessions",
150
- element: createLazyElement(<SessionsConfigPage />),
151
- },
152
149
  {
153
150
  path: "/secrets",
154
151
  element: createLazyElement(<SecretsConfigPage />),
@@ -3,6 +3,7 @@ import userEvent from "@testing-library/user-event";
3
3
  import { MemoryRouter } from "react-router-dom";
4
4
  import { beforeEach, describe, expect, it, vi } from "vitest";
5
5
  import { AgentsPage } from "@/features/agents";
6
+ import type * as ChatFeature from "@/features/chat";
6
7
  import {
7
8
  ChatPresenterProvider,
8
9
  NcpChatPresenter,
@@ -112,7 +113,7 @@ vi.mock("@/shared/hooks/use-config", () => ({
112
113
  }));
113
114
 
114
115
  vi.mock("@/features/chat", async (importOriginal) => {
115
- const actual = await importOriginal<typeof import("@/features/chat")>();
116
+ const actual = await importOriginal<typeof ChatFeature>();
116
117
  return {
117
118
  ...actual,
118
119
  useNcpChatSessionTypes: () => mocks.sessionTypesQuery,
@@ -148,6 +149,7 @@ describe("AgentsPage", () => {
148
149
  useChatInputStore.setState({
149
150
  snapshot: {
150
151
  ...useChatInputStore.getState().snapshot,
152
+ draft: "",
151
153
  pendingSessionType: "native",
152
154
  pendingProjectRoot: "/tmp/demo-project",
153
155
  pendingProjectRootSessionKey: "draft-session",
@@ -158,7 +160,6 @@ describe("AgentsPage", () => {
158
160
  ...useChatSessionListStore.getState().snapshot,
159
161
  selectedAgentId: "main",
160
162
  selectedSessionKey: "session-1",
161
- draftSessionKey: "stale-draft-session",
162
163
  },
163
164
  });
164
165
  useChatThreadStore.setState({
@@ -169,26 +170,37 @@ describe("AgentsPage", () => {
169
170
  });
170
171
  });
171
172
 
172
- it("renders the agents workspace in Chinese and keeps core actions visible", async () => {
173
+ it("renders the agents workspace in Chinese and keeps management actions in a compact menu", async () => {
173
174
  const user = userEvent.setup();
174
175
 
175
176
  renderAgentsPage();
176
177
 
177
178
  expect(screen.getByText("Agent 管理台")).toBeTruthy();
178
- expect(
179
- screen.getByText("让每个 Agent 都像真正的协作者一样存在"),
180
- ).toBeTruthy();
181
- expect(screen.getByText("全部 Agent")).toBeTruthy();
182
- expect(screen.getAllByText("主目录").length).toBeGreaterThan(0);
179
+ expect(screen.getByText("~/.nextclaw/workspace")).toBeTruthy();
183
180
  expect(screen.getAllByRole("button", { name: "开始对话" })).toHaveLength(2);
184
- expect(screen.getAllByRole("button", { name: "编辑" })).toHaveLength(2);
181
+ expect(screen.getAllByRole("button", { name: "更多操作" })).toHaveLength(2);
182
+ expect(screen.queryByRole("button", { name: "编辑" })).toBeNull();
185
183
  expect(screen.getByText("负责调研、信息筛选与结论提炼。")).toBeTruthy();
186
184
  expect(
187
185
  screen.queryByText("专属 Agent 身份,可沉淀自己的记忆、技能与角色风格。"),
188
186
  ).toBeNull();
189
187
  expect(screen.queryByText("Agent Gallery")).toBeNull();
190
188
 
191
- await user.click(screen.getAllByRole("button", { name: "编辑" })[1]);
189
+ await user.click(screen.getByRole("button", { name: "新增 Agent" }));
190
+
191
+ expect(useChatSessionListStore.getState().snapshot.selectedAgentId).toBe(
192
+ "main",
193
+ );
194
+ expect(useChatSessionListStore.getState().snapshot.selectedSessionKey).toBeNull();
195
+ expect(useChatThreadStore.getState().snapshot.sessionKey).toBeNull();
196
+ expect(useChatInputStore.getState().snapshot.draft).toContain(
197
+ "请帮我创建一个新的 Agent",
198
+ );
199
+ expect(mocks.createAgent).not.toHaveBeenCalled();
200
+ expect(screen.queryByText("创建新的 Agent 身份")).toBeNull();
201
+
202
+ await user.click(screen.getAllByRole("button", { name: "更多操作" })[1]);
203
+ await user.click(screen.getByRole("button", { name: "编辑" }));
192
204
 
193
205
  expect(screen.getByText("编辑 Agent 身份")).toBeTruthy();
194
206
  expect(screen.getByText("主目录保持不变")).toBeTruthy();
@@ -204,7 +216,8 @@ describe("AgentsPage", () => {
204
216
 
205
217
  renderAgentsPage();
206
218
 
207
- await user.click(screen.getAllByRole("button", { name: "编辑" })[1]);
219
+ await user.click(screen.getAllByRole("button", { name: "更多操作" })[1]);
220
+ await user.click(screen.getByRole("button", { name: "编辑" }));
208
221
 
209
222
  const runtimeTrigger = screen.getByRole("combobox", { name: "Runtime" });
210
223
  expect(
@@ -241,10 +254,7 @@ describe("AgentsPage", () => {
241
254
  "researcher",
242
255
  );
243
256
  expect(sessionListSnapshot.selectedSessionKey).toBeNull();
244
- expect(sessionListSnapshot.draftSessionKey).not.toBe("stale-draft-session");
245
- expect(useChatThreadStore.getState().snapshot.sessionKey).toBe(
246
- sessionListSnapshot.draftSessionKey,
247
- );
257
+ expect(useChatThreadStore.getState().snapshot.sessionKey).toBeNull();
248
258
  expect(useChatInputStore.getState().snapshot.pendingSessionType).toBe(
249
259
  "codex",
250
260
  );