@jetcrab/pi-desk 1.1.18-dev → 1.1.21

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 (250) hide show
  1. package/docs/plugins.md +82 -2
  2. package/next.config.ts +1 -0
  3. package/package.json +4 -3
  4. package/src/app/page.tsx +6 -1
  5. package/src/app/project-preview/page.tsx +10 -0
  6. package/src/client/l1_entry/pages/l1-home-page.tsx +30 -0
  7. package/src/client/l1_entry/pages/l1-project-preview-page.tsx +33 -0
  8. package/src/client/l1_entry/providers/l1-app-providers.tsx +18 -15
  9. package/src/client/l1_entry/providers/l1-app-runtime-provider.tsx +2 -2
  10. package/src/client/l2_biz/auth/l2-login-biz.ts +3 -0
  11. package/src/client/l2_biz/auth/l2-login.tsx +2 -3
  12. package/src/client/l2_biz/plugin-host/l2-plugin-capability-details.tsx +6 -1
  13. package/src/client/l2_biz/plugin-host/l2-plugin-contribution-host.tsx +71 -10
  14. package/src/client/l2_biz/plugin-host/l2-plugin-management-controls.tsx +9 -0
  15. package/src/client/l2_biz/plugin-host/l2-plugin-session-header-layout.ts +18 -0
  16. package/src/client/l2_biz/plugin-host/l2-plugin-session-header.tsx +247 -0
  17. package/src/client/l2_biz/plugin-host/l2-plugin-widgets.tsx +50 -0
  18. package/src/client/l2_biz/plugin-host/views/l2-plugin-session-header-action.tsx +112 -0
  19. package/src/client/l2_biz/project-preview/hooks/l2-use-project-picker.ts +76 -0
  20. package/src/client/l2_biz/project-preview/hooks/l2-use-project-preview.ts +214 -0
  21. package/src/client/l2_biz/project-preview/l2-project-preview-biz.ts +49 -4
  22. package/src/client/l2_biz/project-preview/l2-project-preview-dialog.tsx +42 -450
  23. package/src/client/l2_biz/project-preview/l2-project-preview-page.tsx +61 -0
  24. package/src/client/l2_biz/project-preview/l2-project-preview.tsx +342 -0
  25. package/src/client/l2_biz/project-preview/runtime/l2-project-history-runtime.ts +9 -3
  26. package/src/client/l2_biz/project-preview/views/l2-project-picker.tsx +168 -0
  27. package/src/client/l2_biz/settings/hooks/l2-use-model-settings.ts +34 -31
  28. package/src/client/l2_biz/settings/views/l2-model-replacement-preview.tsx +7 -1
  29. package/src/client/l2_biz/workbench/file-workspace/l2-file-workspace-runtime.ts +1 -1
  30. package/src/client/l2_biz/workbench/file-workspace/l2-project-preview-biz.ts +4 -3
  31. package/src/client/l2_biz/workbench/hooks/l2-workbench-chat-reload.ts +42 -0
  32. package/src/client/l2_biz/workbench/hooks/l2-workbench-chat-viewport.ts +28 -21
  33. package/src/client/l2_biz/workbench/l2-work-session-columns.module.css +32 -0
  34. package/src/client/l2_biz/workbench/l2-work-session-columns.tsx +55 -16
  35. package/src/client/l2_biz/workbench/l2-work-session-sidebar.tsx +38 -9
  36. package/src/client/l2_biz/workbench/l2-workbench-chat-composer.tsx +12 -1
  37. package/src/client/l2_biz/workbench/l2-workbench-chat.ts +45 -0
  38. package/src/client/l2_biz/workbench/l2-workbench-initialization-notice.tsx +8 -3
  39. package/src/client/l2_biz/workbench/l2-workbench-plugin-slots.ts +13 -0
  40. package/src/client/l2_biz/workbench/l2-workbench.tsx +19 -2
  41. package/src/client/l3_modules/conversation/l3-conversation-markdown.tsx +10 -1
  42. package/src/client/l3_modules/conversation/l3-conversation-viewport.tsx +12 -6
  43. package/src/client/l3_modules/project-files/l3-markdown-preview.module.css +1 -1
  44. package/src/client/l3_modules/project-files/l3-markdown-preview.tsx +10 -1
  45. package/src/client/l3_modules/project-files/l3-project-document-git.ts +4 -3
  46. package/src/client/l3_modules/project-files/l3-project-document-view.tsx +6 -1
  47. package/src/client/l3_modules/project-files/l3-project-file-browser.tsx +171 -229
  48. package/src/client/l3_modules/project-files/l3-project-file-runtime.ts +133 -70
  49. package/src/client/l3_modules/project-files/l3-project-reader.ts +26 -37
  50. package/src/client/l3_modules/project-files/views/l3-project-search-controls.tsx +201 -0
  51. package/src/client/l3_modules/project-files/views/l3-project-search-results.tsx +333 -0
  52. package/src/client/l4_foundation/lib/l4-client-id.tsx +11 -0
  53. package/src/client/l4_foundation/plugin-host/l4-plugin-host-runtime.ts +316 -35
  54. package/src/client/l4_foundation/ui/code/l4-code-preview.tsx +47 -3
  55. package/src/client/l4_foundation/ui/markdown/l4-markdown-remark.ts +89 -0
  56. package/src/client/l4_foundation/ui/markdown/l4-markdown.module.css +58 -0
  57. package/src/client/l4_foundation/ui/markdown/l4-markdown.tsx +108 -0
  58. package/src/common/l2_biz/auth/l2-auth-return-to.ts +41 -0
  59. package/src/common/l2_biz/model-settings/l2-model-settings-contract.ts +5 -1
  60. package/src/common/l2_biz/plugin/l2-plugin-management-messages.ts +4 -0
  61. package/src/common/l2_biz/project-preview/l2-project-history-messages.ts +28 -0
  62. package/src/common/l2_biz/project-preview/l2-project-preview-navigation.ts +5 -0
  63. package/src/common/l2_biz/settings/l2-settings-messages.ts +4 -3
  64. package/src/common/l2_biz/work-session/l2-work-session-file-contract.ts +4 -3
  65. package/src/common/l2_biz/workbench/l2-workbench-locale-messages.ts +8 -0
  66. package/src/common/l3_modules/project-files/l3-project-files-contract.ts +2 -3
  67. package/src/common/l3_modules/project-files/l3-project-files-locale-messages.ts +56 -10
  68. package/src/common/l4_foundation/file/l4-project-file-contract.ts +51 -1
  69. package/src/common/l4_foundation/locale/l4-host-error-messages.ts +11 -0
  70. package/src/common/l4_foundation/locale/l4-locale-messages.ts +16 -0
  71. package/src/instrumentation.ts +0 -2
  72. package/src/server/l1_entry/api/l1-project-read-routes.ts +6 -4
  73. package/src/server/l1_entry/api/l1-project-route.ts +9 -8
  74. package/src/server/l1_entry/api/l1-work-session-file-error.ts +23 -0
  75. package/src/server/l1_entry/node/l1-server.ts +8 -4
  76. package/src/server/l2_biz/plugin-management/l2-plugin-management.ts +0 -3
  77. package/src/server/l2_biz/work-session/l2-work-session-chat-runtime.ts +30 -58
  78. package/src/server/l2_biz/work-session/l2-work-session-manage.ts +0 -4
  79. package/src/server/l4_foundation/file/l4-project-file-index.ts +276 -0
  80. package/src/server/l4_foundation/file/l4-project-search.ts +399 -0
  81. package/src/server/l4_foundation/file/l4-ripgrep-search.ts +192 -0
  82. package/src/server/l4_foundation/file/l4-work-session-project-file.ts +8 -332
  83. package/src/server/l4_foundation/model-settings/l4-model-settings-store.ts +29 -20
  84. package/src/server/l4_foundation/model-settings/l4-model-settings-types.ts +1 -1
  85. package/src/server/l4_foundation/pi/l4-pi-chat-worker.ts +22 -5
  86. package/src/server/l4_foundation/pi/l4-pi-package-maintenance.ts +0 -6
  87. package/src/server/l4_foundation/pi/l4-pi-plugin-capability-probe.ts +1 -3
  88. package/src/server/l4_foundation/pi/l4-pi-plugin-owner-runtime.ts +133 -13
  89. package/src/server/l4_foundation/pi/l4-pi-plugin-probe.ts +1 -3
  90. package/src/server/l4_foundation/pi/l4-pi-runner-process.ts +2 -2
  91. package/src/server/l4_foundation/pi/l4-pi-session-initialization.ts +9 -0
  92. package/src/server/l4_foundation/process/l4-process-tree.js +23 -4
  93. package/temp/build/pi-desk/release/.next/BUILD_ID +1 -1
  94. package/temp/build/pi-desk/release/.next/app-path-routes-manifest.json +3 -2
  95. package/temp/build/pi-desk/release/.next/build-manifest.json +3 -3
  96. package/temp/build/pi-desk/release/.next/prerender-manifest.json +3 -3
  97. package/temp/build/pi-desk/release/.next/react-loadable-manifest.json +1 -2
  98. package/temp/build/pi-desk/release/.next/required-server-files.js +4 -3
  99. package/temp/build/pi-desk/release/.next/required-server-files.json +4 -3
  100. package/temp/build/pi-desk/release/.next/routes-manifest.json +6 -0
  101. package/temp/build/pi-desk/release/.next/server/app/_global-error/page.js +1 -1
  102. package/temp/build/pi-desk/release/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  103. package/temp/build/pi-desk/release/.next/server/app/_global-error.html +1 -1
  104. package/temp/build/pi-desk/release/.next/server/app/_global-error.rsc +3 -3
  105. package/temp/build/pi-desk/release/.next/server/app/_global-error.segments/_full.segment.rsc +3 -3
  106. package/temp/build/pi-desk/release/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +3 -3
  107. package/temp/build/pi-desk/release/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  108. package/temp/build/pi-desk/release/.next/server/app/_not-found/page.js +1 -1
  109. package/temp/build/pi-desk/release/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  110. package/temp/build/pi-desk/release/.next/server/app/api/auth/login/route.js +1 -1
  111. package/temp/build/pi-desk/release/.next/server/app/api/auth/logout/route.js +1 -1
  112. package/temp/build/pi-desk/release/.next/server/app/api/auth-settings/get/route.js +1 -1
  113. package/temp/build/pi-desk/release/.next/server/app/api/auth-settings/replace/route.js +1 -1
  114. package/temp/build/pi-desk/release/.next/server/app/api/capability-modes/get/route.js +1 -1
  115. package/temp/build/pi-desk/release/.next/server/app/api/capability-modes/replace/route.js +1 -1
  116. package/temp/build/pi-desk/release/.next/server/app/api/chat/context/get/route.js +1 -1
  117. package/temp/build/pi-desk/release/.next/server/app/api/chat/images/get/route.js +1 -1
  118. package/temp/build/pi-desk/release/.next/server/app/api/chat/messages/get/route.js +1 -1
  119. package/temp/build/pi-desk/release/.next/server/app/api/health/route.js +1 -1
  120. package/temp/build/pi-desk/release/.next/server/app/api/mcp-check/get/route.js +1 -1
  121. package/temp/build/pi-desk/release/.next/server/app/api/mcp-settings/del/route.js +1 -1
  122. package/temp/build/pi-desk/release/.next/server/app/api/mcp-settings/get/route.js +1 -1
  123. package/temp/build/pi-desk/release/.next/server/app/api/mcp-settings/replace/route.js +1 -1
  124. package/temp/build/pi-desk/release/.next/server/app/api/model-catalog/list/route.js +1 -1
  125. package/temp/build/pi-desk/release/.next/server/app/api/model-settings/get/route.js +1 -1
  126. package/temp/build/pi-desk/release/.next/server/app/api/model-settings/preview/route.js +1 -1
  127. package/temp/build/pi-desk/release/.next/server/app/api/model-settings/replace/route.js +1 -1
  128. package/temp/build/pi-desk/release/.next/server/app/api/pi/directories/list/route.js +1 -1
  129. package/temp/build/pi-desk/release/.next/server/app/api/pi/directory-entries/list/route.js +1 -1
  130. package/temp/build/pi-desk/release/.next/server/app/api/pi/directory-ignores/list/route.js +1 -1
  131. package/temp/build/pi-desk/release/.next/server/app/api/pi/directory-ignores/replace/route.js +1 -1
  132. package/temp/build/pi-desk/release/.next/server/app/api/pi/models/list/route.js +1 -1
  133. package/temp/build/pi-desk/release/.next/server/app/api/pi/session-user-messages/list/route.js +1 -1
  134. package/temp/build/pi-desk/release/.next/server/app/api/pi/sessions/list/route.js +1 -1
  135. package/temp/build/pi-desk/release/.next/server/app/api/plugin-catalog/get/route.js +1 -1
  136. package/temp/build/pi-desk/release/.next/server/app/api/plugin-catalog/search/route.js +1 -1
  137. package/temp/build/pi-desk/release/.next/server/app/api/plugin-catalog/settings-get/route.js +1 -1
  138. package/temp/build/pi-desk/release/.next/server/app/api/plugin-catalog/settings-replace/route.js +1 -1
  139. package/temp/build/pi-desk/release/.next/server/app/api/plugins/add/route.js +1 -1
  140. package/temp/build/pi-desk/release/.next/server/app/api/plugins/apply/route.js +1 -1
  141. package/temp/build/pi-desk/release/.next/server/app/api/plugins/batch/route.js +1 -1
  142. package/temp/build/pi-desk/release/.next/server/app/api/plugins/browser-resources/[resourceGroup]/[...resourcePath]/route.js +1 -1
  143. package/temp/build/pi-desk/release/.next/server/app/api/plugins/del/route.js +1 -1
  144. package/temp/build/pi-desk/release/.next/server/app/api/plugins/enabled-set/route.js +1 -1
  145. package/temp/build/pi-desk/release/.next/server/app/api/plugins/get/route.js +1 -1
  146. package/temp/build/pi-desk/release/.next/server/app/api/plugins/host-runtime/[runtimeVersion]/[...resourcePath]/route.js +1 -1
  147. package/temp/build/pi-desk/release/.next/server/app/api/plugins/list/route.js +1 -1
  148. package/temp/build/pi-desk/release/.next/server/app/api/plugins/reload/route.js +1 -1
  149. package/temp/build/pi-desk/release/.next/server/app/api/plugins/update/route.js +1 -1
  150. package/temp/build/pi-desk/release/.next/server/app/api/project-files/get/route.js +2 -1
  151. package/temp/build/pi-desk/release/.next/server/app/api/project-files/list/route.js +2 -1
  152. package/temp/build/pi-desk/release/.next/server/app/api/project-files/reveal/route.js +1 -1
  153. package/temp/build/pi-desk/release/.next/server/app/api/project-files/search/route.js +2 -1
  154. package/temp/build/pi-desk/release/.next/server/app/api/project-git/get/route.js +2 -1
  155. package/temp/build/pi-desk/release/.next/server/app/api/project-git-branches/list/route.js +2 -1
  156. package/temp/build/pi-desk/release/.next/server/app/api/project-git-changes/list/route.js +2 -1
  157. package/temp/build/pi-desk/release/.next/server/app/api/project-git-diff/get/route.js +2 -1
  158. package/temp/build/pi-desk/release/.next/server/app/api/project-git-heads/get/route.js +2 -1
  159. package/temp/build/pi-desk/release/.next/server/app/api/project-git-log/list/route.js +2 -1
  160. package/temp/build/pi-desk/release/.next/server/app/api/project-model-default/get/route.js +1 -1
  161. package/temp/build/pi-desk/release/.next/server/app/api/project-model-default/replace/route.js +1 -1
  162. package/temp/build/pi-desk/release/.next/server/app/api/skill-files/get/route.js +1 -1
  163. package/temp/build/pi-desk/release/.next/server/app/api/skill-files/list/route.js +1 -1
  164. package/temp/build/pi-desk/release/.next/server/app/api/skill-files/replace/route.js +1 -1
  165. package/temp/build/pi-desk/release/.next/server/app/api/skills/list/route.js +1 -1
  166. package/temp/build/pi-desk/release/.next/server/app/api/task-center/images/get/route.js +1 -1
  167. package/temp/build/pi-desk/release/.next/server/app/api/task-center/messages/get/route.js +1 -1
  168. package/temp/build/pi-desk/release/.next/server/app/api/work-session-git-branch/add/route.js +1 -1
  169. package/temp/build/pi-desk/release/.next/server/app/api/work-session-git-branch/replace/route.js +1 -1
  170. package/temp/build/pi-desk/release/.next/server/app/api/work-session-tree/get/route.js +1 -1
  171. package/temp/build/pi-desk/release/.next/server/app/api/work-session-tree-entry/get/route.js +1 -1
  172. package/temp/build/pi-desk/release/.next/server/app/api/work-sessions/add/route.js +1 -1
  173. package/temp/build/pi-desk/release/.next/server/app/api/work-sessions/branch/route.js +1 -1
  174. package/temp/build/pi-desk/release/.next/server/app/api/work-sessions/del/route.js +1 -1
  175. package/temp/build/pi-desk/release/.next/server/app/api/work-sessions/rename/route.js +1 -1
  176. package/temp/build/pi-desk/release/.next/server/app/api/work-sessions/replace/route.js +1 -1
  177. package/temp/build/pi-desk/release/.next/server/app/api/work-sessions/sort/route.js +1 -1
  178. package/temp/build/pi-desk/release/.next/server/app/favicon.ico/route.js +1 -1
  179. package/temp/build/pi-desk/release/.next/server/app/login/page.js +1 -1
  180. package/temp/build/pi-desk/release/.next/server/app/login/page_client-reference-manifest.js +1 -1
  181. package/temp/build/pi-desk/release/.next/server/app/page.js +72 -72
  182. package/temp/build/pi-desk/release/.next/server/app/page_client-reference-manifest.js +1 -1
  183. package/temp/build/pi-desk/release/.next/server/app/project-preview/page.js +1 -0
  184. package/temp/build/pi-desk/release/.next/server/app/project-preview/page_client-reference-manifest.js +1 -0
  185. package/temp/build/pi-desk/release/.next/server/app-paths-manifest.json +3 -2
  186. package/temp/build/pi-desk/release/.next/server/chunks/10912.js +2 -2
  187. package/temp/build/pi-desk/release/.next/server/chunks/20460.js +15 -0
  188. package/temp/build/pi-desk/release/.next/server/chunks/23054.js +1 -1
  189. package/temp/build/pi-desk/release/.next/server/chunks/25406.js +10 -10
  190. package/temp/build/pi-desk/release/.next/server/chunks/35985.js +3 -17
  191. package/temp/build/pi-desk/release/.next/server/chunks/36361.js +1 -1
  192. package/temp/build/pi-desk/release/.next/server/chunks/48180.js +1 -1
  193. package/temp/build/pi-desk/release/.next/server/chunks/50520.js +2 -4
  194. package/temp/build/pi-desk/release/.next/server/chunks/56830.js +235 -0
  195. package/temp/build/pi-desk/release/.next/server/chunks/6917.js +1 -1
  196. package/temp/build/pi-desk/release/.next/server/chunks/70780.js +1 -0
  197. package/temp/build/pi-desk/release/.next/server/chunks/74528.js +1 -1
  198. package/temp/build/pi-desk/release/.next/server/chunks/78262.js +1 -1
  199. package/temp/build/pi-desk/release/.next/server/chunks/79686.js +62 -0
  200. package/temp/build/pi-desk/release/.next/server/chunks/80780.js +1 -0
  201. package/temp/build/pi-desk/release/.next/server/chunks/81363.js +1 -1
  202. package/temp/build/pi-desk/release/.next/server/chunks/82499.js +4 -4
  203. package/temp/build/pi-desk/release/.next/server/chunks/92386.js +8 -8
  204. package/temp/build/pi-desk/release/.next/server/instrumentation.js +1 -1
  205. package/temp/build/pi-desk/release/.next/server/middleware-build-manifest.js +1 -1
  206. package/temp/build/pi-desk/release/.next/server/middleware-react-loadable-manifest.js +1 -1
  207. package/temp/build/pi-desk/release/.next/server/pages/500.html +1 -1
  208. package/temp/build/pi-desk/release/.next/server/server-reference-manifest.json +1 -1
  209. package/temp/build/pi-desk/release/.next/static/8Yd33M0zPi4tbRn4xCaRY/_buildManifest.js +1 -0
  210. package/temp/build/pi-desk/release/.next/static/chunks/11937-1d0a9822f2c7995b.js +1 -0
  211. package/temp/build/pi-desk/release/.next/static/chunks/14825-5579aed34a631ad7.js +62 -0
  212. package/temp/build/pi-desk/release/.next/static/chunks/15302-9c807afc6c60de0c.js +1 -0
  213. package/temp/build/pi-desk/release/.next/static/chunks/19991.8aa2e4b6df15fad6.js +1 -0
  214. package/temp/build/pi-desk/release/.next/static/chunks/22092-6d1bfbefa825ec03.js +1 -0
  215. package/temp/build/pi-desk/release/.next/static/chunks/37313-d5970e2d0c270d22.js +238 -0
  216. package/temp/build/pi-desk/release/.next/static/chunks/{49516-cc4dcd84d64ab4fe.js → 51474-8dc714cb76b2e60a.js} +2 -2
  217. package/temp/build/pi-desk/release/.next/static/chunks/57235-03ba1044f22b6c84.js +1 -0
  218. package/temp/build/pi-desk/release/.next/static/chunks/79267-7d21d7cdbd7cfca1.js +1 -0
  219. package/temp/build/pi-desk/release/.next/static/chunks/82371-f7ba4a07a5dbcf34.js +1 -0
  220. package/temp/build/pi-desk/release/.next/static/chunks/9038-03144ed96d613f75.js +15 -0
  221. package/temp/build/pi-desk/release/.next/static/chunks/app/{error-0296a3b20cd1bf00.js → error-216b14b5da089ed3.js} +1 -1
  222. package/temp/build/pi-desk/release/.next/static/chunks/app/layout-20718f1503910291.js +1 -0
  223. package/temp/build/pi-desk/release/.next/static/chunks/app/login/page-0d3d4827802108e5.js +1 -0
  224. package/temp/build/pi-desk/release/.next/static/chunks/app/{not-found-2aab8b33ebbf3257.js → not-found-720cdf6a606b821a.js} +1 -1
  225. package/temp/build/pi-desk/release/.next/static/chunks/app/page-6ebc1c877f6025dd.js +158 -0
  226. package/temp/build/pi-desk/release/.next/static/chunks/app/project-preview/page-d70ee4e9409b970a.js +1 -0
  227. package/temp/build/pi-desk/release/.next/static/chunks/webpack-b60891a214e0925d.js +1 -0
  228. package/temp/build/pi-desk/release/.next/static/css/1e780a4936aa6ba3.css +1 -0
  229. package/temp/build/pi-desk/release/.next/static/css/6dbae2922f88ca31.css +1 -0
  230. package/temp/build/pi-desk/release/.next/static/css/f646ca6c07245c4c.css +1 -0
  231. package/temp/build/pi-desk/release/.next/trace-build +1 -1
  232. package/temp/build/pi-desk/release/.next/server/chunks/33658.js +0 -296
  233. package/temp/build/pi-desk/release/.next/server/chunks/8584.js +0 -2
  234. package/temp/build/pi-desk/release/.next/static/chunks/31087-ba426d09d6f68bfd.js +0 -1
  235. package/temp/build/pi-desk/release/.next/static/chunks/3814-35cfab0ce3aa7c41.js +0 -1
  236. package/temp/build/pi-desk/release/.next/static/chunks/39654-b5fedd762ea0312e.js +0 -238
  237. package/temp/build/pi-desk/release/.next/static/chunks/70669.07f3670bfb7d6dd2.js +0 -1
  238. package/temp/build/pi-desk/release/.next/static/chunks/74220-795a2e7185bd66cb.js +0 -1
  239. package/temp/build/pi-desk/release/.next/static/chunks/75130-d2ca74894aff8085.js +0 -13
  240. package/temp/build/pi-desk/release/.next/static/chunks/78923-17a9c337b29dcecd.js +0 -1
  241. package/temp/build/pi-desk/release/.next/static/chunks/81881-f11dbe7dc0d04ed9.js +0 -1
  242. package/temp/build/pi-desk/release/.next/static/chunks/96995-8f8313ea2ac3abd7.js +0 -62
  243. package/temp/build/pi-desk/release/.next/static/chunks/app/layout-c0e1c5cef8620cf8.js +0 -3
  244. package/temp/build/pi-desk/release/.next/static/chunks/app/login/page-84892b06243891f0.js +0 -1
  245. package/temp/build/pi-desk/release/.next/static/chunks/app/page-a984139e99586041.js +0 -158
  246. package/temp/build/pi-desk/release/.next/static/chunks/webpack-40a782fc8a3535b9.js +0 -1
  247. package/temp/build/pi-desk/release/.next/static/css/6427d02b6edf406f.css +0 -1
  248. package/temp/build/pi-desk/release/.next/static/css/79e06f05df9edff0.css +0 -1
  249. package/temp/build/pi-desk/release/.next/static/n2LrXQgq8UkbH_AzhR3fw/_buildManifest.js +0 -1
  250. /package/temp/build/pi-desk/release/.next/static/{n2LrXQgq8UkbH_AzhR3fw → 8Yd33M0zPi4tbRn4xCaRY}/_ssgManifest.js +0 -0
