@jacques-ai/server 0.0.7-alpha.1
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.
- package/dist/config/config.d.ts +34 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +32 -0
- package/dist/config/config.js.map +1 -0
- package/dist/connection/applescript.d.ts +46 -0
- package/dist/connection/applescript.d.ts.map +1 -0
- package/dist/connection/applescript.js +62 -0
- package/dist/connection/applescript.js.map +1 -0
- package/dist/connection/applescript.test.d.ts +5 -0
- package/dist/connection/applescript.test.d.ts.map +1 -0
- package/dist/connection/applescript.test.js +64 -0
- package/dist/connection/applescript.test.js.map +1 -0
- package/dist/connection/constants.d.ts +88 -0
- package/dist/connection/constants.d.ts.map +1 -0
- package/dist/connection/constants.js +110 -0
- package/dist/connection/constants.js.map +1 -0
- package/dist/connection/git-info.d.ts +30 -0
- package/dist/connection/git-info.d.ts.map +1 -0
- package/dist/connection/git-info.js +52 -0
- package/dist/connection/git-info.js.map +1 -0
- package/dist/connection/git-info.test.d.ts +5 -0
- package/dist/connection/git-info.test.d.ts.map +1 -0
- package/dist/connection/git-info.test.js +35 -0
- package/dist/connection/git-info.test.js.map +1 -0
- package/dist/connection/index.d.ts +19 -0
- package/dist/connection/index.d.ts.map +1 -0
- package/dist/connection/index.js +36 -0
- package/dist/connection/index.js.map +1 -0
- package/dist/connection/process-detection.d.ts +58 -0
- package/dist/connection/process-detection.d.ts.map +1 -0
- package/dist/connection/process-detection.js +239 -0
- package/dist/connection/process-detection.js.map +1 -0
- package/dist/connection/process-detection.test.d.ts +5 -0
- package/dist/connection/process-detection.test.d.ts.map +1 -0
- package/dist/connection/process-detection.test.js +43 -0
- package/dist/connection/process-detection.test.js.map +1 -0
- package/dist/connection/session-discovery.d.ts +55 -0
- package/dist/connection/session-discovery.d.ts.map +1 -0
- package/dist/connection/session-discovery.js +311 -0
- package/dist/connection/session-discovery.js.map +1 -0
- package/dist/connection/terminal-key.d.ts +126 -0
- package/dist/connection/terminal-key.d.ts.map +1 -0
- package/dist/connection/terminal-key.js +271 -0
- package/dist/connection/terminal-key.js.map +1 -0
- package/dist/connection/terminal-key.test.d.ts +5 -0
- package/dist/connection/terminal-key.test.d.ts.map +1 -0
- package/dist/connection/terminal-key.test.js +221 -0
- package/dist/connection/terminal-key.test.js.map +1 -0
- package/dist/connection/worktree.d.ts +114 -0
- package/dist/connection/worktree.d.ts.map +1 -0
- package/dist/connection/worktree.js +320 -0
- package/dist/connection/worktree.js.map +1 -0
- package/dist/connection/worktree.test.d.ts +5 -0
- package/dist/connection/worktree.test.d.ts.map +1 -0
- package/dist/connection/worktree.test.js +113 -0
- package/dist/connection/worktree.test.js.map +1 -0
- package/dist/focus-watcher.d.ts +51 -0
- package/dist/focus-watcher.d.ts.map +1 -0
- package/dist/focus-watcher.js +169 -0
- package/dist/focus-watcher.js.map +1 -0
- package/dist/handlers/event-handler.d.ts +93 -0
- package/dist/handlers/event-handler.d.ts.map +1 -0
- package/dist/handlers/event-handler.js +196 -0
- package/dist/handlers/event-handler.js.map +1 -0
- package/dist/handlers/event-handler.test.d.ts +5 -0
- package/dist/handlers/event-handler.test.d.ts.map +1 -0
- package/dist/handlers/event-handler.test.js +305 -0
- package/dist/handlers/event-handler.test.js.map +1 -0
- package/dist/handlers/session-handler.d.ts +23 -0
- package/dist/handlers/session-handler.d.ts.map +1 -0
- package/dist/handlers/session-handler.js +104 -0
- package/dist/handlers/session-handler.js.map +1 -0
- package/dist/handlers/session-handler.test.d.ts +5 -0
- package/dist/handlers/session-handler.test.d.ts.map +1 -0
- package/dist/handlers/session-handler.test.js +89 -0
- package/dist/handlers/session-handler.test.js.map +1 -0
- package/dist/handlers/settings-handler.d.ts +32 -0
- package/dist/handlers/settings-handler.d.ts.map +1 -0
- package/dist/handlers/settings-handler.js +127 -0
- package/dist/handlers/settings-handler.js.map +1 -0
- package/dist/handlers/settings-handler.test.d.ts +5 -0
- package/dist/handlers/settings-handler.test.d.ts.map +1 -0
- package/dist/handlers/settings-handler.test.js +105 -0
- package/dist/handlers/settings-handler.test.js.map +1 -0
- package/dist/handlers/window-handler.d.ts +30 -0
- package/dist/handlers/window-handler.d.ts.map +1 -0
- package/dist/handlers/window-handler.js +486 -0
- package/dist/handlers/window-handler.js.map +1 -0
- package/dist/handlers/window-handler.test.d.ts +8 -0
- package/dist/handlers/window-handler.test.d.ts.map +1 -0
- package/dist/handlers/window-handler.test.js +167 -0
- package/dist/handlers/window-handler.test.js.map +1 -0
- package/dist/handlers/worktree-handler.d.ts +28 -0
- package/dist/handlers/worktree-handler.d.ts.map +1 -0
- package/dist/handlers/worktree-handler.js +268 -0
- package/dist/handlers/worktree-handler.js.map +1 -0
- package/dist/handlers/worktree-handler.test.d.ts +8 -0
- package/dist/handlers/worktree-handler.test.d.ts.map +1 -0
- package/dist/handlers/worktree-handler.test.js +118 -0
- package/dist/handlers/worktree-handler.test.js.map +1 -0
- package/dist/handlers/ws-utils.d.ts +12 -0
- package/dist/handlers/ws-utils.d.ts.map +1 -0
- package/dist/handlers/ws-utils.js +16 -0
- package/dist/handlers/ws-utils.js.map +1 -0
- package/dist/http-api.d.ts +26 -0
- package/dist/http-api.d.ts.map +1 -0
- package/dist/http-api.js +148 -0
- package/dist/http-api.js.map +1 -0
- package/dist/logger.d.ts +42 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +147 -0
- package/dist/logger.js.map +1 -0
- package/dist/logging/logger-factory.d.ts +51 -0
- package/dist/logging/logger-factory.d.ts.map +1 -0
- package/dist/logging/logger-factory.js +59 -0
- package/dist/logging/logger-factory.js.map +1 -0
- package/dist/mcp/search-tool.d.ts +65 -0
- package/dist/mcp/search-tool.d.ts.map +1 -0
- package/dist/mcp/search-tool.js +176 -0
- package/dist/mcp/search-tool.js.map +1 -0
- package/dist/mcp/server.d.ts +9 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +152 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/process-scanner.d.ts +96 -0
- package/dist/process-scanner.d.ts.map +1 -0
- package/dist/process-scanner.js +194 -0
- package/dist/process-scanner.js.map +1 -0
- package/dist/routes/__tests__/archive-routes.test.d.ts +5 -0
- package/dist/routes/__tests__/archive-routes.test.d.ts.map +1 -0
- package/dist/routes/__tests__/archive-routes.test.js +158 -0
- package/dist/routes/__tests__/archive-routes.test.js.map +1 -0
- package/dist/routes/__tests__/config-routes.test.d.ts +5 -0
- package/dist/routes/__tests__/config-routes.test.d.ts.map +1 -0
- package/dist/routes/__tests__/config-routes.test.js +112 -0
- package/dist/routes/__tests__/config-routes.test.js.map +1 -0
- package/dist/routes/__tests__/http-utils.test.d.ts +5 -0
- package/dist/routes/__tests__/http-utils.test.d.ts.map +1 -0
- package/dist/routes/__tests__/http-utils.test.js +102 -0
- package/dist/routes/__tests__/http-utils.test.js.map +1 -0
- package/dist/routes/__tests__/notification-routes.test.d.ts +5 -0
- package/dist/routes/__tests__/notification-routes.test.d.ts.map +1 -0
- package/dist/routes/__tests__/notification-routes.test.js +91 -0
- package/dist/routes/__tests__/notification-routes.test.js.map +1 -0
- package/dist/routes/__tests__/project-routes.test.d.ts +5 -0
- package/dist/routes/__tests__/project-routes.test.d.ts.map +1 -0
- package/dist/routes/__tests__/project-routes.test.js +168 -0
- package/dist/routes/__tests__/project-routes.test.js.map +1 -0
- package/dist/routes/__tests__/session-routes.test.d.ts +5 -0
- package/dist/routes/__tests__/session-routes.test.d.ts.map +1 -0
- package/dist/routes/__tests__/session-routes.test.js +198 -0
- package/dist/routes/__tests__/session-routes.test.js.map +1 -0
- package/dist/routes/__tests__/source-routes.test.d.ts +5 -0
- package/dist/routes/__tests__/source-routes.test.d.ts.map +1 -0
- package/dist/routes/__tests__/source-routes.test.js +142 -0
- package/dist/routes/__tests__/source-routes.test.js.map +1 -0
- package/dist/routes/__tests__/sync-routes.test.d.ts +5 -0
- package/dist/routes/__tests__/sync-routes.test.d.ts.map +1 -0
- package/dist/routes/__tests__/sync-routes.test.js +77 -0
- package/dist/routes/__tests__/sync-routes.test.js.map +1 -0
- package/dist/routes/__tests__/test-helpers.d.ts +47 -0
- package/dist/routes/__tests__/test-helpers.d.ts.map +1 -0
- package/dist/routes/__tests__/test-helpers.js +97 -0
- package/dist/routes/__tests__/test-helpers.js.map +1 -0
- package/dist/routes/archive-routes.d.ts +15 -0
- package/dist/routes/archive-routes.d.ts.map +1 -0
- package/dist/routes/archive-routes.js +181 -0
- package/dist/routes/archive-routes.js.map +1 -0
- package/dist/routes/claude-routes.d.ts +9 -0
- package/dist/routes/claude-routes.d.ts.map +1 -0
- package/dist/routes/claude-routes.js +47 -0
- package/dist/routes/claude-routes.js.map +1 -0
- package/dist/routes/config-routes.d.ts +9 -0
- package/dist/routes/config-routes.d.ts.map +1 -0
- package/dist/routes/config-routes.js +56 -0
- package/dist/routes/config-routes.js.map +1 -0
- package/dist/routes/config-store.d.ts +41 -0
- package/dist/routes/config-store.d.ts.map +1 -0
- package/dist/routes/config-store.js +52 -0
- package/dist/routes/config-store.js.map +1 -0
- package/dist/routes/http-utils.d.ts +32 -0
- package/dist/routes/http-utils.d.ts.map +1 -0
- package/dist/routes/http-utils.js +123 -0
- package/dist/routes/http-utils.js.map +1 -0
- package/dist/routes/index.d.ts +19 -0
- package/dist/routes/index.d.ts.map +1 -0
- package/dist/routes/index.js +17 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/routes/notification-routes.d.ts +10 -0
- package/dist/routes/notification-routes.d.ts.map +1 -0
- package/dist/routes/notification-routes.js +64 -0
- package/dist/routes/notification-routes.js.map +1 -0
- package/dist/routes/project-routes.d.ts +22 -0
- package/dist/routes/project-routes.d.ts.map +1 -0
- package/dist/routes/project-routes.js +415 -0
- package/dist/routes/project-routes.js.map +1 -0
- package/dist/routes/session-routes.d.ts +18 -0
- package/dist/routes/session-routes.d.ts.map +1 -0
- package/dist/routes/session-routes.js +609 -0
- package/dist/routes/session-routes.js.map +1 -0
- package/dist/routes/source-routes.d.ts +12 -0
- package/dist/routes/source-routes.d.ts.map +1 -0
- package/dist/routes/source-routes.js +119 -0
- package/dist/routes/source-routes.js.map +1 -0
- package/dist/routes/static-routes.d.ts +12 -0
- package/dist/routes/static-routes.d.ts.map +1 -0
- package/dist/routes/static-routes.js +52 -0
- package/dist/routes/static-routes.js.map +1 -0
- package/dist/routes/sync-routes.d.ts +9 -0
- package/dist/routes/sync-routes.d.ts.map +1 -0
- package/dist/routes/sync-routes.js +78 -0
- package/dist/routes/sync-routes.js.map +1 -0
- package/dist/routes/tile-routes.d.ts +10 -0
- package/dist/routes/tile-routes.d.ts.map +1 -0
- package/dist/routes/tile-routes.js +108 -0
- package/dist/routes/tile-routes.js.map +1 -0
- package/dist/routes/types.d.ts +17 -0
- package/dist/routes/types.d.ts.map +1 -0
- package/dist/routes/types.js +5 -0
- package/dist/routes/types.js.map +1 -0
- package/dist/routes/usage-routes.d.ts +8 -0
- package/dist/routes/usage-routes.d.ts.map +1 -0
- package/dist/routes/usage-routes.js +18 -0
- package/dist/routes/usage-routes.js.map +1 -0
- package/dist/server.d.ts +8 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +173 -0
- package/dist/server.js.map +1 -0
- package/dist/services/branch-divergence-service.d.ts +48 -0
- package/dist/services/branch-divergence-service.d.ts.map +1 -0
- package/dist/services/branch-divergence-service.js +156 -0
- package/dist/services/branch-divergence-service.js.map +1 -0
- package/dist/services/broadcast-service.d.ts +68 -0
- package/dist/services/broadcast-service.d.ts.map +1 -0
- package/dist/services/broadcast-service.js +78 -0
- package/dist/services/broadcast-service.js.map +1 -0
- package/dist/services/broadcast-service.test.d.ts +5 -0
- package/dist/services/broadcast-service.test.d.ts.map +1 -0
- package/dist/services/broadcast-service.test.js +130 -0
- package/dist/services/broadcast-service.test.js.map +1 -0
- package/dist/services/chat-service.d.ts +72 -0
- package/dist/services/chat-service.d.ts.map +1 -0
- package/dist/services/chat-service.js +342 -0
- package/dist/services/chat-service.js.map +1 -0
- package/dist/services/chat-system-prompt.d.ts +14 -0
- package/dist/services/chat-system-prompt.d.ts.map +1 -0
- package/dist/services/chat-system-prompt.js +68 -0
- package/dist/services/chat-system-prompt.js.map +1 -0
- package/dist/services/notification-service.d.ts +115 -0
- package/dist/services/notification-service.d.ts.map +1 -0
- package/dist/services/notification-service.js +424 -0
- package/dist/services/notification-service.js.map +1 -0
- package/dist/services/notification-service.test.d.ts +5 -0
- package/dist/services/notification-service.test.d.ts.map +1 -0
- package/dist/services/notification-service.test.js +918 -0
- package/dist/services/notification-service.test.js.map +1 -0
- package/dist/session/cleanup-service.d.ts +51 -0
- package/dist/session/cleanup-service.d.ts.map +1 -0
- package/dist/session/cleanup-service.js +98 -0
- package/dist/session/cleanup-service.js.map +1 -0
- package/dist/session/cleanup-service.test.d.ts +5 -0
- package/dist/session/cleanup-service.test.d.ts.map +1 -0
- package/dist/session/cleanup-service.test.js +121 -0
- package/dist/session/cleanup-service.test.js.map +1 -0
- package/dist/session/process-monitor.d.ts +79 -0
- package/dist/session/process-monitor.d.ts.map +1 -0
- package/dist/session/process-monitor.js +270 -0
- package/dist/session/process-monitor.js.map +1 -0
- package/dist/session/process-monitor.test.d.ts +5 -0
- package/dist/session/process-monitor.test.d.ts.map +1 -0
- package/dist/session/process-monitor.test.js +367 -0
- package/dist/session/process-monitor.test.js.map +1 -0
- package/dist/session/session-factory.d.ts +29 -0
- package/dist/session/session-factory.d.ts.map +1 -0
- package/dist/session/session-factory.js +123 -0
- package/dist/session/session-factory.js.map +1 -0
- package/dist/session/session-factory.test.d.ts +5 -0
- package/dist/session/session-factory.test.d.ts.map +1 -0
- package/dist/session/session-factory.test.js +299 -0
- package/dist/session/session-factory.test.js.map +1 -0
- package/dist/session-registry.d.ts +168 -0
- package/dist/session-registry.d.ts.map +1 -0
- package/dist/session-registry.js +626 -0
- package/dist/session-registry.js.map +1 -0
- package/dist/session-registry.test.d.ts +5 -0
- package/dist/session-registry.test.d.ts.map +1 -0
- package/dist/session-registry.test.js +582 -0
- package/dist/session-registry.test.js.map +1 -0
- package/dist/start-server.d.ts +31 -0
- package/dist/start-server.d.ts.map +1 -0
- package/dist/start-server.js +408 -0
- package/dist/start-server.js.map +1 -0
- package/dist/terminal-activator.d.ts +29 -0
- package/dist/terminal-activator.d.ts.map +1 -0
- package/dist/terminal-activator.js +264 -0
- package/dist/terminal-activator.js.map +1 -0
- package/dist/terminal-activator.test.d.ts +9 -0
- package/dist/terminal-activator.test.d.ts.map +1 -0
- package/dist/terminal-activator.test.js +95 -0
- package/dist/terminal-activator.test.js.map +1 -0
- package/dist/terminal-launcher.d.ts +51 -0
- package/dist/terminal-launcher.d.ts.map +1 -0
- package/dist/terminal-launcher.js +298 -0
- package/dist/terminal-launcher.js.map +1 -0
- package/dist/terminal-launcher.test.d.ts +8 -0
- package/dist/terminal-launcher.test.d.ts.map +1 -0
- package/dist/terminal-launcher.test.js +222 -0
- package/dist/terminal-launcher.test.js.map +1 -0
- package/dist/types.d.ts +796 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +15 -0
- package/dist/types.js.map +1 -0
- package/dist/unix-socket.d.ts +68 -0
- package/dist/unix-socket.d.ts.map +1 -0
- package/dist/unix-socket.js +180 -0
- package/dist/unix-socket.js.map +1 -0
- package/dist/usage-limits.d.ts +13 -0
- package/dist/usage-limits.d.ts.map +1 -0
- package/dist/usage-limits.js +112 -0
- package/dist/usage-limits.js.map +1 -0
- package/dist/watchers/handoff-watcher.d.ts +74 -0
- package/dist/watchers/handoff-watcher.d.ts.map +1 -0
- package/dist/watchers/handoff-watcher.js +124 -0
- package/dist/watchers/handoff-watcher.js.map +1 -0
- package/dist/watchers/handoff-watcher.test.d.ts +8 -0
- package/dist/watchers/handoff-watcher.test.d.ts.map +1 -0
- package/dist/watchers/handoff-watcher.test.js +142 -0
- package/dist/watchers/handoff-watcher.test.js.map +1 -0
- package/dist/websocket.d.ts +107 -0
- package/dist/websocket.d.ts.map +1 -0
- package/dist/websocket.js +268 -0
- package/dist/websocket.js.map +1 -0
- package/dist/window-manager/index.d.ts +28 -0
- package/dist/window-manager/index.d.ts.map +1 -0
- package/dist/window-manager/index.js +56 -0
- package/dist/window-manager/index.js.map +1 -0
- package/dist/window-manager/layouts.d.ts +42 -0
- package/dist/window-manager/layouts.d.ts.map +1 -0
- package/dist/window-manager/layouts.js +133 -0
- package/dist/window-manager/layouts.js.map +1 -0
- package/dist/window-manager/linux-manager.d.ts +45 -0
- package/dist/window-manager/linux-manager.d.ts.map +1 -0
- package/dist/window-manager/linux-manager.js +299 -0
- package/dist/window-manager/linux-manager.js.map +1 -0
- package/dist/window-manager/macos-manager.d.ts +103 -0
- package/dist/window-manager/macos-manager.d.ts.map +1 -0
- package/dist/window-manager/macos-manager.js +637 -0
- package/dist/window-manager/macos-manager.js.map +1 -0
- package/dist/window-manager/smart-layouts.d.ts +116 -0
- package/dist/window-manager/smart-layouts.d.ts.map +1 -0
- package/dist/window-manager/smart-layouts.js +188 -0
- package/dist/window-manager/smart-layouts.js.map +1 -0
- package/dist/window-manager/smart-layouts.test.d.ts +8 -0
- package/dist/window-manager/smart-layouts.test.d.ts.map +1 -0
- package/dist/window-manager/smart-layouts.test.js +311 -0
- package/dist/window-manager/smart-layouts.test.js.map +1 -0
- package/dist/window-manager/tile-state.d.ts +87 -0
- package/dist/window-manager/tile-state.d.ts.map +1 -0
- package/dist/window-manager/tile-state.js +136 -0
- package/dist/window-manager/tile-state.js.map +1 -0
- package/dist/window-manager/tile-state.test.d.ts +8 -0
- package/dist/window-manager/tile-state.test.d.ts.map +1 -0
- package/dist/window-manager/tile-state.test.js +179 -0
- package/dist/window-manager/tile-state.test.js.map +1 -0
- package/dist/window-manager/types.d.ts +104 -0
- package/dist/window-manager/types.d.ts.map +1 -0
- package/dist/window-manager/types.js +8 -0
- package/dist/window-manager/types.js.map +1 -0
- package/dist/window-manager/windows-manager.d.ts +44 -0
- package/dist/window-manager/windows-manager.d.ts.map +1 -0
- package/dist/window-manager/windows-manager.js +281 -0
- package/dist/window-manager/windows-manager.js.map +1 -0
- package/dist/window-manager/windows-manager.test.d.ts +8 -0
- package/dist/window-manager/windows-manager.test.d.ts.map +1 -0
- package/dist/window-manager/windows-manager.test.js +183 -0
- package/dist/window-manager/windows-manager.test.js.map +1 -0
- package/gui-dist/assets/index-BmYIHRYe.js +142 -0
- package/gui-dist/assets/index-D_N5RH8O.css +1 -0
- package/gui-dist/assets/vendor-icons-ByXNrcwf.js +336 -0
- package/gui-dist/assets/vendor-markdown-DWPYwU1x.js +22 -0
- package/gui-dist/assets/vendor-react-CpILBTDM.js +59 -0
- package/gui-dist/index.html +17 -0
- package/gui-dist/jacsub.png +0 -0
- package/package.json +67 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws-utils.d.ts","sourceRoot":"","sources":["../../src/handlers/ws-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAE/B;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,CAIlE"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WebSocket Utilities
|
|
3
|
+
*
|
|
4
|
+
* Shared response helpers to eliminate the repeated
|
|
5
|
+
* `if (ws.readyState === WebSocket.OPEN) { ws.send(...) }` pattern.
|
|
6
|
+
*/
|
|
7
|
+
import { WebSocket } from 'ws';
|
|
8
|
+
/**
|
|
9
|
+
* Send a JSON response to a WebSocket client if the connection is still open.
|
|
10
|
+
*/
|
|
11
|
+
export function sendWsResponse(ws, response) {
|
|
12
|
+
if (ws.readyState === WebSocket.OPEN) {
|
|
13
|
+
ws.send(JSON.stringify(response));
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=ws-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws-utils.js","sourceRoot":"","sources":["../../src/handlers/ws-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAE/B;;GAEG;AACH,MAAM,UAAU,cAAc,CAAI,EAAa,EAAE,QAAW;IAC1D,IAAI,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;QACrC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP API Server — Thin Orchestrator
|
|
3
|
+
*
|
|
4
|
+
* Creates an HTTP server and chains domain-specific route handlers.
|
|
5
|
+
* Each handler returns true if it handled the request, false to pass.
|
|
6
|
+
* Runs on port 4243 by default.
|
|
7
|
+
*/
|
|
8
|
+
import type { NotificationService } from './services/notification-service.js';
|
|
9
|
+
export interface ApiLog {
|
|
10
|
+
method: string;
|
|
11
|
+
path: string;
|
|
12
|
+
status: number;
|
|
13
|
+
durationMs: number;
|
|
14
|
+
timestamp: number;
|
|
15
|
+
}
|
|
16
|
+
export interface HttpApiOptions {
|
|
17
|
+
port?: number;
|
|
18
|
+
silent?: boolean;
|
|
19
|
+
onApiLog?: (log: ApiLog) => void;
|
|
20
|
+
notificationService?: NotificationService;
|
|
21
|
+
}
|
|
22
|
+
export interface HttpApiServer {
|
|
23
|
+
stop: () => Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
export declare function createHttpApi(options?: HttpApiOptions): Promise<HttpApiServer>;
|
|
26
|
+
//# sourceMappingURL=http-api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-api.d.ts","sourceRoot":"","sources":["../src/http-api.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAkB9E,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;CAC3C;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAgBD,wBAAsB,aAAa,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC,CA8HxF"}
|
package/dist/http-api.js
ADDED
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP API Server — Thin Orchestrator
|
|
3
|
+
*
|
|
4
|
+
* Creates an HTTP server and chains domain-specific route handlers.
|
|
5
|
+
* Each handler returns true if it handled the request, false to pass.
|
|
6
|
+
* Runs on port 4243 by default.
|
|
7
|
+
*/
|
|
8
|
+
import { createServer } from 'http';
|
|
9
|
+
import { statSync } from 'fs';
|
|
10
|
+
import { join } from 'path';
|
|
11
|
+
import { sendJson, handleCors } from './routes/http-utils.js';
|
|
12
|
+
import { isGuiAvailable, getGuiDistPath } from './routes/static-routes.js';
|
|
13
|
+
import { usageRoutes, configRoutes, notificationRoutes, claudeRoutes, sourceRoutes, archiveRoutes, tileRoutes, syncRoutes, sessionRoutes, projectRoutes, staticRoutes, } from './routes/index.js';
|
|
14
|
+
const handlers = [
|
|
15
|
+
usageRoutes,
|
|
16
|
+
sourceRoutes,
|
|
17
|
+
configRoutes,
|
|
18
|
+
sessionRoutes,
|
|
19
|
+
projectRoutes,
|
|
20
|
+
archiveRoutes,
|
|
21
|
+
notificationRoutes,
|
|
22
|
+
syncRoutes,
|
|
23
|
+
claudeRoutes,
|
|
24
|
+
tileRoutes,
|
|
25
|
+
staticRoutes,
|
|
26
|
+
];
|
|
27
|
+
export async function createHttpApi(options = {}) {
|
|
28
|
+
const { port = 4243, silent = false, onApiLog, notificationService } = options;
|
|
29
|
+
const log = silent ? (() => { }) : console.log.bind(console);
|
|
30
|
+
const guiAvailable = isGuiAvailable();
|
|
31
|
+
const guiDistPath = getGuiDistPath();
|
|
32
|
+
if (!guiAvailable && !silent) {
|
|
33
|
+
log('[HTTP API] GUI not built. Run: npm run build:gui');
|
|
34
|
+
}
|
|
35
|
+
else if (guiAvailable && !silent) {
|
|
36
|
+
const guiIndexPath = join(guiDistPath, 'index.html');
|
|
37
|
+
const guiSrcApp = join(guiDistPath, '..', 'src', 'App.tsx');
|
|
38
|
+
try {
|
|
39
|
+
const distMtime = statSync(guiIndexPath).mtimeMs;
|
|
40
|
+
const srcMtime = statSync(guiSrcApp).mtimeMs;
|
|
41
|
+
if (srcMtime > distMtime) {
|
|
42
|
+
log('[HTTP API] GUI build is stale. Run: npm run build:gui');
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch { /* ignore - source file may not exist in production */ }
|
|
46
|
+
}
|
|
47
|
+
const server = createServer(async (req, res) => {
|
|
48
|
+
const rawUrl = req.url || '/';
|
|
49
|
+
const method = req.method || 'GET';
|
|
50
|
+
const startTime = Date.now();
|
|
51
|
+
// API request logging
|
|
52
|
+
const logApiRequest = (status) => {
|
|
53
|
+
if (onApiLog && rawUrl.startsWith('/api/')) {
|
|
54
|
+
onApiLog({
|
|
55
|
+
method,
|
|
56
|
+
path: rawUrl.split('?')[0],
|
|
57
|
+
status,
|
|
58
|
+
durationMs: Date.now() - startTime,
|
|
59
|
+
timestamp: Date.now(),
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
const originalWriteHead = res.writeHead.bind(res);
|
|
64
|
+
let responseStatus = 200;
|
|
65
|
+
res.writeHead = (statusCode, ...args) => {
|
|
66
|
+
responseStatus = statusCode;
|
|
67
|
+
// @ts-expect-error - TypeScript doesn't handle rest args well here
|
|
68
|
+
return originalWriteHead(statusCode, ...args);
|
|
69
|
+
};
|
|
70
|
+
res.on('finish', () => logApiRequest(responseStatus));
|
|
71
|
+
// CORS preflight
|
|
72
|
+
if (method === 'OPTIONS') {
|
|
73
|
+
handleCors(res);
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
// Parse URL for route context
|
|
77
|
+
const parsedUrl = new URL(rawUrl, `http://${req.headers.host || 'localhost'}`);
|
|
78
|
+
const ctx = {
|
|
79
|
+
req,
|
|
80
|
+
res,
|
|
81
|
+
url: parsedUrl.pathname,
|
|
82
|
+
rawUrl,
|
|
83
|
+
method,
|
|
84
|
+
query: parsedUrl.searchParams,
|
|
85
|
+
notificationService,
|
|
86
|
+
log,
|
|
87
|
+
};
|
|
88
|
+
// Chain handlers — first match wins
|
|
89
|
+
for (const handler of handlers) {
|
|
90
|
+
if (await handler(ctx))
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
// 404 fallback
|
|
94
|
+
if (rawUrl.startsWith('/api/')) {
|
|
95
|
+
sendJson(res, 404, { error: 'Not found' });
|
|
96
|
+
}
|
|
97
|
+
else if (guiAvailable) {
|
|
98
|
+
// SPA fallback for unknown GUI routes
|
|
99
|
+
const { serveStaticFile } = await import('./routes/http-utils.js');
|
|
100
|
+
const indexPath = join(guiDistPath, 'index.html');
|
|
101
|
+
if (!serveStaticFile(res, indexPath)) {
|
|
102
|
+
res.writeHead(404, { 'Content-Type': 'text/plain' });
|
|
103
|
+
res.end('Not found');
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
res.writeHead(503, { 'Content-Type': 'text/html' });
|
|
108
|
+
res.end(`
|
|
109
|
+
<html>
|
|
110
|
+
<head><title>Jacques GUI</title></head>
|
|
111
|
+
<body style="font-family: sans-serif; padding: 40px; background: #1a1a1a; color: #fff;">
|
|
112
|
+
<h1>Jacques GUI Not Built</h1>
|
|
113
|
+
<p>Run <code style="background: #333; padding: 4px 8px; border-radius: 4px;">npm run build:gui</code> to build the GUI.</p>
|
|
114
|
+
<p>Then restart <code style="background: #333; padding: 4px 8px; border-radius: 4px;">jacques</code>.</p>
|
|
115
|
+
</body>
|
|
116
|
+
</html>
|
|
117
|
+
`);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
return new Promise((resolve, reject) => {
|
|
121
|
+
server.on('error', (err) => {
|
|
122
|
+
if (err.code === 'EADDRINUSE') {
|
|
123
|
+
log(`[HTTP API] Port ${port} is already in use`);
|
|
124
|
+
}
|
|
125
|
+
reject(err);
|
|
126
|
+
});
|
|
127
|
+
server.listen(port, () => {
|
|
128
|
+
log(`[HTTP API] Listening on http://localhost:${port}`);
|
|
129
|
+
if (guiAvailable) {
|
|
130
|
+
log(`[HTTP API] GUI available at http://localhost:${port}`);
|
|
131
|
+
}
|
|
132
|
+
resolve({
|
|
133
|
+
stop: () => new Promise((resolveStop, rejectStop) => {
|
|
134
|
+
server.close((err) => {
|
|
135
|
+
if (err) {
|
|
136
|
+
rejectStop(err);
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
log('[HTTP API] Stopped');
|
|
140
|
+
resolveStop();
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
}),
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=http-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-api.js","sourceRoot":"","sources":["../src/http-api.ts"],"names":[],"mappings":"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"}
|
package/dist/logger.d.ts
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logger Module
|
|
3
|
+
*
|
|
4
|
+
* Provides console interception and WebSocket broadcasting for server logs.
|
|
5
|
+
* Allows GUI to display real-time server logs.
|
|
6
|
+
*/
|
|
7
|
+
import type { ServerLogMessage } from './types.js';
|
|
8
|
+
type LogCallback = (message: ServerLogMessage) => void;
|
|
9
|
+
/**
|
|
10
|
+
* Log directly to the original console, bypassing interception.
|
|
11
|
+
* Use this for logging that should NOT be broadcast to WebSocket clients
|
|
12
|
+
* (e.g., broadcast confirmation messages, to prevent feedback loops).
|
|
13
|
+
*/
|
|
14
|
+
export declare function logDirect(...args: unknown[]): void;
|
|
15
|
+
/**
|
|
16
|
+
* Start intercepting console output.
|
|
17
|
+
* @param options.silent When true, suppress writing to stdout/stderr
|
|
18
|
+
* (still broadcasts to WebSocket listeners). Use in embedded/TUI mode
|
|
19
|
+
* to prevent core module console.error calls from leaking onto the
|
|
20
|
+
* alternate screen buffer and causing visual flickering.
|
|
21
|
+
*/
|
|
22
|
+
export declare function startLogInterception(options?: {
|
|
23
|
+
silent?: boolean;
|
|
24
|
+
}): void;
|
|
25
|
+
/**
|
|
26
|
+
* Stop intercepting console output
|
|
27
|
+
*/
|
|
28
|
+
export declare function stopLogInterception(): void;
|
|
29
|
+
/**
|
|
30
|
+
* Add a log listener
|
|
31
|
+
*/
|
|
32
|
+
export declare function addLogListener(callback: LogCallback): () => void;
|
|
33
|
+
/**
|
|
34
|
+
* Get log history
|
|
35
|
+
*/
|
|
36
|
+
export declare function getLogHistory(): ServerLogMessage[];
|
|
37
|
+
/**
|
|
38
|
+
* Clear log history
|
|
39
|
+
*/
|
|
40
|
+
export declare function clearLogHistory(): void;
|
|
41
|
+
export {};
|
|
42
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGnD,KAAK,WAAW,GAAG,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAevD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAElD;AAmED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAuBzE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAI1C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,WAAW,GAAG,MAAM,IAAI,CAGhE;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,gBAAgB,EAAE,CAElD;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAEtC"}
|
package/dist/logger.js
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logger Module
|
|
3
|
+
*
|
|
4
|
+
* Provides console interception and WebSocket broadcasting for server logs.
|
|
5
|
+
* Allows GUI to display real-time server logs.
|
|
6
|
+
*/
|
|
7
|
+
// Store original console methods
|
|
8
|
+
const originalConsole = {
|
|
9
|
+
log: console.log.bind(console),
|
|
10
|
+
warn: console.warn.bind(console),
|
|
11
|
+
error: console.error.bind(console),
|
|
12
|
+
};
|
|
13
|
+
// Log listeners
|
|
14
|
+
const listeners = new Set();
|
|
15
|
+
// Re-entrancy guard: prevents infinite loop when broadcast() logs via console.log
|
|
16
|
+
let isBroadcasting = false;
|
|
17
|
+
/**
|
|
18
|
+
* Log directly to the original console, bypassing interception.
|
|
19
|
+
* Use this for logging that should NOT be broadcast to WebSocket clients
|
|
20
|
+
* (e.g., broadcast confirmation messages, to prevent feedback loops).
|
|
21
|
+
*/
|
|
22
|
+
export function logDirect(...args) {
|
|
23
|
+
originalConsole.log(...args);
|
|
24
|
+
}
|
|
25
|
+
// Max log history for new clients
|
|
26
|
+
const LOG_HISTORY_SIZE = 100;
|
|
27
|
+
const logHistory = [];
|
|
28
|
+
/**
|
|
29
|
+
* Create a log message
|
|
30
|
+
*/
|
|
31
|
+
function createLogMessage(level, args, source) {
|
|
32
|
+
const message = args
|
|
33
|
+
.map(arg => {
|
|
34
|
+
if (typeof arg === 'string')
|
|
35
|
+
return arg;
|
|
36
|
+
if (arg instanceof Error)
|
|
37
|
+
return arg.message;
|
|
38
|
+
try {
|
|
39
|
+
return JSON.stringify(arg);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return String(arg);
|
|
43
|
+
}
|
|
44
|
+
})
|
|
45
|
+
.join(' ');
|
|
46
|
+
return {
|
|
47
|
+
type: 'server_log',
|
|
48
|
+
level,
|
|
49
|
+
message,
|
|
50
|
+
timestamp: Date.now(),
|
|
51
|
+
source,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Parse source from log message (e.g., "[Server]" or "[HTTP API]")
|
|
56
|
+
*/
|
|
57
|
+
function parseSource(message) {
|
|
58
|
+
const match = message.match(/^\[([^\]]+)\]/);
|
|
59
|
+
return match ? match[1] : 'Server';
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Broadcast log to all listeners
|
|
63
|
+
*/
|
|
64
|
+
function broadcastLog(logMessage) {
|
|
65
|
+
// Prevent infinite recursion: broadcast() → console.log → broadcastLog → broadcast()
|
|
66
|
+
if (isBroadcasting)
|
|
67
|
+
return;
|
|
68
|
+
// Add to history
|
|
69
|
+
logHistory.push(logMessage);
|
|
70
|
+
if (logHistory.length > LOG_HISTORY_SIZE) {
|
|
71
|
+
logHistory.shift();
|
|
72
|
+
}
|
|
73
|
+
// Notify listeners (with re-entrancy guard)
|
|
74
|
+
isBroadcasting = true;
|
|
75
|
+
try {
|
|
76
|
+
for (const listener of listeners) {
|
|
77
|
+
try {
|
|
78
|
+
listener(logMessage);
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
// Ignore listener errors
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
finally {
|
|
86
|
+
isBroadcasting = false;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Start intercepting console output.
|
|
91
|
+
* @param options.silent When true, suppress writing to stdout/stderr
|
|
92
|
+
* (still broadcasts to WebSocket listeners). Use in embedded/TUI mode
|
|
93
|
+
* to prevent core module console.error calls from leaking onto the
|
|
94
|
+
* alternate screen buffer and causing visual flickering.
|
|
95
|
+
*/
|
|
96
|
+
export function startLogInterception(options) {
|
|
97
|
+
const suppressConsole = options?.silent ?? false;
|
|
98
|
+
console.log = (...args) => {
|
|
99
|
+
if (!suppressConsole)
|
|
100
|
+
originalConsole.log(...args);
|
|
101
|
+
const firstArg = String(args[0] || '');
|
|
102
|
+
const source = parseSource(firstArg);
|
|
103
|
+
broadcastLog(createLogMessage('info', args, source));
|
|
104
|
+
};
|
|
105
|
+
console.warn = (...args) => {
|
|
106
|
+
if (!suppressConsole)
|
|
107
|
+
originalConsole.warn(...args);
|
|
108
|
+
const firstArg = String(args[0] || '');
|
|
109
|
+
const source = parseSource(firstArg);
|
|
110
|
+
broadcastLog(createLogMessage('warn', args, source));
|
|
111
|
+
};
|
|
112
|
+
console.error = (...args) => {
|
|
113
|
+
if (!suppressConsole)
|
|
114
|
+
originalConsole.error(...args);
|
|
115
|
+
const firstArg = String(args[0] || '');
|
|
116
|
+
const source = parseSource(firstArg);
|
|
117
|
+
broadcastLog(createLogMessage('error', args, source));
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Stop intercepting console output
|
|
122
|
+
*/
|
|
123
|
+
export function stopLogInterception() {
|
|
124
|
+
console.log = originalConsole.log;
|
|
125
|
+
console.warn = originalConsole.warn;
|
|
126
|
+
console.error = originalConsole.error;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Add a log listener
|
|
130
|
+
*/
|
|
131
|
+
export function addLogListener(callback) {
|
|
132
|
+
listeners.add(callback);
|
|
133
|
+
return () => listeners.delete(callback);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Get log history
|
|
137
|
+
*/
|
|
138
|
+
export function getLogHistory() {
|
|
139
|
+
return [...logHistory];
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Clear log history
|
|
143
|
+
*/
|
|
144
|
+
export function clearLogHistory() {
|
|
145
|
+
logHistory.length = 0;
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logger Factory
|
|
3
|
+
*
|
|
4
|
+
* Provides injectable logging for server components.
|
|
5
|
+
* Replaces duplicated logging boilerplate across modules.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Logger interface for dependency injection
|
|
9
|
+
*/
|
|
10
|
+
export interface Logger {
|
|
11
|
+
log: (...args: unknown[]) => void;
|
|
12
|
+
warn: (...args: unknown[]) => void;
|
|
13
|
+
error: (...args: unknown[]) => void;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Options for creating a logger
|
|
17
|
+
*/
|
|
18
|
+
export interface LoggerOptions {
|
|
19
|
+
/** Suppress all output */
|
|
20
|
+
silent?: boolean;
|
|
21
|
+
/** Optional prefix prepended to all log messages */
|
|
22
|
+
prefix?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Create a logger instance
|
|
26
|
+
*
|
|
27
|
+
* @param options Logger configuration options
|
|
28
|
+
* @returns Logger instance
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* // Silent logger (no output)
|
|
32
|
+
* const logger = createLogger({ silent: true });
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* // Logger with prefix
|
|
36
|
+
* const logger = createLogger({ prefix: 'MyComponent' });
|
|
37
|
+
* logger.log('Hello'); // Output: [MyComponent] Hello
|
|
38
|
+
*/
|
|
39
|
+
export declare function createLogger(options?: LoggerOptions): Logger;
|
|
40
|
+
/**
|
|
41
|
+
* Create a logger from a silent flag (backward compatibility helper)
|
|
42
|
+
*
|
|
43
|
+
* This allows components to accept either a Logger or a silent boolean
|
|
44
|
+
* for backward compatibility during the migration.
|
|
45
|
+
*
|
|
46
|
+
* @param silentOrLogger Either a boolean (silent flag) or a Logger instance
|
|
47
|
+
* @param prefix Optional prefix if creating from boolean
|
|
48
|
+
* @returns Logger instance
|
|
49
|
+
*/
|
|
50
|
+
export declare function resolveLogger(silentOrLogger: boolean | Logger | undefined, prefix?: string): Logger;
|
|
51
|
+
//# sourceMappingURL=logger-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger-factory.d.ts","sourceRoot":"","sources":["../../src/logging/logger-factory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IAClC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACnC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,0BAA0B;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CAAC,OAAO,GAAE,aAAkB,GAAG,MAAM,CAuBhE;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,cAAc,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,EAC5C,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAKR"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logger Factory
|
|
3
|
+
*
|
|
4
|
+
* Provides injectable logging for server components.
|
|
5
|
+
* Replaces duplicated logging boilerplate across modules.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Create a logger instance
|
|
9
|
+
*
|
|
10
|
+
* @param options Logger configuration options
|
|
11
|
+
* @returns Logger instance
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* // Silent logger (no output)
|
|
15
|
+
* const logger = createLogger({ silent: true });
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* // Logger with prefix
|
|
19
|
+
* const logger = createLogger({ prefix: 'MyComponent' });
|
|
20
|
+
* logger.log('Hello'); // Output: [MyComponent] Hello
|
|
21
|
+
*/
|
|
22
|
+
export function createLogger(options = {}) {
|
|
23
|
+
const { silent = false, prefix } = options;
|
|
24
|
+
if (silent) {
|
|
25
|
+
return {
|
|
26
|
+
log: () => { },
|
|
27
|
+
warn: () => { },
|
|
28
|
+
error: () => { },
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
const formatArgs = (args) => {
|
|
32
|
+
if (prefix) {
|
|
33
|
+
return [`[${prefix}]`, ...args];
|
|
34
|
+
}
|
|
35
|
+
return args;
|
|
36
|
+
};
|
|
37
|
+
return {
|
|
38
|
+
log: (...args) => console.log(...formatArgs(args)),
|
|
39
|
+
warn: (...args) => console.warn(...formatArgs(args)),
|
|
40
|
+
error: (...args) => console.error(...formatArgs(args)),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Create a logger from a silent flag (backward compatibility helper)
|
|
45
|
+
*
|
|
46
|
+
* This allows components to accept either a Logger or a silent boolean
|
|
47
|
+
* for backward compatibility during the migration.
|
|
48
|
+
*
|
|
49
|
+
* @param silentOrLogger Either a boolean (silent flag) or a Logger instance
|
|
50
|
+
* @param prefix Optional prefix if creating from boolean
|
|
51
|
+
* @returns Logger instance
|
|
52
|
+
*/
|
|
53
|
+
export function resolveLogger(silentOrLogger, prefix) {
|
|
54
|
+
if (typeof silentOrLogger === 'object' && silentOrLogger !== null) {
|
|
55
|
+
return silentOrLogger;
|
|
56
|
+
}
|
|
57
|
+
return createLogger({ silent: silentOrLogger, prefix });
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=logger-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger-factory.js","sourceRoot":"","sources":["../../src/logging/logger-factory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAqBH;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,YAAY,CAAC,UAAyB,EAAE;IACtD,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAE3C,IAAI,MAAM,EAAE,CAAC;QACX,OAAO;YACL,GAAG,EAAE,GAAG,EAAE,GAAE,CAAC;YACb,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;YACd,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;SAChB,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,CAAC,IAAe,EAAa,EAAE;QAChD,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,OAAO;QACL,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QACpD,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;KACvD,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAC3B,cAA4C,EAC5C,MAAe;IAEf,IAAI,OAAO,cAAc,KAAK,QAAQ,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;QAClE,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,OAAO,YAAY,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Search Tool
|
|
3
|
+
*
|
|
4
|
+
* Implements the search_conversations tool for the MCP server.
|
|
5
|
+
*/
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
interface SearchResult {
|
|
8
|
+
rank: number;
|
|
9
|
+
id: string;
|
|
10
|
+
score: number;
|
|
11
|
+
title: string;
|
|
12
|
+
project: string;
|
|
13
|
+
date: string;
|
|
14
|
+
preview: string;
|
|
15
|
+
filesModified: string[];
|
|
16
|
+
technologies: string[];
|
|
17
|
+
messageCount: number;
|
|
18
|
+
durationMinutes: number;
|
|
19
|
+
}
|
|
20
|
+
interface SearchOutput {
|
|
21
|
+
query: string;
|
|
22
|
+
filters: {
|
|
23
|
+
project?: string;
|
|
24
|
+
dateFrom?: string;
|
|
25
|
+
dateTo?: string;
|
|
26
|
+
technologies?: string[];
|
|
27
|
+
};
|
|
28
|
+
totalMatches: number;
|
|
29
|
+
showing: {
|
|
30
|
+
from: number;
|
|
31
|
+
to: number;
|
|
32
|
+
};
|
|
33
|
+
hasMore: boolean;
|
|
34
|
+
results: SearchResult[];
|
|
35
|
+
}
|
|
36
|
+
export declare const searchConversationsSchema: z.ZodObject<{
|
|
37
|
+
query: z.ZodString;
|
|
38
|
+
project: z.ZodOptional<z.ZodString>;
|
|
39
|
+
dateFrom: z.ZodOptional<z.ZodString>;
|
|
40
|
+
dateTo: z.ZodOptional<z.ZodString>;
|
|
41
|
+
technologies: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
42
|
+
limit: z.ZodDefault<z.ZodNumber>;
|
|
43
|
+
offset: z.ZodDefault<z.ZodNumber>;
|
|
44
|
+
}, "strip", z.ZodTypeAny, {
|
|
45
|
+
query: string;
|
|
46
|
+
limit: number;
|
|
47
|
+
offset: number;
|
|
48
|
+
project?: string | undefined;
|
|
49
|
+
dateFrom?: string | undefined;
|
|
50
|
+
dateTo?: string | undefined;
|
|
51
|
+
technologies?: string[] | undefined;
|
|
52
|
+
}, {
|
|
53
|
+
query: string;
|
|
54
|
+
project?: string | undefined;
|
|
55
|
+
dateFrom?: string | undefined;
|
|
56
|
+
dateTo?: string | undefined;
|
|
57
|
+
technologies?: string[] | undefined;
|
|
58
|
+
limit?: number | undefined;
|
|
59
|
+
offset?: number | undefined;
|
|
60
|
+
}>;
|
|
61
|
+
export type SearchConversationsInput = z.infer<typeof searchConversationsSchema>;
|
|
62
|
+
export declare function searchConversations(input: SearchConversationsInput): Promise<SearchOutput>;
|
|
63
|
+
export declare function handleSearchConversations(args: unknown): Promise<string>;
|
|
64
|
+
export {};
|
|
65
|
+
//# sourceMappingURL=search-tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-tool.d.ts","sourceRoot":"","sources":["../../src/mcp/search-tool.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAsDxB,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE;QACP,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC;IACF,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AAMD,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;EAQpC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AA4FjF,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,wBAAwB,GAC9B,OAAO,CAAC,YAAY,CAAC,CA8EvB;AAMD,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,MAAM,CAAC,CAYjB"}
|