@gkorepanov/ccodex 0.4.8 → 0.4.10

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