@jshookmcp/jshook 0.2.3 → 0.2.6

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 (583) hide show
  1. package/README.md +14 -5
  2. package/README.zh.md +18 -3
  3. package/dist/packages/extension-sdk/src/bridges/shared.js +2 -2
  4. package/dist/packages/extension-sdk/src/plugin.d.ts +5 -0
  5. package/dist/packages/extension-sdk/src/plugin.js +119 -33
  6. package/dist/packages/extension-sdk/src/workflow.d.ts +171 -0
  7. package/dist/packages/extension-sdk/src/workflow.js +272 -0
  8. package/dist/src/config/search-defaults.js +161 -0
  9. package/dist/src/constants.d.ts +3 -0
  10. package/dist/src/constants.js +4 -1
  11. package/dist/src/index.d.ts +1 -1
  12. package/dist/src/index.js +13 -17
  13. package/dist/src/modules/analyzer/CodeAnalyzer.d.ts +1 -3
  14. package/dist/src/modules/analyzer/CodeAnalyzer.js +16 -28
  15. package/dist/src/modules/analyzer/CodeAnalyzerDataFlow.d.ts +1 -2
  16. package/dist/src/modules/analyzer/CodeAnalyzerDataFlow.js +1 -45
  17. package/dist/src/modules/analyzer/IntelligentAnalyzer.d.ts +1 -37
  18. package/dist/src/modules/analyzer/IntelligentAnalyzer.js +9 -142
  19. package/dist/src/modules/analyzer/PatternDetector.js +3 -3
  20. package/dist/src/modules/analyzer/PatternDetectorAuthPatterns.js +1 -1
  21. package/dist/src/modules/browser/BrowserDiscovery.js +2 -2
  22. package/dist/src/modules/browser/BrowserModeManager.js +11 -10
  23. package/dist/src/modules/browser/BrowserPool.d.ts +49 -0
  24. package/dist/src/modules/browser/BrowserPool.js +288 -0
  25. package/dist/src/modules/browser/TabRegistry.js +2 -2
  26. package/dist/src/modules/browser/UnifiedBrowserManager.d.ts +1 -0
  27. package/dist/src/modules/browser/UnifiedBrowserManager.js +18 -3
  28. package/dist/src/modules/captcha/AICaptchaDetector.d.ts +1 -10
  29. package/dist/src/modules/captcha/AICaptchaDetector.js +7 -201
  30. package/dist/src/modules/collector/CodeCollector.js +4 -5
  31. package/dist/src/modules/collector/DOMInspector.js +48 -58
  32. package/dist/src/modules/collector/PageController.d.ts +17 -4
  33. package/dist/src/modules/collector/PageController.js +2 -5
  34. package/dist/src/modules/collector/PageScriptCollectors.js +3 -3
  35. package/dist/src/modules/crypto/CryptoDetector.d.ts +1 -4
  36. package/dist/src/modules/crypto/CryptoDetector.js +2 -42
  37. package/dist/src/modules/crypto/CryptoRules.js +1 -1
  38. package/dist/src/modules/debugger/BlackboxManager.js +1 -1
  39. package/dist/src/modules/debugger/DebuggerManager.impl.core.scope.js +1 -1
  40. package/dist/src/modules/debugger/ScriptManager.impl.extract-function-tree.js +4 -2
  41. package/dist/src/modules/debugger/WatchExpressionManager.js +1 -1
  42. package/dist/src/modules/deobfuscator/AdvancedDeobfuscator.d.ts +5 -0
  43. package/dist/src/modules/deobfuscator/AdvancedDeobfuscator.js +43 -2
  44. package/dist/src/modules/deobfuscator/Deobfuscator.d.ts +1 -4
  45. package/dist/src/modules/deobfuscator/Deobfuscator.js +9 -39
  46. package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.d.ts +0 -3
  47. package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.js +2 -8
  48. package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.restore.d.ts +1 -2
  49. package/dist/src/modules/deobfuscator/JSVMPDeobfuscator.restore.js +3 -55
  50. package/dist/src/modules/deobfuscator/JScramblerDeobfuscator.js +3 -4
  51. package/dist/src/modules/deobfuscator/VMDeobfuscator.d.ts +2 -10
  52. package/dist/src/modules/deobfuscator/VMDeobfuscator.js +3 -128
  53. package/dist/src/modules/deobfuscator/webcrack.js +15 -2
  54. package/dist/src/modules/emulator/AIEnvironmentAnalyzer.d.ts +5 -8
  55. package/dist/src/modules/emulator/AIEnvironmentAnalyzer.js +10 -102
  56. package/dist/src/modules/emulator/EnvironmentEmulator.d.ts +1 -5
  57. package/dist/src/modules/emulator/EnvironmentEmulator.js +7 -91
  58. package/dist/src/modules/emulator/EnvironmentEmulatorFetch.js +58 -61
  59. package/dist/src/modules/emulator/templates/chrome-env.d.ts +17 -7
  60. package/dist/src/modules/emulator/templates/chrome-env.js +14 -7
  61. package/dist/src/modules/external/ExternalToolRunner.js +25 -22
  62. package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.compose.js +5 -5
  63. package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.network.js +311 -311
  64. package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.runtime.js +410 -410
  65. package/dist/src/modules/hook/HookGeneratorBuilders.core.generators.storage.js +122 -122
  66. package/dist/src/modules/monitor/ConsoleMonitor.impl.core.class.d.ts +13 -0
  67. package/dist/src/modules/monitor/ConsoleMonitor.impl.core.class.js +42 -0
  68. package/dist/src/modules/monitor/ConsoleMonitor.impl.core.dynamic.js +194 -194
  69. package/dist/src/modules/monitor/FetchInterceptor.d.ts +46 -0
  70. package/dist/src/modules/monitor/FetchInterceptor.js +191 -0
  71. package/dist/src/modules/monitor/PerformanceMonitor.js +8 -7
  72. package/dist/src/modules/monitor/PlaywrightNetworkMonitor.js +62 -62
  73. package/dist/src/modules/process/BaseMemoryManager.d.ts +1 -1
  74. package/dist/src/modules/process/LinuxProcessManager.js +2 -0
  75. package/dist/src/modules/process/MacProcessManager.js +25 -25
  76. package/dist/src/modules/process/MemoryManager.d.ts +1 -1
  77. package/dist/src/modules/process/MemoryManager.js +2 -2
  78. package/dist/src/modules/process/memory/AuditTrail.js +1 -1
  79. package/dist/src/modules/process/memory/availability.js +49 -49
  80. package/dist/src/modules/process/memory/injector.js +185 -185
  81. package/dist/src/modules/process/memory/reader.js +85 -53
  82. package/dist/src/modules/process/memory/regions.dump.js +51 -51
  83. package/dist/src/modules/process/memory/regions.enumerate.js +108 -108
  84. package/dist/src/modules/process/memory/regions.modules.js +80 -80
  85. package/dist/src/modules/process/memory/regions.protection.js +148 -115
  86. package/dist/src/modules/process/memory/scanner.d.ts +5 -1
  87. package/dist/src/modules/process/memory/scanner.darwin.js +98 -41
  88. package/dist/src/modules/process/memory/scanner.js +88 -4
  89. package/dist/src/modules/process/memory/scanner.windows.js +124 -124
  90. package/dist/src/modules/process/memory/writer.js +98 -58
  91. package/dist/src/modules/security/ExecutionSandbox.js +51 -52
  92. package/dist/src/modules/stealth/FingerprintManager.js +1 -1
  93. package/dist/src/modules/stealth/StealthScripts.d.ts +1 -0
  94. package/dist/src/modules/stealth/StealthScripts.js +18 -13
  95. package/dist/src/modules/stealth/StealthVerifier.js +1 -3
  96. package/dist/src/modules/symbolic/JSVMPSymbolicExecutor.d.ts +14 -0
  97. package/dist/src/modules/symbolic/JSVMPSymbolicExecutor.js +181 -2
  98. package/dist/src/modules/trace/TraceDB.js +75 -69
  99. package/dist/src/modules/trace/TraceRecorder.js +1 -5
  100. package/dist/src/native/AntiCheatDetector.js +67 -16
  101. package/dist/src/native/CodeInjector.js +3 -3
  102. package/dist/src/native/HardwareBreakpoint.js +24 -15
  103. package/dist/src/native/HeapAnalyzer.js +2 -2
  104. package/dist/src/native/MemoryController.js +1 -1
  105. package/dist/src/native/MemoryScanSession.js +2 -2
  106. package/dist/src/native/MemoryScanner.js +4 -8
  107. package/dist/src/native/NativeMemoryManager.impl.js +2 -2
  108. package/dist/src/native/PEAnalyzer.js +14 -15
  109. package/dist/src/native/PointerChainEngine.js +2 -4
  110. package/dist/src/native/ScriptLoader.js +4 -9
  111. package/dist/src/native/Speedhack.js +1 -1
  112. package/dist/src/native/StructureAnalyzer.js +52 -33
  113. package/dist/src/native/Win32API.d.ts +1 -0
  114. package/dist/src/native/Win32API.js +13 -0
  115. package/dist/src/native/Win32Debug.js +19 -19
  116. package/dist/src/native/platform/darwin/DarwinAPI.d.ts +2 -0
  117. package/dist/src/native/platform/darwin/DarwinAPI.js +8 -0
  118. package/dist/src/native/platform/darwin/DarwinMemoryProvider.js +6 -1
  119. package/dist/src/server/MCPServer.context.d.ts +3 -1
  120. package/dist/src/server/MCPServer.d.ts +2 -1
  121. package/dist/src/server/MCPServer.domain.d.ts +1 -1
  122. package/dist/src/server/MCPServer.domain.js +81 -16
  123. package/dist/src/server/MCPServer.js +41 -14
  124. package/dist/src/server/MCPServer.resources.d.ts +2 -0
  125. package/dist/src/server/MCPServer.resources.js +91 -0
  126. package/dist/src/server/MCPServer.search.handlers.call.js +2 -1
  127. package/dist/src/server/MCPServer.search.helpers.js +1 -1
  128. package/dist/src/server/MCPServer.transport.js +12 -0
  129. package/dist/src/server/ToolCallContextGuard.js +8 -0
  130. package/dist/src/server/ToolRouter.d.ts +25 -9
  131. package/dist/src/server/ToolRouter.intent.d.ts +26 -0
  132. package/dist/src/server/ToolRouter.intent.js +77 -0
  133. package/dist/src/server/ToolRouter.js +103 -284
  134. package/dist/src/server/ToolRouter.policy.d.ts +22 -0
  135. package/dist/src/server/ToolRouter.policy.js +163 -0
  136. package/dist/src/server/ToolRouter.probe.d.ts +17 -0
  137. package/dist/src/server/ToolRouter.probe.js +103 -0
  138. package/dist/src/server/ToolRouter.renderer.d.ts +9 -0
  139. package/dist/src/server/ToolRouter.renderer.js +52 -0
  140. package/dist/src/server/activation/ActivationController.js +15 -12
  141. package/dist/src/server/activation/CompoundConditionEngine.js +1 -1
  142. package/dist/src/server/activation/PredictiveBooster.js +1 -3
  143. package/dist/src/server/domains/analysis/definitions.js +155 -655
  144. package/dist/src/server/domains/analysis/handlers.impl.js +26 -20
  145. package/dist/src/server/domains/analysis/handlers.web-tools.js +2 -1
  146. package/dist/src/server/domains/analysis/manifest.js +6 -4
  147. package/dist/src/server/domains/antidebug/definitions.js +25 -111
  148. package/dist/src/server/domains/browser/definitions.tools.advanced.js +59 -88
  149. package/dist/src/server/domains/browser/definitions.tools.behavior.js +120 -227
  150. package/dist/src/server/domains/browser/definitions.tools.page-core.js +210 -439
  151. package/dist/src/server/domains/browser/definitions.tools.page-system.js +108 -250
  152. package/dist/src/server/domains/browser/definitions.tools.runtime.js +98 -211
  153. package/dist/src/server/domains/browser/definitions.tools.security.js +194 -339
  154. package/dist/src/server/domains/browser/handlers/camoufox-browser.js +3 -2
  155. package/dist/src/server/domains/browser/handlers/captcha-solver.js +3 -3
  156. package/dist/src/server/domains/browser/handlers/dom-query.js +2 -1
  157. package/dist/src/server/domains/browser/handlers/framework-state.js +27 -9
  158. package/dist/src/server/domains/browser/handlers/indexeddb-dump.js +21 -20
  159. package/dist/src/server/domains/browser/handlers/script-management.js +1 -1
  160. package/dist/src/server/domains/browser/handlers/stealth-injection.d.ts +1 -0
  161. package/dist/src/server/domains/browser/handlers/stealth-injection.js +3 -0
  162. package/dist/src/server/domains/browser/handlers.impl.d.ts +1 -2
  163. package/dist/src/server/domains/browser/handlers.impl.js +2 -3
  164. package/dist/src/server/domains/browser/manifest.js +37 -13
  165. package/dist/src/server/domains/coordination/definitions.js +50 -216
  166. package/dist/src/server/domains/coordination/index.d.ts +2 -1
  167. package/dist/src/server/domains/coordination/index.js +1 -0
  168. package/dist/src/server/domains/debugger/definitions.tools.advanced.js +72 -189
  169. package/dist/src/server/domains/debugger/definitions.tools.core.js +114 -288
  170. package/dist/src/server/domains/debugger/manifest.js +9 -2
  171. package/dist/src/server/domains/encoding/definitions.js +43 -153
  172. package/dist/src/server/domains/encoding/handlers.base.js +2 -2
  173. package/dist/src/server/domains/evidence/definitions.d.ts +2 -0
  174. package/dist/src/server/domains/evidence/definitions.js +42 -0
  175. package/dist/src/server/domains/evidence/handlers.d.ts +582 -0
  176. package/dist/src/server/domains/evidence/handlers.js +60 -0
  177. package/dist/src/server/domains/evidence/index.d.ts +2 -0
  178. package/dist/src/server/domains/evidence/index.js +2 -0
  179. package/dist/src/server/domains/evidence/manifest.d.ts +63 -0
  180. package/dist/src/server/domains/evidence/manifest.js +78 -0
  181. package/dist/src/server/domains/graphql/definitions.js +53 -141
  182. package/dist/src/server/domains/graphql/handlers.impl.core.runtime.replay.js +92 -114
  183. package/dist/src/server/domains/graphql/handlers.impl.core.runtime.shared.js +77 -77
  184. package/dist/src/server/domains/hooks/ai-handlers.d.ts +0 -7
  185. package/dist/src/server/domains/hooks/ai-handlers.js +1 -67
  186. package/dist/src/server/domains/hooks/definitions.js +69 -335
  187. package/dist/src/server/domains/hooks/manifest.d.ts +1 -1
  188. package/dist/src/server/domains/hooks/manifest.js +1 -2
  189. package/dist/src/server/domains/instrumentation/definitions.d.ts +2 -0
  190. package/dist/src/server/domains/instrumentation/definitions.js +99 -0
  191. package/dist/src/server/domains/instrumentation/handlers.d.ts +78 -0
  192. package/dist/src/server/domains/instrumentation/handlers.js +206 -0
  193. package/dist/src/server/domains/instrumentation/index.d.ts +2 -0
  194. package/dist/src/server/domains/instrumentation/index.js +2 -0
  195. package/dist/src/server/domains/instrumentation/manifest.d.ts +63 -0
  196. package/dist/src/server/domains/instrumentation/manifest.js +114 -0
  197. package/dist/src/server/domains/macro/definitions.js +16 -43
  198. package/dist/src/server/domains/maintenance/definitions.js +60 -219
  199. package/dist/src/server/domains/maintenance/handlers.extensions.js +78 -20
  200. package/dist/src/server/domains/memory/definitions.js +387 -559
  201. package/dist/src/server/domains/memory/handlers/hooks.d.ts +55 -0
  202. package/dist/src/server/domains/memory/handlers/hooks.js +115 -0
  203. package/dist/src/server/domains/memory/handlers/integrity.d.ts +77 -0
  204. package/dist/src/server/domains/memory/handlers/integrity.js +180 -0
  205. package/dist/src/server/domains/memory/handlers/pointer-chain.d.ts +29 -0
  206. package/dist/src/server/domains/memory/handlers/pointer-chain.js +82 -0
  207. package/dist/src/server/domains/memory/handlers/readwrite.d.ts +41 -0
  208. package/dist/src/server/domains/memory/handlers/readwrite.js +78 -0
  209. package/dist/src/server/domains/memory/handlers/scan.d.ts +35 -0
  210. package/dist/src/server/domains/memory/handlers/scan.js +97 -0
  211. package/dist/src/server/domains/memory/handlers/session.d.ts +23 -0
  212. package/dist/src/server/domains/memory/handlers/session.js +49 -0
  213. package/dist/src/server/domains/memory/handlers/structure.d.ts +29 -0
  214. package/dist/src/server/domains/memory/handlers/structure.js +74 -0
  215. package/dist/src/server/domains/memory/handlers.impl.d.ts +49 -54
  216. package/dist/src/server/domains/memory/handlers.impl.js +63 -494
  217. package/dist/src/server/domains/memory/manifest.js +236 -64
  218. package/dist/src/server/domains/native-bridge/definitions.js +54 -192
  219. package/dist/src/server/domains/native-bridge/index.d.ts +1 -0
  220. package/dist/src/server/domains/native-bridge/index.js +2 -1
  221. package/dist/src/server/domains/network/auth-extractor.js +1 -1
  222. package/dist/src/server/domains/network/definitions.js +175 -578
  223. package/dist/src/server/domains/network/handlers.base.core.d.ts +64 -0
  224. package/dist/src/server/domains/network/handlers.base.core.js +623 -0
  225. package/dist/src/server/domains/network/handlers.base.d.ts +2 -124
  226. package/dist/src/server/domains/network/handlers.base.js +3 -878
  227. package/dist/src/server/domains/network/handlers.base.performance.d.ts +63 -0
  228. package/dist/src/server/domains/network/handlers.base.performance.js +193 -0
  229. package/dist/src/server/domains/network/handlers.base.types.d.ts +42 -0
  230. package/dist/src/server/domains/network/handlers.base.types.js +89 -0
  231. package/dist/src/server/domains/network/handlers.impl.core.runtime.d.ts +1 -1
  232. package/dist/src/server/domains/network/handlers.impl.core.runtime.intercept.d.ts +21 -0
  233. package/dist/src/server/domains/network/handlers.impl.core.runtime.intercept.js +186 -0
  234. package/dist/src/server/domains/network/handlers.impl.core.runtime.js +1 -1
  235. package/dist/src/server/domains/network/manifest.js +15 -0
  236. package/dist/src/server/domains/network/replay.js +1 -4
  237. package/dist/src/server/domains/platform/definitions.js +121 -112
  238. package/dist/src/server/domains/platform/handlers/bridge-handlers.d.ts +4 -0
  239. package/dist/src/server/domains/platform/handlers/bridge-handlers.js +193 -4
  240. package/dist/src/server/domains/platform/handlers/electron-asar-helpers.js +26 -6
  241. package/dist/src/server/domains/platform/handlers/electron-dual-cdp.d.ts +3 -0
  242. package/dist/src/server/domains/platform/handlers/electron-dual-cdp.js +170 -0
  243. package/dist/src/server/domains/platform/handlers/electron-fuse-handler.d.ts +3 -0
  244. package/dist/src/server/domains/platform/handlers/electron-fuse-handler.js +193 -0
  245. package/dist/src/server/domains/platform/handlers/electron-handlers.d.ts +6 -0
  246. package/dist/src/server/domains/platform/handlers/electron-handlers.js +95 -2
  247. package/dist/src/server/domains/platform/handlers/electron-ipc-sniffer.d.ts +2 -0
  248. package/dist/src/server/domains/platform/handlers/electron-ipc-sniffer.js +370 -0
  249. package/dist/src/server/domains/platform/handlers/electron-userdata-handler.d.ts +2 -0
  250. package/dist/src/server/domains/platform/handlers/electron-userdata-handler.js +78 -0
  251. package/dist/src/server/domains/platform/handlers/miniapp-handlers.js +3 -3
  252. package/dist/src/server/domains/platform/handlers/v8-bytecode-handler.d.ts +2 -0
  253. package/dist/src/server/domains/platform/handlers/v8-bytecode-handler.js +207 -0
  254. package/dist/src/server/domains/platform/handlers.d.ts +48 -0
  255. package/dist/src/server/domains/platform/handlers.js +29 -0
  256. package/dist/src/server/domains/platform/manifest.js +38 -0
  257. package/dist/src/server/domains/process/definitions.js +163 -647
  258. package/dist/src/server/domains/process/handlers.base.d.ts +3 -95
  259. package/dist/src/server/domains/process/handlers.base.js +7 -462
  260. package/dist/src/server/domains/process/handlers.base.process.d.ts +61 -0
  261. package/dist/src/server/domains/process/handlers.base.process.js +417 -0
  262. package/dist/src/server/domains/process/handlers.base.types.d.ts +57 -0
  263. package/dist/src/server/domains/process/handlers.base.types.js +50 -0
  264. package/dist/src/server/domains/process/handlers.impl.core.runtime.inject.js +18 -16
  265. package/dist/src/server/domains/process/manifest.js +6 -1
  266. package/dist/src/server/domains/sandbox/definitions.js +11 -33
  267. package/dist/src/server/domains/sandbox/handlers.js +8 -3
  268. package/dist/src/server/domains/shared/ResponseBuilder.d.ts +209 -0
  269. package/dist/src/server/domains/shared/ResponseBuilder.js +48 -0
  270. package/dist/src/server/domains/shared/modules.d.ts +0 -2
  271. package/dist/src/server/domains/shared/modules.js +0 -1
  272. package/dist/src/server/domains/shared-state-board/definitions.d.ts +2 -0
  273. package/dist/src/server/domains/shared-state-board/definitions.js +78 -0
  274. package/dist/src/server/domains/shared-state-board/handlers.impl.d.ts +58 -0
  275. package/dist/src/server/domains/shared-state-board/handlers.impl.js +419 -0
  276. package/dist/src/server/domains/shared-state-board/index.d.ts +2 -0
  277. package/dist/src/server/domains/shared-state-board/index.js +2 -0
  278. package/dist/src/server/domains/shared-state-board/manifest.d.ts +57 -0
  279. package/dist/src/server/domains/shared-state-board/manifest.js +74 -0
  280. package/dist/src/server/domains/sourcemap/definitions.js +27 -111
  281. package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-common.js +7 -2
  282. package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-main.js +1 -1
  283. package/dist/src/server/domains/sourcemap/handlers.impl.sourcemap-parse-base.js +1 -1
  284. package/dist/src/server/domains/sourcemap/manifest.d.ts +1 -1
  285. package/dist/src/server/domains/sourcemap/manifest.js +1 -1
  286. package/dist/src/server/domains/streaming/definitions.js +36 -148
  287. package/dist/src/server/domains/streaming/handlers.impl.streaming-sse.js +163 -164
  288. package/dist/src/server/domains/streaming/handlers.impl.streaming-ws.js +1 -1
  289. package/dist/src/server/domains/trace/TraceSummarizer.js +8 -5
  290. package/dist/src/server/domains/trace/definitions.tools.js +51 -206
  291. package/dist/src/server/domains/trace/handlers.js +10 -12
  292. package/dist/src/server/domains/trace/index.d.ts +2 -1
  293. package/dist/src/server/domains/trace/index.js +2 -1
  294. package/dist/src/server/domains/trace/manifest.js +15 -3
  295. package/dist/src/server/domains/transform/definitions.js +50 -210
  296. package/dist/src/server/domains/transform/handlers.impl.transform-base.js +108 -108
  297. package/dist/src/server/domains/transform/handlers.impl.transform-crypto.js +18 -19
  298. package/dist/src/server/domains/transform/manifest.d.ts +1 -1
  299. package/dist/src/server/domains/transform/manifest.js +1 -1
  300. package/dist/src/server/domains/wasm/definitions.js +55 -232
  301. package/dist/src/server/domains/wasm/handlers.js +1 -1
  302. package/dist/src/server/domains/workflow/definitions.js +144 -414
  303. package/dist/src/server/domains/workflow/handlers.impl.workflow-account-bundle.js +1 -1
  304. package/dist/src/server/domains/workflow/handlers.impl.workflow-api.js +51 -51
  305. package/dist/src/server/domains/workflow/handlers.impl.workflow-base.d.ts +2 -0
  306. package/dist/src/server/domains/workflow/handlers.impl.workflow-base.js +126 -87
  307. package/dist/src/server/domains/workflow/handlers.impl.workflow-batch.js +5 -5
  308. package/dist/src/server/evidence/ReverseEvidenceGraph.d.ts +20 -0
  309. package/dist/src/server/evidence/ReverseEvidenceGraph.js +208 -0
  310. package/dist/src/server/evidence/index.d.ts +2 -0
  311. package/dist/src/server/evidence/index.js +1 -0
  312. package/dist/src/server/evidence/types.d.ts +22 -0
  313. package/dist/src/server/evidence/types.js +1 -0
  314. package/dist/src/server/extensions/ExtensionManager.d.ts +1 -0
  315. package/dist/src/server/extensions/ExtensionManager.discovery.js +72 -9
  316. package/dist/src/server/extensions/ExtensionManager.integrity.js +1 -1
  317. package/dist/src/server/extensions/ExtensionManager.js +193 -40
  318. package/dist/src/server/extensions/ExtensionManager.roots.d.ts +1 -1
  319. package/dist/src/server/extensions/ExtensionManager.roots.js +4 -4
  320. package/dist/src/server/extensions/plugin-config.js +1 -1
  321. package/dist/src/server/extensions/plugin-env.d.ts +1 -1
  322. package/dist/src/server/extensions/plugin-env.js +10 -4
  323. package/dist/src/server/extensions/types.d.ts +17 -0
  324. package/dist/src/server/extensions/types.js +1 -1
  325. package/dist/src/server/http/SseStream.d.ts +21 -0
  326. package/dist/src/server/http/SseStream.js +129 -0
  327. package/dist/src/server/instrumentation/EvidenceGraphBridge.d.ts +13 -0
  328. package/dist/src/server/instrumentation/EvidenceGraphBridge.js +150 -0
  329. package/dist/src/server/instrumentation/InstrumentationSession.d.ts +60 -0
  330. package/dist/src/server/instrumentation/InstrumentationSession.js +269 -0
  331. package/dist/src/server/instrumentation/index.d.ts +2 -0
  332. package/dist/src/server/instrumentation/index.js +2 -0
  333. package/dist/src/server/instrumentation/types.d.ts +62 -0
  334. package/dist/src/server/instrumentation/types.js +7 -0
  335. package/dist/src/server/macros/MacroConfigLoader.d.ts +6 -5
  336. package/dist/src/server/macros/MacroConfigLoader.js +61 -59
  337. package/dist/src/server/macros/MacroRunner.js +6 -2
  338. package/dist/src/server/macros/builtins/index.d.ts +2 -3
  339. package/dist/src/server/macros/builtins/index.js +51 -7
  340. package/dist/src/server/plugins/PluginContract.d.ts +1 -1
  341. package/dist/src/server/registry/contracts.d.ts +1 -1
  342. package/dist/src/server/registry/discovery.js +5 -4
  343. package/dist/src/server/registry/ensure-browser-core.js +0 -3
  344. package/dist/src/server/registry/index.js +4 -4
  345. package/dist/src/server/registry/tool-builder.d.ts +46 -0
  346. package/dist/src/server/registry/tool-builder.js +105 -0
  347. package/dist/src/server/sandbox/QuickJSSandbox.js +16 -5
  348. package/dist/src/server/sandbox/SandboxHelpers.js +250 -250
  349. package/dist/src/server/search/EmbeddingWorker.js +5 -3
  350. package/dist/src/server/search/FeedbackTracker.d.ts +9 -0
  351. package/dist/src/server/search/FeedbackTracker.js +26 -0
  352. package/dist/src/server/search/QueryNormalizer.d.ts +6 -0
  353. package/dist/src/server/search/QueryNormalizer.js +94 -0
  354. package/dist/src/server/search/ToolSearchEngineImpl.d.ts +2 -3
  355. package/dist/src/server/search/ToolSearchEngineImpl.js +38 -88
  356. package/dist/src/server/teams/TeamManager.d.ts +43 -0
  357. package/dist/src/server/teams/TeamManager.js +238 -0
  358. package/dist/src/server/teams/index.d.ts +1 -0
  359. package/dist/src/server/teams/index.js +1 -0
  360. package/dist/src/server/workflows/WorkflowContract.d.ts +44 -4
  361. package/dist/src/server/workflows/WorkflowContract.js +52 -0
  362. package/dist/src/server/workflows/WorkflowEngine.d.ts +1 -0
  363. package/dist/src/server/workflows/WorkflowEngine.js +314 -4
  364. package/dist/src/types/config.d.ts +0 -14
  365. package/dist/src/types/deobfuscator.d.ts +1 -1
  366. package/dist/src/types/index.d.ts +1 -1
  367. package/dist/src/utils/DetailedDataManager.js +2 -0
  368. package/dist/src/utils/RingBuffer.js +5 -5
  369. package/dist/src/utils/TokenBudgetManager.js +1 -1
  370. package/dist/src/utils/UnifiedCacheManager.js +1 -1
  371. package/dist/src/utils/artifactRetention.js +2 -2
  372. package/dist/src/utils/betterSqlite3.d.ts +11 -0
  373. package/dist/src/utils/betterSqlite3.js +88 -0
  374. package/dist/src/utils/browserExecutable.js +2 -2
  375. package/dist/src/utils/cache/CachedDecorator.d.ts +8 -0
  376. package/dist/src/utils/cache/CachedDecorator.js +55 -0
  377. package/dist/src/utils/cache/PersistentCache.d.ts +33 -0
  378. package/dist/src/utils/cache/PersistentCache.js +246 -0
  379. package/dist/src/utils/cache/index.d.ts +2 -0
  380. package/dist/src/utils/cache/index.js +2 -0
  381. package/dist/src/utils/cliFastPath.js +5 -8
  382. package/dist/src/utils/config.js +4 -26
  383. package/dist/src/utils/environmentDoctor.js +138 -11
  384. package/dist/src/utils/outputPaths.js +16 -9
  385. package/dist/src/utils/parallel.js +1 -3
  386. package/package.json +82 -81
  387. package/scripts/postinstall.cjs +54 -27
  388. package/workflows/.gitkeep +0 -0
  389. package/workflows/anti-bot-diagnoser/.jshook-install.json +14 -0
  390. package/workflows/anti-bot-diagnoser/LICENSE +21 -0
  391. package/workflows/anti-bot-diagnoser/README.md +105 -0
  392. package/workflows/anti-bot-diagnoser/docs/agent-recipes.md +44 -0
  393. package/workflows/anti-bot-diagnoser/meta.yaml +6 -0
  394. package/workflows/anti-bot-diagnoser/package.json +22 -0
  395. package/workflows/anti-bot-diagnoser/tsconfig.json +15 -0
  396. package/workflows/anti-bot-diagnoser/workflow.ts +224 -0
  397. package/workflows/api-openapi-probe/.jshook-install.json +14 -0
  398. package/workflows/api-openapi-probe/meta.yaml +6 -0
  399. package/workflows/api-openapi-probe/package.json +22 -0
  400. package/workflows/api-openapi-probe/pnpm-lock.yaml +819 -0
  401. package/workflows/api-openapi-probe/tsconfig.json +15 -0
  402. package/workflows/api-openapi-probe/workflow.ts +40 -0
  403. package/workflows/api-probe-batch/.jshook-install.json +14 -0
  404. package/workflows/api-probe-batch/LICENSE +21 -0
  405. package/workflows/api-probe-batch/README.md +45 -0
  406. package/workflows/api-probe-batch/meta.yaml +4 -0
  407. package/workflows/api-probe-batch/package.json +23 -0
  408. package/workflows/api-probe-batch/tsconfig.json +16 -0
  409. package/workflows/api-probe-batch/workflow.ts +111 -0
  410. package/workflows/auth-bootstrap/.jshook-install.json +14 -0
  411. package/workflows/auth-bootstrap/LICENSE +21 -0
  412. package/workflows/auth-bootstrap/README.md +74 -0
  413. package/workflows/auth-bootstrap/meta.yaml +4 -0
  414. package/workflows/auth-bootstrap/package.json +23 -0
  415. package/workflows/auth-bootstrap/tsconfig.json +16 -0
  416. package/workflows/auth-bootstrap/workflow.ts +141 -0
  417. package/workflows/auth-extract/.jshook-install.json +14 -0
  418. package/workflows/auth-extract/meta.yaml +6 -0
  419. package/workflows/auth-extract/package.json +22 -0
  420. package/workflows/auth-extract/pnpm-lock.yaml +819 -0
  421. package/workflows/auth-extract/tsconfig.json +15 -0
  422. package/workflows/auth-extract/workflow.ts +36 -0
  423. package/workflows/auth-surface-mapper/.jshook-install.json +14 -0
  424. package/workflows/auth-surface-mapper/meta.yaml +6 -0
  425. package/workflows/auth-surface-mapper/package.json +22 -0
  426. package/workflows/auth-surface-mapper/pnpm-lock.yaml +819 -0
  427. package/workflows/auth-surface-mapper/tsconfig.json +15 -0
  428. package/workflows/auth-surface-mapper/workflow.ts +104 -0
  429. package/workflows/batch-register/.jshook-install.json +14 -0
  430. package/workflows/batch-register/LICENSE +21 -0
  431. package/workflows/batch-register/README.md +39 -0
  432. package/workflows/batch-register/meta.yaml +4 -0
  433. package/workflows/batch-register/package.json +23 -0
  434. package/workflows/batch-register/tsconfig.json +16 -0
  435. package/workflows/batch-register/workflow.ts +67 -0
  436. package/workflows/bundle-recovery/.jshook-install.json +14 -0
  437. package/workflows/bundle-recovery/LICENSE +21 -0
  438. package/workflows/bundle-recovery/README.md +105 -0
  439. package/workflows/bundle-recovery/docs/agent-recipes.md +44 -0
  440. package/workflows/bundle-recovery/meta.yaml +6 -0
  441. package/workflows/bundle-recovery/package.json +22 -0
  442. package/workflows/bundle-recovery/tsconfig.json +15 -0
  443. package/workflows/bundle-recovery/workflow.ts +179 -0
  444. package/workflows/challenge-detector/.jshook-install.json +14 -0
  445. package/workflows/challenge-detector/meta.yaml +14 -0
  446. package/workflows/challenge-detector/package.json +22 -0
  447. package/workflows/challenge-detector/pnpm-lock.yaml +819 -0
  448. package/workflows/challenge-detector/tsconfig.json +15 -0
  449. package/workflows/challenge-detector/workflow.ts +298 -0
  450. package/workflows/deobfuscation-pipeline/.jshook-install.json +14 -0
  451. package/workflows/deobfuscation-pipeline/meta.yaml +6 -0
  452. package/workflows/deobfuscation-pipeline/package.json +22 -0
  453. package/workflows/deobfuscation-pipeline/pnpm-lock.yaml +819 -0
  454. package/workflows/deobfuscation-pipeline/tsconfig.json +15 -0
  455. package/workflows/deobfuscation-pipeline/workflow.ts +119 -0
  456. package/workflows/electron-bridge-mapper/.jshook-install.json +14 -0
  457. package/workflows/electron-bridge-mapper/meta.yaml +6 -0
  458. package/workflows/electron-bridge-mapper/package.json +22 -0
  459. package/workflows/electron-bridge-mapper/pnpm-lock.yaml +819 -0
  460. package/workflows/electron-bridge-mapper/tsconfig.json +15 -0
  461. package/workflows/electron-bridge-mapper/workflow.ts +125 -0
  462. package/workflows/evidence-pack/.jshook-install.json +14 -0
  463. package/workflows/evidence-pack/LICENSE +21 -0
  464. package/workflows/evidence-pack/README.md +105 -0
  465. package/workflows/evidence-pack/docs/agent-recipes.md +44 -0
  466. package/workflows/evidence-pack/meta.yaml +6 -0
  467. package/workflows/evidence-pack/package.json +22 -0
  468. package/workflows/evidence-pack/tsconfig.json +15 -0
  469. package/workflows/evidence-pack/workflow.ts +154 -0
  470. package/workflows/js-bundle-search/.jshook-install.json +14 -0
  471. package/workflows/js-bundle-search/LICENSE +21 -0
  472. package/workflows/js-bundle-search/README.md +46 -0
  473. package/workflows/js-bundle-search/meta.yaml +4 -0
  474. package/workflows/js-bundle-search/package.json +23 -0
  475. package/workflows/js-bundle-search/tsconfig.json +16 -0
  476. package/workflows/js-bundle-search/workflow.ts +118 -0
  477. package/workflows/protocol-registry/.jshook-install.json +14 -0
  478. package/workflows/protocol-registry/meta.yaml +6 -0
  479. package/workflows/protocol-registry/package.json +22 -0
  480. package/workflows/protocol-registry/pnpm-lock.yaml +819 -0
  481. package/workflows/protocol-registry/tsconfig.json +15 -0
  482. package/workflows/protocol-registry/workflow.ts +107 -0
  483. package/workflows/qwen-mail-open-latest/meta.yaml +7 -0
  484. package/workflows/qwen-mail-open-latest/package.json +22 -0
  485. package/workflows/qwen-mail-open-latest/pnpm-lock.yaml +819 -0
  486. package/workflows/qwen-mail-open-latest/tsconfig.json +15 -0
  487. package/workflows/qwen-mail-open-latest/workflow.ts +77 -0
  488. package/workflows/register-account-flow/.jshook-install.json +14 -0
  489. package/workflows/register-account-flow/LICENSE +21 -0
  490. package/workflows/register-account-flow/README.md +64 -0
  491. package/workflows/register-account-flow/meta.yaml +4 -0
  492. package/workflows/register-account-flow/package.json +23 -0
  493. package/workflows/register-account-flow/tsconfig.json +16 -0
  494. package/workflows/register-account-flow/workflow.ts +127 -0
  495. package/workflows/replay-lab/.jshook-install.json +14 -0
  496. package/workflows/replay-lab/meta.yaml +6 -0
  497. package/workflows/replay-lab/package.json +22 -0
  498. package/workflows/replay-lab/pnpm-lock.yaml +819 -0
  499. package/workflows/replay-lab/tsconfig.json +15 -0
  500. package/workflows/replay-lab/workflow.ts +106 -0
  501. package/workflows/script-evidence-scan/.jshook-install.json +14 -0
  502. package/workflows/script-evidence-scan/LICENSE +21 -0
  503. package/workflows/script-evidence-scan/README.md +61 -0
  504. package/workflows/script-evidence-scan/meta.yaml +4 -0
  505. package/workflows/script-evidence-scan/package.json +23 -0
  506. package/workflows/script-evidence-scan/tsconfig.json +16 -0
  507. package/workflows/script-evidence-scan/workflow.ts +89 -0
  508. package/workflows/signature-hunter/.jshook-install.json +14 -0
  509. package/workflows/signature-hunter/LICENSE +21 -0
  510. package/workflows/signature-hunter/README.md +105 -0
  511. package/workflows/signature-hunter/docs/agent-recipes.md +44 -0
  512. package/workflows/signature-hunter/meta.yaml +6 -0
  513. package/workflows/signature-hunter/package.json +22 -0
  514. package/workflows/signature-hunter/tsconfig.json +15 -0
  515. package/workflows/signature-hunter/workflow.ts +170 -0
  516. package/workflows/signing-lineage/.jshook-install.json +14 -0
  517. package/workflows/signing-lineage/meta.yaml +6 -0
  518. package/workflows/signing-lineage/package.json +22 -0
  519. package/workflows/signing-lineage/pnpm-lock.yaml +819 -0
  520. package/workflows/signing-lineage/tsconfig.json +15 -0
  521. package/workflows/signing-lineage/workflow.ts +120 -0
  522. package/workflows/temp-mail-extract-link/.jshook-install.json +14 -0
  523. package/workflows/temp-mail-extract-link/LICENSE +21 -0
  524. package/workflows/temp-mail-extract-link/README.md +71 -0
  525. package/workflows/temp-mail-extract-link/meta.yaml +4 -0
  526. package/workflows/temp-mail-extract-link/package.json +23 -0
  527. package/workflows/temp-mail-extract-link/tsconfig.json +16 -0
  528. package/workflows/temp-mail-extract-link/workflow.ts +221 -0
  529. package/workflows/temp-mail-open-latest/.jshook-install.json +14 -0
  530. package/workflows/temp-mail-open-latest/LICENSE +21 -0
  531. package/workflows/temp-mail-open-latest/README.md +61 -0
  532. package/workflows/temp-mail-open-latest/meta.yaml +4 -0
  533. package/workflows/temp-mail-open-latest/package.json +23 -0
  534. package/workflows/temp-mail-open-latest/tsconfig.json +16 -0
  535. package/workflows/temp-mail-open-latest/workflow.ts +136 -0
  536. package/workflows/template/.jshook-install.json +14 -0
  537. package/workflows/template/LICENSE +21 -0
  538. package/workflows/template/README.md +45 -0
  539. package/workflows/template/docs/SKILL.md +111 -0
  540. package/workflows/template/meta.yaml +6 -0
  541. package/workflows/template/package.json +22 -0
  542. package/workflows/template/pnpm-lock.yaml +819 -0
  543. package/workflows/template/tsconfig.json +15 -0
  544. package/workflows/template/workflow.ts +73 -0
  545. package/workflows/web-api-capture-session/.jshook-install.json +14 -0
  546. package/workflows/web-api-capture-session/LICENSE +21 -0
  547. package/workflows/web-api-capture-session/README.md +64 -0
  548. package/workflows/web-api-capture-session/meta.yaml +4 -0
  549. package/workflows/web-api-capture-session/package.json +23 -0
  550. package/workflows/web-api-capture-session/tsconfig.json +16 -0
  551. package/workflows/web-api-capture-session/workflow.ts +124 -0
  552. package/workflows/ws-protocol-lifter/.jshook-install.json +14 -0
  553. package/workflows/ws-protocol-lifter/LICENSE +21 -0
  554. package/workflows/ws-protocol-lifter/README.md +105 -0
  555. package/workflows/ws-protocol-lifter/docs/agent-recipes.md +44 -0
  556. package/workflows/ws-protocol-lifter/meta.yaml +6 -0
  557. package/workflows/ws-protocol-lifter/package.json +22 -0
  558. package/workflows/ws-protocol-lifter/tsconfig.json +15 -0
  559. package/workflows/ws-protocol-lifter/workflow.ts +163 -0
  560. package/dist/src/modules/analyzer/AISummarizer.d.ts +0 -39
  561. package/dist/src/modules/analyzer/AISummarizer.js +0 -122
  562. package/dist/src/modules/hook/AIHookGenerator.d.ts +0 -52
  563. package/dist/src/modules/hook/AIHookGenerator.js +0 -360
  564. package/dist/src/modules/hook/AIHookGeneratorTemplates.d.ts +0 -9
  565. package/dist/src/modules/hook/AIHookGeneratorTemplates.js +0 -157
  566. package/dist/src/server/macros/builtins/deobfuscate-ast-flow.d.ts +0 -2
  567. package/dist/src/server/macros/builtins/deobfuscate-ast-flow.js +0 -25
  568. package/dist/src/server/macros/builtins/unpacker-flow.d.ts +0 -2
  569. package/dist/src/server/macros/builtins/unpacker-flow.js +0 -25
  570. package/dist/src/services/LLMService.d.ts +0 -37
  571. package/dist/src/services/LLMService.js +0 -233
  572. package/dist/src/services/prompts/analysis.d.ts +0 -9
  573. package/dist/src/services/prompts/analysis.js +0 -158
  574. package/dist/src/services/prompts/crypto.d.ts +0 -2
  575. package/dist/src/services/prompts/crypto.js +0 -108
  576. package/dist/src/services/prompts/deobfuscation.d.ts +0 -6
  577. package/dist/src/services/prompts/deobfuscation.js +0 -300
  578. package/dist/src/services/prompts/environment.d.ts +0 -16
  579. package/dist/src/services/prompts/environment.js +0 -372
  580. package/dist/src/services/prompts/intelligence.d.ts +0 -4
  581. package/dist/src/services/prompts/intelligence.js +0 -250
  582. package/dist/src/services/prompts/taint.d.ts +0 -2
  583. package/dist/src/services/prompts/taint.js +0 -54
