sidekick-shared 0.28.3 → 0.29.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/CHANGELOG.md +86 -0
  2. package/README.md +188 -27
  3. package/dist/aggregation/EventAggregator.d.ts +19 -0
  4. package/dist/aggregation/EventAggregator.js +174 -35
  5. package/dist/aggregation/snapshot.d.ts +37 -8
  6. package/dist/aggregation/snapshot.js +31 -9
  7. package/dist/aggregation/types.d.ts +13 -0
  8. package/dist/authStatus.d.ts +54 -0
  9. package/dist/authStatus.js +91 -0
  10. package/dist/browser.d.ts +16 -6
  11. package/dist/browser.js +24 -2
  12. package/dist/codex.d.ts +23 -0
  13. package/dist/codex.js +44 -0
  14. package/dist/codexProfiles.d.ts +1 -0
  15. package/dist/codexProfiles.js +8 -11
  16. package/dist/context/sessionContext.js +4 -0
  17. package/dist/esm/aggregation/EventAggregator.js +174 -35
  18. package/dist/esm/aggregation/snapshot.js +31 -9
  19. package/dist/esm/authStatus.js +87 -0
  20. package/dist/esm/browser.js +5 -2
  21. package/dist/esm/codex.js +18 -0
  22. package/dist/esm/codexProfiles.js +8 -11
  23. package/dist/esm/context/sessionContext.js +4 -0
  24. package/dist/esm/formatters/toolSummary.js +4 -1
  25. package/dist/esm/formatting.js +10 -1
  26. package/dist/esm/index.js +11 -6
  27. package/dist/esm/modelCatalog.js +7 -5
  28. package/dist/esm/modelContext.js +4 -3
  29. package/dist/esm/modelInfo.js +425 -47
  30. package/dist/esm/node.js +9 -3
  31. package/dist/esm/observedContextWindows.js +2 -1
  32. package/dist/esm/ownKey.js +26 -0
  33. package/dist/esm/parsers/codexParser.js +351 -54
  34. package/dist/esm/parsers/codexRolloutOrigin.js +107 -0
  35. package/dist/esm/parsers/openCodeParser.js +85 -22
  36. package/dist/esm/parsers/subagentScanner.js +33 -12
  37. package/dist/esm/parsers/subagentTraceParser.js +97 -37
  38. package/dist/esm/pricing.js +18 -0
  39. package/dist/esm/pricingCatalog.js +17 -9
  40. package/dist/esm/promptHistory.js +66 -4
  41. package/dist/esm/providerFailure.js +124 -3
  42. package/dist/esm/providers/claudeCode.js +10 -2
  43. package/dist/esm/providers/codex.js +84 -62
  44. package/dist/esm/providers/codexDatabase.js +3 -19
  45. package/dist/esm/providers/codexRollouts.js +24 -1
  46. package/dist/esm/providers/openCode.js +9 -17
  47. package/dist/esm/report/htmlReportGenerator.js +42 -5
  48. package/dist/esm/report/transcriptParser.js +13 -11
  49. package/dist/esm/schemas/providerFailure.js +3 -1
  50. package/dist/esm/schemas/sessionEvent.js +35 -14
  51. package/dist/esm/schemas/transcript.js +4 -0
  52. package/dist/esm/sessionPromptHistory.js +2 -2
  53. package/dist/esm/statusline/payload.js +9 -0
  54. package/dist/esm/subagentSpawn.js +163 -0
  55. package/dist/esm/testing/credentialGuard.js +87 -5
  56. package/dist/esm/toolCallOrigins.js +310 -0
  57. package/dist/esm/transcript.js +46 -3
  58. package/dist/esm/turns/assistantTurn.js +3 -2
  59. package/dist/esm/usage/claudeUsageDedupe.js +68 -0
  60. package/dist/esm/usage/usageEvents.js +146 -17
  61. package/dist/esm/usage/usageReports.js +39 -6
  62. package/dist/esm/watchers/eventBridge.js +15 -0
  63. package/dist/esm/watchers/factory.js +5 -3
  64. package/dist/esm/watchers/jsonlTail.js +442 -58
  65. package/dist/esm/watchers/jsonlWatcher.js +51 -4
  66. package/dist/esm/watchers/providerReaderWatcher.js +13 -0
  67. package/dist/esm/zaiQuota.js +2 -1
  68. package/dist/formatters/toolSummary.js +4 -1
  69. package/dist/formatting.d.ts +26 -1
  70. package/dist/formatting.js +11 -1
  71. package/dist/index.d.ts +22 -11
  72. package/dist/index.js +44 -12
  73. package/dist/modelCatalog.js +7 -5
  74. package/dist/modelContext.js +4 -3
  75. package/dist/modelInfo.d.ts +185 -16
  76. package/dist/modelInfo.js +434 -49
  77. package/dist/node.d.ts +16 -5
  78. package/dist/node.js +33 -2
  79. package/dist/observedContextWindows.js +2 -1
  80. package/dist/ownKey.d.ts +16 -0
  81. package/dist/ownKey.js +30 -0
  82. package/dist/parsers/codexParser.d.ts +118 -0
  83. package/dist/parsers/codexParser.js +352 -54
  84. package/dist/parsers/codexRolloutOrigin.d.ts +49 -0
  85. package/dist/parsers/codexRolloutOrigin.js +111 -0
  86. package/dist/parsers/openCodeParser.d.ts +38 -0
  87. package/dist/parsers/openCodeParser.js +88 -22
  88. package/dist/parsers/subagentScanner.d.ts +19 -6
  89. package/dist/parsers/subagentScanner.js +33 -12
  90. package/dist/parsers/subagentTraceParser.d.ts +25 -5
  91. package/dist/parsers/subagentTraceParser.js +97 -37
  92. package/dist/pricing.d.ts +22 -0
  93. package/dist/pricing.js +50 -0
  94. package/dist/pricingCatalog.d.ts +10 -0
  95. package/dist/pricingCatalog.js +16 -8
  96. package/dist/promptHistory.d.ts +65 -4
  97. package/dist/promptHistory.js +68 -5
  98. package/dist/providerFailure.d.ts +44 -0
  99. package/dist/providerFailure.js +126 -4
  100. package/dist/providers/claudeCode.js +9 -1
  101. package/dist/providers/codex.d.ts +3 -22
  102. package/dist/providers/codex.js +85 -64
  103. package/dist/providers/codexDatabase.d.ts +3 -2
  104. package/dist/providers/codexDatabase.js +4 -22
  105. package/dist/providers/codexRollouts.d.ts +22 -0
  106. package/dist/providers/codexRollouts.js +24 -0
  107. package/dist/providers/openCode.js +8 -16
  108. package/dist/providers/types.d.ts +14 -0
  109. package/dist/report/htmlReportGenerator.js +42 -5
  110. package/dist/report/transcriptParser.d.ts +10 -1
  111. package/dist/report/transcriptParser.js +13 -11
  112. package/dist/schemas/index.d.ts +1 -0
  113. package/dist/schemas/providerFailure.d.ts +39 -0
  114. package/dist/schemas/providerFailure.js +2 -0
  115. package/dist/schemas/sessionEvent.d.ts +27 -10
  116. package/dist/schemas/sessionEvent.js +35 -14
  117. package/dist/schemas/transcript.d.ts +2 -0
  118. package/dist/schemas/transcript.js +4 -0
  119. package/dist/sessionPromptHistory.d.ts +7 -1
  120. package/dist/sessionPromptHistory.js +1 -1
  121. package/dist/statusline/payload.d.ts +10 -0
  122. package/dist/statusline/payload.js +14 -0
  123. package/dist/subagentSpawn.d.ts +80 -0
  124. package/dist/subagentSpawn.js +174 -0
  125. package/dist/testing/credentialGuard.d.ts +14 -0
  126. package/dist/testing/credentialGuard.js +87 -5
  127. package/dist/toolCallOrigins.d.ts +70 -0
  128. package/dist/toolCallOrigins.js +346 -0
  129. package/dist/transcript.d.ts +12 -0
  130. package/dist/transcript.js +46 -3
  131. package/dist/turns/assistantTurn.d.ts +1 -0
  132. package/dist/turns/assistantTurn.js +3 -2
  133. package/dist/types/opencode.d.ts +2 -0
  134. package/dist/usage/claudeUsageDedupe.d.ts +31 -0
  135. package/dist/usage/claudeUsageDedupe.js +68 -0
  136. package/dist/usage/usageEvents.d.ts +54 -6
  137. package/dist/usage/usageEvents.js +146 -17
  138. package/dist/usage/usageReports.d.ts +35 -4
  139. package/dist/usage/usageReports.js +39 -6
  140. package/dist/watchers/eventBridge.js +15 -0
  141. package/dist/watchers/factory.d.ts +6 -0
  142. package/dist/watchers/factory.js +5 -3
  143. package/dist/watchers/jsonlTail.d.ts +124 -4
  144. package/dist/watchers/jsonlTail.js +446 -59
  145. package/dist/watchers/jsonlWatcher.d.ts +18 -1
  146. package/dist/watchers/jsonlWatcher.js +50 -3
  147. package/dist/watchers/providerReaderWatcher.d.ts +7 -0
  148. package/dist/watchers/providerReaderWatcher.js +13 -0
  149. package/dist/watchers/types.d.ts +12 -0
  150. package/dist/zaiQuota.js +2 -1
  151. package/package.json +41 -1
