@jetcrab/pi-desk 1.1.12 → 1.1.16-dev

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 (340) hide show
  1. package/docs/plugins.md +21 -1
  2. package/package.json +2 -2
  3. package/src/app/api/model-settings/preview/route.ts +1 -0
  4. package/src/app/api/work-sessions/rename/route.ts +1 -0
  5. package/src/client/l2_biz/auth/l2-login.tsx +1 -1
  6. package/src/client/l2_biz/plugin-host/l2-plugin-session-sidebar-tab.tsx +6 -2
  7. package/src/client/l2_biz/settings/hooks/l2-use-model-provider-settings.ts +54 -10
  8. package/src/client/l2_biz/settings/hooks/l2-use-model-settings.ts +37 -9
  9. package/src/client/l2_biz/settings/l2-auth-settings.tsx +1 -1
  10. package/src/client/l2_biz/settings/l2-model-settings-biz.ts +26 -12
  11. package/src/client/l2_biz/settings/views/l2-appearance-settings.tsx +1 -16
  12. package/src/client/l2_biz/settings/views/l2-model-provider-settings.tsx +3 -2
  13. package/src/client/l2_biz/settings/views/l2-model-replacement-preview.tsx +34 -0
  14. package/src/client/l2_biz/task-center/l2-task-center.tsx +4 -30
  15. package/src/client/l2_biz/workbench/file-workspace/l2-plugin-standalone-file-preview.tsx +45 -7
  16. package/src/client/l2_biz/workbench/hooks/l2-work-session-rename.ts +57 -0
  17. package/src/client/l2_biz/workbench/l2-work-session-columns.tsx +0 -11
  18. package/src/client/l2_biz/workbench/l2-work-session-sidebar.tsx +107 -6
  19. package/src/client/l2_biz/workbench/l2-workbench-biz.ts +5 -0
  20. package/src/client/l2_biz/workbench/l2-workbench-chat-composer.tsx +333 -350
  21. package/src/client/l2_biz/workbench/l2-workbench.tsx +46 -1
  22. package/src/client/l2_biz/workbench/views/l2-work-session-rename-dialog.tsx +88 -0
  23. package/src/client/l3_modules/project-files/l3-markdown-preview.module.css +81 -0
  24. package/src/client/l3_modules/project-files/l3-markdown-preview.tsx +52 -0
  25. package/src/client/l3_modules/project-files/l3-project-document-view.tsx +26 -8
  26. package/src/client/l3_modules/project-files/l3-project-file-runtime.ts +16 -1
  27. package/src/client/l3_modules/project-files/l3-project-text-preview.ts +5 -0
  28. package/src/client/l3_modules/work-session-visual/l3-work-session-visual-effects.module.css +0 -36
  29. package/src/client/l3_modules/work-session-visual/l3-work-session-visual-view.tsx +0 -5
  30. package/src/client/l4_foundation/plugin-host/l4-plugin-host-runtime.ts +71 -1
  31. package/src/client/l4_foundation/styles/l4-globals.css +0 -19
  32. package/src/client/l4_foundation/ui/code/l4-code-preview.tsx +2 -1
  33. package/src/client/l4_foundation/ui/l4-confirm-dialog.tsx +9 -1
  34. package/src/common/l2_biz/auth/l2-auth-contract.ts +2 -2
  35. package/src/common/l2_biz/auth/l2-auth-messages.ts +2 -2
  36. package/src/common/l2_biz/model-settings/l2-model-settings-contract.ts +23 -1
  37. package/src/common/l2_biz/settings/l2-settings-messages.ts +8 -6
  38. package/src/common/l2_biz/work-session/l2-work-session-contract.ts +9 -0
  39. package/src/common/l2_biz/workbench/l2-workbench-locale-messages.ts +6 -0
  40. package/src/common/l3_modules/project-files/l3-project-files-locale-messages.ts +4 -0
  41. package/src/common/l4_foundation/locale/l4-host-error-messages.ts +6 -0
  42. package/src/server/l1_entry/api/l1-model-settings-preview-route.ts +32 -0
  43. package/src/server/l1_entry/api/l1-work-session-rename-route.ts +52 -0
  44. package/src/server/l2_biz/model-settings/l2-model-settings.ts +9 -0
  45. package/src/server/l2_biz/plugin-management/l2-plugin-management.ts +159 -52
  46. package/src/server/l2_biz/work-session/l2-work-session-chat-runtime.ts +5 -0
  47. package/src/server/l2_biz/work-session/l2-work-session-manage.ts +13 -0
  48. package/src/server/l3_modules/work-session/l3-work-session.ts +4 -0
  49. package/src/server/l4_foundation/model-settings/l4-model-settings-store.ts +161 -38
  50. package/src/server/l4_foundation/model-settings/l4-model-settings-types.ts +11 -0
  51. package/src/server/l4_foundation/model-settings/l4-model-settings.ts +1 -0
  52. package/src/server/l4_foundation/pi/l4-pi-chat-worker.ts +12 -1
  53. package/src/server/l4_foundation/pi/l4-pi-package-maintenance-runner.mts +56 -65
  54. package/src/server/l4_foundation/pi/l4-pi-package-maintenance.ts +2 -0
  55. package/src/server/l4_foundation/pi/l4-pi-package-reinstall-runner.mts +49 -0
  56. package/src/server/l4_foundation/pi/l4-pi-package-root-consistency.ts +6 -2
  57. package/src/server/l4_foundation/pi/l4-pi-plugin-probe.ts +3 -1
  58. package/src/server/l4_foundation/pi/l4-pi-runner-process.ts +9 -0
  59. package/src/server/l4_foundation/pi/l4-pi-work-session-runtime.ts +5 -0
  60. package/temp/build/pi-desk/release/.next/BUILD_ID +1 -1
  61. package/temp/build/pi-desk/release/.next/app-path-routes-manifest.json +2 -0
  62. package/temp/build/pi-desk/release/.next/build-manifest.json +3 -3
  63. package/temp/build/pi-desk/release/.next/prerender-manifest.json +3 -3
  64. package/temp/build/pi-desk/release/.next/react-loadable-manifest.json +1 -2
  65. package/temp/build/pi-desk/release/.next/required-server-files.js +3 -3
  66. package/temp/build/pi-desk/release/.next/required-server-files.json +3 -3
  67. package/temp/build/pi-desk/release/.next/routes-manifest.json +12 -0
  68. package/temp/build/pi-desk/release/.next/server/app/_global-error/page.js +1 -1
  69. package/temp/build/pi-desk/release/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  70. package/temp/build/pi-desk/release/.next/server/app/_global-error.html +1 -1
  71. package/temp/build/pi-desk/release/.next/server/app/_global-error.rsc +1 -1
  72. package/temp/build/pi-desk/release/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  73. package/temp/build/pi-desk/release/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  74. package/temp/build/pi-desk/release/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  75. package/temp/build/pi-desk/release/.next/server/app/_not-found/page.js +1 -1
  76. package/temp/build/pi-desk/release/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  77. package/temp/build/pi-desk/release/.next/server/app/api/auth/login/route.js +2 -2
  78. package/temp/build/pi-desk/release/.next/server/app/api/auth/logout/route.js +1 -1
  79. package/temp/build/pi-desk/release/.next/server/app/api/auth-settings/get/route.js +1 -1
  80. package/temp/build/pi-desk/release/.next/server/app/api/auth-settings/replace/route.js +1 -1
  81. package/temp/build/pi-desk/release/.next/server/app/api/capability-modes/get/route.js +1 -1
  82. package/temp/build/pi-desk/release/.next/server/app/api/capability-modes/replace/route.js +1 -1
  83. package/temp/build/pi-desk/release/.next/server/app/api/chat/context/get/route.js +1 -1
  84. package/temp/build/pi-desk/release/.next/server/app/api/chat/images/get/route.js +1 -1
  85. package/temp/build/pi-desk/release/.next/server/app/api/chat/messages/get/route.js +1 -1
  86. package/temp/build/pi-desk/release/.next/server/app/api/health/route.js +1 -1
  87. package/temp/build/pi-desk/release/.next/server/app/api/mcp-check/get/route.js +1 -1
  88. package/temp/build/pi-desk/release/.next/server/app/api/mcp-settings/del/route.js +1 -1
  89. package/temp/build/pi-desk/release/.next/server/app/api/mcp-settings/get/route.js +1 -1
  90. package/temp/build/pi-desk/release/.next/server/app/api/mcp-settings/replace/route.js +1 -1
  91. package/temp/build/pi-desk/release/.next/server/app/api/model-catalog/list/route.js +1 -1
  92. package/temp/build/pi-desk/release/.next/server/app/api/model-settings/get/route.js +1 -1
  93. package/temp/build/pi-desk/release/.next/server/app/api/model-settings/preview/route.js +1 -0
  94. package/temp/build/pi-desk/release/.next/server/app/api/model-settings/preview/route_client-reference-manifest.js +1 -0
  95. package/temp/build/pi-desk/release/.next/server/app/api/model-settings/replace/route.js +1 -1
  96. package/temp/build/pi-desk/release/.next/server/app/api/pi/directories/list/route.js +1 -1
  97. package/temp/build/pi-desk/release/.next/server/app/api/pi/directory-entries/list/route.js +1 -1
  98. package/temp/build/pi-desk/release/.next/server/app/api/pi/directory-ignores/list/route.js +1 -1
  99. package/temp/build/pi-desk/release/.next/server/app/api/pi/directory-ignores/replace/route.js +1 -1
  100. package/temp/build/pi-desk/release/.next/server/app/api/pi/models/list/route.js +1 -1
  101. package/temp/build/pi-desk/release/.next/server/app/api/pi/session-user-messages/list/route.js +1 -1
  102. package/temp/build/pi-desk/release/.next/server/app/api/pi/sessions/list/route.js +1 -1
  103. package/temp/build/pi-desk/release/.next/server/app/api/plugin-catalog/get/route.js +1 -1
  104. package/temp/build/pi-desk/release/.next/server/app/api/plugin-catalog/search/route.js +1 -1
  105. package/temp/build/pi-desk/release/.next/server/app/api/plugin-catalog/settings-get/route.js +1 -1
  106. package/temp/build/pi-desk/release/.next/server/app/api/plugin-catalog/settings-replace/route.js +1 -1
  107. package/temp/build/pi-desk/release/.next/server/app/api/plugins/add/route.js +1 -1
  108. package/temp/build/pi-desk/release/.next/server/app/api/plugins/apply/route.js +1 -1
  109. package/temp/build/pi-desk/release/.next/server/app/api/plugins/batch/route.js +1 -1
  110. package/temp/build/pi-desk/release/.next/server/app/api/plugins/browser-resources/[resourceGroup]/[...resourcePath]/route.js +1 -1
  111. package/temp/build/pi-desk/release/.next/server/app/api/plugins/del/route.js +1 -1
  112. package/temp/build/pi-desk/release/.next/server/app/api/plugins/enabled-set/route.js +1 -1
  113. package/temp/build/pi-desk/release/.next/server/app/api/plugins/get/route.js +1 -1
  114. package/temp/build/pi-desk/release/.next/server/app/api/plugins/host-runtime/[runtimeVersion]/[...resourcePath]/route.js +1 -1
  115. package/temp/build/pi-desk/release/.next/server/app/api/plugins/list/route.js +1 -1
  116. package/temp/build/pi-desk/release/.next/server/app/api/plugins/reload/route.js +1 -1
  117. package/temp/build/pi-desk/release/.next/server/app/api/plugins/update/route.js +1 -1
  118. package/temp/build/pi-desk/release/.next/server/app/api/project-files/get/route.js +1 -1
  119. package/temp/build/pi-desk/release/.next/server/app/api/project-files/list/route.js +1 -1
  120. package/temp/build/pi-desk/release/.next/server/app/api/project-files/reveal/route.js +1 -1
  121. package/temp/build/pi-desk/release/.next/server/app/api/project-files/search/route.js +1 -1
  122. package/temp/build/pi-desk/release/.next/server/app/api/project-git/get/route.js +1 -1
  123. package/temp/build/pi-desk/release/.next/server/app/api/project-git-branches/list/route.js +1 -1
  124. package/temp/build/pi-desk/release/.next/server/app/api/project-git-changes/list/route.js +1 -1
  125. package/temp/build/pi-desk/release/.next/server/app/api/project-git-diff/get/route.js +1 -1
  126. package/temp/build/pi-desk/release/.next/server/app/api/project-git-heads/get/route.js +1 -1
  127. package/temp/build/pi-desk/release/.next/server/app/api/project-git-log/list/route.js +1 -1
  128. package/temp/build/pi-desk/release/.next/server/app/api/project-model-default/get/route.js +1 -1
  129. package/temp/build/pi-desk/release/.next/server/app/api/project-model-default/replace/route.js +1 -1
  130. package/temp/build/pi-desk/release/.next/server/app/api/skill-files/get/route.js +1 -1
  131. package/temp/build/pi-desk/release/.next/server/app/api/skill-files/list/route.js +1 -1
  132. package/temp/build/pi-desk/release/.next/server/app/api/skill-files/replace/route.js +1 -1
  133. package/temp/build/pi-desk/release/.next/server/app/api/skills/list/route.js +1 -1
  134. package/temp/build/pi-desk/release/.next/server/app/api/task-center/images/get/route.js +1 -1
  135. package/temp/build/pi-desk/release/.next/server/app/api/task-center/messages/get/route.js +1 -1
  136. package/temp/build/pi-desk/release/.next/server/app/api/work-session-git-branch/add/route.js +1 -1
  137. package/temp/build/pi-desk/release/.next/server/app/api/work-session-git-branch/replace/route.js +1 -1
  138. package/temp/build/pi-desk/release/.next/server/app/api/work-session-tree/get/route.js +1 -1
  139. package/temp/build/pi-desk/release/.next/server/app/api/work-session-tree-entry/get/route.js +1 -1
  140. package/temp/build/pi-desk/release/.next/server/app/api/work-sessions/add/route.js +1 -1
  141. package/temp/build/pi-desk/release/.next/server/app/api/work-sessions/branch/route.js +1 -1
  142. package/temp/build/pi-desk/release/.next/server/app/api/work-sessions/del/route.js +1 -1
  143. package/temp/build/pi-desk/release/.next/server/app/api/work-sessions/rename/route.js +1 -0
  144. package/temp/build/pi-desk/release/.next/server/app/api/work-sessions/rename/route_client-reference-manifest.js +1 -0
  145. package/temp/build/pi-desk/release/.next/server/app/api/work-sessions/replace/route.js +1 -1
  146. package/temp/build/pi-desk/release/.next/server/app/api/work-sessions/sort/route.js +1 -1
  147. package/temp/build/pi-desk/release/.next/server/app/favicon.ico/route.js +1 -1
  148. package/temp/build/pi-desk/release/.next/server/app/login/page.js +1 -1
  149. package/temp/build/pi-desk/release/.next/server/app/login/page_client-reference-manifest.js +1 -1
  150. package/temp/build/pi-desk/release/.next/server/app/page.js +72 -306
  151. package/temp/build/pi-desk/release/.next/server/app/page_client-reference-manifest.js +1 -1
  152. package/temp/build/pi-desk/release/.next/server/app-paths-manifest.json +2 -0
  153. package/temp/build/pi-desk/release/.next/server/chunks/23054.js +1 -1
  154. package/temp/build/pi-desk/release/.next/server/chunks/25406.js +8 -8
  155. package/temp/build/pi-desk/release/.next/server/chunks/33658.js +296 -0
  156. package/temp/build/pi-desk/release/.next/server/chunks/35985.js +5 -5
  157. package/temp/build/pi-desk/release/.next/server/chunks/48180.js +1 -1
  158. package/temp/build/pi-desk/release/.next/server/chunks/49900.js +2 -2
  159. package/temp/build/pi-desk/release/.next/server/chunks/50520.js +5 -5
  160. package/temp/build/pi-desk/release/.next/server/chunks/6917.js +1 -1
  161. package/temp/build/pi-desk/release/.next/server/chunks/78262.js +3 -3
  162. package/temp/build/pi-desk/release/.next/server/chunks/82499.js +6 -6
  163. package/temp/build/pi-desk/release/.next/server/chunks/92386.js +3 -3
  164. package/temp/build/pi-desk/release/.next/server/chunks/94296.js +2 -2
  165. package/temp/build/pi-desk/release/.next/server/middleware-build-manifest.js +1 -1
  166. package/temp/build/pi-desk/release/.next/server/middleware-react-loadable-manifest.js +1 -1
  167. package/temp/build/pi-desk/release/.next/server/pages/500.html +1 -1
  168. package/temp/build/pi-desk/release/.next/server/server-reference-manifest.json +1 -1
  169. package/temp/build/pi-desk/release/.next/static/chunks/31087-ba426d09d6f68bfd.js +1 -0
  170. package/temp/build/pi-desk/release/.next/static/chunks/39654-b5fedd762ea0312e.js +238 -0
  171. package/temp/build/pi-desk/release/.next/static/chunks/49516-cc4dcd84d64ab4fe.js +81 -0
  172. package/temp/build/pi-desk/release/.next/static/chunks/75130-d2ca74894aff8085.js +13 -0
  173. package/temp/build/pi-desk/release/.next/static/chunks/app/_global-error/page-9969fe0baa238786.js +1 -0
  174. package/temp/build/pi-desk/release/.next/static/chunks/app/_not-found/page-9969fe0baa238786.js +1 -0
  175. package/temp/build/pi-desk/release/.next/static/chunks/app/api/auth/login/route-9969fe0baa238786.js +1 -0
  176. package/temp/build/pi-desk/release/.next/static/chunks/app/api/auth/logout/route-9969fe0baa238786.js +1 -0
  177. package/temp/build/pi-desk/release/.next/static/chunks/app/api/auth-settings/get/route-9969fe0baa238786.js +1 -0
  178. package/temp/build/pi-desk/release/.next/static/chunks/app/api/auth-settings/replace/route-9969fe0baa238786.js +1 -0
  179. package/temp/build/pi-desk/release/.next/static/chunks/app/api/capability-modes/get/route-9969fe0baa238786.js +1 -0
  180. package/temp/build/pi-desk/release/.next/static/chunks/app/api/capability-modes/replace/route-9969fe0baa238786.js +1 -0
  181. package/temp/build/pi-desk/release/.next/static/chunks/app/api/chat/context/get/route-9969fe0baa238786.js +1 -0
  182. package/temp/build/pi-desk/release/.next/static/chunks/app/api/chat/images/get/route-9969fe0baa238786.js +1 -0
  183. package/temp/build/pi-desk/release/.next/static/chunks/app/api/chat/messages/get/route-9969fe0baa238786.js +1 -0
  184. package/temp/build/pi-desk/release/.next/static/chunks/app/api/health/route-9969fe0baa238786.js +1 -0
  185. package/temp/build/pi-desk/release/.next/static/chunks/app/api/mcp-check/get/route-9969fe0baa238786.js +1 -0
  186. package/temp/build/pi-desk/release/.next/static/chunks/app/api/mcp-settings/del/route-9969fe0baa238786.js +1 -0
  187. package/temp/build/pi-desk/release/.next/static/chunks/app/api/mcp-settings/get/route-9969fe0baa238786.js +1 -0
  188. package/temp/build/pi-desk/release/.next/static/chunks/app/api/mcp-settings/replace/route-9969fe0baa238786.js +1 -0
  189. package/temp/build/pi-desk/release/.next/static/chunks/app/api/model-catalog/list/route-9969fe0baa238786.js +1 -0
  190. package/temp/build/pi-desk/release/.next/static/chunks/app/api/model-settings/get/route-9969fe0baa238786.js +1 -0
  191. package/temp/build/pi-desk/release/.next/static/chunks/app/api/model-settings/preview/route-9969fe0baa238786.js +1 -0
  192. package/temp/build/pi-desk/release/.next/static/chunks/app/api/model-settings/replace/route-9969fe0baa238786.js +1 -0
  193. package/temp/build/pi-desk/release/.next/static/chunks/app/api/pi/directories/list/route-9969fe0baa238786.js +1 -0
  194. package/temp/build/pi-desk/release/.next/static/chunks/app/api/pi/directory-entries/list/route-9969fe0baa238786.js +1 -0
  195. package/temp/build/pi-desk/release/.next/static/chunks/app/api/pi/directory-ignores/list/route-9969fe0baa238786.js +1 -0
  196. package/temp/build/pi-desk/release/.next/static/chunks/app/api/pi/directory-ignores/replace/route-9969fe0baa238786.js +1 -0
  197. package/temp/build/pi-desk/release/.next/static/chunks/app/api/pi/models/list/route-9969fe0baa238786.js +1 -0
  198. package/temp/build/pi-desk/release/.next/static/chunks/app/api/pi/session-user-messages/list/route-9969fe0baa238786.js +1 -0
  199. package/temp/build/pi-desk/release/.next/static/chunks/app/api/pi/sessions/list/route-9969fe0baa238786.js +1 -0
  200. package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugin-catalog/get/route-9969fe0baa238786.js +1 -0
  201. package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugin-catalog/search/route-9969fe0baa238786.js +1 -0
  202. package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugin-catalog/settings-get/route-9969fe0baa238786.js +1 -0
  203. package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugin-catalog/settings-replace/route-9969fe0baa238786.js +1 -0
  204. package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/add/route-9969fe0baa238786.js +1 -0
  205. package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/apply/route-9969fe0baa238786.js +1 -0
  206. package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/batch/route-9969fe0baa238786.js +1 -0
  207. package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/browser-resources/[resourceGroup]/[...resourcePath]/route-9969fe0baa238786.js +1 -0
  208. package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/del/route-9969fe0baa238786.js +1 -0
  209. package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/enabled-set/route-9969fe0baa238786.js +1 -0
  210. package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/get/route-9969fe0baa238786.js +1 -0
  211. package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/host-runtime/[runtimeVersion]/[...resourcePath]/route-9969fe0baa238786.js +1 -0
  212. package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/list/route-9969fe0baa238786.js +1 -0
  213. package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/reload/route-9969fe0baa238786.js +1 -0
  214. package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/update/route-9969fe0baa238786.js +1 -0
  215. package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-files/get/route-9969fe0baa238786.js +1 -0
  216. package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-files/list/route-9969fe0baa238786.js +1 -0
  217. package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-files/reveal/route-9969fe0baa238786.js +1 -0
  218. package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-files/search/route-9969fe0baa238786.js +1 -0
  219. package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-git/get/route-9969fe0baa238786.js +1 -0
  220. package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-git-branches/list/route-9969fe0baa238786.js +1 -0
  221. package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-git-changes/list/route-9969fe0baa238786.js +1 -0
  222. package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-git-diff/get/route-9969fe0baa238786.js +1 -0
  223. package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-git-heads/get/route-9969fe0baa238786.js +1 -0
  224. package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-git-log/list/route-9969fe0baa238786.js +1 -0
  225. package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-model-default/get/route-9969fe0baa238786.js +1 -0
  226. package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-model-default/replace/route-9969fe0baa238786.js +1 -0
  227. package/temp/build/pi-desk/release/.next/static/chunks/app/api/skill-files/get/route-9969fe0baa238786.js +1 -0
  228. package/temp/build/pi-desk/release/.next/static/chunks/app/api/skill-files/list/route-9969fe0baa238786.js +1 -0
  229. package/temp/build/pi-desk/release/.next/static/chunks/app/api/skill-files/replace/route-9969fe0baa238786.js +1 -0
  230. package/temp/build/pi-desk/release/.next/static/chunks/app/api/skills/list/route-9969fe0baa238786.js +1 -0
  231. package/temp/build/pi-desk/release/.next/static/chunks/app/api/task-center/images/get/route-9969fe0baa238786.js +1 -0
  232. package/temp/build/pi-desk/release/.next/static/chunks/app/api/task-center/messages/get/route-9969fe0baa238786.js +1 -0
  233. package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-session-git-branch/add/route-9969fe0baa238786.js +1 -0
  234. package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-session-git-branch/replace/route-9969fe0baa238786.js +1 -0
  235. package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-session-tree/get/route-9969fe0baa238786.js +1 -0
  236. package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-session-tree-entry/get/route-9969fe0baa238786.js +1 -0
  237. package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-sessions/add/route-9969fe0baa238786.js +1 -0
  238. package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-sessions/branch/route-9969fe0baa238786.js +1 -0
  239. package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-sessions/del/route-9969fe0baa238786.js +1 -0
  240. package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-sessions/rename/route-9969fe0baa238786.js +1 -0
  241. package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-sessions/replace/route-9969fe0baa238786.js +1 -0
  242. package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-sessions/sort/route-9969fe0baa238786.js +1 -0
  243. package/temp/build/pi-desk/release/.next/static/chunks/app/layout-c0e1c5cef8620cf8.js +3 -0
  244. package/temp/build/pi-desk/release/.next/static/chunks/app/login/page-84892b06243891f0.js +1 -0
  245. package/temp/build/pi-desk/release/.next/static/chunks/app/page-df6045b319f52088.js +158 -0
  246. package/temp/build/pi-desk/release/.next/static/chunks/next/dist/client/components/builtin/app-error-9969fe0baa238786.js +1 -0
  247. package/temp/build/pi-desk/release/.next/static/chunks/next/dist/client/components/builtin/forbidden-9969fe0baa238786.js +1 -0
  248. package/temp/build/pi-desk/release/.next/static/chunks/next/dist/client/components/builtin/unauthorized-9969fe0baa238786.js +1 -0
  249. package/temp/build/pi-desk/release/.next/static/chunks/webpack-40a782fc8a3535b9.js +1 -0
  250. package/temp/build/pi-desk/release/.next/static/css/6427d02b6edf406f.css +1 -0
  251. package/temp/build/pi-desk/release/.next/static/css/{adb1d4e48dd43c0a.css → 949d0d1a99d5de92.css} +1 -1
  252. package/temp/build/pi-desk/release/.next/static/uj2IMtGMwxhDXhTVi7sw5/_buildManifest.js +1 -0
  253. package/temp/build/pi-desk/release/.next/trace-build +1 -1
  254. package/src/client/l2_biz/workbench/hooks/l2-work-session-column-motion.ts +0 -87
  255. package/src/client/l3_modules/work-session-visual/l3-work-session-status-border.tsx +0 -66
  256. package/src/client/l4_foundation/ui/l4-power-saving.ts +0 -45
  257. package/src/client/l4_foundation/ui/l4-window-reveal.ts +0 -30
  258. package/temp/build/pi-desk/release/.next/server/chunks/56284.js +0 -62
  259. package/temp/build/pi-desk/release/.next/static/96geGVI-j_dC6I3k-XFCB/_buildManifest.js +0 -1
  260. package/temp/build/pi-desk/release/.next/static/chunks/31087-333cae396a52f232.js +0 -1
  261. package/temp/build/pi-desk/release/.next/static/chunks/45992-92d8b8b10fcfbb6b.js +0 -13
  262. package/temp/build/pi-desk/release/.next/static/chunks/47340-c1c09c77c1a88514.js +0 -318
  263. package/temp/build/pi-desk/release/.next/static/chunks/57208-d6d38167dabb91e4.js +0 -1
  264. package/temp/build/pi-desk/release/.next/static/chunks/app/_global-error/page-dde4fd973791f7f7.js +0 -1
  265. package/temp/build/pi-desk/release/.next/static/chunks/app/_not-found/page-dde4fd973791f7f7.js +0 -1
  266. package/temp/build/pi-desk/release/.next/static/chunks/app/api/auth/login/route-dde4fd973791f7f7.js +0 -1
  267. package/temp/build/pi-desk/release/.next/static/chunks/app/api/auth/logout/route-dde4fd973791f7f7.js +0 -1
  268. package/temp/build/pi-desk/release/.next/static/chunks/app/api/auth-settings/get/route-dde4fd973791f7f7.js +0 -1
  269. package/temp/build/pi-desk/release/.next/static/chunks/app/api/auth-settings/replace/route-dde4fd973791f7f7.js +0 -1
  270. package/temp/build/pi-desk/release/.next/static/chunks/app/api/capability-modes/get/route-dde4fd973791f7f7.js +0 -1
  271. package/temp/build/pi-desk/release/.next/static/chunks/app/api/capability-modes/replace/route-dde4fd973791f7f7.js +0 -1
  272. package/temp/build/pi-desk/release/.next/static/chunks/app/api/chat/context/get/route-dde4fd973791f7f7.js +0 -1
  273. package/temp/build/pi-desk/release/.next/static/chunks/app/api/chat/images/get/route-dde4fd973791f7f7.js +0 -1
  274. package/temp/build/pi-desk/release/.next/static/chunks/app/api/chat/messages/get/route-dde4fd973791f7f7.js +0 -1
  275. package/temp/build/pi-desk/release/.next/static/chunks/app/api/health/route-dde4fd973791f7f7.js +0 -1
  276. package/temp/build/pi-desk/release/.next/static/chunks/app/api/mcp-check/get/route-dde4fd973791f7f7.js +0 -1
  277. package/temp/build/pi-desk/release/.next/static/chunks/app/api/mcp-settings/del/route-dde4fd973791f7f7.js +0 -1
  278. package/temp/build/pi-desk/release/.next/static/chunks/app/api/mcp-settings/get/route-dde4fd973791f7f7.js +0 -1
  279. package/temp/build/pi-desk/release/.next/static/chunks/app/api/mcp-settings/replace/route-dde4fd973791f7f7.js +0 -1
  280. package/temp/build/pi-desk/release/.next/static/chunks/app/api/model-catalog/list/route-dde4fd973791f7f7.js +0 -1
  281. package/temp/build/pi-desk/release/.next/static/chunks/app/api/model-settings/get/route-dde4fd973791f7f7.js +0 -1
  282. package/temp/build/pi-desk/release/.next/static/chunks/app/api/model-settings/replace/route-dde4fd973791f7f7.js +0 -1
  283. package/temp/build/pi-desk/release/.next/static/chunks/app/api/pi/directories/list/route-dde4fd973791f7f7.js +0 -1
  284. package/temp/build/pi-desk/release/.next/static/chunks/app/api/pi/directory-entries/list/route-dde4fd973791f7f7.js +0 -1
  285. package/temp/build/pi-desk/release/.next/static/chunks/app/api/pi/directory-ignores/list/route-dde4fd973791f7f7.js +0 -1
  286. package/temp/build/pi-desk/release/.next/static/chunks/app/api/pi/directory-ignores/replace/route-dde4fd973791f7f7.js +0 -1
  287. package/temp/build/pi-desk/release/.next/static/chunks/app/api/pi/models/list/route-dde4fd973791f7f7.js +0 -1
  288. package/temp/build/pi-desk/release/.next/static/chunks/app/api/pi/session-user-messages/list/route-dde4fd973791f7f7.js +0 -1
  289. package/temp/build/pi-desk/release/.next/static/chunks/app/api/pi/sessions/list/route-dde4fd973791f7f7.js +0 -1
  290. package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugin-catalog/get/route-dde4fd973791f7f7.js +0 -1
  291. package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugin-catalog/search/route-dde4fd973791f7f7.js +0 -1
  292. package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugin-catalog/settings-get/route-dde4fd973791f7f7.js +0 -1
  293. package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugin-catalog/settings-replace/route-dde4fd973791f7f7.js +0 -1
  294. package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/add/route-dde4fd973791f7f7.js +0 -1
  295. package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/apply/route-dde4fd973791f7f7.js +0 -1
  296. package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/batch/route-dde4fd973791f7f7.js +0 -1
  297. package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/browser-resources/[resourceGroup]/[...resourcePath]/route-dde4fd973791f7f7.js +0 -1
  298. package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/del/route-dde4fd973791f7f7.js +0 -1
  299. package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/enabled-set/route-dde4fd973791f7f7.js +0 -1
  300. package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/get/route-dde4fd973791f7f7.js +0 -1
  301. package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/host-runtime/[runtimeVersion]/[...resourcePath]/route-dde4fd973791f7f7.js +0 -1
  302. package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/list/route-dde4fd973791f7f7.js +0 -1
  303. package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/reload/route-dde4fd973791f7f7.js +0 -1
  304. package/temp/build/pi-desk/release/.next/static/chunks/app/api/plugins/update/route-dde4fd973791f7f7.js +0 -1
  305. package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-files/get/route-dde4fd973791f7f7.js +0 -1
  306. package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-files/list/route-dde4fd973791f7f7.js +0 -1
  307. package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-files/reveal/route-dde4fd973791f7f7.js +0 -1
  308. package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-files/search/route-dde4fd973791f7f7.js +0 -1
  309. package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-git/get/route-dde4fd973791f7f7.js +0 -1
  310. package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-git-branches/list/route-dde4fd973791f7f7.js +0 -1
  311. package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-git-changes/list/route-dde4fd973791f7f7.js +0 -1
  312. package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-git-diff/get/route-dde4fd973791f7f7.js +0 -1
  313. package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-git-heads/get/route-dde4fd973791f7f7.js +0 -1
  314. package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-git-log/list/route-dde4fd973791f7f7.js +0 -1
  315. package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-model-default/get/route-dde4fd973791f7f7.js +0 -1
  316. package/temp/build/pi-desk/release/.next/static/chunks/app/api/project-model-default/replace/route-dde4fd973791f7f7.js +0 -1
  317. package/temp/build/pi-desk/release/.next/static/chunks/app/api/skill-files/get/route-dde4fd973791f7f7.js +0 -1
  318. package/temp/build/pi-desk/release/.next/static/chunks/app/api/skill-files/list/route-dde4fd973791f7f7.js +0 -1
  319. package/temp/build/pi-desk/release/.next/static/chunks/app/api/skill-files/replace/route-dde4fd973791f7f7.js +0 -1
  320. package/temp/build/pi-desk/release/.next/static/chunks/app/api/skills/list/route-dde4fd973791f7f7.js +0 -1
  321. package/temp/build/pi-desk/release/.next/static/chunks/app/api/task-center/images/get/route-dde4fd973791f7f7.js +0 -1
  322. package/temp/build/pi-desk/release/.next/static/chunks/app/api/task-center/messages/get/route-dde4fd973791f7f7.js +0 -1
  323. package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-session-git-branch/add/route-dde4fd973791f7f7.js +0 -1
  324. package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-session-git-branch/replace/route-dde4fd973791f7f7.js +0 -1
  325. package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-session-tree/get/route-dde4fd973791f7f7.js +0 -1
  326. package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-session-tree-entry/get/route-dde4fd973791f7f7.js +0 -1
  327. package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-sessions/add/route-dde4fd973791f7f7.js +0 -1
  328. package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-sessions/branch/route-dde4fd973791f7f7.js +0 -1
  329. package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-sessions/del/route-dde4fd973791f7f7.js +0 -1
  330. package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-sessions/replace/route-dde4fd973791f7f7.js +0 -1
  331. package/temp/build/pi-desk/release/.next/static/chunks/app/api/work-sessions/sort/route-dde4fd973791f7f7.js +0 -1
  332. package/temp/build/pi-desk/release/.next/static/chunks/app/layout-839162b6cfae8347.js +0 -3
  333. package/temp/build/pi-desk/release/.next/static/chunks/app/login/page-4532a3bbee48e219.js +0 -1
  334. package/temp/build/pi-desk/release/.next/static/chunks/app/page-4b6367cde5c04597.js +0 -158
  335. package/temp/build/pi-desk/release/.next/static/chunks/next/dist/client/components/builtin/app-error-dde4fd973791f7f7.js +0 -1
  336. package/temp/build/pi-desk/release/.next/static/chunks/next/dist/client/components/builtin/forbidden-dde4fd973791f7f7.js +0 -1
  337. package/temp/build/pi-desk/release/.next/static/chunks/next/dist/client/components/builtin/unauthorized-dde4fd973791f7f7.js +0 -1
  338. package/temp/build/pi-desk/release/.next/static/chunks/webpack-735430d61da52e9d.js +0 -1
  339. package/temp/build/pi-desk/release/.next/static/css/4a5dda7ff3a82c4a.css +0 -1
  340. /package/temp/build/pi-desk/release/.next/static/{96geGVI-j_dC6I3k-XFCB → uj2IMtGMwxhDXhTVi7sw5}/_ssgManifest.js +0 -0
