sidekick-shared 0.25.0 → 0.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/README.md +49 -3
  3. package/dist/accountChanges.js +22 -3
  4. package/dist/accountRegistry.d.ts +22 -1
  5. package/dist/accountRegistry.js +37 -14
  6. package/dist/accountStatus.d.ts +9 -1
  7. package/dist/accountStatus.js +3 -3
  8. package/dist/accounts.d.ts +3 -1
  9. package/dist/accounts.js +84 -64
  10. package/dist/aggregation/EventAggregator.d.ts +15 -2
  11. package/dist/aggregation/EventAggregator.js +54 -9
  12. package/dist/aggregation/costProvenance.d.ts +14 -0
  13. package/dist/aggregation/costProvenance.js +35 -0
  14. package/dist/aggregation/snapshot.d.ts +13 -2
  15. package/dist/aggregation/snapshot.js +57 -6
  16. package/dist/aggregation/types.d.ts +30 -1
  17. package/dist/analytics/compactionLedger.js +15 -5
  18. package/dist/analytics/qualityScore.js +2 -1
  19. package/dist/browser.d.ts +11 -1
  20. package/dist/browser.js +29 -1
  21. package/dist/codexProfiles.d.ts +3 -1
  22. package/dist/codexProfiles.js +4 -2
  23. package/dist/codexQuota.d.ts +2 -0
  24. package/dist/codexQuota.js +11 -66
  25. package/dist/failingTools.d.ts +37 -0
  26. package/dist/failingTools.js +70 -0
  27. package/dist/formatters/sessionDump.js +13 -7
  28. package/dist/formatting.d.ts +13 -0
  29. package/dist/formatting.js +35 -0
  30. package/dist/historicalStore.d.ts +47 -0
  31. package/dist/historicalStore.js +312 -0
  32. package/dist/index.d.ts +46 -12
  33. package/dist/index.js +112 -24
  34. package/dist/node.d.ts +19 -0
  35. package/dist/node.js +47 -1
  36. package/dist/observedContextWindows.d.ts +7 -0
  37. package/dist/observedContextWindows.js +17 -2
  38. package/dist/observedSessionCollector.d.ts +3 -8
  39. package/dist/observedSessionCollector.js +10 -27
  40. package/dist/parsers/sessionActivityDetector.d.ts +24 -2
  41. package/dist/parsers/sessionActivityDetector.js +95 -17
  42. package/dist/parsers/sessionPathResolver.d.ts +11 -0
  43. package/dist/parsers/sessionPathResolver.js +13 -10
  44. package/dist/peakHours.d.ts +34 -3
  45. package/dist/peakHours.js +92 -7
  46. package/dist/pricingCatalog.d.ts +7 -0
  47. package/dist/pricingCatalog.js +8 -5
  48. package/dist/providers/claudeCode.js +11 -96
  49. package/dist/providers/codex.d.ts +2 -0
  50. package/dist/providers/codex.js +94 -259
  51. package/dist/providers/detect.d.ts +2 -0
  52. package/dist/providers/detect.js +29 -24
  53. package/dist/providers/factory.d.ts +6 -0
  54. package/dist/providers/openCode.d.ts +2 -0
  55. package/dist/providers/openCode.js +105 -121
  56. package/dist/providers/rolloutWalker.d.ts +53 -0
  57. package/dist/providers/rolloutWalker.js +209 -0
  58. package/dist/providers/types.d.ts +30 -0
  59. package/dist/quota.d.ts +30 -3
  60. package/dist/quota.js +35 -3
  61. package/dist/quotaHistory.d.ts +1 -1
  62. package/dist/quotaHistory.js +36 -35
  63. package/dist/quotaResolver.d.ts +81 -0
  64. package/dist/quotaResolver.js +213 -0
  65. package/dist/quotaSnapshots.d.ts +15 -2
  66. package/dist/quotaSnapshots.js +25 -3
  67. package/dist/quotaThresholds.d.ts +60 -0
  68. package/dist/quotaThresholds.js +90 -0
  69. package/dist/report/htmlReportGenerator.js +10 -4
  70. package/dist/report/sessionReportInputs.d.ts +23 -0
  71. package/dist/report/sessionReportInputs.js +34 -0
  72. package/dist/schemas/index.d.ts +2 -0
  73. package/dist/schemas/index.js +10 -1
  74. package/dist/schemas/quota.d.ts +139 -0
  75. package/dist/schemas/quota.js +17 -2
  76. package/dist/schemas/quotaHistory.d.ts +1 -0
  77. package/dist/schemas/quotaHistory.js +1 -1
  78. package/dist/schemas/sessionEvent.d.ts +6 -0
  79. package/dist/schemas/sessionEvent.js +1 -0
  80. package/dist/schemas/stateFile.d.ts +198 -0
  81. package/dist/schemas/stateFile.js +77 -0
  82. package/dist/schemas/transcript.js +2 -0
  83. package/dist/sessionFingerprint.d.ts +25 -0
  84. package/dist/sessionFingerprint.js +46 -0
  85. package/dist/sessionPreviews.d.ts +7 -1
  86. package/dist/sessionPreviews.js +15 -3
  87. package/dist/sessionStats.d.ts +51 -0
  88. package/dist/sessionStats.js +166 -0
  89. package/dist/stateFile.d.ts +113 -0
  90. package/dist/stateFile.js +160 -0
  91. package/dist/statusline/claudeStatuslinePayload.d.ts +89 -0
  92. package/dist/statusline/claudeStatuslinePayload.js +152 -0
  93. package/dist/statusline/formatter.d.ts +13 -0
  94. package/dist/statusline/formatter.js +48 -6
  95. package/dist/statusline/index.d.ts +10 -2
  96. package/dist/statusline/index.js +19 -1
  97. package/dist/tokenSummary.d.ts +62 -0
  98. package/dist/tokenSummary.js +72 -0
  99. package/dist/transcript.d.ts +5 -0
  100. package/dist/transcript.js +2 -0
  101. package/dist/types/observedSessionV1.d.ts +2 -0
  102. package/dist/types/observedSessionV1.js +75 -18
  103. package/dist/types/sessionEvent.d.ts +2 -0
  104. package/dist/usage/billingBlocks.d.ts +85 -0
  105. package/dist/usage/billingBlocks.js +153 -0
  106. package/dist/usage/importSessionHistory.d.ts +53 -0
  107. package/dist/usage/importSessionHistory.js +88 -0
  108. package/dist/usage/usageEvents.d.ts +92 -0
  109. package/dist/usage/usageEvents.js +322 -0
  110. package/dist/usage/usageReports.d.ts +76 -0
  111. package/dist/usage/usageReports.js +208 -0
  112. package/dist/watchers/factory.d.ts +6 -0
  113. package/dist/watchers/factory.js +30 -25
  114. package/dist/zaiQuotaApi.d.ts +2 -0
  115. package/dist/zaiQuotaApi.js +2 -0
  116. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -3,18 +3,24 @@