package/dist/node.d.ts CHANGED
@@ -10,7 +10,9 @@ 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, isPromptHistorySessionSettled, parsePromptHistoryCursor, } from './promptHistory';
13
+ export { collectPromptHistory, isPromptHistorySessionSettled, parsePromptHistoryCursor, PROMPT_HISTORY_ORDINAL_MAX_RECORD_BYTES, } from './promptHistory';
14
+ export { findToolCallOrigins } from './toolCallOrigins';
15
+ export type { FindToolCallOriginsOptions, ToolCallOrigin } from './toolCallOrigins';
14
16
  export type { CollectPromptHistoryOptions, PromptHistoryAnswerState, PromptHistoryBound, PromptHistoryBounds, PromptHistoryCursor, PromptHistoryCursorSession, PromptHistoryEntry, PromptHistoryExclusion, PromptHistoryMetadataStatus, PromptHistoryPendingPrompt, PromptHistoryProvider, PromptHistoryResult, PromptHistoryResumeState, PromptHistoryStats, PromptHistoryUsage, } from './promptHistory';
15
17
  export { collectSessionPromptHistory } from './sessionPromptHistory';
16
18
  export type { CollectSessionPromptHistoryOptions, PromptHistorySession, PromptHistorySessionPrompt, PromptHistorySessionRef, SessionPromptHistoryBound, SessionPromptHistoryBounds, SessionPromptHistoryInclude, SessionPromptHistoryResult, SessionPromptHistoryStats, } from './sessionPromptHistory';
