ghagga-core 2.6.1 → 2.8.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 (150) hide show
  1. package/dist/agents/consensus.d.ts +2 -0
  2. package/dist/agents/consensus.d.ts.map +1 -1
  3. package/dist/agents/consensus.js +1 -0
  4. package/dist/agents/consensus.js.map +1 -1
  5. package/dist/agents/diagnostic.d.ts +2 -0
  6. package/dist/agents/diagnostic.d.ts.map +1 -1
  7. package/dist/agents/diagnostic.js +1 -0
  8. package/dist/agents/diagnostic.js.map +1 -1
  9. package/dist/agents/fan-out-lenses.d.ts +92 -0
  10. package/dist/agents/fan-out-lenses.d.ts.map +1 -0
  11. package/dist/agents/fan-out-lenses.js +424 -0
  12. package/dist/agents/fan-out-lenses.js.map +1 -0
  13. package/dist/agents/simple.d.ts +2 -0
  14. package/dist/agents/simple.d.ts.map +1 -1
  15. package/dist/agents/simple.js +1 -0
  16. package/dist/agents/simple.js.map +1 -1
  17. package/dist/agents/workflow.d.ts +2 -0
  18. package/dist/agents/workflow.d.ts.map +1 -1
  19. package/dist/agents/workflow.js +2 -1
  20. package/dist/agents/workflow.js.map +1 -1
  21. package/dist/checklist/config.d.ts +22 -0
  22. package/dist/checklist/config.d.ts.map +1 -0
  23. package/dist/checklist/config.js +85 -0
  24. package/dist/checklist/config.js.map +1 -0
  25. package/dist/checklist/context.d.ts +22 -0
  26. package/dist/checklist/context.d.ts.map +1 -0
  27. package/dist/checklist/context.js +76 -0
  28. package/dist/checklist/context.js.map +1 -0
  29. package/dist/checklist/defaults.d.ts +12 -0
  30. package/dist/checklist/defaults.d.ts.map +1 -0
  31. package/dist/checklist/defaults.js +172 -0
  32. package/dist/checklist/defaults.js.map +1 -0
  33. package/dist/checklist/index.d.ts +14 -0
  34. package/dist/checklist/index.d.ts.map +1 -0
  35. package/dist/checklist/index.js +15 -0
  36. package/dist/checklist/index.js.map +1 -0
  37. package/dist/checklist/scorer.d.ts +58 -0
  38. package/dist/checklist/scorer.d.ts.map +1 -0
  39. package/dist/checklist/scorer.js +142 -0
  40. package/dist/checklist/scorer.js.map +1 -0
  41. package/dist/checklist/types.d.ts +39 -0
  42. package/dist/checklist/types.d.ts.map +1 -0
  43. package/dist/checklist/types.js +17 -0
  44. package/dist/checklist/types.js.map +1 -0
  45. package/dist/exploitability/analyzer.d.ts +75 -0
  46. package/dist/exploitability/analyzer.d.ts.map +1 -0
  47. package/dist/exploitability/analyzer.js +299 -0
  48. package/dist/exploitability/analyzer.js.map +1 -0
  49. package/dist/exploitability/index.d.ts +10 -0
  50. package/dist/exploitability/index.d.ts.map +1 -0
  51. package/dist/exploitability/index.js +10 -0
  52. package/dist/exploitability/index.js.map +1 -0
  53. package/dist/exploitability/types.d.ts +32 -0
  54. package/dist/exploitability/types.d.ts.map +1 -0
  55. package/dist/exploitability/types.js +9 -0
  56. package/dist/exploitability/types.js.map +1 -0
  57. package/dist/index.d.ts +15 -1
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +9 -2
  60. package/dist/index.js.map +1 -1
  61. package/dist/memory/context.d.ts +2 -0
  62. package/dist/memory/context.d.ts.map +1 -1
  63. package/dist/memory/context.js +2 -1
  64. package/dist/memory/context.js.map +1 -1
  65. package/dist/memory/contradiction.d.ts +46 -0
  66. package/dist/memory/contradiction.d.ts.map +1 -0
  67. package/dist/memory/contradiction.js +110 -0
  68. package/dist/memory/contradiction.js.map +1 -0
  69. package/dist/memory/decay.d.ts +25 -0
  70. package/dist/memory/decay.d.ts.map +1 -0
  71. package/dist/memory/decay.js +51 -0
  72. package/dist/memory/decay.js.map +1 -0
  73. package/dist/memory/search.d.ts.map +1 -1
  74. package/dist/memory/search.js +1 -0
  75. package/dist/memory/search.js.map +1 -1
  76. package/dist/memory/sqlite.d.ts +21 -0
  77. package/dist/memory/sqlite.d.ts.map +1 -1
  78. package/dist/memory/sqlite.js +77 -6
  79. package/dist/memory/sqlite.js.map +1 -1
  80. package/dist/memory/versioning.d.ts +94 -0
  81. package/dist/memory/versioning.d.ts.map +1 -0
  82. package/dist/memory/versioning.js +350 -0
  83. package/dist/memory/versioning.js.map +1 -0
  84. package/dist/pipeline.d.ts.map +1 -1
  85. package/dist/pipeline.js +117 -0
  86. package/dist/pipeline.js.map +1 -1
  87. package/dist/recursive/index.d.ts +45 -0
  88. package/dist/recursive/index.d.ts.map +1 -0
  89. package/dist/recursive/index.js +159 -0
  90. package/dist/recursive/index.js.map +1 -0
  91. package/dist/recursive/patch-extractor.d.ts +49 -0
  92. package/dist/recursive/patch-extractor.d.ts.map +1 -0
  93. package/dist/recursive/patch-extractor.js +133 -0
  94. package/dist/recursive/patch-extractor.js.map +1 -0
  95. package/dist/recursive/re-reviewer.d.ts +31 -0
  96. package/dist/recursive/re-reviewer.d.ts.map +1 -0
  97. package/dist/recursive/re-reviewer.js +66 -0
  98. package/dist/recursive/re-reviewer.js.map +1 -0
  99. package/dist/recursive/types.d.ts +62 -0
  100. package/dist/recursive/types.d.ts.map +1 -0
  101. package/dist/recursive/types.js +11 -0
  102. package/dist/recursive/types.js.map +1 -0
  103. package/dist/scope/context-builder.d.ts +37 -0
  104. package/dist/scope/context-builder.d.ts.map +1 -0
  105. package/dist/scope/context-builder.js +108 -0
  106. package/dist/scope/context-builder.js.map +1 -0
  107. package/dist/scope/diff-mapper.d.ts +29 -0
  108. package/dist/scope/diff-mapper.d.ts.map +1 -0
  109. package/dist/scope/diff-mapper.js +76 -0
  110. package/dist/scope/diff-mapper.js.map +1 -0
  111. package/dist/scope/extractor.d.ts +25 -0
  112. package/dist/scope/extractor.d.ts.map +1 -0
  113. package/dist/scope/extractor.js +264 -0
  114. package/dist/scope/extractor.js.map +1 -0
  115. package/dist/scope/index.d.ts +13 -0
  116. package/dist/scope/index.d.ts.map +1 -0
  117. package/dist/scope/index.js +16 -0
  118. package/dist/scope/index.js.map +1 -0
  119. package/dist/scope/parser.d.ts +47 -0
  120. package/dist/scope/parser.d.ts.map +1 -0
  121. package/dist/scope/parser.js +97 -0
  122. package/dist/scope/parser.js.map +1 -0
  123. package/dist/scope/queries.d.ts +23 -0
  124. package/dist/scope/queries.d.ts.map +1 -0
  125. package/dist/scope/queries.js +134 -0
  126. package/dist/scope/queries.js.map +1 -0
  127. package/dist/scope/types.d.ts +55 -0
  128. package/dist/scope/types.d.ts.map +1 -0
  129. package/dist/scope/types.js +8 -0
  130. package/dist/scope/types.js.map +1 -0
  131. package/dist/tools/execution.d.ts.map +1 -1
  132. package/dist/tools/execution.js +2 -0
  133. package/dist/tools/execution.js.map +1 -1
  134. package/dist/tools/plugins/index.d.ts +1 -0
  135. package/dist/tools/plugins/index.d.ts.map +1 -1
  136. package/dist/tools/plugins/index.js +6 -5
  137. package/dist/tools/plugins/index.js.map +1 -1
  138. package/dist/tools/plugins/sonarqube.d.ts +54 -0
  139. package/dist/tools/plugins/sonarqube.d.ts.map +1 -0
  140. package/dist/tools/plugins/sonarqube.js +145 -0
  141. package/dist/tools/plugins/sonarqube.js.map +1 -0
  142. package/dist/tools/plugins/trivy.js +1 -1
  143. package/dist/tools/plugins/trivy.js.map +1 -1
  144. package/dist/tools/types.d.ts +7 -1
  145. package/dist/tools/types.d.ts.map +1 -1
  146. package/dist/types.d.ts +80 -1
  147. package/dist/types.d.ts.map +1 -1
  148. package/dist/types.js +9 -0
  149. package/dist/types.js.map +1 -1
  150. package/package.json +3 -1
