sidekick-shared 0.24.4 → 0.25.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/CHANGELOG.md +59 -0
- package/README.md +200 -52
- package/dist/accountChangeSignal.d.ts +3 -0
- package/dist/accountChangeSignal.js +19 -0
- package/dist/accountChanges.d.ts +21 -0
- package/dist/accountChanges.js +151 -0
- package/dist/accountManager.d.ts +13 -0
- package/dist/accountManager.js +60 -32
- package/dist/accountRegistry.d.ts +3 -1
- package/dist/accountRegistry.js +64 -41
- package/dist/accounts.js +40 -19
- package/dist/autoSwitch.d.ts +2 -1
- package/dist/autoSwitch.js +32 -7
- package/dist/browser.d.ts +10 -3
- package/dist/browser.js +17 -1
- package/dist/codexProfiles.d.ts +14 -0
- package/dist/codexProfiles.js +268 -116
- package/dist/codexQuotaWatcher.d.ts +6 -0
- package/dist/codexQuotaWatcher.js +101 -47
- package/dist/context/sessionContext.js +2 -4
- package/dist/ensureDefaultAccounts.js +4 -4
- package/dist/index.d.ts +32 -15
- package/dist/index.js +54 -9
- package/dist/modelAliases.d.ts +13 -0
- package/dist/modelAliases.js +58 -0
- package/dist/modelCatalog.d.ts +32 -0
- package/dist/modelCatalog.js +145 -0
- package/dist/modelContext.d.ts +36 -3
- package/dist/modelContext.js +109 -34
- package/dist/modelInfo.d.ts +30 -1
- package/dist/modelInfo.js +116 -26
- package/dist/multiProviderQuotaService.d.ts +8 -0
- package/dist/multiProviderQuotaService.js +64 -3
- package/dist/node.d.ts +8 -2
- package/dist/node.js +11 -1
- package/dist/observedContextWindows.d.ts +13 -0
- package/dist/observedContextWindows.js +13 -0
- package/dist/observedSessionCollector.d.ts +75 -4
- package/dist/observedSessionCollector.js +452 -42
- package/dist/parsers/codexHistory.d.ts +32 -0
- package/dist/parsers/codexHistory.js +125 -0
- package/dist/parsers/mcpToolName.d.ts +26 -0
- package/dist/parsers/mcpToolName.js +31 -0
- package/dist/parsers/sessionActivityDetector.d.ts +6 -0
- package/dist/parsers/sessionActivityDetector.js +17 -0
- package/dist/parsers/sessionPathResolver.d.ts +11 -4
- package/dist/parsers/sessionPathResolver.js +11 -4
- package/dist/paths.d.ts +7 -3
- package/dist/paths.js +7 -3
- package/dist/providerIds.d.ts +11 -0
- package/dist/providerIds.js +9 -0
- package/dist/providerQuota.d.ts +3 -1
- package/dist/providerQuota.js +3 -0
- package/dist/providers/claudeCode.d.ts +11 -1
- package/dist/providers/claudeCode.js +222 -39
- package/dist/providers/codex.d.ts +39 -1
- package/dist/providers/codex.js +326 -39
- package/dist/providers/codexDatabase.d.ts +9 -0
- package/dist/providers/codexDatabase.js +107 -2
- package/dist/providers/diagnostics.d.ts +13 -0
- package/dist/providers/diagnostics.js +88 -0
- package/dist/providers/factory.d.ts +14 -0
- package/dist/providers/factory.js +57 -0
- package/dist/providers/openCode.d.ts +20 -1
- package/dist/providers/openCode.js +361 -11
- package/dist/providers/openCodeDatabase.d.ts +10 -0
- package/dist/providers/openCodeDatabase.js +69 -0
- package/dist/providers/types.d.ts +57 -2
- package/dist/providers/types.js +4 -0
- package/dist/quota.d.ts +4 -1
- package/dist/quota.js +3 -7
- package/dist/quotaHistory.d.ts +3 -2
- package/dist/quotaHistory.js +2 -2
- package/dist/quotaPoller.d.ts +13 -1
- package/dist/quotaPoller.js +65 -3
- package/dist/quotaSnapshots.js +8 -77
- package/dist/schemas/accountManager.d.ts +2 -2
- package/dist/schemas/accountManager.js +2 -4
- package/dist/schemas/accountStatus.d.ts +3 -0
- package/dist/schemas/accountStatus.js +1 -0
- package/dist/schemas/index.d.ts +1 -0
- package/dist/schemas/index.js +7 -2
- package/dist/schemas/observedSessionV1.d.ts +27 -26
- package/dist/schemas/observedSessionV1.js +6 -4
- package/dist/schemas/quota.d.ts +2 -2
- package/dist/schemas/quota.js +3 -6
- package/dist/schemas/quotaHistory.d.ts +2 -2
- package/dist/schemas/tokenEstimation.d.ts +1 -1
- package/dist/sessionMonitor.d.ts +15 -0
- package/dist/sessionMonitor.js +142 -0
- package/dist/sessionPreviews.d.ts +85 -0
- package/dist/sessionPreviews.js +549 -0
- package/dist/sessionTranscripts.js +10 -4
- package/dist/types/observedSessionV1.d.ts +6 -2
- package/dist/types/observedSessionV1.js +14 -8
- package/dist/writers/atomic.d.ts +20 -0
- package/dist/writers/atomic.js +190 -19
- package/package.json +22 -1
package/dist/node.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* for browser bundles — use `sidekick-shared/browser` there.
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.fileFingerprint = exports.observedSessionSourceFromProvider = exports.ObservedSessionCollector = exports.readSessionTranscript = exports.listRecentSessions = exports.getObservedContextWindowPath = exports.recordObservedContextWindow = exports.loadObservedContextWindows = exports.LITELLM_CATALOG_URL = exports.normalizeLiteLlmContextWindows = exports.normalizeLiteLlmCatalog = exports.hydratePricingCatalog = void 0;
|
|
10
|
+
exports.fileFingerprintParts = exports.fileFingerprint = exports.observedSessionSourceFromProvider = exports.ObservedSessionCollector = exports.readSessionPreviewAsync = exports.readSessionPreview = exports.listSessionPreviewsAsync = exports.listSessionPreviews = exports.readCodexHistory = exports.findCodexRolloutFile = exports.readSessionTranscript = exports.listRecentSessions = exports.getObservedContextWindowPath = exports.recordObservedContextWindow = exports.loadObservedContextWindows = exports.LITELLM_CATALOG_URL = exports.normalizeLiteLlmContextWindows = exports.normalizeLiteLlmCatalog = exports.hydratePricingCatalog = void 0;
|
|
11
11
|
var pricingCatalog_1 = require("./pricingCatalog");
|
|
12
12
|
Object.defineProperty(exports, "hydratePricingCatalog", { enumerable: true, get: function () { return pricingCatalog_1.hydratePricingCatalog; } });
|
|
13
13
|
Object.defineProperty(exports, "normalizeLiteLlmCatalog", { enumerable: true, get: function () { return pricingCatalog_1.normalizeLiteLlmCatalog; } });
|
|
@@ -20,7 +20,17 @@ Object.defineProperty(exports, "getObservedContextWindowPath", { enumerable: tru
|
|
|
20
20
|
var sessionTranscripts_1 = require("./sessionTranscripts");
|
|
21
21
|
Object.defineProperty(exports, "listRecentSessions", { enumerable: true, get: function () { return sessionTranscripts_1.listRecentSessions; } });
|
|
22
22
|
Object.defineProperty(exports, "readSessionTranscript", { enumerable: true, get: function () { return sessionTranscripts_1.readSessionTranscript; } });
|
|
23
|
+
var codex_1 = require("./providers/codex");
|
|
24
|
+
Object.defineProperty(exports, "findCodexRolloutFile", { enumerable: true, get: function () { return codex_1.findCodexRolloutFile; } });
|
|
25
|
+
var codexHistory_1 = require("./parsers/codexHistory");
|
|
26
|
+
Object.defineProperty(exports, "readCodexHistory", { enumerable: true, get: function () { return codexHistory_1.readCodexHistory; } });
|
|
27
|
+
var sessionPreviews_1 = require("./sessionPreviews");
|
|
28
|
+
Object.defineProperty(exports, "listSessionPreviews", { enumerable: true, get: function () { return sessionPreviews_1.listSessionPreviews; } });
|
|
29
|
+
Object.defineProperty(exports, "listSessionPreviewsAsync", { enumerable: true, get: function () { return sessionPreviews_1.listSessionPreviewsAsync; } });
|
|
30
|
+
Object.defineProperty(exports, "readSessionPreview", { enumerable: true, get: function () { return sessionPreviews_1.readSessionPreview; } });
|
|
31
|
+
Object.defineProperty(exports, "readSessionPreviewAsync", { enumerable: true, get: function () { return sessionPreviews_1.readSessionPreviewAsync; } });
|
|
23
32
|
var observedSessionCollector_1 = require("./observedSessionCollector");
|
|
24
33
|
Object.defineProperty(exports, "ObservedSessionCollector", { enumerable: true, get: function () { return observedSessionCollector_1.ObservedSessionCollector; } });
|
|
25
34
|
Object.defineProperty(exports, "observedSessionSourceFromProvider", { enumerable: true, get: function () { return observedSessionCollector_1.observedSessionSourceFromProvider; } });
|
|
26
35
|
Object.defineProperty(exports, "fileFingerprint", { enumerable: true, get: function () { return observedSessionCollector_1.fileFingerprint; } });
|
|
36
|
+
Object.defineProperty(exports, "fileFingerprintParts", { enumerable: true, get: function () { return observedSessionCollector_1.fileFingerprintParts; } });
|
|
@@ -14,6 +14,19 @@
|
|
|
14
14
|
* Precedence, most-trusted first: runtime → observed (here) → LiteLLM catalog →
|
|
15
15
|
* static table. See `modelContext.ts`.
|
|
16
16
|
*
|
|
17
|
+
* ## Where the store lives — two seams, one story
|
|
18
|
+
*
|
|
19
|
+
* Reader ({@link loadObservedContextWindows}) and writer
|
|
20
|
+
* ({@link recordObservedContextWindow}) resolve the store path identically:
|
|
21
|
+
* explicit `cacheDir` option → `setConfigDir()` / `SIDEKICK_CONFIG_DIR` (via
|
|
22
|
+
* `getConfigDir()`) → platform default. The global config-dir override is the
|
|
23
|
+
* deployment-level seam external consumers use to relocate every Sidekick
|
|
24
|
+
* store at once; the per-call `cacheDir` is the isolation seam for tests and
|
|
25
|
+
* multi-tenant hosts. Providers deliberately do NOT thread `cacheDir` —
|
|
26
|
+
* `CodexProvider` records observations with default options, which follow the
|
|
27
|
+
* global override, so a default-options load always sees what a
|
|
28
|
+
* default-options record wrote.
|
|
29
|
+
*
|
|
17
30
|
* @module observedContextWindows
|
|
18
31
|
*/
|
|
19
32
|
export interface ObservedContextWindowOptions {
|
|
@@ -15,6 +15,19 @@
|
|
|
15
15
|
* Precedence, most-trusted first: runtime → observed (here) → LiteLLM catalog →
|
|
16
16
|
* static table. See `modelContext.ts`.
|
|
17
17
|
*
|
|
18
|
+
* ## Where the store lives — two seams, one story
|
|
19
|
+
*
|
|
20
|
+
* Reader ({@link loadObservedContextWindows}) and writer
|
|
21
|
+
* ({@link recordObservedContextWindow}) resolve the store path identically:
|
|
22
|
+
* explicit `cacheDir` option → `setConfigDir()` / `SIDEKICK_CONFIG_DIR` (via
|
|
23
|
+
* `getConfigDir()`) → platform default. The global config-dir override is the
|
|
24
|
+
* deployment-level seam external consumers use to relocate every Sidekick
|
|
25
|
+
* store at once; the per-call `cacheDir` is the isolation seam for tests and
|
|
26
|
+
* multi-tenant hosts. Providers deliberately do NOT thread `cacheDir` —
|
|
27
|
+
* `CodexProvider` records observations with default options, which follow the
|
|
28
|
+
* global override, so a default-options load always sees what a
|
|
29
|
+
* default-options record wrote.
|
|
30
|
+
*
|
|
18
31
|
* @module observedContextWindows
|
|
19
32
|
*/
|
|
20
33
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
@@ -1,24 +1,43 @@
|
|
|
1
|
-
import type { ObservedAgentSessionV1, ProviderCapabilitiesV1 } from './types/observedSessionV1';
|
|
1
|
+
import type { ObservedAgentSessionV1, ProviderCapabilitiesV1, ProviderSessionAdapterV1Options } from './types/observedSessionV1';
|
|
2
2
|
import type { SessionProviderBase } from './providers/types';
|
|
3
|
+
export interface ObservedSessionFingerprintParts {
|
|
4
|
+
sizeBytes: number;
|
|
5
|
+
mtimeMs: number;
|
|
6
|
+
}
|
|
3
7
|
export interface ObservedSessionReference {
|
|
4
8
|
sessionId: string;
|
|
5
9
|
/** Opaque source locator used only by the source implementation. Never emitted in diagnostics. */
|
|
6
10
|
sourceKey?: string;
|
|
11
|
+
/** Backward-compatible opaque fingerprint. */
|
|
7
12
|
fingerprintHint?: string;
|
|
13
|
+
/** Structured fingerprint for consumers that previously parsed fingerprintHint. */
|
|
14
|
+
fingerprintParts?: ObservedSessionFingerprintParts;
|
|
15
|
+
}
|
|
16
|
+
export interface ObservedSessionSourceSubscribeOptions {
|
|
17
|
+
pollIntervalMs?: number;
|
|
8
18
|
}
|
|
9
19
|
export interface ObservedSessionCollectionSource<T = unknown> {
|
|
10
20
|
providerId: string;
|
|
11
21
|
discover(): Promise<ObservedSessionReference[]> | ObservedSessionReference[];
|
|
12
22
|
read(reference: ObservedSessionReference): Promise<T> | T;
|
|
23
|
+
refreshCached?(reference: ObservedSessionReference, value: T, observedAt: string): Promise<T> | T;
|
|
24
|
+
/** Low-level invalidation signal; the collector performs fingerprint reconciliation. */
|
|
25
|
+
subscribe?(listener: () => void, options?: ObservedSessionSourceSubscribeOptions): {
|
|
26
|
+
dispose(): void;
|
|
27
|
+
};
|
|
13
28
|
dispose?(): void;
|
|
14
29
|
}
|
|
15
30
|
export interface ProviderObservedSessionCollectionSource extends ObservedSessionCollectionSource<ObservedAgentSessionV1> {
|
|
16
31
|
capabilities: ProviderCapabilitiesV1;
|
|
17
32
|
}
|
|
18
33
|
export type ObservedSessionDiagnosticKind = 'provider-discovery-failed' | 'session-read-failed' | 'provider-recovered' | 'session-recovered';
|
|
34
|
+
export type ObservedSessionDiagnosticSeverity = 'info' | 'warning' | 'error';
|
|
35
|
+
export type ObservedSessionDiagnosticPhase = 'discover' | 'read' | 'recover';
|
|
19
36
|
/** Content-safe diagnostics: identifiers and retry metadata only. */
|
|
20
37
|
export interface ObservedSessionDiagnostic {
|
|
21
38
|
kind: ObservedSessionDiagnosticKind;
|
|
39
|
+
severity: ObservedSessionDiagnosticSeverity;
|
|
40
|
+
phase: ObservedSessionDiagnosticPhase;
|
|
22
41
|
providerId: string;
|
|
23
42
|
sessionId?: string;
|
|
24
43
|
attempt?: number;
|
|
@@ -28,6 +47,13 @@ export interface ObservedSessionCollection<T = unknown> {
|
|
|
28
47
|
providerId: string;
|
|
29
48
|
sessionId: string;
|
|
30
49
|
value: T;
|
|
50
|
+
fingerprint: string | null;
|
|
51
|
+
fingerprintParts: ObservedSessionFingerprintParts | null;
|
|
52
|
+
cacheHit: boolean;
|
|
53
|
+
/** Time this observation was returned. */
|
|
54
|
+
observedAt: string;
|
|
55
|
+
/** Time content was last parsed; unchanged on a cache hit. */
|
|
56
|
+
contentObservedAt: string;
|
|
31
57
|
}
|
|
32
58
|
export interface ObservedSessionCollectorOptions<T = unknown> {
|
|
33
59
|
sources: ObservedSessionCollectionSource<T>[];
|
|
@@ -37,26 +63,69 @@ export interface ObservedSessionCollectorOptions<T = unknown> {
|
|
|
37
63
|
now(): number;
|
|
38
64
|
};
|
|
39
65
|
fingerprint?: (source: ObservedSessionCollectionSource<T>, reference: ObservedSessionReference) => Promise<string | null> | string | null;
|
|
66
|
+
maxConcurrentReads?: number;
|
|
67
|
+
yieldBetweenReads?: () => Promise<void> | void;
|
|
40
68
|
onObservation?: (observation: ObservedSessionCollection<T>) => void;
|
|
41
69
|
onDiagnostic?: (diagnostic: ObservedSessionDiagnostic) => void;
|
|
42
70
|
}
|
|
71
|
+
export type ObservedSessionChangeType = 'added' | 'changed' | 'removed';
|
|
72
|
+
export interface ObservedSessionChange {
|
|
73
|
+
type: ObservedSessionChangeType;
|
|
74
|
+
reference: ObservedSessionReference;
|
|
75
|
+
previousFingerprint: string | null;
|
|
76
|
+
previousFingerprintParts: ObservedSessionFingerprintParts | null;
|
|
77
|
+
fingerprint: string | null;
|
|
78
|
+
fingerprintParts: ObservedSessionFingerprintParts | null;
|
|
79
|
+
}
|
|
80
|
+
export interface ObservedSessionChangeBatch {
|
|
81
|
+
providerId: string;
|
|
82
|
+
changes: ObservedSessionChange[];
|
|
83
|
+
observedAt: string;
|
|
84
|
+
}
|
|
85
|
+
export interface KnownObservedSessionFingerprint {
|
|
86
|
+
providerId: string;
|
|
87
|
+
sessionId: string;
|
|
88
|
+
fingerprint: string;
|
|
89
|
+
fingerprintParts?: ObservedSessionFingerprintParts;
|
|
90
|
+
}
|
|
91
|
+
export interface ObservedSessionSubscribeOptions {
|
|
92
|
+
debounceMs?: number;
|
|
93
|
+
pollIntervalMs?: number;
|
|
94
|
+
knownFingerprints?: readonly KnownObservedSessionFingerprint[];
|
|
95
|
+
}
|
|
43
96
|
/**
|
|
44
|
-
*
|
|
45
|
-
*
|
|
97
|
+
* Fail-soft observed-session collection with fingerprint-keyed parse caching,
|
|
98
|
+
* cooperative reads, and optional provider-level subscriptions.
|
|
46
99
|
*/
|
|
47
100
|
export declare class ObservedSessionCollector<T = unknown> {
|
|
48
101
|
private readonly options;
|
|
49
102
|
private readonly failures;
|
|
103
|
+
private readonly cache;
|
|
104
|
+
private readonly subscriptions;
|
|
50
105
|
private readonly initialBackoffMs;
|
|
51
106
|
private readonly maxBackoffMs;
|
|
52
107
|
private readonly clock;
|
|
108
|
+
private readonly maxConcurrentReads;
|
|
109
|
+
private readonly yieldBetweenReads;
|
|
53
110
|
constructor(options: ObservedSessionCollectorOptions<T>);
|
|
54
111
|
collect(): Promise<ObservedSessionCollection<T>[]>;
|
|
112
|
+
/**
|
|
113
|
+
* Subscribe to debounced provider changes. The listener receives fingerprints
|
|
114
|
+
* only; call collect() to consume changed sessions through the parse cache.
|
|
115
|
+
*/
|
|
116
|
+
subscribe(listener: (batch: ObservedSessionChangeBatch) => void, options?: ObservedSessionSubscribeOptions): {
|
|
117
|
+
dispose(): void;
|
|
118
|
+
};
|
|
55
119
|
reset(): void;
|
|
56
120
|
dispose(): void;
|
|
57
121
|
private collectSource;
|
|
58
122
|
private collectSession;
|
|
123
|
+
private makeObservation;
|
|
124
|
+
private emitObservation;
|
|
125
|
+
private reconcileSource;
|
|
59
126
|
private fingerprint;
|
|
127
|
+
private evictMissing;
|
|
128
|
+
private mapWithConcurrency;
|
|
60
129
|
private fail;
|
|
61
130
|
private recover;
|
|
62
131
|
private emitDiagnostic;
|
|
@@ -66,6 +135,8 @@ export declare class ObservedSessionCollector<T = unknown> {
|
|
|
66
135
|
* Adapt a provider using path-only discovery and independent adapter reads, so
|
|
67
136
|
* one malformed session cannot reject discovery of its healthy siblings.
|
|
68
137
|
*/
|
|
69
|
-
export declare function observedSessionSourceFromProvider(provider: SessionProviderBase, cwd: string): ProviderObservedSessionCollectionSource;
|
|
138
|
+
export declare function observedSessionSourceFromProvider(provider: SessionProviderBase, cwd: string, options?: ProviderSessionAdapterV1Options): ProviderObservedSessionCollectionSource;
|
|
139
|
+
/** Structured size/mtime fingerprint; returns null for inaccessible or synthetic paths. */
|
|
140
|
+
export declare function fileFingerprintParts(sourcePath: string): ObservedSessionFingerprintParts | null;
|
|
70
141
|
/** Size/mtime fingerprint suitable for retry bypass; returns null for synthetic DB locators. */
|
|
71
142
|
export declare function fileFingerprint(sourcePath: string): string | null;
|