opengauge 0.1.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 (79) hide show
  1. package/README.md +64 -0
  2. package/bin/opengauge.js +70 -0
  3. package/dist/core/optimizer/checkpoint.d.ts +37 -0
  4. package/dist/core/optimizer/checkpoint.d.ts.map +1 -0
  5. package/dist/core/optimizer/checkpoint.js +81 -0
  6. package/dist/core/optimizer/checkpoint.js.map +1 -0
  7. package/dist/core/optimizer/compressor.d.ts +41 -0
  8. package/dist/core/optimizer/compressor.d.ts.map +1 -0
  9. package/dist/core/optimizer/compressor.js +134 -0
  10. package/dist/core/optimizer/compressor.js.map +1 -0
  11. package/dist/core/optimizer/dedup.d.ts +48 -0
  12. package/dist/core/optimizer/dedup.d.ts.map +1 -0
  13. package/dist/core/optimizer/dedup.js +147 -0
  14. package/dist/core/optimizer/dedup.js.map +1 -0
  15. package/dist/core/providers/adapter.d.ts +48 -0
  16. package/dist/core/providers/adapter.d.ts.map +1 -0
  17. package/dist/core/providers/adapter.js +22 -0
  18. package/dist/core/providers/adapter.js.map +1 -0
  19. package/dist/core/providers/anthropic.d.ts +12 -0
  20. package/dist/core/providers/anthropic.d.ts.map +1 -0
  21. package/dist/core/providers/anthropic.js +155 -0
  22. package/dist/core/providers/anthropic.js.map +1 -0
  23. package/dist/core/providers/gemini.d.ts +13 -0
  24. package/dist/core/providers/gemini.d.ts.map +1 -0
  25. package/dist/core/providers/gemini.js +154 -0
  26. package/dist/core/providers/gemini.js.map +1 -0
  27. package/dist/core/providers/ollama.d.ts +11 -0
  28. package/dist/core/providers/ollama.d.ts.map +1 -0
  29. package/dist/core/providers/ollama.js +119 -0
  30. package/dist/core/providers/ollama.js.map +1 -0
  31. package/dist/core/providers/openai.d.ts +12 -0
  32. package/dist/core/providers/openai.d.ts.map +1 -0
  33. package/dist/core/providers/openai.js +169 -0
  34. package/dist/core/providers/openai.js.map +1 -0
  35. package/dist/core/rag/assembler.d.ts +47 -0
  36. package/dist/core/rag/assembler.d.ts.map +1 -0
  37. package/dist/core/rag/assembler.js +178 -0
  38. package/dist/core/rag/assembler.js.map +1 -0
  39. package/dist/core/rag/embedder.d.ts +16 -0
  40. package/dist/core/rag/embedder.d.ts.map +1 -0
  41. package/dist/core/rag/embedder.js +223 -0
  42. package/dist/core/rag/embedder.js.map +1 -0
  43. package/dist/core/rag/retriever.d.ts +20 -0
  44. package/dist/core/rag/retriever.d.ts.map +1 -0
  45. package/dist/core/rag/retriever.js +71 -0
  46. package/dist/core/rag/retriever.js.map +1 -0
  47. package/dist/db/index.d.ts +5 -0
  48. package/dist/db/index.d.ts.map +1 -0
  49. package/dist/db/index.js +48 -0
  50. package/dist/db/index.js.map +1 -0
  51. package/dist/db/queries.d.ts +72 -0
  52. package/dist/db/queries.d.ts.map +1 -0
  53. package/dist/db/queries.js +169 -0
  54. package/dist/db/queries.js.map +1 -0
  55. package/dist/db/schema.d.ts +3 -0
  56. package/dist/db/schema.d.ts.map +1 -0
  57. package/dist/db/schema.js +71 -0
  58. package/dist/db/schema.js.map +1 -0
  59. package/dist/server/config.d.ts +25 -0
  60. package/dist/server/config.d.ts.map +1 -0
  61. package/dist/server/config.js +69 -0
  62. package/dist/server/config.js.map +1 -0
  63. package/dist/server/index.d.ts +5 -0
  64. package/dist/server/index.d.ts.map +1 -0
  65. package/dist/server/index.js +61 -0
  66. package/dist/server/index.js.map +1 -0
  67. package/dist/server/routes/index.d.ts +6 -0
  68. package/dist/server/routes/index.d.ts.map +1 -0
  69. package/dist/server/routes/index.js +272 -0
  70. package/dist/server/routes/index.js.map +1 -0
  71. package/dist/server/sse.d.ts +21 -0
  72. package/dist/server/sse.d.ts.map +1 -0
  73. package/dist/server/sse.js +40 -0
  74. package/dist/server/sse.js.map +1 -0
  75. package/dist/ui/static/app.js +515 -0
  76. package/dist/ui/static/index.html +13 -0
  77. package/dist/ui/static/styles.css +506 -0
  78. package/dist/ui/static/vendor.js +26 -0
  79. package/package.json +49 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedder.js","sourceRoot":"","sources":["../../../src/core/rag/embedder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Retriever — sqlite-vec similarity search for relevant context
