@anvia/core 1.2.1 → 1.2.2
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/agent/agent-tool.js +8 -8
- package/dist/agent/agent.js +25 -25
- package/dist/agent/index.d.ts +12 -12
- package/dist/agent/index.js +30 -30
- package/dist/agent/interactions/index.d.ts +1 -1
- package/dist/agent/resolve-options.js +12 -12
- package/dist/agent/resolved-agent.js +26 -26
- package/dist/agent/team/agent-team.js +30 -30
- package/dist/agent/team/index.js +30 -30
- package/dist/agent/tool-catalog.js +11 -11
- package/dist/{agent-C9VhENdj.d.ts → agent-CUZdf9G0.d.ts} +9 -9
- package/dist/{chunk-UTAB3XQI.js → chunk-2JZV4LUS.js} +2 -2
- package/dist/{chunk-SIYZDPVH.js → chunk-3EX524LK.js} +36 -27
- package/dist/chunk-3EX524LK.js.map +1 -0
- package/dist/{chunk-UOGM62JL.js → chunk-3P65RSBB.js} +3 -3
- package/dist/{chunk-RT5LUEO3.js → chunk-4PGI5HYY.js} +9 -9
- package/dist/{chunk-BDDC72GF.js → chunk-5HFXHKDD.js} +2 -2
- package/dist/{chunk-QHGYCYV6.js → chunk-5KS4SG2U.js} +4 -4
- package/dist/{chunk-72LBHKYP.js → chunk-5REZFNZ3.js} +2 -2
- package/dist/{chunk-B47EXUHL.js → chunk-5TMN4MYN.js} +2 -2
- package/dist/{chunk-LKIABZNR.js → chunk-63DUKYEG.js} +3 -3
- package/dist/{chunk-MHOJJYDK.js → chunk-647TQE3E.js} +2 -2
- package/dist/{chunk-HP34GRQX.js → chunk-AS7A2LU5.js} +2 -2
- package/dist/{chunk-BDKFFFVX.js → chunk-BD2USPK5.js} +4 -4
- package/dist/{chunk-4S4OECPW.js → chunk-BVAQJOZX.js} +9 -9
- package/dist/{chunk-T4KS577P.js → chunk-FSBDE6RF.js} +7 -6
- package/dist/chunk-FSBDE6RF.js.map +1 -0
- package/dist/{chunk-CKKNO4XB.js → chunk-GSVOMQEE.js} +2 -2
- package/dist/{chunk-TIZGADU4.js → chunk-HAVSSHOW.js} +7 -7
- package/dist/{chunk-TIZGADU4.js.map → chunk-HAVSSHOW.js.map} +1 -1
- package/dist/{chunk-IDNL6IH4.js → chunk-HJ6KTQTZ.js} +7 -1
- package/dist/chunk-HJ6KTQTZ.js.map +1 -0
- package/dist/{chunk-IV6YQTY2.js → chunk-ICDPUAKN.js} +2 -2
- package/dist/{chunk-MNYMLWWA.js → chunk-KSVFGXS6.js} +2 -2
- package/dist/{chunk-F3E2RLC7.js → chunk-KSXA7YK7.js} +3 -3
- package/dist/{chunk-O6DTOCBM.js → chunk-KX2TRKO2.js} +2 -2
- package/dist/{chunk-KZGSXJKU.js → chunk-LMZ54UNC.js} +2 -2
- package/dist/{chunk-Y7JTHNCU.js → chunk-N2AQUFGO.js} +2 -2
- package/dist/{chunk-5FCZ64HM.js → chunk-NA44V5OE.js} +3 -3
- package/dist/{chunk-AOG6KSV4.js → chunk-NSWBPKWH.js} +3 -3
- package/dist/{chunk-J4SINPUA.js → chunk-P6IEZWI3.js} +18 -6
- package/dist/chunk-P6IEZWI3.js.map +1 -0
- package/dist/{chunk-PPJ7SYQL.js → chunk-RGYVR4FE.js} +3 -3
- package/dist/{chunk-47NTHIVB.js → chunk-SCFWN3T2.js} +2 -1
- package/dist/chunk-SCFWN3T2.js.map +1 -0
- package/dist/{chunk-QUS6S2NB.js → chunk-SIXS4CCU.js} +2 -2
- package/dist/{chunk-G336L2IE.js → chunk-VCMBQTR4.js} +2 -2
- package/dist/{chunk-BUPC72Y2.js → chunk-VPTAGK7G.js} +3 -3
- package/dist/{chunk-T4IAJJUU.js → chunk-VQTSZ4ZW.js} +3 -3
- package/dist/{chunk-6N4ENZO4.js → chunk-VU6YTPPH.js} +2 -2
- package/dist/{chunk-XV3DH5GC.js → chunk-WUZG6B3Q.js} +2 -2
- package/dist/{chunk-XJRNBTIV.js → chunk-YNA3UR42.js} +2 -2
- package/dist/completion/generate-completion.js +4 -4
- package/dist/completion/index.d.ts +3 -3
- package/dist/completion/index.js +4 -4
- package/dist/completion/stream-accumulator.js +2 -2
- package/dist/completion/types.js +1 -1
- package/dist/{dynamic-tools-CNHSPXr1.d.ts → dynamic-tools-BXXLc34l.d.ts} +3 -3
- package/dist/embeddings/index.js +1 -1
- package/dist/evals/advanced-metrics.js +7 -7
- package/dist/evals/cli.js +6 -6
- package/dist/evals/index.d.ts +5 -5
- package/dist/evals/index.js +11 -11
- package/dist/evals/judge.js +6 -6
- package/dist/evals/metrics.js +7 -7
- package/dist/evals/runner.js +5 -5
- package/dist/extractor/extractor.js +5 -5
- package/dist/extractor/index.d.ts +1 -1
- package/dist/extractor/index.js +5 -5
- package/dist/guardrails/index.d.ts +4 -4
- package/dist/image-generation/index.d.ts +1 -1
- package/dist/index.d.ts +13 -13
- package/dist/index.js +33 -33
- package/dist/internal/agent-runtime/agent-run.js +21 -21
- package/dist/internal/agent-runtime/continuation-state.js +4 -4
- package/dist/internal/agent-runtime/interaction-suspension.js +4 -4
- package/dist/internal/agent-runtime/memory.js +6 -6
- package/dist/internal/agent-runtime/prepared-tool-call.js +2 -2
- package/dist/internal/agent-runtime/retrieval.js +9 -9
- package/dist/internal/agent-runtime/tool-execution.js +17 -17
- package/dist/internal/agent.d.ts +43 -10
- package/dist/internal/agent.js +26 -26
- package/dist/internal/completion-request.js +2 -2
- package/dist/internal/team-runtime/member.js +5 -5
- package/dist/internal/team-runtime/run.js +29 -29
- package/dist/internal/team-runtime/tools.js +4 -4
- package/dist/mcp/index.d.ts +4 -4
- package/dist/memory/compaction.js +5 -5
- package/dist/memory/index.d.ts +3 -3
- package/dist/memory/index.js +5 -5
- package/dist/{middleware-CWjnMbiH.d.ts → middleware-DORuwSy-.d.ts} +67 -4
- package/dist/observability/group.js +5 -5
- package/dist/observability/index.d.ts +5 -5
- package/dist/observability/index.js +5 -5
- package/dist/pipeline/index.d.ts +10 -10
- package/dist/pipeline/index.js +6 -6
- package/dist/pipeline/pipeline.js +6 -6
- package/dist/{provider-output-error-OQ4fjw5W.d.ts → provider-output-error-CMVoe1xT.d.ts} +1 -1
- package/dist/skills/index.d.ts +4 -4
- package/dist/skills/index.js +14 -14
- package/dist/skills/load.js +14 -14
- package/dist/skills/tools.js +13 -13
- package/dist/speech-generation/index.d.ts +1 -1
- package/dist/speech-generation/index.js +1 -1
- package/dist/{text-GbW4WYMg.d.ts → text-CklbSG7K.d.ts} +1 -1
- package/dist/{think-tool-YWsV98I5.d.ts → think-tool-2unWbq1w.d.ts} +1 -1
- package/dist/tool/create-tool.js +3 -3
- package/dist/tool/dynamic-tools.js +10 -10
- package/dist/tool/index.d.ts +8 -8
- package/dist/tool/index.js +12 -12
- package/dist/tool/question-tool.js +4 -4
- package/dist/tool/think-tool.js +4 -4
- package/dist/tool/tool.js +1 -1
- package/dist/{tool-DQMZpZSS.d.ts → tool-D_jV3cRZ.d.ts} +38 -1
- package/dist/transcription/index.d.ts +1 -1
- package/dist/{types-DfRPfehE.d.ts → types-0t3BczrD.d.ts} +2 -2
- package/dist/{types-CODGMHnp.d.ts → types-ChyQISt-.d.ts} +1 -1
- package/dist/{types-Bqw0AuFl.d.ts → types-CqiX-4_C.d.ts} +1 -1
- package/dist/{types-C1xYKXF2.d.ts → types-Cu2tEf3V.d.ts} +1 -1
- package/dist/{types-CiHjqE6J.d.ts → types-DYqZKDA8.d.ts} +140 -0
- package/dist/{types-CafU6Ux5.d.ts → types-DhWxTobb.d.ts} +37 -1
- package/dist/vector-store/index.d.ts +4 -4
- package/dist/vector-store/index.js +9 -9
- package/dist/vector-store/ingest.js +5 -5
- package/dist/vector-store/retrieve.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-47NTHIVB.js.map +0 -1
- package/dist/chunk-IDNL6IH4.js.map +0 -1
- package/dist/chunk-J4SINPUA.js.map +0 -1
- package/dist/chunk-SIYZDPVH.js.map +0 -1
- package/dist/chunk-T4KS577P.js.map +0 -1
- /package/dist/{chunk-UTAB3XQI.js.map → chunk-2JZV4LUS.js.map} +0 -0
- /package/dist/{chunk-UOGM62JL.js.map → chunk-3P65RSBB.js.map} +0 -0
- /package/dist/{chunk-RT5LUEO3.js.map → chunk-4PGI5HYY.js.map} +0 -0
- /package/dist/{chunk-BDDC72GF.js.map → chunk-5HFXHKDD.js.map} +0 -0
- /package/dist/{chunk-QHGYCYV6.js.map → chunk-5KS4SG2U.js.map} +0 -0
- /package/dist/{chunk-72LBHKYP.js.map → chunk-5REZFNZ3.js.map} +0 -0
- /package/dist/{chunk-B47EXUHL.js.map → chunk-5TMN4MYN.js.map} +0 -0
- /package/dist/{chunk-LKIABZNR.js.map → chunk-63DUKYEG.js.map} +0 -0
- /package/dist/{chunk-MHOJJYDK.js.map → chunk-647TQE3E.js.map} +0 -0
- /package/dist/{chunk-HP34GRQX.js.map → chunk-AS7A2LU5.js.map} +0 -0
- /package/dist/{chunk-BDKFFFVX.js.map → chunk-BD2USPK5.js.map} +0 -0
- /package/dist/{chunk-4S4OECPW.js.map → chunk-BVAQJOZX.js.map} +0 -0
- /package/dist/{chunk-CKKNO4XB.js.map → chunk-GSVOMQEE.js.map} +0 -0
- /package/dist/{chunk-IV6YQTY2.js.map → chunk-ICDPUAKN.js.map} +0 -0
- /package/dist/{chunk-MNYMLWWA.js.map → chunk-KSVFGXS6.js.map} +0 -0
- /package/dist/{chunk-F3E2RLC7.js.map → chunk-KSXA7YK7.js.map} +0 -0
- /package/dist/{chunk-O6DTOCBM.js.map → chunk-KX2TRKO2.js.map} +0 -0
- /package/dist/{chunk-KZGSXJKU.js.map → chunk-LMZ54UNC.js.map} +0 -0
- /package/dist/{chunk-Y7JTHNCU.js.map → chunk-N2AQUFGO.js.map} +0 -0
- /package/dist/{chunk-5FCZ64HM.js.map → chunk-NA44V5OE.js.map} +0 -0
- /package/dist/{chunk-AOG6KSV4.js.map → chunk-NSWBPKWH.js.map} +0 -0
- /package/dist/{chunk-PPJ7SYQL.js.map → chunk-RGYVR4FE.js.map} +0 -0
- /package/dist/{chunk-QUS6S2NB.js.map → chunk-SIXS4CCU.js.map} +0 -0
- /package/dist/{chunk-G336L2IE.js.map → chunk-VCMBQTR4.js.map} +0 -0
- /package/dist/{chunk-BUPC72Y2.js.map → chunk-VPTAGK7G.js.map} +0 -0
- /package/dist/{chunk-T4IAJJUU.js.map → chunk-VQTSZ4ZW.js.map} +0 -0
- /package/dist/{chunk-6N4ENZO4.js.map → chunk-VU6YTPPH.js.map} +0 -0
- /package/dist/{chunk-XV3DH5GC.js.map → chunk-WUZG6B3Q.js.map} +0 -0
- /package/dist/{chunk-XJRNBTIV.js.map → chunk-YNA3UR42.js.map} +0 -0
|
@@ -1,19 +1,31 @@
|
|
|
1
|
-
import { U as Usage, J as JsonObject, M as Message, S as SystemMessage, d as CompletionModel } from './types-
|
|
1
|
+
import { U as Usage, J as JsonObject, M as Message, S as SystemMessage, d as CompletionModel } from './types-DYqZKDA8.js';
|
|
2
2
|
import { b as RetrySetting } from './retry-CjvSlKGW.js';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Granularity at which produced messages are persisted:
|
|
6
|
+
*
|
|
7
|
+
* - `message`: after each individual message
|
|
8
|
+
* - `turn`: after each agent turn completes
|
|
9
|
+
* - `run`: once when the run finishes
|
|
10
|
+
*/
|
|
4
11
|
type MemorySavePolicy = "message" | "turn" | "run";
|
|
12
|
+
/** Identifies a conversation within a memory store. */
|
|
5
13
|
type MemoryScope = {
|
|
6
14
|
sessionId: string;
|
|
7
15
|
userId?: string | undefined;
|
|
8
16
|
metadata?: JsonObject | undefined;
|
|
9
17
|
};
|
|
18
|
+
/** Options controlling how a memory scope is reduced to a storage key. */
|
|
10
19
|
type MemoryScopeKeyOptions = {
|
|
20
|
+
/** Includes `scope.userId` in the derived key. */
|
|
11
21
|
includeUserId?: boolean | undefined;
|
|
22
|
+
/** Metadata entries (by key) included in the derived key. */
|
|
12
23
|
metadataKeys?: readonly string[] | undefined;
|
|
13
24
|
};
|
|
14
25
|
type CreateMemoryScopeKeyOptions = MemoryScopeKeyOptions & {
|
|
15
26
|
scope: MemoryScope;
|
|
16
27
|
};
|
|
28
|
+
/** Either key-derivation options or a custom resolver function. */
|
|
17
29
|
type MemoryScopeKeyResolver = MemoryScopeKeyOptions | ((options: {
|
|
18
30
|
scope: MemoryScope;
|
|
19
31
|
}) => string);
|
|
@@ -42,6 +54,7 @@ type MemoryConversationListOptions = {
|
|
|
42
54
|
type MemoryConversationGetOptions = {
|
|
43
55
|
ref: string;
|
|
44
56
|
};
|
|
57
|
+
/** Persisted summary of a stored conversation. */
|
|
45
58
|
type MemoryConversationSummary = {
|
|
46
59
|
/** Opaque, store-specific reference used to retrieve this exact conversation. */
|
|
47
60
|
ref: string;
|
|
@@ -52,6 +65,7 @@ type MemoryConversationSummary = {
|
|
|
52
65
|
updatedAt: string;
|
|
53
66
|
messageCount: number;
|
|
54
67
|
};
|
|
68
|
+
/** One stored message with its position and originating run/turn. */
|
|
55
69
|
type MemoryConversationMessage = {
|
|
56
70
|
position: number;
|
|
57
71
|
runId: string;
|
|
@@ -59,6 +73,7 @@ type MemoryConversationMessage = {
|
|
|
59
73
|
createdAt: string;
|
|
60
74
|
message: Message;
|
|
61
75
|
};
|
|
76
|
+
/** A full stored conversation: summary plus replayable messages. */
|
|
62
77
|
type MemoryConversation = MemoryConversationSummary & {
|
|
63
78
|
messages: MemoryConversationMessage[];
|
|
64
79
|
};
|
|
@@ -67,6 +82,11 @@ interface MemoryInspector {
|
|
|
67
82
|
listConversations(options: MemoryConversationListOptions): Promise<MemoryConversationSummary[]>;
|
|
68
83
|
getConversation(options: MemoryConversationGetOptions): Promise<MemoryConversation | undefined>;
|
|
69
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* Append-only conversation storage. The runtime loads history at run start,
|
|
87
|
+
* appends produced messages per the configured {@link MemorySavePolicy}, and
|
|
88
|
+
* clears on demand. `load` must return the canonical, replayable history.
|
|
89
|
+
*/
|
|
70
90
|
interface MemoryStore {
|
|
71
91
|
readonly inspector?: MemoryInspector | undefined;
|
|
72
92
|
readonly compaction?: MemoryCompactionCapability | undefined;
|
|
@@ -74,12 +94,16 @@ interface MemoryStore {
|
|
|
74
94
|
load(options: MemoryLoadOptions): Promise<Message[]>;
|
|
75
95
|
append(options: MemoryAppendOptions): Promise<void>;
|
|
76
96
|
clear(options: MemoryClearOptions): Promise<void>;
|
|
97
|
+
/** Records a failed run for debugging; unsupported stores may omit it. */
|
|
77
98
|
recordError?(options: MemoryErrorOptions): Promise<void>;
|
|
78
99
|
}
|
|
100
|
+
/** Metadata embedded in a compaction summary message. */
|
|
79
101
|
type MemoryCompactionMetadata = {
|
|
102
|
+
/** Schema version of the compaction marker. */
|
|
80
103
|
version: 1;
|
|
81
104
|
compactedMessageCount: number;
|
|
82
105
|
};
|
|
106
|
+
/** A system message that stores a summary checkpoint in the conversation history. */
|
|
83
107
|
type MemoryCompactionMessage = Omit<SystemMessage, "metadata"> & {
|
|
84
108
|
metadata: {
|
|
85
109
|
anvia: {
|
|
@@ -104,6 +128,7 @@ type MemoryCompactionReplacePrefixOptions = {
|
|
|
104
128
|
replacement: MemoryCompactionMessage;
|
|
105
129
|
runId: string;
|
|
106
130
|
};
|
|
131
|
+
/** Result of a prefix replacement: `conflict` means the revision was stale and the replacement was rejected. */
|
|
107
132
|
type MemoryCompactionReplacePrefixResult = {
|
|
108
133
|
status: "committed" | "conflict";
|
|
109
134
|
};
|
|
@@ -126,9 +151,11 @@ type MemoryCompactorResult = {
|
|
|
126
151
|
summary: string;
|
|
127
152
|
usage?: Usage | undefined;
|
|
128
153
|
};
|
|
154
|
+
/** Summarizes a list of messages into a compact replacement. */
|
|
129
155
|
type MemoryCompactor = (input: MemoryCompactorInput) => Promise<MemoryCompactorResult>;
|
|
130
156
|
/** Counts the approximate or exact model tokens represented by a message list. */
|
|
131
157
|
type MemoryTokenCounter = (messages: readonly Message[]) => number | Promise<number>;
|
|
158
|
+
/** Options for the built-in, model-backed summary compactor. */
|
|
132
159
|
type CreateSummaryMemoryCompactorOptions = {
|
|
133
160
|
model: CompletionModel;
|
|
134
161
|
instructions?: string | undefined;
|
|
@@ -140,21 +167,29 @@ type CreateSummaryMemoryCompactorOptions = {
|
|
|
140
167
|
type MemoryCompactionConflictRetryOptions = {
|
|
141
168
|
maxAttempts: number;
|
|
142
169
|
};
|
|
170
|
+
/** When and how session memory is compacted. */
|
|
143
171
|
type MemoryCompactionOptions = {
|
|
144
172
|
trigger: {
|
|
173
|
+
/** Compaction runs when the projected context exceeds this token count. */
|
|
145
174
|
afterTokens: number;
|
|
146
175
|
};
|
|
147
176
|
retention?: {
|
|
177
|
+
/** Messages within this token budget of the end stay unsummarized. */
|
|
148
178
|
recentTokens?: number | undefined;
|
|
149
179
|
};
|
|
180
|
+
/** Overrides the default approximate counter; use a model counter for exact budgets. */
|
|
150
181
|
tokenCounter?: MemoryTokenCounter | undefined;
|
|
151
182
|
compactor: MemoryCompactor;
|
|
183
|
+
/** `false` disables retrying when a store reports a revision conflict. */
|
|
152
184
|
conflictRetries?: false | MemoryCompactionConflictRetryOptions | undefined;
|
|
153
185
|
};
|
|
186
|
+
/** Memory settings for an agent. */
|
|
154
187
|
type MemoryOptions = {
|
|
188
|
+
/** @default "message" */
|
|
155
189
|
savePolicy?: MemorySavePolicy | undefined;
|
|
156
190
|
compaction?: MemoryCompactionOptions | undefined;
|
|
157
191
|
};
|
|
192
|
+
/** Measurements recorded for one compaction attempt. */
|
|
158
193
|
type MemoryCompactionInfo = {
|
|
159
194
|
originalMessageCount: number;
|
|
160
195
|
compactedMessageCount: number;
|
|
@@ -166,6 +201,7 @@ type MemoryCompactionInfo = {
|
|
|
166
201
|
attempts: number;
|
|
167
202
|
usage: Usage;
|
|
168
203
|
};
|
|
204
|
+
/** Outcome of a compaction attempt: performed, or skipped because there was nothing to compact. */
|
|
169
205
|
type MemoryCompactionResult = ({
|
|
170
206
|
type: "compacted";
|
|
171
207
|
} & MemoryCompactionInfo) | {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { V as VectorMetadata, b as VectorMetadataValue, E as EmbeddingModel, a as EmbeddedDocument } from '../types-Cr4uiYo5.js';
|
|
2
|
-
import { T as Tool } from '../tool-
|
|
3
|
-
import { V as VectorFilter, d as VectorStore, R as RetrieveDocumentsOptions, a as VectorSearchResult, f as RetrieveHybridDocumentsOptions, I as IndexStrategy, g as VectorStoreUpsertOptions, h as VectorSearchRequest, b as VectorInspectRequest, c as VectorInspectPage, i as VectorSearchToolOptions } from '../types-
|
|
4
|
-
export { D as DenseVectorSearchToolOptions, j as HybridVectorSearchRequest, k as HybridVectorSearchToolOptions, H as HybridVectorStore, L as LshOptions, l as RetrieveDocumentsBaseOptions, e as VectorFusion, m as VectorInspectItem, n as VectorMetric, o as VectorSearchToolBaseOptions } from '../types-
|
|
2
|
+
import { T as Tool } from '../tool-D_jV3cRZ.js';
|
|
3
|
+
import { V as VectorFilter, d as VectorStore, R as RetrieveDocumentsOptions, a as VectorSearchResult, f as RetrieveHybridDocumentsOptions, I as IndexStrategy, g as VectorStoreUpsertOptions, h as VectorSearchRequest, b as VectorInspectRequest, c as VectorInspectPage, i as VectorSearchToolOptions } from '../types-ChyQISt-.js';
|
|
4
|
+
export { D as DenseVectorSearchToolOptions, j as HybridVectorSearchRequest, k as HybridVectorSearchToolOptions, H as HybridVectorStore, L as LshOptions, l as RetrieveDocumentsBaseOptions, e as VectorFusion, m as VectorInspectItem, n as VectorMetric, o as VectorSearchToolBaseOptions } from '../types-ChyQISt-.js';
|
|
5
5
|
import { b as RetrySetting } from '../retry-CjvSlKGW.js';
|
|
6
|
-
import { J as JsonObject } from '../types-
|
|
6
|
+
import { J as JsonObject } from '../types-DYqZKDA8.js';
|
|
7
7
|
import { T as TextDocument, b as TextDocumentChunkingOptions } from '../text-document-B-X7Vxq1.js';
|
|
8
8
|
import '../model-call-options-CZkSw_xN.js';
|
|
9
9
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
InMemoryVectorStore,
|
|
3
3
|
createVectorSearchTool
|
|
4
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-5REZFNZ3.js";
|
|
5
5
|
import "../chunk-ESOFEAYK.js";
|
|
6
6
|
import {
|
|
7
7
|
retrieveDocuments
|
|
@@ -13,20 +13,20 @@ import {
|
|
|
13
13
|
import {
|
|
14
14
|
ingestVectorDocuments,
|
|
15
15
|
ingestVectorText
|
|
16
|
-
} from "../chunk-
|
|
16
|
+
} from "../chunk-5KS4SG2U.js";
|
|
17
|
+
import "../chunk-KO5NMTAM.js";
|
|
18
|
+
import "../chunk-TFIOU6UR.js";
|
|
19
|
+
import "../chunk-GPVXCY5I.js";
|
|
17
20
|
import "../chunk-ERN7P6Q4.js";
|
|
21
|
+
import "../chunk-DU4WA6LQ.js";
|
|
18
22
|
import "../chunk-7F53DOML.js";
|
|
19
23
|
import "../chunk-HHMLE3TZ.js";
|
|
20
|
-
import "../chunk-DU4WA6LQ.js";
|
|
21
24
|
import "../chunk-4FIVU53H.js";
|
|
22
|
-
import "../chunk-KO5NMTAM.js";
|
|
23
|
-
import "../chunk-TFIOU6UR.js";
|
|
24
|
-
import "../chunk-GPVXCY5I.js";
|
|
25
25
|
import "../chunk-5V533R7F.js";
|
|
26
|
-
import "../chunk-
|
|
26
|
+
import "../chunk-WUZG6B3Q.js";
|
|
27
27
|
import "../chunk-YZVFIW5D.js";
|
|
28
|
-
import "../chunk-
|
|
29
|
-
import "../chunk-
|
|
28
|
+
import "../chunk-647TQE3E.js";
|
|
29
|
+
import "../chunk-SCFWN3T2.js";
|
|
30
30
|
import "../chunk-J6S6MT7O.js";
|
|
31
31
|
import "../chunk-BONQTXRQ.js";
|
|
32
32
|
import "../chunk-4C7AXYOM.js";
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ingestVectorDocuments,
|
|
3
3
|
ingestVectorText
|
|
4
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-5KS4SG2U.js";
|
|
5
|
+
import "../chunk-KO5NMTAM.js";
|
|
6
|
+
import "../chunk-TFIOU6UR.js";
|
|
7
|
+
import "../chunk-GPVXCY5I.js";
|
|
5
8
|
import "../chunk-ERN7P6Q4.js";
|
|
9
|
+
import "../chunk-DU4WA6LQ.js";
|
|
6
10
|
import "../chunk-7F53DOML.js";
|
|
7
11
|
import "../chunk-HHMLE3TZ.js";
|
|
8
|
-
import "../chunk-DU4WA6LQ.js";
|
|
9
12
|
import "../chunk-4FIVU53H.js";
|
|
10
|
-
import "../chunk-KO5NMTAM.js";
|
|
11
|
-
import "../chunk-TFIOU6UR.js";
|
|
12
|
-
import "../chunk-GPVXCY5I.js";
|
|
13
13
|
import "../chunk-POXHJF3H.js";
|
|
14
14
|
import "../chunk-USRKPEQN.js";
|
|
15
15
|
export {
|
|
@@ -2,9 +2,9 @@ import {
|
|
|
2
2
|
retrieveDocuments
|
|
3
3
|
} from "../chunk-HAAGSIZH.js";
|
|
4
4
|
import "../chunk-ERN7P6Q4.js";
|
|
5
|
+
import "../chunk-DU4WA6LQ.js";
|
|
5
6
|
import "../chunk-7F53DOML.js";
|
|
6
7
|
import "../chunk-HHMLE3TZ.js";
|
|
7
|
-
import "../chunk-DU4WA6LQ.js";
|
|
8
8
|
import "../chunk-4FIVU53H.js";
|
|
9
9
|
import "../chunk-5V533R7F.js";
|
|
10
10
|
import "../chunk-POXHJF3H.js";
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tool/tool.ts"],"sourcesContent":["import { isJsonValue } from \"../completion/json\";\nimport { parseMessage } from \"../completion/message-schema\";\nimport type {\n JsonObject,\n JsonValue,\n ToolDefinition,\n ToolResultContentPart,\n ToolResultOutput,\n} from \"../completion/types\";\n\nexport type ToolApprovalRunContext = {\n agentId: string;\n runId: string;\n sessionId?: string;\n metadata?: JsonObject;\n};\n\nexport type ToolApprovalContext<Args = unknown> = {\n toolName: string;\n args: Args;\n rawArgs: string;\n toolCallId: string;\n callId?: string;\n internalCallId: string;\n run: ToolApprovalRunContext;\n};\n\nexport type ToolApprovalRequirement = {\n reason?: string | undefined;\n};\n\nexport type ToolRequiresApproval<Args = unknown> =\n | boolean\n | ToolApprovalRequirement\n | ((\n args: Args,\n context: ToolApprovalContext<Args>,\n ) => boolean | ToolApprovalRequirement | Promise<boolean | ToolApprovalRequirement>);\n\nexport type ToolCallStreamEvent = {\n agentId: string;\n agentName?: string | undefined;\n event: unknown;\n};\n\nexport type ToolCallContext = {\n emitStreamEvent?(event: ToolCallStreamEvent): void | Promise<void>;\n abortSignal?: AbortSignal | undefined;\n};\n\nexport interface Tool<Args = unknown, Output = unknown> {\n readonly name: string;\n readonly requiresApproval?: ToolRequiresApproval<Args>;\n definition(prompt: string): ToolDefinition | Promise<ToolDefinition>;\n call(args: Args, context?: ToolCallContext): Output | Promise<Output>;\n parseInput?(args: JsonValue): Args;\n}\n\nexport type AnyTool = Omit<Tool<unknown, unknown>, \"requiresApproval\"> & {\n readonly requiresApproval?: unknown;\n};\n\nconst richToolOutput: unique symbol = Symbol.for(\"anvia.tool-output.content\");\n\nexport type RichToolOutput = Readonly<{\n [richToolOutput]: true;\n content: readonly ToolResultContentPart[];\n}>;\n\nexport type NormalizedToolOutput = ToolResultOutput;\n\nexport class ToolResultSerializationError extends TypeError {\n constructor(readonly output: unknown) {\n super(\"Tool output must be a string, a strict JSON value, or ToolOutput.content(...).\");\n this.name = \"ToolResultSerializationError\";\n }\n}\n\nexport const ToolOutput = {\n content(content: readonly ToolResultContentPart[]): RichToolOutput {\n return { [richToolOutput]: true, content };\n },\n};\n\nexport function normalizeToolResultOutput(output: unknown): NormalizedToolOutput {\n if (typeof output === \"string\") {\n return { type: \"text\", value: output };\n }\n if (isRichToolOutput(output)) {\n try {\n const message = parseMessage({\n role: \"tool\",\n content: [\n {\n type: \"tool-result\",\n toolCallId: \"validation\",\n toolName: \"validation\",\n output: { type: \"content\", value: output.content },\n },\n ],\n });\n if (message.role !== \"tool\") throw new TypeError(\"Unexpected message role\");\n const result = message.content[0];\n if (result?.type !== \"tool-result\") throw new TypeError(\"Unexpected tool result part\");\n if (result?.output.type !== \"content\") throw new TypeError(\"Unexpected tool output\");\n return result.output;\n } catch {\n throw new ToolResultSerializationError(output);\n }\n }\n if (isJsonValue(output)) {\n return { type: \"json\", value: output };\n }\n throw new ToolResultSerializationError(output);\n}\n\nexport function toolResultContentToText(content: readonly ToolResultContentPart[]): string {\n return content\n .map((item) => (item.type === \"text\" ? item.text : `[file:${item.mediaType}]`))\n .join(\"\\n\");\n}\n\nfunction isRichToolOutput(value: unknown): value is RichToolOutput {\n if (typeof value !== \"object\" || value === null) return false;\n return Object.getOwnPropertyDescriptor(value, richToolOutput)?.value === true;\n}\n\nexport function parseToolArgs(args: string): JsonValue {\n const value: unknown = JSON.parse(args);\n if (!isJsonValue(value)) {\n throw new TypeError(\"Tool arguments must be a JSON value.\");\n }\n return value;\n}\n"],"mappings":";;;;;;;;AA8DA,IAAM,iBAAgC,uBAAO,IAAI,2BAA2B;AASrE,IAAM,+BAAN,cAA2C,UAAU;AAAA,EAC1D,YAAqB,QAAiB;AACpC,UAAM,gFAAgF;AADnE;AAEnB,SAAK,OAAO;AAAA,EACd;AAAA,EAHqB;AAIvB;AAEO,IAAM,aAAa;AAAA,EACxB,QAAQ,SAA2D;AACjE,WAAO,EAAE,CAAC,cAAc,GAAG,MAAM,QAAQ;AAAA,EAC3C;AACF;AAEO,SAAS,0BAA0B,QAAuC;AAC/E,MAAI,OAAO,WAAW,UAAU;AAC9B,WAAO,EAAE,MAAM,QAAQ,OAAO,OAAO;AAAA,EACvC;AACA,MAAI,iBAAiB,MAAM,GAAG;AAC5B,QAAI;AACF,YAAM,UAAU,aAAa;AAAA,QAC3B,MAAM;AAAA,QACN,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,YAAY;AAAA,YACZ,UAAU;AAAA,YACV,QAAQ,EAAE,MAAM,WAAW,OAAO,OAAO,QAAQ;AAAA,UACnD;AAAA,QACF;AAAA,MACF,CAAC;AACD,UAAI,QAAQ,SAAS,OAAQ,OAAM,IAAI,UAAU,yBAAyB;AAC1E,YAAM,SAAS,QAAQ,QAAQ,CAAC;AAChC,UAAI,QAAQ,SAAS,cAAe,OAAM,IAAI,UAAU,6BAA6B;AACrF,UAAI,QAAQ,OAAO,SAAS,UAAW,OAAM,IAAI,UAAU,wBAAwB;AACnF,aAAO,OAAO;AAAA,IAChB,QAAQ;AACN,YAAM,IAAI,6BAA6B,MAAM;AAAA,IAC/C;AAAA,EACF;AACA,MAAI,YAAY,MAAM,GAAG;AACvB,WAAO,EAAE,MAAM,QAAQ,OAAO,OAAO;AAAA,EACvC;AACA,QAAM,IAAI,6BAA6B,MAAM;AAC/C;AAEO,SAAS,wBAAwB,SAAmD;AACzF,SAAO,QACJ,IAAI,CAAC,SAAU,KAAK,SAAS,SAAS,KAAK,OAAO,SAAS,KAAK,SAAS,GAAI,EAC7E,KAAK,IAAI;AACd;AAEA,SAAS,iBAAiB,OAAyC;AACjE,MAAI,OAAO,UAAU,YAAY,UAAU,KAAM,QAAO;AACxD,SAAO,OAAO,yBAAyB,OAAO,cAAc,GAAG,UAAU;AAC3E;AAEO,SAAS,cAAc,MAAyB;AACrD,QAAM,QAAiB,KAAK,MAAM,IAAI;AACtC,MAAI,CAAC,YAAY,KAAK,GAAG;AACvB,UAAM,IAAI,UAAU,sCAAsC;AAAA,EAC5D;AACA,SAAO;AACT;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/completion/types.ts"],"sourcesContent":["import type { ModelCallOptions } from \"../model-call-options\";\nimport { isJsonValue } from \"./json\";\n\nexport type JsonPrimitive = string | number | boolean | null;\nexport type JsonValue = JsonPrimitive | JsonObject | readonly JsonValue[];\nexport type JsonObject = { [key: string]: JsonValue };\n\nexport type Document = {\n id: string;\n text: string;\n additionalProps?: Record<string, string>;\n};\n\nexport type TextPart = Readonly<{\n type: \"text\";\n text: string;\n signature?: string;\n}>;\n\nexport type ImageDetail = \"auto\" | \"low\" | \"high\";\n\nexport type FileData =\n | Readonly<{ type: \"url\"; url: string }>\n | Readonly<{ type: \"data\"; data: string }>\n | Readonly<{ type: \"text\"; text: string }>;\n\nexport type ImagePart = Readonly<{\n type: \"image\";\n image: Exclude<FileData, Readonly<{ type: \"text\"; text: string }>>;\n mediaType?: string;\n detail?: ImageDetail;\n}>;\n\nexport type FilePart = Readonly<{\n type: \"file\";\n data: FileData;\n mediaType: string;\n filename?: string;\n}>;\n\nexport type ReasoningPart = Readonly<{\n type: \"reasoning\";\n text: string;\n id?: string;\n details?: readonly ReasoningDetail[];\n}>;\n\nexport type ReasoningDetail =\n | Readonly<{\n type: \"text\";\n text: string;\n signature?: string;\n }>\n | Readonly<{\n type: \"summary\";\n text: string;\n }>\n | Readonly<{\n type: \"encrypted\";\n data: string;\n }>\n | Readonly<{\n type: \"redacted\";\n data: string;\n }>;\n\nexport type ReasoningContentType = ReasoningDetail[\"type\"];\n\nexport type ToolCallPart = Readonly<{\n type: \"tool-call\";\n toolCallId: string;\n callId?: string;\n toolName: string;\n input: JsonValue;\n signature?: string;\n}>;\n\nexport type ToolResultContentPart = TextPart | FilePart;\n\nexport type ToolResultOutput =\n | Readonly<{ type: \"text\"; value: string }>\n | Readonly<{ type: \"json\"; value: JsonValue }>\n | Readonly<{ type: \"content\"; value: readonly ToolResultContentPart[] }>\n | Readonly<{ type: \"execution-denied\"; reason?: string }>\n | Readonly<{ type: \"error-text\"; value: string }>\n | Readonly<{ type: \"error-json\"; value: JsonValue }>;\n\nexport type ToolResultPart = Readonly<{\n type: \"tool-result\";\n toolCallId: string;\n callId?: string;\n toolName: string;\n output: ToolResultOutput;\n}>;\n\nexport type ToolApprovalResponsePart = Readonly<{\n type: \"tool-approval-response\";\n interactionId: string;\n toolCallId: string;\n callId?: string;\n toolName: string;\n approved: boolean;\n reason?: string;\n}>;\n\nexport type ToolQuestionAnswer = Readonly<{\n questionId: string;\n value: string;\n}>;\n\nexport type ToolQuestionResponsePart = Readonly<{\n type: \"tool-question-response\";\n interactionId: string;\n toolCallId: string;\n callId?: string;\n toolName: string;\n answers: readonly ToolQuestionAnswer[];\n}>;\n\nexport type ToolInteractionResponsePart = ToolApprovalResponsePart | ToolQuestionResponsePart;\n\nexport type UserContentPart = TextPart | ImagePart | FilePart;\nexport type AssistantContentPart = TextPart | ImagePart | FilePart | ReasoningPart | ToolCallPart;\n\nexport type SystemMessage<Metadata extends JsonObject = JsonObject> = Readonly<{\n role: \"system\";\n content: string;\n metadata?: Metadata;\n}>;\n\nexport type UserMessage<Metadata extends JsonObject = JsonObject> = Readonly<{\n role: \"user\";\n content: string | readonly UserContentPart[];\n metadata?: Metadata;\n}>;\n\nexport type AssistantMessage<Metadata extends JsonObject = JsonObject> = Readonly<{\n role: \"assistant\";\n id?: string;\n content: string | readonly AssistantContentPart[];\n metadata?: Metadata;\n}>;\n\nexport type ToolMessage<Metadata extends JsonObject = JsonObject> = Readonly<{\n role: \"tool\";\n content: readonly (ToolResultPart | ToolInteractionResponsePart)[];\n metadata?: Metadata;\n}>;\n\nexport type Message<Metadata extends JsonObject = JsonObject> =\n | SystemMessage<Metadata>\n | UserMessage<Metadata>\n | AssistantMessage<Metadata>\n | ToolMessage<Metadata>;\n\nexport function reasoningDisplayText(\n reasoning: ReasoningPart | readonly ReasoningDetail[],\n): string {\n const details = \"type\" in reasoning ? reasoning.details : reasoning;\n if (details === undefined) {\n return \"type\" in reasoning ? reasoning.text : \"\";\n }\n return details\n .flatMap((item) => {\n if (item.type === \"text\" || item.type === \"summary\") {\n return [item.text];\n }\n return [];\n })\n .join(\"\");\n}\n\nexport type ToolChoice =\n | \"auto\"\n | \"required\"\n | \"none\"\n | {\n type: \"function\";\n name: string;\n };\n\nexport type ToolDefinition = {\n name: string;\n description: string;\n parameters: JsonObject;\n};\n\n/**\n * A tool executed by the model provider rather than by Anvia's local tool runtime.\n *\n * Provider packages expose typed factories for these values. Application code can\n * pass them through the same high-level `tools` APIs used for local tools.\n */\nexport type ProviderTool = {\n kind: \"provider\";\n provider: string;\n name: string;\n configuration?: JsonObject;\n};\n\nexport type CompletionTool = ToolDefinition | ProviderTool;\n\nexport function isProviderTool(value: unknown): value is ProviderTool {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return false;\n }\n const candidate = value as Partial<ProviderTool>;\n return (\n candidate.kind === \"provider\" &&\n typeof candidate.provider === \"string\" &&\n candidate.provider.trim().length > 0 &&\n typeof candidate.name === \"string\" &&\n candidate.name.trim().length > 0 &&\n (candidate.configuration === undefined ||\n (typeof candidate.configuration === \"object\" &&\n candidate.configuration !== null &&\n !Array.isArray(candidate.configuration) &&\n isJsonValue(candidate.configuration)))\n );\n}\n\nexport type CompletionSource = {\n type: \"url\";\n url: string;\n title?: string;\n id?: string;\n startIndex?: number;\n endIndex?: number;\n};\n\nexport type ProviderToolCall = {\n id: string;\n name: string;\n status?: string;\n details?: JsonObject;\n};\n\n/**\n * Provider-normalized, mutually exclusive usage buckets.\n *\n * Every token should appear in exactly one non-total bucket. `total` is the\n * only aggregate key and should equal the sum of the other buckets.\n */\nexport type UsageDetails = Record<string, number>;\n\nexport type Usage = {\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n cachedInputTokens: number;\n cacheCreationInputTokens: number;\n details?: UsageDetails;\n};\n\nexport type ModelContextLimits = {\n contextWindow: number;\n maxInputTokens?: number;\n maxOutputTokens?: number;\n};\n\nexport type CompletionModelInfo = {\n modelId: string;\n context: ModelContextLimits;\n};\n\nexport type ContextUsage = {\n model: CompletionModelInfo;\n usedTokens: number;\n remainingTokens: number;\n usedPercent: number;\n remainingPercent: number;\n};\n\nexport function calculateContextUsage(\n usage: Usage,\n model: CompletionModelInfo | undefined,\n): ContextUsage | undefined {\n if (\n model === undefined ||\n !Number.isFinite(usage.inputTokens) ||\n usage.inputTokens <= 0 ||\n !Number.isFinite(model.context.contextWindow) ||\n model.context.contextWindow <= 0\n ) {\n return undefined;\n }\n\n const usedTokens = Math.max(0, usage.inputTokens);\n const remainingTokens = Math.max(0, model.context.contextWindow - usedTokens);\n const usedPercent = Math.min(100, (usedTokens / model.context.contextWindow) * 100);\n return {\n model,\n usedTokens,\n remainingTokens,\n usedPercent,\n remainingPercent: 100 - usedPercent,\n };\n}\n\nexport function withContextUsage<RawResponse>(\n response: CompletionResponse<RawResponse>,\n model: CompletionModelInfo | undefined,\n): CompletionResponse<RawResponse> {\n const contextUsage = calculateContextUsage(response.usage, model);\n return contextUsage === undefined ? response : { ...response, contextUsage };\n}\n\nexport function resolveModelContextLimits(\n modelId: string,\n catalog: Readonly<Record<string, ModelContextLimits>>,\n override?: ModelContextLimits,\n): ModelContextLimits | undefined {\n return override ?? catalog[modelId];\n}\n\nexport type AssistantGenerationMetadata = {\n provider: string;\n modelId: string;\n usage: Usage;\n finishReason?: CompletionFinishReason;\n providerFinishReason?: string;\n contextUsage?: ContextUsage;\n sources?: CompletionSource[];\n providerToolCalls?: ProviderToolCall[];\n};\n\nexport const Usage = {\n empty(): Usage {\n return {\n inputTokens: 0,\n outputTokens: 0,\n totalTokens: 0,\n cachedInputTokens: 0,\n cacheCreationInputTokens: 0,\n };\n },\n add(left: Usage, right: Usage): Usage {\n const result: Usage = {\n inputTokens: left.inputTokens + right.inputTokens,\n outputTokens: left.outputTokens + right.outputTokens,\n totalTokens: left.totalTokens + right.totalTokens,\n cachedInputTokens: left.cachedInputTokens + right.cachedInputTokens,\n cacheCreationInputTokens: left.cacheCreationInputTokens + right.cacheCreationInputTokens,\n };\n const details = addUsageDetails(left, right);\n if (details !== undefined) {\n result.details = details;\n }\n return result;\n },\n isEmpty(usage: Usage): boolean {\n return (\n isEmptyUsage(usage) &&\n (usage.details === undefined || Object.values(usage.details).every((value) => value === 0))\n );\n },\n};\n\nfunction addUsageDetails(left: Usage, right: Usage): UsageDetails | undefined {\n if (isEmptyUsage(left) && left.details === undefined) {\n return right.details === undefined ? undefined : { ...right.details };\n }\n if (isEmptyUsage(right) && right.details === undefined) {\n return left.details === undefined ? undefined : { ...left.details };\n }\n if (left.details === undefined || right.details === undefined) {\n return undefined;\n }\n const details: UsageDetails = { ...left.details };\n for (const [key, value] of Object.entries(right.details)) {\n details[key] = (details[key] ?? 0) + value;\n }\n return details;\n}\n\nfunction isEmptyUsage(usage: Usage): boolean {\n return (\n usage.inputTokens === 0 &&\n usage.outputTokens === 0 &&\n usage.totalTokens === 0 &&\n usage.cachedInputTokens === 0 &&\n usage.cacheCreationInputTokens === 0\n );\n}\n\nexport function getAssistantGenerationMetadata(\n message: Message,\n): AssistantGenerationMetadata | undefined {\n if (message.role !== \"assistant\" || !isJsonObjectValue(message.metadata)) {\n return undefined;\n }\n const frameworkMetadata = message.metadata.anvia;\n if (!isJsonObjectValue(frameworkMetadata)) {\n return undefined;\n }\n const generation = frameworkMetadata.generation;\n if (\n !isJsonObjectValue(generation) ||\n typeof generation.provider !== \"string\" ||\n typeof generation.modelId !== \"string\" ||\n !isUsageValue(generation.usage)\n ) {\n return undefined;\n }\n let usage: Usage = { ...generation.usage };\n if (generation.usage.details !== undefined) {\n usage = { ...usage, details: { ...generation.usage.details } };\n }\n const metadata: AssistantGenerationMetadata = {\n provider: generation.provider,\n modelId: generation.modelId,\n usage,\n };\n if (isCompletionFinishReason(generation.finishReason)) {\n metadata.finishReason = generation.finishReason;\n }\n if (typeof generation.providerFinishReason === \"string\") {\n metadata.providerFinishReason = generation.providerFinishReason;\n }\n if (isContextUsageValue(generation.contextUsage)) {\n metadata.contextUsage = {\n ...generation.contextUsage,\n model: {\n ...generation.contextUsage.model,\n context: { ...generation.contextUsage.model.context },\n },\n };\n }\n if (isCompletionSourceArray(generation.sources)) {\n metadata.sources = generation.sources.map((source) => ({ ...source }));\n }\n if (isProviderToolCallArray(generation.providerToolCalls)) {\n metadata.providerToolCalls = generation.providerToolCalls.map((toolCall) => {\n let copy: ProviderToolCall = { ...toolCall };\n if (toolCall.details !== undefined) {\n copy = { ...copy, details: { ...toolCall.details } };\n }\n return copy;\n });\n }\n return metadata;\n}\n\nfunction isJsonObjectValue(value: JsonValue | undefined): value is JsonObject {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isContextUsageValue(value: JsonValue | undefined): value is JsonObject & ContextUsage {\n if (!isJsonObjectValue(value) || !isJsonObjectValue(value.model)) {\n return false;\n }\n const context = value.model.context;\n if (\n typeof value.model.modelId === \"string\" &&\n isJsonObjectValue(context) &&\n isPositiveFiniteNumber(context.contextWindow) &&\n isOptionalPositiveFiniteNumber(context.maxInputTokens) &&\n isOptionalPositiveFiniteNumber(context.maxOutputTokens) &&\n isNonnegativeFiniteNumber(value.usedTokens) &&\n isNonnegativeFiniteNumber(value.remainingTokens) &&\n isPercentage(value.usedPercent) &&\n isPercentage(value.remainingPercent)\n ) {\n const contextWindow = context.contextWindow;\n const remainingTokens = Math.max(0, contextWindow - value.usedTokens);\n const usedPercent = Math.min(100, (value.usedTokens / contextWindow) * 100);\n const remainingPercent = (remainingTokens / contextWindow) * 100;\n return (\n value.remainingTokens === remainingTokens &&\n approximatelyEqual(value.usedPercent, usedPercent) &&\n approximatelyEqual(value.remainingPercent, remainingPercent)\n );\n }\n return false;\n}\n\nfunction approximatelyEqual(left: number, right: number): boolean {\n const scale = Math.max(1, Math.abs(left), Math.abs(right));\n return Math.abs(left - right) <= Number.EPSILON * scale * 8;\n}\n\nfunction isPositiveFiniteNumber(value: JsonValue | undefined): value is number {\n return isNonnegativeFiniteNumber(value) && value > 0;\n}\n\nfunction isOptionalPositiveFiniteNumber(value: JsonValue | undefined): boolean {\n return value === undefined || isPositiveFiniteNumber(value);\n}\n\nfunction isPercentage(value: JsonValue | undefined): value is number {\n return isNonnegativeFiniteNumber(value) && value <= 100;\n}\n\nfunction isUsageValue(value: JsonValue | undefined): value is JsonObject & Usage {\n if (!isJsonObjectValue(value)) {\n return false;\n }\n return (\n isNonnegativeFiniteNumber(value.inputTokens) &&\n isNonnegativeFiniteNumber(value.outputTokens) &&\n isNonnegativeFiniteNumber(value.totalTokens) &&\n isNonnegativeFiniteNumber(value.cachedInputTokens) &&\n isNonnegativeFiniteNumber(value.cacheCreationInputTokens) &&\n isUsageDetailsValue(value.details)\n );\n}\n\nfunction isNonnegativeFiniteNumber(value: JsonValue | undefined): value is number {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0;\n}\n\nfunction isUsageDetailsValue(value: JsonValue | undefined): value is JsonObject | undefined {\n if (value === undefined) {\n return true;\n }\n if (!isJsonObjectValue(value)) {\n return false;\n }\n let total: number | undefined;\n let bucketSum = 0;\n for (const [key, detail] of Object.entries(value)) {\n if (detail === undefined || !isNonnegativeFiniteNumber(detail)) {\n return false;\n }\n if (key === \"total\") {\n total = detail;\n } else {\n bucketSum += detail;\n }\n }\n return total !== undefined && total === bucketSum;\n}\n\nfunction isCompletionSourceArray(value: JsonValue | undefined): value is CompletionSource[] {\n return (\n Array.isArray(value) &&\n value.every(\n (source) =>\n isJsonObjectValue(source) &&\n source.type === \"url\" &&\n typeof source.url === \"string\" &&\n (source.title === undefined || typeof source.title === \"string\") &&\n (source.id === undefined || typeof source.id === \"string\") &&\n (source.startIndex === undefined || typeof source.startIndex === \"number\") &&\n (source.endIndex === undefined || typeof source.endIndex === \"number\"),\n )\n );\n}\n\nfunction isProviderToolCallArray(value: JsonValue | undefined): value is ProviderToolCall[] {\n return (\n Array.isArray(value) &&\n value.every(\n (toolCall) =>\n isJsonObjectValue(toolCall) &&\n typeof toolCall.id === \"string\" &&\n typeof toolCall.name === \"string\" &&\n (toolCall.status === undefined || typeof toolCall.status === \"string\") &&\n (toolCall.details === undefined || isJsonObjectValue(toolCall.details)),\n )\n );\n}\n\nexport type CompletionRequest = {\n instructions?: string;\n chatHistory: Message[];\n documents: Document[];\n tools: ToolDefinition[];\n providerTools?: ProviderTool[];\n temperature?: number;\n maxTokens?: number;\n toolChoice?: ToolChoice;\n controls?: Readonly<Record<string, string>>;\n providerOptions?: JsonObject;\n outputSchema?: JsonObject;\n};\n\nexport type CompletionFinishReason = \"stop\" | \"length\" | \"content-filter\" | \"tool-calls\" | \"other\";\n\nexport type CompletionResponse<RawResponse = unknown> = {\n choice: AssistantContentPart[];\n usage: Usage;\n finishReason?: CompletionFinishReason;\n providerFinishReason?: string;\n contextUsage?: ContextUsage;\n rawResponse: RawResponse;\n messageId?: string;\n sources?: CompletionSource[];\n providerToolCalls?: ProviderToolCall[];\n};\n\nexport type CompletionResult<Output = string, RawResponse = unknown> = {\n output: Output;\n text: string;\n content: readonly AssistantContentPart[];\n usage: Usage;\n finishReason?: CompletionFinishReason;\n providerFinishReason?: string;\n contextUsage?: ContextUsage;\n rawResponse: RawResponse;\n messageId?: string;\n sources?: readonly CompletionSource[];\n providerToolCalls?: readonly ProviderToolCall[];\n};\n\nfunction isCompletionFinishReason(value: JsonValue | undefined): value is CompletionFinishReason {\n return (\n value === \"stop\" ||\n value === \"length\" ||\n value === \"content-filter\" ||\n value === \"tool-calls\" ||\n value === \"other\"\n );\n}\n\nexport type CompletionModelCapabilities = {\n streaming: boolean;\n tools: boolean;\n toolChoice: boolean;\n imageInput: boolean;\n documentInput: boolean;\n outputSchema: boolean;\n reasoning: boolean;\n providerTools?: boolean;\n};\n\nexport type CompletionModelSelectControl<Option extends string = string> = Readonly<{\n type: \"select\";\n label: string;\n options: readonly Option[];\n description?: string | undefined;\n defaultValue?: Option | undefined;\n}>;\n\nexport type CompletionModelControls = Readonly<\n Record<string, CompletionModelSelectControl<string>>\n>;\n\nexport type NoCompletionModelControls = Readonly<Record<string, never>>;\n\nexport type CompletionControlValues<Controls extends CompletionModelControls> = Readonly<\n Partial<{\n [Key in keyof Controls]: Controls[Key] extends CompletionModelSelectControl<infer Option>\n ? Option\n : never;\n }>\n>;\n\nexport type CompletionModelControlsOf<Model> =\n Model extends CompletionModel<unknown, infer Controls> ? Controls : CompletionModelControls;\n\nexport interface CompletionModel<\n RawResponse = unknown,\n Controls extends CompletionModelControls = CompletionModelControls,\n> {\n readonly provider: string;\n readonly modelId: string;\n readonly contextLimits?: ModelContextLimits | undefined;\n readonly capabilities: CompletionModelCapabilities;\n readonly controls?: Controls | undefined;\n traceRequest?(\n request: CompletionRequest,\n options?: { stream?: boolean | undefined },\n ): JsonObject | undefined;\n completion(\n request: CompletionRequest,\n options?: ModelCallOptions,\n ): Promise<CompletionResponse<RawResponse>>;\n}\n\nexport type ToolCallArgumentsMode = \"append\" | \"replace\";\n\nexport type CompletionStreamPart =\n | {\n type: \"text_delta\";\n delta: string;\n }\n | {\n type: \"reasoning_delta\";\n delta: string;\n id?: string;\n contentType?: ReasoningContentType;\n signature?: string;\n }\n | {\n type: \"tool_call_delta\";\n id: string;\n callId?: string;\n name?: string;\n argumentsDelta?: string;\n argumentsMode?: ToolCallArgumentsMode;\n signature?: string;\n }\n | {\n type: \"tool_call\";\n toolCall: ToolCallPart;\n }\n | {\n type: \"source\";\n source: CompletionSource;\n }\n | {\n type: \"provider_tool_call\";\n toolCall: ProviderToolCall;\n }\n | {\n type: \"message_id\";\n id: string;\n };\n\nexport type CompletionModelStreamEvent<RawResponse = unknown> =\n | CompletionStreamPart\n | {\n type: \"final\";\n response: CompletionResponse<RawResponse>;\n }\n | {\n type: \"error\";\n error: unknown;\n usage?: Usage;\n };\n\nexport type CompletionStreamEvent<Output = string, RawResponse = unknown> =\n | CompletionStreamPart\n | {\n type: \"final\";\n result: CompletionResult<Output, RawResponse>;\n }\n | {\n type: \"error\";\n error: unknown;\n usage: Usage;\n };\n\nexport interface StreamingCompletionModel<\n RawResponse = unknown,\n Controls extends CompletionModelControls = CompletionModelControls,\n> extends CompletionModel<RawResponse, Controls> {\n streamCompletion(\n request: CompletionRequest,\n options?: ModelCallOptions,\n ): AsyncIterable<CompletionModelStreamEvent<RawResponse>>;\n}\n\nexport class CompletionCapabilityError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"CompletionCapabilityError\";\n }\n}\n\nexport function assertCompletionRequestSupported(\n model: CompletionModel,\n request: CompletionRequest,\n options: { streaming?: boolean | undefined } = {},\n): void {\n const modelLabel = `${model.provider}:${model.modelId}`;\n const capabilities = model.capabilities;\n\n assertCompletionControlsSupported(model, request.controls);\n\n if (options.streaming === true && !capabilities.streaming) {\n throw new CompletionCapabilityError(`${modelLabel} does not support streaming completions.`);\n }\n\n if (request.tools.length > 0 && !capabilities.tools) {\n throw new CompletionCapabilityError(`${modelLabel} does not support tool definitions.`);\n }\n\n if ((request.providerTools?.length ?? 0) > 0 && capabilities.providerTools !== true) {\n throw new CompletionCapabilityError(`${modelLabel} does not support provider-executed tools.`);\n }\n\n if (request.toolChoice !== undefined && !capabilities.toolChoice) {\n throw new CompletionCapabilityError(`${modelLabel} does not support tool choice.`);\n }\n\n if (request.outputSchema !== undefined && !capabilities.outputSchema) {\n throw new CompletionCapabilityError(`${modelLabel} does not support output schemas.`);\n }\n\n if (!capabilities.imageInput && requestHasImageInput(request)) {\n throw new CompletionCapabilityError(`${modelLabel} does not support image input.`);\n }\n\n if (!capabilities.documentInput && requestHasFileDocumentInput(request)) {\n throw new CompletionCapabilityError(`${modelLabel} does not support document file input.`);\n }\n}\n\nexport function assertCompletionControlsSupported(\n model: CompletionModel,\n controls: Readonly<Record<string, string | undefined>> | undefined,\n): void {\n const modelLabel = `${model.provider}:${model.modelId}`;\n for (const [controlId, value] of Object.entries(controls ?? {})) {\n if (value === undefined) continue;\n const modelControls = model.controls;\n const control =\n modelControls !== undefined && Object.hasOwn(modelControls, controlId)\n ? modelControls[controlId]\n : undefined;\n if (control === undefined) {\n throw new CompletionCapabilityError(\n `${modelLabel} does not support completion control \"${controlId}\".`,\n );\n }\n if (!control.options.includes(value)) {\n throw new CompletionCapabilityError(\n `${modelLabel} completion control \"${controlId}\" does not support value \"${value}\".`,\n );\n }\n }\n}\n\nexport function textFromAssistantContent(content: readonly AssistantContentPart[]): string {\n return content.flatMap((item) => (item.type === \"text\" ? [item.text] : [])).join(\"\\n\");\n}\n\nfunction requestHasImageInput(request: CompletionRequest): boolean {\n return request.chatHistory.some((message) =>\n message.role === \"system\" || typeof message.content === \"string\"\n ? false\n : message.content.some((content) => content.type === \"image\"),\n );\n}\n\nfunction requestHasFileDocumentInput(request: CompletionRequest): boolean {\n return request.chatHistory.some((message) =>\n message.role === \"user\" && typeof message.content !== \"string\"\n ? message.content.some((content) => content.type === \"file\" && content.data.type !== \"text\")\n : false,\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/internal/agent-runtime/tool-execution.ts"],"sourcesContent":["import type { Agent } from \"../../agent/agent\";\nimport { parseAgentQuestionPrompts } from \"../../agent/interactions\";\nimport { type AgentLifecycle, lifecycleSnapshot } from \"../../agent/lifecycle\";\nimport type { AgentChildStreamEvent } from \"../../agent/run-types\";\nimport type {\n JsonObject,\n ToolCallPart,\n ToolDefinition,\n ToolResultContentPart,\n ToolResultOutput,\n ToolResultPart,\n} from \"../../completion\";\nimport { isJsonValue, Usage } from \"../../completion\";\nimport { assertCompletionResponseIntegrity } from \"../../completion/provider-output-error\";\nimport type { AgentHook, ToolApprovalRequestOptions, ToolHookArgs } from \"../../hooks\";\nimport { runControl, toolCallControl } from \"../../hooks\";\nimport { isMcpTool } from \"../../mcp\";\nimport type { ActiveAgentRunObservers, ActiveToolObservers } from \"../../observability/group\";\nimport type {\n AgentToolEndArgs,\n AgentToolErrorArgs,\n AgentToolStartArgs,\n AgentToolStreamEventArgs,\n AgentToolSuspendedArgs,\n} from \"../../observability/types\";\nimport type {\n AnyTool,\n NormalizedToolOutput,\n ToolApprovalContext,\n ToolApprovalRunContext,\n ToolCallContext,\n ToolCallStreamEvent,\n ToolRequiresApproval,\n} from \"../../tool\";\nimport {\n normalizeToolResultOutput,\n parseToolArgs,\n ToolOutput,\n toolResultContentToText,\n} from \"../../tool\";\nimport type {\n AgentMiddleware,\n ToolOutputMiddlewareArgs,\n ToolOutputMiddlewareResult,\n} from \"../../tool/middleware\";\nimport { isQuestionTool } from \"../../tool/question-tool\";\nimport { isSkillTool } from \"../../tool/skill-tool-marker\";\nimport { throwIfAborted } from \"../abort\";\nimport { mapWithConcurrency } from \"../concurrency\";\nimport type { ToolApprovalRequest } from \"./approval-request\";\nimport { assertToolApprovalRequirement, toolMayRequireApproval } from \"./approval-requirement\";\nimport {\n AgentInteractionSignal,\n type PendingToolExecution,\n ToolExecutionSuspension,\n} from \"./interaction-suspension\";\nimport {\n type PreparedToolCall,\n prepareToolCall as prepareRegisteredToolCall,\n prepareToolCallFromInput,\n} from \"./prepared-tool-call\";\n\nexport type ToolResultEventPayload = {\n type: \"tool_result\";\n toolName: string;\n toolCallId: string;\n callId?: string;\n internalCallId: string;\n args: string;\n output: ToolResultOutput;\n result: string;\n structuredResult?: readonly ToolResultContentPart[] | undefined;\n};\n\nexport type AgentToolEventPayload = {\n type: \"agent_tool_event\";\n toolName: string;\n toolCallId?: string;\n internalCallId: string;\n agentId: string;\n agentName?: string;\n event: AgentChildStreamEvent<unknown, unknown>;\n};\n\nexport type ToolExecutionEventPayload = ToolResultEventPayload | AgentToolEventPayload;\n\nexport type ToolExecutionObservation = {\n turn: number;\n runObservers: ActiveAgentRunObservers;\n toolDefinitions?: ToolDefinition[];\n};\n\nexport type ToolExecutionRunContext = {\n runId: string;\n sessionId?: string | undefined;\n metadata?: JsonObject | undefined;\n};\n\nexport type ToolApprovalDecision =\n | { approved: true; reason?: string }\n | { approved: false; reason?: string };\n\nexport type ToolApprovalHandler = (request: ToolApprovalRequest) => Promise<ToolApprovalDecision>;\n\ntype ToolExecutionAgent = Pick<Agent, \"id\" | \"getTool\" | \"callTool\" | \"middlewares\">;\ntype ToolExecutionLifecycle = Pick<AgentLifecycle, \"onToolStart\" | \"onToolFinish\">;\n\nexport class ToolCallExecutor {\n constructor(\n private readonly agent: ToolExecutionAgent,\n private readonly activeHook: AgentHook | undefined,\n private readonly approvalHandler: ToolApprovalHandler,\n private readonly lifecycle: ToolExecutionLifecycle | undefined,\n private readonly runContext: ToolExecutionRunContext,\n private readonly concurrency: number,\n private readonly requestMiddlewares: readonly AgentMiddleware[],\n private readonly abortSignal: AbortSignal,\n private readonly cancel: (reason: string) => Error,\n ) {}\n\n async execute(\n toolCalls: readonly ToolCallPart[],\n onResult?: (result: ToolResultEventPayload) => void,\n onStreamEvent?: (event: AgentToolEventPayload) => void,\n observation?: ToolExecutionObservation,\n ): Promise<ToolResultPart[]> {\n assertCompletionResponseIntegrity({\n response: {\n choice: [...toolCalls],\n usage: Usage.empty(),\n rawResponse: undefined,\n },\n });\n\n const executeOne = async (toolCall: ToolCallPart): Promise<ToolResultPart> => {\n throwIfAborted(this.abortSignal);\n const args = JSON.stringify(toolCall.input);\n const internalCallId = globalThis.crypto.randomUUID();\n const hookArgs: ToolHookArgs = {\n toolName: toolCall.toolName,\n toolCallId: toolCall.toolCallId,\n internalCallId,\n args,\n };\n if (toolCall.callId !== undefined) {\n hookArgs.callId = toolCall.callId;\n }\n const tool = this.agent.getTool(toolCall.toolName);\n const toolDefinition = observation?.toolDefinitions?.find(\n (definition) => definition.name === toolCall.toolName,\n );\n const toolMetadata = toolTraceMetadata(tool);\n\n let toolStartArgs: AgentToolStartArgs = {\n turn: observation?.turn ?? 0,\n toolCall,\n toolName: toolCall.toolName,\n internalCallId,\n args,\n };\n if (toolCall.callId !== undefined) {\n toolStartArgs = { ...toolStartArgs, toolCallId: toolCall.callId };\n }\n if (toolDefinition !== undefined) toolStartArgs = { ...toolStartArgs, toolDefinition };\n if (toolMetadata !== undefined) toolStartArgs = { ...toolStartArgs, toolMetadata };\n const toolObservers = await observation?.runObservers.startTool(toolStartArgs);\n const toolObservation = new ToolObserverScope(toolObservers);\n\n let output: NormalizedToolOutput | undefined;\n let skipped = false;\n let toolExecutionFailed = false;\n let effectiveArgs = args;\n\n try {\n const callAction = await this.activeHook?.onToolCall?.({\n ...hookArgs,\n tool: toolCallControl,\n });\n if (callAction?.type === \"terminate\") {\n throw this.cancel(callAction.reason);\n }\n if (callAction?.type === \"skip\") {\n output = { type: \"text\", value: callAction.reason };\n skipped = true;\n } else {\n try {\n effectiveArgs = await this.runToolInputMiddlewares({\n ...hookArgs,\n turn: observation?.turn ?? 0,\n originalArgs: args,\n });\n hookArgs.args = effectiveArgs;\n\n let prepared: PreparedToolCall | undefined;\n try {\n prepared = this.prepareToolCall(tool, toolCall.toolName, effectiveArgs);\n } catch (error) {\n const outcome = await this.handleToolError(\n toolCall,\n hookArgs,\n effectiveArgs,\n error,\n toolObservation,\n observation,\n );\n output = outcome.output;\n toolExecutionFailed = outcome.failed;\n }\n if (prepared !== undefined && isQuestionTool(tool)) {\n try {\n const questions = parseAgentQuestionPrompts(\n (prepared.input as { questions?: unknown }).questions,\n );\n const interaction = {\n type: \"tool-question\",\n id: globalThis.crypto.randomUUID(),\n toolName: toolCall.toolName,\n toolCallId: toolCall.toolCallId,\n internalCallId,\n questions,\n } as const;\n if (toolCall.callId !== undefined) {\n Object.assign(interaction, { callId: toolCall.callId });\n }\n throw new AgentInteractionSignal(interaction);\n } catch (error) {\n if (error instanceof AgentInteractionSignal) throw error;\n const outcome = await this.handleToolError(\n toolCall,\n hookArgs,\n effectiveArgs,\n error,\n toolObservation,\n observation,\n );\n output = outcome.output;\n toolExecutionFailed = outcome.failed;\n prepared = undefined;\n }\n }\n if (prepared !== undefined) {\n const approvalContext = createApprovalContext(\n prepared.input,\n hookArgs,\n this.agent,\n this.runContext,\n );\n const approvalDecision =\n callAction?.type === \"approval_request\"\n ? await this.requestApproval(approvalContext, callAction, observation)\n : ((await this.evaluateToolApproval(tool, approvalContext, observation)) ?? {\n approved: true as const,\n });\n if (!approvalDecision.approved) {\n output = { type: \"execution-denied\", reason: approvalDecision.result };\n skipped = true;\n } else {\n const step = observation?.turn ?? 0;\n const lifecycleEvent = {\n runId: this.runContext.runId,\n step,\n toolName: toolCall.toolName,\n input: lifecycleSnapshot(prepared.input),\n };\n if (toolCall.callId !== undefined) {\n Object.assign(lifecycleEvent, { toolCallId: toolCall.callId });\n }\n await this.lifecycle?.onToolStart?.(lifecycleEvent);\n const startedAt = Date.now();\n const outcome = await this.runApprovedToolCall(\n prepared,\n toolCall,\n hookArgs,\n effectiveArgs,\n toolObservation,\n observation,\n onStreamEvent,\n );\n output = outcome.output;\n toolExecutionFailed = outcome.failed;\n const durationMs = Date.now() - startedAt;\n await this.lifecycle?.onToolFinish?.(\n outcome.failed\n ? {\n ...lifecycleEvent,\n durationMs,\n success: false,\n error: lifecycleSnapshot(outcome.error),\n }\n : {\n ...lifecycleEvent,\n durationMs,\n success: true,\n output: lifecycleSnapshot(output),\n },\n );\n }\n }\n } catch (error) {\n if (error instanceof AgentInteractionSignal) {\n await toolObservation.suspend({\n ...toolStartArgs,\n interaction: error.interaction,\n });\n throw error;\n }\n await toolObservation.error(\n toolErrorArgs(observation?.turn ?? 0, toolCall, internalCallId, effectiveArgs, error),\n );\n throw error;\n }\n }\n\n if (output === undefined) {\n throw new Error(`Tool \"${toolCall.toolName}\" did not produce an execution result.`);\n }\n let result = toolOutputToText(output);\n let structuredResult = toolOutputToStructuredResult(output);\n if (!isSkillTool(tool)) {\n const middlewareReplacement = await this.runToolResultMiddlewares({\n ...hookArgs,\n args: effectiveArgs,\n result,\n originalResult: result,\n structuredResult,\n originalStructuredResult: structuredResult,\n turn: observation?.turn ?? 0,\n });\n if (middlewareReplacement !== undefined) {\n output = middlewareReplacement;\n result = toolOutputToText(middlewareReplacement);\n structuredResult = toolOutputToStructuredResult(middlewareReplacement);\n }\n }\n\n const resultAction = await this.activeHook?.onToolResult?.({\n ...hookArgs,\n args: effectiveArgs,\n result,\n structuredResult,\n run: runControl,\n });\n if (!toolExecutionFailed) {\n await toolObservation.end({\n turn: observation?.turn ?? 0,\n toolCall,\n toolName: toolCall.toolName,\n internalCallId,\n args: effectiveArgs,\n result,\n structuredResult,\n skipped,\n toolCallId: toolCall.callId,\n });\n }\n if (resultAction?.type === \"terminate\") {\n throw this.cancel(resultAction.reason);\n }\n\n const resultPayload: ToolResultEventPayload = {\n type: \"tool_result\",\n toolName: toolCall.toolName,\n toolCallId: toolCall.toolCallId,\n internalCallId,\n args: effectiveArgs,\n output,\n result,\n structuredResult,\n };\n if (toolCall.callId !== undefined) resultPayload.callId = toolCall.callId;\n onResult?.(resultPayload);\n let resultPart: ToolResultPart = {\n type: \"tool-result\" as const,\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n output,\n };\n if (toolCall.callId !== undefined) {\n resultPart = { ...resultPart, callId: toolCall.callId };\n }\n return resultPart;\n } catch (error) {\n if (error instanceof AgentInteractionSignal) {\n const pending: PendingToolExecution = {\n toolCall,\n effectiveArgs,\n input:\n error.interaction.type === \"tool-approval\"\n ? error.interaction.input\n : parseToolArgs(effectiveArgs),\n internalCallId,\n };\n if (error.rejectMessage !== undefined) pending.rejectMessage = error.rejectMessage;\n throw new ToolExecutionSuspension(error.interaction, pending);\n }\n await toolObservation.error(\n toolErrorArgs(observation?.turn ?? 0, toolCall, internalCallId, effectiveArgs, error),\n );\n throw error;\n }\n };\n\n if (this.concurrency === 1) {\n const results: ToolResultPart[] = [];\n for (const toolCall of toolCalls) {\n try {\n results.push(await executeOne(toolCall));\n } catch (error) {\n if (error instanceof ToolExecutionSuspension) {\n error.completedResults = [...results];\n error.remainingToolCalls = toolCalls.slice(results.length + 1);\n }\n throw error;\n }\n }\n return results;\n }\n return mapWithConcurrency(toolCalls, this.concurrency, executeOne);\n }\n\n async executeResumed(\n pending: PendingToolExecution,\n onResult?: (result: ToolResultEventPayload) => void,\n onStreamEvent?: (event: AgentToolEventPayload) => void,\n observation?: ToolExecutionObservation,\n ): Promise<ToolResultPart> {\n throwIfAborted(this.abortSignal);\n const { toolCall, internalCallId, effectiveArgs } = pending;\n const tool = this.agent.getTool(toolCall.toolName);\n if (tool === undefined) {\n throw new Error(\n `Cannot resume tool interaction because tool \"${toolCall.toolName}\" is no longer registered.`,\n );\n }\n if (isQuestionTool(tool)) {\n throw new TypeError(\"Question interactions are resolved from their submitted answers.\");\n }\n\n const hookArgs: ToolHookArgs = {\n toolName: toolCall.toolName,\n toolCallId: toolCall.toolCallId,\n internalCallId,\n args: effectiveArgs,\n };\n if (toolCall.callId !== undefined) hookArgs.callId = toolCall.callId;\n const toolDefinition = observation?.toolDefinitions?.find(\n (definition) => definition.name === toolCall.toolName,\n );\n const toolMetadata = toolTraceMetadata(tool);\n let toolStartArgs: AgentToolStartArgs = {\n turn: observation?.turn ?? 0,\n toolCall,\n toolName: toolCall.toolName,\n internalCallId,\n args: effectiveArgs,\n };\n if (toolCall.callId !== undefined) {\n toolStartArgs = { ...toolStartArgs, toolCallId: toolCall.callId };\n }\n if (toolDefinition !== undefined) toolStartArgs = { ...toolStartArgs, toolDefinition };\n if (toolMetadata !== undefined) toolStartArgs = { ...toolStartArgs, toolMetadata };\n const observers = await observation?.runObservers.startTool(toolStartArgs);\n const toolObservation = new ToolObserverScope(observers);\n let output: NormalizedToolOutput;\n let failed = false;\n\n try {\n const prepared = prepareToolCallFromInput(tool, pending.input);\n const step = observation?.turn ?? 0;\n const lifecycleEvent = {\n runId: this.runContext.runId,\n step,\n toolName: toolCall.toolName,\n input: lifecycleSnapshot(prepared.input),\n };\n if (toolCall.callId !== undefined) {\n Object.assign(lifecycleEvent, { toolCallId: toolCall.callId });\n }\n await this.lifecycle?.onToolStart?.(lifecycleEvent);\n const startedAt = Date.now();\n const outcome = await this.runApprovedToolCall(\n prepared,\n toolCall,\n hookArgs,\n effectiveArgs,\n toolObservation,\n observation,\n onStreamEvent,\n );\n output = outcome.output;\n failed = outcome.failed;\n const durationMs = Date.now() - startedAt;\n await this.lifecycle?.onToolFinish?.(\n outcome.failed\n ? {\n ...lifecycleEvent,\n durationMs,\n success: false,\n error: lifecycleSnapshot(outcome.error),\n }\n : {\n ...lifecycleEvent,\n durationMs,\n success: true,\n output: lifecycleSnapshot(output),\n },\n );\n\n let result = toolOutputToText(output);\n let structuredResult = toolOutputToStructuredResult(output);\n if (!isSkillTool(tool)) {\n const replacement = await this.runToolResultMiddlewares({\n ...hookArgs,\n args: effectiveArgs,\n result,\n originalResult: result,\n structuredResult,\n originalStructuredResult: structuredResult,\n turn: step,\n });\n if (replacement !== undefined) {\n output = replacement;\n result = toolOutputToText(replacement);\n structuredResult = toolOutputToStructuredResult(replacement);\n }\n }\n const resultAction = await this.activeHook?.onToolResult?.({\n ...hookArgs,\n result,\n structuredResult,\n run: runControl,\n });\n if (!failed) {\n await toolObservation.end({\n turn: step,\n toolCall,\n toolName: toolCall.toolName,\n internalCallId,\n args: effectiveArgs,\n result,\n structuredResult,\n skipped: false,\n toolCallId: toolCall.callId,\n });\n }\n if (resultAction?.type === \"terminate\") {\n throw this.cancel(resultAction.reason);\n }\n const resultPayload: ToolResultEventPayload = {\n type: \"tool_result\",\n toolName: toolCall.toolName,\n toolCallId: toolCall.toolCallId,\n internalCallId,\n args: effectiveArgs,\n output,\n result,\n structuredResult,\n };\n if (toolCall.callId !== undefined) resultPayload.callId = toolCall.callId;\n onResult?.(resultPayload);\n let resultPart: ToolResultPart = {\n type: \"tool-result\",\n toolName: toolCall.toolName,\n toolCallId: toolCall.toolCallId,\n output,\n };\n if (toolCall.callId !== undefined) resultPart = { ...resultPart, callId: toolCall.callId };\n return resultPart;\n } catch (error) {\n await toolObservation.error(\n toolErrorArgs(observation?.turn ?? 0, toolCall, internalCallId, effectiveArgs, error),\n );\n throw error;\n }\n }\n\n async resolveResumed(\n pending: PendingToolExecution,\n initialOutput: NormalizedToolOutput,\n onResult?: (result: ToolResultEventPayload) => void,\n observation?: ToolExecutionObservation,\n ): Promise<ToolResultPart> {\n throwIfAborted(this.abortSignal);\n const { toolCall, internalCallId, effectiveArgs } = pending;\n const tool = this.agent.getTool(toolCall.toolName);\n if (tool === undefined) {\n throw new Error(\n `Cannot resume tool interaction because tool \"${toolCall.toolName}\" is no longer registered.`,\n );\n }\n\n const hookArgs: ToolHookArgs = {\n toolName: toolCall.toolName,\n toolCallId: toolCall.toolCallId,\n internalCallId,\n args: effectiveArgs,\n };\n if (toolCall.callId !== undefined) hookArgs.callId = toolCall.callId;\n const toolDefinition = observation?.toolDefinitions?.find(\n (definition) => definition.name === toolCall.toolName,\n );\n const toolMetadata = toolTraceMetadata(tool);\n let toolStartArgs: AgentToolStartArgs = {\n turn: observation?.turn ?? 0,\n toolCall,\n toolName: toolCall.toolName,\n internalCallId,\n args: effectiveArgs,\n };\n if (toolCall.callId !== undefined) {\n toolStartArgs = { ...toolStartArgs, toolCallId: toolCall.callId };\n }\n if (toolDefinition !== undefined) toolStartArgs = { ...toolStartArgs, toolDefinition };\n if (toolMetadata !== undefined) toolStartArgs = { ...toolStartArgs, toolMetadata };\n const observers = await observation?.runObservers.startTool(toolStartArgs);\n const toolObservation = new ToolObserverScope(observers);\n\n try {\n let output = initialOutput;\n let result = toolOutputToText(output);\n let structuredResult = toolOutputToStructuredResult(output);\n if (!isSkillTool(tool)) {\n const replacement = await this.runToolResultMiddlewares({\n ...hookArgs,\n args: effectiveArgs,\n result,\n originalResult: result,\n structuredResult,\n originalStructuredResult: structuredResult,\n turn: observation?.turn ?? 0,\n });\n if (replacement !== undefined) {\n output = replacement;\n result = toolOutputToText(replacement);\n structuredResult = toolOutputToStructuredResult(replacement);\n }\n }\n const resultAction = await this.activeHook?.onToolResult?.({\n ...hookArgs,\n result,\n structuredResult,\n run: runControl,\n });\n await toolObservation.end({\n turn: observation?.turn ?? 0,\n toolCall,\n toolName: toolCall.toolName,\n internalCallId,\n args: effectiveArgs,\n result,\n structuredResult,\n skipped: true,\n toolCallId: toolCall.callId,\n });\n if (resultAction?.type === \"terminate\") {\n throw this.cancel(resultAction.reason);\n }\n const resultPayload: ToolResultEventPayload = {\n type: \"tool_result\",\n toolName: toolCall.toolName,\n toolCallId: toolCall.toolCallId,\n internalCallId,\n args: effectiveArgs,\n output,\n result,\n structuredResult,\n };\n if (toolCall.callId !== undefined) resultPayload.callId = toolCall.callId;\n onResult?.(resultPayload);\n let resultPart: ToolResultPart = {\n type: \"tool-result\",\n toolName: toolCall.toolName,\n toolCallId: toolCall.toolCallId,\n output,\n };\n if (toolCall.callId !== undefined) resultPart = { ...resultPart, callId: toolCall.callId };\n return resultPart;\n } catch (error) {\n await toolObservation.error(\n toolErrorArgs(observation?.turn ?? 0, toolCall, internalCallId, effectiveArgs, error),\n );\n throw error;\n }\n }\n\n private async runApprovedToolCall(\n prepared: PreparedToolCall,\n toolCall: ToolCallPart,\n hookArgs: ToolHookArgs,\n effectiveArgs: string,\n toolObservation: ToolObserverScope,\n observation: ToolExecutionObservation | undefined,\n onStreamEvent?: (event: AgentToolEventPayload) => void,\n ): Promise<\n | { output: NormalizedToolOutput; failed: false }\n | { output: NormalizedToolOutput; failed: true; error: unknown }\n > {\n try {\n const toolContext: ToolCallContext = {\n abortSignal: this.abortSignal,\n emitStreamEvent: async (event) => {\n let streamEventArgs: AgentToolStreamEventArgs = {\n turn: observation?.turn ?? 0,\n toolCall,\n toolName: toolCall.toolName,\n internalCallId: hookArgs.internalCallId,\n args: effectiveArgs,\n event,\n };\n if (toolCall.callId !== undefined) {\n streamEventArgs = { ...streamEventArgs, toolCallId: toolCall.callId };\n }\n await toolObservation.streamEvent(streamEventArgs);\n const payload = agentToolEventPayload(toolCall, hookArgs.internalCallId, event);\n if (payload !== undefined) {\n onStreamEvent?.(payload);\n }\n },\n };\n return {\n output: await prepared.call(toolContext),\n failed: false,\n };\n } catch (error) {\n return this.handleToolError(\n toolCall,\n hookArgs,\n effectiveArgs,\n error,\n toolObservation,\n observation,\n );\n }\n }\n\n private prepareToolCall(\n tool: AnyTool | undefined,\n toolName: string,\n args: string,\n ): PreparedToolCall {\n if (tool !== undefined) {\n return prepareRegisteredToolCall(tool, args);\n }\n const input = parseToolArgs(args);\n return {\n input,\n call: (context) => this.agent.callTool(toolName, args, context),\n };\n }\n\n private async handleToolError(\n toolCall: ToolCallPart,\n hookArgs: ToolHookArgs,\n args: string,\n error: unknown,\n toolObservation: ToolObserverScope,\n observation: ToolExecutionObservation | undefined,\n ): Promise<{ output: NormalizedToolOutput; failed: true; error: unknown }> {\n const errorAction = await this.activeHook?.onToolError?.({\n ...hookArgs,\n args,\n error,\n run: runControl,\n });\n await toolObservation.error(\n toolErrorArgs(observation?.turn ?? 0, toolCall, hookArgs.internalCallId, args, error),\n );\n if (errorAction?.type === \"terminate\") {\n throw this.cancel(errorAction.reason);\n }\n return {\n output: {\n type: \"error-text\",\n value: error instanceof Error ? error.toString() : String(error),\n },\n failed: true,\n error,\n };\n }\n\n private async runToolResultMiddlewares(\n args: ToolOutputMiddlewareArgs,\n ): Promise<NormalizedToolOutput | undefined> {\n let result = args.result;\n let structuredResult = args.structuredResult;\n let replaced = false;\n for (const middleware of this.activeMiddlewares()) {\n const outputReplacement = await middleware.onToolOutput?.({\n ...args,\n result,\n structuredResult,\n });\n if (outputReplacement !== undefined) {\n const normalized = normalizeToolOutputMiddlewareResult(outputReplacement);\n if (normalized.result !== undefined) {\n result = normalized.result;\n structuredResult = undefined;\n }\n if (normalized.structuredResult !== undefined) {\n structuredResult = normalized.structuredResult;\n result = toolResultContentToText(normalized.structuredResult);\n }\n replaced = true;\n }\n }\n return replaced\n ? structuredResult === undefined\n ? { type: \"text\", value: result }\n : { type: \"content\", value: structuredResult }\n : undefined;\n }\n\n private async runToolInputMiddlewares(\n args: ToolHookArgs & { turn: number; originalArgs: string },\n ): Promise<string> {\n let current = args.args;\n for (const middleware of this.activeMiddlewares()) {\n const replacement = await middleware.onToolInput?.({\n ...args,\n args: current,\n });\n if (replacement?.args !== undefined) {\n if (typeof replacement.args === \"string\") {\n current = replacement.args;\n } else {\n if (!isJsonValue(replacement.args)) {\n throw new TypeError(\"Tool input middleware args must be a strict JSON value.\");\n }\n current = JSON.stringify(replacement.args);\n }\n }\n }\n return current;\n }\n\n private activeMiddlewares(): AgentMiddleware[] {\n return [...this.agent.middlewares, ...this.requestMiddlewares];\n }\n\n private async evaluateToolApproval(\n tool: AnyTool | undefined,\n context: ToolApprovalContext,\n observation: ToolExecutionObservation | undefined,\n ): Promise<{ approved: true } | { approved: false; result: string } | undefined> {\n const requirement = tool?.requiresApproval as ToolRequiresApproval<unknown> | undefined;\n if (requirement === undefined) return undefined;\n const resolved =\n typeof requirement === \"function\" ? await requirement(context.args, context) : requirement;\n assertToolApprovalRequirement(resolved, { allowFunction: false });\n if (resolved === false) return { approved: true };\n const reason = resolved === true ? undefined : resolved.reason;\n return this.requestApproval(context, reason === undefined ? {} : { reason }, observation);\n }\n\n private async requestApproval(\n context: ToolApprovalContext,\n options: ToolApprovalRequestOptions,\n observation: ToolExecutionObservation | undefined,\n ): Promise<{ approved: true } | { approved: false; result: string }> {\n const request: ToolApprovalRequest = {\n ...context,\n id: globalThis.crypto.randomUUID(),\n };\n if (options.reason !== undefined) {\n request.reason = options.reason;\n }\n if (options.rejectMessage !== undefined) {\n request.rejectMessage = options.rejectMessage;\n }\n await observation?.runObservers.event({\n name: \"tool.approval_requested\",\n attributes: approvalEventAttributes(request, observation.turn),\n });\n let decision: ToolApprovalDecision;\n try {\n decision = await this.approvalHandler(request);\n } catch (error) {\n if (error instanceof AgentInteractionSignal) {\n throw error;\n }\n await observation?.runObservers.event({\n name: \"tool.approval_failed\",\n level: \"ERROR\",\n attributes: {\n ...approvalEventAttributes(request, observation.turn),\n errorName: error instanceof Error ? error.name : typeof error,\n },\n });\n throw error;\n }\n const attributes: JsonObject = {\n ...approvalEventAttributes(request, observation?.turn ?? 0),\n approved: decision.approved,\n };\n if (decision.reason !== undefined) attributes.decisionReason = decision.reason;\n await observation?.runObservers.event({\n name: \"tool.approval_resolved\",\n attributes,\n });\n if (decision.approved) {\n return { approved: true };\n }\n return {\n approved: false,\n result: decision.reason ?? request.rejectMessage ?? \"Tool approval was rejected.\",\n };\n }\n}\n\nfunction createApprovalContext(\n input: unknown,\n hookArgs: ToolHookArgs,\n agent: Pick<Agent, \"id\">,\n run: ToolExecutionRunContext,\n): ToolApprovalContext {\n const approvalRun: ToolApprovalRunContext = {\n agentId: agent.id,\n runId: run.runId,\n };\n if (run.sessionId !== undefined) {\n approvalRun.sessionId = run.sessionId;\n }\n if (run.metadata !== undefined) {\n approvalRun.metadata = run.metadata;\n }\n const context: ToolApprovalContext = {\n toolName: hookArgs.toolName,\n args: lifecycleSnapshot(input),\n rawArgs: hookArgs.args,\n toolCallId: hookArgs.toolCallId,\n internalCallId: hookArgs.internalCallId,\n run: approvalRun,\n };\n if (hookArgs.callId !== undefined) {\n context.callId = hookArgs.callId;\n }\n return context;\n}\n\nfunction approvalEventAttributes(request: ToolApprovalRequest, turn: number): JsonObject {\n const attributes: JsonObject = {\n turn,\n approvalId: request.id,\n toolName: request.toolName,\n internalCallId: request.internalCallId,\n };\n if (request.toolCallId !== undefined) attributes.toolCallId = request.toolCallId;\n if (request.reason !== undefined) attributes.reason = request.reason;\n return attributes;\n}\n\nfunction normalizeToolOutputMiddlewareResult(result: ToolOutputMiddlewareResult): {\n result?: string | undefined;\n structuredResult?: readonly ToolResultContentPart[] | undefined;\n} {\n if (typeof result === \"string\") {\n return { result };\n }\n if (typeof result !== \"object\" || result === null) {\n throw new TypeError(\"Tool output middleware must return text or structured content.\");\n }\n const prototype = Object.getPrototypeOf(result);\n if (prototype !== Object.prototype && prototype !== null) {\n throw new TypeError(\"Tool output middleware must return text or structured content.\");\n }\n const keys = Reflect.ownKeys(result);\n const hasResult = keys.includes(\"result\");\n const hasStructuredResult = keys.includes(\"structuredResult\");\n if (\n hasResult === hasStructuredResult ||\n keys.some((key) => key !== \"result\" && key !== \"structuredResult\")\n ) {\n throw new TypeError(\n \"Tool output middleware must return exactly one of result or structuredResult.\",\n );\n }\n if (hasResult) {\n const descriptor = Object.getOwnPropertyDescriptor(result, \"result\");\n if (\n descriptor === undefined ||\n !(\"value\" in descriptor) ||\n typeof descriptor.value !== \"string\"\n ) {\n throw new TypeError(\"Tool output middleware result must be a string.\");\n }\n return { result: descriptor.value };\n }\n const descriptor = Object.getOwnPropertyDescriptor(result, \"structuredResult\");\n if (descriptor === undefined || !(\"value\" in descriptor)) {\n throw new TypeError(\"Tool output middleware structuredResult must be valid tool content.\");\n }\n const normalized = normalizeToolResultOutput(ToolOutput.content(descriptor.value as never));\n if (normalized.type !== \"content\") {\n throw new TypeError(\"Tool output middleware structuredResult must be valid tool content.\");\n }\n return { structuredResult: normalized.value };\n}\n\nfunction toolTraceMetadata(tool: AnyTool | undefined): JsonObject | undefined {\n if (tool === undefined) {\n return undefined;\n }\n const result: JsonObject = {\n approvalRequired: toolMayRequireApproval(tool.requiresApproval),\n };\n if (isMcpTool(tool)) {\n result.mcpServerName = tool.mcp.serverName;\n result.mcpRemoteName = tool.mcp.remoteName;\n }\n return result;\n}\n\nfunction toolErrorArgs(\n turn: number,\n toolCall: ToolCallPart,\n internalCallId: string,\n args: string,\n error: unknown,\n): AgentToolErrorArgs {\n let observerArgs: AgentToolErrorArgs = {\n turn,\n toolCall,\n toolName: toolCall.toolName,\n internalCallId,\n args,\n error,\n };\n if (toolCall.callId !== undefined) {\n observerArgs = { ...observerArgs, toolCallId: toolCall.callId };\n }\n return observerArgs;\n}\n\nclass ToolObserverScope {\n private terminal = false;\n\n constructor(private readonly observers: ActiveToolObservers | undefined) {}\n\n streamEvent(args: AgentToolStreamEventArgs): Promise<void> | undefined {\n return this.observers?.streamEvent(args);\n }\n\n async end(args: AgentToolEndArgs): Promise<void> {\n if (this.terminal) return;\n this.terminal = true;\n await this.observers?.end(args);\n }\n\n async suspend(args: AgentToolSuspendedArgs): Promise<void> {\n if (this.terminal) return;\n this.terminal = true;\n await this.observers?.suspend(args);\n }\n\n async error(args: AgentToolErrorArgs): Promise<void> {\n if (this.terminal) return;\n this.terminal = true;\n await this.observers?.error(args);\n }\n}\n\nfunction toolOutputToText(output: NormalizedToolOutput): string {\n switch (output.type) {\n case \"text\":\n case \"error-text\":\n return output.value;\n case \"json\":\n case \"error-json\":\n return JSON.stringify(output.value);\n case \"content\":\n return toolResultContentToText(output.value);\n case \"execution-denied\":\n return output.reason ?? \"Tool execution was denied.\";\n }\n}\n\nfunction toolOutputToStructuredResult(\n output: NormalizedToolOutput,\n): readonly ToolResultContentPart[] | undefined {\n return output.type === \"content\" ? output.value : undefined;\n}\n\nfunction agentToolEventPayload(\n toolCall: ToolCallPart,\n internalCallId: string,\n event: ToolCallStreamEvent,\n): AgentToolEventPayload | undefined {\n if (typeof event.agentId !== \"string\" || event.agentId.length === 0) {\n return undefined;\n }\n const payload: AgentToolEventPayload = {\n type: \"agent_tool_event\" as const,\n toolName: toolCall.toolName,\n internalCallId,\n agentId: event.agentId,\n event: event.event as AgentChildStreamEvent<unknown, unknown>,\n };\n if (toolCall.callId !== undefined) {\n payload.toolCallId = toolCall.callId;\n }\n if (event.agentName !== undefined) {\n payload.agentName = event.agentName;\n }\n return payload;\n}\n"],"mappings":"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","names":["descriptor"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/internal/team-runtime/run.ts"],"sourcesContent":["import { AgentRunCancelledError, AgentStreamClosedError } from \"../../agent/errors\";\nimport {\n assertAgentInteractionResponse,\n parseAgentInteractionResponse,\n} from \"../../agent/interactions\";\nimport { composeAgentLifecycle, lifecycleSnapshot } from \"../../agent/lifecycle\";\nimport { createResolvedAgent, getResolvedAgentOptions } from \"../../agent/resolved-agent\";\nimport type {\n AgentInput,\n AgentOutcome,\n AgentSteerInput,\n AgentSteerReceipt,\n AgentStreamEvent,\n} from \"../../agent/run-types\";\nimport { AgentTeamInteractionError, AgentTeamLimitError } from \"../../agent/team/errors\";\nimport type {\n AgentTeamEvent,\n AgentTeamLimits,\n AgentTeamMember,\n AgentTeamMessage,\n AgentTeamOutcome,\n AgentTeamRunOptions,\n} from \"../../agent/team/types\";\nimport { isStreamingCompletionModel } from \"../../completion/generate-completion\";\nimport { parseMessages, Usage, type CompletionResponse } from \"../../completion\";\nimport { throwIfAborted } from \"../abort\";\nimport { AgentRun } from \"../agent-runtime/agent-run\";\nimport { withInternalAgentRunOptions } from \"../agent-runtime/run-options\";\nimport { abortable, TeamChanges, TeamSlots } from \"./coordination\";\nimport {\n agentMessageInput,\n memberSummary,\n steeringMessages,\n type TeamInput,\n type TeamMember,\n} from \"./member\";\nimport { TEAM_INSTRUCTIONS, teamTools } from \"./tools\";\nimport type { TeamPolicy } from \"./policy\";\n\nexport class TeamRun<Output = unknown> {\n readonly id = globalThis.crypto.randomUUID();\n private readonly controller = new AbortController();\n private readonly changes = new TeamChanges();\n private readonly slots: TeamSlots;\n private readonly instances = new Map<string, TeamMember>();\n private readonly leader: TeamMember;\n private closed = false;\n private started = false;\n private turns = 0;\n private fatal: unknown;\n private removeAbortListener: (() => void) | undefined;\n\n constructor(\n leader: AgentTeamMember,\n private readonly policy: TeamPolicy,\n private readonly limits: Required<AgentTeamLimits>,\n private readonly options: AgentTeamRunOptions<unknown>,\n private readonly streaming: boolean,\n private readonly emit: (event: AgentTeamEvent<Output>) => void,\n ) {\n this.slots = new TeamSlots(limits.maxConcurrentAgents);\n this.leader = this.createMember(leader, leader.name ?? leader.id);\n const messages =\n options.messages === undefined\n ? steeringMessages({ prompt: options.prompt! })\n : parseMessages(options.messages);\n const last = messages.at(-1);\n if (last?.role !== \"user\")\n throw new TypeError(\"Agent team input must end with a user message.\");\n this.leader.history = messages.slice(0, -1);\n this.leader.inputs.push({\n id: globalThis.crypto.randomUUID(),\n messages: [last],\n submitted: false,\n });\n if (options.abortSignal !== undefined) {\n const signal = options.abortSignal;\n const abort = () => this.cancel(\"Agent team aborted.\");\n if (signal.aborted) abort();\n else {\n signal.addEventListener(\"abort\", abort, { once: true });\n this.removeAbortListener = () => signal.removeEventListener(\"abort\", abort);\n }\n }\n }\n\n async execute(): Promise<AgentTeamOutcome<Output>> {\n if (this.started) throw new Error(\"Agent team execution has already started.\");\n this.started = true;\n try {\n this.assertOpen();\n this.launch(this.leader);\n while (true) {\n this.assertOpen();\n const version = this.changes.version;\n if (this.leader.status === \"failed\" && this.leader.outcome?.type !== \"blocked\")\n throw this.leader.error;\n const outcome = this.leader.outcome;\n if (\n outcome !== undefined &&\n (outcome.type === \"blocked\" ||\n (this.leader.status === \"idle\" &&\n this.leader.task === undefined &&\n this.leader.inputs.length === 0 &&\n !this.childrenBusy()))\n ) {\n this.closed = true;\n this.stopMembers();\n await this.settleMembers();\n const result = {\n ...outcome,\n teamRunId: this.id,\n usage: [...this.instances.values()].reduce(\n (usage, member) => Usage.add(usage, member.usage),\n Usage.empty(),\n ),\n members: [...this.instances.values()]\n .filter((member) => member !== this.leader)\n .map(memberSummary),\n } as AgentTeamOutcome<Output>;\n this.emit(result);\n return result;\n }\n await this.changes.wait(version, this.controller.signal);\n }\n } catch (error) {\n this.closed = true;\n this.stopMembers();\n await this.settleMembers();\n throw this.fatal ?? error;\n } finally {\n this.removeAbortListener?.();\n }\n }\n\n steer(input: AgentSteerInput): AgentSteerReceipt {\n this.assertOpen();\n const entry: TeamInput = {\n id: globalThis.crypto.randomUUID(),\n messages: steeringMessages(input),\n submitted: false,\n };\n this.enqueue(this.leader, entry);\n return { id: entry.id, status: \"queued\" };\n }\n\n cancel(reason = \"Agent team cancelled.\"): void {\n if (this.closed || this.controller.signal.aborted) return;\n this.fail(new AgentRunCancelledError([], reason));\n }\n\n spawn(parent: TeamMember, definition: AgentTeamMember, prompt: string, name?: string) {\n this.assertOpen();\n throwIfAborted(parent.controller.signal);\n if (!this.policy.spawnTargets(parent).includes(definition))\n throw new Error(`Agent \"${parent.definition.id}\" cannot spawn \"${definition.id}\".`);\n if (parent.depth >= this.limits.maxDepth) throw new AgentTeamLimitError(\"maxDepth\");\n if (this.instances.size >= this.limits.maxAgentInstances)\n throw new AgentTeamLimitError(\"maxAgentInstances\");\n const member = this.createMember(definition, name ?? definition.name ?? definition.id, parent);\n member.inputs.push({\n id: globalThis.crypto.randomUUID(),\n messages: [{ role: \"user\", content: prompt }],\n submitted: false,\n });\n this.memberEvent(member, \"agent_queued\");\n this.launch(member);\n return { instanceId: member.instanceId, status: \"queued\" as const };\n }\n\n send(sender: TeamMember, input: { to: string; content: string; replyTo?: string | undefined }) {\n this.assertOpen();\n throwIfAborted(sender.controller.signal);\n const recipient = this.recipient(sender, input.to);\n if (recipient.status === \"failed\" || recipient.status === \"cancelled\") {\n throw new Error(`Agent instance \"${recipient.instanceId}\" is ${recipient.status}.`);\n }\n return this.queueMessage(sender, recipient, input);\n }\n\n private queueMessage(\n sender: TeamMember,\n recipient: TeamMember,\n input: { content: string; replyTo?: string | undefined },\n notificationType: \"message\" | \"outcome\" = \"message\",\n ) {\n const message: AgentTeamMessage = {\n id: globalThis.crypto.randomUUID(),\n teamRunId: this.id,\n fromInstanceId: sender.instanceId,\n toInstanceId: recipient.instanceId,\n content: input.content,\n createdAt: new Date().toISOString(),\n ...(input.replyTo === undefined ? {} : { replyTo: input.replyTo }),\n };\n this.enqueue(recipient, agentMessageInput(message), notificationType);\n return { messageId: message.id, status: \"queued\" as const };\n }\n\n visibleMembers(caller: TeamMember) {\n return [...this.instances.values()]\n .filter((member) => this.policy.canAccess(caller, member))\n .map((member) => ({\n instanceId: member.instanceId,\n agentId: member.agent.id,\n name: member.name,\n status: member.status,\n depth: member.depth,\n ...(member.parentInstanceId === undefined\n ? {}\n : { parentInstanceId: member.parentInstanceId }),\n }));\n }\n\n cancelMember(caller: TeamMember, instanceId: string, reason = \"Cancelled by parent.\") {\n this.assertOpen();\n throwIfAborted(caller.controller.signal);\n const member = this.recipient(caller, instanceId);\n if (member.parentInstanceId !== caller.instanceId)\n throw new Error(\"Only a parent can cancel its child.\");\n if (member.status === \"cancelled\") return { instanceId, status: \"cancelled\" as const };\n this.stopMember(member, reason);\n this.stopDescendants(member, reason);\n if (member.task === undefined) this.reportOutcome(member);\n return { instanceId, status: \"cancelled\" as const };\n }\n\n async wait(member: TeamMember, instanceId: string | undefined, timeoutMs: number) {\n this.assertOpen();\n const target = instanceId === undefined ? undefined : this.recipient(member, instanceId);\n const deadline = Date.now() + timeoutMs;\n return this.yieldSlot(member, \"waiting\", async () => {\n while (true) {\n const version = this.changes.version;\n const index = member.notifications.findIndex(\n (notification) => target === undefined || notification.from === target.instanceId,\n );\n if (index !== -1) {\n const notification = member.notifications.splice(index, 1)[0]!;\n return {\n reason: notification.type,\n instanceId: notification.from,\n messageId: notification.id,\n };\n }\n if (target !== undefined && [\"idle\", \"failed\", \"cancelled\"].includes(target.status)) {\n return { reason: \"outcome\", instanceId: target.instanceId, status: target.status };\n }\n const remaining = deadline - Date.now();\n if (remaining <= 0) return { reason: \"timeout\" };\n await this.changes.wait(version, member.controller.signal, remaining);\n }\n });\n }\n\n private createMember(agent: AgentTeamMember, name: string, parent?: TeamMember): TeamMember {\n const parentInstanceId = parent?.instanceId;\n const member: TeamMember = {\n instanceId: globalThis.crypto.randomUUID(),\n agent,\n definition: agent,\n depth: parent === undefined ? 0 : parent.depth + 1,\n name,\n ...(parentInstanceId === undefined ? {} : { parentInstanceId }),\n status: \"queued\",\n history: [],\n inputs: [],\n receipts: new Map(),\n controller: new AbortController(),\n usage: Usage.empty(),\n notifications: [],\n };\n const resolved = getResolvedAgentOptions(member.agent);\n member.agent = createResolvedAgent({\n ...resolved,\n instructions: [\n resolved.instructions,\n TEAM_INSTRUCTIONS,\n `Your instance ID is ${member.instanceId}. ${parentInstanceId === undefined ? \"You are the coordinator. Spawn tools create independent members; their outcomes are delivered automatically.\" : `Your parent instance is ${parentInstanceId}.`}`,\n ]\n .filter(Boolean)\n .join(\"\\n\\n\"),\n tools: [\n ...(resolved.tools ?? []),\n ...teamTools(this, member, this.policy.spawnTargets(member)),\n ],\n });\n this.instances.set(member.instanceId, member);\n return member;\n }\n\n private recipient(sender: TeamMember, to: string): TeamMember {\n const id = to === \"parent\" ? sender.parentInstanceId : to;\n const recipient = id === undefined ? undefined : this.instances.get(id);\n if (\n recipient === undefined ||\n recipient === sender ||\n !this.policy.canAccess(sender, recipient)\n ) {\n throw new Error(\n `Agent instance \"${to}\" is not an accessible parent or child, or enabled sibling.`,\n );\n }\n return recipient;\n }\n\n private enqueue(\n member: TeamMember,\n input: TeamInput,\n notificationType: \"message\" | \"outcome\" = \"message\",\n ): void {\n if (member.inputs.length >= 128)\n throw new AgentTeamLimitError(\"pending messages per instance (128)\");\n member.inputs.push(input);\n if (input.message !== undefined) {\n this.emit({ type: \"message_queued\", ...this.identity(member), message: input.message });\n member.notifications.push({\n type: notificationType,\n from: input.message.fromInstanceId,\n id: input.id,\n });\n }\n this.submitInputs(member);\n if (this.started && member.task === undefined) this.launch(member);\n this.changes.notify();\n }\n\n private submitInputs(member: TeamMember): void {\n if (member.activeRun === undefined) return;\n for (const input of member.inputs) {\n if (input.submitted) continue;\n try {\n const receipt = member.activeRun.steer({ messages: input.messages });\n member.receipts.set(receipt.id, input);\n input.submitted = true;\n } catch (error) {\n // Closing runs reject steering; leave this input pending for the next assignment.\n if (error instanceof AgentStreamClosedError) return;\n throw error;\n }\n }\n }\n\n private delivered(member: TeamMember, input: TeamInput): void {\n const index = member.inputs.indexOf(input);\n if (index !== -1) member.inputs.splice(index, 1);\n member.notifications = member.notifications.filter(\n (notification) => notification.id !== input.id,\n );\n if (input.message !== undefined)\n this.emit({ type: \"message_delivered\", ...this.identity(member), message: input.message });\n }\n\n private launch(member: TeamMember): void {\n if (member.task !== undefined || this.closed || member.controller.signal.aborted) return;\n member.status = \"queued\";\n member.task = Promise.resolve()\n .then(() => this.runMember(member))\n .catch((error: unknown) => {\n member.error = error;\n member.inputs.length = 0;\n if (member.controller.signal.aborted) member.status = \"cancelled\";\n else {\n member.status = \"failed\";\n this.memberEvent(member, \"agent_failed\");\n }\n this.stopDescendants(member, \"Parent failed or was cancelled.\");\n if (!this.closed && !this.controller.signal.aborted && member !== this.leader) {\n try {\n this.reportOutcome(member);\n } catch (reportError) {\n this.fail(reportError);\n }\n }\n })\n .finally(() => {\n member.release?.();\n member.release = undefined;\n member.activeRun = undefined;\n member.task = undefined;\n if (member.status === \"idle\" && member.inputs.length > 0) this.launch(member);\n this.changes.notify();\n });\n this.changes.notify();\n }\n\n private async runMember(member: TeamMember): Promise<void> {\n const signal = member.controller.signal;\n member.release = await this.slots.acquire(signal);\n let nextInput: AgentInput | undefined;\n let firstInputs: TeamInput[] = [];\n while (true) {\n throwIfAborted(signal);\n member.status = \"running\";\n member.runId = globalThis.crypto.randomUUID();\n if (nextInput === undefined) {\n firstInputs = member.inputs.filter((input) => !input.submitted);\n const incoming = firstInputs.flatMap((input) => input.messages);\n if (incoming.length === 0) throw new Error(\"Agent team member has no input.\");\n nextInput = { messages: [...member.history, ...incoming] };\n member.history.push(...incoming.slice(0, -1));\n for (const input of firstInputs) input.submitted = true;\n }\n const streaming =\n this.streaming &&\n member.agent.model.capabilities.streaming &&\n isStreamingCompletionModel(member.agent.model);\n const baseSettings =\n member === this.leader\n ? {\n maxTurns: this.options.maxTurns,\n retries: this.options.retries,\n lifecycle: this.options.lifecycle,\n guardrails: this.options.guardrails,\n middlewares: this.options.middlewares,\n trace: this.options.trace,\n controls: this.options.controls,\n }\n : {};\n const run = AgentRun.fromAgent(\n member.agent,\n withInternalAgentRunOptions(\n {\n ...baseSettings,\n ...nextInput,\n abortSignal: signal,\n // Collaboration tools mutate one inbox/permit at a time; provider tools may still run independently across agents.\n toolConcurrency: 1,\n lifecycle: composeAgentLifecycle(baseSettings.lifecycle, {\n onStepFinish: (event) => {\n if (!streaming)\n this.agentEvent(member, {\n type: \"turn_end\",\n turn: event.step,\n response: lifecycleSnapshot(event.response) as CompletionResponse,\n });\n },\n onError: (event) => {\n member.usage = Usage.add(member.usage, event.usage);\n },\n }),\n },\n {\n runId: member.runId,\n hook: {\n onCompletionCall: () => {\n this.assertOpen();\n if (this.turns >= this.limits.maxTotalTurns) {\n const error = new AgentTeamLimitError(\"maxTotalTurns\");\n this.fail(error);\n throw error;\n }\n this.turns += 1;\n for (const input of firstInputs) this.delivered(member, input);\n firstInputs = [];\n },\n },\n beforeFinish: () => this.waitForChildren(member),\n onSteeringApplied: (id) => {\n const input = member.receipts.get(id);\n if (input !== undefined) {\n member.receipts.delete(id);\n this.delivered(member, input);\n }\n },\n },\n ),\n );\n member.activeRun = run;\n this.submitInputs(member);\n this.memberEvent(member, \"agent_started\");\n // Caller-owned models/tools may ignore abort. Close the team promptly, and discard late events.\n const outcome = await abortable(this.consumeRun(member, run, streaming), signal);\n member.activeRun = undefined;\n member.usage = Usage.add(member.usage, outcome.usage);\n member.history.push(...outcome.messages);\n if (outcome.type === \"interaction\") {\n const resolver = this.options.resolveInteraction;\n this.emit({\n type: \"interaction\",\n ...this.identity(member),\n interaction: lifecycleSnapshot(outcome.interaction),\n });\n if (resolver === undefined) {\n const error = new AgentTeamInteractionError(member.instanceId);\n this.fail(error);\n throw error;\n }\n try {\n const response = await this.yieldSlot(member, \"awaiting_interaction\", () =>\n abortable(\n Promise.resolve().then(() =>\n resolver({\n teamRunId: this.id,\n instanceId: member.instanceId,\n runId: outcome.runId,\n interaction: lifecycleSnapshot(outcome.interaction),\n abortSignal: signal,\n }),\n ),\n signal,\n ),\n );\n const parsed = parseAgentInteractionResponse(response);\n assertAgentInteractionResponse(outcome.interaction, parsed);\n nextInput = { continuation: outcome.continuation, response: parsed };\n } catch (cause) {\n if (signal.aborted) throw cause;\n const error = new AgentTeamInteractionError(member.instanceId, { cause });\n this.fail(error);\n throw error;\n }\n continue;\n }\n member.outcome = outcome;\n member.status = outcome.type === \"blocked\" ? \"failed\" : \"idle\";\n if (outcome.type === \"blocked\") {\n member.inputs.length = 0;\n this.stopDescendants(member, \"Parent was blocked.\");\n }\n this.memberEvent(member, outcome.type === \"blocked\" ? \"agent_failed\" : \"agent_idle\");\n if (member !== this.leader) this.reportOutcome(member);\n return;\n }\n }\n\n private async consumeRun(\n member: TeamMember,\n run: AgentRun<unknown>,\n streaming: boolean,\n ): Promise<AgentOutcome<unknown>> {\n if (!streaming) {\n const outcome = await run.generate();\n if (outcome.type === \"response\")\n this.agentEvent(member, { type: \"text_delta\", turn: 0, delta: outcome.text });\n this.agentEvent(member, outcome);\n return outcome;\n }\n for await (const event of run.events()) {\n this.agentEvent(member, event);\n if (event.type === \"error\") throw event.error;\n if (event.type === \"response\" || event.type === \"blocked\" || event.type === \"interaction\")\n return event;\n }\n throw new Error(\"Agent team member stream ended without an outcome.\");\n }\n\n private reportOutcome(member: TeamMember): void {\n const parent = this.instances.get(member.parentInstanceId!);\n if (parent === undefined || parent.status === \"failed\" || parent.status === \"cancelled\") return;\n const content = JSON.stringify({\n type: \"agent-outcome\",\n instanceId: member.instanceId,\n status: member.status,\n ...(member.outcome?.type === \"response\" ? { output: member.outcome.output } : {}),\n ...(member.outcome?.type === \"blocked\" ? { reason: member.outcome.reason } : {}),\n ...(member.error === undefined\n ? {}\n : { error: member.error instanceof Error ? member.error.message : String(member.error) }),\n });\n this.queueMessage(member, parent, { content }, \"outcome\");\n }\n\n private async waitForChildren(member: TeamMember): Promise<void> {\n if (!this.childrenBusy(member) || member.inputs.length > 0) return;\n await this.yieldSlot(member, \"waiting\", async () => {\n while (this.childrenBusy(member) && member.inputs.length === 0) {\n const version = this.changes.version;\n await this.changes.wait(version, member.controller.signal);\n }\n });\n }\n\n // Without a parent, final team settlement checks all descendants, including revived assignments.\n private childrenBusy(parent?: TeamMember): boolean {\n return [...this.instances.values()].some(\n (member) =>\n member !== this.leader &&\n (parent === undefined || member.parentInstanceId === parent.instanceId) &&\n ([\"queued\", \"running\", \"waiting\", \"awaiting_interaction\"].includes(member.status) ||\n member.inputs.length > 0),\n );\n }\n\n private async yieldSlot<T>(\n member: TeamMember,\n status: \"waiting\" | \"awaiting_interaction\",\n work: () => Promise<T>,\n ): Promise<T> {\n member.release?.();\n member.release = undefined;\n member.status = status;\n this.memberEvent(member, \"agent_waiting\");\n this.changes.notify();\n try {\n return await work();\n } finally {\n if (!member.controller.signal.aborted && !this.closed) {\n member.release = await this.slots.acquire(member.controller.signal);\n member.status = \"running\";\n this.changes.notify();\n }\n }\n }\n\n private identity(member: TeamMember) {\n return {\n teamRunId: this.id,\n instanceId: member.instanceId,\n ...(member.runId === undefined ? {} : { runId: member.runId }),\n };\n }\n\n private memberEvent(\n member: TeamMember,\n type:\n | \"agent_queued\"\n | \"agent_started\"\n | \"agent_waiting\"\n | \"agent_idle\"\n | \"agent_failed\"\n | \"agent_cancelled\",\n ) {\n this.emit({ type, ...this.identity(member), member: memberSummary(member) });\n }\n\n private agentEvent(member: TeamMember, event: AgentStreamEvent<unknown>) {\n if (this.closed || member.controller.signal.aborted) return;\n this.emit({\n type: \"agent_event\",\n ...this.identity(member),\n coordinator: member === this.leader,\n event: lifecycleSnapshot(event),\n });\n }\n\n private assertOpen(): void {\n if (this.fatal !== undefined) throw this.fatal;\n if (this.closed) throw new AgentStreamClosedError();\n throwIfAborted(this.controller.signal);\n }\n\n private fail(error: unknown): void {\n this.fatal ??= error;\n this.controller.abort(error);\n this.stopMembers();\n this.changes.notify();\n }\n\n private stopMember(member: TeamMember, reason: string): void {\n if (member.status === \"cancelled\") return;\n member.status = \"cancelled\";\n member.inputs.length = 0;\n member.controller.abort(reason);\n member.activeRun?.cancel(reason);\n this.memberEvent(member, \"agent_cancelled\");\n this.changes.notify();\n }\n\n private stopMembers(): void {\n for (const member of this.instances.values()) {\n if ([\"queued\", \"running\", \"waiting\", \"awaiting_interaction\"].includes(member.status))\n this.stopMember(member, \"Agent team closed.\");\n }\n }\n\n private stopDescendants(parent: TeamMember, reason: string): void {\n // Instances are inserted after their parents; this also reaches idle descendants without recursion.\n // The subtree root is already terminal, and each descendant's parent is stopped first.\n // Only the subtree root reports cancellation to a surviving parent; descendant reports are suppressed.\n const stopped = new Set([parent.instanceId]);\n for (const member of this.instances.values()) {\n if (member.parentInstanceId !== undefined && stopped.has(member.parentInstanceId)) {\n stopped.add(member.instanceId);\n this.stopMember(member, reason);\n }\n }\n }\n\n private async settleMembers(): Promise<void> {\n await Promise.allSettled(\n [...this.instances.values()].flatMap((member) =>\n member.task === undefined ? [] : [member.task],\n ),\n );\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/internal/team-runtime/member.ts"],"sourcesContent":["import type {\n AgentTeamMemberStatus,\n AgentTeamMemberSummary,\n AgentTeamMessage,\n} from \"../../agent/team/types\";\nimport type { AgentOutcome, AgentSteerInput } from \"../../agent/run-types\";\nimport type { Message, UserMessage } from \"../../completion\";\nimport { parseMessage, parseMessages, Usage } from \"../../completion\";\nimport type { AgentRun } from \"../agent-runtime/agent-run\";\nimport type { Agent } from \"../../agent/agent\";\nimport { lifecycleSnapshot } from \"../../agent/lifecycle\";\n\nexport type TeamInput = {\n id: string;\n messages: UserMessage[];\n message?: AgentTeamMessage;\n submitted: boolean;\n};\n\nexport type TeamMember = {\n instanceId: string;\n parentInstanceId?: string;\n depth: number;\n definition: Agent<unknown>;\n name: string;\n agent: Agent<unknown>;\n status: AgentTeamMemberStatus;\n history: Message[];\n inputs: TeamInput[];\n receipts: Map<string, TeamInput>;\n controller: AbortController;\n release?: (() => void) | undefined;\n task?: Promise<void> | undefined;\n activeRun?: AgentRun<unknown> | undefined;\n runId?: string | undefined;\n outcome?: Exclude<AgentOutcome<unknown>, { type: \"interaction\" }>;\n error?: unknown;\n usage: Usage;\n notifications: { from: string; type: \"message\" | \"outcome\"; id: string }[];\n};\n\nexport function memberSummary(member: TeamMember): AgentTeamMemberSummary {\n return {\n instanceId: member.instanceId,\n agentId: member.agent.id,\n name: member.name,\n depth: member.depth,\n status: member.status,\n usage: lifecycleSnapshot(member.usage),\n ...(member.parentInstanceId === undefined ? {} : { parentInstanceId: member.parentInstanceId }),\n ...(member.outcome === undefined ? {} : { outcome: lifecycleSnapshot(member.outcome) }),\n ...(member.error === undefined ? {} : { error: member.error }),\n };\n}\n\nexport function steeringMessages(input: AgentSteerInput): UserMessage[] {\n if (\n typeof input !== \"object\" ||\n input === null ||\n (input.prompt === undefined) === (input.messages === undefined)\n ) {\n throw new TypeError(\"Agent team steering requires exactly one of prompt or messages.\");\n }\n const messages =\n input.prompt === undefined\n ? parseMessages(input.messages)\n : [\n parseMessage(\n typeof input.prompt === \"string\"\n ? { role: \"user\", content: input.prompt }\n : input.prompt,\n ),\n ];\n if (messages.length === 0 || messages.some((message) => message.role !== \"user\")) {\n throw new TypeError(\"Agent team steering requires user messages.\");\n }\n return messages as UserMessage[];\n}\n\nexport function agentMessageInput(message: AgentTeamMessage): TeamInput {\n return {\n id: message.id,\n submitted: false,\n message,\n messages: [\n {\n role: \"user\",\n content: `Message from another agent (not a user approval):\\n${JSON.stringify(message)}`,\n metadata: { anvia: { agentMessage: { ...message } } },\n },\n ],\n };\n}\n"],"mappings":";;;;;;;;;AAyCO,SAAS,cAAc,QAA4C;AACxE,SAAO;AAAA,IACL,YAAY,OAAO;AAAA,IACnB,SAAS,OAAO,MAAM;AAAA,IACtB,MAAM,OAAO;AAAA,IACb,OAAO,OAAO;AAAA,IACd,QAAQ,OAAO;AAAA,IACf,OAAO,kBAAkB,OAAO,KAAK;AAAA,IACrC,GAAI,OAAO,qBAAqB,SAAY,CAAC,IAAI,EAAE,kBAAkB,OAAO,iBAAiB;AAAA,IAC7F,GAAI,OAAO,YAAY,SAAY,CAAC,IAAI,EAAE,SAAS,kBAAkB,OAAO,OAAO,EAAE;AAAA,IACrF,GAAI,OAAO,UAAU,SAAY,CAAC,IAAI,EAAE,OAAO,OAAO,MAAM;AAAA,EAC9D;AACF;AAEO,SAAS,iBAAiB,OAAuC;AACtE,MACE,OAAO,UAAU,YACjB,UAAU,QACT,MAAM,WAAW,YAAgB,MAAM,aAAa,SACrD;AACA,UAAM,IAAI,UAAU,iEAAiE;AAAA,EACvF;AACA,QAAM,WACJ,MAAM,WAAW,SACb,cAAc,MAAM,QAAQ,IAC5B;AAAA,IACE;AAAA,MACE,OAAO,MAAM,WAAW,WACpB,EAAE,MAAM,QAAQ,SAAS,MAAM,OAAO,IACtC,MAAM;AAAA,IACZ;AAAA,EACF;AACN,MAAI,SAAS,WAAW,KAAK,SAAS,KAAK,CAAC,YAAY,QAAQ,SAAS,MAAM,GAAG;AAChF,UAAM,IAAI,UAAU,6CAA6C;AAAA,EACnE;AACA,SAAO;AACT;AAEO,SAAS,kBAAkB,SAAsC;AACtE,SAAO;AAAA,IACL,IAAI,QAAQ;AAAA,IACZ,WAAW;AAAA,IACX;AAAA,IACA,UAAU;AAAA,MACR;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,EAAsD,KAAK,UAAU,OAAO,CAAC;AAAA,QACtF,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,QAAQ,EAAE,EAAE;AAAA,MACtD;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|