@gkorepanov/ccodex 0.4.9 → 0.4.11

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 (220) hide show
  1. package/README.md +1 -1
  2. package/config/compatibility.json +3 -3
  3. package/dist/claude/goalTools.js +1 -1
  4. package/dist/claude/goalTools.js.map +1 -1
  5. package/dist/claude/hookMapper.d.ts +1 -0
  6. package/dist/claude/hookMapper.js +1 -0
  7. package/dist/claude/hookMapper.js.map +1 -1
  8. package/dist/claude/inputMapper.js +4 -1
  9. package/dist/claude/inputMapper.js.map +1 -1
  10. package/dist/claude/rateLimits.d.ts +1 -0
  11. package/dist/claude/rateLimits.js +2 -1
  12. package/dist/claude/rateLimits.js.map +1 -1
  13. package/dist/claude/service.d.ts +13 -1
  14. package/dist/claude/service.js +156 -21
  15. package/dist/claude/service.js.map +1 -1
  16. package/dist/claude/session/commands.d.ts +3 -0
  17. package/dist/claude/session/goalState.js +9 -0
  18. package/dist/claude/session/goalState.js.map +1 -1
  19. package/dist/claude/session/repository.d.ts +1 -1
  20. package/dist/claude/session/repository.js +2 -2
  21. package/dist/claude/session/repository.js.map +1 -1
  22. package/dist/claude/session/scopeState.js +3 -1
  23. package/dist/claude/session/scopeState.js.map +1 -1
  24. package/dist/claude/session/session.js +13 -2
  25. package/dist/claude/session/session.js.map +1 -1
  26. package/dist/claude/session/usage.js +1 -0
  27. package/dist/claude/session/usage.js.map +1 -1
  28. package/dist/claude/toolMapper.js +2 -2
  29. package/dist/claude/toolMapper.js.map +1 -1
  30. package/dist/codex/generated/ClientRequest.d.ts +20 -0
  31. package/dist/codex/generated/CodexResponseHandoffMode.d.ts +1 -0
  32. package/dist/codex/generated/CodexResponseHandoffMode.js +3 -0
  33. package/dist/codex/generated/CodexResponseHandoffMode.js.map +1 -0
  34. package/dist/codex/generated/ContentItem.d.ts +3 -0
  35. package/dist/codex/generated/FunctionCallOutputContentItem.d.ts +3 -0
  36. package/dist/codex/generated/InputModality.d.ts +1 -1
  37. package/dist/codex/generated/LegacyAppPathString.d.ts +7 -6
  38. package/dist/codex/generated/RealtimeConversationVersion.d.ts +1 -1
  39. package/dist/codex/generated/ResponseItem.d.ts +15 -14
  40. package/dist/codex/generated/ResponseItemId.d.ts +5 -0
  41. package/dist/codex/generated/ResponseItemId.js +3 -0
  42. package/dist/codex/generated/ResponseItemId.js.map +1 -0
  43. package/dist/codex/generated/ResponseItemRuntimeSchema.js +2 -2
  44. package/dist/codex/generated/ResponseItemRuntimeSchema.js.map +1 -1
  45. package/dist/codex/generated/ReviewDecision.d.ts +5 -1
  46. package/dist/codex/generated/ServerNotification.d.ts +11 -0
  47. package/dist/codex/generated/ServerNotificationEnvelope.d.ts +302 -0
  48. package/dist/codex/generated/ServerNotificationEnvelope.js +3 -0
  49. package/dist/codex/generated/ServerNotificationEnvelope.js.map +1 -0
  50. package/dist/codex/generated/SleepItem.d.ts +7 -0
  51. package/dist/codex/generated/SleepItem.js +3 -0
  52. package/dist/codex/generated/SleepItem.js.map +1 -0
  53. package/dist/codex/generated/WebSearchItem.d.ts +8 -0
  54. package/dist/codex/generated/index.d.ts +4 -1
  55. package/dist/codex/generated/index.js.map +1 -1
  56. package/dist/codex/generated/v2/Account.d.ts +1 -2
  57. package/dist/codex/generated/v2/AppToolSummary.d.ts +8 -0
  58. package/dist/codex/generated/v2/AppToolSummary.js +3 -0
  59. package/dist/codex/generated/v2/AppToolSummary.js.map +1 -0
  60. package/dist/codex/generated/v2/AppsInstalledParams.d.ts +14 -0
  61. package/dist/codex/generated/v2/AppsInstalledParams.js +3 -0
  62. package/dist/codex/generated/v2/AppsInstalledParams.js.map +1 -0
  63. package/dist/codex/generated/v2/AppsInstalledResponse.d.ts +7 -0
  64. package/dist/codex/generated/v2/AppsInstalledResponse.js +3 -0
  65. package/dist/codex/generated/v2/AppsInstalledResponse.js.map +1 -0
  66. package/dist/codex/generated/v2/AppsReadParams.d.ts +14 -0
  67. package/dist/codex/generated/v2/AppsReadParams.js +3 -0
  68. package/dist/codex/generated/v2/AppsReadParams.js.map +1 -0
  69. package/dist/codex/generated/v2/AppsReadResponse.d.ts +8 -0
  70. package/dist/codex/generated/v2/AppsReadResponse.js +3 -0
  71. package/dist/codex/generated/v2/AppsReadResponse.js.map +1 -0
  72. package/dist/codex/generated/v2/ConfiguredHookHandler.d.ts +7 -0
  73. package/dist/codex/generated/v2/ConnectorMetadata.d.ts +15 -0
  74. package/dist/codex/generated/v2/ConnectorMetadata.js +3 -0
  75. package/dist/codex/generated/v2/ConnectorMetadata.js.map +1 -0
  76. package/dist/codex/generated/v2/DynamicToolCallOutputContentItem.d.ts +3 -0
  77. package/dist/codex/generated/v2/EnvironmentConnectionNotification.d.ts +4 -0
  78. package/dist/codex/generated/v2/EnvironmentConnectionNotification.js +3 -0
  79. package/dist/codex/generated/v2/EnvironmentConnectionNotification.js.map +1 -0
  80. package/dist/codex/generated/v2/EnvironmentStatusKind.d.ts +7 -0
  81. package/dist/codex/generated/v2/EnvironmentStatusKind.js +3 -0
  82. package/dist/codex/generated/v2/EnvironmentStatusKind.js.map +1 -0
  83. package/dist/codex/generated/v2/EnvironmentStatusParams.d.ts +9 -0
  84. package/dist/codex/generated/v2/EnvironmentStatusParams.js +3 -0
  85. package/dist/codex/generated/v2/EnvironmentStatusParams.js.map +1 -0
  86. package/dist/codex/generated/v2/EnvironmentStatusResponse.d.ts +14 -0
  87. package/dist/codex/generated/v2/EnvironmentStatusResponse.js +3 -0
  88. package/dist/codex/generated/v2/EnvironmentStatusResponse.js.map +1 -0
  89. package/dist/codex/generated/v2/ExternalAgentConfigDetectParams.d.ts +9 -0
  90. package/dist/codex/generated/v2/ExternalAgentConfigImportHistoriesReadResponse.d.ts +2 -0
  91. package/dist/codex/generated/v2/ExternalAgentConfigImportItemTypeFailure.d.ts +1 -0
  92. package/dist/codex/generated/v2/ExternalAgentConfigImportParams.d.ts +6 -1
  93. package/dist/codex/generated/v2/ExternalAgentConfigMigrationItemType.d.ts +1 -1
  94. package/dist/codex/generated/v2/ExternalAgentImportedConnectorCandidate.d.ts +6 -0
  95. package/dist/codex/generated/v2/ExternalAgentImportedConnectorCandidate.js +3 -0
  96. package/dist/codex/generated/v2/ExternalAgentImportedConnectorCandidate.js.map +1 -0
  97. package/dist/codex/generated/v2/ExternalAgentImportedConnectorSource.d.ts +1 -0
  98. package/dist/codex/generated/v2/ExternalAgentImportedConnectorSource.js +3 -0
  99. package/dist/codex/generated/v2/ExternalAgentImportedConnectorSource.js.map +1 -0
  100. package/dist/codex/generated/v2/FileSystemSpecialPath.d.ts +3 -2
  101. package/dist/codex/generated/v2/HookEventName.d.ts +1 -1
  102. package/dist/codex/generated/v2/HookMetadata.d.ts +5 -0
  103. package/dist/codex/generated/v2/InstalledApp.d.ts +21 -0
  104. package/dist/codex/generated/v2/InstalledApp.js +3 -0
  105. package/dist/codex/generated/v2/InstalledApp.js.map +1 -0
  106. package/dist/codex/generated/v2/LoginAccountParams.d.ts +4 -0
  107. package/dist/codex/generated/v2/LoginAccountResponse.d.ts +2 -0
  108. package/dist/codex/generated/v2/ManagedHooksRequirements.d.ts +1 -0
  109. package/dist/codex/generated/v2/McpToolCallAppContext.d.ts +0 -1
  110. package/dist/codex/generated/v2/MigrationDetails.d.ts +1 -0
  111. package/dist/codex/generated/v2/PluginDetail.d.ts +2 -0
  112. package/dist/codex/generated/v2/PluginShareUpdateDiscoverability.d.ts +1 -1
  113. package/dist/codex/generated/v2/PluginSummary.d.ts +1 -0
  114. package/dist/codex/generated/v2/RateLimitSnapshot.d.ts +4 -0
  115. package/dist/codex/generated/v2/RawResponseCompletedNotification.d.ts +11 -0
  116. package/dist/codex/generated/v2/RawResponseCompletedNotification.js +3 -0
  117. package/dist/codex/generated/v2/RawResponseCompletedNotification.js.map +1 -0
  118. package/dist/codex/generated/v2/ScheduledTaskSchedule.d.ts +16 -0
  119. package/dist/codex/generated/v2/ScheduledTaskSchedule.js +3 -0
  120. package/dist/codex/generated/v2/ScheduledTaskSchedule.js.map +1 -0
  121. package/dist/codex/generated/v2/ScheduledTaskSummary.d.ts +7 -0
  122. package/dist/codex/generated/v2/ScheduledTaskSummary.js +3 -0
  123. package/dist/codex/generated/v2/ScheduledTaskSummary.js.map +1 -0
  124. package/dist/codex/generated/v2/ScheduledTaskWeekday.d.ts +1 -0
  125. package/dist/codex/generated/v2/ScheduledTaskWeekday.js +3 -0
  126. package/dist/codex/generated/v2/ScheduledTaskWeekday.js.map +1 -0
  127. package/dist/codex/generated/v2/Thread.d.ts +5 -0
  128. package/dist/codex/generated/v2/ThreadForkParams.d.ts +11 -0
  129. package/dist/codex/generated/v2/ThreadItem.d.ts +2 -3
  130. package/dist/codex/generated/v2/ThreadItemEntry.d.ts +8 -0
  131. package/dist/codex/generated/v2/ThreadItemEntry.js +3 -0
  132. package/dist/codex/generated/v2/ThreadItemEntry.js.map +1 -0
  133. package/dist/codex/generated/v2/ThreadItemsListResponse.d.ts +2 -2
  134. package/dist/codex/generated/v2/ThreadRealtimeInitialItem.d.ts +8 -0
  135. package/dist/codex/generated/v2/ThreadRealtimeInitialItem.js +3 -0
  136. package/dist/codex/generated/v2/ThreadRealtimeInitialItem.js.map +1 -0
  137. package/dist/codex/generated/v2/ThreadRealtimeStartParams.d.ts +11 -4
  138. package/dist/codex/generated/v2/ThreadResumeResponse.d.ts +14 -0
  139. package/dist/codex/generated/v2/ThreadSearchOccurrence.d.ts +17 -0
  140. package/dist/codex/generated/v2/ThreadSearchOccurrence.js +3 -0
  141. package/dist/codex/generated/v2/ThreadSearchOccurrence.js.map +1 -0
  142. package/dist/codex/generated/v2/ThreadSearchOccurrencesParams.d.ts +19 -0
  143. package/dist/codex/generated/v2/ThreadSearchOccurrencesParams.js +3 -0
  144. package/dist/codex/generated/v2/ThreadSearchOccurrencesParams.js.map +1 -0
  145. package/dist/codex/generated/v2/ThreadSearchOccurrencesResponse.d.ts +11 -0
  146. package/dist/codex/generated/v2/ThreadSearchOccurrencesResponse.js +3 -0
  147. package/dist/codex/generated/v2/ThreadSearchOccurrencesResponse.js.map +1 -0
  148. package/dist/codex/generated/v2/ThreadSearchTextRange.d.ts +13 -0
  149. package/dist/codex/generated/v2/ThreadSearchTextRange.js +3 -0
  150. package/dist/codex/generated/v2/ThreadSearchTextRange.js.map +1 -0
  151. package/dist/codex/generated/v2/TokenUsageBreakdown.d.ts +1 -0
  152. package/dist/codex/generated/v2/TurnEnvironmentParams.d.ts +4 -0
  153. package/dist/codex/generated/v2/UserInput.d.ts +6 -0
  154. package/dist/codex/generated/v2/index.d.ts +23 -0
  155. package/dist/daemon/daemon.js +5 -20
  156. package/dist/daemon/daemon.js.map +1 -1
  157. package/dist/daemon/probe.js +1 -1
  158. package/dist/daemon/settings.d.ts +6 -0
  159. package/dist/daemon/settings.js +23 -0
  160. package/dist/daemon/settings.js.map +1 -0
  161. package/dist/gateway/clientConnection.d.ts +3 -2
  162. package/dist/gateway/clientConnection.js +47 -50
  163. package/dist/gateway/clientConnection.js.map +1 -1
  164. package/dist/gateway/logicalThreadProjection.d.ts +5 -0
  165. package/dist/gateway/logicalThreadProjection.js +58 -1
  166. package/dist/gateway/logicalThreadProjection.js.map +1 -1
  167. package/dist/gateway/remoteControlController.d.ts +29 -0
  168. package/dist/gateway/remoteControlController.js +78 -0
  169. package/dist/gateway/remoteControlController.js.map +1 -0
  170. package/dist/gateway/remoteControlHub.js +2 -1
  171. package/dist/gateway/remoteControlHub.js.map +1 -1
  172. package/dist/gateway/remoteControlMode.js +2 -12
  173. package/dist/gateway/remoteControlMode.js.map +1 -1
  174. package/dist/gateway/server.js +42 -15
  175. package/dist/gateway/server.js.map +1 -1
  176. package/dist/gateway/sideFork.d.ts +3 -0
  177. package/dist/gateway/sideFork.js +11 -0
  178. package/dist/gateway/sideFork.js.map +1 -0
  179. package/dist/gateway/stockSideThreads.js +2 -4
  180. package/dist/gateway/stockSideThreads.js.map +1 -1
  181. package/dist/gateway/subscriptions.d.ts +9 -2
  182. package/dist/gateway/subscriptions.js +40 -9
  183. package/dist/gateway/subscriptions.js.map +1 -1
  184. package/dist/gateway/threadList.d.ts +25 -0
  185. package/dist/gateway/threadList.js +112 -26
  186. package/dist/gateway/threadList.js.map +1 -1
  187. package/dist/handoff/lineageStore.d.ts +102 -0
  188. package/dist/handoff/lineageStore.js +515 -0
  189. package/dist/handoff/lineageStore.js.map +1 -0
  190. package/dist/handoff/providerEpochs.d.ts +19 -5
  191. package/dist/handoff/providerEpochs.js +119 -41
  192. package/dist/handoff/providerEpochs.js.map +1 -1
  193. package/dist/handoff/service.d.ts +16 -2
  194. package/dist/handoff/service.js +502 -140
  195. package/dist/handoff/service.js.map +1 -1
  196. package/dist/handoff/startupMigration.d.ts +22 -0
  197. package/dist/handoff/startupMigration.js +52 -0
  198. package/dist/handoff/startupMigration.js.map +1 -0
  199. package/dist/handoff/store.d.ts +10 -0
  200. package/dist/handoff/store.js +141 -28
  201. package/dist/handoff/store.js.map +1 -1
  202. package/dist/runtime/dependencies.js +1 -1
  203. package/dist/state/stockStateTracker.js +1 -0
  204. package/dist/state/stockStateTracker.js.map +1 -1
  205. package/dist/store/HybridStore.d.ts +3 -1
  206. package/dist/store/HybridStore.js.map +1 -1
  207. package/dist/store/memoryStore.d.ts +3 -2
  208. package/dist/store/memoryStore.js +18 -4
  209. package/dist/store/memoryStore.js.map +1 -1
  210. package/dist/store/sqliteStore.d.ts +2 -2
  211. package/dist/store/sqliteStore.js +84 -24
  212. package/dist/store/sqliteStore.js.map +1 -1
  213. package/dist/store/threadFilter.js +2 -0
  214. package/dist/store/threadFilter.js.map +1 -1
  215. package/legal/LICENSES.md +1 -1
  216. package/legal/THIRD_PARTY_NOTICES.md +136 -124
  217. package/package.json +5 -5
  218. package/dist/codex/generated/AmazonBedrockCredentialSource.d.ts +0 -1
  219. package/dist/codex/generated/AmazonBedrockCredentialSource.js +0 -3
  220. package/dist/codex/generated/AmazonBedrockCredentialSource.js.map +0 -1
