@eko-ai/eko 4.0.9 → 4.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/agent/eko.d.ts.map +1 -1
  2. package/dist/chat/chat-agent.d.ts +2 -2
  3. package/dist/chat/chat-agent.d.ts.map +1 -1
  4. package/dist/chat/index.d.ts +2 -1
  5. package/dist/chat/index.d.ts.map +1 -1
  6. package/dist/chat/tools/deep-action.d.ts.map +1 -1
  7. package/dist/config/index.d.ts.map +1 -1
  8. package/dist/{index.cjs.js → index.cjs} +208 -21
  9. package/dist/index.cjs.map +1 -0
  10. package/dist/index.d.ts +2 -2
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.esm.js +197 -11
  13. package/dist/index.esm.js.map +1 -1
  14. package/dist/service/chat-service.d.ts +2 -2
  15. package/dist/service/chat-service.d.ts.map +1 -1
  16. package/dist/service/workflow-logs-service.d.ts +8 -0
  17. package/dist/service/workflow-logs-service.d.ts.map +1 -0
  18. package/dist/service/workflow-service.d.ts +4 -0
  19. package/dist/service/workflow-service.d.ts.map +1 -0
  20. package/dist/types/agent.types.d.ts +4 -0
  21. package/dist/types/agent.types.d.ts.map +1 -1
  22. package/dist/types/chat.types.d.ts +2 -1
  23. package/dist/types/chat.types.d.ts.map +1 -1
  24. package/dist/types/config.types.d.ts +1 -0
  25. package/dist/types/config.types.d.ts.map +1 -1
  26. package/dist/types/index.d.ts +1 -1
  27. package/dist/types/index.d.ts.map +1 -1
  28. package/dist/types/index.js +14 -0
  29. package/dist/types/index.js.map +1 -0
  30. package/dist/types/service.types.d.ts +1 -1
  31. package/dist/types/service.types.d.ts.map +1 -1
  32. package/dist/types/workflow-logs.types.d.ts +42 -0
  33. package/dist/types/workflow-logs.types.d.ts.map +1 -0
  34. package/package.json +7 -6
  35. package/dist/index.cjs.js.map +0 -1
  36. package/dist/prompt/prompt_template.d.ts +0 -30
  37. package/dist/prompt/prompt_template.d.ts.map +0 -1
package/dist/index.d.ts CHANGED
@@ -10,14 +10,14 @@ import TaskContext, { AgentContext } from "./agent/agent-context";
10
10
  import { RetryLanguageModel, callLLM, callWithReAct } from "./llm";
11
11
  export default Eko;
12
12
  export { Eko, EkoMemory, Log, config, global, Chain, Planner, AgentChain, TaskContext, AgentContext, SimpleSseMcpClient, SimpleHttpMcpClient, RetryLanguageModel, TaskContext as Context, callLLM, callWithReAct, };
13
- export { ChatAgent, ChatContext, WebSearchTool, WebpageQaTool, DeepActionTool, TaskVariableStorageTool, } from "./chat";
13
+ export { ChatAgent, ChatContext, AgentWrapTool, WebSearchTool, WebpageQaTool, DeepActionTool, TaskVariableStorageTool, } from "./chat";
14
14
  export { Agent, type AgentParams, BaseBrowserAgent, BaseBrowserLabelsAgent, BaseBrowserScreenAgent, } from "./agent";
15
15
  export { ForeachTaskTool, WatchTriggerTool, HumanInteractTool, TaskNodeStatusTool, VariableStorageTool, } from "./tools";
16
16
  export type { ChatService, BrowserService } from "./service";
17
- export { type LLMs, type LLMRequest, type HumanCallback, type Workflow, type EkoConfig, type WorkflowNode, type WorkflowAgent, type AgentStreamMessage, type AgentStreamCallback, type AgentStreamCallback as StreamCallback, type AgentStreamMessage as StreamCallbackMessage, } from "./types";
18
17
  export { sub, uuidv4, toFile, toImage, mergeTools, call_timeout, compressImageData, convertToolSchema, } from "./common/utils";
