snow-flow 1.4.49 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (595) hide show
  1. package/.claude/helpers/github-setup.sh +28 -0
  2. package/.claude/helpers/quick-start.sh +19 -0
  3. package/.claude/helpers/setup-mcp.sh +18 -0
  4. package/.claude/settings.local.json +33 -0
  5. package/.claude-flow/metrics/system-metrics.json +1992 -0
  6. package/.env.example +21 -0
  7. package/.roo/README.md +402 -0
  8. package/.roo/mcp-list.txt +257 -0
  9. package/.roo/mcp.json +32 -0
  10. package/.roo/workflows/basic-tdd.json +32 -0
  11. package/.roomodes +201 -0
  12. package/README.md +114 -628
  13. package/activate-mcp.sh +15 -0
  14. package/dist/cli.js.bak +2052 -0
  15. package/manual-register-mcp.js +134 -0
  16. package/mcp-wrapper.sh +12 -0
  17. package/package.json +2 -2
  18. package/scripts/create-env.js +6 -1
  19. package/scripts/reset-mcp-servers.js +246 -0
  20. package/scripts/update-version.js +31 -0
  21. package/src/agents/README.md +192 -0
  22. package/src/agents/base-agent.ts +251 -0
  23. package/src/agents/coordinator.ts +971 -0
  24. package/src/agents/index.ts +18 -0
  25. package/src/agents/queen-403-handler.ts +230 -0
  26. package/src/agents/queen-agent.ts +1399 -0
  27. package/src/agents/script-writer-agent.ts +769 -0
  28. package/src/agents/security-agent.ts +726 -0
  29. package/src/agents/widget-creator-agent.ts +568 -0
  30. package/src/api/error-handling.ts +1758 -0
  31. package/src/api/natural-language-mapper.ts +630 -0
  32. package/src/api/performance-optimizer.ts +891 -0
  33. package/src/api/transaction-manager.ts +754 -0
  34. package/src/cli/deploy-artifact.ts +304 -0
  35. package/src/cli/snow-flow-cli-integration.ts +434 -0
  36. package/src/cli.ts +4455 -0
  37. package/src/cli.ts.bak +5616 -0
  38. package/src/compliance/advanced-compliance-system.ts +1268 -0
  39. package/src/compliance/index.ts +19 -0
  40. package/src/config/snow-flow-config.ts +1019 -0
  41. package/src/documentation/index.ts +16 -0
  42. package/src/documentation/self-documenting-system.ts +1421 -0
  43. package/src/dynamic-version.ts +44 -0
  44. package/src/healing/index.ts +20 -0
  45. package/src/healing/self-healing-system.ts +1435 -0
  46. package/src/health/README.md +161 -0
  47. package/src/health/system-health.ts +995 -0
  48. package/src/index.ts +60 -0
  49. package/src/intelligence/acl-analyzer.ts +377 -0
  50. package/src/intelligence/auto-resolution-engine.ts +643 -0
  51. package/src/intelligence/gap-analysis-engine.ts +488 -0
  52. package/src/intelligence/manual-instructions-generator.ts +744 -0
  53. package/src/intelligence/mcp-coverage-analyzer.ts +708 -0
  54. package/src/intelligence/multi-pass-requirements-analyzer.ts +603 -0
  55. package/src/intelligence/performance-recommendations-engine.ts +1223 -0
  56. package/src/intelligence/requirements-analyzer.ts +1148 -0
  57. package/src/intelligence/task-analyzer.ts +628 -0
  58. package/src/managers/scope-manager.ts +555 -0
  59. package/src/mcp/advanced/servicenow-advanced-features-mcp.ts +16110 -0
  60. package/src/mcp/base-mcp-server.ts +660 -0
  61. package/src/mcp/http-transport-wrapper.ts +426 -0
  62. package/src/mcp/service-discovery-client.ts +312 -0
  63. package/src/mcp/servicenow-automation-mcp-refactored.ts +678 -0
  64. package/src/mcp/servicenow-automation-mcp.ts +838 -0
  65. package/src/mcp/servicenow-deployment-mcp-refactored.ts +1292 -0
  66. package/src/mcp/servicenow-deployment-mcp.ts +7244 -0
  67. package/src/mcp/servicenow-graph-memory-mcp-refactored.ts +721 -0
  68. package/src/mcp/servicenow-graph-memory-mcp.ts +832 -0
  69. package/src/mcp/servicenow-integration-mcp-refactored.ts +655 -0
  70. package/src/mcp/servicenow-integration-mcp.ts +819 -0
  71. package/src/mcp/servicenow-intelligent-mcp-refactored.ts +977 -0
  72. package/src/mcp/servicenow-intelligent-mcp.ts +4638 -0
  73. package/src/mcp/servicenow-mcp-server.ts +728 -0
  74. package/src/mcp/servicenow-memory-mcp.ts +474 -0
  75. package/src/mcp/servicenow-operations-mcp-refactored.ts +1995 -0
  76. package/src/mcp/servicenow-operations-mcp.ts +3384 -0
  77. package/src/mcp/servicenow-platform-development-mcp-refactored.ts +611 -0
  78. package/src/mcp/servicenow-platform-development-mcp.ts +970 -0
  79. package/src/mcp/servicenow-progressive-indexer.ts +370 -0
  80. package/src/mcp/servicenow-reporting-analytics-mcp-refactored.ts +695 -0
  81. package/src/mcp/servicenow-reporting-analytics-mcp.ts +1123 -0
  82. package/src/mcp/servicenow-security-compliance-mcp-refactored.ts +642 -0
  83. package/src/mcp/servicenow-security-compliance-mcp.ts +1157 -0
  84. package/src/mcp/servicenow-update-set-mcp-refactored.ts +751 -0
  85. package/src/mcp/servicenow-update-set-mcp.ts +811 -0
  86. package/src/mcp/shared/agent-context-provider.ts +365 -0
  87. package/src/mcp/shared/base-mcp-server.ts +2463 -0
  88. package/src/mcp/shared/mcp-memory-manager.ts +540 -0
  89. package/src/mcp/shared/mcp-resource-manager.ts +367 -0
  90. package/src/mcp/snow-flow-mcp.ts +911 -0
  91. package/src/mcp/start-all-mcp-servers.ts +102 -0
  92. package/src/mcp/start-servicenow-mcp.ts +67 -0
  93. package/src/monitoring/enhanced-monitoring-system.ts +1345 -0
  94. package/src/monitoring/performance-tracker.ts +777 -0
  95. package/src/optimization/cost-optimization-engine.ts +1125 -0
  96. package/src/optimization/index.ts +10 -0
  97. package/src/queen/README.md +403 -0
  98. package/src/queen/agent-factory.ts +574 -0
  99. package/src/queen/index.ts +94 -0
  100. package/src/queen/mcp-execution-bridge.ts +681 -0
  101. package/src/queen/neural-learning.ts +319 -0
  102. package/src/queen/parallel-agent-engine.ts +848 -0
  103. package/src/queen/queen-memory-system.ts +490 -0
  104. package/src/queen/queen-memory.ts +456 -0
  105. package/src/queen/servicenow-queen.ts +1029 -0
  106. package/src/queen/types.ts +87 -0
  107. package/src/rollback/smart-rollback-system.ts +866 -0
  108. package/src/schemas/deployment.schema.json +58 -0
  109. package/src/schemas/flow.schema.json +79 -0
  110. package/src/schemas/widget.schema.json +72 -0
  111. package/src/snow-flow-system.ts +541 -0
  112. package/src/sparc/sparc-help.ts +49 -0
  113. package/src/sparc/team-sparc.ts +88 -0
  114. package/src/strategies/global-scope-strategy.ts +736 -0
  115. package/src/templates/base/application.template.json +45 -0
  116. package/src/templates/base/business_rule.template.json +33 -0
  117. package/src/templates/base/script_include.template.json +18 -0
  118. package/src/templates/base/table.template.json +64 -0
  119. package/src/templates/base/widget.template.json +25 -0
  120. package/src/templates/patterns/composite.incident-management.template.json +140 -0
  121. package/src/templates/patterns/widget.dashboard.template.json +238 -0
  122. package/src/templates/patterns/widget.datatable.template.json +292 -0
  123. package/src/testing/integration-test-suite.ts +1276 -0
  124. package/src/types/index.ts +183 -0
  125. package/src/types/neo4j-driver.d.ts +23 -0
  126. package/src/types/servicenow.types.ts +307 -0
  127. package/src/types/snow-flow.types.ts +186 -0
  128. package/src/types/todo.types.ts +70 -0
  129. package/src/utils/action-type-cache.ts +286 -0
  130. package/src/utils/agent-detector.ts +573 -0
  131. package/src/utils/artifact-tracker.ts +379 -0
  132. package/src/utils/dependency-detector.ts +233 -0
  133. package/src/utils/deployment-metadata-handler.ts +518 -0
  134. package/src/utils/error-recovery.ts +680 -0
  135. package/src/utils/logger.ts +60 -0
  136. package/src/utils/mcp-auth-middleware.ts +262 -0
  137. package/src/utils/mcp-config-manager.ts +270 -0
  138. package/src/utils/mcp-server-manager.ts +446 -0
  139. package/src/utils/mcp-tool-registry.ts +298 -0
  140. package/src/utils/migrate-snow-flow.ts +98 -0
  141. package/src/utils/oauth-html-templates.ts +188 -0
  142. package/src/utils/scope-utils.ts +443 -0
  143. package/src/utils/servicenow-client.ts +3321 -0
  144. package/src/utils/servicenow-id-generator.ts +181 -0
  145. package/src/utils/snow-memory-manager.ts +605 -0
  146. package/src/utils/snow-oauth.ts +797 -0
  147. package/src/utils/template-engine.ts +463 -0
  148. package/src/utils/theme-manager.ts +295 -0
  149. package/src/utils/unified-auth-store.ts +222 -0
  150. package/src/utils/update-set-importer.ts +422 -0
  151. package/src/utils/update-set-xml-packager.ts +371 -0
  152. package/src/utils/widget-template-generator.ts +1744 -0
  153. package/src/version.ts +1950 -0
  154. package/.claude/commands/memory/README.md +0 -9
  155. package/dist/agents/app-creator.agent.d.ts.map +0 -1
  156. package/dist/agents/app-creator.agent.js.map +0 -1
  157. package/dist/agents/base/base-snow-agent.d.ts.map +0 -1
  158. package/dist/agents/base/base-snow-agent.js.map +0 -1
  159. package/dist/agents/base-agent.d.ts.map +0 -1
  160. package/dist/agents/base-agent.js.map +0 -1
  161. package/dist/agents/base-snow-agent.d.ts.map +0 -1
  162. package/dist/agents/base-snow-agent.js.map +0 -1
  163. package/dist/agents/coordinator.d.ts.map +0 -1
  164. package/dist/agents/coordinator.js.map +0 -1
  165. package/dist/agents/flow-builder-agent.d.ts.map +0 -1
  166. package/dist/agents/flow-builder-agent.js.map +0 -1
  167. package/dist/agents/index.d.ts.map +0 -1
  168. package/dist/agents/index.js.map +0 -1
  169. package/dist/agents/queen-403-handler.d.ts.map +0 -1
  170. package/dist/agents/queen-403-handler.js.map +0 -1
  171. package/dist/agents/queen-agent-example.d.ts.map +0 -1
  172. package/dist/agents/queen-agent-example.js.map +0 -1
  173. package/dist/agents/queen-agent.d.ts.map +0 -1
  174. package/dist/agents/queen-agent.js.map +0 -1
  175. package/dist/agents/queen-agent.test.d.ts.map +0 -1
  176. package/dist/agents/queen-agent.test.js.map +0 -1
  177. package/dist/agents/script-generator.agent.d.ts.map +0 -1
  178. package/dist/agents/script-generator.agent.js.map +0 -1
  179. package/dist/agents/script-writer-agent.d.ts.map +0 -1
  180. package/dist/agents/script-writer-agent.js.map +0 -1
  181. package/dist/agents/security-agent.d.ts.map +0 -1
  182. package/dist/agents/security-agent.js.map +0 -1
  183. package/dist/agents/specialists/automation-specialist.agent.d.ts.map +0 -1
  184. package/dist/agents/specialists/automation-specialist.agent.js.map +0 -1
  185. package/dist/agents/specialists/data-specialist.agent.d.ts.map +0 -1
  186. package/dist/agents/specialists/data-specialist.agent.js.map +0 -1
  187. package/dist/agents/specialists/integration-specialist.agent.d.ts.map +0 -1
  188. package/dist/agents/specialists/integration-specialist.agent.js.map +0 -1
  189. package/dist/agents/specialists/reporting-specialist.agent.d.ts.map +0 -1
  190. package/dist/agents/specialists/reporting-specialist.agent.js.map +0 -1
  191. package/dist/agents/specialists/security-specialist.agent.d.ts.map +0 -1
  192. package/dist/agents/specialists/security-specialist.agent.js.map +0 -1
  193. package/dist/agents/teams/adaptive/adaptive-coordinator.agent.d.ts.map +0 -1
  194. package/dist/agents/teams/adaptive/adaptive-coordinator.agent.js.map +0 -1
  195. package/dist/agents/teams/base-team.d.ts.map +0 -1
  196. package/dist/agents/teams/base-team.js.map +0 -1
  197. package/dist/agents/teams/team-types.d.ts.map +0 -1
  198. package/dist/agents/teams/team-types.js.map +0 -1
  199. package/dist/agents/teams/widget/widget-architect.agent.d.ts.map +0 -1
  200. package/dist/agents/teams/widget/widget-architect.agent.js.map +0 -1
  201. package/dist/agents/teams/widget/widget-backend.agent.d.ts.map +0 -1
  202. package/dist/agents/teams/widget/widget-backend.agent.js.map +0 -1
  203. package/dist/agents/teams/widget/widget-frontend.agent.d.ts.map +0 -1
  204. package/dist/agents/teams/widget/widget-frontend.agent.js.map +0 -1
  205. package/dist/agents/teams/widget/widget-platform.agent.d.ts.map +0 -1
  206. package/dist/agents/teams/widget/widget-platform.agent.js.map +0 -1
  207. package/dist/agents/teams/widget/widget-uiux.agent.d.ts.map +0 -1
  208. package/dist/agents/teams/widget/widget-uiux.agent.js.map +0 -1
  209. package/dist/agents/test-agent.d.ts.map +0 -1
  210. package/dist/agents/test-agent.js.map +0 -1
  211. package/dist/agents/test-agents.d.ts.map +0 -1
  212. package/dist/agents/test-agents.js.map +0 -1
  213. package/dist/agents/ui-builder.agent.d.ts.map +0 -1
  214. package/dist/agents/ui-builder.agent.js.map +0 -1
  215. package/dist/agents/widget-builder.agent.d.ts.map +0 -1
  216. package/dist/agents/widget-builder.agent.js.map +0 -1
  217. package/dist/agents/widget-creator-agent.d.ts.map +0 -1
  218. package/dist/agents/widget-creator-agent.js.map +0 -1
  219. package/dist/agents/workflow-designer.agent.d.ts.map +0 -1
  220. package/dist/agents/workflow-designer.agent.js.map +0 -1
  221. package/dist/api/error-handling.d.ts.map +0 -1
  222. package/dist/api/error-handling.js.map +0 -1
  223. package/dist/api/flow-designer-api.d.ts.map +0 -1
  224. package/dist/api/flow-designer-api.js.map +0 -1
  225. package/dist/api/natural-language-mapper.d.ts.map +0 -1
  226. package/dist/api/natural-language-mapper.js.map +0 -1
  227. package/dist/api/performance-optimizer.d.ts.map +0 -1
  228. package/dist/api/performance-optimizer.js.map +0 -1
  229. package/dist/api/transaction-manager.d.ts.map +0 -1
  230. package/dist/api/transaction-manager.js.map +0 -1
  231. package/dist/assembly/team-assembler.d.ts.map +0 -1
  232. package/dist/assembly/team-assembler.js.map +0 -1
  233. package/dist/cli/deploy-artifact.d.ts.map +0 -1
  234. package/dist/cli/deploy-artifact.js.map +0 -1
  235. package/dist/cli/snow-flow-cli-integration.d.ts.map +0 -1
  236. package/dist/cli/snow-flow-cli-integration.js.map +0 -1
  237. package/dist/cli.d.ts.map +0 -1
  238. package/dist/cli.js.map +0 -1
  239. package/dist/compliance/advanced-compliance-system.d.ts.map +0 -1
  240. package/dist/compliance/advanced-compliance-system.js.map +0 -1
  241. package/dist/compliance/index.d.ts.map +0 -1
  242. package/dist/compliance/index.js.map +0 -1
  243. package/dist/config/snow-flow-config.d.ts.map +0 -1
  244. package/dist/config/snow-flow-config.js.map +0 -1
  245. package/dist/documentation/index.d.ts.map +0 -1
  246. package/dist/documentation/index.js.map +0 -1
  247. package/dist/documentation/self-documenting-system.d.ts.map +0 -1
  248. package/dist/documentation/self-documenting-system.js.map +0 -1
  249. package/dist/dynamic-version.d.ts.map +0 -1
  250. package/dist/dynamic-version.js.map +0 -1
  251. package/dist/healing/index.d.ts.map +0 -1
  252. package/dist/healing/index.js.map +0 -1
  253. package/dist/healing/self-healing-system.d.ts.map +0 -1
  254. package/dist/healing/self-healing-system.js.map +0 -1
  255. package/dist/health/system-health.d.ts.map +0 -1
  256. package/dist/health/system-health.js.map +0 -1
  257. package/dist/index.d.ts.map +0 -1
  258. package/dist/index.js.map +0 -1
  259. package/dist/intelligence/acl-analyzer.d.ts.map +0 -1
  260. package/dist/intelligence/acl-analyzer.js.map +0 -1
  261. package/dist/intelligence/auto-resolution-engine.d.ts.map +0 -1
  262. package/dist/intelligence/auto-resolution-engine.js.map +0 -1
  263. package/dist/intelligence/gap-analysis-engine.d.ts.map +0 -1
  264. package/dist/intelligence/gap-analysis-engine.js.map +0 -1
  265. package/dist/intelligence/manual-instructions-generator.d.ts.map +0 -1
  266. package/dist/intelligence/manual-instructions-generator.js.map +0 -1
  267. package/dist/intelligence/mcp-coverage-analyzer.d.ts.map +0 -1
  268. package/dist/intelligence/mcp-coverage-analyzer.js.map +0 -1
  269. package/dist/intelligence/multi-pass-requirements-analyzer.d.ts.map +0 -1
  270. package/dist/intelligence/multi-pass-requirements-analyzer.js.map +0 -1
  271. package/dist/intelligence/performance-recommendations-engine.d.ts.map +0 -1
  272. package/dist/intelligence/performance-recommendations-engine.js.map +0 -1
  273. package/dist/intelligence/requirements-analyzer.d.ts.map +0 -1
  274. package/dist/intelligence/requirements-analyzer.js.map +0 -1
  275. package/dist/intelligence/task-analyzer.d.ts.map +0 -1
  276. package/dist/intelligence/task-analyzer.js.map +0 -1
  277. package/dist/managers/scope-manager.d.ts.map +0 -1
  278. package/dist/managers/scope-manager.js.map +0 -1
  279. package/dist/mcp/advanced/servicenow-advanced-features-mcp.d.ts.map +0 -1
  280. package/dist/mcp/advanced/servicenow-advanced-features-mcp.js.map +0 -1
  281. package/dist/mcp/base-mcp-server.d.ts.map +0 -1
  282. package/dist/mcp/base-mcp-server.js.map +0 -1
  283. package/dist/mcp/example-refactored-server.d.ts.map +0 -1
  284. package/dist/mcp/example-refactored-server.js.map +0 -1
  285. package/dist/mcp/http-transport-wrapper.d.ts.map +0 -1
  286. package/dist/mcp/http-transport-wrapper.js.map +0 -1
  287. package/dist/mcp/mcp-wrapper.d.ts.map +0 -1
  288. package/dist/mcp/mcp-wrapper.js.map +0 -1
  289. package/dist/mcp/service-discovery-client.d.ts.map +0 -1
  290. package/dist/mcp/service-discovery-client.js.map +0 -1
  291. package/dist/mcp/servicenow-automation-mcp-refactored.d.ts.map +0 -1
  292. package/dist/mcp/servicenow-automation-mcp-refactored.js.map +0 -1
  293. package/dist/mcp/servicenow-automation-mcp.d.ts.map +0 -1
  294. package/dist/mcp/servicenow-automation-mcp.js.map +0 -1
  295. package/dist/mcp/servicenow-deployment-mcp-refactored.d.ts.map +0 -1
  296. package/dist/mcp/servicenow-deployment-mcp-refactored.js.map +0 -1
  297. package/dist/mcp/servicenow-deployment-mcp.d.ts.map +0 -1
  298. package/dist/mcp/servicenow-deployment-mcp.js.map +0 -1
  299. package/dist/mcp/servicenow-flow-composer-mcp-refactored.d.ts.map +0 -1
  300. package/dist/mcp/servicenow-flow-composer-mcp-refactored.js.map +0 -1
  301. package/dist/mcp/servicenow-flow-composer-mcp.d.ts.map +0 -1
  302. package/dist/mcp/servicenow-flow-composer-mcp.js.map +0 -1
  303. package/dist/mcp/servicenow-graph-memory-mcp-refactored.d.ts.map +0 -1
  304. package/dist/mcp/servicenow-graph-memory-mcp-refactored.js.map +0 -1
  305. package/dist/mcp/servicenow-graph-memory-mcp.d.ts.map +0 -1
  306. package/dist/mcp/servicenow-graph-memory-mcp.js.map +0 -1
  307. package/dist/mcp/servicenow-integration-mcp-refactored.d.ts.map +0 -1
  308. package/dist/mcp/servicenow-integration-mcp-refactored.js.map +0 -1
  309. package/dist/mcp/servicenow-integration-mcp.d.ts.map +0 -1
  310. package/dist/mcp/servicenow-integration-mcp.js.map +0 -1
  311. package/dist/mcp/servicenow-intelligent-mcp-refactored.d.ts.map +0 -1
  312. package/dist/mcp/servicenow-intelligent-mcp-refactored.js.map +0 -1
  313. package/dist/mcp/servicenow-intelligent-mcp.d.ts.map +0 -1
  314. package/dist/mcp/servicenow-intelligent-mcp.js.map +0 -1
  315. package/dist/mcp/servicenow-mcp-server.d.ts.map +0 -1
  316. package/dist/mcp/servicenow-mcp-server.js.map +0 -1
  317. package/dist/mcp/servicenow-memory-mcp.d.ts.map +0 -1
  318. package/dist/mcp/servicenow-memory-mcp.js.map +0 -1
  319. package/dist/mcp/servicenow-operations-mcp-refactored.d.ts.map +0 -1
  320. package/dist/mcp/servicenow-operations-mcp-refactored.js.map +0 -1
  321. package/dist/mcp/servicenow-operations-mcp.d.ts.map +0 -1
  322. package/dist/mcp/servicenow-operations-mcp.js.map +0 -1
  323. package/dist/mcp/servicenow-platform-development-mcp-refactored.d.ts.map +0 -1
  324. package/dist/mcp/servicenow-platform-development-mcp-refactored.js.map +0 -1
  325. package/dist/mcp/servicenow-platform-development-mcp.d.ts.map +0 -1
  326. package/dist/mcp/servicenow-platform-development-mcp.js.map +0 -1
  327. package/dist/mcp/servicenow-progressive-indexer.d.ts.map +0 -1
  328. package/dist/mcp/servicenow-progressive-indexer.js.map +0 -1
  329. package/dist/mcp/servicenow-reporting-analytics-mcp-refactored.d.ts.map +0 -1
  330. package/dist/mcp/servicenow-reporting-analytics-mcp-refactored.js.map +0 -1
  331. package/dist/mcp/servicenow-reporting-analytics-mcp.d.ts.map +0 -1
  332. package/dist/mcp/servicenow-reporting-analytics-mcp.js.map +0 -1
  333. package/dist/mcp/servicenow-security-compliance-mcp-refactored.d.ts.map +0 -1
  334. package/dist/mcp/servicenow-security-compliance-mcp-refactored.js.map +0 -1
  335. package/dist/mcp/servicenow-security-compliance-mcp.d.ts.map +0 -1
  336. package/dist/mcp/servicenow-security-compliance-mcp.js.map +0 -1
  337. package/dist/mcp/servicenow-update-set-mcp-refactored.d.ts.map +0 -1
  338. package/dist/mcp/servicenow-update-set-mcp-refactored.js.map +0 -1
  339. package/dist/mcp/servicenow-update-set-mcp.d.ts.map +0 -1
  340. package/dist/mcp/servicenow-update-set-mcp.js.map +0 -1
  341. package/dist/mcp/servicenow-xml-flow-mcp.d.ts.map +0 -1
  342. package/dist/mcp/servicenow-xml-flow-mcp.js.map +0 -1
  343. package/dist/mcp/shared/agent-context-provider.d.ts.map +0 -1
  344. package/dist/mcp/shared/agent-context-provider.js.map +0 -1
  345. package/dist/mcp/shared/base-mcp-server.d.ts.map +0 -1
  346. package/dist/mcp/shared/base-mcp-server.js.map +0 -1
  347. package/dist/mcp/shared/mcp-memory-manager.d.ts.map +0 -1
  348. package/dist/mcp/shared/mcp-memory-manager.js.map +0 -1
  349. package/dist/mcp/shared/mcp-resource-manager.d.ts.map +0 -1
  350. package/dist/mcp/shared/mcp-resource-manager.js.map +0 -1
  351. package/dist/mcp/snow-flow-mcp.d.ts.map +0 -1
  352. package/dist/mcp/snow-flow-mcp.js.map +0 -1
  353. package/dist/mcp/start-all-mcp-servers.d.ts.map +0 -1
  354. package/dist/mcp/start-all-mcp-servers.js.map +0 -1
  355. package/dist/mcp/start-servicenow-mcp.d.ts.map +0 -1
  356. package/dist/mcp/start-servicenow-mcp.js.map +0 -1
  357. package/dist/mcp/test-simple-mcp.d.ts.map +0 -1
  358. package/dist/mcp/test-simple-mcp.js.map +0 -1
  359. package/dist/memory/hierarchical-memory-system.d.ts +0 -90
  360. package/dist/memory/hierarchical-memory-system.d.ts.map +0 -1
  361. package/dist/memory/hierarchical-memory-system.js +0 -400
  362. package/dist/memory/hierarchical-memory-system.js.map +0 -1
  363. package/dist/memory/index.d.ts +0 -9
  364. package/dist/memory/index.d.ts.map +0 -1
  365. package/dist/memory/index.js +0 -20
  366. package/dist/memory/index.js.map +0 -1
  367. package/dist/memory/mcp-integration-example.d.ts +0 -6
  368. package/dist/memory/mcp-integration-example.d.ts.map +0 -1
  369. package/dist/memory/mcp-integration-example.js +0 -281
  370. package/dist/memory/mcp-integration-example.js.map +0 -1
  371. package/dist/memory/memory-client.d.ts +0 -199
  372. package/dist/memory/memory-client.d.ts.map +0 -1
  373. package/dist/memory/memory-client.js +0 -364
  374. package/dist/memory/memory-client.js.map +0 -1
  375. package/dist/memory/memory-manager.d.ts +0 -29
  376. package/dist/memory/memory-manager.d.ts.map +0 -1
  377. package/dist/memory/memory-manager.js +0 -280
  378. package/dist/memory/memory-manager.js.map +0 -1
  379. package/dist/memory/memory-operations.d.ts +0 -179
  380. package/dist/memory/memory-operations.d.ts.map +0 -1
  381. package/dist/memory/memory-operations.js +0 -691
  382. package/dist/memory/memory-operations.js.map +0 -1
  383. package/dist/memory/memory-system.d.ts +0 -152
  384. package/dist/memory/memory-system.d.ts.map +0 -1
  385. package/dist/memory/memory-system.js +0 -632
  386. package/dist/memory/memory-system.js.map +0 -1
  387. package/dist/memory/memory-test.d.ts +0 -6
  388. package/dist/memory/memory-test.d.ts.map +0 -1
  389. package/dist/memory/memory-test.js +0 -161
  390. package/dist/memory/memory-test.js.map +0 -1
  391. package/dist/memory/servicenow-artifact-indexer.d.ts +0 -119
  392. package/dist/memory/servicenow-artifact-indexer.d.ts.map +0 -1
  393. package/dist/memory/servicenow-artifact-indexer.js +0 -560
  394. package/dist/memory/servicenow-artifact-indexer.js.map +0 -1
  395. package/dist/memory/snow-flow-memory-patterns.d.ts +0 -213
  396. package/dist/memory/snow-flow-memory-patterns.d.ts.map +0 -1
  397. package/dist/memory/snow-flow-memory-patterns.js +0 -200
  398. package/dist/memory/snow-flow-memory-patterns.js.map +0 -1
  399. package/dist/memory/snow-memory.d.ts +0 -54
  400. package/dist/memory/snow-memory.d.ts.map +0 -1
  401. package/dist/memory/snow-memory.js +0 -301
  402. package/dist/memory/snow-memory.js.map +0 -1
  403. package/dist/memory/swarm-memory.d.ts +0 -135
  404. package/dist/memory/swarm-memory.d.ts.map +0 -1
  405. package/dist/memory/swarm-memory.js +0 -378
  406. package/dist/memory/swarm-memory.js.map +0 -1
  407. package/dist/monitoring/enhanced-monitoring-system.d.ts.map +0 -1
  408. package/dist/monitoring/enhanced-monitoring-system.js.map +0 -1
  409. package/dist/monitoring/performance-tracker.d.ts.map +0 -1
  410. package/dist/monitoring/performance-tracker.js.map +0 -1
  411. package/dist/optimization/cost-optimization-engine.d.ts.map +0 -1
  412. package/dist/optimization/cost-optimization-engine.js.map +0 -1
  413. package/dist/optimization/index.d.ts.map +0 -1
  414. package/dist/optimization/index.js.map +0 -1
  415. package/dist/orchestration/discovery/service-discovery.d.ts.map +0 -1
  416. package/dist/orchestration/discovery/service-discovery.js.map +0 -1
  417. package/dist/orchestration/distributed-orchestrator.d.ts.map +0 -1
  418. package/dist/orchestration/distributed-orchestrator.js.map +0 -1
  419. package/dist/orchestration/distribution/task-distribution-engine.d.ts.map +0 -1
  420. package/dist/orchestration/distribution/task-distribution-engine.js.map +0 -1
  421. package/dist/orchestration/interfaces/distributed-orchestration.interface.d.ts.map +0 -1
  422. package/dist/orchestration/interfaces/distributed-orchestration.interface.js.map +0 -1
  423. package/dist/orchestration/protocols/mcpx-protocol.d.ts.map +0 -1
  424. package/dist/orchestration/protocols/mcpx-protocol.js.map +0 -1
  425. package/dist/orchestration/state/distributed-state-manager.d.ts.map +0 -1
  426. package/dist/orchestration/state/distributed-state-manager.js.map +0 -1
  427. package/dist/orchestrator/flow-composer.d.ts.map +0 -1
  428. package/dist/orchestrator/flow-composer.js.map +0 -1
  429. package/dist/orchestrator/flow-pattern-templates.d.ts.map +0 -1
  430. package/dist/orchestrator/flow-pattern-templates.js.map +0 -1
  431. package/dist/orchestrator/flow-subflow-decision-engine.d.ts.map +0 -1
  432. package/dist/orchestrator/flow-subflow-decision-engine.js.map +0 -1
  433. package/dist/orchestrator/flow-validation-engine.d.ts.map +0 -1
  434. package/dist/orchestrator/flow-validation-engine.js.map +0 -1
  435. package/dist/orchestrator/snow-orchestrator.d.ts.map +0 -1
  436. package/dist/orchestrator/snow-orchestrator.js.map +0 -1
  437. package/dist/orchestrator/subflow-creation-handler.d.ts.map +0 -1
  438. package/dist/orchestrator/subflow-creation-handler.js.map +0 -1
  439. package/dist/patterns/adaptive-patterns.d.ts.map +0 -1
  440. package/dist/patterns/adaptive-patterns.js.map +0 -1
  441. package/dist/queen/advanced-integration-test.d.ts.map +0 -1
  442. package/dist/queen/advanced-integration-test.js.map +0 -1
  443. package/dist/queen/agent-factory.d.ts.map +0 -1
  444. package/dist/queen/agent-factory.js.map +0 -1
  445. package/dist/queen/index.d.ts.map +0 -1
  446. package/dist/queen/index.js.map +0 -1
  447. package/dist/queen/integration-example.d.ts.map +0 -1
  448. package/dist/queen/integration-example.js.map +0 -1
  449. package/dist/queen/integration-test.d.ts.map +0 -1
  450. package/dist/queen/integration-test.js.map +0 -1
  451. package/dist/queen/mcp-execution-bridge.d.ts.map +0 -1
  452. package/dist/queen/mcp-execution-bridge.js.map +0 -1
  453. package/dist/queen/mock-mcp-client.d.ts.map +0 -1
  454. package/dist/queen/mock-mcp-client.js.map +0 -1
  455. package/dist/queen/neural-learning.d.ts.map +0 -1
  456. package/dist/queen/neural-learning.js.map +0 -1
  457. package/dist/queen/parallel-agent-engine.d.ts.map +0 -1
  458. package/dist/queen/parallel-agent-engine.js.map +0 -1
  459. package/dist/queen/queen-memory-system.d.ts.map +0 -1
  460. package/dist/queen/queen-memory-system.js.map +0 -1
  461. package/dist/queen/queen-memory.d.ts.map +0 -1
  462. package/dist/queen/queen-memory.js.map +0 -1
  463. package/dist/queen/run-integration-tests.d.ts.map +0 -1
  464. package/dist/queen/run-integration-tests.js.map +0 -1
  465. package/dist/queen/servicenow-queen.d.ts.map +0 -1
  466. package/dist/queen/servicenow-queen.js.map +0 -1
  467. package/dist/queen/types.d.ts.map +0 -1
  468. package/dist/queen/types.js.map +0 -1
  469. package/dist/rollback/smart-rollback-system.d.ts.map +0 -1
  470. package/dist/rollback/smart-rollback-system.js.map +0 -1
  471. package/dist/snow-flow-system.d.ts.map +0 -1
  472. package/dist/snow-flow-system.js.map +0 -1
  473. package/dist/sparc/coordinators/adaptive-coordinator.d.ts.map +0 -1
  474. package/dist/sparc/coordinators/adaptive-coordinator.js.map +0 -1
  475. package/dist/sparc/coordinators/team-coordinator.d.ts.map +0 -1
  476. package/dist/sparc/coordinators/team-coordinator.js.map +0 -1
  477. package/dist/sparc/modes/team-modes.d.ts.map +0 -1
  478. package/dist/sparc/modes/team-modes.js.map +0 -1
  479. package/dist/sparc/sparc-help.d.ts.map +0 -1
  480. package/dist/sparc/sparc-help.js.map +0 -1
  481. package/dist/sparc/team-sparc.d.ts.map +0 -1
  482. package/dist/sparc/team-sparc.js.map +0 -1
  483. package/dist/sparc/teams/application-team.d.ts.map +0 -1
  484. package/dist/sparc/teams/application-team.js.map +0 -1
  485. package/dist/sparc/teams/flow-team.d.ts.map +0 -1
  486. package/dist/sparc/teams/flow-team.js.map +0 -1
  487. package/dist/sparc/teams/widget-team.d.ts.map +0 -1
  488. package/dist/sparc/teams/widget-team.js.map +0 -1
  489. package/dist/specialists/app-specialists.d.ts.map +0 -1
  490. package/dist/specialists/app-specialists.js.map +0 -1
  491. package/dist/specialists/base-specialist.d.ts.map +0 -1
  492. package/dist/specialists/base-specialist.js.map +0 -1
  493. package/dist/specialists/flow-specialists.d.ts.map +0 -1
  494. package/dist/specialists/flow-specialists.js.map +0 -1
  495. package/dist/specialists/individual-specialists.d.ts.map +0 -1
  496. package/dist/specialists/individual-specialists.js.map +0 -1
  497. package/dist/specialists/widget-specialists.d.ts.map +0 -1
  498. package/dist/specialists/widget-specialists.js.map +0 -1
  499. package/dist/strategies/global-scope-strategy.d.ts.map +0 -1
  500. package/dist/strategies/global-scope-strategy.js.map +0 -1
  501. package/dist/teams/adaptive-team.d.ts.map +0 -1
  502. package/dist/teams/adaptive-team.js.map +0 -1
  503. package/dist/teams/application-team.d.ts.map +0 -1
  504. package/dist/teams/application-team.js.map +0 -1
  505. package/dist/teams/base-team.d.ts.map +0 -1
  506. package/dist/teams/base-team.js.map +0 -1
  507. package/dist/teams/flow-team.d.ts.map +0 -1
  508. package/dist/teams/flow-team.js.map +0 -1
  509. package/dist/teams/widget-team.d.ts.map +0 -1
  510. package/dist/teams/widget-team.js.map +0 -1
  511. package/dist/testing/integration-test-suite.d.ts.map +0 -1
  512. package/dist/testing/integration-test-suite.js.map +0 -1
  513. package/dist/types/index.d.ts.map +0 -1
  514. package/dist/types/index.js.map +0 -1
  515. package/dist/types/servicenow.types.d.ts.map +0 -1
  516. package/dist/types/servicenow.types.js.map +0 -1
  517. package/dist/types/snow-flow.types.d.ts.map +0 -1
  518. package/dist/types/snow-flow.types.js.map +0 -1
  519. package/dist/types/todo.types.d.ts.map +0 -1
  520. package/dist/types/todo.types.js.map +0 -1
  521. package/dist/utils/action-type-cache.d.ts.map +0 -1
  522. package/dist/utils/action-type-cache.js.map +0 -1
  523. package/dist/utils/agent-detector.d.ts.map +0 -1
  524. package/dist/utils/agent-detector.js.map +0 -1
  525. package/dist/utils/artifact-tracker.d.ts.map +0 -1
  526. package/dist/utils/artifact-tracker.js.map +0 -1
  527. package/dist/utils/dependency-detector.d.ts.map +0 -1
  528. package/dist/utils/dependency-detector.js.map +0 -1
  529. package/dist/utils/deployment-metadata-handler.d.ts.map +0 -1
  530. package/dist/utils/deployment-metadata-handler.js.map +0 -1
  531. package/dist/utils/error-recovery.d.ts.map +0 -1
  532. package/dist/utils/error-recovery.js.map +0 -1
  533. package/dist/utils/flow-api-discovery.d.ts.map +0 -1
  534. package/dist/utils/flow-api-discovery.js.map +0 -1
  535. package/dist/utils/flow-xml-generator.d.ts.map +0 -1
  536. package/dist/utils/flow-xml-generator.js.map +0 -1
  537. package/dist/utils/logger.d.ts.map +0 -1
  538. package/dist/utils/logger.js.map +0 -1
  539. package/dist/utils/mcp-auth-middleware.d.ts.map +0 -1
  540. package/dist/utils/mcp-auth-middleware.js.map +0 -1
  541. package/dist/utils/mcp-config-manager.d.ts.map +0 -1
  542. package/dist/utils/mcp-config-manager.js.map +0 -1
  543. package/dist/utils/mcp-server-manager.d.ts.map +0 -1
  544. package/dist/utils/mcp-server-manager.js.map +0 -1
  545. package/dist/utils/mcp-tool-registry.d.ts.map +0 -1
  546. package/dist/utils/mcp-tool-registry.js.map +0 -1
  547. package/dist/utils/migrate-claude-flow.d.ts.map +0 -1
  548. package/dist/utils/migrate-claude-flow.js.map +0 -1
  549. package/dist/utils/migrate-snow-flow.d.ts.map +0 -1
  550. package/dist/utils/migrate-snow-flow.js.map +0 -1
  551. package/dist/utils/oauth-html-templates.d.ts.map +0 -1
  552. package/dist/utils/oauth-html-templates.js.map +0 -1
  553. package/dist/utils/scope-utils.d.ts.map +0 -1
  554. package/dist/utils/scope-utils.js.map +0 -1
  555. package/dist/utils/servicenow-client.d.ts.map +0 -1
  556. package/dist/utils/servicenow-client.js.map +0 -1
  557. package/dist/utils/servicenow-id-generator.d.ts.map +0 -1
  558. package/dist/utils/servicenow-id-generator.js.map +0 -1
  559. package/dist/utils/snow-memory-manager.d.ts.map +0 -1
  560. package/dist/utils/snow-memory-manager.js.map +0 -1
  561. package/dist/utils/snow-oauth-old.d.ts.map +0 -1
  562. package/dist/utils/snow-oauth-old.js.map +0 -1
  563. package/dist/utils/snow-oauth.d.ts.map +0 -1
  564. package/dist/utils/snow-oauth.js.map +0 -1
  565. package/dist/utils/template-engine.d.ts.map +0 -1
  566. package/dist/utils/template-engine.js.map +0 -1
  567. package/dist/utils/theme-manager.d.ts.map +0 -1
  568. package/dist/utils/theme-manager.js.map +0 -1
  569. package/dist/utils/unified-auth-store.d.ts.map +0 -1
  570. package/dist/utils/unified-auth-store.js.map +0 -1
  571. package/dist/utils/update-set-importer.d.ts.map +0 -1
  572. package/dist/utils/update-set-importer.js.map +0 -1
  573. package/dist/utils/update-set-xml-packager.d.ts.map +0 -1
  574. package/dist/utils/update-set-xml-packager.js.map +0 -1
  575. package/dist/utils/widget-template-generator.d.ts.map +0 -1
  576. package/dist/utils/widget-template-generator.js.map +0 -1
  577. package/dist/version.d.ts.map +0 -1
  578. package/dist/version.js.map +0 -1
  579. package/memory/agents/README.md +0 -31
  580. package/memory/claude-flow-data.json +0 -5
  581. package/memory/servicenow_artifacts/000d9224c895221055906c7518aa2d3d.json +0 -30
  582. package/memory/servicenow_artifacts/0196b66173303010e46b4a2214f6a7a2.json +0 -36
  583. package/memory/servicenow_artifacts/125e5d1d837e2a102a7ea130ceaad397.json +0 -30
  584. package/memory/servicenow_artifacts/7637c1f2b7112210a5e5911cde11a972.json +0 -30
  585. package/memory/servicenow_artifacts/default_documentation_tables_1754056582292.json +0 -55
  586. package/memory/servicenow_artifacts/default_documentation_tables_1754057477189.json +0 -55
  587. package/memory/sessions/README.md +0 -32
  588. package/memory/update-set-sessions/01f82af583faea102a7ea130ceaad3d4.json +0 -9
  589. package/memory/update-set-sessions/27718fb983faea102a7ea130ceaad34b.json +0 -9
  590. package/memory/update-set-sessions/412e9bf6833e22502a7ea130ceaad30a.json +0 -8
  591. package/memory/update-set-sessions/66fc5a79837aea102a7ea130ceaad3ab.json +0 -9
  592. package/memory/update-set-sessions/71a30ff5837eea102a7ea130ceaad37f.json +0 -9
  593. package/memory/update-set-sessions/74fba27983faea102a7ea130ceaad3bd.json +0 -9
  594. package/memory/update-set-sessions/a0b147b5837eea102a7ea130ceaad344.json +0 -58
  595. package/memory/update-set-sessions/b13f5eb983baea102a7ea130ceaad33e.json +0 -9
