sidekick-shared 0.24.4 → 0.25.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 (98) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/README.md +200 -52
  3. package/dist/accountChangeSignal.d.ts +3 -0
  4. package/dist/accountChangeSignal.js +19 -0
  5. package/dist/accountChanges.d.ts +21 -0
  6. package/dist/accountChanges.js +151 -0
  7. package/dist/accountManager.d.ts +13 -0
  8. package/dist/accountManager.js +60 -32
  9. package/dist/accountRegistry.d.ts +3 -1
  10. package/dist/accountRegistry.js +64 -41
  11. package/dist/accounts.js +40 -19
  12. package/dist/autoSwitch.d.ts +2 -1
  13. package/dist/autoSwitch.js +32 -7
  14. package/dist/browser.d.ts +10 -3
  15. package/dist/browser.js +17 -1
  16. package/dist/codexProfiles.d.ts +14 -0
  17. package/dist/codexProfiles.js +268 -116
  18. package/dist/codexQuotaWatcher.d.ts +6 -0
  19. package/dist/codexQuotaWatcher.js +101 -47
  20. package/dist/context/sessionContext.js +2 -4
  21. package/dist/ensureDefaultAccounts.js +4 -4
  22. package/dist/index.d.ts +32 -15
  23. package/dist/index.js +54 -9
  24. package/dist/modelAliases.d.ts +13 -0
  25. package/dist/modelAliases.js +58 -0
  26. package/dist/modelCatalog.d.ts +32 -0
  27. package/dist/modelCatalog.js +145 -0
  28. package/dist/modelContext.d.ts +36 -3
  29. package/dist/modelContext.js +109 -34
  30. package/dist/modelInfo.d.ts +30 -1
  31. package/dist/modelInfo.js +116 -26
  32. package/dist/multiProviderQuotaService.d.ts +8 -0
  33. package/dist/multiProviderQuotaService.js +64 -3
  34. package/dist/node.d.ts +8 -2
  35. package/dist/node.js +11 -1
  36. package/dist/observedContextWindows.d.ts +13 -0
  37. package/dist/observedContextWindows.js +13 -0
  38. package/dist/observedSessionCollector.d.ts +75 -4
  39. package/dist/observedSessionCollector.js +452 -42
  40. package/dist/parsers/codexHistory.d.ts +32 -0
  41. package/dist/parsers/codexHistory.js +125 -0
  42. package/dist/parsers/mcpToolName.d.ts +26 -0
  43. package/dist/parsers/mcpToolName.js +31 -0
  44. package/dist/parsers/sessionActivityDetector.d.ts +6 -0
  45. package/dist/parsers/sessionActivityDetector.js +17 -0
  46. package/dist/parsers/sessionPathResolver.d.ts +11 -4
  47. package/dist/parsers/sessionPathResolver.js +11 -4
  48. package/dist/paths.d.ts +7 -3
  49. package/dist/paths.js +7 -3
  50. package/dist/providerIds.d.ts +11 -0
  51. package/dist/providerIds.js +9 -0
  52. package/dist/providerQuota.d.ts +3 -1
  53. package/dist/providerQuota.js +3 -0
  54. package/dist/providers/claudeCode.d.ts +11 -1
  55. package/dist/providers/claudeCode.js +222 -39
  56. package/dist/providers/codex.d.ts +39 -1
  57. package/dist/providers/codex.js +326 -39
  58. package/dist/providers/codexDatabase.d.ts +9 -0
  59. package/dist/providers/codexDatabase.js +107 -2
  60. package/dist/providers/diagnostics.d.ts +13 -0
  61. package/dist/providers/diagnostics.js +88 -0
  62. package/dist/providers/factory.d.ts +14 -0
  63. package/dist/providers/factory.js +57 -0
  64. package/dist/providers/openCode.d.ts +20 -1
  65. package/dist/providers/openCode.js +361 -11
  66. package/dist/providers/openCodeDatabase.d.ts +10 -0
  67. package/dist/providers/openCodeDatabase.js +69 -0
  68. package/dist/providers/types.d.ts +57 -2
  69. package/dist/providers/types.js +4 -0
  70. package/dist/quota.d.ts +4 -1
  71. package/dist/quota.js +3 -7
  72. package/dist/quotaHistory.d.ts +3 -2
  73. package/dist/quotaHistory.js +2 -2
  74. package/dist/quotaPoller.d.ts +13 -1
  75. package/dist/quotaPoller.js +65 -3
  76. package/dist/quotaSnapshots.js +8 -77
  77. package/dist/schemas/accountManager.d.ts +2 -2
  78. package/dist/schemas/accountManager.js +2 -4
  79. package/dist/schemas/accountStatus.d.ts +3 -0
  80. package/dist/schemas/accountStatus.js +1 -0
  81. package/dist/schemas/index.d.ts +1 -0
  82. package/dist/schemas/index.js +7 -2
  83. package/dist/schemas/observedSessionV1.d.ts +27 -26
  84. package/dist/schemas/observedSessionV1.js +6 -4
  85. package/dist/schemas/quota.d.ts +2 -2
  86. package/dist/schemas/quota.js +3 -6
  87. package/dist/schemas/quotaHistory.d.ts +2 -2
  88. package/dist/schemas/tokenEstimation.d.ts +1 -1
  89. package/dist/sessionMonitor.d.ts +15 -0
  90. package/dist/sessionMonitor.js +142 -0
  91. package/dist/sessionPreviews.d.ts +85 -0
  92. package/dist/sessionPreviews.js +549 -0
  93. package/dist/sessionTranscripts.js +10 -4
  94. package/dist/types/observedSessionV1.d.ts +6 -2
  95. package/dist/types/observedSessionV1.js +14 -8
  96. package/dist/writers/atomic.d.ts +20 -0
  97. package/dist/writers/atomic.js +190 -19
  98. package/package.json +22 -1