@@ -0,0 +1,515 @@
1
+ import { chmodSync, copyFileSync, existsSync, mkdirSync } from "node:fs";
2
+ import { dirname } from "node:path";
3
+ import { DatabaseSync } from "node:sqlite";
4
+ const SCHEMA_VERSION = 3;
5
+ const LEGACY_SCHEMA_VERSION = 2;
6
+ /**
7
+ * Minimal cross-provider source of truth.
8
+ *
9
+ * Provider-owned Thread, Turn and settings payloads deliberately have no column
10
+ * in this schema. Provider segments retain only the boundary IDs needed to read
11
+ * and slice the native provider transcript. Full JSON is accepted only for
12
+ * CCodex-owned synthetic turns. In-flight provider switches live in the
13
+ * operational journal, which is cleared when the transaction settles.
14
+ */
15
+ export class LineageStore {
16
+ path;
17
+ database;
18
+ constructor(path) {
19
+ this.path = path;
20
+ mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
21
+ this.database = new DatabaseSync(path);
22
+ this.database.exec(`
23
+ PRAGMA journal_mode=WAL;
24
+ PRAGMA synchronous=FULL;
25
+ PRAGMA busy_timeout=5000;
26
+ PRAGMA foreign_keys=ON;
27
+ `);
28
+ chmodSync(path, 0o600);
29
+ if (this.needsLegacyMigration())
30
+ return;
31
+ const version = this.userVersion();
32
+ this.createSchema();
33
+ if (version < 3)
34
+ this.migrateCatalogIdentities();
35
+ if (this.userVersion() < SCHEMA_VERSION)
36
+ this.database.exec(`PRAGMA user_version = ${SCHEMA_VERSION}`);
37
+ }
38
+ close() { this.database.close(); }
39
+ createTask(identity, epoch) {
40
+ return this.transaction(() => {
41
+ this.database.prepare(`
42
+ INSERT INTO lineage_tasks (
43
+ public_thread_id, current_epoch_id, revision, session_id, created_at, forked_from_id, parent_thread_id
44
+ ) VALUES (?, ?, 1, ?, ?, ?, ?)
45
+ `).run(identity.publicThreadId, identity.currentEpochId, identity.parentThreadId ? identity.sessionId : identity.publicThreadId, identity.createdAt, identity.forkedFromId ?? null, identity.parentThreadId ?? null);
46
+ this.database.prepare(`
47
+ INSERT INTO lineage_epochs (
48
+ epoch_id, public_thread_id, ordinal, provider, backend_thread_id, state,
49
+ archive_pending, delete_done
50
+ ) VALUES (?, ?, 0, ?, ?, ?, 0, 0)
51
+ `).run(epoch.epochId, identity.publicThreadId, epoch.provider, epoch.backendThreadId, epoch.state ?? "current");
52
+ return this.getTask(identity.publicThreadId);
53
+ });
54
+ }
55
+ getTask(publicThreadId) {
56
+ const row = this.database.prepare(`
57
+ SELECT * FROM lineage_tasks WHERE public_thread_id = ?
58
+ `).get(publicThreadId);
59
+ return row ? this.taskFromRow(row) : undefined;
60
+ }
61
+ listTasks() {
62
+ return this.database.prepare(`
63
+ SELECT * FROM lineage_tasks ORDER BY public_thread_id ASC
64
+ `).all().map((row) => this.taskFromRow(row));
65
+ }
66
+ getEpoch(epochId) {
67
+ const row = this.database.prepare(`
68
+ SELECT * FROM lineage_epochs WHERE epoch_id = ?
69
+ `).get(epochId);
70
+ return row ? this.epochFromRow(row) : undefined;
71
+ }
72
+ listMappings() {
73
+ return this.database.prepare(`
74
+ SELECT * FROM lineage_epochs ORDER BY public_thread_id ASC, ordinal ASC
75
+ `).all().map((row) => this.epochFromRow(row));
76
+ }
77
+ listEpochs(publicThreadId) {
78
+ return this.database.prepare(`
79
+ SELECT * FROM lineage_epochs WHERE public_thread_id = ? ORDER BY ordinal ASC
80
+ `).all(publicThreadId).map((row) => this.epochFromRow(row));
81
+ }
82
+ findEpoch(provider, backendThreadId) {
83
+ const row = this.database.prepare(`
84
+ SELECT * FROM lineage_epochs WHERE provider = ? AND backend_thread_id = ?
85
+ `).get(provider, backendThreadId);
86
+ return row ? this.epochFromRow(row) : undefined;
87
+ }
88
+ pendingStockArchives() {
89
+ return this.listMappings().filter((epoch) => epoch.provider === "stock" && epoch.archivePending);
90
+ }
91
+ markStockArchived(epochId) {
92
+ return Number(this.database.prepare(`
93
+ UPDATE lineage_epochs SET archive_pending = 0 WHERE epoch_id = ? AND provider = 'stock'
94
+ `).run(epochId).changes) === 1;
95
+ }
96
+ markEpochDeleted(epochId) {
97
+ return Number(this.database.prepare(`
98
+ UPDATE lineage_epochs SET delete_done = 1 WHERE epoch_id = ?
99
+ `).run(epochId).changes) === 1;
100
+ }
101
+ epochBelongsToLineage(publicThreadId, epochId) {
102
+ return this.database.prepare(`
103
+ SELECT 1 FROM lineage_epochs WHERE epoch_id = ? AND public_thread_id = ?
104
+ UNION ALL
105
+ SELECT 1 FROM lineage_segments WHERE public_thread_id = ? AND epoch_id = ?
106
+ LIMIT 1
107
+ `).get(epochId, publicThreadId, publicThreadId, epochId) !== undefined;
108
+ }
109
+ epochReferenceCount(epochId) {
110
+ const current = this.database.prepare(`
111
+ SELECT COUNT(*) AS count FROM lineage_tasks WHERE current_epoch_id = ?
112
+ `).get(epochId).count;
113
+ const segments = this.database.prepare(`
114
+ SELECT COUNT(DISTINCT public_thread_id) AS count FROM lineage_segments WHERE epoch_id = ?
115
+ `).get(epochId).count;
116
+ return current + segments;
117
+ }
118
+ taskEpochs(publicThreadId) {
119
+ return this.database.prepare(`
120
+ SELECT DISTINCT epoch.* FROM lineage_epochs epoch
121
+ LEFT JOIN lineage_segments segment ON segment.epoch_id = epoch.epoch_id
122
+ WHERE epoch.public_thread_id = ? OR segment.public_thread_id = ?
123
+ ORDER BY epoch.public_thread_id ASC, epoch.ordinal ASC
124
+ `).all(publicThreadId, publicThreadId)
125
+ .map((row) => this.epochFromRow(row));
126
+ }
127
+ deleteTask(publicThreadId) {
128
+ return this.transaction(() => {
129
+ const deleted = Number(this.database.prepare(`
130
+ DELETE FROM lineage_tasks WHERE public_thread_id = ?
131
+ `).run(publicThreadId).changes) === 1;
132
+ if (!deleted)
133
+ return false;
134
+ this.database.prepare(`
135
+ DELETE FROM lineage_epochs
136
+ WHERE delete_done = 1
137
+ AND epoch_id NOT IN (SELECT current_epoch_id FROM lineage_tasks)
138
+ AND epoch_id NOT IN (SELECT epoch_id FROM lineage_segments WHERE epoch_id IS NOT NULL)
139
+ `).run();
140
+ return true;
141
+ });
142
+ }
143
+ createForkTask(identity, epoch, inheritedSegments) {
144
+ return this.transaction(() => {
145
+ this.database.prepare(`
146
+ INSERT INTO lineage_tasks (
147
+ public_thread_id, current_epoch_id, revision, session_id, created_at, forked_from_id, parent_thread_id
148
+ ) VALUES (?, ?, 1, ?, ?, ?, ?)
149
+ `).run(identity.publicThreadId, identity.currentEpochId, identity.parentThreadId ? identity.sessionId : identity.publicThreadId, identity.createdAt, identity.forkedFromId ?? null, identity.parentThreadId ?? null);
150
+ this.database.prepare(`
151
+ INSERT INTO lineage_epochs (
152
+ epoch_id, public_thread_id, ordinal, provider, backend_thread_id, state,
153
+ archive_pending, delete_done
154
+ ) VALUES (?, ?, 0, ?, ?, ?, 0, 0)
155
+ `).run(epoch.epochId, identity.publicThreadId, epoch.provider, epoch.backendThreadId, epoch.state ?? "current");
156
+ inheritedSegments.forEach((segment, position) => this.insertSegment(identity.publicThreadId, position, segment));
157
+ return this.getTask(identity.publicThreadId);
158
+ });
159
+ }
160
+ listSegments(publicThreadId) {
161
+ return this.database.prepare(`
162
+ SELECT * FROM lineage_segments WHERE public_thread_id = ? ORDER BY position ASC
163
+ `).all(publicThreadId).map((row) => row.kind === "provider" ? {
164
+ kind: "provider",
165
+ position: row.position,
166
+ epochId: row.epoch_id,
167
+ startTurnId: row.start_turn_id,
168
+ endTurnId: row.end_turn_id,
169
+ } : {
170
+ kind: "synthetic",
171
+ position: row.position,
172
+ publicTurnId: row.public_turn_id,
173
+ turn: JSON.parse(row.synthetic_turn_json),
174
+ });
175
+ }
176
+ replaceSegments(publicThreadId, expectedRevision, segments) {
177
+ return this.transaction(() => {
178
+ const task = this.getTask(publicThreadId);
179
+ if (!task || task.revision !== expectedRevision)
180
+ return false;
181
+ this.database.prepare("DELETE FROM lineage_segments WHERE public_thread_id = ?").run(publicThreadId);
182
+ segments.forEach((segment, position) => this.insertSegment(publicThreadId, position, segment));
183
+ return Number(this.database.prepare(`
184
+ UPDATE lineage_tasks SET revision = revision + 1
185
+ WHERE public_thread_id = ? AND revision = ?
186
+ `).run(publicThreadId, expectedRevision).changes) === 1;
187
+ });
188
+ }
189
+ commitEpoch(publicThreadId, expectedEpochId, expectedRevision, sourceBoundary, target, syntheticTurns = []) {
190
+ return this.transaction(() => {
191
+ const task = this.getTask(publicThreadId);
192
+ if (!task || task.currentEpochId !== expectedEpochId || task.revision !== expectedRevision)
193
+ return undefined;
194
+ const ordinal = this.database.prepare(`
195
+ SELECT COALESCE(MAX(ordinal), -1) + 1 AS ordinal
196
+ FROM lineage_epochs WHERE public_thread_id = ?
197
+ `).get(publicThreadId).ordinal;
198
+ const sealed = this.database.prepare(`
199
+ UPDATE lineage_epochs SET state = 'sealed', start_turn_id = ?, end_turn_id = ?,
200
+ archive_pending = CASE WHEN provider = 'stock' THEN 1 ELSE 0 END
201
+ WHERE epoch_id = ? AND public_thread_id = ? AND state = 'current'
202
+ `).run(sourceBoundary.startTurnId, sourceBoundary.endTurnId, expectedEpochId, publicThreadId);
203
+ if (Number(sealed.changes) !== 1)
204
+ return undefined;
205
+ this.database.prepare(`
206
+ INSERT INTO lineage_epochs (
207
+ epoch_id, public_thread_id, ordinal, provider, backend_thread_id, state,
208
+ archive_pending, delete_done
209
+ ) VALUES (?, ?, ?, ?, ?, 'current', 0, 0)
210
+ `).run(target.epochId, publicThreadId, ordinal, target.provider, target.backendThreadId);
211
+ const nextPosition = this.database.prepare(`
212
+ SELECT COALESCE(MAX(position), -1) + 1 AS position
213
+ FROM lineage_segments WHERE public_thread_id = ?
214
+ `).get(publicThreadId).position;
215
+ this.insertSegment(publicThreadId, nextPosition, {
216
+ kind: "provider",
217
+ epochId: expectedEpochId,
218
+ startTurnId: sourceBoundary.startTurnId,
219
+ endTurnId: sourceBoundary.endTurnId,
220
+ });
221
+ syntheticTurns.forEach((synthetic, index) => this.insertSegment(publicThreadId, nextPosition + index + 1, {
222
+ kind: "synthetic",
223
+ publicTurnId: synthetic.publicTurnId,
224
+ turn: synthetic.turn,
225
+ }));
226
+ const updated = this.database.prepare(`
227
+ UPDATE lineage_tasks SET current_epoch_id = ?, revision = revision + 1
228
+ WHERE public_thread_id = ? AND current_epoch_id = ? AND revision = ?
229
+ `).run(target.epochId, publicThreadId, expectedEpochId, expectedRevision);
230
+ if (Number(updated.changes) !== 1)
231
+ throw new Error("Epoch commit lost its task CAS.");
232
+ return this.getTask(publicThreadId);
233
+ });
234
+ }
235
+ commitRollback(publicThreadId, expectedEpochId, expectedRevision, target, retainedSegments) {
236
+ return this.transaction(() => {
237
+ const task = this.getTask(publicThreadId);
238
+ if (!task || task.currentEpochId !== expectedEpochId || task.revision !== expectedRevision)
239
+ return undefined;
240
+ const sourceBoundary = [...retainedSegments].reverse().find((segment) => segment.kind === "provider" && segment.epochId === expectedEpochId);
241
+ const sealed = this.database.prepare(`
242
+ UPDATE lineage_epochs SET state = 'sealed',
243
+ start_turn_id = COALESCE(?, start_turn_id), end_turn_id = COALESCE(?, end_turn_id),
244
+ archive_pending = CASE WHEN provider = 'stock' THEN 1 ELSE archive_pending END
245
+ WHERE epoch_id = ? AND public_thread_id = ? AND state = 'current'
246
+ `).run(sourceBoundary?.startTurnId ?? null, sourceBoundary?.endTurnId ?? null, expectedEpochId, publicThreadId);
247
+ if (Number(sealed.changes) !== 1)
248
+ return undefined;
249
+ const ordinal = this.database.prepare(`
250
+ SELECT COALESCE(MAX(ordinal), -1) + 1 AS ordinal
251
+ FROM lineage_epochs WHERE public_thread_id = ?
252
+ `).get(publicThreadId).ordinal;
253
+ this.database.prepare(`
254
+ INSERT INTO lineage_epochs (
255
+ epoch_id, public_thread_id, ordinal, provider, backend_thread_id, state,
256
+ archive_pending, delete_done
257
+ ) VALUES (?, ?, ?, ?, ?, 'current', 0, 0)
258
+ `).run(target.epochId, publicThreadId, ordinal, target.provider, target.backendThreadId);
259
+ this.database.prepare("DELETE FROM lineage_segments WHERE public_thread_id = ?").run(publicThreadId);
260
+ retainedSegments.forEach((segment, position) => this.insertSegment(publicThreadId, position, segment));
261
+ const updated = this.database.prepare(`
262
+ UPDATE lineage_tasks SET current_epoch_id = ?, revision = revision + 1
263
+ WHERE public_thread_id = ? AND current_epoch_id = ? AND revision = ?
264
+ `).run(target.epochId, publicThreadId, expectedEpochId, expectedRevision);
265
+ if (Number(updated.changes) !== 1)
266
+ throw new Error("Rollback commit lost its task CAS.");
267
+ return this.getTask(publicThreadId);
268
+ });
269
+ }
270
+ needsLegacyMigration() {
271
+ return this.userVersion() < LEGACY_SCHEMA_VERSION && this.hasTable("logical_threads");
272
+ }
273
+ legacyBackendRefs() {
274
+ if (!this.needsLegacyMigration() || !this.hasTable("provider_epochs"))
275
+ return [];
276
+ return this.database.prepare(`
277
+ SELECT DISTINCT provider, backend_thread_id FROM provider_epochs
278
+ WHERE delete_done = 0 AND backend_thread_id NOT LIKE 'ccodex-provisional:%'
279
+ ORDER BY provider, backend_thread_id
280
+ `).all().map((row) => ({
281
+ provider: row.provider,
282
+ backendThreadId: row.backend_thread_id,
283
+ }));
284
+ }
285
+ finalizeLegacyMigration(validated, backupPath = `${this.path}.pre-lineage-v2.bak`) {
286
+ if (!this.needsLegacyMigration())
287
+ return;
288
+ const missing = this.legacyBackendRefs().filter((ref) => !validated.has(`${ref.provider}:${ref.backendThreadId}`));
289
+ if (missing.length > 0) {
290
+ throw new Error(`Lineage migration requires validated provider backends: ${missing.map((ref) => `${ref.provider}:${ref.backendThreadId}`).join(", ")}`);
291
+ }
292
+ this.database.exec("PRAGMA wal_checkpoint(TRUNCATE)");
293
+ if (!existsSync(backupPath))
294
+ copyFileSync(this.path, backupPath, 0);
295
+ this.transaction(() => {
296
+ this.createSchema();
297
+ if (this.hasTable("logical_threads"))
298
+ this.importLegacyLineage();
299
+ this.scrubLegacySnapshots();
300
+ this.database.exec(`PRAGMA user_version = ${SCHEMA_VERSION}`);
301
+ });
302
+ chmodSync(this.path, 0o600);
303
+ chmodSync(backupPath, 0o600);
304
+ }
305
+ createSchema() {
306
+ this.database.exec(`
307
+ CREATE TABLE IF NOT EXISTS lineage_tasks (
308
+ public_thread_id TEXT PRIMARY KEY,
309
+ current_epoch_id TEXT NOT NULL,
310
+ revision INTEGER NOT NULL,
311
+ session_id TEXT NOT NULL,
312
+ created_at INTEGER NOT NULL,
313
+ forked_from_id TEXT,
314
+ parent_thread_id TEXT
315
+ );
316
+ CREATE TABLE IF NOT EXISTS lineage_epochs (
317
+ epoch_id TEXT PRIMARY KEY,
318
+ public_thread_id TEXT NOT NULL,
319
+ ordinal INTEGER NOT NULL,
320
+ provider TEXT NOT NULL CHECK(provider IN ('claude', 'stock')),
321
+ backend_thread_id TEXT NOT NULL,
322
+ state TEXT NOT NULL CHECK(state IN ('current', 'sealed', 'provisional')),
323
+ start_turn_id TEXT,
324
+ end_turn_id TEXT,
325
+ archive_pending INTEGER NOT NULL DEFAULT 0,
326
+ delete_done INTEGER NOT NULL DEFAULT 0,
327
+ UNIQUE(public_thread_id, ordinal),
328
+ UNIQUE(provider, backend_thread_id)
329
+ );
330
+ CREATE UNIQUE INDEX IF NOT EXISTS lineage_epochs_one_current
331
+ ON lineage_epochs(public_thread_id) WHERE state = 'current';
332
+ CREATE TABLE IF NOT EXISTS lineage_segments (
333
+ public_thread_id TEXT NOT NULL REFERENCES lineage_tasks(public_thread_id) ON DELETE CASCADE,
334
+ position INTEGER NOT NULL,
335
+ kind TEXT NOT NULL CHECK(kind IN ('provider', 'synthetic')),
336
+ epoch_id TEXT REFERENCES lineage_epochs(epoch_id),
337
+ start_turn_id TEXT,
338
+ end_turn_id TEXT,
339
+ public_turn_id TEXT,
340
+ synthetic_turn_json TEXT,
341
+ PRIMARY KEY(public_thread_id, position),
342
+ CHECK((kind = 'provider' AND epoch_id IS NOT NULL AND start_turn_id IS NOT NULL
343
+ AND end_turn_id IS NOT NULL AND public_turn_id IS NULL AND synthetic_turn_json IS NULL)
344
+ OR (kind = 'synthetic' AND epoch_id IS NULL AND start_turn_id IS NULL
345
+ AND end_turn_id IS NULL AND public_turn_id IS NOT NULL AND synthetic_turn_json IS NOT NULL))
346
+ );
347
+ DROP TABLE IF EXISTS lineage_switch_jobs;
348
+ `);
349
+ }
350
+ importLegacyLineage() {
351
+ const threads = this.database.prepare("SELECT * FROM logical_threads")
352
+ .all();
353
+ for (const row of threads) {
354
+ const thread = JSON.parse(row.thread_json);
355
+ this.database.prepare(`
356
+ INSERT OR IGNORE INTO lineage_tasks (
357
+ public_thread_id, current_epoch_id, revision, session_id, created_at, forked_from_id, parent_thread_id
358
+ ) VALUES (?, ?, ?, ?, ?, ?, ?)
359
+ `).run(row.public_thread_id, row.current_epoch_id, row.revision, thread.parentThreadId ? thread.sessionId || row.public_thread_id : row.public_thread_id, thread.createdAt, thread.forkedFromId, thread.parentThreadId);
360
+ }
361
+ if (!this.hasTable("provider_epochs"))
362
+ return;
363
+ const epochs = this.database.prepare("SELECT * FROM provider_epochs ORDER BY public_thread_id, ordinal")
364
+ .all();
365
+ for (const row of epochs) {
366
+ this.database.prepare(`
367
+ INSERT OR IGNORE INTO lineage_epochs (
368
+ epoch_id, public_thread_id, ordinal, provider, backend_thread_id, state,
369
+ archive_pending, delete_done
370
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
371
+ `).run(row.epoch_id, row.public_thread_id, row.ordinal, row.provider, row.backend_thread_id, row.state, row.archive_pending ?? 0, row.delete_done ?? 0);
372
+ }
373
+ if (!this.hasTable("logical_turns"))
374
+ return;
375
+ const turns = this.database.prepare("SELECT * FROM logical_turns ORDER BY public_thread_id, position")
376
+ .all();
377
+ for (const publicThreadId of new Set(turns.map((row) => row.public_thread_id))) {
378
+ const currentEpochId = this.getTask(publicThreadId).currentEpochId;
379
+ this.importLegacyTurns(publicThreadId, currentEpochId, turns.filter((row) => row.public_thread_id === publicThreadId));
380
+ }
381
+ }
382
+ migrateCatalogIdentities() {
383
+ this.transaction(() => {
384
+ this.database.prepare(`
385
+ UPDATE lineage_tasks SET session_id = public_thread_id
386
+ WHERE parent_thread_id IS NULL AND session_id != public_thread_id
387
+ `).run();
388
+ this.database.exec("PRAGMA user_version = 3");
389
+ });
390
+ }
391
+ importLegacyTurns(publicThreadId, currentEpochId, turns) {
392
+ let position = 0;
393
+ let providerRun;
394
+ const flush = () => {
395
+ if (!providerRun)
396
+ return;
397
+ this.insertSegment(publicThreadId, position++, {
398
+ kind: "provider",
399
+ epochId: providerRun.epochId,
400
+ startTurnId: providerRun.startTurnId,
401
+ endTurnId: providerRun.endTurnId,
402
+ });
403
+ this.database.prepare(`
404
+ UPDATE lineage_epochs SET
405
+ start_turn_id = COALESCE(start_turn_id, ?), end_turn_id = ?
406
+ WHERE epoch_id = ?
407
+ `).run(providerRun.startTurnId, providerRun.endTurnId, providerRun.epochId);
408
+ providerRun = undefined;
409
+ };
410
+ for (const row of turns) {
411
+ if (row.kind === "provider" && row.epoch_id && row.provider_turn_id) {
412
+ if (row.epoch_id === currentEpochId) {
413
+ flush();
414
+ continue;
415
+ }
416
+ if (providerRun?.epochId === row.epoch_id)
417
+ providerRun.endTurnId = row.provider_turn_id;
418
+ else {
419
+ flush();
420
+ providerRun = {
421
+ epochId: row.epoch_id,
422
+ startTurnId: row.provider_turn_id,
423
+ endTurnId: row.provider_turn_id,
424
+ };
425
+ }
426
+ continue;
427
+ }
428
+ flush();
429
+ this.insertSegment(publicThreadId, position++, {
430
+ kind: "synthetic",
431
+ publicTurnId: row.public_turn_id,
432
+ turn: JSON.parse(row.turn_json),
433
+ });
434
+ }
435
+ flush();
436
+ }
437
+ scrubLegacySnapshots() {
438
+ if (this.hasTable("logical_threads")) {
439
+ for (const task of this.database.prepare("SELECT * FROM lineage_tasks").all()) {
440
+ this.database.prepare(`
441
+ UPDATE logical_threads SET thread_json = ? WHERE public_thread_id = ?
442
+ `).run(JSON.stringify({
443
+ id: task.public_thread_id,
444
+ sessionId: task.session_id,
445
+ createdAt: task.created_at,
446
+ forkedFromId: task.forked_from_id,
447
+ parentThreadId: task.parent_thread_id,
448
+ }), task.public_thread_id);
449
+ }
450
+ }
451
+ if (this.hasTable("provider_epochs")) {
452
+ this.database.prepare("UPDATE provider_epochs SET model = '', settings_json = '{}'").run();
453
+ }
454
+ if (this.hasTable("logical_turns")) {
455
+ this.database.prepare("UPDATE logical_turns SET turn_json = '{}' WHERE kind = 'provider'").run();
456
+ }
457
+ if (this.hasTable("provider_switch_jobs")) {
458
+ this.database.prepare("DELETE FROM provider_switch_jobs").run();
459
+ }
460
+ }
461
+ insertSegment(publicThreadId, position, segment) {
462
+ this.database.prepare(`
463
+ INSERT INTO lineage_segments (
464
+ public_thread_id, position, kind, epoch_id, start_turn_id, end_turn_id,
465
+ public_turn_id, synthetic_turn_json
466
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
467
+ `).run(publicThreadId, position, segment.kind, segment.kind === "provider" ? segment.epochId : null, segment.kind === "provider" ? segment.startTurnId : null, segment.kind === "provider" ? segment.endTurnId : null, segment.kind === "synthetic" ? segment.publicTurnId : null, segment.kind === "synthetic" ? JSON.stringify(segment.turn) : null);
468
+ }
469
+ taskFromRow(row) {
470
+ return {
471
+ publicThreadId: row.public_thread_id,
472
+ currentEpochId: row.current_epoch_id,
473
+ revision: row.revision,
474
+ sessionId: row.session_id,
475
+ createdAt: row.created_at,
476
+ ...(row.forked_from_id ? { forkedFromId: row.forked_from_id } : {}),
477
+ ...(row.parent_thread_id ? { parentThreadId: row.parent_thread_id } : {}),
478
+ };
479
+ }
480
+ epochFromRow(row) {
481
+ return {
482
+ epochId: row.epoch_id,
483
+ publicThreadId: row.public_thread_id,
484
+ ordinal: row.ordinal,
485
+ provider: row.provider,
486
+ backendThreadId: row.backend_thread_id,
487
+ state: row.state,
488
+ ...(row.start_turn_id ? { startTurnId: row.start_turn_id } : {}),
489
+ ...(row.end_turn_id ? { endTurnId: row.end_turn_id } : {}),
490
+ archivePending: row.archive_pending === 1,
491
+ deleteDone: row.delete_done === 1,
492
+ };
493
+ }
494
+ hasTable(name) {
495
+ return this.database.prepare(`
496
+ SELECT 1 AS found FROM sqlite_master WHERE type = 'table' AND name = ?
497
+ `).get(name) !== undefined;
498
+ }
499
+ userVersion() {
500
+ return this.database.prepare("PRAGMA user_version").get().user_version;
501
+ }
502
+ transaction(action) {
503
+ this.database.exec("BEGIN IMMEDIATE");
504
+ try {
505
+ const result = action();
506
+ this.database.exec("COMMIT");
507
+ return result;
508
+ }
509
+ catch (error) {
510
+ this.database.exec("ROLLBACK");
511
+ throw error;
512
+ }
513
+ }
514
+ }
515
+ //# sourceMappingURL=lineageStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lineageStore.js","sourceRoot":"","sources":["../../src/handoff/lineageStore.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,32 @@
1
1
  import type { Thread } from "../codex/generated/v2/Thread.js";
