sidekick-shared 0.21.2 → 0.21.3

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 (73) hide show
  1. package/README.md +45 -45
  2. package/dist/accountManager.js +9 -7
  3. package/dist/accountRegistry.js +18 -14
  4. package/dist/accountStatus.js +4 -1
  5. package/dist/accounts.js +60 -25
  6. package/dist/aggregation/EventAggregator.d.ts +14 -11
  7. package/dist/aggregation/EventAggregator.js +68 -31
  8. package/dist/aggregation/PatternExtractor.js +5 -4
  9. package/dist/autoSwitch.js +6 -12
  10. package/dist/claudeProfiles.js +3 -3
  11. package/dist/codexProfiles.js +45 -22
  12. package/dist/codexQuota.js +44 -16
  13. package/dist/codexQuotaWatcher.js +10 -3
  14. package/dist/context/composer.js +8 -6
  15. package/dist/context/sessionContext.js +12 -9
  16. package/dist/credentialIO.js +10 -8
  17. package/dist/extractors/sessionAssets.js +9 -1
  18. package/dist/extractors/sources/claudeAssets.js +7 -1
  19. package/dist/extractors/sources/codexAssets.js +14 -3
  20. package/dist/extractors/toolCall.js +1 -4
  21. package/dist/formatters/eventHighlighter.js +148 -28
  22. package/dist/formatters/noiseClassifier.js +3 -11
  23. package/dist/formatters/sessionDump.js +22 -13
  24. package/dist/formatters/toolSummary.js +1 -3
  25. package/dist/index.d.ts +23 -23
  26. package/dist/index.js +7 -3
  27. package/dist/modelContext.js +10 -8
  28. package/dist/modelInfo.js +11 -6
  29. package/dist/multiProviderQuotaService.js +10 -7
  30. package/dist/parsers/codexParser.js +170 -103
  31. package/dist/parsers/debugLogParser.js +5 -4
  32. package/dist/parsers/openCodeParser.js +66 -48
  33. package/dist/parsers/planExtractor.js +3 -3
  34. package/dist/parsers/sessionActivityDetector.js +10 -6
  35. package/dist/parsers/sessionPathResolver.js +29 -34
  36. package/dist/parsers/subagentScanner.js +21 -20
  37. package/dist/parsers/subagentTraceParser.js +7 -4
  38. package/dist/phrases.js +11 -11
  39. package/dist/providerStatus.js +3 -4
  40. package/dist/providers/claudeCode.js +3 -1
  41. package/dist/providers/codex.js +35 -14
  42. package/dist/providers/codexDatabase.js +14 -5
  43. package/dist/providers/detect.js +10 -6
  44. package/dist/providers/openCode.js +91 -63
  45. package/dist/providers/openCodeDatabase.js +44 -17
  46. package/dist/quota.d.ts +19 -0
  47. package/dist/quota.js +50 -8
  48. package/dist/quotaHistory.js +10 -3
  49. package/dist/quotaSnapshots.js +2 -2
  50. package/dist/readers/decisions.js +1 -1
  51. package/dist/readers/notes.js +5 -3
  52. package/dist/readers/plans.js +43 -23
  53. package/dist/readers/tasks.js +1 -1
  54. package/dist/report/htmlHelpers.js +135 -16
  55. package/dist/report/htmlReportGenerator.js +38 -12
  56. package/dist/report/transcriptParser.js +8 -2
  57. package/dist/schemas/index.d.ts +4 -4
  58. package/dist/schemas/quota.js +2 -10
  59. package/dist/schemas/sessionEvent.js +20 -10
  60. package/dist/search/advancedFilter.js +3 -3
  61. package/dist/search/sessionSearch.js +10 -4
  62. package/dist/terminalSync.js +4 -2
  63. package/dist/turns/assistantTurn.js +5 -1
  64. package/dist/watchers/eventBridge.js +56 -26
  65. package/dist/watchers/factory.js +5 -2
  66. package/dist/watchers/jsonlTail.js +3 -1
  67. package/dist/watchers/jsonlWatcher.js +128 -52
  68. package/dist/watchers/providerReaderWatcher.js +3 -1
  69. package/dist/watchers/sqliteWatcher.js +52 -22
  70. package/dist/zaiQuota.js +6 -10
  71. package/dist/zaiQuotaApi.js +13 -5
  72. package/dist/zaiQuotaWatcher.js +1 -1
  73. package/package.json +5 -2
package/dist/index.d.ts CHANGED
@@ -8,13 +8,13 @@ export type { PersistedTask, TaskPersistenceStore, TaskStatus } from './types/ta
8
8
  export { TASK_PERSISTENCE_SCHEMA_VERSION, normalizeTaskStatus } from './types/taskPersistence';
9
9
  export type { DecisionEntry, DecisionLogStore, DecisionSource } from './types/decisionLog';