package/dist/index.js CHANGED
@@ -3,13 +3,14 @@
3
3
  * Public API for sidekick-shared.
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.addTask = exports.updateJsonStoreAtomic = 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.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.FilterEngine = exports.searchSessions = exports.CodexDatabase = exports.OpenCodeDatabase = exports.discoverDebugLogs = exports.collapseDuplicates = exports.filterByLevel = exports.parseDebugLog = 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.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.CodexProvider = exports.getOpenCodeDataDir = exports.OpenCodeProvider = exports.ClaudeCodeProvider = exports.getAllDetectedProviders = exports.detectProvider = exports.derivePendingUserRequestV1 = exports.createProviderSessionAdapterV1 = exports.renderHandoffUrlTemplate = exports.addNote = exports.decisionFingerprint = exports.addDecision = exports.completeTask = void 0;
8
- 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 = 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 = void 0;
9
- exports.claudeKeychainService = exports.claudeKeychainSuffix = exports.getClaudeProfileHome = exports.getClaudeProfilesDir = exports.getActiveAccountStatus = exports.removeSavedAccountProfile = exports.replaceSavedAccountProfiles = exports.setActiveSavedAccount = exports.upsertSavedAccountProfile = exports.getActiveSavedAccount = exports.listSavedAccountProfiles = exports.writeSavedAccountRegistry = exports.readSavedAccountRegistry = exports.getAccountsDir = exports.resolveClaudeLoginCommand = exports.listAllAccounts = exports.switchAccount = exports.spawnAccountLogin = exports.finalizeAccountLogin = 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 = void 0;
10
- 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 = exports.fetchQuota = exports.SEVEN_DAY_WINDOW_MS = 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.switchToCodexAccount = exports.finalizeCodexAccount = exports.prepareCodexAccount = exports.getCodexExecutionEnv = exports.resolveSidekickCodexHome = exports.resolveActiveCodexAccount = exports.getActiveCodexAccount = exports.listCodexAccounts = exports.getSystemCodexHome = exports.getCodexMonitoringHomes = exports.getCodexProfileHome = exports.getCodexProfilesDir = exports.readClaudeProfileIdentity = exports.isClaudeProfileAuthenticated = void 0;
11
- 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.formatCost = exports.sortModelIds = exports.compareModelIds = exports.getModelDisplayInfo = exports.shortModelName = exports.mergeCostSources = exports.calculateCostWithProvenance = exports.calculateCostWithPricing = exports.calculateCost = exports.getModelInfo = exports.getModelPricing = exports.parseModelId = exports.DEFAULT_CONTEXT_WINDOW = exports.getModelContextWindowSize = exports.selectStatuslineAccount = exports.formatStatusline = exports.estimateTimeToQuota = exports.BurnRateCalculator = void 0;
12
- 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 = 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 = void 0;
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;
13
14
  var usageNormalization_1 = require("./usageNormalization");
14
15
  Object.defineProperty(exports, "normalizeProviderUsage", { enumerable: true, get: function () { return usageNormalization_1.normalizeProviderUsage; } });
15
16
  Object.defineProperty(exports, "extractNormalizedUsage", { enumerable: true, get: function () { return usageNormalization_1.extractNormalizedUsage; } });
@@ -26,6 +27,7 @@ var observedSessionCollector_1 = require("./observedSessionCollector");
26
27
  Object.defineProperty(exports, "ObservedSessionCollector", { enumerable: true, get: function () { return observedSessionCollector_1.ObservedSessionCollector; } });
27
28
  Object.defineProperty(exports, "observedSessionSourceFromProvider", { enumerable: true, get: function () { return observedSessionCollector_1.observedSessionSourceFromProvider; } });
28
29
  Object.defineProperty(exports, "fileFingerprint", { enumerable: true, get: function () { return observedSessionCollector_1.fileFingerprint; } });
30
+ Object.defineProperty(exports, "fileFingerprintParts", { enumerable: true, get: function () { return observedSessionCollector_1.fileFingerprintParts; } });
29
31
  var codex_1 = require("./types/codex");
30
32
  Object.defineProperty(exports, "isAggregateCodexLimit", { enumerable: true, get: function () { return codex_1.isAggregateCodexLimit; } });
31
33
  var taskPersistence_1 = require("./types/taskPersistence");