@@ -56,8 +58,17 @@ export { SYNTHETIC_MODEL } from './usage/claudeUsageDedupe';
56
58
  export { CONFIG_DIR_ENV_VAR, getConfigDir, getConfigDirOverride, getDefaultConfigDir, } from './paths';
57
59
  export { encodeWorkspacePath as encodeClaudeWorkspacePath, getSessionDirectory as getClaudeSessionDirectory, } from './parsers/sessionPathResolver';
58
60
  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';
61
+ export { getSystemCodexHome, getCodexMonitoringHomes, resolveSidekickCodexHome, getCodexExecutionEnv, getCodexSessionsDirs, getCodexCredentialStoreMode, forceFileCredentialStore, CODEX_SESSIONS_SUBDIR, CODEX_ARCHIVED_SESSIONS_SUBDIR, } from './codexPaths';
62
+ export type { CodexCredentialStoreMode, CodexSessionsDirsOptions } from './codexPaths';
63
+ export { parseAuthJson as parseCodexAuthJson, readAuthIdentityFromRaw as readCodexAuthIdentity, readLastRefresh as readCodexLastRefresh, readAccessTokenExpiry as readCodexAccessTokenExpiry, identitiesMatch as codexIdentitiesMatch, codexRefreshFingerprint, compareCodexAuthFreshness, } from './codexAuth';
64
+ export type { CodexAuthIdentity, CodexAuthJsonFile } from './codexAuth';
65
+ export { atomicWriteJson, atomicWriteJsonSync } from './writers/atomic';
66
+ export { parseClaudeAuthStatus, parseCodexLoginStatus } from './authStatus';
67
+ export type { ParsedClaudeAuthStatus, ParsedCodexLoginStatus } from './authStatus';
68
+ export { codexRolloutOrigin, codexSpawnParentFromSource } from './parsers/codexRolloutOrigin';
69
+ export type { CodexRolloutOrigin } from './parsers/codexRolloutOrigin';
70
+ export { getPricingCatalogInfo, registerModelPricing, clearRegisteredModelPricing, } from './modelInfo';
71
+ export type { PricingCatalogInfo, PricingCatalogSource, RegisterModelPricingOptions, } from './modelInfo';
61
72
  export type { ProviderServiceSeverity, ProviderServiceComponent, ProviderServiceIncident, ProviderServiceStatusFailureReason, ObservedProviderServiceStatus, UnavailableProviderServiceStatus, ProviderServiceStatus, FetchProviderServiceStatusOptions, } from './providerServiceStatusTypes';