@@ -4,6 +4,7 @@ import { useEffect, useRef, useState } from 'react'
4
4
  import { useTranslation } from 'react-i18next'
5
5
  import {
6
6
  L4AppDialogContent,
7
+ L4AppDialogBody,
7
8
  L4AppDialogDescription,
8
9
  L4AppDialogFooter,
9
10
  L4AppDialogHeader,
@@ -15,7 +16,9 @@ import { Button } from './shadcn/button'
15
16
  interface ConfirmOptions {
16
17
  title: string
17
18
  description: string
19
+ content?: React.ReactNode
18
20
  confirmLabel?: string
21
+ confirmVariant?: 'default' | 'destructive'
19
22
  }
20
23
 
21
24
  export function useL4ConfirmDialog(): {
@@ -67,11 +70,16 @@ export function useL4ConfirmDialog(): {
67
70
  {options.description}
68
71
  </L4AppDialogDescription>
69
72
  </L4AppDialogHeader>
73
+ {options.content ? (
74
+ <L4AppDialogBody className="grid grid-rows-[minmax(0,1fr)]">
75
+ {options.content}
76
+ </L4AppDialogBody>
77
+ ) : null}
70
78
  <L4AppDialogFooter>
71
79
  <Button ref={cancelRef} variant="outline" onClick={() => settle(false)}>
72
80
  {t('cancel')}
73
81
  </Button>
74
- <Button variant="destructive" onClick={() => settle(true)}>
82
+ <Button variant={options.confirmVariant ?? 'destructive'} onClick={() => settle(true)}>
75
83
  {options.confirmLabel ?? t('delete')}
76
84
  </Button>
77
85
  </L4AppDialogFooter>
@@ -2,7 +2,7 @@ import { z } from 'zod'
2
2
 
3
3
  export const L2AuthLoginRequestSchema = z
4
4
  .object({
5
- password: z.string().min(1).max(256)
5
+ password: z.string().min(1).max(64)
6
6
  })
7
7
  .strict()
8
8
 
@@ -26,7 +26,7 @@ export const L2AuthSettingsGetResponseSchema = z
26
26
  export const L2AuthNewPasswordSchema = z
27
27
  .string()
28
28
  .min(12)
29
- .max(256)
29
+ .max(64)
30
30
  .refine(
31
31
  (password) => password === password.trim() && !/[\p{Cc}\p{Cf}\p{Zl}\p{Zp}]/u.test(password)
32
32
  )
@@ -10,7 +10,7 @@ export const L2_AUTH_MESSAGES = {
10
10
  setPassword: 'Set a password',
11
11
  newPassword: 'New password',
12
12
  passwordHint:
13
- '12–256 characters; use at least three of: uppercase letters, lowercase letters, numbers and symbols. No leading/trailing spaces, line breaks or invisible control characters.',
13
+ '12–64 characters; use at least three of: uppercase letters, lowercase letters, numbers and symbols. No leading/trailing spaces, line breaks or invisible control characters.',
14
14
  generatePassword: 'Generate password',
15
15
  generatePasswordHint: 'Generate a random 16-character password',
16
16
  generatePasswordFailed: 'Unable to generate a password. Please try again.',
@@ -60,7 +60,7 @@ export const L2_AUTH_MESSAGES = {
60
60
  setPassword: '设置密码',
61
61
  newPassword: '新密码',
62
62
  passwordHint:
63
- '12–256 个字符,至少包含大写字母、小写字母、数字、符号中的三类;不能有首尾空白、换行或不可见控制字符。',
63
+ '12–64 个字符,至少包含大写字母、小写字母、数字、符号中的三类;不能有首尾空白、换行或不可见控制字符。',
64
64
  generatePassword: '生成密码',
65
65
  generatePasswordHint: '随机生成 16 位密码',
66
66
  generatePasswordFailed: '生成密码失败,请重试。',
@@ -184,11 +184,20 @@ export const L2ModelSettingsGetResponseSchema = z
184
184
  })
185
185
  .strict()
186
186
 
187
+ const L2ModelIdentitySchema = z
188
+ .object({ provider: L2ModelProviderIdSchema, modelId: L2ModelIdSchema })
189
+ .strict()
190
+
191
+ export const L2ModelReplacementSchema = z
192
+ .object({ from: L2ModelIdentitySchema, to: L2ModelIdentitySchema })
193
+ .strict()
194
+
187
195
  const L2ModelSettingsReplaceFormSchema = z
188
196
  .object({
189
197
  providers: z.array(L2ModelProviderConfigSchema).optional(),
190
198
  presets: z.array(L2ModelPresetSchema).optional(),
191
- accountModels: z.array(L2AccountModelSelectionSchema).optional()
199
+ accountModels: z.array(L2AccountModelSelectionSchema).optional(),
200
+ modelReplacements: z.array(L2ModelReplacementSchema).optional()
192
201
  })
193
202
  .strict()
194
203
  .refine(
@@ -208,6 +217,17 @@ export const L2ModelSettingsReplaceRequestSchema = z.union([
208
217
 
209
218
  export const L2ModelSettingsReplaceResponseSchema = z.object({}).strict()
210
219
 
220
+ export const L2ModelSettingsPreviewRequestSchema = L2ModelSettingsReplaceRequestSchema
221
+ export const L2ModelSettingsPreviewResponseSchema = z
222
+ .object({
223
+ projectDefaults: z.array(
224
+ z
225
+ .object({ cwd: L3PiCwdSchema, from: L2ModelSelectionSchema, to: L2ModelSelectionSchema })
226
+ .strict()
227
+ )
228
+ })
229
+ .strict()
230
+
211
231
  export const L2ModelCatalogListRequestSchema = z
212
232
  .object({
213
233
  query: z.string().trim().max(256),
@@ -299,6 +319,8 @@ export type L2ModelPreset = z.infer<typeof L2ModelPresetSchema>
299
319
  export type L2ModelOption = z.infer<typeof L2ModelOptionSchema>
300
320
  export type L2ModelSelection = z.infer<typeof L2ModelSelectionSchema>
301
321
  export type L2ModelSettingsGetResponse = z.infer<typeof L2ModelSettingsGetResponseSchema>
322
+ export type L2ModelReplacement = z.infer<typeof L2ModelReplacementSchema>
323
+ export type L2ModelSettingsPreviewResponse = z.infer<typeof L2ModelSettingsPreviewResponseSchema>
302
324
  export type L2ModelSettingsReplaceRequest = z.infer<typeof L2ModelSettingsReplaceRequestSchema>
303
325
  export type L2ModelCatalogListRequest = z.infer<typeof L2ModelCatalogListRequestSchema>
304
326
  export type L2ModelCatalogSource = z.infer<typeof L2ModelCatalogSourceSchema>
@@ -32,9 +32,6 @@ export const L2_SETTINGS_MESSAGES = {
32
32
  theme: 'Theme',
33
33
  themeLight: 'Light',
34
34
  themeDark: 'Dark',
35
- powerSaving: 'Power saving',
36
- powerSavingOff: 'Off',
37
- powerSavingOn: 'On',
38
35
  displaySize: 'Display size',
39
36
  sizeCompact: 'Compact',
40
37
  sizeStandard: 'Standard',
@@ -111,6 +108,10 @@ export const L2_SETTINGS_MESSAGES = {
111
108
  removeInvalidPresets_other:
112
109
  '{{count}} common combinations refer to removed models. Saving will remove them.',
113
110
  removeAndSave: 'Remove and save',
111
+ replaceProjectDefaultsTitle: 'Update project default models',
112
+ replaceProjectDefaultsDescription:
113
+ 'The following projects will use the new model settings. Confirm to save all changes together.',
114
+ confirmAndSaveModels: 'Confirm and save',
114
115
  modelSaved: 'Model configuration saved.',
115
116
  modelSaveFailed: 'Could not save the model configuration',
116
117
  catalogUpdatedAt: 'Reference catalog updated at {{time}}',
@@ -327,9 +328,6 @@ export const L2_SETTINGS_MESSAGES = {
327
328
  theme: '界面主题',
328
329
  themeLight: '浅色',
329
330
  themeDark: '深色',
330
- powerSaving: '省电模式',
331
- powerSavingOff: '关闭',
332
- powerSavingOn: '开启',
333
331
  displaySize: '显示大小',
334
332
  sizeCompact: '紧凑',
335
333
  sizeStandard: '标准',
@@ -406,6 +404,10 @@ export const L2_SETTINGS_MESSAGES = {
406
404
  removeInvalidPresets_other:
407
405
  '有 {{count}} 个常用组合引用了已删除模型,保存配置将同时删除这些组合。',
408
406
  removeAndSave: '删除并保存',
407
+ replaceProjectDefaultsTitle: '同步项目默认模型',
408
+ replaceProjectDefaultsDescription:
409
+ '以下项目的默认模型将替换为本次设置的新模型,确认后一起保存。',
410
+ confirmAndSaveModels: '确认并保存',
409
411
  modelSaved: '模型配置已保存。',
410
412
  modelSaveFailed: '模型配置保存失败',
411
413
  catalogUpdatedAt: '参考目录更新于 {{time}}',
@@ -73,6 +73,14 @@ export const L2CreateWorkSessionResponseSchema = z
73
73
  })
74
74
  .strict()
75
75
 
76
+ export const L2RenameWorkSessionRequestSchema = z
77
+ .object({
78
+ workId: L2WorkIdSchema,
79
+ sessionId: L2PiSessionIdSchema,
80
+ title: z.string().trim().min(1)
81
+ })
82
+ .strict()
83
+
76
84
  export const L2DeleteWorkSessionRequestSchema = z
77
85
  .object({
78
86
  workId: L2WorkIdSchema
@@ -125,4 +133,5 @@ export type L2WorkSessionListResponse = z.infer<typeof L2WorkSessionListResponse
125
133
  export type L2CreateWorkSessionRequest = z.infer<typeof L2CreateWorkSessionRequestSchema>
126
134
  export type L2CreateWorkSessionResponse = z.infer<typeof L2CreateWorkSessionResponseSchema>
127
135
  export type L2SortWorkSessionsRequest = z.infer<typeof L2SortWorkSessionsRequestSchema>
136
+ export type L2RenameWorkSessionRequest = z.infer<typeof L2RenameWorkSessionRequestSchema>
128
137
  export type L2ReplaceWorkSessionRequest = z.infer<typeof L2ReplaceWorkSessionRequestSchema>
@@ -201,6 +201,9 @@ export const L2_WORKBENCH_LOCALE_MESSAGES = {
201
201
  deleteSession: 'Delete {{name}}',
202
202
  deleteSessionTitle: 'Delete work session',
203
203
  copyProjectPath: 'Copy project path',
204
+ renameSessionTitle: 'Edit title',
205
+ sessionTitleLabel: 'Session title',
206
+ renameSessionFailed: 'Could not save the session title',
204
207
  sidebarSessions: 'Work sessions',
205
208
  sidebarFiles: 'Project files',
206
209
  sidebarReplaceSession: 'Replace work session',
@@ -641,6 +644,9 @@ export const L2_WORKBENCH_LOCALE_MESSAGES = {
641
644
  deleteSession: '删除工作会话 {{name}}',
642
645
  deleteSessionTitle: '删除工作会话',
643
646
  copyProjectPath: '复制项目路径',
647
+ renameSessionTitle: '修改标题',
648
+ sessionTitleLabel: '会话标题',
649
+ renameSessionFailed: '保存会话标题失败',
644
650
  sidebarSessions: '工作会话',
645
651
  sidebarFiles: '项目文件',
646
652
  sidebarReplaceSession: '替换工作会话',
@@ -68,6 +68,8 @@ export const L3_PROJECT_FILES_LOCALE_MESSAGES = {
68
68
  collapseUnchanged: 'Collapse unchanged content',
69
69
  reloadDiff: 'Reload diff',
70
70
  htmlMode: 'HTML display mode',
71
+ markdownMode: 'Markdown display mode',
72
+ markdownPreview: '{{name}} Markdown preview',
71
73
  previewMode: 'Preview',
72
74
  sourceMode: 'Source',
73
75
  findInFile: 'Find in file',
@@ -166,6 +168,8 @@ export const L3_PROJECT_FILES_LOCALE_MESSAGES = {
166
168
  collapseUnchanged: '折叠未变更内容',
167
169
  reloadDiff: '重新加载 Diff',
168
170
  htmlMode: 'HTML 显示方式',
171
+ markdownMode: 'Markdown 显示方式',
172
+ markdownPreview: '{{name}} Markdown 预览',
169
173
  previewMode: '预览',
170
174
  sourceMode: '源码',
171
175
  findInFile: '在文件中查找',
@@ -80,6 +80,9 @@ export const L4_HOST_ERROR_MESSAGES = {
80
80
  workSessionReplaceInvalid: 'Invalid work session replacement request',
81
81
  workSessionReplaceOccupied: 'Pi session is bound to another work session',
82
82
  workSessionReplaceFailed: 'Could not replace the Pi session',
83
+ workSessionRenameInvalid: 'Invalid work session title request',
84
+ workSessionRenameChanged: 'Work session changed. Reopen the title editor',
85
+ workSessionRenameFailed: 'Could not rename the work session',
83
86
  workSessionDeleteInvalid: 'Invalid work ID',
84
87
  workSessionDeleteFailed: 'Could not delete work session',
85
88
  workSessionSortInvalid: 'Invalid work session order or pinned count',
@@ -231,6 +234,9 @@ export const L4_HOST_ERROR_MESSAGES = {
231
234
  workSessionReplaceInvalid: '替换会话参数无效',
232
235
  workSessionReplaceOccupied: 'Pi 会话已绑定到其他工作会话',
233
236
  workSessionReplaceFailed: '替换 Pi 会话失败',
237
+ workSessionRenameInvalid: '会话标题参数无效',
238
+ workSessionRenameChanged: '工作会话已切换,请重新打开标题编辑',
239
+ workSessionRenameFailed: '修改会话标题失败',
234
240
  workSessionDeleteInvalid: 'workId 格式无效',
235
241
  workSessionDeleteFailed: '删除工作会话失败',
236
242
  workSessionSortInvalid: 'workIds 或 pinnedCount 格式无效',
@@ -0,0 +1,32 @@
1
+ import 'server-only'
2
+
3
+ import { L2ModelSettingsPreviewRequestSchema } from '@common/l2_biz/model-settings/l2-model-settings-contract'
4
+ import { previewL2ModelSettings } from '@server/l2_biz/model-settings/l2-model-settings'
5
+ import {
6
+ createL4ApiErrorResponse,
7
+ createL4ApiSuccessResponse
8
+ } from '@server/l4_foundation/http/l4-api-response'
9
+
10
+ export async function POST(request: Request): Promise<Response> {
11
+ let payload: unknown
12
+ try {
13
+ payload = await request.json()
14
+ } catch {
15
+ return createL4ApiErrorResponse(400, '请求 JSON 格式无效', { key: 'errors:invalidJson' })
16
+ }
17
+ const input = L2ModelSettingsPreviewRequestSchema.safeParse(payload)
18
+ if (!input.success)
19
+ return createL4ApiErrorResponse(400, '模型配置格式无效', { key: 'errors:modelSettingsInvalid' })
20
+
21
+ try {
22
+ return createL4ApiSuccessResponse(await previewL2ModelSettings(input.data))
23
+ } catch (error) {
24
+ console.error('[Pi Desk][ModelSettingsPreviewApi] 预览模型配置失败', {
25
+ message: error instanceof Error ? error.message : String(error)
26
+ })
27
+ return createL4ApiErrorResponse(
28
+ 400,
29
+ error instanceof Error && error.message ? error.message : '预览模型配置失败'
30
+ )
31
+ }
32
+ }
@@ -0,0 +1,52 @@
1
+ import 'server-only'
2
+
3
+ import { L2RenameWorkSessionRequestSchema } from '@common/l2_biz/work-session/l2-work-session-contract'
4
+ import { getL2WorkSessionManage } from '@server/l2_biz/work-session/l2-work-session-manage'
5
+ import { readL4ClientId } from '@server/l4_foundation/http/l4-client-id'
6
+ import {
7
+ createL4ApiErrorResponse,
8
+ createL4ApiSuccessResponse
9
+ } from '@server/l4_foundation/http/l4-api-response'
10
+
11
+ export async function POST(request: Request): Promise<Response> {
12
+ const clientId = readL4ClientId(request)
13
+ if (!clientId)
14
+ return createL4ApiErrorResponse(400, '客户端标识无效', { key: 'errors:invalidClient' })
15
+
16
+ let payload: unknown
17
+ try {
18
+ payload = await request.json()
19
+ } catch {
20
+ return createL4ApiErrorResponse(400, '请求 JSON 格式无效', { key: 'errors:invalidJson' })
21
+ }
22
+
23
+ const input = L2RenameWorkSessionRequestSchema.safeParse(payload)
24
+ if (!input.success)
25
+ return createL4ApiErrorResponse(400, '会话标题参数无效', {
26
+ key: 'errors:workSessionRenameInvalid'
27
+ })
28
+
29
+ try {
30
+ await getL2WorkSessionManage().renameWorkSession(input.data)
31
+ return createL4ApiSuccessResponse({})
32
+ } catch (error) {
33
+ // 管理器由 Node 与 Next 共享,不依赖跨加载边界的业务异常构造器身份。
34
+ if (error instanceof Error && error.name === 'WorkSessionNotFoundError') {
35
+ return createL4ApiErrorResponse(404, '工作会话不存在', { key: 'errors:sessionMissing' })
36
+ }
37
+ if (error instanceof Error && error.name === 'WorkSessionBindingChangedError') {
38
+ return createL4ApiErrorResponse(409, '工作会话已切换,请重新打开标题编辑', {
39
+ key: 'errors:workSessionRenameChanged'
40
+ })
41
+ }
42
+ console.error('[Pi Desk][WorkSessionRenameApi] 修改会话标题失败', {
43
+ clientId,
44
+ workId: input.data.workId,
45
+ sessionId: input.data.sessionId,
46
+ errorName: error instanceof Error ? error.name : 'UnknownError'
47
+ })
48
+ return createL4ApiErrorResponse(500, '修改会话标题失败', {
49
+ key: 'errors:workSessionRenameFailed'
50
+ })
51
+ }
52
+ }
@@ -3,10 +3,12 @@ import 'server-only'
3
3
  import {
4
4
  L2ModelCatalogListResponseSchema,
5
5
  L2ModelSettingsGetResponseSchema,
6
+ L2ModelSettingsPreviewResponseSchema,
6
7
  L2ProjectModelDefaultGetResponseSchema,
7
8
  type L2ModelCatalogListRequest,
8
9
  type L2ModelCatalogListResponse,
9
10
  type L2ModelSettingsGetResponse,
11
+ type L2ModelSettingsPreviewResponse,
10
12
  type L2ModelSettingsReplaceRequest,
11
13
  type L2ProjectModelDefaultGetResponse,
12
14
  type L2ProjectModelDefaultReplaceRequest
@@ -15,6 +17,7 @@ import {
15
17
  listL4ModelCatalog,
16
18
  readL4ModelSettings,
17
19
  readL4ProjectModelDefault,
20
+ previewL4ModelSettings,
18
21
  replaceL4ModelSettings,
19
22
  replaceL4ProjectModelDefault
20
23
  } from '@server/l4_foundation/model-settings/l4-model-settings'
@@ -23,6 +26,12 @@ export async function getL2ModelSettings(): Promise<L2ModelSettingsGetResponse>
23
26
  return L2ModelSettingsGetResponseSchema.parse(await readL4ModelSettings())
24
27
  }
25
28
 
29
+ export async function previewL2ModelSettings(
30
+ input: L2ModelSettingsReplaceRequest
31
+ ): Promise<L2ModelSettingsPreviewResponse> {
32
+ return L2ModelSettingsPreviewResponseSchema.parse(await previewL4ModelSettings(input))
33
+ }
34
+
26
35
  export async function replaceL2ModelSettings(input: L2ModelSettingsReplaceRequest): Promise<void> {
27
36
  await replaceL4ModelSettings(input)
28
37
  }