elepha 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (290) hide show
  1. package/LICENSE.md +375 -0
  2. package/README.md +135 -0
  3. package/bin/elepha.js +2 -0
  4. package/dist/adapters/base.js +600 -0
  5. package/dist/adapters/base.js.map +1 -0
  6. package/dist/adapters/claude-code.js +260 -0
  7. package/dist/adapters/claude-code.js.map +1 -0
  8. package/dist/adapters/codex.js +499 -0
  9. package/dist/adapters/codex.js.map +1 -0
  10. package/dist/adapters/discriminators.js +39 -0
  11. package/dist/adapters/discriminators.js.map +1 -0
  12. package/dist/adapters/index.js +6 -0
  13. package/dist/adapters/index.js.map +1 -0
  14. package/dist/adapters/internal-command.js +3 -0
  15. package/dist/adapters/internal-command.js.map +1 -0
  16. package/dist/cli/backup-wizard.js +97 -0
  17. package/dist/cli/backup-wizard.js.map +1 -0
  18. package/dist/cli/capture-service.js +80 -0
  19. package/dist/cli/capture-service.js.map +1 -0
  20. package/dist/cli/commands/backfills.js +336 -0
  21. package/dist/cli/commands/backfills.js.map +1 -0
  22. package/dist/cli/commands/backup.js +234 -0
  23. package/dist/cli/commands/backup.js.map +1 -0
  24. package/dist/cli/commands/config.js +66 -0
  25. package/dist/cli/commands/config.js.map +1 -0
  26. package/dist/cli/commands/consent.js +237 -0
  27. package/dist/cli/commands/consent.js.map +1 -0
  28. package/dist/cli/commands/daemon-control.js +76 -0
  29. package/dist/cli/commands/daemon-control.js.map +1 -0
  30. package/dist/cli/commands/doctor.js +31 -0
  31. package/dist/cli/commands/doctor.js.map +1 -0
  32. package/dist/cli/commands/hook.js +24 -0
  33. package/dist/cli/commands/hook.js.map +1 -0
  34. package/dist/cli/commands/import.js +611 -0
  35. package/dist/cli/commands/import.js.map +1 -0
  36. package/dist/cli/commands/init.js +19 -0
  37. package/dist/cli/commands/init.js.map +1 -0
  38. package/dist/cli/commands/inspect.js +54 -0
  39. package/dist/cli/commands/inspect.js.map +1 -0
  40. package/dist/cli/commands/install.js +49 -0
  41. package/dist/cli/commands/install.js.map +1 -0
  42. package/dist/cli/commands/internal.js +16 -0
  43. package/dist/cli/commands/internal.js.map +1 -0
  44. package/dist/cli/commands/mcp.js +12 -0
  45. package/dist/cli/commands/mcp.js.map +1 -0
  46. package/dist/cli/commands/projects.js +26 -0
  47. package/dist/cli/commands/projects.js.map +1 -0
  48. package/dist/cli/commands/purge.js +216 -0
  49. package/dist/cli/commands/purge.js.map +1 -0
  50. package/dist/cli/commands/reingest.js +80 -0
  51. package/dist/cli/commands/reingest.js.map +1 -0
  52. package/dist/cli/commands/rekey.js +58 -0
  53. package/dist/cli/commands/rekey.js.map +1 -0
  54. package/dist/cli/commands/restore.js +376 -0
  55. package/dist/cli/commands/restore.js.map +1 -0
  56. package/dist/cli/commands/rollup.js +130 -0
  57. package/dist/cli/commands/rollup.js.map +1 -0
  58. package/dist/cli/commands/sanitize.js +72 -0
  59. package/dist/cli/commands/sanitize.js.map +1 -0
  60. package/dist/cli/commands/segment.js +153 -0
  61. package/dist/cli/commands/segment.js.map +1 -0
  62. package/dist/cli/commands/self-update.js +26 -0
  63. package/dist/cli/commands/self-update.js.map +1 -0
  64. package/dist/cli/commands/start.js +53 -0
  65. package/dist/cli/commands/start.js.map +1 -0
  66. package/dist/cli/commands/stats.js +42 -0
  67. package/dist/cli/commands/stats.js.map +1 -0
  68. package/dist/cli/commands/status.js +73 -0
  69. package/dist/cli/commands/status.js.map +1 -0
  70. package/dist/cli/commands/uninstall.js +23 -0
  71. package/dist/cli/commands/uninstall.js.map +1 -0
  72. package/dist/cli/config-wizard.js +104 -0
  73. package/dist/cli/config-wizard.js.map +1 -0
  74. package/dist/cli/destructive-op.js +32 -0
  75. package/dist/cli/destructive-op.js.map +1 -0
  76. package/dist/cli/import-wizard.js +89 -0
  77. package/dist/cli/import-wizard.js.map +1 -0
  78. package/dist/cli/index.js +74 -0
  79. package/dist/cli/index.js.map +1 -0
  80. package/dist/cli/init-wizard.js +80 -0
  81. package/dist/cli/init-wizard.js.map +1 -0
  82. package/dist/cli/init.js +159 -0
  83. package/dist/cli/init.js.map +1 -0
  84. package/dist/cli/launcher-probe.js +71 -0
  85. package/dist/cli/launcher-probe.js.map +1 -0
  86. package/dist/cli/project-path.js +16 -0
  87. package/dist/cli/project-path.js.map +1 -0
  88. package/dist/cli/purge-wizard.js +200 -0
  89. package/dist/cli/purge-wizard.js.map +1 -0
  90. package/dist/cli/restore-wizard.js +101 -0
  91. package/dist/cli/restore-wizard.js.map +1 -0
  92. package/dist/cli/shared.js +128 -0
  93. package/dist/cli/shared.js.map +1 -0
  94. package/dist/cli/status.js +22 -0
  95. package/dist/cli/status.js.map +1 -0
  96. package/dist/cli/wordmark.js +15 -0
  97. package/dist/cli/wordmark.js.map +1 -0
  98. package/dist/config/constants.js +115 -0
  99. package/dist/config/constants.js.map +1 -0
  100. package/dist/config/env.js +168 -0
  101. package/dist/config/env.js.map +1 -0
  102. package/dist/config/memory-config.js +63 -0
  103. package/dist/config/memory-config.js.map +1 -0
  104. package/dist/config/paths.js +343 -0
  105. package/dist/config/paths.js.map +1 -0
  106. package/dist/config/settings.js +132 -0
  107. package/dist/config/settings.js.map +1 -0
  108. package/dist/config/version.js +12 -0
  109. package/dist/config/version.js.map +1 -0
  110. package/dist/daemon/failure-window.js +38 -0
  111. package/dist/daemon/failure-window.js.map +1 -0
  112. package/dist/daemon/heartbeat.js +40 -0
  113. package/dist/daemon/heartbeat.js.map +1 -0
  114. package/dist/daemon/index.js +873 -0
  115. package/dist/daemon/index.js.map +1 -0
  116. package/dist/daemon/log-rotation.js +27 -0
  117. package/dist/daemon/log-rotation.js.map +1 -0
  118. package/dist/daemon/readability-guard.js +89 -0
  119. package/dist/daemon/readability-guard.js.map +1 -0
  120. package/dist/daemon/rollup-service.js +239 -0
  121. package/dist/daemon/rollup-service.js.map +1 -0
  122. package/dist/daemon/update-check.js +87 -0
  123. package/dist/daemon/update-check.js.map +1 -0
  124. package/dist/daemon/work-queue.js +28 -0
  125. package/dist/daemon/work-queue.js.map +1 -0
  126. package/dist/discovery/session-projects.js +242 -0
  127. package/dist/discovery/session-projects.js.map +1 -0
  128. package/dist/hooks/codex-trust.js +80 -0
  129. package/dist/hooks/codex-trust.js.map +1 -0
  130. package/dist/hooks/common.js +81 -0
  131. package/dist/hooks/common.js.map +1 -0
  132. package/dist/hooks/hook-log.js +38 -0
  133. package/dist/hooks/hook-log.js.map +1 -0
  134. package/dist/hooks/installer.js +200 -0
  135. package/dist/hooks/installer.js.map +1 -0
  136. package/dist/hooks/session-start.js +321 -0
  137. package/dist/hooks/session-start.js.map +1 -0
  138. package/dist/hooks/user-prompt-submit.js +248 -0
  139. package/dist/hooks/user-prompt-submit.js.map +1 -0
  140. package/dist/install/binary.js +72 -0
  141. package/dist/install/binary.js.map +1 -0
  142. package/dist/install/config-file.js +119 -0
  143. package/dist/install/config-file.js.map +1 -0
  144. package/dist/install/daemon-health.js +48 -0
  145. package/dist/install/daemon-health.js.map +1 -0
  146. package/dist/install/daemon-service.js +309 -0
  147. package/dist/install/daemon-service.js.map +1 -0
  148. package/dist/install/doctor.js +180 -0
  149. package/dist/install/doctor.js.map +1 -0
  150. package/dist/install/health-checks.js +90 -0
  151. package/dist/install/health-checks.js.map +1 -0
  152. package/dist/install/installer.js +411 -0
  153. package/dist/install/installer.js.map +1 -0
  154. package/dist/install/launchd-backend.js +261 -0
  155. package/dist/install/launchd-backend.js.map +1 -0
  156. package/dist/install/launcher.js +224 -0
  157. package/dist/install/launcher.js.map +1 -0
  158. package/dist/install/markers.js +14 -0
  159. package/dist/install/markers.js.map +1 -0
  160. package/dist/install/platform.js +29 -0
  161. package/dist/install/platform.js.map +1 -0
  162. package/dist/install/present-tools.js +16 -0
  163. package/dist/install/present-tools.js.map +1 -0
  164. package/dist/install/self-update.js +120 -0
  165. package/dist/install/self-update.js.map +1 -0
  166. package/dist/install/service-backend.js +36 -0
  167. package/dist/install/service-backend.js.map +1 -0
  168. package/dist/install/service-manifest.js +36 -0
  169. package/dist/install/service-manifest.js.map +1 -0
  170. package/dist/install/status.js +58 -0
  171. package/dist/install/status.js.map +1 -0
  172. package/dist/install/systemd-backend.js +225 -0
  173. package/dist/install/systemd-backend.js.map +1 -0
  174. package/dist/markers.js +5 -0
  175. package/dist/markers.js.map +1 -0
  176. package/dist/mcp/installer.js +131 -0
  177. package/dist/mcp/installer.js.map +1 -0
  178. package/dist/mcp/server.js +81 -0
  179. package/dist/mcp/server.js.map +1 -0
  180. package/dist/mcp/tools/get-context.js +3 -0
  181. package/dist/mcp/tools/get-context.js.map +1 -0
  182. package/dist/mcp/tools/list-projects.js +3 -0
  183. package/dist/mcp/tools/list-projects.js.map +1 -0
  184. package/dist/mcp/tools/save-memory.js +3 -0
  185. package/dist/mcp/tools/save-memory.js.map +1 -0
  186. package/dist/mcp/tools.js +288 -0
  187. package/dist/mcp/tools.js.map +1 -0
  188. package/dist/rendering/raw-turn-renderer.js +85 -0
  189. package/dist/rendering/raw-turn-renderer.js.map +1 -0
  190. package/dist/security/file-permissions.js +15 -0
  191. package/dist/security/file-permissions.js.map +1 -0
  192. package/dist/security/provider-transcript.js +74 -0
  193. package/dist/security/provider-transcript.js.map +1 -0
  194. package/dist/security/sanitize.js +210 -0
  195. package/dist/security/sanitize.js.map +1 -0
  196. package/dist/security/self-ingestion.js +47 -0
  197. package/dist/security/self-ingestion.js.map +1 -0
  198. package/dist/security/sentinel.js +19 -0
  199. package/dist/security/sentinel.js.map +1 -0
  200. package/dist/security/subprocess-allowlist.js +421 -0
  201. package/dist/security/subprocess-allowlist.js.map +1 -0
  202. package/dist/serving/instructions.js +33 -0
  203. package/dist/serving/instructions.js.map +1 -0
  204. package/dist/serving/lexical-recall.js +249 -0
  205. package/dist/serving/lexical-recall.js.map +1 -0
  206. package/dist/serving/session-reader.js +302 -0
  207. package/dist/serving/session-reader.js.map +1 -0
  208. package/dist/storage/backfill-runner.js +34 -0
  209. package/dist/storage/backfill-runner.js.map +1 -0
  210. package/dist/storage/backup.js +46 -0
  211. package/dist/storage/backup.js.map +1 -0
  212. package/dist/storage/candidate-validator.js +77 -0
  213. package/dist/storage/candidate-validator.js.map +1 -0
  214. package/dist/storage/consent-store.js +198 -0
  215. package/dist/storage/consent-store.js.map +1 -0
  216. package/dist/storage/custom-title-backfill.js +68 -0
  217. package/dist/storage/custom-title-backfill.js.map +1 -0
  218. package/dist/storage/db.js +312 -0
  219. package/dist/storage/db.js.map +1 -0
  220. package/dist/storage/external-agent-import-purge.js +182 -0
  221. package/dist/storage/external-agent-import-purge.js.map +1 -0
  222. package/dist/storage/first-prompt-search-backfill.js +76 -0
  223. package/dist/storage/first-prompt-search-backfill.js.map +1 -0
  224. package/dist/storage/first-prompt-search.js +7 -0
  225. package/dist/storage/first-prompt-search.js.map +1 -0
  226. package/dist/storage/injection-store.js +37 -0
  227. package/dist/storage/injection-store.js.map +1 -0
  228. package/dist/storage/memory-store.js +428 -0
  229. package/dist/storage/memory-store.js.map +1 -0
  230. package/dist/storage/project-resolver.js +294 -0
  231. package/dist/storage/project-resolver.js.map +1 -0
  232. package/dist/storage/project-store.js +104 -0
  233. package/dist/storage/project-store.js.map +1 -0
  234. package/dist/storage/rendered-chars-backfill.js +85 -0
  235. package/dist/storage/rendered-chars-backfill.js.map +1 -0
  236. package/dist/storage/resegmentation.js +582 -0
  237. package/dist/storage/resegmentation.js.map +1 -0
  238. package/dist/storage/rollup-store.js +246 -0
  239. package/dist/storage/rollup-store.js.map +1 -0
  240. package/dist/storage/root-commit-backfill.js +32 -0
  241. package/dist/storage/root-commit-backfill.js.map +1 -0
  242. package/dist/storage/sanitize-backfill.js +184 -0
  243. package/dist/storage/sanitize-backfill.js.map +1 -0
  244. package/dist/storage/segmentation.js +87 -0
  245. package/dist/storage/segmentation.js.map +1 -0
  246. package/dist/storage/session-fields-backfill.js +196 -0
  247. package/dist/storage/session-fields-backfill.js.map +1 -0
  248. package/dist/storage/session-read-model.js +130 -0
  249. package/dist/storage/session-read-model.js.map +1 -0
  250. package/dist/storage/session-store.js +200 -0
  251. package/dist/storage/session-store.js.map +1 -0
  252. package/dist/storage/session-title-backfill.js +75 -0
  253. package/dist/storage/session-title-backfill.js.map +1 -0
  254. package/dist/storage/session-title.js +71 -0
  255. package/dist/storage/session-title.js.map +1 -0
  256. package/dist/storage/shown-session-list-store.js +33 -0
  257. package/dist/storage/shown-session-list-store.js.map +1 -0
  258. package/dist/storage/stats.js +30 -0
  259. package/dist/storage/stats.js.map +1 -0
  260. package/dist/storage/turn-store.js +202 -0
  261. package/dist/storage/turn-store.js.map +1 -0
  262. package/dist/storage/ulid.js +17 -0
  263. package/dist/storage/ulid.js.map +1 -0
  264. package/dist/summarizer/anthropic-call.js +76 -0
  265. package/dist/summarizer/anthropic-call.js.map +1 -0
  266. package/dist/summarizer/call-log.js +120 -0
  267. package/dist/summarizer/call-log.js.map +1 -0
  268. package/dist/summarizer/haiku-provider.js +136 -0
  269. package/dist/summarizer/haiku-provider.js.map +1 -0
  270. package/dist/summarizer/pricing.js +8 -0
  271. package/dist/summarizer/pricing.js.map +1 -0
  272. package/dist/summarizer/prompt-cache.js +6 -0
  273. package/dist/summarizer/prompt-cache.js.map +1 -0
  274. package/dist/summarizer/prompt.js +47 -0
  275. package/dist/summarizer/prompt.js.map +1 -0
  276. package/dist/summarizer/provider-config.js +25 -0
  277. package/dist/summarizer/provider-config.js.map +1 -0
  278. package/dist/summarizer/rollup-prompt.js +225 -0
  279. package/dist/summarizer/rollup-prompt.js.map +1 -0
  280. package/dist/summarizer/rollup-provider.js +224 -0
  281. package/dist/summarizer/rollup-provider.js.map +1 -0
  282. package/dist/types/index.js +10 -0
  283. package/dist/types/index.js.map +1 -0
  284. package/dist/util/error.js +5 -0
  285. package/dist/util/error.js.map +1 -0
  286. package/dist/util/fs.js +97 -0
  287. package/dist/util/fs.js.map +1 -0
  288. package/dist/util/relative-time.js +12 -0
  289. package/dist/util/relative-time.js.map +1 -0
  290. package/package.json +81 -0
