onbuzz 4.9.13 → 4.10.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 (451) hide show
  1. package/node_modules/glob/README.md +31 -5
  2. package/node_modules/glob/dist/commonjs/glob.d.ts +8 -0
  3. package/node_modules/glob/dist/commonjs/glob.d.ts.map +1 -1
  4. package/node_modules/glob/dist/commonjs/glob.js +2 -1
  5. package/node_modules/glob/dist/commonjs/glob.js.map +1 -1
  6. package/node_modules/glob/dist/commonjs/index.min.js +3 -3
  7. package/node_modules/glob/dist/commonjs/index.min.js.map +4 -4
  8. package/node_modules/glob/dist/commonjs/pattern.d.ts +3 -0
  9. package/node_modules/glob/dist/commonjs/pattern.d.ts.map +1 -1
  10. package/node_modules/glob/dist/commonjs/pattern.js +4 -0
  11. package/node_modules/glob/dist/commonjs/pattern.js.map +1 -1
  12. package/node_modules/glob/dist/esm/glob.d.ts +8 -0
  13. package/node_modules/glob/dist/esm/glob.d.ts.map +1 -1
  14. package/node_modules/glob/dist/esm/glob.js +2 -1
  15. package/node_modules/glob/dist/esm/glob.js.map +1 -1
  16. package/node_modules/glob/dist/esm/index.min.js +3 -3
  17. package/node_modules/glob/dist/esm/index.min.js.map +4 -4
  18. package/node_modules/glob/dist/esm/pattern.d.ts +3 -0
  19. package/node_modules/glob/dist/esm/pattern.d.ts.map +1 -1
  20. package/node_modules/glob/dist/esm/pattern.js +4 -0
  21. package/node_modules/glob/dist/esm/pattern.js.map +1 -1
  22. package/node_modules/{@isaacs → glob/node_modules}/balanced-match/README.md +7 -10
  23. package/node_modules/{@isaacs → glob/node_modules}/balanced-match/package.json +7 -18
  24. package/node_modules/{@isaacs → glob/node_modules}/brace-expansion/README.md +3 -6
  25. package/node_modules/{@isaacs → glob/node_modules}/brace-expansion/dist/commonjs/index.js +6 -4
  26. package/node_modules/glob/node_modules/brace-expansion/dist/commonjs/index.js.map +1 -0
  27. package/node_modules/{@isaacs → glob/node_modules}/brace-expansion/dist/esm/index.js +6 -4
  28. package/node_modules/glob/node_modules/brace-expansion/dist/esm/index.js.map +1 -0
  29. package/node_modules/{@isaacs → glob/node_modules}/brace-expansion/package.json +11 -7
  30. package/node_modules/glob/node_modules/minimatch/README.md +76 -1
  31. package/node_modules/glob/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts +1 -1
  32. package/node_modules/glob/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts.map +1 -1
  33. package/node_modules/glob/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js.map +1 -1
  34. package/node_modules/glob/node_modules/minimatch/dist/commonjs/ast.d.ts +4 -2
  35. package/node_modules/glob/node_modules/minimatch/dist/commonjs/ast.d.ts.map +1 -1
  36. package/node_modules/glob/node_modules/minimatch/dist/commonjs/ast.js +309 -55
  37. package/node_modules/glob/node_modules/minimatch/dist/commonjs/ast.js.map +1 -1
  38. package/node_modules/glob/node_modules/minimatch/dist/commonjs/brace-expressions.d.ts.map +1 -1
  39. package/node_modules/glob/node_modules/minimatch/dist/commonjs/brace-expressions.js +2 -4
  40. package/node_modules/glob/node_modules/minimatch/dist/commonjs/brace-expressions.js.map +1 -1
  41. package/node_modules/glob/node_modules/minimatch/dist/commonjs/escape.d.ts +1 -1
  42. package/node_modules/glob/node_modules/minimatch/dist/commonjs/escape.d.ts.map +1 -1
  43. package/node_modules/glob/node_modules/minimatch/dist/commonjs/escape.js +4 -4
  44. package/node_modules/glob/node_modules/minimatch/dist/commonjs/escape.js.map +1 -1
  45. package/node_modules/glob/node_modules/minimatch/dist/commonjs/index.d.ts +81 -1
  46. package/node_modules/glob/node_modules/minimatch/dist/commonjs/index.d.ts.map +1 -1
  47. package/node_modules/glob/node_modules/minimatch/dist/commonjs/index.js +232 -134
  48. package/node_modules/glob/node_modules/minimatch/dist/commonjs/index.js.map +1 -1
  49. package/node_modules/glob/node_modules/minimatch/dist/commonjs/unescape.d.ts +1 -1
  50. package/node_modules/glob/node_modules/minimatch/dist/commonjs/unescape.d.ts.map +1 -1
  51. package/node_modules/glob/node_modules/minimatch/dist/commonjs/unescape.js +8 -8
  52. package/node_modules/glob/node_modules/minimatch/dist/commonjs/unescape.js.map +1 -1
  53. package/node_modules/glob/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts +1 -1
  54. package/node_modules/glob/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts.map +1 -1
  55. package/node_modules/glob/node_modules/minimatch/dist/esm/assert-valid-pattern.js.map +1 -1
  56. package/node_modules/glob/node_modules/minimatch/dist/esm/ast.d.ts +4 -2
  57. package/node_modules/glob/node_modules/minimatch/dist/esm/ast.d.ts.map +1 -1
  58. package/node_modules/glob/node_modules/minimatch/dist/esm/ast.js +309 -55
  59. package/node_modules/glob/node_modules/minimatch/dist/esm/ast.js.map +1 -1
  60. package/node_modules/glob/node_modules/minimatch/dist/esm/brace-expressions.d.ts.map +1 -1
  61. package/node_modules/glob/node_modules/minimatch/dist/esm/brace-expressions.js +2 -4
  62. package/node_modules/glob/node_modules/minimatch/dist/esm/brace-expressions.js.map +1 -1
  63. package/node_modules/glob/node_modules/minimatch/dist/esm/escape.d.ts +1 -1
  64. package/node_modules/glob/node_modules/minimatch/dist/esm/escape.d.ts.map +1 -1
  65. package/node_modules/glob/node_modules/minimatch/dist/esm/escape.js +4 -4
  66. package/node_modules/glob/node_modules/minimatch/dist/esm/escape.js.map +1 -1
  67. package/node_modules/glob/node_modules/minimatch/dist/esm/index.d.ts +81 -1
  68. package/node_modules/glob/node_modules/minimatch/dist/esm/index.d.ts.map +1 -1
  69. package/node_modules/glob/node_modules/minimatch/dist/esm/index.js +232 -134
  70. package/node_modules/glob/node_modules/minimatch/dist/esm/index.js.map +1 -1
  71. package/node_modules/glob/node_modules/minimatch/dist/esm/unescape.d.ts +1 -1
  72. package/node_modules/glob/node_modules/minimatch/dist/esm/unescape.d.ts.map +1 -1
  73. package/node_modules/glob/node_modules/minimatch/dist/esm/unescape.js +8 -8
  74. package/node_modules/glob/node_modules/minimatch/dist/esm/unescape.js.map +1 -1
  75. package/node_modules/glob/node_modules/minimatch/package.json +17 -11
  76. package/node_modules/glob/package.json +10 -13
  77. package/node_modules/minipass/LICENSE.md +55 -0
  78. package/node_modules/minipass/dist/commonjs/index.d.ts +12 -16
  79. package/node_modules/minipass/dist/commonjs/index.d.ts.map +1 -1
  80. package/node_modules/minipass/dist/commonjs/index.js +13 -3
  81. package/node_modules/minipass/dist/commonjs/index.js.map +1 -1
  82. package/node_modules/minipass/dist/esm/index.d.ts +12 -16
  83. package/node_modules/minipass/dist/esm/index.d.ts.map +1 -1
  84. package/node_modules/minipass/dist/esm/index.js +3 -1
  85. package/node_modules/minipass/dist/esm/index.js.map +1 -1
  86. package/node_modules/minipass/package.json +9 -14
  87. package/node_modules/path-scurry/node_modules/lru-cache/README.md +96 -10
  88. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/browser/diagnostics-channel-browser.d.ts.map +1 -0
  89. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/browser/diagnostics-channel-browser.js.map +1 -0
  90. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/browser/diagnostics-channel.d.ts +5 -0
  91. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/browser/diagnostics-channel.js +7 -0
  92. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/browser/index.d.ts +1400 -0
  93. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/browser/index.d.ts.map +1 -0
  94. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/browser/index.js +1726 -0
  95. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/browser/index.js.map +1 -0
  96. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/browser/index.min.js +2 -0
  97. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/browser/index.min.js.map +7 -0
  98. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/browser/perf.d.ts +12 -0
  99. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/browser/perf.d.ts.map +1 -0
  100. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/browser/perf.js +10 -0
  101. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/browser/perf.js.map +1 -0
  102. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/diagnostics-channel-cjs.cjs.map +1 -0
  103. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/diagnostics-channel-cjs.d.cts.map +1 -0
  104. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/diagnostics-channel.d.ts +5 -0
  105. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/diagnostics-channel.js +7 -0
  106. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.d.ts +109 -32
  107. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.d.ts.map +1 -1
  108. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.js +334 -197
  109. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.js.map +1 -1
  110. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.min.js +1 -1
  111. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/index.min.js.map +4 -4
  112. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/node/diagnostics-channel-node.d.ts.map +1 -0
  113. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/node/diagnostics-channel-node.js.map +1 -0
  114. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/node/diagnostics-channel.d.ts +5 -0
  115. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/node/diagnostics-channel.js +9 -0
  116. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/node/index.d.ts +1400 -0
  117. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/node/index.d.ts.map +1 -0
  118. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/node/index.js +1726 -0
  119. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/node/index.js.map +1 -0
  120. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/node/index.min.js +2 -0
  121. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/node/index.min.js.map +7 -0
  122. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/node/perf.d.ts +12 -0
  123. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/node/perf.d.ts.map +1 -0
  124. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/node/perf.js +10 -0
  125. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/node/perf.js.map +1 -0
  126. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/perf.d.ts +12 -0
  127. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/perf.d.ts.map +1 -0
  128. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/perf.js +10 -0
  129. package/node_modules/path-scurry/node_modules/lru-cache/dist/commonjs/perf.js.map +1 -0
  130. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/browser/diagnostics-channel-browser.d.ts.map +1 -0
  131. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/browser/diagnostics-channel-browser.js.map +1 -0
  132. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/browser/diagnostics-channel.d.ts +5 -0
  133. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/browser/diagnostics-channel.js +4 -0
  134. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/browser/index.d.ts +1400 -0
  135. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/browser/index.d.ts.map +1 -0
  136. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/browser/index.js +1722 -0
  137. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/browser/index.js.map +1 -0
  138. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/browser/index.min.js +2 -0
  139. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/browser/index.min.js.map +7 -0
  140. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/browser/perf.d.ts +12 -0
  141. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/browser/perf.d.ts.map +1 -0
  142. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/browser/perf.js +7 -0
  143. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/browser/perf.js.map +1 -0
  144. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/diagnostics-channel-esm.d.mts.map +1 -0
  145. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/diagnostics-channel-esm.mjs.map +1 -0
  146. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/diagnostics-channel.d.ts +5 -0
  147. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/diagnostics-channel.js +19 -0
  148. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.d.ts +109 -32
  149. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.d.ts.map +1 -1
  150. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.js +333 -196
  151. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.js.map +1 -1
  152. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.min.js +1 -1
  153. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/index.min.js.map +4 -4
  154. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/node/diagnostics-channel-node.d.ts.map +1 -0
  155. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/node/diagnostics-channel-node.js.map +1 -0
  156. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/node/diagnostics-channel.d.ts +5 -0
  157. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/node/diagnostics-channel.js +6 -0
  158. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/node/index.d.ts +1400 -0
  159. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/node/index.d.ts.map +1 -0
  160. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/node/index.js +1722 -0
  161. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/node/index.js.map +1 -0
  162. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/node/index.min.js +2 -0
  163. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/node/index.min.js.map +7 -0
  164. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/node/perf.d.ts +12 -0
  165. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/node/perf.d.ts.map +1 -0
  166. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/node/perf.js +7 -0
  167. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/node/perf.js.map +1 -0
  168. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/perf.d.ts +12 -0
  169. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/perf.d.ts.map +1 -0
  170. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/perf.js +7 -0
  171. package/node_modules/path-scurry/node_modules/lru-cache/dist/esm/perf.js.map +1 -0
  172. package/node_modules/path-scurry/node_modules/lru-cache/package.json +71 -18
  173. package/node_modules/path-scurry/package.json +8 -24
  174. package/package.json +1 -1
  175. package/scripts/debug-balance-probe.mjs +35 -35
  176. package/scripts/push-image.sh +43 -43
  177. package/scripts/setup-acr.sh +65 -65
  178. package/scripts/verify-optional-deps.js +96 -1
  179. package/src/__tests__/composioCliFlags.test.js +239 -239
  180. package/src/analyzers/CSSAnalyzer.js +298 -297
  181. package/src/analyzers/ConfigValidator.js +691 -690
  182. package/src/analyzers/ESLintAnalyzer.js +320 -320
  183. package/src/analyzers/JavaScriptAnalyzer.js +260 -261
  184. package/src/analyzers/PrettierFormatter.js +246 -247
  185. package/src/analyzers/PythonAnalyzer.js +283 -283
  186. package/src/analyzers/SecurityAnalyzer.js +729 -729
  187. package/src/analyzers/SparrowAnalyzer.js +341 -341
  188. package/src/analyzers/TypeScriptAnalyzer.js +247 -247
  189. package/src/analyzers/__tests__/CSSAnalyzer.test.js +41 -41
  190. package/src/analyzers/__tests__/ConfigValidator.test.js +362 -362
  191. package/src/analyzers/__tests__/JavaScriptAnalyzer.test.js +40 -40
  192. package/src/analyzers/__tests__/PythonAnalyzer.test.js +205 -208
  193. package/src/analyzers/__tests__/SecurityAnalyzer.test.js +303 -303
  194. package/src/analyzers/__tests__/TypeScriptAnalyzer.test.js +187 -187
  195. package/src/analyzers/codeCloneDetector/analyzer.js +344 -344
  196. package/src/analyzers/codeCloneDetector/detector.js +250 -250
  197. package/src/analyzers/codeCloneDetector/index.js +194 -192
  198. package/src/analyzers/codeCloneDetector/parser.js +199 -199
  199. package/src/core/__tests__/agentPool.test.js +866 -866
  200. package/src/core/__tests__/agentPoolAutoResume.test.js +209 -209
  201. package/src/core/__tests__/agentPoolWakeOnMessage.test.js +315 -315
  202. package/src/core/__tests__/agentScheduler.emptyResponseChatStall.test.js +213 -213
  203. package/src/core/__tests__/agentScheduler.errorCategorisation.test.js +246 -246
  204. package/src/core/__tests__/agentScheduler.firstChunkTimeout.test.js +138 -138
  205. package/src/core/__tests__/agentScheduler.modeTransitions.test.js +233 -233
  206. package/src/core/__tests__/agentScheduler.nativePromptPick.test.js +319 -319
  207. package/src/core/__tests__/agentScheduler.taskLifecycleInstruction.test.js +78 -78
  208. package/src/core/__tests__/agentScheduler.visualizer.test.js +258 -258
  209. package/src/core/__tests__/flowCheckpointStore.test.js +140 -140
  210. package/src/core/__tests__/flowEndToEnd.test.js +565 -565
  211. package/src/core/__tests__/flowFieldMapping.test.js +188 -189
  212. package/src/core/__tests__/flowLintClientMirror.test.js +96 -98
  213. package/src/core/__tests__/flowSavePayload.test.js +170 -169
  214. package/src/core/__tests__/flowTemplates.test.js +311 -311
  215. package/src/core/__tests__/flowVersionStore.test.js +123 -123
  216. package/src/core/__tests__/messageProcessor.test.js +669 -669
  217. package/src/core/__tests__/stateManager.test.js +0 -1
  218. package/src/core/agentPool.js +2474 -2475
  219. package/src/core/agentScheduler.js +1 -4
  220. package/src/core/contextManager.js +708 -708
  221. package/src/core/flowExecutor.js +1510 -1510
  222. package/src/core/flowFieldMapping.js +136 -138
  223. package/src/core/messageProcessor.js +953 -954
  224. package/src/core/orchestrator.js +593 -595
  225. package/src/core/stateManager.js +1765 -1752
  226. package/src/index.js +1221 -1221
  227. package/src/interfaces/__tests__/archivedAgentDelete.test.js +207 -207
  228. package/src/interfaces/__tests__/bulkAgentRoute.test.js +361 -361
  229. package/src/interfaces/__tests__/imageServing.test.js +228 -228
  230. package/src/interfaces/__tests__/remoteSessionAuth.test.js +308 -308
  231. package/src/interfaces/__tests__/videoJobsRoutes.test.js +178 -179
  232. package/src/interfaces/__tests__/webServer.marketplace.test.js +629 -629
  233. package/src/interfaces/schedulerRoutes.js +50 -50
  234. package/src/interfaces/terminal/__tests__/smoke/connection.test.js +341 -350
  235. package/src/interfaces/terminal/__tests__/smoke/enhancements.test.js +156 -156
  236. package/src/interfaces/terminal/__tests__/smoke/imports.test.js +325 -330
  237. package/src/interfaces/terminal/__tests__/smoke/tools.test.js +385 -388
  238. package/src/interfaces/terminal/api/session.js +265 -266
  239. package/src/interfaces/terminal/api/websocket.js +496 -497
  240. package/src/interfaces/terminal/components/AgentCreator.js +691 -705
  241. package/src/interfaces/terminal/components/AgentEditor.js +676 -678
  242. package/src/interfaces/terminal/components/AgentSwitcher.js +331 -330
  243. package/src/interfaces/terminal/components/ErrorPanel.js +263 -264
  244. package/src/interfaces/terminal/components/Header.js +28 -28
  245. package/src/interfaces/terminal/components/Layout.js +598 -603
  246. package/src/interfaces/terminal/components/MessageList.js +280 -281
  247. package/src/interfaces/terminal/components/SettingsPanel.js +410 -415
  248. package/src/interfaces/terminal/components/StatusBar.js +2 -0
  249. package/src/interfaces/terminal/index.js +168 -168
  250. package/src/interfaces/terminal/state/useAgentControl.js +496 -496
  251. package/src/interfaces/terminal/state/useAgents.js +537 -537
  252. package/src/interfaces/terminal/state/useMessages.js +629 -630
  253. package/src/interfaces/terminal/state/useTools.js +554 -554
  254. package/src/interfaces/terminal/utils/debugLogger.js +44 -44
  255. package/src/interfaces/terminal/utils/settingsStorage.js +232 -232
  256. package/src/interfaces/webServer.js +7578 -7579
  257. package/src/interfaces/webServer.js.bak +7046 -7046
  258. package/src/modules/fileExplorer/__tests__/zipDownload.test.js +237 -237
  259. package/src/modules/fileExplorer/controller.js +470 -469
  260. package/src/modules/fileExplorer/routes.js +285 -286
  261. package/src/modules/widget/__tests__/isDisabled.test.js +41 -41
  262. package/src/modules/widget/__tests__/routes.test.js +677 -678
  263. package/src/modules/widget/__tests__/runtime.test.js +401 -401
  264. package/src/modules/widget/__tests__/versioning.test.js +309 -309
  265. package/src/modules/widget/__tests__/webComponentRuntime.test.js +565 -565
  266. package/src/modules/widget/__tests__/widgetTool.test.js +316 -316
  267. package/src/modules/widget/routes.js +435 -435
  268. package/src/modules/widget/runtime/bundle.js +640 -640
  269. package/src/modules/widget/runtime/webComponentBundle.js +470 -470
  270. package/src/modules/widget/schema.js +182 -181
  271. package/src/modules/widget/widgetTool.js +1389 -1389
  272. package/src/services/__tests__/agentActivityService.test.js +401 -402
  273. package/src/services/__tests__/benchmarkService.test.js +184 -184
  274. package/src/services/__tests__/contextInjectionService.test.js +246 -246
  275. package/src/services/__tests__/conversationQuery.test.js +721 -723
  276. package/src/services/__tests__/credentialVault.test.js +469 -469
  277. package/src/services/__tests__/discordService.integration.test.js +638 -639
  278. package/src/services/__tests__/flowContextService.test.js +590 -590
  279. package/src/services/__tests__/memoryService.test.js +1 -1
  280. package/src/services/__tests__/messageSource.test.js +380 -380
  281. package/src/services/__tests__/modelRouterNaming.test.js +111 -111
  282. package/src/services/__tests__/projectDetector.test.js +34 -34
  283. package/src/services/__tests__/promptService.test.js +242 -242
  284. package/src/services/__tests__/telegramService.test.js +941 -941
  285. package/src/services/__tests__/tokenCountingService.test.js +48 -48
  286. package/src/services/agentActivityService.js +419 -420
  287. package/src/services/aiService.js +2997 -3001
  288. package/src/services/apiKeyManager.js +359 -359
  289. package/src/services/benchmarkService.js +196 -196
  290. package/src/services/codebaseKnowledgeService.js +2 -2
  291. package/src/services/composioService.js +738 -738
  292. package/src/services/conversationCompactionService.js +1258 -1257
  293. package/src/services/credentialVault.js +685 -685
  294. package/src/services/discordService.js +792 -793
  295. package/src/services/embeddings/__tests__/azureCustomProvider.test.js +232 -232
  296. package/src/services/embeddings/__tests__/embeddingService.test.js +417 -417
  297. package/src/services/embeddings/__tests__/localProvider.test.js +263 -263
  298. package/src/services/embeddings/autoRecall.js +218 -219
  299. package/src/services/embeddings/indexers/__tests__/agentIndexer.test.js +232 -232
  300. package/src/services/embeddings/indexers/__tests__/memoryIndexer.test.js +418 -418
  301. package/src/services/embeddings/indexers/__tests__/reminisceIndexer.test.js +356 -357
  302. package/src/services/embeddings/indexers/__tests__/skillsIndexer.test.js +145 -145
  303. package/src/services/embeddings/indexers/__tests__/taskIndexer.test.js +146 -146
  304. package/src/services/embeddings/indexers/composioIndexer.js +279 -279
  305. package/src/services/embeddings/providerInterface.js +206 -206
  306. package/src/services/embeddings/providers/localProvider.js +11 -7
  307. package/src/services/embeddings/providers/openaiProvider.js +101 -101
  308. package/src/services/embeddings/vectorStore/inMemoryJsonStore.js +356 -356
  309. package/src/services/errorHandler.js +809 -809
  310. package/src/services/flowContextService.js +586 -586
  311. package/src/services/grounding/MockAdapter.js +125 -125
  312. package/src/services/modelRouterService.js +26 -31
  313. package/src/services/modelsService.js +322 -322
  314. package/src/services/ollamaService.js +452 -452
  315. package/src/services/projectDetector.js +403 -404
  316. package/src/services/promptService.js +418 -418
  317. package/src/services/qualityInspector.js +795 -795
  318. package/src/services/scheduleService.js +726 -726
  319. package/src/services/serviceRegistry.js +386 -386
  320. package/src/services/telegrafBot.js +174 -174
  321. package/src/services/telegramService.js +1972 -1972
  322. package/src/services/visualEditorBridge.js +1033 -1033
  323. package/src/services/visualEditorServer.js +1769 -1774
  324. package/src/services/whatsappService.js +667 -668
  325. package/src/tools/__tests__/agentCommunicationTool.findAgent.test.js +226 -226
  326. package/src/tools/__tests__/agentCommunicationTool.test.js +3 -3
  327. package/src/tools/__tests__/agentDelayTool.test.js +342 -342
  328. package/src/tools/__tests__/baseTool.test.js +3 -3
  329. package/src/tools/__tests__/codeMapTool.test.js +915 -915
  330. package/src/tools/__tests__/fileContentReplaceTool.test.js +309 -309
  331. package/src/tools/__tests__/fileTreeTool.test.js +274 -274
  332. package/src/tools/__tests__/filesystemTool.test.js +815 -815
  333. package/src/tools/__tests__/foundryWebSearchTool.test.js +252 -252
  334. package/src/tools/__tests__/imageTool.validator.test.js +194 -194
  335. package/src/tools/__tests__/jobDoneTool.test.js +580 -581
  336. package/src/tools/__tests__/memoryTool.forgetStale.test.js +272 -272
  337. package/src/tools/__tests__/memoryTool.reminisce.test.js +2 -2
  338. package/src/tools/__tests__/memoryTool.reminisceSemanticSearch.test.js +301 -301
  339. package/src/tools/__tests__/memoryTool.semanticSearch.test.js +405 -405
  340. package/src/tools/__tests__/memoryTool.teamPool.test.js +293 -293
  341. package/src/tools/__tests__/memoryTool.test.js +1 -1
  342. package/src/tools/__tests__/seekTool.test.js +282 -282
  343. package/src/tools/__tests__/skillsTool.search.test.js +164 -164
  344. package/src/tools/__tests__/skillsTool.test.js +226 -226
  345. package/src/tools/__tests__/staticAnalysisTool.test.js +509 -509
  346. package/src/tools/__tests__/taskManagerTool.discipline.test.js +137 -137
  347. package/src/tools/__tests__/taskManagerTool.search.test.js +143 -143
  348. package/src/tools/__tests__/taskManagerTool.test.js +866 -866
  349. package/src/tools/__tests__/terminalTool.test.js +448 -448
  350. package/src/tools/__tests__/toolShapeForgiveness.test.js +259 -260
  351. package/src/tools/__tests__/userPromptTool.test.js +297 -297
  352. package/src/tools/__tests__/videoTool.jobs.test.js +147 -147
  353. package/src/tools/__tests__/webTool.e2e.test.js +609 -603
  354. package/src/tools/__tests__/webTool.unit.test.js +195 -195
  355. package/src/tools/__tests__/webTool.visionModel.test.js +75 -75
  356. package/src/tools/agentCommunicationTool.js +8 -10
  357. package/src/tools/agentDelayTool.js +496 -497
  358. package/src/tools/asyncToolManager.js +602 -603
  359. package/src/tools/baseTool.js +12 -11
  360. package/src/tools/cloneDetectionTool.js +576 -581
  361. package/src/tools/codeMapTool.js +0 -6
  362. package/src/tools/composioTool.js +617 -617
  363. package/src/tools/dependencyResolverTool.js +1211 -1212
  364. package/src/tools/desktop/DesktopTool.js +629 -638
  365. package/src/tools/desktop/__tests__/DesktopTool.e2e.test.js +306 -306
  366. package/src/tools/desktop/__tests__/DesktopTool.test.js +507 -507
  367. package/src/tools/desktop/__tests__/osController.test.js +364 -364
  368. package/src/tools/desktop/osController.js +491 -491
  369. package/src/tools/docxTool.js +623 -623
  370. package/src/tools/excelTool.js +636 -636
  371. package/src/tools/fileContentReplaceTool.js +5 -7
  372. package/src/tools/fileSystemTool.js +12 -19
  373. package/src/tools/fileTreeTool.js +840 -840
  374. package/src/tools/foundryWebSearchTool.js +273 -273
  375. package/src/tools/helpTool.js +198 -198
  376. package/src/tools/imageTool.js +1397 -1397
  377. package/src/tools/importAnalyzerTool.js +1056 -1056
  378. package/src/tools/jobDoneTool.js +495 -495
  379. package/src/tools/memoryTool.js +1 -1
  380. package/src/tools/office/pres/__tests__/presSystem.test.js +365 -365
  381. package/src/tools/office/pres/archetypes/agenda.js +61 -61
  382. package/src/tools/office/pres/archetypes/bentoGrid.js +218 -219
  383. package/src/tools/office/pres/archetypes/bigStat.js +140 -142
  384. package/src/tools/office/pres/archetypes/closing.js +70 -70
  385. package/src/tools/office/pres/archetypes/hero.js +70 -70
  386. package/src/tools/office/pres/archetypes/productHero.js +93 -94
  387. package/src/tools/office/pres/archetypes/table.js +73 -74
  388. package/src/tools/office/pres/backgrounds/orb.js +66 -66
  389. package/src/tools/office/pres/components.js +422 -423
  390. package/src/tools/officeTool.js +441 -441
  391. package/src/tools/pdfTool.js +625 -627
  392. package/src/tools/platformControlTool.js +1081 -1081
  393. package/src/tools/seekTool.js +917 -918
  394. package/src/tools/skillsTool.js +1 -1
  395. package/src/tools/staticAnalysisTool.js +2143 -2146
  396. package/src/tools/taskManagerTool.js +3324 -3324
  397. package/src/tools/terminalTool.js +2615 -2618
  398. package/src/tools/videoTool.js +1303 -1303
  399. package/src/tools/visionTool.js +508 -508
  400. package/src/tools/visualEditorTool.js +1289 -1290
  401. package/src/tools/webTool.js +3368 -3368
  402. package/src/tools/whatsappTool.js +464 -464
  403. package/src/types/__tests__/agent.test.js +499 -499
  404. package/src/types/__tests__/contextReference.test.js +606 -606
  405. package/src/types/__tests__/conversation.test.js +555 -555
  406. package/src/types/__tests__/toolCommand.test.js +584 -584
  407. package/src/types/contextReference.js +974 -971
  408. package/src/types/conversation.js +729 -729
  409. package/src/types/toolCommand.js +746 -746
  410. package/src/utilities/__tests__/attachmentValidator.test.js +80 -80
  411. package/src/utilities/__tests__/auditReport.test.js +328 -328
  412. package/src/utilities/__tests__/directoryAccessManager.test.js +388 -388
  413. package/src/utilities/__tests__/jsonRepair.test.js +103 -104
  414. package/src/utilities/__tests__/modeTransitionReasons.test.js +105 -105
  415. package/src/utilities/__tests__/platformUtils.test.js +80 -87
  416. package/src/utilities/__tests__/structuredFileValidator.test.js +261 -263
  417. package/src/utilities/__tests__/toolConstants.test.js +92 -94
  418. package/src/utilities/__tests__/useIsTouchDevice.detect.test.js +114 -114
  419. package/src/utilities/__tests__/webUiUtilSync.test.js +117 -117
  420. package/src/utilities/attachmentValidator.js +284 -288
  421. package/src/utilities/authCache.js.backup-1779570472481 +121 -121
  422. package/src/utilities/browserStealth.js +631 -630
  423. package/src/utilities/configManager.js +616 -617
  424. package/src/utilities/directoryAccessManager.js +564 -565
  425. package/src/utilities/fileProcessor.js +308 -307
  426. package/src/utilities/humanBehavior.js +454 -453
  427. package/src/utilities/logger.js +479 -479
  428. package/src/utilities/structuredFileValidator.js +696 -699
  429. package/src/utilities/tagParser.js +5 -10
  430. package/src/utilities/userDataDir.js +308 -308
  431. package/node_modules/@isaacs/brace-expansion/dist/commonjs/index.js.map +0 -1
  432. package/node_modules/@isaacs/brace-expansion/dist/esm/index.js.map +0 -1
  433. package/node_modules/minipass/LICENSE +0 -15
  434. /package/node_modules/{@isaacs → glob/node_modules}/balanced-match/LICENSE.md +0 -0
  435. /package/node_modules/{@isaacs → glob/node_modules}/balanced-match/dist/commonjs/index.d.ts +0 -0
  436. /package/node_modules/{@isaacs → glob/node_modules}/balanced-match/dist/commonjs/index.d.ts.map +0 -0
  437. /package/node_modules/{@isaacs → glob/node_modules}/balanced-match/dist/commonjs/index.js +0 -0
  438. /package/node_modules/{@isaacs → glob/node_modules}/balanced-match/dist/commonjs/index.js.map +0 -0
  439. /package/node_modules/{@isaacs → glob/node_modules}/balanced-match/dist/commonjs/package.json +0 -0
  440. /package/node_modules/{@isaacs → glob/node_modules}/balanced-match/dist/esm/index.d.ts +0 -0
  441. /package/node_modules/{@isaacs → glob/node_modules}/balanced-match/dist/esm/index.d.ts.map +0 -0
  442. /package/node_modules/{@isaacs → glob/node_modules}/balanced-match/dist/esm/index.js +0 -0
  443. /package/node_modules/{@isaacs → glob/node_modules}/balanced-match/dist/esm/index.js.map +0 -0
  444. /package/node_modules/{@isaacs → glob/node_modules}/balanced-match/dist/esm/package.json +0 -0
  445. /package/node_modules/{@isaacs → glob/node_modules}/brace-expansion/LICENSE +0 -0
  446. /package/node_modules/{@isaacs → glob/node_modules}/brace-expansion/dist/commonjs/index.d.ts +0 -0
  447. /package/node_modules/{@isaacs → glob/node_modules}/brace-expansion/dist/commonjs/index.d.ts.map +0 -0
  448. /package/node_modules/{@isaacs → glob/node_modules}/brace-expansion/dist/commonjs/package.json +0 -0
  449. /package/node_modules/{@isaacs → glob/node_modules}/brace-expansion/dist/esm/index.d.ts +0 -0
  450. /package/node_modules/{@isaacs → glob/node_modules}/brace-expansion/dist/esm/index.d.ts.map +0 -0
  451. /package/node_modules/{@isaacs → glob/node_modules}/brace-expansion/dist/esm/package.json +0 -0
