@pcircle/memesh 2.6.6 → 2.6.7

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 (370) hide show
  1. package/README.md +92 -31
  2. package/README.zh-TW.md +89 -28
  3. package/dist/a2a/client/A2AClient.d.ts +5 -1
  4. package/dist/a2a/client/A2AClient.d.ts.map +1 -1
  5. package/dist/a2a/client/A2AClient.js +161 -61
  6. package/dist/a2a/client/A2AClient.js.map +1 -1
  7. package/dist/a2a/constants.d.ts +34 -0
  8. package/dist/a2a/constants.d.ts.map +1 -0
  9. package/dist/a2a/constants.js +34 -0
  10. package/dist/a2a/constants.js.map +1 -0
  11. package/dist/a2a/delegator/MCPTaskDelegator.d.ts +19 -0
  12. package/dist/a2a/delegator/MCPTaskDelegator.d.ts.map +1 -0
  13. package/dist/a2a/delegator/MCPTaskDelegator.js +184 -0
  14. package/dist/a2a/delegator/MCPTaskDelegator.js.map +1 -0
  15. package/dist/a2a/delegator/index.d.ts +3 -0
  16. package/dist/a2a/delegator/index.d.ts.map +1 -0
  17. package/dist/a2a/delegator/index.js +2 -0
  18. package/dist/a2a/delegator/index.js.map +1 -0
  19. package/dist/a2a/delegator/types.d.ts +9 -0
  20. package/dist/a2a/delegator/types.d.ts.map +1 -0
  21. package/dist/a2a/delegator/types.js +2 -0
  22. package/dist/a2a/delegator/types.js.map +1 -0
  23. package/dist/a2a/errors/ErrorCodes.d.ts +24 -0
  24. package/dist/a2a/errors/ErrorCodes.d.ts.map +1 -0
  25. package/dist/a2a/errors/ErrorCodes.js +23 -0
  26. package/dist/a2a/errors/ErrorCodes.js.map +1 -0
  27. package/dist/a2a/errors/ErrorMessages.d.ts +26 -0
  28. package/dist/a2a/errors/ErrorMessages.d.ts.map +1 -0
  29. package/dist/a2a/errors/ErrorMessages.js +49 -0
  30. package/dist/a2a/errors/ErrorMessages.js.map +1 -0
  31. package/dist/a2a/errors/index.d.ts +3 -0
  32. package/dist/a2a/errors/index.d.ts.map +1 -0
  33. package/dist/a2a/errors/index.js +3 -0
  34. package/dist/a2a/errors/index.js.map +1 -0
  35. package/dist/a2a/executor/TaskExecutor.d.ts +6 -4
  36. package/dist/a2a/executor/TaskExecutor.d.ts.map +1 -1
  37. package/dist/a2a/executor/TaskExecutor.js +8 -47
  38. package/dist/a2a/executor/TaskExecutor.js.map +1 -1
  39. package/dist/a2a/jobs/TimeoutChecker.d.ts +49 -0
  40. package/dist/a2a/jobs/TimeoutChecker.d.ts.map +1 -0
  41. package/dist/a2a/jobs/TimeoutChecker.js +162 -0
  42. package/dist/a2a/jobs/TimeoutChecker.js.map +1 -0
  43. package/dist/a2a/metrics/A2AMetrics.d.ts +38 -0
  44. package/dist/a2a/metrics/A2AMetrics.d.ts.map +1 -0
  45. package/dist/a2a/metrics/A2AMetrics.js +142 -0
  46. package/dist/a2a/metrics/A2AMetrics.js.map +1 -0
  47. package/dist/a2a/metrics/index.d.ts +3 -0
  48. package/dist/a2a/metrics/index.d.ts.map +1 -0
  49. package/dist/a2a/metrics/index.js +2 -0
  50. package/dist/a2a/metrics/index.js.map +1 -0
  51. package/dist/a2a/server/A2AServer.d.ts +2 -0
  52. package/dist/a2a/server/A2AServer.d.ts.map +1 -1
  53. package/dist/a2a/server/A2AServer.js +44 -7
  54. package/dist/a2a/server/A2AServer.js.map +1 -1
  55. package/dist/a2a/server/middleware/auth.d.ts +6 -0
  56. package/dist/a2a/server/middleware/auth.d.ts.map +1 -0
  57. package/dist/a2a/server/middleware/auth.js +64 -0
  58. package/dist/a2a/server/middleware/auth.js.map +1 -0
  59. package/dist/a2a/server/middleware/csrf.d.ts +7 -0
  60. package/dist/a2a/server/middleware/csrf.d.ts.map +1 -0
  61. package/dist/a2a/server/middleware/csrf.js +143 -0
  62. package/dist/a2a/server/middleware/csrf.js.map +1 -0
  63. package/dist/a2a/server/middleware/rateLimit.d.ts +9 -0
  64. package/dist/a2a/server/middleware/rateLimit.d.ts.map +1 -0
  65. package/dist/a2a/server/middleware/rateLimit.js +192 -0
  66. package/dist/a2a/server/middleware/rateLimit.js.map +1 -0
  67. package/dist/a2a/server/middleware/resourceProtection.d.ts +17 -0
  68. package/dist/a2a/server/middleware/resourceProtection.d.ts.map +1 -0
  69. package/dist/a2a/server/middleware/resourceProtection.js +240 -0
  70. package/dist/a2a/server/middleware/resourceProtection.js.map +1 -0
  71. package/dist/a2a/server/middleware/timeout.d.ts +4 -0
  72. package/dist/a2a/server/middleware/timeout.d.ts.map +1 -0
  73. package/dist/a2a/server/middleware/timeout.js +36 -0
  74. package/dist/a2a/server/middleware/timeout.js.map +1 -0
  75. package/dist/a2a/storage/TaskQueue.d.ts +3 -0
  76. package/dist/a2a/storage/TaskQueue.d.ts.map +1 -1
  77. package/dist/a2a/storage/TaskQueue.js +80 -18
  78. package/dist/a2a/storage/TaskQueue.js.map +1 -1
  79. package/dist/a2a/storage/inputValidation.d.ts +7 -0
  80. package/dist/a2a/storage/inputValidation.d.ts.map +1 -0
  81. package/dist/a2a/storage/inputValidation.js +91 -0
  82. package/dist/a2a/storage/inputValidation.js.map +1 -0
  83. package/dist/a2a/storage/schemas.sql +11 -1
  84. package/dist/a2a/types/index.d.ts +1 -0
  85. package/dist/a2a/types/index.d.ts.map +1 -1
  86. package/dist/a2a/types/rateLimit.d.ts +26 -0
  87. package/dist/a2a/types/rateLimit.d.ts.map +1 -0
  88. package/dist/a2a/types/rateLimit.js +2 -0
  89. package/dist/a2a/types/rateLimit.js.map +1 -0
  90. package/dist/a2a/types/task.d.ts +1 -1
  91. package/dist/a2a/types/task.d.ts.map +1 -1
  92. package/dist/cli/config.d.ts +36 -0
  93. package/dist/cli/config.d.ts.map +1 -0
  94. package/dist/cli/config.js +398 -0
  95. package/dist/cli/config.js.map +1 -0
  96. package/dist/cli/daemon.d.ts +3 -0
  97. package/dist/cli/daemon.d.ts.map +1 -0
  98. package/dist/cli/daemon.js +413 -0
  99. package/dist/cli/daemon.js.map +1 -0
  100. package/dist/cli/dashboard.d.ts +2 -0
  101. package/dist/cli/dashboard.d.ts.map +1 -0
  102. package/dist/cli/dashboard.js +300 -0
  103. package/dist/cli/dashboard.js.map +1 -0
  104. package/dist/cli/index.d.ts +3 -0
  105. package/dist/cli/index.d.ts.map +1 -0
  106. package/dist/cli/index.js +182 -0
  107. package/dist/cli/index.js.map +1 -0
  108. package/dist/cli/setup-wizard.d.ts +18 -0
  109. package/dist/cli/setup-wizard.d.ts.map +1 -0
  110. package/dist/cli/setup-wizard.js +308 -0
  111. package/dist/cli/setup-wizard.js.map +1 -0
  112. package/dist/cli/stats.d.ts +34 -0
  113. package/dist/cli/stats.d.ts.map +1 -0
  114. package/dist/cli/stats.js +480 -0
  115. package/dist/cli/stats.js.map +1 -0
  116. package/dist/cli/tutorial.d.ts +27 -0
  117. package/dist/cli/tutorial.d.ts.map +1 -0
  118. package/dist/cli/tutorial.js +430 -0
  119. package/dist/cli/tutorial.js.map +1 -0
  120. package/dist/config/index.d.ts.map +1 -1
  121. package/dist/config/index.js +8 -7
  122. package/dist/config/index.js.map +1 -1
  123. package/dist/core/BackgroundExecutor.d.ts +6 -0
  124. package/dist/core/BackgroundExecutor.d.ts.map +1 -1
  125. package/dist/core/BackgroundExecutor.js +152 -44
  126. package/dist/core/BackgroundExecutor.js.map +1 -1
  127. package/dist/core/ClaudeMdRuleExtractor.d.ts.map +1 -1
  128. package/dist/core/ClaudeMdRuleExtractor.js +9 -14
  129. package/dist/core/ClaudeMdRuleExtractor.js.map +1 -1
  130. package/dist/core/MistakePatternManager.d.ts.map +1 -1
  131. package/dist/core/MistakePatternManager.js +29 -3
  132. package/dist/core/MistakePatternManager.js.map +1 -1
  133. package/dist/core/ResourceMonitor.d.ts.map +1 -1
  134. package/dist/core/ResourceMonitor.js +64 -2
  135. package/dist/core/ResourceMonitor.js.map +1 -1
  136. package/dist/core/ResultHandler.d.ts.map +1 -1
  137. package/dist/core/ResultHandler.js +12 -0
  138. package/dist/core/ResultHandler.js.map +1 -1
  139. package/dist/core/SessionContextMonitor.d.ts.map +1 -1
  140. package/dist/core/SessionContextMonitor.js +4 -1
  141. package/dist/core/SessionContextMonitor.js.map +1 -1
  142. package/dist/core/SessionTokenTracker.d.ts.map +1 -1
  143. package/dist/core/SessionTokenTracker.js +58 -2
  144. package/dist/core/SessionTokenTracker.js.map +1 -1
  145. package/dist/db/ConnectionPool.d.ts.map +1 -1
  146. package/dist/db/ConnectionPool.js +111 -37
  147. package/dist/db/ConnectionPool.js.map +1 -1
  148. package/dist/db/QueryCache.d.ts.map +1 -1
  149. package/dist/db/QueryCache.js +8 -5
  150. package/dist/db/QueryCache.js.map +1 -1
  151. package/dist/errors/ErrorClassifier.d.ts +60 -0
  152. package/dist/errors/ErrorClassifier.d.ts.map +1 -0
  153. package/dist/errors/ErrorClassifier.js +443 -0
  154. package/dist/errors/ErrorClassifier.js.map +1 -0
  155. package/dist/errors/index.d.ts +1 -0
  156. package/dist/errors/index.d.ts.map +1 -1
  157. package/dist/errors/index.js +3 -0
  158. package/dist/errors/index.js.map +1 -1
  159. package/dist/evolution/ABTestManager.d.ts.map +1 -1
  160. package/dist/evolution/ABTestManager.js +80 -1
  161. package/dist/evolution/ABTestManager.js.map +1 -1
  162. package/dist/evolution/FeedbackCollector.d.ts.map +1 -1
  163. package/dist/evolution/FeedbackCollector.js +6 -0
  164. package/dist/evolution/FeedbackCollector.js.map +1 -1
  165. package/dist/evolution/LearningManager.d.ts.map +1 -1
  166. package/dist/evolution/LearningManager.js +16 -0
  167. package/dist/evolution/LearningManager.js.map +1 -1
  168. package/dist/evolution/MultiObjectiveOptimizer.d.ts.map +1 -1
  169. package/dist/evolution/MultiObjectiveOptimizer.js +18 -3
  170. package/dist/evolution/MultiObjectiveOptimizer.js.map +1 -1
  171. package/dist/evolution/PerformanceTracker.d.ts.map +1 -1
  172. package/dist/evolution/PerformanceTracker.js +83 -13
  173. package/dist/evolution/PerformanceTracker.js.map +1 -1
  174. package/dist/evolution/StatisticalAnalyzer.d.ts +1 -0
  175. package/dist/evolution/StatisticalAnalyzer.d.ts.map +1 -1
  176. package/dist/evolution/StatisticalAnalyzer.js +126 -9
  177. package/dist/evolution/StatisticalAnalyzer.js.map +1 -1
  178. package/dist/evolution/storage/SQLiteStore.d.ts +1 -0
  179. package/dist/evolution/storage/SQLiteStore.d.ts.map +1 -1
  180. package/dist/evolution/storage/SQLiteStore.js +59 -12
  181. package/dist/evolution/storage/SQLiteStore.js.map +1 -1
  182. package/dist/evolution/storage/validation.d.ts +2 -3
  183. package/dist/evolution/storage/validation.d.ts.map +1 -1
  184. package/dist/evolution/storage/validation.js +2 -6
  185. package/dist/evolution/storage/validation.js.map +1 -1
  186. package/dist/knowledge-graph/index.d.ts +5 -1
  187. package/dist/knowledge-graph/index.d.ts.map +1 -1
  188. package/dist/knowledge-graph/index.js +167 -43
  189. package/dist/knowledge-graph/index.js.map +1 -1
  190. package/dist/knowledge-graph/types.d.ts +1 -0
  191. package/dist/knowledge-graph/types.d.ts.map +1 -1
  192. package/dist/mcp/BuddyCommands.d.ts +11 -2
  193. package/dist/mcp/BuddyCommands.d.ts.map +1 -1
  194. package/dist/mcp/BuddyCommands.js +200 -50
  195. package/dist/mcp/BuddyCommands.js.map +1 -1
  196. package/dist/mcp/ServerInitializer.d.ts +7 -1
  197. package/dist/mcp/ServerInitializer.d.ts.map +1 -1
  198. package/dist/mcp/ServerInitializer.js +121 -69
  199. package/dist/mcp/ServerInitializer.js.map +1 -1
  200. package/dist/mcp/ToolDefinitions.d.ts.map +1 -1
  201. package/dist/mcp/ToolDefinitions.js +57 -11
  202. package/dist/mcp/ToolDefinitions.js.map +1 -1
  203. package/dist/mcp/ToolRouter.d.ts +6 -0
  204. package/dist/mcp/ToolRouter.d.ts.map +1 -1
  205. package/dist/mcp/ToolRouter.js +90 -2
  206. package/dist/mcp/ToolRouter.js.map +1 -1
  207. package/dist/mcp/daemon/DaemonBootstrap.d.ts +33 -0
  208. package/dist/mcp/daemon/DaemonBootstrap.d.ts.map +1 -0
  209. package/dist/mcp/daemon/DaemonBootstrap.js +155 -0
  210. package/dist/mcp/daemon/DaemonBootstrap.js.map +1 -0
  211. package/dist/mcp/daemon/DaemonLockManager.d.ts +47 -0
  212. package/dist/mcp/daemon/DaemonLockManager.d.ts.map +1 -0
  213. package/dist/mcp/daemon/DaemonLockManager.js +417 -0
  214. package/dist/mcp/daemon/DaemonLockManager.js.map +1 -0
  215. package/dist/mcp/daemon/DaemonProtocol.d.ts +127 -0
  216. package/dist/mcp/daemon/DaemonProtocol.d.ts.map +1 -0
  217. package/dist/mcp/daemon/DaemonProtocol.js +452 -0
  218. package/dist/mcp/daemon/DaemonProtocol.js.map +1 -0
  219. package/dist/mcp/daemon/DaemonSocketServer.d.ts +71 -0
  220. package/dist/mcp/daemon/DaemonSocketServer.d.ts.map +1 -0
  221. package/dist/mcp/daemon/DaemonSocketServer.js +384 -0
  222. package/dist/mcp/daemon/DaemonSocketServer.js.map +1 -0
  223. package/dist/mcp/daemon/GracefulShutdownCoordinator.d.ts +67 -0
  224. package/dist/mcp/daemon/GracefulShutdownCoordinator.d.ts.map +1 -0
  225. package/dist/mcp/daemon/GracefulShutdownCoordinator.js +206 -0
  226. package/dist/mcp/daemon/GracefulShutdownCoordinator.js.map +1 -0
  227. package/dist/mcp/daemon/IpcTransport.d.ts +42 -0
  228. package/dist/mcp/daemon/IpcTransport.d.ts.map +1 -0
  229. package/dist/mcp/daemon/IpcTransport.js +231 -0
  230. package/dist/mcp/daemon/IpcTransport.js.map +1 -0
  231. package/dist/mcp/daemon/StdioProxyClient.d.ts +84 -0
  232. package/dist/mcp/daemon/StdioProxyClient.d.ts.map +1 -0
  233. package/dist/mcp/daemon/StdioProxyClient.js +560 -0
  234. package/dist/mcp/daemon/StdioProxyClient.js.map +1 -0
  235. package/dist/mcp/daemon/VersionManager.d.ts +35 -0
  236. package/dist/mcp/daemon/VersionManager.d.ts.map +1 -0
  237. package/dist/mcp/daemon/VersionManager.js +169 -0
  238. package/dist/mcp/daemon/VersionManager.js.map +1 -0
  239. package/dist/mcp/daemon/index.d.ts +9 -0
  240. package/dist/mcp/daemon/index.d.ts.map +1 -0
  241. package/dist/mcp/daemon/index.js +9 -0
  242. package/dist/mcp/daemon/index.js.map +1 -0
  243. package/dist/mcp/handlers/A2AToolHandlers.d.ts.map +1 -1
  244. package/dist/mcp/handlers/A2AToolHandlers.js +24 -4
  245. package/dist/mcp/handlers/A2AToolHandlers.js.map +1 -1
  246. package/dist/mcp/resources/buddy-do-skill.md +1 -1
  247. package/dist/mcp/schemas/OutputSchemas.d.ts +16 -0
  248. package/dist/mcp/schemas/OutputSchemas.d.ts.map +1 -1
  249. package/dist/mcp/schemas/OutputSchemas.js +12 -0
  250. package/dist/mcp/schemas/OutputSchemas.js.map +1 -1
  251. package/dist/mcp/server-bootstrap.js +178 -27
  252. package/dist/mcp/server-bootstrap.js.map +1 -1
  253. package/dist/mcp/server.d.ts +10 -1
  254. package/dist/mcp/server.d.ts.map +1 -1
  255. package/dist/mcp/server.js +108 -9
  256. package/dist/mcp/server.js.map +1 -1
  257. package/dist/mcp/tools/a2a-list-tasks.d.ts +13 -0
  258. package/dist/mcp/tools/a2a-list-tasks.d.ts.map +1 -0
  259. package/dist/mcp/tools/a2a-list-tasks.js +24 -0
  260. package/dist/mcp/tools/a2a-list-tasks.js.map +1 -0
  261. package/dist/mcp/tools/a2a-report-result.d.ts +35 -0
  262. package/dist/mcp/tools/a2a-report-result.d.ts.map +1 -0
  263. package/dist/mcp/tools/a2a-report-result.js +73 -0
  264. package/dist/mcp/tools/a2a-report-result.js.map +1 -0
  265. package/dist/mcp/tools/buddy-do.d.ts.map +1 -1
  266. package/dist/mcp/tools/buddy-do.js.map +1 -1
  267. package/dist/mcp/tools/buddy-help.d.ts.map +1 -1
  268. package/dist/mcp/tools/buddy-help.js +6 -14
  269. package/dist/mcp/tools/buddy-help.js.map +1 -1
  270. package/dist/mcp/validation.d.ts +1 -1
  271. package/dist/memory/AutoMemoryRecorder.d.ts +35 -0
  272. package/dist/memory/AutoMemoryRecorder.d.ts.map +1 -0
  273. package/dist/memory/AutoMemoryRecorder.js +164 -0
  274. package/dist/memory/AutoMemoryRecorder.js.map +1 -0
  275. package/dist/memory/AutoTagger.d.ts +9 -0
  276. package/dist/memory/AutoTagger.d.ts.map +1 -0
  277. package/dist/memory/AutoTagger.js +148 -0
  278. package/dist/memory/AutoTagger.js.map +1 -0
  279. package/dist/memory/SecretManager.d.ts.map +1 -1
  280. package/dist/memory/SecretManager.js +47 -14
  281. package/dist/memory/SecretManager.js.map +1 -1
  282. package/dist/memory/SmartMemoryQuery.d.ts +9 -0
  283. package/dist/memory/SmartMemoryQuery.d.ts.map +1 -0
  284. package/dist/memory/SmartMemoryQuery.js +65 -0
  285. package/dist/memory/SmartMemoryQuery.js.map +1 -0
  286. package/dist/memory/UnifiedMemoryStore.d.ts +1 -0
  287. package/dist/memory/UnifiedMemoryStore.d.ts.map +1 -1
  288. package/dist/memory/UnifiedMemoryStore.js +211 -38
  289. package/dist/memory/UnifiedMemoryStore.js.map +1 -1
  290. package/dist/memory/UserPreferenceEngine.d.ts.map +1 -1
  291. package/dist/memory/UserPreferenceEngine.js +5 -4
  292. package/dist/memory/UserPreferenceEngine.js.map +1 -1
  293. package/dist/memory/types/unified-memory.d.ts +2 -0
  294. package/dist/memory/types/unified-memory.d.ts.map +1 -1
  295. package/dist/memory/types/unified-memory.js +2 -0
  296. package/dist/memory/types/unified-memory.js.map +1 -1
  297. package/dist/orchestrator/AgentRouter.d.ts.map +1 -1
  298. package/dist/orchestrator/AgentRouter.js +5 -4
  299. package/dist/orchestrator/AgentRouter.js.map +1 -1
  300. package/dist/orchestrator/GlobalResourcePool.d.ts.map +1 -1
  301. package/dist/orchestrator/GlobalResourcePool.js +70 -0
  302. package/dist/orchestrator/GlobalResourcePool.js.map +1 -1
  303. package/dist/ui/AttributionManager.js +2 -2
  304. package/dist/ui/AttributionManager.js.map +1 -1
  305. package/dist/ui/ProgressIndicator.d.ts +35 -0
  306. package/dist/ui/ProgressIndicator.d.ts.map +1 -0
  307. package/dist/ui/ProgressIndicator.js +177 -0
  308. package/dist/ui/ProgressIndicator.js.map +1 -0
  309. package/dist/ui/ResponseFormatter.d.ts +8 -0
  310. package/dist/ui/ResponseFormatter.d.ts.map +1 -1
  311. package/dist/ui/ResponseFormatter.js +220 -35
  312. package/dist/ui/ResponseFormatter.js.map +1 -1
  313. package/dist/ui/design-tokens.d.ts +37 -0
  314. package/dist/ui/design-tokens.d.ts.map +1 -0
  315. package/dist/ui/design-tokens.js +105 -0
  316. package/dist/ui/design-tokens.js.map +1 -0
  317. package/dist/ui/theme.d.ts +14 -4
  318. package/dist/ui/theme.d.ts.map +1 -1
  319. package/dist/ui/theme.js +7 -2
  320. package/dist/ui/theme.js.map +1 -1
  321. package/dist/utils/PathResolver.d.ts.map +1 -1
  322. package/dist/utils/PathResolver.js +3 -2
  323. package/dist/utils/PathResolver.js.map +1 -1
  324. package/dist/utils/SystemResources.d.ts.map +1 -1
  325. package/dist/utils/SystemResources.js +9 -11
  326. package/dist/utils/SystemResources.js.map +1 -1
  327. package/dist/utils/errorHandler.d.ts +6 -0
  328. package/dist/utils/errorHandler.d.ts.map +1 -1
  329. package/dist/utils/errorHandler.js +50 -1
  330. package/dist/utils/errorHandler.js.map +1 -1
  331. package/dist/utils/index.d.ts +19 -0
  332. package/dist/utils/index.d.ts.map +1 -0
  333. package/dist/utils/index.js +17 -0
  334. package/dist/utils/index.js.map +1 -0
  335. package/dist/utils/json.d.ts.map +1 -1
  336. package/dist/utils/json.js +11 -1
  337. package/dist/utils/json.js.map +1 -1
  338. package/dist/utils/logger.d.ts.map +1 -1
  339. package/dist/utils/logger.js +65 -3
  340. package/dist/utils/logger.js.map +1 -1
  341. package/dist/utils/lru-cache.d.ts +7 -0
  342. package/dist/utils/lru-cache.d.ts.map +1 -1
  343. package/dist/utils/lru-cache.js +37 -7
  344. package/dist/utils/lru-cache.js.map +1 -1
  345. package/dist/utils/safeMath.d.ts +11 -0
  346. package/dist/utils/safeMath.d.ts.map +1 -0
  347. package/dist/utils/safeMath.js +92 -0
  348. package/dist/utils/safeMath.js.map +1 -0
  349. package/dist/utils/tracing/TraceContext.d.ts +23 -0
  350. package/dist/utils/tracing/TraceContext.d.ts.map +1 -0
  351. package/dist/utils/tracing/TraceContext.js +127 -0
  352. package/dist/utils/tracing/TraceContext.js.map +1 -0
  353. package/dist/utils/tracing/index.d.ts +3 -0
  354. package/dist/utils/tracing/index.d.ts.map +1 -0
  355. package/dist/utils/tracing/index.js +3 -0
  356. package/dist/utils/tracing/index.js.map +1 -0
  357. package/dist/utils/tracing/middleware.d.ts +15 -0
  358. package/dist/utils/tracing/middleware.d.ts.map +1 -0
  359. package/dist/utils/tracing/middleware.js +49 -0
  360. package/dist/utils/tracing/middleware.js.map +1 -0
  361. package/dist/utils/validation.d.ts +12 -0
  362. package/dist/utils/validation.d.ts.map +1 -0
  363. package/dist/utils/validation.js +87 -0
  364. package/dist/utils/validation.js.map +1 -0
  365. package/mcp.json +9 -0
  366. package/package.json +10 -2
  367. package/plugin.json +2 -12
  368. package/scripts/postinstall.js +191 -21
  369. package/README.md.backup +0 -536
  370. package/README.zh-TW.md.backup +0 -446
