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,238 @@
1
+ /**
2
+ * V3 MCP Transport Factory
3
+ *
4
+ * Central factory for creating transport instances:
5
+ * - Unified transport creation API
6
+ * - Transport type validation
7
+ * - Configuration defaults
8
+ * - Multi-transport support
9
+ *
10
+ * Supported transports:
11
+ * - stdio: Standard I/O (default for CLI)
12
+ * - http: HTTP/REST with WebSocket upgrade
13
+ * - websocket: Standalone WebSocket
14
+ * - in-process: Direct function calls (fastest)
15
+ */
16
+ import { createStdioTransport } from './stdio.js';
17
+ import { createHttpTransport } from './http.js';
18
+ import { createWebSocketTransport } from './websocket.js';
19
+ // Re-export transport classes (values)
20
+ export { StdioTransport } from './stdio.js';
21
+ export { HttpTransport } from './http.js';
22
+ export { WebSocketTransport } from './websocket.js';
23
+ /**
24
+ * Create a transport instance based on type
25
+ */
26
+ export function createTransport(type, logger, config) {
27
+ switch (type) {
28
+ case 'stdio':
29
+ return createStdioTransport(logger, config);
30
+ case 'http':
31
+ if (!config || !('host' in config) || !('port' in config)) {
32
+ throw new Error('HTTP transport requires host and port configuration');
33
+ }
34
+ return createHttpTransport(logger, {
35
+ host: config.host,
36
+ port: config.port,
37
+ ...config,
38
+ });
39
+ case 'websocket':
40
+ if (!config || !('host' in config) || !('port' in config)) {
41
+ throw new Error('WebSocket transport requires host and port configuration');
42
+ }
43
+ return createWebSocketTransport(logger, {
44
+ host: config.host,
45
+ port: config.port,
46
+ ...config,
47
+ });
48
+ case 'in-process':
49
+ // In-process transport is handled directly by the server
50
+ // Return a no-op transport wrapper
51
+ return createInProcessTransport(logger);
52
+ default:
53
+ throw new Error(`Unknown transport type: ${type}`);
54
+ }
55
+ }
56
+ /**
57
+ * In-process transport (no-op wrapper)
58
+ *
59
+ * Used when tools are executed directly without network transport
60
+ */
61
+ class InProcessTransport {
62
+ logger;
63
+ type = 'in-process';
64
+ constructor(logger) {
65
+ this.logger = logger;
66
+ }
67
+ async start() {
68
+ this.logger.debug('In-process transport started');
69
+ }
70
+ async stop() {
71
+ this.logger.debug('In-process transport stopped');
72
+ }
73
+ onRequest() {
74
+ // No-op - requests are handled directly
75
+ }
76
+ onNotification() {
77
+ // No-op - notifications are handled directly
78
+ }
79
+ async getHealthStatus() {
80
+ return {
81
+ healthy: true,
82
+ metrics: {
83
+ latency: 0,
84
+ connections: 1,
85
+ },
86
+ };
87
+ }
88
+ }
89
+ /**
90
+ * Create in-process transport
91
+ */
92
+ export function createInProcessTransport(logger) {
93
+ return new InProcessTransport(logger);
94
+ }
95
+ /**
96
+ * Transport manager for multi-transport scenarios
97
+ */
98
+ export class TransportManager {
99
+ logger;
100
+ transports = new Map();
101
+ running = false;
102
+ constructor(logger) {
103
+ this.logger = logger;
104
+ }
105
+ /**
106
+ * Add a transport
107
+ */
108
+ addTransport(name, transport) {
109
+ if (this.transports.has(name)) {
110
+ throw new Error(`Transport "${name}" already exists`);
111
+ }
112
+ this.transports.set(name, transport);
113
+ this.logger.debug('Transport added', { name, type: transport.type });
114
+ }
115
+ /**
116
+ * Remove a transport
117
+ */
118
+ async removeTransport(name) {
119
+ const transport = this.transports.get(name);
120
+ if (!transport) {
121
+ return false;
122
+ }
123
+ await transport.stop();
124
+ this.transports.delete(name);
125
+ this.logger.debug('Transport removed', { name });
126
+ return true;
127
+ }
128
+ /**
129
+ * Get a transport by name
130
+ */
131
+ getTransport(name) {
132
+ return this.transports.get(name);
133
+ }
134
+ /**
135
+ * Get all transport names
136
+ */
137
+ getTransportNames() {
138
+ return Array.from(this.transports.keys());
139
+ }
140
+ /**
141
+ * Start all transports
142
+ */
143
+ async startAll() {
144
+ if (this.running) {
145
+ throw new Error('TransportManager already running');
146
+ }
147
+ this.logger.info('Starting all transports', { count: this.transports.size });
148
+ const startPromises = Array.from(this.transports.entries()).map(async ([name, transport]) => {
149
+ try {
150
+ await transport.start();
151
+ this.logger.info('Transport started', { name, type: transport.type });
152
+ }
153
+ catch (error) {
154
+ this.logger.error('Failed to start transport', { name, error });
155
+ throw error;
156
+ }
157
+ });
158
+ await Promise.all(startPromises);
159
+ this.running = true;
160
+ this.logger.info('All transports started');
161
+ }
162
+ /**
163
+ * Stop all transports
164
+ */
165
+ async stopAll() {
166
+ if (!this.running) {
167
+ return;
168
+ }
169
+ this.logger.info('Stopping all transports');
170
+ const stopPromises = Array.from(this.transports.entries()).map(async ([name, transport]) => {
171
+ try {
172
+ await transport.stop();
173
+ this.logger.info('Transport stopped', { name });
174
+ }
175
+ catch (error) {
176
+ this.logger.error('Error stopping transport', { name, error });
177
+ }
178
+ });
179
+ await Promise.all(stopPromises);
180
+ this.running = false;
181
+ this.logger.info('All transports stopped');
182
+ }
183
+ /**
184
+ * Get health status of all transports
185
+ */
186
+ async getHealthStatus() {
187
+ const results = {};
188
+ for (const [name, transport] of this.transports) {
189
+ try {
190
+ const status = await transport.getHealthStatus();
191
+ results[name] = { healthy: status.healthy, error: status.error };
192
+ }
193
+ catch (error) {
194
+ results[name] = {
195
+ healthy: false,
196
+ error: error instanceof Error ? error.message : 'Unknown error',
197
+ };
198
+ }
199
+ }
200
+ return results;
201
+ }
202
+ /**
203
+ * Check if any transport is running
204
+ */
205
+ isRunning() {
206
+ return this.running;
207
+ }
208
+ }
209
+ /**
210
+ * Create a transport manager
211
+ */
212
+ export function createTransportManager(logger) {
213
+ return new TransportManager(logger);
214
+ }
215
+ /**
216
+ * Default transport configurations
217
+ */
218
+ export const DEFAULT_TRANSPORT_CONFIGS = {
219
+ stdio: {},
220
+ http: {
221
+ host: 'localhost',
222
+ port: 3000,
223
+ corsEnabled: true,
224
+ corsOrigins: ['*'],
225
+ maxRequestSize: '10mb',
226
+ requestTimeout: 30000,
227
+ },
228
+ websocket: {
229
+ host: 'localhost',
230
+ port: 3001,
231
+ path: '/ws',
232
+ maxConnections: 100,
233
+ heartbeatInterval: 30000,
234
+ heartbeatTimeout: 10000,
235
+ maxMessageSize: 10 * 1024 * 1024,
236
+ },
237
+ };
238
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,104 @@
1
+ /**
2
+ * V3 MCP Stdio Transport
3
+ *
4
+ * Standard I/O transport for MCP communication:
5
+ * - Optimized JSON parsing with streaming
6
+ * - Buffer management for large messages
7
+ * - Graceful shutdown handling
8
+ *
9
+ * Performance Targets:
10
+ * - Message parsing: <5ms
11
+ * - Response sending: <2ms
12
+ */
13
+ import { EventEmitter } from 'events';
14
+ import { ITransport, TransportType, MCPNotification, RequestHandler, NotificationHandler, TransportHealthStatus, ILogger } from '../types.js';
15
+ /**
16
+ * Stdio Transport Configuration
17
+ */
18
+ export interface StdioTransportConfig {
19
+ inputStream?: NodeJS.ReadableStream;
20
+ outputStream?: NodeJS.WritableStream;
21
+ maxMessageSize?: number;
22
+ }
23
+ /**
24
+ * Stdio Transport Implementation
25
+ *
26
+ * Uses readline for efficient line-by-line processing of JSON-RPC messages
27
+ */
28
+ export declare class StdioTransport extends EventEmitter implements ITransport {
29
+ private readonly logger;
30
+ readonly type: TransportType;
31
+ private requestHandler?;
32
+ private notificationHandler?;
33
+ private rl?;
34
+ private running;
35
+ private messageBuffer;
36
+ private messagesReceived;
37
+ private messagesSent;
38
+ private errors;
39
+ private readonly inputStream;
40
+ private readonly outputStream;
41
+ private readonly maxMessageSize;
42
+ constructor(logger: ILogger, config?: StdioTransportConfig);
43
+ /**
44
+ * Start the transport
45
+ */
46
+ start(): Promise<void>;
47
+ /**
48
+ * Stop the transport
49
+ */
50
+ stop(): Promise<void>;
51
+ /**
52
+ * Register request handler
53
+ */
54
+ onRequest(handler: RequestHandler): void;
55
+ /**
56
+ * Register notification handler
57
+ */
58
+ onNotification(handler: NotificationHandler): void;
59
+ /**
60
+ * Get health status
61
+ */
62
+ getHealthStatus(): Promise<TransportHealthStatus>;
63
+ /**
64
+ * Handle incoming line
65
+ */
66
+ private handleLine;
67
+ /**
68
+ * Handle MCP request
69
+ */
70
+ private handleRequest;
71
+ /**
72
+ * Handle MCP notification
73
+ */
74
+ private handleNotification;
75
+ /**
76
+ * Send response to stdout
77
+ */
78
+ private sendResponse;
79
+ /**
80
+ * Send error response
81
+ */
82
+ private sendError;
83
+ /**
84
+ * Send notification to stdout
85
+ */
86
+ sendNotification(notification: MCPNotification): Promise<void>;
87
+ /**
88
+ * Write to output stream
89
+ */
90
+ private write;
91
+ /**
92
+ * Handle stream close
93
+ */
94
+ private handleClose;
95
+ /**
96
+ * Handle stream error
97
+ */
98
+ private handleError;
99
+ }
100
+ /**
101
+ * Create stdio transport
102
+ */
103
+ export declare function createStdioTransport(logger: ILogger, config?: StdioTransportConfig): StdioTransport;
104
+ //# sourceMappingURL=stdio.d.ts.map
@@ -0,0 +1,263 @@
1
+ /**
2
+ * V3 MCP Stdio Transport
3
+ *
4
+ * Standard I/O transport for MCP communication:
5
+ * - Optimized JSON parsing with streaming
6
+ * - Buffer management for large messages
7
+ * - Graceful shutdown handling
8
+ *
9
+ * Performance Targets:
10
+ * - Message parsing: <5ms
11
+ * - Response sending: <2ms
12
+ */
13
+ import { EventEmitter } from 'events';
14
+ import * as readline from 'readline';
15
+ /**
16
+ * Stdio Transport Implementation
17
+ *
18
+ * Uses readline for efficient line-by-line processing of JSON-RPC messages
19
+ */
20
+ export class StdioTransport extends EventEmitter {
21
+ logger;
22
+ type = 'stdio';
23
+ requestHandler;
24
+ notificationHandler;
25
+ rl;
26
+ running = false;
27
+ messageBuffer = '';
28
+ // Statistics
29
+ messagesReceived = 0;
30
+ messagesSent = 0;
31
+ errors = 0;
32
+ inputStream;
33
+ outputStream;
34
+ maxMessageSize;
35
+ constructor(logger, config = {}) {
36
+ super();
37
+ this.logger = logger;
38
+ this.inputStream = config.inputStream || process.stdin;
39
+ this.outputStream = config.outputStream || process.stdout;
40
+ this.maxMessageSize = config.maxMessageSize || 10 * 1024 * 1024; // 10MB default
41
+ }
42
+ /**
43
+ * Start the transport
44
+ */
45
+ async start() {
46
+ if (this.running) {
47
+ throw new Error('Stdio transport already running');
48
+ }
49
+ this.logger.info('Starting stdio transport');
50
+ // Create readline interface for efficient line processing
51
+ this.rl = readline.createInterface({
52
+ input: this.inputStream,
53
+ crlfDelay: Infinity,
54
+ });
55
+ // Handle incoming lines
56
+ this.rl.on('line', (line) => {
57
+ this.handleLine(line);
58
+ });
59
+ // Handle close
60
+ this.rl.on('close', () => {
61
+ this.handleClose();
62
+ });
63
+ // Handle errors on input stream
64
+ this.inputStream.on('error', (error) => {
65
+ this.handleError(error);
66
+ });
67
+ this.running = true;
68
+ this.logger.info('Stdio transport started');
69
+ }
70
+ /**
71
+ * Stop the transport
72
+ */
73
+ async stop() {
74
+ if (!this.running) {
75
+ return;
76
+ }
77
+ this.logger.info('Stopping stdio transport');
78
+ this.running = false;
79
+ if (this.rl) {
80
+ this.rl.close();
81
+ this.rl = undefined;
82
+ }
83
+ this.logger.info('Stdio transport stopped');
84
+ }
85
+ /**
86
+ * Register request handler
87
+ */
88
+ onRequest(handler) {
89
+ this.requestHandler = handler;
90
+ }
91
+ /**
92
+ * Register notification handler
93
+ */
94
+ onNotification(handler) {
95
+ this.notificationHandler = handler;
96
+ }
97
+ /**
98
+ * Get health status
99
+ */
100
+ async getHealthStatus() {
101
+ return {
102
+ healthy: this.running,
103
+ metrics: {
104
+ messagesReceived: this.messagesReceived,
105
+ messagesSent: this.messagesSent,
106
+ errors: this.errors,
107
+ },
108
+ };
109
+ }
110
+ /**
111
+ * Handle incoming line
112
+ */
113
+ async handleLine(line) {
114
+ if (!line.trim()) {
115
+ return;
116
+ }
117
+ // Check message size
118
+ if (line.length > this.maxMessageSize) {
119
+ this.logger.error('Message exceeds maximum size', {
120
+ size: line.length,
121
+ max: this.maxMessageSize,
122
+ });
123
+ this.errors++;
124
+ return;
125
+ }
126
+ try {
127
+ const message = JSON.parse(line);
128
+ this.messagesReceived++;
129
+ // Validate JSON-RPC format
130
+ if (message.jsonrpc !== '2.0') {
131
+ this.logger.warn('Invalid JSON-RPC version', { received: message.jsonrpc });
132
+ await this.sendError(message.id, -32600, 'Invalid JSON-RPC version');
133
+ return;
134
+ }
135
+ if (!message.method) {
136
+ this.logger.warn('Missing method in request');
137
+ await this.sendError(message.id, -32600, 'Missing method');
138
+ return;
139
+ }
140
+ // Determine if this is a request or notification
141
+ if (message.id !== undefined) {
142
+ // Request - needs response
143
+ await this.handleRequest(message);
144
+ }
145
+ else {
146
+ // Notification - no response needed
147
+ await this.handleNotification(message);
148
+ }
149
+ }
150
+ catch (error) {
151
+ this.errors++;
152
+ this.logger.error('Failed to parse message', { error, line: line.substring(0, 100) });
153
+ await this.sendError(null, -32700, 'Parse error');
154
+ }
155
+ }
156
+ /**
157
+ * Handle MCP request
158
+ */
159
+ async handleRequest(request) {
160
+ if (!this.requestHandler) {
161
+ this.logger.warn('No request handler registered');
162
+ await this.sendError(request.id, -32603, 'No request handler');
163
+ return;
164
+ }
165
+ try {
166
+ const startTime = performance.now();
167
+ const response = await this.requestHandler(request);
168
+ const duration = performance.now() - startTime;
169
+ this.logger.debug('Request processed', {
170
+ method: request.method,
171
+ duration: `${duration.toFixed(2)}ms`,
172
+ });
173
+ await this.sendResponse(response);
174
+ }
175
+ catch (error) {
176
+ this.logger.error('Request handler error', { method: request.method, error });
177
+ await this.sendError(request.id, -32603, error instanceof Error ? error.message : 'Internal error');
178
+ }
179
+ }
180
+ /**
181
+ * Handle MCP notification
182
+ */
183
+ async handleNotification(notification) {
184
+ if (!this.notificationHandler) {
185
+ this.logger.debug('Notification received but no handler', { method: notification.method });
186
+ return;
187
+ }
188
+ try {
189
+ await this.notificationHandler(notification);
190
+ }
191
+ catch (error) {
192
+ this.logger.error('Notification handler error', { method: notification.method, error });
193
+ // Notifications don't send error responses
194
+ }
195
+ }
196
+ /**
197
+ * Send response to stdout
198
+ */
199
+ async sendResponse(response) {
200
+ const json = JSON.stringify(response);
201
+ await this.write(json);
202
+ this.messagesSent++;
203
+ }
204
+ /**
205
+ * Send error response
206
+ */
207
+ async sendError(id, code, message) {
208
+ const response = {
209
+ jsonrpc: '2.0',
210
+ id,
211
+ error: { code, message },
212
+ };
213
+ await this.sendResponse(response);
214
+ this.errors++;
215
+ }
216
+ /**
217
+ * Send notification to stdout
218
+ */
219
+ async sendNotification(notification) {
220
+ const json = JSON.stringify(notification);
221
+ await this.write(json);
222
+ this.messagesSent++;
223
+ }
224
+ /**
225
+ * Write to output stream
226
+ */
227
+ write(data) {
228
+ return new Promise((resolve, reject) => {
229
+ this.outputStream.write(data + '\n', (error) => {
230
+ if (error) {
231
+ this.errors++;
232
+ reject(error);
233
+ }
234
+ else {
235
+ resolve();
236
+ }
237
+ });
238
+ });
239
+ }
240
+ /**
241
+ * Handle stream close
242
+ */
243
+ handleClose() {
244
+ this.logger.info('Stdio stream closed');
245
+ this.running = false;
246
+ this.emit('close');
247
+ }
248
+ /**
249
+ * Handle stream error
250
+ */
251
+ handleError(error) {
252
+ this.logger.error('Stdio stream error', error);
253
+ this.errors++;
254
+ this.emit('error', error);
255
+ }
256
+ }
257
+ /**
258
+ * Create stdio transport
259
+ */
260
+ export function createStdioTransport(logger, config = {}) {
261
+ return new StdioTransport(logger, config);
262
+ }
263
+ //# sourceMappingURL=stdio.js.map