@@ -23,8 +23,8 @@ export declare class ToolSearchEngine {
23
23
  private readonly trigramIndex;
24
24
  private readonly embeddingEngine;
25
25
  private toolEmbeddings;
26
- private vectorWeight;
27
- private lastVectorRanking;
26
+ private readonly feedbackTracker;
27
+ private feedbackEpoch;
28
28
  private readonly bm25Scorer;
29
29
  private readonly intentBoost;
30
30
  constructor(tools?: Tool[], domainOverrides?: ReadonlyMap<string, string>, domainScoreMultipliers?: ReadonlyMap<string, number>, toolScoreMultipliers?: ReadonlyMap<string, number>, searchConfig?: SearchConfig);
@@ -45,7 +45,6 @@ export declare class ToolSearchEngine {
45
45
  private computeVectorCosineScores;
46
46
  recordToolCallFeedback(toolName: string, _lastQuery: string): void;
47
47
  private applyIntentBonusBand;
48
- static extractParamTokens(inputSchema: unknown): string[];
49
48
  private buildAffinityGraph;
50
49
  private applyAffinityExpansion;
51
50
  private applyDomainHubExpansion;
@@ -1,9 +1,26 @@
1
+ function findDelimitedIndex(haystack, needle, wordChar) {
2
+ if (!needle)
3
+ return -1;
4
+ let idx = haystack.indexOf(needle);
5
+ while (idx >= 0) {
6
+ const before = idx > 0 ? haystack[idx - 1] : null;
7
+ const after = idx + needle.length < haystack.length ? haystack[idx + needle.length] : null;
8
+ const beforeOk = before === null || !wordChar.test(before);
9
+ const afterOk = after === null || !wordChar.test(after);
10
+ if (beforeOk && afterOk)
11
+ return idx;
12
+ idx = haystack.indexOf(needle, idx + 1);
13
+ }
14
+ return -1;
15
+ }
1
16
  import { allTools, getToolDomain } from '../ToolCatalog.js';
2
- import { SEARCH_TFIDF_COSINE_WEIGHT, SEARCH_AFFINITY_BOOST_FACTOR, SEARCH_AFFINITY_TOP_N, SEARCH_DOMAIN_HUB_THRESHOLD, SEARCH_QUERY_CACHE_CAPACITY, SEARCH_TRIGRAM_WEIGHT, SEARCH_RRF_K, SEARCH_PARAM_TOKEN_WEIGHT, SEARCH_VECTOR_ENABLED, SEARCH_VECTOR_COSINE_WEIGHT, } from '../../constants.js';
17
+ import { SEARCH_TFIDF_COSINE_WEIGHT, SEARCH_AFFINITY_BOOST_FACTOR, SEARCH_AFFINITY_TOP_N, SEARCH_DOMAIN_HUB_THRESHOLD, SEARCH_QUERY_CACHE_CAPACITY, SEARCH_TRIGRAM_WEIGHT, SEARCH_RRF_K, SEARCH_PARAM_TOKEN_WEIGHT, SEARCH_VECTOR_ENABLED, } from '../../constants.js';
3
18
  import { BM25ScorerImpl } from './BM25Scorer.js';
4
19
  import { EmbeddingEngine } from './EmbeddingEngine.js';
5
20
  import { IntentBoostImpl } from './IntentBoost.js';
6
21
  import { TrigramIndex } from './TrigramIndex.js';
22
+ import { FeedbackTracker } from './FeedbackTracker.js';
23
+ import { QueryNormalizer } from './QueryNormalizer.js';
7
24
  class LRUCache {
8
25
  capacity;
9
26
  map = new Map();
@@ -46,8 +63,8 @@ export class ToolSearchEngine {
46
63
  trigramIndex;
47
64
  embeddingEngine;
48
65
  toolEmbeddings = null;
49
- vectorWeight;
50
- lastVectorRanking = null;
66
+ feedbackTracker;
67
+ feedbackEpoch = 0;
51
68
  bm25Scorer;
52
69
  intentBoost;
53
70
  constructor(tools, domainOverrides, domainScoreMultipliers, toolScoreMultipliers, searchConfig) {
@@ -59,19 +76,19 @@ export class ToolSearchEngine {
59
76
  this.bm25Scorer = new BM25ScorerImpl(searchConfig);
60
77
  const vectorEnabled = searchConfig?.vectorEnabled ?? SEARCH_VECTOR_ENABLED;
61
78
  this.embeddingEngine = vectorEnabled ? new EmbeddingEngine() : null;
62
- this.vectorWeight = searchConfig?.vectorCosineWeight ?? SEARCH_VECTOR_COSINE_WEIGHT;
79
+ this.feedbackTracker = new FeedbackTracker(searchConfig);
63
80
  this.intentBoost = new IntentBoostImpl(searchConfig?.intentToolBoostRules);
64
81
  let totalLength = 0;
65
82
  for (let i = 0; i < source.length; i++) {
66
83
  const tool = source[i];
67
84
  const domain = this.domainOverrides?.get(tool.name) ?? getToolDomain(tool.name);
68
85
  const description = tool.description ?? '';
69
- const shortDescription = extractShortDescription(description);
86
+ const shortDescription = QueryNormalizer.extractShortDescription(description);
70
87
  const nameTokens = this.bm25Scorer.tokenise(tool.name);
71
88
  const nameTokenSet = new Set(nameTokens);
72
89
  const domainTokens = domain ? this.bm25Scorer.tokenise(domain) : [];
73
90
  const descTokens = this.bm25Scorer.tokenise(description);
74
- const paramTokens = ToolSearchEngine.extractParamTokens(tool.inputSchema);
91
+ const paramTokens = QueryNormalizer.extractParamTokens(tool.inputSchema);
75
92
  const allTokens = [...nameTokens, ...domainTokens, ...descTokens, ...paramTokens];
76
93
  const doc = {
77
94
  name: tool.name,
@@ -124,7 +141,7 @@ export class ToolSearchEngine {
124
141
  }
125
142
  }
126
143
  this.avgDocLength = this.docCount > 0 ? totalLength / this.docCount : 1;
127
- this.sortedKeys = [...this.invertedIndex.keys()].sort();
144
+ this.sortedKeys = [...this.invertedIndex.keys()].toSorted();
128
145
  const idfMap = new Map();
129
146
  for (const [term, postings] of this.invertedIndex) {
130
147
  idfMap.set(term, Math.log(1 + this.docCount / postings.length));
@@ -163,21 +180,6 @@ export class ToolSearchEngine {
163
180
  return null;
164
181
  const wordCharIdent = /[a-z0-9_]/;
165
182
  const wordCharPlain = /[a-z0-9]/;
166
- const findDelimitedIndex = (haystack, needle, wordChar) => {
167
- if (!needle)
168
- return -1;
169
- let idx = haystack.indexOf(needle);
170
- while (idx >= 0) {
171
- const before = idx > 0 ? haystack[idx - 1] : null;
172
- const after = idx + needle.length < haystack.length ? haystack[idx + needle.length] : null;
173
- const beforeOk = before === null || !wordChar.test(before);
174
- const afterOk = after === null || !wordChar.test(after);
175
- if (beforeOk && afterOk)
176
- return idx;
177
- idx = haystack.indexOf(needle, idx + 1);
178
- }
179
- return -1;
180
- };
181
183
  let bestTool = null;
182
184
  let bestIdx = Number.POSITIVE_INFINITY;
183
185
  for (const toolName of this.docNameIndex.keys()) {
@@ -197,7 +199,7 @@ export class ToolSearchEngine {
197
199
  }
198
200
  return bestTool;
199
201
  })();
200
- const cacheKey = `${query}\0${topK}`;
202
+ const cacheKey = `${query}\0${topK}\0${this.feedbackEpoch}`;
201
203
  const cached = this.queryCache.get(cacheKey);
202
204
  if (cached) {
203
205
  const active = activeToolNames ?? new Set();
@@ -302,7 +304,7 @@ export class ToolSearchEngine {
302
304
  }
303
305
  return Array.from(domainMap.entries())
304
306
  .map(([domain, tools]) => ({ domain, count: tools.length, tools }))
305
- .sort((a, b) => b.count - a.count);
307
+ .toSorted((a, b) => b.count - a.count);
306
308
  }
307
309
  scoreToken(token, scores) {
308
310
  const postings = this.invertedIndex.get(token);
@@ -350,10 +352,11 @@ export class ToolSearchEngine {
350
352
  const vectorScores = await this.computeVectorCosineScores(query);
351
353
  const vectorRanked = this.rankByMap(vectorScores);
352
354
  if (vectorRanked.size > 0) {
353
- this.lastVectorRanking = new Map();
355
+ const ranking = new Map();
354
356
  for (const [docIdx, rank] of vectorRanked) {
355
- this.lastVectorRanking.set(this.docs[docIdx].name, rank);
357
+ ranking.set(this.docs[docIdx].name, rank);
356
358
  }
359
+ this.feedbackTracker.recordVectorRanking(ranking);
357
360
  }
358
361
  for (let i = 0; i < this.docCount; i++) {
359
362
  let rrfScore = 0;
@@ -370,8 +373,8 @@ export class ToolSearchEngine {
370
373
  rrfScore += trigramWeight * (1 / (k + trigramRank));
371
374
  }
372
375
  const vectorRank = vectorRanked.get(i);
373
- if (vectorRank !== undefined && this.vectorWeight > 0) {
374
- rrfScore += this.vectorWeight * (1 / (k + vectorRank));
376
+ if (vectorRank !== undefined && this.feedbackTracker.getVectorWeight() > 0) {
377
+ rrfScore += this.feedbackTracker.getVectorWeight() * (1 / (k + vectorRank));
375
378
  }
376
379
  if (rrfScore > 0) {
377
380
  const bm25Original = scores[i];
@@ -430,7 +433,7 @@ export class ToolSearchEngine {
430
433
  return ranked;
431
434
  }
432
435
  rankByMap(scoreMap) {
433
- const entries = [...scoreMap.entries()].sort((a, b) => b[1] - a[1]);
436
+ const entries = [...scoreMap.entries()].toSorted((a, b) => b[1] - a[1]);
434
437
  const ranked = new Map();
435
438
  for (let rank = 0; rank < entries.length; rank++) {
436
439
  ranked.set(entries[rank][0], rank);
@@ -475,16 +478,9 @@ export class ToolSearchEngine {
475
478
  return results;
476
479
  }
477
480
  recordToolCallFeedback(toolName, _lastQuery) {
478
- if (!this.lastVectorRanking || !this.embeddingEngine)
479
- return;
480
- const vectorRank = this.lastVectorRanking.get(toolName);
481
- if (vectorRank !== undefined && vectorRank < 5) {
482
- this.vectorWeight = Math.min(0.8, this.vectorWeight + 0.02);
483
- this.queryCache.clear();
484
- }
485
- else {
486
- this.vectorWeight = Math.max(0.1, this.vectorWeight - 0.01);
487
- this.queryCache.clear();
481
+ const adjusted = this.feedbackTracker.recordToolCallFeedback(toolName, !!this.embeddingEngine);
482
+ if (adjusted) {
483
+ this.feedbackEpoch += 1;
488
484
  }
489
485
  }
490
486
  applyIntentBonusBand(scores, intentToolBonuses) {
@@ -503,8 +499,9 @@ export class ToolSearchEngine {
503
499
  return;
504
500
  }
505
501
  const bonusBand = Math.max(1, maxScore + 1);
506
- const distinctBonuses = [...new Set([...intentToolBonuses.values()].filter((bonus) => bonus > 0))]
507
- .sort((a, b) => a - b);
502
+ const distinctBonuses = [
503
+ ...new Set([...intentToolBonuses.values()].filter((bonus) => bonus > 0)),
504
+ ].toSorted((a, b) => a - b);
508
505
  const bonusTierByValue = new Map();
509
506
  for (let i = 0; i < distinctBonuses.length; i++) {
510
507
  bonusTierByValue.set(distinctBonuses[i], i + 1);
@@ -524,43 +521,6 @@ export class ToolSearchEngine {
524
521
  scores[docIndex] += bonusBand * tier;
525
522
  }
526
523
  }
527
- static extractParamTokens(inputSchema) {
528
- const tokens = [];
529
- if (!inputSchema || typeof inputSchema !== 'object')
530
- return tokens;
531
- const schema = inputSchema;
532
- const properties = schema.properties;
533
- if (!properties || typeof properties !== 'object')
534
- return tokens;
535
- for (const [paramName, paramDef] of Object.entries(properties)) {
536
- const nameParts = paramName.replace(/([a-z])([A-Z])/g, '$1 $2').split(/[\s_-]+/);
537
- for (const part of nameParts) {
538
- const lower = part.toLowerCase();
539
- if (lower.length > 1) {
540
- tokens.push(lower);
541
- }
542
- }
543
- if (paramDef && typeof paramDef === 'object') {
544
- const desc = paramDef.description;
545
- if (typeof desc === 'string') {
546
- const STOP_WORDS = new Set([
547
- 'the', 'a', 'an', 'is', 'are', 'was', 'were', 'be', 'been',
548
- 'to', 'of', 'in', 'for', 'on', 'with', 'at', 'by', 'from',
549
- 'or', 'and', 'not', 'this', 'that', 'it', 'its', 'if', 'as',
550
- 'will', 'can', 'may', 'must', 'should', 'would', 'could',
551
- 'e', 'g', 'default', 'optional', 'required', 'when', 'set',
552
- ]);
553
- const descWords = desc.toLowerCase().split(/[^a-z0-9]+/).filter(Boolean);
554
- for (const w of descWords) {
555
- if (w.length > 2 && !STOP_WORDS.has(w)) {
556
- tokens.push(w);
557
- }
558
- }
559
- }
560
- }
561
- }
562
- return tokens;
563
- }
564
524
  buildAffinityGraph() {
565
525
  const graph = new Map();
566
526
  const prefixGroups = new Map();
@@ -648,13 +608,3 @@ export class ToolSearchEngine {
648
608
  }
649
609
  }
650
610
  }
651
- function extractShortDescription(description) {
652
- if (!description)
653
- return '';
654
- const firstSentence = description.match(/^[^.!?\n]+[.!?]?/);
655
- if (firstSentence) {
656
- const result = firstSentence[0].trim();
657
- return result.length > 120 ? result.slice(0, 117) + '...' : result;
658
- }
659
- return description.length > 120 ? description.slice(0, 117) + '...' : description;
660
- }
@@ -0,0 +1,43 @@
1
+ import { EventEmitter } from 'node:events';
2
+ export interface TeamSession {
3
+ id: string;
4
+ name: string;
5
+ createdAt: number;
6
+ lastActivityAt: number;
7
+ status: 'active' | 'closing' | 'closed';
8
+ sessionIds: string[];
9
+ }
10
+ export interface ForceDeleteOptions {
11
+ timeoutMs?: number;
12
+ skipSessionCleanup?: boolean;
13
+ }
14
+ export interface ForceDeleteResult {
15
+ success: boolean;
16
+ teamName: string;
17
+ sessionsClosed: number;
18
+ error?: string;
19
+ }
20
+ export declare class TeamManager extends EventEmitter {
21
+ private readonly teams;
22
+ private readonly cleanupTimeouts;
23
+ registerTeam(name: string, sessionId?: string): TeamSession;
24
+ addSessionToTeam(teamName: string, sessionId: string): void;
25
+ removeSessionFromTeam(teamName: string, sessionId: string): void;
26
+ getTeam(teamName: string): TeamSession | undefined;
27
+ listTeams(): TeamSession[];
28
+ getStats(): {
29
+ totalTeams: number;
30
+ activeTeams: number;
31
+ totalSessions: number;
32
+ };
33
+ forceDeleteTeam(teamName: string, options?: ForceDeleteOptions): Promise<ForceDeleteResult>;
34
+ private closeSession;
35
+ scheduleAutoCleanup(teamName: string, delayMs?: number): void;
36
+ cancelScheduledCleanup(teamName: string): void;
37
+ shutdown(timeoutMs?: number): Promise<{
38
+ closed: number;
39
+ failed: number;
40
+ }>;
41
+ }
42
+ export declare function getTeamManager(): TeamManager;
43
+ export declare function resetTeamManager(): void;
@@ -0,0 +1,238 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { EventEmitter } from 'node:events';
3
+ const DEFAULT_TIMEOUT_MS = 30_000;
4
+ function validateTeamName(name) {
5
+ if (!name || typeof name !== 'string') {
6
+ return { valid: false, error: 'Team name must be a non-empty string' };
7
+ }
8
+ if (name.length > 64) {
9
+ return { valid: false, error: 'Team name must not exceed 64 characters' };
10
+ }
11
+ const safePattern = /^[a-zA-Z0-9._-]+$/;
12
+ if (!safePattern.test(name)) {
13
+ return {
14
+ valid: false,
15
+ error: 'Team name can only contain letters, numbers, dots, underscores, and dashes',
16
+ };
17
+ }
18
+ if (name.includes('..') || name.includes('/') || name.includes('\\')) {
19
+ return { valid: false, error: 'Path traversal detected in team name' };
20
+ }
21
+ return { valid: true };
22
+ }
23
+ async function execCodexCommand(args, timeoutMs = DEFAULT_TIMEOUT_MS) {
24
+ return new Promise((resolve, reject) => {
25
+ const child = spawn('codex', args, {
26
+ stdio: ['pipe', 'pipe', 'pipe'],
27
+ shell: true,
28
+ });
29
+ let stdout = '';
30
+ let stderr = '';
31
+ let timedOut = false;
32
+ const timeoutId = setTimeout(() => {
33
+ timedOut = true;
34
+ child.kill('SIGKILL');
35
+ reject(new Error(`Codex command timed out after ${timeoutMs}ms: codex ${args.join(' ')}`));
36
+ }, timeoutMs);
37
+ child.stdout.on('data', (data) => {
38
+ stdout += data.toString();
39
+ });
40
+ child.stderr.on('data', (data) => {
41
+ stderr += data.toString();
42
+ });
43
+ child.on('close', (code) => {
44
+ if (!timedOut) {
45
+ clearTimeout(timeoutId);
46
+ resolve({ stdout, stderr, code: code ?? 1 });
47
+ }
48
+ });
49
+ child.on('error', (err) => {
50
+ if (!timedOut) {
51
+ clearTimeout(timeoutId);
52
+ reject(err);
53
+ }
54
+ });
55
+ });
56
+ }
57
+ export class TeamManager extends EventEmitter {
58
+ teams = new Map();
59
+ cleanupTimeouts = new Map();
60
+ registerTeam(name, sessionId) {
61
+ const validation = validateTeamName(name);
62
+ if (!validation.valid) {
63
+ throw new Error(`Invalid team name: ${validation.error}`);
64
+ }
65
+ const existing = this.teams.get(name);
66
+ if (existing) {
67
+ return existing;
68
+ }
69
+ const team = {
70
+ id: name,
71
+ name,
72
+ createdAt: Date.now(),
73
+ lastActivityAt: Date.now(),
74
+ status: 'active',
75
+ sessionIds: sessionId ? [sessionId] : [],
76
+ };
77
+ this.teams.set(name, team);
78
+ this.emit('team:registered', { name, sessionId });
79
+ return team;
80
+ }
81
+ addSessionToTeam(teamName, sessionId) {
82
+ const team = this.teams.get(teamName);
83
+ if (!team) {
84
+ throw new Error(`Team "${teamName}" not found`);
85
+ }
86
+ if (!team.sessionIds.includes(sessionId)) {
87
+ team.sessionIds.push(sessionId);
88
+ team.lastActivityAt = Date.now();
89
+ this.emit('session:added', { teamName, sessionId });
90
+ }
91
+ }
92
+ removeSessionFromTeam(teamName, sessionId) {
93
+ const team = this.teams.get(teamName);
94
+ if (!team) {
95
+ return;
96
+ }
97
+ const index = team.sessionIds.indexOf(sessionId);
98
+ if (index !== -1) {
99
+ team.sessionIds.splice(index, 1);
100
+ team.lastActivityAt = Date.now();
101
+ this.emit('session:removed', { teamName, sessionId });
102
+ }
103
+ }
104
+ getTeam(teamName) {
105
+ return this.teams.get(teamName);
106
+ }
107
+ listTeams() {
108
+ return [...this.teams.values()].filter((t) => t.status === 'active');
109
+ }
110
+ getStats() {
111
+ const values = [...this.teams.values()];
112
+ return {
113
+ totalTeams: values.length,
114
+ activeTeams: values.filter((t) => t.status === 'active').length,
115
+ totalSessions: values.reduce((sum, t) => sum + t.sessionIds.length, 0),
116
+ };
117
+ }
118
+ async forceDeleteTeam(teamName, options = {}) {
119
+ const { timeoutMs = DEFAULT_TIMEOUT_MS, skipSessionCleanup = false } = options;
120
+ const validation = validateTeamName(teamName);
121
+ if (!validation.valid) {
122
+ return {
123
+ success: false,
124
+ teamName,
125
+ sessionsClosed: 0,
126
+ error: `Invalid team name: ${validation.error}`,
127
+ };
128
+ }
129
+ const team = this.teams.get(teamName);
130
+ if (!team) {
131
+ return {
132
+ success: false,
133
+ teamName,
134
+ sessionsClosed: 0,
135
+ error: `Team "${teamName}" not found`,
136
+ };
137
+ }
138
+ team.status = 'closing';
139
+ this.emit('team:closing', { teamName });
140
+ const pendingTimeout = this.cleanupTimeouts.get(teamName);
141
+ if (pendingTimeout) {
142
+ clearTimeout(pendingTimeout);
143
+ this.cleanupTimeouts.delete(teamName);
144
+ }
145
+ let sessionsClosed = 0;
146
+ let error;
147
+ try {
148
+ if (!skipSessionCleanup && team.sessionIds.length > 0) {
149
+ const closePromises = team.sessionIds.map((sessionId) => this.closeSession(sessionId, timeoutMs));
150
+ const results = await Promise.allSettled(closePromises);
151
+ sessionsClosed = results.filter((r) => r.status === 'fulfilled').length;
152
+ const failures = results
153
+ .filter((r) => r.status === 'rejected')
154
+ .map((r) => r.reason)
155
+ .filter((e) => e instanceof Error)
156
+ .map((e) => e.message);
157
+ if (failures.length > 0) {
158
+ error = `Failed to close ${failures.length} session(s): ${failures.join('; ')}`;
159
+ }
160
+ }
161
+ this.teams.delete(teamName);
162
+ team.status = 'closed';
163
+ this.emit('team:deleted', { teamName, sessionsClosed });
164
+ return {
165
+ success: !error,
166
+ teamName,
167
+ sessionsClosed,
168
+ error,
169
+ };
170
+ }
171
+ catch (e) {
172
+ const errorMessage = e instanceof Error ? e.message : String(e);
173
+ return {
174
+ success: false,
175
+ teamName,
176
+ sessionsClosed,
177
+ error: errorMessage,
178
+ };
179
+ }
180
+ }
181
+ async closeSession(sessionId, timeoutMs) {
182
+ try {
183
+ await execCodexCommand(['cancel-session', sessionId], timeoutMs);
184
+ }
185
+ catch (e) {
186
+ const msg = e instanceof Error ? e.message : String(e);
187
+ throw new Error(`Failed to close session ${sessionId}: ${msg}`, { cause: e });
188
+ }
189
+ }
190
+ scheduleAutoCleanup(teamName, delayMs = 300_000) {
191
+ const existing = this.cleanupTimeouts.get(teamName);
192
+ if (existing) {
193
+ clearTimeout(existing);
194
+ }
195
+ const timeoutId = setTimeout(() => {
196
+ this.forceDeleteTeam(teamName).catch(() => {
197
+ });
198
+ this.cleanupTimeouts.delete(teamName);
199
+ }, delayMs);
200
+ this.cleanupTimeouts.set(teamName, timeoutId);
201
+ }
202
+ cancelScheduledCleanup(teamName) {
203
+ const timeout = this.cleanupTimeouts.get(teamName);
204
+ if (timeout) {
205
+ clearTimeout(timeout);
206
+ this.cleanupTimeouts.delete(teamName);
207
+ }
208
+ }
209
+ async shutdown(timeoutMs = DEFAULT_TIMEOUT_MS) {
210
+ const teams = [...this.teams.keys()];
211
+ let closed = 0;
212
+ let failed = 0;
213
+ const results = await Promise.allSettled(teams.map((name) => this.forceDeleteTeam(name, { timeoutMs })));
214
+ for (const result of results) {
215
+ if (result.status === 'fulfilled' && result.value.success) {
216
+ closed++;
217
+ }
218
+ else {
219
+ failed++;
220
+ }
221
+ }
222
+ for (const [name, timeout] of this.cleanupTimeouts.entries()) {
223
+ clearTimeout(timeout);
224
+ this.cleanupTimeouts.delete(name);
225
+ }
226
+ return { closed, failed };
227
+ }
228
+ }
229
+ let globalTeamManager;
230
+ export function getTeamManager() {
231
+ if (!globalTeamManager) {
232
+ globalTeamManager = new TeamManager();
233
+ }
234
+ return globalTeamManager;
235
+ }
236
+ export function resetTeamManager() {
237
+ globalTeamManager = undefined;
238
+ }
@@ -0,0 +1 @@
1
+ export * from './TeamManager.js';
@@ -0,0 +1 @@
1
+ export * from './TeamManager.js';
@@ -3,12 +3,14 @@ export interface RetryPolicy {
3
3
  backoffMs: number;
4
4
  multiplier?: number;
5
5
  }
6
- export type WorkflowNodeType = 'tool' | 'sequence' | 'parallel' | 'branch';
6
+ export type ToolNodeInput = string | number | boolean | null | undefined | Record<string, unknown> | unknown[];
7
+ export type WorkflowNodeType = 'tool' | 'sequence' | 'parallel' | 'branch' | 'fallback';
7
8
  export interface ToolNode {
8
9
  readonly kind: 'tool';
9
10
  readonly id: string;
10
11
  readonly toolName: string;
11
- readonly input?: Record<string, unknown>;
12
+ readonly input?: Record<string, ToolNodeInput>;
13
+ readonly inputFrom?: Record<string, string>;
12
14
  readonly timeoutMs?: number;
13
15
  readonly retry?: RetryPolicy;
14
16
  }
@@ -32,15 +34,39 @@ export interface BranchNode {
32
34
  readonly whenTrue: WorkflowNode;
33
35
  readonly whenFalse?: WorkflowNode;
34
36
  }
35
- export type WorkflowNode = ToolNode | SequenceNode | ParallelNode | BranchNode;
37
+ export interface FallbackNode {
38
+ readonly kind: 'fallback';
39
+ readonly id: string;
40
+ readonly primary: WorkflowNode;
41
+ readonly fallback: WorkflowNode;
42
+ }
43
+ export type WorkflowNode = ToolNode | SequenceNode | ParallelNode | BranchNode | FallbackNode;
36
44
  export interface WorkflowExecutionContext {
37
45
  readonly workflowRunId: string;
38
46
  readonly profile: string;
47
+ readonly stepResults: ReadonlyMap<string, unknown>;
39
48
  invokeTool(toolName: string, args: Record<string, unknown>): Promise<unknown>;
40
49
  emitSpan(name: string, attrs?: Record<string, unknown>): void;
41
50
  emitMetric(name: string, value: number, type: 'counter' | 'gauge' | 'histogram', attrs?: Record<string, unknown>): void;
42
51
  getConfig<T = unknown>(path: string, fallback?: T): T;
43
52
  }
53
+ export interface WorkflowRouteStep {
54
+ readonly id: string;
55
+ readonly toolName: string;
56
+ readonly description: string;
57
+ readonly prerequisites: string[];
58
+ readonly parallel?: boolean;
59
+ readonly expectedInputs?: Record<string, string>;
60
+ readonly evidenceNodeType?: string;
61
+ }
62
+ export type WorkflowRouteKind = 'preset' | 'workflow';
63
+ export interface WorkflowRouteMetadata {
64
+ readonly kind: WorkflowRouteKind;
65
+ readonly triggerPatterns: RegExp[];
66
+ readonly steps: WorkflowRouteStep[];
67
+ readonly requiredDomains: string[];
68
+ readonly priority: number;
69
+ }
44
70
  export interface WorkflowContract {
45
71
  readonly kind: 'workflow-contract';
46
72
  readonly version: 1;
@@ -50,6 +76,7 @@ export interface WorkflowContract {
50
76
  readonly tags?: string[];
51
77
  readonly timeoutMs?: number;
52
78
  readonly defaultMaxConcurrency?: number;
79
+ readonly route?: WorkflowRouteMetadata;
53
80
  build(ctx: WorkflowExecutionContext): WorkflowNode;
54
81
  onStart?(ctx: WorkflowExecutionContext): Promise<void> | void;
55
82
  onFinish?(ctx: WorkflowExecutionContext, result: unknown): Promise<void> | void;
@@ -69,10 +96,12 @@ type AnyWorkflowNodeBuilder = WorkflowNodeBuilder<WorkflowNode>;
69
96
  export declare class ToolNodeBuilder extends WorkflowNodeBuilder<ToolNode> {
70
97
  private toolName;
71
98
  private _input?;
99
+ private _inputFrom?;
72
100
  private _retry?;
73
101
  private _timeoutMs?;
74
102
  constructor(id: string, toolName: string);
75
- input(input: Record<string, unknown>): this;
103
+ input(input: Record<string, ToolNodeInput>): this;
104
+ inputFrom(mapping: Record<string, string>): this;
76
105
  retry(policy: RetryPolicy): this;
77
106
  timeout(ms: number): this;
78
107
  build(): ToolNode;
@@ -84,6 +113,7 @@ export declare class SequenceNodeBuilder extends WorkflowNodeBuilder<SequenceNod
84
113
  sequence(id: string, config?: (b: SequenceNodeBuilder) => void): this;
85
114
  parallel(id: string, config?: (b: ParallelNodeBuilder) => void): this;
86
115
  branch(id: string, predicateId: string, config?: (b: BranchNodeBuilder) => void): this;
116
+ fallback(id: string, config?: (b: FallbackNodeBuilder) => void): this;
87
117
  build(): SequenceNode;
88
118
  }
89
119
  export declare class ParallelNodeBuilder extends WorkflowNodeBuilder<ParallelNode> {
@@ -95,6 +125,7 @@ export declare class ParallelNodeBuilder extends WorkflowNodeBuilder<ParallelNod
95
125
  sequence(id: string, config?: (b: SequenceNodeBuilder) => void): this;
96
126
  parallel(id: string, config?: (b: ParallelNodeBuilder) => void): this;
97
127
  branch(id: string, predicateId: string, config?: (b: BranchNodeBuilder) => void): this;
128
+ fallback(id: string, config?: (b: FallbackNodeBuilder) => void): this;
98
129
  maxConcurrency(concurrency: number): this;
99
130
  failFast(ff: boolean): this;
100
131
  build(): ParallelNode;
@@ -110,6 +141,13 @@ export declare class BranchNodeBuilder extends WorkflowNodeBuilder<BranchNode> {
110
141
  whenFalse(nodeBuilder: AnyWorkflowNodeBuilder): this;
111
142
  build(): BranchNode;
112
143
  }
144
+ export declare class FallbackNodeBuilder extends WorkflowNodeBuilder<FallbackNode> {
145
+ private _primary?;
146
+ private _fallback?;
147
+ primary(nodeBuilder: AnyWorkflowNodeBuilder): this;
148
+ fallback(nodeBuilder: AnyWorkflowNodeBuilder): this;
149
+ build(): FallbackNode;
150
+ }
113
151
  export declare class WorkflowBuilder {
114
152
  private _id;
115
153
  private _displayName;
@@ -117,6 +155,7 @@ export declare class WorkflowBuilder {
117
155
  private _tags?;
118
156
  private _timeoutMs?;
119
157
  private _defaultMaxConcurrency?;
158
+ private _route?;
120
159
  private _buildFn;
121
160
  private _onStart?;
122
161
  private _onFinish?;
@@ -126,6 +165,7 @@ export declare class WorkflowBuilder {
126
165
  tags(tags: string[]): this;
127
166
  timeoutMs(timeout: number): this;
128
167
  defaultMaxConcurrency(max: number): this;
168
+ route(route: WorkflowRouteMetadata): this;
129
169
  buildGraph(fn: (ctx: WorkflowExecutionContext) => AnyWorkflowNodeBuilder): this;
130
170
  onStart(fn: (ctx: WorkflowExecutionContext) => Promise<void> | void): this;
131
171
  onFinish(fn: (ctx: WorkflowExecutionContext, result: unknown) => Promise<void> | void): this;