@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 +6 -8
- package/dist/index.d.ts +6 -8
- package/dist/index.js +110 -17
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +110 -17
- package/dist/index.mjs.map +1 -1
- package/docs/agents/memory/in-memory.md +2 -0
- package/docs/agents/memory/overview.md +13 -3
- package/docs/agents/overview.md +2 -2
- package/docs/agents/subagents.md +17 -2
- package/docs/agents/voltagent-instance.md +1 -1
- package/docs/api/api-reference.md +10 -0
- package/docs/api/endpoints/workflows.md +29 -8
- package/docs/api/overview.md +1 -1
- package/package.json +1 -1
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
|
|
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
|
*/
|