overmind-mcp 2.4.2 → 2.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/.mcp.json.example +21 -0
  2. package/README.md +107 -80
  3. package/assets/overmind.png +0 -0
  4. package/bin/.gitkeep +0 -0
  5. package/bin/README.md +34 -0
  6. package/bin/install-overmind-unix.sh +412 -0
  7. package/bin/install-overmind-windows.bat +407 -0
  8. package/dist/bin/cli.js +438 -7
  9. package/dist/bin/cli.js.map +1 -1
  10. package/dist/index.d.ts +2 -2
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +3 -2
  13. package/dist/index.js.map +1 -1
  14. package/dist/lib/config.d.ts +31 -1
  15. package/dist/lib/config.d.ts.map +1 -1
  16. package/dist/lib/config.js +19 -27
  17. package/dist/lib/config.js.map +1 -1
  18. package/dist/lib/sessions.d.ts +3 -2
  19. package/dist/lib/sessions.d.ts.map +1 -1
  20. package/dist/lib/sessions.js +94 -25
  21. package/dist/lib/sessions.js.map +1 -1
  22. package/dist/memory/MemoryFactory.d.ts +15 -1
  23. package/dist/memory/MemoryFactory.d.ts.map +1 -1
  24. package/dist/memory/MemoryFactory.js +53 -3
  25. package/dist/memory/MemoryFactory.js.map +1 -1
  26. package/dist/memory/PostgresMemoryProvider.d.ts +7 -0
  27. package/dist/memory/PostgresMemoryProvider.d.ts.map +1 -1
  28. package/dist/memory/PostgresMemoryProvider.js +180 -105
  29. package/dist/memory/PostgresMemoryProvider.js.map +1 -1
  30. package/dist/server.d.ts +41 -0
  31. package/dist/server.d.ts.map +1 -1
  32. package/dist/server.js +152 -26
  33. package/dist/server.js.map +1 -1
  34. package/dist/services/AgentManager.d.ts.map +1 -1
  35. package/dist/services/AgentManager.js +67 -11
  36. package/dist/services/AgentManager.js.map +1 -1
  37. package/dist/services/ClaudeRunner.d.ts +8 -0
  38. package/dist/services/ClaudeRunner.d.ts.map +1 -1
  39. package/dist/services/ClaudeRunner.js +514 -213
  40. package/dist/services/ClaudeRunner.js.map +1 -1
  41. package/dist/services/ClineRunner.d.ts +7 -0
  42. package/dist/services/ClineRunner.d.ts.map +1 -1
  43. package/dist/services/ClineRunner.js +80 -11
  44. package/dist/services/ClineRunner.js.map +1 -1
  45. package/dist/services/GeminiRunner.d.ts +6 -0
  46. package/dist/services/GeminiRunner.d.ts.map +1 -1
  47. package/dist/services/GeminiRunner.js +285 -58
  48. package/dist/services/GeminiRunner.js.map +1 -1
  49. package/dist/services/KiloRunner.d.ts +12 -0
  50. package/dist/services/KiloRunner.d.ts.map +1 -1
  51. package/dist/services/KiloRunner.js +441 -57
  52. package/dist/services/KiloRunner.js.map +1 -1
  53. package/dist/services/OpenClawRunner.d.ts +7 -0
  54. package/dist/services/OpenClawRunner.d.ts.map +1 -1
  55. package/dist/services/OpenClawRunner.js +79 -11
  56. package/dist/services/OpenClawRunner.js.map +1 -1
  57. package/dist/services/OpenCodeRunner.d.ts +7 -0
  58. package/dist/services/OpenCodeRunner.d.ts.map +1 -1
  59. package/dist/services/OpenCodeRunner.js +79 -11
  60. package/dist/services/OpenCodeRunner.js.map +1 -1
  61. package/dist/tools/config_example.d.ts +7 -4
  62. package/dist/tools/config_example.d.ts.map +1 -1
  63. package/dist/tools/config_example.js +191 -86
  64. package/dist/tools/config_example.js.map +1 -1
  65. package/dist/tools/create_agent.d.ts +15 -9
  66. package/dist/tools/create_agent.d.ts.map +1 -1
  67. package/dist/tools/create_agent.js +8 -9
  68. package/dist/tools/create_agent.js.map +1 -1
  69. package/dist/tools/get_agent_configs.d.ts +10 -4
  70. package/dist/tools/get_agent_configs.d.ts.map +1 -1
  71. package/dist/tools/get_agent_configs.js.map +1 -1
  72. package/dist/tools/manage_agents.d.ts +36 -18
  73. package/dist/tools/manage_agents.d.ts.map +1 -1
  74. package/dist/tools/manage_agents.js +2 -2
  75. package/dist/tools/manage_agents.js.map +1 -1
  76. package/dist/tools/manage_prompts.d.ts +13 -8
  77. package/dist/tools/manage_prompts.d.ts.map +1 -1
  78. package/dist/tools/manage_prompts.js.map +1 -1
  79. package/dist/tools/memory_runs.d.ts +3 -4
  80. package/dist/tools/memory_runs.d.ts.map +1 -1
  81. package/dist/tools/memory_runs.js.map +1 -1
  82. package/dist/tools/memory_search.d.ts +3 -4
  83. package/dist/tools/memory_search.d.ts.map +1 -1
  84. package/dist/tools/memory_search.js.map +1 -1
  85. package/dist/tools/memory_store.d.ts +11 -5
  86. package/dist/tools/memory_store.d.ts.map +1 -1
  87. package/dist/tools/memory_store.js.map +1 -1
  88. package/dist/tools/run_agent.d.ts +15 -16
  89. package/dist/tools/run_agent.d.ts.map +1 -1
  90. package/dist/tools/run_agent.js +128 -160
  91. package/dist/tools/run_agent.js.map +1 -1
  92. package/dist/tools/run_claude.d.ts +8 -3
  93. package/dist/tools/run_claude.d.ts.map +1 -1
  94. package/dist/tools/run_claude.js +59 -41
  95. package/dist/tools/run_claude.js.map +1 -1
  96. package/dist/tools/run_cline.d.ts +13 -4
  97. package/dist/tools/run_cline.d.ts.map +1 -1
  98. package/dist/tools/run_cline.js +55 -43
  99. package/dist/tools/run_cline.js.map +1 -1
  100. package/dist/tools/run_gemini.d.ts +13 -4
  101. package/dist/tools/run_gemini.d.ts.map +1 -1
  102. package/dist/tools/run_gemini.js +53 -33
  103. package/dist/tools/run_gemini.js.map +1 -1
  104. package/dist/tools/run_kilo.d.ts +17 -7
  105. package/dist/tools/run_kilo.d.ts.map +1 -1
  106. package/dist/tools/run_kilo.js +68 -41
  107. package/dist/tools/run_kilo.js.map +1 -1
  108. package/dist/tools/run_openclaw.d.ts +13 -4
  109. package/dist/tools/run_openclaw.d.ts.map +1 -1
  110. package/dist/tools/run_openclaw.js +52 -44
  111. package/dist/tools/run_openclaw.js.map +1 -1
  112. package/dist/tools/run_opencode.d.ts +13 -4
  113. package/dist/tools/run_opencode.d.ts.map +1 -1
  114. package/dist/tools/run_opencode.js +52 -39
  115. package/dist/tools/run_opencode.js.map +1 -1
  116. package/docs/README.md +128 -0
  117. package/docs/agent_control.md +656 -0
  118. package/docs/index.html +493 -0
  119. package/docs/library.html +239 -0
  120. package/docs/prompt.html +1212 -0
  121. package/docs/script.js +428 -0
  122. package/docs/styles.css +2816 -0
  123. package/package.json +55 -25
  124. package/scripts/auto-changelog.mjs +132 -0
  125. package/scripts/auto-install.mjs +322 -0
  126. package/scripts/install-dependencies.mjs +462 -0
  127. package/scripts/postgres-manager.mjs +219 -0
  128. package/scripts/postinstall.mjs +538 -0
  129. package/scripts/setup-overmind-db.mjs +199 -0
  130. package/scripts/setup-windows.js +266 -0
  131. package/scripts/setup.mjs +397 -0
  132. package/scripts/test-installation.mjs +158 -0
  133. package/scripts/uninstall.mjs +238 -0
  134. package/assets/overmind_mcp_pro_banner_v3.png +0 -0
  135. package/dist/services/QwenRunner.d.ts +0 -19
  136. package/dist/services/QwenRunner.d.ts.map +0 -1
  137. package/dist/services/QwenRunner.js +0 -87
  138. package/dist/services/QwenRunner.js.map +0 -1
  139. package/dist/services/TraeRunner.d.ts +0 -19
  140. package/dist/services/TraeRunner.d.ts.map +0 -1
  141. package/dist/services/TraeRunner.js +0 -88
  142. package/dist/services/TraeRunner.js.map +0 -1
  143. package/dist/tools/run_qwen.d.ts +0 -15
  144. package/dist/tools/run_qwen.d.ts.map +0 -1
  145. package/dist/tools/run_qwen.js +0 -61
  146. package/dist/tools/run_qwen.js.map +0 -1
  147. package/dist/tools/run_trae.d.ts +0 -15
  148. package/dist/tools/run_trae.d.ts.map +0 -1
  149. package/dist/tools/run_trae.js +0 -66
  150. package/dist/tools/run_trae.js.map +0 -1
  151. package/dist/tools/shell_execute.d.ts +0 -10
  152. package/dist/tools/shell_execute.d.ts.map +0 -1
  153. package/dist/tools/shell_execute.js +0 -24
  154. package/dist/tools/shell_execute.js.map +0 -1
  155. package/dist/tools/test_agent_control.d.ts +0 -2
  156. package/dist/tools/test_agent_control.d.ts.map +0 -1
  157. package/dist/tools/test_agent_control.js +0 -92
  158. package/dist/tools/test_agent_control.js.map +0 -1
