sidekick-shared 0.27.6 → 0.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +58 -18
  3. package/dist/browser.d.ts +13 -2
  4. package/dist/browser.js +30 -2
  5. package/dist/claudePaths.d.ts +11 -0
  6. package/dist/claudePaths.js +61 -0
  7. package/dist/claudeProfiles.d.ts +2 -9
  8. package/dist/claudeProfiles.js +10 -25
  9. package/dist/codexPaths.d.ts +22 -0
  10. package/dist/codexPaths.js +67 -0
  11. package/dist/codexProfiles.d.ts +1 -4
  12. package/dist/codexProfiles.js +5 -43
  13. package/dist/doctor.js +2 -2
  14. package/dist/esm/accountChangeSignal.js +15 -0
  15. package/dist/esm/accountChanges.js +152 -0
  16. package/dist/esm/accountHealth.js +288 -0
  17. package/dist/esm/accountLaunch.js +145 -0
  18. package/dist/esm/accountLease.js +60 -0
  19. package/dist/esm/accountManager.js +606 -0
  20. package/dist/esm/accountRegistry.js +214 -0
  21. package/dist/esm/accountStatus.js +51 -0
  22. package/dist/esm/accountSwitch.js +74 -0
  23. package/dist/esm/accountSync.js +156 -0
  24. package/dist/esm/accountSyncTypes.js +4 -0
  25. package/dist/esm/accounts.js +1291 -0
  26. package/dist/esm/aggregation/EventAggregator.js +2034 -0
  27. package/dist/esm/aggregation/FrequencyTracker.js +69 -0
  28. package/dist/esm/aggregation/HeatmapTracker.js +89 -0
  29. package/dist/esm/aggregation/PatternExtractor.js +168 -0
  30. package/dist/esm/aggregation/costProvenance.js +31 -0
  31. package/dist/esm/aggregation/snapshot.js +161 -0
  32. package/dist/esm/aggregation/types.js +5 -0
  33. package/dist/esm/analytics/codeImpact.js +18 -0
  34. package/dist/esm/analytics/compactionLedger.js +37 -0
  35. package/dist/esm/analytics/qualityScore.js +112 -0
  36. package/dist/esm/autoSwitch.js +185 -0
  37. package/dist/esm/browser.js +34 -0
  38. package/dist/esm/claudeCredentialDoctor.js +239 -0
  39. package/dist/esm/claudeCredentialLedger.js +91 -0
  40. package/dist/esm/claudeCredentials.js +111 -0
  41. package/dist/esm/claudeLiveGuard.js +43 -0
  42. package/dist/esm/claudePaths.js +22 -0
  43. package/dist/esm/claudeProfiles.js +142 -0
  44. package/dist/esm/claudeRefreshLock.js +106 -0
  45. package/dist/esm/codexAuth.js +101 -0
  46. package/dist/esm/codexCredentialDoctor.js +265 -0
  47. package/dist/esm/codexCredentialStore.js +164 -0
  48. package/dist/esm/codexKeepAlive.js +112 -0
  49. package/dist/esm/codexPaths.js +172 -0
  50. package/dist/esm/codexProfiles.js +1251 -0
  51. package/dist/esm/codexQuota.js +564 -0
  52. package/dist/esm/codexQuotaWatcher.js +363 -0
  53. package/dist/esm/context/composer.js +71 -0
  54. package/dist/esm/context/sessionContext.js +546 -0
  55. package/dist/esm/credentialIO.js +283 -0
  56. package/dist/esm/credentials.js +49 -0
  57. package/dist/esm/doctor.js +305 -0
  58. package/dist/esm/ensureDefaultAccounts.js +62 -0
  59. package/dist/esm/errorHistory.js +56 -0
  60. package/dist/esm/extractors/errorTaxonomy.js +43 -0
  61. package/dist/esm/extractors/gatherAssets.js +32 -0
  62. package/dist/esm/extractors/sessionAssets.js +176 -0
  63. package/dist/esm/extractors/sources/claudeAssets.js +158 -0
  64. package/dist/esm/extractors/sources/codexAssets.js +234 -0
  65. package/dist/esm/extractors/tokenUsage.js +41 -0
  66. package/dist/esm/extractors/toolCall.js +142 -0
  67. package/dist/esm/failingTools.js +65 -0
  68. package/dist/esm/fileHead.js +27 -0
  69. package/dist/esm/formatters/eventHighlighter.js +332 -0
  70. package/dist/esm/formatters/noiseClassifier.js +209 -0
  71. package/dist/esm/formatters/sessionDump.js +328 -0
  72. package/dist/esm/formatters/toolSummary.js +226 -0
  73. package/dist/esm/formatting.js +82 -0
  74. package/dist/esm/handoffUrl.js +23 -0
  75. package/dist/esm/historicalStore.js +305 -0
  76. package/dist/esm/humanPrompt.js +88 -0
  77. package/dist/esm/index.js +213 -0
  78. package/dist/esm/keepAlive.js +189 -0
  79. package/dist/esm/liveCredentialGuard.js +33 -0
  80. package/dist/esm/modelAliases.js +51 -0
  81. package/dist/esm/modelCatalog.js +139 -0
  82. package/dist/esm/modelContext.js +280 -0
  83. package/dist/esm/modelInfo.js +832 -0
  84. package/dist/esm/multiProviderQuotaService.js +450 -0
  85. package/dist/esm/node.js +46 -0
  86. package/dist/esm/observedContextWindows.js +165 -0
  87. package/dist/esm/observedSessionCollector.js +939 -0
  88. package/dist/esm/parsers/changelogParser.js +71 -0
  89. package/dist/esm/parsers/codexHistory.js +89 -0
  90. package/dist/esm/parsers/codexParser.js +906 -0
  91. package/dist/esm/parsers/debugLogParser.js +126 -0
  92. package/dist/esm/parsers/jsonl.js +66 -0
  93. package/dist/esm/parsers/mcpToolName.js +28 -0
  94. package/dist/esm/parsers/openCodeParser.js +625 -0
  95. package/dist/esm/parsers/planExtractor.js +335 -0
  96. package/dist/esm/parsers/sessionActivityDetector.js +246 -0
  97. package/dist/esm/parsers/sessionPathResolver.js +713 -0
  98. package/dist/esm/parsers/subagentScanner.js +360 -0
  99. package/dist/esm/parsers/subagentStatsCache.js +45 -0
  100. package/dist/esm/parsers/subagentTraceParser.js +325 -0
  101. package/dist/esm/paths.js +134 -0
  102. package/dist/esm/peakHours.js +194 -0
  103. package/dist/esm/phrases.js +1330 -0
  104. package/dist/esm/pricingCatalog.js +247 -0
  105. package/dist/esm/processDetection.js +200 -0
  106. package/dist/esm/projectMigration.js +59 -0
  107. package/dist/esm/promptHistory.js +1221 -0
  108. package/dist/esm/providerFailure.js +362 -0
  109. package/dist/esm/providerIds.js +6 -0
  110. package/dist/esm/providerQuota.js +1 -0
  111. package/dist/esm/providerServiceStatus.js +145 -0
  112. package/dist/esm/providerServiceStatusTypes.js +1 -0
  113. package/dist/esm/providerStatus.js +117 -0
  114. package/dist/esm/providers/claudeCode.js +575 -0
  115. package/dist/esm/providers/claudeListing.js +121 -0
  116. package/dist/esm/providers/codex.js +1034 -0
  117. package/dist/esm/providers/codexDatabase.js +297 -0
  118. package/dist/esm/providers/codexRollouts.js +215 -0
  119. package/dist/esm/providers/detect.js +185 -0
  120. package/dist/esm/providers/diagnostics.js +83 -0
  121. package/dist/esm/providers/directoryListingCache.js +206 -0
  122. package/dist/esm/providers/factory.js +54 -0
  123. package/dist/esm/providers/openCode.js +2008 -0
  124. package/dist/esm/providers/openCodeDatabase.js +419 -0
  125. package/dist/esm/providers/rolloutWalker.js +252 -0
  126. package/dist/esm/providers/types.js +12 -0
  127. package/dist/esm/quota.js +182 -0
  128. package/dist/esm/quotaHistory.js +364 -0
  129. package/dist/esm/quotaPoller.js +230 -0
  130. package/dist/esm/quotaPresentation.js +97 -0
  131. package/dist/esm/quotaResolver.js +231 -0
  132. package/dist/esm/quotaSnapshots.js +130 -0
  133. package/dist/esm/quotaThresholds.js +85 -0
  134. package/dist/esm/readers/decisions.js +24 -0
  135. package/dist/esm/readers/handoff.js +20 -0
  136. package/dist/esm/readers/helpers.js +27 -0
  137. package/dist/esm/readers/history.js +9 -0
  138. package/dist/esm/readers/notes.js +48 -0
  139. package/dist/esm/readers/plans.js +225 -0
  140. package/dist/esm/readers/tasks.js +19 -0
  141. package/dist/esm/report/htmlHelpers.js +280 -0
  142. package/dist/esm/report/htmlReportGenerator.js +704 -0
  143. package/dist/esm/report/index.js +7 -0
  144. package/dist/esm/report/logo.js +2 -0
  145. package/dist/esm/report/openBrowser.js +19 -0
  146. package/dist/esm/report/sessionReportInputs.js +33 -0
  147. package/dist/esm/report/transcriptParser.js +83 -0
  148. package/dist/esm/report/types.js +4 -0
  149. package/dist/esm/schemas/accountManager.js +204 -0
  150. package/dist/esm/schemas/accountStatus.js +25 -0
  151. package/dist/esm/schemas/assistantTurn.js +74 -0
  152. package/dist/esm/schemas/index.js +25 -0
  153. package/dist/esm/schemas/observedSessionV1.js +77 -0
  154. package/dist/esm/schemas/providerFailure.js +37 -0
  155. package/dist/esm/schemas/quota.js +132 -0
  156. package/dist/esm/schemas/quotaHistory.js +40 -0
  157. package/dist/esm/schemas/sessionEvent.js +216 -0
  158. package/dist/esm/schemas/stateFile.js +75 -0
  159. package/dist/esm/schemas/tokenEstimation.js +7 -0
  160. package/dist/esm/schemas/transcript.js +86 -0
  161. package/dist/esm/schemas/usageNormalization.js +38 -0
  162. package/dist/esm/search/advancedFilter.js +197 -0
  163. package/dist/esm/search/sessionSearch.js +66 -0
  164. package/dist/esm/sessionFingerprint.js +40 -0
  165. package/dist/esm/sessionMonitor.js +198 -0
  166. package/dist/esm/sessionPreviews.js +522 -0
  167. package/dist/esm/sessionPromptHistory.js +254 -0
  168. package/dist/esm/sessionPromptSignals.js +364 -0
  169. package/dist/esm/sessionStats.js +160 -0
  170. package/dist/esm/sessionTokenTotals.js +98 -0
  171. package/dist/esm/sessionTranscripts.js +49 -0
  172. package/dist/esm/stateFile.js +119 -0
  173. package/dist/esm/statusline/BurnRateCalculator.js +40 -0
  174. package/dist/esm/statusline/claudeStatuslinePayload.js +148 -0
  175. package/dist/esm/statusline/formatter.js +122 -0
  176. package/dist/esm/statusline/index.js +8 -0
  177. package/dist/esm/terminalSync.js +95 -0
  178. package/dist/esm/testing/credentialGuard.js +197 -0
  179. package/dist/esm/testing/index.js +12 -0
  180. package/dist/esm/testing/sessionLogFixtures.js +128 -0
  181. package/dist/esm/tokenEstimation.js +67 -0
  182. package/dist/esm/tokenSummary.js +113 -0
  183. package/dist/esm/toolCategory.js +82 -0
  184. package/dist/esm/transcript.js +257 -0
  185. package/dist/esm/turns/assistantTurn.js +373 -0
  186. package/dist/esm/types/codex.js +23 -0
  187. package/dist/esm/types/decisionLog.js +5 -0
  188. package/dist/esm/types/historicalData.js +47 -0
  189. package/dist/esm/types/knowledgeNote.js +15 -0
  190. package/dist/esm/types/observedSessionV1.js +257 -0
  191. package/dist/esm/types/opencode.js +12 -0
  192. package/dist/esm/types/plan.js +7 -0
  193. package/dist/esm/types/sessionEvent.js +10 -0
  194. package/dist/esm/types/taskPersistence.js +12 -0
  195. package/dist/esm/usage/billingBlocks.js +148 -0
  196. package/dist/esm/usage/claudeUsageDedupe.js +189 -0
  197. package/dist/esm/usage/importSessionHistory.js +84 -0
  198. package/dist/esm/usage/subagentUsage.js +18 -0
  199. package/dist/esm/usage/usageEvents.js +402 -0
  200. package/dist/esm/usage/usageReports.js +202 -0
  201. package/dist/esm/usageNormalization.js +95 -0
  202. package/dist/esm/watchers/eventBridge.js +219 -0
  203. package/dist/esm/watchers/factory.js +63 -0
  204. package/dist/esm/watchers/jsonlTail.js +289 -0
  205. package/dist/esm/watchers/jsonlWatcher.js +435 -0
  206. package/dist/esm/watchers/providerReaderWatcher.js +118 -0
  207. package/dist/esm/watchers/sqliteWatcher.js +285 -0
  208. package/dist/esm/watchers/types.js +4 -0
  209. package/dist/esm/workspaceRoots.js +56 -0
  210. package/dist/esm/writers/atomic.js +375 -0
  211. package/dist/esm/writers/decisions.js +51 -0
  212. package/dist/esm/writers/notes.js +46 -0
  213. package/dist/esm/writers/tasks.js +63 -0
  214. package/dist/esm/zaiQuota.js +323 -0
  215. package/dist/esm/zaiQuotaApi.js +271 -0
  216. package/dist/esm/zaiQuotaWatcher.js +265 -0
  217. package/dist/fileHead.d.ts +22 -0
  218. package/dist/fileHead.js +33 -0
  219. package/dist/index.d.ts +16 -7
  220. package/dist/index.js +49 -15
  221. package/dist/node.d.ts +13 -1
  222. package/dist/node.js +43 -2
  223. package/dist/parsers/codexHistory.js +2 -2
  224. package/dist/parsers/codexParser.d.ts +12 -0
  225. package/dist/parsers/codexParser.js +34 -12
  226. package/dist/parsers/debugLogParser.js +2 -2
  227. package/dist/parsers/sessionPathResolver.js +5 -4
  228. package/dist/promptHistory.d.ts +32 -0
  229. package/dist/promptHistory.js +115 -59
  230. package/dist/providerFailure.d.ts +12 -6
  231. package/dist/providerFailure.js +45 -0
  232. package/dist/providers/claudeCode.js +7 -99
  233. package/dist/providers/claudeListing.d.ts +22 -0
  234. package/dist/providers/claudeListing.js +158 -0
  235. package/dist/providers/codex.d.ts +3 -1
  236. package/dist/providers/codex.js +26 -227
  237. package/dist/providers/codexRollouts.d.ts +44 -0
  238. package/dist/providers/codexRollouts.js +261 -0
  239. package/dist/providers/detect.js +4 -4
  240. package/dist/readers/plans.js +3 -3
  241. package/dist/schemas/index.d.ts +2 -0
  242. package/dist/schemas/index.js +7 -2
  243. package/dist/schemas/providerFailure.d.ts +154 -0
  244. package/dist/schemas/providerFailure.js +40 -0
  245. package/dist/sessionPromptHistory.d.ts +12 -7
  246. package/dist/sessionPromptHistory.js +15 -3
  247. package/dist/sessionPromptSignals.d.ts +9 -0
  248. package/dist/sessionPromptSignals.js +13 -0
  249. package/dist/testing/credentialGuard.d.ts +23 -0
  250. package/dist/testing/credentialGuard.js +233 -0
  251. package/dist/testing/index.d.ts +14 -0
  252. package/dist/testing/index.js +22 -0
  253. package/dist/testing/sessionLogFixtures.d.ts +28 -0
  254. package/dist/testing/sessionLogFixtures.js +169 -0
  255. package/dist/tokenEstimation.d.ts +2 -0
  256. package/dist/tokenEstimation.js +21 -11
  257. package/dist/toolCategory.d.ts +18 -0
  258. package/dist/toolCategory.js +86 -0
  259. package/dist/types/codex.d.ts +4 -0
  260. package/dist/usage/usageEvents.d.ts +16 -0
  261. package/dist/usage/usageEvents.js +53 -9
  262. package/dist/watchers/jsonlTail.d.ts +26 -1
  263. package/dist/watchers/jsonlTail.js +136 -28
  264. package/dist/watchers/jsonlWatcher.js +7 -0
  265. package/dist/watchers/providerReaderWatcher.js +1 -0
  266. package/dist/watchers/types.d.ts +6 -0
  267. package/dist/workspaceRoots.d.ts +23 -0
  268. package/dist/workspaceRoots.js +93 -0
  269. package/package.json +22 -2
