@hienlh/ppm 0.8.86 → 0.8.87

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 (219) hide show
  1. package/CHANGELOG.md +193 -5
  2. package/bun.lock +5 -0
  3. package/dist/web/assets/{_basePickBy-5eBmZ_lt.js → _basePickBy-5PGDJbfF.js} +1 -1
  4. package/dist/web/assets/{_baseUniq-DimLlN0y.js → _baseUniq-BT4Ow4Kk.js} +1 -1
  5. package/dist/web/assets/api-settings-Bx1GaNmQ.js +1 -0
  6. package/dist/web/assets/{arc-D4SasZrA.js → arc-BAOivWpI.js} +1 -1
  7. package/dist/web/assets/architecture-PBZL5I3N-DEO2f3VD.js +1 -0
  8. package/dist/web/assets/{architectureDiagram-2XIMDMQ5-nv0WbM7d.js → architectureDiagram-2XIMDMQ5-DWBCPMLF.js} +1 -1
  9. package/dist/web/assets/arrow-up--LjUXLEt.js +1 -0
  10. package/dist/web/assets/{blockDiagram-WCTKOSBZ-C1XvYrb8.js → blockDiagram-WCTKOSBZ-TEF8Ally.js} +1 -1
  11. package/dist/web/assets/browser-tab-DaHGm_0i.js +1 -0
  12. package/dist/web/assets/{c4Diagram-IC4MRINW-CygDrbWJ.js → c4Diagram-IC4MRINW-dV22iAsY.js} +1 -1
  13. package/dist/web/assets/channel-wrd-NHWf.js +1 -0
  14. package/dist/web/assets/chat-tab-BDYE0KHF.js +8 -0
  15. package/dist/web/assets/chevron-right-DeV0ehiG.js +1 -0
  16. package/dist/web/assets/{chunk-4BX2VUAB-C2FDgsgT.js → chunk-4BX2VUAB-D4tOov49.js} +1 -1
  17. package/dist/web/assets/{chunk-55IACEB6-jF4w6cat.js → chunk-55IACEB6-DJ6BynZ4.js} +1 -1
  18. package/dist/web/assets/{chunk-7E7YKBS2-BVCECZFi.js → chunk-7E7YKBS2-CiyUJxNI.js} +1 -1
  19. package/dist/web/assets/{chunk-7R4GIKGN-DXTbeu5d.js → chunk-7R4GIKGN-BbIFzsIv.js} +2 -2
  20. package/dist/web/assets/{chunk-C72U2L5F-BaZqOsTs.js → chunk-C72U2L5F-D21mS_6G.js} +1 -1
  21. package/dist/web/assets/{chunk-EGIJ26TM-Bky2tcH7.js → chunk-EGIJ26TM-DzqmU2Z7.js} +1 -1
  22. package/dist/web/assets/{chunk-FMBD7UC4-Cp4BK9A8.js → chunk-FMBD7UC4-DXncblvW.js} +1 -1
  23. package/dist/web/assets/{chunk-GEFDOKGD-BosFEH7G.js → chunk-GEFDOKGD-BbQkJu8C.js} +1 -1
  24. package/dist/web/assets/chunk-GLR3WWYH-CzYx4w-r.js +2 -0
  25. package/dist/web/assets/chunk-HHEYEP7N-HRhYy3kG.js +1 -0
  26. package/dist/web/assets/{chunk-JSJVCQXG-H5Gbjsbr.js → chunk-JSJVCQXG-23tyvw8k.js} +1 -1
  27. package/dist/web/assets/{chunk-KX2RTZJC-CWerSUwS.js → chunk-KX2RTZJC-sQ0o-39C.js} +1 -1
  28. package/dist/web/assets/{chunk-KYZI473N-FvwP7jUy.js → chunk-KYZI473N-BcUZNnwd.js} +1 -1
  29. package/dist/web/assets/{chunk-L3YUKLVL-D1PI_ORP.js → chunk-L3YUKLVL-C7qGJrfV.js} +1 -1
  30. package/dist/web/assets/{chunk-MX3YWQON-C7Vzk_AI.js → chunk-MX3YWQON-BpS_PtKp.js} +1 -1
  31. package/dist/web/assets/{chunk-NQ4KR5QH-BceYBGYX.js → chunk-NQ4KR5QH-wMgTlP7f.js} +1 -1
  32. package/dist/web/assets/{chunk-O4XLMI2P-WPtzgxql.js → chunk-O4XLMI2P-JC6EGoUz.js} +1 -1
  33. package/dist/web/assets/{chunk-OZEHJAEY-DlHXDeLY.js → chunk-OZEHJAEY-BXhYx3nO.js} +1 -1
  34. package/dist/web/assets/{chunk-PQ6SQG4A-Ci_Prygb.js → chunk-PQ6SQG4A-D6BTbCQw.js} +1 -1
  35. package/dist/web/assets/{chunk-PU5JKC2W-CO0zMN-z.js → chunk-PU5JKC2W-Dw8ClWch.js} +1 -1
  36. package/dist/web/assets/chunk-QZHKN3VN-CYaTbeZf.js +1 -0
  37. package/dist/web/assets/{chunk-R5LLSJPH-IAEEzfpM.js → chunk-R5LLSJPH-CFwSJijQ.js} +1 -1
  38. package/dist/web/assets/{chunk-WL4C6EOR-BLXalOgc.js → chunk-WL4C6EOR-DfofndiH.js} +1 -1
  39. package/dist/web/assets/{chunk-XIRO2GV7-Dx1Ri_p2.js → chunk-XIRO2GV7-Djlmrely.js} +1 -1
  40. package/dist/web/assets/{chunk-XPW4576I-m9pPGKn7.js → chunk-XPW4576I-BPQQBakK.js} +1 -1
  41. package/dist/web/assets/{chunk-XZSTWKYB-B_08ExbI.js → chunk-XZSTWKYB-DxAOx4hG.js} +1 -1
  42. package/dist/web/assets/{chunk-YBOYWFTD-DqSOVcYe.js → chunk-YBOYWFTD-CeU4Q-xC.js} +1 -1
  43. package/dist/web/assets/classDiagram-VBA2DB6C-lse8oZoJ.js +1 -0
  44. package/dist/web/assets/classDiagram-v2-RAHNMMFH-CxkwuInd.js +1 -0
  45. package/dist/web/assets/clone-LRxlvnMj.js +1 -0
  46. package/dist/web/assets/code-editor-DTA3c9Y8.js +2 -0
  47. package/dist/web/assets/{cose-bilkent-S5V4N54A-DlL82QHu.js → cose-bilkent-S5V4N54A-B_AWZsOP.js} +1 -1
  48. package/dist/web/assets/csv-preview-DLqYtXxt.js +10 -0
  49. package/dist/web/assets/{dagre-BmVoh2At.js → dagre-Dbb5k38K.js} +1 -1
  50. package/dist/web/assets/{dagre-KLK3FWXG-sDrRW9MQ.js → dagre-KLK3FWXG-BH7aWGRP.js} +1 -1
  51. package/dist/web/assets/database-viewer-DXk79Nel.js +1 -0
  52. package/dist/web/assets/{diagram-E7M64L7V-ChnAhgni.js → diagram-E7M64L7V-B1Qz70Do.js} +1 -1
  53. package/dist/web/assets/{diagram-IFDJBPK2-DW1J1uJd.js → diagram-IFDJBPK2-k55eVqVU.js} +1 -1
  54. package/dist/web/assets/{diagram-P4PSJMXO-CQ32hyG_.js → diagram-P4PSJMXO-BkfNRc9U.js} +1 -1
  55. package/dist/web/assets/diff-viewer-HhIcsOQE.js +4 -0
  56. package/dist/web/assets/dist-DylI9XxN.js +13 -0
  57. package/dist/web/assets/dist-lF8CoYII.js +41 -0
  58. package/dist/web/assets/{erDiagram-INFDFZHY-6CHo6nOw.js → erDiagram-INFDFZHY-CKzVujYI.js} +1 -1
  59. package/dist/web/assets/{flowDiagram-PKNHOUZH-DroDiNT0.js → flowDiagram-PKNHOUZH-DIqcTrDV.js} +1 -1
  60. package/dist/web/assets/{ganttDiagram-A5KZAMGK-DP0QBh8w.js → ganttDiagram-A5KZAMGK-D4v7ZbVE.js} +1 -1
  61. package/dist/web/assets/git-graph-CQtWu8yE.js +1 -0
  62. package/dist/web/assets/gitGraph-HDMCJU4V-Bwna3and.js +1 -0
  63. package/dist/web/assets/{gitGraphDiagram-K3NZZRJ6-DvU3JGZn.js → gitGraphDiagram-K3NZZRJ6-BTXo57mF.js} +1 -1
  64. package/dist/web/assets/{graphlib-CQBb2thr.js → graphlib-BcsNnGcW.js} +1 -1
  65. package/dist/web/assets/index-CgQXpBb_.css +2 -0
  66. package/dist/web/assets/index-DEeeRoka.js +37 -0
  67. package/dist/web/assets/info-3K5VOQVL-_vRxVNUm.js +1 -0
  68. package/dist/web/assets/infoDiagram-LFFYTUFH-B1CX0pbC.js +2 -0
  69. package/dist/web/assets/input-BglMT33g.js +1 -0
  70. package/dist/web/assets/{isEmpty-B4kqZBtn.js → isEmpty-bnrF3Qbc.js} +1 -1
  71. package/dist/web/assets/{ishikawaDiagram-PHBUUO56-46yibrV5.js → ishikawaDiagram-PHBUUO56-BOyvKMmB.js} +1 -1
  72. package/dist/web/assets/{journeyDiagram-4ABVD52K-BcmRwjK-.js → journeyDiagram-4ABVD52K-ufoasAy6.js} +1 -1
  73. package/dist/web/assets/{kanban-definition-K7BYSVSG-B619K53y.js → kanban-definition-K7BYSVSG-Bi0UTUeN.js} +1 -1
  74. package/dist/web/assets/keybindings-store-1CJ7VX57.js +1 -0
  75. package/dist/web/assets/lib-BQ34Db2e.js +4 -0
  76. package/dist/web/assets/{line-1gcO63_w.js → line-B78g-52T.js} +1 -1
  77. package/dist/web/assets/{linear-DfRqDoVd.js → linear-DP4mkX3m.js} +1 -1
  78. package/dist/web/assets/markdown-renderer-Brj8_LQM.js +69 -0
  79. package/dist/web/assets/{mermaid-parser.core-XtjZQOeM.js → mermaid-parser.core-DMIWdgEW.js} +2 -2
  80. package/dist/web/assets/{mindmap-definition-YRQLILUH-CifOFo_q.js → mindmap-definition-YRQLILUH-BsfWvIoO.js} +1 -1
  81. package/dist/web/assets/{ordinal-BJYw-iDX.js → ordinal-_K3x1fkz.js} +1 -1
  82. package/dist/web/assets/packet-RMMSAZCW-DY5PNnZU.js +1 -0
  83. package/dist/web/assets/pie-UPGHQEXC-BHncZutv.js +1 -0
  84. package/dist/web/assets/{pieDiagram-SKSYHLDU-BuHUh_fO.js → pieDiagram-SKSYHLDU-WP0XXw51.js} +1 -1
  85. package/dist/web/assets/postgres-viewer-CwkTGmqy.js +1 -0
  86. package/dist/web/assets/{quadrantDiagram-337W2JSQ-Bau_hj6Z.js → quadrantDiagram-337W2JSQ-FHMogtsh.js} +1 -1
  87. package/dist/web/assets/radar-KQ55EAFF-DH0AOkUy.js +1 -0
  88. package/dist/web/assets/react-dom-Bpkvzu3U.js +1 -0
  89. package/dist/web/assets/{requirementDiagram-Z7DCOOCP-Cq2b-uwp.js → requirementDiagram-Z7DCOOCP-BatTxyWb.js} +1 -1
  90. package/dist/web/assets/{sankeyDiagram-WA2Y5GQK-DrdGQxWQ.js → sankeyDiagram-WA2Y5GQK-ClJuW3Hv.js} +1 -1
  91. package/dist/web/assets/{sequenceDiagram-2WXFIKYE-qPxiTUcS.js → sequenceDiagram-2WXFIKYE-ByxQqGgs.js} +1 -1
  92. package/dist/web/assets/settings-tab-BDE1MsIh.js +1 -0
  93. package/dist/web/assets/sqlite-viewer-CFYTwgA8.js +1 -0
  94. package/dist/web/assets/{stateDiagram-RAJIS63D-Dulj2oa8.js → stateDiagram-RAJIS63D-f8opcZNY.js} +1 -1
  95. package/dist/web/assets/stateDiagram-v2-FVOUBMTO-DrxVDY9q.js +1 -0
  96. package/dist/web/assets/tab-store-BJw7OCmy.js +1 -0
  97. package/dist/web/assets/{terminal-tab-wKgpSPAT.js → terminal-tab-CCDLZA5Y.js} +2 -2
  98. package/dist/web/assets/{timeline-definition-YZTLITO2-BWyDnCYq.js → timeline-definition-YZTLITO2-58BlOSf9.js} +1 -1
  99. package/dist/web/assets/treemap-KZPCXAKY-B2Xkyv-K.js +1 -0
  100. package/dist/web/assets/use-monaco-theme-CNzekTN3.js +11 -0
  101. package/dist/web/assets/{vennDiagram-LZ73GAT5-B9Iv2bNV.js → vennDiagram-LZ73GAT5-BOSy9ma9.js} +1 -1
  102. package/dist/web/assets/{xychartDiagram-JWTSCODW-ChXcMzBQ.js → xychartDiagram-JWTSCODW-z5MVJauZ.js} +1 -1
  103. package/dist/web/index.html +12 -11
  104. package/dist/web/sw.js +1 -1
  105. package/docs/code-standards.md +232 -7
  106. package/docs/codebase-summary.md +9 -3
  107. package/docs/design-guidelines.md +21 -0
  108. package/docs/project-changelog.md +115 -1
  109. package/docs/project-roadmap.md +41 -19
  110. package/docs/system-architecture.md +212 -15
  111. package/package.json +3 -2
  112. package/src/cli/commands/autostart.ts +1 -1
  113. package/src/cli/commands/restart.ts +9 -1
  114. package/src/cli/commands/status.ts +19 -0
  115. package/src/index.ts +2 -3
  116. package/src/providers/claude-agent-sdk.ts +92 -25
  117. package/src/providers/mock-provider.ts +6 -1
  118. package/src/server/index.ts +38 -166
  119. package/src/server/routes/browser-preview.ts +159 -0
  120. package/src/server/routes/chat.ts +52 -3
  121. package/src/server/routes/project-scoped.ts +2 -0
  122. package/src/server/routes/proxy.ts +46 -53
  123. package/src/server/routes/tunnel.ts +0 -32
  124. package/src/server/routes/workspace.ts +35 -0
  125. package/src/server/ws/chat.ts +207 -146
  126. package/src/services/account-selector.service.ts +16 -8
  127. package/src/services/account.service.ts +19 -13
  128. package/src/services/claude-usage.service.ts +48 -11
  129. package/src/services/cloud-ws.service.ts +227 -0
  130. package/src/services/cloud.service.ts +10 -6
  131. package/src/services/db.service.ts +111 -6
  132. package/src/services/proxy.service.ts +4 -19
  133. package/src/services/supervisor.ts +285 -25
  134. package/src/types/api.ts +9 -1
  135. package/src/types/chat.ts +3 -1
  136. package/src/web/app.tsx +41 -35
  137. package/src/web/components/browser/browser-tab.tsx +106 -97
  138. package/src/web/components/chat/account-rotation-settings.tsx +163 -0
  139. package/src/web/components/chat/chat-history-bar.tsx +72 -6
  140. package/src/web/components/chat/chat-tab.tsx +32 -16
  141. package/src/web/components/chat/chat-welcome.tsx +148 -0
  142. package/src/web/components/chat/message-input.tsx +107 -13
  143. package/src/web/components/chat/message-list.tsx +27 -15
  144. package/src/web/components/chat/session-picker.tsx +78 -31
  145. package/src/web/components/chat/usage-badge.tsx +11 -1
  146. package/src/web/components/editor/code-editor.tsx +36 -26
  147. package/src/web/components/editor/csv-preview.tsx +228 -0
  148. package/src/web/components/editor/editor-breadcrumb.tsx +216 -0
  149. package/src/web/components/editor/editor-toolbar.tsx +74 -0
  150. package/src/web/components/layout/command-palette.tsx +3 -1
  151. package/src/web/components/layout/editor-panel.tsx +162 -18
  152. package/src/web/components/layout/panel-layout.tsx +17 -1
  153. package/src/web/components/settings/proxy-settings-section.tsx +40 -42
  154. package/src/web/components/shared/connection-lost-overlay.tsx +89 -0
  155. package/src/web/hooks/use-chat.ts +211 -201
  156. package/src/web/hooks/use-global-keybindings.ts +25 -2
  157. package/src/web/hooks/use-server-reload.ts +9 -0
  158. package/src/web/hooks/use-url-sync.ts +173 -21
  159. package/src/web/hooks/use-voice-input.ts +111 -0
  160. package/src/web/lib/csv-parser.ts +134 -0
  161. package/src/web/stores/connection-store.ts +39 -0
  162. package/src/web/stores/keybindings-store.ts +1 -0
  163. package/src/web/stores/panel-store.ts +73 -19
  164. package/src/web/stores/panel-utils.ts +145 -3
  165. package/dist/web/assets/api-settings-CFw-lh5k.js +0 -1
  166. package/dist/web/assets/architecture-PBZL5I3N-CJupe6q_.js +0 -1
  167. package/dist/web/assets/browser-tab-CmsL5eny.js +0 -1
  168. package/dist/web/assets/channel-DmKoFTd_.js +0 -1
  169. package/dist/web/assets/chat-tab-CFWsf13Z.js +0 -7
  170. package/dist/web/assets/chunk-GLR3WWYH-BnP-hOp6.js +0 -2
  171. package/dist/web/assets/chunk-HHEYEP7N-DKDPTPEZ.js +0 -1
  172. package/dist/web/assets/chunk-QZHKN3VN-C_wpI9wz.js +0 -1
  173. package/dist/web/assets/classDiagram-VBA2DB6C-B1T5uY-F.js +0 -1
  174. package/dist/web/assets/classDiagram-v2-RAHNMMFH-xs5vI3xC.js +0 -1
  175. package/dist/web/assets/clone-CijCFRT5.js +0 -1
  176. package/dist/web/assets/code-editor-H_dAh_fJ.js +0 -1
  177. package/dist/web/assets/database-viewer-DBzsgEJ8.js +0 -1
  178. package/dist/web/assets/diff-viewer-DzS-OnAR.js +0 -4
  179. package/dist/web/assets/dist-0Va_2L7G.js +0 -16
  180. package/dist/web/assets/dist-D9irYETY.js +0 -41
  181. package/dist/web/assets/git-graph-D3C7F8o3.js +0 -1
  182. package/dist/web/assets/gitGraph-HDMCJU4V-B0KvGQG8.js +0 -1
  183. package/dist/web/assets/index-CIkjfera.js +0 -31
  184. package/dist/web/assets/index-WKLuYsBY.css +0 -2
  185. package/dist/web/assets/info-3K5VOQVL-1uJ6_hCm.js +0 -1
  186. package/dist/web/assets/infoDiagram-LFFYTUFH-DLA5Q-3y.js +0 -2
  187. package/dist/web/assets/input-CGp1nFIg.js +0 -1
  188. package/dist/web/assets/keybindings-store-BdaoLwSo.js +0 -1
  189. package/dist/web/assets/markdown-renderer-DH49Zag7.js +0 -69
  190. package/dist/web/assets/packet-RMMSAZCW-34C4o9yj.js +0 -1
  191. package/dist/web/assets/pie-UPGHQEXC-D9ekKlh9.js +0 -1
  192. package/dist/web/assets/postgres-viewer-B9FYk8sD.js +0 -1
  193. package/dist/web/assets/radar-KQ55EAFF-DEuXOXSD.js +0 -1
  194. package/dist/web/assets/settings-store-DWXGVHsE.js +0 -2
  195. package/dist/web/assets/settings-tab-D-q8pd-5.js +0 -1
  196. package/dist/web/assets/sqlite-viewer-CDqcTePw.js +0 -1
  197. package/dist/web/assets/stateDiagram-v2-FVOUBMTO-CAkzLlhk.js +0 -1
  198. package/dist/web/assets/tab-store-BPeiymiH.js +0 -1
  199. package/dist/web/assets/treemap-KZPCXAKY-nc7a1Ia1.js +0 -1
  200. package/dist/web/assets/use-monaco-theme-CCBTQ0S3.js +0 -11
  201. package/src/services/port-tunnel.service.ts +0 -97
  202. /package/dist/web/assets/{api-client-DOElml5u.js → api-client-BfBM3I7n.js} +0 -0
  203. /package/dist/web/assets/{array-CYkMkqnU.js → array-B9UHiPd-.js} +0 -0
  204. /package/dist/web/assets/{columns-2-ChOTgl3e.js → columns-2-DpsNbZOc.js} +0 -0
  205. /package/dist/web/assets/{cytoscape.esm-HeHO0VhB.js → cytoscape.esm-BW-DbntU.js} +0 -0
  206. /package/dist/web/assets/{defaultLocale-Beh6XjaL.js → defaultLocale-5eAKkKJC.js} +0 -0
  207. /package/dist/web/assets/{dist-BUYzeuKe.js → dist-CSJdAyA9.js} +0 -0
  208. /package/dist/web/assets/{init-Rr1s_RiX.js → init-DlZdxViB.js} +0 -0
  209. /package/dist/web/assets/{isArrayLikeObject-BB-mzMLb.js → isArrayLikeObject-B_v2FtYn.js} +0 -0
  210. /package/dist/web/assets/{katex-CKoArbIw.js → katex-Bqvo_ZG0.js} +0 -0
  211. /package/dist/web/assets/{math-B7b0HgJF.js → math-069Z4SuC.js} +0 -0
  212. /package/dist/web/assets/{path-BAQ3hXlG.js → path-6uRLdFF7.js} +0 -0
  213. /package/dist/web/assets/{preload-helper-DeiOTZKJ.js → preload-helper-uTix4PVD.js} +0 -0
  214. /package/dist/web/assets/{react-Dev-wu-s.js → react-ER-4DN55.js} +0 -0
  215. /package/dist/web/assets/{rough.esm-Dwml_la6.js → rough.esm-JX0wREDd.js} +0 -0
  216. /package/dist/web/assets/{src-B_cC68fH.js → src-BqX54PbV.js} +0 -0
  217. /package/dist/web/assets/{table-COiJDPRA.js → table-C7X5UAEI.js} +0 -0
  218. /package/dist/web/assets/{tag-LMq02LfE.js → tag-CCtdV063.js} +0 -0
  219. /package/dist/web/assets/{utils-btZ8C8-R.js → utils-BNytJOb1.js} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,14 +1,202 @@