10
10
  export { DECISION_LOG_SCHEMA_VERSION } from './types/decisionLog';
11
- export type { KnowledgeNote, KnowledgeNoteStore, KnowledgeNoteType, KnowledgeNoteSource, KnowledgeNoteStatus, KnowledgeNoteImportance } from './types/knowledgeNote';
12
- export { KNOWLEDGE_NOTE_SCHEMA_VERSION, IMPORTANCE_DECAY_FACTORS, STALENESS_THRESHOLDS } from './types/knowledgeNote';
13
- export type { HistoricalDataStore, DailyData, MonthlyData, AllTimeStats, TokenTotals, ModelUsageRecord, ToolUsageRecord, SessionSummary } from './types/historicalData';
11
+ export type { KnowledgeNote, KnowledgeNoteStore, KnowledgeNoteType, KnowledgeNoteSource, KnowledgeNoteStatus, KnowledgeNoteImportance, } from './types/knowledgeNote';
12
+ export { KNOWLEDGE_NOTE_SCHEMA_VERSION, IMPORTANCE_DECAY_FACTORS, STALENESS_THRESHOLDS, } from './types/knowledgeNote';
13
+ export type { HistoricalDataStore, DailyData, MonthlyData, AllTimeStats, TokenTotals, ModelUsageRecord, ToolUsageRecord, SessionSummary, } from './types/historicalData';
14
14
  export { HISTORICAL_DATA_SCHEMA_VERSION, createEmptyTokenTotals } from './types/historicalData';
15
- export type { PersistedPlan, PersistedPlanStep, PlanHistoryStore, PlanStepStatus, PlanStatus, PlanSource, PlanStepComplexity } from './types/plan';
15
+ export type { PersistedPlan, PersistedPlanStep, PlanHistoryStore, PlanStepStatus, PlanStatus, PlanSource, PlanStepComplexity, } from './types/plan';
16
16
  export { PLAN_SCHEMA_VERSION, MAX_PLANS_PER_PROJECT } from './types/plan';
17
- export { getConfigDir, getProjectDataPath, getGlobalDataPath, encodeWorkspacePath, getProjectSlug, getProjectSlugRaw } from './paths';
17
+ export { getConfigDir, getProjectDataPath, getGlobalDataPath, encodeWorkspacePath, getProjectSlug, getProjectSlugRaw, } from './paths';
18
18
  export { readTasks } from './readers/tasks';
19
19
  export type { ReadTasksOptions } from './readers/tasks';
20
20
  export { readDecisions } from './readers/decisions';
@@ -23,9 +23,9 @@ export { readNotes } from './readers/notes';
23
23
  export type { ReadNotesOptions } from './readers/notes';
24
24
  export { readHistory } from './readers/history';
25
25
  export { readLatestHandoff } from './readers/handoff';
26
- export { readPlans, getLatestPlan, writePlans, getPlanAnalytics, readClaudeCodePlanFiles } from './readers/plans';
26
+ export { readPlans, getLatestPlan, writePlans, getPlanAnalytics, readClaudeCodePlanFiles, } from './readers/plans';
27
27
  export type { ReadPlansOptions, PlanAnalytics } from './readers/plans';
28
- export type { ProviderId, SessionProvider, SessionProviderBase, SessionFileStats, SessionFileInfo, SearchHit, ProjectFolderInfo, SessionReader, ProviderRuntimeStatus } from './providers/types';
28
+ export type { ProviderId, SessionProvider, SessionProviderBase, SessionFileStats, SessionFileInfo, SearchHit, ProjectFolderInfo, SessionReader, ProviderRuntimeStatus, } from './providers/types';
29
29
  export { detectProvider, getAllDetectedProviders } from './providers/detect';
30
30
  export { ClaudeCodeProvider } from './providers/claudeCode';
31
31
  export { OpenCodeProvider, getOpenCodeDataDir } from './providers/openCode';
@@ -33,10 +33,10 @@ export { CodexProvider } from './providers/codex';
33
33
  export { JsonlParser, TRUNCATION_PATTERNS } from './parsers/jsonl';
34
34
  export type { RawSessionEvent, JsonlParserCallbacks, JsonlParserOptions } from './parsers/jsonl';
35
35
  export { normalizeToolName, normalizeToolInput, detectPlanModeFromText, convertOpenCodeMessage, parseDbMessageData, parseDbPartData, } from './parsers/openCodeParser';
36
- export { CodexRolloutParser, extractPatchFilePaths, normalizeCodexToolName, normalizeCodexToolInput } from './parsers/codexParser';
36
+ export { CodexRolloutParser, extractPatchFilePaths, normalizeCodexToolName, normalizeCodexToolInput, } from './parsers/codexParser';
37
37
  export { scanSubagentDir, extractTaskInfo } from './parsers/subagentScanner';