package/dist/node.d.ts CHANGED
@@ -10,7 +10,7 @@ export type { HydrateOptions, HydrateResult } from './pricingCatalog';
10
10
  export { loadObservedContextWindows, recordObservedContextWindow, getObservedContextWindowPath, } from './observedContextWindows';
11
11
  export type { ObservedContextWindowOptions, ObservedContextWindowStore, } from './observedContextWindows';
12
12
  export { listRecentSessions, readSessionTranscript } from './sessionTranscripts';
13
- export { collectPromptHistory } from './promptHistory';
13
+ export { collectPromptHistory, isPromptHistorySessionSettled, parsePromptHistoryCursor, } from './promptHistory';
14
14
  export type { CollectPromptHistoryOptions, PromptHistoryAnswerState, PromptHistoryBound, PromptHistoryBounds, PromptHistoryCursor, PromptHistoryCursorSession, PromptHistoryEntry, PromptHistoryExclusion, PromptHistoryMetadataStatus, PromptHistoryPendingPrompt, PromptHistoryProvider, PromptHistoryResult, PromptHistoryResumeState, PromptHistoryStats, PromptHistoryUsage, } from './promptHistory';
15
15
  export { collectSessionPromptHistory } from './sessionPromptHistory';
16
16
  export type { CollectSessionPromptHistoryOptions, PromptHistorySession, PromptHistorySessionPrompt, PromptHistorySessionRef, SessionPromptHistoryBound, SessionPromptHistoryBounds, SessionPromptHistoryInclude, SessionPromptHistoryResult, SessionPromptHistoryStats, } from './sessionPromptHistory';