@@ -13,6 +13,8 @@ import initSqlJsModule from 'fts5-sql-bundle';
13
13
  const initSqlJs = typeof initSqlJsModule === 'function'
14
14
  ? initSqlJsModule
15
15
  : initSqlJsModule.initSqlJs;
16
+ import { DEFAULT_DECAY_CONFIG } from '../types.js';
17
+ import { computeStrength } from './decay.js';
16
18
  const SCHEMA_SQL = `
17
19
  CREATE TABLE IF NOT EXISTS memory_sessions (
18
20
  id INTEGER PRIMARY KEY AUTOINCREMENT,
@@ -36,12 +38,14 @@ const SCHEMA_SQL = `
36
38
  content_hash TEXT,
37
39
  revision_count INTEGER NOT NULL DEFAULT 1,
38
40
  created_at TEXT NOT NULL DEFAULT (datetime('now')),
39
- updated_at TEXT NOT NULL DEFAULT (datetime('now'))
41
+ updated_at TEXT NOT NULL DEFAULT (datetime('now')),
42
+ last_accessed_at TEXT NOT NULL DEFAULT (datetime('now'))
40
43
  );
41
44
 
42
45
  CREATE INDEX IF NOT EXISTS idx_obs_project ON memory_observations(project);
43
46
  CREATE INDEX IF NOT EXISTS idx_obs_topic_key ON memory_observations(topic_key);