@@ -45,6 +45,7 @@ import {
45
45
  const L4_PLUGIN_PUSH_MAX_JSON_BYTES = 64 * 1024
46
46
  const L4_PLUGIN_LIFECYCLE_TIMEOUT_MS = 1_500
47
47
  const L4_PLUGIN_LOAD_TIMEOUT_MS = 15_000
48
+ const L4_PLUGIN_RECOVERY_DELAY_MS = 10_000
48
49
  const L4_PLUGIN_BROWSER_TOTAL_BYTES = 128 * 1024 * 1024
49
50
  const L4PiPluginPushDataSchema = z.record(z.string(), z.json())
50
51
  const L4PiSourceSchema = z
@@ -153,6 +154,22 @@ class L4PiPluginPhaseError extends Error {
153
154
  }
154
155
  }
155
156
 
157
+ class L4PiPluginLoadTimeoutError extends L4PiPluginPhaseError {
158
+ constructor(
159
+ phase: L4PiPluginDiagnosticPhase,
160
+ readonly execution: Promise<void>
161
+ ) {
162
+ super(phase, new Error('插件加载超时,已停止本次加载'))
163
+ this.name = 'L4PiPluginLoadTimeoutError'
164
+ }
165
+ }
166
+
167
+ interface L4PiPluginRecovery {
168
+ installedPath: string
169
+ settled: Promise<void>
170
+ controller: AbortController
171
+ }
172
+
156
173
  interface L4PiPluginOwner {
157
174
  source: string
158
175
  packageName: string | null
@@ -163,6 +180,7 @@ interface L4PiPluginOwner {
163
180
  pluginNames: Set<string>
164
181
  activeCalls: Set<AbortController>
165
182
  subscriptions: Set<PluginDisposer>
183
+ pendingCleanup: Set<Promise<void>>
166
184
  beforeReload: PiDeskPluginLifecycle['beforeReload'] | null
167
185
  disposer: PluginDisposer | null
168
186
  }
@@ -269,11 +287,15 @@ async function runLifecycleWithTimeout(input: {
269
287
  }): Promise<void> {
270
288
  let timer: ReturnType<typeof setTimeout> | null = null
271
289
  const timeoutMs = L4_PLUGIN_LIFECYCLE_TIMEOUT_MS
290
+ const execution = Promise.resolve().then(input.execute)
291
+ input.owner.pendingCleanup.add(execution)
292
+ const release = (): void => {
293
+ input.owner.pendingCleanup.delete(execution)
294
+ }
295
+ void execution.then(release, release)
272
296
  try {
273
297
  const completed = await Promise.race([
274
- Promise.resolve()
275
- .then(input.execute)
276
- .then(() => true),
298
+ execution.then(() => true),
277
299
  new Promise<false>((resolveTimeout) => {
278
300
  timer = setTimeout(() => resolveTimeout(false), timeoutMs)
279
301
  })
@@ -307,6 +329,7 @@ export class L4PiPluginOwnerRuntime {
307
329
  private readonly maintainingSources = new Set<string>()
308
330
  private readonly lifetime = new AbortController()
309
331
  private readonly packageDiagnostics = new Map<string, L4PiPluginPackageDiagnostic>()
332
+ private readonly recoveries = new Map<string, L4PiPluginRecovery>()
310
333
  private initializePromise: Promise<void> | null = null
311
334
  private initialized = false
312
335
  private disposed = false
@@ -386,6 +409,7 @@ export class L4PiPluginOwnerRuntime {
386
409
  ) {
387
410
  throw new L4PiPluginRuntimeBusyError()
388
411
  }
412
+ this.cancelRecovery(source)
389
413
  this.maintainingSources.add(source)
390
414
  try {
391
415
  while (this.owners.some((owner) => owner.source === source && owner.activeCalls.size > 0)) {
@@ -404,6 +428,7 @@ export class L4PiPluginOwnerRuntime {
404
428
  if (this.disposed || !this.acceptingCalls || this.changingSources.has(source)) {
405
429
  throw new L4PiPluginRuntimeBusyError()
406
430
  }
431
+ this.cancelRecovery(source)
407
432
  const owner = this.owners.find((item) => item.source === source)
408
433
 
409
434
  this.changingSources.add(source)
@@ -487,6 +512,7 @@ export class L4PiPluginOwnerRuntime {
487
512
  }
488
513
 
489
514
  this.acceptingCalls = false
515
+ for (const source of this.recoveries.keys()) this.cancelRecovery(source)
490
516
  for (const owner of this.owners) owner.draining = true
491
517
  await Promise.all(
492
518
  [...this.owners].reverse().map(async (owner) => {
@@ -648,6 +674,7 @@ export class L4PiPluginOwnerRuntime {
648
674
  if (this.disposed) return
649
675
  this.disposed = true
650
676
  this.lifetime.abort()
677
+ for (const source of this.recoveries.keys()) this.cancelRecovery(source)
651
678
  this.acceptingCalls = false
652
679
  this.changeListeners.clear()
653
680
  this.workSessionProvider = null
@@ -671,7 +698,56 @@ export class L4PiPluginOwnerRuntime {
671
698
  this.packageDiagnostics.clear()
672
699
  for (const item of await this.packageProvider()) {
673
700
  if (this.disposed) return
674
- await this.loadPackage(item.source, item.installedPath)
701
+ const settled = await this.loadPackage(item.source, item.installedPath)
702
+ if (settled && !this.disposed) {
703
+ this.recoveries.set(item.source, {
704
+ installedPath: item.installedPath,
705
+ settled: settled.execution,
706
+ controller: new AbortController()
707
+ })
708
+ }
709
+ }
710
+ for (const [source, recovery] of this.recoveries) {
711
+ void this.recoverSource(source, recovery)
712
+ }
713
+ }
714
+
715
+ private cancelRecovery(source: string): void {
716
+ const recovery = this.recoveries.get(source)
717
+ this.recoveries.delete(source)
718
+ recovery?.controller.abort()
719
+ }
720
+
721
+ private async recoverSource(source: string, recovery: L4PiPluginRecovery): Promise<void> {
722
+ const signal = recovery.controller.signal
723
+ let onAbort!: () => void
724
+ const canceled = new Promise<never>((_, reject) => {
725
+ onAbort = (): void => reject(signal.reason)
726
+ signal.addEventListener('abort', onAbort, { once: true })
727
+ })
728
+ try {
729
+ // 超时只结束等待;旧 setup 和清理真正结束后才允许自动创建新实例。
730
+ await Promise.race([recovery.settled, canceled])
731
+ signal.throwIfAborted()
732
+ console.info('[Pi Desk][GlobalPluginRuntime] 插件加载超时,稍后自动重试一次', {
733
+ source,
734
+ delayMs: L4_PLUGIN_RECOVERY_DELAY_MS
735
+ })
736
+ await delay(L4_PLUGIN_RECOVERY_DELAY_MS, undefined, { signal })
737
+ signal.throwIfAborted()
738
+ this.recoveries.delete(source)
739
+ await this.replaceSource(source, recovery.installedPath)
740
+ console.info('[Pi Desk][GlobalPluginRuntime] 插件自动重试成功', { source })
741
+ } catch (error) {
742
+ if (!signal.aborted) {
743
+ console.warn('[Pi Desk][GlobalPluginRuntime] 插件自动重试失败,不再自动加载', {
744
+ source,
745
+ message: errorMessage(error)
746
+ })
747
+ }
748
+ } finally {
749
+ signal.removeEventListener('abort', onAbort)
750
+ if (this.recoveries.get(source) === recovery) this.recoveries.delete(source)
675
751
  }
676
752
  }
677
753
 
@@ -681,9 +757,28 @@ export class L4PiPluginOwnerRuntime {
681
757
  globalInput: unknown
682
758
  ): Promise<void> {
683
759
  let timer: ReturnType<typeof setTimeout> | undefined
760
+ let phase: L4PiPluginDiagnosticPhase = 'entry'
761
+ let phaseStartedAt = performance.now()
762
+ const logPhase = (): void => {
763
+ const durationMs = Math.round(performance.now() - phaseStartedAt)
764
+ if (durationMs < 1_000) return
765
+ console.info('[Pi Desk][GlobalPluginRuntime] 插件加载阶段耗时', {
766
+ source: owner.source,
767
+ packageName: owner.packageName,
768
+ phase,
769
+ durationMs
770
+ })
771
+ }
772
+ const enterPhase = (next: L4PiPluginDiagnosticPhase): void => {
773
+ logPhase()
774
+ phase = next
775
+ phaseStartedAt = performance.now()
776
+ }
684
777
  const execution = (async (): Promise<void> => {
685
- if (entryInput !== undefined) await this.loadEntryOwner(owner, entryInput)
686
- else await this.loadLegacyOwner(owner, globalInput)
778
+ const onSetup = (): void => enterPhase('setup')
779
+ if (entryInput !== undefined) await this.loadEntryOwner(owner, entryInput, onSetup)
780
+ else await this.loadLegacyOwner(owner, globalInput, onSetup)
781
+ enterPhase('resources')
687
782
  try {
688
783
  await this.validateOwnerResources(owner)
689
784
  } catch (error) {
@@ -696,16 +791,20 @@ export class L4PiPluginOwnerRuntime {
696
791
  execution,
697
792
  new Promise<never>((_, reject) => {
698
793
  timer = setTimeout(() => {
699
- reject(new L4PiPluginPhaseError('setup', new Error('插件初始化超时,已放弃加载')))
794
+ reject(new L4PiPluginLoadTimeoutError(phase, execution))
700
795
  }, L4_PLUGIN_LOAD_TIMEOUT_MS)
701
796
  })
702
797
  ])
703
798
  } finally {
704
799
  if (timer) clearTimeout(timer)
800
+ logPhase()
705
801
  }
706
802
  }
707
803
 
708
- private async loadPackage(source: string, installedPath: string): Promise<void> {
804
+ private async loadPackage(
805
+ source: string,
806
+ installedPath: string
807
+ ): Promise<{ execution: Promise<void> } | null> {
709
808
  const startedAt = performance.now()
710
809
  const packageRoot = resolve(installedPath)
711
810
  let manifest: L4PiDeskPackageManifest
@@ -721,13 +820,13 @@ export class L4PiPluginOwnerRuntime {
721
820
  status: 'failed',
722
821
  error: { phase: 'package', message: errorMessage(error) }
723
822
  })
724
- return
823
+ return null
725
824
  }
726
825
 
727
826
  const entryInput = manifest.piDesk?.entry
728
827
  const globalInput = manifest.piDesk?.global
729
- if (entryInput === undefined && globalInput === undefined) return
730
- if (this.disposed) return
828
+ if (entryInput === undefined && globalInput === undefined) return null
829
+ if (this.disposed) return null
731
830
  const owner: L4PiPluginOwner = {
732
831
  source,
733
832
  packageName: typeof manifest.name === 'string' ? manifest.name : null,
@@ -738,6 +837,7 @@ export class L4PiPluginOwnerRuntime {
738
837
  pluginNames: new Set(),
739
838
  activeCalls: new Set(),
740
839
  subscriptions: new Set(),
840
+ pendingCleanup: new Set(),
741
841
  beforeReload: null,
742
842
  disposer: null
743
843
  }
@@ -783,12 +883,26 @@ export class L4PiPluginOwnerRuntime {
783
883
  message,
784
884
  durationMs: Math.round(performance.now() - startedAt)
785
885
  })
886
+ if (error instanceof L4PiPluginLoadTimeoutError) {
887
+ return {
888
+ execution: error.execution
889
+ .catch(() => {})
890
+ .then(async () => {
891
+ await Promise.allSettled([...owner.pendingCleanup])
892
+ })
893
+ }
894
+ }
786
895
  } finally {
787
896
  this.loadingOwners.delete(owner)
788
897
  }
898
+ return null
789
899
  }
790
900
 
791
- private async loadEntryOwner(owner: L4PiPluginOwner, entryInput: unknown): Promise<void> {
901
+ private async loadEntryOwner(
902
+ owner: L4PiPluginOwner,
903
+ entryInput: unknown,
904
+ onSetup: () => void
905
+ ): Promise<void> {
792
906
  const entryPath = packageEntryPath(owner.packageRoot, entryInput, 'piDesk.entry')
793
907
  const entryStat = await stat(entryPath)
794
908
  if (!entryStat.isFile()) throw new Error('Pi Desk Plugin entry is not a file')
@@ -806,6 +920,7 @@ export class L4PiPluginOwnerRuntime {
806
920
 
807
921
  const pluginName = parseL4PiPluginName(definition.name)
808
922
  this.claimPluginName(owner, pluginName)
923
+ onSetup()
809
924
  try {
810
925
  const lifecycle = normalizeSetupResult(
811
926
  await definition.setup(this.createPiDeskFacade(owner, pluginName, owner.packageRoot))
@@ -821,7 +936,11 @@ export class L4PiPluginOwnerRuntime {
821
936
  }
822
937
  }
823
938
 
824
- private async loadLegacyOwner(owner: L4PiPluginOwner, entryInput: unknown): Promise<void> {
939
+ private async loadLegacyOwner(
940
+ owner: L4PiPluginOwner,
941
+ entryInput: unknown,
942
+ onSetup: () => void
943
+ ): Promise<void> {
825
944
  const entryPath = packageEntryPath(owner.packageRoot, entryInput, 'piDesk.global')
826
945
  const entryStat = await stat(entryPath)
827
946
  if (!entryStat.isFile()) throw new Error('Global Plugin entry is not a file')
@@ -832,6 +951,7 @@ export class L4PiPluginOwnerRuntime {
832
951
  }
833
952
 
834
953
  const factory = loaded.default as GlobalPluginFactory
954
+ onSetup()
835
955
  try {
836
956
  const disposer = await factory(this.createLegacyApi(owner))
837
957
  if (disposer !== undefined && typeof disposer !== 'function') {
@@ -61,9 +61,7 @@ export async function runL4PiPluginProbe(
61
61
  maxOutputBytes: L4_PI_PLUGIN_PROBE_MAX_OUTPUT_BYTES,
62
62
  timeoutMs: L4_PI_PLUGIN_PROBE_TIMEOUT_MS,
63
63
  signal,
64
- timeoutError: () => new Error('插件预检超时'),
65
- cleanupError: (output, error) =>
66
- new Error(`${output}\n插件预检进程树清理失败`, { cause: error })
64
+ timeoutError: () => new Error('插件预检超时')
67
65
  })
68
66
  if (code !== 0) throw new Error(stderr.trim() || `插件预检进程退出码 ${code ?? 'null'}`)
69
67
  const marker = stdout.lastIndexOf(L4_PI_PLUGIN_PROBE_RESULT_PREFIX)
@@ -19,7 +19,6 @@ export function runL4PiRunnerProcess(input: {
19
19
  timeoutMs: number
20
20
  signal?: AbortSignal
21
21
  timeoutError: () => Error
22
- cleanupError: (stderr: string, error: unknown) => Error
23
22
  }): Promise<L4PiRunnerProcessResult> {
24
23
  return new Promise<L4PiRunnerProcessResult>((resolveRun, rejectRun) => {
25
24
  if (input.signal?.aborted) {
@@ -59,7 +58,8 @@ export function runL4PiRunnerProcess(input: {
59
58
  exitCode: child.exitCode,
60
59
  reason: failure.message
61
60
  })
62
- rejectRun(input.cleanupError(stderr.trim(), failure))
61
+ // 命令的退出、超时或取消结果已确定;清理诊断不能覆盖业务结果。
62
+ callback()
63
63
  })
64
64
  }
65
65
  const onAbort = (): void => finish(() => rejectRun(new Error('操作已取消')))
@@ -9,6 +9,8 @@ import {
9
9
  type ExtensionHandler,
10
10
  type InputEvent,
11
11
  type InputEventResult,
12
+ type MessageEndEvent,
13
+ type MessageEndEventResult,
12
14
  type SessionManager,
13
15
  type SessionBeforeTreeEvent
14
16
  } from '@earendil-works/pi-coding-agent'
@@ -40,6 +42,7 @@ interface InitializationOptions {
40
42
  resources: L4PiSessionResources
41
43
  readCapabilities: () => CapabilityMode | undefined
42
44
  onInput: ExtensionHandler<InputEvent, InputEventResult>
45
+ onMessageEnd: (event: MessageEndEvent) => MessageEndEventResult | undefined
43
46
  onTree?: () => void
44
47
  onCommand?: (args: string[], toolCallId: string) => Promise<L4PiDeskCommandResult>
45
48
  pluginEvents: ConstructorParameters<typeof L4PiSessionPluginRuntime>[0]
@@ -296,6 +299,12 @@ export class L4PiSessionInitialization {
296
299
  this.plugins.reset()
297
300
  }
298
301
  )
302
+ extension.handlers.set('message_end', [
303
+ async (event) => {
304
+ this.assertActive()
305
+ return this.options.onMessageEnd(event as MessageEndEvent)
306
+ }
307
+ ])
299
308
  extension.handlers.set('session_tree', [async () => this.options.onTree?.()])
300
309
  extension.handlers.set('session_before_tree', [
301
310
  async (event) => {
@@ -3,6 +3,7 @@
3
3
  // CLI、服务端与隔离探针共用的原生 Node 实现,不依赖 Next 的 react-server 导出条件。
4
4
  const { execFile } = require('node:child_process')
5
5
  const { performance } = require('node:perf_hooks')
6
+ const { setTimeout: delay } = require('node:timers/promises')
6
7
  const { promisify } = require('node:util')
7
8
  const execFileAsync = promisify(execFile)
8
9
 
@@ -182,10 +183,28 @@ async function terminateManagedTree(child) {
182
183
  }
183
184
 
184
185
  // 托管服务与维护命令均以自己的进程组启动,不终止 CLI 所在进程组。
185
- try {
186
- process.kill(-child.pid, 'SIGKILL')
187
- } catch (error) {
188
- if (error.code !== 'ESRCH') throw error
186
+ const deadline = performance.now() + 5_000
187
+ while (true) {
188
+ try {
189
+ process.kill(-child.pid, 'SIGKILL')
190
+ } catch (error) {
191
+ if (error.code === 'ESRCH') return
192
+ throw error
193
+ }
194
+ const { stdout } = await execFileAsync('ps', ['-eo', 'pgid=,stat='], {
195
+ timeout: 1_000,
196
+ maxBuffer: 1024 * 1024
197
+ })
198
+ const running = stdout.split('\n').some((line) => {
199
+ const [group, state] = line.trim().split(/\s+/)
200
+ // 僵尸已停止执行并释放文件和端口,只等待父进程回收退出状态。
201
+ return Number(group) === child.pid && state && !state.startsWith('Z')
202
+ })
203
+ if (!running) return
204
+ if (performance.now() >= deadline) {
205
+ throw new Error(`进程组在终止后仍未退出:pgid=${child.pid}`)
206
+ }
207
+ await delay(50)
189
208
  }
190
209
  }
191
210
 
@@ -1 +1 @@
1
- n2LrXQgq8UkbH_AzhR3fw
1
+ 8Yd33M0zPi4tbRn4xCaRY
@@ -70,6 +70,7 @@
70
70
  "/api/work-sessions/replace/route": "/api/work-sessions/replace",
71
71
  "/api/work-sessions/sort/route": "/api/work-sessions/sort",
72
72
  "/favicon.ico/route": "/favicon.ico",
73
- "/page": "/",
74
- "/login/page": "/login"
73
+ "/project-preview/page": "/project-preview",
74
+ "/login/page": "/login",
75
+ "/page": "/"
75
76
  }
@@ -4,11 +4,11 @@
4
4
  ],
5
5
  "devFiles": [],
6
6
  "lowPriorityFiles": [
7
- "static/n2LrXQgq8UkbH_AzhR3fw/_buildManifest.js",
8
- "static/n2LrXQgq8UkbH_AzhR3fw/_ssgManifest.js"
7
+ "static/8Yd33M0zPi4tbRn4xCaRY/_buildManifest.js",
8
+ "static/8Yd33M0zPi4tbRn4xCaRY/_ssgManifest.js"
9
9
  ],
10
10
  "rootMainFiles": [
11
- "static/chunks/webpack-40a782fc8a3535b9.js",
11
+ "static/chunks/webpack-b60891a214e0925d.js",
12
12
  "static/chunks/e388c842-1ca92f1ea0dfe8ee.js",
13
13
  "static/chunks/64444-3e955f910569274d.js",
14
14
  "static/chunks/main-app-6230945a5a062fce.js"
@@ -65,8 +65,8 @@
65
65
  "dynamicRoutes": {},
66
66
  "notFoundRoutes": [],
67
67
  "preview": {
68
- "previewModeId": "6a3ed0add2f10c8e629c3b4927c3ab47",
69
- "previewModeSigningKey": "41ebb995a07e123fb88ed9cf02a7c140ce93d47834ee0cb7d9c6c9dcc462cca1",
70
- "previewModeEncryptionKey": "7ba998796c3a2cb1cef990841e56a970e006ce0833a171001b0266ed108d6aaa"
68
+ "previewModeId": "a562a6265bc1e086a56118191b369e7d",
69
+ "previewModeSigningKey": "a94b895c5b4ccc11f06e1814f3744b9654758dcf9329c29fc03b788ed85ecf27",
70
+ "previewModeEncryptionKey": "0d8101837a8bf01364db3fd1ead91c7964032274ab5ac99e0a864a49637f14f9"
71
71
  }
72
72
  }
@@ -2610,8 +2610,7 @@
2610
2610
  "client/l2_biz/workbench/file-workspace/l2-work-session-file-layout.tsx -> ./l2-file-workspace-view": {
2611
2611
  "id": 19991,
2612
2612
  "files": [
2613
- "static/chunks/31087-ba426d09d6f68bfd.js",
2614
- "static/chunks/70669.07f3670bfb7d6dd2.js"
2613
+ "static/chunks/19991.8aa2e4b6df15fad6.js"
2615
2614
  ]
2616
2615
  },
2617
2616
  "client/l4_foundation/terminal/l4-terminal-renderer.ts -> @xterm/addon-fit": {
@@ -2,12 +2,12 @@ self.__SERVER_FILES_MANIFEST={
2
2
  "version": 1,
3
3
  "config": {
4
4
  "env": {
5
- "PI_DESK_APP_VERSION": "1.1.18-dev",
6
- "PI_DESK_VERSION_UPDATED_AT": "2026-10-22T10:48:08+08:00"
5
+ "PI_DESK_APP_VERSION": "1.1.21",
6
+ "PI_DESK_VERSION_UPDATED_AT": "2026-10-27T01:49:11+08:00"
7
7
  },
8
8
  "webpack": null,
9
9
  "typescript": {
10
- "ignoreBuildErrors": true
10
+ "ignoreBuildErrors": false
11
11
  },
12
12
  "typedRoutes": false,
13
13
  "distDir": "temp/build/pi-desk/release/.next",
@@ -328,6 +328,7 @@ self.__SERVER_FILES_MANIFEST={
328
328
  "@jetcrab/pi-desk-sdk"
329
329
  ],
330
330
  "serverExternalPackages": [
331
+ "@vscode/ripgrep",
331
332
  "@earendil-works/pi-coding-agent",
332
333
  "@earendil-works/pi-agent-core",
333
334
  "@earendil-works/pi-ai",
@@ -2,12 +2,12 @@
2
2
  "version": 1,
3
3
  "config": {
4
4
  "env": {
5
- "PI_DESK_APP_VERSION": "1.1.18-dev",
6
- "PI_DESK_VERSION_UPDATED_AT": "2026-10-22T10:48:08+08:00"
5
+ "PI_DESK_APP_VERSION": "1.1.21",
6
+ "PI_DESK_VERSION_UPDATED_AT": "2026-10-27T01:49:11+08:00"
7
7
  },
8
8
  "webpack": null,
9
9
  "typescript": {
10
- "ignoreBuildErrors": true
10
+ "ignoreBuildErrors": false
11
11
  },
12
12
  "typedRoutes": false,
13
13
  "distDir": "temp/build/pi-desk/release/.next",
@@ -328,6 +328,7 @@
328
328
  "@jetcrab/pi-desk-sdk"
329
329
  ],
330
330
  "serverExternalPackages": [
331
+ "@vscode/ripgrep",
331
332
  "@earendil-works/pi-coding-agent",
332
333
  "@earendil-works/pi-agent-core",
333
334
  "@earendil-works/pi-ai",
@@ -467,6 +467,12 @@
467
467
  "regex": "^/login(?:/)?$",
468
468
  "routeKeys": {},
469
469
  "namedRegex": "^/login(?:/)?$"
470
+ },
471
+ {
472
+ "page": "/project-preview",
473
+ "regex": "^/project\\-preview(?:/)?$",
474
+ "routeKeys": {},
475
+ "namedRegex": "^/project\\-preview(?:/)?$"
470
476
  }
471
477
  ],
472
478
  "dataRoutes": [],
@@ -28,4 +28,4 @@
28
28
  }
29
29
  }
30
30
  body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }
31
- `.replace(/\n\s*/g,"");function i(){return(0,f.jsx)("svg",{width:"32",height:"32",viewBox:"-0.2 -1.5 32 32",fill:"none",style:g.icon,children:(0,f.jsx)("path",{d:"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z",fill:"var(--next-error-title)"})})}("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},28354:a=>{"use strict";a.exports=require("util")},28657:(a,b,c)=>{"use strict";c.r(b),c.d(b,{__next_app__:()=>k,handler:()=>m,routeModule:()=>l});var d=c(85426),e=c(3372),f=c(2629),g=c(86804),h={};for(let a in g)0>["default","__next_app__","routeModule","handler"].indexOf(a)&&(h[a]=()=>g[a]);c.d(b,h);let i={children:["",{children:["_global-error",{children:["__PAGE__",{},{page:[(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,31326,23))),"next/dist/client/components/builtin/app-error.js"]}]},{}]},{error:[(0,d.p)(()=>Promise.resolve().then(c.bind(c,56951))),"/home/runner/work/pi-desk/pi-desk/src/app/error.tsx"],"global-error":[(0,d.p)(()=>Promise.resolve().then(c.bind(c,70961))),"/home/runner/work/pi-desk/pi-desk/src/app/global-error.tsx"],"not-found":[(0,d.p)(()=>Promise.resolve().then(c.bind(c,82117))),"/home/runner/work/pi-desk/pi-desk/src/app/not-found.tsx"],forbidden:[(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,10719,23))),"next/dist/client/components/builtin/forbidden.js"],unauthorized:[(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,58434,23))),"next/dist/client/components/builtin/unauthorized.js"]},[]]}.children,j=(0,e.H)({tree:i,page:"/_global-error/page",pathname:"/_global-error",require:c,loadChunk:()=>Promise.resolve(),interopDefault:f.T}),k=j.__next_app__,l=j.routeModule,m=j.handler},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},30897:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,17179,23)),Promise.resolve().then(c.t.bind(c,39159,23)),Promise.resolve().then(c.t.bind(c,52442,23)),Promise.resolve().then(c.t.bind(c,270,23)),Promise.resolve().then(c.t.bind(c,47594,23)),Promise.resolve().then(c.t.bind(c,52047,23)),Promise.resolve().then(c.t.bind(c,7770,23))},31326:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"default",{enumerable:!0,get:function(){return f}}),c(9812);let d=c(89564);c(76549);let e=c(26011),f=function(){return(0,d.jsxs)("html",{id:"__next_error__",children:[(0,d.jsxs)("head",{children:[(0,d.jsx)("title",{children:"500: This page couldn’t load"}),(0,d.jsx)("style",{dangerouslySetInnerHTML:{__html:e.errorThemeCss}})]}),(0,d.jsx)("body",{children:(0,d.jsx)("div",{style:e.errorStyles.container,children:(0,d.jsxs)("div",{style:e.errorStyles.card,children:[(0,d.jsx)(e.WarningIcon,{}),(0,d.jsx)("h1",{style:e.errorStyles.title,children:"This page couldn’t load"}),(0,d.jsx)("p",{style:e.errorStyles.message,children:"A server error occurred. Reload to try again."}),(0,d.jsx)("form",{style:e.errorStyles.form,children:(0,d.jsx)("button",{type:"submit",style:e.errorStyles.button,children:"Reload"})})]})})})]})};("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},33873:a=>{"use strict";a.exports=require("path")},35166:()=>{},37957:(a,b,c)=>{Promise.resolve().then(c.bind(c,56951))},38522:a=>{"use strict";a.exports=require("node:zlib")},40217:(a,b,c)=>{Promise.resolve().then(c.bind(c,70961))},41025:a=>{"use strict";a.exports=require("next/dist/server/app-render/dynamic-access-async-storage.external.js")},43305:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>f});var d=c(52834);c(49147);var e=c(4527);function f({error:a,reset:b}){return(0,d.jsx)(e.L1ErrorPage,{retry:b})}},46060:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external.js")},56951:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(68032).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/home/runner/work/pi-desk/pi-desk/src/app/error.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/pi-desk/pi-desk/src/app/error.tsx","default")},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},70961:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(68032).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/home/runner/work/pi-desk/pi-desk/src/app/global-error.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/pi-desk/pi-desk/src/app/global-error.tsx","default")},74405:(a,b,c)=>{Promise.resolve().then(c.bind(c,43305))},76665:(a,b,c)=>{Promise.resolve().then(c.bind(c,21147))},82117:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>f});var d=c(89564),e=c(88893);function f(){return(0,d.jsx)(e.L1ErrorPage,{notFound:!0})}},88893:(a,b,c)=>{"use strict";c.d(b,{L1ErrorPage:()=>d});let d=(0,c(68032).registerClientReference)(function(){throw Error("Attempted to call L1ErrorPage() from the server but L1ErrorPage is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/pi-desk/pi-desk/src/client/l1_entry/pages/l1-error-page.tsx","L1ErrorPage")},99883:(a,b,c)=>{Promise.resolve().then(c.bind(c,4527))}};var b=require("../../webpack-runtime.js");b.C(a);var c=b.X(0,[43416,9874],()=>b(b.s=28657));module.exports=c})();
31
+ `.replace(/\n\s*/g,"");function i(){return(0,f.jsx)("svg",{width:"32",height:"32",viewBox:"-0.2 -1.5 32 32",fill:"none",style:g.icon,children:(0,f.jsx)("path",{d:"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z",fill:"var(--next-error-title)"})})}("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},28354:a=>{"use strict";a.exports=require("util")},29294:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-async-storage.external.js")},30897:(a,b,c)=>{Promise.resolve().then(c.t.bind(c,17179,23)),Promise.resolve().then(c.t.bind(c,39159,23)),Promise.resolve().then(c.t.bind(c,52442,23)),Promise.resolve().then(c.t.bind(c,270,23)),Promise.resolve().then(c.t.bind(c,47594,23)),Promise.resolve().then(c.t.bind(c,52047,23)),Promise.resolve().then(c.t.bind(c,7770,23))},31326:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"default",{enumerable:!0,get:function(){return f}}),c(9812);let d=c(89564);c(76549);let e=c(26011),f=function(){return(0,d.jsxs)("html",{id:"__next_error__",children:[(0,d.jsxs)("head",{children:[(0,d.jsx)("title",{children:"500: This page couldn’t load"}),(0,d.jsx)("style",{dangerouslySetInnerHTML:{__html:e.errorThemeCss}})]}),(0,d.jsx)("body",{children:(0,d.jsx)("div",{style:e.errorStyles.container,children:(0,d.jsxs)("div",{style:e.errorStyles.card,children:[(0,d.jsx)(e.WarningIcon,{}),(0,d.jsx)("h1",{style:e.errorStyles.title,children:"This page couldn’t load"}),(0,d.jsx)("p",{style:e.errorStyles.message,children:"A server error occurred. Reload to try again."}),(0,d.jsx)("form",{style:e.errorStyles.form,children:(0,d.jsx)("button",{type:"submit",style:e.errorStyles.button,children:"Reload"})})]})})})]})};("function"==typeof b.default||"object"==typeof b.default&&null!==b.default)&&void 0===b.default.__esModule&&(Object.defineProperty(b.default,"__esModule",{value:!0}),Object.assign(b.default,b),a.exports=b.default)},33873:a=>{"use strict";a.exports=require("path")},35166:()=>{},37957:(a,b,c)=>{Promise.resolve().then(c.bind(c,56951))},38522:a=>{"use strict";a.exports=require("node:zlib")},40217:(a,b,c)=>{Promise.resolve().then(c.bind(c,70961))},41025:a=>{"use strict";a.exports=require("next/dist/server/app-render/dynamic-access-async-storage.external.js")},43305:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>f});var d=c(52834);c(49147);var e=c(4527);function f({error:a,reset:b}){return(0,d.jsx)(e.L1ErrorPage,{retry:b})}},46060:a=>{"use strict";a.exports=require("next/dist/shared/lib/no-fallback-error.external.js")},56951:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(68032).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/home/runner/work/pi-desk/pi-desk/src/app/error.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/pi-desk/pi-desk/src/app/error.tsx","default")},63033:a=>{"use strict";a.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},70961:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>d});let d=(0,c(68032).registerClientReference)(function(){throw Error("Attempted to call the default export of \"/home/runner/work/pi-desk/pi-desk/src/app/global-error.tsx\" from the server, but it's on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/pi-desk/pi-desk/src/app/global-error.tsx","default")},74405:(a,b,c)=>{Promise.resolve().then(c.bind(c,43305))},76665:(a,b,c)=>{Promise.resolve().then(c.bind(c,21147))},82117:(a,b,c)=>{"use strict";c.r(b),c.d(b,{default:()=>f});var d=c(89564),e=c(88893);function f(){return(0,d.jsx)(e.L1ErrorPage,{notFound:!0})}},88893:(a,b,c)=>{"use strict";c.d(b,{L1ErrorPage:()=>d});let d=(0,c(68032).registerClientReference)(function(){throw Error("Attempted to call L1ErrorPage() from the server but L1ErrorPage is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.")},"/home/runner/work/pi-desk/pi-desk/src/client/l1_entry/pages/l1-error-page.tsx","L1ErrorPage")},93822:(a,b,c)=>{"use strict";c.r(b),c.d(b,{__next_app__:()=>k,handler:()=>m,routeModule:()=>l});var d=c(85426),e=c(3372),f=c(2629),g=c(86804),h={};for(let a in g)0>["default","__next_app__","routeModule","handler"].indexOf(a)&&(h[a]=()=>g[a]);c.d(b,h);let i={children:["",{children:["_global-error",{children:["__PAGE__",{},{page:[(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,31326,23))),"next/dist/client/components/builtin/app-error.js"]}]},{}]},{error:[(0,d.p)(()=>Promise.resolve().then(c.bind(c,56951))),"/home/runner/work/pi-desk/pi-desk/src/app/error.tsx"],"global-error":[(0,d.p)(()=>Promise.resolve().then(c.bind(c,70961))),"/home/runner/work/pi-desk/pi-desk/src/app/global-error.tsx"],"not-found":[(0,d.p)(()=>Promise.resolve().then(c.bind(c,82117))),"/home/runner/work/pi-desk/pi-desk/src/app/not-found.tsx"],forbidden:[(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,10719,23))),"next/dist/client/components/builtin/forbidden.js"],unauthorized:[(0,d.p)(()=>Promise.resolve().then(c.t.bind(c,58434,23))),"next/dist/client/components/builtin/unauthorized.js"]},[]]}.children,j=(0,e.H)({tree:i,page:"/_global-error/page",pathname:"/_global-error",require:c,loadChunk:()=>Promise.resolve(),interopDefault:f.T}),k=j.__next_app__,l=j.routeModule,m=j.handler},99883:(a,b,c)=>{Promise.resolve().then(c.bind(c,4527))}};var b=require("../../webpack-runtime.js");b.C(a);var c=b.X(0,[43416,9874],()=>b(b.s=93822));module.exports=c})();
@@ -1 +1 @@
1
- globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/_global-error/page"]={"moduleLoading":{"prefix":"/_next/"},"ssrModuleMapping":{"14405":{"*":{"id":"27297","name":"*","chunks":[],"async":false}},"21358":{"*":{"id":"41051","name":"*","chunks":[],"async":false}},"22432":{"*":{"id":"1480","name":"*","chunks":[],"async":false}},"23367":{"*":{"id":"49453","name":"*","chunks":[],"async":false}},"33948":{"*":{"id":"79460","name":"*","chunks":[],"async":false}},"44478":{"*":{"id":"97016","name":"*","chunks":[],"async":false}},"64282":{"*":{"id":"45543","name":"*","chunks":[],"async":false}},"66999":{"*":{"id":"4527","name":"*","chunks":[],"async":false}},"69173":{"*":{"id":"7005","name":"*","chunks":[],"async":false}},"71713":{"*":{"id":"21147","name":"*","chunks":[],"async":false}},"75779":{"*":{"id":"64843","name":"*","chunks":[],"async":false}},"84845":{"*":{"id":"43305","name":"*","chunks":[],"async":false}},"90184":{"*":{"id":"88476","name":"*","chunks":[],"async":false}},"97876":{"*":{"id":"58044","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/client/components/client-page.js":{"id":69173,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/client/components/client-page.js":{"id":69173,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/client/components/client-segment.js":{"id":23367,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/client/components/client-segment.js":{"id":23367,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js":{"id":33948,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":33948,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/client/components/layout-router.js":{"id":90184,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/client/components/layout-router.js":{"id":90184,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/client/components/render-from-template-context.js":{"id":44478,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":44478,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/lib/framework/boundary-components.js":{"id":14405,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":14405,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/lib/metadata/generate/icon-mark.js":{"id":22432,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":22432,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/src/client/l1_entry/pages/l1-error-page.tsx":{"id":66999,"name":"*","chunks":["78923","static/chunks/78923-17a9c337b29dcecd.js","81881","static/chunks/81881-f11dbe7dc0d04ed9.js","24345","static/chunks/app/not-found-2aab8b33ebbf3257.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/client/script.js":{"id":97876,"name":"*","chunks":["78923","static/chunks/78923-17a9c337b29dcecd.js","96995","static/chunks/96995-8f8313ea2ac3abd7.js","46270","static/chunks/46270-3e42514685626190.js","39654","static/chunks/39654-b5fedd762ea0312e.js","3814","static/chunks/3814-35cfab0ce3aa7c41.js","74220","static/chunks/74220-795a2e7185bd66cb.js","75130","static/chunks/75130-d2ca74894aff8085.js","31087","static/chunks/31087-ba426d09d6f68bfd.js","7177","static/chunks/app/layout-c0e1c5cef8620cf8.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/client/script.js":{"id":97876,"name":"*","chunks":["78923","static/chunks/78923-17a9c337b29dcecd.js","96995","static/chunks/96995-8f8313ea2ac3abd7.js","46270","static/chunks/46270-3e42514685626190.js","39654","static/chunks/39654-b5fedd762ea0312e.js","3814","static/chunks/3814-35cfab0ce3aa7c41.js","74220","static/chunks/74220-795a2e7185bd66cb.js","75130","static/chunks/75130-d2ca74894aff8085.js","31087","static/chunks/31087-ba426d09d6f68bfd.js","7177","static/chunks/app/layout-c0e1c5cef8620cf8.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/src/client/l1_entry/providers/l1-app-providers.tsx":{"id":64282,"name":"*","chunks":["78923","static/chunks/78923-17a9c337b29dcecd.js","96995","static/chunks/96995-8f8313ea2ac3abd7.js","46270","static/chunks/46270-3e42514685626190.js","39654","static/chunks/39654-b5fedd762ea0312e.js","3814","static/chunks/3814-35cfab0ce3aa7c41.js","74220","static/chunks/74220-795a2e7185bd66cb.js","75130","static/chunks/75130-d2ca74894aff8085.js","31087","static/chunks/31087-ba426d09d6f68bfd.js","7177","static/chunks/app/layout-c0e1c5cef8620cf8.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/src/client/l4_foundation/styles/l4-globals.css":{"id":84178,"name":"*","chunks":["78923","static/chunks/78923-17a9c337b29dcecd.js","96995","static/chunks/96995-8f8313ea2ac3abd7.js","46270","static/chunks/46270-3e42514685626190.js","39654","static/chunks/39654-b5fedd762ea0312e.js","3814","static/chunks/3814-35cfab0ce3aa7c41.js","74220","static/chunks/74220-795a2e7185bd66cb.js","75130","static/chunks/75130-d2ca74894aff8085.js","31087","static/chunks/31087-ba426d09d6f68bfd.js","7177","static/chunks/app/layout-c0e1c5cef8620cf8.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/src/app/error.tsx":{"id":84845,"name":"*","chunks":["78923","static/chunks/78923-17a9c337b29dcecd.js","81881","static/chunks/81881-f11dbe7dc0d04ed9.js","18039","static/chunks/app/error-0296a3b20cd1bf00.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/src/app/global-error.tsx":{"id":71713,"name":"*","chunks":["34219","static/chunks/app/global-error-6f5fc4928fd1966c.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/src/client/l1_entry/pages/l1-home-page.tsx":{"id":75779,"name":"*","chunks":["85959","static/chunks/287c71e3-32bb21af66f1f035.js","26717","static/chunks/6c0b963a-c492581a5b6359f7.js","94287","static/chunks/cdfede43-b007dd93b1fdb122.js","78923","static/chunks/78923-17a9c337b29dcecd.js","96995","static/chunks/96995-8f8313ea2ac3abd7.js","46270","static/chunks/46270-3e42514685626190.js","39654","static/chunks/39654-b5fedd762ea0312e.js","14197","static/chunks/14197-3d3ddd426ac06c9c.js","49516","static/chunks/49516-cc4dcd84d64ab4fe.js","74220","static/chunks/74220-795a2e7185bd66cb.js","75130","static/chunks/75130-d2ca74894aff8085.js","58974","static/chunks/app/page-a984139e99586041.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/src/client/l2_biz/auth/l2-login.tsx":{"id":21358,"name":"*","chunks":[],"async":false}},"entryCSSFiles":{"/home/runner/work/pi-desk/pi-desk/src/":[],"/home/runner/work/pi-desk/pi-desk/src/app/not-found":[],"/home/runner/work/pi-desk/pi-desk/src/app/layout":[{"inlined":false,"path":"static/css/79e06f05df9edff0.css"},{"inlined":false,"path":"static/css/6427d02b6edf406f.css"}],"/home/runner/work/pi-desk/pi-desk/src/app/error":[],"/home/runner/work/pi-desk/pi-desk/src/app/global-error":[],"/home/runner/work/pi-desk/pi-desk/src/app/page":[{"inlined":false,"path":"static/css/79e06f05df9edff0.css"}],"/home/runner/work/pi-desk/pi-desk/src/app/_global-error/page":[]},"rscModuleMapping":{"14405":{"*":{"id":"52047","name":"*","chunks":[],"async":false}},"21358":{"*":{"id":"69079","name":"*","chunks":[],"async":false}},"22432":{"*":{"id":"7770","name":"*","chunks":[],"async":false}},"23367":{"*":{"id":"39159","name":"*","chunks":[],"async":false}},"33948":{"*":{"id":"52442","name":"*","chunks":[],"async":false}},"44478":{"*":{"id":"47594","name":"*","chunks":[],"async":false}},"64282":{"*":{"id":"64669","name":"*","chunks":[],"async":false}},"66999":{"*":{"id":"88893","name":"*","chunks":[],"async":false}},"69173":{"*":{"id":"17179","name":"*","chunks":[],"async":false}},"71713":{"*":{"id":"70961","name":"*","chunks":[],"async":false}},"75779":{"*":{"id":"11568","name":"*","chunks":[],"async":false}},"84178":{"*":{"id":"12707","name":"*","chunks":[],"async":false}},"84845":{"*":{"id":"56951","name":"*","chunks":[],"async":false}},"90184":{"*":{"id":"270","name":"*","chunks":[],"async":false}},"97876":{"*":{"id":"29190","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{}};
1
+ globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/_global-error/page"]={"moduleLoading":{"prefix":"/_next/"},"ssrModuleMapping":{"14405":{"*":{"id":"27297","name":"*","chunks":[],"async":false}},"20094":{"*":{"id":"71152","name":"*","chunks":[],"async":false}},"21358":{"*":{"id":"41051","name":"*","chunks":[],"async":false}},"22432":{"*":{"id":"1480","name":"*","chunks":[],"async":false}},"23367":{"*":{"id":"49453","name":"*","chunks":[],"async":false}},"33948":{"*":{"id":"79460","name":"*","chunks":[],"async":false}},"44478":{"*":{"id":"97016","name":"*","chunks":[],"async":false}},"49230":{"*":{"id":"99920","name":"*","chunks":[],"async":false}},"66999":{"*":{"id":"4527","name":"*","chunks":[],"async":false}},"69173":{"*":{"id":"7005","name":"*","chunks":[],"async":false}},"71713":{"*":{"id":"21147","name":"*","chunks":[],"async":false}},"84845":{"*":{"id":"43305","name":"*","chunks":[],"async":false}},"88219":{"*":{"id":"23579","name":"*","chunks":[],"async":false}},"90184":{"*":{"id":"88476","name":"*","chunks":[],"async":false}},"97457":{"*":{"id":"28317","name":"*","chunks":[],"async":false}},"97876":{"*":{"id":"58044","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/client/components/client-page.js":{"id":69173,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/client/components/client-page.js":{"id":69173,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/client/components/client-segment.js":{"id":23367,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/client/components/client-segment.js":{"id":23367,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js":{"id":33948,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":33948,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/client/components/layout-router.js":{"id":90184,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/client/components/layout-router.js":{"id":90184,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/client/components/render-from-template-context.js":{"id":44478,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":44478,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/lib/framework/boundary-components.js":{"id":14405,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":14405,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/lib/metadata/generate/icon-mark.js":{"id":22432,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":22432,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/src/client/l1_entry/pages/l1-error-page.tsx":{"id":66999,"name":"*","chunks":["57235","static/chunks/57235-03ba1044f22b6c84.js","22092","static/chunks/22092-6d1bfbefa825ec03.js","24345","static/chunks/app/not-found-720cdf6a606b821a.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/client/script.js":{"id":97876,"name":"*","chunks":["57235","static/chunks/57235-03ba1044f22b6c84.js","14825","static/chunks/14825-5579aed34a631ad7.js","82371","static/chunks/82371-f7ba4a07a5dbcf34.js","15302","static/chunks/15302-9c807afc6c60de0c.js","11937","static/chunks/11937-1d0a9822f2c7995b.js","7177","static/chunks/app/layout-20718f1503910291.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/node_modules/.pnpm/next@16.3.1_@babel+core@7.29.7_@opentelemetry+api@1.9.0_@types+node@20.19.43_react-dom@19.2.8_react@19.2.8__react@19.2.8/node_modules/next/dist/esm/client/script.js":{"id":97876,"name":"*","chunks":["57235","static/chunks/57235-03ba1044f22b6c84.js","14825","static/chunks/14825-5579aed34a631ad7.js","82371","static/chunks/82371-f7ba4a07a5dbcf34.js","15302","static/chunks/15302-9c807afc6c60de0c.js","11937","static/chunks/11937-1d0a9822f2c7995b.js","7177","static/chunks/app/layout-20718f1503910291.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/src/client/l1_entry/providers/l1-app-providers.tsx":{"id":88219,"name":"*","chunks":["57235","static/chunks/57235-03ba1044f22b6c84.js","14825","static/chunks/14825-5579aed34a631ad7.js","82371","static/chunks/82371-f7ba4a07a5dbcf34.js","15302","static/chunks/15302-9c807afc6c60de0c.js","11937","static/chunks/11937-1d0a9822f2c7995b.js","7177","static/chunks/app/layout-20718f1503910291.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/src/client/l4_foundation/styles/l4-globals.css":{"id":84178,"name":"*","chunks":["57235","static/chunks/57235-03ba1044f22b6c84.js","14825","static/chunks/14825-5579aed34a631ad7.js","82371","static/chunks/82371-f7ba4a07a5dbcf34.js","15302","static/chunks/15302-9c807afc6c60de0c.js","11937","static/chunks/11937-1d0a9822f2c7995b.js","7177","static/chunks/app/layout-20718f1503910291.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/src/app/error.tsx":{"id":84845,"name":"*","chunks":["57235","static/chunks/57235-03ba1044f22b6c84.js","22092","static/chunks/22092-6d1bfbefa825ec03.js","18039","static/chunks/app/error-216b14b5da089ed3.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/src/app/global-error.tsx":{"id":71713,"name":"*","chunks":["34219","static/chunks/app/global-error-6f5fc4928fd1966c.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/src/client/l1_entry/pages/l1-project-preview-page.tsx":{"id":97457,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/src/client/l2_biz/auth/l2-login.tsx":{"id":21358,"name":"*","chunks":[],"async":false},"/home/runner/work/pi-desk/pi-desk/src/client/l1_entry/pages/l1-home-page.tsx":{"id":20094,"name":"*","chunks":["85959","static/chunks/287c71e3-32bb21af66f1f035.js","26717","static/chunks/6c0b963a-c492581a5b6359f7.js","94287","static/chunks/cdfede43-b007dd93b1fdb122.js","57235","static/chunks/57235-03ba1044f22b6c84.js","14825","static/chunks/14825-5579aed34a631ad7.js","82371","static/chunks/82371-f7ba4a07a5dbcf34.js","79267","static/chunks/79267-7d21d7cdbd7cfca1.js","46270","static/chunks/46270-3e42514685626190.js","37313","static/chunks/37313-d5970e2d0c270d22.js","14197","static/chunks/14197-3d3ddd426ac06c9c.js","51474","static/chunks/51474-8dc714cb76b2e60a.js","15302","static/chunks/15302-9c807afc6c60de0c.js","9038","static/chunks/9038-03144ed96d613f75.js","11937","static/chunks/11937-1d0a9822f2c7995b.js","58974","static/chunks/app/page-6ebc1c877f6025dd.js"],"async":false},"/home/runner/work/pi-desk/pi-desk/src/client/l1_entry/providers/l1-app-runtime-provider.tsx":{"id":49230,"name":"*","chunks":["85959","static/chunks/287c71e3-32bb21af66f1f035.js","26717","static/chunks/6c0b963a-c492581a5b6359f7.js","94287","static/chunks/cdfede43-b007dd93b1fdb122.js","57235","static/chunks/57235-03ba1044f22b6c84.js","14825","static/chunks/14825-5579aed34a631ad7.js","82371","static/chunks/82371-f7ba4a07a5dbcf34.js","79267","static/chunks/79267-7d21d7cdbd7cfca1.js","46270","static/chunks/46270-3e42514685626190.js","37313","static/chunks/37313-d5970e2d0c270d22.js","14197","static/chunks/14197-3d3ddd426ac06c9c.js","51474","static/chunks/51474-8dc714cb76b2e60a.js","15302","static/chunks/15302-9c807afc6c60de0c.js","9038","static/chunks/9038-03144ed96d613f75.js","11937","static/chunks/11937-1d0a9822f2c7995b.js","58974","static/chunks/app/page-6ebc1c877f6025dd.js"],"async":false}},"entryCSSFiles":{"/home/runner/work/pi-desk/pi-desk/src/":[],"/home/runner/work/pi-desk/pi-desk/src/app/not-found":[],"/home/runner/work/pi-desk/pi-desk/src/app/layout":[{"inlined":false,"path":"static/css/f646ca6c07245c4c.css"}],"/home/runner/work/pi-desk/pi-desk/src/app/error":[],"/home/runner/work/pi-desk/pi-desk/src/app/global-error":[],"/home/runner/work/pi-desk/pi-desk/src/app/page":[{"inlined":false,"path":"static/css/1e780a4936aa6ba3.css"},{"inlined":false,"path":"static/css/6dbae2922f88ca31.css"}],"/home/runner/work/pi-desk/pi-desk/src/app/_global-error/page":[]},"rscModuleMapping":{"14405":{"*":{"id":"52047","name":"*","chunks":[],"async":false}},"20094":{"*":{"id":"11568","name":"*","chunks":[],"async":false}},"21358":{"*":{"id":"69079","name":"*","chunks":[],"async":false}},"22432":{"*":{"id":"7770","name":"*","chunks":[],"async":false}},"23367":{"*":{"id":"39159","name":"*","chunks":[],"async":false}},"33948":{"*":{"id":"52442","name":"*","chunks":[],"async":false}},"44478":{"*":{"id":"47594","name":"*","chunks":[],"async":false}},"49230":{"*":{"id":"66757","name":"*","chunks":[],"async":false}},"66999":{"*":{"id":"88893","name":"*","chunks":[],"async":false}},"69173":{"*":{"id":"17179","name":"*","chunks":[],"async":false}},"71713":{"*":{"id":"70961","name":"*","chunks":[],"async":false}},"84178":{"*":{"id":"12707","name":"*","chunks":[],"async":false}},"84845":{"*":{"id":"56951","name":"*","chunks":[],"async":false}},"88219":{"*":{"id":"64669","name":"*","chunks":[],"async":false}},"90184":{"*":{"id":"270","name":"*","chunks":[],"async":false}},"97457":{"*":{"id":"40571","name":"*","chunks":[],"async":false}},"97876":{"*":{"id":"29190","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{}};