overmind-mcp 2.6.1 → 2.8.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 (121) hide show
  1. package/.mcp.json.example +41 -21
  2. package/README.md +179 -187
  3. package/bin/README.md +44 -34
  4. package/bin/install-overmind-windows.bat +56 -12
  5. package/dist/bin/cli.js +115 -24
  6. package/dist/bin/cli.js.map +1 -1
  7. package/dist/bin/overmind-client.d.ts +77 -0
  8. package/dist/bin/overmind-client.d.ts.map +1 -0
  9. package/dist/bin/overmind-client.js +221 -0
  10. package/dist/bin/overmind-client.js.map +1 -0
  11. package/dist/lib/agent_lifecycle.d.ts +91 -0
  12. package/dist/lib/agent_lifecycle.d.ts.map +1 -0
  13. package/dist/lib/agent_lifecycle.js +155 -0
  14. package/dist/lib/agent_lifecycle.js.map +1 -0
  15. package/dist/lib/config.d.ts +5 -26
  16. package/dist/lib/config.d.ts.map +1 -1
  17. package/dist/lib/config.js +33 -12
  18. package/dist/lib/config.js.map +1 -1
  19. package/dist/lib/envUtils.d.ts +1 -1
  20. package/dist/lib/envUtils.d.ts.map +1 -1
  21. package/dist/lib/envUtils.js +11 -4
  22. package/dist/lib/envUtils.js.map +1 -1
  23. package/dist/lib/loadEnv.d.ts.map +1 -1
  24. package/dist/lib/loadEnv.js +9 -4
  25. package/dist/lib/loadEnv.js.map +1 -1
  26. package/dist/lib/logger.d.ts.map +1 -1
  27. package/dist/lib/logger.js +20 -4
  28. package/dist/lib/logger.js.map +1 -1
  29. package/dist/lib/orchestration/dispatcher.d.ts.map +1 -1
  30. package/dist/lib/orchestration/dispatcher.js +10 -1
  31. package/dist/lib/orchestration/dispatcher.js.map +1 -1
  32. package/dist/lib/orchestration/swarm.d.ts +1 -0
  33. package/dist/lib/orchestration/swarm.d.ts.map +1 -1
  34. package/dist/lib/orchestration/swarm.js +11 -9
  35. package/dist/lib/orchestration/swarm.js.map +1 -1
  36. package/dist/lib/processRegistry.d.ts +2 -50
  37. package/dist/lib/processRegistry.d.ts.map +1 -1
  38. package/dist/lib/processRegistry.js +191 -286
  39. package/dist/lib/processRegistry.js.map +1 -1
  40. package/dist/memory/MemoryFactory.d.ts.map +1 -1
  41. package/dist/memory/MemoryFactory.js +2 -1
  42. package/dist/memory/MemoryFactory.js.map +1 -1
  43. package/dist/memory/PostgresMemoryProvider.d.ts +1 -0
  44. package/dist/memory/PostgresMemoryProvider.d.ts.map +1 -1
  45. package/dist/memory/PostgresMemoryProvider.js +22 -3
  46. package/dist/memory/PostgresMemoryProvider.js.map +1 -1
  47. package/dist/server.d.ts +1 -1
  48. package/dist/server.d.ts.map +1 -1
  49. package/dist/server.js +84 -80
  50. package/dist/server.js.map +1 -1
  51. package/dist/services/AgentManager.d.ts +1 -0
  52. package/dist/services/AgentManager.d.ts.map +1 -1
  53. package/dist/services/AgentManager.js +27 -1
  54. package/dist/services/AgentManager.js.map +1 -1
  55. package/dist/services/ClaudeRunner.d.ts +0 -12
  56. package/dist/services/ClaudeRunner.d.ts.map +1 -1
  57. package/dist/services/ClaudeRunner.js +26 -132
  58. package/dist/services/ClaudeRunner.js.map +1 -1
  59. package/dist/services/ClineRunner.d.ts.map +1 -1
  60. package/dist/services/ClineRunner.js +16 -7
  61. package/dist/services/ClineRunner.js.map +1 -1
  62. package/dist/services/GeminiRunner.d.ts.map +1 -1
  63. package/dist/services/GeminiRunner.js +13 -6
  64. package/dist/services/GeminiRunner.js.map +1 -1
  65. package/dist/services/KiloRunner.d.ts.map +1 -1
  66. package/dist/services/KiloRunner.js +7 -4
  67. package/dist/services/KiloRunner.js.map +1 -1
  68. package/dist/services/NousHermesRunner.d.ts +4 -0
  69. package/dist/services/NousHermesRunner.d.ts.map +1 -1
  70. package/dist/services/NousHermesRunner.js +131 -34
  71. package/dist/services/NousHermesRunner.js.map +1 -1
  72. package/dist/services/OpenClawRunner.d.ts.map +1 -1
  73. package/dist/services/OpenClawRunner.js +16 -7
  74. package/dist/services/OpenClawRunner.js.map +1 -1
  75. package/dist/services/OpenCodeRunner.d.ts.map +1 -1
  76. package/dist/services/OpenCodeRunner.js +16 -7
  77. package/dist/services/OpenCodeRunner.js.map +1 -1
  78. package/dist/services/PromptManager.d.ts.map +1 -1
  79. package/dist/services/PromptManager.js +4 -0
  80. package/dist/services/PromptManager.js.map +1 -1
  81. package/dist/services/QwenCliRunner.d.ts.map +1 -1
  82. package/dist/services/QwenCliRunner.js +16 -7
  83. package/dist/services/QwenCliRunner.js.map +1 -1
  84. package/dist/tools/agent_control.d.ts +2 -69
  85. package/dist/tools/agent_control.d.ts.map +1 -1
  86. package/dist/tools/agent_control.js +191 -275
  87. package/dist/tools/agent_control.js.map +1 -1
  88. package/dist/tools/config_example.d.ts +2 -2
  89. package/dist/tools/config_example.d.ts.map +1 -1
  90. package/dist/tools/config_example.js +2 -4
  91. package/dist/tools/config_example.js.map +1 -1
  92. package/dist/tools/create_agent.d.ts.map +1 -1
  93. package/dist/tools/create_agent.js +11 -0
  94. package/dist/tools/create_agent.js.map +1 -1
  95. package/dist/tools/manage_agents.d.ts.map +1 -1
  96. package/dist/tools/manage_agents.js +3 -2
  97. package/dist/tools/manage_agents.js.map +1 -1
  98. package/dist/tools/memory_store.d.ts +1 -1
  99. package/dist/tools/run_agent.d.ts +1 -2
  100. package/dist/tools/run_agent.d.ts.map +1 -1
  101. package/dist/tools/run_agent.js +1 -13
  102. package/dist/tools/run_agent.js.map +1 -1
  103. package/dist/tools/run_agent_cli.d.ts +4 -10
  104. package/dist/tools/run_agent_cli.d.ts.map +1 -1
  105. package/dist/tools/run_agent_cli.js +11 -91
  106. package/dist/tools/run_agent_cli.js.map +1 -1
  107. package/dist/tools/run_agents_parallel.d.ts +1 -2
  108. package/dist/tools/run_agents_parallel.d.ts.map +1 -1
  109. package/dist/tools/run_claude.d.ts +0 -1
  110. package/dist/tools/run_claude.d.ts.map +1 -1
  111. package/dist/tools/run_claude.js +1 -9
  112. package/dist/tools/run_claude.js.map +1 -1
  113. package/dist/tools/run_hermes.d.ts +1 -0
  114. package/dist/tools/run_hermes.d.ts.map +1 -1
  115. package/dist/tools/run_hermes.js +4 -3
  116. package/dist/tools/run_hermes.js.map +1 -1
  117. package/docs/agent-http-tutorial.md +527 -0
  118. package/package.json +114 -112
  119. package/scripts/postgres-manager.mjs +0 -0
  120. package/scripts/setup.mjs +0 -0
  121. package/scripts/uninstall.mjs +0 -0
