@cloudflare/think 0.0.0 → 0.0.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.
@@ -0,0 +1,217 @@
1
+ //#region src/message-builder.ts
2
+ /**
3
+ * Applies a stream chunk to a mutable parts array, building up the message
4
+ * incrementally. Returns true if the chunk was handled, false if it was
5
+ * an unrecognized type (caller may handle it with additional logic).
6
+ */
7
+ function applyChunkToParts(parts, chunk) {
8
+ switch (chunk.type) {
9
+ case "text-start":
10
+ parts.push({
11
+ type: "text",
12
+ text: "",
13
+ state: "streaming"
14
+ });
15
+ return true;
16
+ case "text-delta": {
17
+ const lastTextPart = findLastPartByType(parts, "text");
18
+ if (lastTextPart && lastTextPart.type === "text") lastTextPart.text += chunk.delta ?? "";
19
+ else parts.push({
20
+ type: "text",
21
+ text: chunk.delta ?? "",
22
+ state: "streaming"
23
+ });
24
+ return true;
25
+ }
26
+ case "text-end": {
27
+ const lastTextPart = findLastPartByType(parts, "text");
28
+ if (lastTextPart && "state" in lastTextPart) lastTextPart.state = "done";
29
+ return true;
30
+ }
31
+ case "reasoning-start":
32
+ parts.push({
33
+ type: "reasoning",
34
+ text: "",
35
+ state: "streaming"
36
+ });
37
+ return true;
38
+ case "reasoning-delta": {
39
+ const lastReasoningPart = findLastPartByType(parts, "reasoning");
40
+ if (lastReasoningPart && lastReasoningPart.type === "reasoning") lastReasoningPart.text += chunk.delta ?? "";
41
+ else parts.push({
42
+ type: "reasoning",
43
+ text: chunk.delta ?? "",
44
+ state: "streaming"
45
+ });
46
+ return true;
47
+ }
48
+ case "reasoning-end": {
49
+ const lastReasoningPart = findLastPartByType(parts, "reasoning");
50
+ if (lastReasoningPart && "state" in lastReasoningPart) lastReasoningPart.state = "done";
51
+ return true;
52
+ }
53
+ case "file":
54
+ parts.push({
55
+ type: "file",
56
+ mediaType: chunk.mediaType,
57
+ url: chunk.url
58
+ });
59
+ return true;
60
+ case "source-url":
61
+ parts.push({
62
+ type: "source-url",
63
+ sourceId: chunk.sourceId,
64
+ url: chunk.url,
65
+ title: chunk.title,
66
+ providerMetadata: chunk.providerMetadata
67
+ });
68
+ return true;
69
+ case "source-document":
70
+ parts.push({
71
+ type: "source-document",
72
+ sourceId: chunk.sourceId,
73
+ mediaType: chunk.mediaType,
74
+ title: chunk.title,
75
+ filename: chunk.filename,
76
+ providerMetadata: chunk.providerMetadata
77
+ });
78
+ return true;
79
+ case "tool-input-start":
80
+ parts.push({
81
+ type: `tool-${chunk.toolName}`,
82
+ toolCallId: chunk.toolCallId,
83
+ toolName: chunk.toolName,
84
+ state: "input-streaming",
85
+ input: void 0,
86
+ ...chunk.providerExecuted != null ? { providerExecuted: chunk.providerExecuted } : {},
87
+ ...chunk.providerMetadata != null ? { callProviderMetadata: chunk.providerMetadata } : {},
88
+ ...chunk.title != null ? { title: chunk.title } : {}
89
+ });
90
+ return true;
91
+ case "tool-input-delta": {
92
+ const toolPart = findToolPartByCallId(parts, chunk.toolCallId);
93
+ if (toolPart) toolPart.input = chunk.input;
94
+ return true;
95
+ }
96
+ case "tool-input-available": {
97
+ const existing = findToolPartByCallId(parts, chunk.toolCallId);
98
+ if (existing) {
99
+ const p = existing;
100
+ p.state = "input-available";
101
+ p.input = chunk.input;
102
+ if (chunk.providerExecuted != null) p.providerExecuted = chunk.providerExecuted;
103
+ if (chunk.providerMetadata != null) p.callProviderMetadata = chunk.providerMetadata;
104
+ if (chunk.title != null) p.title = chunk.title;
105
+ } else parts.push({
106
+ type: `tool-${chunk.toolName}`,
107
+ toolCallId: chunk.toolCallId,
108
+ toolName: chunk.toolName,
109
+ state: "input-available",
110
+ input: chunk.input,
111
+ ...chunk.providerExecuted != null ? { providerExecuted: chunk.providerExecuted } : {},
112
+ ...chunk.providerMetadata != null ? { callProviderMetadata: chunk.providerMetadata } : {},
113
+ ...chunk.title != null ? { title: chunk.title } : {}
114
+ });
115
+ return true;
116
+ }
117
+ case "tool-input-error": {
118
+ const existing = findToolPartByCallId(parts, chunk.toolCallId);
119
+ if (existing) {
120
+ const p = existing;
121
+ p.state = "output-error";
122
+ p.errorText = chunk.errorText;
123
+ p.input = chunk.input;
124
+ if (chunk.providerExecuted != null) p.providerExecuted = chunk.providerExecuted;
125
+ if (chunk.providerMetadata != null) p.callProviderMetadata = chunk.providerMetadata;
126
+ } else parts.push({
127
+ type: `tool-${chunk.toolName}`,
128
+ toolCallId: chunk.toolCallId,
129
+ toolName: chunk.toolName,
130
+ state: "output-error",
131
+ input: chunk.input,
132
+ errorText: chunk.errorText,
133
+ ...chunk.providerExecuted != null ? { providerExecuted: chunk.providerExecuted } : {},
134
+ ...chunk.providerMetadata != null ? { callProviderMetadata: chunk.providerMetadata } : {}
135
+ });
136
+ return true;
137
+ }
138
+ case "tool-approval-request": {
139
+ const toolPart = findToolPartByCallId(parts, chunk.toolCallId);
140
+ if (toolPart) {
141
+ const p = toolPart;
142
+ p.state = "approval-requested";
143
+ p.approval = { id: chunk.approvalId };
144
+ }
145
+ return true;
146
+ }
147
+ case "tool-output-denied": {
148
+ const toolPart = findToolPartByCallId(parts, chunk.toolCallId);
149
+ if (toolPart) {
150
+ const p = toolPart;
151
+ p.state = "output-denied";
152
+ }
153
+ return true;
154
+ }
155
+ case "tool-output-available": {
156
+ const toolPart = findToolPartByCallId(parts, chunk.toolCallId);
157
+ if (toolPart) {
158
+ const p = toolPart;
159
+ p.state = "output-available";
160
+ p.output = chunk.output;
161
+ if (chunk.preliminary !== void 0) p.preliminary = chunk.preliminary;
162
+ }
163
+ return true;
164
+ }
165
+ case "tool-output-error": {
166
+ const toolPart = findToolPartByCallId(parts, chunk.toolCallId);
167
+ if (toolPart) {
168
+ const p = toolPart;
169
+ p.state = "output-error";
170
+ p.errorText = chunk.errorText;
171
+ }
172
+ return true;
173
+ }
174
+ case "step-start":
175
+ case "start-step":
176
+ parts.push({ type: "step-start" });
177
+ return true;
178
+ default:
179
+ if (chunk.type.startsWith("data-")) {
180
+ if (chunk.transient) return true;
181
+ if (chunk.id != null) {
182
+ const existing = findDataPartByTypeAndId(parts, chunk.type, chunk.id);
183
+ if (existing) {
184
+ existing.data = chunk.data;
185
+ return true;
186
+ }
187
+ }
188
+ parts.push({
189
+ type: chunk.type,
190
+ ...chunk.id != null && { id: chunk.id },
191
+ data: chunk.data
192
+ });
193
+ return true;
194
+ }
195
+ return false;
196
+ }
197
+ }
198
+ function findLastPartByType(parts, type) {
199
+ for (let i = parts.length - 1; i >= 0; i--) if (parts[i].type === type) return parts[i];
200
+ }
201
+ function findToolPartByCallId(parts, toolCallId) {
202
+ if (!toolCallId) return void 0;
203
+ for (let i = parts.length - 1; i >= 0; i--) {
204
+ const p = parts[i];
205
+ if ("toolCallId" in p && p.toolCallId === toolCallId) return p;
206
+ }
207
+ }
208
+ function findDataPartByTypeAndId(parts, type, id) {
209
+ for (let i = parts.length - 1; i >= 0; i--) {
210
+ const p = parts[i];
211
+ if (p.type === type && "id" in p && p.id === id) return p;
212
+ }
213
+ }
214
+ //#endregion
215
+ export { applyChunkToParts };
216
+
217
+ //# sourceMappingURL=message-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-builder.js","names":[],"sources":["../src/message-builder.ts"],"sourcesContent":["/**\n * Shared message builder for reconstructing UIMessage parts from stream chunks.\n *\n * Derived from @cloudflare/ai-chat's message-builder.ts. Copied here to avoid\n * a circular dependency (agents cannot import from @cloudflare/ai-chat).\n *\n * ⚠️ DRIFT RISK: If @cloudflare/ai-chat updates its message builder (e.g. new\n * chunk types), this copy must be updated manually. Consider adding a test that\n * verifies parity between the two implementations.\n *\n * Operates on a mutable parts array for performance (avoids allocating new\n * arrays on every chunk during streaming).\n */\n\nimport type { UIMessage } from \"ai\";\n\n/** The parts array type from UIMessage */\nexport type MessageParts = UIMessage[\"parts\"];\n\n/** A single part from the UIMessage parts array */\nexport type MessagePart = MessageParts[number];\n\n/**\n * Parsed chunk data from an AI SDK stream event.\n * This is the JSON-parsed body of a CF_AGENT_USE_CHAT_RESPONSE message,\n * or the `data:` payload of an SSE line.\n */\nexport type StreamChunkData = {\n type: string;\n id?: string;\n delta?: string;\n text?: string;\n mediaType?: string;\n url?: string;\n sourceId?: string;\n title?: string;\n filename?: string;\n toolCallId?: string;\n toolName?: string;\n input?: unknown;\n inputTextDelta?: string;\n output?: unknown;\n state?: string;\n errorText?: string;\n preliminary?: boolean;\n approvalId?: string;\n providerMetadata?: Record<string, unknown>;\n providerExecuted?: boolean;\n data?: unknown;\n transient?: boolean;\n messageId?: string;\n messageMetadata?: Record<string, unknown>;\n [key: string]: unknown;\n};\n\n/**\n * Applies a stream chunk to a mutable parts array, building up the message\n * incrementally. Returns true if the chunk was handled, false if it was\n * an unrecognized type (caller may handle it with additional logic).\n */\nexport function applyChunkToParts(\n parts: MessagePart[],\n chunk: StreamChunkData\n): boolean {\n switch (chunk.type) {\n case \"text-start\": {\n parts.push({\n type: \"text\",\n text: \"\",\n state: \"streaming\"\n } as MessagePart);\n return true;\n }\n\n case \"text-delta\": {\n const lastTextPart = findLastPartByType(parts, \"text\");\n if (lastTextPart && lastTextPart.type === \"text\") {\n (lastTextPart as { text: string }).text += chunk.delta ?? \"\";\n } else {\n parts.push({\n type: \"text\",\n text: chunk.delta ?? \"\",\n state: \"streaming\"\n } as MessagePart);\n }\n return true;\n }\n\n case \"text-end\": {\n const lastTextPart = findLastPartByType(parts, \"text\");\n if (lastTextPart && \"state\" in lastTextPart) {\n (lastTextPart as { state: string }).state = \"done\";\n }\n return true;\n }\n\n case \"reasoning-start\": {\n parts.push({\n type: \"reasoning\",\n text: \"\",\n state: \"streaming\"\n } as MessagePart);\n return true;\n }\n\n case \"reasoning-delta\": {\n const lastReasoningPart = findLastPartByType(parts, \"reasoning\");\n if (lastReasoningPart && lastReasoningPart.type === \"reasoning\") {\n (lastReasoningPart as { text: string }).text += chunk.delta ?? \"\";\n } else {\n parts.push({\n type: \"reasoning\",\n text: chunk.delta ?? \"\",\n state: \"streaming\"\n } as MessagePart);\n }\n return true;\n }\n\n case \"reasoning-end\": {\n const lastReasoningPart = findLastPartByType(parts, \"reasoning\");\n if (lastReasoningPart && \"state\" in lastReasoningPart) {\n (lastReasoningPart as { state: string }).state = \"done\";\n }\n return true;\n }\n\n case \"file\": {\n parts.push({\n type: \"file\",\n mediaType: chunk.mediaType,\n url: chunk.url\n } as MessagePart);\n return true;\n }\n\n case \"source-url\": {\n parts.push({\n type: \"source-url\",\n sourceId: chunk.sourceId,\n url: chunk.url,\n title: chunk.title,\n providerMetadata: chunk.providerMetadata\n } as MessagePart);\n return true;\n }\n\n case \"source-document\": {\n parts.push({\n type: \"source-document\",\n sourceId: chunk.sourceId,\n mediaType: chunk.mediaType,\n title: chunk.title,\n filename: chunk.filename,\n providerMetadata: chunk.providerMetadata\n } as MessagePart);\n return true;\n }\n\n case \"tool-input-start\": {\n parts.push({\n type: `tool-${chunk.toolName}`,\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n state: \"input-streaming\",\n input: undefined,\n ...(chunk.providerExecuted != null\n ? { providerExecuted: chunk.providerExecuted }\n : {}),\n ...(chunk.providerMetadata != null\n ? { callProviderMetadata: chunk.providerMetadata }\n : {}),\n ...(chunk.title != null ? { title: chunk.title } : {})\n } as MessagePart);\n return true;\n }\n\n case \"tool-input-delta\": {\n const toolPart = findToolPartByCallId(parts, chunk.toolCallId);\n if (toolPart) {\n (toolPart as Record<string, unknown>).input = chunk.input;\n }\n return true;\n }\n\n case \"tool-input-available\": {\n const existing = findToolPartByCallId(parts, chunk.toolCallId);\n if (existing) {\n const p = existing as Record<string, unknown>;\n p.state = \"input-available\";\n p.input = chunk.input;\n if (chunk.providerExecuted != null) {\n p.providerExecuted = chunk.providerExecuted;\n }\n if (chunk.providerMetadata != null) {\n p.callProviderMetadata = chunk.providerMetadata;\n }\n if (chunk.title != null) {\n p.title = chunk.title;\n }\n } else {\n parts.push({\n type: `tool-${chunk.toolName}`,\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n state: \"input-available\",\n input: chunk.input,\n ...(chunk.providerExecuted != null\n ? { providerExecuted: chunk.providerExecuted }\n : {}),\n ...(chunk.providerMetadata != null\n ? { callProviderMetadata: chunk.providerMetadata }\n : {}),\n ...(chunk.title != null ? { title: chunk.title } : {})\n } as MessagePart);\n }\n return true;\n }\n\n case \"tool-input-error\": {\n const existing = findToolPartByCallId(parts, chunk.toolCallId);\n if (existing) {\n const p = existing as Record<string, unknown>;\n p.state = \"output-error\";\n p.errorText = chunk.errorText;\n p.input = chunk.input;\n if (chunk.providerExecuted != null) {\n p.providerExecuted = chunk.providerExecuted;\n }\n if (chunk.providerMetadata != null) {\n p.callProviderMetadata = chunk.providerMetadata;\n }\n } else {\n parts.push({\n type: `tool-${chunk.toolName}`,\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n state: \"output-error\",\n input: chunk.input,\n errorText: chunk.errorText,\n ...(chunk.providerExecuted != null\n ? { providerExecuted: chunk.providerExecuted }\n : {}),\n ...(chunk.providerMetadata != null\n ? { callProviderMetadata: chunk.providerMetadata }\n : {})\n } as MessagePart);\n }\n return true;\n }\n\n case \"tool-approval-request\": {\n const toolPart = findToolPartByCallId(parts, chunk.toolCallId);\n if (toolPart) {\n const p = toolPart as Record<string, unknown>;\n p.state = \"approval-requested\";\n p.approval = { id: chunk.approvalId };\n }\n return true;\n }\n\n case \"tool-output-denied\": {\n const toolPart = findToolPartByCallId(parts, chunk.toolCallId);\n if (toolPart) {\n const p = toolPart as Record<string, unknown>;\n p.state = \"output-denied\";\n }\n return true;\n }\n\n case \"tool-output-available\": {\n const toolPart = findToolPartByCallId(parts, chunk.toolCallId);\n if (toolPart) {\n const p = toolPart as Record<string, unknown>;\n p.state = \"output-available\";\n p.output = chunk.output;\n if (chunk.preliminary !== undefined) {\n p.preliminary = chunk.preliminary;\n }\n }\n return true;\n }\n\n case \"tool-output-error\": {\n const toolPart = findToolPartByCallId(parts, chunk.toolCallId);\n if (toolPart) {\n const p = toolPart as Record<string, unknown>;\n p.state = \"output-error\";\n p.errorText = chunk.errorText;\n }\n return true;\n }\n\n case \"step-start\":\n case \"start-step\": {\n parts.push({ type: \"step-start\" } as MessagePart);\n return true;\n }\n\n default: {\n if (chunk.type.startsWith(\"data-\")) {\n if (chunk.transient) {\n return true;\n }\n\n if (chunk.id != null) {\n const existing = findDataPartByTypeAndId(parts, chunk.type, chunk.id);\n if (existing) {\n (existing as Record<string, unknown>).data = chunk.data;\n return true;\n }\n }\n\n parts.push({\n type: chunk.type,\n ...(chunk.id != null && { id: chunk.id }),\n data: chunk.data\n } as MessagePart);\n return true;\n }\n\n return false;\n }\n }\n}\n\nfunction findLastPartByType(\n parts: MessagePart[],\n type: string\n): MessagePart | undefined {\n for (let i = parts.length - 1; i >= 0; i--) {\n if (parts[i].type === type) {\n return parts[i];\n }\n }\n return undefined;\n}\n\nfunction findToolPartByCallId(\n parts: MessagePart[],\n toolCallId: string | undefined\n): MessagePart | undefined {\n if (!toolCallId) return undefined;\n for (let i = parts.length - 1; i >= 0; i--) {\n const p = parts[i];\n if (\"toolCallId\" in p && p.toolCallId === toolCallId) {\n return p;\n }\n }\n return undefined;\n}\n\nfunction findDataPartByTypeAndId(\n parts: MessagePart[],\n type: string,\n id: string\n): MessagePart | undefined {\n for (let i = parts.length - 1; i >= 0; i--) {\n const p = parts[i];\n if (p.type === type && \"id\" in p && (p as { id: string }).id === id) {\n return p;\n }\n }\n return undefined;\n}\n"],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import {
2
+ a as truncateMiddle,
3
+ c as Compaction,
4
+ i as truncateLines,
5
+ l as Session,
6
+ n as SessionManagerOptions,
7
+ o as truncateTail,
8
+ r as truncateHead,
9
+ s as truncateToolOutput,
10
+ t as SessionManager
11
+ } from "../index-C4OTSwUW.js";
12
+ export {
13
+ Compaction,
14
+ Session,
15
+ SessionManager,
16
+ SessionManagerOptions,
17
+ truncateHead,
18
+ truncateLines,
19
+ truncateMiddle,
20
+ truncateTail,
21
+ truncateToolOutput
22
+ };
@@ -0,0 +1,2 @@
1
+ import { a as truncateTail, i as truncateMiddle, n as truncateHead, o as truncateToolOutput, r as truncateLines, t as SessionManager } from "../session-C6ZU_1zM.js";
2
+ export { SessionManager, truncateHead, truncateLines, truncateMiddle, truncateTail, truncateToolOutput };