@axiastudio/aioc 0.2.11 → 0.2.12
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 +13 -1
- package/dist/run-record.d.ts +5 -0
- package/dist/run-record.d.ts.map +1 -1
- package/dist/run-recorder-runtime.d.ts +6 -1
- package/dist/run-recorder-runtime.d.ts.map +1 -1
- package/dist/run-recorder-runtime.js +86 -44
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +11 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -23,7 +23,7 @@ Its core job is to make agent execution boundaries explicit, testable, auditable
|
|
|
23
23
|
|
|
24
24
|
## Release Status
|
|
25
25
|
|
|
26
|
-
Current stable release: `0.2.
|
|
26
|
+
Current stable release: `0.2.12`.
|
|
27
27
|
The stable line started with `0.1.0`.
|
|
28
28
|
The core runtime surface is compatibility-managed. Breaking changes to the stable surface should ship only with explicit migration guidance and release notes.
|
|
29
29
|
|
|
@@ -52,6 +52,9 @@ AIOC `0.2.10` hardens tool authorization around schema-normalized RFC 8785 JSON
|
|
|
52
52
|
snapshots and adds opt-in Chat Completions `response_format` forwarding.
|
|
53
53
|
AIOC `0.2.11` fixes Chat Completions `reasoning_effort` forwarding from agent
|
|
54
54
|
model settings, including YAML descriptors.
|
|
55
|
+
AIOC `0.2.12` processes tools before the first requested handoff, without
|
|
56
|
+
fallback, and adds optional agent execution evidence to `RunRecord`.
|
|
57
|
+
See the `0.2.12` migration notes in `CHANGELOG.md` for the handoff behavior change.
|
|
55
58
|
|
|
56
59
|
### Experimental Packages
|
|
57
60
|
|
|
@@ -161,6 +164,10 @@ console.log(result.finalOutput);
|
|
|
161
164
|
- thread history utilities `toThreadHistory(...)`, `appendUserMessage(...)`, `replaceThreadHistory(...)`, `applyRunResultHistory(...)`
|
|
162
165
|
- JSON helper `toJsonValue(...)`
|
|
163
166
|
|
|
167
|
+
Within each model response, ordinary tools run before the first requested
|
|
168
|
+
handoff. Later handoffs are ignored, not used as authorization fallbacks. See
|
|
169
|
+
[runtime execution order](https://axiastudio.github.io/aioc/reference/run/#tool-and-handoff-order).
|
|
170
|
+
|
|
164
171
|
## Agent Harness Descriptor
|
|
165
172
|
|
|
166
173
|
- `buildAgentHarness(...)`
|
|
@@ -231,6 +238,11 @@ Privacy notes:
|
|
|
231
238
|
- `contextSnapshot` captures the initial run context, not final mutable app state.
|
|
232
239
|
- sink adapters should implement encryption, access controls, retention, and deletion.
|
|
233
240
|
|
|
241
|
+
Optional `initialAgentName`, `executionRecordingStatus`, and handoff decision
|
|
242
|
+
`handoffApplied` fields support reconstructing agent visits without treating
|
|
243
|
+
authorization as proof of a transition. `agentName` remains the final agent.
|
|
244
|
+
See [Agent Execution](https://axiastudio.github.io/aioc/run-records/#agent-execution).
|
|
245
|
+
|
|
234
246
|
## RunRecord Utilities (Minimal)
|
|
235
247
|
|
|
236
248
|
### `extractToolCalls(...)`
|
package/dist/run-record.d.ts
CHANGED
|
@@ -16,6 +16,8 @@ export interface PolicyDecisionRecord {
|
|
|
16
16
|
resultMode?: "throw" | "tool_result";
|
|
17
17
|
policyVersion?: string;
|
|
18
18
|
resource: PolicyResourceSnapshot;
|
|
19
|
+
/** Handoff application evidence, not a policy outcome. Absent means unknown. */
|
|
20
|
+
handoffApplied?: boolean;
|
|
19
21
|
expiresAt?: string;
|
|
20
22
|
metadata?: Record<string, unknown>;
|
|
21
23
|
}
|
|
@@ -89,6 +91,9 @@ export interface RunRecord<TContext = unknown> {
|
|
|
89
91
|
completedAt: string;
|
|
90
92
|
status: RunRecordStatus;
|
|
91
93
|
agentName: string;
|
|
94
|
+
initialAgentName?: string;
|
|
95
|
+
/** Completeness of agent execution evidence, independent of run success. */
|
|
96
|
+
executionRecordingStatus?: "complete" | "partial";
|
|
92
97
|
providerName?: string;
|
|
93
98
|
model?: string;
|
|
94
99
|
question: string;
|
package/dist/run-record.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-record.d.ts","sourceRoot":"","sources":["../src/run-record.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"run-record.d.ts","sourceRoot":"","sources":["../src/run-record.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { GuardrailDecisionRecord, PolicyDecisionRecord, PromptSnapshotRecord, RequestFingerprintRecord, RunRecordOptions, SuspendedProposal } from "./run-record";
|
|
2
2
|
import type { AgentInputItem } from "./types";
|
|
3
|
-
export type PendingPolicyDecisionRecord = Omit<PolicyDecisionRecord, "timestamp">;
|
|
3
|
+
export type PendingPolicyDecisionRecord = Omit<PolicyDecisionRecord, "timestamp" | "handoffApplied">;
|
|
4
4
|
export type PendingGuardrailDecisionRecord = Omit<GuardrailDecisionRecord, "timestamp">;
|
|
5
5
|
export type PendingPromptSnapshotRecord = Omit<PromptSnapshotRecord, "timestamp" | "promptHash" | "promptText"> & {
|
|
6
6
|
promptText?: string;
|
|
@@ -18,6 +18,7 @@ export type PendingRequestFingerprintRecord = Omit<RequestFingerprintRecord, "ti
|
|
|
18
18
|
interface RunRecorderCreateOptions<TContext> {
|
|
19
19
|
input: string | AgentInputItem[];
|
|
20
20
|
inputItemCount: number;
|
|
21
|
+
initialAgentName: string;
|
|
21
22
|
context: TContext;
|
|
22
23
|
providerName: string;
|
|
23
24
|
recordOptions?: RunRecordOptions<TContext>;
|
|
@@ -33,6 +34,7 @@ export declare class RunRecorder<TContext = unknown> {
|
|
|
33
34
|
private readonly startedAt;
|
|
34
35
|
private readonly question;
|
|
35
36
|
private readonly inputItemCount;
|
|
37
|
+
private readonly initialAgentName;
|
|
36
38
|
private readonly providerName;
|
|
37
39
|
private readonly metadata?;
|
|
38
40
|
private readonly contextSnapshot;
|
|
@@ -44,10 +46,13 @@ export declare class RunRecorder<TContext = unknown> {
|
|
|
44
46
|
private readonly requestFingerprints;
|
|
45
47
|
private observedFinalOutput;
|
|
46
48
|
private runRecordWritten;
|
|
49
|
+
private executionRecordingStatus;
|
|
47
50
|
private constructor();
|
|
48
51
|
static create<TContext = unknown>(options: RunRecorderCreateOptions<TContext>): Promise<RunRecorder<TContext>>;
|
|
49
52
|
get runId(): string;
|
|
53
|
+
private captureExecutionEvidence;
|
|
50
54
|
onPolicyDecision: (decision: PendingPolicyDecisionRecord) => void;
|
|
55
|
+
onHandoffApplied: (turn: number, callId: string) => void;
|
|
51
56
|
onSuspendedProposal: (proposal: SuspendedProposal) => void;
|
|
52
57
|
onGuardrailDecision: (decision: PendingGuardrailDecisionRecord) => void;
|
|
53
58
|
onPromptSnapshot: (snapshot: PendingPromptSnapshotRecord) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-recorder-runtime.d.ts","sourceRoot":"","sources":["../src/run-recorder-runtime.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,EAGxB,gBAAgB,EAEhB,iBAAiB,EAClB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,MAAM,MAAM,2BAA2B,GAAG,IAAI,CAC5C,oBAAoB,EACpB,WAAW,
|
|
1
|
+
{"version":3,"file":"run-recorder-runtime.d.ts","sourceRoot":"","sources":["../src/run-recorder-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -108,6 +108,7 @@ class RunRecorder {
|
|
|
108
108
|
startedAt;
|
|
109
109
|
question;
|
|
110
110
|
inputItemCount;
|
|
111
|
+
initialAgentName;
|
|
111
112
|
providerName;
|
|
112
113
|
metadata;
|
|
113
114
|
contextSnapshot;
|
|
@@ -119,12 +120,14 @@ class RunRecorder {
|
|
|
119
120
|
requestFingerprints = [];
|
|
120
121
|
observedFinalOutput = "";
|
|
121
122
|
runRecordWritten = false;
|
|
122
|
-
|
|
123
|
+
executionRecordingStatus = "complete";
|
|
124
|
+
constructor(runRecordWriter, runRecordId, startedAt, question, inputItemCount, initialAgentName, providerName, metadata, contextSnapshot, includePromptText) {
|
|
123
125
|
this.runRecordWriter = runRecordWriter;
|
|
124
126
|
this.runRecordId = runRecordId;
|
|
125
127
|
this.startedAt = startedAt;
|
|
126
128
|
this.question = question;
|
|
127
129
|
this.inputItemCount = inputItemCount;
|
|
130
|
+
this.initialAgentName = initialAgentName;
|
|
128
131
|
this.providerName = providerName;
|
|
129
132
|
this.metadata = metadata;
|
|
130
133
|
this.contextSnapshot = contextSnapshot;
|
|
@@ -136,15 +139,41 @@ class RunRecorder {
|
|
|
136
139
|
const startedAt = new Date().toISOString();
|
|
137
140
|
const question = extractQuestion(options.input);
|
|
138
141
|
const contextSnapshot = await resolveContextSnapshot(options.context, options.recordOptions);
|
|
139
|
-
return new RunRecorder(runRecordWriter, runRecordId, startedAt, question, options.inputItemCount, options.providerName, options.recordOptions?.metadata, contextSnapshot, options.recordOptions?.includePromptText ?? false);
|
|
142
|
+
return new RunRecorder(runRecordWriter, runRecordId, startedAt, question, options.inputItemCount, options.initialAgentName, options.providerName, options.recordOptions?.metadata, contextSnapshot, options.recordOptions?.includePromptText ?? false);
|
|
140
143
|
}
|
|
141
144
|
get runId() {
|
|
142
145
|
return this.runRecordId;
|
|
143
146
|
}
|
|
147
|
+
captureExecutionEvidence(capture) {
|
|
148
|
+
try {
|
|
149
|
+
capture();
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
this.executionRecordingStatus = "partial";
|
|
153
|
+
}
|
|
154
|
+
}
|
|
144
155
|
onPolicyDecision = (decision) => {
|
|
145
|
-
this.
|
|
146
|
-
|
|
147
|
-
|
|
156
|
+
this.captureExecutionEvidence(() => {
|
|
157
|
+
this.policyDecisions.push({
|
|
158
|
+
timestamp: new Date().toISOString(),
|
|
159
|
+
...decision,
|
|
160
|
+
...(decision.resource.kind === "handoff" &&
|
|
161
|
+
decision.decision !== "allow"
|
|
162
|
+
? { handoffApplied: false }
|
|
163
|
+
: {}),
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
};
|
|
167
|
+
onHandoffApplied = (turn, callId) => {
|
|
168
|
+
this.captureExecutionEvidence(() => {
|
|
169
|
+
const decision = this.policyDecisions.find((entry) => entry.resource.kind === "handoff" &&
|
|
170
|
+
entry.turn === turn &&
|
|
171
|
+
entry.callId === callId);
|
|
172
|
+
if (!decision || decision.decision !== "allow") {
|
|
173
|
+
this.executionRecordingStatus = "partial";
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
decision.handoffApplied = true;
|
|
148
177
|
});
|
|
149
178
|
};
|
|
150
179
|
onSuspendedProposal = (proposal) => {
|
|
@@ -157,47 +186,51 @@ class RunRecorder {
|
|
|
157
186
|
});
|
|
158
187
|
};
|
|
159
188
|
onPromptSnapshot = (snapshot) => {
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
189
|
+
this.captureExecutionEvidence(() => {
|
|
190
|
+
const normalizedPrompt = snapshot.promptText ?? "";
|
|
191
|
+
this.promptSnapshots.push({
|
|
192
|
+
timestamp: new Date().toISOString(),
|
|
193
|
+
turn: snapshot.turn,
|
|
194
|
+
agentName: snapshot.agentName,
|
|
195
|
+
model: snapshot.model,
|
|
196
|
+
promptVersion: snapshot.promptVersion,
|
|
197
|
+
promptHash: hashPrompt(normalizedPrompt),
|
|
198
|
+
promptText: this.includePromptText ? normalizedPrompt : undefined,
|
|
199
|
+
});
|
|
169
200
|
});
|
|
170
201
|
};
|
|
171
202
|
onRequestFingerprint = (fingerprint) => {
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
203
|
+
this.captureExecutionEvidence(() => {
|
|
204
|
+
const normalizedSystemPrompt = fingerprint.systemPrompt ?? "";
|
|
205
|
+
const normalizedModelSettings = fingerprint.modelSettings ?? {};
|
|
206
|
+
const normalizedTools = fingerprint.tools.map((tool) => ({
|
|
207
|
+
name: tool.name,
|
|
208
|
+
description: tool.description,
|
|
209
|
+
parameters: tool.parameters,
|
|
210
|
+
}));
|
|
211
|
+
const requestPayload = {
|
|
212
|
+
model: fingerprint.model,
|
|
213
|
+
systemPrompt: normalizedSystemPrompt,
|
|
214
|
+
messages: fingerprint.messages,
|
|
215
|
+
tools: normalizedTools,
|
|
216
|
+
modelSettings: normalizedModelSettings,
|
|
217
|
+
};
|
|
218
|
+
this.requestFingerprints.push({
|
|
219
|
+
timestamp: new Date().toISOString(),
|
|
220
|
+
turn: fingerprint.turn,
|
|
221
|
+
agentName: fingerprint.agentName,
|
|
222
|
+
providerName: fingerprint.providerName,
|
|
223
|
+
model: fingerprint.model,
|
|
224
|
+
runtimeVersion: RUNTIME_VERSION,
|
|
225
|
+
fingerprintSchemaVersion: REQUEST_FINGERPRINT_SCHEMA_VERSION,
|
|
226
|
+
requestHash: (0, canonical_json_1.hashCanonicalJsonValue)(requestPayload),
|
|
227
|
+
systemPromptHash: (0, canonical_json_1.hashCanonicalJsonValue)(normalizedSystemPrompt),
|
|
228
|
+
messagesHash: (0, canonical_json_1.hashCanonicalJsonValue)(fingerprint.messages),
|
|
229
|
+
toolsHash: (0, canonical_json_1.hashCanonicalJsonValue)(normalizedTools),
|
|
230
|
+
modelSettingsHash: (0, canonical_json_1.hashCanonicalJsonValue)(normalizedModelSettings),
|
|
231
|
+
messageCount: fingerprint.messages.length,
|
|
232
|
+
toolCount: normalizedTools.length,
|
|
233
|
+
});
|
|
201
234
|
});
|
|
202
235
|
};
|
|
203
236
|
onMessageOutput = (content) => {
|
|
@@ -221,6 +254,8 @@ class RunRecorder {
|
|
|
221
254
|
completedAt: new Date().toISOString(),
|
|
222
255
|
status,
|
|
223
256
|
agentName: options.agentName,
|
|
257
|
+
initialAgentName: this.initialAgentName,
|
|
258
|
+
executionRecordingStatus: this.executionRecordingStatus,
|
|
224
259
|
providerName: this.providerName,
|
|
225
260
|
model: options.model,
|
|
226
261
|
question: this.question,
|
|
@@ -231,7 +266,14 @@ class RunRecorder {
|
|
|
231
266
|
inputItemCount: this.inputItemCount,
|
|
232
267
|
promptSnapshots: [...this.promptSnapshots],
|
|
233
268
|
requestFingerprints: [...this.requestFingerprints],
|
|
234
|
-
policyDecisions:
|
|
269
|
+
policyDecisions: this.policyDecisions.map((decision) => ({
|
|
270
|
+
...decision,
|
|
271
|
+
// Only complete evidence can establish that an allowed handoff was not applied.
|
|
272
|
+
...(this.executionRecordingStatus === "complete" &&
|
|
273
|
+
decision.resource.kind === "handoff"
|
|
274
|
+
? { handoffApplied: decision.handoffApplied ?? false }
|
|
275
|
+
: {}),
|
|
276
|
+
})),
|
|
235
277
|
suspendedProposals: this.suspendedProposals.length > 0
|
|
236
278
|
? [...this.suspendedProposals]
|
|
237
279
|
: undefined,
|
package/dist/run.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAqB,MAAM,SAAS,CAAC;AA4CnD,OAAO,EACL,cAAc,EAEd,mBAAmB,EAGnB,SAAS,EACT,cAAc,EACd,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAUjB,KAAK,eAAe,CAAC,QAAQ,IAAI;IAC/B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;CAC5B,CAAC;AAGF,YAAY,EACV,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAqB,MAAM,SAAS,CAAC;AA4CnD,OAAO,EACL,cAAc,EAEd,mBAAmB,EAGnB,SAAS,EACT,cAAc,EACd,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAUjB,KAAK,eAAe,CAAC,QAAQ,IAAI;IAC/B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;CAC5B,CAAC;AAGF,YAAY,EACV,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,mBAAmB,CAAC;AA80B3B,qBAAa,iBAAiB,CAAC,QAAQ,GAAG,OAAO;IAC/C,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAA0C;IACxD,OAAO,CAAC,KAAK,CAA4B;gBAGvC,MAAM,EAAE,aAAa,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,EAC/C,KAAK,EAAE,eAAe,CAAC,QAAQ,CAAC;IAMlC,QAAQ,IAAI,aAAa,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAQnD,IAAI,OAAO,IAAI,cAAc,EAAE,CAE9B;IAED,IAAI,SAAS,IAAI,KAAK,CAAC,QAAQ,CAAC,CAE/B;CACF;AAED,wBAAsB,GAAG,CAAC,QAAQ,GAAG,OAAO,EAC1C,aAAa,EAAE,KAAK,CAAC,QAAQ,CAAC,EAC9B,KAAK,EAAE,MAAM,GAAG,cAAc,EAAE,EAChC,OAAO,EAAE,gBAAgB,CAAC,QAAQ,CAAC,GAClC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;AAExC,wBAAsB,GAAG,CAAC,QAAQ,GAAG,OAAO,EAC1C,aAAa,EAAE,KAAK,CAAC,QAAQ,CAAC,EAC9B,KAAK,EAAE,MAAM,GAAG,cAAc,EAAE,EAChC,OAAO,CAAC,EAAE,mBAAmB,CAAC,QAAQ,CAAC,GACtC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC"}
|
package/dist/run.js
CHANGED
|
@@ -361,7 +361,7 @@ async function evaluateOutputGuardrails(agent, runContext, history, outputText,
|
|
|
361
361
|
await logEmitter.outputGuardrailPassed(agent.name, turn, guardrail.name);
|
|
362
362
|
}
|
|
363
363
|
}
|
|
364
|
-
async function* runLoop(state, runId, provider, runContext, maxTurns, logger, policies, onPolicyDecision, onSuspendedProposal, onGuardrailDecision, onPromptSnapshot, onRequestFingerprint) {
|
|
364
|
+
async function* runLoop(state, runId, provider, runContext, maxTurns, logger, policies, onPolicyDecision, onSuspendedProposal, onGuardrailDecision, onPromptSnapshot, onRequestFingerprint, onHandoffApplied) {
|
|
365
365
|
const logEmitter = new run_log_emitter_1.RunLogEmitter(logger);
|
|
366
366
|
await logEmitter.runStarted(state.lastAgent.name, maxTurns, state.history.length);
|
|
367
367
|
yield {
|
|
@@ -448,7 +448,13 @@ async function* runLoop(state, runId, provider, runContext, maxTurns, logger, po
|
|
|
448
448
|
}
|
|
449
449
|
}
|
|
450
450
|
if (pendingToolCalls.length > 0) {
|
|
451
|
-
|
|
451
|
+
const firstHandoff = pendingToolCalls.find((call) => handoffRegistry.has(call.name));
|
|
452
|
+
const callsToExecute = pendingToolCalls.filter((call) => !handoffRegistry.has(call.name));
|
|
453
|
+
// Tools belong to the requesting agent; only the first handoff is eligible.
|
|
454
|
+
if (firstHandoff) {
|
|
455
|
+
callsToExecute.push(firstHandoff);
|
|
456
|
+
}
|
|
457
|
+
for (const call of callsToExecute) {
|
|
452
458
|
const callItemArguments = parseArguments(call.arguments, call.name);
|
|
453
459
|
const callItem = {
|
|
454
460
|
type: "tool_call_item",
|
|
@@ -515,6 +521,7 @@ async function* runLoop(state, runId, provider, runContext, maxTurns, logger, po
|
|
|
515
521
|
payload: callItemArguments,
|
|
516
522
|
});
|
|
517
523
|
state.lastAgent = handoffTarget;
|
|
524
|
+
onHandoffApplied?.(activeTurn, call.callId);
|
|
518
525
|
handoffTransitioned = true;
|
|
519
526
|
}
|
|
520
527
|
}
|
|
@@ -609,11 +616,12 @@ async function run(startingAgent, input, options = {}) {
|
|
|
609
616
|
const runRecorder = await run_recorder_runtime_1.RunRecorder.create({
|
|
610
617
|
input,
|
|
611
618
|
inputItemCount: state.history.length,
|
|
619
|
+
initialAgentName: startingAgent.name,
|
|
612
620
|
context: runContext.context,
|
|
613
621
|
providerName: provider.constructor.name,
|
|
614
622
|
recordOptions: options.record,
|
|
615
623
|
});
|
|
616
|
-
const rawStream = runLoop(state, runRecorder.runId, provider, runContext, maxTurns, options.logger, options.policies, runRecorder.onPolicyDecision, runRecorder.onSuspendedProposal, runRecorder.onGuardrailDecision, runRecorder.onPromptSnapshot, runRecorder.onRequestFingerprint);
|
|
624
|
+
const rawStream = runLoop(state, runRecorder.runId, provider, runContext, maxTurns, options.logger, options.policies, runRecorder.onPolicyDecision, runRecorder.onSuspendedProposal, runRecorder.onGuardrailDecision, runRecorder.onPromptSnapshot, runRecorder.onRequestFingerprint, runRecorder.onHandoffApplied);
|
|
617
625
|
const runRecordSnapshot = () => ({
|
|
618
626
|
agentName: state.lastAgent.name,
|
|
619
627
|
model: state.lastAgent.model,
|