xtctx 0.3.2 → 0.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (300) hide show
  1. package/CHANGELOG.md +267 -122
  2. package/LICENSE +21 -21
  3. package/README.md +154 -121
  4. package/dist/src/cli/disconnect.d.ts +8 -0
  5. package/dist/src/cli/disconnect.d.ts.map +1 -0
  6. package/dist/src/cli/disconnect.js +42 -0
  7. package/dist/src/cli/disconnect.js.map +1 -0
  8. package/dist/src/cli/hook.d.ts +7 -0
  9. package/dist/src/cli/hook.d.ts.map +1 -0
  10. package/dist/src/cli/hook.js +21 -0
  11. package/dist/src/cli/hook.js.map +1 -0
  12. package/dist/src/cli/index.d.ts.map +1 -1
  13. package/dist/src/cli/index.js +71 -33
  14. package/dist/src/cli/index.js.map +1 -1
  15. package/dist/src/cli/setup.d.ts +8 -0
  16. package/dist/src/cli/setup.d.ts.map +1 -0
  17. package/dist/src/cli/setup.js +77 -0
  18. package/dist/src/cli/setup.js.map +1 -0
  19. package/dist/src/cli/status.d.ts +7 -0
  20. package/dist/src/cli/status.d.ts.map +1 -0
  21. package/dist/src/cli/status.js +84 -0
  22. package/dist/src/cli/status.js.map +1 -0
  23. package/dist/src/config/disconnect.d.ts +32 -0
  24. package/dist/src/config/disconnect.d.ts.map +1 -0
  25. package/dist/src/config/disconnect.js +304 -0
  26. package/dist/src/config/disconnect.js.map +1 -0
  27. package/dist/src/config/mcp-config.d.ts +91 -0
  28. package/dist/src/config/mcp-config.d.ts.map +1 -0
  29. package/dist/src/config/mcp-config.js +462 -0
  30. package/dist/src/config/mcp-config.js.map +1 -0
  31. package/dist/src/config/setup.d.ts +37 -0
  32. package/dist/src/config/setup.d.ts.map +1 -0
  33. package/dist/src/config/setup.js +338 -0
  34. package/dist/src/config/setup.js.map +1 -0
  35. package/dist/src/config/skills.d.ts +73 -0
  36. package/dist/src/config/skills.d.ts.map +1 -0
  37. package/dist/src/config/skills.js +427 -0
  38. package/dist/src/config/skills.js.map +1 -0
  39. package/dist/src/handoff/embeddings.d.ts +15 -0
  40. package/dist/src/handoff/embeddings.d.ts.map +1 -0
  41. package/dist/src/handoff/embeddings.js +63 -0
  42. package/dist/src/handoff/embeddings.js.map +1 -0
  43. package/dist/src/handoff/sqlite-index.d.ts +43 -0
  44. package/dist/src/handoff/sqlite-index.d.ts.map +1 -0
  45. package/dist/src/handoff/sqlite-index.js +718 -0
  46. package/dist/src/handoff/sqlite-index.js.map +1 -0
  47. package/dist/src/handoff/types.d.ts +57 -0
  48. package/dist/src/handoff/types.d.ts.map +1 -0
  49. package/dist/src/handoff/types.js +2 -0
  50. package/dist/src/handoff/types.js.map +1 -0
  51. package/dist/src/handoff/vector.d.ts +4 -0
  52. package/dist/src/handoff/vector.d.ts.map +1 -0
  53. package/dist/src/handoff/vector.js +31 -0
  54. package/dist/src/handoff/vector.js.map +1 -0
  55. package/dist/src/mcp/server.d.ts +2 -19
  56. package/dist/src/mcp/server.d.ts.map +1 -1
  57. package/dist/src/mcp/server.js +75 -199
  58. package/dist/src/mcp/server.js.map +1 -1
  59. package/dist/src/mcp/tools/continuity.d.ts +3 -0
  60. package/dist/src/mcp/tools/continuity.d.ts.map +1 -0
  61. package/dist/src/mcp/tools/continuity.js +30 -0
  62. package/dist/src/mcp/tools/continuity.js.map +1 -0
  63. package/dist/src/mcp/tools/manifest.d.ts +40 -0
  64. package/dist/src/mcp/tools/manifest.d.ts.map +1 -0
  65. package/dist/src/mcp/tools/manifest.js +96 -0
  66. package/dist/src/mcp/tools/manifest.js.map +1 -0
  67. package/dist/src/mcp/tools/sessions.d.ts +11 -32
  68. package/dist/src/mcp/tools/sessions.d.ts.map +1 -1
  69. package/dist/src/mcp/tools/sessions.js +47 -13
  70. package/dist/src/mcp/tools/sessions.js.map +1 -1
  71. package/dist/src/runtime/services.d.ts +11 -38
  72. package/dist/src/runtime/services.d.ts.map +1 -1
  73. package/dist/src/runtime/services.js +43 -202
  74. package/dist/src/runtime/services.js.map +1 -1
  75. package/dist/src/scrapers/antigravity.d.ts +41 -0
  76. package/dist/src/scrapers/antigravity.d.ts.map +1 -0
  77. package/dist/src/scrapers/antigravity.js +858 -0
  78. package/dist/src/scrapers/antigravity.js.map +1 -0
  79. package/dist/src/scrapers/base.d.ts +53 -1
  80. package/dist/src/scrapers/base.d.ts.map +1 -1
  81. package/dist/src/scrapers/base.js +89 -3
  82. package/dist/src/scrapers/base.js.map +1 -1
  83. package/dist/src/scrapers/claude-code.d.ts +20 -6
  84. package/dist/src/scrapers/claude-code.d.ts.map +1 -1
  85. package/dist/src/scrapers/claude-code.js +144 -26
  86. package/dist/src/scrapers/claude-code.js.map +1 -1
  87. package/dist/src/scrapers/codex.d.ts +36 -6
  88. package/dist/src/scrapers/codex.d.ts.map +1 -1
  89. package/dist/src/scrapers/codex.js +256 -46
  90. package/dist/src/scrapers/codex.js.map +1 -1
  91. package/dist/src/scrapers/copilot-cli.d.ts +33 -0
  92. package/dist/src/scrapers/copilot-cli.d.ts.map +1 -0
  93. package/dist/src/scrapers/copilot-cli.js +257 -0
  94. package/dist/src/scrapers/copilot-cli.js.map +1 -0
  95. package/dist/src/scrapers/copilot.d.ts +41 -8
  96. package/dist/src/scrapers/copilot.d.ts.map +1 -1
  97. package/dist/src/scrapers/copilot.js +256 -118
  98. package/dist/src/scrapers/copilot.js.map +1 -1
  99. package/dist/src/scrapers/cursor.d.ts +24 -9
  100. package/dist/src/scrapers/cursor.d.ts.map +1 -1
  101. package/dist/src/scrapers/cursor.js +247 -151
  102. package/dist/src/scrapers/cursor.js.map +1 -1
  103. package/dist/src/scrapers/index.d.ts +18 -0
  104. package/dist/src/scrapers/index.d.ts.map +1 -0
  105. package/dist/src/scrapers/index.js +17 -0
  106. package/dist/src/scrapers/index.js.map +1 -0
  107. package/dist/src/scrapers/opencode.d.ts +36 -0
  108. package/dist/src/scrapers/opencode.d.ts.map +1 -0
  109. package/dist/src/scrapers/opencode.js +248 -0
  110. package/dist/src/scrapers/opencode.js.map +1 -0
  111. package/dist/src/scrapers/registry.d.ts +1 -0
  112. package/dist/src/scrapers/registry.d.ts.map +1 -1
  113. package/dist/src/scrapers/registry.js +3 -0
  114. package/dist/src/scrapers/registry.js.map +1 -1
  115. package/dist/src/tools/sources.d.ts +28 -0
  116. package/dist/src/tools/sources.d.ts.map +1 -0
  117. package/dist/src/tools/sources.js +149 -0
  118. package/dist/src/tools/sources.js.map +1 -0
  119. package/dist/src/types/config.d.ts +24 -37
  120. package/dist/src/types/config.d.ts.map +1 -1
  121. package/dist/src/types/index.d.ts +0 -2
  122. package/dist/src/types/index.d.ts.map +1 -1
  123. package/dist/src/types/index.js +0 -2
  124. package/dist/src/types/index.js.map +1 -1
  125. package/dist/src/types/scraper.d.ts +34 -5
  126. package/dist/src/types/scraper.d.ts.map +1 -1
  127. package/dist/src/utils/errors.d.ts +2 -0
  128. package/dist/src/utils/errors.d.ts.map +1 -0
  129. package/dist/src/utils/errors.js +7 -0
  130. package/dist/src/utils/errors.js.map +1 -0
  131. package/dist/src/utils/package-info.d.ts +11 -0
  132. package/dist/src/utils/package-info.d.ts.map +1 -0
  133. package/dist/src/utils/package-info.js +30 -0
  134. package/dist/src/utils/package-info.js.map +1 -0
  135. package/dist/src/utils/project-scope.d.ts +3 -0
  136. package/dist/src/utils/project-scope.d.ts.map +1 -0
  137. package/dist/src/utils/project-scope.js +45 -0
  138. package/dist/src/utils/project-scope.js.map +1 -0
  139. package/package.json +70 -66
  140. package/dist/src/api/routes/config.d.ts +0 -4
  141. package/dist/src/api/routes/config.d.ts.map +0 -1
  142. package/dist/src/api/routes/config.js +0 -61
  143. package/dist/src/api/routes/config.js.map +0 -1
  144. package/dist/src/api/routes/knowledge.d.ts +0 -4
  145. package/dist/src/api/routes/knowledge.d.ts.map +0 -1
  146. package/dist/src/api/routes/knowledge.js +0 -40
  147. package/dist/src/api/routes/knowledge.js.map +0 -1
  148. package/dist/src/api/routes/search.d.ts +0 -7
  149. package/dist/src/api/routes/search.d.ts.map +0 -1
  150. package/dist/src/api/routes/search.js +0 -108
  151. package/dist/src/api/routes/search.js.map +0 -1
  152. package/dist/src/api/routes/sources.d.ts +0 -12
  153. package/dist/src/api/routes/sources.d.ts.map +0 -1
  154. package/dist/src/api/routes/sources.js +0 -70
  155. package/dist/src/api/routes/sources.js.map +0 -1
  156. package/dist/src/api/server.d.ts +0 -26
  157. package/dist/src/api/server.d.ts.map +0 -1
  158. package/dist/src/api/server.js +0 -312
  159. package/dist/src/api/server.js.map +0 -1
  160. package/dist/src/cli/ingest.d.ts +0 -6
  161. package/dist/src/cli/ingest.d.ts.map +0 -1
  162. package/dist/src/cli/ingest.js +0 -11
  163. package/dist/src/cli/ingest.js.map +0 -1
  164. package/dist/src/cli/init.d.ts +0 -6
  165. package/dist/src/cli/init.d.ts.map +0 -1
  166. package/dist/src/cli/init.js +0 -105
  167. package/dist/src/cli/init.js.map +0 -1
  168. package/dist/src/cli/serve.d.ts +0 -7
  169. package/dist/src/cli/serve.d.ts.map +0 -1
  170. package/dist/src/cli/serve.js +0 -100
  171. package/dist/src/cli/serve.js.map +0 -1
  172. package/dist/src/cli/sync.d.ts +0 -5
  173. package/dist/src/cli/sync.d.ts.map +0 -1
  174. package/dist/src/cli/sync.js +0 -13
  175. package/dist/src/cli/sync.js.map +0 -1
  176. package/dist/src/compaction/pipeline.d.ts +0 -19
  177. package/dist/src/compaction/pipeline.d.ts.map +0 -1
  178. package/dist/src/compaction/pipeline.js +0 -37
  179. package/dist/src/compaction/pipeline.js.map +0 -1
  180. package/dist/src/compaction/providers/cli.d.ts +0 -13
  181. package/dist/src/compaction/providers/cli.d.ts.map +0 -1
  182. package/dist/src/compaction/providers/cli.js +0 -60
  183. package/dist/src/compaction/providers/cli.js.map +0 -1
  184. package/dist/src/compaction/rule-based.d.ts +0 -8
  185. package/dist/src/compaction/rule-based.d.ts.map +0 -1
  186. package/dist/src/compaction/rule-based.js +0 -120
  187. package/dist/src/compaction/rule-based.js.map +0 -1
  188. package/dist/src/config/loader.d.ts +0 -12
  189. package/dist/src/config/loader.d.ts.map +0 -1
  190. package/dist/src/config/loader.js +0 -76
  191. package/dist/src/config/loader.js.map +0 -1
  192. package/dist/src/config/mappings/claude-code.d.ts +0 -3
  193. package/dist/src/config/mappings/claude-code.d.ts.map +0 -1
  194. package/dist/src/config/mappings/claude-code.js +0 -31
  195. package/dist/src/config/mappings/claude-code.js.map +0 -1
  196. package/dist/src/config/mappings/codex.d.ts +0 -3
  197. package/dist/src/config/mappings/codex.d.ts.map +0 -1
  198. package/dist/src/config/mappings/codex.js +0 -31
  199. package/dist/src/config/mappings/codex.js.map +0 -1
  200. package/dist/src/config/mappings/copilot.d.ts +0 -3
  201. package/dist/src/config/mappings/copilot.d.ts.map +0 -1
  202. package/dist/src/config/mappings/copilot.js +0 -33
  203. package/dist/src/config/mappings/copilot.js.map +0 -1
  204. package/dist/src/config/mappings/cursor.d.ts +0 -3
  205. package/dist/src/config/mappings/cursor.d.ts.map +0 -1
  206. package/dist/src/config/mappings/cursor.js +0 -29
  207. package/dist/src/config/mappings/cursor.js.map +0 -1
  208. package/dist/src/config/sync.d.ts +0 -13
  209. package/dist/src/config/sync.d.ts.map +0 -1
  210. package/dist/src/config/sync.js +0 -96
  211. package/dist/src/config/sync.js.map +0 -1
  212. package/dist/src/ingestion/coordinator.d.ts +0 -37
  213. package/dist/src/ingestion/coordinator.d.ts.map +0 -1
  214. package/dist/src/ingestion/coordinator.js +0 -127
  215. package/dist/src/ingestion/coordinator.js.map +0 -1
  216. package/dist/src/ingestion/daemon.d.ts +0 -17
  217. package/dist/src/ingestion/daemon.d.ts.map +0 -1
  218. package/dist/src/ingestion/daemon.js +0 -35
  219. package/dist/src/ingestion/daemon.js.map +0 -1
  220. package/dist/src/ingestion/watcher.d.ts +0 -19
  221. package/dist/src/ingestion/watcher.d.ts.map +0 -1
  222. package/dist/src/ingestion/watcher.js +0 -70
  223. package/dist/src/ingestion/watcher.js.map +0 -1
  224. package/dist/src/knowledge/autotag.d.ts +0 -3
  225. package/dist/src/knowledge/autotag.d.ts.map +0 -1
  226. package/dist/src/knowledge/autotag.js +0 -24
  227. package/dist/src/knowledge/autotag.js.map +0 -1
  228. package/dist/src/knowledge/dedup.d.ts +0 -7
  229. package/dist/src/knowledge/dedup.d.ts.map +0 -1
  230. package/dist/src/knowledge/dedup.js +0 -15
  231. package/dist/src/knowledge/dedup.js.map +0 -1
  232. package/dist/src/knowledge/repository.d.ts +0 -12
  233. package/dist/src/knowledge/repository.d.ts.map +0 -1
  234. package/dist/src/knowledge/repository.js +0 -74
  235. package/dist/src/knowledge/repository.js.map +0 -1
  236. package/dist/src/mcp/tools/config.d.ts +0 -36
  237. package/dist/src/mcp/tools/config.d.ts.map +0 -1
  238. package/dist/src/mcp/tools/config.js +0 -54
  239. package/dist/src/mcp/tools/config.js.map +0 -1
  240. package/dist/src/mcp/tools/knowledge.d.ts +0 -17
  241. package/dist/src/mcp/tools/knowledge.d.ts.map +0 -1
  242. package/dist/src/mcp/tools/knowledge.js +0 -46
  243. package/dist/src/mcp/tools/knowledge.js.map +0 -1
  244. package/dist/src/mcp/tools/search.d.ts +0 -22
  245. package/dist/src/mcp/tools/search.d.ts.map +0 -1
  246. package/dist/src/mcp/tools/search.js +0 -30
  247. package/dist/src/mcp/tools/search.js.map +0 -1
  248. package/dist/src/mcp/tools/write.d.ts +0 -38
  249. package/dist/src/mcp/tools/write.d.ts.map +0 -1
  250. package/dist/src/mcp/tools/write.js +0 -97
  251. package/dist/src/mcp/tools/write.js.map +0 -1
  252. package/dist/src/runtime/ingestion.d.ts +0 -17
  253. package/dist/src/runtime/ingestion.d.ts.map +0 -1
  254. package/dist/src/runtime/ingestion.js +0 -106
  255. package/dist/src/runtime/ingestion.js.map +0 -1
  256. package/dist/src/scrapers/gemini.d.ts +0 -17
  257. package/dist/src/scrapers/gemini.d.ts.map +0 -1
  258. package/dist/src/scrapers/gemini.js +0 -245
  259. package/dist/src/scrapers/gemini.js.map +0 -1
  260. package/dist/src/store/embeddings.d.ts +0 -9
  261. package/dist/src/store/embeddings.d.ts.map +0 -1
  262. package/dist/src/store/embeddings.js +0 -28
  263. package/dist/src/store/embeddings.js.map +0 -1
  264. package/dist/src/store/lance.d.ts +0 -25
  265. package/dist/src/store/lance.d.ts.map +0 -1
  266. package/dist/src/store/lance.js +0 -74
  267. package/dist/src/store/lance.js.map +0 -1
  268. package/dist/src/store/search.d.ts +0 -18
  269. package/dist/src/store/search.d.ts.map +0 -1
  270. package/dist/src/store/search.js +0 -55
  271. package/dist/src/store/search.js.map +0 -1
  272. package/dist/src/types/compaction.d.ts +0 -29
  273. package/dist/src/types/compaction.d.ts.map +0 -1
  274. package/dist/src/types/compaction.js +0 -2
  275. package/dist/src/types/compaction.js.map +0 -1
  276. package/dist/src/types/context.d.ts +0 -33
  277. package/dist/src/types/context.d.ts.map +0 -1
  278. package/dist/src/types/context.js +0 -18
  279. package/dist/src/types/context.js.map +0 -1
  280. package/dist/src/utils/retry.d.ts +0 -11
  281. package/dist/src/utils/retry.d.ts.map +0 -1
  282. package/dist/src/utils/retry.js +0 -46
  283. package/dist/src/utils/retry.js.map +0 -1
  284. package/dist/src/utils/shutdown.d.ts +0 -25
  285. package/dist/src/utils/shutdown.d.ts.map +0 -1
  286. package/dist/src/utils/shutdown.js +0 -56
  287. package/dist/src/utils/shutdown.js.map +0 -1
  288. package/dist/web/apple-touch-icon.png +0 -0
  289. package/dist/web/assets/index-Nuadr5ox.css +0 -1
  290. package/dist/web/assets/index-aA0u8eXA.js +0 -3504
  291. package/dist/web/assets/primeicons-C6QP2o4f.woff2 +0 -0
  292. package/dist/web/assets/primeicons-DMOk5skT.eot +0 -0
  293. package/dist/web/assets/primeicons-Dr5RGzOO.svg +0 -345
  294. package/dist/web/assets/primeicons-MpK4pl85.ttf +0 -0
  295. package/dist/web/assets/primeicons-WjwUDZjB.woff +0 -0
  296. package/dist/web/favicon.ico +0 -0
  297. package/dist/web/favicon.svg +0 -21
  298. package/dist/web/index.html +0 -21
  299. package/dist/web/site.webmanifest +0 -19
  300. package/dist/web/vite.svg +0 -1
