@arvo-tools/agentic 0.4.1 → 1.0.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 (61) hide show
  1. package/dist/Agent/AgentDefaults.d.ts +4 -2
  2. package/dist/Agent/AgentDefaults.d.ts.map +1 -1
  3. package/dist/Agent/AgentDefaults.js +3 -0
  4. package/dist/Agent/AgentDefaults.js.map +1 -1
  5. package/dist/Agent/agentLoop.d.ts +22 -1
  6. package/dist/Agent/agentLoop.d.ts.map +1 -1
  7. package/dist/Agent/agentLoop.js +41 -6
  8. package/dist/Agent/agentLoop.js.map +1 -1
  9. package/dist/Agent/index.d.ts +76 -3
  10. package/dist/Agent/index.d.ts.map +1 -1
  11. package/dist/Agent/index.js +102 -25
  12. package/dist/Agent/index.js.map +1 -1
  13. package/dist/Agent/schema.d.ts +9 -0
  14. package/dist/Agent/schema.d.ts.map +1 -1
  15. package/dist/Agent/schema.js +7 -0
  16. package/dist/Agent/schema.js.map +1 -1
  17. package/dist/Agent/types.d.ts +222 -58
  18. package/dist/Agent/types.d.ts.map +1 -1
  19. package/dist/Agent/utils.d.ts +46 -1
  20. package/dist/Agent/utils.d.ts.map +1 -1
  21. package/dist/Agent/utils.js +43 -0
  22. package/dist/Agent/utils.js.map +1 -1
  23. package/dist/AgentTool/index.d.ts +30 -0
  24. package/dist/AgentTool/index.d.ts.map +1 -0
  25. package/dist/{Agent/agentTool.js → AgentTool/index.js} +27 -1
  26. package/dist/AgentTool/index.js.map +1 -0
  27. package/dist/AgentTool/types.d.ts +59 -0
  28. package/dist/AgentTool/types.d.ts.map +1 -0
  29. package/dist/AgentTool/types.js +3 -0
  30. package/dist/AgentTool/types.js.map +1 -0
  31. package/dist/Integrations/MCPClient.d.ts +62 -29
  32. package/dist/Integrations/MCPClient.d.ts.map +1 -1
  33. package/dist/Integrations/MCPClient.js +60 -29
  34. package/dist/Integrations/MCPClient.js.map +1 -1
  35. package/dist/Integrations/openai/index.d.ts +25 -0
  36. package/dist/Integrations/openai/index.d.ts.map +1 -0
  37. package/dist/Integrations/{openai.js → openai/index.js} +64 -28
  38. package/dist/Integrations/openai/index.js.map +1 -0
  39. package/dist/Integrations/prompts.d.ts +8 -0
  40. package/dist/Integrations/prompts.d.ts.map +1 -0
  41. package/dist/Integrations/prompts.js +12 -0
  42. package/dist/Integrations/prompts.js.map +1 -0
  43. package/dist/Integrations/types.d.ts +101 -0
  44. package/dist/Integrations/types.d.ts.map +1 -0
  45. package/dist/Integrations/types.js +3 -0
  46. package/dist/Integrations/types.js.map +1 -0
  47. package/dist/index.d.ts +7 -4
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +5 -3
  50. package/dist/index.js.map +1 -1
  51. package/dist/interfaces.mcp.d.ts +29 -0
  52. package/dist/interfaces.mcp.d.ts.map +1 -1
  53. package/dist/types.d.ts +13 -0
  54. package/dist/types.d.ts.map +1 -1
  55. package/package.json +1 -1
  56. package/dist/Agent/agentTool.d.ts +0 -4
  57. package/dist/Agent/agentTool.d.ts.map +0 -1
  58. package/dist/Agent/agentTool.js.map +0 -1
  59. package/dist/Integrations/openai.d.ts +0 -10
  60. package/dist/Integrations/openai.d.ts.map +0 -1
  61. package/dist/Integrations/openai.js.map +0 -1
@@ -1,6 +1,8 @@
1
1
  import type { ArvoSemanticVersion } from 'arvo-core';
2
2
  import z from 'zod';
