@hasna/mementos 0.7.0 → 0.9.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 (34) hide show
  1. package/dist/cli/index.js +1997 -132
  2. package/dist/db/database.d.ts.map +1 -1
  3. package/dist/db/session-jobs.d.ts +49 -0
  4. package/dist/db/session-jobs.d.ts.map +1 -0
  5. package/dist/db/synthesis.d.ts +101 -0
  6. package/dist/db/synthesis.d.ts.map +1 -0
  7. package/dist/index.js +92 -0
  8. package/dist/lib/built-in-hooks.d.ts.map +1 -1
  9. package/dist/lib/open-sessions-connector.d.ts +60 -0
  10. package/dist/lib/open-sessions-connector.d.ts.map +1 -0
  11. package/dist/lib/session-auto-resolve.d.ts +28 -0
  12. package/dist/lib/session-auto-resolve.d.ts.map +1 -0
  13. package/dist/lib/session-processor.d.ts +38 -0
  14. package/dist/lib/session-processor.d.ts.map +1 -0
  15. package/dist/lib/session-queue.d.ts +28 -0
  16. package/dist/lib/session-queue.d.ts.map +1 -0
  17. package/dist/lib/synthesis/corpus-builder.d.ts +30 -0
  18. package/dist/lib/synthesis/corpus-builder.d.ts.map +1 -0
  19. package/dist/lib/synthesis/executor.d.ts +14 -0
  20. package/dist/lib/synthesis/executor.d.ts.map +1 -0
  21. package/dist/lib/synthesis/index.d.ts +37 -0
  22. package/dist/lib/synthesis/index.d.ts.map +1 -0
  23. package/dist/lib/synthesis/llm-analyzer.d.ts +18 -0
  24. package/dist/lib/synthesis/llm-analyzer.d.ts.map +1 -0
  25. package/dist/lib/synthesis/metrics.d.ts +13 -0
  26. package/dist/lib/synthesis/metrics.d.ts.map +1 -0
  27. package/dist/lib/synthesis/scheduler.d.ts +18 -0
  28. package/dist/lib/synthesis/scheduler.d.ts.map +1 -0
  29. package/dist/lib/synthesis/validator.d.ts +19 -0
  30. package/dist/lib/synthesis/validator.d.ts.map +1 -0
  31. package/dist/mcp/index.js +1793 -33
  32. package/dist/server/index.d.ts.map +1 -1
  33. package/dist/server/index.js +1856 -19
  34. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/db/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAmCtC,wBAAgB,SAAS,IAAI,MAAM,CAkBlC;AAiSD,wBAAgB,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,CAerD;AA+BD,wBAAgB,aAAa,IAAI,IAAI,CAKpC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAEpC;AAED,wBAAgB,GAAG,IAAI,MAAM,CAE5B;AAED,wBAAgB,IAAI,IAAI,MAAM,CAE7B;AAED,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAChB,MAAM,GAAG,IAAI,CAef"}
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/db/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAmCtC,wBAAgB,SAAS,IAAI,MAAM,CAkBlC;AAsYD,wBAAgB,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,QAAQ,CAerD;AA+BD,wBAAgB,aAAa,IAAI,IAAI,CAKpC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAEpC;AAED,wBAAgB,GAAG,IAAI,MAAM,CAE5B;AAED,wBAAgB,IAAI,IAAI,MAAM,CAE7B;AAED,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAChB,MAAM,GAAG,IAAI,CAef"}
@@ -0,0 +1,49 @@
1
+ import { Database } from "bun:sqlite";
2
+ export type SessionJobSource = "claude-code" | "codex" | "manual" | "open-sessions";
3
+ export type SessionJobStatus = "pending" | "processing" | "completed" | "failed";
4
+ export interface SessionMemoryJob {
5
+ id: string;
6
+ session_id: string;
7
+ agent_id: string | null;
8
+ project_id: string | null;
9
+ source: SessionJobSource;
10
+ status: SessionJobStatus;
11
+ transcript: string;
12
+ chunk_count: number;
13
+ memories_extracted: number;
14
+ error: string | null;
15
+ metadata: Record<string, unknown>;
16
+ created_at: string;
17
+ started_at: string | null;
18
+ completed_at: string | null;
19
+ }
20
+ export interface CreateSessionJobInput {
21
+ session_id: string;
22
+ transcript: string;
23
+ source?: SessionJobSource;
24
+ agent_id?: string;
25
+ project_id?: string;
26
+ metadata?: Record<string, unknown>;
27
+ }
28
+ export interface SessionJobFilter {
29
+ agent_id?: string;
30
+ project_id?: string;
31
+ status?: SessionJobStatus;
32
+ session_id?: string;
33
+ limit?: number;
34
+ offset?: number;
35
+ }
36
+ export interface UpdateSessionJobInput {
37
+ status?: SessionJobStatus;
38
+ chunk_count?: number;
39
+ memories_extracted?: number;
40
+ error?: string | null;
41
+ started_at?: string | null;
42
+ completed_at?: string | null;
43
+ }
44
+ export declare function createSessionJob(input: CreateSessionJobInput, db?: Database): SessionMemoryJob;
45
+ export declare function getSessionJob(id: string, db?: Database): SessionMemoryJob | null;
46
+ export declare function listSessionJobs(filter?: SessionJobFilter, db?: Database): SessionMemoryJob[];
47
+ export declare function updateSessionJob(id: string, updates: UpdateSessionJobInput, db?: Database): SessionMemoryJob | null;
48
+ export declare function getNextPendingJob(db?: Database): SessionMemoryJob | null;
49
+ //# sourceMappingURL=session-jobs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-jobs.d.ts","sourceRoot":"","sources":["../../src/db/session-jobs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAyB,MAAM,YAAY,CAAC;AAG7D,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,eAAe,CAAC;AACpF,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAC;AAEjF,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,gBAAgB,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AA6BD,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,qBAAqB,EAC5B,EAAE,CAAC,EAAE,QAAQ,GACZ,gBAAgB,CAwBlB;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,gBAAgB,GAAG,IAAI,CAOhF;AAED,wBAAgB,eAAe,CAC7B,MAAM,CAAC,EAAE,gBAAgB,EACzB,EAAE,CAAC,EAAE,QAAQ,GACZ,gBAAgB,EAAE,CAiCpB;AAED,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,qBAAqB,EAC9B,EAAE,CAAC,EAAE,QAAQ,GACZ,gBAAgB,GAAG,IAAI,CAwCzB;AAED,wBAAgB,iBAAiB,CAAC,EAAE,CAAC,EAAE,QAAQ,GAAG,gBAAgB,GAAG,IAAI,CASxE"}
@@ -0,0 +1,101 @@
1
+ import { Database } from "bun:sqlite";
2
+ export interface SynthesisRun {
3
+ id: string;
4
+ triggered_by: "scheduler" | "manual" | "threshold" | "hook";
5
+ project_id: string | null;
6
+ agent_id: string | null;
7
+ corpus_size: number;
8
+ proposals_generated: number;
9
+ proposals_accepted: number;
10
+ proposals_rejected: number;
11
+ status: "pending" | "running" | "completed" | "failed" | "rolled_back";
12
+ error: string | null;
13
+ started_at: string;
14
+ completed_at: string | null;
15
+ }
16
+ export interface SynthesisProposal {
17
+ id: string;
18
+ run_id: string;
19
+ proposal_type: "merge" | "archive" | "promote" | "update_value" | "add_tag" | "remove_duplicate";
20
+ memory_ids: string[];
21
+ target_memory_id: string | null;
22
+ proposed_changes: Record<string, unknown>;
23
+ reasoning: string | null;
24
+ confidence: number;
25
+ status: "pending" | "accepted" | "rejected" | "rolled_back";
26
+ created_at: string;
27
+ executed_at: string | null;
28
+ rollback_data: Record<string, unknown> | null;
29
+ }
30
+ export interface SynthesisMetric {
31
+ id: string;
32
+ run_id: string;
33
+ metric_type: string;
34
+ value: number;
35
+ baseline: number | null;
36
+ created_at: string;
37
+ }
38
+ export interface SynthesisEvent {
39
+ id: string;
40
+ event_type: "recalled" | "searched" | "saved" | "updated" | "deleted" | "injected";
41
+ memory_id: string | null;
42
+ agent_id: string | null;
43
+ project_id: string | null;
44
+ session_id: string | null;
45
+ query: string | null;
46
+ importance_at_time: number | null;
47
+ metadata: Record<string, unknown>;
48
+ created_at: string;
49
+ }
50
+ export declare function createSynthesisRun(input: {
51
+ triggered_by: SynthesisRun["triggered_by"];
52
+ project_id?: string | null;
53
+ agent_id?: string | null;
54
+ corpus_size?: number;
55
+ }, db?: Database): SynthesisRun;
56
+ export declare function getSynthesisRun(id: string, db?: Database): SynthesisRun | null;
57
+ export declare function listSynthesisRuns(filter: {
58
+ project_id?: string | null;
59
+ status?: SynthesisRun["status"];
60
+ limit?: number;
61
+ }, db?: Database): SynthesisRun[];
62
+ export declare function updateSynthesisRun(id: string, updates: Partial<Pick<SynthesisRun, "status" | "error" | "corpus_size" | "proposals_generated" | "proposals_accepted" | "proposals_rejected" | "completed_at">>, db?: Database): SynthesisRun;
63
+ export declare function createProposal(input: {
64
+ run_id: string;
65
+ proposal_type: SynthesisProposal["proposal_type"];
66
+ memory_ids: string[];
67
+ target_memory_id?: string | null;
68
+ proposed_changes: Record<string, unknown>;
69
+ reasoning?: string | null;
70
+ confidence: number;
71
+ }, db?: Database): SynthesisProposal;
72
+ export declare function getProposal(id: string, db?: Database): SynthesisProposal | null;
73
+ export declare function listProposals(run_id: string, filter?: {
74
+ status?: SynthesisProposal["status"];
75
+ }, db?: Database): SynthesisProposal[];
76
+ export declare function updateProposal(id: string, updates: Partial<Pick<SynthesisProposal, "status" | "executed_at" | "rollback_data">>, db?: Database): SynthesisProposal;
77
+ export declare function createMetric(input: {
78
+ run_id: string;
79
+ metric_type: string;
80
+ value: number;
81
+ baseline?: number | null;
82
+ }, db?: Database): SynthesisMetric;
83
+ export declare function listMetrics(run_id: string, db?: Database): SynthesisMetric[];
84
+ export declare function recordSynthesisEvent(input: {
85
+ event_type: SynthesisEvent["event_type"];
86
+ memory_id?: string | null;
87
+ agent_id?: string | null;
88
+ project_id?: string | null;
89
+ session_id?: string | null;
90
+ query?: string | null;
91
+ importance_at_time?: number | null;
92
+ metadata?: Record<string, unknown>;
93
+ }, db?: Database): void;
94
+ export declare function listSynthesisEvents(filter: {
95
+ memory_id?: string;
96
+ project_id?: string;
97
+ event_type?: SynthesisEvent["event_type"];
98
+ since?: string;
99
+ limit?: number;
100
+ }, db?: Database): SynthesisEvent[];
101
+ //# sourceMappingURL=synthesis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"synthesis.d.ts","sourceRoot":"","sources":["../../src/db/synthesis.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -348,6 +348,75 @@ var MIGRATIONS = [
348
348
  INSERT OR IGNORE INTO _migrations (id) VALUES (9);