@@ -0,0 +1,257 @@
1
+ import { createReadStream } from "node:fs";
2
+ import { readdir, stat } from "node:fs/promises";
3
+ import { join } from "node:path";
4
+ import { createInterface } from "node:readline";
5
+ import { AbstractScraper, estimateTokens, toDate } from "./base.js";
6
+ const SCRAPER_NAME = "copilot-cli";
7
+ /**
8
+ * Mutation shapes the copilot-cli scraper tolerates silently. Anything
9
+ * outside this whitelist that drops records must warn.
10
+ */
11
+ export const ACCEPTED_DEGRADATIONS = {
12
+ /** Sessions root missing — Copilot CLI not installed. */
13
+ missingSessionRoot: "~/.copilot/session-state directory absent",
14
+ /** Session directory has no events.jsonl file yet — fresh session. */
15
+ missingEventsJsonl: "session directory has no events.jsonl",
16
+ /** Blank line in events.jsonl. */
17
+ blankJsonlLine: "blank line in events.jsonl",
18
+ /** Event with no extractable role — many event types (status, tool_call,
19
+ * subagent meta, etc.) legitimately have no role. */
20
+ noRole: "event has no role — non-conversation event",
21
+ /** Event with no extractable text content. */
22
+ noContent: "event has role but no text content",
23
+ /** Forward-compat unknown keys alongside known fields. */
24
+ unknownFieldsAlongside: "extra keys alongside known event schema",
25
+ };
26
+ const ROLE_MAP = {
27
+ user: "user",
28
+ human: "user",
29
+ assistant: "assistant",
30
+ ai: "assistant",
31
+ system: "system",
32
+ tool: "tool",
33
+ };
34
+ function warnDrift(sourcePath, surprise, recordsAffected) {
35
+ console.warn(`[${SCRAPER_NAME}] schema-drift surprise at ${sourcePath}: ${surprise} ` +
36
+ `(records affected: ${recordsAffected})`);
37
+ }
38
+ export class CopilotCliScraper extends AbstractScraper {
39
+ sessionStateDir;
40
+ tool = "copilot-cli";
41
+ constructor(sessionStateDir, stateDir) {
42
+ super(stateDir);
43
+ this.sessionStateDir = sessionStateDir;
44
+ }
45
+ async detect() {
46
+ try {
47
+ const target = await stat(this.sessionStateDir);
48
+ return target.isDirectory();
49
+ }
50
+ catch {
51
+ return false;
52
+ }
53
+ }
54
+ getStorePaths() {
55
+ return [this.sessionStateDir];
56
+ }
57
+ async *scrape(since) {
58
+ const state = await this.getLastScrapedPosition();
59
+ const cutoff = since ?? state.lastTimestamp;
60
+ yield* this.readAllSessions(cutoff);
61
+ }
62
+ async *fullSync() {
63
+ yield* this.readAllSessions(new Date(0));
64
+ }
65
+ async *readAllSessions(since) {
66
+ let sessionDirs;
67
+ try {
68
+ sessionDirs = await readdir(this.sessionStateDir);
69
+ }
70
+ catch {
71
+ // ACCEPTED_DEGRADATIONS.missingSessionRoot
72
+ return;
73
+ }
74
+ for (const sessionId of sessionDirs) {
75
+ const sessionDir = join(this.sessionStateDir, sessionId);
76
+ let dirStat;
77
+ try {
78
+ dirStat = await stat(sessionDir);
79
+ }
80
+ catch {
81
+ continue;
82
+ }
83
+ if (!dirStat.isDirectory())
84
+ continue;
85
+ const eventsPath = join(sessionDir, "events.jsonl");
86
+ try {
87
+ const eventsStat = await stat(eventsPath);
88
+ if (!eventsStat.isFile())
89
+ continue;
90
+ }
91
+ catch {
92
+ // ACCEPTED_DEGRADATIONS.missingEventsJsonl
93
+ continue;
94
+ }
95
+ yield* this.readEventsFile(eventsPath, sessionId, since);
96
+ }
97
+ }
98
+ async *readEventsFile(filePath, sessionId, since) {
99
+ const reader = createInterface({
100
+ input: createReadStream(filePath, { encoding: "utf8" }),
101
+ crlfDelay: Infinity,
102
+ });
103
+ let messageIndex = 0;
104
+ let lineNo = 0;
105
+ for await (const line of reader) {
106
+ lineNo++;
107
+ if (!line.trim()) {
108
+ // ACCEPTED_DEGRADATIONS.blankJsonlLine
109
+ continue;
110
+ }
111
+ let event;
112
+ try {
113
+ event = JSON.parse(line);
114
+ }
115
+ catch (err) {
116
+ warnDrift(`${filePath}:${lineNo}`, `events.jsonl line is not valid JSON: ${err.message}`, 1);
117
+ continue;
118
+ }
119
+ if (!isRecord(event)) {
120
+ warnDrift(`${filePath}:${lineNo}`, `events.jsonl line is not an object (got ${describeType(event)})`, 1);
121
+ continue;
122
+ }
123
+ const role = extractRole(event);
124
+ const content = extractContent(event);
125
+ if (!role) {
126
+ // If the event looks like a conversation message (has extractable
127
+ // content AND a 'message' or 'role'-shaped sibling that we COULDN'T
128
+ // route), warn — likely a rename. Routine non-conversation events
129
+ // (status, tool_call, etc.) carry no content and are silent.
130
+ if (content) {
131
+ const looksLikeMessage = event.type === "message" ||
132
+ "role" in event ||
133
+ (isRecord(event.message) && "role" in event.message);
134
+ if (looksLikeMessage) {
135
+ warnDrift(`${filePath}:${lineNo}`, "event has content but no readable role — likely role-field rename", 1);
136
+ }
137
+ }
138
+ // ACCEPTED_DEGRADATIONS.noRole — non-conversation events are
139
+ // routine in events.jsonl. Skip silently.
140
+ continue;
141
+ }
142
+ if (!content) {
143
+ // Role is present but no content extractable. If a 'content' key
144
+ // exists in an unexpected shape (null, number, etc.), warn — silent
145
+ // skip would hide a content-field retype. A genuinely-missing content
146
+ // key on a role'd event is unusual but not necessarily drift.
147
+ if ("content" in event && typeof event.content !== "string" && !Array.isArray(event.content)) {
148
+ warnDrift(`${filePath}:${lineNo}`, `event has role but 'content' is unexpected type ${describeType(event.content)}`, 1);
149
+ }
150
+ // ACCEPTED_DEGRADATIONS.noContent
151
+ continue;
152
+ }
153
+ const tsValue = event.timestamp ?? event.created_at ?? event.createdAt ?? event.time;
154
+ const timestamp = toDate(tsValue);
155
+ if (timestamp <= since) {
156
+ messageIndex++;
157
+ continue;
158
+ }
159
+ const eventType = typeof event.type === "string" ? event.type : undefined;
160
+ yield {
161
+ tool: "copilot-cli",
162
+ sessionId,
163
+ timestamp,
164
+ role,
165
+ content,
166
+ metadata: {
167
+ messageIndex,
168
+ tokenEstimate: estimateTokens(content),
169
+ referencedFiles: [],
170
+ eventType,
171
+ },
172
+ };
173
+ messageIndex++;
174
+ }
175
+ }
176
+ }
177
+ function extractRole(event) {
178
+ // Try event.role first.
179
+ if (typeof event.role === "string") {
180
+ const mapped = ROLE_MAP[event.role.toLowerCase()];
181
+ if (mapped)
182
+ return mapped;
183
+ }
184
+ // Try event.message.role.
185
+ const message = event.message;
186
+ if (isRecord(message) && typeof message.role === "string") {
187
+ const mapped = ROLE_MAP[message.role.toLowerCase()];
188
+ if (mapped)
189
+ return mapped;
190
+ }
191
+ return null;
192
+ }
193
+ function extractContent(event) {
194
+ // 1. event.content as string.
195
+ if (typeof event.content === "string") {
196
+ const trimmed = event.content.trim();
197
+ if (trimmed.length > 0)
198
+ return trimmed;
199
+ }
200
+ // 2. event.text as string.
201
+ if (typeof event.text === "string") {
202
+ const trimmed = event.text.trim();
203
+ if (trimmed.length > 0)
204
+ return trimmed;
205
+ }
206
+ // 3. event.message.content as string or array of {type, text}.
207
+ const message = event.message;
208
+ if (isRecord(message)) {
209
+ const inner = message.content;
210
+ if (typeof inner === "string") {
211
+ const trimmed = inner.trim();
212
+ if (trimmed.length > 0)
213
+ return trimmed;
214
+ }
215
+ if (Array.isArray(inner)) {
216
+ const texts = inner
217
+ .map((item) => {
218
+ if (typeof item === "string")
219
+ return item;
220
+ if (isRecord(item) && typeof item.text === "string")
221
+ return item.text;
222
+ return "";
223
+ })
224
+ .filter((t) => t.length > 0);
225
+ const joined = texts.join("\n").trim();
226
+ if (joined.length > 0)
227
+ return joined;
228
+ }
229
+ }
230
+ // 4. event.content as array of {type, text}.
231
+ if (Array.isArray(event.content)) {
232
+ const texts = event.content
233
+ .map((item) => {
234
+ if (typeof item === "string")
235
+ return item;
236
+ if (isRecord(item) && typeof item.text === "string")
237
+ return item.text;
238
+ return "";
239
+ })
240
+ .filter((t) => t.length > 0);
241
+ const joined = texts.join("\n").trim();
242
+ if (joined.length > 0)
243
+ return joined;
244
+ }
245
+ return undefined;
246
+ }
247
+ function isRecord(value) {
248
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value);
249
+ }
250
+ function describeType(value) {
251
+ if (value === null)
252
+ return "null";
253
+ if (Array.isArray(value))
254
+ return "array";
255
+ return typeof value;
256
+ }
257
+ //# sourceMappingURL=copilot-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot-cli.js","sourceRoot":"","sources":["../../../src/scrapers/copilot-cli.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,50 @@
1
- import type { ConversationScraper, CopilotChunk, ScraperState } from "../types/scraper.js";
2
- export declare class CopilotScraper implements ConversationScraper<CopilotChunk> {
3
- private readonly copilotHistoryPath;
1
+ import type { CopilotChunk } from "../types/scraper.js";
2
+ import { AbstractScraper } from "./base.js";
3
+ /**
4
+ * Shapes that the Copilot scraper tolerates silently without logging.
5
+ * Each entry documents the shape being accepted and why it is not drift.
6
+ * Anything not listed here that falls outside the happy path MUST warn
7
+ * (or throw, for required-schema violations).
8
+ */
9
+ export declare const ACCEPTED_DEGRADATIONS: {
10
+ /** Workspace has no state.vscdb yet — pristine VS Code install. */
11
+ missingStateVscdb: string;
12
+ /** workspaceStorage root missing — VS Code not installed. */
13
+ missingWorkspaceStorage: string;
14
+ /** better-sqlite3 native module absent — Copilot ingestion is opt-in. */
15
+ missingSqliteBinding: string;
16
+ /** State.vscdb has no interactive.sessions row — workspace never used Copilot chat. */
17
+ noInteractiveSessionsKey: string;
18
+ /** ItemTable shape varies across VS Code versions; tolerate open/query failure. */
19
+ unreadableItemTable: string;
20
+ /** A canceled request is intentionally skipped — not drift. */
21
+ canceledRequest: string;
22
+ /** Some sessions legitimately have no user-text (agent-only runs); skip silently. */
23
+ emptyUserText: string;
24
+ /** Empty assistant response (thinking timeout etc.) — not drift. */
25
+ emptyAssistantText: string;
26
+ /** Extra/unknown fields alongside known ones are forward-compatible. */
27
+ unknownFieldsAlongside: string;
28
+ };
29
+ export declare class CopilotScraper extends AbstractScraper<CopilotChunk> {
30
+ /** Path to %APPDATA%/Code/User/workspaceStorage (or a test stand-in). */
31
+ private readonly workspaceStoragePath;
32
+ private readonly projectRoot?;
4
33
  readonly tool = "copilot";
5
- private readonly stateManager;
6
- constructor(copilotHistoryPath: string, stateDir: string);
34
+ constructor(
35
+ /** Path to %APPDATA%/Code/User/workspaceStorage (or a test stand-in). */
36
+ workspaceStoragePath: string, stateDir: string, projectRoot?: string | undefined);
7
37
  detect(): Promise<boolean>;
8
38
  getStorePaths(): string[];
9
39
  scrape(since?: Date): AsyncIterable<CopilotChunk>;
10
40
  fullSync(): AsyncIterable<CopilotChunk>;
11
41
  parseRaw(raw: unknown): CopilotChunk;
12
- getLastScrapedPosition(): Promise<ScraperState>;
13
- saveScrapedPosition(state: ScraperState): Promise<void>;
14
42
  private readAllMessages;
15
- private resolveJsonFiles;
43
+ private readFromDb;
44
+ /**
45
+ * Discovers VS Code workspaceStorage SQLite databases.
46
+ * Pattern: &lt;workspaceStoragePath&gt;/[hash]/state.vscdb
47
+ */
48
+ private resolveDbPaths;
16
49
  }
17
50
  //# sourceMappingURL=copilot.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"copilot.d.ts","sourceRoot":"","sources":["../../../src/scrapers/copilot.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAoB3F,qBAAa,cAAe,YAAW,mBAAmB,CAAC,YAAY,CAAC;IAKpE,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IAJrC,QAAQ,CAAC,IAAI,aAAa;IAC1B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;gBAGhC,kBAAkB,EAAE,MAAM,EAC3C,QAAQ,EAAE,MAAM;IAKZ,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAShC,aAAa,IAAI,MAAM,EAAE;IAIlB,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,aAAa,CAAC,YAAY,CAAC;IAMjD,QAAQ,IAAI,aAAa,CAAC,YAAY,CAAC;IAI9C,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY;IAoB9B,sBAAsB,IAAI,OAAO,CAAC,YAAY,CAAC;IAI/C,mBAAmB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;YAI9C,eAAe;YAmChB,gBAAgB;CAe/B"}
1
+ {"version":3,"file":"copilot.d.ts","sourceRoot":"","sources":["../../../src/scrapers/copilot.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAA0B,MAAM,WAAW,CAAC;AAQpE;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB;IAChC,mEAAmE;;IAEnE,6DAA6D;;IAE7D,yEAAyE;;IAEzE,uFAAuF;;IAEvF,mFAAmF;;IAEnF,+DAA+D;;IAE/D,qFAAqF;;IAErF,oEAAoE;;IAEpE,wEAAwE;;CAEzE,CAAC;AAyBF,qBAAa,cAAe,SAAQ,eAAe,CAAC,YAAY,CAAC;IAI7D,yEAAyE;IACzE,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IAErC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAN/B,QAAQ,CAAC,IAAI,aAAa;;IAGxB,yEAAyE;IACxD,oBAAoB,EAAE,MAAM,EAC7C,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,YAAY,CAAC;IAIjD,QAAQ,IAAI,aAAa,CAAC,YAAY,CAAC;IAI9C,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY;YAoBrB,eAAe;IAmC9B,OAAO,CAAE,UAAU;IAoKnB;;;OAGG;YACW,cAAc;CAkC7B"}