@grafana/sigil-sdk-js-core 0.0.0 → 0.6.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.
Files changed (57) hide show
  1. package/LICENSE +2 -200
  2. package/README.md +34 -1
  3. package/dist/cache-diagnostics.d.ts +15 -0
  4. package/dist/cache-diagnostics.d.ts.map +1 -0
  5. package/dist/cache-diagnostics.js +15 -0
  6. package/dist/cache-diagnostics.js.map +1 -0
  7. package/dist/client.d.ts +138 -0
  8. package/dist/client.d.ts.map +1 -0
  9. package/dist/client.js +1855 -0
  10. package/dist/client.js.map +1 -0
  11. package/dist/config.d.ts +17 -0
  12. package/dist/config.d.ts.map +1 -0
  13. package/dist/config.js +375 -0
  14. package/dist/config.js.map +1 -0
  15. package/dist/content_capture.d.ts +34 -0
  16. package/dist/content_capture.d.ts.map +1 -0
  17. package/dist/content_capture.js +121 -0
  18. package/dist/content_capture.js.map +1 -0
  19. package/dist/context.d.ts +11 -0
  20. package/dist/context.d.ts.map +1 -0
  21. package/dist/context.js +80 -0
  22. package/dist/context.js.map +1 -0
  23. package/dist/core.d.ts +13 -0
  24. package/dist/core.d.ts.map +1 -0
  25. package/dist/core.js +12 -0
  26. package/dist/core.js.map +1 -0
  27. package/dist/exporters/default.d.ts +3 -0
  28. package/dist/exporters/default.d.ts.map +1 -0
  29. package/dist/exporters/default.js +77 -0
  30. package/dist/exporters/default.js.map +1 -0
  31. package/dist/exporters/grpc.d.ts +14 -0
  32. package/dist/exporters/grpc.d.ts.map +1 -0
  33. package/dist/exporters/grpc.js +375 -0
  34. package/dist/exporters/grpc.js.map +1 -0
  35. package/dist/exporters/http.d.ts +10 -0
  36. package/dist/exporters/http.d.ts.map +1 -0
  37. package/dist/exporters/http.js +280 -0
  38. package/dist/exporters/http.js.map +1 -0
  39. package/dist/hooks.d.ts +33 -0
  40. package/dist/hooks.d.ts.map +1 -0
  41. package/dist/hooks.js +464 -0
  42. package/dist/hooks.js.map +1 -0
  43. package/dist/redaction.d.ts +16 -0
  44. package/dist/redaction.d.ts.map +1 -0
  45. package/dist/redaction.js +155 -0
  46. package/dist/redaction.js.map +1 -0
  47. package/dist/types.d.ts +597 -0
  48. package/dist/types.d.ts.map +1 -0
  49. package/dist/types.js +2 -0
  50. package/dist/types.js.map +1 -0
  51. package/dist/utils.d.ts +26 -0
  52. package/dist/utils.d.ts.map +1 -0
  53. package/dist/utils.js +355 -0
  54. package/dist/utils.js.map +1 -0
  55. package/package.json +46 -8
  56. package/proto/sigil/v1/generation_ingest.proto +187 -0
  57. package/index.js +0 -1