19
18
  export { parseWorkflow, resetWorkflowXml, buildSimpleAgentWorkflow, } from "./common/xml";
20
19
  export { buildAgentTree } from "./common/tree";
21
20
  export { PromptTemplate } from "./prompt/prompt-template";
22
21
  export { extract_page_content } from "./agent/browser/utils";
22
+ export * from "./types";
23
23
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,OAAO,GAAG,MAAM,cAAc,CAAC;AAC/B,OAAO,GAAG,MAAM,eAAe,CAAC;AAChC,OAAO,MAAM,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,WAAW,EAAE,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEnE,eAAe,GAAG,CAAC;AAEnB,OAAO,EACL,GAAG,EACH,SAAS,EACT,GAAG,EACH,MAAM,EACN,MAAM,EACN,KAAK,EACL,OAAO,EACP,UAAU,EACV,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,IAAI,OAAO,EACtB,OAAO,EACP,aAAa,GACd,CAAC;AAEF,OAAO,EACL,SAAS,EACT,WAAW,EACX,aAAa,EACb,aAAa,EACb,cAAc,EACd,uBAAuB,GACxB,MAAM,QAAQ,CAAC;AAEhB,OAAO,EACL,KAAK,EACL,KAAK,WAAW,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,SAAS,CAAC;AAEjB,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE7D,OAAO,EACL,KAAK,IAAI,EACT,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,IAAI,cAAc,EAC1C,KAAK,kBAAkB,IAAI,qBAAqB,GACjD,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,GAAG,EACH,MAAM,EACN,MAAM,EACN,OAAO,EACP,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,OAAO,GAAG,MAAM,cAAc,CAAC;AAC/B,OAAO,GAAG,MAAM,eAAe,CAAC;AAChC,OAAO,MAAM,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,WAAW,EAAE,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEnE,eAAe,GAAG,CAAC;AAEnB,OAAO,EACL,GAAG,EACH,SAAS,EACT,GAAG,EACH,MAAM,EACN,MAAM,EACN,KAAK,EACL,OAAO,EACP,UAAU,EACV,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,WAAW,IAAI,OAAO,EACtB,OAAO,EACP,aAAa,GACd,CAAC;AAEF,OAAO,EACL,SAAS,EACT,WAAW,EACX,aAAa,EACb,aAAa,EACb,aAAa,EACb,cAAc,EACd,uBAAuB,GACxB,MAAM,QAAQ,CAAC;AAEhB,OAAO,EACL,KAAK,EACL,KAAK,WAAW,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,SAAS,CAAC;AAEjB,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE7D,OAAO,EACL,GAAG,EACH,MAAM,EACN,MAAM,EACN,OAAO,EACP,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D,cAAc,SAAS,CAAC"}
package/dist/index.esm.js CHANGED
@@ -6,6 +6,7 @@ const config$1 = {
6
6
  maxOutputTokens: 16000,
7
7
  maxRetryNum: 3,
8
8
  agentParallel: false,
9
+ workflowConfirm: false,
9
10
  compressThreshold: 80,
10
11
  compressTokensThreshold: 80000,
11
12
  largeTextLength: 8000,
@@ -43182,7 +43183,7 @@ class EkoMemory {
43182
43183
  this.memoryConfig = memoryConfig;
43183
43184
  }
43184
43185
  genMessageId() {
43185
- return uuidv4();
43186
+ return "msg-" + uuidv4();
43186
43187
  }
43187
43188
  async import(data) {
43188
43189
  this.messages = [...data.messages];
@@ -44263,10 +44264,10 @@ class DeepActionTool {
44263
44264
  const taskDescription = args.taskDescription;
44264
44265
  const tabIds = args.tabIds;
44265
44266
  const dependentVariables = args.dependentVariables;
44266
- const config = this.chatContext.getConfig();
44267
+ const chatConfig = this.chatContext.getConfig();
44267
44268
  const globalVariables = this.chatContext.getGlobalVariables();
44268
44269
  const eko = new Eko({
44269
- ...config,
44270
+ ...chatConfig,
44270
44271
  callback: this.params.callback?.taskCallback,
44271
44272
  }, chatId);
44272
44273
  this.chatContext.addEko(messageId, eko);
@@ -44282,7 +44283,7 @@ class DeepActionTool {
44282
44283
  }
44283
44284
  const attachments = this.params.user
44284
44285
  .filter((part) => part.type === "file")
44285
- .filter((part) => part.data && part.data.length < 500)
44286
+ .filter((part) => part.data && part.data.length < 1000)
44286
44287
  .map((part) => {
44287
44288
  return {
44288
44289
  file_name: part.filename,
@@ -44302,7 +44303,30 @@ class DeepActionTool {
44302
44303
  datetime: this.params.datetime || new Date().toLocaleString(),
44303
44304
  });
44304
44305
  const context = eko.getTask(messageId);
44305
- console.log("==> workflow", workflow);
44306
+ Log.info("==> workflow", workflow);
44307
+ if (config$1.workflowConfirm && this.params.callback?.taskCallback) {
44308
+ const result = await new Promise((resolve) => {
44309
+ this.params.callback.taskCallback?.onMessage({
44310
+ streamType: "agent",
44311
+ chatId: context.chatId,
44312
+ taskId: context.taskId,
44313
+ agentName: "",
44314
+ type: "workflow_confirm",
44315
+ workflow: workflow,
44316
+ resolve,
44317
+ });
44318
+ });
44319
+ if (result == "cancel") {
44320
+ return {
44321
+ content: [
44322
+ {
44323
+ type: "text",
44324
+ text: "User has canceled the execution.",
44325
+ },
44326
+ ],
44327
+ };
44328
+ }
44329
+ }
44306
44330
  const result = await eko.execute(messageId);
44307
44331
  const variableNames = [];
44308
44332
  if (context.variables && context.variables.size > 0) {
@@ -44507,16 +44531,14 @@ function getTabsInfo(tabs) {
44507
44531
  }
44508
44532
 
44509
44533
  class ChatAgent {
44510
- constructor(config, chatId = uuidv4(), memory, tools) {
44534
+ constructor(config, chatId = "chat-" + uuidv4(), memory, tools) {
44535
+ this.maxReactLoopNum = 15;
44511
44536
  this.tools = tools ?? [];
44512
44537
  this.memory = memory ?? new EkoMemory();
44513
44538
  this.chatContext = new ChatContext(chatId, config);
44514
44539
  global.chatMap.set(chatId, this.chatContext);
44515
44540
  }
44516
44541
  async chat(params) {
44517
- return this.doChat(params, false);
44518
- }
44519
- async doChat(params, segmentedExecution) {
44520
44542
  const runStartTime = Date.now();
44521
44543
  let reactLoopNum = 0;
44522
44544
  let errorInfo = null;
@@ -44534,7 +44556,7 @@ class ChatAgent {
44534
44556
  await this.addUserMessage(params.messageId, params.user);
44535
44557
  const config = this.chatContext.getConfig();
44536
44558
  const rlm = new RetryLanguageModel(config.llms, config.chatLlms);
44537
- for (; reactLoopNum < 15; reactLoopNum++) {
44559
+ for (; reactLoopNum < this.maxReactLoopNum; reactLoopNum++) {
44538
44560
  const messages = this.memory.buildMessages();
44539
44561
  const results = await callChatLLM(this.chatContext.getChatId(), params.messageId, rlm, messages, convertTools(chatTools), undefined, params.callback, params.signal);
44540
44562
  const finalResult = await this.handleCallResult(params.messageId, chatTools, results, params.callback);
@@ -44729,5 +44751,169 @@ class ChatAgent {
44729
44751
  }
44730
44752
  }
44731
44753
 
44732
- export { Agent, AgentChain, AgentContext, BaseBrowserAgent, BaseBrowserLabelsAgent, BaseBrowserScreenAgent, Chain, ChatAgent, ChatContext, TaskContext as Context, DeepActionTool, Eko, EkoMemory, ForeachTaskTool, HumanInteractTool, Log, Planner, PromptTemplate, RetryLanguageModel, SimpleHttpMcpClient, SimpleSseMcpClient, TaskContext, TaskNodeStatusTool, TaskVariableStorageTool, VariableStorageTool, WatchTriggerTool, WebSearchTool, WebpageQaTool, buildAgentTree, buildSimpleAgentWorkflow, callLLM, callWithReAct, call_timeout, compressImageData, config$1 as config, convertToolSchema, Eko as default, extract_page_content, global, mergeTools, parseWorkflow, resetWorkflowXml, sub, toFile, toImage, uuidv4 };
44754
+ class AgentWrapTool {
44755
+ constructor(chatContext, params, agent, extra) {
44756
+ this.agent = agent;
44757
+ this.params = params;
44758
+ this.chatContext = chatContext;
44759
+ this.name =
44760
+ extra?.name ||
44761
+ agent.Name.substring(0, 1).toLowerCase() + agent.Name.substring(1);
44762
+ this.description =
44763
+ extra?.description ||
44764
+ agent.PlanDescription ||
44765
+ sub(agent.Description, 600, true, false);
44766
+ this.parameters = extra?.parameters || {
44767
+ type: "object",
44768
+ properties: {
44769
+ language: {
44770
+ type: "string",
44771
+ description: "User language used, eg: English",
44772
+ },
44773
+ taskDescription: {
44774
+ type: "string",
44775
+ description: "Task description, please do not omit any information from the user's instructions, and use the same language as the user's question.",
44776
+ },
44777
+ tabIds: {
44778
+ type: "array",
44779
+ description: "Browser Tab IDs associated with this task, When user says 'left side' or 'current', it means current active tab",
44780
+ items: { type: "integer" },
44781
+ },
44782
+ dependentVariables: {
44783
+ type: "array",
44784
+ description: "The current task relies on variable data from prerequisite execution outputs. Provide the name of the dependent variable.",
44785
+ items: {
44786
+ type: "string",
44787
+ },
44788
+ },
44789
+ },
44790
+ required: ["language", "taskDescription"],
44791
+ };
44792
+ }
44793
+ async execute(args, toolCall, messageId) {
44794
+ const chatId = this.chatContext.getChatId();
44795
+ const language = args.language;
44796
+ const taskDescription = args.taskDescription;
44797
+ const tabIds = args.tabIds;
44798
+ const dependentVariables = args.dependentVariables;
44799
+ const globalVariables = this.chatContext.getGlobalVariables();
44800
+ const attachments = this.params.user
44801
+ .filter((part) => part.type === "file")
44802
+ .filter((part) => part.data && part.data.length < 500)
44803
+ .map((part) => {
44804
+ return {
44805
+ file_name: part.filename,
44806
+ file_path: part.filePath,
44807
+ file_url: part.data,
44808
+ };
44809
+ });
44810
+ const taskWebsite = await this.getTaskWebsite(tabIds);
44811
+ const config = this.chatContext.getConfig();
44812
+ const contextParams = {
44813
+ ...(this.params.extra || {}),
44814
+ ...globalVariables,
44815
+ tabIds: tabIds,
44816
+ language: language,
44817
+ attachments: attachments,
44818
+ taskWebsite: taskWebsite,
44819
+ dependentVariables: dependentVariables,
44820
+ datetime: this.params.datetime || new Date().toLocaleString(),
44821
+ };
44822
+ const agents = [this.agent];
44823
+ const chain = new Chain(taskDescription);
44824
+ const taskId = messageId;
44825
+ const context = new TaskContext(chatId, taskId, {
44826
+ ...config,
44827
+ callback: this.params.callback?.taskCallback,
44828
+ }, agents, chain);
44829
+ if (contextParams) {
44830
+ Object.keys(contextParams).forEach((key) => context.variables.set(key, contextParams[key]));
44831
+ }
44832
+ context.workflow = buildSimpleAgentWorkflow({
44833
+ taskId,
44834
+ name: "Task",
44835
+ agentName: this.agent.Name,
44836
+ task: taskDescription,
44837
+ });
44838
+ try {
44839
+ global.taskMap.set(taskId, context);
44840
+ const agentNode = context.workflow.agents[0];
44841
+ const resultText = await this.runAgent(context, this.agent, {
44842
+ type: "normal",
44843
+ agent: agentNode,
44844
+ }, new AgentChain(agentNode));
44845
+ return {
44846
+ content: [
44847
+ {
44848
+ type: "text",
44849
+ text: resultText || "",
44850
+ },
44851
+ ],
44852
+ };
44853
+ }
44854
+ finally {
44855
+ global.taskMap.delete(taskId);
44856
+ }
44857
+ }
44858
+ async runAgent(context, agent, agentNode, agentChain) {
44859
+ const callback = this.params.callback?.taskCallback;
44860
+ try {
44861
+ agentNode.agent.status = "running";
44862
+ callback &&
44863
+ (await callback.onMessage({
44864
+ streamType: "agent",
44865
+ chatId: context.chatId,
44866
+ taskId: context.taskId,
44867
+ agentName: agentNode.agent.name,
44868
+ nodeId: agentNode.agent.id,
44869
+ type: "agent_start",
44870
+ agentNode: agentNode.agent,
44871
+ }, agent.AgentContext));
44872
+ agentNode.result = await agent.run(context, agentChain);
44873
+ agentNode.agent.status = "done";
44874
+ callback &&
44875
+ (await callback.onMessage({
44876
+ streamType: "agent",
44877
+ chatId: context.chatId,
44878
+ taskId: context.taskId,
44879
+ agentName: agentNode.agent.name,
44880
+ nodeId: agentNode.agent.id,
44881
+ type: "agent_result",
44882
+ agentNode: agentNode.agent,
44883
+ result: agentNode.result,
44884
+ }, agent.AgentContext));
44885
+ return agentNode.result;
44886
+ }
44887
+ catch (e) {
44888
+ agentNode.agent.status = "error";
44889
+ callback &&
44890
+ (await callback.onMessage({
44891
+ streamType: "agent",
44892
+ chatId: context.chatId,
44893
+ taskId: context.taskId,
44894
+ agentName: agentNode.agent.name,
44895
+ nodeId: agentNode.agent.id,
44896
+ type: "agent_result",
44897
+ agentNode: agentNode.agent,
44898
+ error: e,
44899
+ }, agent.AgentContext));
44900
+ throw e;
44901
+ }
44902
+ }
44903
+ async getTaskWebsite(tabIds) {
44904
+ if (!global.browserService) {
44905
+ return [];
44906
+ }
44907
+ const tabs = await global.browserService.loadTabs(this.chatContext.getChatId(), tabIds);
44908
+ return tabs.map((tab) => {
44909
+ return {
44910
+ tabId: tab.tabId,
44911
+ title: tab.title,
44912
+ url: sub(tab.url, 300),
44913
+ };
44914
+ });
44915
+ }
44916
+ }
44917
+
44918
+ export { Agent, AgentChain, AgentContext, AgentWrapTool, BaseBrowserAgent, BaseBrowserLabelsAgent, BaseBrowserScreenAgent, Chain, ChatAgent, ChatContext, TaskContext as Context, DeepActionTool, Eko, EkoMemory, ForeachTaskTool, GlobalPromptKey, HumanInteractTool, Log, Planner, PromptTemplate, RetryLanguageModel, SimpleHttpMcpClient, SimpleSseMcpClient, TaskContext, TaskNodeStatusTool, TaskVariableStorageTool, VariableStorageTool, WatchTriggerTool, WebSearchTool, WebpageQaTool, buildAgentTree, buildSimpleAgentWorkflow, callLLM, callWithReAct, call_timeout, compressImageData, config$1 as config, convertToolSchema, Eko as default, extract_page_content, global, mergeTools, parseWorkflow, resetWorkflowXml, sub, toFile, toImage, uuidv4 };
44733
44919
  //# sourceMappingURL=index.esm.js.map