@hienlh/ppm 0.9.84 → 0.9.86

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 (252) hide show
  1. package/260413-1354-new-file-editor-tab/reports/code-reviewer-260413-1420-new-file-tab-review.md +210 -0
  2. package/CHANGELOG.md +23 -0
  3. package/bun.lock +259 -9
  4. package/dist/web/assets/{_basePickBy-5PGDJbfF.js → _basePickBy-Bj0dI1ei.js} +1 -1
  5. package/dist/web/assets/{_baseUniq-BT4Ow4Kk.js → _baseUniq-CyzdZeQH.js} +1 -1
  6. package/dist/web/assets/ai-settings-section-Bo9lCaTd.js +1 -0
  7. package/dist/web/assets/{api-settings-Bn-bIxD1.js → api-settings-CUxg9RE5.js} +1 -1
  8. package/dist/web/assets/{arc-BAOivWpI.js → arc-CxgHJ7Z4.js} +1 -1
  9. package/dist/web/assets/architecture-PBZL5I3N-DDFO_NKq.js +1 -0
  10. package/dist/web/assets/{architectureDiagram-2XIMDMQ5-Z-4eN4za.js → architectureDiagram-2XIMDMQ5-D16OotsC.js} +1 -1
  11. package/dist/web/assets/arrow-up-I9-21gkR.js +1 -0
  12. package/dist/web/assets/{blockDiagram-WCTKOSBZ-BCLqzhuZ.js → blockDiagram-WCTKOSBZ-Ct57Wtfk.js} +1 -1
  13. package/dist/web/assets/{c4Diagram-IC4MRINW-0Vp0Jeas.js → c4Diagram-IC4MRINW-BIymcNsg.js} +1 -1
  14. package/dist/web/assets/channel-wumTB1if.js +1 -0
  15. package/dist/web/assets/chat-tab-BEEd-Km4.js +10 -0
  16. package/dist/web/assets/chevron-right-DY_wImxB.js +1 -0
  17. package/dist/web/assets/{chunk-4BX2VUAB-D4tOov49.js → chunk-4BX2VUAB-CENmY7Kw.js} +1 -1
  18. package/dist/web/assets/{chunk-55IACEB6-DJ6BynZ4.js → chunk-55IACEB6-DhZGI1l3.js} +1 -1
  19. package/dist/web/assets/{chunk-7E7YKBS2-CiyUJxNI.js → chunk-7E7YKBS2-DZcnC7Ow.js} +1 -1
  20. package/dist/web/assets/{chunk-7R4GIKGN-Dv-4cAYn.js → chunk-7R4GIKGN-y8bfHEy-.js} +2 -2
  21. package/dist/web/assets/{chunk-C72U2L5F-D21mS_6G.js → chunk-C72U2L5F-BHPkfQj2.js} +1 -1
  22. package/dist/web/assets/{chunk-EGIJ26TM-DzqmU2Z7.js → chunk-EGIJ26TM-nant2LXl.js} +1 -1
  23. package/dist/web/assets/{chunk-FMBD7UC4-DXncblvW.js → chunk-FMBD7UC4-Bog4cpN-.js} +1 -1
  24. package/dist/web/assets/{chunk-GEFDOKGD-D-pKjlVd.js → chunk-GEFDOKGD-86LFbsAC.js} +1 -1
  25. package/dist/web/assets/chunk-GLR3WWYH-Re-5eSlQ.js +2 -0
  26. package/dist/web/assets/chunk-HHEYEP7N-C45i5G_3.js +1 -0
  27. package/dist/web/assets/{chunk-JSJVCQXG-99JzIdPr.js → chunk-JSJVCQXG-23eG9mgt.js} +1 -1
  28. package/dist/web/assets/{chunk-KX2RTZJC-CRq1OBZv.js → chunk-KX2RTZJC-CHj8TnTB.js} +1 -1
  29. package/dist/web/assets/{chunk-KYZI473N-Bb0MCaIO.js → chunk-KYZI473N-gqRLpJ4w.js} +1 -1
  30. package/dist/web/assets/{chunk-L3YUKLVL-C7qGJrfV.js → chunk-L3YUKLVL-DnSMmNFC.js} +1 -1
  31. package/dist/web/assets/{chunk-MX3YWQON-BpS_PtKp.js → chunk-MX3YWQON-B6g1ZH9X.js} +1 -1
  32. package/dist/web/assets/{chunk-NQ4KR5QH-z_blpjxi.js → chunk-NQ4KR5QH-DX32345Y.js} +1 -1
  33. package/dist/web/assets/{chunk-O4XLMI2P-nDhi_cVu.js → chunk-O4XLMI2P-Vp_V4P-b.js} +1 -1
  34. package/dist/web/assets/{chunk-OZEHJAEY-BXhYx3nO.js → chunk-OZEHJAEY-lKq2SWjA.js} +1 -1
  35. package/dist/web/assets/{chunk-PQ6SQG4A-TF58UVMU.js → chunk-PQ6SQG4A-Bik13fTV.js} +1 -1
  36. package/dist/web/assets/{chunk-PU5JKC2W-ek7k4QVB.js → chunk-PU5JKC2W-DD95Rx35.js} +1 -1
  37. package/dist/web/assets/chunk-QZHKN3VN-N3VXx1VH.js +1 -0
  38. package/dist/web/assets/{chunk-R5LLSJPH-CFwSJijQ.js → chunk-R5LLSJPH-dRhXRnrb.js} +1 -1
  39. package/dist/web/assets/{chunk-WL4C6EOR-ByUrSRin.js → chunk-WL4C6EOR-B1iIvLOG.js} +1 -1
  40. package/dist/web/assets/{chunk-XIRO2GV7-Djlmrely.js → chunk-XIRO2GV7-DZBoNl1_.js} +1 -1
  41. package/dist/web/assets/{chunk-XPW4576I-BPQQBakK.js → chunk-XPW4576I-CgLyyW03.js} +1 -1
  42. package/dist/web/assets/{chunk-XZSTWKYB-DxAOx4hG.js → chunk-XZSTWKYB-DjV8xl5A.js} +1 -1
  43. package/dist/web/assets/{chunk-YBOYWFTD-rQG3QH5s.js → chunk-YBOYWFTD-D_ILLe6_.js} +1 -1
  44. package/dist/web/assets/classDiagram-VBA2DB6C-mr-Cb1me.js +1 -0
  45. package/dist/web/assets/classDiagram-v2-RAHNMMFH-BKe8_uda.js +1 -0
  46. package/dist/web/assets/clone--z5KLAuR.js +1 -0
  47. package/dist/web/assets/code-editor-Ij4p30cr.js +8 -0
  48. package/dist/web/assets/columns-2-IeETSfON.js +1 -0
  49. package/dist/web/assets/{cose-bilkent-S5V4N54A-B_AWZsOP.js → cose-bilkent-S5V4N54A-BGNPFv3x.js} +1 -1
  50. package/dist/web/assets/{csv-preview-D2pJJj3K.js → csv-preview-CwQnOa3E.js} +2 -2
  51. package/dist/web/assets/{dagre-DHq9bhnd.js → dagre-CkhlMHnx.js} +1 -1
  52. package/dist/web/assets/{dagre-KLK3FWXG-BdJr7Byp.js → dagre-KLK3FWXG-Cnp996VG.js} +1 -1
  53. package/dist/web/assets/database-CgTomMxt.js +1 -0
  54. package/dist/web/assets/{database-viewer-Camu01H4.js → database-viewer-C1UHSgft.js} +2 -2
  55. package/dist/web/assets/{diagram-E7M64L7V-_db4pBVA.js → diagram-E7M64L7V-BZF0tSOr.js} +1 -1
  56. package/dist/web/assets/{diagram-IFDJBPK2-xKoeuiJx.js → diagram-IFDJBPK2-nUcO8sN8.js} +1 -1
  57. package/dist/web/assets/{diagram-P4PSJMXO-C8tjJsev.js → diagram-P4PSJMXO-CW0eCkwC.js} +1 -1
  58. package/dist/web/assets/diff-viewer-CVx5naBA.js +4 -0
  59. package/dist/web/assets/dist-CM0oD8tQ.js +1 -0
  60. package/dist/web/assets/{erDiagram-INFDFZHY-BSh2z9Df.js → erDiagram-INFDFZHY-DSkriYZ9.js} +1 -1
  61. package/dist/web/assets/extension-webview-CHVVpV34.js +3 -0
  62. package/dist/web/assets/{flowDiagram-PKNHOUZH-oYaovqyp.js → flowDiagram-PKNHOUZH-CFYAfZBx.js} +1 -1
  63. package/dist/web/assets/{ganttDiagram-A5KZAMGK-DmL26q2P.js → ganttDiagram-A5KZAMGK-KSn4XAU4.js} +1 -1
  64. package/dist/web/assets/gitGraph-HDMCJU4V-OkvBPi6H.js +1 -0
  65. package/dist/web/assets/{gitGraphDiagram-K3NZZRJ6-CMoukSrY.js → gitGraphDiagram-K3NZZRJ6-BMgjjVys.js} +1 -1
  66. package/dist/web/assets/{graphlib-BcsNnGcW.js → graphlib-BWe1iK_s.js} +1 -1
  67. package/dist/web/assets/index-OqgGFmh8.js +26 -0
  68. package/dist/web/assets/index-vA7juDri.css +2 -0
  69. package/dist/web/assets/info-3K5VOQVL-BDU2_bYD.js +1 -0
  70. package/dist/web/assets/infoDiagram-LFFYTUFH-Diq4Cyc3.js +2 -0
  71. package/dist/web/assets/input-BHj0veau.js +45 -0
  72. package/dist/web/assets/{isEmpty-bnrF3Qbc.js → isEmpty-BfLnxq-B.js} +1 -1
  73. package/dist/web/assets/{ishikawaDiagram-PHBUUO56-D05_LyL7.js → ishikawaDiagram-PHBUUO56-CiVEvp8o.js} +1 -1
  74. package/dist/web/assets/{journeyDiagram-4ABVD52K-B_L20qMe.js → journeyDiagram-4ABVD52K-CG_v5Aho.js} +1 -1
  75. package/dist/web/assets/jsx-runtime-BRW_vwa9.js +1 -0
  76. package/dist/web/assets/{kanban-definition-K7BYSVSG-CZ535BbZ.js → kanban-definition-K7BYSVSG-miB0-_Zq.js} +1 -1
  77. package/dist/web/assets/keybindings-store-BQxgPV5o.js +1 -0
  78. package/dist/web/assets/{line-CVvo3dRu.js → line-CSuSrJ9J.js} +1 -1
  79. package/dist/web/assets/{linear-DP4mkX3m.js → linear-DFN_MPsw.js} +1 -1
  80. package/dist/web/assets/markdown-renderer-CRy8xw2B.js +306 -0
  81. package/dist/web/assets/{mermaid-parser.core-C7UwoIh6.js → mermaid-parser.core-CFdP1Z5_.js} +2 -2
  82. package/dist/web/assets/{mindmap-definition-YRQLILUH-x0MTutJp.js → mindmap-definition-YRQLILUH-pYPWwASE.js} +1 -1
  83. package/dist/web/assets/{ordinal-_K3x1fkz.js → ordinal-DpFn432U.js} +1 -1
  84. package/dist/web/assets/packet-RMMSAZCW-BwpIpYB3.js +1 -0
  85. package/dist/web/assets/pie-UPGHQEXC-BPgAfmes.js +1 -0
  86. package/dist/web/assets/{pieDiagram-SKSYHLDU-C1Gjrtzy.js → pieDiagram-SKSYHLDU-Dovdlvhu.js} +1 -1
  87. package/dist/web/assets/plus-DQGIb4mQ.js +1 -0
  88. package/dist/web/assets/port-forwarding-tab-Biua8ov5.js +1 -0
  89. package/dist/web/assets/{postgres-viewer-BQdPMowm.js → postgres-viewer-BcVjCAl4.js} +3 -3
  90. package/dist/web/assets/{quadrantDiagram-337W2JSQ-C8bzJCjQ.js → quadrantDiagram-337W2JSQ-TXe6cU_F.js} +1 -1
  91. package/dist/web/assets/radar-KQ55EAFF-TqxBkWx-.js +1 -0
  92. package/dist/web/assets/refresh-cw-Clk8fdUD.js +1 -0
  93. package/dist/web/assets/{requirementDiagram-Z7DCOOCP-pQyah6WB.js → requirementDiagram-Z7DCOOCP-CuiiuGS9.js} +1 -1
  94. package/dist/web/assets/{sankeyDiagram-WA2Y5GQK-T6RgG-N8.js → sankeyDiagram-WA2Y5GQK-BbRmhv0t.js} +1 -1
  95. package/dist/web/assets/scroll-area-BpXCNme3.js +1 -0
  96. package/dist/web/assets/{sequenceDiagram-2WXFIKYE-BQDJ4CVs.js → sequenceDiagram-2WXFIKYE-B2D8IQDb.js} +1 -1
  97. package/dist/web/assets/settings-tab-C9X-N8hE.js +1 -0
  98. package/dist/web/assets/{sql-query-editor-CY61vWBg.js → sql-query-editor-BFvRvJn0.js} +1 -1
  99. package/dist/web/assets/sqlite-viewer-CPfvwFl4.js +1 -0
  100. package/dist/web/assets/square-vBdqj0bF.js +1 -0
  101. package/dist/web/assets/{stateDiagram-RAJIS63D-66vhiIuk.js → stateDiagram-RAJIS63D-ylr4HxPu.js} +1 -1
  102. package/dist/web/assets/stateDiagram-v2-FVOUBMTO-D6zvxf3M.js +1 -0
  103. package/dist/web/assets/table-Bi27fEaN.js +1 -0
  104. package/dist/web/assets/{terminal-tab-TIJmxHl6.js → terminal-tab-mWwk_weB.js} +2 -2
  105. package/dist/web/assets/text-wrap-D_OmSzhp.js +1 -0
  106. package/dist/web/assets/{timeline-definition-YZTLITO2-DwZqB3nn.js → timeline-definition-YZTLITO2-pMv1grvM.js} +1 -1
  107. package/dist/web/assets/trash-2-CNuB-htI.js +1 -0
  108. package/dist/web/assets/treemap-KZPCXAKY-Kck06FKU.js +1 -0
  109. package/dist/web/assets/{use-monaco-theme-BHn-LEm7.js → use-monaco-theme-CPaeSMAA.js} +1 -1
  110. package/dist/web/assets/{vennDiagram-LZ73GAT5-s9Z71fz-.js → vennDiagram-LZ73GAT5-C-rkIUbo.js} +1 -1
  111. package/dist/web/assets/x-Dw3TjeY_.js +1 -0
  112. package/dist/web/assets/{xychartDiagram-JWTSCODW-DRa_TH4B.js → xychartDiagram-JWTSCODW-CtpjAakO.js} +1 -1
  113. package/dist/web/index.html +18 -12
  114. package/dist/web/sw.js +1 -1
  115. package/docs/codebase-summary.md +134 -11
  116. package/docs/extension-development-guide.md +98 -1
  117. package/docs/journals/260414-1400-ext-git-graph-port-complete.md +147 -0
  118. package/docs/journals/260414-1452-git-graph-faithful-port.md +144 -0
  119. package/docs/journals/260414-1810-git-graph-ui-improvements-complete.md +261 -0
  120. package/docs/journals/260414-2001-bundled-extensions.md +219 -0
  121. package/docs/project-changelog.md +63 -22
  122. package/docs/project-roadmap.md +1 -0
  123. package/docs/system-architecture.md +33 -5
  124. package/package.json +9 -3
  125. package/packages/ext-git-graph/package.json +30 -0
  126. package/packages/ext-git-graph/src/extension-integration.test.ts +230 -0
  127. package/packages/ext-git-graph/src/extension-parsers.test.ts +193 -0
  128. package/packages/ext-git-graph/src/extension.ts +800 -0
  129. package/packages/ext-git-graph/src/git-log-parser.test.ts +271 -0
  130. package/packages/ext-git-graph/src/git-log-parser.ts +38 -0
  131. package/packages/ext-git-graph/src/types.ts +181 -0
  132. package/packages/ext-git-graph/src/webview-html.test.ts +142 -0
  133. package/packages/ext-git-graph/src/webview-html.ts +2199 -0
  134. package/packages/vscode-compat/src/index.ts +4 -0
  135. package/packages/vscode-compat/src/process.ts +25 -0
  136. package/packages/vscode-compat/src/window.ts +10 -0
  137. package/src/cli/commands/ext-cmd.ts +3 -1
  138. package/src/server/index.ts +1 -1
  139. package/src/server/ws/extensions.ts +6 -2
  140. package/src/services/contribution-registry.ts +14 -1
  141. package/src/services/extension-host-worker.ts +7 -3
  142. package/src/services/extension-manifest.ts +18 -1
  143. package/src/services/extension-rpc-handlers.ts +68 -2
  144. package/src/services/extension.service.ts +46 -6
  145. package/src/types/extension-messages.ts +2 -0
  146. package/src/types/extension.ts +8 -0
  147. package/src/web/components/editor/code-editor.tsx +83 -8
  148. package/src/web/components/editor/save-as-dialog.tsx +75 -0
  149. package/src/web/components/extensions/extension-webview.tsx +111 -12
  150. package/src/web/components/layout/command-palette.tsx +43 -17
  151. package/src/web/components/layout/draggable-tab.tsx +120 -67
  152. package/src/web/components/layout/editor-panel.tsx +15 -4
  153. package/src/web/components/layout/mobile-nav.tsx +74 -7
  154. package/src/web/components/layout/tab-bar.tsx +76 -4
  155. package/src/web/components/layout/tab-content.tsx +12 -5
  156. package/src/web/components/layout/upgrade-banner.tsx +3 -0
  157. package/src/web/components/settings/keyboard-shortcuts-section.tsx +46 -1
  158. package/src/web/components/shared/markdown-code-block.tsx +142 -0
  159. package/src/web/components/shared/markdown-context.ts +20 -0
  160. package/src/web/components/shared/markdown-renderer.tsx +113 -288
  161. package/src/web/hooks/use-extension-ws.ts +22 -4
  162. package/src/web/hooks/use-global-keybindings.ts +31 -2
  163. package/src/web/hooks/use-url-sync.ts +8 -3
  164. package/src/web/main.tsx +1 -0
  165. package/src/web/stores/keybindings-store.ts +3 -3
  166. package/src/web/stores/panel-store.ts +2 -2
  167. package/src/web/stores/panel-utils.ts +17 -2
  168. package/src/web/stores/tab-store.ts +17 -1
  169. package/src/web/styles/globals.css +6 -0
  170. package/.opencode/.env.example +0 -98
  171. package/.opencode/skills/ads-management/scripts/.env.example +0 -13
  172. package/.opencode/skills/ai-multimodal/.env.example +0 -230
  173. package/.opencode/skills/cip-design/.env.example +0 -6
  174. package/.opencode/skills/devops/.env.example +0 -76
  175. package/.opencode/skills/docs-seeker/.env.example +0 -15
  176. package/.opencode/skills/elevenlabs/.env.example +0 -3
  177. package/.opencode/skills/marketing-dashboard/.env.example +0 -15
  178. package/.opencode/skills/marketing-dashboard/app/.env.example +0 -2
  179. package/.opencode/skills/marketing-dashboard/server/.env.example +0 -2
  180. package/.opencode/skills/mcp-management/scripts/dist/analyze-tools.js +0 -70
  181. package/.opencode/skills/mcp-management/scripts/dist/cli.js +0 -160
  182. package/.opencode/skills/mcp-management/scripts/dist/mcp-client.js +0 -183
  183. package/.opencode/skills/payment-integration/scripts/.env.example +0 -20
  184. package/.opencode/skills/sequential-thinking/.env.example +0 -8
  185. package/dist/web/assets/architecture-PBZL5I3N-DEO2f3VD.js +0 -1
  186. package/dist/web/assets/arrow-up-BYhx9ckd.js +0 -1
  187. package/dist/web/assets/channel-By7bn0Yq.js +0 -1
  188. package/dist/web/assets/chat-tab-CT2XUgsc.js +0 -10
  189. package/dist/web/assets/chevron-right-4zq1jPv6.js +0 -1
  190. package/dist/web/assets/chunk-GLR3WWYH-DKikpoJM.js +0 -2
  191. package/dist/web/assets/chunk-HHEYEP7N-C7vxA5i9.js +0 -1
  192. package/dist/web/assets/chunk-QZHKN3VN-CYaTbeZf.js +0 -1
  193. package/dist/web/assets/classDiagram-VBA2DB6C-BA8Nj-_C.js +0 -1
  194. package/dist/web/assets/classDiagram-v2-RAHNMMFH-DjYu-6mn.js +0 -1
  195. package/dist/web/assets/clone-LRxlvnMj.js +0 -1
  196. package/dist/web/assets/code-editor-DQiPtcNd.js +0 -8
  197. package/dist/web/assets/columns-2-BoZAN-iw.js +0 -1
  198. package/dist/web/assets/createLucideIcon-PuMiQgHl.js +0 -1
  199. package/dist/web/assets/diff-viewer-CTwcVIP_.js +0 -4
  200. package/dist/web/assets/dist-DIV6WgAG.js +0 -41
  201. package/dist/web/assets/extension-webview-pU1xJyoc.js +0 -3
  202. package/dist/web/assets/git-graph-BnFbmpom.js +0 -1
  203. package/dist/web/assets/gitGraph-HDMCJU4V-Bwna3and.js +0 -1
  204. package/dist/web/assets/index-CP9KnaGh.js +0 -30
  205. package/dist/web/assets/index-Cxz7oGXY.css +0 -2
  206. package/dist/web/assets/info-3K5VOQVL-_vRxVNUm.js +0 -1
  207. package/dist/web/assets/infoDiagram-LFFYTUFH-DWwumDkq.js +0 -2
  208. package/dist/web/assets/jsx-runtime-kMwlnEGE.js +0 -1
  209. package/dist/web/assets/keybindings-store-DdhEeehv.js +0 -1
  210. package/dist/web/assets/markdown-renderer-BjYurPV4.js +0 -326
  211. package/dist/web/assets/packet-RMMSAZCW-DY5PNnZU.js +0 -1
  212. package/dist/web/assets/pie-UPGHQEXC-BHncZutv.js +0 -1
  213. package/dist/web/assets/port-forwarding-tab-Bgr8dmsw.js +0 -1
  214. package/dist/web/assets/radar-KQ55EAFF-DH0AOkUy.js +0 -1
  215. package/dist/web/assets/settings-tab-BNoboN6E.js +0 -1
  216. package/dist/web/assets/sqlite-viewer-srSbGg1D.js +0 -1
  217. package/dist/web/assets/square-oPKIkJiw.js +0 -1
  218. package/dist/web/assets/stateDiagram-v2-FVOUBMTO-BGVqj_g9.js +0 -1
  219. package/dist/web/assets/table-DFevCOMd.js +0 -1
  220. package/dist/web/assets/tag-CXMT0QB6.js +0 -1
  221. package/dist/web/assets/text-wrap-BWNOVswA.js +0 -1
  222. package/dist/web/assets/treemap-KZPCXAKY-B2Xkyv-K.js +0 -1
  223. package/dist/web/assets/x-D2_KzIET.js +0 -1
  224. package/src/web/components/git/git-graph-branch-label.tsx +0 -124
  225. package/src/web/components/git/git-graph-constants.ts +0 -185
  226. package/src/web/components/git/git-graph-detail.tsx +0 -107
  227. package/src/web/components/git/git-graph-dialog.tsx +0 -72
  228. package/src/web/components/git/git-graph-row.tsx +0 -167
  229. package/src/web/components/git/git-graph-settings-dialog.tsx +0 -104
  230. package/src/web/components/git/git-graph-svg.tsx +0 -54
  231. package/src/web/components/git/git-graph-toolbar.tsx +0 -195
  232. package/src/web/components/git/git-graph.tsx +0 -193
  233. package/src/web/components/git/use-column-resize.ts +0 -33
  234. package/src/web/components/git/use-git-graph.ts +0 -201
  235. /package/dist/web/assets/{api-client-BfBM3I7n.js → api-client-BvxmRZUi.js} +0 -0
  236. /package/dist/web/assets/{array-B9UHiPd-.js → array-BFDiaBgf.js} +0 -0
  237. /package/dist/web/assets/{csv-parser-CNNw2RVA.js → csv-parser-i7fjqP2H.js} +0 -0
  238. /package/dist/web/assets/{cytoscape.esm-BW-DbntU.js → cytoscape.esm-C8i2jUzT.js} +0 -0
  239. /package/dist/web/assets/{defaultLocale-5eAKkKJC.js → defaultLocale-ZeknFqNe.js} +0 -0
  240. /package/dist/web/assets/{dist-CSJdAyA9.js → dist-DZmJeHOA.js} +0 -0
  241. /package/dist/web/assets/{init-DlZdxViB.js → init-0VJVrkRJ.js} +0 -0
  242. /package/dist/web/assets/{isArrayLikeObject-B_v2FtYn.js → isArrayLikeObject-ClzWCpcm.js} +0 -0
  243. /package/dist/web/assets/{katex-Bqvo_ZG0.js → katex-DR0kdMDv.js} +0 -0
  244. /package/dist/web/assets/{lib-DurwGtQO.js → lib-CeBVkQ-7.js} +0 -0
  245. /package/dist/web/assets/{math-069Z4SuC.js → math-CRc16Nj6.js} +0 -0
  246. /package/dist/web/assets/{path-6uRLdFF7.js → path-INs8XTPH.js} +0 -0
  247. /package/dist/web/assets/{preload-helper-Bf_JiD2A.js → preload-helper-mr3rCizq.js} +0 -0
  248. /package/dist/web/assets/{react-SKk5z-bm.js → react-0tkk-ztn.js} +0 -0
  249. /package/dist/web/assets/{rough.esm-JX0wREDd.js → rough.esm-eLccZ4OJ.js} +0 -0
  250. /package/dist/web/assets/{sql-completion-provider-DM9Qov6L.js → sql-completion-provider-B8uUWWej.js} +0 -0
  251. /package/dist/web/assets/{src-BqX54PbV.js → src-CqyWLlNZ.js} +0 -0
  252. /package/dist/web/assets/{utils-BNytJOb1.js → utils-DX8jb5qv.js} +0 -0
