@varveai/adit-core 0.2.1

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 (90) hide show
  1. package/LICENSE +21 -0
  2. package/dist/config/index.d.ts +29 -0
  3. package/dist/config/index.d.ts.map +1 -0
  4. package/dist/config/index.js +107 -0
  5. package/dist/config/index.js.map +1 -0
  6. package/dist/db/connection.d.ts +9 -0
  7. package/dist/db/connection.d.ts.map +1 -0
  8. package/dist/db/connection.js +48 -0
  9. package/dist/db/connection.js.map +1 -0
  10. package/dist/db/diffs.d.ts +22 -0
  11. package/dist/db/diffs.d.ts.map +1 -0
  12. package/dist/db/diffs.js +37 -0
  13. package/dist/db/diffs.js.map +1 -0
  14. package/dist/db/env-snapshots.d.ts +29 -0
  15. package/dist/db/env-snapshots.d.ts.map +1 -0
  16. package/dist/db/env-snapshots.js +57 -0
  17. package/dist/db/env-snapshots.js.map +1 -0
  18. package/dist/db/events.d.ts +91 -0
  19. package/dist/db/events.d.ts.map +1 -0
  20. package/dist/db/events.js +260 -0
  21. package/dist/db/events.js.map +1 -0
  22. package/dist/db/index.d.ts +10 -0
  23. package/dist/db/index.d.ts.map +1 -0
  24. package/dist/db/index.js +10 -0
  25. package/dist/db/index.js.map +1 -0
  26. package/dist/db/migrations.d.ts +13 -0
  27. package/dist/db/migrations.d.ts.map +1 -0
  28. package/dist/db/migrations.js +237 -0
  29. package/dist/db/migrations.js.map +1 -0
  30. package/dist/db/plans.d.ts +21 -0
  31. package/dist/db/plans.d.ts.map +1 -0
  32. package/dist/db/plans.js +52 -0
  33. package/dist/db/plans.js.map +1 -0
  34. package/dist/db/sessions.d.ts +23 -0
  35. package/dist/db/sessions.d.ts.map +1 -0
  36. package/dist/db/sessions.js +57 -0
  37. package/dist/db/sessions.js.map +1 -0
  38. package/dist/db/sync-state.d.ts +21 -0
  39. package/dist/db/sync-state.d.ts.map +1 -0
  40. package/dist/db/sync-state.js +36 -0
  41. package/dist/db/sync-state.js.map +1 -0
  42. package/dist/db/transcript-uploads.d.ts +57 -0
  43. package/dist/db/transcript-uploads.d.ts.map +1 -0
  44. package/dist/db/transcript-uploads.js +132 -0
  45. package/dist/db/transcript-uploads.js.map +1 -0
  46. package/dist/index.d.ts +17 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +17 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/perf/perf-log.d.ts +105 -0
  51. package/dist/perf/perf-log.d.ts.map +1 -0
  52. package/dist/perf/perf-log.js +280 -0
  53. package/dist/perf/perf-log.js.map +1 -0
  54. package/dist/security/content-redaction.d.ts +105 -0
  55. package/dist/security/content-redaction.d.ts.map +1 -0
  56. package/dist/security/content-redaction.js +365 -0
  57. package/dist/security/content-redaction.js.map +1 -0
  58. package/dist/sync/index.d.ts +3 -0
  59. package/dist/sync/index.d.ts.map +1 -0
  60. package/dist/sync/index.js +3 -0
  61. package/dist/sync/index.js.map +1 -0
  62. package/dist/sync/ulid.d.ts +15 -0
  63. package/dist/sync/ulid.d.ts.map +1 -0
  64. package/dist/sync/ulid.js +34 -0
  65. package/dist/sync/ulid.js.map +1 -0
  66. package/dist/sync/vclock.d.ts +33 -0
  67. package/dist/sync/vclock.d.ts.map +1 -0
  68. package/dist/sync/vclock.js +69 -0
  69. package/dist/sync/vclock.js.map +1 -0
  70. package/dist/types/environment.d.ts +53 -0
  71. package/dist/types/environment.d.ts.map +1 -0
  72. package/dist/types/environment.js +8 -0
  73. package/dist/types/environment.js.map +1 -0
  74. package/dist/types/events.d.ts +88 -0
  75. package/dist/types/events.d.ts.map +1 -0
  76. package/dist/types/events.js +40 -0
  77. package/dist/types/events.js.map +1 -0
  78. package/dist/types/index.d.ts +6 -0
  79. package/dist/types/index.d.ts.map +1 -0
  80. package/dist/types/index.js +2 -0
  81. package/dist/types/index.js.map +1 -0
  82. package/dist/types/plan.d.ts +30 -0
  83. package/dist/types/plan.d.ts.map +1 -0
  84. package/dist/types/plan.js +8 -0
  85. package/dist/types/plan.js.map +1 -0
  86. package/dist/types/session.d.ts +44 -0
  87. package/dist/types/session.d.ts.map +1 -0
  88. package/dist/types/session.js +8 -0
  89. package/dist/types/session.js.map +1 -0
  90. package/package.json +29 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 vkenliu
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,29 @@
1
+ /**
2
+ * ADIT configuration management.
3
+ *
4
+ * Loads config from environment variables with sensible defaults.
5
+ * The data directory (.adit/) lives inside the project root by default.
6
+ */
7
+ export interface AditConfig {
8
+ /** Project root directory (where .git lives) */
9
+ projectRoot: string;
10
+ /** Data directory for ADIT state */
11
+ dataDir: string;
12
+ /** SQLite database path */
13
+ dbPath: string;
14
+ /** Unique client identifier for this machine */
15
+ clientId: string;
16
+ /** Project identifier (hash of remote + root) */
17
+ projectId: string;
18
+ /** Git ref prefix for checkpoints */
19
+ refPrefix: string;
20
+ /** Whether to capture environment snapshots */
21
+ captureEnv: boolean;
22
+ }
23
+ /** Find the git root by walking up from cwd */
24
+ export declare function findGitRoot(startDir?: string): string | null;
25
+ /** Load configuration from settings.json + environment overrides */
26
+ export declare function loadConfig(cwd?: string): AditConfig;
27
+ /** Redact sensitive keys from an object (shallow) */
28
+ export declare function redactSensitiveKeys(obj: Record<string, unknown>, keys: string[]): Record<string, unknown>;
29
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,MAAM,WAAW,UAAU;IACzB,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,2BAA2B;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,UAAU,EAAE,OAAO,CAAC;CACrB;AAoCD,+CAA+C;AAC/C,wBAAgB,WAAW,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAW5D;AAaD,oEAAoE;AACpE,wBAAgB,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,UAAU,CAgCnD;AAED,qDAAqD;AACrD,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,IAAI,EAAE,MAAM,EAAE,GACb,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiBzB"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * ADIT configuration management.
3
+ *
4
+ * Loads config from environment variables with sensible defaults.
5
+ * The data directory (.adit/) lives inside the project root by default.
6
+ */
7
+ import { resolve, join } from "node:path";
8
+ import { homedir } from "node:os";
9
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
10
+ import { createHash } from "node:crypto";
11
+ /** Get or create a persistent client ID */
12
+ function getClientId() {
13
+ const configDir = join(homedir(), ".adit");
14
+ const idFile = join(configDir, "client-id");
15
+ if (existsSync(idFile)) {
16
+ return readFileSync(idFile, "utf-8").trim();
17
+ }
18
+ // Generate deterministic ID from hostname + homedir
19
+ const id = createHash("sha256")
20
+ .update(`${homedir()}-${process.pid}-${Date.now()}`)
21
+ .digest("hex")
22
+ .substring(0, 16);
23
+ // Persist so every process on this machine gets the same client ID
24
+ try {
25
+ mkdirSync(configDir, { recursive: true });
26
+ writeFileSync(idFile, id, "utf-8");
27
+ }
28
+ catch {
29
+ // Best-effort — if we can't write, the ID still works for this process
30
+ }
31
+ return id;
32
+ }
33
+ /** Compute project ID from git remote and project root */
34
+ function computeProjectId(projectRoot, remoteUrl) {
35
+ const input = remoteUrl
36
+ ? `${remoteUrl}:${projectRoot}`
37
+ : projectRoot;
38
+ return createHash("sha256").update(input).digest("hex").substring(0, 16);
39
+ }
40
+ /** Find the git root by walking up from cwd */
41
+ export function findGitRoot(startDir) {
42
+ let dir = resolve(startDir ?? process.cwd());
43
+ while (dir !== "/") {
44
+ if (existsSync(join(dir, ".git"))) {
45
+ return dir;
46
+ }
47
+ const parent = resolve(dir, "..");
48
+ if (parent === dir)
49
+ break;
50
+ dir = parent;
51
+ }
52
+ return null;
53
+ }
54
+ /** Load file-based settings from settings.json in project root */
55
+ function loadSettingsFile(projectRoot) {
56
+ const settingsPath = join(projectRoot, "settings.json");
57
+ if (!existsSync(settingsPath))
58
+ return {};
59
+ try {
60
+ return JSON.parse(readFileSync(settingsPath, "utf-8"));
61
+ }
62
+ catch {
63
+ return {};
64
+ }
65
+ }
66
+ /** Load configuration from settings.json + environment overrides */
67
+ export function loadConfig(cwd) {
68
+ const projectRoot = process.env.ADIT_PROJECT_ROOT ??
69
+ findGitRoot(cwd) ??
70
+ resolve(cwd ?? process.cwd());
71
+ const dataDir = process.env.ADIT_DATA_DIR ?? join(projectRoot, ".adit");
72
+ const dbPath = process.env.ADIT_DB_PATH ?? join(dataDir, "adit.sqlite");
73
+ const clientId = process.env.ADIT_CLIENT_ID ?? getClientId();
74
+ const remoteUrl = process.env.ADIT_REMOTE_URL;
75
+ const projectId = computeProjectId(projectRoot, remoteUrl);
76
+ // Load file-based settings (lowest priority — env vars override)
77
+ const fileSettings = loadSettingsFile(projectRoot);
78
+ return {
79
+ projectRoot,
80
+ dataDir,
81
+ dbPath,
82
+ clientId,
83
+ projectId,
84
+ refPrefix: "refs/adit/checkpoints",
85
+ captureEnv: process.env.ADIT_CAPTURE_ENV !== undefined
86
+ ? process.env.ADIT_CAPTURE_ENV !== "false"
87
+ : fileSettings.captureEnv ?? true,
88
+ };
89
+ }
90
+ /** Redact sensitive keys from an object (shallow) */
91
+ export function redactSensitiveKeys(obj, keys) {
92
+ const result = {};
93
+ const lowerKeys = new Set(keys.map((k) => k.toLowerCase()));
94
+ for (const [key, value] of Object.entries(obj)) {
95
+ if (lowerKeys.has(key.toLowerCase())) {
96
+ result[key] = "[REDACTED]";
97
+ }
98
+ else if (typeof value === "object" && value !== null && !Array.isArray(value)) {
99
+ result[key] = redactSensitiveKeys(value, keys);
100
+ }
101
+ else {
102
+ result[key] = value;
103
+ }
104
+ }
105
+ return result;
106
+ }
107
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * SQLite database connection and migration runner.
3
+ */
4
+ import Database from "better-sqlite3";
5
+ /** Open (or create) the SQLite database and run pending migrations */
6
+ export declare function openDatabase(dbPath: string): Database.Database;
7
+ /** Close the database connection gracefully */
8
+ export declare function closeDatabase(db: Database.Database): void;
9
+ //# sourceMappingURL=connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAKtC,sEAAsE;AACtE,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAa9D;AAmCD,+CAA+C;AAC/C,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAEzD"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * SQLite database connection and migration runner.
3
+ */
4
+ import Database from "better-sqlite3";
5
+ import { mkdirSync } from "node:fs";
6
+ import { dirname } from "node:path";
7
+ import { migrations } from "./migrations.js";
8
+ /** Open (or create) the SQLite database and run pending migrations */
9
+ export function openDatabase(dbPath) {
10
+ mkdirSync(dirname(dbPath), { recursive: true });
11
+ const db = new Database(dbPath);
12
+ // Performance pragmas
13
+ db.pragma("journal_mode = WAL");
14
+ db.pragma("synchronous = NORMAL");
15
+ db.pragma("foreign_keys = ON");
16
+ db.pragma("busy_timeout = 3000");
17
+ runMigrations(db);
18
+ return db;
19
+ }
20
+ /** Run all pending migrations inside a transaction */
21
+ function runMigrations(db) {
22
+ db.exec(`
23
+ CREATE TABLE IF NOT EXISTS _migrations (
24
+ id INTEGER PRIMARY KEY,
25
+ name TEXT NOT NULL,
26
+ applied_at TEXT NOT NULL DEFAULT (datetime('now'))
27
+ );
28
+ `);
29
+ const applied = new Set(db
30
+ .prepare("SELECT id FROM _migrations")
31
+ .all()
32
+ .map((row) => row.id));
33
+ const pending = migrations.filter((m) => !applied.has(m.id));
34
+ if (pending.length === 0)
35
+ return;
36
+ const applyAll = db.transaction(() => {
37
+ for (const migration of pending) {
38
+ db.exec(migration.sql);
39
+ db.prepare("INSERT INTO _migrations (id, name) VALUES (?, ?)").run(migration.id, migration.name);
40
+ }
41
+ });
42
+ applyAll();
43
+ }
44
+ /** Close the database connection gracefully */
45
+ export function closeDatabase(db) {
46
+ db.close();
47
+ }
48
+ //# sourceMappingURL=connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,sEAAsE;AACtE,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEhD,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEhC,sBAAsB;IACtB,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAClC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAC/B,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAEjC,aAAa,CAAC,EAAE,CAAC,CAAC;IAClB,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,sDAAsD;AACtD,SAAS,aAAa,CAAC,EAAqB;IAC1C,EAAE,CAAC,IAAI,CAAC;;;;;;GAMP,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,IAAI,GAAG,CACrB,EAAE;SACC,OAAO,CAAC,4BAA4B,CAAC;SACrC,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAE,GAAsB,CAAC,EAAE,CAAC,CAC5C,CAAC;IAEF,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEjC,MAAM,QAAQ,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;QACnC,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE,CAAC;YAChC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACvB,EAAE,CAAC,OAAO,CAAC,kDAAkD,CAAC,CAAC,GAAG,CAChE,SAAS,CAAC,EAAE,EACZ,SAAS,CAAC,IAAI,CACf,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,QAAQ,EAAE,CAAC;AACb,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,aAAa,CAAC,EAAqB;IACjD,EAAE,CAAC,KAAK,EAAE,CAAC;AACb,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Diff storage operations.
3
+ *
4
+ * Large diffs are stored separately from events for efficiency.
5
+ */
6
+ import type Database from "better-sqlite3";
7
+ export interface DiffRecord {
8
+ id: string;
9
+ eventId: string;
10
+ diffText: string;
11
+ fileFilter: string | null;
12
+ createdAt: string;
13
+ }
14
+ export declare function insertDiff(db: Database.Database, input: {
15
+ id: string;
16
+ eventId: string;
17
+ diffText: string;
18
+ fileFilter?: string;
19
+ }): void;
20
+ export declare function getDiffByEventId(db: Database.Database, eventId: string): DiffRecord | null;
21
+ export declare function getDiffText(db: Database.Database, eventId: string, maxLines?: number, offsetLines?: number): string | null;
22
+ //# sourceMappingURL=diffs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diffs.d.ts","sourceRoot":"","sources":["../../src/db/diffs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,UAAU,CACxB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5E,IAAI,CAKN;AAED,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,OAAO,EAAE,MAAM,GACd,UAAU,GAAG,IAAI,CAanB;AAED,wBAAgB,WAAW,CACzB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,GAAG,IAAI,CAUf"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Diff storage operations.
3
+ *
4
+ * Large diffs are stored separately from events for efficiency.
5
+ */
6
+ export function insertDiff(db, input) {
7
+ db.prepare(`
8
+ INSERT INTO diffs (id, event_id, diff_text, file_filter, created_at)
9
+ VALUES (?, ?, ?, ?, datetime('now'))
10
+ `).run(input.id, input.eventId, input.diffText, input.fileFilter ?? null);
11
+ }
12
+ export function getDiffByEventId(db, eventId) {
13
+ const row = db
14
+ .prepare("SELECT * FROM diffs WHERE event_id = ? LIMIT 1")
15
+ .get(eventId);
16
+ if (!row)
17
+ return null;
18
+ return {
19
+ id: row.id,
20
+ eventId: row.event_id,
21
+ diffText: row.diff_text,
22
+ fileFilter: row.file_filter ?? null,
23
+ createdAt: row.created_at,
24
+ };
25
+ }
26
+ export function getDiffText(db, eventId, maxLines, offsetLines) {
27
+ const record = getDiffByEventId(db, eventId);
28
+ if (!record)
29
+ return null;
30
+ if (!maxLines && !offsetLines)
31
+ return record.diffText;
32
+ const lines = record.diffText.split("\n");
33
+ const start = offsetLines ?? 0;
34
+ const end = maxLines ? start + maxLines : lines.length;
35
+ return lines.slice(start, end).join("\n");
36
+ }
37
+ //# sourceMappingURL=diffs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diffs.js","sourceRoot":"","sources":["../../src/db/diffs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,MAAM,UAAU,UAAU,CACxB,EAAqB,EACrB,KAA6E;IAE7E,EAAE,CAAC,OAAO,CAAC;;;GAGV,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,EAAqB,EACrB,OAAe;IAEf,MAAM,GAAG,GAAG,EAAE;SACX,OAAO,CAAC,gDAAgD,CAAC;SACzD,GAAG,CAAC,OAAO,CAAwC,CAAC;IACvD,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAEtB,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAY;QACpB,OAAO,EAAE,GAAG,CAAC,QAAkB;QAC/B,QAAQ,EAAE,GAAG,CAAC,SAAmB;QACjC,UAAU,EAAG,GAAG,CAAC,WAAsB,IAAI,IAAI;QAC/C,SAAS,EAAE,GAAG,CAAC,UAAoB;KACpC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,EAAqB,EACrB,OAAe,EACf,QAAiB,EACjB,WAAoB;IAEpB,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,IAAI,CAAC,QAAQ,IAAI,CAAC,WAAW;QAAE,OAAO,MAAM,CAAC,QAAQ,CAAC;IAEtD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,WAAW,IAAI,CAAC,CAAC;IAC/B,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;IACvD,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Environment snapshot CRUD operations.
3
+ */
4
+ import type Database from "better-sqlite3";
5
+ import type { EnvSnapshot } from "../types/index.js";
6
+ export interface CreateEnvSnapshotInput {
7
+ id: string;
8
+ sessionId: string;
9
+ gitBranch: string;
10
+ gitHeadSha: string;
11
+ modifiedFiles?: string | null;
12
+ depLockHash?: string | null;
13
+ depLockPath?: string | null;
14
+ envVarsJson?: string | null;
15
+ nodeVersion?: string | null;
16
+ pythonVersion?: string | null;
17
+ osInfo?: string | null;
18
+ containerInfo?: string | null;
19
+ runtimeVersionsJson?: string | null;
20
+ shellInfo?: string | null;
21
+ systemResourcesJson?: string | null;
22
+ packageManagerJson?: string | null;
23
+ vclockJson: string;
24
+ }
25
+ export declare function insertEnvSnapshot(db: Database.Database, input: CreateEnvSnapshotInput): void;
26
+ export declare function getEnvSnapshotById(db: Database.Database, id: string): EnvSnapshot | null;
27
+ export declare function getLatestEnvSnapshot(db: Database.Database, sessionId: string): EnvSnapshot | null;
28
+ export declare function listEnvSnapshots(db: Database.Database, sessionId: string, limit?: number): EnvSnapshot[];
29
+ //# sourceMappingURL=env-snapshots.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-snapshots.d.ts","sourceRoot":"","sources":["../../src/db/env-snapshots.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,sBAAsB,GAC5B,IAAI,CA6BN;AAED,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,EAAE,EAAE,MAAM,GACT,WAAW,GAAG,IAAI,CAKpB;AAED,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,SAAS,EAAE,MAAM,GAChB,WAAW,GAAG,IAAI,CAOpB;AAED,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,SAAS,EAAE,MAAM,EACjB,KAAK,SAAK,GACT,WAAW,EAAE,CAOf"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Environment snapshot CRUD operations.
3
+ */
4
+ export function insertEnvSnapshot(db, input) {
5
+ db.prepare(`
6
+ INSERT INTO env_snapshots (
7
+ id, session_id, git_branch, git_head_sha,
8
+ modified_files, dep_lock_hash, dep_lock_path,
9
+ env_vars_json, node_version, python_version, os_info,
10
+ container_info, runtime_versions_json, shell_info,
11
+ system_resources_json, package_manager_json,
12
+ captured_at, vclock_json
13
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, datetime('now'), ?)
14
+ `).run(input.id, input.sessionId, input.gitBranch, input.gitHeadSha, input.modifiedFiles ?? null, input.depLockHash ?? null, input.depLockPath ?? null, input.envVarsJson ?? null, input.nodeVersion ?? null, input.pythonVersion ?? null, input.osInfo ?? null, input.containerInfo ?? null, input.runtimeVersionsJson ?? null, input.shellInfo ?? null, input.systemResourcesJson ?? null, input.packageManagerJson ?? null, input.vclockJson);
15
+ }
16
+ export function getEnvSnapshotById(db, id) {
17
+ const row = db
18
+ .prepare("SELECT * FROM env_snapshots WHERE id = ?")
19
+ .get(id);
20
+ return row ? rowToEnvSnapshot(row) : null;
21
+ }
22
+ export function getLatestEnvSnapshot(db, sessionId) {
23
+ const row = db
24
+ .prepare("SELECT * FROM env_snapshots WHERE session_id = ? AND deleted_at IS NULL ORDER BY captured_at DESC, id DESC LIMIT 1")
25
+ .get(sessionId);
26
+ return row ? rowToEnvSnapshot(row) : null;
27
+ }
28
+ export function listEnvSnapshots(db, sessionId, limit = 20) {
29
+ const rows = db
30
+ .prepare("SELECT * FROM env_snapshots WHERE session_id = ? AND deleted_at IS NULL ORDER BY captured_at DESC, id DESC LIMIT ?")
31
+ .all(sessionId, limit);
32
+ return rows.map(rowToEnvSnapshot);
33
+ }
34
+ function rowToEnvSnapshot(row) {
35
+ return {
36
+ id: row.id,
37
+ sessionId: row.session_id,
38
+ gitBranch: row.git_branch,
39
+ gitHeadSha: row.git_head_sha,
40
+ modifiedFiles: row.modified_files ?? null,
41
+ depLockHash: row.dep_lock_hash ?? null,
42
+ depLockPath: row.dep_lock_path ?? null,
43
+ envVarsJson: row.env_vars_json ?? null,
44
+ nodeVersion: row.node_version ?? null,
45
+ pythonVersion: row.python_version ?? null,
46
+ osInfo: row.os_info ?? null,
47
+ containerInfo: row.container_info ?? null,
48
+ runtimeVersionsJson: row.runtime_versions_json ?? null,
49
+ shellInfo: row.shell_info ?? null,
50
+ systemResourcesJson: row.system_resources_json ?? null,
51
+ packageManagerJson: row.package_manager_json ?? null,
52
+ capturedAt: row.captured_at,
53
+ vclockJson: row.vclock_json,
54
+ deletedAt: row.deleted_at ?? null,
55
+ };
56
+ }
57
+ //# sourceMappingURL=env-snapshots.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-snapshots.js","sourceRoot":"","sources":["../../src/db/env-snapshots.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Event CRUD operations.
3
+ *
4
+ * Events are the heart of ADIT's timeline. Every action is recorded
5
+ * as an event with full context.
6
+ */
7
+ import type Database from "better-sqlite3";
8
+ import type { AditEvent, EventType, Actor, EventStatus } from "../types/index.js";
9
+ export interface InsertEventInput {
10
+ id: string;
11
+ sessionId: string;
12
+ parentEventId?: string | null;
13
+ sequence: number;
14
+ eventType: EventType;
15
+ actor: Actor;
16
+ promptText?: string | null;
17
+ cotText?: string | null;
18
+ responseText?: string | null;
19
+ toolName?: string | null;
20
+ toolInputJson?: string | null;
21
+ toolOutputJson?: string | null;
22
+ checkpointSha?: string | null;
23
+ checkpointRef?: string | null;
24
+ diffStatJson?: string | null;
25
+ gitBranch?: string | null;
26
+ gitHeadSha?: string | null;
27
+ envSnapshotId?: string | null;
28
+ startedAt: string;
29
+ endedAt?: string | null;
30
+ status?: EventStatus;
31
+ errorJson?: string | null;
32
+ labelsJson?: string | null;
33
+ planTaskId?: string | null;
34
+ clientId?: string | null;
35
+ vclockJson: string;
36
+ }
37
+ export declare function insertEvent(db: Database.Database, input: InsertEventInput): void;
38
+ /**
39
+ * Insert an event with an atomically-allocated sequence number.
40
+ *
41
+ * Prefer this over the separate allocateSequence + insertEvent pattern
42
+ * to avoid duplicate sequence numbers under concurrent hook processes.
43
+ */
44
+ export declare function insertEventAutoSeq(db: Database.Database, input: Omit<InsertEventInput, "sequence">): void;
45
+ export declare function getEventById(db: Database.Database, id: string): AditEvent | null;
46
+ export interface EventQueryOptions {
47
+ sessionId?: string;
48
+ eventType?: EventType;
49
+ actor?: Actor;
50
+ status?: EventStatus;
51
+ hasCheckpoint?: boolean;
52
+ gitBranch?: string;
53
+ limit?: number;
54
+ afterSequence?: number;
55
+ }
56
+ export declare function queryEvents(db: Database.Database, opts: EventQueryOptions): AditEvent[];
57
+ export declare function getEventsBySession(db: Database.Database, sessionId: string, limit?: number): AditEvent[];
58
+ export declare function updateEventStatus(db: Database.Database, id: string, status: EventStatus, endedAt?: string, errorJson?: string | null): void;
59
+ export declare function updateEventCheckpoint(db: Database.Database, id: string, checkpointSha: string, checkpointRef: string, diffStatJson: string): void;
60
+ export declare function updateEventLabels(db: Database.Database, id: string, labelsJson: string, vclockJson: string): void;
61
+ export declare function allocateSequence(db: Database.Database, sessionId: string): number;
62
+ export declare function searchEvents(db: Database.Database, query: string, limit?: number): AditEvent[];
63
+ export declare function getLatestCheckpointEvent(db: Database.Database, sessionId?: string): AditEvent | null;
64
+ /**
65
+ * Find the most recent checkpoint event on a given git branch.
66
+ *
67
+ * Orders by started_at DESC to get the latest checkpoint regardless
68
+ * of session boundaries.
69
+ */
70
+ export declare function getLatestCheckpointByBranch(db: Database.Database, branch: string): AditEvent | null;
71
+ /**
72
+ * Find recent checkpoint events across all branches, excluding a specific branch.
73
+ *
74
+ * Used as a fallback when the current branch has no checkpoints — typically
75
+ * after a squash merge where the feature branch's checkpoints are recorded
76
+ * under the old branch name that no longer exists.
77
+ *
78
+ * Returns checkpoints ordered by started_at DESC so the most recent comes first.
79
+ */
80
+ export declare function getRecentCheckpointsExcludingBranch(db: Database.Database, excludeBranch: string, limit?: number): AditEvent[];
81
+ /**
82
+ * Delete all events and associated diffs for a project.
83
+ * Respects foreign key order: diffs → events.
84
+ * Returns the number of events deleted.
85
+ */
86
+ export declare function clearEvents(db: Database.Database, projectId: string): number;
87
+ /**
88
+ * Count total events for a project.
89
+ */
90
+ export declare function countEvents(db: Database.Database, projectId: string): number;
91
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/db/events.ts"],"names":[],"mappings":"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"}