@minded-ai/mindedjs 1.0.0-ec2-beta-1

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 (454) hide show
  1. package/README.md +6 -0
  2. package/dist/agent.d.ts +256 -0
  3. package/dist/agent.d.ts.map +1 -0
  4. package/dist/agent.js +896 -0
  5. package/dist/agent.js.map +1 -0
  6. package/dist/browserTask/README.md +419 -0
  7. package/dist/browserTask/browserAgent.py +632 -0
  8. package/dist/browserTask/captcha_isolated.png +0 -0
  9. package/dist/browserTask/executeBrowserTask.d.ts +14 -0
  10. package/dist/browserTask/executeBrowserTask.d.ts.map +1 -0
  11. package/dist/browserTask/executeBrowserTask.js +195 -0
  12. package/dist/browserTask/executeBrowserTask.js.map +1 -0
  13. package/dist/browserTask/executeBrowserTask.py +153 -0
  14. package/dist/browserTask/executeBrowserTask.ts +79 -0
  15. package/dist/browserTask/localBrowserTask.d.ts +49 -0
  16. package/dist/browserTask/localBrowserTask.d.ts.map +1 -0
  17. package/dist/browserTask/localBrowserTask.js +284 -0
  18. package/dist/browserTask/localBrowserTask.js.map +1 -0
  19. package/dist/browserTask/requirements.txt +8 -0
  20. package/dist/browserTask/setup.sh +144 -0
  21. package/dist/browserTask/types.d.ts +35 -0
  22. package/dist/browserTask/types.d.ts.map +1 -0
  23. package/dist/browserTask/types.js +10 -0
  24. package/dist/browserTask/types.js.map +1 -0
  25. package/dist/checkpointer/checkpointSaverFactory.d.ts +7 -0
  26. package/dist/checkpointer/checkpointSaverFactory.d.ts.map +1 -0
  27. package/dist/checkpointer/checkpointSaverFactory.js +53 -0
  28. package/dist/checkpointer/checkpointSaverFactory.js.map +1 -0
  29. package/dist/cli/index.d.ts +3 -0
  30. package/dist/cli/index.d.ts.map +1 -0
  31. package/dist/cli/index.js +209 -0
  32. package/dist/cli/index.js.map +1 -0
  33. package/dist/cli/lambdaHandlerTemplate.d.ts +10 -0
  34. package/dist/cli/lambdaHandlerTemplate.d.ts.map +1 -0
  35. package/dist/cli/lambdaHandlerTemplate.js +76 -0
  36. package/dist/cli/lambdaHandlerTemplate.js.map +1 -0
  37. package/dist/cli/lambdaHandlerTemplate.ts +78 -0
  38. package/dist/cli/localOperatorSetup.d.ts +6 -0
  39. package/dist/cli/localOperatorSetup.d.ts.map +1 -0
  40. package/dist/cli/localOperatorSetup.js +310 -0
  41. package/dist/cli/localOperatorSetup.js.map +1 -0
  42. package/dist/debugging/index.d.ts +2 -0
  43. package/dist/debugging/index.d.ts.map +1 -0
  44. package/dist/debugging/index.js +6 -0
  45. package/dist/debugging/index.js.map +1 -0
  46. package/dist/debugging/llmCallbackHandler.d.ts +36 -0
  47. package/dist/debugging/llmCallbackHandler.d.ts.map +1 -0
  48. package/dist/debugging/llmCallbackHandler.js +101 -0
  49. package/dist/debugging/llmCallbackHandler.js.map +1 -0
  50. package/dist/edges/createDirectEdge.d.ts +4 -0
  51. package/dist/edges/createDirectEdge.d.ts.map +1 -0
  52. package/dist/edges/createDirectEdge.js +24 -0
  53. package/dist/edges/createDirectEdge.js.map +1 -0
  54. package/dist/edges/createLogicalRouter.d.ts +8 -0
  55. package/dist/edges/createLogicalRouter.d.ts.map +1 -0
  56. package/dist/edges/createLogicalRouter.js +194 -0
  57. package/dist/edges/createLogicalRouter.js.map +1 -0
  58. package/dist/edges/createPromptRouter.d.ts +12 -0
  59. package/dist/edges/createPromptRouter.d.ts.map +1 -0
  60. package/dist/edges/createPromptRouter.js +176 -0
  61. package/dist/edges/createPromptRouter.js.map +1 -0
  62. package/dist/edges/edgeFactory.d.ts +14 -0
  63. package/dist/edges/edgeFactory.d.ts.map +1 -0
  64. package/dist/edges/edgeFactory.js +125 -0
  65. package/dist/edges/edgeFactory.js.map +1 -0
  66. package/dist/events/AgentEvents.d.ts +56 -0
  67. package/dist/events/AgentEvents.d.ts.map +1 -0
  68. package/dist/events/AgentEvents.js +13 -0
  69. package/dist/events/AgentEvents.js.map +1 -0
  70. package/dist/events/index.d.ts +3 -0
  71. package/dist/events/index.d.ts.map +1 -0
  72. package/dist/events/index.js +5 -0
  73. package/dist/events/index.js.map +1 -0
  74. package/dist/index.d.ts +35 -0
  75. package/dist/index.d.ts.map +1 -0
  76. package/dist/index.js +98 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/interfaces/zendesk.d.ts +35 -0
  79. package/dist/interfaces/zendesk.d.ts.map +1 -0
  80. package/dist/interfaces/zendesk.js +219 -0
  81. package/dist/interfaces/zendesk.js.map +1 -0
  82. package/dist/internalTools/appActionRunnerTool.d.ts +5 -0
  83. package/dist/internalTools/appActionRunnerTool.d.ts.map +1 -0
  84. package/dist/internalTools/appActionRunnerTool.js +88 -0
  85. package/dist/internalTools/appActionRunnerTool.js.map +1 -0
  86. package/dist/internalTools/documentExtraction/documentExtraction.d.ts +129 -0
  87. package/dist/internalTools/documentExtraction/documentExtraction.d.ts.map +1 -0
  88. package/dist/internalTools/documentExtraction/documentExtraction.js +736 -0
  89. package/dist/internalTools/documentExtraction/documentExtraction.js.map +1 -0
  90. package/dist/internalTools/documentExtraction/types.d.ts +29 -0
  91. package/dist/internalTools/documentExtraction/types.d.ts.map +1 -0
  92. package/dist/internalTools/documentExtraction/types.js +35 -0
  93. package/dist/internalTools/documentExtraction/types.js.map +1 -0
  94. package/dist/internalTools/libraryActionRunnerTool.d.ts +4 -0
  95. package/dist/internalTools/libraryActionRunnerTool.d.ts.map +1 -0
  96. package/dist/internalTools/libraryActionRunnerTool.js +53 -0
  97. package/dist/internalTools/libraryActionRunnerTool.js.map +1 -0
  98. package/dist/internalTools/retell.d.ts +12 -0
  99. package/dist/internalTools/retell.d.ts.map +1 -0
  100. package/dist/internalTools/retell.js +54 -0
  101. package/dist/internalTools/retell.js.map +1 -0
  102. package/dist/internalTools/sendPlaceholderMessage.d.ts +14 -0
  103. package/dist/internalTools/sendPlaceholderMessage.d.ts.map +1 -0
  104. package/dist/internalTools/sendPlaceholderMessage.js +61 -0
  105. package/dist/internalTools/sendPlaceholderMessage.js.map +1 -0
  106. package/dist/internalTools/timer.d.ts +99 -0
  107. package/dist/internalTools/timer.d.ts.map +1 -0
  108. package/dist/internalTools/timer.js +139 -0
  109. package/dist/internalTools/timer.js.map +1 -0
  110. package/dist/internalTools/voice/escalateVoiceCall.d.ts +2 -0
  111. package/dist/internalTools/voice/escalateVoiceCall.d.ts.map +1 -0
  112. package/dist/internalTools/voice/escalateVoiceCall.js +52 -0
  113. package/dist/internalTools/voice/escalateVoiceCall.js.map +1 -0
  114. package/dist/internalTools/voice/retell.d.ts +12 -0
  115. package/dist/internalTools/voice/retell.d.ts.map +1 -0
  116. package/dist/internalTools/voice/retell.js +54 -0
  117. package/dist/internalTools/voice/retell.js.map +1 -0
  118. package/dist/internalTools/voice/sendPlaceholderMessage.d.ts +14 -0
  119. package/dist/internalTools/voice/sendPlaceholderMessage.d.ts.map +1 -0
  120. package/dist/internalTools/voice/sendPlaceholderMessage.js +61 -0
  121. package/dist/internalTools/voice/sendPlaceholderMessage.js.map +1 -0
  122. package/dist/interrupts/BaseInterruptSessionManager.d.ts +49 -0
  123. package/dist/interrupts/BaseInterruptSessionManager.d.ts.map +1 -0
  124. package/dist/interrupts/BaseInterruptSessionManager.js +34 -0
  125. package/dist/interrupts/BaseInterruptSessionManager.js.map +1 -0
  126. package/dist/interrupts/MemoryInterruptSessionManager.d.ts +14 -0
  127. package/dist/interrupts/MemoryInterruptSessionManager.d.ts.map +1 -0
  128. package/dist/interrupts/MemoryInterruptSessionManager.js +60 -0
  129. package/dist/interrupts/MemoryInterruptSessionManager.js.map +1 -0
  130. package/dist/interrupts/MindedInterruptSessionManager.d.ts +13 -0
  131. package/dist/interrupts/MindedInterruptSessionManager.d.ts.map +1 -0
  132. package/dist/interrupts/MindedInterruptSessionManager.js +162 -0
  133. package/dist/interrupts/MindedInterruptSessionManager.js.map +1 -0
  134. package/dist/interrupts/interruptSessionManagerFactory.d.ts +3 -0
  135. package/dist/interrupts/interruptSessionManagerFactory.d.ts.map +1 -0
  136. package/dist/interrupts/interruptSessionManagerFactory.js +56 -0
  137. package/dist/interrupts/interruptSessionManagerFactory.js.map +1 -0
  138. package/dist/llm/createLlmInstance.d.ts +3 -0
  139. package/dist/llm/createLlmInstance.d.ts.map +1 -0
  140. package/dist/llm/createLlmInstance.js +31 -0
  141. package/dist/llm/createLlmInstance.js.map +1 -0
  142. package/dist/nodes/addAppToolNode.d.ts +13 -0
  143. package/dist/nodes/addAppToolNode.d.ts.map +1 -0
  144. package/dist/nodes/addAppToolNode.js +87 -0
  145. package/dist/nodes/addAppToolNode.js.map +1 -0
  146. package/dist/nodes/addBrowserTaskNode.d.ts +13 -0
  147. package/dist/nodes/addBrowserTaskNode.d.ts.map +1 -0
  148. package/dist/nodes/addBrowserTaskNode.js +167 -0
  149. package/dist/nodes/addBrowserTaskNode.js.map +1 -0
  150. package/dist/nodes/addBrowserTaskRunNode.d.ts +13 -0
  151. package/dist/nodes/addBrowserTaskRunNode.d.ts.map +1 -0
  152. package/dist/nodes/addBrowserTaskRunNode.js +167 -0
  153. package/dist/nodes/addBrowserTaskRunNode.js.map +1 -0
  154. package/dist/nodes/addHumanInTheLoopNode.d.ts +9 -0
  155. package/dist/nodes/addHumanInTheLoopNode.d.ts.map +1 -0
  156. package/dist/nodes/addHumanInTheLoopNode.js +22 -0
  157. package/dist/nodes/addHumanInTheLoopNode.js.map +1 -0
  158. package/dist/nodes/addJumpToNode.d.ts +7 -0
  159. package/dist/nodes/addJumpToNode.d.ts.map +1 -0
  160. package/dist/nodes/addJumpToNode.js +24 -0
  161. package/dist/nodes/addJumpToNode.js.map +1 -0
  162. package/dist/nodes/addJunctionNode.d.ts +7 -0
  163. package/dist/nodes/addJunctionNode.d.ts.map +1 -0
  164. package/dist/nodes/addJunctionNode.js +20 -0
  165. package/dist/nodes/addJunctionNode.js.map +1 -0
  166. package/dist/nodes/addPromptNode.d.ts +18 -0
  167. package/dist/nodes/addPromptNode.d.ts.map +1 -0
  168. package/dist/nodes/addPromptNode.js +253 -0
  169. package/dist/nodes/addPromptNode.js.map +1 -0
  170. package/dist/nodes/addRpaNode.d.ts +18 -0
  171. package/dist/nodes/addRpaNode.d.ts.map +1 -0
  172. package/dist/nodes/addRpaNode.js +180 -0
  173. package/dist/nodes/addRpaNode.js.map +1 -0
  174. package/dist/nodes/addToolNode.d.ts +13 -0
  175. package/dist/nodes/addToolNode.d.ts.map +1 -0
  176. package/dist/nodes/addToolNode.js +67 -0
  177. package/dist/nodes/addToolNode.js.map +1 -0
  178. package/dist/nodes/addToolRunNode.d.ts +17 -0
  179. package/dist/nodes/addToolRunNode.d.ts.map +1 -0
  180. package/dist/nodes/addToolRunNode.js +59 -0
  181. package/dist/nodes/addToolRunNode.js.map +1 -0
  182. package/dist/nodes/addTriggerNode.d.ts +7 -0
  183. package/dist/nodes/addTriggerNode.d.ts.map +1 -0
  184. package/dist/nodes/addTriggerNode.js +25 -0
  185. package/dist/nodes/addTriggerNode.js.map +1 -0
  186. package/dist/nodes/compilePrompt.d.ts +5 -0
  187. package/dist/nodes/compilePrompt.d.ts.map +1 -0
  188. package/dist/nodes/compilePrompt.js +76 -0
  189. package/dist/nodes/compilePrompt.js.map +1 -0
  190. package/dist/nodes/nodeFactory.d.ts +16 -0
  191. package/dist/nodes/nodeFactory.d.ts.map +1 -0
  192. package/dist/nodes/nodeFactory.js +45 -0
  193. package/dist/nodes/nodeFactory.js.map +1 -0
  194. package/dist/nodes/rpaStepsExecutor.d.ts +5 -0
  195. package/dist/nodes/rpaStepsExecutor.d.ts.map +1 -0
  196. package/dist/nodes/rpaStepsExecutor.js +156 -0
  197. package/dist/nodes/rpaStepsExecutor.js.map +1 -0
  198. package/dist/platform/config.d.ts +16 -0
  199. package/dist/platform/config.d.ts.map +1 -0
  200. package/dist/platform/config.js +80 -0
  201. package/dist/platform/config.js.map +1 -0
  202. package/dist/platform/mindedCheckpointSaver.d.ts +10 -0
  203. package/dist/platform/mindedCheckpointSaver.d.ts.map +1 -0
  204. package/dist/platform/mindedCheckpointSaver.js +137 -0
  205. package/dist/platform/mindedCheckpointSaver.js.map +1 -0
  206. package/dist/platform/mindedConnection.d.ts +15 -0
  207. package/dist/platform/mindedConnection.d.ts.map +1 -0
  208. package/dist/platform/mindedConnection.js +254 -0
  209. package/dist/platform/mindedConnection.js.map +1 -0
  210. package/dist/platform/mindedConnectionTypes.d.ts +404 -0
  211. package/dist/platform/mindedConnectionTypes.d.ts.map +1 -0
  212. package/dist/platform/mindedConnectionTypes.js +51 -0
  213. package/dist/platform/mindedConnectionTypes.js.map +1 -0
  214. package/dist/platform/models/mindedChatOpenAI.d.ts +20 -0
  215. package/dist/platform/models/mindedChatOpenAI.d.ts.map +1 -0
  216. package/dist/platform/models/mindedChatOpenAI.js +32 -0
  217. package/dist/platform/models/mindedChatOpenAI.js.map +1 -0
  218. package/dist/platform/models/parallelWrapper.d.ts +17 -0
  219. package/dist/platform/models/parallelWrapper.d.ts.map +1 -0
  220. package/dist/platform/models/parallelWrapper.js +105 -0
  221. package/dist/platform/models/parallelWrapper.js.map +1 -0
  222. package/dist/platform/piiGateway/gateway.d.ts +14 -0
  223. package/dist/platform/piiGateway/gateway.d.ts.map +1 -0
  224. package/dist/platform/piiGateway/gateway.js +117 -0
  225. package/dist/platform/piiGateway/gateway.js.map +1 -0
  226. package/dist/platform/piiGateway/index.d.ts +3 -0
  227. package/dist/platform/piiGateway/index.d.ts.map +1 -0
  228. package/dist/platform/piiGateway/index.js +7 -0
  229. package/dist/platform/piiGateway/index.js.map +1 -0
  230. package/dist/platform/piiGateway/types.d.ts +27 -0
  231. package/dist/platform/piiGateway/types.d.ts.map +1 -0
  232. package/dist/platform/piiGateway/types.js +3 -0
  233. package/dist/platform/piiGateway/types.js.map +1 -0
  234. package/dist/platform/toolExecutor.d.ts +29 -0
  235. package/dist/platform/toolExecutor.d.ts.map +1 -0
  236. package/dist/platform/toolExecutor.js +84 -0
  237. package/dist/platform/toolExecutor.js.map +1 -0
  238. package/dist/platform/utils/parseAttachments.d.ts +14 -0
  239. package/dist/platform/utils/parseAttachments.d.ts.map +1 -0
  240. package/dist/platform/utils/parseAttachments.js +53 -0
  241. package/dist/platform/utils/parseAttachments.js.map +1 -0
  242. package/dist/platform/utils/tools.d.ts +6 -0
  243. package/dist/platform/utils/tools.d.ts.map +1 -0
  244. package/dist/platform/utils/tools.js +57 -0
  245. package/dist/platform/utils/tools.js.map +1 -0
  246. package/dist/playbooks/playbooks.d.ts +15 -0
  247. package/dist/playbooks/playbooks.d.ts.map +1 -0
  248. package/dist/playbooks/playbooks.js +208 -0
  249. package/dist/playbooks/playbooks.js.map +1 -0
  250. package/dist/toolsLibrary/classifier.d.ts +74 -0
  251. package/dist/toolsLibrary/classifier.d.ts.map +1 -0
  252. package/dist/toolsLibrary/classifier.js +256 -0
  253. package/dist/toolsLibrary/classifier.js.map +1 -0
  254. package/dist/toolsLibrary/extraction.d.ts +83 -0
  255. package/dist/toolsLibrary/extraction.d.ts.map +1 -0
  256. package/dist/toolsLibrary/extraction.js +328 -0
  257. package/dist/toolsLibrary/extraction.js.map +1 -0
  258. package/dist/toolsLibrary/index.d.ts +9 -0
  259. package/dist/toolsLibrary/index.d.ts.map +1 -0
  260. package/dist/toolsLibrary/index.js +46 -0
  261. package/dist/toolsLibrary/index.js.map +1 -0
  262. package/dist/toolsLibrary/parseDocument.d.ts +30 -0
  263. package/dist/toolsLibrary/parseDocument.d.ts.map +1 -0
  264. package/dist/toolsLibrary/parseDocument.js +119 -0
  265. package/dist/toolsLibrary/parseDocument.js.map +1 -0
  266. package/dist/triggers/triggerTypeToDefaultMessage.d.ts +4 -0
  267. package/dist/triggers/triggerTypeToDefaultMessage.d.ts.map +1 -0
  268. package/dist/triggers/triggerTypeToDefaultMessage.js +10 -0
  269. package/dist/triggers/triggerTypeToDefaultMessage.js.map +1 -0
  270. package/dist/types/Agent.types.d.ts +60 -0
  271. package/dist/types/Agent.types.d.ts.map +1 -0
  272. package/dist/types/Agent.types.js +9 -0
  273. package/dist/types/Agent.types.js.map +1 -0
  274. package/dist/types/Flows.types.d.ts +232 -0
  275. package/dist/types/Flows.types.d.ts.map +1 -0
  276. package/dist/types/Flows.types.js +65 -0
  277. package/dist/types/Flows.types.js.map +1 -0
  278. package/dist/types/LLM.types.d.ts +7 -0
  279. package/dist/types/LLM.types.d.ts.map +1 -0
  280. package/dist/types/LLM.types.js +11 -0
  281. package/dist/types/LLM.types.js.map +1 -0
  282. package/dist/types/LangGraph.types.d.ts +45 -0
  283. package/dist/types/LangGraph.types.d.ts.map +1 -0
  284. package/dist/types/LangGraph.types.js +77 -0
  285. package/dist/types/LangGraph.types.js.map +1 -0
  286. package/dist/types/Platform.types.d.ts +7 -0
  287. package/dist/types/Platform.types.d.ts.map +1 -0
  288. package/dist/types/Platform.types.js +11 -0
  289. package/dist/types/Platform.types.js.map +1 -0
  290. package/dist/types/Tools.types.d.ts +26 -0
  291. package/dist/types/Tools.types.d.ts.map +1 -0
  292. package/dist/types/Tools.types.js +3 -0
  293. package/dist/types/Tools.types.js.map +1 -0
  294. package/dist/types/Voice.types.d.ts +5 -0
  295. package/dist/types/Voice.types.d.ts.map +1 -0
  296. package/dist/types/Voice.types.js +3 -0
  297. package/dist/types/Voice.types.js.map +1 -0
  298. package/dist/utils/agentUtils.d.ts +5 -0
  299. package/dist/utils/agentUtils.d.ts.map +1 -0
  300. package/dist/utils/agentUtils.js +97 -0
  301. package/dist/utils/agentUtils.js.map +1 -0
  302. package/dist/utils/extractStateMemoryResponse.d.ts +5 -0
  303. package/dist/utils/extractStateMemoryResponse.d.ts.map +1 -0
  304. package/dist/utils/extractStateMemoryResponse.js +91 -0
  305. package/dist/utils/extractStateMemoryResponse.js.map +1 -0
  306. package/dist/utils/history.d.ts +4 -0
  307. package/dist/utils/history.d.ts.map +1 -0
  308. package/dist/utils/history.js +33 -0
  309. package/dist/utils/history.js.map +1 -0
  310. package/dist/utils/logger.d.ts +3 -0
  311. package/dist/utils/logger.d.ts.map +1 -0
  312. package/dist/utils/logger.js +39 -0
  313. package/dist/utils/logger.js.map +1 -0
  314. package/dist/utils/schemaUtils.d.ts +15 -0
  315. package/dist/utils/schemaUtils.d.ts.map +1 -0
  316. package/dist/utils/schemaUtils.js +56 -0
  317. package/dist/utils/schemaUtils.js.map +1 -0
  318. package/dist/utils/wait.d.ts +2 -0
  319. package/dist/utils/wait.d.ts.map +1 -0
  320. package/dist/utils/wait.js +6 -0
  321. package/dist/utils/wait.js.map +1 -0
  322. package/dist/voice/elevenLabsUtils.d.ts +65 -0
  323. package/dist/voice/elevenLabsUtils.d.ts.map +1 -0
  324. package/dist/voice/elevenLabsUtils.js +4 -0
  325. package/dist/voice/elevenLabsUtils.js.map +1 -0
  326. package/dist/voice/voiceSession.d.ts +37 -0
  327. package/dist/voice/voiceSession.d.ts.map +1 -0
  328. package/dist/voice/voiceSession.js +306 -0
  329. package/dist/voice/voiceSession.js.map +1 -0
  330. package/docs/.gitbook/assets/ADLC.png +0 -0
  331. package/docs/.gitbook/assets/PII-masking.png +0 -0
  332. package/docs/.gitbook/assets/image.png +0 -0
  333. package/docs/.gitbook/assets/on-prem.svg +4 -0
  334. package/docs/README.md +54 -0
  335. package/docs/SUMMARY.md +56 -0
  336. package/docs/examples/order-refund-flow.md +566 -0
  337. package/docs/getting-started/environment-configuration.md +158 -0
  338. package/docs/getting-started/installation.md +44 -0
  339. package/docs/getting-started/project-configuration.md +206 -0
  340. package/docs/getting-started/quick-start.md +262 -0
  341. package/docs/integrations/zendesk.md +554 -0
  342. package/docs/low-code-editor/edges.md +396 -0
  343. package/docs/low-code-editor/flows.md +74 -0
  344. package/docs/low-code-editor/nodes.md +367 -0
  345. package/docs/low-code-editor/playbooks.md +280 -0
  346. package/docs/low-code-editor/tools.md +358 -0
  347. package/docs/low-code-editor/triggers.md +182 -0
  348. package/docs/platform/on-prem.md +182 -0
  349. package/docs/platform/operator.md +89 -0
  350. package/docs/platform/pii-masking.md +221 -0
  351. package/docs/platform/scenarios.md +43 -0
  352. package/docs/platform/secrets.md +99 -0
  353. package/docs/platform/sso.md +27 -0
  354. package/docs/resources/your-first-eval.md +108 -0
  355. package/docs/sdk/agent-api.md +540 -0
  356. package/docs/sdk/debugging.md +80 -0
  357. package/docs/sdk/events.md +595 -0
  358. package/docs/sdk/logging.md +72 -0
  359. package/docs/sdk/memory.md +271 -0
  360. package/docs/sdk/parallel-llm.md +242 -0
  361. package/docs/sdk/vectorstore-query.md +60 -0
  362. package/docs/tooling/classifier.md +217 -0
  363. package/docs/tooling/document-processing.md +389 -0
  364. package/docs/tooling/extraction.md +78 -0
  365. package/docs/tooling/timers.md +61 -0
  366. package/package.json +73 -0
  367. package/src/agent.ts +1019 -0
  368. package/src/browserTask/executeBrowserTask.py +153 -0
  369. package/src/browserTask/executeBrowserTask.ts +253 -0
  370. package/src/browserTask/localBrowserTask.ts +300 -0
  371. package/src/browserTask/profile/Default/Extension Rules/000003.log +0 -0
  372. package/src/browserTask/profile/Default/Extension Scripts/000003.log +0 -0
  373. package/src/browserTask/profile/Default/Extension State/000003.log +0 -0
  374. package/src/browserTask/profile/Default/GCM Store/000003.log +0 -0
  375. package/src/browserTask/profile/Default/Local Storage/leveldb/000004.log +0 -0
  376. package/src/browserTask/profile/Default/Session Storage/000003.log +0 -0
  377. package/src/browserTask/profile/Default/Site Characteristics Database/000003.log +0 -0
  378. package/src/browserTask/profile/Default/Sync Data/LevelDB/000003.log +0 -0
  379. package/src/browserTask/profile/Default/shared_proto_db/000003.log +0 -0
  380. package/src/browserTask/profile/Default/shared_proto_db/metadata/000003.log +0 -0
  381. package/src/browserTask/types.ts +37 -0
  382. package/src/checkpointer/checkpointSaverFactory.ts +18 -0
  383. package/src/cli/index.ts +188 -0
  384. package/src/cli/lambdaHandlerTemplate.ts +78 -0
  385. package/src/cli/localOperatorSetup.ts +308 -0
  386. package/src/debugging/index.ts +1 -0
  387. package/src/debugging/llmCallbackHandler.ts +125 -0
  388. package/src/edges/createDirectEdge.ts +22 -0
  389. package/src/edges/createLogicalRouter.ts +182 -0
  390. package/src/edges/createPromptRouter.ts +213 -0
  391. package/src/edges/edgeFactory.ts +167 -0
  392. package/src/events/AgentEvents.ts +58 -0
  393. package/src/events/index.ts +3 -0
  394. package/src/index.ts +105 -0
  395. package/src/interfaces/zendesk.ts +212 -0
  396. package/src/internalTools/appActionRunnerTool.ts +68 -0
  397. package/src/internalTools/documentExtraction/documentExtraction.ts +804 -0
  398. package/src/internalTools/documentExtraction/types.ts +59 -0
  399. package/src/internalTools/libraryActionRunnerTool.ts +62 -0
  400. package/src/internalTools/timer.ts +125 -0
  401. package/src/internalTools/voice/escalateVoiceCall.ts +15 -0
  402. package/src/internalTools/voice/retell.ts +28 -0
  403. package/src/internalTools/voice/sendPlaceholderMessage.ts +27 -0
  404. package/src/interrupts/BaseInterruptSessionManager.ts +80 -0
  405. package/src/interrupts/MemoryInterruptSessionManager.ts +63 -0
  406. package/src/interrupts/MindedInterruptSessionManager.ts +163 -0
  407. package/src/interrupts/interruptSessionManagerFactory.ts +20 -0
  408. package/src/llm/createLlmInstance.ts +33 -0
  409. package/src/nodes/addAppToolNode.ts +111 -0
  410. package/src/nodes/addBrowserTaskNode.ts +191 -0
  411. package/src/nodes/addBrowserTaskRunNode.ts +190 -0
  412. package/src/nodes/addHumanInTheLoopNode.ts +26 -0
  413. package/src/nodes/addJumpToNode.ts +26 -0
  414. package/src/nodes/addJunctionNode.ts +21 -0
  415. package/src/nodes/addPromptNode.ts +305 -0
  416. package/src/nodes/addRpaNode.ts +217 -0
  417. package/src/nodes/addToolNode.ts +84 -0
  418. package/src/nodes/addToolRunNode.ts +80 -0
  419. package/src/nodes/addTriggerNode.ts +27 -0
  420. package/src/nodes/compilePrompt.ts +44 -0
  421. package/src/nodes/nodeFactory.ts +61 -0
  422. package/src/nodes/rpaStepsExecutor.ts +175 -0
  423. package/src/platform/config.ts +89 -0
  424. package/src/platform/mindedCheckpointSaver.ts +146 -0
  425. package/src/platform/mindedConnection.ts +250 -0
  426. package/src/platform/mindedConnectionTypes.ts +495 -0
  427. package/src/platform/models/mindedChatOpenAI.ts +49 -0
  428. package/src/platform/models/parallelWrapper.ts +141 -0
  429. package/src/platform/piiGateway/gateway.ts +103 -0
  430. package/src/platform/piiGateway/index.ts +5 -0
  431. package/src/platform/piiGateway/types.ts +29 -0
  432. package/src/platform/toolExecutor.ts +106 -0
  433. package/src/platform/utils/parseAttachments.ts +56 -0
  434. package/src/platform/utils/tools.ts +55 -0
  435. package/src/playbooks/playbooks.ts +200 -0
  436. package/src/toolsLibrary/classifier.ts +326 -0
  437. package/src/toolsLibrary/extraction.ts +393 -0
  438. package/src/toolsLibrary/index.ts +10 -0
  439. package/src/toolsLibrary/parseDocument.ts +129 -0
  440. package/src/triggers/triggerTypeToDefaultMessage.ts +9 -0
  441. package/src/types/Agent.types.ts +73 -0
  442. package/src/types/Flows.types.ts +262 -0
  443. package/src/types/LLM.types.ts +15 -0
  444. package/src/types/LangGraph.types.ts +86 -0
  445. package/src/types/Platform.types.ts +6 -0
  446. package/src/types/Tools.types.ts +28 -0
  447. package/src/types/Voice.types.ts +4 -0
  448. package/src/utils/agentUtils.ts +69 -0
  449. package/src/utils/history.ts +38 -0
  450. package/src/utils/logger.ts +38 -0
  451. package/src/utils/schemaUtils.ts +68 -0
  452. package/src/utils/wait.ts +1 -0
  453. package/src/voice/elevenLabsUtils.ts +81 -0
  454. package/src/voice/voiceSession.ts +309 -0