@@ -0,0 +1,91 @@
1
+ /**
2
+ * agent_lifecycle.ts — Lightweight in-memory agent lifecycle manager
3
+ * =================================================================
4
+ *
5
+ * Single source of truth for LIVE agent state during execution.
6
+ * No disk I/O, no async on the hot path.
7
+ *
8
+ * Two layers working together:
9
+ * - agent_lifecycle (RAM): outputBuffer, status, sessionId, PID → O(1) access
10
+ * - processRegistry (disk): persistence, sweeper, OS-level kill
11
+ *
12
+ * Design goals:
13
+ * - appendLiveOutput() → O(1) in-memory string concat, zero disk I/O
14
+ * - agent_control → direct Map read, no disk poll
15
+ * - 10+ agents → all in RAM, zero contention
16
+ * - wait() → AbortController-based, instant resolution
17
+ */
18
+ import { ChildProcess } from 'child_process';
19
+ export type LifecycleStatus = 'running' | 'done' | 'failed' | 'orphaned';
20
+ export interface LiveAgent {
21
+ pid: number;
22
+ runner: string;
23
+ agentName: string;
24
+ sessionId: string;
25
+ status: LifecycleStatus;
26
+ outputBuffer: string;
27
+ exitCode: number | null;
28
+ startedAt: number;
29
+ lastOutputAt: number;
30
+ abortController?: AbortController;
31
+ cleanupFn: () => Promise<void>;
32
+ childRef: ChildProcess | null;
33
+ }
34
+ /**
35
+ * Register a new running agent. Call once per spawn.
36
+ */
37
+ export declare function registerLiveAgent(agent: {
38
+ pid: number;
39
+ runner: string;
40
+ agentName: string;
41
+ sessionId: string;
42
+ abortController?: AbortController;
43
+ cleanupFn: () => Promise<void>;
44
+ childRef: ChildProcess | null;
45
+ }): void;
46
+ /**
47
+ * Append a text chunk to the agent's ring buffer. O(1).
48
+ */
49
+ export declare function appendLiveOutput(pid: number, chunk: string): void;
50
+ /**
51
+ * Update sessionId after the runner resolves it from the JSON response.
52
+ */
53
+ export declare function linkLiveSession(pid: number, sessionId: string): void;
54
+ /**
55
+ * Transition an agent to a terminal state.
56
+ * Resolves any pending wait() via AbortController.abort().
57
+ */
58
+ export declare function setLiveStatus(pid: number, status: LifecycleStatus, exitCode?: number | null): void;
59
+ /**
60
+ * Unregister and remove from map. Called after 'exit' event in the runner.
61
+ */
62
+ export declare function unregisterLiveAgent(pid: number): void;
63
+ /**
64
+ * Get a live agent by agentName (+ optionally by runner).
65
+ */
66
+ export declare function getLiveAgent(agentName: string, runner?: string): LiveAgent | undefined;
67
+ /**
68
+ * Get a live agent by PID.
69
+ */
70
+ export declare function getLiveAgentByPid(pid: number): LiveAgent | undefined;
71
+ /**
72
+ * All currently running agents.
73
+ */
74
+ export declare function getRunningAgents(): LiveAgent[];
75
+ /**
76
+ * Agent counts.
77
+ */
78
+ export declare function getAgentCount(): {
79
+ running: number;
80
+ total: number;
81
+ };
82
+ /**
83
+ * Attach an AbortController to a running agent (for wait() resolution).
84
+ */
85
+ export declare function setLiveAbortController(pid: number, ac: AbortController): void;
86
+ /**
87
+ * Drain all agents — called on SIGTERM/SIGINT.
88
+ * Best-effort cleanup of all running processes.
89
+ */
90
+ export declare function drainAllAgents(): Promise<void>;
91
+ //# sourceMappingURL=agent_lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent_lifecycle.d.ts","sourceRoot":"","sources":["../../src/lib/agent_lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;AAEzE,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,eAAe,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;CAC/B;AAoBD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;CAC/B,GAAG,IAAI,CAoBP;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAKjE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAKpE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,eAAe,EACvB,QAAQ,GAAE,MAAM,GAAG,IAAW,GAC7B,IAAI,CASN;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAMrD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAOtF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAEpE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,SAAS,EAAE,CAE9C;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAMlE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,eAAe,GAAG,IAAI,CAG7E;AAED;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAMpD"}
@@ -0,0 +1,155 @@
1
+ /**
2
+ * agent_lifecycle.ts — Lightweight in-memory agent lifecycle manager
3
+ * =================================================================
4
+ *
5
+ * Single source of truth for LIVE agent state during execution.
6
+ * No disk I/O, no async on the hot path.
7
+ *
8
+ * Two layers working together:
9
+ * - agent_lifecycle (RAM): outputBuffer, status, sessionId, PID → O(1) access
10
+ * - processRegistry (disk): persistence, sweeper, OS-level kill
11
+ *
12
+ * Design goals:
13
+ * - appendLiveOutput() → O(1) in-memory string concat, zero disk I/O
14
+ * - agent_control → direct Map read, no disk poll
15
+ * - 10+ agents → all in RAM, zero contention
16
+ * - wait() → AbortController-based, instant resolution
17
+ */
18
+ const MAX_BUFFER = 256 * 1024;
19
+ // ─── In-memory store ───────────────────────────────────────────────────────────
20
+ const lifecycleMap = new Map();
21
+ const sessionIndex = new Map(); // sessionId → pid
22
+ // ─── Ring-buffer ───────────────────────────────────────────────────────────────
23
+ function appendToRing(existing, chunk) {
24
+ const combined = existing + chunk;
25
+ return combined.length > MAX_BUFFER
26
+ ? combined.slice(-MAX_BUFFER)
27
+ : combined;
28
+ }
29
+ // ─── Lifecycle API ─────────────────────────────────────────────────────────────
30
+ /**
31
+ * Register a new running agent. Call once per spawn.
32
+ */
33
+ export function registerLiveAgent(agent) {
34
+ // Evict any stale entry for the same agentName that is still 'running'
35
+ for (const [pid, a] of lifecycleMap) {
36
+ if (a.agentName === agent.agentName && a.status === 'running') {
37
+ a.status = 'orphaned';
38
+ lifecycleMap.delete(pid);
39
+ }
40
+ }
41
+ const live = {
42
+ ...agent,
43
+ status: 'running',
44
+ outputBuffer: '',
45
+ exitCode: null,
46
+ startedAt: Date.now(),
47
+ lastOutputAt: Date.now(),
48
+ };
49
+ lifecycleMap.set(agent.pid, live);
50
+ if (agent.sessionId)
51
+ sessionIndex.set(agent.sessionId, agent.pid);
52
+ }
53
+ /**
54
+ * Append a text chunk to the agent's ring buffer. O(1).
55
+ */
56
+ export function appendLiveOutput(pid, chunk) {
57
+ const agent = lifecycleMap.get(pid);
58
+ if (!agent)
59
+ return;
60
+ agent.outputBuffer = appendToRing(agent.outputBuffer, chunk);
61
+ agent.lastOutputAt = Date.now();
62
+ }
63
+ /**
64
+ * Update sessionId after the runner resolves it from the JSON response.
65
+ */
66
+ export function linkLiveSession(pid, sessionId) {
67
+ const agent = lifecycleMap.get(pid);
68
+ if (!agent)
69
+ return;
70
+ agent.sessionId = sessionId;
71
+ sessionIndex.set(sessionId, pid);
72
+ }
73
+ /**
74
+ * Transition an agent to a terminal state.
75
+ * Resolves any pending wait() via AbortController.abort().
76
+ */
77
+ export function setLiveStatus(pid, status, exitCode = null) {
78
+ const agent = lifecycleMap.get(pid);
79
+ if (!agent)
80
+ return;
81
+ agent.status = status;
82
+ agent.exitCode = exitCode;
83
+ agent.lastOutputAt = Date.now();
84
+ if (status !== 'running' && agent.abortController) {
85
+ agent.abortController.abort();
86
+ }
87
+ }
88
+ /**
89
+ * Unregister and remove from map. Called after 'exit' event in the runner.
90
+ */
91
+ export function unregisterLiveAgent(pid) {
92
+ const agent = lifecycleMap.get(pid);
93
+ if (agent) {
94
+ if (agent.sessionId)
95
+ sessionIndex.delete(agent.sessionId);
96
+ lifecycleMap.delete(pid);
97
+ }
98
+ }
99
+ /**
100
+ * Get a live agent by agentName (+ optionally by runner).
101
+ */
102
+ export function getLiveAgent(agentName, runner) {
103
+ for (const agent of lifecycleMap.values()) {
104
+ if (agent.agentName === agentName && (runner === undefined || agent.runner === runner)) {
105
+ return agent;
106
+ }
107
+ }
108
+ return undefined;
109
+ }
110
+ /**
111
+ * Get a live agent by PID.
112
+ */
113
+ export function getLiveAgentByPid(pid) {
114
+ return lifecycleMap.get(pid);
115
+ }
116
+ /**
117
+ * All currently running agents.
118
+ */
119
+ export function getRunningAgents() {
120
+ return [...lifecycleMap.values()].filter((a) => a.status === 'running');
121
+ }
122
+ /**
123
+ * Agent counts.
124
+ */
125
+ export function getAgentCount() {
126
+ let running = 0;
127
+ for (const a of lifecycleMap.values()) {
128
+ if (a.status === 'running')
129
+ running++;
130
+ }
131
+ return { running, total: lifecycleMap.size };
132
+ }
133
+ /**
134
+ * Attach an AbortController to a running agent (for wait() resolution).
135
+ */
136
+ export function setLiveAbortController(pid, ac) {
137
+ const agent = lifecycleMap.get(pid);
138
+ if (agent)
139
+ agent.abortController = ac;
140
+ }
141
+ /**
142
+ * Drain all agents — called on SIGTERM/SIGINT.
143
+ * Best-effort cleanup of all running processes.
144
+ */
145
+ export async function drainAllAgents() {
146
+ for (const agent of lifecycleMap.values()) {
147
+ if (agent.status === 'running') {
148
+ try {
149
+ await agent.cleanupFn();
150
+ }
151
+ catch { /* best-effort */ }
152
+ }
153
+ }
154
+ }
155
+ //# sourceMappingURL=agent_lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent_lifecycle.js","sourceRoot":"","sources":["../../src/lib/agent_lifecycle.ts"],"names":[],"mappings":"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"}
@@ -24,34 +24,13 @@ export interface ConfigType {
24
24
  HARD_TIMEOUT_MS: number;
25
25
  KEEPALIVE_INTERVAL_MS: number;
26
26
  }
