agentic-flow 2.0.13 → 2.1.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 (105) hide show
  1. package/CHANGELOG.md +87 -0
  2. package/README.md +376 -186
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/agent-booster/index.d.ts +14 -0
  5. package/dist/agent-booster/index.d.ts.map +1 -0
  6. package/dist/agent-booster/index.js +25 -0
  7. package/dist/agent-booster/index.js.map +1 -0
  8. package/dist/agents/directApiAgent.d.ts.map +1 -1
  9. package/dist/agents/directApiAgent.js +37 -19
  10. package/dist/agents/directApiAgent.js.map +1 -1
  11. package/dist/cli/commands/hooks.d.ts.map +1 -1
  12. package/dist/cli/commands/hooks.js +4 -1
  13. package/dist/cli/commands/hooks.js.map +1 -1
  14. package/dist/cli/mcp-manager.js +13 -6
  15. package/dist/cli/mcp-manager.js.map +1 -1
  16. package/dist/harness/provenance.d.ts +72 -0
  17. package/dist/harness/provenance.d.ts.map +1 -0
  18. package/dist/harness/provenance.js +92 -0
  19. package/dist/harness/provenance.js.map +1 -0
  20. package/dist/intelligence/EmbeddingService.js +3 -3
  21. package/dist/intelligence/EmbeddingService.js.map +1 -1
  22. package/dist/intelligence/agent-booster-enhanced.d.ts.map +1 -1
  23. package/dist/intelligence/agent-booster-enhanced.js +5 -3
  24. package/dist/intelligence/agent-booster-enhanced.js.map +1 -1
  25. package/dist/mcp/claudeFlowSdkServer.d.ts.map +1 -1
  26. package/dist/mcp/claudeFlowSdkServer.js +76 -29
  27. package/dist/mcp/claudeFlowSdkServer.js.map +1 -1
  28. package/dist/mcp/fastmcp/servers/claude-flow-sdk.js +27 -22
  29. package/dist/mcp/fastmcp/servers/claude-flow-sdk.js.map +1 -1
  30. package/dist/mcp/fastmcp/servers/http-sse.js +31 -20
  31. package/dist/mcp/fastmcp/servers/http-sse.js.map +1 -1
  32. package/dist/mcp/fastmcp/servers/http-streaming-updated.js +33 -32
  33. package/dist/mcp/fastmcp/servers/http-streaming-updated.js.map +1 -1
  34. package/dist/mcp/fastmcp/servers/poc-stdio.js +10 -11
  35. package/dist/mcp/fastmcp/servers/poc-stdio.js.map +1 -1
  36. package/dist/mcp/fastmcp/servers/stdio-full.js +33 -32
  37. package/dist/mcp/fastmcp/servers/stdio-full.js.map +1 -1
  38. package/dist/mcp/fastmcp/tools/agent/execute.d.ts.map +1 -1
  39. package/dist/mcp/fastmcp/tools/agent/execute.js +8 -5
  40. package/dist/mcp/fastmcp/tools/agent/execute.js.map +1 -1
  41. package/dist/mcp/fastmcp/tools/agent/list.d.ts.map +1 -1
  42. package/dist/mcp/fastmcp/tools/agent/list.js +4 -2
  43. package/dist/mcp/fastmcp/tools/agent/list.js.map +1 -1
  44. package/dist/mcp/fastmcp/tools/agent/parallel.d.ts.map +1 -1
  45. package/dist/mcp/fastmcp/tools/agent/parallel.js +4 -2
  46. package/dist/mcp/fastmcp/tools/agent/parallel.js.map +1 -1
  47. package/dist/mcp/fastmcp/tools/hooks/pretrain.d.ts.map +1 -1
  48. package/dist/mcp/fastmcp/tools/hooks/pretrain.js +11 -3
  49. package/dist/mcp/fastmcp/tools/hooks/pretrain.js.map +1 -1
  50. package/dist/mcp/fastmcp/tools/swarm/orchestrate.d.ts.map +1 -1
  51. package/dist/mcp/fastmcp/tools/swarm/orchestrate.js +9 -5
  52. package/dist/mcp/fastmcp/tools/swarm/orchestrate.js.map +1 -1
  53. package/dist/mcp/standalone-stdio.js +76 -57
  54. package/dist/mcp/standalone-stdio.js.map +1 -1
  55. package/dist/mcp/tools/harness-tools.d.ts +28 -0
  56. package/dist/mcp/tools/harness-tools.d.ts.map +1 -0
  57. package/dist/mcp/tools/harness-tools.js +90 -0
  58. package/dist/mcp/tools/harness-tools.js.map +1 -0
  59. package/dist/optimizations/configuration-tuning.d.ts +1 -1
  60. package/dist/reasoningbank/utils/embeddings.d.ts +0 -6
  61. package/dist/reasoningbank/utils/embeddings.d.ts.map +1 -1
  62. package/dist/reasoningbank/utils/embeddings.js +9 -43
  63. package/dist/reasoningbank/utils/embeddings.js.map +1 -1
  64. package/dist/repair/cli.d.ts +24 -0
  65. package/dist/repair/cli.d.ts.map +1 -0
  66. package/dist/repair/cli.js +69 -0
  67. package/dist/repair/cli.js.map +1 -0
  68. package/dist/repair/darwin-repair.d.ts +80 -0
  69. package/dist/repair/darwin-repair.d.ts.map +1 -0
  70. package/dist/repair/darwin-repair.js +81 -0
  71. package/dist/repair/darwin-repair.js.map +1 -0
  72. package/dist/router/cost-optimal-router.d.ts +89 -0
  73. package/dist/router/cost-optimal-router.d.ts.map +1 -0
  74. package/dist/router/cost-optimal-router.js +94 -0
  75. package/dist/router/cost-optimal-router.js.map +1 -0
  76. package/dist/router/providers/onnx-local-optimized.d.ts +1 -10
  77. package/dist/router/providers/onnx-local-optimized.d.ts.map +1 -1
  78. package/dist/router/providers/onnx-local-optimized.js +9 -10
  79. package/dist/router/providers/onnx-local-optimized.js.map +1 -1
  80. package/dist/router/providers/onnx-local.d.ts +0 -9
  81. package/dist/router/providers/onnx-local.d.ts.map +1 -1
  82. package/dist/router/providers/onnx-local.js +7 -22
  83. package/dist/router/providers/onnx-local.js.map +1 -1
  84. package/dist/router/router.d.ts +29 -0
  85. package/dist/router/router.d.ts.map +1 -1
  86. package/dist/router/router.js +83 -0
  87. package/dist/router/router.js.map +1 -1
  88. package/dist/router/types.d.ts +1 -1
  89. package/dist/router/types.d.ts.map +1 -1
  90. package/dist/router/types.js.map +1 -1
  91. package/dist/sdk/plugins.d.ts +6 -6
  92. package/dist/sdk/plugins.d.ts.map +1 -1
  93. package/dist/sdk/plugins.js +37 -0
  94. package/dist/sdk/plugins.js.map +1 -1
  95. package/dist/transport/index.d.ts +1 -0
  96. package/dist/transport/index.d.ts.map +1 -1
  97. package/dist/transport/index.js +1 -0
  98. package/dist/transport/index.js.map +1 -1
  99. package/dist/transport/quic-loader.d.ts +250 -0
  100. package/dist/transport/quic-loader.d.ts.map +1 -0
  101. package/dist/transport/quic-loader.js +507 -0
  102. package/dist/transport/quic-loader.js.map +1 -0
  103. package/dist/utils/agentBoosterPreprocessor.js +16 -22
  104. package/dist/utils/agentBoosterPreprocessor.js.map +1 -1
  105. package/package.json +21 -6