3
3
  * Public API for sidekick-shared.
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.atomicWriteFileSync = exports.atomicWriteJsonSync = exports.atomicWriteJson = exports.readClaudeCodePlanFiles = exports.getPlanAnalytics = exports.writePlans = exports.getLatestPlan = exports.readPlans = exports.readLatestHandoff = exports.readHistory = exports.readNotes = exports.readDecisions = exports.readTasks = exports.migrateLegacyProjectStores = exports.resolveProjectIdentity = exports.getProjectSlugRaw = exports.getProjectSlug = exports.encodeWorkspacePath = exports.getGlobalDataPath = exports.getProjectDataPath = exports.setConfigDir = exports.getDefaultConfigDir = exports.getConfigDirOverride = exports.getConfigDir = exports.CONFIG_DIR_ENV_VAR = exports.MAX_PLANS_PER_PROJECT = exports.PLAN_SCHEMA_VERSION = exports.createEmptyDataStore = exports.createEmptyTokenTotals = exports.HISTORICAL_SESSION_RETENTION_LIMIT = exports.HISTORICAL_DATA_SCHEMA_VERSION = exports.STALENESS_THRESHOLDS = exports.IMPORTANCE_DECAY_FACTORS = exports.KNOWLEDGE_NOTE_SCHEMA_VERSION = exports.DECISION_LOG_SCHEMA_VERSION = exports.normalizeTaskStatus = exports.TASK_PERSISTENCE_SCHEMA_VERSION = exports.isAggregateCodexLimit = exports.fileFingerprintParts = exports.fileFingerprint = exports.observedSessionSourceFromProvider = exports.ObservedSessionCollector = exports.readSessionTranscript = exports.listRecentSessions = exports.projectSessionTranscript = exports.estimateSerializedTokens = exports.estimateTextTokens = exports.calculateNormalizedUsageCost = exports.extractNormalizedUsage = exports.normalizeProviderUsage = void 0;
7
- exports.scanSubagentTraces = exports.findAllSessionsWithWorktrees = exports.discoverWorktreeSiblings = exports.resolveWorktreeMainRepo = exports.getAllClaudeProjectFolders = exports.decodeEncodedPath = exports.getMostRecentlyActiveSessionDir = exports.findSubdirectorySessionDirs = exports.findSessionsInDirectory = exports.findAllClaudeSessions = exports.findActiveClaudeSession = exports.discoverSessionDirectory = exports.getClaudeSessionDirectory = exports.encodeClaudeWorkspacePath = exports.refreshSessionActivityState = exports.detectSessionActivity = exports.extractTaskInfo = exports.scanSubagentDir = exports.normalizeCodexToolInput = exports.normalizeCodexToolName = exports.extractPatchFilePaths = exports.CodexRolloutParser = exports.parseDbPartData = exports.parseDbMessageData = exports.convertOpenCodeMessage = exports.detectPlanModeFromText = exports.normalizeToolInput = exports.normalizeToolName = exports.TRUNCATION_PATTERNS = exports.JsonlParser = exports.findCodexRolloutFile = exports.CodexProvider = exports.getOpenCodeDataDir = exports.OpenCodeProvider = exports.ClaudeCodeProvider = exports.getAllDetectedProviders = exports.detectProvider = exports.derivePendingUserRequestV1 = exports.createProviderSessionAdapterV1 = exports.createSessionProviders = exports.SESSION_PROVIDER_IDS = exports.renderHandoffUrlTemplate = exports.addNote = exports.decisionFingerprint = exports.addDecision = exports.completeTask = exports.addTask = exports.withFileLockSync = exports.updateJsonStoreAtomicSync = exports.updateJsonStoreAtomic = void 0;
8
- exports.getRandomPhrase = exports.PHRASE_CATEGORIES = exports.ALL_PHRASES = exports.HIGHLIGHT_CSS = exports.clearHighlightCache = exports.highlightEvent = exports.formatSessionJson = exports.formatSessionMarkdown = exports.formatSessionText = exports.classifyNoise = exports.shouldMergeWithPrevious = exports.classifyFollowEvent = exports.classifyMessage = exports.getSoftNoiseReason = exports.isHardNoiseFollowEvent = exports.isHardNoise = exports.formatToolSummary = exports.formatTokenCount = exports.formatDurationMs = exports.createJsonlTail = exports.toFollowEvents = exports.createWatcher = exports.parseChangelog = exports.extractProposedPlanShared = exports.parsePlanMarkdownShared = exports.PlanExtractor = exports.segmentAssistantTurn = exports.reasoningSummary = exports.isAssistantTurnSubagentTool = exports.extractTurnSubagents = exports.assistantTurnEventsFromSessionEvents = exports.readSessionContextSnapshot = exports.createSessionContextProjector = exports.calculateSessionContextPressure = exports.buildSessionContextSnapshot = exports.composeContext = exports.FilterEngine = exports.searchSessions = exports.CodexDatabase = exports.OpenCodeDatabase = exports.discoverDebugLogs = exports.collapseDuplicates = exports.filterByLevel = exports.parseDebugLog = exports.readSessionPreviewAsync = exports.readSessionPreview = exports.listSessionPreviewsAsync = exports.listSessionPreviews = exports.readCodexHistory = exports.parseMcpToolName = void 0;
9
- exports.switchAccount = exports.spawnAccountLogin = exports.finalizeAccountLoginAsync = exports.finalizeAccountLogin = exports.getAccountLoginStatusAsync = exports.getAccountLoginStatus = exports.beginAccountLogin = exports.isMultiAccountEnabled = exports.resolveActiveClaudeAccount = exports.getActiveAccount = exports.listAccounts = exports.removeAccount = exports.reconcileClaudeAuthState = exports.applyActiveClaudeToLiveHome = exports.resolveActiveClaudeHome = exports.switchToAccount = exports.addCurrentAccount = exports.readActiveClaudeAccount = exports.writeAccountRegistry = exports.readAccountRegistry = exports.ensureDefaultAccounts = exports.readClaudeMaxAccessTokenSync = exports.readClaudeMaxCredentials = exports.writeActiveCredentials = exports.readActiveCredentials = exports.openInBrowser = exports.parseTranscriptFromEvents = exports.parseTranscript = exports.generateHtmlReport = exports.formatCompactionLedger = exports.calculateCompactionLedger = exports.calculateCodeImpact = exports.scoreSessionQuality = exports.calculateQualityTrend = exports.PatternExtractor = exports.HeatmapTracker = exports.FrequencyTracker = exports.readErrorHistory = exports.getTopFailingTools = exports.appendErrorHistory = exports.MAX_ERROR_HISTORY_SESSIONS = exports.ERROR_HISTORY_SCHEMA_VERSION = exports.getSnapshotPath = exports.isSnapshotValid = exports.deleteSnapshot = exports.loadSnapshot = exports.saveSnapshot = exports.SessionMonitor = exports.parseTodoDependencies = exports.EventAggregator = void 0;
10
- exports.fetchQuota = exports.SEVEN_DAY_WINDOW_MS = exports.QUOTA_PROVIDER_IDS = exports.FIVE_HOUR_WINDOW_MS = exports.AutoSwitchController = exports.decideAutoSwitch = exports.DEFAULT_AUTO_SWITCH_CONFIG = exports.removeLauncher = exports.writeLauncher = exports.isShellHookInstalled = exports.uninstallShellHook = exports.installShellHook = exports.setTerminalActiveProfile = exports.removeCodexAccount = exports.switchToCodexAccountAsync = exports.switchToCodexAccount = exports.finalizeCodexAccountAsync = exports.finalizeCodexAccount = exports.prepareCodexAccountAsync = exports.prepareCodexAccount = exports.getCodexExecutionEnv = exports.resolveSidekickCodexHome = exports.resolveActiveCodexAccount = exports.getActiveCodexAccount = exports.listCodexAccounts = exports.getSystemCodexHome = exports.getCodexMonitoringHomes = exports.getCodexProfileHome = exports.getCodexProfilesDir = exports.readClaudeProfileIdentity = exports.isClaudeProfileAuthenticated = exports.claudeKeychainService = exports.claudeKeychainSuffix = exports.getClaudeProfileHome = exports.getClaudeProfilesDir = exports.onAccountsChanged = exports.getActiveAccountStatus = exports.ACCOUNT_PROVIDER_IDS = exports.removeSavedAccountProfile = exports.replaceSavedAccountProfiles = exports.setActiveSavedAccount = exports.upsertSavedAccountProfile = exports.getActiveSavedAccount = exports.listSavedAccountProfiles = exports.writeSavedAccountRegistry = exports.readSavedAccountRegistry = exports.getAccountsDir = exports.resolveClaudeLoginCommand = exports.listAllAccounts = exports.switchAccountAsync = void 0;
11
- exports.RESOLVED_MODEL_CATALOG_SCHEMA_VERSION = exports.resolveModelAlias = exports.registerModelAlias = exports.importResolvedModelCatalog = exports.exportResolvedModelCatalog = exports.MODEL_PROVIDER_IDS = exports.formatCost = exports.sortModelIds = exports.compareModelIds = exports.getModelDisplayInfo = exports.shortModelName = exports.mergeCostSources = exports.calculateCostWithProvenance = exports.calculateCostWithPricing = exports.calculateCost = exports.getModelInfo = exports.resolveModelPricing = exports.getModelPricing = exports.parseModelId = exports.DEFAULT_CONTEXT_WINDOW = exports.resolveModelContextWindow = exports.getModelContextWindowSize = exports.selectStatuslineAccount = exports.formatStatusline = exports.estimateTimeToQuota = exports.BurnRateCalculator = exports.RUNTIME_QUOTA_PROVIDER_IDS = exports.MultiProviderQuotaService = exports.resolveZaiQuota = exports.readZaiCredentials = exports.quotaStateFromZaiQuotaLimitPayload = exports.fetchZaiQuotaFromApi = exports.CodexQuotaWatcher = exports.resolveCodexQuotaFromLocalSources = exports.resolveCodexQuota = exports.readLatestCodexQuotaFromRollouts = exports.quotaFromCodexRateLimits = exports.fetchCodexQuotaFromApi = exports.fetchCodexResetCreditsFromApi = exports.getWorkspaceIdFromPath = exports.pruneQuotaHistory = exports.readQuotaHistoryDailyBuckets = exports.readQuotaHistoryRange = exports.appendQuotaHistorySample = exports.writeQuotaSnapshot = exports.readQuotaSnapshot = exports.QuotaPoller = exports.describeQuotaFailure = exports.withQuotaProjections = exports.projectQuotaWindow = void 0;
12
- exports.accountLoginStatusSchema = exports.beginAccountLoginResultSchema = exports.accountManagerResultSchema = exports.accountProviderIdSchema = exports.activeAccountStatusSchema = exports.activeProviderAccountStatusSchema = exports.quotaHistoryDailyBucketSchema = exports.quotaHistorySampleSchema = exports.quotaHistoryRuntimeProviderSchema = exports.providerQuotaMapSchema = exports.zaiProviderQuotaStateSchema = exports.codexProviderQuotaStateSchema = exports.claudeProviderQuotaStateSchema = exports.providerQuotaStateSchema = exports.runtimeQuotaProviderSchema = exports.quotaFailureDescriptorSchema = exports.peakHoursStateSchema = exports.codexResetCreditsSnapshotSchema = exports.codexResetCreditSchema = exports.quotaSourceSchema = exports.quotaProviderIdSchema = exports.quotaFailureKindSchema = exports.quotaStateSchema = exports.quotaWindowSchema = exports.extractSessionEvents = exports.permissionModeSchema = exports.sessionEventSchema = exports.sessionMessageSchema = exports.messageUsageSchema = exports.ToolCallTracker = exports.extractToolCalls = exports.extractToolCall = exports.extractErrorMessage = exports.categorizeError = exports.gatherAssetsForCwd = exports.codexSessions = exports.readCodexAssets = exports.claudeSessions = exports.readClaudeAssets = exports.extractCommands = exports.extractFilePaths = exports.extractUrls = exports.extractTokenUsage = exports.getObservedContextWindowPath = exports.recordObservedContextWindow = exports.loadObservedContextWindows = exports.LITELLM_CATALOG_URL = exports.normalizeLiteLlmContextWindows = exports.normalizeLiteLlmCatalog = exports.hydratePricingCatalog = void 0;
13
- exports.scopePeakHoursToSessionProvider = exports.isClaudeCodeSessionProvider = exports.fetchPeakHoursStatus = exports.DEFAULT_PEAK_HOURS_TIMEOUT_MS = exports.createPeakHoursNotApplicableState = exports.runDoctor = exports.getSessionDiagnostics = exports.formatHealthReport = exports.fetchOpenAIStatus = exports.fetchProviderStatus = exports.assistantTurnToolRefSchema = exports.assistantTurnToolGroupStepSchema = exports.assistantTurnTimelineItemSchema = exports.assistantTurnSubagentStatusSchema = exports.assistantTurnSubagentSchema = exports.assistantTurnReasoningTimelineItemSchema = exports.assistantTurnProjectionSchema = exports.assistantTurnProcessStepSchema = exports.assistantTurnProcessSchema = exports.assistantTurnNarrationStepSchema = exports.assistantTurnEventTypeSchema = exports.assistantTurnEventSchema = exports.listAllAccountsResultSchema = exports.savedAccountProfileSchema = exports.accountEntrySchema = void 0;
6
+ exports.isAggregateCodexLimit = exports.fileFingerprintParts = exports.fileFingerprint = exports.observedSessionSourceFromProvider = exports.ObservedSessionCollector = exports.weekKey = exports.usageBucketKey = exports.summarizeUsageRows = exports.bucketUsage = exports.importSessionHistory = exports.ACTIVE_SESSION_MTIME_THRESHOLD_MS = exports.sessionSummaryFromStats = exports.removeSessionSummary = exports.markFileImported = exports.isFileImported = exports.applySessionSummary = exports.pruneUsageCache = exports.getUsageCacheDir = exports.collectUsageEvents = exports.USAGE_CACHE_VERSION = exports.MAX_USAGE_CACHE_FILES = exports.findActiveBillingBlock = exports.computeBillingBlocks = exports.BILLING_BLOCK_DURATION_MS = exports.writeStateFile = exports.readStateFile = exports.quotaToStateFile = exports.getStateFilePath = exports.billingBlockToStateFile = exports.STATE_FILE_SCHEMA_VERSION = exports.STATE_FILE_NAME = exports.sessionFingerprintParts = exports.fingerprintString = exports.readSessionReportInputs = exports.readSessionFileStats = exports.providerContextSizeFn = exports.firstUserPrompt = exports.computeSessionFileStats = exports.readSessionTranscript = exports.listRecentSessions = exports.projectSessionTranscript = exports.estimateSerializedTokens = exports.estimateTextTokens = exports.TOKEN_TOTAL_LABEL = exports.TOKEN_CONTEXT_LABEL = exports.sumTokenTotals = exports.summarizeTokens = exports.calculateNormalizedUsageCost = exports.extractNormalizedUsage = exports.normalizeProviderUsage = void 0;
7
+ exports.derivePendingUserRequestV1 = exports.createProviderSessionAdapterV1 = exports.createSessionProviders = exports.SESSION_PROVIDER_IDS = exports.renderHandoffUrlTemplate = exports.addNote = exports.decisionFingerprint = exports.addDecision = exports.completeTask = exports.addTask = exports.withFileLockSync = exports.updateJsonStoreAtomicSync = exports.updateJsonStoreAtomic = exports.atomicWriteFileSync = exports.atomicWriteJsonSync = exports.atomicWriteJson = exports.readClaudeCodePlanFiles = exports.getPlanAnalytics = exports.writePlans = exports.getLatestPlan = exports.readPlans = exports.readLatestHandoff = exports.readHistory = exports.readNotes = exports.readDecisions = exports.readTasks = exports.migrateLegacyProjectStores = exports.resolveProjectIdentity = exports.getProjectSlugRaw = exports.getProjectSlug = exports.encodeWorkspacePath = exports.getGlobalDataPath = exports.getProjectDataPath = exports.setConfigDir = exports.getDefaultConfigDir = exports.getConfigDirOverride = exports.getConfigDir = exports.CONFIG_DIR_ENV_VAR = exports.MAX_PLANS_PER_PROJECT = exports.PLAN_SCHEMA_VERSION = exports.createEmptyDataStore = exports.createEmptyTokenTotals = exports.HISTORICAL_SESSION_RETENTION_LIMIT = exports.HISTORICAL_DATA_SCHEMA_VERSION = exports.STALENESS_THRESHOLDS = exports.IMPORTANCE_DECAY_FACTORS = exports.KNOWLEDGE_NOTE_SCHEMA_VERSION = exports.DECISION_LOG_SCHEMA_VERSION = exports.normalizeTaskStatus = exports.TASK_PERSISTENCE_SCHEMA_VERSION = void 0;
8
+ exports.readSessionPreview = exports.listSessionPreviewsAsync = exports.listSessionPreviews = exports.readCodexHistory = exports.parseMcpToolName = exports.scanSubagentTraces = exports.findAllSessionsWithWorktrees = exports.discoverWorktreeSiblings = exports.resolveWorktreeMainRepo = exports.getAllClaudeProjectFolders = exports.decodeEncodedPath = exports.getMostRecentlyActiveSessionDir = exports.findSubdirectorySessionDirs = exports.findSessionFilesWithStats = exports.findSessionsInDirectory = exports.findAllClaudeSessions = exports.findActiveClaudeSession = exports.discoverSessionDirectory = exports.getClaudeSessionDirectory = exports.encodeClaudeWorkspacePath = exports.SESSION_ACTIVITY_STALENESS_MS = exports.SESSION_ACTIVITY_GRACE_PERIOD_MS = exports.refreshSessionActivityState = exports.detectSessionActivity = exports.classifySessionActivity = exports.extractTaskInfo = exports.scanSubagentDir = exports.normalizeCodexToolInput = exports.normalizeCodexToolName = exports.extractPatchFilePaths = exports.CodexRolloutParser = exports.parseDbPartData = exports.parseDbMessageData = exports.convertOpenCodeMessage = exports.detectPlanModeFromText = exports.normalizeToolInput = exports.normalizeToolName = exports.TRUNCATION_PATTERNS = exports.JsonlParser = exports.walkRolloutFilesAsync = exports.walkRolloutFiles = exports.findCodexRolloutFile = exports.CodexProvider = exports.getOpenCodeDataDir = exports.OpenCodeProvider = exports.ClaudeCodeProvider = exports.getAllDetectedProviders = exports.detectProvider = exports._resetProviderDetectionCache = exports.getObservedActivityReason = void 0;
9
+ exports.EventAggregator = exports.getRandomPhrase = exports.PHRASE_CATEGORIES = exports.ALL_PHRASES = exports.HIGHLIGHT_CSS = exports.clearHighlightCache = exports.highlightEvent = exports.formatSessionJson = exports.formatSessionMarkdown = exports.formatSessionText = exports.classifyNoise = exports.shouldMergeWithPrevious = exports.classifyFollowEvent = exports.classifyMessage = exports.getSoftNoiseReason = exports.isHardNoiseFollowEvent = exports.isHardNoise = exports.formatToolSummary = exports.parseLocalDateKey = exports.formatTokenCount = exports.formatLocalDateKey = exports.formatDurationMs = exports.addLocalDays = exports.createJsonlTail = exports.toFollowEvents = exports.resolveSessionPath = exports.createWatcher = exports.parseChangelog = exports.extractProposedPlanShared = exports.parsePlanMarkdownShared = exports.PlanExtractor = exports.segmentAssistantTurn = exports.reasoningSummary = exports.isAssistantTurnSubagentTool = exports.extractTurnSubagents = exports.assistantTurnEventsFromSessionEvents = exports.readSessionContextSnapshot = exports.createSessionContextProjector = exports.calculateSessionContextPressure = exports.buildSessionContextSnapshot = exports.composeContext = exports.FilterEngine = exports.searchSessions = exports.CodexDatabase = exports.OpenCodeDatabase = exports.discoverDebugLogs = exports.collapseDuplicates = exports.filterByLevel = exports.parseDebugLog = exports.readSessionPreviewAsync = void 0;
10
+ exports.finalizeAccountLogin = exports.getAccountLoginStatusAsync = exports.getAccountLoginStatus = exports.beginAccountLogin = exports.isMultiAccountEnabled = exports.resolveActiveClaudeAccount = exports.getActiveAccount = exports.listAccounts = exports.removeAccount = exports.reconcileClaudeAuthState = exports.applyActiveClaudeToLiveHome = exports.resolveActiveClaudeHome = exports.switchToAccount = exports.addCurrentAccount = exports.readActiveClaudeAccount = exports.writeAccountRegistry = exports.readAccountRegistry = exports.ensureDefaultAccounts = exports.readClaudeMaxAccessTokenSync = exports.readClaudeMaxCredentials = exports.writeActiveCredentials = exports.readActiveCredentials = exports.openInBrowser = exports.parseTranscriptFromEvents = exports.parseTranscript = exports.generateHtmlReport = exports.formatCompactionLedger = exports.calculateCompactionLedger = exports.describeCostProvenance = exports.classifyCostProvenance = exports.calculateCodeImpact = exports.scoreSessionQuality = exports.calculateQualityTrend = exports.PatternExtractor = exports.HeatmapTracker = exports.FrequencyTracker = exports.readErrorHistory = exports.getTopFailingTools = exports.appendErrorHistory = exports.MAX_ERROR_HISTORY_SESSIONS = exports.ERROR_HISTORY_SCHEMA_VERSION = exports.getSnapshotPath = exports.MAX_SNAPSHOT_FILES = exports.pruneSnapshots = exports.isSnapshotValid = exports.deleteSnapshot = exports.loadSnapshot = exports.saveSnapshot = exports.SessionMonitor = exports.parseTodoDependencies = void 0;
11
+ exports.FIVE_HOUR_WINDOW_MS = exports.AutoSwitchController = exports.decideAutoSwitch = exports.DEFAULT_AUTO_SWITCH_CONFIG = exports.removeLauncher = exports.writeLauncher = exports.isShellHookInstalled = exports.uninstallShellHook = exports.installShellHook = exports.setTerminalActiveProfile = exports.removeCodexAccount = exports.switchToCodexAccountAsync = exports.switchToCodexAccount = exports.finalizeCodexAccountAsync = exports.finalizeCodexAccount = exports.prepareCodexAccountAsync = exports.prepareCodexAccount = exports.getCodexExecutionEnv = exports.resolveSidekickCodexHome = exports.resolveActiveCodexAccount = exports.getActiveCodexAccount = exports.listCodexAccounts = exports.getSystemCodexHome = exports.getCodexMonitoringHomes = exports.getCodexProfileHome = exports.getCodexProfilesDir = exports.readClaudeProfileIdentity = exports.isClaudeProfileAuthenticated = exports.claudeKeychainService = exports.claudeKeychainSuffix = exports.getClaudeProfileHome = exports.getClaudeProfilesDir = exports.onAccountsChanged = exports.getActiveAccountStatus = exports.ACCOUNT_PROVIDER_IDS = exports.removeSavedAccountProfile = exports.replaceSavedAccountProfiles = exports.setActiveSavedAccount = exports.upsertSavedAccountProfile = exports.getActiveSavedAccount = exports.listSavedAccountProfiles = exports.writeSavedAccountRegistry = exports.readSavedAccountRegistry = exports.getAccountsDir = exports.resolveClaudeLoginCommand = exports.listAllAccounts = exports.switchAccountAsync = exports.switchAccount = exports.spawnAccountLogin = exports.finalizeAccountLoginAsync = void 0;
12
+ exports.calculateCostWithPricing = exports.calculateCost = exports.getModelInfo = exports.resolveModelPricing = exports.getModelPricing = exports.parseModelId = exports.DEFAULT_CONTEXT_WINDOW = exports.resolveModelContextWindow = exports.getModelContextWindowSize = exports.selectStatuslineAccount = exports.formatStatusline = exports.estimateTimeToQuota = exports.BurnRateCalculator = exports.RUNTIME_QUOTA_PROVIDER_IDS = exports.MultiProviderQuotaService = exports.resolveZaiQuota = exports.readZaiCredentials = exports.quotaStateFromZaiQuotaLimitPayload = exports.fetchZaiQuotaFromApi = exports.CodexQuotaWatcher = exports.resolveCodexQuotaFromLocalSources = exports.resolveCodexQuota = exports.readLatestCodexQuotaFromRollouts = exports.quotaFromCodexRateLimits = exports.fetchCodexQuotaFromApi = exports.fetchCodexResetCreditsFromApi = exports.getWorkspaceIdFromPath = exports.pruneQuotaHistory = exports.readQuotaHistoryDailyBuckets = exports.readQuotaHistoryRange = exports.appendQuotaHistorySample = exports.quotaFromStatuslinePayload = exports.parseClaudeStatuslinePayload = exports.evaluateQuotaThresholds = exports.describeQuotaThresholdAlert = exports.DEFAULT_QUOTA_THRESHOLDS = exports.QUOTA_FRESH_MAX_AGE_MS = exports.QUOTA_AGING_MAX_AGE_MS = exports.formatQuotaAge = exports.classifyQuotaFreshness = exports.resolveQuota = exports.writeQuotaSnapshot = exports.readQuotaSnapshot = exports.QuotaPoller = exports.describeQuotaFailure = exports.withQuotaProjections = exports.projectQuotaWindow = exports.fetchQuota = exports.SEVEN_DAY_WINDOW_MS = exports.QUOTA_PROVIDER_IDS = void 0;
13
+ exports.providerQuotaStateSchema = exports.runtimeQuotaProviderSchema = exports.quotaFailureDescriptorSchema = exports.peakHoursStateSchema = exports.codexResetCreditsSnapshotSchema = exports.codexResetCreditSchema = exports.quotaSourceSchema = exports.quotaProviderIdSchema = exports.quotaFailureKindSchema = exports.quotaStateSchema = exports.quotaWindowSchema = exports.extractSessionEvents = exports.permissionModeSchema = exports.sessionEventSchema = exports.sessionMessageSchema = exports.messageUsageSchema = exports.ToolCallTracker = exports.extractToolCalls = exports.extractToolCall = exports.extractErrorMessage = exports.categorizeError = exports.gatherAssetsForCwd = exports.codexSessions = exports.readCodexAssets = exports.claudeSessions = exports.readClaudeAssets = exports.extractCommands = exports.extractFilePaths = exports.extractUrls = exports.extractTokenUsage = exports.getObservedContextWindowPath = exports.recordObservedContextWindow = exports.loadObservedContextWindows = exports.LITELLM_CATALOG_URL = exports.normalizeLiteLlmContextWindows = exports.normalizeLiteLlmCatalog = exports.hydratePricingCatalog = exports.RESOLVED_MODEL_CATALOG_SCHEMA_VERSION = exports.resolveModelAlias = exports.registerModelAlias = exports.importResolvedModelCatalog = exports.exportResolvedModelCatalog = exports.MODEL_PROVIDER_IDS = exports.formatCost = exports.sortModelIds = exports.compareModelIds = exports.getModelDisplayInfo = exports.shortModelName = exports.mergeCostSources = exports.calculateCostWithProvenance = void 0;
14
+ exports.mergeFailingToolWindows = exports.failingToolTrend = exports.FAILING_TOOL_TREND_ARROWS = exports.scopePeakHoursToSessionProvider = exports.PEAK_HOURS_DESCRIPTION = exports.PEAK_HOURS_CACHE_MS = exports.isClaudeCodeSessionProvider = exports.getScheduledPeakHoursState = exports.fetchPeakHoursStatus = exports.DEFAULT_PEAK_HOURS_TIMEOUT_MS = exports.createPeakHoursNotApplicableState = exports._resetPeakHoursCache = exports.runDoctor = exports.getSessionDiagnostics = exports.formatHealthReport = exports.fetchOpenAIStatus = exports.fetchProviderStatus = exports.assistantTurnToolRefSchema = exports.assistantTurnToolGroupStepSchema = exports.assistantTurnTimelineItemSchema = exports.assistantTurnSubagentStatusSchema = exports.assistantTurnSubagentSchema = exports.assistantTurnReasoningTimelineItemSchema = exports.assistantTurnProjectionSchema = exports.assistantTurnProcessStepSchema = exports.assistantTurnProcessSchema = exports.assistantTurnNarrationStepSchema = exports.assistantTurnEventTypeSchema = exports.assistantTurnEventSchema = exports.listAllAccountsResultSchema = exports.savedAccountProfileSchema = exports.accountEntrySchema = exports.accountLoginStatusSchema = exports.beginAccountLoginResultSchema = exports.accountManagerResultSchema = exports.accountProviderIdSchema = exports.activeAccountStatusSchema = exports.activeProviderAccountStatusSchema = exports.quotaHistoryDailyBucketSchema = exports.quotaHistorySampleSchema = exports.quotaHistoryRuntimeProviderSchema = exports.providerQuotaMapSchema = exports.zaiProviderQuotaStateSchema = exports.codexProviderQuotaStateSchema = exports.claudeProviderQuotaStateSchema = void 0;
14
15
  var usageNormalization_1 = require("./usageNormalization");
