@ash-ai/server 0.0.2 → 0.0.4

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 (171) hide show
  1. package/dist/__tests__/attachments.test.d.ts +2 -0
  2. package/dist/__tests__/attachments.test.d.ts.map +1 -0
  3. package/dist/__tests__/attachments.test.js +57 -0
  4. package/dist/__tests__/attachments.test.js.map +1 -0
  5. package/dist/__tests__/bundle.test.d.ts +2 -0
  6. package/dist/__tests__/bundle.test.d.ts.map +1 -0
  7. package/dist/__tests__/bundle.test.js +55 -0
  8. package/dist/__tests__/bundle.test.js.map +1 -0
  9. package/dist/__tests__/coordinator.test.d.ts +2 -0
  10. package/dist/__tests__/coordinator.test.d.ts.map +1 -0
  11. package/dist/__tests__/coordinator.test.js +283 -0
  12. package/dist/__tests__/coordinator.test.js.map +1 -0
  13. package/dist/__tests__/crypto.test.d.ts +2 -0
  14. package/dist/__tests__/crypto.test.d.ts.map +1 -0
  15. package/dist/__tests__/crypto.test.js +45 -0
  16. package/dist/__tests__/crypto.test.js.map +1 -0
  17. package/dist/__tests__/file-store.test.d.ts +2 -0
  18. package/dist/__tests__/file-store.test.d.ts.map +1 -0
  19. package/dist/__tests__/file-store.test.js +105 -0
  20. package/dist/__tests__/file-store.test.js.map +1 -0
  21. package/dist/__tests__/files.test.js +3 -3
  22. package/dist/__tests__/files.test.js.map +1 -1
  23. package/dist/__tests__/openapi.test.js +6 -3
  24. package/dist/__tests__/openapi.test.js.map +1 -1
  25. package/dist/__tests__/queue.test.d.ts +2 -0
  26. package/dist/__tests__/queue.test.d.ts.map +1 -0
  27. package/dist/__tests__/queue.test.js +151 -0
  28. package/dist/__tests__/queue.test.js.map +1 -0
  29. package/dist/__tests__/usage.test.d.ts +2 -0
  30. package/dist/__tests__/usage.test.d.ts.map +1 -0
  31. package/dist/__tests__/usage.test.js +74 -0
  32. package/dist/__tests__/usage.test.js.map +1 -0
  33. package/dist/crypto.d.ts +8 -0
  34. package/dist/crypto.d.ts.map +1 -0
  35. package/dist/crypto.js +29 -0
  36. package/dist/crypto.js.map +1 -0
  37. package/dist/db/drizzle-db.d.ts +128 -0
  38. package/dist/db/drizzle-db.d.ts.map +1 -0
  39. package/dist/db/drizzle-db.js +789 -0
  40. package/dist/db/drizzle-db.js.map +1 -0
  41. package/dist/db/index.d.ts +161 -3
  42. package/dist/db/index.d.ts.map +1 -1
  43. package/dist/db/index.js +164 -8
  44. package/dist/db/index.js.map +1 -1
  45. package/dist/db/schema.pg.d.ts +1625 -0
  46. package/dist/db/schema.pg.d.ts.map +1 -0
  47. package/dist/db/schema.pg.js +150 -0
  48. package/dist/db/schema.pg.js.map +1 -0
  49. package/dist/db/schema.sqlite.d.ts +1781 -0
  50. package/dist/db/schema.sqlite.d.ts.map +1 -0
  51. package/dist/db/schema.sqlite.js +150 -0
  52. package/dist/db/schema.sqlite.js.map +1 -0
  53. package/dist/index.js +18 -1
  54. package/dist/index.js.map +1 -1
  55. package/dist/queue/processor.d.ts +51 -0
  56. package/dist/queue/processor.d.ts.map +1 -0
  57. package/dist/queue/processor.js +98 -0
  58. package/dist/queue/processor.js.map +1 -0
  59. package/dist/routes/attachments.d.ts +3 -0
  60. package/dist/routes/attachments.d.ts.map +1 -0
  61. package/dist/routes/attachments.js +168 -0
  62. package/dist/routes/attachments.js.map +1 -0
  63. package/dist/routes/credentials.d.ts +11 -0
  64. package/dist/routes/credentials.d.ts.map +1 -0
  65. package/dist/routes/credentials.js +120 -0
  66. package/dist/routes/credentials.js.map +1 -0
  67. package/dist/routes/files.js +5 -5
  68. package/dist/routes/files.js.map +1 -1
  69. package/dist/routes/health.d.ts.map +1 -1
  70. package/dist/routes/health.js +9 -1
  71. package/dist/routes/health.js.map +1 -1
  72. package/dist/routes/queue.d.ts +3 -0
  73. package/dist/routes/queue.d.ts.map +1 -0
  74. package/dist/routes/queue.js +144 -0
  75. package/dist/routes/queue.js.map +1 -0
  76. package/dist/routes/runners.d.ts +5 -0
  77. package/dist/routes/runners.d.ts.map +1 -1
  78. package/dist/routes/runners.js +42 -5
  79. package/dist/routes/runners.js.map +1 -1
  80. package/dist/routes/sessions.d.ts +2 -1
  81. package/dist/routes/sessions.d.ts.map +1 -1
  82. package/dist/routes/sessions.js +236 -11
  83. package/dist/routes/sessions.js.map +1 -1
  84. package/dist/routes/usage.d.ts +3 -0
  85. package/dist/routes/usage.d.ts.map +1 -0
  86. package/dist/routes/usage.js +64 -0
  87. package/dist/routes/usage.js.map +1 -0
  88. package/dist/routes/workspace.d.ts +4 -0
  89. package/dist/routes/workspace.d.ts.map +1 -0
  90. package/dist/routes/workspace.js +123 -0
  91. package/dist/routes/workspace.js.map +1 -0
  92. package/dist/runner/coordinator.d.ts +77 -9
  93. package/dist/runner/coordinator.d.ts.map +1 -1
  94. package/dist/runner/coordinator.js +163 -89
  95. package/dist/runner/coordinator.js.map +1 -1
  96. package/dist/runner/local-backend.d.ts +1 -0
  97. package/dist/runner/local-backend.d.ts.map +1 -1
  98. package/dist/runner/local-backend.js +7 -0
  99. package/dist/runner/local-backend.js.map +1 -1
  100. package/dist/runner/remote-backend.d.ts +2 -0
  101. package/dist/runner/remote-backend.d.ts.map +1 -1
  102. package/dist/runner/remote-backend.js +7 -0
  103. package/dist/runner/remote-backend.js.map +1 -1
  104. package/dist/runner/runner-client.d.ts +4 -0
  105. package/dist/runner/runner-client.d.ts.map +1 -1
  106. package/dist/runner/runner-client.js +12 -0
  107. package/dist/runner/runner-client.js.map +1 -1
  108. package/dist/runner/types.d.ts +4 -0
  109. package/dist/runner/types.d.ts.map +1 -1
  110. package/dist/schemas.d.ts.map +1 -1
  111. package/dist/schemas.js +115 -1
  112. package/dist/schemas.js.map +1 -1
  113. package/dist/telemetry/exporter.d.ts +16 -0
  114. package/dist/telemetry/exporter.d.ts.map +1 -0
  115. package/dist/telemetry/exporter.js +89 -0
  116. package/dist/telemetry/exporter.js.map +1 -0
  117. package/dist/usage/extractor.d.ts +18 -0
  118. package/dist/usage/extractor.d.ts.map +1 -0
  119. package/dist/usage/extractor.js +48 -0
  120. package/dist/usage/extractor.js.map +1 -0
  121. package/drizzle/pg/0000_thick_loners.sql +75 -0
  122. package/drizzle/pg/0001_rare_lester.sql +13 -0
  123. package/drizzle/pg/0002_short_shinko_yamashiro.sql +1 -0
  124. package/drizzle/pg/0003_remarkable_mastermind.sql +14 -0
  125. package/drizzle/pg/0004_warm_reaper.sql +18 -0
  126. package/drizzle/pg/0005_overconfident_mole_man.sql +14 -0
  127. package/drizzle/pg/0006_third_shiva.sql +13 -0
  128. package/drizzle/pg/0007_keen_shockwave.sql +2 -0
  129. package/drizzle/pg/meta/0000_snapshot.json +648 -0
  130. package/drizzle/pg/meta/0001_snapshot.json +743 -0
  131. package/drizzle/pg/meta/0002_snapshot.json +749 -0
  132. package/drizzle/pg/meta/0003_snapshot.json +841 -0
  133. package/drizzle/pg/meta/0004_snapshot.json +974 -0
  134. package/drizzle/pg/meta/0005_snapshot.json +1079 -0
  135. package/drizzle/pg/meta/0006_snapshot.json +1193 -0
  136. package/drizzle/pg/meta/0007_snapshot.json +1199 -0
  137. package/drizzle/pg/meta/_journal.json +62 -0
  138. package/drizzle/sqlite/0000_massive_kinsey_walden.sql +75 -0
  139. package/drizzle/sqlite/0001_quiet_phantom_reporter.sql +13 -0
  140. package/drizzle/sqlite/0002_broad_sheva_callister.sql +1 -0
  141. package/drizzle/sqlite/0003_thankful_agent_brand.sql +14 -0
  142. package/drizzle/sqlite/0004_productive_wolverine.sql +18 -0
  143. package/drizzle/sqlite/0005_chilly_carlie_cooper.sql +14 -0
  144. package/drizzle/sqlite/0006_workable_starfox.sql +13 -0
  145. package/drizzle/sqlite/0007_quick_hemingway.sql +19 -0
  146. package/drizzle/sqlite/meta/0000_snapshot.json +503 -0
  147. package/drizzle/sqlite/meta/0001_snapshot.json +587 -0
  148. package/drizzle/sqlite/meta/0002_snapshot.json +594 -0
  149. package/drizzle/sqlite/meta/0003_snapshot.json +685 -0
  150. package/drizzle/sqlite/meta/0004_snapshot.json +807 -0
  151. package/drizzle/sqlite/meta/0005_snapshot.json +897 -0
  152. package/drizzle/sqlite/meta/0006_snapshot.json +981 -0
  153. package/drizzle/sqlite/meta/0007_snapshot.json +988 -0
  154. package/drizzle/sqlite/meta/_journal.json +62 -0
  155. package/package.json +10 -5
  156. package/dist/__tests__/schema.test.d.ts +0 -2
  157. package/dist/__tests__/schema.test.d.ts.map +0 -1
  158. package/dist/__tests__/schema.test.js +0 -31
  159. package/dist/__tests__/schema.test.js.map +0 -1
  160. package/dist/db/dump-schema.d.ts +0 -10
  161. package/dist/db/dump-schema.d.ts.map +0 -1
  162. package/dist/db/dump-schema.js +0 -64
  163. package/dist/db/dump-schema.js.map +0 -1
  164. package/dist/db/pg.d.ts +0 -35
  165. package/dist/db/pg.d.ts.map +0 -1
  166. package/dist/db/pg.js +0 -272
  167. package/dist/db/pg.js.map +0 -1
  168. package/dist/db/sqlite.d.ts +0 -34
  169. package/dist/db/sqlite.d.ts.map +0 -1
  170. package/dist/db/sqlite.js +0 -296
  171. package/dist/db/sqlite.js.map +0 -1