27
+ declare let PKG_VERSION: string;
28
+ export { PKG_VERSION };
27
29
  export declare const DEFAULT_CONFIG: ConfigType;
28
- export declare const CONFIG: {
29
- CLAUDE: {
30
- CORE: string;
31
- PERMISSIONS: string;
32
- PATHS: {
33
- SETTINGS: string;
34
- MCP: string;
35
- };
36
- };
37
- KILO: {
38
- CORE: string;
39
- DEFAULT_MODEL: string;
40
- PATHS: {
41
- SETTINGS: string;
42
- };
43
- };
44
- HERMES: {
45
- CORE: string;
46
- PATHS: {
47
- SETTINGS: string;
48
- };
49
- };
50
- TIMEOUT_MS: number;
51
- HARD_TIMEOUT_MS: number;
52
- KEEPALIVE_INTERVAL_MS: number;
53
- };
30
+ export declare const CONFIG: ConfigType;
54
31
  export declare function resetWorkspaceCache(): void;
32
+ /** Validate agent name to prevent path traversal */
33
+ export declare function isValidAgentName(name: string): boolean;
55
34
  export declare function getWorkspaceDir(): string;
56
35
  export declare function resolveConfigPath(configPath: string, workspaceDirOverride?: string): string;
57
36
  export declare function updateConfig(newSettingsPath?: string, newMcpPath?: string): void;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE;YACL,QAAQ,EAAE,MAAM,CAAC;YACjB,GAAG,EAAE,MAAM,CAAC;SACb,CAAC;KACH,CAAC;IACF,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,aAAa,EAAE,MAAM,CAAC;QACtB,KAAK,EAAE;YACL,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC;KACH,CAAC;IACF,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE;YACL,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC;KACH,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAKD,eAAO,MAAM,cAAc,EAAE,UAyB5B,CAAC;AAEF,eAAO,MAAM,MAAM;YAxDT;QACN,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE;YACL,QAAQ,EAAE,MAAM,CAAC;YACjB,GAAG,EAAE,MAAM,CAAC;SACb,CAAC;KACH;UACK;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,aAAa,EAAE,MAAM,CAAC;QACtB,KAAK,EAAE;YACL,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC;KACH;YACO;QACN,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE;YACL,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC;KACH;gBACW,MAAM;qBACD,MAAM;2BACA,MAAM;CAiCY,CAAC;AAI5C,wBAAgB,mBAAmB,SAElC;AAED,wBAAgB,eAAe,IAAI,MAAM,CA0DxC;AAKD,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,oBAAoB,CAAC,EAAE,MAAM,GAAG,MAAM,CAa3F;AAED,wBAAgB,YAAY,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,QAGzE"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE;YACL,QAAQ,EAAE,MAAM,CAAC;YACjB,GAAG,EAAE,MAAM,CAAC;SACb,CAAC;KACH,CAAC;IACF,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,aAAa,EAAE,MAAM,CAAC;QACtB,KAAK,EAAE;YACL,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC;KACH,CAAC;IACF,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE;YACL,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC;KACH,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAQD,QAAA,IAAI,WAAW,QAAU,CAAC;AAM1B,OAAO,EAAE,WAAW,EAAE,CAAC;AAEvB,eAAO,MAAM,cAAc,EAAE,UAyB5B,CAAC;AAGF,eAAO,MAAM,MAAM,EAAE,UAAuD,CAAC;AAI7E,wBAAgB,mBAAmB,SAElC;AAED,oDAAoD;AACpD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED,wBAAgB,eAAe,IAAI,MAAM,CA2DxC;AAKD,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,oBAAoB,CAAC,EAAE,MAAM,GAAG,MAAM,CAkB3F;AAED,wBAAgB,YAAY,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,QAGzE"}
