sidekick-shared 0.20.0 → 0.21.1
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/README.md +14 -2
- package/dist/accountManager.d.ts +52 -0
- package/dist/accountManager.js +344 -0
- package/dist/accounts.d.ts +3 -0
- package/dist/accounts.js +180 -40
- package/dist/autoSwitch.d.ts +70 -0
- package/dist/autoSwitch.js +160 -0
- package/dist/claudeProfiles.d.ts +12 -0
- package/dist/claudeProfiles.js +96 -0
- package/dist/codexProfiles.d.ts +6 -2
- package/dist/codexProfiles.js +6 -1
- package/dist/credentialIO.d.ts +3 -2
- package/dist/credentialIO.js +11 -9
- package/dist/ensureDefaultAccounts.js +6 -0
- package/dist/index.d.ts +16 -3
- package/dist/index.js +60 -5
- package/dist/multiProviderQuotaService.d.ts +10 -0
- package/dist/multiProviderQuotaService.js +34 -0
- package/dist/providerQuota.d.ts +2 -1
- package/dist/providers/detect.js +3 -13
- package/dist/providers/openCode.d.ts +31 -0
- package/dist/providers/openCode.js +108 -2
- package/dist/providers/openCodeDatabase.d.ts +19 -0
- package/dist/providers/openCodeDatabase.js +28 -0
- package/dist/quota.d.ts +1 -1
- package/dist/quotaHistory.d.ts +1 -1
- package/dist/quotaHistory.js +14 -2
- package/dist/quotaSnapshots.d.ts +8 -2
- package/dist/schemas/accountManager.d.ts +104 -0
- package/dist/schemas/accountManager.js +84 -0
- package/dist/schemas/assistantTurn.d.ts +5 -5
- package/dist/schemas/index.d.ts +5 -1
- package/dist/schemas/index.js +10 -1
- package/dist/schemas/quota.d.ts +185 -20
- package/dist/schemas/quota.js +8 -1
- package/dist/schemas/quotaHistory.d.ts +3 -1
- package/dist/schemas/quotaHistory.js +1 -0
- package/dist/terminalSync.d.ts +7 -0
- package/dist/terminalSync.js +202 -0
- package/dist/zaiQuota.d.ts +209 -0
- package/dist/zaiQuota.js +290 -0
- package/dist/zaiQuotaWatcher.d.ts +97 -0
- package/dist/zaiQuotaWatcher.js +259 -0
- package/package.json +1 -1
package/dist/codexProfiles.js
CHANGED
|
@@ -37,6 +37,8 @@ exports.getSystemCodexHome = getSystemCodexHome;
|
|
|
37
37
|
exports.getCodexMonitoringHomes = getCodexMonitoringHomes;
|
|
38
38
|
exports.getCodexProfilesDir = getCodexProfilesDir;
|
|
39
39
|
exports.getCodexProfileHome = getCodexProfileHome;
|
|
40
|
+
exports.readCodexAccountMetadata = readCodexAccountMetadata;
|
|
41
|
+
exports.isCodexProfileAuthenticated = isCodexProfileAuthenticated;
|
|
40
42
|
exports.listCodexAccounts = listCodexAccounts;
|
|
41
43
|
exports.getActiveCodexAccount = getActiveCodexAccount;
|
|
42
44
|
exports.resolveSidekickCodexHome = resolveSidekickCodexHome;
|
|
@@ -378,7 +380,7 @@ function prepareCodexAccount(label) {
|
|
|
378
380
|
needsLogin: true,
|
|
379
381
|
};
|
|
380
382
|
}
|
|
381
|
-
function finalizeCodexAccount(profileId) {
|
|
383
|
+
function finalizeCodexAccount(profileId, opts = {}) {
|
|
382
384
|
const pending = readPendingProfile(profileId);
|
|
383
385
|
if (!pending) {
|
|
384
386
|
return { success: false, error: `Codex profile ${profileId} was not prepared.` };
|
|
@@ -397,6 +399,9 @@ function finalizeCodexAccount(profileId) {
|
|
|
397
399
|
metadata,
|
|
398
400
|
};
|
|
399
401
|
(0, accountRegistry_1.upsertSavedAccountProfile)(profile);
|
|
402
|
+
if (opts.activate === false) {
|
|
403
|
+
return { success: true };
|
|
404
|
+
}
|
|
400
405
|
const hasCredentialFiles = fs.existsSync(path.join(codexHome, 'auth.json')) ||
|
|
401
406
|
fs.existsSync(path.join(codexHome, '.credentials.json'));
|
|
402
407
|
if (!hasCredentialFiles) {
|
package/dist/credentialIO.d.ts
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* Both accounts.ts and credentials.ts consume this module so that all
|
|
9
9
|
* credential access is platform-correct in one place.
|
|
10
10
|
*/
|
|
11
|
+
export declare const KEYCHAIN_SERVICE = "Claude Code-credentials";
|
|
11
12
|
/**
|
|
12
13
|
* Read the active Claude Code credentials as a parsed object.
|
|
13
14
|
*
|
|
@@ -16,7 +17,7 @@
|
|
|
16
17
|
*
|
|
17
18
|
* Returns `null` when credentials are absent or unreadable.
|
|
18
19
|
*/
|
|
19
|
-
export declare function readActiveCredentials(): unknown;
|
|
20
|
+
export declare function readActiveCredentials(configDir?: string): unknown;
|
|
20
21
|
/**
|
|
21
22
|
* Write credentials to the active Claude Code credential store.
|
|
22
23
|
*
|
|
@@ -25,4 +26,4 @@ export declare function readActiveCredentials(): unknown;
|
|
|
25
26
|
*
|
|
26
27
|
* Throws on failure.
|
|
27
28
|
*/
|
|
28
|
-
export declare function writeActiveCredentials(credentials: unknown): void;
|
|
29
|
+
export declare function writeActiveCredentials(credentials: unknown, configDir?: string): void;
|
package/dist/credentialIO.js
CHANGED
|
@@ -43,15 +43,17 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
43
43
|
};
|
|
44
44
|
})();
|
|
45
45
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
46
|
+
exports.KEYCHAIN_SERVICE = void 0;
|
|
46
47
|
exports.readActiveCredentials = readActiveCredentials;
|
|
47
48
|
exports.writeActiveCredentials = writeActiveCredentials;
|
|
48
49
|
const fs = __importStar(require("fs"));
|
|
49
50
|
const path = __importStar(require("path"));
|
|
50
51
|
const os = __importStar(require("os"));
|
|
51
52
|
const child_process_1 = require("child_process");
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
const claudeProfiles_1 = require("./claudeProfiles");
|
|
54
|
+
exports.KEYCHAIN_SERVICE = 'Claude Code-credentials';
|
|
55
|
+
function getCredentialsFilePath(configDir) {
|
|
56
|
+
return path.join(configDir ?? path.join(os.homedir(), '.claude'), '.credentials.json');
|
|
55
57
|
}
|
|
56
58
|
/**
|
|
57
59
|
* Read the active Claude Code credentials as a parsed object.
|
|
@@ -61,11 +63,11 @@ function getCredentialsFilePath() {
|
|
|
61
63
|
*
|
|
62
64
|
* Returns `null` when credentials are absent or unreadable.
|
|
63
65
|
*/
|
|
64
|
-
function readActiveCredentials() {
|
|
66
|
+
function readActiveCredentials(configDir) {
|
|
65
67
|
if (process.platform === 'darwin') {
|
|
66
68
|
try {
|
|
67
69
|
const raw = (0, child_process_1.execFileSync)('security', [
|
|
68
|
-
'find-generic-password', '-s',
|
|
70
|
+
'find-generic-password', '-s', (0, claudeProfiles_1.claudeKeychainService)(configDir), '-w',
|
|
69
71
|
], { encoding: 'utf8', stdio: ['pipe', 'pipe', 'pipe'] });
|
|
70
72
|
return JSON.parse(raw.trim());
|
|
71
73
|
}
|
|
@@ -75,7 +77,7 @@ function readActiveCredentials() {
|
|
|
75
77
|
}
|
|
76
78
|
// Linux / WSL / Windows — file-based
|
|
77
79
|
try {
|
|
78
|
-
return JSON.parse(fs.readFileSync(getCredentialsFilePath(), 'utf8'));
|
|
80
|
+
return JSON.parse(fs.readFileSync(getCredentialsFilePath(configDir), 'utf8'));
|
|
79
81
|
}
|
|
80
82
|
catch {
|
|
81
83
|
return null;
|
|
@@ -89,20 +91,20 @@ function readActiveCredentials() {
|
|
|
89
91
|
*
|
|
90
92
|
* Throws on failure.
|
|
91
93
|
*/
|
|
92
|
-
function writeActiveCredentials(credentials) {
|
|
94
|
+
function writeActiveCredentials(credentials, configDir) {
|
|
93
95
|
const json = JSON.stringify(credentials);
|
|
94
96
|
JSON.parse(json); // validate round-trip
|
|
95
97
|
if (process.platform === 'darwin') {
|
|
96
98
|
(0, child_process_1.execFileSync)('security', [
|
|
97
99
|
'add-generic-password', '-U',
|
|
98
|
-
'-s',
|
|
100
|
+
'-s', (0, claudeProfiles_1.claudeKeychainService)(configDir),
|
|
99
101
|
'-a', process.env.USER || 'user',
|
|
100
102
|
'-w', json,
|
|
101
103
|
], { stdio: ['pipe', 'pipe', 'pipe'] });
|
|
102
104
|
return;
|
|
103
105
|
}
|
|
104
106
|
// Linux / WSL / Windows — file-based
|
|
105
|
-
const credPath = getCredentialsFilePath();
|
|
107
|
+
const credPath = getCredentialsFilePath(configDir);
|
|
106
108
|
const tmp = credPath + '.tmp';
|
|
107
109
|
fs.writeFileSync(tmp, json, { encoding: 'utf8', mode: 0o600 });
|
|
108
110
|
fs.renameSync(tmp, credPath);
|
|
@@ -96,6 +96,12 @@ function ensureDefaultCodexAccount(options) {
|
|
|
96
96
|
async function ensureDefaultAccounts(options) {
|
|
97
97
|
const claude = await ensureDefaultClaudeAccount(options);
|
|
98
98
|
const codex = ensureDefaultCodexAccount(options);
|
|
99
|
+
try {
|
|
100
|
+
(0, accounts_1.reconcileClaudeAuthState)();
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
logFailure(options, 'Claude auth reconciliation failed.', error);
|
|
104
|
+
}
|
|
99
105
|
try {
|
|
100
106
|
(0, codexProfiles_1.reconcileCodexAuthState)();
|
|
101
107
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -28,7 +28,7 @@ export type { ReadPlansOptions, PlanAnalytics } from './readers/plans';
|
|
|
28
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
|
-
export { OpenCodeProvider } from './providers/openCode';
|
|
31
|
+
export { OpenCodeProvider, getOpenCodeDataDir } from './providers/openCode';
|
|
32
32
|
export { CodexProvider } from './providers/codex';
|
|
33
33
|
export { JsonlParser, TRUNCATION_PATTERNS } from './parsers/jsonl';
|
|
34
34
|
export type { RawSessionEvent, JsonlParserCallbacks, JsonlParserOptions } from './parsers/jsonl';
|
|
@@ -93,14 +93,21 @@ export { readClaudeMaxCredentials, readClaudeMaxAccessTokenSync } from './creden
|
|
|
93
93
|
export type { ClaudeMaxCredentials } from './credentials';
|
|
94
94
|
export { ensureDefaultAccounts, } from './ensureDefaultAccounts';
|
|
95
95
|
export type { EnsureDefaultAccountStatus, EnsureDefaultAccountsOptions, EnsureDefaultAccountsResult, } from './ensureDefaultAccounts';
|
|
96
|
-
export { readAccountRegistry, writeAccountRegistry, readActiveClaudeAccount, addCurrentAccount, switchToAccount, removeAccount, listAccounts, getActiveAccount, isMultiAccountEnabled, } from './accounts';
|
|
96
|
+
export { readAccountRegistry, writeAccountRegistry, readActiveClaudeAccount, addCurrentAccount, switchToAccount, resolveActiveClaudeHome, applyActiveClaudeToLiveHome, reconcileClaudeAuthState, removeAccount, listAccounts, getActiveAccount, isMultiAccountEnabled, } from './accounts';
|
|
97
97
|
export type { AccountEntry, AccountRegistry, ActiveAccountInfo, AccountManagerResult } from './accounts';
|
|
98
|
+
export { beginAccountLogin, getAccountLoginStatus, finalizeAccountLogin, spawnAccountLogin, switchAccount, listAllAccounts, resolveClaudeLoginCommand, } from './accountManager';
|
|
99
|
+
export type { AccountLoginCommand, AccountLoginState, AccountLoginStatus, BeginAccountLoginResult, FinalizeAccountLoginOptions, ListAllAccountsResult, SpawnAccountLoginOptions, } from './accountManager';
|
|
98
100
|
export { getAccountsDir, readSavedAccountRegistry, writeSavedAccountRegistry, listSavedAccountProfiles, getActiveSavedAccount, upsertSavedAccountProfile, setActiveSavedAccount, replaceSavedAccountProfiles, removeSavedAccountProfile, } from './accountRegistry';
|
|
99
101
|
export type { AccountProviderId, AccountIdentityMetadata, SavedAccountProfile, SavedAccountRegistry, } from './accountRegistry';
|
|
100
102
|
export { getActiveAccountStatus } from './accountStatus';
|
|
101
103
|
export type { ActiveAccountStatus, ActiveProviderAccountStatus } from './accountStatus';
|
|
104
|
+
export { getClaudeProfilesDir, getClaudeProfileHome, claudeKeychainSuffix, claudeKeychainService, isClaudeProfileAuthenticated, readClaudeProfileIdentity, } from './claudeProfiles';
|
|
105
|
+
export type { ClaudeProfileIdentity } from './claudeProfiles';
|
|
102
106
|
export { getCodexProfilesDir, getCodexProfileHome, getCodexMonitoringHomes, getSystemCodexHome, listCodexAccounts, getActiveCodexAccount, resolveSidekickCodexHome, getCodexExecutionEnv, prepareCodexAccount, finalizeCodexAccount, switchToCodexAccount, removeCodexAccount, } from './codexProfiles';
|
|
103
107
|
export type { CodexAccountManagerResult } from './codexProfiles';
|
|
108
|
+
export { setTerminalActiveProfile, installShellHook, uninstallShellHook, isShellHookInstalled, writeLauncher, removeLauncher, } from './terminalSync';
|
|
109
|
+
export { DEFAULT_AUTO_SWITCH_CONFIG, decideAutoSwitch, AutoSwitchController, } from './autoSwitch';
|
|
110
|
+
export type { AutoSwitchActiveAccount, AutoSwitchCandidate, AutoSwitchConfig, AutoSwitchControllerOptions, AutoSwitchDecision, AutoSwitchTransitionEvent, } from './autoSwitch';
|
|
104
111
|
export { fetchQuota } from './quota';
|
|
105
112
|
export type { QuotaWindow, QuotaState } from './quota';
|
|
106
113
|
export { describeQuotaFailure } from './quotaPresentation';
|
|
@@ -114,9 +121,14 @@ export { fetchCodexQuotaFromApi, quotaFromCodexRateLimits, readLatestCodexQuotaF
|
|
|
114
121
|
export type { CodexQuotaApiOptions, CodexQuotaCreditsSnapshot, CodexQuotaResolveOptions, CodexQuotaResolveSource, } from './codexQuota';
|
|
115
122
|
export { CodexQuotaWatcher } from './codexQuotaWatcher';
|
|
116
123
|
export type { CodexQuotaWatcherOptions } from './codexQuotaWatcher';
|
|
124
|
+
export { accumulateZaiUsage, extractNextFlushTime, inferZaiQuotaState, isZaiProviderId, makeUnavailableZaiQuotaState, parseZaiQuotaError, resolveZaiTier, rowsToZaiTurnsAndErrors, turnTokenWeight, ZAI_PROMPT_INVOCATIONS, ZAI_PROVIDER_IDS, ZAI_TIER_BUDGETS, } from './zaiQuota';
|
|
125
|
+
export type { ZaiAccumulatedUsage, ZaiAssistantTurn, ZaiOpenCodeRow, ZaiProviderId, ZaiQuotaError, ZaiQuotaErrorKind, ZaiTier, InferZaiQuotaStateOptions, } from './zaiQuota';
|
|
126
|
+
export { ZaiQuotaWatcher } from './zaiQuotaWatcher';
|
|
127
|
+
export type { ZaiQuotaWatcherOptions } from './zaiQuotaWatcher';
|
|
117
128
|
export { MultiProviderQuotaService } from './multiProviderQuotaService';
|
|
118
129
|
export type { MultiProviderQuotaServiceOptions } from './multiProviderQuotaService';
|
|
119
130
|
export type { ProviderQuotaMap, ProviderQuotaState, RuntimeQuotaProvider } from './providerQuota';
|
|
131
|
+
export type { QuotaSnapshotProviderId } from './quotaSnapshots';
|
|
120
132
|
export { getModelContextWindowSize, DEFAULT_CONTEXT_WINDOW } from './modelContext';
|
|
121
133
|
export { parseModelId, getModelPricing, getModelInfo, calculateCost, calculateCostWithPricing, calculateCostWithProvenance, mergeCostSources, shortModelName, getModelDisplayInfo, compareModelIds, sortModelIds, formatCost, } from './modelInfo';
|
|
122
134
|
export type { ModelPricing, CostTokenUsage, CostSource, CostProvenanceInput, CostWithProvenance, ModelInfo, ModelProvider, ParsedModelId, ModelDisplayInfo, } from './modelInfo';
|
|
@@ -131,9 +143,10 @@ export { readCodexAssets, codexSessions } from './extractors/sources/codexAssets
|
|
|
131
143
|
export { gatherAssetsForCwd } from './extractors/gatherAssets';
|
|
132
144
|
export type { GatherAssetsOptions, GatherAssetsResult } from './extractors/gatherAssets';
|
|
133
145
|
export { messageUsageSchema, sessionMessageSchema, sessionEventSchema, permissionModeSchema, extractSessionEvents, } from './schemas/sessionEvent';
|
|
134
|
-
export { quotaWindowSchema, quotaStateSchema, quotaFailureKindSchema, quotaProviderIdSchema, quotaSourceSchema, peakHoursStateSchema, quotaFailureDescriptorSchema, runtimeQuotaProviderSchema, providerQuotaStateSchema, claudeProviderQuotaStateSchema, codexProviderQuotaStateSchema, providerQuotaMapSchema, } from './schemas/quota';
|
|
146
|
+
export { quotaWindowSchema, quotaStateSchema, quotaFailureKindSchema, quotaProviderIdSchema, quotaSourceSchema, peakHoursStateSchema, quotaFailureDescriptorSchema, runtimeQuotaProviderSchema, providerQuotaStateSchema, claudeProviderQuotaStateSchema, codexProviderQuotaStateSchema, zaiProviderQuotaStateSchema, providerQuotaMapSchema, } from './schemas/quota';
|
|
135
147
|
export { quotaHistoryRuntimeProviderSchema, quotaHistorySampleSchema, quotaHistoryDailyBucketSchema, } from './schemas/quotaHistory';
|
|
136
148
|
export { activeProviderAccountStatusSchema, activeAccountStatusSchema, } from './schemas/accountStatus';
|
|
149
|
+
export { accountProviderIdSchema, accountManagerResultSchema, beginAccountLoginResultSchema, accountLoginStatusSchema, accountEntrySchema, savedAccountProfileSchema, listAllAccountsResultSchema, } from './schemas/accountManager';
|
|
137
150
|
export { assistantTurnEventSchema, assistantTurnEventTypeSchema, assistantTurnNarrationStepSchema, assistantTurnProcessSchema, assistantTurnProcessStepSchema, assistantTurnProjectionSchema, assistantTurnReasoningTimelineItemSchema, assistantTurnSubagentSchema, assistantTurnSubagentStatusSchema, assistantTurnTimelineItemSchema, assistantTurnToolGroupStepSchema, assistantTurnToolRefSchema, } from './schemas/assistantTurn';
|
|
138
151
|
export { fetchProviderStatus, fetchOpenAIStatus } from './providerStatus';
|
|
139
152
|
export type { ProviderStatusState } from './providerStatus';
|
package/dist/index.js
CHANGED
|
@@ -3,11 +3,12 @@
|
|
|
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.
|
|
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
|
+
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
|
+
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.quotaFailureDescriptorSchema = exports.peakHoursStateSchema = exports.quotaSourceSchema = exports.quotaProviderIdSchema = 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.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 = void 0;
|
|
11
12
|
var taskPersistence_1 = require("./types/taskPersistence");
|
|
12
13
|
Object.defineProperty(exports, "TASK_PERSISTENCE_SCHEMA_VERSION", { enumerable: true, get: function () { return taskPersistence_1.TASK_PERSISTENCE_SCHEMA_VERSION; } });
|
|
13
14
|
Object.defineProperty(exports, "normalizeTaskStatus", { enumerable: true, get: function () { return taskPersistence_1.normalizeTaskStatus; } });
|
|
@@ -55,6 +56,7 @@ var claudeCode_1 = require("./providers/claudeCode");
|
|
|
55
56
|
Object.defineProperty(exports, "ClaudeCodeProvider", { enumerable: true, get: function () { return claudeCode_1.ClaudeCodeProvider; } });
|
|
56
57
|
var openCode_1 = require("./providers/openCode");
|
|
57
58
|
Object.defineProperty(exports, "OpenCodeProvider", { enumerable: true, get: function () { return openCode_1.OpenCodeProvider; } });
|
|
59
|
+
Object.defineProperty(exports, "getOpenCodeDataDir", { enumerable: true, get: function () { return openCode_1.getOpenCodeDataDir; } });
|
|
58
60
|
var codex_1 = require("./providers/codex");
|
|
59
61
|
Object.defineProperty(exports, "CodexProvider", { enumerable: true, get: function () { return codex_1.CodexProvider; } });
|
|
60
62
|
// Parsers — JSONL
|
|
@@ -212,10 +214,21 @@ Object.defineProperty(exports, "writeAccountRegistry", { enumerable: true, get:
|
|
|
212
214
|
Object.defineProperty(exports, "readActiveClaudeAccount", { enumerable: true, get: function () { return accounts_1.readActiveClaudeAccount; } });
|
|
213
215
|
Object.defineProperty(exports, "addCurrentAccount", { enumerable: true, get: function () { return accounts_1.addCurrentAccount; } });
|
|
214
216
|
Object.defineProperty(exports, "switchToAccount", { enumerable: true, get: function () { return accounts_1.switchToAccount; } });
|
|
217
|
+
Object.defineProperty(exports, "resolveActiveClaudeHome", { enumerable: true, get: function () { return accounts_1.resolveActiveClaudeHome; } });
|
|
218
|
+
Object.defineProperty(exports, "applyActiveClaudeToLiveHome", { enumerable: true, get: function () { return accounts_1.applyActiveClaudeToLiveHome; } });
|
|
219
|
+
Object.defineProperty(exports, "reconcileClaudeAuthState", { enumerable: true, get: function () { return accounts_1.reconcileClaudeAuthState; } });
|
|
215
220
|
Object.defineProperty(exports, "removeAccount", { enumerable: true, get: function () { return accounts_1.removeAccount; } });
|
|
216
221
|
Object.defineProperty(exports, "listAccounts", { enumerable: true, get: function () { return accounts_1.listAccounts; } });
|
|
217
222
|
Object.defineProperty(exports, "getActiveAccount", { enumerable: true, get: function () { return accounts_1.getActiveAccount; } });
|
|
218
223
|
Object.defineProperty(exports, "isMultiAccountEnabled", { enumerable: true, get: function () { return accounts_1.isMultiAccountEnabled; } });
|
|
224
|
+
var accountManager_1 = require("./accountManager");
|
|
225
|
+
Object.defineProperty(exports, "beginAccountLogin", { enumerable: true, get: function () { return accountManager_1.beginAccountLogin; } });
|
|
226
|
+
Object.defineProperty(exports, "getAccountLoginStatus", { enumerable: true, get: function () { return accountManager_1.getAccountLoginStatus; } });
|
|
227
|
+
Object.defineProperty(exports, "finalizeAccountLogin", { enumerable: true, get: function () { return accountManager_1.finalizeAccountLogin; } });
|
|
228
|
+
Object.defineProperty(exports, "spawnAccountLogin", { enumerable: true, get: function () { return accountManager_1.spawnAccountLogin; } });
|
|
229
|
+
Object.defineProperty(exports, "switchAccount", { enumerable: true, get: function () { return accountManager_1.switchAccount; } });
|
|
230
|
+
Object.defineProperty(exports, "listAllAccounts", { enumerable: true, get: function () { return accountManager_1.listAllAccounts; } });
|
|
231
|
+
Object.defineProperty(exports, "resolveClaudeLoginCommand", { enumerable: true, get: function () { return accountManager_1.resolveClaudeLoginCommand; } });
|
|
219
232
|
var accountRegistry_1 = require("./accountRegistry");
|
|
220
233
|
Object.defineProperty(exports, "getAccountsDir", { enumerable: true, get: function () { return accountRegistry_1.getAccountsDir; } });
|
|
221
234
|
Object.defineProperty(exports, "readSavedAccountRegistry", { enumerable: true, get: function () { return accountRegistry_1.readSavedAccountRegistry; } });
|
|
@@ -228,6 +241,13 @@ Object.defineProperty(exports, "replaceSavedAccountProfiles", { enumerable: true
|
|
|
228
241
|
Object.defineProperty(exports, "removeSavedAccountProfile", { enumerable: true, get: function () { return accountRegistry_1.removeSavedAccountProfile; } });
|
|
229
242
|
var accountStatus_1 = require("./accountStatus");
|
|
230
243
|
Object.defineProperty(exports, "getActiveAccountStatus", { enumerable: true, get: function () { return accountStatus_1.getActiveAccountStatus; } });
|
|
244
|
+
var claudeProfiles_1 = require("./claudeProfiles");
|
|
245
|
+
Object.defineProperty(exports, "getClaudeProfilesDir", { enumerable: true, get: function () { return claudeProfiles_1.getClaudeProfilesDir; } });
|
|
246
|
+
Object.defineProperty(exports, "getClaudeProfileHome", { enumerable: true, get: function () { return claudeProfiles_1.getClaudeProfileHome; } });
|
|
247
|
+
Object.defineProperty(exports, "claudeKeychainSuffix", { enumerable: true, get: function () { return claudeProfiles_1.claudeKeychainSuffix; } });
|
|
248
|
+
Object.defineProperty(exports, "claudeKeychainService", { enumerable: true, get: function () { return claudeProfiles_1.claudeKeychainService; } });
|
|
249
|
+
Object.defineProperty(exports, "isClaudeProfileAuthenticated", { enumerable: true, get: function () { return claudeProfiles_1.isClaudeProfileAuthenticated; } });
|
|
250
|
+
Object.defineProperty(exports, "readClaudeProfileIdentity", { enumerable: true, get: function () { return claudeProfiles_1.readClaudeProfileIdentity; } });
|
|
231
251
|
var codexProfiles_1 = require("./codexProfiles");
|
|
232
252
|
Object.defineProperty(exports, "getCodexProfilesDir", { enumerable: true, get: function () { return codexProfiles_1.getCodexProfilesDir; } });
|
|
233
253
|
Object.defineProperty(exports, "getCodexProfileHome", { enumerable: true, get: function () { return codexProfiles_1.getCodexProfileHome; } });
|
|
@@ -241,6 +261,17 @@ Object.defineProperty(exports, "prepareCodexAccount", { enumerable: true, get: f
|
|
|
241
261
|
Object.defineProperty(exports, "finalizeCodexAccount", { enumerable: true, get: function () { return codexProfiles_1.finalizeCodexAccount; } });
|
|
242
262
|
Object.defineProperty(exports, "switchToCodexAccount", { enumerable: true, get: function () { return codexProfiles_1.switchToCodexAccount; } });
|
|
243
263
|
Object.defineProperty(exports, "removeCodexAccount", { enumerable: true, get: function () { return codexProfiles_1.removeCodexAccount; } });
|
|
264
|
+
var terminalSync_1 = require("./terminalSync");
|
|
265
|
+
Object.defineProperty(exports, "setTerminalActiveProfile", { enumerable: true, get: function () { return terminalSync_1.setTerminalActiveProfile; } });
|
|
266
|
+
Object.defineProperty(exports, "installShellHook", { enumerable: true, get: function () { return terminalSync_1.installShellHook; } });
|
|
267
|
+
Object.defineProperty(exports, "uninstallShellHook", { enumerable: true, get: function () { return terminalSync_1.uninstallShellHook; } });
|
|
268
|
+
Object.defineProperty(exports, "isShellHookInstalled", { enumerable: true, get: function () { return terminalSync_1.isShellHookInstalled; } });
|
|
269
|
+
Object.defineProperty(exports, "writeLauncher", { enumerable: true, get: function () { return terminalSync_1.writeLauncher; } });
|
|
270
|
+
Object.defineProperty(exports, "removeLauncher", { enumerable: true, get: function () { return terminalSync_1.removeLauncher; } });
|
|
271
|
+
var autoSwitch_1 = require("./autoSwitch");
|
|
272
|
+
Object.defineProperty(exports, "DEFAULT_AUTO_SWITCH_CONFIG", { enumerable: true, get: function () { return autoSwitch_1.DEFAULT_AUTO_SWITCH_CONFIG; } });
|
|
273
|
+
Object.defineProperty(exports, "decideAutoSwitch", { enumerable: true, get: function () { return autoSwitch_1.decideAutoSwitch; } });
|
|
274
|
+
Object.defineProperty(exports, "AutoSwitchController", { enumerable: true, get: function () { return autoSwitch_1.AutoSwitchController; } });
|
|
244
275
|
// Quota
|
|
245
276
|
var quota_1 = require("./quota");
|
|
246
277
|
Object.defineProperty(exports, "fetchQuota", { enumerable: true, get: function () { return quota_1.fetchQuota; } });
|
|
@@ -265,6 +296,21 @@ Object.defineProperty(exports, "resolveCodexQuota", { enumerable: true, get: fun
|
|
|
265
296
|
Object.defineProperty(exports, "resolveCodexQuotaFromLocalSources", { enumerable: true, get: function () { return codexQuota_1.resolveCodexQuotaFromLocalSources; } });
|
|
266
297
|
var codexQuotaWatcher_1 = require("./codexQuotaWatcher");
|
|
267
298
|
Object.defineProperty(exports, "CodexQuotaWatcher", { enumerable: true, get: function () { return codexQuotaWatcher_1.CodexQuotaWatcher; } });
|
|
299
|
+
var zaiQuota_1 = require("./zaiQuota");
|
|
300
|
+
Object.defineProperty(exports, "accumulateZaiUsage", { enumerable: true, get: function () { return zaiQuota_1.accumulateZaiUsage; } });
|
|
301
|
+
Object.defineProperty(exports, "extractNextFlushTime", { enumerable: true, get: function () { return zaiQuota_1.extractNextFlushTime; } });
|
|
302
|
+
Object.defineProperty(exports, "inferZaiQuotaState", { enumerable: true, get: function () { return zaiQuota_1.inferZaiQuotaState; } });
|
|
303
|
+
Object.defineProperty(exports, "isZaiProviderId", { enumerable: true, get: function () { return zaiQuota_1.isZaiProviderId; } });
|
|
304
|
+
Object.defineProperty(exports, "makeUnavailableZaiQuotaState", { enumerable: true, get: function () { return zaiQuota_1.makeUnavailableZaiQuotaState; } });
|
|
305
|
+
Object.defineProperty(exports, "parseZaiQuotaError", { enumerable: true, get: function () { return zaiQuota_1.parseZaiQuotaError; } });
|
|
306
|
+
Object.defineProperty(exports, "resolveZaiTier", { enumerable: true, get: function () { return zaiQuota_1.resolveZaiTier; } });
|
|
307
|
+
Object.defineProperty(exports, "rowsToZaiTurnsAndErrors", { enumerable: true, get: function () { return zaiQuota_1.rowsToZaiTurnsAndErrors; } });
|
|
308
|
+
Object.defineProperty(exports, "turnTokenWeight", { enumerable: true, get: function () { return zaiQuota_1.turnTokenWeight; } });
|
|
309
|
+
Object.defineProperty(exports, "ZAI_PROMPT_INVOCATIONS", { enumerable: true, get: function () { return zaiQuota_1.ZAI_PROMPT_INVOCATIONS; } });
|
|
310
|
+
Object.defineProperty(exports, "ZAI_PROVIDER_IDS", { enumerable: true, get: function () { return zaiQuota_1.ZAI_PROVIDER_IDS; } });
|
|
311
|
+
Object.defineProperty(exports, "ZAI_TIER_BUDGETS", { enumerable: true, get: function () { return zaiQuota_1.ZAI_TIER_BUDGETS; } });
|
|
312
|
+
var zaiQuotaWatcher_1 = require("./zaiQuotaWatcher");
|
|
313
|
+
Object.defineProperty(exports, "ZaiQuotaWatcher", { enumerable: true, get: function () { return zaiQuotaWatcher_1.ZaiQuotaWatcher; } });
|
|
268
314
|
var multiProviderQuotaService_1 = require("./multiProviderQuotaService");
|
|
269
315
|
Object.defineProperty(exports, "MultiProviderQuotaService", { enumerable: true, get: function () { return multiProviderQuotaService_1.MultiProviderQuotaService; } });
|
|
270
316
|
// Model Context
|
|
@@ -331,6 +377,7 @@ Object.defineProperty(exports, "runtimeQuotaProviderSchema", { enumerable: true,
|
|
|
331
377
|
Object.defineProperty(exports, "providerQuotaStateSchema", { enumerable: true, get: function () { return quota_2.providerQuotaStateSchema; } });
|
|
332
378
|
Object.defineProperty(exports, "claudeProviderQuotaStateSchema", { enumerable: true, get: function () { return quota_2.claudeProviderQuotaStateSchema; } });
|
|
333
379
|
Object.defineProperty(exports, "codexProviderQuotaStateSchema", { enumerable: true, get: function () { return quota_2.codexProviderQuotaStateSchema; } });
|
|
380
|
+
Object.defineProperty(exports, "zaiProviderQuotaStateSchema", { enumerable: true, get: function () { return quota_2.zaiProviderQuotaStateSchema; } });
|
|
334
381
|
Object.defineProperty(exports, "providerQuotaMapSchema", { enumerable: true, get: function () { return quota_2.providerQuotaMapSchema; } });
|
|
335
382
|
// Schemas — Zod runtime validation for quota history
|
|
336
383
|
var quotaHistory_2 = require("./schemas/quotaHistory");
|
|
@@ -341,6 +388,14 @@ Object.defineProperty(exports, "quotaHistoryDailyBucketSchema", { enumerable: tr
|
|
|
341
388
|
var accountStatus_2 = require("./schemas/accountStatus");
|
|
342
389
|
Object.defineProperty(exports, "activeProviderAccountStatusSchema", { enumerable: true, get: function () { return accountStatus_2.activeProviderAccountStatusSchema; } });
|
|
343
390
|
Object.defineProperty(exports, "activeAccountStatusSchema", { enumerable: true, get: function () { return accountStatus_2.activeAccountStatusSchema; } });
|
|
391
|
+
var accountManager_2 = require("./schemas/accountManager");
|
|
392
|
+
Object.defineProperty(exports, "accountProviderIdSchema", { enumerable: true, get: function () { return accountManager_2.accountProviderIdSchema; } });
|
|
393
|
+
Object.defineProperty(exports, "accountManagerResultSchema", { enumerable: true, get: function () { return accountManager_2.accountManagerResultSchema; } });
|
|
394
|
+
Object.defineProperty(exports, "beginAccountLoginResultSchema", { enumerable: true, get: function () { return accountManager_2.beginAccountLoginResultSchema; } });
|
|
395
|
+
Object.defineProperty(exports, "accountLoginStatusSchema", { enumerable: true, get: function () { return accountManager_2.accountLoginStatusSchema; } });
|
|
396
|
+
Object.defineProperty(exports, "accountEntrySchema", { enumerable: true, get: function () { return accountManager_2.accountEntrySchema; } });
|
|
397
|
+
Object.defineProperty(exports, "savedAccountProfileSchema", { enumerable: true, get: function () { return accountManager_2.savedAccountProfileSchema; } });
|
|
398
|
+
Object.defineProperty(exports, "listAllAccountsResultSchema", { enumerable: true, get: function () { return accountManager_2.listAllAccountsResultSchema; } });
|
|
344
399
|
var assistantTurn_2 = require("./schemas/assistantTurn");
|
|
345
400
|
Object.defineProperty(exports, "assistantTurnEventSchema", { enumerable: true, get: function () { return assistantTurn_2.assistantTurnEventSchema; } });
|
|
346
401
|
Object.defineProperty(exports, "assistantTurnEventTypeSchema", { enumerable: true, get: function () { return assistantTurn_2.assistantTurnEventTypeSchema; } });
|
|
@@ -10,6 +10,11 @@ interface CodexWatcherLike extends Disposable {
|
|
|
10
10
|
stop(): void;
|
|
11
11
|
onUpdate(cb: (state: ProviderQuotaState<'codex'>) => void): Disposable;
|
|
12
12
|
}
|
|
13
|
+
interface ZaiWatcherLike extends Disposable {
|
|
14
|
+
start(): void;
|
|
15
|
+
stop(): void;
|
|
16
|
+
onUpdate(cb: (state: ProviderQuotaState<'zai'>) => void): Disposable;
|
|
17
|
+
}
|
|
13
18
|
export interface MultiProviderQuotaServiceOptions {
|
|
14
19
|
activeIntervalMs?: number;
|
|
15
20
|
idleIntervalMs?: number;
|
|
@@ -18,6 +23,7 @@ export interface MultiProviderQuotaServiceOptions {
|
|
|
18
23
|
includePeakHours?: boolean;
|
|
19
24
|
codexWorkspacePath?: string;
|
|
20
25
|
codexWatcher?: CodexWatcherLike | null;
|
|
26
|
+
zaiWatcher?: ZaiWatcherLike | null;
|
|
21
27
|
readClaudeCredentials?: () => Promise<ClaudeMaxCredentials | null>;
|
|
22
28
|
readClaudeAccount?: typeof readActiveClaudeAccount;
|
|
23
29
|
fetchClaudeQuota?: (accessToken: string) => Promise<QuotaState>;
|
|
@@ -39,6 +45,9 @@ export declare class MultiProviderQuotaService implements Disposable {
|
|
|
39
45
|
private readonly codexWatcher;
|
|
40
46
|
private readonly ownsCodexWatcher;
|
|
41
47
|
private codexSubscription;
|
|
48
|
+
private readonly zaiWatcher;
|
|
49
|
+
private readonly ownsZaiWatcher;
|
|
50
|
+
private zaiSubscription;
|
|
42
51
|
private timer;
|
|
43
52
|
private polling;
|
|
44
53
|
private quotaByProvider;
|
|
@@ -60,6 +69,7 @@ export declare class MultiProviderQuotaService implements Disposable {
|
|
|
60
69
|
getLatest(): ProviderQuotaMap;
|
|
61
70
|
updateProviderQuota(provider: 'claude', state: ProviderQuotaState<'claude'>): void;
|
|
62
71
|
updateProviderQuota(provider: 'codex', state: ProviderQuotaState<'codex'>): void;
|
|
72
|
+
updateProviderQuota(provider: 'zai', state: ProviderQuotaState<'zai'>): void;
|
|
63
73
|
dispose(): void;
|
|
64
74
|
private refreshPeakHours;
|
|
65
75
|
private poll;
|
|
@@ -59,6 +59,9 @@ class MultiProviderQuotaService {
|
|
|
59
59
|
codexWatcher;
|
|
60
60
|
ownsCodexWatcher;
|
|
61
61
|
codexSubscription = null;
|
|
62
|
+
zaiWatcher;
|
|
63
|
+
ownsZaiWatcher;
|
|
64
|
+
zaiSubscription = null;
|
|
62
65
|
timer;
|
|
63
66
|
polling = false;
|
|
64
67
|
quotaByProvider = {};
|
|
@@ -97,12 +100,24 @@ class MultiProviderQuotaService {
|
|
|
97
100
|
this.codexSubscription = this.codexWatcher?.onUpdate((state) => {
|
|
98
101
|
this.updateProviderQuota('codex', state);
|
|
99
102
|
}) ?? null;
|
|
103
|
+
if (options.zaiWatcher !== undefined) {
|
|
104
|
+
this.zaiWatcher = options.zaiWatcher;
|
|
105
|
+
this.ownsZaiWatcher = false;
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
this.zaiWatcher = null;
|
|
109
|
+
this.ownsZaiWatcher = false;
|
|
110
|
+
}
|
|
111
|
+
this.zaiSubscription = this.zaiWatcher?.onUpdate((state) => {
|
|
112
|
+
this.updateProviderQuota('zai', state);
|
|
113
|
+
}) ?? null;
|
|
100
114
|
}
|
|
101
115
|
startPolling() {
|
|
102
116
|
if (this.polling)
|
|
103
117
|
return;
|
|
104
118
|
this.polling = true;
|
|
105
119
|
this.codexWatcher?.start();
|
|
120
|
+
this.zaiWatcher?.start();
|
|
106
121
|
void this.poll();
|
|
107
122
|
this.log?.('[Quota] Polling started');
|
|
108
123
|
}
|
|
@@ -115,6 +130,7 @@ class MultiProviderQuotaService {
|
|
|
115
130
|
this.timer = undefined;
|
|
116
131
|
}
|
|
117
132
|
this.codexWatcher?.stop();
|
|
133
|
+
this.zaiWatcher?.stop();
|
|
118
134
|
this.log?.('[Quota] Polling stopped');
|
|
119
135
|
}
|
|
120
136
|
setPollingMode(mode) {
|
|
@@ -165,6 +181,19 @@ class MultiProviderQuotaService {
|
|
|
165
181
|
this.emit();
|
|
166
182
|
return;
|
|
167
183
|
}
|
|
184
|
+
if (provider === 'zai') {
|
|
185
|
+
const nextState = {
|
|
186
|
+
...state,
|
|
187
|
+
runtimeProvider: 'zai',
|
|
188
|
+
providerId: 'zai',
|
|
189
|
+
};
|
|
190
|
+
this.quotaByProvider = {
|
|
191
|
+
...this.quotaByProvider,
|
|
192
|
+
zai: nextState,
|
|
193
|
+
};
|
|
194
|
+
this.emit();
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
168
197
|
const nextState = {
|
|
169
198
|
...state,
|
|
170
199
|
runtimeProvider: 'codex',
|
|
@@ -183,6 +212,11 @@ class MultiProviderQuotaService {
|
|
|
183
212
|
if (this.ownsCodexWatcher) {
|
|
184
213
|
this.codexWatcher?.dispose();
|
|
185
214
|
}
|
|
215
|
+
this.zaiSubscription?.dispose();
|
|
216
|
+
this.zaiSubscription = null;
|
|
217
|
+
if (this.ownsZaiWatcher) {
|
|
218
|
+
this.zaiWatcher?.dispose();
|
|
219
|
+
}
|
|
186
220
|
this.listeners.splice(0, this.listeners.length);
|
|
187
221
|
}
|
|
188
222
|
async refreshPeakHours() {
|
package/dist/providerQuota.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { PeakHoursState } from './peakHours';
|
|
2
2
|
import type { QuotaState } from './quota';
|
|
3
3
|
import type { QuotaFailureDescriptor } from './quotaPresentation';
|
|
4
|
-
export type RuntimeQuotaProvider = 'claude' | 'codex';
|
|
4
|
+
export type RuntimeQuotaProvider = 'claude' | 'codex' | 'zai';
|
|
5
5
|
export interface ProviderQuotaState<TProvider extends RuntimeQuotaProvider = RuntimeQuotaProvider> extends QuotaState {
|
|
6
6
|
runtimeProvider: TProvider;
|
|
7
7
|
accountLabel?: string;
|
|
@@ -12,4 +12,5 @@ export interface ProviderQuotaState<TProvider extends RuntimeQuotaProvider = Run
|
|
|
12
12
|
export interface ProviderQuotaMap {
|
|
13
13
|
claude?: ProviderQuotaState<'claude'>;
|
|
14
14
|
codex?: ProviderQuotaState<'codex'>;
|
|
15
|
+
zai?: ProviderQuotaState<'zai'>;
|
|
15
16
|
}
|
package/dist/providers/detect.js
CHANGED
|
@@ -44,17 +44,7 @@ const fs = __importStar(require("fs"));
|
|
|
44
44
|
const os = __importStar(require("os"));
|
|
45
45
|
const path = __importStar(require("path"));
|
|
46
46
|
const codexProfiles_1 = require("../codexProfiles");
|
|
47
|
-
|
|
48
|
-
const xdg = process.env.XDG_DATA_HOME;
|
|
49
|
-
if (xdg)
|
|
50
|
-
return path.join(xdg, 'opencode');
|
|
51
|
-
if (process.platform === 'darwin')
|
|
52
|
-
return path.join(os.homedir(), 'Library', 'Application Support', 'opencode');
|
|
53
|
-
if (process.platform === 'win32') {
|
|
54
|
-
return path.join(process.env.LOCALAPPDATA || process.env.APPDATA || path.join(os.homedir(), 'AppData', 'Local'), 'opencode');
|
|
55
|
-
}
|
|
56
|
-
return path.join(os.homedir(), '.local', 'share', 'opencode');
|
|
57
|
-
}
|
|
47
|
+
const openCode_1 = require("./openCode");
|
|
58
48
|
function getCodexHomes() {
|
|
59
49
|
return (0, codexProfiles_1.getCodexMonitoringHomes)();
|
|
60
50
|
}
|
|
@@ -109,7 +99,7 @@ function getMostRecentMtime(dir) {
|
|
|
109
99
|
}
|
|
110
100
|
}
|
|
111
101
|
function getOpenCodeActivityMtime() {
|
|
112
|
-
const dataDir = getOpenCodeDataDir();
|
|
102
|
+
const dataDir = (0, openCode_1.getOpenCodeDataDir)();
|
|
113
103
|
const dbPath = path.join(dataDir, 'opencode.db');
|
|
114
104
|
try {
|
|
115
105
|
const dbMtime = fs.statSync(dbPath).mtime.getTime();
|
|
@@ -137,7 +127,7 @@ function getCodexActivityMtime() {
|
|
|
137
127
|
}
|
|
138
128
|
function getProviderPaths() {
|
|
139
129
|
const claudeBase = path.join(os.homedir(), '.claude', 'projects');
|
|
140
|
-
const openCodeDataDir = getOpenCodeDataDir();
|
|
130
|
+
const openCodeDataDir = (0, openCode_1.getOpenCodeDataDir)();
|
|
141
131
|
const codexHomes = getCodexHomes();
|
|
142
132
|
return {
|
|
143
133
|
claudeBase,
|
|
@@ -16,8 +16,20 @@
|
|
|
16
16
|
* @module providers/openCode
|
|
17
17
|
*/
|
|
18
18
|
import type { ReadSessionContextSnapshotOptions, SessionContextSnapshot } from '../context/sessionContext';
|
|
19
|
+
import type { ZaiTier } from '../zaiQuota';
|
|
20
|
+
import type { QuotaState } from '../quota';
|
|
19
21
|
import type { SessionProviderBase, SessionReader, ProjectFolderInfo, SearchHit, SessionFileStats, ProviderId, ProviderRuntimeStatus } from './types';
|
|
20
22
|
import type { TokenUsage, SubagentStats, ContextAttribution } from '../types/sessionEvent';
|
|
23
|
+
/**
|
|
24
|
+
* Gets the OpenCode data directory.
|
|
25
|
+
*
|
|
26
|
+
* Resolves in priority order: `XDG_DATA_HOME` (if set), then whichever of
|
|
27
|
+
* the platform-default candidates actually contains an `opencode.db` file.
|
|
28
|
+
* OpenCode's CLI has historically used the Linux-style `~/.local/share/opencode`
|
|
29
|
+
* path even on macOS, so we probe both and pick whichever exists — falling
|
|
30
|
+
* back to the platform default when neither is present yet.
|
|
31
|
+
*/
|
|
32
|
+
export declare function getOpenCodeDataDir(): string;
|
|
21
33
|
/**
|
|
22
34
|
* Session provider for OpenCode CLI.
|
|
23
35
|
*
|
|
@@ -77,4 +89,23 @@ export declare class OpenCodeProvider implements SessionProviderBase {
|
|
|
77
89
|
/** Set a runtime-reported context window limit (overrides static map). */
|
|
78
90
|
setDynamicContextWindowLimit(limit: number): void;
|
|
79
91
|
dispose(): void;
|
|
92
|
+
/**
|
|
93
|
+
* Derives a z.ai coding-plan `QuotaState` from OpenCode assistant turns
|
|
94
|
+
* tagged with `providerID ∈ {zai, zai-coding-plan}`.
|
|
95
|
+
*
|
|
96
|
+
* z.ai does not expose a quota API (verified vs. docs.z.ai/openapi.json),
|
|
97
|
+
* so this method accumulates observed per-turn tokens from OpenCode's DB
|
|
98
|
+
* into 5-hour / 7-day rolling windows and infers utilization against the
|
|
99
|
+
* configured tier budget. Returns null when no z.ai routing is detected.
|
|
100
|
+
*
|
|
101
|
+
* @param tier Plan tier; `'auto'` infers from observed weekly volume.
|
|
102
|
+
* When the caller has no opinion, the heuristic falls back to
|
|
103
|
+
* `'max'` (conservative — small overcount rather than large).
|
|
104
|
+
*/
|
|
105
|
+
getZaiQuotaState(tier?: ZaiTier | 'auto'): QuotaState | null;
|
|
106
|
+
/**
|
|
107
|
+
* Cheap boolean: does the local OpenCode install currently route at z.ai?
|
|
108
|
+
* Used by callers to decide whether to render a z.ai quota surface.
|
|
109
|
+
*/
|
|
110
|
+
isZaiRoutingActive(): boolean;
|
|
80
111
|
}
|