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.
Files changed (44) hide show
  1. package/README.md +14 -2
  2. package/dist/accountManager.d.ts +52 -0
  3. package/dist/accountManager.js +344 -0
  4. package/dist/accounts.d.ts +3 -0
  5. package/dist/accounts.js +180 -40
  6. package/dist/autoSwitch.d.ts +70 -0
  7. package/dist/autoSwitch.js +160 -0
  8. package/dist/claudeProfiles.d.ts +12 -0
  9. package/dist/claudeProfiles.js +96 -0
  10. package/dist/codexProfiles.d.ts +6 -2
  11. package/dist/codexProfiles.js +6 -1
  12. package/dist/credentialIO.d.ts +3 -2
  13. package/dist/credentialIO.js +11 -9
  14. package/dist/ensureDefaultAccounts.js +6 -0
  15. package/dist/index.d.ts +16 -3
  16. package/dist/index.js +60 -5
  17. package/dist/multiProviderQuotaService.d.ts +10 -0
  18. package/dist/multiProviderQuotaService.js +34 -0
  19. package/dist/providerQuota.d.ts +2 -1
  20. package/dist/providers/detect.js +3 -13
  21. package/dist/providers/openCode.d.ts +31 -0
  22. package/dist/providers/openCode.js +108 -2
  23. package/dist/providers/openCodeDatabase.d.ts +19 -0
  24. package/dist/providers/openCodeDatabase.js +28 -0
  25. package/dist/quota.d.ts +1 -1
  26. package/dist/quotaHistory.d.ts +1 -1
  27. package/dist/quotaHistory.js +14 -2
  28. package/dist/quotaSnapshots.d.ts +8 -2
  29. package/dist/schemas/accountManager.d.ts +104 -0
  30. package/dist/schemas/accountManager.js +84 -0
  31. package/dist/schemas/assistantTurn.d.ts +5 -5
  32. package/dist/schemas/index.d.ts +5 -1
  33. package/dist/schemas/index.js +10 -1
  34. package/dist/schemas/quota.d.ts +185 -20
  35. package/dist/schemas/quota.js +8 -1
  36. package/dist/schemas/quotaHistory.d.ts +3 -1
  37. package/dist/schemas/quotaHistory.js +1 -0
  38. package/dist/terminalSync.d.ts +7 -0
  39. package/dist/terminalSync.js +202 -0
  40. package/dist/zaiQuota.d.ts +209 -0
  41. package/dist/zaiQuota.js +290 -0
  42. package/dist/zaiQuotaWatcher.d.ts +97 -0
  43. package/dist/zaiQuotaWatcher.js +259 -0
  44. package/package.json +1 -1
@@ -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) {
@@ -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;
@@ -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 KEYCHAIN_SERVICE = 'Claude Code-credentials';
53
- function getCredentialsFilePath() {
54
- return path.join(os.homedir(), '.claude', '.credentials.json');
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', KEYCHAIN_SERVICE, '-w',
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', KEYCHAIN_SERVICE,
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.findActiveClaudeSession = exports.discoverSessionDirectory = exports.getClaudeSessionDirectory = exports.encodeClaudeWorkspacePath = exports.detectSessionActivity = exports.extractTaskInfo = exports.scanSubagentDir = exports.normalizeCodexToolInput = exports.normalizeCodexToolName = exports.extractPatchFilePaths = exports.CodexRolloutParser = exports.parseDbPartData = exports.parseDbMessageData = exports.convertOpenCodeMessage = exports.detectPlanModeFromText = exports.normalizeToolInput = exports.normalizeToolName = exports.TRUNCATION_PATTERNS = exports.JsonlParser = exports.CodexProvider = exports.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.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.scanSubagentTraces = exports.findAllSessionsWithWorktrees = exports.discoverWorktreeSiblings = exports.resolveWorktreeMainRepo = exports.getAllClaudeProjectFolders = exports.decodeEncodedPath = exports.getMostRecentlyActiveSessionDir = exports.findSubdirectorySessionDirs = exports.findSessionsInDirectory = exports.findAllClaudeSessions = void 0;
8
- exports.getCodexExecutionEnv = exports.resolveSidekickCodexHome = exports.getActiveCodexAccount = exports.listCodexAccounts = exports.getSystemCodexHome = exports.getCodexMonitoringHomes = exports.getCodexProfileHome = exports.getCodexProfilesDir = exports.getActiveAccountStatus = exports.removeSavedAccountProfile = exports.replaceSavedAccountProfiles = exports.setActiveSavedAccount = exports.upsertSavedAccountProfile = exports.getActiveSavedAccount = exports.listSavedAccountProfiles = exports.writeSavedAccountRegistry = exports.readSavedAccountRegistry = exports.getAccountsDir = exports.isMultiAccountEnabled = exports.getActiveAccount = exports.listAccounts = exports.removeAccount = 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 = void 0;
9
- 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.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.removeCodexAccount = exports.switchToCodexAccount = exports.finalizeCodexAccount = exports.prepareCodexAccount = void 0;
10
- 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.activeAccountStatusSchema = exports.activeProviderAccountStatusSchema = exports.quotaHistoryDailyBucketSchema = exports.quotaHistorySampleSchema = exports.quotaHistoryRuntimeProviderSchema = exports.providerQuotaMapSchema = exports.codexProviderQuotaStateSchema = exports.claudeProviderQuotaStateSchema = exports.providerQuotaStateSchema = exports.runtimeQuotaProviderSchema = exports.quotaFailureDescriptorSchema = exports.peakHoursStateSchema = exports.quotaSourceSchema = exports.quotaProviderIdSchema = exports.quotaFailureKindSchema = exports.quotaStateSchema = exports.quotaWindowSchema = exports.extractSessionEvents = exports.permissionModeSchema = exports.sessionEventSchema = exports.sessionMessageSchema = void 0;
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() {
@@ -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
  }
@@ -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
- function getOpenCodeDataDir() {
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
  }