sidekick-shared 0.21.6 → 0.23.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.
- package/README.md +51 -43
- package/dist/accountRegistry.d.ts +2 -0
- package/dist/accountStatus.d.ts +1 -0
- package/dist/accountStatus.js +6 -0
- package/dist/accounts.js +2 -0
- package/dist/aggregation/EventAggregator.d.ts +32 -1
- package/dist/aggregation/EventAggregator.js +238 -25
- package/dist/aggregation/snapshot.js +1 -1
- package/dist/aggregation/types.d.ts +23 -1
- package/dist/analytics/codeImpact.d.ts +20 -0
- package/dist/analytics/codeImpact.js +21 -0
- package/dist/analytics/compactionLedger.d.ts +11 -0
- package/dist/analytics/compactionLedger.js +31 -0
- package/dist/analytics/qualityScore.d.ts +26 -0
- package/dist/analytics/qualityScore.js +115 -0
- package/dist/codexProfiles.js +2 -0
- package/dist/context/composer.d.ts +3 -2
- package/dist/context/composer.js +5 -5
- package/dist/doctor.d.ts +55 -0
- package/dist/doctor.js +244 -0
- package/dist/errorHistory.d.ts +32 -0
- package/dist/errorHistory.js +94 -0
- package/dist/extractors/errorTaxonomy.d.ts +6 -0
- package/dist/extractors/errorTaxonomy.js +47 -0
- package/dist/extractors/toolCall.d.ts +9 -0
- package/dist/extractors/toolCall.js +79 -0
- package/dist/handoffUrl.d.ts +7 -0
- package/dist/handoffUrl.js +26 -0
- package/dist/index.d.ts +32 -9
- package/dist/index.js +62 -24
- package/dist/parsers/codexParser.js +13 -0
- package/dist/parsers/openCodeParser.js +13 -0
- package/dist/parsers/planExtractor.js +17 -6
- package/dist/paths.d.ts +10 -0
- package/dist/paths.js +18 -5
- package/dist/projectMigration.d.ts +23 -0
- package/dist/projectMigration.js +95 -0
- package/dist/providers/codexDatabase.d.ts +1 -11
- package/dist/providers/openCodeDatabase.d.ts +1 -31
- package/dist/providers/openCodeDatabase.js +9 -8
- package/dist/providers/types.d.ts +1 -0
- package/dist/readers/decisions.d.ts +2 -1
- package/dist/readers/decisions.js +2 -4
- package/dist/readers/handoff.d.ts +2 -1
- package/dist/readers/handoff.js +13 -8
- package/dist/readers/helpers.d.ts +3 -0
- package/dist/readers/helpers.js +12 -0
- package/dist/readers/notes.d.ts +2 -1
- package/dist/readers/notes.js +2 -4
- package/dist/readers/plans.js +1 -1
- package/dist/readers/tasks.d.ts +2 -1
- package/dist/readers/tasks.js +2 -4
- package/dist/schemas/index.d.ts +2 -0
- package/dist/schemas/index.js +10 -1
- package/dist/schemas/observedSessionV1.d.ts +499 -0
- package/dist/schemas/observedSessionV1.js +69 -0
- package/dist/schemas/sessionEvent.d.ts +13 -0
- package/dist/schemas/sessionEvent.js +19 -0
- package/dist/search/sessionSearch.d.ts +2 -2
- package/dist/search/sessionSearch.js +2 -3
- package/dist/sessionMonitor.d.ts +29 -0
- package/dist/sessionMonitor.js +71 -0
- package/dist/statusline/BurnRateCalculator.d.ts +14 -0
- package/dist/statusline/BurnRateCalculator.js +45 -0
- package/dist/statusline/formatter.d.ts +16 -0
- package/dist/statusline/formatter.js +77 -0
- package/dist/statusline/index.d.ts +7 -0
- package/dist/statusline/index.js +13 -0
- package/dist/types/codex.d.ts +2 -0
- package/dist/types/historicalData.d.ts +35 -1
- package/dist/types/historicalData.js +6 -2
- package/dist/types/observedSessionV1.d.ts +70 -0
- package/dist/types/observedSessionV1.js +185 -0
- package/dist/types/opencode.d.ts +1 -0
- package/dist/types/sessionEvent.d.ts +18 -1
- package/dist/watchers/eventBridge.js +1 -0
- package/dist/watchers/types.d.ts +5 -0
- package/dist/writers/atomic.d.ts +4 -0
- package/dist/writers/atomic.js +113 -0
- package/dist/writers/decisions.d.ts +12 -0
- package/dist/writers/decisions.js +88 -0
- package/dist/writers/notes.d.ts +8 -0
- package/dist/writers/notes.js +82 -0
- package/dist/writers/tasks.d.ts +6 -0
- package/dist/writers/tasks.js +100 -0
- package/package.json +5 -1
|
@@ -8,8 +8,16 @@
|
|
|
8
8
|
* @module extractors/toolCall
|
|
9
9
|
*/
|
|
10
10
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.ToolCallTracker = void 0;
|
|
11
12
|
exports.extractToolCalls = extractToolCalls;
|
|
12
13
|
exports.extractToolCall = extractToolCall;
|
|
14
|
+
const errorTaxonomy_1 = require("./errorTaxonomy");
|
|
15
|
+
function outputString(value) {
|
|
16
|
+
if (value == null)
|
|
17
|
+
return undefined;
|
|
18
|
+
const text = typeof value === 'string' ? value : JSON.stringify(value, null, 2);
|
|
19
|
+
return text.length > 5000 ? `${text.slice(0, 5000)}\n...(truncated)` : text;
|
|
20
|
+
}
|
|
13
21
|
/**
|
|
14
22
|
* Extracts ToolCall objects from a SessionEvent.
|
|
15
23
|
*
|
|
@@ -40,17 +48,88 @@ function extractToolCalls(event) {
|
|
|
40
48
|
if (block && typeof block === 'object' && 'type' in block && block.type === 'tool_use') {
|
|
41
49
|
const toolBlock = block;
|
|
42
50
|
if (toolBlock.name) {
|
|
51
|
+
const isError = toolBlock.is_error === true || toolBlock.error != null;
|
|
52
|
+
const errorOutput = toolBlock.error ?? toolBlock.output;
|
|
43
53
|
calls.push({
|
|
44
54
|
name: toolBlock.name,
|
|
45
55
|
input: toolBlock.input ?? {},
|
|
46
56
|
timestamp,
|
|
47
57
|
toolUseId: toolBlock.id,
|
|
58
|
+
...(isError
|
|
59
|
+
? {
|
|
60
|
+
isError: true,
|
|
61
|
+
output: outputString(errorOutput),
|
|
62
|
+
errorMessage: (0, errorTaxonomy_1.extractErrorMessage)(errorOutput, toolBlock.name),
|
|
63
|
+
errorCategory: (0, errorTaxonomy_1.categorizeError)(errorOutput),
|
|
64
|
+
}
|
|
65
|
+
: {}),
|
|
48
66
|
});
|
|
49
67
|
}
|
|
50
68
|
}
|
|
51
69
|
}
|
|
52
70
|
return calls;
|
|
53
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* Stateful shared extractor that correlates provider-normalized tool uses with
|
|
74
|
+
* their later results. Completed calls always carry the canonical taxonomy.
|
|
75
|
+
*/
|
|
76
|
+
class ToolCallTracker {
|
|
77
|
+
pending = new Map();
|
|
78
|
+
process(event) {
|
|
79
|
+
const completed = [];
|
|
80
|
+
for (const call of extractToolCalls(event)) {
|
|
81
|
+
if (call.toolUseId)
|
|
82
|
+
this.pending.set(call.toolUseId, call);
|
|
83
|
+
else
|
|
84
|
+
completed.push(call);
|
|
85
|
+
}
|
|
86
|
+
const topLevel = extractToolCall(event);
|
|
87
|
+
if (topLevel) {
|
|
88
|
+
const id = event.message.id;
|
|
89
|
+
if (id) {
|
|
90
|
+
topLevel.toolUseId = id;
|
|
91
|
+
this.pending.set(id, topLevel);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
completed.push(topLevel);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const content = event.message.content;
|
|
98
|
+
if (!Array.isArray(content))
|
|
99
|
+
return completed;
|
|
100
|
+
for (const block of content) {
|
|
101
|
+
if (!block ||
|
|
102
|
+
typeof block !== 'object' ||
|
|
103
|
+
!('type' in block) ||
|
|
104
|
+
block.type !== 'tool_result') {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
const result = block;
|
|
108
|
+
if (!result.tool_use_id)
|
|
109
|
+
continue;
|
|
110
|
+
const call = this.pending.get(result.tool_use_id);
|
|
111
|
+
if (!call)
|
|
112
|
+
continue;
|
|
113
|
+
this.pending.delete(result.tool_use_id);
|
|
114
|
+
call.duration =
|
|
115
|
+
typeof result.duration === 'number'
|
|
116
|
+
? result.duration
|
|
117
|
+
: Math.max(0, new Date(event.timestamp).getTime() - call.timestamp.getTime());
|
|
118
|
+
call.isError = result.is_error === true;
|
|
119
|
+
call.output = outputString(result.content);
|
|
120
|
+
if (call.isError) {
|
|
121
|
+
call.errorMessage = (0, errorTaxonomy_1.extractErrorMessage)(result.content, call.name);
|
|
122
|
+
call.errorCategory = (0, errorTaxonomy_1.categorizeError)(result.content);
|
|
123
|
+
}
|
|
124
|
+
completed.push(call);
|
|
125
|
+
}
|
|
126
|
+
return completed;
|
|
127
|
+
}
|
|
128
|
+
reset() {
|
|
129
|
+
this.pending.clear();
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
exports.ToolCallTracker = ToolCallTracker;
|
|
54
133
|
/**
|
|
55
134
|
* Extracts a single top-level `tool_use` event.
|
|
56
135
|
*
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface HandoffUrlIdentifiers {
|
|
2
|
+
sessionId: string;
|
|
3
|
+
provider: string;
|
|
4
|
+
projectPath: string;
|
|
5
|
+
}
|
|
6
|
+
/** Renders an external handoff URL using identifiers only. */
|
|
7
|
+
export declare function renderHandoffUrlTemplate(template: string, identifiers: HandoffUrlIdentifiers): string;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderHandoffUrlTemplate = renderHandoffUrlTemplate;
|
|
4
|
+
const ALLOWED_PLACEHOLDERS = new Set(['sessionId', 'provider', 'projectPath']);
|
|
5
|
+
/** Renders an external handoff URL using identifiers only. */
|
|
6
|
+
function renderHandoffUrlTemplate(template, identifiers) {
|
|
7
|
+
if (!template.trim())
|
|
8
|
+
throw new Error('No handoff URL template is configured.');
|
|
9
|
+
const rendered = template.replace(/\{([^}]+)\}/g, (_match, name) => {
|
|
10
|
+
if (!ALLOWED_PLACEHOLDERS.has(name)) {
|
|
11
|
+
throw new Error(`Unsupported handoff URL placeholder: {${name}}`);
|
|
12
|
+
}
|
|
13
|
+
return encodeURIComponent(identifiers[name]);
|
|
14
|
+
});
|
|
15
|
+
let url;
|
|
16
|
+
try {
|
|
17
|
+
url = new URL(rendered);
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
throw new Error('The rendered handoff URL is invalid.');
|
|
21
|
+
}
|
|
22
|
+
if (['javascript:', 'data:', 'file:'].includes(url.protocol)) {
|
|
23
|
+
throw new Error(`Unsafe handoff URL protocol: ${url.protocol}`);
|
|
24
|
+
}
|
|
25
|
+
return url.toString();
|
|
26
|
+
}
|
package/dist/index.d.ts
CHANGED
|
@@ -11,11 +11,13 @@ export type { DecisionEntry, DecisionLogStore, DecisionSource } from './types/de
|
|
|
11
11
|
export { DECISION_LOG_SCHEMA_VERSION } from './types/decisionLog';
|
|
12
12
|
export type { KnowledgeNote, KnowledgeNoteStore, KnowledgeNoteType, KnowledgeNoteSource, KnowledgeNoteStatus, KnowledgeNoteImportance, } from './types/knowledgeNote';
|
|
13
13
|
export { KNOWLEDGE_NOTE_SCHEMA_VERSION, IMPORTANCE_DECAY_FACTORS, STALENESS_THRESHOLDS, } from './types/knowledgeNote';
|
|
14
|
-
export type { HistoricalDataStore, DailyData, MonthlyData, AllTimeStats, TokenTotals, ModelUsageRecord, ToolUsageRecord, SessionSummary, } from './types/historicalData';
|
|
15
|
-
export { HISTORICAL_DATA_SCHEMA_VERSION, createEmptyTokenTotals } from './types/historicalData';
|
|
14
|
+
export type { HistoricalDataStore, DailyData, MonthlyData, AllTimeStats, TokenTotals, ModelUsageRecord, ToolUsageRecord, SessionSummary, SessionHistoryRecord, } from './types/historicalData';
|
|
15
|
+
export { HISTORICAL_DATA_SCHEMA_VERSION, HISTORICAL_SESSION_RETENTION_LIMIT, createEmptyTokenTotals, } from './types/historicalData';
|
|
16
16
|
export type { PersistedPlan, PersistedPlanStep, PlanHistoryStore, PlanStepStatus, PlanStatus, PlanSource, PlanStepComplexity, } from './types/plan';
|
|
17
17
|
export { PLAN_SCHEMA_VERSION, MAX_PLANS_PER_PROJECT } from './types/plan';
|
|
18
|
-
export { getConfigDir, getProjectDataPath, getGlobalDataPath, encodeWorkspacePath, getProjectSlug, getProjectSlugRaw, } from './paths';
|
|
18
|
+
export { getConfigDir, getProjectDataPath, getGlobalDataPath, encodeWorkspacePath, getProjectSlug, getProjectSlugRaw, resolveProjectIdentity, } from './paths';
|
|
19
|
+
export type { ProjectIdentity } from './paths';
|
|
20
|
+
export { migrateLegacyProjectStores } from './projectMigration';
|
|
19
21
|
export { readTasks } from './readers/tasks';
|
|
20
22
|
export type { ReadTasksOptions } from './readers/tasks';
|
|
21
23
|
export { readDecisions } from './readers/decisions';
|
|
@@ -26,7 +28,15 @@ export { readHistory } from './readers/history';
|
|
|
26
28
|
export { readLatestHandoff } from './readers/handoff';
|
|
27
29
|
export { readPlans, getLatestPlan, writePlans, getPlanAnalytics, readClaudeCodePlanFiles, } from './readers/plans';
|
|
28
30
|
export type { ReadPlansOptions, PlanAnalytics } from './readers/plans';
|
|
31
|
+
export { atomicWriteJson, atomicWriteJsonSync, updateJsonStoreAtomic } from './writers/atomic';
|
|
32
|
+
export { addTask, completeTask } from './writers/tasks';
|
|
33
|
+
export { addDecision, decisionFingerprint } from './writers/decisions';
|
|
34
|
+
export { addNote } from './writers/notes';
|
|
35
|
+
export { renderHandoffUrlTemplate } from './handoffUrl';
|
|
36
|
+
export type { HandoffUrlIdentifiers } from './handoffUrl';
|
|
29
37
|
export type { ProviderId, SessionProvider, SessionProviderBase, SessionFileStats, SessionFileInfo, SearchHit, ProjectFolderInfo, SessionReader, ProviderRuntimeStatus, } from './providers/types';
|
|
38
|
+
export { createProviderSessionAdapterV1, derivePendingUserRequestV1, } from './types/observedSessionV1';
|
|
39
|
+
export type { ObservationProvenanceV1, ObservedAgentSessionV1, ObservedValueV1, PendingUserRequestV1, ProviderCapabilitiesV1, ProviderSessionAdapterV1, SessionEvidenceRefV1, } from './types/observedSessionV1';
|
|
30
40
|
export { detectProvider, getAllDetectedProviders } from './providers/detect';
|
|
31
41
|
export { ClaudeCodeProvider } from './providers/claudeCode';
|
|
32
42
|
export { OpenCodeProvider, getOpenCodeDataDir } from './providers/openCode';
|
|
@@ -77,16 +87,26 @@ export type { HighlightFormat } from './formatters/eventHighlighter';
|
|
|
77
87
|
export { ALL_PHRASES, PHRASE_CATEGORIES, getRandomPhrase } from './phrases';
|
|
78
88
|
export type { PhraseCategory } from './phrases';
|
|
79
89
|
export { EventAggregator, parseTodoDependencies } from './aggregation/EventAggregator';
|
|
90
|
+
export { SessionMonitor } from './sessionMonitor';
|
|
91
|
+
export type { SessionMonitorOptions } from './sessionMonitor';
|
|
80
92
|
export type { SerializedAggregatorState } from './aggregation/EventAggregator';
|
|
81
93
|
export { saveSnapshot, loadSnapshot, deleteSnapshot, isSnapshotValid, getSnapshotPath, } from './aggregation/snapshot';
|
|
82
94
|
export type { SessionSnapshot } from './aggregation/snapshot';
|
|
83
|
-
export type { EventAggregatorOptions, AggregatedTokens, ModelUsageStats, BurnRateInfo, SubagentLifecycle, AggregatedMetrics, FrequencyMetric, PatternMetric, HeatmapBucketMetric, } from './aggregation/types';
|
|
95
|
+
export type { EventAggregatorOptions, AggregatedTokens, ModelUsageStats, BurnRateInfo, SubagentLifecycle, AggregatedMetrics, FrequencyMetric, PatternMetric, HeatmapBucketMetric, ErrorRollup, ErrorRollupEntry, ErrorBucketMetric, } from './aggregation/types';
|
|
96
|
+
export { ERROR_HISTORY_SCHEMA_VERSION, appendErrorHistory, getTopFailingTools, readErrorHistory, } from './errorHistory';
|
|
97
|
+
export type { ErrorHistorySessionRecord, ErrorHistoryStore, TopFailingTool } from './errorHistory';
|
|
84
98
|
export { FrequencyTracker } from './aggregation/FrequencyTracker';
|
|
85
99
|
export type { FrequencyEntry, SerializedFrequencyState } from './aggregation/FrequencyTracker';
|
|
86
100
|
export { HeatmapTracker } from './aggregation/HeatmapTracker';
|
|
87
101
|
export type { HeatmapBucket, SerializedHeatmapState } from './aggregation/HeatmapTracker';
|
|
88
102
|
export { PatternExtractor } from './aggregation/PatternExtractor';
|
|
89
103
|
export type { PatternCluster, SerializedPatternState } from './aggregation/PatternExtractor';
|
|
104
|
+
export { calculateQualityTrend, scoreSessionQuality } from './analytics/qualityScore';
|
|
105
|
+
export type { QualityFactorContribution, QualityFactorId, SessionQualityScore, QualityTrend, } from './analytics/qualityScore';
|
|
106
|
+
export { calculateCodeImpact } from './analytics/codeImpact';
|
|
107
|
+
export type { CodeImpact, ModelCostInput } from './analytics/codeImpact';
|
|
108
|
+
export { calculateCompactionLedger, formatCompactionLedger } from './analytics/compactionLedger';
|
|
109
|
+
export type { CompactionLedger } from './analytics/compactionLedger';
|
|
90
110
|
export { generateHtmlReport, parseTranscript, parseTranscriptFromEvents, openInBrowser, } from './report';
|
|
91
111
|
export type { TranscriptContentBlock, TranscriptEntry, HtmlReportOptions } from './report';
|
|
92
112
|
export { readActiveCredentials, writeActiveCredentials } from './credentialIO';
|
|
@@ -122,28 +142,29 @@ export { fetchCodexResetCreditsFromApi, fetchCodexQuotaFromApi, quotaFromCodexRa
|
|
|
122
142
|
export type { CodexQuotaApiOptions, CodexQuotaCreditsSnapshot, CodexQuotaResolveOptions, CodexQuotaResolveSource, } from './codexQuota';
|
|
123
143
|
export { CodexQuotaWatcher } from './codexQuotaWatcher';
|
|
124
144
|
export type { CodexQuotaWatcherOptions } from './codexQuotaWatcher';
|
|
125
|
-
export { accumulateZaiUsage, extractNextFlushTime, inferZaiQuotaState, isZaiProviderId, makeUnavailableZaiQuotaState, parseZaiQuotaError, resolveZaiTier, rowsToZaiTurnsAndErrors, turnTokenWeight, ZAI_PROMPT_INVOCATIONS, ZAI_PROVIDER_IDS, ZAI_TIER_BUDGETS, } from './zaiQuota';
|
|
126
|
-
export type { ZaiAccumulatedUsage, ZaiAssistantTurn, ZaiOpenCodeRow, ZaiProviderId, ZaiQuotaError, ZaiQuotaErrorKind, ZaiTier, InferZaiQuotaStateOptions, } from './zaiQuota';
|
|
127
|
-
export { ZaiQuotaWatcher } from './zaiQuotaWatcher';
|
|
128
|
-
export type { ZaiQuotaWatcherOptions } from './zaiQuotaWatcher';
|
|
129
145
|
export { fetchZaiQuotaFromApi, quotaStateFromZaiQuotaLimitPayload, readZaiCredentials, resolveZaiQuota, } from './zaiQuotaApi';
|
|
130
146
|
export type { ReadZaiCredentialsOptions, ZaiCredentialSource, ZaiCredentials, ZaiPlatform, ZaiQuotaApiOptions, ZaiQuotaResolveOptions, } from './zaiQuotaApi';
|
|
131
147
|
export { MultiProviderQuotaService } from './multiProviderQuotaService';
|
|
132
148
|
export type { MultiProviderQuotaServiceOptions } from './multiProviderQuotaService';
|
|
133
149
|
export type { ProviderQuotaMap, ProviderQuotaState, RuntimeQuotaProvider } from './providerQuota';
|
|
134
150
|
export type { QuotaSnapshotProviderId } from './quotaSnapshots';
|
|
151
|
+
export { BurnRateCalculator, estimateTimeToQuota } from './statusline/BurnRateCalculator';
|
|
152
|
+
export { formatStatusline, selectStatuslineAccount } from './statusline/formatter';
|
|
153
|
+
export type { StatuslineInput, StatuslineSelection } from './statusline/formatter';
|
|
135
154
|
export { getModelContextWindowSize, DEFAULT_CONTEXT_WINDOW } from './modelContext';
|
|
136
155
|
export { parseModelId, getModelPricing, getModelInfo, calculateCost, calculateCostWithPricing, calculateCostWithProvenance, mergeCostSources, shortModelName, getModelDisplayInfo, compareModelIds, sortModelIds, formatCost, } from './modelInfo';
|
|
137
156
|
export type { ModelPricing, CostTokenUsage, CostSource, CostProvenanceInput, CostWithProvenance, ModelInfo, ModelProvider, ParsedModelId, ModelDisplayInfo, } from './modelInfo';
|
|
138
157
|
export { hydratePricingCatalog, normalizeLiteLlmCatalog, LITELLM_CATALOG_URL, } from './pricingCatalog';
|
|
139
158
|
export type { HydrateOptions, HydrateResult } from './pricingCatalog';
|
|
140
159
|
export { extractTokenUsage } from './extractors/tokenUsage';
|
|
141
|
-
export { extractToolCall, extractToolCalls } from './extractors/toolCall';
|
|
142
160
|
export { extractUrls, extractFilePaths, extractCommands } from './extractors/sessionAssets';
|
|
143
161
|
export type { AssetAgent, ExtractedAsset, ExtractedAssetProvenance, ExtractedAssetType, ExtractedAssets, SourceAssets, } from './extractors/sessionAssets';
|
|
144
162
|
export { readClaudeAssets, claudeSessions } from './extractors/sources/claudeAssets';
|
|
145
163
|
export { readCodexAssets, codexSessions } from './extractors/sources/codexAssets';
|
|
146
164
|
export { gatherAssetsForCwd } from './extractors/gatherAssets';
|
|
165
|
+
export { categorizeError, extractErrorMessage } from './extractors/errorTaxonomy';
|
|
166
|
+
export type { ErrorCategory } from './extractors/errorTaxonomy';
|
|
167
|
+
export { extractToolCall, extractToolCalls, ToolCallTracker } from './extractors/toolCall';
|
|
147
168
|
export type { GatherAssetsOptions, GatherAssetsResult } from './extractors/gatherAssets';
|
|
148
169
|
export { messageUsageSchema, sessionMessageSchema, sessionEventSchema, permissionModeSchema, extractSessionEvents, } from './schemas/sessionEvent';
|
|
149
170
|
export { quotaWindowSchema, quotaStateSchema, quotaFailureKindSchema, quotaProviderIdSchema, quotaSourceSchema, codexResetCreditSchema, codexResetCreditsSnapshotSchema, peakHoursStateSchema, quotaFailureDescriptorSchema, runtimeQuotaProviderSchema, providerQuotaStateSchema, claudeProviderQuotaStateSchema, codexProviderQuotaStateSchema, zaiProviderQuotaStateSchema, providerQuotaMapSchema, } from './schemas/quota';
|
|
@@ -153,5 +174,7 @@ export { accountProviderIdSchema, accountManagerResultSchema, beginAccountLoginR
|
|
|
153
174
|
export { assistantTurnEventSchema, assistantTurnEventTypeSchema, assistantTurnNarrationStepSchema, assistantTurnProcessSchema, assistantTurnProcessStepSchema, assistantTurnProjectionSchema, assistantTurnReasoningTimelineItemSchema, assistantTurnSubagentSchema, assistantTurnSubagentStatusSchema, assistantTurnTimelineItemSchema, assistantTurnToolGroupStepSchema, assistantTurnToolRefSchema, } from './schemas/assistantTurn';
|
|
154
175
|
export { fetchProviderStatus, fetchOpenAIStatus } from './providerStatus';
|
|
155
176
|
export type { ProviderStatusState } from './providerStatus';
|
|
177
|
+
export { formatHealthReport, getSessionDiagnostics, runDoctor } from './doctor';
|
|
178
|
+
export type { DeprecatedSetting, DoctorOptions, HealthCheck, HealthCheckStatus, HealthReport, SessionDiagnostics, } from './doctor';
|
|
156
179
|
export { createPeakHoursNotApplicableState, fetchPeakHoursStatus, isClaudeCodeSessionProvider, scopePeakHoursToSessionProvider, } from './peakHours';
|
|
157
180
|
export type { PeakHoursState } from './peakHours';
|
package/dist/index.js
CHANGED
|
@@ -3,12 +3,13 @@
|
|
|
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.
|
|
6
|
+
exports.normalizeToolName = exports.TRUNCATION_PATTERNS = exports.JsonlParser = exports.CodexProvider = exports.getOpenCodeDataDir = exports.OpenCodeProvider = exports.ClaudeCodeProvider = exports.getAllDetectedProviders = exports.detectProvider = exports.derivePendingUserRequestV1 = exports.createProviderSessionAdapterV1 = exports.renderHandoffUrlTemplate = exports.addNote = exports.decisionFingerprint = exports.addDecision = exports.completeTask = exports.addTask = exports.updateJsonStoreAtomic = 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.getConfigDir = exports.MAX_PLANS_PER_PROJECT = exports.PLAN_SCHEMA_VERSION = 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 = void 0;
|
|
7
|
+
exports.toFollowEvents = exports.createWatcher = exports.parseChangelog = exports.extractProposedPlanShared = exports.parsePlanMarkdownShared = exports.PlanExtractor = exports.segmentAssistantTurn = exports.reasoningSummary = exports.isAssistantTurnSubagentTool = exports.extractTurnSubagents = exports.assistantTurnEventsFromSessionEvents = exports.readSessionContextSnapshot = exports.createSessionContextProjector = exports.calculateSessionContextPressure = exports.buildSessionContextSnapshot = exports.composeContext = exports.FilterEngine = exports.searchSessions = exports.CodexDatabase = exports.OpenCodeDatabase = exports.discoverDebugLogs = exports.collapseDuplicates = exports.filterByLevel = exports.parseDebugLog = exports.scanSubagentTraces = exports.findAllSessionsWithWorktrees = exports.discoverWorktreeSiblings = exports.resolveWorktreeMainRepo = exports.getAllClaudeProjectFolders = exports.decodeEncodedPath = exports.getMostRecentlyActiveSessionDir = exports.findSubdirectorySessionDirs = exports.findSessionsInDirectory = exports.findAllClaudeSessions = exports.findActiveClaudeSession = exports.discoverSessionDirectory = exports.getClaudeSessionDirectory = exports.encodeClaudeWorkspacePath = exports.detectSessionActivity = exports.extractTaskInfo = exports.scanSubagentDir = exports.normalizeCodexToolInput = exports.normalizeCodexToolName = exports.extractPatchFilePaths = exports.CodexRolloutParser = exports.parseDbPartData = exports.parseDbMessageData = exports.convertOpenCodeMessage = exports.detectPlanModeFromText = exports.normalizeToolInput = void 0;
|
|
8
|
+
exports.readAccountRegistry = exports.ensureDefaultAccounts = exports.readClaudeMaxAccessTokenSync = exports.readClaudeMaxCredentials = exports.writeActiveCredentials = exports.readActiveCredentials = exports.openInBrowser = exports.parseTranscriptFromEvents = exports.parseTranscript = exports.generateHtmlReport = exports.formatCompactionLedger = exports.calculateCompactionLedger = exports.calculateCodeImpact = exports.scoreSessionQuality = exports.calculateQualityTrend = exports.PatternExtractor = exports.HeatmapTracker = exports.FrequencyTracker = exports.readErrorHistory = exports.getTopFailingTools = exports.appendErrorHistory = exports.ERROR_HISTORY_SCHEMA_VERSION = exports.getSnapshotPath = 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.formatTokenCount = exports.formatDurationMs = exports.createJsonlTail = void 0;
|
|
9
|
+
exports.installShellHook = exports.setTerminalActiveProfile = exports.removeCodexAccount = exports.switchToCodexAccount = exports.finalizeCodexAccount = exports.prepareCodexAccount = exports.getCodexExecutionEnv = exports.resolveSidekickCodexHome = exports.resolveActiveCodexAccount = exports.getActiveCodexAccount = exports.listCodexAccounts = exports.getSystemCodexHome = exports.getCodexMonitoringHomes = exports.getCodexProfileHome = exports.getCodexProfilesDir = exports.readClaudeProfileIdentity = exports.isClaudeProfileAuthenticated = exports.claudeKeychainService = exports.claudeKeychainSuffix = exports.getClaudeProfileHome = exports.getClaudeProfilesDir = exports.getActiveAccountStatus = exports.removeSavedAccountProfile = exports.replaceSavedAccountProfiles = exports.setActiveSavedAccount = exports.upsertSavedAccountProfile = exports.getActiveSavedAccount = exports.listSavedAccountProfiles = exports.writeSavedAccountRegistry = exports.readSavedAccountRegistry = exports.getAccountsDir = exports.resolveClaudeLoginCommand = exports.listAllAccounts = exports.switchAccount = exports.spawnAccountLogin = exports.finalizeAccountLogin = exports.getAccountLoginStatus = exports.beginAccountLogin = exports.isMultiAccountEnabled = exports.resolveActiveClaudeAccount = exports.getActiveAccount = exports.listAccounts = exports.removeAccount = exports.reconcileClaudeAuthState = exports.applyActiveClaudeToLiveHome = exports.resolveActiveClaudeHome = exports.switchToAccount = exports.addCurrentAccount = exports.readActiveClaudeAccount = exports.writeAccountRegistry = void 0;
|
|
10
|
+
exports.sortModelIds = exports.compareModelIds = exports.getModelDisplayInfo = exports.shortModelName = exports.mergeCostSources = exports.calculateCostWithProvenance = exports.calculateCostWithPricing = exports.calculateCost = exports.getModelInfo = exports.getModelPricing = exports.parseModelId = exports.DEFAULT_CONTEXT_WINDOW = exports.getModelContextWindowSize = exports.selectStatuslineAccount = exports.formatStatusline = exports.estimateTimeToQuota = exports.BurnRateCalculator = 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 = exports.writeQuotaSnapshot = exports.readQuotaSnapshot = exports.QuotaPoller = exports.describeQuotaFailure = exports.withQuotaProjections = exports.projectQuotaWindow = exports.fetchQuota = exports.SEVEN_DAY_WINDOW_MS = exports.FIVE_HOUR_WINDOW_MS = exports.AutoSwitchController = exports.decideAutoSwitch = exports.DEFAULT_AUTO_SWITCH_CONFIG = exports.removeLauncher = exports.writeLauncher = exports.isShellHookInstalled = exports.uninstallShellHook = void 0;
|
|
11
|
+
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.LITELLM_CATALOG_URL = exports.normalizeLiteLlmCatalog = exports.hydratePricingCatalog = exports.formatCost = void 0;
|
|
12
|
+
exports.scopePeakHoursToSessionProvider = exports.isClaudeCodeSessionProvider = exports.fetchPeakHoursStatus = exports.createPeakHoursNotApplicableState = exports.runDoctor = exports.getSessionDiagnostics = exports.formatHealthReport = exports.fetchOpenAIStatus = exports.fetchProviderStatus = exports.assistantTurnToolRefSchema = exports.assistantTurnToolGroupStepSchema = exports.assistantTurnTimelineItemSchema = exports.assistantTurnSubagentStatusSchema = exports.assistantTurnSubagentSchema = exports.assistantTurnReasoningTimelineItemSchema = exports.assistantTurnProjectionSchema = exports.assistantTurnProcessStepSchema = exports.assistantTurnProcessSchema = exports.assistantTurnNarrationStepSchema = exports.assistantTurnEventTypeSchema = exports.assistantTurnEventSchema = void 0;
|
|
12
13
|
var codex_1 = require("./types/codex");
|
|
13
14
|
Object.defineProperty(exports, "isAggregateCodexLimit", { enumerable: true, get: function () { return codex_1.isAggregateCodexLimit; } });
|
|
14
15
|
var taskPersistence_1 = require("./types/taskPersistence");
|
|
@@ -22,6 +23,7 @@ Object.defineProperty(exports, "IMPORTANCE_DECAY_FACTORS", { enumerable: true, g
|
|
|
22
23
|
Object.defineProperty(exports, "STALENESS_THRESHOLDS", { enumerable: true, get: function () { return knowledgeNote_1.STALENESS_THRESHOLDS; } });
|
|
23
24
|
var historicalData_1 = require("./types/historicalData");
|
|
24
25
|
Object.defineProperty(exports, "HISTORICAL_DATA_SCHEMA_VERSION", { enumerable: true, get: function () { return historicalData_1.HISTORICAL_DATA_SCHEMA_VERSION; } });
|
|
26
|
+
Object.defineProperty(exports, "HISTORICAL_SESSION_RETENTION_LIMIT", { enumerable: true, get: function () { return historicalData_1.HISTORICAL_SESSION_RETENTION_LIMIT; } });
|
|
25
27
|
Object.defineProperty(exports, "createEmptyTokenTotals", { enumerable: true, get: function () { return historicalData_1.createEmptyTokenTotals; } });
|
|
26
28
|
var plan_1 = require("./types/plan");
|
|
27
29
|
Object.defineProperty(exports, "PLAN_SCHEMA_VERSION", { enumerable: true, get: function () { return plan_1.PLAN_SCHEMA_VERSION; } });
|
|
@@ -34,6 +36,9 @@ Object.defineProperty(exports, "getGlobalDataPath", { enumerable: true, get: fun
|
|
|
34
36
|
Object.defineProperty(exports, "encodeWorkspacePath", { enumerable: true, get: function () { return paths_1.encodeWorkspacePath; } });
|
|
35
37
|
Object.defineProperty(exports, "getProjectSlug", { enumerable: true, get: function () { return paths_1.getProjectSlug; } });
|
|
36
38
|
Object.defineProperty(exports, "getProjectSlugRaw", { enumerable: true, get: function () { return paths_1.getProjectSlugRaw; } });
|
|
39
|
+
Object.defineProperty(exports, "resolveProjectIdentity", { enumerable: true, get: function () { return paths_1.resolveProjectIdentity; } });
|
|
40
|
+
var projectMigration_1 = require("./projectMigration");
|
|
41
|
+
Object.defineProperty(exports, "migrateLegacyProjectStores", { enumerable: true, get: function () { return projectMigration_1.migrateLegacyProjectStores; } });
|
|
37
42
|
// Readers
|
|
38
43
|
var tasks_1 = require("./readers/tasks");
|
|
39
44
|
Object.defineProperty(exports, "readTasks", { enumerable: true, get: function () { return tasks_1.readTasks; } });
|
|
@@ -51,6 +56,24 @@ Object.defineProperty(exports, "getLatestPlan", { enumerable: true, get: functio
|
|
|
51
56
|
Object.defineProperty(exports, "writePlans", { enumerable: true, get: function () { return plans_1.writePlans; } });
|
|
52
57
|
Object.defineProperty(exports, "getPlanAnalytics", { enumerable: true, get: function () { return plans_1.getPlanAnalytics; } });
|
|
53
58
|
Object.defineProperty(exports, "readClaudeCodePlanFiles", { enumerable: true, get: function () { return plans_1.readClaudeCodePlanFiles; } });
|
|
59
|
+
// Atomic persistence writers
|
|
60
|
+
var atomic_1 = require("./writers/atomic");
|
|
61
|
+
Object.defineProperty(exports, "atomicWriteJson", { enumerable: true, get: function () { return atomic_1.atomicWriteJson; } });
|
|
62
|
+
Object.defineProperty(exports, "atomicWriteJsonSync", { enumerable: true, get: function () { return atomic_1.atomicWriteJsonSync; } });
|
|
63
|
+
Object.defineProperty(exports, "updateJsonStoreAtomic", { enumerable: true, get: function () { return atomic_1.updateJsonStoreAtomic; } });
|
|
64
|
+
var tasks_2 = require("./writers/tasks");
|
|
65
|
+
Object.defineProperty(exports, "addTask", { enumerable: true, get: function () { return tasks_2.addTask; } });
|
|
66
|
+
Object.defineProperty(exports, "completeTask", { enumerable: true, get: function () { return tasks_2.completeTask; } });
|
|
67
|
+
var decisions_2 = require("./writers/decisions");
|
|
68
|
+
Object.defineProperty(exports, "addDecision", { enumerable: true, get: function () { return decisions_2.addDecision; } });
|
|
69
|
+
Object.defineProperty(exports, "decisionFingerprint", { enumerable: true, get: function () { return decisions_2.decisionFingerprint; } });
|
|
70
|
+
var notes_2 = require("./writers/notes");
|
|
71
|
+
Object.defineProperty(exports, "addNote", { enumerable: true, get: function () { return notes_2.addNote; } });
|
|
72
|
+
var handoffUrl_1 = require("./handoffUrl");
|
|
73
|
+
Object.defineProperty(exports, "renderHandoffUrlTemplate", { enumerable: true, get: function () { return handoffUrl_1.renderHandoffUrlTemplate; } });
|
|
74
|
+
var observedSessionV1_1 = require("./types/observedSessionV1");
|
|
75
|
+
Object.defineProperty(exports, "createProviderSessionAdapterV1", { enumerable: true, get: function () { return observedSessionV1_1.createProviderSessionAdapterV1; } });
|
|
76
|
+
Object.defineProperty(exports, "derivePendingUserRequestV1", { enumerable: true, get: function () { return observedSessionV1_1.derivePendingUserRequestV1; } });
|
|
54
77
|
var detect_1 = require("./providers/detect");
|
|
55
78
|
Object.defineProperty(exports, "detectProvider", { enumerable: true, get: function () { return detect_1.detectProvider; } });
|
|
56
79
|
Object.defineProperty(exports, "getAllDetectedProviders", { enumerable: true, get: function () { return detect_1.getAllDetectedProviders; } });
|
|
@@ -180,12 +203,19 @@ Object.defineProperty(exports, "getRandomPhrase", { enumerable: true, get: funct
|
|
|
180
203
|
var EventAggregator_1 = require("./aggregation/EventAggregator");
|
|
181
204
|
Object.defineProperty(exports, "EventAggregator", { enumerable: true, get: function () { return EventAggregator_1.EventAggregator; } });
|
|
182
205
|
Object.defineProperty(exports, "parseTodoDependencies", { enumerable: true, get: function () { return EventAggregator_1.parseTodoDependencies; } });
|
|
206
|
+
var sessionMonitor_1 = require("./sessionMonitor");
|
|
207
|
+
Object.defineProperty(exports, "SessionMonitor", { enumerable: true, get: function () { return sessionMonitor_1.SessionMonitor; } });
|
|
183
208
|
var snapshot_1 = require("./aggregation/snapshot");
|
|
184
209
|
Object.defineProperty(exports, "saveSnapshot", { enumerable: true, get: function () { return snapshot_1.saveSnapshot; } });
|
|
185
210
|
Object.defineProperty(exports, "loadSnapshot", { enumerable: true, get: function () { return snapshot_1.loadSnapshot; } });
|
|
186
211
|
Object.defineProperty(exports, "deleteSnapshot", { enumerable: true, get: function () { return snapshot_1.deleteSnapshot; } });
|
|
187
212
|
Object.defineProperty(exports, "isSnapshotValid", { enumerable: true, get: function () { return snapshot_1.isSnapshotValid; } });
|
|
188
213
|
Object.defineProperty(exports, "getSnapshotPath", { enumerable: true, get: function () { return snapshot_1.getSnapshotPath; } });
|
|
214
|
+
var errorHistory_1 = require("./errorHistory");
|
|
215
|
+
Object.defineProperty(exports, "ERROR_HISTORY_SCHEMA_VERSION", { enumerable: true, get: function () { return errorHistory_1.ERROR_HISTORY_SCHEMA_VERSION; } });
|
|
216
|
+
Object.defineProperty(exports, "appendErrorHistory", { enumerable: true, get: function () { return errorHistory_1.appendErrorHistory; } });
|
|
217
|
+
Object.defineProperty(exports, "getTopFailingTools", { enumerable: true, get: function () { return errorHistory_1.getTopFailingTools; } });
|
|
218
|
+
Object.defineProperty(exports, "readErrorHistory", { enumerable: true, get: function () { return errorHistory_1.readErrorHistory; } });
|
|
189
219
|
// Aggregation — analytics engines
|
|
190
220
|
var FrequencyTracker_1 = require("./aggregation/FrequencyTracker");
|
|
191
221
|
Object.defineProperty(exports, "FrequencyTracker", { enumerable: true, get: function () { return FrequencyTracker_1.FrequencyTracker; } });
|
|
@@ -193,6 +223,14 @@ var HeatmapTracker_1 = require("./aggregation/HeatmapTracker");
|
|
|
193
223
|
Object.defineProperty(exports, "HeatmapTracker", { enumerable: true, get: function () { return HeatmapTracker_1.HeatmapTracker; } });
|
|
194
224
|
var PatternExtractor_1 = require("./aggregation/PatternExtractor");
|
|
195
225
|
Object.defineProperty(exports, "PatternExtractor", { enumerable: true, get: function () { return PatternExtractor_1.PatternExtractor; } });
|
|
226
|
+
var qualityScore_1 = require("./analytics/qualityScore");
|
|
227
|
+
Object.defineProperty(exports, "calculateQualityTrend", { enumerable: true, get: function () { return qualityScore_1.calculateQualityTrend; } });
|
|
228
|
+
Object.defineProperty(exports, "scoreSessionQuality", { enumerable: true, get: function () { return qualityScore_1.scoreSessionQuality; } });
|
|
229
|
+
var codeImpact_1 = require("./analytics/codeImpact");
|
|
230
|
+
Object.defineProperty(exports, "calculateCodeImpact", { enumerable: true, get: function () { return codeImpact_1.calculateCodeImpact; } });
|
|
231
|
+
var compactionLedger_1 = require("./analytics/compactionLedger");
|
|
232
|
+
Object.defineProperty(exports, "calculateCompactionLedger", { enumerable: true, get: function () { return compactionLedger_1.calculateCompactionLedger; } });
|
|
233
|
+
Object.defineProperty(exports, "formatCompactionLedger", { enumerable: true, get: function () { return compactionLedger_1.formatCompactionLedger; } });
|
|
196
234
|
// Report — HTML session report generation
|
|
197
235
|
var report_1 = require("./report");
|
|
198
236
|
Object.defineProperty(exports, "generateHtmlReport", { enumerable: true, get: function () { return report_1.generateHtmlReport; } });
|
|
@@ -305,21 +343,6 @@ Object.defineProperty(exports, "resolveCodexQuota", { enumerable: true, get: fun
|
|
|
305
343
|
Object.defineProperty(exports, "resolveCodexQuotaFromLocalSources", { enumerable: true, get: function () { return codexQuota_1.resolveCodexQuotaFromLocalSources; } });
|
|
306
344
|
var codexQuotaWatcher_1 = require("./codexQuotaWatcher");
|
|
307
345
|
Object.defineProperty(exports, "CodexQuotaWatcher", { enumerable: true, get: function () { return codexQuotaWatcher_1.CodexQuotaWatcher; } });
|
|
308
|
-
var zaiQuota_1 = require("./zaiQuota");
|
|
309
|
-
Object.defineProperty(exports, "accumulateZaiUsage", { enumerable: true, get: function () { return zaiQuota_1.accumulateZaiUsage; } });
|
|
310
|
-
Object.defineProperty(exports, "extractNextFlushTime", { enumerable: true, get: function () { return zaiQuota_1.extractNextFlushTime; } });
|
|
311
|
-
Object.defineProperty(exports, "inferZaiQuotaState", { enumerable: true, get: function () { return zaiQuota_1.inferZaiQuotaState; } });
|
|
312
|
-
Object.defineProperty(exports, "isZaiProviderId", { enumerable: true, get: function () { return zaiQuota_1.isZaiProviderId; } });
|
|
313
|
-
Object.defineProperty(exports, "makeUnavailableZaiQuotaState", { enumerable: true, get: function () { return zaiQuota_1.makeUnavailableZaiQuotaState; } });
|
|
314
|
-
Object.defineProperty(exports, "parseZaiQuotaError", { enumerable: true, get: function () { return zaiQuota_1.parseZaiQuotaError; } });
|
|
315
|
-
Object.defineProperty(exports, "resolveZaiTier", { enumerable: true, get: function () { return zaiQuota_1.resolveZaiTier; } });
|
|
316
|
-
Object.defineProperty(exports, "rowsToZaiTurnsAndErrors", { enumerable: true, get: function () { return zaiQuota_1.rowsToZaiTurnsAndErrors; } });
|
|
317
|
-
Object.defineProperty(exports, "turnTokenWeight", { enumerable: true, get: function () { return zaiQuota_1.turnTokenWeight; } });
|
|
318
|
-
Object.defineProperty(exports, "ZAI_PROMPT_INVOCATIONS", { enumerable: true, get: function () { return zaiQuota_1.ZAI_PROMPT_INVOCATIONS; } });
|
|
319
|
-
Object.defineProperty(exports, "ZAI_PROVIDER_IDS", { enumerable: true, get: function () { return zaiQuota_1.ZAI_PROVIDER_IDS; } });
|
|
320
|
-
Object.defineProperty(exports, "ZAI_TIER_BUDGETS", { enumerable: true, get: function () { return zaiQuota_1.ZAI_TIER_BUDGETS; } });
|
|
321
|
-
var zaiQuotaWatcher_1 = require("./zaiQuotaWatcher");
|
|
322
|
-
Object.defineProperty(exports, "ZaiQuotaWatcher", { enumerable: true, get: function () { return zaiQuotaWatcher_1.ZaiQuotaWatcher; } });
|
|
323
346
|
var zaiQuotaApi_1 = require("./zaiQuotaApi");
|
|
324
347
|
Object.defineProperty(exports, "fetchZaiQuotaFromApi", { enumerable: true, get: function () { return zaiQuotaApi_1.fetchZaiQuotaFromApi; } });
|
|
325
348
|
Object.defineProperty(exports, "quotaStateFromZaiQuotaLimitPayload", { enumerable: true, get: function () { return zaiQuotaApi_1.quotaStateFromZaiQuotaLimitPayload; } });
|
|
@@ -327,6 +350,12 @@ Object.defineProperty(exports, "readZaiCredentials", { enumerable: true, get: fu
|
|
|
327
350
|
Object.defineProperty(exports, "resolveZaiQuota", { enumerable: true, get: function () { return zaiQuotaApi_1.resolveZaiQuota; } });
|
|
328
351
|
var multiProviderQuotaService_1 = require("./multiProviderQuotaService");
|
|
329
352
|
Object.defineProperty(exports, "MultiProviderQuotaService", { enumerable: true, get: function () { return multiProviderQuotaService_1.MultiProviderQuotaService; } });
|
|
353
|
+
var BurnRateCalculator_1 = require("./statusline/BurnRateCalculator");
|
|
354
|
+
Object.defineProperty(exports, "BurnRateCalculator", { enumerable: true, get: function () { return BurnRateCalculator_1.BurnRateCalculator; } });
|
|
355
|
+
Object.defineProperty(exports, "estimateTimeToQuota", { enumerable: true, get: function () { return BurnRateCalculator_1.estimateTimeToQuota; } });
|
|
356
|
+
var formatter_1 = require("./statusline/formatter");
|
|
357
|
+
Object.defineProperty(exports, "formatStatusline", { enumerable: true, get: function () { return formatter_1.formatStatusline; } });
|
|
358
|
+
Object.defineProperty(exports, "selectStatuslineAccount", { enumerable: true, get: function () { return formatter_1.selectStatuslineAccount; } });
|
|
330
359
|
// Model Context
|
|
331
360
|
var modelContext_1 = require("./modelContext");
|
|
332
361
|
Object.defineProperty(exports, "getModelContextWindowSize", { enumerable: true, get: function () { return modelContext_1.getModelContextWindowSize; } });
|
|
@@ -354,9 +383,6 @@ Object.defineProperty(exports, "LITELLM_CATALOG_URL", { enumerable: true, get: f
|
|
|
354
383
|
// Extractors — per-event token usage and tool call extraction
|
|
355
384
|
var tokenUsage_1 = require("./extractors/tokenUsage");
|
|
356
385
|
Object.defineProperty(exports, "extractTokenUsage", { enumerable: true, get: function () { return tokenUsage_1.extractTokenUsage; } });
|
|
357
|
-
var toolCall_1 = require("./extractors/toolCall");
|
|
358
|
-
Object.defineProperty(exports, "extractToolCall", { enumerable: true, get: function () { return toolCall_1.extractToolCall; } });
|
|
359
|
-
Object.defineProperty(exports, "extractToolCalls", { enumerable: true, get: function () { return toolCall_1.extractToolCalls; } });
|
|
360
386
|
// Extractors — actionable session assets. Node-only: safe for CLI and
|
|
361
387
|
// extension-host code, not for browser/webview bundles.
|
|
362
388
|
var sessionAssets_1 = require("./extractors/sessionAssets");
|
|
@@ -371,6 +397,13 @@ Object.defineProperty(exports, "readCodexAssets", { enumerable: true, get: funct
|
|
|
371
397
|
Object.defineProperty(exports, "codexSessions", { enumerable: true, get: function () { return codexAssets_1.codexSessions; } });
|
|
372
398
|
var gatherAssets_1 = require("./extractors/gatherAssets");
|
|
373
399
|
Object.defineProperty(exports, "gatherAssetsForCwd", { enumerable: true, get: function () { return gatherAssets_1.gatherAssetsForCwd; } });
|
|
400
|
+
var errorTaxonomy_1 = require("./extractors/errorTaxonomy");
|
|
401
|
+
Object.defineProperty(exports, "categorizeError", { enumerable: true, get: function () { return errorTaxonomy_1.categorizeError; } });
|
|
402
|
+
Object.defineProperty(exports, "extractErrorMessage", { enumerable: true, get: function () { return errorTaxonomy_1.extractErrorMessage; } });
|
|
403
|
+
var toolCall_1 = require("./extractors/toolCall");
|
|
404
|
+
Object.defineProperty(exports, "extractToolCall", { enumerable: true, get: function () { return toolCall_1.extractToolCall; } });
|
|
405
|
+
Object.defineProperty(exports, "extractToolCalls", { enumerable: true, get: function () { return toolCall_1.extractToolCalls; } });
|
|
406
|
+
Object.defineProperty(exports, "ToolCallTracker", { enumerable: true, get: function () { return toolCall_1.ToolCallTracker; } });
|
|
374
407
|
// Schemas — Zod runtime validation for session events
|
|
375
408
|
var sessionEvent_1 = require("./schemas/sessionEvent");
|
|
376
409
|
Object.defineProperty(exports, "messageUsageSchema", { enumerable: true, get: function () { return sessionEvent_1.messageUsageSchema; } });
|
|
@@ -429,6 +462,11 @@ Object.defineProperty(exports, "assistantTurnToolRefSchema", { enumerable: true,
|
|
|
429
462
|
var providerStatus_1 = require("./providerStatus");
|
|
430
463
|
Object.defineProperty(exports, "fetchProviderStatus", { enumerable: true, get: function () { return providerStatus_1.fetchProviderStatus; } });
|
|
431
464
|
Object.defineProperty(exports, "fetchOpenAIStatus", { enumerable: true, get: function () { return providerStatus_1.fetchOpenAIStatus; } });
|
|
465
|
+
// Shared diagnostics / health report
|
|
466
|
+
var doctor_1 = require("./doctor");
|
|
467
|
+
Object.defineProperty(exports, "formatHealthReport", { enumerable: true, get: function () { return doctor_1.formatHealthReport; } });
|
|
468
|
+
Object.defineProperty(exports, "getSessionDiagnostics", { enumerable: true, get: function () { return doctor_1.getSessionDiagnostics; } });
|
|
469
|
+
Object.defineProperty(exports, "runDoctor", { enumerable: true, get: function () { return doctor_1.runDoctor; } });
|
|
432
470
|
// Peak Hours (PromoClock — third-party)
|
|
433
471
|
var peakHours_1 = require("./peakHours");
|
|
434
472
|
Object.defineProperty(exports, "createPeakHoursNotApplicableState", { enumerable: true, get: function () { return peakHours_1.createPeakHoursNotApplicableState; } });
|
|
@@ -18,6 +18,17 @@ exports.normalizeCodexToolInput = normalizeCodexToolInput;
|
|
|
18
18
|
exports.extractPatchFilePaths = extractPatchFilePaths;
|
|
19
19
|
const codex_1 = require("../types/codex");
|
|
20
20
|
const openCodeParser_1 = require("./openCodeParser");
|
|
21
|
+
function reportedCompaction(tokensBefore, tokensAfter) {
|
|
22
|
+
if (typeof tokensBefore !== 'number' ||
|
|
23
|
+
typeof tokensAfter !== 'number' ||
|
|
24
|
+
!Number.isFinite(tokensBefore) ||
|
|
25
|
+
!Number.isFinite(tokensAfter) ||
|
|
26
|
+
tokensBefore < tokensAfter ||
|
|
27
|
+
tokensAfter < 0) {
|
|
28
|
+
return {};
|
|
29
|
+
}
|
|
30
|
+
return { compaction: { tokensBefore, tokensAfter } };
|
|
31
|
+
}
|
|
21
32
|
function normalizeRateLimits(rateLimits) {
|
|
22
33
|
if (!rateLimits?.primary && !rateLimits?.secondary)
|
|
23
34
|
return undefined;
|
|
@@ -476,6 +487,7 @@ class CodexRolloutParser {
|
|
|
476
487
|
content: payload.summary || 'Context compacted',
|
|
477
488
|
},
|
|
478
489
|
timestamp,
|
|
490
|
+
...reportedCompaction(payload.tokens_before, payload.tokens_after),
|
|
479
491
|
},
|
|
480
492
|
];
|
|
481
493
|
}
|
|
@@ -664,6 +676,7 @@ class CodexRolloutParser {
|
|
|
664
676
|
content: e.summary || 'Context compacted',
|
|
665
677
|
},
|
|
666
678
|
timestamp,
|
|
679
|
+
...reportedCompaction(e.tokens_before, e.tokens_after),
|
|
667
680
|
},
|
|
668
681
|
];
|
|
669
682
|
}
|
|
@@ -336,6 +336,14 @@ function convertAssistantMessage(message, parts) {
|
|
|
336
336
|
reasoning_tokens: message.tokens.reasoning || 0,
|
|
337
337
|
};
|
|
338
338
|
const timestamp = toISOString(message.time.completed || message.time.created);
|
|
339
|
+
const retryAttempts = parts
|
|
340
|
+
.filter((part) => part.type === 'retry')
|
|
341
|
+
.map((part) => part.attempt)
|
|
342
|
+
.filter((attempt) => typeof attempt === 'number');
|
|
343
|
+
const finishReasons = parts
|
|
344
|
+
.filter((part) => part.type === 'step-finish')
|
|
345
|
+
.map((part) => part.reason)
|
|
346
|
+
.filter((reason) => typeof reason === 'string' && reason.length > 0);
|
|
339
347
|
// Emit assistant event (even if content is empty, usage data is valuable)
|
|
340
348
|
if (content.length > 0 || message.tokens.input > 0 || message.tokens.output > 0) {
|
|
341
349
|
events.push({
|
|
@@ -348,6 +356,11 @@ function convertAssistantMessage(message, parts) {
|
|
|
348
356
|
content,
|
|
349
357
|
},
|
|
350
358
|
timestamp,
|
|
359
|
+
providerMetadata: {
|
|
360
|
+
...(retryAttempts.length > 0 ? { retryAttempts } : {}),
|
|
361
|
+
...(finishReasons.length > 0 ? { finishReasons } : {}),
|
|
362
|
+
...(message.error ? { providerError: message.error } : {}),
|
|
363
|
+
},
|
|
351
364
|
});
|
|
352
365
|
}
|
|
353
366
|
// Emit synthetic tool_result events for completed tool invocations
|
|
@@ -194,7 +194,7 @@ class PlanExtractor {
|
|
|
194
194
|
// Capture Write/Edit tool calls to plan files during plan mode
|
|
195
195
|
if (this._planModeActive && event.type === 'tool_use') {
|
|
196
196
|
const raw = event.raw;
|
|
197
|
-
const input = raw
|
|
197
|
+
const input = extractToolInput(raw);
|
|
198
198
|
const filePath = input?.file_path;
|
|
199
199
|
if (event.toolName === 'Write') {
|
|
200
200
|
const content = input?.content;
|
|
@@ -254,9 +254,9 @@ class PlanExtractor {
|
|
|
254
254
|
}
|
|
255
255
|
extractCodexPlan(event) {
|
|
256
256
|
const raw = event.raw;
|
|
257
|
-
|
|
257
|
+
const input = extractToolInput(raw);
|
|
258
|
+
if (!input)
|
|
258
259
|
return false;
|
|
259
|
-
const input = raw.input;
|
|
260
260
|
// Codex UpdatePlan can use either approach[] or plan[] format
|
|
261
261
|
const approach = (input.approach ?? input.plan);
|
|
262
262
|
if (!approach || !Array.isArray(approach))
|
|
@@ -305,10 +305,11 @@ class PlanExtractor {
|
|
|
305
305
|
}
|
|
306
306
|
finalizePlanMode() {
|
|
307
307
|
this._planModeActive = false;
|
|
308
|
-
// Prefer
|
|
308
|
+
// Prefer captured Write content, then the final file after Edit, then prose fallback.
|
|
309
|
+
// Edit only contains a diff, so reading the file must happen before accumulated text.
|
|
309
310
|
const markdown = this._planFileContent ||
|
|
310
|
-
(this.
|
|
311
|
-
(this.
|
|
311
|
+
(this._planFilePath && this._readFile ? this._readFile(this._planFilePath) : null) ||
|
|
312
|
+
(this._planTexts.length > 0 ? this._planTexts.join('\n') : null);
|
|
312
313
|
this._planFileContent = null;
|
|
313
314
|
this._planFilePath = null;
|
|
314
315
|
this._planTexts = [];
|
|
@@ -328,3 +329,13 @@ class PlanExtractor {
|
|
|
328
329
|
}
|
|
329
330
|
}
|
|
330
331
|
exports.PlanExtractor = PlanExtractor;
|
|
332
|
+
function extractToolInput(raw) {
|
|
333
|
+
if (!raw)
|
|
334
|
+
return null;
|
|
335
|
+
if (raw.input && typeof raw.input === 'object')
|
|
336
|
+
return raw.input;
|
|
337
|
+
const tool = raw.tool;
|
|
338
|
+
if (tool?.input && typeof tool.input === 'object')
|
|
339
|
+
return tool.input;
|
|
340
|
+
return null;
|
|
341
|
+
}
|
package/dist/paths.d.ts
CHANGED
|
@@ -30,6 +30,16 @@ export declare function encodeWorkspacePath(workspacePath: string): string;
|
|
|
30
30
|
* Resolves symlinks, then encodes for use as a filename.
|
|
31
31
|
*/
|
|
32
32
|
export declare function getProjectSlug(cwd?: string): string;
|
|
33
|
+
export interface ProjectIdentity {
|
|
34
|
+
cwd: string;
|
|
35
|
+
resolvedCwd: string;
|
|
36
|
+
canonicalSlug: string;
|
|
37
|
+
legacySlug: string;
|
|
38
|
+
candidates: string[];
|
|
39
|
+
hasLegacyMismatch: boolean;
|
|
40
|
+
}
|
|
41
|
+
/** Resolves the canonical project identity used by all new readers and writers. */
|
|
42
|
+
export declare function resolveProjectIdentity(cwd?: string): ProjectIdentity;
|
|
33
43
|
/**
|
|
34
44
|
* Derives a project slug WITHOUT resolving symlinks.
|
|
35
45
|
* Matches the VS Code extension's behavior (encodeWorkspacePath on raw path).
|