349
349
  `,
350
350
  `
351
+ CREATE TABLE IF NOT EXISTS synthesis_events (
352
+ id TEXT PRIMARY KEY,
353
+ event_type TEXT NOT NULL CHECK(event_type IN ('recalled','searched','saved','updated','deleted','injected')),
354
+ memory_id TEXT,
355
+ agent_id TEXT,
356
+ project_id TEXT,
357
+ session_id TEXT,
358
+ query TEXT,
359
+ importance_at_time INTEGER,
360
+ metadata TEXT NOT NULL DEFAULT '{}',
361
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
362
+ );
363
+ CREATE INDEX IF NOT EXISTS idx_synthesis_events_memory ON synthesis_events(memory_id);
364
+ CREATE INDEX IF NOT EXISTS idx_synthesis_events_project ON synthesis_events(project_id);
365
+ CREATE INDEX IF NOT EXISTS idx_synthesis_events_type ON synthesis_events(event_type);
366
+ CREATE INDEX IF NOT EXISTS idx_synthesis_events_created ON synthesis_events(created_at);
367
+ INSERT OR IGNORE INTO _migrations (id) VALUES (11);
368
+ `,
369
+ `
370
+ CREATE TABLE IF NOT EXISTS synthesis_runs (
371
+ id TEXT PRIMARY KEY,
372
+ triggered_by TEXT NOT NULL DEFAULT 'manual' CHECK(triggered_by IN ('scheduler','manual','threshold','hook')),
373
+ project_id TEXT,
374
+ agent_id TEXT,
375
+ corpus_size INTEGER NOT NULL DEFAULT 0,
376
+ proposals_generated INTEGER NOT NULL DEFAULT 0,
377
+ proposals_accepted INTEGER NOT NULL DEFAULT 0,
378
+ proposals_rejected INTEGER NOT NULL DEFAULT 0,
379
+ status TEXT NOT NULL DEFAULT 'pending' CHECK(status IN ('pending','running','completed','failed','rolled_back')),
380
+ error TEXT,
381
+ started_at TEXT NOT NULL DEFAULT (datetime('now')),
382
+ completed_at TEXT
383
+ );
384
+ CREATE INDEX IF NOT EXISTS idx_synthesis_runs_project ON synthesis_runs(project_id);
385
+ CREATE INDEX IF NOT EXISTS idx_synthesis_runs_status ON synthesis_runs(status);
386
+ CREATE INDEX IF NOT EXISTS idx_synthesis_runs_started ON synthesis_runs(started_at);
387
+
388
+ CREATE TABLE IF NOT EXISTS synthesis_proposals (
389
+ id TEXT PRIMARY KEY,
390
+ run_id TEXT NOT NULL REFERENCES synthesis_runs(id) ON DELETE CASCADE,
391
+ proposal_type TEXT NOT NULL CHECK(proposal_type IN ('merge','archive','promote','update_value','add_tag','remove_duplicate')),
392
+ memory_ids TEXT NOT NULL DEFAULT '[]',
393
+ target_memory_id TEXT,
394
+ proposed_changes TEXT NOT NULL DEFAULT '{}',
395
+ reasoning TEXT,
396
+ confidence REAL NOT NULL DEFAULT 0.5,
397
+ status TEXT NOT NULL DEFAULT 'pending' CHECK(status IN ('pending','accepted','rejected','rolled_back')),
398
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
399
+ executed_at TEXT,
400
+ rollback_data TEXT
401
+ );
402
+ CREATE INDEX IF NOT EXISTS idx_synthesis_proposals_run ON synthesis_proposals(run_id);
403
+ CREATE INDEX IF NOT EXISTS idx_synthesis_proposals_status ON synthesis_proposals(status);
404
+ CREATE INDEX IF NOT EXISTS idx_synthesis_proposals_type ON synthesis_proposals(proposal_type);
405
+
406
+ CREATE TABLE IF NOT EXISTS synthesis_metrics (
407
+ id TEXT PRIMARY KEY,
408
+ run_id TEXT NOT NULL REFERENCES synthesis_runs(id) ON DELETE CASCADE,
409
+ metric_type TEXT NOT NULL,
410
+ value REAL NOT NULL,
411
+ baseline REAL,
412
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
413
+ );
414
+ CREATE INDEX IF NOT EXISTS idx_synthesis_metrics_run ON synthesis_metrics(run_id);
415
+ CREATE INDEX IF NOT EXISTS idx_synthesis_metrics_type ON synthesis_metrics(metric_type);
416
+
417
+ INSERT OR IGNORE INTO _migrations (id) VALUES (12);
418
+ `,
419
+ `
351
420
  CREATE TABLE IF NOT EXISTS webhook_hooks (
352
421
  id TEXT PRIMARY KEY,
353
422
  type TEXT NOT NULL,
@@ -365,7 +434,30 @@ var MIGRATIONS = [
365
434
  CREATE INDEX IF NOT EXISTS idx_webhook_hooks_type ON webhook_hooks(type);
366
435
  CREATE INDEX IF NOT EXISTS idx_webhook_hooks_enabled ON webhook_hooks(enabled);
367
436
  INSERT OR IGNORE INTO _migrations (id) VALUES (10);
437
+ `,
368
438
  `
439
+ CREATE TABLE IF NOT EXISTS session_memory_jobs (
440
+ id TEXT PRIMARY KEY,
441
+ session_id TEXT NOT NULL,
442
+ agent_id TEXT,
443
+ project_id TEXT,
444
+ source TEXT NOT NULL DEFAULT 'manual' CHECK(source IN ('claude-code','codex','manual','open-sessions')),
445
+ status TEXT NOT NULL DEFAULT 'pending' CHECK(status IN ('pending','processing','completed','failed')),
446
+ transcript TEXT NOT NULL,
447
+ chunk_count INTEGER NOT NULL DEFAULT 0,
448
+ memories_extracted INTEGER NOT NULL DEFAULT 0,
449
+ error TEXT,
450
+ metadata TEXT NOT NULL DEFAULT '{}',
451
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
452
+ started_at TEXT,
453
+ completed_at TEXT
454
+ );
455
+ CREATE INDEX IF NOT EXISTS idx_session_memory_jobs_status ON session_memory_jobs(status);
456
+ CREATE INDEX IF NOT EXISTS idx_session_memory_jobs_agent ON session_memory_jobs(agent_id);
457
+ CREATE INDEX IF NOT EXISTS idx_session_memory_jobs_project ON session_memory_jobs(project_id);
458
+ CREATE INDEX IF NOT EXISTS idx_session_memory_jobs_session ON session_memory_jobs(session_id);
459
+ INSERT OR IGNORE INTO _migrations (id) VALUES (13);
460
+ `
369
461
  ];
370
462
  var _db = null;
371
463
  function getDatabase(dbPath) {
@@ -1 +1 @@
1
- {"version":3,"file":"built-in-hooks.d.ts","sourceRoot":"","sources":["../../src/lib/built-in-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AA2ElD,wBAAgB,kBAAkB,IAAI,IAAI,CAyBzC;AAuBD,wBAAgB,cAAc,IAAI,IAAI,CAGrC;AAGD,YAAY,EAAE,QAAQ,EAAE,CAAC"}
1
+ {"version":3,"file":"built-in-hooks.d.ts","sourceRoot":"","sources":["../../src/lib/built-in-hooks.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAwHlD,wBAAgB,kBAAkB,IAAI,IAAI,CAyBzC;AAuBD,wBAAgB,cAAc,IAAI,IAAI,CAGrC;AAGD,YAAY,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Open-sessions connector — bridge between open-sessions REST API and mementos.
3
+ *
4
+ * When open-sessions ingests a new session, this connector fetches the session
5
+ * transcript and submits it to mementos for memory extraction.
6
+ *
7
+ * Usage:
8
+ * const connector = new OpenSessionsConnector({ openSessionsUrl, mementosUrl });
9
+ * await connector.ingestSession(sessionId, { agentId, projectId });
10
+ * await connector.syncRecentSessions({ since: "2026-03-17", limit: 10 });
11
+ */
12
+ export interface OpenSessionsConnectorConfig {
13
+ /** open-sessions REST API base URL */
14
+ openSessionsUrl: string;
15
+ /** mementos REST API base URL */
16
+ mementosUrl: string;
17
+ /** Optional auth token for open-sessions */
18
+ openSessionsToken?: string;
19
+ /** Default agent ID for extracted memories */
20
+ defaultAgentId?: string;
21
+ /** Default project ID for extracted memories */
22
+ defaultProjectId?: string;
23
+ }
24
+ export interface IngestResult {
25
+ sessionId: string;
26
+ jobId: string;
27
+ status: "queued" | "skipped" | "error";
28
+ message: string;
29
+ }
30
+ export declare class OpenSessionsConnector {
31
+ private config;
32
+ constructor(config: OpenSessionsConnectorConfig);
33
+ /**
34
+ * Fetch a session transcript from open-sessions and ingest into mementos.
35
+ */
36
+ ingestSession(sessionId: string, options?: {
37
+ agentId?: string;
38
+ projectId?: string;
39
+ }): Promise<IngestResult>;
40
+ /**
41
+ * Fetch and ingest multiple recent sessions.
42
+ */
43
+ syncRecentSessions(options?: {
44
+ since?: string;
45
+ limit?: number;
46
+ agentId?: string;
47
+ projectId?: string;
48
+ }): Promise<IngestResult[]>;
49
+ private fetchSessionTranscript;
50
+ private listRecentSessionIds;
51
+ }
52
+ /**
53
+ * Create a connector from environment variables.
54
+ *
55
+ * OPEN_SESSIONS_URL — open-sessions server URL
56
+ * OPEN_SESSIONS_TOKEN — optional auth token
57
+ * MEMENTOS_URL — mementos server URL (default: http://localhost:19428)
58
+ */
59
+ export declare function connectorFromEnv(): OpenSessionsConnector;
60
+ //# sourceMappingURL=open-sessions-connector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-sessions-connector.d.ts","sourceRoot":"","sources":["../../src/lib/open-sessions-connector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,2BAA2B;IAC1C,sCAAsC;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,8CAA8C;IAC9C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gDAAgD;IAChD,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAA8B;gBAEhC,MAAM,EAAE,2BAA2B;IAI/C;;OAEG;IACG,aAAa,CACjB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAO,GACrD,OAAO,CAAC,YAAY,CAAC;IAwCxB;;OAEG;IACG,kBAAkB,CAAC,OAAO,GAAE;QAChC,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;KACf,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;YAelB,sBAAsB;YAiBtB,oBAAoB;CAqBnC;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,IAAI,qBAAqB,CAWxD"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Auto-resolve agent_id and project_id from session metadata.
3
+ * When a session is ingested without explicit agent/project context,
4
+ * try to detect them from available metadata fields.
5
+ */
6
+ import type { Database } from "bun:sqlite";
7
+ export interface AutoResolveResult {
8
+ agentId: string | null;
9
+ projectId: string | null;
10
+ confidence: "high" | "low" | "none";
11
+ method: string;
12
+ }
13
+ /**
14
+ * Attempt to resolve agent_id and project_id from metadata fields.
15
+ *
16
+ * Strategy:
17
+ * 1. If metadata.agentName matches an existing agent → agentId = agent.id, confidence=high
18
+ * 2. If metadata.workingDir matches a registered project path → projectId = project.id, confidence=high
19
+ * 3. If metadata.gitRemote contains a repo name that matches a project name → confidence=low
20
+ * 4. Otherwise confidence=none
21
+ */
22
+ export declare function autoResolveAgentProject(metadata: {
23
+ workingDir?: string;
24
+ agentName?: string;
25
+ gitRemote?: string;
26
+ sessionSource?: string;
27
+ }, db?: Database): AutoResolveResult;
28
+ //# sourceMappingURL=session-auto-resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-auto-resolve.d.ts","sourceRoot":"","sources":["../../src/lib/session-auto-resolve.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAQ3C,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE;IACR,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,EACD,EAAE,CAAC,EAAE,QAAQ,GACZ,iBAAiB,CAsFnB"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Session transcript processor.
3
+ * Takes a full session transcript, chunks it, calls LLM to extract memories,
4
+ * saves extracted memories tagged with session_id + source.
5
+ * All failures are silently caught — never throws.
6
+ */
7
+ import type { Database } from "bun:sqlite";
8
+ export interface ChunkResult {
9
+ chunkIndex: number;
10
+ memoriesExtracted: number;
11
+ }
12
+ export interface ProcessingResult {
13
+ jobId: string;
14
+ chunksProcessed: number;
15
+ memoriesExtracted: number;
16
+ errors: string[];
17
+ }
18
+ /**
19
+ * Split a transcript into chunks with overlap.
20
+ */
21
+ export declare function chunkTranscript(transcript: string, chunkSize?: number, overlap?: number): string[];
22
+ /**
23
+ * Extract memories from a single chunk using the available LLM provider.
24
+ * Returns the count of memories saved.
25
+ */
26
+ export declare function extractMemoriesFromChunk(chunk: string, context: {
27
+ sessionId: string;
28
+ agentId?: string;
29
+ projectId?: string;
30
+ source?: string;
31
+ }, db?: Database): Promise<number>;
32
+ /**
33
+ * Process a session memory job end-to-end.
34
+ * Fetches the job, marks it processing, chunks transcript, extracts memories.
35
+ * Updates job status to completed or failed.
36
+ */
37
+ export declare function processSessionJob(jobId: string, db?: Database): Promise<ProcessingResult>;
38
+ //# sourceMappingURL=session-processor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-processor.d.ts","sourceRoot":"","sources":["../../src/lib/session-processor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAa3C,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAaD;;GAEG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,SAAS,SAAO,EAChB,OAAO,SAAM,GACZ,MAAM,EAAE,CAeV;AAMD;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,MAAM,EACb,OAAO,EAAE;IACP,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,EACD,EAAE,CAAC,EAAE,QAAQ,GACZ,OAAO,CAAC,MAAM,CAAC,CAyHjB;AAMD;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,MAAM,EACb,EAAE,CAAC,EAAE,QAAQ,GACZ,OAAO,CAAC,gBAAgB,CAAC,CA+F3B"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Background queue for session memory job processing.
3
+ * Polls for pending jobs every 5 seconds, processes one at a time (concurrency=1).
4
+ * Fire-and-forget: enqueueSessionJob() returns immediately, processing happens async.
5
+ */
6
+ export interface SessionQueueStats {
7
+ pending: number;
8
+ processing: number;
9
+ completed: number;
10
+ failed: number;
11
+ }
12
+ /**
13
+ * Enqueue a job ID for processing. Fire-and-forget.
14
+ * The background worker will pick it up within the next polling interval.
15
+ */
16
+ export declare function enqueueSessionJob(jobId: string): void;
17
+ /**
18
+ * Get in-memory queue stats.
19
+ * Note: pending/completed/failed counts come from DB when a full scan is needed;
20
+ * this returns a lightweight in-memory snapshot.
21
+ */
22
+ export declare function getSessionQueueStats(): SessionQueueStats;
23
+ /**
24
+ * Start the background polling worker.
25
+ * Idempotent — safe to call multiple times (only starts once).
26
+ */
27
+ export declare function startSessionQueueWorker(): void;
28
+ //# sourceMappingURL=session-queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-queue.d.ts","sourceRoot":"","sources":["../../src/lib/session-queue.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAeD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAMrD;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,iBAAiB,CA6BxD;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAQ9C"}
@@ -0,0 +1,30 @@
1
+ import { Database } from "bun:sqlite";
2
+ import type { Memory } from "../../types/index.js";
3
+ export interface MemoryCorpusItem {
4
+ memory: Memory;
5
+ recallCount: number;
6
+ lastRecalled: string | null;
7
+ searchHits: number;
8
+ similarMemoryIds: string[];
9
+ }
10
+ export interface AnalysisCorpus {
11
+ projectId: string | null;
12
+ totalMemories: number;
13
+ items: MemoryCorpusItem[];
14
+ staleMemories: Memory[];
15
+ duplicateCandidates: Array<{
16
+ a: Memory;
17
+ b: Memory;
18
+ similarity: number;
19
+ }>;
20
+ lowImportanceHighRecall: Memory[];
21
+ highImportanceLowRecall: Memory[];
22
+ generatedAt: string;
23
+ }
24
+ export declare function buildCorpus(options: {
25
+ projectId?: string;
26
+ agentId?: string;
27
+ limit?: number;
28
+ db?: Database;
29
+ }): Promise<AnalysisCorpus>;
30
+ //# sourceMappingURL=corpus-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"corpus-builder.d.ts","sourceRoot":"","sources":["../../../src/lib/synthesis/corpus-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AASnD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,mBAAmB,EAAE,KAAK,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzE,uBAAuB,EAAE,MAAM,EAAE,CAAC;IAClC,uBAAuB,EAAE,MAAM,EAAE,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;CACrB;AAyDD,wBAAsB,WAAW,CAAC,OAAO,EAAE;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,QAAQ,CAAC;CACf,GAAG,OAAO,CAAC,cAAc,CAAC,CAyH1B"}
@@ -0,0 +1,14 @@
1
+ import { Database } from "bun:sqlite";
2
+ import { type SynthesisProposal } from "../../db/synthesis.js";
3
+ export interface ExecutionResult {
4
+ runId: string;
5
+ executed: number;
6
+ failed: number;
7
+ rollbackData: Record<string, unknown>;
8
+ }
9
+ export declare function executeProposals(runId: string, proposals: SynthesisProposal[], db?: Database): Promise<ExecutionResult>;
10
+ export declare function rollbackRun(runId: string, db?: Database): Promise<{
11
+ rolled_back: number;
12
+ errors: string[];
13
+ }>;
14
+ //# sourceMappingURL=executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/lib/synthesis/executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,uBAAuB,CAAC;AAM/B,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAMD,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,iBAAiB,EAAE,EAC9B,EAAE,CAAC,EAAE,QAAQ,GACZ,OAAO,CAAC,eAAe,CAAC,CAsC1B;AAgND,wBAAsB,WAAW,CAC/B,KAAK,EAAE,MAAM,EACb,EAAE,CAAC,EAAE,QAAQ,GACZ,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAmBpD"}
@@ -0,0 +1,37 @@
1
+ import { Database } from "bun:sqlite";
2
+ import { type SynthesisProposal, type SynthesisRun } from "../../db/synthesis.js";
3
+ import { type SafetyConfig } from "./validator.js";
4
+ import { type EffectivenessReport } from "./metrics.js";
5
+ export type { SafetyConfig } from "./validator.js";
6
+ export type { EffectivenessReport } from "./metrics.js";
7
+ export type { AnalysisCorpus, MemoryCorpusItem } from "./corpus-builder.js";
8
+ export type { SynthesisAnalysisResult } from "./llm-analyzer.js";
9
+ export type { ValidationResult, SafetyConfig as SafetyConfigType } from "./validator.js";
10
+ export type { ExecutionResult } from "./executor.js";
11
+ export type { SchedulerConfig, SchedulerState } from "./scheduler.js";
12
+ export interface SynthesisOptions {
13
+ projectId?: string;
14
+ agentId?: string;
15
+ provider?: string;
16
+ maxProposals?: number;
17
+ dryRun?: boolean;
18
+ safetyConfig?: Partial<SafetyConfig>;
19
+ db?: Database;
20
+ }
21
+ export interface SynthesisResult {
22
+ run: SynthesisRun;
23
+ proposals: SynthesisProposal[];
24
+ executed: number;
25
+ metrics: EffectivenessReport | null;
26
+ dryRun: boolean;
27
+ }
28
+ export declare function runSynthesis(options?: SynthesisOptions): Promise<SynthesisResult>;
29
+ export declare function rollbackSynthesis(runId: string, db?: Database): Promise<{
30
+ rolled_back: number;
31
+ errors: string[];
32
+ }>;
33
+ export declare function getSynthesisStatus(runId?: string, projectId?: string, db?: Database): {
34
+ lastRun: SynthesisRun | null;
35
+ recentRuns: SynthesisRun[];
36
+ };
37
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/synthesis/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAML,KAAK,iBAAiB,EACtB,KAAK,YAAY,EAClB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEtE,OAAO,EAAwB,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAM9E,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxD,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5E,YAAY,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACjE,YAAY,EAAE,gBAAgB,EAAE,YAAY,IAAI,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACzF,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAMtE,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IACrC,EAAE,CAAC,EAAE,QAAQ,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,YAAY,CAAC;IAClB,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACpC,MAAM,EAAE,OAAO,CAAC;CACjB;AAMD,wBAAsB,YAAY,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC,CAwJ3F;AAMD,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,MAAM,EACb,EAAE,CAAC,EAAE,QAAQ,GACZ,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAUpD;AAMD,wBAAgB,kBAAkB,CAChC,KAAK,CAAC,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,EAClB,EAAE,CAAC,EAAE,QAAQ,GACZ;IAAE,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;IAAC,UAAU,EAAE,YAAY,EAAE,CAAA;CAAE,CAwB9D"}
@@ -0,0 +1,18 @@
1
+ import type { AnalysisCorpus } from "./corpus-builder.js";
2
+ export interface SynthesisAnalysisResult {
3
+ proposals: Array<{
4
+ type: "merge" | "archive" | "promote" | "update_value" | "add_tag" | "remove_duplicate";
5
+ memory_ids: string[];
6
+ target_memory_id?: string;
7
+ proposed_changes: Record<string, unknown>;
8
+ reasoning: string;
9
+ confidence: number;
10
+ }>;
11
+ summary: string;
12
+ analysisDurationMs: number;
13
+ }
14
+ export declare function analyzeCorpus(corpus: AnalysisCorpus, options?: {
15
+ provider?: string;
16
+ maxProposals?: number;
17
+ }): Promise<SynthesisAnalysisResult>;
18
+ //# sourceMappingURL=llm-analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-analyzer.d.ts","sourceRoot":"","sources":["../../../src/lib/synthesis/llm-analyzer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAM1D,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,KAAK,CAAC;QACf,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,cAAc,GAAG,SAAS,GAAG,kBAAkB,CAAC;QACxF,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC1C,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAyFD,wBAAsB,aAAa,CACjC,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GACrD,OAAO,CAAC,uBAAuB,CAAC,CA8ClC"}
@@ -0,0 +1,13 @@
1
+ import { Database } from "bun:sqlite";
2
+ import { type SynthesisMetric } from "../../db/synthesis.js";
3
+ import type { AnalysisCorpus } from "./corpus-builder.js";
4
+ export interface EffectivenessReport {
5
+ runId: string;
6
+ corpusReduction: number;
7
+ importanceDrift: number;
8
+ deduplicationRate: number;
9
+ estimatedRecallImprovement: number;
10
+ metrics: SynthesisMetric[];
11
+ }
12
+ export declare function measureEffectiveness(runId: string, preCorpus: AnalysisCorpus, db?: Database): Promise<EffectivenessReport>;
13
+ //# sourceMappingURL=metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../src/lib/synthesis/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAM1D,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,0BAA0B,EAAE,MAAM,CAAC;IACnC,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAMD,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,cAAc,EACzB,EAAE,CAAC,EAAE,QAAQ,GACZ,OAAO,CAAC,mBAAmB,CAAC,CAmG9B"}
@@ -0,0 +1,18 @@
1
+ import { Database } from "bun:sqlite";
2
+ import { type SynthesisRun } from "../../db/synthesis.js";
3
+ export interface SchedulerConfig {
4
+ enabled: boolean;
5
+ minMemoriesForTrigger: number;
6
+ minEventsSinceLastRun: number;
7
+ maxRunIntervalHours: number;
8
+ minRunIntervalHours: number;
9
+ }
10
+ export interface SchedulerState {
11
+ lastRunAt: string | null;
12
+ eventsSinceLastRun: number;
13
+ shouldTrigger: boolean;
14
+ reason: string;
15
+ }
16
+ export declare function checkShouldTrigger(projectId: string | null, config?: Partial<SchedulerConfig>, db?: Database): SchedulerState;
17
+ export declare function triggerIfReady(projectId: string | null, agentId: string | null, config?: Partial<SchedulerConfig>, db?: Database): Promise<SynthesisRun | null>;
18
+ //# sourceMappingURL=scheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../../src/lib/synthesis/scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,uBAAuB,CAAC;AAM/B,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAcD,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,EACjC,EAAE,CAAC,EAAE,QAAQ,GACZ,cAAc,CAwFhB;AAMD,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,EACjC,EAAE,CAAC,EAAE,QAAQ,GACZ,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAsB9B"}
@@ -0,0 +1,19 @@
1
+ import type { AnalysisCorpus } from "./corpus-builder.js";
2
+ import type { SynthesisAnalysisResult } from "./llm-analyzer.js";
3
+ export interface ValidationResult {
4
+ valid: boolean;
5
+ rejectedProposals: Array<{
6
+ proposalId: string;
7
+ reason: string;
8
+ }>;
9
+ warnings: string[];
10
+ }
11
+ export interface SafetyConfig {
12
+ maxArchivePercent: number;
13
+ maxMergePercent: number;
14
+ minConfidence: number;
15
+ protectPinned: boolean;
16
+ protectHighImportance: number;
17
+ }
18
+ export declare function validateProposals(proposals: SynthesisAnalysisResult["proposals"], corpus: AnalysisCorpus, config?: Partial<SafetyConfig>): ValidationResult;
19
+ //# sourceMappingURL=validator.d.ts.map