@@ -53,5 +53,17 @@ export type { ListSessionFilesOptions, ProviderId, SessionEnumerationCounters, S
53
53
  export { createSessionProviders } from './providers/factory';
54
54
  export type { CreateSessionProvidersOptions, CreateSessionProvidersResult, } from './providers/factory';
55
55
  export { SYNTHETIC_MODEL } from './usage/claudeUsageDedupe';
56
+ export { CONFIG_DIR_ENV_VAR, getConfigDir, getConfigDirOverride, getDefaultConfigDir, } from './paths';
57
+ export { encodeWorkspacePath as encodeClaudeWorkspacePath, getSessionDirectory as getClaudeSessionDirectory, } from './parsers/sessionPathResolver';
58
+ export { getLiveClaudeHome, getDefaultClaudeHome, isDefaultClaudeHome, getClaudeProjectsDir, } from './claudePaths';
59
+ export { getSystemCodexHome, getCodexMonitoringHomes, resolveSidekickCodexHome, getCodexExecutionEnv, getCodexSessionsDirs, CODEX_SESSIONS_SUBDIR, CODEX_ARCHIVED_SESSIONS_SUBDIR, } from './codexPaths';
60
+ export type { CodexSessionsDirsOptions } from './codexPaths';
56
61
  export type { ProviderServiceSeverity, ProviderServiceComponent, ProviderServiceIncident, ProviderServiceStatusFailureReason, ObservedProviderServiceStatus, UnavailableProviderServiceStatus, ProviderServiceStatus, FetchProviderServiceStatusOptions, } from './providerServiceStatusTypes';
57
62
  export { fetchProviderServiceStatus } from './providerServiceStatus';
63
+ export { classifyTool, TOOL_CATEGORIES } from './toolCategory';
64
+ export type { ClassifyToolOptions, ToolCategory } from './toolCategory';
65
+ export { resolveWorkspaceRoots } from './workspaceRoots';
66
+ export type { ResolveWorkspaceRootsOptions, ResolvedWorkspaceRoots } from './workspaceRoots';
67
+ export { discoverWorktreeSiblings, resolveWorktreeMainRepo } from './parsers/sessionPathResolver';
68
+ export { createJsonlTail, DEFAULT_JSONL_TAIL_MAX_LINE_BYTES, DEFAULT_JSONL_TAIL_READ_BYTES, } from './watchers/jsonlTail';
69
+ export type { JsonlTail, JsonlTailBatch, JsonlTailLine, JsonlTailOptions, JsonlTailReset, JsonlTailResetReason, } from './watchers/jsonlTail';
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.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;
10
+ 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.parsePromptHistoryCursor = exports.isPromptHistorySessionSettled = 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.DEFAULT_JSONL_TAIL_READ_BYTES = exports.DEFAULT_JSONL_TAIL_MAX_LINE_BYTES = exports.createJsonlTail = exports.resolveWorktreeMainRepo = exports.discoverWorktreeSiblings = exports.resolveWorkspaceRoots = exports.TOOL_CATEGORIES = exports.classifyTool = exports.fetchProviderServiceStatus = exports.CODEX_ARCHIVED_SESSIONS_SUBDIR = exports.CODEX_SESSIONS_SUBDIR = exports.getCodexSessionsDirs = exports.getCodexExecutionEnv = exports.resolveSidekickCodexHome = exports.getCodexMonitoringHomes = exports.getSystemCodexHome = exports.getClaudeProjectsDir = exports.isDefaultClaudeHome = exports.getDefaultClaudeHome = exports.getLiveClaudeHome = exports.getClaudeSessionDirectory = exports.encodeClaudeWorkspacePath = exports.getDefaultConfigDir = exports.getConfigDirOverride = exports.getConfigDir = exports.CONFIG_DIR_ENV_VAR = 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 = exports.bucketUsage = exports.importSessionHistory = 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
+ Object.defineProperty(exports, "isPromptHistorySessionSettled", { enumerable: true, get: function () { return promptHistory_1.isPromptHistorySessionSettled; } });
27
+ Object.defineProperty(exports, "parsePromptHistoryCursor", { enumerable: true, get: function () { return promptHistory_1.parsePromptHistoryCursor; } });
26
28
  var sessionPromptHistory_1 = require("./sessionPromptHistory");
27
29
  Object.defineProperty(exports, "collectSessionPromptHistory", { enumerable: true, get: function () { return sessionPromptHistory_1.collectSessionPromptHistory; } });
28
30
  var humanPrompt_1 = require("./humanPrompt");
@@ -102,5 +104,44 @@ var factory_1 = require("./providers/factory");
102
104
  Object.defineProperty(exports, "createSessionProviders", { enumerable: true, get: function () { return factory_1.createSessionProviders; } });
103
105
  var claudeUsageDedupe_1 = require("./usage/claudeUsageDedupe");
104
106
  Object.defineProperty(exports, "SYNTHETIC_MODEL", { enumerable: true, get: function () { return claudeUsageDedupe_1.SYNTHETIC_MODEL; } });
107
+ // Sidekick's config root
108
+ var paths_1 = require("./paths");
109
+ Object.defineProperty(exports, "CONFIG_DIR_ENV_VAR", { enumerable: true, get: function () { return paths_1.CONFIG_DIR_ENV_VAR; } });
110
+ Object.defineProperty(exports, "getConfigDir", { enumerable: true, get: function () { return paths_1.getConfigDir; } });
111
+ Object.defineProperty(exports, "getConfigDirOverride", { enumerable: true, get: function () { return paths_1.getConfigDirOverride; } });
112
+ Object.defineProperty(exports, "getDefaultConfigDir", { enumerable: true, get: function () { return paths_1.getDefaultConfigDir; } });
113
+ // Claude Code session directories (Claude's own path encoding)
114
+ var sessionPathResolver_1 = require("./parsers/sessionPathResolver");
115
+ Object.defineProperty(exports, "encodeClaudeWorkspacePath", { enumerable: true, get: function () { return sessionPathResolver_1.encodeWorkspacePath; } });
116
+ Object.defineProperty(exports, "getClaudeSessionDirectory", { enumerable: true, get: function () { return sessionPathResolver_1.getSessionDirectory; } });
117
+ // Provider homes the CLIs read for this process
118
+ var claudePaths_1 = require("./claudePaths");
119
+ Object.defineProperty(exports, "getLiveClaudeHome", { enumerable: true, get: function () { return claudePaths_1.getLiveClaudeHome; } });
120
+ Object.defineProperty(exports, "getDefaultClaudeHome", { enumerable: true, get: function () { return claudePaths_1.getDefaultClaudeHome; } });
121
+ Object.defineProperty(exports, "isDefaultClaudeHome", { enumerable: true, get: function () { return claudePaths_1.isDefaultClaudeHome; } });
122
+ Object.defineProperty(exports, "getClaudeProjectsDir", { enumerable: true, get: function () { return claudePaths_1.getClaudeProjectsDir; } });
123
+ var codexPaths_1 = require("./codexPaths");
124
+ Object.defineProperty(exports, "getSystemCodexHome", { enumerable: true, get: function () { return codexPaths_1.getSystemCodexHome; } });
125
+ Object.defineProperty(exports, "getCodexMonitoringHomes", { enumerable: true, get: function () { return codexPaths_1.getCodexMonitoringHomes; } });
126
+ Object.defineProperty(exports, "resolveSidekickCodexHome", { enumerable: true, get: function () { return codexPaths_1.resolveSidekickCodexHome; } });
127
+ Object.defineProperty(exports, "getCodexExecutionEnv", { enumerable: true, get: function () { return codexPaths_1.getCodexExecutionEnv; } });
128
+ Object.defineProperty(exports, "getCodexSessionsDirs", { enumerable: true, get: function () { return codexPaths_1.getCodexSessionsDirs; } });
129
+ Object.defineProperty(exports, "CODEX_SESSIONS_SUBDIR", { enumerable: true, get: function () { return codexPaths_1.CODEX_SESSIONS_SUBDIR; } });
130
+ Object.defineProperty(exports, "CODEX_ARCHIVED_SESSIONS_SUBDIR", { enumerable: true, get: function () { return codexPaths_1.CODEX_ARCHIVED_SESSIONS_SUBDIR; } });
105
131
  var providerServiceStatus_1 = require("./providerServiceStatus");
106
132
  Object.defineProperty(exports, "fetchProviderServiceStatus", { enumerable: true, get: function () { return providerServiceStatus_1.fetchProviderServiceStatus; } });
133
+ // Tool categories across providers
134
+ var toolCategory_1 = require("./toolCategory");
135
+ Object.defineProperty(exports, "classifyTool", { enumerable: true, get: function () { return toolCategory_1.classifyTool; } });
136
+ Object.defineProperty(exports, "TOOL_CATEGORIES", { enumerable: true, get: function () { return toolCategory_1.TOOL_CATEGORIES; } });
137
+ // Workspace roots and git worktrees
138
+ var workspaceRoots_1 = require("./workspaceRoots");
139
+ Object.defineProperty(exports, "resolveWorkspaceRoots", { enumerable: true, get: function () { return workspaceRoots_1.resolveWorkspaceRoots; } });
140
+ var sessionPathResolver_2 = require("./parsers/sessionPathResolver");
141
+ Object.defineProperty(exports, "discoverWorktreeSiblings", { enumerable: true, get: function () { return sessionPathResolver_2.discoverWorktreeSiblings; } });
142
+ Object.defineProperty(exports, "resolveWorktreeMainRepo", { enumerable: true, get: function () { return sessionPathResolver_2.resolveWorktreeMainRepo; } });
143
+ // Bounded JSONL tail reader
144
+ var jsonlTail_1 = require("./watchers/jsonlTail");
145
+ Object.defineProperty(exports, "createJsonlTail", { enumerable: true, get: function () { return jsonlTail_1.createJsonlTail; } });
146
+ Object.defineProperty(exports, "DEFAULT_JSONL_TAIL_MAX_LINE_BYTES", { enumerable: true, get: function () { return jsonlTail_1.DEFAULT_JSONL_TAIL_MAX_LINE_BYTES; } });
147
+ Object.defineProperty(exports, "DEFAULT_JSONL_TAIL_READ_BYTES", { enumerable: true, get: function () { return jsonlTail_1.DEFAULT_JSONL_TAIL_READ_BYTES; } });
@@ -47,7 +47,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
47
47
  exports.readCodexHistory = readCodexHistory;
48
48
  const fs = __importStar(require("fs"));
49
49
  const path = __importStar(require("path"));
50
- const codexProfiles_1 = require("../codexProfiles");
50
+ const codexPaths_1 = require("../codexPaths");
51
51
  const DEFAULT_LIMIT = 100;
52
52
  const DEFAULT_TAIL_BYTES = 512 * 1024;
53
53
  /**
@@ -59,7 +59,7 @@ function readCodexHistory(options = {}) {
59
59
  if (limit === 0)
60
60
  return [];
61
61
  const maxTailBytes = Math.max(1, options.maxTailBytes ?? Math.max(DEFAULT_TAIL_BYTES, limit * 4096));
62
- const historyPath = path.join(options.codexHome ?? (0, codexProfiles_1.getSystemCodexHome)(), 'history.jsonl');
62
+ const historyPath = path.join(options.codexHome ?? (0, codexPaths_1.getSystemCodexHome)(), 'history.jsonl');
63
63
  let descriptor;
64
64
  try {
65
65
  descriptor = fs.openSync(historyPath, 'r');
@@ -44,6 +44,16 @@ export declare function normalizeCodexToolInput(canonicalToolName: string, rawTo
44
44
  * Matches lines like: `*** Add File: src/math.ts` or `*** Update File: src/index.ts`
45
45
  */
46
46
  export declare function extractPatchFilePaths(input: string): string[];
47
+ /** Default cap on each piece of per-call correlation state the parser keeps. */
48
+ export declare const DEFAULT_MAX_TRACKED_TOOL_CALLS = 4096;
49
+ export interface CodexRolloutParserOptions {
50
+ /**
51
+ * How many call ids each correlation table (emitted tool uses, expanded
52
+ * patches, pending exec and MCP calls) remembers before forgetting the
53
+ * oldest. Bounds memory on long-running rollouts; default 4096.
54
+ */
55
+ maxTrackedToolCalls?: number;
56
+ }
47
57
  /**
48
58
  * Stateful parser for Codex JSONL rollout lines.
49
59
  *
@@ -67,6 +77,8 @@ export declare class CodexRolloutParser {
67
77
  private inPlanMode;
68
78
  private emittedToolUseIds;
69
79
  private patchExpandedToolUseIds;
80
+ private readonly maxTrackedToolCalls;
81
+ constructor(options?: CodexRolloutParserOptions);
70
82
  /** Get stored session metadata. */
71
83
  getSessionMeta(): CodexSessionMeta | null;
72
84
  /** Get current model from turn_context. */
@@ -13,7 +13,7 @@
13
13
  * @module parsers/codexParser
14
14
  */
15
15
  Object.defineProperty(exports, "__esModule", { value: true });
16
- exports.CodexRolloutParser = void 0;
16
+ exports.CodexRolloutParser = exports.DEFAULT_MAX_TRACKED_TOOL_CALLS = void 0;
17
17
  exports.resolveCodexCallUsage = resolveCodexCallUsage;
18
18
  exports.normalizeCodexToolName = normalizeCodexToolName;
19
19
  exports.normalizeCodexToolInput = normalizeCodexToolInput;
@@ -176,6 +176,22 @@ function extractPatchFilePaths(input) {
176
176
  }
177
177
  return paths;
178
178
  }
