moflo 4.8.19 → 4.8.20

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 (241) hide show
  1. package/.claude/guidance/shipped/moflo.md +45 -0
  2. package/.claude/helpers/statusline.cjs +1 -1
  3. package/.claude/workflow-state.json +9 -0
  4. package/package.json +2 -2
  5. package/src/@claude-flow/cli/dist/src/init/statusline-generator.js +1 -1
  6. package/src/@claude-flow/cli/dist/src/services/agentic-flow-bridge.js +5 -3
  7. package/src/@claude-flow/cli/package.json +1 -1
  8. package/src/@claude-flow/memory/dist/agent-memory-scope.d.ts +131 -0
  9. package/src/@claude-flow/memory/dist/agent-memory-scope.js +223 -0
  10. package/src/@claude-flow/memory/dist/agent-memory-scope.test.d.ts +8 -0
  11. package/src/@claude-flow/memory/dist/agent-memory-scope.test.js +466 -0
  12. package/src/@claude-flow/memory/dist/agentdb-adapter.d.ts +165 -0
  13. package/src/@claude-flow/memory/dist/agentdb-adapter.js +806 -0
  14. package/src/@claude-flow/memory/dist/agentdb-backend.d.ts +212 -0
  15. package/src/@claude-flow/memory/dist/agentdb-backend.js +842 -0
  16. package/src/@claude-flow/memory/dist/agentdb-backend.test.d.ts +7 -0
  17. package/src/@claude-flow/memory/dist/agentdb-backend.test.js +258 -0
  18. package/src/@claude-flow/memory/dist/application/commands/delete-memory.command.d.ts +65 -0
  19. package/src/@claude-flow/memory/dist/application/commands/delete-memory.command.js +129 -0
  20. package/src/@claude-flow/memory/dist/application/commands/store-memory.command.d.ts +48 -0
  21. package/src/@claude-flow/memory/dist/application/commands/store-memory.command.js +72 -0
  22. package/src/@claude-flow/memory/dist/application/index.d.ts +12 -0
  23. package/src/@claude-flow/memory/dist/application/index.js +15 -0
  24. package/src/@claude-flow/memory/dist/application/queries/search-memory.query.d.ts +72 -0
  25. package/src/@claude-flow/memory/dist/application/queries/search-memory.query.js +143 -0
  26. package/src/@claude-flow/memory/dist/application/services/memory-application-service.d.ts +121 -0
  27. package/src/@claude-flow/memory/dist/application/services/memory-application-service.js +190 -0
  28. package/src/@claude-flow/memory/dist/auto-memory-bridge.d.ts +226 -0
  29. package/src/@claude-flow/memory/dist/auto-memory-bridge.js +709 -0
  30. package/src/@claude-flow/memory/dist/auto-memory-bridge.test.d.ts +8 -0
  31. package/src/@claude-flow/memory/dist/auto-memory-bridge.test.js +757 -0
  32. package/src/@claude-flow/memory/dist/benchmark.test.d.ts +2 -0
  33. package/src/@claude-flow/memory/dist/benchmark.test.js +277 -0
  34. package/src/@claude-flow/memory/dist/cache-manager.d.ts +134 -0
  35. package/src/@claude-flow/memory/dist/cache-manager.js +407 -0
  36. package/src/@claude-flow/memory/dist/controller-registry.d.ts +216 -0
  37. package/src/@claude-flow/memory/dist/controller-registry.js +893 -0
  38. package/src/@claude-flow/memory/dist/controller-registry.test.d.ts +14 -0
  39. package/src/@claude-flow/memory/dist/controller-registry.test.js +593 -0
  40. package/src/@claude-flow/memory/dist/database-provider.d.ts +87 -0
  41. package/src/@claude-flow/memory/dist/database-provider.js +372 -0
  42. package/src/@claude-flow/memory/dist/database-provider.test.d.ts +7 -0
  43. package/src/@claude-flow/memory/dist/database-provider.test.js +287 -0
  44. package/src/@claude-flow/memory/dist/domain/entities/memory-entry.d.ts +143 -0
  45. package/src/@claude-flow/memory/dist/domain/entities/memory-entry.js +226 -0
  46. package/src/@claude-flow/memory/dist/domain/index.d.ts +11 -0
  47. package/src/@claude-flow/memory/dist/domain/index.js +12 -0
  48. package/src/@claude-flow/memory/dist/domain/repositories/memory-repository.interface.d.ts +102 -0
  49. package/src/@claude-flow/memory/dist/domain/repositories/memory-repository.interface.js +11 -0
  50. package/src/@claude-flow/memory/dist/domain/services/memory-domain-service.d.ts +105 -0
  51. package/src/@claude-flow/memory/dist/domain/services/memory-domain-service.js +297 -0
  52. package/src/@claude-flow/memory/dist/hnsw-index.d.ts +111 -0
  53. package/src/@claude-flow/memory/dist/hnsw-index.js +781 -0
  54. package/src/@claude-flow/memory/dist/hnsw-lite.d.ts +23 -0
  55. package/src/@claude-flow/memory/dist/hnsw-lite.js +168 -0
  56. package/src/@claude-flow/memory/dist/index.d.ts +204 -0
  57. package/src/@claude-flow/memory/dist/index.js +358 -0
  58. package/src/@claude-flow/memory/dist/infrastructure/index.d.ts +17 -0
  59. package/src/@claude-flow/memory/dist/infrastructure/index.js +16 -0
  60. package/src/@claude-flow/memory/dist/infrastructure/repositories/hybrid-memory-repository.d.ts +66 -0
  61. package/src/@claude-flow/memory/dist/infrastructure/repositories/hybrid-memory-repository.js +409 -0
  62. package/src/@claude-flow/memory/dist/learning-bridge.d.ts +137 -0
  63. package/src/@claude-flow/memory/dist/learning-bridge.js +335 -0
  64. package/src/@claude-flow/memory/dist/learning-bridge.test.d.ts +8 -0
  65. package/src/@claude-flow/memory/dist/learning-bridge.test.js +578 -0
  66. package/src/@claude-flow/memory/dist/memory-graph.d.ts +100 -0
  67. package/src/@claude-flow/memory/dist/memory-graph.js +333 -0
  68. package/src/@claude-flow/memory/dist/memory-graph.test.d.ts +8 -0
  69. package/src/@claude-flow/memory/dist/memory-graph.test.js +609 -0
  70. package/src/@claude-flow/memory/dist/migration.d.ts +68 -0
  71. package/src/@claude-flow/memory/dist/migration.js +513 -0
  72. package/src/@claude-flow/memory/dist/persistent-sona.d.ts +144 -0
  73. package/src/@claude-flow/memory/dist/persistent-sona.js +332 -0
  74. package/src/@claude-flow/memory/dist/query-builder.d.ts +211 -0
  75. package/src/@claude-flow/memory/dist/query-builder.js +438 -0
  76. package/src/@claude-flow/memory/dist/rvf-backend.d.ts +51 -0
  77. package/src/@claude-flow/memory/dist/rvf-backend.js +481 -0
  78. package/src/@claude-flow/memory/dist/rvf-learning-store.d.ts +139 -0
  79. package/src/@claude-flow/memory/dist/rvf-learning-store.js +295 -0
  80. package/src/@claude-flow/memory/dist/rvf-migration.d.ts +45 -0
  81. package/src/@claude-flow/memory/dist/rvf-migration.js +234 -0
  82. package/src/@claude-flow/memory/dist/sqljs-backend.d.ts +127 -0
  83. package/src/@claude-flow/memory/dist/sqljs-backend.js +600 -0
  84. package/src/@claude-flow/memory/dist/types.d.ts +484 -0
  85. package/src/@claude-flow/memory/dist/types.js +58 -0
  86. package/src/@claude-flow/shared/dist/core/config/defaults.d.ts +41 -0
  87. package/src/@claude-flow/shared/dist/core/config/defaults.js +186 -0
  88. package/src/@claude-flow/shared/dist/core/config/index.d.ts +8 -0
  89. package/src/@claude-flow/shared/dist/core/config/index.js +12 -0
  90. package/src/@claude-flow/shared/dist/core/config/loader.d.ts +45 -0
  91. package/src/@claude-flow/shared/dist/core/config/loader.js +222 -0
  92. package/src/@claude-flow/shared/dist/core/config/schema.d.ts +1134 -0
  93. package/src/@claude-flow/shared/dist/core/config/schema.js +158 -0
  94. package/src/@claude-flow/shared/dist/core/config/validator.d.ts +92 -0
  95. package/src/@claude-flow/shared/dist/core/config/validator.js +147 -0
  96. package/src/@claude-flow/shared/dist/core/event-bus.d.ts +31 -0
  97. package/src/@claude-flow/shared/dist/core/event-bus.js +197 -0
  98. package/src/@claude-flow/shared/dist/core/index.d.ts +15 -0
  99. package/src/@claude-flow/shared/dist/core/index.js +19 -0
  100. package/src/@claude-flow/shared/dist/core/interfaces/agent.interface.d.ts +200 -0
  101. package/src/@claude-flow/shared/dist/core/interfaces/agent.interface.js +6 -0
  102. package/src/@claude-flow/shared/dist/core/interfaces/coordinator.interface.d.ts +310 -0
  103. package/src/@claude-flow/shared/dist/core/interfaces/coordinator.interface.js +7 -0
  104. package/src/@claude-flow/shared/dist/core/interfaces/event.interface.d.ts +224 -0
  105. package/src/@claude-flow/shared/dist/core/interfaces/event.interface.js +46 -0
  106. package/src/@claude-flow/shared/dist/core/interfaces/index.d.ts +10 -0
  107. package/src/@claude-flow/shared/dist/core/interfaces/index.js +15 -0
  108. package/src/@claude-flow/shared/dist/core/interfaces/memory.interface.d.ts +298 -0
  109. package/src/@claude-flow/shared/dist/core/interfaces/memory.interface.js +7 -0
  110. package/src/@claude-flow/shared/dist/core/interfaces/task.interface.d.ts +185 -0
  111. package/src/@claude-flow/shared/dist/core/interfaces/task.interface.js +6 -0
  112. package/src/@claude-flow/shared/dist/core/orchestrator/event-coordinator.d.ts +35 -0
  113. package/src/@claude-flow/shared/dist/core/orchestrator/event-coordinator.js +101 -0
  114. package/src/@claude-flow/shared/dist/core/orchestrator/health-monitor.d.ts +60 -0
  115. package/src/@claude-flow/shared/dist/core/orchestrator/health-monitor.js +166 -0
  116. package/src/@claude-flow/shared/dist/core/orchestrator/index.d.ts +46 -0
  117. package/src/@claude-flow/shared/dist/core/orchestrator/index.js +64 -0
  118. package/src/@claude-flow/shared/dist/core/orchestrator/lifecycle-manager.d.ts +56 -0
  119. package/src/@claude-flow/shared/dist/core/orchestrator/lifecycle-manager.js +195 -0
  120. package/src/@claude-flow/shared/dist/core/orchestrator/session-manager.d.ts +83 -0
  121. package/src/@claude-flow/shared/dist/core/orchestrator/session-manager.js +193 -0
  122. package/src/@claude-flow/shared/dist/core/orchestrator/task-manager.d.ts +49 -0
  123. package/src/@claude-flow/shared/dist/core/orchestrator/task-manager.js +253 -0
  124. package/src/@claude-flow/shared/dist/events/domain-events.d.ts +282 -0
  125. package/src/@claude-flow/shared/dist/events/domain-events.js +165 -0
  126. package/src/@claude-flow/shared/dist/events/event-store.d.ts +126 -0
  127. package/src/@claude-flow/shared/dist/events/event-store.js +432 -0
  128. package/src/@claude-flow/shared/dist/events/event-store.test.d.ts +8 -0
  129. package/src/@claude-flow/shared/dist/events/event-store.test.js +297 -0
  130. package/src/@claude-flow/shared/dist/events/example-usage.d.ts +10 -0
  131. package/src/@claude-flow/shared/dist/events/example-usage.js +193 -0
  132. package/src/@claude-flow/shared/dist/events/index.d.ts +21 -0
  133. package/src/@claude-flow/shared/dist/events/index.js +22 -0
  134. package/src/@claude-flow/shared/dist/events/projections.d.ts +177 -0
  135. package/src/@claude-flow/shared/dist/events/projections.js +421 -0
  136. package/src/@claude-flow/shared/dist/events/rvf-event-log.d.ts +82 -0
  137. package/src/@claude-flow/shared/dist/events/rvf-event-log.js +340 -0
  138. package/src/@claude-flow/shared/dist/events/state-reconstructor.d.ts +101 -0
  139. package/src/@claude-flow/shared/dist/events/state-reconstructor.js +263 -0
  140. package/src/@claude-flow/shared/dist/events.d.ts +80 -0
  141. package/src/@claude-flow/shared/dist/events.js +249 -0
  142. package/src/@claude-flow/shared/dist/hooks/example-usage.d.ts +42 -0
  143. package/src/@claude-flow/shared/dist/hooks/example-usage.js +351 -0
  144. package/src/@claude-flow/shared/dist/hooks/executor.d.ts +100 -0
  145. package/src/@claude-flow/shared/dist/hooks/executor.js +267 -0
  146. package/src/@claude-flow/shared/dist/hooks/hooks.test.d.ts +9 -0
  147. package/src/@claude-flow/shared/dist/hooks/hooks.test.js +322 -0
  148. package/src/@claude-flow/shared/dist/hooks/index.d.ts +52 -0
  149. package/src/@claude-flow/shared/dist/hooks/index.js +51 -0
  150. package/src/@claude-flow/shared/dist/hooks/registry.d.ts +133 -0
  151. package/src/@claude-flow/shared/dist/hooks/registry.js +277 -0
  152. package/src/@claude-flow/shared/dist/hooks/safety/bash-safety.d.ts +105 -0
  153. package/src/@claude-flow/shared/dist/hooks/safety/bash-safety.js +481 -0
  154. package/src/@claude-flow/shared/dist/hooks/safety/file-organization.d.ts +144 -0
  155. package/src/@claude-flow/shared/dist/hooks/safety/file-organization.js +328 -0
  156. package/src/@claude-flow/shared/dist/hooks/safety/git-commit.d.ts +158 -0
  157. package/src/@claude-flow/shared/dist/hooks/safety/git-commit.js +450 -0
  158. package/src/@claude-flow/shared/dist/hooks/safety/index.d.ts +17 -0
  159. package/src/@claude-flow/shared/dist/hooks/safety/index.js +17 -0
  160. package/src/@claude-flow/shared/dist/hooks/session-hooks.d.ts +234 -0
  161. package/src/@claude-flow/shared/dist/hooks/session-hooks.js +334 -0
  162. package/src/@claude-flow/shared/dist/hooks/task-hooks.d.ts +163 -0
  163. package/src/@claude-flow/shared/dist/hooks/task-hooks.js +326 -0
  164. package/src/@claude-flow/shared/dist/hooks/types.d.ts +267 -0
  165. package/src/@claude-flow/shared/dist/hooks/types.js +62 -0
  166. package/src/@claude-flow/shared/dist/hooks/verify-exports.test.d.ts +9 -0
  167. package/src/@claude-flow/shared/dist/hooks/verify-exports.test.js +93 -0
  168. package/src/@claude-flow/shared/dist/index.d.ts +20 -0
  169. package/src/@claude-flow/shared/dist/index.js +50 -0
  170. package/src/@claude-flow/shared/dist/mcp/connection-pool.d.ts +98 -0
  171. package/src/@claude-flow/shared/dist/mcp/connection-pool.js +364 -0
  172. package/src/@claude-flow/shared/dist/mcp/index.d.ts +69 -0
  173. package/src/@claude-flow/shared/dist/mcp/index.js +84 -0
  174. package/src/@claude-flow/shared/dist/mcp/server.d.ts +166 -0
  175. package/src/@claude-flow/shared/dist/mcp/server.js +593 -0
  176. package/src/@claude-flow/shared/dist/mcp/session-manager.d.ts +136 -0
  177. package/src/@claude-flow/shared/dist/mcp/session-manager.js +335 -0
  178. package/src/@claude-flow/shared/dist/mcp/tool-registry.d.ts +178 -0
  179. package/src/@claude-flow/shared/dist/mcp/tool-registry.js +439 -0
  180. package/src/@claude-flow/shared/dist/mcp/transport/http.d.ts +104 -0
  181. package/src/@claude-flow/shared/dist/mcp/transport/http.js +476 -0
  182. package/src/@claude-flow/shared/dist/mcp/transport/index.d.ts +102 -0
  183. package/src/@claude-flow/shared/dist/mcp/transport/index.js +238 -0
  184. package/src/@claude-flow/shared/dist/mcp/transport/stdio.d.ts +104 -0
  185. package/src/@claude-flow/shared/dist/mcp/transport/stdio.js +263 -0
  186. package/src/@claude-flow/shared/dist/mcp/transport/websocket.d.ts +133 -0
  187. package/src/@claude-flow/shared/dist/mcp/transport/websocket.js +396 -0
  188. package/src/@claude-flow/shared/dist/mcp/types.d.ts +438 -0
  189. package/src/@claude-flow/shared/dist/mcp/types.js +54 -0
  190. package/src/@claude-flow/shared/dist/plugin-interface.d.ts +544 -0
  191. package/src/@claude-flow/shared/dist/plugin-interface.js +23 -0
  192. package/src/@claude-flow/shared/dist/plugin-loader.d.ts +139 -0
  193. package/src/@claude-flow/shared/dist/plugin-loader.js +434 -0
  194. package/src/@claude-flow/shared/dist/plugin-registry.d.ts +183 -0
  195. package/src/@claude-flow/shared/dist/plugin-registry.js +457 -0
  196. package/src/@claude-flow/shared/dist/plugins/index.d.ts +10 -0
  197. package/src/@claude-flow/shared/dist/plugins/index.js +10 -0
  198. package/src/@claude-flow/shared/dist/plugins/official/hive-mind-plugin.d.ts +106 -0
  199. package/src/@claude-flow/shared/dist/plugins/official/hive-mind-plugin.js +241 -0
  200. package/src/@claude-flow/shared/dist/plugins/official/index.d.ts +10 -0
  201. package/src/@claude-flow/shared/dist/plugins/official/index.js +10 -0
  202. package/src/@claude-flow/shared/dist/plugins/official/maestro-plugin.d.ts +121 -0
  203. package/src/@claude-flow/shared/dist/plugins/official/maestro-plugin.js +355 -0
  204. package/src/@claude-flow/shared/dist/plugins/types.d.ts +93 -0
  205. package/src/@claude-flow/shared/dist/plugins/types.js +9 -0
  206. package/src/@claude-flow/shared/dist/resilience/bulkhead.d.ts +105 -0
  207. package/src/@claude-flow/shared/dist/resilience/bulkhead.js +206 -0
  208. package/src/@claude-flow/shared/dist/resilience/circuit-breaker.d.ts +132 -0
  209. package/src/@claude-flow/shared/dist/resilience/circuit-breaker.js +233 -0
  210. package/src/@claude-flow/shared/dist/resilience/index.d.ts +19 -0
  211. package/src/@claude-flow/shared/dist/resilience/index.js +19 -0
  212. package/src/@claude-flow/shared/dist/resilience/rate-limiter.d.ts +168 -0
  213. package/src/@claude-flow/shared/dist/resilience/rate-limiter.js +314 -0
  214. package/src/@claude-flow/shared/dist/resilience/retry.d.ts +91 -0
  215. package/src/@claude-flow/shared/dist/resilience/retry.js +159 -0
  216. package/src/@claude-flow/shared/dist/security/index.d.ts +10 -0
  217. package/src/@claude-flow/shared/dist/security/index.js +12 -0
  218. package/src/@claude-flow/shared/dist/security/input-validation.d.ts +73 -0
  219. package/src/@claude-flow/shared/dist/security/input-validation.js +201 -0
  220. package/src/@claude-flow/shared/dist/security/secure-random.d.ts +92 -0
  221. package/src/@claude-flow/shared/dist/security/secure-random.js +142 -0
  222. package/src/@claude-flow/shared/dist/services/index.d.ts +7 -0
  223. package/src/@claude-flow/shared/dist/services/index.js +7 -0
  224. package/src/@claude-flow/shared/dist/services/v3-progress.service.d.ts +124 -0
  225. package/src/@claude-flow/shared/dist/services/v3-progress.service.js +402 -0
  226. package/src/@claude-flow/shared/dist/types/agent.types.d.ts +137 -0
  227. package/src/@claude-flow/shared/dist/types/agent.types.js +6 -0
  228. package/src/@claude-flow/shared/dist/types/index.d.ts +11 -0
  229. package/src/@claude-flow/shared/dist/types/index.js +17 -0
  230. package/src/@claude-flow/shared/dist/types/mcp.types.d.ts +266 -0
  231. package/src/@claude-flow/shared/dist/types/mcp.types.js +7 -0
  232. package/src/@claude-flow/shared/dist/types/memory.types.d.ts +236 -0
  233. package/src/@claude-flow/shared/dist/types/memory.types.js +7 -0
  234. package/src/@claude-flow/shared/dist/types/swarm.types.d.ts +186 -0
  235. package/src/@claude-flow/shared/dist/types/swarm.types.js +65 -0
  236. package/src/@claude-flow/shared/dist/types/task.types.d.ts +178 -0
  237. package/src/@claude-flow/shared/dist/types/task.types.js +32 -0
  238. package/src/@claude-flow/shared/dist/types.d.ts +197 -0
  239. package/src/@claude-flow/shared/dist/types.js +21 -0
  240. package/src/@claude-flow/shared/dist/utils/secure-logger.d.ts +69 -0
  241. package/src/@claude-flow/shared/dist/utils/secure-logger.js +208 -0
