@hienlh/ppm 0.13.32 → 0.13.33

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 (34) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/assets/skills/ppm/SKILL.md +1 -1
  3. package/assets/skills/ppm/references/http-api.md +1 -1
  4. package/dist/web/assets/{audio-preview-CUQyzUCl.js → audio-preview-Cr3GjyH_.js} +1 -1
  5. package/dist/web/assets/{chat-tab-BAouVHJG.js → chat-tab-Bq8AuPPE.js} +3 -3
  6. package/dist/web/assets/{code-editor-CkZzq2Sd.js → code-editor-abfRXkgG.js} +2 -2
  7. package/dist/web/assets/{conflict-editor-CEilXhpo.js → conflict-editor-UXzd5iEO.js} +1 -1
  8. package/dist/web/assets/{database-viewer-oCfOGBqv.js → database-viewer-iQGshdho.js} +1 -1
  9. package/dist/web/assets/{diff-viewer-B3A6C9W2.js → diff-viewer-Bl-l5K9W.js} +1 -1
  10. package/dist/web/assets/{extension-webview-rH3etns9.js → extension-webview-CCTVAjaU.js} +1 -1
  11. package/dist/web/assets/{glide-data-grid-DdE7PkYl.js → glide-data-grid-DYxTrchL.js} +1 -1
  12. package/dist/web/assets/{image-preview-DsJpgEWA.js → image-preview-DLoL90K7.js} +1 -1
  13. package/dist/web/assets/{index-BQYpBWiY.js → index-BgTyEXDi.js} +10 -10
  14. package/dist/web/assets/keybindings-store-BP0-WBfA.js +1 -0
  15. package/dist/web/assets/{markdown-renderer-C_5GH1wX.js → markdown-renderer-Bv_VAy7V.js} +1 -1
  16. package/dist/web/assets/notification-store-SdYMFZ_D.js +1 -0
  17. package/dist/web/assets/{pdf-preview-CKw0C1oI.js → pdf-preview-DOnr5kiK.js} +1 -1
  18. package/dist/web/assets/{port-forwarding-tab-qO3QPsXx.js → port-forwarding-tab-BVT5RR_9.js} +1 -1
  19. package/dist/web/assets/{postgres-viewer-D5gFlUwQ.js → postgres-viewer-BfLZMw6J.js} +1 -1
  20. package/dist/web/assets/{settings-tab-NbsTG_aq.js → settings-tab-D-G5nGIJ.js} +1 -1
  21. package/dist/web/assets/{sql-query-editor-BUCPRiyQ.js → sql-query-editor-Di1gqWnG.js} +1 -1
  22. package/dist/web/assets/{sqlite-viewer-PKK_aXhw.js → sqlite-viewer-DT_m_XY3.js} +1 -1
  23. package/dist/web/assets/{terminal-tab-CGsnXNWR.js → terminal-tab-CBOCgoJn.js} +1 -1
  24. package/dist/web/assets/{video-preview-BLk5vtRN.js → video-preview-B4Jz9ymO.js} +1 -1
  25. package/dist/web/index.html +1 -1
  26. package/dist/web/sw.js +1 -1
  27. package/package.json +1 -1
  28. package/src/server/ws/chat.ts +4 -2
  29. package/src/web/components/layout/notification-bell-popover.tsx +6 -9
  30. package/src/web/components/layout/project-bar.tsx +3 -1
  31. package/src/web/hooks/use-chat.ts +2 -2
  32. package/src/web/stores/notification-store.ts +7 -5
  33. package/dist/web/assets/keybindings-store-D4HbcnQd.js +0 -1
  34. package/dist/web/assets/notification-store-ByLxhBXA.js +0 -1
