@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.
- package/README.md +24 -1
- package/dist/anomaly/constants.d.ts +13 -0
- package/dist/anomaly/constants.d.ts.map +1 -0
- package/dist/anomaly/constants.js +13 -0
- package/dist/anomaly/constants.js.map +1 -0
- package/dist/anomaly/detector.d.ts +12 -0
- package/dist/anomaly/detector.d.ts.map +1 -0
- package/dist/anomaly/detector.js +98 -0
- package/dist/anomaly/detector.js.map +1 -0
- package/dist/anomaly/types.d.ts +19 -0
- package/dist/anomaly/types.d.ts.map +1 -0
- package/dist/anomaly/types.js +2 -0
- package/dist/anomaly/types.js.map +1 -0
- package/dist/commands/budget.d.ts +26 -0
- package/dist/commands/budget.d.ts.map +1 -0
- package/dist/commands/budget.js +91 -0
- package/dist/commands/budget.js.map +1 -0
- package/dist/commands/config.d.ts +4 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +45 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/connect.d.ts +17 -0
- package/dist/commands/connect.d.ts.map +1 -0
- package/dist/commands/connect.js +191 -0
- package/dist/commands/connect.js.map +1 -0
- package/dist/commands/daemon.d.ts +8 -0
- package/dist/commands/daemon.d.ts.map +1 -0
- package/dist/commands/daemon.js +310 -0
- package/dist/commands/daemon.js.map +1 -0
- package/dist/commands/diagnose.d.ts +2 -0
- package/dist/commands/diagnose.d.ts.map +1 -0
- package/dist/commands/diagnose.js +81 -0
- package/dist/commands/diagnose.js.map +1 -0
- package/dist/commands/doctor.d.ts +2 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +67 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/export.d.ts +40 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +184 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/init.d.ts +3 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +14 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/insights.d.ts +2 -0
- package/dist/commands/insights.d.ts.map +1 -0
- package/dist/commands/insights.js +71 -0
- package/dist/commands/insights.js.map +1 -0
- package/dist/commands/inspect.d.ts +2 -0
- package/dist/commands/inspect.d.ts.map +1 -0
- package/dist/commands/inspect.js +81 -0
- package/dist/commands/inspect.js.map +1 -0
- package/dist/commands/integrations.d.ts +2 -0
- package/dist/commands/integrations.d.ts.map +1 -0
- package/dist/commands/integrations.js +46 -0
- package/dist/commands/integrations.js.map +1 -0
- package/dist/commands/login.d.ts +1 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +45 -6
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/metrics.d.ts +6 -0
- package/dist/commands/metrics.d.ts.map +1 -0
- package/dist/commands/metrics.js +85 -0
- package/dist/commands/metrics.js.map +1 -0
- package/dist/commands/reconcile.d.ts +2 -0
- package/dist/commands/reconcile.d.ts.map +1 -0
- package/dist/commands/reconcile.js +63 -0
- package/dist/commands/reconcile.js.map +1 -0
- package/dist/commands/scan.d.ts.map +1 -1
- package/dist/commands/scan.js +53 -10
- package/dist/commands/scan.js.map +1 -1
- package/dist/commands/status.d.ts +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +84 -14
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/subscription.d.ts +15 -0
- package/dist/commands/subscription.d.ts.map +1 -0
- package/dist/commands/subscription.js +62 -0
- package/dist/commands/subscription.js.map +1 -0
- package/dist/commands/sync.d.ts +1 -1
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +77 -10
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/value.d.ts +5 -0
- package/dist/commands/value.d.ts.map +1 -0
- package/dist/commands/value.js +95 -0
- package/dist/commands/value.js.map +1 -0
- package/dist/config.d.ts +28 -3
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +9 -1
- package/dist/config.js.map +1 -1
- package/dist/correlate.d.ts +7 -0
- package/dist/correlate.d.ts.map +1 -1
- package/dist/correlate.js +102 -15
- package/dist/correlate.js.map +1 -1
- package/dist/daemon/daemon.d.ts +2 -0
- package/dist/daemon/daemon.d.ts.map +1 -0
- package/dist/daemon/daemon.js +188 -0
- package/dist/daemon/daemon.js.map +1 -0
- package/dist/daemon/daemonState.d.ts +25 -0
- package/dist/daemon/daemonState.d.ts.map +1 -0
- package/dist/daemon/daemonState.js +82 -0
- package/dist/daemon/daemonState.js.map +1 -0
- package/dist/daemon/logger.d.ts +7 -0
- package/dist/daemon/logger.d.ts.map +1 -0
- package/dist/daemon/logger.js +61 -0
- package/dist/daemon/logger.js.map +1 -0
- package/dist/daemon/syncLoop.d.ts +38 -0
- package/dist/daemon/syncLoop.d.ts.map +1 -0
- package/dist/daemon/syncLoop.js +119 -0
- package/dist/daemon/syncLoop.js.map +1 -0
- package/dist/daemon/watcher.d.ts +26 -0
- package/dist/daemon/watcher.d.ts.map +1 -0
- package/dist/daemon/watcher.js +187 -0
- package/dist/daemon/watcher.js.map +1 -0
- package/dist/db/store.d.ts +123 -2
- package/dist/db/store.d.ts.map +1 -1
- package/dist/db/store.js +397 -11
- package/dist/db/store.js.map +1 -1
- package/dist/detectors/cache-gap.d.ts +3 -0
- package/dist/detectors/cache-gap.d.ts.map +1 -0
- package/dist/detectors/cache-gap.js +70 -0
- package/dist/detectors/cache-gap.js.map +1 -0
- package/dist/detectors/context-bloat.d.ts +3 -0
- package/dist/detectors/context-bloat.d.ts.map +1 -0
- package/dist/detectors/context-bloat.js +68 -0
- package/dist/detectors/context-bloat.js.map +1 -0
- package/dist/detectors/fileTokens.d.ts +3 -0
- package/dist/detectors/fileTokens.d.ts.map +1 -0
- package/dist/detectors/fileTokens.js +12 -0
- package/dist/detectors/fileTokens.js.map +1 -0
- package/dist/detectors/index.d.ts +20 -0
- package/dist/detectors/index.d.ts.map +1 -0
- package/dist/detectors/index.js +41 -0
- package/dist/detectors/index.js.map +1 -0
- package/dist/detectors/model-routing.d.ts +3 -0
- package/dist/detectors/model-routing.d.ts.map +1 -0
- package/dist/detectors/model-routing.js +71 -0
- package/dist/detectors/model-routing.js.map +1 -0
- package/dist/detectors/repeat-read.d.ts +3 -0
- package/dist/detectors/repeat-read.d.ts.map +1 -0
- package/dist/detectors/repeat-read.js +69 -0
- package/dist/detectors/repeat-read.js.map +1 -0
- package/dist/detectors/seat-efficiency.d.ts +4 -0
- package/dist/detectors/seat-efficiency.d.ts.map +1 -0
- package/dist/detectors/seat-efficiency.js +86 -0
- package/dist/detectors/seat-efficiency.js.map +1 -0
- package/dist/detectors/types.d.ts +46 -0
- package/dist/detectors/types.d.ts.map +1 -0
- package/dist/detectors/types.js +2 -0
- package/dist/detectors/types.js.map +1 -0
- package/dist/health.d.ts +59 -0
- package/dist/health.d.ts.map +1 -0
- package/dist/health.js +106 -0
- package/dist/health.js.map +1 -0
- package/dist/index.js +389 -5
- package/dist/index.js.map +1 -1
- package/dist/metrics.d.ts +29 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +205 -0
- package/dist/metrics.js.map +1 -0
- package/dist/scrapers/claudeCode.d.ts +1 -0
- package/dist/scrapers/claudeCode.d.ts.map +1 -1
- package/dist/scrapers/claudeCode.js +43 -13
- package/dist/scrapers/claudeCode.js.map +1 -1
- package/dist/scrapers/cursor.d.ts +3 -2
- package/dist/scrapers/cursor.d.ts.map +1 -1
- package/dist/scrapers/cursor.js +56 -16
- package/dist/scrapers/cursor.js.map +1 -1
- package/dist/scrapers/jetbrains.d.ts +15 -0
- package/dist/scrapers/jetbrains.d.ts.map +1 -0
- package/dist/scrapers/jetbrains.js +232 -0
- package/dist/scrapers/jetbrains.js.map +1 -0
- package/dist/scrapers/types.d.ts +4 -1
- package/dist/scrapers/types.d.ts.map +1 -1
- package/dist/scrapers/windsurf.d.ts +3 -2
- package/dist/scrapers/windsurf.d.ts.map +1 -1
- package/dist/scrapers/windsurf.js +25 -9
- package/dist/scrapers/windsurf.js.map +1 -1
- package/dist/sync/payload.d.ts +4 -5
- package/dist/sync/payload.d.ts.map +1 -1
- package/dist/sync/payload.js +88 -7
- package/dist/sync/payload.js.map +1 -1
- package/dist/sync/syncEngine.d.ts +19 -3
- package/dist/sync/syncEngine.d.ts.map +1 -1
- package/dist/sync/syncEngine.js +116 -10
- package/dist/sync/syncEngine.js.map +1 -1
- package/install.sh +27 -10
- package/package.json +43 -42
package/dist/metrics.js
ADDED
|
@@ -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;
|
|
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
|
|
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
|
|
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
|
-
|
|
116
|
-
|
|
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 =
|
|
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":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;
|
|
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
|
|
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;
|
|
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"}
|
package/dist/scrapers/cursor.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
//
|
|
197
|
-
//
|
|
198
|
-
|
|
199
|
-
//
|
|
200
|
-
|
|
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
|
|
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
|
|
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
|
|
260
|
-
for (const row of bubbleStmt.all(`${
|
|
261
|
-
const bubbleId = row.key.slice(
|
|
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
|
-
|
|
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
|