@@ -81,7 +83,10 @@ Object.defineProperty(exports, "readClaudeCodePlanFiles", { enumerable: true, ge
81
83
  var atomic_1 = require("./writers/atomic");
82
84
  Object.defineProperty(exports, "atomicWriteJson", { enumerable: true, get: function () { return atomic_1.atomicWriteJson; } });
83
85
  Object.defineProperty(exports, "atomicWriteJsonSync", { enumerable: true, get: function () { return atomic_1.atomicWriteJsonSync; } });
86
+ Object.defineProperty(exports, "atomicWriteFileSync", { enumerable: true, get: function () { return atomic_1.atomicWriteFileSync; } });
84
87
  Object.defineProperty(exports, "updateJsonStoreAtomic", { enumerable: true, get: function () { return atomic_1.updateJsonStoreAtomic; } });
88
+ Object.defineProperty(exports, "updateJsonStoreAtomicSync", { enumerable: true, get: function () { return atomic_1.updateJsonStoreAtomicSync; } });
89
+ Object.defineProperty(exports, "withFileLockSync", { enumerable: true, get: function () { return atomic_1.withFileLockSync; } });
85
90
  var tasks_2 = require("./writers/tasks");
86
91
  Object.defineProperty(exports, "addTask", { enumerable: true, get: function () { return tasks_2.addTask; } });
87
92
  Object.defineProperty(exports, "completeTask", { enumerable: true, get: function () { return tasks_2.completeTask; } });
@@ -92,6 +97,10 @@ var notes_2 = require("./writers/notes");
92
97
  Object.defineProperty(exports, "addNote", { enumerable: true, get: function () { return notes_2.addNote; } });
93
98
  var handoffUrl_1 = require("./handoffUrl");
94
99
  Object.defineProperty(exports, "renderHandoffUrlTemplate", { enumerable: true, get: function () { return handoffUrl_1.renderHandoffUrlTemplate; } });
100
+ var types_1 = require("./providers/types");
101
+ Object.defineProperty(exports, "SESSION_PROVIDER_IDS", { enumerable: true, get: function () { return types_1.SESSION_PROVIDER_IDS; } });
102
+ var factory_1 = require("./providers/factory");
103
+ Object.defineProperty(exports, "createSessionProviders", { enumerable: true, get: function () { return factory_1.createSessionProviders; } });
95
104
  var observedSessionV1_1 = require("./types/observedSessionV1");
96
105
  Object.defineProperty(exports, "createProviderSessionAdapterV1", { enumerable: true, get: function () { return observedSessionV1_1.createProviderSessionAdapterV1; } });
97
106
  Object.defineProperty(exports, "derivePendingUserRequestV1", { enumerable: true, get: function () { return observedSessionV1_1.derivePendingUserRequestV1; } });
@@ -105,6 +114,7 @@ Object.defineProperty(exports, "OpenCodeProvider", { enumerable: true, get: func
105
114
  Object.defineProperty(exports, "getOpenCodeDataDir", { enumerable: true, get: function () { return openCode_1.getOpenCodeDataDir; } });
106
115
  var codex_2 = require("./providers/codex");
107
116
  Object.defineProperty(exports, "CodexProvider", { enumerable: true, get: function () { return codex_2.CodexProvider; } });
117
+ Object.defineProperty(exports, "findCodexRolloutFile", { enumerable: true, get: function () { return codex_2.findCodexRolloutFile; } });
108
118
  // Parsers — JSONL
109
119
  var jsonl_1 = require("./parsers/jsonl");
110
120
  Object.defineProperty(exports, "JsonlParser", { enumerable: true, get: function () { return jsonl_1.JsonlParser; } });
@@ -130,6 +140,7 @@ Object.defineProperty(exports, "extractTaskInfo", { enumerable: true, get: funct
130
140
  // Parsers — Session activity detection
131
141
  var sessionActivityDetector_1 = require("./parsers/sessionActivityDetector");
132
142
  Object.defineProperty(exports, "detectSessionActivity", { enumerable: true, get: function () { return sessionActivityDetector_1.detectSessionActivity; } });
143
+ Object.defineProperty(exports, "refreshSessionActivityState", { enumerable: true, get: function () { return sessionActivityDetector_1.refreshSessionActivityState; } });
133
144
  // Parsers — Session path resolution (Claude Code)
134
145
  var sessionPathResolver_1 = require("./parsers/sessionPathResolver");
135
146
  Object.defineProperty(exports, "encodeClaudeWorkspacePath", { enumerable: true, get: function () { return sessionPathResolver_1.encodeWorkspacePath; } });
@@ -148,6 +159,18 @@ Object.defineProperty(exports, "findAllSessionsWithWorktrees", { enumerable: tru
148
159
  // Parsers — Subagent traces
149
160
  var subagentTraceParser_1 = require("./parsers/subagentTraceParser");
150
161
  Object.defineProperty(exports, "scanSubagentTraces", { enumerable: true, get: function () { return subagentTraceParser_1.scanSubagentTraces; } });
162
+ // Parsers — MCP tool names
163
+ var mcpToolName_1 = require("./parsers/mcpToolName");
164
+ Object.defineProperty(exports, "parseMcpToolName", { enumerable: true, get: function () { return mcpToolName_1.parseMcpToolName; } });
165
+ // Parsers — Codex native history
166
+ var codexHistory_1 = require("./parsers/codexHistory");
167
+ Object.defineProperty(exports, "readCodexHistory", { enumerable: true, get: function () { return codexHistory_1.readCodexHistory; } });
168
+ // Session previews (bounded, stat-first)
169
+ var sessionPreviews_1 = require("./sessionPreviews");
170
+ Object.defineProperty(exports, "listSessionPreviews", { enumerable: true, get: function () { return sessionPreviews_1.listSessionPreviews; } });
171
+ Object.defineProperty(exports, "listSessionPreviewsAsync", { enumerable: true, get: function () { return sessionPreviews_1.listSessionPreviewsAsync; } });
172
+ Object.defineProperty(exports, "readSessionPreview", { enumerable: true, get: function () { return sessionPreviews_1.readSessionPreview; } });
173
+ Object.defineProperty(exports, "readSessionPreviewAsync", { enumerable: true, get: function () { return sessionPreviews_1.readSessionPreviewAsync; } });
151
174
  // Parsers — Debug log parsing
152
175
  var debugLogParser_1 = require("./parsers/debugLogParser");
153
176
  Object.defineProperty(exports, "parseDebugLog", { enumerable: true, get: function () { return debugLogParser_1.parseDebugLog; } });
@@ -187,8 +210,8 @@ Object.defineProperty(exports, "extractProposedPlanShared", { enumerable: true,
187
210
  // Changelog Parsing
188
211
  var changelogParser_1 = require("./parsers/changelogParser");
189
212
  Object.defineProperty(exports, "parseChangelog", { enumerable: true, get: function () { return changelogParser_1.parseChangelog; } });
190
- var factory_1 = require("./watchers/factory");
191
- Object.defineProperty(exports, "createWatcher", { enumerable: true, get: function () { return factory_1.createWatcher; } });
213
+ var factory_2 = require("./watchers/factory");
214
+ Object.defineProperty(exports, "createWatcher", { enumerable: true, get: function () { return factory_2.createWatcher; } });
192
215
  var eventBridge_1 = require("./watchers/eventBridge");
193
216
  Object.defineProperty(exports, "toFollowEvents", { enumerable: true, get: function () { return eventBridge_1.toFollowEvents; } });
194
217
  var jsonlTail_1 = require("./watchers/jsonlTail");
@@ -287,9 +310,12 @@ Object.defineProperty(exports, "isMultiAccountEnabled", { enumerable: true, get:
287
310
  var accountManager_1 = require("./accountManager");
288
311
  Object.defineProperty(exports, "beginAccountLogin", { enumerable: true, get: function () { return accountManager_1.beginAccountLogin; } });
289
312
  Object.defineProperty(exports, "getAccountLoginStatus", { enumerable: true, get: function () { return accountManager_1.getAccountLoginStatus; } });
313
+ Object.defineProperty(exports, "getAccountLoginStatusAsync", { enumerable: true, get: function () { return accountManager_1.getAccountLoginStatusAsync; } });
290
314
  Object.defineProperty(exports, "finalizeAccountLogin", { enumerable: true, get: function () { return accountManager_1.finalizeAccountLogin; } });
315
+ Object.defineProperty(exports, "finalizeAccountLoginAsync", { enumerable: true, get: function () { return accountManager_1.finalizeAccountLoginAsync; } });
291
316
  Object.defineProperty(exports, "spawnAccountLogin", { enumerable: true, get: function () { return accountManager_1.spawnAccountLogin; } });
292
317
  Object.defineProperty(exports, "switchAccount", { enumerable: true, get: function () { return accountManager_1.switchAccount; } });
318
+ Object.defineProperty(exports, "switchAccountAsync", { enumerable: true, get: function () { return accountManager_1.switchAccountAsync; } });
293
319
  Object.defineProperty(exports, "listAllAccounts", { enumerable: true, get: function () { return accountManager_1.listAllAccounts; } });
294
320
  Object.defineProperty(exports, "resolveClaudeLoginCommand", { enumerable: true, get: function () { return accountManager_1.resolveClaudeLoginCommand; } });
295
321
  var accountRegistry_1 = require("./accountRegistry");
@@ -302,8 +328,12 @@ Object.defineProperty(exports, "upsertSavedAccountProfile", { enumerable: true,
302
328
  Object.defineProperty(exports, "setActiveSavedAccount", { enumerable: true, get: function () { return accountRegistry_1.setActiveSavedAccount; } });
303
329
  Object.defineProperty(exports, "replaceSavedAccountProfiles", { enumerable: true, get: function () { return accountRegistry_1.replaceSavedAccountProfiles; } });
304
330
  Object.defineProperty(exports, "removeSavedAccountProfile", { enumerable: true, get: function () { return accountRegistry_1.removeSavedAccountProfile; } });
331
+ var accountRegistry_2 = require("./accountRegistry");
332
+ Object.defineProperty(exports, "ACCOUNT_PROVIDER_IDS", { enumerable: true, get: function () { return accountRegistry_2.ACCOUNT_PROVIDER_IDS; } });
305
333
  var accountStatus_1 = require("./accountStatus");
306
334
  Object.defineProperty(exports, "getActiveAccountStatus", { enumerable: true, get: function () { return accountStatus_1.getActiveAccountStatus; } });
335
+ var accountChanges_1 = require("./accountChanges");
336
+ Object.defineProperty(exports, "onAccountsChanged", { enumerable: true, get: function () { return accountChanges_1.onAccountsChanged; } });
307
337
  var claudeProfiles_1 = require("./claudeProfiles");
308
338
  Object.defineProperty(exports, "getClaudeProfilesDir", { enumerable: true, get: function () { return claudeProfiles_1.getClaudeProfilesDir; } });
309
339
  Object.defineProperty(exports, "getClaudeProfileHome", { enumerable: true, get: function () { return claudeProfiles_1.getClaudeProfileHome; } });
@@ -322,8 +352,11 @@ Object.defineProperty(exports, "resolveActiveCodexAccount", { enumerable: true,
322
352
  Object.defineProperty(exports, "resolveSidekickCodexHome", { enumerable: true, get: function () { return codexProfiles_1.resolveSidekickCodexHome; } });
323
353
  Object.defineProperty(exports, "getCodexExecutionEnv", { enumerable: true, get: function () { return codexProfiles_1.getCodexExecutionEnv; } });
324
354
  Object.defineProperty(exports, "prepareCodexAccount", { enumerable: true, get: function () { return codexProfiles_1.prepareCodexAccount; } });
355
+ Object.defineProperty(exports, "prepareCodexAccountAsync", { enumerable: true, get: function () { return codexProfiles_1.prepareCodexAccountAsync; } });
325
356
  Object.defineProperty(exports, "finalizeCodexAccount", { enumerable: true, get: function () { return codexProfiles_1.finalizeCodexAccount; } });
357
+ Object.defineProperty(exports, "finalizeCodexAccountAsync", { enumerable: true, get: function () { return codexProfiles_1.finalizeCodexAccountAsync; } });
326
358
  Object.defineProperty(exports, "switchToCodexAccount", { enumerable: true, get: function () { return codexProfiles_1.switchToCodexAccount; } });
359
+ Object.defineProperty(exports, "switchToCodexAccountAsync", { enumerable: true, get: function () { return codexProfiles_1.switchToCodexAccountAsync; } });
327
360
  Object.defineProperty(exports, "removeCodexAccount", { enumerable: true, get: function () { return codexProfiles_1.removeCodexAccount; } });
328
361
  var terminalSync_1 = require("./terminalSync");
329
362
  Object.defineProperty(exports, "setTerminalActiveProfile", { enumerable: true, get: function () { return terminalSync_1.setTerminalActiveProfile; } });
@@ -339,6 +372,7 @@ Object.defineProperty(exports, "AutoSwitchController", { enumerable: true, get:
339
372
  // Quota
340
373
  var quota_1 = require("./quota");
341
374
  Object.defineProperty(exports, "FIVE_HOUR_WINDOW_MS", { enumerable: true, get: function () { return quota_1.FIVE_HOUR_WINDOW_MS; } });
375
+ Object.defineProperty(exports, "QUOTA_PROVIDER_IDS", { enumerable: true, get: function () { return quota_1.QUOTA_PROVIDER_IDS; } });
342
376
  Object.defineProperty(exports, "SEVEN_DAY_WINDOW_MS", { enumerable: true, get: function () { return quota_1.SEVEN_DAY_WINDOW_MS; } });
343
377
  Object.defineProperty(exports, "fetchQuota", { enumerable: true, get: function () { return quota_1.fetchQuota; } });
344
378
  Object.defineProperty(exports, "projectQuotaWindow", { enumerable: true, get: function () { return quota_1.projectQuotaWindow; } });
@@ -372,6 +406,8 @@ Object.defineProperty(exports, "readZaiCredentials", { enumerable: true, get: fu
372
406
  Object.defineProperty(exports, "resolveZaiQuota", { enumerable: true, get: function () { return zaiQuotaApi_1.resolveZaiQuota; } });
373
407
  var multiProviderQuotaService_1 = require("./multiProviderQuotaService");
374
408
  Object.defineProperty(exports, "MultiProviderQuotaService", { enumerable: true, get: function () { return multiProviderQuotaService_1.MultiProviderQuotaService; } });
409
+ var providerQuota_1 = require("./providerQuota");
410
+ Object.defineProperty(exports, "RUNTIME_QUOTA_PROVIDER_IDS", { enumerable: true, get: function () { return providerQuota_1.RUNTIME_QUOTA_PROVIDER_IDS; } });
375
411
  var BurnRateCalculator_1 = require("./statusline/BurnRateCalculator");
376
412
  Object.defineProperty(exports, "BurnRateCalculator", { enumerable: true, get: function () { return BurnRateCalculator_1.BurnRateCalculator; } });
377
413
  Object.defineProperty(exports, "estimateTimeToQuota", { enumerable: true, get: function () { return BurnRateCalculator_1.estimateTimeToQuota; } });
@@ -381,11 +417,13 @@ Object.defineProperty(exports, "selectStatuslineAccount", { enumerable: true, ge
381
417
  // Model Context
382
418
  var modelContext_1 = require("./modelContext");
383
419
  Object.defineProperty(exports, "getModelContextWindowSize", { enumerable: true, get: function () { return modelContext_1.getModelContextWindowSize; } });
420
+ Object.defineProperty(exports, "resolveModelContextWindow", { enumerable: true, get: function () { return modelContext_1.resolveModelContextWindow; } });
384
421
  Object.defineProperty(exports, "DEFAULT_CONTEXT_WINDOW", { enumerable: true, get: function () { return modelContext_1.DEFAULT_CONTEXT_WINDOW; } });
385
422
  // Model Info & Pricing
386
423
  var modelInfo_1 = require("./modelInfo");
387
424
  Object.defineProperty(exports, "parseModelId", { enumerable: true, get: function () { return modelInfo_1.parseModelId; } });
388
425
  Object.defineProperty(exports, "getModelPricing", { enumerable: true, get: function () { return modelInfo_1.getModelPricing; } });
426
+ Object.defineProperty(exports, "resolveModelPricing", { enumerable: true, get: function () { return modelInfo_1.resolveModelPricing; } });
389
427
  Object.defineProperty(exports, "getModelInfo", { enumerable: true, get: function () { return modelInfo_1.getModelInfo; } });
390
428
  Object.defineProperty(exports, "calculateCost", { enumerable: true, get: function () { return modelInfo_1.calculateCost; } });
391
429
  Object.defineProperty(exports, "calculateCostWithPricing", { enumerable: true, get: function () { return modelInfo_1.calculateCostWithPricing; } });
@@ -396,6 +434,13 @@ Object.defineProperty(exports, "getModelDisplayInfo", { enumerable: true, get: f
396
434
  Object.defineProperty(exports, "compareModelIds", { enumerable: true, get: function () { return modelInfo_1.compareModelIds; } });
397
435
  Object.defineProperty(exports, "sortModelIds", { enumerable: true, get: function () { return modelInfo_1.sortModelIds; } });
398
436
  Object.defineProperty(exports, "formatCost", { enumerable: true, get: function () { return modelInfo_1.formatCost; } });
437
+ Object.defineProperty(exports, "MODEL_PROVIDER_IDS", { enumerable: true, get: function () { return modelInfo_1.MODEL_PROVIDER_IDS; } });
438
+ var modelCatalog_1 = require("./modelCatalog");
439
+ Object.defineProperty(exports, "exportResolvedModelCatalog", { enumerable: true, get: function () { return modelCatalog_1.exportResolvedModelCatalog; } });
440
+ Object.defineProperty(exports, "importResolvedModelCatalog", { enumerable: true, get: function () { return modelCatalog_1.importResolvedModelCatalog; } });
441
+ Object.defineProperty(exports, "registerModelAlias", { enumerable: true, get: function () { return modelCatalog_1.registerModelAlias; } });
442
+ Object.defineProperty(exports, "resolveModelAlias", { enumerable: true, get: function () { return modelCatalog_1.resolveModelAlias; } });
443
+ Object.defineProperty(exports, "RESOLVED_MODEL_CATALOG_SCHEMA_VERSION", { enumerable: true, get: function () { return modelCatalog_1.RESOLVED_MODEL_CATALOG_SCHEMA_VERSION; } });
399
444
  // Pricing Catalog (LiteLLM hydration) — Node-only. Safe for extension host
400
445
  // and CLI; do NOT import from browser bundles (webviews).
401
446
  var pricingCatalog_1 = require("./pricingCatalog");
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Register a short or host-specific model name that resolves to a canonical ID.
3
+ * Invalid and cyclic registrations are rejected without changing the registry.
4
+ */
5
+ export declare function registerModelAlias(alias: string, canonicalId: string): boolean;
6
+ /** Resolve a registered alias, returning normalized input when no alias exists. */
7
+ export declare function resolveModelAlias(modelId: string): string;
8
+ /** Internal snapshot used by the cross-realm catalog serializer. */
9
+ export declare function _getModelAliases(): Record<string, string>;
10
+ /** Internal hydration hook used by the cross-realm catalog importer. */
11
+ export declare function _importModelAliases(values: Record<string, string>): void;
12
+ /** Internal test hook. */
13
+ export declare function _clearModelAliases(): void;
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerModelAlias = registerModelAlias;
4
+ exports.resolveModelAlias = resolveModelAlias;
5
+ exports._getModelAliases = _getModelAliases;
6
+ exports._importModelAliases = _importModelAliases;
7
+ exports._clearModelAliases = _clearModelAliases;
8
+ const aliases = new Map();
9
+ function normalizeAlias(value) {
10
+ return value.trim().toLowerCase();
11
+ }
12
+ /**
13
+ * Register a short or host-specific model name that resolves to a canonical ID.
14
+ * Invalid and cyclic registrations are rejected without changing the registry.
15
+ */
16
+ function registerModelAlias(alias, canonicalId) {
17
+ const normalizedAlias = normalizeAlias(alias);
18
+ const normalizedCanonicalId = normalizeAlias(canonicalId);
19
+ if (!normalizedAlias || !normalizedCanonicalId || normalizedAlias === normalizedCanonicalId) {
20
+ return false;
21
+ }
22
+ let candidate = normalizedCanonicalId;
23
+ const visited = new Set([normalizedAlias]);
24
+ while (aliases.has(candidate)) {
25
+ if (visited.has(candidate))
26
+ return false;
27
+ visited.add(candidate);
28
+ candidate = aliases.get(candidate);
29
+ }
30
+ if (candidate === normalizedAlias)
31
+ return false;
32
+ aliases.set(normalizedAlias, normalizedCanonicalId);
33
+ return true;
34
+ }
35
+ /** Resolve a registered alias, returning normalized input when no alias exists. */
36
+ function resolveModelAlias(modelId) {
37
+ let current = normalizeAlias(modelId);
38
+ const visited = new Set();
39
+ while (aliases.has(current) && !visited.has(current)) {
40
+ visited.add(current);
41
+ current = aliases.get(current);
42
+ }
43
+ return current;
44
+ }
45
+ /** Internal snapshot used by the cross-realm catalog serializer. */
46
+ function _getModelAliases() {
47
+ return Object.fromEntries(aliases);
48
+ }
49
+ /** Internal hydration hook used by the cross-realm catalog importer. */
50
+ function _importModelAliases(values) {
51
+ for (const [alias, canonicalId] of Object.entries(values)) {
52
+ registerModelAlias(alias, canonicalId);
53
+ }
54
+ }
55
+ /** Internal test hook. */
56
+ function _clearModelAliases() {
57
+ aliases.clear();
58
+ }
@@ -0,0 +1,32 @@
1
+ import { type ResolvedModelContextWindow } from './modelContext';
2
+ import { type ResolvedModelPricing } from './modelInfo';
3
+ import { registerModelAlias, resolveModelAlias } from './modelAliases';
4
+ export declare const RESOLVED_MODEL_CATALOG_SCHEMA_VERSION: 1;
5
+ export interface ResolvedModelCatalogEntry {
6
+ id: string;
7
+ canonicalId: string;
8
+ contextWindow: ResolvedModelContextWindow;
9
+ pricing: ResolvedModelPricing;
10
+ }
11
+ export interface ResolvedModelCatalogSnapshot {
12
+ schemaVersion: typeof RESOLVED_MODEL_CATALOG_SCHEMA_VERSION;
13
+ models: Record<string, ResolvedModelCatalogEntry>;
14
+ aliases: Record<string, string>;
15
+ }
16
+ export interface ImportResolvedModelCatalogResult {
17
+ imported: number;
18
+ diagnostics: string[];
19
+ }
20
+ /**
21
+ * Export an entirely serializable catalog suitable for IPC to another JS realm.
22
+ * Each entry records published, observed, and tier-effective context windows,
23
+ * plus pricing match provenance (including prefix inheritance).
24
+ */
25
+ export declare function exportResolvedModelCatalog(ids?: readonly string[]): ResolvedModelCatalogSnapshot;
26
+ /**
27
+ * Hydrate exact model resolutions exported by another bundle realm.
28
+ * Invalid entries are skipped and reported; import never partially mutates an
29
+ * entry or throws for malformed IPC data.
30
+ */
31
+ export declare function importResolvedModelCatalog(snapshot: unknown): ImportResolvedModelCatalogResult;
32
+ export { registerModelAlias, resolveModelAlias };
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveModelAlias = exports.registerModelAlias = exports.RESOLVED_MODEL_CATALOG_SCHEMA_VERSION = void 0;
4
+ exports.exportResolvedModelCatalog = exportResolvedModelCatalog;
5
+ exports.importResolvedModelCatalog = importResolvedModelCatalog;
6
+ const modelContext_1 = require("./modelContext");
7
+ const modelInfo_1 = require("./modelInfo");
8
+ const modelAliases_1 = require("./modelAliases");
9
+ Object.defineProperty(exports, "registerModelAlias", { enumerable: true, get: function () { return modelAliases_1.registerModelAlias; } });
10
+ Object.defineProperty(exports, "resolveModelAlias", { enumerable: true, get: function () { return modelAliases_1.resolveModelAlias; } });
11
+ exports.RESOLVED_MODEL_CATALOG_SCHEMA_VERSION = 1;
12
+ function normalizedIds(ids) {
13
+ if (ids) {
14
+ return Array.from(new Set(ids.map((id) => id.trim()).filter(Boolean)));
15
+ }
16
+ const aliases = (0, modelAliases_1._getModelAliases)();
17
+ return Array.from(new Set([
18
+ ...(0, modelContext_1._getModelContextIds)(),
19
+ ...(0, modelInfo_1._getModelPricingIds)(),
20
+ ...Object.keys(aliases),
21
+ ...Object.values(aliases),
22
+ ])).sort();
23
+ }
24
+ /**
25
+ * Export an entirely serializable catalog suitable for IPC to another JS realm.
26
+ * Each entry records published, observed, and tier-effective context windows,
27
+ * plus pricing match provenance (including prefix inheritance).
28
+ */
29
+ function exportResolvedModelCatalog(ids) {
30
+ const models = {};
31
+ const selectedIds = normalizedIds(ids);
32
+ for (const id of selectedIds) {
33
+ const canonicalId = (0, modelAliases_1.resolveModelAlias)(id);
34
+ models[id] = {
35
+ id,
36
+ canonicalId,
37
+ contextWindow: (0, modelContext_1.resolveModelContextWindow)(id),
38
+ pricing: (0, modelInfo_1.resolveModelPricing)(id),
39
+ };
40
+ }
41
+ const selectedCanonicalIds = new Set(Object.values(models).flatMap(({ id, canonicalId }) => [id, canonicalId]));
42
+ const aliases = Object.fromEntries(Object.entries((0, modelAliases_1._getModelAliases)()).filter(([alias, canonicalId]) => selectedCanonicalIds.has(alias) || selectedCanonicalIds.has(canonicalId)));
43
+ return { schemaVersion: exports.RESOLVED_MODEL_CATALOG_SCHEMA_VERSION, models, aliases };
44
+ }
45
+ /**
46
+ * Hydrate exact model resolutions exported by another bundle realm.
47
+ * Invalid entries are skipped and reported; import never partially mutates an
48
+ * entry or throws for malformed IPC data.
49
+ */
50
+ function importResolvedModelCatalog(snapshot) {
51
+ const diagnostics = [];
52
+ if (!isRecord(snapshot) || snapshot.schemaVersion !== exports.RESOLVED_MODEL_CATALOG_SCHEMA_VERSION) {
53
+ return { imported: 0, diagnostics: ['unsupported resolved model catalog snapshot'] };
54
+ }
55
+ const aliases = isStringRecord(snapshot.aliases) ? snapshot.aliases : {};
56
+ (0, modelAliases_1._importModelAliases)(aliases);
57
+ const contexts = {};
58
+ const prices = {};
59
+ const models = isRecord(snapshot.models) ? snapshot.models : {};
60
+ let imported = 0;
61
+ for (const [key, rawEntry] of Object.entries(models)) {
62
+ if (!isResolvedEntry(rawEntry)) {
63
+ diagnostics.push(`ignored invalid model catalog entry: ${key}`);
64
+ continue;
65
+ }
66
+ const entry = rawEntry;
67
+ const normalizedKey = key.trim().toLowerCase();
68
+ const canonicalId = entry.canonicalId.trim().toLowerCase();
69
+ const context = cloneContext(entry.contextWindow, entry.id, canonicalId);
70
+ const pricing = clonePricing(entry.pricing, entry.id, canonicalId);
71
+ // Unresolved facets are not importable facts: pinning a 'default' window
72
+ // or 'none' pricing would outrank data the importing realm can resolve
73
+ // (or later learn) on its own.
74
+ const contextResolved = context.provenance.source !== 'default';
75
+ const pricingResolved = pricing.provenance.source !== 'none';
76
+ if (!contextResolved && !pricingResolved) {
77
+ diagnostics.push(`skipped unresolved model catalog entry: ${key}`);
78
+ continue;
79
+ }
80
+ for (const id of new Set([normalizedKey, entry.id.trim().toLowerCase(), canonicalId])) {
81
+ if (!id)
82
+ continue;
83
+ if (contextResolved)
84
+ contexts[id] = context;
85
+ if (pricingResolved)
86
+ prices[id] = pricing;
87
+ }
88
+ imported++;
89
+ }
90
+ (0, modelContext_1._setImportedResolvedContextWindows)(contexts);
91
+ (0, modelInfo_1._setImportedResolvedPricing)(prices);
92
+ return { imported, diagnostics };
93
+ }
94
+ function cloneContext(value, modelId, canonicalModelId) {
95
+ return {
96
+ ...value,
97
+ modelId,
98
+ canonicalModelId,
99
+ provenance: { ...value.provenance },
100
+ };
101
+ }
102
+ function clonePricing(value, modelId, canonicalModelId) {
103
+ return {
104
+ ...value,
105
+ modelId,
106
+ canonicalModelId,
107
+ pricing: value.pricing ? { ...value.pricing } : null,
108
+ provenance: { ...value.provenance },
109
+ };
110
+ }
111
+ function isRecord(value) {
112
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
113
+ }
114
+ function isStringRecord(value) {
115
+ return isRecord(value) && Object.values(value).every((item) => typeof item === 'string');
116
+ }
117
+ function validPricing(value) {
118
+ if (!isRecord(value))
119
+ return false;
120
+ return [
121
+ value.inputCostPerMillion,
122
+ value.outputCostPerMillion,
123
+ value.cacheWriteCostPerMillion,
124
+ value.cacheReadCostPerMillion,
125
+ ].every((item) => typeof item === 'number' && Number.isFinite(item) && item >= 0);
126
+ }
127
+ function isResolvedEntry(value) {
128
+ if (!isRecord(value) || typeof value.id !== 'string' || typeof value.canonicalId !== 'string') {
129
+ return false;
130
+ }
131
+ const context = value.contextWindow;
132
+ const pricing = value.pricing;
133
+ if (!isRecord(context) || !isRecord(pricing))
134
+ return false;
135
+ if (typeof context.tierEffective !== 'number' ||
136
+ !Number.isFinite(context.tierEffective) ||
137
+ context.tierEffective <= 0 ||
138
+ (context.published !== null && typeof context.published !== 'number') ||
139
+ (context.observed !== null && typeof context.observed !== 'number') ||
140
+ !isRecord(context.provenance) ||
141
+ !isRecord(pricing.provenance)) {
142
+ return false;
143
+ }
144
+ return pricing.pricing === null || validPricing(pricing.pricing);
145
+ }
@@ -9,13 +9,19 @@
9
9
  * model, persisted across runs by `observedContextWindows.ts`. Reflects the
10
10
  * effective window for this account/tier, which can be well below the
11
11
  * model's published maximum.
12
- * 3. Catalog overrides — `max_input_tokens` from the LiteLLM catalog, hydrated
12
+ * 3. Imported resolutions — exact entries hydrated from another realm via
13
+ * `importResolvedModelCatalog()`. Below local observed data (a window this
14
+ * realm saw first-hand is fresher than a transferred snapshot), above the
15
+ * catalog.
16
+ * 4. Catalog overrides — `max_input_tokens` from the LiteLLM catalog, hydrated
13
17
  * by `pricingCatalog.ts`. Keeps new models correct without a code change.
14
- * 4. The static table below — offline baseline of last resort.
18
+ * 5. The static table below — offline baseline of last resort.
15
19
  *
16
20
  * Within that order, match quality comes first: every layer is tried for an
17
21
  * exact hit before any layer is tried for a prefix hit. See
18
- * `getModelContextWindowSize`.
22
+ * `getModelContextWindowSize`. The raw (alias) id is tried before its
23
+ * canonical target at every step, so registering an alias never orphans data
24
+ * recorded under the alias itself.
19
25
  *
20
26
  * Layers 2 and 3 are pushed in by Node-only modules through the `_set*` hooks,
21
27
  * so this file stays browser-safe (no node:fs, no fetch) and can be bundled for
@@ -23,6 +29,21 @@
23
29
  */
24
30
  /** Default context window size when model is unknown. */
25
31
  export declare const DEFAULT_CONTEXT_WINDOW = 200000;
32
+ export type ModelContextWindowSource = 'explicit-1m' | 'imported' | 'observed' | 'catalog' | 'static' | 'default';
33
+ export type ModelCatalogMatch = 'exact' | 'prefix' | 'default';
34
+ export interface ModelContextWindowProvenance {
35
+ source: ModelContextWindowSource;
36
+ match: ModelCatalogMatch;
37
+ matchedModelId?: string;
38
+ }
39
+ export interface ResolvedModelContextWindow {
40
+ modelId: string;
41
+ canonicalModelId: string;
42
+ published: number | null;
43
+ observed: number | null;
44
+ tierEffective: number;
45
+ provenance: ModelContextWindowProvenance;
46
+ }
26
47
  /**
27
48
  * Internal: replace the observed-context-window map. Called by
28
49
  * `observedContextWindows.ts` on load and on each newly observed value.
@@ -43,6 +64,18 @@ export declare function _setCatalogContextWindows(overrides: Record<string, numb
43
64
  export declare function _getCatalogContextWindows(): Record<string, number>;
44
65
  /** Internal: clear catalog overrides (used by tests and when disabling hydration). */
45
66
  export declare function _clearCatalogContextWindows(): void;
67
+ /**
68
+ * Internal: hydrate exact, already-resolved context data from another realm.
69
+ * Merges so successive partial imports accumulate (aliases already merge);
70
+ * use `_clearImportedResolvedContextWindows` to reset.
71
+ */
72
+ export declare function _setImportedResolvedContextWindows(values: Record<string, ResolvedModelContextWindow>): void;
73
+ /** Internal test hook. */
74
+ export declare function _clearImportedResolvedContextWindows(): void;
75
+ /** Internal: list every ID known to the context resolver. */
76
+ export declare function _getModelContextIds(): string[];
77
+ /** Resolve published, observed, and tier-effective context windows with provenance. */
78
+ export declare function resolveModelContextWindow(modelId?: string): ResolvedModelContextWindow;
46
79
  /**
47
80
  * Returns the context window size for a model ID.
48
81
  *