1
1
  # Changelog
2
2
 
3
- ## [0.8.86] - 2026-04-01
3
+ ## [0.8.87] - 2026-04-01
4
+
5
+ ### Fixed
6
+ - **Session message loss on auth retry**: OAuth token expiry mid-query (e.g. during long bash commands) caused retry to create a new SDK session, overwriting the session mapping and losing all prior messages. Retry now resumes existing session instead.
7
+ - **Session CWD fallback to homedir**: `resumeSession()` didn't restore `projectPath` from SDK metadata, causing queries to use `$HOME` as CWD and JSONL to be stored under wrong project. Now extracts `cwd` from SDK session data.
8
+
9
+ ## [0.8.85] - 2026-04-01
4
10
 
5
11
  ### Added
6
- - **Browser tab**: Embedded browser tab for previewing local dev servers with port tunnel support
7
- - **Port tunnels**: Per-port Cloudflare tunnels for browser tab preview (`/api/tunnel/port/start|stop|list`)
12
+ - **Connection lost overlay**: Full-screen overlay when API unreachable for >15s tunnel mode links to PPM Cloud for new URL, localhost mode shows restart hint
8
13
 
9
14
  ### Fixed
10
- - **Session message loss on auth retry**: OAuth token expiry mid-query (e.g. during long bash commands) caused retry to create a new SDK session, overwriting the session mapping and losing all prior messages. Retry now resumes existing session instead.
11
- - **Session CWD fallback to homedir**: `resumeSession()` didn't restore `projectPath` from SDK metadata, causing queries to use `$HOME` as CWD. Now extracts `cwd` from SDK session data.
15
+ - **Double-Shift command palette**: Only triggers when Shift pressed alone no longer fires during Shift+key combos (uppercase typing, shortcuts)
16
+
17
+ ## [0.8.84] - 2026-04-01
18
+
19
+ ### Fixed
20
+ - **Account import overwrite**: Import now updates tokens for existing accounts even when they already have a (possibly expired/corrupt) refresh token — previously skipped, causing "0 imported"
21
+ - **Tunnel probe adopted PID**: Supervisor now monitors adopted tunnel processes and respawns if they die
22
+
23
+ ### Added
24
+ - **Account rotation settings**: Settings gear icon in Usage & Accounts panel for rotation/retry config
25
+
26
+ ## [0.8.83] - 2026-04-01
27
+
28
+ ### Fixed
29
+ - **Account label desync**: Status bar now shows the actual streaming account label (real-time) instead of stale `lastPickedId` from usage polling — matches "via X" shown in chat messages when using multi-account round-robin
30
+
31
+ ## [0.8.82] - 2026-04-01
32
+
33
+ ### Added
34
+ - **Thinking block auto-scroll**: Thinking content now auto-scrolls to bottom during streaming using `StickToBottom`
35
+ - **Expandable recent sessions**: "Show more" / "Show less" button on chat welcome and empty panel — fetches up to 20 sessions, shows 5 initially
36
+
37
+ ## [0.8.81] - 2026-04-01
38
+
39
+ ### Fixed
40
+ - **Usage polling**: Re-wire `startUsagePolling()` into server startup — accidentally removed during supervisor refactor, causing prod to never auto-fetch usage limits (only manual refresh worked)
41
+
42
+ ## [0.8.80] - 2026-04-01
43
+
44
+ ### Added
45
+ - **Cloud command ack**: Device sends `command_ack` immediately when receiving a cloud command, before processing — allows cloud to confirm receipt and update UI
46
+
47
+ ## [0.8.79] - 2026-04-01
48
+
49
+ ### Added
50
+ - **Chat welcome screen**: New chat tabs now show pinned and recent sessions (same as empty panel) instead of a bare placeholder — quick access to continue previous conversations
51
+
52
+ ## [0.8.78] - 2026-04-01
53
+
54
+ ### Fixed
55
+ - **Cloud version reporting**: Supervisor heartbeat now reads version from running server child (via `status.json`) instead of its own captured constant — after `ppm restart` or `bunx @hienlh/ppm@latest restart`, cloud dashboard correctly reflects the updated version
56
+
57
+ ## [0.8.77] - 2026-04-01
58
+
59
+ ### Added
60
+ - **Deterministic tab IDs**: Tabs now use `{type}:{identifier}` format (e.g., `editor:src/index.ts`) instead of random UUIDs — enables deduplication, shareable URLs, and cross-device persistence
61
+ - **Type-based URLs**: URLs reflect tab content — `/project/my-app/editor/src/index.ts`, `/project/my-app/chat/claude-agent-sdk/session-abc`
62
+ - **Backend workspace sync**: New `workspace_state` table (DB v10) with GET/PUT `/api/project/:name/workspace` endpoints — tab layout persists server-side with per-project debounce and latest-wins merge
63
+ - **Deep linking**: Opening a URL auto-restores workspace from server and focuses the target tab
64
+ - **Split-duplicate support**: Same file can open in multiple panels using `@panel-id` suffix on non-singleton tab types
65
+
66
+ ### Changed
67
+ - **URL format**: From `/project/{name}/tab/{randomId}` to `/project/{name}/{type}/{path}` — old random-ID URLs gracefully ignored
68
+ - **Tab migration**: `migrateTabIds()` automatically converts old random tab IDs to deterministic format on project load
69
+ - **Singleton dedup**: Only `git-graph` and `settings` tabs are globally deduplicated; editor/chat/terminal tabs allow split duplicates
70
+
71
+ ## [0.8.76] - 2026-04-01
72
+
73
+ ### Fixed
74
+ - **SDK error messages**: 500/5xx server errors and 429 rate-limits now show correct user-facing messages instead of confusing "unknown API error" with debug instructions
75
+ - **Session title on resume**: Prioritize DB-stored title when resuming a chat session
76
+
77
+ ## [0.8.75] - 2026-04-01
78
+
79
+ ### Changed
80
+ - **Tunnel always enabled**: `ppm start` now always starts Cloudflare tunnel — `--share` flag deprecated (still accepted, no-op)
81
+
82
+ ## [0.8.74] - 2026-04-01
83
+
84
+ ### Fixed
85
+ - **Cloud WS reconnect loop**: Stale WebSocket closure handlers from replaced connections no longer reset module state
86
+ - **Cloud WS auth race**: Delay heartbeat/queue flush 500ms after auth to let server complete async DB auth — prevents 4002 rejection
87
+
88
+ ## [0.8.72] - 2026-03-31
89
+
90
+ ### Added
91
+ - **Supervisor state machine**: States `running → paused → upgrading` with promise-based wait/resume. Supervisor pauses after 10 consecutive crashes, resumes via `ppm restart --force` or SIGUSR2
92
+ - **Cloud WebSocket client**: Persistent WS connection from supervisor to PPM Cloud replacing HTTP heartbeat — auto-reconnect with exponential backoff + jitter, 60s heartbeat, 50-message offline queue
93
+ - **Remote commands via Cloud**: Supervisor handles restart/stop/upgrade/resume/status commands received from Cloud WS
94
+ - **`ppm restart --force`**: Resume a paused supervisor (crashed too many times)
95
+ - **Status CLI state display**: `ppm status` shows paused/upgrading state with reason, timestamp, and last crash error
96
+
97
+ ### Changed
98
+ - **Foreground mode removed**: `ppm start` no longer accepts `-f`/`--foreground` — always runs as supervised daemon
99
+ - **Heartbeat via WS**: Cloud heartbeat migrated from HTTP polling (5min) to WebSocket (60s), includes `appVersion`, `serverPid`, `uptime`
100
+
101
+ ### Fixed
102
+ - **Upgrade failure recovery**: `selfReplace` failure now correctly resets state from "upgrading" back to "running" and notifies Cloud
103
+
104
+ ## [0.8.71] - 2026-03-31
105
+
106
+ ### Added
107
+ - **Pin/Save sessions**: Pin important chat sessions to always appear at the top of history, empty state, and session picker — persisted in DB across devices
108
+ - Mobile-friendly: pin/rename/delete buttons always visible on mobile, hover-reveal on desktop
109
+
110
+ ### Fixed
111
+ - Fixed duplicate import in chat routes
112
+ - Fixed session action buttons misaligned when date column has variable width
113
+
114
+ ## [0.8.70] - 2026-03-31
115
+
116
+ ### Added
117
+ - **Recent chats on empty state**: When no tabs are open, show up to 5 recent chat sessions for quick access — click to reopen directly
118
+
119
+ ## [0.8.69] - 2026-03-31
120
+
121
+ ### Fixed
122
+ - **Auth 401 auto-retry**: Detect 401 errors returned as assistant text content (SDK doesn't always set error field) — refresh OAuth token and retry with fresh session automatically instead of showing raw error to user
123
+ - **Result-level 401 retry**: 401 in SDK result events now triggers token refresh + retry (previously only refreshed without retrying)
124
+
125
+ ### Added
126
+ - **Account retry notification**: FE shows inline status when auth retry happens (e.g. "↻ Token refreshed — retrying with **Alex**...")
127
+ - **Session debug button**: Bug icon in chat toolbar copies session IDs + JSONL path to clipboard for quick debugging
128
+
129
+ ## [0.8.68] - 2026-03-31
130
+
131
+ ### Fixed
132
+ - **Hot-reload timer leak**: Background polling timers (usage fetch, account refresh, cloud heartbeat) leaked on Bun `--hot` reload — module-level vars reset but old timers kept running, causing 221+ concurrent timers and ~38K 429 errors/day. Moved timer refs to `globalThis` to survive reloads.
133
+
134
+ ## [0.8.67] - 2026-03-29
135
+
136
+ ### Improved
137
+ - **CSV cell word wrap**: Wrap toggle now applies to CSV table cells (same button as code editor word wrap)
138
+ - **CSV inline editing**: Cell editor upgraded from single-line input to auto-resizing textarea — supports multi-line content, Shift+Enter for newlines, Enter to save
139
+
140
+ ## [0.8.66] - 2026-03-29
141
+
142
+ ### Fixed
143
+ - **Auto-upgrade port conflict**: Supervisor self-replace now sets `shuttingDown` flag before killing server, preventing crash-restart loop from respawning on the same port as the new supervisor
144
+ - **Account cooldown re-enable**: Handle expired accounts that cannot be re-enabled during cooldown clear — disable them instead of crashing
145
+ - **Hot-reload log duplication**: Guard `setupLogFile()` against re-wrapping console on `bun --hot` module re-execution
146
+
147
+ ## [0.8.65] - 2026-03-29
148
+
149
+ ### Added
150
+ - **Editor breadcrumb bar**: VSCode-style path breadcrumb with nested dropdown navigation from file tree. Click segment to see siblings, click file to switch, Ctrl+Click to open new tab. Desktop only.
151
+ - **Editor toolbar**: Right-aligned contextual actions — Markdown Edit/Preview toggle, CSV Table/Raw toggle, Word Wrap toggle. Replaces previously dead button code.
152
+ - **CSV table preview**: `@tanstack/react-table` viewer with virtual scrolling (handles 10K+ rows), inline cell editing, column sorting, column resizing, and auto-save. State-machine CSV parser handles quoted fields, escaped quotes, and embedded newlines.
153
+
154
+ ### Fixed
155
+ - **Chat session titles**: Persist session titles in PPM DB to prevent SDK from overwriting user-set titles
156
+ - **Chat abort error**: Suppress abort error toast when user cancels an in-progress chat
157
+ - **Usage polling**: Clear stale inflight poll on race timeout; add id tiebreaker to snapshot queries
158
+
159
+ ## [0.8.64] - 2026-03-27
160
+
161
+ ### Fixed
162
+ - **Usage polling dedup**: Concurrent `pollOnce` calls now share a single in-flight fetch instead of hammering the API
163
+ - **429 cooldown floor**: Minimum 60s cooldown on 429 responses, even if `retry-after` header is lower
164
+
165
+ ### Added
166
+ - **Browser preview tests**: Unit tests (12) for tunnel route validation and lifecycle; integration test (6) verifying real Cloudflare tunnel creation and access
167
+
168
+ ## [0.8.63] - 2026-03-27
169
+
170
+ ### Changed
171
+ - **Browser preview tab rewrite**: Replaced fragile reverse proxy (HTML/JS/CSS path rewriting) with per-port Cloudflare Quick Tunnels. User enters a port, PPM starts a tunnel, iframe loads the tunnel URL — all assets, HMR, fonts work natively. Ghost tunnels auto-cleaned every 30s. All tunnels killed on server shutdown.
172
+
173
+ ## [0.8.62] - 2026-03-26
174
+
175
+ ### Added
176
+ - **Voice input in chat**: Mic button in chat input (mobile + desktop) using Web Speech API. Streams real-time interim results, appends to existing text, default language vi-VN. Button hidden on unsupported browsers.
177
+ - **Voice input keyboard shortcut**: `Cmd+Shift+V` (Mac) / `Ctrl+Shift+V` (Win/Linux) toggles voice input globally. Customizable in Settings > Keyboard Shortcuts.
178
+ - **Voice Input in Command Palette**: Search "voice", "mic", or "speech" to toggle voice input from the palette.
179
+
180
+ ## [0.8.61] - 2026-03-26
181
+
182
+ ### Added
183
+ - **Browser preview tab**: Embed localhost web apps inside PPM via an iframe with reverse proxy. Includes toolbar with back/forward navigation, reload, address bar, and "Open in Browser" button. Supports any localhost port; external URLs load directly in iframe. Open via Command Palette → "Open Browser".
184
+
185
+ ## [0.8.60] - 2026-03-26
186
+
187
+ ### Fixed
188
+ - **Chat input drops uploading files on send**: Pressing send while files are still uploading now queues the message and auto-sends once all uploads complete, instead of silently dropping in-progress attachments. Send button shows spinner when queued; clicking again cancels.
189
+ - **Ping interval leak**: `evictClient()` clears ping interval when broadcast error removes client
190
+ - **Black screen after closing all tabs**: Panel auto-close used `Object.keys(panels)` which counted keep-alive panels from other projects — last panel got removed, leaving empty grid. Now uses `grid.flat().length` to count only current-project panels. Added defensive recovery in PanelLayout for empty grid.
191
+
192
+ ## [0.8.59] - 2026-03-26
193
+
194
+ ### Fixed
195
+ - **Usage polling chain breaking permanently**: `startUsagePolling` recursive setTimeout chain now uses `Promise.race` with 60s timeout guard and `try/finally` — if `pollOnce` hangs or rejects, `scheduleNext` still runs
196
+ - **OAuth token refresh hanging forever**: `refreshAccessToken` fetch now has 15s `AbortSignal.timeout` — prevents blocking usage polling and auto-refresh when Anthropic OAuth is slow/unresponsive
197
+
198
+ ### Changed
199
+ - **Account selector sustainability scoring**: Raise cap from 1.0 to 2.0 (scaled /2) so accounts with imminent weekly reset score higher than accounts with more remaining capacity but far-off resets
12
200
 
13
201
  ## [0.8.58] - 2026-03-26
14
202
 
package/bun.lock CHANGED
@@ -12,6 +12,7 @@
12
12
  "@radix-ui/react-switch": "^1.2.6",
13
13
  "@skitee3000/bun-pty": "^0.3.3",
14
14
  "@tanstack/react-table": "^8.21.3",
15
+ "@tanstack/react-virtual": "^3.13.23",
15
16
  "@uiw/react-codemirror": "^4.25.8",
16
17
  "@xterm/addon-fit": "^0.11.0",
17
18
  "@xterm/addon-web-links": "^0.12.0",
@@ -651,8 +652,12 @@
651
652
 
652
653
  "@tanstack/react-table": ["@tanstack/react-table@8.21.3", "", { "dependencies": { "@tanstack/table-core": "8.21.3" }, "peerDependencies": { "react": ">=16.8", "react-dom": ">=16.8" } }, "sha512-5nNMTSETP4ykGegmVkhjcS8tTLW6Vl4axfEGQN3v0zdHYbK4UfoqfPChclTrJ4EoK9QynqAu9oUf8VEmrpZ5Ww=="],
653
654
 
655
+ "@tanstack/react-virtual": ["@tanstack/react-virtual@3.13.23", "", { "dependencies": { "@tanstack/virtual-core": "3.13.23" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-XnMRnHQ23piOVj2bzJqHrRrLg4r+F86fuBcwteKfbIjJrtGxb4z7tIvPVAe4B+4UVwo9G4Giuz5fmapcrnZ0OQ=="],
656
+
654
657
  "@tanstack/table-core": ["@tanstack/table-core@8.21.3", "", {}, "sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg=="],
655
658
 
659
+ "@tanstack/virtual-core": ["@tanstack/virtual-core@3.13.23", "", {}, "sha512-zSz2Z2HNyLjCplANTDyl3BcdQJc2k1+yyFoKhNRmCr7V7dY8o8q5m8uFTI1/Pg1kL+Hgrz6u3Xo6eFUB7l66cg=="],
660
+
656
661
  "@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="],
657
662
 
658
663
  "@types/bun": ["@types/bun@1.3.10", "", { "dependencies": { "bun-types": "1.3.10" } }, "sha512-0+rlrUrOrTSskibryHbvQkDOWRJwJZqZlxrUs1u4oOoTln8+WIXBPmAuCF35SWB2z4Zl3E84Nl/D0P7803nigQ=="],
@@ -1 +1 @@
1
- import{A as e,B as t,C as n,E as r,H as i,M as a,U as o,V as s,k as c,p as l,w as u,z as d}from"./isArrayLikeObject-BB-mzMLb.js";import{A as f,C as p,D as m,M as h,N as g,S as _,T as v,f as y,h as b,u as x,w as S}from"./_baseUniq-DimLlN0y.js";var C=/\s/;function w(e){for(var t=e.length;t--&&C.test(e.charAt(t)););return t}var ee=/^\s+/;function T(e){return e&&e.slice(0,w(e)+1).replace(ee,``)}var E=NaN,D=/^[-+]0x[0-9a-f]+$/i,O=/^0b[01]+$/i,k=/^0o[0-7]+$/i,A=parseInt;function j(e){if(typeof e==`number`)return e;if(g(e))return E;if(t(e)){var n=typeof e.valueOf==`function`?e.valueOf():e;e=t(n)?n+``:n}if(typeof e!=`string`)return e===0?e:+e;e=T(e);var r=O.test(e);return r||k.test(e)?A(e.slice(2),r?2:8):D.test(e)?E:+e}var M=1/0,N=17976931348623157e292;function P(e){return e?(e=j(e),e===M||e===-M?(e<0?-1:1)*N:e===e?e:0):e===0?e:0}function F(e){var t=P(e),n=t%1;return t===t?n?t-n:t:0}function I(e){return e!=null&&e.length?_(e,1):[]}var L=Object.prototype,R=L.hasOwnProperty,z=r(function(t,r){t=Object(t);var i=-1,a=r.length,o=a>2?r[2]:void 0;for(o&&n(r[0],r[1],o)&&(a=1);++i<a;)for(var s=r[i],c=l(s),u=-1,d=c.length;++u<d;){var f=c[u],p=t[f];(p===void 0||e(p,L[f])&&!R.call(t,f))&&(t[f]=s[f])}return t});function B(e){var t=e==null?0:e.length;return t?e[t-1]:void 0}function V(e){return function(t,n,r){var i=Object(t);if(!u(t)){var a=y(n,3);t=m(t),n=function(e){return a(i[e],e,i)}}var o=e(t,n,r);return o>-1?i[a?t[o]:o]:void 0}}var H=Math.max;function U(e,t,n){var r=e==null?0:e.length;if(!r)return-1;var i=n==null?0:F(n);return i<0&&(i=H(r+i,0)),f(e,y(t,3),i)}var W=V(U);function G(e,t){var n=-1,r=u(e)?Array(e.length):[];return x(e,function(e,i,a){r[++n]=t(e,i,a)}),r}function K(e,t){return(s(e)?h:G)(e,y(t,3))}var q=Object.prototype.hasOwnProperty;function J(e,t){return e!=null&&q.call(e,t)}function Y(e,t){return e!=null&&b(e,t,J)}var X=`[object String]`;function Z(e){return typeof e==`string`||!s(e)&&i(e)&&o(e)==X}function Q(e,t){return e<t}function $(e,t,n){for(var r=-1,i=e.length;++r<i;){var a=e[r],o=t(a);if(o!=null&&(s===void 0?o===o&&!g(o):n(o,s)))var s=o,c=a}return c}function te(e){return e&&e.length?$(e,d,Q):void 0}function ne(e,n,r,i){if(!t(e))return e;n=v(n,e);for(var o=-1,s=n.length,l=s-1,u=e;u!=null&&++o<s;){var d=S(n[o]),f=r;if(d===`__proto__`||d===`constructor`||d===`prototype`)return e;if(o!=l){var p=u[d];f=i?i(p,d,u):void 0,f===void 0&&(f=t(p)?p:a(n[o+1])?[]:{})}c(u,d,f),u=u[d]}return e}function re(e,t,n){for(var r=-1,i=t.length,a={};++r<i;){var o=t[r],s=p(e,o);n(s,o)&&ne(a,v(o,e),s)}return a}export{Z as a,G as c,z as d,I as f,Q as i,W as l,P as m,te as n,Y as o,F as p,$ as r,K as s,re as t,B as u};
1
+ import{A as e,B as t,C as n,E as r,H as i,M as a,U as o,V as s,k as c,p as l,w as u,z as d}from"./isArrayLikeObject-B_v2FtYn.js";import{A as f,C as p,D as m,M as h,N as g,S as _,T as v,f as y,h as b,u as x,w as S}from"./_baseUniq-BT4Ow4Kk.js";var C=/\s/;function w(e){for(var t=e.length;t--&&C.test(e.charAt(t)););return t}var ee=/^\s+/;function T(e){return e&&e.slice(0,w(e)+1).replace(ee,``)}var E=NaN,D=/^[-+]0x[0-9a-f]+$/i,O=/^0b[01]+$/i,k=/^0o[0-7]+$/i,A=parseInt;function j(e){if(typeof e==`number`)return e;if(g(e))return E;if(t(e)){var n=typeof e.valueOf==`function`?e.valueOf():e;e=t(n)?n+``:n}if(typeof e!=`string`)return e===0?e:+e;e=T(e);var r=O.test(e);return r||k.test(e)?A(e.slice(2),r?2:8):D.test(e)?E:+e}var M=1/0,N=17976931348623157e292;function P(e){return e?(e=j(e),e===M||e===-M?(e<0?-1:1)*N:e===e?e:0):e===0?e:0}function F(e){var t=P(e),n=t%1;return t===t?n?t-n:t:0}function I(e){return e!=null&&e.length?_(e,1):[]}var L=Object.prototype,R=L.hasOwnProperty,z=r(function(t,r){t=Object(t);var i=-1,a=r.length,o=a>2?r[2]:void 0;for(o&&n(r[0],r[1],o)&&(a=1);++i<a;)for(var s=r[i],c=l(s),u=-1,d=c.length;++u<d;){var f=c[u],p=t[f];(p===void 0||e(p,L[f])&&!R.call(t,f))&&(t[f]=s[f])}return t});function B(e){var t=e==null?0:e.length;return t?e[t-1]:void 0}function V(e){return function(t,n,r){var i=Object(t);if(!u(t)){var a=y(n,3);t=m(t),n=function(e){return a(i[e],e,i)}}var o=e(t,n,r);return o>-1?i[a?t[o]:o]:void 0}}var H=Math.max;function U(e,t,n){var r=e==null?0:e.length;if(!r)return-1;var i=n==null?0:F(n);return i<0&&(i=H(r+i,0)),f(e,y(t,3),i)}var W=V(U);function G(e,t){var n=-1,r=u(e)?Array(e.length):[];return x(e,function(e,i,a){r[++n]=t(e,i,a)}),r}function K(e,t){return(s(e)?h:G)(e,y(t,3))}var q=Object.prototype.hasOwnProperty;function J(e,t){return e!=null&&q.call(e,t)}function Y(e,t){return e!=null&&b(e,t,J)}var X=`[object String]`;function Z(e){return typeof e==`string`||!s(e)&&i(e)&&o(e)==X}function Q(e,t){return e<t}function $(e,t,n){for(var r=-1,i=e.length;++r<i;){var a=e[r],o=t(a);if(o!=null&&(s===void 0?o===o&&!g(o):n(o,s)))var s=o,c=a}return c}function te(e){return e&&e.length?$(e,d,Q):void 0}function ne(e,n,r,i){if(!t(e))return e;n=v(n,e);for(var o=-1,s=n.length,l=s-1,u=e;u!=null&&++o<s;){var d=S(n[o]),f=r;if(d===`__proto__`||d===`constructor`||d===`prototype`)return e;if(o!=l){var p=u[d];f=i?i(p,d,u):void 0,f===void 0&&(f=t(p)?p:a(n[o+1])?[]:{})}c(u,d,f),u=u[d]}return e}function re(e,t,n){for(var r=-1,i=t.length,a={};++r<i;){var o=t[r],s=p(e,o);n(s,o)&&ne(a,v(o,e),s)}return a}export{Z as a,G as c,z as d,I as f,Q as i,W as l,P as m,te as n,Y as o,F as p,$ as r,K as s,re as t,B as u};
@@ -1 +1 @@
1
- import{A as e,B as t,F as n,H as r,M as i,O as a,T as o,U as s,V as c,W as l,_ as u,a as d,b as f,c as p,d as m,g as h,h as g,i as _,k as v,l as y,n as ee,o as b,p as x,r as te,s as ne,u as re,v as ie,w as S,y as C,z as w}from"./isArrayLikeObject-BB-mzMLb.js";import{i as ae,n as T,r as E}from"./isEmpty-B4kqZBtn.js";var oe=`[object Symbol]`;function D(e){return typeof e==`symbol`||r(e)&&s(e)==oe}function O(e,t){for(var n=-1,r=e==null?0:e.length,i=Array(r);++n<r;)i[n]=t(e[n],n,e);return i}var se=1/0,ce=l?l.prototype:void 0,le=ce?ce.toString:void 0;function ue(e){if(typeof e==`string`)return e;if(c(e))return O(e,ue)+``;if(D(e))return le?le.call(e):``;var t=e+``;return t==`0`&&1/e==-se?`-0`:t}function de(){}function fe(e,t){for(var n=-1,r=e==null?0:e.length;++n<r&&t(e[n],n,e)!==!1;);return e}function pe(e,t,n,r){for(var i=e.length,a=n+(r?1:-1);r?a--:++a<i;)if(t(e[a],a,e))return a;return-1}function me(e){return e!==e}function he(e,t,n){for(var r=n-1,i=e.length;++r<i;)if(e[r]===t)return r;return-1}function ge(e,t,n){return t===t?he(e,t,n):pe(e,me,n)}function _e(e,t){return!!(e!=null&&e.length)&&ge(e,t,0)>-1}function k(e){return S(e)?g(e):ae(e)}var ve=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ye=/^\w*$/;function A(e,t){if(c(e))return!1;var n=typeof e;return n==`number`||n==`symbol`||n==`boolean`||e==null||D(e)?!0:ye.test(e)||!ve.test(e)||t!=null&&e in Object(t)}var be=500;function xe(e){var t=re(e,function(e){return n.size===be&&n.clear(),e}),n=t.cache;return t}var Se=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Ce=/\\(\\)?/g,we=xe(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(``),e.replace(Se,function(e,n,r,i){t.push(r?i.replace(Ce,`$1`):n||e)}),t});function j(e){return e==null?``:ue(e)}function M(e,t){return c(e)?e:A(e,t)?[e]:we(j(e))}var Te=1/0;function N(e){if(typeof e==`string`||D(e))return e;var t=e+``;return t==`0`&&1/e==-Te?`-0`:t}function P(e,t){t=M(t,e);for(var n=0,r=t.length;e!=null&&n<r;)e=e[N(t[n++])];return n&&n==r?e:void 0}function Ee(e,t,n){var r=e==null?void 0:P(e,t);return r===void 0?n:r}function F(e,t){for(var n=-1,r=t.length,i=e.length;++n<r;)e[i+n]=t[n];return e}var I=l?l.isConcatSpreadable:void 0;function De(e){return c(e)||f(e)||!!(I&&e&&e[I])}function L(e,t,n,r,i){var a=-1,o=e.length;for(n||=De,i||=[];++a<o;){var s=e[a];t>0&&n(s)?t>1?L(s,t-1,n,r,i):F(i,s):r||(i[i.length]=s)}return i}function Oe(e,t,n,r){var i=-1,a=e==null?0:e.length;for(r&&a&&(n=e[++i]);++i<a;)n=t(n,e[i],i,e);return n}function ke(e,t){return e&&a(t,k(t),e)}function Ae(e,t){return e&&a(t,x(t),e)}function R(e,t){for(var n=-1,r=e==null?0:e.length,i=0,a=[];++n<r;){var o=e[n];t(o,n,e)&&(a[i++]=o)}return a}function z(){return[]}var je=Object.prototype.propertyIsEnumerable,B=Object.getOwnPropertySymbols,V=B?function(e){return e==null?[]:(e=Object(e),R(B(e),function(t){return je.call(e,t)}))}:z;function Me(e,t){return a(e,V(e),t)}var Ne=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)F(t,V(e)),e=y(e);return t}:z;function Pe(e,t){return a(e,Ne(e),t)}function Fe(e,t,n){var r=t(e);return c(e)?r:F(r,n(e))}function H(e){return Fe(e,k,V)}function Ie(e){return Fe(e,x,Ne)}var Le=Object.prototype.hasOwnProperty;function Re(e){var t=e.length,n=new e.constructor(t);return t&&typeof e[0]==`string`&&Le.call(e,`index`)&&(n.index=e.index,n.input=e.input),n}function ze(e,t){var n=t?d(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}var Be=/\w*$/;function Ve(e){var t=new e.constructor(e.source,Be.exec(e));return t.lastIndex=e.lastIndex,t}var He=l?l.prototype:void 0,Ue=He?He.valueOf:void 0;function We(e){return Ue?Object(Ue.call(e)):{}}var Ge=`[object Boolean]`,Ke=`[object Date]`,qe=`[object Map]`,Je=`[object Number]`,Ye=`[object RegExp]`,Xe=`[object Set]`,Ze=`[object String]`,Qe=`[object Symbol]`,$e=`[object ArrayBuffer]`,et=`[object DataView]`,tt=`[object Float32Array]`,nt=`[object Float64Array]`,rt=`[object Int8Array]`,it=`[object Int16Array]`,at=`[object Int32Array]`,ot=`[object Uint8Array]`,st=`[object Uint8ClampedArray]`,ct=`[object Uint16Array]`,lt=`[object Uint32Array]`;function ut(e,t,n){var r=e.constructor;switch(t){case $e:return d(e);case Ge:case Ke:return new r(+e);case et:return ze(e,n);case tt:case nt:case rt:case it:case at:case ot:case st:case ct:case lt:return _(e,n);case qe:return new r;case Je:case Ze:return new r(e);case Ye:return Ve(e);case Xe:return new r;case Qe:return We(e)}}var dt=`[object Map]`;function ft(e){return r(e)&&T(e)==dt}var pt=u&&u.isMap,mt=pt?ie(pt):ft,ht=`[object Set]`;function gt(e){return r(e)&&T(e)==ht}var _t=u&&u.isSet,vt=_t?ie(_t):gt,yt=1,bt=2,xt=4,St=`[object Arguments]`,Ct=`[object Array]`,wt=`[object Boolean]`,Tt=`[object Date]`,Et=`[object Error]`,Dt=`[object Function]`,Ot=`[object GeneratorFunction]`,kt=`[object Map]`,At=`[object Number]`,jt=`[object Object]`,Mt=`[object RegExp]`,Nt=`[object Set]`,Pt=`[object String]`,Ft=`[object Symbol]`,It=`[object WeakMap]`,Lt=`[object ArrayBuffer]`,Rt=`[object DataView]`,zt=`[object Float32Array]`,Bt=`[object Float64Array]`,Vt=`[object Int8Array]`,Ht=`[object Int16Array]`,Ut=`[object Int32Array]`,Wt=`[object Uint8Array]`,Gt=`[object Uint8ClampedArray]`,Kt=`[object Uint16Array]`,qt=`[object Uint32Array]`,U={};U[St]=U[Ct]=U[Lt]=U[Rt]=U[wt]=U[Tt]=U[zt]=U[Bt]=U[Vt]=U[Ht]=U[Ut]=U[kt]=U[At]=U[jt]=U[Mt]=U[Nt]=U[Pt]=U[Ft]=U[Wt]=U[Gt]=U[Kt]=U[qt]=!0,U[Et]=U[Dt]=U[It]=!1;function W(e,r,i,a,o,s){var l,u=r&yt,d=r&bt,f=r&xt;if(i&&(l=o?i(e,a,o,s):i(e)),l!==void 0)return l;if(!t(e))return e;var m=c(e);if(m){if(l=Re(e),!u)return n(e,l)}else{var h=T(e),g=h==Dt||h==Ot;if(C(e))return ne(e,u);if(h==jt||h==St||g&&!o){if(l=d||g?{}:te(e),!u)return d?Pe(e,Ae(l,e)):Me(e,ke(l,e))}else{if(!U[h])return o?e:{};l=ut(e,h,u)}}s||=new p;var _=s.get(e);if(_)return _;s.set(e,l),vt(e)?e.forEach(function(t){l.add(W(t,r,i,t,e,s))}):mt(e)&&e.forEach(function(t,n){l.set(n,W(t,r,i,n,e,s))});var y=m?void 0:(f?d?Ie:H:d?x:k)(e);return fe(y||e,function(t,n){y&&(n=t,t=e[n]),v(l,n,W(t,r,i,n,e,s))}),l}var Jt=`__lodash_hash_undefined__`;function Yt(e){return this.__data__.set(e,Jt),this}function Xt(e){return this.__data__.has(e)}function G(e){var t=-1,n=e==null?0:e.length;for(this.__data__=new m;++t<n;)this.add(e[t])}G.prototype.add=G.prototype.push=Yt,G.prototype.has=Xt;function Zt(e,t){for(var n=-1,r=e==null?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}function K(e,t){return e.has(t)}var Qt=1,$t=2;function en(e,t,n,r,i,a){var o=n&Qt,s=e.length,c=t.length;if(s!=c&&!(o&&c>s))return!1;var l=a.get(e),u=a.get(t);if(l&&u)return l==t&&u==e;var d=-1,f=!0,p=n&$t?new G:void 0;for(a.set(e,t),a.set(t,e);++d<s;){var m=e[d],h=t[d];if(r)var g=o?r(h,m,d,t,e,a):r(m,h,d,e,t,a);if(g!==void 0){if(g)continue;f=!1;break}if(p){if(!Zt(t,function(e,t){if(!K(p,t)&&(m===e||i(m,e,n,r,a)))return p.push(t)})){f=!1;break}}else if(!(m===h||i(m,h,n,r,a))){f=!1;break}}return a.delete(e),a.delete(t),f}function tn(e){var t=-1,n=Array(e.size);return e.forEach(function(e,r){n[++t]=[r,e]}),n}function q(e){var t=-1,n=Array(e.size);return e.forEach(function(e){n[++t]=e}),n}var nn=1,rn=2,an=`[object Boolean]`,on=`[object Date]`,sn=`[object Error]`,cn=`[object Map]`,ln=`[object Number]`,un=`[object RegExp]`,dn=`[object Set]`,fn=`[object String]`,pn=`[object Symbol]`,mn=`[object ArrayBuffer]`,hn=`[object DataView]`,gn=l?l.prototype:void 0,J=gn?gn.valueOf:void 0;function _n(t,n,r,i,a,o,s){switch(r){case hn:if(t.byteLength!=n.byteLength||t.byteOffset!=n.byteOffset)return!1;t=t.buffer,n=n.buffer;case mn:return!(t.byteLength!=n.byteLength||!o(new b(t),new b(n)));case an:case on:case ln:return e(+t,+n);case sn:return t.name==n.name&&t.message==n.message;case un:case fn:return t==n+``;case cn:var c=tn;case dn:var l=i&nn;if(c||=q,t.size!=n.size&&!l)return!1;var u=s.get(t);if(u)return u==n;i|=rn,s.set(t,n);var d=en(c(t),c(n),i,a,o,s);return s.delete(t),d;case pn:if(J)return J.call(t)==J.call(n)}return!1}var vn=1,yn=Object.prototype.hasOwnProperty;function bn(e,t,n,r,i,a){var o=n&vn,s=H(e),c=s.length;if(c!=H(t).length&&!o)return!1;for(var l=c;l--;){var u=s[l];if(!(o?u in t:yn.call(t,u)))return!1}var d=a.get(e),f=a.get(t);if(d&&f)return d==t&&f==e;var p=!0;a.set(e,t),a.set(t,e);for(var m=o;++l<c;){u=s[l];var h=e[u],g=t[u];if(r)var _=o?r(g,h,u,t,e,a):r(h,g,u,e,t,a);if(!(_===void 0?h===g||i(h,g,n,r,a):_)){p=!1;break}m||=u==`constructor`}if(p&&!m){var v=e.constructor,y=t.constructor;v!=y&&`constructor`in e&&`constructor`in t&&!(typeof v==`function`&&v instanceof v&&typeof y==`function`&&y instanceof y)&&(p=!1)}return a.delete(e),a.delete(t),p}var xn=1,Sn=`[object Arguments]`,Cn=`[object Array]`,Y=`[object Object]`,wn=Object.prototype.hasOwnProperty;function Tn(e,t,n,r,i,a){var o=c(e),s=c(t),l=o?Cn:T(e),u=s?Cn:T(t);l=l==Sn?Y:l,u=u==Sn?Y:u;var d=l==Y,f=u==Y,m=l==u;if(m&&C(e)){if(!C(t))return!1;o=!0,d=!1}if(m&&!d)return a||=new p,o||h(e)?en(e,t,n,r,i,a):_n(e,t,l,n,r,i,a);if(!(n&xn)){var g=d&&wn.call(e,`__wrapped__`),_=f&&wn.call(t,`__wrapped__`);if(g||_){var v=g?e.value():e,y=_?t.value():t;return a||=new p,i(v,y,n,r,a)}}return m?(a||=new p,bn(e,t,n,r,i,a)):!1}function X(e,t,n,i,a){return e===t?!0:e==null||t==null||!r(e)&&!r(t)?e!==e&&t!==t:Tn(e,t,n,i,X,a)}var En=1,Dn=2;function On(e,t,n,r){var i=n.length,a=i,o=!r;if(e==null)return!a;for(e=Object(e);i--;){var s=n[i];if(o&&s[2]?s[1]!==e[s[0]]:!(s[0]in e))return!1}for(;++i<a;){s=n[i];var c=s[0],l=e[c],u=s[1];if(o&&s[2]){if(l===void 0&&!(c in e))return!1}else{var d=new p;if(r)var f=r(l,u,c,e,t,d);if(!(f===void 0?X(u,l,En|Dn,r,d):f))return!1}}return!0}function kn(e){return e===e&&!t(e)}function An(e){for(var t=k(e),n=t.length;n--;){var r=t[n],i=e[r];t[n]=[r,i,kn(i)]}return t}function Z(e,t){return function(n){return n==null?!1:n[e]===t&&(t!==void 0||e in Object(n))}}function jn(e){var t=An(e);return t.length==1&&t[0][2]?Z(t[0][0],t[0][1]):function(n){return n===e||On(n,e,t)}}function Mn(e,t){return e!=null&&t in Object(e)}function Nn(e,t,n){t=M(t,e);for(var r=-1,a=t.length,s=!1;++r<a;){var l=N(t[r]);if(!(s=e!=null&&n(e,l)))break;e=e[l]}return s||++r!=a?s:(a=e==null?0:e.length,!!a&&o(a)&&i(l,a)&&(c(e)||f(e)))}function Pn(e,t){return e!=null&&Nn(e,t,Mn)}var Fn=1,In=2;function Ln(e,t){return A(e)&&kn(t)?Z(N(e),t):function(n){var r=Ee(n,e);return r===void 0&&r===t?Pn(n,e):X(t,r,Fn|In)}}function Rn(e){return function(t){return t?.[e]}}function zn(e){return function(t){return P(t,e)}}function Bn(e){return A(e)?Rn(N(e)):zn(e)}function Q(e){return typeof e==`function`?e:e==null?w:typeof e==`object`?c(e)?Ln(e[0],e[1]):jn(e):Bn(e)}function Vn(e,t){return e&&ee(e,t,k)}function Hn(e,t){return function(n,r){if(n==null)return n;if(!S(n))return e(n,r);for(var i=n.length,a=t?i:-1,o=Object(n);(t?a--:++a<i)&&r(o[a],a,o)!==!1;);return n}}var $=Hn(Vn);function Un(e,t,n){for(var r=-1,i=e==null?0:e.length;++r<i;)if(n(t,e[r]))return!0;return!1}function Wn(e){return typeof e==`function`?e:w}function Gn(e,t){return(c(e)?fe:$)(e,Wn(t))}function Kn(e,t){var n=[];return $(e,function(e,r,i){t(e,r,i)&&n.push(e)}),n}function qn(e,t){return(c(e)?R:Kn)(e,Q(t,3))}function Jn(e,t){return O(t,function(t){return e[t]})}function Yn(e){return e==null?[]:Jn(e,k(e))}function Xn(e){return e===void 0}function Zn(e,t,n,r,i){return i(e,function(e,i,a){n=r?(r=!1,e):t(n,e,i,a)}),n}function Qn(e,t,n){var r=c(e)?Oe:Zn,i=arguments.length<3;return r(e,Q(t,4),n,i,$)}var $n=E&&1/q(new E([,-0]))[1]==1/0?function(e){return new E(e)}:de,er=200;function tr(e,t,n){var r=-1,i=_e,a=e.length,o=!0,s=[],c=s;if(n)o=!1,i=Un;else if(a>=er){var l=t?null:$n(e);if(l)return q(l);o=!1,i=K,c=new G}else c=t?[]:s;outer:for(;++r<a;){var u=e[r],d=t?t(u):u;if(u=n||u!==0?u:0,o&&d===d){for(var f=c.length;f--;)if(c[f]===d)continue outer;t&&c.push(d),s.push(u)}else i(c,d,n)||(c!==s&&c.push(d),s.push(u))}return s}export{pe as A,P as C,k as D,j as E,O as M,D as N,_e as O,L as S,M as T,Zt as _,qn as a,Ie as b,Wn as c,Vn as d,Q as f,K as g,Nn as h,Yn as i,de as j,ge as k,Un as l,Pn as m,Qn as n,Kn as o,Rn as p,Xn as r,Gn as s,tr as t,$ as u,G as v,N as w,R as x,W as y};
1
+ import{A as e,B as t,F as n,H as r,M as i,O as a,T as o,U as s,V as c,W as l,_ as u,a as d,b as f,c as p,d as m,g as h,h as g,i as _,k as v,l as y,n as ee,o as b,p as x,r as te,s as ne,u as re,v as ie,w as S,y as C,z as w}from"./isArrayLikeObject-B_v2FtYn.js";import{i as ae,n as T,r as E}from"./isEmpty-bnrF3Qbc.js";var oe=`[object Symbol]`;function D(e){return typeof e==`symbol`||r(e)&&s(e)==oe}function O(e,t){for(var n=-1,r=e==null?0:e.length,i=Array(r);++n<r;)i[n]=t(e[n],n,e);return i}var se=1/0,ce=l?l.prototype:void 0,le=ce?ce.toString:void 0;function ue(e){if(typeof e==`string`)return e;if(c(e))return O(e,ue)+``;if(D(e))return le?le.call(e):``;var t=e+``;return t==`0`&&1/e==-se?`-0`:t}function de(){}function fe(e,t){for(var n=-1,r=e==null?0:e.length;++n<r&&t(e[n],n,e)!==!1;);return e}function pe(e,t,n,r){for(var i=e.length,a=n+(r?1:-1);r?a--:++a<i;)if(t(e[a],a,e))return a;return-1}function me(e){return e!==e}function he(e,t,n){for(var r=n-1,i=e.length;++r<i;)if(e[r]===t)return r;return-1}function ge(e,t,n){return t===t?he(e,t,n):pe(e,me,n)}function _e(e,t){return!!(e!=null&&e.length)&&ge(e,t,0)>-1}function k(e){return S(e)?g(e):ae(e)}var ve=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ye=/^\w*$/;function A(e,t){if(c(e))return!1;var n=typeof e;return n==`number`||n==`symbol`||n==`boolean`||e==null||D(e)?!0:ye.test(e)||!ve.test(e)||t!=null&&e in Object(t)}var be=500;function xe(e){var t=re(e,function(e){return n.size===be&&n.clear(),e}),n=t.cache;return t}var Se=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Ce=/\\(\\)?/g,we=xe(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(``),e.replace(Se,function(e,n,r,i){t.push(r?i.replace(Ce,`$1`):n||e)}),t});function j(e){return e==null?``:ue(e)}function M(e,t){return c(e)?e:A(e,t)?[e]:we(j(e))}var Te=1/0;function N(e){if(typeof e==`string`||D(e))return e;var t=e+``;return t==`0`&&1/e==-Te?`-0`:t}function P(e,t){t=M(t,e);for(var n=0,r=t.length;e!=null&&n<r;)e=e[N(t[n++])];return n&&n==r?e:void 0}function Ee(e,t,n){var r=e==null?void 0:P(e,t);return r===void 0?n:r}function F(e,t){for(var n=-1,r=t.length,i=e.length;++n<r;)e[i+n]=t[n];return e}var I=l?l.isConcatSpreadable:void 0;function De(e){return c(e)||f(e)||!!(I&&e&&e[I])}function L(e,t,n,r,i){var a=-1,o=e.length;for(n||=De,i||=[];++a<o;){var s=e[a];t>0&&n(s)?t>1?L(s,t-1,n,r,i):F(i,s):r||(i[i.length]=s)}return i}function Oe(e,t,n,r){var i=-1,a=e==null?0:e.length;for(r&&a&&(n=e[++i]);++i<a;)n=t(n,e[i],i,e);return n}function ke(e,t){return e&&a(t,k(t),e)}function Ae(e,t){return e&&a(t,x(t),e)}function R(e,t){for(var n=-1,r=e==null?0:e.length,i=0,a=[];++n<r;){var o=e[n];t(o,n,e)&&(a[i++]=o)}return a}function z(){return[]}var je=Object.prototype.propertyIsEnumerable,B=Object.getOwnPropertySymbols,V=B?function(e){return e==null?[]:(e=Object(e),R(B(e),function(t){return je.call(e,t)}))}:z;function Me(e,t){return a(e,V(e),t)}var Ne=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)F(t,V(e)),e=y(e);return t}:z;function Pe(e,t){return a(e,Ne(e),t)}function Fe(e,t,n){var r=t(e);return c(e)?r:F(r,n(e))}function H(e){return Fe(e,k,V)}function Ie(e){return Fe(e,x,Ne)}var Le=Object.prototype.hasOwnProperty;function Re(e){var t=e.length,n=new e.constructor(t);return t&&typeof e[0]==`string`&&Le.call(e,`index`)&&(n.index=e.index,n.input=e.input),n}function ze(e,t){var n=t?d(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}var Be=/\w*$/;function Ve(e){var t=new e.constructor(e.source,Be.exec(e));return t.lastIndex=e.lastIndex,t}var He=l?l.prototype:void 0,Ue=He?He.valueOf:void 0;function We(e){return Ue?Object(Ue.call(e)):{}}var Ge=`[object Boolean]`,Ke=`[object Date]`,qe=`[object Map]`,Je=`[object Number]`,Ye=`[object RegExp]`,Xe=`[object Set]`,Ze=`[object String]`,Qe=`[object Symbol]`,$e=`[object ArrayBuffer]`,et=`[object DataView]`,tt=`[object Float32Array]`,nt=`[object Float64Array]`,rt=`[object Int8Array]`,it=`[object Int16Array]`,at=`[object Int32Array]`,ot=`[object Uint8Array]`,st=`[object Uint8ClampedArray]`,ct=`[object Uint16Array]`,lt=`[object Uint32Array]`;function ut(e,t,n){var r=e.constructor;switch(t){case $e:return d(e);case Ge:case Ke:return new r(+e);case et:return ze(e,n);case tt:case nt:case rt:case it:case at:case ot:case st:case ct:case lt:return _(e,n);case qe:return new r;case Je:case Ze:return new r(e);case Ye:return Ve(e);case Xe:return new r;case Qe:return We(e)}}var dt=`[object Map]`;function ft(e){return r(e)&&T(e)==dt}var pt=u&&u.isMap,mt=pt?ie(pt):ft,ht=`[object Set]`;function gt(e){return r(e)&&T(e)==ht}var _t=u&&u.isSet,vt=_t?ie(_t):gt,yt=1,bt=2,xt=4,St=`[object Arguments]`,Ct=`[object Array]`,wt=`[object Boolean]`,Tt=`[object Date]`,Et=`[object Error]`,Dt=`[object Function]`,Ot=`[object GeneratorFunction]`,kt=`[object Map]`,At=`[object Number]`,jt=`[object Object]`,Mt=`[object RegExp]`,Nt=`[object Set]`,Pt=`[object String]`,Ft=`[object Symbol]`,It=`[object WeakMap]`,Lt=`[object ArrayBuffer]`,Rt=`[object DataView]`,zt=`[object Float32Array]`,Bt=`[object Float64Array]`,Vt=`[object Int8Array]`,Ht=`[object Int16Array]`,Ut=`[object Int32Array]`,Wt=`[object Uint8Array]`,Gt=`[object Uint8ClampedArray]`,Kt=`[object Uint16Array]`,qt=`[object Uint32Array]`,U={};U[St]=U[Ct]=U[Lt]=U[Rt]=U[wt]=U[Tt]=U[zt]=U[Bt]=U[Vt]=U[Ht]=U[Ut]=U[kt]=U[At]=U[jt]=U[Mt]=U[Nt]=U[Pt]=U[Ft]=U[Wt]=U[Gt]=U[Kt]=U[qt]=!0,U[Et]=U[Dt]=U[It]=!1;function W(e,r,i,a,o,s){var l,u=r&yt,d=r&bt,f=r&xt;if(i&&(l=o?i(e,a,o,s):i(e)),l!==void 0)return l;if(!t(e))return e;var m=c(e);if(m){if(l=Re(e),!u)return n(e,l)}else{var h=T(e),g=h==Dt||h==Ot;if(C(e))return ne(e,u);if(h==jt||h==St||g&&!o){if(l=d||g?{}:te(e),!u)return d?Pe(e,Ae(l,e)):Me(e,ke(l,e))}else{if(!U[h])return o?e:{};l=ut(e,h,u)}}s||=new p;var _=s.get(e);if(_)return _;s.set(e,l),vt(e)?e.forEach(function(t){l.add(W(t,r,i,t,e,s))}):mt(e)&&e.forEach(function(t,n){l.set(n,W(t,r,i,n,e,s))});var y=m?void 0:(f?d?Ie:H:d?x:k)(e);return fe(y||e,function(t,n){y&&(n=t,t=e[n]),v(l,n,W(t,r,i,n,e,s))}),l}var Jt=`__lodash_hash_undefined__`;function Yt(e){return this.__data__.set(e,Jt),this}function Xt(e){return this.__data__.has(e)}function G(e){var t=-1,n=e==null?0:e.length;for(this.__data__=new m;++t<n;)this.add(e[t])}G.prototype.add=G.prototype.push=Yt,G.prototype.has=Xt;function Zt(e,t){for(var n=-1,r=e==null?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}function K(e,t){return e.has(t)}var Qt=1,$t=2;function en(e,t,n,r,i,a){var o=n&Qt,s=e.length,c=t.length;if(s!=c&&!(o&&c>s))return!1;var l=a.get(e),u=a.get(t);if(l&&u)return l==t&&u==e;var d=-1,f=!0,p=n&$t?new G:void 0;for(a.set(e,t),a.set(t,e);++d<s;){var m=e[d],h=t[d];if(r)var g=o?r(h,m,d,t,e,a):r(m,h,d,e,t,a);if(g!==void 0){if(g)continue;f=!1;break}if(p){if(!Zt(t,function(e,t){if(!K(p,t)&&(m===e||i(m,e,n,r,a)))return p.push(t)})){f=!1;break}}else if(!(m===h||i(m,h,n,r,a))){f=!1;break}}return a.delete(e),a.delete(t),f}function tn(e){var t=-1,n=Array(e.size);return e.forEach(function(e,r){n[++t]=[r,e]}),n}function q(e){var t=-1,n=Array(e.size);return e.forEach(function(e){n[++t]=e}),n}var nn=1,rn=2,an=`[object Boolean]`,on=`[object Date]`,sn=`[object Error]`,cn=`[object Map]`,ln=`[object Number]`,un=`[object RegExp]`,dn=`[object Set]`,fn=`[object String]`,pn=`[object Symbol]`,mn=`[object ArrayBuffer]`,hn=`[object DataView]`,gn=l?l.prototype:void 0,J=gn?gn.valueOf:void 0;function _n(t,n,r,i,a,o,s){switch(r){case hn:if(t.byteLength!=n.byteLength||t.byteOffset!=n.byteOffset)return!1;t=t.buffer,n=n.buffer;case mn:return!(t.byteLength!=n.byteLength||!o(new b(t),new b(n)));case an:case on:case ln:return e(+t,+n);case sn:return t.name==n.name&&t.message==n.message;case un:case fn:return t==n+``;case cn:var c=tn;case dn:var l=i&nn;if(c||=q,t.size!=n.size&&!l)return!1;var u=s.get(t);if(u)return u==n;i|=rn,s.set(t,n);var d=en(c(t),c(n),i,a,o,s);return s.delete(t),d;case pn:if(J)return J.call(t)==J.call(n)}return!1}var vn=1,yn=Object.prototype.hasOwnProperty;function bn(e,t,n,r,i,a){var o=n&vn,s=H(e),c=s.length;if(c!=H(t).length&&!o)return!1;for(var l=c;l--;){var u=s[l];if(!(o?u in t:yn.call(t,u)))return!1}var d=a.get(e),f=a.get(t);if(d&&f)return d==t&&f==e;var p=!0;a.set(e,t),a.set(t,e);for(var m=o;++l<c;){u=s[l];var h=e[u],g=t[u];if(r)var _=o?r(g,h,u,t,e,a):r(h,g,u,e,t,a);if(!(_===void 0?h===g||i(h,g,n,r,a):_)){p=!1;break}m||=u==`constructor`}if(p&&!m){var v=e.constructor,y=t.constructor;v!=y&&`constructor`in e&&`constructor`in t&&!(typeof v==`function`&&v instanceof v&&typeof y==`function`&&y instanceof y)&&(p=!1)}return a.delete(e),a.delete(t),p}var xn=1,Sn=`[object Arguments]`,Cn=`[object Array]`,Y=`[object Object]`,wn=Object.prototype.hasOwnProperty;function Tn(e,t,n,r,i,a){var o=c(e),s=c(t),l=o?Cn:T(e),u=s?Cn:T(t);l=l==Sn?Y:l,u=u==Sn?Y:u;var d=l==Y,f=u==Y,m=l==u;if(m&&C(e)){if(!C(t))return!1;o=!0,d=!1}if(m&&!d)return a||=new p,o||h(e)?en(e,t,n,r,i,a):_n(e,t,l,n,r,i,a);if(!(n&xn)){var g=d&&wn.call(e,`__wrapped__`),_=f&&wn.call(t,`__wrapped__`);if(g||_){var v=g?e.value():e,y=_?t.value():t;return a||=new p,i(v,y,n,r,a)}}return m?(a||=new p,bn(e,t,n,r,i,a)):!1}function X(e,t,n,i,a){return e===t?!0:e==null||t==null||!r(e)&&!r(t)?e!==e&&t!==t:Tn(e,t,n,i,X,a)}var En=1,Dn=2;function On(e,t,n,r){var i=n.length,a=i,o=!r;if(e==null)return!a;for(e=Object(e);i--;){var s=n[i];if(o&&s[2]?s[1]!==e[s[0]]:!(s[0]in e))return!1}for(;++i<a;){s=n[i];var c=s[0],l=e[c],u=s[1];if(o&&s[2]){if(l===void 0&&!(c in e))return!1}else{var d=new p;if(r)var f=r(l,u,c,e,t,d);if(!(f===void 0?X(u,l,En|Dn,r,d):f))return!1}}return!0}function kn(e){return e===e&&!t(e)}function An(e){for(var t=k(e),n=t.length;n--;){var r=t[n],i=e[r];t[n]=[r,i,kn(i)]}return t}function Z(e,t){return function(n){return n==null?!1:n[e]===t&&(t!==void 0||e in Object(n))}}function jn(e){var t=An(e);return t.length==1&&t[0][2]?Z(t[0][0],t[0][1]):function(n){return n===e||On(n,e,t)}}function Mn(e,t){return e!=null&&t in Object(e)}function Nn(e,t,n){t=M(t,e);for(var r=-1,a=t.length,s=!1;++r<a;){var l=N(t[r]);if(!(s=e!=null&&n(e,l)))break;e=e[l]}return s||++r!=a?s:(a=e==null?0:e.length,!!a&&o(a)&&i(l,a)&&(c(e)||f(e)))}function Pn(e,t){return e!=null&&Nn(e,t,Mn)}var Fn=1,In=2;function Ln(e,t){return A(e)&&kn(t)?Z(N(e),t):function(n){var r=Ee(n,e);return r===void 0&&r===t?Pn(n,e):X(t,r,Fn|In)}}function Rn(e){return function(t){return t?.[e]}}function zn(e){return function(t){return P(t,e)}}function Bn(e){return A(e)?Rn(N(e)):zn(e)}function Q(e){return typeof e==`function`?e:e==null?w:typeof e==`object`?c(e)?Ln(e[0],e[1]):jn(e):Bn(e)}function Vn(e,t){return e&&ee(e,t,k)}function Hn(e,t){return function(n,r){if(n==null)return n;if(!S(n))return e(n,r);for(var i=n.length,a=t?i:-1,o=Object(n);(t?a--:++a<i)&&r(o[a],a,o)!==!1;);return n}}var $=Hn(Vn);function Un(e,t,n){for(var r=-1,i=e==null?0:e.length;++r<i;)if(n(t,e[r]))return!0;return!1}function Wn(e){return typeof e==`function`?e:w}function Gn(e,t){return(c(e)?fe:$)(e,Wn(t))}function Kn(e,t){var n=[];return $(e,function(e,r,i){t(e,r,i)&&n.push(e)}),n}function qn(e,t){return(c(e)?R:Kn)(e,Q(t,3))}function Jn(e,t){return O(t,function(t){return e[t]})}function Yn(e){return e==null?[]:Jn(e,k(e))}function Xn(e){return e===void 0}function Zn(e,t,n,r,i){return i(e,function(e,i,a){n=r?(r=!1,e):t(n,e,i,a)}),n}function Qn(e,t,n){var r=c(e)?Oe:Zn,i=arguments.length<3;return r(e,Q(t,4),n,i,$)}var $n=E&&1/q(new E([,-0]))[1]==1/0?function(e){return new E(e)}:de,er=200;function tr(e,t,n){var r=-1,i=_e,a=e.length,o=!0,s=[],c=s;if(n)o=!1,i=Un;else if(a>=er){var l=t?null:$n(e);if(l)return q(l);o=!1,i=K,c=new G}else c=t?[]:s;outer:for(;++r<a;){var u=e[r],d=t?t(u):u;if(u=n||u!==0?u:0,o&&d===d){for(var f=c.length;f--;)if(c[f]===d)continue outer;t&&c.push(d),s.push(u)}else i(c,d,n)||(c!==s&&c.push(d),s.push(u))}return s}export{pe as A,P as C,k as D,j as E,O as M,D as N,_e as O,L as S,M as T,Zt as _,qn as a,Ie as b,Wn as c,Vn as d,Q as f,K as g,Nn as h,Yn as i,de as j,ge as k,Un as l,Pn as m,Qn as n,Kn as o,Rn as p,Xn as r,Gn as s,tr as t,$ as u,G as v,N as w,R as x,W as y};
@@ -0,0 +1 @@
1
+ import{r as e}from"./chunk-CFjPhJqf.js";import{t}from"./api-client-BfBM3I7n.js";var n=e({addAccount:()=>a,exchangeOAuthCode:()=>u,getAISettings:()=>m,getAccountSettings:()=>s,getAccounts:()=>r,getActiveAccount:()=>i,getAllAccountUsages:()=>d,getOAuthUrl:()=>l,getProxySettings:()=>g,importAccounts:()=>f,patchAccount:()=>o,updateAISettings:()=>h,updateAccountSettings:()=>c,updateDeviceName:()=>p,updateProxySettings:()=>_});function r(){return t.get(`/api/accounts`)}function i(){return t.get(`/api/accounts/active`)}function a(e){return t.post(`/api/accounts`,e)}function o(e,n){return t.patch(`/api/accounts/${e}`,n)}function s(){return t.get(`/api/accounts/settings`)}function c(e){return t.put(`/api/accounts/settings`,e)}function l(){return t.get(`/api/accounts/oauth/url`)}function u(e,n){return t.post(`/api/accounts/oauth/exchange`,{code:e,state:n})}function d(){return t.get(`/api/accounts/usage`)}function f(e){return t.post(`/api/accounts/import`,e)}function p(e){return t.put(`/api/settings/device-name`,{device_name:e})}function m(){return t.get(`/api/settings/ai`)}function h(e){return t.put(`/api/settings/ai`,e)}function g(){return t.get(`/api/settings/proxy`)}function _(e){return t.put(`/api/settings/proxy`,e)}export{s as a,d as c,f as d,o as f,_ as h,m as i,l,c as m,n,r as o,h as p,u as r,i as s,a as t,g as u};
@@ -1 +1 @@
1
- import{n as e,t}from"./path-BAQ3hXlG.js";import{a as n,c as r,d as i,f as a,i as o,l as s,n as c,p as l,r as u,s as d,t as f,u as p}from"./math-B7b0HgJF.js";function m(e){return e.innerRadius}function h(e){return e.outerRadius}function g(e){return e.startAngle}function _(e){return e.endAngle}function v(e){return e&&e.padAngle}function y(e,t,n,r,i,a,o,s){var c=n-e,l=r-t,u=o-i,d=s-a,f=d*c-u*l;if(!(f*f<1e-12))return f=(u*(t-a)-d*(e-i))/f,[e+f*c,t+f*l]}function b(e,t,n,i,o,s,c){var l=e-n,u=t-i,d=(c?s:-s)/a(l*l+u*u),f=d*u,p=-d*l,m=e+f,h=t+p,g=n+f,_=i+p,v=(m+g)/2,y=(h+_)/2,b=g-m,x=_-h,S=b*b+x*x,C=o-s,w=m*_-g*h,T=(x<0?-1:1)*a(r(0,C*C*S-w*w)),E=(w*x-b*T)/S,D=(-w*b-x*T)/S,O=(w*x+b*T)/S,k=(-w*b+x*T)/S,A=E-v,j=D-y,M=O-v,N=k-y;return A*A+j*j>M*M+N*N&&(E=O,D=k),{cx:E,cy:D,x01:-f,y01:-p,x11:E*(o/C-1),y11:D*(o/C-1)}}function x(){var r=m,x=h,S=e(0),C=null,w=g,T=_,E=v,D=null,O=t(k);function k(){var e,t,m=+r.apply(this,arguments),h=+x.apply(this,arguments),g=w.apply(this,arguments)-d,_=T.apply(this,arguments)-d,v=f(_-g),k=_>g;if(D||=e=O(),h<m&&(t=h,h=m,m=t),!(h>1e-12))D.moveTo(0,0);else if(v>l-1e-12)D.moveTo(h*n(g),h*i(g)),D.arc(0,0,h,g,_,!k),m>1e-12&&(D.moveTo(m*n(_),m*i(_)),D.arc(0,0,m,_,g,k));else{var A=g,j=_,M=g,N=_,P=v,F=v,I=E.apply(this,arguments)/2,L=I>1e-12&&(C?+C.apply(this,arguments):a(m*m+h*h)),R=s(f(h-m)/2,+S.apply(this,arguments)),z=R,B=R,V,H;if(L>1e-12){var U=u(L/m*i(I)),W=u(L/h*i(I));(P-=U*2)>1e-12?(U*=k?1:-1,M+=U,N-=U):(P=0,M=N=(g+_)/2),(F-=W*2)>1e-12?(W*=k?1:-1,A+=W,j-=W):(F=0,A=j=(g+_)/2)}var G=h*n(A),K=h*i(A),q=m*n(N),J=m*i(N);if(R>1e-12){var Y=h*n(j),X=h*i(j),Z=m*n(M),Q=m*i(M),$;if(v<p)if($=y(G,K,Z,Q,Y,X,q,J)){var ee=G-$[0],te=K-$[1],ne=Y-$[0],re=X-$[1],ie=1/i(c((ee*ne+te*re)/(a(ee*ee+te*te)*a(ne*ne+re*re)))/2),ae=a($[0]*$[0]+$[1]*$[1]);z=s(R,(m-ae)/(ie-1)),B=s(R,(h-ae)/(ie+1))}else z=B=0}F>1e-12?B>1e-12?(V=b(Z,Q,G,K,h,B,k),H=b(Y,X,q,J,h,B,k),D.moveTo(V.cx+V.x01,V.cy+V.y01),B<R?D.arc(V.cx,V.cy,B,o(V.y01,V.x01),o(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,B,o(V.y01,V.x01),o(V.y11,V.x11),!k),D.arc(0,0,h,o(V.cy+V.y11,V.cx+V.x11),o(H.cy+H.y11,H.cx+H.x11),!k),D.arc(H.cx,H.cy,B,o(H.y11,H.x11),o(H.y01,H.x01),!k))):(D.moveTo(G,K),D.arc(0,0,h,A,j,!k)):D.moveTo(G,K),!(m>1e-12)||!(P>1e-12)?D.lineTo(q,J):z>1e-12?(V=b(q,J,Y,X,m,-z,k),H=b(G,K,Z,Q,m,-z,k),D.lineTo(V.cx+V.x01,V.cy+V.y01),z<R?D.arc(V.cx,V.cy,z,o(V.y01,V.x01),o(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,z,o(V.y01,V.x01),o(V.y11,V.x11),!k),D.arc(0,0,m,o(V.cy+V.y11,V.cx+V.x11),o(H.cy+H.y11,H.cx+H.x11),k),D.arc(H.cx,H.cy,z,o(H.y11,H.x11),o(H.y01,H.x01),!k))):D.arc(0,0,m,N,M,k)}if(D.closePath(),e)return D=null,e+``||null}return k.centroid=function(){var e=(+r.apply(this,arguments)+ +x.apply(this,arguments))/2,t=(+w.apply(this,arguments)+ +T.apply(this,arguments))/2-p/2;return[n(t)*e,i(t)*e]},k.innerRadius=function(t){return arguments.length?(r=typeof t==`function`?t:e(+t),k):r},k.outerRadius=function(t){return arguments.length?(x=typeof t==`function`?t:e(+t),k):x},k.cornerRadius=function(t){return arguments.length?(S=typeof t==`function`?t:e(+t),k):S},k.padRadius=function(t){return arguments.length?(C=t==null?null:typeof t==`function`?t:e(+t),k):C},k.startAngle=function(t){return arguments.length?(w=typeof t==`function`?t:e(+t),k):w},k.endAngle=function(t){return arguments.length?(T=typeof t==`function`?t:e(+t),k):T},k.padAngle=function(t){return arguments.length?(E=typeof t==`function`?t:e(+t),k):E},k.context=function(e){return arguments.length?(D=e??null,k):D},k}export{x as t};
1
+ import{n as e,t}from"./path-6uRLdFF7.js";import{a as n,c as r,d as i,f as a,i as o,l as s,n as c,p as l,r as u,s as d,t as f,u as p}from"./math-069Z4SuC.js";function m(e){return e.innerRadius}function h(e){return e.outerRadius}function g(e){return e.startAngle}function _(e){return e.endAngle}function v(e){return e&&e.padAngle}function y(e,t,n,r,i,a,o,s){var c=n-e,l=r-t,u=o-i,d=s-a,f=d*c-u*l;if(!(f*f<1e-12))return f=(u*(t-a)-d*(e-i))/f,[e+f*c,t+f*l]}function b(e,t,n,i,o,s,c){var l=e-n,u=t-i,d=(c?s:-s)/a(l*l+u*u),f=d*u,p=-d*l,m=e+f,h=t+p,g=n+f,_=i+p,v=(m+g)/2,y=(h+_)/2,b=g-m,x=_-h,S=b*b+x*x,C=o-s,w=m*_-g*h,T=(x<0?-1:1)*a(r(0,C*C*S-w*w)),E=(w*x-b*T)/S,D=(-w*b-x*T)/S,O=(w*x+b*T)/S,k=(-w*b+x*T)/S,A=E-v,j=D-y,M=O-v,N=k-y;return A*A+j*j>M*M+N*N&&(E=O,D=k),{cx:E,cy:D,x01:-f,y01:-p,x11:E*(o/C-1),y11:D*(o/C-1)}}function x(){var r=m,x=h,S=e(0),C=null,w=g,T=_,E=v,D=null,O=t(k);function k(){var e,t,m=+r.apply(this,arguments),h=+x.apply(this,arguments),g=w.apply(this,arguments)-d,_=T.apply(this,arguments)-d,v=f(_-g),k=_>g;if(D||=e=O(),h<m&&(t=h,h=m,m=t),!(h>1e-12))D.moveTo(0,0);else if(v>l-1e-12)D.moveTo(h*n(g),h*i(g)),D.arc(0,0,h,g,_,!k),m>1e-12&&(D.moveTo(m*n(_),m*i(_)),D.arc(0,0,m,_,g,k));else{var A=g,j=_,M=g,N=_,P=v,F=v,I=E.apply(this,arguments)/2,L=I>1e-12&&(C?+C.apply(this,arguments):a(m*m+h*h)),R=s(f(h-m)/2,+S.apply(this,arguments)),z=R,B=R,V,H;if(L>1e-12){var U=u(L/m*i(I)),W=u(L/h*i(I));(P-=U*2)>1e-12?(U*=k?1:-1,M+=U,N-=U):(P=0,M=N=(g+_)/2),(F-=W*2)>1e-12?(W*=k?1:-1,A+=W,j-=W):(F=0,A=j=(g+_)/2)}var G=h*n(A),K=h*i(A),q=m*n(N),J=m*i(N);if(R>1e-12){var Y=h*n(j),X=h*i(j),Z=m*n(M),Q=m*i(M),$;if(v<p)if($=y(G,K,Z,Q,Y,X,q,J)){var ee=G-$[0],te=K-$[1],ne=Y-$[0],re=X-$[1],ie=1/i(c((ee*ne+te*re)/(a(ee*ee+te*te)*a(ne*ne+re*re)))/2),ae=a($[0]*$[0]+$[1]*$[1]);z=s(R,(m-ae)/(ie-1)),B=s(R,(h-ae)/(ie+1))}else z=B=0}F>1e-12?B>1e-12?(V=b(Z,Q,G,K,h,B,k),H=b(Y,X,q,J,h,B,k),D.moveTo(V.cx+V.x01,V.cy+V.y01),B<R?D.arc(V.cx,V.cy,B,o(V.y01,V.x01),o(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,B,o(V.y01,V.x01),o(V.y11,V.x11),!k),D.arc(0,0,h,o(V.cy+V.y11,V.cx+V.x11),o(H.cy+H.y11,H.cx+H.x11),!k),D.arc(H.cx,H.cy,B,o(H.y11,H.x11),o(H.y01,H.x01),!k))):(D.moveTo(G,K),D.arc(0,0,h,A,j,!k)):D.moveTo(G,K),!(m>1e-12)||!(P>1e-12)?D.lineTo(q,J):z>1e-12?(V=b(q,J,Y,X,m,-z,k),H=b(G,K,Z,Q,m,-z,k),D.lineTo(V.cx+V.x01,V.cy+V.y01),z<R?D.arc(V.cx,V.cy,z,o(V.y01,V.x01),o(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,z,o(V.y01,V.x01),o(V.y11,V.x11),!k),D.arc(0,0,m,o(V.cy+V.y11,V.cx+V.x11),o(H.cy+H.y11,H.cx+H.x11),k),D.arc(H.cx,H.cy,z,o(H.y11,H.x11),o(H.y01,H.x01),!k))):D.arc(0,0,m,N,M,k)}if(D.closePath(),e)return D=null,e+``||null}return k.centroid=function(){var e=(+r.apply(this,arguments)+ +x.apply(this,arguments))/2,t=(+w.apply(this,arguments)+ +T.apply(this,arguments))/2-p/2;return[n(t)*e,i(t)*e]},k.innerRadius=function(t){return arguments.length?(r=typeof t==`function`?t:e(+t),k):r},k.outerRadius=function(t){return arguments.length?(x=typeof t==`function`?t:e(+t),k):x},k.cornerRadius=function(t){return arguments.length?(S=typeof t==`function`?t:e(+t),k):S},k.padRadius=function(t){return arguments.length?(C=t==null?null:typeof t==`function`?t:e(+t),k):C},k.startAngle=function(t){return arguments.length?(w=typeof t==`function`?t:e(+t),k):w},k.endAngle=function(t){return arguments.length?(T=typeof t==`function`?t:e(+t),k):T},k.padAngle=function(t){return arguments.length?(E=typeof t==`function`?t:e(+t),k):E},k.context=function(e){return arguments.length?(D=e??null,k):D},k}export{x as t};
@@ -0,0 +1 @@
1
+ import"./chunk-XZSTWKYB-DxAOx4hG.js";import{n as e}from"./chunk-R5LLSJPH-CFwSJijQ.js";export{e as createArchitectureServices};