@@ -483,8 +483,8 @@ export function useChat(sessionId: string | null, providerId = "claude", project
483
483
 
484
484
  // Cross-tab/device unread sync — server broadcasts when unread state changes
485
485
  if ((data as any).type === "session:unread_changed") {
486
- const { sessionId: sid, unreadCount, unreadType, projectName: pn } = data as any;
487
- useNotificationStore.getState().handleUnreadChanged(sid, unreadCount, unreadType, pn);
486
+ const { sessionId: sid, unreadCount, unreadType, projectName: pn, sessionTitle: sTitle } = data as any;
487
+ useNotificationStore.getState().handleUnreadChanged(sid, unreadCount, unreadType, pn, sTitle);
488
488
  return;
489
489
  }
490
490
 
@@ -48,13 +48,13 @@ interface NotificationStore {
48
48
  /** Hydrate from backend on app load */
49
49
  loadFromServer: (projectName: string) => Promise<void>;
50
50
  /** Handle WS broadcast for cross-tab/device sync */
51
- handleUnreadChanged: (sessionId: string, unreadCount: number, unreadType: string | null, projectName: string) => void;
51
+ handleUnreadChanged: (sessionId: string, unreadCount: number, unreadType: string | null, projectName: string, sessionTitle?: string | null) => void;
52
52
  }
53
53
 
54
54
  export const useNotificationStore = create<NotificationStore>()((set) => ({
55
55
  notifications: new Map(),
56
56
 
57
- addNotification: (sessionId, type, projectName) => {
57
+ addNotification: (sessionId, type, projectName, sessionTitle) => {
58
58
  set((state) => {
59
59
  const next = new Map(state.notifications);
60
60
  const existing = next.get(sessionId);
@@ -62,6 +62,7 @@ export const useNotificationStore = create<NotificationStore>()((set) => ({
62
62
  count: (existing?.count ?? 0) + 1,
63
63
  type,
64
64
  projectName,
65
+ sessionTitle: sessionTitle ?? existing?.sessionTitle ?? null,
65
66
  });
66
67
  return { notifications: next };
67
68
  });
@@ -87,14 +88,14 @@ export const useNotificationStore = create<NotificationStore>()((set) => ({
87
88
 
88
89
  loadFromServer: async (projectName: string) => {
89
90
  try {
90
- const entries = await api.get<Array<{ sessionId: string; unreadCount: number; unreadType: string | null; projectName: string | null }>>(
91
+ const entries = await api.get<Array<{ sessionId: string; unreadCount: number; unreadType: string | null; projectName: string | null; sessionTitle: string | null }>>(
91
92
  `/api/project/${encodeURIComponent(projectName)}/chat/sessions/unread`,
92
93
  );
93
94
  set(() => {
94
95
  const next = new Map<string, NotificationEntry>();
95
96
  for (const e of entries) {
96
97
  if (e.unreadCount > 0) {
97
- next.set(e.sessionId, { count: e.unreadCount, type: e.unreadType || "done", projectName: e.projectName || "" });
98
+ next.set(e.sessionId, { count: e.unreadCount, type: e.unreadType || "done", projectName: e.projectName || "", sessionTitle: e.sessionTitle ?? null });
98
99
  }
99
100
  }
100
101
  return { notifications: next };
@@ -102,7 +103,7 @@ export const useNotificationStore = create<NotificationStore>()((set) => ({
102
103
  } catch { /* server may not support yet — keep empty */ }
103
104
  },
104
105
 
105
- handleUnreadChanged: (sessionId, unreadCount, unreadType, projectName) => {
106
+ handleUnreadChanged: (sessionId, unreadCount, unreadType, projectName, sessionTitle) => {
106
107
  set((state) => {
107
108
  const next = new Map(state.notifications);
108
109
  if (unreadCount === 0) {
@@ -114,6 +115,7 @@ export const useNotificationStore = create<NotificationStore>()((set) => ({
114
115
  count: unreadCount > 0 ? unreadCount : (existing?.count ?? 0) + 1,
115
116
  type: unreadType || "done",
116
117
  projectName: projectName || existing?.projectName || "",
118
+ sessionTitle: sessionTitle ?? existing?.sessionTitle ?? null,
117
119
  });
118
120
  }
119
121
  return { notifications: next };
@@ -1 +0,0 @@
1
- import"./vendor-markdown-0Mxgxy0L.js";import"./api-client-DIhJ5qVW.js";import{A as e}from"./index-BQYpBWiY.js";export{e as useKeybindingsStore};
@@ -1 +0,0 @@
1
- import"./vendor-markdown-0Mxgxy0L.js";import"./api-client-DIhJ5qVW.js";import{S as e}from"./index-BQYpBWiY.js";export{e as useNotificationStore};