@planckspace/cli 0.1.1 → 0.2.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 (190) hide show
  1. package/README.md +24 -1
  2. package/dist/anomaly/constants.d.ts +13 -0
  3. package/dist/anomaly/constants.d.ts.map +1 -0
  4. package/dist/anomaly/constants.js +13 -0
  5. package/dist/anomaly/constants.js.map +1 -0
  6. package/dist/anomaly/detector.d.ts +12 -0
  7. package/dist/anomaly/detector.d.ts.map +1 -0
  8. package/dist/anomaly/detector.js +98 -0
  9. package/dist/anomaly/detector.js.map +1 -0
  10. package/dist/anomaly/types.d.ts +19 -0
  11. package/dist/anomaly/types.d.ts.map +1 -0
  12. package/dist/anomaly/types.js +2 -0
  13. package/dist/anomaly/types.js.map +1 -0
  14. package/dist/commands/budget.d.ts +26 -0
  15. package/dist/commands/budget.d.ts.map +1 -0
  16. package/dist/commands/budget.js +91 -0
  17. package/dist/commands/budget.js.map +1 -0
  18. package/dist/commands/config.d.ts +4 -0
  19. package/dist/commands/config.d.ts.map +1 -0
  20. package/dist/commands/config.js +45 -0
  21. package/dist/commands/config.js.map +1 -0
  22. package/dist/commands/connect.d.ts +17 -0
  23. package/dist/commands/connect.d.ts.map +1 -0
  24. package/dist/commands/connect.js +191 -0
  25. package/dist/commands/connect.js.map +1 -0
  26. package/dist/commands/daemon.d.ts +8 -0
  27. package/dist/commands/daemon.d.ts.map +1 -0
  28. package/dist/commands/daemon.js +310 -0
  29. package/dist/commands/daemon.js.map +1 -0
  30. package/dist/commands/diagnose.d.ts +2 -0
  31. package/dist/commands/diagnose.d.ts.map +1 -0
  32. package/dist/commands/diagnose.js +81 -0
  33. package/dist/commands/diagnose.js.map +1 -0
  34. package/dist/commands/doctor.d.ts +2 -0
  35. package/dist/commands/doctor.d.ts.map +1 -0
  36. package/dist/commands/doctor.js +67 -0
  37. package/dist/commands/doctor.js.map +1 -0
  38. package/dist/commands/export.d.ts +40 -0
  39. package/dist/commands/export.d.ts.map +1 -0
  40. package/dist/commands/export.js +184 -0
  41. package/dist/commands/export.js.map +1 -0
  42. package/dist/commands/init.d.ts +3 -1
  43. package/dist/commands/init.d.ts.map +1 -1
  44. package/dist/commands/init.js +14 -1
  45. package/dist/commands/init.js.map +1 -1
  46. package/dist/commands/insights.d.ts +2 -0
  47. package/dist/commands/insights.d.ts.map +1 -0
  48. package/dist/commands/insights.js +71 -0
  49. package/dist/commands/insights.js.map +1 -0
  50. package/dist/commands/inspect.d.ts +2 -0
  51. package/dist/commands/inspect.d.ts.map +1 -0
  52. package/dist/commands/inspect.js +81 -0
  53. package/dist/commands/inspect.js.map +1 -0
  54. package/dist/commands/integrations.d.ts +2 -0
  55. package/dist/commands/integrations.d.ts.map +1 -0
  56. package/dist/commands/integrations.js +46 -0
  57. package/dist/commands/integrations.js.map +1 -0
  58. package/dist/commands/login.d.ts +1 -1
  59. package/dist/commands/login.d.ts.map +1 -1
  60. package/dist/commands/login.js +45 -6
  61. package/dist/commands/login.js.map +1 -1
  62. package/dist/commands/metrics.d.ts +6 -0
  63. package/dist/commands/metrics.d.ts.map +1 -0
  64. package/dist/commands/metrics.js +85 -0
  65. package/dist/commands/metrics.js.map +1 -0
  66. package/dist/commands/reconcile.d.ts +2 -0
  67. package/dist/commands/reconcile.d.ts.map +1 -0
  68. package/dist/commands/reconcile.js +63 -0
  69. package/dist/commands/reconcile.js.map +1 -0
  70. package/dist/commands/scan.d.ts.map +1 -1
  71. package/dist/commands/scan.js +53 -10
  72. package/dist/commands/scan.js.map +1 -1
  73. package/dist/commands/status.d.ts +1 -1
  74. package/dist/commands/status.d.ts.map +1 -1
  75. package/dist/commands/status.js +84 -14
  76. package/dist/commands/status.js.map +1 -1
  77. package/dist/commands/subscription.d.ts +15 -0
  78. package/dist/commands/subscription.d.ts.map +1 -0
  79. package/dist/commands/subscription.js +62 -0
  80. package/dist/commands/subscription.js.map +1 -0
  81. package/dist/commands/sync.d.ts +1 -1
  82. package/dist/commands/sync.d.ts.map +1 -1
  83. package/dist/commands/sync.js +77 -10
  84. package/dist/commands/sync.js.map +1 -1
  85. package/dist/commands/value.d.ts +5 -0
  86. package/dist/commands/value.d.ts.map +1 -0
  87. package/dist/commands/value.js +95 -0
  88. package/dist/commands/value.js.map +1 -0
  89. package/dist/config.d.ts +28 -3
  90. package/dist/config.d.ts.map +1 -1
  91. package/dist/config.js +9 -1
  92. package/dist/config.js.map +1 -1
  93. package/dist/correlate.d.ts +7 -0
  94. package/dist/correlate.d.ts.map +1 -1
  95. package/dist/correlate.js +102 -15
  96. package/dist/correlate.js.map +1 -1
  97. package/dist/daemon/daemon.d.ts +2 -0
  98. package/dist/daemon/daemon.d.ts.map +1 -0
  99. package/dist/daemon/daemon.js +188 -0
  100. package/dist/daemon/daemon.js.map +1 -0
  101. package/dist/daemon/daemonState.d.ts +25 -0
  102. package/dist/daemon/daemonState.d.ts.map +1 -0
  103. package/dist/daemon/daemonState.js +82 -0
  104. package/dist/daemon/daemonState.js.map +1 -0
  105. package/dist/daemon/logger.d.ts +7 -0
  106. package/dist/daemon/logger.d.ts.map +1 -0
  107. package/dist/daemon/logger.js +61 -0
  108. package/dist/daemon/logger.js.map +1 -0
  109. package/dist/daemon/syncLoop.d.ts +38 -0
  110. package/dist/daemon/syncLoop.d.ts.map +1 -0
  111. package/dist/daemon/syncLoop.js +119 -0
  112. package/dist/daemon/syncLoop.js.map +1 -0
  113. package/dist/daemon/watcher.d.ts +26 -0
  114. package/dist/daemon/watcher.d.ts.map +1 -0
  115. package/dist/daemon/watcher.js +187 -0
  116. package/dist/daemon/watcher.js.map +1 -0
  117. package/dist/db/store.d.ts +123 -2
  118. package/dist/db/store.d.ts.map +1 -1
  119. package/dist/db/store.js +397 -11
  120. package/dist/db/store.js.map +1 -1
  121. package/dist/detectors/cache-gap.d.ts +3 -0
  122. package/dist/detectors/cache-gap.d.ts.map +1 -0
  123. package/dist/detectors/cache-gap.js +70 -0
  124. package/dist/detectors/cache-gap.js.map +1 -0
  125. package/dist/detectors/context-bloat.d.ts +3 -0
  126. package/dist/detectors/context-bloat.d.ts.map +1 -0
  127. package/dist/detectors/context-bloat.js +68 -0
  128. package/dist/detectors/context-bloat.js.map +1 -0
  129. package/dist/detectors/fileTokens.d.ts +3 -0
  130. package/dist/detectors/fileTokens.d.ts.map +1 -0
  131. package/dist/detectors/fileTokens.js +12 -0
  132. package/dist/detectors/fileTokens.js.map +1 -0
  133. package/dist/detectors/index.d.ts +20 -0
  134. package/dist/detectors/index.d.ts.map +1 -0
  135. package/dist/detectors/index.js +41 -0
  136. package/dist/detectors/index.js.map +1 -0
  137. package/dist/detectors/model-routing.d.ts +3 -0
  138. package/dist/detectors/model-routing.d.ts.map +1 -0
  139. package/dist/detectors/model-routing.js +71 -0
  140. package/dist/detectors/model-routing.js.map +1 -0
  141. package/dist/detectors/repeat-read.d.ts +3 -0
  142. package/dist/detectors/repeat-read.d.ts.map +1 -0
  143. package/dist/detectors/repeat-read.js +69 -0
  144. package/dist/detectors/repeat-read.js.map +1 -0
  145. package/dist/detectors/seat-efficiency.d.ts +4 -0
  146. package/dist/detectors/seat-efficiency.d.ts.map +1 -0
  147. package/dist/detectors/seat-efficiency.js +86 -0
  148. package/dist/detectors/seat-efficiency.js.map +1 -0
  149. package/dist/detectors/types.d.ts +46 -0
  150. package/dist/detectors/types.d.ts.map +1 -0
  151. package/dist/detectors/types.js +2 -0
  152. package/dist/detectors/types.js.map +1 -0
  153. package/dist/health.d.ts +59 -0
  154. package/dist/health.d.ts.map +1 -0
  155. package/dist/health.js +106 -0
  156. package/dist/health.js.map +1 -0
  157. package/dist/index.js +389 -5
  158. package/dist/index.js.map +1 -1
  159. package/dist/metrics.d.ts +29 -0
  160. package/dist/metrics.d.ts.map +1 -0
  161. package/dist/metrics.js +205 -0
  162. package/dist/metrics.js.map +1 -0
  163. package/dist/scrapers/claudeCode.d.ts +1 -0
  164. package/dist/scrapers/claudeCode.d.ts.map +1 -1
  165. package/dist/scrapers/claudeCode.js +43 -13
  166. package/dist/scrapers/claudeCode.js.map +1 -1
  167. package/dist/scrapers/cursor.d.ts +3 -2
  168. package/dist/scrapers/cursor.d.ts.map +1 -1
  169. package/dist/scrapers/cursor.js +56 -16
  170. package/dist/scrapers/cursor.js.map +1 -1
  171. package/dist/scrapers/jetbrains.d.ts +15 -0
  172. package/dist/scrapers/jetbrains.d.ts.map +1 -0
  173. package/dist/scrapers/jetbrains.js +232 -0
  174. package/dist/scrapers/jetbrains.js.map +1 -0
  175. package/dist/scrapers/types.d.ts +4 -1
  176. package/dist/scrapers/types.d.ts.map +1 -1
  177. package/dist/scrapers/windsurf.d.ts +3 -2
  178. package/dist/scrapers/windsurf.d.ts.map +1 -1
  179. package/dist/scrapers/windsurf.js +25 -9
  180. package/dist/scrapers/windsurf.js.map +1 -1
  181. package/dist/sync/payload.d.ts +4 -5
  182. package/dist/sync/payload.d.ts.map +1 -1
  183. package/dist/sync/payload.js +88 -7
  184. package/dist/sync/payload.js.map +1 -1
  185. package/dist/sync/syncEngine.d.ts +19 -3
  186. package/dist/sync/syncEngine.d.ts.map +1 -1
  187. package/dist/sync/syncEngine.js +116 -10
  188. package/dist/sync/syncEngine.js.map +1 -1
  189. package/install.sh +27 -10
  190. package/package.json +43 -42