179
+ /** Default cap on each piece of per-call correlation state the parser keeps. */
180
+ exports.DEFAULT_MAX_TRACKED_TOOL_CALLS = 4096;
181
+ /** Adds `key`, refreshing its position, and evicts the oldest past `max`. */
182
+ function rememberBounded(set, key, max) {
183
+ set.delete(key);
184
+ set.add(key);
185
+ while (set.size > max)
186
+ set.delete(set.values().next().value);
187
+ }
188
+ /** Sets `key`, refreshing its position, and evicts the oldest past `max`. */
189
+ function setBounded(map, key, value, max) {
190
+ map.delete(key);
191
+ map.set(key, value);
192
+ while (map.size > max)
193
+ map.delete(map.keys().next().value);
194
+ }
179
195
  /**
180
196
  * Stateful parser for Codex JSONL rollout lines.
181
197
  *
@@ -199,6 +215,12 @@ class CodexRolloutParser {
199
215
  inPlanMode = false;
200
216
  emittedToolUseIds = new Set();
201
217
  patchExpandedToolUseIds = new Map();
218
+ maxTrackedToolCalls;
219
+ constructor(options = {}) {
220
+ const max = options.maxTrackedToolCalls;
221
+ this.maxTrackedToolCalls =
222
+ typeof max === 'number' && max >= 1 ? Math.floor(max) : exports.DEFAULT_MAX_TRACKED_TOOL_CALLS;
223
+ }
202
224
  /** Get stored session metadata. */
