@hienlh/ppm 0.13.75 → 0.13.76

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 (128) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/assets/skills/ppm/SKILL.md +1 -1
  3. package/assets/skills/ppm/references/cli-reference.md +4 -4
  4. package/assets/skills/ppm/references/http-api.md +7 -1
  5. package/bun.lock +2142 -0
  6. package/bunfig.toml +2 -0
  7. package/dist/web/assets/ai-settings-section-D0VMZ4aE.js +1 -0
  8. package/dist/web/assets/{api-settings-BJTjIG4U.js → api-settings-Byph7lae.js} +1 -1
  9. package/dist/web/assets/architecture-PBZL5I3N-DyeqgxGw.js +1 -0
  10. package/dist/web/assets/{audio-preview-BQUzmaMW.js → audio-preview-DXCxll7f.js} +1 -1
  11. package/dist/web/assets/chat-tab-D5j5gP5j.js +16 -0
  12. package/dist/web/assets/code-editor-CL2gcvDj.js +10 -0
  13. package/dist/web/assets/{conflict-editor-CrpXDFE1.js → conflict-editor-RMsNwUKp.js} +1 -1
  14. package/dist/web/assets/{csv-preview-asMfgR0r.js → csv-preview-CwEbP_iZ.js} +1 -1
  15. package/dist/web/assets/{data-grid-overlay-editor-DGjqvYn6.js → data-grid-overlay-editor-C36FRqE8.js} +1 -1
  16. package/dist/web/assets/database-viewer-2TbU0m7s.js +1 -0
  17. package/dist/web/assets/{diff-viewer-CdZ15fOk.js → diff-viewer--SSMwMoS.js} +1 -1
  18. package/dist/web/assets/{docx-preview-AgoO5zwo.js → docx-preview-BL398ELS.js} +1 -1
  19. package/dist/web/assets/{esm-xVTUq__o.js → esm-DH3rpl0I.js} +1 -1
  20. package/dist/web/assets/{extension-webview-C4D4PnO3.js → extension-webview-DrnDwQpM.js} +2 -2
  21. package/dist/web/assets/git-log-panel-u6ehykcl.js +1 -0
  22. package/dist/web/assets/gitGraph-HDMCJU4V-CZAWeLUi.js +1 -0
  23. package/dist/web/assets/{glide-data-grid-BfXnM2CC.js → glide-data-grid-Benw7NI4.js} +6 -6
  24. package/dist/web/assets/globe-CQ8NAYvi.js +1 -0
  25. package/dist/web/assets/{image-preview-CyL9Lj_O.js → image-preview-DeNH71Ez.js} +1 -1
  26. package/dist/web/assets/index-BS3CQIT3.js +27 -0
  27. package/dist/web/assets/info-3K5VOQVL-BqVOLnRc.js +1 -0
  28. package/dist/web/assets/{input-CArJe9WS.js → input-DSELw5zU.js} +1 -1
  29. package/dist/web/assets/keybindings-store-gFa7vUoe.js +1 -0
  30. package/dist/web/assets/{markdown-renderer-Cat4uT8B.js → markdown-renderer-D5B629qw.js} +3 -3
  31. package/dist/web/assets/notification-store-qViiZZaY.js +1 -0
  32. package/dist/web/assets/{number-overlay-editor-DtUBprPW.js → number-overlay-editor-JsUdft7z.js} +1 -1
  33. package/dist/web/assets/packet-RMMSAZCW-BGMrAgbD.js +1 -0
  34. package/dist/web/assets/{panel-store-C9VAhbZz.js → panel-store-DlvwzOll.js} +1 -1
  35. package/dist/web/assets/{pdf-preview-BSrz_N0g.js → pdf-preview-yUMARG8r.js} +1 -1
  36. package/dist/web/assets/pie-UPGHQEXC-9IRPAyAe.js +1 -0
  37. package/dist/web/assets/port-forwarding-tab-D7rVcasa.js +1 -0
  38. package/dist/web/assets/{postgres-viewer-GpXLzmnT.js → postgres-viewer-C28tRuh5.js} +3 -3
  39. package/dist/web/assets/{project-store-DlbHpIq0.js → project-store-CpC02pIv.js} +1 -1
  40. package/dist/web/assets/radar-KQ55EAFF-CxjdSb6M.js +1 -0
  41. package/dist/web/assets/refresh-cw-CRD2qr4U.js +1 -0
  42. package/dist/web/assets/{settings-store-DQUFTPk2.js → settings-store-MXJgFUnl.js} +2 -2
  43. package/dist/web/assets/settings-tab-0kWZtlCi.js +1 -0
  44. package/dist/web/assets/{sql-query-editor-PFN7evxv.js → sql-query-editor-DCx7kPlY.js} +1 -1
  45. package/dist/web/assets/sqlite-viewer-W1RhaCr0.js +1 -0
  46. package/dist/web/assets/system-monitor-tab-CJojQd3x.js +1 -0
  47. package/dist/web/assets/{tab-store-CIcbSn0c.js → tab-store-Bdw8DIbZ.js} +1 -1
  48. package/dist/web/assets/{terminal-tab-D2OwQv1h.js → terminal-tab-B1_sAuIi.js} +2 -2
  49. package/dist/web/assets/treemap-KZPCXAKY-BYrmfSj5.js +1 -0
  50. package/dist/web/assets/{use-blob-url-DrPfBQBM.js → use-blob-url-CBi0HMq5.js} +1 -1
  51. package/dist/web/assets/{use-monaco-theme-BLIgarH5.js → use-monaco-theme-CbzQcrwD.js} +1 -1
  52. package/dist/web/assets/{vendor-mermaid-DkqjpqJK.js → vendor-mermaid-D2cOxeao.js} +3 -3
  53. package/dist/web/assets/{video-preview-49zZk7VQ.js → video-preview-D-nAiQsv.js} +1 -1
  54. package/dist/web/index.html +20 -17
  55. package/dist/web/sw.js +1 -1
  56. package/package.json +1 -1
  57. package/src/index.ts +0 -0
  58. package/src/providers/claude-agent-sdk.ts +6 -2
  59. package/src/server/index.ts +2 -0
  60. package/src/server/routes/chat.ts +7 -6
  61. package/src/server/routes/push.ts +54 -0
  62. package/src/services/cloud-ws.service.ts +1 -27
  63. package/src/services/config.service.ts +1 -1
  64. package/src/services/db.service.ts +24 -0
  65. package/src/services/notification.service.ts +5 -14
  66. package/src/services/push-notification.service.ts +104 -0
  67. package/src/types/config.ts +7 -0
  68. package/src/web/components/chat/chat-tab.tsx +10 -0
  69. package/src/web/components/settings/settings-tab.tsx +66 -12
  70. package/src/web/hooks/use-push-notification.ts +114 -0
  71. package/src/web/sw.ts +45 -0
  72. package/.opencode/.env.example +0 -98
  73. package/.opencode/skills/ads-management/scripts/.env.example +0 -13
  74. package/.opencode/skills/ai-multimodal/.env.example +0 -230
  75. package/.opencode/skills/cip-design/.env.example +0 -6
  76. package/.opencode/skills/devops/.env.example +0 -76
  77. package/.opencode/skills/docs-seeker/.env.example +0 -15
  78. package/.opencode/skills/elevenlabs/.env.example +0 -3
  79. package/.opencode/skills/marketing-dashboard/.env.example +0 -15
  80. package/.opencode/skills/marketing-dashboard/app/.env.example +0 -2
  81. package/.opencode/skills/marketing-dashboard/server/.env.example +0 -2
  82. package/.opencode/skills/mcp-management/scripts/dist/analyze-tools.js +0 -70
  83. package/.opencode/skills/mcp-management/scripts/dist/cli.js +0 -160
  84. package/.opencode/skills/mcp-management/scripts/dist/mcp-client.js +0 -183
  85. package/.opencode/skills/payment-integration/scripts/.env.example +0 -20
  86. package/.opencode/skills/sequential-thinking/.env.example +0 -8
  87. package/dist/web/assets/architecture-PBZL5I3N-CkdUQjA_.js +0 -1
  88. package/dist/web/assets/chat-tab-B80a21gx.js +0 -16
  89. package/dist/web/assets/code-editor-hFO6vAKT.js +0 -10
  90. package/dist/web/assets/database-viewer-CAjJc7bL.js +0 -1
  91. package/dist/web/assets/git-log-panel-J0pVWvZl.js +0 -1
  92. package/dist/web/assets/gitGraph-HDMCJU4V-D3UR56AG.js +0 -1
  93. package/dist/web/assets/index-Dd6YEaE6.js +0 -27
  94. package/dist/web/assets/info-3K5VOQVL-DUhLSKI2.js +0 -1
  95. package/dist/web/assets/keybindings-store-C1yHwKEc.js +0 -1
  96. package/dist/web/assets/notification-store-CBTVrgEf.js +0 -1
  97. package/dist/web/assets/packet-RMMSAZCW-BIpeVUGW.js +0 -1
  98. package/dist/web/assets/pie-UPGHQEXC-CNoizzjb.js +0 -1
  99. package/dist/web/assets/port-forwarding-tab-BpeFzbAM.js +0 -1
  100. package/dist/web/assets/radar-KQ55EAFF-7dns-ho5.js +0 -1
  101. package/dist/web/assets/settings-tab-Cjiu2egJ.js +0 -1
  102. package/dist/web/assets/sqlite-viewer-ONh1tmxh.js +0 -1
  103. package/dist/web/assets/system-monitor-tab-BznIBj8p.js +0 -1
  104. package/dist/web/assets/treemap-KZPCXAKY-D3DZCLoE.js +0 -1
  105. /package/dist/web/assets/{api-client-BK4NPNoY.js → api-client-DG9qwosT.js} +0 -0
  106. /package/dist/web/assets/{chevron-down-CiFNPrfI.js → chevron-down-BMo4cBth.js} +0 -0
  107. /package/dist/web/assets/{chevron-right-BzAdxJRG.js → chevron-right-CD8e6Aj4.js} +0 -0
  108. /package/dist/web/assets/{code-CuravVys.js → code-DiNmA3eR.js} +0 -0
  109. /package/dist/web/assets/{csv-parser-D1b_lg2T.js → csv-parser-B_TuHmnd.js} +0 -0
  110. /package/dist/web/assets/{data-grid-types-DzL5W2em.js → data-grid-types-CO_3iSwd.js} +0 -0
  111. /package/dist/web/assets/{database-NmqHg29g.js → database-Dc8mr-dP.js} +0 -0
  112. /package/dist/web/assets/{dist-CohudVKa.js → dist-C1jciI67.js} +0 -0
  113. /package/dist/web/assets/{dist-BM2EHhLH.js → dist-D4dFaZkK.js} +0 -0
  114. /package/dist/web/assets/{file-exclamation-point-Baz81y5z.js → file-exclamation-point-B__2Hrd6.js} +0 -0
  115. /package/dist/web/assets/{katex-CHaeM9QC.js → katex-DveWxdWJ.js} +0 -0
  116. /package/dist/web/assets/{lib-LPmTkMu4.js → lib-D4YDpYv4.js} +0 -0
  117. /package/dist/web/assets/{react-DHBl6KRc.js → react-BXxixfbh.js} +0 -0
  118. /package/dist/web/assets/{search-BEy08Exr.js → search-D90WJ5fo.js} +0 -0
  119. /package/dist/web/assets/{shield-check-77W0OMbn.js → shield-check-DeIMQtEj.js} +0 -0
  120. /package/dist/web/assets/{shield-off-C_MK1u09.js → shield-off-D4jBmG5E.js} +0 -0
  121. /package/dist/web/assets/{sparkles-CulWHe4c.js → sparkles-DyeiGE7Q.js} +0 -0
  122. /package/dist/web/assets/{table-BzjWcs87.js → table-DCYlHUNQ.js} +0 -0
  123. /package/dist/web/assets/{text-wrap-DJz9Bgpa.js → text-wrap-B3mYv9Yo.js} +0 -0
  124. /package/dist/web/assets/{trash-2-D5P4y8p_.js → trash-2-DkIfBY8d.js} +0 -0
  125. /package/dist/web/assets/{utils-CSCvNZxE.js → utils-Bs_TFEQf.js} +0 -0
  126. /package/dist/web/assets/{vendor-xterm-t3d5xZdz.js → vendor-xterm-BHJtSw6L.js} +0 -0
  127. /package/dist/web/assets/{wifi-CgM9T6HR.js → wifi-DifNnmbA.js} +0 -0
  128. /package/dist/web/assets/{x-Dx3jsRgu.js → x-WwAMX3EB.js} +0 -0
