@hienlh/ppm 0.23.21 → 0.23.22

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 (463) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/CLAUDE.md +3 -2
  3. package/assets/skills/ppm/SKILL.md +1 -1
  4. package/assets/skills/ppm/references/cli-reference.md +4 -4
  5. package/assets/skills/ppm/references/http-api.md +1 -1
  6. package/dist/web/assets/{accounts-settings-section-DD88DRdx.js → accounts-settings-section-CiNmIj02.js} +1 -1
  7. package/dist/web/assets/accounts-settings-section-CiNmIj02.js.br +0 -0
  8. package/dist/web/assets/accounts-settings-section-CiNmIj02.js.gz +0 -0
  9. package/dist/web/assets/{agent-session-sheet-C0PhhLKR.js → agent-session-sheet-DRR36PDA.js} +2 -2
  10. package/dist/web/assets/agent-session-sheet-DRR36PDA.js.br +0 -0
  11. package/dist/web/assets/agent-session-sheet-DRR36PDA.js.gz +0 -0
  12. package/dist/web/assets/{agent-session-window-content-D0XZgh4U.js → agent-session-window-content-DMhy16BM.js} +1 -1
  13. package/dist/web/assets/agent-session-window-content-DMhy16BM.js.br +0 -0
  14. package/dist/web/assets/agent-session-window-content-DMhy16BM.js.gz +0 -0
  15. package/dist/web/assets/{ai-resource-editor-CpfQB6A7.js → ai-resource-editor-BG8boPw7.js} +1 -1
  16. package/dist/web/assets/ai-resource-editor-BG8boPw7.js.br +0 -0
  17. package/dist/web/assets/ai-resource-editor-BG8boPw7.js.gz +0 -0
  18. package/dist/web/assets/{ai-settings-section-CQWBwWcM.js → ai-settings-section-DMGM1hYx.js} +1 -1
  19. package/dist/web/assets/ai-settings-section-DMGM1hYx.js.br +0 -0
  20. package/dist/web/assets/ai-settings-section-DMGM1hYx.js.gz +0 -0
  21. package/dist/web/assets/{ai-settings-section-DqE67XNC.js → ai-settings-section-De5dYWlC.js} +1 -1
  22. package/dist/web/assets/{android-tab-4Z4AgHz1.js → android-tab-lHDxD93G.js} +1 -1
  23. package/dist/web/assets/android-tab-lHDxD93G.js.br +0 -0
  24. package/dist/web/assets/android-tab-lHDxD93G.js.gz +0 -0
  25. package/dist/web/assets/{appearance-settings-section-DjQjiJF7.js → appearance-settings-section-DO-ZyoMj.js} +1 -1
  26. package/dist/web/assets/appearance-settings-section-DO-ZyoMj.js.br +0 -0
  27. package/dist/web/assets/appearance-settings-section-DO-ZyoMj.js.gz +0 -0
  28. package/dist/web/assets/{apps-panel-_lxY9xbc.js → apps-panel-CH-0CHYY.js} +1 -1
  29. package/dist/web/assets/apps-panel-CH-0CHYY.js.br +0 -0
  30. package/dist/web/assets/apps-panel-CH-0CHYY.js.gz +0 -0
  31. package/dist/web/assets/{branch-review-tab-BzrhnFSs.js → branch-review-tab-CdGtvekz.js} +1 -1
  32. package/dist/web/assets/branch-review-tab-CdGtvekz.js.br +0 -0
  33. package/dist/web/assets/branch-review-tab-CdGtvekz.js.gz +0 -0
  34. package/dist/web/assets/{chat-tab-BKHepkYi.js → chat-tab-DMqWnFIo.js} +1 -1
  35. package/dist/web/assets/chat-tab-DMqWnFIo.js.br +0 -0
  36. package/dist/web/assets/chat-tab-DMqWnFIo.js.gz +0 -0
  37. package/dist/web/assets/{chat-tab-Cv8gYzcA.js → chat-tab-DzWpwPFb.js} +3 -3
  38. package/dist/web/assets/chat-tab-DzWpwPFb.js.br +0 -0
  39. package/dist/web/assets/chat-tab-DzWpwPFb.js.gz +0 -0
  40. package/dist/web/assets/{code-editor-COWmNXO4.js → code-editor-BCv8ONNS.js} +4 -4
  41. package/dist/web/assets/code-editor-BCv8ONNS.js.br +0 -0
  42. package/dist/web/assets/code-editor-BCv8ONNS.js.gz +0 -0
  43. package/dist/web/assets/{codex-reset-credit-button-BHt4yJet.js → codex-reset-credit-button-CGMbIHak.js} +1 -1
  44. package/dist/web/assets/codex-reset-credit-button-CGMbIHak.js.br +0 -0
  45. package/dist/web/assets/codex-reset-credit-button-CGMbIHak.js.gz +0 -0
  46. package/dist/web/assets/{conflict-editor-tj-1gzKr.js → conflict-editor-3WmzqBlW.js} +1 -1
  47. package/dist/web/assets/conflict-editor-3WmzqBlW.js.br +0 -0
  48. package/dist/web/assets/conflict-editor-3WmzqBlW.js.gz +0 -0
  49. package/dist/web/assets/{connection-form-tab-BV2QX8Cf.js → connection-form-tab-BoWucvAe.js} +1 -1
  50. package/dist/web/assets/connection-form-tab-BoWucvAe.js.br +0 -0
  51. package/dist/web/assets/connection-form-tab-BoWucvAe.js.gz +0 -0
  52. package/dist/web/assets/{csv-preview-xhE2esgz.js → csv-preview-BCgGsy7F.js} +1 -1
  53. package/dist/web/assets/csv-preview-BCgGsy7F.js.br +0 -0
  54. package/dist/web/assets/csv-preview-BCgGsy7F.js.gz +0 -0
  55. package/dist/web/assets/{db-tab-parts-C3MsjOID.js → db-tab-parts-o6QMHBbA.js} +1 -1
  56. package/dist/web/assets/db-tab-parts-o6QMHBbA.js.br +0 -0
  57. package/dist/web/assets/db-tab-parts-o6QMHBbA.js.gz +0 -0
  58. package/dist/web/assets/{design-settings-section-C3LxYhIw.js → design-settings-section-seo6SdSk.js} +1 -1
  59. package/dist/web/assets/design-settings-section-seo6SdSk.js.br +0 -0
  60. package/dist/web/assets/design-settings-section-seo6SdSk.js.gz +0 -0
  61. package/dist/web/assets/{design-tab-DYcvjdfb.js → design-tab-B-f_b2LM.js} +1 -1
  62. package/dist/web/assets/design-tab-B-f_b2LM.js.br +0 -0
  63. package/dist/web/assets/design-tab-B-f_b2LM.js.gz +0 -0
  64. package/dist/web/assets/{designs-sidebar-panel-Dpr4PPFT.js → designs-sidebar-panel-CVT_TQP7.js} +1 -1
  65. package/dist/web/assets/designs-sidebar-panel-CVT_TQP7.js.br +0 -0
  66. package/dist/web/assets/designs-sidebar-panel-CVT_TQP7.js.gz +0 -0
  67. package/dist/web/assets/{diff-viewer-Fl_4jqr6.js → diff-viewer-y9uBp_8u.js} +1 -1
  68. package/dist/web/assets/diff-viewer-y9uBp_8u.js.br +0 -0
  69. package/dist/web/assets/diff-viewer-y9uBp_8u.js.gz +0 -0
  70. package/dist/web/assets/{docx-preview-bVE9shPX.js → docx-preview-Dn_x3Inm.js} +1 -1
  71. package/dist/web/assets/docx-preview-Dn_x3Inm.js.br +0 -0
  72. package/dist/web/assets/docx-preview-Dn_x3Inm.js.gz +0 -0
  73. package/dist/web/assets/{editor-dialog-eEOYWdbr.js → editor-dialog-BwNXSajD.js} +1 -1
  74. package/dist/web/assets/editor-dialog-BwNXSajD.js.br +0 -0
  75. package/dist/web/assets/editor-dialog-BwNXSajD.js.gz +0 -0
  76. package/dist/web/assets/{editor-language-service-D1_Ggq4s.js → editor-language-service-XA_TnPLN.js} +1 -1
  77. package/dist/web/assets/editor-language-service-XA_TnPLN.js.br +0 -0
  78. package/dist/web/assets/editor-language-service-XA_TnPLN.js.gz +0 -0
  79. package/dist/web/assets/{explorer-body-C0UOcBPJ.js → explorer-body-DukR7zM9.js} +1 -1
  80. package/dist/web/assets/explorer-body-DukR7zM9.js.br +0 -0
  81. package/dist/web/assets/explorer-body-DukR7zM9.js.gz +0 -0
  82. package/dist/web/assets/{explorer-window-content-Dxee7SuJ.js → explorer-window-content-BjTZ44S3.js} +1 -1
  83. package/dist/web/assets/explorer-window-content-BjTZ44S3.js.br +0 -0
  84. package/dist/web/assets/explorer-window-content-BjTZ44S3.js.gz +0 -0
  85. package/dist/web/assets/{extension-manager-section-D8krnoj8.js → extension-manager-section-C4WD1BPQ.js} +1 -1
  86. package/dist/web/assets/extension-manager-section-C4WD1BPQ.js.br +0 -0
  87. package/dist/web/assets/extension-manager-section-C4WD1BPQ.js.gz +0 -0
  88. package/dist/web/assets/{extension-webview-CtIdV69T.js → extension-webview-CV2ujflc.js} +1 -1
  89. package/dist/web/assets/extension-webview-CV2ujflc.js.br +0 -0
  90. package/dist/web/assets/extension-webview-CV2ujflc.js.gz +0 -0
  91. package/dist/web/assets/{files-settings-section-C8vtarR8.js → files-settings-section-hS5ixQ8o.js} +1 -1
  92. package/dist/web/assets/files-settings-section-hS5ixQ8o.js.br +0 -0
  93. package/dist/web/assets/files-settings-section-hS5ixQ8o.js.gz +0 -0
  94. package/dist/web/assets/{general-settings-section-Chu8Ut8h.js → general-settings-section-BnKYY0AA.js} +1 -1
  95. package/dist/web/assets/general-settings-section-BnKYY0AA.js.br +0 -0
  96. package/dist/web/assets/general-settings-section-BnKYY0AA.js.gz +0 -0
  97. package/dist/web/assets/{git-log-panel-DG09p6k5.js → git-log-panel-JiWfR5xv.js} +1 -1
  98. package/dist/web/assets/git-log-panel-JiWfR5xv.js.br +0 -0
  99. package/dist/web/assets/git-log-panel-JiWfR5xv.js.gz +0 -0
  100. package/dist/web/assets/{git-review-tab-CSy8DjSC.js → git-review-tab-DgvcY__Q.js} +1 -1
  101. package/dist/web/assets/git-review-tab-DgvcY__Q.js.br +0 -0
  102. package/dist/web/assets/git-review-tab-DgvcY__Q.js.gz +0 -0
  103. package/dist/web/assets/{glide-data-grid-BN1y4BT0.js → glide-data-grid-r1MKxDjz.js} +1 -1
  104. package/dist/web/assets/glide-data-grid-r1MKxDjz.js.br +0 -0
  105. package/dist/web/assets/glide-data-grid-r1MKxDjz.js.gz +0 -0
  106. package/dist/web/assets/{grid-save-dialog-CfSuWw2t.js → grid-save-dialog-Fa0yA-Ep.js} +1 -1
  107. package/dist/web/assets/grid-save-dialog-Fa0yA-Ep.js.br +0 -0
  108. package/dist/web/assets/grid-save-dialog-Fa0yA-Ep.js.gz +0 -0
  109. package/dist/web/assets/{group-chat-tab-B04QMp7A.js → group-chat-tab-B2Q8yqSX.js} +1 -1
  110. package/dist/web/assets/group-chat-tab-B2Q8yqSX.js.br +0 -0
  111. package/dist/web/assets/group-chat-tab-B2Q8yqSX.js.gz +0 -0
  112. package/dist/web/assets/{impexp-tab-BRNouquR.js → impexp-tab-B8Ht4l32.js} +1 -1
  113. package/dist/web/assets/impexp-tab-B8Ht4l32.js.br +0 -0
  114. package/dist/web/assets/impexp-tab-B8Ht4l32.js.gz +0 -0
  115. package/dist/web/assets/{index-BpgSIM5B.js → index-BtAn_krv.js} +5 -5
  116. package/dist/web/assets/index-BtAn_krv.js.br +0 -0
  117. package/dist/web/assets/index-BtAn_krv.js.gz +0 -0
  118. package/dist/web/assets/{jira-watcher-section-CJeS5r6D.js → jira-watcher-section--ibKZfBs.js} +1 -1
  119. package/dist/web/assets/{keybindings-store-Dvxq-vZD.js → keybindings-store-Cwxl4tHv.js} +1 -1
  120. package/dist/web/assets/{keyboard-shortcuts-section-BKDyZHhK.js → keyboard-shortcuts-section-aoiLpWwf.js} +1 -1
  121. package/dist/web/assets/keyboard-shortcuts-section-aoiLpWwf.js.br +0 -0
  122. package/dist/web/assets/keyboard-shortcuts-section-aoiLpWwf.js.gz +0 -0
  123. package/dist/web/assets/{language-servers-section-CbbkezhA.js → language-servers-section-BkGAezo6.js} +2 -2
  124. package/dist/web/assets/language-servers-section-BkGAezo6.js.br +0 -0
  125. package/dist/web/assets/language-servers-section-BkGAezo6.js.gz +0 -0
  126. package/dist/web/assets/{logs-app-Blr1-v4q.js → logs-app-DYgPtmjm.js} +1 -1
  127. package/dist/web/assets/logs-app-DYgPtmjm.js.br +0 -0
  128. package/dist/web/assets/logs-app-DYgPtmjm.js.gz +0 -0
  129. package/dist/web/assets/{logs-tab-CGPtn2tU.js → logs-tab-BbDosK63.js} +1 -1
  130. package/dist/web/assets/{logs-window-content-DAczcNmh.js → logs-window-content-CEXAyv-f.js} +1 -1
  131. package/dist/web/assets/{lsp-client-Ds3U2O52.js → lsp-client-CIcphNmU.js} +1 -1
  132. package/dist/web/assets/lsp-client-CIcphNmU.js.br +0 -0
  133. package/dist/web/assets/lsp-client-CIcphNmU.js.gz +0 -0
  134. package/dist/web/assets/{markdown-renderer-DbJVwfUH.js → markdown-renderer-BNzQeoAO.js} +1 -1
  135. package/dist/web/assets/{markdown-renderer-DzCPadpB.js → markdown-renderer-dk1w3goH.js} +1 -1
  136. package/dist/web/assets/markdown-renderer-dk1w3goH.js.br +0 -0
  137. package/dist/web/assets/markdown-renderer-dk1w3goH.js.gz +0 -0
  138. package/dist/web/assets/{mobile-explorer-sheet-BClCMXb8.js → mobile-explorer-sheet-D4lPZQZc.js} +1 -1
  139. package/dist/web/assets/mobile-explorer-sheet-D4lPZQZc.js.br +0 -0
  140. package/dist/web/assets/mobile-explorer-sheet-D4lPZQZc.js.gz +0 -0
  141. package/dist/web/assets/{new-design-dialog-HRP9H11v.js → new-design-dialog-CIq7xspW.js} +1 -1
  142. package/dist/web/assets/new-design-dialog-CIq7xspW.js.br +0 -0
  143. package/dist/web/assets/new-design-dialog-CIq7xspW.js.gz +0 -0
  144. package/dist/web/assets/{notification-store-BomzYNQj.js → notification-store-Rv36noYX.js} +1 -1
  145. package/dist/web/assets/notifications-settings-section-CoWMtXCC.js +1 -0
  146. package/dist/web/assets/notifications-settings-section-CoWMtXCC.js.br +0 -0
  147. package/dist/web/assets/notifications-settings-section-CoWMtXCC.js.gz +0 -0
  148. package/dist/web/assets/{ppmbot-settings-section-BRowIIqc.js → ppmbot-settings-section-Ct0UwA6T.js} +1 -1
  149. package/dist/web/assets/ppmbot-settings-section-Ct0UwA6T.js.br +0 -0
  150. package/dist/web/assets/ppmbot-settings-section-Ct0UwA6T.js.gz +0 -0
  151. package/dist/web/assets/{problems-panel-DdB10Ybd.js → problems-panel-D-HT-0PE.js} +1 -1
  152. package/dist/web/assets/problems-panel-D-HT-0PE.js.br +0 -0
  153. package/dist/web/assets/problems-panel-D-HT-0PE.js.gz +0 -0
  154. package/dist/web/assets/{process-table-CzLaWPe0.js → process-table-CXN0s4Pq.js} +1 -1
  155. package/dist/web/assets/process-table-CXN0s4Pq.js.br +0 -0
  156. package/dist/web/assets/process-table-CXN0s4Pq.js.gz +0 -0
  157. package/dist/web/assets/{proxy-settings-section-BCq7R5DA.js → proxy-settings-section-e6WWzP8n.js} +1 -1
  158. package/dist/web/assets/proxy-settings-section-e6WWzP8n.js.br +0 -0
  159. package/dist/web/assets/proxy-settings-section-e6WWzP8n.js.gz +0 -0
  160. package/dist/web/assets/{query-tab-DGvj_h6l.js → query-tab-C7C67t8F.js} +1 -1
  161. package/dist/web/assets/query-tab-C7C67t8F.js.br +0 -0
  162. package/dist/web/assets/{query-tab-DGvj_h6l.js.gz → query-tab-C7C67t8F.js.gz} +0 -0
  163. package/dist/web/assets/{remote-access-settings-section-BrqOoOyk.js → remote-access-settings-section-gGoATCF9.js} +1 -1
  164. package/dist/web/assets/remote-access-settings-section-gGoATCF9.js.br +0 -0
  165. package/dist/web/assets/remote-access-settings-section-gGoATCF9.js.gz +0 -0
  166. package/dist/web/assets/{remote-desktop-clipboard-notice-5r6UbdlN.js → remote-desktop-clipboard-notice-D5KjvMZx.js} +1 -1
  167. package/dist/web/assets/remote-desktop-clipboard-notice-D5KjvMZx.js.br +0 -0
  168. package/dist/web/assets/remote-desktop-clipboard-notice-D5KjvMZx.js.gz +0 -0
  169. package/dist/web/assets/{remote-desktop-mobile-sheet-B9Q4auqe.js → remote-desktop-mobile-sheet-CY_DsGXZ.js} +2 -2
  170. package/dist/web/assets/remote-desktop-mobile-sheet-CY_DsGXZ.js.br +0 -0
  171. package/dist/web/assets/remote-desktop-mobile-sheet-CY_DsGXZ.js.gz +0 -0
  172. package/dist/web/assets/{remote-desktop-mobile-view-CL-jrkA8.js → remote-desktop-mobile-view-DdpI-RF8.js} +1 -1
  173. package/dist/web/assets/remote-desktop-mobile-view-DdpI-RF8.js.br +0 -0
  174. package/dist/web/assets/remote-desktop-mobile-view-DdpI-RF8.js.gz +0 -0
  175. package/dist/web/assets/{remote-desktop-readiness-gate-DXEf2Jnz.js → remote-desktop-readiness-gate-WIyCCAv5.js} +1 -1
  176. package/dist/web/assets/remote-desktop-readiness-gate-WIyCCAv5.js.br +0 -0
  177. package/dist/web/assets/remote-desktop-readiness-gate-WIyCCAv5.js.gz +0 -0
  178. package/dist/web/assets/{remote-desktop-window-content-20P6-gKB.js → remote-desktop-window-content-BMORZLZt.js} +1 -1
  179. package/dist/web/assets/remote-desktop-window-content-BMORZLZt.js.br +0 -0
  180. package/dist/web/assets/remote-desktop-window-content-BMORZLZt.js.gz +0 -0
  181. package/dist/web/assets/{rename-object-dialog-Bs7pUsUP.js → rename-object-dialog-pIgWe_AL.js} +1 -1
  182. package/dist/web/assets/rename-object-dialog-pIgWe_AL.js.br +0 -0
  183. package/dist/web/assets/rename-object-dialog-pIgWe_AL.js.gz +0 -0
  184. package/dist/web/assets/{review-code-Bjo4sHN9.js → review-code-oTNcTYlI.js} +1 -1
  185. package/dist/web/assets/review-code-oTNcTYlI.js.br +0 -0
  186. package/dist/web/assets/review-code-oTNcTYlI.js.gz +0 -0
  187. package/dist/web/assets/{save-as-dialog-BHx0Wp2B.js → save-as-dialog-CnPLGTaL.js} +1 -1
  188. package/dist/web/assets/save-as-dialog-CnPLGTaL.js.br +0 -0
  189. package/dist/web/assets/save-as-dialog-CnPLGTaL.js.gz +0 -0
  190. package/dist/web/assets/{schedules-settings-section-C6ATYDPK.js → schedules-settings-section-CREqHG_i.js} +1 -1
  191. package/dist/web/assets/schedules-settings-section-CREqHG_i.js.br +0 -0
  192. package/dist/web/assets/schedules-settings-section-CREqHG_i.js.gz +0 -0
  193. package/dist/web/assets/{session-review-tab-BPMUyNTx.js → session-review-tab-nFVJYYJH.js} +1 -1
  194. package/dist/web/assets/session-review-tab-nFVJYYJH.js.br +0 -0
  195. package/dist/web/assets/session-review-tab-nFVJYYJH.js.gz +0 -0
  196. package/dist/web/assets/{settings-body-Dy5D6Vu7.js → settings-body-DNzH0wOQ.js} +1 -1
  197. package/dist/web/assets/settings-body-DNzH0wOQ.js.br +0 -0
  198. package/dist/web/assets/settings-body-DNzH0wOQ.js.gz +0 -0
  199. package/dist/web/assets/{settings-rows-BRoYE2To.js → settings-rows-D02_4sDY.js} +1 -1
  200. package/dist/web/assets/settings-rows-D02_4sDY.js.br +0 -0
  201. package/dist/web/assets/settings-rows-D02_4sDY.js.gz +0 -0
  202. package/dist/web/assets/settings-section-content-BYW_9mHv.js +1 -0
  203. package/dist/web/assets/{settings-section-content-essUViKu.js → settings-section-content-DWopMfmq.js} +2 -2
  204. package/dist/web/assets/settings-section-content-DWopMfmq.js.br +0 -0
  205. package/dist/web/assets/settings-section-content-DWopMfmq.js.gz +0 -0
  206. package/dist/web/assets/{settings-tab-Di1DUP1j.js → settings-tab-Cg0v5kO7.js} +1 -1
  207. package/dist/web/assets/{settings-window-content-DYvYFPWy.js → settings-window-content-CqhwxJJn.js} +1 -1
  208. package/dist/web/assets/{slash-command-picker-8da30mYP.js → slash-command-picker-Bcizxvbh.js} +1 -1
  209. package/dist/web/assets/slash-command-picker-Bcizxvbh.js.br +0 -0
  210. package/dist/web/assets/slash-command-picker-Bcizxvbh.js.gz +0 -0
  211. package/dist/web/assets/{sql-object-tab-DRIHVXuR.js → sql-object-tab-b1Z2zVBm.js} +1 -1
  212. package/dist/web/assets/sql-object-tab-b1Z2zVBm.js.br +0 -0
  213. package/dist/web/assets/sql-object-tab-b1Z2zVBm.js.gz +0 -0
  214. package/dist/web/assets/{sqlite-viewer-G-Jl2yEr.js → sqlite-viewer-DhPv28tq.js} +1 -1
  215. package/dist/web/assets/sqlite-viewer-DhPv28tq.js.br +0 -0
  216. package/dist/web/assets/sqlite-viewer-DhPv28tq.js.gz +0 -0
  217. package/dist/web/assets/{structure-save-dialog-Cwikz0we.js → structure-save-dialog-sGUpqs8D.js} +1 -1
  218. package/dist/web/assets/structure-save-dialog-sGUpqs8D.js.br +0 -0
  219. package/dist/web/assets/structure-save-dialog-sGUpqs8D.js.gz +0 -0
  220. package/dist/web/assets/{structure-tab-CWEgdZPm.js → structure-tab-Bo2OmDOc.js} +1 -1
  221. package/dist/web/assets/structure-tab-Bo2OmDOc.js.br +0 -0
  222. package/dist/web/assets/structure-tab-Bo2OmDOc.js.gz +0 -0
  223. package/dist/web/assets/{system-monitor-body-BDQm9-wb.js → system-monitor-body-C475Et9u.js} +2 -2
  224. package/dist/web/assets/system-monitor-body-C475Et9u.js.br +0 -0
  225. package/dist/web/assets/{system-monitor-body-BDQm9-wb.js.gz → system-monitor-body-C475Et9u.js.gz} +0 -0
  226. package/dist/web/assets/{system-monitor-tab-BouN21Yh.js → system-monitor-tab-Cm52yoW8.js} +1 -1
  227. package/dist/web/assets/{system-monitor-window-content-BRyWBSOb.js → system-monitor-window-content-YYsGHxZF.js} +1 -1
  228. package/dist/web/assets/{tab-host-window-content-CZ55-bTz.js → tab-host-window-content-BKI6QoDa.js} +1 -1
  229. package/dist/web/assets/tab-host-window-content-BKI6QoDa.js.br +0 -0
  230. package/dist/web/assets/tab-host-window-content-BKI6QoDa.js.gz +0 -0
  231. package/dist/web/assets/{table-tab-Bmn4UdBV.js → table-tab-D-nKWMJR.js} +1 -1
  232. package/dist/web/assets/table-tab-D-nKWMJR.js.br +0 -0
  233. package/dist/web/assets/table-tab-D-nKWMJR.js.gz +0 -0
  234. package/dist/web/assets/{telegram-bot-token-field-fdHwRf39.js → telegram-bot-token-field-BeNS2X2k.js} +1 -1
  235. package/dist/web/assets/telegram-bot-token-field-BeNS2X2k.js.br +0 -0
  236. package/dist/web/assets/telegram-bot-token-field-BeNS2X2k.js.gz +0 -0
  237. package/dist/web/assets/{terminal-tab-D-qlZXLK.js → terminal-tab-BbP753Ab.js} +1 -1
  238. package/dist/web/assets/terminal-tab-BbP753Ab.js.br +0 -0
  239. package/dist/web/assets/terminal-tab-BbP753Ab.js.gz +0 -0
  240. package/dist/web/assets/{tool-cards-BdXbQ9Fv.js → tool-cards-Dh8Ekn2W.js} +2 -2
  241. package/dist/web/assets/tool-cards-Dh8Ekn2W.js.br +0 -0
  242. package/dist/web/assets/tool-cards-Dh8Ekn2W.js.gz +0 -0
  243. package/dist/web/assets/{tools-settings-section-CcPaspbR.js → tools-settings-section-DGZRIULE.js} +1 -1
  244. package/dist/web/assets/tools-settings-section-DGZRIULE.js.br +0 -0
  245. package/dist/web/assets/tools-settings-section-DGZRIULE.js.gz +0 -0
  246. package/dist/web/assets/{use-inline-blame-Ck5XoSS3.js → use-inline-blame-BxwM-Wkj.js} +1 -1
  247. package/dist/web/assets/use-inline-blame-BxwM-Wkj.js.br +0 -0
  248. package/dist/web/assets/use-inline-blame-BxwM-Wkj.js.gz +0 -0
  249. package/dist/web/assets/{use-lsp-CGSqfFBk.js → use-lsp-BqvwRKmM.js} +1 -1
  250. package/dist/web/assets/use-lsp-BqvwRKmM.js.br +0 -0
  251. package/dist/web/assets/use-lsp-BqvwRKmM.js.gz +0 -0
  252. package/dist/web/assets/{use-monaco-theme-BW05eZS4.js → use-monaco-theme-DU0EpDHH.js} +1 -1
  253. package/dist/web/assets/{use-process-kill-DJ_f7rCO.js → use-process-kill-CVN_c4KF.js} +1 -1
  254. package/dist/web/assets/use-process-kill-CVN_c4KF.js.br +0 -0
  255. package/dist/web/assets/use-process-kill-CVN_c4KF.js.gz +0 -0
  256. package/dist/web/assets/{use-sql-schema-info-wt320fVR.js → use-sql-schema-info-C0wBmR6-.js} +1 -1
  257. package/dist/web/assets/use-sql-schema-info-C0wBmR6-.js.br +0 -0
  258. package/dist/web/assets/use-sql-schema-info-C0wBmR6-.js.gz +0 -0
  259. package/dist/web/assets/{use-websocket-CTwe74Cb.js → use-websocket-K0OUXbbY.js} +1 -1
  260. package/dist/web/assets/{web-preview-tab-D4XayUEK.js → web-preview-tab-DOgLv8Gt.js} +1 -1
  261. package/dist/web/assets/{web-preview-tab-D4XayUEK.js.br → web-preview-tab-DOgLv8Gt.js.br} +0 -0
  262. package/dist/web/assets/web-preview-tab-DOgLv8Gt.js.gz +0 -0
  263. package/dist/web/index.html +1 -1
  264. package/dist/web/index.html.br +0 -0
  265. package/dist/web/index.html.gz +0 -0
  266. package/dist/web/sw.js +1 -1
  267. package/dist/web/sw.js.br +0 -0
  268. package/dist/web/sw.js.gz +0 -0
  269. package/docs/deployment-guide.md +39 -0
  270. package/package.json +1 -1
  271. package/scripts/mem-diag-report.ts +31 -0
  272. package/src/providers/registry.ts +10 -1
  273. package/src/server/index.ts +7 -6
  274. package/src/server/middleware/access-log.ts +3 -0
  275. package/src/server/middleware/cors-headers.ts +44 -0
  276. package/src/server/routes/chat.ts +4 -1
  277. package/src/server/routes/database-impexp.ts +1 -1
  278. package/src/server/routes/design-preview.ts +2 -2
  279. package/src/server/ws/chat.ts +3 -0
  280. package/src/services/compact-segment.ts +14 -19
  281. package/src/services/database/grid-export-tickets.ts +6 -2
  282. package/src/services/database/impexp/readers/file-text.ts +6 -3
  283. package/src/services/edge-forwarder.ts +12 -0
  284. package/src/services/file-chunks.ts +39 -0
  285. package/src/services/file-lines.ts +10 -17
  286. package/src/services/lsp/lsp-manager.ts +3 -0
  287. package/src/services/memory-diagnostics-native.ts +110 -0
  288. package/src/services/memory-diagnostics-report.ts +200 -0
  289. package/src/services/memory-diagnostics-requests.ts +95 -0
  290. package/src/services/memory-diagnostics-spawns.ts +242 -0
  291. package/src/services/memory-diagnostics.ts +121 -23
  292. package/src/services/memory-watchdog.ts +185 -0
  293. package/src/services/nested-subagent-spy.ts +3 -0
  294. package/src/services/process-thread-snapshot.ts +12 -2
  295. package/src/services/process-tree-memory.ts +161 -0
  296. package/src/services/read-lines.ts +16 -27
  297. package/src/services/supervisor.ts +1 -0
  298. package/src/services/terminal.service.ts +8 -0
  299. package/src/services/transcript-images-file.ts +7 -11
  300. package/src/web/components/settings/notifications-settings-section.tsx +14 -1
  301. package/src/web/lib/web-push-client.ts +35 -5
  302. package/src/web/lib/web-push-support.ts +57 -4
  303. package/dist/web/assets/accounts-settings-section-DD88DRdx.js.br +0 -0
  304. package/dist/web/assets/accounts-settings-section-DD88DRdx.js.gz +0 -0
  305. package/dist/web/assets/agent-session-sheet-C0PhhLKR.js.br +0 -0
  306. package/dist/web/assets/agent-session-sheet-C0PhhLKR.js.gz +0 -0
  307. package/dist/web/assets/agent-session-window-content-D0XZgh4U.js.br +0 -0
  308. package/dist/web/assets/agent-session-window-content-D0XZgh4U.js.gz +0 -0
  309. package/dist/web/assets/ai-resource-editor-CpfQB6A7.js.br +0 -0
  310. package/dist/web/assets/ai-resource-editor-CpfQB6A7.js.gz +0 -0
  311. package/dist/web/assets/ai-settings-section-CQWBwWcM.js.br +0 -0
  312. package/dist/web/assets/ai-settings-section-CQWBwWcM.js.gz +0 -0
  313. package/dist/web/assets/android-tab-4Z4AgHz1.js.br +0 -0
  314. package/dist/web/assets/android-tab-4Z4AgHz1.js.gz +0 -0
  315. package/dist/web/assets/appearance-settings-section-DjQjiJF7.js.br +0 -0
  316. package/dist/web/assets/appearance-settings-section-DjQjiJF7.js.gz +0 -0
  317. package/dist/web/assets/apps-panel-_lxY9xbc.js.br +0 -0
  318. package/dist/web/assets/apps-panel-_lxY9xbc.js.gz +0 -0
  319. package/dist/web/assets/branch-review-tab-BzrhnFSs.js.br +0 -0
  320. package/dist/web/assets/branch-review-tab-BzrhnFSs.js.gz +0 -0
  321. package/dist/web/assets/chat-tab-BKHepkYi.js.br +0 -0
  322. package/dist/web/assets/chat-tab-BKHepkYi.js.gz +0 -0
  323. package/dist/web/assets/chat-tab-Cv8gYzcA.js.br +0 -0
  324. package/dist/web/assets/chat-tab-Cv8gYzcA.js.gz +0 -0
  325. package/dist/web/assets/code-editor-COWmNXO4.js.br +0 -0
  326. package/dist/web/assets/code-editor-COWmNXO4.js.gz +0 -0
  327. package/dist/web/assets/codex-reset-credit-button-BHt4yJet.js.br +0 -0
  328. package/dist/web/assets/codex-reset-credit-button-BHt4yJet.js.gz +0 -0
  329. package/dist/web/assets/conflict-editor-tj-1gzKr.js.br +0 -0
  330. package/dist/web/assets/conflict-editor-tj-1gzKr.js.gz +0 -0
  331. package/dist/web/assets/connection-form-tab-BV2QX8Cf.js.br +0 -0
  332. package/dist/web/assets/connection-form-tab-BV2QX8Cf.js.gz +0 -0
  333. package/dist/web/assets/csv-preview-xhE2esgz.js.br +0 -0
  334. package/dist/web/assets/csv-preview-xhE2esgz.js.gz +0 -0
  335. package/dist/web/assets/db-tab-parts-C3MsjOID.js.br +0 -0
  336. package/dist/web/assets/db-tab-parts-C3MsjOID.js.gz +0 -0
  337. package/dist/web/assets/design-settings-section-C3LxYhIw.js.br +0 -0
  338. package/dist/web/assets/design-settings-section-C3LxYhIw.js.gz +0 -0
  339. package/dist/web/assets/design-tab-DYcvjdfb.js.br +0 -0
  340. package/dist/web/assets/design-tab-DYcvjdfb.js.gz +0 -0
  341. package/dist/web/assets/designs-sidebar-panel-Dpr4PPFT.js.br +0 -0
  342. package/dist/web/assets/designs-sidebar-panel-Dpr4PPFT.js.gz +0 -0
  343. package/dist/web/assets/diff-viewer-Fl_4jqr6.js.br +0 -0
  344. package/dist/web/assets/diff-viewer-Fl_4jqr6.js.gz +0 -0
  345. package/dist/web/assets/docx-preview-bVE9shPX.js.br +0 -0
  346. package/dist/web/assets/docx-preview-bVE9shPX.js.gz +0 -0
  347. package/dist/web/assets/editor-dialog-eEOYWdbr.js.br +0 -0
  348. package/dist/web/assets/editor-dialog-eEOYWdbr.js.gz +0 -0
  349. package/dist/web/assets/editor-language-service-D1_Ggq4s.js.br +0 -0
  350. package/dist/web/assets/editor-language-service-D1_Ggq4s.js.gz +0 -0
  351. package/dist/web/assets/explorer-body-C0UOcBPJ.js.br +0 -0
  352. package/dist/web/assets/explorer-body-C0UOcBPJ.js.gz +0 -0
  353. package/dist/web/assets/explorer-window-content-Dxee7SuJ.js.br +0 -0
  354. package/dist/web/assets/explorer-window-content-Dxee7SuJ.js.gz +0 -0
  355. package/dist/web/assets/extension-manager-section-D8krnoj8.js.br +0 -0
  356. package/dist/web/assets/extension-manager-section-D8krnoj8.js.gz +0 -0
  357. package/dist/web/assets/extension-webview-CtIdV69T.js.br +0 -0
  358. package/dist/web/assets/extension-webview-CtIdV69T.js.gz +0 -0
  359. package/dist/web/assets/files-settings-section-C8vtarR8.js.br +0 -0
  360. package/dist/web/assets/files-settings-section-C8vtarR8.js.gz +0 -0
  361. package/dist/web/assets/general-settings-section-Chu8Ut8h.js.br +0 -0
  362. package/dist/web/assets/general-settings-section-Chu8Ut8h.js.gz +0 -0
  363. package/dist/web/assets/git-log-panel-DG09p6k5.js.br +0 -0
  364. package/dist/web/assets/git-log-panel-DG09p6k5.js.gz +0 -0
  365. package/dist/web/assets/git-review-tab-CSy8DjSC.js.br +0 -0
  366. package/dist/web/assets/git-review-tab-CSy8DjSC.js.gz +0 -0
  367. package/dist/web/assets/glide-data-grid-BN1y4BT0.js.br +0 -0
  368. package/dist/web/assets/glide-data-grid-BN1y4BT0.js.gz +0 -0
  369. package/dist/web/assets/grid-save-dialog-CfSuWw2t.js.br +0 -0
  370. package/dist/web/assets/grid-save-dialog-CfSuWw2t.js.gz +0 -0
  371. package/dist/web/assets/group-chat-tab-B04QMp7A.js.br +0 -0
  372. package/dist/web/assets/group-chat-tab-B04QMp7A.js.gz +0 -0
  373. package/dist/web/assets/impexp-tab-BRNouquR.js.br +0 -0
  374. package/dist/web/assets/impexp-tab-BRNouquR.js.gz +0 -0
  375. package/dist/web/assets/index-BpgSIM5B.js.br +0 -0
  376. package/dist/web/assets/index-BpgSIM5B.js.gz +0 -0
  377. package/dist/web/assets/keyboard-shortcuts-section-BKDyZHhK.js.br +0 -0
  378. package/dist/web/assets/keyboard-shortcuts-section-BKDyZHhK.js.gz +0 -0
  379. package/dist/web/assets/language-servers-section-CbbkezhA.js.br +0 -0
  380. package/dist/web/assets/language-servers-section-CbbkezhA.js.gz +0 -0
  381. package/dist/web/assets/logs-app-Blr1-v4q.js.br +0 -0
  382. package/dist/web/assets/logs-app-Blr1-v4q.js.gz +0 -0
  383. package/dist/web/assets/lsp-client-Ds3U2O52.js.br +0 -0
  384. package/dist/web/assets/lsp-client-Ds3U2O52.js.gz +0 -0
  385. package/dist/web/assets/markdown-renderer-DzCPadpB.js.br +0 -0
  386. package/dist/web/assets/markdown-renderer-DzCPadpB.js.gz +0 -0
  387. package/dist/web/assets/mobile-explorer-sheet-BClCMXb8.js.br +0 -0
  388. package/dist/web/assets/mobile-explorer-sheet-BClCMXb8.js.gz +0 -0
  389. package/dist/web/assets/new-design-dialog-HRP9H11v.js.br +0 -0
  390. package/dist/web/assets/new-design-dialog-HRP9H11v.js.gz +0 -0
  391. package/dist/web/assets/notifications-settings-section-CYTTQaNr.js +0 -1
  392. package/dist/web/assets/notifications-settings-section-CYTTQaNr.js.br +0 -0
  393. package/dist/web/assets/notifications-settings-section-CYTTQaNr.js.gz +0 -0
  394. package/dist/web/assets/ppmbot-settings-section-BRowIIqc.js.br +0 -0
  395. package/dist/web/assets/ppmbot-settings-section-BRowIIqc.js.gz +0 -0
  396. package/dist/web/assets/problems-panel-DdB10Ybd.js.br +0 -0
  397. package/dist/web/assets/problems-panel-DdB10Ybd.js.gz +0 -0
  398. package/dist/web/assets/process-table-CzLaWPe0.js.br +0 -0
  399. package/dist/web/assets/process-table-CzLaWPe0.js.gz +0 -0
  400. package/dist/web/assets/proxy-settings-section-BCq7R5DA.js.br +0 -0
  401. package/dist/web/assets/proxy-settings-section-BCq7R5DA.js.gz +0 -0
  402. package/dist/web/assets/query-tab-DGvj_h6l.js.br +0 -0
  403. package/dist/web/assets/remote-access-settings-section-BrqOoOyk.js.br +0 -0
  404. package/dist/web/assets/remote-access-settings-section-BrqOoOyk.js.gz +0 -0
  405. package/dist/web/assets/remote-desktop-clipboard-notice-5r6UbdlN.js.br +0 -0
  406. package/dist/web/assets/remote-desktop-clipboard-notice-5r6UbdlN.js.gz +0 -0
  407. package/dist/web/assets/remote-desktop-mobile-sheet-B9Q4auqe.js.br +0 -0
  408. package/dist/web/assets/remote-desktop-mobile-sheet-B9Q4auqe.js.gz +0 -0
  409. package/dist/web/assets/remote-desktop-mobile-view-CL-jrkA8.js.br +0 -0
  410. package/dist/web/assets/remote-desktop-mobile-view-CL-jrkA8.js.gz +0 -0
  411. package/dist/web/assets/remote-desktop-readiness-gate-DXEf2Jnz.js.br +0 -0
  412. package/dist/web/assets/remote-desktop-readiness-gate-DXEf2Jnz.js.gz +0 -0
  413. package/dist/web/assets/remote-desktop-window-content-20P6-gKB.js.br +0 -0
  414. package/dist/web/assets/remote-desktop-window-content-20P6-gKB.js.gz +0 -0
  415. package/dist/web/assets/rename-object-dialog-Bs7pUsUP.js.br +0 -0
  416. package/dist/web/assets/rename-object-dialog-Bs7pUsUP.js.gz +0 -0
  417. package/dist/web/assets/review-code-Bjo4sHN9.js.br +0 -0
  418. package/dist/web/assets/review-code-Bjo4sHN9.js.gz +0 -0
  419. package/dist/web/assets/save-as-dialog-BHx0Wp2B.js.br +0 -0
  420. package/dist/web/assets/save-as-dialog-BHx0Wp2B.js.gz +0 -0
  421. package/dist/web/assets/schedules-settings-section-C6ATYDPK.js.br +0 -0
  422. package/dist/web/assets/schedules-settings-section-C6ATYDPK.js.gz +0 -0
  423. package/dist/web/assets/session-review-tab-BPMUyNTx.js.br +0 -0
  424. package/dist/web/assets/session-review-tab-BPMUyNTx.js.gz +0 -0
  425. package/dist/web/assets/settings-body-Dy5D6Vu7.js.br +0 -0
  426. package/dist/web/assets/settings-body-Dy5D6Vu7.js.gz +0 -0
  427. package/dist/web/assets/settings-rows-BRoYE2To.js.br +0 -0
  428. package/dist/web/assets/settings-rows-BRoYE2To.js.gz +0 -0
  429. package/dist/web/assets/settings-section-content-C4DX7TYv.js +0 -1
  430. package/dist/web/assets/settings-section-content-essUViKu.js.br +0 -0
  431. package/dist/web/assets/settings-section-content-essUViKu.js.gz +0 -0
  432. package/dist/web/assets/slash-command-picker-8da30mYP.js.br +0 -0
  433. package/dist/web/assets/slash-command-picker-8da30mYP.js.gz +0 -0
  434. package/dist/web/assets/sql-object-tab-DRIHVXuR.js.br +0 -0
  435. package/dist/web/assets/sql-object-tab-DRIHVXuR.js.gz +0 -0
  436. package/dist/web/assets/sqlite-viewer-G-Jl2yEr.js.br +0 -0
  437. package/dist/web/assets/sqlite-viewer-G-Jl2yEr.js.gz +0 -0
  438. package/dist/web/assets/structure-save-dialog-Cwikz0we.js.br +0 -0
  439. package/dist/web/assets/structure-save-dialog-Cwikz0we.js.gz +0 -0
  440. package/dist/web/assets/structure-tab-CWEgdZPm.js.br +0 -0
  441. package/dist/web/assets/structure-tab-CWEgdZPm.js.gz +0 -0
  442. package/dist/web/assets/system-monitor-body-BDQm9-wb.js.br +0 -0
  443. package/dist/web/assets/tab-host-window-content-CZ55-bTz.js.br +0 -0
  444. package/dist/web/assets/tab-host-window-content-CZ55-bTz.js.gz +0 -0
  445. package/dist/web/assets/table-tab-Bmn4UdBV.js.br +0 -0
  446. package/dist/web/assets/table-tab-Bmn4UdBV.js.gz +0 -0
  447. package/dist/web/assets/telegram-bot-token-field-fdHwRf39.js.br +0 -0
  448. package/dist/web/assets/telegram-bot-token-field-fdHwRf39.js.gz +0 -0
  449. package/dist/web/assets/terminal-tab-D-qlZXLK.js.br +0 -0
  450. package/dist/web/assets/terminal-tab-D-qlZXLK.js.gz +0 -0
  451. package/dist/web/assets/tool-cards-BdXbQ9Fv.js.br +0 -0
  452. package/dist/web/assets/tool-cards-BdXbQ9Fv.js.gz +0 -0
  453. package/dist/web/assets/tools-settings-section-CcPaspbR.js.br +0 -0
  454. package/dist/web/assets/tools-settings-section-CcPaspbR.js.gz +0 -0
  455. package/dist/web/assets/use-inline-blame-Ck5XoSS3.js.br +0 -0
  456. package/dist/web/assets/use-inline-blame-Ck5XoSS3.js.gz +0 -0
  457. package/dist/web/assets/use-lsp-CGSqfFBk.js.br +0 -0
  458. package/dist/web/assets/use-lsp-CGSqfFBk.js.gz +0 -0
  459. package/dist/web/assets/use-process-kill-DJ_f7rCO.js.br +0 -0
  460. package/dist/web/assets/use-process-kill-DJ_f7rCO.js.gz +0 -0
  461. package/dist/web/assets/use-sql-schema-info-wt320fVR.js.br +0 -0
  462. package/dist/web/assets/use-sql-schema-info-wt320fVR.js.gz +0 -0
  463. package/dist/web/assets/web-preview-tab-D4XayUEK.js.gz +0 -0
