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,355 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Branch Service
|
|
3
|
+
*
|
|
4
|
+
* Creates branch sessions by truncating conversation history to a specific turn.
|
|
5
|
+
* Enables "rewind and branch" functionality - pick a point in history and start fresh.
|
|
6
|
+
*/
|
|
7
|
+
import * as fs from 'fs/promises';
|
|
8
|
+
import * as path from 'path';
|
|
9
|
+
import * as os from 'os';
|
|
10
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
11
|
+
import { createLogger } from '../infrastructure/logger.js';
|
|
12
|
+
import { ClaudeHistoryReader } from '../sessions/claude-history-reader.js';
|
|
13
|
+
import { SessionInfoService } from '../sessions/session-info-service.js';
|
|
14
|
+
const logger = createLogger('SessionBranchService');
|
|
15
|
+
export class SessionBranchService {
|
|
16
|
+
static instance;
|
|
17
|
+
claudeHomePath;
|
|
18
|
+
historyReader;
|
|
19
|
+
sessionInfoService;
|
|
20
|
+
constructor() {
|
|
21
|
+
this.claudeHomePath = path.join(os.homedir(), '.claude');
|
|
22
|
+
this.historyReader = new ClaudeHistoryReader();
|
|
23
|
+
this.sessionInfoService = SessionInfoService.getInstance();
|
|
24
|
+
}
|
|
25
|
+
static getInstance() {
|
|
26
|
+
if (!SessionBranchService.instance) {
|
|
27
|
+
SessionBranchService.instance = new SessionBranchService();
|
|
28
|
+
}
|
|
29
|
+
return SessionBranchService.instance;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Create a branch from a session at a specific turn.
|
|
33
|
+
* The branch will contain all content up through the specified turn.
|
|
34
|
+
*
|
|
35
|
+
* @param sessionId - Source session to branch from
|
|
36
|
+
* @param options - Branch options including turn number and optional timestamp
|
|
37
|
+
* @returns New session ID and metadata
|
|
38
|
+
*/
|
|
39
|
+
async branchAfterTurn(sessionId, afterTurn, timestamp) {
|
|
40
|
+
logger.info('Creating branch', { sessionId: sessionId.slice(0, 8), afterTurn, timestamp });
|
|
41
|
+
// Find the source session file
|
|
42
|
+
const sourceFile = await this.findSessionFile(sessionId);
|
|
43
|
+
if (!sourceFile) {
|
|
44
|
+
throw new Error(`Session not found: ${sessionId}`);
|
|
45
|
+
}
|
|
46
|
+
// Read and parse all lines
|
|
47
|
+
const content = await fs.readFile(sourceFile, 'utf-8');
|
|
48
|
+
const lines = content.split('\n').filter(line => line.trim());
|
|
49
|
+
const entries = lines.map(line => JSON.parse(line));
|
|
50
|
+
// Find turn boundaries (human text messages, not tool results)
|
|
51
|
+
const turnStartIndices = this.findTurnBoundaries(entries);
|
|
52
|
+
// Determine where to cut
|
|
53
|
+
let cutIndex;
|
|
54
|
+
let actualTurnNumber;
|
|
55
|
+
if (timestamp) {
|
|
56
|
+
// Use timestamp to find the correct cut position
|
|
57
|
+
// This handles the case where DB turn numbers don't match JSONL turn counts
|
|
58
|
+
const result = this.findCutIndexByTimestamp(entries, turnStartIndices, timestamp);
|
|
59
|
+
cutIndex = result.cutIndex;
|
|
60
|
+
actualTurnNumber = result.turnNumber;
|
|
61
|
+
logger.info('Found cut position by timestamp', {
|
|
62
|
+
sessionId: sessionId.slice(0, 8),
|
|
63
|
+
requestedTurn: afterTurn,
|
|
64
|
+
actualTurn: actualTurnNumber,
|
|
65
|
+
cutIndex,
|
|
66
|
+
totalEntries: entries.length,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
// Fall back to turn number (legacy behavior)
|
|
71
|
+
if (afterTurn < 1 || afterTurn > turnStartIndices.length) {
|
|
72
|
+
throw new Error(`Invalid turn number ${afterTurn}. Session has ${turnStartIndices.length} turns.`);
|
|
73
|
+
}
|
|
74
|
+
if (afterTurn === turnStartIndices.length) {
|
|
75
|
+
// Branching after the last turn - include everything
|
|
76
|
+
cutIndex = entries.length;
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
// Cut before the next turn starts
|
|
80
|
+
cutIndex = turnStartIndices[afterTurn]; // afterTurn is 1-indexed, array is 0-indexed
|
|
81
|
+
}
|
|
82
|
+
actualTurnNumber = afterTurn;
|
|
83
|
+
}
|
|
84
|
+
// Generate new session ID
|
|
85
|
+
const newSessionId = uuidv4();
|
|
86
|
+
// Create new entries with updated sessionId
|
|
87
|
+
const branchEntries = entries.slice(0, cutIndex).map(entry => ({
|
|
88
|
+
...entry,
|
|
89
|
+
sessionId: entry.sessionId ? newSessionId : entry.sessionId,
|
|
90
|
+
}));
|
|
91
|
+
// Determine the target project directory
|
|
92
|
+
// We need the RESOLVED path (following symlinks) because that's what the CLI uses
|
|
93
|
+
const targetDir = await this.determineTargetDirectory(entries);
|
|
94
|
+
// Write the new session file
|
|
95
|
+
const newFilePath = path.join(targetDir, `${newSessionId}.jsonl`);
|
|
96
|
+
const newContent = branchEntries.map(e => JSON.stringify(e)).join('\n') + '\n';
|
|
97
|
+
await fs.writeFile(newFilePath, newContent, { mode: 0o600 });
|
|
98
|
+
// Ensure session record exists before copying related data (foreign key constraint)
|
|
99
|
+
// Store branch lineage so we can show "branched from" in the UI
|
|
100
|
+
logger.info('Saving branch lineage to DB', {
|
|
101
|
+
newSessionId: newSessionId.slice(0, 8),
|
|
102
|
+
parentSessionId: sessionId.slice(0, 8),
|
|
103
|
+
atTurn: afterTurn,
|
|
104
|
+
});
|
|
105
|
+
const savedSessionInfo = await this.sessionInfoService.updateSessionInfo(newSessionId, {
|
|
106
|
+
archived: false,
|
|
107
|
+
branched_from_session_id: sessionId,
|
|
108
|
+
branched_at_turn: afterTurn,
|
|
109
|
+
});
|
|
110
|
+
logger.info('Saved session info', {
|
|
111
|
+
newSessionId: newSessionId.slice(0, 8),
|
|
112
|
+
savedBranchedFrom: savedSessionInfo.branched_from_session_id?.slice(0, 8),
|
|
113
|
+
savedAtTurn: savedSessionInfo.branched_at_turn,
|
|
114
|
+
});
|
|
115
|
+
// Copy relevant database records (turns, marks) for the included turns
|
|
116
|
+
const copiedData = await this.copySessionData(sessionId, newSessionId, afterTurn);
|
|
117
|
+
logger.info('Branch created', {
|
|
118
|
+
sourceSession: sessionId.slice(0, 8),
|
|
119
|
+
newSession: newSessionId.slice(0, 8),
|
|
120
|
+
dbTurn: afterTurn,
|
|
121
|
+
jsonlTurn: actualTurnNumber,
|
|
122
|
+
messages: branchEntries.length,
|
|
123
|
+
targetDir: path.basename(targetDir),
|
|
124
|
+
copiedTurns: copiedData.turns,
|
|
125
|
+
copiedMarks: copiedData.marks,
|
|
126
|
+
});
|
|
127
|
+
return {
|
|
128
|
+
newSessionId,
|
|
129
|
+
turnCount: afterTurn, // Return DB turn number for consistency with UI
|
|
130
|
+
messageCount: branchEntries.length,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Copy session data (turns, marks) from source to branch.
|
|
135
|
+
* Only copies data for turns <= afterTurn.
|
|
136
|
+
*/
|
|
137
|
+
async copySessionData(sourceSessionId, newSessionId, afterTurn) {
|
|
138
|
+
let turnsCopied = 0;
|
|
139
|
+
let marksCopied = 0;
|
|
140
|
+
try {
|
|
141
|
+
// Copy session_turns for turns <= afterTurn
|
|
142
|
+
turnsCopied = this.sessionInfoService.copyTurnsForBranch(sourceSessionId, newSessionId, afterTurn);
|
|
143
|
+
// Copy session_marks for turns <= afterTurn
|
|
144
|
+
marksCopied = this.sessionInfoService.copyMarksForBranch(sourceSessionId, newSessionId, afterTurn);
|
|
145
|
+
logger.debug('Copied session data for branch', {
|
|
146
|
+
sourceSession: sourceSessionId.slice(0, 8),
|
|
147
|
+
newSession: newSessionId.slice(0, 8),
|
|
148
|
+
afterTurn,
|
|
149
|
+
turnsCopied,
|
|
150
|
+
marksCopied,
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
// Log but don't fail the branch if DB copy fails
|
|
155
|
+
logger.warn('Failed to copy some session data for branch', {
|
|
156
|
+
sourceSession: sourceSessionId.slice(0, 8),
|
|
157
|
+
newSession: newSessionId.slice(0, 8),
|
|
158
|
+
error: error instanceof Error ? error.message : String(error),
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
return { turns: turnsCopied, marks: marksCopied };
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Find indices where each turn starts (human text messages).
|
|
165
|
+
* A "turn" begins with a user message containing actual text content,
|
|
166
|
+
* not tool results.
|
|
167
|
+
*/
|
|
168
|
+
findTurnBoundaries(entries) {
|
|
169
|
+
const boundaries = [];
|
|
170
|
+
for (let i = 0; i < entries.length; i++) {
|
|
171
|
+
const entry = entries[i];
|
|
172
|
+
if (entry.type === 'user' && this.hasHumanText(entry)) {
|
|
173
|
+
boundaries.push(i);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
return boundaries;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Check if a user message contains actual human text (not just tool results).
|
|
180
|
+
*/
|
|
181
|
+
hasHumanText(entry) {
|
|
182
|
+
const content = entry.message?.content;
|
|
183
|
+
// String content is human text
|
|
184
|
+
if (typeof content === 'string' && content.trim()) {
|
|
185
|
+
return true;
|
|
186
|
+
}
|
|
187
|
+
// Array content - check for text blocks (not tool_result)
|
|
188
|
+
if (Array.isArray(content)) {
|
|
189
|
+
return content.some(block => typeof block === 'object' && block !== null && block.type === 'text' && 'text' in block);
|
|
190
|
+
}
|
|
191
|
+
return false;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Find the cut index by matching a timestamp to a turn in the JSONL.
|
|
195
|
+
* This handles the discrepancy between DB turn numbers and JSONL turn counts.
|
|
196
|
+
*
|
|
197
|
+
* Strategy: Find the turn whose user message timestamp is closest to the target,
|
|
198
|
+
* then return the cut index (start of the next turn, or end of file).
|
|
199
|
+
*/
|
|
200
|
+
findCutIndexByTimestamp(entries, turnStartIndices, targetTimestamp) {
|
|
201
|
+
const targetMs = new Date(targetTimestamp).getTime();
|
|
202
|
+
// Find the turn with the closest timestamp
|
|
203
|
+
let bestTurnIndex = -1;
|
|
204
|
+
let bestDiff = Infinity;
|
|
205
|
+
for (let i = 0; i < turnStartIndices.length; i++) {
|
|
206
|
+
const entryIndex = turnStartIndices[i];
|
|
207
|
+
const entry = entries[entryIndex];
|
|
208
|
+
if (entry.timestamp) {
|
|
209
|
+
const entryMs = new Date(entry.timestamp).getTime();
|
|
210
|
+
const diff = Math.abs(entryMs - targetMs);
|
|
211
|
+
// Prefer turns that are at or before the target timestamp
|
|
212
|
+
// If timestamp matches within 1 second, consider it a match
|
|
213
|
+
if (diff < bestDiff) {
|
|
214
|
+
bestDiff = diff;
|
|
215
|
+
bestTurnIndex = i;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
// If no match found, fall back to last turn
|
|
220
|
+
if (bestTurnIndex === -1) {
|
|
221
|
+
logger.warn('No timestamp match found, using last turn', { targetTimestamp });
|
|
222
|
+
bestTurnIndex = turnStartIndices.length - 1;
|
|
223
|
+
}
|
|
224
|
+
const turnNumber = bestTurnIndex + 1; // 1-indexed
|
|
225
|
+
// Determine cut index: include this turn and everything before it
|
|
226
|
+
let cutIndex;
|
|
227
|
+
if (bestTurnIndex === turnStartIndices.length - 1) {
|
|
228
|
+
// Last turn - include everything
|
|
229
|
+
cutIndex = entries.length;
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
// Cut before the next turn starts
|
|
233
|
+
cutIndex = turnStartIndices[bestTurnIndex + 1];
|
|
234
|
+
}
|
|
235
|
+
logger.debug('Timestamp match result', {
|
|
236
|
+
targetTimestamp,
|
|
237
|
+
matchedTurnIndex: bestTurnIndex,
|
|
238
|
+
matchedEntryIndex: turnStartIndices[bestTurnIndex],
|
|
239
|
+
timeDiffMs: bestDiff,
|
|
240
|
+
cutIndex,
|
|
241
|
+
});
|
|
242
|
+
return { cutIndex, turnNumber };
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Determine the target project directory for the branch.
|
|
246
|
+
* The CLI uses RESOLVED paths (symlinks followed), so we need to match that.
|
|
247
|
+
*/
|
|
248
|
+
async determineTargetDirectory(entries) {
|
|
249
|
+
// Find the first entry with a cwd
|
|
250
|
+
const entryWithCwd = entries.find(e => e.cwd);
|
|
251
|
+
if (!entryWithCwd?.cwd) {
|
|
252
|
+
throw new Error('Could not determine working directory from session');
|
|
253
|
+
}
|
|
254
|
+
// Resolve symlinks to get the canonical path
|
|
255
|
+
const resolvedCwd = await fs.realpath(entryWithCwd.cwd);
|
|
256
|
+
// Convert to project directory name format
|
|
257
|
+
// /home/jason/claudia -> -home-jason-claudia
|
|
258
|
+
const projectDirName = resolvedCwd.replace(/\//g, '-');
|
|
259
|
+
const targetDir = path.join(this.claudeHomePath, 'projects', projectDirName);
|
|
260
|
+
// Ensure the directory exists
|
|
261
|
+
await fs.mkdir(targetDir, { recursive: true });
|
|
262
|
+
return targetDir;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Find the JSONL file for a session by checking each project folder.
|
|
266
|
+
*/
|
|
267
|
+
async findSessionFile(sessionId) {
|
|
268
|
+
const projectsPath = path.join(this.claudeHomePath, 'projects');
|
|
269
|
+
try {
|
|
270
|
+
const projects = await fs.readdir(projectsPath);
|
|
271
|
+
for (const project of projects) {
|
|
272
|
+
const projectPath = path.join(projectsPath, project);
|
|
273
|
+
const stats = await fs.stat(projectPath);
|
|
274
|
+
if (!stats.isDirectory())
|
|
275
|
+
continue;
|
|
276
|
+
const sessionFile = path.join(projectPath, `${sessionId}.jsonl`);
|
|
277
|
+
try {
|
|
278
|
+
await fs.access(sessionFile);
|
|
279
|
+
return sessionFile;
|
|
280
|
+
}
|
|
281
|
+
catch {
|
|
282
|
+
// File doesn't exist in this project, continue
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
return null;
|
|
286
|
+
}
|
|
287
|
+
catch (error) {
|
|
288
|
+
logger.error('Error searching for session file', error, { sessionId });
|
|
289
|
+
return null;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Get the number of turns in a session.
|
|
294
|
+
* Useful for UI to know valid range for branching.
|
|
295
|
+
*/
|
|
296
|
+
async getTurnCount(sessionId) {
|
|
297
|
+
const sourceFile = await this.findSessionFile(sessionId);
|
|
298
|
+
if (!sourceFile) {
|
|
299
|
+
return 0;
|
|
300
|
+
}
|
|
301
|
+
const content = await fs.readFile(sourceFile, 'utf-8');
|
|
302
|
+
const lines = content.split('\n').filter(line => line.trim());
|
|
303
|
+
const entries = lines.map(line => JSON.parse(line));
|
|
304
|
+
return this.findTurnBoundaries(entries).length;
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Find the UUID of the last message in a specific turn.
|
|
308
|
+
* Used to identify the branch point for UI indicators.
|
|
309
|
+
*
|
|
310
|
+
* @param sessionId - The session to search
|
|
311
|
+
* @param turnNumber - The turn number (1-indexed)
|
|
312
|
+
* @returns The UUID of the last message in that turn, or null if not found
|
|
313
|
+
*/
|
|
314
|
+
async getBranchPointMessageId(sessionId, turnNumber) {
|
|
315
|
+
const sourceFile = await this.findSessionFile(sessionId);
|
|
316
|
+
if (!sourceFile) {
|
|
317
|
+
logger.warn('Session file not found for branch point lookup', { sessionId: sessionId.slice(0, 8), turnNumber });
|
|
318
|
+
return null;
|
|
319
|
+
}
|
|
320
|
+
const content = await fs.readFile(sourceFile, 'utf-8');
|
|
321
|
+
const lines = content.split('\n').filter(line => line.trim());
|
|
322
|
+
const entries = lines.map(line => JSON.parse(line));
|
|
323
|
+
const turnBoundaries = this.findTurnBoundaries(entries);
|
|
324
|
+
if (turnNumber < 1 || turnNumber > turnBoundaries.length) {
|
|
325
|
+
logger.warn('Turn number out of range', { sessionId: sessionId.slice(0, 8), turnNumber, totalTurns: turnBoundaries.length });
|
|
326
|
+
return null;
|
|
327
|
+
}
|
|
328
|
+
// Find the end of the target turn
|
|
329
|
+
let endIndex;
|
|
330
|
+
if (turnNumber === turnBoundaries.length) {
|
|
331
|
+
// Last turn - end is at the last entry
|
|
332
|
+
endIndex = entries.length - 1;
|
|
333
|
+
}
|
|
334
|
+
else {
|
|
335
|
+
// End is just before the next turn starts
|
|
336
|
+
endIndex = turnBoundaries[turnNumber] - 1;
|
|
337
|
+
}
|
|
338
|
+
// Walk backwards from endIndex to find the last displayable message (user or assistant with uuid)
|
|
339
|
+
for (let i = endIndex; i >= 0; i--) {
|
|
340
|
+
const entry = entries[i];
|
|
341
|
+
if ((entry.type === 'user' || entry.type === 'assistant') && entry.uuid) {
|
|
342
|
+
logger.debug('Found branch point message', {
|
|
343
|
+
sessionId: sessionId.slice(0, 8),
|
|
344
|
+
turnNumber,
|
|
345
|
+
messageIndex: i,
|
|
346
|
+
uuid: entry.uuid.slice(0, 8),
|
|
347
|
+
});
|
|
348
|
+
return entry.uuid;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
logger.warn('No displayable message found for turn', { sessionId: sessionId.slice(0, 8), turnNumber });
|
|
352
|
+
return null;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
//# sourceMappingURL=session-branch-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-branch-service.js","sourceRoot":"","sources":["../../../src/services/sessions/session-branch-service.ts"],"names":[],"mappings":"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"}
|