@@ -1 +1 @@
1
- {"version":3,"file":"pretrain.js","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/hooks/pretrain.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,WAAW,EAEZ,MAAM,aAAa,CAAC;AAErB,MAAM,CAAC,MAAM,gBAAgB,GAAmB;IAC9C,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,wDAAwD;IACrE,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACnB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACvE,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,0CAA0C,CAAC;QACvG,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QACpF,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QACzF,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;KAClF,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;QACrF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QAEjE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,+BAA+B,EAAE,CAAC,CAAC;QAExE,kCAAkC;QAClC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAC,CAAC;YAExE,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,QAAQ,CAC1B,oIAAoI,EACpI,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,CACnD,CAAC;gBAEF,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAE5D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,KAAK,CAAC,KAAK,EAAE,CAAC;oBACd,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBAC/B,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;oBAEpC,4BAA4B;oBAC5B,MAAM,KAAK,GAAG,QAAQ,GAAG,IAAI,SAAS,EAAE,CAAC;oBACzC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC3B,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;oBAC7B,CAAC;oBACD,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;oBACzE,KAAK,CAAC,QAAQ,EAAE,CAAC;oBAEjB,2BAA2B;oBAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBAC/B,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAChC,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;wBACnD,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;oBACzC,CAAC;gBACH,CAAC;gBAED,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,CAAC,KAAK,QAAQ,CAAC,CAAC;gBAC1D,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,iCAAiC;YACnC,CAAC;QACH,CAAC;QAED,oDAAoD;QACpD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC,CAAC;YAErE,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,QAAQ,CACrB,sDAAsD,KAAK,cAAc,EACzE,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,CACnD,CAAC;gBAEF,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC9D,MAAM,SAAS,GAA2B,EAAE,CAAC;gBAE7C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;oBAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;oBACrF,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;oBAE1C,iBAAiB;oBACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBACtC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;4BAC1C,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;4BAClD,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;wBAC7C,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,gCAAgC;gBAChC,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;qBAC7C,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC;qBACjC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAE/B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;oBACxD,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACtC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC5B,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;oBAC9B,CAAC;oBAED,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;oBACpE,IAAI,QAAQ,EAAE,CAAC;wBACb,QAAQ,CAAC,KAAK,IAAI,KAAK,CAAC;oBAC1B,CAAC;yBAAM,CAAC;wBACN,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;oBAC7D,CAAC;oBACD,KAAK,CAAC,OAAO,EAAE,CAAC;gBAClB,CAAC;gBAED,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,GAAG,CAAC,oBAAoB,cAAc,CAAC,MAAM,mBAAmB,CAAC,CAAC;gBAC5E,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,gCAAgC;YAClC,CAAC;QACH,CAAC;QAED,gDAAgD;QAChD,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,qCAAqC,EAAE,CAAC,CAAC;QAEhF,MAAM,cAAc,GAAG;YACrB,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY;YACtD,gBAAgB,EAAE,QAAQ,EAAE,uBAAuB,EAAE,eAAe;SACrE,CAAC;QAEF,KAAK,MAAM,QAAQ,IAAI,cAAc,EAAE,CAAC;YACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;YACpD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5B,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;oBAClE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;wBAClB,OAAO,EAAE,IAAI,QAAQ,KAAK,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;wBACrE,IAAI,EAAE,SAAS;wBACf,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;wBACjC,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC;qBAChC,CAAC,CAAC;oBACH,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACnB,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,wBAAwB;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;QAED,0CAA0C;QAC1C,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,gCAAgC,EAAE,CAAC,CAAC;QAE5E,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,QAAQ,CACnB,sGAAsG,EACtG,EAAE,QAAQ,EAAE,OAAO,EAAE,CACtB,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAErB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAChC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;qBACvE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC;qBACpG,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,0BAA0B,CAAC;qBAClG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAC;qBAClF,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,oBAAoB,CAAC;qBACnG,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,mBAAmB,CAAC;qBAC/F,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,qBAAqB,CAAC;YAC5G,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,sCAAsC;QACxC,CAAC;QAED,yBAAyB;QACzB,KAAK,CAAC,UAAU,GAAG;YACjB,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC9B,KAAK;SACN,CAAC;QAEF,oBAAoB;QACpB,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAExB,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,CAAC;QAE/D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAEvC,OAAO;YACL,OAAO,EAAE,IAAI;YACb,aAAa,EAAE,KAAK,CAAC,KAAK;YAC1B,eAAe,EAAE,KAAK,CAAC,QAAQ;YAC/B,cAAc,EAAE,KAAK,CAAC,QAAQ;YAC9B,YAAY,EAAE,KAAK,CAAC,OAAO;YAC3B,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,MAAM;YACxD,SAAS,EAAE,OAAO;YAClB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;IACJ,CAAC;CACF,CAAC","sourcesContent":["/**\n * Pretrain Hook - Analyze repository and bootstrap intelligence\n * Swarm-distributed when available, falls back to sequential\n */\n\nimport { z } from 'zod';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport { execSync } from 'child_process';\nimport type { ToolDefinition } from '../../types/index.js';\nimport {\n loadIntelligence,\n saveIntelligence,\n getAgentForFile,\n simpleEmbed,\n agentMapping\n} from './shared.js';\n\nexport const hookPretrainTool: ToolDefinition = {\n name: 'hook_pretrain',\n description: 'Analyze repository with swarm for intelligent patterns',\n parameters: z.object({\n depth: z.number().optional().default(100).describe('Git history depth'),\n incremental: z.boolean().optional().default(false).describe('Only analyze changes since last pretrain'),\n skipGit: z.boolean().optional().default(false).describe('Skip git history analysis'),\n skipFiles: z.boolean().optional().default(false).describe('Skip file structure analysis'),\n verbose: z.boolean().optional().default(false).describe('Show detailed progress')\n }),\n execute: async ({ depth, incremental, skipGit, skipFiles, verbose }, { onProgress }) => {\n const startTime = Date.now();\n const intel = loadIntelligence();\n const stats = { files: 0, patterns: 0, memories: 0, coedits: 0 };\n\n onProgress?.({ progress: 0, message: 'Starting pretrain analysis...' });\n\n // Phase 1: Analyze file structure\n if (!skipFiles) {\n onProgress?.({ progress: 0.1, message: 'Analyzing file structure...' });\n\n try {\n const filesOutput = execSync(\n 'git ls-files 2>/dev/null || find . -type f -not -path \"./.git/*\" -not -path \"./node_modules/*\" -not -path \"./target/*\" 2>/dev/null',\n { encoding: 'utf-8', maxBuffer: 50 * 1024 * 1024 }\n );\n\n const files = filesOutput.trim().split('\\n').filter(f => f);\n\n for (const file of files) {\n stats.files++;\n const ext = path.extname(file);\n const agent = getAgentForFile(file);\n\n // Create Q-learning pattern\n const state = `edit:${ext || 'unknown'}`;\n if (!intel.patterns[state]) {\n intel.patterns[state] = {};\n }\n intel.patterns[state][agent] = (intel.patterns[state][agent] || 0) + 0.3;\n stats.patterns++;\n\n // Track directory patterns\n const dir = path.dirname(file);\n const dirParts = dir.split('/');\n if (dirParts[0] && !intel.dirPatterns[dirParts[0]]) {\n intel.dirPatterns[dirParts[0]] = agent;\n }\n }\n\n if (verbose) {\n console.log(`[Pretrain] Analyzed ${stats.files} files`);\n }\n } catch (e) {\n // Continue without file analysis\n }\n }\n\n // Phase 2: Analyze git history for co-edit patterns\n if (!skipGit) {\n onProgress?.({ progress: 0.4, message: 'Analyzing git history...' });\n\n try {\n const gitLog = execSync(\n `git log --name-only --pretty=format:\"COMMIT:%H\" -n ${depth} 2>/dev/null`,\n { encoding: 'utf-8', maxBuffer: 50 * 1024 * 1024 }\n );\n\n const commits = gitLog.split('COMMIT:').filter(c => c.trim());\n const coEditMap: Record<string, number> = {};\n\n for (const commit of commits) {\n const lines = commit.trim().split('\\n').filter(l => l && !l.match(/^[a-f0-9]{40}$/));\n const files = lines.filter(f => f.trim());\n\n // Track co-edits\n for (let i = 0; i < files.length; i++) {\n for (let j = i + 1; j < files.length; j++) {\n const key = [files[i], files[j]].sort().join('|');\n coEditMap[key] = (coEditMap[key] || 0) + 1;\n }\n }\n }\n\n // Store strong co-edit patterns\n const strongPatterns = Object.entries(coEditMap)\n .filter(([, count]) => count >= 3)\n .sort((a, b) => b[1] - a[1]);\n\n for (const [key, count] of strongPatterns.slice(0, 100)) {\n const [file1, file2] = key.split('|');\n if (!intel.sequences[file1]) {\n intel.sequences[file1] = [];\n }\n\n const existing = intel.sequences[file1].find(s => s.file === file2);\n if (existing) {\n existing.score += count;\n } else {\n intel.sequences[file1].push({ file: file2, score: count });\n }\n stats.coedits++;\n }\n\n if (verbose) {\n console.log(`[Pretrain] Found ${strongPatterns.length} co-edit patterns`);\n }\n } catch (e) {\n // Continue without git analysis\n }\n }\n\n // Phase 3: Create memories from important files\n onProgress?.({ progress: 0.7, message: 'Creating memories from key files...' });\n\n const importantFiles = [\n 'README.md', 'CLAUDE.md', 'package.json', 'Cargo.toml',\n 'pyproject.toml', 'go.mod', '.claude/settings.json', 'tsconfig.json'\n ];\n\n for (const filename of importantFiles) {\n const filePath = path.join(process.cwd(), filename);\n if (fs.existsSync(filePath)) {\n try {\n const content = fs.readFileSync(filePath, 'utf-8').slice(0, 2000);\n intel.memories.push({\n content: `[${filename}] ${content.replace(/\\n/g, ' ').slice(0, 500)}`,\n type: 'project',\n created: new Date().toISOString(),\n embedding: simpleEmbed(content)\n });\n stats.memories++;\n } catch (e) {\n // Skip unreadable files\n }\n }\n }\n\n // Phase 4: Build directory-agent mappings\n onProgress?.({ progress: 0.85, message: 'Building directory mappings...' });\n\n try {\n const dirs = execSync(\n 'find . -type d -maxdepth 2 -not -path \"./.git*\" -not -path \"./node_modules*\" 2>/dev/null || echo \".\"',\n { encoding: 'utf-8' }\n ).trim().split('\\n');\n\n for (const dir of dirs) {\n const name = path.basename(dir);\n if (['src', 'lib', 'core'].includes(name)) intel.dirPatterns[dir] = 'coder';\n else if (['test', 'tests', '__tests__', 'spec'].includes(name)) intel.dirPatterns[dir] = 'test-engineer';\n else if (['docs', 'documentation'].includes(name)) intel.dirPatterns[dir] = 'documentation-specialist';\n else if (['scripts', 'bin'].includes(name)) intel.dirPatterns[dir] = 'devops-engineer';\n else if (['components', 'views', 'pages'].includes(name)) intel.dirPatterns[dir] = 'frontend-developer';\n else if (['api', 'routes', 'handlers'].includes(name)) intel.dirPatterns[dir] = 'backend-developer';\n else if (['models', 'entities', 'schemas'].includes(name)) intel.dirPatterns[dir] = 'database-specialist';\n }\n } catch (e) {\n // Continue without directory analysis\n }\n\n // Save pretrain metadata\n intel.pretrained = {\n date: new Date().toISOString(),\n stats\n };\n\n // Save intelligence\n saveIntelligence(intel);\n\n onProgress?.({ progress: 1.0, message: 'Pretrain complete!' });\n\n const latency = Date.now() - startTime;\n\n return {\n success: true,\n filesAnalyzed: stats.files,\n patternsCreated: stats.patterns,\n memoriesStored: stats.memories,\n coEditsFound: stats.coedits,\n directoryMappings: Object.keys(intel.dirPatterns).length,\n latencyMs: latency,\n timestamp: new Date().toISOString()\n };\n }\n};\n"]}
1
+ {"version":3,"file":"pretrain.js","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/hooks/pretrain.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Pretrain Hook - Analyze repository and bootstrap intelligence\n * Swarm-distributed when available, falls back to sequential\n */\n\nimport { z } from 'zod';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport { execSync, execFileSync } from 'child_process';\nimport type { ToolDefinition } from '../../types/index.js';\nimport {\n loadIntelligence,\n saveIntelligence,\n getAgentForFile,\n simpleEmbed\n} from './shared.js';\n\nexport const hookPretrainTool: ToolDefinition = {\n name: 'hook_pretrain',\n description: 'Analyze repository with swarm for intelligent patterns',\n parameters: z.object({\n depth: z.number().optional().default(100).describe('Git history depth'),\n incremental: z.boolean().optional().default(false).describe('Only analyze changes since last pretrain'),\n skipGit: z.boolean().optional().default(false).describe('Skip git history analysis'),\n skipFiles: z.boolean().optional().default(false).describe('Skip file structure analysis'),\n verbose: z.boolean().optional().default(false).describe('Show detailed progress')\n }),\n execute: async ({ depth, incremental: _incremental, skipGit, skipFiles, verbose }, { onProgress }) => {\n const startTime = Date.now();\n const intel = loadIntelligence();\n const stats = { files: 0, patterns: 0, memories: 0, coedits: 0 };\n\n onProgress?.({ progress: 0, message: 'Starting pretrain analysis...' });\n\n // Phase 1: Analyze file structure\n if (!skipFiles) {\n onProgress?.({ progress: 0.1, message: 'Analyzing file structure...' });\n\n try {\n // Static command, no user input — shell is required for the `||` fallback\n // and `2>/dev/null` redirection. NOT a CWE-78 sink.\n const filesOutput = execSync(\n 'git ls-files 2>/dev/null || find . -type f -not -path \"./.git/*\" -not -path \"./node_modules/*\" -not -path \"./target/*\" 2>/dev/null',\n { encoding: 'utf-8', maxBuffer: 50 * 1024 * 1024 }\n );\n\n const files = filesOutput.trim().split('\\n').filter(f => f);\n\n for (const file of files) {\n stats.files++;\n const ext = path.extname(file);\n const agent = getAgentForFile(file);\n\n // Create Q-learning pattern\n const state = `edit:${ext || 'unknown'}`;\n if (!intel.patterns[state]) {\n intel.patterns[state] = {};\n }\n intel.patterns[state][agent] = (intel.patterns[state][agent] || 0) + 0.3;\n stats.patterns++;\n\n // Track directory patterns\n const dir = path.dirname(file);\n const dirParts = dir.split('/');\n if (dirParts[0] && !intel.dirPatterns[dirParts[0]]) {\n intel.dirPatterns[dirParts[0]] = agent;\n }\n }\n\n if (verbose) {\n console.log(`[Pretrain] Analyzed ${stats.files} files`);\n }\n } catch (e) {\n // Continue without file analysis\n }\n }\n\n // Phase 2: Analyze git history for co-edit patterns\n if (!skipGit) {\n onProgress?.({ progress: 0.4, message: 'Analyzing git history...' });\n\n try {\n // Security (CWE-78): depth is z.number() validated, but use execFileSync\n // with argv to hard-prevent any future schema relaxation from becoming\n // an injection sink. Coerce to a positive integer explicitly.\n const safeDepth = Math.max(1, Math.floor(Number(depth) || 100));\n const gitLog = execFileSync(\n 'git',\n ['log', '--name-only', '--pretty=format:COMMIT:%H', '-n', String(safeDepth)],\n { shell: false, encoding: 'utf-8', maxBuffer: 50 * 1024 * 1024, stdio: ['pipe', 'pipe', 'ignore'] }\n );\n\n const commits = gitLog.split('COMMIT:').filter(c => c.trim());\n const coEditMap: Record<string, number> = {};\n\n for (const commit of commits) {\n const lines = commit.trim().split('\\n').filter(l => l && !l.match(/^[a-f0-9]{40}$/));\n const files = lines.filter(f => f.trim());\n\n // Track co-edits\n for (let i = 0; i < files.length; i++) {\n for (let j = i + 1; j < files.length; j++) {\n const key = [files[i], files[j]].sort().join('|');\n coEditMap[key] = (coEditMap[key] || 0) + 1;\n }\n }\n }\n\n // Store strong co-edit patterns\n const strongPatterns = Object.entries(coEditMap)\n .filter(([, count]) => count >= 3)\n .sort((a, b) => b[1] - a[1]);\n\n for (const [key, count] of strongPatterns.slice(0, 100)) {\n const [file1, file2] = key.split('|');\n if (!intel.sequences[file1]) {\n intel.sequences[file1] = [];\n }\n\n const existing = intel.sequences[file1].find(s => s.file === file2);\n if (existing) {\n existing.score += count;\n } else {\n intel.sequences[file1].push({ file: file2, score: count });\n }\n stats.coedits++;\n }\n\n if (verbose) {\n console.log(`[Pretrain] Found ${strongPatterns.length} co-edit patterns`);\n }\n } catch (e) {\n // Continue without git analysis\n }\n }\n\n // Phase 3: Create memories from important files\n onProgress?.({ progress: 0.7, message: 'Creating memories from key files...' });\n\n const importantFiles = [\n 'README.md', 'CLAUDE.md', 'package.json', 'Cargo.toml',\n 'pyproject.toml', 'go.mod', '.claude/settings.json', 'tsconfig.json'\n ];\n\n for (const filename of importantFiles) {\n const filePath = path.join(process.cwd(), filename);\n if (fs.existsSync(filePath)) {\n try {\n const content = fs.readFileSync(filePath, 'utf-8').slice(0, 2000);\n intel.memories.push({\n content: `[${filename}] ${content.replace(/\\n/g, ' ').slice(0, 500)}`,\n type: 'project',\n created: new Date().toISOString(),\n embedding: simpleEmbed(content)\n });\n stats.memories++;\n } catch (e) {\n // Skip unreadable files\n }\n }\n }\n\n // Phase 4: Build directory-agent mappings\n onProgress?.({ progress: 0.85, message: 'Building directory mappings...' });\n\n try {\n // Static command, no user input — shell required for `2>/dev/null || echo`.\n // NOT a CWE-78 sink.\n const dirs = execSync(\n 'find . -type d -maxdepth 2 -not -path \"./.git*\" -not -path \"./node_modules*\" 2>/dev/null || echo \".\"',\n { encoding: 'utf-8' }\n ).trim().split('\\n');\n\n for (const dir of dirs) {\n const name = path.basename(dir);\n if (['src', 'lib', 'core'].includes(name)) intel.dirPatterns[dir] = 'coder';\n else if (['test', 'tests', '__tests__', 'spec'].includes(name)) intel.dirPatterns[dir] = 'test-engineer';\n else if (['docs', 'documentation'].includes(name)) intel.dirPatterns[dir] = 'documentation-specialist';\n else if (['scripts', 'bin'].includes(name)) intel.dirPatterns[dir] = 'devops-engineer';\n else if (['components', 'views', 'pages'].includes(name)) intel.dirPatterns[dir] = 'frontend-developer';\n else if (['api', 'routes', 'handlers'].includes(name)) intel.dirPatterns[dir] = 'backend-developer';\n else if (['models', 'entities', 'schemas'].includes(name)) intel.dirPatterns[dir] = 'database-specialist';\n }\n } catch (e) {\n // Continue without directory analysis\n }\n\n // Save pretrain metadata\n intel.pretrained = {\n date: new Date().toISOString(),\n stats\n };\n\n // Save intelligence\n saveIntelligence(intel);\n\n onProgress?.({ progress: 1.0, message: 'Pretrain complete!' });\n\n const latency = Date.now() - startTime;\n\n return {\n success: true,\n filesAnalyzed: stats.files,\n patternsCreated: stats.patterns,\n memoriesStored: stats.memories,\n coEditsFound: stats.coedits,\n directoryMappings: Object.keys(intel.dirPatterns).length,\n latencyMs: latency,\n timestamp: new Date().toISOString()\n };\n }\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrate.d.ts","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/swarm/orchestrate.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,eAAO,MAAM,mBAAmB,EAAE,cA4CjC,CAAC"}
1
+ {"version":3,"file":"orchestrate.d.ts","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/swarm/orchestrate.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,eAAO,MAAM,mBAAmB,EAAE,cA8CjC,CAAC"}
@@ -1,6 +1,7 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any -- pre-existing catch(error: any) handlers; outside scope of CWE-78 fix */
1
2
  // Task orchestration tool implementation using FastMCP
