gemi 0.60.0 → 0.61.0
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/ai/Agent.d.ts +533 -25
- package/dist/ai/Agent.d.ts.map +1 -1
- package/dist/ai/Agent.test-d.d.ts +2 -0
- package/dist/ai/Agent.test-d.d.ts.map +1 -0
- package/dist/ai/AgentController.d.ts +275 -6
- package/dist/ai/AgentController.d.ts.map +1 -1
- package/dist/ai/AgentProvider.d.ts +255 -0
- package/dist/ai/AgentProvider.d.ts.map +1 -0
- package/dist/ai/Schema.d.ts +125 -0
- package/dist/ai/Schema.d.ts.map +1 -0
- package/dist/ai/Schema.test-d.d.ts +2 -0
- package/dist/ai/Schema.test-d.d.ts.map +1 -0
- package/dist/ai/client/index.d.ts +24 -0
- package/dist/ai/client/index.d.ts.map +1 -0
- package/dist/ai/client/index.js +1053 -0
- package/dist/ai/client/index.js.map +1 -0
- package/dist/ai/client/reducer.d.ts +127 -0
- package/dist/ai/client/reducer.d.ts.map +1 -0
- package/dist/ai/client/reducer.test-d.d.ts +2 -0
- package/dist/ai/client/reducer.test-d.d.ts.map +1 -0
- package/dist/ai/client/sse.d.ts +54 -0
- package/dist/ai/client/sse.d.ts.map +1 -0
- package/dist/ai/example.d.ts +129 -0
- package/dist/ai/example.d.ts.map +1 -0
- package/dist/ai/index.d.ts +35 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +20 -0
- package/dist/ai/index.js.map +23 -0
- package/dist/ai/live/harness.d.ts +137 -0
- package/dist/ai/live/harness.d.ts.map +1 -0
- package/dist/ai/providers/call.d.ts +42 -0
- package/dist/ai/providers/call.d.ts.map +1 -0
- package/dist/ai/providers/capabilities.d.ts +50 -0
- package/dist/ai/providers/capabilities.d.ts.map +1 -0
- package/dist/ai/providers/errors.d.ts +37 -0
- package/dist/ai/providers/errors.d.ts.map +1 -0
- package/dist/ai/providers/fakeProvider.d.ts +35 -0
- package/dist/ai/providers/fakeProvider.d.ts.map +1 -0
- package/dist/ai/providers/http.d.ts +46 -0
- package/dist/ai/providers/http.d.ts.map +1 -0
- package/dist/ai/providers/request.d.ts +69 -0
- package/dist/ai/providers/request.d.ts.map +1 -0
- package/dist/ai/providers/stream.d.ts +42 -0
- package/dist/ai/providers/stream.d.ts.map +1 -0
- package/dist/ai/signing.d.ts +195 -0
- package/dist/ai/signing.d.ts.map +1 -0
- package/dist/ai/store/LiveRuns.d.ts +142 -0
- package/dist/ai/store/LiveRuns.d.ts.map +1 -0
- package/dist/ai/store/MemoryAgentStore.d.ts +61 -0
- package/dist/ai/store/MemoryAgentStore.d.ts.map +1 -0
- package/dist/ai/store/index.d.ts +4 -0
- package/dist/ai/store/index.d.ts.map +1 -0
- package/dist/ai/store/sse.d.ts +58 -0
- package/dist/ai/store/sse.d.ts.map +1 -0
- package/dist/ai/store/stubAgentRun.d.ts +56 -0
- package/dist/ai/store/stubAgentRun.d.ts.map +1 -0
- package/dist/ai/types.d.ts +443 -0
- package/dist/ai/types.d.ts.map +1 -0
- package/dist/ai/useChat.d.ts +253 -7
- package/dist/ai/useChat.d.ts.map +1 -1
- package/dist/chunk-1aqzcgfr.js +5 -0
- package/dist/chunk-1aqzcgfr.js.map +10 -0
- package/dist/{chunk-get4mkx8.js → chunk-1b7e9rj7.js} +2 -2
- package/dist/{chunk-get4mkx8.js.map → chunk-1b7e9rj7.js.map} +1 -1
- package/dist/{chunk-x8beq9c4.js → chunk-3aemqfdr.js} +2 -2
- package/dist/{chunk-x8beq9c4.js.map → chunk-3aemqfdr.js.map} +1 -1
- package/dist/{chunk-j06g4sqc.js → chunk-528n3vgy.js} +2 -2
- package/dist/{chunk-j06g4sqc.js.map → chunk-528n3vgy.js.map} +1 -1
- package/dist/{chunk-2khdxyjb.js → chunk-57a0nqfj.js} +1 -1
- package/dist/chunk-57a0nqfj.js.map +10 -0
- package/dist/{chunk-c40n5r4v.js → chunk-5mhcwnyd.js} +2 -2
- package/dist/{chunk-c40n5r4v.js.map → chunk-5mhcwnyd.js.map} +1 -1
- package/dist/{chunk-gwchvzdp.js → chunk-71pk1mxx.js} +2 -2
- package/dist/{chunk-gwchvzdp.js.map → chunk-71pk1mxx.js.map} +1 -1
- package/dist/{chunk-spbgpndn.js → chunk-7t1hjs9f.js} +2 -2
- package/dist/{chunk-spbgpndn.js.map → chunk-7t1hjs9f.js.map} +1 -1
- package/dist/{chunk-9gsdcjt7.js → chunk-7xvaace2.js} +3 -3
- package/dist/{chunk-9gsdcjt7.js.map → chunk-7xvaace2.js.map} +1 -1
- package/dist/{chunk-fxy42w6n.js → chunk-8ag0da2s.js} +2 -2
- package/dist/{chunk-fxy42w6n.js.map → chunk-8ag0da2s.js.map} +1 -1
- package/dist/chunk-8r8epsef.js +5 -0
- package/dist/chunk-8r8epsef.js.map +11 -0
- package/dist/chunk-91cj3nxk.js +6 -0
- package/dist/{chunk-y3zz410b.js.map → chunk-91cj3nxk.js.map} +2 -2
- package/dist/{chunk-0fm6jh9b.js → chunk-9nmvm20t.js} +2 -2
- package/dist/{chunk-0fm6jh9b.js.map → chunk-9nmvm20t.js.map} +1 -1
- package/dist/{chunk-98a3k7bp.js → chunk-9xpa7dpy.js} +2 -2
- package/dist/{chunk-98a3k7bp.js.map → chunk-9xpa7dpy.js.map} +1 -1
- package/dist/{chunk-qva4841r.js → chunk-a1exbqcq.js} +3 -3
- package/dist/{chunk-qva4841r.js.map → chunk-a1exbqcq.js.map} +1 -1
- package/dist/{chunk-cw9y6k15.js → chunk-bb19bwg6.js} +2 -2
- package/dist/{chunk-cw9y6k15.js.map → chunk-bb19bwg6.js.map} +1 -1
- package/dist/{chunk-3gvjn3q4.js → chunk-cf7bvd12.js} +1 -1
- package/dist/{chunk-rkbv3df7.js → chunk-djp2xeqe.js} +2 -2
- package/dist/{chunk-rkbv3df7.js.map → chunk-djp2xeqe.js.map} +1 -1
- package/dist/chunk-ds44bqr9.js +4 -0
- package/dist/{chunk-4mcyyh1v.js.map → chunk-ds44bqr9.js.map} +4 -9
- package/dist/{chunk-wzvs3sym.js → chunk-exndjhza.js} +3 -3
- package/dist/{chunk-wzvs3sym.js.map → chunk-exndjhza.js.map} +1 -1
- package/dist/{chunk-f6dd4gd8.js → chunk-f233yzxf.js} +2 -2
- package/dist/{chunk-f6dd4gd8.js.map → chunk-f233yzxf.js.map} +1 -1
- package/dist/chunk-fz5g2z6h.js +4 -0
- package/dist/{chunk-fbvvqf9b.js.map → chunk-fz5g2z6h.js.map} +2 -2
- package/dist/{chunk-vj9538yn.js → chunk-gcszdwcb.js} +2 -2
- package/dist/{chunk-vj9538yn.js.map → chunk-gcszdwcb.js.map} +1 -1
- package/dist/{chunk-pkjq9833.js → chunk-htesx7ym.js} +4 -4
- package/dist/{chunk-pkjq9833.js.map → chunk-htesx7ym.js.map} +1 -1
- package/dist/chunk-hyxmmj9b.js +5 -0
- package/dist/{chunk-khf9xda6.js.map → chunk-hyxmmj9b.js.map} +2 -2
- package/dist/{chunk-stq96kya.js → chunk-k2sjvt0c.js} +2 -2
- package/dist/{chunk-stq96kya.js.map → chunk-k2sjvt0c.js.map} +1 -1
- package/dist/{chunk-zhbrkpb3.js → chunk-k75phgj4.js} +4 -4
- package/dist/{chunk-zhbrkpb3.js.map → chunk-k75phgj4.js.map} +1 -1
- package/dist/{chunk-y64j80v9.js → chunk-m0tp7zjp.js} +2 -2
- package/dist/{chunk-y64j80v9.js.map → chunk-m0tp7zjp.js.map} +1 -1
- package/dist/{chunk-06j6rsew.js → chunk-m45j7p1y.js} +2 -2
- package/dist/{chunk-06j6rsew.js.map → chunk-m45j7p1y.js.map} +1 -1
- package/dist/chunk-mca9wsvs.js +5 -0
- package/dist/{chunk-z2tcxwyr.js.map → chunk-mca9wsvs.js.map} +3 -4
- package/dist/{chunk-tey1xayb.js → chunk-ms13evzp.js} +2 -2
- package/dist/{chunk-tey1xayb.js.map → chunk-ms13evzp.js.map} +1 -1
- package/dist/{chunk-bn1v4sfs.js → chunk-r962ae93.js} +2 -2
- package/dist/{chunk-bn1v4sfs.js.map → chunk-r962ae93.js.map} +1 -1
- package/dist/{chunk-23h0dmx2.js → chunk-s41ees18.js} +2 -2
- package/dist/{chunk-23h0dmx2.js.map → chunk-s41ees18.js.map} +1 -1
- package/dist/chunk-snb68dgr.js +4 -0
- package/dist/{chunk-hwhw98hc.js.map → chunk-snb68dgr.js.map} +1 -1
- package/dist/chunk-sz051605.js +5 -0
- package/dist/chunk-sz051605.js.map +14 -0
- package/dist/{chunk-2cwcfwg3.js → chunk-tr3cbx8k.js} +2 -2
- package/dist/{chunk-2cwcfwg3.js.map → chunk-tr3cbx8k.js.map} +2 -2
- package/dist/{chunk-dgasxgsm.js → chunk-vqcswg7h.js} +2 -2
- package/dist/{chunk-dgasxgsm.js.map → chunk-vqcswg7h.js.map} +2 -2
- package/dist/{chunk-zqsfanvk.js → chunk-wpb1xpdp.js} +2 -2
- package/dist/{chunk-zqsfanvk.js.map → chunk-wpb1xpdp.js.map} +1 -1
- package/dist/{chunk-z1e55w67.js → chunk-ybqss0jy.js} +2 -2
- package/dist/{chunk-z1e55w67.js.map → chunk-ybqss0jy.js.map} +1 -1
- package/dist/{chunk-cejf873g.js → chunk-yk5wqmyh.js} +2 -2
- package/dist/{chunk-cejf873g.js.map → chunk-yk5wqmyh.js.map} +1 -1
- package/dist/{chunk-8kj3zrm9.js → chunk-ywntv8yw.js} +4 -4
- package/dist/{chunk-8kj3zrm9.js.map → chunk-ywntv8yw.js.map} +1 -1
- package/dist/chunks/{ThemeProvider-ByU4BQdL.js → ThemeProvider-BZ2SsSZ3.js} +60 -39
- package/dist/chunks/ThemeProvider-BZ2SsSZ3.js.map +1 -0
- package/dist/chunks/useParams-BN3XXfmG.js +20 -0
- package/dist/chunks/useParams-BN3XXfmG.js.map +1 -0
- package/dist/client/index.js +3 -3
- package/dist/client/index.js.map +1 -1
- package/dist/client/useDictionary.d.ts.map +1 -1
- package/dist/database/index.js +1 -1
- package/dist/facades/index.js +2 -2
- package/dist/facades/index.js.map +1 -1
- package/dist/http/ApiRouter.d.ts +30 -2
- package/dist/http/ApiRouter.d.ts.map +1 -1
- package/dist/http/index.js +2 -2
- package/dist/http/index.js.map +1 -1
- package/dist/i18n/defineDictionary.d.ts +7 -4
- package/dist/i18n/defineDictionary.d.ts.map +1 -1
- package/dist/i18n/dictionaryRegistry.d.ts +38 -14
- package/dist/i18n/dictionaryRegistry.d.ts.map +1 -1
- package/dist/i18n/dictionaryRuntime.js +1 -1
- package/dist/i18n/index.js +2 -2
- package/dist/i18n/index.js.map +2 -2
- package/dist/kernel/index.js +2 -2
- package/dist/kernel/index.js.map +2 -2
- package/dist/orm/index.js +2 -2
- package/dist/orm/index.js.map +2 -2
- package/dist/server/index.js +1 -1
- package/dist/services/index.js +2 -2
- package/dist/services/index.js.map +2 -2
- package/dist/testing/index.js +2 -1
- package/dist/testing/index.js.map +1 -1
- package/package.json +3 -1
- package/dist/chunk-2khdxyjb.js.map +0 -10
- package/dist/chunk-4mcyyh1v.js +0 -4
- package/dist/chunk-fbvvqf9b.js +0 -4
- package/dist/chunk-hwhw98hc.js +0 -4
- package/dist/chunk-khf9xda6.js +0 -5
- package/dist/chunk-q0y0j3ne.js +0 -5
- package/dist/chunk-q0y0j3ne.js.map +0 -11
- package/dist/chunk-y3zz410b.js +0 -6
- package/dist/chunk-z2tcxwyr.js +0 -5
- package/dist/chunks/ThemeProvider-ByU4BQdL.js.map +0 -1
- /package/dist/{chunk-3gvjn3q4.js.map → chunk-cf7bvd12.js.map} +0 -0
|
@@ -0,0 +1,443 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The message and event model.
|
|
3
|
+
*
|
|
4
|
+
* This file is the actual public contract of the module. `AgentMessage` is what
|
|
5
|
+
* an app persists and what `useChat` renders, and `AgentStreamEvent` is what
|
|
6
|
+
* goes over the wire — so both are defined provider-agnostically here rather
|
|
7
|
+
* than in the OpenAI provider, and the provider's job is to translate into
|
|
8
|
+
* them. Anthropic or a local model can be added later by writing one translator
|
|
9
|
+
* instead of by changing what an app sees.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Tools reduced to just their payload types.
|
|
13
|
+
*
|
|
14
|
+
* The client needs `{ bash: { input: { command: string }, output: ... } }` to
|
|
15
|
+
* discriminate a tool part by name, but it must not need `execute` — that is
|
|
16
|
+
* server code. Erasing tools to this shape at the Agent boundary is what keeps
|
|
17
|
+
* a tool's implementation out of the browser bundle while its types survive.
|
|
18
|
+
*
|
|
19
|
+
* `progress` is whatever a generator tool yields on its way to that output.
|
|
20
|
+
* Optional here on purpose: `ToolShapesOf` always emits it — `never` for a tool
|
|
21
|
+
* that cannot yield — but a `ToolShapes` written by hand before this field
|
|
22
|
+
* existed is still a valid one, and every `T[K]["progress"]` below resolves for
|
|
23
|
+
* it rather than failing to compile. That is why this is a third member of the
|
|
24
|
+
* existing type and not a second type beside it.
|
|
25
|
+
*/
|
|
26
|
+
export type ToolShape = {
|
|
27
|
+
input: unknown;
|
|
28
|
+
output: unknown;
|
|
29
|
+
progress?: unknown;
|
|
30
|
+
};
|
|
31
|
+
export type ToolShapes = Record<string, ToolShape>;
|
|
32
|
+
export type Usage = {
|
|
33
|
+
inputTokens: number;
|
|
34
|
+
outputTokens: number;
|
|
35
|
+
/** Billed separately by OpenAI and worth surfacing on its own. */
|
|
36
|
+
reasoningTokens?: number;
|
|
37
|
+
cachedInputTokens?: number;
|
|
38
|
+
totalTokens: number;
|
|
39
|
+
};
|
|
40
|
+
export type FinishReason = "stop" | "length"
|
|
41
|
+
/** `maxSteps` was hit. A run that ends this way is not an error, and it is
|
|
42
|
+
* also not a finished answer — the UI has to be able to tell them apart. */
|
|
43
|
+
| "max-steps"
|
|
44
|
+
/** The run stopped because a tool call needs something only the client can
|
|
45
|
+
* give it. The conversation continues with an ordinary turn. */
|
|
46
|
+
| "awaiting-input" | "aborted" | "error";
|
|
47
|
+
export type AgentErrorCode = "provider_error" | "rate_limited" | "context_length_exceeded" | "content_filtered" | "tool_error" | "invalid_tool_input"
|
|
48
|
+
/** A tool result came back for a call the server never made, or with a
|
|
49
|
+
* signature that does not verify. */
|
|
50
|
+
| "invalid_tool_result"
|
|
51
|
+
/** The `threadId` names a thread the server's store does not have: expired,
|
|
52
|
+
* mistyped, or on an instance that is gone. Answered before anything runs;
|
|
53
|
+
* the app starts a new thread or continues stateless. */
|
|
54
|
+
| "thread_not_found" | "aborted" | "unknown";
|
|
55
|
+
export type AgentError = {
|
|
56
|
+
code: AgentErrorCode;
|
|
57
|
+
message: string;
|
|
58
|
+
toolCallId?: string;
|
|
59
|
+
retryable: boolean;
|
|
60
|
+
};
|
|
61
|
+
export type TextPart = {
|
|
62
|
+
type: "text";
|
|
63
|
+
text: string;
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* Reasoning is kept as its own part rather than folded into text: it must be
|
|
67
|
+
* renderable separately (or not at all), and on the next turn it has to be sent
|
|
68
|
+
* back to the provider in its original form for cache hits to survive.
|
|
69
|
+
*/
|
|
70
|
+
export type ReasoningPart = {
|
|
71
|
+
type: "reasoning";
|
|
72
|
+
id?: string;
|
|
73
|
+
text?: string;
|
|
74
|
+
};
|
|
75
|
+
/** An uploaded file, referenced by the id `provider.upload()` returned. */
|
|
76
|
+
export type FilePart = {
|
|
77
|
+
type: "file";
|
|
78
|
+
fileId: string;
|
|
79
|
+
name?: string;
|
|
80
|
+
mimeType?: string;
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* A sub-agent's run, recorded on the tool call that drove it.
|
|
84
|
+
*
|
|
85
|
+
* `messages` is an ordinary transcript, and that is the entire design: a nested
|
|
86
|
+
* run renders with the same reducer and the same components as the outer one,
|
|
87
|
+
* so arbitrary depth costs the client nothing and costs this file one type. It
|
|
88
|
+
* is also what makes resumption possible — a tool that escalated a question is
|
|
89
|
+
* re-entered from the top on the next turn and replays its finished sub-runs
|
|
90
|
+
* out of exactly this, which is why the transcript is persisted on the message
|
|
91
|
+
* instead of held in memory beside the run.
|
|
92
|
+
*
|
|
93
|
+
* The sub-run's tools are the sub-agent's, not the parent's, so `messages` is
|
|
94
|
+
* left at the default `ToolShapes`. A parent's tool shapes say nothing about
|
|
95
|
+
* what its children can call, and pretending otherwise would type a nested
|
|
96
|
+
* transcript with the wrong tool names.
|
|
97
|
+
*/
|
|
98
|
+
export type NestedRun = {
|
|
99
|
+
runId: string;
|
|
100
|
+
/** The sub-agent's name, so the UI has something to label the block with. */
|
|
101
|
+
agent: string;
|
|
102
|
+
/** Caller-supplied, e.g. "researching pricing". */
|
|
103
|
+
label?: string;
|
|
104
|
+
messages: AgentMessage[];
|
|
105
|
+
finishReason?: FinishReason;
|
|
106
|
+
usage?: Usage;
|
|
107
|
+
/**
|
|
108
|
+
* Present on a record whose sub-run is parked `awaiting-input`, and handed
|
|
109
|
+
* back untouched like a pending call's.
|
|
110
|
+
*
|
|
111
|
+
* The next turn re-enters — runs — the tool this record hangs off because
|
|
112
|
+
* the record says a sub-run under it is waiting on the question being
|
|
113
|
+
* answered. In stateless mode the record arrives from the browser, so
|
|
114
|
+
* without this it is the client deciding which tools run. Signed by the
|
|
115
|
+
* server over where the sub-run parked and which calls it left open; see
|
|
116
|
+
* `signing.ts`.
|
|
117
|
+
*/
|
|
118
|
+
signature?: string;
|
|
119
|
+
};
|
|
120
|
+
export type ToolCallPart<T extends ToolShapes = ToolShapes> = {
|
|
121
|
+
[K in keyof T]: {
|
|
122
|
+
type: "tool-call";
|
|
123
|
+
toolCallId: string;
|
|
124
|
+
name: K;
|
|
125
|
+
input: T[K]["input"];
|
|
126
|
+
/** Set while the model is still streaming the arguments. */
|
|
127
|
+
partial?: boolean;
|
|
128
|
+
/**
|
|
129
|
+
* Everything this tool yielded, in order, typed by the tool's own progress
|
|
130
|
+
* type.
|
|
131
|
+
*
|
|
132
|
+
* Append-only and never rewritten, which is what lets the client apply a
|
|
133
|
+
* `tool-progress` frame by pushing and lean on `seq` for redelivery — the
|
|
134
|
+
* same bargain every other additive event in this file makes. Absent until
|
|
135
|
+
* the first yield, so a tool that never yields adds no field.
|
|
136
|
+
*/
|
|
137
|
+
progress?: T[K]["progress"][];
|
|
138
|
+
/**
|
|
139
|
+
* Sub-agent runs this tool drove, in the order they started.
|
|
140
|
+
*
|
|
141
|
+
* In stateless mode this is client-carried and therefore client-editable,
|
|
142
|
+
* and that is not a new hole: the entire parent history is client-carried
|
|
143
|
+
* in stateless mode already. The thing that must be unforgeable is the
|
|
144
|
+
* approval *decision*, and that is what the signature on a `PendingToolCall`
|
|
145
|
+
* covers — a rewritten nested transcript cannot manufacture consent for a
|
|
146
|
+
* call the server never made.
|
|
147
|
+
*/
|
|
148
|
+
nested?: NestedRun[];
|
|
149
|
+
};
|
|
150
|
+
}[keyof T];
|
|
151
|
+
export type ToolResultPart<T extends ToolShapes = ToolShapes> = {
|
|
152
|
+
[K in keyof T]: {
|
|
153
|
+
type: "tool-result";
|
|
154
|
+
toolCallId: string;
|
|
155
|
+
name: K;
|
|
156
|
+
} & ({
|
|
157
|
+
status: "ok";
|
|
158
|
+
output: T[K]["output"];
|
|
159
|
+
} | {
|
|
160
|
+
status: "error";
|
|
161
|
+
error: AgentError;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* The call did not run. `refused` is the client declining an approval or
|
|
165
|
+
* answering something else instead; `stopped` is a cancel that landed while
|
|
166
|
+
* the call was in flight.
|
|
167
|
+
*
|
|
168
|
+
* Both are told to the model rather than dropped, and for the same reason:
|
|
169
|
+
* a history holding a tool call with no result is one the provider rejects,
|
|
170
|
+
* so an abort has to leave a conversation that can still be continued. It
|
|
171
|
+
* also happens to be true — the model asked for something and did not get
|
|
172
|
+
* it, and the next turn goes better for knowing which.
|
|
173
|
+
*/
|
|
174
|
+
| {
|
|
175
|
+
status: "denied";
|
|
176
|
+
cause: "refused" | "stopped";
|
|
177
|
+
reason?: string;
|
|
178
|
+
});
|
|
179
|
+
}[keyof T];
|
|
180
|
+
/** The final answer when the agent declares an `output` schema. */
|
|
181
|
+
export type OutputPart<O = unknown> = {
|
|
182
|
+
type: "output";
|
|
183
|
+
value: O;
|
|
184
|
+
/** True while the object is still being assembled from the token stream. */
|
|
185
|
+
partial?: boolean;
|
|
186
|
+
};
|
|
187
|
+
export type AgentContentPart<T extends ToolShapes = ToolShapes, O = unknown> = TextPart | ReasoningPart | FilePart | ToolCallPart<T> | ToolResultPart<T> | OutputPart<O>;
|
|
188
|
+
export type AgentMessage<T extends ToolShapes = ToolShapes, O = unknown> = {
|
|
189
|
+
/** Stable and server-assigned, so a reattached stream does not duplicate
|
|
190
|
+
* messages the client already has. */
|
|
191
|
+
id: string;
|
|
192
|
+
role: "system" | "user" | "assistant";
|
|
193
|
+
content: AgentContentPart<T, O>[];
|
|
194
|
+
createdAt: string;
|
|
195
|
+
/**
|
|
196
|
+
* Absent until the message is complete; lets a UI show a cursor.
|
|
197
|
+
*
|
|
198
|
+
* `aborted` is a complete message too — a stopped turn keeps whatever it had
|
|
199
|
+
* produced, marked as cut short. Dropping it would lose text the user already
|
|
200
|
+
* read, and leave the model unable to tell that it was interrupted from that
|
|
201
|
+
* it simply stopped talking.
|
|
202
|
+
*/
|
|
203
|
+
finishReason?: FinishReason;
|
|
204
|
+
usage?: Usage;
|
|
205
|
+
};
|
|
206
|
+
/**
|
|
207
|
+
* A pending tool call: one the model made and the server will not complete on
|
|
208
|
+
* its own.
|
|
209
|
+
*
|
|
210
|
+
* Three kinds, one mechanism. An approval is a tool the server can run but
|
|
211
|
+
* won't without a human; a question is a tool whose whole answer is the human's;
|
|
212
|
+
* a client tool is one only the browser can execute. They differ in who
|
|
213
|
+
* produces the result, not in how the conversation carries it — which is why
|
|
214
|
+
* none of them needs a second endpoint, and why adding client-executed tools
|
|
215
|
+
* later costs no new protocol.
|
|
216
|
+
*/
|
|
217
|
+
export type PendingToolCall<T extends ToolShapes = ToolShapes> = {
|
|
218
|
+
[K in keyof T]: {
|
|
219
|
+
toolCallId: string;
|
|
220
|
+
name: K;
|
|
221
|
+
input: T[K]["input"];
|
|
222
|
+
kind: "approval" | "question" | "client";
|
|
223
|
+
/**
|
|
224
|
+
* Signs `runId + toolCallId + input` and is handed back untouched.
|
|
225
|
+
*
|
|
226
|
+
* In stateless mode the history lives in the browser, so without this the
|
|
227
|
+
* client asserts not just *that* a call was approved but *what* was
|
|
228
|
+
* approved — nothing would stop it from returning `approve: true` against
|
|
229
|
+
* an input it rewrote on the way. The signature is what lets the pending
|
|
230
|
+
* call travel through untrusted hands, and it is why approvals need no
|
|
231
|
+
* server-side storage at all. Carries a nonce and an expiry, so a captured
|
|
232
|
+
* one cannot be replayed into a later run.
|
|
233
|
+
*/
|
|
234
|
+
signature: string;
|
|
235
|
+
/**
|
|
236
|
+
* The chain of tool-call ids this call is nested under, outermost first.
|
|
237
|
+
* Absent at the top level, which is every call today.
|
|
238
|
+
*
|
|
239
|
+
* A sub-agent's question reaches the user through its *parent's* pending
|
|
240
|
+
* list, so `toolCallId` alone stops being an address: two sub-runs under
|
|
241
|
+
* two different tools can each hold a call the parent never made, and the
|
|
242
|
+
* turn that answers has to say which tool to re-enter. The path is that
|
|
243
|
+
* address, and it is inside the signature rather than beside it — a token
|
|
244
|
+
* minted for a call nested under tool call X cannot be replayed as a
|
|
245
|
+
* top-level call, or as one nested under Y.
|
|
246
|
+
*
|
|
247
|
+
* The client hands it back untouched, exactly like the signature, so an app
|
|
248
|
+
* answering a sub-agent's question writes what it writes for any other one.
|
|
249
|
+
*/
|
|
250
|
+
path?: string[];
|
|
251
|
+
};
|
|
252
|
+
}[keyof T];
|
|
253
|
+
/**
|
|
254
|
+
* The client's half of a pending call.
|
|
255
|
+
*
|
|
256
|
+
* `path` is the `PendingToolCall`'s, returned unchanged. It has to come back
|
|
257
|
+
* rather than be looked up because the signature commits to it without
|
|
258
|
+
* carrying it in the clear — verification recomputes the MAC over the claims it
|
|
259
|
+
* is handed, so the server needs the path in front of it to check that the
|
|
260
|
+
* client did not move the answer to a different tool call.
|
|
261
|
+
*
|
|
262
|
+
* Returning a path the server did not issue therefore fails verification rather
|
|
263
|
+
* than redirecting anything, which is the property that makes it safe to let
|
|
264
|
+
* the client carry it at all.
|
|
265
|
+
*/
|
|
266
|
+
export type ClientToolResult = {
|
|
267
|
+
toolCallId: string;
|
|
268
|
+
signature: string;
|
|
269
|
+
path?: string[];
|
|
270
|
+
approve: boolean;
|
|
271
|
+
reason?: string;
|
|
272
|
+
}
|
|
273
|
+
/** For `question` and `client` kinds: the value itself, checked against the
|
|
274
|
+
* tool's output schema before the model sees it. */
|
|
275
|
+
| {
|
|
276
|
+
toolCallId: string;
|
|
277
|
+
signature: string;
|
|
278
|
+
path?: string[];
|
|
279
|
+
output: unknown;
|
|
280
|
+
};
|
|
281
|
+
/**
|
|
282
|
+
* One turn from the client. Text, answers to pending calls, or both.
|
|
283
|
+
*
|
|
284
|
+
* A turn that leaves a pending call unanswered denies it: the provider rejects a
|
|
285
|
+
* history with a dangling tool call, so *something* has to resolve it, and
|
|
286
|
+
* treating "the user said something else" as a refusal is both the honest
|
|
287
|
+
* reading and the one that cannot strand a conversation.
|
|
288
|
+
*
|
|
289
|
+
* Note what is absent: the client cannot author an assistant turn or invent a
|
|
290
|
+
* tool result for a call that was never made. It sends its own words, its own
|
|
291
|
+
* files, and answers to questions the server asked.
|
|
292
|
+
*/
|
|
293
|
+
export type ClientTurn = {
|
|
294
|
+
text?: string;
|
|
295
|
+
files?: {
|
|
296
|
+
fileId: string;
|
|
297
|
+
name?: string;
|
|
298
|
+
mimeType?: string;
|
|
299
|
+
}[];
|
|
300
|
+
toolResults?: ClientToolResult[];
|
|
301
|
+
};
|
|
302
|
+
/**
|
|
303
|
+
* One SSE frame each. Deltas are additive and never replay, so a client applies
|
|
304
|
+
* them by appending; every event carries the ids needed to attach it to a
|
|
305
|
+
* message without the client tracking "the current" anything, because an
|
|
306
|
+
* attached stream starts mid-message.
|
|
307
|
+
*/
|
|
308
|
+
export type AgentStreamEvent<T extends ToolShapes = ToolShapes, O = unknown> = {
|
|
309
|
+
type: "run-start";
|
|
310
|
+
runId: string;
|
|
311
|
+
threadId?: string;
|
|
312
|
+
} | {
|
|
313
|
+
type: "message-start";
|
|
314
|
+
messageId: string;
|
|
315
|
+
role: "assistant";
|
|
316
|
+
} | {
|
|
317
|
+
type: "text-delta";
|
|
318
|
+
messageId: string;
|
|
319
|
+
delta: string;
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* `id` is the provider's own reasoning-item id, and it is carried for one
|
|
323
|
+
* reason: a stateless client posts its `messages` back verbatim, and
|
|
324
|
+
* `providers/request.ts` drops a reasoning item that has no id on purpose —
|
|
325
|
+
* a fabricated one "would look like continuity that is not there". Without
|
|
326
|
+
* the id here the server records it and the browser does not, so a stateless
|
|
327
|
+
* app silently re-derives its reasoning every step and misses the prompt
|
|
328
|
+
* cache, which keys on the literal item. Optional because a provider need
|
|
329
|
+
* not supply one (Azure does not always); such a part still renders, it just
|
|
330
|
+
* cannot be echoed back.
|
|
331
|
+
*/
|
|
332
|
+
| {
|
|
333
|
+
type: "reasoning-delta";
|
|
334
|
+
messageId: string;
|
|
335
|
+
delta: string;
|
|
336
|
+
id?: string;
|
|
337
|
+
}
|
|
338
|
+
/** Emitted only for an agent with an `output` schema: `delta` is raw JSON
|
|
339
|
+
* text, `snapshot` the best-effort parse so far, so a UI can bind fields
|
|
340
|
+
* before the object closes. */
|
|
341
|
+
| {
|
|
342
|
+
type: "output-delta";
|
|
343
|
+
messageId: string;
|
|
344
|
+
delta: string;
|
|
345
|
+
snapshot: Partial<O>;
|
|
346
|
+
} | {
|
|
347
|
+
type: "tool-call";
|
|
348
|
+
messageId: string;
|
|
349
|
+
part: ToolCallPart<T>;
|
|
350
|
+
/**
|
|
351
|
+
* The server sending a call the client already holds, to put its own
|
|
352
|
+
* copy of the part in the client's hands — a parked sub-run's signed
|
|
353
|
+
* record, which the client cannot build from the forwarded events. Not
|
|
354
|
+
* a new call: the reducer merges it like any other frame, and a hook
|
|
355
|
+
* that fires per call skips it, because on a re-park the call it names
|
|
356
|
+
* was made by a previous run altogether.
|
|
357
|
+
*/
|
|
358
|
+
resent?: true;
|
|
359
|
+
}
|
|
360
|
+
/** The model searched for deferred tools and loaded these. A UI can say "…
|
|
361
|
+
* looking for the right tool" instead of showing an unexplained pause. */
|
|
362
|
+
| {
|
|
363
|
+
type: "tool-search";
|
|
364
|
+
loaded: string[];
|
|
365
|
+
}
|
|
366
|
+
/** From a tool whose `execute` is an AsyncGenerator. */
|
|
367
|
+
| {
|
|
368
|
+
type: "tool-progress";
|
|
369
|
+
toolCallId: string;
|
|
370
|
+
data: unknown;
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* One event from a sub-agent, re-emitted on the parent stream.
|
|
374
|
+
*
|
|
375
|
+
* Its own event rather than a shape of `tool-progress` because the client
|
|
376
|
+
* does something categorically different with it: `tool-progress` appends an
|
|
377
|
+
* opaque datum to an array, while this is applied RECURSIVELY by the same
|
|
378
|
+
* reducer to the nested run's own message list. That recursion is the trick —
|
|
379
|
+
* a nested transcript is built by the code that already builds a transcript,
|
|
380
|
+
* which is why depth costs the client nothing and why overloading
|
|
381
|
+
* `tool-progress` would have cost it a second renderer.
|
|
382
|
+
*
|
|
383
|
+
* Numbered in the parent's `seq` like everything else, so `/attach` replay
|
|
384
|
+
* and the frame buffer stay correct through the nesting. `event` is left at
|
|
385
|
+
* the default `ToolShapes` for the same reason `NestedRun.messages` is: the
|
|
386
|
+
* sub-agent's tools are not the parent's.
|
|
387
|
+
*/
|
|
388
|
+
| {
|
|
389
|
+
type: "nested-event";
|
|
390
|
+
/** The parent tool call the sub-run belongs to. */
|
|
391
|
+
toolCallId: string;
|
|
392
|
+
runId: string;
|
|
393
|
+
agent: string;
|
|
394
|
+
label?: string;
|
|
395
|
+
event: AgentStreamEvent;
|
|
396
|
+
} | {
|
|
397
|
+
type: "tool-result";
|
|
398
|
+
messageId: string;
|
|
399
|
+
part: ToolResultPart<T>;
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* Terminal for this stream: the run is finished, not parked. Everything
|
|
403
|
+
* needed to answer is in the event and in the messages already delivered, so
|
|
404
|
+
* the next turn is an ordinary send.
|
|
405
|
+
*/
|
|
406
|
+
| {
|
|
407
|
+
type: "awaiting-input";
|
|
408
|
+
runId: string;
|
|
409
|
+
pending: PendingToolCall<T>[];
|
|
410
|
+
} | {
|
|
411
|
+
type: "message-end";
|
|
412
|
+
messageId: string;
|
|
413
|
+
finishReason: FinishReason;
|
|
414
|
+
} | {
|
|
415
|
+
type: "usage";
|
|
416
|
+
usage: Usage;
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* An error after the headers are flushed cannot be an HTTP status, so it is an
|
|
420
|
+
* event. Pre-flight failures — auth, validation, an unknown agent — stay
|
|
421
|
+
* ordinary HTTP errors and never reach this union.
|
|
422
|
+
*/
|
|
423
|
+
| {
|
|
424
|
+
type: "error";
|
|
425
|
+
error: AgentError;
|
|
426
|
+
} | {
|
|
427
|
+
type: "run-end";
|
|
428
|
+
runId: string;
|
|
429
|
+
finishReason: FinishReason;
|
|
430
|
+
};
|
|
431
|
+
/**
|
|
432
|
+
* The event plus its position in the run.
|
|
433
|
+
*
|
|
434
|
+
* `seq` exists for reattachment: a client that dropped at 41 asks for 42 and
|
|
435
|
+
* gets the tail rather than the whole run. It goes in the SSE `id:` field, so
|
|
436
|
+
* the cursor is the transport's own and a client that reconnects with
|
|
437
|
+
* `Last-Event-ID` is asking the right question by default.
|
|
438
|
+
*/
|
|
439
|
+
export type AgentStreamFrame<T extends ToolShapes = ToolShapes, O = unknown> = {
|
|
440
|
+
seq: number;
|
|
441
|
+
event: AgentStreamEvent<T, O>;
|
|
442
|
+
};
|
|
443
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../ai/types.ts"],"names":[],"mappings":"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"}
|