@voltagent/core 2.3.6 → 2.3.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -1552,6 +1552,8 @@ interface WorkflowRunQuery {
1552
1552
  to?: Date;
1553
1553
  limit?: number;
1554
1554
  offset?: number;
1555
+ userId?: string;
1556
+ metadata?: Record<string, unknown>;
1555
1557
  }
1556
1558
  /**
1557
1559
  * Working memory scope - conversation or user level
@@ -2808,6 +2810,8 @@ interface ManagedMemoryQueryWorkflowRunsInput {
2808
2810
  to?: Date;
2809
2811
  limit?: number;
2810
2812
  offset?: number;
2813
+ userId?: string;
2814
+ metadata?: Record<string, unknown>;
2811
2815
  }
2812
2816
  interface ManagedMemoryWorkflowStateUpdateInput {
2813
2817
  executionId: string;
@@ -9229,6 +9233,7 @@ declare class Agent {
9229
9233
  * Enrich instructions with additional context and modifiers
9230
9234
  */
9231
9235
  private enrichInstructions;
9236
+ private extractToolkits;
9232
9237
  /**
9233
9238
  * Prepare agents memory for supervisor
9234
9239
  */
@@ -14526,14 +14531,7 @@ declare class InMemoryStorageAdapter implements StorageAdapter {
14526
14531
  /**
14527
14532
  * Query workflow states with optional filters
14528
14533
  */
14529
- queryWorkflowRuns(query: {
14530
- workflowId?: string;
14531
- status?: WorkflowStateEntry["status"];
14532
- from?: Date;
14533
- to?: Date;
14534
- limit?: number;
14535
- offset?: number;
14536
- }): Promise<WorkflowStateEntry[]>;
14534
+ queryWorkflowRuns(query: WorkflowRunQuery): Promise<WorkflowStateEntry[]>;
14537
14535
  /**
14538
14536
  * Set workflow state
14539
14537
  */
package/dist/index.d.ts CHANGED
@@ -1552,6 +1552,8 @@ interface WorkflowRunQuery {
1552
1552
  to?: Date;
1553
1553
  limit?: number;
1554
1554
  offset?: number;
1555
+ userId?: string;
1556
+ metadata?: Record<string, unknown>;
1555
1557
  }
1556
1558
  /**
1557
1559
  * Working memory scope - conversation or user level
@@ -2808,6 +2810,8 @@ interface ManagedMemoryQueryWorkflowRunsInput {
2808
2810
  to?: Date;
2809
2811
  limit?: number;
2810
2812
  offset?: number;
2813
+ userId?: string;
2814
+ metadata?: Record<string, unknown>;
2811
2815
  }
2812
2816
  interface ManagedMemoryWorkflowStateUpdateInput {
2813
2817
  executionId: string;
@@ -9229,6 +9233,7 @@ declare class Agent {
9229
9233
  * Enrich instructions with additional context and modifiers
9230
9234
  */
9231
9235
  private enrichInstructions;
9236
+ private extractToolkits;
9232
9237
  /**
9233
9238
  * Prepare agents memory for supervisor
9234
9239
  */
@@ -14526,14 +14531,7 @@ declare class InMemoryStorageAdapter implements StorageAdapter {
14526
14531
  /**
14527
14532
  * Query workflow states with optional filters
14528
14533
  */
14529
- queryWorkflowRuns(query: {
14530
- workflowId?: string;
14531
- status?: WorkflowStateEntry["status"];
14532
- from?: Date;
14533
- to?: Date;
14534
- limit?: number;
14535
- offset?: number;
14536
- }): Promise<WorkflowStateEntry[]>;
14534
+ queryWorkflowRuns(query: WorkflowRunQuery): Promise<WorkflowStateEntry[]>;
14537
14535
  /**
14538
14536
  * Set workflow state
14539
14537
  */
package/dist/index.js CHANGED
@@ -6046,6 +6046,42 @@ Remember:
6046
6046
 
6047
6047
  // src/memory/adapters/storage/in-memory.ts
6048
6048
  var import_utils16 = require("@voltagent/internal/utils");
6049
+ function areMetadataValuesEqual(left, right) {
6050
+ if (Object.is(left, right)) {
6051
+ return true;
6052
+ }
6053
+ if (typeof left !== "object" || left === null || typeof right !== "object" || right === null) {
6054
+ return false;
6055
+ }
6056
+ if (Array.isArray(left) || Array.isArray(right)) {
6057
+ if (!Array.isArray(left) || !Array.isArray(right) || left.length !== right.length) {
6058
+ return false;
6059
+ }
6060
+ for (let index = 0; index < left.length; index++) {
6061
+ if (!areMetadataValuesEqual(left[index], right[index])) {
6062
+ return false;
6063
+ }
6064
+ }
6065
+ return true;
6066
+ }
6067
+ const leftRecord = left;
6068
+ const rightRecord = right;
6069
+ const leftKeys = Object.keys(leftRecord);
6070
+ const rightKeys = Object.keys(rightRecord);
6071
+ if (leftKeys.length !== rightKeys.length) {
6072
+ return false;
6073
+ }
6074
+ for (const key of leftKeys) {
6075
+ if (!Object.prototype.hasOwnProperty.call(rightRecord, key)) {
6076
+ return false;
6077
+ }
6078
+ if (!areMetadataValuesEqual(leftRecord[key], rightRecord[key])) {
6079
+ return false;
6080
+ }
6081
+ }
6082
+ return true;
6083
+ }
6084
+ __name(areMetadataValuesEqual, "areMetadataValuesEqual");
6049
6085
  var InMemoryStorageAdapter = class {
6050
6086
  static {
6051
6087
  __name(this, "InMemoryStorageAdapter");
@@ -6426,6 +6462,20 @@ var InMemoryStorageAdapter = class {
6426
6462
  if (query.to && state.createdAt > query.to) {
6427
6463
  return false;
6428
6464
  }
6465
+ if (query.userId && state.userId !== query.userId) {
6466
+ return false;
6467
+ }
6468
+ if (query.metadata) {
6469
+ const stateMetadata = state.metadata ?? {};
6470
+ for (const [key, value] of Object.entries(query.metadata)) {
6471
+ if (!Object.prototype.hasOwnProperty.call(stateMetadata, key)) {
6472
+ return false;
6473
+ }
6474
+ if (!areMetadataValuesEqual(stateMetadata[key], value)) {
6475
+ return false;
6476
+ }
6477
+ }
6478
+ }
6429
6479
  return true;
6430
6480
  }).sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());
6431
6481
  const start = query.offset ?? 0;
@@ -9065,8 +9115,8 @@ var WorkflowRegistry = class _WorkflowRegistry extends SimpleEventEmitter {
9065
9115
  this.logger.trace(`Added suspension controller for resumed execution ${executionId}`);
9066
9116
  const resumeOptions = {
9067
9117
  executionId,
9068
- userId: workflowState.metadata?.userId,
9069
- conversationId: workflowState.metadata?.conversationId,
9118
+ userId: workflowState.userId ?? workflowState.metadata?.userId,
9119
+ conversationId: workflowState.conversationId ?? workflowState.metadata?.conversationId,
9070
9120
  suspendController,
9071
9121
  resumeFrom: {
9072
9122
  executionId,
@@ -9089,7 +9139,10 @@ var WorkflowRegistry = class _WorkflowRegistry extends SimpleEventEmitter {
9089
9139
  }
9090
9140
  this.logger.debug(`Resuming workflow from step ${resumeOptions.resumeFrom.resumeStepIndex}`);
9091
9141
  try {
9092
- const inputToUse = workflowState.input;
9142
+ const workflowStartEventInput = workflowState.events?.find(
9143
+ (event) => event.type === "workflow-start"
9144
+ )?.input;
9145
+ const inputToUse = workflowState.input ?? workflowStartEventInput;
9093
9146
  if (resumeData !== void 0) {
9094
9147
  resumeOptions.resumeFrom = {
9095
9148
  ...resumeOptions.resumeFrom,
@@ -9705,6 +9758,8 @@ function createWorkflow({
9705
9758
  input: input2,
9706
9759
  context: options?.context ? Array.from(options.context.entries()) : void 0,
9707
9760
  workflowState: workflowStateStore,
9761
+ userId: options?.userId,
9762
+ conversationId: options?.conversationId,
9708
9763
  metadata: {
9709
9764
  traceId: rootSpan.spanContext().traceId,
9710
9765
  spanId: rootSpan.spanContext().spanId
@@ -16508,13 +16563,21 @@ var VoltOpsClient = class _VoltOpsClient {
16508
16563
  }
16509
16564
  }
16510
16565
  async getManagedMemoryWorkflowStates(databaseId, input) {
16566
+ const metadataQueryParams = input.metadata && Object.keys(input.metadata).length > 0 ? Object.fromEntries(
16567
+ Object.entries(input.metadata).map(([key, value]) => [
16568
+ `metadata.${key}`,
16569
+ value === null ? "null" : typeof value === "string" ? value : typeof value === "number" || typeof value === "boolean" ? String(value) : (0, import_internal7.safeStringify)(value)
16570
+ ])
16571
+ ) : void 0;
16511
16572
  const query = this.buildQueryString({
16512
16573
  workflowId: input.workflowId,
16513
16574
  status: input.status,
16514
16575
  from: input.from?.toISOString(),
16515
16576
  to: input.to?.toISOString(),
16516
16577
  limit: input.limit,
16517
- offset: input.offset
16578
+ offset: input.offset,
16579
+ userId: input.userId,
16580
+ ...metadataQueryParams ?? {}
16518
16581
  });
16519
16582
  const payload = await this.request("GET", `/managed-memory/projects/databases/${databaseId}/workflow-states${query}`);
16520
16583
  if (!payload?.success) {
@@ -29958,8 +30021,12 @@ Metadata: ${(0, import_utils33.safeStringify)(metadata)}`;
29958
30021
  * Common preparation for all execution methods
29959
30022
  */
29960
30023
  async prepareExecution(input, oc, options) {
30024
+ const dynamicToolList = await this.resolveValue(this.dynamicTools, oc) || [];
30025
+ const optionToolsArray = options?.tools || [];
30026
+ const adHocTools = [...dynamicToolList, ...optionToolsArray];
30027
+ const runtimeToolkits = this.extractToolkits(adHocTools);
29961
30028
  const buffer = this.getConversationBuffer(oc);
29962
- const uiMessages = await this.prepareMessages(input, oc, options, buffer);
30029
+ const uiMessages = await this.prepareMessages(input, oc, options, buffer, runtimeToolkits);
29963
30030
  const hooks = this.getMergedHooks(options);
29964
30031
  let messages = await (0, import_ai7.convertToModelMessages)(uiMessages);
29965
30032
  if (hooks.onPrepareModelMessages) {
@@ -29976,9 +30043,6 @@ Metadata: ${(0, import_utils33.safeStringify)(metadata)}`;
29976
30043
  messages = stripDanglingOpenAIReasoningFromModelMessages(messages);
29977
30044
  const maxSteps = options?.maxSteps ?? this.calculateMaxSteps();
29978
30045
  const modelName = this.getModelName();
29979
- const dynamicToolList = await this.resolveValue(this.dynamicTools, oc) || [];
29980
- const optionToolsArray = options?.tools || [];
29981
- const adHocTools = [...dynamicToolList, ...optionToolsArray];
29982
30046
  const tools = await this.prepareTools(adHocTools, oc, maxSteps, options);
29983
30047
  return {
29984
30048
  messages,
@@ -30549,10 +30613,10 @@ Metadata: ${(0, import_utils33.safeStringify)(metadata)}`;
30549
30613
  * Prepare messages with system prompt and memory
30550
30614
  */
30551
30615
  // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: legacy message preparation pipeline
30552
- async prepareMessages(input, oc, options, buffer) {
30616
+ async prepareMessages(input, oc, options, buffer, runtimeToolkits = []) {
30553
30617
  const resolvedInput = await this.validateIncomingUIMessages(input, oc);
30554
30618
  const messages = [];
30555
- const systemMessage = await this.getSystemMessage(resolvedInput, oc, options);
30619
+ const systemMessage = await this.getSystemMessage(resolvedInput, oc, options, runtimeToolkits);
30556
30620
  if (systemMessage) {
30557
30621
  const systemMessagesAsUI = (() => {
30558
30622
  if (typeof systemMessage === "string") {
@@ -30747,7 +30811,7 @@ Metadata: ${(0, import_utils33.safeStringify)(metadata)}`;
30747
30811
  * Get system message with dynamic instructions and retriever context
30748
30812
  */
30749
30813
  // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: legacy system message assembly
30750
- async getSystemMessage(input, oc, options) {
30814
+ async getSystemMessage(input, oc, options, runtimeToolkits = []) {
30751
30815
  const promptHelper = VoltOpsClient.createPromptHelperWithFallback(
30752
30816
  this.id,
30753
30817
  this.name,
@@ -30872,7 +30936,8 @@ ${additionalContext}`
30872
30936
  baseContent2,
30873
30937
  retrieverContext,
30874
30938
  workingMemoryContext,
30875
- oc
30939
+ oc,
30940
+ runtimeToolkits
30876
30941
  );
30877
30942
  return {
30878
30943
  role: "system",
@@ -30885,7 +30950,8 @@ ${additionalContext}`
30885
30950
  baseContent,
30886
30951
  retrieverContext,
30887
30952
  workingMemoryContext,
30888
- oc
30953
+ oc,
30954
+ runtimeToolkits
30889
30955
  );
30890
30956
  return {
30891
30957
  role: "system",
@@ -30895,8 +30961,30 @@ ${additionalContext}`
30895
30961
  /**
30896
30962
  * Add toolkit instructions
30897
30963
  */
30898
- addToolkitInstructions(baseInstructions) {
30899
- const toolkits = this.toolManager.getToolkits();
30964
+ addToolkitInstructions(baseInstructions, runtimeToolkits = []) {
30965
+ const toolkits = this.toolManager.getToolkits().map((toolkit) => ({
30966
+ name: toolkit.name,
30967
+ instructions: toolkit.instructions,
30968
+ addInstructions: toolkit.addInstructions
30969
+ }));
30970
+ const toolkitIndexByName = /* @__PURE__ */ new Map();
30971
+ for (const [index, toolkit] of toolkits.entries()) {
30972
+ toolkitIndexByName.set(toolkit.name, index);
30973
+ }
30974
+ for (const runtimeToolkit of runtimeToolkits) {
30975
+ const runtimeToolkitSource = {
30976
+ name: runtimeToolkit.name,
30977
+ instructions: runtimeToolkit.instructions,
30978
+ addInstructions: runtimeToolkit.addInstructions
30979
+ };
30980
+ const existingIndex = toolkitIndexByName.get(runtimeToolkit.name);
30981
+ if (existingIndex === void 0) {
30982
+ toolkitIndexByName.set(runtimeToolkit.name, toolkits.length);
30983
+ toolkits.push(runtimeToolkitSource);
30984
+ continue;
30985
+ }
30986
+ toolkits[existingIndex] = runtimeToolkitSource;
30987
+ }
30900
30988
  let toolInstructions = "";
30901
30989
  for (const toolkit of toolkits) {
30902
30990
  if (toolkit.addInstructions && toolkit.instructions) {
@@ -30910,9 +30998,9 @@ ${toolkit.instructions}`;
30910
30998
  /**
30911
30999
  * Enrich instructions with additional context and modifiers
30912
31000
  */
30913
- async enrichInstructions(baseContent, retrieverContext, workingMemoryContext, oc) {
31001
+ async enrichInstructions(baseContent, retrieverContext, workingMemoryContext, oc, runtimeToolkits = []) {
30914
31002
  let content = baseContent;
30915
- content = this.addToolkitInstructions(content);
31003
+ content = this.addToolkitInstructions(content, runtimeToolkits);
30916
31004
  if (this.markdown) {
30917
31005
  content = `${content}
30918
31006
 
@@ -30937,6 +31025,11 @@ ${retrieverContext}`;
30937
31025
  }
30938
31026
  return content;
30939
31027
  }
31028
+ extractToolkits(items) {
31029
+ return items.filter(
31030
+ (item) => typeof item === "object" && item !== null && "tools" in item && Array.isArray(item.tools)
31031
+ );
31032
+ }
30940
31033
  /**
30941
31034
  * Prepare agents memory for supervisor
30942
31035
  */