@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.
Files changed (183) hide show
  1. package/.github/workflows/CI.yml +34 -0
  2. package/.prettierrc +8 -0
  3. package/README.md +6 -0
  4. package/dist/agent.d.ts +36 -0
  5. package/dist/agent.js +199 -0
  6. package/dist/agent.js.map +1 -0
  7. package/dist/analytics.d.ts +6 -0
  8. package/dist/analytics.js +19 -0
  9. package/dist/analytics.js.map +1 -0
  10. package/dist/edges/createDirectEdge.d.ts +4 -0
  11. package/dist/edges/createDirectEdge.js +14 -0
  12. package/dist/edges/createDirectEdge.js.map +1 -0
  13. package/dist/edges/createLogicalRouter.d.ts +5 -0
  14. package/dist/edges/createLogicalRouter.js +18 -0
  15. package/dist/edges/createLogicalRouter.js.map +1 -0
  16. package/dist/edges/createPromptRouter.d.ts +7 -0
  17. package/dist/edges/createPromptRouter.js +54 -0
  18. package/dist/edges/createPromptRouter.js.map +1 -0
  19. package/dist/edges/edgeFactory.d.ts +9 -0
  20. package/dist/edges/edgeFactory.js +65 -0
  21. package/dist/edges/edgeFactory.js.map +1 -0
  22. package/dist/events/AgentEvents.d.ts +22 -0
  23. package/dist/events/AgentEvents.js +9 -0
  24. package/dist/events/AgentEvents.js.map +1 -0
  25. package/dist/events/index.d.ts +2 -0
  26. package/dist/events/index.js +5 -0
  27. package/dist/events/index.js.map +1 -0
  28. package/dist/index.d.ts +6 -0
  29. package/dist/index.js +15 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/infrastructure.ts/mindedRequest.d.ts +8 -0
  32. package/dist/infrastructure.ts/mindedRequest.js +22 -0
  33. package/dist/infrastructure.ts/mindedRequest.js.map +1 -0
  34. package/dist/llm/createLlmInstance.d.ts +2 -0
  35. package/dist/llm/createLlmInstance.js +14 -0
  36. package/dist/llm/createLlmInstance.js.map +1 -0
  37. package/dist/nodes/addHumanInTheLoopNode.d.ts +8 -0
  38. package/dist/nodes/addHumanInTheLoopNode.js +17 -0
  39. package/dist/nodes/addHumanInTheLoopNode.js.map +1 -0
  40. package/dist/nodes/addPromptNode.d.ts +15 -0
  41. package/dist/nodes/addPromptNode.js +52 -0
  42. package/dist/nodes/addPromptNode.js.map +1 -0
  43. package/dist/nodes/addToolNode.d.ts +10 -0
  44. package/dist/nodes/addToolNode.js +82 -0
  45. package/dist/nodes/addToolNode.js.map +1 -0
  46. package/dist/nodes/addTriggerNode.d.ts +6 -0
  47. package/dist/nodes/addTriggerNode.js +12 -0
  48. package/dist/nodes/addTriggerNode.js.map +1 -0
  49. package/dist/nodes/nodeFactory.d.ts +13 -0
  50. package/dist/nodes/nodeFactory.js +41 -0
  51. package/dist/nodes/nodeFactory.js.map +1 -0
  52. package/dist/platform/analytics.d.ts +6 -0
  53. package/dist/platform/analytics.js +19 -0
  54. package/dist/platform/analytics.js.map +1 -0
  55. package/dist/platform/mindedCheckpointSaver.d.ts +10 -0
  56. package/dist/platform/mindedCheckpointSaver.js +49 -0
  57. package/dist/platform/mindedCheckpointSaver.js.map +1 -0
  58. package/dist/platform/mindedConnection.d.ts +13 -0
  59. package/dist/platform/mindedConnection.js +117 -0
  60. package/dist/platform/mindedConnection.js.map +1 -0
  61. package/dist/platform/mindedConnectionTypes.d.ts +10 -0
  62. package/dist/platform/mindedConnectionTypes.js +8 -0
  63. package/dist/platform/mindedConnectionTypes.js.map +1 -0
  64. package/dist/platform/mindedRequest.d.ts +8 -0
  65. package/dist/platform/mindedRequest.js +22 -0
  66. package/dist/platform/mindedRequest.js.map +1 -0
  67. package/dist/types/Agent.types.d.ts +8 -0
  68. package/dist/types/Agent.types.js +3 -0
  69. package/dist/types/Agent.types.js.map +1 -0
  70. package/dist/types/Flows.types.d.ts +83 -0
  71. package/dist/types/Flows.types.js +24 -0
  72. package/dist/types/Flows.types.js.map +1 -0
  73. package/dist/types/LLM.types.d.ts +10 -0
  74. package/dist/types/LLM.types.js +9 -0
  75. package/dist/types/LLM.types.js.map +1 -0
  76. package/dist/types/LangGraph.types.d.ts +29 -0
  77. package/dist/types/LangGraph.types.js +20 -0
  78. package/dist/types/LangGraph.types.js.map +1 -0
  79. package/dist/types/Tools.types.d.ts +14 -0
  80. package/dist/types/Tools.types.js +3 -0
  81. package/dist/types/Tools.types.js.map +1 -0
  82. package/dist/types/Triggers.types.d.ts +1 -0
  83. package/dist/types/Triggers.types.js +3 -0
  84. package/dist/types/Triggers.types.js.map +1 -0
  85. package/docs/.gitbook/assets/image.png +0 -0
  86. package/docs/README.md +51 -0
  87. package/docs/SUMMARY.md +21 -0
  88. package/docs/api-reference/.nojekyll +1 -0
  89. package/docs/api-reference/assets/hierarchy.js +1 -0
  90. package/docs/api-reference/assets/highlight.css +120 -0
  91. package/docs/api-reference/assets/icons.js +18 -0
  92. package/docs/api-reference/assets/icons.svg +1 -0
  93. package/docs/api-reference/assets/main.js +60 -0
  94. package/docs/api-reference/assets/navigation.js +1 -0
  95. package/docs/api-reference/assets/search.js +1 -0
  96. package/docs/api-reference/assets/style.css +1640 -0
  97. package/docs/api-reference/classes/index.Agent.html +4 -0
  98. package/docs/api-reference/enums/index.EdgeType.html +4 -0
  99. package/docs/api-reference/enums/index.NodeType.html +6 -0
  100. package/docs/api-reference/enums/index.TriggerType.html +4 -0
  101. package/docs/api-reference/enums/index.events.html +3 -0
  102. package/docs/api-reference/hierarchy.html +1 -0
  103. package/docs/api-reference/index.html +310 -0
  104. package/docs/api-reference/interfaces/index.AppToolNode.html +5 -0
  105. package/docs/api-reference/interfaces/index.AppTriggerNode.html +6 -0
  106. package/docs/api-reference/interfaces/index.Flow.html +4 -0
  107. package/docs/api-reference/interfaces/index.JunctionNode.html +4 -0
  108. package/docs/api-reference/interfaces/index.LogicalConditionEdge.html +5 -0
  109. package/docs/api-reference/interfaces/index.ManualTriggerNode.html +5 -0
  110. package/docs/api-reference/interfaces/index.PromptConditionEdge.html +5 -0
  111. package/docs/api-reference/interfaces/index.PromptNode.html +6 -0
  112. package/docs/api-reference/interfaces/index.StepForwardEdge.html +4 -0
  113. package/docs/api-reference/interfaces/index.Tool.html +6 -0
  114. package/docs/api-reference/interfaces/index.ToolNode.html +5 -0
  115. package/docs/api-reference/modules/index-1.html +1 -0
  116. package/docs/api-reference/modules/index.html +1 -0
  117. package/docs/api-reference/modules.html +1 -0
  118. package/docs/api-reference/types/index.Edge.html +1 -0
  119. package/docs/api-reference/types/index.Node.html +1 -0
  120. package/docs/api-reference/types/index.TriggerNode.html +1 -0
  121. package/docs/core-concepts/edges.md +242 -0
  122. package/docs/core-concepts/events.md +161 -0
  123. package/docs/core-concepts/flows.md +74 -0
  124. package/docs/core-concepts/memory-types.md +208 -0
  125. package/docs/core-concepts/nodes.md +239 -0
  126. package/docs/core-concepts/tools.md +205 -0
  127. package/docs/examples/order-refund-flow.md +560 -0
  128. package/docs/getting-started/installation.md +34 -0
  129. package/docs/getting-started/quick-start.md +264 -0
  130. package/docs-structure.md +144 -0
  131. package/eslint.config.js +68 -0
  132. package/examples/orderRefundAgent/flows/orderRefundFlow.yaml +32 -0
  133. package/examples/orderRefundAgent/minded.json +14 -0
  134. package/examples/orderRefundAgent/orderRefundAgent.ts +58 -0
  135. package/examples/orderRefundAgent/schema.ts +7 -0
  136. package/examples/orderRefundAgent/tools/escalateConversation.ts +28 -0
  137. package/examples/orderRefundAgent/tools/index.ts +4 -0
  138. package/examples/orderRefundAgent/tools/refundOrder.ts +27 -0
  139. package/package.json +46 -0
  140. package/src/agent.ts +216 -0
  141. package/src/edges/createDirectEdge.ts +11 -0
  142. package/src/edges/createLogicalRouter.ts +16 -0
  143. package/src/edges/createPromptRouter.ts +52 -0
  144. package/src/edges/edgeFactory.ts +85 -0
  145. package/src/events/AgentEvents.ts +22 -0
  146. package/src/events/index.ts +3 -0
  147. package/src/index.ts +22 -0
  148. package/src/llm/createLlmInstance.ts +10 -0
  149. package/src/nodes/addHumanInTheLoopNode.ts +20 -0
  150. package/src/nodes/addPromptNode.ts +66 -0
  151. package/src/nodes/addToolNode.ts +95 -0
  152. package/src/nodes/addTriggerNode.ts +12 -0
  153. package/src/nodes/nodeFactory.ts +65 -0
  154. package/src/platform/analytics.ts +16 -0
  155. package/src/platform/mindedCheckpointSaver.ts +74 -0
  156. package/src/platform/mindedConnection.ts +106 -0
  157. package/src/platform/mindedConnectionTypes.ts +15 -0
  158. package/src/platform/mindedRequest.ts +28 -0
  159. package/src/types/Agent.types.ts +10 -0
  160. package/src/types/Flows.types.ts +103 -0
  161. package/src/types/LLM.types.ts +13 -0
  162. package/src/types/LangGraph.types.ts +25 -0
  163. package/src/types/Tools.types.ts +9 -0
  164. package/test/can-stay-on-node/can-stay-on-node.test.ts +148 -0
  165. package/test/can-stay-on-node/flows/test-flow.yaml +25 -0
  166. package/test/cannot-stay-on-node/cannot-stay-on-node.test.ts +201 -0
  167. package/test/cannot-stay-on-node/flows/test-flow.yaml +34 -0
  168. package/test/human-in-the-loop-node/flows/test-flow.yaml +23 -0
  169. package/test/human-in-the-loop-node/human-in-the-loop-node.test.ts +92 -0
  170. package/test/logical-edges/flows/logical-edge-test-flow.yaml +24 -0
  171. package/test/logical-edges/logical-edges.test.ts +66 -0
  172. package/test/no-human-in-the-loop-node/flows/test-flow.yaml +23 -0
  173. package/test/no-human-in-the-loop-node/no-human-in-the-loop-node.test.ts +80 -0
  174. package/test/prompt-edges/flows/test-flow.yaml +24 -0
  175. package/test/prompt-edges/prompt-edges.test.ts +90 -0
  176. package/test/prompt-node/flows/test-flow.yaml +24 -0
  177. package/test/prompt-node/prompt-node.test.ts +86 -0
  178. package/test/setup.ts +5 -0
  179. package/test/tool-node/flows/test-flow.yaml +14 -0
  180. package/test/tool-node/tool-node.test.ts +67 -0
  181. package/test/trigger/flows/test-flow.yaml +7 -0
  182. package/test/trigger/trigger.test.ts +57 -0
  183. package/tsconfig.json +17 -0