@@ -0,0 +1,62 @@
1
+ {
2
+ "version": "7",
3
+ "dialect": "sqlite",
4
+ "entries": [
5
+ {
6
+ "idx": 0,
7
+ "version": "6",
8
+ "when": 1771632902986,
9
+ "tag": "0000_massive_kinsey_walden",
10
+ "breakpoints": true
11
+ },
12
+ {
13
+ "idx": 1,
14
+ "version": "6",
15
+ "when": 1771637677445,
16
+ "tag": "0001_quiet_phantom_reporter",
17
+ "breakpoints": true
18
+ },
19
+ {
20
+ "idx": 2,
21
+ "version": "6",
22
+ "when": 1771637998638,
23
+ "tag": "0002_broad_sheva_callister",
24
+ "breakpoints": true
25
+ },
26
+ {
27
+ "idx": 3,
28
+ "version": "6",
29
+ "when": 1771638247897,
30
+ "tag": "0003_thankful_agent_brand",
31
+ "breakpoints": true
32
+ },
33
+ {
34
+ "idx": 4,
35
+ "version": "6",
36
+ "when": 1771638582307,
37
+ "tag": "0004_productive_wolverine",
38
+ "breakpoints": true
39
+ },
40
+ {
41
+ "idx": 5,
42
+ "version": "6",
43
+ "when": 1771639240673,
44
+ "tag": "0005_chilly_carlie_cooper",
45
+ "breakpoints": true
46
+ },
47
+ {
48
+ "idx": 6,
49
+ "version": "6",
50
+ "when": 1771639436877,
51
+ "tag": "0006_workable_starfox",
52
+ "breakpoints": true
53
+ },
54
+ {
55
+ "idx": 7,
56
+ "version": "6",
57
+ "when": 1771706256403,
58
+ "tag": "0007_quick_hemingway",
59
+ "breakpoints": true
60
+ }
61
+ ]
62
+ }
package/package.json CHANGED
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "name": "@ash-ai/server",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "files": [
8
8
  "dist",
9
+ "drizzle",
9
10
  "README.md"
10
11
  ],