@@ -0,0 +1,205 @@
1
+ import fs from "fs";
2
+ import { simpleGit } from "simple-git";
3
+ import { getSessionsForMetrics } from "./db/store.js";
4
+ import { DEFAULT_BRANCH_CANDIDATES } from "./correlate.js";
5
+ const THIRTY_DAYS_MS = 30 * 24 * 60 * 60 * 1000;
6
+ function median(values) {
7
+ if (values.length === 0)
8
+ return null;
9
+ const sorted = [...values].sort((a, b) => a - b);
10
+ const mid = Math.floor(sorted.length / 2);
11
+ return sorted.length % 2 === 0
12
+ ? (sorted[mid - 1] + sorted[mid]) / 2
13
+ : sorted[mid];
14
+ }
15
+ // ── Git helpers ───────────────────────────────────────────────────────────────
16
+ async function resolveDefaultBranch(workingDir) {
17
+ try {
18
+ const git = simpleGit(workingDir);
19
+ const names = (await git.branchLocal()).all;
20
+ for (const name of DEFAULT_BRANCH_CANDIDATES) {
21
+ if (names.includes(name))
22
+ return name;
23
+ }
24
+ return null;
25
+ }
26
+ catch {
27
+ return null;
28
+ }
29
+ }
30
+ /**
31
+ * Lines added + deleted by a feature branch.
32
+ *
33
+ * Strategy 1 (merge commit): find the merge commit for `branch` on `defaultBranch`,
34
+ * then diff its first parent (main before merge) against its second parent (feature tip).
35
+ * This is exact for regular "Create merge commit" PRs.
36
+ *
37
+ * Strategy 2 (squash / fallback): three-dot diff default...branch.
38
+ * Works for squash-and-merge because the squash commit's content is on `defaultBranch`
39
+ * but the original feature tip hasn't moved, so merge-base(default, branch) is the
40
+ * branching point rather than the feature tip.
41
+ * Returns 0 for fast-forward merges (branch tip === default tip after merge).
42
+ */
43
+ async function getBranchDiffStat(workingDir, branch, defaultBranch) {
44
+ const parseStat = (raw) => {
45
+ const ins = parseInt(raw.match(/(\d+) insertion/)?.[1] ?? "0", 10);
46
+ const del = parseInt(raw.match(/(\d+) deletion/)?.[1] ?? "0", 10);
47
+ return ins + del;
48
+ };
49
+ const git = simpleGit(workingDir);
50
+ // Strategy 1: find the merge commit by searching for the branch name in merge commit messages
51
+ try {
52
+ const mergeHash = (await git.raw([
53
+ "log", defaultBranch, "--merges", `--grep=${branch}`, "--format=%H", "-1",
54
+ ])).trim();
55
+ if (mergeHash) {
56
+ const raw = await git.raw(["diff", "--shortstat", `${mergeHash}^1`, `${mergeHash}^2`]);
57
+ const lines = parseStat(raw);
58
+ if (lines > 0)
59
+ return lines;
60
+ }
61
+ }
62
+ catch {
63
+ // fall through to strategy 2
64
+ }
65
+ // Strategy 2: three-dot diff (squash merges or no identifiable merge commit)
66
+ try {
67
+ const raw = await git.raw(["diff", "--shortstat", `${defaultBranch}...${branch}`]);
68
+ return parseStat(raw);
69
+ }
70
+ catch {
71
+ return 0;
72
+ }
73
+ }
74
+ /** Local branches that have been fully merged into `defaultBranch`, excluding defaults. */
75
+ async function getMergedBranches(workingDir, defaultBranch) {
76
+ try {
77
+ const git = simpleGit(workingDir);
78
+ const raw = await git.raw(["branch", "--merged", defaultBranch]);
79
+ return raw
80
+ .split("\n")
81
+ .map((b) => b.replace(/^\*?\s+/, "").trim())
82
+ .filter((b) => b && !DEFAULT_BRANCH_CANDIDATES.includes(b));
83
+ }
84
+ catch {
85
+ return [];
86
+ }
87
+ }
88
+ // ── Core computation ──────────────────────────────────────────────────────────
89
+ /**
90
+ * Compute workspace-level productivity metrics from a set of sessions.
91
+ * `since30DaysIso` is used only for the timeToMergeMedian window.
92
+ */
93
+ async function computeWorkspaceMetrics(sessions, since30DaysIso) {
94
+ const shippedSessions = sessions.filter((s) => s.outcome === "shipped");
95
+ const recentShipped = shippedSessions.filter((s) => s.startedAt >= since30DaysIso);
96
+ // costPerShippedPr
97
+ const sessionsWithPr = shippedSessions.filter((s) => s.mergedPrNumber !== null);
98
+ const distinctPrs = new Set(sessionsWithPr.map((s) => `${s.repoName ?? ""}#${s.mergedPrNumber}`));
99
+ const totalCostShipped = shippedSessions.reduce((sum, s) => sum + s.costUsd, 0);
100
+ const costPerShippedPr = distinctPrs.size > 0 ? totalCostShipped / distinctPrs.size : null;
101
+ // costPerMergedLine — diffstat each distinct (workingDir, gitBranch) for shipped sessions
102
+ let totalLines = 0;
103
+ const processedBranches = new Set();
104
+ const repoGroups = new Map();
105
+ for (const s of shippedSessions) {
106
+ if (!s.workingDir || !s.gitBranch || !fs.existsSync(s.workingDir))
107
+ continue;
108
+ const key = s.workingDir;
109
+ if (!repoGroups.has(key))
110
+ repoGroups.set(key, []);
111
+ repoGroups.get(key).push(s);
112
+ }
113
+ for (const [workingDir, repoSessions] of repoGroups) {
114
+ const defaultBranch = await resolveDefaultBranch(workingDir);
115
+ if (!defaultBranch)
116
+ continue;
117
+ for (const s of repoSessions) {
118
+ const branchKey = `${workingDir}:${s.gitBranch}`;
119
+ if (processedBranches.has(branchKey))
120
+ continue;
121
+ processedBranches.add(branchKey);
122
+ totalLines += await getBranchDiffStat(workingDir, s.gitBranch, defaultBranch);
123
+ }
124
+ }
125
+ const costPerMergedLine = totalLines > 0 ? totalCostShipped / totalLines : null;
126
+ // timeToMergeMedian — last 30 days, ms
127
+ const ttmValues = recentShipped
128
+ .filter((s) => s.timeToMergeMs !== null)
129
+ .map((s) => s.timeToMergeMs);
130
+ const timeToMergeMedian = median(ttmValues);
131
+ // aiAdoptionRate — merged branches in tracked repos that had a session
132
+ const sessionBranchSet = new Set(sessions
133
+ .filter((s) => s.gitBranch && s.workingDir)
134
+ .map((s) => `${s.workingDir}:${s.gitBranch}`));
135
+ const trackedWorkingDirs = new Set(sessions.filter((s) => s.workingDir && fs.existsSync(s.workingDir)).map((s) => s.workingDir));
136
+ let totalMergedBranches = 0;
137
+ let adoptedBranches = 0;
138
+ for (const workingDir of trackedWorkingDirs) {
139
+ const defaultBranch = await resolveDefaultBranch(workingDir);
140
+ if (!defaultBranch)
141
+ continue;
142
+ const mergedBranches = await getMergedBranches(workingDir, defaultBranch);
143
+ totalMergedBranches += mergedBranches.length;
144
+ for (const branch of mergedBranches) {
145
+ if (sessionBranchSet.has(`${workingDir}:${branch}`))
146
+ adoptedBranches++;
147
+ }
148
+ }
149
+ const aiAdoptionRate = totalMergedBranches > 0 ? adoptedBranches / totalMergedBranches : null;
150
+ return { costPerShippedPr, costPerMergedLine, timeToMergeMedian, aiAdoptionRate };
151
+ }
152
+ /** Per-repo breakdown. */
153
+ async function computePerRepo(sessions, since30DaysIso) {
154
+ const byRepo = new Map();
155
+ for (const s of sessions) {
156
+ const key = s.repoName ?? "(unknown)";
157
+ if (!byRepo.has(key))
158
+ byRepo.set(key, []);
159
+ byRepo.get(key).push(s);
160
+ }
161
+ const results = [];
162
+ for (const [repoName, repoSessions] of byRepo) {
163
+ const ws = await computeWorkspaceMetrics(repoSessions, since30DaysIso);
164
+ results.push({ repoName, ...ws });
165
+ }
166
+ return results.sort((a, b) => a.repoName.localeCompare(b.repoName));
167
+ }
168
+ /** Per-developer breakdown (respects workspace privacy policy described in spec). */
169
+ function computePerDeveloper(sessions, since30DaysIso) {
170
+ const byDev = new Map();
171
+ for (const s of sessions) {
172
+ const key = s.gitAuthorEmail ?? "(unattributed)";
173
+ if (!byDev.has(key))
174
+ byDev.set(key, { totalCostUsd: 0, prNums: new Set(), ttmValues: [] });
175
+ const d = byDev.get(key);
176
+ d.totalCostUsd += s.costUsd;
177
+ if (s.outcome === "shipped" && s.mergedPrNumber !== null) {
178
+ d.prNums.add(`${s.repoName ?? ""}#${s.mergedPrNumber}`);
179
+ }
180
+ if (s.outcome === "shipped" &&
181
+ s.timeToMergeMs !== null &&
182
+ s.startedAt >= since30DaysIso) {
183
+ d.ttmValues.push(s.timeToMergeMs);
184
+ }
185
+ }
186
+ return [...byDev.entries()]
187
+ .map(([gitAuthorEmail, d]) => ({
188
+ gitAuthorEmail,
189
+ totalCostUsd: d.totalCostUsd,
190
+ shippedPrCount: d.prNums.size,
191
+ timeToMergeMedian: median(d.ttmValues),
192
+ }))
193
+ .sort((a, b) => b.totalCostUsd - a.totalCostUsd);
194
+ }
195
+ export async function computeProductivityMetrics(opts = {}) {
196
+ const since30DaysIso = new Date(Date.now() - THIRTY_DAYS_MS).toISOString();
197
+ const sessions = getSessionsForMetrics(opts.since);
198
+ const [workspace, perRepo] = await Promise.all([
199
+ computeWorkspaceMetrics(sessions, since30DaysIso),
200
+ computePerRepo(sessions, since30DaysIso),
201
+ ]);
202
+ const perDeveloper = computePerDeveloper(sessions, since30DaysIso);
203
+ return { ...workspace, perRepo, perDeveloper };
204
+ }
205
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { ParsedSession } from "./types.js";
2
2
  export type { Turn, ParsedSession } from "./types.js";