62
73
  export { fetchProviderServiceStatus } from './providerServiceStatus';
63
74
  export { classifyTool, TOOL_CATEGORIES } from './toolCategory';
@@ -65,5 +76,5 @@ export type { ClassifyToolOptions, ToolCategory } from './toolCategory';
65
76
  export { resolveWorkspaceRoots } from './workspaceRoots';
66
77
  export type { ResolveWorkspaceRootsOptions, ResolvedWorkspaceRoots } from './workspaceRoots';
67
78
  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';
79
+ export { captureJsonlCheckpoint, createJsonlTail, DEFAULT_JSONL_TAIL_MAX_LINE_BYTES, DEFAULT_JSONL_TAIL_READ_BYTES, JSONL_TAIL_CHECKPOINT_VERSION, JsonlTailSymlinkError, verifyJsonlCheckpoint, } from './watchers/jsonlTail';
80
+ export type { JsonlTail, JsonlTailCheckpoint, JsonlTailReadResult, JsonlTailEntry, JsonlTailRewritePolicy, JsonlTailBatch, JsonlTailLine, JsonlTailOptions, JsonlTailReset, JsonlTailResetReason, } from './watchers/jsonlTail';
package/dist/node.js CHANGED
@@ -7,8 +7,9 @@
7
7
  * for browser bundles — use `sidekick-shared/browser` there.
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
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;
10
+ 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.findToolCallOrigins = exports.PROMPT_HISTORY_ORDINAL_MAX_RECORD_BYTES = 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.atomicWriteJson = exports.compareCodexAuthFreshness = exports.codexRefreshFingerprint = exports.codexIdentitiesMatch = exports.readCodexAccessTokenExpiry = exports.readCodexLastRefresh = exports.readCodexAuthIdentity = exports.parseCodexAuthJson = exports.CODEX_ARCHIVED_SESSIONS_SUBDIR = exports.CODEX_SESSIONS_SUBDIR = exports.forceFileCredentialStore = exports.getCodexCredentialStoreMode = 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 = exports.ACTIVE_SESSION_MTIME_THRESHOLD_MS = exports.sessionSummaryFromStats = void 0;
12
+ exports.verifyJsonlCheckpoint = exports.JsonlTailSymlinkError = exports.JSONL_TAIL_CHECKPOINT_VERSION = exports.DEFAULT_JSONL_TAIL_READ_BYTES = exports.DEFAULT_JSONL_TAIL_MAX_LINE_BYTES = exports.createJsonlTail = exports.captureJsonlCheckpoint = exports.resolveWorktreeMainRepo = exports.discoverWorktreeSiblings = exports.resolveWorkspaceRoots = exports.TOOL_CATEGORIES = exports.classifyTool = exports.fetchProviderServiceStatus = exports.clearRegisteredModelPricing = exports.registerModelPricing = exports.getPricingCatalogInfo = exports.codexSpawnParentFromSource = exports.codexRolloutOrigin = exports.parseCodexLoginStatus = exports.parseClaudeAuthStatus = exports.atomicWriteJsonSync = void 0;
12
13
  var pricingCatalog_1 = require("./pricingCatalog");
13
14
  Object.defineProperty(exports, "hydratePricingCatalog", { enumerable: true, get: function () { return pricingCatalog_1.hydratePricingCatalog; } });
14
15
  Object.defineProperty(exports, "normalizeLiteLlmCatalog", { enumerable: true, get: function () { return pricingCatalog_1.normalizeLiteLlmCatalog; } });
@@ -25,6 +26,9 @@ var promptHistory_1 = require("./promptHistory");
25
26
  Object.defineProperty(exports, "collectPromptHistory", { enumerable: true, get: function () { return promptHistory_1.collectPromptHistory; } });
26
27
  Object.defineProperty(exports, "isPromptHistorySessionSettled", { enumerable: true, get: function () { return promptHistory_1.isPromptHistorySessionSettled; } });
27
28
  Object.defineProperty(exports, "parsePromptHistoryCursor", { enumerable: true, get: function () { return promptHistory_1.parsePromptHistoryCursor; } });
29
+ Object.defineProperty(exports, "PROMPT_HISTORY_ORDINAL_MAX_RECORD_BYTES", { enumerable: true, get: function () { return promptHistory_1.PROMPT_HISTORY_ORDINAL_MAX_RECORD_BYTES; } });
30
+ var toolCallOrigins_1 = require("./toolCallOrigins");
31
+ Object.defineProperty(exports, "findToolCallOrigins", { enumerable: true, get: function () { return toolCallOrigins_1.findToolCallOrigins; } });
28
32
  var sessionPromptHistory_1 = require("./sessionPromptHistory");