@@ -0,0 +1,56 @@
1
+ /**
2
+ * V3 Lifecycle Manager
3
+ * Decomposed from orchestrator.ts - Agent spawn/terminate
4
+ * ~150 lines (target achieved)
5
+ */
6
+ import type { IAgent, IAgentConfig, IAgentLifecycleManager, IAgentPool, AgentStatus } from '../interfaces/agent.interface.js';
7
+ import type { IEventBus } from '../interfaces/event.interface.js';
8
+ /**
9
+ * Agent pool implementation
10
+ */
11
+ export declare class AgentPool implements IAgentPool {
12
+ private agents;
13
+ add(agent: IAgent): void;
14
+ remove(agentId: string): boolean;
15
+ get(agentId: string): IAgent | undefined;
16
+ getAll(): IAgent[];
17
+ getByStatus(status: AgentStatus): IAgent[];
18
+ getByType(type: string): IAgent[];
19
+ getAvailable(): IAgent[];
20
+ size(): number;
21
+ hasCapacity(maxSize: number): boolean;
22
+ clear(): void;
23
+ }
24
+ /**
25
+ * Lifecycle manager configuration
26
+ */
27
+ export interface LifecycleManagerConfig {
28
+ maxConcurrentAgents: number;
29
+ spawnTimeout: number;
30
+ terminateTimeout: number;
31
+ maxSpawnRetries: number;
32
+ }
33
+ /**
34
+ * Lifecycle manager implementation
35
+ */
36
+ export declare class LifecycleManager implements IAgentLifecycleManager {
37
+ private eventBus;
38
+ private config;
39
+ private pool;
40
+ constructor(eventBus: IEventBus, config: LifecycleManagerConfig, pool?: IAgentPool);
41
+ spawn(config: IAgentConfig): Promise<IAgent>;
42
+ spawnBatch(configs: IAgentConfig[]): Promise<Map<string, IAgent>>;
43
+ terminate(agentId: string, reason?: string): Promise<void>;
44
+ terminateAll(reason?: string): Promise<void>;
45
+ restart(agentId: string): Promise<IAgent>;
46
+ updateConfig(agentId: string, config: Partial<IAgentConfig>): Promise<void>;
47
+ getAgent(agentId: string): IAgent | undefined;
48
+ getAllAgents(): IAgent[];
49
+ getActiveCount(): number;
50
+ checkHealth(agentId: string): Promise<IAgent['health']>;
51
+ /**
52
+ * Get agent pool
53
+ */
54
+ getPool(): IAgentPool;
55
+ }
56
+ //# sourceMappingURL=lifecycle-manager.d.ts.map
@@ -0,0 +1,195 @@
1
+ /**
2
+ * V3 Lifecycle Manager
3
+ * Decomposed from orchestrator.ts - Agent spawn/terminate
4
+ * ~150 lines (target achieved)
5
+ */
6
+ import { SystemEventTypes } from '../interfaces/event.interface.js';
7
+ /**
8
+ * Agent pool implementation
9
+ */
10
+ export class AgentPool {
11
+ agents = new Map();
12
+ add(agent) {
13
+ this.agents.set(agent.id, agent);
14
+ }
15
+ remove(agentId) {
16
+ return this.agents.delete(agentId);
17
+ }
18
+ get(agentId) {
19
+ return this.agents.get(agentId);
20
+ }
21
+ getAll() {
22
+ return Array.from(this.agents.values());
23
+ }
24
+ getByStatus(status) {
25
+ return this.getAll().filter(agent => agent.status === status);
26
+ }
27
+ getByType(type) {
28
+ return this.getAll().filter(agent => agent.type === type);
29
+ }
30
+ getAvailable() {
31
+ return this.getAll().filter(agent => (agent.status === 'active' || agent.status === 'idle') &&
32
+ agent.currentTaskCount < agent.config.maxConcurrentTasks);
33
+ }
34
+ size() {
35
+ return this.agents.size;
36
+ }
37
+ hasCapacity(maxSize) {
38
+ return this.agents.size < maxSize;
39
+ }
40
+ clear() {
41
+ this.agents.clear();
42
+ }
43
+ }
44
+ /**
45
+ * Lifecycle manager implementation
46
+ */
47
+ export class LifecycleManager {
48
+ eventBus;
49
+ config;
50
+ pool;
51
+ constructor(eventBus, config, pool) {
52
+ this.eventBus = eventBus;
53
+ this.config = config;
54
+ this.pool = pool ?? new AgentPool();
55
+ }
56
+ async spawn(config) {
57
+ // Validate capacity
58
+ if (!this.pool.hasCapacity(this.config.maxConcurrentAgents)) {
59
+ throw new Error('Maximum concurrent agents reached');
60
+ }
61
+ // Validate agent doesn't already exist
62
+ if (this.pool.get(config.id)) {
63
+ throw new Error(`Agent with ID ${config.id} already exists`);
64
+ }
65
+ const agent = {
66
+ id: config.id,
67
+ name: config.name,
68
+ type: config.type,
69
+ config,
70
+ createdAt: new Date(),
71
+ status: 'spawning',
72
+ currentTaskCount: 0,
73
+ lastActivity: new Date(),
74
+ metrics: {
75
+ tasksCompleted: 0,
76
+ tasksFailed: 0,
77
+ avgTaskDuration: 0,
78
+ errorCount: 0,
79
+ uptime: 0,
80
+ },
81
+ };
82
+ // Add to pool
83
+ this.pool.add(agent);
84
+ // Mark as active
85
+ agent.status = 'active';
86
+ this.eventBus.emit(SystemEventTypes.AGENT_SPAWNED, {
87
+ agentId: agent.id,
88
+ profile: config,
89
+ sessionId: undefined,
90
+ });
91
+ return agent;
92
+ }
93
+ async spawnBatch(configs) {
94
+ const results = new Map();
95
+ // Check total capacity
96
+ if (this.pool.size() + configs.length > this.config.maxConcurrentAgents) {
97
+ throw new Error('Batch would exceed maximum concurrent agents');
98
+ }
99
+ // Spawn in parallel
100
+ const spawnPromises = configs.map(async (config) => {
101
+ try {
102
+ const agent = await this.spawn(config);
103
+ return { id: config.id, agent, error: null };
104
+ }
105
+ catch (error) {
106
+ return { id: config.id, agent: null, error };
107
+ }
108
+ });
109
+ const settled = await Promise.allSettled(spawnPromises);
110
+ for (const result of settled) {
111
+ if (result.status === 'fulfilled' && result.value.agent) {
112
+ results.set(result.value.id, result.value.agent);
113
+ }
114
+ }
115
+ return results;
116
+ }
117
+ async terminate(agentId, reason) {
118
+ const agent = this.pool.get(agentId);
119
+ if (!agent) {
120
+ throw new Error(`Agent not found: ${agentId}`);
121
+ }
122
+ agent.status = 'terminated';
123
+ // Remove from pool
124
+ this.pool.remove(agentId);
125
+ this.eventBus.emit(SystemEventTypes.AGENT_TERMINATED, {
126
+ agentId,
127
+ reason: reason ?? 'User requested',
128
+ });
129
+ }
130
+ async terminateAll(reason) {
131
+ const agents = this.pool.getAll();
132
+ await Promise.allSettled(agents.map(agent => this.terminate(agent.id, reason)));
133
+ }
134
+ async restart(agentId) {
135
+ const agent = this.pool.get(agentId);
136
+ if (!agent) {
137
+ throw new Error(`Agent not found: ${agentId}`);
138
+ }
139
+ const config = agent.config;
140
+ await this.terminate(agentId, 'Restart requested');
141
+ return this.spawn(config);
142
+ }
143
+ async updateConfig(agentId, config) {
144
+ const agent = this.pool.get(agentId);
145
+ if (!agent) {
146
+ throw new Error(`Agent not found: ${agentId}`);
147
+ }
148
+ Object.assign(agent.config, config);
149
+ }
150
+ getAgent(agentId) {
151
+ return this.pool.get(agentId);
152
+ }
153
+ getAllAgents() {
154
+ return this.pool.getAll();
155
+ }
156
+ getActiveCount() {
157
+ return this.pool.getByStatus('active').length +
158
+ this.pool.getByStatus('idle').length;
159
+ }
160
+ async checkHealth(agentId) {
161
+ const agent = this.pool.get(agentId);
162
+ if (!agent) {
163
+ throw new Error(`Agent not found: ${agentId}`);
164
+ }
165
+ // Simple health check based on metrics
166
+ const errorRate = agent.metrics
167
+ ? agent.metrics.errorCount / Math.max(1, agent.metrics.tasksCompleted + agent.metrics.tasksFailed)
168
+ : 0;
169
+ const health = {
170
+ status: errorRate > 0.5 ? 'unhealthy' : errorRate > 0.2 ? 'degraded' : 'healthy',
171
+ lastCheck: new Date(),
172
+ issues: [],
173
+ };
174
+ if (errorRate > 0.2) {
175
+ health.issues?.push(`High error rate: ${(errorRate * 100).toFixed(1)}%`);
176
+ }
177
+ agent.health = health;
178
+ if (health.status !== 'healthy') {
179
+ this.eventBus.emit(SystemEventTypes.AGENT_HEALTH_CHANGED, {
180
+ agentId,
181
+ previousStatus: agent.status,
182
+ currentStatus: agent.status,
183
+ issues: health.issues,
184
+ });
185
+ }
186
+ return health;
187
+ }
188
+ /**
189
+ * Get agent pool
190
+ */
191
+ getPool() {
192
+ return this.pool;
193
+ }
194
+ }
195
+ //# sourceMappingURL=lifecycle-manager.js.map
@@ -0,0 +1,83 @@
1
+ /**
2
+ * V3 Session Manager
3
+ * Decomposed from orchestrator.ts - Session handling
4
+ * ~200 lines (target achieved)
5
+ */
6
+ import type { IAgentSession } from '../interfaces/agent.interface.js';
7
+ import type { IEventBus } from '../interfaces/event.interface.js';
8
+ import type { AgentProfile } from '../../types/agent.types.js';
9
+ /**
10
+ * Session persistence structure
11
+ */
12
+ export interface SessionPersistence {
13
+ sessions: Array<IAgentSession & {
14
+ profile: AgentProfile;
15
+ }>;
16
+ metrics: {
17
+ completedTasks: number;
18
+ failedTasks: number;
19
+ totalTaskDuration: number;
20
+ };
21
+ savedAt: Date;
22
+ }
23
+ /**
24
+ * Session manager configuration
25
+ */
26
+ export interface SessionManagerConfig {
27
+ persistSessions: boolean;
28
+ dataDir: string;
29
+ sessionRetentionMs?: number;
30
+ }
31
+ /**
32
+ * Session manager interface
33
+ */
34
+ export interface ISessionManager {
35
+ createSession(profile: AgentProfile, terminalId: string, memoryBankId: string): Promise<IAgentSession>;
36
+ getSession(sessionId: string): IAgentSession | undefined;
37
+ getActiveSessions(): IAgentSession[];
38
+ getSessionsByAgent(agentId: string): IAgentSession[];
39
+ terminateSession(sessionId: string): Promise<void>;
40
+ terminateAllSessions(): Promise<void>;
41
+ persistSessions(): Promise<void>;
42
+ restoreSessions(): Promise<SessionPersistence | null>;
43
+ removeSession(sessionId: string): void;
44
+ updateSessionActivity(sessionId: string): void;
45
+ }
46
+ /**
47
+ * Session manager implementation
48
+ */
49
+ export declare class SessionManager implements ISessionManager {
50
+ private eventBus;
51
+ private config;
52
+ private sessions;
53
+ private sessionProfiles;
54
+ private persistencePath;
55
+ constructor(eventBus: IEventBus, config: SessionManagerConfig);
56
+ createSession(profile: AgentProfile, terminalId: string, memoryBankId: string): Promise<IAgentSession>;
57
+ getSession(sessionId: string): IAgentSession | undefined;
58
+ getActiveSessions(): IAgentSession[];
59
+ getSessionsByAgent(agentId: string): IAgentSession[];
60
+ terminateSession(sessionId: string): Promise<void>;
61
+ terminateAllSessions(): Promise<void>;
62
+ removeSession(sessionId: string): void;
63
+ updateSessionActivity(sessionId: string): void;
64
+ persistSessions(): Promise<void>;
65
+ restoreSessions(): Promise<SessionPersistence | null>;
66
+ /**
67
+ * Clean up old terminated sessions
68
+ */
69
+ cleanupTerminatedSessions(retentionMs?: number): Promise<number>;
70
+ /**
71
+ * Get session profile
72
+ */
73
+ getSessionProfile(sessionId: string): AgentProfile | undefined;
74
+ /**
75
+ * Get session count
76
+ */
77
+ getSessionCount(): number;
78
+ /**
79
+ * Get active session count
80
+ */
81
+ getActiveSessionCount(): number;
82
+ }
83
+ //# sourceMappingURL=session-manager.d.ts.map
@@ -0,0 +1,193 @@
1
+ /**
2
+ * V3 Session Manager
3
+ * Decomposed from orchestrator.ts - Session handling
4
+ * ~200 lines (target achieved)
5
+ */
6
+ import { SystemEventTypes } from '../interfaces/event.interface.js';
7
+ import { mkdir, writeFile, readFile } from 'fs/promises';
8
+ import { join, dirname } from 'path';
9
+ import { randomBytes } from 'crypto';
10
+ // Secure session ID generation
11
+ function generateSecureSessionId() {
12
+ const timestamp = Date.now().toString(36);
13
+ const random = randomBytes(12).toString('hex');
14
+ return `session_${timestamp}_${random}`;
15
+ }
16
+ /**
17
+ * Session manager implementation
18
+ */
19
+ export class SessionManager {
20
+ eventBus;
21
+ config;
22
+ sessions = new Map();
23
+ sessionProfiles = new Map();
24
+ persistencePath;
25
+ constructor(eventBus, config) {
26
+ this.eventBus = eventBus;
27
+ this.config = config;
28
+ this.persistencePath = join(config.dataDir || './data', 'sessions.json');
29
+ }
30
+ async createSession(profile, terminalId, memoryBankId) {
31
+ const session = {
32
+ id: generateSecureSessionId(),
33
+ agentId: profile.id,
34
+ terminalId,
35
+ startTime: new Date(),
36
+ status: 'active',
37
+ lastActivity: new Date(),
38
+ memoryBankId,
39
+ };
40
+ this.sessions.set(session.id, session);
41
+ this.sessionProfiles.set(session.id, profile);
42
+ this.eventBus.emit(SystemEventTypes.SESSION_CREATED, {
43
+ sessionId: session.id,
44
+ agentId: profile.id,
45
+ terminalId,
46
+ memoryBankId,
47
+ });
48
+ // Persist sessions asynchronously
49
+ this.persistSessions().catch(() => {
50
+ // Silently ignore persistence errors
51
+ });
52
+ return session;
53
+ }
54
+ getSession(sessionId) {
55
+ return this.sessions.get(sessionId);
56
+ }
57
+ getActiveSessions() {
58
+ return Array.from(this.sessions.values()).filter(session => session.status === 'active' || session.status === 'idle');
59
+ }
60
+ getSessionsByAgent(agentId) {
61
+ return Array.from(this.sessions.values()).filter(session => session.agentId === agentId);
62
+ }
63
+ async terminateSession(sessionId) {
64
+ const session = this.sessions.get(sessionId);
65
+ if (!session) {
66
+ throw new Error(`Session not found: ${sessionId}`);
67
+ }
68
+ session.status = 'terminated';
69
+ session.endTime = new Date();
70
+ const duration = session.endTime.getTime() - session.startTime.getTime();
71
+ this.eventBus.emit(SystemEventTypes.SESSION_TERMINATED, {
72
+ sessionId,
73
+ agentId: session.agentId,
74
+ duration,
75
+ });
76
+ // Clean up profile reference
77
+ this.sessionProfiles.delete(sessionId);
78
+ // Persist sessions asynchronously
79
+ this.persistSessions().catch(() => {
80
+ // Silently ignore persistence errors
81
+ });
82
+ }
83
+ async terminateAllSessions() {
84
+ const sessions = this.getActiveSessions();
85
+ const batchSize = 5;
86
+ for (let i = 0; i < sessions.length; i += batchSize) {
87
+ const batch = sessions.slice(i, i + batchSize);
88
+ await Promise.allSettled(batch.map(session => this.terminateSession(session.id)));
89
+ }
90
+ }
91
+ removeSession(sessionId) {
92
+ this.sessions.delete(sessionId);
93
+ this.sessionProfiles.delete(sessionId);
94
+ }
95
+ updateSessionActivity(sessionId) {
96
+ const session = this.sessions.get(sessionId);
97
+ if (session) {
98
+ session.lastActivity = new Date();
99
+ }
100
+ }
101
+ async persistSessions() {
102
+ if (!this.config.persistSessions) {
103
+ return;
104
+ }
105
+ try {
106
+ const data = {
107
+ sessions: Array.from(this.sessions.values())
108
+ .map(session => ({
109
+ ...session,
110
+ profile: this.sessionProfiles.get(session.id),
111
+ }))
112
+ .filter(s => s.profile),
113
+ metrics: {
114
+ completedTasks: 0,
115
+ failedTasks: 0,
116
+ totalTaskDuration: 0,
117
+ },
118
+ savedAt: new Date(),
119
+ };
120
+ await mkdir(dirname(this.persistencePath), { recursive: true });
121
+ await writeFile(this.persistencePath, JSON.stringify(data, null, 2), 'utf8');
122
+ this.eventBus.emit(SystemEventTypes.SESSION_PERSISTED, {
123
+ sessionCount: data.sessions.length,
124
+ path: this.persistencePath,
125
+ });
126
+ }
127
+ catch (error) {
128
+ // Let caller handle persistence errors
129
+ throw error;
130
+ }
131
+ }
132
+ async restoreSessions() {
133
+ if (!this.config.persistSessions) {
134
+ return null;
135
+ }
136
+ try {
137
+ const data = await readFile(this.persistencePath, 'utf8');
138
+ const persistence = JSON.parse(data);
139
+ // Filter to only active/idle sessions
140
+ const sessionsToRestore = persistence.sessions.filter(s => s.status === 'active' || s.status === 'idle');
141
+ this.eventBus.emit(SystemEventTypes.SESSION_RESTORED, {
142
+ sessionCount: sessionsToRestore.length,
143
+ path: this.persistencePath,
144
+ });
145
+ return {
146
+ ...persistence,
147
+ sessions: sessionsToRestore,
148
+ };
149
+ }
150
+ catch (error) {
151
+ if (error.code === 'ENOENT') {
152
+ return null;
153
+ }
154
+ throw error;
155
+ }
156
+ }
157
+ /**
158
+ * Clean up old terminated sessions
159
+ */
160
+ async cleanupTerminatedSessions(retentionMs) {
161
+ const cutoffTime = Date.now() - (retentionMs ?? this.config.sessionRetentionMs ?? 3600000);
162
+ let cleaned = 0;
163
+ for (const [sessionId, session] of this.sessions.entries()) {
164
+ if (session.status === 'terminated' && session.endTime) {
165
+ if (session.endTime.getTime() < cutoffTime) {
166
+ this.sessions.delete(sessionId);
167
+ this.sessionProfiles.delete(sessionId);
168
+ cleaned++;
169
+ }
170
+ }
171
+ }
172
+ return cleaned;
173
+ }
174
+ /**
175
+ * Get session profile
176
+ */
177
+ getSessionProfile(sessionId) {
178
+ return this.sessionProfiles.get(sessionId);
179
+ }
180
+ /**
181
+ * Get session count
182
+ */
183
+ getSessionCount() {
184
+ return this.sessions.size;
185
+ }
186
+ /**
187
+ * Get active session count
188
+ */
189
+ getActiveSessionCount() {
190
+ return this.getActiveSessions().length;
191
+ }
192
+ }
193
+ //# sourceMappingURL=session-manager.js.map
@@ -0,0 +1,49 @@
1
+ /**
2
+ * V3 Task Manager
3
+ * Decomposed from orchestrator.ts - Task lifecycle management
4
+ * ~200 lines (target achieved)
5
+ */
6
+ import type { ITask, ITaskCreate, ITaskResult, ITaskManager, ITaskQueue, TaskManagerMetrics } from '../interfaces/task.interface.js';
7
+ import type { IEventBus } from '../interfaces/event.interface.js';
8
+ /**
9
+ * Priority queue implementation for tasks
10
+ */
11
+ export declare class TaskQueue implements ITaskQueue {
12
+ private tasks;
13
+ enqueue(task: ITask): Promise<void>;
14
+ dequeue(): Promise<ITask | undefined>;
15
+ peek(): Promise<ITask | undefined>;
16
+ size(): number;
17
+ isEmpty(): boolean;
18
+ clear(): Promise<void>;
19
+ getAll(): Promise<ITask[]>;
20
+ remove(taskId: string): Promise<boolean>;
21
+ updatePriority(taskId: string, priority: number): Promise<boolean>;
22
+ }
23
+ /**
24
+ * Task manager implementation
25
+ */
26
+ export declare class TaskManager implements ITaskManager {
27
+ private eventBus;
28
+ private tasks;
29
+ private queue;
30
+ private metrics;
31
+ constructor(eventBus: IEventBus, queue?: ITaskQueue);
32
+ createTask(params: ITaskCreate): Promise<ITask>;
33
+ getTask(taskId: string): ITask | undefined;
34
+ getTasks(filter?: Partial<Pick<ITask, 'status' | 'type' | 'assignedAgent'>>): ITask[];
35
+ assignTask(taskId: string, agentId: string): Promise<void>;
36
+ startTask(taskId: string): Promise<void>;
37
+ completeTask(taskId: string, result: ITaskResult): Promise<void>;
38
+ failTask(taskId: string, error: Error): Promise<void>;
39
+ cancelTask(taskId: string, reason?: string): Promise<void>;
40
+ retryTask(taskId: string): Promise<void>;
41
+ getMetrics(): TaskManagerMetrics;
42
+ cleanup(olderThan: Date): Promise<number>;
43
+ private isRetryable;
44
+ /**
45
+ * Get the task queue
46
+ */
47
+ getQueue(): ITaskQueue;
48
+ }
49
+ //# sourceMappingURL=task-manager.d.ts.map