@@ -1,5 +1,5 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/markdown-renderer-DbJVwfUH.js","assets/vendor-ui-BTSIXzhZ.js","assets/rolldown-runtime-C5c2KzVm.js","assets/vendor-markdown-C-P1aR4p.js","assets/lib-5Chotbwm.js","assets/markdown-renderer-DzCPadpB.js","assets/index-BpgSIM5B.js","assets/preload-helper-CM8YhcCa.js","assets/button-C9ZXWb3b.js","assets/utils-Bslrbb-G.js","assets/createLucideIcon-D9_fdOKS.js","assets/file-diff-CcDhJkXB.js","assets/git-commit-horizontal-BPdj2L1i.js","assets/api-client-xQDlhUTu.js","assets/react-BZ0kba1-.js","assets/open-db-tabs-CtWIWHOa.js","assets/window-store-DqX_qmkQ.js","assets/panel-store-BJhazigC.js","assets/session-list-sync-triggers-DtJI5KF0.js","assets/project-store-BLGl9IAO.js","assets/project-framework-store-DwLxaRan.js","assets/explorer-model-BtJN4MZ9.js","assets/db-sidebar-reveal-_qw0CliT.js","assets/settings-store-B4mLp19V.js","assets/use-is-mobile-VRV9eZy1.js","assets/db-types-CNhENouW.js","assets/tab-store-D5I52eLN.js","assets/use-db-driver-installed-anzWkGi5.js","assets/impexp-state-BWKOuRGj.js","assets/file-store-BQ41vIs5.js","assets/sql-identifiers-DDISwQor.js","assets/db-explorer-store-BmpvDHz6.js","assets/onboarding-quick-orientation-CTHtIRib.js","assets/dialog-Dn_2tuYa.js","assets/portal-container-context-NBi-KGK0.js","assets/icons-BwyIKaTT.js","assets/format-file-meta-DdYtk07C.js","assets/fs-api-CFtQzsIJ.js","assets/open-settings-EXR4zoZG.js","assets/settings-categories-Ajj4ui27.js","assets/adaptive-context-menu-C4jNSORA.js","assets/context-menu-BCuZYfWC.js","assets/mobile-bottom-sheet-DArbIyrD.js","assets/use-visual-viewport-MmugpRg-.js","assets/dropdown-menu-BQidk_OJ.js","assets/input-C3oVNCMq.js","assets/scroll-area-DOlQJGZp.js","assets/start-ellipsis-CU8GkxaV.js","assets/chat-preparation-cache-190LLyy7.js","assets/clipboard-D-VCry-F.js","assets/file-icons-JInFtBVl.js","assets/format-date-CSHaU2wN.js","assets/git-repo-store-CKB5fdNP.js","assets/patch-tab-metadata-C92YkrRX.js","assets/ws-auth-CbF6GqxP.js","assets/apply-theme-ORrEdHKT.js","assets/resolve-theme-BqoL27BW.js","assets/index-BACBJm4i.css","assets/image-gallery-BuxSgBug.js","assets/run-in-terminal-ujoc25vj.js","assets/edit-diff-preview-DyWUMlkI.js","assets/libesm-B6LsX5wH.js"])))=>i.map(i=>d[i]);
2
- import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import{$ as r,Gt as i,Hr as a,J as o,L as s,M as c,P as l,Sr as u,St as d,Tt as f,_n as p,_t as m,at as h,bn as g,ct as _,gt as v,in as y,jr as b,m as x,mt as S,n as C,pt as w,ti as T,tt as E,ui as D,w as O,wt as ee,xn as k,xr as A,xt as te}from"./icons-BwyIKaTT.js";import{k as ne}from"./api-client-xQDlhUTu.js";import{t as j}from"./react-BZ0kba1-.js";import{t as M}from"./preload-helper-CM8YhcCa.js";import{n as N,t as P}from"./utils-Bslrbb-G.js";import{J as F,X as re,Y as ie,n as I,x as ae}from"./window-store-DqX_qmkQ.js";import{r as oe,t as L}from"./panel-store-BJhazigC.js";import{i as se}from"./project-store-BLGl9IAO.js";import{t as ce}from"./tab-store-D5I52eLN.js";import{i as le,t as ue}from"./file-store-BQ41vIs5.js";import{n as de}from"./use-is-mobile-VRV9eZy1.js";import{r as fe}from"./clipboard-D-VCry-F.js";import{n as pe}from"./fs-api-CFtQzsIJ.js";import{En as me,Xr as he,oi as ge,r as _e}from"./index-BpgSIM5B.js";import{a as ve,i as ye,n as be,r as xe,t as Se}from"./image-preview-geometry-CCq8rio7.js";import{t as R}from"./agent-session-sheet-store-BAfLnsLX.js";import{t as Ce}from"./libesm-B6LsX5wH.js";import{t as we}from"./use-blob-url-Clm7wbB_.js";import{r as Te,t as Ee}from"./image-gallery-BuxSgBug.js";import{a as De,i as Oe,o as ke}from"./html-preview-loads-CMWBC-iv.js";import{f as Ae,g as je,h as Me,i as Ne,l as Pe,m as Fe,n as Ie,o as Le,p as Re,r as ze,t as Be,u as Ve}from"./db-ai-tools-CVbbW_MZ.js";var z=new Set([`Write`,`Edit`,`MultiEdit`,`NotebookEdit`]),He={create:3,write:2,notebook:2,edit:1};function B(e){return typeof e==`string`?e:``}function Ue(e,t){let n=0,r=0;for(let i of Ce(e,t))i.added?n+=i.count??0:i.removed&&(r+=i.count??0);return{added:n,removed:r}}function We(e){return e&&/created successfully/i.test(e)?`create`:`write`}function Ge(e,t,n){switch(e){case`Write`:{let e=B(t.file_path);return e?{filePath:e,op:We(n),fragments:[{oldStr:``,newStr:B(t.content)}]}:null}case`Edit`:{let e=B(t.file_path);return e?{filePath:e,op:`edit`,fragments:[{oldStr:B(t.old_string),newStr:B(t.new_string)}]}:null}case`MultiEdit`:{let e=B(t.file_path);if(!e||!Array.isArray(t.edits))return null;let n=t.edits.filter(e=>!!e&&typeof e==`object`).map(e=>({oldStr:B(e.old_string),newStr:B(e.new_string)}));return n.length===0?null:{filePath:e,op:`edit`,fragments:n}}case`NotebookEdit`:{let e=B(t.notebook_path)||B(t.file_path);return e?{filePath:e,op:`notebook`,fragments:[{oldStr:``,newStr:B(t.new_source)}]}:null}default:return null}}function Ke(e,t){if(e!==`Edit`&&e!==`Write`||!Array.isArray(t.files))return null;let n=[];for(let e of t.files){if(!e||typeof e!=`object`)continue;let t=e,r=B(t.file_path);r&&n.push({filePath:r,op:t.op===`add`?`create`:`edit`,fragments:[{oldStr:B(t.old_string),newStr:B(t.new_string)}]})}return n.length>0?n:null}function qe(e,t){if(e){for(let n of e)if(n.type===`tool_result`&&n.toolUseId&&t.set(n.toolUseId,n.output??``),n.type===`tool_use`){let e=n.result;n.toolUseId&&e?.output!=null&&!t.has(n.toolUseId)&&t.set(n.toolUseId,e.output),qe(n.children,t)}}}function Je(e,t,n,r){if(e)for(let i of e){if(i.type!==`tool_use`||(i.children?.length&&Je(i.children,!0,n,r),!z.has(i.tool)))continue;let e=i.input&&typeof i.input==`object`?i.input:null;if(!e)continue;let a=Ge(i.tool,e,i.toolUseId?r.get(i.toolUseId):void 0),o=Ke(i.tool,e)??(a?[a]:[]);for(let e of o)Ye(n,e,i.toolUseId,t)}}function Ye(e,t,n,r){let i=e.get(t.filePath);i||(i={filePath:t.filePath,op:t.op,editCount:0,linesAdded:0,linesRemoved:0,edits:[],viaSubagent:!1},e.set(t.filePath,i)),He[t.op]>He[i.op]&&(i.op=t.op),r&&(i.viaSubagent=!0),t.fragments.forEach((e,t)=>{let{added:a,removed:o}=Ue(e.oldStr,e.newStr);i.linesAdded+=a,i.linesRemoved+=o,i.editCount+=1,i.edits.push({...e,toolUseId:n,editIndex:t,editRef:n?`${n}-${t}`:void 0,viaSubagent:r})})}function Xe(e){let t=new Map;for(let n of e)qe(n.events,t);let n=new Map;for(let r of e)Je(r.events,!1,n,t);return[...n.values()]}function Ze(e,t){let n=[];for(let r=t;r>=0&&e[r]?.role===`assistant`;r--)n.unshift(e[r]);return n}var Qe=new Set([`Bash`,`PowerShell`]),$e=new WeakMap;function et(e){let t=$e.get(e);if(t)return t;let n=new Set,r=[],i=[],a=e=>{for(let t of e??[]){if(t.type===`tool_result`&&t.toolUseId&&i.push(t.toolUseId),t.type!==`tool_use`||(t.toolUseId&&t.result!=null&&i.push(t.toolUseId),a(t.children),Qe.has(t.tool)&&t.toolUseId&&r.push(t.toolUseId),!z.has(t.tool)))continue;let e=t.input&&typeof t.input==`object`?t.input:null;if(!e)continue;let o=Ge(t.tool,e),s=Ke(t.tool,e)??(o?[o]:[]);for(let e of s)n.add(e.filePath);s.length>0&&t.toolUseId&&r.push(t.toolUseId)}};a(e.events);let o={paths:[...n],writeIds:r,resultIds:i};return $e.set(e,o),o}function tt(e){let t=new Set,n=new Set,r=new Set;for(let i of e){let e=et(i);for(let n of e.paths)t.add(n);for(let t of e.writeIds)n.add(t);for(let t of e.resultIds)r.add(t)}let i=0;for(let e of n)r.has(e)&&i++;return{paths:[...t],settled:i}}function V(e){return typeof e==`string`?e:``}function H(e){return`${e} step${e===1?``:`s`}`}function U(e,t){return e.length>t?e.slice(0,t)+`…`:e}function nt(e){if(e.type!==`tool_use`)return``;let t=e.tool,n=e.input&&typeof e.input==`object`?e.input:{};switch(t){case`Read`:case`Write`:case`Edit`:case`MultiEdit`:case`NotebookEdit`:{let e=V(n.notebook_path||n.file_path);return e?`${t} ${P(e)}`:t}case`Bash`:case`PowerShell`:return U(n.description?V(n.description):V(n.command),60)||t;case`Glob`:return`Glob ${V(n.pattern)}`;case`Grep`:return`Grep ${U(V(n.pattern),40)}`;case`WebSearch`:return`Search ${U(V(n.query),50)}`;case`WebFetch`:return`Fetch ${U(V(n.url),50)}`;case`ToolSearch`:return`Search ${U(V(n.query),50)}`;case`Agent`:case`Task`:{let e=typeof n.name==`string`&&n.name.trim()?n.name.trim():null,r=U(V(n.description||n.prompt),44);return e?r?`${e} · ${r}`:e:r||t}case`SendMessage`:return`Message ${U(V(n.to),30)}`.trim();case`TodoWrite`:return`Todo update`;case`AskUserQuestion`:return`Question`;case`ScheduleWakeup`:return`Scheduled wakeup`;case`TaskCreate`:return U(V(n.subject),60)||t;case`TaskUpdate`:return`Task #${V(n.taskId)} → ${V(n.status)}`;case`TaskStop`:return`Task #${V(n.taskId)} stopped`;case`ImageGen`:return`Image generation`;default:return t}}function rt(e){return e===`Agent`||e===`Task`||z.has(e)}function W(e){let t=[],n=[],r=new Set,i;return(e??[]).forEach((e,a)=>{if(e.type===`tool_use`){t.push(e.toolUseId??`idx:${a}`);let o=nt(e);if(o&&(i=o),rt(e.tool)){if(e.tool===`Agent`||e.tool===`Task`){let t=W(e.children);n.push({...e,children:t.kept,stepIds:t.stepIds,stepCount:t.stepIds.length,lastStep:t.lastStep})}else n.push(e);e.toolUseId&&r.add(e.toolUseId)}}else e.type===`tool_result`&&e.toolUseId&&r.has(e.toolUseId)&&n.push(e)}),{stepIds:t,lastStep:i,kept:n}}function it(e){let t=e.stepCount??e.stepIds?.length??W(e.children).stepIds.length;for(let n of e.children??[])n.type===`tool_use`&&(n.tool===`Agent`||n.tool===`Task`)&&(t+=it(n));return t}function at(e){let t=it(e);if(e.stepCount!=null)return{stepCount:t,lastStep:e.lastStep};let{lastStep:n}=W(e.children);return{stepCount:t,lastStep:n}}function ot(e){try{return JSON.stringify(e).length}catch{return 0}}function st(e){let t=e.reduce((e,t)=>e+ot(t),0),n=0;for(;t>262144&&n<e.length-1;)t-=ot(e[n]),n++;return n>0?e.slice(n):e}function ct(e,t,n){let r=t.toolUseId;if(r){let i=e.findIndex(e=>e.type===t.type&&e.toolUseId===r);if(i!==-1){let r=e[i].arrivalSeq,a=[...e];return a[i]=n==null?t:{...t,arrivalSeq:r},a}}let i=n==null?t:{...t,arrivalSeq:n},a=[...e,i];return st(a.length>200?a.slice(a.length-200):a)}function lt(e,t){let n=e=>e.map((e,t)=>({ev:e,seq:e.arrivalSeq??t}));return[...n(e),...n(t)].sort((e,t)=>e.seq-t.seq).map(e=>e.ev)}function ut(e,t){if(e.type!==`tool_use`)return e;let n=e.stepIds,r=e.lastStep;if(t.type===`tool_use`){let e=t.toolUseId;(!e||!n?.includes(e))&&(n=[...n??[],e??`idx:${n?.length??0}`]);let i=nt(t);i&&(r=i)}let i=e.childSeq??0,a=e=>{let n=t.toolUseId,r=n?e.findIndex(e=>e.type===t.type&&e.toolUseId===n):-1;if(r!==-1){let n=e[r].arrivalSeq,i=[...e];return i[r]={...t,arrivalSeq:n},i}return[...e,{...t,arrivalSeq:i}]},o=e.children??[],s=e.recentChildren??[],c=t.type===`tool_use`&&rt(t.tool),l=e=>!!e&&o.some(t=>t.type===`tool_use`&&t.toolUseId===e),u=o,d=s;return c||t.type===`tool_result`&&l(t.toolUseId)?u=a(o):d=ct(s,t,i),{...e,children:u,recentChildren:d,stepIds:n,stepCount:n?.length,lastStep:r,childSeq:i+1}}function dt(e){return e&&e.map(e=>{if(e.type!==`tool_use`||e.tool!==`Agent`&&e.tool!==`Task`||!e.transcriptAvailable)return e;let{stepIds:t,lastStep:n,kept:r}=W(e.children);return{...e,children:r,stepIds:t,stepCount:t.length,lastStep:n}})}function G(e,t){return t.kind===`card`?`${e}:${t.cardId}`:`${e}:${t.teamName}:${t.memberName}`}var ft=j(()=>({entries:{}}));function pt(e,t){ft.setState(n=>({entries:{...n.entries,[e]:t}}))}function mt(){let e=new Set;for(let t of Object.values(I.getState().windows)){if(t.kind!==`agent-session`)continue;let n=t.payload;typeof n?.sessionId==`string`&&n.source&&e.add(G(n.sessionId,n.source))}let t=R.getState().payload;return t&&e.add(G(t.sessionId,t.source)),e}function ht(){let e=mt();ft.setState(t=>{let n={},r=!1;for(let[i,a]of Object.entries(t.entries))e.has(i)?n[i]=a:r=!0;return r?{entries:n}:t})}I.subscribe(ht),R.subscribe(ht);var K=e(t(),1),q=n(),gt=(0,K.lazy)(()=>M(()=>import(`./markdown-renderer-DbJVwfUH.js`).then(e=>({default:e.MarkdownRenderer})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59])));function J({content:e,maxHeight:t=`max-h-48`}){return(0,q.jsx)(K.Suspense,{fallback:(0,q.jsx)(`div`,{className:`animate-pulse h-4 bg-muted rounded`}),children:(0,q.jsx)(gt,{content:e,className:`text-text-secondary overflow-auto ${t}`})})}var _t={task_assignment:{label:`task`,className:`bg-primary/20 text-primary`},idle_notification:{label:`idle`,className:`bg-warning/20 text-warning`},completion:{label:`done`,className:`bg-success/20 text-success`},shutdown_request:{label:`shutdown`,className:`bg-error/20 text-error`},shutdown_approved:{label:`shutdown ✓`,className:`bg-text-3/20 text-text-3`},shutdown_response:{label:`shutdown reply`,className:`bg-text-3/20 text-text-3`},plan_approval_request:{label:`plan review`,className:`bg-primary/20 text-primary`},plan_approval_response:{label:`plan reply`,className:`bg-primary/20 text-primary`}},vt=new Set([`to`,`message`,`summary`,`notify_when_idle`,`recipient`,`content`,`type`]),Y=e=>typeof e==`string`?e:e==null?``:String(e);function yt(e){if(!e||typeof e!=`object`||Array.isArray(e))return null;let t=e;return typeof t.type!=`string`||!t.type?null:{type:t.type,request_id:typeof t.request_id==`string`?t.request_id:void 0,approve:typeof t.approve==`boolean`?t.approve:void 0,reason:typeof t.reason==`string`?t.reason:void 0,feedback:typeof t.feedback==`string`?t.feedback:void 0}}function bt(e){let t=e.trim();if(!t.startsWith(`{`))return null;try{return yt(JSON.parse(t))}catch{return null}}function xt(e){let t=Y(e.to)||Y(e.recipient),n=e.message??e.content,r=yt(n)??bt(Y(n)),i=r?``:Y(n),a=Y(e.type),o=r?.type||(a&&a!==`message`?a:`message`),s=Y(e.summary).trim(),c=Object.entries(e).filter(([e])=>!vt.has(e)).map(([e,t])=>({key:e,value:typeof t==`string`?t:JSON.stringify(t)??``}));return{to:t,summary:s||void 0,text:i,firstLine:i.split(`
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/markdown-renderer-BNzQeoAO.js","assets/vendor-ui-BTSIXzhZ.js","assets/rolldown-runtime-C5c2KzVm.js","assets/vendor-markdown-C-P1aR4p.js","assets/lib-5Chotbwm.js","assets/markdown-renderer-dk1w3goH.js","assets/index-BtAn_krv.js","assets/preload-helper-CM8YhcCa.js","assets/button-C9ZXWb3b.js","assets/utils-Bslrbb-G.js","assets/createLucideIcon-D9_fdOKS.js","assets/file-diff-CcDhJkXB.js","assets/git-commit-horizontal-BPdj2L1i.js","assets/api-client-xQDlhUTu.js","assets/react-BZ0kba1-.js","assets/open-db-tabs-CtWIWHOa.js","assets/window-store-DqX_qmkQ.js","assets/panel-store-BJhazigC.js","assets/session-list-sync-triggers-DtJI5KF0.js","assets/project-store-BLGl9IAO.js","assets/project-framework-store-DwLxaRan.js","assets/explorer-model-BtJN4MZ9.js","assets/db-sidebar-reveal-_qw0CliT.js","assets/settings-store-B4mLp19V.js","assets/use-is-mobile-VRV9eZy1.js","assets/db-types-CNhENouW.js","assets/tab-store-D5I52eLN.js","assets/use-db-driver-installed-anzWkGi5.js","assets/impexp-state-BWKOuRGj.js","assets/file-store-BQ41vIs5.js","assets/sql-identifiers-DDISwQor.js","assets/db-explorer-store-BmpvDHz6.js","assets/onboarding-quick-orientation-CTHtIRib.js","assets/dialog-Dn_2tuYa.js","assets/portal-container-context-NBi-KGK0.js","assets/icons-BwyIKaTT.js","assets/format-file-meta-DdYtk07C.js","assets/fs-api-CFtQzsIJ.js","assets/open-settings-EXR4zoZG.js","assets/settings-categories-Ajj4ui27.js","assets/adaptive-context-menu-C4jNSORA.js","assets/context-menu-BCuZYfWC.js","assets/mobile-bottom-sheet-DArbIyrD.js","assets/use-visual-viewport-MmugpRg-.js","assets/dropdown-menu-BQidk_OJ.js","assets/input-C3oVNCMq.js","assets/scroll-area-DOlQJGZp.js","assets/start-ellipsis-CU8GkxaV.js","assets/chat-preparation-cache-190LLyy7.js","assets/clipboard-D-VCry-F.js","assets/file-icons-JInFtBVl.js","assets/format-date-CSHaU2wN.js","assets/git-repo-store-CKB5fdNP.js","assets/patch-tab-metadata-C92YkrRX.js","assets/ws-auth-CbF6GqxP.js","assets/apply-theme-ORrEdHKT.js","assets/resolve-theme-BqoL27BW.js","assets/index-BACBJm4i.css","assets/image-gallery-BuxSgBug.js","assets/run-in-terminal-ujoc25vj.js","assets/edit-diff-preview-DyWUMlkI.js","assets/libesm-B6LsX5wH.js"])))=>i.map(i=>d[i]);
2
+ import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import{$ as r,Gt as i,Hr as a,J as o,L as s,M as c,P as l,Sr as u,St as d,Tt as f,_n as p,_t as m,at as h,bn as g,ct as _,gt as v,in as y,jr as b,m as x,mt as S,n as C,pt as w,ti as T,tt as E,ui as D,w as O,wt as ee,xn as k,xr as A,xt as te}from"./icons-BwyIKaTT.js";import{k as ne}from"./api-client-xQDlhUTu.js";import{t as j}from"./react-BZ0kba1-.js";import{t as M}from"./preload-helper-CM8YhcCa.js";import{n as N,t as P}from"./utils-Bslrbb-G.js";import{J as F,X as re,Y as ie,n as I,x as ae}from"./window-store-DqX_qmkQ.js";import{r as oe,t as L}from"./panel-store-BJhazigC.js";import{i as se}from"./project-store-BLGl9IAO.js";import{t as ce}from"./tab-store-D5I52eLN.js";import{i as le,t as ue}from"./file-store-BQ41vIs5.js";import{n as de}from"./use-is-mobile-VRV9eZy1.js";import{r as fe}from"./clipboard-D-VCry-F.js";import{n as pe}from"./fs-api-CFtQzsIJ.js";import{En as me,Xr as he,oi as ge,r as _e}from"./index-BtAn_krv.js";import{a as ve,i as ye,n as be,r as xe,t as Se}from"./image-preview-geometry-CCq8rio7.js";import{t as R}from"./agent-session-sheet-store-BAfLnsLX.js";import{t as Ce}from"./libesm-B6LsX5wH.js";import{t as we}from"./use-blob-url-Clm7wbB_.js";import{r as Te,t as Ee}from"./image-gallery-BuxSgBug.js";import{a as De,i as Oe,o as ke}from"./html-preview-loads-CMWBC-iv.js";import{f as Ae,g as je,h as Me,i as Ne,l as Pe,m as Fe,n as Ie,o as Le,p as Re,r as ze,t as Be,u as Ve}from"./db-ai-tools-CVbbW_MZ.js";var z=new Set([`Write`,`Edit`,`MultiEdit`,`NotebookEdit`]),He={create:3,write:2,notebook:2,edit:1};function B(e){return typeof e==`string`?e:``}function Ue(e,t){let n=0,r=0;for(let i of Ce(e,t))i.added?n+=i.count??0:i.removed&&(r+=i.count??0);return{added:n,removed:r}}function We(e){return e&&/created successfully/i.test(e)?`create`:`write`}function Ge(e,t,n){switch(e){case`Write`:{let e=B(t.file_path);return e?{filePath:e,op:We(n),fragments:[{oldStr:``,newStr:B(t.content)}]}:null}case`Edit`:{let e=B(t.file_path);return e?{filePath:e,op:`edit`,fragments:[{oldStr:B(t.old_string),newStr:B(t.new_string)}]}:null}case`MultiEdit`:{let e=B(t.file_path);if(!e||!Array.isArray(t.edits))return null;let n=t.edits.filter(e=>!!e&&typeof e==`object`).map(e=>({oldStr:B(e.old_string),newStr:B(e.new_string)}));return n.length===0?null:{filePath:e,op:`edit`,fragments:n}}case`NotebookEdit`:{let e=B(t.notebook_path)||B(t.file_path);return e?{filePath:e,op:`notebook`,fragments:[{oldStr:``,newStr:B(t.new_source)}]}:null}default:return null}}function Ke(e,t){if(e!==`Edit`&&e!==`Write`||!Array.isArray(t.files))return null;let n=[];for(let e of t.files){if(!e||typeof e!=`object`)continue;let t=e,r=B(t.file_path);r&&n.push({filePath:r,op:t.op===`add`?`create`:`edit`,fragments:[{oldStr:B(t.old_string),newStr:B(t.new_string)}]})}return n.length>0?n:null}function qe(e,t){if(e){for(let n of e)if(n.type===`tool_result`&&n.toolUseId&&t.set(n.toolUseId,n.output??``),n.type===`tool_use`){let e=n.result;n.toolUseId&&e?.output!=null&&!t.has(n.toolUseId)&&t.set(n.toolUseId,e.output),qe(n.children,t)}}}function Je(e,t,n,r){if(e)for(let i of e){if(i.type!==`tool_use`||(i.children?.length&&Je(i.children,!0,n,r),!z.has(i.tool)))continue;let e=i.input&&typeof i.input==`object`?i.input:null;if(!e)continue;let a=Ge(i.tool,e,i.toolUseId?r.get(i.toolUseId):void 0),o=Ke(i.tool,e)??(a?[a]:[]);for(let e of o)Ye(n,e,i.toolUseId,t)}}function Ye(e,t,n,r){let i=e.get(t.filePath);i||(i={filePath:t.filePath,op:t.op,editCount:0,linesAdded:0,linesRemoved:0,edits:[],viaSubagent:!1},e.set(t.filePath,i)),He[t.op]>He[i.op]&&(i.op=t.op),r&&(i.viaSubagent=!0),t.fragments.forEach((e,t)=>{let{added:a,removed:o}=Ue(e.oldStr,e.newStr);i.linesAdded+=a,i.linesRemoved+=o,i.editCount+=1,i.edits.push({...e,toolUseId:n,editIndex:t,editRef:n?`${n}-${t}`:void 0,viaSubagent:r})})}function Xe(e){let t=new Map;for(let n of e)qe(n.events,t);let n=new Map;for(let r of e)Je(r.events,!1,n,t);return[...n.values()]}function Ze(e,t){let n=[];for(let r=t;r>=0&&e[r]?.role===`assistant`;r--)n.unshift(e[r]);return n}var Qe=new Set([`Bash`,`PowerShell`]),$e=new WeakMap;function et(e){let t=$e.get(e);if(t)return t;let n=new Set,r=[],i=[],a=e=>{for(let t of e??[]){if(t.type===`tool_result`&&t.toolUseId&&i.push(t.toolUseId),t.type!==`tool_use`||(t.toolUseId&&t.result!=null&&i.push(t.toolUseId),a(t.children),Qe.has(t.tool)&&t.toolUseId&&r.push(t.toolUseId),!z.has(t.tool)))continue;let e=t.input&&typeof t.input==`object`?t.input:null;if(!e)continue;let o=Ge(t.tool,e),s=Ke(t.tool,e)??(o?[o]:[]);for(let e of s)n.add(e.filePath);s.length>0&&t.toolUseId&&r.push(t.toolUseId)}};a(e.events);let o={paths:[...n],writeIds:r,resultIds:i};return $e.set(e,o),o}function tt(e){let t=new Set,n=new Set,r=new Set;for(let i of e){let e=et(i);for(let n of e.paths)t.add(n);for(let t of e.writeIds)n.add(t);for(let t of e.resultIds)r.add(t)}let i=0;for(let e of n)r.has(e)&&i++;return{paths:[...t],settled:i}}function V(e){return typeof e==`string`?e:``}function H(e){return`${e} step${e===1?``:`s`}`}function U(e,t){return e.length>t?e.slice(0,t)+`…`:e}function nt(e){if(e.type!==`tool_use`)return``;let t=e.tool,n=e.input&&typeof e.input==`object`?e.input:{};switch(t){case`Read`:case`Write`:case`Edit`:case`MultiEdit`:case`NotebookEdit`:{let e=V(n.notebook_path||n.file_path);return e?`${t} ${P(e)}`:t}case`Bash`:case`PowerShell`:return U(n.description?V(n.description):V(n.command),60)||t;case`Glob`:return`Glob ${V(n.pattern)}`;case`Grep`:return`Grep ${U(V(n.pattern),40)}`;case`WebSearch`:return`Search ${U(V(n.query),50)}`;case`WebFetch`:return`Fetch ${U(V(n.url),50)}`;case`ToolSearch`:return`Search ${U(V(n.query),50)}`;case`Agent`:case`Task`:{let e=typeof n.name==`string`&&n.name.trim()?n.name.trim():null,r=U(V(n.description||n.prompt),44);return e?r?`${e} · ${r}`:e:r||t}case`SendMessage`:return`Message ${U(V(n.to),30)}`.trim();case`TodoWrite`:return`Todo update`;case`AskUserQuestion`:return`Question`;case`ScheduleWakeup`:return`Scheduled wakeup`;case`TaskCreate`:return U(V(n.subject),60)||t;case`TaskUpdate`:return`Task #${V(n.taskId)} → ${V(n.status)}`;case`TaskStop`:return`Task #${V(n.taskId)} stopped`;case`ImageGen`:return`Image generation`;default:return t}}function rt(e){return e===`Agent`||e===`Task`||z.has(e)}function W(e){let t=[],n=[],r=new Set,i;return(e??[]).forEach((e,a)=>{if(e.type===`tool_use`){t.push(e.toolUseId??`idx:${a}`);let o=nt(e);if(o&&(i=o),rt(e.tool)){if(e.tool===`Agent`||e.tool===`Task`){let t=W(e.children);n.push({...e,children:t.kept,stepIds:t.stepIds,stepCount:t.stepIds.length,lastStep:t.lastStep})}else n.push(e);e.toolUseId&&r.add(e.toolUseId)}}else e.type===`tool_result`&&e.toolUseId&&r.has(e.toolUseId)&&n.push(e)}),{stepIds:t,lastStep:i,kept:n}}function it(e){let t=e.stepCount??e.stepIds?.length??W(e.children).stepIds.length;for(let n of e.children??[])n.type===`tool_use`&&(n.tool===`Agent`||n.tool===`Task`)&&(t+=it(n));return t}function at(e){let t=it(e);if(e.stepCount!=null)return{stepCount:t,lastStep:e.lastStep};let{lastStep:n}=W(e.children);return{stepCount:t,lastStep:n}}function ot(e){try{return JSON.stringify(e).length}catch{return 0}}function st(e){let t=e.reduce((e,t)=>e+ot(t),0),n=0;for(;t>262144&&n<e.length-1;)t-=ot(e[n]),n++;return n>0?e.slice(n):e}function ct(e,t,n){let r=t.toolUseId;if(r){let i=e.findIndex(e=>e.type===t.type&&e.toolUseId===r);if(i!==-1){let r=e[i].arrivalSeq,a=[...e];return a[i]=n==null?t:{...t,arrivalSeq:r},a}}let i=n==null?t:{...t,arrivalSeq:n},a=[...e,i];return st(a.length>200?a.slice(a.length-200):a)}function lt(e,t){let n=e=>e.map((e,t)=>({ev:e,seq:e.arrivalSeq??t}));return[...n(e),...n(t)].sort((e,t)=>e.seq-t.seq).map(e=>e.ev)}function ut(e,t){if(e.type!==`tool_use`)return e;let n=e.stepIds,r=e.lastStep;if(t.type===`tool_use`){let e=t.toolUseId;(!e||!n?.includes(e))&&(n=[...n??[],e??`idx:${n?.length??0}`]);let i=nt(t);i&&(r=i)}let i=e.childSeq??0,a=e=>{let n=t.toolUseId,r=n?e.findIndex(e=>e.type===t.type&&e.toolUseId===n):-1;if(r!==-1){let n=e[r].arrivalSeq,i=[...e];return i[r]={...t,arrivalSeq:n},i}return[...e,{...t,arrivalSeq:i}]},o=e.children??[],s=e.recentChildren??[],c=t.type===`tool_use`&&rt(t.tool),l=e=>!!e&&o.some(t=>t.type===`tool_use`&&t.toolUseId===e),u=o,d=s;return c||t.type===`tool_result`&&l(t.toolUseId)?u=a(o):d=ct(s,t,i),{...e,children:u,recentChildren:d,stepIds:n,stepCount:n?.length,lastStep:r,childSeq:i+1}}function dt(e){return e&&e.map(e=>{if(e.type!==`tool_use`||e.tool!==`Agent`&&e.tool!==`Task`||!e.transcriptAvailable)return e;let{stepIds:t,lastStep:n,kept:r}=W(e.children);return{...e,children:r,stepIds:t,stepCount:t.length,lastStep:n}})}function G(e,t){return t.kind===`card`?`${e}:${t.cardId}`:`${e}:${t.teamName}:${t.memberName}`}var ft=j(()=>({entries:{}}));function pt(e,t){ft.setState(n=>({entries:{...n.entries,[e]:t}}))}function mt(){let e=new Set;for(let t of Object.values(I.getState().windows)){if(t.kind!==`agent-session`)continue;let n=t.payload;typeof n?.sessionId==`string`&&n.source&&e.add(G(n.sessionId,n.source))}let t=R.getState().payload;return t&&e.add(G(t.sessionId,t.source)),e}function ht(){let e=mt();ft.setState(t=>{let n={},r=!1;for(let[i,a]of Object.entries(t.entries))e.has(i)?n[i]=a:r=!0;return r?{entries:n}:t})}I.subscribe(ht),R.subscribe(ht);var K=e(t(),1),q=n(),gt=(0,K.lazy)(()=>M(()=>import(`./markdown-renderer-BNzQeoAO.js`).then(e=>({default:e.MarkdownRenderer})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59])));function J({content:e,maxHeight:t=`max-h-48`}){return(0,q.jsx)(K.Suspense,{fallback:(0,q.jsx)(`div`,{className:`animate-pulse h-4 bg-muted rounded`}),children:(0,q.jsx)(gt,{content:e,className:`text-text-secondary overflow-auto ${t}`})})}var _t={task_assignment:{label:`task`,className:`bg-primary/20 text-primary`},idle_notification:{label:`idle`,className:`bg-warning/20 text-warning`},completion:{label:`done`,className:`bg-success/20 text-success`},shutdown_request:{label:`shutdown`,className:`bg-error/20 text-error`},shutdown_approved:{label:`shutdown ✓`,className:`bg-text-3/20 text-text-3`},shutdown_response:{label:`shutdown reply`,className:`bg-text-3/20 text-text-3`},plan_approval_request:{label:`plan review`,className:`bg-primary/20 text-primary`},plan_approval_response:{label:`plan reply`,className:`bg-primary/20 text-primary`}},vt=new Set([`to`,`message`,`summary`,`notify_when_idle`,`recipient`,`content`,`type`]),Y=e=>typeof e==`string`?e:e==null?``:String(e);function yt(e){if(!e||typeof e!=`object`||Array.isArray(e))return null;let t=e;return typeof t.type!=`string`||!t.type?null:{type:t.type,request_id:typeof t.request_id==`string`?t.request_id:void 0,approve:typeof t.approve==`boolean`?t.approve:void 0,reason:typeof t.reason==`string`?t.reason:void 0,feedback:typeof t.feedback==`string`?t.feedback:void 0}}function bt(e){let t=e.trim();if(!t.startsWith(`{`))return null;try{return yt(JSON.parse(t))}catch{return null}}function xt(e){let t=Y(e.to)||Y(e.recipient),n=e.message??e.content,r=yt(n)??bt(Y(n)),i=r?``:Y(n),a=Y(e.type),o=r?.type||(a&&a!==`message`?a:`message`),s=Y(e.summary).trim(),c=Object.entries(e).filter(([e])=>!vt.has(e)).map(([e,t])=>({key:e,value:typeof t==`string`?t:JSON.stringify(t)??``}));return{to:t,summary:s||void 0,text:i,firstLine:i.split(`
3
3
  `).map(e=>e.trim()).find(e=>e.length>0)??``,protocol:r??void 0,kind:o,notifyWhenIdle:e.notify_when_idle===!0,extras:c}}function St(e){if(!e)return null;let t;try{t=JSON.parse(e)}catch{return null}if(Array.isArray(t)){let e=Y(t.find(e=>e&&typeof e==`object`&&e.type===`text`)?.text);if(!e)return null;try{t=JSON.parse(e)}catch{return null}}if(!t||typeof t!=`object`||Array.isArray(t))return null;let n=t;if(typeof n.success!=`boolean`)return null;let r=n.pin&&typeof n.pin==`object`?n.pin:null;return{ok:n.success,detail:Y(n.message)||Y(n.error)||void 0,peer:r&&Y(r.name)||void 0,ref:r&&Y(r.ref)||void 0}}function Ct({kind:e}){if(e===`message`)return null;let t=_t[e];return(0,q.jsx)(`span`,{className:`inline-block rounded px-1.5 py-0.5 text-[10px] ${t?.className??`bg-panel-2 text-text-3`}`,children:t?.label??e})}function wt({name:e,input:t}){let n=xt(t),r=n.summary||n.firstLine||(n.protocol?n.kind:``),i=r.length>72?`${r.slice(0,72)}…`:r;return(0,q.jsxs)(q.Fragment,{children:[e,` `,(0,q.jsxs)(`span`,{className:`text-text-subtle`,children:[(0,q.jsx)(x,{className:`size-3 inline`}),` `,n.to||`unknown`,i?` · ${i}`:``]}),n.notifyWhenIdle&&(0,q.jsx)(E,{className:`size-3 inline ml-1 text-text-3`})]})}function Tt({input:e}){let t=xt(e);return(0,q.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[(0,q.jsx)(`span`,{className:`text-text-subtle`,children:`To`}),(0,q.jsx)(`span`,{className:`font-medium text-text-primary`,children:t.to||`unknown`}),(0,q.jsx)(Ct,{kind:t.kind}),t.notifyWhenIdle&&(0,q.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded px-1.5 py-0.5 text-[10px] bg-panel-2 text-text-3`,children:[(0,q.jsx)(E,{className:`size-3`}),` notify when idle`]})]}),!!t.text&&(0,q.jsx)(J,{content:t.text,maxHeight:`max-h-40`}),t.protocol&&(0,q.jsxs)(`div`,{className:`space-y-0.5 text-text-secondary`,children:[t.protocol.approve!=null&&(0,q.jsxs)(`p`,{children:[t.protocol.approve?`Approved`:`Rejected`,t.protocol.request_id?(0,q.jsxs)(`span`,{className:`text-text-subtle font-mono`,children:[` · `,t.protocol.request_id]}):null]}),!!t.protocol.reason&&(0,q.jsx)(`p`,{className:`text-text-subtle`,children:t.protocol.reason}),!!t.protocol.feedback&&(0,q.jsx)(`p`,{className:`text-text-subtle`,children:t.protocol.feedback})]}),t.extras.length>0&&(0,q.jsx)(`div`,{className:`space-y-0.5`,children:t.extras.map(e=>(0,q.jsxs)(`p`,{className:`text-text-subtle`,children:[(0,q.jsx)(`span`,{className:`font-mono`,children:e.key}),`: `,e.value]},e.key))})]})}function Et({output:e}){let[t,n]=(0,K.useState)(!1),r=St(e);return r?(0,q.jsxs)(`div`,{className:`border-t border-border pt-1.5 space-y-1`,children:[(0,q.jsxs)(`div`,{className:`flex items-center gap-1.5 flex-wrap`,children:[r.ok?(0,q.jsx)(c,{className:`size-3 text-success shrink-0`}):(0,q.jsx)(D,{className:`size-3 text-error shrink-0`}),(0,q.jsx)(`span`,{className:r.ok?`text-success`:`text-error`,children:r.ok?`Delivered`:`Not delivered`}),!!r.detail&&(0,q.jsxs)(`span`,{className:`text-text-subtle`,children:[`· `,r.detail]}),!!r.ref&&(0,q.jsxs)(`span`,{className:`text-text-3 font-mono text-[10px]`,children:[`[`,r.ref,`]`]})]}),(0,q.jsxs)(`button`,{type:`button`,onClick:()=>n(!t),className:`flex items-center gap-1 text-[10px] text-text-subtle hover:text-text-secondary transition-colors`,children:[(0,q.jsx)(h,{className:`size-3`}),t?`Hide`:`Show`,` raw`]}),t&&(0,q.jsx)(`pre`,{className:`overflow-x-auto text-text-subtle font-mono max-h-40 whitespace-pre-wrap break-all text-[10px]`,children:e})]}):null}var Dt=new Set([`.png`,`.jpg`,`.jpeg`,`.gif`,`.webp`,`.bmp`,`.avif`,`.ico`]);function Ot(e){let t=e.lastIndexOf(`.`);return t===-1?!1:Dt.has(e.slice(t).toLowerCase())}var kt=/^\[image(?: · [\d.]+(?:B|KB|MB))?\]$/;function At(e){return kt.test(e)}function jt(e){if(!e.startsWith(`[`))return!1;let t;try{t=JSON.parse(e)}catch{return!1}return Array.isArray(t)?t.some(e=>{let t=e;return t?.type===`text`&&typeof t.text==`string`&&kt.test(t.text)}):!1}var Mt=`Async agent launched successfully`;function Nt(e){return!!e&&e.includes(Mt)}var Pt=`text-[var(--img-meta-label)] @max-[470px]:hidden`,Ft=[`60%`,`45%`,`80%`];function It({aspect:e,actions:t}){return(0,q.jsxs)(`div`,{className:`grid grid-cols-[132px_1fr] items-start gap-[14px] overflow-hidden rounded-lg border border-border bg-panel p-[14px] @max-[470px]:grid-cols-[64px_1fr] @max-[470px]:gap-[11px] @max-[470px]:p-[11px]`,children:[(0,q.jsx)(`div`,{className:`img-skeleton rounded-lg`,style:{aspectRatio:e}}),(0,q.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-[9px]`,children:[(0,q.jsx)(`div`,{className:`img-skeleton h-[13px] w-2/5 rounded @max-[470px]:hidden`}),(0,q.jsx)(`dl`,{className:`grid grid-cols-[auto_1fr] gap-x-[14px] gap-y-[4px] font-mono text-[11.5px] @max-[470px]:grid-cols-[1fr]`,children:[`dimensions`,`size`,`path`].map((e,t)=>(0,q.jsxs)(K.Fragment,{children:[(0,q.jsx)(`dt`,{className:Pt,children:e}),(0,q.jsx)(`dd`,{className:`flex items-center`,children:(0,q.jsx)(`span`,{className:`img-skeleton h-[11px] rounded`,style:{width:Ft[t]}})})]},e))}),t]})]})}function Lt({code:e,onRetry:t}){return(0,q.jsxs)(`div`,{className:`flex items-center gap-2 rounded-lg border border-border bg-panel px-2.5 py-2 font-mono text-[12px] text-text-2`,children:[(0,q.jsx)(C,{className:`size-3 shrink-0`}),(0,q.jsxs)(`span`,{className:`truncate`,children:[`preview unavailable`,e?` · ${e}`:``]}),(0,q.jsx)(`button`,{type:`button`,onClick:t,className:`ml-auto shrink-0 text-accent`,children:`retry`})]})}var Rt=4/5,X=`text-[var(--img-meta-label)] @max-[470px]:hidden`,zt=`truncate text-text @max-[470px]:text-text-2`,Bt=`h-[30px] @max-[470px]:h-[36px] shrink-0 rounded-[7px] px-[9px] font-mono text-[11.5px] text-text-2 bg-[var(--img-ghost)] border border-[var(--img-ghost-border)] backdrop-blur-[6px] transition-colors can-hover:hover:bg-[var(--img-ghost-hover)] can-hover:hover:border-[var(--img-ghost-hover-border)] can-hover:hover:text-text`;function Vt({filePath:e,projectName:t}){let[n,r]=(0,K.useState)(0),{blobUrl:i,blob:a,error:o,errorCode:s}=we(e,t,void 0,n),[c,l]=(0,K.useState)(()=>ye(e)),[u,d]=(0,K.useState)(!1),[f,p]=(0,K.useState)(!1),m=_e(e=>e.open),{openTab:h}=ce(ge(e=>({openTab:e.openTab}))),g=P(e);(0,K.useEffect)(()=>{if(!f)return;let e=setTimeout(()=>p(!1),1200);return()=>clearTimeout(e)},[f]);let _=t=>{let n={w:t.naturalWidth,h:t.naturalHeight};if(!n.w||!n.h)return d(!0);Se(e,n),l(n)},v=()=>{d(!1),r(e=>e+1)};if(o||u)return(0,q.jsx)(`div`,{className:`border-t border-border pt-1.5`,children:(0,q.jsx)(Lt,{code:u?void 0:s??void 0,onRetry:v})});let y=c?ve(c,132):null,b=y?.aspect??Rt,x=(0,q.jsxs)(`div`,{className:`flex flex-wrap gap-[6px]`,children:[(0,q.jsxs)(`button`,{type:`button`,onClick:S,className:Bt,children:[(0,q.jsx)(`span`,{className:`@max-[470px]:hidden`,children:`open in editor`}),(0,q.jsx)(`span`,{className:`hidden @max-[470px]:inline`,children:`open`})]}),(0,q.jsx)(`button`,{type:`button`,onClick:C,className:Bt,children:f?`copied`:`copy path`}),(0,q.jsx)(`button`,{type:`button`,onClick:w,className:Bt,children:`full size`})]});function S(){t&&h({type:`editor`,title:g,metadata:{filePath:e,projectName:t},projectId:t,closable:!0})}function C(){fe(e).then(()=>p(!0))}function w(e){i&&m(i,g,Te(e.currentTarget))}if(!i||!y||!c)return(0,q.jsxs)(`div`,{className:`@container border-t border-border pt-1.5`,children:[i&&(0,q.jsx)(`img`,{src:i,alt:``,className:`hidden`,onLoad:e=>_(e.currentTarget),onError:()=>d(!0)}),(0,q.jsx)(It,{aspect:b,actions:x})]});let T=(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`dt`,{className:X,children:`dimensions`}),(0,q.jsx)(`dd`,{className:zt,children:be(c,y.fit)}),a&&(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`dt`,{className:X,children:`size`}),(0,q.jsxs)(`dd`,{className:zt,children:[xe(a.size),a.type?` · ${a.type}`:``]})]}),(0,q.jsx)(`dt`,{className:X,children:`path`}),(0,q.jsx)(`dd`,{dir:`rtl`,className:`${zt} text-left`,children:e})]}),E=(0,q.jsx)(`img`,{src:i,alt:g,[Ee]:``,onLoad:e=>_(e.currentTarget),onError:()=>d(!0),className:y.fit===`cover`?`size-full object-cover`:y.fit===`contain`?`size-full object-contain`:`max-h-full max-w-full`});return(0,q.jsx)(`div`,{className:`@container border-t border-border pt-1.5`,children:(0,q.jsxs)(`div`,{className:`relative overflow-hidden rounded-lg border border-border p-[14px] @max-[470px]:p-[11px]`,children:[(0,q.jsx)(`img`,{"aria-hidden":`true`,alt:``,src:i,className:`absolute inset-0 size-full object-cover`,style:{filter:`var(--img-backdrop)`,transform:`scale(1.3)`}}),(0,q.jsx)(`div`,{className:`absolute inset-0`,style:{background:`var(--img-veil)`}}),y.variant===`band`?(0,q.jsxs)(`div`,{className:`relative grid gap-[11px]`,children:[(0,q.jsx)(`button`,{type:`button`,onClick:w,title:`Open ${g}`,className:`img-checkerboard w-full cursor-zoom-in overflow-hidden rounded-lg border border-[var(--img-plate-border)]`,style:{aspectRatio:y.aspect},children:E}),(0,q.jsx)(`dl`,{className:`grid grid-cols-[auto_auto_1fr] gap-x-[18px] font-mono text-[11.5px] [&_dt]:hidden`,children:T}),x]}):(0,q.jsxs)(`div`,{className:`relative grid grid-cols-[132px_1fr] items-start gap-[14px] @max-[470px]:grid-cols-[64px_1fr] @max-[470px]:gap-[11px]`,children:[(0,q.jsx)(`button`,{type:`button`,onClick:w,title:`Open ${g}`,className:`cursor-zoom-in overflow-hidden rounded-lg border border-[var(--img-plate-border)] bg-[var(--img-plate)] shadow-[var(--img-plate-shadow)] ${y.fit===`cover`?``:`img-checkerboard flex items-center justify-center`}`,style:{aspectRatio:y.aspect},children:E}),(0,q.jsxs)(`div`,{className:`flex min-w-0 flex-col gap-[9px]`,children:[(0,q.jsx)(`p`,{className:`truncate text-[13px] font-semibold text-text @max-[470px]:hidden`,children:g}),(0,q.jsx)(`dl`,{className:`grid grid-cols-[auto_1fr] gap-x-[14px] gap-y-[4px] font-mono text-[11.5px] @max-[470px]:grid-cols-[1fr]`,children:T}),x]})]})]})})}var Ht=/^(\/|[A-Za-z]:[/\\])/;function Ut(e,t,n){if(e.type!==`editor`)return!1;let r=e.metadata??{};return r.viewerKey||r.isUntitled||r.inlineContent!=null||r.filePath!==t?!1:Ht.test(t)||r.projectName===n}function Wt(e){let{grid:t,panels:n,focusedPanelId:r,sessionId:i}=e,a=t.flat().filter(e=>n[e]);if(a.length===0)return null;let o=a.find(e=>n[e].tabs.some(e=>oe(e)===i))??null,s=Gt(a,o,e);if(e.mobile)return s?{kind:`focus`,...s}:{kind:`open`,panelId:a[0],split:!1};if(o===null)return s?{kind:`focus`,...s}:{kind:`open`,panelId:a.includes(r)?r:a[0],split:!1};let c=n[o],l=c.tabs.some(e=>e.id===c.activeTabId&&oe(e)===i),u=Kt(t,o,r,a);return s?s.panelId!==o||!l?{kind:`focus`,...s}:{kind:`move`,tabId:s.tabId,fromPanelId:o,toPanelId:u}:u?{kind:`open`,panelId:u,split:!1}:{kind:`open`,panelId:o,split:!0}}function Gt(e,t,n){let r=[...e.filter(e=>e!==t),...t?[t]:[]];for(let e of r){let t=n.panels[e].tabs.find(n.isTarget);if(t)return{tabId:t.id,panelId:e}}return null}function Kt(e,t,n,r){if(n!==t&&r.includes(n))return n;let i=e.find(e=>e.includes(t))??[],a=i.indexOf(t);return[...i.slice(a+1),...i.slice(0,a).reverse(),...e.filter(e=>e!==i).flat()].find(e=>e!==t&&r.includes(e))??null}var qt=12e3,Jt=1500,Yt=e=>e instanceof Error?e.message:String(e);function Xt(e){if(!e||L.getState().currentProject===e)return;let t=se.getState().projects.find(t=>t.name===e);t&&(se.getState().setActiveProject(t),L.getState().switchProject(e))}function Zt(e,t){Xt(e.projectName);let n=L.getState(),r=Wt({grid:n.grid,panels:n.panels,focusedPanelId:n.focusedPanelId,mobile:n.isMobile(),sessionId:e.sessionId,isTarget:t});if(!r)throw Error(`PPM has no panel to open the tab in`);return r}function Qt(e){let t=L.getState(),n=e.kind===`focus`?e.panelId:e.fromPanelId;e.kind===`focus`?t.setActiveTab(e.tabId,e.panelId):e.toPanelId?t.moveTab(e.tabId,n,e.toPanelId):t.splitPanel(`right`,e.tabId,n)||t.setActiveTab(e.tabId,n)}function $t(e,t){let n=Zt(t,t=>Ut(t,e.filePath,e.projectName)),r=L.getState(),i=Date.now(),a=e.line?`code`:e.tool===`open_preview`?`preview`:void 0,o={...e.line?{lineNumber:e.line,endLine:void 0,revealAt:i}:{},...a?{aiView:a,aiOpenAt:i}:{}};if(n.kind===`open`){let t={filePath:e.filePath,...e.projectName?{projectName:e.projectName}:{},...o},i=De(e.projectName??void 0,e.filePath),a=Oe(i),s=r.openTab({type:`editor`,title:P(e.filePath),projectId:e.projectName,metadata:t,closable:!0},n.panelId);if(!s)throw Error(`PPM could not open the tab`);return n.split&&r.splitPanel(`right`,s,n.panelId),{tabId:s,previewKey:i,before:a}}let s=n.kind===`focus`?n.panelId:n.fromPanelId,c={...r.panels[s]?.tabs.find(e=>e.id===n.tabId)?.metadata,...o},l=De(c.projectName,String(c.filePath??e.filePath)),u=Oe(l);return r.updateTab(n.tabId,{metadata:c}),Qt(n),{tabId:n.tabId,previewKey:l,before:u}}function en(e,t){let n=Zt(t,()=>!1);if(n.kind!==`open`)throw Error(`PPM has no panel to open the tab in`);let r=L.getState(),i=F(Object.values(r.panels).flatMap(e=>e.tabs)),a={kind:`connection`,connectionId:e.connectionId,...e.database?{database:e.database}:{}},o=r.openTab({type:`db-query`,title:`Query ${i}`,projectId:null,closable:!0,metadata:{...re(a),connectionName:e.connectionName,dbType:e.dbType,...e.connectionColor?{connectionColor:e.connectionColor}:{},...ie(e.sql,i)}},n.panelId);if(!o)throw Error(`PPM could not open the tab`);return n.split&&r.splitPanel(`right`,o,n.panelId),o}function tn(e=window.location.hostname){return e===`localhost`||e===`[::1]`||/^127(?:\.\d{1,3}){3}$/.test(e)}function nn(e,t){if(e.via===`local`&&!tn())throw Error(`this device is not the machine PPM runs on, so it cannot reach localhost:${e.port}`);let n=Zt(t,t=>t.type===`web-preview`&&t.metadata?.url===e.url),r=L.getState(),i={url:e.url,port:e.port,via:e.via,aiOpenAt:Date.now()};if(n.kind===`open`){let t=r.openTab({type:`web-preview`,title:me(e.port,e.url),projectId:null,closable:!0,metadata:i},n.panelId);if(!t)throw Error(`PPM could not open the tab`);return n.split&&r.splitPanel(`right`,t,n.panelId),t}return r.updateTab(n.tabId,{metadata:i}),Qt(n),n.tabId}function rn(e,t){Xt(t.projectName);let n=L.getState().openInDock({type:`terminal`,title:P(e.cwd)||e.cwd,projectId:e.projectName,closable:!0,metadata:{sessionId:e.terminalId,cwd:e.cwd,...e.projectName?{projectName:e.projectName}:{}}});try{localStorage.setItem(`ppm:terminal-session:${n}`,e.terminalId)}catch{}return n}async function an(e,t,n){let r=t=>{let r={type:`tab_open_result`,requestId:e.requestId,...t};n(JSON.stringify(r))};if(e.tool===`open_query`||e.tool===`open_url`||e.tool===`run_in_terminal`){try{e.tool===`open_query`?en(e.query,t):e.tool===`open_url`?nn(e,t):rn(e,t),r({opened:!0})}catch(e){r({opened:!1,error:Yt(e)})}return}let i;try{i=$t({tool:e.tool,filePath:e.filePath,projectName:e.projectName,line:e.line},t)}catch(e){r({opened:!1,error:Yt(e)});return}if(!e.check){r({opened:!0});return}try{let t=await ke(i.previewKey,i.before,qt);if(!t){r({opened:!0,error:`the page did not start loading`});return}await new Promise(e=>setTimeout(e,Jt));let n=L.getState().isMobile()?`Phone`:`Desktop`;r({opened:!0,report:await t.check({screenshot:e.check.screenshot,frame:n})})}catch(e){r({opened:!0,error:Yt(e)})}}async function on(e,t){let n=t?se.getState().projects.find(e=>e.name===t)?.path:void 0,r=e.path.trim(),i=/^(\/|[a-z]:[/\\]|~(?:[/\\]|$))/i.test(r);if(!i&&!n)throw Error(`this chat has no project folder`);let a=await pe.stat(i?r:ue(n,r));if(a.kind===`directory`)throw Error(`${r} is a folder`);let o=n?le(n,a.path):null;return o?{tool:e.tool,filePath:o,projectName:t,line:e.line}:{tool:e.tool,filePath:a.path,projectName:null,line:e.line}}var sn=RegExp(`^(?:mcp__${Pe}__|${Ve}:)(${Ae}|${Re})$`),cn=RegExp(`^(?:mcp__${Pe}__|${Ve}:)(${Fe}|${Me}|${je})$`),ln=/^\[image(?: [^\]\s]+)?\]$/,Z=e=>!!e&&typeof e==`object`&&!Array.isArray(e);function un(e,t){let n=sn.exec(e)?.[1];if(!n||!Z(t))return null;let r=`arguments`in t?t.arguments:t;if(!Z(r)||typeof r.path!=`string`||!r.path.trim())return null;let i=r.line,a=n===`open_file`&&typeof i==`number`&&Number.isInteger(i)&&i>=1&&i<=1e7;return{tool:n,path:r.path,...a?{line:i}:{}}}function dn(e){return cn.exec(e)?.[1]??null}function fn(e,t){let n=dn(e);if(!n||!Z(t))return null;let r=`arguments`in t&&Z(t.arguments)?t.arguments:t,i=e=>typeof e==`string`&&e.trim()?e:void 0;if(n===`open_url`){let e=i(r.url);return e?{tool:n,url:e}:null}if(n===`run_in_terminal`){let e=i(r.command),t=i(r.cwd);return e?{tool:n,command:e,...t?{cwd:t}:{}}:null}let a=i(r.terminal),o=typeof r.lines==`number`&&Number.isInteger(r.lines)&&r.lines>0?r.lines:void 0;return{tool:Me,...a?{terminal:a}:{},...o?{lines:o}:{}}}function pn(e){let t=()=>e.split(`
4
4
  `).filter(e=>!ln.test(e)).join(`
5
5
  `).trimEnd();if(!e.startsWith(`[`))return t();try{let n=JSON.parse(e);return Array.isArray(n)?n.filter(e=>Z(e)&&e.type===`text`&&typeof e.text==`string`).map(e=>e.text).filter(e=>!At(e)).join(`
@@ -1 +1 @@
1
- import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import{k as r}from"./api-client-xQDlhUTu.js";import"./chat-preparation-cache-190LLyy7.js";import"./button-C9ZXWb3b.js";import"./design-canvas-check-BIHc2d_k.js";import{a as i,f as a,g as o,h as s,m as c,p as l}from"./db-ai-tools-CVbbW_MZ.js";import{a as u,b as d}from"./api-settings-vmIRFNwZ.js";import{n as f,r as p}from"./settings-rows-BRoYE2To.js";var m=e(t(),1),h=[s,o];[...[a,l,c,...h],...i];var g=[a,l];function _(e,t){let n=e.ppm_tools?.[t];return typeof n==`boolean`?n:g.includes(t)?e.tab_tools===!0:!0}var v=n(),y=e=>e instanceof Error?e.message:String(e),b={open_file:{label:`Open files`,note:`Opens a file in a PPM tab, at a line when it points you at one.`},open_preview:{label:`Show pages`,note:`Opens a page, chart or report it made in a PPM tab, and reads back its errors and a screenshot. While on, Claude's claude.ai Artifact tool is off.`},open_url:{label:`Show running apps`,note:`Opens a web server running on this machine, such as a dev server, in a PPM tab. On another device it goes through a private Tailscale forward; it never makes a public link.`},read_terminal:{label:`Read terminals`,note:`Reads what the terminals of the chat's project printed, so you need not paste an error into the chat.`},run_in_terminal:{label:`Type commands`,note:`Opens a terminal with a command typed in, for one that needs your password or your eyes. Nothing runs until you press Enter.`},db_query:{label:`Read databases`,note:`Runs read-only SQL. It cannot change anything.`},open_query:{label:`Open Query tabs`,note:`Opens a Query tab holding a script it wrote. You press Run.`},db_execute:{label:`Change databases`,note:`Runs a change only after you approve it with PPM's password, once, in one transaction.`}},x=[{title:`Tabs`,intro:`On the device you are chatting from.`,tools:[`open_file`,`open_preview`,`open_url`]},{title:`Terminal`,intro:`PPM's own terminals, on the machine PPM runs on.`,tools:h},{title:`Database`,intro:`On the connections with “Available to the AI chat” on. The AI never sees their passwords.`,tools:i}];function S(){let[e,t]=(0,m.useState)(null),[n,i]=(0,m.useState)(null),a=(0,m.useCallback)(async()=>{try{t(await u()),i(null)}catch(e){i(y(e))}},[]);(0,m.useEffect)(()=>{a()},[a]);let o=(0,m.useCallback)(async(e,n)=>{t(t=>t&&{...t,ppm_tools:{...t.ppm_tools,[e]:n}});try{t(await d({ppm_tools:{[e]:n}}))}catch(e){r.error(`Could not save`,{description:y(e)}),await a()}},[a]);return e?(0,v.jsxs)(`div`,{className:`space-y-6`,children:[(0,v.jsx)(`p`,{className:`text-xs leading-relaxed text-muted-foreground`,children:`PPM's own tools for the AI chat, with Claude and Codex alike. New chats get the tools that are on; turning one off also stops it in chats already open.`}),x.map(t=>(0,v.jsxs)(`section`,{className:`space-y-3`,children:[(0,v.jsx)(f,{title:t.title,children:t.intro}),(0,v.jsx)(`div`,{className:`divide-y divide-border rounded-lg border border-border`,children:t.tools.map(t=>(0,v.jsx)(p,{label:(0,v.jsxs)(v.Fragment,{children:[b[t].label,(0,v.jsx)(`code`,{className:`ml-2 font-mono text-[11px] text-muted-foreground`,children:t})]}),note:b[t].note,checked:_(e,t),onChange:e=>void o(t,e)},t))})]},t.title))]}):(0,v.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:n??`Loading…`})}export{S as ToolsSettingsSection};
1
+ import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import{k as r}from"./api-client-xQDlhUTu.js";import"./chat-preparation-cache-190LLyy7.js";import"./button-C9ZXWb3b.js";import"./design-canvas-check-BIHc2d_k.js";import{a as i,f as a,g as o,h as s,m as c,p as l}from"./db-ai-tools-CVbbW_MZ.js";import{a as u,b as d}from"./api-settings-vmIRFNwZ.js";import{n as f,r as p}from"./settings-rows-D02_4sDY.js";var m=e(t(),1),h=[s,o];[...[a,l,c,...h],...i];var g=[a,l];function _(e,t){let n=e.ppm_tools?.[t];return typeof n==`boolean`?n:g.includes(t)?e.tab_tools===!0:!0}var v=n(),y=e=>e instanceof Error?e.message:String(e),b={open_file:{label:`Open files`,note:`Opens a file in a PPM tab, at a line when it points you at one.`},open_preview:{label:`Show pages`,note:`Opens a page, chart or report it made in a PPM tab, and reads back its errors and a screenshot. While on, Claude's claude.ai Artifact tool is off.`},open_url:{label:`Show running apps`,note:`Opens a web server running on this machine, such as a dev server, in a PPM tab. On another device it goes through a private Tailscale forward; it never makes a public link.`},read_terminal:{label:`Read terminals`,note:`Reads what the terminals of the chat's project printed, so you need not paste an error into the chat.`},run_in_terminal:{label:`Type commands`,note:`Opens a terminal with a command typed in, for one that needs your password or your eyes. Nothing runs until you press Enter.`},db_query:{label:`Read databases`,note:`Runs read-only SQL. It cannot change anything.`},open_query:{label:`Open Query tabs`,note:`Opens a Query tab holding a script it wrote. You press Run.`},db_execute:{label:`Change databases`,note:`Runs a change only after you approve it with PPM's password, once, in one transaction.`}},x=[{title:`Tabs`,intro:`On the device you are chatting from.`,tools:[`open_file`,`open_preview`,`open_url`]},{title:`Terminal`,intro:`PPM's own terminals, on the machine PPM runs on.`,tools:h},{title:`Database`,intro:`On the connections with “Available to the AI chat” on. The AI never sees their passwords.`,tools:i}];function S(){let[e,t]=(0,m.useState)(null),[n,i]=(0,m.useState)(null),a=(0,m.useCallback)(async()=>{try{t(await u()),i(null)}catch(e){i(y(e))}},[]);(0,m.useEffect)(()=>{a()},[a]);let o=(0,m.useCallback)(async(e,n)=>{t(t=>t&&{...t,ppm_tools:{...t.ppm_tools,[e]:n}});try{t(await d({ppm_tools:{[e]:n}}))}catch(e){r.error(`Could not save`,{description:y(e)}),await a()}},[a]);return e?(0,v.jsxs)(`div`,{className:`space-y-6`,children:[(0,v.jsx)(`p`,{className:`text-xs leading-relaxed text-muted-foreground`,children:`PPM's own tools for the AI chat, with Claude and Codex alike. New chats get the tools that are on; turning one off also stops it in chats already open.`}),x.map(t=>(0,v.jsxs)(`section`,{className:`space-y-3`,children:[(0,v.jsx)(f,{title:t.title,children:t.intro}),(0,v.jsx)(`div`,{className:`divide-y divide-border rounded-lg border border-border`,children:t.tools.map(t=>(0,v.jsx)(p,{label:(0,v.jsxs)(v.Fragment,{children:[b[t].label,(0,v.jsx)(`code`,{className:`ml-2 font-mono text-[11px] text-muted-foreground`,children:t})]}),note:b[t].note,checked:_(e,t),onChange:e=>void o(t,e)},t))})]},t.title))]}):(0,v.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:n??`Loading…`})}export{S as ToolsSettingsSection};
@@ -1,4 +1,4 @@
1
- import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t}from"./vendor-markdown-C-P1aR4p.js";import{k as n,r}from"./api-client-xQDlhUTu.js";import{i}from"./project-store-BLGl9IAO.js";import{r as a}from"./clipboard-D-VCry-F.js";import{_r as o,br as s,ii as c,vr as l,yr as u}from"./index-BpgSIM5B.js";var d=[`ppm.blame.copySha`,`ppm.blame.fileHistory`,`ppm.blame.blameFile`,`ppm.blame.showInGraph`],f=7;function p(e){return e.replace(/[\\`*_{}[\]()#+\-!<>]/g,e=>`\\${e}`)}function m(e){let t=e.trim().split(/\s+/).filter(Boolean);return t.length===0?`?`:(t[0][0]+(t.length>1?t[t.length-1][0]:``)).toUpperCase()}var h=[`4E79A7`,`F28E2B`,`E15759`,`76B7B2`,`59A14F`,`AF7AA1`,`9C755F`,`B07AA1`];function g(e){let t=0;for(let n=0;n<e.length;n++)t=t*31+e.charCodeAt(n)|0;return h[Math.abs(t)%h.length]}function _(e){let t=`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><circle cx="8" cy="8" r="8" fill="#${g(e)}"/><text x="8" y="11.5" font-family="sans-serif" font-size="7" font-weight="700" fill="#ffffff" text-anchor="middle">${v(m(e))}</text></svg>`;return`data:image/svg+xml;charset=utf-8,${encodeURIComponent(t)}`}function v(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}function y(e,t){return`command:${e}?${encodeURIComponent(JSON.stringify(t))}`}function b(e){let{commit:t,detail:n,filePath:r,projectPath:i,now:a=Date.now()}=e;if(s(t.hash))return null;let c=t.author||`Unknown`,l=t.hash.slice(0,f),m=[],h=t.authorTime>0?`${u(t.authorTime*1e3,a)} (${o(t.authorTime*1e3)})`:``;m.push(`![](${_(c)}) **${p(c)}**${h?` &nbsp;$(history) ${p(h)}`:``}`);let g=n?.message||t.summary;g&&(m.push(``),m.push(p(g).split(`
1
+ import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t}from"./vendor-markdown-C-P1aR4p.js";import{k as n,r}from"./api-client-xQDlhUTu.js";import{i}from"./project-store-BLGl9IAO.js";import{r as a}from"./clipboard-D-VCry-F.js";import{_r as o,br as s,ii as c,vr as l,yr as u}from"./index-BtAn_krv.js";var d=[`ppm.blame.copySha`,`ppm.blame.fileHistory`,`ppm.blame.blameFile`,`ppm.blame.showInGraph`],f=7;function p(e){return e.replace(/[\\`*_{}[\]()#+\-!<>]/g,e=>`\\${e}`)}function m(e){let t=e.trim().split(/\s+/).filter(Boolean);return t.length===0?`?`:(t[0][0]+(t.length>1?t[t.length-1][0]:``)).toUpperCase()}var h=[`4E79A7`,`F28E2B`,`E15759`,`76B7B2`,`59A14F`,`AF7AA1`,`9C755F`,`B07AA1`];function g(e){let t=0;for(let n=0;n<e.length;n++)t=t*31+e.charCodeAt(n)|0;return h[Math.abs(t)%h.length]}function _(e){let t=`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><circle cx="8" cy="8" r="8" fill="#${g(e)}"/><text x="8" y="11.5" font-family="sans-serif" font-size="7" font-weight="700" fill="#ffffff" text-anchor="middle">${v(m(e))}</text></svg>`;return`data:image/svg+xml;charset=utf-8,${encodeURIComponent(t)}`}function v(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}function y(e,t){return`command:${e}?${encodeURIComponent(JSON.stringify(t))}`}function b(e){let{commit:t,detail:n,filePath:r,projectPath:i,now:a=Date.now()}=e;if(s(t.hash))return null;let c=t.author||`Unknown`,l=t.hash.slice(0,f),m=[],h=t.authorTime>0?`${u(t.authorTime*1e3,a)} (${o(t.authorTime*1e3)})`:``;m.push(`![](${_(c)}) **${p(c)}**${h?` &nbsp;$(history) ${p(h)}`:``}`);let g=n?.message||t.summary;g&&(m.push(``),m.push(p(g).split(`
2
2
  `).join(`
3
3
  `)));let v=[``,`---`,``],b=[`[$(git-commit) ${l}](${y(`ppm.blame.copySha`,[t.hash])} "Copy commit hash")`];i&&b.push(`[$(history) File History](${y(`ppm.blame.fileHistory`,[i,r])} "Open the file's history")`,`[$(users) Blame](${y(`ppm.blame.blameFile`,[i,r])} "Open the blame view")`,`[$(git-branch) Graph](${y(`ppm.blame.showInGraph`,[i])} "Open the commit graph")`),m.push(...v),m.push(b.join(` &nbsp; `));let x=[...(n?.removed??[]).map(e=>`-${e}`),...(n?.added??[]).map(e=>`+${e}`)];if(x.length>0){m.push(...v),m.push("```diff"),m.push(...x),m.push("```"),m.push(``);let e=(n?.removed.length??0)===0?`added in`:`in`;m.push(`Changes ${e} \`${l}\``)}return{value:m.join(`
4
4
  `),isTrusted:{enabledCommands:[...d]},supportThemeIcons:!0}}var x=!1;function S(e,t){window.dispatchEvent(new CustomEvent(`ext:command:execute`,{detail:{command:e,args:t}}))}function C(e){return typeof e==`string`&&/^[0-9a-f]{7,40}$/.test(e)?e:null}function w(e){return typeof e==`string`&&e.length>0?e:null}function T(e,t,n){let r=w(t),i=w(n);!r||!i||S(e,[r,i])}function E(e){x||(x=!0,e.editor.registerCommand(`ppm.blame.copySha`,(e,t)=>{let r=C(t);r&&a(r).then(e=>{n[e?`success`:`error`](e?`Copied ${r.slice(0,7)}`:`Could not copy`)})}),e.editor.registerCommand(`ppm.blame.fileHistory`,(e,t,n)=>{T(`git-graph.fileHistory`,t,n)}),e.editor.registerCommand(`ppm.blame.blameFile`,(e,t,n)=>{T(`git-graph.blame`,t,n)}),e.editor.registerCommand(`ppm.blame.showInGraph`,(e,t)=>{let n=w(t);n&&S(`git-graph.view`,[n])}))}var D=`diff`,O=!1;function k(e){if(!O){if(e.languages.getLanguages().some(e=>e.id===`diff`)){O=!0;return}e.languages.register({id:D,aliases:[`Diff`,`patch`],extensions:[`.diff`,`.patch`]}),e.languages.setMonarchTokensProvider(D,{tokenizer:{root:[[/^diff .*$/,`meta.diff.header`],[/^(index|similarity index|rename from|rename to|new file mode|deleted file mode|old mode|new mode) .*$/,`meta.diff.header`],[/^(\+\+\+|---) .*$/,`meta.diff.header`],[/^@@.*$/,`meta.diff.range`],[/^\+.*$/,`inserted`],[/^-.*$/,`deleted`],[/^\\ .*$/,`meta.diff.header`],[/^.*$/,``]]}}),O=!0}}var A=e(t(),1),j=`inline-blame-styles`,M=`
@@ -1,4 +1,4 @@
1
- import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import{o as n,r}from"./api-client-xQDlhUTu.js";import"./ws-auth-CbF6GqxP.js";import{mt as i}from"./index-BpgSIM5B.js";import{i as a,r as o,t as s}from"./lsp-client-Ds3U2O52.js";var c=e(t(),1),l=new Map;function u(e,t){l.set(e.uri.toString(),t)}function ee(e){l.delete(e.uri.toString())}function d(e){return l.get(e.uri.toString())}function f(e){if(!e.startsWith(`file:`))return null;let t=e.slice(5),n=``;if(t.startsWith(`//`)){t=t.slice(2);let e=t.indexOf(`/`);n=e<0?t:t.slice(0,e),t=e<0?``:t.slice(e)}let r=t.split(`/`).map(p).join(`/`);return/^\/[A-Za-z]:/.test(r)?r.slice(1):n?`//${p(n)}${r}`:r}function p(e){try{return decodeURIComponent(e)}catch{return e}}var m=40,h=500,g=3,_=6,v=new Map,y=new Map;function te(e){return(y.get(e)??0)>=g}function b(e){x(e,(y.get(e)??0)+1)}function ne(e){x(e,g)}function x(e,t){for(y.delete(e),y.set(e,t);y.size>h;){let e=y.keys().next().value;if(e===void 0)return;y.delete(e)}}function re(e){y.delete(e)}async function S(e,t,n){let r=0,i=Array.from({length:Math.min(t,e.length)},async()=>{for(;;){let t=r++;if(t>=e.length)return;await n(e[t])}});await Promise.all(i)}function C(e,t){let n=e.replace(/\\/g,`/`).replace(/\/+$/,``),r=t.replace(/\\/g,`/`),i=n+`/`,a=/^[A-Za-z]:\//.test(i),o=r.slice(0,i.length);return(a?o.toLowerCase()!==i.toLowerCase():o!==i)?null:r.slice(i.length)}async function w(e,t,i,a){if(!i)return;let o=new Set,s=[...new Set(a)].filter(t=>{if(te(t))return!1;let n=v.get(t);return n&&(v.delete(t),!n.isDisposed())?(v.set(t,n),o.add(t),!1):t.startsWith(`file:`)&&!e.editor.getModel(e.Uri.parse(t))});s.length!==0&&(await S(s,_,async a=>{try{let s=f(a),c=s?C(i,s):null;if(!c){ne(a);return}let l=(await r.get(`${n(t)}/files/read?path=${encodeURIComponent(c)}`))?.content;if(typeof l!=`string`){b(a);return}re(a);let u=e.Uri.parse(a);if(e.editor.getModel(u)){o.add(a);return}v.set(a,e.editor.createModel(l,void 0,u)),o.add(a)}catch{b(a)}}),T(o))}function T(e){for(let t of[...v.keys()]){if(v.size<=m)return;if(e.has(t))continue;let n=v.get(t);v.delete(t);try{n?.dispose()}catch{}}}function E(){for(let e of v.values())try{e.dispose()}catch{}v.clear(),y.clear()}function D(e){if(!e)return;let t=new AbortController;return e.isCancellationRequested?t.abort():e.onCancellationRequested(()=>t.abort()),t.signal}function O(e){return{line:e.lineNumber-1,character:e.column-1}}function ie(e){return{lineNumber:e.line+1,column:e.character+1}}function k(e){return{start:{line:e.startLineNumber-1,character:e.startColumn-1},end:{line:e.endLineNumber-1,character:e.endColumn-1}}}function A(e){return{startLineNumber:e.start.line+1,startColumn:e.start.character+1,endLineNumber:e.end.line+1,endColumn:e.end.character+1}}var ae={1:`Text`,2:`Method`,3:`Function`,4:`Constructor`,5:`Field`,6:`Variable`,7:`Class`,8:`Interface`,9:`Module`,10:`Property`,11:`Unit`,12:`Value`,13:`Enum`,14:`Keyword`,15:`Snippet`,16:`Color`,17:`File`,18:`Reference`,19:`Folder`,20:`EnumMember`,21:`Constant`,22:`Struct`,23:`Event`,24:`Operator`,25:`TypeParameter`},oe={1:`File`,2:`Module`,3:`Namespace`,4:`Package`,5:`Class`,6:`Method`,7:`Property`,8:`Field`,9:`Constructor`,10:`Enum`,11:`Interface`,12:`Function`,13:`Variable`,14:`Constant`,15:`String`,16:`Number`,17:`Boolean`,18:`Array`,19:`Object`,20:`Key`,21:`Null`,22:`EnumMember`,23:`Struct`,24:`Event`,25:`Operator`,26:`TypeParameter`},se={1:`Error`,2:`Warning`,3:`Info`,4:`Hint`},ce={1:`Text`,2:`Read`,3:`Write`};function j(e,t){let n=ae[t??0];return e.languages.CompletionItemKind[n??`Text`]}function M(e,t){let n=oe[t??0];return e.languages.SymbolKind[n??`Variable`]}function N(e,t){let n=se[t??0];return e.MarkerSeverity[n??`Warning`]}function P(e,t){let n=ce[t??0];return e.languages.DocumentHighlightKind[n??`Text`]}function F(e){if(e!=null){if(Array.isArray(e)){let t=e.map(F).filter(e=>!!e?.value);return t.length===0?void 0:{value:t.map(e=>e.value).join(`
1
+ import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import{o as n,r}from"./api-client-xQDlhUTu.js";import"./ws-auth-CbF6GqxP.js";import{mt as i}from"./index-BtAn_krv.js";import{i as a,r as o,t as s}from"./lsp-client-CIcphNmU.js";var c=e(t(),1),l=new Map;function u(e,t){l.set(e.uri.toString(),t)}function ee(e){l.delete(e.uri.toString())}function d(e){return l.get(e.uri.toString())}function f(e){if(!e.startsWith(`file:`))return null;let t=e.slice(5),n=``;if(t.startsWith(`//`)){t=t.slice(2);let e=t.indexOf(`/`);n=e<0?t:t.slice(0,e),t=e<0?``:t.slice(e)}let r=t.split(`/`).map(p).join(`/`);return/^\/[A-Za-z]:/.test(r)?r.slice(1):n?`//${p(n)}${r}`:r}function p(e){try{return decodeURIComponent(e)}catch{return e}}var m=40,h=500,g=3,_=6,v=new Map,y=new Map;function te(e){return(y.get(e)??0)>=g}function b(e){x(e,(y.get(e)??0)+1)}function ne(e){x(e,g)}function x(e,t){for(y.delete(e),y.set(e,t);y.size>h;){let e=y.keys().next().value;if(e===void 0)return;y.delete(e)}}function re(e){y.delete(e)}async function S(e,t,n){let r=0,i=Array.from({length:Math.min(t,e.length)},async()=>{for(;;){let t=r++;if(t>=e.length)return;await n(e[t])}});await Promise.all(i)}function C(e,t){let n=e.replace(/\\/g,`/`).replace(/\/+$/,``),r=t.replace(/\\/g,`/`),i=n+`/`,a=/^[A-Za-z]:\//.test(i),o=r.slice(0,i.length);return(a?o.toLowerCase()!==i.toLowerCase():o!==i)?null:r.slice(i.length)}async function w(e,t,i,a){if(!i)return;let o=new Set,s=[...new Set(a)].filter(t=>{if(te(t))return!1;let n=v.get(t);return n&&(v.delete(t),!n.isDisposed())?(v.set(t,n),o.add(t),!1):t.startsWith(`file:`)&&!e.editor.getModel(e.Uri.parse(t))});s.length!==0&&(await S(s,_,async a=>{try{let s=f(a),c=s?C(i,s):null;if(!c){ne(a);return}let l=(await r.get(`${n(t)}/files/read?path=${encodeURIComponent(c)}`))?.content;if(typeof l!=`string`){b(a);return}re(a);let u=e.Uri.parse(a);if(e.editor.getModel(u)){o.add(a);return}v.set(a,e.editor.createModel(l,void 0,u)),o.add(a)}catch{b(a)}}),T(o))}function T(e){for(let t of[...v.keys()]){if(v.size<=m)return;if(e.has(t))continue;let n=v.get(t);v.delete(t);try{n?.dispose()}catch{}}}function E(){for(let e of v.values())try{e.dispose()}catch{}v.clear(),y.clear()}function D(e){if(!e)return;let t=new AbortController;return e.isCancellationRequested?t.abort():e.onCancellationRequested(()=>t.abort()),t.signal}function O(e){return{line:e.lineNumber-1,character:e.column-1}}function ie(e){return{lineNumber:e.line+1,column:e.character+1}}function k(e){return{start:{line:e.startLineNumber-1,character:e.startColumn-1},end:{line:e.endLineNumber-1,character:e.endColumn-1}}}function A(e){return{startLineNumber:e.start.line+1,startColumn:e.start.character+1,endLineNumber:e.end.line+1,endColumn:e.end.character+1}}var ae={1:`Text`,2:`Method`,3:`Function`,4:`Constructor`,5:`Field`,6:`Variable`,7:`Class`,8:`Interface`,9:`Module`,10:`Property`,11:`Unit`,12:`Value`,13:`Enum`,14:`Keyword`,15:`Snippet`,16:`Color`,17:`File`,18:`Reference`,19:`Folder`,20:`EnumMember`,21:`Constant`,22:`Struct`,23:`Event`,24:`Operator`,25:`TypeParameter`},oe={1:`File`,2:`Module`,3:`Namespace`,4:`Package`,5:`Class`,6:`Method`,7:`Property`,8:`Field`,9:`Constructor`,10:`Enum`,11:`Interface`,12:`Function`,13:`Variable`,14:`Constant`,15:`String`,16:`Number`,17:`Boolean`,18:`Array`,19:`Object`,20:`Key`,21:`Null`,22:`EnumMember`,23:`Struct`,24:`Event`,25:`Operator`,26:`TypeParameter`},se={1:`Error`,2:`Warning`,3:`Info`,4:`Hint`},ce={1:`Text`,2:`Read`,3:`Write`};function j(e,t){let n=ae[t??0];return e.languages.CompletionItemKind[n??`Text`]}function M(e,t){let n=oe[t??0];return e.languages.SymbolKind[n??`Variable`]}function N(e,t){let n=se[t??0];return e.MarkerSeverity[n??`Warning`]}function P(e,t){let n=ce[t??0];return e.languages.DocumentHighlightKind[n??`Text`]}function F(e){if(e!=null){if(Array.isArray(e)){let t=e.map(F).filter(e=>!!e?.value);return t.length===0?void 0:{value:t.map(e=>e.value).join(`
2
2
 
3
3
  ---
4
4
 
@@ -1 +1 @@
1
- import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t}from"./vendor-markdown-C-P1aR4p.js";import{t as n}from"./settings-store-B4mLp19V.js";import{r,t as i}from"./apply-theme-ORrEdHKT.js";import{t as a}from"./resolve-theme-BqoL27BW.js";import{q as o}from"./index-BpgSIM5B.js";var s=e(t(),1);function c(){let e=n(e=>e.themeStyle),t=n(e=>e.themeMode),c=n(e=>e.customThemeId),l=n(e=>e.customThemes),u=()=>o(r()??a(e,t,l,c)),[d,f]=(0,s.useState)(u);return(0,s.useEffect)(()=>{f(u());let e=()=>f(u());return window.addEventListener(i,e),()=>window.removeEventListener(i,e)},[e,t,c,l]),d}export{c as t};
1
+ import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t}from"./vendor-markdown-C-P1aR4p.js";import{t as n}from"./settings-store-B4mLp19V.js";import{r,t as i}from"./apply-theme-ORrEdHKT.js";import{t as a}from"./resolve-theme-BqoL27BW.js";import{q as o}from"./index-BtAn_krv.js";var s=e(t(),1);function c(){let e=n(e=>e.themeStyle),t=n(e=>e.themeMode),c=n(e=>e.customThemeId),l=n(e=>e.customThemes),u=()=>o(r()??a(e,t,l,c)),[d,f]=(0,s.useState)(u);return(0,s.useEffect)(()=>{f(u());let e=()=>f(u());return window.addEventListener(i,e),()=>window.removeEventListener(i,e)},[e,t,c,l]),d}export{c as t};
@@ -1 +1 @@
1
- import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import{a as r,k as i}from"./api-client-xQDlhUTu.js";import{n as a}from"./use-is-mobile-VRV9eZy1.js";import{t as o}from"./button-C9ZXWb3b.js";import{a as s,n as c,o as l,t as u}from"./dialog-Dn_2tuYa.js";import{t as d}from"./mobile-bottom-sheet-DArbIyrD.js";import{Kn as f}from"./index-BpgSIM5B.js";import{r as p}from"./format-bytes-he3TR0bV.js";var m=e(t(),1),h=n();function g({target:e,onConfirm:t,onCancel:n}){let r=a(),[i,g]=(0,m.useState)(!1);if((0,m.useEffect)(()=>{e||g(!1)},[e]),!e)return null;let _=e.kind===`group`,v=_?`End app`:`End process`,y=_?e.group.cpu:e.proc.cpu,b=_?e.group.ramMB:e.proc.ramMB,x=(0,h.jsxs)(`div`,{className:`space-y-4`,"data-testid":`sysmon-kill-confirm`,"data-kill-kind":e.kind,children:[_?(0,h.jsxs)(`p`,{className:`text-sm`,children:[`End `,(0,h.jsx)(`span`,{className:`font-medium`,children:e.group.label}),` and all its`,` `,(0,h.jsx)(`span`,{className:`font-medium`,children:e.members.length}),` processes?`]}):(0,h.jsxs)(`p`,{className:`text-sm`,children:[`End `,(0,h.jsx)(`span`,{className:`font-medium`,children:e.proc.name}),` (pid `,e.proc.pid,`)?`]}),(0,h.jsxs)(`p`,{className:`text-xs text-text-subtle`,children:[`CPU `,y.toFixed(1),`% · RAM `,p(b)]}),!_&&(0,h.jsxs)(`label`,{className:`flex items-center justify-between gap-3 min-h-11 py-1`,children:[(0,h.jsx)(`span`,{className:`text-sm`,children:`Also end child processes`}),(0,h.jsx)(f,{checked:i,onCheckedChange:g,"data-testid":`sysmon-kill-tree`,"aria-label":`Also end child processes`})]}),(0,h.jsxs)(`div`,{className:`flex flex-col-reverse md:flex-row gap-2 md:justify-end pt-2`,children:[(0,h.jsx)(o,{variant:`outline`,onClick:n,"data-testid":`sysmon-kill-confirm-cancel`,className:`min-h-11`,children:`Cancel`}),(0,h.jsx)(o,{variant:`destructive`,autoFocus:!1,onClick:()=>t(e,i),"data-testid":`sysmon-kill-confirm-ok`,className:`min-h-11`,children:_?`End ${e.members.length} processes`:`End process`})]})]});return r?(0,h.jsx)(d,{open:!0,onClose:n,children:(0,h.jsxs)(`div`,{className:`px-4 pb-4`,children:[(0,h.jsx)(`h2`,{className:`text-base font-semibold mb-3`,children:v}),x]})}):(0,h.jsx)(u,{open:!0,onOpenChange:e=>!e&&n(),children:(0,h.jsxs)(c,{children:[(0,h.jsx)(s,{children:(0,h.jsx)(l,{children:v})}),x]})})}function _(e,t){return{pid:e.pid,startedAt:e.startedAt,tree:t}}function v(e,t){let n=e.rootPid===null?void 0:t.find(t=>t.pid===e.rootPid);return n?[_(n,!0)]:t.map(e=>_(e,!1))}function y(e){return e.some(e=>e.protected)}async function b(e){let t=r(),n={"Content-Type":`application/json`,"X-PPM-Request":`1`};t&&(n.Authorization=`Bearer ${t}`);let i=await fetch(`/api/system/resources/kill`,{method:`POST`,headers:n,body:JSON.stringify(e)}),a;try{a=await i.json()}catch{throw Error(i.ok?`Empty response from server`:`Server error (HTTP ${i.status})`)}if(a.ok===!1)throw Error(a.error??`HTTP ${i.status}`);return a.data}function x(e){let[t,n]=(0,m.useState)(null),r=(0,m.useCallback)(t=>{let n=new Map(e.processes.map(e=>[e.pid,e]));return t.pids.map(e=>n.get(e)).filter(e=>!!e)},[e.processes]),a=(0,m.useMemo)(()=>new Map(e.groups.map(e=>[e.key,y(r(e))])),[e.groups,r]),o=(0,m.useCallback)(e=>n({kind:`process`,proc:e}),[]),s=(0,m.useCallback)(e=>n({kind:`group`,group:e,members:r(e)}),[r]),c=(0,m.useCallback)(()=>n(null),[]);return{pendingKill:t,groupProtected:a,requestKillProcess:o,requestKillGroup:s,confirmKill:(0,m.useCallback)(async(e,t)=>{if(n(null),e.kind===`process`){let{proc:n}=e;try{await b(_(n,t)),i.success(`Ended ${n.name} (${n.pid})`)}catch(e){i.error(e instanceof Error?e.message:`Failed to end ${n.name}`)}return}let{group:r,members:a}=e,o=[];for(let e of v(r,a))try{await b(e)}catch(t){o.push(t instanceof Error?t.message:`pid ${e.pid}`)}o.length===0?i.success(`Ended ${r.label} (${a.length} processes)`):i.error(`${r.label}: ${o.length} of ${a.length} could not be ended — ${o[0]}`)},[]),cancelKill:c}}export{y as n,g as r,x as t};
1
+ import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import{a as r,k as i}from"./api-client-xQDlhUTu.js";import{n as a}from"./use-is-mobile-VRV9eZy1.js";import{t as o}from"./button-C9ZXWb3b.js";import{a as s,n as c,o as l,t as u}from"./dialog-Dn_2tuYa.js";import{t as d}from"./mobile-bottom-sheet-DArbIyrD.js";import{Kn as f}from"./index-BtAn_krv.js";import{r as p}from"./format-bytes-he3TR0bV.js";var m=e(t(),1),h=n();function g({target:e,onConfirm:t,onCancel:n}){let r=a(),[i,g]=(0,m.useState)(!1);if((0,m.useEffect)(()=>{e||g(!1)},[e]),!e)return null;let _=e.kind===`group`,v=_?`End app`:`End process`,y=_?e.group.cpu:e.proc.cpu,b=_?e.group.ramMB:e.proc.ramMB,x=(0,h.jsxs)(`div`,{className:`space-y-4`,"data-testid":`sysmon-kill-confirm`,"data-kill-kind":e.kind,children:[_?(0,h.jsxs)(`p`,{className:`text-sm`,children:[`End `,(0,h.jsx)(`span`,{className:`font-medium`,children:e.group.label}),` and all its`,` `,(0,h.jsx)(`span`,{className:`font-medium`,children:e.members.length}),` processes?`]}):(0,h.jsxs)(`p`,{className:`text-sm`,children:[`End `,(0,h.jsx)(`span`,{className:`font-medium`,children:e.proc.name}),` (pid `,e.proc.pid,`)?`]}),(0,h.jsxs)(`p`,{className:`text-xs text-text-subtle`,children:[`CPU `,y.toFixed(1),`% · RAM `,p(b)]}),!_&&(0,h.jsxs)(`label`,{className:`flex items-center justify-between gap-3 min-h-11 py-1`,children:[(0,h.jsx)(`span`,{className:`text-sm`,children:`Also end child processes`}),(0,h.jsx)(f,{checked:i,onCheckedChange:g,"data-testid":`sysmon-kill-tree`,"aria-label":`Also end child processes`})]}),(0,h.jsxs)(`div`,{className:`flex flex-col-reverse md:flex-row gap-2 md:justify-end pt-2`,children:[(0,h.jsx)(o,{variant:`outline`,onClick:n,"data-testid":`sysmon-kill-confirm-cancel`,className:`min-h-11`,children:`Cancel`}),(0,h.jsx)(o,{variant:`destructive`,autoFocus:!1,onClick:()=>t(e,i),"data-testid":`sysmon-kill-confirm-ok`,className:`min-h-11`,children:_?`End ${e.members.length} processes`:`End process`})]})]});return r?(0,h.jsx)(d,{open:!0,onClose:n,children:(0,h.jsxs)(`div`,{className:`px-4 pb-4`,children:[(0,h.jsx)(`h2`,{className:`text-base font-semibold mb-3`,children:v}),x]})}):(0,h.jsx)(u,{open:!0,onOpenChange:e=>!e&&n(),children:(0,h.jsxs)(c,{children:[(0,h.jsx)(s,{children:(0,h.jsx)(l,{children:v})}),x]})})}function _(e,t){return{pid:e.pid,startedAt:e.startedAt,tree:t}}function v(e,t){let n=e.rootPid===null?void 0:t.find(t=>t.pid===e.rootPid);return n?[_(n,!0)]:t.map(e=>_(e,!1))}function y(e){return e.some(e=>e.protected)}async function b(e){let t=r(),n={"Content-Type":`application/json`,"X-PPM-Request":`1`};t&&(n.Authorization=`Bearer ${t}`);let i=await fetch(`/api/system/resources/kill`,{method:`POST`,headers:n,body:JSON.stringify(e)}),a;try{a=await i.json()}catch{throw Error(i.ok?`Empty response from server`:`Server error (HTTP ${i.status})`)}if(a.ok===!1)throw Error(a.error??`HTTP ${i.status}`);return a.data}function x(e){let[t,n]=(0,m.useState)(null),r=(0,m.useCallback)(t=>{let n=new Map(e.processes.map(e=>[e.pid,e]));return t.pids.map(e=>n.get(e)).filter(e=>!!e)},[e.processes]),a=(0,m.useMemo)(()=>new Map(e.groups.map(e=>[e.key,y(r(e))])),[e.groups,r]),o=(0,m.useCallback)(e=>n({kind:`process`,proc:e}),[]),s=(0,m.useCallback)(e=>n({kind:`group`,group:e,members:r(e)}),[r]),c=(0,m.useCallback)(()=>n(null),[]);return{pendingKill:t,groupProtected:a,requestKillProcess:o,requestKillGroup:s,confirmKill:(0,m.useCallback)(async(e,t)=>{if(n(null),e.kind===`process`){let{proc:n}=e;try{await b(_(n,t)),i.success(`Ended ${n.name} (${n.pid})`)}catch(e){i.error(e instanceof Error?e.message:`Failed to end ${n.name}`)}return}let{group:r,members:a}=e,o=[];for(let e of v(r,a))try{await b(e)}catch(t){o.push(t instanceof Error?t.message:`pid ${e.pid}`)}o.length===0?i.success(`Ended ${r.label} (${a.length} processes)`):i.error(`${r.label}: ${o.length} of ${a.length} could not be ended — ${o[0]}`)},[]),cancelKill:c}}export{y as n,g as r,x as t};
@@ -1,4 +1,4 @@
1
- import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import{r}from"./api-client-xQDlhUTu.js";import{et as i}from"./window-store-DqX_qmkQ.js";import{n as a}from"./explorer-model-BtJN4MZ9.js";import{J as o,Y as s}from"./index-BpgSIM5B.js";import{t as c}from"./use-monaco-theme-BW05eZS4.js";import{t as l}from"./editor-font-CdxKRKX-.js";import{c as u,l as d,o as f,r as p}from"./split-sql-statements-DcAeXbk_.js";import{t as m}from"./sql-completion-provider-CS-ElfgJ.js";function h(e,t){return t?.text.trim()?{sql:t.text,lineOffset:t.startLine-1,from:`selection`}:e.trim()?{sql:e,lineOffset:0,from:`script`}:null}function g(e,t,n){let r=d(e,t,n);return r?{sql:r.run,lineOffset:p(r),from:`statement`}:null}function _(e,t,n,r){return t?.text.trim()?{sql:t.text,lineOffset:t.startLine-1,from:`selection`}:g(e,n,r)}var v=/\s/;function y(e,t,n){let r=0;for(let t=1;t<n.lineNumber;t++)r=e.indexOf(`
1
+ import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import{r}from"./api-client-xQDlhUTu.js";import{et as i}from"./window-store-DqX_qmkQ.js";import{n as a}from"./explorer-model-BtJN4MZ9.js";import{J as o,Y as s}from"./index-BtAn_krv.js";import{t as c}from"./use-monaco-theme-DU0EpDHH.js";import{t as l}from"./editor-font-CdxKRKX-.js";import{c as u,l as d,o as f,r as p}from"./split-sql-statements-DcAeXbk_.js";import{t as m}from"./sql-completion-provider-CS-ElfgJ.js";function h(e,t){return t?.text.trim()?{sql:t.text,lineOffset:t.startLine-1,from:`selection`}:e.trim()?{sql:e,lineOffset:0,from:`script`}:null}function g(e,t,n){let r=d(e,t,n);return r?{sql:r.run,lineOffset:p(r),from:`statement`}:null}function _(e,t,n,r){return t?.text.trim()?{sql:t.text,lineOffset:t.startLine-1,from:`selection`}:g(e,n,r)}var v=/\s/;function y(e,t,n){let r=0;for(let t=1;t<n.lineNumber;t++)r=e.indexOf(`
2
2
  `,r)+1;r+=n.column-1;let i=0;for(let t=0;t<r;t++)v.test(e[t])||i++;let a=r===0||v.test(e[r-1]),o=a?i:i-1,s=0;for(let e=0;s<t.length;s++)if(!v.test(t[s])){if(e===o)break;e++}!a&&s<t.length&&s++;let c=1,l=0;for(let e=t.indexOf(`
3
3
  `);e!==-1&&e<s;e=t.indexOf(`
4
4
  `,e+1))c++,l=e+1;return{lineNumber:c,column:s-l+1}}var b=e(t(),1),x=n(),S=120;function C(e){let t=e.getSelection(),n=e.getModel();return!t||!n||t.isEmpty()?null:{text:n.getValueInRange(t),startLine:t.startLineNumber}}function w({onExecute:e,loading:t,defaultValue:n=`SELECT * FROM `,schemaInfo:r,onSqlChange:i,persistedSql:a,dialect:d=`postgres`,handleRef:p,queryTab:v=!1,errorLines:w,onFormat:T}){let[E,D]=(0,b.useState)(()=>a??n),O=(0,b.useRef)(!!a),[k,A]=(0,b.useState)(null),j=(0,b.useRef)(e);j.current=e;let M=(0,b.useRef)(d);M.current=d;let N=(0,b.useRef)(T);N.current=T;let P=c();(0,b.useEffect)(()=>{if(!k||!r)return;let{editor:e,monaco:t}=k,n=t.languages.registerCompletionItemProvider(`sql`,m(t,r,()=>M.current,e));return()=>n.dispose()},[k,r]);let F=(0,b.useCallback)((e,t)=>{let n=()=>{let t=e.getPosition();return t?g(e.getValue(),t.lineNumber,M.current):null};e.addAction({id:`run-query-at-cursor`,label:`Run Statement at Cursor`,keybindings:[t.KeyMod.CtrlCmd|t.KeyCode.Enter,...v?[t.KeyMod.CtrlCmd|t.KeyMod.Shift|t.KeyCode.Enter]:[]],run:()=>{let e=n();e&&j.current(e)}}),v&&(e.addAction({id:`run-query-script`,label:`Run Script or Selection`,keybindings:[t.KeyCode.F5],run:()=>{let t=h(e.getValue(),C(e));t&&j.current(t)}}),e.addAction({id:`format-query-script`,label:`Format SQL`,keybindings:[t.KeyMod.Shift|t.KeyMod.Alt|t.KeyCode.KeyF],run:()=>N.current?.()})),p&&(p.current={runAtCursor:()=>{e.getAction(`run-query-at-cursor`)?.run()},runScript:()=>{let t=h(e.getValue(),C(e));t&&j.current(t)},selectionOrStatement:()=>{let t=e.getPosition();return _(e.getValue(),C(e),t?.lineNumber??1,M.current)},revealLine:t=>{e.setPosition({lineNumber:t,column:1}),e.revealLineInCenterIfOutsideViewport(t),e.focus()},insertText:n=>{let r=e.getSelection();if(!r)return;e.pushUndoStop(),e.executeEdits(`ppm-insert`,[{range:r,text:n,forceMoveMarkers:!0}],e=>{let n=e[0]?.range;return n?[new t.Selection(n.startLineNumber,n.startColumn,n.endLineNumber,n.endColumn)]:null}),e.pushUndoStop();let i=e.getSelection();i&&e.revealRangeInCenterIfOutsideViewport(i),e.focus()},reformat:n=>{let r=e.getModel();if(!r)return;let i=r.getValue(t.editor.EndOfLinePreference.LF),a=n(i);if(a!==i){let n=y(i,a,e.getPosition()??{lineNumber:1,column:1});e.pushUndoStop(),e.executeEdits(`ppm-format`,[{range:r.getFullModelRange(),text:a}],[new t.Selection(n.lineNumber,n.column,n.lineNumber,n.column)]),e.pushUndoStop(),e.revealPositionInCenterIfOutsideViewport(n)}e.focus()}}),A({editor:e,monaco:t})},[p]);return(0,b.useEffect)(()=>{if(!k||!v)return;let{editor:e,monaco:t}=k,n=e.createDecorationsCollection(),r=null,i=null,a=()=>{i=null;let a=e.getModel(),o=e.getPosition();if(!a||!o)return n.clear();let s=a.getVersionId();r?.version!==s&&(r={version:s,statements:f(a.getValue(),M.current)});let c=r.statements.length>1?u(r.statements,o.lineNumber):null;n.set(c?[{range:new t.Range(c.startLine,1,c.endLine,1),options:{isWholeLine:!0,lineNumberClassName:`ppm-sql-current-statement`,linesDecorationsClassName:`ppm-sql-current-statement-bar`}}]:[])},o=()=>{i&&clearTimeout(i),i=setTimeout(a,S)};a();let s=e.onDidChangeCursorPosition(o),c=e.onDidChangeModelContent(o);return()=>{i&&clearTimeout(i),s.dispose(),c.dispose(),n.clear()}},[k,v]),(0,b.useEffect)(()=>{if(!k||!w?.length)return;let{editor:e,monaco:t}=k,n=e.getModel()?.getLineCount()??0,r=e.createDecorationsCollection(w.filter(e=>e>=1&&e<=n).map(e=>({range:new t.Range(e,1,e,1),options:{isWholeLine:!0,className:`ppm-sql-error-line`,linesDecorationsClassName:`ppm-sql-error-bar`}}))),i=e.onDidChangeModelContent(()=>r.clear());return()=>{i.dispose(),r.clear()}},[k,w]),(0,b.useEffect)(()=>{O.current||D(n)},[n]),(0,x.jsx)(`div`,{className:`h-full overflow-hidden`,children:(0,x.jsx)(s,{beforeMount:o,height:`100%`,language:`sql`,theme:P,value:E,onChange:e=>{let t=e??``;D(t),O.current=!0,i?.(t)},onMount:F,options:{minimap:{enabled:!1},lineNumbers:v?`on`:`off`,scrollBeyondLastLine:!1,wordWrap:`on`,fontFamily:l,fontSize:12,tabSize:2,renderLineHighlight:`none`,overviewRulerLanes:0,hideCursorInOverviewRuler:!0,scrollbar:{vertical:`auto`,horizontal:`auto`,verticalScrollbarSize:6,horizontalScrollbarSize:6},padding:{top:4,bottom:4},lineDecorationsWidth:v?8:4,lineNumbersMinChars:v?3:0,glyphMargin:!1,folding:!1,fixedOverflowWidgets:!0}})})}function T(e){let[t,n]=(0,b.useState)([]);return(0,b.useEffect)(()=>{if(n([]),!e)return;let t=!0;return(e.kind===`connection`&&e.database===void 0?r.get(i(e,`/tables?cached=1`)):r.get(i(e,`/objects`)).then(e=>e.objects.filter(e=>a.has(e.kind)).map(e=>({name:e.name,schema:e.schema??``})))).then(e=>{t&&n(e.map(({name:e,schema:t})=>({name:e,schema:t})))}).catch(()=>{}),()=>{t=!1}},[e]),(0,b.useMemo)(()=>{if(!(!e||t.length===0))return{tables:t,getColumns:(t,n)=>r.get(i(e,`/schema?table=${encodeURIComponent(t)}${n?`&schema=${encodeURIComponent(n)}`:``}`))}},[e,t])}export{w as n,T as t};
@@ -1 +1 @@
1
- import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t}from"./vendor-markdown-C-P1aR4p.js";import{L as n}from"./index-BpgSIM5B.js";var r=e(t(),1);function i({url:e,onMessage:t,autoConnect:i=!0,idleTimeoutMs:a,onConnectionChange:o}){let s=(0,r.useRef)(null),c=(0,r.useRef)(t),l=(0,r.useRef)(o);return c.current=t,l.current=o,(0,r.useEffect)(()=>{let t=!0,r=new n(e,{idleTimeoutMs:a,onConnectionChange:e=>{t&&l.current?.(e)}});return s.current=r,r.onMessage(e=>c.current?.(e)),i&&r.connect(),()=>{t=!1,r.disconnect(),s.current=null}},[e,i,a]),{send:(0,r.useCallback)(e=>{s.current?.send(e)},[]),connect:(0,r.useCallback)(()=>{s.current?.connect()},[]),disconnect:(0,r.useCallback)(()=>{s.current?.disconnect()},[])}}export{i as t};
1
+ import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t}from"./vendor-markdown-C-P1aR4p.js";import{L as n}from"./index-BtAn_krv.js";var r=e(t(),1);function i({url:e,onMessage:t,autoConnect:i=!0,idleTimeoutMs:a,onConnectionChange:o}){let s=(0,r.useRef)(null),c=(0,r.useRef)(t),l=(0,r.useRef)(o);return c.current=t,l.current=o,(0,r.useEffect)(()=>{let t=!0,r=new n(e,{idleTimeoutMs:a,onConnectionChange:e=>{t&&l.current?.(e)}});return s.current=r,r.onMessage(e=>c.current?.(e)),i&&r.connect(),()=>{t=!1,r.disconnect(),s.current=null}},[e,i,a]),{send:(0,r.useCallback)(e=>{s.current?.send(e)},[]),connect:(0,r.useCallback)(()=>{s.current?.connect()},[]),disconnect:(0,r.useCallback)(()=>{s.current?.disconnect()},[])}}export{i as t};
@@ -1 +1 @@
1
- import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import{A as r,Cn as i,Gt as a,_r as o,gt as s,ut as c}from"./icons-BwyIKaTT.js";import{k as l}from"./api-client-xQDlhUTu.js";import"./window-store-DqX_qmkQ.js";import{t as u}from"./panel-store-BJhazigC.js";import"./project-store-BLGl9IAO.js";import"./project-framework-store-DwLxaRan.js";import"./session-list-sync-triggers-DtJI5KF0.js";import{r as d}from"./clipboard-D-VCry-F.js";import{Dn as f,wn as p}from"./index-BpgSIM5B.js";var m=e(t(),1),h=n(),g=`flex items-center justify-center shrink-0 rounded min-h-11 min-w-11 md:min-h-7 md:min-w-7 text-muted-foreground hover:text-foreground hover:bg-muted`,_=3e3;function v(){return Promise.race([p.allowFraming(window.location.origin).then(()=>void 0,()=>void 0),new Promise(e=>setTimeout(e,_))])}function y({metadata:e,tabId:t}){let n=f(e?.url,window.location.origin),p=f(e?.currentUrl,window.location.origin),_=p&&n&&new URL(p).origin===new URL(n).origin?p:n,[y,b]=(0,m.useState)(_),[x,S]=(0,m.useState)(_),C=(0,m.useRef)(null),w=`${n}:${String(e?.aiOpenAt??``)}`,T=(0,m.useRef)(w),E=e?.via===`tailscale`||e?.via===`local`,[D,O]=(0,m.useState)(0),[k,A]=(0,m.useState)(!1),[j,M]=(0,m.useState)(!1);if((0,m.useEffect)(()=>{T.current!==w&&(T.current=w,b(n),S(n))},[w,n]),(0,m.useEffect)(()=>{let e=e=>{if(!n||!C.current?.contentWindow||e.source!==C.current.contentWindow||e.origin!==new URL(n).origin||e.data?.ppm!==`web-preview-navigation`)return;let r=f(e.data.url,window.location.origin);if(!(!r||new URL(r).origin!==e.origin)&&(b(r),t)){let e=u.getState(),n=Object.values(e.panels).flatMap(e=>e.tabs).find(e=>e.id===t);n&&n.metadata?.currentUrl!==r&&e.updateTab(t,{metadata:{...n.metadata,currentUrl:r}})}};return window.addEventListener(`message`,e),()=>window.removeEventListener(`message`,e)},[n,t]),(0,m.useEffect)(()=>{let e=!0;return v().then(()=>{e&&M(!0)}),()=>{e=!1}},[]),!y)return(0,h.jsx)(`div`,{role:`alert`,className:`p-4 text-sm text-destructive`,children:`This preview has no address PPM can show.`});let N=()=>{d(y).then(e=>{if(!e){l.error(`Failed to copy URL`);return}A(!0),setTimeout(()=>A(!1),2e3)})};return(0,h.jsxs)(`div`,{className:`flex h-full w-full flex-col-reverse md:flex-col bg-background`,children:[(0,h.jsxs)(`div`,{role:`toolbar`,"aria-label":`Web preview`,className:`flex items-center gap-2 md:gap-1 shrink-0 h-12 md:h-8 px-2 border-t md:border-t-0 md:border-b border-border`,children:[(0,h.jsx)(`span`,{className:`flex items-center justify-center shrink-0 size-7 text-muted-foreground`,title:e?.via===`local`?`Private: only this machine can open this address`:E?`Private: only devices in your tailnet can open this address`:`Public: anyone with this link can open it`,children:E?(0,h.jsx)(i,{className:`size-3.5`}):(0,h.jsx)(a,{className:`size-3.5`})}),(0,h.jsx)(`span`,{className:`flex-1 min-w-0 truncate text-xs text-muted-foreground select-all`,children:y}),(0,h.jsx)(`button`,{type:`button`,onClick:()=>void v().then(()=>{S(y),O(e=>e+1)}),title:`Reload`,"aria-label":`Reload`,className:g,children:(0,h.jsx)(o,{className:`size-4`})}),(0,h.jsx)(`button`,{type:`button`,onClick:N,title:`Copy URL`,"aria-label":`Copy URL`,className:g,children:k?(0,h.jsx)(r,{className:`size-4 text-success`}):(0,h.jsx)(c,{className:`size-4`})}),(0,h.jsx)(`a`,{href:y,target:`_blank`,rel:`noopener noreferrer`,title:`Open in browser`,"aria-label":`Open in browser`,className:g,children:(0,h.jsx)(s,{className:`size-4`})})]}),j?(0,h.jsx)(`iframe`,{ref:C,title:`Preview of ${y}`,src:x??void 0,sandbox:`allow-scripts allow-same-origin allow-forms allow-popups allow-popups-to-escape-sandbox allow-modals allow-downloads`,allow:`clipboard-read; clipboard-write; fullscreen`,referrerPolicy:`no-referrer`,className:`flex-1 min-h-0 w-full border-0 bg-white`},`${D}:${String(e?.aiOpenAt??``)}`):(0,h.jsx)(`div`,{className:`flex-1 min-h-0 w-full bg-white`})]})}export{y as WebPreviewTab};
1
+ import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import{A as r,Cn as i,Gt as a,_r as o,gt as s,ut as c}from"./icons-BwyIKaTT.js";import{k as l}from"./api-client-xQDlhUTu.js";import"./window-store-DqX_qmkQ.js";import{t as u}from"./panel-store-BJhazigC.js";import"./project-store-BLGl9IAO.js";import"./project-framework-store-DwLxaRan.js";import"./session-list-sync-triggers-DtJI5KF0.js";import{r as d}from"./clipboard-D-VCry-F.js";import{Dn as f,wn as p}from"./index-BtAn_krv.js";var m=e(t(),1),h=n(),g=`flex items-center justify-center shrink-0 rounded min-h-11 min-w-11 md:min-h-7 md:min-w-7 text-muted-foreground hover:text-foreground hover:bg-muted`,_=3e3;function v(){return Promise.race([p.allowFraming(window.location.origin).then(()=>void 0,()=>void 0),new Promise(e=>setTimeout(e,_))])}function y({metadata:e,tabId:t}){let n=f(e?.url,window.location.origin),p=f(e?.currentUrl,window.location.origin),_=p&&n&&new URL(p).origin===new URL(n).origin?p:n,[y,b]=(0,m.useState)(_),[x,S]=(0,m.useState)(_),C=(0,m.useRef)(null),w=`${n}:${String(e?.aiOpenAt??``)}`,T=(0,m.useRef)(w),E=e?.via===`tailscale`||e?.via===`local`,[D,O]=(0,m.useState)(0),[k,A]=(0,m.useState)(!1),[j,M]=(0,m.useState)(!1);if((0,m.useEffect)(()=>{T.current!==w&&(T.current=w,b(n),S(n))},[w,n]),(0,m.useEffect)(()=>{let e=e=>{if(!n||!C.current?.contentWindow||e.source!==C.current.contentWindow||e.origin!==new URL(n).origin||e.data?.ppm!==`web-preview-navigation`)return;let r=f(e.data.url,window.location.origin);if(!(!r||new URL(r).origin!==e.origin)&&(b(r),t)){let e=u.getState(),n=Object.values(e.panels).flatMap(e=>e.tabs).find(e=>e.id===t);n&&n.metadata?.currentUrl!==r&&e.updateTab(t,{metadata:{...n.metadata,currentUrl:r}})}};return window.addEventListener(`message`,e),()=>window.removeEventListener(`message`,e)},[n,t]),(0,m.useEffect)(()=>{let e=!0;return v().then(()=>{e&&M(!0)}),()=>{e=!1}},[]),!y)return(0,h.jsx)(`div`,{role:`alert`,className:`p-4 text-sm text-destructive`,children:`This preview has no address PPM can show.`});let N=()=>{d(y).then(e=>{if(!e){l.error(`Failed to copy URL`);return}A(!0),setTimeout(()=>A(!1),2e3)})};return(0,h.jsxs)(`div`,{className:`flex h-full w-full flex-col-reverse md:flex-col bg-background`,children:[(0,h.jsxs)(`div`,{role:`toolbar`,"aria-label":`Web preview`,className:`flex items-center gap-2 md:gap-1 shrink-0 h-12 md:h-8 px-2 border-t md:border-t-0 md:border-b border-border`,children:[(0,h.jsx)(`span`,{className:`flex items-center justify-center shrink-0 size-7 text-muted-foreground`,title:e?.via===`local`?`Private: only this machine can open this address`:E?`Private: only devices in your tailnet can open this address`:`Public: anyone with this link can open it`,children:E?(0,h.jsx)(i,{className:`size-3.5`}):(0,h.jsx)(a,{className:`size-3.5`})}),(0,h.jsx)(`span`,{className:`flex-1 min-w-0 truncate text-xs text-muted-foreground select-all`,children:y}),(0,h.jsx)(`button`,{type:`button`,onClick:()=>void v().then(()=>{S(y),O(e=>e+1)}),title:`Reload`,"aria-label":`Reload`,className:g,children:(0,h.jsx)(o,{className:`size-4`})}),(0,h.jsx)(`button`,{type:`button`,onClick:N,title:`Copy URL`,"aria-label":`Copy URL`,className:g,children:k?(0,h.jsx)(r,{className:`size-4 text-success`}):(0,h.jsx)(c,{className:`size-4`})}),(0,h.jsx)(`a`,{href:y,target:`_blank`,rel:`noopener noreferrer`,title:`Open in browser`,"aria-label":`Open in browser`,className:g,children:(0,h.jsx)(s,{className:`size-4`})})]}),j?(0,h.jsx)(`iframe`,{ref:C,title:`Preview of ${y}`,src:x??void 0,sandbox:`allow-scripts allow-same-origin allow-forms allow-popups allow-popups-to-escape-sandbox allow-modals allow-downloads`,allow:`clipboard-read; clipboard-write; fullscreen`,referrerPolicy:`no-referrer`,className:`flex-1 min-h-0 w-full border-0 bg-white`},`${D}:${String(e?.aiOpenAt??``)}`):(0,h.jsx)(`div`,{className:`flex-1 min-h-0 w-full bg-white`})]})}export{y as WebPreviewTab};
@@ -9,7 +9,7 @@
9
9
  <link rel="preconnect" href="https://fonts.googleapis.com" />
10
10
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
11
11
  <link href="https://fonts.googleapis.com/css2?family=Geist+Mono:wght@400;500;600;700&family=Geist:wght@400;500;600;700&display=swap" rel="stylesheet" />
12
- <script type="module" crossorigin src="/assets/index-BpgSIM5B.js"></script>
12
+ <script type="module" crossorigin src="/assets/index-BtAn_krv.js"></script>
13
13
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-C5c2KzVm.js">
14
14
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-CM8YhcCa.js">
15
15
  <link rel="modulepreload" crossorigin href="/assets/vendor-markdown-C-P1aR4p.js">
Binary file
Binary file
package/dist/web/sw.js CHANGED
@@ -1 +1 @@
1
- try{self[`workbox:core:7.3.0`]&&_()}catch{}var e=(e,...t)=>{let n=e;return t.length>0&&(n+=` :: ${JSON.stringify(t)}`),n},t=class extends Error{constructor(t,n){let r=e(t,n);super(r),this.name=t,this.details=n}},n={googleAnalytics:`googleAnalytics`,precache:`precache-v2`,prefix:`workbox`,runtime:`runtime`,suffix:typeof registration<`u`?registration.scope:``},r=e=>[n.prefix,e,n.suffix].filter(e=>e&&e.length>0).join(`-`),i=e=>{for(let t of Object.keys(n))e(t)},a={updateDetails:e=>{i(t=>{typeof e[t]==`string`&&(n[t]=e[t])})},getGoogleAnalyticsName:e=>e||r(n.googleAnalytics),getPrecacheName:e=>e||r(n.precache),getPrefix:()=>n.prefix,getRuntimeName:e=>e||r(n.runtime),getSuffix:()=>n.suffix};function o(e,t){let n=t();return e.waitUntil(n),n}try{self[`workbox:precaching:7.3.0`]&&_()}catch{}var s=`__WB_REVISION__`;function c(e){if(!e)throw new t(`add-to-cache-list-unexpected-type`,{entry:e});if(typeof e==`string`){let t=new URL(e,location.href);return{cacheKey:t.href,url:t.href}}let{revision:n,url:r}=e;if(!r)throw new t(`add-to-cache-list-unexpected-type`,{entry:e});if(!n){let e=new URL(r,location.href);return{cacheKey:e.href,url:e.href}}let i=new URL(r,location.href),a=new URL(r,location.href);return i.searchParams.set(s,n),{cacheKey:i.href,url:a.href}}var l=class{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:e,state:t})=>{t&&(t.originalRequest=e)},this.cachedResponseWillBeUsed=async({event:e,state:t,cachedResponse:n})=>{if(e.type===`install`&&t&&t.originalRequest&&t.originalRequest instanceof Request){let e=t.originalRequest.url;n?this.notUpdatedURLs.push(e):this.updatedURLs.push(e)}return n}}},u=class{constructor({precacheController:e}){this.cacheKeyWillBeUsed=async({request:e,params:t})=>{let n=t?.cacheKey||this._precacheController.getCacheKeyForURL(e.url);return n?new Request(n,{headers:e.headers}):e},this._precacheController=e}},d;function f(){if(d===void 0){let e=new Response(``);if(`body`in e)try{new Response(e.body),d=!0}catch{d=!1}d=!1}return d}async function p(e,n){let r=null;if(e.url&&(r=new URL(e.url).origin),r!==self.location.origin)throw new t(`cross-origin-copy-response`,{origin:r});let i=e.clone(),a={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=n?n(a):a,s=f()?i.body:await i.blob();return new Response(s,o)}var m=e=>new URL(String(e),location.href).href.replace(RegExp(`^${location.origin}`),``);function h(e,t){let n=new URL(e);for(let e of t)n.searchParams.delete(e);return n.href}async function g(e,t,n,r){let i=h(t.url,n);if(t.url===i)return e.match(t,r);let a=Object.assign(Object.assign({},r),{ignoreSearch:!0}),o=await e.keys(t,a);for(let t of o)if(i===h(t.url,n))return e.match(t,r)}var v=class{constructor(){this.promise=new Promise((e,t)=>{this.resolve=e,this.reject=t})}},y=new Set;async function b(){for(let e of y)await e()}function x(e){return new Promise(t=>setTimeout(t,e))}try{self[`workbox:strategies:7.3.0`]&&_()}catch{}function S(e){return typeof e==`string`?new Request(e):e}var C=class{constructor(e,t){this._cacheKeys={},Object.assign(this,t),this.event=t.event,this._strategy=e,this._handlerDeferred=new v,this._extendLifetimePromises=[],this._plugins=[...e.plugins],this._pluginStateMap=new Map;for(let e of this._plugins)this._pluginStateMap.set(e,{});this.event.waitUntil(this._handlerDeferred.promise)}async fetch(e){let{event:n}=this,r=S(e);if(r.mode===`navigate`&&n instanceof FetchEvent&&n.preloadResponse){let e=await n.preloadResponse;if(e)return e}let i=this.hasCallback(`fetchDidFail`)?r.clone():null;try{for(let e of this.iterateCallbacks(`requestWillFetch`))r=await e({request:r.clone(),event:n})}catch(e){if(e instanceof Error)throw new t(`plugin-error-request-will-fetch`,{thrownErrorMessage:e.message})}let a=r.clone();try{let e;e=await fetch(r,r.mode===`navigate`?void 0:this._strategy.fetchOptions);for(let t of this.iterateCallbacks(`fetchDidSucceed`))e=await t({event:n,request:a,response:e});return e}catch(e){throw i&&await this.runCallbacks(`fetchDidFail`,{error:e,event:n,originalRequest:i.clone(),request:a.clone()}),e}}async fetchAndCachePut(e){let t=await this.fetch(e),n=t.clone();return this.waitUntil(this.cachePut(e,n)),t}async cacheMatch(e){let t=S(e),n,{cacheName:r,matchOptions:i}=this._strategy,a=await this.getCacheKey(t,`read`),o=Object.assign(Object.assign({},i),{cacheName:r});n=await caches.match(a,o);for(let e of this.iterateCallbacks(`cachedResponseWillBeUsed`))n=await e({cacheName:r,matchOptions:i,cachedResponse:n,request:a,event:this.event})||void 0;return n}async cachePut(e,n){let r=S(e);await x(0);let i=await this.getCacheKey(r,`write`);if(!n)throw new t(`cache-put-with-no-response`,{url:m(i.url)});let a=await this._ensureResponseSafeToCache(n);if(!a)return!1;let{cacheName:o,matchOptions:s}=this._strategy,c=await self.caches.open(o),l=this.hasCallback(`cacheDidUpdate`),u=l?await g(c,i.clone(),[`__WB_REVISION__`],s):null;try{await c.put(i,l?a.clone():a)}catch(e){if(e instanceof Error)throw e.name===`QuotaExceededError`&&await b(),e}for(let e of this.iterateCallbacks(`cacheDidUpdate`))await e({cacheName:o,oldResponse:u,newResponse:a.clone(),request:i,event:this.event});return!0}async getCacheKey(e,t){let n=`${e.url} | ${t}`;if(!this._cacheKeys[n]){let r=e;for(let e of this.iterateCallbacks(`cacheKeyWillBeUsed`))r=S(await e({mode:t,request:r,event:this.event,params:this.params}));this._cacheKeys[n]=r}return this._cacheKeys[n]}hasCallback(e){for(let t of this._strategy.plugins)if(e in t)return!0;return!1}async runCallbacks(e,t){for(let n of this.iterateCallbacks(e))await n(t)}*iterateCallbacks(e){for(let t of this._strategy.plugins)if(typeof t[e]==`function`){let n=this._pluginStateMap.get(t);yield r=>{let i=Object.assign(Object.assign({},r),{state:n});return t[e](i)}}}waitUntil(e){return this._extendLifetimePromises.push(e),e}async doneWaiting(){for(;this._extendLifetimePromises.length;){let e=this._extendLifetimePromises.splice(0),t=(await Promise.allSettled(e)).find(e=>e.status===`rejected`);if(t)throw t.reason}}destroy(){this._handlerDeferred.resolve(null)}async _ensureResponseSafeToCache(e){let t=e,n=!1;for(let e of this.iterateCallbacks(`cacheWillUpdate`))if(t=await e({request:this.request,response:t,event:this.event})||void 0,n=!0,!t)break;return n||t&&t.status!==200&&(t=void 0),t}},w=class{constructor(e={}){this.cacheName=a.getRuntimeName(e.cacheName),this.plugins=e.plugins||[],this.fetchOptions=e.fetchOptions,this.matchOptions=e.matchOptions}handle(e){let[t]=this.handleAll(e);return t}handleAll(e){e instanceof FetchEvent&&(e={event:e,request:e.request});let t=e.event,n=typeof e.request==`string`?new Request(e.request):e.request,r=`params`in e?e.params:void 0,i=new C(this,{event:t,request:n,params:r}),a=this._getResponse(i,n,t);return[a,this._awaitComplete(a,i,n,t)]}async _getResponse(e,n,r){await e.runCallbacks(`handlerWillStart`,{event:r,request:n});let i;try{if(i=await this._handle(n,e),!i||i.type===`error`)throw new t(`no-response`,{url:n.url})}catch(t){if(t instanceof Error){for(let a of e.iterateCallbacks(`handlerDidError`))if(i=await a({error:t,event:r,request:n}),i)break}if(!i)throw t}for(let t of e.iterateCallbacks(`handlerWillRespond`))i=await t({event:r,request:n,response:i});return i}async _awaitComplete(e,t,n,r){let i,a;try{i=await e}catch{}try{await t.runCallbacks(`handlerDidRespond`,{event:r,request:n,response:i}),await t.doneWaiting()}catch(e){e instanceof Error&&(a=e)}if(await t.runCallbacks(`handlerDidComplete`,{event:r,request:n,response:i,error:a}),t.destroy(),a)throw a}},T=class e extends w{constructor(t={}){t.cacheName=a.getPrecacheName(t.cacheName),super(t),this._fallbackToNetwork=t.fallbackToNetwork!==!1,this.plugins.push(e.copyRedirectedCacheableResponsesPlugin)}async _handle(e,t){return await t.cacheMatch(e)||(t.event&&t.event.type===`install`?await this._handleInstall(e,t):await this._handleFetch(e,t))}async _handleFetch(e,n){let r,i=n.params||{};if(this._fallbackToNetwork){let t=i.integrity,a=e.integrity,o=!a||a===t;r=await n.fetch(new Request(e,{integrity:e.mode===`no-cors`?void 0:a||t})),t&&o&&e.mode!==`no-cors`&&(this._useDefaultCacheabilityPluginIfNeeded(),await n.cachePut(e,r.clone()))}else throw new t(`missing-precache-entry`,{cacheName:this.cacheName,url:e.url});return r}async _handleInstall(e,n){this._useDefaultCacheabilityPluginIfNeeded();let r=await n.fetch(e);if(!await n.cachePut(e,r.clone()))throw new t(`bad-precaching-response`,{url:e.url,status:r.status});return r}_useDefaultCacheabilityPluginIfNeeded(){let t=null,n=0;for(let[r,i]of this.plugins.entries())i!==e.copyRedirectedCacheableResponsesPlugin&&(i===e.defaultPrecacheCacheabilityPlugin&&(t=r),i.cacheWillUpdate&&n++);n===0?this.plugins.push(e.defaultPrecacheCacheabilityPlugin):n>1&&t!==null&&this.plugins.splice(t,1)}};T.defaultPrecacheCacheabilityPlugin={async cacheWillUpdate({response:e}){return!e||e.status>=400?null:e}},T.copyRedirectedCacheableResponsesPlugin={async cacheWillUpdate({response:e}){return e.redirected?await p(e):e}};var E=class{constructor({cacheName:e,plugins:t=[],fallbackToNetwork:n=!0}={}){this._urlsToCacheKeys=new Map,this._urlsToCacheModes=new Map,this._cacheKeysToIntegrities=new Map,this._strategy=new T({cacheName:a.getPrecacheName(e),plugins:[...t,new u({precacheController:this})],fallbackToNetwork:n}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this._strategy}precache(e){this.addToCacheList(e),this._installAndActiveListenersAdded||=(self.addEventListener(`install`,this.install),self.addEventListener(`activate`,this.activate),!0)}addToCacheList(e){let n=[];for(let r of e){typeof r==`string`?n.push(r):r&&r.revision===void 0&&n.push(r.url);let{cacheKey:e,url:i}=c(r),a=typeof r!=`string`&&r.revision?`reload`:`default`;if(this._urlsToCacheKeys.has(i)&&this._urlsToCacheKeys.get(i)!==e)throw new t(`add-to-cache-list-conflicting-entries`,{firstEntry:this._urlsToCacheKeys.get(i),secondEntry:e});if(typeof r!=`string`&&r.integrity){if(this._cacheKeysToIntegrities.has(e)&&this._cacheKeysToIntegrities.get(e)!==r.integrity)throw new t(`add-to-cache-list-conflicting-integrities`,{url:i});this._cacheKeysToIntegrities.set(e,r.integrity)}if(this._urlsToCacheKeys.set(i,e),this._urlsToCacheModes.set(i,a),n.length>0){let e=`Workbox is precaching URLs without revision info: ${n.join(`, `)}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(e)}}}install(e){return o(e,async()=>{let t=new l;this.strategy.plugins.push(t);for(let[t,n]of this._urlsToCacheKeys){let r=this._cacheKeysToIntegrities.get(n),i=this._urlsToCacheModes.get(t),a=new Request(t,{integrity:r,cache:i,credentials:`same-origin`});await Promise.all(this.strategy.handleAll({params:{cacheKey:n},request:a,event:e}))}let{updatedURLs:n,notUpdatedURLs:r}=t;return{updatedURLs:n,notUpdatedURLs:r}})}activate(e){return o(e,async()=>{let e=await self.caches.open(this.strategy.cacheName),t=await e.keys(),n=new Set(this._urlsToCacheKeys.values()),r=[];for(let i of t)n.has(i.url)||(await e.delete(i),r.push(i.url));return{deletedURLs:r}})}getURLsToCacheKeys(){return this._urlsToCacheKeys}getCachedURLs(){return[...this._urlsToCacheKeys.keys()]}getCacheKeyForURL(e){let t=new URL(e,location.href);return this._urlsToCacheKeys.get(t.href)}getIntegrityForCacheKey(e){return this._cacheKeysToIntegrities.get(e)}async matchPrecache(e){let t=e instanceof Request?e.url:e,n=this.getCacheKeyForURL(t);if(n)return(await self.caches.open(this.strategy.cacheName)).match(n)}createHandlerBoundToURL(e){let n=this.getCacheKeyForURL(e);if(!n)throw new t(`non-precached-url`,{url:e});return t=>(t.request=new Request(e),t.params=Object.assign({cacheKey:n},t.params),this.strategy.handle(t))}},D,O=()=>(D||=new E,D);try{self[`workbox:routing:7.3.0`]&&_()}catch{}var k=e=>e&&typeof e==`object`?e:{handle:e},A=class{constructor(e,t,n=`GET`){this.handler=k(t),this.match=e,this.method=n}setCatchHandler(e){this.catchHandler=k(e)}},j=class extends A{constructor(e,t,n){super(({url:t})=>{let n=e.exec(t.href);if(n&&!(t.origin!==location.origin&&n.index!==0))return n.slice(1)},t,n)}},M=class{constructor(){this._routes=new Map,this._defaultHandlerMap=new Map}get routes(){return this._routes}addFetchListener(){self.addEventListener(`fetch`,(e=>{let{request:t}=e,n=this.handleRequest({request:t,event:e});n&&e.respondWith(n)}))}addCacheListener(){self.addEventListener(`message`,(e=>{if(e.data&&e.data.type===`CACHE_URLS`){let{payload:t}=e.data,n=Promise.all(t.urlsToCache.map(t=>{typeof t==`string`&&(t=[t]);let n=new Request(...t);return this.handleRequest({request:n,event:e})}));e.waitUntil(n),e.ports&&e.ports[0]&&n.then(()=>e.ports[0].postMessage(!0))}}))}handleRequest({request:e,event:t}){let n=new URL(e.url,location.href);if(!n.protocol.startsWith(`http`))return;let r=n.origin===location.origin,{params:i,route:a}=this.findMatchingRoute({event:t,request:e,sameOrigin:r,url:n}),o=a&&a.handler,s=e.method;if(!o&&this._defaultHandlerMap.has(s)&&(o=this._defaultHandlerMap.get(s)),!o)return;let c;try{c=o.handle({url:n,request:e,event:t,params:i})}catch(e){c=Promise.reject(e)}let l=a&&a.catchHandler;return c instanceof Promise&&(this._catchHandler||l)&&(c=c.catch(async r=>{if(l)try{return await l.handle({url:n,request:e,event:t,params:i})}catch(e){e instanceof Error&&(r=e)}if(this._catchHandler)return this._catchHandler.handle({url:n,request:e,event:t});throw r})),c}findMatchingRoute({url:e,sameOrigin:t,request:n,event:r}){let i=this._routes.get(n.method)||[];for(let a of i){let i,o=a.match({url:e,sameOrigin:t,request:n,event:r});if(o)return i=o,(Array.isArray(i)&&i.length===0||o.constructor===Object&&Object.keys(o).length===0||typeof o==`boolean`)&&(i=void 0),{route:a,params:i}}return{}}setDefaultHandler(e,t=`GET`){this._defaultHandlerMap.set(t,k(e))}setCatchHandler(e){this._catchHandler=k(e)}registerRoute(e){this._routes.has(e.method)||this._routes.set(e.method,[]),this._routes.get(e.method).push(e)}unregisterRoute(e){if(!this._routes.has(e.method))throw new t(`unregister-route-but-not-found-with-method`,{method:e.method});let n=this._routes.get(e.method).indexOf(e);if(n>-1)this._routes.get(e.method).splice(n,1);else throw new t(`unregister-route-route-not-registered`)}},N,P=()=>(N||(N=new M,N.addFetchListener(),N.addCacheListener()),N);function F(e,n,r){let i;if(typeof e==`string`){let t=new URL(e,location.href);i=new A(({url:e})=>e.href===t.href,n,r)}else if(e instanceof RegExp)i=new j(e,n,r);else if(typeof e==`function`)i=new A(e,n,r);else if(e instanceof A)i=e;else throw new t(`unsupported-route-type`,{moduleName:`workbox-routing`,funcName:`registerRoute`,paramName:`capture`});return P().registerRoute(i),i}function I(e,t=[]){for(let n of[...e.searchParams.keys()])t.some(e=>e.test(n))&&e.searchParams.delete(n);return e}function*L(e,{ignoreURLParametersMatching:t=[/^utm_/,/^fbclid$/],directoryIndex:n=`index.html`,cleanURLs:r=!0,urlManipulation:i}={}){let a=new URL(e,location.href);a.hash=``,yield a.href;let o=I(a,t);if(yield o.href,n&&o.pathname.endsWith(`/`)){let e=new URL(o.href);e.pathname+=n,yield e.href}if(r){let e=new URL(o.href);e.pathname+=`.html`,yield e.href}if(i){let e=i({url:a});for(let t of e)yield t.href}}var R=class extends A{constructor(e,t){super(({request:n})=>{let r=e.getURLsToCacheKeys();for(let i of L(n.url,t)){let t=r.get(i);if(t)return{cacheKey:t,integrity:e.getIntegrityForCacheKey(t)}}},e.strategy)}};function z(e){F(new R(O(),e))}var B=`-precache-`,V=async(e,t=B)=>{let n=(await self.caches.keys()).filter(n=>n.includes(t)&&n.includes(self.registration.scope)&&n!==e);return await Promise.all(n.map(e=>self.caches.delete(e))),n};function H(){self.addEventListener(`activate`,(e=>{let t=a.getPrecacheName();e.waitUntil(V(t).then(e=>{}))}))}function U(e){O().precache(e)}function W(e,t){U(e),z(t)}var G=class extends w{async _handle(e,n){let r=await n.cacheMatch(e),i;if(!r)try{r=await n.fetchAndCachePut(e)}catch(e){e instanceof Error&&(i=e)}if(!r)throw new t(`no-response`,{url:e.url,error:i});return r}},K=`ppm:open-from-notification`;function q(e){let t=e&&typeof e==`object`?e:{},n=e=>typeof e==`string`?e:``;return{title:n(t.title)||`PPM`,body:n(t.body),url:n(t.url)||`/`,tag:n(t.tag),project:n(t.project),sessionId:n(t.sessionId),providerId:n(t.providerId)}}async function J(e,t,n){let r=new URL(e.url,n);if(r.origin===n){let n=(await t.matchAll({type:`window`,includeUncontrolled:!0})).filter(e=>!Y(e.url)),i=n.find(e=>e.focused)??n.find(e=>e.visibilityState===`visible`)??n[0];if(i){let t={type:K,url:r.href,project:e.project,sessionId:e.sessionId,providerId:e.providerId};i.postMessage(t),await i.focus().catch(()=>void 0);return}}await t.openWindow(r.href)}function Y(e){try{return new URL(e).pathname.startsWith(`/s/`)}catch{return!1}}W([{"revision":"a89cc01d73639f80bcd074467cb6a1f1","url":"index.html"},{"revision":"26dccd02a2ef7522892015154f5e3680","url":"manifest.webmanifest"},{"revision":"a0fb34fc84eb148d51812cd62669f20d","url":"icon-512.svg"},{"revision":"a0fb34fc84eb148d51812cd62669f20d","url":"icon-192.svg"},{"revision":null,"url":"assets/index-BpgSIM5B.js"},{"revision":null,"url":"assets/index-BACBJm4i.css"},{"revision":"a0fb34fc84eb148d51812cd62669f20d","url":"icon-192.svg"},{"revision":"a0fb34fc84eb148d51812cd62669f20d","url":"icon-512.svg"},{"revision":"26dccd02a2ef7522892015154f5e3680","url":"manifest.webmanifest"}]),H();var X=e=>(e.headers.get(`content-type`)??``).startsWith(`text/html`);F(({url:e})=>e.pathname.startsWith(`/assets/`),new G({cacheName:`ppm-assets`,plugins:[{cacheWillUpdate:async({response:e})=>X(e)?null:e,cachedResponseWillBeUsed:async({cachedResponse:e})=>e&&X(e)?null:e}]})),self.skipWaiting(),self.addEventListener(`activate`,()=>{self.clients.claim()}),self.addEventListener(`push`,e=>{let t=null;try{t=e.data?.json()}catch{t={body:e.data?.text()}}let n=q(t),r={body:n.body,icon:`/icon-192.svg`,data:n,...n.tag&&{tag:n.tag,renotify:!0}};e.waitUntil(self.registration.showNotification(n.title,r))}),self.addEventListener(`notificationclick`,e=>{e.notification.close();let t=q(e.notification.data);e.waitUntil(J(t,self.clients,self.location.origin))});
1
+ try{self[`workbox:core:7.3.0`]&&_()}catch{}var e=(e,...t)=>{let n=e;return t.length>0&&(n+=` :: ${JSON.stringify(t)}`),n},t=class extends Error{constructor(t,n){let r=e(t,n);super(r),this.name=t,this.details=n}},n={googleAnalytics:`googleAnalytics`,precache:`precache-v2`,prefix:`workbox`,runtime:`runtime`,suffix:typeof registration<`u`?registration.scope:``},r=e=>[n.prefix,e,n.suffix].filter(e=>e&&e.length>0).join(`-`),i=e=>{for(let t of Object.keys(n))e(t)},a={updateDetails:e=>{i(t=>{typeof e[t]==`string`&&(n[t]=e[t])})},getGoogleAnalyticsName:e=>e||r(n.googleAnalytics),getPrecacheName:e=>e||r(n.precache),getPrefix:()=>n.prefix,getRuntimeName:e=>e||r(n.runtime),getSuffix:()=>n.suffix};function o(e,t){let n=t();return e.waitUntil(n),n}try{self[`workbox:precaching:7.3.0`]&&_()}catch{}var s=`__WB_REVISION__`;function c(e){if(!e)throw new t(`add-to-cache-list-unexpected-type`,{entry:e});if(typeof e==`string`){let t=new URL(e,location.href);return{cacheKey:t.href,url:t.href}}let{revision:n,url:r}=e;if(!r)throw new t(`add-to-cache-list-unexpected-type`,{entry:e});if(!n){let e=new URL(r,location.href);return{cacheKey:e.href,url:e.href}}let i=new URL(r,location.href),a=new URL(r,location.href);return i.searchParams.set(s,n),{cacheKey:i.href,url:a.href}}var l=class{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:e,state:t})=>{t&&(t.originalRequest=e)},this.cachedResponseWillBeUsed=async({event:e,state:t,cachedResponse:n})=>{if(e.type===`install`&&t&&t.originalRequest&&t.originalRequest instanceof Request){let e=t.originalRequest.url;n?this.notUpdatedURLs.push(e):this.updatedURLs.push(e)}return n}}},u=class{constructor({precacheController:e}){this.cacheKeyWillBeUsed=async({request:e,params:t})=>{let n=t?.cacheKey||this._precacheController.getCacheKeyForURL(e.url);return n?new Request(n,{headers:e.headers}):e},this._precacheController=e}},d;function f(){if(d===void 0){let e=new Response(``);if(`body`in e)try{new Response(e.body),d=!0}catch{d=!1}d=!1}return d}async function p(e,n){let r=null;if(e.url&&(r=new URL(e.url).origin),r!==self.location.origin)throw new t(`cross-origin-copy-response`,{origin:r});let i=e.clone(),a={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=n?n(a):a,s=f()?i.body:await i.blob();return new Response(s,o)}var m=e=>new URL(String(e),location.href).href.replace(RegExp(`^${location.origin}`),``);function h(e,t){let n=new URL(e);for(let e of t)n.searchParams.delete(e);return n.href}async function g(e,t,n,r){let i=h(t.url,n);if(t.url===i)return e.match(t,r);let a=Object.assign(Object.assign({},r),{ignoreSearch:!0}),o=await e.keys(t,a);for(let t of o)if(i===h(t.url,n))return e.match(t,r)}var v=class{constructor(){this.promise=new Promise((e,t)=>{this.resolve=e,this.reject=t})}},y=new Set;async function b(){for(let e of y)await e()}function x(e){return new Promise(t=>setTimeout(t,e))}try{self[`workbox:strategies:7.3.0`]&&_()}catch{}function S(e){return typeof e==`string`?new Request(e):e}var C=class{constructor(e,t){this._cacheKeys={},Object.assign(this,t),this.event=t.event,this._strategy=e,this._handlerDeferred=new v,this._extendLifetimePromises=[],this._plugins=[...e.plugins],this._pluginStateMap=new Map;for(let e of this._plugins)this._pluginStateMap.set(e,{});this.event.waitUntil(this._handlerDeferred.promise)}async fetch(e){let{event:n}=this,r=S(e);if(r.mode===`navigate`&&n instanceof FetchEvent&&n.preloadResponse){let e=await n.preloadResponse;if(e)return e}let i=this.hasCallback(`fetchDidFail`)?r.clone():null;try{for(let e of this.iterateCallbacks(`requestWillFetch`))r=await e({request:r.clone(),event:n})}catch(e){if(e instanceof Error)throw new t(`plugin-error-request-will-fetch`,{thrownErrorMessage:e.message})}let a=r.clone();try{let e;e=await fetch(r,r.mode===`navigate`?void 0:this._strategy.fetchOptions);for(let t of this.iterateCallbacks(`fetchDidSucceed`))e=await t({event:n,request:a,response:e});return e}catch(e){throw i&&await this.runCallbacks(`fetchDidFail`,{error:e,event:n,originalRequest:i.clone(),request:a.clone()}),e}}async fetchAndCachePut(e){let t=await this.fetch(e),n=t.clone();return this.waitUntil(this.cachePut(e,n)),t}async cacheMatch(e){let t=S(e),n,{cacheName:r,matchOptions:i}=this._strategy,a=await this.getCacheKey(t,`read`),o=Object.assign(Object.assign({},i),{cacheName:r});n=await caches.match(a,o);for(let e of this.iterateCallbacks(`cachedResponseWillBeUsed`))n=await e({cacheName:r,matchOptions:i,cachedResponse:n,request:a,event:this.event})||void 0;return n}async cachePut(e,n){let r=S(e);await x(0);let i=await this.getCacheKey(r,`write`);if(!n)throw new t(`cache-put-with-no-response`,{url:m(i.url)});let a=await this._ensureResponseSafeToCache(n);if(!a)return!1;let{cacheName:o,matchOptions:s}=this._strategy,c=await self.caches.open(o),l=this.hasCallback(`cacheDidUpdate`),u=l?await g(c,i.clone(),[`__WB_REVISION__`],s):null;try{await c.put(i,l?a.clone():a)}catch(e){if(e instanceof Error)throw e.name===`QuotaExceededError`&&await b(),e}for(let e of this.iterateCallbacks(`cacheDidUpdate`))await e({cacheName:o,oldResponse:u,newResponse:a.clone(),request:i,event:this.event});return!0}async getCacheKey(e,t){let n=`${e.url} | ${t}`;if(!this._cacheKeys[n]){let r=e;for(let e of this.iterateCallbacks(`cacheKeyWillBeUsed`))r=S(await e({mode:t,request:r,event:this.event,params:this.params}));this._cacheKeys[n]=r}return this._cacheKeys[n]}hasCallback(e){for(let t of this._strategy.plugins)if(e in t)return!0;return!1}async runCallbacks(e,t){for(let n of this.iterateCallbacks(e))await n(t)}*iterateCallbacks(e){for(let t of this._strategy.plugins)if(typeof t[e]==`function`){let n=this._pluginStateMap.get(t);yield r=>{let i=Object.assign(Object.assign({},r),{state:n});return t[e](i)}}}waitUntil(e){return this._extendLifetimePromises.push(e),e}async doneWaiting(){for(;this._extendLifetimePromises.length;){let e=this._extendLifetimePromises.splice(0),t=(await Promise.allSettled(e)).find(e=>e.status===`rejected`);if(t)throw t.reason}}destroy(){this._handlerDeferred.resolve(null)}async _ensureResponseSafeToCache(e){let t=e,n=!1;for(let e of this.iterateCallbacks(`cacheWillUpdate`))if(t=await e({request:this.request,response:t,event:this.event})||void 0,n=!0,!t)break;return n||t&&t.status!==200&&(t=void 0),t}},w=class{constructor(e={}){this.cacheName=a.getRuntimeName(e.cacheName),this.plugins=e.plugins||[],this.fetchOptions=e.fetchOptions,this.matchOptions=e.matchOptions}handle(e){let[t]=this.handleAll(e);return t}handleAll(e){e instanceof FetchEvent&&(e={event:e,request:e.request});let t=e.event,n=typeof e.request==`string`?new Request(e.request):e.request,r=`params`in e?e.params:void 0,i=new C(this,{event:t,request:n,params:r}),a=this._getResponse(i,n,t);return[a,this._awaitComplete(a,i,n,t)]}async _getResponse(e,n,r){await e.runCallbacks(`handlerWillStart`,{event:r,request:n});let i;try{if(i=await this._handle(n,e),!i||i.type===`error`)throw new t(`no-response`,{url:n.url})}catch(t){if(t instanceof Error){for(let a of e.iterateCallbacks(`handlerDidError`))if(i=await a({error:t,event:r,request:n}),i)break}if(!i)throw t}for(let t of e.iterateCallbacks(`handlerWillRespond`))i=await t({event:r,request:n,response:i});return i}async _awaitComplete(e,t,n,r){let i,a;try{i=await e}catch{}try{await t.runCallbacks(`handlerDidRespond`,{event:r,request:n,response:i}),await t.doneWaiting()}catch(e){e instanceof Error&&(a=e)}if(await t.runCallbacks(`handlerDidComplete`,{event:r,request:n,response:i,error:a}),t.destroy(),a)throw a}},T=class e extends w{constructor(t={}){t.cacheName=a.getPrecacheName(t.cacheName),super(t),this._fallbackToNetwork=t.fallbackToNetwork!==!1,this.plugins.push(e.copyRedirectedCacheableResponsesPlugin)}async _handle(e,t){return await t.cacheMatch(e)||(t.event&&t.event.type===`install`?await this._handleInstall(e,t):await this._handleFetch(e,t))}async _handleFetch(e,n){let r,i=n.params||{};if(this._fallbackToNetwork){let t=i.integrity,a=e.integrity,o=!a||a===t;r=await n.fetch(new Request(e,{integrity:e.mode===`no-cors`?void 0:a||t})),t&&o&&e.mode!==`no-cors`&&(this._useDefaultCacheabilityPluginIfNeeded(),await n.cachePut(e,r.clone()))}else throw new t(`missing-precache-entry`,{cacheName:this.cacheName,url:e.url});return r}async _handleInstall(e,n){this._useDefaultCacheabilityPluginIfNeeded();let r=await n.fetch(e);if(!await n.cachePut(e,r.clone()))throw new t(`bad-precaching-response`,{url:e.url,status:r.status});return r}_useDefaultCacheabilityPluginIfNeeded(){let t=null,n=0;for(let[r,i]of this.plugins.entries())i!==e.copyRedirectedCacheableResponsesPlugin&&(i===e.defaultPrecacheCacheabilityPlugin&&(t=r),i.cacheWillUpdate&&n++);n===0?this.plugins.push(e.defaultPrecacheCacheabilityPlugin):n>1&&t!==null&&this.plugins.splice(t,1)}};T.defaultPrecacheCacheabilityPlugin={async cacheWillUpdate({response:e}){return!e||e.status>=400?null:e}},T.copyRedirectedCacheableResponsesPlugin={async cacheWillUpdate({response:e}){return e.redirected?await p(e):e}};var E=class{constructor({cacheName:e,plugins:t=[],fallbackToNetwork:n=!0}={}){this._urlsToCacheKeys=new Map,this._urlsToCacheModes=new Map,this._cacheKeysToIntegrities=new Map,this._strategy=new T({cacheName:a.getPrecacheName(e),plugins:[...t,new u({precacheController:this})],fallbackToNetwork:n}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this._strategy}precache(e){this.addToCacheList(e),this._installAndActiveListenersAdded||=(self.addEventListener(`install`,this.install),self.addEventListener(`activate`,this.activate),!0)}addToCacheList(e){let n=[];for(let r of e){typeof r==`string`?n.push(r):r&&r.revision===void 0&&n.push(r.url);let{cacheKey:e,url:i}=c(r),a=typeof r!=`string`&&r.revision?`reload`:`default`;if(this._urlsToCacheKeys.has(i)&&this._urlsToCacheKeys.get(i)!==e)throw new t(`add-to-cache-list-conflicting-entries`,{firstEntry:this._urlsToCacheKeys.get(i),secondEntry:e});if(typeof r!=`string`&&r.integrity){if(this._cacheKeysToIntegrities.has(e)&&this._cacheKeysToIntegrities.get(e)!==r.integrity)throw new t(`add-to-cache-list-conflicting-integrities`,{url:i});this._cacheKeysToIntegrities.set(e,r.integrity)}if(this._urlsToCacheKeys.set(i,e),this._urlsToCacheModes.set(i,a),n.length>0){let e=`Workbox is precaching URLs without revision info: ${n.join(`, `)}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(e)}}}install(e){return o(e,async()=>{let t=new l;this.strategy.plugins.push(t);for(let[t,n]of this._urlsToCacheKeys){let r=this._cacheKeysToIntegrities.get(n),i=this._urlsToCacheModes.get(t),a=new Request(t,{integrity:r,cache:i,credentials:`same-origin`});await Promise.all(this.strategy.handleAll({params:{cacheKey:n},request:a,event:e}))}let{updatedURLs:n,notUpdatedURLs:r}=t;return{updatedURLs:n,notUpdatedURLs:r}})}activate(e){return o(e,async()=>{let e=await self.caches.open(this.strategy.cacheName),t=await e.keys(),n=new Set(this._urlsToCacheKeys.values()),r=[];for(let i of t)n.has(i.url)||(await e.delete(i),r.push(i.url));return{deletedURLs:r}})}getURLsToCacheKeys(){return this._urlsToCacheKeys}getCachedURLs(){return[...this._urlsToCacheKeys.keys()]}getCacheKeyForURL(e){let t=new URL(e,location.href);return this._urlsToCacheKeys.get(t.href)}getIntegrityForCacheKey(e){return this._cacheKeysToIntegrities.get(e)}async matchPrecache(e){let t=e instanceof Request?e.url:e,n=this.getCacheKeyForURL(t);if(n)return(await self.caches.open(this.strategy.cacheName)).match(n)}createHandlerBoundToURL(e){let n=this.getCacheKeyForURL(e);if(!n)throw new t(`non-precached-url`,{url:e});return t=>(t.request=new Request(e),t.params=Object.assign({cacheKey:n},t.params),this.strategy.handle(t))}},D,O=()=>(D||=new E,D);try{self[`workbox:routing:7.3.0`]&&_()}catch{}var k=e=>e&&typeof e==`object`?e:{handle:e},A=class{constructor(e,t,n=`GET`){this.handler=k(t),this.match=e,this.method=n}setCatchHandler(e){this.catchHandler=k(e)}},j=class extends A{constructor(e,t,n){super(({url:t})=>{let n=e.exec(t.href);if(n&&!(t.origin!==location.origin&&n.index!==0))return n.slice(1)},t,n)}},M=class{constructor(){this._routes=new Map,this._defaultHandlerMap=new Map}get routes(){return this._routes}addFetchListener(){self.addEventListener(`fetch`,(e=>{let{request:t}=e,n=this.handleRequest({request:t,event:e});n&&e.respondWith(n)}))}addCacheListener(){self.addEventListener(`message`,(e=>{if(e.data&&e.data.type===`CACHE_URLS`){let{payload:t}=e.data,n=Promise.all(t.urlsToCache.map(t=>{typeof t==`string`&&(t=[t]);let n=new Request(...t);return this.handleRequest({request:n,event:e})}));e.waitUntil(n),e.ports&&e.ports[0]&&n.then(()=>e.ports[0].postMessage(!0))}}))}handleRequest({request:e,event:t}){let n=new URL(e.url,location.href);if(!n.protocol.startsWith(`http`))return;let r=n.origin===location.origin,{params:i,route:a}=this.findMatchingRoute({event:t,request:e,sameOrigin:r,url:n}),o=a&&a.handler,s=e.method;if(!o&&this._defaultHandlerMap.has(s)&&(o=this._defaultHandlerMap.get(s)),!o)return;let c;try{c=o.handle({url:n,request:e,event:t,params:i})}catch(e){c=Promise.reject(e)}let l=a&&a.catchHandler;return c instanceof Promise&&(this._catchHandler||l)&&(c=c.catch(async r=>{if(l)try{return await l.handle({url:n,request:e,event:t,params:i})}catch(e){e instanceof Error&&(r=e)}if(this._catchHandler)return this._catchHandler.handle({url:n,request:e,event:t});throw r})),c}findMatchingRoute({url:e,sameOrigin:t,request:n,event:r}){let i=this._routes.get(n.method)||[];for(let a of i){let i,o=a.match({url:e,sameOrigin:t,request:n,event:r});if(o)return i=o,(Array.isArray(i)&&i.length===0||o.constructor===Object&&Object.keys(o).length===0||typeof o==`boolean`)&&(i=void 0),{route:a,params:i}}return{}}setDefaultHandler(e,t=`GET`){this._defaultHandlerMap.set(t,k(e))}setCatchHandler(e){this._catchHandler=k(e)}registerRoute(e){this._routes.has(e.method)||this._routes.set(e.method,[]),this._routes.get(e.method).push(e)}unregisterRoute(e){if(!this._routes.has(e.method))throw new t(`unregister-route-but-not-found-with-method`,{method:e.method});let n=this._routes.get(e.method).indexOf(e);if(n>-1)this._routes.get(e.method).splice(n,1);else throw new t(`unregister-route-route-not-registered`)}},N,P=()=>(N||(N=new M,N.addFetchListener(),N.addCacheListener()),N);function F(e,n,r){let i;if(typeof e==`string`){let t=new URL(e,location.href);i=new A(({url:e})=>e.href===t.href,n,r)}else if(e instanceof RegExp)i=new j(e,n,r);else if(typeof e==`function`)i=new A(e,n,r);else if(e instanceof A)i=e;else throw new t(`unsupported-route-type`,{moduleName:`workbox-routing`,funcName:`registerRoute`,paramName:`capture`});return P().registerRoute(i),i}function I(e,t=[]){for(let n of[...e.searchParams.keys()])t.some(e=>e.test(n))&&e.searchParams.delete(n);return e}function*L(e,{ignoreURLParametersMatching:t=[/^utm_/,/^fbclid$/],directoryIndex:n=`index.html`,cleanURLs:r=!0,urlManipulation:i}={}){let a=new URL(e,location.href);a.hash=``,yield a.href;let o=I(a,t);if(yield o.href,n&&o.pathname.endsWith(`/`)){let e=new URL(o.href);e.pathname+=n,yield e.href}if(r){let e=new URL(o.href);e.pathname+=`.html`,yield e.href}if(i){let e=i({url:a});for(let t of e)yield t.href}}var R=class extends A{constructor(e,t){super(({request:n})=>{let r=e.getURLsToCacheKeys();for(let i of L(n.url,t)){let t=r.get(i);if(t)return{cacheKey:t,integrity:e.getIntegrityForCacheKey(t)}}},e.strategy)}};function z(e){F(new R(O(),e))}var B=`-precache-`,V=async(e,t=B)=>{let n=(await self.caches.keys()).filter(n=>n.includes(t)&&n.includes(self.registration.scope)&&n!==e);return await Promise.all(n.map(e=>self.caches.delete(e))),n};function H(){self.addEventListener(`activate`,(e=>{let t=a.getPrecacheName();e.waitUntil(V(t).then(e=>{}))}))}function U(e){O().precache(e)}function W(e,t){U(e),z(t)}var G=class extends w{async _handle(e,n){let r=await n.cacheMatch(e),i;if(!r)try{r=await n.fetchAndCachePut(e)}catch(e){e instanceof Error&&(i=e)}if(!r)throw new t(`no-response`,{url:e.url,error:i});return r}},K=`ppm:open-from-notification`;function q(e){let t=e&&typeof e==`object`?e:{},n=e=>typeof e==`string`?e:``;return{title:n(t.title)||`PPM`,body:n(t.body),url:n(t.url)||`/`,tag:n(t.tag),project:n(t.project),sessionId:n(t.sessionId),providerId:n(t.providerId)}}async function J(e,t,n){let r=new URL(e.url,n);if(r.origin===n){let n=(await t.matchAll({type:`window`,includeUncontrolled:!0})).filter(e=>!Y(e.url)),i=n.find(e=>e.focused)??n.find(e=>e.visibilityState===`visible`)??n[0];if(i){let t={type:K,url:r.href,project:e.project,sessionId:e.sessionId,providerId:e.providerId};i.postMessage(t),await i.focus().catch(()=>void 0);return}}await t.openWindow(r.href)}function Y(e){try{return new URL(e).pathname.startsWith(`/s/`)}catch{return!1}}W([{"revision":"acbbf8faf3fb83e2346f35a79e581d92","url":"index.html"},{"revision":"26dccd02a2ef7522892015154f5e3680","url":"manifest.webmanifest"},{"revision":"a0fb34fc84eb148d51812cd62669f20d","url":"icon-512.svg"},{"revision":"a0fb34fc84eb148d51812cd62669f20d","url":"icon-192.svg"},{"revision":null,"url":"assets/index-BtAn_krv.js"},{"revision":null,"url":"assets/index-BACBJm4i.css"},{"revision":"a0fb34fc84eb148d51812cd62669f20d","url":"icon-192.svg"},{"revision":"a0fb34fc84eb148d51812cd62669f20d","url":"icon-512.svg"},{"revision":"26dccd02a2ef7522892015154f5e3680","url":"manifest.webmanifest"}]),H();var X=e=>(e.headers.get(`content-type`)??``).startsWith(`text/html`);F(({url:e})=>e.pathname.startsWith(`/assets/`),new G({cacheName:`ppm-assets`,plugins:[{cacheWillUpdate:async({response:e})=>X(e)?null:e,cachedResponseWillBeUsed:async({cachedResponse:e})=>e&&X(e)?null:e}]})),self.skipWaiting(),self.addEventListener(`activate`,()=>{self.clients.claim()}),self.addEventListener(`push`,e=>{let t=null;try{t=e.data?.json()}catch{t={body:e.data?.text()}}let n=q(t),r={body:n.body,icon:`/icon-192.svg`,data:n,...n.tag&&{tag:n.tag,renotify:!0}};e.waitUntil(self.registration.showNotification(n.title,r))}),self.addEventListener(`notificationclick`,e=>{e.notification.close();let t=q(e.notification.data);e.waitUntil(J(t,self.clients,self.location.origin))});
package/dist/web/sw.js.br CHANGED
Binary file
package/dist/web/sw.js.gz CHANGED
Binary file
@@ -639,6 +639,45 @@ Long chat sessions are the usual growth source; the transcript is windowed rathe
639
639
  materialized. If memory climbs, check for orphaned transcode or tunnel children with the System
640
640
  Monitor, filtered to PPM's own processes.
641
641
 
642
+ Watch **private bytes**, not RSS. A server that runs the machine out of memory can read 1–2 GB
643
+ resident while holding 30 GB of committed memory (Windows trims the working set and pages the
644
+ rest out); new child processes then die at start, Claude CLI with exit code 9. On Windows the
645
+ System event log says which process it was: provider `Microsoft-Windows-Resource-Exhaustion-Detector`
646
+ names the pid and its bytes.
647
+
648
+ Without any setting, `ppm.log` already answers "who is using the memory" (scope `[mem]`, also in
649
+ the Logs window). The server, the supervisor and the edge forwarder each write a `summary` line a
650
+ minute after start and every 30 minutes after: their own private bytes, JS heap and handles, every
651
+ process below them — totalled by program and by direct child, a Claude/Codex child named by the chat
652
+ session it serves — the busiest HTTP routes since the last summary, and the gauges. The line is a
653
+ WARN when private bytes grew by 1 GB or more since the previous one, and a separate WARN marks the
654
+ first crossing of 2, 4, 8, 16 and 32 GB (for the server, also its children's total crossing 8, 16, 24
655
+ and 32 GB). A Claude or Codex subprocess starting or exiting is logged with its pid and session, and
656
+ on exit with what it last held. Read it as: private far above heap is native memory inside that
657
+ process; a large `children` total is the chats themselves (~650 MB per open Claude session).
658
+
659
+ To find the cause, run PPM with `PPM_MEM_DIAG=1` (optionally `PPM_MEM_DIAG_INTERVAL_MS`, default
660
+ 30000). Every interval the server appends a line to `~/.ppm/mem-diag.log`, the supervisor to
661
+ `~/.ppm/mem-diag-supervisor.log` and the edge forwarder to `~/.ppm/mem-diag-edge.log` (rotated at
662
+ 50 MB to `.1`): RSS, private bytes and their change, the memory of every child process (`children`),
663
+ the HTTP routes served with the bytes each sent (`requests`),
664
+ kernel handles (open fds on Linux), the JS heap, the child processes started since the previous
665
+ line by command (`git status`, `claude`, `powershell get-ciminstance` — never their arguments),
666
+ the children still alive, counts of objects that own native memory, and gauges for long-lived
667
+ state (chat sessions, Claude/Codex sessions, terminals, LSP servers). The first time private bytes
668
+ cross 2, 4, 8, 16, 24 and 32 GB it also writes an `alert` line with the oldest live children and
669
+ all-time spawn totals. Then:
670
+
671
+ ```bash
672
+ bun scripts/mem-diag-report.ts # growth rate per run, MB per spawn by command, gauges
673
+ bun scripts/mem-diag-report.ts --supervisor # the supervisor's log
674
+ bun scripts/mem-diag-report.ts --edge # the edge forwarder's log
675
+ ```
676
+
677
+ The report's slope is a correlation, not proof: two commands that always run together get the
678
+ same share, and growth no command explains points at the gauges and native-object trends instead.
679
+ Private bytes are measured on Windows and Linux; on macOS those fields are absent.
680
+
642
681
  ---
643
682
 
644
683
  ## Support
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hienlh/ppm",
3
- "version": "0.23.21",
3
+ "version": "0.23.22",
4
4
  "description": "Personal Project Manager — mobile-first web IDE with AI assistance",
5
5
  "author": "hienlh",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Summarise the memory monitor's log: how fast private bytes grew in each recent run, which
3
+ * spawned commands went with that growth, and which gauges climbed.
4
+ *
5
+ * bun scripts/mem-diag-report.ts # <ppm dir>/mem-diag.log, last 3 runs
6
+ * bun scripts/mem-diag-report.ts --supervisor # mem-diag-supervisor.log
7
+ * bun scripts/mem-diag-report.ts --edge # mem-diag-edge.log
8
+ * bun scripts/mem-diag-report.ts path/to/log --runs 5
9
+ *
10
+ * Read-only: it opens the log file and nothing else (no database).
11
+ */
12
+ import { existsSync, readFileSync } from "node:fs";
13
+ import { join } from "node:path";
14
+ import { getPpmDir } from "../src/services/ppm-dir.ts";
15
+ import { buildReport } from "../src/services/memory-diagnostics-report.ts";
16
+
17
+ const args = process.argv.slice(2);
18
+ const runsAt = args.indexOf("--runs");
19
+ const runs = runsAt >= 0 ? Math.max(1, Number(args[runsAt + 1]) || 3) : 3;
20
+ const positional = args.filter((a, i) => !a.startsWith("--") && args[i - 1] !== "--runs");
21
+ const file = positional[0]
22
+ ?? join(getPpmDir(), args.includes("--supervisor") ? "mem-diag-supervisor.log"
23
+ : args.includes("--edge") ? "mem-diag-edge.log" : "mem-diag.log");
24
+
25
+ if (!existsSync(file)) {
26
+ console.error(`No log at ${file}. The monitor writes it only while PPM_MEM_DIAG=1 is set.`);
27
+ process.exit(1);
28
+ }
29
+ const text = [`${file}.1`, file].filter(existsSync).map((f) => readFileSync(f, "utf8")).join("\n");
30
+ console.log(`${file}`);
31
+ for (const line of buildReport(text, runs)) console.log(line);
@@ -5,6 +5,7 @@ import { configService } from "../services/config.service.ts";
5
5
  import { nextProbeDelayMs, type ProviderProbeStatus } from "./provider-probe.ts";
6
6
  import { CODEX_DEFAULT_MODEL } from "../types/config.ts";
7
7
  import { createLogger } from "../services/logger.ts";
8
+ import { registerMemoryGauge } from "../services/memory-diagnostics.ts";
8
9
 
9
10
  const log = createLogger("registry");
10
11
 
@@ -53,7 +54,13 @@ class ProviderRegistry {
53
54
  export const providerRegistry = new ProviderRegistry();
54
55
 
55
56
  // SDK providers registered synchronously (no binary check needed)
56
- providerRegistry.register(new ClaudeAgentSdkProvider());
57
+ const claudeProvider = new ClaudeAgentSdkProvider();
58
+ providerRegistry.register(claudeProvider);
59
+ // Sizes for the opt-in memory monitor (PPM_MEM_DIAG). Bracket access reaches the private
60
+ // maps without widening the class; registering costs nothing while the monitor is off.
61
+ registerMemoryGauge("claude.streamingSessions", () => claudeProvider["streamingSessions"].size);
62
+ registerMemoryGauge("claude.activeQueries", () => claudeProvider["activeQueries"].size);
63
+ registerMemoryGauge("claude.activeSessions", () => claudeProvider["activeSessions"].size);
57
64
  providerRegistry.register(new MockProvider()); // testing only
58
65
 
59
66
  /**
@@ -176,6 +183,8 @@ async function probeCodexProvider(): Promise<ProviderProbeStatus> {
176
183
  const result = await codex.probe();
177
184
  if (result.ok) {
178
185
  providerRegistry.register(codex);
186
+ registerMemoryGauge("codex.sessions", () => codex["sessions"].size);
187
+ registerMemoryGauge("codex.live", () => codex["live"].size);
179
188
  ensureCodexConfigEntry();
180
189
  log.info("Codex provider registered (@openai/codex found)");
181
190
  status = { id: "codex", registered: true, attempts, lastProbeAt };
@@ -1,5 +1,4 @@
1
1
  import { Hono } from "hono";
2
- import { cors } from "hono/cors";
3
2
  import { writeFileSync } from "node:fs";
4
3
  import { SERVER_PORT_FILE } from "../services/edge-target-resolver.ts";
5
4
  import { configService } from "../services/config.service.ts";
@@ -7,6 +6,7 @@ import { VERSION } from "../version.ts";
7
6
  import { authMiddleware } from "./middleware/auth.ts";
8
7
  import { gzipJson } from "./middleware/gzip-json.ts";
9
8
  import { accessLog } from "./middleware/access-log.ts";
9
+ import { corsHeaders } from "./middleware/cors-headers.ts";
10
10
  import { createLogger } from "../services/logger.ts";
11
11
  import { projectRoutes } from "./routes/projects.ts";
12
12
  import { settingsRoutes } from "./routes/settings.ts";
@@ -167,14 +167,15 @@ app.onError((error, c) => {
167
167
  return c.text("Internal Server Error", 500);
168
168
  });
169
169
 
170
- // Design share links: the public reviewer surface. Ahead of `cors()` (which would answer `*`
171
- // and re-wrap range bodies), of `/api` auth (a share code is never the PPM token) and of the
172
- // static fallback (its catch-all keeps every `/s` path off the app shell).
170
+ // Design share links: the public reviewer surface. Ahead of the CORS layer, of `/api` auth
171
+ // (a share code is never the PPM token) and of the static fallback (its catch-all keeps every
172
+ // `/s` path off the app shell).
173
173
  import { designShareGuestRoutes } from "./routes/design-share-guest.ts";
174
174
  app.route("/s", designShareGuestRoutes);
175
175
 
176
- // CORS for dev
177
- app.use("*", cors());
176
+ // CORS for dev. Not Hono's `cors()`: it writes headers before the handler, which makes Hono
177
+ // rebuild every response from its body and turns a `Bun.file` body into a leaking stream.
178
+ app.use("*", corsHeaders);
178
179
 
179
180
  // Public endpoints (before auth)
180
181
  // Per-boot id so a named-tunnel health probe can tell "my connector is dark"
@@ -13,6 +13,7 @@
13
13
  */
14
14
  import type { MiddlewareHandler } from "hono";
15
15
  import { createLogger, type LogLevel } from "../../services/logger.ts";
16
+ import { requestTracker } from "../../services/memory-diagnostics-requests.ts";
16
17
 
17
18
  const log = createLogger("http");
18
19
 
@@ -119,6 +120,8 @@ export const accessLog: MiddlewareHandler = async (c, next) => {
119
120
  const ms = Math.round(performance.now() - started);
120
121
  const url = new URL(c.req.url);
121
122
  const status = c.res.status;
123
+ // Before the level check: the memory monitor counts every request, logged or not.
124
+ requestTracker.record(c.req.method, url.pathname, c.res.headers.get("content-length"));
122
125
  const level = accessLogLevel(c.req.method, url.pathname, status, ms);
123
126
  if (!log.isEnabled(level)) return;
124
127
  const line = `${c.req.method} ${describeRequestTarget(url)} ${status} ${ms}ms${ms >= SLOW_REQUEST_MS ? " (slow)" : ""}`;