@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
@@ -1 +1 @@
1
- "use strict";exports.id=6917,exports.ids=[6917],exports.modules={18:(a,b,c)=>{c.d(b,{FR:()=>m,kn:()=>l,zR:()=>k});var d=c(89409),e=c(25984);function f(a){return`${a.location.index}:${a.location.entryId}`}let g={user:["viewKey","hasDetail"],assistant:["viewKey","status","hasDetail","usage"],tool:["viewKey","status","hasDetail","usage"],bash:["viewKey","status","hasDetail"],custom:["viewKey","hasDetail"]};function h(a,b,c){if(!b)return a;let e={...a,...b};return"summary"===c?d.Hf.parse(e):d.D8.parse(e)}function i(a,b){if(Array.isArray(a.parent)){if("number"!=typeof a.key)throw Error("Increment array key is invalid");a.parent[a.key]=b;return}if("string"!=typeof a.key)throw Error("Increment object key is invalid");a.parent[a.key]=b}function j(a,b,c){let e=structuredClone(a),f=function(a,b){if(0===b.length)throw Error("Increment cannot append to the message layer root");let c=a;for(let a of b.slice(0,-1)){if("number"==typeof a){if(!Array.isArray(c)||a>=c.length)throw Error(`Increment array path does not exist: ${a}`);c=c[a];continue}if(!c||"object"!=typeof c||Array.isArray(c))throw Error(`Increment object path does not exist: ${a}`);if(!Object.hasOwn(c,a))throw Error(`Increment object field does not exist: ${a}`);c=c[a]}let d=b.at(-1);if("number"==typeof d){if(!Array.isArray(c)||d>=c.length)throw Error(`Increment array target does not exist: ${d}`);return{parent:c,key:d,value:c[d]}}if(!c||"object"!=typeof c||Array.isArray(c))throw Error(`Increment object target does not exist: ${d}`);if(!Object.hasOwn(c,d))throw Error(`Increment target does not exist: ${d}`);return{parent:c,key:d,value:c[d]}}(e,b);if("string"==typeof c){if("string"!=typeof f.value)throw Error("Increment target is not a string");return i(f,`${f.value}${c}`),d.Hf.parse(e)}if(!Array.isArray(f.value))throw Error("Increment target is not an array");return i(f,[...f.value,...c]),d.Hf.parse(e)}function k(a,b,c){let e=new Map(a.messages.filter(a=>void 0!==a.detail).map(a=>[f(a),a]));return{messages:b.map(a=>{let b=e.get(f(a));return a.fixed.hasDetail&&b&&b.fixed.type===a.fixed.type&&b.fixed.viewKey===a.fixed.viewKey&&void 0!==b.detail?d.mj.parse({...a,detail:b.detail}):a}),temporaryMessages:[...c]}}function l(a,b){if("message_start"===b.type){if(a.temporaryMessages.some(a=>a.location.tempId===b.snapshot.location.tempId))throw Error(`Temporary conversation message already exists: ${b.snapshot.location.tempId}`);return{...a,temporaryMessages:[...a.temporaryMessages,b.snapshot]}}let c=a.temporaryMessages.findIndex(a=>a.location.tempId===b.location.tempId);if(c<0)throw Error(`Temporary conversation message was not found: ${b.location.tempId}`);if("message_update"===b.type){let f=[...a.temporaryMessages];return f[c]=function(a,b){var c,f;if(a.location.tempId!==b.location.tempId)throw Error(`Conversation update tempId mismatch: ${b.location.tempId}`);let i=(c=a.fixed,(f=b.fixed)?(!function(a,b,c){let d=Object.keys(a).filter(a=>!b.includes(a));if(d.length>0)throw Error(`${c} patch contains fields invalid for the current message: ${d}`)}(f,g[c.type],`${c.type} fixed`),d.q5.parse({...c,...f})):c),k=h(a.summary,b.summary,"summary"),l=a.detail;if(void 0!==b.detail||Object.keys(b.increments??{}).some(a=>"detail"===(0,e.U)(a).root)){if(b.fixed?.hasDetail===!1)throw Error("Realtime detail cannot be updated while explicitly clearing hasDetail");i.hasDetail||(i=d.q5.parse({...i,hasDetail:!0}))}for(let[a,c]of(b.detail&&(l=h(l??{},b.detail,"detail")),Object.entries(b.increments??{}))){let b=(0,e.U)(a);"summary"===b.root?k=j(k,b.segments,c):l=j(l??{},b.segments,c)}return i.hasDetail||(l=void 0),d.s4.parse({location:a.location,fixed:i,summary:k,...void 0===l?{}:{detail:l}})}(f[c],b),{...a,temporaryMessages:f}}if("message_discard"===b.type)return{...a,temporaryMessages:a.temporaryMessages.filter(a=>a.location.tempId!==b.location.tempId)};if(b.durable.index!==a.messages.length)throw Error(`Conversation commit index is not continuous: expected ${a.messages.length}, received ${b.durable.index}`);if(a.messages.some(a=>a.location.entryId===b.durable.entryId))throw Error(`Conversation commit entryId already exists: ${b.durable.entryId}`);let{detail:f,fixed:i,...k}=a.temporaryMessages[c],l=d.mj.parse({...k,location:b.durable,fixed:{...i,timestampMs:b.fixed.timestampMs},...i.hasDetail&&void 0!==f?{detail:f}:{}});return{messages:[...a.messages,l],temporaryMessages:a.temporaryMessages.filter(a=>a.location.tempId!==b.location.tempId)}}function m(a,b){return"durable_append"===b.type?function(a,b){let c=a.messages.length;if(b.messages[0]?.location.index!==c)throw Error(`Conversation append index is not continuous: expected ${c}, received ${b.messages[0]?.location.index}`);let d=new Set(a.messages.map(a=>a.location.entryId));for(let a of b.messages){if(d.has(a.location.entryId))throw Error(`Conversation append entryId already exists: ${a.location.entryId}`);d.add(a.location.entryId)}return{...a,messages:[...a.messages,...b.messages]}}(a,b):l(a,b)}},610:(a,b,c)=>{c.d(b,{PS:()=>k,ef:()=>i,gK:()=>j,hS:()=>h,mv:()=>n});var d=c(59473),e=c(89409),f=c(2364),g=c(25984);let h=d.Ik({type:d.eu("message_start"),snapshot:e.s4}).strict(),i=d.Ik({type:d.eu("message_update"),location:e.fb,fixed:e.dG.optional(),summary:e.XW.optional(),detail:e.wH.optional(),increments:e.fK.optional()}).strict().superRefine((a,b)=>{if(!a.fixed&&!a.summary&&!a.detail&&!a.increments)return void b.addIssue({code:"custom",message:"message update requires a changed layer"});let c=[];for(let b of Object.keys(a.increments??{}))try{c.push({raw:b,parsed:(0,g.U)(b)})}catch{}for(let d of c){let c="summary"===d.parsed.root?Object.keys(a.summary??{}):Object.keys(a.detail??{}),e=d.parsed.segments[0];(0===d.parsed.segments.length||"string"==typeof e&&c.includes(e))&&b.addIssue({code:"custom",message:"replacement and increment paths cannot overlap",path:["increments",d.raw]})}for(let a=0;a<c.length;a+=1)for(let d=a+1;d<c.length;d+=1){let e=c[a],f=c[d];((0,g.v)(e.parsed,f.parsed)||(0,g.v)(f.parsed,e.parsed))&&b.addIssue({code:"custom",message:"increment parent and child paths cannot overlap",path:["increments",f.raw]})}}),j=d.Ik({type:d.eu("message_commit"),location:e.fb,durable:e.V6,fixed:d.Ik({timestampMs:f.k}).strict()}).strict(),k=d.Ik({type:d.eu("message_discard"),location:e.fb}).strict(),l=d.Ik({type:d.eu("durable_append"),messages:d.YO(e.mj).min(1)}).strict().superRefine((a,b)=>{let c=new Set;for(let[d,e]of a.messages.entries())d>0&&e.location.index!==a.messages[d-1].location.index+1&&b.addIssue({code:"custom",message:"durable append message indexes must be continuous",path:["messages",d,"location","index"]}),c.has(e.location.entryId)&&b.addIssue({code:"custom",message:"durable append entryId values must be unique",path:["messages",d,"location","entryId"]}),c.add(e.location.entryId)}),m=d.KC([h,i,j,k]),n=d.KC([l,m])},2002:(a,b,c)=>{c.d(b,{Od:()=>s,tU:()=>o,hE:()=>r,Sp:()=>g,P9:()=>f,_G:()=>k,Vc:()=>j});var d=c(59473);c(48452);let e=d.Ik({key:d.Yj().min(1).max(160),params:d.g1(d.Yj().min(1).max(80),d.KC([d.Yj().max(1e3),d.ai().finite()])).optional()}).strict(),f=4001,g=4003,h=d.Yj().trim().min(1),i=d.Yj().uuid();function j(a){return Object.freeze({op:"req",path:h.parse(a.path),inputSchema:a.inputSchema,outputSchema:a.outputSchema,...void 0===a.timeoutMs?{}:{timeoutMs:d.ai().int().positive().parse(a.timeoutMs)}})}function k(a){return Object.freeze({op:"push",path:h.parse(a.path),bodySchema:a.bodySchema})}let l=d.Ik({op:d.eu("req"),path:h,requestId:i}).strict(),m=d.Ik({op:d.eu("resp"),path:h,requestId:i}).strict(),n=d.Ik({op:d.eu("push"),path:h}).strict(),o=d.Ik({head:l,body:d.Pq()}).strict(),p=d.Ik({head:m,body:d.Ik({code:d.eu(0),msg:d.eu(""),data:d.Pq()}).strict()}).strict(),q=d.Ik({head:m,body:d.Ik({code:d.ai().int().positive(),msg:d.Yj().min(1),data:d.ch(),i18n:e.optional()}).strict()}).strict(),r=d.KC([p,q]),s=d.Ik({head:n,body:d.Pq()}).strict()},2364:(a,b,c)=>{c.d(b,{k:()=>d});let d=c(59473).ai().int().nonnegative().max(Number.MAX_SAFE_INTEGER)},12683:(a,b,c)=>{c.d(b,{FF:()=>h,LK:()=>i});var d=c(59473),e=c(24187),f=c(43037);let g=d.Ik({name:d.Yj().trim().min(1),description:d.Yj(),parameters:e.Dz}).strict(),h=d.Ik({source:f.Pi}).strict(),i=d.Ik({systemPrompt:d.Yj(),tools:d.YO(g)}).strict()},24187:(a,b,c)=>{c.d(b,{Dz:()=>h,f7:()=>g,tv:()=>f});var d=c(59473);let e=d.Yj().trim().min(1).max(64).regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/),f=e,g=e,h=d.g1(d.Yj(),d.Pq());d.Yj().trim().min(3).max(129).regex(/^[a-z0-9]+(?:-[a-z0-9]+)*\/[a-z0-9]+(?:-[a-z0-9]+)*$/);let i=d.k5(["plugin","server","rocket","settings","panel","message","terminal","file","folder","bot","wrench","database","globe"]);d.gM("type",[d.Ik({type:d.eu("builtin"),name:i}).strict(),d.Ik({type:d.eu("svg"),content:d.Yj().trim().min(1).max(16384)}).strict()])},25984:(a,b,c)=>{function d(a){if(!/^(0|[1-9]\d*)$/.test(a))return a;let b=Number(a);if(!Number.isSafeInteger(b))throw Error(`Increment array index is invalid: ${a}`);return b}function e(a){if(!a||a.length>1024)throw Error("Increment path length is invalid");let b=[],c="",e=!1;for(let d of a){if(e){if("."!==d&&"\\"!==d)throw Error(`Increment path contains an invalid escape: \\${d}`);c+=d,e=!1;continue}if("\\"===d){e=!0;continue}if("."===d){if(!c)throw Error("Increment path contains an empty segment");b.push(c),c="";continue}c+=d}if(e)throw Error("Increment path ends with an escape");if(!c)throw Error("Increment path contains an empty segment");b.push(c);let f=b.shift();if("summary"!==f&&"detail"!==f)throw Error("Increment path root must be summary or detail");return{root:f,segments:b.map(d)}}function f(a,b){return a.root===b.root&&!(a.segments.length>b.segments.length)&&a.segments.every((a,c)=>a===b.segments[c])}c.d(b,{U:()=>e,v:()=>f})},40750:(a,b,c)=>{c.d(b,{L6:()=>e,k_:()=>f});var d=c(18);let e={extensionMode:"normal",presentationMode:"normal",initializationError:null,queues:{steering:[],followUp:[]},model:null,capabilityMode:null,contextUsage:null,plugins:{}};function f(a,b){if("session_sync"===b.type){if("full"===b.mode)return{...(0,d.zR)(a,b.messages,b.temporaryMessages),runtime:b.runtime};let c=a.messages.at(-1);if(!c||c.location.index!==b.baseCursor.index||c.location.entryId!==b.baseCursor.entryId)throw Error("Incremental chat sync does not match the current durable cursor");let e=new Set(a.messages.map(a=>a.location.entryId));for(let a of b.messages){if(e.has(a.location.entryId))throw Error(`Incremental chat sync contains a duplicate entryId: ${a.location.entryId}`);e.add(a.location.entryId)}return{messages:[...a.messages,...b.messages],temporaryMessages:b.temporaryMessages,runtime:b.runtime}}return"runtime_update"===b.type?{...a,runtime:b.runtime}:{...(0,d.kn)(a,b),runtime:a.runtime}}Object.freeze({messages:[],temporaryMessages:[],runtime:e})},41468:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Cz:()=>j,Ht:()=>g.H,NA:()=>k,QS:()=>i});var e=c(96459),f=c(79626),g=c(72904),h=a([e]);function i(a,b,c,d=!1,g="temporary",h=!1){return(0,f.d)(a,b,c,h?[]:(0,e.WE)().readMessageDeclarations(),d,g)}function j(a,b,c,d,g,h=!1){return(0,f.N)(a,b,c,d,g,h?[]:(0,e.WE)().readMessageDeclarations())}function k(a){let{detail:b,...c}=a;return c}e=(h.then?(await h)():h)[0],d()}catch(a){d(a)}})},43037:(a,b,c)=>{c.d(b,{DK:()=>r,Pi:()=>q,R3:()=>m,TV:()=>A,UR:()=>s,VK:()=>D,kF:()=>F,mB:()=>G,oc:()=>C,ps:()=>E,w$:()=>w,wR:()=>p,wf:()=>B,xE:()=>n,xh:()=>t,yI:()=>o});var d=c(59473),e=c(20369),f=c(54733),g=c(89409),h=c(62977),i=c(96089);let j=g.Pc,k=g.LJ,l=g.mh,m=g.fb,n=g.lJ,o=g.s4,p=g.mj,q=i.R,r=d.Ik({index:k,entryId:f.C3}).strict(),s=d.KC([d.ch(),r]),t=l.extend({data:d.Yj().min(1)}).strict(),u=h.$,v=d.Ik({tempId:j,text:d.Yj(),images:d.YO(l).max(10)}).strict(),w=d.Ik({provider:d.Yj().trim().min(1),modelId:d.Yj().trim().min(1),thinkingLevel:u}).strict(),x=d.Ik({tokens:d.ai().int().nonnegative().max(Number.MAX_SAFE_INTEGER).nullable(),contextWindow:d.ai().int().positive().max(Number.MAX_SAFE_INTEGER)}).strict(),y=d.g1(d.Yj(),d.Pq()),z=d.g1(d.Yj().min(1),y),A=d.k5(["normal","basic"]),B=d.Ik({extensionMode:A.default("normal"),presentationMode:A.default("normal"),initializationError:d.Yj().max(32e3).nullable().default(null),queues:d.Ik({steering:d.YO(v),followUp:d.YO(v)}).strict(),model:w.nullable(),capabilityMode:e.rY.nullable(),contextUsage:x.nullable(),plugins:z}).strict(),C=g.RX.extend({runtime:B}).strict(),D=d.Ik({sessionId:f.Kx,branchId:f._A,entryId:f.C3}).strict(),E=g.XM,F=D.extend({imageIndex:d.ai().int().nonnegative()}).strict(),G=g.y0},47574:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{VB:()=>t,dM:()=>q,hr:()=>r,nJ:()=>s,yO:()=>u});var e=c(76760),f=c(69503),g=c(12683),h=c(43037),i=c(40750),j=c(95220),k=c(32980),l=c(41468),m=c(72498),n=a([k,l,m]);[k,l,m]=n.then?(await n)():n;class q extends Error{constructor(a){super(`Chat source is not current: ${a.workId}/${a.sessionId}/${a.branchId}`),this.name="L2ChatSourceBindingError"}}class r extends Error{constructor(a){super(`Chat message was not found: ${a}`),this.name="L2ChatMessageNotFoundError"}}class s extends Error{constructor(a){super(`Chat commands are blocked by WorkSession lifecycle: ${a}`),this.name="L2ChatLifecycleBlockedError"}}class t extends Error{constructor(a,b){super(`工作会话 ${a} 阻止插件重载:${b}`),this.workId=a,this.reason=b,this.name="L2PluginReloadBlockedError"}}function o(a){try{return structuredClone(a)}catch{let{declaration:b,...c}=a;return structuredClone(c)}}function p(a,b){return JSON.stringify(a)===JSON.stringify(b)}class u{async initialize(a){let b=a.map(a=>this.buildRecord(a));for(let a of(this.recordsByWorkId.clear(),b))this.recordsByWorkId.set(a.source.workId,a)}addWorkSession(a){this.recordsByWorkId.set(a.workId,this.buildRecord(a))}async replaceWorkSession(a,b){let c=this.recordsByWorkId.get(a.workId)?.source;await this.closeRecord(a.workId),c&&this.publish({type:"source_invalidated",source:c}),this.recordsByWorkId.set(b.workId,this.buildRecord(b)),a.sessionId!==b.sessionId&&await (0,m.gb)(a.sessionId)}async refreshWorkSession(a){let b=this.recordsByWorkId.get(a.workId)?.source;await this.closeRecord(a.workId),b&&this.publish({type:"source_invalidated",source:b}),this.recordsByWorkId.set(a.workId,this.buildRecord(a))}async removeWorkSession(a){let b=this.recordsByWorkId.get(a.workId)?.source;await this.closeRecord(a.workId),b&&this.publish({type:"source_invalidated",source:b}),await (0,m.gb)(a.sessionId)}async pauseWorkSession(a){let b=this.recordsByWorkId.get(a);b&&(b.acceptingCommands=!1,(0,m.ls)(b.source.sessionId).nativeUi.cancelAll(),await b.commandTail)}resumeWorkSession(a){let b=this.recordsByWorkId.get(a);b&&(b.acceptingCommands=!0)}async pauseForProcessRestart(){let a=[...this.recordsByWorkId.values()],b=a.map(a=>({record:a,reason:this.pluginReloadBlockReason(a)})).find(a=>null!==a.reason);if(b?.reason)throw new t(b.record.source.workId,b.reason);for(let b of a)b.acceptingCommands=!1;await Promise.all(a.map(a=>a.commandTail));let c=a.map(a=>({record:a,reason:this.pluginReloadBlockReason(a)})).find(a=>null!==a.reason);if(c?.reason){for(let b of a)b.acceptingCommands=!0;throw new t(c.record.source.workId,c.reason)}let d=!0;return()=>{if(d)for(let b of(d=!1,a))this.recordsByWorkId.get(b.source.workId)===b&&(b.acceptingCommands=!0)}}metadataFor(a){return this.recordFor(a).metadata}statusFor(a){return this.statusForRecord(this.recordFor(a))}statusForRecord(a){return a.mainRunning?"main_running":a.backgroundTaskIds.size>0?"background_running":a.completedPending?"completed":"idle"}acknowledgeCompleted(a){let b=this.recordsByWorkId.get(a);if(!b||!b.completedPending)return!1;let c=this.statusForRecord(b);return b.completedPending=!1,this.publishRecordChanged(a,b.metadata,c),!0}isCurrentSource(a){let b=h.Pi.parse(a),c=this.recordsByWorkId.get(b.workId);return void 0!==c&&this.matches(c.source,b)}getProjectPreviewContext(a,b){let c=this.recordsByWorkId.get(a.workId);if(!c||c.workSession!==a)return null;let d=(0,f.Yj)((0,e.resolve)(b)),g=d===(0,f.Yj)((0,e.resolve)(a.cwd)),h=()=>(0,f.D)(c.state.runtime.plugins[f.s6]).directories.find(a=>(0,f.Yj)(a)===d),i=g?a.cwd:h();if(!i)return null;let j=()=>this.recordsByWorkId.get(a.workId)===c&&c.acceptingCommands&&this.matches(c.source,this.sourceFor(a))&&(g||void 0!==h());return j()?{cwd:i,isCurrent:j}:null}refreshPluginMessages(){for(let a of this.recordsByWorkId.values())if("basic"!==a.state.runtime.presentationMode)try{this.reprojectRecord(a,a.state.runtime.presentationMode)}catch(b){console.error("[Pi Desk][WorkSessionChatRuntime] 插件消息刷新失败,保留已有聊天",{workId:a.source.workId,message:b instanceof Error?b.message:String(b)})}}setPresentation(a,b){let c=this.currentRecord(a);return this.enqueueCommand(c,async()=>{if(((0,j.P)()||"basic"===c.state.runtime.extensionMode)&&"normal"===b)throw Error("基础模式不启用插件消息展示,请先恢复插件聊天");c.state.runtime.presentationMode!==b&&this.reprojectRecord(c,b)})}reprojectRecord(a,b){let c=(0,m.ls)(a.source.sessionId).readChatSnapshot(),d=new Map(c.entries.map(a=>[a.entryId,a])),e="basic"===b,f=a.state.messages.map(b=>{let c=d.get(b.location.entryId);if(!c)throw Error(`无法重新投影消息:${b.location.entryId}`);return(0,l.Cz)(b.location.index,c.entryId,c.timestampMs,c.message,a.source,e)}),g=a.state.temporaryMessages.map(b=>{let c=a.rawTemporaryMessages.get(b.location.tempId);if(!c)throw Error(`临时消息基线尚不可重投影:${b.location.tempId}`);return(0,l.QS)(b.location.tempId,c,a.source,!1,"update",e)});a.state={messages:f,temporaryMessages:g,runtime:{...a.state.runtime,presentationMode:b}},a.forceFullSync=!0,a.sourceEventVersion+=1,this.publish({type:"source_event",source:a.source,version:a.sourceEventVersion,event:this.createSync(a.source,null).event})}prepareSource(a){let b=this.currentRecord(a);return this.enqueueCommand(b,()=>this.syncRecordRuntime(b))}async syncRecordRuntime(a){let b=a.source,c=h.wf.parse({...await (0,m.ls)(b.sessionId).readChatRuntime(),presentationMode:a.state.runtime.presentationMode});this.isCurrentSource(b)&&(p(a.state.runtime,c)||this.applySourceEvent(b,{type:"runtime_update",runtime:c}),"basic"===c.extensionMode&&"basic"!==a.state.runtime.presentationMode&&this.reprojectRecord(a,"basic"))}createSync(a,b){let c=this.currentRecord(a),d=c.source,e=c.state.messages,f=c.state.temporaryMessages,g=c.state.runtime,h=null===b?void 0:e[b.index],i=null!==b&&h?.location.entryId===b.entryId;return null===b||i||console.warn("[Pi Desk][WorkSessionChatRuntime] 客户端消息 cursor 不匹配,回退全量",{workId:d.workId,sessionId:d.sessionId,branchId:d.branchId,clientCursorIndex:b.index,clientCursorEntryId:b.entryId,serverEntryIdAtIndex:h?.location.entryId??null,serverLatestIndex:e.at(-1)?.location.index??-1}),{event:null!==b&&i&&!c.forceFullSync?{type:"session_sync",mode:"incremental",baseCursor:b,messages:e.slice(b.index+1).map(l.NA),temporaryMessages:f,runtime:g}:{type:"session_sync",mode:"full",baseCursor:null,messages:e.map(l.NA),temporaryMessages:f,runtime:g},watermark:c.sourceEventVersion}}getImage(a){let b=h.kF.parse(a),c=this.recordForSession(b.sessionId,b.branchId),d=c.state.messages.find(a=>a.location.entryId===b.entryId);if(!d||"user"!==d.fixed.type&&"tool"!==d.fixed.type)throw new r(`${b.entryId}/${b.imageIndex}`);return h.mB.parse((0,m.ls)(c.source.sessionId).readChatImage(b.entryId,b.imageIndex))}getMessageDetail(a){let b=h.VK.parse(a),c=this.recordForSession(b.sessionId,b.branchId).state.messages.find(a=>a.location.entryId===b.entryId);if(!c)throw new r(b.entryId);return h.ps.parse({index:c.location.index,entryId:c.location.entryId,detail:c.detail??null})}getModelContext(a){let b=g.FF.parse(a),c=this.currentRecord(b.source);return this.enqueueCommand(c,async()=>g.LK.parse(await (0,m.ls)(c.source.sessionId).readModelContext()))}send(a){let b=this.currentRecord(a.source);if((0,m.ls)(a.source.sessionId).nativeUi.hasPending)return Promise.reject(Error("请先处理当前插件问题,或停止当前任务"));let c=()=>b.workSession.send({mode:a.mode,text:a.text,images:a.images});return b.compactionStart?b.acceptingCommands?b.compactionStart.then(a=>{if(!b.acceptingCommands)throw new s(b.source.workId);return a?c():this.enqueueCommand(b,c)}):Promise.reject(new s(b.source.workId)):this.enqueueCommand(b,c)}interrupt(a){let b=this.currentRecord(a);return(0,m.ls)(a.sessionId).nativeUi.hasPending?b.workSession.interrupt():this.enqueueCommand(b,()=>b.workSession.interrupt())}compact(a){let b,c=this.currentRecord(a);if(c.compactionStart)return Promise.reject(Error("上下文正在压缩"));let d=new Promise(a=>{b=a});c.compactionStart=d;let e=this.enqueueCommand(c,()=>{try{let a=(0,m.ls)(c.source.sessionId).compact();return b(!0),a}catch(a){throw b(!1),a}});return e.then(()=>{b(!1),c.compactionStart===d&&(c.compactionStart=null)},()=>{b(!1),c.compactionStart===d&&(c.compactionStart=null)}),e}reload(a,b){let c=this.currentRecord(a);return(0,m.ls)(a.sessionId).nativeUi.cancelAll(),this.enqueueCommand(c,async()=>{try{await (0,m.ls)(c.source.sessionId).reload(b)}finally{this.recordsByWorkId.get(a.workId)===c&&(await this.syncRecordRuntime(c),"basic"===c.state.runtime.extensionMode&&"basic"!==c.state.runtime.presentationMode&&this.reprojectRecord(c,"basic"))}})}restoreQueuedMessages(a){let b=this.currentRecord(a);return this.enqueueCommand(b,()=>b.workSession.restoreQueuedMessages())}setModel(a){let b=this.currentRecord(a.source);return this.enqueueCommand(b,()=>b.workSession.setModel(a.model))}setCapabilityMode(a){let b=this.currentRecord(a.source);return this.enqueueCommand(b,()=>(0,m.ls)(b.source.sessionId).setCapabilityMode(a.capabilityMode))}invokePluginMethod(a){let b=this.currentRecord(a.source);return this.enqueueCommand(b,()=>(0,m.ls)(b.source.sessionId).invokePluginMethod(b.source,a.pluginName,a.method,a.input))}listNativeCommands(a){let b=this.currentRecord(a);return this.enqueueCommand(b,()=>(0,m.ls)(b.source.sessionId).listNativeCommands())}executeNativeCommand(a,b,c){let d=this.currentRecord(a);return this.enqueueCommand(d,()=>(0,m.ls)(d.source.sessionId).executeNativeCommand(b,c))}listNativeTools(a){let b=this.currentRecord(a);return this.enqueueCommand(b,()=>(0,m.ls)(b.source.sessionId).listNativeTools())}executeDirectBash(a,b){let c=this.currentRecord(a);return c.directBashActive?Promise.reject(new k.yT):(c.directBashActive=!0,this.enqueueCommand(c,()=>(0,m.ls)(c.source.sessionId).executeDirectBash(b)).finally(()=>{c.directBashActive=!1}))}abortDirectBash(a){let b=this.currentRecord(a);return(0,m.ls)(b.source.sessionId).abortDirectBash()}subscribe(a){return this.listeners.add(a),()=>this.listeners.delete(a)}subscribeRecordChanges(a){return this.recordListeners.add(a),()=>this.recordListeners.delete(a)}subscribePluginPush(a){return this.pluginPushListeners.add(a),()=>this.pluginPushListeners.delete(a)}buildRecord(a){let b=this.sourceFor(a),c=(0,m.ls)(a.sessionId),d=c.readChatSnapshot(),e=d.entries.map((a,c)=>(0,l.Cz)(c,a.entryId,a.timestampMs,a.message,b,(0,j.P)())),f=h.oc.parse({messages:e,temporaryMessages:[],runtime:{...i.L6,extensionMode:(0,j.P)()?"basic":"normal",presentationMode:(0,j.P)()?"basic":"normal"}}),g=f.messages.find(a=>"user"===a.fixed.type),k=g?h.xE.safeParse(g.summary):null,n=k?.success&&k.data.text.trim()||null,o={workSession:a,source:b,state:f,sourceEventVersion:0,forceFullSync:(0,j.P)(),rawTemporaryMessages:new Map,metadata:{sessionTitle:d.sessionName??n,messageCounts:{user:f.messages.filter(a=>"user"===a.fixed.type).length,total:f.messages.length},lastMessageUpdatedAt:f.messages.at(-1)?.fixed.timestampMs??null},mainRunning:!1,backgroundTaskIds:new Set(c.readChatBackgroundTaskIds()),completedPending:!1,acceptingCommands:!0,directBashActive:!1,compactionStart:null,commandTail:Promise.resolve(),unsubscribeWorker:()=>void 0};return o.unsubscribeWorker=c.subscribeChat(a=>this.handleWorkerEvent(o,a)),o}handleWorkerEvent(a,b){if(this.recordsByWorkId.get(a.source.workId)!==a)return;let c=a.metadata,d=this.statusForRecord(a);switch(b.type){case"message_start":a.rawTemporaryMessages.set(b.tempId,o(b.message)),this.applySourceEvent(a.source,{type:"message_start",snapshot:(0,l.QS)(b.tempId,b.message,a.source,!1,"temporary","basic"===a.state.runtime.presentationMode)});return;case"message_update":{let c=a.state.temporaryMessages.find(a=>a.location.tempId===b.tempId);if(!c)throw Error(`Temporary chat message was not found: ${b.tempId}`);a.rawTemporaryMessages.set(b.tempId,o(b.message));let d=(0,l.Ht)(c,(0,l.QS)(b.tempId,b.message,a.source,!1,"update","basic"===a.state.runtime.presentationMode));d&&this.applySourceEvent(a.source,d);return}case"message_commit":{let c=a.state.temporaryMessages.find(a=>a.location.tempId===b.tempId);if(!c)throw Error(`Temporary chat message was not found: ${b.tempId}`);let d=(0,l.QS)(b.tempId,b.message,a.source,!1,"final","basic"===a.state.runtime.presentationMode),e=(0,l.Ht)(c,d);e&&this.applySourceEvent(a.source,e),this.replaceCanonicalTemporary(a,b.tempId,b.message),a.rawTemporaryMessages.delete(b.tempId),this.applySourceEvent(a.source,{type:"message_commit",location:{tempId:b.tempId},durable:{index:a.state.messages.length,entryId:b.entryId},fixed:{timestampMs:b.timestampMs}});return}case"message_discard":a.rawTemporaryMessages.delete(b.tempId),this.applySourceEvent(a.source,{type:"message_discard",location:{tempId:b.tempId}});return;case"plugin_push":this.publishPluginPush({pluginName:b.pluginName,target:{scope:"session",source:a.source},event:b.event,data:structuredClone(b.data)});return;case"runtime_changed":{let c=h.wf.parse({...b.runtime,presentationMode:a.state.runtime.presentationMode});p(a.state.runtime,c)||this.applySourceEvent(a.source,{type:"runtime_update",runtime:c}),"basic"===c.extensionMode&&"basic"!==a.state.runtime.presentationMode&&this.reprojectRecord(a,"basic");return}case"agent_started":if(a.mainRunning)return;a.mainRunning=!0,a.completedPending=!1,this.publishRecordChanged(a.source.workId,c,d);return;case"main_operation_cancelled":case"main_operation_finished":if(!a.mainRunning)return;a.mainRunning=!1,a.completedPending=!1,this.publishRecordChanged(a.source.workId,c,d);return;case"agent_settled":{let b=a.mainRunning||a.backgroundTaskIds.size>0;a.mainRunning=!1,b&&0===a.backgroundTaskIds.size&&(a.completedPending=!0),this.publishRecordChanged(a.source.workId,c,d);return}case"background_tasks_changed":{let e=a.mainRunning||a.backgroundTaskIds.size>0;a.backgroundTaskIds=new Set(b.taskIds),e&&!a.mainRunning&&0===a.backgroundTaskIds.size&&(a.completedPending=!0),this.publishRecordChanged(a.source.workId,c,d);return}case"session_info_changed":a.metadata={...a.metadata,sessionTitle:b.sessionTitle},this.publishRecordChanged(a.source.workId,c,d);return}}replaceCanonicalTemporary(a,b,c){let d=a.state.temporaryMessages.findIndex(a=>a.location.tempId===b);if(d<0)throw Error(`Temporary chat message was not found: ${b}`);let e=[...a.state.temporaryMessages];e[d]=(0,l.QS)(b,c,a.source,!0,"final","basic"===a.state.runtime.presentationMode),a.state={...a.state,temporaryMessages:e}}applySourceEvent(a,b){let c=this.currentRecord(a),d=c.source;if(c.state=(0,i.k_)(c.state,b),c.sourceEventVersion+=1,"message_commit"===b.type){let a=c.state.messages[b.durable.index];if(!a||a.location.entryId!==b.durable.entryId)throw Error(`Committed chat message is missing: ${b.durable.index}/${b.durable.entryId}`);let e=c.metadata;c.metadata=this.metadataFromState(c),this.publishRecordChanged(d.workId,e,this.statusForRecord(c))}this.publish({type:"source_event",source:d,version:c.sourceEventVersion,event:b})}metadataFromState(a){let b=a.state.messages.find(a=>"user"===a.fixed.type),c=b?h.xE.safeParse(b.summary):null,d=c?.success&&c.data.text.trim()||null;return{sessionTitle:a.metadata.sessionTitle??d,messageCounts:{user:a.state.messages.filter(a=>"user"===a.fixed.type).length,total:a.state.messages.length},lastMessageUpdatedAt:a.state.messages.at(-1)?.fixed.timestampMs??null}}enqueueCommand(a,b){if(!a.acceptingCommands)return Promise.reject(new s(a.source.workId));let c=a.commandTail.then(b,b);return a.commandTail=c.then(()=>void 0,()=>void 0),c}pluginReloadBlockReason(a){return(0,m.ls)(a.source.sessionId).nativeUi.hasPending?"原生插件问题正在等待回答":a.directBashActive?"Direct Bash 正在运行":a.mainRunning?"主 Agent 正在运行":a.backgroundTaskIds.size>0?"插件后台任务正在运行":(0,m.ls)(a.source.sessionId).readPluginReloadBlockReason()}async closeRecord(a){let b=this.recordsByWorkId.get(a);b&&(b.acceptingCommands=!1,(0,m.ls)(b.source.sessionId).nativeUi.cancelAll(),await b.commandTail,b.unsubscribeWorker(),b.rawTemporaryMessages.clear(),this.recordsByWorkId.delete(a))}recordFor(a){let b=this.recordsByWorkId.get(a.workId);if(!b||!this.matches(b.source,this.sourceFor(a)))throw Error(`WorkSession chat state is not initialized: ${a.workId}`);return b}sourceFor(a){return h.Pi.parse({workId:a.workId,sessionId:a.sessionId,branchId:a.branchId})}currentRecord(a){let b=h.Pi.parse(a),c=this.recordsByWorkId.get(b.workId);if(!c||!this.matches(c.source,b))throw new q(b);return c}recordForSession(a,b){let c=[...this.recordsByWorkId.values()].find(c=>c.source.sessionId===a&&c.source.branchId===b);if(c)return c;throw new q({workId:"unknown",sessionId:a,branchId:b})}matches(a,b){return a.workId===b.workId&&a.sessionId===b.sessionId&&a.branchId===b.branchId}publishPluginPush(a){for(let b of[...this.pluginPushListeners])try{b(a)}catch(b){console.error("[Pi Desk][WorkSessionChatRuntime] Plugin Push 监听器执行失败",{pluginName:a.pluginName,event:a.event,errorName:b instanceof Error?b.name:"UnknownError"})}}publish(a){for(let b of[...this.listeners])try{b(a)}catch(b){console.error("[Pi Desk][WorkSessionChatRuntime] Source 事件监听器执行失败",{eventType:a.type,workId:a.source.workId,errorName:b instanceof Error?b.name:"UnknownError"})}}publishRecordChanged(a,b,c){for(let d of[...this.recordListeners])try{d(a,b,c)}catch(b){console.error("[Pi Desk][WorkSessionChatRuntime] Record 监听器执行失败",{workId:a,errorName:b instanceof Error?b.name:"UnknownError"})}}constructor(){this.recordsByWorkId=new Map,this.listeners=new Set,this.recordListeners=new Set,this.pluginPushListeners=new Set}}d()}catch(a){d(a)}})},48452:(a,b,c)=>{c.d(b,{Y:()=>f,n:()=>e});var d=c(59473);let e="X-Pi-Desk-Client-Id",f=d.Yj().uuid()},54733:(a,b,c)=>{c.d(b,{AA:()=>p,Bn:()=>u,C3:()=>j,Ck:()=>s,ER:()=>m,Jl:()=>v,Kx:()=>i,MT:()=>l,MY:()=>q,Ms:()=>w,TO:()=>n,_A:()=>k,eW:()=>g,ik:()=>h,jw:()=>o,kg:()=>r,uX:()=>t});var d=c(59473),e=c(83905),f=c(2364);let g=d.Yj().trim().min(1),h=e.m4,i=e.$E,j=e.Rv,k=d.Yj().trim().min(1),l=d.ai().int().nonnegative(),m=d.Ik({workId:g,cwd:h,sessionId:i}).strict(),n=d.YO(m),o=d.k5(["main_running","background_running","completed","idle"]),p=d.Ik({user:d.ai().int().nonnegative(),total:d.ai().int().nonnegative()}).strict().refine(a=>a.user<=a.total,{message:"user message count cannot exceed total message count"}),q=m.extend({branchId:k,projectName:d.Yj().trim().min(1),sessionTitle:d.Yj().trim().min(1).nullable(),status:o,messageCounts:p,lastMessageUpdatedAt:f.k.nullable()}).strict(),r=d.Ik({workSessions:d.YO(q),pinnedCount:l}).strict().refine(a=>a.pinnedCount<=a.workSessions.length,{message:"pinnedCount cannot exceed work session count",path:["pinnedCount"]}),s=d.Ik({cwd:h,sessionId:i.optional()}).strict(),t=d.Ik({workSession:q}).strict(),u=d.Ik({workId:g}).strict(),v=d.Ik({workIds:d.YO(g),pinnedCount:l}).strict().superRefine((a,b)=>{new Set(a.workIds).size!==a.workIds.length&&b.addIssue({code:"custom",message:"workIds cannot contain duplicates",path:["workIds"]}),a.pinnedCount>a.workIds.length&&b.addIssue({code:"custom",message:"pinnedCount cannot exceed workIds length",path:["pinnedCount"]})}),w=d.KC([d.Ik({workId:g,cwd:h,sessionId:i}).strict(),d.Ik({workId:g}).strict()])},62977:(a,b,c)=>{c.d(b,{$:()=>d});let d=c(59473).k5(["off","minimal","low","medium","high","xhigh","max"])},72904:(a,b,c)=>{c.d(b,{H:()=>g});var d=c(610);function e(a,b){return JSON.stringify(a)===JSON.stringify(b)}function f(a,b,c,d,f){for(let g of new Set([...Object.keys(b),...Object.keys(c)])){let h=b[g],i=Object.hasOwn(c,g),j=i?c[g]:null;if(e(h,j))continue;let k=i?function(a,b){if("string"==typeof a&&"string"==typeof b&&b.startsWith(a))return b.slice(a.length)||null;if(Array.isArray(a)&&Array.isArray(b)&&a.length<=b.length&&a.every((a,c)=>e(a,b[c]))){let c=b.slice(a.length);return c.length>0?c:null}return null}(h,j):null;null!==k?f[`${a}.${g.replace(/\\/g,"\\\\").replace(/\./g,"\\.")}`]=k:d[g]=j}}function g(a,b){var c,e;let g;if(a.fixed.type!==b.fixed.type)throw Error(`Chat message type changed: ${a.fixed.type}/${b.fixed.type}`);let h=(g={},a.fixed.viewKey!==b.fixed.viewKey&&(g.viewKey=b.fixed.viewKey),"status"in a.fixed&&"status"in b.fixed&&a.fixed.status!==b.fixed.status&&(g.status=b.fixed.status),a.fixed.hasDetail!==b.fixed.hasDetail&&(g.hasDetail=b.fixed.hasDetail),"usage"in a.fixed&&"usage"in b.fixed&&(c=a.fixed.usage)!==(e=b.fixed.usage)&&(null===c||null===e||c.inputTokens!==e.inputTokens||c.outputTokens!==e.outputTokens||c.cacheReadTokens!==e.cacheReadTokens||c.costUsd!==e.costUsd)&&(g.usage=b.fixed.usage),Object.keys(g).length>0?g:void 0),i={},j={},k={};f("summary",a.summary,b.summary,i,k),b.fixed.hasDetail&&f("detail",a.detail??{},b.detail??{},j,k);let l=Object.keys(i).length>0,m=Object.keys(j).length>0,n=Object.keys(k).length>0;return h||l||m||n?d.ef.parse({type:"message_update",location:a.location,...h?{fixed:h}:{},...l?{summary:i}:{},...m?{detail:j}:{},...n?{increments:k}:{}}):null}},79626:(a,b,c)=>{c.d(b,{N:()=>u,d:()=>t});var d=c(89409),e=c(59473),f=c(63719);let g=e.Ik({mode:e.k5(["sync","async"]),message:e.Yj()}).strict(),h="pi-desk/message-declaration-error",i=new WeakMap,j=e.Ik({viewKey:e.Yj().trim().min(3).max(129).regex(/^[a-z0-9]+(?:-[a-z0-9]+)*\/[a-z0-9]+(?:-[a-z0-9]+)*$/),summary:e.g1(e.Yj(),e.Pq()),detail:e.g1(e.Yj(),e.Pq()).nullable()}).strict();function k(a){switch(a.type){case"user":return"pi-desk/user";case"assistant":return"pi-desk/assistant";case"tool":{let b=a.name.toLowerCase().split(".").at(-1);if("pidesk"===b)return"pi-desk/pidesk";if("bash"===b)return"pi-desk/bash-tool";if("codemode"===b)return"pi-desk/codemode";return"read"===b||"write"===b||"edit"===b?`pi-desk/${b}`:"pi-desk/tool"}case"bash":return"pi-desk/bash";case"custom":return"pi-desk/custom";case"compaction":return"pi-desk/compaction"}}function l(a){return null===a||"object"!=typeof a||Array.isArray(a)?null:a}function m(a){return l(a.result)}function n(a,b){return{...a.summary,path:function(a){let b=a.arguments.path??a.arguments.file_path;if("string"!=typeof b)return null;let c=f.eC.safeParse(b);return c.success?c.data:null}(b)}}function o(a){if(a.declaration)return a.declaration.message;switch(a.type){case"user":return{kind:"user",text:a.text,images:a.images};case"assistant":return{kind:"assistant",text:a.text,thinking:a.thinking,stopReason:a.status};case"tool":return{kind:"tool",toolName:a.name,toolCallId:"",arguments:{},partialResult:null,result:a.output?{output:a.output}:null,isError:"error"===a.status};case"bash":return{kind:"bash",command:a.command,output:a.output,exitCode:"completed"===a.status?0:null,cancelled:"aborted"===a.status,truncated:!1};case"custom":return{kind:"custom",customType:"display-message",content:a.text,details:null};case"compaction":return{kind:"custom",customType:"pi-desk/compaction",content:"",details:a.summary?{text:a.summary}:null}}}function p(a,b,c){return{pluginName:"pi-desk",declarationName:a,builtin:!0,declaration:{priority:b,match:c,project:a=>a.defaultProjection}}}let q=[p("pidesk",-900,a=>"tool"===a.message.kind&&"pidesk"===a.message.toolName),p("read",-900,a=>"tool"===a.message.kind&&"read"===a.message.toolName),p("write",-900,a=>"tool"===a.message.kind&&"write"===a.message.toolName),p("edit",-900,a=>"tool"===a.message.kind&&"edit"===a.message.toolName),p("bash-tool",-900,a=>"tool"===a.message.kind&&"bash"===a.message.toolName),p("user",-1e3,a=>"user"===a.message.kind),p("assistant",-1e3,a=>"assistant"===a.message.kind),p("tool",-1e3,a=>"tool"===a.message.kind),p("bash",-1e3,a=>"bash"===a.message.kind),p("custom",-1e3,a=>"custom"===a.message.kind)];function r(a){var b;let c=a.error instanceof Error?a.error:null,d=a.candidate;for(let b of d?[d]:a.candidates??[]){let d=i.get(b.declaration)??new Set;d.has(a.phase)||(d.add(a.phase),i.set(b.declaration,d),console.warn("[Pi Desk][MessageDeclaration] 插件投影失败,保留基础展示入口",{pluginName:b.pluginName,declarationName:b.declarationName,phase:a.phase,message:(c?.message??"Message Declaration conflict").slice(0,2e3)}))}return{viewKey:h,summary:{text:"string"==typeof a.defaultProjection.summary.text?a.defaultProjection.summary.text:"",phase:a.phase,pluginName:d?.pluginName??null,declarationName:d?.declarationName??null},detail:{phase:a.phase,pluginName:d?.pluginName??null,declarationName:d?.declarationName??null,priority:d?.declaration.priority??null,errorName:c?.name??null,errorMessage:c?.message??String(a.error??"Message Declaration conflict"),errorStack:c?.stack??null,conflicts:(a.candidates??[]).map(a=>({pluginName:a.pluginName,declarationName:a.declarationName,priority:a.declaration.priority})),defaultProjection:{viewKey:(b=a.defaultProjection).viewKey,summary:b.summary,detail:b.detail}}}}function s(a,b,c,e,f,i,p){let s=function(a){let b=function(a){switch(a.type){case"user":return{viewKey:k(a),summary:{text:function(a){let b=a.text.lastIndexOf("\n\n");if(0===a.images.length||b<0)return a.text;let c=a.text.slice(b+2).split("\n");return c.length>a.images.length?a.text:c.every(b=>{let c=/^\[Image: original \d+x\d+, displayed at (\d+)x(\d+)\. Multiply coordinates by \d+\.\d{2} to map to original image\.\]$/.exec(b);return null!==c&&a.images.some(a=>a.width===Number(c[1])&&a.height===Number(c[2]))})?a.text.slice(0,b):a.text}(a),images:a.images.map(a=>({...a}))},detail:null};case"assistant":return{viewKey:k(a),summary:{text:a.text,errorMessage:a.errorMessage,...void 0===a.model?{}:{model:a.model}},detail:a.thinking.length>0?{thinking:a.thinking}:null};case"tool":{let b=k(a),c={...a.images?.length&&["pi-desk/tool","pi-desk/read","pi-desk/codemode"].includes(b)?{images:a.images.map(a=>({...a}))}:{},name:a.name,reasoning:a.reasoning,inputPreview:a.inputPreview,activity:a.activity},d=a.durationMs??null,e=a.startedAtMs??null,f={viewKey:b,summary:"pi-desk/bash-tool"===b?{...c,timing:null!==d?{durationMs:d}:null!==e?{startedAtMs:e}:null}:c,detail:"pi-desk/codemode"===b?{output:a.output,...a.nestedCalls?{nestedCalls:a.nestedCalls}:{}}:a.output?{output:a.output}:null},h=o(a);return"tool"===h.kind?function(a,b){let c=function(a){let b=m(a);if(!b)return null;let c=b.content;if("string"==typeof c)return c;if(Array.isArray(c)){let a=[],b=!1;for(let d of c){let c=l(d);c?.type==="text"&&"string"==typeof c.text&&(b=!0,a.push(c.text))}if(b)return a.join("\n")}return"string"==typeof b.output?b.output:null}(b)??("string"==typeof a.detail?.output?a.detail.output:null);switch(a.viewKey){case"pi-desk/pidesk":{let d=c??"";try{let a=g.safeParse(JSON.parse(d));a.success&&(d=a.data.message)}catch{}return{viewKey:a.viewKey,summary:{input:b.arguments},detail:{output:d}}}case"pi-desk/read":let d;return{viewKey:a.viewKey,summary:n(a,b),detail:Array.isArray(d=m(b)?.content)&&d.some(a=>{let b=l(a);return b?.type==="image"})||null===c?null:{content:c}};case"pi-desk/edit":{let d=l(m(b)?.details??null)?.diff;return{viewKey:a.viewKey,summary:n(a,b),detail:b.isError||"string"!=typeof d?null===c?null:{kind:"output",content:c}:{kind:"diff",content:d}}}case"pi-desk/write":{let d=b.arguments.content;return{viewKey:a.viewKey,summary:n(a,b),detail:b.isError&&null!==c?{kind:"output",content:c}:"string"==typeof d?{kind:"content",content:d}:null===c?null:{kind:"output",content:c}}}default:return a}}(f,h):f}case"bash":return{viewKey:k(a),summary:{command:a.command},detail:a.output?{output:a.output}:null};case"custom":return{viewKey:k(a),summary:{text:a.text},detail:null};case"compaction":return{viewKey:k(a),summary:{},detail:a.summary?{text:a.summary}:null}}}(a.message);if("compaction"===a.message.type)return b;let c={source:a.source,stage:a.stage,message:o(a.message),raw:a.message.declaration?.raw??a.message,defaultProjection:b},d=[...(a.declarations??[]).map(a=>({...a,builtin:!1})),...q];for(let a of[...new Set(d.map(a=>a.declaration.priority))].sort((a,b)=>b-a)){let e,f=d.filter(b=>b.declaration.priority===a),g=[];for(let a of f)try{a.declaration.match(c)&&g.push(a)}catch(c){return r({phase:"match",candidate:a,error:c,defaultProjection:b})}if(0===g.length)continue;if(g.length>1)return r({phase:"conflict",candidates:g,defaultProjection:b});let i=g[0];try{e=i.declaration.project(c)}catch(a){return r({phase:"project",candidate:i,error:a,defaultProjection:b})}try{return function(a,b){let c=j.parse(a);if(!b&&c.viewKey===h)throw Error("Host reserved Message Declaration Error viewKey cannot be registered");return c}(e,i.builtin)}catch(a){return r({phase:"validate",candidate:i,error:a,defaultProjection:b})}}return b}({source:e,stage:f,message:c,declarations:p}),t="tool"===c.type||"bash"===c.type||"custom"===c.type||"compaction"===c.type,u=null!==s.detail&&(!t||i),v={location:a,fixed:function(a,b,c){let d={timestampMs:a,viewKey:c.viewKey,hasDetail:null!==c.detail};switch(b.type){case"user":return{...d,type:"user"};case"assistant":return{...d,type:"assistant",status:b.status,usage:b.usage};case"tool":return{...d,type:"tool",status:b.status,usage:b.usage};case"bash":return{...d,type:"bash",status:b.status};case"custom":case"compaction":return{...d,type:"custom"}}}(b,c,s),summary:s.summary,...u?{detail:s.detail}:{}};return"tempId"in a?d.s4.parse(v):d.mj.parse(v)}function t(a,b,c,d,e=!1,f="temporary"){return s({tempId:a},null,b,c,f,e,d)}function u(a,b,c,d,e,f){return s({index:a,entryId:b},c,d,e,"durable",!0,f)}},83905:(a,b,c)=>{c.d(b,{$E:()=>f,Rv:()=>g,m4:()=>e});var d=c(59473);let e=d.Yj().trim().min(1),f=d.Yj().trim().min(1),g=d.Yj().trim().min(1)},89409:(a,b,c)=>{c.d(b,{D8:()=>I,Hf:()=>H,LJ:()=>j,Pc:()=>i,RX:()=>T,V6:()=>t,XM:()=>U,XW:()=>P,dG:()=>O,fK:()=>S,fb:()=>s,lJ:()=>B,mh:()=>m,mj:()=>M,q5:()=>A,s4:()=>L,wH:()=>Q,y0:()=>V});var d=c(59473),e=c(83905),f=c(63719),g=c(2364),h=c(25984);let i=d.Yj().uuid(),j=d.ai().int().nonnegative(),k=d.Yj().trim().min(3).max(129).regex(/^[a-z0-9]+(?:-[a-z0-9]+)*\/[a-z0-9]+(?:-[a-z0-9]+)*$/),l=d.k5(["image/jpeg","image/png","image/webp","image/gif"]),m=d.Ik({mimeType:l,width:d.ai().int().positive(),height:d.ai().int().positive()}).strict(),n=d.k5(["running","completed","error","aborted"]),o=d.k5(["running","completed","error"]),p=d.ai().int().nonnegative().max(Number.MAX_SAFE_INTEGER),q=d.Ik({inputTokens:p,outputTokens:p,cacheReadTokens:p,costUsd:d.ai().finite().nonnegative()}).strict(),r=d.Yj().trim().min(1).nullable(),s=d.Ik({tempId:i}).strict(),t=d.Ik({index:j,entryId:e.Rv}).strict(),u=d.Ik({timestampMs:g.k.nullable(),type:d.eu("user"),viewKey:k,hasDetail:d.zM()}).strict(),v=d.Ik({timestampMs:g.k.nullable(),type:d.eu("assistant"),viewKey:k,status:n,hasDetail:d.zM(),usage:q}).strict(),w=d.Ik({timestampMs:g.k.nullable(),type:d.eu("tool"),viewKey:k,status:o,hasDetail:d.zM(),usage:q.nullable()}).strict(),x=d.Ik({timestampMs:g.k.nullable(),type:d.eu("bash"),viewKey:k,status:n,hasDetail:d.zM()}).strict(),y=d.Ik({timestampMs:g.k.nullable(),type:d.eu("custom"),viewKey:k,hasDetail:d.zM()}).strict();function z(a){let b=u.extend({timestampMs:a}).strict(),c=v.extend({timestampMs:a}).strict(),e=w.extend({timestampMs:a}).strict(),f=x.extend({timestampMs:a}).strict(),g=y.extend({timestampMs:a}).strict();return{user:b,assistant:c,tool:e,bash:f,custom:g,message:d.gM("type",[b,c,e,f,g])}}d.gM("type",[u,v,w,x,y]);let A=z(d.ch()).message;z(g.k).message;let B=d.Ik({text:d.Yj(),images:d.YO(m)}).strict(),C=d.Ik({provider:d.Yj(),modelId:d.Yj()}).strict();d.Ik({text:d.Yj(),errorMessage:d.Yj().nullable().default(null),model:C.nullable().optional()}).strict();let D={name:d.Yj().trim().min(1),reasoning:r,inputPreview:r,activity:r};function E(){return d.Ik({...D,path:f.eC.nullable()}).strict()}d.Ik({...D,images:d.YO(m).optional()}).strict();let F=d.KC([d.Ik({startedAtMs:g.k}).strict(),d.Ik({durationMs:d.ai().int().nonnegative().max(Number.MAX_SAFE_INTEGER)}).strict()]);d.Ik({...D,timing:F.nullable()}).strict(),E().extend({images:d.YO(m).optional()}).strict(),E(),E(),d.Ik({command:d.Yj().min(1)}).strict(),d.Ik({text:d.Yj()}).strict(),d.Ik({thinking:d.Yj()}).strict();let G=d.Ik({complete:d.zM(),calls:d.YO(d.Ik({name:d.Yj(),arguments:d.g1(d.Yj(),d.Pq()).optional(),argumentsBytes:d.ai().int().nonnegative().optional(),status:d.k5(["ok","error","unfinished"]),durationMs:d.ai().finite().nonnegative().optional(),error:d.Yj().optional()}).strict())}).strict();d.Ik({output:d.Yj(),nestedCalls:G.optional()}).strict(),d.Ik({output:d.Yj()}).strict(),d.Ik({content:d.Yj()}).strict(),d.gM("kind",[d.Ik({kind:d.eu("diff"),content:d.Yj()}).strict(),d.Ik({kind:d.eu("output"),content:d.Yj()}).strict()]),d.gM("kind",[d.Ik({kind:d.eu("content"),content:d.Yj()}).strict(),d.Ik({kind:d.eu("output"),content:d.Yj()}).strict()]),d.Ik({output:d.Yj()}).strict(),d.Ik({text:d.Yj().min(1)}).strict();let H=d.g1(d.Yj(),d.Pq()),I=d.g1(d.Yj(),d.Pq()),J=d.KC([I,d.ch()]);function K(a,b){return d.Ik({location:a,fixed:z(b).message,summary:H,detail:I.optional()}).strict().superRefine((a,b)=>{void 0===a.detail||a.fixed.hasDetail||b.addIssue({code:"custom",message:"message detail requires hasDetail=true",path:["detail"]})})}let L=K(s,d.ch()),M=K(t,g.k);function N(a,b){0===Object.keys(a).length&&b.addIssue({code:"custom",message:"patch requires at least one changed field"})}let O=d.Ik({viewKey:k.optional(),status:d.KC([n,o]).optional(),hasDetail:d.zM().optional(),usage:q.nullable().optional()}).strict().superRefine(N),P=d.g1(d.Yj(),d.Pq()).superRefine(N),Q=d.g1(d.Yj(),d.Pq()).superRefine(N),R=d.KC([d.Yj().min(1),d.YO(d.Pq()).min(1)]),S=d.g1(d.Yj(),R).superRefine((a,b)=>{for(let c of(N(a,b),Object.keys(a)))try{(0,h.U)(c)}catch(a){b.addIssue({code:"custom",message:a instanceof Error?a.message:"increment path is invalid",path:[c]})}}),T=d.Ik({messages:d.YO(M),temporaryMessages:d.YO(L)}).strict(),U=d.Ik({index:j,entryId:e.Rv,detail:J}).strict(),V=d.Ik({mimeType:l,data:d.Yj().min(1)}).strict()},96089:(a,b,c)=>{c.d(b,{R:()=>f});var d=c(59473),e=c(83905);let f=d.Ik({workId:d.Yj().trim().min(1),sessionId:e.$E,branchId:d.Yj().trim().min(1)}).strict()}};
1
+ "use strict";exports.id=6917,exports.ids=[6917],exports.modules={18:(a,b,c)=>{c.d(b,{FR:()=>m,kn:()=>l,zR:()=>k});var d=c(89409),e=c(25984);function f(a){return`${a.location.index}:${a.location.entryId}`}let g={user:["viewKey","hasDetail"],assistant:["viewKey","status","hasDetail","usage"],tool:["viewKey","status","hasDetail","usage"],bash:["viewKey","status","hasDetail"],custom:["viewKey","hasDetail"]};function h(a,b,c){if(!b)return a;let e={...a,...b};return"summary"===c?d.Hf.parse(e):d.D8.parse(e)}function i(a,b){if(Array.isArray(a.parent)){if("number"!=typeof a.key)throw Error("Increment array key is invalid");a.parent[a.key]=b;return}if("string"!=typeof a.key)throw Error("Increment object key is invalid");a.parent[a.key]=b}function j(a,b,c){let e=structuredClone(a),f=function(a,b){if(0===b.length)throw Error("Increment cannot append to the message layer root");let c=a;for(let a of b.slice(0,-1)){if("number"==typeof a){if(!Array.isArray(c)||a>=c.length)throw Error(`Increment array path does not exist: ${a}`);c=c[a];continue}if(!c||"object"!=typeof c||Array.isArray(c))throw Error(`Increment object path does not exist: ${a}`);if(!Object.hasOwn(c,a))throw Error(`Increment object field does not exist: ${a}`);c=c[a]}let d=b.at(-1);if("number"==typeof d){if(!Array.isArray(c)||d>=c.length)throw Error(`Increment array target does not exist: ${d}`);return{parent:c,key:d,value:c[d]}}if(!c||"object"!=typeof c||Array.isArray(c))throw Error(`Increment object target does not exist: ${d}`);if(!Object.hasOwn(c,d))throw Error(`Increment target does not exist: ${d}`);return{parent:c,key:d,value:c[d]}}(e,b);if("string"==typeof c){if("string"!=typeof f.value)throw Error("Increment target is not a string");return i(f,`${f.value}${c}`),d.Hf.parse(e)}if(!Array.isArray(f.value))throw Error("Increment target is not an array");return i(f,[...f.value,...c]),d.Hf.parse(e)}function k(a,b,c){let e=new Map(a.messages.filter(a=>void 0!==a.detail).map(a=>[f(a),a]));return{messages:b.map(a=>{let b=e.get(f(a));return a.fixed.hasDetail&&b&&b.fixed.type===a.fixed.type&&b.fixed.viewKey===a.fixed.viewKey&&void 0!==b.detail?d.mj.parse({...a,detail:b.detail}):a}),temporaryMessages:[...c]}}function l(a,b){if("message_start"===b.type){if(a.temporaryMessages.some(a=>a.location.tempId===b.snapshot.location.tempId))throw Error(`Temporary conversation message already exists: ${b.snapshot.location.tempId}`);return{...a,temporaryMessages:[...a.temporaryMessages,b.snapshot]}}let c=a.temporaryMessages.findIndex(a=>a.location.tempId===b.location.tempId);if(c<0)throw Error(`Temporary conversation message was not found: ${b.location.tempId}`);if("message_update"===b.type){let f=[...a.temporaryMessages];return f[c]=function(a,b){var c,f;if(a.location.tempId!==b.location.tempId)throw Error(`Conversation update tempId mismatch: ${b.location.tempId}`);let i=(c=a.fixed,(f=b.fixed)?(!function(a,b,c){let d=Object.keys(a).filter(a=>!b.includes(a));if(d.length>0)throw Error(`${c} patch contains fields invalid for the current message: ${d}`)}(f,g[c.type],`${c.type} fixed`),d.q5.parse({...c,...f})):c),k=h(a.summary,b.summary,"summary"),l=a.detail;if(void 0!==b.detail||Object.keys(b.increments??{}).some(a=>"detail"===(0,e.U)(a).root)){if(b.fixed?.hasDetail===!1)throw Error("Realtime detail cannot be updated while explicitly clearing hasDetail");i.hasDetail||(i=d.q5.parse({...i,hasDetail:!0}))}for(let[a,c]of(b.detail&&(l=h(l??{},b.detail,"detail")),Object.entries(b.increments??{}))){let b=(0,e.U)(a);"summary"===b.root?k=j(k,b.segments,c):l=j(l??{},b.segments,c)}return i.hasDetail||(l=void 0),d.s4.parse({location:a.location,fixed:i,summary:k,...void 0===l?{}:{detail:l}})}(f[c],b),{...a,temporaryMessages:f}}if("message_discard"===b.type)return{...a,temporaryMessages:a.temporaryMessages.filter(a=>a.location.tempId!==b.location.tempId)};if(b.durable.index!==a.messages.length)throw Error(`Conversation commit index is not continuous: expected ${a.messages.length}, received ${b.durable.index}`);if(a.messages.some(a=>a.location.entryId===b.durable.entryId))throw Error(`Conversation commit entryId already exists: ${b.durable.entryId}`);let{detail:f,fixed:i,...k}=a.temporaryMessages[c],l=d.mj.parse({...k,location:b.durable,fixed:{...i,timestampMs:b.fixed.timestampMs},...i.hasDetail&&void 0!==f?{detail:f}:{}});return{messages:[...a.messages,l],temporaryMessages:a.temporaryMessages.filter(a=>a.location.tempId!==b.location.tempId)}}function m(a,b){return"durable_append"===b.type?function(a,b){let c=a.messages.length;if(b.messages[0]?.location.index!==c)throw Error(`Conversation append index is not continuous: expected ${c}, received ${b.messages[0]?.location.index}`);let d=new Set(a.messages.map(a=>a.location.entryId));for(let a of b.messages){if(d.has(a.location.entryId))throw Error(`Conversation append entryId already exists: ${a.location.entryId}`);d.add(a.location.entryId)}return{...a,messages:[...a.messages,...b.messages]}}(a,b):l(a,b)}},610:(a,b,c)=>{c.d(b,{PS:()=>k,ef:()=>i,gK:()=>j,hS:()=>h,mv:()=>n});var d=c(59473),e=c(89409),f=c(2364),g=c(25984);let h=d.Ik({type:d.eu("message_start"),snapshot:e.s4}).strict(),i=d.Ik({type:d.eu("message_update"),location:e.fb,fixed:e.dG.optional(),summary:e.XW.optional(),detail:e.wH.optional(),increments:e.fK.optional()}).strict().superRefine((a,b)=>{if(!a.fixed&&!a.summary&&!a.detail&&!a.increments)return void b.addIssue({code:"custom",message:"message update requires a changed layer"});let c=[];for(let b of Object.keys(a.increments??{}))try{c.push({raw:b,parsed:(0,g.U)(b)})}catch{}for(let d of c){let c="summary"===d.parsed.root?Object.keys(a.summary??{}):Object.keys(a.detail??{}),e=d.parsed.segments[0];(0===d.parsed.segments.length||"string"==typeof e&&c.includes(e))&&b.addIssue({code:"custom",message:"replacement and increment paths cannot overlap",path:["increments",d.raw]})}for(let a=0;a<c.length;a+=1)for(let d=a+1;d<c.length;d+=1){let e=c[a],f=c[d];((0,g.v)(e.parsed,f.parsed)||(0,g.v)(f.parsed,e.parsed))&&b.addIssue({code:"custom",message:"increment parent and child paths cannot overlap",path:["increments",f.raw]})}}),j=d.Ik({type:d.eu("message_commit"),location:e.fb,durable:e.V6,fixed:d.Ik({timestampMs:f.k}).strict()}).strict(),k=d.Ik({type:d.eu("message_discard"),location:e.fb}).strict(),l=d.Ik({type:d.eu("durable_append"),messages:d.YO(e.mj).min(1)}).strict().superRefine((a,b)=>{let c=new Set;for(let[d,e]of a.messages.entries())d>0&&e.location.index!==a.messages[d-1].location.index+1&&b.addIssue({code:"custom",message:"durable append message indexes must be continuous",path:["messages",d,"location","index"]}),c.has(e.location.entryId)&&b.addIssue({code:"custom",message:"durable append entryId values must be unique",path:["messages",d,"location","entryId"]}),c.add(e.location.entryId)}),m=d.KC([h,i,j,k]),n=d.KC([l,m])},2002:(a,b,c)=>{c.d(b,{Od:()=>s,tU:()=>o,hE:()=>r,Sp:()=>g,P9:()=>f,_G:()=>k,Vc:()=>j});var d=c(59473);c(48452);let e=d.Ik({key:d.Yj().min(1).max(160),params:d.g1(d.Yj().min(1).max(80),d.KC([d.Yj().max(1e3),d.ai().finite()])).optional()}).strict(),f=4001,g=4003,h=d.Yj().trim().min(1),i=d.Yj().uuid();function j(a){return Object.freeze({op:"req",path:h.parse(a.path),inputSchema:a.inputSchema,outputSchema:a.outputSchema,...void 0===a.timeoutMs?{}:{timeoutMs:d.ai().int().positive().parse(a.timeoutMs)}})}function k(a){return Object.freeze({op:"push",path:h.parse(a.path),bodySchema:a.bodySchema})}let l=d.Ik({op:d.eu("req"),path:h,requestId:i}).strict(),m=d.Ik({op:d.eu("resp"),path:h,requestId:i}).strict(),n=d.Ik({op:d.eu("push"),path:h}).strict(),o=d.Ik({head:l,body:d.Pq()}).strict(),p=d.Ik({head:m,body:d.Ik({code:d.eu(0),msg:d.eu(""),data:d.Pq()}).strict()}).strict(),q=d.Ik({head:m,body:d.Ik({code:d.ai().int().positive(),msg:d.Yj().min(1),data:d.ch(),i18n:e.optional()}).strict()}).strict(),r=d.KC([p,q]),s=d.Ik({head:n,body:d.Pq()}).strict()},2364:(a,b,c)=>{c.d(b,{k:()=>d});let d=c(59473).ai().int().nonnegative().max(Number.MAX_SAFE_INTEGER)},12683:(a,b,c)=>{c.d(b,{FF:()=>h,LK:()=>i});var d=c(59473),e=c(24187),f=c(43037);let g=d.Ik({name:d.Yj().trim().min(1),description:d.Yj(),parameters:e.Dz}).strict(),h=d.Ik({source:f.Pi}).strict(),i=d.Ik({systemPrompt:d.Yj(),tools:d.YO(g)}).strict()},24187:(a,b,c)=>{c.d(b,{Dz:()=>h,f7:()=>g,tv:()=>f});var d=c(59473);let e=d.Yj().trim().min(1).max(64).regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/),f=e,g=e,h=d.g1(d.Yj(),d.Pq());d.Yj().trim().min(3).max(129).regex(/^[a-z0-9]+(?:-[a-z0-9]+)*\/[a-z0-9]+(?:-[a-z0-9]+)*$/);let i=d.k5(["plugin","server","rocket","settings","panel","message","terminal","file","folder","bot","wrench","database","globe"]);d.gM("type",[d.Ik({type:d.eu("builtin"),name:i}).strict(),d.Ik({type:d.eu("svg"),content:d.Yj().trim().min(1).max(16384)}).strict()])},25984:(a,b,c)=>{function d(a){if(!/^(0|[1-9]\d*)$/.test(a))return a;let b=Number(a);if(!Number.isSafeInteger(b))throw Error(`Increment array index is invalid: ${a}`);return b}function e(a){if(!a||a.length>1024)throw Error("Increment path length is invalid");let b=[],c="",e=!1;for(let d of a){if(e){if("."!==d&&"\\"!==d)throw Error(`Increment path contains an invalid escape: \\${d}`);c+=d,e=!1;continue}if("\\"===d){e=!0;continue}if("."===d){if(!c)throw Error("Increment path contains an empty segment");b.push(c),c="";continue}c+=d}if(e)throw Error("Increment path ends with an escape");if(!c)throw Error("Increment path contains an empty segment");b.push(c);let f=b.shift();if("summary"!==f&&"detail"!==f)throw Error("Increment path root must be summary or detail");return{root:f,segments:b.map(d)}}function f(a,b){return a.root===b.root&&!(a.segments.length>b.segments.length)&&a.segments.every((a,c)=>a===b.segments[c])}c.d(b,{U:()=>e,v:()=>f})},40750:(a,b,c)=>{c.d(b,{L6:()=>e,k_:()=>f});var d=c(18);let e={extensionMode:"normal",presentationMode:"normal",initializationError:null,queues:{steering:[],followUp:[]},model:null,capabilityMode:null,contextUsage:null,plugins:{}};function f(a,b){if("session_sync"===b.type){if("full"===b.mode)return{...(0,d.zR)(a,b.messages,b.temporaryMessages),runtime:b.runtime};let c=a.messages.at(-1);if(!c||c.location.index!==b.baseCursor.index||c.location.entryId!==b.baseCursor.entryId)throw Error("Incremental chat sync does not match the current durable cursor");let e=new Set(a.messages.map(a=>a.location.entryId));for(let a of b.messages){if(e.has(a.location.entryId))throw Error(`Incremental chat sync contains a duplicate entryId: ${a.location.entryId}`);e.add(a.location.entryId)}return{messages:[...a.messages,...b.messages],temporaryMessages:b.temporaryMessages,runtime:b.runtime}}return"runtime_update"===b.type?{...a,runtime:b.runtime}:{...(0,d.kn)(a,b),runtime:a.runtime}}Object.freeze({messages:[],temporaryMessages:[],runtime:e})},41468:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Cz:()=>j,Ht:()=>g.H,NA:()=>k,QS:()=>i});var e=c(96459),f=c(79626),g=c(72904),h=a([e]);function i(a,b,c,d=!1,g="temporary",h=!1){return(0,f.d)(a,b,c,h?[]:(0,e.WE)().readMessageDeclarations(),d,g)}function j(a,b,c,d,g,h=!1){return(0,f.N)(a,b,c,d,g,h?[]:(0,e.WE)().readMessageDeclarations())}function k(a){let{detail:b,...c}=a;return c}e=(h.then?(await h)():h)[0],d()}catch(a){d(a)}})},43037:(a,b,c)=>{c.d(b,{DK:()=>r,Pi:()=>q,R3:()=>m,TV:()=>A,UR:()=>s,VK:()=>D,kF:()=>F,mB:()=>G,oc:()=>C,ps:()=>E,w$:()=>w,wR:()=>p,wf:()=>B,xE:()=>n,xh:()=>t,yI:()=>o});var d=c(59473),e=c(20369),f=c(54733),g=c(89409),h=c(62977),i=c(96089);let j=g.Pc,k=g.LJ,l=g.mh,m=g.fb,n=g.lJ,o=g.s4,p=g.mj,q=i.R,r=d.Ik({index:k,entryId:f.C3}).strict(),s=d.KC([d.ch(),r]),t=l.extend({data:d.Yj().min(1)}).strict(),u=h.$,v=d.Ik({tempId:j,text:d.Yj(),images:d.YO(l).max(10)}).strict(),w=d.Ik({provider:d.Yj().trim().min(1),modelId:d.Yj().trim().min(1),thinkingLevel:u}).strict(),x=d.Ik({tokens:d.ai().int().nonnegative().max(Number.MAX_SAFE_INTEGER).nullable(),contextWindow:d.ai().int().positive().max(Number.MAX_SAFE_INTEGER)}).strict(),y=d.g1(d.Yj(),d.Pq()),z=d.g1(d.Yj().min(1),y),A=d.k5(["normal","basic"]),B=d.Ik({extensionMode:A.default("normal"),presentationMode:A.default("normal"),initializationError:d.Yj().max(32e3).nullable().default(null),queues:d.Ik({steering:d.YO(v),followUp:d.YO(v)}).strict(),model:w.nullable(),capabilityMode:e.rY.nullable(),contextUsage:x.nullable(),plugins:z}).strict(),C=g.RX.extend({runtime:B}).strict(),D=d.Ik({sessionId:f.Kx,branchId:f._A,entryId:f.C3}).strict(),E=g.XM,F=D.extend({imageIndex:d.ai().int().nonnegative()}).strict(),G=g.y0},47574:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{VB:()=>t,dM:()=>q,hr:()=>r,nJ:()=>s,yO:()=>u});var e=c(76760),f=c(69503),g=c(12683),h=c(43037),i=c(40750),j=c(95220),k=c(32980),l=c(41468),m=c(72498),n=a([k,l,m]);[k,l,m]=n.then?(await n)():n;class q extends Error{constructor(a){super(`Chat source is not current: ${a.workId}/${a.sessionId}/${a.branchId}`),this.name="L2ChatSourceBindingError"}}class r extends Error{constructor(a){super(`Chat message was not found: ${a}`),this.name="L2ChatMessageNotFoundError"}}class s extends Error{constructor(a){super(`Chat commands are blocked by WorkSession lifecycle: ${a}`),this.name="L2ChatLifecycleBlockedError"}}class t extends Error{constructor(a,b){super(`工作会话 ${a} 阻止插件重载:${b}`),this.workId=a,this.reason=b,this.name="L2PluginReloadBlockedError"}}function o(a){try{return structuredClone(a)}catch{let{declaration:b,...c}=a;return structuredClone(c)}}function p(a,b){return JSON.stringify(a)===JSON.stringify(b)}class u{async initialize(a){let b=a.map(a=>this.buildRecord(a));for(let a of(this.recordsByWorkId.clear(),b))this.recordsByWorkId.set(a.source.workId,a)}addWorkSession(a){this.recordsByWorkId.set(a.workId,this.buildRecord(a))}async replaceWorkSession(a,b){let c=this.recordsByWorkId.get(a.workId)?.source;await this.closeRecord(a.workId),c&&this.publish({type:"source_invalidated",source:c}),this.recordsByWorkId.set(b.workId,this.buildRecord(b)),a.sessionId!==b.sessionId&&await (0,m.gb)(a.sessionId)}async refreshWorkSession(a){let b=this.recordsByWorkId.get(a.workId)?.source;await this.closeRecord(a.workId),b&&this.publish({type:"source_invalidated",source:b}),this.recordsByWorkId.set(a.workId,this.buildRecord(a))}async removeWorkSession(a){let b=this.recordsByWorkId.get(a.workId)?.source;await this.closeRecord(a.workId),b&&this.publish({type:"source_invalidated",source:b}),await (0,m.gb)(a.sessionId)}async pauseWorkSession(a){let b=this.recordsByWorkId.get(a);b&&(b.acceptingCommands=!1,(0,m.ls)(b.source.sessionId).nativeUi.cancelAll(),await b.commandTail)}resumeWorkSession(a){let b=this.recordsByWorkId.get(a);b&&(b.acceptingCommands=!0)}async pauseForProcessRestart(){let a=[...this.recordsByWorkId.values()],b=a.map(a=>({record:a,reason:this.pluginReloadBlockReason(a)})).find(a=>null!==a.reason);if(b?.reason)throw new t(b.record.source.workId,b.reason);for(let b of a)b.acceptingCommands=!1;await Promise.all(a.map(a=>a.commandTail));let c=a.map(a=>({record:a,reason:this.pluginReloadBlockReason(a)})).find(a=>null!==a.reason);if(c?.reason){for(let b of a)b.acceptingCommands=!0;throw new t(c.record.source.workId,c.reason)}let d=!0;return()=>{if(d)for(let b of(d=!1,a))this.recordsByWorkId.get(b.source.workId)===b&&(b.acceptingCommands=!0)}}metadataFor(a){return this.recordFor(a).metadata}statusFor(a){return this.statusForRecord(this.recordFor(a))}statusForRecord(a){return a.mainRunning?"main_running":a.backgroundTaskIds.size>0?"background_running":a.completedPending?"completed":"idle"}acknowledgeCompleted(a){let b=this.recordsByWorkId.get(a);if(!b||!b.completedPending)return!1;let c=this.statusForRecord(b);return b.completedPending=!1,this.publishRecordChanged(a,b.metadata,c),!0}isCurrentSource(a){let b=h.Pi.parse(a),c=this.recordsByWorkId.get(b.workId);return void 0!==c&&this.matches(c.source,b)}getProjectPreviewContext(a,b){let c=this.recordsByWorkId.get(a.workId);if(!c||c.workSession!==a)return null;let d=(0,f.Yj)((0,e.resolve)(b)),g=d===(0,f.Yj)((0,e.resolve)(a.cwd)),h=()=>(0,f.D)(c.state.runtime.plugins[f.s6]).directories.find(a=>(0,f.Yj)(a)===d),i=g?a.cwd:h();if(!i)return null;let j=()=>this.recordsByWorkId.get(a.workId)===c&&c.acceptingCommands&&this.matches(c.source,this.sourceFor(a))&&(g||void 0!==h());return j()?{cwd:i,isCurrent:j}:null}refreshPluginMessages(){for(let a of this.recordsByWorkId.values())if("basic"!==a.state.runtime.presentationMode)try{this.reprojectRecord(a,a.state.runtime.presentationMode)}catch(b){console.error("[Pi Desk][WorkSessionChatRuntime] 插件消息刷新失败,保留已有聊天",{workId:a.source.workId,message:b instanceof Error?b.message:String(b)})}}setPresentation(a,b){let c=this.currentRecord(a);return this.enqueueCommand(c,async()=>{if(((0,j.P)()||"basic"===c.state.runtime.extensionMode)&&"normal"===b)throw Error("基础模式不启用插件消息展示,请先恢复插件聊天");c.state.runtime.presentationMode!==b&&this.reprojectRecord(c,b)})}reprojectRecord(a,b){let c=(0,m.ls)(a.source.sessionId).readChatSnapshot(),d=new Map(c.entries.map(a=>[a.entryId,a])),e="basic"===b,f=a.state.messages.map(b=>{let c=d.get(b.location.entryId);if(!c)throw Error(`无法重新投影消息:${b.location.entryId}`);return(0,l.Cz)(b.location.index,c.entryId,c.timestampMs,c.message,a.source,e)}),g=a.state.temporaryMessages.map(b=>{let c=a.rawTemporaryMessages.get(b.location.tempId);if(!c)throw Error(`临时消息基线尚不可重投影:${b.location.tempId}`);return(0,l.QS)(b.location.tempId,c,a.source,!1,"update",e)});a.state={messages:f,temporaryMessages:g,runtime:{...a.state.runtime,presentationMode:b}},a.forceFullSync=!0,a.sourceEventVersion+=1,this.publish({type:"source_event",source:a.source,version:a.sourceEventVersion,event:this.createSync(a.source,null).event})}prepareSource(a){let b=this.currentRecord(a);return this.enqueueCommand(b,()=>this.syncRecordRuntime(b))}async syncRecordRuntime(a){let b=a.source,c=h.wf.parse({...await (0,m.ls)(b.sessionId).readChatRuntime(),presentationMode:a.state.runtime.presentationMode});this.isCurrentSource(b)&&(p(a.state.runtime,c)||this.applySourceEvent(b,{type:"runtime_update",runtime:c}),"basic"===c.extensionMode&&"basic"!==a.state.runtime.presentationMode&&this.reprojectRecord(a,"basic"))}createSync(a,b){let c=this.currentRecord(a),d=c.source,e=c.state.messages,f=c.state.temporaryMessages,g=c.state.runtime,h=null===b?void 0:e[b.index],i=null!==b&&h?.location.entryId===b.entryId;return null===b||i||console.warn("[Pi Desk][WorkSessionChatRuntime] 客户端消息 cursor 不匹配,回退全量",{workId:d.workId,sessionId:d.sessionId,branchId:d.branchId,clientCursorIndex:b.index,clientCursorEntryId:b.entryId,serverEntryIdAtIndex:h?.location.entryId??null,serverLatestIndex:e.at(-1)?.location.index??-1}),{event:null!==b&&i&&!c.forceFullSync?{type:"session_sync",mode:"incremental",baseCursor:b,messages:e.slice(b.index+1).map(l.NA),temporaryMessages:f,runtime:g}:{type:"session_sync",mode:"full",baseCursor:null,messages:e.map(l.NA),temporaryMessages:f,runtime:g},watermark:c.sourceEventVersion}}getImage(a){let b=h.kF.parse(a),c=this.recordForSession(b.sessionId,b.branchId),d=c.state.messages.find(a=>a.location.entryId===b.entryId);if(!d||"user"!==d.fixed.type&&"tool"!==d.fixed.type)throw new r(`${b.entryId}/${b.imageIndex}`);return h.mB.parse((0,m.ls)(c.source.sessionId).readChatImage(b.entryId,b.imageIndex))}getMessageDetail(a){let b=h.VK.parse(a),c=this.recordForSession(b.sessionId,b.branchId).state.messages.find(a=>a.location.entryId===b.entryId);if(!c)throw new r(b.entryId);return h.ps.parse({index:c.location.index,entryId:c.location.entryId,detail:c.detail??null})}getModelContext(a){let b=g.FF.parse(a),c=this.currentRecord(b.source);return this.enqueueCommand(c,async()=>g.LK.parse(await (0,m.ls)(c.source.sessionId).readModelContext()))}send(a){let b=this.currentRecord(a.source);if((0,m.ls)(a.source.sessionId).nativeUi.hasPending)return Promise.reject(Error("请先处理当前插件问题,或停止当前任务"));let c=()=>b.workSession.send({mode:a.mode,text:a.text,images:a.images});return b.compactionStart?b.acceptingCommands?b.compactionStart.then(a=>{if(!b.acceptingCommands)throw new s(b.source.workId);return a?c():this.enqueueCommand(b,c)}):Promise.reject(new s(b.source.workId)):this.enqueueCommand(b,c)}interrupt(a){let b=this.currentRecord(a);return(0,m.ls)(a.sessionId).nativeUi.hasPending?b.workSession.interrupt():this.enqueueCommand(b,()=>b.workSession.interrupt())}compact(a){let b,c=this.currentRecord(a);if(c.compactionStart)return Promise.reject(Error("上下文正在压缩"));let d=new Promise(a=>{b=a});c.compactionStart=d;let e=this.enqueueCommand(c,()=>{try{let a=(0,m.ls)(c.source.sessionId).compact();return b(!0),a}catch(a){throw b(!1),a}});return e.then(()=>{b(!1),c.compactionStart===d&&(c.compactionStart=null)},()=>{b(!1),c.compactionStart===d&&(c.compactionStart=null)}),e}reload(a,b){let c=this.currentRecord(a);return(0,m.ls)(a.sessionId).nativeUi.cancelAll(),this.enqueueCommand(c,async()=>{try{await (0,m.ls)(c.source.sessionId).reload(b)}finally{this.recordsByWorkId.get(a.workId)===c&&(await this.syncRecordRuntime(c),"basic"===c.state.runtime.extensionMode&&"basic"!==c.state.runtime.presentationMode&&this.reprojectRecord(c,"basic"))}})}restoreQueuedMessages(a){let b=this.currentRecord(a);return this.enqueueCommand(b,()=>b.workSession.restoreQueuedMessages())}setTitle(a,b){let c=this.recordFor(a);return this.enqueueCommand(c,()=>c.workSession.setTitle(b))}setModel(a){let b=this.currentRecord(a.source);return this.enqueueCommand(b,()=>b.workSession.setModel(a.model))}setCapabilityMode(a){let b=this.currentRecord(a.source);return this.enqueueCommand(b,()=>(0,m.ls)(b.source.sessionId).setCapabilityMode(a.capabilityMode))}invokePluginMethod(a){let b=this.currentRecord(a.source);return this.enqueueCommand(b,()=>(0,m.ls)(b.source.sessionId).invokePluginMethod(b.source,a.pluginName,a.method,a.input))}listNativeCommands(a){let b=this.currentRecord(a);return this.enqueueCommand(b,()=>(0,m.ls)(b.source.sessionId).listNativeCommands())}executeNativeCommand(a,b,c){let d=this.currentRecord(a);return this.enqueueCommand(d,()=>(0,m.ls)(d.source.sessionId).executeNativeCommand(b,c))}listNativeTools(a){let b=this.currentRecord(a);return this.enqueueCommand(b,()=>(0,m.ls)(b.source.sessionId).listNativeTools())}executeDirectBash(a,b){let c=this.currentRecord(a);return c.directBashActive?Promise.reject(new k.yT):(c.directBashActive=!0,this.enqueueCommand(c,()=>(0,m.ls)(c.source.sessionId).executeDirectBash(b)).finally(()=>{c.directBashActive=!1}))}abortDirectBash(a){let b=this.currentRecord(a);return(0,m.ls)(b.source.sessionId).abortDirectBash()}subscribe(a){return this.listeners.add(a),()=>this.listeners.delete(a)}subscribeRecordChanges(a){return this.recordListeners.add(a),()=>this.recordListeners.delete(a)}subscribePluginPush(a){return this.pluginPushListeners.add(a),()=>this.pluginPushListeners.delete(a)}buildRecord(a){let b=this.sourceFor(a),c=(0,m.ls)(a.sessionId),d=c.readChatSnapshot(),e=d.entries.map((a,c)=>(0,l.Cz)(c,a.entryId,a.timestampMs,a.message,b,(0,j.P)())),f=h.oc.parse({messages:e,temporaryMessages:[],runtime:{...i.L6,extensionMode:(0,j.P)()?"basic":"normal",presentationMode:(0,j.P)()?"basic":"normal"}}),g=f.messages.find(a=>"user"===a.fixed.type),k=g?h.xE.safeParse(g.summary):null,n=k?.success&&k.data.text.trim()||null,o={workSession:a,source:b,state:f,sourceEventVersion:0,forceFullSync:(0,j.P)(),rawTemporaryMessages:new Map,metadata:{sessionTitle:d.sessionName??n,messageCounts:{user:f.messages.filter(a=>"user"===a.fixed.type).length,total:f.messages.length},lastMessageUpdatedAt:f.messages.at(-1)?.fixed.timestampMs??null},mainRunning:!1,backgroundTaskIds:new Set(c.readChatBackgroundTaskIds()),completedPending:!1,acceptingCommands:!0,directBashActive:!1,compactionStart:null,commandTail:Promise.resolve(),unsubscribeWorker:()=>void 0};return o.unsubscribeWorker=c.subscribeChat(a=>this.handleWorkerEvent(o,a)),o}handleWorkerEvent(a,b){if(this.recordsByWorkId.get(a.source.workId)!==a)return;let c=a.metadata,d=this.statusForRecord(a);switch(b.type){case"message_start":a.rawTemporaryMessages.set(b.tempId,o(b.message)),this.applySourceEvent(a.source,{type:"message_start",snapshot:(0,l.QS)(b.tempId,b.message,a.source,!1,"temporary","basic"===a.state.runtime.presentationMode)});return;case"message_update":{let c=a.state.temporaryMessages.find(a=>a.location.tempId===b.tempId);if(!c)throw Error(`Temporary chat message was not found: ${b.tempId}`);a.rawTemporaryMessages.set(b.tempId,o(b.message));let d=(0,l.Ht)(c,(0,l.QS)(b.tempId,b.message,a.source,!1,"update","basic"===a.state.runtime.presentationMode));d&&this.applySourceEvent(a.source,d);return}case"message_commit":{let c=a.state.temporaryMessages.find(a=>a.location.tempId===b.tempId);if(!c)throw Error(`Temporary chat message was not found: ${b.tempId}`);let d=(0,l.QS)(b.tempId,b.message,a.source,!1,"final","basic"===a.state.runtime.presentationMode),e=(0,l.Ht)(c,d);e&&this.applySourceEvent(a.source,e),this.replaceCanonicalTemporary(a,b.tempId,b.message),a.rawTemporaryMessages.delete(b.tempId),this.applySourceEvent(a.source,{type:"message_commit",location:{tempId:b.tempId},durable:{index:a.state.messages.length,entryId:b.entryId},fixed:{timestampMs:b.timestampMs}});return}case"message_discard":a.rawTemporaryMessages.delete(b.tempId),this.applySourceEvent(a.source,{type:"message_discard",location:{tempId:b.tempId}});return;case"plugin_push":this.publishPluginPush({pluginName:b.pluginName,target:{scope:"session",source:a.source},event:b.event,data:structuredClone(b.data)});return;case"runtime_changed":{let c=h.wf.parse({...b.runtime,presentationMode:a.state.runtime.presentationMode});p(a.state.runtime,c)||this.applySourceEvent(a.source,{type:"runtime_update",runtime:c}),"basic"===c.extensionMode&&"basic"!==a.state.runtime.presentationMode&&this.reprojectRecord(a,"basic");return}case"agent_started":if(a.mainRunning)return;a.mainRunning=!0,a.completedPending=!1,this.publishRecordChanged(a.source.workId,c,d);return;case"main_operation_cancelled":case"main_operation_finished":if(!a.mainRunning)return;a.mainRunning=!1,a.completedPending=!1,this.publishRecordChanged(a.source.workId,c,d);return;case"agent_settled":{let b=a.mainRunning||a.backgroundTaskIds.size>0;a.mainRunning=!1,b&&0===a.backgroundTaskIds.size&&(a.completedPending=!0),this.publishRecordChanged(a.source.workId,c,d);return}case"background_tasks_changed":{let e=a.mainRunning||a.backgroundTaskIds.size>0;a.backgroundTaskIds=new Set(b.taskIds),e&&!a.mainRunning&&0===a.backgroundTaskIds.size&&(a.completedPending=!0),this.publishRecordChanged(a.source.workId,c,d);return}case"session_info_changed":a.metadata={...a.metadata,sessionTitle:b.sessionTitle},this.publishRecordChanged(a.source.workId,c,d);return}}replaceCanonicalTemporary(a,b,c){let d=a.state.temporaryMessages.findIndex(a=>a.location.tempId===b);if(d<0)throw Error(`Temporary chat message was not found: ${b}`);let e=[...a.state.temporaryMessages];e[d]=(0,l.QS)(b,c,a.source,!0,"final","basic"===a.state.runtime.presentationMode),a.state={...a.state,temporaryMessages:e}}applySourceEvent(a,b){let c=this.currentRecord(a),d=c.source;if(c.state=(0,i.k_)(c.state,b),c.sourceEventVersion+=1,"message_commit"===b.type){let a=c.state.messages[b.durable.index];if(!a||a.location.entryId!==b.durable.entryId)throw Error(`Committed chat message is missing: ${b.durable.index}/${b.durable.entryId}`);let e=c.metadata;c.metadata=this.metadataFromState(c),this.publishRecordChanged(d.workId,e,this.statusForRecord(c))}this.publish({type:"source_event",source:d,version:c.sourceEventVersion,event:b})}metadataFromState(a){let b=a.state.messages.find(a=>"user"===a.fixed.type),c=b?h.xE.safeParse(b.summary):null,d=c?.success&&c.data.text.trim()||null;return{sessionTitle:a.metadata.sessionTitle??d,messageCounts:{user:a.state.messages.filter(a=>"user"===a.fixed.type).length,total:a.state.messages.length},lastMessageUpdatedAt:a.state.messages.at(-1)?.fixed.timestampMs??null}}enqueueCommand(a,b){if(!a.acceptingCommands)return Promise.reject(new s(a.source.workId));let c=a.commandTail.then(b,b);return a.commandTail=c.then(()=>void 0,()=>void 0),c}pluginReloadBlockReason(a){return(0,m.ls)(a.source.sessionId).nativeUi.hasPending?"原生插件问题正在等待回答":a.directBashActive?"Direct Bash 正在运行":a.mainRunning?"主 Agent 正在运行":a.backgroundTaskIds.size>0?"插件后台任务正在运行":(0,m.ls)(a.source.sessionId).readPluginReloadBlockReason()}async closeRecord(a){let b=this.recordsByWorkId.get(a);b&&(b.acceptingCommands=!1,(0,m.ls)(b.source.sessionId).nativeUi.cancelAll(),await b.commandTail,b.unsubscribeWorker(),b.rawTemporaryMessages.clear(),this.recordsByWorkId.delete(a))}recordFor(a){let b=this.recordsByWorkId.get(a.workId);if(!b||!this.matches(b.source,this.sourceFor(a)))throw Error(`WorkSession chat state is not initialized: ${a.workId}`);return b}sourceFor(a){return h.Pi.parse({workId:a.workId,sessionId:a.sessionId,branchId:a.branchId})}currentRecord(a){let b=h.Pi.parse(a),c=this.recordsByWorkId.get(b.workId);if(!c||!this.matches(c.source,b))throw new q(b);return c}recordForSession(a,b){let c=[...this.recordsByWorkId.values()].find(c=>c.source.sessionId===a&&c.source.branchId===b);if(c)return c;throw new q({workId:"unknown",sessionId:a,branchId:b})}matches(a,b){return a.workId===b.workId&&a.sessionId===b.sessionId&&a.branchId===b.branchId}publishPluginPush(a){for(let b of[...this.pluginPushListeners])try{b(a)}catch(b){console.error("[Pi Desk][WorkSessionChatRuntime] Plugin Push 监听器执行失败",{pluginName:a.pluginName,event:a.event,errorName:b instanceof Error?b.name:"UnknownError"})}}publish(a){for(let b of[...this.listeners])try{b(a)}catch(b){console.error("[Pi Desk][WorkSessionChatRuntime] Source 事件监听器执行失败",{eventType:a.type,workId:a.source.workId,errorName:b instanceof Error?b.name:"UnknownError"})}}publishRecordChanged(a,b,c){for(let d of[...this.recordListeners])try{d(a,b,c)}catch(b){console.error("[Pi Desk][WorkSessionChatRuntime] Record 监听器执行失败",{workId:a,errorName:b instanceof Error?b.name:"UnknownError"})}}constructor(){this.recordsByWorkId=new Map,this.listeners=new Set,this.recordListeners=new Set,this.pluginPushListeners=new Set}}d()}catch(a){d(a)}})},48452:(a,b,c)=>{c.d(b,{Y:()=>f,n:()=>e});var d=c(59473);let e="X-Pi-Desk-Client-Id",f=d.Yj().uuid()},54733:(a,b,c)=>{c.d(b,{AA:()=>p,Bn:()=>v,C3:()=>j,Ck:()=>s,ER:()=>m,Jl:()=>w,Kx:()=>i,MT:()=>l,MY:()=>q,Ms:()=>x,TO:()=>n,_A:()=>k,eW:()=>g,ik:()=>h,jw:()=>o,kg:()=>r,qL:()=>u,uX:()=>t});var d=c(59473),e=c(83905),f=c(2364);let g=d.Yj().trim().min(1),h=e.m4,i=e.$E,j=e.Rv,k=d.Yj().trim().min(1),l=d.ai().int().nonnegative(),m=d.Ik({workId:g,cwd:h,sessionId:i}).strict(),n=d.YO(m),o=d.k5(["main_running","background_running","completed","idle"]),p=d.Ik({user:d.ai().int().nonnegative(),total:d.ai().int().nonnegative()}).strict().refine(a=>a.user<=a.total,{message:"user message count cannot exceed total message count"}),q=m.extend({branchId:k,projectName:d.Yj().trim().min(1),sessionTitle:d.Yj().trim().min(1).nullable(),status:o,messageCounts:p,lastMessageUpdatedAt:f.k.nullable()}).strict(),r=d.Ik({workSessions:d.YO(q),pinnedCount:l}).strict().refine(a=>a.pinnedCount<=a.workSessions.length,{message:"pinnedCount cannot exceed work session count",path:["pinnedCount"]}),s=d.Ik({cwd:h,sessionId:i.optional()}).strict(),t=d.Ik({workSession:q}).strict(),u=d.Ik({workId:g,sessionId:i,title:d.Yj().trim().min(1)}).strict(),v=d.Ik({workId:g}).strict(),w=d.Ik({workIds:d.YO(g),pinnedCount:l}).strict().superRefine((a,b)=>{new Set(a.workIds).size!==a.workIds.length&&b.addIssue({code:"custom",message:"workIds cannot contain duplicates",path:["workIds"]}),a.pinnedCount>a.workIds.length&&b.addIssue({code:"custom",message:"pinnedCount cannot exceed workIds length",path:["pinnedCount"]})}),x=d.KC([d.Ik({workId:g,cwd:h,sessionId:i}).strict(),d.Ik({workId:g}).strict()])},62977:(a,b,c)=>{c.d(b,{$:()=>d});let d=c(59473).k5(["off","minimal","low","medium","high","xhigh","max"])},72904:(a,b,c)=>{c.d(b,{H:()=>g});var d=c(610);function e(a,b){return JSON.stringify(a)===JSON.stringify(b)}function f(a,b,c,d,f){for(let g of new Set([...Object.keys(b),...Object.keys(c)])){let h=b[g],i=Object.hasOwn(c,g),j=i?c[g]:null;if(e(h,j))continue;let k=i?function(a,b){if("string"==typeof a&&"string"==typeof b&&b.startsWith(a))return b.slice(a.length)||null;if(Array.isArray(a)&&Array.isArray(b)&&a.length<=b.length&&a.every((a,c)=>e(a,b[c]))){let c=b.slice(a.length);return c.length>0?c:null}return null}(h,j):null;null!==k?f[`${a}.${g.replace(/\\/g,"\\\\").replace(/\./g,"\\.")}`]=k:d[g]=j}}function g(a,b){var c,e;let g;if(a.fixed.type!==b.fixed.type)throw Error(`Chat message type changed: ${a.fixed.type}/${b.fixed.type}`);let h=(g={},a.fixed.viewKey!==b.fixed.viewKey&&(g.viewKey=b.fixed.viewKey),"status"in a.fixed&&"status"in b.fixed&&a.fixed.status!==b.fixed.status&&(g.status=b.fixed.status),a.fixed.hasDetail!==b.fixed.hasDetail&&(g.hasDetail=b.fixed.hasDetail),"usage"in a.fixed&&"usage"in b.fixed&&(c=a.fixed.usage)!==(e=b.fixed.usage)&&(null===c||null===e||c.inputTokens!==e.inputTokens||c.outputTokens!==e.outputTokens||c.cacheReadTokens!==e.cacheReadTokens||c.costUsd!==e.costUsd)&&(g.usage=b.fixed.usage),Object.keys(g).length>0?g:void 0),i={},j={},k={};f("summary",a.summary,b.summary,i,k),b.fixed.hasDetail&&f("detail",a.detail??{},b.detail??{},j,k);let l=Object.keys(i).length>0,m=Object.keys(j).length>0,n=Object.keys(k).length>0;return h||l||m||n?d.ef.parse({type:"message_update",location:a.location,...h?{fixed:h}:{},...l?{summary:i}:{},...m?{detail:j}:{},...n?{increments:k}:{}}):null}},79626:(a,b,c)=>{c.d(b,{N:()=>u,d:()=>t});var d=c(89409),e=c(59473),f=c(63719);let g=e.Ik({mode:e.k5(["sync","async"]),message:e.Yj()}).strict(),h="pi-desk/message-declaration-error",i=new WeakMap,j=e.Ik({viewKey:e.Yj().trim().min(3).max(129).regex(/^[a-z0-9]+(?:-[a-z0-9]+)*\/[a-z0-9]+(?:-[a-z0-9]+)*$/),summary:e.g1(e.Yj(),e.Pq()),detail:e.g1(e.Yj(),e.Pq()).nullable()}).strict();function k(a){switch(a.type){case"user":return"pi-desk/user";case"assistant":return"pi-desk/assistant";case"tool":{let b=a.name.toLowerCase().split(".").at(-1);if("pidesk"===b)return"pi-desk/pidesk";if("bash"===b)return"pi-desk/bash-tool";if("codemode"===b)return"pi-desk/codemode";return"read"===b||"write"===b||"edit"===b?`pi-desk/${b}`:"pi-desk/tool"}case"bash":return"pi-desk/bash";case"custom":return"pi-desk/custom";case"compaction":return"pi-desk/compaction"}}function l(a){return null===a||"object"!=typeof a||Array.isArray(a)?null:a}function m(a){return l(a.result)}function n(a,b){return{...a.summary,path:function(a){let b=a.arguments.path??a.arguments.file_path;if("string"!=typeof b)return null;let c=f.eC.safeParse(b);return c.success?c.data:null}(b)}}function o(a){if(a.declaration)return a.declaration.message;switch(a.type){case"user":return{kind:"user",text:a.text,images:a.images};case"assistant":return{kind:"assistant",text:a.text,thinking:a.thinking,stopReason:a.status};case"tool":return{kind:"tool",toolName:a.name,toolCallId:"",arguments:{},partialResult:null,result:a.output?{output:a.output}:null,isError:"error"===a.status};case"bash":return{kind:"bash",command:a.command,output:a.output,exitCode:"completed"===a.status?0:null,cancelled:"aborted"===a.status,truncated:!1};case"custom":return{kind:"custom",customType:"display-message",content:a.text,details:null};case"compaction":return{kind:"custom",customType:"pi-desk/compaction",content:"",details:a.summary?{text:a.summary}:null}}}function p(a,b,c){return{pluginName:"pi-desk",declarationName:a,builtin:!0,declaration:{priority:b,match:c,project:a=>a.defaultProjection}}}let q=[p("pidesk",-900,a=>"tool"===a.message.kind&&"pidesk"===a.message.toolName),p("read",-900,a=>"tool"===a.message.kind&&"read"===a.message.toolName),p("write",-900,a=>"tool"===a.message.kind&&"write"===a.message.toolName),p("edit",-900,a=>"tool"===a.message.kind&&"edit"===a.message.toolName),p("bash-tool",-900,a=>"tool"===a.message.kind&&"bash"===a.message.toolName),p("user",-1e3,a=>"user"===a.message.kind),p("assistant",-1e3,a=>"assistant"===a.message.kind),p("tool",-1e3,a=>"tool"===a.message.kind),p("bash",-1e3,a=>"bash"===a.message.kind),p("custom",-1e3,a=>"custom"===a.message.kind)];function r(a){var b;let c=a.error instanceof Error?a.error:null,d=a.candidate;for(let b of d?[d]:a.candidates??[]){let d=i.get(b.declaration)??new Set;d.has(a.phase)||(d.add(a.phase),i.set(b.declaration,d),console.warn("[Pi Desk][MessageDeclaration] 插件投影失败,保留基础展示入口",{pluginName:b.pluginName,declarationName:b.declarationName,phase:a.phase,message:(c?.message??"Message Declaration conflict").slice(0,2e3)}))}return{viewKey:h,summary:{text:"string"==typeof a.defaultProjection.summary.text?a.defaultProjection.summary.text:"",phase:a.phase,pluginName:d?.pluginName??null,declarationName:d?.declarationName??null},detail:{phase:a.phase,pluginName:d?.pluginName??null,declarationName:d?.declarationName??null,priority:d?.declaration.priority??null,errorName:c?.name??null,errorMessage:c?.message??String(a.error??"Message Declaration conflict"),errorStack:c?.stack??null,conflicts:(a.candidates??[]).map(a=>({pluginName:a.pluginName,declarationName:a.declarationName,priority:a.declaration.priority})),defaultProjection:{viewKey:(b=a.defaultProjection).viewKey,summary:b.summary,detail:b.detail}}}}function s(a,b,c,e,f,i,p){let s=function(a){let b=function(a){switch(a.type){case"user":return{viewKey:k(a),summary:{text:function(a){let b=a.text.lastIndexOf("\n\n");if(0===a.images.length||b<0)return a.text;let c=a.text.slice(b+2).split("\n");return c.length>a.images.length?a.text:c.every(b=>{let c=/^\[Image: original \d+x\d+, displayed at (\d+)x(\d+)\. Multiply coordinates by \d+\.\d{2} to map to original image\.\]$/.exec(b);return null!==c&&a.images.some(a=>a.width===Number(c[1])&&a.height===Number(c[2]))})?a.text.slice(0,b):a.text}(a),images:a.images.map(a=>({...a}))},detail:null};case"assistant":return{viewKey:k(a),summary:{text:a.text,errorMessage:a.errorMessage,...void 0===a.model?{}:{model:a.model}},detail:a.thinking.length>0?{thinking:a.thinking}:null};case"tool":{let b=k(a),c={...a.images?.length&&["pi-desk/tool","pi-desk/read","pi-desk/codemode"].includes(b)?{images:a.images.map(a=>({...a}))}:{},name:a.name,reasoning:a.reasoning,inputPreview:a.inputPreview,activity:a.activity},d=a.durationMs??null,e=a.startedAtMs??null,f={viewKey:b,summary:"pi-desk/bash-tool"===b?{...c,timing:null!==d?{durationMs:d}:null!==e?{startedAtMs:e}:null}:c,detail:"pi-desk/codemode"===b?{output:a.output,...a.nestedCalls?{nestedCalls:a.nestedCalls}:{}}:a.output?{output:a.output}:null},h=o(a);return"tool"===h.kind?function(a,b){let c=function(a){let b=m(a);if(!b)return null;let c=b.content;if("string"==typeof c)return c;if(Array.isArray(c)){let a=[],b=!1;for(let d of c){let c=l(d);c?.type==="text"&&"string"==typeof c.text&&(b=!0,a.push(c.text))}if(b)return a.join("\n")}return"string"==typeof b.output?b.output:null}(b)??("string"==typeof a.detail?.output?a.detail.output:null);switch(a.viewKey){case"pi-desk/pidesk":{let d=c??"";try{let a=g.safeParse(JSON.parse(d));a.success&&(d=a.data.message)}catch{}return{viewKey:a.viewKey,summary:{input:b.arguments},detail:{output:d}}}case"pi-desk/read":let d;return{viewKey:a.viewKey,summary:n(a,b),detail:Array.isArray(d=m(b)?.content)&&d.some(a=>{let b=l(a);return b?.type==="image"})||null===c?null:{content:c}};case"pi-desk/edit":{let d=l(m(b)?.details??null)?.diff;return{viewKey:a.viewKey,summary:n(a,b),detail:b.isError||"string"!=typeof d?null===c?null:{kind:"output",content:c}:{kind:"diff",content:d}}}case"pi-desk/write":{let d=b.arguments.content;return{viewKey:a.viewKey,summary:n(a,b),detail:b.isError&&null!==c?{kind:"output",content:c}:"string"==typeof d?{kind:"content",content:d}:null===c?null:{kind:"output",content:c}}}default:return a}}(f,h):f}case"bash":return{viewKey:k(a),summary:{command:a.command},detail:a.output?{output:a.output}:null};case"custom":return{viewKey:k(a),summary:{text:a.text},detail:null};case"compaction":return{viewKey:k(a),summary:{},detail:a.summary?{text:a.summary}:null}}}(a.message);if("compaction"===a.message.type)return b;let c={source:a.source,stage:a.stage,message:o(a.message),raw:a.message.declaration?.raw??a.message,defaultProjection:b},d=[...(a.declarations??[]).map(a=>({...a,builtin:!1})),...q];for(let a of[...new Set(d.map(a=>a.declaration.priority))].sort((a,b)=>b-a)){let e,f=d.filter(b=>b.declaration.priority===a),g=[];for(let a of f)try{a.declaration.match(c)&&g.push(a)}catch(c){return r({phase:"match",candidate:a,error:c,defaultProjection:b})}if(0===g.length)continue;if(g.length>1)return r({phase:"conflict",candidates:g,defaultProjection:b});let i=g[0];try{e=i.declaration.project(c)}catch(a){return r({phase:"project",candidate:i,error:a,defaultProjection:b})}try{return function(a,b){let c=j.parse(a);if(!b&&c.viewKey===h)throw Error("Host reserved Message Declaration Error viewKey cannot be registered");return c}(e,i.builtin)}catch(a){return r({phase:"validate",candidate:i,error:a,defaultProjection:b})}}return b}({source:e,stage:f,message:c,declarations:p}),t="tool"===c.type||"bash"===c.type||"custom"===c.type||"compaction"===c.type,u=null!==s.detail&&(!t||i),v={location:a,fixed:function(a,b,c){let d={timestampMs:a,viewKey:c.viewKey,hasDetail:null!==c.detail};switch(b.type){case"user":return{...d,type:"user"};case"assistant":return{...d,type:"assistant",status:b.status,usage:b.usage};case"tool":return{...d,type:"tool",status:b.status,usage:b.usage};case"bash":return{...d,type:"bash",status:b.status};case"custom":case"compaction":return{...d,type:"custom"}}}(b,c,s),summary:s.summary,...u?{detail:s.detail}:{}};return"tempId"in a?d.s4.parse(v):d.mj.parse(v)}function t(a,b,c,d,e=!1,f="temporary"){return s({tempId:a},null,b,c,f,e,d)}function u(a,b,c,d,e,f){return s({index:a,entryId:b},c,d,e,"durable",!0,f)}},83905:(a,b,c)=>{c.d(b,{$E:()=>f,Rv:()=>g,m4:()=>e});var d=c(59473);let e=d.Yj().trim().min(1),f=d.Yj().trim().min(1),g=d.Yj().trim().min(1)},89409:(a,b,c)=>{c.d(b,{D8:()=>I,Hf:()=>H,LJ:()=>j,Pc:()=>i,RX:()=>T,V6:()=>t,XM:()=>U,XW:()=>P,dG:()=>O,fK:()=>S,fb:()=>s,lJ:()=>B,mh:()=>m,mj:()=>M,q5:()=>A,s4:()=>L,wH:()=>Q,y0:()=>V});var d=c(59473),e=c(83905),f=c(63719),g=c(2364),h=c(25984);let i=d.Yj().uuid(),j=d.ai().int().nonnegative(),k=d.Yj().trim().min(3).max(129).regex(/^[a-z0-9]+(?:-[a-z0-9]+)*\/[a-z0-9]+(?:-[a-z0-9]+)*$/),l=d.k5(["image/jpeg","image/png","image/webp","image/gif"]),m=d.Ik({mimeType:l,width:d.ai().int().positive(),height:d.ai().int().positive()}).strict(),n=d.k5(["running","completed","error","aborted"]),o=d.k5(["running","completed","error"]),p=d.ai().int().nonnegative().max(Number.MAX_SAFE_INTEGER),q=d.Ik({inputTokens:p,outputTokens:p,cacheReadTokens:p,costUsd:d.ai().finite().nonnegative()}).strict(),r=d.Yj().trim().min(1).nullable(),s=d.Ik({tempId:i}).strict(),t=d.Ik({index:j,entryId:e.Rv}).strict(),u=d.Ik({timestampMs:g.k.nullable(),type:d.eu("user"),viewKey:k,hasDetail:d.zM()}).strict(),v=d.Ik({timestampMs:g.k.nullable(),type:d.eu("assistant"),viewKey:k,status:n,hasDetail:d.zM(),usage:q}).strict(),w=d.Ik({timestampMs:g.k.nullable(),type:d.eu("tool"),viewKey:k,status:o,hasDetail:d.zM(),usage:q.nullable()}).strict(),x=d.Ik({timestampMs:g.k.nullable(),type:d.eu("bash"),viewKey:k,status:n,hasDetail:d.zM()}).strict(),y=d.Ik({timestampMs:g.k.nullable(),type:d.eu("custom"),viewKey:k,hasDetail:d.zM()}).strict();function z(a){let b=u.extend({timestampMs:a}).strict(),c=v.extend({timestampMs:a}).strict(),e=w.extend({timestampMs:a}).strict(),f=x.extend({timestampMs:a}).strict(),g=y.extend({timestampMs:a}).strict();return{user:b,assistant:c,tool:e,bash:f,custom:g,message:d.gM("type",[b,c,e,f,g])}}d.gM("type",[u,v,w,x,y]);let A=z(d.ch()).message;z(g.k).message;let B=d.Ik({text:d.Yj(),images:d.YO(m)}).strict(),C=d.Ik({provider:d.Yj(),modelId:d.Yj()}).strict();d.Ik({text:d.Yj(),errorMessage:d.Yj().nullable().default(null),model:C.nullable().optional()}).strict();let D={name:d.Yj().trim().min(1),reasoning:r,inputPreview:r,activity:r};function E(){return d.Ik({...D,path:f.eC.nullable()}).strict()}d.Ik({...D,images:d.YO(m).optional()}).strict();let F=d.KC([d.Ik({startedAtMs:g.k}).strict(),d.Ik({durationMs:d.ai().int().nonnegative().max(Number.MAX_SAFE_INTEGER)}).strict()]);d.Ik({...D,timing:F.nullable()}).strict(),E().extend({images:d.YO(m).optional()}).strict(),E(),E(),d.Ik({command:d.Yj().min(1)}).strict(),d.Ik({text:d.Yj()}).strict(),d.Ik({thinking:d.Yj()}).strict();let G=d.Ik({complete:d.zM(),calls:d.YO(d.Ik({name:d.Yj(),arguments:d.g1(d.Yj(),d.Pq()).optional(),argumentsBytes:d.ai().int().nonnegative().optional(),status:d.k5(["ok","error","unfinished"]),durationMs:d.ai().finite().nonnegative().optional(),error:d.Yj().optional()}).strict())}).strict();d.Ik({output:d.Yj(),nestedCalls:G.optional()}).strict(),d.Ik({output:d.Yj()}).strict(),d.Ik({content:d.Yj()}).strict(),d.gM("kind",[d.Ik({kind:d.eu("diff"),content:d.Yj()}).strict(),d.Ik({kind:d.eu("output"),content:d.Yj()}).strict()]),d.gM("kind",[d.Ik({kind:d.eu("content"),content:d.Yj()}).strict(),d.Ik({kind:d.eu("output"),content:d.Yj()}).strict()]),d.Ik({output:d.Yj()}).strict(),d.Ik({text:d.Yj().min(1)}).strict();let H=d.g1(d.Yj(),d.Pq()),I=d.g1(d.Yj(),d.Pq()),J=d.KC([I,d.ch()]);function K(a,b){return d.Ik({location:a,fixed:z(b).message,summary:H,detail:I.optional()}).strict().superRefine((a,b)=>{void 0===a.detail||a.fixed.hasDetail||b.addIssue({code:"custom",message:"message detail requires hasDetail=true",path:["detail"]})})}let L=K(s,d.ch()),M=K(t,g.k);function N(a,b){0===Object.keys(a).length&&b.addIssue({code:"custom",message:"patch requires at least one changed field"})}let O=d.Ik({viewKey:k.optional(),status:d.KC([n,o]).optional(),hasDetail:d.zM().optional(),usage:q.nullable().optional()}).strict().superRefine(N),P=d.g1(d.Yj(),d.Pq()).superRefine(N),Q=d.g1(d.Yj(),d.Pq()).superRefine(N),R=d.KC([d.Yj().min(1),d.YO(d.Pq()).min(1)]),S=d.g1(d.Yj(),R).superRefine((a,b)=>{for(let c of(N(a,b),Object.keys(a)))try{(0,h.U)(c)}catch(a){b.addIssue({code:"custom",message:a instanceof Error?a.message:"increment path is invalid",path:[c]})}}),T=d.Ik({messages:d.YO(M),temporaryMessages:d.YO(L)}).strict(),U=d.Ik({index:j,entryId:e.Rv,detail:J}).strict(),V=d.Ik({mimeType:l,data:d.Yj().min(1)}).strict()},96089:(a,b,c)=>{c.d(b,{R:()=>f});var d=c(59473),e=c(83905);let f=d.Ik({workId:d.Yj().trim().min(1),sessionId:e.$E,branchId:d.Yj().trim().min(1)}).strict()}};
@@ -1,4 +1,4 @@
1
1
  "use strict";exports.id=78262,exports.ids=[78262],exports.modules={6816:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{n:()=>w});var e=c(71473),f=c(77598),g=c(73024),h=c(76760),i=c(75430),j=c(28802),k=a([e,i,j]);[e,i,j]=k.then?(await k)():k;let x=new Set(["openrouter","vercel-ai-gateway","ai-router","cloudflare-ai-gateway","opencode","opencode-go"]),y=null;function l(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function m(){return(0,h.join)((0,e.M)(),"model-catalog.json")}function n(a){return a.trim().toLowerCase().replace(/[\s_]+/gu,"-").replace(/-+/gu,"-")}function o(a){let b=n(a).replace(/:(free|online)$/u,""),c=b.split("/").filter(Boolean);return c.length>1?c.at(-1):b}function p(a){return`${a.provider}\u0000${a.modelId}`}function q(a,b){let c=a[b];return"number"==typeof c&&Number.isFinite(c)&&c>=0?c:null}function r(a,b){if(x.has(a))return!1;let c=n(a),d=n(b);if(b.includes("/"))return d.split("/")[0]===c;let e=o(b);return(e.match(/^(gpt|chatgpt|o1|o3|o4)-/u)?["openai"]:e.startsWith("claude-")?["anthropic"]:e.match(/^(gemini|gemma)-/u)?["google","google-vertex"]:e.startsWith("deepseek-")?["deepseek"]:e.startsWith("glm-")?["zai","zai-coding-cn"]:e.match(/^(kimi|moonshot)-/u)?["moonshotai","moonshotai-cn"]:e.match(/^(mistral|codestral|pixtral)-/u)?["mistral"]:[]).includes(c)}async function s(a){let b=new AbortController,c=setTimeout(()=>b.abort(),2e4);try{let c=await fetch("https://models.dev/api.json",{headers:a?.etag?{"If-None-Match":a.etag}:void 0,signal:b.signal});if(304===c.status){let b=a?.models.flatMap(a=>a.sources.filter(a=>"models-dev"===a.origin));if(!b?.length)throw Error("models.dev 返回 304,但本地没有可用缓存");return{etag:a?.etag??null,unchanged:!0,sources:b}}if(!c.ok)throw Error(`models.dev 请求失败:HTTP ${c.status}`);let d=await c.json();if(!l(d))throw Error("models.dev 返回格式无效");let e=[];for(let[a,b]of Object.entries(d)){if(!l(b)||!l(b.models))continue;let c="string"==typeof b.name&&b.name.trim()?b.name:a;for(let[d,f]of Object.entries(b.models)){if(!l(f))continue;let b="string"==typeof f.id&&f.id.trim()?f.id:d,g=function(a,b,c,d){let e=l(d.limit)?d.limit:{},f=q(e,"context"),g=q(e,"output");if(!f||!g)return null;let h=l(d.modalities)&&Array.isArray(d.modalities.input)?d.modalities.input:["text"],i=[...new Set(h.filter(a=>"text"===a||"image"===a))];return{origin:"models-dev",modelName:"string"==typeof d.name&&d.name.trim()?d.name:c,provider:a,providerName:b,modelId:c,official:r(a,c),defaults:{reasoning:!0===d.reasoning,thinkingLevels:function(a){if(!0!==a.reasoning)return[{level:"off",providerValue:null}];let b=(Array.isArray(a.reasoning_options)?a.reasoning_options:[]).find(a=>l(a)&&"effort"===a.type&&Array.isArray(a.values));if(l(b)&&Array.isArray(b.values)){let a=[];for(let c of b.values){if("string"!=typeof c)continue;let b="none"===c?"off":c;("off"===b||"minimal"===b||"low"===b||"medium"===b||"high"===b||"xhigh"===b||"max"===b)&&a.push({level:b,providerValue:c})}if(a.length>0)return a}return[{level:"high",providerValue:null}]}(d),input:i.length>0?i:["text"],contextWindow:Math.trunc(f),maxTokens:Math.trunc(g),cost:function(a){if(!l(a))return null;let b=q(a,"input"),c=q(a,"output");return null===b||null===c?null:{input:b,output:c,cacheRead:q(a,"cache_read")??0,cacheWrite:q(a,"cache_write")??0}}(d.cost)}}}(a,c,b,f);g&&e.push(g)}}if(0===e.length)throw Error("models.dev 没有返回可用模型");return{etag:c.headers.get("etag"),unchanged:!1,sources:e}}finally{clearTimeout(c)}}async function t(){let a=await i.ModelRuntime.create({allowModelNetwork:!1}),b=new AbortController,c=setTimeout(()=>b.abort(),2e4),d=!1;try{let c=await a.refresh({allowNetwork:!0,force:!0,signal:b.signal});(d=c.aborted||c.errors.size>0)&&console.warn("[Pi Desk][ModelCatalog] Pi 模型目录部分刷新失败",{aborted:c.aborted,providers:[...c.errors.keys()]})}catch(a){d=!0,console.warn("[Pi Desk][ModelCatalog] Pi 模型目录刷新失败",{errorName:a instanceof Error?a.name:"UnknownError"})}finally{clearTimeout(c)}return{sources:a.getModels().map(b=>{var c;return c=a.getProvider(b.provider)?.name??b.provider,{origin:"pi",modelName:b.name,provider:b.provider,providerName:c,modelId:b.id,official:r(b.provider,b.id),defaults:{reasoning:b.reasoning,thinkingLevels:(0,j.getSupportedThinkingLevels)(b).map(a=>({level:a,providerValue:"string"==typeof b.thinkingLevelMap?.[a]?b.thinkingLevelMap[a]:null})),input:[...b.input],contextWindow:b.contextWindow,maxTokens:b.maxTokens,cost:{input:b.cost.input,output:b.cost.output,cacheRead:b.cost.cacheRead,cacheWrite:b.cost.cacheWrite}}}}),failed:d}}async function u(a){let b=a?.models.flatMap(a=>a.sources.filter(a=>"models-dev"===a.origin))??[],c=a?.models.flatMap(a=>a.sources.filter(a=>"pi"===a.origin))??[],[d,e]=await Promise.allSettled([s(a),t()]),i="fulfilled"===d.status,j="fulfilled"===e.status&&!e.value.failed,k=i?d.value.sources:b,l="fulfilled"===e.status?e.value.sources:c;if(!k.length&&!l.length){let a="rejected"===d.status?d.reason:"没有可用缓存";throw Error(`模型参考目录没有可用数据:${a instanceof Error?a.message:String(a)}`)}"rejected"===d.status&&console.warn("[Pi Desk][ModelCatalog] models.dev 刷新失败,继续使用可用目录",{errorName:d.reason instanceof Error?d.reason.name:"UnknownError"});let n=function(a){let b=new Map;for(let d of a){var c;let a=(c=d.modelId,o(c));if(!a)continue;let e=b.get(a),f=e?.name??d.modelName,g=d.official?d.modelName:f;if(!e){b.set(a,{referenceId:a,name:g,sources:[d]});continue}let h=e.sources.findIndex(a=>p(a)===p(d));h>=0?"pi"===d.origin&&(e.sources[h]=d):e.sources.push(d),d.official&&(e.name=g)}return[...b.values()].map(a=>({...a,name:a.sources.find(a=>a.official)?.modelName??a.sources[0]?.modelName??a.name,sources:a.sources.sort((a,b)=>Number(b.official)-Number(a.official)||a.provider.localeCompare(b.provider))})).sort((a,b)=>a.name.localeCompare(b.name))}([...k,...l]),q=!a||JSON.stringify(n)!==JSON.stringify(a.models),r={etag:"fulfilled"===d.status?d.value.etag:a?.etag??null,updatedAt:q?Date.now():a?.updatedAt??Date.now(),models:n},u=m();(0,g.mkdirSync)((0,h.dirname)(u),{recursive:!0});let v=`${u}.${process.pid}.${(0,f.randomUUID)()}.tmp`;try{(0,g.writeFileSync)(v,`${JSON.stringify(r)}
2
- `,"utf8"),(0,g.renameSync)(v,u)}finally{(0,g.existsSync)(v)&&(0,g.unlinkSync)(v)}let w=Number(i)+Number(j);return{cache:r,result:0===w?"cached":1===w?"partial":q?"updated":"unchanged"}}async function v(a){return y||(y=u(a).finally(()=>{y=null}))}async function w(a){var b;let c,d,e,f,h,i=function(){let a=m();if(!(0,g.existsSync)(a))return null;try{let b=JSON.parse((0,g.readFileSync)(a,"utf8"));if(!l(b)||"number"!=typeof b.updatedAt||!Array.isArray(b.models))return null;let c=[];for(let a of b.models){if(!l(a)||!Array.isArray(a.sources))continue;let b=[];for(let c of a.sources){if(!l(c)||"models-dev"!==c.origin&&"pi"!==c.origin||"string"!=typeof c.modelName)continue;let a=function(a){if("models-dev"!==a.origin&&"pi"!==a.origin||"string"!=typeof a.modelName||"string"!=typeof a.provider||"string"!=typeof a.providerName||"string"!=typeof a.modelId||"boolean"!=typeof a.official||!l(a.defaults))return null;let b=a.defaults;if("boolean"!=typeof b.reasoning||!Array.isArray(b.thinkingLevels)||!Array.isArray(b.input)||"number"!=typeof b.contextWindow||"number"!=typeof b.maxTokens)return null;let c=[];for(let a of b.thinkingLevels){if(!l(a)||"string"!=typeof a.level||"off"!==a.level&&"minimal"!==a.level&&"low"!==a.level&&"medium"!==a.level&&"high"!==a.level&&"xhigh"!==a.level&&"max"!==a.level||null!==a.providerValue&&"string"!=typeof a.providerValue)return null;c.push({level:a.level,providerValue:a.providerValue})}let d=b.input.filter(a=>"text"===a||"image"===a);if(0===c.length||0===d.length)return null;let e=null;if(null!==b.cost){if(!l(b.cost))return null;let a=q(b.cost,"input"),c=q(b.cost,"output"),d=q(b.cost,"cacheRead"),f=q(b.cost,"cacheWrite");if(null===a||null===c||null===d||null===f)return null;e={input:a,output:c,cacheRead:d,cacheWrite:f}}return{origin:a.origin,modelName:a.modelName,provider:a.provider,providerName:a.providerName,modelId:a.modelId,official:a.official,defaults:{reasoning:b.reasoning,thinkingLevels:c,input:d,contextWindow:Math.trunc(b.contextWindow),maxTokens:Math.trunc(b.maxTokens),cost:e}}}(c);a&&b.push(a)}"string"==typeof a.referenceId&&"string"==typeof a.name&&b.length>0&&c.push({referenceId:a.referenceId,name:a.name,sources:b})}if(0===c.length)return null;return{etag:"string"==typeof b.etag?b.etag:null,updatedAt:b.updatedAt,models:c}}catch(a){return console.warn("[Pi Desk][ModelCatalog] 模型参考缓存无效",{errorName:a instanceof Error?a.name:"UnknownError"}),null}}(),j="not-requested";if(a.refresh||!i){let a=await v(i);i=a.cache,j=a.result}let k=(b=i,c=n(a.query),e=(d=b.models.map(a=>{if(!c)return{model:a,exact:!1,similar:!0};let b=[n(a.referenceId),...a.sources.flatMap(a=>[n(a.modelId),o(a.modelId)])],d=[...b,n(a.name),...a.sources.map(a=>n(a.providerName))],e=b.some(a=>a===c),f=e||d.some(a=>a.includes(c));return{model:a,exact:e,similar:f}}).filter(a=>a.similar)).filter(a=>a.exact).length,d.sort((a,b)=>Number(b.exact)-Number(a.exact)||a.model.name.localeCompare(b.model.name)),f=(a.page.index-1)*a.page.size,h=d.slice(f,f+a.page.size).map(({model:a,exact:b})=>({referenceId:a.referenceId,name:a.name,match:c?b&&1===e?"exact":"similar":null,sources:a.sources.map(({origin:a,modelName:b,...c})=>c)})),{total:d.length,models:h});return{updatedAt:i.updatedAt,refreshResult:j,page:{index:a.page.index,size:a.page.size,total:k.total},models:k.models}}d()}catch(a){d(a)}})},78262:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{ZJ:()=>f.ZJ,aY:()=>f.aY,n7:()=>f.n7,nZ:()=>e.n,oj:()=>f.oj,ur:()=>f.ur});var e=c(6816),f=c(82526),g=a([e,f]);[e,f]=g.then?(await g)():g,d()}catch(a){d(a)}})},82526:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{ZJ:()=>I,aY:()=>M,n7:()=>J,oj:()=>E,ur:()=>N});var e=c(77598),f=c(73024),g=c(76760),h=c(57975),i=c(75430),j=c(28802),k=c(65209),l=c(97219),m=a([i,j,k]);[i,j,k]=m.then?(await m)():m;let O=["off","minimal","low","medium","high","xhigh","max"],P=/^#[0-9a-fA-F]{6}$/,Q=Promise.resolve();function n(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function o(a){return"string"==typeof a&&a.trim()?a:null}function p(a){return"boolean"==typeof a?a:null}function q(a){return n(a)?Object.fromEntries(Object.entries(a).filter(a=>!!a[0].trim()&&"string"==typeof a[1])):{}}function r(){return(0,g.join)((0,i.getAgentDir)(),"models.json")}function s(a){let b;if(!(0,f.existsSync)(a))return{};let c=(0,f.readFileSync)(a,"utf8");try{let a=(65279===c.charCodeAt(0)?c.slice(1):c).replace(/"(?:\\.|[^"\\])*"|\/\/[^\n]*/g,a=>'"'===a[0]?a:"").replace(/"(?:\\.|[^"\\])*"|,(\s*[}\]])/g,(a,b)=>b??('"'===a[0]?a:""));b=JSON.parse(a)}catch(b){throw Error(`配置文件 ${a} 解析失败:${b instanceof Error?b.message:String(b)}`,{cause:b})}if(!n(b))throw Error(`${a} 必须是 JSON 对象`);return b}function t(a,b){(0,f.mkdirSync)((0,g.dirname)(a),{recursive:!0});let c=`${a}.${process.pid}.${(0,e.randomUUID)()}.tmp`;try{(0,f.writeFileSync)(c,`${JSON.stringify(b,null,2)}
3
- `,"utf8"),(0,f.renameSync)(c,a)}finally{(0,f.existsSync)(c)&&(0,f.unlinkSync)(c)}}function u(a){let b=Q.then(a,a);return Q=b.then(()=>void 0,()=>void 0),b}function v(a,b){return`${a}\u0000${b}`}function w(a,b,c){let d=o(a.id)??b?.id;if(!d)throw Error("模型缺少 id");let e=b?.reasoning??p(a.reasoning)??!1,f=b?.thinkingLevelMap??(n(a.thinkingLevelMap)?a.thinkingLevelMap:{}),g=(b?(0,j.getSupportedThinkingLevels)(b):e?O.filter(a=>"xhigh"===a||"max"===a?"string"==typeof f[a]:null!==f[a]):["off"]).map(a=>({level:a,providerValue:"string"==typeof f[a]?f[a]:null})),h=b?.input??(Array.isArray(a.input)?a.input:["text"]),i=[...new Set(h.filter(a=>"text"===a||"image"===a))],k=n(a.cost)?a.cost:null,l=n(c)&&n(c.cost)?c.cost:null,m=k||l?b?.cost??k:null,r=m&&"number"==typeof m.input&&"number"==typeof m.output&&"number"==typeof m.cacheRead&&"number"==typeof m.cacheWrite?{input:m.input,output:m.output,cacheRead:m.cacheRead,cacheWrite:m.cacheWrite}:null;return{modelId:d,name:b?.name??o(a.name)??d,api:o(a.api),baseUrl:o(a.baseUrl),reasoning:e,thinkingLevels:g,input:i.length>0?i:["text"],contextWindow:b?.contextWindow??("number"==typeof a.contextWindow&&a.contextWindow>0?Math.trunc(a.contextWindow):128e3),maxTokens:b?.maxTokens??("number"==typeof a.maxTokens&&a.maxTokens>0?Math.trunc(a.maxTokens):16384),cost:r,headers:{...q(n(c)?c.headers:void 0),...q(a.headers),...q(b?.headers)},compat:function(a){if(!n(a))return null;let b=o(a.thinkingFormat),c={supportsDeveloperRole:p(a.supportsDeveloperRole),thinkingFormat:b,requiresReasoningContentOnAssistantMessages:p(a.requiresReasoningContentOnAssistantMessages)};return Object.values(c).some(a=>null!==a)?c:null}(b?.compat??a.compat)}}function x(a,b){let c=n(a.providers)?a.providers:{},d=[];for(let[a,e]of Object.entries(c)){if(!a.trim()||!n(e)||void 0!==e.modelOverrides&&Object.keys(e).every(a=>"modelOverrides"===a))continue;let c=Array.isArray(e.models)?e.models:[];d.push({provider:a,name:o(e.name),baseUrl:o(e.baseUrl),api:o(e.api),apiKey:"string"==typeof e.apiKey?e.apiKey:null,authHeader:p(e.authHeader),headers:q(e.headers),models:c.filter(n).map(c=>w(c,"string"==typeof c.id?b.getModel(a,c.id):void 0,n(e.modelOverrides)&&"string"==typeof c.id?e.modelOverrides[c.id]:void 0))})}return d}function y(a){return{provider:a.provider,modelId:a.id,name:a.name,input:[...a.input],contextWindow:a.contextWindow,thinkingLevels:[...(0,j.getSupportedThinkingLevels)(a)]}}async function z(a,b,c=s(r())){let d=[...a.getAvailableSnapshot()];if(b){let c=i.SettingsManager.create(b,(0,i.getAgentDir)()).getEnabledModels();c?.length&&(d=(await (0,i.resolveModelScopeWithDiagnostics)(c,a)).scopedModels.map(a=>a.model))}let e=new Map;for(let b of(0,l.gX)(d,a,c))e.set(v(b.provider,b.id),b);return[...e.values()].map(y)}function A(a){if(!Array.isArray(a.modelPresets))return[];let b=[];for(let c of a.modelPresets){if(!n(c))continue;let a=o(c.provider),d=o(c.modelId),e=o(c.thinkingLevel);a&&d&&e&&O.includes(e)&&b.push({provider:a,modelId:d,thinkingLevel:e,color:"string"==typeof c.color&&P.test(c.color)?c.color:null})}return b}function B(a,b,c){null===c?delete a[b]:a[b]=c}function C(a,b,c){Object.keys(c).length>0?a[b]=c:delete a[b]}async function D(a){let b=(0,i.getAgentDir)();(0,f.mkdirSync)(b,{recursive:!0});let c=(0,g.join)(b,`models.${process.pid}.${(0,e.randomUUID)()}.tmp.json`),d=(0,g.join)(b,`models-store.${process.pid}.${(0,e.randomUUID)()}.tmp.json`);(0,f.writeFileSync)(c,`${JSON.stringify(a,null,2)}
4
- `,"utf8");try{let a=await i.ModelRuntime.create({modelsPath:c,modelsStorePath:d,allowModelNetwork:!1}),b=a.getError();if(b)throw Error(`模型配置校验失败:${b}`);return a}finally{(0,f.existsSync)(c)&&(0,f.unlinkSync)(c),(0,f.existsSync)(d)&&(0,f.unlinkSync)(d)}}function E(a,b){return(0,l.gX)(a,b,s(r()))}async function F(a,b){let c=await a.listCredentials(),d=new Set(c.filter(a=>"oauth"===a.type).map(a=>a.providerId));return[...new Set([...d,...b.map(a=>a.provider)])].map(b=>{let c=a.getProvider(b);return{provider:b,name:c?.name??b,loggedIn:d.has(b),subscription:c?.auth.oauth?.isSubscription===!0,models:a.getModels(b).map(a=>w({id:a.id,cost:a.cost},a,void 0))}})}async function G(a,b,c){let d=await c.listCredentials(),e=n(a.providers)?a.providers:{},f=n(b.providers)?b.providers:{},g=["baseUrl","api","apiKey","headers","authHeader"];for(let a of d){if("oauth"!==a.type)continue;let b=e[a.providerId],c=f[a.providerId],d=n(b)?b:{},i=n(c)?c:{};if(g.some(a=>void 0!==i[a]&&!(0,h.isDeepStrictEqual)(d[a],i[a])))throw Error(`服务 ${a.providerId} 已保存账号登录,请为自定义 API 使用独立服务 ID,或先退出账号`)}}async function H(a,b){let c=(0,l.Tp)(b),d=new Set([...(0,l.Tp)(a)].filter(a=>!c.has(a)));if(d.size){for(let a of A(b))if(d.has((0,l.It)(a.provider,a.modelId)))throw Error(`模型 ${a.provider}/${a.modelId} 仍被常用组合引用,请先移除对应组合`);for(let{cwd:a}of(await (0,k.pJ)(!0))){let b=s((0,g.join)(a,i.CONFIG_DIR_NAME,"settings.json"));if("string"==typeof b.defaultProvider&&"string"==typeof b.defaultModel&&d.has((0,l.It)(b.defaultProvider,b.defaultModel)))throw Error(`项目“${a}”仍将 ${b.defaultProvider}/${b.defaultModel} 设为默认模型,请先在“项目默认”中调整`)}}}async function I(){let a=performance.now(),b=s(r()),c=await i.ModelRuntime.create({allowModelNetwork:!1}),d=await i.ModelRuntime.create({modelsPath:null,allowModelNetwork:!1}),e=(0,l.u1)(b),f=performance.now(),g={providers:x(b,c),presets:A(b),models:await z(c,void 0,b),nativeConfig:b,accountModels:e,accounts:await F(d,e)},h=performance.now()-a;return h>500&&console.warn("[Pi Desk][ModelSettings] 读取模型配置耗时较长",{totalMs:Math.round(h),runtimeMs:Math.round(f-a),projectionMs:Math.round(performance.now()-f),providers:g.providers.length,models:g.models.length}),g}async function J(a){await u(async()=>{let b=r();try{let c,d;try{c=s(b)}catch(b){if(void 0===a.nativeConfig)throw b;c={}}if(void 0!==a.nativeConfig)d=a.nativeConfig;else{let b=await i.ModelRuntime.create({allowModelNetwork:!1}),e=b.getError();if(e)throw Error(`当前模型配置不可用,请先通过原生配置修正:${e}`);let f=void 0===a.accountModels?b:await i.ModelRuntime.create({modelsPath:null,allowModelNetwork:!1});d=function(a,b,c,d){if(void 0!==b.nativeConfig)return b.nativeConfig;let e={...a};if(b.providers){let d=n(a.providers)?a.providers:{},f=new Map(x(a,c).map(a=>[a.provider,a]));e.providers=Object.fromEntries([...Object.entries(d).filter(([a])=>!f.has(a)),...b.providers.map(a=>[a.provider,function(a,b,c){let d=n(a)?{...a}:{};for(let a of["name","baseUrl","api","apiKey","authHeader"])c&&b[a]===c[a]||B(d,a,b[a]);c&&(0,h.isDeepStrictEqual)(b.headers,c.headers)||C(d,"headers",b.headers);let e=Array.isArray(d.models)?d.models.filter(n):[],f=new Map(e.filter(a=>"string"==typeof a.id).map(a=>[a.id,a])),g=new Map(c?.models.map(a=>[a.modelId,a])),i=n(d.modelOverrides)?{...d.modelOverrides}:void 0,j=b.models.map(a=>{let b=i?.[a.modelId],c=n(b)?{...b}:void 0,d=function(a,b,c,d){let e=n(a)?{...a}:{};e.id=b.modelId;let f=a=>d&&Object.hasOwn(d,a)?d:e,g=a=>!c||!(0,h.isDeepStrictEqual)(b[a],c[a]);for(let a of["name","api","baseUrl"])g(a)&&B(f(a),a,b[a]);for(let a of["reasoning","input","contextWindow","maxTokens"])g(a)&&(f(a)[a]=b[a]);if(g("thinkingLevels")&&function(a,b,c){let d=n(a.thinkingLevelMap)?{...a.thinkingLevelMap}:{},e=new Map(c?.thinkingLevels.map(a=>[a.level,a.providerValue])),f=new Map(b.thinkingLevels.map(a=>[a.level,a.providerValue]));for(let a of O)if(!c||e.has(a)!==f.has(a)||e.get(a)!==f.get(a))if(f.has(a)){let b=f.get(a);null===b?delete d[a]:d[a]=b}else("xhigh"!==a&&"max"!==a||e.has(a))&&(d[a]=null);C(a,"thinkingLevelMap",d)}(f("thinkingLevelMap"),b,c),g("cost")){let a=f("cost");if(b.cost){let d=n(a.cost)?{...a.cost}:{...b.cost};for(let a of["input","output","cacheRead","cacheWrite"])c&&b.cost[a]===c.cost?.[a]||(d[a]=b.cost[a]);a.cost=d}else delete e.cost,d&&delete d.cost}if(g("headers")&&function(a,b,c,d){let e=q(a.headers),f=q(b?.headers);for(let a of new Set([...Object.keys(d),...Object.keys(c)]))if(c[a]!==d[a]){if(!Object.hasOwn(c,a)){delete e[a],delete f[a];continue}(Object.hasOwn(e,a)||!Object.hasOwn(f,a)?e:f)[a]=c[a]}C(a,"headers",e),b&&C(b,"headers",f)}(e,d,b.headers,c?.headers??{}),g("compat")){let a=f("compat"),d=n(a.compat)?{...a.compat}:{};for(let a of["supportsDeveloperRole","thinkingFormat","requiresReasoningContentOnAssistantMessages"]){let e=b.compat?.[a]??null;c&&e===(c.compat?.[a]??null)||B(d,a,e)}C(a,"compat",d)}return e}(f.get(a.modelId),a,g.get(a.modelId),c);return i&&c&&(i[a.modelId]=c),d});return(void 0!==d.models||j.length>0)&&(d.models=j),i&&(d.modelOverrides=i),d}(d[a.provider],a,f.get(a.provider))])])}return void 0!==b.accountModels&&(0,l.OM)(a,e,b.accountModels,d),b.presets&&!(0,h.isDeepStrictEqual)(b.presets,A(a))&&(e.modelPresets=b.presets),e}(c,a,b,f)}let e=await D(d),f=await z(e,void 0,d);await G(c,d,e),await H(c,d),function(a,b,c=[]){let d=new Set(c.map(a=>`${v(a.provider,a.modelId)}\u0000${a.thinkingLevel}`)),e=new Map(b.map(a=>[v(a.provider,a.modelId),a])),f=new Set;for(let b of a){let a=`${v(b.provider,b.modelId)}\u0000${b.thinkingLevel}`;if(f.has(a))throw Error("模型预设存在重复组合");f.add(a);let c=e.get(v(b.provider,b.modelId));if((!c||!c.thinkingLevels.includes(b.thinkingLevel))&&!d.has(a))throw Error(`模型预设 ${b.provider}/${b.modelId}:${b.thinkingLevel} 不可用`)}}(A(d),f,A(c)),t(b,d)}catch(a){throw console.error("[Pi Desk][ModelSettings] 模型配置保存失败",{message:a instanceof Error?a.message:String(a)}),Error(`模型配置保存失败:${a instanceof Error?a.message:String(a)}`,{cause:a})}})}function K(a){let b=(0,g.resolve)(a);if(!(0,g.isAbsolute)(b)||!(0,f.existsSync)(b)||!(0,f.statSync)(b).isDirectory())throw Error("项目目录不存在");return b}function L(a){return(0,g.join)(K(a),i.CONFIG_DIR_NAME,"settings.json")}async function M(a){let b=K(a),c=L(b),d=s(c),e=await i.ModelRuntime.create({allowModelNetwork:!1}),f=await z(e,b);if(!["defaultProvider","defaultModel","defaultThinkingLevel"].some(a=>Object.hasOwn(d,a)))return{cwd:b,default:null,models:f};let g=i.SettingsManager.create(b,(0,i.getAgentDir)()),h=g.getDefaultProvider(),j=g.getDefaultModel(),k=g.getDefaultThinkingLevel(),l=f.find(a=>a.provider===h&&a.modelId===j),m=h&&j&&k&&l?.thinkingLevels.includes(k)?{provider:h,modelId:j,thinkingLevel:k}:null;return{cwd:b,default:m,models:f}}async function N(a,b){await u(async()=>{let c=K(a);if(b){let a=await i.ModelRuntime.create({allowModelNetwork:!1}),d=(await z(a,c)).find(a=>a.provider===b.provider&&a.modelId===b.modelId);if(!d||!d.thinkingLevels.includes(b.thinkingLevel))throw Error("项目默认模型或思考等级不可用")}let d=L(c),e=s(d);b?(e.defaultProvider=b.provider,e.defaultModel=b.modelId,e.defaultThinkingLevel=b.thinkingLevel):(delete e.defaultProvider,delete e.defaultModel,delete e.defaultThinkingLevel),t(d,e)})}d()}catch(a){d(a)}})},97219:(a,b,c)=>{c.d(b,{It:()=>g,OM:()=>k,Tp:()=>i,gX:()=>j,u1:()=>h});var d=c(57975);let e=["input","output","cacheRead","cacheWrite"];function f(a){return"object"!=typeof a||null===a||Array.isArray(a)?{}:a}function g(a,b){return`${a}\u0000${b}`}function h(a){if(void 0===a.modelSelections)return[];if(!Array.isArray(a.modelSelections))throw Error("modelSelections 必须是模型引用数组");let b=new Set;return a.modelSelections.map(c=>{let d=f(c);if("string"!=typeof d.provider||!d.provider.trim()||"string"!=typeof d.modelId||!d.modelId.trim())throw Error("modelSelections 中的模型必须包含服务 ID 和模型 ID");let h=g(d.provider,d.modelId);if(b.has(h))throw Error(`重复收录模型:${d.provider}/${d.modelId}`);b.add(h);let i=f(f(f(a.providers)[d.provider]).modelOverrides)[d.modelId],j=f(i),k={};for(let a of["contextWindow","maxTokens"])"number"==typeof j[a]&&(k[a]=j[a]);if(void 0!==j.cost){let a=f(j.cost);k.cost=Object.fromEntries(e.filter(b=>"number"==typeof a[b]).map(b=>[b,a[b]]))}return{provider:d.provider,modelId:d.modelId,overrides:k}})}function i(a){let b=new Set(h(a).map(a=>g(a.provider,a.modelId)));for(let[c,d]of Object.entries(f(a.providers))){let a=f(d).models;if(Array.isArray(a))for(let d of a){let a=f(d);"string"==typeof a.id&&b.add(g(c,a.id))}}return b}function j(a,b,c){let d=i(c),e=new Set(b.getRegisteredProviderIds());return a.filter(a=>d.has(g(a.provider,a.id))||e.has(a.provider)||void 0!==b.getRegisteredNativeProvider(a.provider)||!b.getPhysicalModel(a.provider,a.id))}function k(a,b,c,i){let j=new Map(h(a).map(a=>[g(a.provider,a.modelId),a])),k=new Set,l={...f(b.providers)};for(let a of c){let b=g(a.provider,a.modelId);if(k.has(b))throw Error(`重复收录模型:${a.provider}/${a.modelId}`);k.add(b);let c=j.get(b),h=i.getModel(a.provider,a.modelId);if(!c&&(!h||!i.getProvider(a.provider)?.auth.oauth))throw Error(`登录服务未提供模型:${a.provider}/${a.modelId}`);let m={...f(l[a.provider])};if(Array.isArray(m.models)&&m.models.some(b=>f(b).id===a.modelId))throw Error(`模型已存在于自定义配置:${a.provider}/${a.modelId}`);let n={...f(m.modelOverrides)},o={...f(n[a.modelId])},p=!1;for(let b of["contextWindow","maxTokens","cost"]){let g=a.overrides[b],h=c?.overrides[b];if(!(0,d.isDeepStrictEqual)(h,g))if(p=!0,void 0===g)delete o[b];else if("cost"===b){let b={...f(o.cost)};for(let c of e){let d=a.overrides.cost?.[c];void 0===d?delete b[c]:b[c]=d}Object.keys(b).length?o.cost=b:delete o.cost}else o[b]=g}p&&(Object.keys(o).length?n[a.modelId]=o:delete n[a.modelId],Object.keys(n).length?m.modelOverrides=n:delete m.modelOverrides,Object.keys(m).length?l[a.provider]=m:delete l[a.provider])}let m=c.map(({provider:a,modelId:b})=>({provider:a,modelId:b})),n=h(a).map(({provider:a,modelId:b})=>({provider:a,modelId:b}));(0,d.isDeepStrictEqual)(n,m)||(b.modelSelections=m),(0,d.isDeepStrictEqual)(l,f(b.providers))||(b.providers=l)}}};
2
+ `,"utf8"),(0,g.renameSync)(v,u)}finally{(0,g.existsSync)(v)&&(0,g.unlinkSync)(v)}let w=Number(i)+Number(j);return{cache:r,result:0===w?"cached":1===w?"partial":q?"updated":"unchanged"}}async function v(a){return y||(y=u(a).finally(()=>{y=null}))}async function w(a){var b;let c,d,e,f,h,i=function(){let a=m();if(!(0,g.existsSync)(a))return null;try{let b=JSON.parse((0,g.readFileSync)(a,"utf8"));if(!l(b)||"number"!=typeof b.updatedAt||!Array.isArray(b.models))return null;let c=[];for(let a of b.models){if(!l(a)||!Array.isArray(a.sources))continue;let b=[];for(let c of a.sources){if(!l(c)||"models-dev"!==c.origin&&"pi"!==c.origin||"string"!=typeof c.modelName)continue;let a=function(a){if("models-dev"!==a.origin&&"pi"!==a.origin||"string"!=typeof a.modelName||"string"!=typeof a.provider||"string"!=typeof a.providerName||"string"!=typeof a.modelId||"boolean"!=typeof a.official||!l(a.defaults))return null;let b=a.defaults;if("boolean"!=typeof b.reasoning||!Array.isArray(b.thinkingLevels)||!Array.isArray(b.input)||"number"!=typeof b.contextWindow||"number"!=typeof b.maxTokens)return null;let c=[];for(let a of b.thinkingLevels){if(!l(a)||"string"!=typeof a.level||"off"!==a.level&&"minimal"!==a.level&&"low"!==a.level&&"medium"!==a.level&&"high"!==a.level&&"xhigh"!==a.level&&"max"!==a.level||null!==a.providerValue&&"string"!=typeof a.providerValue)return null;c.push({level:a.level,providerValue:a.providerValue})}let d=b.input.filter(a=>"text"===a||"image"===a);if(0===c.length||0===d.length)return null;let e=null;if(null!==b.cost){if(!l(b.cost))return null;let a=q(b.cost,"input"),c=q(b.cost,"output"),d=q(b.cost,"cacheRead"),f=q(b.cost,"cacheWrite");if(null===a||null===c||null===d||null===f)return null;e={input:a,output:c,cacheRead:d,cacheWrite:f}}return{origin:a.origin,modelName:a.modelName,provider:a.provider,providerName:a.providerName,modelId:a.modelId,official:a.official,defaults:{reasoning:b.reasoning,thinkingLevels:c,input:d,contextWindow:Math.trunc(b.contextWindow),maxTokens:Math.trunc(b.maxTokens),cost:e}}}(c);a&&b.push(a)}"string"==typeof a.referenceId&&"string"==typeof a.name&&b.length>0&&c.push({referenceId:a.referenceId,name:a.name,sources:b})}if(0===c.length)return null;return{etag:"string"==typeof b.etag?b.etag:null,updatedAt:b.updatedAt,models:c}}catch(a){return console.warn("[Pi Desk][ModelCatalog] 模型参考缓存无效",{errorName:a instanceof Error?a.name:"UnknownError"}),null}}(),j="not-requested";if(a.refresh||!i){let a=await v(i);i=a.cache,j=a.result}let k=(b=i,c=n(a.query),e=(d=b.models.map(a=>{if(!c)return{model:a,exact:!1,similar:!0};let b=[n(a.referenceId),...a.sources.flatMap(a=>[n(a.modelId),o(a.modelId)])],d=[...b,n(a.name),...a.sources.map(a=>n(a.providerName))],e=b.some(a=>a===c),f=e||d.some(a=>a.includes(c));return{model:a,exact:e,similar:f}}).filter(a=>a.similar)).filter(a=>a.exact).length,d.sort((a,b)=>Number(b.exact)-Number(a.exact)||a.model.name.localeCompare(b.model.name)),f=(a.page.index-1)*a.page.size,h=d.slice(f,f+a.page.size).map(({model:a,exact:b})=>({referenceId:a.referenceId,name:a.name,match:c?b&&1===e?"exact":"similar":null,sources:a.sources.map(({origin:a,modelName:b,...c})=>c)})),{total:d.length,models:h});return{updatedAt:i.updatedAt,refreshResult:j,page:{index:a.page.index,size:a.page.size,total:k.total},models:k.models}}d()}catch(a){d(a)}})},78262:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Z:()=>f.Z,ZJ:()=>f.ZJ,aY:()=>f.aY,n7:()=>f.n7,nZ:()=>e.n,oj:()=>f.oj,ur:()=>f.ur});var e=c(6816),f=c(82526),g=a([e,f]);[e,f]=g.then?(await g)():g,d()}catch(a){d(a)}})},82526:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{Z:()=>L,ZJ:()=>J,aY:()=>P,n7:()=>M,oj:()=>F,ur:()=>Q});var e=c(77598),f=c(73024),g=c(76760),h=c(57975),i=c(75430),j=c(28802),k=c(65209),l=c(97219),m=a([i,j,k]);[i,j,k]=m.then?(await m)():m;let R=["off","minimal","low","medium","high","xhigh","max"],S=/^#[0-9a-fA-F]{6}$/,T=Promise.resolve();function n(a){return"object"==typeof a&&null!==a&&!Array.isArray(a)}function o(a){return"string"==typeof a&&a.trim()?a:null}function p(a){return"boolean"==typeof a?a:null}function q(a){return n(a)?Object.fromEntries(Object.entries(a).filter(a=>!!a[0].trim()&&"string"==typeof a[1])):{}}function r(){return(0,g.join)((0,i.getAgentDir)(),"models.json")}function s(a){let b;if(!(0,f.existsSync)(a))return{};let c=(0,f.readFileSync)(a,"utf8");try{let a=(65279===c.charCodeAt(0)?c.slice(1):c).replace(/"(?:\\.|[^"\\])*"|\/\/[^\n]*/g,a=>'"'===a[0]?a:"").replace(/"(?:\\.|[^"\\])*"|,(\s*[}\]])/g,(a,b)=>b??('"'===a[0]?a:""));b=JSON.parse(a)}catch(b){throw Error(`配置文件 ${a} 解析失败:${b instanceof Error?b.message:String(b)}`,{cause:b})}if(!n(b))throw Error(`${a} 必须是 JSON 对象`);return b}function t(a,b){(0,f.mkdirSync)((0,g.dirname)(a),{recursive:!0});let c=`${a}.${process.pid}.${(0,e.randomUUID)()}.tmp`;try{(0,f.writeFileSync)(c,b,"utf8"),(0,f.renameSync)(c,a)}finally{(0,f.existsSync)(c)&&(0,f.unlinkSync)(c)}}function u(a,b){t(a,`${JSON.stringify(b,null,2)}
3
+ `)}function v(a){let b=T.then(a,a);return T=b.then(()=>void 0,()=>void 0),b}function w(a,b){return`${a}\u0000${b}`}function x(a,b,c){let d=o(a.id)??b?.id;if(!d)throw Error("模型缺少 id");let e=b?.reasoning??p(a.reasoning)??!1,f=b?.thinkingLevelMap??(n(a.thinkingLevelMap)?a.thinkingLevelMap:{}),g=(b?(0,j.getSupportedThinkingLevels)(b):e?R.filter(a=>"xhigh"===a||"max"===a?"string"==typeof f[a]:null!==f[a]):["off"]).map(a=>({level:a,providerValue:"string"==typeof f[a]?f[a]:null})),h=b?.input??(Array.isArray(a.input)?a.input:["text"]),i=[...new Set(h.filter(a=>"text"===a||"image"===a))],k=n(a.cost)?a.cost:null,l=n(c)&&n(c.cost)?c.cost:null,m=k||l?b?.cost??k:null,r=m&&"number"==typeof m.input&&"number"==typeof m.output&&"number"==typeof m.cacheRead&&"number"==typeof m.cacheWrite?{input:m.input,output:m.output,cacheRead:m.cacheRead,cacheWrite:m.cacheWrite}:null;return{modelId:d,name:b?.name??o(a.name)??d,api:o(a.api),baseUrl:o(a.baseUrl),reasoning:e,thinkingLevels:g,input:i.length>0?i:["text"],contextWindow:b?.contextWindow??("number"==typeof a.contextWindow&&a.contextWindow>0?Math.trunc(a.contextWindow):128e3),maxTokens:b?.maxTokens??("number"==typeof a.maxTokens&&a.maxTokens>0?Math.trunc(a.maxTokens):16384),cost:r,headers:{...q(n(c)?c.headers:void 0),...q(a.headers),...q(b?.headers)},compat:function(a){if(!n(a))return null;let b=o(a.thinkingFormat),c={supportsDeveloperRole:p(a.supportsDeveloperRole),thinkingFormat:b,requiresReasoningContentOnAssistantMessages:p(a.requiresReasoningContentOnAssistantMessages)};return Object.values(c).some(a=>null!==a)?c:null}(b?.compat??a.compat)}}function y(a,b){let c=n(a.providers)?a.providers:{},d=[];for(let[a,e]of Object.entries(c)){if(!a.trim()||!n(e)||void 0!==e.modelOverrides&&Object.keys(e).every(a=>"modelOverrides"===a))continue;let c=Array.isArray(e.models)?e.models:[];d.push({provider:a,name:o(e.name),baseUrl:o(e.baseUrl),api:o(e.api),apiKey:"string"==typeof e.apiKey?e.apiKey:null,authHeader:p(e.authHeader),headers:q(e.headers),models:c.filter(n).map(c=>x(c,"string"==typeof c.id?b.getModel(a,c.id):void 0,n(e.modelOverrides)&&"string"==typeof c.id?e.modelOverrides[c.id]:void 0))})}return d}function z(a){return{provider:a.provider,modelId:a.id,name:a.name,input:[...a.input],contextWindow:a.contextWindow,thinkingLevels:[...(0,j.getSupportedThinkingLevels)(a)]}}async function A(a,b,c=s(r())){let d=[...a.getAvailableSnapshot()];if(b){let c=i.SettingsManager.create(b,(0,i.getAgentDir)()).getEnabledModels();c?.length&&(d=(await (0,i.resolveModelScopeWithDiagnostics)(c,a)).scopedModels.map(a=>a.model))}let e=new Map;for(let b of(0,l.gX)(d,a,c))e.set(w(b.provider,b.id),b);return[...e.values()].map(z)}function B(a){if(!Array.isArray(a.modelPresets))return[];let b=[];for(let c of a.modelPresets){if(!n(c))continue;let a=o(c.provider),d=o(c.modelId),e=o(c.thinkingLevel);a&&d&&e&&R.includes(e)&&b.push({provider:a,modelId:d,thinkingLevel:e,color:"string"==typeof c.color&&S.test(c.color)?c.color:null})}return b}function C(a,b,c){null===c?delete a[b]:a[b]=c}function D(a,b,c){Object.keys(c).length>0?a[b]=c:delete a[b]}async function E(a){let b=(0,i.getAgentDir)();(0,f.mkdirSync)(b,{recursive:!0});let c=(0,g.join)(b,`models.${process.pid}.${(0,e.randomUUID)()}.tmp.json`),d=(0,g.join)(b,`models-store.${process.pid}.${(0,e.randomUUID)()}.tmp.json`);(0,f.writeFileSync)(c,`${JSON.stringify(a,null,2)}
4
+ `,"utf8");try{let a=await i.ModelRuntime.create({modelsPath:c,modelsStorePath:d,allowModelNetwork:!1}),b=a.getError();if(b)throw Error(`模型配置校验失败:${b}`);return a}finally{(0,f.existsSync)(c)&&(0,f.unlinkSync)(c),(0,f.existsSync)(d)&&(0,f.unlinkSync)(d)}}function F(a,b){return(0,l.gX)(a,b,s(r()))}async function G(a,b){let c=await a.listCredentials(),d=new Set(c.filter(a=>"oauth"===a.type).map(a=>a.providerId));return[...new Set([...d,...b.map(a=>a.provider)])].map(b=>{let c=a.getProvider(b);return{provider:b,name:c?.name??b,loggedIn:d.has(b),subscription:c?.auth.oauth?.isSubscription===!0,models:a.getModels(b).map(a=>x({id:a.id,cost:a.cost},a,void 0))}})}async function H(a,b,c){let d=await c.listCredentials(),e=n(a.providers)?a.providers:{},f=n(b.providers)?b.providers:{},g=["baseUrl","api","apiKey","headers","authHeader"];for(let a of d){if("oauth"!==a.type)continue;let b=e[a.providerId],c=f[a.providerId],d=n(b)?b:{},i=n(c)?c:{};if(g.some(a=>void 0!==i[a]&&!(0,h.isDeepStrictEqual)(d[a],i[a])))throw Error(`服务 ${a.providerId} 已保存账号登录,请为自定义 API 使用独立服务 ID,或先退出账号`)}}async function I(a,b,c,d,e){let f=(0,l.Tp)(a),h=(0,l.Tp)(b),j=new Set([...f].filter(a=>!h.has(a))),m=new Map;for(let{from:a,to:b}of c.modelReplacements??[]){let c=(0,l.It)(a.provider,a.modelId),d=(0,l.It)(b.provider,b.modelId);if(c===d)throw Error("模型替换来源和目标不能相同");if(m.has(c))throw Error("模型替换来源不能重复");if(!f.has(c)||!j.has(c))throw Error(`替换来源 ${a.provider}/${a.modelId} 必须是本次移除的已收录模型`);let g=e.find(a=>a.provider===b.provider&&a.modelId===b.modelId);if(!h.has(d)||!g)throw Error(`替换目标 ${b.provider}/${b.modelId} 未收录或不可用`);m.set(c,g)}let n={projectDefaults:[],files:[]};if(!j.size)return n;for(let a of B(b))if(j.has((0,l.It)(a.provider,a.modelId)))throw Error(`模型 ${a.provider}/${a.modelId} 仍被常用组合引用,请先移除对应组合`);for(let{cwd:a}of(await (0,k.pJ)(!0))){let c=(0,g.join)(a,i.CONFIG_DIR_NAME,"settings.json"),e=s(c);if(!["defaultProvider","defaultModel","defaultThinkingLevel"].some(a=>Object.hasOwn(e,a)))continue;let f=i.SettingsManager.create(a,(0,i.getAgentDir)()),h=f.getDefaultProvider(),k=f.getDefaultModel();if(!h||!k||!j.has((0,l.It)(h,k)))continue;let o=m.get((0,l.It)(h,k));if(!o)throw Error(`项目“${a}”仍将 ${h}/${k} 设为默认模型,请先在“项目默认”中调整`);if(!(await A(d,a,b)).some(a=>a.provider===o.provider&&a.modelId===o.modelId))throw Error(`替换目标 ${o.provider}/${o.modelId} 在项目“${a}”中不可用`);let p={provider:h,modelId:k,thinkingLevel:f.getDefaultThinkingLevel()??"off"},q=o.thinkingLevels.includes(p.thinkingLevel)?p.thinkingLevel:o.thinkingLevels[0];if(!q)throw Error(`替换目标 ${o.provider}/${o.modelId} 没有可用思考等级`);let r={provider:o.provider,modelId:o.modelId,thinkingLevel:q};n.projectDefaults.push({cwd:a,from:p,to:r}),n.files.push({path:c,value:{...e,defaultProvider:r.provider,defaultModel:r.modelId,defaultThinkingLevel:r.thinkingLevel}})}return n}async function J(){let a=performance.now(),b=s(r()),c=await i.ModelRuntime.create({allowModelNetwork:!1}),d=await i.ModelRuntime.create({modelsPath:null,allowModelNetwork:!1}),e=(0,l.u1)(b),f=performance.now(),g={providers:y(b,c),presets:B(b),models:await A(c,void 0,b),nativeConfig:b,accountModels:e,accounts:await G(d,e)},h=performance.now()-a;return h>500&&console.warn("[Pi Desk][ModelSettings] 读取模型配置耗时较长",{totalMs:Math.round(h),runtimeMs:Math.round(f-a),projectionMs:Math.round(performance.now()-f),providers:g.providers.length,models:g.models.length}),g}async function K(a){let b,c,d=r();try{b=s(d)}catch(c){if(void 0===a.nativeConfig)throw c;b={}}if(void 0!==a.nativeConfig)c=a.nativeConfig;else{let d=await i.ModelRuntime.create({allowModelNetwork:!1}),e=d.getError();if(e)throw Error(`当前模型配置不可用,请先通过原生配置修正:${e}`);let f=void 0===a.accountModels?d:await i.ModelRuntime.create({modelsPath:null,allowModelNetwork:!1});c=function(a,b,c,d){if(void 0!==b.nativeConfig)return b.nativeConfig;let e={...a};if(b.providers){let d=n(a.providers)?a.providers:{},f=new Map(y(a,c).map(a=>[a.provider,a]));e.providers=Object.fromEntries([...Object.entries(d).filter(([a])=>!f.has(a)),...b.providers.map(a=>[a.provider,function(a,b,c){let d=n(a)?{...a}:{};for(let a of["name","baseUrl","api","apiKey","authHeader"])c&&b[a]===c[a]||C(d,a,b[a]);c&&(0,h.isDeepStrictEqual)(b.headers,c.headers)||D(d,"headers",b.headers);let e=Array.isArray(d.models)?d.models.filter(n):[],f=new Map(e.filter(a=>"string"==typeof a.id).map(a=>[a.id,a])),g=new Map(c?.models.map(a=>[a.modelId,a])),i=n(d.modelOverrides)?{...d.modelOverrides}:void 0,j=b.models.map(a=>{let b=i?.[a.modelId],c=n(b)?{...b}:void 0,d=function(a,b,c,d){let e=n(a)?{...a}:{};e.id=b.modelId;let f=a=>d&&Object.hasOwn(d,a)?d:e,g=a=>!c||!(0,h.isDeepStrictEqual)(b[a],c[a]);for(let a of["name","api","baseUrl"])g(a)&&C(f(a),a,b[a]);for(let a of["reasoning","input","contextWindow","maxTokens"])g(a)&&(f(a)[a]=b[a]);if(g("thinkingLevels")&&function(a,b,c){let d=n(a.thinkingLevelMap)?{...a.thinkingLevelMap}:{},e=new Map(c?.thinkingLevels.map(a=>[a.level,a.providerValue])),f=new Map(b.thinkingLevels.map(a=>[a.level,a.providerValue]));for(let a of R)if(!c||e.has(a)!==f.has(a)||e.get(a)!==f.get(a))if(f.has(a)){let b=f.get(a);null===b?delete d[a]:d[a]=b}else("xhigh"!==a&&"max"!==a||e.has(a))&&(d[a]=null);D(a,"thinkingLevelMap",d)}(f("thinkingLevelMap"),b,c),g("cost")){let a=f("cost");if(b.cost){let d=n(a.cost)?{...a.cost}:{...b.cost};for(let a of["input","output","cacheRead","cacheWrite"])c&&b.cost[a]===c.cost?.[a]||(d[a]=b.cost[a]);a.cost=d}else delete e.cost,d&&delete d.cost}if(g("headers")&&function(a,b,c,d){let e=q(a.headers),f=q(b?.headers);for(let a of new Set([...Object.keys(d),...Object.keys(c)]))if(c[a]!==d[a]){if(!Object.hasOwn(c,a)){delete e[a],delete f[a];continue}(Object.hasOwn(e,a)||!Object.hasOwn(f,a)?e:f)[a]=c[a]}D(a,"headers",e),b&&D(b,"headers",f)}(e,d,b.headers,c?.headers??{}),g("compat")){let a=f("compat"),d=n(a.compat)?{...a.compat}:{};for(let a of["supportsDeveloperRole","thinkingFormat","requiresReasoningContentOnAssistantMessages"]){let e=b.compat?.[a]??null;c&&e===(c.compat?.[a]??null)||C(d,a,e)}D(a,"compat",d)}return e}(f.get(a.modelId),a,g.get(a.modelId),c);return i&&c&&(i[a.modelId]=c),d});return(void 0!==d.models||j.length>0)&&(d.models=j),i&&(d.modelOverrides=i),d}(d[a.provider],a,f.get(a.provider))])])}return void 0!==b.accountModels&&(0,l.OM)(a,e,b.accountModels,d),b.presets&&!(0,h.isDeepStrictEqual)(b.presets,B(a))&&(e.modelPresets=b.presets),e}(b,a,d,f)}let e=await E(c),f=await A(e,void 0,c);await H(b,c,e),function(a,b,c=[]){let d=new Set(c.map(a=>`${w(a.provider,a.modelId)}\u0000${a.thinkingLevel}`)),e=new Map(b.map(a=>[w(a.provider,a.modelId),a])),f=new Set;for(let b of a){let a=`${w(b.provider,b.modelId)}\u0000${b.thinkingLevel}`;if(f.has(a))throw Error("模型预设存在重复组合");f.add(a);let c=e.get(w(b.provider,b.modelId));if((!c||!c.thinkingLevels.includes(b.thinkingLevel))&&!d.has(a))throw Error(`模型预设 ${b.provider}/${b.modelId}:${b.thinkingLevel} 不可用`)}}(B(c),f,B(b));let g=await I(b,c,a,e,f);return g.files.push({path:d,value:c}),g}async function L(a){return v(async()=>{let{projectDefaults:b}=await K(a);return{projectDefaults:b}})}async function M(a){await v(async()=>{try{let{files:b}=await K(a);!function(a){let b=a.map(({path:a})=>(0,f.existsSync)(a)?(0,f.readFileSync)(a,"utf8"):null),c=0;try{for(let{path:b,value:d}of a)u(b,d),c+=1}catch(d){for(let d=c-1;d>=0;d-=1){let c=a[d].path,e=b[d];try{null===e?(0,f.unlinkSync)(c):t(c,e)}catch(a){console.error("[Pi Desk][ModelSettings] 配置文件回滚失败",{path:c,message:a instanceof Error?a.message:String(a)})}}throw d}}(b)}catch(a){throw console.error("[Pi Desk][ModelSettings] 模型配置保存失败",{message:a instanceof Error?a.message:String(a)}),Error(`模型配置保存失败:${a instanceof Error?a.message:String(a)}`,{cause:a})}})}function N(a){let b=(0,g.resolve)(a);if(!(0,g.isAbsolute)(b)||!(0,f.existsSync)(b)||!(0,f.statSync)(b).isDirectory())throw Error("项目目录不存在");return b}function O(a){return(0,g.join)(N(a),i.CONFIG_DIR_NAME,"settings.json")}async function P(a){let b=N(a),c=O(b),d=s(c),e=await i.ModelRuntime.create({allowModelNetwork:!1}),f=await A(e,b);if(!["defaultProvider","defaultModel","defaultThinkingLevel"].some(a=>Object.hasOwn(d,a)))return{cwd:b,default:null,models:f};let g=i.SettingsManager.create(b,(0,i.getAgentDir)()),h=g.getDefaultProvider(),j=g.getDefaultModel(),k=g.getDefaultThinkingLevel(),l=f.find(a=>a.provider===h&&a.modelId===j),m=h&&j&&k&&l?.thinkingLevels.includes(k)?{provider:h,modelId:j,thinkingLevel:k}:null;return{cwd:b,default:m,models:f}}async function Q(a,b){await v(async()=>{let c=N(a);if(b){let a=await i.ModelRuntime.create({allowModelNetwork:!1}),d=(await A(a,c)).find(a=>a.provider===b.provider&&a.modelId===b.modelId);if(!d||!d.thinkingLevels.includes(b.thinkingLevel))throw Error("项目默认模型或思考等级不可用")}let d=O(c),e=s(d);b?(e.defaultProvider=b.provider,e.defaultModel=b.modelId,e.defaultThinkingLevel=b.thinkingLevel):(delete e.defaultProvider,delete e.defaultModel,delete e.defaultThinkingLevel),u(d,e)})}d()}catch(a){d(a)}})},97219:(a,b,c)=>{c.d(b,{It:()=>g,OM:()=>k,Tp:()=>i,gX:()=>j,u1:()=>h});var d=c(57975);let e=["input","output","cacheRead","cacheWrite"];function f(a){return"object"!=typeof a||null===a||Array.isArray(a)?{}:a}function g(a,b){return`${a}\u0000${b}`}function h(a){if(void 0===a.modelSelections)return[];if(!Array.isArray(a.modelSelections))throw Error("modelSelections 必须是模型引用数组");let b=new Set;return a.modelSelections.map(c=>{let d=f(c);if("string"!=typeof d.provider||!d.provider.trim()||"string"!=typeof d.modelId||!d.modelId.trim())throw Error("modelSelections 中的模型必须包含服务 ID 和模型 ID");let h=g(d.provider,d.modelId);if(b.has(h))throw Error(`重复收录模型:${d.provider}/${d.modelId}`);b.add(h);let i=f(f(f(a.providers)[d.provider]).modelOverrides)[d.modelId],j=f(i),k={};for(let a of["contextWindow","maxTokens"])"number"==typeof j[a]&&(k[a]=j[a]);if(void 0!==j.cost){let a=f(j.cost);k.cost=Object.fromEntries(e.filter(b=>"number"==typeof a[b]).map(b=>[b,a[b]]))}return{provider:d.provider,modelId:d.modelId,overrides:k}})}function i(a){let b=new Set(h(a).map(a=>g(a.provider,a.modelId)));for(let[c,d]of Object.entries(f(a.providers))){let a=f(d).models;if(Array.isArray(a))for(let d of a){let a=f(d);"string"==typeof a.id&&b.add(g(c,a.id))}}return b}function j(a,b,c){let d=i(c),e=new Set(b.getRegisteredProviderIds());return a.filter(a=>d.has(g(a.provider,a.id))||e.has(a.provider)||void 0!==b.getRegisteredNativeProvider(a.provider)||!b.getPhysicalModel(a.provider,a.id))}function k(a,b,c,i){let j=new Map(h(a).map(a=>[g(a.provider,a.modelId),a])),k=new Set,l={...f(b.providers)};for(let a of c){let b=g(a.provider,a.modelId);if(k.has(b))throw Error(`重复收录模型:${a.provider}/${a.modelId}`);k.add(b);let c=j.get(b),h=i.getModel(a.provider,a.modelId);if(!c&&(!h||!i.getProvider(a.provider)?.auth.oauth))throw Error(`登录服务未提供模型:${a.provider}/${a.modelId}`);let m={...f(l[a.provider])};if(Array.isArray(m.models)&&m.models.some(b=>f(b).id===a.modelId))throw Error(`模型已存在于自定义配置:${a.provider}/${a.modelId}`);let n={...f(m.modelOverrides)},o={...f(n[a.modelId])},p=!1;for(let b of["contextWindow","maxTokens","cost"]){let g=a.overrides[b],h=c?.overrides[b];if(!(0,d.isDeepStrictEqual)(h,g))if(p=!0,void 0===g)delete o[b];else if("cost"===b){let b={...f(o.cost)};for(let c of e){let d=a.overrides.cost?.[c];void 0===d?delete b[c]:b[c]=d}Object.keys(b).length?o.cost=b:delete o.cost}else o[b]=g}p&&(Object.keys(o).length?n[a.modelId]=o:delete n[a.modelId],Object.keys(n).length?m.modelOverrides=n:delete m.modelOverrides,Object.keys(m).length?l[a.provider]=m:delete l[a.provider])}let m=c.map(({provider:a,modelId:b})=>({provider:a,modelId:b})),n=h(a).map(({provider:a,modelId:b})=>({provider:a,modelId:b}));(0,d.isDeepStrictEqual)(n,m)||(b.modelSelections=m),(0,d.isDeepStrictEqual)(l,f(b.providers))||(b.providers=l)}}};