codebuff 1.0.266 → 1.0.268
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/cli.d.ts +4 -1
- package/dist/cli.js +13 -0
- package/dist/cli.js.map +1 -1
- package/dist/code-map/parse.d.ts.map +1 -1
- package/dist/code-map/parse.js +4 -0
- package/dist/code-map/parse.js.map +1 -1
- package/dist/code-map/tsconfig.tsbuildinfo +1 -1
- package/dist/common/browser-actions.d.ts +46 -46
- package/dist/common/json-config/__tests__/__snapshots__/stringify-schema.test.js.snap +119 -0
- package/dist/common/json-config/constants.d.ts +6 -6
- package/dist/common/types/message.d.ts +16 -16
- package/dist/common/util/credentials.d.ts +4 -4
- package/dist/display.d.ts +2 -0
- package/dist/display.js +8 -0
- package/dist/display.js.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/utils/spinner.d.ts +1 -0
- package/dist/utils/spinner.js +8 -1
- package/dist/utils/spinner.js.map +1 -1
- package/dist/utils/terminal.d.ts +2 -2
- package/dist/utils/terminal.js +46 -34
- package/dist/utils/terminal.js.map +1 -1
- package/package.json +1 -1
- package/dist/code-map/__mocks__/tree-sitter-typescript.d.ts +0 -12
- package/dist/code-map/__mocks__/tree-sitter-typescript.d.ts.map +0 -1
- package/dist/code-map/__mocks__/tree-sitter-typescript.js +0 -14
- package/dist/code-map/__mocks__/tree-sitter-typescript.js.map +0 -1
- package/dist/code-map/__mocks__/wasm-mock.d.ts +0 -2
- package/dist/code-map/__mocks__/wasm-mock.d.ts.map +0 -1
- package/dist/code-map/__mocks__/wasm-mock.js +0 -3
- package/dist/code-map/__mocks__/wasm-mock.js.map +0 -1
- package/dist/code-map/__tests__/parse.test.d.ts +0 -2
- package/dist/code-map/__tests__/parse.test.d.ts.map +0 -1
- package/dist/code-map/__tests__/parse.test.js +0 -231
- package/dist/code-map/__tests__/parse.test.js.map +0 -1
- package/dist/code-map/__tests__/test-langs/consumer.d.ts +0 -2
- package/dist/code-map/__tests__/test-langs/consumer.d.ts.map +0 -1
- package/dist/code-map/__tests__/test-langs/consumer.js +0 -6
- package/dist/code-map/__tests__/test-langs/consumer.js.map +0 -1
- package/dist/code-map/__tests__/test-langs/empty.d.ts +0 -1
- package/dist/code-map/__tests__/test-langs/empty.d.ts.map +0 -1
- package/dist/code-map/__tests__/test-langs/empty.js +0 -2
- package/dist/code-map/__tests__/test-langs/empty.js.map +0 -1
- package/dist/code-map/__tests__/test-langs/test.d.ts +0 -12
- package/dist/code-map/__tests__/test-langs/test.d.ts.map +0 -1
- package/dist/code-map/__tests__/test-langs/test.js +0 -23
- package/dist/code-map/__tests__/test-langs/test.js.map +0 -1
- package/dist/code-map/__tests__/test-langs/unused.d.ts +0 -2
- package/dist/code-map/__tests__/test-langs/unused.d.ts.map +0 -1
- package/dist/code-map/__tests__/test-langs/unused.js +0 -7
- package/dist/code-map/__tests__/test-langs/unused.js.map +0 -1
- package/dist/code-map/__tests__/test-langs/utils1.d.ts +0 -2
- package/dist/code-map/__tests__/test-langs/utils1.d.ts.map +0 -1
- package/dist/code-map/__tests__/test-langs/utils1.js +0 -7
- package/dist/code-map/__tests__/test-langs/utils1.js.map +0 -1
- package/dist/code-map/__tests__/test-langs/utils2.d.ts +0 -2
- package/dist/code-map/__tests__/test-langs/utils2.d.ts.map +0 -1
- package/dist/code-map/__tests__/test-langs/utils2.js +0 -8
- package/dist/code-map/__tests__/test-langs/utils2.js.map +0 -1
- package/dist/code-map/__tests__/tree-sitter-minimal.test.d.ts +0 -2
- package/dist/code-map/__tests__/tree-sitter-minimal.test.d.ts.map +0 -1
- package/dist/code-map/__tests__/tree-sitter-minimal.test.js +0 -79
- package/dist/code-map/__tests__/tree-sitter-minimal.test.js.map +0 -1
- package/dist/code-map/jest.config.d.ts +0 -4
- package/dist/code-map/jest.config.d.ts.map +0 -1
- package/dist/code-map/jest.config.js +0 -18
- package/dist/code-map/jest.config.js.map +0 -1
- package/dist/code-map/parse.test.d.ts +0 -2
- package/dist/code-map/parse.test.d.ts.map +0 -1
- package/dist/code-map/parse.test.js +0 -218
- package/dist/code-map/parse.test.js.map +0 -1
- package/dist/code-map/scripts/tree-sitter-test.cjs +0 -27
- package/dist/code-map/scripts/tree-sitter-test.cjs.map +0 -1
- package/dist/code-map/scripts/tree-sitter-test.d.cts +0 -2
- package/dist/code-map/scripts/tree-sitter-test.d.cts.map +0 -1
- package/dist/code-map/scripts/tree-sitter-test.d.ts +0 -2
- package/dist/code-map/scripts/tree-sitter-test.d.ts.map +0 -1
- package/dist/code-map/scripts/tree-sitter-test.js +0 -54
- package/dist/code-map/scripts/tree-sitter-test.js.map +0 -1
- package/dist/code-map/test-parser.d.ts +0 -2
- package/dist/code-map/test-parser.d.ts.map +0 -1
- package/dist/code-map/test-parser.js +0 -42
- package/dist/code-map/test-parser.js.map +0 -1
- package/dist/common/bigquery/client.d.ts +0 -15
- package/dist/common/bigquery/client.js +0 -265
- package/dist/common/bigquery/client.js.map +0 -1
- package/dist/common/bigquery/schema.d.ts +0 -55
- package/dist/common/bigquery/schema.js +0 -24
- package/dist/common/bigquery/schema.js.map +0 -1
- package/dist/common/util/file-metadata.d.ts +0 -9
- package/dist/common/util/file-metadata.js +0 -24
- package/dist/common/util/file-metadata.js.map +0 -1
|
@@ -1,265 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.setupBigQuery = setupBigQuery;
|
|
4
|
-
exports.insertTrace = insertTrace;
|
|
5
|
-
exports.insertRelabel = insertRelabel;
|
|
6
|
-
exports.getRecentTraces = getRecentTraces;
|
|
7
|
-
exports.getRecentRelabels = getRecentRelabels;
|
|
8
|
-
exports.getTracesWithoutRelabels = getTracesWithoutRelabels;
|
|
9
|
-
exports.getTracesWithRelabels = getTracesWithRelabels;
|
|
10
|
-
exports.getTracesAndRelabelsForUser = getTracesAndRelabelsForUser;
|
|
11
|
-
const bigquery_1 = require("@google-cloud/bigquery");
|
|
12
|
-
const logger_1 = require("../util/logger");
|
|
13
|
-
const schema_1 = require("./schema");
|
|
14
|
-
const DATASET = process.env.NEXT_PUBLIC_CB_ENVIRONMENT === 'production'
|
|
15
|
-
? 'codebuff_data'
|
|
16
|
-
: 'codebuff_data_dev';
|
|
17
|
-
const TRACES_TABLE = 'traces';
|
|
18
|
-
const RELABELS_TABLE = 'relabels';
|
|
19
|
-
// Create a single BigQuery client instance to be used by all functions
|
|
20
|
-
let client = null;
|
|
21
|
-
function getClient() {
|
|
22
|
-
if (!client) {
|
|
23
|
-
throw new Error('BigQuery client not initialized. Call setupBigQuery first.');
|
|
24
|
-
}
|
|
25
|
-
return client;
|
|
26
|
-
}
|
|
27
|
-
async function setupBigQuery(dataset = DATASET) {
|
|
28
|
-
try {
|
|
29
|
-
logger_1.logger.info('Creating BigQuery client...');
|
|
30
|
-
client = new bigquery_1.BigQuery();
|
|
31
|
-
logger_1.logger.info('BigQuery client created, initializing dataset...');
|
|
32
|
-
// Ensure dataset exists
|
|
33
|
-
const [ds] = await client.dataset(dataset).get({ autoCreate: true });
|
|
34
|
-
logger_1.logger.info({ dataset }, 'Dataset initialized');
|
|
35
|
-
// Ensure tables exist
|
|
36
|
-
logger_1.logger.info('Creating/verifying tables...');
|
|
37
|
-
await ds.table(TRACES_TABLE).get({
|
|
38
|
-
autoCreate: true,
|
|
39
|
-
schema: schema_1.TRACES_SCHEMA,
|
|
40
|
-
timePartitioning: {
|
|
41
|
-
type: 'MONTH',
|
|
42
|
-
field: 'created_at',
|
|
43
|
-
},
|
|
44
|
-
clustering: {
|
|
45
|
-
fields: ['user_id', 'agent_step_id'],
|
|
46
|
-
},
|
|
47
|
-
});
|
|
48
|
-
await ds.table(RELABELS_TABLE).get({
|
|
49
|
-
autoCreate: true,
|
|
50
|
-
schema: schema_1.RELABELS_SCHEMA,
|
|
51
|
-
timePartitioning: {
|
|
52
|
-
type: 'MONTH',
|
|
53
|
-
field: 'created_at',
|
|
54
|
-
},
|
|
55
|
-
clustering: {
|
|
56
|
-
fields: ['user_id', 'agent_step_id'],
|
|
57
|
-
},
|
|
58
|
-
});
|
|
59
|
-
logger_1.logger.info('Tables initialized successfully');
|
|
60
|
-
}
|
|
61
|
-
catch (error) {
|
|
62
|
-
logger_1.logger.error({
|
|
63
|
-
error,
|
|
64
|
-
stack: error.stack,
|
|
65
|
-
message: error.message,
|
|
66
|
-
name: error.name,
|
|
67
|
-
code: error.code,
|
|
68
|
-
details: error.details,
|
|
69
|
-
}, 'Failed to initialize BigQuery');
|
|
70
|
-
throw error; // Re-throw to be caught by caller
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
async function insertTrace(trace, dataset = DATASET) {
|
|
74
|
-
try {
|
|
75
|
-
// Create a copy of the trace and stringify payload if needed
|
|
76
|
-
const traceToInsert = {
|
|
77
|
-
...trace,
|
|
78
|
-
payload: trace.payload && typeof trace.payload !== 'string'
|
|
79
|
-
? JSON.stringify(trace.payload)
|
|
80
|
-
: trace.payload,
|
|
81
|
-
};
|
|
82
|
-
await getClient().dataset(dataset).table(TRACES_TABLE).insert(traceToInsert);
|
|
83
|
-
logger_1.logger.debug({ traceId: trace.id, type: trace.type }, 'Inserted trace into BigQuery');
|
|
84
|
-
return true;
|
|
85
|
-
}
|
|
86
|
-
catch (error) {
|
|
87
|
-
logger_1.logger.error({ error, traceId: trace.id }, 'Failed to insert trace into BigQuery');
|
|
88
|
-
return false;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
async function insertRelabel(relabel, dataset = DATASET) {
|
|
92
|
-
try {
|
|
93
|
-
// Stringify payload if needed
|
|
94
|
-
const relabelToInsert = {
|
|
95
|
-
...relabel,
|
|
96
|
-
payload: relabel.payload && typeof relabel.payload !== 'string'
|
|
97
|
-
? JSON.stringify(relabel.payload)
|
|
98
|
-
: relabel.payload,
|
|
99
|
-
};
|
|
100
|
-
await getClient().dataset(dataset).table(RELABELS_TABLE).insert(relabelToInsert);
|
|
101
|
-
logger_1.logger.debug({ relabelId: relabel.id }, 'Inserted relabel into BigQuery');
|
|
102
|
-
return true;
|
|
103
|
-
}
|
|
104
|
-
catch (error) {
|
|
105
|
-
logger_1.logger.error({ error, relabelId: relabel.id }, 'Failed to insert relabel into BigQuery');
|
|
106
|
-
return false;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
async function getRecentTraces(limit = 10, dataset = DATASET) {
|
|
110
|
-
const query = `
|
|
111
|
-
SELECT * FROM ${dataset}.${TRACES_TABLE}
|
|
112
|
-
ORDER BY created_at DESC
|
|
113
|
-
LIMIT ${limit}
|
|
114
|
-
`;
|
|
115
|
-
const [rows] = await getClient().query(query);
|
|
116
|
-
// Parse the payload as JSON if it's a string
|
|
117
|
-
return rows.map((row) => ({
|
|
118
|
-
...row,
|
|
119
|
-
payload: typeof row.payload === 'string' ? JSON.parse(row.payload) : row.payload,
|
|
120
|
-
}));
|
|
121
|
-
}
|
|
122
|
-
async function getRecentRelabels(limit = 10, dataset = DATASET) {
|
|
123
|
-
const query = `
|
|
124
|
-
SELECT * FROM ${dataset}.${RELABELS_TABLE}
|
|
125
|
-
ORDER BY created_at DESC
|
|
126
|
-
LIMIT ${limit}
|
|
127
|
-
`;
|
|
128
|
-
const [rows] = await getClient().query(query);
|
|
129
|
-
// Parse the payload as JSON if it's a string
|
|
130
|
-
return rows.map((row) => ({
|
|
131
|
-
...row,
|
|
132
|
-
payload: typeof row.payload === 'string' ? JSON.parse(row.payload) : row.payload,
|
|
133
|
-
}));
|
|
134
|
-
}
|
|
135
|
-
async function getTracesWithoutRelabels(model, limit = 100, userId = undefined, dataset = DATASET) {
|
|
136
|
-
// TODO: Optimize query, maybe only get traces in last 30 days etc
|
|
137
|
-
const query = `
|
|
138
|
-
SELECT t.*
|
|
139
|
-
FROM \`${dataset}.${TRACES_TABLE}\` t
|
|
140
|
-
LEFT JOIN (
|
|
141
|
-
SELECT r.agent_step_id, r.user_id, JSON_EXTRACT_SCALAR(r.payload, '$.user_input_id') as user_input_id
|
|
142
|
-
FROM \`${dataset}.${RELABELS_TABLE}\` r
|
|
143
|
-
WHERE r.model = '${model}'
|
|
144
|
-
${userId ? `AND r.user_id = '${userId}'` : ''}
|
|
145
|
-
) r
|
|
146
|
-
ON t.agent_step_id = r.agent_step_id
|
|
147
|
-
AND t.user_id = r.user_id
|
|
148
|
-
AND JSON_EXTRACT_SCALAR(t.payload, '$.user_input_id') = r.user_input_id
|
|
149
|
-
WHERE t.type = 'get-relevant-files'
|
|
150
|
-
AND r.agent_step_id IS NULL
|
|
151
|
-
${userId ? `AND t.user_id = '${userId}'` : ''}
|
|
152
|
-
ORDER BY t.created_at DESC
|
|
153
|
-
LIMIT ${limit}
|
|
154
|
-
`;
|
|
155
|
-
const [rows] = await getClient().query(query);
|
|
156
|
-
// Parse the payload as JSON if it's a string
|
|
157
|
-
return rows.map((row) => ({
|
|
158
|
-
...row,
|
|
159
|
-
payload: typeof row.payload === 'string' ? JSON.parse(row.payload) : row.payload,
|
|
160
|
-
}));
|
|
161
|
-
}
|
|
162
|
-
async function getTracesWithRelabels(model, limit = 100, dataset = DATASET) {
|
|
163
|
-
// Get traces that DO have matching relabels for the specified model
|
|
164
|
-
const query = `
|
|
165
|
-
SELECT
|
|
166
|
-
ANY_VALUE(t) as trace,
|
|
167
|
-
ARRAY_AGG(r ORDER BY r.created_at DESC LIMIT 1)[OFFSET(0)] as relabel
|
|
168
|
-
FROM \`${dataset}.${TRACES_TABLE}\` t
|
|
169
|
-
INNER JOIN (
|
|
170
|
-
SELECT *
|
|
171
|
-
FROM \`${dataset}.${RELABELS_TABLE}\` r
|
|
172
|
-
WHERE r.model = '${model}'
|
|
173
|
-
) r
|
|
174
|
-
ON t.agent_step_id = r.agent_step_id
|
|
175
|
-
AND t.user_id = r.user_id
|
|
176
|
-
AND JSON_EXTRACT_SCALAR(t.payload, '$.user_input_id') = JSON_EXTRACT_SCALAR(r.payload, '$.user_input_id')
|
|
177
|
-
WHERE t.type = 'get-relevant-files'
|
|
178
|
-
AND JSON_EXTRACT_SCALAR(t.payload, '$.output') IS NOT NULL
|
|
179
|
-
AND JSON_EXTRACT_SCALAR(r.payload, '$.output') IS NOT NULL
|
|
180
|
-
GROUP BY t.agent_step_id
|
|
181
|
-
ORDER BY MAX(t.created_at) DESC
|
|
182
|
-
LIMIT ${limit}
|
|
183
|
-
`;
|
|
184
|
-
const [rows] = await getClient().query(query);
|
|
185
|
-
// Filter out any results where either trace or relabel data is missing
|
|
186
|
-
const res = rows
|
|
187
|
-
.filter((row) => row.trace && row.relabel)
|
|
188
|
-
.map((row) => ({
|
|
189
|
-
trace: row.trace,
|
|
190
|
-
relabel: row.relabel,
|
|
191
|
-
}));
|
|
192
|
-
// Parse the payload as JSON if it's a string
|
|
193
|
-
return res.map((row) => ({
|
|
194
|
-
...row,
|
|
195
|
-
trace: {
|
|
196
|
-
...row.trace,
|
|
197
|
-
payload: typeof row.trace.payload === 'string'
|
|
198
|
-
? JSON.parse(row.trace.payload)
|
|
199
|
-
: row.trace.payload,
|
|
200
|
-
},
|
|
201
|
-
relabel: {
|
|
202
|
-
...row.relabel,
|
|
203
|
-
payload: typeof row.relabel.payload === 'string'
|
|
204
|
-
? JSON.parse(row.relabel.payload)
|
|
205
|
-
: row.relabel.payload,
|
|
206
|
-
},
|
|
207
|
-
}));
|
|
208
|
-
}
|
|
209
|
-
async function getTracesAndRelabelsForUser(userId, limit = 50, dataset = DATASET) {
|
|
210
|
-
// Get recent traces for the user and any associated relabels
|
|
211
|
-
const query = `
|
|
212
|
-
WITH traces AS (
|
|
213
|
-
SELECT
|
|
214
|
-
id,
|
|
215
|
-
agent_step_id,
|
|
216
|
-
user_id,
|
|
217
|
-
created_at,
|
|
218
|
-
type,
|
|
219
|
-
payload
|
|
220
|
-
FROM \`${dataset}.${TRACES_TABLE}\`
|
|
221
|
-
WHERE user_id = '${userId}' AND type = 'get-relevant-files'
|
|
222
|
-
ORDER BY created_at DESC
|
|
223
|
-
LIMIT ${limit}
|
|
224
|
-
)
|
|
225
|
-
SELECT
|
|
226
|
-
t.id,
|
|
227
|
-
ANY_VALUE(t.agent_step_id) as agent_step_id,
|
|
228
|
-
ANY_VALUE(t.user_id) as user_id,
|
|
229
|
-
ANY_VALUE(t.created_at) as created_at,
|
|
230
|
-
ANY_VALUE(t.type) as type,
|
|
231
|
-
ANY_VALUE(t.payload) as payload,
|
|
232
|
-
ARRAY_AGG(r IGNORE NULLS) as relabels
|
|
233
|
-
FROM traces t
|
|
234
|
-
LEFT JOIN \`${dataset}.${RELABELS_TABLE}\` r
|
|
235
|
-
ON t.agent_step_id = r.agent_step_id
|
|
236
|
-
AND t.user_id = r.user_id
|
|
237
|
-
AND JSON_EXTRACT_SCALAR(t.payload, '$.user_input_id') = JSON_EXTRACT_SCALAR(r.payload, '$.user_input_id')
|
|
238
|
-
GROUP BY t.id
|
|
239
|
-
ORDER BY ANY_VALUE(t.created_at) DESC
|
|
240
|
-
`;
|
|
241
|
-
const [rows] = await getClient().query(query);
|
|
242
|
-
// Process and parse the results
|
|
243
|
-
return rows.map((row) => {
|
|
244
|
-
// Create trace object from individual fields
|
|
245
|
-
const trace = {
|
|
246
|
-
id: row.id,
|
|
247
|
-
agent_step_id: row.agent_step_id,
|
|
248
|
-
user_id: row.user_id,
|
|
249
|
-
created_at: row.created_at,
|
|
250
|
-
type: row.type,
|
|
251
|
-
payload: typeof row.payload === 'string' ? JSON.parse(row.payload) : row.payload,
|
|
252
|
-
};
|
|
253
|
-
// Parse relabel payloads (if any exist)
|
|
254
|
-
const relabels = row.relabels && row.relabels.length > 0
|
|
255
|
-
? row.relabels.map((relabel) => ({
|
|
256
|
-
...relabel,
|
|
257
|
-
payload: typeof relabel.payload === 'string'
|
|
258
|
-
? JSON.parse(relabel.payload)
|
|
259
|
-
: relabel.payload,
|
|
260
|
-
}))
|
|
261
|
-
: [];
|
|
262
|
-
return { trace, relabels };
|
|
263
|
-
});
|
|
264
|
-
}
|
|
265
|
-
//# sourceMappingURL=client.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/bigquery/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { TableSchema } from '@google-cloud/bigquery';
|
|
2
|
-
interface BaseEvent {
|
|
3
|
-
id: string;
|
|
4
|
-
agent_step_id: string;
|
|
5
|
-
user_id: string;
|
|
6
|
-
}
|
|
7
|
-
interface BasePayload {
|
|
8
|
-
user_input_id: string;
|
|
9
|
-
client_session_id: string;
|
|
10
|
-
fingerprint_id: string;
|
|
11
|
-
}
|
|
12
|
-
export type TraceType = 'get-relevant-files' | 'file-trees' | 'agent-response';
|
|
13
|
-
export interface BaseTrace extends BaseEvent {
|
|
14
|
-
created_at: Date;
|
|
15
|
-
type: TraceType;
|
|
16
|
-
payload: unknown;
|
|
17
|
-
}
|
|
18
|
-
export interface GetRelevantFilesPayload extends BasePayload {
|
|
19
|
-
messages: unknown;
|
|
20
|
-
system: unknown;
|
|
21
|
-
output: string;
|
|
22
|
-
request_type: string;
|
|
23
|
-
cost_mode: string;
|
|
24
|
-
model?: string;
|
|
25
|
-
}
|
|
26
|
-
export interface GetRelevantFilesTrace extends BaseTrace {
|
|
27
|
-
type: 'get-relevant-files';
|
|
28
|
-
payload: GetRelevantFilesPayload;
|
|
29
|
-
}
|
|
30
|
-
interface FileTreePayload extends BasePayload {
|
|
31
|
-
filetrees: Record<number, string>;
|
|
32
|
-
}
|
|
33
|
-
export interface FileTreeTrace extends BaseTrace {
|
|
34
|
-
type: 'file-trees';
|
|
35
|
-
payload: FileTreePayload;
|
|
36
|
-
}
|
|
37
|
-
interface AgentResponsePayload extends BasePayload {
|
|
38
|
-
output: string;
|
|
39
|
-
}
|
|
40
|
-
export interface AgentResponseTrace extends BaseTrace {
|
|
41
|
-
type: 'agent-response';
|
|
42
|
-
payload: AgentResponsePayload;
|
|
43
|
-
}
|
|
44
|
-
export type Trace = GetRelevantFilesTrace | FileTreeTrace | AgentResponseTrace;
|
|
45
|
-
export declare const TRACES_SCHEMA: TableSchema;
|
|
46
|
-
interface RelabelPayload extends BasePayload {
|
|
47
|
-
output: string;
|
|
48
|
-
}
|
|
49
|
-
export interface Relabel extends BaseEvent {
|
|
50
|
-
created_at: Date;
|
|
51
|
-
model: string;
|
|
52
|
-
payload: RelabelPayload;
|
|
53
|
-
}
|
|
54
|
-
export declare const RELABELS_SCHEMA: TableSchema;
|
|
55
|
-
export {};
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RELABELS_SCHEMA = exports.TRACES_SCHEMA = void 0;
|
|
4
|
-
exports.TRACES_SCHEMA = {
|
|
5
|
-
fields: [
|
|
6
|
-
{ name: 'id', type: 'STRING', mode: 'REQUIRED' }, // UUID
|
|
7
|
-
{ name: 'agent_step_id', type: 'STRING', mode: 'REQUIRED' }, // Used to link traces together within a single agent step
|
|
8
|
-
{ name: 'user_id', type: 'STRING', mode: 'REQUIRED' }, // user ID
|
|
9
|
-
{ name: 'created_at', type: 'TIMESTAMP', mode: 'REQUIRED' },
|
|
10
|
-
{ name: 'type', type: 'STRING', mode: 'REQUIRED' },
|
|
11
|
-
{ name: 'payload', type: 'JSON', mode: 'REQUIRED' },
|
|
12
|
-
],
|
|
13
|
-
};
|
|
14
|
-
exports.RELABELS_SCHEMA = {
|
|
15
|
-
fields: [
|
|
16
|
-
{ name: 'id', type: 'STRING', mode: 'REQUIRED' }, // UUID
|
|
17
|
-
{ name: 'agent_step_id', type: 'STRING', mode: 'REQUIRED' }, // Used to link traces together within a single agent step
|
|
18
|
-
{ name: 'user_id', type: 'STRING', mode: 'REQUIRED' }, // user ID
|
|
19
|
-
{ name: 'created_at', type: 'TIMESTAMP', mode: 'REQUIRED' },
|
|
20
|
-
{ name: 'model', type: 'STRING', mode: 'REQUIRED' },
|
|
21
|
-
{ name: 'payload', type: 'JSON', mode: 'REQUIRED' },
|
|
22
|
-
],
|
|
23
|
-
};
|
|
24
|
-
//# sourceMappingURL=schema.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/bigquery/schema.ts"],"names":[],"mappings":";;;AA4Da,QAAA,aAAa,GAAgB;IACxC,MAAM,EAAE;QACN,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,OAAO;QACzD,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,0DAA0D;QACvH,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,UAAU;QACjE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE;QAC3D,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE;QAClD,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE;KACpD;CACF,CAAA;AAYY,QAAA,eAAe,GAAgB;IAC1C,MAAM,EAAE;QACN,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,OAAO;QACzD,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,0DAA0D;QACvH,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,UAAU;QACjE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE;QAC3D,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE;QACnD,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE;KACpD;CACF,CAAA"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { TokenCallerMap } from 'code-map/parse';
|
|
2
|
-
/**
|
|
3
|
-
* Appends caller metadata to file content showing which files reference tokens defined in this file
|
|
4
|
-
* @param content The original file content
|
|
5
|
-
* @param filePath The path of the file
|
|
6
|
-
* @param tokenCallers Map of files to their token callers
|
|
7
|
-
* @returns The content with caller metadata appended
|
|
8
|
-
*/
|
|
9
|
-
export declare function appendCallerMetadata(content: string, filePath: string, tokenCallers: TokenCallerMap | undefined): string;
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.appendCallerMetadata = appendCallerMetadata;
|
|
4
|
-
/**
|
|
5
|
-
* Appends caller metadata to file content showing which files reference tokens defined in this file
|
|
6
|
-
* @param content The original file content
|
|
7
|
-
* @param filePath The path of the file
|
|
8
|
-
* @param tokenCallers Map of files to their token callers
|
|
9
|
-
* @returns The content with caller metadata appended
|
|
10
|
-
*/
|
|
11
|
-
function appendCallerMetadata(content, filePath, tokenCallers) {
|
|
12
|
-
if (!tokenCallers?.[filePath])
|
|
13
|
-
return content;
|
|
14
|
-
const callersByToken = tokenCallers[filePath];
|
|
15
|
-
const callerInfo = Object.entries(callersByToken)
|
|
16
|
-
.filter(([_, callers]) => callers.length > 0)
|
|
17
|
-
.map(([token, callers]) => `${token}: ${callers.join(', ')}`)
|
|
18
|
-
.join('\n');
|
|
19
|
-
if (!callerInfo)
|
|
20
|
-
return content;
|
|
21
|
-
console.log('got callerInfo', callerInfo);
|
|
22
|
-
return `${content}\n\n<referenced_by>\n${callerInfo}\n</referenced_by>`;
|
|
23
|
-
}
|
|
24
|
-
//# sourceMappingURL=file-metadata.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"file-metadata.js","sourceRoot":"","sources":["../../src/util/file-metadata.ts"],"names":[],"mappings":";;AASA,oDAkBC;AAzBD;;;;;;GAMG;AACH,SAAgB,oBAAoB,CAClC,OAAe,EACf,QAAgB,EAChB,YAAwC;IAExC,IAAI,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC;QAAE,OAAO,OAAO,CAAA;IAE7C,MAAM,cAAc,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAA;IAC7C,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC;SAC9C,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;SAC5C,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;SAC5D,IAAI,CAAC,IAAI,CAAC,CAAA;IAEb,IAAI,CAAC,UAAU;QAAE,OAAO,OAAO,CAAA;IAE/B,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAA;IAEzC,OAAO,GAAG,OAAO,wBAAwB,UAAU,oBAAoB,CAAA;AACzE,CAAC"}
|