15
16
  Object.defineProperty(exports, "normalizeProviderUsage", { enumerable: true, get: function () { return usageNormalization_1.normalizeProviderUsage; } });
16
17
  Object.defineProperty(exports, "extractNormalizedUsage", { enumerable: true, get: function () { return usageNormalization_1.extractNormalizedUsage; } });
17
18
  Object.defineProperty(exports, "calculateNormalizedUsageCost", { enumerable: true, get: function () { return usageNormalization_1.calculateNormalizedUsageCost; } });
19
+ var tokenSummary_1 = require("./tokenSummary");
20
+ Object.defineProperty(exports, "summarizeTokens", { enumerable: true, get: function () { return tokenSummary_1.summarizeTokens; } });
21
+ Object.defineProperty(exports, "sumTokenTotals", { enumerable: true, get: function () { return tokenSummary_1.sumTokenTotals; } });
22
+ Object.defineProperty(exports, "TOKEN_CONTEXT_LABEL", { enumerable: true, get: function () { return tokenSummary_1.TOKEN_CONTEXT_LABEL; } });
23
+ Object.defineProperty(exports, "TOKEN_TOTAL_LABEL", { enumerable: true, get: function () { return tokenSummary_1.TOKEN_TOTAL_LABEL; } });
18
24
  var tokenEstimation_1 = require("./tokenEstimation");
