airbyte-faros-destination 0.23.15 → 0.23.17
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/lib/converters/claude/analytics_user_cost.d.ts +1 -0
- package/lib/converters/claude/analytics_user_cost.js +13 -1
- package/lib/converters/claude/analytics_user_cost.js.map +1 -1
- package/lib/converters/claude/analytics_user_usage.d.ts +1 -0
- package/lib/converters/claude/analytics_user_usage.js +26 -8
- package/lib/converters/claude/analytics_user_usage.js.map +1 -1
- package/lib/converters/claude/claude_code_usage_report.d.ts +1 -1
- package/lib/converters/claude/claude_code_usage_report.js +42 -27
- package/lib/converters/claude/claude_code_usage_report.js.map +1 -1
- package/lib/converters/claude/common.d.ts +4 -2
- package/lib/converters/claude/common.js +20 -5
- package/lib/converters/claude/common.js.map +1 -1
- package/lib/converters/common/vcs.d.ts +2 -0
- package/lib/converters/common/vcs.js +2 -0
- package/lib/converters/common/vcs.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
|
@@ -3,6 +3,7 @@ import { DestinationModel, DestinationRecord, StreamContext } from '../converter
|
|
|
3
3
|
import { ClaudeConverter } from './common';
|
|
4
4
|
export declare class AnalyticsUserCost extends ClaudeConverter {
|
|
5
5
|
private readonly skippedActors;
|
|
6
|
+
private readonly skippedProducts;
|
|
6
7
|
readonly destinationModels: ReadonlyArray<DestinationModel>;
|
|
7
8
|
convert(record: AirbyteRecord, ctx: StreamContext): Promise<ReadonlyArray<DestinationRecord>>;
|
|
8
9
|
onProcessingComplete(ctx: StreamContext): Promise<ReadonlyArray<DestinationRecord>>;
|
|
@@ -8,6 +8,7 @@ class AnalyticsUserCost extends common_1.ClaudeConverter {
|
|
|
8
8
|
constructor() {
|
|
9
9
|
super(...arguments);
|
|
10
10
|
this.skippedActors = new Set();
|
|
11
|
+
this.skippedProducts = new Set();
|
|
11
12
|
this.destinationModels = [
|
|
12
13
|
'vcs_AssistantMetric',
|
|
13
14
|
];
|
|
@@ -24,6 +25,11 @@ class AnalyticsUserCost extends common_1.ClaudeConverter {
|
|
|
24
25
|
if (!item.amount) {
|
|
25
26
|
return [];
|
|
26
27
|
}
|
|
28
|
+
const toolDetail = (0, common_1.claudeToolDetailForProduct)(item.product);
|
|
29
|
+
if (toolDetail === null) {
|
|
30
|
+
this.skippedProducts.add(item.product ?? 'unknown');
|
|
31
|
+
return [];
|
|
32
|
+
}
|
|
27
33
|
// Analytics API returns amount as a decimal string in fractional cents
|
|
28
34
|
// (e.g. "41280.000000" = 41,280 cents = $412.80). Round to integer cents
|
|
29
35
|
// to stay consistent with the Admin path (estimated_cost.amount).
|
|
@@ -44,8 +50,9 @@ class AnalyticsUserCost extends common_1.ClaudeConverter {
|
|
|
44
50
|
assistantMetricTypeDetail: item.currency,
|
|
45
51
|
value: cents,
|
|
46
52
|
organization,
|
|
47
|
-
userEmail,
|
|
53
|
+
userUid: userEmail,
|
|
48
54
|
model: item.model ?? undefined,
|
|
55
|
+
toolDetail,
|
|
49
56
|
});
|
|
50
57
|
}
|
|
51
58
|
async onProcessingComplete(ctx) {
|
|
@@ -54,6 +61,11 @@ class AnalyticsUserCost extends common_1.ClaudeConverter {
|
|
|
54
61
|
.sort((a, b) => a.localeCompare(b))
|
|
55
62
|
.join(', ')}`);
|
|
56
63
|
}
|
|
64
|
+
if (this.skippedProducts.size > 0) {
|
|
65
|
+
ctx.logger.info(`Skipped analytics user cost records for unmapped product(s): ${Array.from(this.skippedProducts)
|
|
66
|
+
.sort((a, b) => a.localeCompare(b))
|
|
67
|
+
.join(', ')}`);
|
|
68
|
+
}
|
|
57
69
|
return [];
|
|
58
70
|
}
|
|
59
71
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics_user_cost.js","sourceRoot":"","sources":["../../../src/converters/claude/analytics_user_cost.ts"],"names":[],"mappings":";;;AAEA,qDAAsC;AAEtC,uCAAsD;AAEtD,
|
|
1
|
+
{"version":3,"file":"analytics_user_cost.js","sourceRoot":"","sources":["../../../src/converters/claude/analytics_user_cost.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import { DestinationModel, DestinationRecord, StreamContext } from '../converter
|
|
|
3
3
|
import { ClaudeConverter } from './common';
|
|
4
4
|
export declare class AnalyticsUserUsage extends ClaudeConverter {
|
|
5
5
|
private readonly skippedActors;
|
|
6
|
+
private readonly skippedProducts;
|
|
6
7
|
readonly destinationModels: ReadonlyArray<DestinationModel>;
|
|
7
8
|
convert(record: AirbyteRecord, ctx: StreamContext): Promise<ReadonlyArray<DestinationRecord>>;
|
|
8
9
|
onProcessingComplete(ctx: StreamContext): Promise<ReadonlyArray<DestinationRecord>>;
|
|
@@ -10,6 +10,7 @@ class AnalyticsUserUsage extends common_1.ClaudeConverter {
|
|
|
10
10
|
constructor() {
|
|
11
11
|
super(...arguments);
|
|
12
12
|
this.skippedActors = new Set();
|
|
13
|
+
this.skippedProducts = new Set();
|
|
13
14
|
this.destinationModels = [
|
|
14
15
|
'vcs_AssistantMetric',
|
|
15
16
|
'vcs_UserToolUsage',
|
|
@@ -24,6 +25,11 @@ class AnalyticsUserUsage extends common_1.ClaudeConverter {
|
|
|
24
25
|
}
|
|
25
26
|
return [];
|
|
26
27
|
}
|
|
28
|
+
const toolDetail = (0, common_1.claudeToolDetailForProduct)(item.product);
|
|
29
|
+
if (toolDetail === null) {
|
|
30
|
+
this.skippedProducts.add(item.product ?? 'unknown');
|
|
31
|
+
return [];
|
|
32
|
+
}
|
|
27
33
|
const day = faros_js_client_1.Utils.toDate(item.date);
|
|
28
34
|
const nextDay = new Date(day.getTime() + 24 * 60 * 60 * 1000);
|
|
29
35
|
const organization = {
|
|
@@ -39,8 +45,9 @@ class AnalyticsUserUsage extends common_1.ClaudeConverter {
|
|
|
39
45
|
assistantMetricType: vcs_1.AssistantMetric.InputTokens,
|
|
40
46
|
value: item.uncached_input_tokens,
|
|
41
47
|
organization,
|
|
42
|
-
userEmail,
|
|
48
|
+
userUid: userEmail,
|
|
43
49
|
model,
|
|
50
|
+
toolDetail,
|
|
44
51
|
}));
|
|
45
52
|
}
|
|
46
53
|
if (item.output_tokens) {
|
|
@@ -50,8 +57,9 @@ class AnalyticsUserUsage extends common_1.ClaudeConverter {
|
|
|
50
57
|
assistantMetricType: vcs_1.AssistantMetric.OutputTokens,
|
|
51
58
|
value: item.output_tokens,
|
|
52
59
|
organization,
|
|
53
|
-
userEmail,
|
|
60
|
+
userUid: userEmail,
|
|
54
61
|
model,
|
|
62
|
+
toolDetail,
|
|
55
63
|
}));
|
|
56
64
|
}
|
|
57
65
|
if (item.cache_read_input_tokens) {
|
|
@@ -61,8 +69,9 @@ class AnalyticsUserUsage extends common_1.ClaudeConverter {
|
|
|
61
69
|
assistantMetricType: vcs_1.AssistantMetric.CacheReadTokens,
|
|
62
70
|
value: item.cache_read_input_tokens,
|
|
63
71
|
organization,
|
|
64
|
-
userEmail,
|
|
72
|
+
userUid: userEmail,
|
|
65
73
|
model,
|
|
74
|
+
toolDetail,
|
|
66
75
|
}));
|
|
67
76
|
}
|
|
68
77
|
if (item.cache_creation?.ephemeral_5m_input_tokens) {
|
|
@@ -72,8 +81,9 @@ class AnalyticsUserUsage extends common_1.ClaudeConverter {
|
|
|
72
81
|
assistantMetricType: vcs_1.AssistantMetric.CacheWriteTokens,
|
|
73
82
|
value: item.cache_creation.ephemeral_5m_input_tokens,
|
|
74
83
|
organization,
|
|
75
|
-
userEmail,
|
|
84
|
+
userUid: userEmail,
|
|
76
85
|
model,
|
|
86
|
+
toolDetail,
|
|
77
87
|
feature: common_1.ClaudeCodeFeature.Ephemeral5m,
|
|
78
88
|
}));
|
|
79
89
|
}
|
|
@@ -84,8 +94,9 @@ class AnalyticsUserUsage extends common_1.ClaudeConverter {
|
|
|
84
94
|
assistantMetricType: vcs_1.AssistantMetric.CacheWriteTokens,
|
|
85
95
|
value: item.cache_creation.ephemeral_1h_input_tokens,
|
|
86
96
|
organization,
|
|
87
|
-
userEmail,
|
|
97
|
+
userUid: userEmail,
|
|
88
98
|
model,
|
|
99
|
+
toolDetail,
|
|
89
100
|
feature: common_1.ClaudeCodeFeature.Ephemeral1h,
|
|
90
101
|
}));
|
|
91
102
|
}
|
|
@@ -97,8 +108,9 @@ class AnalyticsUserUsage extends common_1.ClaudeConverter {
|
|
|
97
108
|
customMetricName: WEB_SEARCH_REQUESTS_METRIC,
|
|
98
109
|
value: item.server_tool_use.web_search_requests,
|
|
99
110
|
organization,
|
|
100
|
-
userEmail,
|
|
111
|
+
userUid: userEmail,
|
|
101
112
|
model,
|
|
113
|
+
toolDetail,
|
|
102
114
|
}));
|
|
103
115
|
}
|
|
104
116
|
if (item.requests) {
|
|
@@ -109,8 +121,9 @@ class AnalyticsUserUsage extends common_1.ClaudeConverter {
|
|
|
109
121
|
customMetricName: API_REQUESTS_METRIC,
|
|
110
122
|
value: item.requests,
|
|
111
123
|
organization,
|
|
112
|
-
userEmail,
|
|
124
|
+
userUid: userEmail,
|
|
113
125
|
model,
|
|
126
|
+
toolDetail,
|
|
114
127
|
}));
|
|
115
128
|
}
|
|
116
129
|
const hasUsage = item.uncached_input_tokens > 0 ||
|
|
@@ -129,7 +142,7 @@ class AnalyticsUserUsage extends common_1.ClaudeConverter {
|
|
|
129
142
|
organization,
|
|
130
143
|
tool: {
|
|
131
144
|
category: vcs_1.VCSToolCategory.CodingAssistant,
|
|
132
|
-
detail:
|
|
145
|
+
detail: toolDetail,
|
|
133
146
|
},
|
|
134
147
|
},
|
|
135
148
|
usedAt: day.toISOString(),
|
|
@@ -145,6 +158,11 @@ class AnalyticsUserUsage extends common_1.ClaudeConverter {
|
|
|
145
158
|
.sort((a, b) => a.localeCompare(b))
|
|
146
159
|
.join(', ')}`);
|
|
147
160
|
}
|
|
161
|
+
if (this.skippedProducts.size > 0) {
|
|
162
|
+
ctx.logger.info(`Skipped analytics user usage records for unmapped product(s): ${Array.from(this.skippedProducts)
|
|
163
|
+
.sort((a, b) => a.localeCompare(b))
|
|
164
|
+
.join(', ')}`);
|
|
165
|
+
}
|
|
148
166
|
return [];
|
|
149
167
|
}
|
|
150
168
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics_user_usage.js","sourceRoot":"","sources":["../../../src/converters/claude/analytics_user_usage.ts"],"names":[],"mappings":";;;AAEA,qDAAsC;AAEtC,
|
|
1
|
+
{"version":3,"file":"analytics_user_usage.js","sourceRoot":"","sources":["../../../src/converters/claude/analytics_user_usage.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import { ClaudeCodeFeature, ClaudeConverter } from './common';
|
|
|
4
4
|
export type { ClaudeCodeAssistantMetricConfig } from './common';
|
|
5
5
|
export { ClaudeCodeFeature };
|
|
6
6
|
export declare class ClaudeCodeUsageReport extends ClaudeConverter {
|
|
7
|
-
private readonly
|
|
7
|
+
private readonly apiKeyActorNames;
|
|
8
8
|
readonly destinationModels: ReadonlyArray<DestinationModel>;
|
|
9
9
|
convert(record: AirbyteRecord, ctx: StreamContext): Promise<ReadonlyArray<DestinationRecord>>;
|
|
10
10
|
onProcessingComplete(ctx: StreamContext): Promise<ReadonlyArray<DestinationRecord>>;
|
|
@@ -8,18 +8,22 @@ Object.defineProperty(exports, "ClaudeCodeFeature", { enumerable: true, get: fun
|
|
|
8
8
|
class ClaudeCodeUsageReport extends common_1.ClaudeConverter {
|
|
9
9
|
constructor() {
|
|
10
10
|
super(...arguments);
|
|
11
|
-
this.
|
|
11
|
+
this.apiKeyActorNames = new Set();
|
|
12
12
|
this.destinationModels = [
|
|
13
13
|
'vcs_AssistantMetric',
|
|
14
|
+
'vcs_User',
|
|
14
15
|
'vcs_UserToolUsage',
|
|
15
16
|
];
|
|
16
17
|
}
|
|
17
18
|
async convert(record, ctx) {
|
|
18
19
|
const usageItem = record.record.data;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
const userEmail = usageItem.actor?.email_address;
|
|
21
|
+
const apiKeyName = usageItem.actor?.api_key_name;
|
|
22
|
+
// API key actors (which may be people, bots, or shared keys) are written
|
|
23
|
+
// as users keyed on the key name, so their usage is kept and can be
|
|
24
|
+
// re-attributed downstream
|
|
25
|
+
const userUid = userEmail ?? apiKeyName;
|
|
26
|
+
if (!userUid) {
|
|
23
27
|
return [];
|
|
24
28
|
}
|
|
25
29
|
const day = faros_js_client_1.Utils.toDate(usageItem.date);
|
|
@@ -29,8 +33,19 @@ class ClaudeCodeUsageReport extends common_1.ClaudeConverter {
|
|
|
29
33
|
source: this.streamName.source,
|
|
30
34
|
};
|
|
31
35
|
const res = [];
|
|
32
|
-
const userEmail = usageItem.actor.email_address;
|
|
33
36
|
const terminalType = usageItem.terminal_type;
|
|
37
|
+
if (!userEmail && !this.apiKeyActorNames.has(apiKeyName)) {
|
|
38
|
+
this.apiKeyActorNames.add(apiKeyName);
|
|
39
|
+
res.push({
|
|
40
|
+
model: 'vcs_User',
|
|
41
|
+
record: {
|
|
42
|
+
uid: apiKeyName,
|
|
43
|
+
source: this.streamName.source,
|
|
44
|
+
name: apiKeyName,
|
|
45
|
+
type: { category: vcs_1.UserTypeCategory.Custom, detail: 'api_key' },
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
}
|
|
34
49
|
// Core metrics: Lines of code
|
|
35
50
|
if (usageItem.core_metrics?.lines_of_code?.added) {
|
|
36
51
|
res.push(...this.getAssistantMetric({
|
|
@@ -39,7 +54,7 @@ class ClaudeCodeUsageReport extends common_1.ClaudeConverter {
|
|
|
39
54
|
assistantMetricType: vcs_1.AssistantMetric.AILinesAdded,
|
|
40
55
|
value: usageItem.core_metrics.lines_of_code.added,
|
|
41
56
|
organization,
|
|
42
|
-
|
|
57
|
+
userUid,
|
|
43
58
|
terminalType,
|
|
44
59
|
}));
|
|
45
60
|
}
|
|
@@ -50,7 +65,7 @@ class ClaudeCodeUsageReport extends common_1.ClaudeConverter {
|
|
|
50
65
|
assistantMetricType: vcs_1.AssistantMetric.AILinesRemoved,
|
|
51
66
|
value: usageItem.core_metrics.lines_of_code.removed,
|
|
52
67
|
organization,
|
|
53
|
-
|
|
68
|
+
userUid,
|
|
54
69
|
terminalType,
|
|
55
70
|
}));
|
|
56
71
|
}
|
|
@@ -62,7 +77,7 @@ class ClaudeCodeUsageReport extends common_1.ClaudeConverter {
|
|
|
62
77
|
assistantMetricType: vcs_1.AssistantMetric.CommitsCreated,
|
|
63
78
|
value: usageItem.core_metrics.commits_by_claude_code,
|
|
64
79
|
organization,
|
|
65
|
-
|
|
80
|
+
userUid,
|
|
66
81
|
terminalType,
|
|
67
82
|
}));
|
|
68
83
|
}
|
|
@@ -74,7 +89,7 @@ class ClaudeCodeUsageReport extends common_1.ClaudeConverter {
|
|
|
74
89
|
assistantMetricType: vcs_1.AssistantMetric.PullRequestsCreated,
|
|
75
90
|
value: usageItem.core_metrics.pull_requests_by_claude_code,
|
|
76
91
|
organization,
|
|
77
|
-
|
|
92
|
+
userUid,
|
|
78
93
|
terminalType,
|
|
79
94
|
}));
|
|
80
95
|
}
|
|
@@ -86,7 +101,7 @@ class ClaudeCodeUsageReport extends common_1.ClaudeConverter {
|
|
|
86
101
|
assistantMetricType: vcs_1.AssistantMetric.Usages,
|
|
87
102
|
value: usageItem.core_metrics.num_sessions,
|
|
88
103
|
organization,
|
|
89
|
-
|
|
104
|
+
userUid,
|
|
90
105
|
terminalType,
|
|
91
106
|
}));
|
|
92
107
|
// Add UserToolUsage record for active usage
|
|
@@ -94,7 +109,7 @@ class ClaudeCodeUsageReport extends common_1.ClaudeConverter {
|
|
|
94
109
|
model: 'vcs_UserToolUsage',
|
|
95
110
|
record: {
|
|
96
111
|
userTool: {
|
|
97
|
-
user: { uid:
|
|
112
|
+
user: { uid: userUid, source: this.streamName.source },
|
|
98
113
|
organization: {
|
|
99
114
|
uid: this.streamName.source,
|
|
100
115
|
source: this.streamName.source,
|
|
@@ -120,7 +135,7 @@ class ClaudeCodeUsageReport extends common_1.ClaudeConverter {
|
|
|
120
135
|
assistantMetricTypeDetail: modelData.estimated_cost.currency,
|
|
121
136
|
value: modelData.estimated_cost.amount,
|
|
122
137
|
organization,
|
|
123
|
-
|
|
138
|
+
userUid,
|
|
124
139
|
model: modelData.model,
|
|
125
140
|
terminalType,
|
|
126
141
|
}));
|
|
@@ -133,7 +148,7 @@ class ClaudeCodeUsageReport extends common_1.ClaudeConverter {
|
|
|
133
148
|
assistantMetricType: vcs_1.AssistantMetric.InputTokens,
|
|
134
149
|
value: modelData.tokens.input,
|
|
135
150
|
organization,
|
|
136
|
-
|
|
151
|
+
userUid,
|
|
137
152
|
model: modelData.model,
|
|
138
153
|
terminalType,
|
|
139
154
|
}));
|
|
@@ -145,7 +160,7 @@ class ClaudeCodeUsageReport extends common_1.ClaudeConverter {
|
|
|
145
160
|
assistantMetricType: vcs_1.AssistantMetric.OutputTokens,
|
|
146
161
|
value: modelData.tokens.output,
|
|
147
162
|
organization,
|
|
148
|
-
|
|
163
|
+
userUid,
|
|
149
164
|
model: modelData.model,
|
|
150
165
|
terminalType,
|
|
151
166
|
}));
|
|
@@ -157,7 +172,7 @@ class ClaudeCodeUsageReport extends common_1.ClaudeConverter {
|
|
|
157
172
|
assistantMetricType: vcs_1.AssistantMetric.CacheReadTokens,
|
|
158
173
|
value: modelData.tokens.cache_read,
|
|
159
174
|
organization,
|
|
160
|
-
|
|
175
|
+
userUid,
|
|
161
176
|
model: modelData.model,
|
|
162
177
|
terminalType,
|
|
163
178
|
}));
|
|
@@ -169,7 +184,7 @@ class ClaudeCodeUsageReport extends common_1.ClaudeConverter {
|
|
|
169
184
|
assistantMetricType: vcs_1.AssistantMetric.CacheWriteTokens,
|
|
170
185
|
value: modelData.tokens.cache_creation,
|
|
171
186
|
organization,
|
|
172
|
-
|
|
187
|
+
userUid,
|
|
173
188
|
model: modelData.model,
|
|
174
189
|
terminalType,
|
|
175
190
|
}));
|
|
@@ -185,7 +200,7 @@ class ClaudeCodeUsageReport extends common_1.ClaudeConverter {
|
|
|
185
200
|
assistantMetricType: vcs_1.AssistantMetric.SuggestionsAccepted,
|
|
186
201
|
value: usageItem.tool_actions.edit_tool.accepted,
|
|
187
202
|
organization,
|
|
188
|
-
|
|
203
|
+
userUid,
|
|
189
204
|
feature: common_1.ClaudeCodeFeature.EditTool,
|
|
190
205
|
terminalType,
|
|
191
206
|
}));
|
|
@@ -197,7 +212,7 @@ class ClaudeCodeUsageReport extends common_1.ClaudeConverter {
|
|
|
197
212
|
assistantMetricType: vcs_1.AssistantMetric.SuggestionsDiscarded,
|
|
198
213
|
value: usageItem.tool_actions.edit_tool.rejected,
|
|
199
214
|
organization,
|
|
200
|
-
|
|
215
|
+
userUid,
|
|
201
216
|
feature: common_1.ClaudeCodeFeature.EditTool,
|
|
202
217
|
terminalType,
|
|
203
218
|
}));
|
|
@@ -212,7 +227,7 @@ class ClaudeCodeUsageReport extends common_1.ClaudeConverter {
|
|
|
212
227
|
assistantMetricType: vcs_1.AssistantMetric.SuggestionsAccepted,
|
|
213
228
|
value: usageItem.tool_actions.multi_edit_tool.accepted,
|
|
214
229
|
organization,
|
|
215
|
-
|
|
230
|
+
userUid,
|
|
216
231
|
feature: common_1.ClaudeCodeFeature.MultiEditTool,
|
|
217
232
|
terminalType,
|
|
218
233
|
}));
|
|
@@ -224,7 +239,7 @@ class ClaudeCodeUsageReport extends common_1.ClaudeConverter {
|
|
|
224
239
|
assistantMetricType: vcs_1.AssistantMetric.SuggestionsDiscarded,
|
|
225
240
|
value: usageItem.tool_actions.multi_edit_tool.rejected,
|
|
226
241
|
organization,
|
|
227
|
-
|
|
242
|
+
userUid,
|
|
228
243
|
feature: common_1.ClaudeCodeFeature.MultiEditTool,
|
|
229
244
|
terminalType,
|
|
230
245
|
}));
|
|
@@ -239,7 +254,7 @@ class ClaudeCodeUsageReport extends common_1.ClaudeConverter {
|
|
|
239
254
|
assistantMetricType: vcs_1.AssistantMetric.SuggestionsAccepted,
|
|
240
255
|
value: usageItem.tool_actions.notebook_edit_tool.accepted,
|
|
241
256
|
organization,
|
|
242
|
-
|
|
257
|
+
userUid,
|
|
243
258
|
feature: common_1.ClaudeCodeFeature.NotebookEditTool,
|
|
244
259
|
terminalType,
|
|
245
260
|
}));
|
|
@@ -251,7 +266,7 @@ class ClaudeCodeUsageReport extends common_1.ClaudeConverter {
|
|
|
251
266
|
assistantMetricType: vcs_1.AssistantMetric.SuggestionsDiscarded,
|
|
252
267
|
value: usageItem.tool_actions.notebook_edit_tool.rejected,
|
|
253
268
|
organization,
|
|
254
|
-
|
|
269
|
+
userUid,
|
|
255
270
|
feature: common_1.ClaudeCodeFeature.NotebookEditTool,
|
|
256
271
|
terminalType,
|
|
257
272
|
}));
|
|
@@ -266,7 +281,7 @@ class ClaudeCodeUsageReport extends common_1.ClaudeConverter {
|
|
|
266
281
|
assistantMetricType: vcs_1.AssistantMetric.SuggestionsAccepted,
|
|
267
282
|
value: usageItem.tool_actions.write_tool.accepted,
|
|
268
283
|
organization,
|
|
269
|
-
|
|
284
|
+
userUid,
|
|
270
285
|
feature: common_1.ClaudeCodeFeature.WriteTool,
|
|
271
286
|
terminalType,
|
|
272
287
|
}));
|
|
@@ -278,7 +293,7 @@ class ClaudeCodeUsageReport extends common_1.ClaudeConverter {
|
|
|
278
293
|
assistantMetricType: vcs_1.AssistantMetric.SuggestionsDiscarded,
|
|
279
294
|
value: usageItem.tool_actions.write_tool.rejected,
|
|
280
295
|
organization,
|
|
281
|
-
|
|
296
|
+
userUid,
|
|
282
297
|
feature: common_1.ClaudeCodeFeature.WriteTool,
|
|
283
298
|
terminalType,
|
|
284
299
|
}));
|
|
@@ -287,8 +302,8 @@ class ClaudeCodeUsageReport extends common_1.ClaudeConverter {
|
|
|
287
302
|
return res;
|
|
288
303
|
}
|
|
289
304
|
async onProcessingComplete(ctx) {
|
|
290
|
-
if (this.
|
|
291
|
-
ctx.logger.info(`
|
|
305
|
+
if (this.apiKeyActorNames.size > 0) {
|
|
306
|
+
ctx.logger.info(`Wrote Claude Code usage report records for ${this.apiKeyActorNames.size} API key actor(s): ${Array.from(this.apiKeyActorNames)
|
|
292
307
|
.sort((a, b) => a.localeCompare(b))
|
|
293
308
|
.join(', ')}`);
|
|
294
309
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude_code_usage_report.js","sourceRoot":"","sources":["../../../src/converters/claude/claude_code_usage_report.ts"],"names":[],"mappings":";;;AAEA,qDAAsC;AAEtC,
|
|
1
|
+
{"version":3,"file":"claude_code_usage_report.js","sourceRoot":"","sources":["../../../src/converters/claude/claude_code_usage_report.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AirbyteRecord } from 'faros-airbyte-cdk';
|
|
2
|
-
import { AssistantMetric, OrgKey } from '../common/vcs';
|
|
2
|
+
import { AssistantMetric, OrgKey, VCSToolDetail } from '../common/vcs';
|
|
3
3
|
import { Converter, DestinationRecord } from '../converter';
|
|
4
4
|
export declare enum ClaudeCodeFeature {
|
|
5
5
|
EditTool = "EditTool",
|
|
@@ -9,6 +9,7 @@ export declare enum ClaudeCodeFeature {
|
|
|
9
9
|
Ephemeral5m = "Ephemeral5m",
|
|
10
10
|
Ephemeral1h = "Ephemeral1h"
|
|
11
11
|
}
|
|
12
|
+
export declare function claudeToolDetailForProduct(product: string | null | undefined): VCSToolDetail | null;
|
|
12
13
|
export interface ClaudeCodeAssistantMetricConfig {
|
|
13
14
|
startedAt: Date;
|
|
14
15
|
endedAt: Date;
|
|
@@ -16,11 +17,12 @@ export interface ClaudeCodeAssistantMetricConfig {
|
|
|
16
17
|
assistantMetricTypeDetail?: string;
|
|
17
18
|
value: number;
|
|
18
19
|
organization: OrgKey;
|
|
19
|
-
|
|
20
|
+
userUid: string;
|
|
20
21
|
customMetricName?: string;
|
|
21
22
|
model?: string;
|
|
22
23
|
feature?: ClaudeCodeFeature;
|
|
23
24
|
terminalType?: string;
|
|
25
|
+
toolDetail?: VCSToolDetail;
|
|
24
26
|
}
|
|
25
27
|
export declare abstract class ClaudeConverter extends Converter {
|
|
26
28
|
source: string;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ClaudeConverter = exports.ClaudeCodeFeature = void 0;
|
|
4
|
+
exports.claudeToolDetailForProduct = claudeToolDetailForProduct;
|
|
4
5
|
const common_1 = require("faros-airbyte-common/common");
|
|
5
6
|
const lodash_1 = require("lodash");
|
|
6
7
|
const vcs_1 = require("../common/vcs");
|
|
@@ -14,6 +15,20 @@ var ClaudeCodeFeature;
|
|
|
14
15
|
ClaudeCodeFeature["Ephemeral5m"] = "Ephemeral5m";
|
|
15
16
|
ClaudeCodeFeature["Ephemeral1h"] = "Ephemeral1h";
|
|
16
17
|
})(ClaudeCodeFeature || (exports.ClaudeCodeFeature = ClaudeCodeFeature = {}));
|
|
18
|
+
// Analytics products route to distinct tool details so Claude Code metrics
|
|
19
|
+
// (and downstream consumers filtering on ClaudeCode) are unaffected by other
|
|
20
|
+
// products. A null product predates product grouping and was always
|
|
21
|
+
// claude_code. Unknown products are skipped by callers rather than mislabeled.
|
|
22
|
+
const PRODUCT_TOOL_DETAILS = new Map([
|
|
23
|
+
['claude_code', vcs_1.VCSToolDetail.ClaudeCode],
|
|
24
|
+
['chat', vcs_1.VCSToolDetail.ClaudeAi],
|
|
25
|
+
['cowork', vcs_1.VCSToolDetail.Cowork],
|
|
26
|
+
]);
|
|
27
|
+
function claudeToolDetailForProduct(product) {
|
|
28
|
+
if (product == null)
|
|
29
|
+
return vcs_1.VCSToolDetail.ClaudeCode;
|
|
30
|
+
return PRODUCT_TOOL_DETAILS.get(product) ?? null;
|
|
31
|
+
}
|
|
17
32
|
class ClaudeConverter extends converter_1.Converter {
|
|
18
33
|
constructor() {
|
|
19
34
|
super(...arguments);
|
|
@@ -23,7 +38,7 @@ class ClaudeConverter extends converter_1.Converter {
|
|
|
23
38
|
return record?.record?.data?.id;
|
|
24
39
|
}
|
|
25
40
|
getAssistantMetric(config) {
|
|
26
|
-
const { startedAt, endedAt, assistantMetricType, assistantMetricTypeDetail, value, organization,
|
|
41
|
+
const { startedAt, endedAt, assistantMetricType, assistantMetricTypeDetail, value, organization, userUid, customMetricName, model, feature, terminalType, toolDetail = vcs_1.VCSToolDetail.ClaudeCode, } = config;
|
|
27
42
|
return [
|
|
28
43
|
{
|
|
29
44
|
model: 'vcs_AssistantMetric',
|
|
@@ -32,11 +47,11 @@ class ClaudeConverter extends converter_1.Converter {
|
|
|
32
47
|
.concat(
|
|
33
48
|
// original fields (required) to be included in the digest
|
|
34
49
|
...[
|
|
35
|
-
|
|
50
|
+
toolDetail,
|
|
36
51
|
assistantMetricType,
|
|
37
52
|
startedAt.toISOString(),
|
|
38
53
|
organization.uid,
|
|
39
|
-
|
|
54
|
+
userUid,
|
|
40
55
|
customMetricName,
|
|
41
56
|
],
|
|
42
57
|
// newer fields (optional) to be included in the digest
|
|
@@ -61,10 +76,10 @@ class ClaudeConverter extends converter_1.Converter {
|
|
|
61
76
|
valueType: 'Int',
|
|
62
77
|
value: String(value),
|
|
63
78
|
organization,
|
|
64
|
-
user: { uid:
|
|
79
|
+
user: { uid: userUid, source: this.streamName.source },
|
|
65
80
|
tool: {
|
|
66
81
|
category: vcs_1.VCSToolCategory.CodingAssistant,
|
|
67
|
-
detail:
|
|
82
|
+
detail: toolDetail,
|
|
68
83
|
},
|
|
69
84
|
...(model && { model }),
|
|
70
85
|
...(feature && { feature }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/converters/claude/common.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/converters/claude/common.ts"],"names":[],"mappings":"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"}
|
|
@@ -61,6 +61,8 @@ var VCSToolDetail;
|
|
|
61
61
|
VCSToolDetail["Cursor"] = "Cursor";
|
|
62
62
|
VCSToolDetail["Windsurf"] = "Windsurf";
|
|
63
63
|
VCSToolDetail["ClaudeCode"] = "ClaudeCode";
|
|
64
|
+
VCSToolDetail["ClaudeAi"] = "ClaudeAi";
|
|
65
|
+
VCSToolDetail["Cowork"] = "Cowork";
|
|
64
66
|
VCSToolDetail["Kiro"] = "Kiro";
|
|
65
67
|
VCSToolDetail["Codex"] = "Codex";
|
|
66
68
|
})(VCSToolDetail || (exports.VCSToolDetail = VCSToolDetail = {}));
|