oh-my-claude-sisyphus 3.4.2 → 3.4.3

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 (134) hide show
  1. package/commands/cancel-ultraqa.md +1 -1
  2. package/dist/__tests__/analytics/analytics-summary.test.d.ts +2 -0
  3. package/dist/__tests__/analytics/analytics-summary.test.d.ts.map +1 -0
  4. package/dist/__tests__/analytics/analytics-summary.test.js +267 -0
  5. package/dist/__tests__/analytics/analytics-summary.test.js.map +1 -0
  6. package/dist/__tests__/analytics/backfill-dedup.test.d.ts +2 -0
  7. package/dist/__tests__/analytics/backfill-dedup.test.d.ts.map +1 -0
  8. package/dist/__tests__/analytics/backfill-dedup.test.js +179 -0
  9. package/dist/__tests__/analytics/backfill-dedup.test.js.map +1 -0
  10. package/dist/__tests__/analytics/backfill-engine.test.d.ts +2 -0
  11. package/dist/__tests__/analytics/backfill-engine.test.d.ts.map +1 -0
  12. package/dist/__tests__/analytics/backfill-engine.test.js +362 -0
  13. package/dist/__tests__/analytics/backfill-engine.test.js.map +1 -0
  14. package/dist/__tests__/analytics/cost-estimator.test.d.ts +2 -0
  15. package/dist/__tests__/analytics/cost-estimator.test.d.ts.map +1 -0
  16. package/dist/__tests__/analytics/cost-estimator.test.js +212 -0
  17. package/dist/__tests__/analytics/cost-estimator.test.js.map +1 -0
  18. package/dist/__tests__/analytics/output-estimator.test.d.ts +2 -0
  19. package/dist/__tests__/analytics/output-estimator.test.d.ts.map +1 -0
  20. package/dist/__tests__/analytics/output-estimator.test.js +106 -0
  21. package/dist/__tests__/analytics/output-estimator.test.js.map +1 -0
  22. package/dist/__tests__/analytics/token-extractor.test.d.ts +2 -0
  23. package/dist/__tests__/analytics/token-extractor.test.d.ts.map +1 -0
  24. package/dist/__tests__/analytics/token-extractor.test.js +121 -0
  25. package/dist/__tests__/analytics/token-extractor.test.js.map +1 -0
  26. package/dist/__tests__/analytics/transcript-parser.test.d.ts +2 -0
  27. package/dist/__tests__/analytics/transcript-parser.test.d.ts.map +1 -0
  28. package/dist/__tests__/analytics/transcript-parser.test.js +285 -0
  29. package/dist/__tests__/analytics/transcript-parser.test.js.map +1 -0
  30. package/dist/__tests__/analytics/transcript-scanner.test.d.ts +2 -0
  31. package/dist/__tests__/analytics/transcript-scanner.test.d.ts.map +1 -0
  32. package/dist/__tests__/analytics/transcript-scanner.test.js +401 -0
  33. package/dist/__tests__/analytics/transcript-scanner.test.js.map +1 -0
  34. package/dist/__tests__/analytics/transcript-token-extractor.test.d.ts +2 -0
  35. package/dist/__tests__/analytics/transcript-token-extractor.test.d.ts.map +1 -0
  36. package/dist/__tests__/analytics/transcript-token-extractor.test.js +175 -0
  37. package/dist/__tests__/analytics/transcript-token-extractor.test.js.map +1 -0
  38. package/dist/__tests__/hud/auto-tracking.integration.test.d.ts +2 -0
  39. package/dist/__tests__/hud/auto-tracking.integration.test.d.ts.map +1 -0
  40. package/dist/__tests__/hud/auto-tracking.integration.test.js +12 -0
  41. package/dist/__tests__/hud/auto-tracking.integration.test.js.map +1 -0
  42. package/dist/analytics/analytics-summary.d.ts +47 -0
  43. package/dist/analytics/analytics-summary.d.ts.map +1 -0
  44. package/dist/analytics/analytics-summary.js +170 -0
  45. package/dist/analytics/analytics-summary.js.map +1 -0
  46. package/dist/analytics/backfill-dedup.d.ts +49 -0
  47. package/dist/analytics/backfill-dedup.d.ts.map +1 -0
  48. package/dist/analytics/backfill-dedup.js +118 -0
  49. package/dist/analytics/backfill-dedup.js.map +1 -0
  50. package/dist/analytics/backfill-engine.d.ts +59 -0
  51. package/dist/analytics/backfill-engine.d.ts.map +1 -0
  52. package/dist/analytics/backfill-engine.js +163 -0
  53. package/dist/analytics/backfill-engine.js.map +1 -0
  54. package/dist/analytics/index.d.ts +8 -0
  55. package/dist/analytics/index.d.ts.map +1 -1
  56. package/dist/analytics/index.js +10 -0
  57. package/dist/analytics/index.js.map +1 -1
  58. package/dist/analytics/output-estimator.d.ts +26 -0
  59. package/dist/analytics/output-estimator.d.ts.map +1 -0
  60. package/dist/analytics/output-estimator.js +61 -0
  61. package/dist/analytics/output-estimator.js.map +1 -0
  62. package/dist/analytics/token-extractor.d.ts +31 -0
  63. package/dist/analytics/token-extractor.d.ts.map +1 -0
  64. package/dist/analytics/token-extractor.js +57 -0
  65. package/dist/analytics/token-extractor.js.map +1 -0
  66. package/dist/analytics/token-tracker.d.ts +7 -1
  67. package/dist/analytics/token-tracker.d.ts.map +1 -1
  68. package/dist/analytics/token-tracker.js +81 -0
  69. package/dist/analytics/token-tracker.js.map +1 -1
  70. package/dist/analytics/transcript-parser.d.ts +42 -0
  71. package/dist/analytics/transcript-parser.d.ts.map +1 -0
  72. package/dist/analytics/transcript-parser.js +90 -0
  73. package/dist/analytics/transcript-parser.js.map +1 -0
  74. package/dist/analytics/transcript-scanner.d.ts +50 -0
  75. package/dist/analytics/transcript-scanner.d.ts.map +1 -0
  76. package/dist/analytics/transcript-scanner.js +149 -0
  77. package/dist/analytics/transcript-scanner.js.map +1 -0
  78. package/dist/analytics/transcript-token-extractor.d.ts +19 -0
  79. package/dist/analytics/transcript-token-extractor.d.ts.map +1 -0
  80. package/dist/analytics/transcript-token-extractor.js +89 -0
  81. package/dist/analytics/transcript-token-extractor.js.map +1 -0
  82. package/dist/analytics/types.d.ts +52 -0
  83. package/dist/analytics/types.d.ts.map +1 -1
  84. package/dist/analytics/types.js.map +1 -1
  85. package/dist/cli/analytics.js +26 -1
  86. package/dist/cli/analytics.js.map +1 -1
  87. package/dist/cli/commands/backfill.d.ts +15 -0
  88. package/dist/cli/commands/backfill.d.ts.map +1 -0
  89. package/dist/cli/commands/backfill.js +146 -0
  90. package/dist/cli/commands/backfill.js.map +1 -0
  91. package/dist/cli/commands/stats.d.ts +1 -0
  92. package/dist/cli/commands/stats.d.ts.map +1 -1
  93. package/dist/cli/commands/stats.js +67 -31
  94. package/dist/cli/commands/stats.js.map +1 -1
  95. package/dist/cli/components/CostDashboard.d.ts +15 -0
  96. package/dist/cli/components/CostDashboard.d.ts.map +1 -0
  97. package/dist/cli/components/CostDashboard.js +15 -0
  98. package/dist/cli/components/CostDashboard.js.map +1 -0
  99. package/dist/cli/components/LiveStats.d.ts +16 -0
  100. package/dist/cli/components/LiveStats.d.ts.map +1 -0
  101. package/dist/cli/components/LiveStats.js +16 -0
  102. package/dist/cli/components/LiveStats.js.map +1 -0
  103. package/dist/cli/components/SessionBrowser.d.ts +14 -0
  104. package/dist/cli/components/SessionBrowser.d.ts.map +1 -0
  105. package/dist/cli/components/SessionBrowser.js +14 -0
  106. package/dist/cli/components/SessionBrowser.js.map +1 -0
  107. package/dist/cli/index.js +159 -3
  108. package/dist/cli/index.js.map +1 -1
  109. package/dist/cli/tui.d.ts +21 -0
  110. package/dist/cli/tui.d.ts.map +1 -0
  111. package/dist/cli/tui.js +21 -0
  112. package/dist/cli/tui.js.map +1 -0
  113. package/dist/hud/analytics-display.d.ts +16 -0
  114. package/dist/hud/analytics-display.d.ts.map +1 -1
  115. package/dist/hud/analytics-display.js +42 -0
  116. package/dist/hud/analytics-display.js.map +1 -1
  117. package/dist/hud/index.js +90 -3
  118. package/dist/hud/index.js.map +1 -1
  119. package/dist/hud/render.d.ts.map +1 -1
  120. package/dist/hud/render.js +27 -1
  121. package/dist/hud/render.js.map +1 -1
  122. package/dist/hud/types.d.ts +2 -0
  123. package/dist/hud/types.d.ts.map +1 -1
  124. package/dist/hud/types.js.map +1 -1
  125. package/docs/ANALYTICS-SYSTEM.md +150 -0
  126. package/hooks/keyword-detector.sh +1 -1
  127. package/package.json +1 -1
  128. package/scripts/keyword-detector.mjs +1 -1
  129. package/scripts/persistent-mode.mjs +1 -1
  130. package/scripts/test-mutual-exclusion.ts +4 -4
  131. package/scripts/test-remember-tags.ts +6 -6
  132. package/scripts/test-session-injection.ts +4 -4
  133. package/skills/cancel-ultraqa/SKILL.md +1 -1
  134. package/skills/omc-setup/SKILL.md +30 -5
