@minded-ai/mindedjs 1.0.19
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.
- package/.github/workflows/CI.yml +34 -0
- package/.prettierrc +8 -0
- package/README.md +6 -0
- package/dist/agent.d.ts +36 -0
- package/dist/agent.js +199 -0
- package/dist/agent.js.map +1 -0
- package/dist/analytics.d.ts +6 -0
- package/dist/analytics.js +19 -0
- package/dist/analytics.js.map +1 -0
- package/dist/edges/createDirectEdge.d.ts +4 -0
- package/dist/edges/createDirectEdge.js +14 -0
- package/dist/edges/createDirectEdge.js.map +1 -0
- package/dist/edges/createLogicalRouter.d.ts +5 -0
- package/dist/edges/createLogicalRouter.js +18 -0
- package/dist/edges/createLogicalRouter.js.map +1 -0
- package/dist/edges/createPromptRouter.d.ts +7 -0
- package/dist/edges/createPromptRouter.js +54 -0
- package/dist/edges/createPromptRouter.js.map +1 -0
- package/dist/edges/edgeFactory.d.ts +9 -0
- package/dist/edges/edgeFactory.js +65 -0
- package/dist/edges/edgeFactory.js.map +1 -0
- package/dist/events/AgentEvents.d.ts +22 -0
- package/dist/events/AgentEvents.js +9 -0
- package/dist/events/AgentEvents.js.map +1 -0
- package/dist/events/index.d.ts +2 -0
- package/dist/events/index.js +5 -0
- package/dist/events/index.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/infrastructure.ts/mindedRequest.d.ts +8 -0
- package/dist/infrastructure.ts/mindedRequest.js +22 -0
- package/dist/infrastructure.ts/mindedRequest.js.map +1 -0
- package/dist/llm/createLlmInstance.d.ts +2 -0
- package/dist/llm/createLlmInstance.js +14 -0
- package/dist/llm/createLlmInstance.js.map +1 -0
- package/dist/nodes/addHumanInTheLoopNode.d.ts +8 -0
- package/dist/nodes/addHumanInTheLoopNode.js +17 -0
- package/dist/nodes/addHumanInTheLoopNode.js.map +1 -0
- package/dist/nodes/addPromptNode.d.ts +15 -0
- package/dist/nodes/addPromptNode.js +52 -0
- package/dist/nodes/addPromptNode.js.map +1 -0
- package/dist/nodes/addToolNode.d.ts +10 -0
- package/dist/nodes/addToolNode.js +82 -0
- package/dist/nodes/addToolNode.js.map +1 -0
- package/dist/nodes/addTriggerNode.d.ts +6 -0
- package/dist/nodes/addTriggerNode.js +12 -0
- package/dist/nodes/addTriggerNode.js.map +1 -0
- package/dist/nodes/nodeFactory.d.ts +13 -0
- package/dist/nodes/nodeFactory.js +41 -0
- package/dist/nodes/nodeFactory.js.map +1 -0
- package/dist/platform/analytics.d.ts +6 -0
- package/dist/platform/analytics.js +19 -0
- package/dist/platform/analytics.js.map +1 -0
- package/dist/platform/mindedCheckpointSaver.d.ts +10 -0
- package/dist/platform/mindedCheckpointSaver.js +49 -0
- package/dist/platform/mindedCheckpointSaver.js.map +1 -0
- package/dist/platform/mindedConnection.d.ts +13 -0
- package/dist/platform/mindedConnection.js +117 -0
- package/dist/platform/mindedConnection.js.map +1 -0
- package/dist/platform/mindedConnectionTypes.d.ts +10 -0
- package/dist/platform/mindedConnectionTypes.js +8 -0
- package/dist/platform/mindedConnectionTypes.js.map +1 -0
- package/dist/platform/mindedRequest.d.ts +8 -0
- package/dist/platform/mindedRequest.js +22 -0
- package/dist/platform/mindedRequest.js.map +1 -0
- package/dist/types/Agent.types.d.ts +8 -0
- package/dist/types/Agent.types.js +3 -0
- package/dist/types/Agent.types.js.map +1 -0
- package/dist/types/Flows.types.d.ts +83 -0
- package/dist/types/Flows.types.js +24 -0
- package/dist/types/Flows.types.js.map +1 -0
- package/dist/types/LLM.types.d.ts +10 -0
- package/dist/types/LLM.types.js +9 -0
- package/dist/types/LLM.types.js.map +1 -0
- package/dist/types/LangGraph.types.d.ts +29 -0
- package/dist/types/LangGraph.types.js +20 -0
- package/dist/types/LangGraph.types.js.map +1 -0
- package/dist/types/Tools.types.d.ts +14 -0
- package/dist/types/Tools.types.js +3 -0
- package/dist/types/Tools.types.js.map +1 -0
- package/dist/types/Triggers.types.d.ts +1 -0
- package/dist/types/Triggers.types.js +3 -0
- package/dist/types/Triggers.types.js.map +1 -0
- package/docs/.gitbook/assets/image.png +0 -0
- package/docs/README.md +51 -0
- package/docs/SUMMARY.md +21 -0
- package/docs/api-reference/.nojekyll +1 -0
- package/docs/api-reference/assets/hierarchy.js +1 -0
- package/docs/api-reference/assets/highlight.css +120 -0
- package/docs/api-reference/assets/icons.js +18 -0
- package/docs/api-reference/assets/icons.svg +1 -0
- package/docs/api-reference/assets/main.js +60 -0
- package/docs/api-reference/assets/navigation.js +1 -0
- package/docs/api-reference/assets/search.js +1 -0
- package/docs/api-reference/assets/style.css +1640 -0
- package/docs/api-reference/classes/index.Agent.html +4 -0
- package/docs/api-reference/enums/index.EdgeType.html +4 -0
- package/docs/api-reference/enums/index.NodeType.html +6 -0
- package/docs/api-reference/enums/index.TriggerType.html +4 -0
- package/docs/api-reference/enums/index.events.html +3 -0
- package/docs/api-reference/hierarchy.html +1 -0
- package/docs/api-reference/index.html +310 -0
- package/docs/api-reference/interfaces/index.AppToolNode.html +5 -0
- package/docs/api-reference/interfaces/index.AppTriggerNode.html +6 -0
- package/docs/api-reference/interfaces/index.Flow.html +4 -0
- package/docs/api-reference/interfaces/index.JunctionNode.html +4 -0
- package/docs/api-reference/interfaces/index.LogicalConditionEdge.html +5 -0
- package/docs/api-reference/interfaces/index.ManualTriggerNode.html +5 -0
- package/docs/api-reference/interfaces/index.PromptConditionEdge.html +5 -0
- package/docs/api-reference/interfaces/index.PromptNode.html +6 -0
- package/docs/api-reference/interfaces/index.StepForwardEdge.html +4 -0
- package/docs/api-reference/interfaces/index.Tool.html +6 -0
- package/docs/api-reference/interfaces/index.ToolNode.html +5 -0
- package/docs/api-reference/modules/index-1.html +1 -0
- package/docs/api-reference/modules/index.html +1 -0
- package/docs/api-reference/modules.html +1 -0
- package/docs/api-reference/types/index.Edge.html +1 -0
- package/docs/api-reference/types/index.Node.html +1 -0
- package/docs/api-reference/types/index.TriggerNode.html +1 -0
- package/docs/core-concepts/edges.md +242 -0
- package/docs/core-concepts/events.md +161 -0
- package/docs/core-concepts/flows.md +74 -0
- package/docs/core-concepts/memory-types.md +208 -0
- package/docs/core-concepts/nodes.md +239 -0
- package/docs/core-concepts/tools.md +205 -0
- package/docs/examples/order-refund-flow.md +560 -0
- package/docs/getting-started/installation.md +34 -0
- package/docs/getting-started/quick-start.md +264 -0
- package/docs-structure.md +144 -0
- package/eslint.config.js +68 -0
- package/examples/orderRefundAgent/flows/orderRefundFlow.yaml +32 -0
- package/examples/orderRefundAgent/minded.json +14 -0
- package/examples/orderRefundAgent/orderRefundAgent.ts +58 -0
- package/examples/orderRefundAgent/schema.ts +7 -0
- package/examples/orderRefundAgent/tools/escalateConversation.ts +28 -0
- package/examples/orderRefundAgent/tools/index.ts +4 -0
- package/examples/orderRefundAgent/tools/refundOrder.ts +27 -0
- package/package.json +46 -0
- package/src/agent.ts +216 -0
- package/src/edges/createDirectEdge.ts +11 -0
- package/src/edges/createLogicalRouter.ts +16 -0
- package/src/edges/createPromptRouter.ts +52 -0
- package/src/edges/edgeFactory.ts +85 -0
- package/src/events/AgentEvents.ts +22 -0
- package/src/events/index.ts +3 -0
- package/src/index.ts +22 -0
- package/src/llm/createLlmInstance.ts +10 -0
- package/src/nodes/addHumanInTheLoopNode.ts +20 -0
- package/src/nodes/addPromptNode.ts +66 -0
- package/src/nodes/addToolNode.ts +95 -0
- package/src/nodes/addTriggerNode.ts +12 -0
- package/src/nodes/nodeFactory.ts +65 -0
- package/src/platform/analytics.ts +16 -0
- package/src/platform/mindedCheckpointSaver.ts +74 -0
- package/src/platform/mindedConnection.ts +106 -0
- package/src/platform/mindedConnectionTypes.ts +15 -0
- package/src/platform/mindedRequest.ts +28 -0
- package/src/types/Agent.types.ts +10 -0
- package/src/types/Flows.types.ts +103 -0
- package/src/types/LLM.types.ts +13 -0
- package/src/types/LangGraph.types.ts +25 -0
- package/src/types/Tools.types.ts +9 -0
- package/test/can-stay-on-node/can-stay-on-node.test.ts +148 -0
- package/test/can-stay-on-node/flows/test-flow.yaml +25 -0
- package/test/cannot-stay-on-node/cannot-stay-on-node.test.ts +201 -0
- package/test/cannot-stay-on-node/flows/test-flow.yaml +34 -0
- package/test/human-in-the-loop-node/flows/test-flow.yaml +23 -0
- package/test/human-in-the-loop-node/human-in-the-loop-node.test.ts +92 -0
- package/test/logical-edges/flows/logical-edge-test-flow.yaml +24 -0
- package/test/logical-edges/logical-edges.test.ts +66 -0
- package/test/no-human-in-the-loop-node/flows/test-flow.yaml +23 -0
- package/test/no-human-in-the-loop-node/no-human-in-the-loop-node.test.ts +80 -0
- package/test/prompt-edges/flows/test-flow.yaml +24 -0
- package/test/prompt-edges/prompt-edges.test.ts +90 -0
- package/test/prompt-node/flows/test-flow.yaml +24 -0
- package/test/prompt-node/prompt-node.test.ts +86 -0
- package/test/setup.ts +5 -0
- package/test/tool-node/flows/test-flow.yaml +14 -0
- package/test/tool-node/tool-node.test.ts +67 -0
- package/test/trigger/flows/test-flow.yaml +7 -0
- package/test/trigger/trigger.test.ts +57 -0
- package/tsconfig.json +17 -0
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
<!DOCTYPE html><html class="default" lang="en" data-base="./"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>@agentsforce/sdk</title><meta name="description" content="Documentation for @agentsforce/sdk"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="assets/style.css"/><link rel="stylesheet" href="assets/highlight.css"/><script defer src="assets/main.js"></script><script async src="assets/icons.js" id="tsd-icons-script"></script><script async src="assets/search.js" id="tsd-search-script"></script><script async src="assets/navigation.js" id="tsd-nav-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="index.html" class="title">@agentsforce/sdk</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><h1>@agentsforce/sdk</h1></div><div class="tsd-panel tsd-typography"><h1 id="mindedjs--agent-sdk" class="tsd-anchor-link">MindedJS – Agent SDK<a href="#mindedjs--agent-sdk" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h1><p>Compose, run, and extend AI-first workflows with a few lines of TypeScript.</p>
|
|
2
|
+
<hr>
|
|
3
|
+
<h2 id="✨-why-mindedjs" class="tsd-anchor-link">✨ Why MindedJS?<a href="#✨-why-mindedjs" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><ul>
|
|
4
|
+
<li><strong>Developer-first SDK with no-code platform</strong> – Code complex workflows in TypeScript or use the visual no-code platform on top.</li>
|
|
5
|
+
<li><strong>Declarative flows</strong> – Define complex, multi-step conversational flows.</li>
|
|
6
|
+
<li><strong>Type-safe tooling</strong> – Tools & events are fully typed, giving you autocomplete and compile-time safety.</li>
|
|
7
|
+
<li><strong>Language-model agnostic</strong> – Bring your own LLM model (OpenAI, Anthropic, Groq, …).</li>
|
|
8
|
+
<li><strong>Local-first</strong> – Run fully in-memory for development and testing.</li>
|
|
9
|
+
</ul>
|
|
10
|
+
<hr>
|
|
11
|
+
<h2 id="📦-installation" class="tsd-anchor-link">📦 Installation<a href="#📦-installation" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><pre><code class="bash"><span class="hl-0">npm</span><span class="hl-1"> </span><span class="hl-2">i</span><span class="hl-1"> </span><span class="hl-2">@agentsforce/sdk</span><span class="hl-1"> </span><span class="hl-2">@langchain/langgraph</span><span class="hl-1"> </span><span class="hl-2">langchain</span>
|
|
12
|
+
</code><button type="button">Copy</button></pre>
|
|
13
|
+
|
|
14
|
+
<hr>
|
|
15
|
+
<h2 id="🚀-quick-start" class="tsd-anchor-link">🚀 Quick Start<a href="#🚀-quick-start" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p>First, create the necessary files in your project:</p>
|
|
16
|
+
<p><strong><code>minded.json</code> (in your project root):</strong></p>
|
|
17
|
+
<pre><code class="json"><span class="hl-1">{</span><br/><span class="hl-1"> </span><span class="hl-3">"flows"</span><span class="hl-1">: [</span><br/><span class="hl-1"> </span><span class="hl-2">"./flows"</span><br/><span class="hl-1"> ],</span><br/><span class="hl-1"> </span><span class="hl-3">"llm"</span><span class="hl-1">: {</span><br/><span class="hl-1"> </span><span class="hl-3">"name"</span><span class="hl-1">: </span><span class="hl-2">"ChatOpenAI"</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-3">"properties"</span><span class="hl-1">: {</span><br/><span class="hl-1"> </span><span class="hl-3">"model"</span><span class="hl-1">: </span><span class="hl-2">"gpt-4o"</span><br/><span class="hl-1"> }</span><br/><span class="hl-1"> }</span><br/><span class="hl-1">}</span>
|
|
18
|
+
</code><button type="button">Copy</button></pre>
|
|
19
|
+
|
|
20
|
+
<p><strong><code>flows/refundFlow.yaml</code>:</strong></p>
|
|
21
|
+
<pre><code class="yaml"><span class="hl-4">name</span><span class="hl-1">: </span><span class="hl-5">'Order Refund Flow'</span><br/><span class="hl-4">nodes</span><span class="hl-1">:</span><br/><span class="hl-1"> - </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">'trigger'</span><br/><span class="hl-1"> </span><span class="hl-4">triggerType</span><span class="hl-1">: </span><span class="hl-5">'manual'</span><br/><span class="hl-1"> </span><span class="hl-4">name</span><span class="hl-1">: </span><span class="hl-5">'CLI Trigger'</span><br/><span class="hl-1"> - </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">'promptNode'</span><br/><span class="hl-1"> </span><span class="hl-4">name</span><span class="hl-1">: </span><span class="hl-5">'Support Agent'</span><br/><span class="hl-1"> </span><span class="hl-4">prompt</span><span class="hl-1">: </span><span class="hl-2">"Hello! I'm your customer support agent. I can help you with refunds. Please provide your name, order ID, and describe your issue."</span><br/><span class="hl-1"> </span><span class="hl-4">llmConfig</span><span class="hl-1">:</span><br/><span class="hl-1"> </span><span class="hl-4">name</span><span class="hl-1">: </span><span class="hl-5">'ChatOpenAI'</span><br/><span class="hl-1"> </span><span class="hl-4">properties</span><span class="hl-1">:</span><br/><span class="hl-1"> </span><span class="hl-4">model</span><span class="hl-1">: </span><span class="hl-5">'gpt-4o'</span><br/><span class="hl-1"> - </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">'tool'</span><br/><span class="hl-1"> </span><span class="hl-4">name</span><span class="hl-1">: </span><span class="hl-5">'Process Refund'</span><br/><span class="hl-1"> </span><span class="hl-4">toolName</span><span class="hl-1">: </span><span class="hl-5">'processRefund'</span><br/><span class="hl-4">edges</span><span class="hl-1">:</span><br/><span class="hl-1"> - </span><span class="hl-4">source</span><span class="hl-1">: </span><span class="hl-5">'CLI Trigger'</span><br/><span class="hl-1"> </span><span class="hl-4">target</span><span class="hl-1">: </span><span class="hl-5">'Support Agent'</span><br/><span class="hl-1"> </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">'stepForward'</span><br/><span class="hl-1"> - </span><span class="hl-4">source</span><span class="hl-1">: </span><span class="hl-5">'Support Agent'</span><br/><span class="hl-1"> </span><span class="hl-4">target</span><span class="hl-1">: </span><span class="hl-5">'Process Refund'</span><br/><span class="hl-1"> </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">'promptCondition'</span><br/><span class="hl-1"> </span><span class="hl-4">prompt</span><span class="hl-1">: </span><span class="hl-5">'The user is asking for a refund and provided their order details'</span>
|
|
22
|
+
</code><button type="button">Copy</button></pre>
|
|
23
|
+
|
|
24
|
+
<p><strong><code>schema.ts</code>:</strong></p>
|
|
25
|
+
<pre><code class="ts"><span class="hl-6">import</span><span class="hl-1"> { </span><span class="hl-7">z</span><span class="hl-1"> } </span><span class="hl-6">from</span><span class="hl-1"> </span><span class="hl-2">'zod'</span><span class="hl-1">;</span><br/><br/><span class="hl-6">export</span><span class="hl-1"> </span><span class="hl-6">default</span><span class="hl-1"> </span><span class="hl-7">z</span><span class="hl-1">.</span><span class="hl-0">object</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-7">customerName:</span><span class="hl-1"> </span><span class="hl-7">z</span><span class="hl-1">.</span><span class="hl-0">string</span><span class="hl-1">().</span><span class="hl-0">optional</span><span class="hl-1">(),</span><br/><span class="hl-1"> </span><span class="hl-7">orderId:</span><span class="hl-1"> </span><span class="hl-7">z</span><span class="hl-1">.</span><span class="hl-0">string</span><span class="hl-1">().</span><span class="hl-0">optional</span><span class="hl-1">(),</span><br/><span class="hl-1"> </span><span class="hl-7">issue:</span><span class="hl-1"> </span><span class="hl-7">z</span><span class="hl-1">.</span><span class="hl-0">string</span><span class="hl-1">().</span><span class="hl-0">optional</span><span class="hl-1">(),</span><br/><span class="hl-1">});</span>
|
|
26
|
+
</code><button type="button">Copy</button></pre>
|
|
27
|
+
|
|
28
|
+
<p><strong><code>tools/processRefund.ts</code>:</strong></p>
|
|
29
|
+
<pre><code class="ts"><span class="hl-6">import</span><span class="hl-1"> { </span><span class="hl-7">z</span><span class="hl-1"> } </span><span class="hl-6">from</span><span class="hl-1"> </span><span class="hl-2">'zod'</span><span class="hl-1">;</span><br/><span class="hl-6">import</span><span class="hl-1"> { </span><span class="hl-7">Tool</span><span class="hl-1"> } </span><span class="hl-6">from</span><span class="hl-1"> </span><span class="hl-2">'mindedjs/src/types/Tools.types'</span><span class="hl-1">;</span><br/><span class="hl-6">import</span><span class="hl-1"> </span><span class="hl-7">memorySchema</span><span class="hl-1"> </span><span class="hl-6">from</span><span class="hl-1"> </span><span class="hl-2">'../schema'</span><span class="hl-1">;</span><br/><br/><span class="hl-8">type</span><span class="hl-1"> </span><span class="hl-9">Memory</span><span class="hl-1"> = </span><span class="hl-9">z</span><span class="hl-1">.</span><span class="hl-9">infer</span><span class="hl-1"><</span><span class="hl-8">typeof</span><span class="hl-1"> </span><span class="hl-7">memorySchema</span><span class="hl-1">>;</span><br/><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-10">schema</span><span class="hl-1"> = </span><span class="hl-7">z</span><span class="hl-1">.</span><span class="hl-0">object</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-7">orderId:</span><span class="hl-1"> </span><span class="hl-7">z</span><span class="hl-1">.</span><span class="hl-0">string</span><span class="hl-1">(),</span><br/><span class="hl-1"> </span><span class="hl-7">customerName:</span><span class="hl-1"> </span><span class="hl-7">z</span><span class="hl-1">.</span><span class="hl-0">string</span><span class="hl-1">(),</span><br/><span class="hl-1"> </span><span class="hl-7">reason:</span><span class="hl-1"> </span><span class="hl-7">z</span><span class="hl-1">.</span><span class="hl-0">string</span><span class="hl-1">(),</span><br/><span class="hl-1">});</span><br/><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-10">processRefundTool</span><span class="hl-1">: </span><span class="hl-9">Tool</span><span class="hl-1"><</span><span class="hl-8">typeof</span><span class="hl-1"> </span><span class="hl-7">schema</span><span class="hl-1">, </span><span class="hl-9">Memory</span><span class="hl-1">> = {</span><br/><span class="hl-1"> </span><span class="hl-7">name:</span><span class="hl-1"> </span><span class="hl-2">'processRefund'</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-7">description:</span><span class="hl-1"> </span><span class="hl-2">'Process a refund for the customer order'</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-7">input:</span><span class="hl-1"> </span><span class="hl-7">schema</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-0">execute</span><span class="hl-7">:</span><span class="hl-1"> </span><span class="hl-8">async</span><span class="hl-1"> ({ </span><span class="hl-7">input</span><span class="hl-1"> }) </span><span class="hl-8">=></span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-7">console</span><span class="hl-1">.</span><span class="hl-0">log</span><span class="hl-1">(</span><span class="hl-2">'*Action: Processing refund*'</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><span class="hl-7">console</span><span class="hl-1">.</span><span class="hl-0">log</span><span class="hl-1">(</span><span class="hl-2">`Refunding order </span><span class="hl-8">${</span><span class="hl-7">input</span><span class="hl-11">.</span><span class="hl-7">orderId</span><span class="hl-8">}</span><span class="hl-2"> for </span><span class="hl-8">${</span><span class="hl-7">input</span><span class="hl-11">.</span><span class="hl-7">customerName</span><span class="hl-8">}</span><span class="hl-2">`</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><span class="hl-7">console</span><span class="hl-1">.</span><span class="hl-0">log</span><span class="hl-1">(</span><span class="hl-2">`Reason: </span><span class="hl-8">${</span><span class="hl-7">input</span><span class="hl-11">.</span><span class="hl-7">reason</span><span class="hl-8">}</span><span class="hl-2">`</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><br/><span class="hl-1"> </span><span class="hl-12">// Simulate refund processing</span><br/><span class="hl-1"> </span><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-10">refundAmount</span><span class="hl-1"> = </span><span class="hl-7">Math</span><span class="hl-1">.</span><span class="hl-0">floor</span><span class="hl-1">(</span><span class="hl-7">Math</span><span class="hl-1">.</span><span class="hl-0">random</span><span class="hl-1">() * </span><span class="hl-13">100</span><span class="hl-1">) + </span><span class="hl-13">20</span><span class="hl-1">; </span><span class="hl-12">// Random amount between $20-$120</span><br/><span class="hl-1"> </span><span class="hl-7">console</span><span class="hl-1">.</span><span class="hl-0">log</span><span class="hl-1">(</span><span class="hl-2">`Refund of $</span><span class="hl-8">${</span><span class="hl-7">refundAmount</span><span class="hl-8">}</span><span class="hl-2"> has been processed successfully!`</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><br/><span class="hl-1"> </span><span class="hl-6">return</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-7">memory:</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-7">customerName:</span><span class="hl-1"> </span><span class="hl-7">input</span><span class="hl-1">.</span><span class="hl-7">customerName</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-7">orderId:</span><span class="hl-1"> </span><span class="hl-7">input</span><span class="hl-1">.</span><span class="hl-7">orderId</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-7">issue:</span><span class="hl-1"> </span><span class="hl-2">`Refund processed - $</span><span class="hl-8">${</span><span class="hl-7">refundAmount</span><span class="hl-8">}</span><span class="hl-2">`</span><span class="hl-1">,</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> };</span><br/><span class="hl-1"> },</span><br/><span class="hl-1">};</span><br/><br/><span class="hl-6">export</span><span class="hl-1"> </span><span class="hl-6">default</span><span class="hl-1"> </span><span class="hl-7">processRefundTool</span><span class="hl-1">;</span>
|
|
30
|
+
</code><button type="button">Copy</button></pre>
|
|
31
|
+
|
|
32
|
+
<p><strong><code>tools/index.ts</code>:</strong></p>
|
|
33
|
+
<pre><code class="ts"><span class="hl-6">import</span><span class="hl-1"> </span><span class="hl-7">processRefundTool</span><span class="hl-1"> </span><span class="hl-6">from</span><span class="hl-1"> </span><span class="hl-2">'./processRefund'</span><span class="hl-1">;</span><br/><br/><span class="hl-6">export</span><span class="hl-1"> </span><span class="hl-6">default</span><span class="hl-1"> [</span><span class="hl-7">processRefundTool</span><span class="hl-1">];</span>
|
|
34
|
+
</code><button type="button">Copy</button></pre>
|
|
35
|
+
|
|
36
|
+
<p><strong><code>agent.ts</code>:</strong></p>
|
|
37
|
+
<pre><code class="ts"><span class="hl-6">import</span><span class="hl-1"> { </span><span class="hl-7">Agent</span><span class="hl-1"> } </span><span class="hl-6">from</span><span class="hl-1"> </span><span class="hl-2">'mindedjs/src/agent'</span><span class="hl-1">;</span><br/><span class="hl-6">import</span><span class="hl-1"> { </span><span class="hl-7">HumanMessage</span><span class="hl-1"> } </span><span class="hl-6">from</span><span class="hl-1"> </span><span class="hl-2">'@langchain/core/messages'</span><span class="hl-1">;</span><br/><span class="hl-6">import</span><span class="hl-1"> { </span><span class="hl-7">events</span><span class="hl-1"> } </span><span class="hl-6">from</span><span class="hl-1"> </span><span class="hl-2">'mindedjs/src/index'</span><span class="hl-1">;</span><br/><span class="hl-6">import</span><span class="hl-1"> </span><span class="hl-7">memorySchema</span><span class="hl-1"> </span><span class="hl-6">from</span><span class="hl-1"> </span><span class="hl-2">'./schema'</span><span class="hl-1">;</span><br/><span class="hl-6">import</span><span class="hl-1"> </span><span class="hl-7">tools</span><span class="hl-1"> </span><span class="hl-6">from</span><span class="hl-1"> </span><span class="hl-2">'./tools'</span><span class="hl-1">;</span><br/><span class="hl-6">import</span><span class="hl-1"> </span><span class="hl-7">config</span><span class="hl-1"> </span><span class="hl-6">from</span><span class="hl-1"> </span><span class="hl-2">'./minded.json'</span><span class="hl-1">;</span><br/><br/><span class="hl-12">// 1. Create the agent with config from minded.json</span><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-10">agent</span><span class="hl-1"> = </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-0">Agent</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-7">memorySchema</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-7">config</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-7">tools</span><span class="hl-1">,</span><br/><span class="hl-1">});</span><br/><br/><span class="hl-12">// 2. Listen for AI messages</span><br/><span class="hl-7">agent</span><span class="hl-1">.</span><span class="hl-0">on</span><span class="hl-1">(</span><span class="hl-7">events</span><span class="hl-1">.</span><span class="hl-10">AI_MESSAGE</span><span class="hl-1">, </span><span class="hl-8">async</span><span class="hl-1"> ({ </span><span class="hl-7">message</span><span class="hl-1"> }) </span><span class="hl-8">=></span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-7">console</span><span class="hl-1">.</span><span class="hl-0">log</span><span class="hl-1">(</span><span class="hl-2">'AI:'</span><span class="hl-1">, </span><span class="hl-7">message</span><span class="hl-1">);</span><br/><span class="hl-1">});</span><br/><br/><span class="hl-12">// 3. Handle trigger events</span><br/><span class="hl-7">agent</span><span class="hl-1">.</span><span class="hl-0">on</span><span class="hl-1">(</span><span class="hl-7">events</span><span class="hl-1">.</span><span class="hl-10">TRIGGER_EVENT</span><span class="hl-1">, </span><span class="hl-8">async</span><span class="hl-1"> ({ </span><span class="hl-7">triggerName</span><span class="hl-1">, </span><span class="hl-7">triggerBody</span><span class="hl-1"> }) </span><span class="hl-8">=></span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-6">if</span><span class="hl-1"> (</span><span class="hl-7">triggerName</span><span class="hl-1"> === </span><span class="hl-2">'CLI Trigger'</span><span class="hl-1">) {</span><br/><span class="hl-1"> </span><span class="hl-6">return</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-7">memory:</span><span class="hl-1"> {},</span><br/><span class="hl-1"> </span><span class="hl-7">messages:</span><span class="hl-1"> [</span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-0">HumanMessage</span><span class="hl-1">(</span><span class="hl-7">triggerBody</span><span class="hl-1">)],</span><br/><span class="hl-1"> };</span><br/><span class="hl-1"> }</span><br/><span class="hl-1">});</span><br/><br/><span class="hl-12">// 4. Trigger the flow</span><br/><span class="hl-6">await</span><span class="hl-1"> </span><span class="hl-7">agent</span><span class="hl-1">.</span><span class="hl-0">invoke</span><span class="hl-1">({ </span><br/><span class="hl-1"> </span><span class="hl-7">triggerBody:</span><span class="hl-1"> </span><span class="hl-2">'Hi, I want to refund my order #1234. I received the wrong item.'</span><span class="hl-1">, </span><br/><span class="hl-1"> </span><span class="hl-7">triggerName:</span><span class="hl-1"> </span><span class="hl-2">'CLI Trigger'</span><span class="hl-1"> </span><br/><span class="hl-1">});</span>
|
|
38
|
+
</code><button type="button">Copy</button></pre>
|
|
39
|
+
|
|
40
|
+
<p><strong>Project Structure:</strong></p>
|
|
41
|
+
<pre><code><span class="hl-7">your</span><span class="hl-1">-</span><span class="hl-7">project</span><span class="hl-1">/</span><br/><span class="hl-1">├── </span><span class="hl-7">minded</span><span class="hl-1">.</span><span class="hl-7">json</span><span class="hl-1"> # </span><span class="hl-7">Agent</span><span class="hl-1"> </span><span class="hl-7">configuration</span><br/><span class="hl-1">├── </span><span class="hl-7">schema</span><span class="hl-1">.</span><span class="hl-7">ts</span><span class="hl-1"> # </span><span class="hl-7">Memory</span><span class="hl-1"> </span><span class="hl-7">schema</span><span class="hl-1"> </span><span class="hl-7">definition</span><br/><span class="hl-1">├── </span><span class="hl-7">agent</span><span class="hl-1">.</span><span class="hl-7">ts</span><span class="hl-1"> # </span><span class="hl-7">Main</span><span class="hl-1"> </span><span class="hl-7">agent</span><span class="hl-1"> </span><span class="hl-7">file</span><br/><span class="hl-1">├── </span><span class="hl-7">flows</span><span class="hl-1">/ # </span><span class="hl-7">Flow</span><span class="hl-1"> </span><span class="hl-7">definitions</span><br/><span class="hl-1">│ └── </span><span class="hl-7">refundFlow</span><span class="hl-1">.</span><span class="hl-7">yaml</span><span class="hl-1"> # </span><span class="hl-7">Individual</span><span class="hl-1"> </span><span class="hl-7">flow</span><span class="hl-1"> </span><span class="hl-7">files</span><br/><span class="hl-1">└── </span><span class="hl-7">tools</span><span class="hl-1">/ # </span><span class="hl-7">Tools</span><span class="hl-1"> </span><span class="hl-7">directory</span><br/><span class="hl-1"> └── </span><span class="hl-7">index</span><span class="hl-1">.</span><span class="hl-7">ts</span><span class="hl-1"> # </span><span class="hl-7">Export</span><span class="hl-1"> </span><span class="hl-7">your</span><span class="hl-1"> </span><span class="hl-7">tools</span>
|
|
42
|
+
</code><button>Copy</button></pre>
|
|
43
|
+
|
|
44
|
+
<hr>
|
|
45
|
+
<h2 id="🔑-core-concepts" class="tsd-anchor-link">🔑 Core Concepts<a href="#🔑-core-concepts" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><h3 id="memory-type" class="tsd-anchor-link">Memory Type<a href="#memory-type" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>The <code>Memory</code> type is a user-defined TypeScript type that represents the agent's working memory throughout a flow. It is used to persist and pass information between nodes, tools, and events.</p>
|
|
46
|
+
<ul>
|
|
47
|
+
<li><strong>Define your own shape:</strong><pre><code class="ts"><span class="hl-8">type</span><span class="hl-1"> </span><span class="hl-9">Memory</span><span class="hl-1"> = {</span><br/><span class="hl-1"> </span><span class="hl-7">orderId</span><span class="hl-1">: </span><span class="hl-9">string</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-7">customerName</span><span class="hl-1">: </span><span class="hl-9">string</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-7">issue</span><span class="hl-1">: </span><span class="hl-9">string</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-12">// ...any other fields you want to track</span><br/><span class="hl-1">};</span>
|
|
48
|
+
</code><button type="button">Copy</button></pre>
|
|
49
|
+
|
|
50
|
+
</li>
|
|
51
|
+
<li><strong>Typed everywhere:</strong> The <code>Agent</code>, all nodes, tools, and event payloads are typed with your <code>Memory</code> type for full type safety and autocomplete.</li>
|
|
52
|
+
<li><strong>How it's used:</strong>
|
|
53
|
+
<ul>
|
|
54
|
+
<li>When you create an <code>Agent<Memory></code>, all flows, tools, and event handlers will expect and provide this memory shape.</li>
|
|
55
|
+
<li>The memory object is updated as the flow progresses, and is available in tool executions, event payloads, and node logic.</li>
|
|
56
|
+
</ul>
|
|
57
|
+
</li>
|
|
58
|
+
</ul>
|
|
59
|
+
<h3 id="1-flow" class="tsd-anchor-link">1. Flow<a href="#1-flow" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>A <code>Flow</code> is a directed graph of <strong>nodes</strong> connected by <strong>edges</strong>. At runtime, the agent walks the graph according to edge logic.</p>
|
|
60
|
+
<pre><code class="ts"><span class="hl-8">interface</span><span class="hl-1"> </span><span class="hl-9">Flow</span><span class="hl-1"><</span><span class="hl-9">Memory</span><span class="hl-1">> {</span><br/><span class="hl-1"> </span><span class="hl-7">name</span><span class="hl-1">: </span><span class="hl-9">string</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-7">nodes</span><span class="hl-1">: </span><span class="hl-9">Node</span><span class="hl-1">[];</span><br/><span class="hl-1"> </span><span class="hl-7">edges</span><span class="hl-1">: </span><span class="hl-9">Edge</span><span class="hl-1">[];</span><br/><span class="hl-1">}</span>
|
|
61
|
+
</code><button type="button">Copy</button></pre>
|
|
62
|
+
|
|
63
|
+
<h3 id="2-nodes" class="tsd-anchor-link">2. Nodes<a href="#2-nodes" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><table>
|
|
64
|
+
<thead>
|
|
65
|
+
<tr>
|
|
66
|
+
<th>Type</th>
|
|
67
|
+
<th>Description</th>
|
|
68
|
+
</tr>
|
|
69
|
+
</thead>
|
|
70
|
+
<tbody>
|
|
71
|
+
<tr>
|
|
72
|
+
<td><code>TRIGGER</code></td>
|
|
73
|
+
<td>Entry-point. Handled via trigger event listeners that qualify and transform requests.</td>
|
|
74
|
+
</tr>
|
|
75
|
+
<tr>
|
|
76
|
+
<td><code>PROMPT_NODE</code></td>
|
|
77
|
+
<td>Sends a prompt to the LLM and appends the response.</td>
|
|
78
|
+
</tr>
|
|
79
|
+
<tr>
|
|
80
|
+
<td><code>TOOL</code></td>
|
|
81
|
+
<td>Executes arbitrary user code (functions, APIs…).</td>
|
|
82
|
+
</tr>
|
|
83
|
+
</tbody>
|
|
84
|
+
</table>
|
|
85
|
+
<h3 id="3-edges" class="tsd-anchor-link">3. Edges<a href="#3-edges" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><table>
|
|
86
|
+
<thead>
|
|
87
|
+
<tr>
|
|
88
|
+
<th>Type</th>
|
|
89
|
+
<th>Behaviour</th>
|
|
90
|
+
</tr>
|
|
91
|
+
</thead>
|
|
92
|
+
<tbody>
|
|
93
|
+
<tr>
|
|
94
|
+
<td><code>STEP_FORWARD</code></td>
|
|
95
|
+
<td>Unconditional jump to the target node.</td>
|
|
96
|
+
</tr>
|
|
97
|
+
<tr>
|
|
98
|
+
<td><code>PROMPT_CONDITION</code></td>
|
|
99
|
+
<td>Jump if the previous LLM response matches a condition.</td>
|
|
100
|
+
</tr>
|
|
101
|
+
</tbody>
|
|
102
|
+
</table>
|
|
103
|
+
<h3 id="4-tools" class="tsd-anchor-link">4. Tools<a href="#4-tools" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>Tools are strongly-typed helper functions the LLM can call.</p>
|
|
104
|
+
<pre><code class="ts"><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-10">refundOrder</span><span class="hl-1"> = {</span><br/><span class="hl-1"> </span><span class="hl-7">name:</span><span class="hl-1"> </span><span class="hl-2">'refundOrder'</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-7">description:</span><span class="hl-1"> </span><span class="hl-2">'Refund an order'</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-7">input:</span><span class="hl-1"> </span><span class="hl-7">z</span><span class="hl-1">.</span><span class="hl-0">object</span><span class="hl-1">({ </span><span class="hl-7">orderId:</span><span class="hl-1"> </span><span class="hl-7">z</span><span class="hl-1">.</span><span class="hl-0">string</span><span class="hl-1">() }),</span><br/><span class="hl-1"> </span><span class="hl-0">execute</span><span class="hl-7">:</span><span class="hl-1"> </span><span class="hl-8">async</span><span class="hl-1"> ({ </span><span class="hl-7">input</span><span class="hl-1">, </span><span class="hl-7">memory</span><span class="hl-1"> }) </span><span class="hl-8">=></span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-12">/* … */</span><br/><span class="hl-1"> },</span><br/><span class="hl-1">};</span>
|
|
105
|
+
</code><button type="button">Copy</button></pre>
|
|
106
|
+
|
|
107
|
+
<h3 id="5-events" class="tsd-anchor-link">5. Events<a href="#5-events" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>Register callbacks with full type safety:</p>
|
|
108
|
+
<pre><code class="ts"><span class="hl-7">agent</span><span class="hl-1">.</span><span class="hl-0">on</span><span class="hl-1">(</span><span class="hl-10">AI_MESSAGE</span><span class="hl-1">, ({ </span><span class="hl-7">message</span><span class="hl-1">, </span><span class="hl-7">memory</span><span class="hl-1"> }) </span><span class="hl-8">=></span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-12">/* … */</span><br/><span class="hl-1">});</span>
|
|
109
|
+
</code><button type="button">Copy</button></pre>
|
|
110
|
+
|
|
111
|
+
<table>
|
|
112
|
+
<thead>
|
|
113
|
+
<tr>
|
|
114
|
+
<th>Constant</th>
|
|
115
|
+
<th>Payload shape</th>
|
|
116
|
+
</tr>
|
|
117
|
+
</thead>
|
|
118
|
+
<tbody>
|
|
119
|
+
<tr>
|
|
120
|
+
<td><code>AI_MESSAGE</code></td>
|
|
121
|
+
<td><code>{ message: string; memory: Memory }</code></td>
|
|
122
|
+
</tr>
|
|
123
|
+
</tbody>
|
|
124
|
+
</table>
|
|
125
|
+
<p>Add your own events by extending <code>AgentEventPayloads</code> in <code>src/events/AgentEvents.ts</code>.</p>
|
|
126
|
+
<h3 id="6-memory--checkpoints" class="tsd-anchor-link">6. Memory & Checkpoints<a href="#6-memory--checkpoints" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><ul>
|
|
127
|
+
<li><strong>Local dev:</strong> defaults to the in-memory <code>MemorySaver</code>.</li>
|
|
128
|
+
<li><strong>Cloud:</strong> pass a <code>platformToken</code> to use the constructor</li>
|
|
129
|
+
</ul>
|
|
130
|
+
<pre><code class="ts"><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-10">agent</span><span class="hl-1"> = </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-0">Agent</span><span class="hl-1">({ …, </span><span class="hl-7">platformToken:</span><span class="hl-1"> </span><span class="hl-2">"your-platform-token"</span><span class="hl-1"> });</span>
|
|
131
|
+
</code><button type="button">Copy</button></pre>
|
|
132
|
+
|
|
133
|
+
<hr>
|
|
134
|
+
<h2 id="🧩-node-types" class="tsd-anchor-link">🧩 Node Types<a href="#🧩-node-types" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><h3 id="trigger-trigger" class="tsd-anchor-link">Trigger (<code>TRIGGER</code>)<a href="#trigger-trigger" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>Entry-point into a flow. Triggers decide <strong>when</strong> and <strong>how</strong> a flow starts. They emit events that external listeners can handle to qualify and transform the incoming request.</p>
|
|
135
|
+
<p><strong>Trigger Types:</strong></p>
|
|
136
|
+
<ul>
|
|
137
|
+
<li><code>MANUAL</code>: Manually triggered flows (e.g., CLI, direct invoke)</li>
|
|
138
|
+
<li><code>APP</code>: Application-triggered flows with specific app trigger IDs</li>
|
|
139
|
+
<li><code>WEBHOOK</code>: HTTP webhook-triggered flows</li>
|
|
140
|
+
</ul>
|
|
141
|
+
<p>Example:</p>
|
|
142
|
+
<pre><code class="yaml"><span class="hl-1">- </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">trigger</span><br/><span class="hl-1"> </span><span class="hl-4">triggerType</span><span class="hl-1">: </span><span class="hl-5">manual</span><br/><span class="hl-1"> </span><span class="hl-4">name</span><span class="hl-1">: </span><span class="hl-5">CLI Trigger</span>
|
|
143
|
+
</code><button type="button">Copy</button></pre>
|
|
144
|
+
|
|
145
|
+
<pre><code class="yaml"><span class="hl-1">- </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">trigger</span><br/><span class="hl-1"> </span><span class="hl-4">triggerType</span><span class="hl-1">: </span><span class="hl-5">app</span><br/><span class="hl-1"> </span><span class="hl-4">name</span><span class="hl-1">: </span><span class="hl-5">Support Ticket Trigger</span><br/><span class="hl-1"> </span><span class="hl-4">appTriggerId</span><span class="hl-1">: </span><span class="hl-5">support-ticket-created</span>
|
|
146
|
+
</code><button type="button">Copy</button></pre>
|
|
147
|
+
|
|
148
|
+
<pre><code class="yaml"><span class="hl-1">- </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">trigger</span><br/><span class="hl-1"> </span><span class="hl-4">triggerType</span><span class="hl-1">: </span><span class="hl-5">webhook</span><br/><span class="hl-1"> </span><span class="hl-4">name</span><span class="hl-1">: </span><span class="hl-5">Webhook Trigger</span>
|
|
149
|
+
</code><button type="button">Copy</button></pre>
|
|
150
|
+
|
|
151
|
+
<h3 id="prompt-node-prompt_node" class="tsd-anchor-link">Prompt Node (<code>PROMPT_NODE</code>)<a href="#prompt-node-prompt_node" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>Sends a prompt to the LLM and appends the response to the conversation. Can optionally override the default LLM configuration and has access to global tools.</p>
|
|
152
|
+
<pre><code class="yaml"><span class="hl-1">- </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">promptNode</span><br/><span class="hl-1"> </span><span class="hl-4">name</span><span class="hl-1">: </span><span class="hl-5">Customer Support Agent</span><br/><span class="hl-1"> </span><span class="hl-4">prompt</span><span class="hl-1">: </span><span class="hl-2">"You are a helpful customer support agent. Help the user with their inquiry based on the conversation history and workflow memory."</span><br/><span class="hl-1"> </span><span class="hl-4">llmConfig</span><span class="hl-1">:</span><br/><span class="hl-1"> </span><span class="hl-4">name</span><span class="hl-1">: </span><span class="hl-5">ChatOpenAI</span><br/><span class="hl-1"> </span><span class="hl-4">properties</span><span class="hl-1">:</span><br/><span class="hl-1"> </span><span class="hl-4">model</span><span class="hl-1">: </span><span class="hl-5">gpt-4o</span><br/><span class="hl-1"> </span><span class="hl-4">temperature</span><span class="hl-1">: </span><span class="hl-13">0.7</span>
|
|
153
|
+
</code><button type="button">Copy</button></pre>
|
|
154
|
+
|
|
155
|
+
<h3 id="tool-node-tool" class="tsd-anchor-link">Tool Node (<code>TOOL</code>)<a href="#tool-node-tool" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>Executes a user-defined tool by automatically calling it via an LLM agent. The LLM receives instructions to immediately call the specified tool with appropriate parameters based on the current state.</p>
|
|
156
|
+
<pre><code class="yaml"><span class="hl-1">- </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">tool</span><br/><span class="hl-1"> </span><span class="hl-4">name</span><span class="hl-1">: </span><span class="hl-5">Process Refund</span><br/><span class="hl-1"> </span><span class="hl-4">toolName</span><span class="hl-1">: </span><span class="hl-5">processRefund</span>
|
|
157
|
+
</code><button type="button">Copy</button></pre>
|
|
158
|
+
|
|
159
|
+
<h3 id="app-tool-app_tool" class="tsd-anchor-link">App Tool (<code>APP_TOOL</code>)<a href="#app-tool-app_tool" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>A reusable tool backed by an integration that can be shared across multiple flows. Uses a prompt to determine behavior. Defined from the platform.</p>
|
|
160
|
+
<pre><code class="yaml"><span class="hl-1">- </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">appTool</span><br/><span class="hl-1"> </span><span class="hl-4">name</span><span class="hl-1">: </span><span class="hl-5">Email Classifier</span><br/><span class="hl-1"> </span><span class="hl-4">prompt</span><span class="hl-1">: </span><span class="hl-2">"Classify this email based on its content and urgency"</span>
|
|
161
|
+
</code><button type="button">Copy</button></pre>
|
|
162
|
+
|
|
163
|
+
<h3 id="junction-junction" class="tsd-anchor-link">Junction (<code>JUNCTION</code>)<a href="#junction-junction" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>A logical node for merging or splitting branches in complex flows. Acts as a pass-through node that can be used for flow control.</p>
|
|
164
|
+
<pre><code class="yaml"><span class="hl-1">- </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">junction</span><br/><span class="hl-1"> </span><span class="hl-4">name</span><span class="hl-1">: </span><span class="hl-5">Decision Point</span>
|
|
165
|
+
</code><button type="button">Copy</button></pre>
|
|
166
|
+
|
|
167
|
+
<hr>
|
|
168
|
+
<h2 id="🔀-edge-types" class="tsd-anchor-link">🔀 Edge Types<a href="#🔀-edge-types" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><h3 id="step-forward-step_forward" class="tsd-anchor-link">Step Forward (<code>STEP_FORWARD</code>)<a href="#step-forward-step_forward" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>Unconditional jump from the <code>source</code> node to the <code>target</code> node. Always proceeds to the target regardless of state.</p>
|
|
169
|
+
<pre><code class="yaml"><span class="hl-1">- </span><span class="hl-4">source</span><span class="hl-1">: </span><span class="hl-5">CLI Trigger</span><br/><span class="hl-1"> </span><span class="hl-4">target</span><span class="hl-1">: </span><span class="hl-5">Customer Support Agent</span><br/><span class="hl-1"> </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">stepForward</span>
|
|
170
|
+
</code><button type="button">Copy</button></pre>
|
|
171
|
+
|
|
172
|
+
<h3 id="prompt-condition-prompt_condition" class="tsd-anchor-link">Prompt Condition (<code>PROMPT_CONDITION</code>)<a href="#prompt-condition-prompt_condition" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>Uses an LLM router to evaluate whether to follow the edge based on a natural-language condition. The router analyzes the current memory state, conversation history, and available target nodes to make an intelligent routing decision.</p>
|
|
173
|
+
<pre><code class="yaml"><span class="hl-1">- </span><span class="hl-4">source</span><span class="hl-1">: </span><span class="hl-5">Customer Support Agent</span><br/><span class="hl-1"> </span><span class="hl-4">target</span><span class="hl-1">: </span><span class="hl-5">Process Refund</span><br/><span class="hl-1"> </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">promptCondition</span><br/><span class="hl-1"> </span><span class="hl-4">prompt</span><span class="hl-1">: </span><span class="hl-2">"The user is requesting a refund and has provided order details"</span>
|
|
174
|
+
</code><button type="button">Copy</button></pre>
|
|
175
|
+
|
|
176
|
+
<pre><code class="yaml"><span class="hl-1">- </span><span class="hl-4">source</span><span class="hl-1">: </span><span class="hl-5">Support Agent</span><br/><span class="hl-1"> </span><span class="hl-4">target</span><span class="hl-1">: </span><span class="hl-5">Escalate to Human</span><br/><span class="hl-1"> </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">promptCondition</span><br/><span class="hl-1"> </span><span class="hl-4">prompt</span><span class="hl-1">: </span><span class="hl-2">"The user is frustrated or the issue is too complex for automated handling"</span>
|
|
177
|
+
</code><button type="button">Copy</button></pre>
|
|
178
|
+
|
|
179
|
+
<h3 id="logical-condition-logical_condition" class="tsd-anchor-link">Logical Condition (<code>LOGICAL_CONDITION</code>)<a href="#logical-condition-logical_condition" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>Follows the edge if a boolean JavaScript expression evaluates to <code>true</code> at runtime. The condition function receives the current memory state as a parameter.</p>
|
|
180
|
+
<pre><code class="yaml"><span class="hl-1">- </span><span class="hl-4">source</span><span class="hl-1">: </span><span class="hl-5">Order Validation</span><br/><span class="hl-1"> </span><span class="hl-4">target</span><span class="hl-1">: </span><span class="hl-5">Process Payment</span><br/><span class="hl-1"> </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">logicalCondition</span><br/><span class="hl-1"> </span><span class="hl-4">condition</span><span class="hl-1">: </span><span class="hl-2">"({ memory }) => memory.orderTotal > 0 && memory.paymentMethod"</span>
|
|
181
|
+
</code><button type="button">Copy</button></pre>
|
|
182
|
+
|
|
183
|
+
<pre><code class="yaml"><span class="hl-1">- </span><span class="hl-4">source</span><span class="hl-1">: </span><span class="hl-5">User Check</span><br/><span class="hl-1"> </span><span class="hl-4">target</span><span class="hl-1">: </span><span class="hl-5">Premium Features</span><br/><span class="hl-1"> </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">logicalCondition</span><br/><span class="hl-1"> </span><span class="hl-4">condition</span><span class="hl-1">: </span><span class="hl-2">"({ memory }) => memory.user?.isPremium === true"</span>
|
|
184
|
+
</code><button type="button">Copy</button></pre>
|
|
185
|
+
|
|
186
|
+
<hr>
|
|
187
|
+
<h2 id="📚-implementation-examples" class="tsd-anchor-link">📚 Implementation Examples<a href="#📚-implementation-examples" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><h3 id="node-implementation-examples" class="tsd-anchor-link">Node Implementation Examples<a href="#node-implementation-examples" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><h4 id="1-trigger-node-implementation" class="tsd-anchor-link">1. Trigger Node Implementation<a href="#1-trigger-node-implementation" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><p><strong>Flow Definition (YAML):</strong></p>
|
|
188
|
+
<pre><code class="yaml"><span class="hl-1">- </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">trigger</span><br/><span class="hl-1"> </span><span class="hl-4">triggerType</span><span class="hl-1">: </span><span class="hl-5">manual</span><br/><span class="hl-1"> </span><span class="hl-4">name</span><span class="hl-1">: </span><span class="hl-5">Order Support Trigger</span>
|
|
189
|
+
</code><button type="button">Copy</button></pre>
|
|
190
|
+
|
|
191
|
+
<p><strong>TypeScript Implementation:</strong></p>
|
|
192
|
+
<pre><code class="ts"><span class="hl-6">import</span><span class="hl-1"> { </span><span class="hl-7">Agent</span><span class="hl-1"> } </span><span class="hl-6">from</span><span class="hl-1"> </span><span class="hl-2">'mindedjs/src/agent'</span><span class="hl-1">;</span><br/><span class="hl-6">import</span><span class="hl-1"> { </span><span class="hl-7">events</span><span class="hl-1"> } </span><span class="hl-6">from</span><span class="hl-1"> </span><span class="hl-2">'mindedjs/src/index'</span><span class="hl-1">;</span><br/><span class="hl-6">import</span><span class="hl-1"> { </span><span class="hl-7">HumanMessage</span><span class="hl-1"> } </span><span class="hl-6">from</span><span class="hl-1"> </span><span class="hl-2">'@langchain/core/messages'</span><span class="hl-1">;</span><br/><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-10">agent</span><span class="hl-1"> = </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-0">Agent</span><span class="hl-1">({ </span><span class="hl-12">/* config */</span><span class="hl-1"> });</span><br/><br/><span class="hl-12">// Handle trigger events</span><br/><span class="hl-7">agent</span><span class="hl-1">.</span><span class="hl-0">on</span><span class="hl-1">(</span><span class="hl-7">events</span><span class="hl-1">.</span><span class="hl-10">TRIGGER_EVENT</span><span class="hl-1">, </span><span class="hl-8">async</span><span class="hl-1"> ({ </span><span class="hl-7">triggerName</span><span class="hl-1">, </span><span class="hl-7">triggerBody</span><span class="hl-1"> }) </span><span class="hl-8">=></span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-6">if</span><span class="hl-1"> (</span><span class="hl-7">triggerName</span><span class="hl-1"> === </span><span class="hl-2">'Order Support Trigger'</span><span class="hl-1">) {</span><br/><span class="hl-1"> </span><span class="hl-12">// Qualify the trigger (return false to disqualify)</span><br/><span class="hl-1"> </span><span class="hl-6">if</span><span class="hl-1"> (!</span><span class="hl-7">triggerBody</span><span class="hl-1">.</span><span class="hl-0">includes</span><span class="hl-1">(</span><span class="hl-2">'order'</span><span class="hl-1">)) {</span><br/><span class="hl-1"> </span><span class="hl-6">return</span><span class="hl-1"> </span><span class="hl-8">false</span><span class="hl-1">;</span><br/><span class="hl-1"> }</span><br/><span class="hl-1"> </span><br/><span class="hl-1"> </span><span class="hl-12">// Transform the request</span><br/><span class="hl-1"> </span><span class="hl-6">return</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-7">memory:</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-7">customerQuery:</span><span class="hl-1"> </span><span class="hl-7">triggerBody</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-7">timestamp:</span><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-0">Date</span><span class="hl-1">().</span><span class="hl-0">toISOString</span><span class="hl-1">(),</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> </span><span class="hl-7">messages:</span><span class="hl-1"> [</span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-0">HumanMessage</span><span class="hl-1">(</span><span class="hl-7">triggerBody</span><span class="hl-1">)],</span><br/><span class="hl-1"> };</span><br/><span class="hl-1"> }</span><br/><span class="hl-1">});</span>
|
|
193
|
+
</code><button type="button">Copy</button></pre>
|
|
194
|
+
|
|
195
|
+
<h4 id="2-prompt-node-implementation" class="tsd-anchor-link">2. Prompt Node Implementation<a href="#2-prompt-node-implementation" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><p><strong>Flow Definition (YAML):</strong></p>
|
|
196
|
+
<pre><code class="yaml"><span class="hl-1">- </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">promptNode</span><br/><span class="hl-1"> </span><span class="hl-4">name</span><span class="hl-1">: </span><span class="hl-5">Customer Service Agent</span><br/><span class="hl-1"> </span><span class="hl-4">prompt</span><span class="hl-1">: </span><span class="hl-6">|</span><br/><span class="hl-5"> You are a helpful customer service agent for an e-commerce store.</span><br/><span class="hl-5"> Help the customer with their inquiry based on:</span><br/><span class="hl-5"> - Current conversation history</span><br/><span class="hl-5"> - Customer information in memory</span><br/><span class="hl-5"> - Order details if available</span><br/><span class="hl-5"> </span><br/><span class="hl-5"> Be polite, professional, and try to resolve their issue efficiently.</span><br/><span class="hl-1"> </span><span class="hl-4">llmConfig</span><span class="hl-1">:</span><br/><span class="hl-1"> </span><span class="hl-4">name</span><span class="hl-1">: </span><span class="hl-5">ChatOpenAI</span><br/><span class="hl-1"> </span><span class="hl-4">properties</span><span class="hl-1">:</span><br/><span class="hl-1"> </span><span class="hl-4">model</span><span class="hl-1">: </span><span class="hl-5">gpt-4o</span><br/><span class="hl-1"> </span><span class="hl-4">temperature</span><span class="hl-1">: </span><span class="hl-13">0.7</span>
|
|
197
|
+
</code><button type="button">Copy</button></pre>
|
|
198
|
+
|
|
199
|
+
<p><strong>Key Features:</strong></p>
|
|
200
|
+
<ul>
|
|
201
|
+
<li>Automatically uses LLM with the specified configuration</li>
|
|
202
|
+
<li>Has access to conversation history and memory</li>
|
|
203
|
+
<li>Can call global tools during execution</li>
|
|
204
|
+
<li>Emits <code>AI_MESSAGE</code> events when responding to users</li>
|
|
205
|
+
</ul>
|
|
206
|
+
<h4 id="3-tool-node-implementation" class="tsd-anchor-link">3. Tool Node Implementation<a href="#3-tool-node-implementation" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><p><strong>Flow Definition (YAML):</strong></p>
|
|
207
|
+
<pre><code class="yaml"><span class="hl-1">- </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">tool</span><br/><span class="hl-1"> </span><span class="hl-4">name</span><span class="hl-1">: </span><span class="hl-5">Lookup Order</span><br/><span class="hl-1"> </span><span class="hl-4">toolName</span><span class="hl-1">: </span><span class="hl-5">lookupOrder</span>
|
|
208
|
+
</code><button type="button">Copy</button></pre>
|
|
209
|
+
|
|
210
|
+
<p><strong>Tool Implementation:</strong></p>
|
|
211
|
+
<pre><code class="ts"><span class="hl-12">// tools/lookupOrder.ts</span><br/><span class="hl-6">import</span><span class="hl-1"> { </span><span class="hl-7">z</span><span class="hl-1"> } </span><span class="hl-6">from</span><span class="hl-1"> </span><span class="hl-2">'zod'</span><span class="hl-1">;</span><br/><span class="hl-6">import</span><span class="hl-1"> { </span><span class="hl-7">Tool</span><span class="hl-1"> } </span><span class="hl-6">from</span><span class="hl-1"> </span><span class="hl-2">'mindedjs/src/types/Tools.types'</span><span class="hl-1">;</span><br/><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-10">schema</span><span class="hl-1"> = </span><span class="hl-7">z</span><span class="hl-1">.</span><span class="hl-0">object</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-7">orderId:</span><span class="hl-1"> </span><span class="hl-7">z</span><span class="hl-1">.</span><span class="hl-0">string</span><span class="hl-1">(),</span><br/><span class="hl-1"> </span><span class="hl-7">customerEmail:</span><span class="hl-1"> </span><span class="hl-7">z</span><span class="hl-1">.</span><span class="hl-0">string</span><span class="hl-1">().</span><span class="hl-0">optional</span><span class="hl-1">(),</span><br/><span class="hl-1">});</span><br/><br/><span class="hl-8">type</span><span class="hl-1"> </span><span class="hl-9">Memory</span><span class="hl-1"> = {</span><br/><span class="hl-1"> </span><span class="hl-7">customerQuery</span><span class="hl-1">?: </span><span class="hl-9">string</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-7">orderInfo</span><span class="hl-1">?: </span><span class="hl-9">any</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-7">customerEmail</span><span class="hl-1">?: </span><span class="hl-9">string</span><span class="hl-1">;</span><br/><span class="hl-1">};</span><br/><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-10">lookupOrderTool</span><span class="hl-1">: </span><span class="hl-9">Tool</span><span class="hl-1"><</span><span class="hl-8">typeof</span><span class="hl-1"> </span><span class="hl-7">schema</span><span class="hl-1">, </span><span class="hl-9">Memory</span><span class="hl-1">> = {</span><br/><span class="hl-1"> </span><span class="hl-7">name:</span><span class="hl-1"> </span><span class="hl-2">'lookupOrder'</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-7">description:</span><span class="hl-1"> </span><span class="hl-2">'Look up order details by order ID and optional customer email'</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-7">input:</span><span class="hl-1"> </span><span class="hl-7">schema</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-0">execute</span><span class="hl-7">:</span><span class="hl-1"> </span><span class="hl-8">async</span><span class="hl-1"> ({ </span><span class="hl-7">input</span><span class="hl-1">, </span><span class="hl-7">memory</span><span class="hl-1"> }) </span><span class="hl-8">=></span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-12">// Simulate API call to order system</span><br/><span class="hl-1"> </span><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-10">orderInfo</span><span class="hl-1"> = </span><span class="hl-6">await</span><span class="hl-1"> </span><span class="hl-0">fetchOrderFromAPI</span><span class="hl-1">(</span><span class="hl-7">input</span><span class="hl-1">.</span><span class="hl-7">orderId</span><span class="hl-1">, </span><span class="hl-7">input</span><span class="hl-1">.</span><span class="hl-7">customerEmail</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><br/><span class="hl-1"> </span><span class="hl-6">if</span><span class="hl-1"> (!</span><span class="hl-7">orderInfo</span><span class="hl-1">) {</span><br/><span class="hl-1"> </span><span class="hl-6">throw</span><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-0">Error</span><span class="hl-1">(</span><span class="hl-2">'Order not found'</span><span class="hl-1">);</span><br/><span class="hl-1"> }</span><br/><span class="hl-1"> </span><br/><span class="hl-1"> </span><span class="hl-6">return</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-7">memory:</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-7">orderInfo</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-7">customerEmail:</span><span class="hl-1"> </span><span class="hl-7">input</span><span class="hl-1">.</span><span class="hl-7">customerEmail</span><span class="hl-1"> || </span><span class="hl-7">memory</span><span class="hl-1">.</span><span class="hl-7">customerEmail</span><span class="hl-1">,</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> };</span><br/><span class="hl-1"> },</span><br/><span class="hl-1">};</span><br/><br/><span class="hl-8">async</span><span class="hl-1"> </span><span class="hl-8">function</span><span class="hl-1"> </span><span class="hl-0">fetchOrderFromAPI</span><span class="hl-1">(</span><span class="hl-7">orderId</span><span class="hl-1">: </span><span class="hl-9">string</span><span class="hl-1">, </span><span class="hl-7">email</span><span class="hl-1">?: </span><span class="hl-9">string</span><span class="hl-1">) {</span><br/><span class="hl-1"> </span><span class="hl-12">// Your order lookup logic here</span><br/><span class="hl-1"> </span><span class="hl-6">return</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-7">id:</span><span class="hl-1"> </span><span class="hl-7">orderId</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-7">status:</span><span class="hl-1"> </span><span class="hl-2">'shipped'</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-7">total:</span><span class="hl-1"> </span><span class="hl-13">99.99</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-7">items:</span><span class="hl-1"> [</span><span class="hl-2">'Product A'</span><span class="hl-1">, </span><span class="hl-2">'Product B'</span><span class="hl-1">],</span><br/><span class="hl-1"> };</span><br/><span class="hl-1">}</span><br/><br/><span class="hl-6">export</span><span class="hl-1"> </span><span class="hl-6">default</span><span class="hl-1"> </span><span class="hl-7">lookupOrderTool</span><span class="hl-1">;</span>
|
|
212
|
+
</code><button type="button">Copy</button></pre>
|
|
213
|
+
|
|
214
|
+
<h4 id="4-app-tool-implementation" class="tsd-anchor-link">4. App Tool Implementation<a href="#4-app-tool-implementation" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><p><strong>Flow Definition (YAML):</strong></p>
|
|
215
|
+
<pre><code class="yaml"><span class="hl-1">- </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">appTool</span><br/><span class="hl-1"> </span><span class="hl-4">name</span><span class="hl-1">: </span><span class="hl-5">Email Classifier</span><br/><span class="hl-1"> </span><span class="hl-4">prompt</span><span class="hl-1">: </span><span class="hl-6">|</span><br/><span class="hl-5"> Classify the customer's email based on:</span><br/><span class="hl-5"> - Urgency (low, medium, high, urgent)</span><br/><span class="hl-5"> - Category (billing, shipping, returns, technical, general)</span><br/><span class="hl-5"> - Sentiment (positive, neutral, negative, frustrated)</span><br/><span class="hl-5"> </span><br/><span class="hl-5"> Return your classification in a structured format.</span>
|
|
216
|
+
</code><button type="button">Copy</button></pre>
|
|
217
|
+
|
|
218
|
+
<p><strong>Key Features:</strong></p>
|
|
219
|
+
<ul>
|
|
220
|
+
<li>Uses the prompt to guide an LLM in processing the current state</li>
|
|
221
|
+
<li>Automatically integrates with the flow's context</li>
|
|
222
|
+
<li>Can be reused across multiple flows</li>
|
|
223
|
+
</ul>
|
|
224
|
+
<h4 id="5-junction-node-implementation" class="tsd-anchor-link">5. Junction Node Implementation<a href="#5-junction-node-implementation" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><p><strong>Flow Definition (YAML):</strong></p>
|
|
225
|
+
<pre><code class="yaml"><span class="hl-1">- </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">junction</span><br/><span class="hl-1"> </span><span class="hl-4">name</span><span class="hl-1">: </span><span class="hl-5">Routing Decision</span>
|
|
226
|
+
</code><button type="button">Copy</button></pre>
|
|
227
|
+
|
|
228
|
+
<p><strong>Usage Context:</strong></p>
|
|
229
|
+
<pre><code class="yaml"><span class="hl-12"># Multiple edges can converge at a junction</span><br/><span class="hl-1">- </span><span class="hl-4">source</span><span class="hl-1">: </span><span class="hl-5">Check Premium Status</span><br/><span class="hl-1"> </span><span class="hl-4">target</span><span class="hl-1">: </span><span class="hl-5">Routing Decision</span><br/><span class="hl-1"> </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">stepForward</span><br/><span class="hl-1">- </span><span class="hl-4">source</span><span class="hl-1">: </span><span class="hl-5">Validate Order</span><br/><span class="hl-1"> </span><span class="hl-4">target</span><span class="hl-1">: </span><span class="hl-5">Routing Decision</span><br/><span class="hl-1"> </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">stepForward</span><br/><br/><span class="hl-12"># Junction can then route to different paths</span><br/><span class="hl-1">- </span><span class="hl-4">source</span><span class="hl-1">: </span><span class="hl-5">Routing Decision</span><br/><span class="hl-1"> </span><span class="hl-4">target</span><span class="hl-1">: </span><span class="hl-5">Premium Support</span><br/><span class="hl-1"> </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">logicalCondition</span><br/><span class="hl-1"> </span><span class="hl-4">condition</span><span class="hl-1">: </span><span class="hl-2">"({ memory }) => memory.user?.isPremium && memory.orderInfo?.total > 100"</span>
|
|
230
|
+
</code><button type="button">Copy</button></pre>
|
|
231
|
+
|
|
232
|
+
<h3 id="edge-implementation-examples" class="tsd-anchor-link">Edge Implementation Examples<a href="#edge-implementation-examples" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><h4 id="1-step-forward-edge" class="tsd-anchor-link">1. Step Forward Edge<a href="#1-step-forward-edge" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><p><strong>Flow Definition (YAML):</strong></p>
|
|
233
|
+
<pre><code class="yaml"><span class="hl-1">- </span><span class="hl-4">source</span><span class="hl-1">: </span><span class="hl-5">Order Support Trigger</span><br/><span class="hl-1"> </span><span class="hl-4">target</span><span class="hl-1">: </span><span class="hl-5">Customer Service Agent</span><br/><span class="hl-1"> </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">stepForward</span>
|
|
234
|
+
</code><button type="button">Copy</button></pre>
|
|
235
|
+
|
|
236
|
+
<p><strong>Behavior:</strong></p>
|
|
237
|
+
<ul>
|
|
238
|
+
<li>Unconditionally moves from source to target</li>
|
|
239
|
+
<li>No conditions evaluated</li>
|
|
240
|
+
<li>Always proceeds regardless of state</li>
|
|
241
|
+
</ul>
|
|
242
|
+
<h4 id="2-prompt-condition-edge" class="tsd-anchor-link">2. Prompt Condition Edge<a href="#2-prompt-condition-edge" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><p><strong>Flow Definition (YAML):</strong></p>
|
|
243
|
+
<pre><code class="yaml"><span class="hl-1">- </span><span class="hl-4">source</span><span class="hl-1">: </span><span class="hl-5">Customer Service Agent</span><br/><span class="hl-1"> </span><span class="hl-4">target</span><span class="hl-1">: </span><span class="hl-5">Lookup Order</span><br/><span class="hl-1"> </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">promptCondition</span><br/><span class="hl-1"> </span><span class="hl-4">prompt</span><span class="hl-1">: </span><span class="hl-2">"The customer is asking about a specific order and has provided an order ID"</span><br/><br/><span class="hl-1">- </span><span class="hl-4">source</span><span class="hl-1">: </span><span class="hl-5">Customer Service Agent</span><br/><span class="hl-1"> </span><span class="hl-4">target</span><span class="hl-1">: </span><span class="hl-5">General Help</span><br/><span class="hl-1"> </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">promptCondition</span><br/><span class="hl-1"> </span><span class="hl-4">prompt</span><span class="hl-1">: </span><span class="hl-2">"The customer has a general question that doesn't require order lookup"</span><br/><br/><span class="hl-1">- </span><span class="hl-4">source</span><span class="hl-1">: </span><span class="hl-5">Customer Service Agent</span><br/><span class="hl-1"> </span><span class="hl-4">target</span><span class="hl-1">: </span><span class="hl-5">Escalate to Human</span><br/><span class="hl-1"> </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">promptCondition</span><br/><span class="hl-1"> </span><span class="hl-4">prompt</span><span class="hl-1">: </span><span class="hl-2">"The customer is frustrated, angry, or has a complex issue that requires human intervention"</span>
|
|
244
|
+
</code><button type="button">Copy</button></pre>
|
|
245
|
+
|
|
246
|
+
<p><strong>How it works:</strong></p>
|
|
247
|
+
<ul>
|
|
248
|
+
<li>An LLM router analyzes the current memory state and conversation history</li>
|
|
249
|
+
<li>Compares against all available prompt conditions from this source node</li>
|
|
250
|
+
<li>Routes to the most appropriate target based on the conditions</li>
|
|
251
|
+
<li>If no condition matches well, stays on the current node</li>
|
|
252
|
+
</ul>
|
|
253
|
+
<h4 id="3-logical-condition-edge" class="tsd-anchor-link">3. Logical Condition Edge<a href="#3-logical-condition-edge" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h4><p><strong>Flow Definition (YAML):</strong></p>
|
|
254
|
+
<pre><code class="yaml"><span class="hl-1">- </span><span class="hl-4">source</span><span class="hl-1">: </span><span class="hl-5">Lookup Order</span><br/><span class="hl-1"> </span><span class="hl-4">target</span><span class="hl-1">: </span><span class="hl-5">Process Refund</span><br/><span class="hl-1"> </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">logicalCondition</span><br/><span class="hl-1"> </span><span class="hl-4">condition</span><span class="hl-1">: </span><span class="hl-2">"({ memory }) => memory.orderInfo?.status === 'delivered' && memory.orderInfo?.age > 7"</span><br/><br/><span class="hl-1">- </span><span class="hl-4">source</span><span class="hl-1">: </span><span class="hl-5">Check User Status</span><br/><span class="hl-1"> </span><span class="hl-4">target</span><span class="hl-1">: </span><span class="hl-5">Premium Features</span><br/><span class="hl-1"> </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">logicalCondition</span><br/><span class="hl-1"> </span><span class="hl-4">condition</span><span class="hl-1">: </span><span class="hl-2">"({ memory }) => memory.user?.tier === 'premium' || memory.user?.lifetimeSpent > 1000"</span><br/><br/><span class="hl-1">- </span><span class="hl-4">source</span><span class="hl-1">: </span><span class="hl-5">Validate Payment</span><br/><span class="hl-1"> </span><span class="hl-4">target</span><span class="hl-1">: </span><span class="hl-5">Complete Purchase</span><br/><span class="hl-1"> </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">logicalCondition</span><br/><span class="hl-1"> </span><span class="hl-4">condition</span><span class="hl-1">: </span><span class="hl-2">"({ memory }) => memory.paymentValid && memory.inventoryAvailable && memory.shippingAddress"</span>
|
|
255
|
+
</code><button type="button">Copy</button></pre>
|
|
256
|
+
|
|
257
|
+
<p><strong>Implementation Details:</strong></p>
|
|
258
|
+
<ul>
|
|
259
|
+
<li>Conditions are JavaScript functions that receive <code>{ memory }</code> as parameter</li>
|
|
260
|
+
<li>Must return a boolean value</li>
|
|
261
|
+
<li>Evaluated in order until one returns <code>true</code></li>
|
|
262
|
+
<li>If no condition matches, flow stays on source node</li>
|
|
263
|
+
</ul>
|
|
264
|
+
<h3 id="complete-flow-example" class="tsd-anchor-link">Complete Flow Example<a href="#complete-flow-example" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p><strong>Full Flow (YAML):</strong></p>
|
|
265
|
+
<pre><code class="yaml"><span class="hl-4">name</span><span class="hl-1">: </span><span class="hl-5">'Customer Support Flow'</span><br/><span class="hl-4">nodes</span><span class="hl-1">:</span><br/><span class="hl-1"> - </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">trigger</span><br/><span class="hl-1"> </span><span class="hl-4">triggerType</span><span class="hl-1">: </span><span class="hl-5">manual</span><br/><span class="hl-1"> </span><span class="hl-4">name</span><span class="hl-1">: </span><span class="hl-5">Support Trigger</span><br/><span class="hl-1"> </span><br/><span class="hl-1"> - </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">promptNode</span><br/><span class="hl-1"> </span><span class="hl-4">name</span><span class="hl-1">: </span><span class="hl-5">Support Agent</span><br/><span class="hl-1"> </span><span class="hl-4">prompt</span><span class="hl-1">: </span><span class="hl-2">"Help the customer with their inquiry. Ask for order ID if they mention order issues."</span><br/><span class="hl-1"> </span><br/><span class="hl-1"> - </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">tool</span><br/><span class="hl-1"> </span><span class="hl-4">name</span><span class="hl-1">: </span><span class="hl-5">Get Order</span><br/><span class="hl-1"> </span><span class="hl-4">toolName</span><span class="hl-1">: </span><span class="hl-5">lookupOrder</span><br/><span class="hl-1"> </span><br/><span class="hl-1"> - </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">junction</span><br/><span class="hl-1"> </span><span class="hl-4">name</span><span class="hl-1">: </span><span class="hl-5">Decision Point</span><br/><span class="hl-1"> </span><br/><span class="hl-1"> - </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">tool</span><br/><span class="hl-1"> </span><span class="hl-4">name</span><span class="hl-1">: </span><span class="hl-5">Process Refund</span><br/><span class="hl-1"> </span><span class="hl-4">toolName</span><span class="hl-1">: </span><span class="hl-5">processRefund</span><br/><span class="hl-1"> </span><br/><span class="hl-1"> - </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">promptNode</span><br/><span class="hl-1"> </span><span class="hl-4">name</span><span class="hl-1">: </span><span class="hl-5">Escalation Agent</span><br/><span class="hl-1"> </span><span class="hl-4">prompt</span><span class="hl-1">: </span><span class="hl-2">"A human agent will help you shortly. Please describe your issue in detail."</span><br/><br/><span class="hl-4">edges</span><span class="hl-1">:</span><br/><span class="hl-1"> - </span><span class="hl-4">source</span><span class="hl-1">: </span><span class="hl-5">Support Trigger</span><br/><span class="hl-1"> </span><span class="hl-4">target</span><span class="hl-1">: </span><span class="hl-5">Support Agent</span><br/><span class="hl-1"> </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">stepForward</span><br/><span class="hl-1"> </span><br/><span class="hl-1"> - </span><span class="hl-4">source</span><span class="hl-1">: </span><span class="hl-5">Support Agent</span><br/><span class="hl-1"> </span><span class="hl-4">target</span><span class="hl-1">: </span><span class="hl-5">Get Order</span><br/><span class="hl-1"> </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">promptCondition</span><br/><span class="hl-1"> </span><span class="hl-4">prompt</span><span class="hl-1">: </span><span class="hl-2">"Customer mentioned an order and provided order ID"</span><br/><span class="hl-1"> </span><br/><span class="hl-1"> - </span><span class="hl-4">source</span><span class="hl-1">: </span><span class="hl-5">Support Agent</span><br/><span class="hl-1"> </span><span class="hl-4">target</span><span class="hl-1">: </span><span class="hl-5">Escalation Agent</span><br/><span class="hl-1"> </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">promptCondition</span><br/><span class="hl-1"> </span><span class="hl-4">prompt</span><span class="hl-1">: </span><span class="hl-2">"Customer is frustrated or has complex issue"</span><br/><span class="hl-1"> </span><br/><span class="hl-1"> - </span><span class="hl-4">source</span><span class="hl-1">: </span><span class="hl-5">Get Order</span><br/><span class="hl-1"> </span><span class="hl-4">target</span><span class="hl-1">: </span><span class="hl-5">Decision Point</span><br/><span class="hl-1"> </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">stepForward</span><br/><span class="hl-1"> </span><br/><span class="hl-1"> - </span><span class="hl-4">source</span><span class="hl-1">: </span><span class="hl-5">Decision Point</span><br/><span class="hl-1"> </span><span class="hl-4">target</span><span class="hl-1">: </span><span class="hl-5">Process Refund</span><br/><span class="hl-1"> </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">logicalCondition</span><br/><span class="hl-1"> </span><span class="hl-4">condition</span><span class="hl-1">: </span><span class="hl-2">"({ memory }) => memory.orderInfo?.canRefund && memory.customerRequestsRefund"</span><br/><span class="hl-1"> </span><br/><span class="hl-1"> - </span><span class="hl-4">source</span><span class="hl-1">: </span><span class="hl-5">Decision Point</span><br/><span class="hl-1"> </span><span class="hl-4">target</span><span class="hl-1">: </span><span class="hl-5">Escalation Agent</span><br/><span class="hl-1"> </span><span class="hl-4">type</span><span class="hl-1">: </span><span class="hl-5">logicalCondition</span><br/><span class="hl-1"> </span><span class="hl-4">condition</span><span class="hl-1">: </span><span class="hl-2">"({ memory }) => memory.orderInfo?.requiresHumanReview"</span>
|
|
266
|
+
</code><button type="button">Copy</button></pre>
|
|
267
|
+
|
|
268
|
+
<p><strong>Agent Implementation:</strong></p>
|
|
269
|
+
<pre><code class="ts"><span class="hl-6">import</span><span class="hl-1"> { </span><span class="hl-7">Agent</span><span class="hl-1"> } </span><span class="hl-6">from</span><span class="hl-1"> </span><span class="hl-2">'mindedjs/src/agent'</span><span class="hl-1">;</span><br/><span class="hl-6">import</span><span class="hl-1"> { </span><span class="hl-7">events</span><span class="hl-1"> } </span><span class="hl-6">from</span><span class="hl-1"> </span><span class="hl-2">'mindedjs/src/index'</span><span class="hl-1">;</span><br/><span class="hl-6">import</span><span class="hl-1"> { </span><span class="hl-7">HumanMessage</span><span class="hl-1"> } </span><span class="hl-6">from</span><span class="hl-1"> </span><span class="hl-2">'@langchain/core/messages'</span><span class="hl-1">;</span><br/><span class="hl-6">import</span><span class="hl-1"> </span><span class="hl-7">supportFlow</span><span class="hl-1"> </span><span class="hl-6">from</span><span class="hl-1"> </span><span class="hl-2">'./flows/supportFlow.yaml'</span><span class="hl-1">;</span><br/><span class="hl-6">import</span><span class="hl-1"> </span><span class="hl-7">tools</span><span class="hl-1"> </span><span class="hl-6">from</span><span class="hl-1"> </span><span class="hl-2">'./tools'</span><span class="hl-1">;</span><br/><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-10">agent</span><span class="hl-1"> = </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-0">Agent</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-7">flows:</span><span class="hl-1"> [</span><span class="hl-7">supportFlow</span><span class="hl-1">],</span><br/><span class="hl-1"> </span><span class="hl-7">tools</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-7">config:</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-7">llm:</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-7">name:</span><span class="hl-1"> </span><span class="hl-2">'ChatOpenAI'</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-7">properties:</span><span class="hl-1"> { </span><span class="hl-7">model:</span><span class="hl-1"> </span><span class="hl-2">'gpt-4o'</span><span class="hl-1"> }</span><br/><span class="hl-1"> }</span><br/><span class="hl-1"> }</span><br/><span class="hl-1">});</span><br/><br/><span class="hl-12">// Handle trigger events</span><br/><span class="hl-7">agent</span><span class="hl-1">.</span><span class="hl-0">on</span><span class="hl-1">(</span><span class="hl-7">events</span><span class="hl-1">.</span><span class="hl-10">TRIGGER_EVENT</span><span class="hl-1">, </span><span class="hl-8">async</span><span class="hl-1"> ({ </span><span class="hl-7">triggerName</span><span class="hl-1">, </span><span class="hl-7">triggerBody</span><span class="hl-1"> }) </span><span class="hl-8">=></span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-6">if</span><span class="hl-1"> (</span><span class="hl-7">triggerName</span><span class="hl-1"> === </span><span class="hl-2">'Support Trigger'</span><span class="hl-1">) {</span><br/><span class="hl-1"> </span><span class="hl-6">return</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-7">memory:</span><span class="hl-1"> { </span><br/><span class="hl-1"> </span><span class="hl-7">customerQuery:</span><span class="hl-1"> </span><span class="hl-7">triggerBody</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-7">timestamp:</span><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-0">Date</span><span class="hl-1">().</span><span class="hl-0">toISOString</span><span class="hl-1">() </span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> </span><span class="hl-7">messages:</span><span class="hl-1"> [</span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-0">HumanMessage</span><span class="hl-1">(</span><span class="hl-7">triggerBody</span><span class="hl-1">)],</span><br/><span class="hl-1"> };</span><br/><span class="hl-1"> }</span><br/><span class="hl-1">});</span><br/><br/><span class="hl-12">// Listen for AI responses</span><br/><span class="hl-7">agent</span><span class="hl-1">.</span><span class="hl-0">on</span><span class="hl-1">(</span><span class="hl-7">events</span><span class="hl-1">.</span><span class="hl-10">AI_MESSAGE</span><span class="hl-1">, </span><span class="hl-8">async</span><span class="hl-1"> ({ </span><span class="hl-7">message</span><span class="hl-1"> }) </span><span class="hl-8">=></span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-7">console</span><span class="hl-1">.</span><span class="hl-0">log</span><span class="hl-1">(</span><span class="hl-2">'Agent:'</span><span class="hl-1">, </span><span class="hl-7">message</span><span class="hl-1">);</span><br/><span class="hl-1">});</span><br/><br/><span class="hl-12">// Start the flow</span><br/><span class="hl-6">await</span><span class="hl-1"> </span><span class="hl-7">agent</span><span class="hl-1">.</span><span class="hl-0">invoke</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-7">triggerBody:</span><span class="hl-1"> </span><span class="hl-2">'Hi, I need help with my order #12345'</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-7">triggerName:</span><span class="hl-1"> </span><span class="hl-2">'Support Trigger'</span><br/><span class="hl-1">});</span>
|
|
270
|
+
</code><button type="button">Copy</button></pre>
|
|
271
|
+
|
|
272
|
+
<hr>
|
|
273
|
+
<h2 id="🧑🍳-how-to-guides" class="tsd-anchor-link">🧑🍳 How-to Guides<a href="#🧑🍳-how-to-guides" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><h3 id="➕-add-a-new-tool" class="tsd-anchor-link">➕ Add a new Tool<a href="#➕-add-a-new-tool" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><ol>
|
|
274
|
+
<li>Define a <code>zod</code> schema for the input.</li>
|
|
275
|
+
<li>Implement the <code>execute</code> function and return <code>{ memory, messages? }</code>.</li>
|
|
276
|
+
<li>Export the tool and include it in the <code>tools</code> array when creating the agent.</li>
|
|
277
|
+
</ol>
|
|
278
|
+
<h3 id="💬-listen-for-agent-events" class="tsd-anchor-link">💬 Listen for Agent Events<a href="#💬-listen-for-agent-events" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="ts"><span class="hl-7">agent</span><span class="hl-1">.</span><span class="hl-0">on</span><span class="hl-1">(</span><span class="hl-7">events</span><span class="hl-1">.</span><span class="hl-10">AI_MESSAGE</span><span class="hl-1">, ({ </span><span class="hl-7">message</span><span class="hl-1"> }) </span><span class="hl-8">=></span><span class="hl-1"> </span><span class="hl-7">console</span><span class="hl-1">.</span><span class="hl-0">log</span><span class="hl-1">(</span><span class="hl-2">'AI says:'</span><span class="hl-1">, </span><span class="hl-7">message</span><span class="hl-1">));</span>
|
|
279
|
+
</code><button type="button">Copy</button></pre>
|
|
280
|
+
|
|
281
|
+
<h3 id="🧠-persist--extend-memory" class="tsd-anchor-link">🧠 Persist / Extend Memory<a href="#🧠-persist--extend-memory" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>Return a partial <code>memory</code> object from any tool or trigger handler – it will be merged automatically.</p>
|
|
282
|
+
<h3 id="🏗️-run-flows-from-the-cli" class="tsd-anchor-link">🏗️ Run flows from the CLI<a href="#🏗️-run-flows-from-the-cli" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="bash"><span class="hl-0">npx</span><span class="hl-1"> </span><span class="hl-2">ts-node</span><span class="hl-1"> </span><span class="hl-2">./examples/orderRefundAgent/orderRefundAgent.ts</span>
|
|
283
|
+
</code><button type="button">Copy</button></pre>
|
|
284
|
+
|
|
285
|
+
<hr>
|
|
286
|
+
<h2 id="🛠️-api-reference" class="tsd-anchor-link">🛠️ API Reference<a href="#🛠️-api-reference" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><h3 id="class-agent" class="tsd-anchor-link"><code>class Agent<Memory></code><a href="#class-agent" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><table>
|
|
287
|
+
<thead>
|
|
288
|
+
<tr>
|
|
289
|
+
<th>Method / Prop</th>
|
|
290
|
+
<th>Description</th>
|
|
291
|
+
</tr>
|
|
292
|
+
</thead>
|
|
293
|
+
<tbody>
|
|
294
|
+
<tr>
|
|
295
|
+
<td><code>constructor(params)</code></td>
|
|
296
|
+
<td>Create an agent. Params: <code>flows</code>, <code>tools</code>, <code>llm</code>, <code>platformToken?</code>, <code>memorySaver?</code>.</td>
|
|
297
|
+
</tr>
|
|
298
|
+
<tr>
|
|
299
|
+
<td><code>invoke({ triggerBody, triggerName, sessionId? })</code></td>
|
|
300
|
+
<td>Runs the flow for a given trigger. Returns the final graph state.</td>
|
|
301
|
+
</tr>
|
|
302
|
+
<tr>
|
|
303
|
+
<td><code>on(event, callback)</code></td>
|
|
304
|
+
<td>Register event listeners (typed).</td>
|
|
305
|
+
</tr>
|
|
306
|
+
</tbody>
|
|
307
|
+
</table>
|
|
308
|
+
<hr>
|
|
309
|
+
<h2 id="©-license" class="tsd-anchor-link">© License<a href="#©-license" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p>MIT (or your preferred license here)</p>
|
|
310
|
+
</div></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="assets/icons.svg#icon-chevronDown"></use></svg><h3>On This Page</h3></summary><div class="tsd-accordion-details"><a href="#mindedjs--agent-sdk"><span>Minded<wbr/>JS – <wbr/>Agent <wbr/>SDK</span></a><ul><li><a href="#✨-why-mindedjs"><span>✨ <wbr/>Why <wbr/>Minded<wbr/>JS?</span></a></li><li><a href="#📦-installation"><span>📦 <wbr/>Installation</span></a></li><li><a href="#🚀-quick-start"><span>🚀 <wbr/>Quick <wbr/>Start</span></a></li><li><a href="#🔑-core-concepts"><span>🔑 <wbr/>Core <wbr/>Concepts</span></a></li><li><ul><li><a href="#memory-type"><span>Memory <wbr/>Type</span></a></li><li><a href="#1-flow"><span>1. <wbr/>Flow</span></a></li><li><a href="#2-nodes"><span>2. <wbr/>Nodes</span></a></li><li><a href="#3-edges"><span>3. <wbr/>Edges</span></a></li><li><a href="#4-tools"><span>4. <wbr/>Tools</span></a></li><li><a href="#5-events"><span>5. <wbr/>Events</span></a></li><li><a href="#6-memory--checkpoints"><span>6. <wbr/>Memory & <wbr/>Checkpoints</span></a></li></ul></li><li><a href="#🧩-node-types"><span>🧩 <wbr/>Node <wbr/>Types</span></a></li><li><ul><li><a href="#trigger-trigger"><span>Trigger (<wbr/>TRIGGER)</span></a></li><li><a href="#prompt-node-prompt_node"><span>Prompt <wbr/>Node (<wbr/>PROMPT_<wbr/>NODE)</span></a></li><li><a href="#tool-node-tool"><span>Tool <wbr/>Node (<wbr/>TOOL)</span></a></li><li><a href="#app-tool-app_tool"><span>App <wbr/>Tool (<wbr/>APP_<wbr/>TOOL)</span></a></li><li><a href="#junction-junction"><span>Junction (<wbr/>JUNCTION)</span></a></li></ul></li><li><a href="#🔀-edge-types"><span>🔀 <wbr/>Edge <wbr/>Types</span></a></li><li><ul><li><a href="#step-forward-step_forward"><span>Step <wbr/>Forward (<wbr/>STEP_<wbr/>FORWARD)</span></a></li><li><a href="#prompt-condition-prompt_condition"><span>Prompt <wbr/>Condition (<wbr/>PROMPT_<wbr/>CONDITION)</span></a></li><li><a href="#logical-condition-logical_condition"><span>Logical <wbr/>Condition (<wbr/>LOGICAL_<wbr/>CONDITION)</span></a></li></ul></li><li><a href="#📚-implementation-examples"><span>📚 <wbr/>Implementation <wbr/>Examples</span></a></li><li><ul><li><a href="#node-implementation-examples"><span>Node <wbr/>Implementation <wbr/>Examples</span></a></li><li><ul><li><a href="#1-trigger-node-implementation"><span>1. <wbr/>Trigger <wbr/>Node <wbr/>Implementation</span></a></li><li><a href="#2-prompt-node-implementation"><span>2. <wbr/>Prompt <wbr/>Node <wbr/>Implementation</span></a></li><li><a href="#3-tool-node-implementation"><span>3. <wbr/>Tool <wbr/>Node <wbr/>Implementation</span></a></li><li><a href="#4-app-tool-implementation"><span>4. <wbr/>App <wbr/>Tool <wbr/>Implementation</span></a></li><li><a href="#5-junction-node-implementation"><span>5. <wbr/>Junction <wbr/>Node <wbr/>Implementation</span></a></li></ul></li><li><a href="#edge-implementation-examples"><span>Edge <wbr/>Implementation <wbr/>Examples</span></a></li><li><ul><li><a href="#1-step-forward-edge"><span>1. <wbr/>Step <wbr/>Forward <wbr/>Edge</span></a></li><li><a href="#2-prompt-condition-edge"><span>2. <wbr/>Prompt <wbr/>Condition <wbr/>Edge</span></a></li><li><a href="#3-logical-condition-edge"><span>3. <wbr/>Logical <wbr/>Condition <wbr/>Edge</span></a></li></ul></li><li><a href="#complete-flow-example"><span>Complete <wbr/>Flow <wbr/>Example</span></a></li></ul></li><li><a href="#🧑🍳-how-to-guides"><span>🧑🍳 <wbr/>How-<wbr/>to <wbr/>Guides</span></a></li><li><ul><li><a href="#➕-add-a-new-tool"><span>➕ <wbr/>Add a new <wbr/>Tool</span></a></li><li><a href="#💬-listen-for-agent-events"><span>💬 <wbr/>Listen for <wbr/>Agent <wbr/>Events</span></a></li><li><a href="#🧠-persist--extend-memory"><span>🧠 <wbr/>Persist / <wbr/>Extend <wbr/>Memory</span></a></li><li><a href="#🏗️-run-flows-from-the-cli"><span>🏗️ <wbr/>Run flows from the <wbr/>CLI</span></a></li></ul></li><li><a href="#🛠️-api-reference"><span>🛠️ <wbr/>API <wbr/>Reference</span></a></li><li><ul><li><a href="#class-agent"><span>class <wbr/>Agent<<wbr/>Memory></span></a></li></ul></li><li><a href="#©-license"><span>© <wbr/>License</span></a></li></ul></div></details></div><div class="site-menu"><nav class="tsd-navigation"><a href="modules.html">@agentsforce/sdk</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>
|