@@ -0,0 +1,582 @@
1
+ // Destructive re-segmentation and manual boundary corrections.
2
+ //
3
+ // Planning is read-only and reparses source JSONL so Codex resume markers and
4
+ // exact turn-close timestamps participate. Apply consumes the exact previewed
5
+ // plan in one SQLite transaction, invalidates affected rollups, and verifies
6
+ // the retained-turn partition afterwards. A missing/mismatched transcript is
7
+ // reported and skipped; there is no silent branch/files-only fallback.
8
+ import { existsSync } from 'node:fs';
9
+ import { claudeCodeSurface, codexSurface, toSessionRowKind } from '../adapters/discriminators.js';
10
+ import { TRAILING_FILES_CAP } from '../config/constants.js';
11
+ import { dedupePaths, isWithinProviderStore } from '../config/paths.js';
12
+ import { RAW_TURN_SEPARATOR, renderRawTurn } from '../rendering/raw-turn-renderer.js';
13
+ import { errorMessage } from '../util/error.js';
14
+ import { firstPromptSearch } from './first-prompt-search.js';
15
+ import { assessSegmentBoundary, evaluateSegmentBoundary } from './segmentation.js';
16
+ import { titleForSegment } from './session-title.js';
17
+ import { newUlid } from './ulid.js';
18
+ const TEMP_SEGMENT_OFFSET = 1_000_000;
19
+ function parseFiles(raw) {
20
+ try {
21
+ const value = JSON.parse(raw);
22
+ return Array.isArray(value) ? value.filter((item) => typeof item === 'string') : [];
23
+ }
24
+ catch {
25
+ return [];
26
+ }
27
+ }
28
+ function normalizedSurface(tool, raw) {
29
+ return tool === 'claude-code' ? claudeCodeSurface(raw) : codexSurface(raw);
30
+ }
31
+ function gapHours(previousEndedAt, nextStartedAt) {
32
+ const previous = Date.parse(previousEndedAt);
33
+ const next = Date.parse(nextStartedAt);
34
+ if (!Number.isFinite(previous) || !Number.isFinite(next)) {
35
+ return 0;
36
+ }
37
+ return Math.max(0, next - previous) / (60 * 60 * 1000);
38
+ }
39
+ async function parseSource(adapter, sourcePath) {
40
+ const turns = new Map();
41
+ for await (const turn of adapter.parseTurns(sourcePath, undefined, { closeTrailingOnIdle: true })) {
42
+ turns.set(turn.turnIndex, turn);
43
+ }
44
+ return turns;
45
+ }
46
+ function sessionRows(db) {
47
+ return db.prepare('SELECT * FROM sessions ORDER BY tool, native_id, segment_index').all();
48
+ }
49
+ function memoriesForSessions(db, ids) {
50
+ if (ids.length === 0) {
51
+ return [];
52
+ }
53
+ return db
54
+ .prepare(`SELECT id, session_id, project_id, turn_index, turn_started_at, created_at, files_touched FROM memories WHERE session_id IN (${ids.map(() => '?').join(',')}) ORDER BY turn_index`)
55
+ .all(...ids);
56
+ }
57
+ function countInvalidatedRollups(db, sessionIds) {
58
+ if (sessionIds.length === 0) {
59
+ return 0;
60
+ }
61
+ const placeholders = sessionIds.map(() => '?').join(',');
62
+ return db
63
+ .prepare(`SELECT COUNT(*) AS count FROM session_rollups WHERE session_id IN (${placeholders}) OR parent_session_id IN (${placeholders})`)
64
+ .get(...sessionIds, ...sessionIds).count;
65
+ }
66
+ function newSegment(index, existingSessionId, memory, turn, kind) {
67
+ return {
68
+ segmentIndex: index,
69
+ existingSessionId,
70
+ memoryIds: [],
71
+ turnIndexes: [],
72
+ projectId: memory.project_id,
73
+ startedAt: turn.startedAt,
74
+ lastIngestedAt: memory.created_at,
75
+ lastTurnAt: turn.endedAt,
76
+ trailingBranch: null,
77
+ trailingFiles: [],
78
+ gitBranch: turn.gitBranch ?? null,
79
+ surface: normalizedSurface(turn.tool, turn.surface),
80
+ kind,
81
+ cursor: null,
82
+ title: '',
83
+ firstPromptSearch: '',
84
+ renderedChars: 0,
85
+ renderedTurns: 0,
86
+ };
87
+ }
88
+ function appendTurn(segment, memory, turn) {
89
+ segment.memoryIds.push(memory.id);
90
+ segment.turnIndexes.push(memory.turn_index);
91
+ segment.lastIngestedAt = memory.created_at > segment.lastIngestedAt ? memory.created_at : segment.lastIngestedAt;
92
+ segment.lastTurnAt = turn.endedAt;
93
+ segment.trailingBranch = turn.gitBranch ?? segment.trailingBranch;
94
+ const turnFiles = turn.toolCalls.flatMap((call) => call.filePaths);
95
+ segment.trailingFiles = dedupePaths([...turnFiles, ...segment.trailingFiles]).slice(0, TRAILING_FILES_CAP);
96
+ const rendered = renderRawTurn(turn, segment.renderedTurns + 1);
97
+ if (rendered !== null) {
98
+ segment.renderedChars += (segment.renderedChars === 0 ? 1 : RAW_TURN_SEPARATOR.length) + rendered.length;
99
+ segment.renderedTurns++;
100
+ }
101
+ }
102
+ function titleForPlannedSegment(segment, parsed) {
103
+ const turns = segment.turnIndexes.map((index) => {
104
+ const turn = parsed.get(index);
105
+ if (!turn) {
106
+ throw new Error(`missing parsed turn ${index}`);
107
+ }
108
+ return turn;
109
+ });
110
+ return titleForSegment(turns, segment.segmentIndex === 0);
111
+ }
112
+ function firstPromptSearchForPlannedSegment(segment, parsed) {
113
+ const firstTurnIndex = segment.turnIndexes[0];
114
+ const firstTurn = parsed.get(firstTurnIndex);
115
+ if (!firstTurn) {
116
+ throw new Error(`missing parsed turn ${firstTurnIndex}`);
117
+ }
118
+ return firstPromptSearch(firstTurn.userMessage);
119
+ }
120
+ function buildSegments(memories, parsed, existingByIndex, kind, latestCursor) {
121
+ const segments = [];
122
+ const cuts = [];
123
+ let active;
124
+ for (const memory of memories) {
125
+ const turn = parsed.get(memory.turn_index);
126
+ if (!turn) {
127
+ throw new Error(`retained turn ${memory.turn_index} was not produced by the current adapter`);
128
+ }
129
+ if (active) {
130
+ const input = {
131
+ gapHours: gapHours(active.lastTurnAt, turn.startedAt),
132
+ trailingBranch: active.trailingBranch,
133
+ resumingBranch: turn.gitBranch ?? null,
134
+ trailingFiles: active.trailingFiles,
135
+ resumingFiles: turn.toolCalls.flatMap((call) => call.filePaths),
136
+ resumeMarkerBefore: turn.resumeMarkerBefore,
137
+ };
138
+ // Keep the explicit evaluator call: this is the same public pure
139
+ // boundary function live ingestion uses. assessSegmentBoundary is
140
+ // only the explanation for the preview line.
141
+ if (evaluateSegmentBoundary(input)) {
142
+ const assessment = assessSegmentBoundary(input);
143
+ cuts.push({
144
+ atTurnIndex: memory.turn_index,
145
+ gapHours: input.gapHours,
146
+ evidence: assessment.evidence,
147
+ fileOverlap: assessment.fileOverlap,
148
+ });
149
+ const nextIndex = segments.length;
150
+ active = newSegment(nextIndex, existingByIndex.get(nextIndex)?.id ?? null, memory, turn, kind);
151
+ segments.push(active);
152
+ }
153
+ }
154
+ else {
155
+ active = newSegment(0, existingByIndex.get(0)?.id ?? null, memory, turn, kind);
156
+ segments.push(active);
157
+ }
158
+ appendTurn(active, memory, turn);
159
+ }
160
+ if (segments.length > 0) {
161
+ segments[segments.length - 1].cursor = latestCursor;
162
+ }
163
+ for (const segment of segments) {
164
+ segment.title = titleForPlannedSegment(segment, parsed);
165
+ segment.firstPromptSearch = firstPromptSearchForPlannedSegment(segment, parsed);
166
+ }
167
+ return { segments, cuts };
168
+ }
169
+ function groupRequiresWrite(rows, memories, segments) {
170
+ if (rows.length !== segments.length) {
171
+ return true;
172
+ }
173
+ const rowByIndex = new Map(rows.map((row) => [row.segment_index, row]));
174
+ const memorySessionById = new Map(memories.map((memory) => [memory.id, memory.session_id]));
175
+ for (const segment of segments) {
176
+ const row = rowByIndex.get(segment.segmentIndex);
177
+ if (!row ||
178
+ row.project_id !== segment.projectId ||
179
+ row.source_path !== rows[rows.length - 1].source_path ||
180
+ row.cursor !== segment.cursor ||
181
+ row.title !== segment.title ||
182
+ row.first_prompt_search !== segment.firstPromptSearch ||
183
+ row.started_at !== segment.startedAt ||
184
+ row.last_ingested_at !== segment.lastIngestedAt ||
185
+ row.surface !== segment.surface ||
186
+ row.git_branch !== segment.gitBranch ||
187
+ row.kind !== segment.kind ||
188
+ row.last_turn_at !== segment.lastTurnAt ||
189
+ row.trailing_branch !== segment.trailingBranch ||
190
+ JSON.stringify(parseFiles(row.trailing_files)) !== JSON.stringify(segment.trailingFiles) ||
191
+ segment.memoryIds.some((memoryId) => memorySessionById.get(memoryId) !== row.id)) {
192
+ return true;
193
+ }
194
+ }
195
+ return false;
196
+ }
197
+ function groupRows(rows) {
198
+ const groups = new Map();
199
+ for (const row of rows) {
200
+ const key = `${row.tool}\0${row.native_id}`;
201
+ const group = groups.get(key);
202
+ if (group) {
203
+ group.push(row);
204
+ }
205
+ else {
206
+ groups.set(key, [row]);
207
+ }
208
+ }
209
+ return [...groups.values()];
210
+ }
211
+ /** Read-only preview. Re-reads JSONL so resumeMarkerBefore is not discarded. */
212
+ export async function planResegmentation(db, adapters) {
213
+ const allSessions = sessionRows(db);
214
+ const groups = [];
215
+ let retainedTurnsScanned = 0;
216
+ for (const rows of groupRows(allSessions)) {
217
+ const latest = rows[rows.length - 1];
218
+ const ids = rows.map((row) => row.id);
219
+ const memories = memoriesForSessions(db, ids);
220
+ retainedTurnsScanned += memories.length;
221
+ const base = {
222
+ tool: latest.tool,
223
+ nativeId: latest.native_id,
224
+ sourcePath: latest.source_path,
225
+ existingSessionIds: ids,
226
+ existingSegmentCount: rows.length,
227
+ retainedTurnCount: memories.length,
228
+ requiresWrite: false,
229
+ rollupsInvalidated: countInvalidatedRollups(db, ids),
230
+ };
231
+ if (memories.length === 0) {
232
+ groups.push({ ...base, status: 'skipped', issue: 'no retained turns', resultingSegments: [], cuts: [] });
233
+ continue;
234
+ }
235
+ if (!isWithinProviderStore(latest.tool, latest.source_path)) {
236
+ groups.push({
237
+ ...base,
238
+ status: 'skipped',
239
+ issue: 'source transcript is outside the provider store',
240
+ resultingSegments: [],
241
+ cuts: [],
242
+ });
243
+ continue;
244
+ }
245
+ if (!existsSync(latest.source_path)) {
246
+ groups.push({ ...base, status: 'skipped', issue: 'source transcript is missing', resultingSegments: [], cuts: [] });
247
+ continue;
248
+ }
249
+ try {
250
+ const classification = await adapters[latest.tool].classifySession(latest.source_path);
251
+ const parsed = await parseSource(adapters[latest.tool], latest.source_path);
252
+ const existingByIndex = new Map(rows.map((row) => [row.segment_index, row]));
253
+ const { segments, cuts } = buildSegments(memories, parsed, existingByIndex, toSessionRowKind(classification.kind), latest.cursor);
254
+ const requiresWrite = groupRequiresWrite(rows, memories, segments);
255
+ groups.push({
256
+ ...base,
257
+ status: 'ready',
258
+ requiresWrite,
259
+ rollupsInvalidated: requiresWrite ? base.rollupsInvalidated : 0,
260
+ resultingSegments: segments,
261
+ cuts,
262
+ });
263
+ }
264
+ catch (error) {
265
+ groups.push({
266
+ ...base,
267
+ status: 'skipped',
268
+ issue: errorMessage(error),
269
+ resultingSegments: [],
270
+ cuts: [],
271
+ });
272
+ }
273
+ }
274
+ const ready = groups.filter((group) => group.status === 'ready');
275
+ return {
276
+ groups,
277
+ sessionsScanned: allSessions.length,
278
+ nativeSessionsScanned: groups.length,
279
+ retainedTurnsScanned,
280
+ readyGroups: ready.length,
281
+ affectedGroups: ready.filter((group) => group.requiresWrite).length,
282
+ skippedGroups: groups.length - ready.length,
283
+ resultingSessionRows: ready.reduce((sum, group) => sum + group.resultingSegments.length, 0),
284
+ };
285
+ }
286
+ function assertPlanStillMatches(db, group) {
287
+ const currentRows = db
288
+ .prepare('SELECT id FROM sessions WHERE tool = ? AND native_id = ? ORDER BY segment_index')
289
+ .all(group.tool, group.nativeId);
290
+ if (currentRows.map((row) => row.id).join(',') !== group.existingSessionIds.join(',')) {
291
+ throw new Error(`session rows changed after preview for ${group.tool}:${group.nativeId}`);
292
+ }
293
+ const currentMemories = memoriesForSessions(db, group.existingSessionIds);
294
+ const plannedMemoryIds = group.resultingSegments.flatMap((segment) => segment.memoryIds).sort((a, b) => a - b);
295
+ const currentMemoryIds = currentMemories.map((memory) => memory.id).sort((a, b) => a - b);
296
+ if (currentMemoryIds.join(',') !== plannedMemoryIds.join(',')) {
297
+ throw new Error(`retained turns changed after preview for ${group.tool}:${group.nativeId}`);
298
+ }
299
+ }
300
+ function deleteAffectedRollups(db, sessionIds) {
301
+ const placeholders = sessionIds.map(() => '?').join(',');
302
+ db.prepare(`DELETE FROM session_rollups WHERE session_id IN (${placeholders}) OR parent_session_id IN (${placeholders})`).run(...sessionIds, ...sessionIds);
303
+ }
304
+ function ensureCorrectionsTable(db) {
305
+ // Created only inside an applied correction's transaction. A dry-run must
306
+ // not mutate schema just because this is the first segment command run.
307
+ db.exec(`
308
+ CREATE TABLE IF NOT EXISTS segment_corrections (
309
+ id INTEGER PRIMARY KEY,
310
+ ulid TEXT NOT NULL UNIQUE,
311
+ tool TEXT NOT NULL CHECK (tool IN ('claude-code','codex')),
312
+ native_id TEXT NOT NULL,
313
+ direction TEXT NOT NULL CHECK (direction IN ('split','merge')),
314
+ first_session_id INTEGER NOT NULL,
315
+ second_session_id INTEGER,
316
+ turn_index INTEGER,
317
+ created_at TEXT NOT NULL
318
+ );
319
+ CREATE INDEX IF NOT EXISTS idx_segment_corrections_native
320
+ ON segment_corrections(tool, native_id, created_at);
321
+ `);
322
+ }
323
+ function updateSessionFromSegment(db, sessionId, sourcePath, segment) {
324
+ db.prepare(`UPDATE sessions SET segment_index = ?, project_id = ?, source_path = ?, cursor = ?, title = ?, first_prompt_search = ?, started_at = ?, last_ingested_at = ?,
325
+ surface = ?, git_branch = ?, kind = ?, last_turn_at = ?, trailing_branch = ?, trailing_files = ?, rendered_chars = ?, rendered_turns = ? WHERE id = ?`).run(segment.segmentIndex, segment.projectId, sourcePath, segment.cursor, segment.title, segment.firstPromptSearch, segment.startedAt, segment.lastIngestedAt, segment.surface, segment.gitBranch, segment.kind, segment.lastTurnAt, segment.trailingBranch, JSON.stringify(segment.trailingFiles), segment.renderedChars, segment.renderedTurns, sessionId);
326
+ }
327
+ function insertSessionFromSegment(db, tool, nativeId, sourcePath, segment) {
328
+ const info = db
329
+ .prepare(`INSERT INTO sessions
330
+ (tool, native_id, segment_index, project_id, source_path, cursor, started_at, last_ingested_at,
331
+ title, first_prompt_search, surface, git_branch, kind, last_turn_at, trailing_branch, trailing_files, rendered_chars, rendered_turns, git_commit_count)
332
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
333
+ .run(tool, nativeId, segment.segmentIndex, segment.projectId, sourcePath, segment.cursor, segment.startedAt, segment.lastIngestedAt, segment.title, segment.firstPromptSearch, segment.surface, segment.gitBranch, segment.kind, segment.lastTurnAt, segment.trailingBranch, JSON.stringify(segment.trailingFiles), segment.renderedChars, segment.renderedTurns, null);
334
+ return Number(info.lastInsertRowid);
335
+ }
336
+ /** Applies exactly the previewed ready groups in one transaction. */
337
+ export function applyResegmentation(db, plan) {
338
+ const ready = plan.groups.filter((group) => group.status === 'ready' && group.requiresWrite);
339
+ const apply = db.transaction(() => {
340
+ for (const group of ready) {
341
+ assertPlanStillMatches(db, group);
342
+ deleteAffectedRollups(db, group.existingSessionIds);
343
+ db.prepare(`UPDATE sessions SET segment_index = segment_index + ? WHERE id IN (${group.existingSessionIds.map(() => '?').join(',')})`).run(TEMP_SEGMENT_OFFSET, ...group.existingSessionIds);
344
+ const used = new Set();
345
+ for (const segment of group.resultingSegments) {
346
+ const sessionId = segment.existingSessionId === null
347
+ ? insertSessionFromSegment(db, group.tool, group.nativeId, group.sourcePath, segment)
348
+ : segment.existingSessionId;
349
+ used.add(sessionId);
350
+ updateSessionFromSegment(db, sessionId, group.sourcePath, segment);
351
+ // Re-segmentation is historical reconstruction: it cannot
352
+ // truthfully recover the commit count at each newly inferred
353
+ // opening, including a reused left-hand row.
354
+ db.prepare('UPDATE sessions SET git_commit_count = NULL WHERE id = ?').run(sessionId);
355
+ const updateMemory = db.prepare('UPDATE memories SET session_id = ? WHERE id = ?');
356
+ for (const memoryId of segment.memoryIds) {
357
+ updateMemory.run(sessionId, memoryId);
358
+ }
359
+ }
360
+ const removed = group.existingSessionIds.filter((id) => !used.has(id));
361
+ if (removed.length > 0) {
362
+ // Rollups for removed rows were already deleted by deleteAffectedRollups, so no reparenting is needed.
363
+ db.prepare(`DELETE FROM sessions WHERE id IN (${removed.map(() => '?').join(',')})`).run(...removed);
364
+ }
365
+ }
366
+ });
367
+ apply();
368
+ return plan;
369
+ }
370
+ export function verifyResegmentation(db, plan) {
371
+ const errors = [];
372
+ for (const group of plan.groups) {
373
+ if (group.status !== 'ready' || !group.requiresWrite) {
374
+ continue;
375
+ }
376
+ const rows = db
377
+ .prepare('SELECT id, segment_index, title, first_prompt_search, last_turn_at, trailing_branch, trailing_files, rendered_chars, rendered_turns FROM sessions WHERE tool = ? AND native_id = ? ORDER BY segment_index')
378
+ .all(group.tool, group.nativeId);
379
+ if (rows.length !== group.resultingSegments.length) {
380
+ errors.push(`${group.tool}:${group.nativeId} has ${rows.length} rows, expected ${group.resultingSegments.length}`);
381
+ continue;
382
+ }
383
+ for (const segment of group.resultingSegments) {
384
+ const row = rows[segment.segmentIndex];
385
+ if (!row || row.segment_index !== segment.segmentIndex) {
386
+ errors.push(`${group.tool}:${group.nativeId} is missing segment ${segment.segmentIndex}`);
387
+ continue;
388
+ }
389
+ const actualTurns = db
390
+ .prepare('SELECT turn_index FROM memories WHERE session_id = ? ORDER BY turn_index')
391
+ .all(row.id);
392
+ if (actualTurns.map((turn) => turn.turn_index).join(',') !== segment.turnIndexes.join(',')) {
393
+ errors.push(`${group.tool}:${group.nativeId}:${segment.segmentIndex} retained-turn partition differs`);
394
+ }
395
+ if (row.title !== segment.title) {
396
+ errors.push(`${group.tool}:${group.nativeId}:${segment.segmentIndex} title differs`);
397
+ }
398
+ if (row.first_prompt_search !== segment.firstPromptSearch) {
399
+ errors.push(`${group.tool}:${group.nativeId}:${segment.segmentIndex} first_prompt_search differs`);
400
+ }
401
+ if (row.last_turn_at !== segment.lastTurnAt ||
402
+ row.trailing_branch !== segment.trailingBranch ||
403
+ JSON.stringify(parseFiles(row.trailing_files)) !== JSON.stringify(segment.trailingFiles)) {
404
+ errors.push(`${group.tool}:${group.nativeId}:${segment.segmentIndex} trailing state differs`);
405
+ }
406
+ if (row.rendered_chars !== segment.renderedChars) {
407
+ errors.push(`${group.tool}:${group.nativeId}:${segment.segmentIndex} rendered_chars differs`);
408
+ }
409
+ if (row.rendered_turns !== segment.renderedTurns) {
410
+ errors.push(`${group.tool}:${group.nativeId}:${segment.segmentIndex} rendered_turns differs`);
411
+ }
412
+ }
413
+ const staleRollups = db
414
+ .prepare(`SELECT COUNT(*) AS count FROM session_rollups r JOIN sessions s ON s.id = r.session_id WHERE s.tool = ? AND s.native_id = ?`)
415
+ .get(group.tool, group.nativeId);
416
+ if (staleRollups.count > 0) {
417
+ errors.push(`${group.tool}:${group.nativeId} still has ${staleRollups.count} rollup(s)`);
418
+ }
419
+ }
420
+ const violations = db.pragma('foreign_key_check');
421
+ if (violations.length > 0) {
422
+ errors.push(`foreign_key_check returned ${violations.length} violation(s)`);
423
+ }
424
+ return { ok: errors.length === 0, errors };
425
+ }
426
+ async function parsedForManual(db, session, adapter) {
427
+ if (!isWithinProviderStore(session.tool, session.source_path)) {
428
+ throw new Error(`source transcript is outside the provider store: ${session.source_path}`);
429
+ }
430
+ if (!existsSync(session.source_path)) {
431
+ throw new Error(`source transcript is missing: ${session.source_path}`);
432
+ }
433
+ const memories = memoriesForSessions(db, [session.id]);
434
+ if (memories.length === 0) {
435
+ throw new Error(`session ${session.id} has no retained turns`);
436
+ }
437
+ const classification = await adapter.classifySession(session.source_path);
438
+ const parsed = await parseSource(adapter, session.source_path);
439
+ for (const memory of memories) {
440
+ if (!parsed.has(memory.turn_index)) {
441
+ throw new Error(`retained turn ${memory.turn_index} was not produced by the current adapter`);
442
+ }
443
+ }
444
+ return { memories, parsed, kind: toSessionRowKind(classification.kind) };
445
+ }
446
+ function segmentFromRange(index, existingSessionId, memories, parsed, kind, cursor) {
447
+ const first = memories[0];
448
+ const firstTurn = parsed.get(first.turn_index);
449
+ if (!firstTurn) {
450
+ throw new Error(`missing parsed turn ${first.turn_index}`);
451
+ }
452
+ const segment = newSegment(index, existingSessionId, first, firstTurn, kind);
453
+ for (const memory of memories) {
454
+ const turn = parsed.get(memory.turn_index);
455
+ if (!turn) {
456
+ throw new Error(`missing parsed turn ${memory.turn_index}`);
457
+ }
458
+ appendTurn(segment, memory, turn);
459
+ }
460
+ segment.cursor = cursor;
461
+ segment.title = titleForPlannedSegment(segment, parsed);
462
+ segment.firstPromptSearch = firstPromptSearchForPlannedSegment(segment, parsed);
463
+ return segment;
464
+ }
465
+ function sessionById(db, id) {
466
+ const row = db.prepare('SELECT * FROM sessions WHERE id = ?').get(id);
467
+ if (!row) {
468
+ throw new Error(`session ${id} does not exist`);
469
+ }
470
+ return row;
471
+ }
472
+ export async function planManualSplit(db, adapters, sessionId, atTurnIndex) {
473
+ const source = sessionById(db, sessionId);
474
+ const { memories, parsed, kind } = await parsedForManual(db, source, adapters[source.tool]);
475
+ const splitAt = memories.findIndex((memory) => memory.turn_index === atTurnIndex);
476
+ if (splitAt <= 0) {
477
+ throw new Error(`--at must name a retained turn after the first turn in session ${sessionId}`);
478
+ }
479
+ const laterRows = db
480
+ .prepare('SELECT id FROM sessions WHERE tool = ? AND native_id = ? AND segment_index > ? ORDER BY segment_index')
481
+ .all(source.tool, source.native_id, source.segment_index);
482
+ return {
483
+ direction: 'split',
484
+ source,
485
+ atTurnIndex,
486
+ left: segmentFromRange(source.segment_index, source.id, memories.slice(0, splitAt), parsed, kind, null),
487
+ right: segmentFromRange(source.segment_index + 1, null, memories.slice(splitAt), parsed, kind, source.cursor),
488
+ laterSessionIds: laterRows.map((row) => row.id),
489
+ rollupsInvalidated: countInvalidatedRollups(db, [source.id]),
490
+ };
491
+ }
492
+ export function applyManualSplit(db, plan) {
493
+ const apply = db.transaction(() => {
494
+ ensureCorrectionsTable(db);
495
+ const source = sessionById(db, plan.source.id);
496
+ const currentIds = memoriesForSessions(db, [source.id]).map((memory) => memory.id);
497
+ if (currentIds.join(',') !== [...plan.left.memoryIds, ...plan.right.memoryIds].join(',')) {
498
+ throw new Error(`session ${source.id} changed after preview`);
499
+ }
500
+ deleteAffectedRollups(db, [source.id]);
501
+ if (plan.laterSessionIds.length > 0) {
502
+ db.prepare(`UPDATE sessions SET segment_index = segment_index + ? WHERE id IN (${plan.laterSessionIds.map(() => '?').join(',')})`).run(TEMP_SEGMENT_OFFSET, ...plan.laterSessionIds);
503
+ db.prepare(`UPDATE sessions SET segment_index = segment_index - ? + 1 WHERE id IN (${plan.laterSessionIds.map(() => '?').join(',')})`).run(TEMP_SEGMENT_OFFSET, ...plan.laterSessionIds);
504
+ }
505
+ updateSessionFromSegment(db, source.id, source.source_path, plan.left);
506
+ const newSessionId = insertSessionFromSegment(db, source.tool, source.native_id, source.source_path, plan.right);
507
+ const move = db.prepare('UPDATE memories SET session_id = ? WHERE id = ?');
508
+ for (const memoryId of plan.right.memoryIds) {
509
+ move.run(newSessionId, memoryId);
510
+ }
511
+ db.prepare(`INSERT INTO segment_corrections (ulid, tool, native_id, direction, first_session_id, second_session_id, turn_index, created_at)
512
+ VALUES (?, ?, ?, 'split', ?, ?, ?, ?)`).run(newUlid(), source.tool, source.native_id, source.id, newSessionId, plan.atTurnIndex, new Date().toISOString());
513
+ return newSessionId;
514
+ });
515
+ return apply();
516
+ }
517
+ export async function planManualMerge(db, adapters, firstId, secondId) {
518
+ const first = sessionById(db, firstId);
519
+ const second = sessionById(db, secondId);
520
+ if (first.tool !== second.tool || first.native_id !== second.native_id) {
521
+ throw new Error('merge requires two segments from the same native session');
522
+ }
523
+ const [left, right] = first.segment_index < second.segment_index ? [first, second] : [second, first];
524
+ if (right.segment_index !== left.segment_index + 1) {
525
+ throw new Error('merge requires adjacent segment indexes');
526
+ }
527
+ if (!isWithinProviderStore(left.tool, left.source_path)) {
528
+ throw new Error(`source transcript is outside the provider store: ${left.source_path}`);
529
+ }
530
+ if (!existsSync(left.source_path)) {
531
+ throw new Error(`source transcript is missing: ${left.source_path}`);
532
+ }
533
+ const parsed = await parseSource(adapters[left.tool], left.source_path);
534
+ const classification = await adapters[left.tool].classifySession(left.source_path);
535
+ const memories = [...memoriesForSessions(db, [left.id]), ...memoriesForSessions(db, [right.id])].sort((a, b) => a.turn_index - b.turn_index);
536
+ for (const memory of memories) {
537
+ if (!parsed.has(memory.turn_index)) {
538
+ throw new Error(`retained turn ${memory.turn_index} was not produced by the current adapter`);
539
+ }
540
+ }
541
+ const later = db
542
+ .prepare('SELECT id FROM sessions WHERE tool = ? AND native_id = ? AND segment_index > ? ORDER BY segment_index')
543
+ .all(left.tool, left.native_id, right.segment_index);
544
+ return {
545
+ direction: 'merge',
546
+ left,
547
+ right,
548
+ merged: segmentFromRange(left.segment_index, left.id, memories, parsed, toSessionRowKind(classification.kind), right.cursor ?? left.cursor),
549
+ laterSessionIds: later.map((row) => row.id),
550
+ rollupsInvalidated: countInvalidatedRollups(db, [left.id, right.id]),
551
+ };
552
+ }
553
+ export function applyManualMerge(db, plan) {
554
+ const apply = db.transaction(() => {
555
+ ensureCorrectionsTable(db);
556
+ const left = sessionById(db, plan.left.id);
557
+ const right = sessionById(db, plan.right.id);
558
+ const currentIds = [...memoriesForSessions(db, [left.id]), ...memoriesForSessions(db, [right.id])]
559
+ .sort((a, b) => a.turn_index - b.turn_index)
560
+ .map((memory) => memory.id);
561
+ if (currentIds.join(',') !== plan.merged.memoryIds.join(',')) {
562
+ throw new Error(`segments ${left.id}/${right.id} changed after preview`);
563
+ }
564
+ deleteAffectedRollups(db, [left.id, right.id]);
565
+ const move = db.prepare('UPDATE memories SET session_id = ? WHERE id = ?');
566
+ for (const memoryId of plan.merged.memoryIds) {
567
+ move.run(left.id, memoryId);
568
+ }
569
+ updateSessionFromSegment(db, left.id, left.source_path, plan.merged);
570
+ db.prepare('UPDATE session_rollups SET parent_session_id = ? WHERE parent_session_id = ?').run(left.id, right.id);
571
+ db.prepare('DELETE FROM sessions WHERE id = ?').run(right.id);
572
+ if (plan.laterSessionIds.length > 0) {
573
+ db.prepare(`UPDATE sessions SET segment_index = segment_index + ? WHERE id IN (${plan.laterSessionIds.map(() => '?').join(',')})`).run(TEMP_SEGMENT_OFFSET, ...plan.laterSessionIds);
574
+ db.prepare(`UPDATE sessions SET segment_index = segment_index - ? - 1 WHERE id IN (${plan.laterSessionIds.map(() => '?').join(',')})`).run(TEMP_SEGMENT_OFFSET, ...plan.laterSessionIds);
575
+ }
576
+ db.prepare(`INSERT INTO segment_corrections (ulid, tool, native_id, direction, first_session_id, second_session_id, turn_index, created_at)
577
+ VALUES (?, ?, ?, 'merge', ?, ?, NULL, ?)`).run(newUlid(), left.tool, left.native_id, left.id, right.id, new Date().toISOString());
578
+ return left.id;
579
+ });
580
+ return apply();
581
+ }
582
+ //# sourceMappingURL=resegmentation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resegmentation.js","sourceRoot":"","sources":["../../src/storage/resegmentation.ts"],"names":[],"mappings":"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"}