3
- import type { AgentContextBuilder, AgentInternalTool, AgentOutputBuilder, AgentServiceContract, AnyArvoOrchestratorContract, PromiseLike } from './types.js';
3
+ import type { AgentInternalTool } from '../AgentTool/types.js';
4
+ import type { PromiseAble } from '../types.js';
5
+ import type { AgentContextBuilder, AgentOutputBuilder, AgentServiceContract, AnyArvoOrchestratorContract } from './types.js';
4
6
  export declare const AgentDefaults: {
5
7
  readonly INIT_SCHEMA: z.ZodObject<{
6
8
  message: z.ZodString;
@@ -22,7 +24,7 @@ export declare const AgentDefaults: {
22
24
  }, {
23
25
  response: string;
24
26
  }>;
25
- readonly CONTEXT_BUILDER: <T extends AnyArvoOrchestratorContract, V extends ArvoSemanticVersion, TServiceContract extends Record<string, AgentServiceContract>, TTools extends Record<string, AgentInternalTool>>(systemPromptBuilder?: (param: Parameters<AgentContextBuilder<T, V, TServiceContract, TTools>>[0]) => PromiseLike<string>) => AgentContextBuilder<T, V, TServiceContract, TTools>;
27
+ readonly CONTEXT_BUILDER: <T extends AnyArvoOrchestratorContract, V extends ArvoSemanticVersion, TServiceContract extends Record<string, AgentServiceContract>, TTools extends Record<string, AgentInternalTool>>(systemPromptBuilder?: (param: Parameters<AgentContextBuilder<T, V, TServiceContract, TTools>>[0]) => PromiseAble<string>) => AgentContextBuilder<T, V, TServiceContract, TTools>;
26
28
  readonly OUTPUT_BUILDER: AgentOutputBuilder;
27
29
  };
28
30
  //# sourceMappingURL=AgentDefaults.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AgentDefaults.d.ts","sourceRoot":"","sources":["../../src/Agent/AgentDefaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAErD,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,OAAO,KAAK,EACV,mBAAmB,EACnB,iBAAiB,EAEjB,kBAAkB,EAClB,oBAAoB,EACpB,2BAA2B,EAC3B,WAAW,EACZ,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;+BAqBpB,CAAC,SAAS,2BAA2B,EACrC,CAAC,SAAS,mBAAmB,EAC7B,gBAAgB,SAAS,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,EAC7D,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,wBAE1B,CACpB,KAAK,EAAE,UAAU,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KACtE,WAAW,CAAC,MAAM,CAAC,KACvB,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,gBAAgB,EAAE,MAAM,CAAC;6BAoDlD,kBAAkB;CAChB,CAAC"}
1
+ {"version":3,"file":"AgentDefaults.d.ts","sourceRoot":"","sources":["../../src/Agent/AgentDefaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAErD,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EACV,mBAAmB,EAEnB,kBAAkB,EAClB,oBAAoB,EACpB,2BAA2B,EAC5B,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;+BAqBpB,CAAC,SAAS,2BAA2B,EACrC,CAAC,SAAS,mBAAmB,EAC7B,gBAAgB,SAAS,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,EAC7D,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,wBAE1B,CACpB,KAAK,EAAE,UAAU,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KACtE,WAAW,CAAC,MAAM,CAAC,KACvB,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,gBAAgB,EAAE,MAAM,CAAC;6BAuDlD,kBAAkB;CAChB,CAAC"}
@@ -82,12 +82,14 @@ exports.AgentDefaults = {
82
82
  {
83
83
  role: 'user',
84
84
  content: { type: 'text', content: param.input.data.message },
85
+ seenCount: 0,
85
86
  },
86
87
  ];
87
88
  try {
88
89
  for (_a = __values((_h = param.input.data.pdfBase64) !== null && _h !== void 0 ? _h : []), _b = _a.next(); !_b.done; _b = _a.next()) {
89
90
  item = _b.value;
90
91
  messages.push({
92
+ seenCount: 0,
91
93
  role: 'user',
92
94
  content: {
93
95
  type: 'media',
@@ -113,6 +115,7 @@ exports.AgentDefaults = {
113
115
  for (_c = __values((_j = param.input.data.imageBase64) !== null && _j !== void 0 ? _j : []), _d = _c.next(); !_d.done; _d = _c.next()) {
114
116
  item = _d.value;
115
117
  messages.push({
118
+ seenCount: 0,
116
119
  role: 'user',
117
120
  content: {
118
121
  type: 'media',
@@ -1 +1 @@
1
- {"version":3,"file":"AgentDefaults.js","sourceRoot":"","sources":["../../src/Agent/AgentDefaults.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,6BAA0B;AAC1B,4CAAoB;AAWP,QAAA,aAAa,GAAG;IAC3B,WAAW,EAAE,aAAC,CAAC,MAAM,CAAC;QACpB,OAAO,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QAC9D,WAAW,EAAE,aAAC;aACX,MAAM,EAAE;aACR,KAAK,EAAE;aACP,QAAQ,EAAE;aACV,QAAQ,CACP,oFAAoF,CACrF;QACH,SAAS,EAAE,aAAC;aACT,MAAM,EAAE;aACR,KAAK,EAAE;aACP,QAAQ,EAAE;aACV,QAAQ,CAAC,2EAA2E,CAAC;KACzF,CAAC;IACF,eAAe,EAAE,aAAC,CAAC,MAAM,CAAC;QACxB,QAAQ,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;KAClE,CAAC;IACF,eAAe,EACb,UAME,mBAEwB;QAE1B,OAAA,UAAO,KAAK;;;;;;;wBACJ,QAAQ,GAAmB;4BAC/B;gCACE,IAAI,EAAE,MAAM;gCACZ,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE;6BAC7D;yBACF,CAAC;;4BAEF,KAAmB,KAAA,SAAA,MAAA,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,mCAAI,EAAE,CAAA,4CAAE,CAAC;gCAA3C,IAAI;gCACb,QAAQ,CAAC,IAAI,CAAC;oCACZ,IAAI,EAAE,MAAM;oCACZ,OAAO,EAAE;wCACP,IAAI,EAAE,OAAO;wCACb,OAAO,EAAE,IAAI;wCACb,WAAW,EAAE;4CACX,MAAM,EAAE,QAAQ;4CAChB,IAAI,EAAE,MAAM;4CACZ,QAAQ,EAAE,UAAG,IAAA,SAAE,GAAE,SAAM;4CACvB,QAAQ,EAAE,KAAK;yCAChB;qCACF;iCACF,CAAC,CAAC;4BACL,CAAC;;;;;;;;;;4BAED,KAAmB,KAAA,SAAA,MAAA,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,mCAAI,EAAE,CAAA,4CAAE,CAAC;gCAA7C,IAAI;gCACb,QAAQ,CAAC,IAAI,CAAC;oCACZ,IAAI,EAAE,MAAM;oCACZ,OAAO,EAAE;wCACP,IAAI,EAAE,OAAO;wCACb,OAAO,EAAE,IAAI;wCACb,WAAW,EAAE;4CACX,MAAM,EAAE,QAAQ;4CAChB,IAAI,EAAE,OAAO;4CACb,QAAQ,EAAE,UAAG,IAAA,SAAE,GAAE,SAAM;4CACvB,QAAQ,EAAE,KAAK;yCAChB;qCACF;iCACF,CAAC,CAAC;4BACL,CAAC;;;;;;;;;;wBAGU,qBAAM,CAAA,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAG,KAAK,CAAC,CAAA,EAAA;4BAD7C,uBACE,SAAM,GAAE,MAAA,CAAC,SAAkC,CAAC,mCAAI,IAAI;4BACpD,WAAQ,WAAA;iCACR;;;aACH;IA5CD,CA4CC;IACH,cAAc,EAAE,CAAC,UAAC,KAAK;QACrB,OAAO;YACL,IAAI,EAAE;gBACJ,QAAQ,EAAE,KAAK,CAAC,OAAO;aACxB;SACF,CAAC;IACJ,CAAC,CAAuB;CAChB,CAAC"}
1
+ {"version":3,"file":"AgentDefaults.js","sourceRoot":"","sources":["../../src/Agent/AgentDefaults.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,6BAA0B;AAC1B,4CAAoB;AAWP,QAAA,aAAa,GAAG;IAC3B,WAAW,EAAE,aAAC,CAAC,MAAM,CAAC;QACpB,OAAO,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QAC9D,WAAW,EAAE,aAAC;aACX,MAAM,EAAE;aACR,KAAK,EAAE;aACP,QAAQ,EAAE;aACV,QAAQ,CACP,oFAAoF,CACrF;QACH,SAAS,EAAE,aAAC;aACT,MAAM,EAAE;aACR,KAAK,EAAE;aACP,QAAQ,EAAE;aACV,QAAQ,CAAC,2EAA2E,CAAC;KACzF,CAAC;IACF,eAAe,EAAE,aAAC,CAAC,MAAM,CAAC;QACxB,QAAQ,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;KAClE,CAAC;IACF,eAAe,EACb,UAME,mBAEwB;QAE1B,OAAA,UAAO,KAAK;;;;;;;wBACJ,QAAQ,GAAmB;4BAC/B;gCACE,IAAI,EAAE,MAAM;gCACZ,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE;gCAC5D,SAAS,EAAE,CAAC;6BACb;yBACF,CAAC;;4BAEF,KAAmB,KAAA,SAAA,MAAA,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,mCAAI,EAAE,CAAA,4CAAE,CAAC;gCAA3C,IAAI;gCACb,QAAQ,CAAC,IAAI,CAAC;oCACZ,SAAS,EAAE,CAAC;oCACZ,IAAI,EAAE,MAAM;oCACZ,OAAO,EAAE;wCACP,IAAI,EAAE,OAAO;wCACb,OAAO,EAAE,IAAI;wCACb,WAAW,EAAE;4CACX,MAAM,EAAE,QAAQ;4CAChB,IAAI,EAAE,MAAM;4CACZ,QAAQ,EAAE,UAAG,IAAA,SAAE,GAAE,SAAM;4CACvB,QAAQ,EAAE,KAAK;yCAChB;qCACF;iCACF,CAAC,CAAC;4BACL,CAAC;;;;;;;;;;4BAED,KAAmB,KAAA,SAAA,MAAA,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,mCAAI,EAAE,CAAA,4CAAE,CAAC;gCAA7C,IAAI;gCACb,QAAQ,CAAC,IAAI,CAAC;oCACZ,SAAS,EAAE,CAAC;oCACZ,IAAI,EAAE,MAAM;oCACZ,OAAO,EAAE;wCACP,IAAI,EAAE,OAAO;wCACb,OAAO,EAAE,IAAI;wCACb,WAAW,EAAE;4CACX,MAAM,EAAE,QAAQ;4CAChB,IAAI,EAAE,OAAO;4CACb,QAAQ,EAAE,UAAG,IAAA,SAAE,GAAE,SAAM;4CACvB,QAAQ,EAAE,KAAK;yCAChB;qCACF;iCACF,CAAC,CAAC;4BACL,CAAC;;;;;;;;;;wBAGU,qBAAM,CAAA,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAG,KAAK,CAAC,CAAA,EAAA;4BAD7C,uBACE,SAAM,GAAE,MAAA,CAAC,SAAkC,CAAC,mCAAI,IAAI;4BACpD,WAAQ,WAAA;iCACR;;;aACH;IA/CD,CA+CC;IACH,cAAc,EAAE,CAAC,UAAC,KAAK;QACrB,OAAO;YACL,IAAI,EAAE;gBACJ,QAAQ,EAAE,KAAK,CAAC,OAAO;aACxB;SACF,CAAC;IACJ,CAAC,CAAuB;CAChB,CAAC"}
@@ -1,7 +1,26 @@
1
1
  import type z from 'zod';
2
+ import type { AgentLLMIntegration, AgentLLMIntegrationParam } from '../Integrations/types.js';
2
3
  import type { IMCPClient } from '../interfaces.mcp.js';
3
4
  import type { OtelInfoType } from '../types.js';
4
- import type { AgentLLMIntegration, AgentLLMIntegrationParam, AgentMessage, AgentOutputBuilder, AgentToolDefinition, CreateArvoAgentParam } from './types.js';
5
+ import type { AgentMessage, AgentOutputBuilder, AgentToolDefinition, CreateArvoAgentParam } from './types.js';
6
+ /**
7
+ * The Core Cognitive Loop of the Arvo Agent.
8
+ *
9
+ * This function implements the **ReAct (Reason + Act)** pattern, orchestrating the interactive
10
+ * session between the Large Language Model (LLM) and the available Tool ecosystem.
11
+ *
12
+ * @remarks
13
+ * **Hybrid Execution Strategy:**
14
+ * The loop handles two types of tool executions differently:
15
+ * 1. **Synchronous Tools (Internal & MCP):** These are executed **immediately** within the loop.
16
+ * The results are added to the history, and the LLM is called again in the same tick.
17
+ * 2. **Asynchronous Tools (Arvo Services):** These interrupt the loop. The function returns
18
+ * the tool call definition, signaling the parent `ArvoResumable` to **emit an event and suspend**.
19
+ *
20
+ * **Self-Correction:**
21
+ * If the LLM's final output fails the Contract's Output Schema validation (via `outputBuilder`),
22
+ * the loop catches the error and feeds it back to the LLM for auto-correction.
23
+ */
5
24
  export declare const agentLoop: (param: {
6
25
  initLifecycle: AgentLLMIntegrationParam["lifecycle"];
7
26
  system: string | null;
@@ -49,6 +68,7 @@ export declare const agentLoop: (param: {
49
68
  input: Record<string, any>;
50
69
  };
51
70
  role: "user" | "assistant";
71
+ seenCount: number;
52
72
  }[];
53
73
  toolCalls: {
54
74
  type: "tool_use";
@@ -92,6 +112,7 @@ export declare const agentLoop: (param: {
92
112
  input: Record<string, any>;
93
113
  };
94
114
  role: "user" | "assistant";
115
+ seenCount: number;
95
116
  }[];
96
117
  output: {
97
118
  [x: string]: any;
@@ -1 +1 @@
1
- {"version":3,"file":"agentLoop.d.ts","sourceRoot":"","sources":["../../src/Agent/agentLoop.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAEV,mBAAmB,EACnB,wBAAwB,EACxB,YAAY,EACZ,kBAAkB,EAElB,mBAAmB,EAGnB,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAGpB,eAAO,MAAM,SAAS,GACpB,OAAO;IACL,aAAa,EAAE,wBAAwB,CAAC,WAAW,CAAC,CAAC;IACrD,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC7B,YAAY,EAAE,CAAC,CAAC,UAAU,CAAC;IAC3B,aAAa,EAAE,kBAAkB,CAAC;IAClC,eAAe,EAAE,WAAW,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACtE,GAAG,EAAE,mBAAmB,CAAC;IACzB,GAAG,EAAE,UAAU,GAAG,IAAI,CAAC;IACvB,eAAe,EAAE;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,0BAA0B,EAAE,MAAM,CAAC;CACpC,EACD,QAAQ;IAAE,QAAQ,EAAE,YAAY,CAAA;CAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiPhC,CAAC"}
1
+ {"version":3,"file":"agentLoop.d.ts","sourceRoot":"","sources":["../../src/Agent/agentLoop.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,OAAO,KAAK,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAC9F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAElB,mBAAmB,EAGnB,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAGpB;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,SAAS,GACpB,OAAO;IACL,aAAa,EAAE,wBAAwB,CAAC,WAAW,CAAC,CAAC;IACrD,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAC7B,YAAY,EAAE,CAAC,CAAC,UAAU,CAAC;IAC3B,aAAa,EAAE,kBAAkB,CAAC;IAClC,eAAe,EAAE,WAAW,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACtE,GAAG,EAAE,mBAAmB,CAAC;IACzB,GAAG,EAAE,UAAU,GAAG,IAAI,CAAC;IACvB,eAAe,EAAE;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,0BAA0B,EAAE,MAAM,CAAC;CACpC,EACD,QAAQ;IAAE,QAAQ,EAAE,YAAY,CAAA;CAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyQhC,CAAC"}
@@ -87,6 +87,24 @@ exports.agentLoop = void 0;
87
87
  var openinference_semantic_conventions_1 = require("@arizeai/openinference-semantic-conventions");
88
88
  var arvo_core_1 = require("arvo-core");
89
89
  var utils_1 = require("./utils");
90
+ /**
91
+ * The Core Cognitive Loop of the Arvo Agent.
92
+ *
93
+ * This function implements the **ReAct (Reason + Act)** pattern, orchestrating the interactive
94
+ * session between the Large Language Model (LLM) and the available Tool ecosystem.
95
+ *
96
+ * @remarks
97
+ * **Hybrid Execution Strategy:**
98
+ * The loop handles two types of tool executions differently:
99
+ * 1. **Synchronous Tools (Internal & MCP):** These are executed **immediately** within the loop.
100
+ * The results are added to the history, and the LLM is called again in the same tick.
101
+ * 2. **Asynchronous Tools (Arvo Services):** These interrupt the loop. The function returns
102
+ * the tool call definition, signaling the parent `ArvoResumable` to **emit an event and suspend**.
103
+ *
104
+ * **Self-Correction:**
105
+ * If the LLM's final output fails the Contract's Output Schema validation (via `outputBuilder`),
106
+ * the loop catches the error and feeds it back to the LLM for auto-correction.
107
+ */
90
108
  var agentLoop = function (param, config) { return __awaiter(void 0, void 0, void 0, function () {
91
109
  var _a;
92
110
  return __generator(this, function (_b) {
@@ -104,7 +122,7 @@ var agentLoop = function (param, config) { return __awaiter(void 0, void 0, void
104
122
  _a),
105
123
  },
106
124
  fn: function (span) { return __awaiter(void 0, void 0, void 0, function () {
107
- var otelInfo, nameToToolMap, lifecycle, executionUnits, currentToolInteractionCount, messages, toolQuotaExhausted, response, arvoToolCalls, mcpToolResultPromises, internalToolResultPromises, _loop_1, _a, _b, item, _c, _d, item, e_1_1, _e, _f, item, e_2_1, outputResult;
125
+ var otelInfo, nameToToolMap, lifecycle, executionUnits, currentToolInteractionCount, messages, toolQuotaExhausted, response, i, arvoToolCalls, mcpToolResultPromises, internalToolResultPromises, _loop_1, _a, _b, item, _c, _d, item, e_1_1, _e, _f, item, e_2_1, outputResult;
108
126
  var e_3, _g, e_1, _h, e_2, _j;
109
127
  var _k, _l, _m;
110
128
  return __generator(this, function (_o) {
@@ -145,6 +163,11 @@ var agentLoop = function (param, config) { return __awaiter(void 0, void 0, void
145
163
  response = _o.sent();
146
164
  currentToolInteractionCount++;
147
165
  executionUnits += response.executionUnits;
166
+ // Update the message seen count by one for all the
167
+ // messages which the LLM has seen
168
+ for (i = 0; i < messages.length; i++) {
169
+ messages[i].seenCount += 1;
170
+ }
148
171
  if (!(response.type === 'tool_call')) return [3 /*break*/, 19];
149
172
  arvoToolCalls = [];
150
173
  mcpToolResultPromises = [];
@@ -156,7 +179,12 @@ var agentLoop = function (param, config) { return __awaiter(void 0, void 0, void
156
179
  name: item.name,
157
180
  input: item.input,
158
181
  };
159
- messages.push({ role: 'assistant', content: toolCallContent });
182
+ messages.push({
183
+ role: 'assistant',
184
+ content: toolCallContent,
185
+ // This has been viewed by the LLM as it was generated by it
186
+ seenCount: 1,
187
+ });
160
188
  var resolvedToolDef = nameToToolMap[item.name];
161
189
  if (!resolvedToolDef) {
162
190
  messages.push({
@@ -166,6 +194,7 @@ var agentLoop = function (param, config) { return __awaiter(void 0, void 0, void
166
194
  toolUseId: item.toolUseId,
167
195
  content: "The tool ".concat(item.name, " does not exist. Please check if you are using the correct tool and don't call this tool again till you have confirmed the existance of the correct tool"),
168
196
  },
197
+ seenCount: 0,
169
198
  });
170
199
  return "continue";
171
200
  }
@@ -230,7 +259,7 @@ var agentLoop = function (param, config) { return __awaiter(void 0, void 0, void
230
259
  }); })());
231
260
  }
232
261
  else if (resolvedToolDef.serverConfig.kind === 'arvo') {
233
- var zodParseResult = ((_k = resolvedToolDef.serverConfig.contract) === null || _k === void 0 ? void 0 : _k.accepts.schema).safeParse(item.input);
262
+ var zodParseResult = ((_k = resolvedToolDef.serverConfig.contract) === null || _k === void 0 ? void 0 : _k.accepts.schema).safeParse(__assign(__assign({}, item.input), { parentSubject$$: null }));
234
263
  if (zodParseResult === null || zodParseResult === void 0 ? void 0 : zodParseResult.error) {
235
264
  messages.push({
236
265
  role: 'user',
@@ -243,10 +272,11 @@ var agentLoop = function (param, config) { return __awaiter(void 0, void 0, void
243
272
  message: zodParseResult.error.message,
244
273
  }),
245
274
  },
275
+ seenCount: 0,
246
276
  });
247
277
  }
248
278
  else {
249
- arvoToolCalls.push(__assign(__assign({}, toolCallContent), { name: (_m = (_l = resolvedToolDef.serverConfig.contract) === null || _l === void 0 ? void 0 : _l.accepts.type) !== null && _m !== void 0 ? _m : resolvedToolDef.serverConfig.name }));
279
+ arvoToolCalls.push(__assign(__assign({}, toolCallContent), { input: zodParseResult.data, name: (_m = (_l = resolvedToolDef.serverConfig.contract) === null || _l === void 0 ? void 0 : _l.accepts.type) !== null && _m !== void 0 ? _m : resolvedToolDef.serverConfig.name }));
250
280
  }
251
281
  }
252
282
  };
@@ -274,7 +304,7 @@ var agentLoop = function (param, config) { return __awaiter(void 0, void 0, void
274
304
  case 6:
275
305
  if (!!_d.done) return [3 /*break*/, 8];
276
306
  item = _d.value;
277
- messages.push({ role: 'user', content: item });
307
+ messages.push({ role: 'user', content: item, seenCount: 0 });
278
308
  _o.label = 7;
279
309
  case 7:
280
310
  _d = _c.next();
@@ -300,7 +330,7 @@ var agentLoop = function (param, config) { return __awaiter(void 0, void 0, void
300
330
  case 13:
301
331
  if (!!_f.done) return [3 /*break*/, 15];
302
332
  item = _f.value;
303
- messages.push({ role: 'user', content: item });
333
+ messages.push({ role: 'user', content: item, seenCount: 0 });
304
334
  _o.label = 14;
305
335
  case 14:
306
336
  _f = _e.next();
@@ -340,6 +370,8 @@ var agentLoop = function (param, config) { return __awaiter(void 0, void 0, void
340
370
  type: 'text',
341
371
  content: 'content' in response && response.content ? response.content : 'No response',
342
372
  },
373
+ // This has been viewed by the LLM as it was generated by it
374
+ seenCount: 1,
343
375
  });
344
376
  messages.push({
345
377
  role: 'user',
@@ -351,6 +383,7 @@ var agentLoop = function (param, config) { return __awaiter(void 0, void 0, void
351
383
  message: outputResult.error.message,
352
384
  }),
353
385
  },
386
+ seenCount: 0,
354
387
  });
355
388
  lifecycle = 'output_error_feedback';
356
389
  return [3 /*break*/, 2];
@@ -362,6 +395,8 @@ var agentLoop = function (param, config) { return __awaiter(void 0, void 0, void
362
395
  type: 'text',
363
396
  content: JSON.stringify(outputResult.data),
364
397
  },
398
+ // This has been viewed by the LLM as it was generated by it
399
+ seenCount: 1,
365
400
  });
366
401
  return [2 /*return*/, {
367
402
  messages: messages,
@@ -1 +1 @@
1
- {"version":3,"file":"agentLoop.js","sourceRoot":"","sources":["../../src/Agent/agentLoop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agentLoop.js","sourceRoot":"","sources":["../../src/Agent/agentLoop.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
- import type { AgentInternalTool, AgentMessage, AgentServiceContract, AnyArvoOrchestratorContract, CreateArvoAgentParam } from './types.js';
2
- type AgentState = {
1
+ import type { AgentInternalTool } from '../AgentTool/types.js';
2
+ import type { AgentMessage, AgentServiceContract, AnyArvoOrchestratorContract, CreateArvoAgentParam } from './types.js';
3
+ export type AgentState = {
3
4
  currentSubject: string;
4
5
  system: string | null;
5
6
  messages: AgentMessage[];
@@ -13,6 +14,78 @@ type AgentState = {
13
14
  }>;
14
15
  totalExecutionUnits: number;
15
16
  };
17
+ /**
18
+ * Creates a fully-featured AI Agent implemented as an Arvo Resumable Event Handler.
19
+ *
20
+ * This factory transforms a standard Large Language Model (LLM) into a stateful, event-driven
21
+ * participant in your system. Unlike standard chatbots, this Agent can interact with:
22
+ * 1. **Local Tools**: Async/Sync JavaScript functions executed immediately.
23
+ * 2. **MCP Servers**: External data sources via the Model Context Protocol.
24
+ * 3. **Arvo Services**: Other Event Handlers in your Arvo distributed system (Async/Distributed tools).
25
+ *
26
+ * @remarks
27
+ * **The Execution Model:**
28
+ * The Agent operates on a **Start-Stop-Resume** cycle:
29
+ * 1. **Init**: Receives an event -> Builds Context -> Calls LLM.
30
+ * 2. **Action**:
31
+ * - If the LLM chooses a `tool` or `mcp`, it executes immediately and loops back.
32
+ * - If the LLM chooses a `service`, the Agent **emits an event** and **suspends execution**.
33
+ * - The LLM can choose a mix all three modalities at the same time.
34
+ * 3. **Resume**: When the Service replies with an event, the Agent wakes up, restores state from `memory`,
35
+ * adds the result to its history, and calls the LLM again.
36
+ *
37
+ * **Strict Versioning Compliance:**
38
+ * Arvo enforces that your Agent implementation matches your Contract versions.
39
+ * If your `self` contract defines versions `'1.0.0'` and `'2.0.0'`, you must
40
+ * provide specific `context` (A context builder function which runs at init of the agent
41
+ * execution and is reponsible for building the context of the agent i.e. system promot
42
+ * and messages list, both are optional) and `output` builder, which takes the LLM output
43
+ * and converts it into yor contract compliant structure,for *all* versions
44
+ * in the `handler` parameter.
45
+ *
46
+ * This allows you to:
47
+ * - Safely evolve prompt engineering strategies (e.g., v1 uses GPT-3.5, v2 uses GPT-4).
48
+ * - Run different tests on Agent behavior within the same deployment.
49
+ * - Retire old Agent behaviors gradually without breaking existing clients.
50
+ *
51
+ * @param param - Configuration object for the Agent.
52
+ *
53
+ * @returns An `ArvoResumable` instance specialised to run as an AI Agent.
54
+ *
55
+ * @example
56
+ * ```typescript
57
+ * export const supportAgent = ({ memory }) => createArvoAgent({
58
+ * contracts: {
59
+ * self: supportAgentContract, // The interface for this agent
60
+ * services: {
61
+ * // The Agent can "call" this service by emitting an event
62
+ * // and going to sleep until the billing service replies.
63
+ * billing: { contract: billingServiceContract.version('1.0.0') }
64
+ * }
65
+ * },
66
+ * tools: {
67
+ * // The Agent can execute this immediately in-memory
68
+ * checkTime: createAgentTool({
69
+ * name: 'check_time',
70
+ * description: 'Checks current server time',
71
+ * input: z.object({}),
72
+ * output: z.object({ time: z.string() }),
73
+ * fn: async () => ({ time: new Date().toISOString() })
74
+ * })
75
+ * },
76
+ * llm: openaiLLMIntegration(new OpenAI(), { model: 'gpt-4o' }),
77
+ * memory: memory, // Persists chat history during async calls
78
+ * handler: {
79
+ * '1.0.0': {
80
+ * // Dynamic System Prompt Building
81
+ * context: AgentDefaults.CONTEXT_BUILDER(async ({ tools }) =>
82
+ * `You are a support agent. You have access to billing data via the ${tools.services.billing.name} tool.`
83
+ * ),
84
+ * output: AgentDefaults.OUTPUT_BUILDER
85
+ * }
86
+ * }
87
+ * });
88
+ * ```
89
+ */
16
90
  export declare const createArvoAgent: <TSelfContract extends AnyArvoOrchestratorContract, TServiceContract extends Record<string, AgentServiceContract>, TTools extends Record<string, AgentInternalTool>>({ contracts, memory, handler, llm, mcp, maxToolInteractions, llmResponseType, tools, }: CreateArvoAgentParam<TSelfContract, TServiceContract, TTools>) => import("arvo-event-handler").ArvoResumable<AgentState, TSelfContract, { [K in keyof TServiceContract & string]: TServiceContract[K]["contract"]; }>;
17
- export {};
18
91
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Agent/index.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,iBAAiB,EACjB,YAAY,EACZ,oBAAoB,EACpB,2BAA2B,EAC3B,oBAAoB,EAErB,MAAM,YAAY,CAAC;AAOpB,KAAK,UAAU,GAAG;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,gBAAgB,EAAE;QAChB,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IAC1F,mBAAmB,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,aAAa,SAAS,2BAA2B,EACjD,gBAAgB,SAAS,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,EAC7D,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAChD,wFASC,oBAAoB,CAAC,aAAa,EAAE,gBAAgB,EAAE,MAAM,CAAC,8EAGtD,CAAC,yEAuNV,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Agent/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG/D,OAAO,KAAK,EACV,YAAY,EACZ,oBAAoB,EACpB,2BAA2B,EAC3B,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAOpB,MAAM,MAAM,UAAU,GAAG;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,gBAAgB,EAAE;QAChB,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IAC1F,mBAAmB,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwEG;AACH,eAAO,MAAM,eAAe,GAC1B,aAAa,SAAS,2BAA2B,EACjD,gBAAgB,SAAS,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,EAC7D,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAChD,wFASC,oBAAoB,CAAC,aAAa,EAAE,gBAAgB,EAAE,MAAM,CAAC,8EAGtD,CAAC,yEA6NV,CAAC"}
@@ -99,6 +99,79 @@ var arvo_core_1 = require("arvo-core");
99
99
  var arvo_event_handler_1 = require("arvo-event-handler");
100
100
  var agentLoop_js_1 = require("./agentLoop.js");
101
101
  var utils_js_1 = require("./utils.js");
102
+ /**
103
+ * Creates a fully-featured AI Agent implemented as an Arvo Resumable Event Handler.
104
+ *
105
+ * This factory transforms a standard Large Language Model (LLM) into a stateful, event-driven
106
+ * participant in your system. Unlike standard chatbots, this Agent can interact with:
107
+ * 1. **Local Tools**: Async/Sync JavaScript functions executed immediately.
108
+ * 2. **MCP Servers**: External data sources via the Model Context Protocol.
109
+ * 3. **Arvo Services**: Other Event Handlers in your Arvo distributed system (Async/Distributed tools).
110
+ *
111
+ * @remarks
112
+ * **The Execution Model:**
113
+ * The Agent operates on a **Start-Stop-Resume** cycle:
114
+ * 1. **Init**: Receives an event -> Builds Context -> Calls LLM.
115
+ * 2. **Action**:
116
+ * - If the LLM chooses a `tool` or `mcp`, it executes immediately and loops back.
117
+ * - If the LLM chooses a `service`, the Agent **emits an event** and **suspends execution**.
118
+ * - The LLM can choose a mix all three modalities at the same time.
119
+ * 3. **Resume**: When the Service replies with an event, the Agent wakes up, restores state from `memory`,
120
+ * adds the result to its history, and calls the LLM again.
121
+ *
122
+ * **Strict Versioning Compliance:**
123
+ * Arvo enforces that your Agent implementation matches your Contract versions.
124
+ * If your `self` contract defines versions `'1.0.0'` and `'2.0.0'`, you must
125
+ * provide specific `context` (A context builder function which runs at init of the agent
126
+ * execution and is reponsible for building the context of the agent i.e. system promot
127
+ * and messages list, both are optional) and `output` builder, which takes the LLM output
128
+ * and converts it into yor contract compliant structure,for *all* versions
129
+ * in the `handler` parameter.
130
+ *
131
+ * This allows you to:
132
+ * - Safely evolve prompt engineering strategies (e.g., v1 uses GPT-3.5, v2 uses GPT-4).
133
+ * - Run different tests on Agent behavior within the same deployment.
134
+ * - Retire old Agent behaviors gradually without breaking existing clients.
135
+ *
136
+ * @param param - Configuration object for the Agent.
137
+ *
138
+ * @returns An `ArvoResumable` instance specialised to run as an AI Agent.
139
+ *
140
+ * @example
141
+ * ```typescript
142
+ * export const supportAgent = ({ memory }) => createArvoAgent({
143
+ * contracts: {
144
+ * self: supportAgentContract, // The interface for this agent
145
+ * services: {
146
+ * // The Agent can "call" this service by emitting an event
147
+ * // and going to sleep until the billing service replies.
148
+ * billing: { contract: billingServiceContract.version('1.0.0') }
149
+ * }
150
+ * },
151
+ * tools: {
152
+ * // The Agent can execute this immediately in-memory
153
+ * checkTime: createAgentTool({
154
+ * name: 'check_time',
155
+ * description: 'Checks current server time',
156
+ * input: z.object({}),
157
+ * output: z.object({ time: z.string() }),
158
+ * fn: async () => ({ time: new Date().toISOString() })
159
+ * })
160
+ * },
161
+ * llm: openaiLLMIntegration(new OpenAI(), { model: 'gpt-4o' }),
162
+ * memory: memory, // Persists chat history during async calls
163
+ * handler: {
164
+ * '1.0.0': {
165
+ * // Dynamic System Prompt Building
166
+ * context: AgentDefaults.CONTEXT_BUILDER(async ({ tools }) =>
167
+ * `You are a support agent. You have access to billing data via the ${tools.services.billing.name} tool.`
168
+ * ),
169
+ * output: AgentDefaults.OUTPUT_BUILDER
170
+ * }
171
+ * }
172
+ * });
173
+ * ```
174
+ */
102
175
  var createArvoAgent = function (_a) {
103
176
  var contracts = _a.contracts, memory = _a.memory, handler = _a.handler, llm = _a.llm, mcp = _a.mcp, _b = _a.maxToolInteractions, maxToolInteractions = _b === void 0 ? 5 : _b, _c = _a.llmResponseType, llmResponseType = _c === void 0 ? 'text' : _c, tools = _a.tools;
104
177
  var serviceContracts = Object.fromEntries(Object.entries(contracts.services).map(function (_a) {
@@ -121,33 +194,35 @@ var createArvoAgent = function (_a) {
121
194
  handler: Object.fromEntries(Object.keys(contracts.self.versions).map(function (ver) { return [
122
195
  ver,
123
196
  (function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) {
124
- var otelInfo, contextBuilder, outputBuilder, selfVersionedContract, outputFormat, serviceTools, mcpTools, internalTools, toolInteraction, _c, parentSubject$$, inputData, llmContext, response_1, resumableContextToPersist_1, resumedContext, messages, _d, _e, _f, toolUseId, data, response_2, resumableContextToPersist_2;
197
+ var otelInfo, contextBuilder, outputBuilder, thisVersionLlmIntegration, versionLlmResponseType, selfVersionedContract, outputFormat, serviceTools, mcpTools, internalTools, toolInteraction, _c, parentSubject$$, inputData, llmContext, response_1, resumableContextToPersist_1, resumedContext, messages, _d, _e, _f, toolUseId, data, response_2, resumableContextToPersist_2;
125
198
  var e_1, _g;
126
- var _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
199
+ var _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;
127
200
  var span = _b.span, input = _b.input, context = _b.context, service = _b.service;
128
- return __generator(this, function (_u) {
129
- switch (_u.label) {
201
+ return __generator(this, function (_y) {
202
+ switch (_y.label) {
130
203
  case 0:
131
204
  otelInfo = {
132
205
  span: span,
133
206
  headers: (0, arvo_core_1.getOtelHeaderFromSpan)(span),
134
207
  };
135
- _u.label = 1;
208
+ _y.label = 1;
136
209
  case 1:
137
- _u.trys.push([1, , 8, 10]);
210
+ _y.trys.push([1, , 8, 10]);
138
211
  contextBuilder = (_h = handler[ver]) === null || _h === void 0 ? void 0 : _h.context;
139
212
  outputBuilder = (_j = handler[ver]) === null || _j === void 0 ? void 0 : _j.output;
213
+ thisVersionLlmIntegration = (_l = (_k = handler[ver]) === null || _k === void 0 ? void 0 : _k.llm) !== null && _l !== void 0 ? _l : llm;
214
+ versionLlmResponseType = (_o = (_m = handler[ver]) === null || _m === void 0 ? void 0 : _m.llmResponseType) !== null && _o !== void 0 ? _o : llmResponseType;
140
215
  selfVersionedContract = contracts.self.version(ver);
141
216
  outputFormat = selfVersionedContract.emits[selfVersionedContract.metadata.completeEventType];
142
217
  return [4 /*yield*/, (mcp === null || mcp === void 0 ? void 0 : mcp.connect({ otelInfo: otelInfo }))];
143
218
  case 2:
144
- _u.sent();
219
+ _y.sent();
145
220
  serviceTools = (0, utils_js_1.generateServiceToolDefinitions)(contracts.services);
146
221
  return [4 /*yield*/, (0, utils_js_1.generateMcpToolDefinitions)(mcp !== null && mcp !== void 0 ? mcp : null, { otelInfo: otelInfo })];
147
222
  case 3:
148
- mcpTools = _u.sent();
223
+ mcpTools = _y.sent();
149
224
  internalTools = (0, utils_js_1.generateAgentInternalToolDefinitions)(tools !== null && tools !== void 0 ? tools : {});
150
- toolInteraction = (_k = context === null || context === void 0 ? void 0 : context.toolInteractions) !== null && _k !== void 0 ? _k : {
225
+ toolInteraction = (_p = context === null || context === void 0 ? void 0 : context.toolInteractions) !== null && _p !== void 0 ? _p : {
151
226
  max: maxToolInteractions,
152
227
  current: 0,
153
228
  };
@@ -160,35 +235,36 @@ var createArvoAgent = function (_a) {
160
235
  span: span,
161
236
  })];
162
237
  case 4:
163
- llmContext = (_l = (_u.sent())) !== null && _l !== void 0 ? _l : null;
238
+ llmContext = (_q = (_y.sent())) !== null && _q !== void 0 ? _q : null;
164
239
  return [4 /*yield*/, (0, agentLoop_js_1.agentLoop)({
165
240
  initLifecycle: 'init',
166
- system: (_m = llmContext === null || llmContext === void 0 ? void 0 : llmContext.system) !== null && _m !== void 0 ? _m : null,
167
- messages: ((_o = llmContext === null || llmContext === void 0 ? void 0 : llmContext.messages) === null || _o === void 0 ? void 0 : _o.length)
241
+ system: (_r = llmContext === null || llmContext === void 0 ? void 0 : llmContext.system) !== null && _r !== void 0 ? _r : null,
242
+ messages: (((_s = llmContext === null || llmContext === void 0 ? void 0 : llmContext.messages) === null || _s === void 0 ? void 0 : _s.length)
168
243
  ? llmContext.messages
169
244
  : [
170
245
  {
171
246
  role: 'user',
172
247
  content: { type: 'text', content: JSON.stringify(inputData) },
248
+ seenCount: 0,
173
249
  },
174
- ],
250
+ ]).map(function (item) { var _a; return (__assign(__assign({}, item), { seenCount: (_a = item.seenCount) !== null && _a !== void 0 ? _a : 0 })); }),
175
251
  tools: Object.values(__assign(__assign(__assign({}, mcpTools), serviceTools), internalTools)),
176
252
  outputFormat: outputFormat,
177
253
  outputBuilder: outputBuilder,
178
- llmResponseType: llmResponseType,
179
- llm: llm,
254
+ llmResponseType: versionLlmResponseType,
255
+ llm: thisVersionLlmIntegration,
180
256
  mcp: mcp !== null && mcp !== void 0 ? mcp : null,
181
257
  toolInteraction: toolInteraction,
182
258
  currentTotalExecutionUnits: 0,
183
259
  }, { otelInfo: otelInfo })];
184
260
  case 5:
185
- response_1 = _u.sent();
261
+ response_1 = _y.sent();
186
262
  resumableContextToPersist_1 = {
187
263
  currentSubject: input.subject,
188
- system: (_p = llmContext === null || llmContext === void 0 ? void 0 : llmContext.system) !== null && _p !== void 0 ? _p : null,
264
+ system: (_t = llmContext === null || llmContext === void 0 ? void 0 : llmContext.system) !== null && _t !== void 0 ? _t : null,
189
265
  messages: response_1.messages,
190
266
  toolInteractions: response_1.toolInteractions,
191
- awaitingToolCalls: Object.fromEntries(((_q = response_1.toolCalls) !== null && _q !== void 0 ? _q : []).map(function (item) { return [
267
+ awaitingToolCalls: Object.fromEntries(((_u = response_1.toolCalls) !== null && _u !== void 0 ? _u : []).map(function (item) { return [
192
268
  item.toolUseId,
193
269
  { type: item.name, data: null },
194
270
  ]; })),
@@ -233,6 +309,7 @@ var createArvoAgent = function (_a) {
233
309
  toolUseId: toolUseId,
234
310
  content: JSON.stringify(data !== null && data !== void 0 ? data : {}),
235
311
  },
312
+ seenCount: 0,
236
313
  });
237
314
  }
238
315
  }
@@ -245,20 +322,20 @@ var createArvoAgent = function (_a) {
245
322
  }
246
323
  return [4 /*yield*/, (0, agentLoop_js_1.agentLoop)({
247
324
  initLifecycle: 'tool_result',
248
- system: (_r = resumedContext.system) !== null && _r !== void 0 ? _r : null,
325
+ system: (_v = resumedContext.system) !== null && _v !== void 0 ? _v : null,
249
326
  messages: messages,
250
327
  tools: Object.values(__assign(__assign(__assign({}, mcpTools), serviceTools), internalTools)),
251
328
  outputFormat: outputFormat,
252
329
  outputBuilder: outputBuilder,
253
- llmResponseType: llmResponseType,
254
- llm: llm,
330
+ llmResponseType: versionLlmResponseType,
331
+ llm: thisVersionLlmIntegration,
255
332
  mcp: mcp !== null && mcp !== void 0 ? mcp : null,
256
333
  toolInteraction: toolInteraction,
257
334
  currentTotalExecutionUnits: resumedContext.totalExecutionUnits,
258
335
  }, { otelInfo: otelInfo })];
259
336
  case 7:
260
- response_2 = _u.sent();
261
- resumableContextToPersist_2 = __assign(__assign({}, resumedContext), { messages: response_2.messages, toolInteractions: response_2.toolInteractions, awaitingToolCalls: Object.fromEntries(((_s = response_2.toolCalls) !== null && _s !== void 0 ? _s : []).map(function (item) { return [
337
+ response_2 = _y.sent();
338
+ resumableContextToPersist_2 = __assign(__assign({}, resumedContext), { messages: response_2.messages, toolInteractions: response_2.toolInteractions, awaitingToolCalls: Object.fromEntries(((_w = response_2.toolCalls) !== null && _w !== void 0 ? _w : []).map(function (item) { return [
262
339
  item.toolUseId,
263
340
  { type: item.name, data: null },
264
341
  ]; })), totalExecutionUnits: response_2.executionUnits });
@@ -278,9 +355,9 @@ var createArvoAgent = function (_a) {
278
355
  context: resumableContextToPersist_2,
279
356
  output: __assign({ __executionunits: response_2.executionUnits }, response_2.output),
280
357
  }];
281
- case 8: return [4 /*yield*/, ((_t = mcp === null || mcp === void 0 ? void 0 : mcp.disconnect({ otelInfo: otelInfo })) === null || _t === void 0 ? void 0 : _t.catch(console.error))];
358
+ case 8: return [4 /*yield*/, ((_x = mcp === null || mcp === void 0 ? void 0 : mcp.disconnect({ otelInfo: otelInfo })) === null || _x === void 0 ? void 0 : _x.catch(console.error))];
282
359
  case 9:
283
- _u.sent();
360
+ _y.sent();
284
361
  return [7 /*endfinally*/];
285
362
  case 10: return [2 /*return*/];
286
363
  }