38
38
  export { detectSessionActivity } from './parsers/sessionActivityDetector';
39
- export type { SessionActivityState, SessionActivityResult } from './parsers/sessionActivityDetector';
39
+ export type { SessionActivityState, SessionActivityResult, } from './parsers/sessionActivityDetector';
40
40
  export { encodeWorkspacePath as encodeClaudeWorkspacePath, getSessionDirectory as getClaudeSessionDirectory, discoverSessionDirectory, findActiveSession as findActiveClaudeSession, findAllSessions as findAllClaudeSessions, findSessionsInDirectory, findSubdirectorySessionDirs, getMostRecentlyActiveSessionDir, decodeEncodedPath, getAllProjectFolders as getAllClaudeProjectFolders, resolveWorktreeMainRepo, discoverWorktreeSiblings, findAllSessionsWithWorktrees, } from './parsers/sessionPathResolver';
41
41
  export { scanSubagentTraces } from './parsers/subagentTraceParser';
42
42
  export type { SubagentTrace, SubagentTraceEvent } from './parsers/subagentTraceParser';
@@ -47,18 +47,18 @@ export { CodexDatabase } from './providers/codexDatabase';
47
47
  export { searchSessions } from './search/sessionSearch';
48
48
  export type { SearchResult } from './search/sessionSearch';
49
49
  export { FilterEngine } from './search/advancedFilter';
50
- export type { FilterMode, FilterState, HighlightFormat as FilterHighlightFormat } from './search/advancedFilter';
50
+ export type { FilterMode, FilterState, HighlightFormat as FilterHighlightFormat, } from './search/advancedFilter';
51
51
  export { composeContext } from './context/composer';
52
52
  export type { Fidelity, ContextResult } from './context/composer';
53
53
  export { buildSessionContextSnapshot, calculateSessionContextPressure, createSessionContextProjector, readSessionContextSnapshot, } from './context/sessionContext';
54
54
  export type { BuildSessionContextSnapshotOptions, ReadSessionContextSnapshotOptions, SessionContextCapabilities, SessionContextLayerBreakdown, SessionContextPressure, SessionContextProjector, SessionContextSnapshot, SessionContextSource, SessionContextSourceType, } from './context/sessionContext';
55
55
  export { assistantTurnEventsFromSessionEvents, extractTurnSubagents, isAssistantTurnSubagentTool, reasoningSummary, segmentAssistantTurn, } from './turns/assistantTurn';
56
56
  export type { AssistantTurnEvent, AssistantTurnEventType, AssistantTurnProcess, AssistantTurnProcessStep, AssistantTurnProjection, AssistantTurnSubagent, AssistantTurnSubagentStatus, AssistantTurnTimelineItem, AssistantTurnToolRef, ExtractTurnSubagentsOptions, ReasoningSummary, SegmentAssistantTurnOptions, } from './turns/assistantTurn';
57
- export { PlanExtractor, parsePlanMarkdown as parsePlanMarkdownShared, extractProposedPlan as extractProposedPlanShared } from './parsers/planExtractor';
57
+ export { PlanExtractor, parsePlanMarkdown as parsePlanMarkdownShared, extractProposedPlan as extractProposedPlanShared, } from './parsers/planExtractor';
58
58
  export type { ExtractedPlan, ExtractedPlanStep } from './parsers/planExtractor';
59
59
  export { parseChangelog } from './parsers/changelogParser';
60
60
  export type { ChangelogEntry } from './parsers/changelogParser';
61
- export type { FollowEvent, FollowEventType, SessionWatcher, SessionWatcherCallbacks } from './watchers/types';
61
+ export type { FollowEvent, FollowEventType, SessionWatcher, SessionWatcherCallbacks, } from './watchers/types';
62
62
  export { createWatcher } from './watchers/factory';
63
63
  export type { CreateWatcherOptions } from './watchers/factory';
64
64
  export { toFollowEvents } from './watchers/eventBridge';
@@ -69,15 +69,15 @@ export type { FormatDurationMsOptions, FormatTokenCountOptions } from './formatt
69
69
  export { formatToolSummary } from './formatters/toolSummary';
70
70
  export { isHardNoise, isHardNoiseFollowEvent, getSoftNoiseReason, classifyMessage, classifyFollowEvent, shouldMergeWithPrevious, classifyNoise, } from './formatters/noiseClassifier';
71
71
  export type { MessageClassification, NoiseResult } from './formatters/noiseClassifier';
72
- export { formatSessionText, formatSessionMarkdown, formatSessionJson } from './formatters/sessionDump';
72
+ export { formatSessionText, formatSessionMarkdown, formatSessionJson, } from './formatters/sessionDump';
73
73
  export type { SessionDumpOptions } from './formatters/sessionDump';
