@nextclaw/ui 0.15.4 → 0.15.6

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 (300) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/dist/assets/abnfDiagram-VRR7QNED-BYpK0F5F.js +1 -0
  3. package/dist/assets/{aiden0z-pptx-renderer.es-Bd99vut2.js → aiden0z-pptx-renderer.es-D87ywFdC.js} +1 -1
  4. package/dist/assets/api-Dyb5rgh0.js +13 -0
  5. package/dist/assets/app-presenter-provider-7jV0nPiL.js +106 -0
  6. package/dist/assets/{appearance-settings-page-fLIJbx1C.js → appearance-settings-page-DFm3BbEb.js} +1 -1
  7. package/dist/assets/arc-DFELHWM2.js +1 -0
  8. package/dist/assets/architecture-TIHT7OUA-ClwVFq-K.js +1 -0
  9. package/dist/assets/architectureDiagram-ZJ3FMSHR-CvRhdovL.js +36 -0
  10. package/dist/assets/array-BqYdCIE6.js +1 -0
  11. package/dist/assets/blockDiagram-677ZJIJ3-DVYNkbR_.js +132 -0
  12. package/dist/assets/{book-open-DWUjS6aW.js → book-open-L6LCuqOr.js} +1 -1
  13. package/dist/assets/c4Diagram-LMCZKHZV-B1w-iwRe.js +10 -0
  14. package/dist/assets/channel-BEHOSFc5.js +1 -0
  15. package/dist/assets/{channels-list-page-CvCTJraa.js → channels-list-page-DOaPKNJA.js} +2 -2
  16. package/dist/assets/{chat-page-B42UUIFR.js → chat-page-Cw9uDhD_.js} +1 -1
  17. package/dist/assets/chunk-2Q5K7J3B-DrIhesSX.js +1 -0
  18. package/dist/assets/chunk-32BRIVSS-kG3lg0bC.js +1 -0
  19. package/dist/assets/chunk-52WLFC77-BLeB7iGk.js +10 -0
  20. package/dist/assets/chunk-5FCAYU7R-BQga1Rr7.js +1 -0
  21. package/dist/assets/chunk-5HE753X5-DU81hkcF.js +1 -0
  22. package/dist/assets/chunk-5JV3BV7I-C2bAx0m7.js +1 -0
  23. package/dist/assets/chunk-5TONJI2A-BExIIgWY.js +2 -0
  24. package/dist/assets/chunk-5VM5RSS4-C3XB05yh.js +15 -0
  25. package/dist/assets/chunk-7BUUIJ7U-JiyRtrGu.js +1 -0
  26. package/dist/assets/chunk-BIQX33UG-BZRV20pI.js +1 -0
  27. package/dist/assets/chunk-C7G6YPKG-AsyDSQ9j.js +1 -0
  28. package/dist/assets/chunk-CQNSW5MT-iN-fiXVA.js +1 -0
  29. package/dist/assets/chunk-CYSBUYHQ-DhC_TRzI.js +1 -0
  30. package/dist/assets/chunk-EMLP6XTP-QFLK8R6d.js +1 -0
  31. package/dist/assets/chunk-EX3LRPZG-DzUwhkCz.js +231 -0
  32. package/dist/assets/chunk-FWX5IMBZ-DFelpZBy.js +2 -0
  33. package/dist/assets/chunk-HOUHSVGY-BMPwFEwN.js +1 -0
  34. package/dist/assets/chunk-ICXQ74PX-DH8NJMok.js +2 -0
  35. package/dist/assets/chunk-JG7HCLWE-D-95AsO4.js +2 -0
  36. package/dist/assets/chunk-JWPE2WC7-DIaTv8kx.js +1 -0
  37. package/dist/assets/chunk-KEIR6QF5-A3jEqwzn.js +161 -0
  38. package/dist/assets/chunk-MOJQB5TN-BPFLzWgj.js +88 -0
  39. package/dist/assets/chunk-MOZMSUNE-DR_fzxG0.js +1 -0
  40. package/dist/assets/chunk-OGEWGWER-TIcEoPPH.js +1 -0
  41. package/dist/assets/chunk-OSBZ3O6U-BALNvSfG.js +1 -0
  42. package/dist/assets/chunk-PUDLZKDR-I-EXhf_k.js +156 -0
  43. package/dist/assets/chunk-Q4XR5HBZ-uvIGstBS.js +70 -0
  44. package/dist/assets/chunk-QBLGF6JB-r-TjLdxa.js +1 -0
  45. package/dist/assets/chunk-R7FJI6CG-N-1LDgvy.js +1 -0
  46. package/dist/assets/chunk-RYQCIY6F-jxNASx65.js +1 -0
  47. package/dist/assets/chunk-U6XO7XAA-Cphbuc7q.js +2 -0
  48. package/dist/assets/chunk-V7JOEXUC-BLEuBf1s.js +206 -0
  49. package/dist/assets/chunk-VAUOI2AC-Dpcz6BhT.js +1 -0
  50. package/dist/assets/chunk-VR4S4FIN-BAUbR0ke.js +1 -0
  51. package/dist/assets/chunk-WYO6CB5R-Do6SJrnY.js +127 -0
  52. package/dist/assets/chunk-XXDRQBXY-C2QjjwYX.js +1 -0
  53. package/dist/assets/chunk-Y2CYZVJY-BGrd8tLy.js +1 -0
  54. package/dist/assets/chunk-YOTPTUD7-CQqvMTCr.js +1 -0
  55. package/dist/assets/chunk-ZGVPDNZ5-B7kWWaXv.js +62 -0
  56. package/dist/assets/chunk-ZIRB5QZD-DTU0cDNh.js +32 -0
  57. package/dist/assets/classDiagram-OUVF2IWQ-DESMaY3_.js +1 -0
  58. package/dist/assets/classDiagram-v2-EOCWNBFH-DwOlByYH.js +1 -0
  59. package/dist/assets/{config-split-page-DBgt9S8b.js → config-split-page-CqlqjnCK.js} +1 -1
  60. package/dist/assets/{confirm-dialog-GSXIvoRU.js → confirm-dialog-bAp8NU93.js} +1 -1
  61. package/dist/assets/cose-bilkent-JH36ORCC-B9LrtV-q.js +1 -0
  62. package/dist/assets/cynefin-VYW2F7L2-CzjeeOq9.js +1 -0
  63. package/dist/assets/cynefinDiagram-TSTJHNR4-BfjvW4su.js +62 -0
  64. package/dist/assets/cytoscape.esm-CRW8q92n.js +321 -0
  65. package/dist/assets/dagre-DkiXZKkL.js +1 -0
  66. package/dist/assets/dagre-VKFMJZFB-B1pQKQSY.js +4 -0
  67. package/dist/assets/defaultLocale-Cdv9x6q7.js +1 -0
  68. package/dist/assets/desktop-update-config-2SjMfCMl.js +1 -0
  69. package/dist/assets/diagram-FQU43EPY-cB4EZdaP.js +3 -0
  70. package/dist/assets/diagram-G47NLZAW-CtW8im1B.js +24 -0
  71. package/dist/assets/diagram-NH7WQ7WH-BDCtrCCm.js +24 -0
  72. package/dist/assets/diagram-OA4YK3LP-DEMJ42Gt.js +30 -0
  73. package/dist/assets/diagram-WEI45ONY-CdCcxSYU.js +41 -0
  74. package/dist/assets/{dist-DC7f4TJH.js → dist-CrtbGLlh.js} +1 -1
  75. package/dist/assets/dist-dw-gAfM_.js +1 -0
  76. package/dist/assets/doc-browser-A5IRyDXQ2.js +1 -0
  77. package/dist/assets/{doc-browser-D0monHjG.js → doc-browser-BmnQa30-.js} +1 -1
  78. package/dist/assets/{doc-browser-context-CGwEOhBy.js → doc-browser-context-BlpUUFrR.js} +1 -1
  79. package/dist/assets/{docx-preview-eFH9DRsS.js → docx-preview-zis3U0Fa.js} +1 -1
  80. package/dist/assets/{download-DiP9zx-J.js → download-BhZZNXD8.js} +1 -1
  81. package/dist/assets/ebnfDiagram-CCIWWBDH-DBZETBwE.js +1 -0
  82. package/dist/assets/erDiagram-Q63AITRT-y2zDXprP.js +85 -0
  83. package/dist/assets/eventmodeling-45OFAUF4-C38BqG8w.js +1 -0
  84. package/dist/assets/{external-link-C6ZeSPef.js → external-link-B9Uoq5J7.js} +1 -1
  85. package/dist/assets/{eye-suvKmtwn.js → eye-K5knauEM.js} +1 -1
  86. package/dist/assets/flowDiagram-23GEKE2U-BoKk8RRq.js +1 -0
  87. package/dist/assets/{folder-CMELbQGG.js → folder-BIYZZWJv.js} +1 -1
  88. package/dist/assets/{form-actions-CUAzpNe_.js → form-actions-CKprWFeM.js} +1 -1
  89. package/dist/assets/ganttDiagram-NO4QXBWP-D2DP344e.js +292 -0
  90. package/dist/assets/gitGraph-TEB2WS4Q-IsQHHJuS.js +1 -0
  91. package/dist/assets/gitGraphDiagram-IHSO6WYX-D37uiwA2.js +106 -0
  92. package/dist/assets/graphlib-BcNFQr5y.js +1 -0
  93. package/dist/assets/index-BVn702m4.css +1 -0
  94. package/dist/assets/index-CFxJ1Fkg.js +2 -0
  95. package/dist/assets/info-DKCQHKI2-ofy2qlHI.js +1 -0
  96. package/dist/assets/infoDiagram-FWYZ7A6U-CG-WAIRi.js +2 -0
  97. package/dist/assets/init-D8TjIqfm.js +1 -0
  98. package/dist/assets/ishikawaDiagram-FXEZZL3T-WeCTnW0f.js +70 -0
  99. package/dist/assets/journeyDiagram-5HDEW3XC-DUFBW9Td.js +139 -0
  100. package/dist/assets/kanban-definition-HUTT4EX6-B0lxgMpg.js +89 -0
  101. package/dist/assets/katex-wEmrEFTg.js +257 -0
  102. package/dist/assets/line-B78frP_c.js +1 -0
  103. package/dist/assets/linear-C6lVEcb2.js +1 -0
  104. package/dist/assets/loader-circle-Bj2RMrCR.js +1 -0
  105. package/dist/assets/{logo-badge-Cu5UGH_4.js → logo-badge-BQ-XFZod.js} +1 -1
  106. package/dist/assets/map-Bdri5UL5.js +1 -0
  107. package/dist/assets/mcp-marketplace-page-BfA7A3n4.js +9 -0
  108. package/dist/assets/mcp-marketplace-page-CXHYO95j.js +1 -0
  109. package/dist/assets/mermaid-parser.core-Cue18vLo.js +4 -0
  110. package/dist/assets/mermaid.core-CXwWRh5i.js +11 -0
  111. package/dist/assets/mindmap-definition-LN4V7U3C-CFxz0P0-.js +96 -0
  112. package/dist/assets/{model-config-page-CWP6pyBm.js → model-config-page-BbWbW_qM.js} +1 -1
  113. package/dist/assets/ordinal-Cbd8t4LB.js +1 -0
  114. package/dist/assets/packet-7NZHBO7P-Rfopfa1o.js +1 -0
  115. package/dist/assets/path-DzBnMI1r.js +1 -0
  116. package/dist/assets/pegDiagram-2B236MQR-B_Qt9zyT.js +1 -0
  117. package/dist/assets/pie-RZYD4A2V-CJR1xKEv.js +1 -0
  118. package/dist/assets/pieDiagram-ENE6RG2P-CRQdSuwS.js +39 -0
  119. package/dist/assets/plus-TmFdwO3P.js +1 -0
  120. package/dist/assets/{popover-DImguRok.js → popover-CX9zFsuc.js} +1 -1
  121. package/dist/assets/preload-helper-D4M6sveU.js +1 -0
  122. package/dist/assets/{provider-scoped-model-input-CE7p4SbJ.js → provider-scoped-model-input-B-9_DtIP.js} +1 -1
  123. package/dist/assets/providers-config-page-xwIjGur2.js +1 -0
  124. package/dist/assets/quadrantDiagram-ABIIQ3AL-D5kPpttq.js +7 -0
  125. package/dist/assets/radar-I7S5WNFK-CDg8Z-1r.js +1 -0
  126. package/dist/assets/railroad-3IZDKUUU-BHnNmjxO.js +1 -0
  127. package/dist/assets/railroad-abnf-AHOZXSZD-DGtNcusW.js +1 -0
  128. package/dist/assets/railroad-ebnf-EBAXGLYW-BRFtsQmm.js +1 -0
  129. package/dist/assets/railroad-peg-LSFZ7HO6-Bj5IypCA.js +1 -0
  130. package/dist/assets/railroadDiagram-RFXS5EU6-DGh_TGlQ.js +1 -0
  131. package/dist/assets/{react-5sjAT_6d.js → react-DsgudwpT.js} +1 -1
  132. package/dist/assets/{refresh-cw-CHLBzWWj.js → refresh-cw-kXdvbhFf.js} +1 -1
  133. package/dist/assets/remote-B9F2uCk9.js +1 -0
  134. package/dist/assets/requirementDiagram-TGXJPOKE-EmFph0H_.js +84 -0
  135. package/dist/assets/rotate-cw-DEc6aihr.js +1 -0
  136. package/dist/assets/rough.esm-wJ1d3nQl.js +1 -0
  137. package/dist/assets/runtime-config-page-DTsi7czJ.js +1 -0
  138. package/dist/assets/sankeyDiagram-HTMAVEWB-BXWB5Ugi.js +40 -0
  139. package/dist/assets/{save-BABzyrjB.js → save-C9qpz2_2.js} +1 -1
  140. package/dist/assets/{search-BTqxG3ZG.js → search-_kEi29qo.js} +1 -1
  141. package/dist/assets/{search-config-page-BkKKmxmS.js → search-config-page-H7ug8f4D.js} +1 -1
  142. package/dist/assets/{secrets-config-page-CWJMyu-k.js → secrets-config-page-C1_6rINu.js} +2 -2
  143. package/dist/assets/security-config-Cr2ERKLu.js +1 -0
  144. package/dist/assets/{select-TYZDBNmq.js → select-MJKhKAWR.js} +1 -1
  145. package/dist/assets/sequenceDiagram-DBY2YBRQ-ClKnO7v0.js +162 -0
  146. package/dist/assets/{setting-row-DR23Z_5I.js → setting-row-DA3tJuew.js} +1 -1
  147. package/dist/assets/{settings-2-D8WWcBnw.js → settings-2-D_y7zXJz.js} +1 -1
  148. package/dist/assets/sizeCapture-X5ZJPWSS-DSo-t5ou.js +1 -0
  149. package/dist/assets/{skeleton-CloHeg0S.js → skeleton-0uTLUhm9.js} +1 -1
  150. package/dist/assets/src-Dad2ZbCt.js +1 -0
  151. package/dist/assets/stateDiagram-2N3HPSRC-BvAalBfz.js +1 -0
  152. package/dist/assets/stateDiagram-v2-6OUMAXLB-CfMU38yc.js +1 -0
  153. package/dist/assets/swimlanes-5IMT3BWC-DdVqVa1a.js +2 -0
  154. package/dist/assets/swimlanesDiagram-G3AALYLV-D9Zb9X57.js +8 -0
  155. package/dist/assets/{tabs-CX-ckWoo.js → tabs-h44XPocd.js} +1 -1
  156. package/dist/assets/{tag-chip-mCc23Rhb.js → tag-chip-bRZ04q3C.js} +1 -1
  157. package/dist/assets/timeline-definition-FHXFAJF6-D4ar8IQY.js +120 -0
  158. package/dist/assets/{trash-2-SAW1Z4Po.js → trash-2-BRpSE-Wt.js} +1 -1
  159. package/dist/assets/treeView-QDETBFTQ-Uy7M0WvH.js +1 -0
  160. package/dist/assets/treemap-6X3UGDF4-BJfGV7KX.js +1 -0
  161. package/dist/assets/use-config-CwDEAl6f.js +1 -0
  162. package/dist/assets/{use-confirm-dialog-C95F6sT1.js → use-confirm-dialog-BbnWw-8c.js} +1 -1
  163. package/dist/assets/{use-viewport-layout-C6m3Nte7.js → use-viewport-layout-CqgIMDQL.js} +1 -1
  164. package/dist/assets/vennDiagram-L72KCM5P-CDXJ_i3p.js +34 -0
  165. package/dist/assets/wardley-OPB4EBWU-q263iF3K.js +1 -0
  166. package/dist/assets/wardleyDiagram-EHGQE667-D-dSuT_7.js +78 -0
  167. package/dist/assets/x-DdEDL6ju.js +1 -0
  168. package/dist/assets/xychartDiagram-FW5EYKEG-C9JCzsZF.js +7 -0
  169. package/dist/index.html +33 -32
  170. package/package.json +8 -8
  171. package/src/features/chat/components/chat-popover-content.tsx +1 -26
  172. package/src/features/chat/components/conversation/__tests__/chat-conversation-header-section.test.tsx +84 -1
  173. package/src/features/chat/components/conversation/chat-conversation-header-section.tsx +13 -2
  174. package/src/features/chat/components/conversation/chat-conversation-workspace-section.tsx +1 -0
  175. package/src/features/chat/components/layout/__tests__/chat-sidebar-test.utils.ts +22 -0
  176. package/src/features/chat/components/layout/__tests__/chat-sidebar.test.tsx +13 -24
  177. package/src/features/chat/components/layout/chat-sidebar-desktop-layout.tsx +16 -4
  178. package/src/features/chat/components/layout/chat-sidebar.tsx +38 -2
  179. package/src/features/chat/features/conversation/components/__tests__/session-conversation-area.test.tsx +1 -0
  180. package/src/features/chat/features/conversation/components/__tests__/session-conversation-input.streaming.test.tsx +52 -2
  181. package/src/features/chat/features/conversation/components/session-conversation-area.tsx +22 -0
  182. package/src/features/chat/features/conversation/components/session-conversation-input.tsx +36 -20
  183. package/src/features/chat/features/conversation/hooks/__tests__/use-session-conversation-input-state.test.tsx +55 -0
  184. package/src/features/chat/features/conversation/hooks/use-session-conversation-input-state.ts +12 -11
  185. package/src/features/chat/features/conversation/hooks/use-session-conversation-preference-actions.ts +94 -0
  186. package/src/features/chat/features/input/hooks/__tests__/use-chat-input-surface-state.test.tsx +37 -0
  187. package/src/features/chat/features/input/hooks/use-chat-input-surface-state.ts +140 -63
  188. package/src/features/chat/features/input/input-surface-plugins/__tests__/context-reference-plugin.test.ts +175 -0
  189. package/src/features/chat/features/input/input-surface-plugins/__tests__/slash-command-plugin.test.ts +66 -0
  190. package/src/features/chat/features/input/input-surface-plugins/chat-input-product-plugin-adapters.types.ts +8 -1
  191. package/src/features/chat/features/input/input-surface-plugins/context-reference-plugin.utils.ts +274 -0
  192. package/src/features/chat/features/input/input-surface-plugins/slash-command-plugin.utils.ts +18 -11
  193. package/src/features/chat/features/input/utils/__tests__/chat-composer-state.utils.test.ts +26 -0
  194. package/src/features/chat/features/input/utils/__tests__/chat-inline-token.utils.test.ts +50 -4
  195. package/src/features/chat/features/input/utils/__tests__/chat-input-bar.utils.test.ts +51 -0
  196. package/src/features/chat/features/input/utils/chat-composer-state.utils.ts +4 -10
  197. package/src/features/chat/features/input/utils/chat-composer-token-protocol.utils.ts +29 -0
  198. package/src/features/chat/features/input/utils/chat-inline-token.utils.ts +66 -8
  199. package/src/features/chat/features/input/utils/chat-input-bar.utils.ts +62 -21
  200. package/src/features/chat/features/message/components/__tests__/chat-message-list.container.test.tsx +42 -10
  201. package/src/features/chat/features/message/components/chat-inline-file-preview.tsx +80 -0
  202. package/src/features/chat/features/message/components/chat-message-list.container.tsx +55 -60
  203. package/src/features/chat/features/message/utils/chat-message-texts.utils.ts +2 -0
  204. package/src/features/chat/features/ncp/hooks/__tests__/use-hydrated-ncp-agent.test.tsx +41 -3
  205. package/src/features/chat/features/project/components/__tests__/chat-project-create-dialog.test.tsx +67 -0
  206. package/src/features/chat/features/project/components/chat-project-create-dialog.tsx +203 -0
  207. package/src/features/chat/features/session/components/session-header/__tests__/chat-session-header-actions.test.tsx +7 -7
  208. package/src/features/chat/features/session/components/session-header/__tests__/chat-session-project-dialog.test.tsx +47 -0
  209. package/src/features/chat/features/session/components/session-header/chat-session-header-actions.tsx +6 -3
  210. package/src/features/chat/features/session/components/session-header/chat-session-project-badge.tsx +3 -0
  211. package/src/features/chat/features/session/components/session-header/chat-session-project-dialog.tsx +3 -0
  212. package/src/features/chat/features/session/components/session-header/chat-session-switcher-groups.tsx +245 -0
  213. package/src/features/chat/features/session/components/session-header/chat-session-title-switcher.tsx +81 -127
  214. package/src/features/chat/features/session/utils/__tests__/chat-sidebar-session-groups.utils.test.ts +22 -0
  215. package/src/features/chat/features/session/utils/chat-run-metadata.utils.ts +6 -6
  216. package/src/features/chat/features/session/utils/chat-sidebar-session-groups.utils.ts +12 -1
  217. package/src/features/chat/features/welcome/components/chat-conversation-welcome.tsx +3 -0
  218. package/src/features/chat/features/welcome/components/chat-welcome.tsx +1 -0
  219. package/src/features/chat/features/welcome/utils/__tests__/chat-welcome-project-options.utils.test.ts +20 -0
  220. package/src/features/chat/features/welcome/utils/chat-welcome-project-options.utils.ts +15 -2
  221. package/src/features/chat/features/workspace/components/__tests__/chat-session-workspace-file-preview.test.tsx +22 -24
  222. package/src/features/chat/features/workspace/components/__tests__/chat-session-workspace-panel.test.tsx +2 -1
  223. package/src/features/chat/features/workspace/components/chat-session-workspace-file-breadcrumbs.tsx +6 -17
  224. package/src/features/chat/features/workspace/components/chat-session-workspace-file-preview.tsx +41 -19
  225. package/src/features/chat/features/workspace/components/chat-session-workspace-panel-nav.tsx +5 -1
  226. package/src/features/chat/features/workspace/components/chat-session-workspace-panel.tsx +5 -1
  227. package/src/features/chat/features/workspace/utils/__tests__/chat-workspace-panel-view-model.utils.test.ts +104 -3
  228. package/src/features/chat/features/workspace/utils/chat-thread-workspace-session.utils.ts +83 -0
  229. package/src/features/chat/features/workspace/utils/chat-workspace-file-tab.utils.ts +4 -1
  230. package/src/features/chat/features/workspace/utils/chat-workspace-panel-view-model.utils.ts +96 -25
  231. package/src/features/chat/managers/__tests__/chat-thread-workspace.manager.test.ts +25 -0
  232. package/src/features/chat/managers/__tests__/chat-thread.manager.test.ts +5 -1
  233. package/src/features/chat/managers/chat-session-list.manager.ts +1 -0
  234. package/src/features/chat/managers/chat-thread.manager.ts +15 -37
  235. package/src/features/chat/pages/__tests__/ncp-chat-page.test.ts +23 -0
  236. package/src/features/chat/stores/__tests__/chat-thread.store.test.ts +9 -0
  237. package/src/features/chat/stores/chat-thread.store.ts +16 -36
  238. package/src/features/chat/types/chat-input-bar.types.ts +2 -0
  239. package/src/features/settings/components/config/provider-form.tsx +0 -4
  240. package/src/features/settings/utils/__tests__/provider-form-support.utils.test.ts +7 -9
  241. package/src/features/settings/utils/provider-form-model.utils.ts +0 -4
  242. package/src/features/system-status/hooks/use-current-version-release-notes-link.ts +33 -0
  243. package/src/features/system-status/index.ts +9 -0
  244. package/src/features/system-status/utils/update-release-notes.utils.ts +44 -3
  245. package/src/index.css +10 -16
  246. package/src/shared/components/common/__tests__/brand-header.test.tsx +127 -10
  247. package/src/shared/components/common/brand-header.tsx +142 -56
  248. package/src/shared/components/path-picker/__tests__/server-path-picker-dialog.test.tsx +288 -38
  249. package/src/shared/components/path-picker/server-path-picker-dialog.tsx +290 -199
  250. package/src/shared/components/path-picker/server-path-picker-directory-list.tsx +103 -0
  251. package/src/shared/components/path-picker/server-path-picker-footer.tsx +58 -0
  252. package/src/shared/components/path-picker/server-path-picker-locations.tsx +148 -0
  253. package/src/shared/components/path-picker/server-path-picker-navigation-bar.tsx +198 -0
  254. package/src/shared/components/path-picker/server-path-picker-new-folder.tsx +59 -0
  255. package/src/shared/components/path-picker/server-path-picker-toolbar.tsx +25 -0
  256. package/src/shared/hooks/use-projects.ts +28 -0
  257. package/src/shared/hooks/use-server-path-create-directory.ts +6 -0
  258. package/src/shared/hooks/use-server-path-read.ts +10 -5
  259. package/src/shared/hooks/use-server-path-search.ts +40 -0
  260. package/src/shared/lib/api/index.ts +1 -0
  261. package/src/shared/lib/api/projects/project.utils.ts +14 -0
  262. package/src/shared/lib/api/types.ts +30 -3
  263. package/src/shared/lib/api/utils/server-path.utils.ts +22 -1
  264. package/src/shared/lib/i18n/locales/en-US/chat.json +43 -2
  265. package/src/shared/lib/i18n/locales/en-US/core.json +2 -3
  266. package/src/shared/lib/i18n/locales/en-US/desktop-update.json +4 -0
  267. package/src/shared/lib/i18n/locales/en-US/path-picker.json +25 -0
  268. package/src/shared/lib/i18n/locales/zh-CN/chat.json +43 -2
  269. package/src/shared/lib/i18n/locales/zh-CN/core.json +2 -3
  270. package/src/shared/lib/i18n/locales/zh-CN/desktop-update.json +4 -0
  271. package/src/shared/lib/i18n/locales/zh-CN/path-picker.json +25 -0
  272. package/src/shared/lib/session-project/__tests__/workspace-file-breadcrumb.test.ts +1 -4
  273. package/src/shared/lib/session-project/workspace-file-breadcrumb.utils.ts +1 -18
  274. package/dist/assets/api-BOXOrpcJ.js +0 -13
  275. package/dist/assets/app-presenter-provider-CkHLbvZQ.js +0 -106
  276. package/dist/assets/desktop-update-config-7bmNeWIC.js +0 -1
  277. package/dist/assets/doc-browser-CgdoLUT92.js +0 -1
  278. package/dist/assets/index-BFeNDQ4R.css +0 -1
  279. package/dist/assets/index-D_6U-M94.js +0 -2
  280. package/dist/assets/loader-circle-tYHStefV.js +0 -1
  281. package/dist/assets/mcp-marketplace-page-BUzHDwW6.js +0 -9
  282. package/dist/assets/mcp-marketplace-page-ohUAdfqJ.js +0 -1
  283. package/dist/assets/plus-tywizkeY.js +0 -1
  284. package/dist/assets/providers-config-page-BKPo8SjH.js +0 -1
  285. package/dist/assets/remote-DXJryUxB.js +0 -1
  286. package/dist/assets/rotate-cw-BefO5brU.js +0 -1
  287. package/dist/assets/runtime-config-page-1Axv4QGu.js +0 -1
  288. package/dist/assets/security-config-DeQUIXfi.js +0 -1
  289. package/dist/assets/use-config-BucdaK23.js +0 -1
  290. package/dist/assets/x-DtCPHwCu.js +0 -1
  291. package/src/features/chat/components/__tests__/chat-popover-content.test.tsx +0 -41
  292. package/src/features/chat/components/layout/__tests__/chat-sidebar-utility-menu.test.tsx +0 -55
  293. package/src/features/chat/features/input/input-surface-plugins/__tests__/panel-app-reference-plugin.test.ts +0 -77
  294. package/src/features/chat/features/input/input-surface-plugins/panel-app-reference-plugin.utils.ts +0 -144
  295. /package/dist/assets/{config-hints-fDrYfl0l.js → config-hints-LxG80Uj5.js} +0 -0
  296. /package/dist/assets/{host-capabilities-zZvY9U63.js → host-capabilities-CFbAfrrA.js} +0 -0
  297. /package/dist/assets/{jszip.min-Das2IAnb.js → jszip.min-CP5uPNQa.js} +0 -0
  298. /package/dist/assets/{middleware-BLMHv9YF.js → middleware-CAXxl-af.js} +0 -0
  299. /package/dist/assets/{provider-models-C_yOh6DE.js → provider-models-BoUhFo9R.js} +0 -0
  300. /package/dist/assets/{xlsx-B6zVt1RK.js → xlsx-DUqJhg5u.js} +0 -0