@@ -0,0 +1,182 @@
1
+ # **Minded On-prem Deployment**
2
+
3
+ Minded supports on-prem deployment of the Operator, allowing AI Agents to run against your internal tools and APIs while ensuring that sensitive data such as PII never leaves your cloud.
4
+
5
+ # **Architecture**
6
+
7
+ Minded is designed to democratize agent development while maintaining enterprise-grade security. You can keep sensitive data such as PII in your VPC, while Minded manages the orchestration and tooling.
8
+
9
+ The architecture is split into two planes:
10
+
11
+ - **Control Plane**: the Minded platform where agents are built, orchestrated, and monitored.
12
+ - **Agentic Plane**: where the agent’s compute and data live, ensuring tasks run securely next to your systems, and can be safely deployed on your cloud.
13
+
14
+ The following diagram describes the overall Minded architecture.
15
+
16
+ <figure><img src="../.gitbook/assets/on-prem.svg" alt="Minded On-prem Architecture Diagram"></figure>
17
+
18
+ ## Control Plane
19
+
20
+ ### Overview
21
+
22
+ The control plane forms the backbone of the Minded Platform. It runs entirely in Minded’s VPC and includes the key services that power agent development and orchestration:
23
+
24
+ - **Minded Studio** – a web application for building agents in both code and no-code.
25
+
26
+ - **Code (GitHub integration)** – source repository where agent logic is versioned and managed.
27
+
28
+ - **Copilot** – an AI assistant for agent creation and improvement.
29
+
30
+ - **Operator** – a lightweight service that executes instructions using LLMs inside a browser that is triggered by the Agent Runner.
31
+
32
+ - **PII Masker** – an inline service that redacts sensitive data before any payload leaves the VPC, as well as unmask the data when there is a business need such as responding to a customer request.
33
+
34
+ The control plane communicates with the Agentic Plane in a PII-redacted manner, ensuring that sensitive data never leaves the customer’s environment.
35
+
36
+ ### Deployment and Security
37
+
38
+ The control plane is operated by Minded in AWS, within Minded’s managed VPC. It orchestrates the Agentic Plane using **least-privilege IAM roles** and scoped API endpoints. No customer PII is transmitted or stored in the control plane.
39
+
40
+ ### Observability and Monitoring
41
+
42
+ Customers monitor and troubleshoot their agents through **Minded Studio**, which provides execution traces, logs, and performance analytics. Data exposed in Studio is always scrubbed of PII, with sensitive context available only inside the Agentic Plane.
43
+
44
+ ## Agentic Plane
45
+
46
+ ### **Overview**
47
+
48
+ The Agentic Plane runs in the customer’s VPC and contains both the **compute** and the **data** for agents. This ensures that sensitive operations, such as accessing internal systems or handling PII, remain under the customer’s control. The control plane orchestrates tasks but does not directly access data.
49
+
50
+ ### **Components of the Agentic Plane**
51
+
52
+ The Agentic Plane includes the following components:
53
+
54
+ - **Agent Runner** – a containerized service responsible for executing agent logic and coordinating with the Agentic Plane.
55
+
56
+ - **Browser (Chromium)** – a session-scoped Chromium instance for interacting with websites and applications.
57
+
58
+ - **AI Agent (ECS)** – a containerized compute layer on Amazon ECS that connects to the LLM and the browser to complete tasks.
59
+
60
+ - **Storage (Amazon S3)** – local bucket for logs, screenshots, and artifacts. Additionally Minded supports Postgres and Redis instances that store metadata, configuration, and state.
61
+
62
+ ### **Deployment and Security**
63
+
64
+ The Agentic Plane is deployed inside the customer’s VPC using **Terraform bundles** or **CloudFormation templates**. Resources run with **least-privilege IAM roles**, and no inbound traffic is enabled. Sensitive artifacts (logs, screenshots) remain in S3 within the customer’s environment.
65
+
66
+ All communication between the control plane and Agentic Plane is encrypted (TLS) and PII-masked. This ensures the control plane has the orchestration context it needs without accessing sensitive information.
67
+
68
+ # **Deployment**
69
+
70
+ Minded’s on-premises deployment model is designed to be simple for your DevOps team while keeping security controls in your hands. To achieve this, resources are split into two categories:
71
+
72
+ ## Glacier Resources
73
+
74
+ Glacier resources are provisioned once and remain static. These include foundational infrastructure such as:
75
+
76
+ - **Amazon S3 buckets** for storing logs, screenshots, and artifacts.
77
+
78
+ - **Amazon ECR repositories** for hosting operator images.
79
+
80
+ - **VPC networking resources** required for isolation and connectivity.
81
+
82
+ Glacier resources are created during the initial deployment and generally do not require further changes.
83
+
84
+ ## Dynamic Resources
85
+
86
+ Dynamic resources are permissions and roles that are granted to Minded in a **least-privileged** fashion. These enable Minded to safely manage, troubleshoot, and update the **Operator** inside your VPC without your DevOps team needing to intervene. Examples include:
87
+
88
+ - IAM roles with scoped permissions for ECS task updates.
89
+
90
+ - Limited access policies for pulling container images from ECR.
91
+
92
+ - Runtime orchestration permissions for launching new tasks.
93
+
94
+ ## Terraform Plan
95
+
96
+ Minded provides a [Terraform Plan](https://github.com/minded-ai/onprem-terraform) to automate setup, with minimal effort from DevOps teams and virtually no required maintenance from your side . The plan performs two steps:
97
+
98
+ 1. **Provision glacier resources** – S3, ECR, and networking resources required for the operator.
99
+
100
+ 2. **Delegate minimal access** – IAM roles and policies that allow Minded to deploy updates securely.
101
+
102
+ ## Ongoing On-Prem Operator Updates
103
+
104
+ Operator updates are fully managed by Minded with no involvement required from your DevOps or security team. Updates follow this process:
105
+
106
+ 1. Minded uploads a new operator image to **Amazon ECR**.
107
+
108
+ 2. Using the pre-granted IAM role, Minded creates a new **Amazon ECS Task** inside your VPC.
109
+
110
+ 3. The ECS task replaces the running operator, ensuring you are always up to date with the latest version.
111
+
112
+ ## Ongoing Agent Updates
113
+
114
+ Agents themselves can be updated in two ways:
115
+
116
+ - **Code updates** – by pushing directly to the GitHub repository that stores agent logic.
117
+
118
+ - **No-code updates** – via the Minded Studio platform.
119
+
120
+ After changes are applied, agents are explicitly deployed to production from the platform. A new version of the **Agent Runner** is rolled out in the Agentic Plane, which then communicates with your Operator at runtime.
121
+
122
+ # **Security**
123
+
124
+ Minded’s architecture is built around strict security controls, with clear separation of responsibilities between infrastructure that Minded manages and resources that remain fully within your VPC.
125
+
126
+ ## Separation of Duties
127
+
128
+ - **Glacier infrastructure** (for example, S3 buckets and ECR repositories) is provisioned once and managed by your DevOps team.
129
+
130
+ - **Dynamic deployment access** is delegated to Minded through scoped IAM roles, allowing us to update the operator without requiring ongoing involvement from your team.
131
+
132
+ ## Least Privilege Enforcement
133
+
134
+ - **Scoped IAM policies** limit Minded’s access to only the resources needed for deployment and updates.
135
+
136
+ - **Explicit role ARNs** define trust boundaries for cross-account operations.
137
+
138
+ - **IP restrictions on S3 buckets** ensure that only traffic from your environment is accepted.
139
+
140
+ ## Auditability
141
+
142
+ - All cross-account actions performed by Minded are logged in **AWS CloudTrail** under the assumed role.
143
+
144
+ - Customers can review and audit these logs at any time.
145
+
146
+ ## No Public Exposure
147
+
148
+ - No resources in the Agentic Plane are publicly accessible.
149
+
150
+ - Access is tied to your private networking controls such as **VPNs** or specific **AWS principals**.
151
+
152
+ ## How Minded Keeps Operator PII Secure
153
+
154
+ Minded ensures that sensitive information, such as PII, never leaves your environment:
155
+
156
+ - **Logs and Screenshots** – All operator logs and browser screenshots are stored in your **Amazon S3 bucket**, within your VPC boundary.
157
+
158
+ - **LLM Calls** – Decisions and browser actions are governed by an LLM, but all calls are routed to your selected LLM deployment (for example, **Amazon Bedrock**, **Azure OpenAI**, or **Anthropic in VPC**). This ensures that model inference runs entirely in your environment, not in Minded’s.
159
+
160
+ - **Redaction** – The **PII Masker** enforces data minimization before any metadata leaves your VPC, ensuring observability without exposure.
161
+
162
+ # **High Availability and Disaster Recovery**
163
+
164
+ Minded’s architecture is designed for resilience across both the control plane and the Agentic Plane.
165
+
166
+ ## High Availability
167
+
168
+ - The **control plane** runs in Minded’s managed VPC with multi-zone deployments across AWS regions. Services such as **Postgres**, **Redis**, and **Agent Worker** are deployed with failover to ensure continuity.
169
+
170
+ - The **Agentic Plane** runs inside your VPC using **Amazon ECS** for compute and **Amazon S3** for storage. ECS tasks are distributed across availability zones to reduce the risk of single-zone outages.
171
+
172
+ ## Disaster Recovery
173
+
174
+ - **State Restoration** – Agent run state, metadata, and orchestration traces are stored in **Postgres** and **S3**, enabling Minded to restore the state of ongoing or historical agent runs.
175
+
176
+ - **Step-Level Troubleshooting** – Execution traces are logged to **S3** in your VPC, allowing you to replay or inspect each step of an agent run without exposing PII.
177
+
178
+ - **Minimal Recovery Time** – New ECS tasks can be provisioned quickly from **ECR images**, ensuring rapid recovery in the event of a failure.
179
+
180
+ Together, these mechanisms ensure that agent execution can continue with minimal disruption, while preserving full observability and auditability of every step.
181
+
182
+ [image1]: data:image/png;base64,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
@@ -0,0 +1,89 @@
1
+ ## Operator (AI Browser)
2
+
3
+ The Operator lets an agent run autonomous web actions using a live Chromium, guided by an LLM of choice. It supports structured inputs/outputs, live view previews, optional country proxying, and an on-prem mode.
4
+
5
+ ### What it does
6
+ - **Plans + Executes**: The node first asks the LLM to propose parameters (based on your input schema) and compiles your prompt. It then starts a browser session and runs the task to completion.
7
+ - **Live session**: Shows a live view preview of the browser session.
8
+ - **Structured I/O**: Define `inputSchema` to guide the LLM’s tool-call arguments and `outputSchema` to hint desired output structure.
9
+ - **Tool access**: Exposes agent tools that allow execution requests to the browser agent.
10
+
11
+ ### Configuration fields (node)
12
+ - **prompt (required)**: Natural-language instructions for the browser agent. Supports variables from the state object.
13
+ - **model (optional)**: Preferred LLM (UI defaults to `gpt-4o`).
14
+ - **inputSchema (optional)**: Array of fields `{ name, type: 'string'|'number', description?, required? }`.
15
+ - **outputSchema (optional)**: Array of fields `{ name, type: 'string'|'number', description?, required? }`. Sent to the browser agent to shape outputs.
16
+ - **proxy (optional)**: Two‑letter country code (e.g., `IL`, `US`). Disabled when running on‑prem.
17
+ - **hooks (optional)**: Array of `{ name }`. Passed to the browser agent.
18
+
19
+ ### On‑prem mode
20
+
21
+ By default, the browser agent runs on the cloud. For customers who want to run the browser agent on their own infrastructure & network, on-prem mode is supported out of the box by running the on-prem kit on a PC / cloud VM.
22
+
23
+ Please contact us to assist you with on-prem setup at support@minded.com.
24
+
25
+ #### How it works
26
+
27
+ The on-prem kit acts as a CDP server that launches chromium locally and exposes the protocol via websocket to the Minded backend service thus while the browser agent runs on the cloud, the browser is running locally inside the customer's network allowing it to access internet services without whitelisting.
28
+
29
+ #### Installation
30
+
31
+ 1. Enable on-prem mode in the node configuration (onPrem: true)
32
+ 2. Run the docker image with the agent ID and environment variables
33
+ Production:
34
+ ```
35
+ docker run --name --pull minded-browser-onprem -e AGENT_ID=[Agent ID] public.ecr.aws/o9t8x5z4/browser-use-onprem-kit:latest
36
+ ```
37
+
38
+ ### Proxy
39
+
40
+ The browser agent can be configured to use a proxy server. This is useful when the browser agent needs to access the internet through a proxy server. Enable the proxy in the node configuration (proxy: 'UK').
41
+
42
+ ### MFA
43
+
44
+ The browser agent can be configured to use MFA. Currently TOTP is supported out of the box for MFA login flow.
45
+
46
+ ### Tools
47
+
48
+ Operators can leverage **tools**—reusable functions that the agent can call during a browser session to perform specific actions (e.g., extract data, interact with APIs, update memory, etc.). Tools are defined using the platform’s [Tool interface](../low-code-editor/tools.md), and can be made available to the browser agent for use within your browser task flows.
49
+
50
+ #### How tools work in operators
51
+
52
+ - **Tool calls**: During a browser task, the LLM can decide to call any tool that is registered and exposed to the agent. The tool receives validated input, the current state, and the agent instance.
53
+ - **Structured input/output**: Tools use Zod schemas for input validation and can return structured results, which are sent back to the LLM and/or merged into agent memory.
54
+ - **Tools available to browser tasks**: Tools marked as `allowExecutionRequests: true` are available to all nodes, including browser tasks.
55
+
56
+ #### Tool execution in operators
57
+ You can mention tool names in your browser task prompt to encourage the LLM to use them, or let the LLM decide when to call them based on context.
58
+
59
+ When the LLM calls a tool during a browser task:
60
+
61
+ - The tool’s `execute` function runs with the provided input and current state.
62
+ - Any returned `state` is merged into the agent’s memory/state.
63
+ - The `result` is sent back to the LLM and can be used in subsequent reasoning or actions.
64
+
65
+ For more on tool structure and best practices, see [Tools documentation](../low-code-editor/tools.md).
66
+
67
+ #### Browser manipulation inside tool
68
+
69
+ You can manipulate the browser using a package of choice (e.g. puppeteer, playwright, etc.) by using the CDP URL that is passed to the tool in the state object.
70
+
71
+
72
+ ### Operator node example
73
+ ```yaml
74
+ # Flow YAML snippet illustrating a browserTask node
75
+ - name: 444f2347-dcc0-4c4e-b0af-3743033c8f5e
76
+ type: browserTask
77
+ displayName: Search product price in Amazon
78
+ prompt: |
79
+ Your task is to search for a product in Amazon and return the price of the product.
80
+
81
+ 1. Navigate to amazon.com
82
+ 2. Search for "iphone 15"
83
+ 3. Return the price of the product
84
+ model: gpt-4o
85
+ inputSchema: []
86
+ outputSchema: []
87
+ proxy: ''
88
+ onPrem: false
89
+ ```
@@ -0,0 +1,221 @@
1
+ # PII Masking
2
+
3
+ ## Overview
4
+
5
+ The Minded platform provides built-in protection for Personally Identifiable Information (PII) through an advanced masking mechanism. This feature ensures that sensitive data remains secure throughout your application's lifecycle while preserving the contextual integrity of your business logic.
6
+
7
+ <figure><img src="../.gitbook/assets/PII-masking.png" alt="PII Masking Flow Diagram"></figure>
8
+
9
+ ## How to Use PII Masking
10
+
11
+ ### Step 1: Configure PII Masking in the Minded Platform
12
+
13
+ To enable PII masking, go to the agent configuration panel and toggle **"Enable PII Masking"**. Then, configure the masking behavior according to your needs by specifying:
14
+
15
+ - **Entity Types**: Define which data entities should be treated as PII. Any entity that requires masking must be explicitly listed.
16
+ - **Detection Model**: By default, Minded uses OpenAI's GPT-4.1-mini for PII detection. Optionally, you can provide a custom Azure OpenAI deployment. Be sure to include the corresponding API key in the environment's secrets.
17
+ - **TTL Settings**: TTL (Time-to-Live) determines how long masked data is stored for a specific `sessionId`. The default TTL is 14 hours.
18
+ - **Trigger SessionId Field**: Specify the property name in your incoming webhook payload that contains the session ID. This field is used to identify and group PII data per session. It must be a single word with no special characters (only letters, numbers, and underscores allowed).
19
+
20
+ Once enabled, PII masking is automatically applied at critical points within the platform:
21
+
22
+ - All webhook payloads are masked upon receipt.
23
+ - App integrations undergo automatic unmasking before requests and re-masking after responses.
24
+
25
+ ### Step 2: Use PII Masking via the Minded SDK
26
+
27
+ Minded provides automatic PII masking capabilities for HTTP requests within your agent workflows. When a trigger is received with a sessionId, the PII masking functionality is automatically initialized and made available to your custom code through the agent's PII gateway.
28
+
29
+ #### PII Gateway for HTTP Requests
30
+
31
+ The PII gateway enables secure HTTP communication by automatically handling PII masking/unmasking for your API calls. It provides a complete HTTP client interface similar to popular libraries like Axios, supporting all common HTTP methods.
32
+
33
+ The PII masking gateway ensures:
34
+
35
+ - **Automatic Unmasking**: Requests are automatically unmasked before being sent to external APIs
36
+ - **Secure Routing**: All requests are routed through Minded's secure gateway infrastructure
37
+ - **Response Masking**: API responses are automatically masked before being returned to your agent
38
+ - **Session Isolation**: PII data is properly isolated per session using the sessionId
39
+ - **Error Handling**: Comprehensive error handling for network issues and API failures
40
+
41
+ > **Note:** API error responses are **not** masked. The PII gateway requires a valid sessionId to function properly.
42
+
43
+ #### Available HTTP Methods
44
+
45
+ The PII gateway supports all standard HTTP methods:
46
+
47
+ ```ts
48
+ // GET request
49
+ const userData = await agent.piiGateway.get(sessionId, 'https://api.example.com/user/123');
50
+
51
+ // POST request
52
+ const createResult = await agent.piiGateway.post(sessionId, 'https://api.example.com/users', {
53
+ name: 'John Doe',
54
+ email: 'john@example.com',
55
+ });
56
+
57
+ // PUT request
58
+ const updateResult = await agent.piiGateway.put(sessionId, 'https://api.example.com/user/123', {
59
+ email: 'newemail@example.com',
60
+ });
61
+
62
+ // DELETE request
63
+ const deleteResult = await agent.piiGateway.delete(sessionId, 'https://api.example.com/user/123');
64
+
65
+ // PATCH request
66
+ const patchResult = await agent.piiGateway.patch(sessionId, 'https://api.example.com/user/123', {
67
+ email: 'updated@example.com',
68
+ });
69
+ ```
70
+
71
+ #### Example Usage in Tools
72
+
73
+ ```ts
74
+ // POST request example - within a custom tool
75
+ import { Tool } from '@minded-ai/mindedjs';
76
+ import { logger } from '@minded-ai/mindedjs';
77
+
78
+ const modelParams = z.object({
79
+ prev: z.string().describe('The email to update'),
80
+ new: z.string().describe('The new email address'),
81
+ });
82
+
83
+ const updateEmailTool: Tool<any, any> = {
84
+ name: 'updateEmail',
85
+ description: 'Update the email',
86
+ input: modelParams,
87
+ execute: async ({ input, state, agent }) => {
88
+ try {
89
+ logger.info('Updating email via PII gateway', {
90
+ sessionId: state.sessionId,
91
+ });
92
+
93
+ const response = await agent.piiGateway.post(state.sessionId, 'https://www.acme.com/update_email', {
94
+ oldEmail: input.prev,
95
+ newEmail: input.new,
96
+ });
97
+
98
+ logger.info('Email update successful', {
99
+ sessionId: state.sessionId,
100
+ status: response.status,
101
+ });
102
+
103
+ return {
104
+ result: 'Email updated successfully',
105
+ state: {
106
+ memory: {
107
+ emailUpdated: true,
108
+ lastEmailUpdate: new Date().toISOString(),
109
+ },
110
+ },
111
+ };
112
+ } catch (err) {
113
+ logger.error({
114
+ message: 'Email update failed',
115
+ sessionId: state.sessionId,
116
+ err,
117
+ });
118
+ throw err;
119
+ }
120
+ },
121
+ };
122
+ ```
123
+
124
+ #### Request Configuration
125
+
126
+ You can also pass additional configuration options:
127
+
128
+ ```ts
129
+ const response = await agent.piiGateway.post(
130
+ sessionId,
131
+ 'https://api.example.com/data',
132
+ { data: 'example' },
133
+ {
134
+ headers: {
135
+ Authorization: 'Bearer token',
136
+ 'Content-Type': 'application/json',
137
+ },
138
+ params: {
139
+ version: 'v1',
140
+ format: 'json',
141
+ },
142
+ },
143
+ );
144
+ ```
145
+
146
+ #### How It Works
147
+
148
+ 1. **Trigger Received**: When your agent receives a trigger with a sessionId, the PII masking gateway is automatically initialized and available via `agent.piiGateway`
149
+ 2. **Session Binding**: The PII gateway is bound to the specific session context, ensuring proper PII isolation
150
+ 3. **Request Processing**: When you make HTTP requests through the gateway:
151
+ - Request data is automatically unmasked using session-specific mappings
152
+ - The request is sent to the target API with real, unmasked data
153
+ - The response is received and automatically masked before being returned
154
+ 4. **Error Handling**: Network errors and API errors are properly handled and logged
155
+
156
+ ## How PII Masking Works
157
+
158
+ ### Input Processing
159
+
160
+ The masking workflow begins as data enters the Minded platform:
161
+
162
+ 1. The platform receives input (e.g. JSON object or string) tagged with a unique `sessionId`.
163
+
164
+ 2. PII entities are identified using the configured detection model.
165
+
166
+ 3. Detected entities are replaced with structured placeholders such as:
167
+
168
+ - `<PERSON1>`, `<PERSON2>` for names
169
+ - `<PHONE1>` for phone numbers
170
+ - `<ADDRESS1>`, `<ADDRESS2>` for addresses
171
+ - Other entity types as defined in your configuration
172
+
173
+ 4. A secure internal PII database (PII-DB) manages the mapping:
174
+
175
+ - Each `sessionId` has its own isolated mapping store
176
+ - Example mapping:
177
+
178
+ ```
179
+ "Kate" → <PERSON1>
180
+ "Josh Wildon" → <PERSON2>
181
+ ```
182
+
183
+ - Consistent masking/unmasking is maintained throughout the session
184
+ - Data is automatically purged from the PII-DB based on TTL settings
185
+
186
+ ### Session ID Configuration
187
+
188
+ The **Trigger SessionId Field** setting in the UI specifies which field in your webhook payload contains the session identifier:
189
+
190
+ - **Field Name**: Must be a valid property name (letters, numbers, underscores only)
191
+ - **Examples**: `sessionId`, `session_id`, `conversationId`, `userId`
192
+ - **Purpose**: Groups all PII data for a specific user session together
193
+ - **Requirements**:
194
+ - Single word identifier
195
+ - No special characters except underscores
196
+ - Must exist in every webhook payload
197
+
198
+ Example webhook payload where we set **Trigger SessionId Field** to **webhookId**:
199
+
200
+ ```json
201
+ {
202
+ "webhookId": "user_12345_conversation_67890",
203
+ "customerName": "John Doe",
204
+ "email": "john.doe@example.com",
205
+ "orderDetails": "Need help with order #ABC123"
206
+ }
207
+ ```
208
+
209
+ ### Mask Consistency
210
+
211
+ The platform guarantees deterministic masking within a session:
212
+
213
+ - Each unique entity always receives the same placeholder
214
+ - New placeholders are generated only for previously unseen entities
215
+ - Cross-reference logic maintains consistent relationships between data
216
+ - TTL should be aligned with your agent's session lifecycle for optimal performance
217
+
218
+ ### Logging and Storage
219
+
220
+ - All logs within the platform are written **only with masked data**
221
+ - Raw, unmasked data is **never** logged
@@ -0,0 +1,43 @@
1
+ # Scenarios
2
+
3
+ Scenarios are configurable contexts that modify agent behavior during conversations. They allow you to define custom properties and settings that influence how your agent responds in different situations.
4
+
5
+ ## Overview
6
+
7
+ A scenario consists of:
8
+ - **Name**: A descriptive identifier for the scenario
9
+ - **Properties**: Key-value pairs that can be strings or booleans
10
+
11
+ ## Use Cases
12
+
13
+ Scenarios are useful for:
14
+ - **Testing**: Create different conversation contexts for agent testing
15
+ - **A/B Testing**: Compare agent behavior under different configurations
16
+
17
+ ## Usage
18
+
19
+ ### Platform
20
+
21
+ Create a new playground session and select "Scenarios" from the dropdown menu. You can create a new scenario, rename, duplicate, or delete a scenario. Add one or more properties to the scenario and click "Save".
22
+
23
+ ### SDK
24
+
25
+ When you clicked "Save" in the platform, the scenario's properties have been saved to the session state. It is now accessible through hooks or tools' `state` object in `state.scenario`.
26
+
27
+ ## Example
28
+
29
+ A simple `userId` scenario property in the UI of type `string` and value `123` would be accessed in the agent's state as `state.scenario.userId` in the following way:
30
+
31
+ ```typescript
32
+ const printScenarioTool: Tool<typeof schema, Memory> = {
33
+ name: 'print_scenario_user_id',
34
+ description: 'Prints the user id from the scenario',
35
+ input: z.object({}),
36
+ execute: async ({ input, state, agent }) => {
37
+ console.log('*Action: print_scenario_user_id*', state.scenario.userId);
38
+ return {
39
+ state: {},
40
+ };
41
+ },
42
+ };
43
+ ```