19
25
  Object.defineProperty(exports, "estimateTextTokens", { enumerable: true, get: function () { return tokenEstimation_1.estimateTextTokens; } });
20
26
  Object.defineProperty(exports, "estimateSerializedTokens", { enumerable: true, get: function () { return tokenEstimation_1.estimateSerializedTokens; } });
@@ -23,6 +29,48 @@ Object.defineProperty(exports, "projectSessionTranscript", { enumerable: true, g
23
29
  var sessionTranscripts_1 = require("./sessionTranscripts");
24
30
  Object.defineProperty(exports, "listRecentSessions", { enumerable: true, get: function () { return sessionTranscripts_1.listRecentSessions; } });
25
31
  Object.defineProperty(exports, "readSessionTranscript", { enumerable: true, get: function () { return sessionTranscripts_1.readSessionTranscript; } });
32
+ var sessionStats_1 = require("./sessionStats");
33
+ Object.defineProperty(exports, "computeSessionFileStats", { enumerable: true, get: function () { return sessionStats_1.computeSessionFileStats; } });
34
+ Object.defineProperty(exports, "firstUserPrompt", { enumerable: true, get: function () { return sessionStats_1.firstUserPrompt; } });
35
+ Object.defineProperty(exports, "providerContextSizeFn", { enumerable: true, get: function () { return sessionStats_1.providerContextSizeFn; } });
36
+ Object.defineProperty(exports, "readSessionFileStats", { enumerable: true, get: function () { return sessionStats_1.readSessionFileStats; } });
37
+ var sessionReportInputs_1 = require("./report/sessionReportInputs");
38
+ Object.defineProperty(exports, "readSessionReportInputs", { enumerable: true, get: function () { return sessionReportInputs_1.readSessionReportInputs; } });
39
+ var sessionFingerprint_1 = require("./sessionFingerprint");
40
+ Object.defineProperty(exports, "fingerprintString", { enumerable: true, get: function () { return sessionFingerprint_1.fingerprintString; } });
41
+ Object.defineProperty(exports, "sessionFingerprintParts", { enumerable: true, get: function () { return sessionFingerprint_1.sessionFingerprintParts; } });
42
+ var stateFile_1 = require("./stateFile");
43
+ Object.defineProperty(exports, "STATE_FILE_NAME", { enumerable: true, get: function () { return stateFile_1.STATE_FILE_NAME; } });
44
+ Object.defineProperty(exports, "STATE_FILE_SCHEMA_VERSION", { enumerable: true, get: function () { return stateFile_1.STATE_FILE_SCHEMA_VERSION; } });
45
+ Object.defineProperty(exports, "billingBlockToStateFile", { enumerable: true, get: function () { return stateFile_1.billingBlockToStateFile; } });
46
+ Object.defineProperty(exports, "getStateFilePath", { enumerable: true, get: function () { return stateFile_1.getStateFilePath; } });
47
+ Object.defineProperty(exports, "quotaToStateFile", { enumerable: true, get: function () { return stateFile_1.quotaToStateFile; } });
48
+ Object.defineProperty(exports, "readStateFile", { enumerable: true, get: function () { return stateFile_1.readStateFile; } });
49
+ Object.defineProperty(exports, "writeStateFile", { enumerable: true, get: function () { return stateFile_1.writeStateFile; } });
50
+ var billingBlocks_1 = require("./usage/billingBlocks");
51
+ Object.defineProperty(exports, "BILLING_BLOCK_DURATION_MS", { enumerable: true, get: function () { return billingBlocks_1.BILLING_BLOCK_DURATION_MS; } });
52
+ Object.defineProperty(exports, "computeBillingBlocks", { enumerable: true, get: function () { return billingBlocks_1.computeBillingBlocks; } });
53
+ Object.defineProperty(exports, "findActiveBillingBlock", { enumerable: true, get: function () { return billingBlocks_1.findActiveBillingBlock; } });
54
+ var usageEvents_1 = require("./usage/usageEvents");
55
+ Object.defineProperty(exports, "MAX_USAGE_CACHE_FILES", { enumerable: true, get: function () { return usageEvents_1.MAX_USAGE_CACHE_FILES; } });
56
+ Object.defineProperty(exports, "USAGE_CACHE_VERSION", { enumerable: true, get: function () { return usageEvents_1.USAGE_CACHE_VERSION; } });
57
+ Object.defineProperty(exports, "collectUsageEvents", { enumerable: true, get: function () { return usageEvents_1.collectUsageEvents; } });
58
+ Object.defineProperty(exports, "getUsageCacheDir", { enumerable: true, get: function () { return usageEvents_1.getUsageCacheDir; } });
59
+ Object.defineProperty(exports, "pruneUsageCache", { enumerable: true, get: function () { return usageEvents_1.pruneUsageCache; } });
60
+ var historicalStore_1 = require("./historicalStore");
61
+ Object.defineProperty(exports, "applySessionSummary", { enumerable: true, get: function () { return historicalStore_1.applySessionSummary; } });
62
+ Object.defineProperty(exports, "isFileImported", { enumerable: true, get: function () { return historicalStore_1.isFileImported; } });
63
+ Object.defineProperty(exports, "markFileImported", { enumerable: true, get: function () { return historicalStore_1.markFileImported; } });
64
+ Object.defineProperty(exports, "removeSessionSummary", { enumerable: true, get: function () { return historicalStore_1.removeSessionSummary; } });
65
+ Object.defineProperty(exports, "sessionSummaryFromStats", { enumerable: true, get: function () { return historicalStore_1.sessionSummaryFromStats; } });
66
+ var importSessionHistory_1 = require("./usage/importSessionHistory");
67
+ Object.defineProperty(exports, "ACTIVE_SESSION_MTIME_THRESHOLD_MS", { enumerable: true, get: function () { return importSessionHistory_1.ACTIVE_SESSION_MTIME_THRESHOLD_MS; } });
68
+ Object.defineProperty(exports, "importSessionHistory", { enumerable: true, get: function () { return importSessionHistory_1.importSessionHistory; } });
69
+ var usageReports_1 = require("./usage/usageReports");
70
+ Object.defineProperty(exports, "bucketUsage", { enumerable: true, get: function () { return usageReports_1.bucketUsage; } });
71
+ Object.defineProperty(exports, "summarizeUsageRows", { enumerable: true, get: function () { return usageReports_1.summarizeUsageRows; } });
72
+ Object.defineProperty(exports, "usageBucketKey", { enumerable: true, get: function () { return usageReports_1.usageBucketKey; } });
73
+ Object.defineProperty(exports, "weekKey", { enumerable: true, get: function () { return usageReports_1.weekKey; } });
26
74
  var observedSessionCollector_1 = require("./observedSessionCollector");
27
75
  Object.defineProperty(exports, "ObservedSessionCollector", { enumerable: true, get: function () { return observedSessionCollector_1.ObservedSessionCollector; } });
28
76
  Object.defineProperty(exports, "observedSessionSourceFromProvider", { enumerable: true, get: function () { return observedSessionCollector_1.observedSessionSourceFromProvider; } });
@@ -104,7 +152,9 @@ Object.defineProperty(exports, "createSessionProviders", { enumerable: true, get
104
152
  var observedSessionV1_1 = require("./types/observedSessionV1");
105
153
  Object.defineProperty(exports, "createProviderSessionAdapterV1", { enumerable: true, get: function () { return observedSessionV1_1.createProviderSessionAdapterV1; } });
106
154
  Object.defineProperty(exports, "derivePendingUserRequestV1", { enumerable: true, get: function () { return observedSessionV1_1.derivePendingUserRequestV1; } });
155
+ Object.defineProperty(exports, "getObservedActivityReason", { enumerable: true, get: function () { return observedSessionV1_1.getObservedActivityReason; } });
107
156
  var detect_1 = require("./providers/detect");
157
+ Object.defineProperty(exports, "_resetProviderDetectionCache", { enumerable: true, get: function () { return detect_1._resetProviderDetectionCache; } });
108
158
  Object.defineProperty(exports, "detectProvider", { enumerable: true, get: function () { return detect_1.detectProvider; } });
109
159
  Object.defineProperty(exports, "getAllDetectedProviders", { enumerable: true, get: function () { return detect_1.getAllDetectedProviders; } });
110
160
  var claudeCode_1 = require("./providers/claudeCode");
@@ -115,6 +165,9 @@ Object.defineProperty(exports, "getOpenCodeDataDir", { enumerable: true, get: fu
115
165
  var codex_2 = require("./providers/codex");
116
166
  Object.defineProperty(exports, "CodexProvider", { enumerable: true, get: function () { return codex_2.CodexProvider; } });
117
167
  Object.defineProperty(exports, "findCodexRolloutFile", { enumerable: true, get: function () { return codex_2.findCodexRolloutFile; } });
168
+ var rolloutWalker_1 = require("./providers/rolloutWalker");
169
+ Object.defineProperty(exports, "walkRolloutFiles", { enumerable: true, get: function () { return rolloutWalker_1.walkRolloutFiles; } });
170
+ Object.defineProperty(exports, "walkRolloutFilesAsync", { enumerable: true, get: function () { return rolloutWalker_1.walkRolloutFilesAsync; } });
118
171
  // Parsers — JSONL
119
172
  var jsonl_1 = require("./parsers/jsonl");
120
173
  Object.defineProperty(exports, "JsonlParser", { enumerable: true, get: function () { return jsonl_1.JsonlParser; } });
@@ -139,8 +192,11 @@ Object.defineProperty(exports, "scanSubagentDir", { enumerable: true, get: funct
139
192
  Object.defineProperty(exports, "extractTaskInfo", { enumerable: true, get: function () { return subagentScanner_1.extractTaskInfo; } });
140
193
  // Parsers — Session activity detection
141
194
  var sessionActivityDetector_1 = require("./parsers/sessionActivityDetector");
195
+ Object.defineProperty(exports, "classifySessionActivity", { enumerable: true, get: function () { return sessionActivityDetector_1.classifySessionActivity; } });
142
196
  Object.defineProperty(exports, "detectSessionActivity", { enumerable: true, get: function () { return sessionActivityDetector_1.detectSessionActivity; } });
143
197
  Object.defineProperty(exports, "refreshSessionActivityState", { enumerable: true, get: function () { return sessionActivityDetector_1.refreshSessionActivityState; } });
198
+ Object.defineProperty(exports, "SESSION_ACTIVITY_GRACE_PERIOD_MS", { enumerable: true, get: function () { return sessionActivityDetector_1.SESSION_ACTIVITY_GRACE_PERIOD_MS; } });
199
+ Object.defineProperty(exports, "SESSION_ACTIVITY_STALENESS_MS", { enumerable: true, get: function () { return sessionActivityDetector_1.SESSION_ACTIVITY_STALENESS_MS; } });
144
200
  // Parsers — Session path resolution (Claude Code)
145
201
  var sessionPathResolver_1 = require("./parsers/sessionPathResolver");
146
202
  Object.defineProperty(exports, "encodeClaudeWorkspacePath", { enumerable: true, get: function () { return sessionPathResolver_1.encodeWorkspacePath; } });
@@ -149,6 +205,7 @@ Object.defineProperty(exports, "discoverSessionDirectory", { enumerable: true, g
149
205
  Object.defineProperty(exports, "findActiveClaudeSession", { enumerable: true, get: function () { return sessionPathResolver_1.findActiveSession; } });
150
206
  Object.defineProperty(exports, "findAllClaudeSessions", { enumerable: true, get: function () { return sessionPathResolver_1.findAllSessions; } });
151
207
  Object.defineProperty(exports, "findSessionsInDirectory", { enumerable: true, get: function () { return sessionPathResolver_1.findSessionsInDirectory; } });
208
+ Object.defineProperty(exports, "findSessionFilesWithStats", { enumerable: true, get: function () { return sessionPathResolver_1.findSessionFilesWithStats; } });
152
209
  Object.defineProperty(exports, "findSubdirectorySessionDirs", { enumerable: true, get: function () { return sessionPathResolver_1.findSubdirectorySessionDirs; } });
153
210
  Object.defineProperty(exports, "getMostRecentlyActiveSessionDir", { enumerable: true, get: function () { return sessionPathResolver_1.getMostRecentlyActiveSessionDir; } });
154
211
  Object.defineProperty(exports, "decodeEncodedPath", { enumerable: true, get: function () { return sessionPathResolver_1.decodeEncodedPath; } });
@@ -212,14 +269,18 @@ var changelogParser_1 = require("./parsers/changelogParser");
212
269
  Object.defineProperty(exports, "parseChangelog", { enumerable: true, get: function () { return changelogParser_1.parseChangelog; } });
213
270
  var factory_2 = require("./watchers/factory");
214
271
  Object.defineProperty(exports, "createWatcher", { enumerable: true, get: function () { return factory_2.createWatcher; } });
272
+ Object.defineProperty(exports, "resolveSessionPath", { enumerable: true, get: function () { return factory_2.resolveSessionPath; } });
215
273
  var eventBridge_1 = require("./watchers/eventBridge");
216
274
  Object.defineProperty(exports, "toFollowEvents", { enumerable: true, get: function () { return eventBridge_1.toFollowEvents; } });
217
275
  var jsonlTail_1 = require("./watchers/jsonlTail");
218
276
  Object.defineProperty(exports, "createJsonlTail", { enumerable: true, get: function () { return jsonlTail_1.createJsonlTail; } });
219
277
  // Formatters
220
278
  var formatting_1 = require("./formatting");
279
+ Object.defineProperty(exports, "addLocalDays", { enumerable: true, get: function () { return formatting_1.addLocalDays; } });
221
280
  Object.defineProperty(exports, "formatDurationMs", { enumerable: true, get: function () { return formatting_1.formatDurationMs; } });
281
+ Object.defineProperty(exports, "formatLocalDateKey", { enumerable: true, get: function () { return formatting_1.formatLocalDateKey; } });
222
282
  Object.defineProperty(exports, "formatTokenCount", { enumerable: true, get: function () { return formatting_1.formatTokenCount; } });
283
+ Object.defineProperty(exports, "parseLocalDateKey", { enumerable: true, get: function () { return formatting_1.parseLocalDateKey; } });
223
284
  var toolSummary_1 = require("./formatters/toolSummary");
224
285
  Object.defineProperty(exports, "formatToolSummary", { enumerable: true, get: function () { return toolSummary_1.formatToolSummary; } });
225
286
  var noiseClassifier_1 = require("./formatters/noiseClassifier");
@@ -254,6 +315,8 @@ Object.defineProperty(exports, "saveSnapshot", { enumerable: true, get: function
254
315
  Object.defineProperty(exports, "loadSnapshot", { enumerable: true, get: function () { return snapshot_1.loadSnapshot; } });
255
316
  Object.defineProperty(exports, "deleteSnapshot", { enumerable: true, get: function () { return snapshot_1.deleteSnapshot; } });
256
317
  Object.defineProperty(exports, "isSnapshotValid", { enumerable: true, get: function () { return snapshot_1.isSnapshotValid; } });
318
+ Object.defineProperty(exports, "pruneSnapshots", { enumerable: true, get: function () { return snapshot_1.pruneSnapshots; } });
319
+ Object.defineProperty(exports, "MAX_SNAPSHOT_FILES", { enumerable: true, get: function () { return snapshot_1.MAX_SNAPSHOT_FILES; } });
257
320
  Object.defineProperty(exports, "getSnapshotPath", { enumerable: true, get: function () { return snapshot_1.getSnapshotPath; } });
258
321
  var errorHistory_1 = require("./errorHistory");
259
322
  Object.defineProperty(exports, "ERROR_HISTORY_SCHEMA_VERSION", { enumerable: true, get: function () { return errorHistory_1.ERROR_HISTORY_SCHEMA_VERSION; } });
@@ -273,6 +336,9 @@ Object.defineProperty(exports, "calculateQualityTrend", { enumerable: true, get:
273
336
  Object.defineProperty(exports, "scoreSessionQuality", { enumerable: true, get: function () { return qualityScore_1.scoreSessionQuality; } });
274
337
  var codeImpact_1 = require("./analytics/codeImpact");
275
338
  Object.defineProperty(exports, "calculateCodeImpact", { enumerable: true, get: function () { return codeImpact_1.calculateCodeImpact; } });
339
+ var costProvenance_1 = require("./aggregation/costProvenance");
340
+ Object.defineProperty(exports, "classifyCostProvenance", { enumerable: true, get: function () { return costProvenance_1.classifyCostProvenance; } });
341
+ Object.defineProperty(exports, "describeCostProvenance", { enumerable: true, get: function () { return costProvenance_1.describeCostProvenance; } });
276
342
  var compactionLedger_1 = require("./analytics/compactionLedger");
277
343
  Object.defineProperty(exports, "calculateCompactionLedger", { enumerable: true, get: function () { return compactionLedger_1.calculateCompactionLedger; } });
278
344
  Object.defineProperty(exports, "formatCompactionLedger", { enumerable: true, get: function () { return compactionLedger_1.formatCompactionLedger; } });
@@ -384,6 +450,20 @@ Object.defineProperty(exports, "QuotaPoller", { enumerable: true, get: function
384
450
  var quotaSnapshots_1 = require("./quotaSnapshots");
385
451
  Object.defineProperty(exports, "readQuotaSnapshot", { enumerable: true, get: function () { return quotaSnapshots_1.readQuotaSnapshot; } });
386
452
  Object.defineProperty(exports, "writeQuotaSnapshot", { enumerable: true, get: function () { return quotaSnapshots_1.writeQuotaSnapshot; } });
453
+ var quotaResolver_1 = require("./quotaResolver");
454
+ Object.defineProperty(exports, "resolveQuota", { enumerable: true, get: function () { return quotaResolver_1.resolveQuota; } });
455
+ var quota_2 = require("./quota");
456
+ Object.defineProperty(exports, "classifyQuotaFreshness", { enumerable: true, get: function () { return quota_2.classifyQuotaFreshness; } });
457
+ Object.defineProperty(exports, "formatQuotaAge", { enumerable: true, get: function () { return quota_2.formatQuotaAge; } });
458
+ Object.defineProperty(exports, "QUOTA_AGING_MAX_AGE_MS", { enumerable: true, get: function () { return quota_2.QUOTA_AGING_MAX_AGE_MS; } });
459
+ Object.defineProperty(exports, "QUOTA_FRESH_MAX_AGE_MS", { enumerable: true, get: function () { return quota_2.QUOTA_FRESH_MAX_AGE_MS; } });
460
+ var quotaThresholds_1 = require("./quotaThresholds");
461
+ Object.defineProperty(exports, "DEFAULT_QUOTA_THRESHOLDS", { enumerable: true, get: function () { return quotaThresholds_1.DEFAULT_QUOTA_THRESHOLDS; } });
462
+ Object.defineProperty(exports, "describeQuotaThresholdAlert", { enumerable: true, get: function () { return quotaThresholds_1.describeQuotaThresholdAlert; } });
463
+ Object.defineProperty(exports, "evaluateQuotaThresholds", { enumerable: true, get: function () { return quotaThresholds_1.evaluateQuotaThresholds; } });
464
+ var claudeStatuslinePayload_1 = require("./statusline/claudeStatuslinePayload");
465
+ Object.defineProperty(exports, "parseClaudeStatuslinePayload", { enumerable: true, get: function () { return claudeStatuslinePayload_1.parseClaudeStatuslinePayload; } });
466
+ Object.defineProperty(exports, "quotaFromStatuslinePayload", { enumerable: true, get: function () { return claudeStatuslinePayload_1.quotaFromStatuslinePayload; } });
387
467
  var quotaHistory_1 = require("./quotaHistory");
388
468
  Object.defineProperty(exports, "appendQuotaHistorySample", { enumerable: true, get: function () { return quotaHistory_1.appendQuotaHistorySample; } });
389
469
  Object.defineProperty(exports, "readQuotaHistoryRange", { enumerable: true, get: function () { return quotaHistory_1.readQuotaHistoryRange; } });
@@ -485,22 +565,22 @@ Object.defineProperty(exports, "sessionEventSchema", { enumerable: true, get: fu
485
565
  Object.defineProperty(exports, "permissionModeSchema", { enumerable: true, get: function () { return sessionEvent_1.permissionModeSchema; } });
486
566
  Object.defineProperty(exports, "extractSessionEvents", { enumerable: true, get: function () { return sessionEvent_1.extractSessionEvents; } });
487
567
  // Schemas — Zod runtime validation for quota / provider quota / peak hours
488
- var quota_2 = require("./schemas/quota");
489
- Object.defineProperty(exports, "quotaWindowSchema", { enumerable: true, get: function () { return quota_2.quotaWindowSchema; } });
490
- Object.defineProperty(exports, "quotaStateSchema", { enumerable: true, get: function () { return quota_2.quotaStateSchema; } });
491
- Object.defineProperty(exports, "quotaFailureKindSchema", { enumerable: true, get: function () { return quota_2.quotaFailureKindSchema; } });
492
- Object.defineProperty(exports, "quotaProviderIdSchema", { enumerable: true, get: function () { return quota_2.quotaProviderIdSchema; } });
493
- Object.defineProperty(exports, "quotaSourceSchema", { enumerable: true, get: function () { return quota_2.quotaSourceSchema; } });
494
- Object.defineProperty(exports, "codexResetCreditSchema", { enumerable: true, get: function () { return quota_2.codexResetCreditSchema; } });
495
- Object.defineProperty(exports, "codexResetCreditsSnapshotSchema", { enumerable: true, get: function () { return quota_2.codexResetCreditsSnapshotSchema; } });
496
- Object.defineProperty(exports, "peakHoursStateSchema", { enumerable: true, get: function () { return quota_2.peakHoursStateSchema; } });
497
- Object.defineProperty(exports, "quotaFailureDescriptorSchema", { enumerable: true, get: function () { return quota_2.quotaFailureDescriptorSchema; } });
498
- Object.defineProperty(exports, "runtimeQuotaProviderSchema", { enumerable: true, get: function () { return quota_2.runtimeQuotaProviderSchema; } });
499
- Object.defineProperty(exports, "providerQuotaStateSchema", { enumerable: true, get: function () { return quota_2.providerQuotaStateSchema; } });
500
- Object.defineProperty(exports, "claudeProviderQuotaStateSchema", { enumerable: true, get: function () { return quota_2.claudeProviderQuotaStateSchema; } });
501
- Object.defineProperty(exports, "codexProviderQuotaStateSchema", { enumerable: true, get: function () { return quota_2.codexProviderQuotaStateSchema; } });
502
- Object.defineProperty(exports, "zaiProviderQuotaStateSchema", { enumerable: true, get: function () { return quota_2.zaiProviderQuotaStateSchema; } });
503
- Object.defineProperty(exports, "providerQuotaMapSchema", { enumerable: true, get: function () { return quota_2.providerQuotaMapSchema; } });
568
+ var quota_3 = require("./schemas/quota");
569
+ Object.defineProperty(exports, "quotaWindowSchema", { enumerable: true, get: function () { return quota_3.quotaWindowSchema; } });
570
+ Object.defineProperty(exports, "quotaStateSchema", { enumerable: true, get: function () { return quota_3.quotaStateSchema; } });
571
+ Object.defineProperty(exports, "quotaFailureKindSchema", { enumerable: true, get: function () { return quota_3.quotaFailureKindSchema; } });
572
+ Object.defineProperty(exports, "quotaProviderIdSchema", { enumerable: true, get: function () { return quota_3.quotaProviderIdSchema; } });
573
+ Object.defineProperty(exports, "quotaSourceSchema", { enumerable: true, get: function () { return quota_3.quotaSourceSchema; } });
574
+ Object.defineProperty(exports, "codexResetCreditSchema", { enumerable: true, get: function () { return quota_3.codexResetCreditSchema; } });
575
+ Object.defineProperty(exports, "codexResetCreditsSnapshotSchema", { enumerable: true, get: function () { return quota_3.codexResetCreditsSnapshotSchema; } });
576
+ Object.defineProperty(exports, "peakHoursStateSchema", { enumerable: true, get: function () { return quota_3.peakHoursStateSchema; } });
577
+ Object.defineProperty(exports, "quotaFailureDescriptorSchema", { enumerable: true, get: function () { return quota_3.quotaFailureDescriptorSchema; } });
578
+ Object.defineProperty(exports, "runtimeQuotaProviderSchema", { enumerable: true, get: function () { return quota_3.runtimeQuotaProviderSchema; } });
579
+ Object.defineProperty(exports, "providerQuotaStateSchema", { enumerable: true, get: function () { return quota_3.providerQuotaStateSchema; } });
580
+ Object.defineProperty(exports, "claudeProviderQuotaStateSchema", { enumerable: true, get: function () { return quota_3.claudeProviderQuotaStateSchema; } });
581
+ Object.defineProperty(exports, "codexProviderQuotaStateSchema", { enumerable: true, get: function () { return quota_3.codexProviderQuotaStateSchema; } });
582
+ Object.defineProperty(exports, "zaiProviderQuotaStateSchema", { enumerable: true, get: function () { return quota_3.zaiProviderQuotaStateSchema; } });
583
+ Object.defineProperty(exports, "providerQuotaMapSchema", { enumerable: true, get: function () { return quota_3.providerQuotaMapSchema; } });
504
584
  // Schemas — Zod runtime validation for quota history
505
585
  var quotaHistory_2 = require("./schemas/quotaHistory");
506
586
  Object.defineProperty(exports, "quotaHistoryRuntimeProviderSchema", { enumerable: true, get: function () { return quotaHistory_2.quotaHistoryRuntimeProviderSchema; } });
@@ -542,8 +622,16 @@ Object.defineProperty(exports, "getSessionDiagnostics", { enumerable: true, get:
542
622
  Object.defineProperty(exports, "runDoctor", { enumerable: true, get: function () { return doctor_1.runDoctor; } });
543
623
  // Peak Hours (PromoClock — third-party)
544
624
  var peakHours_1 = require("./peakHours");
625
+ Object.defineProperty(exports, "_resetPeakHoursCache", { enumerable: true, get: function () { return peakHours_1._resetPeakHoursCache; } });
545
626
  Object.defineProperty(exports, "createPeakHoursNotApplicableState", { enumerable: true, get: function () { return peakHours_1.createPeakHoursNotApplicableState; } });
546
627
  Object.defineProperty(exports, "DEFAULT_PEAK_HOURS_TIMEOUT_MS", { enumerable: true, get: function () { return peakHours_1.DEFAULT_PEAK_HOURS_TIMEOUT_MS; } });
547
628
  Object.defineProperty(exports, "fetchPeakHoursStatus", { enumerable: true, get: function () { return peakHours_1.fetchPeakHoursStatus; } });
629
+ Object.defineProperty(exports, "getScheduledPeakHoursState", { enumerable: true, get: function () { return peakHours_1.getScheduledPeakHoursState; } });
548
630
  Object.defineProperty(exports, "isClaudeCodeSessionProvider", { enumerable: true, get: function () { return peakHours_1.isClaudeCodeSessionProvider; } });
631
+ Object.defineProperty(exports, "PEAK_HOURS_CACHE_MS", { enumerable: true, get: function () { return peakHours_1.PEAK_HOURS_CACHE_MS; } });
632
+ Object.defineProperty(exports, "PEAK_HOURS_DESCRIPTION", { enumerable: true, get: function () { return peakHours_1.PEAK_HOURS_DESCRIPTION; } });
549
633
  Object.defineProperty(exports, "scopePeakHoursToSessionProvider", { enumerable: true, get: function () { return peakHours_1.scopePeakHoursToSessionProvider; } });
634
+ var failingTools_1 = require("./failingTools");
635
+ Object.defineProperty(exports, "FAILING_TOOL_TREND_ARROWS", { enumerable: true, get: function () { return failingTools_1.FAILING_TOOL_TREND_ARROWS; } });
636
+ Object.defineProperty(exports, "failingToolTrend", { enumerable: true, get: function () { return failingTools_1.failingToolTrend; } });
637
+ Object.defineProperty(exports, "mergeFailingToolWindows", { enumerable: true, get: function () { return failingTools_1.mergeFailingToolWindows; } });
package/dist/node.d.ts CHANGED
@@ -10,8 +10,27 @@ export type { HydrateOptions, HydrateResult } from './pricingCatalog';
10
10
  export { loadObservedContextWindows, recordObservedContextWindow, getObservedContextWindowPath, } from './observedContextWindows';
11
11
  export type { ObservedContextWindowOptions, ObservedContextWindowStore, } from './observedContextWindows';
12
12
  export { listRecentSessions, readSessionTranscript } from './sessionTranscripts';
13
+ export { computeSessionFileStats, firstUserPrompt, providerContextSizeFn, readSessionFileStats, } from './sessionStats';
14
+ export { readSessionReportInputs } from './report/sessionReportInputs';
15
+ export type { SessionReportInputs } from './report/sessionReportInputs';
16
+ export { fingerprintString, sessionFingerprintParts } from './sessionFingerprint';
17
+ export { STATE_FILE_NAME, STATE_FILE_SCHEMA_VERSION, billingBlockToStateFile, getStateFilePath, quotaToStateFile, readStateFile, writeStateFile, } from './stateFile';
18
+ export type { SidekickStateFile, SidekickStateInput, StateFileAccount, StateFileBillingBlock, StateFileContext, StateFileQuota, StateFileQuotaWindow, StateFileSession, StateFileWriter, WriteStateFileOptions, } from './stateFile';
19
+ export type { ComputeSessionFileStatsOptions, ReadSessionFileStatsOptions } from './sessionStats';
20
+ export { BILLING_BLOCK_DURATION_MS, computeBillingBlocks, findActiveBillingBlock, } from './usage/billingBlocks';
21
+ export type { BillingBlock, BillingBlockInput, BillingBlockModelUsage, BillingBlockTokens, ComputeBillingBlocksOptions, } from './usage/billingBlocks';
22
+ export { MAX_USAGE_CACHE_FILES, USAGE_CACHE_VERSION, collectUsageEvents, getUsageCacheDir, pruneUsageCache, } from './usage/usageEvents';
23
+ export type { CollectUsageEventsOptions, CollectUsageEventsResult, UsageEventRecord, UsageSessionRecord, } from './usage/usageEvents';
24
+ export { applySessionSummary, isFileImported, markFileImported, removeSessionSummary, sessionSummaryFromStats, } from './historicalStore';
25
+ export type { ApplySessionSummaryOptions, SessionSummaryFromStatsOptions } from './historicalStore';
26
+ export { ACTIVE_SESSION_MTIME_THRESHOLD_MS, importSessionHistory, } from './usage/importSessionHistory';
27
+ export type { ImportSessionHistoryOptions, ImportSessionHistoryResult, } from './usage/importSessionHistory';
28
+ export { bucketUsage, summarizeUsageRows, usageBucketKey, weekKey } from './usage/usageReports';
29
+ export type { BucketUsageOptions, UsageBucketRow, UsageGranularity, UsageGroupDimension, UsageTotals, } from './usage/usageReports';
13
30
  export type { ProviderSessionIndex, ListRecentSessionsOptions } from './sessionTranscripts';
14
31
  export { findCodexRolloutFile } from './providers/codex';
32
+ export { walkRolloutFiles, walkRolloutFilesAsync } from './providers/rolloutWalker';
33
+ export type { RolloutFileInfo, WalkRolloutFilesOptions } from './providers/rolloutWalker';
15
34
  export type { FindCodexRolloutFileOptions } from './providers/codex';
16
35
  export { readCodexHistory } from './parsers/codexHistory';
17
36
  export type { CodexHistoryEntry, ReadCodexHistoryOptions } from './parsers/codexHistory';
package/dist/node.js CHANGED
@@ -7,7 +7,8 @@
7
7
  * for browser bundles — use `sidekick-shared/browser` there.
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.fileFingerprintParts = exports.fileFingerprint = exports.observedSessionSourceFromProvider = exports.ObservedSessionCollector = exports.readSessionPreviewAsync = exports.readSessionPreview = exports.listSessionPreviewsAsync = exports.listSessionPreviews = exports.readCodexHistory = exports.findCodexRolloutFile = exports.readSessionTranscript = exports.listRecentSessions = exports.getObservedContextWindowPath = exports.recordObservedContextWindow = exports.loadObservedContextWindows = exports.LITELLM_CATALOG_URL = exports.normalizeLiteLlmContextWindows = exports.normalizeLiteLlmCatalog = exports.hydratePricingCatalog = void 0;
10
+ exports.readSessionPreviewAsync = exports.readSessionPreview = exports.listSessionPreviewsAsync = exports.listSessionPreviews = exports.readCodexHistory = exports.walkRolloutFilesAsync = exports.walkRolloutFiles = exports.findCodexRolloutFile = exports.weekKey = exports.usageBucketKey = exports.summarizeUsageRows = exports.bucketUsage = exports.importSessionHistory = exports.ACTIVE_SESSION_MTIME_THRESHOLD_MS = exports.sessionSummaryFromStats = exports.removeSessionSummary = exports.markFileImported = exports.isFileImported = exports.applySessionSummary = exports.pruneUsageCache = exports.getUsageCacheDir = exports.collectUsageEvents = exports.USAGE_CACHE_VERSION = exports.MAX_USAGE_CACHE_FILES = exports.findActiveBillingBlock = exports.computeBillingBlocks = exports.BILLING_BLOCK_DURATION_MS = exports.writeStateFile = exports.readStateFile = exports.quotaToStateFile = exports.getStateFilePath = exports.billingBlockToStateFile = exports.STATE_FILE_SCHEMA_VERSION = exports.STATE_FILE_NAME = exports.sessionFingerprintParts = exports.fingerprintString = exports.readSessionReportInputs = exports.readSessionFileStats = exports.providerContextSizeFn = exports.firstUserPrompt = exports.computeSessionFileStats = exports.readSessionTranscript = exports.listRecentSessions = exports.getObservedContextWindowPath = exports.recordObservedContextWindow = exports.loadObservedContextWindows = exports.LITELLM_CATALOG_URL = exports.normalizeLiteLlmContextWindows = exports.normalizeLiteLlmCatalog = exports.hydratePricingCatalog = void 0;
11
+ exports.fileFingerprintParts = exports.fileFingerprint = exports.observedSessionSourceFromProvider = exports.ObservedSessionCollector = void 0;
11
12
  var pricingCatalog_1 = require("./pricingCatalog");
12
13
  Object.defineProperty(exports, "hydratePricingCatalog", { enumerable: true, get: function () { return pricingCatalog_1.hydratePricingCatalog; } });
13
14
  Object.defineProperty(exports, "normalizeLiteLlmCatalog", { enumerable: true, get: function () { return pricingCatalog_1.normalizeLiteLlmCatalog; } });
@@ -20,8 +21,53 @@ Object.defineProperty(exports, "getObservedContextWindowPath", { enumerable: tru
20
21
  var sessionTranscripts_1 = require("./sessionTranscripts");
21
22
  Object.defineProperty(exports, "listRecentSessions", { enumerable: true, get: function () { return sessionTranscripts_1.listRecentSessions; } });
22
23
  Object.defineProperty(exports, "readSessionTranscript", { enumerable: true, get: function () { return sessionTranscripts_1.readSessionTranscript; } });
24
+ var sessionStats_1 = require("./sessionStats");
25
+ Object.defineProperty(exports, "computeSessionFileStats", { enumerable: true, get: function () { return sessionStats_1.computeSessionFileStats; } });
26
+ Object.defineProperty(exports, "firstUserPrompt", { enumerable: true, get: function () { return sessionStats_1.firstUserPrompt; } });
27
+ Object.defineProperty(exports, "providerContextSizeFn", { enumerable: true, get: function () { return sessionStats_1.providerContextSizeFn; } });
28
+ Object.defineProperty(exports, "readSessionFileStats", { enumerable: true, get: function () { return sessionStats_1.readSessionFileStats; } });
29
+ var sessionReportInputs_1 = require("./report/sessionReportInputs");
30
+ Object.defineProperty(exports, "readSessionReportInputs", { enumerable: true, get: function () { return sessionReportInputs_1.readSessionReportInputs; } });
31
+ var sessionFingerprint_1 = require("./sessionFingerprint");
32
+ Object.defineProperty(exports, "fingerprintString", { enumerable: true, get: function () { return sessionFingerprint_1.fingerprintString; } });
33
+ Object.defineProperty(exports, "sessionFingerprintParts", { enumerable: true, get: function () { return sessionFingerprint_1.sessionFingerprintParts; } });
34
+ var stateFile_1 = require("./stateFile");
35
+ Object.defineProperty(exports, "STATE_FILE_NAME", { enumerable: true, get: function () { return stateFile_1.STATE_FILE_NAME; } });
36
+ Object.defineProperty(exports, "STATE_FILE_SCHEMA_VERSION", { enumerable: true, get: function () { return stateFile_1.STATE_FILE_SCHEMA_VERSION; } });
37
+ Object.defineProperty(exports, "billingBlockToStateFile", { enumerable: true, get: function () { return stateFile_1.billingBlockToStateFile; } });
38
+ Object.defineProperty(exports, "getStateFilePath", { enumerable: true, get: function () { return stateFile_1.getStateFilePath; } });
39
+ Object.defineProperty(exports, "quotaToStateFile", { enumerable: true, get: function () { return stateFile_1.quotaToStateFile; } });
40
+ Object.defineProperty(exports, "readStateFile", { enumerable: true, get: function () { return stateFile_1.readStateFile; } });
41
+ Object.defineProperty(exports, "writeStateFile", { enumerable: true, get: function () { return stateFile_1.writeStateFile; } });
42
+ var billingBlocks_1 = require("./usage/billingBlocks");
43
+ Object.defineProperty(exports, "BILLING_BLOCK_DURATION_MS", { enumerable: true, get: function () { return billingBlocks_1.BILLING_BLOCK_DURATION_MS; } });
44
+ Object.defineProperty(exports, "computeBillingBlocks", { enumerable: true, get: function () { return billingBlocks_1.computeBillingBlocks; } });
45
+ Object.defineProperty(exports, "findActiveBillingBlock", { enumerable: true, get: function () { return billingBlocks_1.findActiveBillingBlock; } });
46
+ var usageEvents_1 = require("./usage/usageEvents");
47
+ Object.defineProperty(exports, "MAX_USAGE_CACHE_FILES", { enumerable: true, get: function () { return usageEvents_1.MAX_USAGE_CACHE_FILES; } });
48
+ Object.defineProperty(exports, "USAGE_CACHE_VERSION", { enumerable: true, get: function () { return usageEvents_1.USAGE_CACHE_VERSION; } });
49
+ Object.defineProperty(exports, "collectUsageEvents", { enumerable: true, get: function () { return usageEvents_1.collectUsageEvents; } });
50
+ Object.defineProperty(exports, "getUsageCacheDir", { enumerable: true, get: function () { return usageEvents_1.getUsageCacheDir; } });
51
+ Object.defineProperty(exports, "pruneUsageCache", { enumerable: true, get: function () { return usageEvents_1.pruneUsageCache; } });
52
+ var historicalStore_1 = require("./historicalStore");
53
+ Object.defineProperty(exports, "applySessionSummary", { enumerable: true, get: function () { return historicalStore_1.applySessionSummary; } });
54
+ Object.defineProperty(exports, "isFileImported", { enumerable: true, get: function () { return historicalStore_1.isFileImported; } });
55
+ Object.defineProperty(exports, "markFileImported", { enumerable: true, get: function () { return historicalStore_1.markFileImported; } });
56
+ Object.defineProperty(exports, "removeSessionSummary", { enumerable: true, get: function () { return historicalStore_1.removeSessionSummary; } });
57
+ Object.defineProperty(exports, "sessionSummaryFromStats", { enumerable: true, get: function () { return historicalStore_1.sessionSummaryFromStats; } });
58
+ var importSessionHistory_1 = require("./usage/importSessionHistory");
59
+ Object.defineProperty(exports, "ACTIVE_SESSION_MTIME_THRESHOLD_MS", { enumerable: true, get: function () { return importSessionHistory_1.ACTIVE_SESSION_MTIME_THRESHOLD_MS; } });
60
+ Object.defineProperty(exports, "importSessionHistory", { enumerable: true, get: function () { return importSessionHistory_1.importSessionHistory; } });
61
+ var usageReports_1 = require("./usage/usageReports");
62
+ Object.defineProperty(exports, "bucketUsage", { enumerable: true, get: function () { return usageReports_1.bucketUsage; } });
63
+ Object.defineProperty(exports, "summarizeUsageRows", { enumerable: true, get: function () { return usageReports_1.summarizeUsageRows; } });
64
+ Object.defineProperty(exports, "usageBucketKey", { enumerable: true, get: function () { return usageReports_1.usageBucketKey; } });
65
+ Object.defineProperty(exports, "weekKey", { enumerable: true, get: function () { return usageReports_1.weekKey; } });
23
66
  var codex_1 = require("./providers/codex");
24
67
  Object.defineProperty(exports, "findCodexRolloutFile", { enumerable: true, get: function () { return codex_1.findCodexRolloutFile; } });
68
+ var rolloutWalker_1 = require("./providers/rolloutWalker");
69
+ Object.defineProperty(exports, "walkRolloutFiles", { enumerable: true, get: function () { return rolloutWalker_1.walkRolloutFiles; } });
70
+ Object.defineProperty(exports, "walkRolloutFilesAsync", { enumerable: true, get: function () { return rolloutWalker_1.walkRolloutFilesAsync; } });
25
71
  var codexHistory_1 = require("./parsers/codexHistory");
26
72
  Object.defineProperty(exports, "readCodexHistory", { enumerable: true, get: function () { return codexHistory_1.readCodexHistory; } });
27
73
  var sessionPreviews_1 = require("./sessionPreviews");
@@ -44,6 +44,13 @@ export interface ObservedContextWindowStore {
44
44
  version: 1;
45
45
  models: Record<string, ObservedContextWindowEntry>;
46
46
  }
47
+ /**
48
+ * Observations older than this are ignored on load. A provider reports its
49
+ * context window on every session, so a live model refreshes its entry
50
+ * constantly; an entry that has gone quiet this long belongs to a tier or
51
+ * model the user no longer runs and must not outrank the catalog forever.
52
+ */
53
+ export declare const OBSERVED_CONTEXT_WINDOW_TTL_MS: number;
47
54
  /** Resolve the on-disk store path. */
48
55
  export declare function getObservedContextWindowPath(cacheDir?: string): string;
49
56
  /** Reset the per-store write dedupe. Test-only; not part of the public API. */
@@ -64,6 +64,7 @@ var __importStar = (this && this.__importStar) || (function () {
64
64
  };
65
65
  })();
66
66
  Object.defineProperty(exports, "__esModule", { value: true });
67
+ exports.OBSERVED_CONTEXT_WINDOW_TTL_MS = void 0;
67
68
  exports.getObservedContextWindowPath = getObservedContextWindowPath;
68
69
  exports._clearObservedContextWindowWriteCache = _clearObservedContextWindowWriteCache;
69
70
  exports.loadObservedContextWindows = loadObservedContextWindows;
@@ -76,6 +77,13 @@ const atomic_1 = require("./writers/atomic");
76
77
  // ── Constants ──
77
78
  const STORE_FILE_NAME = 'observed-context-windows.json';
78
79
  const STORE_VERSION = 1;
80
+ /**
81
+ * Observations older than this are ignored on load. A provider reports its
82
+ * context window on every session, so a live model refreshes its entry
83
+ * constantly; an entry that has gone quiet this long belongs to a tier or
84
+ * model the user no longer runs and must not outrank the catalog forever.
85
+ */
86
+ exports.OBSERVED_CONTEXT_WINDOW_TTL_MS = 30 * 86_400_000;
79
87
  /** Resolve the on-disk store path. */
80
88
  function getObservedContextWindowPath(cacheDir) {
81
89
  return path.join(cacheDir ?? (0, paths_1.getConfigDir)(), STORE_FILE_NAME);
@@ -98,13 +106,20 @@ const lastPersistedByStore = new Map();
98
106
  function _clearObservedContextWindowWriteCache() {
99
107
  lastPersistedByStore.clear();
100
108
  }
101
- /** Keep only well-formed entries; a hand-edited or partly-corrupt file shouldn't poison lookups. */
102
- function toOverrideMap(store) {
109
+ /**
110
+ * Keep only well-formed, recent entries; a hand-edited or partly-corrupt file
111
+ * shouldn't poison lookups, and a stale observation shouldn't outrank the
112
+ * catalog (see {@link OBSERVED_CONTEXT_WINDOW_TTL_MS}).
113
+ */
114
+ function toOverrideMap(store, now = Date.now()) {
103
115
  const out = {};
104
116
  for (const [modelId, entry] of Object.entries(store.models ?? {})) {
105
117
  const window = entry?.contextWindow;
106
118
  if (typeof window !== 'number' || !Number.isFinite(window) || window <= 0)
107
119
  continue;
120
+ const observedAt = typeof entry.observedAt === 'string' ? Date.parse(entry.observedAt) : NaN;
121
+ if (Number.isFinite(observedAt) && now - observedAt > exports.OBSERVED_CONTEXT_WINDOW_TTL_MS)
122
+ continue;
108
123
  out[modelId] = window;
109
124
  }
110
125
  return out;
@@ -1,9 +1,8 @@
1
1
  import type { ObservedAgentSessionV1, ProviderCapabilitiesV1, ProviderSessionAdapterV1Options } from './types/observedSessionV1';
2
2
  import type { SessionProviderBase } from './providers/types';
3
- export interface ObservedSessionFingerprintParts {
4
- sizeBytes: number;
5
- mtimeMs: number;
6
- }
3
+ import type { ObservedSessionFingerprintParts } from './sessionFingerprint';
4
+ export { fileFingerprint, fileFingerprintParts } from './sessionFingerprint';
5
+ export type { ObservedSessionFingerprintParts } from './sessionFingerprint';
7
6
  export interface ObservedSessionReference {
8
7
  sessionId: string;
9
8
  /** Opaque source locator used only by the source implementation. Never emitted in diagnostics. */
@@ -136,7 +135,3 @@ export declare class ObservedSessionCollector<T = unknown> {
136
135
  * one malformed session cannot reject discovery of its healthy siblings.
137
136
  */
138
137
  export declare function observedSessionSourceFromProvider(provider: SessionProviderBase, cwd: string, options?: ProviderSessionAdapterV1Options): ProviderObservedSessionCollectionSource;
139
- /** Structured size/mtime fingerprint; returns null for inaccessible or synthetic paths. */
140
- export declare function fileFingerprintParts(sourcePath: string): ObservedSessionFingerprintParts | null;
141
- /** Size/mtime fingerprint suitable for retry bypass; returns null for synthetic DB locators. */
142
- export declare function fileFingerprint(sourcePath: string): string | null;
@@ -33,14 +33,15 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.ObservedSessionCollector = void 0;
36
+ exports.ObservedSessionCollector = exports.fileFingerprintParts = exports.fileFingerprint = void 0;
37
37
  exports.observedSessionSourceFromProvider = observedSessionSourceFromProvider;
38
- exports.fileFingerprintParts = fileFingerprintParts;
39
- exports.fileFingerprint = fileFingerprint;
40
38
  const fs = __importStar(require("node:fs"));
41
- const node_fs_1 = require("node:fs");
42
39
  const observedSessionV1_1 = require("./types/observedSessionV1");
43
40
  const sessionActivityDetector_1 = require("./parsers/sessionActivityDetector");
41
+ const sessionFingerprint_1 = require("./sessionFingerprint");
42
+ var sessionFingerprint_2 = require("./sessionFingerprint");
43
+ Object.defineProperty(exports, "fileFingerprint", { enumerable: true, get: function () { return sessionFingerprint_2.fileFingerprint; } });
44
+ Object.defineProperty(exports, "fileFingerprintParts", { enumerable: true, get: function () { return sessionFingerprint_2.fileFingerprintParts; } });
44
45
  const DEFAULT_MAX_CONCURRENT_READS = 4;
45
46
  const MAX_CONCURRENT_READS = 16;
46
47
  const DEFAULT_DEBOUNCE_MS = 100;
@@ -444,12 +445,12 @@ function observedSessionSourceFromProvider(provider, cwd, options = {}) {
444
445
  const referenceFromPath = (sessionPath, sessionId = provider.getSessionId(sessionPath), suppliedParts) => {
445
446
  const metadata = suppliedParts ? null : provider.getSessionMetadata?.(sessionPath);
446
447
  const parts = suppliedParts ??
447
- fileFingerprintParts(sessionPath) ??
448
+ (0, sessionFingerprint_1.fileFingerprintParts)(sessionPath) ??
448
449
  (metadata ? { sizeBytes: 0, mtimeMs: metadata.mtime.getTime() } : null);
449
450
  return {
450
451
  sessionId,
451
452
  sourceKey: sessionPath,
452
- fingerprintHint: parts ? fingerprintString(parts) : undefined,
453
+ fingerprintHint: parts ? (0, sessionFingerprint_1.fingerprintString)(parts) : undefined,
453
454
  fingerprintParts: parts ?? undefined,
454
455
  };
455
456
  };
@@ -472,12 +473,12 @@ function observedSessionSourceFromProvider(provider, cwd, options = {}) {
472
473
  }
473
474
  return provider.findAllSessions(cwd).map((sessionPath) => {
474
475
  const metadata = provider.getSessionMetadata?.(sessionPath);
475
- const parts = fileFingerprintParts(sessionPath) ??
476
+ const parts = (0, sessionFingerprint_1.fileFingerprintParts)(sessionPath) ??
476
477
  (metadata ? { sizeBytes: 0, mtimeMs: metadata.mtime.getTime() } : null);
477
478
  return {
478
479
  sessionId: provider.getSessionId(sessionPath),
479
480
  sourceKey: sessionPath,
480
- fingerprintHint: parts ? fingerprintString(parts) : undefined,
481
+ fingerprintHint: parts ? (0, sessionFingerprint_1.fingerprintString)(parts) : undefined,
481
482
  fingerprintParts: parts ?? undefined,
482
483
  };
483
484
  });
@@ -493,7 +494,7 @@ function observedSessionSourceFromProvider(provider, cwd, options = {}) {
493
494
  },
494
495
  refreshCached(reference, cached, observedAt) {
495
496
  const mtimeMs = reference.fingerprintParts?.mtimeMs ?? Date.parse(cached.observedAt);
496
- const activity = (0, sessionActivityDetector_1.refreshSessionActivityState)(cached.activity.value, mtimeMs);
497
+ const activity = (0, sessionActivityDetector_1.refreshSessionActivityState)(cached.activity.value, mtimeMs, Date.now(), (0, observedSessionV1_1.getObservedActivityReason)(cached));
497
498
  return {
498
499
  ...cached,
499
500
  activity: { ...cached.activity, value: activity },
@@ -506,24 +507,6 @@ function observedSessionSourceFromProvider(provider, cwd, options = {}) {
506
507
  dispose: () => adapter.dispose(),
507
508
  };
508
509
  }
509
- /** Structured size/mtime fingerprint; returns null for inaccessible or synthetic paths. */
510
- function fileFingerprintParts(sourcePath) {
511
- try {
512
- const stat = (0, node_fs_1.statSync)(sourcePath);
513
- return { sizeBytes: stat.size, mtimeMs: stat.mtimeMs };
514
- }
515
- catch {
516
- return null;
517
- }
518
- }
519
- /** Size/mtime fingerprint suitable for retry bypass; returns null for synthetic DB locators. */
520
- function fileFingerprint(sourcePath) {
521
- const parts = fileFingerprintParts(sourcePath);
522
- return parts ? fingerprintString(parts) : null;
523
- }
524
- function fingerprintString(parts) {
525
- return `${parts.sizeBytes}:${parts.mtimeMs}`;
526
- }
527
510
  function parseFingerprintParts(value) {
528
511
  if (!value)
529
512
  return null;