@@ -11,4 +11,14 @@ export * from './session-types.js';
11
11
  export * from './metrics-collector.js';
12
12
  export * from './query-engine.js';
13
13
  export * from './export.js';
14
+ // Phase 2 modules (auto-tracking)
15
+ export * from './token-extractor.js';
16
+ export * from './output-estimator.js';
17
+ export * from './analytics-summary.js';
18
+ // Offline transcript analysis modules
19
+ export * from './transcript-scanner.js';
20
+ export * from './transcript-parser.js';
21
+ export * from './transcript-token-extractor.js';
22
+ export * from './backfill-dedup.js';
23
+ export * from './backfill-engine.js';
14
24
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analytics/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analytics/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAE5B,kCAAkC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AAEvC,sCAAsC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iCAAiC,CAAC;AAChD,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Model-specific output token estimation based on input tokens.
3
+ *
4
+ * Ratios based on empirical observation:
5
+ * - Haiku: 30% (concise responses)
6
+ * - Sonnet: 40% (balanced responses)
7
+ * - Opus: 50% (detailed reasoning)
8
+ */
9
+ /**
10
+ * Estimate output tokens from input tokens using model-specific ratios.
11
+ *
12
+ * @param inputTokens - Number of input tokens consumed
13
+ * @param modelName - Model name (e.g., "claude-sonnet-4.5")
14
+ * @returns Estimated output tokens (rounded to nearest integer)
15
+ */
16
+ export declare function estimateOutputTokens(inputTokens: number, modelName: string): number;
17
+ /**
18
+ * Extract session ID from transcript path.
19
+ *
20
+ * Pattern: /path/to/.claude/projects/{sessionId}/transcript.jsonl
21
+ *
22
+ * @param transcriptPath - Full path to transcript file
23
+ * @returns Session ID (extracted or hashed)
24
+ */
25
+ export declare function extractSessionId(transcriptPath: string): string;
26
+ //# sourceMappingURL=output-estimator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-estimator.d.ts","sourceRoot":"","sources":["../../src/analytics/output-estimator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAUH;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAKnF;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAc/D"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Model-specific output token estimation based on input tokens.
3
+ *
4
+ * Ratios based on empirical observation:
5
+ * - Haiku: 30% (concise responses)
6
+ * - Sonnet: 40% (balanced responses)
7
+ * - Opus: 50% (detailed reasoning)
8
+ */
9
+ const MODEL_OUTPUT_RATIOS = {
10
+ 'haiku': 0.30,
11
+ 'sonnet': 0.40,
12
+ 'opus': 0.50
13
+ };
14
+ const DEFAULT_RATIO = 0.40; // Sonnet baseline
15
+ /**
16
+ * Estimate output tokens from input tokens using model-specific ratios.
17
+ *
18
+ * @param inputTokens - Number of input tokens consumed
19
+ * @param modelName - Model name (e.g., "claude-sonnet-4.5")
20
+ * @returns Estimated output tokens (rounded to nearest integer)
21
+ */
22
+ export function estimateOutputTokens(inputTokens, modelName) {
23
+ if (inputTokens === 0)
24
+ return 0;
25
+ const ratio = detectModelRatio(modelName);
26
+ return Math.round(inputTokens * ratio);
27
+ }
28
+ /**
29
+ * Extract session ID from transcript path.
30
+ *
31
+ * Pattern: /path/to/.claude/projects/{sessionId}/transcript.jsonl
32
+ *
33
+ * @param transcriptPath - Full path to transcript file
34
+ * @returns Session ID (extracted or hashed)
35
+ */
36
+ export function extractSessionId(transcriptPath) {
37
+ // Try to extract from path pattern
38
+ const match = transcriptPath.match(/projects\/([a-f0-9]{8,})/i);
39
+ if (match) {
40
+ return match[1];
41
+ }
42
+ // Fallback: hash the path
43
+ const crypto = require('crypto');
44
+ return crypto.createHash('md5')
45
+ .update(transcriptPath)
46
+ .digest('hex')
47
+ .slice(0, 16);
48
+ }
49
+ /**
50
+ * Detect model tier and return appropriate output ratio.
51
+ */
52
+ function detectModelRatio(modelName) {
53
+ const normalized = modelName.toLowerCase();
54
+ for (const [tier, ratio] of Object.entries(MODEL_OUTPUT_RATIOS)) {
55
+ if (normalized.includes(tier)) {
56
+ return ratio;
57
+ }
58
+ }
59
+ return DEFAULT_RATIO;
60
+ }
61
+ //# sourceMappingURL=output-estimator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-estimator.js","sourceRoot":"","sources":["../../src/analytics/output-estimator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,mBAAmB,GAA2B;IAClD,OAAO,EAAE,IAAI;IACb,QAAQ,EAAE,IAAI;IACd,MAAM,EAAE,IAAI;CACb,CAAC;AAEF,MAAM,aAAa,GAAG,IAAI,CAAC,CAAC,kBAAkB;AAE9C;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,WAAmB,EAAE,SAAiB;IACzE,IAAI,WAAW,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAEhC,MAAM,KAAK,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,cAAsB;IACrD,mCAAmC;IACnC,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAEhE,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,0BAA0B;IAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjC,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;SAC5B,MAAM,CAAC,cAAc,CAAC;SACtB,MAAM,CAAC,KAAK,CAAC;SACb,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,SAAiB;IACzC,MAAM,UAAU,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;IAE3C,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAChE,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC"}
@@ -0,0 +1,31 @@
1
+ import type { StatuslineStdin } from '../hud/types.js';
2
+ export interface ExtractedTokens {
3
+ inputTokens: number;
4
+ outputTokens: number;
5
+ cacheCreationTokens: number;
6
+ cacheReadTokens: number;
7
+ modelName: string;
8
+ agentName?: string;
9
+ isEstimated: boolean;
10
+ timestamp: string;
11
+ }
12
+ export interface TokenDelta {
13
+ inputDelta: number;
14
+ cacheDelta: number;
15
+ cacheReadDelta: number;
16
+ }
17
+ export interface TokenSnapshot {
18
+ inputTokens: number;
19
+ cacheCreationTokens: number;
20
+ cacheReadTokens: number;
21
+ timestamp: string;
22
+ }
23
+ /**
24
+ * Extract token usage from StatuslineStdin and calculate delta from previous snapshot.
25
+ */
26
+ export declare function extractTokens(stdin: StatuslineStdin, previousSnapshot: TokenSnapshot | null, modelName: string, agentName?: string): ExtractedTokens;
27
+ /**
28
+ * Create current snapshot for next delta calculation.
29
+ */
30
+ export declare function createSnapshot(stdin: StatuslineStdin): TokenSnapshot;
31
+ //# sourceMappingURL=token-extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-extractor.d.ts","sourceRoot":"","sources":["../../src/analytics/token-extractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGvD,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,eAAe,EACtB,gBAAgB,EAAE,aAAa,GAAG,IAAI,EACtC,SAAS,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,GACjB,eAAe,CAiCjB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,GAAG,aAAa,CASpE"}
@@ -0,0 +1,57 @@
1
+ import { estimateOutputTokens } from './output-estimator.js';
2
+ /**
3
+ * Extract token usage from StatuslineStdin and calculate delta from previous snapshot.
4
+ */
5
+ export function extractTokens(stdin, previousSnapshot, modelName, agentName) {
6
+ const currentUsage = stdin.context_window.current_usage;
7
+ if (!currentUsage) {
8
+ return createEmptyExtraction(modelName, agentName);
9
+ }
10
+ // Calculate deltas
11
+ const inputDelta = previousSnapshot
12
+ ? currentUsage.input_tokens - previousSnapshot.inputTokens
13
+ : currentUsage.input_tokens;
14
+ const cacheDelta = previousSnapshot
15
+ ? currentUsage.cache_creation_input_tokens - previousSnapshot.cacheCreationTokens
16
+ : currentUsage.cache_creation_input_tokens;
17
+ const cacheReadDelta = previousSnapshot
18
+ ? currentUsage.cache_read_input_tokens - previousSnapshot.cacheReadTokens
19
+ : currentUsage.cache_read_input_tokens;
20
+ // Estimate output tokens (from output-estimator.ts)
21
+ const outputTokens = estimateOutputTokens(inputDelta, modelName);
22
+ return {
23
+ inputTokens: Math.max(0, inputDelta),
24
+ outputTokens,
25
+ cacheCreationTokens: Math.max(0, cacheDelta),
26
+ cacheReadTokens: Math.max(0, cacheReadDelta),
27
+ modelName,
28
+ agentName,
29
+ isEstimated: true,
30
+ timestamp: new Date().toISOString()
31
+ };
32
+ }
33
+ /**
34
+ * Create current snapshot for next delta calculation.
35
+ */
36
+ export function createSnapshot(stdin) {
37
+ const usage = stdin.context_window.current_usage;
38
+ return {
39
+ inputTokens: usage?.input_tokens ?? 0,
40
+ cacheCreationTokens: usage?.cache_creation_input_tokens ?? 0,
41
+ cacheReadTokens: usage?.cache_read_input_tokens ?? 0,
42
+ timestamp: new Date().toISOString()
43
+ };
44
+ }
45
+ function createEmptyExtraction(modelName, agentName) {
46
+ return {
47
+ inputTokens: 0,
48
+ outputTokens: 0,
49
+ cacheCreationTokens: 0,
50
+ cacheReadTokens: 0,
51
+ modelName,
52
+ agentName,
53
+ isEstimated: true,
54
+ timestamp: new Date().toISOString()
55
+ };
56
+ }
57
+ //# sourceMappingURL=token-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-extractor.js","sourceRoot":"","sources":["../../src/analytics/token-extractor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AA0B7D;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAsB,EACtB,gBAAsC,EACtC,SAAiB,EACjB,SAAkB;IAElB,MAAM,YAAY,GAAG,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC;IAExD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,qBAAqB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACrD,CAAC;IAED,mBAAmB;IACnB,MAAM,UAAU,GAAG,gBAAgB;QACjC,CAAC,CAAC,YAAY,CAAC,YAAY,GAAG,gBAAgB,CAAC,WAAW;QAC1D,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC;IAE9B,MAAM,UAAU,GAAG,gBAAgB;QACjC,CAAC,CAAC,YAAY,CAAC,2BAA2B,GAAG,gBAAgB,CAAC,mBAAmB;QACjF,CAAC,CAAC,YAAY,CAAC,2BAA2B,CAAC;IAE7C,MAAM,cAAc,GAAG,gBAAgB;QACrC,CAAC,CAAC,YAAY,CAAC,uBAAuB,GAAG,gBAAgB,CAAC,eAAe;QACzE,CAAC,CAAC,YAAY,CAAC,uBAAuB,CAAC;IAEzC,oDAAoD;IACpD,MAAM,YAAY,GAAG,oBAAoB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAEjE,OAAO;QACL,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC;QACpC,YAAY;QACZ,mBAAmB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC;QAC5C,eAAe,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC;QAC5C,SAAS;QACT,SAAS;QACT,WAAW,EAAE,IAAI;QACjB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAsB;IACnD,MAAM,KAAK,GAAG,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC;IAEjD,OAAO;QACL,WAAW,EAAE,KAAK,EAAE,YAAY,IAAI,CAAC;QACrC,mBAAmB,EAAE,KAAK,EAAE,2BAA2B,IAAI,CAAC;QAC5D,eAAe,EAAE,KAAK,EAAE,uBAAuB,IAAI,CAAC;QACpD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,SAAiB,EAAE,SAAkB;IAClE,OAAO;QACL,WAAW,EAAE,CAAC;QACd,YAAY,EAAE,CAAC;QACf,mBAAmB,EAAE,CAAC;QACtB,eAAe,EAAE,CAAC;QAClB,SAAS;QACT,SAAS;QACT,WAAW,EAAE,IAAI;QACjB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;AACJ,CAAC"}
@@ -1,4 +1,4 @@
1
- import { TokenUsage, SessionTokenStats } from './types.js';
1
+ import { TokenUsage, SessionTokenStats, AggregateTokenStats } from './types.js';
2
2
  export declare class TokenTracker {
3
3
  private currentSessionId;
4
4
  private sessionStats;
@@ -12,6 +12,12 @@ export declare class TokenTracker {
12
12
  loadSessionStats(sessionId?: string): Promise<SessionTokenStats | null>;
13
13
  private rebuildStatsFromLog;
14
14
  getSessionStats(): SessionTokenStats;
15
+ getAllStats(): Promise<AggregateTokenStats>;
16
+ getTopAgentsAllSessions(limit?: number): Promise<Array<{
17
+ agent: string;
18
+ tokens: number;
19
+ cost: number;
20
+ }>>;
15
21
  getTopAgents(limit?: number): Promise<Array<{
16
22
  agent: string;
17
23
  tokens: number;
@@ -1 +1 @@
1
- {"version":3,"file":"token-tracker.d.ts","sourceRoot":"","sources":["../../src/analytics/token-tracker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAO3D,qBAAa,YAAY;IACvB,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,YAAY,CAAoB;gBAE5B,SAAS,CAAC,EAAE,MAAM;IAK9B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,sBAAsB;IAexB,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;YAiB3E,WAAW;IAQzB,OAAO,CAAC,kBAAkB;YAsBZ,gBAAgB;IAIxB,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;YAe/D,mBAAmB;IAsBjC,eAAe,IAAI,iBAAiB;IAI9B,YAAY,CAAC,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAsBhG,cAAc,CAAC,aAAa,GAAE,MAAW,GAAG,OAAO,CAAC,MAAM,CAAC;CA4BlE;AAKD,wBAAgB,eAAe,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,YAAY,CAKhE;AAED,wBAAgB,iBAAiB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,YAAY,CAGlE"}
1
+ {"version":3,"file":"token-tracker.d.ts","sourceRoot":"","sources":["../../src/analytics/token-tracker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAOhF,qBAAa,YAAY;IACvB,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,YAAY,CAAoB;gBAE5B,SAAS,CAAC,EAAE,MAAM;IAK9B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,sBAAsB;IAexB,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,WAAW,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;YAiB3E,WAAW;IAQzB,OAAO,CAAC,kBAAkB;YAsBZ,gBAAgB;IAIxB,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;YAe/D,mBAAmB;IAsBjC,eAAe,IAAI,iBAAiB;IAI9B,WAAW,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAoF3C,uBAAuB,CAAC,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAY3G,YAAY,CAAC,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAsBhG,cAAc,CAAC,aAAa,GAAE,MAAW,GAAG,OAAO,CAAC,MAAM,CAAC;CA4BlE;AAKD,wBAAgB,eAAe,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,YAAY,CAKhE;AAED,wBAAgB,iBAAiB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,YAAY,CAGlE"}
@@ -101,6 +101,87 @@ export class TokenTracker {
101
101
  getSessionStats() {
102
102
  return { ...this.sessionStats };
103
103
  }
104
+ async getAllStats() {
105
+ const { calculateCost } = await import('./cost-estimator.js');
106
+ const logPath = path.resolve(process.cwd(), TOKEN_LOG_FILE);
107
+ const stats = {
108
+ totalInputTokens: 0,
109
+ totalOutputTokens: 0,
110
+ totalCacheCreation: 0,
111
+ totalCacheRead: 0,
112
+ totalCost: 0,
113
+ byAgent: {},
114
+ byModel: {},
115
+ sessionCount: 0,
116
+ entryCount: 0,
117
+ firstEntry: null,
118
+ lastEntry: null
119
+ };
120
+ try {
121
+ const content = await fs.readFile(logPath, 'utf-8');
122
+ const lines = content.trim().split('\n').filter(line => line.trim());
123
+ if (lines.length === 0) {
124
+ return stats;
125
+ }
126
+ const sessions = new Set();
127
+ for (const line of lines) {
128
+ const record = JSON.parse(line);
129
+ stats.entryCount++;
130
+ // Track unique sessions
131
+ sessions.add(record.sessionId);
132
+ // Track timestamps
133
+ if (!stats.firstEntry || record.timestamp < stats.firstEntry) {
134
+ stats.firstEntry = record.timestamp;
135
+ }
136
+ if (!stats.lastEntry || record.timestamp > stats.lastEntry) {
137
+ stats.lastEntry = record.timestamp;
138
+ }
139
+ // Aggregate totals
140
+ stats.totalInputTokens += record.inputTokens;
141
+ stats.totalOutputTokens += record.outputTokens;
142
+ stats.totalCacheCreation += record.cacheCreationTokens;
143
+ stats.totalCacheRead += record.cacheReadTokens;
144
+ // Calculate cost for this record
145
+ const cost = calculateCost({
146
+ modelName: record.modelName,
147
+ inputTokens: record.inputTokens,
148
+ outputTokens: record.outputTokens,
149
+ cacheCreationTokens: record.cacheCreationTokens,
150
+ cacheReadTokens: record.cacheReadTokens
151
+ });
152
+ stats.totalCost += cost.totalCost;
153
+ // Aggregate by agent
154
+ if (record.agentName) {
155
+ if (!stats.byAgent[record.agentName]) {
156
+ stats.byAgent[record.agentName] = { tokens: 0, cost: 0 };
157
+ }
158
+ stats.byAgent[record.agentName].tokens += record.inputTokens + record.outputTokens;
159
+ stats.byAgent[record.agentName].cost += cost.totalCost;
160
+ }
161
+ // Aggregate by model
162
+ if (!stats.byModel[record.modelName]) {
163
+ stats.byModel[record.modelName] = { tokens: 0, cost: 0 };
164
+ }
165
+ stats.byModel[record.modelName].tokens += record.inputTokens + record.outputTokens;
166
+ stats.byModel[record.modelName].cost += cost.totalCost;
167
+ }
168
+ stats.sessionCount = sessions.size;
169
+ return stats;
170
+ }
171
+ catch (error) {
172
+ // If file doesn't exist or is empty, return empty stats
173
+ return stats;
174
+ }
175
+ }
176
+ async getTopAgentsAllSessions(limit = 5) {
177
+ const allStats = await this.getAllStats();
178
+ const agentStats = Object.entries(allStats.byAgent).map(([agent, stats]) => ({
179
+ agent,
180
+ tokens: stats.tokens,
181
+ cost: stats.cost
182
+ }));
183
+ return agentStats.sort((a, b) => b.cost - a.cost).slice(0, limit);
184
+ }
104
185
  async getTopAgents(limit = 5) {
105
186
  const { calculateCost } = await import('./cost-estimator.js');
106
187
  const agentStats = Object.entries(this.sessionStats.byAgent).map(([agent, usages]) => {
@@ -1 +1 @@
1
- {"version":3,"file":"token-tracker.js","sourceRoot":"","sources":["../../src/analytics/token-tracker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"token-tracker.js","sourceRoot":"","sources":["../../src/analytics/token-tracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import type { TranscriptEntry } from './types.js';
2
+ /**
3
+ * Options for transcript parsing.
4
+ */
5
+ export interface ParseTranscriptOptions {
6
+ /**
7
+ * AbortSignal to cancel parsing mid-stream.
8
+ */
9
+ signal?: AbortSignal;
10
+ /**
11
+ * Callback for parse errors (allows custom logging).
12
+ */
13
+ onParseError?: (line: string, error: Error) => void;
14
+ }
15
+ /**
16
+ * Streaming JSONL parser for transcript files.
17
+ * Parses line-by-line without loading the entire file into memory.
18
+ *
19
+ * @param filePath - Path to the transcript JSONL file
20
+ * @param options - Parsing options including AbortSignal
21
+ * @yields TranscriptEntry objects
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * const controller = new AbortController();
26
+ * for await (const entry of parseTranscript('transcript.jsonl', { signal: controller.signal })) {
27
+ * console.log(entry);
28
+ * }
29
+ * ```
30
+ */
31
+ export declare function parseTranscript(filePath: string, options?: ParseTranscriptOptions): AsyncGenerator<TranscriptEntry>;
32
+ /**
33
+ * Load all entries from a transcript file into memory.
34
+ * Use this for smaller files or when you need all entries at once.
35
+ * For large files, prefer the streaming `parseTranscript()` generator.
36
+ *
37
+ * @param filePath - Path to the transcript JSONL file
38
+ * @param options - Parsing options
39
+ * @returns Array of all transcript entries
40
+ */
41
+ export declare function loadTranscript(filePath: string, options?: ParseTranscriptOptions): Promise<TranscriptEntry[]>;
42
+ //# sourceMappingURL=transcript-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript-parser.d.ts","sourceRoot":"","sources":["../../src/analytics/transcript-parser.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;IAErB;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACrD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAuB,eAAe,CACpC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,sBAA2B,GACnC,cAAc,CAAC,eAAe,CAAC,CA2DjC;AAED;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,eAAe,EAAE,CAAC,CAQ5B"}
@@ -0,0 +1,90 @@
1
+ import * as fs from 'fs';
2
+ import * as readline from 'readline';
3
+ /**
4
+ * Streaming JSONL parser for transcript files.
5
+ * Parses line-by-line without loading the entire file into memory.
6
+ *
7
+ * @param filePath - Path to the transcript JSONL file
8
+ * @param options - Parsing options including AbortSignal
9
+ * @yields TranscriptEntry objects
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * const controller = new AbortController();
14
+ * for await (const entry of parseTranscript('transcript.jsonl', { signal: controller.signal })) {
15
+ * console.log(entry);
16
+ * }
17
+ * ```
18
+ */
19
+ export async function* parseTranscript(filePath, options = {}) {
20
+ const { signal, onParseError } = options;
21
+ // Check if file exists
22
+ if (!fs.existsSync(filePath)) {
23
+ throw new Error(`Transcript file not found: ${filePath}`);
24
+ }
25
+ const fileStream = fs.createReadStream(filePath, { encoding: 'utf8' });
26
+ const rl = readline.createInterface({
27
+ input: fileStream,
28
+ crlfDelay: Infinity // Treat \r\n as single line break
29
+ });
30
+ // Handle abort signal
31
+ const abortHandler = () => {
32
+ rl.close();
33
+ fileStream.destroy();
34
+ };
35
+ if (signal) {
36
+ signal.addEventListener('abort', abortHandler);
37
+ }
38
+ try {
39
+ for await (const line of rl) {
40
+ // Check abort before processing each line
41
+ if (signal?.aborted) {
42
+ break;
43
+ }
44
+ // Skip empty lines
45
+ if (!line.trim()) {
46
+ continue;
47
+ }
48
+ try {
49
+ const entry = JSON.parse(line);
50
+ yield entry;
51
+ }
52
+ catch (error) {
53
+ // Handle malformed JSON gracefully
54
+ const parseError = error instanceof Error ? error : new Error(String(error));
55
+ if (onParseError) {
56
+ onParseError(line, parseError);
57
+ }
58
+ else {
59
+ // Default: log warning and skip line
60
+ console.warn(`[transcript-parser] Skipping malformed line: ${parseError.message}`);
61
+ }
62
+ }
63
+ }
64
+ }
65
+ finally {
66
+ // Clean up
67
+ if (signal) {
68
+ signal.removeEventListener('abort', abortHandler);
69
+ }
70
+ rl.close();
71
+ fileStream.destroy();
72
+ }
73
+ }
74
+ /**
75
+ * Load all entries from a transcript file into memory.
76
+ * Use this for smaller files or when you need all entries at once.
77
+ * For large files, prefer the streaming `parseTranscript()` generator.
78
+ *
79
+ * @param filePath - Path to the transcript JSONL file
80
+ * @param options - Parsing options
81
+ * @returns Array of all transcript entries
82
+ */
83
+ export async function loadTranscript(filePath, options = {}) {
84
+ const entries = [];
85
+ for await (const entry of parseTranscript(filePath, options)) {
86
+ entries.push(entry);
87
+ }
88
+ return entries;
89
+ }
90
+ //# sourceMappingURL=transcript-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript-parser.js","sourceRoot":"","sources":["../../src/analytics/transcript-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AAkBrC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,eAAe,CACpC,QAAgB,EAChB,UAAkC,EAAE;IAEpC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;IAEzC,uBAAuB;IACvB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,8BAA8B,QAAQ,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,UAAU,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IACvE,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;QAClC,KAAK,EAAE,UAAU;QACjB,SAAS,EAAE,QAAQ,CAAC,kCAAkC;KACvD,CAAC,CAAC;IAEH,sBAAsB;IACtB,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,UAAU,CAAC,OAAO,EAAE,CAAC;IACvB,CAAC,CAAC;IAEF,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,CAAC;QACH,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,EAAE,EAAE,CAAC;YAC5B,0CAA0C;YAC1C,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;gBACpB,MAAM;YACR,CAAC;YAED,mBAAmB;YACnB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBACjB,SAAS;YACX,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAoB,CAAC;gBAClD,MAAM,KAAK,CAAC;YACd,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,mCAAmC;gBACnC,MAAM,UAAU,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAE7E,IAAI,YAAY,EAAE,CAAC;oBACjB,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBACjC,CAAC;qBAAM,CAAC;oBACN,qCAAqC;oBACrC,OAAO,CAAC,IAAI,CAAC,gDAAgD,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;gBACrF,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,WAAW;QACX,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QACpD,CAAC;QACD,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,UAAU,CAAC,OAAO,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,QAAgB,EAChB,UAAkC,EAAE;IAEpC,MAAM,OAAO,GAAsB,EAAE,CAAC;IAEtC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Metadata for a discovered transcript file
3
+ */
4
+ export interface TranscriptFile {
5
+ projectPath: string;
6
+ projectDir: string;
7
+ sessionId: string;
8
+ filePath: string;
9
+ fileSize: number;
10
+ modifiedTime: Date;
11
+ }
12
+ /**
13
+ * Result of scanning for transcripts
14
+ */
15
+ export interface ScanResult {
16
+ transcripts: TranscriptFile[];
17
+ totalSize: number;
18
+ projectCount: number;
19
+ }
20
+ /**
21
+ * Options for scanning transcripts
22
+ */
23
+ export interface ScanOptions {
24
+ projectFilter?: string;
25
+ minDate?: Date;
26
+ }
27
+ /**
28
+ * Decode project directory name back to original path.
29
+ *
30
+ * The encoding scheme used by Claude Code is lossy - it converts all path
31
+ * separators (/) to dashes (-), but legitimate dashes in directory names
32
+ * also become dashes, making them indistinguishable.
33
+ *
34
+ * Strategy:
35
+ * 1. Try simple decode (all dashes -> slashes) and check if path exists
36
+ * 2. If not, try to reconstruct by checking filesystem for partial matches
37
+ * 3. Fall back to simple decode if nothing else works
38
+ *
39
+ * Example: "-home-bellman-my-project"
40
+ * - Simple decode: "/home/bellman/my/project" (WRONG if "my-project" is one dir)
41
+ * - Smart decode: "/home/bellman/my-project" (checks filesystem)
42
+ *
43
+ * @internal Exported for testing
44
+ */
45
+ export declare function decodeProjectPath(dirName: string): string;
46
+ /**
47
+ * Scan for all transcript files in ~/.claude/projects/
48
+ */
49
+ export declare function scanTranscripts(options?: ScanOptions): Promise<ScanResult>;
50
+ //# sourceMappingURL=transcript-scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript-scanner.d.ts","sourceRoot":"","sources":["../../src/analytics/transcript-scanner.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,IAAI,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB;AAOD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CA+CzD;AAkBD;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,CA8EpF"}