sidekick-shared 0.27.4 → 0.27.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +43 -0
- package/README.md +92 -45
- package/dist/accountHealth.d.ts +14 -0
- package/dist/accountHealth.js +61 -14
- package/dist/accountLaunch.d.ts +6 -0
- package/dist/accountLaunch.js +61 -4
- package/dist/accountLease.d.ts +5 -0
- package/dist/accountLease.js +98 -0
- package/dist/accountManager.d.ts +7 -0
- package/dist/accountManager.js +226 -89
- package/dist/accountSync.d.ts +1 -5
- package/dist/accountSync.js +22 -6
- package/dist/accountSyncTypes.d.ts +9 -0
- package/dist/accounts.d.ts +75 -18
- package/dist/accounts.js +712 -189
- package/dist/claudeCredentialDoctor.d.ts +50 -0
- package/dist/claudeCredentialDoctor.js +277 -0
- package/dist/claudeCredentialLedger.d.ts +15 -0
- package/dist/claudeCredentialLedger.js +130 -0
- package/dist/claudeCredentials.d.ts +20 -3
- package/dist/claudeCredentials.js +50 -3
- package/dist/claudeLiveGuard.d.ts +33 -0
- package/dist/claudeLiveGuard.js +46 -0
- package/dist/claudeProfiles.d.ts +14 -0
- package/dist/claudeProfiles.js +22 -0
- package/dist/claudeRefreshLock.d.ts +15 -0
- package/dist/claudeRefreshLock.js +145 -0
- package/dist/codexAuth.d.ts +4 -0
- package/dist/codexAuth.js +18 -0
- package/dist/codexCredentialDoctor.d.ts +33 -0
- package/dist/codexCredentialDoctor.js +302 -0
- package/dist/codexCredentialStore.d.ts +29 -0
- package/dist/codexCredentialStore.js +213 -0
- package/dist/codexKeepAlive.d.ts +2 -0
- package/dist/codexKeepAlive.js +116 -0
- package/dist/codexPaths.d.ts +8 -2
- package/dist/codexPaths.js +51 -7
- package/dist/codexProfiles.d.ts +37 -31
- package/dist/codexProfiles.js +842 -671
- package/dist/credentialIO.d.ts +67 -7
- package/dist/credentialIO.js +211 -47
- package/dist/ensureDefaultAccounts.js +1 -8
- package/dist/index.d.ts +17 -4
- package/dist/index.js +36 -11
- package/dist/keepAlive.d.ts +2 -1
- package/dist/keepAlive.js +116 -29
- package/dist/liveCredentialGuard.d.ts +28 -0
- package/dist/liveCredentialGuard.js +36 -0
- package/dist/node.d.ts +3 -0
- package/dist/node.js +4 -2
- package/dist/processDetection.d.ts +10 -3
- package/dist/processDetection.js +44 -11
- package/dist/promptHistory.d.ts +66 -0
- package/dist/promptHistory.js +37 -18
- package/dist/schemas/accountManager.d.ts +22 -0
- package/dist/schemas/accountManager.js +4 -0
- package/dist/schemas/assistantTurn.d.ts +2 -2
- package/dist/sessionPromptHistory.d.ts +120 -0
- package/dist/sessionPromptHistory.js +278 -0
- package/dist/sessionPromptSignals.d.ts +56 -0
- package/dist/sessionPromptSignals.js +355 -0
- package/dist/terminalSync.d.ts +12 -2
- package/dist/terminalSync.js +27 -2
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -3,17 +3,17 @@
|
|
|
3
3
|
* Public API for sidekick-shared.
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
7
|
-
exports.
|
|
8
|
-
exports.
|
|
9
|
-
exports.
|
|
10
|
-
exports.
|
|
11
|
-
exports.
|
|
12
|
-
exports.
|
|
13
|
-
exports.
|
|
14
|
-
exports.
|
|
15
|
-
exports.
|
|
16
|
-
exports.fetchProviderServiceStatus = exports.diagnoseProviderFailure = exports.mergeFailingToolWindows = exports.failingToolTrend = exports.FAILING_TOOL_TREND_ARROWS = exports.scopePeakHoursToSessionProvider = exports.PEAK_HOURS_DESCRIPTION = exports.PEAK_HOURS_CACHE_MS = exports.isClaudeCodeSessionProvider = exports.getScheduledPeakHoursState = exports.fetchPeakHoursStatus = exports.DEFAULT_PEAK_HOURS_TIMEOUT_MS = exports.createPeakHoursNotApplicableState = exports._resetPeakHoursCache = void 0;
|
|
6
|
+
exports.ACTIVE_SESSION_MTIME_THRESHOLD_MS = exports.sessionSummaryFromStats = exports.removeSessionSummary = exports.markFileImported = exports.isFileImported = exports.applySessionSummary = exports.pruneUsageCache = exports.getUsageCacheDir = exports.collectUsageEvents = exports.USAGE_CACHE_VERSION = exports.MAX_USAGE_CACHE_FILES = exports.findActiveBillingBlock = exports.computeBillingBlocks = exports.BILLING_BLOCK_DURATION_MS = exports.writeStateFile = exports.readStateFile = exports.quotaToStateFile = exports.getStateFilePath = exports.billingBlockToStateFile = exports.STATE_FILE_SCHEMA_VERSION = exports.STATE_FILE_NAME = exports.sessionFingerprintParts = exports.fingerprintString = exports.readSessionReportInputs = exports.readSessionFileStats = exports.providerContextSizeFn = exports.firstUserPrompt = exports.computeSessionFileStats = exports.isHumanPrompt = exports.humanPromptText = exports.HUMAN_CODEX_SOURCES = exports.HUMAN_CLAUDE_ENTRYPOINTS = exports.collectSessionPromptHistory = exports.collectPromptHistory = exports.readSessionTranscript = exports.listRecentSessions = exports.projectSessionTranscript = exports.estimateSerializedTokens = exports.estimateTextTokens = exports.TOKEN_TOTAL_LABEL = exports.TOKEN_SUBAGENTS_LABEL = exports.TOKEN_SESSION_TOTAL_LABEL = exports.TOKEN_MAIN_THREAD_LABEL = exports.TOKEN_CONTEXT_LABEL = exports.sumTokenTotals = exports.summarizeTokens = exports.formatTokenBreakdown = exports.calculateNormalizedUsageCost = exports.extractNormalizedUsage = exports.normalizeProviderUsage = void 0;
|
|
7
|
+
exports.updateJsonStoreAtomic = exports.atomicWriteFileSync = exports.atomicWriteJsonSync = exports.atomicWriteJson = exports.readClaudeCodePlanFiles = exports.getPlanAnalytics = exports.writePlans = exports.getLatestPlan = exports.readPlans = exports.readLatestHandoff = exports.readHistory = exports.readNotes = exports.readDecisions = exports.readTasks = exports.migrateLegacyProjectStores = exports.resolveProjectIdentity = exports.getProjectSlugRaw = exports.getProjectSlug = exports.encodeWorkspacePath = exports.getGlobalDataPath = exports.getProjectDataPath = exports.setConfigDir = exports.getDefaultConfigDir = exports.getConfigDirOverride = exports.getConfigDir = exports.CONFIG_DIR_ENV_VAR = exports.MAX_PLANS_PER_PROJECT = exports.PLAN_SCHEMA_VERSION = exports.createEmptyDataStore = exports.createEmptyTokenTotals = exports.HISTORICAL_SESSION_RETENTION_LIMIT = exports.HISTORICAL_DATA_SCHEMA_VERSION = exports.STALENESS_THRESHOLDS = exports.IMPORTANCE_DECAY_FACTORS = exports.KNOWLEDGE_NOTE_SCHEMA_VERSION = exports.DECISION_LOG_SCHEMA_VERSION = exports.normalizeTaskStatus = exports.TASK_PERSISTENCE_SCHEMA_VERSION = exports.isAggregateCodexLimit = exports.splitWatchedPath = exports.DirectoryListingCache = exports.fileFingerprintParts = exports.fileFingerprint = exports.observedSessionSourceFromProvider = exports.ObservedSessionCollector = exports.weekKey = exports.usageBucketKey = exports.summarizeUsageRows = exports.bucketUsage = exports.importSessionHistory = void 0;
|
|
8
|
+
exports.classifySessionActivity = exports.subagentTokenTotals = exports.scanSessionSubagents = exports.readMainThreadTokenTotals = exports.combineSessionTokenTotals = exports.collectSessionTokenTotals = exports.addUsageToSubagent = exports.normalizeClaudeUsage = exports.dedupedRawClaudeUsage = exports.SYNTHETIC_MODEL = exports.ClaudeUsageDeduper = exports.readAgentMeta = exports.extractTaskInfo = exports.scanSubagentDir = exports.resolveCodexCallUsage = 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.walkRolloutFilesAsync = exports.walkRolloutFiles = exports.findCodexRolloutFile = exports.CodexProvider = exports.getOpenCodeDataDir = exports.OpenCodeProvider = exports.ClaudeCodeProvider = exports.getAllDetectedProviders = exports.detectProvider = exports._resetProviderDetectionCache = exports.getObservedActivityReason = exports.derivePendingUserRequestV1 = exports.createProviderSessionAdapterV1 = exports.createSessionProviders = exports.SESSION_PROVIDER_IDS = exports.renderHandoffUrlTemplate = exports.addNote = exports.decisionFingerprint = exports.addDecision = exports.completeTask = exports.addTask = exports.withFileLockSync = exports.updateJsonStoreAtomicSync = void 0;
|
|
9
|
+
exports.toFollowEvents = exports.resolveSessionPath = exports.createWatcher = exports.parseChangelog = exports.extractProposedPlanShared = exports.parsePlanMarkdownShared = exports.PlanExtractor = exports.segmentAssistantTurn = exports.reasoningSummary = exports.isAssistantTurnSubagentTool = exports.extractTurnSubagents = exports.assistantTurnEventsFromSessionEvents = exports.readSessionContextSnapshot = exports.createSessionContextProjector = exports.calculateSessionContextPressure = exports.buildSessionContextSnapshot = exports.composeContext = exports.FilterEngine = exports.searchSessions = exports.CodexDatabase = exports.OpenCodeDatabase = exports.discoverDebugLogs = exports.collapseDuplicates = exports.filterByLevel = exports.parseDebugLog = exports.readSessionPreviewAsync = exports.readSessionPreview = exports.listSessionPreviewsAsync = exports.listSessionPreviews = exports.readCodexHistory = exports.parseMcpToolName = exports.scanSubagentTraces = exports.findAllSessionsWithWorktrees = exports.discoverWorktreeSiblings = exports.resolveWorktreeMainRepo = exports.getAllClaudeProjectFolders = exports.decodeEncodedPath = exports.getMostRecentlyActiveSessionDir = exports.findSubdirectorySessionDirs = exports.findSessionFilesWithStats = exports.findSessionsInDirectory = exports.findAllClaudeSessions = exports.findActiveClaudeSession = exports.discoverSessionDirectory = exports.getClaudeSessionDirectory = exports.encodeClaudeWorkspacePath = exports.SESSION_ACTIVITY_STALENESS_MS = exports.SESSION_ACTIVITY_GRACE_PERIOD_MS = exports.refreshSessionActivityState = exports.detectSessionActivity = void 0;
|
|
10
|
+
exports.parseTranscript = exports.generateHtmlReport = exports.formatCompactionLedger = exports.calculateCompactionLedger = exports.describeCostProvenance = exports.classifyCostProvenance = exports.calculateCodeImpact = exports.scoreSessionQuality = exports.calculateQualityTrend = exports.PatternExtractor = exports.HeatmapTracker = exports.FrequencyTracker = exports.readErrorHistory = exports.getTopFailingTools = exports.appendErrorHistory = exports.MAX_ERROR_HISTORY_SESSIONS = exports.ERROR_HISTORY_SCHEMA_VERSION = exports.getSnapshotPath = exports.MAX_SNAPSHOT_FILES = exports.pruneSnapshots = exports.isSnapshotValid = exports.deleteSnapshot = exports.loadSnapshot = exports.saveSnapshot = exports.SessionMonitor = exports.parseTodoDependencies = exports.EventAggregator = exports.getRandomPhrase = exports.PHRASE_CATEGORIES = exports.ALL_PHRASES = exports.HIGHLIGHT_CSS = exports.clearHighlightCache = exports.highlightEvent = exports.formatSessionJson = exports.formatSessionMarkdown = exports.formatSessionText = exports.classifyNoise = exports.shouldMergeWithPrevious = exports.classifyFollowEvent = exports.classifyMessage = exports.getSoftNoiseReason = exports.isHardNoiseFollowEvent = exports.isHardNoise = exports.formatToolSummary = exports.parseLocalDateKey = exports.formatTokenCount = exports.formatLocalDateKey = exports.formatDurationMs = exports.addLocalDays = exports.createJsonlTail = void 0;
|
|
11
|
+
exports.getAccountLoginStatus = exports.beginAccountLogin = exports.isMultiAccountEnabled = exports.resolveActiveClaudeAccount = exports.getActiveAccount = exports.listAccounts = exports.removeAccount = exports.reconcileClaudeAuthState = exports.applyActiveClaudeToLiveHome = exports.resolveActiveClaudeHome = exports.cleanupAbandonedClaudeLogins = exports.syncClaudeLiveState = exports.switchToAccountAsync = exports.switchToAccount = exports.addCurrentAccount = exports.readActiveClaudeAccount = exports.writeAccountRegistry = exports.readAccountRegistry = exports.ensureDefaultAccounts = exports.codexIdentitiesMatch = exports.readCodexAccessTokenExpiry = exports.readCodexLastRefresh = exports.readCodexAuthIdentity = exports.parseCodexAuthJson = exports.CLAUDE_REFRESH_TOKEN_LIFETIME_ESTIMATE_MS = exports.CLAUDE_ACCESS_TOKEN_LIFETIME_MS = exports.mergeClaudeLoginIntoLive = exports.claudeLoginOnly = exports.claudeRefreshFingerprint = exports.resolveClaudeRefreshExpiry = exports.isNewerClaudeCredential = exports.claudeCredentialFreshness = exports.parseClaudeCredentialBlob = exports.readClaudeMaxAccessTokenSync = exports.readClaudeMaxCredentialsRaw = exports.readClaudeMaxCredentials = exports.parseKeychainDump = exports.repairClaudeCredentialStores = exports.inspectClaudeCredentialStores = exports.getClaudeCredentialLedgerPath = exports.readClaudeCredentialLedger = exports.decideLiveClaudeWrite = exports.SIDEKICK_KEYCHAIN_COMMENT_PREFIX = exports.ClaudeCredentialWriteError = exports.deleteStoredCredentials = exports.writeActiveCredentials = exports.readClaudeCredentialStore = exports.readActiveCredentials = exports.openInBrowser = exports.parseTranscriptFromEvents = void 0;
|
|
12
|
+
exports.buildClaudeChildEnv = exports.claudeKeychainAccountName = exports.claudeKeychainService = exports.claudeKeychainSuffix = exports.getClaudeConfigPath = exports.getDefaultClaudeHome = exports.getLiveClaudeHome = exports.getClaudeProfileHome = exports.getClaudeProfilesDir = exports.onAccountsChanged = exports.getActiveAccountStatus = exports.ACCOUNT_PROVIDER_IDS = exports.removeSavedAccountProfile = exports.replaceSavedAccountProfiles = exports.setActiveSavedAccount = exports.upsertSavedAccountProfile = exports.getActiveSavedAccount = exports.listSavedAccountProfiles = exports.writeSavedAccountRegistry = exports.readSavedAccountRegistry = exports.getAccountsDir = exports.ACCOUNT_CONSUMER_REACHABILITY = exports.describeAccountConsumer = exports.detectRunningAccountConsumersSync = exports.detectRunningAccountConsumers = exports.findRunningProcessesSync = exports.findRunningProcesses = exports.keepAliveCommand = exports.refreshInactiveAccounts = exports.getAccountLaunchEnv = exports.getHealthSidecarPath = exports.readHealthSidecar = exports.listAccountsWithHealth = exports.getAccountHealth = exports.cleanupAbandonedLogins = exports.syncLiveAccountStateSync = exports.syncLiveAccountState = exports.getLastSwitchPath = exports.readLastSwitch = exports.discardAccountLogin = exports.resolveClaudeLoginCommand = exports.listAllAccounts = exports.getLastSwitch = exports.undoLastSwitch = exports.switchAccountAsync = exports.switchAccount = exports.spawnAccountLogin = exports.finalizeAccountLoginAsync = exports.finalizeAccountLogin = exports.getAccountLoginStatusAsync = void 0;
|
|
13
|
+
exports.quotaFromStatuslinePayload = exports.parseClaudeStatuslinePayload = exports.evaluateQuotaThresholds = exports.describeQuotaThresholdAlert = exports.DEFAULT_QUOTA_THRESHOLDS = exports.QUOTA_FRESH_MAX_AGE_MS = exports.QUOTA_AGING_MAX_AGE_MS = exports.formatQuotaAge = exports.classifyQuotaFreshness = exports.resolveQuota = exports.writeQuotaSnapshot = exports.readQuotaSnapshot = exports.QuotaPoller = exports.describeQuotaFailure = exports.withQuotaProjections = exports.projectQuotaWindow = exports.fetchQuota = exports.SEVEN_DAY_WINDOW_MS = exports.QUOTA_PROVIDER_IDS = exports.FIVE_HOUR_WINDOW_MS = exports.AutoSwitchController = exports.decideAutoSwitch = exports.DEFAULT_AUTO_SWITCH_CONFIG = exports.removeLauncher = exports.writeLauncher = exports.writeAccountLauncher = exports.CODEX_KEYRING_FIX_HINT = exports.getCodexCredentialStoreMode = exports.cleanupAbandonedCodexLogins = exports.syncCodexLiveState = exports.removeCodexAccount = exports.switchToCodexAccountAsync = exports.switchToCodexAccount = exports.finalizeCodexAccountAsync = exports.finalizeCodexAccount = exports.prepareCodexAccountAsync = exports.prepareCodexAccount = exports.getCodexExecutionEnv = exports.resolveSidekickCodexHome = exports.resolveActiveCodexAccount = exports.getActiveCodexAccount = exports.listCodexAccounts = exports.getSystemCodexHome = exports.getCodexMonitoringHomes = exports.getCodexProfileHome = exports.getCodexProfilesDir = exports.readLiveClaudeIdentity = exports.readClaudeProfileIdentity = exports.isClaudeProfileAuthenticated = exports.CLAUDE_SECURESTORAGE_CONFIG_DIR_ENV = void 0;
|
|
14
|
+
exports.recordObservedContextWindow = exports.loadObservedContextWindows = exports.LITELLM_CATALOG_URL = exports.normalizeLiteLlmContextWindows = exports.normalizeLiteLlmCatalog = exports.hydratePricingCatalog = exports.RESOLVED_MODEL_CATALOG_SCHEMA_VERSION = exports.resolveModelAlias = exports.registerModelAlias = exports.importResolvedModelCatalog = exports.exportResolvedModelCatalog = exports.MODEL_PROVIDER_IDS = exports.formatCost = exports.sortModelIds = exports.compareModelIds = exports.getModelDisplayInfo = exports.shortModelName = exports.mergeCostSources = exports.calculateCostWithProvenance = exports.calculateCostWithPricing = exports.calculateCost = exports.getModelInfo = exports.resolveModelPricing = exports.getModelPricing = exports.parseModelId = exports.DEFAULT_CONTEXT_WINDOW = exports.resolveModelContextWindow = exports.getModelContextWindowSize = exports.selectStatuslineAccount = exports.formatStatusline = exports.estimateTimeToQuota = exports.BurnRateCalculator = exports.RUNTIME_QUOTA_PROVIDER_IDS = exports.MultiProviderQuotaService = exports.resolveZaiQuota = exports.readZaiCredentials = exports.quotaStateFromZaiQuotaLimitPayload = exports.fetchZaiQuotaFromApi = exports.CodexQuotaWatcher = exports.resolveCodexQuotaFromLocalSources = exports.resolveCodexQuota = exports.readLatestCodexQuotaFromRollouts = exports.quotaFromCodexRateLimits = exports.fetchCodexQuotaFromApi = exports.fetchCodexResetCreditsFromApi = exports.getWorkspaceIdFromPath = exports.pruneQuotaHistory = exports.readQuotaHistoryDailyBuckets = exports.readQuotaHistoryRange = exports.appendQuotaHistorySample = void 0;
|
|
15
|
+
exports.assistantTurnNarrationStepSchema = exports.assistantTurnEventTypeSchema = exports.assistantTurnEventSchema = exports.listAllAccountsResultSchema = exports.savedAccountProfileSchema = exports.accountEntrySchema = exports.accountLoginStatusSchema = exports.beginAccountLoginResultSchema = exports.accountManagerResultSchema = exports.accountProviderIdSchema = exports.activeAccountStatusSchema = exports.activeProviderAccountStatusSchema = exports.quotaHistoryDailyBucketSchema = exports.quotaHistorySampleSchema = exports.quotaHistoryRuntimeProviderSchema = exports.providerQuotaMapSchema = exports.zaiProviderQuotaStateSchema = exports.codexProviderQuotaStateSchema = exports.claudeProviderQuotaStateSchema = exports.providerQuotaStateSchema = exports.runtimeQuotaProviderSchema = exports.quotaFailureDescriptorSchema = exports.peakHoursStateSchema = exports.codexResetCreditsSnapshotSchema = exports.codexResetCreditSchema = exports.quotaSourceSchema = exports.quotaProviderIdSchema = exports.quotaFailureKindSchema = exports.quotaStateSchema = exports.quotaWindowSchema = exports.extractSessionEvents = exports.permissionModeSchema = exports.sessionEventSchema = exports.sessionMessageSchema = exports.messageUsageSchema = exports.ToolCallTracker = exports.extractToolCalls = exports.extractToolCall = exports.extractErrorMessage = exports.categorizeError = exports.gatherAssetsForCwd = exports.codexSessions = exports.readCodexAssets = exports.claudeSessions = exports.readClaudeAssets = exports.extractCommands = exports.extractFilePaths = exports.extractUrls = exports.extractTokenUsage = exports.getObservedContextWindowPath = void 0;
|
|
16
|
+
exports.syncCodexLiveStateAsync = exports.readStoredCodexAccount = exports.repairCodexCredentialStores = exports.inspectCodexCredentialStores = exports.fetchProviderServiceStatus = exports.diagnoseProviderFailure = exports.mergeFailingToolWindows = exports.failingToolTrend = exports.FAILING_TOOL_TREND_ARROWS = exports.scopePeakHoursToSessionProvider = exports.PEAK_HOURS_DESCRIPTION = exports.PEAK_HOURS_CACHE_MS = exports.isClaudeCodeSessionProvider = exports.getScheduledPeakHoursState = exports.fetchPeakHoursStatus = exports.DEFAULT_PEAK_HOURS_TIMEOUT_MS = exports.createPeakHoursNotApplicableState = exports._resetPeakHoursCache = exports.runDoctor = exports.getSessionDiagnostics = exports.formatHealthReport = exports.toLegacyProviderStatus = exports.fetchOpenAIStatus = exports.fetchProviderStatus = exports.assistantTurnToolRefSchema = exports.assistantTurnToolGroupStepSchema = exports.assistantTurnTimelineItemSchema = exports.assistantTurnSubagentStatusSchema = exports.assistantTurnSubagentSchema = exports.assistantTurnReasoningTimelineItemSchema = exports.assistantTurnProjectionSchema = exports.assistantTurnProcessStepSchema = exports.assistantTurnProcessSchema = void 0;
|
|
17
17
|
var usageNormalization_1 = require("./usageNormalization");
|
|
18
18
|
Object.defineProperty(exports, "normalizeProviderUsage", { enumerable: true, get: function () { return usageNormalization_1.normalizeProviderUsage; } });
|
|
19
19
|
Object.defineProperty(exports, "extractNormalizedUsage", { enumerable: true, get: function () { return usageNormalization_1.extractNormalizedUsage; } });
|
|
@@ -37,6 +37,8 @@ Object.defineProperty(exports, "listRecentSessions", { enumerable: true, get: fu
|
|
|
37
37
|
Object.defineProperty(exports, "readSessionTranscript", { enumerable: true, get: function () { return sessionTranscripts_1.readSessionTranscript; } });
|
|
38
38
|
var promptHistory_1 = require("./promptHistory");
|
|
39
39
|
Object.defineProperty(exports, "collectPromptHistory", { enumerable: true, get: function () { return promptHistory_1.collectPromptHistory; } });
|
|
40
|
+
var sessionPromptHistory_1 = require("./sessionPromptHistory");
|
|
41
|
+
Object.defineProperty(exports, "collectSessionPromptHistory", { enumerable: true, get: function () { return sessionPromptHistory_1.collectSessionPromptHistory; } });
|
|
40
42
|
var humanPrompt_1 = require("./humanPrompt");
|
|
41
43
|
Object.defineProperty(exports, "HUMAN_CLAUDE_ENTRYPOINTS", { enumerable: true, get: function () { return humanPrompt_1.HUMAN_CLAUDE_ENTRYPOINTS; } });
|
|
42
44
|
Object.defineProperty(exports, "HUMAN_CODEX_SOURCES", { enumerable: true, get: function () { return humanPrompt_1.HUMAN_CODEX_SOURCES; } });
|
|
@@ -383,8 +385,20 @@ Object.defineProperty(exports, "openInBrowser", { enumerable: true, get: functio
|
|
|
383
385
|
// Credential I/O (platform-aware: Keychain on macOS, file on Linux/Windows)
|
|
384
386
|
var credentialIO_1 = require("./credentialIO");
|
|
385
387
|
Object.defineProperty(exports, "readActiveCredentials", { enumerable: true, get: function () { return credentialIO_1.readActiveCredentials; } });
|
|
388
|
+
Object.defineProperty(exports, "readClaudeCredentialStore", { enumerable: true, get: function () { return credentialIO_1.readClaudeCredentialStore; } });
|
|
386
389
|
Object.defineProperty(exports, "writeActiveCredentials", { enumerable: true, get: function () { return credentialIO_1.writeActiveCredentials; } });
|
|
387
390
|
Object.defineProperty(exports, "deleteStoredCredentials", { enumerable: true, get: function () { return credentialIO_1.deleteStoredCredentials; } });
|
|
391
|
+
Object.defineProperty(exports, "ClaudeCredentialWriteError", { enumerable: true, get: function () { return credentialIO_1.ClaudeCredentialWriteError; } });
|
|
392
|
+
Object.defineProperty(exports, "SIDEKICK_KEYCHAIN_COMMENT_PREFIX", { enumerable: true, get: function () { return credentialIO_1.SIDEKICK_KEYCHAIN_COMMENT_PREFIX; } });
|
|
393
|
+
var claudeLiveGuard_1 = require("./claudeLiveGuard");
|
|
394
|
+
Object.defineProperty(exports, "decideLiveClaudeWrite", { enumerable: true, get: function () { return claudeLiveGuard_1.decideLiveClaudeWrite; } });
|
|
395
|
+
var claudeCredentialLedger_1 = require("./claudeCredentialLedger");
|
|
396
|
+
Object.defineProperty(exports, "readClaudeCredentialLedger", { enumerable: true, get: function () { return claudeCredentialLedger_1.readClaudeCredentialLedger; } });
|
|
397
|
+
Object.defineProperty(exports, "getClaudeCredentialLedgerPath", { enumerable: true, get: function () { return claudeCredentialLedger_1.getClaudeCredentialLedgerPath; } });
|
|
398
|
+
var claudeCredentialDoctor_1 = require("./claudeCredentialDoctor");
|
|
399
|
+
Object.defineProperty(exports, "inspectClaudeCredentialStores", { enumerable: true, get: function () { return claudeCredentialDoctor_1.inspectClaudeCredentialStores; } });
|
|
400
|
+
Object.defineProperty(exports, "repairClaudeCredentialStores", { enumerable: true, get: function () { return claudeCredentialDoctor_1.repairClaudeCredentialStores; } });
|
|
401
|
+
Object.defineProperty(exports, "parseKeychainDump", { enumerable: true, get: function () { return claudeCredentialDoctor_1.parseKeychainDump; } });
|
|
388
402
|
// Credentials
|
|
389
403
|
var credentials_1 = require("./credentials");
|
|
390
404
|
Object.defineProperty(exports, "readClaudeMaxCredentials", { enumerable: true, get: function () { return credentials_1.readClaudeMaxCredentials; } });
|
|
@@ -395,6 +409,9 @@ Object.defineProperty(exports, "parseClaudeCredentialBlob", { enumerable: true,
|
|
|
395
409
|
Object.defineProperty(exports, "claudeCredentialFreshness", { enumerable: true, get: function () { return claudeCredentials_1.claudeCredentialFreshness; } });
|
|
396
410
|
Object.defineProperty(exports, "isNewerClaudeCredential", { enumerable: true, get: function () { return claudeCredentials_1.isNewerClaudeCredential; } });
|
|
397
411
|
Object.defineProperty(exports, "resolveClaudeRefreshExpiry", { enumerable: true, get: function () { return claudeCredentials_1.resolveClaudeRefreshExpiry; } });
|
|
412
|
+
Object.defineProperty(exports, "claudeRefreshFingerprint", { enumerable: true, get: function () { return claudeCredentials_1.claudeRefreshFingerprint; } });
|
|
413
|
+
Object.defineProperty(exports, "claudeLoginOnly", { enumerable: true, get: function () { return claudeCredentials_1.claudeLoginOnly; } });
|
|
414
|
+
Object.defineProperty(exports, "mergeClaudeLoginIntoLive", { enumerable: true, get: function () { return claudeCredentials_1.mergeClaudeLoginIntoLive; } });
|
|
398
415
|
Object.defineProperty(exports, "CLAUDE_ACCESS_TOKEN_LIFETIME_MS", { enumerable: true, get: function () { return claudeCredentials_1.CLAUDE_ACCESS_TOKEN_LIFETIME_MS; } });
|
|
399
416
|
Object.defineProperty(exports, "CLAUDE_REFRESH_TOKEN_LIFETIME_ESTIMATE_MS", { enumerable: true, get: function () { return claudeCredentials_1.CLAUDE_REFRESH_TOKEN_LIFETIME_ESTIMATE_MS; } });
|
|
400
417
|
var codexAuth_1 = require("./codexAuth");
|
|
@@ -436,6 +453,7 @@ Object.defineProperty(exports, "undoLastSwitch", { enumerable: true, get: functi
|
|
|
436
453
|
Object.defineProperty(exports, "getLastSwitch", { enumerable: true, get: function () { return accountManager_1.getLastSwitch; } });
|
|
437
454
|
Object.defineProperty(exports, "listAllAccounts", { enumerable: true, get: function () { return accountManager_1.listAllAccounts; } });
|
|
438
455
|
Object.defineProperty(exports, "resolveClaudeLoginCommand", { enumerable: true, get: function () { return accountManager_1.resolveClaudeLoginCommand; } });
|
|
456
|
+
Object.defineProperty(exports, "discardAccountLogin", { enumerable: true, get: function () { return accountManager_1.discardAccountLogin; } });
|
|
439
457
|
var accountSwitch_1 = require("./accountSwitch");
|
|
440
458
|
Object.defineProperty(exports, "readLastSwitch", { enumerable: true, get: function () { return accountSwitch_1.readLastSwitch; } });
|
|
441
459
|
Object.defineProperty(exports, "getLastSwitchPath", { enumerable: true, get: function () { return accountSwitch_1.getLastSwitchPath; } });
|
|
@@ -512,6 +530,7 @@ Object.defineProperty(exports, "cleanupAbandonedCodexLogins", { enumerable: true
|
|
|
512
530
|
Object.defineProperty(exports, "getCodexCredentialStoreMode", { enumerable: true, get: function () { return codexProfiles_1.getCodexCredentialStoreMode; } });
|
|
513
531
|
Object.defineProperty(exports, "CODEX_KEYRING_FIX_HINT", { enumerable: true, get: function () { return codexProfiles_1.CODEX_KEYRING_FIX_HINT; } });
|
|
514
532
|
var terminalSync_1 = require("./terminalSync");
|
|
533
|
+
Object.defineProperty(exports, "writeAccountLauncher", { enumerable: true, get: function () { return terminalSync_1.writeAccountLauncher; } });
|
|
515
534
|
Object.defineProperty(exports, "writeLauncher", { enumerable: true, get: function () { return terminalSync_1.writeLauncher; } });
|
|
516
535
|
Object.defineProperty(exports, "removeLauncher", { enumerable: true, get: function () { return terminalSync_1.removeLauncher; } });
|
|
517
536
|
var autoSwitch_1 = require("./autoSwitch");
|
|
@@ -723,3 +742,9 @@ var providerFailure_1 = require("./providerFailure");
|
|
|
723
742
|
Object.defineProperty(exports, "diagnoseProviderFailure", { enumerable: true, get: function () { return providerFailure_1.diagnoseProviderFailure; } });
|
|
724
743
|
var providerServiceStatus_1 = require("./providerServiceStatus");
|
|
725
744
|
Object.defineProperty(exports, "fetchProviderServiceStatus", { enumerable: true, get: function () { return providerServiceStatus_1.fetchProviderServiceStatus; } });
|
|
745
|
+
var codexCredentialDoctor_1 = require("./codexCredentialDoctor");
|
|
746
|
+
Object.defineProperty(exports, "inspectCodexCredentialStores", { enumerable: true, get: function () { return codexCredentialDoctor_1.inspectCodexCredentialStores; } });
|
|
747
|
+
Object.defineProperty(exports, "repairCodexCredentialStores", { enumerable: true, get: function () { return codexCredentialDoctor_1.repairCodexCredentialStores; } });
|
|
748
|
+
var codexProfiles_2 = require("./codexProfiles");
|
|
749
|
+
Object.defineProperty(exports, "readStoredCodexAccount", { enumerable: true, get: function () { return codexProfiles_2.readStoredCodexAccount; } });
|
|
750
|
+
Object.defineProperty(exports, "syncCodexLiveStateAsync", { enumerable: true, get: function () { return codexProfiles_2.syncCodexLiveStateAsync; } });
|
package/dist/keepAlive.d.ts
CHANGED
|
@@ -39,6 +39,7 @@ export declare function keepAliveCommand(provider: AccountProviderId): {
|
|
|
39
39
|
};
|
|
40
40
|
/**
|
|
41
41
|
* Serialised, bounded refresh of every inactive account that is `expiring`
|
|
42
|
-
* (or `unknown` for Claude). Never touches the live account
|
|
42
|
+
* (or `unknown` for Claude). Never touches the live account or any copy of
|
|
43
|
+
* its chain.
|
|
43
44
|
*/
|
|
44
45
|
export declare function refreshInactiveAccounts(options?: RefreshInactiveAccountsOptions): Promise<RefreshInactiveAccountsResult>;
|
package/dist/keepAlive.js
CHANGED
|
@@ -7,33 +7,50 @@ exports.refreshInactiveAccounts = refreshInactiveAccounts;
|
|
|
7
7
|
* providers' OAuth endpoints itself: it runs the official CLI inside the
|
|
8
8
|
* profile's isolated home and lets the CLI refresh (and rotate) the token
|
|
9
9
|
* where it belongs, then re-reads the store to record the new expiry.
|
|
10
|
+
*
|
|
11
|
+
* A refresh rotates the refresh token, so keep-alive only runs where the
|
|
12
|
+
* profile home holds the one live copy of its chain: never the live account,
|
|
13
|
+
* never a copy whose refresh token equals live's, never a copy taken from the
|
|
14
|
+
* live store that no switch has handed back yet, and never a stale copy when
|
|
15
|
+
* the backup is newer. The check and a lease are taken under the swap lock, so
|
|
16
|
+
* no switch can install that account while its CLI is refreshing.
|
|
10
17
|
*/
|
|
18
|
+
const codexKeepAlive_1 = require("./codexKeepAlive");
|
|
19
|
+
const codexProfiles_1 = require("./codexProfiles");
|
|
20
|
+
const codexPaths_1 = require("./codexPaths");
|
|
21
|
+
const codexCredentialStore_1 = require("./codexCredentialStore");
|
|
22
|
+
const codexAuth_1 = require("./codexAuth");
|
|
11
23
|
const child_process_1 = require("child_process");
|
|
12
24
|
const accountHealth_1 = require("./accountHealth");
|
|
13
25
|
const accountLaunch_1 = require("./accountLaunch");
|
|
26
|
+
const accounts_1 = require("./accounts");
|
|
14
27
|
/** The command each CLI runs to load (and refresh) its stored login. */
|
|
15
28
|
function keepAliveCommand(provider) {
|
|
16
29
|
if (provider === 'codex')
|
|
17
|
-
return { command: 'codex', args: ['
|
|
30
|
+
return { command: 'codex', args: ['app-server', '-c', 'cli_auth_credentials_store="file"'] };
|
|
18
31
|
const override = process.env.SIDEKICK_CLAUDE_KEEPALIVE_ARGS?.trim();
|
|
19
32
|
return { command: 'claude', args: override ? override.split(/\s+/) : ['auth', 'status'] };
|
|
20
33
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
34
|
+
/** How long a keep-alive lease outlives the CLI timeout before it lapses on its own. */
|
|
35
|
+
const LEASE_GRACE_MS = 30_000;
|
|
36
|
+
const defaultRunner = (command, args, env, timeoutMs) => command === 'codex'
|
|
37
|
+
? (0, codexKeepAlive_1.runCodexKeepAlive)(command, args, env, timeoutMs)
|
|
38
|
+
: new Promise((resolve) => {
|
|
39
|
+
try {
|
|
40
|
+
(0, child_process_1.execFile)(command, args, { encoding: 'utf8', env, timeout: timeoutMs, killSignal: 'SIGKILL', windowsHide: true }, (error, stdout) => {
|
|
41
|
+
const status = error
|
|
42
|
+
? (error.code ?? null)
|
|
43
|
+
: 0;
|
|
44
|
+
resolve({
|
|
45
|
+
status: typeof status === 'number' ? status : null,
|
|
46
|
+
stdout: String(stdout ?? ''),
|
|
47
|
+
});
|
|
30
48
|
});
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
});
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
resolve({ status: null, stdout: '' });
|
|
52
|
+
}
|
|
53
|
+
});
|
|
37
54
|
function eligible(view, includeFresh) {
|
|
38
55
|
if (view.health.isLive)
|
|
39
56
|
return 'live account; the CLI refreshes it in normal use';
|
|
@@ -49,7 +66,8 @@ function eligible(view, includeFresh) {
|
|
|
49
66
|
}
|
|
50
67
|
/**
|
|
51
68
|
* Serialised, bounded refresh of every inactive account that is `expiring`
|
|
52
|
-
* (or `unknown` for Claude). Never touches the live account
|
|
69
|
+
* (or `unknown` for Claude). Never touches the live account or any copy of
|
|
70
|
+
* its chain.
|
|
53
71
|
*/
|
|
54
72
|
async function refreshInactiveAccounts(options = {}) {
|
|
55
73
|
const result = { refreshed: [], skipped: [], failed: [] };
|
|
@@ -62,10 +80,15 @@ async function refreshInactiveAccounts(options = {}) {
|
|
|
62
80
|
result.skipped.push({ id: view.id, providerId: view.providerId, reason });
|
|
63
81
|
continue;
|
|
64
82
|
}
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
83
|
+
const isClaude = view.providerId === 'claude-code';
|
|
84
|
+
const beginLease = isClaude ? accounts_1.beginClaudeKeepAlive : codexProfiles_1.beginCodexKeepAlive;
|
|
85
|
+
const finishLease = isClaude ? accounts_1.finishClaudeKeepAlive : codexProfiles_1.finishCodexKeepAlive;
|
|
86
|
+
if (options.dryRun) {
|
|
87
|
+
const blocker = (isClaude ? accounts_1.getClaudeKeepAliveBlocker : codexProfiles_1.getCodexKeepAliveBlocker)(view.id);
|
|
88
|
+
if (blocker) {
|
|
89
|
+
result.skipped.push({ id: view.id, providerId: view.providerId, reason: blocker });
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
69
92
|
}
|
|
70
93
|
const { command, args } = keepAliveCommand(view.providerId);
|
|
71
94
|
if (options.dryRun) {
|
|
@@ -76,16 +99,71 @@ async function refreshInactiveAccounts(options = {}) {
|
|
|
76
99
|
});
|
|
77
100
|
continue;
|
|
78
101
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
102
|
+
{
|
|
103
|
+
const begin = beginLease(view.id, timeoutMs + LEASE_GRACE_MS);
|
|
104
|
+
if (!begin.ok) {
|
|
105
|
+
result.skipped.push({ id: view.id, providerId: view.providerId, reason: begin.reason });
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
let released = false;
|
|
110
|
+
const release = () => {
|
|
111
|
+
if (!released) {
|
|
112
|
+
released = true;
|
|
113
|
+
finishLease(view.id);
|
|
114
|
+
}
|
|
115
|
+
};
|
|
82
116
|
try {
|
|
83
|
-
const
|
|
117
|
+
const launch = (0, accountLaunch_1.getAccountLaunchEnv)(view.providerId, view.id, {
|
|
118
|
+
materialize: true,
|
|
119
|
+
restoreBackup: false,
|
|
120
|
+
});
|
|
121
|
+
if (launch.error) {
|
|
122
|
+
release();
|
|
123
|
+
result.skipped.push({ id: view.id, providerId: view.providerId, reason: launch.error });
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
if (!isClaude &&
|
|
127
|
+
(0, codexCredentialStore_1.canonicalCodexPath)(launch.home) === (0, codexCredentialStore_1.canonicalCodexPath)((0, codexPaths_1.getSystemCodexHome)())) {
|
|
128
|
+
result.skipped.push({
|
|
129
|
+
id: view.id,
|
|
130
|
+
providerId: view.providerId,
|
|
131
|
+
reason: 'the account became live before refresh',
|
|
132
|
+
});
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
const before = isClaude ? null : (0, codexCredentialStore_1.readCodexCredentialStore)(launch.home);
|
|
136
|
+
const env = { ...process.env, ...launch.env };
|
|
137
|
+
for (const name of launch.envUnset)
|
|
138
|
+
delete env[name];
|
|
139
|
+
if (!isClaude)
|
|
140
|
+
for (const name of [
|
|
141
|
+
'OPENAI_API_KEY',
|
|
142
|
+
'CODEX_API_KEY',
|
|
143
|
+
'CODEX_ACCESS_TOKEN',
|
|
144
|
+
'OPENAI_FEDERATION_RULE_ID',
|
|
145
|
+
'OPENAI_IDENTITY_TOKEN_FILE',
|
|
146
|
+
'OPENAI_WORKLOAD_IDENTITY_CONTEXT',
|
|
147
|
+
])
|
|
148
|
+
delete env[name];
|
|
149
|
+
let run;
|
|
150
|
+
try {
|
|
151
|
+
run = await runner(command, args, env, timeoutMs);
|
|
152
|
+
}
|
|
153
|
+
finally {
|
|
154
|
+
release();
|
|
155
|
+
}
|
|
84
156
|
const after = (0, accountHealth_1.getAccountHealth)(view.providerId, view.id, {
|
|
85
157
|
probe: 'store',
|
|
86
158
|
now: options.now,
|
|
87
159
|
});
|
|
88
|
-
|
|
160
|
+
const codexAfter = isClaude ? null : (0, codexCredentialStore_1.readCodexCredentialStore)(launch.home);
|
|
161
|
+
const advanced = isClaude ||
|
|
162
|
+
(before?.status === 'ok' &&
|
|
163
|
+
codexAfter?.status === 'ok' &&
|
|
164
|
+
(0, codexAuth_1.identitiesMatch)((0, codexAuth_1.readAuthIdentityFromRaw)(before.snapshot.authRaw), (0, codexAuth_1.readAuthIdentityFromRaw)(codexAfter.snapshot.authRaw)) &&
|
|
165
|
+
(0, codexAuth_1.compareCodexAuthFreshness)(codexAfter.snapshot.authRaw, before.snapshot.authRaw) > 0);
|
|
166
|
+
if (after.state === 'fresh' && advanced && (isClaude || run.status === 0)) {
|
|
89
167
|
result.refreshed.push({ id: view.id, providerId: view.providerId });
|
|
90
168
|
}
|
|
91
169
|
else {
|
|
@@ -93,13 +171,22 @@ async function refreshInactiveAccounts(options = {}) {
|
|
|
93
171
|
id: view.id,
|
|
94
172
|
providerId: view.providerId,
|
|
95
173
|
error: run.status === 0
|
|
96
|
-
?
|
|
97
|
-
|
|
174
|
+
? isClaude
|
|
175
|
+
? `${command} ran but the stored credential is still ${after.state}.`
|
|
176
|
+
: `${command} ran but no verified credential advance was observed (health: ${after.state}).`
|
|
177
|
+
: `${command} exited with status ${run.status ?? 'unknown'}.${isClaude ? '' : ' Codex app-server refresh requires a compatible Codex CLI; update it and retry.'}`,
|
|
98
178
|
});
|
|
99
179
|
}
|
|
100
180
|
}
|
|
101
181
|
catch (err) {
|
|
102
|
-
result.failed.push({
|
|
182
|
+
result.failed.push({
|
|
183
|
+
id: view.id,
|
|
184
|
+
providerId: view.providerId,
|
|
185
|
+
error: isClaude ? String(err) : 'Codex keep-alive could not complete safely.',
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
finally {
|
|
189
|
+
release();
|
|
103
190
|
}
|
|
104
191
|
}
|
|
105
192
|
return result;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/** Pure policy shared by provider-specific live credential installers. */
|
|
2
|
+
export type LiveCredentialWriteIntent = 'switch' | 'relogin' | 'repair' | 'rollback';
|
|
3
|
+
export type LiveCredentialWriteRefusal = 'live-unreadable' | 'invalid-candidate' | 'same-account' | 'different-account' | 'same-link' | 'not-captured' | 'not-newer' | 'live-changed';
|
|
4
|
+
export type LiveCredentialWriteDecision = {
|
|
5
|
+
allow: true;
|
|
6
|
+
} | {
|
|
7
|
+
allow: false;
|
|
8
|
+
code: LiveCredentialWriteRefusal;
|
|
9
|
+
reason: string;
|
|
10
|
+
};
|
|
11
|
+
export interface LiveCredentialWriteFacts {
|
|
12
|
+
provider: string;
|
|
13
|
+
intent: LiveCredentialWriteIntent;
|
|
14
|
+
liveStatus: 'ok' | 'absent' | 'corrupt' | 'error';
|
|
15
|
+
candidateValid: boolean;
|
|
16
|
+
liveHasCredential: boolean;
|
|
17
|
+
liveAccountId: string | null;
|
|
18
|
+
candidateAccountId: string;
|
|
19
|
+
sameLink: boolean;
|
|
20
|
+
strictlyNewer: boolean;
|
|
21
|
+
capturedOutgoing?: boolean;
|
|
22
|
+
matchesWritten: boolean;
|
|
23
|
+
/** Compatibility with Claude's established missing/corrupt rollback policy. */
|
|
24
|
+
allowNonOkRollback?: boolean;
|
|
25
|
+
rejectCorrupt?: boolean;
|
|
26
|
+
requireDifferentLinkForAdvance?: boolean;
|
|
27
|
+
}
|
|
28
|
+
export declare function decideLiveCredentialWrite(f: LiveCredentialWriteFacts): LiveCredentialWriteDecision;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.decideLiveCredentialWrite = decideLiveCredentialWrite;
|
|
4
|
+
function decideLiveCredentialWrite(f) {
|
|
5
|
+
const refuse = (code, reason) => ({ allow: false, code, reason });
|
|
6
|
+
if (f.liveStatus === 'error' || (f.rejectCorrupt && f.liveStatus === 'corrupt')) {
|
|
7
|
+
return refuse('live-unreadable', `The live ${f.provider} login could not be read, so it was left untouched.`);
|
|
8
|
+
}
|
|
9
|
+
if (f.intent === 'rollback') {
|
|
10
|
+
return f.matchesWritten || (f.allowNonOkRollback && f.liveStatus !== 'ok')
|
|
11
|
+
? { allow: true }
|
|
12
|
+
: refuse('live-changed', `The live ${f.provider} login changed after the switch wrote it; it was kept.`);
|
|
13
|
+
}
|
|
14
|
+
if (!f.candidateValid)
|
|
15
|
+
return refuse('invalid-candidate', `The saved credential is not a ${f.provider} login.`);
|
|
16
|
+
if (f.intent === 'switch') {
|
|
17
|
+
if (f.liveAccountId !== null && f.liveAccountId === f.candidateAccountId) {
|
|
18
|
+
return refuse('same-account', 'That account is already the live login.');
|
|
19
|
+
}
|
|
20
|
+
if (f.sameLink)
|
|
21
|
+
return refuse('same-link', 'The saved login is the same refresh token the live login holds; sign in to that account again.');
|
|
22
|
+
if (f.liveHasCredential && !f.capturedOutgoing) {
|
|
23
|
+
return refuse('not-captured', 'The outgoing live login was not saved first, so it was left untouched.');
|
|
24
|
+
}
|
|
25
|
+
return { allow: true };
|
|
26
|
+
}
|
|
27
|
+
if (f.liveAccountId !== null && f.liveAccountId !== f.candidateAccountId) {
|
|
28
|
+
return refuse('different-account', `The live ${f.provider} login belongs to another account; switch accounts instead.`);
|
|
29
|
+
}
|
|
30
|
+
if (!f.liveHasCredential)
|
|
31
|
+
return { allow: true };
|
|
32
|
+
if (!f.strictlyNewer || (f.requireDifferentLinkForAdvance && f.sameLink)) {
|
|
33
|
+
return refuse('not-newer', `The live ${f.provider} login is already at least as new; it was kept.`);
|
|
34
|
+
}
|
|
35
|
+
return { allow: true };
|
|
36
|
+
}
|
package/dist/node.d.ts
CHANGED
|
@@ -12,6 +12,9 @@ export type { ObservedContextWindowOptions, ObservedContextWindowStore, } from '
|
|
|
12
12
|
export { listRecentSessions, readSessionTranscript } from './sessionTranscripts';
|
|
13
13
|
export { collectPromptHistory } from './promptHistory';
|
|
14
14
|
export type { CollectPromptHistoryOptions, PromptHistoryAnswerState, PromptHistoryBound, PromptHistoryBounds, PromptHistoryCursor, PromptHistoryCursorSession, PromptHistoryEntry, PromptHistoryExclusion, PromptHistoryMetadataStatus, PromptHistoryPendingPrompt, PromptHistoryProvider, PromptHistoryResult, PromptHistoryResumeState, PromptHistoryStats, PromptHistoryUsage, } from './promptHistory';
|
|
15
|
+
export { collectSessionPromptHistory } from './sessionPromptHistory';
|
|
16
|
+
export type { CollectSessionPromptHistoryOptions, PromptHistorySession, PromptHistorySessionPrompt, PromptHistorySessionRef, SessionPromptHistoryBound, SessionPromptHistoryBounds, SessionPromptHistoryInclude, SessionPromptHistoryResult, SessionPromptHistoryStats, } from './sessionPromptHistory';
|
|
17
|
+
export type { PromptHistoryReply, PromptHistorySignal, PromptHistorySignalKind, } from './sessionPromptSignals';
|
|
15
18
|
export { HUMAN_CLAUDE_ENTRYPOINTS, HUMAN_CODEX_SOURCES, humanPromptText, isHumanPrompt, } from './humanPrompt';
|
|
16
19
|
export type { HumanPromptProvider } from './humanPrompt';
|
|
17
20
|
export { computeSessionFileStats, firstUserPrompt, providerContextSizeFn, readSessionFileStats, } from './sessionStats';
|
package/dist/node.js
CHANGED
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
* for browser bundles — use `sidekick-shared/browser` there.
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.
|
|
11
|
-
exports.fetchProviderServiceStatus = exports.SYNTHETIC_MODEL = exports.createSessionProviders = exports.splitWatchedPath = exports.DirectoryListingCache = exports.fileFingerprintParts = exports.fileFingerprint = exports.observedSessionSourceFromProvider = exports.ObservedSessionCollector = exports.readSessionPreviewAsync = exports.readSessionPreview = exports.listSessionPreviewsAsync = exports.listSessionPreviews = exports.readCodexHistory = exports.walkRolloutFilesAsync = exports.walkRolloutFiles = exports.findCodexRolloutFile = exports.weekKey = exports.usageBucketKey = void 0;
|
|
10
|
+
exports.bucketUsage = exports.importSessionHistory = exports.ACTIVE_SESSION_MTIME_THRESHOLD_MS = exports.sessionSummaryFromStats = exports.removeSessionSummary = exports.markFileImported = exports.isFileImported = exports.applySessionSummary = exports.subagentTokenTotals = exports.scanSessionSubagents = exports.readMainThreadTokenTotals = exports.combineSessionTokenTotals = exports.collectSessionTokenTotals = exports.pruneUsageCache = exports.getUsageCacheDir = exports.collectUsageEvents = exports.USAGE_CACHE_VERSION = exports.MAX_USAGE_CACHE_FILES = exports.findActiveBillingBlock = exports.computeBillingBlocks = exports.BILLING_BLOCK_DURATION_MS = exports.writeStateFile = exports.readStateFile = exports.quotaToStateFile = exports.getStateFilePath = exports.billingBlockToStateFile = exports.STATE_FILE_SCHEMA_VERSION = exports.STATE_FILE_NAME = exports.sessionFingerprintParts = exports.fingerprintString = exports.readSessionReportInputs = exports.readSessionFileStats = exports.providerContextSizeFn = exports.firstUserPrompt = exports.computeSessionFileStats = exports.isHumanPrompt = exports.humanPromptText = exports.HUMAN_CODEX_SOURCES = exports.HUMAN_CLAUDE_ENTRYPOINTS = exports.collectSessionPromptHistory = exports.collectPromptHistory = exports.readSessionTranscript = exports.listRecentSessions = exports.getObservedContextWindowPath = exports.recordObservedContextWindow = exports.loadObservedContextWindows = exports.LITELLM_CATALOG_URL = exports.normalizeLiteLlmContextWindows = exports.normalizeLiteLlmCatalog = exports.hydratePricingCatalog = void 0;
|
|
11
|
+
exports.fetchProviderServiceStatus = exports.SYNTHETIC_MODEL = exports.createSessionProviders = exports.splitWatchedPath = exports.DirectoryListingCache = exports.fileFingerprintParts = exports.fileFingerprint = exports.observedSessionSourceFromProvider = exports.ObservedSessionCollector = exports.readSessionPreviewAsync = exports.readSessionPreview = exports.listSessionPreviewsAsync = exports.listSessionPreviews = exports.readCodexHistory = exports.walkRolloutFilesAsync = exports.walkRolloutFiles = exports.findCodexRolloutFile = exports.weekKey = exports.usageBucketKey = exports.summarizeUsageRows = void 0;
|
|
12
12
|
var pricingCatalog_1 = require("./pricingCatalog");
|
|
13
13
|
Object.defineProperty(exports, "hydratePricingCatalog", { enumerable: true, get: function () { return pricingCatalog_1.hydratePricingCatalog; } });
|
|
14
14
|
Object.defineProperty(exports, "normalizeLiteLlmCatalog", { enumerable: true, get: function () { return pricingCatalog_1.normalizeLiteLlmCatalog; } });
|
|
@@ -23,6 +23,8 @@ Object.defineProperty(exports, "listRecentSessions", { enumerable: true, get: fu
|
|
|
23
23
|
Object.defineProperty(exports, "readSessionTranscript", { enumerable: true, get: function () { return sessionTranscripts_1.readSessionTranscript; } });
|
|
24
24
|
var promptHistory_1 = require("./promptHistory");
|
|
25
25
|
Object.defineProperty(exports, "collectPromptHistory", { enumerable: true, get: function () { return promptHistory_1.collectPromptHistory; } });
|
|
26
|
+
var sessionPromptHistory_1 = require("./sessionPromptHistory");
|
|
27
|
+
Object.defineProperty(exports, "collectSessionPromptHistory", { enumerable: true, get: function () { return sessionPromptHistory_1.collectSessionPromptHistory; } });
|
|
26
28
|
var humanPrompt_1 = require("./humanPrompt");
|
|
27
29
|
Object.defineProperty(exports, "HUMAN_CLAUDE_ENTRYPOINTS", { enumerable: true, get: function () { return humanPrompt_1.HUMAN_CLAUDE_ENTRYPOINTS; } });
|
|
28
30
|
Object.defineProperty(exports, "HUMAN_CODEX_SOURCES", { enumerable: true, get: function () { return humanPrompt_1.HUMAN_CODEX_SOURCES; } });
|
|
@@ -14,9 +14,6 @@ export interface RunningAccountConsumer {
|
|
|
14
14
|
/** The user-facing sentence both UIs print for this consumer. */
|
|
15
15
|
reachability: string;
|
|
16
16
|
}
|
|
17
|
-
/** Sync sibling of {@link findRunningProcesses}; blocks up to 4 s. */
|
|
18
|
-
export declare function findRunningProcessesSync(names: string[]): RunningProcess[];
|
|
19
|
-
export declare function findRunningProcesses(names: string[]): Promise<RunningProcess[]>;
|
|
20
17
|
export declare const ACCOUNT_CONSUMER_REACHABILITY: Record<AccountConsumerKind, {
|
|
21
18
|
switched: boolean;
|
|
22
19
|
reachability: string;
|
|
@@ -30,3 +27,13 @@ export declare function detectRunningAccountConsumers(provider?: 'claude-code' |
|
|
|
30
27
|
export declare function detectRunningAccountConsumersSync(provider?: 'claude-code' | 'codex'): RunningAccountConsumer[];
|
|
31
28
|
/** Build a consumer entry for a kind the host detects itself (e.g. its own extension host). */
|
|
32
29
|
export declare function describeAccountConsumer(kind: AccountConsumerKind, pids?: number[]): RunningAccountConsumer;
|
|
30
|
+
/** Compatibility wrappers keep the established best-effort list API. */
|
|
31
|
+
export declare function findRunningProcessesSync(names: string[]): RunningProcess[];
|
|
32
|
+
export declare function findRunningProcesses(names: string[]): Promise<RunningProcess[]>;
|
|
33
|
+
export interface AccountConsumerScan {
|
|
34
|
+
ok: boolean;
|
|
35
|
+
consumers: RunningAccountConsumer[];
|
|
36
|
+
}
|
|
37
|
+
/** Safety decisions must distinguish a failed process scan from an empty one. */
|
|
38
|
+
export declare function inspectRunningAccountConsumersSync(provider: 'claude-code' | 'codex'): AccountConsumerScan;
|
|
39
|
+
export declare function inspectRunningAccountConsumers(provider: 'claude-code' | 'codex'): Promise<AccountConsumerScan>;
|