@@ -5,16 +5,26 @@ import { fileURLToPath } from 'url';
5
5
  import { loadEnvQuietly } from './loadEnv.js';
6
6
  const __filename = fileURLToPath(import.meta.url);
7
7
  const __dirname = path.dirname(__filename);
8
+ // Version read from package.json at build time
9
+ import { createRequire } from 'module';
10
+ const require = createRequire(import.meta.url);
11
+ let PKG_VERSION = '2.7.0';
12
+ try {
13
+ const pkg = require('../../package.json');
14
+ PKG_VERSION = pkg.version || PKG_VERSION;
15
+ }
16
+ catch { /* fallback */ }
17
+ export { PKG_VERSION };
8
18
  export const DEFAULT_CONFIG = {
9
- TIMEOUT_MS: 3000000, // 50 minutes (timeout global par défaut)
10
- KEEPALIVE_INTERVAL_MS: 900000, // 15 minutes
19
+ TIMEOUT_MS: 900000, // 15 minutes
20
+ KEEPALIVE_INTERVAL_MS: 300000, // 5 minutes (must be < TIMEOUT_MS to actually extend)
11
21
  HARD_TIMEOUT_MS: 60000, // 1 minute extra after keepalive
12
22
  CLAUDE: {
13
23
  CORE: '--output-format json',
14
- PERMISSIONS: '--dangerously-skip-permissions',
24
+ PERMISSIONS: '--dangerously-skip-permissions', // Feature: autonomous mode by default
15
25
  PATHS: {
16
26
  SETTINGS: './.claude/settings.json',
17
- MCP: '.mcp.json', // Will be resolved dynamically
27
+ MCP: '.mcp.json',
18
28
  },
19
29
  },
20
30
  KILO: {
@@ -31,11 +41,16 @@ export const DEFAULT_CONFIG = {
31
41
  },
32
42
  },
33
43
  };
