lattice-orchestrator 0.7.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.
- package/LICENSE +201 -0
- package/README.md +58 -0
- package/config/logrotate.conf +15 -0
- package/dist/cli-parser.d.ts +11 -0
- package/dist/cli-parser.d.ts.map +1 -0
- package/dist/cli-parser.js +48 -0
- package/dist/cli-parser.js.map +1 -0
- package/dist/lattice-server.d.ts +70 -0
- package/dist/lattice-server.d.ts.map +1 -0
- package/dist/lattice-server.js +969 -0
- package/dist/lattice-server.js.map +1 -0
- package/dist/mcp-server/index.d.ts +3 -0
- package/dist/mcp-server/index.d.ts.map +1 -0
- package/dist/mcp-server/index.js +190 -0
- package/dist/mcp-server/index.js.map +1 -0
- package/dist/mcp-server/lattice-tools.d.ts +15 -0
- package/dist/mcp-server/lattice-tools.d.ts.map +1 -0
- package/dist/mcp-server/lattice-tools.js +366 -0
- package/dist/mcp-server/lattice-tools.js.map +1 -0
- package/dist/middleware/cors-setup.d.ts +7 -0
- package/dist/middleware/cors-setup.d.ts.map +1 -0
- package/dist/middleware/cors-setup.js +8 -0
- package/dist/middleware/cors-setup.js.map +1 -0
- package/dist/middleware/error-handler.d.ts +4 -0
- package/dist/middleware/error-handler.d.ts.map +1 -0
- package/dist/middleware/error-handler.js +27 -0
- package/dist/middleware/error-handler.js.map +1 -0
- package/dist/middleware/query-parser.d.ts +11 -0
- package/dist/middleware/query-parser.d.ts.map +1 -0
- package/dist/middleware/query-parser.js +68 -0
- package/dist/middleware/query-parser.js.map +1 -0
- package/dist/middleware/request-logger.d.ts +4 -0
- package/dist/middleware/request-logger.d.ts.map +1 -0
- package/dist/middleware/request-logger.js +6 -0
- package/dist/middleware/request-logger.js.map +1 -0
- package/dist/process-daemon/index.d.ts +14 -0
- package/dist/process-daemon/index.d.ts.map +1 -0
- package/dist/process-daemon/index.js +51 -0
- package/dist/process-daemon/index.js.map +1 -0
- package/dist/process-daemon/process-daemon.d.ts +101 -0
- package/dist/process-daemon/process-daemon.d.ts.map +1 -0
- package/dist/process-daemon/process-daemon.js +846 -0
- package/dist/process-daemon/process-daemon.js.map +1 -0
- package/dist/process-daemon/process-manager-client.d.ts +123 -0
- package/dist/process-daemon/process-manager-client.d.ts.map +1 -0
- package/dist/process-daemon/process-manager-client.js +329 -0
- package/dist/process-daemon/process-manager-client.js.map +1 -0
- package/dist/process-daemon/process-manager-interface.d.ts +61 -0
- package/dist/process-daemon/process-manager-interface.d.ts.map +1 -0
- package/dist/process-daemon/process-manager-interface.js +8 -0
- package/dist/process-daemon/process-manager-interface.js.map +1 -0
- package/dist/process-daemon/test-daemon.d.ts +12 -0
- package/dist/process-daemon/test-daemon.d.ts.map +1 -0
- package/dist/process-daemon/test-daemon.js +81 -0
- package/dist/process-daemon/test-daemon.js.map +1 -0
- package/dist/process-daemon/types.d.ts +97 -0
- package/dist/process-daemon/types.d.ts.map +1 -0
- package/dist/process-daemon/types.js +8 -0
- package/dist/process-daemon/types.js.map +1 -0
- package/dist/routes/analysis.routes.d.ts +13 -0
- package/dist/routes/analysis.routes.d.ts.map +1 -0
- package/dist/routes/analysis.routes.js +520 -0
- package/dist/routes/analysis.routes.js.map +1 -0
- package/dist/routes/config.routes.d.ts +4 -0
- package/dist/routes/config.routes.d.ts.map +1 -0
- package/dist/routes/config.routes.js +27 -0
- package/dist/routes/config.routes.js.map +1 -0
- package/dist/routes/conversation.routes.d.ts +43 -0
- package/dist/routes/conversation.routes.d.ts.map +1 -0
- package/dist/routes/conversation.routes.js +79 -0
- package/dist/routes/conversation.routes.js.map +1 -0
- package/dist/routes/filesystem.routes.d.ts +4 -0
- package/dist/routes/filesystem.routes.d.ts.map +1 -0
- package/dist/routes/filesystem.routes.js +86 -0
- package/dist/routes/filesystem.routes.js.map +1 -0
- package/dist/routes/insights.routes.d.ts +17 -0
- package/dist/routes/insights.routes.d.ts.map +1 -0
- package/dist/routes/insights.routes.js +633 -0
- package/dist/routes/insights.routes.js.map +1 -0
- package/dist/routes/lattice.routes.d.ts +10 -0
- package/dist/routes/lattice.routes.d.ts.map +1 -0
- package/dist/routes/lattice.routes.js +123 -0
- package/dist/routes/lattice.routes.js.map +1 -0
- package/dist/routes/license.routes.d.ts +3 -0
- package/dist/routes/license.routes.d.ts.map +1 -0
- package/dist/routes/license.routes.js +95 -0
- package/dist/routes/license.routes.js.map +1 -0
- package/dist/routes/log.routes.d.ts +3 -0
- package/dist/routes/log.routes.d.ts.map +1 -0
- package/dist/routes/log.routes.js +184 -0
- package/dist/routes/log.routes.js.map +1 -0
- package/dist/routes/pending-question.routes.d.ts +9 -0
- package/dist/routes/pending-question.routes.d.ts.map +1 -0
- package/dist/routes/pending-question.routes.js +162 -0
- package/dist/routes/pending-question.routes.js.map +1 -0
- package/dist/routes/permission.routes.d.ts +18 -0
- package/dist/routes/permission.routes.d.ts.map +1 -0
- package/dist/routes/permission.routes.js +370 -0
- package/dist/routes/permission.routes.js.map +1 -0
- package/dist/routes/process-events.routes.d.ts +9 -0
- package/dist/routes/process-events.routes.d.ts.map +1 -0
- package/dist/routes/process-events.routes.js +141 -0
- package/dist/routes/process-events.routes.js.map +1 -0
- package/dist/routes/prototype.routes.d.ts +9 -0
- package/dist/routes/prototype.routes.d.ts.map +1 -0
- package/dist/routes/prototype.routes.js +757 -0
- package/dist/routes/prototype.routes.js.map +1 -0
- package/dist/routes/question.routes.d.ts +8 -0
- package/dist/routes/question.routes.d.ts.map +1 -0
- package/dist/routes/question.routes.js +83 -0
- package/dist/routes/question.routes.js.map +1 -0
- package/dist/routes/session-control.routes.d.ts +29 -0
- package/dist/routes/session-control.routes.d.ts.map +1 -0
- package/dist/routes/session-control.routes.js +455 -0
- package/dist/routes/session-control.routes.js.map +1 -0
- package/dist/routes/session-lifecycle.routes.d.ts +21 -0
- package/dist/routes/session-lifecycle.routes.d.ts.map +1 -0
- package/dist/routes/session-lifecycle.routes.js +256 -0
- package/dist/routes/session-lifecycle.routes.js.map +1 -0
- package/dist/routes/session-query.routes.d.ts +25 -0
- package/dist/routes/session-query.routes.d.ts.map +1 -0
- package/dist/routes/session-query.routes.js +363 -0
- package/dist/routes/session-query.routes.js.map +1 -0
- package/dist/routes/session-stream.routes.d.ts +21 -0
- package/dist/routes/session-stream.routes.d.ts.map +1 -0
- package/dist/routes/session-stream.routes.js +235 -0
- package/dist/routes/session-stream.routes.js.map +1 -0
- package/dist/routes/streaming.routes.d.ts +4 -0
- package/dist/routes/streaming.routes.d.ts.map +1 -0
- package/dist/routes/streaming.routes.js +33 -0
- package/dist/routes/streaming.routes.js.map +1 -0
- package/dist/routes/system.routes.d.ts +7 -0
- package/dist/routes/system.routes.d.ts.map +1 -0
- package/dist/routes/system.routes.js +214 -0
- package/dist/routes/system.routes.js.map +1 -0
- package/dist/routes/walkthrough.routes.d.ts +19 -0
- package/dist/routes/walkthrough.routes.d.ts.map +1 -0
- package/dist/routes/walkthrough.routes.js +688 -0
- package/dist/routes/walkthrough.routes.js.map +1 -0
- package/dist/routes/working-directories.routes.d.ts +4 -0
- package/dist/routes/working-directories.routes.d.ts.map +1 -0
- package/dist/routes/working-directories.routes.js +25 -0
- package/dist/routes/working-directories.routes.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +34 -0
- package/dist/server.js.map +1 -0
- package/dist/services/ToolMetricsService.d.ts +53 -0
- package/dist/services/ToolMetricsService.d.ts.map +1 -0
- package/dist/services/ToolMetricsService.js +230 -0
- package/dist/services/ToolMetricsService.js.map +1 -0
- package/dist/services/claude-router-service.d.ts +19 -0
- package/dist/services/claude-router-service.d.ts.map +1 -0
- package/dist/services/claude-router-service.js +160 -0
- package/dist/services/claude-router-service.js.map +1 -0
- package/dist/services/commands-service.d.ts +20 -0
- package/dist/services/commands-service.d.ts.map +1 -0
- package/dist/services/commands-service.js +115 -0
- package/dist/services/commands-service.js.map +1 -0
- package/dist/services/connection-debug-logger.d.ts +85 -0
- package/dist/services/connection-debug-logger.d.ts.map +1 -0
- package/dist/services/connection-debug-logger.js +221 -0
- package/dist/services/connection-debug-logger.js.map +1 -0
- package/dist/services/debug-log.d.ts +6 -0
- package/dist/services/debug-log.d.ts.map +1 -0
- package/dist/services/debug-log.js +27 -0
- package/dist/services/debug-log.js.map +1 -0
- package/dist/services/gemini-service.d.ts +35 -0
- package/dist/services/gemini-service.d.ts.map +1 -0
- package/dist/services/gemini-service.js +256 -0
- package/dist/services/gemini-service.js.map +1 -0
- package/dist/services/infrastructure/config-service.d.ts +79 -0
- package/dist/services/infrastructure/config-service.d.ts.map +1 -0
- package/dist/services/infrastructure/config-service.js +431 -0
- package/dist/services/infrastructure/config-service.js.map +1 -0
- package/dist/services/infrastructure/cost-tracker.d.ts +112 -0
- package/dist/services/infrastructure/cost-tracker.d.ts.map +1 -0
- package/dist/services/infrastructure/cost-tracker.js +423 -0
- package/dist/services/infrastructure/cost-tracker.js.map +1 -0
- package/dist/services/infrastructure/file-system-service.d.ts +61 -0
- package/dist/services/infrastructure/file-system-service.d.ts.map +1 -0
- package/dist/services/infrastructure/file-system-service.js +348 -0
- package/dist/services/infrastructure/file-system-service.js.map +1 -0
- package/dist/services/infrastructure/log-formatter.d.ts +5 -0
- package/dist/services/infrastructure/log-formatter.d.ts.map +1 -0
- package/dist/services/infrastructure/log-formatter.js +77 -0
- package/dist/services/infrastructure/log-formatter.js.map +1 -0
- package/dist/services/infrastructure/log-stream-buffer.d.ts +11 -0
- package/dist/services/infrastructure/log-stream-buffer.d.ts.map +1 -0
- package/dist/services/infrastructure/log-stream-buffer.js +36 -0
- package/dist/services/infrastructure/log-stream-buffer.js.map +1 -0
- package/dist/services/infrastructure/logger.d.ts +71 -0
- package/dist/services/infrastructure/logger.d.ts.map +1 -0
- package/dist/services/infrastructure/logger.js +215 -0
- package/dist/services/infrastructure/logger.js.map +1 -0
- package/dist/services/infrastructure/service-registry.d.ts +86 -0
- package/dist/services/infrastructure/service-registry.d.ts.map +1 -0
- package/dist/services/infrastructure/service-registry.js +162 -0
- package/dist/services/infrastructure/service-registry.js.map +1 -0
- package/dist/services/infrastructure/stream-manager.d.ts +87 -0
- package/dist/services/infrastructure/stream-manager.d.ts.map +1 -0
- package/dist/services/infrastructure/stream-manager.js +436 -0
- package/dist/services/infrastructure/stream-manager.js.map +1 -0
- package/dist/services/infrastructure/timing.d.ts +72 -0
- package/dist/services/infrastructure/timing.d.ts.map +1 -0
- package/dist/services/infrastructure/timing.js +115 -0
- package/dist/services/infrastructure/timing.js.map +1 -0
- package/dist/services/insights/anthropic-service.d.ts +224 -0
- package/dist/services/insights/anthropic-service.d.ts.map +1 -0
- package/dist/services/insights/anthropic-service.js +1062 -0
- package/dist/services/insights/anthropic-service.js.map +1 -0
- package/dist/services/insights/insight-audit-repository.d.ts +119 -0
- package/dist/services/insights/insight-audit-repository.d.ts.map +1 -0
- package/dist/services/insights/insight-audit-repository.js +242 -0
- package/dist/services/insights/insight-audit-repository.js.map +1 -0
- package/dist/services/insights/insight-queue.d.ts +99 -0
- package/dist/services/insights/insight-queue.d.ts.map +1 -0
- package/dist/services/insights/insight-queue.js +277 -0
- package/dist/services/insights/insight-queue.js.map +1 -0
- package/dist/services/insights/insights-computer.d.ts +132 -0
- package/dist/services/insights/insights-computer.d.ts.map +1 -0
- package/dist/services/insights/insights-computer.js +936 -0
- package/dist/services/insights/insights-computer.js.map +1 -0
- package/dist/services/insights/insights-coordinator.d.ts +165 -0
- package/dist/services/insights/insights-coordinator.d.ts.map +1 -0
- package/dist/services/insights/insights-coordinator.js +1678 -0
- package/dist/services/insights/insights-coordinator.js.map +1 -0
- package/dist/services/insights/insights-event-log.d.ts +196 -0
- package/dist/services/insights/insights-event-log.d.ts.map +1 -0
- package/dist/services/insights/insights-event-log.js +319 -0
- package/dist/services/insights/insights-event-log.js.map +1 -0
- package/dist/services/lattice-service.d.ts +77 -0
- package/dist/services/lattice-service.d.ts.map +1 -0
- package/dist/services/lattice-service.js +195 -0
- package/dist/services/lattice-service.js.map +1 -0
- package/dist/services/license-service.d.ts +69 -0
- package/dist/services/license-service.d.ts.map +1 -0
- package/dist/services/license-service.js +330 -0
- package/dist/services/license-service.js.map +1 -0
- package/dist/services/mcp-config-generator.d.ts +32 -0
- package/dist/services/mcp-config-generator.d.ts.map +1 -0
- package/dist/services/mcp-config-generator.js +126 -0
- package/dist/services/mcp-config-generator.js.map +1 -0
- package/dist/services/message-filter.d.ts +22 -0
- package/dist/services/message-filter.d.ts.map +1 -0
- package/dist/services/message-filter.js +57 -0
- package/dist/services/message-filter.js.map +1 -0
- package/dist/services/notification-service.d.ts +45 -0
- package/dist/services/notification-service.d.ts.map +1 -0
- package/dist/services/notification-service.js +184 -0
- package/dist/services/notification-service.js.map +1 -0
- package/dist/services/pending-question-service.d.ts +97 -0
- package/dist/services/pending-question-service.d.ts.map +1 -0
- package/dist/services/pending-question-service.js +223 -0
- package/dist/services/pending-question-service.js.map +1 -0
- package/dist/services/permission-event-log.d.ts +136 -0
- package/dist/services/permission-event-log.d.ts.map +1 -0
- package/dist/services/permission-event-log.js +252 -0
- package/dist/services/permission-event-log.js.map +1 -0
- package/dist/services/permission-pattern-matcher.d.ts +82 -0
- package/dist/services/permission-pattern-matcher.d.ts.map +1 -0
- package/dist/services/permission-pattern-matcher.js +294 -0
- package/dist/services/permission-pattern-matcher.js.map +1 -0
- package/dist/services/permission-tracker.d.ts +67 -0
- package/dist/services/permission-tracker.d.ts.map +1 -0
- package/dist/services/permission-tracker.js +162 -0
- package/dist/services/permission-tracker.js.map +1 -0
- package/dist/services/process/claude-process-manager.d.ts +142 -0
- package/dist/services/process/claude-process-manager.d.ts.map +1 -0
- package/dist/services/process/claude-process-manager.js +1218 -0
- package/dist/services/process/claude-process-manager.js.map +1 -0
- package/dist/services/process/conversation-status-manager.d.ts +110 -0
- package/dist/services/process/conversation-status-manager.d.ts.map +1 -0
- package/dist/services/process/conversation-status-manager.js +349 -0
- package/dist/services/process/conversation-status-manager.js.map +1 -0
- package/dist/services/process/json-lines-parser.d.ts +19 -0
- package/dist/services/process/json-lines-parser.d.ts.map +1 -0
- package/dist/services/process/json-lines-parser.js +59 -0
- package/dist/services/process/json-lines-parser.js.map +1 -0
- package/dist/services/process/process-event-log.d.ts +263 -0
- package/dist/services/process/process-event-log.d.ts.map +1 -0
- package/dist/services/process/process-event-log.js +509 -0
- package/dist/services/process/process-event-log.js.map +1 -0
- package/dist/services/process/process-manager-factory.d.ts +109 -0
- package/dist/services/process/process-manager-factory.d.ts.map +1 -0
- package/dist/services/process/process-manager-factory.js +338 -0
- package/dist/services/process/process-manager-factory.js.map +1 -0
- package/dist/services/question-tracker.d.ts +51 -0
- package/dist/services/question-tracker.d.ts.map +1 -0
- package/dist/services/question-tracker.js +111 -0
- package/dist/services/question-tracker.js.map +1 -0
- package/dist/services/sessions/claude-history-reader.d.ts +139 -0
- package/dist/services/sessions/claude-history-reader.d.ts.map +1 -0
- package/dist/services/sessions/claude-history-reader.js +864 -0
- package/dist/services/sessions/claude-history-reader.js.map +1 -0
- package/dist/services/sessions/conversation-cache.d.ts +98 -0
- package/dist/services/sessions/conversation-cache.d.ts.map +1 -0
- package/dist/services/sessions/conversation-cache.js +329 -0
- package/dist/services/sessions/conversation-cache.js.map +1 -0
- package/dist/services/sessions/session-activity-watcher.d.ts +67 -0
- package/dist/services/sessions/session-activity-watcher.d.ts.map +1 -0
- package/dist/services/sessions/session-activity-watcher.js +236 -0
- package/dist/services/sessions/session-activity-watcher.js.map +1 -0
- package/dist/services/sessions/session-analysis-service.d.ts +72 -0
- package/dist/services/sessions/session-analysis-service.d.ts.map +1 -0
- package/dist/services/sessions/session-analysis-service.js +373 -0
- package/dist/services/sessions/session-analysis-service.js.map +1 -0
- package/dist/services/sessions/session-branch-service.d.ts +76 -0
- package/dist/services/sessions/session-branch-service.d.ts.map +1 -0
- package/dist/services/sessions/session-branch-service.js +355 -0
- package/dist/services/sessions/session-branch-service.js.map +1 -0
- package/dist/services/sessions/session-info-service.d.ts +455 -0
- package/dist/services/sessions/session-info-service.d.ts.map +1 -0
- package/dist/services/sessions/session-info-service.js +1640 -0
- package/dist/services/sessions/session-info-service.js.map +1 -0
- package/dist/services/sessions/session-marks-repository.d.ts +78 -0
- package/dist/services/sessions/session-marks-repository.d.ts.map +1 -0
- package/dist/services/sessions/session-marks-repository.js +263 -0
- package/dist/services/sessions/session-marks-repository.js.map +1 -0
- package/dist/services/sessions/session-marks-service.d.ts +137 -0
- package/dist/services/sessions/session-marks-service.d.ts.map +1 -0
- package/dist/services/sessions/session-marks-service.js +562 -0
- package/dist/services/sessions/session-marks-service.js.map +1 -0
- package/dist/services/sessions/session-review-service.d.ts +98 -0
- package/dist/services/sessions/session-review-service.d.ts.map +1 -0
- package/dist/services/sessions/session-review-service.js +629 -0
- package/dist/services/sessions/session-review-service.js.map +1 -0
- package/dist/services/sessions/turn-capture-service.d.ts +83 -0
- package/dist/services/sessions/turn-capture-service.d.ts.map +1 -0
- package/dist/services/sessions/turn-capture-service.js +477 -0
- package/dist/services/sessions/turn-capture-service.js.map +1 -0
- package/dist/services/sessions/turn-repository.d.ts +48 -0
- package/dist/services/sessions/turn-repository.d.ts.map +1 -0
- package/dist/services/sessions/turn-repository.js +103 -0
- package/dist/services/sessions/turn-repository.js.map +1 -0
- package/dist/services/walkthrough-service.d.ts +226 -0
- package/dist/services/walkthrough-service.d.ts.map +1 -0
- package/dist/services/walkthrough-service.js +1112 -0
- package/dist/services/walkthrough-service.js.map +1 -0
- package/dist/services/walkthrough-skill-prompt.d.ts +34 -0
- package/dist/services/walkthrough-skill-prompt.d.ts.map +1 -0
- package/dist/services/walkthrough-skill-prompt.js +313 -0
- package/dist/services/walkthrough-skill-prompt.js.map +1 -0
- package/dist/services/web-push-service.d.ts +48 -0
- package/dist/services/web-push-service.d.ts.map +1 -0
- package/dist/services/web-push-service.js +186 -0
- package/dist/services/web-push-service.js.map +1 -0
- package/dist/services/working-directories-service.d.ts +19 -0
- package/dist/services/working-directories-service.d.ts.map +1 -0
- package/dist/services/working-directories-service.js +103 -0
- package/dist/services/working-directories-service.js.map +1 -0
- package/dist/types/config.d.ts +122 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +21 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/express.d.ts +5 -0
- package/dist/types/express.d.ts.map +1 -0
- package/dist/types/express.js +2 -0
- package/dist/types/express.js.map +1 -0
- package/dist/types/index.d.ts +400 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +41 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/insights.d.ts +176 -0
- package/dist/types/insights.d.ts.map +1 -0
- package/dist/types/insights.js +23 -0
- package/dist/types/insights.js.map +1 -0
- package/dist/types/license.d.ts +70 -0
- package/dist/types/license.d.ts.map +1 -0
- package/dist/types/license.js +5 -0
- package/dist/types/license.js.map +1 -0
- package/dist/types/router-config.d.ts +13 -0
- package/dist/types/router-config.d.ts.map +1 -0
- package/dist/types/router-config.js +2 -0
- package/dist/types/router-config.js.map +1 -0
- package/dist/utils/constants.d.ts +26 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/constants.js +28 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/machine-id.d.ts +7 -0
- package/dist/utils/machine-id.d.ts.map +1 -0
- package/dist/utils/machine-id.js +76 -0
- package/dist/utils/machine-id.js.map +1 -0
- package/dist/utils/server-startup.d.ts +11 -0
- package/dist/utils/server-startup.d.ts.map +1 -0
- package/dist/utils/server-startup.js +9 -0
- package/dist/utils/server-startup.js.map +1 -0
- package/dist/utils/update-check.d.ts +13 -0
- package/dist/utils/update-check.d.ts.map +1 -0
- package/dist/utils/update-check.js +90 -0
- package/dist/utils/update-check.js.map +1 -0
- package/dist/web/assets/ArchivedCardPrototype-S9ifiasa.js +5 -0
- package/dist/web/assets/BannerGallery-B__rJV6F.js +1 -0
- package/dist/web/assets/BannerPrototype-DBKP9Uiu.js +52 -0
- package/dist/web/assets/CodeHikeExperiment-B8jjWAFy.js +15 -0
- package/dist/web/assets/ContextTooltipVariations-DzklAFam.js +1 -0
- package/dist/web/assets/FontShowcasePrototype-KIMEWeP2.js +13 -0
- package/dist/web/assets/GeometricGallery-DddlWhHK.js +1 -0
- package/dist/web/assets/HistoryWalkthroughPrototype-DeniRRdw.js +18 -0
- package/dist/web/assets/InlineWalkthroughPrototype-Csd5r_Hk.js +1 -0
- package/dist/web/assets/MarkButtonPrototype-CxhxE0RP.js +1 -0
- package/dist/web/assets/MenuStylesPrototype-D7neA6YM.js +1 -0
- package/dist/web/assets/MomentCardVariations-2GT7GyFn.js +1 -0
- package/dist/web/assets/MomentHeaderVariations-DhGEw4XC.js +1 -0
- package/dist/web/assets/NarrativeWalkthroughDemo-B5C566fu.js +389 -0
- package/dist/web/assets/OutcomeVariations-BrZfsVcs.js +1 -0
- package/dist/web/assets/PermissionPatternPickerPrototype-CBOhe2Me.js +1 -0
- package/dist/web/assets/PermissionPrototype-BcF-a5an.js +1 -0
- package/dist/web/assets/PipelineGallery-BJhyM0rx.js +1 -0
- package/dist/web/assets/ScopeHeaderPrototype-GD1HNfaO.js +1 -0
- package/dist/web/assets/ScopeHeaderStylesPrototype-aa4uNJJ1.js +1 -0
- package/dist/web/assets/ScrollycodingPrototype-CKW1bf72.js +70 -0
- package/dist/web/assets/SectionHeaderVariations-DM8vUwfj.js +1 -0
- package/dist/web/assets/SemanticGallery-CtQEo7St.js +1 -0
- package/dist/web/assets/SessionCardPrototype-CgHCIMHe.js +1 -0
- package/dist/web/assets/SessionSidebarVariations-DMQL3Azj.js +3 -0
- package/dist/web/assets/SessionStartPrototype-Cwsv01Rr.js +1 -0
- package/dist/web/assets/SmartMenuPrototype-Br37Qbs_.js +1 -0
- package/dist/web/assets/StyleGallery-rZgrploB.js +1 -0
- package/dist/web/assets/TimelineCardPrototype-lzPc5mhe.js +19 -0
- package/dist/web/assets/ToolbarPrototype-Dm4BNZra.js +1 -0
- package/dist/web/assets/TooltipExperiment-Dy8QzTIP.js +13 -0
- package/dist/web/assets/WalkthroughCTAPrototype-uHoovujd.js +1 -0
- package/dist/web/assets/WalkthroughHeaderVariations-Do7Di1g1.js +1 -0
- package/dist/web/assets/WalkthroughShowcase-sGmRoPoM.js +112 -0
- package/dist/web/assets/arrow-right-D46Nx1mC.js +1 -0
- package/dist/web/assets/brain-BXIZKtOZ.js +1 -0
- package/dist/web/assets/grid-3x3-Cb81B62m.js +1 -0
- package/dist/web/assets/main-B1fyog77.js +321 -0
- package/dist/web/assets/main-C2PK2Klg.css +1 -0
- package/dist/web/assets/semantic-variations-Bd-W7ea2.js +1 -0
- package/dist/web/assets/target-Cf92wDTW.js +1 -0
- package/dist/web/favicon.png +0 -0
- package/dist/web/favicon.svg +22 -0
- package/dist/web/icon-192x192.png +0 -0
- package/dist/web/icon-512x512.png +0 -0
- package/dist/web/index.html +45 -0
- package/dist/web/manifest.json +61 -0
- package/package.json +192 -0
- package/scripts/postinstall.js +60 -0
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process Manager Factory
|
|
3
|
+
*
|
|
4
|
+
* Creates either a direct ClaudeProcessManager or a ProcessManagerClient
|
|
5
|
+
* depending on configuration. This allows cui-server to work with either mode.
|
|
6
|
+
*/
|
|
7
|
+
import { EventEmitter } from 'events';
|
|
8
|
+
import * as fs from 'fs';
|
|
9
|
+
import { ClaudeProcessManager } from './claude-process-manager.js';
|
|
10
|
+
import { ProcessManagerClient } from '../../process-daemon/process-manager-client.js';
|
|
11
|
+
import { DEFAULT_SOCKET_PATH } from '../../process-daemon/types.js';
|
|
12
|
+
import { createLogger } from '../infrastructure/logger.js';
|
|
13
|
+
import { getProcessEventLog } from './process-event-log.js';
|
|
14
|
+
import { asClaudeSessionId, asStreamingId } from '../../types/index.js';
|
|
15
|
+
const logger = createLogger('ProcessManagerFactory');
|
|
16
|
+
/**
|
|
17
|
+
* Unified process manager type - wraps either implementation
|
|
18
|
+
* and provides a consistent interface to cui-server.
|
|
19
|
+
*/
|
|
20
|
+
export class UnifiedProcessManager extends EventEmitter {
|
|
21
|
+
_direct = null;
|
|
22
|
+
_client = null;
|
|
23
|
+
_mode;
|
|
24
|
+
_activeSessions = new Set();
|
|
25
|
+
_statusTracker = null;
|
|
26
|
+
constructor(mode) {
|
|
27
|
+
super();
|
|
28
|
+
this._mode = mode;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Set the status tracker for session registration
|
|
32
|
+
*/
|
|
33
|
+
setStatusTracker(tracker) {
|
|
34
|
+
this._statusTracker = tracker;
|
|
35
|
+
}
|
|
36
|
+
get mode() {
|
|
37
|
+
return this._mode;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Initialize with direct process manager
|
|
41
|
+
*/
|
|
42
|
+
initDirect(manager) {
|
|
43
|
+
this._direct = manager;
|
|
44
|
+
// Forward events
|
|
45
|
+
manager.on('claude-message', (data) => {
|
|
46
|
+
this._activeSessions.add(asStreamingId(data.streamingId));
|
|
47
|
+
this.emit('claude-message', data);
|
|
48
|
+
});
|
|
49
|
+
manager.on('process-closed', (data) => {
|
|
50
|
+
this._activeSessions.delete(asStreamingId(data.streamingId));
|
|
51
|
+
this.emit('process-closed', data);
|
|
52
|
+
});
|
|
53
|
+
manager.on('process-error', (data) => this.emit('process-error', data));
|
|
54
|
+
manager.on('process-spawned', (data) => this.emit('process-spawned', data));
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Initialize with daemon client
|
|
58
|
+
*/
|
|
59
|
+
async initClient(client) {
|
|
60
|
+
this._client = client;
|
|
61
|
+
await client.connect();
|
|
62
|
+
const processEventLog = getProcessEventLog();
|
|
63
|
+
// Forward events and populate ProcessEventLog
|
|
64
|
+
client.on('claude-message', (data) => {
|
|
65
|
+
this._activeSessions.add(asStreamingId(data.streamingId));
|
|
66
|
+
this.emit('claude-message', data);
|
|
67
|
+
});
|
|
68
|
+
client.on('process-closed', (data) => {
|
|
69
|
+
this._activeSessions.delete(asStreamingId(data.streamingId));
|
|
70
|
+
// Log process exit to ProcessEventLog
|
|
71
|
+
processEventLog.processExit({
|
|
72
|
+
traceId: data.streamingId,
|
|
73
|
+
streamingId: data.streamingId,
|
|
74
|
+
exitCode: data.code,
|
|
75
|
+
terminationReason: data.code === 0 ? 'normal_completion'
|
|
76
|
+
: data.code === 143 ? 'user_stop'
|
|
77
|
+
: data.code === 137 ? 'force_killed'
|
|
78
|
+
: 'process_crash',
|
|
79
|
+
});
|
|
80
|
+
this.emit('process-closed', data);
|
|
81
|
+
});
|
|
82
|
+
client.on('process-error', (data) => this.emit('process-error', data));
|
|
83
|
+
client.on('process-spawned', (data) => this.emit('process-spawned', data));
|
|
84
|
+
// Sync initial active sessions from daemon
|
|
85
|
+
try {
|
|
86
|
+
const sessions = await client.getActiveSessions();
|
|
87
|
+
for (const s of sessions) {
|
|
88
|
+
this._activeSessions.add(asStreamingId(s.streamingId));
|
|
89
|
+
// Also register with conversationStatusManager if available
|
|
90
|
+
if (this._statusTracker) {
|
|
91
|
+
this._statusTracker.registerActiveSession(asStreamingId(s.streamingId), asClaudeSessionId(s.sessionId));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
logger.info('Synced active sessions from daemon', {
|
|
95
|
+
count: sessions.length,
|
|
96
|
+
sessions: sessions.map(s => ({ streamingId: s.streamingId.substring(0, 8), sessionId: s.sessionId.substring(0, 8) }))
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
logger.warn('Failed to sync active sessions from daemon', { error });
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// ============================================================================
|
|
104
|
+
// Unified Interface - matches ClaudeProcessManager signature
|
|
105
|
+
// ============================================================================
|
|
106
|
+
async startConversation(config) {
|
|
107
|
+
if (this._direct) {
|
|
108
|
+
return this._direct.startConversation(config);
|
|
109
|
+
}
|
|
110
|
+
if (this._client) {
|
|
111
|
+
const processEventLog = getProcessEventLog();
|
|
112
|
+
const isResume = 'sessionId' in config && !!config.sessionId;
|
|
113
|
+
// Log spawn start
|
|
114
|
+
const traceId = `daemon-${Date.now()}`;
|
|
115
|
+
processEventLog.spawnStart({
|
|
116
|
+
traceId,
|
|
117
|
+
streamingId: traceId, // Will be replaced with actual streamingId
|
|
118
|
+
isResume,
|
|
119
|
+
workingDirectory: config.workingDirectory,
|
|
120
|
+
model: config.model,
|
|
121
|
+
});
|
|
122
|
+
const result = await this._client.startConversation(config);
|
|
123
|
+
// Log spawn success and system init
|
|
124
|
+
processEventLog.spawnSuccess({
|
|
125
|
+
traceId: result.streamingId,
|
|
126
|
+
streamingId: result.streamingId,
|
|
127
|
+
pid: 0, // PID not available from daemon in spawn result
|
|
128
|
+
});
|
|
129
|
+
if (result.systemInit) {
|
|
130
|
+
processEventLog.systemInit({
|
|
131
|
+
traceId: result.streamingId,
|
|
132
|
+
streamingId: result.streamingId,
|
|
133
|
+
sessionId: result.systemInit.session_id,
|
|
134
|
+
model: result.systemInit.model,
|
|
135
|
+
workingDirectory: result.systemInit.cwd,
|
|
136
|
+
toolCount: result.systemInit.tools?.length || 0,
|
|
137
|
+
mcpServerCount: result.systemInit.mcp_servers?.length || 0,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
// Register the session mapping immediately so it's available for AskUserQuestion
|
|
141
|
+
if (this._statusTracker && result.systemInit?.session_id) {
|
|
142
|
+
this._statusTracker.registerActiveSession(asStreamingId(result.streamingId), asClaudeSessionId(result.systemInit.session_id));
|
|
143
|
+
logger.debug('Registered session from daemon startConversation', {
|
|
144
|
+
streamingId: result.streamingId.substring(0, 8),
|
|
145
|
+
sessionId: result.systemInit.session_id.substring(0, 8)
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
return result;
|
|
149
|
+
}
|
|
150
|
+
throw new Error('Process manager not initialized');
|
|
151
|
+
}
|
|
152
|
+
async stopConversation(streamingId) {
|
|
153
|
+
if (this._direct) {
|
|
154
|
+
return this._direct.stopConversation(streamingId);
|
|
155
|
+
}
|
|
156
|
+
if (this._client) {
|
|
157
|
+
return this._client.stopConversation(streamingId);
|
|
158
|
+
}
|
|
159
|
+
throw new Error('Process manager not initialized');
|
|
160
|
+
}
|
|
161
|
+
forceKillConversation(streamingId) {
|
|
162
|
+
if (this._direct) {
|
|
163
|
+
return this._direct.forceKillConversation(streamingId);
|
|
164
|
+
}
|
|
165
|
+
if (this._client) {
|
|
166
|
+
return this._client.forceKillConversation(streamingId);
|
|
167
|
+
}
|
|
168
|
+
throw new Error('Process manager not initialized');
|
|
169
|
+
}
|
|
170
|
+
interruptConversation(streamingId) {
|
|
171
|
+
if (this._direct) {
|
|
172
|
+
return this._direct.interruptConversation(streamingId);
|
|
173
|
+
}
|
|
174
|
+
if (this._client) {
|
|
175
|
+
return this._client.interruptConversation(streamingId);
|
|
176
|
+
}
|
|
177
|
+
throw new Error('Process manager not initialized');
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Get active sessions - SYNCHRONOUS for backwards compatibility
|
|
181
|
+
* Uses local cache that's kept in sync via events
|
|
182
|
+
*/
|
|
183
|
+
getActiveSessions() {
|
|
184
|
+
return Array.from(this._activeSessions);
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Check if session is active - SYNCHRONOUS for backwards compatibility
|
|
188
|
+
*/
|
|
189
|
+
isSessionActive(streamingId) {
|
|
190
|
+
return this._activeSessions.has(streamingId);
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Get all active session mappings (streamingId -> sessionId)
|
|
194
|
+
* Used to repopulate local caches after server restart
|
|
195
|
+
*/
|
|
196
|
+
getActiveSessionMappings() {
|
|
197
|
+
const mappings = [];
|
|
198
|
+
for (const streamingId of this._activeSessions) {
|
|
199
|
+
const sessionId = this.getClaudeSessionId(streamingId);
|
|
200
|
+
if (sessionId) {
|
|
201
|
+
mappings.push({ streamingId, sessionId });
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return mappings;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Get the Claude session ID for a streaming ID
|
|
208
|
+
* This mapping persists for the lifetime of the process
|
|
209
|
+
*/
|
|
210
|
+
getClaudeSessionId(streamingId) {
|
|
211
|
+
if (this._direct) {
|
|
212
|
+
return this._direct.getClaudeSessionId(streamingId);
|
|
213
|
+
}
|
|
214
|
+
// For daemon mode, we rely on the status tracker since daemon doesn't expose this
|
|
215
|
+
if (this._statusTracker) {
|
|
216
|
+
return this._statusTracker.getSessionId(streamingId);
|
|
217
|
+
}
|
|
218
|
+
return undefined;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Send question answer
|
|
222
|
+
*/
|
|
223
|
+
sendQuestionAnswer(streamingId, toolUseId, questions, answers) {
|
|
224
|
+
if (this._direct) {
|
|
225
|
+
return this._direct.sendQuestionAnswer(streamingId, toolUseId, questions, answers);
|
|
226
|
+
}
|
|
227
|
+
if (this._client) {
|
|
228
|
+
// Fire and forget for sync interface
|
|
229
|
+
this._client.sendQuestionAnswer(streamingId, toolUseId, questions, answers).catch((err) => {
|
|
230
|
+
logger.error('Failed to send question answer', err);
|
|
231
|
+
});
|
|
232
|
+
return true;
|
|
233
|
+
}
|
|
234
|
+
return false;
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Send stdin message
|
|
238
|
+
*/
|
|
239
|
+
sendStdinMessage(streamingId, message) {
|
|
240
|
+
if (this._direct) {
|
|
241
|
+
return this._direct.sendStdinMessage(streamingId, message);
|
|
242
|
+
}
|
|
243
|
+
if (this._client) {
|
|
244
|
+
// Fire and forget for sync interface
|
|
245
|
+
this._client.sendStdinMessage(streamingId, message).catch((err) => {
|
|
246
|
+
logger.error('Failed to send stdin message', err);
|
|
247
|
+
});
|
|
248
|
+
return true;
|
|
249
|
+
}
|
|
250
|
+
return false;
|
|
251
|
+
}
|
|
252
|
+
// ============================================================================
|
|
253
|
+
// Configuration Methods (delegated or no-op)
|
|
254
|
+
// ============================================================================
|
|
255
|
+
setMCPConfigPath(path) {
|
|
256
|
+
if (this._direct) {
|
|
257
|
+
this._direct.setMCPConfigPath(path);
|
|
258
|
+
}
|
|
259
|
+
// No-op in client mode - daemon handles this
|
|
260
|
+
}
|
|
261
|
+
setConversationStatusManager(service) {
|
|
262
|
+
if (this._direct) {
|
|
263
|
+
this._direct.setConversationStatusManager(service);
|
|
264
|
+
}
|
|
265
|
+
// No-op in client mode
|
|
266
|
+
}
|
|
267
|
+
setNotificationService(service) {
|
|
268
|
+
if (this._direct) {
|
|
269
|
+
this._direct.setNotificationService(service);
|
|
270
|
+
}
|
|
271
|
+
// No-op in client mode
|
|
272
|
+
}
|
|
273
|
+
setRouterService(service) {
|
|
274
|
+
if (this._direct) {
|
|
275
|
+
this._direct.setRouterService(service);
|
|
276
|
+
}
|
|
277
|
+
// No-op in client mode
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Disconnect from daemon (daemon mode) or cleanup (direct mode)
|
|
281
|
+
* Must be called during server shutdown to prevent reconnection loops
|
|
282
|
+
*/
|
|
283
|
+
disconnect() {
|
|
284
|
+
if (this._client) {
|
|
285
|
+
logger.info('Disconnecting from process daemon');
|
|
286
|
+
this._client.disconnect();
|
|
287
|
+
}
|
|
288
|
+
// Direct mode: nothing to disconnect, processes are managed directly
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Create a process manager based on configuration
|
|
293
|
+
*/
|
|
294
|
+
export async function createProcessManager(options) {
|
|
295
|
+
const socketPath = options.daemonSocketPath || process.env.CLAUDIA_DAEMON_SOCKET || process.env.CUI_DAEMON_SOCKET || DEFAULT_SOCKET_PATH;
|
|
296
|
+
// Auto-detect mode: use daemon if socket exists, otherwise direct
|
|
297
|
+
let mode = options.mode;
|
|
298
|
+
if (!mode) {
|
|
299
|
+
const daemonRunning = fs.existsSync(socketPath);
|
|
300
|
+
mode = daemonRunning ? 'daemon' : 'direct';
|
|
301
|
+
logger.info('Auto-detected process manager mode', { mode, socketPath, daemonRunning });
|
|
302
|
+
}
|
|
303
|
+
logger.info('Creating process manager', { mode, socketPath: mode === 'daemon' ? socketPath : undefined });
|
|
304
|
+
const unified = new UnifiedProcessManager(mode);
|
|
305
|
+
// Set status tracker if provided (needed for session sync in daemon mode)
|
|
306
|
+
if (options.statusTracker) {
|
|
307
|
+
unified.setStatusTracker(options.statusTracker);
|
|
308
|
+
}
|
|
309
|
+
if (mode === 'daemon') {
|
|
310
|
+
try {
|
|
311
|
+
const client = new ProcessManagerClient(socketPath);
|
|
312
|
+
await unified.initClient(client);
|
|
313
|
+
logger.info('Process manager initialized in daemon mode');
|
|
314
|
+
}
|
|
315
|
+
catch (err) {
|
|
316
|
+
// Daemon connection failed - fall back to direct mode
|
|
317
|
+
logger.warn('Daemon connection failed, falling back to direct mode', {
|
|
318
|
+
error: err instanceof Error ? err.message : String(err)
|
|
319
|
+
});
|
|
320
|
+
if (!options.historyReader || !options.statusTracker) {
|
|
321
|
+
throw new Error('Direct mode requires historyReader and statusTracker');
|
|
322
|
+
}
|
|
323
|
+
const direct = new ClaudeProcessManager(options.historyReader, options.statusTracker, undefined, undefined, options.toolMetricsService, options.sessionInfoService, options.fileSystemService);
|
|
324
|
+
unified.initDirect(direct);
|
|
325
|
+
logger.info('Process manager initialized in direct mode (fallback)');
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
else {
|
|
329
|
+
if (!options.historyReader || !options.statusTracker) {
|
|
330
|
+
throw new Error('Direct mode requires historyReader and statusTracker');
|
|
331
|
+
}
|
|
332
|
+
const direct = new ClaudeProcessManager(options.historyReader, options.statusTracker, undefined, undefined, options.toolMetricsService, options.sessionInfoService, options.fileSystemService);
|
|
333
|
+
unified.initDirect(direct);
|
|
334
|
+
logger.info('Process manager initialized in direct mode');
|
|
335
|
+
}
|
|
336
|
+
return unified;
|
|
337
|
+
}
|
|
338
|
+
//# sourceMappingURL=process-manager-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-manager-factory.js","sourceRoot":"","sources":["../../../src/services/process/process-manager-factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
import { QuestionRequest, QuestionDefinition } from '../types/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Service to track AskUserQuestion requests from Claude CLI.
|
|
5
|
+
* Unlike permissions (which use MCP polling), questions are answered via stdin.
|
|
6
|
+
*/
|
|
7
|
+
export declare class QuestionTracker extends EventEmitter {
|
|
8
|
+
private questionRequests;
|
|
9
|
+
constructor();
|
|
10
|
+
/**
|
|
11
|
+
* Add a new question request from AskUserQuestion tool
|
|
12
|
+
*/
|
|
13
|
+
addQuestionRequest(toolUseId: string, questions: QuestionDefinition[], streamingId: string): QuestionRequest;
|
|
14
|
+
/**
|
|
15
|
+
* Get all question requests
|
|
16
|
+
*/
|
|
17
|
+
getAllQuestionRequests(): QuestionRequest[];
|
|
18
|
+
/**
|
|
19
|
+
* Get question requests filtered by criteria
|
|
20
|
+
*/
|
|
21
|
+
getQuestionRequests(filter?: {
|
|
22
|
+
streamingId?: string;
|
|
23
|
+
status?: 'pending' | 'answered';
|
|
24
|
+
}): QuestionRequest[];
|
|
25
|
+
/**
|
|
26
|
+
* Get a specific question request by ID
|
|
27
|
+
*/
|
|
28
|
+
getQuestionRequest(id: string): QuestionRequest | undefined;
|
|
29
|
+
/**
|
|
30
|
+
* Mark a question as answered
|
|
31
|
+
*/
|
|
32
|
+
markAnswered(id: string, answers: Record<string, string>): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Clear all question requests (for testing)
|
|
35
|
+
*/
|
|
36
|
+
clear(): void;
|
|
37
|
+
/**
|
|
38
|
+
* Get the number of question requests
|
|
39
|
+
*/
|
|
40
|
+
size(): number;
|
|
41
|
+
/**
|
|
42
|
+
* Get all questions for a specific streaming ID
|
|
43
|
+
*/
|
|
44
|
+
getQuestionsByStreamingId(streamingId: string): QuestionRequest[];
|
|
45
|
+
/**
|
|
46
|
+
* Remove all questions for a specific streaming ID
|
|
47
|
+
* Used for cleanup when a conversation ends
|
|
48
|
+
*/
|
|
49
|
+
removeQuestionsByStreamingId(streamingId: string): number;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=question-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"question-tracker.d.ts","sourceRoot":"","sources":["../../src/services/question-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAGvE;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,CAAC,gBAAgB,CAA2C;;IAMnE;;OAEG;IACH,kBAAkB,CAChB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,kBAAkB,EAAE,EAC/B,WAAW,EAAE,MAAM,GAClB,eAAe;IAoBlB;;OAEG;IACH,sBAAsB,IAAI,eAAe,EAAE;IAI3C;;OAEG;IACH,mBAAmB,CAAC,MAAM,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,SAAS,GAAG,UAAU,CAAA;KAAE,GAAG,eAAe,EAAE;IAc1G;;OAEG;IACH,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAI3D;;OAEG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO;IAgBlE;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,IAAI,IAAI,MAAM;IAId;;OAEG;IACH,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,EAAE;IAMjE;;;OAGG;IACH,4BAA4B,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;CAoB1D"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
3
|
+
import { logger } from '../services/infrastructure/logger.js';
|
|
4
|
+
/**
|
|
5
|
+
* Service to track AskUserQuestion requests from Claude CLI.
|
|
6
|
+
* Unlike permissions (which use MCP polling), questions are answered via stdin.
|
|
7
|
+
*/
|
|
8
|
+
export class QuestionTracker extends EventEmitter {
|
|
9
|
+
questionRequests = new Map();
|
|
10
|
+
constructor() {
|
|
11
|
+
super();
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Add a new question request from AskUserQuestion tool
|
|
15
|
+
*/
|
|
16
|
+
addQuestionRequest(toolUseId, questions, streamingId) {
|
|
17
|
+
const id = uuidv4();
|
|
18
|
+
const request = {
|
|
19
|
+
id,
|
|
20
|
+
streamingId,
|
|
21
|
+
toolUseId,
|
|
22
|
+
questions,
|
|
23
|
+
timestamp: new Date().toISOString(),
|
|
24
|
+
status: 'pending',
|
|
25
|
+
};
|
|
26
|
+
this.questionRequests.set(id, request);
|
|
27
|
+
logger.info('Question request added', { id, toolUseId, streamingId, questionCount: questions.length });
|
|
28
|
+
// Emit event for new question request
|
|
29
|
+
this.emit('question_request', request);
|
|
30
|
+
return request;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Get all question requests
|
|
34
|
+
*/
|
|
35
|
+
getAllQuestionRequests() {
|
|
36
|
+
return Array.from(this.questionRequests.values());
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get question requests filtered by criteria
|
|
40
|
+
*/
|
|
41
|
+
getQuestionRequests(filter) {
|
|
42
|
+
let requests = Array.from(this.questionRequests.values());
|
|
43
|
+
if (filter?.streamingId) {
|
|
44
|
+
requests = requests.filter(req => req.streamingId === filter.streamingId);
|
|
45
|
+
}
|
|
46
|
+
if (filter?.status) {
|
|
47
|
+
requests = requests.filter(req => req.status === filter.status);
|
|
48
|
+
}
|
|
49
|
+
return requests;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Get a specific question request by ID
|
|
53
|
+
*/
|
|
54
|
+
getQuestionRequest(id) {
|
|
55
|
+
return this.questionRequests.get(id);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Mark a question as answered
|
|
59
|
+
*/
|
|
60
|
+
markAnswered(id, answers) {
|
|
61
|
+
const request = this.questionRequests.get(id);
|
|
62
|
+
if (!request) {
|
|
63
|
+
logger.warn('Question request not found', { id });
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
request.status = 'answered';
|
|
67
|
+
request.answers = answers;
|
|
68
|
+
logger.info('Question request answered', { id, answers });
|
|
69
|
+
this.emit('question_answered', request);
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Clear all question requests (for testing)
|
|
74
|
+
*/
|
|
75
|
+
clear() {
|
|
76
|
+
this.questionRequests.clear();
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Get the number of question requests
|
|
80
|
+
*/
|
|
81
|
+
size() {
|
|
82
|
+
return this.questionRequests.size;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get all questions for a specific streaming ID
|
|
86
|
+
*/
|
|
87
|
+
getQuestionsByStreamingId(streamingId) {
|
|
88
|
+
return Array.from(this.questionRequests.values()).filter(req => req.streamingId === streamingId);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Remove all questions for a specific streaming ID
|
|
92
|
+
* Used for cleanup when a conversation ends
|
|
93
|
+
*/
|
|
94
|
+
removeQuestionsByStreamingId(streamingId) {
|
|
95
|
+
const toRemove = [];
|
|
96
|
+
for (const [id, request] of this.questionRequests.entries()) {
|
|
97
|
+
if (request.streamingId === streamingId) {
|
|
98
|
+
toRemove.push(id);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
toRemove.forEach(id => this.questionRequests.delete(id));
|
|
102
|
+
if (toRemove.length > 0) {
|
|
103
|
+
logger.info('Removed questions for streaming session', {
|
|
104
|
+
streamingId,
|
|
105
|
+
removedCount: toRemove.length
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
return toRemove.length;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=question-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"question-tracker.js","sourceRoot":"","sources":["../../src/services/question-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { ConversationSummary, ConversationMessage, ConversationListQuery } from '../../types/index.js';
|
|
2
|
+
import { SessionInfoService } from '../sessions/session-info-service.js';
|
|
3
|
+
/**
|
|
4
|
+
* Reads conversation history from Claude's local storage
|
|
5
|
+
*/
|
|
6
|
+
export declare class ClaudeHistoryReader {
|
|
7
|
+
private claudeHomePath;
|
|
8
|
+
private logger;
|
|
9
|
+
private sessionInfoService;
|
|
10
|
+
private conversationCache;
|
|
11
|
+
private toolMetricsService;
|
|
12
|
+
private messageFilter;
|
|
13
|
+
constructor(sessionInfoService?: SessionInfoService);
|
|
14
|
+
get homePath(): string;
|
|
15
|
+
/**
|
|
16
|
+
* Clear the conversation cache to force a refresh on next read
|
|
17
|
+
*/
|
|
18
|
+
clearCache(): void;
|
|
19
|
+
/**
|
|
20
|
+
* List all conversations with optional filtering
|
|
21
|
+
*/
|
|
22
|
+
listConversations(filter?: ConversationListQuery): Promise<{
|
|
23
|
+
conversations: ConversationSummary[];
|
|
24
|
+
total: number;
|
|
25
|
+
}>;
|
|
26
|
+
/**
|
|
27
|
+
* Fast path for listing archived sessions - queries DB directly without parsing JSONL files.
|
|
28
|
+
* This is ~100x faster than the file-parsing path for large archives.
|
|
29
|
+
*/
|
|
30
|
+
private listArchivedConversationsFast;
|
|
31
|
+
/**
|
|
32
|
+
* Get the file path for a session's JSONL file.
|
|
33
|
+
* Public wrapper around findSessionFile.
|
|
34
|
+
*/
|
|
35
|
+
getSessionFilePath(sessionId: string): Promise<string | null>;
|
|
36
|
+
/**
|
|
37
|
+
* Find the JSONL file for a session by checking each project folder
|
|
38
|
+
* Returns the file path if found, null otherwise
|
|
39
|
+
*/
|
|
40
|
+
private findSessionFile;
|
|
41
|
+
/**
|
|
42
|
+
* Get file modification times for multiple sessions
|
|
43
|
+
* Used for lightweight activity detection without reading file contents
|
|
44
|
+
*/
|
|
45
|
+
getSessionFileMtimes(sessionIds: string[]): Promise<Map<string, number>>;
|
|
46
|
+
/**
|
|
47
|
+
* Get sessions that are "recently active" based on file modification time.
|
|
48
|
+
* A session is considered active if its JSONL file was modified within the threshold.
|
|
49
|
+
* This is more reliable than fuser since Claude writes frequently during activity.
|
|
50
|
+
*
|
|
51
|
+
* @param sessionIds - Session IDs to check
|
|
52
|
+
* @param thresholdMs - How recent the mtime must be (default: 60 seconds)
|
|
53
|
+
* @returns Set of session IDs that are recently active
|
|
54
|
+
*/
|
|
55
|
+
getRecentlyActiveSessionsByMtime(sessionIds: string[], thresholdMs?: number): Promise<Set<string>>;
|
|
56
|
+
/**
|
|
57
|
+
* Fetch conversation with metadata in a single fast operation
|
|
58
|
+
* Uses direct file lookup instead of parsing all conversations
|
|
59
|
+
*/
|
|
60
|
+
fetchConversationDirect(sessionId: string): Promise<{
|
|
61
|
+
messages: ConversationMessage[];
|
|
62
|
+
metadata: {
|
|
63
|
+
summary: string;
|
|
64
|
+
projectPath: string;
|
|
65
|
+
model: string;
|
|
66
|
+
totalDuration: number;
|
|
67
|
+
};
|
|
68
|
+
}>;
|
|
69
|
+
/**
|
|
70
|
+
* Get summary for a session from summaries.json
|
|
71
|
+
*/
|
|
72
|
+
private getSummaryForSession;
|
|
73
|
+
/**
|
|
74
|
+
* Decode project folder name to actual path
|
|
75
|
+
*/
|
|
76
|
+
private decodeProjectName;
|
|
77
|
+
/**
|
|
78
|
+
* Get the working directory for a specific conversation session
|
|
79
|
+
* Reads the cwd from the session's JSONL file to get the accurate path
|
|
80
|
+
* (folder name decoding is lossy for paths containing hyphens)
|
|
81
|
+
*/
|
|
82
|
+
getConversationWorkingDirectory(sessionId: string): Promise<string | null>;
|
|
83
|
+
/**
|
|
84
|
+
* Get file modification times for JSONL files
|
|
85
|
+
* @param allowedSessionIds Optional filter - if provided, only stat files for these sessions
|
|
86
|
+
*/
|
|
87
|
+
private getFileModificationTimes;
|
|
88
|
+
/**
|
|
89
|
+
* Extract source project name from file path
|
|
90
|
+
*/
|
|
91
|
+
private extractSourceProject;
|
|
92
|
+
/**
|
|
93
|
+
* Process all entries into conversation chains (the cheap in-memory operations)
|
|
94
|
+
*/
|
|
95
|
+
private processAllEntries;
|
|
96
|
+
/**
|
|
97
|
+
* Parse all conversations from all JSONL files with file-level caching and concurrency protection
|
|
98
|
+
* @param allowedSessionIds Optional set of session IDs to parse. If provided, only these sessions will be parsed.
|
|
99
|
+
*/
|
|
100
|
+
private parseAllConversations;
|
|
101
|
+
/**
|
|
102
|
+
* Parse a single JSONL file and return all valid entries
|
|
103
|
+
*/
|
|
104
|
+
private parseJsonlFile;
|
|
105
|
+
/**
|
|
106
|
+
* Group entries by sessionId
|
|
107
|
+
*/
|
|
108
|
+
private groupEntriesBySession;
|
|
109
|
+
/**
|
|
110
|
+
* Process summary entries and create leafUuid mapping
|
|
111
|
+
*/
|
|
112
|
+
private processSummaries;
|
|
113
|
+
private readDirectory;
|
|
114
|
+
/**
|
|
115
|
+
* Build a conversation chain from session entries
|
|
116
|
+
*/
|
|
117
|
+
private buildConversationChain;
|
|
118
|
+
/**
|
|
119
|
+
* Build ordered message chain using parentUuid relationships
|
|
120
|
+
*/
|
|
121
|
+
private buildMessageChain;
|
|
122
|
+
/**
|
|
123
|
+
* Determine conversation summary from messages and summary map
|
|
124
|
+
*/
|
|
125
|
+
private determineConversationSummary;
|
|
126
|
+
/**
|
|
127
|
+
* Extract text content from message object
|
|
128
|
+
*/
|
|
129
|
+
private extractMessageContent;
|
|
130
|
+
/**
|
|
131
|
+
* Extract model information from messages
|
|
132
|
+
*/
|
|
133
|
+
private extractModel;
|
|
134
|
+
private parseMessage;
|
|
135
|
+
private applyFilters;
|
|
136
|
+
private applyPagination;
|
|
137
|
+
private decodeProjectPath;
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=claude-history-reader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-history-reader.d.ts","sourceRoot":"","sources":["../../../src/services/sessions/claude-history-reader.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,qBAAqB,EAA6B,MAAM,kBAAkB,CAAC;AAE9H,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAuBzE;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,aAAa,CAAgB;gBAEzB,kBAAkB,CAAC,EAAE,kBAAkB;IASnD,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACG,iBAAiB,CAAC,MAAM,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC;QAC/D,aAAa,EAAE,mBAAmB,EAAE,CAAC;QACrC,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IAyIF;;;OAGG;YACW,6BAA6B;IA4D3C;;;OAGG;IACG,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAInE;;;OAGG;YACW,eAAe;IA2B7B;;;OAGG;IACG,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAoB9E;;;;;;;;OAQG;IACG,gCAAgC,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,WAAW,GAAE,MAAc,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IA2D/G;;;OAGG;IACG,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QACxD,QAAQ,EAAE,mBAAmB,EAAE,CAAC;QAChC,QAAQ,EAAE;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,aAAa,EAAE,MAAM,CAAA;SAAE,CAAC;KAC1F,CAAC;IAuDF;;OAEG;YACW,oBAAoB;IAWlC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAMzB;;;;OAIG;IACG,+BAA+B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA+ChF;;;OAGG;YACW,wBAAwB;IAoDtC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAO5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAwCzB;;;OAGG;YACW,qBAAqB;IAkCnC;;OAEG;YACW,cAAc;IA0B5B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAgB7B;;OAEG;IACH,OAAO,CAAC,gBAAgB;YAYV,aAAa;IAW3B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA8F9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAqDzB;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAsBpC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAoB7B;;OAEG;IACH,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,YAAY;IAyCpB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,iBAAiB;CAK1B"}
|