@eko-ai/eko 2.1.3 → 2.1.5

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.
@@ -1 +1 @@
1
- {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/agent/base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/agent/base.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,7 @@ export default abstract class BaseBrowserLabelsAgent extends BaseBrowserAgent {
20
20
  private buildInitTools;
21
21
  protected double_screenshots(agentContext: AgentContext, messages: LanguageModelV1Prompt, tools: Tool[]): Promise<boolean>;
22
22
  protected handleMessages(agentContext: AgentContext, messages: LanguageModelV1Prompt, tools: Tool[]): Promise<void>;
23
+ private handlePseudoHtmlText;
23
24
  private removePseudoHtmlAttr;
24
25
  }
25
26
  export { BaseBrowserLabelsAgent };
@@ -1 +1 @@
1
- {"version":3,"file":"browser_labels.d.ts","sourceRoot":"","sources":["../../../src/agent/browser/browser_labels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,gBAAgB,EAAc,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAEL,qBAAqB,EACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAc,UAAU,EAAE,MAAM,aAAa,CAAC;AAG3D,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,sBAAuB,SAAQ,gBAAgB;gBAC/D,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE,SAAS,CAAC,EAAE,UAAU;cAqCvD,UAAU,CACxB,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,IAAI,CAAC;cAOA,aAAa,CAC3B,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAClC,OAAO,CAAC,IAAI,CAAC;cAMA,iBAAiB,CAC/B,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC;cAaA,kBAAkB,CAChC,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,oBAAoB,EAAE,OAAO,GAC5B,OAAO,CAAC,GAAG,CAAC;cAuBC,gBAAgB,CAC9B,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC;cAIA,kBAAkB,CAChC,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,GAAG,CAAC;cAMC,aAAa,CAC3B,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,GAAG,CAAC;cAMC,mBAAmB,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC;QACvE,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,YAAY,GAAG,WAAW,CAAC;QACtC,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IAwCF,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAInD,OAAO,CAAC,cAAc;cA+VN,kBAAkB,CAChC,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,qBAAqB,EAC/B,KAAK,EAAE,IAAI,EAAE,GACZ,OAAO,CAAC,OAAO,CAAC;cAIH,cAAc,CAC5B,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,qBAAqB,EAC/B,KAAK,EAAE,IAAI,EAAE,GACZ,OAAO,CAAC,IAAI,CAAC;IAiEhB,OAAO,CAAC,oBAAoB;CA8B7B;AAqQD,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
1
+ {"version":3,"file":"browser_labels.d.ts","sourceRoot":"","sources":["../../../src/agent/browser/browser_labels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,gBAAgB,EAAc,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAEL,qBAAqB,EACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAc,UAAU,EAAE,MAAM,aAAa,CAAC;AAG3D,MAAM,CAAC,OAAO,CAAC,QAAQ,OAAO,sBAAuB,SAAQ,gBAAgB;gBAC/D,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE,SAAS,CAAC,EAAE,UAAU;cAsCvD,UAAU,CACxB,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,IAAI,CAAC;cAOA,aAAa,CAC3B,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAClC,OAAO,CAAC,IAAI,CAAC;cAMA,iBAAiB,CAC/B,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC;cAaA,kBAAkB,CAChC,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,oBAAoB,EAAE,OAAO,GAC5B,OAAO,CAAC,GAAG,CAAC;cA0BC,gBAAgB,CAC9B,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC;cAIA,kBAAkB,CAChC,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,GAAG,CAAC;cAMC,aAAa,CAC3B,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,GAAG,CAAC;cAMC,mBAAmB,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC;QACvE,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,YAAY,GAAG,WAAW,CAAC;QACtC,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IAwCF,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAInD,OAAO,CAAC,cAAc;cA+VN,kBAAkB,CAChC,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,qBAAqB,EAC/B,KAAK,EAAE,IAAI,EAAE,GACZ,OAAO,CAAC,OAAO,CAAC;cAIH,cAAc,CAC5B,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,qBAAqB,EAC/B,KAAK,EAAE,IAAI,EAAE,GACZ,OAAO,CAAC,IAAI,CAAC;IA2ChB,OAAO,CAAC,oBAAoB;IAkC5B,OAAO,CAAC,oBAAoB;CA4B7B;AAqQD,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"build_dom_tree.d.ts","sourceRoot":"","sources":["../../../src/agent/browser/build_dom_tree.ts"],"names":[],"mappings":"AACA,wBAAgB,kBAAkB,SA+pBjC"}
1
+ {"version":3,"file":"build_dom_tree.d.ts","sourceRoot":"","sources":["../../../src/agent/browser/build_dom_tree.ts"],"names":[],"mappings":"AACA,wBAAgB,kBAAkB,SAgqBjC"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/common/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjD;AAED,wBAAgB,MAAM,IAAI,MAAM,CAM/B;AAED,wBAAgB,YAAY,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,CAAC,EACjD,GAAG,EAAE,MAAM,CAAC,EACZ,OAAO,EAAE,MAAM,EACf,cAAc,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,GACnC,OAAO,CAAC,CAAC,CAAC,CAgBZ;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,UAAU,GACf,2BAA2B,CA8B7B;AAED,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,GAAG,CAsB3D;AAED,wBAAgB,UAAU,CAAC,CAAC,SAAS,IAAI,GAAG,2BAA2B,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAyBtG;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,CAuBvE;AAED,wBAAgB,GAAG,CACjB,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,WAAW,GAAE,OAAc,GAC1B,MAAM,CAQR;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,UA6ErC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/common/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjD;AAED,wBAAgB,MAAM,IAAI,MAAM,CAM/B;AAED,wBAAgB,YAAY,CAAC,CAAC,SAAS,OAAO,CAAC,GAAG,CAAC,EACjD,GAAG,EAAE,MAAM,CAAC,EACZ,OAAO,EAAE,MAAM,EACf,cAAc,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,GACnC,OAAO,CAAC,CAAC,CAAC,CAgBZ;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,UAAU,GACf,2BAA2B,CA8B7B;AAED,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,GAAG,CAsB3D;AAED,wBAAgB,UAAU,CAAC,CAAC,SAAS,IAAI,GAAG,2BAA2B,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAyBtG;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,CAuBvE;AAED,wBAAgB,GAAG,CACjB,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,WAAW,GAAE,OAAc,GAC1B,MAAM,CAQR;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,UAgFrC"}
@@ -10,6 +10,7 @@ export default class Context {
10
10
  variables: Map<string, any>;
11
11
  workflow?: Workflow;
12
12
  paused: boolean;
13
+ conversation: string[];
13
14
  constructor(taskId: string, config: EkoConfig, agents: Agent[], chain: Chain);
14
15
  checkAborted(): Promise<void>;
15
16
  }
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE1D,MAAM,CAAC,OAAO,OAAO,OAAO;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,UAAU,EAAE,eAAe,CAAC;IAC5B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,EAAE,OAAO,CAAS;gBAGtB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,KAAK,EAAE,EACf,KAAK,EAAE,KAAK;IAUR,YAAY;CAgBnB;AAED,qBAAa,YAAY;IACvB,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC;IACvB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;gBAEhB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU;CAOnE"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE1D,MAAM,CAAC,OAAO,OAAO,OAAO;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,UAAU,EAAE,eAAe,CAAC;IAC5B,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,EAAE,OAAO,CAAS;IACxB,YAAY,EAAE,MAAM,EAAE,CAAM;gBAG1B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,KAAK,EAAE,EACf,KAAK,EAAE,KAAK;IAUR,YAAY;CAgBnB;AAED,qBAAa,YAAY;IACvB,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC;IACvB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;gBAEhB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU;CAOnE"}
@@ -16,6 +16,7 @@ export declare class Eko {
16
16
  deleteTask(taskId: string): boolean;
17
17
  abortTask(taskId: string): boolean;
18
18
  pauseTask(taskId: string, paused: boolean): boolean;
19
+ chatTask(taskId: string, userPrompt: string): string[] | undefined;
19
20
  addAgent(agent: Agent): void;
20
21
  }
21
22
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAKjC,qBAAa,GAAG;IACd,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,OAAO,CAAuB;gBAE1B,MAAM,EAAE,SAAS;IAKhB,QAAQ,CACnB,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,MAAiB,EACzB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAClC,OAAO,CAAC,QAAQ,CAAC;IAwBP,MAAM,CACjB,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,QAAQ,CAAC;IAcP,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAoB3C,GAAG,CACd,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,MAAiB,EACzB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAClC,OAAO,CAAC,SAAS,CAAC;IAKR,WAAW,CACtB,QAAQ,EAAE,QAAQ,EAClB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAClC,OAAO,CAAC,OAAO,CAAC;YAoBL,aAAa;IAkCpB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAI5C,YAAY,IAAI,MAAM,EAAE;IAIxB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAInC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAUlC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO;IAUnD,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;CAIpC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAKjC,qBAAa,GAAG;IACd,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,OAAO,CAAuB;gBAE1B,MAAM,EAAE,SAAS;IAKhB,QAAQ,CACnB,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,MAAiB,EACzB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAClC,OAAO,CAAC,QAAQ,CAAC;IAwBP,MAAM,CACjB,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,QAAQ,CAAC;IAcP,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAwB3C,GAAG,CACd,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,MAAiB,EACzB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAClC,OAAO,CAAC,SAAS,CAAC;IAKR,WAAW,CACtB,QAAQ,EAAE,QAAQ,EAClB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAClC,OAAO,CAAC,OAAO,CAAC;YAoBL,aAAa;IAkCpB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAI5C,YAAY,IAAI,MAAM,EAAE;IAIxB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAKnC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAWlC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO;IAUnD,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS;IAQlE,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;CAIpC"}
package/dist/index.cjs.js CHANGED
@@ -12,7 +12,7 @@ const config = {
12
12
  compressThreshold: 80,
13
13
  largeTextLength: 5000,
14
14
  fileTextMaxLength: 20000,
15
- maxDialogueImgFileNum: 2,
15
+ maxDialogueImgFileNum: 1,
16
16
  };
17
17
 
18
18
  var LogLevel;
@@ -289,6 +289,9 @@ function sub(str, maxLength, appendPoint = true) {
289
289
  return str;
290
290
  }
291
291
  function fixXmlTag(code) {
292
+ if (code.indexOf('&') > -1) {
293
+ code = code.replace(/&(?![a-zA-Z0-9#]+;)/g, '&amp;');
294
+ }
292
295
  function fixDoubleChar(code) {
293
296
  const stack = [];
294
297
  for (let i = 0; i < code.length; i++) {
@@ -374,6 +377,7 @@ function fixXmlTag(code) {
374
377
  class Context {
375
378
  constructor(taskId, config, agents, chain) {
376
379
  this.paused = false;
380
+ this.conversation = [];
377
381
  this.taskId = taskId;
378
382
  this.config = config;
379
383
  this.agents = agents;
@@ -14761,7 +14765,7 @@ class RetryLanguageModel {
14761
14765
  const names = [...this.names, ...this.names];
14762
14766
  for (let i = 0; i < names.length; i++) {
14763
14767
  const name = names[i];
14764
- const llm = this.getLLM(name);
14768
+ const llm = await this.getLLM(name);
14765
14769
  if (!llm) {
14766
14770
  continue;
14767
14771
  }
@@ -14813,7 +14817,7 @@ class RetryLanguageModel {
14813
14817
  const names = [...this.names, ...this.names];
14814
14818
  for (let i = 0; i < names.length; i++) {
14815
14819
  const name = names[i];
14816
- const llm = this.getLLM(name);
14820
+ const llm = await this.getLLM(name);
14817
14821
  if (!llm) {
14818
14822
  continue;
14819
14823
  }
@@ -14868,42 +14872,58 @@ class RetryLanguageModel {
14868
14872
  }
14869
14873
  return Promise.reject(new Error("No LLM available"));
14870
14874
  }
14871
- getLLM(name) {
14875
+ async getLLM(name) {
14872
14876
  const llm = this.llms[name];
14873
14877
  if (!llm) {
14874
14878
  return null;
14875
14879
  }
14880
+ let apiKey;
14881
+ if (typeof llm.apiKey === "string") {
14882
+ apiKey = llm.apiKey;
14883
+ }
14884
+ else {
14885
+ apiKey = await llm.apiKey();
14886
+ }
14887
+ let baseURL = undefined;
14888
+ if (llm.config?.baseURL) {
14889
+ if (typeof llm.config.baseURL === "string") {
14890
+ baseURL = llm.config.baseURL;
14891
+ }
14892
+ else {
14893
+ baseURL = await llm.config.baseURL();
14894
+ }
14895
+ }
14876
14896
  if (llm.provider == "openai") {
14877
14897
  return createOpenAI({
14878
- apiKey: llm.apiKey,
14879
- baseURL: llm.config?.baseURL,
14898
+ apiKey: apiKey,
14899
+ baseURL: baseURL,
14880
14900
  }).languageModel(llm.model);
14881
14901
  }
14882
14902
  else if (llm.provider == "anthropic") {
14883
14903
  return createAnthropic({
14884
- apiKey: llm.apiKey,
14885
- baseURL: llm.config?.baseURL,
14904
+ apiKey: apiKey,
14905
+ baseURL: baseURL,
14886
14906
  }).languageModel(llm.model);
14887
14907
  }
14888
14908
  else if (llm.provider == "google") {
14889
14909
  return createGoogleGenerativeAI({
14890
- apiKey: llm.apiKey,
14891
- baseURL: llm.config?.baseURL,
14910
+ apiKey: apiKey,
14911
+ baseURL: baseURL,
14892
14912
  }).languageModel(llm.model);
14893
14913
  }
14894
14914
  else if (llm.provider == "aws") {
14895
- let keys = llm.apiKey.split("=");
14915
+ let keys = apiKey.split("=");
14896
14916
  return createAmazonBedrock({
14897
14917
  accessKeyId: keys[0],
14898
14918
  secretAccessKey: keys[1],
14899
- baseURL: llm.config?.baseURL,
14919
+ baseURL: baseURL,
14900
14920
  region: llm.config?.region || "us-west-1",
14901
14921
  }).languageModel(llm.model);
14902
14922
  }
14903
14923
  else if (llm.provider == "openrouter") {
14904
14924
  return createOpenRouter({
14905
- apiKey: llm.apiKey,
14906
- baseURL: llm.config?.baseURL,
14925
+ apiKey: apiKey,
14926
+ baseURL: baseURL,
14907
14927
  }).languageModel(llm.model);
14908
14928
  }
14909
14929
  else {
@@ -18822,6 +18842,29 @@ class Agent {
18822
18842
  async handleMessages(agentContext, messages, tools) {
18823
18843
  // Only keep the last image / file, large tool-text-result
18824
18844
  handleLargeContextMessages(messages);
18845
+ // User dialogue
18846
+ const userPrompts = agentContext.context.conversation
18847
+ .splice(0, agentContext.context.conversation.length)
18848
+ .filter((s) => !!s);
18849
+ if (userPrompts.length > 0) {
18850
+ const lastMessage = messages[messages.length - 1];
18851
+ if (lastMessage.role == "user") {
18852
+ for (let i = 0; i < userPrompts.length; i++) {
18853
+ lastMessage.content.push({
18854
+ type: "text",
18855
+ text: userPrompts[i],
18856
+ });
18857
+ }
18858
+ }
18859
+ else {
18860
+ messages.push({
18861
+ role: "user",
18862
+ content: userPrompts.map((s) => {
18863
+ return { type: "text", text: s };
18864
+ }),
18865
+ });
18866
+ }
18867
+ }
18825
18868
  }
18826
18869
  async callInnerTool(fun) {
18827
18870
  let result = await fun();
@@ -19421,6 +19464,10 @@ class Eko {
19421
19464
  if (!context) {
19422
19465
  throw new Error("The task does not exist");
19423
19466
  }
19467
+ if (context.paused) {
19468
+ context.paused = false;
19469
+ }
19470
+ context.conversation = [];
19424
19471
  if (context.controller.signal.aborted) {
19425
19472
  context.controller = new AbortController();
19426
19473
  }
@@ -19495,11 +19542,13 @@ class Eko {
19495
19542
  return [...this.taskMap.keys()];
19496
19543
  }
19497
19544
  deleteTask(taskId) {
19545
+ this.abortTask(taskId);
19498
19546
  return this.taskMap.delete(taskId);
19499
19547
  }
19500
19548
  abortTask(taskId) {
19501
19549
  let context = this.taskMap.get(taskId);
19502
19550
  if (context) {
19551
+ context.paused = false;
19503
19552
  context.controller.abort();
19504
19553
  return true;
19505
19554
  }
@@ -19517,6 +19566,13 @@ class Eko {
19517
19566
  return false;
19518
19567
  }
19519
19568
  }
19569
+ chatTask(taskId, userPrompt) {
19570
+ let context = this.taskMap.get(taskId);
19571
+ if (context) {
19572
+ context.conversation.push(userPrompt);
19573
+ return context.conversation;
19574
+ }
19575
+ }
19520
19576
  addAgent(agent) {
19521
19577
  this.config.agents = this.config.agents || [];
19522
19578
  this.config.agents.push(agent);
@@ -20494,7 +20550,8 @@ function run_build_dom_tree() {
20494
20550
  return { element_str, selector_map };
20495
20551
  }
20496
20552
  function get_highlight_element(highlightIndex) {
20497
- return window.clickable_elements[highlightIndex];
20553
+ let element = document.querySelector(`[eko-user-highlight-id="eko-highlight-${highlightIndex}"]`);
20554
+ return element || window.clickable_elements[highlightIndex];
20498
20555
  }
20499
20556
  function remove_highlight() {
20500
20557
  let highlight = document.getElementById('eko-highlight-container');
@@ -21085,6 +21142,7 @@ class BaseBrowserLabelsAgent extends BaseBrowserAgent {
21085
21142
  - Only use indexes that exist in the provided element list
21086
21143
  - Each element has a unique index number (e.g., "[33]:<button>")
21087
21144
  - Elements marked with "[]:" are non-interactive (for context only)
21145
+ - Use the latest element index, do not rely on historical outdated element indexes
21088
21146
  * ERROR HANDLING:
21089
21147
  - If no suitable elements exist, use other functions to complete the task
21090
21148
  - If stuck, try alternative approaches, don't refuse tasks
@@ -21142,7 +21200,8 @@ class BaseBrowserLabelsAgent extends BaseBrowserAgent {
21142
21200
  }
21143
21201
  if (extract_page_content) {
21144
21202
  let page_content = await this.extract_page_content(agentContext);
21145
- return "The current page content has been extracted, latest page content:\n" + page_content;
21203
+ return ("The current page content has been extracted, latest page content:\n" +
21204
+ page_content);
21146
21205
  }
21147
21206
  }
21148
21207
  async hover_to_element(agentContext, index) {
@@ -21498,27 +21557,34 @@ class BaseBrowserLabelsAgent extends BaseBrowserAgent {
21498
21557
  ],
21499
21558
  });
21500
21559
  }
21501
- if (messages.length > 10) {
21502
- // compressed pseudoHtml
21503
- for (let i = 2; i < messages.length - 3; i++) {
21504
- let message = messages[i];
21505
- if (message.role == "user" && message.content.length == 2) {
21506
- let content = message.content;
21507
- for (let j = 0; j < content.length; j++) {
21508
- let _content = content[j];
21509
- if (_content.type == "text" &&
21510
- _content.text.startsWith(pseudoHtmlDescription)) {
21511
- _content.text = this.removePseudoHtmlAttr(_content.text, [
21512
- "class",
21513
- "src",
21514
- "href",
21515
- ]);
21516
- }
21560
+ super.handleMessages(agentContext, messages, tools);
21561
+ this.handlePseudoHtmlText(messages, pseudoHtmlDescription);
21562
+ }
21563
+ handlePseudoHtmlText(messages, pseudoHtmlDescription) {
21564
+ for (let i = 0; i < messages.length; i++) {
21565
+ let message = messages[i];
21566
+ if (message.role !== "user" || message.content.length <= 1) {
21567
+ continue;
21568
+ }
21569
+ let content = message.content;
21570
+ for (let j = 0; j < content.length; j++) {
21571
+ let _content = content[j];
21572
+ if (_content.type == "text" &&
21573
+ _content.text.startsWith(pseudoHtmlDescription)) {
21574
+ if (i >= 2 && i < messages.length - 3) {
21575
+ _content.text = this.removePseudoHtmlAttr(_content.text, [
21576
+ "class",
21577
+ "src",
21578
+ "href",
21579
+ ]);
21517
21580
  }
21518
21581
  }
21519
21582
  }
21583
+ if (content[0].text == "[image]" &&
21584
+ content[1].text == "[image]") {
21585
+ content.splice(0, 1);
21586
+ }
21520
21587
  }
21521
- super.handleMessages(agentContext, messages, tools);
21522
21588
  }
21523
21589
  removePseudoHtmlAttr(pseudoHtml, remove_attrs) {
21524
21590
  return pseudoHtml
@@ -21527,6 +21593,7 @@ class BaseBrowserLabelsAgent extends BaseBrowserAgent {
21527
21593
  if (!line.startsWith("[") || line.indexOf("]:<") == -1) {
21528
21594
  return line;
21529
21595
  }
21596
+ line = line.substring(line.indexOf("]:<") + 2);
21530
21597
  for (let i = 0; i < remove_attrs.length; i++) {
21531
21598
  let sIdx = line.indexOf(remove_attrs[i] + '="');
21532
21599
  if (sIdx == -1) {
@@ -21538,12 +21605,9 @@ class BaseBrowserLabelsAgent extends BaseBrowserAgent {
21538
21605
  }
21539
21606
  line =
21540
21607
  line.substring(0, sIdx) +
21541
- line
21542
- .substring(eIdx + 1)
21543
- .trim()
21544
- .replace('" >', '">');
21608
+ line.substring(eIdx + 1).trim();
21545
21609
  }
21546
- return line;
21610
+ return line.replace('" >', '">').replace(" >", ">");
21547
21611
  })
21548
21612
  .join("\n");
21549
21613
  }