34
- export const CONFIG = { ...DEFAULT_CONFIG };
44
+ // Deep clone to prevent shared references with DEFAULT_CONFIG
45
+ export const CONFIG = JSON.parse(JSON.stringify(DEFAULT_CONFIG));
35
46
  let cachedWorkspaceDir = null;
36
47
  export function resetWorkspaceCache() {
37
48
  cachedWorkspaceDir = null;
38
49
  }
50
+ /** Validate agent name to prevent path traversal */
51
+ export function isValidAgentName(name) {
52
+ return /^[a-zA-Z0-9_-]+$/.test(name) && name.length > 0 && name.length <= 128;
53
+ }
39
54
  export function getWorkspaceDir() {
40
55
  if (cachedWorkspaceDir && process.env.NODE_ENV !== 'test')
41
56
  return cachedWorkspaceDir;
@@ -44,14 +59,12 @@ export function getWorkspaceDir() {
44
59
  workspaceDir = path.resolve(process.env.OVERMIND_WORKSPACE);
45
60
  }
46
61
  else {
47
- // 2. Local Project mode if config exists in current working directory
48
62
  const cwd = process.cwd();
49
63
  if (fs.existsSync(path.join(cwd, '.mcp.json')) ||
50
64
  fs.existsSync(path.join(cwd, '.mcp.local.json'))) {
51
65
  workspaceDir = cwd;
52
66
  }
53
67
  else {
54
- // 3. Search up the tree
55
68
  let current = cwd;
56
69
  while (path.dirname(current) !== current) {
57
70
  if (fs.existsSync(path.join(current, '.mcp.json')) ||
@@ -62,19 +75,23 @@ export function getWorkspaceDir() {
62
75
  current = path.dirname(current);
63
76
  }
64
77
  if (!workspaceDir) {
65
- // 4. Auto-detect from code location
66
78
  const codeRoot = path.resolve(__dirname, '../..');
67
79
  if (fs.existsSync(path.join(codeRoot, '.mcp.json')) ||
68
80
  fs.existsSync(path.join(codeRoot, '.mcp.local.json'))) {
69
81
  workspaceDir = codeRoot;
70
82
  }
71
83
  else {
72
- // 4. Global fallback
73
84
  const homedir = os.homedir();
74
85
  workspaceDir = path.join(homedir, '.overmind-mcp');
75
- if (!fs.existsSync(workspaceDir)) {
76
- fs.mkdirSync(workspaceDir, { recursive: true });
77
- fs.writeFileSync(path.join(workspaceDir, '.mcp.json'), JSON.stringify({ mcpServers: {} }, null, 2));
86
+ try {
87
+ if (!fs.existsSync(workspaceDir)) {
88
+ fs.mkdirSync(workspaceDir, { recursive: true });
89
+ fs.writeFileSync(path.join(workspaceDir, '.mcp.json'), JSON.stringify({ mcpServers: {} }, null, 2));
90
+ }
91
+ }
92
+ catch {
93
+ // Permission errors — fall back to cwd
94
+ workspaceDir = cwd;
78
95
  }
79
96
  }
80
97
  }
@@ -93,6 +110,10 @@ export function resolveConfigPath(configPath, workspaceDirOverride) {
93
110
  return configPath;
94
111
  const workspaceDir = workspaceDirOverride || getWorkspaceDir();
95
112
  const fullPath = path.resolve(workspaceDir, configPath);
113
+ // Prevent path traversal beyond workspace
114
+ if (!fullPath.startsWith(path.resolve(workspaceDir))) {
115
+ throw new Error(`Path traversal detected: ${configPath} resolves outside workspace`);
116
+ }
96
117
  // Special handling for MCP config to support .local variant
97
118
  if (configPath === '.mcp.json' && !fs.existsSync(fullPath)) {
98
119
  const localPath = path.resolve(workspaceDir, '.mcp.local.json');
@@ -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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"}
@@ -5,6 +5,6 @@
5
5
  type Interpolatable = string | number | boolean | null | undefined | Interpolatable[] | {
6
6
  [key: string]: Interpolatable;
7
7
  };
8
- export declare function interpolateEnvVars(obj: Interpolatable): Interpolatable;
8
+ export declare function interpolateEnvVars(obj: Interpolatable, visited?: WeakSet<object>): Interpolatable;
9
9
  export {};
10
10
  //# sourceMappingURL=envUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"envUtils.d.ts","sourceRoot":"","sources":["../../src/lib/envUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,KAAK,cAAc,GACf,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,GACT,cAAc,EAAE,GAChB;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAAA;CAAE,CAAC;AAEtC,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,cAAc,GAAG,cAAc,CAqBtE"}
1
+ {"version":3,"file":"envUtils.d.ts","sourceRoot":"","sources":["../../src/lib/envUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,KAAK,cAAc,GACf,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,GACT,cAAc,EAAE,GAChB;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAAA;CAAE,CAAC;AAGtC,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,cAAc,EACnB,OAAO,GAAE,OAAO,CAAC,MAAM,CAAiB,GACvC,cAAc,CA4BhB"}
@@ -2,20 +2,27 @@
2
2
  * Environment variable interpolation utility for Overmind.
3
3
  * Allows settings.json to use $VAR or ${VAR} syntax to reference values from .env
4
4
  */
5
- export function interpolateEnvVars(obj) {
5
+ // Track visited objects to prevent infinite recursion from circular references
6
+ export function interpolateEnvVars(obj, visited = new WeakSet()) {
6
7
  if (typeof obj === 'string') {
8
+ // Replace unresolved vars with empty string instead of literal $VAR
7
9
  return obj.replace(/\$(\w+)|\${(\w+)}/g, (_, name1, name2) => {
8
10
  const name = name1 || name2;
9
- return process.env[name] || `$${name}`;
11
+ return process.env[name] ?? '';
10
12
  });
11
13
  }
12
14
  if (Array.isArray(obj)) {
13
- return obj.map(interpolateEnvVars);
15
+ return obj.map((item) => interpolateEnvVars(item, visited));
14
16
  }
15
17
  if (obj !== null && typeof obj === 'object') {
18
+ // Circular reference detection
19
+ if (visited.has(obj)) {
20
+ return obj; // Break cycle
21
+ }
22
+ visited.add(obj);
16
23
  const result = {};
17
24
  for (const [key, value] of Object.entries(obj)) {
18
- result[key] = interpolateEnvVars(value);
25
+ result[key] = interpolateEnvVars(value, visited);
19
26
  }
20
27
  return result;
21
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"envUtils.js","sourceRoot":"","sources":["../../src/lib/envUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,MAAM,UAAU,kBAAkB,CAAC,GAAmB;IACpD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YAC3D,MAAM,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC;YAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAmC,EAAE,CAAC;QAClD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,MAAM,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"envUtils.js","sourceRoot":"","sources":["../../src/lib/envUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,+EAA+E;AAC/E,MAAM,UAAU,kBAAkB,CAChC,GAAmB,EACnB,UAA2B,IAAI,OAAO,EAAE;IAExC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,oEAAoE;QACpE,OAAO,GAAG,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YAC3D,MAAM,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC;YAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5C,+BAA+B;QAC/B,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,OAAO,GAAG,CAAC,CAAC,cAAc;QAC5B,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEjB,MAAM,MAAM,GAAmC,EAAE,CAAC;QAClD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,MAAM,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"loadEnv.d.ts","sourceRoot":"","sources":["../../src/lib/loadEnv.ts"],"names":[],"mappings":"AAEA,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAmBpD"}
1
+ {"version":3,"file":"loadEnv.d.ts","sourceRoot":"","sources":["../../src/lib/loadEnv.ts"],"names":[],"mappings":"AAEA,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAwBpD"}
@@ -4,11 +4,13 @@ export function loadEnvQuietly(envPath) {
4
4
  if (fs.existsSync(envPath)) {
5
5
  const content = fs.readFileSync(envPath, 'utf8');
6
6
  content.split('\n').forEach((line) => {
7
- const match = line.match(/^\s*([\w.-]+)\s*=\s*(.*)?\s*$/);
7
+ const match = line.match(/^\s*([\w.-]+)\s*=\s*(.*)?$/);
8
8
  if (match) {
9
9
  const key = match[1];
10
10
  let value = match[2] || '';
11
- value = value.replace(/\s*#.*$/, '').trim();
11
+ // Strip inline comments ONLY after whitespace+#, not # inside values
12
+ // This preserves # in API keys, URLs with fragments, etc.
13
+ value = value.replace(/\s+#.*$/, '').trim();
12
14
  if (value.startsWith('"') && value.endsWith('"'))
13
15
  value = value.slice(1, -1);
14
16
  else if (value.startsWith("'") && value.endsWith("'"))
@@ -19,8 +21,11 @@ export function loadEnvQuietly(envPath) {
19
21
  });
20
22
  }
21
23
  }
22
- catch {
23
- // ignore errors
24
+ catch (e) {
25
+ // Log malformed .env instead of silently swallowing
26
+ if (e instanceof Error) {
27
+ console.error(`[loadEnv] Warning: Failed to load ${envPath}: ${e.message}`);
28
+ }
24
29
  }
25
30
  }
26
31
  //# sourceMappingURL=loadEnv.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loadEnv.js","sourceRoot":"","sources":["../../src/lib/loadEnv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACjD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;gBAC1D,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBACrB,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC3B,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC5C,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;wBAAE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;yBACxE,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;wBAAE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAClF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;wBAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBAClD,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gBAAgB;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"loadEnv.js","sourceRoot":"","sources":["../../src/lib/loadEnv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACjD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;gBACvD,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBACrB,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC3B,qEAAqE;oBACrE,0DAA0D;oBAC1D,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC5C,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;wBAAE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;yBACxE,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;wBAAE,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAClF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;wBAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBAClD,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,oDAAoD;QACpD,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,qCAAqC,OAAO,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAiExB,eAAO,MAAM,UAAU,6BAkBtB,CAAC;AAGF,eAAO,MAAM,kBAAkB,6BAA+C,CAAC;AAC/E,eAAO,MAAM,WAAW,6BAAwC,CAAC;AACjE,eAAO,MAAM,SAAS,6BAAsC,CAAC;AAC7D,eAAO,MAAM,SAAS,6BAAsC,CAAC;AAI7D,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAgFxB,eAAO,MAAM,UAAU,6BAkBtB,CAAC;AAGF,eAAO,MAAM,kBAAkB,6BAA+C,CAAC;AAC/E,eAAO,MAAM,WAAW,6BAAwC,CAAC;AACjE,eAAO,MAAM,SAAS,6BAAsC,CAAC;AAC7D,eAAO,MAAM,SAAS,6BAAsC,CAAC;AAI7D,eAAe,UAAU,CAAC"}
@@ -1,21 +1,36 @@
1
1
  import pino from 'pino';
2
2
  import path from 'path';
3
+ import fs from 'fs';
3
4
  /**
4
5
  * ============================================================================
5
- * 🚀 SUPER-PINO LOGGER - Workflow Edition (Overmind)
6
+ * 🚀 SUPER-PINO LOGGER - Workflow Edition (Overmind) v2.7.0
6
7
  * ============================================================================
7
8
  */
8
9
  const REDACT_PATHS = [
9
10
  '*.password',
10
11
  '*.api_key',
12
+ '*.apiKey',
11
13
  '*.token',
14
+ '*.auth_token',
15
+ '*.authToken',
12
16
  '*.secret',
17
+ '*.access_token',
18
+ '*.accessToken',
13
19
  'req.headers.authorization',
14
20
  '*.email',
21
+ '*.credential',
15
22
  ];
16
23
  const DEFAULT_LOG_DIR = path.join(process.cwd(), 'logs');
17
24
  const DEFAULT_LOG_FILE = path.join(DEFAULT_LOG_DIR, 'nexus-workflow.log');
18
- const GLOBAL_LOG_PATH = 'C:\\SierraChart\\ACS_Source\\BTCacsil\\btc_ingest\\logs\\nexus-workflow.log';
25
+ let PKG_VERSION = '2.7.0';
26
+ try {
27
+ const pkgPath = path.resolve(process.cwd(), 'package.json');
28
+ if (fs.existsSync(pkgPath)) {
29
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
30
+ PKG_VERSION = pkg.version || PKG_VERSION;
31
+ }
32
+ }
33
+ catch { /* fallback */ }
19
34
  function getFileTargets() {
20
35
  const raw = process.env.LOG_FILES ?? '';
21
36
  const paths = raw
@@ -23,7 +38,8 @@ function getFileTargets() {
23
38
  .map((p) => p.trim())
24
39
  .filter(Boolean);
25
40
  const userPaths = paths.map((p) => (path.isAbsolute(p) ? p : path.resolve(process.cwd(), p)));
26
- return [DEFAULT_LOG_FILE, GLOBAL_LOG_PATH, ...userPaths];
41
+ // Only include default log file + user paths (removed hardcoded global path)
42
+ return [DEFAULT_LOG_FILE, ...userPaths];
27
43
  }
28
44
  const fileTargets = getFileTargets();
29
45
  const transport = pino.transport({
@@ -68,7 +84,7 @@ export const rootLogger = pino({
68
84
  },
69
85
  base: {
70
86
  service: 'workflow-mcp-orchestrator',
71
- version: '1.5.9',
87
+ version: PKG_VERSION,
72
88
  },
73
89
  }, transport);
74
90
  // Specialized Child Loggers
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../../src/lib/orchestration/dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAY,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAI/F,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,GAAG;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAGF,YAAY,EAAE,oBAAoB,EAAE,CAAC;AAErC,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;CAClB;AAID,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAiBD,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,SAAS,EAAE,EACnB,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC;IAAE,OAAO,EAAE,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAuG1E;AAID,wBAAsB,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,eAAe;aA3GzD,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;aAAW,OAAO;GA8GvE"}
1
+ {"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../../../src/lib/orchestration/dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAY,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAI/F,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,GAAG;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAGF,YAAY,EAAE,oBAAoB,EAAE,CAAC;AAErC,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;CAClB;AAID,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAiBD,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,SAAS,EAAE,EACnB,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC;IAAE,OAAO,EAAE,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAmH1E;AAID,wBAAsB,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,eAAe;aAvHzD,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;aAAW,OAAO;GAyHvE"}