2
2
  import type { Turn } from "../codex/generated/v2/Turn.js";
3
- import { HandoffStore, type LogicalThread, type NewLogicalTurn, type ProviderEpoch, type ProviderKind } from "./store.js";
3
+ import { LineageStore, type EpochBoundary, type NewTranscriptSegment, type TranscriptSegment } from "./lineageStore.js";
4
+ import { HandoffStore, type LogicalThread, type ProviderEpoch, type ProviderKind } from "./store.js";
4
5
  export interface ResolvedProviderEpoch {
5
6
  readonly logical: LogicalThread;
6
7
  readonly epoch: ProviderEpoch;
7
8
  }
9
+ export interface LegacyProviderSnapshots {
10
+ readonly threads: ReadonlyMap<string, Thread>;
11
+ readonly epochs: ReadonlyMap<string, ProviderEpoch>;
12
+ }
13
+ export declare function stockSwitchThreadSource(jobId: string, source: string | null): string;
8
14
  export declare class ProviderEpochs {
9
- private readonly store;
10
- constructor(store: HandoffStore);
15
+ private readonly lineage;
16
+ private readonly legacyMirror?;
17
+ private readonly legacySnapshots?;
18
+ constructor(lineage: LineageStore, legacyMirror?: HandoffStore | undefined, legacySnapshots?: LegacyProviderSnapshots | undefined);
11
19
  resolve(publicThreadId: string): ResolvedProviderEpoch | undefined;
12
20
  publicId(provider: ProviderKind, backendThreadId: string): string | undefined;
13
21
  hiddenBackendIds(provider?: ProviderKind): Set<string>;
22
+ mappings(): EpochBoundary[];
23
+ segments(publicThreadId: string): TranscriptSegment[];
24
+ epoch(epochId: string): EpochBoundary | undefined;
25
+ configuredEpoch(epochId: string): ProviderEpoch | undefined;
26
+ belongs(publicThreadId: string, epochId: string): boolean;
14
27
  seed(thread: Thread, provider: ProviderKind, model: string, settings: Record<string, unknown>): ResolvedProviderEpoch;
28
+ createFork(thread: Thread, backendThreadId: string, provider: ProviderKind, model: string, settings: Record<string, unknown>, inheritedSegments: readonly NewTranscriptSegment[]): ResolvedProviderEpoch;
29
+ projectThread(publicThreadId: string, backend: Thread, includeTurns: boolean, historicalTurns?: readonly Turn[]): Thread;
30
+ /** Legacy-test helper; production history is assembled from provider segments. */
15
31
  visibleTurns(publicThreadId: string, currentBackendTurns: readonly Turn[]): Turn[];
16
- snapshotTurns(publicThreadId: string, currentBackendTurns: readonly Turn[]): NewLogicalTurn[];
17
- projectThread(publicThreadId: string, backend: Thread, includeTurns: boolean): Thread;
18
32
  }