@@ -0,0 +1,971 @@
1
+ /**
2
+ * Agent Coordination System
3
+ * Manages inter-agent communication, task dependencies, and handoffs
4
+ * Integrates with SQLite memory for persistent coordination state
5
+ */
6
+
7
+ import { EventEmitter } from 'eventemitter3';
8
+ import { Agent, AgentMessage } from '../queen/types';
9
+ import { QueenMemorySystem } from '../queen/queen-memory';
10
+ import * as crypto from 'crypto';
11
+
12
+ export interface CoordinationContext {
13
+ sessionId: string;
14
+ objectiveId: string;
15
+ agents: Map<string, Agent>;
16
+ dependencies: Map<string, string[]>;
17
+ handoffs: Map<string, HandoffRequest>;
18
+ blockages: Map<string, BlockageInfo>;
19
+ }
20
+
21
+ export interface HandoffRequest {
22
+ id: string;
23
+ fromAgent: string;
24
+ toAgent: string;
25
+ artifactType: string;
26
+ artifactData: any;
27
+ status: 'pending' | 'accepted' | 'completed' | 'failed';
28
+ createdAt: Date;
29
+ completedAt?: Date;
30
+ }
31
+
32
+ export interface BlockageInfo {
33
+ agentId: string;
34
+ reason: string;
35
+ blockedTasks: string[];
36
+ dependencies: string[];
37
+ attemptedResolutions: string[];
38
+ createdAt: Date;
39
+ }
40
+
41
+ export interface CoordinationStrategy {
42
+ type: 'sequential' | 'parallel' | 'adaptive';
43
+ rules: CoordinationRule[];
44
+ fallbackStrategy?: string;
45
+ }
46
+
47
+ export interface CoordinationRule {
48
+ condition: string;
49
+ action: string;
50
+ priority: number;
51
+ }
52
+
53
+ export interface RecoveryStrategy {
54
+ errorType: string;
55
+ recoveryActions: RecoveryAction[];
56
+ maxRetries: number;
57
+ }
58
+
59
+ export interface RecoveryAction {
60
+ type: 'retry' | 'fallback' | 'reassign' | 'escalate';
61
+ config: Record<string, any>;
62
+ }
63
+
64
+ export class AgentCoordinator extends EventEmitter {
65
+ private memory: QueenMemorySystem;
66
+ private contexts: Map<string, CoordinationContext>;
67
+ private strategies: Map<string, CoordinationStrategy>;
68
+ private recoveryStrategies: Map<string, RecoveryStrategy>;
69
+ private messageQueue: Map<string, AgentMessage[]>;
70
+
71
+ constructor(memory: QueenMemorySystem) {
72
+ super();
73
+ this.memory = memory;
74
+ this.contexts = new Map();
75
+ this.strategies = new Map();
76
+ this.recoveryStrategies = new Map();
77
+ this.messageQueue = new Map();
78
+
79
+ this.initializeDefaultStrategies();
80
+ this.setupMemorySync();
81
+ }
82
+
83
+ /**
84
+ * Create a new coordination context for an objective
85
+ */
86
+ async createContext(sessionId: string, objectiveId: string): Promise<CoordinationContext> {
87
+ const context: CoordinationContext = {
88
+ sessionId,
89
+ objectiveId,
90
+ agents: new Map(),
91
+ dependencies: new Map(),
92
+ handoffs: new Map(),
93
+ blockages: new Map()
94
+ };
95
+
96
+ this.contexts.set(objectiveId, context);
97
+
98
+ // Store context in memory for persistence
99
+ await this.memory.store(`coordination_context_${objectiveId}`, {
100
+ sessionId,
101
+ objectiveId,
102
+ createdAt: new Date().toISOString()
103
+ });
104
+
105
+ this.emit('context:created', { sessionId, objectiveId });
106
+
107
+ return context;
108
+ }
109
+
110
+ /**
111
+ * Register an agent with the coordinator
112
+ */
113
+ async registerAgent(agent: Agent, objectiveId?: string): Promise<void> {
114
+ // Find or create context
115
+ let context: CoordinationContext | undefined;
116
+ if (objectiveId) {
117
+ context = this.contexts.get(objectiveId);
118
+ } else {
119
+ // Find context that needs this agent type
120
+ for (const ctx of this.contexts.values()) {
121
+ if (!Array.from(ctx.agents.values()).some(a => a.type === agent.type)) {
122
+ context = ctx;
123
+ break;
124
+ }
125
+ }
126
+ }
127
+
128
+ if (!context) {
129
+ throw new Error('No suitable coordination context found for agent');
130
+ }
131
+
132
+ context.agents.set(agent.id, agent);
133
+
134
+ // Store agent registration in memory
135
+ await this.memory.store(`agent_registration_${agent.id}`, {
136
+ agentId: agent.id,
137
+ agentType: agent.type,
138
+ objectiveId: context.objectiveId,
139
+ sessionId: context.sessionId,
140
+ registeredAt: new Date().toISOString()
141
+ });
142
+
143
+ // Initialize message queue for agent
144
+ this.messageQueue.set(agent.id, []);
145
+
146
+ this.emit('agent:registered', { agent, objectiveId: context.objectiveId });
147
+ }
148
+
149
+ /**
150
+ * Manage task dependencies between agents
151
+ */
152
+ async manageDependencies(
153
+ objectiveId: string,
154
+ taskId: string,
155
+ dependencies: string[]
156
+ ): Promise<void> {
157
+ const context = this.contexts.get(objectiveId);
158
+ if (!context) {
159
+ throw new Error(`No context found for objective: ${objectiveId}`);
160
+ }
161
+
162
+ context.dependencies.set(taskId, dependencies);
163
+
164
+ // Store dependencies in memory
165
+ await this.memory.store(`dependencies_${taskId}`, {
166
+ taskId,
167
+ dependencies,
168
+ objectiveId,
169
+ createdAt: new Date().toISOString()
170
+ });
171
+
172
+ // Check if any dependencies are already satisfied
173
+ await this.checkDependencySatisfaction(context, taskId);
174
+ }
175
+
176
+ /**
177
+ * Coordinate handoff between agents
178
+ */
179
+ async coordinateHandoff(
180
+ fromAgentId: string,
181
+ toAgentId: string,
182
+ artifactType: string,
183
+ artifactData: any
184
+ ): Promise<HandoffRequest> {
185
+ const handoffId = this.generateId('handoff');
186
+
187
+ const handoff: HandoffRequest = {
188
+ id: handoffId,
189
+ fromAgent: fromAgentId,
190
+ toAgent: toAgentId,
191
+ artifactType,
192
+ artifactData,
193
+ status: 'pending',
194
+ createdAt: new Date()
195
+ };
196
+
197
+ // Find context containing these agents
198
+ let context: CoordinationContext | undefined;
199
+ for (const ctx of this.contexts.values()) {
200
+ if (ctx.agents.has(fromAgentId) && ctx.agents.has(toAgentId)) {
201
+ context = ctx;
202
+ break;
203
+ }
204
+ }
205
+
206
+ if (!context) {
207
+ throw new Error('No coordination context found for agents');
208
+ }
209
+
210
+ context.handoffs.set(handoffId, handoff);
211
+
212
+ // Store handoff in memory
213
+ await this.memory.store(`handoff_${handoffId}`, {
214
+ handoff,
215
+ objectiveId: context.objectiveId,
216
+ timestamp: new Date().toISOString()
217
+ });
218
+
219
+ // Notify receiving agent
220
+ await this.sendMessage(fromAgentId, toAgentId, 'coordination', {
221
+ type: 'handoff_request',
222
+ handoffId,
223
+ artifactType,
224
+ artifactData
225
+ });
226
+
227
+ this.emit('agent:handoff', {
228
+ handoffId,
229
+ fromAgent: fromAgentId,
230
+ toAgent: toAgentId,
231
+ artifactType,
232
+ objectiveId: context.objectiveId
233
+ });
234
+
235
+ return handoff;
236
+ }
237
+
238
+ /**
239
+ * Handle agent blockage with recovery strategies
240
+ */
241
+ async handleBlockage(
242
+ agentId: string,
243
+ reason: string,
244
+ blockedTasks: string[]
245
+ ): Promise<void> {
246
+ // Find context containing this agent
247
+ let context: CoordinationContext | undefined;
248
+ for (const ctx of this.contexts.values()) {
249
+ if (ctx.agents.has(agentId)) {
250
+ context = ctx;
251
+ break;
252
+ }
253
+ }
254
+
255
+ if (!context) {
256
+ throw new Error(`No context found for agent: ${agentId}`);
257
+ }
258
+
259
+ const blockage: BlockageInfo = {
260
+ agentId,
261
+ reason,
262
+ blockedTasks,
263
+ dependencies: this.findBlockedDependencies(context, blockedTasks),
264
+ attemptedResolutions: [],
265
+ createdAt: new Date()
266
+ };
267
+
268
+ context.blockages.set(agentId, blockage);
269
+
270
+ // Store blockage in memory
271
+ await this.memory.store(`blockage_${agentId}_${Date.now()}`, {
272
+ blockage,
273
+ objectiveId: context.objectiveId,
274
+ timestamp: new Date().toISOString()
275
+ });
276
+
277
+ // Attempt recovery
278
+ await this.attemptRecovery(context, blockage);
279
+
280
+ this.emit('agent:blocked', {
281
+ agentId,
282
+ reason,
283
+ blockedTasks,
284
+ objectiveId: context.objectiveId
285
+ });
286
+ }
287
+
288
+ /**
289
+ * Send message between agents
290
+ */
291
+ async sendMessage(
292
+ fromAgentId: string,
293
+ toAgentId: string,
294
+ messageType: AgentMessage['type'],
295
+ content: any
296
+ ): Promise<void> {
297
+ const message: AgentMessage = {
298
+ from: fromAgentId,
299
+ to: toAgentId,
300
+ type: messageType,
301
+ content,
302
+ timestamp: new Date()
303
+ };
304
+
305
+ // Add to message queue
306
+ const queue = this.messageQueue.get(toAgentId) || [];
307
+ queue.push(message);
308
+ this.messageQueue.set(toAgentId, queue);
309
+
310
+ // Store message in memory for audit
311
+ await this.memory.store(`message_${Date.now()}_${crypto.randomBytes(4).toString('hex')}`, {
312
+ message,
313
+ delivered: false,
314
+ timestamp: new Date().toISOString()
315
+ });
316
+
317
+ // Process message immediately if agent is listening
318
+ await this.processAgentMessages(toAgentId);
319
+
320
+ this.emit('message:sent', message);
321
+ }
322
+
323
+ /**
324
+ * Get pending messages for an agent
325
+ */
326
+ async getAgentMessages(agentId: string): Promise<AgentMessage[]> {
327
+ const messages = this.messageQueue.get(agentId) || [];
328
+
329
+ // Clear processed messages
330
+ this.messageQueue.set(agentId, []);
331
+
332
+ return messages;
333
+ }
334
+
335
+ /**
336
+ * Update handoff status
337
+ */
338
+ async updateHandoffStatus(
339
+ handoffId: string,
340
+ status: HandoffRequest['status']
341
+ ): Promise<void> {
342
+ let handoff: HandoffRequest | undefined;
343
+ let context: CoordinationContext | undefined;
344
+
345
+ // Find handoff in contexts
346
+ for (const ctx of this.contexts.values()) {
347
+ if (ctx.handoffs.has(handoffId)) {
348
+ handoff = ctx.handoffs.get(handoffId);
349
+ context = ctx;
350
+ break;
351
+ }
352
+ }
353
+
354
+ if (!handoff || !context) {
355
+ throw new Error(`Handoff not found: ${handoffId}`);
356
+ }
357
+
358
+ handoff.status = status;
359
+ if (status === 'completed' || status === 'failed') {
360
+ handoff.completedAt = new Date();
361
+ }
362
+
363
+ // Update memory
364
+ await this.memory.store(`handoff_status_${handoffId}`, {
365
+ handoffId,
366
+ newStatus: status,
367
+ timestamp: new Date().toISOString()
368
+ });
369
+
370
+ this.emit('handoff:updated', {
371
+ handoffId,
372
+ status,
373
+ objectiveId: context.objectiveId
374
+ });
375
+ }
376
+
377
+ /**
378
+ * Get coordination status for an objective
379
+ */
380
+ async getCoordinationStatus(objectiveId: string): Promise<{
381
+ agents: { total: number; active: number; blocked: number };
382
+ handoffs: { total: number; pending: number; completed: number };
383
+ dependencies: { total: number; satisfied: number };
384
+ blockages: number;
385
+ }> {
386
+ const context = this.contexts.get(objectiveId);
387
+ if (!context) {
388
+ throw new Error(`No context found for objective: ${objectiveId}`);
389
+ }
390
+
391
+ const agents = Array.from(context.agents.values());
392
+ const handoffs = Array.from(context.handoffs.values());
393
+
394
+ // Count satisfied dependencies
395
+ let totalDeps = 0;
396
+ let satisfiedDeps = 0;
397
+ for (const deps of context.dependencies.values()) {
398
+ totalDeps += deps.length;
399
+ // Check each dependency (would need task completion tracking)
400
+ satisfiedDeps += deps.filter(d => this.isDependencySatisfied(context, d)).length;
401
+ }
402
+
403
+ return {
404
+ agents: {
405
+ total: agents.length,
406
+ active: agents.filter(a => a.status === 'working').length,
407
+ blocked: context.blockages.size
408
+ },
409
+ handoffs: {
410
+ total: handoffs.length,
411
+ pending: handoffs.filter(h => h.status === 'pending').length,
412
+ completed: handoffs.filter(h => h.status === 'completed').length
413
+ },
414
+ dependencies: {
415
+ total: totalDeps,
416
+ satisfied: satisfiedDeps
417
+ },
418
+ blockages: context.blockages.size
419
+ };
420
+ }
421
+
422
+ /**
423
+ * Apply coordination strategy
424
+ */
425
+ async applyStrategy(
426
+ objectiveId: string,
427
+ strategyType: string
428
+ ): Promise<void> {
429
+ const context = this.contexts.get(objectiveId);
430
+ if (!context) {
431
+ throw new Error(`No context found for objective: ${objectiveId}`);
432
+ }
433
+
434
+ const strategy = this.strategies.get(strategyType);
435
+ if (!strategy) {
436
+ throw new Error(`Unknown strategy: ${strategyType}`);
437
+ }
438
+
439
+ // Apply strategy rules
440
+ for (const rule of strategy.rules) {
441
+ if (this.evaluateCondition(context, rule.condition)) {
442
+ await this.executeAction(context, rule.action);
443
+ }
444
+ }
445
+
446
+ this.emit('strategy:applied', { objectiveId, strategyType });
447
+ }
448
+
449
+ /**
450
+ * Terminate an agent
451
+ */
452
+ async terminateAgent(agentId: string): Promise<void> {
453
+ // Find and remove agent from all contexts
454
+ for (const context of this.contexts.values()) {
455
+ if (context.agents.has(agentId)) {
456
+ context.agents.delete(agentId);
457
+
458
+ // Clear any blockages
459
+ context.blockages.delete(agentId);
460
+
461
+ // Update memory
462
+ await this.memory.store(`agent_terminated_${agentId}`, {
463
+ agentId,
464
+ objectiveId: context.objectiveId,
465
+ terminatedAt: new Date().toISOString()
466
+ });
467
+
468
+ this.emit('agent:terminated', { agentId, objectiveId: context.objectiveId });
469
+ break;
470
+ }
471
+ }
472
+
473
+ // Clear message queue
474
+ this.messageQueue.delete(agentId);
475
+ }
476
+
477
+ /**
478
+ * Initialize default coordination strategies
479
+ */
480
+ private initializeDefaultStrategies(): void {
481
+ // Sequential strategy
482
+ this.strategies.set('sequential', {
483
+ type: 'sequential',
484
+ rules: [
485
+ {
486
+ condition: 'hasBlockedAgent',
487
+ action: 'waitForDependencies',
488
+ priority: 1
489
+ },
490
+ {
491
+ condition: 'allDependenciesSatisfied',
492
+ action: 'proceedToNextTask',
493
+ priority: 2
494
+ }
495
+ ]
496
+ });
497
+
498
+ // Parallel strategy
499
+ this.strategies.set('parallel', {
500
+ type: 'parallel',
501
+ rules: [
502
+ {
503
+ condition: 'hasIndependentTasks',
504
+ action: 'assignToAvailableAgents',
505
+ priority: 1
506
+ },
507
+ {
508
+ condition: 'hasBlockedAgent',
509
+ action: 'reassignToOtherAgent',
510
+ priority: 2
511
+ }
512
+ ]
513
+ });
514
+
515
+ // Adaptive strategy
516
+ this.strategies.set('adaptive', {
517
+ type: 'adaptive',
518
+ rules: [
519
+ {
520
+ condition: 'highComplexity',
521
+ action: 'spawnSpecialistAgent',
522
+ priority: 1
523
+ },
524
+ {
525
+ condition: 'repeatedFailures',
526
+ action: 'switchToFallbackApproach',
527
+ priority: 2
528
+ }
529
+ ]
530
+ });
531
+
532
+ // Initialize recovery strategies
533
+ this.initializeRecoveryStrategies();
534
+ }
535
+
536
+ /**
537
+ * Initialize recovery strategies for error handling
538
+ */
539
+ private initializeRecoveryStrategies(): void {
540
+ // Permission error recovery
541
+ this.recoveryStrategies.set('permission_error', {
542
+ errorType: 'permission_error',
543
+ recoveryActions: [
544
+ {
545
+ type: 'fallback',
546
+ config: { scope: 'global' }
547
+ },
548
+ {
549
+ type: 'escalate',
550
+ config: { requestElevation: true }
551
+ }
552
+ ],
553
+ maxRetries: 3
554
+ });
555
+
556
+ // Dependency timeout recovery
557
+ this.recoveryStrategies.set('dependency_timeout', {
558
+ errorType: 'dependency_timeout',
559
+ recoveryActions: [
560
+ {
561
+ type: 'reassign',
562
+ config: { preferredAgentType: 'any' }
563
+ },
564
+ {
565
+ type: 'fallback',
566
+ config: { skipDependency: true }
567
+ }
568
+ ],
569
+ maxRetries: 2
570
+ });
571
+
572
+ // Resource exhaustion recovery
573
+ this.recoveryStrategies.set('resource_exhaustion', {
574
+ errorType: 'resource_exhaustion',
575
+ recoveryActions: [
576
+ {
577
+ type: 'retry',
578
+ config: { delay: 5000 }
579
+ },
580
+ {
581
+ type: 'reassign',
582
+ config: { reduceComplexity: true }
583
+ }
584
+ ],
585
+ maxRetries: 3
586
+ });
587
+ }
588
+
589
+ /**
590
+ * Set up memory synchronization
591
+ */
592
+ private setupMemorySync(): void {
593
+ // Periodically sync coordination state to memory
594
+ setInterval(async () => {
595
+ for (const [objectiveId, context] of this.contexts) {
596
+ await this.syncContextToMemory(objectiveId, context);
597
+ }
598
+ }, 30000); // Every 30 seconds
599
+ }
600
+
601
+ /**
602
+ * Sync context to memory
603
+ */
604
+ private async syncContextToMemory(
605
+ objectiveId: string,
606
+ context: CoordinationContext
607
+ ): Promise<void> {
608
+ await this.memory.store(`coordination_state_${objectiveId}`, {
609
+ objectiveId,
610
+ sessionId: context.sessionId,
611
+ agentCount: context.agents.size,
612
+ activeHandoffs: Array.from(context.handoffs.values()).filter(h => h.status === 'pending').length,
613
+ blockages: context.blockages.size,
614
+ lastSync: new Date().toISOString()
615
+ });
616
+ }
617
+
618
+ /**
619
+ * Check if dependencies are satisfied
620
+ */
621
+ private async checkDependencySatisfaction(
622
+ context: CoordinationContext,
623
+ taskId: string
624
+ ): Promise<void> {
625
+ const dependencies = context.dependencies.get(taskId) || [];
626
+ const allSatisfied = dependencies.every(dep => this.isDependencySatisfied(context, dep));
627
+
628
+ if (allSatisfied) {
629
+ this.emit('dependencies:satisfied', {
630
+ taskId,
631
+ objectiveId: context.objectiveId
632
+ });
633
+ }
634
+ }
635
+
636
+ /**
637
+ * Check if a specific dependency is satisfied
638
+ */
639
+ private isDependencySatisfied(context: CoordinationContext, dependencyId: string): boolean {
640
+ // Check if dependency task is completed
641
+ // This would integrate with TodoWrite status
642
+ // For now, check if there's a completed handoff for this dependency
643
+ for (const handoff of context.handoffs.values()) {
644
+ if (handoff.artifactType === dependencyId && handoff.status === 'completed') {
645
+ return true;
646
+ }
647
+ }
648
+ return false;
649
+ }
650
+
651
+ /**
652
+ * Find blocked dependencies
653
+ */
654
+ private findBlockedDependencies(
655
+ context: CoordinationContext,
656
+ blockedTasks: string[]
657
+ ): string[] {
658
+ const blockedDeps: string[] = [];
659
+
660
+ for (const task of blockedTasks) {
661
+ const deps = context.dependencies.get(task) || [];
662
+ blockedDeps.push(...deps);
663
+ }
664
+
665
+ return [...new Set(blockedDeps)]; // Remove duplicates
666
+ }
667
+
668
+ /**
669
+ * Attempt recovery for blocked agent
670
+ */
671
+ private async attemptRecovery(
672
+ context: CoordinationContext,
673
+ blockage: BlockageInfo
674
+ ): Promise<void> {
675
+ // Find appropriate recovery strategy
676
+ const strategy = this.findRecoveryStrategy(blockage.reason);
677
+ if (!strategy) {
678
+ this.emit('recovery:failed', {
679
+ agentId: blockage.agentId,
680
+ reason: 'No recovery strategy available'
681
+ });
682
+ return;
683
+ }
684
+
685
+ // Try recovery actions
686
+ for (const action of strategy.recoveryActions) {
687
+ if (blockage.attemptedResolutions.length >= strategy.maxRetries) {
688
+ break;
689
+ }
690
+
691
+ try {
692
+ await this.executeRecoveryAction(context, blockage, action);
693
+ blockage.attemptedResolutions.push(action.type);
694
+
695
+ // If successful, remove blockage
696
+ context.blockages.delete(blockage.agentId);
697
+
698
+ this.emit('recovery:success', {
699
+ agentId: blockage.agentId,
700
+ action: action.type
701
+ });
702
+
703
+ return;
704
+ } catch (error) {
705
+ blockage.attemptedResolutions.push(`${action.type}_failed`);
706
+ }
707
+ }
708
+
709
+ this.emit('recovery:exhausted', {
710
+ agentId: blockage.agentId,
711
+ attempts: blockage.attemptedResolutions
712
+ });
713
+ }
714
+
715
+ /**
716
+ * Find recovery strategy for error type
717
+ */
718
+ private findRecoveryStrategy(errorReason: string): RecoveryStrategy | undefined {
719
+ // Match error reason to strategy
720
+ for (const [key, strategy] of this.recoveryStrategies) {
721
+ if (errorReason.toLowerCase().includes(key.replace('_', ' '))) {
722
+ return strategy;
723
+ }
724
+ }
725
+ return undefined;
726
+ }
727
+
728
+ /**
729
+ * Execute recovery action
730
+ */
731
+ private async executeRecoveryAction(
732
+ context: CoordinationContext,
733
+ blockage: BlockageInfo,
734
+ action: RecoveryAction
735
+ ): Promise<void> {
736
+ switch (action.type) {
737
+ case 'retry':
738
+ // Wait and retry
739
+ await new Promise(resolve => setTimeout(resolve, action.config.delay || 1000));
740
+ // Agent would retry its task
741
+ break;
742
+
743
+ case 'fallback':
744
+ // Use fallback approach
745
+ await this.sendMessage('coordinator', blockage.agentId, 'coordination', {
746
+ type: 'use_fallback',
747
+ config: action.config
748
+ });
749
+ break;
750
+
751
+ case 'reassign': {
752
+ // Find another agent
753
+ const availableAgent = this.findAvailableAgent(context, action.config.preferredAgentType);
754
+ if (availableAgent) {
755
+ await this.reassignTasks(context, blockage.agentId, availableAgent.id);
756
+ }
757
+ break;
758
+ }
759
+
760
+ case 'escalate':
761
+ // Escalate to Queen
762
+ this.emit('escalation:required', {
763
+ blockage,
764
+ action: action.config
765
+ });
766
+ break;
767
+ }
768
+ }
769
+
770
+ /**
771
+ * Find available agent of specified type
772
+ */
773
+ private findAvailableAgent(
774
+ context: CoordinationContext,
775
+ preferredType: string
776
+ ): Agent | undefined {
777
+ for (const agent of context.agents.values()) {
778
+ if (agent.status === 'idle' &&
779
+ (preferredType === 'any' || agent.type === preferredType)) {
780
+ return agent;
781
+ }
782
+ }
783
+ return undefined;
784
+ }
785
+
786
+ /**
787
+ * Reassign tasks from one agent to another
788
+ */
789
+ private async reassignTasks(
790
+ context: CoordinationContext,
791
+ fromAgentId: string,
792
+ toAgentId: string
793
+ ): Promise<void> {
794
+ // Send reassignment message
795
+ await this.sendMessage('coordinator', toAgentId, 'task_assignment', {
796
+ type: 'reassignment',
797
+ fromAgent: fromAgentId,
798
+ reason: 'agent_blocked'
799
+ });
800
+
801
+ this.emit('tasks:reassigned', {
802
+ fromAgent: fromAgentId,
803
+ toAgent: toAgentId,
804
+ objectiveId: context.objectiveId
805
+ });
806
+ }
807
+
808
+ /**
809
+ * Process pending messages for an agent
810
+ */
811
+ private async processAgentMessages(agentId: string): Promise<void> {
812
+ const messages = await this.getAgentMessages(agentId);
813
+
814
+ for (const message of messages) {
815
+ this.emit('message:delivered', message);
816
+ }
817
+ }
818
+
819
+ /**
820
+ * Evaluate strategy condition
821
+ */
822
+ private evaluateCondition(context: CoordinationContext, condition: string): boolean {
823
+ switch (condition) {
824
+ case 'hasBlockedAgent':
825
+ return context.blockages.size > 0;
826
+
827
+ case 'allDependenciesSatisfied':
828
+ // Check if all dependencies are satisfied
829
+ for (const deps of context.dependencies.values()) {
830
+ if (!deps.every(d => this.isDependencySatisfied(context, d))) {
831
+ return false;
832
+ }
833
+ }
834
+ return true;
835
+
836
+ case 'hasIndependentTasks':
837
+ // Check for tasks with no dependencies
838
+ return Array.from(context.dependencies.values()).some(deps => deps.length === 0);
839
+
840
+ case 'highComplexity':
841
+ // Would need complexity metric
842
+ return context.agents.size > 5;
843
+
844
+ case 'repeatedFailures':
845
+ // Check for multiple blockages
846
+ return context.blockages.size > 2;
847
+
848
+ default:
849
+ return false;
850
+ }
851
+ }
852
+
853
+ /**
854
+ * Execute strategy action
855
+ */
856
+ private async executeAction(context: CoordinationContext, action: string): Promise<void> {
857
+ switch (action) {
858
+ case 'waitForDependencies':
859
+ // Agents would wait for dependencies
860
+ this.emit('action:wait', { objectiveId: context.objectiveId });
861
+ break;
862
+
863
+ case 'proceedToNextTask':
864
+ // Signal agents to proceed
865
+ for (const agent of context.agents.values()) {
866
+ await this.sendMessage('coordinator', agent.id, 'coordination', {
867
+ type: 'proceed'
868
+ });
869
+ }
870
+ break;
871
+
872
+ case 'assignToAvailableAgents': {
873
+ // Distribute tasks to available agents
874
+ const availableAgents = Array.from(context.agents.values())
875
+ .filter(a => a.status === 'idle');
876
+
877
+ // Would assign tasks here
878
+ this.emit('action:assign', {
879
+ objectiveId: context.objectiveId,
880
+ agentCount: availableAgents.length
881
+ });
882
+ break;
883
+ }
884
+
885
+ case 'spawnSpecialistAgent':
886
+ // Request Queen to spawn specialist
887
+ this.emit('action:spawn_specialist', { objectiveId: context.objectiveId });
888
+ break;
889
+
890
+ case 'switchToFallbackApproach':
891
+ // Signal all agents to use fallback
892
+ for (const agent of context.agents.values()) {
893
+ await this.sendMessage('coordinator', agent.id, 'coordination', {
894
+ type: 'use_fallback'
895
+ });
896
+ }
897
+ break;
898
+ }
899
+ }
900
+
901
+ /**
902
+ * Generate unique ID
903
+ */
904
+ private generateId(prefix: string): string {
905
+ return `${prefix}_${Date.now()}_${crypto.randomBytes(4).toString('hex')}`;
906
+ }
907
+
908
+ /**
909
+ * Get coordinator statistics
910
+ */
911
+ async getStats(): Promise<{
912
+ activeContexts: number;
913
+ totalAgents: number;
914
+ activeHandoffs: number;
915
+ blockedAgents: number;
916
+ messagesInQueue: number;
917
+ }> {
918
+ let totalAgents = 0;
919
+ let activeHandoffs = 0;
920
+ let blockedAgents = 0;
921
+ let messagesInQueue = 0;
922
+
923
+ for (const context of this.contexts.values()) {
924
+ totalAgents += context.agents.size;
925
+ activeHandoffs += Array.from(context.handoffs.values())
926
+ .filter(h => h.status === 'pending').length;
927
+ blockedAgents += context.blockages.size;
928
+ }
929
+
930
+ for (const queue of this.messageQueue.values()) {
931
+ messagesInQueue += queue.length;
932
+ }
933
+
934
+ return {
935
+ activeContexts: this.contexts.size,
936
+ totalAgents,
937
+ activeHandoffs,
938
+ blockedAgents,
939
+ messagesInQueue
940
+ };
941
+ }
942
+
943
+ /**
944
+ * Clean up completed contexts
945
+ */
946
+ async cleanup(): Promise<void> {
947
+ const now = Date.now();
948
+ const maxAge = 3600000; // 1 hour
949
+
950
+ for (const [objectiveId, context] of this.contexts) {
951
+ // Check if all agents are terminated and no active handoffs
952
+ const allAgentsIdle = Array.from(context.agents.values())
953
+ .every(a => a.status === 'idle' || a.status === 'completed');
954
+ const noActiveHandoffs = Array.from(context.handoffs.values())
955
+ .every(h => h.status === 'completed' || h.status === 'failed');
956
+
957
+ if (allAgentsIdle && noActiveHandoffs) {
958
+ // Check age of last activity
959
+ const lastActivity = Math.max(
960
+ ...Array.from(context.handoffs.values())
961
+ .map(h => h.completedAt?.getTime() || 0)
962
+ );
963
+
964
+ if (now - lastActivity > maxAge) {
965
+ this.contexts.delete(objectiveId);
966
+ this.emit('context:cleaned', { objectiveId });
967
+ }
968
+ }
969
+ }
970
+ }
971
+ }