airbyte-faros-destination 0.22.16 → 0.22.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 +9 -0
- package/lib/converters/claude/analytics_user_cost.js +61 -0
- package/lib/converters/claude/analytics_user_cost.js.map +1 -0
- package/lib/converters/claude/analytics_user_usage.d.ts +9 -0
- package/lib/converters/claude/analytics_user_usage.js +152 -0
- package/lib/converters/claude/analytics_user_usage.js.map +1 -0
- package/lib/converters/claude/claude_code_usage_report.d.ts +3 -22
- package/lib/converters/claude/claude_code_usage_report.js +11 -70
- package/lib/converters/claude/claude_code_usage_report.js.map +1 -1
- package/lib/converters/claude/common.d.ts +24 -1
- package/lib/converters/claude/common.js +64 -1
- package/lib/converters/claude/common.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { AirbyteRecord } from 'faros-airbyte-cdk';
|
|
2
|
+
import { DestinationModel, DestinationRecord, StreamContext } from '../converter';
|
|
3
|
+
import { ClaudeConverter } from './common';
|
|
4
|
+
export declare class AnalyticsUserCost extends ClaudeConverter {
|
|
5
|
+
private readonly skippedActors;
|
|
6
|
+
readonly destinationModels: ReadonlyArray<DestinationModel>;
|
|
7
|
+
convert(record: AirbyteRecord, ctx: StreamContext): Promise<ReadonlyArray<DestinationRecord>>;
|
|
8
|
+
onProcessingComplete(ctx: StreamContext): Promise<ReadonlyArray<DestinationRecord>>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AnalyticsUserCost = void 0;
|
|
4
|
+
const faros_js_client_1 = require("faros-js-client");
|
|
5
|
+
const vcs_1 = require("../common/vcs");
|
|
6
|
+
const common_1 = require("./common");
|
|
7
|
+
class AnalyticsUserCost extends common_1.ClaudeConverter {
|
|
8
|
+
constructor() {
|
|
9
|
+
super(...arguments);
|
|
10
|
+
this.skippedActors = new Set();
|
|
11
|
+
this.destinationModels = [
|
|
12
|
+
'vcs_AssistantMetric',
|
|
13
|
+
];
|
|
14
|
+
}
|
|
15
|
+
async convert(record, ctx) {
|
|
16
|
+
const item = record.record.data;
|
|
17
|
+
const userEmail = item.actor?.email;
|
|
18
|
+
if (!userEmail || item.actor?.deleted) {
|
|
19
|
+
if (item.actor?.user_id) {
|
|
20
|
+
this.skippedActors.add(item.actor.user_id);
|
|
21
|
+
}
|
|
22
|
+
return [];
|
|
23
|
+
}
|
|
24
|
+
if (!item.amount) {
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
// Analytics API returns amount as a decimal string in fractional cents
|
|
28
|
+
// (e.g. "41280.000000" = 41,280 cents = $412.80). Round to integer cents
|
|
29
|
+
// to stay consistent with the Admin path (estimated_cost.amount).
|
|
30
|
+
const cents = Math.round(parseFloat(item.amount));
|
|
31
|
+
if (!Number.isFinite(cents) || cents <= 0) {
|
|
32
|
+
return [];
|
|
33
|
+
}
|
|
34
|
+
const day = faros_js_client_1.Utils.toDate(item.date);
|
|
35
|
+
const nextDay = new Date(day.getTime() + 24 * 60 * 60 * 1000);
|
|
36
|
+
const organization = {
|
|
37
|
+
uid: this.streamName.source,
|
|
38
|
+
source: this.streamName.source,
|
|
39
|
+
};
|
|
40
|
+
return this.getAssistantMetric({
|
|
41
|
+
startedAt: day,
|
|
42
|
+
endedAt: nextDay,
|
|
43
|
+
assistantMetricType: vcs_1.AssistantMetric.Cost,
|
|
44
|
+
assistantMetricTypeDetail: item.currency,
|
|
45
|
+
value: cents,
|
|
46
|
+
organization,
|
|
47
|
+
userEmail,
|
|
48
|
+
model: item.model ?? undefined,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
async onProcessingComplete(ctx) {
|
|
52
|
+
if (this.skippedActors.size > 0) {
|
|
53
|
+
ctx.logger.info(`Skipped analytics user cost records for ${this.skippedActors.size} deleted/email-less actor(s): ${Array.from(this.skippedActors)
|
|
54
|
+
.sort((a, b) => a.localeCompare(b))
|
|
55
|
+
.join(', ')}`);
|
|
56
|
+
}
|
|
57
|
+
return [];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
exports.AnalyticsUserCost = AnalyticsUserCost;
|
|
61
|
+
//# sourceMappingURL=analytics_user_cost.js.map
|
|
@@ -0,0 +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,qCAAyC;AAOzC,MAAa,iBAAkB,SAAQ,wBAAe;IAAtD;;QACmB,kBAAa,GAAG,IAAI,GAAG,EAAU,CAAC;QAE1C,sBAAiB,GAAoC;YAC5D,qBAAqB;SACtB,CAAC;IA8DJ,CAAC;IA5DC,KAAK,CAAC,OAAO,CACX,MAAqB,EACrB,GAAkB;QAElB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAA+B,CAAC;QAE3D,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC;QACpC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;YACtC,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;gBACxB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7C,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,uEAAuE;QACvE,yEAAyE;QACzE,kEAAkE;QAClE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YAC1C,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,GAAG,GAAG,uBAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAE9D,MAAM,YAAY,GAAW;YAC3B,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;YAC3B,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;SAC/B,CAAC;QAEF,OAAO,IAAI,CAAC,kBAAkB,CAAC;YAC7B,SAAS,EAAE,GAAG;YACd,OAAO,EAAE,OAAO;YAChB,mBAAmB,EAAE,qBAAe,CAAC,IAAI;YACzC,yBAAyB,EAAE,IAAI,CAAC,QAAQ;YACxC,KAAK,EAAE,KAAK;YACZ,YAAY;YACZ,SAAS;YACT,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,SAAS;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,oBAAoB,CACxB,GAAkB;QAElB,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAChC,GAAG,CAAC,MAAM,CAAC,IAAI,CACb,2CAA2C,IAAI,CAAC,aAAa,CAAC,IAAI,iCAAiC,KAAK,CAAC,IAAI,CAC3G,IAAI,CAAC,aAAa,CACnB;iBACE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;iBAClC,IAAI,CAAC,IAAI,CAAC,EAAE,CAChB,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;CACF;AAnED,8CAmEC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { AirbyteRecord } from 'faros-airbyte-cdk';
|
|
2
|
+
import { DestinationModel, DestinationRecord, StreamContext } from '../converter';
|
|
3
|
+
import { ClaudeConverter } from './common';
|
|
4
|
+
export declare class AnalyticsUserUsage extends ClaudeConverter {
|
|
5
|
+
private readonly skippedActors;
|
|
6
|
+
readonly destinationModels: ReadonlyArray<DestinationModel>;
|
|
7
|
+
convert(record: AirbyteRecord, ctx: StreamContext): Promise<ReadonlyArray<DestinationRecord>>;
|
|
8
|
+
onProcessingComplete(ctx: StreamContext): Promise<ReadonlyArray<DestinationRecord>>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AnalyticsUserUsage = void 0;
|
|
4
|
+
const faros_js_client_1 = require("faros-js-client");
|
|
5
|
+
const vcs_1 = require("../common/vcs");
|
|
6
|
+
const common_1 = require("./common");
|
|
7
|
+
const WEB_SEARCH_REQUESTS_METRIC = 'WebSearchRequests';
|
|
8
|
+
const API_REQUESTS_METRIC = 'ApiRequests';
|
|
9
|
+
class AnalyticsUserUsage extends common_1.ClaudeConverter {
|
|
10
|
+
constructor() {
|
|
11
|
+
super(...arguments);
|
|
12
|
+
this.skippedActors = new Set();
|
|
13
|
+
this.destinationModels = [
|
|
14
|
+
'vcs_AssistantMetric',
|
|
15
|
+
'vcs_UserToolUsage',
|
|
16
|
+
];
|
|
17
|
+
}
|
|
18
|
+
async convert(record, ctx) {
|
|
19
|
+
const item = record.record.data;
|
|
20
|
+
const userEmail = item.actor?.email;
|
|
21
|
+
if (!userEmail || item.actor?.deleted) {
|
|
22
|
+
if (item.actor?.user_id) {
|
|
23
|
+
this.skippedActors.add(item.actor.user_id);
|
|
24
|
+
}
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
const day = faros_js_client_1.Utils.toDate(item.date);
|
|
28
|
+
const nextDay = new Date(day.getTime() + 24 * 60 * 60 * 1000);
|
|
29
|
+
const organization = {
|
|
30
|
+
uid: this.streamName.source,
|
|
31
|
+
source: this.streamName.source,
|
|
32
|
+
};
|
|
33
|
+
const model = item.model ?? undefined;
|
|
34
|
+
const res = [];
|
|
35
|
+
if (item.uncached_input_tokens) {
|
|
36
|
+
res.push(...this.getAssistantMetric({
|
|
37
|
+
startedAt: day,
|
|
38
|
+
endedAt: nextDay,
|
|
39
|
+
assistantMetricType: vcs_1.AssistantMetric.InputTokens,
|
|
40
|
+
value: item.uncached_input_tokens,
|
|
41
|
+
organization,
|
|
42
|
+
userEmail,
|
|
43
|
+
model,
|
|
44
|
+
}));
|
|
45
|
+
}
|
|
46
|
+
if (item.output_tokens) {
|
|
47
|
+
res.push(...this.getAssistantMetric({
|
|
48
|
+
startedAt: day,
|
|
49
|
+
endedAt: nextDay,
|
|
50
|
+
assistantMetricType: vcs_1.AssistantMetric.OutputTokens,
|
|
51
|
+
value: item.output_tokens,
|
|
52
|
+
organization,
|
|
53
|
+
userEmail,
|
|
54
|
+
model,
|
|
55
|
+
}));
|
|
56
|
+
}
|
|
57
|
+
if (item.cache_read_input_tokens) {
|
|
58
|
+
res.push(...this.getAssistantMetric({
|
|
59
|
+
startedAt: day,
|
|
60
|
+
endedAt: nextDay,
|
|
61
|
+
assistantMetricType: vcs_1.AssistantMetric.CacheReadTokens,
|
|
62
|
+
value: item.cache_read_input_tokens,
|
|
63
|
+
organization,
|
|
64
|
+
userEmail,
|
|
65
|
+
model,
|
|
66
|
+
}));
|
|
67
|
+
}
|
|
68
|
+
if (item.cache_creation?.ephemeral_5m_input_tokens) {
|
|
69
|
+
res.push(...this.getAssistantMetric({
|
|
70
|
+
startedAt: day,
|
|
71
|
+
endedAt: nextDay,
|
|
72
|
+
assistantMetricType: vcs_1.AssistantMetric.CacheWriteTokens,
|
|
73
|
+
value: item.cache_creation.ephemeral_5m_input_tokens,
|
|
74
|
+
organization,
|
|
75
|
+
userEmail,
|
|
76
|
+
model,
|
|
77
|
+
feature: common_1.ClaudeCodeFeature.Ephemeral5m,
|
|
78
|
+
}));
|
|
79
|
+
}
|
|
80
|
+
if (item.cache_creation?.ephemeral_1h_input_tokens) {
|
|
81
|
+
res.push(...this.getAssistantMetric({
|
|
82
|
+
startedAt: day,
|
|
83
|
+
endedAt: nextDay,
|
|
84
|
+
assistantMetricType: vcs_1.AssistantMetric.CacheWriteTokens,
|
|
85
|
+
value: item.cache_creation.ephemeral_1h_input_tokens,
|
|
86
|
+
organization,
|
|
87
|
+
userEmail,
|
|
88
|
+
model,
|
|
89
|
+
feature: common_1.ClaudeCodeFeature.Ephemeral1h,
|
|
90
|
+
}));
|
|
91
|
+
}
|
|
92
|
+
if (item.server_tool_use?.web_search_requests) {
|
|
93
|
+
res.push(...this.getAssistantMetric({
|
|
94
|
+
startedAt: day,
|
|
95
|
+
endedAt: nextDay,
|
|
96
|
+
assistantMetricType: vcs_1.AssistantMetric.Custom,
|
|
97
|
+
customMetricName: WEB_SEARCH_REQUESTS_METRIC,
|
|
98
|
+
value: item.server_tool_use.web_search_requests,
|
|
99
|
+
organization,
|
|
100
|
+
userEmail,
|
|
101
|
+
model,
|
|
102
|
+
}));
|
|
103
|
+
}
|
|
104
|
+
if (item.requests) {
|
|
105
|
+
res.push(...this.getAssistantMetric({
|
|
106
|
+
startedAt: day,
|
|
107
|
+
endedAt: nextDay,
|
|
108
|
+
assistantMetricType: vcs_1.AssistantMetric.Custom,
|
|
109
|
+
customMetricName: API_REQUESTS_METRIC,
|
|
110
|
+
value: item.requests,
|
|
111
|
+
organization,
|
|
112
|
+
userEmail,
|
|
113
|
+
model,
|
|
114
|
+
}));
|
|
115
|
+
}
|
|
116
|
+
const hasUsage = item.uncached_input_tokens > 0 ||
|
|
117
|
+
item.output_tokens > 0 ||
|
|
118
|
+
item.cache_read_input_tokens > 0 ||
|
|
119
|
+
(item.cache_creation?.ephemeral_5m_input_tokens ?? 0) > 0 ||
|
|
120
|
+
(item.cache_creation?.ephemeral_1h_input_tokens ?? 0) > 0 ||
|
|
121
|
+
(item.server_tool_use?.web_search_requests ?? 0) > 0 ||
|
|
122
|
+
(item.requests ?? 0) > 0;
|
|
123
|
+
if (hasUsage) {
|
|
124
|
+
res.push({
|
|
125
|
+
model: 'vcs_UserToolUsage',
|
|
126
|
+
record: {
|
|
127
|
+
userTool: {
|
|
128
|
+
user: { uid: userEmail, source: this.streamName.source },
|
|
129
|
+
organization,
|
|
130
|
+
tool: {
|
|
131
|
+
category: vcs_1.VCSToolCategory.CodingAssistant,
|
|
132
|
+
detail: vcs_1.VCSToolDetail.ClaudeCode,
|
|
133
|
+
},
|
|
134
|
+
},
|
|
135
|
+
usedAt: day.toISOString(),
|
|
136
|
+
recordedAt: day.toISOString(),
|
|
137
|
+
},
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
return res;
|
|
141
|
+
}
|
|
142
|
+
async onProcessingComplete(ctx) {
|
|
143
|
+
if (this.skippedActors.size > 0) {
|
|
144
|
+
ctx.logger.info(`Skipped analytics user usage records for ${this.skippedActors.size} deleted/email-less actor(s): ${Array.from(this.skippedActors)
|
|
145
|
+
.sort((a, b) => a.localeCompare(b))
|
|
146
|
+
.join(', ')}`);
|
|
147
|
+
}
|
|
148
|
+
return [];
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
exports.AnalyticsUserUsage = AnalyticsUserUsage;
|
|
152
|
+
//# sourceMappingURL=analytics_user_usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics_user_usage.js","sourceRoot":"","sources":["../../../src/converters/claude/analytics_user_usage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,30 +1,11 @@
|
|
|
1
1
|
import { AirbyteRecord } from 'faros-airbyte-cdk';
|
|
2
|
-
import { AssistantMetric, OrgKey } from '../common/vcs';
|
|
3
2
|
import { DestinationModel, DestinationRecord, StreamContext } from '../converter';
|
|
4
|
-
import { ClaudeConverter } from './common';
|
|
5
|
-
export
|
|
6
|
-
|
|
7
|
-
MultiEditTool = "MultiEditTool",
|
|
8
|
-
NotebookEditTool = "NotebookEditTool",
|
|
9
|
-
WriteTool = "WriteTool"
|
|
10
|
-
}
|
|
11
|
-
export interface ClaudeCodeAssistantMetricConfig {
|
|
12
|
-
startedAt: Date;
|
|
13
|
-
endedAt: Date;
|
|
14
|
-
assistantMetricType: AssistantMetric;
|
|
15
|
-
assistantMetricTypeDetail?: string;
|
|
16
|
-
value: number;
|
|
17
|
-
organization: OrgKey;
|
|
18
|
-
userEmail: string;
|
|
19
|
-
customMetricName?: string;
|
|
20
|
-
model?: string;
|
|
21
|
-
feature?: ClaudeCodeFeature;
|
|
22
|
-
terminalType?: string;
|
|
23
|
-
}
|
|
3
|
+
import { ClaudeCodeFeature, ClaudeConverter } from './common';
|
|
4
|
+
export type { ClaudeCodeAssistantMetricConfig } from './common';
|
|
5
|
+
export { ClaudeCodeFeature };
|
|
24
6
|
export declare class ClaudeCodeUsageReport extends ClaudeConverter {
|
|
25
7
|
private readonly skippedApiKeyNames;
|
|
26
8
|
readonly destinationModels: ReadonlyArray<DestinationModel>;
|
|
27
|
-
protected getAssistantMetric(config: ClaudeCodeAssistantMetricConfig): DestinationRecord[];
|
|
28
9
|
convert(record: AirbyteRecord, ctx: StreamContext): Promise<ReadonlyArray<DestinationRecord>>;
|
|
29
10
|
onProcessingComplete(ctx: StreamContext): Promise<ReadonlyArray<DestinationRecord>>;
|
|
30
11
|
}
|
|
@@ -1,19 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ClaudeCodeUsageReport = exports.ClaudeCodeFeature = void 0;
|
|
4
|
-
const common_1 = require("faros-airbyte-common/common");
|
|
5
4
|
const faros_js_client_1 = require("faros-js-client");
|
|
6
|
-
const lodash_1 = require("lodash");
|
|
7
5
|
const vcs_1 = require("../common/vcs");
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
ClaudeCodeFeature["EditTool"] = "EditTool";
|
|
12
|
-
ClaudeCodeFeature["MultiEditTool"] = "MultiEditTool";
|
|
13
|
-
ClaudeCodeFeature["NotebookEditTool"] = "NotebookEditTool";
|
|
14
|
-
ClaudeCodeFeature["WriteTool"] = "WriteTool";
|
|
15
|
-
})(ClaudeCodeFeature || (exports.ClaudeCodeFeature = ClaudeCodeFeature = {}));
|
|
16
|
-
class ClaudeCodeUsageReport extends common_2.ClaudeConverter {
|
|
6
|
+
const common_1 = require("./common");
|
|
7
|
+
Object.defineProperty(exports, "ClaudeCodeFeature", { enumerable: true, get: function () { return common_1.ClaudeCodeFeature; } });
|
|
8
|
+
class ClaudeCodeUsageReport extends common_1.ClaudeConverter {
|
|
17
9
|
constructor() {
|
|
18
10
|
super(...arguments);
|
|
19
11
|
this.skippedApiKeyNames = new Set();
|
|
@@ -22,57 +14,6 @@ class ClaudeCodeUsageReport extends common_2.ClaudeConverter {
|
|
|
22
14
|
'vcs_UserToolUsage',
|
|
23
15
|
];
|
|
24
16
|
}
|
|
25
|
-
getAssistantMetric(config) {
|
|
26
|
-
const { startedAt, endedAt, assistantMetricType, assistantMetricTypeDetail, value, organization, userEmail, customMetricName, model, feature, terminalType, } = config;
|
|
27
|
-
return [
|
|
28
|
-
{
|
|
29
|
-
model: 'vcs_AssistantMetric',
|
|
30
|
-
record: {
|
|
31
|
-
uid: (0, common_1.digest)([]
|
|
32
|
-
.concat(
|
|
33
|
-
// original fields (required) to be included in the digest
|
|
34
|
-
...[
|
|
35
|
-
vcs_1.VCSToolDetail.ClaudeCode,
|
|
36
|
-
assistantMetricType,
|
|
37
|
-
startedAt.toISOString(),
|
|
38
|
-
organization.uid,
|
|
39
|
-
userEmail,
|
|
40
|
-
customMetricName,
|
|
41
|
-
],
|
|
42
|
-
// newer fields (optional) to be included in the digest
|
|
43
|
-
...[
|
|
44
|
-
{ key: 'model', value: model },
|
|
45
|
-
{ key: 'feature', value: feature },
|
|
46
|
-
{ key: 'terminal_type', value: terminalType },
|
|
47
|
-
]
|
|
48
|
-
.filter((v) => !(0, lodash_1.isNil)(v.value))
|
|
49
|
-
.map((v) => `${v.key}:${v.value}`))
|
|
50
|
-
.join('__')),
|
|
51
|
-
source: this.source,
|
|
52
|
-
startedAt,
|
|
53
|
-
endedAt,
|
|
54
|
-
type: {
|
|
55
|
-
category: assistantMetricType,
|
|
56
|
-
...(assistantMetricTypeDetail && {
|
|
57
|
-
detail: assistantMetricTypeDetail,
|
|
58
|
-
}),
|
|
59
|
-
...(customMetricName && { detail: customMetricName }),
|
|
60
|
-
},
|
|
61
|
-
valueType: 'Int',
|
|
62
|
-
value: String(value),
|
|
63
|
-
organization,
|
|
64
|
-
user: { uid: userEmail, source: this.streamName.source },
|
|
65
|
-
tool: {
|
|
66
|
-
category: vcs_1.VCSToolCategory.CodingAssistant,
|
|
67
|
-
detail: vcs_1.VCSToolDetail.ClaudeCode,
|
|
68
|
-
},
|
|
69
|
-
...(model && { model }),
|
|
70
|
-
...(feature && { feature }),
|
|
71
|
-
...(terminalType && { editor: terminalType }),
|
|
72
|
-
},
|
|
73
|
-
},
|
|
74
|
-
];
|
|
75
|
-
}
|
|
76
17
|
async convert(record, ctx) {
|
|
77
18
|
const usageItem = record.record.data;
|
|
78
19
|
if (!usageItem.actor?.email_address) {
|
|
@@ -245,7 +186,7 @@ class ClaudeCodeUsageReport extends common_2.ClaudeConverter {
|
|
|
245
186
|
value: usageItem.tool_actions.edit_tool.accepted,
|
|
246
187
|
organization,
|
|
247
188
|
userEmail,
|
|
248
|
-
feature: ClaudeCodeFeature.EditTool,
|
|
189
|
+
feature: common_1.ClaudeCodeFeature.EditTool,
|
|
249
190
|
terminalType,
|
|
250
191
|
}));
|
|
251
192
|
}
|
|
@@ -257,7 +198,7 @@ class ClaudeCodeUsageReport extends common_2.ClaudeConverter {
|
|
|
257
198
|
value: usageItem.tool_actions.edit_tool.rejected,
|
|
258
199
|
organization,
|
|
259
200
|
userEmail,
|
|
260
|
-
feature: ClaudeCodeFeature.EditTool,
|
|
201
|
+
feature: common_1.ClaudeCodeFeature.EditTool,
|
|
261
202
|
terminalType,
|
|
262
203
|
}));
|
|
263
204
|
}
|
|
@@ -272,7 +213,7 @@ class ClaudeCodeUsageReport extends common_2.ClaudeConverter {
|
|
|
272
213
|
value: usageItem.tool_actions.multi_edit_tool.accepted,
|
|
273
214
|
organization,
|
|
274
215
|
userEmail,
|
|
275
|
-
feature: ClaudeCodeFeature.MultiEditTool,
|
|
216
|
+
feature: common_1.ClaudeCodeFeature.MultiEditTool,
|
|
276
217
|
terminalType,
|
|
277
218
|
}));
|
|
278
219
|
}
|
|
@@ -284,7 +225,7 @@ class ClaudeCodeUsageReport extends common_2.ClaudeConverter {
|
|
|
284
225
|
value: usageItem.tool_actions.multi_edit_tool.rejected,
|
|
285
226
|
organization,
|
|
286
227
|
userEmail,
|
|
287
|
-
feature: ClaudeCodeFeature.MultiEditTool,
|
|
228
|
+
feature: common_1.ClaudeCodeFeature.MultiEditTool,
|
|
288
229
|
terminalType,
|
|
289
230
|
}));
|
|
290
231
|
}
|
|
@@ -299,7 +240,7 @@ class ClaudeCodeUsageReport extends common_2.ClaudeConverter {
|
|
|
299
240
|
value: usageItem.tool_actions.notebook_edit_tool.accepted,
|
|
300
241
|
organization,
|
|
301
242
|
userEmail,
|
|
302
|
-
feature: ClaudeCodeFeature.NotebookEditTool,
|
|
243
|
+
feature: common_1.ClaudeCodeFeature.NotebookEditTool,
|
|
303
244
|
terminalType,
|
|
304
245
|
}));
|
|
305
246
|
}
|
|
@@ -311,7 +252,7 @@ class ClaudeCodeUsageReport extends common_2.ClaudeConverter {
|
|
|
311
252
|
value: usageItem.tool_actions.notebook_edit_tool.rejected,
|
|
312
253
|
organization,
|
|
313
254
|
userEmail,
|
|
314
|
-
feature: ClaudeCodeFeature.NotebookEditTool,
|
|
255
|
+
feature: common_1.ClaudeCodeFeature.NotebookEditTool,
|
|
315
256
|
terminalType,
|
|
316
257
|
}));
|
|
317
258
|
}
|
|
@@ -326,7 +267,7 @@ class ClaudeCodeUsageReport extends common_2.ClaudeConverter {
|
|
|
326
267
|
value: usageItem.tool_actions.write_tool.accepted,
|
|
327
268
|
organization,
|
|
328
269
|
userEmail,
|
|
329
|
-
feature: ClaudeCodeFeature.WriteTool,
|
|
270
|
+
feature: common_1.ClaudeCodeFeature.WriteTool,
|
|
330
271
|
terminalType,
|
|
331
272
|
}));
|
|
332
273
|
}
|
|
@@ -338,7 +279,7 @@ class ClaudeCodeUsageReport extends common_2.ClaudeConverter {
|
|
|
338
279
|
value: usageItem.tool_actions.write_tool.rejected,
|
|
339
280
|
organization,
|
|
340
281
|
userEmail,
|
|
341
|
-
feature: ClaudeCodeFeature.WriteTool,
|
|
282
|
+
feature: common_1.ClaudeCodeFeature.WriteTool,
|
|
342
283
|
terminalType,
|
|
343
284
|
}));
|
|
344
285
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude_code_usage_report.js","sourceRoot":"","sources":["../../../src/converters/claude/claude_code_usage_report.ts"],"names":[],"mappings":";;;AAEA,
|
|
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,6 +1,29 @@
|
|
|
1
1
|
import { AirbyteRecord } from 'faros-airbyte-cdk';
|
|
2
|
-
import {
|
|
2
|
+
import { AssistantMetric, OrgKey } from '../common/vcs';
|
|
3
|
+
import { Converter, DestinationRecord } from '../converter';
|
|
4
|
+
export declare enum ClaudeCodeFeature {
|
|
5
|
+
EditTool = "EditTool",
|
|
6
|
+
MultiEditTool = "MultiEditTool",
|
|
7
|
+
NotebookEditTool = "NotebookEditTool",
|
|
8
|
+
WriteTool = "WriteTool",
|
|
9
|
+
Ephemeral5m = "Ephemeral5m",
|
|
10
|
+
Ephemeral1h = "Ephemeral1h"
|
|
11
|
+
}
|
|
12
|
+
export interface ClaudeCodeAssistantMetricConfig {
|
|
13
|
+
startedAt: Date;
|
|
14
|
+
endedAt: Date;
|
|
15
|
+
assistantMetricType: AssistantMetric;
|
|
16
|
+
assistantMetricTypeDetail?: string;
|
|
17
|
+
value: number;
|
|
18
|
+
organization: OrgKey;
|
|
19
|
+
userEmail: string;
|
|
20
|
+
customMetricName?: string;
|
|
21
|
+
model?: string;
|
|
22
|
+
feature?: ClaudeCodeFeature;
|
|
23
|
+
terminalType?: string;
|
|
24
|
+
}
|
|
3
25
|
export declare abstract class ClaudeConverter extends Converter {
|
|
4
26
|
source: string;
|
|
5
27
|
id(record: AirbyteRecord): any;
|
|
28
|
+
protected getAssistantMetric(config: ClaudeCodeAssistantMetricConfig): DestinationRecord[];
|
|
6
29
|
}
|
|
@@ -1,7 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ClaudeConverter = void 0;
|
|
3
|
+
exports.ClaudeConverter = exports.ClaudeCodeFeature = void 0;
|
|
4
|
+
const common_1 = require("faros-airbyte-common/common");
|
|
5
|
+
const lodash_1 = require("lodash");
|
|
6
|
+
const vcs_1 = require("../common/vcs");
|
|
4
7
|
const converter_1 = require("../converter");
|
|
8
|
+
var ClaudeCodeFeature;
|
|
9
|
+
(function (ClaudeCodeFeature) {
|
|
10
|
+
ClaudeCodeFeature["EditTool"] = "EditTool";
|
|
11
|
+
ClaudeCodeFeature["MultiEditTool"] = "MultiEditTool";
|
|
12
|
+
ClaudeCodeFeature["NotebookEditTool"] = "NotebookEditTool";
|
|
13
|
+
ClaudeCodeFeature["WriteTool"] = "WriteTool";
|
|
14
|
+
ClaudeCodeFeature["Ephemeral5m"] = "Ephemeral5m";
|
|
15
|
+
ClaudeCodeFeature["Ephemeral1h"] = "Ephemeral1h";
|
|
16
|
+
})(ClaudeCodeFeature || (exports.ClaudeCodeFeature = ClaudeCodeFeature = {}));
|
|
5
17
|
class ClaudeConverter extends converter_1.Converter {
|
|
6
18
|
constructor() {
|
|
7
19
|
super(...arguments);
|
|
@@ -10,6 +22,57 @@ class ClaudeConverter extends converter_1.Converter {
|
|
|
10
22
|
id(record) {
|
|
11
23
|
return record?.record?.data?.id;
|
|
12
24
|
}
|
|
25
|
+
getAssistantMetric(config) {
|
|
26
|
+
const { startedAt, endedAt, assistantMetricType, assistantMetricTypeDetail, value, organization, userEmail, customMetricName, model, feature, terminalType, } = config;
|
|
27
|
+
return [
|
|
28
|
+
{
|
|
29
|
+
model: 'vcs_AssistantMetric',
|
|
30
|
+
record: {
|
|
31
|
+
uid: (0, common_1.digest)([]
|
|
32
|
+
.concat(
|
|
33
|
+
// original fields (required) to be included in the digest
|
|
34
|
+
...[
|
|
35
|
+
vcs_1.VCSToolDetail.ClaudeCode,
|
|
36
|
+
assistantMetricType,
|
|
37
|
+
startedAt.toISOString(),
|
|
38
|
+
organization.uid,
|
|
39
|
+
userEmail,
|
|
40
|
+
customMetricName,
|
|
41
|
+
],
|
|
42
|
+
// newer fields (optional) to be included in the digest
|
|
43
|
+
...[
|
|
44
|
+
{ key: 'model', value: model },
|
|
45
|
+
{ key: 'feature', value: feature },
|
|
46
|
+
{ key: 'terminal_type', value: terminalType },
|
|
47
|
+
]
|
|
48
|
+
.filter((v) => !(0, lodash_1.isNil)(v.value))
|
|
49
|
+
.map((v) => `${v.key}:${v.value}`))
|
|
50
|
+
.join('__')),
|
|
51
|
+
source: this.source,
|
|
52
|
+
startedAt,
|
|
53
|
+
endedAt,
|
|
54
|
+
type: {
|
|
55
|
+
category: assistantMetricType,
|
|
56
|
+
...(assistantMetricTypeDetail && {
|
|
57
|
+
detail: assistantMetricTypeDetail,
|
|
58
|
+
}),
|
|
59
|
+
...(customMetricName && { detail: customMetricName }),
|
|
60
|
+
},
|
|
61
|
+
valueType: 'Int',
|
|
62
|
+
value: String(value),
|
|
63
|
+
organization,
|
|
64
|
+
user: { uid: userEmail, source: this.streamName.source },
|
|
65
|
+
tool: {
|
|
66
|
+
category: vcs_1.VCSToolCategory.CodingAssistant,
|
|
67
|
+
detail: vcs_1.VCSToolDetail.ClaudeCode,
|
|
68
|
+
},
|
|
69
|
+
...(model && { model }),
|
|
70
|
+
...(feature && { feature }),
|
|
71
|
+
...(terminalType && { editor: terminalType }),
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
];
|
|
75
|
+
}
|
|
13
76
|
}
|
|
14
77
|
exports.ClaudeConverter = ClaudeConverter;
|
|
15
78
|
//# sourceMappingURL=common.js.map
|
|
@@ -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":";;;AACA,wDAAmD;AACnD,mCAA6B;AAE7B,uCAKuB;AACvB,4CAA0D;AAE1D,IAAY,iBAOX;AAPD,WAAY,iBAAiB;IAC3B,0CAAqB,CAAA;IACrB,oDAA+B,CAAA;IAC/B,0DAAqC,CAAA;IACrC,4CAAuB,CAAA;IACvB,gDAA2B,CAAA;IAC3B,gDAA2B,CAAA;AAC7B,CAAC,EAPW,iBAAiB,iCAAjB,iBAAiB,QAO5B;AAgBD,MAAsB,eAAgB,SAAQ,qBAAS;IAAvD;;QACE,WAAM,GAAG,QAAQ,CAAC;IA2EpB,CAAC;IAzEC,EAAE,CAAC,MAAqB;QACtB,OAAO,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;IAClC,CAAC;IAES,kBAAkB,CAC1B,MAAuC;QAEvC,MAAM,EACJ,SAAS,EACT,OAAO,EACP,mBAAmB,EACnB,yBAAyB,EACzB,KAAK,EACL,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,KAAK,EACL,OAAO,EACP,YAAY,GACb,GAAG,MAAM,CAAC;QAEX,OAAO;YACL;gBACE,KAAK,EAAE,qBAAqB;gBAC5B,MAAM,EAAE;oBACN,GAAG,EAAE,IAAA,eAAM,EACT,EAAE;yBACC,MAAM;oBACL,0DAA0D;oBAC1D,GAAG;wBACD,mBAAa,CAAC,UAAU;wBACxB,mBAAmB;wBACnB,SAAS,CAAC,WAAW,EAAE;wBACvB,YAAY,CAAC,GAAG;wBAChB,SAAS;wBACT,gBAAgB;qBACjB;oBACD,uDAAuD;oBACvD,GAAG;wBACD,EAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAC;wBAC5B,EAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAC;wBAChC,EAAC,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,YAAY,EAAC;qBAC5C;yBACE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAA,cAAK,EAAC,CAAC,CAAC,KAAK,CAAC,CAAC;yBAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CACrC;yBACA,IAAI,CAAC,IAAI,CAAC,CACd;oBACD,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,SAAS;oBACT,OAAO;oBACP,IAAI,EAAE;wBACJ,QAAQ,EAAE,mBAAmB;wBAC7B,GAAG,CAAC,yBAAyB,IAAI;4BAC/B,MAAM,EAAE,yBAAyB;yBAClC,CAAC;wBACF,GAAG,CAAC,gBAAgB,IAAI,EAAC,MAAM,EAAE,gBAAgB,EAAC,CAAC;qBACpD;oBACD,SAAS,EAAE,KAAK;oBAChB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;oBACpB,YAAY;oBACZ,IAAI,EAAE,EAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,EAAC;oBACtD,IAAI,EAAE;wBACJ,QAAQ,EAAE,qBAAe,CAAC,eAAe;wBACzC,MAAM,EAAE,mBAAa,CAAC,UAAU;qBACjC;oBACD,GAAG,CAAC,KAAK,IAAI,EAAC,KAAK,EAAC,CAAC;oBACrB,GAAG,CAAC,OAAO,IAAI,EAAC,OAAO,EAAC,CAAC;oBACzB,GAAG,CAAC,YAAY,IAAI,EAAC,MAAM,EAAE,YAAY,EAAC,CAAC;iBAC5C;aACF;SACF,CAAC;IACJ,CAAC;CACF;AA5ED,0CA4EC"}
|