@@ -0,0 +1,375 @@
1
+ import { dirname, join } from 'node:path';
2
+ import { fileURLToPath } from 'node:url';
3
+ import * as grpc from '@grpc/grpc-js';
4
+ import * as protoLoader from '@grpc/proto-loader';
5
+ import { canonicalEffectiveVersion } from '../utils.js';
6
+ const __filename = fileURLToPath(import.meta.url);
7
+ const __dirname = dirname(__filename);
8
+ const defaultProtoPath = join(__dirname, '../../proto/sigil/v1/generation_ingest.proto');
9
+ const protoLoadOptions = {
10
+ keepCase: false,
11
+ longs: String,
12
+ enums: String,
13
+ defaults: false,
14
+ oneofs: true,
15
+ };
16
+ export class GRPCGenerationExporter {
17
+ endpoint;
18
+ headers;
19
+ insecure;
20
+ initPromise;
21
+ client;
22
+ constructor(endpoint, headers, insecure = false) {
23
+ const parsed = parseGRPCEndpoint(endpoint);
24
+ this.endpoint = parsed.host;
25
+ this.insecure = insecure || parsed.insecure;
26
+ this.headers = headers ? { ...headers } : {};
27
+ }
28
+ async exportGenerations(request) {
29
+ await this.ensureClient();
30
+ const client = this.client;
31
+ if (client === undefined || typeof client.ExportGenerations !== 'function') {
32
+ throw new Error('grpc exporter client is unavailable');
33
+ }
34
+ const metadata = new grpc.Metadata();
35
+ for (const [key, value] of Object.entries(this.headers)) {
36
+ metadata.set(key, value);
37
+ }
38
+ const grpcRequest = {
39
+ generations: request.generations.map(mapGenerationToProto),
40
+ };
41
+ const response = await new Promise((resolve, reject) => {
42
+ client.ExportGenerations?.(grpcRequest, metadata, (error, result) => {
43
+ if (error !== null) {
44
+ reject(error);
45
+ return;
46
+ }
47
+ resolve(result);
48
+ });
49
+ });
50
+ return parseGRPCExportResponse(response, request);
51
+ }
52
+ async shutdown() {
53
+ if (this.client !== undefined) {
54
+ this.client.close();
55
+ this.client = undefined;
56
+ }
57
+ }
58
+ async ensureClient() {
59
+ if (this.client !== undefined) {
60
+ return;
61
+ }
62
+ if (this.initPromise !== undefined) {
63
+ await this.initPromise;
64
+ return;
65
+ }
66
+ this.initPromise = this.initializeClient();
67
+ await this.initPromise;
68
+ this.initPromise = undefined;
69
+ }
70
+ async initializeClient() {
71
+ const packageDefinition = await protoLoader.load(defaultProtoPath, protoLoadOptions);
72
+ const loaded = grpc.loadPackageDefinition(packageDefinition);
73
+ const clientCtor = loaded.sigil?.v1?.GenerationIngestService;
74
+ if (clientCtor === undefined) {
75
+ throw new Error('failed to load sigil.v1.GenerationIngestService from proto');
76
+ }
77
+ const credentials = this.insecure ? grpc.credentials.createInsecure() : grpc.credentials.createSsl();
78
+ this.client = new clientCtor(this.endpoint, credentials);
79
+ }
80
+ }
81
+ function parseGRPCEndpoint(endpoint) {
82
+ const trimmed = endpoint.trim();
83
+ if (trimmed.length === 0) {
84
+ throw new Error('generation export endpoint is required');
85
+ }
86
+ if (trimmed.startsWith('http://') || trimmed.startsWith('https://')) {
87
+ const parsed = new URL(trimmed);
88
+ return {
89
+ host: parsed.host,
90
+ insecure: parsed.protocol === 'http:',
91
+ };
92
+ }
93
+ if (trimmed.startsWith('grpc://')) {
94
+ return {
95
+ host: trimmed.slice('grpc://'.length),
96
+ insecure: false,
97
+ };
98
+ }
99
+ return {
100
+ host: trimmed,
101
+ insecure: false,
102
+ };
103
+ }
104
+ function parseGRPCExportResponse(response, request) {
105
+ if (!isObject(response) || !Array.isArray(response.results)) {
106
+ throw new Error('invalid grpc generation export response payload');
107
+ }
108
+ return {
109
+ results: response.results.map((result, index) => {
110
+ if (!isObject(result)) {
111
+ throw new Error('invalid grpc generation export result payload');
112
+ }
113
+ return {
114
+ generationId: asString(result.generationId) ?? asString(result.generation_id) ?? request.generations[index]?.id ?? '',
115
+ accepted: Boolean(result.accepted),
116
+ error: asString(result.error),
117
+ };
118
+ }),
119
+ };
120
+ }
121
+ function mapGenerationToProto(generation) {
122
+ const proto = {
123
+ id: generation.id,
124
+ conversationId: generation.conversationId,
125
+ operationName: generation.operationName,
126
+ mode: generation.mode === 'STREAM' ? 'GENERATION_MODE_STREAM' : 'GENERATION_MODE_SYNC',
127
+ traceId: generation.traceId,
128
+ spanId: generation.spanId,
129
+ model: {
130
+ provider: generation.model.provider,
131
+ name: generation.model.name,
132
+ },
133
+ responseId: generation.responseId,
134
+ responseModel: generation.responseModel,
135
+ systemPrompt: generation.systemPrompt,
136
+ maxTokens: generation.maxTokens === undefined ? undefined : toInt64String(generation.maxTokens),
137
+ temperature: generation.temperature,
138
+ topP: generation.topP,
139
+ toolChoice: generation.toolChoice,
140
+ thinkingEnabled: generation.thinkingEnabled,
141
+ input: generation.input?.map(mapMessageToProto),
142
+ output: generation.output?.map(mapMessageToProto),
143
+ tools: generation.tools?.map(mapToolToProto),
144
+ usage: mapUsageToProto(generation.usage),
145
+ stopReason: generation.stopReason,
146
+ startedAt: mapTimestamp(generation.startedAt),
147
+ completedAt: mapTimestamp(generation.completedAt),
148
+ tags: generation.tags ?? {},
149
+ metadata: mapStructToProto(generation.metadata),
150
+ rawArtifacts: generation.artifacts?.map(mapArtifactToProto),
151
+ callError: generation.callError,
152
+ agentName: generation.agentName,
153
+ agentVersion: generation.agentVersion,
154
+ };
155
+ const effectiveVersion = canonicalEffectiveVersion(generation.effectiveVersion);
156
+ if (effectiveVersion !== undefined) {
157
+ proto.effectiveVersion = effectiveVersion;
158
+ }
159
+ return proto;
160
+ }
161
+ function mapMessageToProto(message) {
162
+ const parts = message.parts?.map(mapMessagePartToProto) ?? [];
163
+ if (parts.length === 0 && typeof message.content === 'string') {
164
+ parts.push({
165
+ text: message.content,
166
+ });
167
+ }
168
+ return {
169
+ role: toMessageRoleEnum(message.role),
170
+ name: message.name ?? '',
171
+ parts,
172
+ };
173
+ }
174
+ function mapMessagePartToProto(part) {
175
+ switch (part.type) {
176
+ case 'text':
177
+ return withPartMetadata({
178
+ text: part.text,
179
+ }, part.metadata?.providerType);
180
+ case 'thinking':
181
+ return withPartMetadata({
182
+ thinking: part.thinking,
183
+ }, part.metadata?.providerType);
184
+ case 'tool_call':
185
+ return withPartMetadata({
186
+ toolCall: {
187
+ id: part.toolCall.id ?? '',
188
+ name: part.toolCall.name,
189
+ inputJson: toBytePayload(part.toolCall.inputJSON),
190
+ },
191
+ }, part.metadata?.providerType);
192
+ case 'tool_result':
193
+ return withPartMetadata({
194
+ toolResult: {
195
+ toolCallId: part.toolResult.toolCallId ?? '',
196
+ name: part.toolResult.name ?? '',
197
+ content: part.toolResult.content ?? '',
198
+ contentJson: toBytePayload(part.toolResult.contentJSON),
199
+ isError: part.toolResult.isError ?? false,
200
+ },
201
+ }, part.metadata?.providerType);
202
+ }
203
+ }
204
+ function mapToolToProto(tool) {
205
+ return {
206
+ name: tool.name,
207
+ description: tool.description ?? '',
208
+ type: tool.type ?? '',
209
+ inputSchemaJson: toBytePayload(tool.inputSchemaJSON),
210
+ };
211
+ }
212
+ function mapUsageToProto(usage) {
213
+ if (usage === undefined) {
214
+ return undefined;
215
+ }
216
+ const inputTokens = usage.inputTokens ?? 0;
217
+ const outputTokens = usage.outputTokens ?? 0;
218
+ const totalTokens = usage.totalTokens ?? inputTokens + outputTokens;
219
+ return {
220
+ inputTokens: toInt64String(inputTokens),
221
+ outputTokens: toInt64String(outputTokens),
222
+ totalTokens: toInt64String(totalTokens),
223
+ cacheReadInputTokens: toInt64String(usage.cacheReadInputTokens),
224
+ cacheWriteInputTokens: toInt64String(usage.cacheWriteInputTokens),
225
+ reasoningTokens: toInt64String(usage.reasoningTokens),
226
+ };
227
+ }
228
+ function mapArtifactToProto(artifact) {
229
+ return {
230
+ kind: toArtifactKindEnum(artifact.type),
231
+ name: artifact.name ?? artifact.type,
232
+ contentType: artifact.mimeType ?? 'application/json',
233
+ payload: toBytePayload(artifact.payload),
234
+ recordId: artifact.recordId ?? '',
235
+ uri: artifact.uri ?? '',
236
+ };
237
+ }
238
+ function withPartMetadata(part, providerType) {
239
+ if (providerType === undefined || providerType.trim().length === 0) {
240
+ return part;
241
+ }
242
+ return {
243
+ ...part,
244
+ metadata: {
245
+ providerType,
246
+ },
247
+ };
248
+ }
249
+ function toBytePayload(value) {
250
+ if (value === undefined || value.length === 0) {
251
+ return Buffer.from([]);
252
+ }
253
+ return Buffer.from(value, 'utf8');
254
+ }
255
+ function mapStructToProto(metadata) {
256
+ if (metadata === undefined) {
257
+ return undefined;
258
+ }
259
+ const normalized = normalizeMetadata(metadata);
260
+ if (Object.keys(normalized).length === 0) {
261
+ return undefined;
262
+ }
263
+ return {
264
+ fields: mapStructFields(normalized),
265
+ };
266
+ }
267
+ function normalizeMetadata(metadata) {
268
+ try {
269
+ const encoded = JSON.stringify(metadata, (_key, value) => {
270
+ if (value instanceof Date) {
271
+ return value.toISOString();
272
+ }
273
+ if (typeof value === 'bigint') {
274
+ return value.toString();
275
+ }
276
+ return value;
277
+ });
278
+ if (encoded === undefined) {
279
+ return {};
280
+ }
281
+ const decoded = JSON.parse(encoded);
282
+ if (!isObject(decoded)) {
283
+ return {};
284
+ }
285
+ return decoded;
286
+ }
287
+ catch {
288
+ return {};
289
+ }
290
+ }
291
+ function mapStructFields(objectValue) {
292
+ const fields = {};
293
+ for (const [key, value] of Object.entries(objectValue)) {
294
+ const mappedValue = mapStructValue(value);
295
+ if (mappedValue !== undefined) {
296
+ fields[key] = mappedValue;
297
+ }
298
+ }
299
+ return fields;
300
+ }
301
+ function mapStructValue(value) {
302
+ if (value === null) {
303
+ return { nullValue: 'NULL_VALUE' };
304
+ }
305
+ switch (typeof value) {
306
+ case 'string':
307
+ return { stringValue: value };
308
+ case 'number':
309
+ return Number.isFinite(value) ? { numberValue: value } : { stringValue: String(value) };
310
+ case 'boolean':
311
+ return { boolValue: value };
312
+ case 'object':
313
+ if (Array.isArray(value)) {
314
+ const values = value
315
+ .map((entry) => mapStructValue(entry))
316
+ .filter((entry) => entry !== undefined);
317
+ return { listValue: { values } };
318
+ }
319
+ if (isObject(value)) {
320
+ return { structValue: { fields: mapStructFields(value) } };
321
+ }
322
+ return { nullValue: 'NULL_VALUE' };
323
+ default:
324
+ return undefined;
325
+ }
326
+ }
327
+ function mapTimestamp(date) {
328
+ const milliseconds = date.getTime();
329
+ const seconds = Math.floor(milliseconds / 1_000);
330
+ const nanos = (milliseconds - seconds * 1_000) * 1_000_000;
331
+ return {
332
+ seconds: seconds.toString(),
333
+ nanos,
334
+ };
335
+ }
336
+ function toInt64String(value) {
337
+ if (value === undefined || Number.isNaN(value) || !Number.isFinite(value)) {
338
+ return '0';
339
+ }
340
+ return Math.trunc(value).toString();
341
+ }
342
+ function toMessageRoleEnum(role) {
343
+ const normalized = role.trim().toLowerCase();
344
+ switch (normalized) {
345
+ case 'assistant':
346
+ return 'MESSAGE_ROLE_ASSISTANT';
347
+ case 'tool':
348
+ return 'MESSAGE_ROLE_TOOL';
349
+ case 'user':
350
+ default:
351
+ return 'MESSAGE_ROLE_USER';
352
+ }
353
+ }
354
+ function toArtifactKindEnum(kind) {
355
+ const normalized = kind.trim().toLowerCase();
356
+ switch (normalized) {
357
+ case 'request':
358
+ return 'ARTIFACT_KIND_REQUEST';
359
+ case 'response':
360
+ return 'ARTIFACT_KIND_RESPONSE';
361
+ case 'tools':
362
+ return 'ARTIFACT_KIND_TOOLS';
363
+ case 'provider_event':
364
+ return 'ARTIFACT_KIND_PROVIDER_EVENT';
365
+ default:
366
+ return 'ARTIFACT_KIND_UNSPECIFIED';
367
+ }
368
+ }
369
+ function isObject(value) {
370
+ return typeof value === 'object' && value !== null;
371
+ }
372
+ function asString(value) {
373
+ return typeof value === 'string' ? value : undefined;
374
+ }
375
+ //# sourceMappingURL=grpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grpc.js","sourceRoot":"","sources":["../../../js/src/exporters/grpc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { ExportGenerationsRequest, ExportGenerationsResponse, GenerationExporter } from '../types.js';
2
+ export declare class HTTPGenerationExporter implements GenerationExporter {
3
+ private readonly endpoint;
4
+ private readonly headers;
5
+ constructor(endpoint: string, headers?: Record<string, string>);
6
+ exportGenerations(request: ExportGenerationsRequest): Promise<ExportGenerationsResponse>;
7
+ }
8
+ /** @internal Exported for tests; not part of the public API. */
9
+ export declare function normalizeHTTPGenerationEndpoint(endpoint: string): string;
10
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../js/src/exporters/http.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,wBAAwB,EACxB,yBAAyB,EAEzB,kBAAkB,EAKnB,MAAM,aAAa,CAAC;AAGrB,qBAAa,sBAAuB,YAAW,kBAAkB;IAC/D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;gBAErC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAKxD,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,yBAAyB,CAAC;CAoB/F;AAiCD,gEAAgE;AAChE,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAqBxE"}
@@ -0,0 +1,280 @@
1
+ import { canonicalEffectiveVersion, isRecord } from '../utils.js';
2
+ export class HTTPGenerationExporter {
3
+ endpoint;
4
+ headers;
5
+ constructor(endpoint, headers) {
6
+ this.endpoint = normalizeHTTPGenerationEndpoint(endpoint);
7
+ this.headers = headers ? { ...headers } : {};
8
+ }
9
+ async exportGenerations(request) {
10
+ const response = await fetch(this.endpoint, {
11
+ method: 'POST',
12
+ headers: {
13
+ 'content-type': 'application/json',
14
+ ...this.headers,
15
+ },
16
+ body: JSON.stringify({
17
+ generations: request.generations.map(mapGenerationToProtoJSON),
18
+ }),
19
+ });
20
+ if (!response.ok) {
21
+ const responseText = (await response.text()).trim();
22
+ throw new Error(`http generation export status ${response.status}: ${responseText}`);
23
+ }
24
+ const payload = (await response.json());
25
+ return parseExportGenerationsResponse(payload, request);
26
+ }
27
+ }
28
+ function parseExportGenerationsResponse(payload, request) {
29
+ if (!isRecord(payload) || !Array.isArray(payload.results)) {
30
+ throw new Error('invalid generation export response payload');
31
+ }
32
+ const results = payload.results.map((result, index) => {
33
+ if (!isRecord(result)) {
34
+ throw new Error('invalid generation export result payload');
35
+ }
36
+ const fallbackGenerationID = request.generations[index]?.id ?? '';
37
+ return {
38
+ generationId: typeof result.generationId === 'string'
39
+ ? result.generationId
40
+ : typeof result.generation_id === 'string'
41
+ ? result.generation_id
42
+ : fallbackGenerationID,
43
+ accepted: Boolean(result.accepted),
44
+ error: typeof result.error === 'string' ? result.error : undefined,
45
+ };
46
+ });
47
+ return { results };
48
+ }
49
+ const HTTP_GENERATION_EXPORT_PATH = '/api/v1/generations:export';
50
+ /** @internal Exported for tests; not part of the public API. */
51
+ export function normalizeHTTPGenerationEndpoint(endpoint) {
52
+ const trimmed = endpoint.trim();
53
+ if (trimmed.length === 0) {
54
+ throw new Error('generation export endpoint is required');
55
+ }
56
+ const lowerPrefix = trimmed.slice(0, 8).toLowerCase();
57
+ const hasScheme = lowerPrefix.startsWith('http://') || lowerPrefix.startsWith('https://');
58
+ const withScheme = hasScheme ? trimmed : `http://${trimmed}`;
59
+ let url;
60
+ try {
61
+ url = new URL(withScheme);
62
+ }
63
+ catch (e) {
64
+ const detail = e instanceof Error ? e.message : String(e);
65
+ throw new Error(`parse generation export endpoint "${endpoint}": ${detail}`);
66
+ }
67
+ if (url.pathname === '' || url.pathname === '/') {
68
+ url.pathname = HTTP_GENERATION_EXPORT_PATH;
69
+ }
70
+ return url.toString();
71
+ }
72
+ function mapGenerationToProtoJSON(generation) {
73
+ const proto = {
74
+ id: generation.id,
75
+ conversation_id: generation.conversationId ?? '',
76
+ operation_name: generation.operationName,
77
+ mode: generation.mode === 'STREAM' ? 'GENERATION_MODE_STREAM' : 'GENERATION_MODE_SYNC',
78
+ trace_id: generation.traceId ?? '',
79
+ span_id: generation.spanId ?? '',
80
+ model: {
81
+ provider: generation.model.provider,
82
+ name: generation.model.name,
83
+ },
84
+ response_id: generation.responseId ?? '',
85
+ response_model: generation.responseModel ?? '',
86
+ system_prompt: generation.systemPrompt ?? '',
87
+ input: (generation.input ?? []).map(mapMessageToProtoJSON),
88
+ output: (generation.output ?? []).map(mapMessageToProtoJSON),
89
+ tools: (generation.tools ?? []).map(mapToolToProtoJSON),
90
+ usage: mapUsageToProtoJSON(generation.usage),
91
+ stop_reason: generation.stopReason ?? '',
92
+ started_at: generation.startedAt.toISOString(),
93
+ completed_at: generation.completedAt.toISOString(),
94
+ tags: generation.tags ?? {},
95
+ metadata: normalizeMetadata(generation.metadata),
96
+ raw_artifacts: (generation.artifacts ?? []).map(mapArtifactToProtoJSON),
97
+ call_error: generation.callError ?? '',
98
+ agent_name: generation.agentName ?? '',
99
+ agent_version: generation.agentVersion ?? '',
100
+ };
101
+ if (generation.maxTokens !== undefined) {
102
+ proto.max_tokens = toInt64String(generation.maxTokens);
103
+ }
104
+ if (generation.temperature !== undefined) {
105
+ proto.temperature = generation.temperature;
106
+ }
107
+ if (generation.topP !== undefined) {
108
+ proto.top_p = generation.topP;
109
+ }
110
+ if (generation.toolChoice !== undefined) {
111
+ proto.tool_choice = generation.toolChoice;
112
+ }
113
+ if (generation.thinkingEnabled !== undefined) {
114
+ proto.thinking_enabled = generation.thinkingEnabled;
115
+ }
116
+ if (generation.parentGenerationIds?.length) {
117
+ proto.parent_generation_ids = generation.parentGenerationIds;
118
+ }
119
+ const effectiveVersion = canonicalEffectiveVersion(generation.effectiveVersion);
120
+ if (effectiveVersion !== undefined) {
121
+ proto.effective_version = effectiveVersion;
122
+ }
123
+ return proto;
124
+ }
125
+ function mapMessageToProtoJSON(message) {
126
+ const parts = (message.parts ?? []).map(mapMessagePartToProtoJSON);
127
+ if (parts.length === 0 && typeof message.content === 'string') {
128
+ parts.push({ text: message.content });
129
+ }
130
+ return {
131
+ role: toMessageRoleEnum(message.role),
132
+ name: message.name ?? '',
133
+ parts,
134
+ };
135
+ }
136
+ function mapMessagePartToProtoJSON(part) {
137
+ switch (part.type) {
138
+ case 'text':
139
+ return withPartMetadata({
140
+ text: part.text,
141
+ }, part.metadata?.providerType);
142
+ case 'thinking':
143
+ return withPartMetadata({
144
+ thinking: part.thinking,
145
+ }, part.metadata?.providerType);
146
+ case 'tool_call':
147
+ return withPartMetadata({
148
+ tool_call: {
149
+ id: part.toolCall.id ?? '',
150
+ name: part.toolCall.name,
151
+ input_json: toBase64Payload(part.toolCall.inputJSON),
152
+ },
153
+ }, part.metadata?.providerType);
154
+ case 'tool_result':
155
+ return withPartMetadata({
156
+ tool_result: {
157
+ tool_call_id: part.toolResult.toolCallId ?? '',
158
+ name: part.toolResult.name ?? '',
159
+ content: part.toolResult.content ?? '',
160
+ content_json: toBase64Payload(part.toolResult.contentJSON),
161
+ is_error: part.toolResult.isError ?? false,
162
+ },
163
+ }, part.metadata?.providerType);
164
+ }
165
+ }
166
+ function mapToolToProtoJSON(tool) {
167
+ return {
168
+ name: tool.name,
169
+ description: tool.description ?? '',
170
+ type: tool.type ?? '',
171
+ input_schema_json: toBase64Payload(tool.inputSchemaJSON),
172
+ };
173
+ }
174
+ function mapUsageToProtoJSON(usage) {
175
+ if (usage === undefined) {
176
+ return undefined;
177
+ }
178
+ const inputTokens = usage.inputTokens ?? 0;
179
+ const outputTokens = usage.outputTokens ?? 0;
180
+ const totalTokens = usage.totalTokens ?? inputTokens + outputTokens;
181
+ return {
182
+ input_tokens: toInt64String(inputTokens),
183
+ output_tokens: toInt64String(outputTokens),
184
+ total_tokens: toInt64String(totalTokens),
185
+ cache_read_input_tokens: toInt64String(usage.cacheReadInputTokens),
186
+ cache_write_input_tokens: toInt64String(usage.cacheWriteInputTokens),
187
+ reasoning_tokens: toInt64String(usage.reasoningTokens),
188
+ };
189
+ }
190
+ function mapArtifactToProtoJSON(artifact) {
191
+ return {
192
+ kind: toArtifactKindEnum(artifact.type),
193
+ name: artifact.name ?? artifact.type,
194
+ content_type: artifact.mimeType ?? 'application/json',
195
+ payload: toBase64Payload(artifact.payload),
196
+ record_id: artifact.recordId ?? '',
197
+ uri: artifact.uri ?? '',
198
+ };
199
+ }
200
+ function withPartMetadata(part, providerType) {
201
+ if (providerType === undefined || providerType.trim().length === 0) {
202
+ return part;
203
+ }
204
+ return {
205
+ ...part,
206
+ metadata: {
207
+ provider_type: providerType,
208
+ },
209
+ };
210
+ }
211
+ function normalizeMetadata(metadata) {
212
+ if (metadata === undefined) {
213
+ return {};
214
+ }
215
+ try {
216
+ const encoded = JSON.stringify(metadata, (_key, value) => {
217
+ if (value instanceof Date) {
218
+ return value.toISOString();
219
+ }
220
+ if (typeof value === 'bigint') {
221
+ return value.toString();
222
+ }
223
+ return value;
224
+ });
225
+ if (encoded === undefined) {
226
+ return {};
227
+ }
228
+ const decoded = JSON.parse(encoded);
229
+ if (!isRecord(decoded)) {
230
+ return {};
231
+ }
232
+ return decoded;
233
+ }
234
+ catch {
235
+ return {};
236
+ }
237
+ }
238
+ function toBase64Payload(value) {
239
+ if (value === undefined || value.length === 0) {
240
+ return '';
241
+ }
242
+ const bytes = new TextEncoder().encode(value);
243
+ let binary = '';
244
+ for (const byte of bytes) {
245
+ binary += String.fromCharCode(byte);
246
+ }
247
+ return btoa(binary);
248
+ }
249
+ function toInt64String(value) {
250
+ if (value === undefined || Number.isNaN(value) || !Number.isFinite(value)) {
251
+ return '0';
252
+ }
253
+ return Math.trunc(value).toString();
254
+ }
255
+ function toMessageRoleEnum(role) {
256
+ switch (String(role).trim().toLowerCase()) {
257
+ case 'assistant':
258
+ return 'MESSAGE_ROLE_ASSISTANT';
259
+ case 'tool':
260
+ return 'MESSAGE_ROLE_TOOL';
261
+ case 'user':
262
+ default:
263
+ return 'MESSAGE_ROLE_USER';
264
+ }
265
+ }
266
+ function toArtifactKindEnum(kind) {
267
+ switch (String(kind).trim().toLowerCase()) {
268
+ case 'request':
269
+ return 'ARTIFACT_KIND_REQUEST';
270
+ case 'response':
271
+ return 'ARTIFACT_KIND_RESPONSE';
272
+ case 'tools':
273
+ return 'ARTIFACT_KIND_TOOLS';
274
+ case 'provider_event':
275
+ return 'ARTIFACT_KIND_PROVIDER_EVENT';
276
+ default:
277
+ return 'ARTIFACT_KIND_UNSPECIFIED';
278
+ }
279
+ }
280
+ //# sourceMappingURL=http.js.map