74
- export { highlight as highlightEvent, clearHighlightCache, HIGHLIGHT_CSS } from './formatters/eventHighlighter';
74
+ export { highlight as highlightEvent, clearHighlightCache, HIGHLIGHT_CSS, } from './formatters/eventHighlighter';
75
75
  export type { HighlightFormat } from './formatters/eventHighlighter';
76
76
  export { ALL_PHRASES, PHRASE_CATEGORIES, getRandomPhrase } from './phrases';
77
77
  export type { PhraseCategory } from './phrases';
78
78
  export { EventAggregator, parseTodoDependencies } from './aggregation/EventAggregator';
79
79
  export type { SerializedAggregatorState } from './aggregation/EventAggregator';
80
- export { saveSnapshot, loadSnapshot, deleteSnapshot, isSnapshotValid, getSnapshotPath } from './aggregation/snapshot';
80
+ export { saveSnapshot, loadSnapshot, deleteSnapshot, isSnapshotValid, getSnapshotPath, } from './aggregation/snapshot';
81
81
  export type { SessionSnapshot } from './aggregation/snapshot';
82
82
  export type { EventAggregatorOptions, AggregatedTokens, ModelUsageStats, BurnRateInfo, SubagentLifecycle, AggregatedMetrics, FrequencyMetric, PatternMetric, HeatmapBucketMetric, } from './aggregation/types';
83
83
  export { FrequencyTracker } from './aggregation/FrequencyTracker';
@@ -86,15 +86,15 @@ export { HeatmapTracker } from './aggregation/HeatmapTracker';
86
86
  export type { HeatmapBucket, SerializedHeatmapState } from './aggregation/HeatmapTracker';
87
87
  export { PatternExtractor } from './aggregation/PatternExtractor';
88
88
  export type { PatternCluster, SerializedPatternState } from './aggregation/PatternExtractor';
89
- export { generateHtmlReport, parseTranscript, parseTranscriptFromEvents, openInBrowser } from './report';
89
+ export { generateHtmlReport, parseTranscript, parseTranscriptFromEvents, openInBrowser, } from './report';
90
90
  export type { TranscriptContentBlock, TranscriptEntry, HtmlReportOptions } from './report';
91
91
  export { readActiveCredentials, writeActiveCredentials } from './credentialIO';
92
92
  export { readClaudeMaxCredentials, readClaudeMaxAccessTokenSync } from './credentials';
93
93
  export type { ClaudeMaxCredentials } from './credentials';
94
- export { ensureDefaultAccounts, } from './ensureDefaultAccounts';
94
+ export { ensureDefaultAccounts } from './ensureDefaultAccounts';
95
95
  export type { EnsureDefaultAccountStatus, EnsureDefaultAccountsOptions, EnsureDefaultAccountsResult, } from './ensureDefaultAccounts';
96
96
  export { readAccountRegistry, writeAccountRegistry, readActiveClaudeAccount, addCurrentAccount, switchToAccount, resolveActiveClaudeHome, applyActiveClaudeToLiveHome, reconcileClaudeAuthState, removeAccount, listAccounts, getActiveAccount, isMultiAccountEnabled, } from './accounts';
97
- export type { AccountEntry, AccountRegistry, ActiveAccountInfo, AccountManagerResult } from './accounts';
97
+ export type { AccountEntry, AccountRegistry, ActiveAccountInfo, AccountManagerResult, } from './accounts';
98
98
  export { beginAccountLogin, getAccountLoginStatus, finalizeAccountLogin, spawnAccountLogin, switchAccount, listAllAccounts, resolveClaudeLoginCommand, } from './accountManager';
99
99
  export type { AccountLoginCommand, AccountLoginState, AccountLoginStatus, BeginAccountLoginResult, FinalizeAccountLoginOptions, ListAllAccountsResult, SpawnAccountLoginOptions, } from './accountManager';
100
100
  export { getAccountsDir, readSavedAccountRegistry, writeSavedAccountRegistry, listSavedAccountProfiles, getActiveSavedAccount, upsertSavedAccountProfile, setActiveSavedAccount, replaceSavedAccountProfiles, removeSavedAccountProfile, } from './accountRegistry';
@@ -106,10 +106,10 @@ export type { ClaudeProfileIdentity } from './claudeProfiles';
106
106
  export { getCodexProfilesDir, getCodexProfileHome, getCodexMonitoringHomes, getSystemCodexHome, listCodexAccounts, getActiveCodexAccount, resolveSidekickCodexHome, getCodexExecutionEnv, prepareCodexAccount, finalizeCodexAccount, switchToCodexAccount, removeCodexAccount, } from './codexProfiles';
107
107
  export type { CodexAccountManagerResult } from './codexProfiles';
108
108
  export { setTerminalActiveProfile, installShellHook, uninstallShellHook, isShellHookInstalled, writeLauncher, removeLauncher, } from './terminalSync';