29
33
  Object.defineProperty(exports, "collectSessionPromptHistory", { enumerable: true, get: function () { return sessionPromptHistory_1.collectSessionPromptHistory; } });
30
34
  var humanPrompt_1 = require("./humanPrompt");
@@ -126,8 +130,31 @@ Object.defineProperty(exports, "getCodexMonitoringHomes", { enumerable: true, ge
126
130
  Object.defineProperty(exports, "resolveSidekickCodexHome", { enumerable: true, get: function () { return codexPaths_1.resolveSidekickCodexHome; } });
127
131
  Object.defineProperty(exports, "getCodexExecutionEnv", { enumerable: true, get: function () { return codexPaths_1.getCodexExecutionEnv; } });
128
132
  Object.defineProperty(exports, "getCodexSessionsDirs", { enumerable: true, get: function () { return codexPaths_1.getCodexSessionsDirs; } });
133
+ Object.defineProperty(exports, "getCodexCredentialStoreMode", { enumerable: true, get: function () { return codexPaths_1.getCodexCredentialStoreMode; } });
134
+ Object.defineProperty(exports, "forceFileCredentialStore", { enumerable: true, get: function () { return codexPaths_1.forceFileCredentialStore; } });
129
135
  Object.defineProperty(exports, "CODEX_SESSIONS_SUBDIR", { enumerable: true, get: function () { return codexPaths_1.CODEX_SESSIONS_SUBDIR; } });
130
136
  Object.defineProperty(exports, "CODEX_ARCHIVED_SESSIONS_SUBDIR", { enumerable: true, get: function () { return codexPaths_1.CODEX_ARCHIVED_SESSIONS_SUBDIR; } });
137
+ var codexAuth_1 = require("./codexAuth");
138
+ Object.defineProperty(exports, "parseCodexAuthJson", { enumerable: true, get: function () { return codexAuth_1.parseAuthJson; } });
139
+ Object.defineProperty(exports, "readCodexAuthIdentity", { enumerable: true, get: function () { return codexAuth_1.readAuthIdentityFromRaw; } });
140
+ Object.defineProperty(exports, "readCodexLastRefresh", { enumerable: true, get: function () { return codexAuth_1.readLastRefresh; } });
141
+ Object.defineProperty(exports, "readCodexAccessTokenExpiry", { enumerable: true, get: function () { return codexAuth_1.readAccessTokenExpiry; } });
142
+ Object.defineProperty(exports, "codexIdentitiesMatch", { enumerable: true, get: function () { return codexAuth_1.identitiesMatch; } });
143
+ Object.defineProperty(exports, "codexRefreshFingerprint", { enumerable: true, get: function () { return codexAuth_1.codexRefreshFingerprint; } });
144
+ Object.defineProperty(exports, "compareCodexAuthFreshness", { enumerable: true, get: function () { return codexAuth_1.compareCodexAuthFreshness; } });
145
+ var atomic_1 = require("./writers/atomic");
146
+ Object.defineProperty(exports, "atomicWriteJson", { enumerable: true, get: function () { return atomic_1.atomicWriteJson; } });
147
+ Object.defineProperty(exports, "atomicWriteJsonSync", { enumerable: true, get: function () { return atomic_1.atomicWriteJsonSync; } });
148
+ var authStatus_1 = require("./authStatus");
149
+ Object.defineProperty(exports, "parseClaudeAuthStatus", { enumerable: true, get: function () { return authStatus_1.parseClaudeAuthStatus; } });
150
+ Object.defineProperty(exports, "parseCodexLoginStatus", { enumerable: true, get: function () { return authStatus_1.parseCodexLoginStatus; } });
151
+ var codexRolloutOrigin_1 = require("./parsers/codexRolloutOrigin");
152
+ Object.defineProperty(exports, "codexRolloutOrigin", { enumerable: true, get: function () { return codexRolloutOrigin_1.codexRolloutOrigin; } });
153
+ Object.defineProperty(exports, "codexSpawnParentFromSource", { enumerable: true, get: function () { return codexRolloutOrigin_1.codexSpawnParentFromSource; } });
154
+ var modelInfo_1 = require("./modelInfo");
155
+ Object.defineProperty(exports, "getPricingCatalogInfo", { enumerable: true, get: function () { return modelInfo_1.getPricingCatalogInfo; } });
156
+ Object.defineProperty(exports, "registerModelPricing", { enumerable: true, get: function () { return modelInfo_1.registerModelPricing; } });
157
+ Object.defineProperty(exports, "clearRegisteredModelPricing", { enumerable: true, get: function () { return modelInfo_1.clearRegisteredModelPricing; } });
131
158
  var providerServiceStatus_1 = require("./providerServiceStatus");
132
159
  Object.defineProperty(exports, "fetchProviderServiceStatus", { enumerable: true, get: function () { return providerServiceStatus_1.fetchProviderServiceStatus; } });
133
160
  // Tool categories across providers
@@ -142,6 +169,10 @@ Object.defineProperty(exports, "discoverWorktreeSiblings", { enumerable: true, g
142
169
  Object.defineProperty(exports, "resolveWorktreeMainRepo", { enumerable: true, get: function () { return sessionPathResolver_2.resolveWorktreeMainRepo; } });
143
170
  // Bounded JSONL tail reader
144
171
  var jsonlTail_1 = require("./watchers/jsonlTail");
172
+ Object.defineProperty(exports, "captureJsonlCheckpoint", { enumerable: true, get: function () { return jsonlTail_1.captureJsonlCheckpoint; } });
145
173
  Object.defineProperty(exports, "createJsonlTail", { enumerable: true, get: function () { return jsonlTail_1.createJsonlTail; } });
146
174
  Object.defineProperty(exports, "DEFAULT_JSONL_TAIL_MAX_LINE_BYTES", { enumerable: true, get: function () { return jsonlTail_1.DEFAULT_JSONL_TAIL_MAX_LINE_BYTES; } });
147
175
  Object.defineProperty(exports, "DEFAULT_JSONL_TAIL_READ_BYTES", { enumerable: true, get: function () { return jsonlTail_1.DEFAULT_JSONL_TAIL_READ_BYTES; } });
176
+ Object.defineProperty(exports, "JSONL_TAIL_CHECKPOINT_VERSION", { enumerable: true, get: function () { return jsonlTail_1.JSONL_TAIL_CHECKPOINT_VERSION; } });
177
+ Object.defineProperty(exports, "JsonlTailSymlinkError", { enumerable: true, get: function () { return jsonlTail_1.JsonlTailSymlinkError; } });
178
+ Object.defineProperty(exports, "verifyJsonlCheckpoint", { enumerable: true, get: function () { return jsonlTail_1.verifyJsonlCheckpoint; } });
@@ -72,6 +72,7 @@ exports.recordObservedContextWindow = recordObservedContextWindow;
72
72
  const node_fs_1 = require("node:fs");
73
73
  const path = __importStar(require("node:path"));
74
74
  const modelContext_1 = require("./modelContext");
75
+ const ownKey_1 = require("./ownKey");
75
76
  const paths_1 = require("./paths");
76
77
  const atomic_1 = require("./writers/atomic");
77
78
  // ── Constants ──
@@ -120,7 +121,7 @@ function toOverrideMap(store, now = Date.now()) {
120
121
  const observedAt = typeof entry.observedAt === 'string' ? Date.parse(entry.observedAt) : NaN;
121
122
  if (Number.isFinite(observedAt) && now - observedAt > exports.OBSERVED_CONTEXT_WINDOW_TTL_MS)
122
123
  continue;
123
- out[modelId] = window;
124
+ (0, ownKey_1.setOwnValue)(out, modelId, window);
124
125
  }
125
126
  return out;
126
127
  }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Own-property lookups for plain-object tables indexed by external strings.
3
+ *
4
+ * `table[key]` also finds inherited members, so a model id, tool name, or
5
+ * error code such as `constructor`, `toString`, or `__proto__` would return an
6
+ * `Object.prototype` member instead of `undefined`.
7
+ *
8
+ * @module ownKey
9
+ */
10
+ /** The value stored under `key` in `table` itself, or `undefined`. */
11
+ export declare function ownValue<T>(table: Readonly<Record<string, T>>, key: string): T | undefined;
12
+ /**
13
+ * Store `value` as an own, enumerable property, even for `__proto__`, which a
14
+ * plain assignment would treat as a prototype change.
15
+ */
16
+ export declare function setOwnValue<T>(table: Record<string, T>, key: string, value: T): void;
package/dist/ownKey.js ADDED
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ /**
3
+ * Own-property lookups for plain-object tables indexed by external strings.
4
+ *
5
+ * `table[key]` also finds inherited members, so a model id, tool name, or
6
+ * error code such as `constructor`, `toString`, or `__proto__` would return an
7
+ * `Object.prototype` member instead of `undefined`.
8
+ *
9
+ * @module ownKey
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ownValue = ownValue;
13
+ exports.setOwnValue = setOwnValue;
14
+ const hasOwn = Object.prototype.hasOwnProperty;
15
+ /** The value stored under `key` in `table` itself, or `undefined`. */
16
+ function ownValue(table, key) {
17
+ return hasOwn.call(table, key) ? table[key] : undefined;
18
+ }
19
+ /**
20
+ * Store `value` as an own, enumerable property, even for `__proto__`, which a
21
+ * plain assignment would treat as a prototype change.
22
+ */
23
+ function setOwnValue(table, key, value) {
24
+ Object.defineProperty(table, key, {
25
+ value,
26
+ enumerable: true,
27
+ writable: true,
28
+ configurable: true,
29
+ });
30
+ }
@@ -13,6 +13,21 @@
13
13
  */
14
14
  import type { SessionEvent } from '../types/sessionEvent';
15
15
  import type { CodexRolloutLine, CodexSessionMeta, CodexTokenUsage, CodexRateLimits } from '../types/codex';
16
+ /** Pending exec command awaiting its end event. */
17
+ interface PendingExecCommand {
18
+ call_id: string;
19
+ command: string[];
20
+ workdir?: string;
21
+ timestamp: string;
22
+ }
23
+ /** Pending MCP tool call awaiting its end event. */
24
+ interface PendingMcpToolCall {
25
+ call_id: string;
26
+ server_name?: string;
27
+ tool_name: string;
28
+ arguments?: Record<string, unknown>;
29
+ timestamp: string;
30
+ }
16
31
  /**
17
32
  * Resolve the usage of the single call a Codex `token_count` event reports.
18
33
  *
@@ -53,7 +68,67 @@ export interface CodexRolloutParserOptions {
53
68
  * oldest. Bounds memory on long-running rollouts; default 4096.
54
69
  */
55
70
  maxTrackedToolCalls?: number;
71
+ /**
72
+ * Approximate bytes the parser may hold for pending tool calls: exec and
73
+ * MCP calls still waiting for their end event (with their buffered command
74
+ * or arguments) and `apply_patch` calls waiting for their output. Past the
75
+ * budget the oldest pending call is forgotten first, as
76
+ * `maxTrackedToolCalls` does by count, so its end event still emits a tool
77
+ * use but without the forgotten details; a single call larger than the
78
+ * budget is not kept at all. `getPendingStats()` counts the evictions.
79
+ * Default: unlimited.
80
+ */
81
+ maxPendingBytes?: number;
82
+ /**
83
+ * Metadata-only scan: tool-call inputs are emitted as `{}` plus the
84
+ * `_sidekick*` raw-name keys, tool results carry empty content (their
85
+ * `is_error` and `duration` are kept), reasoning is emitted with empty
86
+ * thinking text, and pending calls buffer no command or arguments. Tool
87
+ * names, ids, timestamps, models, usage, rate limits, and message text are
88
+ * unchanged. For cheap passes over large rollouts; default false.
89
+ */
90
+ metadataOnly?: boolean;
91
+ }
92
+ /** Pending tool-call state counters from {@link CodexRolloutParser.getPendingStats}. */
93
+ export interface CodexPendingStats {
94
+ /** Tool calls waiting for their end or output event. */
95
+ pendingCalls: number;
96
+ /** Approximate bytes they hold; `null` unless `maxPendingBytes` is set. */
97
+ pendingBytes: number | null;
98
+ /** Pending calls forgotten because a table exceeded `maxTrackedToolCalls`. */
99
+ evictedByCount: number;
100
+ /** Pending calls forgotten because `maxPendingBytes` was exceeded. */
101
+ evictedByBytes: number;
102
+ }
103
+ /**
104
+ * JSON-serializable continuation state of a {@link CodexRolloutParser}, from
105
+ * `exportResumeState()`, for `importResumeState()` in a parser that resumes
106
+ * at the same rollout position (for example from a persisted session
107
+ * snapshot). Every table lists its entries oldest first.
108
+ */
109
+ export interface CodexRolloutResumeState {
110
+ version: 1;
111
+ sessionMeta: CodexSessionMeta | null;
112
+ /** Model from the latest `turn_context`, attributed to later events. */
113
+ currentModel: string | null;
114
+ /** Cumulative total of the previous token_count event, to skip its duplicates. */
115
+ prevTotalUsage: CodexTokenUsage | null;
116
+ lastTokenUsage: CodexTokenUsage | null;
117
+ modelContextWindow: number | null;
118
+ lastRateLimits: CodexRateLimits | null;
119
+ hasAggregateRateLimits: boolean;
120
+ inPlanMode: boolean;
121
+ /** Call ids whose tool use was already emitted, so their end event does not emit another. */
122
+ emittedToolUseIds: string[];
123
+ /** `apply_patch` calls awaiting output: call id and its per-file tool-use ids. */
124
+ patchExpandedToolUseIds: Array<[string, string[]]>;
125
+ /** `exec_command_begin` events awaiting their end. */
126
+ pendingExecCommands: PendingExecCommand[];
127
+ /** `mcp_tool_call_begin` events awaiting their end. */
128
+ pendingMcpToolCalls: PendingMcpToolCall[];
56
129
  }
130
+ /** A valid `CodexTokenUsage` (copied), `null` for `null`, or `undefined` when invalid. Internal. */
131
+ export declare function codexTokenUsageFrom(value: unknown): CodexTokenUsage | null | undefined;
57
132
  /**
58
133
  * Stateful parser for Codex JSONL rollout lines.
59
134
  *
@@ -78,7 +153,17 @@ export declare class CodexRolloutParser {
78
153
  private emittedToolUseIds;
79
154
  private patchExpandedToolUseIds;
80
155
  private readonly maxTrackedToolCalls;
156
+ /** Byte budget for pending calls; `null` = unlimited (no accounting). */
157
+ private readonly maxPendingBytes;
158
+ private readonly metadataOnly;
159
+ /** Pending calls in insertion order, for the byte budget. */
160
+ private pendingLedger;
161
+ private pendingBytes;
162
+ private evictedByCount;
163
+ private evictedByBytes;
81
164
  constructor(options?: CodexRolloutParserOptions);
165
+ /** Counters for the pending tool-call state and what the caps evicted. */
166
+ getPendingStats(): CodexPendingStats;
82
167
  /** Get stored session metadata. */
83
168
  getSessionMeta(): CodexSessionMeta | null;
84
169
  /** Get current model from turn_context. */
@@ -89,12 +174,44 @@ export declare class CodexRolloutParser {
89
174
  getModelContextWindow(): number | null;
90
175
  /** Get the last observed rate limits from token_count events. */
91
176
  getLastRateLimits(): CodexRateLimits | null;
177
+ /**
178
+ * The state later lines depend on — session metadata, current model,
179
+ * previous cumulative token total, context window, rate limits, plan mode,
180
+ * and the tool-call correlation tables (newest `limit` entries each) — as
181
+ * JSON-serializable data. Eviction counters are not included.
182
+ */
183
+ exportResumeState(limit?: number): CodexRolloutResumeState;
184
+ /**
185
+ * Replaces this parser's state with one from {@link exportResumeState}, as
186
+ * if it had parsed the rollout up to where that state was taken. Returns
187
+ * false, changing nothing, when `state` is not a valid version-1 state.
188
+ * This parser's own `maxTrackedToolCalls`, `maxPendingBytes`, and
189
+ * `metadataOnly` options apply to the imported tables.
190
+ */
191
+ importResumeState(state: unknown): boolean;
92
192
  /**
93
193
  * Converts a single rollout line to zero or more session events.
94
194
  */
95
195
  convertLine(line: CodexRolloutLine): SessionEvent[];
96
196
  /** Reset all parser state. */
97
197
  reset(): void;
198
+ /**
199
+ * Stores a pending call, refreshing its position, then enforces the count
200
+ * cap on its table and the byte budget across all pending tables, oldest
201
+ * first.
202
+ */
203
+ private putPending;
204
+ private putPendingExec;
205
+ private putPendingMcp;
206
+ private putPendingPatch;
207
+ /** Removes and returns a pending call. */
208
+ private takePending;
209
+ private forgetPendingBytes;
210
+ private ledgerKey;
211
+ /** The emitted tool input: unchanged, or only its `_sidekick*` keys in metadata-only mode. */
212
+ private toolInput;
213
+ /** The emitted tool-result content: unchanged, or empty in metadata-only mode. */
214
+ private toolOutput;
98
215
  private handleSessionMeta;
99
216
  private handleResponseItem;
100
217
  private handleMessage;
@@ -109,3 +226,4 @@ export declare class CodexRolloutParser {
109
226
  private handleEventMsg;
110
227
  private handleTokenCount;
111
228
  }
229
+ export {};