@@ -2,10 +2,13 @@ import os from 'os';
2
2
  import path from 'path';
3
3
  import fs from 'fs';
4
4
  import { fileURLToPath } from 'url';
5
+ import { loadEnvQuietly } from './loadEnv.js';
5
6
  const __filename = fileURLToPath(import.meta.url);
6
7
  const __dirname = path.dirname(__filename);
7
8
  export const DEFAULT_CONFIG = {
8
- TIMEOUT_MS: 300000, // 5 minutes
9
+ TIMEOUT_MS: 3000000, // 50 minutes (timeout global par défaut)
10
+ KEEPALIVE_INTERVAL_MS: 900000, // 15 minutes
11
+ HARD_TIMEOUT_MS: 60000, // 1 minute extra after keepalive
9
12
  CLAUDE: {
10
13
  CORE: '--output-format json',
11
14
  PERMISSIONS: '--dangerously-skip-permissions',
@@ -14,32 +17,21 @@ export const DEFAULT_CONFIG = {
14
17
  MCP: '.mcp.json', // Will be resolved dynamically
15
18
  },
16
19
  },
20
+ KILO: {
21
+ CORE: '--auto',
22
+ DEFAULT_MODEL: 'step 3.5 flash',
23
+ PATHS: {
24
+ SETTINGS: './.claude/settings.json',
25
+ },
26
+ },
27
+ HERMES: {
28
+ CORE: 'chat -q',
29
+ PATHS: {
30
+ SETTINGS: './.hermes/settings.json',
31
+ },
32
+ },
17
33
  };