44
47
  CREATE INDEX IF NOT EXISTS idx_obs_content_hash ON memory_observations(content_hash);
48
+ CREATE INDEX IF NOT EXISTS idx_obs_last_accessed ON memory_observations(last_accessed_at);
45
49
 
46
50
  CREATE VIRTUAL TABLE IF NOT EXISTS memory_observations_fts
47
51
  USING fts5(title, content, content='memory_observations', content_rowid='id');
@@ -62,16 +66,51 @@ const SCHEMA_SQL = `
62
66
  INSERT INTO memory_observations_fts(memory_observations_fts, rowid, title, content)
63
67
  VALUES ('delete', old.id, old.title, old.content);
64
68
  END;
69
+
70
+ -- ── Versioning tables ────────────────────────────────────────────
71
+
72
+ CREATE TABLE IF NOT EXISTS memory_branches (
73
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
74
+ name TEXT NOT NULL UNIQUE,
75
+ parent_id INTEGER REFERENCES memory_branches(id) ON DELETE SET NULL,
76
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
77
+ );
78
+
79
+ CREATE TABLE IF NOT EXISTS memory_snapshots (
80
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
81
+ name TEXT NOT NULL UNIQUE,
82
+ branch_id INTEGER NOT NULL REFERENCES memory_branches(id) ON DELETE CASCADE,
83
+ observation_ids TEXT NOT NULL DEFAULT '[]',
84
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
85
+ );
86
+
87
+ CREATE TABLE IF NOT EXISTS memory_branch_observations (
88
+ branch_id INTEGER NOT NULL REFERENCES memory_branches(id) ON DELETE CASCADE,
89
+ observation_id INTEGER NOT NULL REFERENCES memory_observations(id) ON DELETE CASCADE,
90
+ PRIMARY KEY (branch_id, observation_id)
91
+ );
92
+
93
+ -- Seed the default "main" branch (idempotent via INSERT OR IGNORE)
94
+ INSERT OR IGNORE INTO memory_branches (id, name, parent_id) VALUES (1, 'main', NULL);
65
95
  `;
66
96
  const DEFAULT_DEDUP_WINDOW_MINUTES = 15;