@@ -1,498 +1,497 @@
1
- /**
2
- * AgentDelayTool - Allows agents to pause their activity for specified duration
3
- *
4
- * Purpose:
5
- * - Pause agent activity during waiting periods
6
- * - Prevent unnecessary message exchanges
7
- * - Handle installation and startup delays
8
- * - Manage agent status during long operations
9
- */
10
-
11
- import { BaseTool } from './baseTool.js';
12
- import TagParser from '../utilities/tagParser.js';
13
-
14
- import {
15
- TOOL_STATUS,
16
- SYSTEM_DEFAULTS,
17
- AGENT_STATUS
18
- } from '../utilities/constants.js';
19
-
20
- class AgentDelayTool extends BaseTool {
21
- constructor(config = {}, logger = null, agentPool = null) {
22
- super(config, logger);
23
-
24
- this.agentPool = agentPool;
25
- this.maxPauseDuration = config.maxDuration || SYSTEM_DEFAULTS.MAX_PAUSE_DURATION;
26
- this.minPauseDuration = config.minDuration || 1;
27
-
28
- // Tool metadata
29
- this.requiresProject = false;
30
- this.isAsync = false; // Synchronous - immediately updates agent status
31
- }
32
-
33
- /**
34
- * Get tool description for LLM consumption
35
- * @returns {string} Tool description
36
- */
37
- getDescription() {
38
- return `
39
- Agent Delay Tool: Pause agent activity for a specified duration to prevent unnecessary message exchanges during waiting periods.
40
-
41
- USAGE:
42
- \`\`\`json
43
- {
44
- "toolId": "agentdelay",
45
- "duration": 30,
46
- "reason": "Waiting for npm install to complete"
47
- }
48
- \`\`\`
49
-
50
- PARAMETERS:
51
- - duration: Number of seconds to pause (${this.minPauseDuration}-${this.maxPauseDuration}) - required
52
- - reason: Optional explanation for the pause
53
-
54
- USE CASES:
55
- - After running 'npm install' or similar long-running commands
56
- - Waiting for services to start up
57
- - Allowing time for file system operations to complete
58
- - Preventing rapid status checking loops
59
- - During build processes or compilation
60
-
61
- EXAMPLES:
62
-
63
- 1. Basic pause for 1 minute:
64
- \`\`\`json
65
- {
66
- "toolId": "agentdelay",
67
- "duration": 60
68
- }
69
- \`\`\`
70
-
71
- 2. Pause with reason:
72
- \`\`\`json
73
- {
74
- "toolId": "agentdelay",
75
- "duration": 120,
76
- "reason": "Installing dependencies"
77
- }
78
- \`\`\`
79
-
80
- 3. Brief pause for service startup:
81
- \`\`\`json
82
- {
83
- "toolId": "agentdelay",
84
- "duration": 30,
85
- "reason": "Waiting for server startup"
86
- }
87
- \`\`\`
88
-
89
- BEHAVIOR:
90
- The agent will be marked as '${AGENT_STATUS.PAUSED}' and will not process new messages until the duration expires.
91
- Other agents can still send messages, but they will be queued until the agent resumes.
92
-
93
- IMPORTANT: Use this tool judiciously. Only pause when genuinely waiting for external processes.
94
- Maximum pause duration: ${this.maxPauseDuration} seconds (${Math.floor(this.maxPauseDuration / 60)} minutes).
95
- `;
96
- }
97
-
98
- /**
99
- * Parse parameters from tool command content
100
- * @param {string} content - Raw tool command content
101
- * @returns {Object} Parsed parameters
102
- */
103
- parseParameters(content) {
104
- try {
105
- // Extract pause-duration and reason using TagParser
106
- const durationMatches = TagParser.extractContent(content, 'pause-duration');
107
- const reasonMatches = TagParser.extractContent(content, 'reason');
108
-
109
- const duration = durationMatches.length > 0 ? parseInt(durationMatches[0], 10) : null;
110
- const reason = reasonMatches.length > 0 ? reasonMatches[0].trim() : 'Agent pause requested';
111
-
112
- return {
113
- duration,
114
- reason,
115
- rawContent: content.trim()
116
- };
117
-
118
- } catch (error) {
119
- throw new Error(`Failed to parse agent delay parameters: ${error.message}`);
120
- }
121
- }
122
-
123
- /**
124
- * Get required parameters
125
- * @returns {Array<string>} Array of required parameter names
126
- */
127
- getRequiredParameters() {
128
- return ['duration'];
129
- }
130
-
131
- /**
132
- * Validate parameter types
133
- * @param {Object} params - Parameters to validate
134
- * @returns {Object} Validation result
135
- */
136
- validateParameterTypes(params) {
137
- const errors = [];
138
-
139
- if (params.duration !== null && params.duration !== undefined) {
140
- if (typeof params.duration !== 'number' || isNaN(params.duration)) {
141
- errors.push('pause-duration must be a valid number');
142
- }
143
- }
144
-
145
- if (params.reason && typeof params.reason !== 'string') {
146
- errors.push('reason must be a string');
147
- }
148
-
149
- return {
150
- valid: errors.length === 0,
151
- errors
152
- };
153
- }
154
-
155
- /**
156
- * Custom parameter validation
157
- * @param {Object} params - Parameters to validate
158
- * @returns {Object} Validation result
159
- */
160
- customValidateParameters(params) {
161
- const errors = [];
162
-
163
- if (params.duration === null || params.duration === undefined) {
164
- errors.push('pause-duration is required');
165
- } else {
166
- if (params.duration < this.minPauseDuration) {
167
- errors.push(`pause-duration must be at least ${this.minPauseDuration} second(s)`);
168
- }
169
-
170
- if (params.duration > this.maxPauseDuration) {
171
- errors.push(`pause-duration cannot exceed ${this.maxPauseDuration} seconds (${Math.floor(this.maxPauseDuration / 60)} minutes)`);
172
- }
173
-
174
- if (!Number.isInteger(params.duration)) {
175
- errors.push('pause-duration must be a whole number of seconds');
176
- }
177
- }
178
-
179
- if (params.reason && params.reason.length > 200) {
180
- errors.push('reason cannot exceed 200 characters');
181
- }
182
-
183
- return {
184
- valid: errors.length === 0,
185
- errors
186
- };
187
- }
188
-
189
- /**
190
- * Execute tool with parsed parameters
191
- * @param {Object} params - Parsed parameters
192
- * @param {Object} context - Execution context
193
- * @returns {Promise<Object>} Execution result
194
- */
195
- async execute(params, context) {
196
- const { duration, reason } = params;
197
- const { agentId } = context;
198
-
199
- if (!agentId) {
200
- throw new Error('Agent ID is required for agent delay tool');
201
- }
202
-
203
- if (!this.agentPool) {
204
- throw new Error('Agent pool not available - cannot pause agent');
205
- }
206
-
207
- try {
208
- // Calculate pause end time
209
- const pausedUntil = new Date(Date.now() + duration * 1000);
210
-
211
- // Pause the agent via agent pool
212
- const pauseResult = await this.agentPool.pauseAgent(agentId, pausedUntil, reason);
213
-
214
- // Also set delayEndTime for the new scheduler architecture
215
- const agent = await this.agentPool.getAgent(agentId);
216
- if (agent) {
217
- agent.delayEndTime = pausedUntil.toISOString();
218
- await this.agentPool.persistAgentState(agentId);
219
- }
220
-
221
- if (!pauseResult.success) {
222
- throw new Error(`Failed to pause agent: ${pauseResult.message || 'Unknown error'}`);
223
- }
224
-
225
- const result = {
226
- success: true,
227
- action: 'agent-pause',
228
- agentId,
229
- pauseDuration: duration,
230
- pausedUntil: pausedUntil.toISOString(),
231
- reason,
232
- message: `Agent will resume activity in ${duration} second${duration !== 1 ? 's' : ''}`,
233
- resumeTime: this.formatResumeTime(pausedUntil),
234
- toolUsed: 'agent-delay'
235
- };
236
-
237
- this.logger?.info(`Agent paused via agent-delay tool: ${agentId}`, {
238
- duration,
239
- reason,
240
- pausedUntil: pausedUntil.toISOString(),
241
- toolUsage: true
242
- });
243
-
244
- return result;
245
-
246
- } catch (error) {
247
- this.logger?.error(`Agent delay tool execution failed: ${error.message}`, {
248
- agentId,
249
- duration,
250
- reason,
251
- error: error.stack
252
- });
253
-
254
- throw error;
255
- }
256
- }
257
-
258
- /**
259
- * Get supported actions for this tool
260
- * @returns {Array<string>} Array of supported action names
261
- */
262
- getSupportedActions() {
263
- return ['pause', 'delay'];
264
- }
265
-
266
- /**
267
- * Get parameter schema for validation
268
- * @returns {Object} Parameter schema
269
- */
270
- getParameterSchema() {
271
- return {
272
- type: 'object',
273
- properties: {
274
- duration: {
275
- type: 'integer',
276
- minimum: this.minPauseDuration,
277
- maximum: this.maxPauseDuration,
278
- description: 'Number of seconds to pause agent activity'
279
- },
280
- reason: {
281
- type: 'string',
282
- maxLength: 200,
283
- description: 'Optional reason for the pause'
284
- }
285
- },
286
- required: ['duration']
287
- };
288
- }
289
-
290
- /**
291
- * Get tool capabilities metadata
292
- * @returns {Object} Enhanced capabilities object
293
- */
294
- getCapabilities() {
295
- const baseCapabilities = super.getCapabilities();
296
-
297
- return {
298
- ...baseCapabilities,
299
- pauseRange: {
300
- min: this.minPauseDuration,
301
- max: this.maxPauseDuration,
302
- unit: 'seconds'
303
- },
304
- affects: 'agent-status',
305
- interactsWithAgentPool: true,
306
- useCases: [
307
- 'installation-waiting',
308
- 'service-startup',
309
- 'file-operations',
310
- 'build-processes',
311
- 'compilation',
312
- 'deployment-delays'
313
- ]
314
- };
315
- }
316
-
317
- /**
318
- * Format resume time for human readability
319
- * @private
320
- */
321
- formatResumeTime(resumeDate) {
322
- const now = new Date();
323
- const diffSeconds = Math.round((resumeDate.getTime() - now.getTime()) / 1000);
324
-
325
- if (diffSeconds < 60) {
326
- return `in ${diffSeconds} second${diffSeconds !== 1 ? 's' : ''}`;
327
- } else if (diffSeconds < 3600) {
328
- const minutes = Math.round(diffSeconds / 60);
329
- return `in ${minutes} minute${minutes !== 1 ? 's' : ''}`;
330
- } else {
331
- const hours = Math.round(diffSeconds / 3600);
332
- return `in ${hours} hour${hours !== 1 ? 's' : ''}`;
333
- }
334
- }
335
-
336
- /**
337
- * Get usage examples for documentation
338
- * @returns {Array<Object>} Array of usage examples
339
- */
340
- getUsageExamples() {
341
- return [
342
- {
343
- title: 'Basic pause for 30 seconds',
344
- command: `[tool id="agentdelay"]
345
- <pause-duration>30</pause-duration>
346
- [/tool]`,
347
- description: 'Simple 30-second pause without specific reason'
348
- },
349
- {
350
- title: 'Pause during package installation',
351
- command: `[tool id="agentdelay"]
352
- <pause-duration>120</pause-duration>
353
- <reason>Waiting for npm install to complete</reason>
354
- [/tool]`,
355
- description: 'Pause for 2 minutes while packages are being installed'
356
- },
357
- {
358
- title: 'Brief pause for service startup',
359
- command: `[tool id="agentdelay"]
360
- <pause-duration>45</pause-duration>
361
- <reason>Allowing database service to start</reason>
362
- [/tool]`,
363
- description: 'Short pause to allow a service to fully initialize'
364
- },
365
- {
366
- title: 'Extended pause for build process',
367
- command: `[tool id="agentdelay"]
368
- <pause-duration>300</pause-duration>
369
- <reason>Waiting for large project compilation</reason>
370
- [/tool]`,
371
- description: 'Maximum duration pause for lengthy build operations'
372
- }
373
- ];
374
- }
375
-
376
- /**
377
- * Check if agent can be paused
378
- * @param {string} agentId - Agent identifier
379
- * @returns {Promise<Object>} Check result
380
- */
381
- async canPauseAgent(agentId) {
382
- if (!this.agentPool) {
383
- return {
384
- canPause: false,
385
- reason: 'Agent pool not available'
386
- };
387
- }
388
-
389
- try {
390
- const agent = await this.agentPool.getAgent(agentId);
391
-
392
- if (!agent) {
393
- return {
394
- canPause: false,
395
- reason: 'Agent not found'
396
- };
397
- }
398
-
399
- if (agent.status === AGENT_STATUS.PAUSED) {
400
- return {
401
- canPause: false,
402
- reason: 'Agent is already paused',
403
- pausedUntil: agent.pausedUntil
404
- };
405
- }
406
-
407
- return {
408
- canPause: true,
409
- currentStatus: agent.status
410
- };
411
-
412
- } catch (error) {
413
- return {
414
- canPause: false,
415
- reason: `Error checking agent status: ${error.message}`
416
- };
417
- }
418
- }
419
-
420
- /**
421
- * Get pause recommendations based on context
422
- * @param {Object} context - Execution context
423
- * @returns {Object} Pause recommendations
424
- */
425
- getPauseRecommendations(context) {
426
- const recommendations = {
427
- suggested: [],
428
- warnings: []
429
- };
430
-
431
- // Analyze context for pause suggestions
432
- if (context.lastCommand && typeof context.lastCommand === 'string') {
433
- const command = context.lastCommand.toLowerCase();
434
-
435
- if (command.includes('npm install') || command.includes('yarn install')) {
436
- recommendations.suggested.push({
437
- duration: 90,
438
- reason: 'Package installation typically takes 1-2 minutes',
439
- confidence: 'high'
440
- });
441
- }
442
-
443
- if (command.includes('docker build') || command.includes('docker run')) {
444
- recommendations.suggested.push({
445
- duration: 120,
446
- reason: 'Docker operations often require extended time',
447
- confidence: 'medium'
448
- });
449
- }
450
-
451
- if (command.includes('make') || command.includes('build') || command.includes('compile')) {
452
- recommendations.suggested.push({
453
- duration: 180,
454
- reason: 'Build/compilation processes can be time-intensive',
455
- confidence: 'medium'
456
- });
457
- }
458
-
459
- if (command.includes('git clone') || command.includes('git pull')) {
460
- recommendations.suggested.push({
461
- duration: 30,
462
- reason: 'Git operations usually complete quickly',
463
- confidence: 'high'
464
- });
465
- }
466
- }
467
-
468
- // Add warnings for very short or long pauses
469
- if (context.requestedDuration) {
470
- if (context.requestedDuration < 10) {
471
- recommendations.warnings.push('Very short pauses may not be necessary');
472
- }
473
-
474
- if (context.requestedDuration > 240) {
475
- recommendations.warnings.push('Consider if such a long pause is really needed');
476
- }
477
- }
478
-
479
- return recommendations;
480
- }
481
-
482
- /**
483
- * Enable/disable tool based on agent pool availability
484
- * @param {Object} agentPool - Agent pool instance
485
- */
486
- setAgentPool(agentPool) {
487
- this.agentPool = agentPool;
488
- this.isEnabled = !!agentPool;
489
-
490
- if (this.isEnabled) {
491
- this.logger?.info('Agent delay tool enabled with agent pool');
492
- } else {
493
- this.logger?.warn('Agent delay tool disabled - no agent pool available');
494
- }
495
- }
496
- }
497
-
1
+ /**
2
+ * AgentDelayTool - Allows agents to pause their activity for specified duration
3
+ *
4
+ * Purpose:
5
+ * - Pause agent activity during waiting periods
6
+ * - Prevent unnecessary message exchanges
7
+ * - Handle installation and startup delays
8
+ * - Manage agent status during long operations
9
+ */
10
+
11
+ import { BaseTool } from './baseTool.js';
12
+ import TagParser from '../utilities/tagParser.js';
13
+
14
+ import {
15
+ SYSTEM_DEFAULTS,
16
+ AGENT_STATUS
17
+ } from '../utilities/constants.js';
18
+
19
+ class AgentDelayTool extends BaseTool {
20
+ constructor(config = {}, logger = null, agentPool = null) {
21
+ super(config, logger);
22
+
23
+ this.agentPool = agentPool;
24
+ this.maxPauseDuration = config.maxDuration || SYSTEM_DEFAULTS.MAX_PAUSE_DURATION;
25
+ this.minPauseDuration = config.minDuration || 1;
26
+
27
+ // Tool metadata
28
+ this.requiresProject = false;
29
+ this.isAsync = false; // Synchronous - immediately updates agent status
30
+ }
31
+
32
+ /**
33
+ * Get tool description for LLM consumption
34
+ * @returns {string} Tool description
35
+ */
36
+ getDescription() {
37
+ return `
38
+ Agent Delay Tool: Pause agent activity for a specified duration to prevent unnecessary message exchanges during waiting periods.
39
+
40
+ USAGE:
41
+ \`\`\`json
42
+ {
43
+ "toolId": "agentdelay",
44
+ "duration": 30,
45
+ "reason": "Waiting for npm install to complete"
46
+ }
47
+ \`\`\`
48
+
49
+ PARAMETERS:
50
+ - duration: Number of seconds to pause (${this.minPauseDuration}-${this.maxPauseDuration}) - required
51
+ - reason: Optional explanation for the pause
52
+
53
+ USE CASES:
54
+ - After running 'npm install' or similar long-running commands
55
+ - Waiting for services to start up
56
+ - Allowing time for file system operations to complete
57
+ - Preventing rapid status checking loops
58
+ - During build processes or compilation
59
+
60
+ EXAMPLES:
61
+
62
+ 1. Basic pause for 1 minute:
63
+ \`\`\`json
64
+ {
65
+ "toolId": "agentdelay",
66
+ "duration": 60
67
+ }
68
+ \`\`\`
69
+
70
+ 2. Pause with reason:
71
+ \`\`\`json
72
+ {
73
+ "toolId": "agentdelay",
74
+ "duration": 120,
75
+ "reason": "Installing dependencies"
76
+ }
77
+ \`\`\`
78
+
79
+ 3. Brief pause for service startup:
80
+ \`\`\`json
81
+ {
82
+ "toolId": "agentdelay",
83
+ "duration": 30,
84
+ "reason": "Waiting for server startup"
85
+ }
86
+ \`\`\`
87
+
88
+ BEHAVIOR:
89
+ The agent will be marked as '${AGENT_STATUS.PAUSED}' and will not process new messages until the duration expires.
90
+ Other agents can still send messages, but they will be queued until the agent resumes.
91
+
92
+ IMPORTANT: Use this tool judiciously. Only pause when genuinely waiting for external processes.
93
+ Maximum pause duration: ${this.maxPauseDuration} seconds (${Math.floor(this.maxPauseDuration / 60)} minutes).
94
+ `;
95
+ }
96
+
97
+ /**
98
+ * Parse parameters from tool command content
99
+ * @param {string} content - Raw tool command content
100
+ * @returns {Object} Parsed parameters
101
+ */
102
+ parseParameters(content) {
103
+ try {
104
+ // Extract pause-duration and reason using TagParser
105
+ const durationMatches = TagParser.extractContent(content, 'pause-duration');
106
+ const reasonMatches = TagParser.extractContent(content, 'reason');
107
+
108
+ const duration = durationMatches.length > 0 ? parseInt(durationMatches[0], 10) : null;
109
+ const reason = reasonMatches.length > 0 ? reasonMatches[0].trim() : 'Agent pause requested';
110
+
111
+ return {
112
+ duration,
113
+ reason,
114
+ rawContent: content.trim()
115
+ };
116
+
117
+ } catch (error) {
118
+ throw new Error(`Failed to parse agent delay parameters: ${error.message}`, { cause: error });
119
+ }
120
+ }
121
+
122
+ /**
123
+ * Get required parameters
124
+ * @returns {Array<string>} Array of required parameter names
125
+ */
126
+ getRequiredParameters() {
127
+ return ['duration'];
128
+ }
129
+
130
+ /**
131
+ * Validate parameter types
132
+ * @param {Object} params - Parameters to validate
133
+ * @returns {Object} Validation result
134
+ */
135
+ validateParameterTypes(params) {
136
+ const errors = [];
137
+
138
+ if (params.duration !== null && params.duration !== undefined) {
139
+ if (typeof params.duration !== 'number' || isNaN(params.duration)) {
140
+ errors.push('pause-duration must be a valid number');
141
+ }
142
+ }
143
+
144
+ if (params.reason && typeof params.reason !== 'string') {
145
+ errors.push('reason must be a string');
146
+ }
147
+
148
+ return {
149
+ valid: errors.length === 0,
150
+ errors
151
+ };
152
+ }
153
+
154
+ /**
155
+ * Custom parameter validation
156
+ * @param {Object} params - Parameters to validate
157
+ * @returns {Object} Validation result
158
+ */
159
+ customValidateParameters(params) {
160
+ const errors = [];
161
+
162
+ if (params.duration === null || params.duration === undefined) {
163
+ errors.push('pause-duration is required');
164
+ } else {
165
+ if (params.duration < this.minPauseDuration) {
166
+ errors.push(`pause-duration must be at least ${this.minPauseDuration} second(s)`);
167
+ }
168
+
169
+ if (params.duration > this.maxPauseDuration) {
170
+ errors.push(`pause-duration cannot exceed ${this.maxPauseDuration} seconds (${Math.floor(this.maxPauseDuration / 60)} minutes)`);
171
+ }
172
+
173
+ if (!Number.isInteger(params.duration)) {
174
+ errors.push('pause-duration must be a whole number of seconds');
175
+ }
176
+ }
177
+
178
+ if (params.reason && params.reason.length > 200) {
179
+ errors.push('reason cannot exceed 200 characters');
180
+ }
181
+
182
+ return {
183
+ valid: errors.length === 0,
184
+ errors
185
+ };
186
+ }
187
+
188
+ /**
189
+ * Execute tool with parsed parameters
190
+ * @param {Object} params - Parsed parameters
191
+ * @param {Object} context - Execution context
192
+ * @returns {Promise<Object>} Execution result
193
+ */
194
+ async execute(params, context) {
195
+ const { duration, reason } = params;
196
+ const { agentId } = context;
197
+
198
+ if (!agentId) {
199
+ throw new Error('Agent ID is required for agent delay tool');
200
+ }
201
+
202
+ if (!this.agentPool) {
203
+ throw new Error('Agent pool not available - cannot pause agent');
204
+ }
205
+
206
+ try {
207
+ // Calculate pause end time
208
+ const pausedUntil = new Date(Date.now() + duration * 1000);
209
+
210
+ // Pause the agent via agent pool
211
+ const pauseResult = await this.agentPool.pauseAgent(agentId, pausedUntil, reason);
212
+
213
+ // Also set delayEndTime for the new scheduler architecture
214
+ const agent = await this.agentPool.getAgent(agentId);
215
+ if (agent) {
216
+ agent.delayEndTime = pausedUntil.toISOString();
217
+ await this.agentPool.persistAgentState(agentId);
218
+ }
219
+
220
+ if (!pauseResult.success) {
221
+ throw new Error(`Failed to pause agent: ${pauseResult.message || 'Unknown error'}`);
222
+ }
223
+
224
+ const result = {
225
+ success: true,
226
+ action: 'agent-pause',
227
+ agentId,
228
+ pauseDuration: duration,
229
+ pausedUntil: pausedUntil.toISOString(),
230
+ reason,
231
+ message: `Agent will resume activity in ${duration} second${duration !== 1 ? 's' : ''}`,
232
+ resumeTime: this.formatResumeTime(pausedUntil),
233
+ toolUsed: 'agent-delay'
234
+ };
235
+
236
+ this.logger?.info(`Agent paused via agent-delay tool: ${agentId}`, {
237
+ duration,
238
+ reason,
239
+ pausedUntil: pausedUntil.toISOString(),
240
+ toolUsage: true
241
+ });
242
+
243
+ return result;
244
+
245
+ } catch (error) {
246
+ this.logger?.error(`Agent delay tool execution failed: ${error.message}`, {
247
+ agentId,
248
+ duration,
249
+ reason,
250
+ error: error.stack
251
+ });
252
+
253
+ throw error;
254
+ }
255
+ }
256
+
257
+ /**
258
+ * Get supported actions for this tool
259
+ * @returns {Array<string>} Array of supported action names
260
+ */
261
+ getSupportedActions() {
262
+ return ['pause', 'delay'];
263
+ }
264
+
265
+ /**
266
+ * Get parameter schema for validation
267
+ * @returns {Object} Parameter schema
268
+ */
269
+ getParameterSchema() {
270
+ return {
271
+ type: 'object',
272
+ properties: {
273
+ duration: {
274
+ type: 'integer',
275
+ minimum: this.minPauseDuration,
276
+ maximum: this.maxPauseDuration,
277
+ description: 'Number of seconds to pause agent activity'
278
+ },
279
+ reason: {
280
+ type: 'string',
281
+ maxLength: 200,
282
+ description: 'Optional reason for the pause'
283
+ }
284
+ },
285
+ required: ['duration']
286
+ };
287
+ }
288
+
289
+ /**
290
+ * Get tool capabilities metadata
291
+ * @returns {Object} Enhanced capabilities object
292
+ */
293
+ getCapabilities() {
294
+ const baseCapabilities = super.getCapabilities();
295
+
296
+ return {
297
+ ...baseCapabilities,
298
+ pauseRange: {
299
+ min: this.minPauseDuration,
300
+ max: this.maxPauseDuration,
301
+ unit: 'seconds'
302
+ },
303
+ affects: 'agent-status',
304
+ interactsWithAgentPool: true,
305
+ useCases: [
306
+ 'installation-waiting',
307
+ 'service-startup',
308
+ 'file-operations',
309
+ 'build-processes',
310
+ 'compilation',
311
+ 'deployment-delays'
312
+ ]
313
+ };
314
+ }
315
+
316
+ /**
317
+ * Format resume time for human readability
318
+ * @private
319
+ */
320
+ formatResumeTime(resumeDate) {
321
+ const now = new Date();
322
+ const diffSeconds = Math.round((resumeDate.getTime() - now.getTime()) / 1000);
323
+
324
+ if (diffSeconds < 60) {
325
+ return `in ${diffSeconds} second${diffSeconds !== 1 ? 's' : ''}`;
326
+ } else if (diffSeconds < 3600) {
327
+ const minutes = Math.round(diffSeconds / 60);
328
+ return `in ${minutes} minute${minutes !== 1 ? 's' : ''}`;
329
+ } else {
330
+ const hours = Math.round(diffSeconds / 3600);
331
+ return `in ${hours} hour${hours !== 1 ? 's' : ''}`;
332
+ }
333
+ }
334
+
335
+ /**
336
+ * Get usage examples for documentation
337
+ * @returns {Array<Object>} Array of usage examples
338
+ */
339
+ getUsageExamples() {
340
+ return [
341
+ {
342
+ title: 'Basic pause for 30 seconds',
343
+ command: `[tool id="agentdelay"]
344
+ <pause-duration>30</pause-duration>
345
+ [/tool]`,
346
+ description: 'Simple 30-second pause without specific reason'
347
+ },
348
+ {
349
+ title: 'Pause during package installation',
350
+ command: `[tool id="agentdelay"]
351
+ <pause-duration>120</pause-duration>
352
+ <reason>Waiting for npm install to complete</reason>
353
+ [/tool]`,
354
+ description: 'Pause for 2 minutes while packages are being installed'
355
+ },
356
+ {
357
+ title: 'Brief pause for service startup',
358
+ command: `[tool id="agentdelay"]
359
+ <pause-duration>45</pause-duration>
360
+ <reason>Allowing database service to start</reason>
361
+ [/tool]`,
362
+ description: 'Short pause to allow a service to fully initialize'
363
+ },
364
+ {
365
+ title: 'Extended pause for build process',
366
+ command: `[tool id="agentdelay"]
367
+ <pause-duration>300</pause-duration>
368
+ <reason>Waiting for large project compilation</reason>
369
+ [/tool]`,
370
+ description: 'Maximum duration pause for lengthy build operations'
371
+ }
372
+ ];
373
+ }
374
+
375
+ /**
376
+ * Check if agent can be paused
377
+ * @param {string} agentId - Agent identifier
378
+ * @returns {Promise<Object>} Check result
379
+ */
380
+ async canPauseAgent(agentId) {
381
+ if (!this.agentPool) {
382
+ return {
383
+ canPause: false,
384
+ reason: 'Agent pool not available'
385
+ };
386
+ }
387
+
388
+ try {
389
+ const agent = await this.agentPool.getAgent(agentId);
390
+
391
+ if (!agent) {
392
+ return {
393
+ canPause: false,
394
+ reason: 'Agent not found'
395
+ };
396
+ }
397
+
398
+ if (agent.status === AGENT_STATUS.PAUSED) {
399
+ return {
400
+ canPause: false,
401
+ reason: 'Agent is already paused',
402
+ pausedUntil: agent.pausedUntil
403
+ };
404
+ }
405
+
406
+ return {
407
+ canPause: true,
408
+ currentStatus: agent.status
409
+ };
410
+
411
+ } catch (error) {
412
+ return {
413
+ canPause: false,
414
+ reason: `Error checking agent status: ${error.message}`
415
+ };
416
+ }
417
+ }
418
+
419
+ /**
420
+ * Get pause recommendations based on context
421
+ * @param {Object} context - Execution context
422
+ * @returns {Object} Pause recommendations
423
+ */
424
+ getPauseRecommendations(context) {
425
+ const recommendations = {
426
+ suggested: [],
427
+ warnings: []
428
+ };
429
+
430
+ // Analyze context for pause suggestions
431
+ if (context.lastCommand && typeof context.lastCommand === 'string') {
432
+ const command = context.lastCommand.toLowerCase();
433
+
434
+ if (command.includes('npm install') || command.includes('yarn install')) {
435
+ recommendations.suggested.push({
436
+ duration: 90,
437
+ reason: 'Package installation typically takes 1-2 minutes',
438
+ confidence: 'high'
439
+ });
440
+ }
441
+
442
+ if (command.includes('docker build') || command.includes('docker run')) {
443
+ recommendations.suggested.push({
444
+ duration: 120,
445
+ reason: 'Docker operations often require extended time',
446
+ confidence: 'medium'
447
+ });
448
+ }
449
+
450
+ if (command.includes('make') || command.includes('build') || command.includes('compile')) {
451
+ recommendations.suggested.push({
452
+ duration: 180,
453
+ reason: 'Build/compilation processes can be time-intensive',
454
+ confidence: 'medium'
455
+ });
456
+ }
457
+
458
+ if (command.includes('git clone') || command.includes('git pull')) {
459
+ recommendations.suggested.push({
460
+ duration: 30,
461
+ reason: 'Git operations usually complete quickly',
462
+ confidence: 'high'
463
+ });
464
+ }
465
+ }
466
+
467
+ // Add warnings for very short or long pauses
468
+ if (context.requestedDuration) {
469
+ if (context.requestedDuration < 10) {
470
+ recommendations.warnings.push('Very short pauses may not be necessary');
471
+ }
472
+
473
+ if (context.requestedDuration > 240) {
474
+ recommendations.warnings.push('Consider if such a long pause is really needed');
475
+ }
476
+ }
477
+
478
+ return recommendations;
479
+ }
480
+
481
+ /**
482
+ * Enable/disable tool based on agent pool availability
483
+ * @param {Object} agentPool - Agent pool instance
484
+ */
485
+ setAgentPool(agentPool) {
486
+ this.agentPool = agentPool;
487
+ this.isEnabled = !!agentPool;
488
+
489
+ if (this.isEnabled) {
490
+ this.logger?.info('Agent delay tool enabled with agent pool');
491
+ } else {
492
+ this.logger?.warn('Agent delay tool disabled - no agent pool available');
493
+ }
494
+ }
495
+ }
496
+
498
497
  export default AgentDelayTool;