109
- export { DEFAULT_AUTO_SWITCH_CONFIG, decideAutoSwitch, AutoSwitchController, } from './autoSwitch';
109
+ export { DEFAULT_AUTO_SWITCH_CONFIG, decideAutoSwitch, AutoSwitchController } from './autoSwitch';
110
110
  export type { AutoSwitchActiveAccount, AutoSwitchCandidate, AutoSwitchConfig, AutoSwitchControllerOptions, AutoSwitchDecision, AutoSwitchTransitionEvent, } from './autoSwitch';
111
- export { fetchQuota } from './quota';
112
- export type { QuotaWindow, QuotaState } from './quota';
111
+ export { FIVE_HOUR_WINDOW_MS, SEVEN_DAY_WINDOW_MS, fetchQuota, projectQuotaWindow, withQuotaProjections, } from './quota';
112
+ export type { QuotaProjectionInput, QuotaWindow, QuotaState } from './quota';
113
113
  export { describeQuotaFailure } from './quotaPresentation';
114
114
  export type { QuotaFailureDescriptor } from './quotaPresentation';
115
115
  export { QuotaPoller } from './quotaPoller';
@@ -134,11 +134,11 @@ export type { QuotaSnapshotProviderId } from './quotaSnapshots';
134
134
  export { getModelContextWindowSize, DEFAULT_CONTEXT_WINDOW } from './modelContext';
135
135
  export { parseModelId, getModelPricing, getModelInfo, calculateCost, calculateCostWithPricing, calculateCostWithProvenance, mergeCostSources, shortModelName, getModelDisplayInfo, compareModelIds, sortModelIds, formatCost, } from './modelInfo';
136
136
  export type { ModelPricing, CostTokenUsage, CostSource, CostProvenanceInput, CostWithProvenance, ModelInfo, ModelProvider, ParsedModelId, ModelDisplayInfo, } from './modelInfo';
137
- export { hydratePricingCatalog, normalizeLiteLlmCatalog, LITELLM_CATALOG_URL } from './pricingCatalog';
137
+ export { hydratePricingCatalog, normalizeLiteLlmCatalog, LITELLM_CATALOG_URL, } from './pricingCatalog';
138
138
  export type { HydrateOptions, HydrateResult } from './pricingCatalog';
139
139
  export { extractTokenUsage } from './extractors/tokenUsage';
140
140
  export { extractToolCall, extractToolCalls } from './extractors/toolCall';
141
- export { extractUrls, extractFilePaths, extractCommands, } from './extractors/sessionAssets';
141
+ export { extractUrls, extractFilePaths, extractCommands } from './extractors/sessionAssets';
142
142
  export type { AssetAgent, ExtractedAsset, ExtractedAssetProvenance, ExtractedAssetType, ExtractedAssets, SourceAssets, } from './extractors/sessionAssets';
143
143
  export { readClaudeAssets, claudeSessions } from './extractors/sources/claudeAssets';
144
144
  export { readCodexAssets, codexSessions } from './extractors/sources/codexAssets';
package/dist/index.js CHANGED
@@ -6,9 +6,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  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.readClaudeCodePlanFiles = exports.getPlanAnalytics = exports.writePlans = exports.getLatestPlan = exports.readPlans = exports.readLatestHandoff = exports.readHistory = exports.readNotes = exports.readDecisions = exports.readTasks = exports.getProjectSlugRaw = exports.getProjectSlug = exports.encodeWorkspacePath = exports.getGlobalDataPath = exports.getProjectDataPath = exports.getConfigDir = exports.MAX_PLANS_PER_PROJECT = exports.PLAN_SCHEMA_VERSION = exports.createEmptyTokenTotals = 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;
7
7
  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.scanSubagentTraces = exports.findAllSessionsWithWorktrees = exports.discoverWorktreeSiblings = exports.resolveWorktreeMainRepo = exports.getAllClaudeProjectFolders = exports.decodeEncodedPath = exports.getMostRecentlyActiveSessionDir = exports.findSubdirectorySessionDirs = exports.findSessionsInDirectory = exports.findAllClaudeSessions = exports.findActiveClaudeSession = void 0;
8
8
  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.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.PatternExtractor = exports.HeatmapTracker = exports.FrequencyTracker = exports.getSnapshotPath = exports.isSnapshotValid = exports.deleteSnapshot = exports.loadSnapshot = exports.saveSnapshot = exports.parseTodoDependencies = exports.EventAggregator = exports.getRandomPhrase = exports.PHRASE_CATEGORIES = exports.ALL_PHRASES = exports.HIGHLIGHT_CSS = exports.clearHighlightCache = void 0;