18
34
  export const CONFIG = { ...DEFAULT_CONFIG };
19
- // Helper to manually parse .env without any noisy console.logs
20
- function loadEnvQuietly(envPath) {
21
- try {
22
- if (fs.existsSync(envPath)) {
23
- const content = fs.readFileSync(envPath, 'utf8');
24
- content.split('\n').forEach((line) => {
25
- const match = line.match(/^\s*([\w.-]+)\s*=\s*(.*)?\s*$/);
26
- if (match) {
27
- const key = match[1];
28
- let value = (match[2] || '').replace(/\s*#.*$/, '').trim();
29
- if (value.startsWith('"') && value.endsWith('"'))
30
- value = value.slice(1, -1);
31
- else if (value.startsWith("'") && value.endsWith("'"))
32
- value = value.slice(1, -1);
33
- if (!process.env[key])
34
- process.env[key] = value;
35
- }
36
- });
37
- }
38
- }
39
- catch (_e) {
40
- // Ignore .env parsing errors
41
- }
42
- }
43
35
  let cachedWorkspaceDir = null;
44
36
  export function resetWorkspaceCache() {
45
37
  cachedWorkspaceDir = null;
@@ -96,10 +88,10 @@ export function getWorkspaceDir() {
96
88
  }
97
89
  // Trigger initial environment loading on module import
98
90
  getWorkspaceDir();
99
- export function resolveConfigPath(configPath) {
91
+ export function resolveConfigPath(configPath, workspaceDirOverride) {
100
92
  if (path.isAbsolute(configPath))
101
93
  return configPath;
102
- const workspaceDir = getWorkspaceDir();
94
+ const workspaceDir = workspaceDirOverride || getWorkspaceDir();
103
95
  const fullPath = path.resolve(workspaceDir, configPath);
104
96
  // Special handling for MCP config to support .local variant
105
97
  if (configPath === '.mcp.json' && !fs.existsSync(fullPath)) {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
- export declare function getLastSessionId(agentName: string): Promise<string | null>;
2
- export declare function saveSessionId(agentName: string, sessionId: string): Promise<void>;
1
+ export declare function getLastSessionId(agentName: string, workspaceDir?: string, runner?: string): Promise<string | null>;
2
+ export declare function saveSessionId(agentName: string, sessionId: string, workspaceDir?: string, runner?: string): Promise<void>;
3
+ export declare function deleteSessionId(agentName: string, workspaceDir?: string, runner?: string): Promise<void>;
3
4
  //# sourceMappingURL=sessions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../src/lib/sessions.ts"],"names":[],"mappings":"AAUA,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAShF;AAED,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBvF"}
1
+ {"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../src/lib/sessions.ts"],"names":[],"mappings":"AAiDA,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,MAAM,EACrB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiBxB;AAED,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,MAAM,EACrB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAwBf;AAED,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,YAAY,CAAC,EAAE,MAAM,EACrB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CA0Bf"}
@@ -1,39 +1,108 @@
1
1
  import fs from 'fs/promises';
2
2
  import path from 'path';
3
+ import { Mutex } from 'async-mutex';
3
4
  import { getWorkspaceDir } from './config.js';
5
+ const sessionMutex = new Mutex();
4
6
  const SESSIONS_FILE = '.claude/sessions.json';
5
- function getSessionsPath() {
6
- return path.resolve(getWorkspaceDir(), SESSIONS_FILE);
7
+ const SESSION_TTL_MS = 30 * 24 * 60 * 60 * 1000;
8
+ function getSessionsPath(workspaceDir) {
9
+ return path.resolve(workspaceDir || getWorkspaceDir(), SESSIONS_FILE);
7
10
  }
8
- export async function getLastSessionId(agentName) {
9
- try {
10
- const filePath = getSessionsPath();
11
- const content = await fs.readFile(filePath, 'utf-8');
12
- const sessions = JSON.parse(content);
13
- return sessions[agentName] || null;
14
- }
15
- catch (_error) {
16
- return null; // File doesn't exist or error reading
11
+ function buildKey(runner, agentName) {
12
+ return runner ? `${runner}:${agentName}` : agentName;
13
+ }
14
+ async function purgeExpired(sessions) {
15
+ const now = Date.now();
16
+ const purged = {};
17
+ let changed = false;
18
+ for (const [key, val] of Object.entries(sessions)) {
19
+ if (typeof val === 'object' && val !== null && 'ts' in val) {
20
+ if (now - val.ts < SESSION_TTL_MS) {
21
+ purged[key] = val;
22
+ }
23
+ else {
24
+ changed = true;
25
+ }
26
+ }
27
+ else {
28
+ purged[key] = val;
29
+ }
17
30
  }
31
+ return changed ? purged : sessions;
32
+ }
33
+ function extractId(val) {
34
+ if (!val)
35
+ return null;
36
+ if (typeof val === 'string')
37
+ return val;
38
+ return val.id || null;
39
+ }
40
+ export async function getLastSessionId(agentName, workspaceDir, runner) {
41
+ return sessionMutex.runExclusive(async () => {
42
+ try {
43
+ const filePath = getSessionsPath(workspaceDir);
44
+ const content = await fs.readFile(filePath, 'utf-8');
45
+ let sessions = JSON.parse(content);
46
+ sessions = await purgeExpired(sessions);
47
+ const namespacedKey = buildKey(runner, agentName);
48
+ if (sessions[namespacedKey]) {
49
+ return extractId(sessions[namespacedKey]);
50
+ }
51
+ return extractId(sessions[agentName]) || null;
52
+ }
53
+ catch (_error) {
54
+ return null;
55
+ }
56
+ });
57
+ }
58
+ export async function saveSessionId(agentName, sessionId, workspaceDir, runner) {
59
+ return sessionMutex.runExclusive(async () => {
60
+ const filePath = getSessionsPath(workspaceDir);
61
+ const dir = path.dirname(filePath);
62
+ try {
63
+ await fs.mkdir(dir, { recursive: true });
64
+ let sessions = {};
65
+ try {
66
+ const content = await fs.readFile(filePath, 'utf-8');
67
+ sessions = JSON.parse(content);
68
+ sessions = await purgeExpired(sessions);
69
+ }
70
+ catch (_e) {
71
+ // Ignore error (file new)
72
+ }
73
+ const key = buildKey(runner, agentName);
74
+ sessions[key] = { id: sessionId, ts: Date.now() };
75
+ await fs.writeFile(filePath, JSON.stringify(sessions, null, 2), 'utf-8');
76
+ }
77
+ catch (error) {
78
+ console.error(`Failed to save session ID for ${agentName}:`, error);
79
+ }
80
+ });
18
81
  }
19
- export async function saveSessionId(agentName, sessionId) {
20
- const filePath = getSessionsPath();
21
- const dir = path.dirname(filePath);
22
- try {
23
- await fs.mkdir(dir, { recursive: true });
24
- let sessions = {};
82
+ export async function deleteSessionId(agentName, workspaceDir, runner) {
83
+ return sessionMutex.runExclusive(async () => {
84
+ const filePath = getSessionsPath(workspaceDir);
25
85
  try {
26
86
  const content = await fs.readFile(filePath, 'utf-8');
27
- sessions = JSON.parse(content);
87
+ let sessions = JSON.parse(content);
88
+ const namespacedKey = buildKey(runner, agentName);
89
+ let deleted = false;
90
+ if (sessions[namespacedKey]) {
91
+ delete sessions[namespacedKey];
92
+ deleted = true;
93
+ }
94
+ if (sessions[agentName]) {
95
+ delete sessions[agentName];
96
+ deleted = true;
97
+ }
98
+ if (deleted) {
99
+ sessions = await purgeExpired(sessions);
100
+ await fs.writeFile(filePath, JSON.stringify(sessions, null, 2), 'utf-8');
101
+ }
28
102
  }
29
103
  catch (_e) {
30
- // Ignore error (file new)
104
+ // Ignore
31
105
  }
32
- sessions[agentName] = sessionId;
33
- await fs.writeFile(filePath, JSON.stringify(sessions, null, 2), 'utf-8');
34
- }
35
- catch (error) {
36
- console.error(`Failed to save session ID for ${agentName}:`, error);
37
- }
106
+ });
38
107
  }
39
108
  //# sourceMappingURL=sessions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/lib/sessions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,aAAa,GAAG,uBAAuB,CAAC;AAE9C,SAAS,eAAe;IACtB,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,aAAa,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,SAAiB;IACtD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACrC,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;IACrC,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC,CAAC,sCAAsC;IACrD,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,SAAiB,EAAE,SAAiB;IACtE,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAC;IACnC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEnC,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEzC,IAAI,QAAQ,GAA2B,EAAE,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrD,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,EAAE,EAAE,CAAC;YACZ,0BAA0B;QAC5B,CAAC;QAED,QAAQ,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;QAChC,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC3E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,iCAAiC,SAAS,GAAG,EAAE,KAAK,CAAC,CAAC;IACtE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/lib/sessions.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,25 @@
1
1
  import { MemoryProvider, StoreRunParams } from './types.js';
2
+ export { registerMemoryAlertCallback, unregisterMemoryAlertCallback } from './PostgresMemoryProvider.js';
2
3
  /**
3
4
  * Gets the PostgreSQL Memory Provider.
4
5
  * SQLite support has been removed to streamline the codebase.
5
6
  */
6
7
  export declare function getMemoryProvider(): MemoryProvider;
8
+ /**
9
+ * Check if memory database is available.
10
+ */
11
+ export declare function isMemoryAvailable(): boolean;
12
+ /**
13
+ * Get last database error message.
14
+ */
15
+ export declare function getLastMemoryError(): string | null;
16
+ /**
17
+ * Initialize memory factory and register alert callbacks.
18
+ */
19
+ export declare function initMemoryFactory(): void;
7
20
  /**
8
21
  * Convenience helper for runners to record activity without fetching the provider manually.
22
+ * THROWS on DB failure to alert the caller - memory failures should not be silent!
9
23
  */
10
- export declare function storeRun(params: StoreRunParams): Promise<string> | string;
24
+ export declare function storeRun(params: StoreRunParams): Promise<string>;
11
25
  //# sourceMappingURL=MemoryFactory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryFactory.d.ts","sourceRoot":"","sources":["../../src/memory/MemoryFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAK5D;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,CAIlD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAEzE"}
1
+ {"version":3,"file":"MemoryFactory.d.ts","sourceRoot":"","sources":["../../src/memory/MemoryFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAc5D,OAAO,EAAE,2BAA2B,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAEzG;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,CAIlD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAElD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CASxC;AAKD;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAmBtE"}
@@ -1,5 +1,11 @@
1
- import { PostgresMemoryProvider } from './PostgresMemoryProvider.js';
1
+ import { PostgresMemoryProvider, registerMemoryAlertCallback, } from './PostgresMemoryProvider.js';
2
+ import pino from 'pino';
3
+ const logger = pino({ name: 'MemoryFactory' });
2
4
  let _provider = null;
5
+ let _isDbAvailable = true;
6
+ let _lastDbError = null;
7
+ // Re-export for external use
8
+ export { registerMemoryAlertCallback, unregisterMemoryAlertCallback } from './PostgresMemoryProvider.js';
3
9
  /**
4
10
  * Gets the PostgreSQL Memory Provider.
5
11
  * SQLite support has been removed to streamline the codebase.
@@ -10,10 +16,54 @@ export function getMemoryProvider() {
10
16
  _provider = new PostgresMemoryProvider();
11
17
  return _provider;
12
18
  }
19
+ /**
20
+ * Check if memory database is available.
21
+ */
22
+ export function isMemoryAvailable() {
23
+ return _isDbAvailable;
24
+ }
25
+ /**
26
+ * Get last database error message.
27
+ */
28
+ export function getLastMemoryError() {
29
+ return _lastDbError;
30
+ }
31
+ /**
32
+ * Initialize memory factory and register alert callbacks.
33
+ */
34
+ export function initMemoryFactory() {
35
+ registerMemoryAlertCallback((message, error) => {
36
+ _isDbAvailable = false;
37
+ _lastDbError = error?.message || message;
38
+ logger.error({ message, error: error?.message }, 'MEMORY ALERT: Database unavailable!');
39
+ // Could trigger additional alerts here (webhooks, notifications, etc.)
40
+ });
41
+ logger.info('MemoryFactory initialized with alert callbacks');
42
+ }
43
+ // Initialize on module load
44
+ initMemoryFactory();
13
45
  /**
14
46
  * Convenience helper for runners to record activity without fetching the provider manually.
47
+ * THROWS on DB failure to alert the caller - memory failures should not be silent!
15
48
  */
16
- export function storeRun(params) {
17
- return getMemoryProvider().storeRun(params);
49
+ export async function storeRun(params) {
50
+ const provider = getMemoryProvider();
51
+ try {
52
+ _isDbAvailable = true;
53
+ _lastDbError = null;
54
+ return await provider.storeRun(params);
55
+ }
56
+ catch (error) {
57
+ _isDbAvailable = false;
58
+ const err = error instanceof Error ? error : new Error(String(error));
59
+ _lastDbError = err.message;
60
+ logger.error({
61
+ error: err.message,
62
+ runner: params.runner,
63
+ agentName: params.agentName,
64
+ }, 'CRITICAL: Failed to store run in memory - database may be unavailable!');
65
+ // Re-throw so the runner can report this to the user
66
+ throw new Error(`MEMORY_UNAVAILABLE: ${err.message}`, { cause: error });
67
+ }
18
68
  }
19
69
  //# sourceMappingURL=MemoryFactory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryFactory.js","sourceRoot":"","sources":["../../src/memory/MemoryFactory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,IAAI,SAAS,GAA0B,IAAI,CAAC;AAE5C;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC;IAChC,SAAS,GAAG,IAAI,sBAAsB,EAAE,CAAC;IACzC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,MAAsB;IAC7C,OAAO,iBAAiB,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC9C,CAAC"}
1
+ {"version":3,"file":"MemoryFactory.js","sourceRoot":"","sources":["../../src/memory/MemoryFactory.ts"],"names":[],"mappings":"AACA,OAAO,EACL,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,6BAA6B,CAAC;AACrC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;AAE/C,IAAI,SAAS,GAA0B,IAAI,CAAC;AAC5C,IAAI,cAAc,GAAG,IAAI,CAAC;AAC1B,IAAI,YAAY,GAAkB,IAAI,CAAC;AAEvC,6BAA6B;AAC7B,OAAO,EAAE,2BAA2B,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAEzG;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC;IAChC,SAAS,GAAG,IAAI,sBAAsB,EAAE,CAAC;IACzC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,2BAA2B,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;QAC7C,cAAc,GAAG,KAAK,CAAC;QACvB,YAAY,GAAG,KAAK,EAAE,OAAO,IAAI,OAAO,CAAC;QACzC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,qCAAqC,CAAC,CAAC;QAExF,uEAAuE;IACzE,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;AAChE,CAAC;AAED,4BAA4B;AAC5B,iBAAiB,EAAE,CAAC;AAEpB;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,MAAsB;IACnD,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;IACrC,IAAI,CAAC;QACH,cAAc,GAAG,IAAI,CAAC;QACtB,YAAY,GAAG,IAAI,CAAC;QACpB,OAAO,MAAM,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,cAAc,GAAG,KAAK,CAAC;QACvB,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACtE,YAAY,GAAG,GAAG,CAAC,OAAO,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC;YACX,KAAK,EAAE,GAAG,CAAC,OAAO;YAClB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,EAAE,wEAAwE,CAAC,CAAC;QAE7E,qDAAqD;QACrD,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC"}
@@ -1,10 +1,16 @@
1
1
  import { MemoryProvider, AgentRun, SearchResult, MemoryStats, StoreRunParams, SearchMemoryParams } from './types.js';
2
+ interface AlertCallback {
3
+ (message: string, error?: Error): void;
4
+ }
5
+ export declare function registerMemoryAlertCallback(callback: AlertCallback): void;
6
+ export declare function unregisterMemoryAlertCallback(callback: AlertCallback): void;
2
7
  export declare class PostgresMemoryProvider implements MemoryProvider {
3
8
  private pools;
4
9
  private initializedDbs;
5
10
  private maintenancePool;
6
11
  private coreDbName;
7
12
  private dbVectorSupport;
13
+ private dbCreationInProgress;
8
14
  constructor();
9
15
  private sanitizeIdentifier;
10
16
  private getDbName;
@@ -25,4 +31,5 @@ export declare class PostgresMemoryProvider implements MemoryProvider {
25
31
  }): Promise<AgentRun[]>;
26
32
  getStats(agentName?: string): Promise<MemoryStats>;
27
33
  }
34
+ export {};
28
35
  //# sourceMappingURL=PostgresMemoryProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PostgresMemoryProvider.d.ts","sourceRoot":"","sources":["../../src/memory/PostgresMemoryProvider.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,cAAc,EACd,kBAAkB,EACnB,MAAM,YAAY,CAAC;AA4DpB,qBAAa,sBAAuB,YAAW,cAAc;IAC3D,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,eAAe,CAAO;IAC9B,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,eAAe,CAA8B;;IAerD,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,SAAS;YAKH,UAAU;YA4BV,oBAAoB;YAmCpB,YAAY;IAoGpB,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAyBjD,cAAc,CAAC,MAAM,EAAE;QAC3B,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,OAAO,CAAC,MAAM,CAAC;IA4Bb,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAkEjE,aAAa,CAAC,MAAM,EAAE;QAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAsBjB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAuBzD"}
1
+ {"version":3,"file":"PostgresMemoryProvider.d.ts","sourceRoot":"","sources":["../../src/memory/PostgresMemoryProvider.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,cAAc,EACd,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAgBpB,UAAU,aAAa;IACrB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;CACxC;AAMD,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAGzE;AAED,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAE3E;AA6BD,qBAAa,sBAAuB,YAAW,cAAc;IAC3D,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,eAAe,CAAO;IAC9B,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,eAAe,CAA8B;IACrD,OAAO,CAAC,oBAAoB,CAAqB;;IAOjD,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,SAAS;YAKH,UAAU;YAqEV,oBAAoB;YA+FpB,YAAY;IAoGpB,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IA8CjD,cAAc,CAAC,MAAM,EAAE;QAC3B,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,OAAO,CAAC,MAAM,CAAC;IA4Bb,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAkEjE,aAAa,CAAC,MAAM,EAAE;QAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAsBjB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAuBzD"}