@@ -1,167 +0,0 @@
1
- import {
2
- GitBranch as GitBranchIcon,
3
- Tag,
4
- Copy,
5
- RotateCcw,
6
- CherryIcon,
7
- } from "lucide-react";
8
- import {
9
- ContextMenu,
10
- ContextMenuContent,
11
- ContextMenuItem,
12
- ContextMenuSeparator,
13
- ContextMenuTrigger,
14
- } from "@/components/ui/context-menu";
15
- import { BranchLabel } from "./git-graph-branch-label";
16
- import { LANE_COLORS, ROW_HEIGHT, relativeDate } from "./git-graph-constants";
17
- import type { GitCommit, GitBranch } from "../../../types/git";
18
-
19
- interface CommitLabel {
20
- name: string;
21
- type: "branch" | "tag";
22
- remotes: string[];
23
- current: boolean;
24
- }
25
-
26
- interface GitGraphRowProps {
27
- commit: GitCommit;
28
- lane: number;
29
- isSelected: boolean;
30
- isHead: boolean;
31
- labels: CommitLabel[];
32
- currentBranch: GitBranch | undefined;
33
- onSelect: () => void;
34
- onCheckout: (ref: string) => void;
35
- onCherryPick: (hash: string) => void;
36
- onRevert: (hash: string) => void;
37
- onMerge: (source: string) => void;
38
- onDeleteBranch: (name: string) => void;
39
- onPushBranch: (branch: string) => void;
40
- onCreatePr: (branch: string) => void;
41
- onOpenCreateBranch: (hash: string) => void;
42
- onOpenCreateTag: (hash: string) => void;
43
- onOpenDiff: () => void;
44
- onCopyHash: () => void;
45
- }
46
-
47
- export function GitGraphRow({
48
- commit,
49
- lane,
50
- isSelected,
51
- isHead,
52
- labels,
53
- currentBranch,
54
- onSelect,
55
- onCheckout,
56
- onCherryPick,
57
- onRevert,
58
- onMerge,
59
- onDeleteBranch,
60
- onPushBranch,
61
- onCreatePr,
62
- onOpenCreateBranch,
63
- onOpenCreateTag,
64
- onOpenDiff,
65
- onCopyHash,
66
- }: GitGraphRowProps) {
67
- const color = LANE_COLORS[lane % LANE_COLORS.length]!;
68
- const branchLabels = labels.filter((l) => l.type === "branch");
69
- const tagLabels = labels.filter((l) => l.type === "tag");
70
-
71
- return (
72
- <ContextMenu>
73
- <ContextMenuTrigger asChild>
74
- <tr
75
- className={`hover:bg-muted/50 cursor-pointer border-b border-border/20 ${
76
- isSelected ? "bg-primary/10" : ""
77
- } ${isHead ? "font-medium" : ""}`}
78
- style={{ height: `${ROW_HEIGHT}px` }}
79
- onClick={onSelect}
80
- >
81
- {/* Description column */}
82
- <td className="px-2 truncate max-w-0">
83
- <div className="flex items-center gap-1.5 min-w-0">
84
- {branchLabels.map((label) => (
85
- <BranchLabel
86
- key={`branch-${label.name}`}
87
- name={label.name}
88
- type="branch"
89
- remotes={label.remotes}
90
- isCurrent={label.current}
91
- color={color}
92
- currentBranch={currentBranch}
93
- onCheckout={onCheckout}
94
- onMerge={onMerge}
95
- onPush={onPushBranch}
96
- onCreatePr={onCreatePr}
97
- onDelete={onDeleteBranch}
98
- />
99
- ))}
100
- {tagLabels.map((label) => (
101
- <BranchLabel
102
- key={`tag-${label.name}`}
103
- name={label.name}
104
- type="tag"
105
- remotes={[]}
106
- isCurrent={false}
107
- color={color}
108
- currentBranch={currentBranch}
109
- onCheckout={onCheckout}
110
- onMerge={onMerge}
111
- onPush={onPushBranch}
112
- onCreatePr={onCreatePr}
113
- onDelete={onDeleteBranch}
114
- />
115
- ))}
116
- <span className="truncate text-xs">{commit.subject}</span>
117
- </div>
118
- </td>
119
-
120
- {/* Date column */}
121
- <td className="px-2 text-xs text-muted-foreground whitespace-nowrap shrink-0">
122
- {relativeDate(commit.authorDate)}
123
- </td>
124
-
125
- {/* Author column */}
126
- <td className="px-2 text-xs text-muted-foreground truncate max-w-[120px]">
127
- {commit.authorName}
128
- </td>
129
-
130
- {/* Commit hash column (last) */}
131
- <td className="px-2 text-xs text-muted-foreground font-mono whitespace-nowrap">
132
- {commit.abbreviatedHash}
133
- </td>
134
- </tr>
135
- </ContextMenuTrigger>
136
-
137
- <ContextMenuContent>
138
- <ContextMenuItem onClick={() => onCheckout(commit.hash)}>
139
- Checkout
140
- </ContextMenuItem>
141
- <ContextMenuItem onClick={() => onOpenCreateBranch(commit.hash)}>
142
- <GitBranchIcon className="size-3" />
143
- Create Branch...
144
- </ContextMenuItem>
145
- <ContextMenuSeparator />
146
- <ContextMenuItem onClick={() => onCherryPick(commit.hash)}>
147
- <CherryIcon className="size-3" />
148
- Cherry Pick
149
- </ContextMenuItem>
150
- <ContextMenuItem onClick={() => onRevert(commit.hash)}>
151
- <RotateCcw className="size-3" />
152
- Revert
153
- </ContextMenuItem>
154
- <ContextMenuItem onClick={() => onOpenCreateTag(commit.hash)}>
155
- <Tag className="size-3" />
156
- Create Tag...
157
- </ContextMenuItem>
158
- <ContextMenuSeparator />
159
- <ContextMenuItem onClick={onOpenDiff}>View Diff</ContextMenuItem>
160
- <ContextMenuItem onClick={onCopyHash}>
161
- <Copy className="size-3" />
162
- Copy Hash
163
- </ContextMenuItem>
164
- </ContextMenuContent>
165
- </ContextMenu>
166
- );
167
- }
@@ -1,104 +0,0 @@
1
- import {
2
- Dialog,
3
- DialogContent,
4
- DialogHeader,
5
- DialogTitle,
6
- } from "@/components/ui/dialog";
7
- import type { GitBranch } from "../../../types/git";
8
-
9
- interface GitGraphSettingsDialogProps {
10
- open: boolean;
11
- onClose: () => void;
12
- projectName: string;
13
- branches: GitBranch[];
14
- }
15
-
16
- export function GitGraphSettingsDialog({
17
- open,
18
- onClose,
19
- projectName,
20
- branches,
21
- }: GitGraphSettingsDialogProps) {
22
- const localBranches = branches.filter((b) => !b.remote);
23
- const remoteBranches = branches.filter((b) => b.remote);
24
-
25
- // Extract unique remotes from remote branch names
26
- const remotes = new Map<string, string[]>();
27
- for (const b of remoteBranches) {
28
- const stripped = b.name.replace(/^remotes\//, "");
29
- const slashIdx = stripped.indexOf("/");
30
- if (slashIdx < 0) continue;
31
- const remoteName = stripped.slice(0, slashIdx);
32
- const branchName = stripped.slice(slashIdx + 1);
33
- const arr = remotes.get(remoteName) ?? [];
34
- arr.push(branchName);
35
- remotes.set(remoteName, arr);
36
- }
37
-
38
- return (
39
- <Dialog open={open} onOpenChange={(o) => { if (!o) onClose(); }}>
40
- <DialogContent className="max-w-md">
41
- <DialogHeader>
42
- <DialogTitle>Repository Settings</DialogTitle>
43
- </DialogHeader>
44
- <div className="space-y-4 text-sm">
45
- {/* General */}
46
- <Section title="General">
47
- <Row label="Name" value={projectName} />
48
- <Row label="Branches" value={`${localBranches.length} local, ${remoteBranches.length} remote`} />
49
- </Section>
50
-
51
- {/* Local branches */}
52
- <Section title="Local Branches">
53
- {localBranches.map((b) => (
54
- <div key={b.name} className="flex items-center gap-2 py-0.5">
55
- <span className={`text-xs ${b.current ? "font-semibold text-primary" : "text-foreground"}`}>
56
- {b.name}
57
- </span>
58
- {b.current && <span className="text-[10px] text-muted-foreground italic">HEAD</span>}
59
- {b.remotes.length > 0 && (
60
- <span className="text-[10px] text-muted-foreground">
61
- ({b.remotes.join(", ")})
62
- </span>
63
- )}
64
- </div>
65
- ))}
66
- </Section>
67
-
68
- {/* Remotes */}
69
- <Section title="Remotes">
70
- {[...remotes.entries()].map(([name, rBranches]) => (
71
- <div key={name} className="py-0.5">
72
- <span className="text-xs font-medium">{name}</span>
73
- <span className="text-[10px] text-muted-foreground ml-2">
74
- {rBranches.length} branch{rBranches.length !== 1 ? "es" : ""}
75
- </span>
76
- </div>
77
- ))}
78
- {remotes.size === 0 && (
79
- <span className="text-xs text-muted-foreground">No remotes configured</span>
80
- )}
81
- </Section>
82
- </div>
83
- </DialogContent>
84
- </Dialog>
85
- );
86
- }
87
-
88
- function Section({ title, children }: { title: string; children: React.ReactNode }) {
89
- return (
90
- <div>
91
- <h4 className="text-xs font-semibold text-muted-foreground uppercase tracking-wider mb-1.5">{title}</h4>
92
- <div className="pl-1">{children}</div>
93
- </div>
94
- );
95
- }
96
-
97
- function Row({ label, value }: { label: string; value: string }) {
98
- return (
99
- <div className="flex items-center gap-3 py-0.5">
100
- <span className="text-xs text-muted-foreground w-16 shrink-0">{label}</span>
101
- <span className="text-xs">{value}</span>
102
- </div>
103
- );
104
- }
@@ -1,54 +0,0 @@
1
- import { LANE_COLORS, LANE_WIDTH, ROW_HEIGHT, NODE_RADIUS } from "./git-graph-constants";
2
- import type { GitCommit } from "../../../types/git";
3
-
4
- interface GitGraphSvgProps {
5
- commits: GitCommit[];
6
- laneMap: Map<string, number>;
7
- svgPaths: Array<{ d: string; color: string }>;
8
- width: number;
9
- height: number;
10
- headHash: string;
11
- }
12
-
13
- export function GitGraphSvg({
14
- commits,
15
- laneMap,
16
- svgPaths,
17
- width,
18
- height,
19
- headHash,
20
- }: GitGraphSvgProps) {
21
- return (
22
- <svg width={width} height={height}>
23
- {/* Connection lines */}
24
- {svgPaths.map((p, i) => (
25
- <path
26
- key={i}
27
- d={p.d}
28
- stroke={p.color}
29
- strokeWidth={2}
30
- fill="none"
31
- />
32
- ))}
33
- {/* Commit dots */}
34
- {commits.map((c, ci) => {
35
- const cLane = laneMap.get(c.hash) ?? 0;
36
- const cx = cLane * LANE_WIDTH + LANE_WIDTH / 2;
37
- const cy = ci * ROW_HEIGHT + ROW_HEIGHT / 2;
38
- const cColor = LANE_COLORS[cLane % LANE_COLORS.length]!;
39
- const isHead = c.hash === headHash;
40
- return (
41
- <circle
42
- key={c.hash}
43
- cx={cx}
44
- cy={cy}
45
- r={isHead ? NODE_RADIUS + 1 : NODE_RADIUS}
46
- fill={cColor}
47
- stroke={isHead ? "#000" : "none"}
48
- strokeWidth={isHead ? 2 : 0}
49
- />
50
- );
51
- })}
52
- </svg>
53
- );
54
- }
@@ -1,195 +0,0 @@
1
- import { useState, useRef, useEffect } from "react";
2
- import {
3
- RefreshCw,
4
- Download,
5
- Search,
6
- Settings,
7
- X,
8
- ChevronDown,
9
- Check,
10
- } from "lucide-react";
11
- import { Button } from "@/components/ui/button";
12
- import { Input } from "@/components/ui/input";
13
- import type { GitBranch } from "../../../types/git";
14
-
15
- interface GitGraphToolbarProps {
16
- branches: GitBranch[];
17
- branchFilter: string;
18
- onBranchFilterChange: (value: string) => void;
19
- searchQuery: string;
20
- onSearchQueryChange: (value: string) => void;
21
- showSearch: boolean;
22
- onToggleSearch: () => void;
23
- onFetch: () => void;
24
- onRefresh: () => void;
25
- onOpenSettings?: () => void;
26
- loading: boolean;
27
- acting: boolean;
28
- projectName?: string;
29
- }
30
-
31
- export function GitGraphToolbar({
32
- branches,
33
- branchFilter,
34
- onBranchFilterChange,
35
- searchQuery,
36
- onSearchQueryChange,
37
- showSearch,
38
- onToggleSearch,
39
- onFetch,
40
- onRefresh,
41
- onOpenSettings,
42
- loading,
43
- acting,
44
- projectName,
45
- }: GitGraphToolbarProps) {
46
- const localBranches = branches.filter((b) => !b.remote);
47
- const [dropdownOpen, setDropdownOpen] = useState(false);
48
- const [branchSearch, setBranchSearch] = useState("");
49
- const dropdownRef = useRef<HTMLDivElement>(null);
50
-
51
- // Close dropdown on outside click
52
- useEffect(() => {
53
- if (!dropdownOpen) return;
54
- const handler = (e: MouseEvent) => {
55
- if (dropdownRef.current && !dropdownRef.current.contains(e.target as Node)) {
56
- setDropdownOpen(false);
57
- setBranchSearch("");
58
- }
59
- };
60
- document.addEventListener("mousedown", handler);
61
- return () => document.removeEventListener("mousedown", handler);
62
- }, [dropdownOpen]);
63
-
64
- const filteredBranches = branchSearch
65
- ? localBranches.filter((b) =>
66
- b.name.toLowerCase().includes(branchSearch.toLowerCase()),
67
- )
68
- : localBranches;
69
-
70
- const selectedLabel =
71
- branchFilter === "__all__"
72
- ? "Show All"
73
- : localBranches.find((b) => b.name === branchFilter)?.name ?? "Show All";
74
-
75
- return (
76
- <div className="border-b bg-background">
77
- <div className="flex items-center gap-1.5 px-2 py-1.5">
78
- {/* Repo (single for now) */}
79
- <div className="flex items-center gap-1 text-xs text-muted-foreground shrink-0">
80
- <span className="font-semibold">Repo:</span>
81
- <span className="font-medium text-foreground truncate max-w-[120px]">
82
- {projectName ?? "—"}
83
- </span>
84
- </div>
85
-
86
- <div className="w-px h-4 bg-border mx-1" />
87
-
88
- {/* Branch filter — custom searchable dropdown */}
89
- <div className="relative shrink-0" ref={dropdownRef}>
90
- <button
91
- type="button"
92
- className="flex items-center gap-1 h-6 px-2 text-xs border rounded-md bg-transparent hover:bg-muted/50"
93
- onClick={() => { setDropdownOpen((o) => !o); setBranchSearch(""); }}
94
- >
95
- <span className="font-semibold text-muted-foreground">Branches:</span>
96
- <span className="max-w-[100px] truncate">{selectedLabel}</span>
97
- <ChevronDown className="size-3 opacity-50" />
98
- </button>
99
- {dropdownOpen && (
100
- <div className="absolute top-full left-0 mt-1 z-50 w-[220px] rounded-md border bg-popover shadow-md">
101
- <div className="p-1.5">
102
- <Input
103
- className="h-6 text-xs px-2"
104
- placeholder="Filter branches..."
105
- value={branchSearch}
106
- onChange={(e) => setBranchSearch(e.target.value)}
107
- autoFocus
108
- />
109
- </div>
110
- <div className="max-h-[200px] overflow-y-auto p-1">
111
- <BranchDropdownItem
112
- label="Show All"
113
- selected={branchFilter === "__all__"}
114
- onClick={() => { onBranchFilterChange("__all__"); setDropdownOpen(false); }}
115
- />
116
- {filteredBranches.map((b) => (
117
- <BranchDropdownItem
118
- key={b.name}
119
- label={b.name}
120
- current={b.current}
121
- selected={branchFilter === b.name}
122
- onClick={() => { onBranchFilterChange(b.name); setDropdownOpen(false); }}
123
- />
124
- ))}
125
- {filteredBranches.length === 0 && branchSearch && (
126
- <div className="px-2 py-1.5 text-xs text-muted-foreground">No branches found</div>
127
- )}
128
- </div>
129
- </div>
130
- )}
131
- </div>
132
-
133
- <div className="flex-1" />
134
-
135
- {/* Search input (toggled) */}
136
- {showSearch && (
137
- <div className="flex items-center gap-1">
138
- <Input
139
- className="h-6 text-xs w-[160px] px-2"
140
- placeholder="Search commits..."
141
- value={searchQuery}
142
- onChange={(e) => onSearchQueryChange(e.target.value)}
143
- autoFocus
144
- />
145
- <Button variant="ghost" size="icon-xs" onClick={onToggleSearch}>
146
- <X className="size-3" />
147
- </Button>
148
- </div>
149
- )}
150
-
151
- {/* Action buttons */}
152
- {!showSearch && (
153
- <Button variant="ghost" size="icon-xs" onClick={onToggleSearch} title="Find">
154
- <Search className="size-3.5" />
155
- </Button>
156
- )}
157
- <Button variant="ghost" size="icon-xs" onClick={onOpenSettings} title="Settings">
158
- <Settings className="size-3.5" />
159
- </Button>
160
- <Button variant="ghost" size="icon-xs" onClick={onFetch} disabled={acting} title="Fetch">
161
- <Download className="size-3.5" />
162
- </Button>
163
- <Button variant="ghost" size="icon-xs" onClick={onRefresh} disabled={acting} title="Refresh">
164
- <RefreshCw className={`size-3.5 ${loading ? "animate-spin" : ""}`} />
165
- </Button>
166
- </div>
167
- </div>
168
- );
169
- }
170
-
171
- function BranchDropdownItem({
172
- label,
173
- selected,
174
- current,
175
- onClick,
176
- }: {
177
- label: string;
178
- selected: boolean;
179
- current?: boolean;
180
- onClick: () => void;
181
- }) {
182
- return (
183
- <button
184
- type="button"
185
- className="flex items-center gap-2 w-full px-2 py-1 text-xs rounded-sm hover:bg-accent hover:text-accent-foreground text-left"
186
- onClick={onClick}
187
- >
188
- <Check className={`size-3 shrink-0 ${selected ? "opacity-100" : "opacity-0"}`} />
189
- <span className="truncate flex-1">{label}</span>
190
- {current && (
191
- <span className="text-[10px] text-muted-foreground italic">current</span>
192
- )}
193
- </button>
194
- );
195
- }