claudeck 1.1.1 → 1.2.0

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 (37) hide show
  1. package/README.md +30 -4
  2. package/config/skillsmp-config.json +5 -0
  3. package/db.js +248 -0
  4. package/package.json +11 -2
  5. package/public/css/panels/git-panel.css +220 -0
  6. package/public/css/panels/skills-manager.css +975 -0
  7. package/public/css/ui/input-history.css +109 -0
  8. package/public/css/ui/messages.css +51 -0
  9. package/public/css/ui/notification-bell.css +421 -0
  10. package/public/css/ui/sessions.css +41 -0
  11. package/public/css/ui/worktree.css +442 -0
  12. package/public/index.html +43 -10
  13. package/public/js/core/api.js +83 -0
  14. package/public/js/core/dom.js +15 -0
  15. package/public/js/features/background-sessions.js +11 -0
  16. package/public/js/features/chat.js +501 -3
  17. package/public/js/features/input-history.js +122 -0
  18. package/public/js/features/projects.js +16 -1
  19. package/public/js/features/sessions.js +77 -30
  20. package/public/js/main.js +3 -0
  21. package/public/js/panels/git-panel.js +385 -6
  22. package/public/js/panels/skills-manager.js +1005 -0
  23. package/public/js/ui/messages.js +58 -0
  24. package/public/js/ui/notification-bell.js +240 -0
  25. package/public/js/ui/notification-history.js +210 -0
  26. package/public/js/ui/parallel.js +11 -0
  27. package/public/js/ui/tab-sdk.js +1 -1
  28. package/public/style.css +4 -0
  29. package/server/agent-loop.js +13 -0
  30. package/server/notification-logger.js +27 -0
  31. package/server/routes/notifications.js +57 -1
  32. package/server/routes/sessions.js +41 -0
  33. package/server/routes/skills.js +454 -0
  34. package/server/routes/worktrees.js +93 -0
  35. package/server/utils/git-worktree.js +297 -0
  36. package/server/ws-handler.js +708 -629
  37. package/server.js +17 -1
package/server.js CHANGED
@@ -9,7 +9,7 @@ import { join, dirname } from "path";
9
9
  import { fileURLToPath } from "url";
10
10
  import { appendFileSync, readdirSync, existsSync, statSync } from "fs";
11
11
  import webpush from "web-push";
12
- import { getDb, allClaudeSessions } from "./db.js";
12
+ import { getDb, allClaudeSessions, purgeOldNotifications } from "./db.js";
13
13
  import { initPushSender } from "./server/push-sender.js";
14
14
  import { initTelegramSender } from "./server/telegram-sender.js";
15
15
  import { startTelegramPoller, stopTelegramPoller } from "./server/telegram-poller.js";
@@ -30,7 +30,10 @@ import tipsRouter from "./server/routes/tips.js";
30
30
  import botRouter from "./server/routes/bot.js";
31
31
  import notificationsRouter, { setVapidPublicKey } from "./server/routes/notifications.js";
32
32
  import memoryRouter from "./server/routes/memory.js";
33
+ import worktreesRouter from "./server/routes/worktrees.js";
34
+ import skillsRouter from "./server/routes/skills.js";
33
35
  import { setupWebSocket } from "./server/ws-handler.js";
36
+ import { setWss } from "./server/notification-logger.js";
34
37
 
35
38
  const __filename = fileURLToPath(import.meta.url);
36
39
  const __dirname = dirname(__filename);
@@ -85,6 +88,13 @@ const sessionIds = new Map();
85
88
  // Share sessionIds with sessions router
86
89
  setSessionIds(sessionIds);
87
90
 
91
+ // Reconcile orphaned worktrees (fire-and-forget)
92
+ import { listActiveWorktrees, updateWorktreeStatus } from "./db.js";
93
+ import { reconcileOrphanedWorktrees } from "./server/utils/git-worktree.js";
94
+ reconcileOrphanedWorktrees(listActiveWorktrees, updateWorktreeStatus)
95
+ .then(() => console.log("Worktree reconciliation complete"))
96
+ .catch((e) => console.error("Worktree reconciliation error:", e.message));
97
+
88
98
  // Mount routes
89
99
  app.use("/api/projects", projectsRouter);
90
100
  app.use("/api/sessions", sessionsRouter);
@@ -106,6 +116,8 @@ app.use("/api/tips", tipsRouter);
106
116
  app.use("/api/bot", botRouter);
107
117
  app.use("/api/telegram", telegramRouter);
108
118
  app.use("/api/memory", memoryRouter);
119
+ app.use("/api/worktrees", worktreesRouter);
120
+ app.use("/api/skills", skillsRouter);
109
121
 
110
122
  // Version endpoint
111
123
  import { readFileSync } from "fs";
@@ -164,6 +176,7 @@ app.get("/api/plugins", (req, res) => {
164
176
  });
165
177
 
166
178
  // WebSocket
179
+ setWss(wss);
167
180
  setupWebSocket(wss, sessionIds);
168
181
 
169
182
  const PORT = process.env.PORT || 9009;
@@ -189,6 +202,9 @@ mountPluginRoutes(app, fullStackPluginsDir).then(() => {
189
202
  });
190
203
  });
191
204
 
205
+ // Purge old notifications once per day
206
+ setInterval(() => purgeOldNotifications(90), 24 * 60 * 60 * 1000);
207
+
192
208
  // Graceful shutdown
193
209
  process.on("SIGINT", () => {
194
210
  stopTelegramPoller();