xtctx 0.3.2 → 0.11.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +317 -122
- package/LICENSE +21 -21
- package/README.md +154 -121
- package/dist/src/cli/disconnect.d.ts +8 -0
- package/dist/src/cli/disconnect.d.ts.map +1 -0
- package/dist/src/cli/disconnect.js +42 -0
- package/dist/src/cli/disconnect.js.map +1 -0
- package/dist/src/cli/hook.d.ts +7 -0
- package/dist/src/cli/hook.d.ts.map +1 -0
- package/dist/src/cli/hook.js +32 -0
- package/dist/src/cli/hook.js.map +1 -0
- package/dist/src/cli/index.d.ts.map +1 -1
- package/dist/src/cli/index.js +86 -33
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/setup.d.ts +8 -0
- package/dist/src/cli/setup.d.ts.map +1 -0
- package/dist/src/cli/setup.js +76 -0
- package/dist/src/cli/setup.js.map +1 -0
- package/dist/src/cli/status.d.ts +7 -0
- package/dist/src/cli/status.d.ts.map +1 -0
- package/dist/src/cli/status.js +133 -0
- package/dist/src/cli/status.js.map +1 -0
- package/dist/src/config/disconnect.d.ts +34 -0
- package/dist/src/config/disconnect.d.ts.map +1 -0
- package/dist/src/config/disconnect.js +386 -0
- package/dist/src/config/disconnect.js.map +1 -0
- package/dist/src/config/managed-block.d.ts +29 -0
- package/dist/src/config/managed-block.d.ts.map +1 -0
- package/dist/src/config/managed-block.js +67 -0
- package/dist/src/config/managed-block.js.map +1 -0
- package/dist/src/config/mcp-config.d.ts +93 -0
- package/dist/src/config/mcp-config.d.ts.map +1 -0
- package/dist/src/config/mcp-config.js +556 -0
- package/dist/src/config/mcp-config.js.map +1 -0
- package/dist/src/config/setup.d.ts +39 -0
- package/dist/src/config/setup.d.ts.map +1 -0
- package/dist/src/config/setup.js +379 -0
- package/dist/src/config/setup.js.map +1 -0
- package/dist/src/config/skills.d.ts +73 -0
- package/dist/src/config/skills.d.ts.map +1 -0
- package/dist/src/config/skills.js +427 -0
- package/dist/src/config/skills.js.map +1 -0
- package/dist/src/handoff/embeddings.d.ts +26 -0
- package/dist/src/handoff/embeddings.d.ts.map +1 -0
- package/dist/src/handoff/embeddings.js +132 -0
- package/dist/src/handoff/embeddings.js.map +1 -0
- package/dist/src/handoff/sqlite-index.d.ts +52 -0
- package/dist/src/handoff/sqlite-index.d.ts.map +1 -0
- package/dist/src/handoff/sqlite-index.js +905 -0
- package/dist/src/handoff/sqlite-index.js.map +1 -0
- package/dist/src/handoff/types.d.ts +63 -0
- package/dist/src/handoff/types.d.ts.map +1 -0
- package/dist/src/handoff/types.js +2 -0
- package/dist/src/handoff/types.js.map +1 -0
- package/dist/src/handoff/vector.d.ts +4 -0
- package/dist/src/handoff/vector.d.ts.map +1 -0
- package/dist/src/handoff/vector.js +31 -0
- package/dist/src/handoff/vector.js.map +1 -0
- package/dist/src/mcp/server.d.ts +3 -20
- package/dist/src/mcp/server.d.ts.map +1 -1
- package/dist/src/mcp/server.js +90 -205
- package/dist/src/mcp/server.js.map +1 -1
- package/dist/src/mcp/tools/continuity.d.ts +21 -0
- package/dist/src/mcp/tools/continuity.d.ts.map +1 -0
- package/dist/src/mcp/tools/continuity.js +55 -0
- package/dist/src/mcp/tools/continuity.js.map +1 -0
- package/dist/src/mcp/tools/manifest.d.ts +40 -0
- package/dist/src/mcp/tools/manifest.d.ts.map +1 -0
- package/dist/src/mcp/tools/manifest.js +105 -0
- package/dist/src/mcp/tools/manifest.js.map +1 -0
- package/dist/src/mcp/tools/sessions.d.ts +18 -31
- package/dist/src/mcp/tools/sessions.d.ts.map +1 -1
- package/dist/src/mcp/tools/sessions.js +109 -16
- package/dist/src/mcp/tools/sessions.js.map +1 -1
- package/dist/src/runtime/services.d.ts +11 -38
- package/dist/src/runtime/services.d.ts.map +1 -1
- package/dist/src/runtime/services.js +61 -200
- package/dist/src/runtime/services.js.map +1 -1
- package/dist/src/scrapers/antigravity.d.ts +52 -0
- package/dist/src/scrapers/antigravity.d.ts.map +1 -0
- package/dist/src/scrapers/antigravity.js +869 -0
- package/dist/src/scrapers/antigravity.js.map +1 -0
- package/dist/src/scrapers/base.d.ts +53 -1
- package/dist/src/scrapers/base.d.ts.map +1 -1
- package/dist/src/scrapers/base.js +93 -4
- package/dist/src/scrapers/base.js.map +1 -1
- package/dist/src/scrapers/claude-code.d.ts +37 -6
- package/dist/src/scrapers/claude-code.d.ts.map +1 -1
- package/dist/src/scrapers/claude-code.js +214 -40
- package/dist/src/scrapers/claude-code.js.map +1 -1
- package/dist/src/scrapers/codex.d.ts +36 -6
- package/dist/src/scrapers/codex.d.ts.map +1 -1
- package/dist/src/scrapers/codex.js +283 -60
- package/dist/src/scrapers/codex.js.map +1 -1
- package/dist/src/scrapers/copilot-cli.d.ts +34 -0
- package/dist/src/scrapers/copilot-cli.d.ts.map +1 -0
- package/dist/src/scrapers/copilot-cli.js +342 -0
- package/dist/src/scrapers/copilot-cli.js.map +1 -0
- package/dist/src/scrapers/copilot.d.ts +41 -8
- package/dist/src/scrapers/copilot.d.ts.map +1 -1
- package/dist/src/scrapers/copilot.js +256 -118
- package/dist/src/scrapers/copilot.js.map +1 -1
- package/dist/src/scrapers/cursor.d.ts +24 -9
- package/dist/src/scrapers/cursor.d.ts.map +1 -1
- package/dist/src/scrapers/cursor.js +259 -152
- package/dist/src/scrapers/cursor.js.map +1 -1
- package/dist/src/scrapers/index.d.ts +23 -0
- package/dist/src/scrapers/index.d.ts.map +1 -0
- package/dist/src/scrapers/index.js +22 -0
- package/dist/src/scrapers/index.js.map +1 -0
- package/dist/src/scrapers/opencode.d.ts +37 -0
- package/dist/src/scrapers/opencode.d.ts.map +1 -0
- package/dist/src/scrapers/opencode.js +277 -0
- package/dist/src/scrapers/opencode.js.map +1 -0
- package/dist/src/scrapers/registry.d.ts +1 -0
- package/dist/src/scrapers/registry.d.ts.map +1 -1
- package/dist/src/scrapers/registry.js +3 -0
- package/dist/src/scrapers/registry.js.map +1 -1
- package/dist/src/tools/sources.d.ts +28 -0
- package/dist/src/tools/sources.d.ts.map +1 -0
- package/dist/src/tools/sources.js +149 -0
- package/dist/src/tools/sources.js.map +1 -0
- package/dist/src/types/config.d.ts +24 -37
- package/dist/src/types/config.d.ts.map +1 -1
- package/dist/src/types/index.d.ts +0 -2
- package/dist/src/types/index.d.ts.map +1 -1
- package/dist/src/types/index.js +0 -2
- package/dist/src/types/index.js.map +1 -1
- package/dist/src/types/scraper.d.ts +34 -5
- package/dist/src/types/scraper.d.ts.map +1 -1
- package/dist/src/utils/atomic-file.d.ts +8 -0
- package/dist/src/utils/atomic-file.d.ts.map +1 -0
- package/dist/src/utils/atomic-file.js +15 -0
- package/dist/src/utils/atomic-file.js.map +1 -0
- package/dist/src/utils/errors.d.ts +7 -0
- package/dist/src/utils/errors.d.ts.map +1 -0
- package/dist/src/utils/errors.js +16 -0
- package/dist/src/utils/errors.js.map +1 -0
- package/dist/src/utils/package-info.d.ts +11 -0
- package/dist/src/utils/package-info.d.ts.map +1 -0
- package/dist/src/utils/package-info.js +30 -0
- package/dist/src/utils/package-info.js.map +1 -0
- package/dist/src/utils/project-scope.d.ts +19 -0
- package/dist/src/utils/project-scope.d.ts.map +1 -0
- package/dist/src/utils/project-scope.js +61 -0
- package/dist/src/utils/project-scope.js.map +1 -0
- package/package.json +70 -66
- package/dist/src/api/routes/config.d.ts +0 -4
- package/dist/src/api/routes/config.d.ts.map +0 -1
- package/dist/src/api/routes/config.js +0 -61
- package/dist/src/api/routes/config.js.map +0 -1
- package/dist/src/api/routes/knowledge.d.ts +0 -4
- package/dist/src/api/routes/knowledge.d.ts.map +0 -1
- package/dist/src/api/routes/knowledge.js +0 -40
- package/dist/src/api/routes/knowledge.js.map +0 -1
- package/dist/src/api/routes/search.d.ts +0 -7
- package/dist/src/api/routes/search.d.ts.map +0 -1
- package/dist/src/api/routes/search.js +0 -108
- package/dist/src/api/routes/search.js.map +0 -1
- package/dist/src/api/routes/sources.d.ts +0 -12
- package/dist/src/api/routes/sources.d.ts.map +0 -1
- package/dist/src/api/routes/sources.js +0 -70
- package/dist/src/api/routes/sources.js.map +0 -1
- package/dist/src/api/server.d.ts +0 -26
- package/dist/src/api/server.d.ts.map +0 -1
- package/dist/src/api/server.js +0 -312
- package/dist/src/api/server.js.map +0 -1
- package/dist/src/cli/ingest.d.ts +0 -6
- package/dist/src/cli/ingest.d.ts.map +0 -1
- package/dist/src/cli/ingest.js +0 -11
- package/dist/src/cli/ingest.js.map +0 -1
- package/dist/src/cli/init.d.ts +0 -6
- package/dist/src/cli/init.d.ts.map +0 -1
- package/dist/src/cli/init.js +0 -105
- package/dist/src/cli/init.js.map +0 -1
- package/dist/src/cli/serve.d.ts +0 -7
- package/dist/src/cli/serve.d.ts.map +0 -1
- package/dist/src/cli/serve.js +0 -100
- package/dist/src/cli/serve.js.map +0 -1
- package/dist/src/cli/sync.d.ts +0 -5
- package/dist/src/cli/sync.d.ts.map +0 -1
- package/dist/src/cli/sync.js +0 -13
- package/dist/src/cli/sync.js.map +0 -1
- package/dist/src/compaction/pipeline.d.ts +0 -19
- package/dist/src/compaction/pipeline.d.ts.map +0 -1
- package/dist/src/compaction/pipeline.js +0 -37
- package/dist/src/compaction/pipeline.js.map +0 -1
- package/dist/src/compaction/providers/cli.d.ts +0 -13
- package/dist/src/compaction/providers/cli.d.ts.map +0 -1
- package/dist/src/compaction/providers/cli.js +0 -60
- package/dist/src/compaction/providers/cli.js.map +0 -1
- package/dist/src/compaction/rule-based.d.ts +0 -8
- package/dist/src/compaction/rule-based.d.ts.map +0 -1
- package/dist/src/compaction/rule-based.js +0 -120
- package/dist/src/compaction/rule-based.js.map +0 -1
- package/dist/src/config/loader.d.ts +0 -12
- package/dist/src/config/loader.d.ts.map +0 -1
- package/dist/src/config/loader.js +0 -76
- package/dist/src/config/loader.js.map +0 -1
- package/dist/src/config/mappings/claude-code.d.ts +0 -3
- package/dist/src/config/mappings/claude-code.d.ts.map +0 -1
- package/dist/src/config/mappings/claude-code.js +0 -31
- package/dist/src/config/mappings/claude-code.js.map +0 -1
- package/dist/src/config/mappings/codex.d.ts +0 -3
- package/dist/src/config/mappings/codex.d.ts.map +0 -1
- package/dist/src/config/mappings/codex.js +0 -31
- package/dist/src/config/mappings/codex.js.map +0 -1
- package/dist/src/config/mappings/copilot.d.ts +0 -3
- package/dist/src/config/mappings/copilot.d.ts.map +0 -1
- package/dist/src/config/mappings/copilot.js +0 -33
- package/dist/src/config/mappings/copilot.js.map +0 -1
- package/dist/src/config/mappings/cursor.d.ts +0 -3
- package/dist/src/config/mappings/cursor.d.ts.map +0 -1
- package/dist/src/config/mappings/cursor.js +0 -29
- package/dist/src/config/mappings/cursor.js.map +0 -1
- package/dist/src/config/sync.d.ts +0 -13
- package/dist/src/config/sync.d.ts.map +0 -1
- package/dist/src/config/sync.js +0 -96
- package/dist/src/config/sync.js.map +0 -1
- package/dist/src/ingestion/coordinator.d.ts +0 -37
- package/dist/src/ingestion/coordinator.d.ts.map +0 -1
- package/dist/src/ingestion/coordinator.js +0 -127
- package/dist/src/ingestion/coordinator.js.map +0 -1
- package/dist/src/ingestion/daemon.d.ts +0 -17
- package/dist/src/ingestion/daemon.d.ts.map +0 -1
- package/dist/src/ingestion/daemon.js +0 -35
- package/dist/src/ingestion/daemon.js.map +0 -1
- package/dist/src/ingestion/watcher.d.ts +0 -19
- package/dist/src/ingestion/watcher.d.ts.map +0 -1
- package/dist/src/ingestion/watcher.js +0 -70
- package/dist/src/ingestion/watcher.js.map +0 -1
- package/dist/src/knowledge/autotag.d.ts +0 -3
- package/dist/src/knowledge/autotag.d.ts.map +0 -1
- package/dist/src/knowledge/autotag.js +0 -24
- package/dist/src/knowledge/autotag.js.map +0 -1
- package/dist/src/knowledge/dedup.d.ts +0 -7
- package/dist/src/knowledge/dedup.d.ts.map +0 -1
- package/dist/src/knowledge/dedup.js +0 -15
- package/dist/src/knowledge/dedup.js.map +0 -1
- package/dist/src/knowledge/repository.d.ts +0 -12
- package/dist/src/knowledge/repository.d.ts.map +0 -1
- package/dist/src/knowledge/repository.js +0 -74
- package/dist/src/knowledge/repository.js.map +0 -1
- package/dist/src/mcp/tools/config.d.ts +0 -36
- package/dist/src/mcp/tools/config.d.ts.map +0 -1
- package/dist/src/mcp/tools/config.js +0 -54
- package/dist/src/mcp/tools/config.js.map +0 -1
- package/dist/src/mcp/tools/knowledge.d.ts +0 -17
- package/dist/src/mcp/tools/knowledge.d.ts.map +0 -1
- package/dist/src/mcp/tools/knowledge.js +0 -46
- package/dist/src/mcp/tools/knowledge.js.map +0 -1
- package/dist/src/mcp/tools/search.d.ts +0 -22
- package/dist/src/mcp/tools/search.d.ts.map +0 -1
- package/dist/src/mcp/tools/search.js +0 -30
- package/dist/src/mcp/tools/search.js.map +0 -1
- package/dist/src/mcp/tools/write.d.ts +0 -38
- package/dist/src/mcp/tools/write.d.ts.map +0 -1
- package/dist/src/mcp/tools/write.js +0 -97
- package/dist/src/mcp/tools/write.js.map +0 -1
- package/dist/src/runtime/ingestion.d.ts +0 -17
- package/dist/src/runtime/ingestion.d.ts.map +0 -1
- package/dist/src/runtime/ingestion.js +0 -106
- package/dist/src/runtime/ingestion.js.map +0 -1
- package/dist/src/scrapers/gemini.d.ts +0 -17
- package/dist/src/scrapers/gemini.d.ts.map +0 -1
- package/dist/src/scrapers/gemini.js +0 -245
- package/dist/src/scrapers/gemini.js.map +0 -1
- package/dist/src/store/embeddings.d.ts +0 -9
- package/dist/src/store/embeddings.d.ts.map +0 -1
- package/dist/src/store/embeddings.js +0 -28
- package/dist/src/store/embeddings.js.map +0 -1
- package/dist/src/store/lance.d.ts +0 -25
- package/dist/src/store/lance.d.ts.map +0 -1
- package/dist/src/store/lance.js +0 -74
- package/dist/src/store/lance.js.map +0 -1
- package/dist/src/store/search.d.ts +0 -18
- package/dist/src/store/search.d.ts.map +0 -1
- package/dist/src/store/search.js +0 -55
- package/dist/src/store/search.js.map +0 -1
- package/dist/src/types/compaction.d.ts +0 -29
- package/dist/src/types/compaction.d.ts.map +0 -1
- package/dist/src/types/compaction.js +0 -2
- package/dist/src/types/compaction.js.map +0 -1
- package/dist/src/types/context.d.ts +0 -33
- package/dist/src/types/context.d.ts.map +0 -1
- package/dist/src/types/context.js +0 -18
- package/dist/src/types/context.js.map +0 -1
- package/dist/src/utils/retry.d.ts +0 -11
- package/dist/src/utils/retry.d.ts.map +0 -1
- package/dist/src/utils/retry.js +0 -46
- package/dist/src/utils/retry.js.map +0 -1
- package/dist/src/utils/shutdown.d.ts +0 -25
- package/dist/src/utils/shutdown.d.ts.map +0 -1
- package/dist/src/utils/shutdown.js +0 -56
- package/dist/src/utils/shutdown.js.map +0 -1
- package/dist/web/apple-touch-icon.png +0 -0
- package/dist/web/assets/index-Nuadr5ox.css +0 -1
- package/dist/web/assets/index-aA0u8eXA.js +0 -3504
- package/dist/web/assets/primeicons-C6QP2o4f.woff2 +0 -0
- package/dist/web/assets/primeicons-DMOk5skT.eot +0 -0
- package/dist/web/assets/primeicons-Dr5RGzOO.svg +0 -345
- package/dist/web/assets/primeicons-MpK4pl85.ttf +0 -0
- package/dist/web/assets/primeicons-WjwUDZjB.woff +0 -0
- package/dist/web/favicon.ico +0 -0
- package/dist/web/favicon.svg +0 -21
- package/dist/web/index.html +0 -21
- package/dist/web/site.webmanifest +0 -19
- package/dist/web/vite.svg +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"antigravity.js","sourceRoot":"","sources":["../../../src/scrapers/antigravity.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ScraperState } from "../types/scraper.js";
|
|
1
|
+
import type { ConversationChunk, ConversationScraper, ScraperState } from "../types/scraper.js";
|
|
2
2
|
export declare class ScraperStateManager {
|
|
3
3
|
private readonly stateDir;
|
|
4
4
|
constructor(stateDir: string);
|
|
@@ -7,4 +7,56 @@ export declare class ScraperStateManager {
|
|
|
7
7
|
private statePath;
|
|
8
8
|
}
|
|
9
9
|
export declare function estimateTokens(text: string): number;
|
|
10
|
+
/**
|
|
11
|
+
* Coerce an unknown value to a Date.
|
|
12
|
+
* Handles: Date objects, numeric timestamps (seconds or milliseconds),
|
|
13
|
+
* numeric strings, ISO strings. Returns new Date(0) as sentinel for
|
|
14
|
+
* unrecognised values.
|
|
15
|
+
*/
|
|
16
|
+
export declare function toDate(value: unknown): Date;
|
|
17
|
+
/**
|
|
18
|
+
* Base class for all conversation scrapers — both built-in and community ones.
|
|
19
|
+
*
|
|
20
|
+
* Extend this class to add a new data source. You only need to implement five
|
|
21
|
+
* members:
|
|
22
|
+
*
|
|
23
|
+
* - `tool` — unique string identifier (e.g. `"zed"`, `"aider"`)
|
|
24
|
+
* - `detect()` — returns true when the data source is present on disk
|
|
25
|
+
* - `getStorePaths()` — transcript source paths used for detection and status
|
|
26
|
+
* - `scrape(since?)` — yield chunks newer than the given date (incremental)
|
|
27
|
+
* - `fullSync()` — yield all chunks from the beginning of time
|
|
28
|
+
*
|
|
29
|
+
* State persistence (position tracking between scrape cycles) is handled
|
|
30
|
+
* automatically by this base class via `ScraperStateManager`.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```ts
|
|
34
|
+
* import { AbstractScraper, estimateTokens } from "xtctx/scrapers";
|
|
35
|
+
* import type { ConversationChunk } from "xtctx/scrapers";
|
|
36
|
+
*
|
|
37
|
+
* export class ZedScraper extends AbstractScraper {
|
|
38
|
+
* readonly tool = "zed";
|
|
39
|
+
*
|
|
40
|
+
* constructor(private readonly historyDir: string, stateDir: string) {
|
|
41
|
+
* super(stateDir);
|
|
42
|
+
* }
|
|
43
|
+
*
|
|
44
|
+
* async detect() { ... }
|
|
45
|
+
* getStorePaths() { return [this.historyDir]; }
|
|
46
|
+
* async *scrape(since?: Date) { ... }
|
|
47
|
+
* async *fullSync() { ... }
|
|
48
|
+
* }
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export declare abstract class AbstractScraper<T extends ConversationChunk = ConversationChunk> implements ConversationScraper<T> {
|
|
52
|
+
abstract readonly tool: string;
|
|
53
|
+
private readonly stateManager;
|
|
54
|
+
constructor(stateDir: string);
|
|
55
|
+
abstract detect(): Promise<boolean>;
|
|
56
|
+
abstract getStorePaths(): string[];
|
|
57
|
+
abstract scrape(since?: Date): AsyncIterable<T>;
|
|
58
|
+
abstract fullSync(): AsyncIterable<T>;
|
|
59
|
+
getLastScrapedPosition(): Promise<ScraperState>;
|
|
60
|
+
saveScrapedPosition(state: ScraperState): Promise<void>;
|
|
61
|
+
}
|
|
10
62
|
//# sourceMappingURL=base.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/scrapers/base.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/scrapers/base.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEhG,qBAAa,mBAAmB;IAClB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,MAAM;IAEvC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAkBzC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAU5D,OAAO,CAAC,SAAS;CAGlB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAanD;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAwB3C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,8BAAsB,eAAe,CAAC,CAAC,SAAS,iBAAiB,GAAG,iBAAiB,CACnF,YAAW,mBAAmB,CAAC,CAAC,CAAC;IAEjC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAE/B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;gBAEvC,QAAQ,EAAE,MAAM;IAI5B,QAAQ,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IACnC,QAAQ,CAAC,aAAa,IAAI,MAAM,EAAE;IAClC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC;IAC/C,QAAQ,CAAC,QAAQ,IAAI,aAAa,CAAC,CAAC,CAAC;IAE/B,sBAAsB,IAAI,OAAO,CAAC,YAAY,CAAC;IAI/C,mBAAmB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;CAG9D"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
1
|
+
import { mkdir, readFile, rename, writeFile } from "node:fs/promises";
|
|
2
2
|
import { dirname, join } from "node:path";
|
|
3
3
|
export class ScraperStateManager {
|
|
4
4
|
stateDir;
|
|
@@ -10,9 +10,12 @@ export class ScraperStateManager {
|
|
|
10
10
|
try {
|
|
11
11
|
const raw = await readFile(path, "utf-8");
|
|
12
12
|
const data = JSON.parse(raw);
|
|
13
|
+
const parsed = new Date(data.lastTimestamp);
|
|
13
14
|
return {
|
|
14
15
|
...data,
|
|
15
|
-
|
|
16
|
+
// An Invalid Date makes every cutoff comparison false, re-emitting
|
|
17
|
+
// the full history on every scrape; reset to epoch instead.
|
|
18
|
+
lastTimestamp: Number.isNaN(parsed.getTime()) ? new Date(0) : parsed,
|
|
16
19
|
};
|
|
17
20
|
}
|
|
18
21
|
catch {
|
|
@@ -21,14 +24,100 @@ export class ScraperStateManager {
|
|
|
21
24
|
}
|
|
22
25
|
async save(tool, state) {
|
|
23
26
|
const path = this.statePath(tool);
|
|
27
|
+
const tmpPath = `${path}.tmp`;
|
|
24
28
|
await mkdir(dirname(path), { recursive: true });
|
|
25
|
-
|
|
29
|
+
// Write to a temp file first, then atomically rename it over the target
|
|
30
|
+
// so a mid-write crash never leaves a corrupt state file (M3).
|
|
31
|
+
await writeFile(tmpPath, JSON.stringify(state, null, 2), "utf-8");
|
|
32
|
+
await rename(tmpPath, path);
|
|
26
33
|
}
|
|
27
34
|
statePath(tool) {
|
|
28
35
|
return join(this.stateDir, `${tool}-state.json`);
|
|
29
36
|
}
|
|
30
37
|
}
|
|
31
38
|
export function estimateTokens(text) {
|
|
32
|
-
|
|
39
|
+
if (!text)
|
|
40
|
+
return 0;
|
|
41
|
+
const charCount = text.length;
|
|
42
|
+
// Match programming syntax delimiters
|
|
43
|
+
const symbolMatches = text.match(/[{}[\]();=+\-*&|<>!]/g);
|
|
44
|
+
const symbolCount = symbolMatches ? symbolMatches.length : 0;
|
|
45
|
+
// Text scales at 4 characters per token; symbols weight heavier (2 characters per token)
|
|
46
|
+
const baseTokens = Math.ceil(charCount / 4);
|
|
47
|
+
const syntaxTokens = Math.ceil(symbolCount / 2);
|
|
48
|
+
return baseTokens + syntaxTokens;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Coerce an unknown value to a Date.
|
|
52
|
+
* Handles: Date objects, numeric timestamps (seconds or milliseconds),
|
|
53
|
+
* numeric strings, ISO strings. Returns new Date(0) as sentinel for
|
|
54
|
+
* unrecognised values.
|
|
55
|
+
*/
|
|
56
|
+
export function toDate(value) {
|
|
57
|
+
if (value instanceof Date) {
|
|
58
|
+
return value;
|
|
59
|
+
}
|
|
60
|
+
if (typeof value === "number" && Number.isFinite(value)) {
|
|
61
|
+
const millis = value > 10_000_000_000 ? value : value * 1000;
|
|
62
|
+
return new Date(millis);
|
|
63
|
+
}
|
|
64
|
+
if (typeof value === "string" && value.length > 0) {
|
|
65
|
+
const numeric = Number(value);
|
|
66
|
+
if (Number.isFinite(numeric) && value.trim() !== "") {
|
|
67
|
+
const millis = numeric > 10_000_000_000 ? numeric : numeric * 1000;
|
|
68
|
+
return new Date(millis);
|
|
69
|
+
}
|
|
70
|
+
const parsed = new Date(value);
|
|
71
|
+
if (!Number.isNaN(parsed.getTime())) {
|
|
72
|
+
return parsed;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return new Date(0);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Base class for all conversation scrapers — both built-in and community ones.
|
|
79
|
+
*
|
|
80
|
+
* Extend this class to add a new data source. You only need to implement five
|
|
81
|
+
* members:
|
|
82
|
+
*
|
|
83
|
+
* - `tool` — unique string identifier (e.g. `"zed"`, `"aider"`)
|
|
84
|
+
* - `detect()` — returns true when the data source is present on disk
|
|
85
|
+
* - `getStorePaths()` — transcript source paths used for detection and status
|
|
86
|
+
* - `scrape(since?)` — yield chunks newer than the given date (incremental)
|
|
87
|
+
* - `fullSync()` — yield all chunks from the beginning of time
|
|
88
|
+
*
|
|
89
|
+
* State persistence (position tracking between scrape cycles) is handled
|
|
90
|
+
* automatically by this base class via `ScraperStateManager`.
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```ts
|
|
94
|
+
* import { AbstractScraper, estimateTokens } from "xtctx/scrapers";
|
|
95
|
+
* import type { ConversationChunk } from "xtctx/scrapers";
|
|
96
|
+
*
|
|
97
|
+
* export class ZedScraper extends AbstractScraper {
|
|
98
|
+
* readonly tool = "zed";
|
|
99
|
+
*
|
|
100
|
+
* constructor(private readonly historyDir: string, stateDir: string) {
|
|
101
|
+
* super(stateDir);
|
|
102
|
+
* }
|
|
103
|
+
*
|
|
104
|
+
* async detect() { ... }
|
|
105
|
+
* getStorePaths() { return [this.historyDir]; }
|
|
106
|
+
* async *scrape(since?: Date) { ... }
|
|
107
|
+
* async *fullSync() { ... }
|
|
108
|
+
* }
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
export class AbstractScraper {
|
|
112
|
+
stateManager;
|
|
113
|
+
constructor(stateDir) {
|
|
114
|
+
this.stateManager = new ScraperStateManager(stateDir);
|
|
115
|
+
}
|
|
116
|
+
async getLastScrapedPosition() {
|
|
117
|
+
return this.stateManager.load(this.tool);
|
|
118
|
+
}
|
|
119
|
+
async saveScrapedPosition(state) {
|
|
120
|
+
await this.stateManager.save(this.tool, state);
|
|
121
|
+
}
|
|
33
122
|
}
|
|
34
123
|
//# sourceMappingURL=base.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/scrapers/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/scrapers/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,47 @@
|
|
|
1
|
-
import type { ClaudeCodeChunk
|
|
2
|
-
|
|
1
|
+
import type { ClaudeCodeChunk } from "../types/scraper.js";
|
|
2
|
+
import { AbstractScraper } from "./base.js";
|
|
3
|
+
/**
|
|
4
|
+
* Mutation shapes the claude-code scraper tolerates silently (no warn, no
|
|
5
|
+
* throw). Everything else that falls outside the happy path warns.
|
|
6
|
+
*/
|
|
7
|
+
export declare const ACCEPTED_DEGRADATIONS: {
|
|
8
|
+
/** Projects directory missing — Claude Code is simply not installed. */
|
|
9
|
+
missingProjectsDir: string;
|
|
10
|
+
/** A JSONL line that fails to parse — we skip but warn upstream. */
|
|
11
|
+
malformedJsonlLine: string;
|
|
12
|
+
/** Unknown sibling fields on a line (forward-compat for new keys). */
|
|
13
|
+
unknownFieldsAlongside: string;
|
|
14
|
+
/** Empty/blank lines in JSONL. */
|
|
15
|
+
blankJsonlLine: string;
|
|
16
|
+
};
|
|
17
|
+
export declare class ClaudeCodeScraper extends AbstractScraper<ClaudeCodeChunk> {
|
|
3
18
|
private readonly claudeProjectsDir;
|
|
19
|
+
private readonly projectRoot?;
|
|
4
20
|
readonly tool = "claude-code";
|
|
5
|
-
|
|
6
|
-
constructor(claudeProjectsDir: string, stateDir: string);
|
|
21
|
+
constructor(claudeProjectsDir: string, stateDir: string, projectRoot?: string | undefined);
|
|
7
22
|
detect(): Promise<boolean>;
|
|
8
23
|
getStorePaths(): string[];
|
|
9
24
|
scrape(since?: Date): AsyncIterable<ClaudeCodeChunk>;
|
|
10
25
|
fullSync(): AsyncIterable<ClaudeCodeChunk>;
|
|
11
26
|
parseRaw(raw: unknown): ClaudeCodeChunk;
|
|
12
|
-
getLastScrapedPosition(): Promise<ScraperState>;
|
|
13
|
-
saveScrapedPosition(state: ScraperState): Promise<void>;
|
|
14
27
|
private readAllSessions;
|
|
28
|
+
private readSessionFile;
|
|
29
|
+
/**
|
|
30
|
+
* Coarse pre-filter over encoded store directory names.
|
|
31
|
+
*
|
|
32
|
+
* Encoded names are ambiguous — `-` stands for `:`, `\` and `/` alike — so
|
|
33
|
+
* this only decides which directories are worth opening. Each record's own
|
|
34
|
+
* `cwd` is what actually attributes it (see `recordMatchesProject`), which
|
|
35
|
+
* is both unambiguous and platform-independent. Keeping the prefix wide
|
|
36
|
+
* here lets sessions started from a subdirectory through; the per-record
|
|
37
|
+
* check then rejects a sibling like `<project>--secret`.
|
|
38
|
+
*/
|
|
39
|
+
private filterProjectDirs;
|
|
40
|
+
/**
|
|
41
|
+
* Attribute a record to the project by the `cwd` Claude Code stamps on it.
|
|
42
|
+
* Records without a `cwd` fall back to the directory-name decision already
|
|
43
|
+
* made by `filterProjectDirs`.
|
|
44
|
+
*/
|
|
45
|
+
private recordMatchesProject;
|
|
15
46
|
}
|
|
16
47
|
//# sourceMappingURL=claude-code.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../src/scrapers/claude-code.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../src/scrapers/claude-code.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAiB,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAkB,MAAM,WAAW,CAAC;AAK5D;;;GAGG;AACH,eAAO,MAAM,qBAAqB;IAChC,wEAAwE;;IAExE,oEAAoE;;IAEpE,sEAAsE;;IAEtE,kCAAkC;;CAEnC,CAAC;AA2BF,qBAAa,iBAAkB,SAAQ,eAAe,CAAC,eAAe,CAAC;IAInE,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAElC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAL/B,QAAQ,CAAC,IAAI,iBAAiB;gBAGX,iBAAiB,EAAE,MAAM,EAC1C,QAAQ,EAAE,MAAM,EACC,WAAW,CAAC,EAAE,MAAM,YAAA;IAKjC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAShC,aAAa,IAAI,MAAM,EAAE;IAIlB,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,aAAa,CAAC,eAAe,CAAC;IAMpD,QAAQ,IAAI,aAAa,CAAC,eAAe,CAAC;IAIjD,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe;YAwBxB,eAAe;YA2Cf,eAAe;IA0G9B;;;;;;;;;OASG;IACH,OAAO,CAAC,iBAAiB;IAYzB;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;CAa7B"}
|
|
@@ -2,21 +2,51 @@ import { stat, readdir } from "node:fs/promises";
|
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { createReadStream } from "node:fs";
|
|
4
4
|
import { createInterface } from "node:readline";
|
|
5
|
-
import {
|
|
5
|
+
import { AbstractScraper, estimateTokens } from "./base.js";
|
|
6
|
+
import { encodePathForToolDirectory, pathMatchesProject } from "../utils/project-scope.js";
|
|
7
|
+
const SCRAPER_NAME = "claude-code";
|
|
8
|
+
/**
|
|
9
|
+
* Mutation shapes the claude-code scraper tolerates silently (no warn, no
|
|
10
|
+
* throw). Everything else that falls outside the happy path warns.
|
|
11
|
+
*/
|
|
12
|
+
export const ACCEPTED_DEGRADATIONS = {
|
|
13
|
+
/** Projects directory missing — Claude Code is simply not installed. */
|
|
14
|
+
missingProjectsDir: "~/.claude/projects not present",
|
|
15
|
+
/** A JSONL line that fails to parse — we skip but warn upstream. */
|
|
16
|
+
malformedJsonlLine: "JSONL line is not valid JSON — warned, not fatal",
|
|
17
|
+
/** Unknown sibling fields on a line (forward-compat for new keys). */
|
|
18
|
+
unknownFieldsAlongside: "extra keys alongside known schema",
|
|
19
|
+
/** Empty/blank lines in JSONL. */
|
|
20
|
+
blankJsonlLine: "blank line inside JSONL file",
|
|
21
|
+
};
|
|
6
22
|
const ROLE_MAP = {
|
|
7
23
|
human: "user",
|
|
24
|
+
user: "user",
|
|
8
25
|
assistant: "assistant",
|
|
9
26
|
system: "system",
|
|
10
27
|
tool_use: "tool",
|
|
11
28
|
tool_result: "tool",
|
|
12
29
|
};
|
|
13
|
-
|
|
30
|
+
const NON_MESSAGE_TYPES = new Set([
|
|
31
|
+
"attachment",
|
|
32
|
+
"custom-title",
|
|
33
|
+
"last-prompt",
|
|
34
|
+
"pr-link",
|
|
35
|
+
"progress",
|
|
36
|
+
"queue-operation",
|
|
37
|
+
]);
|
|
38
|
+
function warnDrift(sourcePath, surprise, recordsAffected) {
|
|
39
|
+
console.warn(`[${SCRAPER_NAME}] schema-drift surprise at ${sourcePath}: ${surprise} ` +
|
|
40
|
+
`(records affected: ${recordsAffected})`);
|
|
41
|
+
}
|
|
42
|
+
export class ClaudeCodeScraper extends AbstractScraper {
|
|
14
43
|
claudeProjectsDir;
|
|
44
|
+
projectRoot;
|
|
15
45
|
tool = "claude-code";
|
|
16
|
-
|
|
17
|
-
|
|
46
|
+
constructor(claudeProjectsDir, stateDir, projectRoot) {
|
|
47
|
+
super(stateDir);
|
|
18
48
|
this.claudeProjectsDir = claudeProjectsDir;
|
|
19
|
-
this.
|
|
49
|
+
this.projectRoot = projectRoot;
|
|
20
50
|
}
|
|
21
51
|
async detect() {
|
|
22
52
|
try {
|
|
@@ -40,14 +70,15 @@ export class ClaudeCodeScraper {
|
|
|
40
70
|
}
|
|
41
71
|
parseRaw(raw) {
|
|
42
72
|
const obj = raw;
|
|
43
|
-
const timestamp =
|
|
44
|
-
const content = obj
|
|
73
|
+
const timestamp = parseRecordTimestamp(obj.timestamp);
|
|
74
|
+
const content = extractContent(obj);
|
|
45
75
|
const type = obj.type || "unknown";
|
|
76
|
+
const role = extractRole(obj, type);
|
|
46
77
|
return {
|
|
47
78
|
tool: "claude-code",
|
|
48
79
|
sessionId: obj.sessionId || "unknown",
|
|
49
80
|
timestamp,
|
|
50
|
-
role
|
|
81
|
+
role,
|
|
51
82
|
content,
|
|
52
83
|
metadata: {
|
|
53
84
|
messageIndex: obj.messageIndex || 0,
|
|
@@ -59,22 +90,21 @@ export class ClaudeCodeScraper {
|
|
|
59
90
|
},
|
|
60
91
|
};
|
|
61
92
|
}
|
|
62
|
-
async getLastScrapedPosition() {
|
|
63
|
-
return this.stateManager.load(this.tool);
|
|
64
|
-
}
|
|
65
|
-
async saveScrapedPosition(state) {
|
|
66
|
-
await this.stateManager.save(this.tool, state);
|
|
67
|
-
}
|
|
68
93
|
async *readAllSessions(since) {
|
|
69
94
|
let projectDirs;
|
|
70
95
|
try {
|
|
71
96
|
projectDirs = await readdir(this.claudeProjectsDir);
|
|
72
97
|
}
|
|
73
98
|
catch {
|
|
99
|
+
// ACCEPTED_DEGRADATIONS.missingProjectsDir
|
|
74
100
|
return;
|
|
75
101
|
}
|
|
76
|
-
|
|
102
|
+
const encodedProject = this.projectRoot
|
|
103
|
+
? encodePathForToolDirectory(this.projectRoot).toLowerCase()
|
|
104
|
+
: null;
|
|
105
|
+
for (const projectHash of this.filterProjectDirs(projectDirs)) {
|
|
77
106
|
const projectDir = join(this.claudeProjectsDir, projectHash);
|
|
107
|
+
const exactDirectory = encodedProject === null || projectHash.toLowerCase() === encodedProject;
|
|
78
108
|
let files;
|
|
79
109
|
try {
|
|
80
110
|
files = await readdir(projectDir);
|
|
@@ -86,35 +116,179 @@ export class ClaudeCodeScraper {
|
|
|
86
116
|
if (!file.endsWith(".jsonl")) {
|
|
87
117
|
continue;
|
|
88
118
|
}
|
|
89
|
-
const sessionId = file.replace(
|
|
119
|
+
const sessionId = file.replace(/\.jsonl$/, "");
|
|
90
120
|
const filePath = join(projectDir, file);
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
if (!line.trim()) {
|
|
98
|
-
continue;
|
|
99
|
-
}
|
|
100
|
-
try {
|
|
101
|
-
const obj = JSON.parse(line);
|
|
102
|
-
const timestamp = new Date(obj.timestamp ?? 0);
|
|
103
|
-
if (timestamp <= since) {
|
|
104
|
-
messageIndex += 1;
|
|
105
|
-
continue;
|
|
106
|
-
}
|
|
107
|
-
obj.sessionId = sessionId;
|
|
108
|
-
obj.messageIndex = messageIndex;
|
|
109
|
-
messageIndex += 1;
|
|
110
|
-
yield this.parseRaw(obj);
|
|
111
|
-
}
|
|
112
|
-
catch {
|
|
113
|
-
// Skip malformed lines.
|
|
114
|
-
}
|
|
121
|
+
try {
|
|
122
|
+
yield* this.readSessionFile(filePath, sessionId, since, exactDirectory);
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
// One unreadable file must not abort the remaining files/projects.
|
|
126
|
+
warnDrift(filePath, `unreadable transcript file: ${err.message}`, 0);
|
|
115
127
|
}
|
|
116
128
|
}
|
|
117
129
|
}
|
|
118
130
|
}
|
|
131
|
+
async *readSessionFile(filePath, sessionId, since, exactDirectory) {
|
|
132
|
+
const reader = createInterface({
|
|
133
|
+
input: createReadStream(filePath, { encoding: "utf8" }),
|
|
134
|
+
crlfDelay: Infinity,
|
|
135
|
+
});
|
|
136
|
+
let messageIndex = 0;
|
|
137
|
+
let lineNo = 0;
|
|
138
|
+
for await (const line of reader) {
|
|
139
|
+
lineNo++;
|
|
140
|
+
if (!line.trim()) {
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
let obj;
|
|
144
|
+
try {
|
|
145
|
+
obj = JSON.parse(line);
|
|
146
|
+
}
|
|
147
|
+
catch (err) {
|
|
148
|
+
// ACCEPTED_DEGRADATIONS.malformedJsonlLine, but warn so the
|
|
149
|
+
// mutation test can see drift instead of data silently vanishing.
|
|
150
|
+
warnDrift(`${filePath}:${lineNo}`, `line is not valid JSON: ${err.message}`, 1);
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
if (NON_MESSAGE_TYPES.has(String(obj.type))) {
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
if (!this.recordMatchesProject(obj, exactDirectory)) {
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
// Strict-mode schema check: warn (but still emit) on shape surprise.
|
|
160
|
+
if (!("type" in obj)) {
|
|
161
|
+
warnDrift(`${filePath}:${lineNo}`, "record is missing required 'type' field — likely renamed", 1);
|
|
162
|
+
}
|
|
163
|
+
else if (typeof obj.type !== "string" || !(obj.type in ROLE_MAP)) {
|
|
164
|
+
warnDrift(`${filePath}:${lineNo}`, `unknown 'type' value ${JSON.stringify(obj.type)}`, 1);
|
|
165
|
+
}
|
|
166
|
+
if ("content" in obj &&
|
|
167
|
+
obj.content !== undefined &&
|
|
168
|
+
typeof obj.content !== "string") {
|
|
169
|
+
warnDrift(`${filePath}:${lineNo}`, `expected 'content' to be a string, got ${describeType(obj.content)}`, 1);
|
|
170
|
+
}
|
|
171
|
+
if (!("timestamp" in obj)) {
|
|
172
|
+
warnDrift(`${filePath}:${lineNo}`, "record is missing 'timestamp' field", 1);
|
|
173
|
+
}
|
|
174
|
+
else if (typeof obj.timestamp !== "string") {
|
|
175
|
+
warnDrift(`${filePath}:${lineNo}`, `expected 'timestamp' string, got ${describeType(obj.timestamp)}`, 1);
|
|
176
|
+
}
|
|
177
|
+
const timestamp = parseRecordTimestamp(obj.timestamp);
|
|
178
|
+
// Every message-shaped record consumes an index, whether or not it is
|
|
179
|
+
// emitted, so chunk identity is identical between full and incremental
|
|
180
|
+
// scrapes (chunk ids hash the index).
|
|
181
|
+
const currentIndex = messageIndex;
|
|
182
|
+
messageIndex += 1;
|
|
183
|
+
// A zero `since` means full sync: emit even epoch-sentinel timestamps.
|
|
184
|
+
if (since.getTime() > 0 && timestamp <= since) {
|
|
185
|
+
continue;
|
|
186
|
+
}
|
|
187
|
+
obj.sessionId = sessionId;
|
|
188
|
+
obj.messageIndex = currentIndex;
|
|
189
|
+
const chunk = this.parseRaw(obj);
|
|
190
|
+
if (!chunk.content.trim()) {
|
|
191
|
+
continue;
|
|
192
|
+
}
|
|
193
|
+
yield chunk;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Coarse pre-filter over encoded store directory names.
|
|
198
|
+
*
|
|
199
|
+
* Encoded names are ambiguous — `-` stands for `:`, `\` and `/` alike — so
|
|
200
|
+
* this only decides which directories are worth opening. Each record's own
|
|
201
|
+
* `cwd` is what actually attributes it (see `recordMatchesProject`), which
|
|
202
|
+
* is both unambiguous and platform-independent. Keeping the prefix wide
|
|
203
|
+
* here lets sessions started from a subdirectory through; the per-record
|
|
204
|
+
* check then rejects a sibling like `<project>--secret`.
|
|
205
|
+
*/
|
|
206
|
+
filterProjectDirs(projectDirs) {
|
|
207
|
+
if (!this.projectRoot) {
|
|
208
|
+
return projectDirs;
|
|
209
|
+
}
|
|
210
|
+
const encodedProject = encodePathForToolDirectory(this.projectRoot).toLowerCase();
|
|
211
|
+
return projectDirs.filter((projectDir) => {
|
|
212
|
+
const normalized = projectDir.toLowerCase();
|
|
213
|
+
return normalized === encodedProject || normalized.startsWith(`${encodedProject}-`);
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Attribute a record to the project by the `cwd` Claude Code stamps on it.
|
|
218
|
+
* Records without a `cwd` fall back to the directory-name decision already
|
|
219
|
+
* made by `filterProjectDirs`.
|
|
220
|
+
*/
|
|
221
|
+
recordMatchesProject(obj, exactDirectory) {
|
|
222
|
+
if (!this.projectRoot) {
|
|
223
|
+
return true;
|
|
224
|
+
}
|
|
225
|
+
const cwd = obj.cwd;
|
|
226
|
+
if (typeof cwd !== "string" || cwd.length === 0) {
|
|
227
|
+
// No provenance on the record. An exact store-directory match is itself
|
|
228
|
+
// provenance, so keep it; a directory that only matched by prefix could
|
|
229
|
+
// be a plain sibling (`proj-v2` beside `proj`), so fail closed.
|
|
230
|
+
return exactDirectory;
|
|
231
|
+
}
|
|
232
|
+
return pathMatchesProject(cwd, this.projectRoot);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Missing or unparseable timestamps become the epoch sentinel rather than an
|
|
237
|
+
* Invalid Date, which would poison cutoff comparisons and toISOString().
|
|
238
|
+
*/
|
|
239
|
+
function parseRecordTimestamp(value) {
|
|
240
|
+
const parsed = new Date(value || 0);
|
|
241
|
+
return Number.isNaN(parsed.getTime()) ? new Date(0) : parsed;
|
|
242
|
+
}
|
|
243
|
+
function extractRole(obj, type) {
|
|
244
|
+
const message = isRecord(obj.message) ? obj.message : {};
|
|
245
|
+
const role = typeof message.role === "string" ? message.role : type;
|
|
246
|
+
return ROLE_MAP[role] ?? ROLE_MAP[type] ?? "system";
|
|
247
|
+
}
|
|
248
|
+
function extractContent(obj) {
|
|
249
|
+
if (typeof obj.content === "string") {
|
|
250
|
+
return obj.content;
|
|
251
|
+
}
|
|
252
|
+
const message = isRecord(obj.message) ? obj.message : undefined;
|
|
253
|
+
if (!message) {
|
|
254
|
+
return "";
|
|
255
|
+
}
|
|
256
|
+
return stringifyContent(message.content);
|
|
257
|
+
}
|
|
258
|
+
function stringifyContent(value) {
|
|
259
|
+
if (typeof value === "string") {
|
|
260
|
+
return value;
|
|
261
|
+
}
|
|
262
|
+
if (!Array.isArray(value)) {
|
|
263
|
+
return "";
|
|
264
|
+
}
|
|
265
|
+
return value
|
|
266
|
+
.map((item) => {
|
|
267
|
+
if (typeof item === "string") {
|
|
268
|
+
return item;
|
|
269
|
+
}
|
|
270
|
+
if (!isRecord(item)) {
|
|
271
|
+
return "";
|
|
272
|
+
}
|
|
273
|
+
if (typeof item.text === "string") {
|
|
274
|
+
return item.text;
|
|
275
|
+
}
|
|
276
|
+
if (typeof item.content === "string") {
|
|
277
|
+
return item.content;
|
|
278
|
+
}
|
|
279
|
+
return "";
|
|
280
|
+
})
|
|
281
|
+
.filter((item) => item.length > 0)
|
|
282
|
+
.join("\n");
|
|
283
|
+
}
|
|
284
|
+
function describeType(value) {
|
|
285
|
+
if (value === null)
|
|
286
|
+
return "null";
|
|
287
|
+
if (Array.isArray(value))
|
|
288
|
+
return "array";
|
|
289
|
+
return typeof value;
|
|
290
|
+
}
|
|
291
|
+
function isRecord(value) {
|
|
292
|
+
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
119
293
|
}
|
|
120
294
|
//# sourceMappingURL=claude-code.js.map
|