@simonepri/refined-antigravity-acp 1.5.0 → 1.6.1

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 (41) hide show
  1. package/dist/src/fixes/flattened-model-efforts/index.d.ts.map +1 -1
  2. package/dist/src/fixes/flattened-model-efforts/index.js +15 -2
  3. package/dist/src/fixes/flattened-model-efforts/index.js.map +1 -1
  4. package/dist/src/fixes/index.d.ts +1 -0
  5. package/dist/src/fixes/index.d.ts.map +1 -1
  6. package/dist/src/fixes/index.js +5 -0
  7. package/dist/src/fixes/index.js.map +1 -1
  8. package/dist/src/fixes/missing-usage-metrics/index.d.ts +1 -0
  9. package/dist/src/fixes/missing-usage-metrics/index.d.ts.map +1 -1
  10. package/dist/src/fixes/missing-usage-metrics/index.js +6 -2
  11. package/dist/src/fixes/missing-usage-metrics/index.js.map +1 -1
  12. package/dist/src/otel/config.d.ts +19 -0
  13. package/dist/src/otel/config.d.ts.map +1 -0
  14. package/dist/src/otel/config.js +121 -0
  15. package/dist/src/otel/config.js.map +1 -0
  16. package/dist/src/otel/exporter.d.ts +25 -0
  17. package/dist/src/otel/exporter.d.ts.map +1 -0
  18. package/dist/src/otel/exporter.js +102 -0
  19. package/dist/src/otel/exporter.js.map +1 -0
  20. package/dist/src/otel/fix.d.ts +33 -0
  21. package/dist/src/otel/fix.d.ts.map +1 -0
  22. package/dist/src/otel/fix.js +234 -0
  23. package/dist/src/otel/fix.js.map +1 -0
  24. package/dist/src/otel/index.d.ts +10 -0
  25. package/dist/src/otel/index.d.ts.map +1 -0
  26. package/dist/src/otel/index.js +10 -0
  27. package/dist/src/otel/index.js.map +1 -0
  28. package/dist/src/otel/tracker.d.ts +79 -0
  29. package/dist/src/otel/tracker.d.ts.map +1 -0
  30. package/dist/src/otel/tracker.js +359 -0
  31. package/dist/src/otel/tracker.js.map +1 -0
  32. package/dist/src/otel/types.d.ts +93 -0
  33. package/dist/src/otel/types.d.ts.map +1 -0
  34. package/dist/src/otel/types.js +49 -0
  35. package/dist/src/otel/types.js.map +1 -0
  36. package/dist/src/otel/utf8.d.ts +15 -0
  37. package/dist/src/otel/utf8.d.ts.map +1 -0
  38. package/dist/src/otel/utf8.js +49 -0
  39. package/dist/src/otel/utf8.js.map +1 -0
  40. package/package.json +1 -1
  41. package/readme.md +51 -33
