@zhivex-ai/core 1.17.0 → 1.19.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.
- package/README.md +4 -0
- package/dist/agent/approvals.d.ts +7 -0
- package/dist/agent/approvals.d.ts.map +1 -0
- package/dist/agent/approvals.js +97 -0
- package/dist/agent/approvals.js.map +1 -0
- package/dist/agent/cancellation.d.ts +4 -0
- package/dist/agent/cancellation.d.ts.map +1 -0
- package/dist/agent/cancellation.js +69 -0
- package/dist/agent/cancellation.js.map +1 -0
- package/dist/agent/common.d.ts +20 -0
- package/dist/agent/common.d.ts.map +1 -0
- package/dist/agent/common.js +150 -0
- package/dist/agent/common.js.map +1 -0
- package/dist/agent/compaction.d.ts +6 -0
- package/dist/agent/compaction.d.ts.map +1 -0
- package/dist/agent/compaction.js +156 -0
- package/dist/agent/compaction.js.map +1 -0
- package/dist/agent/context.d.ts +58 -0
- package/dist/agent/context.d.ts.map +1 -0
- package/dist/agent/context.js +267 -0
- package/dist/agent/context.js.map +1 -0
- package/dist/agent/definition.d.ts +4 -0
- package/dist/agent/definition.d.ts.map +1 -0
- package/dist/agent/definition.js +35 -0
- package/dist/agent/definition.js.map +1 -0
- package/dist/agent/execution.d.ts +14 -0
- package/dist/agent/execution.d.ts.map +1 -0
- package/dist/agent/execution.js +1062 -0
- package/dist/agent/execution.js.map +1 -0
- package/dist/agent/groups.d.ts +3 -0
- package/dist/agent/groups.d.ts.map +1 -0
- package/dist/agent/groups.js +130 -0
- package/dist/agent/groups.js.map +1 -0
- package/dist/agent/guardrails.d.ts +4 -0
- package/dist/agent/guardrails.d.ts.map +1 -0
- package/dist/agent/guardrails.js +29 -0
- package/dist/agent/guardrails.js.map +1 -0
- package/dist/agent/instance.d.ts +42 -0
- package/dist/agent/instance.d.ts.map +1 -0
- package/dist/agent/instance.js +82 -0
- package/dist/agent/instance.js.map +1 -0
- package/dist/agent/lifecycle.d.ts +31 -0
- package/dist/agent/lifecycle.d.ts.map +1 -0
- package/dist/agent/lifecycle.js +184 -0
- package/dist/agent/lifecycle.js.map +1 -0
- package/dist/agent/state.d.ts +6 -0
- package/dist/agent/state.d.ts.map +1 -0
- package/dist/agent/state.js +119 -0
- package/dist/agent/state.js.map +1 -0
- package/dist/agent/telemetry.d.ts +12 -0
- package/dist/agent/telemetry.d.ts.map +1 -0
- package/dist/agent/telemetry.js +176 -0
- package/dist/agent/telemetry.js.map +1 -0
- package/dist/agent/tool-execution.d.ts +6 -0
- package/dist/agent/tool-execution.d.ts.map +1 -0
- package/dist/agent/tool-execution.js +176 -0
- package/dist/agent/tool-execution.js.map +1 -0
- package/dist/agent-evaluation.d.ts.map +1 -1
- package/dist/agent-evaluation.js +2 -0
- package/dist/agent-evaluation.js.map +1 -1
- package/dist/agent-reconciliation.d.ts +12 -0
- package/dist/agent-reconciliation.d.ts.map +1 -0
- package/dist/agent-reconciliation.js +87 -0
- package/dist/agent-reconciliation.js.map +1 -0
- package/dist/agent-run-view.d.ts +9 -0
- package/dist/agent-run-view.d.ts.map +1 -0
- package/dist/agent-run-view.js +42 -0
- package/dist/agent-run-view.js.map +1 -0
- package/dist/agent-state.d.ts.map +1 -1
- package/dist/agent-state.js +34 -0
- package/dist/agent-state.js.map +1 -1
- package/dist/agent-store/file.d.ts +11 -0
- package/dist/agent-store/file.d.ts.map +1 -0
- package/dist/agent-store/file.js +534 -0
- package/dist/agent-store/file.js.map +1 -0
- package/dist/agent-store/memory.d.ts +9 -0
- package/dist/agent-store/memory.d.ts.map +1 -0
- package/dist/agent-store/memory.js +198 -0
- package/dist/agent-store/memory.js.map +1 -0
- package/dist/agent-store/postgres.d.ts +4 -0
- package/dist/agent-store/postgres.d.ts.map +1 -0
- package/dist/agent-store/postgres.js +374 -0
- package/dist/agent-store/postgres.js.map +1 -0
- package/dist/agent-store/shared.d.ts +19 -0
- package/dist/agent-store/shared.d.ts.map +1 -0
- package/dist/agent-store/shared.js +137 -0
- package/dist/agent-store/shared.js.map +1 -0
- package/dist/agent-store/sqlite.d.ts +4 -0
- package/dist/agent-store/sqlite.d.ts.map +1 -0
- package/dist/agent-store/sqlite.js +362 -0
- package/dist/agent-store/sqlite.js.map +1 -0
- package/dist/agent-store.d.ts +5 -21
- package/dist/agent-store.d.ts.map +1 -1
- package/dist/agent-store.js +5 -1540
- package/dist/agent-store.js.map +1 -1
- package/dist/agent.d.ts +6 -57
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +6 -2622
- package/dist/agent.js.map +1 -1
- package/dist/agents-entry.d.ts +19 -0
- package/dist/agents-entry.d.ts.map +1 -0
- package/dist/agents-entry.js +14 -0
- package/dist/agents-entry.js.map +1 -0
- package/dist/api-stability.d.ts.map +1 -1
- package/dist/api-stability.js +1 -0
- package/dist/api-stability.js.map +1 -1
- package/dist/artifact/file.d.ts +6 -0
- package/dist/artifact/file.d.ts.map +1 -0
- package/dist/artifact/file.js +380 -0
- package/dist/artifact/file.js.map +1 -0
- package/dist/artifact/memory.d.ts +3 -0
- package/dist/artifact/memory.d.ts.map +1 -0
- package/dist/artifact/memory.js +80 -0
- package/dist/artifact/memory.js.map +1 -0
- package/dist/artifact/postgres.d.ts +3 -0
- package/dist/artifact/postgres.d.ts.map +1 -0
- package/dist/artifact/postgres.js +283 -0
- package/dist/artifact/postgres.js.map +1 -0
- package/dist/artifact/shared.d.ts +208 -0
- package/dist/artifact/shared.d.ts.map +1 -0
- package/dist/artifact/shared.js +523 -0
- package/dist/artifact/shared.js.map +1 -0
- package/dist/artifact/sqlite.d.ts +3 -0
- package/dist/artifact/sqlite.d.ts.map +1 -0
- package/dist/artifact/sqlite.js +283 -0
- package/dist/artifact/sqlite.js.map +1 -0
- package/dist/artifact.d.ts +6 -186
- package/dist/artifact.d.ts.map +1 -1
- package/dist/artifact.js +6 -1536
- package/dist/artifact.js.map +1 -1
- package/dist/catalog-contracts.d.ts +52 -0
- package/dist/catalog-contracts.d.ts.map +1 -0
- package/dist/catalog-contracts.js +250 -0
- package/dist/catalog-contracts.js.map +1 -0
- package/dist/catalog.d.ts +3 -52
- package/dist/catalog.d.ts.map +1 -1
- package/dist/catalog.js +3 -249
- package/dist/catalog.js.map +1 -1
- package/dist/generate-cache-file.d.ts +11 -0
- package/dist/generate-cache-file.d.ts.map +1 -0
- package/dist/generate-cache-file.js +124 -0
- package/dist/generate-cache-file.js.map +1 -0
- package/dist/generate-text.d.ts +2 -5
- package/dist/generate-text.d.ts.map +1 -1
- package/dist/generate-text.js +3 -18
- package/dist/generate-text.js.map +1 -1
- package/dist/generation-entry.d.ts +6 -0
- package/dist/generation-entry.d.ts.map +1 -0
- package/dist/generation-entry.js +6 -0
- package/dist/generation-entry.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/middleware-runtime.d.ts +35 -0
- package/dist/middleware-runtime.d.ts.map +1 -0
- package/dist/middleware-runtime.js +532 -0
- package/dist/middleware-runtime.js.map +1 -0
- package/dist/middleware.d.ts +3 -43
- package/dist/middleware.d.ts.map +1 -1
- package/dist/middleware.js +3 -653
- package/dist/middleware.js.map +1 -1
- package/dist/normalize-messages.d.ts +3 -0
- package/dist/normalize-messages.d.ts.map +1 -0
- package/dist/normalize-messages.js +16 -0
- package/dist/normalize-messages.js.map +1 -0
- package/dist/provider-entry.d.ts +17 -0
- package/dist/provider-entry.d.ts.map +1 -0
- package/dist/provider-entry.js +13 -0
- package/dist/provider-entry.js.map +1 -0
- package/dist/realtime.d.ts +2 -0
- package/dist/realtime.d.ts.map +1 -1
- package/dist/realtime.js +6 -0
- package/dist/realtime.js.map +1 -1
- package/dist/store-key.d.ts +3 -0
- package/dist/store-key.d.ts.map +1 -0
- package/dist/store-key.js +5 -0
- package/dist/store-key.js.map +1 -0
- package/dist/store-security.d.ts +1 -2
- package/dist/store-security.d.ts.map +1 -1
- package/dist/store-security.js +2 -4
- package/dist/store-security.js.map +1 -1
- package/dist/types/agent-state.d.ts +236 -0
- package/dist/types/agent-state.d.ts.map +1 -0
- package/dist/types/agent-state.js +2 -0
- package/dist/types/agent-state.js.map +1 -0
- package/dist/types/agents.d.ts +429 -0
- package/dist/types/agents.d.ts.map +1 -0
- package/dist/types/agents.js +2 -0
- package/dist/types/agents.js.map +1 -0
- package/dist/types/common.d.ts +179 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +2 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/generation.d.ts +109 -0
- package/dist/types/generation.d.ts.map +1 -0
- package/dist/types/generation.js +2 -0
- package/dist/types/generation.js.map +1 -0
- package/dist/types/media-data.d.ts +65 -0
- package/dist/types/media-data.d.ts.map +1 -0
- package/dist/types/media-data.js +2 -0
- package/dist/types/media-data.js.map +1 -0
- package/dist/types/media.d.ts +141 -0
- package/dist/types/media.d.ts.map +1 -0
- package/dist/types/media.js +2 -0
- package/dist/types/media.js.map +1 -0
- package/dist/types/messages.d.ts +82 -0
- package/dist/types/messages.d.ts.map +1 -0
- package/dist/types/messages.js +2 -0
- package/dist/types/messages.js.map +1 -0
- package/dist/types/middleware.d.ts +130 -0
- package/dist/types/middleware.d.ts.map +1 -0
- package/dist/types/middleware.js +2 -0
- package/dist/types/middleware.js.map +1 -0
- package/dist/types/model-tools.d.ts +409 -0
- package/dist/types/model-tools.d.ts.map +1 -0
- package/dist/types/model-tools.js +2 -0
- package/dist/types/model-tools.js.map +1 -0
- package/dist/types/persistence.d.ts +168 -0
- package/dist/types/persistence.d.ts.map +1 -0
- package/dist/types/persistence.js +2 -0
- package/dist/types/persistence.js.map +1 -0
- package/dist/types/provider-resources.d.ts +336 -0
- package/dist/types/provider-resources.d.ts.map +1 -0
- package/dist/types/provider-resources.js +2 -0
- package/dist/types/provider-resources.js.map +1 -0
- package/dist/types/provider.d.ts +23 -0
- package/dist/types/provider.d.ts.map +1 -0
- package/dist/types/provider.js +2 -0
- package/dist/types/provider.js.map +1 -0
- package/dist/types/resource-options.d.ts +88 -0
- package/dist/types/resource-options.d.ts.map +1 -0
- package/dist/types/resource-options.js +2 -0
- package/dist/types/resource-options.js.map +1 -0
- package/dist/types/stream.d.ts +70 -0
- package/dist/types/stream.d.ts.map +1 -0
- package/dist/types/stream.js +2 -0
- package/dist/types/stream.js.map +1 -0
- package/dist/types/ui.d.ts +110 -0
- package/dist/types/ui.d.ts.map +1 -0
- package/dist/types/ui.js +2 -0
- package/dist/types/ui.js.map +1 -0
- package/dist/types.d.ts +16 -2442
- package/dist/types.d.ts.map +1 -1
- package/dist/ui.d.ts.map +1 -1
- package/dist/ui.js +2 -0
- package/dist/ui.js.map +1 -1
- package/dist/workflow-state-service/file.d.ts +5 -0
- package/dist/workflow-state-service/file.d.ts.map +1 -0
- package/dist/workflow-state-service/file.js +142 -0
- package/dist/workflow-state-service/file.js.map +1 -0
- package/dist/workflow-state-service/memory.d.ts +3 -0
- package/dist/workflow-state-service/memory.d.ts.map +1 -0
- package/dist/workflow-state-service/memory.js +27 -0
- package/dist/workflow-state-service/memory.js.map +1 -0
- package/dist/workflow-state-service/postgres.d.ts +4 -0
- package/dist/workflow-state-service/postgres.d.ts.map +1 -0
- package/dist/workflow-state-service/postgres.js +179 -0
- package/dist/workflow-state-service/postgres.js.map +1 -0
- package/dist/workflow-state-service/shared.d.ts +43 -0
- package/dist/workflow-state-service/shared.d.ts.map +1 -0
- package/dist/workflow-state-service/shared.js +107 -0
- package/dist/workflow-state-service/shared.js.map +1 -0
- package/dist/workflow-state-service/sqlite.d.ts +4 -0
- package/dist/workflow-state-service/sqlite.d.ts.map +1 -0
- package/dist/workflow-state-service/sqlite.js +183 -0
- package/dist/workflow-state-service/sqlite.js.map +1 -0
- package/dist/workflow-state-service.d.ts +6 -33
- package/dist/workflow-state-service.d.ts.map +1 -1
- package/dist/workflow-state-service.js +6 -626
- package/dist/workflow-state-service.js.map +1 -1
- package/package.json +17 -1
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { normalizeAgentRunState } from "../agent-state.js";
|
|
2
|
+
import { ConflictError, ValidationError } from "../errors.js";
|
|
3
|
+
import { createMergedAbortSignal } from "../runtime.js";
|
|
4
|
+
import { randomId } from "./common.js";
|
|
5
|
+
const DEFAULT_AGENT_LEASE_TTL_MS = 30_000;
|
|
6
|
+
const DEFAULT_AGENT_CANCELLATION_POLL_MS = 1_000;
|
|
7
|
+
const DEFAULT_AGENT_MONITOR_SHUTDOWN_TIMEOUT_MS = 1_000;
|
|
8
|
+
export class AgentPolicyTimeoutError extends Error {
|
|
9
|
+
constructor(timeoutMs) {
|
|
10
|
+
super(`Agent run timed out after ${timeoutMs}ms.`);
|
|
11
|
+
this.name = "AgentPolicyTimeoutError";
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export const resolveRunPolicy = (agent, input) => {
|
|
15
|
+
const policy = {
|
|
16
|
+
...(agent.policy ?? {}),
|
|
17
|
+
...(input.policy ?? {})
|
|
18
|
+
};
|
|
19
|
+
return Object.keys(policy).length ? policy : undefined;
|
|
20
|
+
};
|
|
21
|
+
export const withAgentPolicyTimeout = async (operation, timeout) => {
|
|
22
|
+
try {
|
|
23
|
+
return timeout.timeoutPromise
|
|
24
|
+
? await Promise.race([operation, timeout.timeoutPromise])
|
|
25
|
+
: await operation;
|
|
26
|
+
}
|
|
27
|
+
finally {
|
|
28
|
+
timeout.cleanup();
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
export const createAgentAbortContext = (inputAbortSignal, policy, ...additionalSignals) => {
|
|
32
|
+
if (!policy?.timeoutMs) {
|
|
33
|
+
const merged = createMergedAbortSignal(inputAbortSignal, ...additionalSignals);
|
|
34
|
+
return {
|
|
35
|
+
signal: merged.signal,
|
|
36
|
+
timeoutPromise: undefined,
|
|
37
|
+
cleanup: merged.cleanup,
|
|
38
|
+
isTimedOut: () => false
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
const controller = new AbortController();
|
|
42
|
+
let timedOut = false;
|
|
43
|
+
let timeout;
|
|
44
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
45
|
+
timeout = setTimeout(() => {
|
|
46
|
+
timedOut = true;
|
|
47
|
+
controller.abort();
|
|
48
|
+
reject(new AgentPolicyTimeoutError(policy.timeoutMs));
|
|
49
|
+
}, policy.timeoutMs);
|
|
50
|
+
});
|
|
51
|
+
const merged = createMergedAbortSignal(inputAbortSignal, ...additionalSignals, controller.signal);
|
|
52
|
+
return {
|
|
53
|
+
signal: merged.signal,
|
|
54
|
+
timeoutPromise,
|
|
55
|
+
cleanup: () => {
|
|
56
|
+
merged.cleanup();
|
|
57
|
+
if (timeout) {
|
|
58
|
+
clearTimeout(timeout);
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
isTimedOut: () => timedOut
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
const waitForAgentMonitorShutdown = async (monitor, timeoutMs) => {
|
|
65
|
+
let timeout;
|
|
66
|
+
const deadline = new Promise((resolve) => {
|
|
67
|
+
timeout = setTimeout(resolve, timeoutMs);
|
|
68
|
+
});
|
|
69
|
+
try {
|
|
70
|
+
await Promise.race([monitor, deadline]);
|
|
71
|
+
}
|
|
72
|
+
finally {
|
|
73
|
+
if (timeout)
|
|
74
|
+
clearTimeout(timeout);
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
export const acquireAgentExecutionLease = async (agent, state, policy) => {
|
|
78
|
+
const store = agent.store;
|
|
79
|
+
if (policy?.leaseMode === "disabled" || !store?.acquireLease || !store.renewLease || !store.releaseLease) {
|
|
80
|
+
return {
|
|
81
|
+
supported: false,
|
|
82
|
+
cancelledState: () => undefined,
|
|
83
|
+
leaseLost: () => false,
|
|
84
|
+
release: async () => undefined
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
const ttlMs = policy?.leaseTtlMs ?? DEFAULT_AGENT_LEASE_TTL_MS;
|
|
88
|
+
const heartbeatMs = policy?.heartbeatMs ?? Math.max(250, Math.floor(ttlMs / 3));
|
|
89
|
+
const cancellationPollMs = policy?.cancellationPollMs ?? DEFAULT_AGENT_CANCELLATION_POLL_MS;
|
|
90
|
+
for (const [name, value] of [
|
|
91
|
+
["leaseTtlMs", ttlMs],
|
|
92
|
+
["heartbeatMs", heartbeatMs],
|
|
93
|
+
["cancellationPollMs", cancellationPollMs]
|
|
94
|
+
]) {
|
|
95
|
+
if (!Number.isSafeInteger(value) || value < 1) {
|
|
96
|
+
throw new ValidationError(`Agent policy "${name}" must be a positive integer.`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
if (heartbeatMs >= ttlMs) {
|
|
100
|
+
throw new ValidationError('Agent policy "heartbeatMs" must be less than "leaseTtlMs".');
|
|
101
|
+
}
|
|
102
|
+
const ownerId = randomId("worker");
|
|
103
|
+
const lease = await store.acquireLease(state.runId, { ownerId, ttlMs }, state.scope);
|
|
104
|
+
if (!lease) {
|
|
105
|
+
return undefined;
|
|
106
|
+
}
|
|
107
|
+
const controller = new AbortController();
|
|
108
|
+
let cancelled;
|
|
109
|
+
let lost = false;
|
|
110
|
+
let stopped = false;
|
|
111
|
+
let activeMonitor;
|
|
112
|
+
let lastHeartbeat = Date.now();
|
|
113
|
+
let lastCancellationPoll = 0;
|
|
114
|
+
const intervalMs = Math.max(25, Math.min(heartbeatMs, cancellationPollMs));
|
|
115
|
+
const monitorShutdownTimeoutMs = Math.min(ttlMs, DEFAULT_AGENT_MONITOR_SHUTDOWN_TIMEOUT_MS);
|
|
116
|
+
const cleanupStoppedMonitorLease = async () => {
|
|
117
|
+
try {
|
|
118
|
+
await store.releaseLease?.(state.runId, ownerId, state.scope);
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
// The foreground release remains authoritative; late monitor cleanup is best effort.
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
const monitorLease = async () => {
|
|
125
|
+
const now = Date.now();
|
|
126
|
+
try {
|
|
127
|
+
if (now - lastHeartbeat >= heartbeatMs) {
|
|
128
|
+
const renewed = await store.renewLease?.(state.runId, { ownerId, ttlMs }, state.scope);
|
|
129
|
+
if (stopped) {
|
|
130
|
+
await cleanupStoppedMonitorLease();
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
if (!renewed) {
|
|
134
|
+
lost = true;
|
|
135
|
+
controller.abort(new ConflictError(`Agent run "${state.runId}" lost its worker lease.`));
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
lastHeartbeat = now;
|
|
139
|
+
}
|
|
140
|
+
if (now - lastCancellationPoll >= cancellationPollMs) {
|
|
141
|
+
const latest = await store.load(state.runId, state.scope);
|
|
142
|
+
if (stopped)
|
|
143
|
+
return;
|
|
144
|
+
lastCancellationPoll = now;
|
|
145
|
+
if (latest?.status === "cancel_requested" || latest?.status === "cancelled") {
|
|
146
|
+
cancelled = normalizeAgentRunState(latest);
|
|
147
|
+
controller.abort(new Error(latest.cancellationReason ?? "Agent run was cancelled."));
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
if (stopped) {
|
|
153
|
+
await cleanupStoppedMonitorLease();
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
lost = true;
|
|
157
|
+
controller.abort(error);
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
const timer = setInterval(() => {
|
|
161
|
+
if (stopped || activeMonitor)
|
|
162
|
+
return;
|
|
163
|
+
activeMonitor = monitorLease().finally(() => {
|
|
164
|
+
activeMonitor = undefined;
|
|
165
|
+
});
|
|
166
|
+
}, intervalMs);
|
|
167
|
+
timer.unref?.();
|
|
168
|
+
return {
|
|
169
|
+
supported: true,
|
|
170
|
+
signal: controller.signal,
|
|
171
|
+
cancelledState: () => cancelled,
|
|
172
|
+
leaseLost: () => lost,
|
|
173
|
+
release: async () => {
|
|
174
|
+
stopped = true;
|
|
175
|
+
clearInterval(timer);
|
|
176
|
+
const monitor = activeMonitor;
|
|
177
|
+
if (monitor) {
|
|
178
|
+
await waitForAgentMonitorShutdown(monitor, monitorShutdownTimeoutMs);
|
|
179
|
+
}
|
|
180
|
+
await store.releaseLease?.(state.runId, ownerId, state.scope);
|
|
181
|
+
}
|
|
182
|
+
};
|
|
183
|
+
};
|
|
184
|
+
//# sourceMappingURL=lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/agent/lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { AgentDefinition, AgentRunOutput, AgentRunState, AgentRunPolicy, AgentRunStore, AgentStep, GenerateTextOutput, LanguageModel, ToolExecutionResult } from "../types.js";
|
|
2
|
+
export declare const finalizeState: <TOutput>(agent: AgentDefinition<LanguageModel, any, TOutput>, state: AgentRunState, result: GenerateTextOutput, newSteps: AgentStep[], newToolResults: ToolExecutionResult[]) => AgentRunOutput<TOutput>;
|
|
3
|
+
export declare const saveStateWithRevision: (store: AgentRunStore, state: AgentRunState, serializedNextState?: string) => Promise<void>;
|
|
4
|
+
export declare const claimAgentExecution: <TModel extends LanguageModel>(agent: AgentDefinition<TModel>, state: AgentRunState) => Promise<void>;
|
|
5
|
+
export declare const persistState: <TModel extends LanguageModel>(agent: AgentDefinition<TModel>, state: AgentRunState, policy?: AgentRunPolicy) => Promise<void>;
|
|
6
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/agent/state.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,aAAa,EACb,cAAc,EACd,aAAa,EACb,SAAS,EACT,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAarB,eAAO,MAAM,aAAa,GAAI,OAAO,SAC5B,eAAe,CAAC,aAAa,EAAE,GAAG,EAAE,OAAO,CAAC,SAC5C,aAAa,UACZ,kBAAkB,YAChB,SAAS,EAAE,kBACL,mBAAmB,EAAE,KACpC,cAAc,CAAC,OAAO,CA0DxB,CAAC;AAEF,eAAO,MAAM,qBAAqB,UAAiB,aAAa,SAAS,aAAa,wBAAwB,MAAM,kBAMnH,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAU,MAAM,SAAS,aAAa,SAC7D,eAAe,CAAC,MAAM,CAAC,SACvB,aAAa,kBAQrB,CAAC;AAqBF,eAAO,MAAM,YAAY,GAAU,MAAM,SAAS,aAAa,SACtD,eAAe,CAAC,MAAM,CAAC,SACvB,aAAa,WACX,cAAc,kBA8BxB,CAAC"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { refreshAgentTaskOutcome } from "../agent-reconciliation.js";
|
|
2
|
+
import { getAgentApprovalRequests } from "../agent-approval.js";
|
|
3
|
+
import { normalizeAgentRunState } from "../agent-state.js";
|
|
4
|
+
import { ValidationError } from "../errors.js";
|
|
5
|
+
import { aggregateTokenUsage } from "../generate-text.js";
|
|
6
|
+
import { serializeJsonValue } from "../messages.js";
|
|
7
|
+
import { cloneState, hasToolCalls, toOutput } from "./common.js";
|
|
8
|
+
import { emitTelemetryEvent, invokeOperationalHook } from "./telemetry.js";
|
|
9
|
+
const DEFAULT_AGENT_MAX_STATE_BYTES = 4 * 1024 * 1024;
|
|
10
|
+
export const finalizeState = (agent, state, result, newSteps, newToolResults) => {
|
|
11
|
+
const nextCurrentStep = state.currentStep + newSteps.length;
|
|
12
|
+
const exhausted = nextCurrentStep >= state.maxSteps;
|
|
13
|
+
const lastStep = newSteps.at(-1);
|
|
14
|
+
const unresolvedToolCalls = lastStep?.response ? hasToolCalls(lastStep.response.messages) : false;
|
|
15
|
+
const pendingApprovals = [
|
|
16
|
+
...(result.approvalRequests ?? []),
|
|
17
|
+
...getAgentApprovalRequests(newSteps.flatMap((step) => step.response?.messages ?? []))
|
|
18
|
+
];
|
|
19
|
+
if (pendingApprovals.length) {
|
|
20
|
+
state.status = "waiting_approval";
|
|
21
|
+
state.error = undefined;
|
|
22
|
+
if (lastStep) {
|
|
23
|
+
lastStep.status = "waiting_approval";
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
else if (exhausted && unresolvedToolCalls) {
|
|
27
|
+
state.status = "failed";
|
|
28
|
+
state.error = {
|
|
29
|
+
message: "Agent exhausted maxSteps before reaching a terminal response."
|
|
30
|
+
};
|
|
31
|
+
if (lastStep) {
|
|
32
|
+
lastStep.status = "failed";
|
|
33
|
+
lastStep.error = state.error;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
state.status = "completed";
|
|
38
|
+
state.error = undefined;
|
|
39
|
+
}
|
|
40
|
+
state.messages = result.messages;
|
|
41
|
+
state.steps = [...state.steps, ...newSteps];
|
|
42
|
+
state.toolResults = [...state.toolResults, ...newToolResults];
|
|
43
|
+
state.currentStep = nextCurrentStep;
|
|
44
|
+
state.outputText = result.text;
|
|
45
|
+
if (state.status === "completed") {
|
|
46
|
+
const terminalText = result.steps.at(-1)?.response.text ?? result.text;
|
|
47
|
+
if (agent.outputSchema) {
|
|
48
|
+
let parsedJson;
|
|
49
|
+
try {
|
|
50
|
+
parsedJson = JSON.parse(terminalText);
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
throw new ValidationError("Agent final output is not valid JSON.", { cause: error });
|
|
54
|
+
}
|
|
55
|
+
const parsedOutput = agent.outputSchema.safeParse(parsedJson);
|
|
56
|
+
if (!parsedOutput.success) {
|
|
57
|
+
throw new ValidationError(`Agent final output validation failed: ${parsedOutput.error.message}`);
|
|
58
|
+
}
|
|
59
|
+
state.finalOutput = serializeJsonValue(parsedOutput.data);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
state.finishReason = result.finishReason;
|
|
63
|
+
state.providerFinishReason = result.providerFinishReason;
|
|
64
|
+
state.usage = aggregateTokenUsage([state.usage, result.usage]);
|
|
65
|
+
state.pendingApprovals = pendingApprovals;
|
|
66
|
+
state.updatedAt = Date.now();
|
|
67
|
+
return toOutput(state);
|
|
68
|
+
};
|
|
69
|
+
export const saveStateWithRevision = async (store, state, serializedNextState) => {
|
|
70
|
+
const expectedRevision = state.revision ?? 0;
|
|
71
|
+
const nextRevision = expectedRevision + 1;
|
|
72
|
+
const nextState = { ...state, revision: nextRevision };
|
|
73
|
+
await store.save(serializedNextState === undefined ? cloneState(nextState) : JSON.parse(serializedNextState), { expectedRevision });
|
|
74
|
+
state.revision = nextRevision;
|
|
75
|
+
};
|
|
76
|
+
export const claimAgentExecution = async (agent, state) => {
|
|
77
|
+
state.status = "running";
|
|
78
|
+
state.updatedAt = Date.now();
|
|
79
|
+
const serialized = assertStateSize(agent, agent.store ? normalizeAgentRunState({ ...state, revision: (state.revision ?? 0) + 1 }) : state);
|
|
80
|
+
if (agent.store) {
|
|
81
|
+
await saveStateWithRevision(agent.store, state, serialized);
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
const assertStateSize = (agent, state, policy) => {
|
|
85
|
+
const limit = policy?.maxStateBytes ?? agent.policy?.maxStateBytes ?? DEFAULT_AGENT_MAX_STATE_BYTES;
|
|
86
|
+
if (!Number.isSafeInteger(limit) || limit < 1) {
|
|
87
|
+
throw new ValidationError('Agent policy "maxStateBytes" must be a positive integer.');
|
|
88
|
+
}
|
|
89
|
+
const serialized = JSON.stringify(state);
|
|
90
|
+
const bytes = new TextEncoder().encode(serialized).byteLength;
|
|
91
|
+
if (bytes > limit) {
|
|
92
|
+
throw new ValidationError(`Agent run state is ${bytes} bytes and exceeds maxStateBytes=${limit}. Offload large tool outputs to artifacts or raise the explicit limit.`);
|
|
93
|
+
}
|
|
94
|
+
return serialized;
|
|
95
|
+
};
|
|
96
|
+
export const persistState = async (agent, state, policy) => {
|
|
97
|
+
state.updatedAt = Date.now();
|
|
98
|
+
await refreshAgentTaskOutcome(state, agent.store);
|
|
99
|
+
const serialized = assertStateSize(agent, agent.store ? normalizeAgentRunState({ ...state, revision: (state.revision ?? 0) + 1 }) : state, policy);
|
|
100
|
+
if (agent.store) {
|
|
101
|
+
await saveStateWithRevision(agent.store, state, serialized);
|
|
102
|
+
}
|
|
103
|
+
await emitTelemetryEvent(agent, {
|
|
104
|
+
type: "state-saved",
|
|
105
|
+
runId: state.runId,
|
|
106
|
+
agentId: state.agentId,
|
|
107
|
+
status: state.status
|
|
108
|
+
});
|
|
109
|
+
await invokeOperationalHook(agent, "memory", "save", state.runId, agent.memory?.save
|
|
110
|
+
? () => agent.memory.save({
|
|
111
|
+
runId: state.runId,
|
|
112
|
+
agentId: state.agentId,
|
|
113
|
+
scope: state.scope,
|
|
114
|
+
state: cloneState(state),
|
|
115
|
+
metadata: state.metadata
|
|
116
|
+
})
|
|
117
|
+
: undefined, undefined);
|
|
118
|
+
};
|
|
119
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/agent/state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { AgentApprovalRequest, AgentApprovalResponse, AgentDefinition, AgentRunState, AgentStep, AgentStatus, AgentTelemetryEvent, LanguageModel, ModelMessage, ToolApprovalEvent } from "../types.js";
|
|
2
|
+
export declare const invokeOperationalHook: <TModel extends LanguageModel, TResult>(agent: AgentDefinition<TModel>, source: "telemetry" | "memory", operation: string, runId: string | undefined, callback: (() => TResult | Promise<TResult>) | undefined, fallback: TResult) => Promise<TResult>;
|
|
3
|
+
export declare const emitTelemetryEvent: <TModel extends LanguageModel>(agent: AgentDefinition<TModel>, event: AgentTelemetryEvent) => Promise<void>;
|
|
4
|
+
export declare const emitInvocationStartTelemetry: <TModel extends LanguageModel>(agent: AgentDefinition<TModel>, runId: string, startedAt: number, maxSteps: number) => Promise<void>;
|
|
5
|
+
export declare const emitInvocationFinishTelemetry: <TModel extends LanguageModel>(agent: AgentDefinition<TModel>, runId: string, status: AgentStatus, error: Error | undefined) => Promise<void>;
|
|
6
|
+
export declare const withAgentTelemetryRunContext: <TModel extends LanguageModel, TResult>(agent: AgentDefinition<TModel>, runId: string, callback: () => TResult | Promise<TResult>) => Promise<TResult>;
|
|
7
|
+
export declare const emitFinalizedStepTelemetry: <TModel extends LanguageModel>(agent: AgentDefinition<TModel>, state: AgentRunState, steps: AgentStep[]) => Promise<void>;
|
|
8
|
+
export declare const emitApprovalTelemetry: <TModel extends LanguageModel>(agent: AgentDefinition<TModel>, state: AgentRunState, approvals: AgentApprovalRequest[]) => Promise<void>;
|
|
9
|
+
export declare const emitToolApprovalTelemetry: <TModel extends LanguageModel>(agent: AgentDefinition<TModel>, state: AgentRunState, event: ToolApprovalEvent) => Promise<void>;
|
|
10
|
+
export declare const emitRunStartTelemetry: <TModel extends LanguageModel>(agent: AgentDefinition<TModel>, state: AgentRunState, memoryMessages: ModelMessage[], approvals: AgentApprovalResponse[] | undefined, invocationStartedAt: number) => Promise<void>;
|
|
11
|
+
export declare const emitRunFinishTelemetry: <TModel extends LanguageModel>(agent: AgentDefinition<TModel>, state: AgentRunState) => Promise<void>;
|
|
12
|
+
//# sourceMappingURL=telemetry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/agent/telemetry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,EACf,aAAa,EACb,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,aAAa,EACb,YAAY,EACZ,iBAAiB,EAClB,MAAM,aAAa,CAAC;AAKrB,eAAO,MAAM,qBAAqB,GAAU,MAAM,SAAS,aAAa,EAAE,OAAO,SACxE,eAAe,CAAC,MAAM,CAAC,UACtB,WAAW,GAAG,QAAQ,aACnB,MAAM,SACV,MAAM,GAAG,SAAS,YACf,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS,YAC9C,OAAO,KAChB,OAAO,CAAC,OAAO,CAwBjB,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAU,MAAM,SAAS,aAAa,SAC5D,eAAe,CAAC,MAAM,CAAC,SACvB,mBAAmB,kBAW3B,CAAC;AAEF,eAAO,MAAM,4BAA4B,GAAU,MAAM,SAAS,aAAa,SACtE,eAAe,CAAC,MAAM,CAAC,SACvB,MAAM,aACF,MAAM,YACP,MAAM,kBAejB,CAAC;AAEF,eAAO,MAAM,6BAA6B,GAAU,MAAM,SAAS,aAAa,SACvE,eAAe,CAAC,MAAM,CAAC,SACvB,MAAM,UACL,WAAW,SACZ,KAAK,GAAG,SAAS,kBAczB,CAAC;AAEF,eAAO,MAAM,4BAA4B,GAAI,MAAM,SAAS,aAAa,EAAE,OAAO,SACzE,eAAe,CAAC,MAAM,CAAC,SACvB,MAAM,YACH,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,KACzC,OAAO,CAAC,OAAO,CAgCjB,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAU,MAAM,SAAS,aAAa,SACpE,eAAe,CAAC,MAAM,CAAC,SACvB,aAAa,SACb,SAAS,EAAE,kBAUnB,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAU,MAAM,SAAS,aAAa,SAC/D,eAAe,CAAC,MAAM,CAAC,SACvB,aAAa,aACT,oBAAoB,EAAE,kBAUlC,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAAU,MAAM,SAAS,aAAa,SACnE,eAAe,CAAC,MAAM,CAAC,SACvB,aAAa,SACb,iBAAiB,kBAWzB,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAU,MAAM,SAAS,aAAa,SAC/D,eAAe,CAAC,MAAM,CAAC,SACvB,aAAa,kBACJ,YAAY,EAAE,aACnB,qBAAqB,EAAE,GAAG,SAAS,uBACzB,MAAM,kBAuC5B,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAU,MAAM,SAAS,aAAa,SAChE,eAAe,CAAC,MAAM,CAAC,SACvB,aAAa,kBAWrB,CAAC"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { runViewSink } from "../agent-run-view.js";
|
|
2
|
+
import { cloneState } from "./common.js";
|
|
3
|
+
export const invokeOperationalHook = async (agent, source, operation, runId, callback, fallback) => {
|
|
4
|
+
if (!callback) {
|
|
5
|
+
return fallback;
|
|
6
|
+
}
|
|
7
|
+
try {
|
|
8
|
+
return await callback();
|
|
9
|
+
}
|
|
10
|
+
catch (error) {
|
|
11
|
+
const normalizedError = error instanceof Error ? error : new Error(String(error));
|
|
12
|
+
try {
|
|
13
|
+
await agent.hookFailurePolicy?.onError?.({
|
|
14
|
+
source,
|
|
15
|
+
operation,
|
|
16
|
+
runId,
|
|
17
|
+
error: normalizedError
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
// Reporting an observer failure must never recursively fail the run.
|
|
22
|
+
}
|
|
23
|
+
if (agent.hookFailurePolicy?.[source] === "fail") {
|
|
24
|
+
throw normalizedError;
|
|
25
|
+
}
|
|
26
|
+
return fallback;
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
export const emitTelemetryEvent = async (agent, event) => {
|
|
30
|
+
await agent[runViewSink]?.(event, agent);
|
|
31
|
+
await invokeOperationalHook(agent, "telemetry", event.type, event.runId, agent.onTelemetryEvent ? () => agent.onTelemetryEvent(event) : undefined, undefined);
|
|
32
|
+
};
|
|
33
|
+
export const emitInvocationStartTelemetry = async (agent, runId, startedAt, maxSteps) => {
|
|
34
|
+
try {
|
|
35
|
+
await agent.onTelemetryEvent?.startInvocation?.({
|
|
36
|
+
runId,
|
|
37
|
+
agentId: agent.id,
|
|
38
|
+
agentName: agent.name,
|
|
39
|
+
provider: agent.model.provider,
|
|
40
|
+
modelId: agent.model.modelId,
|
|
41
|
+
maxSteps,
|
|
42
|
+
startedAt
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
// Invocation telemetry is best-effort and cannot replace setup/business errors.
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
export const emitInvocationFinishTelemetry = async (agent, runId, status, error) => {
|
|
50
|
+
try {
|
|
51
|
+
await agent.onTelemetryEvent?.finishInvocation?.({
|
|
52
|
+
runId,
|
|
53
|
+
agentId: agent.id,
|
|
54
|
+
agentName: agent.name,
|
|
55
|
+
status,
|
|
56
|
+
error,
|
|
57
|
+
finishedAt: Date.now()
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// Invocation telemetry is best-effort and cannot replace setup/business errors.
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
export const withAgentTelemetryRunContext = (agent, runId, callback) => {
|
|
65
|
+
const telemetryObserver = agent.onTelemetryEvent;
|
|
66
|
+
const wrapper = telemetryObserver?.withRunContext;
|
|
67
|
+
if (!wrapper)
|
|
68
|
+
return Promise.resolve().then(callback);
|
|
69
|
+
let execution;
|
|
70
|
+
let callbackError;
|
|
71
|
+
let callbackFailed = false;
|
|
72
|
+
const executeOnce = () => {
|
|
73
|
+
execution ??= Promise.resolve()
|
|
74
|
+
.then(callback)
|
|
75
|
+
.catch((error) => {
|
|
76
|
+
callbackFailed = true;
|
|
77
|
+
callbackError = error;
|
|
78
|
+
throw error;
|
|
79
|
+
});
|
|
80
|
+
return execution;
|
|
81
|
+
};
|
|
82
|
+
return Promise.resolve()
|
|
83
|
+
.then(async () => {
|
|
84
|
+
await wrapper.call(telemetryObserver, runId, executeOnce);
|
|
85
|
+
return executeOnce();
|
|
86
|
+
})
|
|
87
|
+
.catch(async (wrapperError) => {
|
|
88
|
+
if (callbackFailed)
|
|
89
|
+
throw callbackError;
|
|
90
|
+
try {
|
|
91
|
+
return await executeOnce();
|
|
92
|
+
}
|
|
93
|
+
catch (executionError) {
|
|
94
|
+
throw callbackFailed ? callbackError : executionError ?? wrapperError;
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
};
|
|
98
|
+
export const emitFinalizedStepTelemetry = async (agent, state, steps) => {
|
|
99
|
+
for (const step of steps) {
|
|
100
|
+
await emitTelemetryEvent(agent, {
|
|
101
|
+
type: "step-finish",
|
|
102
|
+
runId: state.runId,
|
|
103
|
+
agentId: state.agentId,
|
|
104
|
+
step
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
export const emitApprovalTelemetry = async (agent, state, approvals) => {
|
|
109
|
+
for (const approval of approvals) {
|
|
110
|
+
await emitTelemetryEvent(agent, {
|
|
111
|
+
type: "approval-request",
|
|
112
|
+
runId: state.runId,
|
|
113
|
+
agentId: state.agentId,
|
|
114
|
+
approval
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
export const emitToolApprovalTelemetry = async (agent, state, event) => {
|
|
119
|
+
await emitTelemetryEvent(agent, {
|
|
120
|
+
type: "tool-approval",
|
|
121
|
+
runId: state.runId,
|
|
122
|
+
agentId: state.agentId,
|
|
123
|
+
toolCall: event.request.toolCall,
|
|
124
|
+
approved: event.decision.approved,
|
|
125
|
+
reason: event.decision.reason,
|
|
126
|
+
metadata: event.decision.metadata
|
|
127
|
+
});
|
|
128
|
+
};
|
|
129
|
+
export const emitRunStartTelemetry = async (agent, state, memoryMessages, approvals, invocationStartedAt) => {
|
|
130
|
+
await emitTelemetryEvent(agent, {
|
|
131
|
+
type: "run-start",
|
|
132
|
+
runId: state.runId,
|
|
133
|
+
agentId: state.agentId,
|
|
134
|
+
agentName: agent.name,
|
|
135
|
+
provider: state.provider,
|
|
136
|
+
modelId: state.modelId,
|
|
137
|
+
maxSteps: state.maxSteps,
|
|
138
|
+
startedAt: invocationStartedAt
|
|
139
|
+
});
|
|
140
|
+
if (state.handoff) {
|
|
141
|
+
await emitTelemetryEvent(agent, {
|
|
142
|
+
type: "handoff",
|
|
143
|
+
runId: state.runId,
|
|
144
|
+
agentId: state.agentId,
|
|
145
|
+
handoff: state.handoff
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
if (memoryMessages.length) {
|
|
149
|
+
await emitTelemetryEvent(agent, {
|
|
150
|
+
type: "memory-loaded",
|
|
151
|
+
runId: state.runId,
|
|
152
|
+
agentId: state.agentId,
|
|
153
|
+
messageCount: memoryMessages.length
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
for (const approval of approvals ?? []) {
|
|
157
|
+
await emitTelemetryEvent(agent, {
|
|
158
|
+
type: "approval-resolved",
|
|
159
|
+
runId: state.runId,
|
|
160
|
+
agentId: state.agentId,
|
|
161
|
+
approval
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
export const emitRunFinishTelemetry = async (agent, state) => {
|
|
166
|
+
await emitTelemetryEvent(agent, {
|
|
167
|
+
type: "run-finish",
|
|
168
|
+
runId: state.runId,
|
|
169
|
+
agentId: state.agentId,
|
|
170
|
+
agentName: agent.name,
|
|
171
|
+
status: state.status,
|
|
172
|
+
state: cloneState(state),
|
|
173
|
+
finishedAt: Date.now()
|
|
174
|
+
});
|
|
175
|
+
};
|
|
176
|
+
//# sourceMappingURL=telemetry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/agent/telemetry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { AgentDefinition, AgentExecutionEnvironment, AgentExecutionEnvironmentSession, AgentRunState, JsonValue, LanguageModel, ToolDefinition } from "../types.js";
|
|
2
|
+
export declare const durableToolCallId: (runId: string, step: number, providerToolCallId: string, toolName: string, input: JsonValue) => string;
|
|
3
|
+
export declare const wrapToolWithExecutionEnvironment: (tool: ToolDefinition, session: AgentExecutionEnvironmentSession) => ToolDefinition;
|
|
4
|
+
export declare const wrapToolWithJournal: <TModel extends LanguageModel>(agent: AgentDefinition<TModel>, state: AgentRunState, tool: ToolDefinition) => ToolDefinition;
|
|
5
|
+
export declare const acquireExecutionEnvironment: <TContext>(environment: AgentExecutionEnvironment<TContext> | undefined, state: AgentRunState, context: TContext | undefined, abortSignal: AbortSignal | undefined) => Promise<AgentExecutionEnvironmentSession<TContext> | undefined>;
|
|
6
|
+
//# sourceMappingURL=tool-execution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-execution.d.ts","sourceRoot":"","sources":["../../src/agent/tool-execution.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,eAAe,EACf,yBAAyB,EACzB,gCAAgC,EAChC,aAAa,EAEb,SAAS,EACT,aAAa,EACb,cAAc,EAGf,MAAM,aAAa,CAAC;AAerB,eAAO,MAAM,iBAAiB,UACrB,MAAM,QACP,MAAM,sBACQ,MAAM,YAChB,MAAM,SACT,SAAS,KACf,MAGiB,CAAC;AAErB,eAAO,MAAM,gCAAgC,SACrC,cAAc,WACX,gCAAgC,KACxC,cA2DF,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,MAAM,SAAS,aAAa,SACvD,eAAe,CAAC,MAAM,CAAC,SACvB,aAAa,QACd,cAAc,KACnB,cAoFF,CAAC;AAEF,eAAO,MAAM,2BAA2B,GAAU,QAAQ,eAC3C,yBAAyB,CAAC,QAAQ,CAAC,GAAG,SAAS,SACrD,aAAa,WACX,QAAQ,GAAG,SAAS,eAChB,WAAW,GAAG,SAAS,KACnC,OAAO,CAAC,gCAAgC,CAAC,QAAQ,CAAC,GAAG,SAAS,CA+BhE,CAAC"}
|