@gotza02/smartagent 1.2.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 (75) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +422 -0
  3. package/dist/config/index.d.ts +72 -0
  4. package/dist/config/index.d.ts.map +1 -0
  5. package/dist/config/index.js +329 -0
  6. package/dist/config/index.js.map +1 -0
  7. package/dist/core/agent-manager.d.ts +116 -0
  8. package/dist/core/agent-manager.d.ts.map +1 -0
  9. package/dist/core/agent-manager.js +460 -0
  10. package/dist/core/agent-manager.js.map +1 -0
  11. package/dist/core/context-manager.d.ts +107 -0
  12. package/dist/core/context-manager.d.ts.map +1 -0
  13. package/dist/core/context-manager.js +467 -0
  14. package/dist/core/context-manager.js.map +1 -0
  15. package/dist/core/database.d.ts +82 -0
  16. package/dist/core/database.d.ts.map +1 -0
  17. package/dist/core/database.js +751 -0
  18. package/dist/core/database.js.map +1 -0
  19. package/dist/core/event-emitter.d.ts +110 -0
  20. package/dist/core/event-emitter.d.ts.map +1 -0
  21. package/dist/core/event-emitter.js +240 -0
  22. package/dist/core/event-emitter.js.map +1 -0
  23. package/dist/core/metrics.d.ts +108 -0
  24. package/dist/core/metrics.d.ts.map +1 -0
  25. package/dist/core/metrics.js +281 -0
  26. package/dist/core/metrics.js.map +1 -0
  27. package/dist/core/middleware.d.ts +63 -0
  28. package/dist/core/middleware.d.ts.map +1 -0
  29. package/dist/core/middleware.js +194 -0
  30. package/dist/core/middleware.js.map +1 -0
  31. package/dist/core/plugin-system.d.ts +86 -0
  32. package/dist/core/plugin-system.d.ts.map +1 -0
  33. package/dist/core/plugin-system.js +251 -0
  34. package/dist/core/plugin-system.js.map +1 -0
  35. package/dist/core/task-scheduler.d.ts +130 -0
  36. package/dist/core/task-scheduler.d.ts.map +1 -0
  37. package/dist/core/task-scheduler.js +401 -0
  38. package/dist/core/task-scheduler.js.map +1 -0
  39. package/dist/engines/auto-router.d.ts +76 -0
  40. package/dist/engines/auto-router.d.ts.map +1 -0
  41. package/dist/engines/auto-router.js +445 -0
  42. package/dist/engines/auto-router.js.map +1 -0
  43. package/dist/engines/parallel-execution.d.ts +104 -0
  44. package/dist/engines/parallel-execution.d.ts.map +1 -0
  45. package/dist/engines/parallel-execution.js +591 -0
  46. package/dist/engines/parallel-execution.js.map +1 -0
  47. package/dist/engines/sequential-thinking.d.ts +88 -0
  48. package/dist/engines/sequential-thinking.d.ts.map +1 -0
  49. package/dist/engines/sequential-thinking.js +406 -0
  50. package/dist/engines/sequential-thinking.js.map +1 -0
  51. package/dist/index.d.ts +12 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +1101 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/security/validation.d.ts +87 -0
  56. package/dist/security/validation.d.ts.map +1 -0
  57. package/dist/security/validation.js +465 -0
  58. package/dist/security/validation.js.map +1 -0
  59. package/dist/tools/filesystem.d.ts +90 -0
  60. package/dist/tools/filesystem.d.ts.map +1 -0
  61. package/dist/tools/filesystem.js +292 -0
  62. package/dist/tools/filesystem.js.map +1 -0
  63. package/dist/tools/terminal.d.ts +99 -0
  64. package/dist/tools/terminal.d.ts.map +1 -0
  65. package/dist/tools/terminal.js +363 -0
  66. package/dist/tools/terminal.js.map +1 -0
  67. package/dist/types/index.d.ts +306 -0
  68. package/dist/types/index.d.ts.map +1 -0
  69. package/dist/types/index.js +54 -0
  70. package/dist/types/index.js.map +1 -0
  71. package/dist/utils/logger.d.ts +22 -0
  72. package/dist/utils/logger.d.ts.map +1 -0
  73. package/dist/utils/logger.js +189 -0
  74. package/dist/utils/logger.js.map +1 -0
  75. package/package.json +71 -0
