ghagga-core 2.6.0 → 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 (153) 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 +82 -7
  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/providers/index.d.ts.map +1 -1
  88. package/dist/providers/index.js +7 -2
  89. package/dist/providers/index.js.map +1 -1
  90. package/dist/recursive/index.d.ts +45 -0
  91. package/dist/recursive/index.d.ts.map +1 -0
  92. package/dist/recursive/index.js +159 -0
  93. package/dist/recursive/index.js.map +1 -0
  94. package/dist/recursive/patch-extractor.d.ts +49 -0
  95. package/dist/recursive/patch-extractor.d.ts.map +1 -0
  96. package/dist/recursive/patch-extractor.js +133 -0
  97. package/dist/recursive/patch-extractor.js.map +1 -0
  98. package/dist/recursive/re-reviewer.d.ts +31 -0
  99. package/dist/recursive/re-reviewer.d.ts.map +1 -0
  100. package/dist/recursive/re-reviewer.js +66 -0
  101. package/dist/recursive/re-reviewer.js.map +1 -0
  102. package/dist/recursive/types.d.ts +62 -0
  103. package/dist/recursive/types.d.ts.map +1 -0
  104. package/dist/recursive/types.js +11 -0
  105. package/dist/recursive/types.js.map +1 -0
  106. package/dist/scope/context-builder.d.ts +37 -0
  107. package/dist/scope/context-builder.d.ts.map +1 -0
  108. package/dist/scope/context-builder.js +108 -0
  109. package/dist/scope/context-builder.js.map +1 -0
  110. package/dist/scope/diff-mapper.d.ts +29 -0
  111. package/dist/scope/diff-mapper.d.ts.map +1 -0
  112. package/dist/scope/diff-mapper.js +76 -0
  113. package/dist/scope/diff-mapper.js.map +1 -0
  114. package/dist/scope/extractor.d.ts +25 -0
  115. package/dist/scope/extractor.d.ts.map +1 -0
  116. package/dist/scope/extractor.js +264 -0
  117. package/dist/scope/extractor.js.map +1 -0
  118. package/dist/scope/index.d.ts +13 -0
  119. package/dist/scope/index.d.ts.map +1 -0
  120. package/dist/scope/index.js +16 -0
  121. package/dist/scope/index.js.map +1 -0
  122. package/dist/scope/parser.d.ts +47 -0
  123. package/dist/scope/parser.d.ts.map +1 -0
  124. package/dist/scope/parser.js +97 -0
  125. package/dist/scope/parser.js.map +1 -0
  126. package/dist/scope/queries.d.ts +23 -0
  127. package/dist/scope/queries.d.ts.map +1 -0
  128. package/dist/scope/queries.js +134 -0
  129. package/dist/scope/queries.js.map +1 -0
  130. package/dist/scope/types.d.ts +55 -0
  131. package/dist/scope/types.d.ts.map +1 -0
  132. package/dist/scope/types.js +8 -0
  133. package/dist/scope/types.js.map +1 -0
  134. package/dist/tools/execution.d.ts.map +1 -1
  135. package/dist/tools/execution.js +2 -0
  136. package/dist/tools/execution.js.map +1 -1
  137. package/dist/tools/plugins/index.d.ts +1 -0
  138. package/dist/tools/plugins/index.d.ts.map +1 -1
  139. package/dist/tools/plugins/index.js +6 -5
  140. package/dist/tools/plugins/index.js.map +1 -1
  141. package/dist/tools/plugins/sonarqube.d.ts +54 -0
  142. package/dist/tools/plugins/sonarqube.d.ts.map +1 -0
  143. package/dist/tools/plugins/sonarqube.js +145 -0
  144. package/dist/tools/plugins/sonarqube.js.map +1 -0
  145. package/dist/tools/plugins/trivy.js +1 -1
  146. package/dist/tools/plugins/trivy.js.map +1 -1
  147. package/dist/tools/types.d.ts +7 -1
  148. package/dist/tools/types.d.ts.map +1 -1
  149. package/dist/types.d.ts +80 -1
  150. package/dist/types.d.ts.map +1 -1
  151. package/dist/types.js +9 -0
  152. package/dist/types.js.map +1 -1
  153. package/package.json +3 -1
@@ -8,7 +8,13 @@
8
8
  import { createHash } from 'node:crypto';
9
9
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
10
10
  import { dirname } from 'node:path';
