@abnersajr/claude-timeline 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +227 -0
  3. package/dist/capture.js +140 -0
  4. package/dist/classifier.d.ts +37 -0
  5. package/dist/classifier.d.ts.map +1 -0
  6. package/dist/classifier.test.d.ts +2 -0
  7. package/dist/classifier.test.d.ts.map +1 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +1328 -0
  10. package/dist/context-tracker.d.ts +44 -0
  11. package/dist/context-tracker.d.ts.map +1 -0
  12. package/dist/context-tracker.test.d.ts +2 -0
  13. package/dist/context-tracker.test.d.ts.map +1 -0
  14. package/dist/conversation-groups.d.ts +11 -0
  15. package/dist/conversation-groups.d.ts.map +1 -0
  16. package/dist/conversation-groups.test.d.ts +2 -0
  17. package/dist/conversation-groups.test.d.ts.map +1 -0
  18. package/dist/cost-stream-capture.d.ts +47 -0
  19. package/dist/cost-stream-capture.d.ts.map +1 -0
  20. package/dist/cost-stream-db.d.ts +87 -0
  21. package/dist/cost-stream-db.d.ts.map +1 -0
  22. package/dist/cost-stream-merger.d.ts +38 -0
  23. package/dist/cost-stream-merger.d.ts.map +1 -0
  24. package/dist/db-reader-BrPRGqww.mjs +1028 -0
  25. package/dist/db-reader-BrPRGqww.mjs.map +1 -0
  26. package/dist/db-reader-CPXmkt55.mjs +2 -0
  27. package/dist/db-reader.d.ts +58 -0
  28. package/dist/db-reader.d.ts.map +1 -0
  29. package/dist/db.js +100 -0
  30. package/dist/dedup.d.ts +16 -0
  31. package/dist/dedup.d.ts.map +1 -0
  32. package/dist/dedup.test.d.ts +2 -0
  33. package/dist/dedup.test.d.ts.map +1 -0
  34. package/dist/index.d.ts +20 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/jsonl-parser.d.ts +14 -0
  37. package/dist/jsonl-parser.d.ts.map +1 -0
  38. package/dist/jsonl-parser.test.d.ts +2 -0
  39. package/dist/jsonl-parser.test.d.ts.map +1 -0
  40. package/dist/merger.d.ts +31 -0
  41. package/dist/merger.d.ts.map +1 -0
  42. package/dist/model-parser.d.ts +25 -0
  43. package/dist/model-parser.d.ts.map +1 -0
  44. package/dist/model-parser.test.d.ts +2 -0
  45. package/dist/model-parser.test.d.ts.map +1 -0
  46. package/dist/noise-filter.d.ts +6 -0
  47. package/dist/noise-filter.d.ts.map +1 -0
  48. package/dist/pricing-B-rwfwDB.mjs +2 -0
  49. package/dist/pricing-DTmya3JY.mjs +273 -0
  50. package/dist/pricing-DTmya3JY.mjs.map +1 -0
  51. package/dist/pricing.d.ts +26 -0
  52. package/dist/pricing.d.ts.map +1 -0
  53. package/dist/server.cjs +31237 -0
  54. package/dist/session-state.d.ts +19 -0
  55. package/dist/session-state.d.ts.map +1 -0
  56. package/dist/session-state.test.d.ts +2 -0
  57. package/dist/session-state.test.d.ts.map +1 -0
  58. package/dist/subagent-locator.d.ts +30 -0
  59. package/dist/subagent-locator.d.ts.map +1 -0
  60. package/dist/subagent-locator.test.d.ts +2 -0
  61. package/dist/subagent-locator.test.d.ts.map +1 -0
  62. package/dist/subagent-resolver.d.ts +35 -0
  63. package/dist/subagent-resolver.d.ts.map +1 -0
  64. package/dist/subagent-resolver.test.d.ts +2 -0
  65. package/dist/subagent-resolver.test.d.ts.map +1 -0
  66. package/dist/tool-extraction.d.ts +34 -0
  67. package/dist/tool-extraction.d.ts.map +1 -0
  68. package/dist/tool-extraction.test.d.ts +2 -0
  69. package/dist/tool-extraction.test.d.ts.map +1 -0
  70. package/dist/tool-matcher.d.ts +35 -0
  71. package/dist/tool-matcher.d.ts.map +1 -0
  72. package/dist/types.d.ts +272 -0
  73. package/dist/types.d.ts.map +1 -0
  74. package/dist/utils.d.ts +24 -0
  75. package/dist/utils.d.ts.map +1 -0
  76. package/dist/web/assets/index-Dr0FGYfS.js +158 -0
  77. package/dist/web/assets/index-nXTIEelb.css +1 -0
  78. package/dist/web/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2 +0 -0
  79. package/dist/web/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2 +0 -0
  80. package/dist/web/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
  81. package/dist/web/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
  82. package/dist/web/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2 +0 -0
  83. package/dist/web/favicon-light.svg +14 -0
  84. package/dist/web/favicon.svg +14 -0
  85. package/dist/web/index.html +14 -0
  86. package/dist/web/logo.svg +20 -0
  87. package/package.json +73 -0