9
- exports.isZaiProviderId = exports.inferZaiQuotaState = exports.extractNextFlushTime = exports.accumulateZaiUsage = exports.CodexQuotaWatcher = exports.resolveCodexQuotaFromLocalSources = exports.resolveCodexQuota = exports.readLatestCodexQuotaFromRollouts = exports.quotaFromCodexRateLimits = exports.fetchCodexQuotaFromApi = exports.getWorkspaceIdFromPath = exports.pruneQuotaHistory = exports.readQuotaHistoryDailyBuckets = exports.readQuotaHistoryRange = exports.appendQuotaHistorySample = exports.writeQuotaSnapshot = exports.readQuotaSnapshot = exports.QuotaPoller = exports.describeQuotaFailure = exports.fetchQuota = 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.getActiveCodexAccount = exports.listCodexAccounts = exports.getSystemCodexHome = exports.getCodexMonitoringHomes = exports.getCodexProfileHome = exports.getCodexProfilesDir = exports.readClaudeProfileIdentity = exports.isClaudeProfileAuthenticated = exports.claudeKeychainService = exports.claudeKeychainSuffix = exports.getClaudeProfileHome = exports.getClaudeProfilesDir = exports.getActiveAccountStatus = exports.removeSavedAccountProfile = exports.replaceSavedAccountProfiles = void 0;
10
- exports.quotaFailureKindSchema = exports.quotaStateSchema = exports.quotaWindowSchema = exports.extractSessionEvents = exports.permissionModeSchema = exports.sessionEventSchema = exports.sessionMessageSchema = exports.messageUsageSchema = exports.gatherAssetsForCwd = exports.codexSessions = exports.readCodexAssets = exports.claudeSessions = exports.readClaudeAssets = exports.extractCommands = exports.extractFilePaths = exports.extractUrls = exports.extractToolCalls = exports.extractToolCall = exports.extractTokenUsage = exports.LITELLM_CATALOG_URL = 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.MultiProviderQuotaService = exports.resolveZaiQuota = exports.readZaiCredentials = exports.quotaStateFromZaiQuotaLimitPayload = exports.fetchZaiQuotaFromApi = exports.ZaiQuotaWatcher = exports.ZAI_TIER_BUDGETS = exports.ZAI_PROVIDER_IDS = exports.ZAI_PROMPT_INVOCATIONS = exports.turnTokenWeight = exports.rowsToZaiTurnsAndErrors = exports.resolveZaiTier = exports.parseZaiQuotaError = exports.makeUnavailableZaiQuotaState = void 0;
11
- exports.scopePeakHoursToSessionProvider = exports.isClaudeCodeSessionProvider = exports.fetchPeakHoursStatus = exports.createPeakHoursNotApplicableState = 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.quotaSourceSchema = exports.quotaProviderIdSchema = void 0;
9
+ exports.CodexQuotaWatcher = exports.resolveCodexQuotaFromLocalSources = exports.resolveCodexQuota = exports.readLatestCodexQuotaFromRollouts = exports.quotaFromCodexRateLimits = exports.fetchCodexQuotaFromApi = 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.getActiveCodexAccount = exports.listCodexAccounts = exports.getSystemCodexHome = exports.getCodexMonitoringHomes = exports.getCodexProfileHome = exports.getCodexProfilesDir = exports.readClaudeProfileIdentity = exports.isClaudeProfileAuthenticated = exports.claudeKeychainService = exports.claudeKeychainSuffix = exports.getClaudeProfileHome = exports.getClaudeProfilesDir = exports.getActiveAccountStatus = exports.removeSavedAccountProfile = exports.replaceSavedAccountProfiles = void 0;
10
+ exports.permissionModeSchema = exports.sessionEventSchema = exports.sessionMessageSchema = exports.messageUsageSchema = exports.gatherAssetsForCwd = exports.codexSessions = exports.readCodexAssets = exports.claudeSessions = exports.readClaudeAssets = exports.extractCommands = exports.extractFilePaths = exports.extractUrls = exports.extractToolCalls = exports.extractToolCall = exports.extractTokenUsage = exports.LITELLM_CATALOG_URL = 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.MultiProviderQuotaService = exports.resolveZaiQuota = exports.readZaiCredentials = exports.quotaStateFromZaiQuotaLimitPayload = exports.fetchZaiQuotaFromApi = exports.ZaiQuotaWatcher = exports.ZAI_TIER_BUDGETS = exports.ZAI_PROVIDER_IDS = exports.ZAI_PROMPT_INVOCATIONS = exports.turnTokenWeight = exports.rowsToZaiTurnsAndErrors = exports.resolveZaiTier = exports.parseZaiQuotaError = exports.makeUnavailableZaiQuotaState = exports.isZaiProviderId = exports.inferZaiQuotaState = exports.extractNextFlushTime = exports.accumulateZaiUsage = void 0;
11
+ exports.scopePeakHoursToSessionProvider = exports.isClaudeCodeSessionProvider = exports.fetchPeakHoursStatus = exports.createPeakHoursNotApplicableState = 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.quotaSourceSchema = exports.quotaProviderIdSchema = exports.quotaFailureKindSchema = exports.quotaStateSchema = exports.quotaWindowSchema = exports.extractSessionEvents = void 0;
12
12
  var taskPersistence_1 = require("./types/taskPersistence");
