@simonepri/refined-antigravity-acp 1.4.2 → 1.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 (80) hide show
  1. package/dist/src/core/command.d.ts +1 -1
  2. package/dist/src/core/command.d.ts.map +1 -1
  3. package/dist/src/core/command.js +2 -1
  4. package/dist/src/core/command.js.map +1 -1
  5. package/dist/src/core/pipeline.d.ts.map +1 -1
  6. package/dist/src/core/pipeline.js.map +1 -1
  7. package/dist/src/core/supervisor.d.ts +1 -0
  8. package/dist/src/core/supervisor.d.ts.map +1 -1
  9. package/dist/src/core/supervisor.js +19 -3
  10. package/dist/src/core/supervisor.js.map +1 -1
  11. package/dist/src/core/telemetry.d.ts.map +1 -1
  12. package/dist/src/core/types.d.ts.map +1 -1
  13. package/dist/src/fixes/active-turn-collision/index.d.ts +1 -0
  14. package/dist/src/fixes/active-turn-collision/index.d.ts.map +1 -1
  15. package/dist/src/fixes/active-turn-collision/index.js +11 -10
  16. package/dist/src/fixes/active-turn-collision/index.js.map +1 -1
  17. package/dist/src/fixes/dangling-tool-calls/index.d.ts.map +1 -1
  18. package/dist/src/fixes/flattened-model-efforts/index.d.ts.map +1 -1
  19. package/dist/src/fixes/flattened-model-efforts/index.js +15 -2
  20. package/dist/src/fixes/flattened-model-efforts/index.js.map +1 -1
  21. package/dist/src/fixes/gated-third-party-models/index.d.ts +25 -0
  22. package/dist/src/fixes/gated-third-party-models/index.d.ts.map +1 -0
  23. package/dist/src/fixes/gated-third-party-models/index.js +55 -0
  24. package/dist/src/fixes/gated-third-party-models/index.js.map +1 -0
  25. package/dist/src/fixes/index.d.ts +2 -0
  26. package/dist/src/fixes/index.d.ts.map +1 -1
  27. package/dist/src/fixes/index.js +7 -1
  28. package/dist/src/fixes/index.js.map +1 -1
  29. package/dist/src/fixes/malformed-stream-syntax/index.d.ts +10 -0
  30. package/dist/src/fixes/malformed-stream-syntax/index.d.ts.map +1 -1
  31. package/dist/src/fixes/malformed-stream-syntax/index.js +157 -36
  32. package/dist/src/fixes/malformed-stream-syntax/index.js.map +1 -1
  33. package/dist/src/fixes/missing-question-fallback/index.d.ts.map +1 -1
  34. package/dist/src/fixes/missing-question-fallback/index.js +22 -10
  35. package/dist/src/fixes/missing-question-fallback/index.js.map +1 -1
  36. package/dist/src/fixes/missing-slash-skills/index.d.ts.map +1 -1
  37. package/dist/src/fixes/missing-slash-skills/index.js +24 -2
  38. package/dist/src/fixes/missing-slash-skills/index.js.map +1 -1
  39. package/dist/src/fixes/missing-system-prompt/index.js.map +1 -1
  40. package/dist/src/fixes/premature-turn-stop/index.d.ts.map +1 -1
  41. package/dist/src/fixes/premature-turn-stop/index.js.map +1 -1
  42. package/dist/src/fixes/repetitive-tool-loop/index.d.ts.map +1 -1
  43. package/dist/src/fixes/repetitive-tool-loop/index.js.map +1 -1
  44. package/dist/src/fixes/silent-background-tasks/index.d.ts.map +1 -1
  45. package/dist/src/fixes/silent-background-tasks/index.js.map +1 -1
  46. package/dist/src/fixes/stale-mcp-endpoints/index.d.ts.map +1 -1
  47. package/dist/src/fixes/stale-mcp-endpoints/index.js.map +1 -1
  48. package/dist/src/fixes/subagent-hang/subagent-hang.d.ts.map +1 -1
  49. package/dist/src/index.js.map +1 -1
  50. package/dist/src/otel/config.d.ts +19 -0
  51. package/dist/src/otel/config.d.ts.map +1 -0
  52. package/dist/src/otel/config.js +121 -0
  53. package/dist/src/otel/config.js.map +1 -0
  54. package/dist/src/otel/exporter.d.ts +25 -0
  55. package/dist/src/otel/exporter.d.ts.map +1 -0
  56. package/dist/src/otel/exporter.js +102 -0
  57. package/dist/src/otel/exporter.js.map +1 -0
  58. package/dist/src/otel/fix.d.ts +24 -0
  59. package/dist/src/otel/fix.d.ts.map +1 -0
  60. package/dist/src/otel/fix.js +170 -0
  61. package/dist/src/otel/fix.js.map +1 -0
  62. package/dist/src/otel/index.d.ts +10 -0
  63. package/dist/src/otel/index.d.ts.map +1 -0
  64. package/dist/src/otel/index.js +10 -0
  65. package/dist/src/otel/index.js.map +1 -0
  66. package/dist/src/otel/tracker.d.ts +73 -0
  67. package/dist/src/otel/tracker.d.ts.map +1 -0
  68. package/dist/src/otel/tracker.js +339 -0
  69. package/dist/src/otel/tracker.js.map +1 -0
  70. package/dist/src/otel/types.d.ts +93 -0
  71. package/dist/src/otel/types.d.ts.map +1 -0
  72. package/dist/src/otel/types.js +49 -0
  73. package/dist/src/otel/types.js.map +1 -0
  74. package/dist/src/otel/utf8.d.ts +15 -0
  75. package/dist/src/otel/utf8.d.ts.map +1 -0
  76. package/dist/src/otel/utf8.js +49 -0
  77. package/dist/src/otel/utf8.js.map +1 -0
  78. package/dist/src/setup.js.map +1 -1
  79. package/package.json +4 -4
  80. package/readme.md +51 -31
