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.
- package/CHANGELOG.md +86 -0
- package/README.md +188 -27
- package/dist/aggregation/EventAggregator.d.ts +19 -0
- package/dist/aggregation/EventAggregator.js +174 -35
- package/dist/aggregation/snapshot.d.ts +37 -8
- package/dist/aggregation/snapshot.js +31 -9
- package/dist/aggregation/types.d.ts +13 -0
- package/dist/authStatus.d.ts +54 -0
- package/dist/authStatus.js +91 -0
- package/dist/browser.d.ts +16 -6
- package/dist/browser.js +24 -2
- package/dist/codex.d.ts +23 -0
- package/dist/codex.js +44 -0
- package/dist/codexProfiles.d.ts +1 -0
- package/dist/codexProfiles.js +8 -11
- package/dist/context/sessionContext.js +4 -0
- package/dist/esm/aggregation/EventAggregator.js +174 -35
- package/dist/esm/aggregation/snapshot.js +31 -9
- package/dist/esm/authStatus.js +87 -0
- package/dist/esm/browser.js +5 -2
- package/dist/esm/codex.js +18 -0
- package/dist/esm/codexProfiles.js +8 -11
- package/dist/esm/context/sessionContext.js +4 -0
- package/dist/esm/formatters/toolSummary.js +4 -1
- package/dist/esm/formatting.js +10 -1
- package/dist/esm/index.js +11 -6
- package/dist/esm/modelCatalog.js +7 -5
- package/dist/esm/modelContext.js +4 -3
- package/dist/esm/modelInfo.js +425 -47
- package/dist/esm/node.js +9 -3
- package/dist/esm/observedContextWindows.js +2 -1
- package/dist/esm/ownKey.js +26 -0
- package/dist/esm/parsers/codexParser.js +351 -54
- package/dist/esm/parsers/codexRolloutOrigin.js +107 -0
- package/dist/esm/parsers/openCodeParser.js +85 -22
- package/dist/esm/parsers/subagentScanner.js +33 -12
- package/dist/esm/parsers/subagentTraceParser.js +97 -37
- package/dist/esm/pricing.js +18 -0
- package/dist/esm/pricingCatalog.js +17 -9
- package/dist/esm/promptHistory.js +66 -4
- package/dist/esm/providerFailure.js +124 -3
- package/dist/esm/providers/claudeCode.js +10 -2
- package/dist/esm/providers/codex.js +84 -62
- package/dist/esm/providers/codexDatabase.js +3 -19
- package/dist/esm/providers/codexRollouts.js +24 -1
- package/dist/esm/providers/openCode.js +9 -17
- package/dist/esm/report/htmlReportGenerator.js +42 -5
- package/dist/esm/report/transcriptParser.js +13 -11
- package/dist/esm/schemas/providerFailure.js +3 -1
- package/dist/esm/schemas/sessionEvent.js +35 -14
- package/dist/esm/schemas/transcript.js +4 -0
- package/dist/esm/sessionPromptHistory.js +2 -2
- package/dist/esm/statusline/payload.js +9 -0
- package/dist/esm/subagentSpawn.js +163 -0
- package/dist/esm/testing/credentialGuard.js +87 -5
- package/dist/esm/toolCallOrigins.js +310 -0
- package/dist/esm/transcript.js +46 -3
- package/dist/esm/turns/assistantTurn.js +3 -2
- package/dist/esm/usage/claudeUsageDedupe.js +68 -0
- package/dist/esm/usage/usageEvents.js +146 -17
- package/dist/esm/usage/usageReports.js +39 -6
- package/dist/esm/watchers/eventBridge.js +15 -0
- package/dist/esm/watchers/factory.js +5 -3
- package/dist/esm/watchers/jsonlTail.js +442 -58
- package/dist/esm/watchers/jsonlWatcher.js +51 -4
- package/dist/esm/watchers/providerReaderWatcher.js +13 -0
- package/dist/esm/zaiQuota.js +2 -1
- package/dist/formatters/toolSummary.js +4 -1
- package/dist/formatting.d.ts +26 -1
- package/dist/formatting.js +11 -1
- package/dist/index.d.ts +22 -11
- package/dist/index.js +44 -12
- package/dist/modelCatalog.js +7 -5
- package/dist/modelContext.js +4 -3
- package/dist/modelInfo.d.ts +185 -16
- package/dist/modelInfo.js +434 -49
- package/dist/node.d.ts +16 -5
- package/dist/node.js +33 -2
- package/dist/observedContextWindows.js +2 -1
- package/dist/ownKey.d.ts +16 -0
- package/dist/ownKey.js +30 -0
- package/dist/parsers/codexParser.d.ts +118 -0
- package/dist/parsers/codexParser.js +352 -54
- package/dist/parsers/codexRolloutOrigin.d.ts +49 -0
- package/dist/parsers/codexRolloutOrigin.js +111 -0
- package/dist/parsers/openCodeParser.d.ts +38 -0
- package/dist/parsers/openCodeParser.js +88 -22
- package/dist/parsers/subagentScanner.d.ts +19 -6
- package/dist/parsers/subagentScanner.js +33 -12
- package/dist/parsers/subagentTraceParser.d.ts +25 -5
- package/dist/parsers/subagentTraceParser.js +97 -37
- package/dist/pricing.d.ts +22 -0
- package/dist/pricing.js +50 -0
- package/dist/pricingCatalog.d.ts +10 -0
- package/dist/pricingCatalog.js +16 -8
- package/dist/promptHistory.d.ts +65 -4
- package/dist/promptHistory.js +68 -5
- package/dist/providerFailure.d.ts +44 -0
- package/dist/providerFailure.js +126 -4
- package/dist/providers/claudeCode.js +9 -1
- package/dist/providers/codex.d.ts +3 -22
- package/dist/providers/codex.js +85 -64
- package/dist/providers/codexDatabase.d.ts +3 -2
- package/dist/providers/codexDatabase.js +4 -22
- package/dist/providers/codexRollouts.d.ts +22 -0
- package/dist/providers/codexRollouts.js +24 -0
- package/dist/providers/openCode.js +8 -16
- package/dist/providers/types.d.ts +14 -0
- package/dist/report/htmlReportGenerator.js +42 -5
- package/dist/report/transcriptParser.d.ts +10 -1
- package/dist/report/transcriptParser.js +13 -11
- package/dist/schemas/index.d.ts +1 -0
- package/dist/schemas/providerFailure.d.ts +39 -0
- package/dist/schemas/providerFailure.js +2 -0
- package/dist/schemas/sessionEvent.d.ts +27 -10
- package/dist/schemas/sessionEvent.js +35 -14
- package/dist/schemas/transcript.d.ts +2 -0
- package/dist/schemas/transcript.js +4 -0
- package/dist/sessionPromptHistory.d.ts +7 -1
- package/dist/sessionPromptHistory.js +1 -1
- package/dist/statusline/payload.d.ts +10 -0
- package/dist/statusline/payload.js +14 -0
- package/dist/subagentSpawn.d.ts +80 -0
- package/dist/subagentSpawn.js +174 -0
- package/dist/testing/credentialGuard.d.ts +14 -0
- package/dist/testing/credentialGuard.js +87 -5
- package/dist/toolCallOrigins.d.ts +70 -0
- package/dist/toolCallOrigins.js +346 -0
- package/dist/transcript.d.ts +12 -0
- package/dist/transcript.js +46 -3
- package/dist/turns/assistantTurn.d.ts +1 -0
- package/dist/turns/assistantTurn.js +3 -2
- package/dist/types/opencode.d.ts +2 -0
- package/dist/usage/claudeUsageDedupe.d.ts +31 -0
- package/dist/usage/claudeUsageDedupe.js +68 -0
- package/dist/usage/usageEvents.d.ts +54 -6
- package/dist/usage/usageEvents.js +146 -17
- package/dist/usage/usageReports.d.ts +35 -4
- package/dist/usage/usageReports.js +39 -6
- package/dist/watchers/eventBridge.js +15 -0
- package/dist/watchers/factory.d.ts +6 -0
- package/dist/watchers/factory.js +5 -3
- package/dist/watchers/jsonlTail.d.ts +124 -4
- package/dist/watchers/jsonlTail.js +446 -59
- package/dist/watchers/jsonlWatcher.d.ts +18 -1
- package/dist/watchers/jsonlWatcher.js +50 -3
- package/dist/watchers/providerReaderWatcher.d.ts +7 -0
- package/dist/watchers/providerReaderWatcher.js +13 -0
- package/dist/watchers/types.d.ts +12 -0
- package/dist/zaiQuota.js +2 -1
- package/package.json +41 -1
|
@@ -9,6 +9,7 @@ const jsonlTail_1 = require("./jsonlTail");
|
|
|
9
9
|
const codexParser_1 = require("../parsers/codexParser");
|
|
10
10
|
const toolSummary_1 = require("../formatters/toolSummary");
|
|
11
11
|
const claudeUsageDedupe_1 = require("../usage/claudeUsageDedupe");
|
|
12
|
+
const subagentSpawn_1 = require("../subagentSpawn");
|
|
12
13
|
// ── Normalizers ──
|
|
13
14
|
/**
|
|
14
15
|
* Split lines of one Claude response repeat its usage; run the raw usage
|
|
@@ -24,7 +25,7 @@ function dedupedClaudeUsage(raw, deduper) {
|
|
|
24
25
|
}));
|
|
25
26
|
return { usage: event.message?.usage, usageKind: event.message?.usageKind };
|
|
26
27
|
}
|
|
27
|
-
function normalizeClaudeCodeEvent(raw, deduper) {
|
|
28
|
+
function normalizeClaudeCodeEvent(raw, deduper, includeTaskNotifications) {
|
|
28
29
|
const events = [];
|
|
29
30
|
const ts = raw.timestamp || new Date().toISOString();
|
|
30
31
|
const permissionMode = raw.permissionMode;
|
|
@@ -136,6 +137,19 @@ function normalizeClaudeCodeEvent(raw, deduper) {
|
|
|
136
137
|
raw,
|
|
137
138
|
});
|
|
138
139
|
}
|
|
140
|
+
else if (includeTaskNotifications) {
|
|
141
|
+
// A task notification that landed mid-turn is only an attachment line.
|
|
142
|
+
const notification = (0, subagentSpawn_1.parseTaskNotification)((0, subagentSpawn_1.taskNotificationPromptFromAttachment)(raw));
|
|
143
|
+
if (notification) {
|
|
144
|
+
events.push({
|
|
145
|
+
providerId: 'claude-code',
|
|
146
|
+
type: 'system',
|
|
147
|
+
timestamp: ts,
|
|
148
|
+
summary: notification.summary ?? `Background task ${notification.status ?? 'finished'}`,
|
|
149
|
+
raw,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
}
|
|
139
153
|
}
|
|
140
154
|
// Propagate permission mode to all generated events
|
|
141
155
|
if (permissionMode) {
|
|
@@ -207,16 +221,18 @@ class JsonlSessionWatcher {
|
|
|
207
221
|
providerId;
|
|
208
222
|
sessionPath;
|
|
209
223
|
callbacks;
|
|
224
|
+
options;
|
|
210
225
|
tail;
|
|
211
226
|
startOffset;
|
|
212
227
|
codexInPlanMode = false;
|
|
213
228
|
claudeUsageDeduper = new claudeUsageDedupe_1.ClaudeUsageDeduper();
|
|
214
229
|
/** Last Codex cumulative usage seen; repeated `token_count` events carry the same value. */
|
|
215
230
|
codexPrevTotal;
|
|
216
|
-
constructor(providerId, sessionPath, callbacks) {
|
|
231
|
+
constructor(providerId, sessionPath, callbacks, options = {}) {
|
|
217
232
|
this.providerId = providerId;
|
|
218
233
|
this.sessionPath = sessionPath;
|
|
219
234
|
this.callbacks = callbacks;
|
|
235
|
+
this.options = options;
|
|
220
236
|
}
|
|
221
237
|
get isActive() {
|
|
222
238
|
return this.tail?.isActive ?? false;
|
|
@@ -230,6 +246,37 @@ class JsonlSessionWatcher {
|
|
|
230
246
|
getPosition() {
|
|
231
247
|
return this.tail?.getOffset() ?? this.startOffset ?? 0;
|
|
232
248
|
}
|
|
249
|
+
/**
|
|
250
|
+
* Parse state for {@link getPosition}: for Claude Code, the usage deduper's
|
|
251
|
+
* recent message ids (a `ClaudeUsageDedupeState`); for Codex, the previous
|
|
252
|
+
* cumulative token total and plan mode.
|
|
253
|
+
*/
|
|
254
|
+
getResumeState() {
|
|
255
|
+
if (this.providerId === 'codex') {
|
|
256
|
+
return {
|
|
257
|
+
version: 1,
|
|
258
|
+
prevTotalUsage: this.codexPrevTotal ? { ...this.codexPrevTotal } : null,
|
|
259
|
+
inPlanMode: this.codexInPlanMode,
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
return this.claudeUsageDeduper.exportState();
|
|
263
|
+
}
|
|
264
|
+
/** Restores state from {@link getResumeState} after `seekTo()` and before `start()`. */
|
|
265
|
+
restoreResumeState(state) {
|
|
266
|
+
if (this.providerId !== 'codex')
|
|
267
|
+
return this.claudeUsageDeduper.importState(state);
|
|
268
|
+
if (!state || typeof state !== 'object')
|
|
269
|
+
return false;
|
|
270
|
+
const { version, prevTotalUsage, inPlanMode } = state;
|
|
271
|
+
if (version !== 1 || typeof inPlanMode !== 'boolean')
|
|
272
|
+
return false;
|
|
273
|
+
const total = (0, codexParser_1.codexTokenUsageFrom)(prevTotalUsage);
|
|
274
|
+
if (total === undefined)
|
|
275
|
+
return false;
|
|
276
|
+
this.codexPrevTotal = total ?? undefined;
|
|
277
|
+
this.codexInPlanMode = inPlanMode;
|
|
278
|
+
return true;
|
|
279
|
+
}
|
|
233
280
|
start(replay) {
|
|
234
281
|
if (this.isActive)
|
|
235
282
|
return;
|
|
@@ -261,7 +308,7 @@ class JsonlSessionWatcher {
|
|
|
261
308
|
// JsonlParser parses any JSON object. Cast to Record for codex normalizer.
|
|
262
309
|
const followEvents = this.providerId === 'codex'
|
|
263
310
|
? this.normalizeCodexEvent(event)
|
|
264
|
-
: normalizeClaudeCodeEvent(event, this.claudeUsageDeduper);
|
|
311
|
+
: normalizeClaudeCodeEvent(event, this.claudeUsageDeduper, this.options.includeTaskNotifications === true);
|
|
265
312
|
for (const fe of followEvents) {
|
|
266
313
|
this.callbacks.onEvent(fe);
|
|
267
314
|
}
|
|
@@ -19,6 +19,13 @@ export declare class ProviderReaderSessionWatcher implements SessionWatcher {
|
|
|
19
19
|
get isActive(): boolean;
|
|
20
20
|
seekTo(position: number): void;
|
|
21
21
|
getPosition(): number;
|
|
22
|
+
/** The reader's resume state, if it keeps any. */
|
|
23
|
+
getResumeState(): unknown;
|
|
24
|
+
/**
|
|
25
|
+
* Restores the reader's resume state after `seekTo()`. A reader that keeps
|
|
26
|
+
* none accepts only `undefined`.
|
|
27
|
+
*/
|
|
28
|
+
restoreResumeState(state: unknown): boolean;
|
|
22
29
|
start(replay: boolean): void;
|
|
23
30
|
stop(): void;
|
|
24
31
|
private seekToEnd;
|
|
@@ -68,6 +68,19 @@ class ProviderReaderSessionWatcher {
|
|
|
68
68
|
getPosition() {
|
|
69
69
|
return this.reader.getPosition();
|
|
70
70
|
}
|
|
71
|
+
/** The reader's resume state, if it keeps any. */
|
|
72
|
+
getResumeState() {
|
|
73
|
+
return this.reader.getResumeState?.();
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Restores the reader's resume state after `seekTo()`. A reader that keeps
|
|
77
|
+
* none accepts only `undefined`.
|
|
78
|
+
*/
|
|
79
|
+
restoreResumeState(state) {
|
|
80
|
+
if (!this.reader.restoreResumeState)
|
|
81
|
+
return state === undefined;
|
|
82
|
+
return this.reader.restoreResumeState(state);
|
|
83
|
+
}
|
|
71
84
|
start(replay) {
|
|
72
85
|
if (this._isActive)
|
|
73
86
|
return;
|
package/dist/watchers/types.d.ts
CHANGED
|
@@ -70,6 +70,18 @@ export interface SessionWatcher {
|
|
|
70
70
|
seekTo?(position: number): void;
|
|
71
71
|
/** Get current reader position (byte offset or timestamp). */
|
|
72
72
|
getPosition?(): number;
|
|
73
|
+
/**
|
|
74
|
+
* Parse state to persist with `getPosition()` so a later watcher can
|
|
75
|
+
* resume there without recounting (see `SessionReader.getResumeState`).
|
|
76
|
+
* `undefined` when the watcher keeps none.
|
|
77
|
+
*/
|
|
78
|
+
getResumeState?(): unknown;
|
|
79
|
+
/**
|
|
80
|
+
* Restores state from `getResumeState()` right after `seekTo()` and before
|
|
81
|
+
* `start()`. Returns false, changing nothing, when `state` is missing or
|
|
82
|
+
* not valid; replay from the start instead.
|
|
83
|
+
*/
|
|
84
|
+
restoreResumeState?(state: unknown): boolean;
|
|
73
85
|
}
|
|
74
86
|
export interface CreateWatcherOptions {
|
|
75
87
|
providerId: ProviderId;
|
package/dist/zaiQuota.js
CHANGED
|
@@ -10,6 +10,7 @@ exports.parseZaiQuotaError = parseZaiQuotaError;
|
|
|
10
10
|
exports.extractNextFlushTime = extractNextFlushTime;
|
|
11
11
|
exports.makeUnavailableZaiQuotaState = makeUnavailableZaiQuotaState;
|
|
12
12
|
exports.rowsToZaiTurnsAndErrors = rowsToZaiTurnsAndErrors;
|
|
13
|
+
const ownKey_1 = require("./ownKey");
|
|
13
14
|
// ── Tier budgets ──
|
|
14
15
|
/**
|
|
15
16
|
* Published z.ai coding-plan prompt budgets.
|
|
@@ -227,7 +228,7 @@ function parseZaiQuotaError(error) {
|
|
|
227
228
|
if (!error)
|
|
228
229
|
return null;
|
|
229
230
|
const code = String(error.code ?? '');
|
|
230
|
-
const kind = ZAI_ERROR_CODES
|
|
231
|
+
const kind = (0, ownKey_1.ownValue)(ZAI_ERROR_CODES, code);
|
|
231
232
|
if (!kind)
|
|
232
233
|
return null;
|
|
233
234
|
const message = error.message ?? '';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sidekick-shared",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.29.1",
|
|
4
4
|
"description": "Shared data access layer for Sidekick — readers, types, providers, credentials, quota",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"claude-code",
|
|
@@ -103,6 +103,34 @@
|
|
|
103
103
|
"require": "./dist/testing/index.js",
|
|
104
104
|
"default": "./dist/testing/index.js"
|
|
105
105
|
},
|
|
106
|
+
"./pricing": {
|
|
107
|
+
"types": "./dist/pricing.d.ts",
|
|
108
|
+
"module": "./dist/esm/pricing.js",
|
|
109
|
+
"import": "./dist/pricing.js",
|
|
110
|
+
"require": "./dist/pricing.js",
|
|
111
|
+
"default": "./dist/pricing.js"
|
|
112
|
+
},
|
|
113
|
+
"./codex": {
|
|
114
|
+
"types": "./dist/codex.d.ts",
|
|
115
|
+
"module": "./dist/esm/codex.js",
|
|
116
|
+
"import": "./dist/codex.js",
|
|
117
|
+
"require": "./dist/codex.js",
|
|
118
|
+
"default": "./dist/codex.js"
|
|
119
|
+
},
|
|
120
|
+
"./providerFailure": {
|
|
121
|
+
"types": "./dist/providerFailure.d.ts",
|
|
122
|
+
"module": "./dist/esm/providerFailure.js",
|
|
123
|
+
"import": "./dist/providerFailure.js",
|
|
124
|
+
"require": "./dist/providerFailure.js",
|
|
125
|
+
"default": "./dist/providerFailure.js"
|
|
126
|
+
},
|
|
127
|
+
"./statusline/payload": {
|
|
128
|
+
"types": "./dist/statusline/payload.d.ts",
|
|
129
|
+
"module": "./dist/esm/statusline/payload.js",
|
|
130
|
+
"import": "./dist/statusline/payload.js",
|
|
131
|
+
"require": "./dist/statusline/payload.js",
|
|
132
|
+
"default": "./dist/statusline/payload.js"
|
|
133
|
+
},
|
|
106
134
|
"./dist/esm/*": null,
|
|
107
135
|
"./dist/*": {
|
|
108
136
|
"types": "./dist/*.d.ts",
|
|
@@ -140,6 +168,18 @@
|
|
|
140
168
|
],
|
|
141
169
|
"testing": [
|
|
142
170
|
"dist/testing/index.d.ts"
|
|
171
|
+
],
|
|
172
|
+
"pricing": [
|
|
173
|
+
"dist/pricing.d.ts"
|
|
174
|
+
],
|
|
175
|
+
"codex": [
|
|
176
|
+
"dist/codex.d.ts"
|
|
177
|
+
],
|
|
178
|
+
"providerFailure": [
|
|
179
|
+
"dist/providerFailure.d.ts"
|
|
180
|
+
],
|
|
181
|
+
"statusline/payload": [
|
|
182
|
+
"dist/statusline/payload.d.ts"
|
|
143
183
|
]
|
|
144
184
|
}
|
|
145
185
|
},
|