@@ -0,0 +1,44 @@
1
+ import type { ContextCategory, ContextStats, Phase, RawJsonlRecord, TurnContextSnapshot } from "./types.js";
2
+ /**
3
+ * Classify a record's context contribution based on type and content blocks.
4
+ *
5
+ * Priority order:
6
+ * 1. Compact records → "compact"
7
+ * 2. User meta messages with tool_result blocks → "tool-output"
8
+ * 3. User text/image messages → "user-message"
9
+ * 4. Assistant messages with tool_use → "tool-output"
10
+ * 5. Assistant messages with thinking → "thinking-text"
11
+ * 6. System messages (command output) → "system"
12
+ * 7. Everything else → "other"
13
+ */
14
+ export declare function categorizeContext(record: RawJsonlRecord): ContextCategory;
15
+ /**
16
+ * Extract input tokens from a record's usage data.
17
+ * Returns 0 if no usage data is present.
18
+ */
19
+ export declare function getInputTokens(record: RawJsonlRecord): number;
20
+ /**
21
+ * Scan records for isCompactSummary events and return Phase[].
22
+ * Each phase represents a contiguous segment of records between compact events.
23
+ * Phase 1 starts at index 0. The compact record itself is included at the end
24
+ * of the phase it terminates. A new phase starts after each compact record.
25
+ */
26
+ export declare function detectCompactions(records: RawJsonlRecord[]): Phase[];
27
+ /**
28
+ * Determine which phase a record index belongs to.
29
+ */
30
+ export declare function getPhaseForIndex(recordIndex: number, phases: Phase[]): number;
31
+ /**
32
+ * Compute context statistics by iterating records and categorizing each one.
33
+ * Tracks compaction phases and accumulates tokens by category.
34
+ *
35
+ * For now, attributes full input_tokens to the primary category of each record.
36
+ * Precise per-category breakdown would require content size analysis.
37
+ */
38
+ export declare function computeContextStats(records: RawJsonlRecord[]): ContextStats;
39
+ /**
40
+ * Convert context stats into per-turn snapshots for UI consumption.
41
+ * Each snapshot represents a single record's context contribution.
42
+ */
43
+ export declare function getTurnSnapshots(stats: ContextStats): TurnContextSnapshot[];
44
+ //# sourceMappingURL=context-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-tracker.d.ts","sourceRoot":"","sources":["../src/context-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAEf,YAAY,EACZ,KAAK,EACL,cAAc,EACd,mBAAmB,EACpB,MAAM,YAAY,CAAA;AAkBnB;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,eAAe,CA4BzE;AAID;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAE7D;AAID;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,KAAK,EAAE,CA0BpE;AAID;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAQ7E;AAID;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,YAAY,CA2C3E;AAID;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,mBAAmB,EAAE,CAQ3E"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=context-tracker.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-tracker.test.d.ts","sourceRoot":"","sources":["../src/context-tracker.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import type { ConversationGroup, Turn } from "./types";
2
+ /**
3
+ * Build conversation groups from a flat list of turns.
4
+ *
5
+ * Grouping strategy: scan turns in order. Each turn containing a user message
6
+ * starts a new group. All subsequent turns (AI-only) belong to that group
7
+ * until the next user turn. Orphaned AI-only sequences at the start are
8
+ * collected into their own group.
9
+ */
10
+ export declare function buildConversationGroups(turns: Turn[]): ConversationGroup[];
11
+ //# sourceMappingURL=conversation-groups.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-groups.d.ts","sourceRoot":"","sources":["../src/conversation-groups.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAiC,IAAI,EAAE,MAAM,SAAS,CAAA;AAErF;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,iBAAiB,EAAE,CAmE1E"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=conversation-groups.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-groups.test.d.ts","sourceRoot":"","sources":["../src/conversation-groups.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Stdin JSON parser and batch capture for Claude Code cost data.
3
+ *
4
+ * Usage:
5
+ * - Real-time: pipe Claude Code's stdin to this module
6
+ * - Batch: cost-stream-capture.ts --batch <file>
7
+ */
8
+ import { CostStreamDb } from "./cost-stream-db.js";
9
+ export interface StdinCostData {
10
+ sessionId: string;
11
+ timestamp: string;
12
+ totalCostUsd: number;
13
+ inputTokens: number;
14
+ outputTokens: number;
15
+ cacheReadTokens: number;
16
+ cacheCreationTokens: number;
17
+ model: string | null;
18
+ durationMs: number | null;
19
+ apiDurationMs: number | null;
20
+ linesAdded: number;
21
+ linesRemoved: number;
22
+ rawJson?: string;
23
+ }
24
+ /**
25
+ * Parse a single stdin JSON line into StdinCostData.
26
+ * Returns null if the line doesn't contain cost data.
27
+ */
28
+ export declare function parseStdinCostJson(line: string, sessionId?: string): StdinCostData | null;
29
+ /**
30
+ * Start capturing cost data from stdin in real-time.
31
+ * Writes to cost-stream.db as data arrives.
32
+ *
33
+ * Returns a cleanup function to stop capture.
34
+ */
35
+ export declare function startStdinCapture(dbPath?: string, sessionId?: string): {
36
+ stop: () => void;
37
+ db: CostStreamDb;
38
+ };
39
+ /**
40
+ * Process a saved stdin log file in batch mode.
41
+ * Each line is expected to be a JSON object with cost data.
42
+ */
43
+ export declare function batchCapture(filePath: string, dbPath?: string): Promise<{
44
+ processed: number;
45
+ skipped: number;
46
+ }>;
47
+ //# sourceMappingURL=cost-stream-capture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-stream-capture.d.ts","sourceRoot":"","sources":["../src/cost-stream-capture.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,YAAY,EAAuB,MAAM,qBAAqB,CAAA;AAIvE,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,eAAe,EAAE,MAAM,CAAA;IACvB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAID;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAwDzF;AAID;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,CAAC,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,GACjB;IAAE,IAAI,EAAE,MAAM,IAAI,CAAC;IAAC,EAAE,EAAE,YAAY,CAAA;CAAE,CAsCxC;AAID;;;GAGG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAyCjD"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * SQLite CRUD layer for cost-stream.db
3
+ *
4
+ * Stores ground-truth cost data from Claude Code's stdin stream.
5
+ * This is separate from usage.db (which is read-only and owned by Claude Code).
6
+ */
7
+ export interface CostSnapshotRow {
8
+ id: number;
9
+ session_id: string;
10
+ timestamp: string;
11
+ total_cost_usd: number;
12
+ input_tokens: number;
13
+ output_tokens: number;
14
+ cache_read_tokens: number;
15
+ cache_creation_tokens: number;
16
+ model: string | null;
17
+ duration_ms: number | null;
18
+ api_duration_ms: number | null;
19
+ lines_added: number;
20
+ lines_removed: number;
21
+ raw_json: string | null;
22
+ created_at: string;
23
+ }
24
+ export interface SessionCostSummaryRow {
25
+ session_id: string;
26
+ total_cost_usd: number;
27
+ model: string | null;
28
+ snapshot_count: number;
29
+ first_snapshot_at: string | null;
30
+ last_snapshot_at: string | null;
31
+ updated_at: string;
32
+ }
33
+ export declare class CostStreamDb {
34
+ private db;
35
+ constructor(dbPath: string);
36
+ /**
37
+ * Insert a cost snapshot from stdin data.
38
+ * Returns the snapshot ID.
39
+ */
40
+ insertSnapshot(data: {
41
+ sessionId: string;
42
+ timestamp: string;
43
+ totalCostUsd: number;
44
+ inputTokens: number;
45
+ outputTokens: number;
46
+ cacheReadTokens: number;
47
+ cacheCreationTokens: number;
48
+ model: string | null;
49
+ durationMs: number | null;
50
+ apiDurationMs: number | null;
51
+ linesAdded: number;
52
+ linesRemoved: number;
53
+ rawJson?: string;
54
+ }): number;
55
+ /**
56
+ * Get the latest cost summary for a session.
57
+ */
58
+ getCostSummary(sessionId: string): SessionCostSummaryRow | undefined;
59
+ /**
60
+ * Get the latest cost snapshot for a session.
61
+ */
62
+ getLatestSnapshot(sessionId: string): CostSnapshotRow | undefined;
63
+ /**
64
+ * Get all cost snapshots for a session (for time-series).
65
+ */
66
+ getSnapshots(sessionId: string, limit?: number): CostSnapshotRow[];
67
+ /**
68
+ * Check if a session has cost-stream data.
69
+ */
70
+ hasCostData(sessionId: string): boolean;
71
+ /**
72
+ * Get cost summaries for multiple sessions in one query.
73
+ * Returns a Map of sessionId → total_cost_usd.
74
+ */
75
+ getCostSummariesForSessions(sessionIds: string[]): Map<string, number>;
76
+ /**
77
+ * Get all session IDs with cost data.
78
+ */
79
+ getSessionIds(): string[];
80
+ close(): void;
81
+ }
82
+ /**
83
+ * Get the default path for cost-stream.db
84
+ * Priority: customPath > ~/.claude-timeline/cost-stream.db
85
+ */
86
+ export declare function getCostStreamDbPath(customPath?: string): string;
87
+ //# sourceMappingURL=cost-stream-db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-stream-db.d.ts","sourceRoot":"","sources":["../src/cost-stream-db.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA2CH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,iBAAiB,EAAE,MAAM,CAAA;IACzB,qBAAqB,EAAE,MAAM,CAAA;IAC7B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,cAAc,EAAE,MAAM,CAAA;IACtB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,UAAU,EAAE,MAAM,CAAA;CACnB;AAID,qBAAa,YAAY;IACvB,OAAO,CAAC,EAAE,CAAmB;gBAEjB,MAAM,EAAE,MAAM;IAa1B;;;OAGG;IACH,cAAc,CAAC,IAAI,EAAE;QACnB,SAAS,EAAE,MAAM,CAAA;QACjB,SAAS,EAAE,MAAM,CAAA;QACjB,YAAY,EAAE,MAAM,CAAA;QACpB,WAAW,EAAE,MAAM,CAAA;QACnB,YAAY,EAAE,MAAM,CAAA;QACpB,eAAe,EAAE,MAAM,CAAA;QACvB,mBAAmB,EAAE,MAAM,CAAA;QAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;QACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;QACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;QAC5B,UAAU,EAAE,MAAM,CAAA;QAClB,YAAY,EAAE,MAAM,CAAA;QACpB,OAAO,CAAC,EAAE,MAAM,CAAA;KACjB,GAAG,MAAM;IAuDV;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS;IAMpE;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAQjE;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAO,GAAG,eAAe,EAAE;IAQhE;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAOvC;;;OAGG;IACH,2BAA2B,CACzB,UAAU,EAAE,MAAM,EAAE,GACnB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAoBtB;;OAEG;IACH,aAAa,IAAI,MAAM,EAAE;IAOzB,KAAK,IAAI,IAAI;CAGd;AAOD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAG/D"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Merge cost-stream data into the extraction pipeline.
3
+ *
4
+ * This module provides functions to enrich SessionPricing with ground-truth
5
+ * cost data from the cost-stream.db, preserving both estimated and API streams.
6
+ */
7
+ import type { FullTimelineSession, SessionPricing } from "./types.js";
8
+ /** Cost-stream enrichment result */
9
+ export interface CostStreamEnrichment {
10
+ totalCostUsd: number;
11
+ snapshotCount: number;
12
+ firstSnapshotAt: string | null;
13
+ lastSnapshotAt: string | null;
14
+ model: string | null;
15
+ }
16
+ /**
17
+ * Get cost-stream enrichment for a session.
18
+ * Returns null if no cost-stream data exists.
19
+ */
20
+ export declare function getCostEnrichment(costStreamDbPath: string, sessionId: string): CostStreamEnrichment | null;
21
+ /**
22
+ * Build SessionPricing using both cost streams.
23
+ *
24
+ * - Estimated stream (from JSONL × pricing rates) is always preserved
25
+ * - API stream (from cost-stream.db) is added when available
26
+ * - totalCost prefers API when available, falls back to estimated
27
+ */
28
+ export declare function buildSessionPricing(estimatedPricing: SessionPricing, enrichment: CostStreamEnrichment | null): SessionPricing;
29
+ /**
30
+ * Enrich a FullTimelineSession with cost-stream data.
31
+ *
32
+ * This is the main merge function. It:
33
+ * 1. Gets cost-stream data (if available)
34
+ * 2. Sets both estimated and API cost streams
35
+ * 3. Marks the cost source
36
+ */
37
+ export declare function enrichTimelineWithCostStream(timeline: FullTimelineSession, costStreamDbPath: string): FullTimelineSession;
38
+ //# sourceMappingURL=cost-stream-merger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-stream-merger.d.ts","sourceRoot":"","sources":["../src/cost-stream-merger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACV,mBAAmB,EACnB,cAAc,EACf,MAAM,YAAY,CAAA;AAInB,oCAAoC;AACpC,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB;AAID;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,gBAAgB,EAAE,MAAM,EACxB,SAAS,EAAE,MAAM,GAChB,oBAAoB,GAAG,IAAI,CAgB7B;AAID;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,gBAAgB,EAAE,cAAc,EAChC,UAAU,EAAE,oBAAoB,GAAG,IAAI,GACtC,cAAc,CAwBhB;AAED;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,mBAAmB,EAC7B,gBAAgB,EAAE,MAAM,GACvB,mBAAmB,CA2BrB"}