@@ -0,0 +1,121 @@
1
+ /**
2
+ * OpenTelemetry environment variable parsing and configuration.
3
+ */
4
+ export function parseHeaderString(headerStr) {
5
+ const headers = {};
6
+ if (!headerStr)
7
+ return headers;
8
+ for (const pair of headerStr.split(",")) {
9
+ const trimmed = pair.trim();
10
+ if (!trimmed)
11
+ continue;
12
+ const eqIdx = trimmed.indexOf("=");
13
+ if (eqIdx !== -1) {
14
+ const key = trimmed.slice(0, eqIdx).trim();
15
+ const val = trimmed.slice(eqIdx + 1).trim();
16
+ if (key) {
17
+ try {
18
+ headers[key] = decodeURIComponent(val);
19
+ }
20
+ catch {
21
+ headers[key] = val;
22
+ }
23
+ }
24
+ }
25
+ }
26
+ return headers;
27
+ }
28
+ export function parseResourceAttributes(attrStr) {
29
+ const attrs = {};
30
+ if (!attrStr)
31
+ return attrs;
32
+ for (const pair of attrStr.split(",")) {
33
+ const trimmed = pair.trim();
34
+ if (!trimmed)
35
+ continue;
36
+ const eqIdx = trimmed.indexOf("=");
37
+ if (eqIdx !== -1) {
38
+ const key = trimmed.slice(0, eqIdx).trim();
39
+ const val = trimmed.slice(eqIdx + 1).trim();
40
+ if (key)
41
+ attrs[key] = val;
42
+ }
43
+ }
44
+ return attrs;
45
+ }
46
+ function resolveEndpoint(explicitEndpoint, baseEndpoint, signalPath, signalExporter) {
47
+ if (explicitEndpoint && explicitEndpoint.trim()) {
48
+ return explicitEndpoint.trim();
49
+ }
50
+ if (baseEndpoint && baseEndpoint.trim()) {
51
+ const trimmed = baseEndpoint.trim();
52
+ if (trimmed.endsWith(signalPath))
53
+ return trimmed;
54
+ return `${trimmed.replace(/\/+$/, "")}${signalPath}`;
55
+ }
56
+ if (signalExporter === "otlp") {
57
+ return `http://localhost:4318${signalPath}`;
58
+ }
59
+ return undefined;
60
+ }
61
+ function parseProtocol(raw) {
62
+ const normalized = raw?.trim().toLowerCase();
63
+ if (normalized === "http/protobuf" || normalized === "grpc") {
64
+ return normalized;
65
+ }
66
+ return "http/json";
67
+ }
68
+ function buildOptedInConfig(env, baseEndpoint) {
69
+ const serviceName = env.OTEL_SERVICE_NAME?.trim() ||
70
+ parseResourceAttributes(env.OTEL_RESOURCE_ATTRIBUTES)["service.name"] ||
71
+ "refined-antigravity-acp";
72
+ const resourceAttributes = {
73
+ ...parseResourceAttributes(env.OTEL_RESOURCE_ATTRIBUTES),
74
+ "service.name": serviceName,
75
+ };
76
+ const baseHeaders = parseHeaderString(env.OTEL_EXPORTER_OTLP_HEADERS);
77
+ const tracesHeaders = {
78
+ ...baseHeaders,
79
+ ...parseHeaderString(env.OTEL_EXPORTER_OTLP_TRACES_HEADERS),
80
+ };
81
+ const logsHeaders = { ...baseHeaders, ...parseHeaderString(env.OTEL_EXPORTER_OTLP_LOGS_HEADERS) };
82
+ const tracesExporter = env.OTEL_TRACES_EXPORTER?.trim().toLowerCase();
83
+ const logsExporter = env.OTEL_LOGS_EXPORTER?.trim().toLowerCase();
84
+ return {
85
+ enabled: true,
86
+ serviceName,
87
+ resourceAttributes,
88
+ tracesEndpoint: resolveEndpoint(env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT, baseEndpoint, "/v1/traces", tracesExporter),
89
+ logsEndpoint: resolveEndpoint(env.OTEL_EXPORTER_OTLP_LOGS_ENDPOINT, baseEndpoint, "/v1/logs", logsExporter),
90
+ protocol: parseProtocol(env.OTEL_EXPORTER_OTLP_PROTOCOL),
91
+ tracesHeaders,
92
+ logsHeaders,
93
+ logUserPrompts: env.OTEL_LOG_USER_PROMPTS === "1",
94
+ logAssistantResponses: env.OTEL_LOG_ASSISTANT_RESPONSES === "1",
95
+ };
96
+ }
97
+ function checkIsOptedIn(env) {
98
+ const endpoint = env.OTEL_EXPORTER_OTLP_ENDPOINT || "";
99
+ const traces = env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT || env.OTEL_TRACES_EXPORTER || "";
100
+ const logs = env.OTEL_EXPORTER_OTLP_LOGS_ENDPOINT || env.OTEL_LOGS_EXPORTER || "";
101
+ return Boolean(endpoint.trim() || traces.trim() || logs.trim());
102
+ }
103
+ export function getOtelConfig(env = process.env) {
104
+ if (env.OTEL_SDK_DISABLED === "true" || !checkIsOptedIn(env)) {
105
+ return createDisabledConfig();
106
+ }
107
+ return buildOptedInConfig(env, env.OTEL_EXPORTER_OTLP_ENDPOINT?.trim());
108
+ }
109
+ function createDisabledConfig() {
110
+ return {
111
+ enabled: false,
112
+ serviceName: "refined-antigravity-acp",
113
+ resourceAttributes: {},
114
+ protocol: "http/json",
115
+ tracesHeaders: {},
116
+ logsHeaders: {},
117
+ logUserPrompts: false,
118
+ logAssistantResponses: false,
119
+ };
120
+ }
121
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/otel/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Zero-dependency OpenTelemetry OTLP Exporter.
3
+ * Delivers traces and logs in the background over standard OTLP/HTTP.
4
+ * Never writes to stdout. Errors are routed to stderr only behind REFINED_AGY_TRACE=1.
5
+ */
6
+ import type { OtelConfig } from "./config.js";
7
+ import { type OtelLogRecord, type OtelSpan } from "./types.js";
8
+ export interface IOtelExporter {
9
+ readonly exportSpans: (spans: OtelSpan[]) => void;
10
+ readonly exportLogs: (logs: OtelLogRecord[]) => void;
11
+ readonly flush: () => Promise<void>;
12
+ readonly shutdown: () => Promise<void>;
13
+ }
14
+ export declare class OtlpExporter implements IOtelExporter {
15
+ private readonly config;
16
+ private readonly pendingRequests;
17
+ private isShutdown;
18
+ constructor(config: OtelConfig);
19
+ exportSpans(spans: OtelSpan[]): void;
20
+ exportLogs(logs: OtelLogRecord[]): void;
21
+ private sendPayload;
22
+ flush(): Promise<void>;
23
+ shutdown(): Promise<void>;
24
+ }
25
+ //# sourceMappingURL=exporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exporter.d.ts","sourceRoot":"","sources":["../../../src/otel/exporter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,QAAQ,EACd,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,IAAI,CAAC;IAClD,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,IAAI,CAAC;IACrD,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC;AAED,qBAAa,YAAa,YAAW,aAAa;IAChD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA4B;IAC5D,OAAO,CAAC,UAAU,CAAS;IAE3B,YAAY,MAAM,EAAE,UAAU,EAE7B;IAED,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,CA6BnC;IAED,UAAU,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,IAAI,CAwBtC;IAED,OAAO,CAAC,WAAW;IAmCb,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAI3B;IAEK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAG9B;CACF"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Zero-dependency OpenTelemetry OTLP Exporter.
3
+ * Delivers traces and logs in the background over standard OTLP/HTTP.
4
+ * Never writes to stdout. Errors are routed to stderr only behind REFINED_AGY_TRACE=1.
5
+ */
6
+ import { toOtelKeyValues, } from "./types.js";
7
+ export class OtlpExporter {
8
+ config;
9
+ pendingRequests = new Set();
10
+ isShutdown = false;
11
+ constructor(config) {
12
+ this.config = config;
13
+ }
14
+ exportSpans(spans) {
15
+ if (!this.config.enabled ||
16
+ !this.config.tracesEndpoint ||
17
+ spans.length === 0 ||
18
+ this.isShutdown) {
19
+ return;
20
+ }
21
+ const payload = {
22
+ resourceSpans: [
23
+ {
24
+ resource: {
25
+ attributes: toOtelKeyValues(this.config.resourceAttributes),
26
+ },
27
+ scopeSpans: [
28
+ {
29
+ scope: {
30
+ name: this.config.serviceName,
31
+ },
32
+ spans,
33
+ },
34
+ ],
35
+ },
36
+ ],
37
+ };
38
+ this.sendPayload(this.config.tracesEndpoint, this.config.tracesHeaders, payload);
39
+ }
40
+ exportLogs(logs) {
41
+ if (!this.config.enabled || !this.config.logsEndpoint || logs.length === 0 || this.isShutdown) {
42
+ return;
43
+ }
44
+ const payload = {
45
+ resourceLogs: [
46
+ {
47
+ resource: {
48
+ attributes: toOtelKeyValues(this.config.resourceAttributes),
49
+ },
50
+ scopeLogs: [
51
+ {
52
+ scope: {
53
+ name: this.config.serviceName,
54
+ },
55
+ logRecords: logs,
56
+ },
57
+ ],
58
+ },
59
+ ],
60
+ };
61
+ this.sendPayload(this.config.logsEndpoint, this.config.logsHeaders, payload);
62
+ }
63
+ sendPayload(url, headers, payload) {
64
+ const requestPromise = (async () => {
65
+ try {
66
+ const body = JSON.stringify(payload);
67
+ const res = await fetch(url, {
68
+ method: "POST",
69
+ headers: {
70
+ "Content-Type": "application/json",
71
+ ...headers,
72
+ },
73
+ body,
74
+ signal: AbortSignal.timeout(5000),
75
+ });
76
+ if (!res.ok && process.env.REFINED_AGY_TRACE === "1") {
77
+ process.stderr.write(`[refined-antigravity-acp] OTLP exporter received HTTP ${res.status} from ${url}\n`);
78
+ }
79
+ }
80
+ catch (err) {
81
+ if (process.env.REFINED_AGY_TRACE === "1") {
82
+ const msg = err instanceof Error ? err.message : String(err);
83
+ process.stderr.write(`[refined-antigravity-acp] OTLP exporter failed to send to ${url}: ${msg}\n`);
84
+ }
85
+ }
86
+ })();
87
+ this.pendingRequests.add(requestPromise);
88
+ void requestPromise.finally(() => {
89
+ this.pendingRequests.delete(requestPromise);
90
+ });
91
+ }
92
+ async flush() {
93
+ while (this.pendingRequests.size > 0) {
94
+ await Promise.all(Array.from(this.pendingRequests));
95
+ }
96
+ }
97
+ async shutdown() {
98
+ this.isShutdown = true;
99
+ await this.flush();
100
+ }
101
+ }
102
+ //# sourceMappingURL=exporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exporter.js","sourceRoot":"","sources":["../../../src/otel/exporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * OpenTelemetry ACP Telemetry Fix.
3
+ * Listens to ACP session prompt streams and exports turn spans, tool child spans,
4
+ * and Antigravity CLI log events in the background.
5
+ */
6
+ import { type AcpFix } from "../core/types.js";
7
+ import { type OtelConfig } from "./config.js";
8
+ import { type IOtelExporter } from "./exporter.js";
9
+ import { SessionTurnTracker } from "./tracker.js";
10
+ export declare function createTelemetryFix(options?: {
11
+ config?: OtelConfig;
12
+ exporter?: IOtelExporter;
13
+ customDbPathGetter?: (sessionId: string) => string;
14
+ }): AcpFix & {
15
+ tracker: SessionTurnTracker;
16
+ exporter: IOtelExporter;
17
+ config: OtelConfig;
18
+ };
19
+ export declare const telemetryFix: AcpFix & {
20
+ tracker: SessionTurnTracker;
21
+ exporter: IOtelExporter;
22
+ config: OtelConfig;
23
+ };
24
+ //# sourceMappingURL=fix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fix.d.ts","sourceRoot":"","sources":["../../../src/otel/fix.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAOL,KAAK,MAAM,EAQZ,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAiB,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AA4KlD,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE;IAC3C,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,kBAAkB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;CACpD,GAAG,MAAM,GAAG;IAAE,OAAO,EAAE,kBAAkB,CAAC;IAAC,QAAQ,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,CA4CxF;AAED,eAAO,MAAM,YAAY;aA9CD,kBAAkB;cAAY,aAAa;YAAU,UAAU;CA8CvC,CAAC"}
@@ -0,0 +1,170 @@
1
+ /**
2
+ * OpenTelemetry ACP Telemetry Fix.
3
+ * Listens to ACP session prompt streams and exports turn spans, tool child spans,
4
+ * and Antigravity CLI log events in the background.
5
+ */
6
+ import { ACP_METHODS, SESSION_UPDATES, isJsonRpcErrorResponse, isJsonRpcRequest, isJsonRpcResponse, isJsonRpcSuccessResponse, } from "../core/types.js";
7
+ import { extractSessionId } from "../core/session-cache.js";
8
+ import { getOtelConfig } from "./config.js";
9
+ import { OtlpExporter } from "./exporter.js";
10
+ import { SessionTurnTracker } from "./tracker.js";
11
+ function handlePromptResponse(msg, sessionId, tracker, customDbPath) {
12
+ if (isJsonRpcErrorResponse(msg)) {
13
+ tracker.finishTurn(sessionId, {
14
+ promptRequestId: msg.id,
15
+ isError: true,
16
+ errorMessage: msg.error.message,
17
+ customDbPath,
18
+ });
19
+ return;
20
+ }
21
+ const resultObj = msg.result && typeof msg.result === "object" ? msg.result : {};
22
+ const stopReason = typeof resultObj.stopReason === "string" ? resultObj.stopReason : undefined;
23
+ const usage = resultObj.usage;
24
+ if (usage) {
25
+ tracker.recordExplicitUsage(sessionId, usage);
26
+ }
27
+ tracker.finishTurn(sessionId, {
28
+ promptRequestId: msg.id,
29
+ stopReason,
30
+ customDbPath,
31
+ });
32
+ }
33
+ function handleToolUpdate(update, sessionId, tracker) {
34
+ const call = update;
35
+ const callId = call.toolCallId || call.callId || call.id;
36
+ if (!callId)
37
+ return;
38
+ if (update.sessionUpdate === SESSION_UPDATES.TOOL_CALL) {
39
+ tracker.recordToolCall(sessionId, callId, call.title || call.tool || call.name || "tool");
40
+ }
41
+ else if (update.sessionUpdate === SESSION_UPDATES.TOOL_CALL_UPDATE && call.status) {
42
+ tracker.updateToolCall(sessionId, callId, call.status);
43
+ }
44
+ }
45
+ function handleNonToolUpdate(update, sessionId, tracker) {
46
+ const su = update.sessionUpdate;
47
+ if (su === SESSION_UPDATES.AGENT_MESSAGE_CHUNK) {
48
+ const text = update.content?.text;
49
+ if (typeof text === "string")
50
+ tracker.appendResponseChunk(sessionId, text);
51
+ }
52
+ else if (su === SESSION_UPDATES.USAGE_UPDATE) {
53
+ const usage = update;
54
+ if (typeof usage.used === "number")
55
+ tracker.recordUsageUpdate(sessionId, usage.used, usage.size);
56
+ }
57
+ else if (su === SESSION_UPDATES.CONFIG_OPTION_UPDATE) {
58
+ const configOpt = update;
59
+ if (configOpt.configId === "model" && typeof configOpt.value === "string") {
60
+ tracker.setModel(sessionId, configOpt.value);
61
+ }
62
+ }
63
+ }
64
+ function handleUpdate(params, tracker, customDbPathGetter) {
65
+ const { sessionId, update } = params;
66
+ if (!sessionId || !update)
67
+ return;
68
+ const su = update.sessionUpdate;
69
+ if (su === SESSION_UPDATES.TOOL_CALL || su === SESSION_UPDATES.TOOL_CALL_UPDATE) {
70
+ handleToolUpdate(update, sessionId, tracker);
71
+ }
72
+ else {
73
+ handleNonToolUpdate(update, sessionId, tracker);
74
+ }
75
+ const rawUpdate = update;
76
+ if (typeof rawUpdate.stopReason === "string") {
77
+ const customDbPath = customDbPathGetter ? customDbPathGetter(sessionId) : undefined;
78
+ tracker.finishTurn(sessionId, { stopReason: rawUpdate.stopReason, customDbPath });
79
+ }
80
+ }
81
+ function handleConfigChange(msg, sessionId, tracker) {
82
+ if (msg.method === ACP_METHODS.SESSION_SET_MODEL) {
83
+ const params = msg.params;
84
+ if (params?.modelId)
85
+ tracker.setModel(sessionId, params.modelId);
86
+ }
87
+ else if (msg.method === ACP_METHODS.SESSION_SET_CONFIG_OPTION) {
88
+ const params = msg.params;
89
+ if (params?.configId === "model" && typeof params.value === "string") {
90
+ tracker.setModel(sessionId, params.value);
91
+ }
92
+ }
93
+ }
94
+ function handleOutbound(msg, tracker, pendingPromptSessions) {
95
+ const sessionId = extractSessionId(msg);
96
+ if (!sessionId)
97
+ return;
98
+ if (msg.method === ACP_METHODS.SESSION_PROMPT) {
99
+ pendingPromptSessions.set(msg.id, sessionId);
100
+ const params = msg.params;
101
+ if (params?.prompt !== undefined) {
102
+ tracker.startTurn(sessionId, msg.id, params.prompt);
103
+ }
104
+ }
105
+ else if (msg.method === ACP_METHODS.SESSION_CANCEL) {
106
+ tracker.finishTurn(sessionId, { stopReason: "cancelled", isError: true });
107
+ }
108
+ else {
109
+ handleConfigChange(msg, sessionId, tracker);
110
+ }
111
+ }
112
+ function handleModelDiscovery(msg, sessionId, tracker) {
113
+ if (!sessionId || !isJsonRpcSuccessResponse(msg))
114
+ return;
115
+ const res = msg.result && typeof msg.result === "object"
116
+ ? msg.result
117
+ : {};
118
+ if (res.models?.currentModelId)
119
+ tracker.setModel(sessionId, res.models.currentModelId);
120
+ }
121
+ function handleResponse(msg, context, tracker, pendingPromptSessions, customDbPathGetter) {
122
+ const pendingSessionId = pendingPromptSessions.get(msg.id);
123
+ if (pendingSessionId) {
124
+ pendingPromptSessions.delete(msg.id);
125
+ const dbPath = customDbPathGetter ? customDbPathGetter(pendingSessionId) : undefined;
126
+ handlePromptResponse(msg, pendingSessionId, tracker, dbPath);
127
+ return;
128
+ }
129
+ const fallbackSessionId = context.session?.sessionId ?? extractSessionId(msg);
130
+ handleModelDiscovery(msg, fallbackSessionId, tracker);
131
+ }
132
+ export function createTelemetryFix(options) {
133
+ const config = options?.config ?? getOtelConfig();
134
+ const exporter = options?.exporter ?? new OtlpExporter(config);
135
+ const tracker = new SessionTurnTracker(config, exporter);
136
+ const pendingPromptSessions = new Map();
137
+ return {
138
+ name: "opentelemetry",
139
+ description: "Exports ACP session prompts, agent responses, tool calls, and model metrics over OpenTelemetry OTLP",
140
+ tracker,
141
+ exporter,
142
+ config,
143
+ onOutbound: (msg, _context) => {
144
+ if (!config.enabled || !isJsonRpcRequest(msg))
145
+ return msg;
146
+ if (!String(msg.id).startsWith("__refined_agy_recycle_")) {
147
+ handleOutbound(msg, tracker, pendingPromptSessions);
148
+ }
149
+ return msg;
150
+ },
151
+ onInbound: async (msg, context) => {
152
+ if (!config.enabled || context.isRecycling)
153
+ return [msg];
154
+ if (isJsonRpcResponse(msg)) {
155
+ handleResponse(msg, context, tracker, pendingPromptSessions, options?.customDbPathGetter);
156
+ }
157
+ else if ("method" in msg && msg.method === ACP_METHODS.SESSION_UPDATE && msg.params) {
158
+ handleUpdate(msg.params, tracker, options?.customDbPathGetter);
159
+ }
160
+ return [msg];
161
+ },
162
+ onRecycle: () => { },
163
+ dispose: () => {
164
+ pendingPromptSessions.clear();
165
+ void exporter.shutdown();
166
+ },
167
+ };
168
+ }
169
+ export const telemetryFix = createTelemetryFix();
170
+ //# sourceMappingURL=fix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fix.js","sourceRoot":"","sources":["../../../src/otel/fix.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * OpenTelemetry OTLP integration for Refined Antigravity ACP.
3
+ */
4
+ export * from "./types.js";
5
+ export * from "./config.js";
6
+ export * from "./utf8.js";
7
+ export * from "./exporter.js";
8
+ export * from "./tracker.js";
9
+ export * from "./fix.js";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/otel/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * OpenTelemetry OTLP integration for Refined Antigravity ACP.
3
+ */
4
+ export * from "./types.js";
5
+ export * from "./config.js";
6
+ export * from "./utf8.js";
7
+ export * from "./exporter.js";
8
+ export * from "./tracker.js";
9
+ export * from "./fix.js";
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/otel/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC"}
@@ -0,0 +1,73 @@
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 type { OtelConfig } from "./config.js";
7
+ import type { IOtelExporter } from "./exporter.js";
8
+ import { type OtelSpan } from "./types.js";
9
+ import type { PromptContentItem } from "../core/types.js";
10
+ export declare function generateTraceId(): string;
11
+ export declare function generateSpanId(): string;
12
+ export declare function nowUnixNano(): string;
13
+ export interface InFlightToolCall {
14
+ toolCallId: string;
15
+ toolName: string;
16
+ spanId: string;
17
+ startTimeUnixNano: string;
18
+ endTimeUnixNano?: string;
19
+ status: "in_progress" | "completed" | "failed";
20
+ }
21
+ export interface InFlightTurn {
22
+ promptRequestId: string | number;
23
+ sessionId: string;
24
+ model: string;
25
+ traceId: string;
26
+ spanId: string;
27
+ startTimeUnixNano: string;
28
+ rawPromptText: string;
29
+ responseChunks: string[];
30
+ toolCalls: Map<string, InFlightToolCall>;
31
+ orderedCompletedTools: OtelSpan[];
32
+ inputTokens?: number;
33
+ outputTokens?: number;
34
+ cachedInputTokens?: number;
35
+ stopReason?: string;
36
+ isError?: boolean;
37
+ errorMessage?: string;
38
+ }
39
+ export declare class SessionTurnTracker {
40
+ private readonly config;
41
+ private readonly exporter;
42
+ private readonly sessionModels;
43
+ private readonly activeTurnsBySession;
44
+ private readonly activeTurnsByPromptId;
45
+ constructor(config: OtelConfig, exporter: IOtelExporter);
46
+ getModel(sessionId: string): string;
47
+ setModel(sessionId: string, model: string): void;
48
+ formatPromptText(prompt: string | PromptContentItem[]): string;
49
+ startTurn(sessionId: string, promptRequestId: string | number, rawPrompt: string | PromptContentItem[]): InFlightTurn;
50
+ private emitUserPromptLog;
51
+ appendResponseChunk(sessionId: string, text: string): void;
52
+ recordToolCall(sessionId: string, toolCallId: string, toolName: string): void;
53
+ updateToolCall(sessionId: string, toolCallId: string, status: "completed" | "failed" | string): void;
54
+ recordUsageUpdate(sessionId: string, used: number, _size?: number): void;
55
+ recordExplicitUsage(sessionId: string, usage: {
56
+ inputTokens?: number;
57
+ outputTokens?: number;
58
+ cachedTokens?: number;
59
+ }): void;
60
+ private reconcileTokens;
61
+ private resolveActiveTurn;
62
+ finishTurn(sessionId: string, options?: {
63
+ promptRequestId?: string | number | undefined;
64
+ stopReason?: string | undefined;
65
+ isError?: boolean | undefined;
66
+ errorMessage?: string | undefined;
67
+ customDbPath?: string | undefined;
68
+ }): void;
69
+ private emitAgentResponseLog;
70
+ private extractDatabaseUsage;
71
+ hasActiveTurn(sessionId: string): boolean;
72
+ }
73
+ //# sourceMappingURL=tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../../src/otel/tracker.ts"],"names":[],"mappings":"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"}