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.
- package/CHANGELOG.md +59 -0
- package/README.md +200 -52
- package/dist/accountChangeSignal.d.ts +3 -0
- package/dist/accountChangeSignal.js +19 -0
- package/dist/accountChanges.d.ts +21 -0
- package/dist/accountChanges.js +151 -0
- package/dist/accountManager.d.ts +13 -0
- package/dist/accountManager.js +60 -32
- package/dist/accountRegistry.d.ts +3 -1
- package/dist/accountRegistry.js +64 -41
- package/dist/accounts.js +40 -19
- package/dist/autoSwitch.d.ts +2 -1
- package/dist/autoSwitch.js +32 -7
- package/dist/browser.d.ts +10 -3
- package/dist/browser.js +17 -1
- package/dist/codexProfiles.d.ts +14 -0
- package/dist/codexProfiles.js +268 -116
- package/dist/codexQuotaWatcher.d.ts +6 -0
- package/dist/codexQuotaWatcher.js +101 -47
- package/dist/context/sessionContext.js +2 -4
- package/dist/ensureDefaultAccounts.js +4 -4
- package/dist/index.d.ts +32 -15
- package/dist/index.js +54 -9
- package/dist/modelAliases.d.ts +13 -0
- package/dist/modelAliases.js +58 -0
- package/dist/modelCatalog.d.ts +32 -0
- package/dist/modelCatalog.js +145 -0
- package/dist/modelContext.d.ts +36 -3
- package/dist/modelContext.js +109 -34
- package/dist/modelInfo.d.ts +30 -1
- package/dist/modelInfo.js +116 -26
- package/dist/multiProviderQuotaService.d.ts +8 -0
- package/dist/multiProviderQuotaService.js +64 -3
- package/dist/node.d.ts +8 -2
- package/dist/node.js +11 -1
- package/dist/observedContextWindows.d.ts +13 -0
- package/dist/observedContextWindows.js +13 -0
- package/dist/observedSessionCollector.d.ts +75 -4
- package/dist/observedSessionCollector.js +452 -42
- package/dist/parsers/codexHistory.d.ts +32 -0
- package/dist/parsers/codexHistory.js +125 -0
- package/dist/parsers/mcpToolName.d.ts +26 -0
- package/dist/parsers/mcpToolName.js +31 -0
- package/dist/parsers/sessionActivityDetector.d.ts +6 -0
- package/dist/parsers/sessionActivityDetector.js +17 -0
- package/dist/parsers/sessionPathResolver.d.ts +11 -4
- package/dist/parsers/sessionPathResolver.js +11 -4
- package/dist/paths.d.ts +7 -3
- package/dist/paths.js +7 -3
- package/dist/providerIds.d.ts +11 -0
- package/dist/providerIds.js +9 -0
- package/dist/providerQuota.d.ts +3 -1
- package/dist/providerQuota.js +3 -0
- package/dist/providers/claudeCode.d.ts +11 -1
- package/dist/providers/claudeCode.js +222 -39
- package/dist/providers/codex.d.ts +39 -1
- package/dist/providers/codex.js +326 -39
- package/dist/providers/codexDatabase.d.ts +9 -0
- package/dist/providers/codexDatabase.js +107 -2
- package/dist/providers/diagnostics.d.ts +13 -0
- package/dist/providers/diagnostics.js +88 -0
- package/dist/providers/factory.d.ts +14 -0
- package/dist/providers/factory.js +57 -0
- package/dist/providers/openCode.d.ts +20 -1
- package/dist/providers/openCode.js +361 -11
- package/dist/providers/openCodeDatabase.d.ts +10 -0
- package/dist/providers/openCodeDatabase.js +69 -0
- package/dist/providers/types.d.ts +57 -2
- package/dist/providers/types.js +4 -0
- package/dist/quota.d.ts +4 -1
- package/dist/quota.js +3 -7
- package/dist/quotaHistory.d.ts +3 -2
- package/dist/quotaHistory.js +2 -2
- package/dist/quotaPoller.d.ts +13 -1
- package/dist/quotaPoller.js +65 -3
- package/dist/quotaSnapshots.js +8 -77
- package/dist/schemas/accountManager.d.ts +2 -2
- package/dist/schemas/accountManager.js +2 -4
- package/dist/schemas/accountStatus.d.ts +3 -0
- package/dist/schemas/accountStatus.js +1 -0
- package/dist/schemas/index.d.ts +1 -0
- package/dist/schemas/index.js +7 -2
- package/dist/schemas/observedSessionV1.d.ts +27 -26
- package/dist/schemas/observedSessionV1.js +6 -4
- package/dist/schemas/quota.d.ts +2 -2
- package/dist/schemas/quota.js +3 -6
- package/dist/schemas/quotaHistory.d.ts +2 -2
- package/dist/schemas/tokenEstimation.d.ts +1 -1
- package/dist/sessionMonitor.d.ts +15 -0
- package/dist/sessionMonitor.js +142 -0
- package/dist/sessionPreviews.d.ts +85 -0
- package/dist/sessionPreviews.js +549 -0
- package/dist/sessionTranscripts.js +10 -4
- package/dist/types/observedSessionV1.d.ts +6 -2
- package/dist/types/observedSessionV1.js +14 -8
- package/dist/writers/atomic.d.ts +20 -0
- package/dist/writers/atomic.js +190 -19
- 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.
|
|
7
|
-
exports.
|
|
8
|
-
exports.
|
|
9
|
-
exports.
|
|
10
|
-
exports.
|
|
11
|
-
exports.
|
|
12
|
-
exports.
|
|
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
|
|
191
|
-
Object.defineProperty(exports, "createWatcher", { enumerable: true, get: function () { return
|
|
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
|
+
}
|
package/dist/modelContext.d.ts
CHANGED
|
@@ -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.
|
|
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
|
-
*
|
|
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
|
*
|