@@ -1,6 +1,12 @@
1
1
  import { API_BASE } from '@/shared/lib/api/api-base';
2
2
  import { nextclawClient } from '@/shared/lib/api/managers/client.manager';
3
- import type { ServerPathBrowseView, ServerPathReadView } from '@/shared/lib/api/types';
3
+ import type {
4
+ ServerPathBrowseView,
5
+ ServerPathDirectoryCreateRequest,
6
+ ServerPathDirectoryCreateView,
7
+ ServerPathReadView,
8
+ ServerPathSearchView,
9
+ } from '@/shared/lib/api/types';
4
10
 
5
11
  const SERVER_PATH_CONTENT_BASE_PATH = '/api/server-paths/content';
6
12
 
@@ -12,13 +18,28 @@ export async function fetchServerPathBrowse(params?: {
12
18
  return await nextclawClient.serverPaths.browse(params);
13
19
  }
14
20
 
21
+ export async function createServerPathDirectory(
22
+ input: ServerPathDirectoryCreateRequest,
23
+ ): Promise<ServerPathDirectoryCreateView> {
24
+ return await nextclawClient.serverPaths.createDirectory(input);
25
+ }
26
+
15
27
  export async function fetchServerPathRead(params: {
16
28
  path: string;
17
29
  basePath?: string | null;
30
+ line?: number | null;
18
31
  }): Promise<ServerPathReadView> {
19
32
  return await nextclawClient.serverPaths.read(params);
20
33
  }
21
34
 
35
+ export async function fetchServerPathSearch(params: {
36
+ basePath: string;
37
+ query?: string | null;
38
+ limit?: number | null;
39
+ }): Promise<ServerPathSearchView> {
40
+ return await nextclawClient.serverPaths.search(params);
41
+ }
42
+
22
43
  export function buildServerPathContentUrl(path: string): string;
23
44
  export function buildServerPathContentUrl(
24
45
  path: string,
@@ -65,6 +65,7 @@
65
65
  "chatWorkspaceFileMoreActions": "File actions",
66
66
  "chatWorkspaceDiff": "Diff",
67
67
  "chatWorkspaceCloseFile": "Close file",
68
+ "chatWorkspaceCloseTab": "Close tab",
68
69
  "chatWorkspaceLoadingPreview": "Loading preview…",
69
70
  "chatWorkspaceLoadingFile": "Loading file…",
70
71
  "chatWorkspaceLoadingDirectory": "Loading directory…",
@@ -168,7 +169,7 @@
168
169
  "chatProcessSummaryCancelled": "cancelled",
169
170
  "chatRuntimeInitializing": "Chat is still initializing. You can keep typing and send once startup finishes.",
170
171
  "chatRuntimeInitializationFailed": "Chat startup failed. Please retry in a moment or inspect the service logs.",
171
- "chatInputPlaceholder": "Type a message, / for commands, apps or skills, @ for panel app references, Enter to send, Shift + Enter for newline",
172
+ "chatInputPlaceholder": "Type a message, / for commands, apps or skills, @ for files, folders or panel apps, Enter to send, Shift + Enter for newline",
172
173
  "chatInputPlaceholderCompact": "Message NextClaw...",
173
174
  "chatInputHint": "Multi-turn context is preserved in the current session.",
174
175
  "chatSlashSection": "Slash menu",
@@ -200,9 +201,31 @@
200
201
  "chatPanelAppReferenceAppId": "App ID",
201
202
  "chatPanelAppReferenceFile": "File",
202
203
  "chatPanelAppReferenceNoDescription": "No panel app description",
204
+ "chatContextReferenceLoading": "Searching references...",
205
+ "chatContextReferenceSection": "References",
206
+ "chatContextReferenceNoResult": "No matching files, folders, or panel apps",
207
+ "chatContextReferenceHint": "Type @ to reference a file, folder, or panel app",
208
+ "chatContextReferenceItemHint": "Press Enter to add this reference.",
209
+ "chatContextReferenceFilesLabel": "Files & Folders",
210
+ "chatContextReferenceFilesType": "Project Context",
211
+ "chatContextReferenceFilesDescription": "Search and reference files or folders in the current project.",
212
+ "chatContextReferenceFilesHint": "Press Enter to browse files and folders.",
213
+ "chatContextReferenceBack": "Back to all references",
214
+ "chatContextReferenceBackDescription": "Return to the unified file, folder, and panel app reference menu.",
215
+ "chatContextReferenceBackHint": "Press Enter to go back.",
216
+ "chatContextReferenceFileDescription": "Use this file as explicit context for the current message.",
217
+ "chatContextReferenceDirectoryDescription": "Use this folder as a context scope for the current message.",
218
+ "chatContextReferenceProjectRoot": "Project directory",
219
+ "chatContextReferenceWorkspaceSection": "Files & Folders",
220
+ "chatContextReferenceSearchFailed": "File search failed",
203
221
  "chatSkillScopeBuiltin": "Built-in",
222
+ "chatSkillScopeGlobal": "Global",
204
223
  "chatSkillScopeProject": "Project",
205
224
  "chatSkillScopeWorkspace": "Workspace",
225
+ "chatSkillGroupBuiltin": "Built-in skills",
226
+ "chatSkillGroupGlobal": "Global skills",
227
+ "chatSkillGroupProject": "Project skills",
228
+ "chatSkillGroupWorkspace": "NextClaw skills",
206
229
  "chatPickerRecent": "Recent",
207
230
  "chatPickerFavoriteModels": "Favorites",
208
231
  "chatPickerRecentModels": "Recent",
@@ -252,6 +275,22 @@
252
275
  "chatSessionProjectUpdateHint": "The browser lists directories from the server machine. Changing the project directory only affects future messages and tool runs. History stays unchanged.",
253
276
  "chatSessionProjectUpdated": "Project directory updated",
254
277
  "chatSessionProjectCleared": "Project directory cleared",
278
+ "chatProjectCreate": "New Project",
279
+ "chatProjectCreateTitle": "New Project",
280
+ "chatProjectCreateDescription": "Create an independent project that remains in the project list even before it has any sessions.",
281
+ "chatProjectNameLabel": "Project name",
282
+ "chatProjectNamePlaceholder": "For example: Personal knowledge base",
283
+ "chatProjectTemplateLabel": "Project template",
284
+ "chatProjectTemplateEmpty": "Empty project",
285
+ "chatProjectTemplateKnowledgeBase": "Knowledge base",
286
+ "chatProjectPathLabel": "Target directory (optional)",
287
+ "chatProjectPathPlaceholder": "/path/to/project",
288
+ "chatProjectPathHint": "Leave this blank to create a same-named folder under the default working directory, or enter a target directory on the server machine.",
289
+ "chatProjectPathPickerTitle": "Select Project Target Directory",
290
+ "chatProjectPathPickerDescription": "Browse directories on the server machine and select where the project contents will be stored.",
291
+ "chatProjectCreateAction": "Create project",
292
+ "chatProjectCreated": "Project created",
293
+ "chatProjectCreateFailed": "Failed to create project",
255
294
  "chatSessionErrorTitle": "Something went wrong",
256
295
  "chatSendFailed": "Failed to send message",
257
296
  "chatErrorDetails": "Details",
@@ -296,6 +335,8 @@
296
335
  "chatCodeCopied": "Copied",
297
336
  "chatMessageCopy": "Copy",
298
337
  "chatMessageCopied": "Copied",
338
+ "chatMermaidDiagram": "Diagram",
339
+ "chatMermaidRenderError": "Diagram could not be rendered; showing source instead",
299
340
  "chatSidebarNewTask": "New Task",
300
341
  "chatSidebarSearchPlaceholder": "Search conversations...",
301
342
  "chatSidebarScheduledTasks": "Scheduled Tasks",
@@ -314,7 +355,7 @@
314
355
  "chatSidebarUnpinProject": "Unpin project",
315
356
  "chatSidebarExpandProject": "Expand project",
316
357
  "chatSidebarCollapseProject": "Collapse project",
317
- "chatSidebarProjectViewEmpty": "No project conversations yet",
358
+ "chatSidebarProjectViewEmpty": "No projects yet",
318
359
  "chatWelcomeTitle": "Hello, how can I help you?",
319
360
  "chatWelcomeSubtitle": "Describe the goal, choose the project context, and let NextClaw take it from there.",
320
361
  "chatWelcomeProjectPickerLabel": "Choose working directory",
@@ -115,13 +115,13 @@
115
115
  "providerTestConnectionSuccess": "Connection test passed",
116
116
  "providerTestConnectionFailed": "Connection test failed",
117
117
  "providerModelsTitle": "Available Models",
118
- "providerModelInputPlaceholder": "Enter model id (without provider prefix; custom values allowed)",
118
+ "providerModelInputPlaceholder": "Enter provider-local model id (may contain /)",
119
119
  "providerModelInputHint": "The list is only a reference. You can type and add models that are not listed.",
120
120
  "providerAddModel": "Add Model",
121
121
  "providerModelsEmpty": "No models yet. Add one by typing model id.",
122
122
  "providerModelDefaultTag": "Default",
123
123
  "providerModelCustomTag": "Custom",
124
- "providerModelsHelp": "Built-in models are prefilled and can be added or removed here. Enter provider-local model ids without the current provider prefix; if prefixed input is entered, only the current provider prefix is removed while the remaining path is preserved (for example, openai/gpt-5).",
124
+ "providerModelsHelp": "Built-in models are prefilled and can be added or removed here. Enter provider-local model ids without the current provider route prefix. Nested ids such as vendor/model are valid; if the current provider prefix is included, only that outer prefix is removed.",
125
125
  "providerModelsEmptyShort": "No models available",
126
126
  "providerAddFirstModel": "Add first model",
127
127
  "providerModelVisionTitle": "Vision",
@@ -131,7 +131,6 @@
131
131
  "providerModelThinkingDefault": "Default Thinking Level",
132
132
  "providerModelThinkingDefaultNone": "No default (fallback off)",
133
133
  "providerModelThinkingNoSupported": "Select at least one supported level first.",
134
- "providerModelInvalidProviderPrefix": "Model id cannot use another provider prefix.",
135
134
  "providerDisplayNameHelpShort": "Helps distinguish multiple custom providers",
136
135
  "providerApiBaseHelpShort": "Usually just the domain; path auto-appended",
137
136
  "providerExtraHeadersHelpShort": "Optional, for custom auth etc.",
@@ -42,6 +42,10 @@
42
42
  "desktopUpdatesInlineDownloadingPercent": "{percent}%",
43
43
  "desktopUpdatesInlineReady": "Update",
44
44
  "desktopUpdatesInlineApplying": "Applying",
45
+ "desktopUpdatesVersionTooltipCurrent": "Current version {version}",
46
+ "desktopUpdatesVersionTooltipReleaseNotes": "Click to view {version} release notes",
47
+ "desktopUpdatesVersionReleaseNotesLabel": "Current version {currentVersion}, view {releaseVersion} release notes",
48
+ "desktopUpdatesUpdateReleaseNotesLabel": "View {version} release notes",
45
49
  "desktopUpdatesLauncherVersion": "Launcher Version",
46
50
  "desktopUpdatesCurrentBundleVersion": "Current Kernel Version",
47
51
  "desktopUpdatesAvailableVersion": "Available Version",
@@ -1,11 +1,36 @@
1
1
  {
2
2
  "browse": "Browse",
3
+ "pathPickerBack": "Back",
4
+ "pathPickerForward": "Forward",
5
+ "pathPickerAddressLabel": "Address",
6
+ "pathPickerEditAddress": "Edit address",
7
+ "pathPickerShowFullAddress": "Show full address",
3
8
  "openPath": "Open",
4
9
  "homeDirectory": "Home",
5
10
  "currentDirectory": "Current Directory",
6
11
  "parentDirectory": "Up",
12
+ "pathPickerQuickAccess": "Quick access",
13
+ "pathPickerDefaultWorkspace": "NextClaw Workspace",
14
+ "pathPickerFileSystem": "File system",
15
+ "pathPickerDesktop": "Desktop",
16
+ "pathPickerDocuments": "Documents",
17
+ "pathPickerDownloads": "Downloads",
18
+ "pathPickerICloudDrive": "iCloud Drive",
19
+ "pathPickerApplications": "Applications",
20
+ "pathPickerVolumes": "Volumes",
21
+ "pathPickerLocations": "Locations",
7
22
  "pathPickerSearchPlaceholder": "Search current directory",
8
23
  "pathPickerSearchEmpty": "No matching entries in the current directory.",
24
+ "pathPickerNewFolder": "New Folder",
25
+ "pathPickerNewFolderName": "Folder name",
26
+ "pathPickerNewFolderPlaceholder": "Enter a folder name",
27
+ "pathPickerCreateFolder": "Create",
28
+ "pathPickerCreateFolderFailed": "Failed to create folder",
29
+ "pathPickerDirectoryList": "Directory list",
30
+ "pathPickerNameColumn": "Name",
31
+ "pathPickerTypeColumn": "Type",
32
+ "pathPickerDirectoryType": "Folder",
33
+ "pathPickerDoubleClickHint": "Click to select · Double-click to open",
9
34
  "selectCurrentDirectory": "Select Current Directory",
10
35
  "emptyDirectory": "No entries in the current directory.",
11
36
  "pathBrowseFailed": "Failed to load directory"
@@ -65,6 +65,7 @@
65
65
  "chatWorkspaceFileMoreActions": "文件操作",
66
66
  "chatWorkspaceDiff": "Diff",
67
67
  "chatWorkspaceCloseFile": "关闭文件",
68
+ "chatWorkspaceCloseTab": "关闭标签页",
68
69
  "chatWorkspaceLoadingPreview": "正在加载预览…",
69
70
  "chatWorkspaceLoadingFile": "正在加载文件…",
70
71
  "chatWorkspaceLoadingDirectory": "正在加载目录…",
@@ -168,7 +169,7 @@
168
169
  "chatProcessSummaryCancelled": "已取消",
169
170
  "chatRuntimeInitializing": "聊天能力正在初始化。你可以先输入内容,完成后即可发送。",
170
171
  "chatRuntimeInitializationFailed": "聊天能力启动失败,请稍后重试或检查服务日志。",
171
- "chatInputPlaceholder": "输入消息,/ 选命令、应用或技能,@ 引用面板应用,Enter 发送,Shift + Enter 换行",
172
+ "chatInputPlaceholder": "输入消息,/ 选命令、应用或技能,@ 引用文件、目录或面板应用,Enter 发送,Shift + Enter 换行",
172
173
  "chatInputPlaceholderCompact": "发消息...",
173
174
  "chatInputHint": "支持多轮上下文,默认走当前会话。",
174
175
  "chatSlashSection": "斜杠菜单",
@@ -200,9 +201,31 @@
200
201
  "chatPanelAppReferenceAppId": "应用 ID",
201
202
  "chatPanelAppReferenceFile": "文件",
202
203
  "chatPanelAppReferenceNoDescription": "暂无面板应用描述",
204
+ "chatContextReferenceLoading": "搜索引用中…",
205
+ "chatContextReferenceSection": "引用",
206
+ "chatContextReferenceNoResult": "没有匹配的文件、目录或面板应用",
207
+ "chatContextReferenceHint": "输入 @ 引用文件、目录或面板应用",
208
+ "chatContextReferenceItemHint": "回车添加这个引用。",
209
+ "chatContextReferenceFilesLabel": "文件与文件夹",
210
+ "chatContextReferenceFilesType": "项目上下文",
211
+ "chatContextReferenceFilesDescription": "搜索并引用当前项目中的文件或目录。",
212
+ "chatContextReferenceFilesHint": "回车进入文件与文件夹。",
213
+ "chatContextReferenceBack": "返回全部引用",
214
+ "chatContextReferenceBackDescription": "返回文件、目录和面板应用的统一引用入口。",
215
+ "chatContextReferenceBackHint": "回车返回。",
216
+ "chatContextReferenceFileDescription": "把这个文件作为本次消息的显式上下文。",
217
+ "chatContextReferenceDirectoryDescription": "把这个目录作为本次消息的上下文范围。",
218
+ "chatContextReferenceProjectRoot": "项目目录",
219
+ "chatContextReferenceWorkspaceSection": "文件与文件夹",
220
+ "chatContextReferenceSearchFailed": "文件搜索失败",
203
221
  "chatSkillScopeBuiltin": "内建",
222
+ "chatSkillScopeGlobal": "全局",
204
223
  "chatSkillScopeProject": "项目",
205
224
  "chatSkillScopeWorkspace": "工作区",
225
+ "chatSkillGroupBuiltin": "内建技能",
226
+ "chatSkillGroupGlobal": "全局技能",
227
+ "chatSkillGroupProject": "项目技能",
228
+ "chatSkillGroupWorkspace": "NextClaw 技能",
206
229
  "chatPickerRecent": "最近使用",
207
230
  "chatPickerFavoriteModels": "收藏模型",
208
231
  "chatPickerRecentModels": "最近选择",
@@ -252,6 +275,22 @@
252
275
  "chatSessionProjectUpdateHint": "这里浏览和选择的是服务端机器上的目录。修改项目目录只影响后续消息和后续工具执行,不会改写历史会话。",
253
276
  "chatSessionProjectUpdated": "项目目录已更新",
254
277
  "chatSessionProjectCleared": "项目目录已清除",
278
+ "chatProjectCreate": "新建项目",
279
+ "chatProjectCreateTitle": "新建项目",
280
+ "chatProjectCreateDescription": "创建一个独立项目。即使还没有会话,项目也会保留在项目列表中。",
281
+ "chatProjectNameLabel": "项目名称",
282
+ "chatProjectNamePlaceholder": "例如:个人知识库",
283
+ "chatProjectTemplateLabel": "项目模板",
284
+ "chatProjectTemplateEmpty": "空项目",
285
+ "chatProjectTemplateKnowledgeBase": "知识库",
286
+ "chatProjectPathLabel": "目标目录(可选)",
287
+ "chatProjectPathPlaceholder": "/path/to/project",
288
+ "chatProjectPathHint": "留空时,将在默认工作目录下创建与项目同名的文件夹;也可以填写服务端机器上的目标目录。",
289
+ "chatProjectPathPickerTitle": "选择项目目标目录",
290
+ "chatProjectPathPickerDescription": "浏览服务端机器上的目录,并选择项目内容保存的位置。",
291
+ "chatProjectCreateAction": "创建项目",
292
+ "chatProjectCreated": "项目已创建",
293
+ "chatProjectCreateFailed": "创建项目失败",
255
294
  "chatSessionErrorTitle": "出错了",
256
295
  "chatSendFailed": "发送消息失败",
257
296
  "chatErrorDetails": "查看详情",
@@ -296,6 +335,8 @@
296
335
  "chatCodeCopied": "已复制",
297
336
  "chatMessageCopy": "复制",
298
337
  "chatMessageCopied": "已复制",
338
+ "chatMermaidDiagram": "图表",
339
+ "chatMermaidRenderError": "图表无法渲染,已显示源代码",
299
340
  "chatSidebarNewTask": "新任务",
300
341
  "chatSidebarSearchPlaceholder": "搜索对话...",
301
342
  "chatSidebarScheduledTasks": "定时任务",
@@ -314,7 +355,7 @@
314
355
  "chatSidebarUnpinProject": "取消置顶项目",
315
356
  "chatSidebarExpandProject": "展开项目",
316
357
  "chatSidebarCollapseProject": "收起项目",
317
- "chatSidebarProjectViewEmpty": "还没有绑定项目的会话",
358
+ "chatSidebarProjectViewEmpty": "还没有项目",
318
359
  "chatWelcomeTitle": "你好,有什么可以帮你的吗?",
319
360
  "chatWelcomeSubtitle": "描述目标,选择项目上下文,让 NextClaw 接住这次任务。",
320
361
  "chatWelcomeProjectPickerLabel": "选择工作目录",
@@ -115,13 +115,13 @@
115
115
  "providerTestConnectionSuccess": "连接测试通过",
116
116
  "providerTestConnectionFailed": "连接测试失败",
117
117
  "providerModelsTitle": "可用模型列表",
118
- "providerModelInputPlaceholder": "输入模型 ID(无需 provider 前缀,不在列表也可)",
118
+ "providerModelInputPlaceholder": "输入 provider 本地模型 ID(可包含 /)",
119
119
  "providerModelInputHint": "列表仅作参考,不在列表也可直接输入并添加。",
120
120
  "providerAddModel": "添加模型",
121
121
  "providerModelsEmpty": "当前没有模型,可直接输入并添加。",
122
122
  "providerModelDefaultTag": "默认",
123
123
  "providerModelCustomTag": "自定义",
124
- "providerModelsHelp": "系统会先填充预置模型;你可以在这里新增或删除。请填写当前提供商自己的模型 ID(不带当前 provider 前缀);若输入带当前 provider 前缀会自动去除,但会保留后续路径(如 openai/gpt-5)。",
124
+ "providerModelsHelp": "系统会先填充预置模型;你可以在这里新增或删除。请填写不带当前 provider 路由前缀的本地模型 ID;vendor/model 这类多段 ID 合法。若输入包含当前 provider 前缀,只会去掉最外层前缀。",
125
125
  "providerModelsEmptyShort": "暂无可用模型",
126
126
  "providerAddFirstModel": "添加第一个模型",
127
127
  "providerModelVisionTitle": "Vision",
@@ -131,7 +131,6 @@
131
131
  "providerModelThinkingDefault": "默认思考档位",
132
132
  "providerModelThinkingDefaultNone": "无默认(回落 off)",
133
133
  "providerModelThinkingNoSupported": "请先至少选择一个支持档位。",
134
- "providerModelInvalidProviderPrefix": "模型 ID 不能使用其他 provider 前缀。",
135
134
  "providerDisplayNameHelpShort": "便于区分多个自定义提供商",
136
135
  "providerApiBaseHelpShort": "一般只需填写域名,系统自动补全路径",
137
136
  "providerExtraHeadersHelpShort": "可选,用于自定义鉴权等场景",
@@ -42,6 +42,10 @@
42
42
  "desktopUpdatesInlineDownloadingPercent": "下载 {percent}%",
43
43
  "desktopUpdatesInlineReady": "更新",
44
44
  "desktopUpdatesInlineApplying": "应用中",
45
+ "desktopUpdatesVersionTooltipCurrent": "当前版本 {version}",
46
+ "desktopUpdatesVersionTooltipReleaseNotes": "点击查看 {version} 更新说明",
47
+ "desktopUpdatesVersionReleaseNotesLabel": "当前版本 {currentVersion},查看 {releaseVersion} 更新说明",
48
+ "desktopUpdatesUpdateReleaseNotesLabel": "查看 {version} 更新说明",
45
49
  "desktopUpdatesLauncherVersion": "桌面壳版本",
46
50
  "desktopUpdatesCurrentBundleVersion": "当前内核版本",
47
51
  "desktopUpdatesAvailableVersion": "可用版本",
@@ -1,11 +1,36 @@
1
1
  {
2
2
  "browse": "浏览",
3
+ "pathPickerBack": "后退",
4
+ "pathPickerForward": "前进",
5
+ "pathPickerAddressLabel": "地址",
6
+ "pathPickerEditAddress": "编辑地址",
7
+ "pathPickerShowFullAddress": "显示完整地址",
3
8
  "openPath": "打开",
4
9
  "homeDirectory": "主目录",
5
10
  "currentDirectory": "当前目录",
6
11
  "parentDirectory": "上一级",
12
+ "pathPickerQuickAccess": "常用位置",
13
+ "pathPickerDefaultWorkspace": "NextClaw 工作区",
14
+ "pathPickerFileSystem": "文件系统",
15
+ "pathPickerDesktop": "桌面",
16
+ "pathPickerDocuments": "文稿",
17
+ "pathPickerDownloads": "下载",
18
+ "pathPickerICloudDrive": "iCloud 云盘",
19
+ "pathPickerApplications": "应用程序",
20
+ "pathPickerVolumes": "磁盘与卷",
21
+ "pathPickerLocations": "位置",
7
22
  "pathPickerSearchPlaceholder": "搜索当前目录",
8
23
  "pathPickerSearchEmpty": "当前目录下没有匹配结果。",
24
+ "pathPickerNewFolder": "新建文件夹",
25
+ "pathPickerNewFolderName": "文件夹名称",
26
+ "pathPickerNewFolderPlaceholder": "输入文件夹名称",
27
+ "pathPickerCreateFolder": "创建",
28
+ "pathPickerCreateFolderFailed": "创建文件夹失败",
29
+ "pathPickerDirectoryList": "目录列表",
30
+ "pathPickerNameColumn": "名称",
31
+ "pathPickerTypeColumn": "类型",
32
+ "pathPickerDirectoryType": "文件夹",
33
+ "pathPickerDoubleClickHint": "单击选择,双击进入",
9
34
  "selectCurrentDirectory": "选择当前目录",
10
35
  "emptyDirectory": "当前目录下暂无可浏览项。",
11
36
  "pathBrowseFailed": "读取目录失败"
@@ -80,16 +80,13 @@ describe("buildWorkspaceFileBreadcrumb", () => {
80
80
  ]);
81
81
  });
82
82
 
83
- it("attaches line metadata for the workspace breadcrumb bar", () => {
83
+ it("keeps truncation status separate from path segments", () => {
84
84
  const breadcrumb = buildWorkspaceFileBreadcrumb({
85
85
  path: "README.md",
86
86
  sessionProjectRoot: "/Users/demo/project-alpha",
87
- line: 12,
88
- column: 4,
89
87
  truncated: true,
90
88
  });
91
89
 
92
- expect(breadcrumb.locationLabel).toBe("L12:4");
93
90
  expect(breadcrumb.truncated).toBe(true);
94
91
  expect(breadcrumb.segments[0]?.label).toBe("project-alpha");
95
92
  expect(breadcrumb.segments[1]?.label).toBe("README.md");
@@ -11,7 +11,6 @@ export type WorkspaceFileBreadcrumbSegmentViewModel = {
11
11
 
12
12
  export type WorkspaceFileBreadcrumbViewModel = {
13
13
  fullPath: string;
14
- locationLabel: string | null;
15
14
  truncated: boolean;
16
15
  segments: WorkspaceFileBreadcrumbSegmentViewModel[];
17
16
  };
@@ -153,28 +152,13 @@ function buildSegmentsFromLabels(params: {
153
152
  return leading ? [leading, ...items] : items;
154
153
  }
155
154
 
156
- function buildLocationLabel(params: {
157
- line?: number | null;
158
- column?: number | null;
159
- }): string | null {
160
- const { column, line } = params;
161
-
162
- if (typeof line !== "number") {
163
- return null;
164
- }
165
-
166
- return `L${line}${typeof column === "number" ? `:${column}` : ""}`;
167
- }
168
-
169
155
  export function buildWorkspaceFileBreadcrumb(params: {
170
156
  path: string;
171
157
  kind?: "file" | "directory";
172
158
  sessionProjectRoot: string | null;
173
- line?: number | null;
174
- column?: number | null;
175
159
  truncated: boolean;
176
160
  }): WorkspaceFileBreadcrumbViewModel {
177
- const { column, kind = "file", line, path, sessionProjectRoot, truncated } = params;
161
+ const { kind = "file", path, sessionProjectRoot, truncated } = params;
178
162
  const fullPath = path.trim();
179
163
  const relativeSegments =
180
164
  sessionProjectRoot?.trim() && fullPath
@@ -239,7 +223,6 @@ export function buildWorkspaceFileBreadcrumb(params: {
239
223
 
240
224
  return {
241
225
  fullPath,
242
- locationLabel: buildLocationLabel({ line, column }),
243
226
  truncated,
244
227
  segments,
245
228
  };