67
97
  export class SqliteMemoryStorage {
68
98
  db;
69
99
  filePath;
70
100
  dedupWindowMinutes;
101
+ decayConfig;
71
102
  constructor(db, filePath, options = {}) {
72
103
  this.db = db;
73
104
  this.filePath = filePath;
74
105
  this.dedupWindowMinutes = options.dedupWindowMinutes ?? DEFAULT_DEDUP_WINDOW_MINUTES;
106
+ this.decayConfig = options.decayConfig ?? DEFAULT_DECAY_CONFIG;
107
+ }
108
+ /**
109
+ * Expose the underlying database for the versioning layer.
110
+ * Only used by MemoryVersioning — not part of the MemoryStorage interface.
111
+ */
112
+ getDatabase() {
113
+ return this.db;
75
114
  }
76
115
  /**
77
116
  * Async factory — handles WASM initialization and file loading.
@@ -95,6 +134,15 @@ export class SqliteMemoryStorage {
95
134
  catch {
96
135
  // Column already exists — idempotent migration
97
136
  }
137
+ // Migration: add last_accessed_at column for decay tracking
138
+ try {
139
+ db.run("ALTER TABLE memory_observations ADD COLUMN last_accessed_at TEXT NOT NULL DEFAULT (datetime('now'))");
140
+ // Backfill: set last_accessed_at = updated_at for existing rows
141
+ db.run('UPDATE memory_observations SET last_accessed_at = updated_at WHERE last_accessed_at IS NULL OR last_accessed_at = ""');
142
+ }
143
+ catch {
144
+ // Column already exists — idempotent migration
145
+ }
98
146
  return new SqliteMemoryStorage(db, filePath, options);
99
147
  }
100
148
  async searchObservations(project, query, options = {}) {
@@ -108,8 +156,10 @@ export class SqliteMemoryStorage {
108
156
  .join(' OR ');
109
157
  if (!ftsQuery)
110
158
  return [];
159
+ // Fetch more than limit to account for decay filtering
160
+ const fetchLimit = limit * 3;
111
161
  let sql = `
112
- SELECT o.id, o.type, o.title, o.content, o.file_paths, o.severity
162
+ SELECT o.id, o.type, o.title, o.content, o.file_paths, o.severity, o.last_accessed_at
113
163
  FROM memory_observations o
114
164
  JOIN memory_observations_fts fts ON fts.rowid = o.id
115
165
  WHERE memory_observations_fts MATCH ?
@@ -121,22 +171,39 @@ export class SqliteMemoryStorage {
121
171
  params.push(type);
122
172
  }
123
173
  sql += ' ORDER BY bm25(memory_observations_fts) LIMIT ?';
124
- params.push(limit);
174
+ params.push(fetchLimit);
125
175
  const stmt = this.db.prepare(sql);
126
176
  stmt.bind(params);
177
+ const now = new Date();
127
178
  const rows = [];
179
+ const accessedIds = [];
128
180
  while (stmt.step()) {
129
181
  const row = stmt.getAsObject();
182
+ const lastAccessed = row.last_accessed_at ? new Date(row.last_accessed_at) : now;
183
+ const strength = computeStrength(lastAccessed, now, this.decayConfig);
184
+ // Filter by minimum strength
185
+ if (strength < this.decayConfig.minStrength)
186
+ continue;
187
+ const id = row.id;
188
+ accessedIds.push(id);
130
189
  rows.push({
131
- id: row.id,
190
+ id,
132
191
  type: row.type,
133
192
  title: row.title,
134
193
  content: row.content,
135
194
  filePaths: row.file_paths ? JSON.parse(row.file_paths) : null,
136
195
  severity: row.severity ?? null,
196
+ strength,
137
197
  });
198
+ if (rows.length >= limit)
199
+ break;
138
200
  }
139
201
  stmt.free();
202
+ // Update last_accessed_at for returned observations
203
+ if (accessedIds.length > 0) {
204
+ const placeholders = accessedIds.map(() => '?').join(',');
205
+ this.db.run(`UPDATE memory_observations SET last_accessed_at = datetime('now') WHERE id IN (${placeholders})`, accessedIds);
206
+ }
140
207
  return rows;
141
208
  }
142
209
  async saveObservation(data) {
@@ -187,7 +254,8 @@ export class SqliteMemoryStorage {
187
254
  SET content = ?, title = ?, content_hash = ?, file_paths = ?,
188
255
  severity = ?,
189
256
  revision_count = revision_count + 1,
190
- updated_at = datetime('now')
257
+ updated_at = datetime('now'),
258
+ last_accessed_at = datetime('now')
191
259
  WHERE id = ?
192
260
  RETURNING id, type, title, content, file_paths, severity
193
261
  `, [data.content, data.title, contentHash, filePathsJson, data.severity ?? null, existingId]);
@@ -225,8 +293,11 @@ export class SqliteMemoryStorage {
225
293
  const row = inserted[0]?.values[0];
226
294
  if (!row)
227
295
  throw new Error('Unexpected empty row after insert');
296
+ const newId = row[0];
297
+ // Link new observation to the default "main" branch
298
+ this.db.run('INSERT OR IGNORE INTO memory_branch_observations (branch_id, observation_id) VALUES (1, ?)', [newId]);
228
299
  return {
229
- id: row[0],
300
+ id: newId,
230
301
  type: row[1],
231
302
  title: row[2],
232
303
  content: row[3],
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/memory/sqlite.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/memory/sqlite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Git-style versioning for review memory.
3
+ *
4
+ * Provides branch, snapshot, merge, and rollback operations on top of
5
+ * the existing SQLite memory storage. Uses composition — wraps a
6
+ * SqliteMemoryStorage instance and operates on the versioning tables
7
+ * (memory_branches, memory_snapshots, memory_branch_observations).
8
+ *
9
+ * The default branch is "main" (id=1). All observations created via
10
+ * the standard MemoryStorage interface are automatically linked to main.
11
+ */
12
+ import type { MemoryBranch, MemorySnapshot, MergeResult, VersioningConfig } from '../types.js';
13
+ import type { SqliteMemoryStorage } from './sqlite.js';
14
+ export declare class SnapshotExistsError extends Error {
15
+ constructor(name: string);
16
+ }
17
+ export declare class SnapshotNotFoundError extends Error {
18
+ constructor(name: string);
19
+ }
20
+ export declare class BranchExistsError extends Error {
21
+ constructor(name: string);
22
+ }
23
+ export declare class BranchNotFoundError extends Error {
24
+ constructor(name: string);
25
+ }
26
+ export declare class ProtectedBranchError extends Error {
27
+ constructor(name: string);
28
+ }
29
+ export declare class MemoryVersioning {
30
+ private db;
31
+ private config;
32
+ constructor(storage: SqliteMemoryStorage, config?: VersioningConfig);
33
+ /**
34
+ * List all branches.
35
+ */
36
+ listBranches(): MemoryBranch[];
37
+ /**
38
+ * Get a branch by name. Returns null if not found.
39
+ */
40
+ getBranch(name: string): MemoryBranch | null;
41
+ /**
42
+ * Create a new branch from an existing parent branch.
43
+ * Copies all observation links from the parent to the new branch.
44
+ *
45
+ * @param name - Unique branch name
46
+ * @param parentName - Parent branch to fork from (default: "main")
47
+ * @throws BranchExistsError if name is taken
48
+ * @throws BranchNotFoundError if parent doesn't exist
49
+ */
50
+ createBranch(name: string, parentName?: string): MemoryBranch;
51
+ /**
52
+ * Delete a branch and its exclusive observations.
53
+ * Observations shared with other branches are preserved.
54
+ *
55
+ * @throws ProtectedBranchError if trying to delete "main"
56
+ * @throws BranchNotFoundError if branch doesn't exist
57
+ */
58
+ deleteBranch(name: string): void;
59
+ /**
60
+ * Get observation IDs linked to a branch.
61
+ */
62
+ getBranchObservationIds(branchName: string): number[];
63
+ /**
64
+ * Get full observation rows for a branch.
65
+ */
66
+ private getBranchObservations;
67
+ /**
68
+ * Create a named snapshot of a branch's current state.
69
+ *
70
+ * @throws SnapshotExistsError if name is taken
71
+ * @throws BranchNotFoundError if branch doesn't exist
72
+ */
73
+ createSnapshot(name: string, branchName?: string): MemorySnapshot;
74
+ /**
75
+ * List all snapshots, optionally filtered by branch.
76
+ */
77
+ listSnapshots(branchName?: string): MemorySnapshot[];
78
+ /**
79
+ * Merge observations from source branch into target branch.
80
+ * Detects contradictions but does NOT auto-resolve them — both
81
+ * observations end up on the target branch.
82
+ *
83
+ * @throws BranchNotFoundError if either branch doesn't exist
84
+ */
85
+ mergeBranch(sourceName: string, targetName: string): MergeResult;
86
+ /**
87
+ * Rollback a branch to a named snapshot.
88
+ * Removes observations added after the snapshot was taken.
89
+ *
90
+ * @throws SnapshotNotFoundError if snapshot doesn't exist
91
+ */
92
+ rollback(snapshotName: string): void;
93
+ }
94
+ //# sourceMappingURL=versioning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versioning.d.ts","sourceRoot":"","sources":["../../src/memory/versioning.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EACV,YAAY,EAEZ,cAAc,EACd,WAAW,EACX,gBAAgB,EACjB,MAAM,aAAa,CAAC;AAGrB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAIvD,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,IAAI,EAAE,MAAM;CAIzB;AAED,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,IAAI,EAAE,MAAM;CAIzB;AAED,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,IAAI,EAAE,MAAM;CAIzB;AAED,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,IAAI,EAAE,MAAM;CAIzB;AAED,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,IAAI,EAAE,MAAM;CAIzB;AAyBD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,EAAE,CAAqB;IAC/B,OAAO,CAAC,MAAM,CAAmB;gBAErB,OAAO,EAAE,mBAAmB,EAAE,MAAM,GAAE,gBAA4C;IAO9F;;OAEG;IACH,YAAY,IAAI,YAAY,EAAE;IAoB9B;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAqB5C;;;;;;;;OAQG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,SAAS,GAAG,YAAY;IAoC7D;;;;;;OAMG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAgChC;;OAEG;IACH,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE;IAkBrD;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA+B7B;;;;;OAKG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,SAAS,GAAG,cAAc;IAoCjE;;OAEG;IACH,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,cAAc,EAAE;IAiCpD;;;;;;OAMG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW;IA+ChE;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;CAqDrC"}
@@ -0,0 +1,350 @@
1
+ /**
2
+ * Git-style versioning for review memory.
3
+ *
4
+ * Provides branch, snapshot, merge, and rollback operations on top of
5
+ * the existing SQLite memory storage. Uses composition — wraps a
6
+ * SqliteMemoryStorage instance and operates on the versioning tables
7
+ * (memory_branches, memory_snapshots, memory_branch_observations).
8
+ *
9
+ * The default branch is "main" (id=1). All observations created via
10
+ * the standard MemoryStorage interface are automatically linked to main.
11
+ */
12
+ import { DEFAULT_VERSIONING_CONFIG } from '../types.js';
13
+ import { detectContradictions } from './contradiction.js';
14
+ // ─── Error Types ───────────────────────────────────────────────
15
+ export class SnapshotExistsError extends Error {
16
+ constructor(name) {
17
+ super(`Snapshot "${name}" already exists`);
18
+ this.name = 'SnapshotExistsError';
19
+ }
20
+ }
21
+ export class SnapshotNotFoundError extends Error {
22
+ constructor(name) {
23
+ super(`Snapshot "${name}" not found`);
24
+ this.name = 'SnapshotNotFoundError';
25
+ }
26
+ }
27
+ export class BranchExistsError extends Error {
28
+ constructor(name) {
29
+ super(`Branch "${name}" already exists`);
30
+ this.name = 'BranchExistsError';
31
+ }
32
+ }
33
+ export class BranchNotFoundError extends Error {
34
+ constructor(name) {
35
+ super(`Branch "${name}" not found`);
36
+ this.name = 'BranchNotFoundError';
37
+ }
38
+ }
39
+ export class ProtectedBranchError extends Error {
40
+ constructor(name) {
41
+ super(`Branch "${name}" is protected and cannot be deleted`);
42
+ this.name = 'ProtectedBranchError';
43
+ }
44
+ }
45
+ // ─── Main Class ────────────────────────────────────────────────
46
+ export class MemoryVersioning {
47
+ db;
48
+ config;
49
+ constructor(storage, config = DEFAULT_VERSIONING_CONFIG) {
50
+ this.db = storage.getDatabase();
51
+ this.config = config;
52
+ }
53
+ // ── Branch Operations ──────────────────────────────────────────
54
+ /**
55
+ * List all branches.
56
+ */
57
+ listBranches() {
58
+ const stmt = this.db.prepare('SELECT id, name, parent_id, created_at FROM memory_branches ORDER BY id');
59
+ stmt.bind([]);
60
+ const branches = [];
61
+ while (stmt.step()) {
62
+ const row = stmt.getAsObject();
63
+ branches.push({
64
+ id: row.id,
65
+ name: row.name,
66
+ parentId: row.parent_id ?? null,
67
+ createdAt: row.created_at,
68
+ });
69
+ }
70
+ stmt.free();
71
+ return branches;
72
+ }
73
+ /**
74
+ * Get a branch by name. Returns null if not found.
75
+ */
76
+ getBranch(name) {
77
+ const stmt = this.db.prepare('SELECT id, name, parent_id, created_at FROM memory_branches WHERE name = ?');
78
+ stmt.bind([name]);
79
+ if (!stmt.step()) {
80
+ stmt.free();
81
+ return null;
82
+ }
83
+ const row = stmt.getAsObject();
84
+ stmt.free();
85
+ return {
86
+ id: row.id,
87
+ name: row.name,
88
+ parentId: row.parent_id ?? null,
89
+ createdAt: row.created_at,
90
+ };
91
+ }
92
+ /**
93
+ * Create a new branch from an existing parent branch.
94
+ * Copies all observation links from the parent to the new branch.
95
+ *
96
+ * @param name - Unique branch name
97
+ * @param parentName - Parent branch to fork from (default: "main")
98
+ * @throws BranchExistsError if name is taken
99
+ * @throws BranchNotFoundError if parent doesn't exist
100
+ */
101
+ createBranch(name, parentName = 'main') {
102
+ // Check if name is taken
103
+ const existing = this.getBranch(name);
104
+ if (existing)
105
+ throw new BranchExistsError(name);
106
+ // Find parent
107
+ const parent = this.getBranch(parentName);
108
+ if (!parent)
109
+ throw new BranchNotFoundError(parentName);
110
+ // Create branch
111
+ const result = this.db.exec(`INSERT INTO memory_branches (name, parent_id) VALUES (?, ?)
112
+ RETURNING id, name, parent_id, created_at`, [name, parent.id]);
113
+ const row = result[0]?.values[0];
114
+ if (!row)
115
+ throw new Error('Failed to create branch');
116
+ const branchId = row[0];
117
+ // Copy observation links from parent
118
+ this.db.run(`INSERT OR IGNORE INTO memory_branch_observations (branch_id, observation_id)
119
+ SELECT ?, observation_id FROM memory_branch_observations WHERE branch_id = ?`, [branchId, parent.id]);
120
+ return {
121
+ id: branchId,
122
+ name: row[1],
123
+ parentId: row[2] ?? null,
124
+ createdAt: row[3],
125
+ };
126
+ }
127
+ /**
128
+ * Delete a branch and its exclusive observations.
129
+ * Observations shared with other branches are preserved.
130
+ *
131
+ * @throws ProtectedBranchError if trying to delete "main"
132
+ * @throws BranchNotFoundError if branch doesn't exist
133
+ */
134
+ deleteBranch(name) {
135
+ if (name === 'main')
136
+ throw new ProtectedBranchError(name);
137
+ const branch = this.getBranch(name);
138
+ if (!branch)
139
+ throw new BranchNotFoundError(name);
140
+ // Find observations exclusive to this branch (not linked to any other branch)
141
+ const exclusiveResult = this.db.exec(`SELECT bo.observation_id FROM memory_branch_observations bo
142
+ WHERE bo.branch_id = ?
143
+ AND NOT EXISTS (
144
+ SELECT 1 FROM memory_branch_observations bo2
145
+ WHERE bo2.observation_id = bo.observation_id
146
+ AND bo2.branch_id != ?
147
+ )`, [branch.id, branch.id]);
148
+ // Delete exclusive observations
149
+ if (exclusiveResult.length > 0 && exclusiveResult[0]?.values.length > 0) {
150
+ const ids = exclusiveResult[0].values.map((r) => r[0]);
151
+ const placeholders = ids.map(() => '?').join(',');
152
+ this.db.run(`DELETE FROM memory_observations WHERE id IN (${placeholders})`, ids);
153
+ }
154
+ // Delete branch (CASCADE removes branch_observations links and snapshots)
155
+ this.db.run('DELETE FROM memory_branches WHERE id = ?', [branch.id]);
156
+ }
157
+ /**
158
+ * Get observation IDs linked to a branch.
159
+ */
160
+ getBranchObservationIds(branchName) {
161
+ const branch = this.getBranch(branchName);
162
+ if (!branch)
163
+ throw new BranchNotFoundError(branchName);
164
+ const stmt = this.db.prepare('SELECT observation_id FROM memory_branch_observations WHERE branch_id = ? ORDER BY observation_id');
165
+ stmt.bind([branch.id]);
166
+ const ids = [];
167
+ while (stmt.step()) {
168
+ const row = stmt.getAsObject();
169
+ ids.push(row.observation_id);
170
+ }
171
+ stmt.free();
172
+ return ids;
173
+ }
174
+ /**
175
+ * Get full observation rows for a branch.
176
+ */
177
+ getBranchObservations(branchName) {
178
+ const branch = this.getBranch(branchName);
179
+ if (!branch)
180
+ throw new BranchNotFoundError(branchName);
181
+ const stmt = this.db.prepare(`SELECT o.id, o.type, o.title, o.content, o.file_paths, o.severity
182
+ FROM memory_observations o
183
+ JOIN memory_branch_observations bo ON bo.observation_id = o.id
184
+ WHERE bo.branch_id = ?
185
+ ORDER BY o.id`);
186
+ stmt.bind([branch.id]);
187
+ const rows = [];
188
+ while (stmt.step()) {
189
+ const row = stmt.getAsObject();
190
+ rows.push({
191
+ id: row.id,
192
+ type: row.type,
193
+ title: row.title,
194
+ content: row.content,
195
+ filePaths: row.file_paths ? JSON.parse(row.file_paths) : null,
196
+ severity: row.severity ?? null,
197
+ });
198
+ }
199
+ stmt.free();
200
+ return rows;
201
+ }
202
+ // ── Snapshot Operations ────────────────────────────────────────
203
+ /**
204
+ * Create a named snapshot of a branch's current state.
205
+ *
206
+ * @throws SnapshotExistsError if name is taken
207
+ * @throws BranchNotFoundError if branch doesn't exist
208
+ */
209
+ createSnapshot(name, branchName = 'main') {
210
+ // Check if name is taken
211
+ const existingStmt = this.db.prepare('SELECT id FROM memory_snapshots WHERE name = ?');
212
+ existingStmt.bind([name]);
213
+ const exists = existingStmt.step();
214
+ existingStmt.free();
215
+ if (exists)
216
+ throw new SnapshotExistsError(name);
217
+ const branch = this.getBranch(branchName);
218
+ if (!branch)
219
+ throw new BranchNotFoundError(branchName);
220
+ // Get current observation IDs
221
+ const observationIds = this.getBranchObservationIds(branchName);
222
+ const idsJson = JSON.stringify(observationIds);
223
+ const result = this.db.exec(`INSERT INTO memory_snapshots (name, branch_id, observation_ids)
224
+ VALUES (?, ?, ?)
225
+ RETURNING id, name, branch_id, observation_ids, created_at`, [name, branch.id, idsJson]);
226
+ const row = result[0]?.values[0];
227
+ if (!row)
228
+ throw new Error('Failed to create snapshot');
229
+ return {
230
+ id: row[0],
231
+ name: row[1],
232
+ branchId: row[2],
233
+ observationIds: JSON.parse(row[3]),
234
+ createdAt: row[4],
235
+ };
236
+ }
237
+ /**
238
+ * List all snapshots, optionally filtered by branch.
239
+ */
240
+ listSnapshots(branchName) {
241
+ let sql = 'SELECT id, name, branch_id, observation_ids, created_at FROM memory_snapshots';
242
+ const params = [];
243
+ if (branchName) {
244
+ const branch = this.getBranch(branchName);
245
+ if (!branch)
246
+ throw new BranchNotFoundError(branchName);
247
+ sql += ' WHERE branch_id = ?';
248
+ params.push(branch.id);
249
+ }
250
+ sql += ' ORDER BY created_at DESC';
251
+ const stmt = this.db.prepare(sql);
252
+ stmt.bind(params);
253
+ const snapshots = [];
254
+ while (stmt.step()) {
255
+ const row = stmt.getAsObject();
256
+ snapshots.push({
257
+ id: row.id,
258
+ name: row.name,
259
+ branchId: row.branch_id,
260
+ observationIds: JSON.parse(row.observation_ids),
261
+ createdAt: row.created_at,
262
+ });
263
+ }
264
+ stmt.free();
265
+ return snapshots;
266
+ }
267
+ // ── Merge ──────────────────────────────────────────────────────
268
+ /**
269
+ * Merge observations from source branch into target branch.
270
+ * Detects contradictions but does NOT auto-resolve them — both
271
+ * observations end up on the target branch.
272
+ *
273
+ * @throws BranchNotFoundError if either branch doesn't exist
274
+ */
275
+ mergeBranch(sourceName, targetName) {
276
+ const source = this.getBranch(sourceName);
277
+ if (!source)
278
+ throw new BranchNotFoundError(sourceName);
279
+ const target = this.getBranch(targetName);
280
+ if (!target)
281
+ throw new BranchNotFoundError(targetName);
282
+ // Find observation IDs exclusive to source (not already on target)
283
+ const exclusiveResult = this.db.exec(`SELECT bo.observation_id FROM memory_branch_observations bo
284
+ WHERE bo.branch_id = ?
285
+ AND NOT EXISTS (
286
+ SELECT 1 FROM memory_branch_observations bo2
287
+ WHERE bo2.observation_id = bo.observation_id
288
+ AND bo2.branch_id = ?
289
+ )`, [source.id, target.id]);
290
+ const mergedIds = [];
291
+ if (exclusiveResult.length > 0 && exclusiveResult[0]?.values.length > 0) {
292
+ for (const row of exclusiveResult[0].values) {
293
+ mergedIds.push(row[0]);
294
+ }
295
+ }
296
+ // Detect contradictions before merging
297
+ const sourceObs = this.getBranchObservations(sourceName);
298
+ const targetObs = this.getBranchObservations(targetName);
299
+ // Only check source-exclusive obs against target
300
+ const sourceExclusiveObs = sourceObs.filter((o) => mergedIds.includes(o.id));
301
+ const contradictions = detectContradictions(sourceExclusiveObs, targetObs, this.config);
302
+ // Link source-exclusive observations to target branch
303
+ for (const id of mergedIds) {
304
+ this.db.run('INSERT OR IGNORE INTO memory_branch_observations (branch_id, observation_id) VALUES (?, ?)', [target.id, id]);
305
+ }
306
+ return { merged: mergedIds, contradictions };
307
+ }
308
+ // ── Rollback ───────────────────────────────────────────────────
309
+ /**
310
+ * Rollback a branch to a named snapshot.
311
+ * Removes observations added after the snapshot was taken.
312
+ *
313
+ * @throws SnapshotNotFoundError if snapshot doesn't exist
314
+ */
315
+ rollback(snapshotName) {
316
+ const stmt = this.db.prepare('SELECT id, name, branch_id, observation_ids, created_at FROM memory_snapshots WHERE name = ?');
317
+ stmt.bind([snapshotName]);
318
+ if (!stmt.step()) {
319
+ stmt.free();
320
+ throw new SnapshotNotFoundError(snapshotName);
321
+ }
322
+ const row = stmt.getAsObject();
323
+ stmt.free();
324
+ const branchId = row.branch_id;
325
+ const snapshotIds = JSON.parse(row.observation_ids);
326
+ // Find observation IDs on this branch that are NOT in the snapshot
327
+ const currentIds = this.db.exec('SELECT observation_id FROM memory_branch_observations WHERE branch_id = ?', [branchId]);
328
+ const currentIdSet = new Set();
329
+ if (currentIds.length > 0 && currentIds[0]?.values.length > 0) {
330
+ for (const r of currentIds[0].values) {
331
+ currentIdSet.add(r[0]);
332
+ }
333
+ }
334
+ const snapshotIdSet = new Set(snapshotIds);
335
+ const idsToRemove = [...currentIdSet].filter((id) => !snapshotIdSet.has(id));
336
+ if (idsToRemove.length === 0)
337
+ return;
338
+ // Remove branch links for post-snapshot observations
339
+ const placeholders = idsToRemove.map(() => '?').join(',');
340
+ this.db.run(`DELETE FROM memory_branch_observations
341
+ WHERE branch_id = ? AND observation_id IN (${placeholders})`, [branchId, ...idsToRemove]);
342
+ // Delete observations that are no longer linked to ANY branch
343
+ this.db.run(`DELETE FROM memory_observations
344
+ WHERE id IN (${placeholders})
345
+ AND NOT EXISTS (
346
+ SELECT 1 FROM memory_branch_observations WHERE observation_id = memory_observations.id
347
+ )`, idsToRemove);
348
+ }
349
+ }
350
+ //# sourceMappingURL=versioning.js.map