@@ -0,0 +1,329 @@
1
+ /**
2
+ * Configuration Management System
3
+ * Centralized configuration with environment variable support
4
+ */
5
+ import { homedir } from "os";
6
+ import { join } from "path";
7
+ import { existsSync, readFileSync } from "fs";
8
+ import { logger } from "../utils/logger.js";
9
+ const SMARTAGENT_DIR = join(homedir(), ".smartagent");
10
+ const CONFIG_FILE = join(SMARTAGENT_DIR, "config.json");
11
+ /**
12
+ * Default configuration values
13
+ */
14
+ const DEFAULT_CONFIG = {
15
+ // Agent Management
16
+ maxAgents: 100,
17
+ defaultAgentMode: "plan",
18
+ healthCheckInterval: 30,
19
+ agentTimeout: 300,
20
+ // Sequential Thinking
21
+ sequentialThinking: {
22
+ enableBranching: true,
23
+ enableRevision: true,
24
+ maxSteps: 50,
25
+ minConfidence: 0.5,
26
+ autoSummarize: true,
27
+ },
28
+ // Auto-Routing
29
+ autoRouting: {
30
+ minConfidence: 0.75,
31
+ enableFallback: true,
32
+ complexityThreshold: {
33
+ simple: 3,
34
+ medium: 7,
35
+ complex: 10,
36
+ },
37
+ },
38
+ // Context Management
39
+ contextMaxTokens: 4000,
40
+ contextAutoSummarizeThreshold: 100,
41
+ checkpointInterval: 5,
42
+ // Parallel Execution
43
+ maxParallelTasks: 5,
44
+ defaultParallelism: 3,
45
+ // Tools
46
+ toolTimeout: 60,
47
+ maxToolOutputSize: 1024 * 1024, // 1MB
48
+ // Security
49
+ securityPolicy: {
50
+ id: "default",
51
+ name: "Default Security Policy",
52
+ pathValidation: {
53
+ enabled: true,
54
+ allowedPaths: [process.cwd(), SMARTAGENT_DIR],
55
+ blockedPaths: ["/", "/bin", "/sbin", "/usr/bin", "/usr/sbin", "/etc", "/var", "/sys", "/proc", "/dev"],
56
+ },
57
+ commandValidation: {
58
+ enabled: true,
59
+ whitelist: [],
60
+ blacklist: ["rm -rf /", "format", "mkfs", "dd", "fdisk", "mkfs.ext4", "mkfs.ntfs"],
61
+ dangerousPatterns: [],
62
+ },
63
+ rateLimit: {
64
+ enabled: true,
65
+ maxRequestsPerMinute: 50,
66
+ maxRequestsPerHour: 1000,
67
+ },
68
+ },
69
+ // Authentication
70
+ auth: {
71
+ enabled: false,
72
+ tokens: [],
73
+ },
74
+ // Logging
75
+ logLevel: "info",
76
+ logFormat: "pretty",
77
+ auditLogRetention: 90,
78
+ };
79
+ /**
80
+ * Configuration Manager Class
81
+ */
82
+ class ConfigManager {
83
+ config;
84
+ initialized = false;
85
+ constructor() {
86
+ this.config = this.loadConfig();
87
+ }
88
+ /**
89
+ * Load configuration from multiple sources
90
+ */
91
+ loadConfig() {
92
+ // Start with defaults
93
+ let config = { ...DEFAULT_CONFIG };
94
+ // Override with environment variables
95
+ config = this.applyEnvironmentVariables(config);
96
+ // Override with config file if exists
97
+ config = this.applyConfigFile(config);
98
+ return config;
99
+ }
100
+ /**
101
+ * Apply environment variable overrides
102
+ */
103
+ applyEnvironmentVariables(config) {
104
+ const updated = { ...config };
105
+ // Agent settings
106
+ if (process.env.SWARM_MAX_AGENTS) {
107
+ updated.maxAgents = parseInt(process.env.SWARM_MAX_AGENTS, 10);
108
+ }
109
+ if (process.env.SWARM_DEFAULT_MODE) {
110
+ updated.defaultAgentMode = process.env.SWARM_DEFAULT_MODE;
111
+ }
112
+ if (process.env.SWARM_HEALTH_CHECK_INTERVAL) {
113
+ updated.healthCheckInterval = parseInt(process.env.SWARM_HEALTH_CHECK_INTERVAL, 10);
114
+ }
115
+ if (process.env.SWARM_AGENT_TIMEOUT) {
116
+ updated.agentTimeout = parseInt(process.env.SWARM_AGENT_TIMEOUT, 10);
117
+ }
118
+ // Context settings
119
+ if (process.env.SWARM_CONTEXT_MAX_TOKENS) {
120
+ updated.contextMaxTokens = parseInt(process.env.SWARM_CONTEXT_MAX_TOKENS, 10);
121
+ }
122
+ if (process.env.SWARM_CHECKPOINT_INTERVAL) {
123
+ updated.checkpointInterval = parseInt(process.env.SWARM_CHECKPOINT_INTERVAL, 10);
124
+ }
125
+ // Parallel execution
126
+ if (process.env.SWARM_MAX_PARALLEL_TASKS) {
127
+ updated.maxParallelTasks = parseInt(process.env.SWARM_MAX_PARALLEL_TASKS, 10);
128
+ }
129
+ if (process.env.SWARM_DEFAULT_PARALLELISM) {
130
+ updated.defaultParallelism = parseInt(process.env.SWARM_DEFAULT_PARALLELISM, 10);
131
+ }
132
+ // Tool settings
133
+ if (process.env.SWARM_TOOL_TIMEOUT) {
134
+ updated.toolTimeout = parseInt(process.env.SWARM_TOOL_TIMEOUT, 10);
135
+ }
136
+ if (process.env.SWARM_MAX_TOOL_OUTPUT_SIZE) {
137
+ updated.maxToolOutputSize = parseInt(process.env.SWARM_MAX_TOOL_OUTPUT_SIZE, 10);
138
+ }
139
+ // Logging
140
+ if (process.env.SWARM_LOG_LEVEL) {
141
+ updated.logLevel = process.env.SWARM_LOG_LEVEL;
142
+ }
143
+ if (process.env.SWARM_LOG_FORMAT) {
144
+ updated.logFormat = process.env.SWARM_LOG_FORMAT;
145
+ }
146
+ if (process.env.SWARM_AUDIT_LOG_RETENTION) {
147
+ updated.auditLogRetention = parseInt(process.env.SWARM_AUDIT_LOG_RETENTION, 10);
148
+ }
149
+ // Security
150
+ if (process.env.SWARM_RATE_LIMIT_ENABLED) {
151
+ updated.securityPolicy.rateLimit.enabled = process.env.SWARM_RATE_LIMIT_ENABLED === "true";
152
+ }
153
+ if (process.env.SWARM_RATE_LIMIT_PER_MINUTE) {
154
+ updated.securityPolicy.rateLimit.maxRequestsPerMinute = parseInt(process.env.SWARM_RATE_LIMIT_PER_MINUTE, 10);
155
+ }
156
+ if (process.env.SWARM_RATE_LIMIT_PER_HOUR) {
157
+ updated.securityPolicy.rateLimit.maxRequestsPerHour = parseInt(process.env.SWARM_RATE_LIMIT_PER_HOUR, 10);
158
+ }
159
+ // Authentication
160
+ if (process.env.SWARM_AUTH_ENABLED) {
161
+ updated.auth.enabled = process.env.SWARM_AUTH_ENABLED === "true";
162
+ }
163
+ if (process.env.SWARM_AUTH_TOKENS) {
164
+ updated.auth.tokens = process.env.SWARM_AUTH_TOKENS.split(",").map(t => t.trim());
165
+ }
166
+ return updated;
167
+ }
168
+ /**
169
+ * Apply config file overrides
170
+ */
171
+ applyConfigFile(config) {
172
+ if (!existsSync(CONFIG_FILE)) {
173
+ return config;
174
+ }
175
+ try {
176
+ const fileContent = readFileSync(CONFIG_FILE, "utf-8");
177
+ const fileConfig = JSON.parse(fileContent);
178
+ return this.deepMerge(config, fileConfig);
179
+ }
180
+ catch (error) {
181
+ logger.warn("Failed to load config file", {
182
+ error: error instanceof Error ? error.message : String(error),
183
+ path: CONFIG_FILE,
184
+ });
185
+ return config;
186
+ }
187
+ }
188
+ /**
189
+ * Deep merge two objects
190
+ */
191
+ deepMerge(target, source) {
192
+ const result = { ...target };
193
+ for (const key in source) {
194
+ const sourceValue = source[key];
195
+ if (sourceValue !== undefined && sourceValue !== null) {
196
+ const targetValue = result[key];
197
+ if (typeof sourceValue === "object" &&
198
+ !Array.isArray(sourceValue) &&
199
+ targetValue !== undefined &&
200
+ typeof targetValue === "object" &&
201
+ !Array.isArray(targetValue)) {
202
+ // Deep merge nested objects
203
+ result[key] = this.deepMerge(targetValue, sourceValue);
204
+ }
205
+ else {
206
+ result[key] = sourceValue;
207
+ }
208
+ }
209
+ }
210
+ return result;
211
+ }
212
+ /**
213
+ * Get current configuration
214
+ */
215
+ getConfig() {
216
+ return { ...this.config };
217
+ }
218
+ /**
219
+ * Get specific configuration value
220
+ */
221
+ get(key) {
222
+ return this.config[key];
223
+ }
224
+ /**
225
+ * Update configuration at runtime
226
+ */
227
+ updateConfig(updates) {
228
+ this.config = this.deepMerge(this.config, updates);
229
+ logger.info("Configuration updated", { updates });
230
+ }
231
+ /**
232
+ * Update specific configuration value
233
+ */
234
+ set(key, value) {
235
+ this.config[key] = value;
236
+ logger.info(`Configuration updated: ${key}`, { value });
237
+ }
238
+ /**
239
+ * Reset to default configuration
240
+ */
241
+ reset() {
242
+ this.config = { ...DEFAULT_CONFIG };
243
+ logger.info("Configuration reset to defaults");
244
+ }
245
+ /**
246
+ * Validate configuration
247
+ */
248
+ validate() {
249
+ const errors = [];
250
+ // Validate agent settings
251
+ if (this.config.maxAgents < 1 || this.config.maxAgents > 1000) {
252
+ errors.push("maxAgents must be between 1 and 1000");
253
+ }
254
+ if (this.config.healthCheckInterval < 5) {
255
+ errors.push("healthCheckInterval must be at least 5 seconds");
256
+ }
257
+ if (this.config.agentTimeout < 10) {
258
+ errors.push("agentTimeout must be at least 10 seconds");
259
+ }
260
+ // Validate parallel execution
261
+ if (this.config.maxParallelTasks < 1 || this.config.maxParallelTasks > 20) {
262
+ errors.push("maxParallelTasks must be between 1 and 20");
263
+ }
264
+ if (this.config.defaultParallelism < 1 || this.config.defaultParallelism > this.config.maxParallelTasks) {
265
+ errors.push("defaultParallelism must be between 1 and maxParallelTasks");
266
+ }
267
+ // Validate sequential thinking
268
+ if (this.config.sequentialThinking.maxSteps < 1 || this.config.sequentialThinking.maxSteps > 1000) {
269
+ errors.push("sequentialThinking.maxSteps must be between 1 and 1000");
270
+ }
271
+ if (this.config.sequentialThinking.minConfidence < 0 || this.config.sequentialThinking.minConfidence > 1) {
272
+ errors.push("sequentialThinking.minConfidence must be between 0 and 1");
273
+ }
274
+ // Validate auto-routing
275
+ if (this.config.autoRouting.minConfidence < 0 || this.config.autoRouting.minConfidence > 1) {
276
+ errors.push("autoRouting.minConfidence must be between 0 and 1");
277
+ }
278
+ // Validate context
279
+ if (this.config.contextMaxTokens < 100) {
280
+ errors.push("contextMaxTokens must be at least 100");
281
+ }
282
+ // Validate rate limiting
283
+ if (this.config.securityPolicy.rateLimit.maxRequestsPerMinute < 1) {
284
+ errors.push("rateLimit.maxRequestsPerMinute must be at least 1");
285
+ }
286
+ if (this.config.securityPolicy.rateLimit.maxRequestsPerHour < this.config.securityPolicy.rateLimit.maxRequestsPerMinute) {
287
+ errors.push("rateLimit.maxRequestsPerHour must be greater than maxRequestsPerMinute");
288
+ }
289
+ return {
290
+ valid: errors.length === 0,
291
+ errors,
292
+ };
293
+ }
294
+ /**
295
+ * Get configuration as JSON
296
+ */
297
+ toJSON() {
298
+ return JSON.stringify(this.config, null, 2);
299
+ }
300
+ /**
301
+ * Initialize configuration
302
+ */
303
+ initialize() {
304
+ if (this.initialized)
305
+ return;
306
+ const validation = this.validate();
307
+ if (!validation.valid) {
308
+ logger.error("Invalid configuration", { errors: validation.errors });
309
+ throw new Error(`Invalid configuration: ${validation.errors.join(", ")}`);
310
+ }
311
+ logger.info("Configuration initialized", {
312
+ maxAgents: this.config.maxAgents,
313
+ logLevel: this.config.logLevel,
314
+ healthCheckInterval: this.config.healthCheckInterval,
315
+ });
316
+ this.initialized = true;
317
+ }
318
+ /**
319
+ * Check if initialized
320
+ */
321
+ isInitialized() {
322
+ return this.initialized;
323
+ }
324
+ }
325
+ // Export singleton instance
326
+ export const configManager = new ConfigManager();
327
+ // Export default config for convenience
328
+ export const config = configManager.getConfig();
329
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Agent Manager
3
+ * Manages agent lifecycle, health checks, and task assignment
4
+ */
5
+ import type { Agent, AgentConfig, AgentType, AgentMode, AgentStatus, Task, TaskConfig } from "../types/index.js";
6
+ /**
7
+ * Agent Manager
8
+ * Handles agent lifecycle and operations
9
+ */
10
+ export declare class AgentManager {
11
+ private agents;
12
+ private healthCheckTimer;
13
+ private healthCheckLock;
14
+ constructor();
15
+ /**
16
+ * Spawn a new agent
17
+ */
18
+ spawnAgent(config: AgentConfig): Promise<Agent>;
19
+ /**
20
+ * Spawn multiple agents (broadcast)
21
+ */
22
+ spawnMultiple(type: AgentType, count: number, options?: {
23
+ baseName?: string;
24
+ mode?: AgentMode;
25
+ capabilities?: string[];
26
+ metadata?: Record<string, unknown>;
27
+ }): Promise<Agent[]>;
28
+ /**
29
+ * Get agent by ID
30
+ */
31
+ getAgent(agentId: string): Promise<Agent | null>;
32
+ /**
33
+ * Get all active agents
34
+ */
35
+ getAllAgents(): Promise<Agent[]>;
36
+ /**
37
+ * Get agents by type
38
+ */
39
+ getAgentsByType(type: AgentType): Promise<Agent[]>;
40
+ /**
41
+ * Get agents by status
42
+ */
43
+ getAgentsByStatus(status: AgentStatus): Promise<Agent[]>;
44
+ /**
45
+ * Update agent status
46
+ */
47
+ updateAgentStatus(agentId: string, status: AgentStatus, currentTask?: string): Promise<Agent | null>;
48
+ /**
49
+ * Update agent mode
50
+ */
51
+ updateAgentMode(agentId: string, mode: AgentMode): Promise<Agent | null>;
52
+ /**
53
+ * Terminate an agent and cleanup its tasks
54
+ */
55
+ terminateAgent(agentId: string): Promise<boolean>;
56
+ /**
57
+ * Assign task to agent
58
+ */
59
+ assignTask(agentId: string, taskConfig: Omit<TaskConfig, "agentId">): Promise<Task | null>;
60
+ /**
61
+ * Start task execution
62
+ */
63
+ startTask(taskId: string): Promise<Task | null>;
64
+ /**
65
+ * Complete task
66
+ */
67
+ completeTask(taskId: string, result?: unknown): Promise<Task | null>;
68
+ /**
69
+ * Fail task
70
+ */
71
+ failTask(taskId: string, error: string): Promise<Task | null>;
72
+ /**
73
+ * Get agent tasks
74
+ */
75
+ getAgentTasks(agentId: string): Promise<Task[]>;
76
+ /**
77
+ * Perform health check on all agents
78
+ */
79
+ performHealthCheck(): Promise<{
80
+ checked: number;
81
+ healthy: number;
82
+ unhealthy: number;
83
+ terminated: number;
84
+ }>;
85
+ /**
86
+ * Internal health check implementation
87
+ */
88
+ private doPerformHealthCheck;
89
+ /**
90
+ * Start periodic health checks
91
+ */
92
+ private startHealthChecks;
93
+ /**
94
+ * Stop health checks
95
+ */
96
+ stopHealthChecks(): void;
97
+ /**
98
+ * Get default capabilities for agent type
99
+ */
100
+ private getDefaultCapabilities;
101
+ /**
102
+ * Get agent statistics
103
+ */
104
+ getAgentStats(): Promise<{
105
+ total: number;
106
+ byType: Record<AgentType, number>;
107
+ byStatus: Record<AgentStatus, number>;
108
+ byMode: Record<AgentMode, number>;
109
+ }>;
110
+ /**
111
+ * Cleanup terminated agents
112
+ */
113
+ cleanup(): Promise<number>;
114
+ }
115
+ export declare const agentManager: AgentManager;
116
+ //# sourceMappingURL=agent-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-manager.d.ts","sourceRoot":"","sources":["../../src/core/agent-manager.ts"],"names":[],"mappings":"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"}