3
+ *
4
+ * Queries the embeddings virtual table to find messages most similar
5
+ * to the current query.
6
+ */
7
+ import { Queries, Message } from '../../db/queries';
8
+ export interface RetrievedMessage extends Message {
9
+ similarity: number;
10
+ }
11
+ /**
12
+ * Retrieve the top-K most relevant past messages for a query.
13
+ *
14
+ * @param query - The user's current message text.
15
+ * @param conversationId - Limit search to a specific conversation, or null for all.
16
+ * @param queries - Database queries instance.
17
+ * @param k - Number of results to return. Default 15.
18
+ */
19
+ export declare function retrieveSimilar(query: string, conversationId: string | null, queries: Queries, k?: number): Promise<RetrievedMessage[]>;
20
+ //# sourceMappingURL=retriever.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retriever.d.ts","sourceRoot":"","sources":["../../../src/core/rag/retriever.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAIpD,MAAM,WAAW,gBAAiB,SAAQ,OAAO;IAC/C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,MAAM,GAAG,IAAI,EAC7B,OAAO,EAAE,OAAO,EAChB,CAAC,GAAE,MAAW,GACb,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA0D7B"}
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ /**
3
+ * Retriever — sqlite-vec similarity search for relevant context
4
+ *
5
+ * Queries the embeddings virtual table to find messages most similar
6
+ * to the current query.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.retrieveSimilar = retrieveSimilar;
10
+ const embedder_1 = require("./embedder");
11
+ const dedup_1 = require("../optimizer/dedup");
12
+ /**
13
+ * Retrieve the top-K most relevant past messages for a query.
14
+ *
15
+ * @param query - The user's current message text.
16
+ * @param conversationId - Limit search to a specific conversation, or null for all.
17
+ * @param queries - Database queries instance.
18
+ * @param k - Number of results to return. Default 15.
19
+ */
20
+ async function retrieveSimilar(query, conversationId, queries, k = 15) {
21
+ const queryEmbedding = await (0, embedder_1.embed)(query);
22
+ if (!queryEmbedding)
23
+ return [];
24
+ // Try sqlite-vec search first
25
+ const vecResults = queries.searchSimilar(queryEmbedding, k * 2);
26
+ if (vecResults.length > 0) {
27
+ // Get full message data for each result
28
+ const allMessages = conversationId
29
+ ? queries.getMessages(conversationId)
30
+ : [];
31
+ const messageMap = new Map();
32
+ for (const msg of allMessages) {
33
+ messageMap.set(msg.id, msg);
34
+ }
35
+ const retrieved = [];
36
+ for (const result of vecResults) {
37
+ const msg = messageMap.get(result.message_id);
38
+ if (msg) {
39
+ // sqlite-vec returns distance, convert to similarity (1 - distance for cosine)
40
+ retrieved.push({
41
+ ...msg,
42
+ similarity: 1 - result.distance,
43
+ });
44
+ }
45
+ }
46
+ // Filter to conversation if specified and sort by similarity
47
+ return retrieved
48
+ .filter((m) => !conversationId || m.conversation_id === conversationId)
49
+ .sort((a, b) => b.similarity - a.similarity)
50
+ .slice(0, k);
51
+ }
52
+ // Fallback: in-memory similarity search using cached fallback embeddings
53
+ if (!conversationId)
54
+ return [];
55
+ const messages = queries.getMessages(conversationId);
56
+ // For short conversations, skip RAG — all messages will be in the recent window
57
+ if (messages.length <= 15)
58
+ return [];
59
+ const scored = [];
60
+ for (const msg of messages) {
61
+ const msgEmbedding = await (0, embedder_1.embed)(msg.content);
62
+ if (!msgEmbedding)
63
+ continue;
64
+ const similarity = (0, dedup_1.cosineSimilarity)(queryEmbedding, msgEmbedding);
65
+ scored.push({ ...msg, similarity });
66
+ }
67
+ return scored
68
+ .sort((a, b) => b.similarity - a.similarity)
69
+ .slice(0, k);
70
+ }
71
+ //# sourceMappingURL=retriever.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retriever.js","sourceRoot":"","sources":["../../../src/core/rag/retriever.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAkBH,0CA+DC;AA9ED,yCAAmC;AACnC,8CAAsD;AAMtD;;;;;;;GAOG;AACI,KAAK,UAAU,eAAe,CACnC,KAAa,EACb,cAA6B,EAC7B,OAAgB,EAChB,IAAY,EAAE;IAEd,MAAM,cAAc,GAAG,MAAM,IAAA,gBAAK,EAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,CAAC,cAAc;QAAE,OAAO,EAAE,CAAC;IAE/B,8BAA8B;IAC9B,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAEhE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,wCAAwC;QACxC,MAAM,WAAW,GAAG,cAAc;YAChC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC;YACrC,CAAC,CAAC,EAAE,CAAC;QAEP,MAAM,UAAU,GAAG,IAAI,GAAG,EAAmB,CAAC;QAC9C,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAC9B,CAAC;QAED,MAAM,SAAS,GAAuB,EAAE,CAAC;QACzC,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC9C,IAAI,GAAG,EAAE,CAAC;gBACR,+EAA+E;gBAC/E,SAAS,CAAC,IAAI,CAAC;oBACb,GAAG,GAAG;oBACN,UAAU,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ;iBAChC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,6DAA6D;QAC7D,OAAO,SAAS;aACb,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,eAAe,KAAK,cAAc,CAAC;aACtE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC;aAC3C,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,yEAAyE;IACzE,IAAI,CAAC,cAAc;QAAE,OAAO,EAAE,CAAC;IAE/B,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IAErD,gFAAgF;IAChF,IAAI,QAAQ,CAAC,MAAM,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAErC,MAAM,MAAM,GAAuB,EAAE,CAAC;IAEtC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,YAAY,GAAG,MAAM,IAAA,gBAAK,EAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,YAAY;YAAE,SAAS;QAE5B,MAAM,UAAU,GAAG,IAAA,wBAAgB,EAAC,cAAc,EAAE,YAAY,CAAC,CAAC;QAClE,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,MAAM;SACV,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC;SAC3C,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACjB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import Database from 'better-sqlite3';
2
+ export declare function getDbPath(): string;
3
+ export declare function getDb(): Database.Database;
4
+ export declare function closeDb(): void;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAQtC,wBAAgB,SAAS,IAAI,MAAM,CAMlC;AAED,wBAAgB,KAAK,IAAI,QAAQ,CAAC,QAAQ,CAwBzC;AAED,wBAAgB,OAAO,IAAI,IAAI,CAK9B"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getDbPath = getDbPath;
7
+ exports.getDb = getDb;
8
+ exports.closeDb = closeDb;
9
+ const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
10
+ const path_1 = __importDefault(require("path"));
11
+ const os_1 = __importDefault(require("os"));
12
+ const fs_1 = __importDefault(require("fs"));
13
+ const schema_1 = require("./schema");
14
+ let db = null;
15
+ function getDbPath() {
16
+ const dir = path_1.default.join(os_1.default.homedir(), '.opengauge');
17
+ if (!fs_1.default.existsSync(dir)) {
18
+ fs_1.default.mkdirSync(dir, { recursive: true });
19
+ }
20
+ return path_1.default.join(dir, 'opengauge.db');
21
+ }
22
+ function getDb() {
23
+ if (db)
24
+ return db;
25
+ const dbPath = getDbPath();
26
+ db = new better_sqlite3_1.default(dbPath);
27
+ // Enable WAL mode for better concurrent read performance
28
+ db.pragma('journal_mode = WAL');
29
+ db.pragma('foreign_keys = ON');
30
+ // Try to load sqlite-vec extension
31
+ try {
32
+ db.loadExtension('vec0');
33
+ }
34
+ catch {
35
+ // sqlite-vec may not be available; embeddings table will be skipped
36
+ console.warn('sqlite-vec extension not found. Vector search will be unavailable. ' +
37
+ 'Install sqlite-vec for full RAG support.');
38
+ }
39
+ (0, schema_1.initSchema)(db);
40
+ return db;
41
+ }
42
+ function closeDb() {
43
+ if (db) {
44
+ db.close();
45
+ db = null;
46
+ }
47
+ }
48
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":";;;;;AAQA,8BAMC;AAED,sBAwBC;AAED,0BAKC;AA/CD,oEAAsC;AACtC,gDAAwB;AACxB,4CAAoB;AACpB,4CAAoB;AACpB,qCAAsC;AAEtC,IAAI,EAAE,GAA6B,IAAI,CAAC;AAExC,SAAgB,SAAS;IACvB,MAAM,GAAG,GAAG,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;IAClD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,YAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;AACxC,CAAC;AAED,SAAgB,KAAK;IACnB,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAElB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,EAAE,GAAG,IAAI,wBAAQ,CAAC,MAAM,CAAC,CAAC;IAE1B,yDAAyD;IACzD,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAE/B,mCAAmC;IACnC,IAAI,CAAC;QACH,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,oEAAoE;QACpE,OAAO,CAAC,IAAI,CACV,qEAAqE;YACrE,0CAA0C,CAC3C,CAAC;IACJ,CAAC;IAED,IAAA,mBAAU,EAAC,EAAE,CAAC,CAAC;IAEf,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAgB,OAAO;IACrB,IAAI,EAAE,EAAE,CAAC;QACP,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,EAAE,GAAG,IAAI,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1,72 @@
1
+ import Database from 'better-sqlite3';
2
+ export interface Conversation {
3
+ id: string;
4
+ title: string | null;
5
+ provider: string;
6
+ model: string;
7
+ created_at: number;
8
+ updated_at: number;
9
+ }
10
+ export interface Message {
11
+ id: string;
12
+ conversation_id: string;
13
+ role: 'user' | 'assistant' | 'system';
14
+ content: string;
15
+ tokens_raw: number | null;
16
+ tokens_sent: number | null;
17
+ created_at: number;
18
+ }
19
+ export interface TokenUsage {
20
+ id: string;
21
+ conversation_id: string;
22
+ provider: string;
23
+ model: string;
24
+ tokens_in: number;
25
+ tokens_out: number;
26
+ tokens_saved: number;
27
+ cost_estimate: number | null;
28
+ created_at: number;
29
+ }
30
+ export interface Checkpoint {
31
+ id: string;
32
+ conversation_id: string;
33
+ summary: string;
34
+ covers_until: number;
35
+ created_at: number;
36
+ }
37
+ export declare class Queries {
38
+ private db;
39
+ private stmtInsertConversation;
40
+ private stmtUpdateConversation;
41
+ private stmtGetConversation;
42
+ private stmtListConversations;
43
+ private stmtDeleteConversation;
44
+ private stmtInsertMessage;
45
+ private stmtGetMessages;
46
+ private stmtGetMessageCount;
47
+ private stmtInsertTokenUsage;
48
+ private stmtGetTokenUsageByConversation;
49
+ private stmtGetAggregatedTokenUsage;
50
+ private stmtInsertCheckpoint;
51
+ private stmtGetLatestCheckpoint;
52
+ constructor(db: Database.Database);
53
+ createConversation(provider: string, model: string, title?: string): Conversation;
54
+ updateConversation(id: string, title: string): void;
55
+ getConversation(id: string): Conversation | undefined;
56
+ listConversations(): Conversation[];
57
+ deleteConversation(id: string): void;
58
+ insertMessage(conversationId: string, role: 'user' | 'assistant' | 'system', content: string, tokensRaw?: number, tokensSent?: number): Message;
59
+ getMessages(conversationId: string): Message[];
60
+ getMessageCount(conversationId: string): number;
61
+ insertTokenUsage(conversationId: string, provider: string, model: string, tokensIn: number, tokensOut: number, tokensSaved?: number, costEstimate?: number): TokenUsage;
62
+ getTokenUsageByConversation(conversationId: string): TokenUsage[];
63
+ getAggregatedTokenUsage(): any[];
64
+ insertCheckpoint(conversationId: string, summary: string, coversUntil: number): Checkpoint;
65
+ getLatestCheckpoint(conversationId: string): Checkpoint | undefined;
66
+ insertEmbedding(messageId: string, vector: Float32Array): void;
67
+ searchSimilar(queryVector: Float32Array, limit?: number): Array<{
68
+ message_id: string;
69
+ distance: number;
70
+ }>;
71
+ }
72
+ //# sourceMappingURL=queries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/db/queries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Queries = void 0;
4
+ const uuid_1 = require("uuid");
5
+ class Queries {
6
+ db;
7
+ // Prepared statements
8
+ stmtInsertConversation;
9
+ stmtUpdateConversation;
10
+ stmtGetConversation;
11
+ stmtListConversations;
12
+ stmtDeleteConversation;
13
+ stmtInsertMessage;
14
+ stmtGetMessages;
15
+ stmtGetMessageCount;
16
+ stmtInsertTokenUsage;
17
+ stmtGetTokenUsageByConversation;
18
+ stmtGetAggregatedTokenUsage;
19
+ stmtInsertCheckpoint;
20
+ stmtGetLatestCheckpoint;
21
+ constructor(db) {
22
+ this.db = db;
23
+ // Conversation statements
24
+ this.stmtInsertConversation = db.prepare(`
25
+ INSERT INTO conversations (id, title, provider, model, created_at, updated_at)
26
+ VALUES (?, ?, ?, ?, ?, ?)
27
+ `);
28
+ this.stmtUpdateConversation = db.prepare(`
29
+ UPDATE conversations SET title = ?, updated_at = ? WHERE id = ?
30
+ `);
31
+ this.stmtGetConversation = db.prepare(`
32
+ SELECT * FROM conversations WHERE id = ?
33
+ `);
34
+ this.stmtListConversations = db.prepare(`
35
+ SELECT * FROM conversations ORDER BY updated_at DESC
36
+ `);
37
+ this.stmtDeleteConversation = db.prepare(`
38
+ DELETE FROM conversations WHERE id = ?
39
+ `);
40
+ // Message statements
41
+ this.stmtInsertMessage = db.prepare(`
42
+ INSERT INTO messages (id, conversation_id, role, content, tokens_raw, tokens_sent, created_at)
43
+ VALUES (?, ?, ?, ?, ?, ?, ?)
44
+ `);
45
+ this.stmtGetMessages = db.prepare(`
46
+ SELECT * FROM messages WHERE conversation_id = ? ORDER BY created_at ASC
47
+ `);
48
+ this.stmtGetMessageCount = db.prepare(`
49
+ SELECT COUNT(*) as count FROM messages WHERE conversation_id = ?
50
+ `);
51
+ // Token usage statements
52
+ this.stmtInsertTokenUsage = db.prepare(`
53
+ INSERT INTO token_usage (id, conversation_id, provider, model, tokens_in, tokens_out, tokens_saved, cost_estimate, created_at)
54
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
55
+ `);
56
+ this.stmtGetTokenUsageByConversation = db.prepare(`
57
+ SELECT * FROM token_usage WHERE conversation_id = ? ORDER BY created_at DESC
58
+ `);
59
+ this.stmtGetAggregatedTokenUsage = db.prepare(`
60
+ SELECT
61
+ provider,
62
+ model,
63
+ SUM(tokens_in) as total_tokens_in,
64
+ SUM(tokens_out) as total_tokens_out,
65
+ SUM(tokens_saved) as total_tokens_saved,
66
+ SUM(cost_estimate) as total_cost,
67
+ COUNT(*) as request_count
68
+ FROM token_usage
69
+ GROUP BY provider, model
70
+ `);
71
+ // Checkpoint statements
72
+ this.stmtInsertCheckpoint = db.prepare(`
73
+ INSERT INTO checkpoints (id, conversation_id, summary, covers_until, created_at)
74
+ VALUES (?, ?, ?, ?, ?)
75
+ `);
76
+ this.stmtGetLatestCheckpoint = db.prepare(`
77
+ SELECT * FROM checkpoints WHERE conversation_id = ? ORDER BY created_at DESC LIMIT 1
78
+ `);
79
+ }
80
+ // ---- Conversations ----
81
+ createConversation(provider, model, title) {
82
+ const id = (0, uuid_1.v4)();
83
+ const now = Date.now();
84
+ this.stmtInsertConversation.run(id, title || null, provider, model, now, now);
85
+ return { id, title: title || null, provider, model, created_at: now, updated_at: now };
86
+ }
87
+ updateConversation(id, title) {
88
+ this.stmtUpdateConversation.run(title, Date.now(), id);
89
+ }
90
+ getConversation(id) {
91
+ return this.stmtGetConversation.get(id);
92
+ }
93
+ listConversations() {
94
+ return this.stmtListConversations.all();
95
+ }
96
+ deleteConversation(id) {
97
+ this.stmtDeleteConversation.run(id);
98
+ }
99
+ // ---- Messages ----
100
+ insertMessage(conversationId, role, content, tokensRaw, tokensSent) {
101
+ const id = (0, uuid_1.v4)();
102
+ const now = Date.now();
103
+ this.stmtInsertMessage.run(id, conversationId, role, content, tokensRaw ?? null, tokensSent ?? null, now);
104
+ // Update conversation updated_at
105
+ this.stmtUpdateConversation.run(null, now, conversationId);
106
+ // Re-read to keep title if it existed
107
+ const conv = this.getConversation(conversationId);
108
+ if (conv) {
109
+ this.db.prepare('UPDATE conversations SET updated_at = ? WHERE id = ?').run(now, conversationId);
110
+ }
111
+ return { id, conversation_id: conversationId, role, content, tokens_raw: tokensRaw ?? null, tokens_sent: tokensSent ?? null, created_at: now };
112
+ }
113
+ getMessages(conversationId) {
114
+ return this.stmtGetMessages.all(conversationId);
115
+ }
116
+ getMessageCount(conversationId) {
117
+ const row = this.stmtGetMessageCount.get(conversationId);
118
+ return row.count;
119
+ }
120
+ // ---- Token Usage ----
121
+ insertTokenUsage(conversationId, provider, model, tokensIn, tokensOut, tokensSaved = 0, costEstimate) {
122
+ const id = (0, uuid_1.v4)();
123
+ const now = Date.now();
124
+ this.stmtInsertTokenUsage.run(id, conversationId, provider, model, tokensIn, tokensOut, tokensSaved, costEstimate ?? null, now);
125
+ return { id, conversation_id: conversationId, provider, model, tokens_in: tokensIn, tokens_out: tokensOut, tokens_saved: tokensSaved, cost_estimate: costEstimate ?? null, created_at: now };
126
+ }
127
+ getTokenUsageByConversation(conversationId) {
128
+ return this.stmtGetTokenUsageByConversation.all(conversationId);
129
+ }
130
+ getAggregatedTokenUsage() {
131
+ return this.stmtGetAggregatedTokenUsage.all();
132
+ }
133
+ // ---- Checkpoints ----
134
+ insertCheckpoint(conversationId, summary, coversUntil) {
135
+ const id = (0, uuid_1.v4)();
136
+ const now = Date.now();
137
+ this.stmtInsertCheckpoint.run(id, conversationId, summary, coversUntil, now);
138
+ return { id, conversation_id: conversationId, summary, covers_until: coversUntil, created_at: now };
139
+ }
140
+ getLatestCheckpoint(conversationId) {
141
+ return this.stmtGetLatestCheckpoint.get(conversationId);
142
+ }
143
+ // ---- Embeddings ----
144
+ insertEmbedding(messageId, vector) {
145
+ try {
146
+ this.db.prepare('INSERT INTO embeddings (message_id, vector) VALUES (?, ?)').run(messageId, Buffer.from(vector.buffer));
147
+ }
148
+ catch {
149
+ // sqlite-vec not available
150
+ }
151
+ }
152
+ searchSimilar(queryVector, limit = 15) {
153
+ try {
154
+ const rows = this.db.prepare(`
155
+ SELECT message_id, distance
156
+ FROM embeddings
157
+ WHERE vector MATCH ?
158
+ ORDER BY distance
159
+ LIMIT ?
160
+ `).all(Buffer.from(queryVector.buffer), limit);
161
+ return rows;
162
+ }
163
+ catch {
164
+ return [];
165
+ }
166
+ }
167
+ }
168
+ exports.Queries = Queries;
169
+ //# sourceMappingURL=queries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/db/queries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import Database from 'better-sqlite3';
2
+ export declare function initSchema(db: Database.Database): void;
3
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,wBAAgB,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAkEtD"}
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.initSchema = initSchema;
4
+ function initSchema(db) {
5
+ db.exec(`
6
+ -- Conversations
7
+ CREATE TABLE IF NOT EXISTS conversations (
8
+ id TEXT PRIMARY KEY,
9
+ title TEXT,
10
+ provider TEXT NOT NULL,
11
+ model TEXT NOT NULL,
12
+ created_at INTEGER NOT NULL,
13
+ updated_at INTEGER NOT NULL
14
+ );
15
+
16
+ -- Messages
17
+ CREATE TABLE IF NOT EXISTS messages (
18
+ id TEXT PRIMARY KEY,
19
+ conversation_id TEXT NOT NULL REFERENCES conversations(id) ON DELETE CASCADE,
20
+ role TEXT NOT NULL CHECK (role IN ('user', 'assistant', 'system')),
21
+ content TEXT NOT NULL,
22
+ tokens_raw INTEGER,
23
+ tokens_sent INTEGER,
24
+ created_at INTEGER NOT NULL
25
+ );
26
+
27
+ CREATE INDEX IF NOT EXISTS idx_messages_conversation
28
+ ON messages(conversation_id, created_at);
29
+
30
+ -- Token usage analytics
31
+ CREATE TABLE IF NOT EXISTS token_usage (
32
+ id TEXT PRIMARY KEY,
33
+ conversation_id TEXT NOT NULL REFERENCES conversations(id) ON DELETE CASCADE,
34
+ provider TEXT NOT NULL,
35
+ model TEXT NOT NULL,
36
+ tokens_in INTEGER NOT NULL,
37
+ tokens_out INTEGER NOT NULL,
38
+ tokens_saved INTEGER DEFAULT 0,
39
+ cost_estimate REAL,
40
+ created_at INTEGER NOT NULL
41
+ );
42
+
43
+ CREATE INDEX IF NOT EXISTS idx_token_usage_conversation
44
+ ON token_usage(conversation_id);
45
+
46
+ -- Conversation checkpoints
47
+ CREATE TABLE IF NOT EXISTS checkpoints (
48
+ id TEXT PRIMARY KEY,
49
+ conversation_id TEXT NOT NULL REFERENCES conversations(id) ON DELETE CASCADE,
50
+ summary TEXT NOT NULL,
51
+ covers_until INTEGER NOT NULL,
52
+ created_at INTEGER NOT NULL
53
+ );
54
+
55
+ CREATE INDEX IF NOT EXISTS idx_checkpoints_conversation
56
+ ON checkpoints(conversation_id);
57
+ `);
58
+ // Try creating the embeddings virtual table (requires sqlite-vec)
59
+ try {
60
+ db.exec(`
61
+ CREATE VIRTUAL TABLE IF NOT EXISTS embeddings USING vec0(
62
+ message_id TEXT PRIMARY KEY,
63
+ vector FLOAT[384]
64
+ );
65
+ `);
66
+ }
67
+ catch {
68
+ // sqlite-vec not available — skip
69
+ }
70
+ }
71
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":";;AAEA,gCAkEC;AAlED,SAAgB,UAAU,CAAC,EAAqB;IAC9C,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDP,CAAC,CAAC;IAEH,kEAAkE;IAClE,IAAI,CAAC;QACH,EAAE,CAAC,IAAI,CAAC;;;;;KAKP,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,kCAAkC;IACpC,CAAC;AACH,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Configuration management — reads/writes YAML config
3
+ */
4
+ import { ProviderConfig, ProviderName } from '../core/providers/adapter';
5
+ export interface AppConfig {
6
+ providers: Partial<Record<ProviderName, ProviderConfig>>;
7
+ defaults?: {
8
+ provider?: ProviderName;
9
+ system_prompt?: string;
10
+ };
11
+ optimizer?: {
12
+ compression_level?: number;
13
+ checkpoint_interval?: number;
14
+ keep_recent?: number;
15
+ rag_top_k?: number;
16
+ target_savings_percent?: number;
17
+ quality_floor_tokens?: number;
18
+ };
19
+ }
20
+ export declare function getConfigPath(): string;
21
+ export declare function loadConfig(): AppConfig;
22
+ export declare function saveConfig(config: AppConfig): void;
23
+ export declare function updateProviderConfig(providerName: ProviderName, providerConfig: ProviderConfig): AppConfig;
24
+ export declare function getDefaultProvider(config: AppConfig): ProviderName | null;
25
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/server/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzE,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC,CAAC;IACzD,QAAQ,CAAC,EAAE;QACT,QAAQ,CAAC,EAAE,YAAY,CAAC;QACxB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,SAAS,CAAC,EAAE;QACV,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,sBAAsB,CAAC,EAAE,MAAM,CAAC;QAChC,oBAAoB,CAAC,EAAE,MAAM,CAAC;KAC/B,CAAC;CACH;AAKD,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,UAAU,IAAI,SAAS,CAWtC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAYlD;AAED,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,YAAY,EAC1B,cAAc,EAAE,cAAc,GAC7B,SAAS,CAQX;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,YAAY,GAAG,IAAI,CAazE"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ /**
3
+ * Configuration management — reads/writes YAML config
4
+ */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.getConfigPath = getConfigPath;
10
+ exports.loadConfig = loadConfig;
11
+ exports.saveConfig = saveConfig;
12
+ exports.updateProviderConfig = updateProviderConfig;
13
+ exports.getDefaultProvider = getDefaultProvider;
14
+ const fs_1 = __importDefault(require("fs"));
15
+ const path_1 = __importDefault(require("path"));
16
+ const os_1 = __importDefault(require("os"));
17
+ const js_yaml_1 = __importDefault(require("js-yaml"));
18
+ const CONFIG_DIR = path_1.default.join(os_1.default.homedir(), '.opengauge');
19
+ const CONFIG_PATH = path_1.default.join(CONFIG_DIR, 'config.yml');
20
+ function getConfigPath() {
21
+ return CONFIG_PATH;
22
+ }
23
+ function loadConfig() {
24
+ try {
25
+ if (fs_1.default.existsSync(CONFIG_PATH)) {
26
+ const content = fs_1.default.readFileSync(CONFIG_PATH, 'utf-8');
27
+ const config = js_yaml_1.default.load(content);
28
+ return config || { providers: {} };
29
+ }
30
+ }
31
+ catch (error) {
32
+ console.warn('Failed to load config:', error);
33
+ }
34
+ return { providers: {} };
35
+ }
36
+ function saveConfig(config) {
37
+ if (!fs_1.default.existsSync(CONFIG_DIR)) {
38
+ fs_1.default.mkdirSync(CONFIG_DIR, { recursive: true });
39
+ }
40
+ const content = js_yaml_1.default.dump(config, {
41
+ indent: 2,
42
+ lineWidth: -1,
43
+ noRefs: true,
44
+ });
45
+ fs_1.default.writeFileSync(CONFIG_PATH, content, 'utf-8');
46
+ }
47
+ function updateProviderConfig(providerName, providerConfig) {
48
+ const config = loadConfig();
49
+ config.providers[providerName] = {
50
+ ...config.providers[providerName],
51
+ ...providerConfig,
52
+ };
53
+ saveConfig(config);
54
+ return config;
55
+ }
56
+ function getDefaultProvider(config) {
57
+ if (config.defaults?.provider)
58
+ return config.defaults.provider;
59
+ // Auto-detect: use the first configured provider
60
+ const providers = Object.keys(config.providers);
61
+ for (const name of providers) {
62
+ const p = config.providers[name];
63
+ if (p?.api_key || name === 'ollama') {
64
+ return name;
65
+ }
66
+ }
67
+ return null;
68
+ }
69
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/server/config.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;AA2BH,sCAEC;AAED,gCAWC;AAED,gCAYC;AAED,oDAWC;AAED,gDAaC;AAlFD,4CAAoB;AACpB,gDAAwB;AACxB,4CAAoB;AACpB,sDAA2B;AAmB3B,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;AACzD,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AAExD,SAAgB,aAAa;IAC3B,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAgB,UAAU;IACxB,IAAI,CAAC;QACH,IAAI,YAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,iBAAI,CAAC,IAAI,CAAC,OAAO,CAAc,CAAC;YAC/C,OAAO,MAAM,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;QACrC,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;AAC3B,CAAC;AAED,SAAgB,UAAU,CAAC,MAAiB;IAC1C,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,YAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,OAAO,GAAG,iBAAI,CAAC,IAAI,CAAC,MAAM,EAAE;QAChC,MAAM,EAAE,CAAC;QACT,SAAS,EAAE,CAAC,CAAC;QACb,MAAM,EAAE,IAAI;KACb,CAAC,CAAC;IAEH,YAAE,CAAC,aAAa,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAClD,CAAC;AAED,SAAgB,oBAAoB,CAClC,YAA0B,EAC1B,cAA8B;IAE9B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG;QAC/B,GAAG,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC;QACjC,GAAG,cAAc;KAClB,CAAC;IACF,UAAU,CAAC,MAAM,CAAC,CAAC;IACnB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,kBAAkB,CAAC,MAAiB;IAClD,IAAI,MAAM,CAAC,QAAQ,EAAE,QAAQ;QAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAE/D,iDAAiD;IACjD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAmB,CAAC;IAClE,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,MAAM,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,EAAE,OAAO,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Fastify server setup for OpenGauge
3
+ */
4
+ export declare function createServer(port?: number): Promise<import("fastify").FastifyInstance<import("http").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>, import("http").IncomingMessage, import("http").ServerResponse<import("http").IncomingMessage>, import("fastify").FastifyBaseLogger, import("fastify").FastifyTypeProviderDefault>>;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,wBAAsB,YAAY,CAAC,IAAI,GAAE,MAAa,oUAkDrD"}