11
12
  "publishConfig": {
@@ -24,14 +25,16 @@
24
25
  "@fastify/swagger": "^9.7.0",
25
26
  "@fastify/swagger-ui": "^5.2.5",
26
27
  "better-sqlite3": "^11.0.0",
28
+ "drizzle-orm": "^0.44.0",
27
29
  "fastify": "^5.2.0",
28
30
  "pg": "^8.18.0",
29
- "@ash-ai/sandbox": "0.0.2",
30
- "@ash-ai/shared": "0.0.2"
31
+ "@ash-ai/sandbox": "0.0.4",
32
+ "@ash-ai/shared": "0.0.4"
31
33
  },
32
34
  "devDependencies": {
33
35
  "@types/better-sqlite3": "^7.6.0",
34
- "@types/pg": "^8.16.0"
36
+ "@types/pg": "^8.16.0",
37
+ "drizzle-kit": "^0.30.0"
35
38
  },
36
39
  "scripts": {
37
40
  "build": "tsc",
@@ -41,6 +44,8 @@
41
44
  "dev": "tsx src/index.ts",
42
45
  "test": "vitest run",
43
46
  "openapi": "tsx scripts/export-openapi.ts",
44
- "dump-schema": "tsx scripts/dump-schema.ts"
47
+ "db:generate:sqlite": "drizzle-kit generate --config=drizzle.config.sqlite.ts",
48
+ "db:generate:pg": "drizzle-kit generate --config=drizzle.config.pg.ts",
49
+ "db:generate": "pnpm db:generate:sqlite && pnpm db:generate:pg"
45
50
  }
46
51
  }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=schema.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/schema.test.ts"],"names":[],"mappings":""}