13
13
  Object.defineProperty(exports, "TASK_PERSISTENCE_SCHEMA_VERSION", { enumerable: true, get: function () { return taskPersistence_1.TASK_PERSISTENCE_SCHEMA_VERSION; } });
14
14
  Object.defineProperty(exports, "normalizeTaskStatus", { enumerable: true, get: function () { return taskPersistence_1.normalizeTaskStatus; } });
@@ -274,7 +274,11 @@ Object.defineProperty(exports, "decideAutoSwitch", { enumerable: true, get: func
274
274
  Object.defineProperty(exports, "AutoSwitchController", { enumerable: true, get: function () { return autoSwitch_1.AutoSwitchController; } });
275
275
  // Quota
276
276
  var quota_1 = require("./quota");
277
+ Object.defineProperty(exports, "FIVE_HOUR_WINDOW_MS", { enumerable: true, get: function () { return quota_1.FIVE_HOUR_WINDOW_MS; } });
278
+ Object.defineProperty(exports, "SEVEN_DAY_WINDOW_MS", { enumerable: true, get: function () { return quota_1.SEVEN_DAY_WINDOW_MS; } });
277
279
  Object.defineProperty(exports, "fetchQuota", { enumerable: true, get: function () { return quota_1.fetchQuota; } });
280
+ Object.defineProperty(exports, "projectQuotaWindow", { enumerable: true, get: function () { return quota_1.projectQuotaWindow; } });
281
+ Object.defineProperty(exports, "withQuotaProjections", { enumerable: true, get: function () { return quota_1.withQuotaProjections; } });
278
282
  var quotaPresentation_1 = require("./quotaPresentation");
279
283
  Object.defineProperty(exports, "describeQuotaFailure", { enumerable: true, get: function () { return quotaPresentation_1.describeQuotaFailure; } });
280
284
  var quotaPoller_1 = require("./quotaPoller");
@@ -36,21 +36,20 @@ const MODEL_CONTEXT_SIZES = {
36
36
  'gpt-5.3-codex': 400_000,
37
37
  'gpt-5': 400_000,
38
38
  // OpenAI reasoning
39
- 'o1': 200_000,
40
- 'o3': 200_000,
41
- 'o4': 200_000,
39
+ o1: 200_000,
40
+ o3: 200_000,
41
+ o4: 200_000,
42
42
  // OpenAI GPT-4 series
43
43
  'gpt-4o': 128_000,
44
44
  'gpt-4-turbo': 128_000,
45
45
  'gpt-4': 8_192,
46
46
  // Gemini
47
- 'gemini': 1_000_000,
47
+ gemini: 1_000_000,
48
48
  // DeepSeek
49
- 'deepseek': 128_000,
49
+ deepseek: 128_000,
50
50
  };
51
51
  /** Prefix keys sorted longest-first for correct prefix matching. */
52
- const SORTED_KEYS = Object.keys(MODEL_CONTEXT_SIZES)
53
- .sort((a, b) => b.length - a.length);
52
+ const SORTED_KEYS = Object.keys(MODEL_CONTEXT_SIZES).sort((a, b) => b.length - a.length);
54
53
  /** Default context window size when model is unknown. */
55
54
  exports.DEFAULT_CONTEXT_WINDOW = 200_000;
56
55
  /**
@@ -75,7 +74,10 @@ function getModelContextWindowSize(modelId) {
75
74
  // Strip the suffix if present, so the normal lookup still succeeds when
76
75
  // a caller passes e.g. "claude-opus-4-7[1m]" and we've already handled it.
77
76
  // Trim/lowercase so padded or mixed-case IDs match the lowercase table keys.
78
- const normalized = modelId.replace(/\[1m\]/gi, '').trim().toLowerCase();
77
+ const normalized = modelId
78
+ .replace(/\[1m\]/gi, '')
79
+ .trim()
80
+ .toLowerCase();
79
81
  // Exact match
80
82
  if (MODEL_CONTEXT_SIZES[normalized] !== undefined) {
81
83
  return MODEL_CONTEXT_SIZES[normalized];
package/dist/modelInfo.js CHANGED
@@ -214,7 +214,7 @@ const PRICING_TABLE = {
214
214
  cacheWriteCostPerMillion: 0,
215
215
  cacheReadCostPerMillion: 0.55,
216
216
  },
217
- 'o3': {
217
+ o3: {
218
218
  inputCostPerMillion: 2.0,
219
219
  outputCostPerMillion: 8.0,
220
220
  cacheWriteCostPerMillion: 0,
@@ -226,7 +226,7 @@ const PRICING_TABLE = {
226
226
  cacheWriteCostPerMillion: 0,
227
227
  cacheReadCostPerMillion: 1.5,
228
228
  },
229
- 'o1': {
229
+ o1: {
230
230
  inputCostPerMillion: 15.0,
231
231
  outputCostPerMillion: 60.0,
232
232
  cacheWriteCostPerMillion: 0,
@@ -275,7 +275,10 @@ const GEMINI_RE = /^gemini-([0-9][0-9.A-Za-z-]*)/i;
275
275
  function parseModelId(modelId) {
276
276
  if (!modelId)
277
277
  return null;
278
- const normalized = modelId.replace(/\[1m\]/gi, '').trim().toLowerCase();
278
+ const normalized = modelId
279
+ .replace(/\[1m\]/gi, '')
280
+ .trim()
281
+ .toLowerCase();
279
282
  const claude = normalized.match(CLAUDE_RE);
280
283
  if (claude) {
281
284
  return { provider: 'anthropic', family: claude[1].toLowerCase(), version: claude[2] };
@@ -405,8 +408,7 @@ function calculateCost(usage, modelId) {
405
408
  * locally estimated from pricing, or unavailable because the model is unpriced.
406
409
  */
407
410
  function calculateCostWithProvenance(input) {
408
- if (typeof input.reportedCostUsd === 'number' &&
409
- Number.isFinite(input.reportedCostUsd)) {
411
+ if (typeof input.reportedCostUsd === 'number' && Number.isFinite(input.reportedCostUsd)) {
410
412
  return { costUsd: input.reportedCostUsd, source: 'reported' };
411
413
  }
412
414
  const estimated = calculateCost(input.usage, input.modelId);
@@ -489,7 +491,10 @@ function getModelDisplayInfo(modelId) {
489
491
  rank = 200;
490
492
  }
491
493
  else if (parsed?.provider === 'openai') {
492
- rank = parsed.family === 'gpt' ? 300 + versionRank(parsed.version) : 400 + versionRank(parsed.version);
494
+ rank =
495
+ parsed.family === 'gpt'
496
+ ? 300 + versionRank(parsed.version)
497
+ : 400 + versionRank(parsed.version);
493
498
  }
494
499
  else if (parsed?.provider === 'google') {
495
500
  rank = 500 + versionRank(parsed.version);
@@ -77,7 +77,8 @@ class MultiProviderQuotaService {
77
77
  constructor(options = {}) {
78
78
  this.activeIntervalMs = options.activeIntervalMs ?? ACTIVE_POLL_INTERVAL_MS;
79
79
  this.idleIntervalMs = options.idleIntervalMs ?? IDLE_POLL_INTERVAL_MS;
80
- this.transientFailureBackoffMs = options.transientFailureBackoffMs ?? TRANSIENT_FAILURE_BACKOFF_MS;
80
+ this.transientFailureBackoffMs =
81
+ options.transientFailureBackoffMs ?? TRANSIENT_FAILURE_BACKOFF_MS;
81
82
  this.peakHoursCacheMaxAgeMs = options.peakHoursCacheMaxAgeMs ?? PEAK_HOURS_CACHE_MAX_AGE_MS;
82
83
  this.includePeakHours = options.includePeakHours ?? true;
83
84
  this.readClaudeCredentials = options.readClaudeCredentials ?? credentials_1.readClaudeMaxCredentials;
@@ -97,9 +98,10 @@ class MultiProviderQuotaService {
97
98
  this.codexWatcher = null;
98
99
  this.ownsCodexWatcher = false;
99
100
  }
100
- this.codexSubscription = this.codexWatcher?.onUpdate((state) => {
101
- this.updateProviderQuota('codex', state);
102
- }) ?? null;
101
+ this.codexSubscription =
102
+ this.codexWatcher?.onUpdate((state) => {
103
+ this.updateProviderQuota('codex', state);
104
+ }) ?? null;
103
105
  if (options.zaiWatcher !== undefined) {
104
106
  this.zaiWatcher = options.zaiWatcher;
105
107
  this.ownsZaiWatcher = false;
@@ -108,9 +110,10 @@ class MultiProviderQuotaService {
108
110
  this.zaiWatcher = null;
109
111
  this.ownsZaiWatcher = false;
110
112
  }
111
- this.zaiSubscription = this.zaiWatcher?.onUpdate((state) => {
112
- this.updateProviderQuota('zai', state);
113
- }) ?? null;
113
+ this.zaiSubscription =
114
+ this.zaiWatcher?.onUpdate((state) => {
115
+ this.updateProviderQuota('zai', state);
116
+ }) ?? null;
114
117
  }
115
118
  startPolling() {
116
119
  if (this.polling)