@ascenda-one/history-import 0.1.12

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vscode.js","sourceRoot":"","sources":["../../src/extractors/vscode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,238 @@
1
+ /**
2
+ * Local handoff into the desktop app's sandbox container.
3
+ *
4
+ * The problem this solves: the macOS app is sandboxed and can never read
5
+ * `~/.claude` or `~/.ascenda`, but it CAN read its own container — and the
6
+ * live-presence bus already establishes the pattern of an unsandboxed
7
+ * collector writing into `~/Library/Containers/<bundle>/Data/.ascenda/`
8
+ * (see tool-kit's `liveBusSocketCandidates`). The importer writes its
9
+ * session digest there and the app picks it up with no entitlement, no
10
+ * Powerbox prompt, and no backend round-trip.
11
+ *
12
+ * Why local at all, when the events already ship to the backend: the
13
+ * timeline is a local-first surface, and the demand view that would
14
+ * otherwise carry this is Pro-gated. Historical notches are part of the
15
+ * free first-run experience, so they must not depend on an entitlement or
16
+ * on the network.
17
+ *
18
+ * This file is a TRANSFER BUFFER, not a store of record. The app copies
19
+ * what it needs into its own journal and may delete it afterwards; a lost
20
+ * or stale handoff costs a re-run of the importer, nothing more.
21
+ *
22
+ * Privacy: this file never leaves the machine, so it may carry the
23
+ * human-readable project label the app needs to name a notch. It still
24
+ * carries no prompt text, response text, or file contents — the same
25
+ * metrics-only rule as the wire, minus the hashing that only exists to
26
+ * keep paths from reaching a server.
27
+ */
28
+ import { LOCAL_TIMEZONE } from "./daySlice.js";
29
+ import * as fs from "node:fs/promises";
30
+ import * as os from "node:os";
31
+ import * as path from "node:path";
32
+ const APP_BUNDLE_ID = "one.ascenda.ascendaMissionControl";
33
+ /** Schema version of the handoff file. The app must refuse a version it
34
+ * does not know rather than guess at fields — same rule the extractors
35
+ * apply to upstream stores. */
36
+ /**
37
+ * Bumped to 2 for per-day session slices (`days`, `timezone`). Additive —
38
+ * every schema-1 field is still written and still means what it meant — but
39
+ * a reader has to be able to tell a handoff that omits `days` from one whose
40
+ * sessions genuinely span no extra day, because the fallback for the first
41
+ * (place the session on its end day) would be wrong for the second.
42
+ */
43
+ export const HANDOFF_SCHEMA = 2;
44
+ export function handoffDir(home = os.homedir()) {
45
+ return path.join(home, "Library", "Containers", APP_BUNDLE_ID, "Data", ".ascenda", "history-import");
46
+ }
47
+ /** One handoff file per store — `store` names the file (`claude_code.json`,
48
+ * `cursor.json`, …) so each extractor's digest lands separately and a
49
+ * missing/stale one never clobbers another store's. */
50
+ export function handoffFilePath(home = os.homedir(), store = "claude_code") {
51
+ return path.join(handoffDir(home), `${store}.json`);
52
+ }
53
+ /** Last path segment of a repo path — "asc-ascenda-app-workspace" from a
54
+ * full cwd. Falls back to the raw ref when it is already a slug. */
55
+ export function projectLabelOf(repoRef) {
56
+ if (!repoRef)
57
+ return null;
58
+ const trimmed = repoRef.replace(/\/+$/, "");
59
+ const segment = trimmed.split("/").filter(Boolean).pop() ?? null;
60
+ return segment && segment.length > 0 ? segment : null;
61
+ }
62
+ export function buildHandoff(events, extractionId, generatedAt) {
63
+ const sessions = [];
64
+ let windowOldest = null;
65
+ let windowNewest = null;
66
+ for (const event of events) {
67
+ if (event.eventKind === "extraction_epoch") {
68
+ const oldest = event.metrics.windowOldest;
69
+ const newest = event.metrics.windowNewest;
70
+ if (typeof oldest === "string")
71
+ windowOldest = oldest;
72
+ if (typeof newest === "string")
73
+ windowNewest = newest;
74
+ continue;
75
+ }
76
+ if (event.eventKind !== "create_focus_session")
77
+ continue;
78
+ sessions.push({
79
+ at: event.occurredAt,
80
+ startedAt: typeof event.metrics.sessionStartedAt === "string" ? event.metrics.sessionStartedAt : null,
81
+ sessionRef: event.sessionRef,
82
+ projectLabel: projectLabelOf(event.repoRef),
83
+ promptCount: Number(event.metrics.promptCount ?? 0),
84
+ durationBucket: String(event.metrics.durationBucket ?? "unknown"),
85
+ afterHoursPrompts: Number(event.metrics.afterHoursPrompts ?? 0),
86
+ primaryModel: typeof event.metrics.primaryModel === "string" ? event.metrics.primaryModel : null,
87
+ activeMinutes: Number(event.metrics.activeMinutes ?? 0),
88
+ compactionCount: Number(event.metrics.compactionCount ?? 0),
89
+ toolFailureCount: Number(event.metrics.toolFailureCount ?? 0),
90
+ contextWindowPeakPct: Number(event.metrics.contextWindowPeakPct ?? 0),
91
+ userModifiedEditCount: Number(event.metrics.userModifiedEditCount ?? 0),
92
+ subagentTranscripts: Number(event.metrics.subagentTranscripts ?? 0),
93
+ days: event.dayBreakdown ?? [],
94
+ provenance: event.provenance
95
+ });
96
+ }
97
+ sessions.sort((a, b) => a.at.localeCompare(b.at));
98
+ return {
99
+ schema: HANDOFF_SCHEMA,
100
+ extractionId,
101
+ generatedAt,
102
+ timezone: LOCAL_TIMEZONE,
103
+ store: "claude_code",
104
+ windowOldest,
105
+ windowNewest,
106
+ sessions
107
+ };
108
+ }
109
+ export function buildCursorHandoff(events, extractionId, generatedAt) {
110
+ const sessions = [];
111
+ let windowOldest = null;
112
+ let windowNewest = null;
113
+ for (const event of events) {
114
+ if (event.eventKind === "extraction_epoch") {
115
+ const oldest = event.metrics.windowOldest;
116
+ const newest = event.metrics.windowNewest;
117
+ if (typeof oldest === "string")
118
+ windowOldest = oldest;
119
+ if (typeof newest === "string")
120
+ windowNewest = newest;
121
+ continue;
122
+ }
123
+ if (event.eventKind !== "create_focus_session")
124
+ continue;
125
+ sessions.push({
126
+ at: event.occurredAt,
127
+ startedAt: typeof event.metrics.sessionStartedAt === "string" ? event.metrics.sessionStartedAt : null,
128
+ sessionRef: event.sessionRef,
129
+ projectLabel: projectLabelOf(event.repoRef),
130
+ promptCount: Number(event.metrics.promptCount ?? 0),
131
+ durationBucket: String(event.metrics.durationBucket ?? "unknown"),
132
+ afterHoursPrompts: Number(event.metrics.afterHoursPrompts ?? 0),
133
+ primaryModel: typeof event.metrics.primaryModel === "string" ? event.metrics.primaryModel : null,
134
+ linesAdded: Number(event.metrics.linesAdded ?? 0),
135
+ linesRemoved: Number(event.metrics.linesRemoved ?? 0),
136
+ filesChangedCount: Number(event.metrics.filesChangedCount ?? 0),
137
+ contextUsagePercent: typeof event.metrics.contextUsagePercent === "number" ? event.metrics.contextUsagePercent : null,
138
+ humanChangesCount: Number(event.metrics.humanChangesCount ?? 0),
139
+ approximateLintErrorsCount: Number(event.metrics.approximateLintErrorsCount ?? 0),
140
+ subagentComposers: Number(event.metrics.subagentComposers ?? 0),
141
+ days: event.dayBreakdown ?? [],
142
+ provenance: event.provenance
143
+ });
144
+ }
145
+ sessions.sort((a, b) => a.at.localeCompare(b.at));
146
+ return {
147
+ schema: HANDOFF_SCHEMA,
148
+ extractionId,
149
+ generatedAt,
150
+ timezone: LOCAL_TIMEZONE,
151
+ store: "cursor",
152
+ windowOldest,
153
+ windowNewest,
154
+ sessions
155
+ };
156
+ }
157
+ export function buildVsCodeHandoff(events, extractionId, generatedAt) {
158
+ const editDays = [];
159
+ const chatSessions = [];
160
+ let windowOldest = null;
161
+ let windowNewest = null;
162
+ for (const event of events) {
163
+ if (event.eventKind === "extraction_epoch") {
164
+ const oldest = event.metrics.windowOldest;
165
+ const newest = event.metrics.windowNewest;
166
+ if (typeof oldest === "string")
167
+ windowOldest = oldest;
168
+ if (typeof newest === "string")
169
+ windowNewest = newest;
170
+ continue;
171
+ }
172
+ if (event.eventKind === "editor_activity") {
173
+ editDays.push({
174
+ date: typeof event.metrics.date === "string" ? event.metrics.date : event.occurredAt.slice(0, 10),
175
+ projectLabel: projectLabelOf(event.repoRef),
176
+ chatEditCount: Number(event.metrics.chatEditCount ?? 0),
177
+ totalEntryCount: Number(event.metrics.totalEntryCount ?? 0),
178
+ provenance: event.provenance
179
+ });
180
+ continue;
181
+ }
182
+ if (event.eventKind !== "create_focus_session")
183
+ continue;
184
+ chatSessions.push({
185
+ at: event.occurredAt,
186
+ startedAt: typeof event.metrics.sessionStartedAt === "string" ? event.metrics.sessionStartedAt : null,
187
+ sessionRef: event.sessionRef,
188
+ projectLabel: projectLabelOf(event.repoRef),
189
+ requestCount: Number(event.metrics.requestCount ?? 0),
190
+ durationBucket: String(event.metrics.durationBucket ?? "unknown"),
191
+ afterHoursRequests: Number(event.metrics.afterHoursRequests ?? 0),
192
+ primaryModel: typeof event.metrics.primaryModel === "string" ? event.metrics.primaryModel : null,
193
+ canceledCount: Number(event.metrics.canceledCount ?? 0),
194
+ errorCount: Number(event.metrics.errorCount ?? 0),
195
+ days: event.dayBreakdown ?? [],
196
+ provenance: event.provenance
197
+ });
198
+ }
199
+ editDays.sort((a, b) => a.date.localeCompare(b.date) || (a.projectLabel ?? "").localeCompare(b.projectLabel ?? ""));
200
+ chatSessions.sort((a, b) => a.at.localeCompare(b.at));
201
+ return {
202
+ schema: HANDOFF_SCHEMA,
203
+ extractionId,
204
+ generatedAt,
205
+ timezone: LOCAL_TIMEZONE,
206
+ store: "vscode",
207
+ windowOldest,
208
+ windowNewest,
209
+ editDays,
210
+ chatSessions
211
+ };
212
+ }
213
+ /**
214
+ * Write the handoff atomically: the app may be reading this file at any
215
+ * moment, and a half-written JSON document is indistinguishable from a
216
+ * corrupt one. Write-then-rename makes the swap atomic on the same volume.
217
+ *
218
+ * Returns null (rather than throwing) when the container does not exist —
219
+ * the app simply is not installed, which is a normal state for a CLI that
220
+ * also serves people who only ship to the backend.
221
+ */
222
+ export async function writeHandoff(handoff, home = os.homedir()) {
223
+ const containerRoot = path.join(home, "Library", "Containers", APP_BUNDLE_ID, "Data");
224
+ try {
225
+ await fs.stat(containerRoot);
226
+ }
227
+ catch {
228
+ return null;
229
+ }
230
+ const dir = handoffDir(home);
231
+ await fs.mkdir(dir, { recursive: true });
232
+ const target = handoffFilePath(home, handoff.store);
233
+ const temp = `${target}.tmp`;
234
+ await fs.writeFile(temp, JSON.stringify(handoff, null, 2) + "\n", "utf8");
235
+ await fs.rename(temp, target);
236
+ return target;
237
+ }
238
+ //# sourceMappingURL=localHandoff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localHandoff.js","sourceRoot":"","sources":["../src/localHandoff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * "Stop the bleeding at install."
3
+ *
4
+ * Two settings on the user's machine decide whether the historical window
5
+ * keeps shrinking after Flow arrives. Both changes are proposed as data
6
+ * first (so the consent surface can show exactly what would change) and
7
+ * applied only by an explicit second call — the importer never modifies a
8
+ * user's config as a side effect of scanning or extracting.
9
+ */
10
+ import * as fs from "node:fs/promises";
11
+ /** High enough to stop the purge mattering, finite so we are not writing
12
+ * "never delete" into someone's config unasked. */
13
+ export const PROPOSED_CLEANUP_PERIOD_DAYS = 3650;
14
+ export async function planClaudeRetentionFix(paths) {
15
+ let current = null;
16
+ try {
17
+ const settings = JSON.parse(await fs.readFile(paths.claudeSettings, "utf8"));
18
+ if (typeof settings.cleanupPeriodDays === "number")
19
+ current = settings.cleanupPeriodDays;
20
+ }
21
+ catch {
22
+ // Missing or unreadable settings file — the 30-day default is live.
23
+ }
24
+ return {
25
+ settingsPath: paths.claudeSettings,
26
+ currentCleanupPeriodDays: current,
27
+ proposedCleanupPeriodDays: PROPOSED_CLEANUP_PERIOD_DAYS,
28
+ changeNeeded: current === null || current < PROPOSED_CLEANUP_PERIOD_DAYS
29
+ };
30
+ }
31
+ /**
32
+ * Apply the plan by MERGING into the existing settings — `settings.json`
33
+ * holds the user's whole Claude Code configuration, and clobbering it to set
34
+ * one key would be a far worse outcome than the purge we are preventing. If
35
+ * the file exists but does not parse, refuse: overwriting something we could
36
+ * not read is exactly the mistake the merge rule exists to prevent.
37
+ */
38
+ export async function applyClaudeRetentionFix(plan) {
39
+ if (!plan.changeNeeded)
40
+ return;
41
+ let settings = {};
42
+ let raw = null;
43
+ try {
44
+ raw = await fs.readFile(plan.settingsPath, "utf8");
45
+ }
46
+ catch {
47
+ // No file yet — we create one holding only our key.
48
+ }
49
+ if (raw !== null) {
50
+ try {
51
+ settings = JSON.parse(raw);
52
+ }
53
+ catch {
54
+ throw new Error(`${plan.settingsPath} exists but is not valid JSON — refusing to overwrite it`);
55
+ }
56
+ }
57
+ settings.cleanupPeriodDays = plan.proposedCleanupPeriodDays;
58
+ await fs.writeFile(plan.settingsPath, JSON.stringify(settings, null, 2) + "\n", "utf8");
59
+ }
60
+ /** The zsh side: `EXTENDED_HISTORY` makes shell history timestamped from now
61
+ * on — purely prospective, but the scan's "no timestamps" note is the reason
62
+ * to offer it. Left as a plan-only stub: appending to a user's .zshrc has
63
+ * enough sharp edges (which rc file, oh-my-zsh, symlinks) that it warrants
64
+ * its own careful implementation, not a scaffold one. */
65
+ export function zshExtendedHistorySnippet() {
66
+ return "setopt EXTENDED_HISTORY # Ascenda: timestamp shell history";
67
+ }
68
+ //# sourceMappingURL=retention.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retention.js","sourceRoot":"","sources":["../src/retention.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAGvC;mDACmD;AACnD,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC;AAUjD,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,KAAiB;IAC5D,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;QAC7E,IAAI,OAAO,QAAQ,CAAC,iBAAiB,KAAK,QAAQ;YAAE,OAAO,GAAG,QAAQ,CAAC,iBAAiB,CAAC;IAC3F,CAAC;IAAC,MAAM,CAAC;QACP,oEAAoE;IACtE,CAAC;IACD,OAAO;QACL,YAAY,EAAE,KAAK,CAAC,cAAc;QAClC,wBAAwB,EAAE,OAAO;QACjC,yBAAyB,EAAE,4BAA4B;QACvD,YAAY,EAAE,OAAO,KAAK,IAAI,IAAI,OAAO,GAAG,4BAA4B;KACzE,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,IAAyB;IACrE,IAAI,CAAC,IAAI,CAAC,YAAY;QAAE,OAAO;IAC/B,IAAI,QAAQ,GAA4B,EAAE,CAAC;IAC3C,IAAI,GAAG,GAAkB,IAAI,CAAC;IAC9B,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,oDAAoD;IACtD,CAAC;IACD,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,IAAI,CAAC;YACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;QACxD,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,CAAC,YAAY,0DAA0D,CAC/E,CAAC;QACJ,CAAC;IACH,CAAC;IACD,QAAQ,CAAC,iBAAiB,GAAG,IAAI,CAAC,yBAAyB,CAAC;IAC5D,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;AAC1F,CAAC;AAED;;;;yDAIyD;AACzD,MAAM,UAAU,yBAAyB;IACvC,OAAO,6DAA6D,CAAC;AACvE,CAAC"}
package/dist/scan.js ADDED
@@ -0,0 +1,220 @@
1
+ /**
2
+ * Store inventory without parsing content.
3
+ *
4
+ * `scan` is what the onboarding surface shows the user BEFORE asking for
5
+ * consent — "here is what exists, how deep it goes, and what is evaporating".
6
+ * It must therefore be cheap, read-only, and must not open a single record's
7
+ * content: counts, file timestamps and sizes only. Anything that reads inside
8
+ * a record belongs to `extract`, behind consent.
9
+ */
10
+ import * as fs from "node:fs/promises";
11
+ import * as path from "node:path";
12
+ import { execFile } from "node:child_process";
13
+ import { promisify } from "node:util";
14
+ const execFileAsync = promisify(execFile);
15
+ async function statOrNull(p) {
16
+ try {
17
+ return await fs.stat(p);
18
+ }
19
+ catch {
20
+ return null;
21
+ }
22
+ }
23
+ /** Tracks a min/max mtime window as files are visited. */
24
+ class Window {
25
+ oldest = null;
26
+ newest = null;
27
+ see(d) {
28
+ if (!this.oldest || d < this.oldest)
29
+ this.oldest = d;
30
+ if (!this.newest || d > this.newest)
31
+ this.newest = d;
32
+ }
33
+ }
34
+ export async function scanClaudeCode(paths) {
35
+ const inv = {
36
+ store: "claude_code",
37
+ rootPath: paths.claudeProjects,
38
+ present: false,
39
+ counts: {},
40
+ notes: []
41
+ };
42
+ const root = await statOrNull(paths.claudeProjects);
43
+ if (!root)
44
+ return inv;
45
+ inv.present = true;
46
+ const window = new Window();
47
+ let transcripts = 0;
48
+ let bytes = 0;
49
+ const projects = await fs.readdir(paths.claudeProjects, { withFileTypes: true });
50
+ for (const project of projects) {
51
+ if (!project.isDirectory())
52
+ continue;
53
+ const dir = path.join(paths.claudeProjects, project.name);
54
+ for (const entry of await fs.readdir(dir)) {
55
+ if (!entry.endsWith(".jsonl"))
56
+ continue;
57
+ const st = await statOrNull(path.join(dir, entry));
58
+ if (!st)
59
+ continue;
60
+ transcripts += 1;
61
+ bytes += st.size;
62
+ window.see(st.mtime);
63
+ }
64
+ }
65
+ inv.counts = { projects: projects.length, transcripts, bytes };
66
+ inv.oldest = window.oldest?.toISOString();
67
+ inv.newest = window.newest?.toISOString();
68
+ // The purge is the reason this store scans (and later extracts) first. A
69
+ // missing cleanupPeriodDays means the 30-day default is live, and the
70
+ // oldest-transcript date shows exactly how short the window already is.
71
+ let cleanupPeriodDays = null;
72
+ try {
73
+ const settings = JSON.parse(await fs.readFile(paths.claudeSettings, "utf8"));
74
+ if (typeof settings.cleanupPeriodDays === "number") {
75
+ cleanupPeriodDays = settings.cleanupPeriodDays;
76
+ }
77
+ }
78
+ catch {
79
+ // No settings file, or unreadable JSON — same consequence: default purge.
80
+ }
81
+ if (cleanupPeriodDays === null || cleanupPeriodDays <= 30) {
82
+ inv.retentionRisk = `rolling purge active (cleanupPeriodDays: ${cleanupPeriodDays ?? "30 by default"}) — the oldest transcript is deleted daily`;
83
+ }
84
+ return inv;
85
+ }
86
+ export async function scanCursor(paths) {
87
+ const inv = {
88
+ store: "cursor",
89
+ rootPath: paths.cursorStateDb,
90
+ present: false,
91
+ counts: {},
92
+ notes: []
93
+ };
94
+ const st = await statOrNull(paths.cursorStateDb);
95
+ if (!st)
96
+ return inv;
97
+ inv.present = true;
98
+ inv.counts = { bytes: st.size };
99
+ inv.newest = st.mtime.toISOString();
100
+ // Counting rows needs SQLite, but the scan must not add a native dependency
101
+ // for it — macOS ships /usr/bin/sqlite3, and `immutable=1` keeps a WAL-mode
102
+ // db safe to read while Cursor is running. If the binary or the query
103
+ // fails, the scan degrades to file facts rather than failing the inventory.
104
+ try {
105
+ const uri = `file:${paths.cursorStateDb}?mode=ro&immutable=1`;
106
+ const { stdout } = await execFileAsync("sqlite3", [
107
+ uri,
108
+ "SELECT " +
109
+ "(SELECT count(*) FROM cursorDiskKV WHERE key LIKE 'composerData:%'), " +
110
+ "(SELECT count(*) FROM cursorDiskKV WHERE key LIKE 'bubbleId:%');"
111
+ ]);
112
+ const [conversations, bubbles] = stdout.trim().split("|").map(Number);
113
+ if (Number.isFinite(conversations))
114
+ inv.counts.conversations = conversations;
115
+ if (Number.isFinite(bubbles))
116
+ inv.counts.bubbles = bubbles;
117
+ }
118
+ catch (error) {
119
+ inv.notes.push(`row counts unavailable (${error instanceof Error ? error.message.split("\n")[0] : "sqlite3 failed"}); file-level facts only`);
120
+ }
121
+ return inv;
122
+ }
123
+ export async function scanVsCode(paths) {
124
+ const inv = {
125
+ store: "vscode",
126
+ rootPath: paths.vscodeHistory,
127
+ present: false,
128
+ counts: {},
129
+ notes: []
130
+ };
131
+ const root = await statOrNull(paths.vscodeHistory);
132
+ if (root) {
133
+ inv.present = true;
134
+ const window = new Window();
135
+ let fileHistories = 0;
136
+ for (const entry of await fs.readdir(paths.vscodeHistory, { withFileTypes: true })) {
137
+ if (!entry.isDirectory())
138
+ continue;
139
+ fileHistories += 1;
140
+ const st = await statOrNull(path.join(paths.vscodeHistory, entry.name));
141
+ if (st)
142
+ window.see(st.mtime);
143
+ }
144
+ inv.counts.fileHistories = fileHistories;
145
+ inv.oldest = window.oldest?.toISOString();
146
+ inv.newest = window.newest?.toISOString();
147
+ }
148
+ // Copilot chat sessions live under a different root; count them into the
149
+ // same inventory since they ship in the same extractor.
150
+ let chatSessions = 0;
151
+ const wsRoot = await statOrNull(paths.vscodeWorkspaceStorage);
152
+ if (wsRoot) {
153
+ inv.present = true;
154
+ for (const ws of await fs.readdir(paths.vscodeWorkspaceStorage, { withFileTypes: true })) {
155
+ if (!ws.isDirectory())
156
+ continue;
157
+ const sessions = path.join(paths.vscodeWorkspaceStorage, ws.name, "chatSessions");
158
+ try {
159
+ chatSessions += (await fs.readdir(sessions)).filter((f) => f.endsWith(".json")).length;
160
+ }
161
+ catch {
162
+ // Most workspaces have no chatSessions dir; absence is the norm.
163
+ }
164
+ }
165
+ }
166
+ inv.counts.chatSessions = chatSessions;
167
+ return inv;
168
+ }
169
+ export async function scanGit(paths) {
170
+ const inv = {
171
+ store: "git",
172
+ rootPath: paths.devRoot,
173
+ present: false,
174
+ counts: {},
175
+ notes: ["the only fully durable, fully supported source — the spine other stores hang off"]
176
+ };
177
+ const root = await statOrNull(paths.devRoot);
178
+ if (!root)
179
+ return inv;
180
+ inv.present = true;
181
+ // Two levels deep matches the ~/Dev/<org>/<repo> and ~/Dev/<repo> layouts
182
+ // without walking the world. Deeper nesting is a config concern, not a
183
+ // scan concern.
184
+ let repos = 0;
185
+ const level1 = await fs.readdir(paths.devRoot, { withFileTypes: true });
186
+ for (const entry of level1) {
187
+ if (!entry.isDirectory())
188
+ continue;
189
+ const dir = path.join(paths.devRoot, entry.name);
190
+ if (await statOrNull(path.join(dir, ".git"))) {
191
+ repos += 1;
192
+ continue;
193
+ }
194
+ let nested = [];
195
+ try {
196
+ nested = await fs.readdir(dir, { withFileTypes: true });
197
+ }
198
+ catch {
199
+ continue;
200
+ }
201
+ for (const sub of nested) {
202
+ if (!sub.isDirectory())
203
+ continue;
204
+ if (await statOrNull(path.join(dir, sub.name, ".git")))
205
+ repos += 1;
206
+ }
207
+ }
208
+ inv.counts.repos = repos;
209
+ return inv;
210
+ }
211
+ export async function scanAll(paths) {
212
+ // Report order is evaporation order — the same order extraction runs in.
213
+ return [
214
+ await scanClaudeCode(paths),
215
+ await scanCursor(paths),
216
+ await scanVsCode(paths),
217
+ await scanGit(paths)
218
+ ];
219
+ }
220
+ //# sourceMappingURL=scan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan.js","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":"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"}