@@ -1,31 +0,0 @@
1
- import { describe, it, expect, afterEach } from 'vitest';
2
- import { readFileSync, mkdtempSync, rmSync } from 'node:fs';
3
- import { join, resolve, dirname } from 'node:path';
4
- import { tmpdir } from 'node:os';
5
- import { fileURLToPath } from 'node:url';
6
- import Database from 'better-sqlite3';
7
- import { SqliteDb } from '../db/sqlite.js';
8
- import { dumpSchema } from '../db/dump-schema.js';
9
- const __dirname = dirname(fileURLToPath(import.meta.url));
10
- const SCHEMA_PATH = resolve(__dirname, '..', 'db', 'schema.sql');
11
- describe('schema.sql', () => {
12
- let tempDir;
13
- let sqliteDb;
14
- afterEach(async () => {
15
- await sqliteDb?.close();
16
- if (tempDir)
17
- rmSync(tempDir, { recursive: true, force: true });
18
- });
19
- it('matches the checked-in schema.sql (run `pnpm dump-schema` to regenerate)', () => {
20
- tempDir = mkdtempSync(join(tmpdir(), 'ash-schema-test-'));
21
- sqliteDb = new SqliteDb(tempDir);
22
- const raw = new Database(join(tempDir, 'ash.db'), { readonly: true });
23
- const generated = dumpSchema(raw);
24
- raw.close();
25
- const checkedIn = readFileSync(SCHEMA_PATH, 'utf-8');
26
- // Strip the header comments to compare just the schema body
27
- const bodyFromFile = checkedIn.replace(/^--.*\n/gm, '').trim();
28
- expect(generated.trim()).toBe(bodyFromFile);
29
- });
30
- });
31
- //# sourceMappingURL=schema.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.test.js","sourceRoot":"","sources":["../../src/__tests__/schema.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;AAEjE,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,IAAI,OAAe,CAAC;IACpB,IAAI,QAAkB,CAAC;IAEvB,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,QAAQ,EAAE,KAAK,EAAE,CAAC;QACxB,IAAI,OAAO;YAAE,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;QAClF,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAC;QAC1D,QAAQ,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC;QAEjC,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAClC,GAAG,CAAC,KAAK,EAAE,CAAC;QAEZ,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACrD,4DAA4D;QAC5D,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAE/D,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,10 +0,0 @@
1
- /**
2
- * Reconstructs the current SQLite schema from PRAGMA introspection.
3
- *
4
- * Why not just read sqlite_master? Because ALTER TABLE ADD COLUMN
5
- * doesn't update the original CREATE TABLE statement stored there.
6
- * We need PRAGMA table_info to get the actual current columns.
7
- */
8
- import type Database from 'better-sqlite3';
9
- export declare function dumpSchema(db: Database.Database): string;
10
- //# sourceMappingURL=dump-schema.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dump-schema.d.ts","sourceRoot":"","sources":["../../src/db/dump-schema.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAiC3C,wBAAgB,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAyExD"}
@@ -1,64 +0,0 @@
1
- export function dumpSchema(db) {
2
- const tables = db.prepare("SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%' ORDER BY name").all();
3
- const parts = [];
4
- for (const { name } of tables) {
5
- const columns = db.prepare(`PRAGMA table_info("${name}")`).all();
6
- // Find single-column UNIQUE constraints (from column-level UNIQUE declarations)
7
- const indexList = db.prepare(`PRAGMA index_list("${name}")`).all();
8
- const uniqueCols = new Set();
9
- for (const idx of indexList) {
10
- if (idx.origin === 'u') {
11
- const idxCols = db.prepare(`PRAGMA index_info("${idx.name}")`).all();
12
- if (idxCols.length === 1) {
13
- uniqueCols.add(idxCols[0].name);
14
- }
15
- }
16
- }
17
- // Multi-column unique constraints (table-level)
18
- const uniqueTableConstraints = [];
19
- for (const idx of indexList) {
20
- if (idx.origin === 'u') {
21
- const idxCols = db.prepare(`PRAGMA index_info("${idx.name}")`).all();
22
- if (idxCols.length > 1) {
23
- const colNames = idxCols.sort((a, b) => a.seqno - b.seqno).map((c) => c.name).join(', ');
24
- uniqueTableConstraints.push(` UNIQUE(${colNames})`);
25
- }
26
- }
27
- }
28
- // Foreign keys
29
- const fks = db.prepare(`PRAGMA foreign_key_list("${name}")`).all();
30
- const fkGroups = new Map();
31
- for (const fk of fks) {
32
- if (!fkGroups.has(fk.id))
33
- fkGroups.set(fk.id, []);
34
- fkGroups.get(fk.id).push(fk);
35
- }
36
- // Build column definitions
37
- const colDefs = columns.map((col) => {
38
- let def = ` ${col.name} ${col.type}`;
39
- if (col.pk)
40
- def += ' PRIMARY KEY';
41
- if (col.notnull && !col.pk)
42
- def += ' NOT NULL';
43
- if (uniqueCols.has(col.name))
44
- def += ' UNIQUE';
45
- if (col.dflt_value !== null)
46
- def += ` DEFAULT ${col.dflt_value}`;
47
- return def;
48
- });
49
- for (const [, fkCols] of fkGroups) {
50
- const fromCols = fkCols.map((f) => f.from).join(', ');
51
- const toCols = fkCols.map((f) => f.to).join(', ');
52
- colDefs.push(` FOREIGN KEY (${fromCols}) REFERENCES ${fkCols[0].table}(${toCols})`);
53
- }
54
- colDefs.push(...uniqueTableConstraints);
55
- parts.push(`CREATE TABLE ${name} (\n${colDefs.join(',\n')}\n);`);
56
- }
57
- // Explicit indexes (skip autoindexes)
58
- const indexes = db.prepare("SELECT sql FROM sqlite_master WHERE type = 'index' AND sql IS NOT NULL AND name NOT LIKE 'sqlite_%' ORDER BY name").all();
59
- for (const { sql } of indexes) {
60
- parts.push(sql + ';');
61
- }
62
- return parts.join('\n\n');
63
- }
64
- //# sourceMappingURL=dump-schema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dump-schema.js","sourceRoot":"","sources":["../../src/db/dump-schema.ts"],"names":[],"mappings":"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"}
package/dist/db/pg.d.ts DELETED
@@ -1,35 +0,0 @@
1
- import type { Agent, Session, SessionStatus, SandboxRecord, SandboxState, ApiKey } from '@ash-ai/shared';
2
- import type { Db } from './index.js';
3
- export declare class PgDb implements Db {
4
- private pool;
5
- constructor(databaseUrl: string);
6
- init(): Promise<void>;
7
- upsertAgent(name: string, path: string, tenantId?: string): Promise<Agent>;
8
- getAgent(name: string, tenantId?: string): Promise<Agent | null>;
9
- listAgents(tenantId?: string): Promise<Agent[]>;
10
- deleteAgent(name: string, tenantId?: string): Promise<boolean>;
11
- insertSession(id: string, agentName: string, sandboxId: string, tenantId?: string): Promise<Session>;
12
- updateSessionStatus(id: string, status: SessionStatus): Promise<void>;
13
- updateSessionSandbox(id: string, sandboxId: string): Promise<void>;
14
- updateSessionRunner(id: string, runnerId: string | null): Promise<void>;
15
- getSession(id: string): Promise<Session | null>;
16
- listSessions(tenantId?: string, agent?: string): Promise<Session[]>;
17
- listSessionsByRunner(runnerId: string): Promise<Session[]>;
18
- touchSession(id: string): Promise<void>;
19
- insertSandbox(id: string, agentName: string, workspaceDir: string, sessionId?: string, tenantId?: string): Promise<void>;
20
- updateSandboxState(id: string, state: SandboxState): Promise<void>;
21
- updateSandboxSession(id: string, sessionId: string | null): Promise<void>;
22
- touchSandbox(id: string): Promise<void>;
23
- getSandbox(id: string): Promise<SandboxRecord | null>;
24
- countSandboxes(): Promise<number>;
25
- getBestEvictionCandidate(): Promise<SandboxRecord | null>;
26
- getIdleSandboxes(olderThan: string): Promise<SandboxRecord[]>;
27
- deleteSandbox(id: string): Promise<void>;
28
- markAllSandboxesCold(): Promise<number>;
29
- getApiKeyByHash(keyHash: string): Promise<ApiKey | null>;
30
- insertApiKey(id: string, tenantId: string, keyHash: string, label: string): Promise<ApiKey>;
31
- listApiKeysByTenant(tenantId: string): Promise<ApiKey[]>;
32
- deleteApiKey(id: string): Promise<boolean>;
33
- close(): Promise<void>;
34
- }
35
- //# sourceMappingURL=pg.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pg.d.ts","sourceRoot":"","sources":["../../src/db/pg.ts"],"names":[],"mappings":"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"}
package/dist/db/pg.js DELETED
@@ -1,272 +0,0 @@
1
- import pg from 'pg';
2
- import { randomUUID } from 'node:crypto';
3
- export class PgDb {
4
- pool;
5
- constructor(databaseUrl) {
6
- this.pool = new pg.Pool({ connectionString: databaseUrl });
7
- }
8
- async init() {
9
- // Retry connection with exponential backoff (total ~31s: 1s, 2s, 4s, 8s, 16s)
10
- const maxRetries = 5;
11
- for (let attempt = 0; attempt <= maxRetries; attempt++) {
12
- try {
13
- await this.pool.query('SELECT 1');
14
- break;
15
- }
16
- catch (err) {
17
- if (attempt === maxRetries) {
18
- throw new Error(`Failed to connect to database after ${maxRetries + 1} attempts: ${err.message}`);
19
- }
20
- const delay = 1000 * Math.pow(2, attempt);
21
- console.log(`[db] Connection attempt ${attempt + 1} failed, retrying in ${delay}ms...`);
22
- await new Promise(r => setTimeout(r, delay));
23
- }
24
- }
25
- await this.pool.query(`
26
- CREATE TABLE IF NOT EXISTS agents (
27
- name TEXT PRIMARY KEY,
28
- version INTEGER NOT NULL DEFAULT 1,
29
- path TEXT NOT NULL,
30
- created_at TEXT NOT NULL DEFAULT (now()::TEXT),
31
- updated_at TEXT NOT NULL DEFAULT (now()::TEXT)
32
- )
33
- `);
34
- await this.pool.query(`
35
- CREATE TABLE IF NOT EXISTS sessions (
36
- id TEXT PRIMARY KEY,
37
- agent_name TEXT NOT NULL,
38
- sandbox_id TEXT NOT NULL,
39
- status TEXT NOT NULL DEFAULT 'starting',
40
- runner_id TEXT,
41
- created_at TEXT NOT NULL DEFAULT (now()::TEXT),
42
- last_active_at TEXT NOT NULL DEFAULT (now()::TEXT),
43
- FOREIGN KEY (agent_name) REFERENCES agents(name)
44
- )
45
- `);
46
- await this.pool.query(`
47
- CREATE TABLE IF NOT EXISTS sandboxes (
48
- id TEXT PRIMARY KEY,
49
- session_id TEXT,
50
- agent_name TEXT NOT NULL,
51
- state TEXT NOT NULL DEFAULT 'warming',
52
- workspace_dir TEXT NOT NULL,
53
- created_at TEXT NOT NULL DEFAULT (now()::TEXT),
54
- last_used_at TEXT NOT NULL DEFAULT (now()::TEXT)
55
- )
56
- `);
57
- // Indexes (CREATE INDEX IF NOT EXISTS is supported in Postgres)
58
- await this.pool.query('CREATE INDEX IF NOT EXISTS idx_sandboxes_state ON sandboxes(state)');
59
- await this.pool.query('CREATE INDEX IF NOT EXISTS idx_sandboxes_session ON sandboxes(session_id)');
60
- await this.pool.query('CREATE INDEX IF NOT EXISTS idx_sandboxes_last_used ON sandboxes(last_used_at)');
61
- // Multi-tenancy migration: add tenant_id columns (idempotent via IF NOT EXISTS)
62
- await this.pool.query("ALTER TABLE agents ADD COLUMN IF NOT EXISTS tenant_id TEXT NOT NULL DEFAULT 'default'");
63
- await this.pool.query("ALTER TABLE sessions ADD COLUMN IF NOT EXISTS tenant_id TEXT NOT NULL DEFAULT 'default'");
64
- await this.pool.query("ALTER TABLE sandboxes ADD COLUMN IF NOT EXISTS tenant_id TEXT NOT NULL DEFAULT 'default'");
65
- await this.pool.query('CREATE INDEX IF NOT EXISTS idx_agents_tenant ON agents(tenant_id)');
66
- await this.pool.query('CREATE INDEX IF NOT EXISTS idx_sessions_tenant ON sessions(tenant_id)');
67
- await this.pool.query('CREATE INDEX IF NOT EXISTS idx_sandboxes_tenant ON sandboxes(tenant_id)');
68
- await this.pool.query(`
69
- CREATE TABLE IF NOT EXISTS api_keys (
70
- id TEXT PRIMARY KEY,
71
- tenant_id TEXT NOT NULL,
72
- key_hash TEXT NOT NULL UNIQUE,
73
- label TEXT NOT NULL DEFAULT '',
74
- created_at TEXT NOT NULL DEFAULT (now()::TEXT)
75
- )
76
- `);
77
- await this.pool.query('CREATE INDEX IF NOT EXISTS idx_api_keys_tenant ON api_keys(tenant_id)');
78
- await this.pool.query('CREATE INDEX IF NOT EXISTS idx_api_keys_hash ON api_keys(key_hash)');
79
- // Agent UUID migration: change PK from name to UUID id, add UNIQUE(tenant_id, name), drop FK from sessions
80
- const agentCols = await this.pool.query("SELECT column_name FROM information_schema.columns WHERE table_name = 'agents' AND column_name = 'id'");
81
- if (agentCols.rows.length === 0) {
82
- await this.pool.query("ALTER TABLE agents ADD COLUMN id TEXT");
83
- await this.pool.query("UPDATE agents SET id = gen_random_uuid()::TEXT WHERE id IS NULL");
84
- await this.pool.query("ALTER TABLE agents ALTER COLUMN id SET NOT NULL");
85
- await this.pool.query("ALTER TABLE agents DROP CONSTRAINT agents_pkey");
86
- await this.pool.query("ALTER TABLE agents ADD PRIMARY KEY (id)");
87
- await this.pool.query("CREATE UNIQUE INDEX IF NOT EXISTS idx_agents_tenant_name ON agents(tenant_id, name)");
88
- try {
89
- await this.pool.query("ALTER TABLE sessions DROP CONSTRAINT sessions_agent_name_fkey");
90
- }
91
- catch { /* already dropped */ }
92
- }
93
- }
94
- // -- Agents -----------------------------------------------------------------
95
- async upsertAgent(name, path, tenantId = 'default') {
96
- const existing = await this.pool.query('SELECT id, version FROM agents WHERE tenant_id = $1 AND name = $2', [tenantId, name]);
97
- const version = existing.rows.length > 0 ? existing.rows[0].version + 1 : 1;
98
- const id = existing.rows.length > 0 ? existing.rows[0].id : randomUUID();
99
- const now = new Date().toISOString();
100
- await this.pool.query(`
101
- INSERT INTO agents (id, tenant_id, name, version, path, created_at, updated_at)
102
- VALUES ($1, $2, $3, $4, $5, $6, $7)
103
- ON CONFLICT(tenant_id, name) DO UPDATE SET version = $4, path = $5, updated_at = $7
104
- `, [id, tenantId, name, version, path, now, now]);
105
- return { id, name, tenantId, version, path, createdAt: now, updatedAt: now };
106
- }
107
- async getAgent(name, tenantId = 'default') {
108
- const result = await this.pool.query('SELECT * FROM agents WHERE tenant_id = $1 AND name = $2', [tenantId, name]);
109
- const row = result.rows[0];
110
- if (!row)
111
- return null;
112
- return { id: row.id, name: row.name, tenantId: row.tenant_id, version: row.version, path: row.path, createdAt: row.created_at, updatedAt: row.updated_at };
113
- }
114
- async listAgents(tenantId = 'default') {
115
- const result = await this.pool.query('SELECT * FROM agents WHERE tenant_id = $1 ORDER BY name', [tenantId]);
116
- return result.rows.map((r) => ({ id: r.id, name: r.name, tenantId: r.tenant_id, version: r.version, path: r.path, createdAt: r.created_at, updatedAt: r.updated_at }));
117
- }
118
- async deleteAgent(name, tenantId = 'default') {
119
- await this.pool.query('DELETE FROM sessions WHERE agent_name = $1 AND tenant_id = $2', [name, tenantId]);
120
- const result = await this.pool.query('DELETE FROM agents WHERE name = $1 AND tenant_id = $2', [name, tenantId]);
121
- return (result.rowCount ?? 0) > 0;
122
- }
123
- // -- Sessions ---------------------------------------------------------------
124
- async insertSession(id, agentName, sandboxId, tenantId = 'default') {
125
- const now = new Date().toISOString();
126
- await this.pool.query(`
127
- INSERT INTO sessions (id, tenant_id, agent_name, sandbox_id, status, created_at, last_active_at)
128
- VALUES ($1, $2, $3, $4, 'starting', $5, $6)
129
- `, [id, tenantId, agentName, sandboxId, now, now]);
130
- return { id, tenantId, agentName, sandboxId, status: 'starting', createdAt: now, lastActiveAt: now };
131
- }
132
- async updateSessionStatus(id, status) {
133
- const now = new Date().toISOString();
134
- await this.pool.query('UPDATE sessions SET status = $1, last_active_at = $2 WHERE id = $3', [status, now, id]);
135
- }
136
- async updateSessionSandbox(id, sandboxId) {
137
- const now = new Date().toISOString();
138
- await this.pool.query('UPDATE sessions SET sandbox_id = $1, last_active_at = $2 WHERE id = $3', [sandboxId, now, id]);
139
- }
140
- async updateSessionRunner(id, runnerId) {
141
- const now = new Date().toISOString();
142
- await this.pool.query('UPDATE sessions SET runner_id = $1, last_active_at = $2 WHERE id = $3', [runnerId, now, id]);
143
- }
144
- async getSession(id) {
145
- const result = await this.pool.query('SELECT * FROM sessions WHERE id = $1', [id]);
146
- const row = result.rows[0];
147
- if (!row)
148
- return null;
149
- return { id: row.id, tenantId: row.tenant_id, agentName: row.agent_name, sandboxId: row.sandbox_id, status: row.status, runnerId: row.runner_id ?? null, createdAt: row.created_at, lastActiveAt: row.last_active_at };
150
- }
151
- async listSessions(tenantId = 'default', agent) {
152
- const result = agent
153
- ? await this.pool.query('SELECT * FROM sessions WHERE tenant_id = $1 AND agent_name = $2 ORDER BY created_at DESC', [tenantId, agent])
154
- : await this.pool.query('SELECT * FROM sessions WHERE tenant_id = $1 ORDER BY created_at DESC', [tenantId]);
155
- return result.rows.map((r) => ({ id: r.id, tenantId: r.tenant_id, agentName: r.agent_name, sandboxId: r.sandbox_id, status: r.status, runnerId: r.runner_id ?? null, createdAt: r.created_at, lastActiveAt: r.last_active_at }));
156
- }
157
- async listSessionsByRunner(runnerId) {
158
- const result = await this.pool.query('SELECT * FROM sessions WHERE runner_id = $1 ORDER BY created_at DESC', [runnerId]);
159
- return result.rows.map((r) => ({ id: r.id, tenantId: r.tenant_id, agentName: r.agent_name, sandboxId: r.sandbox_id, status: r.status, runnerId: r.runner_id ?? null, createdAt: r.created_at, lastActiveAt: r.last_active_at }));
160
- }
161
- async touchSession(id) {
162
- const now = new Date().toISOString();
163
- await this.pool.query('UPDATE sessions SET last_active_at = $1 WHERE id = $2', [now, id]);
164
- }
165
- // -- Sandboxes --------------------------------------------------------------
166
- async insertSandbox(id, agentName, workspaceDir, sessionId, tenantId = 'default') {
167
- const now = new Date().toISOString();
168
- await this.pool.query(`
169
- INSERT INTO sandboxes (id, tenant_id, agent_name, workspace_dir, session_id, state, created_at, last_used_at)
170
- VALUES ($1, $2, $3, $4, $5, 'warming', $6, $7)
171
- `, [id, tenantId, agentName, workspaceDir, sessionId ?? null, now, now]);
172
- }
173
- async updateSandboxState(id, state) {
174
- await this.pool.query('UPDATE sandboxes SET state = $1 WHERE id = $2', [state, id]);
175
- }
176
- async updateSandboxSession(id, sessionId) {
177
- await this.pool.query('UPDATE sandboxes SET session_id = $1 WHERE id = $2', [sessionId, id]);
178
- }
179
- async touchSandbox(id) {
180
- const now = new Date().toISOString();
181
- await this.pool.query('UPDATE sandboxes SET last_used_at = $1 WHERE id = $2', [now, id]);
182
- }
183
- async getSandbox(id) {
184
- const result = await this.pool.query('SELECT * FROM sandboxes WHERE id = $1', [id]);
185
- const row = result.rows[0];
186
- if (!row)
187
- return null;
188
- return {
189
- id: row.id,
190
- sessionId: row.session_id,
191
- agentName: row.agent_name,
192
- state: row.state,
193
- workspaceDir: row.workspace_dir,
194
- createdAt: row.created_at,
195
- lastUsedAt: row.last_used_at,
196
- };
197
- }
198
- async countSandboxes() {
199
- const result = await this.pool.query('SELECT COUNT(*) as count FROM sandboxes');
200
- return parseInt(result.rows[0].count, 10);
201
- }
202
- async getBestEvictionCandidate() {
203
- const result = await this.pool.query(`
204
- SELECT * FROM sandboxes
205
- WHERE state IN ('cold', 'warm', 'waiting')
206
- ORDER BY
207
- CASE state WHEN 'cold' THEN 0 WHEN 'warm' THEN 1 WHEN 'waiting' THEN 2 END,
208
- last_used_at ASC
209
- LIMIT 1
210
- `);
211
- const row = result.rows[0];
212
- if (!row)
213
- return null;
214
- return {
215
- id: row.id,
216
- sessionId: row.session_id,
217
- agentName: row.agent_name,
218
- state: row.state,
219
- workspaceDir: row.workspace_dir,
220
- createdAt: row.created_at,
221
- lastUsedAt: row.last_used_at,
222
- };
223
- }
224
- async getIdleSandboxes(olderThan) {
225
- const result = await this.pool.query("SELECT * FROM sandboxes WHERE state = 'waiting' AND last_used_at < $1 ORDER BY last_used_at ASC", [olderThan]);
226
- return result.rows.map((row) => ({
227
- id: row.id,
228
- sessionId: row.session_id,
229
- agentName: row.agent_name,
230
- state: row.state,
231
- workspaceDir: row.workspace_dir,
232
- createdAt: row.created_at,
233
- lastUsedAt: row.last_used_at,
234
- }));
235
- }
236
- async deleteSandbox(id) {
237
- await this.pool.query('DELETE FROM sandboxes WHERE id = $1', [id]);
238
- }
239
- async markAllSandboxesCold() {
240
- const result = await this.pool.query("UPDATE sandboxes SET state = 'cold' WHERE state != 'cold'");
241
- return result.rowCount ?? 0;
242
- }
243
- // -- API Keys --------------------------------------------------------------
244
- async getApiKeyByHash(keyHash) {
245
- const result = await this.pool.query('SELECT * FROM api_keys WHERE key_hash = $1', [keyHash]);
246
- const row = result.rows[0];
247
- if (!row)
248
- return null;
249
- return { id: row.id, tenantId: row.tenant_id, keyHash: row.key_hash, label: row.label, createdAt: row.created_at };
250
- }
251
- async insertApiKey(id, tenantId, keyHash, label) {
252
- const now = new Date().toISOString();
253
- await this.pool.query(`
254
- INSERT INTO api_keys (id, tenant_id, key_hash, label, created_at)
255
- VALUES ($1, $2, $3, $4, $5)
256
- `, [id, tenantId, keyHash, label, now]);
257
- return { id, tenantId, keyHash, label, createdAt: now };
258
- }
259
- async listApiKeysByTenant(tenantId) {
260
- const result = await this.pool.query('SELECT * FROM api_keys WHERE tenant_id = $1 ORDER BY created_at DESC', [tenantId]);
261
- return result.rows.map((r) => ({ id: r.id, tenantId: r.tenant_id, keyHash: r.key_hash, label: r.label, createdAt: r.created_at }));
262
- }
263
- async deleteApiKey(id) {
264
- const result = await this.pool.query('DELETE FROM api_keys WHERE id = $1', [id]);
265
- return (result.rowCount ?? 0) > 0;
266
- }
267
- // -- Lifecycle --------------------------------------------------------------
268
- async close() {
269
- await this.pool.end();
270
- }
271
- }
272
- //# sourceMappingURL=pg.js.map
package/dist/db/pg.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"pg.js","sourceRoot":"","sources":["../../src/db/pg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIzC,MAAM,OAAO,IAAI;IACP,IAAI,CAAU;IAEtB,YAAY,WAAmB;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,gBAAgB,EAAE,WAAW,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,IAAI;QACR,8EAA8E;QAC9E,MAAM,UAAU,GAAG,CAAC,CAAC;QACrB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;YACvD,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBAClC,MAAM;YACR,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;oBAC3B,MAAM,IAAI,KAAK,CAAC,uCAAuC,UAAU,GAAG,CAAC,cAAe,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC/G,CAAC;gBACD,MAAM,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBAC1C,OAAO,CAAC,GAAG,CAAC,2BAA2B,OAAO,GAAG,CAAC,wBAAwB,KAAK,OAAO,CAAC,CAAC;gBACxF,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QAED,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;;;;;;;;KAQrB,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;KAWrB,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;KAUrB,CAAC,CAAC;QAEH,gEAAgE;QAChE,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAC;QAC5F,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,2EAA2E,CAAC,CAAC;QACnG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,+EAA+E,CAAC,CAAC;QAEvG,gFAAgF;QAChF,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,uFAAuF,CAAC,CAAC;QAC/G,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,yFAAyF,CAAC,CAAC;QACjH,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,0FAA0F,CAAC,CAAC;QAElH,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,mEAAmE,CAAC,CAAC;QAC3F,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,uEAAuE,CAAC,CAAC;QAC/F,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,yEAAyE,CAAC,CAAC;QAEjG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;;;;;;;;KAQrB,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,uEAAuE,CAAC,CAAC;QAC/F,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAC;QAE5F,2GAA2G;QAC3G,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACrC,uGAAuG,CACxG,CAAC;QACF,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAC/D,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;YACzF,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACzE,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;YACxE,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;YACjE,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,qFAAqF,CAAC,CAAC;YAC7G,IAAI,CAAC;gBAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC;QACjI,CAAC;IACH,CAAC;IAED,8EAA8E;IAE9E,KAAK,CAAC,WAAW,CAAC,IAAY,EAAE,IAAY,EAAE,WAAmB,SAAS;QACxE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,mEAAmE,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9H,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5E,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;QACzE,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAErC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;;;;KAIrB,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAElD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IAC/E,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAY,EAAE,WAAmB,SAAS;QACvD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,yDAAyD,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;QAClH,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;IAC7J,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,WAAmB,SAAS;QAC3C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,yDAAyD,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC5G,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IACzK,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAY,EAAE,WAAmB,SAAS;QAC1D,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,+DAA+D,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;QACzG,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,uDAAuD,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;QAChH,OAAO,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,8EAA8E;IAE9E,KAAK,CAAC,aAAa,CAAC,EAAU,EAAE,SAAiB,EAAE,SAAiB,EAAE,WAAmB,SAAS;QAChG,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;;;KAGrB,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAEnD,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC;IACvG,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,EAAU,EAAE,MAAqB;QACzD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,oEAAoE,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IACjH,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,EAAU,EAAE,SAAiB;QACtD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,wEAAwE,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IACxH,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,EAAU,EAAE,QAAuB;QAC3D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,uEAAuE,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IACtH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAU;QACzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,sCAAsC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACnF,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,SAAS,IAAI,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,UAAU,EAAE,YAAY,EAAE,GAAG,CAAC,cAAc,EAAE,CAAC;IACzN,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,WAAmB,SAAS,EAAE,KAAc;QAC7D,MAAM,MAAM,GAAG,KAAK;YAClB,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,0FAA0F,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACtI,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,sEAAsE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC9G,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,SAAS,IAAI,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;IACnO,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,QAAgB;QACzC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,sEAAsE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;QACzH,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,SAAS,IAAI,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;IACnO,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,EAAU;QAC3B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,uDAAuD,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IAC5F,CAAC;IAED,8EAA8E;IAE9E,KAAK,CAAC,aAAa,CAAC,EAAU,EAAE,SAAiB,EAAE,YAAoB,EAAE,SAAkB,EAAE,WAAmB,SAAS;QACvH,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;;;KAGrB,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,IAAI,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,EAAU,EAAE,KAAmB;QACtD,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,+CAA+C,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IACtF,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,EAAU,EAAE,SAAwB;QAC7D,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,oDAAoD,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;IAC/F,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,EAAU;QAC3B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,sDAAsD,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IAC3F,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAU;QACzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,uCAAuC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACpF,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,YAAY,EAAE,GAAG,CAAC,aAAa;YAC/B,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,UAAU,EAAE,GAAG,CAAC,YAAY;SAC7B,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAChF,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,wBAAwB;QAC5B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;;;;;;;KAOpC,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,YAAY,EAAE,GAAG,CAAC,aAAa;YAC/B,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,UAAU,EAAE,GAAG,CAAC,YAAY;SAC7B,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,SAAiB;QACtC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAClC,iGAAiG,EACjG,CAAC,SAAS,CAAC,CACZ,CAAC;QACF,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC/B,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,YAAY,EAAE,GAAG,CAAC,aAAa;YAC/B,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,UAAU,EAAE,GAAG,CAAC,YAAY;SAC7B,CAAC,CAAC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,EAAU;QAC5B,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,qCAAqC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,oBAAoB;QACxB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAClC,2DAA2D,CAC5D,CAAC;QACF,OAAO,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,6EAA6E;IAE7E,KAAK,CAAC,eAAe,CAAC,OAAe;QACnC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,4CAA4C,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9F,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;IACrH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,EAAU,EAAE,QAAgB,EAAE,OAAe,EAAE,KAAa;QAC7E,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;;;KAGrB,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;QACxC,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,QAAgB;QACxC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,sEAAsE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;QACzH,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IACrI,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,EAAU;QAC3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,oCAAoC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACjF,OAAO,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,8EAA8E;IAE9E,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IACxB,CAAC;CACF"}
@@ -1,34 +0,0 @@
1
- import type { Agent, Session, SessionStatus, SandboxRecord, SandboxState, ApiKey } from '@ash-ai/shared';
2
- import type { Db } from './index.js';
3
- export declare class SqliteDb implements Db {
4
- private db;
5
- constructor(dataDir: string);
6
- upsertAgent(name: string, path: string, tenantId?: string): Promise<Agent>;
7
- getAgent(name: string, tenantId?: string): Promise<Agent | null>;
8
- listAgents(tenantId?: string): Promise<Agent[]>;
9
- deleteAgent(name: string, tenantId?: string): Promise<boolean>;
10
- insertSession(id: string, agentName: string, sandboxId: string, tenantId?: string): Promise<Session>;
11
- updateSessionStatus(id: string, status: SessionStatus): Promise<void>;
12
- updateSessionSandbox(id: string, sandboxId: string): Promise<void>;
13
- updateSessionRunner(id: string, runnerId: string | null): Promise<void>;
14
- getSession(id: string): Promise<Session | null>;
15
- listSessions(tenantId?: string, agent?: string): Promise<Session[]>;
16
- listSessionsByRunner(runnerId: string): Promise<Session[]>;
17
- touchSession(id: string): Promise<void>;
18
- insertSandbox(id: string, agentName: string, workspaceDir: string, sessionId?: string, tenantId?: string): Promise<void>;
19
- updateSandboxState(id: string, state: SandboxState): Promise<void>;
20
- updateSandboxSession(id: string, sessionId: string | null): Promise<void>;
21
- touchSandbox(id: string): Promise<void>;
22
- getSandbox(id: string): Promise<SandboxRecord | null>;
23
- countSandboxes(): Promise<number>;
24
- getBestEvictionCandidate(): Promise<SandboxRecord | null>;
25
- getIdleSandboxes(olderThan: string): Promise<SandboxRecord[]>;
26
- deleteSandbox(id: string): Promise<void>;
27
- markAllSandboxesCold(): Promise<number>;
28
- getApiKeyByHash(keyHash: string): Promise<ApiKey | null>;
29
- insertApiKey(id: string, tenantId: string, keyHash: string, label: string): Promise<ApiKey>;
30
- listApiKeysByTenant(tenantId: string): Promise<ApiKey[]>;
31
- deleteApiKey(id: string): Promise<boolean>;
32
- close(): Promise<void>;
33
- }
34
- //# sourceMappingURL=sqlite.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/db/sqlite.ts"],"names":[],"mappings":"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"}