203
225
  getSessionMeta() {
204
226
  return this.sessionMeta;
@@ -374,7 +396,7 @@ class CodexRolloutParser {
374
396
  }
375
397
  const canonicalName = normalizeCodexToolName(item.name);
376
398
  const normalizedInput = normalizeCodexToolInput(canonicalName, item.name, parsedArgs);
377
- this.emittedToolUseIds.add(item.call_id);
399
+ rememberBounded(this.emittedToolUseIds, item.call_id, this.maxTrackedToolCalls);
378
400
  return [
379
401
  {
380
402
  type: 'assistant',
@@ -418,7 +440,7 @@ class CodexRolloutParser {
418
440
  }
419
441
  handleLocalShellCall(timestamp, item) {
420
442
  const command = item.action?.command?.join(' ') || '';
421
- this.emittedToolUseIds.add(item.call_id);
443
+ rememberBounded(this.emittedToolUseIds, item.call_id, this.maxTrackedToolCalls);
422
444
  return [
423
445
  {
424
446
  type: 'assistant',
@@ -449,9 +471,9 @@ class CodexRolloutParser {
449
471
  if (filePaths.length === 0)
450
472
  return [];
451
473
  const toolUseIds = filePaths.map((fp) => `${item.call_id}-${fp}`);
452
- this.patchExpandedToolUseIds.set(item.call_id, toolUseIds);
474
+ setBounded(this.patchExpandedToolUseIds, item.call_id, toolUseIds, this.maxTrackedToolCalls);
453
475
  for (const id of toolUseIds) {
454
- this.emittedToolUseIds.add(id);
476
+ rememberBounded(this.emittedToolUseIds, id, this.maxTrackedToolCalls);
455
477
  }
456
478
  return filePaths.map((fp) => ({
457
479
  type: 'assistant',
@@ -484,7 +506,7 @@ class CodexRolloutParser {
484
506
  }
485
507
  const canonicalName = normalizeCodexToolName(item.name);
486
508
  const normalizedInput = normalizeCodexToolInput(canonicalName, item.name, parsedInput);
487
- this.emittedToolUseIds.add(item.call_id);
509
+ rememberBounded(this.emittedToolUseIds, item.call_id, this.maxTrackedToolCalls);
488
510
  return [
489
511
  {
490
512
  type: 'assistant',
@@ -593,12 +615,12 @@ class CodexRolloutParser {
593
615
  // response_item/message events which carry richer metadata (id, content parts, role).
594
616
  case 'exec_command_begin': {
595
617
  const e = event;
596
- this.pendingExecCommands.set(e.call_id, {
618
+ setBounded(this.pendingExecCommands, e.call_id, {
597
619
  call_id: e.call_id,
598
620
  command: e.command,
599
621
  workdir: e.workdir,
600
622
  timestamp,
601
- });
623
+ }, this.maxTrackedToolCalls);
602
624
  return [];
603
625
  }
604
626
  case 'exec_command_end': {
@@ -608,7 +630,7 @@ class CodexRolloutParser {
608
630
  const command = pending?.command?.join(' ') || '';
609
631
  const events = [];
610
632
  if (!this.emittedToolUseIds.has(e.call_id)) {
611
- this.emittedToolUseIds.add(e.call_id);
633
+ rememberBounded(this.emittedToolUseIds, e.call_id, this.maxTrackedToolCalls);
612
634
  events.push({
613
635
  type: 'assistant',
614
636
  message: {
@@ -653,13 +675,13 @@ class CodexRolloutParser {
653
675
  }
654
676
  case 'mcp_tool_call_begin': {
655
677
  const e = event;
656
- this.pendingMcpToolCalls.set(e.call_id, {
678
+ setBounded(this.pendingMcpToolCalls, e.call_id, {
657
679
  call_id: e.call_id,
658
680
  server_name: e.server_name,
659
681
  tool_name: e.tool_name,
660
682
  arguments: e.arguments,
661
683
  timestamp,
662
- });
684
+ }, this.maxTrackedToolCalls);
663
685
  return [];
664
686
  }
665
687
  case 'mcp_tool_call_end': {
@@ -669,7 +691,7 @@ class CodexRolloutParser {
669
691
  const toolName = pendingMcp?.tool_name || 'McpTool';
670
692
  const events = [];
671
693
  if (!this.emittedToolUseIds.has(e.call_id)) {
672
- this.emittedToolUseIds.add(e.call_id);
694
+ rememberBounded(this.emittedToolUseIds, e.call_id, this.maxTrackedToolCalls);
673
695
  events.push({
674
696
  type: 'assistant',
675
697
  message: {
@@ -47,7 +47,7 @@ exports.collapseDuplicates = collapseDuplicates;
47
47
  exports.discoverDebugLogs = discoverDebugLogs;
48
48
  const fs = __importStar(require("fs"));
49
49
  const path = __importStar(require("path"));
50
- const os = __importStar(require("os"));
50
+ const claudePaths_1 = require("../claudePaths");
51
51
  // ── Constants ──
52
52
  const LOG_LINE_PATTERN = /^(\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}:\d{2}[.\d]*Z?)\s+(DEBUG|INFO|WARN|ERROR)\s+(.*)$/;
53
53
  const LEVEL_ORDER = {
@@ -134,7 +134,7 @@ function collapseDuplicates(entries) {
134
134
  * @returns Array of debug log file info, sorted by mtime (most recent first)
135
135
  */
136
136
  function discoverDebugLogs() {
137
- const debugDir = path.join(os.homedir(), '.claude', 'debug');
137
+ const debugDir = path.join((0, claudePaths_1.getLiveClaudeHome)(), 'debug');
138
138
  try {
139
139
  if (!fs.existsSync(debugDir))
140
140
  return [];
@@ -61,6 +61,7 @@ exports.findAllSessionsWithWorktrees = findAllSessionsWithWorktrees;
61
61
  const fs = __importStar(require("fs"));
62
62
  const path = __importStar(require("path"));
63
63
  const os = __importStar(require("os"));
64
+ const claudePaths_1 = require("../claudePaths");
64
65
  /**
65
66
  * Encodes a workspace path to Claude Code's on-disk directory naming scheme
66
67
  * under `~/.claude/projects/` — every non-ASCII-alphanumeric character
@@ -110,7 +111,7 @@ function encodeWorkspacePath(workspacePath) {
110
111
  */
111
112
  function getSessionDirectory(workspacePath) {
112
113
  const encoded = encodeWorkspacePath(workspacePath);
113
- return path.join(os.homedir(), '.claude', 'projects', encoded);
114
+ return path.join((0, claudePaths_1.getClaudeProjectsDir)(), encoded);
114
115
  }
115
116
  /** How recently a file must be modified to be considered "active" (5 minutes) */
116
117
  const ACTIVE_SESSION_THRESHOLD_MS = 5 * 60 * 1000;
@@ -134,7 +135,7 @@ const ACTIVE_SESSION_THRESHOLD_MS = 5 * 60 * 1000;
134
135
  * ```
135
136
  */
136
137
  function findSubdirectorySessionDirs(workspacePath) {
137
- const projectsDir = path.join(os.homedir(), '.claude', 'projects');
138
+ const projectsDir = (0, claudePaths_1.getClaudeProjectsDir)();
138
139
  try {
139
140
  if (!fs.existsSync(projectsDir)) {
140
141
  return [];
@@ -225,7 +226,7 @@ function getMostRecentlyActiveSessionDir(sessionDirs) {
225
226
  * @returns Absolute path to session directory, or null if not found
226
227
  */
227
228
  function discoverSessionDirectory(workspacePath) {
228
- const projectsDir = path.join(os.homedir(), '.claude', 'projects');
229
+ const projectsDir = (0, claudePaths_1.getClaudeProjectsDir)();
229
230
  // Strategy 1: Try computed encoded path (exact match)
230
231
  const computedDir = getSessionDirectory(workspacePath);
231
232
  if (fs.existsSync(computedDir)) {
@@ -498,7 +499,7 @@ function decodeEncodedPath(encoded) {
498
499
  * ```
499
500
  */
500
501
  function getAllProjectFolders(workspacePath) {
501
- const projectsDir = path.join(os.homedir(), '.claude', 'projects');
502
+ const projectsDir = (0, claudePaths_1.getClaudeProjectsDir)();
502
503
  const folders = [];
503
504
  try {
504
505
  if (!fs.existsSync(projectsDir)) {
@@ -154,6 +154,18 @@ export interface PromptHistoryEntry {
154
154
  * and text, by a later call once its metadata or status changes.
155
155
  */
156
156
  metadataStatus: PromptHistoryMetadataStatus;
157
+ /**
158
+ * Opaque key of the session file this entry came from, the same as its
159
+ * cursor key. It tells apart two files that carry the same session id.
160
+ */
161
+ sessionKey?: string;
162
+ }
163
+ /** A session by provider and id, optionally pinned to one file by `sessionKey`. */
164
+ export interface PromptHistorySessionRef {
165
+ provider: PromptHistoryProvider;
166
+ sessionId: string;
167
+ /** Opaque key of one session file; see `PromptHistoryEntry.sessionKey`. */
168
+ sessionKey?: string;
157
169
  }
158
170
  /**
159
171
  * A log record permanently left out. Records over `maxRecordBytes` and lines
@@ -213,6 +225,15 @@ export interface PromptHistoryResult {
213
225
  exclusions: PromptHistoryExclusion[];
214
226
  /** A bound left bytes or files unread; call again with the cursor to continue. */
215
227
  hasMore: boolean;
228
+ /**
229
+ * Sessions whose cursor entry this call added, advanced, moved, or dropped
230
+ * after a rewrite. Fetch them whole with `collectSessionPromptHistory({ sessionRefs })`.
231
+ */
232
+ changed?: PromptHistorySessionRef[];
233
+ /** Whether this call read past where the cursor stood for any session. */
234
+ progressed?: boolean;
235
+ /** Realpaths of the roots scanned, after worktree expansion. */
236
+ roots?: string[];
216
237
  }
217
238
  /** @internal */
218
239
  export declare const DEFAULT_BOUNDS: Required<PromptHistoryBounds>;
@@ -274,6 +295,17 @@ export interface FileOutcome {
274
295
  export declare function collectPromptHistory(options: CollectPromptHistoryOptions): Promise<PromptHistoryResult>;
275
296
  /** @internal */
276
297
  export declare function emptyStats(): PromptHistoryStats;
298
+ /**
299
+ * True when a cursor entry's last pass reached the end of its file with no
300
+ * prompt still waiting for its answer: an unchanged file needs no read.
301
+ */
302
+ export declare function isPromptHistorySessionSettled(session: PromptHistoryCursorSession): boolean;
303
+ /**
304
+ * Validates a stored cursor (versions 1 to 3). Returns it as a version-3
305
+ * cursor with malformed session entries dropped, or undefined when it is
306
+ * not a cursor at all.
307
+ */
308
+ export declare function parsePromptHistoryCursor(value: unknown): PromptHistoryCursor | undefined;
277
309
  /** @internal */
278
310
  export declare function compareStrings(left: string, right: string): number;
279
311
  /** @internal */