@@ -0,0 +1,192 @@
1
+ import { logger } from '../../../utils/logger.js';
2
+ import { RATE_LIMITS, ENV_KEYS } from '../../constants.js';
3
+ const buckets = new Map();
4
+ const stats = new Map();
5
+ let cleanupTimer = null;
6
+ const refillGuard = new Set();
7
+ function getRateLimitConfig(endpoint) {
8
+ const envMap = {
9
+ '/a2a/send-message': ENV_KEYS.RATE_LIMIT_SEND_MESSAGE,
10
+ '/a2a/tasks/:taskId': ENV_KEYS.RATE_LIMIT_GET_TASK,
11
+ '/a2a/tasks': ENV_KEYS.RATE_LIMIT_LIST_TASKS,
12
+ '/a2a/tasks/:taskId/cancel': ENV_KEYS.RATE_LIMIT_CANCEL_TASK,
13
+ };
14
+ const defaultMap = {
15
+ '/a2a/send-message': RATE_LIMITS.SEND_MESSAGE_RPM,
16
+ '/a2a/tasks/:taskId': RATE_LIMITS.GET_TASK_RPM,
17
+ '/a2a/tasks': RATE_LIMITS.LIST_TASKS_RPM,
18
+ '/a2a/tasks/:taskId/cancel': RATE_LIMITS.CANCEL_TASK_RPM,
19
+ };
20
+ const envKey = envMap[endpoint];
21
+ if (envKey && process.env[envKey]) {
22
+ const parsed = parseInt(process.env[envKey], 10);
23
+ if (!isNaN(parsed) && parsed > 0) {
24
+ return parsed;
25
+ }
26
+ }
27
+ if (defaultMap[endpoint]) {
28
+ return defaultMap[endpoint];
29
+ }
30
+ if (process.env[ENV_KEYS.RATE_LIMIT_DEFAULT]) {
31
+ const parsed = parseInt(process.env[ENV_KEYS.RATE_LIMIT_DEFAULT], 10);
32
+ if (!isNaN(parsed) && parsed > 0) {
33
+ return parsed;
34
+ }
35
+ }
36
+ return RATE_LIMITS.DEFAULT_RPM;
37
+ }
38
+ function normalizeEndpoint(path) {
39
+ if (/^\/a2a\/tasks\/[^/]+$/.test(path)) {
40
+ return '/a2a/tasks/:taskId';
41
+ }
42
+ if (/^\/a2a\/tasks\/[^/]+\/cancel$/.test(path)) {
43
+ return '/a2a/tasks/:taskId/cancel';
44
+ }
45
+ return path;
46
+ }
47
+ function getBucket(agentId, endpoint) {
48
+ const key = `${agentId}:${endpoint}`;
49
+ let bucket = buckets.get(key);
50
+ if (!bucket) {
51
+ const maxTokens = getRateLimitConfig(endpoint);
52
+ const refillRate = maxTokens / 60_000;
53
+ bucket = {
54
+ tokens: maxTokens,
55
+ maxTokens,
56
+ lastRefill: Date.now(),
57
+ refillRate,
58
+ };
59
+ buckets.set(key, bucket);
60
+ }
61
+ return bucket;
62
+ }
63
+ function refillTokens(key, bucket) {
64
+ if (refillGuard.has(key)) {
65
+ return;
66
+ }
67
+ refillGuard.add(key);
68
+ try {
69
+ const now = Date.now();
70
+ const elapsed = now - bucket.lastRefill;
71
+ const tokensToAdd = elapsed * bucket.refillRate;
72
+ if (tokensToAdd > 0) {
73
+ bucket.tokens = Math.min(bucket.maxTokens, bucket.tokens + tokensToAdd);
74
+ bucket.lastRefill = now;
75
+ }
76
+ }
77
+ finally {
78
+ refillGuard.delete(key);
79
+ }
80
+ }
81
+ function tryConsume(key, bucket) {
82
+ refillTokens(key, bucket);
83
+ if (bucket.tokens >= 1) {
84
+ bucket.tokens -= 1;
85
+ return true;
86
+ }
87
+ return false;
88
+ }
89
+ function calculateRetryAfter(bucket) {
90
+ const tokensNeeded = 1 - bucket.tokens;
91
+ const msNeeded = tokensNeeded / bucket.refillRate;
92
+ return Math.ceil(msNeeded / 1000);
93
+ }
94
+ function updateStats(agentId, endpoint, exceeded) {
95
+ const key = `${agentId}:${endpoint}`;
96
+ let stat = stats.get(key);
97
+ if (!stat) {
98
+ stat = {
99
+ agentId,
100
+ endpoint,
101
+ limitExceeded: 0,
102
+ totalRequests: 0,
103
+ };
104
+ stats.set(key, stat);
105
+ }
106
+ stat.totalRequests += 1;
107
+ if (exceeded) {
108
+ stat.limitExceeded += 1;
109
+ stat.lastLimitHit = Date.now();
110
+ logger.warn('[Rate Limit] Limit exceeded', {
111
+ agentId,
112
+ endpoint,
113
+ totalExceeded: stat.limitExceeded,
114
+ totalRequests: stat.totalRequests,
115
+ });
116
+ }
117
+ }
118
+ function cleanup() {
119
+ const now = Date.now();
120
+ const expirationThreshold = 10 * 60_000;
121
+ for (const [key, bucket] of buckets.entries()) {
122
+ if (now - bucket.lastRefill > expirationThreshold) {
123
+ buckets.delete(key);
124
+ }
125
+ }
126
+ for (const [key, stat] of stats.entries()) {
127
+ if (stat.lastLimitHit && now - stat.lastLimitHit > expirationThreshold) {
128
+ stats.delete(key);
129
+ }
130
+ }
131
+ logger.debug('[Rate Limit] Cleanup completed', {
132
+ remainingBuckets: buckets.size,
133
+ remainingStats: stats.size,
134
+ });
135
+ }
136
+ export function startCleanup() {
137
+ if (cleanupTimer) {
138
+ return;
139
+ }
140
+ cleanupTimer = setInterval(cleanup, RATE_LIMITS.CLEANUP_INTERVAL_MS);
141
+ logger.info('[Rate Limit] Cleanup started', {
142
+ intervalMs: RATE_LIMITS.CLEANUP_INTERVAL_MS,
143
+ });
144
+ }
145
+ export function stopCleanup() {
146
+ if (cleanupTimer) {
147
+ clearInterval(cleanupTimer);
148
+ cleanupTimer = null;
149
+ logger.info('[Rate Limit] Cleanup stopped');
150
+ }
151
+ }
152
+ export function getRateLimitStats() {
153
+ return Array.from(stats.values());
154
+ }
155
+ export function clearRateLimitData() {
156
+ buckets.clear();
157
+ stats.clear();
158
+ }
159
+ export function rateLimitMiddleware(req, res, next) {
160
+ const agentId = req.agentId;
161
+ if (!agentId) {
162
+ logger.error('[Rate Limit] Missing agentId in authenticated request');
163
+ res.status(500).json({
164
+ success: false,
165
+ error: {
166
+ code: 'INTERNAL_ERROR',
167
+ message: 'Internal server error',
168
+ },
169
+ });
170
+ return;
171
+ }
172
+ const endpoint = normalizeEndpoint(req.path);
173
+ const key = `${agentId}:${endpoint}`;
174
+ const bucket = getBucket(agentId, endpoint);
175
+ const allowed = tryConsume(key, bucket);
176
+ updateStats(agentId, endpoint, !allowed);
177
+ if (!allowed) {
178
+ const retryAfter = calculateRetryAfter(bucket);
179
+ res.setHeader('Retry-After', retryAfter.toString());
180
+ res.status(429).json({
181
+ success: false,
182
+ error: {
183
+ code: 'RATE_LIMIT_EXCEEDED',
184
+ message: `Rate limit exceeded. Try again in ${retryAfter} seconds.`,
185
+ retryAfter,
186
+ },
187
+ });
188
+ return;
189
+ }
190
+ next();
191
+ }
192
+ //# sourceMappingURL=rateLimit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rateLimit.js","sourceRoot":"","sources":["../../../../src/a2a/server/middleware/rateLimit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { Request, Response, NextFunction } from 'express';
2
+ export declare function startResourceProtectionCleanup(): void;
3
+ export declare function stopResourceProtectionCleanup(): void;
4
+ export declare function clearConnectionTracking(): void;
5
+ export declare function getConnectionStats(): {
6
+ totalIPs: number;
7
+ totalConnections: number;
8
+ topIPs: Array<{
9
+ ip: string;
10
+ connections: number;
11
+ }>;
12
+ };
13
+ export declare function connectionLimitMiddleware(): (req: Request, res: Response, next: NextFunction) => void;
14
+ export declare function payloadSizeLimitMiddleware(): (req: Request, res: Response, next: NextFunction) => void;
15
+ export declare function memoryPressureMiddleware(): (req: Request, res: Response, next: NextFunction) => void;
16
+ export declare function resourceProtectionMiddleware(): ((req: Request, res: Response, next: NextFunction) => void)[];
17
+ //# sourceMappingURL=resourceProtection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resourceProtection.d.ts","sourceRoot":"","sources":["../../../../src/a2a/server/middleware/resourceProtection.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAiI/D,wBAAgB,8BAA8B,IAAI,IAAI,CAWrD;AAKD,wBAAgB,6BAA6B,IAAI,IAAI,CAMpD;AAKD,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AAKD,wBAAgB,kBAAkB,IAAI;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpD,CAkBA;AAaD,wBAAgB,yBAAyB,KAI/B,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,CAyF/D;AAeD,wBAAgB,0BAA0B,KAIhC,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,CA2C/D;AAaD,wBAAgB,wBAAwB,KAC9B,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,CA0B/D;AAYD,wBAAgB,4BAA4B,WA3M7B,OAAO,OAAO,QAAQ,QAAQ,YAAY,KAAG,IAAI,IAiN/D"}
@@ -0,0 +1,240 @@
1
+ import { logger } from '../../../utils/logger.js';
2
+ const connections = new Map();
3
+ const DEFAULT_MAX_TRACKED_IPS = 10_000;
4
+ function getMaxTrackedIPs() {
5
+ const env = process.env.A2A_MAX_TRACKED_IPS;
6
+ if (!env)
7
+ return DEFAULT_MAX_TRACKED_IPS;
8
+ const parsed = parseInt(env, 10);
9
+ if (isNaN(parsed) || parsed <= 0 || parsed > 1_000_000) {
10
+ logger.warn(`Invalid A2A_MAX_TRACKED_IPS: ${env}, using default ${DEFAULT_MAX_TRACKED_IPS}`);
11
+ return DEFAULT_MAX_TRACKED_IPS;
12
+ }
13
+ return parsed;
14
+ }
15
+ let lastCapacityWarningTime = 0;
16
+ const CAPACITY_WARNING_COOLDOWN_MS = 60_000;
17
+ const DEFAULT_MAX_CONNECTIONS_PER_IP = 10;
18
+ const DEFAULT_MAX_PAYLOAD_SIZE_MB = 10;
19
+ const DEFAULT_CONNECTION_IDLE_TIMEOUT_MS = 5 * 60 * 1000;
20
+ let cleanupTimer = null;
21
+ function getMaxConnectionsPerIP() {
22
+ const env = process.env.A2A_MAX_CONNECTIONS_PER_IP;
23
+ if (!env)
24
+ return DEFAULT_MAX_CONNECTIONS_PER_IP;
25
+ const parsed = parseInt(env, 10);
26
+ if (isNaN(parsed) || parsed <= 0) {
27
+ logger.warn(`Invalid A2A_MAX_CONNECTIONS_PER_IP: ${env}, using default ${DEFAULT_MAX_CONNECTIONS_PER_IP}`);
28
+ return DEFAULT_MAX_CONNECTIONS_PER_IP;
29
+ }
30
+ return parsed;
31
+ }
32
+ function getMaxPayloadSizeMB() {
33
+ const env = process.env.A2A_MAX_PAYLOAD_SIZE_MB;
34
+ if (!env)
35
+ return DEFAULT_MAX_PAYLOAD_SIZE_MB;
36
+ const parsed = parseInt(env, 10);
37
+ if (isNaN(parsed) || parsed <= 0 || parsed > 100) {
38
+ logger.warn(`Invalid A2A_MAX_PAYLOAD_SIZE_MB: ${env}, using default ${DEFAULT_MAX_PAYLOAD_SIZE_MB}`);
39
+ return DEFAULT_MAX_PAYLOAD_SIZE_MB;
40
+ }
41
+ return parsed;
42
+ }
43
+ function cleanupIdleConnections(aggressive = false) {
44
+ const now = Date.now();
45
+ const timeout = aggressive
46
+ ? 30_000
47
+ : DEFAULT_CONNECTION_IDLE_TIMEOUT_MS;
48
+ let cleaned = 0;
49
+ for (const [ip, data] of connections.entries()) {
50
+ if (data.count === 0 || now - data.lastActivity > timeout) {
51
+ connections.delete(ip);
52
+ cleaned++;
53
+ }
54
+ }
55
+ if (cleaned > 0) {
56
+ logger.debug('[Resource Protection] Cleaned up idle connections', {
57
+ count: cleaned,
58
+ remaining: connections.size,
59
+ aggressive,
60
+ });
61
+ }
62
+ return cleaned;
63
+ }
64
+ export function startResourceProtectionCleanup() {
65
+ if (cleanupTimer) {
66
+ return;
67
+ }
68
+ cleanupTimer = setInterval(() => {
69
+ cleanupIdleConnections();
70
+ }, 60 * 1000);
71
+ logger.info('[Resource Protection] Cleanup started');
72
+ }
73
+ export function stopResourceProtectionCleanup() {
74
+ if (cleanupTimer) {
75
+ clearInterval(cleanupTimer);
76
+ cleanupTimer = null;
77
+ logger.info('[Resource Protection] Cleanup stopped');
78
+ }
79
+ }
80
+ export function clearConnectionTracking() {
81
+ connections.clear();
82
+ }
83
+ export function getConnectionStats() {
84
+ const totalIPs = connections.size;
85
+ let totalConnections = 0;
86
+ for (const data of connections.values()) {
87
+ totalConnections += data.count;
88
+ }
89
+ const topIPs = Array.from(connections.entries())
90
+ .map(([ip, data]) => ({ ip, connections: data.count }))
91
+ .sort((a, b) => b.connections - a.connections)
92
+ .slice(0, 10);
93
+ return {
94
+ totalIPs,
95
+ totalConnections,
96
+ topIPs,
97
+ };
98
+ }
99
+ export function connectionLimitMiddleware() {
100
+ const maxConnections = getMaxConnectionsPerIP();
101
+ const maxTrackedIPs = getMaxTrackedIPs();
102
+ return (req, res, next) => {
103
+ const ip = req.ip || req.socket.remoteAddress || 'unknown';
104
+ const now = Date.now();
105
+ let connectionData = connections.get(ip);
106
+ if (!connectionData) {
107
+ if (connections.size >= maxTrackedIPs) {
108
+ const cleaned = cleanupIdleConnections(true);
109
+ if (connections.size >= maxTrackedIPs) {
110
+ if (now - lastCapacityWarningTime > CAPACITY_WARNING_COOLDOWN_MS) {
111
+ lastCapacityWarningTime = now;
112
+ logger.warn('[Resource Protection] IP tracking capacity exhausted', {
113
+ maxTrackedIPs,
114
+ currentTrackedIPs: connections.size,
115
+ cleanedInAttempt: cleaned,
116
+ rejectedIP: ip,
117
+ });
118
+ }
119
+ res.status(503).json({
120
+ success: false,
121
+ error: {
122
+ code: 'SERVICE_OVERLOADED',
123
+ message: 'Service temporarily overloaded, please try again later',
124
+ },
125
+ });
126
+ return;
127
+ }
128
+ }
129
+ connectionData = { count: 0, lastActivity: now };
130
+ connections.set(ip, connectionData);
131
+ }
132
+ if (connectionData.count >= maxConnections) {
133
+ logger.warn('[Resource Protection] Connection limit exceeded', {
134
+ ip,
135
+ currentConnections: connectionData.count,
136
+ maxConnections,
137
+ });
138
+ res.status(503).json({
139
+ success: false,
140
+ error: {
141
+ code: 'CONNECTION_LIMIT_EXCEEDED',
142
+ message: `Too many concurrent connections from your IP. Maximum: ${maxConnections}`,
143
+ },
144
+ });
145
+ return;
146
+ }
147
+ connectionData.count++;
148
+ connectionData.lastActivity = now;
149
+ let decremented = false;
150
+ const decrementConnection = () => {
151
+ if (decremented)
152
+ return;
153
+ decremented = true;
154
+ const data = connections.get(ip);
155
+ if (data) {
156
+ data.count = Math.max(0, data.count - 1);
157
+ data.lastActivity = Date.now();
158
+ if (data.count === 0) {
159
+ connections.delete(ip);
160
+ }
161
+ }
162
+ };
163
+ res.on('finish', decrementConnection);
164
+ res.on('close', decrementConnection);
165
+ next();
166
+ };
167
+ }
168
+ export function payloadSizeLimitMiddleware() {
169
+ const maxSizeMB = getMaxPayloadSizeMB();
170
+ const maxSizeBytes = maxSizeMB * 1024 * 1024;
171
+ return (req, res, next) => {
172
+ const contentLength = req.get('content-length');
173
+ if (contentLength) {
174
+ const size = parseInt(contentLength, 10);
175
+ if (isNaN(size)) {
176
+ logger.warn('[Resource Protection] Invalid Content-Length header', {
177
+ contentLength,
178
+ ip: req.ip,
179
+ });
180
+ res.status(400).json({
181
+ success: false,
182
+ error: {
183
+ code: 'INVALID_CONTENT_LENGTH',
184
+ message: 'Invalid Content-Length header',
185
+ },
186
+ });
187
+ return;
188
+ }
189
+ if (size > maxSizeBytes) {
190
+ logger.warn('[Resource Protection] Payload size exceeded', {
191
+ size,
192
+ maxSize: maxSizeBytes,
193
+ ip: req.ip,
194
+ });
195
+ res.status(413).json({
196
+ success: false,
197
+ error: {
198
+ code: 'PAYLOAD_TOO_LARGE',
199
+ message: `Request payload too large. Maximum: ${maxSizeMB}MB`,
200
+ maxSizeMB,
201
+ },
202
+ });
203
+ return;
204
+ }
205
+ }
206
+ next();
207
+ };
208
+ }
209
+ export function memoryPressureMiddleware() {
210
+ return (req, res, next) => {
211
+ const memUsage = process.memoryUsage();
212
+ const heapUsedMB = memUsage.heapUsed / 1024 / 1024;
213
+ const heapTotalMB = memUsage.heapTotal / 1024 / 1024;
214
+ const heapUsagePercent = (heapUsedMB / heapTotalMB) * 100;
215
+ if (heapUsagePercent > 90) {
216
+ logger.warn('[Resource Protection] High memory pressure', {
217
+ heapUsedMB: heapUsedMB.toFixed(2),
218
+ heapTotalMB: heapTotalMB.toFixed(2),
219
+ heapUsagePercent: heapUsagePercent.toFixed(2),
220
+ });
221
+ res.status(503).json({
222
+ success: false,
223
+ error: {
224
+ code: 'SERVICE_OVERLOADED',
225
+ message: 'Service temporarily overloaded, please try again later',
226
+ },
227
+ });
228
+ return;
229
+ }
230
+ next();
231
+ };
232
+ }
233
+ export function resourceProtectionMiddleware() {
234
+ return [
235
+ memoryPressureMiddleware(),
236
+ connectionLimitMiddleware(),
237
+ payloadSizeLimitMiddleware(),
238
+ ];
239
+ }
240
+ //# sourceMappingURL=resourceProtection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resourceProtection.js","sourceRoot":"","sources":["../../../../src/a2a/server/middleware/resourceProtection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Request, Response, NextFunction } from 'express';
2
+ export declare function getTimeoutMs(): number;
3
+ export declare function requestTimeoutMiddleware(timeoutMs?: number): (req: Request, res: Response, next: NextFunction) => void;
4
+ //# sourceMappingURL=timeout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeout.d.ts","sourceRoot":"","sources":["../../../../src/a2a/server/middleware/timeout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAU1D,wBAAgB,YAAY,IAAI,MAAM,CAarC;AAaD,wBAAgB,wBAAwB,CAAC,SAAS,GAAE,MAAuB,IACjE,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,KAAG,IAAI,CA2B/D"}
@@ -0,0 +1,36 @@
1
+ const DEFAULT_TIMEOUT_MS = 30000;
2
+ export function getTimeoutMs() {
3
+ const envTimeout = process.env.A2A_REQUEST_TIMEOUT_MS;
4
+ if (!envTimeout) {
5
+ return DEFAULT_TIMEOUT_MS;
6
+ }
7
+ const parsed = parseInt(envTimeout, 10);
8
+ if (isNaN(parsed) || parsed <= 0) {
9
+ console.warn(`Invalid A2A_REQUEST_TIMEOUT_MS value: ${envTimeout}, using default ${DEFAULT_TIMEOUT_MS}ms`);
10
+ return DEFAULT_TIMEOUT_MS;
11
+ }
12
+ return parsed;
13
+ }
14
+ export function requestTimeoutMiddleware(timeoutMs = getTimeoutMs()) {
15
+ return (req, res, next) => {
16
+ const timer = setTimeout(() => {
17
+ if (!res.headersSent) {
18
+ res.status(408).json({
19
+ success: false,
20
+ error: {
21
+ code: 'REQUEST_TIMEOUT',
22
+ message: `Request timeout after ${timeoutMs}ms`
23
+ }
24
+ });
25
+ }
26
+ }, timeoutMs);
27
+ res.on('finish', () => {
28
+ clearTimeout(timer);
29
+ });
30
+ res.on('close', () => {
31
+ clearTimeout(timer);
32
+ });
33
+ next();
34
+ };
35
+ }
36
+ //# sourceMappingURL=timeout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeout.js","sourceRoot":"","sources":["../../../../src/a2a/server/middleware/timeout.ts"],"names":[],"mappings":"AAKA,MAAM,kBAAkB,GAAG,KAAK,CAAC;AAKjC,MAAM,UAAU,YAAY;IAC1B,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;IACtD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IACxC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC,yCAAyC,UAAU,mBAAmB,kBAAkB,IAAI,CAAC,CAAC;QAC3G,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAaD,MAAM,UAAU,wBAAwB,CAAC,YAAoB,YAAY,EAAE;IACzE,OAAO,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAQ,EAAE;QAE/D,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAE5B,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;gBACrB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBACnB,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE;wBACL,IAAI,EAAE,iBAAiB;wBACvB,OAAO,EAAE,yBAAyB,SAAS,IAAI;qBAChD;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC,EAAE,SAAS,CAAC,CAAC;QAGd,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YACpB,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QAGH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACnB,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC"}
@@ -1,8 +1,11 @@
1
1
  import type { Task, TaskFilter, TaskStatus, CreateTaskParams, UpdateTaskParams, Message, AddMessageParams, MessageCreated, Artifact } from '../types/index.js';
