@mondaydotcomorg/z2h-shared-utils 0.3.2 → 0.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/observability/__tests__/tracker.test.d.ts +2 -0
- package/dist/esm/observability/__tests__/tracker.test.d.ts.map +1 -0
- package/dist/esm/observability/events.d.ts +12 -2
- package/dist/esm/observability/events.d.ts.map +1 -1
- package/dist/esm/observability/events.mjs +13 -3
- package/dist/esm/observability/index.d.ts +1 -1
- package/dist/esm/observability/index.d.ts.map +1 -1
- package/dist/esm/observability/index.mjs +1 -1
- package/dist/esm/observability/tracker.d.ts.map +1 -1
- package/dist/esm/observability/tracker.mjs +4 -3
- package/dist/observability/__tests__/tracker.test.d.ts +2 -0
- package/dist/observability/__tests__/tracker.test.d.ts.map +1 -0
- package/dist/observability/events.d.ts +12 -2
- package/dist/observability/events.d.ts.map +1 -1
- package/dist/observability/events.js +13 -2
- package/dist/observability/index.d.ts +1 -1
- package/dist/observability/index.d.ts.map +1 -1
- package/dist/observability/index.js +1 -0
- package/dist/observability/tracker.d.ts.map +1 -1
- package/dist/observability/tracker.js +4 -3
- package/package.json +4 -2
- package/src/observability/__tests__/tracker.test.ts +71 -0
- package/src/observability/events.ts +13 -2
- package/src/observability/index.ts +1 -1
- package/src/observability/tracker.ts +4 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracker.test.d.ts","sourceRoot":"","sources":["../../../../src/observability/__tests__/tracker.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** BI events tracked
|
|
1
|
+
/** BI events tracked in zth-backend-runner, grouped by domain. */
|
|
2
2
|
export declare const BackendRunnerEvents: {
|
|
3
3
|
readonly invoke: {
|
|
4
4
|
readonly succeeded: "z2h_backend_invoke_succeeded";
|
|
@@ -16,7 +16,7 @@ export declare const BackendRunnerEvents: {
|
|
|
16
16
|
readonly connectDeclined: "z2h_integration_connect_declined";
|
|
17
17
|
};
|
|
18
18
|
};
|
|
19
|
-
/** Metric names emitted by `bigbrain-zth
|
|
19
|
+
/** Metric names emitted by `bigbrain-zth`, grouped by domain. */
|
|
20
20
|
export declare const Z2hServiceEvents: {
|
|
21
21
|
readonly snowflake: {
|
|
22
22
|
readonly queryDurationMs: "z2h_snowflake_query_duration_ms";
|
|
@@ -37,4 +37,14 @@ export declare const Z2hServiceEvents: {
|
|
|
37
37
|
readonly captureFailed: "z2h_screenshot_capture_failed";
|
|
38
38
|
};
|
|
39
39
|
};
|
|
40
|
+
/** Metric/event emitted by `bigbrain-zth-agent`. */
|
|
41
|
+
export declare const Z2hAgentEvents: {
|
|
42
|
+
readonly subagents: {
|
|
43
|
+
readonly cliHelpUnavailable: "z2h.subagents.cli_help_unavailable";
|
|
44
|
+
};
|
|
45
|
+
readonly toolCall: {
|
|
46
|
+
readonly softFailureMetric: "z2h.agent_tool_call.soft_failure";
|
|
47
|
+
readonly biEvent: "z2h_agent_tool_call";
|
|
48
|
+
};
|
|
49
|
+
};
|
|
40
50
|
//# sourceMappingURL=events.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/observability/events.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/observability/events.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;CAgBtB,CAAC;AAEX,iEAAiE;AACjE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;CAmBnB,CAAC;AAEX,oDAAoD;AACpD,eAAO,MAAM,cAAc;;;;;;;;CAQjB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** BI events tracked
|
|
1
|
+
/** BI events tracked in zth-backend-runner, grouped by domain. */
|
|
2
2
|
const BackendRunnerEvents = {
|
|
3
3
|
invoke: {
|
|
4
4
|
succeeded: 'z2h_backend_invoke_succeeded',
|
|
@@ -16,7 +16,7 @@ const BackendRunnerEvents = {
|
|
|
16
16
|
connectDeclined: 'z2h_integration_connect_declined',
|
|
17
17
|
},
|
|
18
18
|
};
|
|
19
|
-
/** Metric names emitted by `bigbrain-zth
|
|
19
|
+
/** Metric names emitted by `bigbrain-zth`, grouped by domain. */
|
|
20
20
|
const Z2hServiceEvents = {
|
|
21
21
|
snowflake: {
|
|
22
22
|
queryDurationMs: 'z2h_snowflake_query_duration_ms',
|
|
@@ -37,5 +37,15 @@ const Z2hServiceEvents = {
|
|
|
37
37
|
captureFailed: 'z2h_screenshot_capture_failed',
|
|
38
38
|
},
|
|
39
39
|
};
|
|
40
|
+
/** Metric/event emitted by `bigbrain-zth-agent`. */
|
|
41
|
+
const Z2hAgentEvents = {
|
|
42
|
+
subagents: {
|
|
43
|
+
cliHelpUnavailable: 'z2h.subagents.cli_help_unavailable',
|
|
44
|
+
},
|
|
45
|
+
toolCall: {
|
|
46
|
+
softFailureMetric: 'z2h.agent_tool_call.soft_failure',
|
|
47
|
+
biEvent: 'z2h_agent_tool_call',
|
|
48
|
+
},
|
|
49
|
+
};
|
|
40
50
|
|
|
41
|
-
export { BackendRunnerEvents, Z2hServiceEvents };
|
|
51
|
+
export { BackendRunnerEvents, Z2hAgentEvents, Z2hServiceEvents };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { trackEvent } from './tracker';
|
|
2
2
|
export { createHttpTracker } from './httpTracker';
|
|
3
3
|
export type { HttpTrackerDeps } from './httpTracker';
|
|
4
|
-
export { BackendRunnerEvents, Z2hServiceEvents } from './events';
|
|
4
|
+
export { BackendRunnerEvents, Z2hServiceEvents, Z2hAgentEvents } from './events';
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/observability/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/observability/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../../src/observability/tracker.ts"],"names":[],"mappings":"AAWA;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../../src/observability/tracker.ts"],"names":[],"mappings":"AAWA;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAW5F"}
|
|
@@ -13,13 +13,14 @@ function getUserContext() {
|
|
|
13
13
|
* standalone processes (e.g. CLIs) that never bootstrap the Trident runtime.
|
|
14
14
|
*/
|
|
15
15
|
function trackEvent(name, data, source) {
|
|
16
|
-
const
|
|
17
|
-
if (!
|
|
16
|
+
const tracker = Api.getPart('bigbrain')?.tracker;
|
|
17
|
+
if (!tracker) {
|
|
18
18
|
// eslint-disable-next-line no-console
|
|
19
19
|
console.warn('[z2h-shared-utils] trackEvent: bigbrain API part unavailable, was Runtime.init() called? Dropping event.');
|
|
20
20
|
return;
|
|
21
21
|
}
|
|
22
|
-
|
|
22
|
+
// Call through `tracker`, not a destructured reference — sendBiEvent relies on `this` internally.
|
|
23
|
+
tracker.sendBiEvent({ name, source, data: { ...getUserContext(), ...data } });
|
|
23
24
|
}
|
|
24
25
|
|
|
25
26
|
export { trackEvent };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracker.test.d.ts","sourceRoot":"","sources":["../../../src/observability/__tests__/tracker.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** BI events tracked
|
|
1
|
+
/** BI events tracked in zth-backend-runner, grouped by domain. */
|
|
2
2
|
export declare const BackendRunnerEvents: {
|
|
3
3
|
readonly invoke: {
|
|
4
4
|
readonly succeeded: "z2h_backend_invoke_succeeded";
|
|
@@ -16,7 +16,7 @@ export declare const BackendRunnerEvents: {
|
|
|
16
16
|
readonly connectDeclined: "z2h_integration_connect_declined";
|
|
17
17
|
};
|
|
18
18
|
};
|
|
19
|
-
/** Metric names emitted by `bigbrain-zth
|
|
19
|
+
/** Metric names emitted by `bigbrain-zth`, grouped by domain. */
|
|
20
20
|
export declare const Z2hServiceEvents: {
|
|
21
21
|
readonly snowflake: {
|
|
22
22
|
readonly queryDurationMs: "z2h_snowflake_query_duration_ms";
|
|
@@ -37,4 +37,14 @@ export declare const Z2hServiceEvents: {
|
|
|
37
37
|
readonly captureFailed: "z2h_screenshot_capture_failed";
|
|
38
38
|
};
|
|
39
39
|
};
|
|
40
|
+
/** Metric/event emitted by `bigbrain-zth-agent`. */
|
|
41
|
+
export declare const Z2hAgentEvents: {
|
|
42
|
+
readonly subagents: {
|
|
43
|
+
readonly cliHelpUnavailable: "z2h.subagents.cli_help_unavailable";
|
|
44
|
+
};
|
|
45
|
+
readonly toolCall: {
|
|
46
|
+
readonly softFailureMetric: "z2h.agent_tool_call.soft_failure";
|
|
47
|
+
readonly biEvent: "z2h_agent_tool_call";
|
|
48
|
+
};
|
|
49
|
+
};
|
|
40
50
|
//# sourceMappingURL=events.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/observability/events.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/observability/events.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;CAgBtB,CAAC;AAEX,iEAAiE;AACjE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;CAmBnB,CAAC;AAEX,oDAAoD;AACpD,eAAO,MAAM,cAAc;;;;;;;;CAQjB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
2
|
|
|
3
|
-
/** BI events tracked
|
|
3
|
+
/** BI events tracked in zth-backend-runner, grouped by domain. */
|
|
4
4
|
const BackendRunnerEvents = {
|
|
5
5
|
invoke: {
|
|
6
6
|
succeeded: 'z2h_backend_invoke_succeeded',
|
|
@@ -18,7 +18,7 @@ const BackendRunnerEvents = {
|
|
|
18
18
|
connectDeclined: 'z2h_integration_connect_declined',
|
|
19
19
|
},
|
|
20
20
|
};
|
|
21
|
-
/** Metric names emitted by `bigbrain-zth
|
|
21
|
+
/** Metric names emitted by `bigbrain-zth`, grouped by domain. */
|
|
22
22
|
const Z2hServiceEvents = {
|
|
23
23
|
snowflake: {
|
|
24
24
|
queryDurationMs: 'z2h_snowflake_query_duration_ms',
|
|
@@ -39,6 +39,17 @@ const Z2hServiceEvents = {
|
|
|
39
39
|
captureFailed: 'z2h_screenshot_capture_failed',
|
|
40
40
|
},
|
|
41
41
|
};
|
|
42
|
+
/** Metric/event emitted by `bigbrain-zth-agent`. */
|
|
43
|
+
const Z2hAgentEvents = {
|
|
44
|
+
subagents: {
|
|
45
|
+
cliHelpUnavailable: 'z2h.subagents.cli_help_unavailable',
|
|
46
|
+
},
|
|
47
|
+
toolCall: {
|
|
48
|
+
softFailureMetric: 'z2h.agent_tool_call.soft_failure',
|
|
49
|
+
biEvent: 'z2h_agent_tool_call',
|
|
50
|
+
},
|
|
51
|
+
};
|
|
42
52
|
|
|
43
53
|
exports.BackendRunnerEvents = BackendRunnerEvents;
|
|
54
|
+
exports.Z2hAgentEvents = Z2hAgentEvents;
|
|
44
55
|
exports.Z2hServiceEvents = Z2hServiceEvents;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { trackEvent } from './tracker';
|
|
2
2
|
export { createHttpTracker } from './httpTracker';
|
|
3
3
|
export type { HttpTrackerDeps } from './httpTracker';
|
|
4
|
-
export { BackendRunnerEvents, Z2hServiceEvents } from './events';
|
|
4
|
+
export { BackendRunnerEvents, Z2hServiceEvents, Z2hAgentEvents } from './events';
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/observability/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/observability/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -9,4 +9,5 @@ const observability_events = require('./events.js');
|
|
|
9
9
|
exports.trackEvent = observability_tracker.trackEvent;
|
|
10
10
|
exports.createHttpTracker = observability_httpTracker.createHttpTracker;
|
|
11
11
|
exports.BackendRunnerEvents = observability_events.BackendRunnerEvents;
|
|
12
|
+
exports.Z2hAgentEvents = observability_events.Z2hAgentEvents;
|
|
12
13
|
exports.Z2hServiceEvents = observability_events.Z2hServiceEvents;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../src/observability/tracker.ts"],"names":[],"mappings":"AAWA;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../src/observability/tracker.ts"],"names":[],"mappings":"AAWA;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAW5F"}
|
|
@@ -15,13 +15,14 @@ function getUserContext() {
|
|
|
15
15
|
* standalone processes (e.g. CLIs) that never bootstrap the Trident runtime.
|
|
16
16
|
*/
|
|
17
17
|
function trackEvent(name, data, source) {
|
|
18
|
-
const
|
|
19
|
-
if (!
|
|
18
|
+
const tracker = tridentBackendApi.Api.getPart('bigbrain')?.tracker;
|
|
19
|
+
if (!tracker) {
|
|
20
20
|
// eslint-disable-next-line no-console
|
|
21
21
|
console.warn('[z2h-shared-utils] trackEvent: bigbrain API part unavailable, was Runtime.init() called? Dropping event.');
|
|
22
22
|
return;
|
|
23
23
|
}
|
|
24
|
-
|
|
24
|
+
// Call through `tracker`, not a destructured reference — sendBiEvent relies on `this` internally.
|
|
25
|
+
tracker.sendBiEvent({ name, source, data: { ...getUserContext(), ...data } });
|
|
25
26
|
}
|
|
26
27
|
|
|
27
28
|
exports.trackEvent = trackEvent;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mondaydotcomorg/z2h-shared-utils",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.4",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"types": "./dist/index.d.ts",
|
|
6
6
|
"exports": {
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
]
|
|
30
30
|
},
|
|
31
31
|
"scripts": {
|
|
32
|
+
"test": "trident-library test",
|
|
32
33
|
"build": "trident-library build",
|
|
33
34
|
"watch": "trident-library build -w",
|
|
34
35
|
"lint": "trident-library lint"
|
|
@@ -50,7 +51,8 @@
|
|
|
50
51
|
"@mondaydotcomorg/trident-backend-api": "^0.24.3",
|
|
51
52
|
"@mondaydotcomorg/trident-library": "^1.2.7",
|
|
52
53
|
"@types/node": "^22.19.0",
|
|
53
|
-
"typescript": "^5.7.2"
|
|
54
|
+
"typescript": "^5.7.2",
|
|
55
|
+
"vitest": "^2.1.8"
|
|
54
56
|
},
|
|
55
57
|
"engines": {
|
|
56
58
|
"node": ">=24"
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import { trackEvent } from '../tracker';
|
|
3
|
+
|
|
4
|
+
const { getPartMock } = vi.hoisted(() => ({ getPartMock: vi.fn() }));
|
|
5
|
+
vi.mock('@mondaydotcomorg/trident-backend-api', () => ({ Api: { getPart: getPartMock } }));
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Mirrors @mondaydotcomorg/bigbrain-tracker-node: sendBiEvent is a prototype method that
|
|
9
|
+
* delegates to this.sendBiEventAsync. A plain-object double would pass even when trackEvent
|
|
10
|
+
* detaches the method from its tracker, which is how that bug reached production —
|
|
11
|
+
* it only surfaces once Runtime.init() has supplied a real bigbrain part.
|
|
12
|
+
*/
|
|
13
|
+
class FakeTracker {
|
|
14
|
+
readonly sent: { name: string; source: string; data: Record<string, unknown> }[] = [];
|
|
15
|
+
|
|
16
|
+
async sendBiEventAsync(event: { name: string; source: string; data: Record<string, unknown> }): Promise<void> {
|
|
17
|
+
this.sent.push(event);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
sendBiEvent(event: { name: string; source: string; data: Record<string, unknown> }): void {
|
|
21
|
+
void this.sendBiEventAsync(event);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function mockParts({ tracker, user }: { tracker?: FakeTracker; user?: { name: string } }) {
|
|
26
|
+
getPartMock.mockImplementation((part: string) => {
|
|
27
|
+
if (part === 'bigbrain') {
|
|
28
|
+
return tracker ? { tracker } : undefined;
|
|
29
|
+
}
|
|
30
|
+
if (part === 'context') {
|
|
31
|
+
return { execution: { get: () => (user ? { user } : undefined) } };
|
|
32
|
+
}
|
|
33
|
+
return undefined;
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
describe('trackEvent', () => {
|
|
38
|
+
beforeEach(() => {
|
|
39
|
+
getPartMock.mockReset();
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it('sends the event through the tracker', () => {
|
|
43
|
+
const tracker = new FakeTracker();
|
|
44
|
+
mockParts({ tracker });
|
|
45
|
+
|
|
46
|
+
trackEvent('z2h_agent_tool_call', { tool_name: 'write_file' }, 'z2h-agent');
|
|
47
|
+
|
|
48
|
+
expect(tracker.sent).toEqual([
|
|
49
|
+
{ name: 'z2h_agent_tool_call', source: 'z2h-agent', data: { tool_name: 'write_file' } },
|
|
50
|
+
]);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it('attaches the current user to the event', () => {
|
|
54
|
+
const tracker = new FakeTracker();
|
|
55
|
+
mockParts({ tracker, user: { name: 'Arielle' } });
|
|
56
|
+
|
|
57
|
+
trackEvent('z2h_agent_tool_call', { tool_name: 'execute' }, 'z2h-agent');
|
|
58
|
+
|
|
59
|
+
expect(tracker.sent[0].data).toEqual({ user_name: 'Arielle', tool_name: 'execute' });
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
it('drops the event with a warning when the bigbrain part is unavailable', () => {
|
|
63
|
+
mockParts({});
|
|
64
|
+
const warn = vi.spyOn(console, 'warn').mockImplementation(() => {});
|
|
65
|
+
|
|
66
|
+
expect(() => trackEvent('z2h_agent_tool_call', { tool_name: 'task' }, 'z2h-agent')).not.toThrow();
|
|
67
|
+
|
|
68
|
+
expect(warn).toHaveBeenCalledOnce();
|
|
69
|
+
warn.mockRestore();
|
|
70
|
+
});
|
|
71
|
+
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** BI events tracked
|
|
1
|
+
/** BI events tracked in zth-backend-runner, grouped by domain. */
|
|
2
2
|
export const BackendRunnerEvents = {
|
|
3
3
|
invoke: {
|
|
4
4
|
succeeded: 'z2h_backend_invoke_succeeded',
|
|
@@ -17,7 +17,7 @@ export const BackendRunnerEvents = {
|
|
|
17
17
|
},
|
|
18
18
|
} as const;
|
|
19
19
|
|
|
20
|
-
/** Metric names emitted by `bigbrain-zth
|
|
20
|
+
/** Metric names emitted by `bigbrain-zth`, grouped by domain. */
|
|
21
21
|
export const Z2hServiceEvents = {
|
|
22
22
|
snowflake: {
|
|
23
23
|
queryDurationMs: 'z2h_snowflake_query_duration_ms',
|
|
@@ -38,3 +38,14 @@ export const Z2hServiceEvents = {
|
|
|
38
38
|
captureFailed: 'z2h_screenshot_capture_failed',
|
|
39
39
|
},
|
|
40
40
|
} as const;
|
|
41
|
+
|
|
42
|
+
/** Metric/event emitted by `bigbrain-zth-agent`. */
|
|
43
|
+
export const Z2hAgentEvents = {
|
|
44
|
+
subagents: {
|
|
45
|
+
cliHelpUnavailable: 'z2h.subagents.cli_help_unavailable',
|
|
46
|
+
},
|
|
47
|
+
toolCall: {
|
|
48
|
+
softFailureMetric: 'z2h.agent_tool_call.soft_failure',
|
|
49
|
+
biEvent: 'z2h_agent_tool_call',
|
|
50
|
+
},
|
|
51
|
+
} as const;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { trackEvent } from './tracker';
|
|
2
2
|
export { createHttpTracker } from './httpTracker';
|
|
3
3
|
export type { HttpTrackerDeps } from './httpTracker';
|
|
4
|
-
export { BackendRunnerEvents, Z2hServiceEvents } from './events';
|
|
4
|
+
export { BackendRunnerEvents, Z2hServiceEvents, Z2hAgentEvents } from './events';
|
|
@@ -15,13 +15,14 @@ function getUserContext(): { user_name?: string } {
|
|
|
15
15
|
* standalone processes (e.g. CLIs) that never bootstrap the Trident runtime.
|
|
16
16
|
*/
|
|
17
17
|
export function trackEvent(name: string, data: Record<string, unknown>, source: string): void {
|
|
18
|
-
const
|
|
19
|
-
if (!
|
|
18
|
+
const tracker = Api.getPart('bigbrain')?.tracker;
|
|
19
|
+
if (!tracker) {
|
|
20
20
|
// eslint-disable-next-line no-console
|
|
21
21
|
console.warn(
|
|
22
22
|
'[z2h-shared-utils] trackEvent: bigbrain API part unavailable, was Runtime.init() called? Dropping event.'
|
|
23
23
|
);
|
|
24
24
|
return;
|
|
25
25
|
}
|
|
26
|
-
|
|
26
|
+
// Call through `tracker`, not a destructured reference — sendBiEvent relies on `this` internally.
|
|
27
|
+
tracker.sendBiEvent({ name, source, data: { ...getUserContext(), ...data } });
|
|
27
28
|
}
|