2
3
  import { z } from 'zod';
3
- import { execSync } from 'child_process';
4
+ import { execFileSync } from 'child_process';
4
5
  export const taskOrchestrateTool = {
5
6
  name: 'task_orchestrate',
6
7
  description: 'Orchestrate a complex task across the swarm',
@@ -21,11 +22,14 @@ export const taskOrchestrateTool = {
21
22
  .optional()
22
23
  .describe('Maximum agents to use for this task')
23
24
  }),
24
- execute: async ({ task, strategy, priority, maxAgents }, { onProgress, auth }) => {
25
+ execute: async ({ task, strategy, priority, maxAgents }, { onProgress: _onProgress, auth }) => {
25
26
  try {
26
- const maxStr = maxAgents ? ` --max-agents ${maxAgents}` : '';
27
- const cmd = `npx claude-flow@alpha task orchestrate "${task}" --strategy ${strategy} --priority ${priority}${maxStr}`;
28
- const result = execSync(cmd, {
27
+ // Security (CWE-78): use execFileSync with argv array; `task` is attacker-influenceable.
28
+ const args = ['claude-flow@alpha', 'task', 'orchestrate', task, '--strategy', strategy, '--priority', priority];
29
+ if (maxAgents)
30
+ args.push('--max-agents', String(maxAgents));
31
+ const result = execFileSync('npx', args, {
32
+ shell: false,
29
33
  encoding: 'utf-8',
30
34
  maxBuffer: 10 * 1024 * 1024
31
35
  });
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrate.js","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/swarm/orchestrate.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,MAAM,CAAC,MAAM,mBAAmB,GAAmB;IACjD,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,6CAA6C;IAC1D,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;aACb,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,CAAC,kCAAkC,CAAC;QAC/C,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;aACrD,QAAQ,EAAE;aACV,OAAO,CAAC,UAAU,CAAC;aACnB,QAAQ,CAAC,oBAAoB,CAAC;QACjC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;aACpD,QAAQ,EAAE;aACV,OAAO,CAAC,QAAQ,CAAC;aACjB,QAAQ,CAAC,eAAe,CAAC;QAC5B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;aAClB,QAAQ,EAAE;aACV,QAAQ,EAAE;aACV,QAAQ,CAAC,qCAAqC,CAAC;KACnD,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE;QAC/E,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,iBAAiB,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,MAAM,GAAG,GAAG,2CAA2C,IAAI,gBAAgB,QAAQ,eAAe,QAAQ,GAAG,MAAM,EAAE,CAAC;YAEtH,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE;gBAC3B,QAAQ,EAAE,OAAO;gBACjB,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;aAC5B,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI;gBACJ,QAAQ;gBACR,QAAQ;gBACR,SAAS;gBACT,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE;gBACrB,MAAM,EAAE,IAAI,EAAE,MAAM;gBACpB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,+BAA+B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;CACF,CAAC","sourcesContent":["// Task orchestration tool implementation using FastMCP\nimport { z } from 'zod';\nimport { execSync } from 'child_process';\nimport type { ToolDefinition } from '../../types/index.js';\n\nexport const taskOrchestrateTool: ToolDefinition = {\n name: 'task_orchestrate',\n description: 'Orchestrate a complex task across the swarm',\n parameters: z.object({\n task: z.string()\n .min(1)\n .describe('Task description or instructions'),\n strategy: z.enum(['parallel', 'sequential', 'adaptive'])\n .optional()\n .default('adaptive')\n .describe('Execution strategy'),\n priority: z.enum(['low', 'medium', 'high', 'critical'])\n .optional()\n .default('medium')\n .describe('Task priority'),\n maxAgents: z.number()\n .positive()\n .optional()\n .describe('Maximum agents to use for this task')\n }),\n execute: async ({ task, strategy, priority, maxAgents }, { onProgress, auth }) => {\n try {\n const maxStr = maxAgents ? ` --max-agents ${maxAgents}` : '';\n const cmd = `npx claude-flow@alpha task orchestrate \"${task}\" --strategy ${strategy} --priority ${priority}${maxStr}`;\n\n const result = execSync(cmd, {\n encoding: 'utf-8',\n maxBuffer: 10 * 1024 * 1024\n });\n\n return {\n success: true,\n task,\n strategy,\n priority,\n maxAgents,\n result: result.trim(),\n userId: auth?.userId,\n timestamp: new Date().toISOString()\n };\n } catch (error: any) {\n throw new Error(`Failed to orchestrate task: ${error.message}`);\n }\n }\n};\n"]}
1
+ {"version":3,"file":"orchestrate.js","sourceRoot":"","sources":["../../../../../src/mcp/fastmcp/tools/swarm/orchestrate.ts"],"names":[],"mappings":"AAAA,+HAA+H;AAC/H,uDAAuD;AACvD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,MAAM,CAAC,MAAM,mBAAmB,GAAmB;IACjD,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,6CAA6C;IAC1D,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;aACb,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,CAAC,kCAAkC,CAAC;QAC/C,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;aACrD,QAAQ,EAAE;aACV,OAAO,CAAC,UAAU,CAAC;aACnB,QAAQ,CAAC,oBAAoB,CAAC;QACjC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;aACpD,QAAQ,EAAE;aACV,OAAO,CAAC,QAAQ,CAAC;aACjB,QAAQ,CAAC,eAAe,CAAC;QAC5B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;aAClB,QAAQ,EAAE;aACV,QAAQ,EAAE;aACV,QAAQ,CAAC,qCAAqC,CAAC;KACnD,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE;QAC5F,IAAI,CAAC;YACH,yFAAyF;YACzF,MAAM,IAAI,GAAa,CAAC,mBAAmB,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;YAC1H,IAAI,SAAS;gBAAE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;YAE5D,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE;gBACvC,KAAK,EAAE,KAAK;gBACZ,QAAQ,EAAE,OAAO;gBACjB,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;aAC5B,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI;gBACJ,QAAQ;gBACR,QAAQ;gBACR,SAAS;gBACT,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE;gBACrB,MAAM,EAAE,IAAI,EAAE,MAAM;gBACpB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,+BAA+B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;CACF,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any -- pre-existing catch(error: any) handlers; outside scope of CWE-78 fix */\n// Task orchestration tool implementation using FastMCP\nimport { z } from 'zod';\nimport { execFileSync } from 'child_process';\nimport type { ToolDefinition } from '../../types/index.js';\n\nexport const taskOrchestrateTool: ToolDefinition = {\n name: 'task_orchestrate',\n description: 'Orchestrate a complex task across the swarm',\n parameters: z.object({\n task: z.string()\n .min(1)\n .describe('Task description or instructions'),\n strategy: z.enum(['parallel', 'sequential', 'adaptive'])\n .optional()\n .default('adaptive')\n .describe('Execution strategy'),\n priority: z.enum(['low', 'medium', 'high', 'critical'])\n .optional()\n .default('medium')\n .describe('Task priority'),\n maxAgents: z.number()\n .positive()\n .optional()\n .describe('Maximum agents to use for this task')\n }),\n execute: async ({ task, strategy, priority, maxAgents }, { onProgress: _onProgress, auth }) => {\n try {\n // Security (CWE-78): use execFileSync with argv array; `task` is attacker-influenceable.\n const args: string[] = ['claude-flow@alpha', 'task', 'orchestrate', task, '--strategy', strategy, '--priority', priority];\n if (maxAgents) args.push('--max-agents', String(maxAgents));\n\n const result = execFileSync('npx', args, {\n shell: false,\n encoding: 'utf-8',\n maxBuffer: 10 * 1024 * 1024\n });\n\n return {\n success: true,\n task,\n strategy,\n priority,\n maxAgents,\n result: result.trim(),\n userId: auth?.userId,\n timestamp: new Date().toISOString()\n };\n } catch (error: any) {\n throw new Error(`Failed to orchestrate task: ${error.message}`);\n }\n }\n};\n"]}
@@ -1,8 +1,15 @@
1
1
  #!/usr/bin/env node
2
+ /* eslint-disable @typescript-eslint/no-explicit-any -- pre-existing catch(error: any) handlers; outside scope of CWE-78 fix */
2
3
  // Standalone agentic-flow MCP server - runs directly via stdio without spawning subprocesses
3
4
  import { FastMCP } from 'fastmcp';
4
5
  import { z } from 'zod';
5
- import { execSync } from 'child_process';
6
+ import { execFileSync } from 'child_process';
7
+ import { registerHarnessTools } from './tools/harness-tools.js';
8
+ // Security: All shell-outs use execFileSync with argv arrays (shell: false) to
9
+ // prevent OS command injection via tool parameters (CWE-78). Do NOT reintroduce
10
+ // execSync with template-string interpolation here — every prior occurrence in
11
+ // this file was an injection sink reachable through MCP tool arguments.
12
+ const NPX_EXEC_OPTS = { shell: false };
6
13
  // Suppress FastMCP internal warnings for cleaner output
7
14
  const originalConsoleWarn = console.warn;
8
15
  console.warn = (...args) => {
@@ -21,6 +28,9 @@ const server = new FastMCP({
21
28
  name: 'agentic-flow',
22
29
  version: '1.0.8'
23
30
  });
31
+ // ADR-075: harness evolution/repair + provenance tools (harness_repair,
32
+ // harness_manifest, harness_verify).
33
+ registerHarnessTools(server);
24
34
  // Tool: Run agentic-flow agent
25
35
  server.addTool({
26
36
  name: 'agentic_flow_agent',
@@ -49,13 +59,14 @@ server.addTool({
49
59
  }),
50
60
  execute: async ({ agent, task, model, provider, anthropicApiKey, openrouterApiKey, stream, temperature, maxTokens, agentsDir, outputFormat, verbose, timeout, retryOnError }) => {
51
61
  try {
52
- // Build command with all parameters
53
- let cmd = `npx --yes agentic-flow --agent "${agent}" --task "${task}"`;
62
+ // Build argv (NOT a shell string) — every user-supplied value stays a
63
+ // separate argv element and cannot be reinterpreted by the shell.
64
+ const args = ['--yes', 'agentic-flow', '--agent', agent, '--task', task];
54
65
  // Provider & Model
55
66
  if (model)
56
- cmd += ` --model "${model}"`;
67
+ args.push('--model', model);
57
68
  if (provider)
58
- cmd += ` --provider ${provider}`;
69
+ args.push('--provider', provider);
59
70
  // API Keys (set as env vars)
60
71
  const env = { ...process.env };
61
72
  if (anthropicApiKey)
@@ -64,23 +75,24 @@ server.addTool({
64
75
  env.OPENROUTER_API_KEY = openrouterApiKey;
65
76
  // Agent Behavior
66
77
  if (stream)
67
- cmd += ' --stream';
78
+ args.push('--stream');
68
79
  if (temperature !== undefined)
69
- cmd += ` --temperature ${temperature}`;
80
+ args.push('--temperature', String(temperature));
70
81
  if (maxTokens)
71
- cmd += ` --max-tokens ${maxTokens}`;
82
+ args.push('--max-tokens', String(maxTokens));
72
83
  // Directories
73
84
  if (agentsDir)
74
- cmd += ` --agents-dir "${agentsDir}"`;
85
+ args.push('--agents-dir', agentsDir);
75
86
  // Output
76
87
  if (outputFormat)
77
- cmd += ` --output ${outputFormat}`;
88
+ args.push('--output', outputFormat);
78
89
  if (verbose)
79
- cmd += ' --verbose';
90
+ args.push('--verbose');
80
91
  // Execution
81
92
  if (retryOnError)
82
- cmd += ' --retry';
83
- const result = execSync(cmd, {
93
+ args.push('--retry');
94
+ const result = execFileSync('npx', args, {
95
+ ...NPX_EXEC_OPTS,
84
96
  encoding: 'utf-8',
85
97
  maxBuffer: 10 * 1024 * 1024,
86
98
  timeout: timeout || 300000,
@@ -107,9 +119,8 @@ server.addTool({
107
119
  parameters: z.object({}),
108
120
  execute: async () => {
109
121
  try {
110
- // Use npx to run agentic-flow from npm registry
111
- const cmd = `npx --yes agentic-flow --list`;
112
- const result = execSync(cmd, {
122
+ const result = execFileSync('npx', ['--yes', 'agentic-flow', '--list'], {
123
+ ...NPX_EXEC_OPTS,
113
124
  encoding: 'utf-8',
114
125
  maxBuffer: 5 * 1024 * 1024,
115
126
  timeout: 30000
@@ -137,12 +148,18 @@ server.addTool({
137
148
  }),
138
149
  execute: async ({ name, description, systemPrompt, category, tools }) => {
139
150
  try {
140
- let cmd = `npx --yes agentic-flow agent create --name "${name}" --description "${description}" --prompt "${systemPrompt}"`;
151
+ const args = [
152
+ '--yes', 'agentic-flow', 'agent', 'create',
153
+ '--name', name,
154
+ '--description', description,
155
+ '--prompt', systemPrompt
156
+ ];
141
157
  if (category && category !== 'custom')
142
- cmd += ` --category "${category}"`;
158
+ args.push('--category', category);
143
159
  if (tools && tools.length > 0)
144
- cmd += ` --tools "${tools.join(',')}"`;
145
- const result = execSync(cmd, {
160
+ args.push('--tools', tools.join(','));
161
+ const result = execFileSync('npx', args, {
162
+ ...NPX_EXEC_OPTS,
146
163
  encoding: 'utf-8',
147
164
  maxBuffer: 10 * 1024 * 1024,
148
165
  timeout: 60000,
@@ -171,8 +188,8 @@ server.addTool({
171
188
  }),
172
189
  execute: async ({ format, filterSource }) => {
173
190
  try {
174
- const cmd = `npx --yes agentic-flow agent list ${format || 'summary'}`;
175
- const result = execSync(cmd, {
191
+ const result = execFileSync('npx', ['--yes', 'agentic-flow', 'agent', 'list', format || 'summary'], {
192
+ ...NPX_EXEC_OPTS,
176
193
  encoding: 'utf-8',
177
194
  maxBuffer: 10 * 1024 * 1024,
178
195
  timeout: 30000
@@ -209,8 +226,8 @@ server.addTool({
209
226
  }),
210
227
  execute: async ({ name }) => {
211
228
  try {
212
- const cmd = `npx --yes agentic-flow agent info "${name}"`;
213
- const result = execSync(cmd, {
229
+ const result = execFileSync('npx', ['--yes', 'agentic-flow', 'agent', 'info', name], {
230
+ ...NPX_EXEC_OPTS,
214
231
  encoding: 'utf-8',
215
232
  maxBuffer: 10 * 1024 * 1024,
216
233
  timeout: 30000
@@ -233,8 +250,8 @@ server.addTool({
233
250
  parameters: z.object({}),
234
251
  execute: async () => {
235
252
  try {
236
- const cmd = `npx --yes agentic-flow agent conflicts`;
237
- const result = execSync(cmd, {
253
+ const result = execFileSync('npx', ['--yes', 'agentic-flow', 'agent', 'conflicts'], {
254
+ ...NPX_EXEC_OPTS,
238
255
  encoding: 'utf-8',
239
256
  maxBuffer: 10 * 1024 * 1024,
240
257
  timeout: 30000
@@ -261,16 +278,17 @@ server.addTool({
261
278
  }),
262
279
  execute: async ({ agent, task, priority, max_cost }) => {
263
280
  try {
264
- let cmd = `npx --yes agentic-flow --agent "${agent}" --task "${task}" --optimize`;
281
+ const args = ['--yes', 'agentic-flow', '--agent', agent, '--task', task, '--optimize'];
265
282
  if (priority && priority !== 'balanced') {
266
- cmd += ` --priority ${priority}`;
283
+ args.push('--priority', priority);
267
284
  }
268
285
  if (max_cost) {
269
- cmd += ` --max-cost ${max_cost}`;
286
+ args.push('--max-cost', String(max_cost));
270
287
  }
271
288
  // Add dry-run to just get recommendation without execution
272
- cmd += ' --help'; // This will show the optimization without running
273
- const result = execSync(cmd, {
289
+ args.push('--help'); // This will show the optimization without running
290
+ execFileSync('npx', args, {
291
+ ...NPX_EXEC_OPTS,
274
292
  encoding: 'utf-8',
275
293
  maxBuffer: 10 * 1024 * 1024,
276
294
  timeout: 10000
@@ -323,8 +341,8 @@ server.addTool({
323
341
  language = langMap[ext] || 'javascript';
324
342
  }
325
343
  // Apply edit using agent-booster@0.2.2 CLI (automatically installs from npm if not available)
326
- const cmd = `npx --yes agent-booster@0.2.2 apply --language ${language}`;
327
- const result = execSync(cmd, {
344
+ const result = execFileSync('npx', ['--yes', 'agent-booster@0.2.2', 'apply', '--language', language], {
345
+ ...NPX_EXEC_OPTS,
328
346
  encoding: 'utf-8',
329
347
  input: JSON.stringify({ code: originalCode, edit: code_edit }),
330
348
  maxBuffer: 10 * 1024 * 1024,
@@ -404,8 +422,8 @@ server.addTool({
404
422
  language = langMap[ext] || 'javascript';
405
423
  }
406
424
  // Apply edit
407
- const cmd = `npx --yes agent-booster@0.2.2 apply --language ${language}`;
408
- const result = execSync(cmd, {
425
+ const result = execFileSync('npx', ['--yes', 'agent-booster@0.2.2', 'apply', '--language', language], {
426
+ ...NPX_EXEC_OPTS,
409
427
  encoding: 'utf-8',
410
428
  input: JSON.stringify({ code: originalCode, edit: edit.code_edit }),
411
429
  maxBuffer: 10 * 1024 * 1024,
@@ -464,7 +482,7 @@ server.addTool({
464
482
  const edits = [];
465
483
  let match;
466
484
  while ((match = regex.exec(markdown)) !== null) {
467
- const [_, language, filepath, instruction, code_edit] = match;
485
+ const [, language, filepath, instruction, code_edit] = match;
468
486
  edits.push({
469
487
  target_filepath: filepath.trim(),
470
488
  instructions: instruction.trim(),
@@ -492,8 +510,8 @@ server.addTool({
492
510
  };
493
511
  language = langMap[ext] || 'javascript';
494
512
  }
495
- const cmd = `npx --yes agent-booster@0.2.2 apply --language ${language}`;
496
- const result = execSync(cmd, {
513
+ const result = execFileSync('npx', ['--yes', 'agent-booster@0.2.2', 'apply', '--language', language], {
514
+ ...NPX_EXEC_OPTS,
497
515
  encoding: 'utf-8',
498
516
  input: JSON.stringify({ code: originalCode, edit: edit.code_edit }),
499
517
  maxBuffer: 10 * 1024 * 1024,
@@ -543,8 +561,8 @@ server.addTool({
543
561
  parameters: z.object({}),
544
562
  execute: async () => {
545
563
  try {
546
- const cmd = `npx agentdb db stats`;
547
- const result = execSync(cmd, {
564
+ const result = execFileSync('npx', ['agentdb', 'db', 'stats'], {
565
+ ...NPX_EXEC_OPTS,
548
566
  encoding: 'utf-8',
549
567
  maxBuffer: 5 * 1024 * 1024,
550
568
  timeout: 10000
@@ -577,24 +595,25 @@ server.addTool({
577
595
  }),
578
596
  execute: async ({ sessionId, task, reward, success, critique, input, output, latencyMs, tokensUsed }) => {
579
597
  try {
580
- const args = [
598
+ const cliArgs = [
599
+ 'agentdb', 'reflexion', 'store',
581
600
  sessionId,
582
- `"${task}"`,
601
+ task,
583
602
  reward.toString(),
584
603
  success.toString()
585
604
  ];
586
605
  if (critique)
587
- args.push(`"${critique}"`);
606
+ cliArgs.push(critique);
588
607
  if (input)
589
- args.push(`"${input}"`);
608
+ cliArgs.push(input);
590
609
  if (output)
591
- args.push(`"${output}"`);
610
+ cliArgs.push(output);
592
611
  if (latencyMs !== undefined)
593
- args.push(latencyMs.toString());
612
+ cliArgs.push(latencyMs.toString());
594
613
  if (tokensUsed !== undefined)
595
- args.push(tokensUsed.toString());
596
- const cmd = `npx agentdb reflexion store ${args.join(' ')}`;
597
- const result = execSync(cmd, {
614
+ cliArgs.push(tokensUsed.toString());
615
+ const result = execFileSync('npx', cliArgs, {
616
+ ...NPX_EXEC_OPTS,
598
617
  encoding: 'utf-8',
599
618
  maxBuffer: 10 * 1024 * 1024,
600
619
  timeout: 30000
@@ -627,15 +646,15 @@ server.addTool({
627
646
  }),
628
647
  execute: async ({ task, k, minReward, onlySuccesses, onlyFailures }) => {
629
648
  try {
630
- const args = [`"${task}"`, (k || 5).toString()];
649
+ const cliArgs = ['agentdb', 'reflexion', 'retrieve', task, (k || 5).toString()];
631
650
  if (minReward !== undefined)
632
- args.push(minReward.toString());
651
+ cliArgs.push(minReward.toString());
633
652
  if (onlyFailures)
634
- args.push('true', 'false');
653
+ cliArgs.push('true', 'false');
635
654
  else if (onlySuccesses)
636
- args.push('false', 'true');
637
- const cmd = `npx agentdb reflexion retrieve ${args.join(' ')}`;
638
- const result = execSync(cmd, {
655
+ cliArgs.push('false', 'true');
656
+ const result = execFileSync('npx', cliArgs, {
657
+ ...NPX_EXEC_OPTS,
639
658
  encoding: 'utf-8',
640
659
  maxBuffer: 10 * 1024 * 1024,
641
660
  timeout: 30000
@@ -668,8 +687,8 @@ server.addTool({
668
687
  }),
669
688
  execute: async ({ task, k }) => {
670
689
  try {
671
- const cmd = `npx agentdb reflexion critique-summary "${task}" ${k || 5}`;
672
- const result = execSync(cmd, {
690
+ const result = execFileSync('npx', ['agentdb', 'reflexion', 'critique-summary', task, String(k || 5)], {
691
+ ...NPX_EXEC_OPTS,
673
692
  encoding: 'utf-8',
674
693
  maxBuffer: 10 * 1024 * 1024,
675
694
  timeout: 30000