11
- import initSqlJs from 'fts5-sql-bundle';
11
+ import initSqlJsModule from 'fts5-sql-bundle';
12
+ // CJS/ESM interop: default import of CJS module may be the module object, not the function
13
+ const initSqlJs = typeof initSqlJsModule === 'function'
14
+ ? initSqlJsModule
15
+ : initSqlJsModule.initSqlJs;
16
+ import { DEFAULT_DECAY_CONFIG } from '../types.js';
17
+ import { computeStrength } from './decay.js';
12
18
  const SCHEMA_SQL = `
13
19
  CREATE TABLE IF NOT EXISTS memory_sessions (
14
20
  id INTEGER PRIMARY KEY AUTOINCREMENT,
@@ -32,12 +38,14 @@ const SCHEMA_SQL = `
32
38
  content_hash TEXT,
33
39
  revision_count INTEGER NOT NULL DEFAULT 1,
34
40
  created_at TEXT NOT NULL DEFAULT (datetime('now')),
35
- 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'))
36
43
  );
37
44
 
38
45
  CREATE INDEX IF NOT EXISTS idx_obs_project ON memory_observations(project);
39
46
  CREATE INDEX IF NOT EXISTS idx_obs_topic_key ON memory_observations(topic_key);
40
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);
41
49
 
42
50
  CREATE VIRTUAL TABLE IF NOT EXISTS memory_observations_fts
43
51
  USING fts5(title, content, content='memory_observations', content_rowid='id');
@@ -58,16 +66,51 @@ const SCHEMA_SQL = `
58
66
  INSERT INTO memory_observations_fts(memory_observations_fts, rowid, title, content)
59
67
  VALUES ('delete', old.id, old.title, old.content);
60
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);
61
95
  `;
62
96
  const DEFAULT_DEDUP_WINDOW_MINUTES = 15;
63
97
  export class SqliteMemoryStorage {
64
98
  db;
65
99
  filePath;
66
100
  dedupWindowMinutes;
101
+ decayConfig;
67
102
  constructor(db, filePath, options = {}) {
68
103
  this.db = db;
69
104
  this.filePath = filePath;
70
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;
71
114
  }
72
115
  /**
73
116
  * Async factory — handles WASM initialization and file loading.
@@ -91,6 +134,15 @@ export class SqliteMemoryStorage {
91
134
  catch {
92
135
  // Column already exists — idempotent migration
93
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
+ }
94
146
  return new SqliteMemoryStorage(db, filePath, options);
95
147
  }
96
148
  async searchObservations(project, query, options = {}) {
@@ -104,8 +156,10 @@ export class SqliteMemoryStorage {
104
156
  .join(' OR ');
105
157
  if (!ftsQuery)
106
158
  return [];
159
+ // Fetch more than limit to account for decay filtering
160
+ const fetchLimit = limit * 3;
107
161
  let sql = `
108
- 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
109
163
  FROM memory_observations o
110
164
  JOIN memory_observations_fts fts ON fts.rowid = o.id
111
165
  WHERE memory_observations_fts MATCH ?
@@ -117,22 +171,39 @@ export class SqliteMemoryStorage {
117
171
  params.push(type);
118
172
  }
119
173
  sql += ' ORDER BY bm25(memory_observations_fts) LIMIT ?';
120
- params.push(limit);
174
+ params.push(fetchLimit);
121
175
  const stmt = this.db.prepare(sql);
122
176
  stmt.bind(params);
177
+ const now = new Date();
123
178
  const rows = [];
179
+ const accessedIds = [];
124
180
  while (stmt.step()) {
125
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);
126
189
  rows.push({
127
- id: row.id,
190
+ id,
128
191
  type: row.type,
129
192
  title: row.title,
130
193
  content: row.content,
131
194
  filePaths: row.file_paths ? JSON.parse(row.file_paths) : null,
132
195
  severity: row.severity ?? null,
196
+ strength,
133
197
  });
198
+ if (rows.length >= limit)
199
+ break;
134
200
  }
135
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
+ }
136
207
  return rows;
137
208
  }
138
209
  async saveObservation(data) {
@@ -183,7 +254,8 @@ export class SqliteMemoryStorage {
183
254
  SET content = ?, title = ?, content_hash = ?, file_paths = ?,
184
255
  severity = ?,
185
256
  revision_count = revision_count + 1,
186
- updated_at = datetime('now')
257
+ updated_at = datetime('now'),
258
+ last_accessed_at = datetime('now')
187
259
  WHERE id = ?
188
260
  RETURNING id, type, title, content, file_paths, severity
189
261
  `, [data.content, data.title, contentHash, filePathsJson, data.severity ?? null, existingId]);
@@ -221,8 +293,11 @@ export class SqliteMemoryStorage {
221
293
  const row = inserted[0]?.values[0];
222
294
  if (!row)
223
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]);
224
299
  return {
225
- id: row[0],
300
+ id: newId,
226
301
  type: row[1],
227
302
  title: row[2],
228
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