3
+ export declare function parseClaudeCodeFile(filePath: string, sessionId: string): ParsedSession | null;
3
4
  export declare function scanClaudeCodeLogs(): Promise<ParsedSession[]>;
4
5
  //# sourceMappingURL=claudeCode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"claudeCode.d.ts","sourceRoot":"","sources":["../../src/scrapers/claudeCode.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAQ,aAAa,EAAE,MAAM,YAAY,CAAC;AAGtD,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAoPtD,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAsCnE"}
1
+ {"version":3,"file":"claudeCode.d.ts","sourceRoot":"","sources":["../../src/scrapers/claudeCode.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAQ,aAAa,EAAE,MAAM,YAAY,CAAC;AAGtD,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAwFtD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAwL7F;AAID,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAsCnE"}
@@ -1,7 +1,7 @@
1
1
  import fs from "fs";
2
2
  import path from "path";
3
3
  import os from "os";
4
- import { computeCostUsd } from "@planckspace/core";
4
+ import { computeCostUsd, UnknownModelError } from "@planckspace/core";
5
5
  import { resolveRepo } from "./repo.js";
6
6
  // ── File-touch detection ──────────────────────────────────────────────────────
7
7
  const FILE_TOOLS = new Set(["Read", "Edit", "Write", "NotebookEdit"]);
@@ -14,6 +14,15 @@ function extractFilePath(item) {
14
14
  inp["path"];
15
15
  return fp ?? null;
16
16
  }
17
+ // ── costType inference ────────────────────────────────────────────────────────
18
+ // Check CLAUDE_CODE_BILLING_MODE env. Default is "imputed" (Pro/Max subscription)
19
+ // since that is the safe assumption — we never claim a metered charge wasn't made.
20
+ function inferCostType() {
21
+ const mode = process.env.CLAUDE_CODE_BILLING_MODE?.toLowerCase();
22
+ if (mode === "token" || mode === "api" || mode === "billed")
23
+ return "billed";
24
+ return "imputed";
25
+ }
17
26
  // ── JSONL parsing ─────────────────────────────────────────────────────────────
18
27
  function parseLine(raw) {
19
28
  const trimmed = raw.trim();
@@ -26,7 +35,7 @@ function parseLine(raw) {
26
35
  return null;
27
36
  }
28
37
  }
29
- function parseSessionFile(filePath, sessionId) {
38
+ export function parseClaudeCodeFile(filePath, sessionId) {
30
39
  let rawLines;
31
40
  try {
32
41
  rawLines = fs.readFileSync(filePath, "utf-8").split("\n");
@@ -92,13 +101,16 @@ function parseSessionFile(filePath, sessionId) {
92
101
  }
93
102
  }
94
103
  }
95
- // Aggregate tokens & build turns; cost computed per-turn with that turn's model.
104
+ // Aggregate tokens & build turns. Cost is computed per-turn with that turn's own
105
+ // model. UnknownModelError → skip cost contribution, record as unmatchedTurns.
96
106
  let totalInput = 0;
97
107
  let totalOutput = 0;
98
108
  let totalCacheRead = 0;
99
109
  let totalCacheWrite = 0;
100
110
  let totalCost = 0;
101
111
  let sessionModel = "";
112
+ let unmatchedTurns = 0;
113
+ const unmatchedModels = new Map(); // model → count
102
114
  const turns = [];
103
115
  const allFilesTouched = new Set();
104
116
  const orderedMsgs = [...msgMap.values()].sort((a, b) => a.order - b.order);
@@ -112,11 +124,23 @@ function parseSessionFile(filePath, sessionId) {
112
124
  totalOutput += out;
113
125
  totalCacheRead += cr;
114
126
  totalCacheWrite += cw;
115
- const turnCost = computeCostUsd({ inputTokens: inp, outputTokens: out, cacheReadTokens: cr, cacheWriteTokens: cw }, m.model);
116
- totalCost += turnCost;
127
+ let turnCost = 0;
128
+ try {
129
+ turnCost = computeCostUsd({ inputTokens: inp, outputTokens: out, cacheReadTokens: cr, cacheWriteTokens: cw }, m.model);
130
+ totalCost += turnCost;
131
+ }
132
+ catch (err) {
133
+ if (err instanceof UnknownModelError) {
134
+ unmatchedTurns++;
135
+ unmatchedModels.set(m.model, (unmatchedModels.get(m.model) ?? 0) + 1);
136
+ // turnCost stays 0; contribution intentionally excluded
137
+ }
138
+ else {
139
+ throw err;
140
+ }
141
+ }
117
142
  if (!sessionModel)
118
143
  sessionModel = m.model;
119
- // Aggregate tool calls
120
144
  const toolCounts = new Map();
121
145
  const turnFiles = [];
122
146
  for (const item of m.toolItems) {
@@ -127,10 +151,7 @@ function parseSessionFile(filePath, sessionId) {
127
151
  allFilesTouched.add(fp);
128
152
  }
129
153
  }
130
- const toolCalls = [...toolCounts.entries()].map(([name, count]) => ({
131
- name,
132
- count,
133
- }));
154
+ const toolCalls = [...toolCounts.entries()].map(([name, count]) => ({ name, count }));
134
155
  turns.push({
135
156
  sequence: seq + 1,
136
157
  model: m.model,
@@ -146,9 +167,15 @@ function parseSessionFile(filePath, sessionId) {
146
167
  }
147
168
  if (turns.length === 0)
148
169
  return null;
170
+ // Log one warning summarising all unrecognised models for this session.
171
+ if (unmatchedModels.size > 0) {
172
+ const summary = [...unmatchedModels.entries()]
173
+ .map(([model, n]) => `"${model}" ×${n}`)
174
+ .join(", ");
175
+ console.warn(`[claudeCode] WARNING — ${unmatchedTurns} unpriced turn(s) in session ${sessionId}: unknown model(s) ${summary}. Cost for those turns excluded (not zeroed).`);
176
+ }
149
177
  const { repoName, gitBranch: gitBranchFromGit } = resolveRepo(workingDir);
150
178
  const gitBranch = gitBranchFromLog ?? gitBranchFromGit;
151
- const costUsd = totalCost;
152
179
  return {
153
180
  sessionId,
154
181
  tool: "claude_code",
@@ -159,7 +186,10 @@ function parseSessionFile(filePath, sessionId) {
159
186
  outputTokens: totalOutput,
160
187
  cacheReadTokens: totalCacheRead,
161
188
  cacheWriteTokens: totalCacheWrite,
162
- costUsd,
189
+ costUsd: totalCost,
190
+ costType: inferCostType(),
191
+ subscriptionPlan: null,
192
+ unmatchedTurns,
163
193
  turns,
164
194
  workingDir,
165
195
  turnCount: turns.length,
@@ -197,7 +227,7 @@ export async function scanClaudeCodeLogs() {
197
227
  const sessionId = entry.name.replace(/\.jsonl$/, "");
198
228
  const filePath = path.join(projectDir, entry.name);
199
229
  try {
200
- const session = parseSessionFile(filePath, sessionId);
230
+ const session = parseClaudeCodeFile(filePath, sessionId);
201
231
  if (session)
202
232
  sessions.push(session);
203
233
  }
@@ -1 +1 @@
1
- {"version":3,"file":"claudeCode.js","sourceRoot":"","sources":["../../src/scrapers/claudeCode.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claudeCode.js","sourceRoot":"","sources":["../../src/scrapers/claudeCode.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,8 @@ import type { ParsedSession } from "./types.js";
3
3
  export declare function defaultCursorDbPath(): string;
4
4
  /**
5
5
  * Scan Cursor's global state DB for composer/agent sessions.
6
- * @param dbPath override the DB location (used by tests). Defaults to the OS path.
6
+ * @param dbPath Override the DB location (used by tests). Defaults to the OS path.
7
+ * @param billingMode "billed" if the user registered cursor with plan=api; else "imputed".
7
8
  */
8
- export declare function scanCursorLogs(dbPath?: string): ParsedSession[];
9
+ export declare function scanCursorLogs(dbPath?: string, billingMode?: "billed" | "imputed"): ParsedSession[];
9
10
  //# sourceMappingURL=cursor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/scrapers/cursor.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAQ,aAAa,EAAE,MAAM,YAAY,CAAC;AAiFtD,uDAAuD;AACvD,wBAAgB,mBAAmB,IAAI,MAAM,CAU5C;AAuMD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,SAAwB,GAAG,aAAa,EAAE,CAwD9E"}
1
+ {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/scrapers/cursor.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAQ,aAAa,EAAE,MAAM,YAAY,CAAC;AAiGtD,uDAAuD;AACvD,wBAAgB,mBAAmB,IAAI,MAAM,CAU5C;AAkOD;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,MAAM,SAAwB,EAC9B,WAAW,GAAE,QAAQ,GAAG,SAAqB,GAC5C,aAAa,EAAE,CAiEjB"}
@@ -2,11 +2,13 @@ import fs from "fs";
2
2
  import path from "path";
3
3
  import os from "os";
4
4
  import Database from "better-sqlite3";
5
- import { computeCostUsd } from "@planckspace/core";
5
+ import { computeCostUsd, UnknownModelError } from "@planckspace/core";
6
6
  import { resolveRepo } from "./repo.js";
7
7
  // Cursor tool names that operate on a single file; used to harvest touched paths.
8
8
  // Cursor versions tool names (e.g. `edit_file_v2`, `read_file_v2`), so we compare
9
9
  // against the name with any trailing `_vN` stripped.
10
+ // Note: directory-search tools (glob_file_search, ripgrep_raw_search) are NOT here
11
+ // because their `targetDirectory`/`path` params are directories, not files.
10
12
  const FILE_TOOL_NAMES = new Set([
11
13
  "edit_file",
12
14
  "write",
@@ -17,12 +19,14 @@ const FILE_TOOL_NAMES = new Set([
17
19
  "read_file",
18
20
  "delete_file",
19
21
  "reapply",
22
+ "str_replace_editor", // agent edit variant used in some Cursor builds
20
23
  ]);
21
24
  function isFileTool(name) {
22
25
  return FILE_TOOL_NAMES.has(name.replace(/_v\d+$/, ""));
23
26
  }
24
27
  // Param keys Cursor uses to name the target file, across tool variants.
25
- const PATH_PARAM_KEYS = ["relativeWorkspacePath", "targetFile", "target_file", "path", "file", "filePath", "uri"];
28
+ // effectiveUri is a verified June-2026 alias for targetFile in read_file_v2.
29
+ const PATH_PARAM_KEYS = ["relativeWorkspacePath", "targetFile", "effectiveUri", "target_file", "path", "file", "filePath", "uri"];
26
30
  // ── DB location ─────────────────────────────────────────────────────────────────
27
31
  /** Cross-platform path to Cursor's global state DB. */
28
32
  export function defaultCursorDbPath() {
@@ -86,8 +90,20 @@ function workspaceDir(header, bubbles) {
86
90
  }
87
91
  return "";
88
92
  }
93
+ /** Decode file paths from ofsContent keys: "ofsContent:<id>:file:///..." → fs path. */
94
+ function decodeOfsPath(key, prefix) {
95
+ const suffix = key.slice(prefix.length);
96
+ try {
97
+ const url = new URL(suffix);
98
+ // On Windows the pathname starts with /D:/... — strip the leading slash.
99
+ return decodeURIComponent(url.pathname.replace(/^\/([A-Za-z]:)/, "$1"));
100
+ }
101
+ catch {
102
+ return null;
103
+ }
104
+ }
89
105
  // ── Per-composer parsing ──────────────────────────────────────────────────────────
90
- function buildSession(header, data, bubbles) {
106
+ function buildSession(header, data, bubbles, ofsFiles, billingMode) {
91
107
  const composerId = header.composerId;
92
108
  // Ordered list of messages; prefer the composer's own ordering, else fall back
93
109
  // to whatever bubbles we found.
@@ -114,6 +130,7 @@ function buildSession(header, data, bubbles) {
114
130
  let totalInput = 0;
115
131
  let totalOutput = 0;
116
132
  let totalCost = 0;
133
+ let unmatchedTurns = 0;
117
134
  const turns = [];
118
135
  const timestamps = [];
119
136
  const allFiles = new Set();
@@ -164,7 +181,17 @@ function buildSession(header, data, bubbles) {
164
181
  const model = bubble.modelInfo?.modelName || sessionModel;
165
182
  current.inputTokens += inp;
166
183
  current.outputTokens += out;
167
- current.costUsd += computeCostUsd({ inputTokens: inp, outputTokens: out, cacheReadTokens: 0, cacheWriteTokens: 0 }, model);
184
+ try {
185
+ current.costUsd += computeCostUsd({ inputTokens: inp, outputTokens: out, cacheReadTokens: 0, cacheWriteTokens: 0 }, model);
186
+ }
187
+ catch (err) {
188
+ if (err instanceof UnknownModelError) {
189
+ unmatchedTurns++;
190
+ }
191
+ else {
192
+ throw err;
193
+ }
194
+ }
168
195
  if (model && model !== "default")
169
196
  current.model = model;
170
197
  totalInput += inp;
@@ -193,11 +220,11 @@ function buildSession(header, data, bubbles) {
193
220
  startedAt;
194
221
  const workingDir = workspaceDir(header, [...bubbles.values()]);
195
222
  const { repoName, gitBranch } = resolveRepo(workingDir);
196
- // Cursor's own count of files the agent modified is more reliable than scraping
197
- // every tool variant's arguments; fall back to what we harvested if absent.
198
- const filesTouchedCount = header.filesChangedCount ?? allFiles.size;
199
- // turnCount = number of user prompts (exchanges), the comparable unit to a
200
- // Claude Code "turn".
223
+ // Priority order for file count:
224
+ // 1. Header's authoritative filesChangedCount (files the agent *modified*).
225
+ // 2. ofsContent key count (all files the agent opened — includes reads).
226
+ // 3. Paths harvested from tool call args.
227
+ const filesTouchedCount = header.filesChangedCount ?? (ofsFiles.size > 0 ? ofsFiles.size : allFiles.size);
201
228
  const turnCount = turns.length;
202
229
  return {
203
230
  sessionId: `cursor:${composerId}`,
@@ -210,6 +237,9 @@ function buildSession(header, data, bubbles) {
210
237
  cacheReadTokens: 0,
211
238
  cacheWriteTokens: 0,
212
239
  costUsd: totalCost,
240
+ costType: billingMode,
241
+ subscriptionPlan: null,
242
+ unmatchedTurns,
213
243
  turns,
214
244
  workingDir,
215
245
  turnCount,
@@ -221,15 +251,16 @@ function buildSession(header, data, bubbles) {
221
251
  // ── Main entrypoint ─────────────────────────────────────────────────────────────
222
252
  /**
223
253
  * Scan Cursor's global state DB for composer/agent sessions.
224
- * @param dbPath override the DB location (used by tests). Defaults to the OS path.
254
+ * @param dbPath Override the DB location (used by tests). Defaults to the OS path.
255
+ * @param billingMode "billed" if the user registered cursor with plan=api; else "imputed".
225
256
  */
226
- export function scanCursorLogs(dbPath = defaultCursorDbPath()) {
257
+ export function scanCursorLogs(dbPath = defaultCursorDbPath(), billingMode = "imputed") {
227
258
  if (!fs.existsSync(dbPath)) {
228
259
  return []; // Cursor not installed / no history — silent, this is expected.
229
260
  }
230
261
  let db;
231
262
  try {
232
- // readonly + immutable-ish open; Cursor may be running with the DB in WAL mode.
263
+ // readonly open; Cursor may have the DB open in WAL mode while running.
233
264
  db = new Database(dbPath, { readonly: true, fileMustExist: true });
234
265
  }
235
266
  catch (err) {
@@ -248,6 +279,7 @@ export function scanCursorLogs(dbPath = defaultCursorDbPath()) {
248
279
  return [];
249
280
  const dataStmt = db.prepare("SELECT value FROM cursorDiskKV WHERE key = ?");
250
281
  const bubbleStmt = db.prepare("SELECT key, value FROM cursorDiskKV WHERE key LIKE ?");
282
+ const ofsStmt = db.prepare("SELECT key FROM cursorDiskKV WHERE key LIKE ?");
251
283
  const sessions = [];
252
284
  for (const header of headers) {
253
285
  if (!header?.composerId)
@@ -256,14 +288,22 @@ export function scanCursorLogs(dbPath = defaultCursorDbPath()) {
256
288
  const dataRow = dataStmt.get(`composerData:${header.composerId}`);
257
289
  const data = dataRow ? parseJson(dataRow.value.toString()) : null;
258
290
  const bubbles = new Map();
259
- const prefix = `bubbleId:${header.composerId}:`;
260
- for (const row of bubbleStmt.all(`${prefix}%`)) {
261
- const bubbleId = row.key.slice(prefix.length);
291
+ const bubblePrefix = `bubbleId:${header.composerId}:`;
292
+ for (const row of bubbleStmt.all(`${bubblePrefix}%`)) {
293
+ const bubbleId = row.key.slice(bubblePrefix.length);
262
294
  const b = parseJson(row.value.toString());
263
295
  if (b)
264
296
  bubbles.set(bubbleId, b);
265
297
  }
266
- const session = buildSession(header, data, bubbles);
298
+ // ofsContent keys encode the complete set of files the agent opened.
299
+ const ofsPrefix = `ofsContent:${header.composerId}:`;
300
+ const ofsFiles = new Set();
301
+ for (const row of ofsStmt.all(`${ofsPrefix}%`)) {
302
+ const fp = decodeOfsPath(row.key, ofsPrefix);
303
+ if (fp)
304
+ ofsFiles.add(fp);
305
+ }
306
+ const session = buildSession(header, data, bubbles, ofsFiles, billingMode);
267
307
  if (session)
268
308
  sessions.push(session);
269
309
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/scrapers/cursor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/scrapers/cursor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { ParsedSession } from "./types.js";
2
+ /** Base directory that contains per-product JetBrains config dirs. */
3
+ export declare function jetBrainsConfigBase(): string;
4
+ /** Returns all recognised JetBrains product-version config directories found on disk. */
5
+ export declare function findJetBrainsProductDirs(): string[];
6
+ /**
7
+ * Scan JetBrains AI Assistant history.
8
+ *
9
+ * Returns parsed sessions if data is interpretable. If JetBrains IDEs are
10
+ * installed but the AI data format is not yet recognised, prints a single
11
+ * diagnostic line and returns []. If JetBrains is not installed, returns []
12
+ * silently.
13
+ */
14
+ export declare function scanJetBrainsLogs(): ParsedSession[];
15
+ //# sourceMappingURL=jetbrains.d.ts.map