@@ -0,0 +1,34 @@
1
+ name: CI
2
+
3
+ on:
4
+ pull_request:
5
+ branches: [ main ]
6
+
7
+ jobs:
8
+ test:
9
+ runs-on: ubuntu-latest
10
+
11
+ steps:
12
+ - name: Checkout code
13
+ uses: actions/checkout@v4
14
+
15
+ - name: Use Node.js 20.x
16
+ uses: actions/setup-node@v4
17
+ with:
18
+ node-version: 20.x
19
+ cache: 'npm'
20
+
21
+ - name: Install dependencies
22
+ run: npm ci
23
+
24
+ - name: Build project
25
+ run: npm run build
26
+
27
+ - name: Run lint
28
+ run: npm run lint
29
+
30
+ - name: Run tests
31
+ run: npm test
32
+ env:
33
+ NODE_ENV: test
34
+ OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
package/.prettierrc ADDED
@@ -0,0 +1,8 @@
1
+ {
2
+ "bracketSpacing": true,
3
+ "printWidth": 140,
4
+ "singleQuote": true,
5
+ "trailingComma": "all",
6
+ "tabWidth": 2,
7
+ "useTabs": false
8
+ }
package/README.md ADDED
@@ -0,0 +1,6 @@
1
+ # MindedJS – Agent SDK
2
+
3
+ Compose, run, and extend AI-first workflows with a few lines of TypeScript.
4
+
5
+ ---
6
+ [Documentation](./docs/README.md)
@@ -0,0 +1,36 @@
1
+ import { Tool } from './types/Tools.types';
2
+ import { BaseCheckpointSaver } from '@langchain/langgraph';
3
+ import { AgentEventRequestPayloads, AgentEventResponsePayloads } from './events/AgentEvents';
4
+ import { z } from 'zod';
5
+ import { MindedSDKConfig } from './types/Agent.types';
6
+ type CreateAgentParams<Memory> = {
7
+ memorySchema: z.ZodSchema;
8
+ config: MindedSDKConfig;
9
+ tools: Tool<any, Memory>[];
10
+ platformToken?: string;
11
+ memorySaver?: BaseCheckpointSaver;
12
+ };
13
+ export declare class Agent {
14
+ private memorySchema;
15
+ private flows;
16
+ private tools;
17
+ private platformToken?;
18
+ private llm;
19
+ private mindedConnection;
20
+ private checkpointer;
21
+ private compiledGraph;
22
+ private eventHandlers;
23
+ constructor(params: CreateAgentParams<z.infer<typeof this.memorySchema>>);
24
+ private loadFlowsFromDirectory;
25
+ private validate;
26
+ private initializeGraph;
27
+ private init;
28
+ invoke({ triggerBody, triggerName, sessionId }: {
29
+ triggerBody: any;
30
+ triggerName: string;
31
+ sessionId?: string;
32
+ }): Promise<import("@langchain/langgraph").StateType<import("@langchain/langgraph").StateDefinition>>;
33
+ on<E extends keyof AgentEventRequestPayloads<z.infer<typeof this.memorySchema>>>(event: E, handler: (payload: AgentEventRequestPayloads<z.infer<typeof this.memorySchema>>[E]) => Promise<AgentEventResponsePayloads<z.infer<typeof this.memorySchema>>[E] | void>): void;
34
+ private emit;
35
+ }
36
+ export {};
package/dist/agent.js ADDED
@@ -0,0 +1,199 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.Agent = void 0;
37
+ const Flows_types_1 = require("./types/Flows.types");
38
+ const uuid_1 = require("uuid");
39
+ const langgraph_1 = require("@langchain/langgraph");
40
+ const langgraph_2 = require("@langchain/langgraph");
41
+ const nodeFactory_1 = require("./nodes/nodeFactory");
42
+ const LangGraph_types_1 = require("./types/LangGraph.types");
43
+ const edgeFactory_1 = require("./edges/edgeFactory");
44
+ const AgentEvents_1 = require("./events/AgentEvents");
45
+ const mindedConnection_1 = require("./platform/mindedConnection");
46
+ const mindedConnectionTypes_1 = require("./platform/mindedConnectionTypes");
47
+ const fs = __importStar(require("fs"));
48
+ const path = __importStar(require("path"));
49
+ const yaml = __importStar(require("js-yaml"));
50
+ const createLlmInstance_1 = require("./llm/createLlmInstance");
51
+ const dotenv_1 = require("dotenv");
52
+ const path_1 = require("path");
53
+ (0, dotenv_1.config)({ path: (0, path_1.resolve)(__dirname, '../.env') });
54
+ class Agent {
55
+ constructor(params) {
56
+ this.mindedConnection = null;
57
+ // Event handlers storage keyed by event name. Handlers can optionally return a value.
58
+ this.eventHandlers = {};
59
+ const { config, tools, platformToken, memorySaver, memorySchema } = params;
60
+ this.memorySchema = memorySchema;
61
+ this.flows = this.loadFlowsFromDirectory(config.flows);
62
+ this.tools = tools;
63
+ this.platformToken = platformToken;
64
+ this.llm = (0, createLlmInstance_1.createLlmInstance)(config.llm);
65
+ this.checkpointer = memorySaver || new langgraph_2.MemorySaver();
66
+ this.validate();
67
+ this.compiledGraph = this.initializeGraph();
68
+ if (process.env.NODE_ENV !== 'test' && process.env.NO_PLATFORM_CONNECT !== 'true') {
69
+ this.mindedConnection = new mindedConnection_1.MindedConnection();
70
+ this.mindedConnection.start();
71
+ this.mindedConnection.on(mindedConnectionTypes_1.MindedConnectionSocketMessageType.OnAppTrigger, (trigger) => {
72
+ console.log('Received trigger:', trigger);
73
+ });
74
+ }
75
+ }
76
+ loadFlowsFromDirectory(flowsDirectories) {
77
+ const flows = [];
78
+ for (const flowsDirectory of flowsDirectories) {
79
+ if (!fs.existsSync(flowsDirectory)) {
80
+ throw new Error(`Flows directory does not exist: ${flowsDirectory}`);
81
+ }
82
+ const files = fs.readdirSync(flowsDirectory);
83
+ for (const file of files) {
84
+ if (file.endsWith('.yaml') || file.endsWith('.yml')) {
85
+ const filePath = path.join(flowsDirectory, file);
86
+ try {
87
+ const fileContent = fs.readFileSync(filePath, 'utf8');
88
+ const parsedFlow = yaml.load(fileContent);
89
+ // Validate that the parsed flow has the required structure
90
+ if (!parsedFlow.name || !parsedFlow.nodes || !parsedFlow.edges) {
91
+ throw new Error(`Invalid flow structure in ${file}. Flow must have name, nodes, and edges.`);
92
+ }
93
+ flows.push(parsedFlow);
94
+ }
95
+ catch (error) {
96
+ throw new Error(`Failed to parse flow file ${file}: ${error}`);
97
+ }
98
+ }
99
+ }
100
+ if (flows.length === 0) {
101
+ throw new Error(`No YAML flow files found in directory: ${flowsDirectory}`);
102
+ }
103
+ }
104
+ return flows;
105
+ }
106
+ validate() {
107
+ if (this.flows.length === 0) {
108
+ throw new Error('No flows provided');
109
+ }
110
+ }
111
+ initializeGraph() {
112
+ const nodes = this.flows.flatMap((flow) => flow.nodes);
113
+ const edges = this.flows.flatMap((flow) => flow.edges);
114
+ // Initialize the graph
115
+ const graph = new langgraph_1.StateGraph(LangGraph_types_1.stateAnnotation).addNode('init', this.init.bind(this)).addEdge('__start__', 'init');
116
+ // Add nodes and create nodes object
117
+ const nodesObject = {};
118
+ nodes.forEach((node) => {
119
+ // Add to nodes object
120
+ nodesObject[node.name] = node;
121
+ // Add to graph
122
+ (0, nodeFactory_1.nodeFactory)({
123
+ graph,
124
+ node,
125
+ tools: this.tools,
126
+ llm: this.llm,
127
+ emit: this.emit.bind(this),
128
+ });
129
+ });
130
+ // Add edges
131
+ (0, edgeFactory_1.edgeFactory)({ graph, edges, nodes: nodesObject, llm: this.llm });
132
+ nodes.forEach((node) => {
133
+ if (node.type === Flows_types_1.NodeType.TRIGGER) {
134
+ graph.addEdge('__start__', node.name);
135
+ }
136
+ });
137
+ // Compile the graph
138
+ return graph.compile({ checkpointer: this.checkpointer });
139
+ }
140
+ init() {
141
+ return {
142
+ messages: [],
143
+ memory: {},
144
+ triggerMetadata: null,
145
+ interruptedNode: null,
146
+ };
147
+ }
148
+ async invoke({ triggerBody, triggerName, sessionId }) {
149
+ var _a, _b, _c, _d;
150
+ const session = sessionId || (0, uuid_1.v4)();
151
+ const results = await this.emit(AgentEvents_1.AgentEvents.TRIGGER_EVENT, {
152
+ triggerName,
153
+ triggerBody,
154
+ });
155
+ const handlerResult = results.find((r) => r !== undefined);
156
+ if (handlerResult === false) {
157
+ console.log(`Disqualified trigger ${triggerName}`);
158
+ throw new Error('Disqualified trigger');
159
+ }
160
+ const memoryUpdate = (handlerResult === null || handlerResult === void 0 ? void 0 : handlerResult.memory) || {};
161
+ const messages = (_a = handlerResult === null || handlerResult === void 0 ? void 0 : handlerResult.messages) !== null && _a !== void 0 ? _a : [];
162
+ console.log(`Invoking trigger ${triggerName} with session ${session}`);
163
+ const config = { configurable: { thread_id: session, recursionLimit: 3 } };
164
+ const triggerNode = this.compiledGraph.builder.nodes[triggerName];
165
+ if (!triggerNode) {
166
+ throw new Error(`Trigger node not found: ${triggerName}`);
167
+ }
168
+ const state = await this.compiledGraph.getState(config);
169
+ // Resume interruption
170
+ if (((_d = (_c = (_b = state.tasks) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.interrupts) === null || _d === void 0 ? void 0 : _d.length) > 0) {
171
+ const res = await this.compiledGraph.invoke(new langgraph_1.Command({
172
+ resume: { memory: memoryUpdate, messages },
173
+ }), config);
174
+ return res;
175
+ }
176
+ else {
177
+ const res = await this.compiledGraph.invoke({ messages, memory: memoryUpdate }, config);
178
+ return res;
179
+ }
180
+ }
181
+ // Public API for registering event listeners
182
+ on(event, handler) {
183
+ if (!this.eventHandlers[event]) {
184
+ this.eventHandlers[event] = [];
185
+ }
186
+ // We can safely cast here since we ensured the array exists
187
+ this.eventHandlers[event].push(handler);
188
+ }
189
+ // Internal method to emit events to the registered listeners
190
+ async emit(event, payload) {
191
+ if (!this.eventHandlers[event]) {
192
+ return [];
193
+ }
194
+ const results = await Promise.all(this.eventHandlers[event].map(async (handler) => handler(payload)));
195
+ return results;
196
+ }
197
+ }
198
+ exports.Agent = Agent;
199
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare const analyticsFactory: ({ token, sessionId }: {
2
+ token: string;
3
+ sessionId: string;
4
+ }) => {
5
+ track: <T>(event: string, data: T) => Promise<void>;
6
+ };
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.analyticsFactory = void 0;
4
+ const mindedRequest_1 = require("./infrastructure.ts/mindedRequest");
5
+ const track = async ({ event, data, token, sessionId }) => {
6
+ await (0, mindedRequest_1.mindedRequest)({
7
+ path: '/analytics/events',
8
+ method: 'POST',
9
+ body: { event, data, sessionId },
10
+ token
11
+ });
12
+ };
13
+ const analyticsFactory = ({ token, sessionId }) => {
14
+ return {
15
+ track: (event, data) => track({ event, data, token, sessionId })
16
+ };
17
+ };
18
+ exports.analyticsFactory = analyticsFactory;
19
+ //# sourceMappingURL=analytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics.js","sourceRoot":"","sources":["../src/analytics.ts"],"names":[],"mappings":";;;AAAA,qEAAkE;AAElE,MAAM,KAAK,GAAG,KAAK,EAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAgE,EAAE,EAAE;IACzH,MAAM,IAAA,6BAAa,EAAC;QAClB,IAAI,EAAE,mBAAmB;QACzB,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE;QAChC,KAAK;KACN,CAAC,CAAC;AACL,CAAC,CAAA;AAEM,MAAM,gBAAgB,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,EAAwC,EAAE,EAAE;IAC7F,OAAO;QACL,KAAK,EAAE,CAAI,KAAa,EAAE,IAAO,EAAE,EAAE,CAAC,KAAK,CAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;KAClF,CAAA;AACH,CAAC,CAAA;AAJY,QAAA,gBAAgB,oBAI5B"}
@@ -0,0 +1,4 @@
1
+ import { StepForwardEdge } from '../types/Flows.types';
2
+ export declare const createDirectEdge: ({ edges }: {
3
+ edges: StepForwardEdge[];
4
+ }) => () => Promise<string>;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createDirectEdge = void 0;
4
+ const createDirectEdge = ({ edges }) => {
5
+ return async () => {
6
+ // For direct edges, we just return the target of the first edge
7
+ // since there's no conditional logic needed
8
+ const edge = edges[0];
9
+ console.log(`Executing edge ${JSON.stringify(edge)}`);
10
+ return edge.target;
11
+ };
12
+ };
13
+ exports.createDirectEdge = createDirectEdge;
14
+ //# sourceMappingURL=createDirectEdge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createDirectEdge.js","sourceRoot":"","sources":["../../src/edges/createDirectEdge.ts"],"names":[],"mappings":";;;AAEO,MAAM,gBAAgB,GAAG,CAAC,EAAE,KAAK,EAAgC,EAAE,EAAE;IAC1E,OAAO,KAAK,IAAI,EAAE;QAChB,gEAAgE;QAChE,4CAA4C;QAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC,CAAC;AACJ,CAAC,CAAC;AARW,QAAA,gBAAgB,oBAQ3B"}
@@ -0,0 +1,5 @@
1
+ import { LogicalConditionEdge } from '../types/Flows.types';
2
+ import { stateAnnotation } from '../types/LangGraph.types';
3
+ export declare const createLogicalRouter: ({ edges }: {
4
+ edges: LogicalConditionEdge[];
5
+ }) => (state: typeof stateAnnotation.State) => Promise<string>;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createLogicalRouter = void 0;
4
+ const createLogicalRouter = ({ edges }) => {
5
+ return async (state) => {
6
+ console.log(`Executing logical router. Edges: ${JSON.stringify(edges)}`);
7
+ for (const edge of edges) {
8
+ const conditionFn = eval(edge.condition);
9
+ const result = await conditionFn({ memory: state.memory });
10
+ if (result) {
11
+ return edge.target;
12
+ }
13
+ }
14
+ return edges[0].source;
15
+ };
16
+ };
17
+ exports.createLogicalRouter = createLogicalRouter;
18
+ //# sourceMappingURL=createLogicalRouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createLogicalRouter.js","sourceRoot":"","sources":["../../src/edges/createLogicalRouter.ts"],"names":[],"mappings":";;;AAGO,MAAM,mBAAmB,GAAG,CAAC,EAAE,KAAK,EAAqC,EAAE,EAAE;IAClF,OAAO,KAAK,EAAE,KAAmC,EAAE,EAAE;QACnD,OAAO,CAAC,GAAG,CAAC,oCAAoC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACzE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACzC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YAC3D,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,IAAI,CAAC,MAAM,CAAC;YACrB,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACzB,CAAC,CAAC;AACJ,CAAC,CAAC;AAZW,QAAA,mBAAmB,uBAY9B"}
@@ -0,0 +1,7 @@
1
+ import { PromptConditionEdge } from '../types/Flows.types';
2
+ import { BaseLanguageModel } from '@langchain/core/language_models/base';
3
+ import { stateAnnotation } from '../types/LangGraph.types';
4
+ export declare const createPromptRouter: ({ edges, llm }: {
5
+ edges: PromptConditionEdge[];
6
+ llm: BaseLanguageModel;
7
+ }) => (state: typeof stateAnnotation.State) => Promise<string>;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createPromptRouter = void 0;
4
+ const prebuilt_1 = require("@langchain/langgraph/prebuilt");
5
+ const zod_1 = require("zod");
6
+ const messages_1 = require("@langchain/core/messages");
7
+ const createPromptRouter = ({ edges, llm }) => {
8
+ const agent = (0, prebuilt_1.createReactAgent)({
9
+ llm,
10
+ tools: [],
11
+ responseFormat: zod_1.z.object({
12
+ nextNodeId: zod_1.z.string(),
13
+ reasoning: zod_1.z.string(),
14
+ }),
15
+ });
16
+ return async (state) => {
17
+ console.log(`Executing prompt router. Edges: ${JSON.stringify(edges)}`);
18
+ const result = await agent.invoke({
19
+ messages: [
20
+ new messages_1.AIMessage({
21
+ content: `You are a router that decides which node to take in a flow based on the current memory state, history and available node ids.
22
+
23
+ Your task is to analyze the current memory state, history and available nodes and determine the most appropriate next node in the flow, the returned nodeId should be only the id without the prompt.
24
+
25
+
26
+ Available nodes in the format of {nodeId}: {prompt}:
27
+ ${edges.map((edge) => `- ${edge.target}: ${edge.prompt}`).join('\n')}
28
+
29
+ Current memory state:
30
+ ${JSON.stringify(state.memory)}
31
+
32
+ Previous messages:
33
+ ${JSON.stringify(state.messages)}
34
+
35
+ Based on the memory state and available nodes, determine the most appropriate next node id.
36
+ `,
37
+ }),
38
+ ],
39
+ });
40
+ try {
41
+ const nextNode = result.structuredResponse.nextNodeId;
42
+ console.log(`Next node: ${nextNode}`);
43
+ if (!nextNode) {
44
+ throw new Error('No next node id returned from router');
45
+ }
46
+ return nextNode;
47
+ }
48
+ catch (e) {
49
+ throw new Error(`Failed to parse router response: ${result.structuredResponse}; Error: ${e.message}`);
50
+ }
51
+ };
52
+ };
53
+ exports.createPromptRouter = createPromptRouter;
54
+ //# sourceMappingURL=createPromptRouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createPromptRouter.js","sourceRoot":"","sources":["../../src/edges/createPromptRouter.ts"],"names":[],"mappings":";;;AAAA,4DAAiE;AACjE,6BAAwB;AAGxB,uDAAqD;AAG9C,MAAM,kBAAkB,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAA4D,EAAE,EAAE;IAC7G,MAAM,KAAK,GAAG,IAAA,2BAAgB,EAAC;QAC7B,GAAG;QACH,KAAK,EAAE,EAAE;QACT,cAAc,EAAE,OAAC,CAAC,MAAM,CAAC;YACvB,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE;YACtB,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE;SACtB,CAAC;KACH,CAAC,CAAC;IACH,OAAO,KAAK,EAAE,KAAmC,EAAE,EAAE;QACnD,OAAO,CAAC,GAAG,CAAC,mCAAmC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC;YAChC,QAAQ,EAAE;gBACR,IAAI,oBAAS,CAAC;oBACZ,OAAO,EAAE;;;;;;EAMjB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;EAGlE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;;;EAG5B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC;;;OAGzB;iBACE,CAAC;aACH;SACF,CAAC,CAAC;QACH,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,cAAc,QAAQ,EAAE,CAAC,CAAC;YACtC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAC1D,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,oCAAoC,MAAM,CAAC,kBAAkB,YAAY,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACxG,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AA5CW,QAAA,kBAAkB,sBA4C7B"}
@@ -0,0 +1,9 @@
1
+ import { Edge, Node } from '../types/Flows.types';
2
+ import { PreCompiledGraph } from '../types/LangGraph.types';
3
+ import { BaseLanguageModel } from '@langchain/core/language_models/base';
4
+ export declare const edgeFactory: ({ graph, edges, nodes, llm, }: {
5
+ graph: PreCompiledGraph;
6
+ edges: Edge[];
7
+ nodes: Record<string, Node>;
8
+ llm: BaseLanguageModel;
9
+ }) => void;
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.edgeFactory = void 0;
4
+ const Flows_types_1 = require("../types/Flows.types");
5
+ const createPromptRouter_1 = require("./createPromptRouter");
6
+ const createLogicalRouter_1 = require("./createLogicalRouter");
7
+ const createDirectEdge_1 = require("./createDirectEdge");
8
+ const addHumanInTheLoopNode_1 = require("../nodes/addHumanInTheLoopNode");
9
+ const edgeFactory = ({ graph, edges, nodes, llm, }) => {
10
+ /**
11
+ * Processes edges with enhanced node capabilities (humanInTheLoop, canStayOnNode)
12
+ * This elegant abstraction handles both prompt and logical edges uniformly
13
+ */
14
+ const processEdges = (edgeProcessor) => {
15
+ const { edges: filteredEdges, router } = edgeProcessor;
16
+ const uniqueSources = [...new Set(filteredEdges.map((edge) => edge.source))];
17
+ uniqueSources.forEach((source) => {
18
+ var _a, _b;
19
+ const edgesForSource = [...filteredEdges.filter((edge) => edge.source === source)];
20
+ let effectiveSource = source;
21
+ // Handle human-in-the-loop enhancement
22
+ if ((_a = nodes[source]) === null || _a === void 0 ? void 0 : _a.humanInTheLoop) {
23
+ (0, addHumanInTheLoopNode_1.addHumanInTheLoopNode)({ graph, attachedToNodeName: source });
24
+ effectiveSource = (0, addHumanInTheLoopNode_1.buildHumanInTheLoopNodeName)(source);
25
+ }
26
+ // Handle stay-on-node capability
27
+ if ((_b = nodes[source]) === null || _b === void 0 ? void 0 : _b.canStayOnNode) {
28
+ const stayEdge = {
29
+ source,
30
+ target: source,
31
+ type: Flows_types_1.EdgeType.PROMPT_CONDITION,
32
+ prompt: 'stay at current node if still relevant',
33
+ };
34
+ edgesForSource.push(stayEdge);
35
+ }
36
+ graph.addConditionalEdges(effectiveSource, router({ edges: edgesForSource, llm }));
37
+ });
38
+ };
39
+ // Direct edges - simple and straightforward
40
+ const directEdges = edges.filter((edge) => edge.type === Flows_types_1.EdgeType.STEP_FORWARD);
41
+ if (directEdges.length > 0) {
42
+ processEdges({
43
+ edges: directEdges,
44
+ router: createDirectEdge_1.createDirectEdge,
45
+ });
46
+ }
47
+ // Prompt condition edges - enhanced with AI-driven routing
48
+ const promptEdges = edges.filter((edge) => edge.type === Flows_types_1.EdgeType.PROMPT_CONDITION);
49
+ if (promptEdges.length > 0) {
50
+ processEdges({
51
+ edges: promptEdges,
52
+ router: createPromptRouter_1.createPromptRouter,
53
+ });
54
+ }
55
+ // Logical condition edges - enhanced with programmatic routing
56
+ const logicalEdges = edges.filter((edge) => edge.type === Flows_types_1.EdgeType.LOGICAL_CONDITION);
57
+ if (logicalEdges.length > 0) {
58
+ processEdges({
59
+ edges: logicalEdges,
60
+ router: createLogicalRouter_1.createLogicalRouter,
61
+ });
62
+ }
63
+ };
64
+ exports.edgeFactory = edgeFactory;
65
+ //# sourceMappingURL=edgeFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edgeFactory.js","sourceRoot":"","sources":["../../src/edges/edgeFactory.ts"],"names":[],"mappings":";;;AAAA,sDAAwH;AAGxH,6DAA0D;AAC1D,+DAA4D;AAC5D,yDAAsD;AACtD,0EAAoG;AAO7F,MAAM,WAAW,GAAG,CAAC,EAC1B,KAAK,EACL,KAAK,EACL,KAAK,EACL,GAAG,GAMJ,EAAE,EAAE;IACH;;;OAGG;IACH,MAAM,YAAY,GAAG,CAAiB,aAA+B,EAAQ,EAAE;QAC7E,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC;QACvD,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAE7E,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;;YAC/B,MAAM,cAAc,GAAQ,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC;YACxF,IAAI,eAAe,GAAG,MAAM,CAAC;YAE7B,uCAAuC;YACvC,IAAI,MAAA,KAAK,CAAC,MAAM,CAAC,0CAAE,cAAc,EAAE,CAAC;gBAClC,IAAA,6CAAqB,EAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC7D,eAAe,GAAG,IAAA,mDAA2B,EAAC,MAAM,CAAC,CAAC;YACxD,CAAC;YAED,iCAAiC;YACjC,IAAI,MAAA,KAAK,CAAC,MAAM,CAAC,0CAAE,aAAa,EAAE,CAAC;gBACjC,MAAM,QAAQ,GAAG;oBACf,MAAM;oBACN,MAAM,EAAE,MAAM;oBACd,IAAI,EAAE,sBAAQ,CAAC,gBAAgB;oBAC/B,MAAM,EAAE,wCAAwC;iBAC5C,CAAC;gBAEP,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAChC,CAAC;YAED,KAAK,CAAC,mBAAmB,CAAC,eAAsB,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAC5F,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,4CAA4C;IAC5C,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,sBAAQ,CAAC,YAAY,CAAsB,CAAC;IACrG,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,YAAY,CAAC;YACX,KAAK,EAAE,WAAW;YAClB,MAAM,EAAE,mCAAgB;SACzB,CAAC,CAAC;IACL,CAAC;IAED,2DAA2D;IAC3D,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,sBAAQ,CAAC,gBAAgB,CAA0B,CAAC;IAC7G,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,YAAY,CAAC;YACX,KAAK,EAAE,WAAW;YAClB,MAAM,EAAE,uCAAkB;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,+DAA+D;IAC/D,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,sBAAQ,CAAC,iBAAiB,CAA2B,CAAC;IAChH,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,YAAY,CAAC;YACX,KAAK,EAAE,YAAY;YACnB,MAAM,EAAE,yCAAmB;SAC5B,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC;AAvEW,QAAA,WAAW,eAuEtB"}
@@ -0,0 +1,22 @@
1
+ import { BaseMessage } from '@langchain/core/messages';
2
+ export declare enum AgentEvents {
3
+ AI_MESSAGE = "AI_MESSAGE",
4
+ TRIGGER_EVENT = "TRIGGER_EVENT"
5
+ }
6
+ export type AgentEventRequestPayloads<Memory> = {
7
+ [AgentEvents.AI_MESSAGE]: {
8
+ message: string;
9
+ memory: Memory;
10
+ };
11
+ [AgentEvents.TRIGGER_EVENT]: {
12
+ triggerName: string;
13
+ triggerBody: any;
14
+ };
15
+ };
16
+ export type AgentEventResponsePayloads<Memory> = {
17
+ [AgentEvents.AI_MESSAGE]: void;
18
+ [AgentEvents.TRIGGER_EVENT]: {
19
+ messages?: BaseMessage[];
20
+ memory?: Memory;
21
+ } | false;
22
+ };
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AgentEvents = void 0;
4
+ var AgentEvents;
5
+ (function (AgentEvents) {
6
+ AgentEvents["AI_MESSAGE"] = "AI_MESSAGE";
7
+ AgentEvents["TRIGGER_EVENT"] = "TRIGGER_EVENT";
8
+ })(AgentEvents || (exports.AgentEvents = AgentEvents = {}));
9
+ //# sourceMappingURL=AgentEvents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentEvents.js","sourceRoot":"","sources":["../../src/events/AgentEvents.ts"],"names":[],"mappings":";;;AAEA,IAAY,WAGX;AAHD,WAAY,WAAW;IACrB,wCAAyB,CAAA;IACzB,8CAA+B,CAAA;AACjC,CAAC,EAHW,WAAW,2BAAX,WAAW,QAGtB"}
@@ -0,0 +1,2 @@
1
+ import { AgentEvents } from './AgentEvents';
2
+ export default AgentEvents;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const AgentEvents_1 = require("./AgentEvents");
4
+ exports.default = AgentEvents_1.AgentEvents;
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/events/index.ts"],"names":[],"mappings":";;AAAA,+CAA4C;AAE5C,kBAAe,yBAAW,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { Agent } from './agent';
2
+ import events from './events';
3
+ export { Agent, events };
4
+ export type { Flow, Node, Edge, TriggerNode, AppTriggerNode, PromptNode, PromptConditionEdge, LogicalConditionEdge, StepForwardEdge, ManualTriggerNode, JunctionNode, ToolNode, AppToolNode, } from './types/Flows.types';
5
+ export { NodeType, TriggerType, EdgeType } from './types/Flows.types';
6
+ export type { Tool } from './types/Tools.types';
package/dist/index.js ADDED
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.EdgeType = exports.TriggerType = exports.NodeType = exports.events = exports.Agent = void 0;
7
+ const agent_1 = require("./agent");
8
+ Object.defineProperty(exports, "Agent", { enumerable: true, get: function () { return agent_1.Agent; } });
9
+ const events_1 = __importDefault(require("./events"));
10
+ exports.events = events_1.default;
11
+ var Flows_types_1 = require("./types/Flows.types");
12
+ Object.defineProperty(exports, "NodeType", { enumerable: true, get: function () { return Flows_types_1.NodeType; } });
13
+ Object.defineProperty(exports, "TriggerType", { enumerable: true, get: function () { return Flows_types_1.TriggerType; } });
14
+ Object.defineProperty(exports, "EdgeType", { enumerable: true, get: function () { return Flows_types_1.EdgeType; } });
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,mCAAgC;AAGvB,sFAHA,aAAK,OAGA;AAFd,sDAA8B;AAEd,iBAFT,gBAAM,CAES;AAiBtB,mDAAsE;AAA7D,uGAAA,QAAQ,OAAA;AAAE,0GAAA,WAAW,OAAA;AAAE,uGAAA,QAAQ,OAAA"}
@@ -0,0 +1,8 @@
1
+ type Method = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
2
+ export declare const mindedRequest: <Response, Request = object>({ path, method, body, token }: {
3
+ path: string;
4
+ method: Method;
5
+ body: Request;
6
+ token: string;
7
+ }) => Promise<Response>;
8
+ export {};