2
2
  export declare class TaskQueue {
3
3
  private db;
4
+ private preparedStatements;
5
+ private isClosed;
4
6
  constructor(agentId: string, dbPath?: string);
5
7
  private initializeSchema;
8
+ private getStatement;
6
9
  createTask(params: CreateTaskParams): Task;
7
10
  getTask(taskId: string): Task | null;
8
11
  listTasks(filter?: TaskFilter): TaskStatus[];
@@ -1 +1 @@
1
- {"version":3,"file":"TaskQueue.d.ts","sourceRoot":"","sources":["../../../src/a2a/storage/TaskQueue.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,IAAI,EAGJ,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,OAAO,EACP,gBAAgB,EAChB,cAAc,EACd,QAAQ,EAET,MAAM,mBAAmB,CAAC;AAuD3B,qBAAa,SAAS;IACpB,OAAO,CAAC,EAAE,CAAoB;gBAElB,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IAQ5C,OAAO,CAAC,gBAAgB;IAMxB,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IA+C1C,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAWpC,SAAS,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE;IAoF5C,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO;IA0CnE,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,cAAc;IA6BpD,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE;IAsBtC,WAAW,CAAC,MAAM,EAAE;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;QACzB,QAAQ,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;QAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACpC,GAAG,MAAM;IAsCV,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE;IAyBxC,KAAK,IAAI,IAAI;IAIb,OAAO,CAAC,SAAS;CAkBlB"}
1
+ {"version":3,"file":"TaskQueue.d.ts","sourceRoot":"","sources":["../../../src/a2a/storage/TaskQueue.ts"],"names":[],"mappings":"AA2CA,OAAO,KAAK,EACV,IAAI,EAGJ,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,OAAO,EACP,gBAAgB,EAChB,cAAc,EACd,QAAQ,EAET,MAAM,mBAAmB,CAAC;AAyF3B,qBAAa,SAAS;IACpB,OAAO,CAAC,EAAE,CAAoB;IAE9B,OAAO,CAAC,kBAAkB,CAAkC;IAE5D,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IA8B5C,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,YAAY;IASpB,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAiD1C,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IA4BpC,SAAS,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE;IA0H5C,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO;IA8CnE,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,cAAc;IA6BpD,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE;IAsBtC,WAAW,CAAC,MAAM,EAAE;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;QACzB,QAAQ,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;QAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACpC,GAAG,MAAM;IAsCV,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE;IAyBxC,KAAK,IAAI,IAAI;IAWb,OAAO,CAAC,SAAS;CAkBlB"}