@@ -0,0 +1,359 @@
1
+ /**
2
+ * Session turn and telemetry tracker.
3
+ * Maps ACP session prompts, response streams, and tool executions to OpenTelemetry
4
+ * GenAI semantic conventions and Antigravity CLI log events.
5
+ */
6
+ import { randomBytes } from "node:crypto";
7
+ import { existsSync } from "node:fs";
8
+ import { DatabaseSync } from "node:sqlite";
9
+ import { truncateUtf8 } from "./utf8.js";
10
+ import { SPAN_KIND, STATUS_CODE, toOtelKeyValues, } from "./types.js";
11
+ import { getLatestSessionUsage } from "../fixes/missing-usage-metrics/index.js";
12
+ import { stripSystemContext } from "../fixes/missing-system-prompt/index.js";
13
+ import { getConversationDbPath } from "../fixes/orphaned-checkpoints/index.js";
14
+ import { getField, getVarintField } from "../lib/protobuf.js";
15
+ export function generateTraceId() {
16
+ return randomBytes(16).toString("hex");
17
+ }
18
+ export function generateSpanId() {
19
+ return randomBytes(8).toString("hex");
20
+ }
21
+ export function nowUnixNano() {
22
+ return (BigInt(Date.now()) * 1000000n).toString();
23
+ }
24
+ function parseVarintsFromField9(f9) {
25
+ const promptTokens = getVarintField(f9, 2);
26
+ const candidateTokens = getVarintField(f9, 3);
27
+ const cachedTokens = getVarintField(f9, 5);
28
+ return {
29
+ promptTokens: typeof promptTokens === "number" ? promptTokens : undefined,
30
+ candidateTokens: typeof candidateTokens === "number" ? candidateTokens : undefined,
31
+ cachedTokens: typeof cachedTokens === "number" && cachedTokens > 0 ? cachedTokens : undefined,
32
+ };
33
+ }
34
+ export function readTokensFromDb(dbPath) {
35
+ if (!existsSync(dbPath))
36
+ return undefined;
37
+ let db = null;
38
+ try {
39
+ db = new DatabaseSync(dbPath, { timeout: 1000, readOnly: true });
40
+ const row = db
41
+ .prepare("SELECT metadata FROM steps WHERE step_type IN (15, 2) AND metadata IS NOT NULL ORDER BY idx DESC LIMIT 1;")
42
+ .get();
43
+ if (!row?.metadata)
44
+ return undefined;
45
+ const f9 = getField(row.metadata, 9);
46
+ return f9 ? parseVarintsFromField9(f9) : undefined;
47
+ }
48
+ catch {
49
+ return undefined;
50
+ }
51
+ finally {
52
+ db?.close();
53
+ }
54
+ }
55
+ function applyTokensToTurn(turn, tokens) {
56
+ if (!tokens)
57
+ return;
58
+ if (turn.cachedInputTokens === undefined && tokens.cachedTokens !== undefined) {
59
+ turn.cachedInputTokens = tokens.cachedTokens;
60
+ }
61
+ if (turn.outputTokens === undefined && tokens.candidateTokens !== undefined) {
62
+ turn.outputTokens = tokens.candidateTokens;
63
+ }
64
+ if (tokens.promptTokens !== undefined) {
65
+ const totalInput = tokens.promptTokens + (tokens.cachedTokens ?? 0);
66
+ if (turn.inputTokens === undefined || turn.inputTokens < totalInput) {
67
+ turn.inputTokens = totalInput;
68
+ }
69
+ }
70
+ }
71
+ function buildToolSpan(turn, tool, endTimeUnixNano, isError, errorMessage) {
72
+ const toolAttrs = {
73
+ "gen_ai.tool.name": tool.toolName,
74
+ "gen_ai.tool.call.id": tool.toolCallId,
75
+ };
76
+ if (tool.command && tool.command !== tool.toolName) {
77
+ toolAttrs["tool.command"] = tool.command;
78
+ }
79
+ return {
80
+ traceId: turn.traceId,
81
+ spanId: tool.spanId,
82
+ parentSpanId: turn.spanId,
83
+ name: `execute_tool ${tool.toolName}`,
84
+ kind: SPAN_KIND.INTERNAL,
85
+ startTimeUnixNano: tool.startTimeUnixNano,
86
+ endTimeUnixNano,
87
+ attributes: toOtelKeyValues(toolAttrs),
88
+ status: {
89
+ code: isError ? STATUS_CODE.ERROR : STATUS_CODE.OK,
90
+ ...(isError && errorMessage ? { message: errorMessage } : {}),
91
+ },
92
+ };
93
+ }
94
+ function closeRemainingTools(turn, endTimeUnixNano, isError) {
95
+ for (const tool of turn.toolCalls.values()) {
96
+ turn.orderedCompletedTools.push(buildToolSpan(turn, tool, endTimeUnixNano, isError));
97
+ }
98
+ turn.toolCalls.clear();
99
+ }
100
+ function determineTurnStatus(options) {
101
+ const isErr = Boolean(options?.isError || options?.stopReason === "cancelled");
102
+ const stopReason = options?.stopReason ?? (isErr ? "error" : "end_turn");
103
+ return { stopReason, isError: isErr };
104
+ }
105
+ function buildTurnSpan(turn, endTimeUnixNano, stopReason, isError, errorMessage) {
106
+ const spanAttributes = {
107
+ "gen_ai.operation.name": "chat",
108
+ "gen_ai.request.model": turn.model,
109
+ "gen_ai.provider.name": "gcp.gemini",
110
+ "gen_ai.conversation.id": turn.sessionId,
111
+ "gen_ai.response.finish_reasons": [stopReason],
112
+ };
113
+ if (turn.inputTokens !== undefined) {
114
+ spanAttributes["gen_ai.usage.input_tokens"] = turn.inputTokens;
115
+ }
116
+ if (turn.outputTokens !== undefined) {
117
+ spanAttributes["gen_ai.usage.output_tokens"] = turn.outputTokens;
118
+ }
119
+ if (turn.cachedInputTokens !== undefined) {
120
+ spanAttributes["gen_ai.usage.cache_read.input_tokens"] = turn.cachedInputTokens;
121
+ }
122
+ return {
123
+ traceId: turn.traceId,
124
+ spanId: turn.spanId,
125
+ name: `chat ${turn.model}`,
126
+ kind: SPAN_KIND.CLIENT,
127
+ startTimeUnixNano: turn.startTimeUnixNano,
128
+ endTimeUnixNano,
129
+ attributes: toOtelKeyValues(spanAttributes),
130
+ status: {
131
+ code: isError ? STATUS_CODE.ERROR : STATUS_CODE.OK,
132
+ ...(isError ? { message: errorMessage || stopReason } : {}),
133
+ },
134
+ };
135
+ }
136
+ export class SessionTurnTracker {
137
+ config;
138
+ exporter;
139
+ sessionModels = new Map();
140
+ activeTurnsBySession = new Map();
141
+ activeTurnsByPromptId = new Map();
142
+ constructor(config, exporter) {
143
+ this.config = config;
144
+ this.exporter = exporter;
145
+ }
146
+ getModel(sessionId) {
147
+ return this.sessionModels.get(sessionId) || "gemini-3.8-flash";
148
+ }
149
+ setModel(sessionId, model) {
150
+ if (model && typeof model === "string") {
151
+ this.sessionModels.set(sessionId, model);
152
+ }
153
+ }
154
+ formatPromptText(prompt) {
155
+ const rawText = typeof prompt === "string"
156
+ ? prompt
157
+ : Array.isArray(prompt)
158
+ ? prompt
159
+ .map((item) => {
160
+ if (!item || typeof item !== "object")
161
+ return "";
162
+ if (item.type === "text" && typeof item.text === "string") {
163
+ return item.text;
164
+ }
165
+ return `[${item.type || "content"}]`;
166
+ })
167
+ .filter(Boolean)
168
+ .join("\n")
169
+ : String(prompt ?? "");
170
+ return stripSystemContext(rawText).trim();
171
+ }
172
+ startTurn(sessionId, promptRequestId, rawPrompt) {
173
+ const model = this.getModel(sessionId);
174
+ const traceId = generateTraceId();
175
+ const spanId = generateSpanId();
176
+ const startTimeUnixNano = nowUnixNano();
177
+ const rawPromptText = this.formatPromptText(rawPrompt);
178
+ const turn = {
179
+ promptRequestId,
180
+ sessionId,
181
+ model,
182
+ traceId,
183
+ spanId,
184
+ startTimeUnixNano,
185
+ rawPromptText,
186
+ responseChunks: [],
187
+ toolCalls: new Map(),
188
+ orderedCompletedTools: [],
189
+ };
190
+ this.activeTurnsBySession.set(sessionId, turn);
191
+ this.activeTurnsByPromptId.set(promptRequestId, turn);
192
+ this.emitUserPromptLog(turn);
193
+ return turn;
194
+ }
195
+ emitUserPromptLog(turn) {
196
+ const rawLen = turn.rawPromptText.length;
197
+ const { text: truncatedPrompt } = truncateUtf8(turn.rawPromptText);
198
+ const attributes = {
199
+ "event.name": "agy.user_prompt",
200
+ prompt_length: rawLen,
201
+ "gen_ai.conversation.id": turn.sessionId,
202
+ "gen_ai.request.model": turn.model,
203
+ "gen_ai.provider.name": "gcp.gemini",
204
+ };
205
+ if (this.config.logUserPrompts) {
206
+ attributes.prompt = truncatedPrompt;
207
+ }
208
+ const logRecord = {
209
+ timeUnixNano: turn.startTimeUnixNano,
210
+ observedTimeUnixNano: turn.startTimeUnixNano,
211
+ severityNumber: 9,
212
+ severityText: "INFO",
213
+ body: { stringValue: "agy.user_prompt" },
214
+ attributes: toOtelKeyValues(attributes),
215
+ traceId: turn.traceId,
216
+ spanId: turn.spanId,
217
+ };
218
+ this.exporter.exportLogs([logRecord]);
219
+ }
220
+ appendResponseChunk(sessionId, text) {
221
+ const turn = this.activeTurnsBySession.get(sessionId);
222
+ if (!turn)
223
+ return;
224
+ turn.responseChunks.push(text);
225
+ }
226
+ recordToolCall(sessionId, toolCallId, toolName, command) {
227
+ const turn = this.activeTurnsBySession.get(sessionId);
228
+ if (!turn)
229
+ return;
230
+ if (!turn.toolCalls.has(toolCallId)) {
231
+ turn.toolCalls.set(toolCallId, {
232
+ toolCallId,
233
+ toolName: toolName || "tool",
234
+ command,
235
+ spanId: generateSpanId(),
236
+ startTimeUnixNano: nowUnixNano(),
237
+ status: "in_progress",
238
+ });
239
+ }
240
+ }
241
+ updateToolCall(sessionId, toolCallId, status) {
242
+ const turn = this.activeTurnsBySession.get(sessionId);
243
+ if (!turn)
244
+ return;
245
+ const tool = turn.toolCalls.get(toolCallId);
246
+ if (!tool)
247
+ return;
248
+ const endNano = nowUnixNano();
249
+ tool.endTimeUnixNano = endNano;
250
+ const isFailure = status === "failed";
251
+ tool.status = isFailure ? "failed" : "completed";
252
+ turn.orderedCompletedTools.push(buildToolSpan(turn, tool, endNano, isFailure, isFailure ? "tool call failed" : undefined));
253
+ turn.toolCalls.delete(toolCallId);
254
+ }
255
+ recordUsageUpdate(sessionId, used, _size) {
256
+ const turn = this.activeTurnsBySession.get(sessionId);
257
+ if (!turn)
258
+ return;
259
+ if (typeof used === "number" && turn.inputTokens === undefined) {
260
+ turn.inputTokens = used;
261
+ }
262
+ }
263
+ recordExplicitUsage(sessionId, usage) {
264
+ const turn = this.activeTurnsBySession.get(sessionId);
265
+ if (!turn)
266
+ return;
267
+ if (typeof usage.inputTokens === "number")
268
+ turn.inputTokens = usage.inputTokens;
269
+ if (typeof usage.outputTokens === "number")
270
+ turn.outputTokens = usage.outputTokens;
271
+ if (typeof usage.cachedTokens === "number")
272
+ turn.cachedInputTokens = usage.cachedTokens;
273
+ }
274
+ reconcileTokens(turn, sessionId, customDbPath) {
275
+ if (turn.inputTokens !== undefined &&
276
+ turn.outputTokens !== undefined &&
277
+ turn.cachedInputTokens !== undefined) {
278
+ return;
279
+ }
280
+ const dbPath = customDbPath ?? getConversationDbPath(sessionId);
281
+ applyTokensToTurn(turn, readTokensFromDb(dbPath));
282
+ if (turn.inputTokens === undefined ||
283
+ turn.outputTokens === undefined ||
284
+ turn.cachedInputTokens === undefined) {
285
+ applyTokensToTurn(turn, this.extractDatabaseUsage(sessionId, customDbPath) ?? undefined);
286
+ }
287
+ }
288
+ resolveActiveTurn(sessionId, promptRequestId) {
289
+ if (promptRequestId !== undefined) {
290
+ const turn = this.activeTurnsByPromptId.get(promptRequestId);
291
+ if (turn)
292
+ return turn;
293
+ }
294
+ return this.activeTurnsBySession.get(sessionId);
295
+ }
296
+ finishTurn(sessionId, options) {
297
+ const turn = this.resolveActiveTurn(sessionId, options?.promptRequestId);
298
+ if (!turn)
299
+ return;
300
+ this.activeTurnsBySession.delete(sessionId);
301
+ this.activeTurnsByPromptId.delete(turn.promptRequestId);
302
+ const endTimeUnixNano = nowUnixNano();
303
+ const { stopReason, isError } = determineTurnStatus(options);
304
+ closeRemainingTools(turn, endTimeUnixNano, isError);
305
+ this.reconcileTokens(turn, sessionId, options?.customDbPath);
306
+ this.emitAgentResponseLog(turn, endTimeUnixNano);
307
+ const turnSpan = buildTurnSpan(turn, endTimeUnixNano, stopReason, isError, options?.errorMessage);
308
+ this.exporter.exportSpans([turnSpan, ...turn.orderedCompletedTools]);
309
+ }
310
+ emitAgentResponseLog(turn, timeUnixNano) {
311
+ const rawResponse = turn.responseChunks.join("");
312
+ const rawLen = rawResponse.length;
313
+ const { text: truncatedResponse, truncated } = truncateUtf8(rawResponse);
314
+ const attributes = {
315
+ "event.name": "agy.agent_response",
316
+ response_length: rawLen,
317
+ response_truncated: truncated,
318
+ "gen_ai.conversation.id": turn.sessionId,
319
+ "gen_ai.request.model": turn.model,
320
+ "gen_ai.provider.name": "gcp.gemini",
321
+ };
322
+ if (this.config.logAssistantResponses) {
323
+ attributes.response = truncatedResponse;
324
+ }
325
+ const logRecord = {
326
+ timeUnixNano,
327
+ observedTimeUnixNano: timeUnixNano,
328
+ severityNumber: 9,
329
+ severityText: "INFO",
330
+ body: { stringValue: "agy.agent_response" },
331
+ attributes: toOtelKeyValues(attributes),
332
+ traceId: turn.traceId,
333
+ spanId: turn.spanId,
334
+ };
335
+ this.exporter.exportLogs([logRecord]);
336
+ }
337
+ extractDatabaseUsage(sessionId, customDbPath) {
338
+ try {
339
+ const usage = getLatestSessionUsage(sessionId, customDbPath);
340
+ if (!usage)
341
+ return null;
342
+ if (usage.cachedTokens !== undefined)
343
+ return usage;
344
+ const dbPath = customDbPath ?? getConversationDbPath(sessionId);
345
+ const dbTokens = readTokensFromDb(dbPath);
346
+ return {
347
+ ...usage,
348
+ ...(dbTokens?.cachedTokens !== undefined ? { cachedTokens: dbTokens.cachedTokens } : {}),
349
+ };
350
+ }
351
+ catch {
352
+ return null;
353
+ }
354
+ }
355
+ hasActiveTurn(sessionId) {
356
+ return this.activeTurnsBySession.has(sessionId);
357
+ }
358
+ }
359
+ //# sourceMappingURL=tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../../src/otel/tracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * OpenTelemetry OTLP JSON data types and builder helpers.
3
+ * Conforms to OpenTelemetry v1 Resource, Span, and Log Record schemas.
4
+ */
5
+ export type OtelAnyValue = {
6
+ stringValue: string;
7
+ } | {
8
+ boolValue: boolean;
9
+ } | {
10
+ intValue: string | number;
11
+ } | {
12
+ doubleValue: number;
13
+ } | {
14
+ arrayValue: {
15
+ values: OtelAnyValue[];
16
+ };
17
+ } | {
18
+ kvlistValue: {
19
+ values: OtelKeyValue[];
20
+ };
21
+ };
22
+ export interface OtelKeyValue {
23
+ key: string;
24
+ value: OtelAnyValue;
25
+ }
26
+ export declare function toOtelValue(value: unknown): OtelAnyValue;
27
+ export declare function toOtelKeyValues(record: Record<string, unknown>): OtelKeyValue[];
28
+ export declare const SPAN_KIND: {
29
+ readonly UNSPECIFIED: 0;
30
+ readonly INTERNAL: 1;
31
+ readonly SERVER: 2;
32
+ readonly CLIENT: 3;
33
+ readonly PRODUCER: 4;
34
+ readonly CONSUMER: 5;
35
+ };
36
+ export declare const STATUS_CODE: {
37
+ readonly UNSET: 0;
38
+ readonly OK: 1;
39
+ readonly ERROR: 2;
40
+ };
41
+ export interface OtelSpan {
42
+ traceId: string;
43
+ spanId: string;
44
+ parentSpanId?: string;
45
+ name: string;
46
+ kind: number;
47
+ startTimeUnixNano: string;
48
+ endTimeUnixNano: string;
49
+ attributes: OtelKeyValue[];
50
+ status?: {
51
+ code: number;
52
+ message?: string;
53
+ };
54
+ }
55
+ export interface ExportTraceServiceRequest {
56
+ resourceSpans: Array<{
57
+ resource: {
58
+ attributes: OtelKeyValue[];
59
+ };
60
+ scopeSpans: Array<{
61
+ scope: {
62
+ name: string;
63
+ version?: string;
64
+ };
65
+ spans: OtelSpan[];
66
+ }>;
67
+ }>;
68
+ }
69
+ export interface OtelLogRecord {
70
+ timeUnixNano: string;
71
+ observedTimeUnixNano?: string;
72
+ severityNumber?: number;
73
+ severityText?: string;
74
+ body?: OtelAnyValue;
75
+ attributes: OtelKeyValue[];
76
+ traceId?: string;
77
+ spanId?: string;
78
+ }
79
+ export interface ExportLogsServiceRequest {
80
+ resourceLogs: Array<{
81
+ resource: {
82
+ attributes: OtelKeyValue[];
83
+ };
84
+ scopeLogs: Array<{
85
+ scope: {
86
+ name: string;
87
+ version?: string;
88
+ };
89
+ logRecords: OtelLogRecord[];
90
+ }>;
91
+ }>;
92
+ }
93
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/otel/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,YAAY,GACpB;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,GACvB;IAAE,SAAS,EAAE,OAAO,CAAA;CAAE,GACtB;IAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,GAC7B;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,GACvB;IAAE,UAAU,EAAE;QAAE,MAAM,EAAE,YAAY,EAAE,CAAA;KAAE,CAAA;CAAE,GAC1C;IAAE,WAAW,EAAE;QAAE,MAAM,EAAE,YAAY,EAAE,CAAA;KAAE,CAAA;CAAE,CAAC;AAEhD,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,YAAY,CAAC;CACrB;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CAkBxD;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,EAAE,CAQ/E;AAED,eAAO,MAAM,SAAS;aACpB,WAAW,EAAE,CAAC;aACd,QAAQ,EAAE,CAAC;aACX,MAAM,EAAE,CAAC;aACT,MAAM,EAAE,CAAC;aACT,QAAQ,EAAE,CAAC;aACX,QAAQ,EAAE,CAAC;CACH,CAAC;AAEX,eAAO,MAAM,WAAW;aACtB,KAAK,EAAE,CAAC;aACR,EAAE,EAAE,CAAC;aACL,KAAK,EAAE,CAAC;CACA,CAAC;AAEX,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,yBAAyB;IACxC,aAAa,EAAE,KAAK,CAAC;QACnB,QAAQ,EAAE;YACR,UAAU,EAAE,YAAY,EAAE,CAAC;SAC5B,CAAC;QACF,UAAU,EAAE,KAAK,CAAC;YAChB,KAAK,EAAE;gBACL,IAAI,EAAE,MAAM,CAAC;gBACb,OAAO,CAAC,EAAE,MAAM,CAAC;aAClB,CAAC;YACF,KAAK,EAAE,QAAQ,EAAE,CAAC;SACnB,CAAC,CAAC;KACJ,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,wBAAwB;IACvC,YAAY,EAAE,KAAK,CAAC;QAClB,QAAQ,EAAE;YACR,UAAU,EAAE,YAAY,EAAE,CAAC;SAC5B,CAAC;QACF,SAAS,EAAE,KAAK,CAAC;YACf,KAAK,EAAE;gBACL,IAAI,EAAE,MAAM,CAAC;gBACb,OAAO,CAAC,EAAE,MAAM,CAAC;aAClB,CAAC;YACF,UAAU,EAAE,aAAa,EAAE,CAAC;SAC7B,CAAC,CAAC;KACJ,CAAC,CAAC;CACJ"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * OpenTelemetry OTLP JSON data types and builder helpers.
3
+ * Conforms to OpenTelemetry v1 Resource, Span, and Log Record schemas.
4
+ */
5
+ export function toOtelValue(value) {
6
+ if (typeof value === "string")
7
+ return { stringValue: value };
8
+ if (typeof value === "boolean")
9
+ return { boolValue: value };
10
+ if (typeof value === "number") {
11
+ if (Number.isInteger(value))
12
+ return { intValue: value };
13
+ return { doubleValue: value };
14
+ }
15
+ if (Array.isArray(value)) {
16
+ return { arrayValue: { values: value.map(toOtelValue) } };
17
+ }
18
+ if (value && typeof value === "object") {
19
+ const entries = Object.entries(value).map(([k, v]) => ({
20
+ key: k,
21
+ value: toOtelValue(v),
22
+ }));
23
+ return { kvlistValue: { values: entries } };
24
+ }
25
+ return { stringValue: String(value ?? "") };
26
+ }
27
+ export function toOtelKeyValues(record) {
28
+ const result = [];
29
+ for (const [key, value] of Object.entries(record)) {
30
+ if (value !== undefined) {
31
+ result.push({ key, value: toOtelValue(value) });
32
+ }
33
+ }
34
+ return result;
35
+ }
36
+ export const SPAN_KIND = {
37
+ UNSPECIFIED: 0,
38
+ INTERNAL: 1,
39
+ SERVER: 2,
40
+ CLIENT: 3,
41
+ PRODUCER: 4,
42
+ CONSUMER: 5,
43
+ };
44
+ export const STATUS_CODE = {
45
+ UNSET: 0,
46
+ OK: 1,
47
+ ERROR: 2,
48
+ };
49
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/otel/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAeH,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IAC7D,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC5D,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QACxD,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IAChC,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC;IAC5D,CAAC;IACD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACrD,GAAG,EAAE,CAAC;YACN,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;SACtB,CAAC,CAAC,CAAC;QACJ,OAAO,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;IAC9C,CAAC;IACD,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAA+B;IAC7D,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,WAAW,EAAE,CAAC;IACd,QAAQ,EAAE,CAAC;IACX,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,CAAC;IACT,QAAQ,EAAE,CAAC;IACX,QAAQ,EAAE,CAAC;CACH,CAAC;AAEX,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,KAAK,EAAE,CAAC;IACR,EAAE,EAAE,CAAC;IACL,KAAK,EAAE,CAAC;CACA,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Utilities for UTF-8 boundary-safe truncation of text.
3
+ */
4
+ export declare const MAX_OTEL_TEXT_BYTES: number;
5
+ export interface TruncationResult {
6
+ text: string;
7
+ truncated: boolean;
8
+ byteLength: number;
9
+ }
10
+ /**
11
+ * Truncates a string so that its UTF-8 byte length does not exceed `maxBytes`,
12
+ * guaranteeing that it never slices in the middle of a multi-byte UTF-8 sequence.
13
+ */
14
+ export declare function truncateUtf8(str: string, maxBytes?: number): TruncationResult;
15
+ //# sourceMappingURL=utf8.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utf8.d.ts","sourceRoot":"","sources":["../../../src/otel/utf8.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,mBAAmB,QAAY,CAAC;AAE7C,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,EACX,QAAQ,GAAE,MAA4B,GACrC,gBAAgB,CAuClB"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Utilities for UTF-8 boundary-safe truncation of text.
3
+ */
4
+ export const MAX_OTEL_TEXT_BYTES = 64 * 1024; // 64 KiB = 65,536 bytes
5
+ /**
6
+ * Truncates a string so that its UTF-8 byte length does not exceed `maxBytes`,
7
+ * guaranteeing that it never slices in the middle of a multi-byte UTF-8 sequence.
8
+ */
9
+ export function truncateUtf8(str, maxBytes = MAX_OTEL_TEXT_BYTES) {
10
+ const buf = Buffer.from(str, "utf-8");
11
+ if (buf.length <= maxBytes) {
12
+ return {
13
+ text: str,
14
+ truncated: false,
15
+ byteLength: buf.length,
16
+ };
17
+ }
18
+ // Find the last valid character boundary at or before maxBytes
19
+ let end = maxBytes;
20
+ // While buf[end] is a continuation byte (0x80..0xBF), step backwards
21
+ while (end > 0 && (buf[end] & 0xc0) === 0x80) {
22
+ end--;
23
+ }
24
+ // If we found a byte > 0, inspect if it is a lead byte whose multi-byte sequence
25
+ // exceeds maxBytes
26
+ if (end > 0) {
27
+ const lead = buf[end];
28
+ let seqLen = 1;
29
+ if ((lead & 0xe0) === 0xc0)
30
+ seqLen = 2;
31
+ else if ((lead & 0xf0) === 0xe0)
32
+ seqLen = 3;
33
+ else if ((lead & 0xf8) === 0xf0)
34
+ seqLen = 4;
35
+ if (end + seqLen > maxBytes) {
36
+ // The sequence is cut off; do not include the partial lead byte
37
+ }
38
+ else {
39
+ end += seqLen;
40
+ }
41
+ }
42
+ const truncatedBuffer = buf.subarray(0, end);
43
+ return {
44
+ text: truncatedBuffer.toString("utf-8"),
45
+ truncated: true,
46
+ byteLength: truncatedBuffer.length,
47
+ };
48
+ }
49
+ //# sourceMappingURL=utf8.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utf8.js","sourceRoot":"","sources":["../../../src/otel/utf8.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,wBAAwB;AAQtE;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,GAAW,EACX,QAAQ,GAAW,mBAAmB;IAEtC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACtC,IAAI,GAAG,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC3B,OAAO;YACL,IAAI,EAAE,GAAG;YACT,SAAS,EAAE,KAAK;YAChB,UAAU,EAAE,GAAG,CAAC,MAAM;SACvB,CAAC;IACJ,CAAC;IAED,+DAA+D;IAC/D,IAAI,GAAG,GAAG,QAAQ,CAAC;IACnB,qEAAqE;IACrE,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAE,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAC9C,GAAG,EAAE,CAAC;IACR,CAAC;IAED,iFAAiF;IACjF,mBAAmB;IACnB,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAE,CAAC;QACvB,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,IAAI;YAAE,MAAM,GAAG,CAAC,CAAC;aAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,IAAI;YAAE,MAAM,GAAG,CAAC,CAAC;aACvC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,IAAI;YAAE,MAAM,GAAG,CAAC,CAAC;QAE5C,IAAI,GAAG,GAAG,MAAM,GAAG,QAAQ,EAAE,CAAC;YAC5B,gEAAgE;QAClE,CAAC;aAAM,CAAC;YACN,GAAG,IAAI,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED,MAAM,eAAe,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC7C,OAAO;QACL,IAAI,EAAE,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC;QACvC,SAAS,EAAE,IAAI;QACf,UAAU,EAAE,eAAe,CAAC,MAAM;KACnC,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@simonepri/refined-antigravity-acp",
3
- "version": "1.5.0",
3
+ "version": "1.6.1",
4
4
  "description": "🤦 A Google Antigravity ACP binary that actually works.",
5
5
  "keywords": [
6
6
  "acp",