@@ -1 +0,0 @@
1
- import{V as e}from"./vendor-mermaid-DkqjpqJK.js";export{e as createInfoServices};
@@ -1 +0,0 @@
1
- import"./vendor-markdown-0Mxgxy0L.js";import"./api-client-BK4NPNoY.js";import{L as e}from"./index-Dd6YEaE6.js";export{e as useKeybindingsStore};
@@ -1 +0,0 @@
1
- import"./vendor-markdown-0Mxgxy0L.js";import"./api-client-BK4NPNoY.js";import{W as e}from"./index-Dd6YEaE6.js";export{e as useNotificationStore};
@@ -1 +0,0 @@
1
- import{z as e}from"./vendor-mermaid-DkqjpqJK.js";export{e as createPacketServices};
@@ -1 +0,0 @@
1
- import{L as e}from"./vendor-mermaid-DkqjpqJK.js";export{e as createPieServices};
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{b as t,x as n}from"./vendor-markdown-0Mxgxy0L.js";import"./vendor-ui-UXCWAcmi.js";import{t as r}from"./wifi-CgM9T6HR.js";import{t as i}from"./api-client-BK4NPNoY.js";import{At as a,Ct as o,J as s,ht as c,pt as l,tt as u,wt as d}from"./index-Dd6YEaE6.js";var f=e(n(),1),p=t();function m(){let[e,t]=(0,f.useState)(``),[n,m]=(0,f.useState)([]),[h,g]=(0,f.useState)(!1),[_,v]=(0,f.useState)(null),[y,b]=(0,f.useState)(null),x=(0,f.useCallback)(async()=>{try{m(await i.get(`/api/preview/tunnels`))}catch(e){console.warn(`[ports] failed to fetch tunnels`,e)}},[]);(0,f.useEffect)(()=>{x();let e=setInterval(x,1e4);return()=>clearInterval(e)},[x]);let S=async e=>{let r=n.find(t=>t.port===e);if(r){window.open(r.url,`_blank`),t(``);return}g(!0),v(null);try{let n=await i.post(`/api/preview/tunnel`,{port:e});window.open(n.url,`_blank`),t(``),await x()}catch(t){v(t.message||`Failed to start tunnel for port ${e}`)}finally{g(!1)}},C=async e=>{try{await i.del(`/api/preview/tunnel/${e}`),await x()}catch(t){s.error(t.message||`Failed to stop tunnel for port ${e}`)}},w=(e,t)=>{navigator.clipboard.writeText(t).then(()=>{b(e),s.success(`URL copied`),setTimeout(()=>b(null),2e3)}).catch(()=>{s.error(`Failed to copy URL`)})};return(0,p.jsxs)(`div`,{className:`flex flex-col h-full w-full bg-background`,children:[(0,p.jsxs)(`div`,{className:`p-4 md:p-6 border-b border-border bg-surface`,children:[(0,p.jsxs)(`div`,{className:`flex items-center gap-2 mb-3`,children:[(0,p.jsx)(r,{className:`size-5 text-primary`}),(0,p.jsx)(`h2`,{className:`text-base font-medium text-text-primary`,children:`Port Forwarding`})]}),(0,p.jsxs)(`form`,{onSubmit:t=>{t.preventDefault();let n=parseInt(e,10);n>=1&&n<=65535?S(n):v(`Port must be 1-65535`)},className:`flex items-center gap-2`,children:[(0,p.jsxs)(`div`,{className:`flex-1 flex items-center gap-2 px-3 py-2.5 rounded-lg bg-background border border-border focus-within:border-primary/50 transition-colors`,children:[(0,p.jsx)(`span`,{className:`text-sm text-text-subtle shrink-0`,children:`localhost:`}),(0,p.jsx)(`input`,{type:`number`,value:e,onChange:e=>{t(e.target.value),v(null)},placeholder:`3000`,min:1,max:65535,className:`flex-1 bg-transparent text-sm text-text-primary outline-none placeholder:text-text-subtle min-w-0 [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none`})]}),(0,p.jsx)(`button`,{type:`submit`,disabled:h||!e,className:`px-4 py-2.5 rounded-lg bg-primary text-primary-foreground text-sm font-medium hover:bg-primary/90 disabled:opacity-50 transition-colors shrink-0 min-w-[72px] flex items-center justify-center`,children:h?(0,p.jsx)(l,{className:`size-4 animate-spin`}):`Forward`})]}),_&&(0,p.jsx)(`p`,{className:`text-sm text-red-400 mt-2`,children:_}),h&&(0,p.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-text-secondary mt-2`,children:[(0,p.jsx)(l,{className:`size-3.5 animate-spin`}),(0,p.jsx)(`span`,{children:`Starting tunnel...`})]})]}),(0,p.jsx)(`div`,{className:`flex-1 overflow-y-auto p-4 md:p-6`,children:n.length===0?(0,p.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-3 text-center`,children:[(0,p.jsx)(c,{className:`size-10 text-text-subtle`}),(0,p.jsx)(`p`,{className:`text-sm text-text-secondary max-w-xs`,children:`No active ports. Forward a port to access your local dev server from anywhere.`})]}):(0,p.jsx)(`div`,{className:`space-y-2`,children:n.map(e=>(0,p.jsxs)(`div`,{className:`flex items-center gap-3 p-3 rounded-lg bg-surface border border-border`,children:[(0,p.jsxs)(`div`,{className:`shrink-0 px-2 py-1 rounded bg-primary/10 text-primary text-xs font-mono font-medium`,children:[`:`,e.port]}),(0,p.jsx)(`span`,{className:`flex-1 text-xs text-text-secondary truncate min-w-0`,children:e.url}),(0,p.jsxs)(`div`,{className:`flex items-center shrink-0`,children:[(0,p.jsx)(`button`,{onClick:()=>window.open(e.url,`_blank`),className:`p-2.5 rounded-md hover:bg-surface-elevated transition-colors`,title:`Open in browser`,children:(0,p.jsx)(o,{className:`size-4 text-text-secondary`})}),(0,p.jsx)(`button`,{onClick:()=>w(e.port,e.url),className:`p-2.5 rounded-md hover:bg-surface-elevated transition-colors`,title:`Copy URL`,children:y===e.port?(0,p.jsx)(a,{className:`size-4 text-green-400`}):(0,p.jsx)(d,{className:`size-4 text-text-secondary`})}),(0,p.jsx)(`button`,{onClick:()=>C(e.port),className:`p-2.5 rounded-md hover:bg-red-500/10 transition-colors`,title:`Stop tunnel`,children:(0,p.jsx)(u,{className:`size-4 text-red-400`})})]})]},e.port))})})]})}export{m as PortForwardingTab};
@@ -1 +0,0 @@
1
- import{F as e}from"./vendor-mermaid-DkqjpqJK.js";export{e as createRadarServices};
@@ -1 +0,0 @@
1
- import"./vendor-markdown-0Mxgxy0L.js";import"./vendor-ui-UXCWAcmi.js";import"./input-CArJe9WS.js";import"./api-client-BK4NPNoY.js";import"./settings-store-DQUFTPk2.js";import"./vendor-mermaid-DkqjpqJK.js";import"./project-store-DlbHpIq0.js";import"./api-settings-BJTjIG4U.js";import{c as e}from"./index-Dd6YEaE6.js";export{e as SettingsTab};
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{b as t,x as n}from"./vendor-markdown-0Mxgxy0L.js";import"./vendor-ui-UXCWAcmi.js";import{t as r}from"./database-NmqHg29g.js";import{t as i}from"./glide-data-grid-BfXnM2CC.js";import{t as a}from"./table-BzjWcs87.js";import{i as o,t as s}from"./api-client-BK4NPNoY.js";import"./settings-store-DQUFTPk2.js";import"./vendor-mermaid-DkqjpqJK.js";import"./panel-store-C9VAhbZz.js";import"./tab-store-CIcbSn0c.js";import{Ot as c,ot as l,pt as u}from"./index-Dd6YEaE6.js";import"./data-grid-types-DzL5W2em.js";import"./use-monaco-theme-BLIgarH5.js";import{t as d}from"./sql-query-editor-PFN7evxv.js";var f=e(n(),1);function p(e,t,n){let[r,i]=(0,f.useState)([]),[a,c]=(0,f.useState)(null),[l,u]=(0,f.useState)(null),[d,p]=(0,f.useState)([]),[m,h]=(0,f.useState)(!1),[g,_]=(0,f.useState)(null),[v,y]=(0,f.useState)(1),[b,x]=(0,f.useState)(null),[S,C]=(0,f.useState)(null),[w,T]=(0,f.useState)(!1),E=n?`/api/db/connections/${n}`:null,D=E??`${o(e)}/sqlite`,O=E?``:`path=${encodeURIComponent(t)}`,k=(0,f.useCallback)(async()=>{h(!0),_(null);try{let e=E?`?cached=1`:O?`?${O}`:``,t=await s.get(`${D}/tables${e}`);i(t),!E&&t.length>0&&!a&&c(t[0].name)}catch(e){_(e.message)}finally{h(!1)}},[D,O,E]);(0,f.useEffect)(()=>{k()},[k]);let A=(0,f.useCallback)(async()=>{if(a){h(!0);try{let e=O?`${O}&`:``,[t,n]=await Promise.all([s.get(`${D}/data?${e}table=${encodeURIComponent(a)}&page=${v}&limit=100`),s.get(`${D}/schema?${e}table=${encodeURIComponent(a)}`)]);u(t),p(n)}catch(e){_(e.message)}finally{h(!1)}}},[D,O,a,v]);return(0,f.useEffect)(()=>{A()},[A]),{tables:r,selectedTable:a,selectTable:(0,f.useCallback)(e=>{c(e),y(1),x(null)},[]),tableData:l,schema:d,loading:m,error:g,page:v,setPage:y,queryResult:b,queryError:S,queryLoading:w,executeQuery:(0,f.useCallback)(async e=>{T(!0),C(null);try{let n=E?{sql:e}:{path:t,sql:e},r=await s.post(`${D}/query`,n);x(r),r.changeType===`modify`&&A()}catch(e){C(e.message)}finally{T(!1)}},[D,E,t,A]),updateCell:(0,f.useCallback)(async(e,n,r)=>{if(a)try{E?await s.put(`${D}/cell`,{table:a,pkColumn:`rowid`,pkValue:e,column:n,value:r}):await s.put(`${D}/cell`,{path:t,table:a,rowid:e,column:n,value:r}),A()}catch(e){_(e.message)}},[D,E,t,a,A]),deleteRow:(0,f.useCallback)(async e=>{if(a)try{E?await s.del(`${D}/row`,{table:a,pkColumn:`rowid`,pkValue:e}):await s.del(`${D}/row`,{path:t,table:a,rowid:e}),A(),k()}catch(e){_(e.message)}},[D,E,t,a,A,k]),refreshTables:k,refreshData:A}}var m=t();function h({tables:e,selectedTable:t,onSelect:n,onRefresh:r}){return(0,m.jsxs)(`div`,{className:`w-48 shrink-0 flex flex-col bg-background overflow-hidden`,children:[(0,m.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-2 border-b border-border`,children:[(0,m.jsx)(`span`,{className:`text-xs font-medium text-muted-foreground uppercase tracking-wider`,children:`Tables`}),(0,m.jsx)(`button`,{type:`button`,onClick:r,className:`text-muted-foreground hover:text-foreground transition-colors`,title:`Refresh tables`,children:(0,m.jsx)(l,{className:`size-3`})})]}),(0,m.jsxs)(`div`,{className:`flex-1 overflow-y-auto`,children:[e.map(e=>(0,m.jsxs)(`button`,{type:`button`,onClick:()=>n(e.name),className:`w-full flex items-center gap-2 px-3 py-1.5 text-left text-xs transition-colors ${t===e.name?`bg-muted text-foreground`:`text-muted-foreground hover:bg-muted/50 hover:text-foreground`}`,children:[(0,m.jsx)(a,{className:`size-3 shrink-0`}),(0,m.jsx)(`span`,{className:`truncate flex-1`,children:e.name}),(0,m.jsx)(`span`,{className:`text-[10px] opacity-60`,children:e.rowCount})]},e.name)),e.length===0&&(0,m.jsx)(`p`,{className:`px-3 py-4 text-xs text-muted-foreground text-center`,children:`No tables found`})]})]})}function g({onExecute:e,loading:t}){return(0,m.jsx)(d,{onExecute:e,loading:t})}function _({metadata:e}){let t=e?.filePath,n=e?.projectName,i=e?.connectionId,a=e?.tableName,[o,s]=(0,f.useState)(!1);return i?(0,m.jsx)(v,{projectName:``,dbPath:``,connectionId:i,connectionName:e?.connectionName,initialTable:a,queryPanelOpen:o,onToggleQueryPanel:()=>s(e=>!e),hideTableList:!0}):!t||!n?(0,m.jsxs)(`div`,{className:`flex items-center justify-center h-full text-text-secondary text-sm`,children:[(0,m.jsx)(r,{className:`size-5 mr-2`}),` No database file selected.`]}):(0,m.jsx)(v,{projectName:n,dbPath:t,queryPanelOpen:o,onToggleQueryPanel:()=>s(e=>!e)})}function v({projectName:e,dbPath:t,connectionId:n,connectionName:a,initialTable:o,queryPanelOpen:s,onToggleQueryPanel:l,hideTableList:d}){let _=p(e,t,n),v=(0,f.useRef)(!1);return(0,f.useEffect)(()=>{o&&!v.current&&_.tables.length>0&&(v.current=!0,_.selectTable(o))},[o,_.tables]),_.error&&_.tables.length===0?(0,m.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-3 text-text-secondary`,children:[(0,m.jsx)(c,{className:`size-10 text-destructive`}),(0,m.jsx)(`p`,{className:`text-sm`,children:_.error})]}):_.loading&&_.tables.length===0?(0,m.jsxs)(`div`,{className:`flex items-center justify-center h-full gap-2 text-text-secondary`,children:[(0,m.jsx)(u,{className:`size-5 animate-spin`}),(0,m.jsx)(`span`,{className:`text-sm`,children:`Loading database...`})]}):(0,m.jsxs)(`div`,{className:`flex h-full w-full overflow-hidden`,children:[!d&&(0,m.jsx)(h,{tables:_.tables,selectedTable:_.selectedTable,onSelect:_.selectTable,onRefresh:_.refreshTables}),(0,m.jsxs)(`div`,{className:`flex-1 flex flex-col overflow-hidden ${d?``:`border-l border-border`}`,children:[(0,m.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-1.5 border-b border-border bg-background shrink-0`,children:[(0,m.jsx)(r,{className:`size-3.5 text-muted-foreground`}),(0,m.jsx)(`span`,{className:`text-xs text-muted-foreground truncate`,children:a??t}),(0,m.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:_.selectedTable&&`/ ${_.selectedTable}`}),(0,m.jsx)(`div`,{className:`ml-auto`,children:(0,m.jsx)(`button`,{type:`button`,onClick:l,className:`px-2 py-1 rounded text-xs transition-colors ${s?`bg-muted text-foreground`:`text-muted-foreground hover:text-foreground`}`,children:`SQL`})})]}),(0,m.jsx)(`div`,{className:`flex-1 overflow-hidden ${s?`max-h-[60%]`:``}`,children:_.tableData?(0,m.jsx)(i,{columns:_.tableData.columns,rows:_.tableData.rows,total:_.tableData.total,limit:_.tableData.limit,schema:_.schema.map(e=>({name:e.name,type:e.type,nullable:!e.notnull,pk:!!e.pk,defaultValue:e.dflt_value,fk:e.fk??null})),loading:_.loading,page:_.page,onPageChange:_.setPage,onCellUpdate:(e,t,n,r)=>_.updateCell(t,n,r),onRowDelete:(e,t)=>_.deleteRow(t)}):(0,m.jsx)(`div`,{className:`flex items-center justify-center h-full text-xs text-muted-foreground`,children:_.loading?(0,m.jsx)(u,{className:`size-4 animate-spin`}):`Select a table`})}),s&&(0,m.jsx)(`div`,{className:`border-t border-border h-[40%] shrink-0`,children:(0,m.jsx)(g,{onExecute:_.executeQuery,loading:_.queryLoading})})]})]})}export{_ as SqliteViewer};
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{b as t,x as n}from"./vendor-markdown-0Mxgxy0L.js";import"./vendor-ui-UXCWAcmi.js";import{t as r}from"./createLucideIcon-BjHrJDVb.js";import{t as i}from"./arrow-down-D825m4vm.js";import{t as a}from"./arrow-up-Rcw6_KKu.js";import{n as o,t as s}from"./chevron-down-CiFNPrfI.js";import{t as c}from"./chevron-right-BzAdxJRG.js";import{t as l}from"./wifi-CgM9T6HR.js";import{t as u}from"./x-Dx3jsRgu.js";import{t as d}from"./api-client-BK4NPNoY.js";import{n as f}from"./utils-CSCvNZxE.js";import{E as p,J as m,X as h,a as g,it as _,lt as v}from"./index-Dd6YEaE6.js";var y=r(`circle-question-mark`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3`,key:`1u773s`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),b=r(`hammer`,[[`path`,{d:`m15 12-9.373 9.373a1 1 0 0 1-3.001-3L12 9`,key:`1hayfq`}],[`path`,{d:`m18 15 4-4`,key:`16gjal`}],[`path`,{d:`m21.5 11.5-1.914-1.914A2 2 0 0 1 19 8.172v-.344a2 2 0 0 0-.586-1.414l-1.657-1.657A6 6 0 0 0 12.516 3H9l1.243 1.243A6 6 0 0 1 12 8.485V10l2 2h1.172a2 2 0 0 1 1.414.586L18.5 14.5`,key:`15ts47`}]]),x=e(n(),1),S=t(),C=(0,x.memo)(function({data:e,width:t=120,height:n=24,color:r=`#3b82f6`}){let i=(0,x.useRef)(null),a=(0,x.useRef)(0);return(0,x.useEffect)(()=>{let o=Date.now();if(o-a.current<1e3)return;a.current=o;let s=i.current;if(!s||e.length<2)return;let c=s.getContext(`2d`);if(!c)return;let l=window.devicePixelRatio||1;s.width=t*l,s.height=n*l,c.scale(l,l),c.clearRect(0,0,t,n);let u=Math.max(...e,1),d=t/(e.length-1),f=n-4;c.beginPath(),c.strokeStyle=r,c.lineWidth=1.5,c.lineJoin=`round`;for(let t=0;t<e.length;t++){let n=t*d,r=2+f-e[t]/u*f;t===0?c.moveTo(n,r):c.lineTo(n,r)}c.stroke()},[e,t,n,r]),(0,S.jsx)(`canvas`,{ref:i,style:{width:t,height:n},className:`inline-block`})});function w(e){return e>80?`text-red-500`:e>50?`text-yellow-500`:`text-green-500`}function T(e){return e<1024?`${e.toFixed(0)} MB`:`${(e/1024).toFixed(1)} GB`}function E(e){if(!e)return``;let t=Math.round((Date.now()-e)/1e3);if(t<60)return`${t}s`;let n=Math.floor(t/60);if(n<60)return`${n}m`;let r=Math.floor(n/60);return r<24?`${r}h ${n%60}m`:`${Math.floor(r/24)}d ${r%24}h`}var D=(0,x.memo)(function({group:e,Icon:t,isExpanded:n,sparkData:r,isMobile:i,sortKey:a,sortDir:o,onToggle:l,onKill:d}){let p=n?s:c,m=(0,x.useMemo)(()=>a?[...e.processes].sort((e,t)=>{let n=a===`cpu`?e.cpu:e.ramMB,r=a===`cpu`?t.cpu:t.ramMB;return o===`asc`?n-r:r-n}):e.processes,[e.processes,a,o]);return(0,S.jsxs)(S.Fragment,{children:[(0,S.jsxs)(`tr`,{className:`hover:bg-surface-hover cursor-pointer transition-colors`,onClick:l,children:[(0,S.jsx)(`td`,{className:`py-1.5 px-3`,children:(0,S.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,S.jsx)(p,{className:`size-3 text-text-subtle shrink-0`}),(0,S.jsx)(t,{className:`size-3.5 text-text-secondary shrink-0`}),(0,S.jsx)(`span`,{className:`truncate`,children:e.label}),(0,S.jsxs)(`span`,{className:`text-text-subtle`,children:[`(`,e.processes.length,`)`]})]})}),(0,S.jsxs)(`td`,{className:f(`text-right py-1.5 px-2`,w(e.cpu)),children:[e.cpu.toFixed(1),`%`]}),(0,S.jsx)(`td`,{className:`text-right py-1.5 px-2 text-text-secondary`,children:T(e.ramMB)}),!i&&(0,S.jsx)(`td`,{className:`py-1.5 px-2`,children:r.length>1&&(0,S.jsx)(C,{data:r,width:120,height:20})})]}),n&&m.map(e=>(0,S.jsxs)(`tr`,{className:`text-text-subtle group/proc hover:bg-surface-hover transition-colors`,children:[(0,S.jsx)(`td`,{className:`py-1 px-3 pl-10`,children:(0,S.jsxs)(`div`,{className:`flex items-start gap-1.5`,children:[(0,S.jsx)(`span`,{className:`text-text-subtle shrink-0`,children:e.pid}),(0,S.jsx)(`span`,{className:`break-all text-text-secondary`,title:e.command,children:e.command})]})}),(0,S.jsxs)(`td`,{className:`text-right py-1 px-2 align-top`,children:[e.cpu.toFixed(1),`%`]}),(0,S.jsx)(`td`,{className:`text-right py-1 px-2 align-top`,children:T(e.ramMB)}),!i&&(0,S.jsx)(`td`,{className:`align-top py-1 px-2`,children:(0,S.jsxs)(`div`,{className:`flex items-center justify-between gap-1`,children:[(0,S.jsx)(`span`,{className:`text-text-subtle`,title:e.startedAt?new Date(e.startedAt).toLocaleString():``,children:E(e.startedAt)}),(0,S.jsx)(`button`,{onClick:t=>{t.stopPropagation(),d(e.pid)},className:`opacity-0 group-hover/proc:opacity-100 p-0.5 rounded hover:bg-red-500/20 hover:text-red-500 transition-all`,title:`End process ${e.pid}`,children:(0,S.jsx)(u,{className:`size-3`})})]})})]},e.pid))]})});function O({label:e,field:t,activeKey:n,activeDir:r,onClick:o,className:s}){let c=n===t,l=c?r===`asc`?a:i:null;return(0,S.jsx)(`th`,{className:f(`text-right py-1.5 px-2 font-medium cursor-pointer select-none hover:text-text-primary transition-colors`,c&&`text-text-primary`,s),onClick:()=>o(t),children:(0,S.jsxs)(`div`,{className:`flex items-center justify-end gap-0.5`,children:[(0,S.jsx)(`span`,{children:e}),l&&(0,S.jsx)(l,{className:`size-3`})]})})}var k={server:_,terminal:v,"ai-tool":o,build:b,unknown:y},A=200;function j(e,t,n){return e===n?t===`desc`?[n,`asc`]:[null,`desc`]:[n,`desc`]}function M(e,t,n){return t?[...e].sort((e,r)=>{let i=t===`cpu`?e.cpu:e.ramMB,a=t===`cpu`?r.cpu:r.ramMB;return n===`asc`?i-a:a-i}):e}var N=(0,x.memo)(function(){let{latest:e,history:t,isConnected:n}=g(),[r,i]=(0,x.useState)(()=>new Set([`server`])),[a,o]=(0,x.useState)(null),[s,c]=(0,x.useState)(`desc`),u=p(),_=(0,x.useMemo)(()=>{let e=new Map,n=t.slice(-A);for(let t of n)for(let n of t.groups){let t=`${n.type}:${n.label}`,r=e.get(t)??[];r.push(n.cpu),e.set(t,r)}return e},[t]),v=(0,x.useMemo)(()=>e?M(e.groups,a,s):[],[e,a,s]),b=(0,x.useCallback)(async e=>{try{await d.post(`/api/system/resources/kill/${e}`),m.success(`Sent SIGTERM to PID ${e}`)}catch(t){m.error(t.message||`Failed to kill PID ${e}`)}},[]),C=e=>{i(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},E=e=>{let[t,n]=j(a,s,e);o(t),c(n)};if(!e)return(0,S.jsx)(`div`,{className:`flex items-center justify-center h-full text-text-subtle text-sm`,children:n?`Waiting for data...`:`Connecting to resource monitor...`});let N=Math.round((Date.now()-e.timestamp)/1e3);return(0,S.jsxs)(`div`,{className:`h-full flex flex-col overflow-hidden`,children:[(0,S.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-2 border-b border-border shrink-0`,children:[(0,S.jsx)(`h2`,{className:`text-sm font-medium`,children:`System Monitor`}),(0,S.jsxs)(`div`,{className:`flex items-center gap-1.5 text-[10px] text-text-subtle`,children:[n?(0,S.jsx)(l,{className:`size-3 text-green-500`}):(0,S.jsx)(h,{className:`size-3 text-red-500`}),(0,S.jsx)(`span`,{children:n?`Updated ${N}s ago`:`Disconnected`})]})]}),(0,S.jsx)(`div`,{className:`flex-1 overflow-y-auto min-h-0`,children:(0,S.jsxs)(`table`,{className:`w-full text-xs`,children:[(0,S.jsx)(`thead`,{children:(0,S.jsxs)(`tr`,{className:`text-text-subtle border-b border-border`,children:[(0,S.jsx)(`th`,{className:`text-left py-1.5 px-3 font-medium`,children:`Process`}),(0,S.jsx)(O,{label:`CPU`,field:`cpu`,activeKey:a,activeDir:s,onClick:E,className:`w-16`}),(0,S.jsx)(O,{label:`RAM`,field:`ram`,activeKey:a,activeDir:s,onClick:E,className:`w-20`}),!u&&(0,S.jsx)(`th`,{className:`py-1.5 px-2 font-medium w-[130px]`,children:`Trend / Age`})]})}),(0,S.jsx)(`tbody`,{children:v.map(e=>{let t=`${e.type}:${e.label}`;return(0,S.jsx)(D,{group:e,Icon:k[e.type]??y,isExpanded:r.has(t),sparkData:_.get(t)??[],isMobile:u,sortKey:a,sortDir:s,onToggle:()=>C(t),onKill:b},t)})}),(0,S.jsx)(`tfoot`,{children:(0,S.jsxs)(`tr`,{className:`border-t border-border font-medium`,children:[(0,S.jsxs)(`td`,{className:`py-1.5 px-3`,children:[`Total (`,e.total.processCount,` processes)`]}),(0,S.jsxs)(`td`,{className:f(`text-right py-1.5 px-2`,w(e.total.cpu)),children:[e.total.cpu.toFixed(1),`%`]}),(0,S.jsx)(`td`,{className:`text-right py-1.5 px-2 text-text-secondary`,children:T(e.total.ramMB)}),!u&&(0,S.jsx)(`td`,{})]})})]})})]})});export{N as SystemMonitorTab};
@@ -1 +0,0 @@
1
- import{N as e}from"./vendor-mermaid-DkqjpqJK.js";export{e as createTreemapServices};