codebuff 1.0.255 → 1.0.256
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/common/analytics.d.ts +4 -0
- package/dist/common/analytics.js +40 -0
- package/dist/common/analytics.js.map +1 -0
- package/dist/common/bigquery/client.js +4 -6
- package/dist/common/bigquery/client.js.map +1 -1
- package/dist/common/browser-actions.d.ts +6 -6
- package/dist/common/constants/analytics-events.d.ts +7 -1
- package/dist/common/constants/analytics-events.js +7 -0
- package/dist/common/constants/analytics-events.js.map +1 -1
- package/dist/common/env.mjs +2 -0
- package/dist/common/env.mjs.map +1 -1
- package/package.json +1 -1
- package/dist/background-process-manager.d.ts +0 -50
- package/dist/background-process-manager.js +0 -359
- package/dist/background-process-manager.js.map +0 -1
- package/dist/browser-runner.d.ts +0 -35
- package/dist/browser-runner.js +0 -680
- package/dist/browser-runner.js.map +0 -1
- package/dist/chat-storage.d.ts +0 -2
- package/dist/chat-storage.js +0 -93
- package/dist/chat-storage.js.map +0 -1
- package/dist/checkpoints/checkpoint-manager.d.ts +0 -94
- package/dist/checkpoints/checkpoint-manager.js +0 -280
- package/dist/checkpoints/checkpoint-manager.js.map +0 -1
- package/dist/checkpoints/file-manager.d.ts +0 -72
- package/dist/checkpoints/file-manager.js +0 -311
- package/dist/checkpoints/file-manager.js.map +0 -1
- package/dist/cli-handlers/api-key.d.ts +0 -25
- package/dist/cli-handlers/api-key.js +0 -66
- package/dist/cli-handlers/api-key.js.map +0 -1
- package/dist/cli-handlers/checkpoint.d.ts +0 -18
- package/dist/cli-handlers/checkpoint.js +0 -195
- package/dist/cli-handlers/checkpoint.js.map +0 -1
- package/dist/cli-handlers/diff.d.ts +0 -2
- package/dist/cli-handlers/diff.js +0 -31
- package/dist/cli-handlers/diff.js.map +0 -1
- package/dist/cli-handlers/easter-egg.d.ts +0 -1
- package/dist/cli-handlers/easter-egg.js +0 -126
- package/dist/cli-handlers/easter-egg.js.map +0 -1
- package/dist/cli-handlers/inititalization-flow.d.ts +0 -1
- package/dist/cli-handlers/inititalization-flow.js +0 -24
- package/dist/cli-handlers/inititalization-flow.js.map +0 -1
- package/dist/cli.d.ts +0 -44
- package/dist/cli.js +0 -478
- package/dist/cli.js.map +0 -1
- package/dist/client.d.ts +0 -157
- package/dist/client.js +0 -836
- package/dist/client.js.map +0 -1
- package/dist/config.d.ts +0 -4
- package/dist/config.js +0 -12
- package/dist/config.js.map +0 -1
- package/dist/create-template-project.d.ts +0 -1
- package/dist/create-template-project.js +0 -107
- package/dist/create-template-project.js.map +0 -1
- package/dist/credentials.d.ts +0 -4
- package/dist/credentials.js +0 -38
- package/dist/credentials.js.map +0 -1
- package/dist/dev-process-manager.d.ts +0 -10
- package/dist/dev-process-manager.js +0 -54
- package/dist/dev-process-manager.js.map +0 -1
- package/dist/fingerprint.d.ts +0 -1
- package/dist/fingerprint.js +0 -48
- package/dist/fingerprint.js.map +0 -1
- package/dist/index.d.ts +0 -2
- package/dist/index.js +0 -117
- package/dist/index.js.map +0 -1
- package/dist/menu.d.ts +0 -3
- package/dist/menu.js +0 -126
- package/dist/menu.js.map +0 -1
- package/dist/project-files.d.ts +0 -114
- package/dist/project-files.js +0 -513
- package/dist/project-files.js.map +0 -1
- package/dist/startup-process-handler.d.ts +0 -2
- package/dist/startup-process-handler.js +0 -21
- package/dist/startup-process-handler.js.map +0 -1
- package/dist/tool-handlers.d.ts +0 -28
- package/dist/tool-handlers.js +0 -240
- package/dist/tool-handlers.js.map +0 -1
- package/dist/types.d.ts +0 -15
- package/dist/types.js +0 -3
- package/dist/types.js.map +0 -1
- package/dist/update-codebuff.d.ts +0 -1
- package/dist/update-codebuff.js +0 -160
- package/dist/update-codebuff.js.map +0 -1
- package/dist/utils/__tests__/background-process-manager.test.d.ts +0 -1
- package/dist/utils/__tests__/background-process-manager.test.js +0 -289
- package/dist/utils/__tests__/background-process-manager.test.js.map +0 -1
- package/dist/utils/__tests__/tool-renderers.test.d.ts +0 -1
- package/dist/utils/__tests__/tool-renderers.test.js +0 -51
- package/dist/utils/__tests__/tool-renderers.test.js.map +0 -1
- package/dist/utils/__tests__/xml-stream-parser.test.d.ts +0 -1
- package/dist/utils/__tests__/xml-stream-parser.test.js +0 -229
- package/dist/utils/__tests__/xml-stream-parser.test.js.map +0 -1
- package/dist/utils/analytics.d.ts +0 -6
- package/dist/utils/analytics.js +0 -59
- package/dist/utils/analytics.js.map +0 -1
- package/dist/utils/detect-shell.d.ts +0 -1
- package/dist/utils/detect-shell.js +0 -60
- package/dist/utils/detect-shell.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -21
- package/dist/utils/logger.js +0 -105
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/spinner.d.ts +0 -11
- package/dist/utils/spinner.js +0 -87
- package/dist/utils/spinner.js.map +0 -1
- package/dist/utils/system-info.d.ts +0 -8
- package/dist/utils/system-info.js +0 -22
- package/dist/utils/system-info.js.map +0 -1
- package/dist/utils/terminal.d.ts +0 -41
- package/dist/utils/terminal.js +0 -467
- package/dist/utils/terminal.js.map +0 -1
- package/dist/utils/tool-renderers.d.ts +0 -16
- package/dist/utils/tool-renderers.js +0 -148
- package/dist/utils/tool-renderers.js.map +0 -1
- package/dist/utils/xml-stream-parser.d.ts +0 -9
- package/dist/utils/xml-stream-parser.js +0 -128
- package/dist/utils/xml-stream-parser.js.map +0 -1
- package/dist/web-scraper.d.ts +0 -3
- package/dist/web-scraper.js +0 -57
- package/dist/web-scraper.js.map +0 -1
- package/dist/workers/checkpoint-worker.d.ts +0 -1
- package/dist/workers/checkpoint-worker.js +0 -48
- package/dist/workers/checkpoint-worker.js.map +0 -1
- package/dist/workers/project-context.d.ts +0 -1
- package/dist/workers/project-context.js +0 -17
- package/dist/workers/project-context.js.map +0 -1
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { AnalyticsEvent } from 'common/src/constants/analytics-events';
|
|
2
|
+
export declare function initAnalytics(): void;
|
|
3
|
+
export declare function flushAnalytics(): Promise<void>;
|
|
4
|
+
export declare function trackEvent(event: AnalyticsEvent, userId: string, properties?: Record<string, any>): void;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.initAnalytics = initAnalytics;
|
|
4
|
+
exports.flushAnalytics = flushAnalytics;
|
|
5
|
+
exports.trackEvent = trackEvent;
|
|
6
|
+
const posthog_node_1 = require("posthog-node");
|
|
7
|
+
const env_mjs_1 = require("./env.mjs");
|
|
8
|
+
const logger_1 = require("./util/logger");
|
|
9
|
+
let client;
|
|
10
|
+
function initAnalytics() {
|
|
11
|
+
if (!env_mjs_1.env.NEXT_PUBLIC_POSTHOG_API_KEY || !env_mjs_1.env.NEXT_PUBLIC_POSTHOG_HOST_URL) {
|
|
12
|
+
throw new Error('NEXT_PUBLIC_POSTHOG_API_KEY or NEXT_PUBLIC_POSTHOG_HOST_URL is not set');
|
|
13
|
+
}
|
|
14
|
+
client = new posthog_node_1.PostHog(env_mjs_1.env.NEXT_PUBLIC_POSTHOG_API_KEY, {
|
|
15
|
+
host: env_mjs_1.env.NEXT_PUBLIC_POSTHOG_HOST_URL,
|
|
16
|
+
flushAt: 1,
|
|
17
|
+
flushInterval: 0,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
async function flushAnalytics() {
|
|
21
|
+
if (!client) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
await client.flush();
|
|
25
|
+
}
|
|
26
|
+
function trackEvent(event, userId, properties) {
|
|
27
|
+
if (!client) {
|
|
28
|
+
throw new Error('Analytics client not initialized');
|
|
29
|
+
}
|
|
30
|
+
if (env_mjs_1.env.NEXT_PUBLIC_CB_ENVIRONMENT !== 'production') {
|
|
31
|
+
logger_1.logger.info({ payload: { event, properties } }, 'Analytics event tracked');
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
client.capture({
|
|
35
|
+
distinctId: userId,
|
|
36
|
+
event,
|
|
37
|
+
properties,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=analytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../src/analytics.ts"],"names":[],"mappings":";;AASA,sCAYC;AACD,wCAKC;AAED,gCAmBC;AAhDD,+CAAsC;AAItC,uCAA+B;AAC/B,0CAAsC;AAEtC,IAAI,MAA2B,CAAA;AAE/B,SAAgB,aAAa;IAC3B,IAAI,CAAC,aAAG,CAAC,2BAA2B,IAAI,CAAC,aAAG,CAAC,4BAA4B,EAAE,CAAC;QAC1E,MAAM,IAAI,KAAK,CACb,wEAAwE,CACzE,CAAA;IACH,CAAC;IAED,MAAM,GAAG,IAAI,sBAAO,CAAC,aAAG,CAAC,2BAA2B,EAAE;QACpD,IAAI,EAAE,aAAG,CAAC,4BAA4B;QACtC,OAAO,EAAE,CAAC;QACV,aAAa,EAAE,CAAC;KACjB,CAAC,CAAA;AACJ,CAAC;AACM,KAAK,UAAU,cAAc;IAClC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAM;IACR,CAAC;IACD,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;AACtB,CAAC;AAED,SAAgB,UAAU,CACxB,KAAqB,EACrB,MAAc,EACd,UAAgC;IAEhC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;IACrD,CAAC;IAED,IAAI,aAAG,CAAC,0BAA0B,KAAK,YAAY,EAAE,CAAC;QACpD,eAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,yBAAyB,CAAC,CAAA;QAC1E,OAAM;IACR,CAAC;IAED,MAAM,CAAC,OAAO,CAAC;QACb,UAAU,EAAE,MAAM;QAClB,KAAK;QACL,UAAU;KACX,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -26,14 +26,10 @@ function getClient() {
|
|
|
26
26
|
}
|
|
27
27
|
async function setupBigQuery(dataset = DATASET) {
|
|
28
28
|
try {
|
|
29
|
-
logger_1.logger.info('Creating BigQuery client...');
|
|
30
29
|
client = new bigquery_1.BigQuery();
|
|
31
|
-
logger_1.logger.info('BigQuery client created, initializing dataset...');
|
|
32
30
|
// Ensure dataset exists
|
|
33
31
|
const [ds] = await client.dataset(dataset).get({ autoCreate: true });
|
|
34
|
-
logger_1.logger.info({ dataset }, 'Dataset initialized');
|
|
35
32
|
// Ensure tables exist
|
|
36
|
-
logger_1.logger.info('Creating/verifying tables...');
|
|
37
33
|
await ds.table(TRACES_TABLE).get({
|
|
38
34
|
autoCreate: true,
|
|
39
35
|
schema: schema_1.TRACES_SCHEMA,
|
|
@@ -56,7 +52,6 @@ async function setupBigQuery(dataset = DATASET) {
|
|
|
56
52
|
fields: ['user_id', 'agent_step_id'],
|
|
57
53
|
},
|
|
58
54
|
});
|
|
59
|
-
logger_1.logger.info('Tables initialized successfully');
|
|
60
55
|
}
|
|
61
56
|
catch (error) {
|
|
62
57
|
logger_1.logger.error({
|
|
@@ -97,7 +92,10 @@ async function insertRelabel(relabel, dataset = DATASET) {
|
|
|
97
92
|
? JSON.stringify(relabel.payload)
|
|
98
93
|
: relabel.payload,
|
|
99
94
|
};
|
|
100
|
-
await getClient()
|
|
95
|
+
await getClient()
|
|
96
|
+
.dataset(dataset)
|
|
97
|
+
.table(RELABELS_TABLE)
|
|
98
|
+
.insert(relabelToInsert);
|
|
101
99
|
logger_1.logger.debug({ relabelId: relabel.id }, 'Inserted relabel into BigQuery');
|
|
102
100
|
return true;
|
|
103
101
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/bigquery/client.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/bigquery/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,19 +39,19 @@ export declare const LogSchema: z.ZodObject<{
|
|
|
39
39
|
type: "error" | "warning" | "info" | "debug" | "verbose";
|
|
40
40
|
source: "browser" | "tool";
|
|
41
41
|
timestamp: number;
|
|
42
|
+
level?: number | undefined;
|
|
42
43
|
location?: string | undefined;
|
|
43
44
|
stack?: string | undefined;
|
|
44
45
|
category?: string | undefined;
|
|
45
|
-
level?: number | undefined;
|
|
46
46
|
}, {
|
|
47
47
|
message: string;
|
|
48
48
|
type: "error" | "warning" | "info" | "debug" | "verbose";
|
|
49
49
|
timestamp: number;
|
|
50
50
|
source?: "browser" | "tool" | undefined;
|
|
51
|
+
level?: number | undefined;
|
|
51
52
|
location?: string | undefined;
|
|
52
53
|
stack?: string | undefined;
|
|
53
54
|
category?: string | undefined;
|
|
54
|
-
level?: number | undefined;
|
|
55
55
|
}>;
|
|
56
56
|
export type Log = z.infer<typeof LogSchema>;
|
|
57
57
|
export declare const MetricsSchema: z.ZodObject<{
|
|
@@ -308,19 +308,19 @@ export declare const BrowserResponseSchema: z.ZodObject<{
|
|
|
308
308
|
type: "error" | "warning" | "info" | "debug" | "verbose";
|
|
309
309
|
source: "browser" | "tool";
|
|
310
310
|
timestamp: number;
|
|
311
|
+
level?: number | undefined;
|
|
311
312
|
location?: string | undefined;
|
|
312
313
|
stack?: string | undefined;
|
|
313
314
|
category?: string | undefined;
|
|
314
|
-
level?: number | undefined;
|
|
315
315
|
}, {
|
|
316
316
|
message: string;
|
|
317
317
|
type: "error" | "warning" | "info" | "debug" | "verbose";
|
|
318
318
|
timestamp: number;
|
|
319
319
|
source?: "browser" | "tool" | undefined;
|
|
320
|
+
level?: number | undefined;
|
|
320
321
|
location?: string | undefined;
|
|
321
322
|
stack?: string | undefined;
|
|
322
323
|
category?: string | undefined;
|
|
323
|
-
level?: number | undefined;
|
|
324
324
|
}>, "many">;
|
|
325
325
|
logFilter: z.ZodOptional<z.ZodObject<{
|
|
326
326
|
types: z.ZodOptional<z.ZodArray<z.ZodEnum<["error", "warning", "info", "debug", "verbose"]>, "many">>;
|
|
@@ -488,10 +488,10 @@ export declare const BrowserResponseSchema: z.ZodObject<{
|
|
|
488
488
|
type: "error" | "warning" | "info" | "debug" | "verbose";
|
|
489
489
|
source: "browser" | "tool";
|
|
490
490
|
timestamp: number;
|
|
491
|
+
level?: number | undefined;
|
|
491
492
|
location?: string | undefined;
|
|
492
493
|
stack?: string | undefined;
|
|
493
494
|
category?: string | undefined;
|
|
494
|
-
level?: number | undefined;
|
|
495
495
|
}[];
|
|
496
496
|
error?: string | undefined;
|
|
497
497
|
logFilter?: {
|
|
@@ -542,10 +542,10 @@ export declare const BrowserResponseSchema: z.ZodObject<{
|
|
|
542
542
|
type: "error" | "warning" | "info" | "debug" | "verbose";
|
|
543
543
|
timestamp: number;
|
|
544
544
|
source?: "browser" | "tool" | undefined;
|
|
545
|
+
level?: number | undefined;
|
|
545
546
|
location?: string | undefined;
|
|
546
547
|
stack?: string | undefined;
|
|
547
548
|
category?: string | undefined;
|
|
548
|
-
level?: number | undefined;
|
|
549
549
|
}[];
|
|
550
550
|
error?: string | undefined;
|
|
551
551
|
logFilter?: {
|
|
@@ -8,5 +8,11 @@ export declare enum AnalyticsEvent {
|
|
|
8
8
|
BACKGROUND_PROCESS_LEFTOVER_DETECTED = "cli.background_process_leftover_detected",
|
|
9
9
|
BACKGROUND_PROCESS_START = "cli.background_process_start",
|
|
10
10
|
LOGIN = "cli.login",
|
|
11
|
-
|
|
11
|
+
CHECKPOINT_COMMAND_USED = "cli.checkpoint_command_used",
|
|
12
|
+
TERMINAL_COMMAND_COMPLETED = "cli.terminal_command_completed",
|
|
13
|
+
PROMPT_SENT = "backend.prompt_sent",
|
|
14
|
+
CREDIT_GRANT = "backend.credit_grant",
|
|
15
|
+
CREDIT_CONSUMED = "backend.credit_consumed",
|
|
16
|
+
TOOL_USE = "backend.tool_use",
|
|
17
|
+
SIGNUP = "web.signup"
|
|
12
18
|
}
|
|
@@ -13,7 +13,14 @@ var AnalyticsEvent;
|
|
|
13
13
|
AnalyticsEvent["BACKGROUND_PROCESS_LEFTOVER_DETECTED"] = "cli.background_process_leftover_detected";
|
|
14
14
|
AnalyticsEvent["BACKGROUND_PROCESS_START"] = "cli.background_process_start";
|
|
15
15
|
AnalyticsEvent["LOGIN"] = "cli.login";
|
|
16
|
+
AnalyticsEvent["CHECKPOINT_COMMAND_USED"] = "cli.checkpoint_command_used";
|
|
17
|
+
AnalyticsEvent["TERMINAL_COMMAND_COMPLETED"] = "cli.terminal_command_completed";
|
|
16
18
|
// Backend
|
|
17
19
|
AnalyticsEvent["PROMPT_SENT"] = "backend.prompt_sent";
|
|
20
|
+
AnalyticsEvent["CREDIT_GRANT"] = "backend.credit_grant";
|
|
21
|
+
AnalyticsEvent["CREDIT_CONSUMED"] = "backend.credit_consumed";
|
|
22
|
+
AnalyticsEvent["TOOL_USE"] = "backend.tool_use";
|
|
23
|
+
// Web
|
|
24
|
+
AnalyticsEvent["SIGNUP"] = "web.signup";
|
|
18
25
|
})(AnalyticsEvent || (exports.AnalyticsEvent = AnalyticsEvent = {}));
|
|
19
26
|
//# sourceMappingURL=analytics-events.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics-events.js","sourceRoot":"","sources":["../../src/constants/analytics-events.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,IAAY,
|
|
1
|
+
{"version":3,"file":"analytics-events.js","sourceRoot":"","sources":["../../src/constants/analytics-events.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,IAAY,cAmBX;AAnBD,WAAY,cAAc;IACxB,MAAM;IACN,mDAAiC,CAAA;IACjC,iFAA+D,CAAA;IAC/D,uEAAqD,CAAA;IACrD,mGAAiF,CAAA;IACjF,2EAAyD,CAAA;IACzD,qCAAmB,CAAA;IACnB,yEAAuD,CAAA;IACvD,+EAA6D,CAAA;IAE7D,UAAU;IACV,qDAAmC,CAAA;IACnC,uDAAqC,CAAA;IACrC,6DAA2C,CAAA;IAC3C,+CAA6B,CAAA;IAE7B,MAAM;IACN,uCAAqB,CAAA;AACvB,CAAC,EAnBW,cAAc,8BAAd,cAAc,QAmBzB"}
|
package/dist/common/env.mjs
CHANGED
|
@@ -27,6 +27,8 @@ exports.env = (0, env_core_1.createEnv)({
|
|
|
27
27
|
API_KEY_ENCRYPTION_SECRET: zod_1.z
|
|
28
28
|
.string()
|
|
29
29
|
.length(32, 'API_KEY_ENCRYPTION_SECRET must be 32 characters long'),
|
|
30
|
+
NEXT_PUBLIC_POSTHOG_API_KEY: zod_1.z.string().min(1),
|
|
31
|
+
NEXT_PUBLIC_POSTHOG_HOST_URL: zod_1.z.string().url().optional(),
|
|
30
32
|
},
|
|
31
33
|
client: {
|
|
32
34
|
NEXT_PUBLIC_CB_ENVIRONMENT: zod_1.z.string().min(1),
|
package/dist/common/env.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.mjs","sourceRoot":"","sources":["../src/env.mjs"],"names":[],"mappings":";;;;;;AAAA,+CAA4C;AAC5C,oDAA2B;AAC3B,6BAAuB;AAEvB,gBAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAA;AACvC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,CAAC;IAC5C,OAAO,CAAC,KAAK,CACX,iEAAiE,CAClE,CAAA;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AAED,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAA;AACzE,MAAM,IAAI,GAAG,GAAG,WAAW,SAAS,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,CAAA;AAC5E,OAAO,CAAC,GAAG,CACT,sBAAsB,OAAO,CAAC,GAAG,CAAC,0BAA0B,WAAW,IAAI,GAAG,CAC/E,CAAA;AACD,gBAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;AAEV,QAAA,GAAG,GAAG,IAAA,oBAAS,EAAC;IAC3B,MAAM,EAAE;QACN,0BAA0B,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7C,mBAAmB,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACtC,YAAY,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/B,iBAAiB,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACpC,qBAAqB,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC;QAC7D,yBAAyB,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5C,yBAAyB,EAAE,OAAC;aACzB,MAAM,EAAE;aACR,MAAM,CAAC,EAAE,EAAE,sDAAsD,CAAC;
|
|
1
|
+
{"version":3,"file":"env.mjs","sourceRoot":"","sources":["../src/env.mjs"],"names":[],"mappings":";;;;;;AAAA,+CAA4C;AAC5C,oDAA2B;AAC3B,6BAAuB;AAEvB,gBAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAA;AACvC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,CAAC;IAC5C,OAAO,CAAC,KAAK,CACX,iEAAiE,CAClE,CAAA;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AAED,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAA;AACzE,MAAM,IAAI,GAAG,GAAG,WAAW,SAAS,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,CAAA;AAC5E,OAAO,CAAC,GAAG,CACT,sBAAsB,OAAO,CAAC,GAAG,CAAC,0BAA0B,WAAW,IAAI,GAAG,CAC/E,CAAA;AACD,gBAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;AAEV,QAAA,GAAG,GAAG,IAAA,oBAAS,EAAC;IAC3B,MAAM,EAAE;QACN,0BAA0B,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7C,mBAAmB,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACtC,YAAY,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/B,iBAAiB,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACpC,qBAAqB,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC;QAC7D,yBAAyB,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5C,yBAAyB,EAAE,OAAC;aACzB,MAAM,EAAE;aACR,MAAM,CAAC,EAAE,EAAE,sDAAsD,CAAC;QACrE,2BAA2B,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9C,4BAA4B,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;KAC1D;IACD,MAAM,EAAE;QACN,0BAA0B,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7C,mBAAmB,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACtC,yBAAyB,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;KAC7C;IACD,UAAU,EAAE,OAAO,CAAC,GAAG;CACxB,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { ChildProcessByStdio, ChildProcessWithoutNullStreams, SpawnOptionsWithoutStdio } from 'child_process';
|
|
2
|
-
import { ToolResult } from './common/types/agent-state';
|
|
3
|
-
/**
|
|
4
|
-
* Interface describing the information stored for each background process.
|
|
5
|
-
*/
|
|
6
|
-
export interface BackgroundProcessInfo {
|
|
7
|
-
pid: number;
|
|
8
|
-
toolCallId: string;
|
|
9
|
-
command: string;
|
|
10
|
-
process: ChildProcessByStdio<any, any, any>;
|
|
11
|
-
stdoutBuffer: string[];
|
|
12
|
-
stderrBuffer: string[];
|
|
13
|
-
status: 'running' | 'completed' | 'error';
|
|
14
|
-
startTime: number;
|
|
15
|
-
endTime: number | null;
|
|
16
|
-
lastReportedStdoutLength: number;
|
|
17
|
-
lastReportedStderrLength: number;
|
|
18
|
-
lastReportedStatus: 'running' | 'completed' | 'error' | null;
|
|
19
|
-
stdoutFile?: string;
|
|
20
|
-
stderrFile?: string;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Global map storing information about active and completed background processes.
|
|
24
|
-
* Keyed by the OS-assigned Process ID (PID).
|
|
25
|
-
*/
|
|
26
|
-
export declare const backgroundProcesses: Map<number, BackgroundProcessInfo>;
|
|
27
|
-
/**
|
|
28
|
-
* Formats a single background process's info into a string
|
|
29
|
-
*/
|
|
30
|
-
export declare function getBackgroundProcessInfoString(info: BackgroundProcessInfo): string;
|
|
31
|
-
/**
|
|
32
|
-
* Gets updates from all background processes and updates tracking info
|
|
33
|
-
*/
|
|
34
|
-
export declare function getBackgroundProcessUpdates(): ToolResult[];
|
|
35
|
-
export declare function spawnAndTrack(command: string, args: string[] | undefined, options: SpawnOptionsWithoutStdio): ChildProcessWithoutNullStreams;
|
|
36
|
-
export declare function sendKillSignalToAllBackgroundProcesses(): void;
|
|
37
|
-
export declare function killAllBackgroundProcesses(): Promise<void>;
|
|
38
|
-
/**
|
|
39
|
-
* Cleans up stale lock files and attempts to kill orphaned processes found in the lock directory.
|
|
40
|
-
* This function is intended to run on startup to handle cases where the application might have
|
|
41
|
-
* exited uncleanly, leaving orphaned processes or lock files.
|
|
42
|
-
*
|
|
43
|
-
* @returns Object containing:
|
|
44
|
-
* - shouldStartNewProcesses: boolean indicating if it's safe to start new processes
|
|
45
|
-
* - cleanUpPromise: Promise that resolves when cleanup is complete
|
|
46
|
-
*/
|
|
47
|
-
export declare function cleanupStoredProcesses(): {
|
|
48
|
-
separateCodebuffInstanceRunning: boolean;
|
|
49
|
-
cleanUpPromise: Promise<any>;
|
|
50
|
-
};
|
|
@@ -1,359 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.backgroundProcesses = void 0;
|
|
7
|
-
exports.getBackgroundProcessInfoString = getBackgroundProcessInfoString;
|
|
8
|
-
exports.getBackgroundProcessUpdates = getBackgroundProcessUpdates;
|
|
9
|
-
exports.spawnAndTrack = spawnAndTrack;
|
|
10
|
-
exports.sendKillSignalToAllBackgroundProcesses = sendKillSignalToAllBackgroundProcesses;
|
|
11
|
-
exports.killAllBackgroundProcesses = killAllBackgroundProcesses;
|
|
12
|
-
exports.cleanupStoredProcesses = cleanupStoredProcesses;
|
|
13
|
-
const assert_1 = __importDefault(require("assert"));
|
|
14
|
-
const child_process_1 = require("child_process");
|
|
15
|
-
const fs_1 = require("fs");
|
|
16
|
-
const path_1 = __importDefault(require("path"));
|
|
17
|
-
const process_1 = __importDefault(require("process"));
|
|
18
|
-
const analytics_events_1 = require("./common/constants/analytics-events");
|
|
19
|
-
const array_1 = require("./common/util/array");
|
|
20
|
-
const string_1 = require("./common/util/string");
|
|
21
|
-
const picocolors_1 = require("picocolors");
|
|
22
|
-
const zod_1 = require("zod");
|
|
23
|
-
const credentials_1 = require("./credentials");
|
|
24
|
-
const logger_1 = require("./utils/logger");
|
|
25
|
-
const COMMAND_OUTPUT_LIMIT = 5000; // Limit output to 10KB per stream
|
|
26
|
-
const COMMAND_KILL_TIMEOUT_MS = 5000;
|
|
27
|
-
const POLLING_INTERVAL_MS = 200;
|
|
28
|
-
const LOCK_DIR = path_1.default.join(credentials_1.CONFIG_DIR, 'background_processes');
|
|
29
|
-
/**
|
|
30
|
-
* Global map storing information about active and completed background processes.
|
|
31
|
-
* Keyed by the OS-assigned Process ID (PID).
|
|
32
|
-
*/
|
|
33
|
-
exports.backgroundProcesses = new Map();
|
|
34
|
-
/**
|
|
35
|
-
* Gets output with context about whether there was previous content
|
|
36
|
-
*/
|
|
37
|
-
function getOutputWithContext(newContent, lastReportedLength) {
|
|
38
|
-
if (newContent) {
|
|
39
|
-
const hasOldContent = lastReportedLength > 0;
|
|
40
|
-
return hasOldContent ? '[PREVIOUS OUTPUT]\n' + newContent : newContent;
|
|
41
|
-
}
|
|
42
|
-
return '[NO NEW OUTPUT]';
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Formats a single background process's info into a string
|
|
46
|
-
*/
|
|
47
|
-
function getBackgroundProcessInfoString(info) {
|
|
48
|
-
const newStdout = info.stdoutBuffer
|
|
49
|
-
.join('')
|
|
50
|
-
.slice(info.lastReportedStdoutLength);
|
|
51
|
-
const newStderr = info.stderrBuffer
|
|
52
|
-
.join('')
|
|
53
|
-
.slice(info.lastReportedStderrLength);
|
|
54
|
-
// Only report finished processes if there are changes
|
|
55
|
-
if (info.status !== 'running' &&
|
|
56
|
-
!newStdout &&
|
|
57
|
-
!newStderr &&
|
|
58
|
-
info.status === info.lastReportedStatus) {
|
|
59
|
-
return '';
|
|
60
|
-
}
|
|
61
|
-
// Calculate duration in milliseconds
|
|
62
|
-
const duration = info.endTime
|
|
63
|
-
? info.endTime - info.startTime
|
|
64
|
-
: Date.now() - info.startTime;
|
|
65
|
-
return (0, array_1.buildArray)('<background_process>', `<process_id>${info.pid}</process_id>`, `<command>${info.command}</command>`, `<start_time_utc>${new Date(info.startTime).toISOString()}</start_time_utc>`, `<duration_ms>${duration}</duration_ms>`, newStdout &&
|
|
66
|
-
`<stdout>${(0, string_1.truncateStringWithMessage)({
|
|
67
|
-
str: getOutputWithContext(newStdout, info.lastReportedStdoutLength),
|
|
68
|
-
maxLength: COMMAND_OUTPUT_LIMIT,
|
|
69
|
-
remove: 'START',
|
|
70
|
-
})}</stdout>`, newStderr &&
|
|
71
|
-
`<stderr>${(0, string_1.truncateStringWithMessage)({
|
|
72
|
-
str: getOutputWithContext(newStderr, info.lastReportedStderrLength),
|
|
73
|
-
maxLength: COMMAND_OUTPUT_LIMIT,
|
|
74
|
-
remove: 'START',
|
|
75
|
-
})}</stderr>`, `<status>${info.status}</status>`, info.process.exitCode !== null &&
|
|
76
|
-
`<exit_code>${info.process.exitCode}</exit_code>`, info.process.signalCode &&
|
|
77
|
-
`<signal_code>${info.process.signalCode}</signal_code>`, '</background_process>').join('\n');
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Gets updates from all background processes and updates tracking info
|
|
81
|
-
*/
|
|
82
|
-
function getBackgroundProcessUpdates() {
|
|
83
|
-
const updates = Array.from(exports.backgroundProcesses.values())
|
|
84
|
-
.map((bgProcess) => {
|
|
85
|
-
return [getBackgroundProcessInfoString(bgProcess), bgProcess.toolCallId];
|
|
86
|
-
})
|
|
87
|
-
.filter(([update]) => Boolean(update));
|
|
88
|
-
// Update tracking info after getting updates
|
|
89
|
-
for (const process of exports.backgroundProcesses.values()) {
|
|
90
|
-
process.lastReportedStdoutLength = process.stdoutBuffer.join('').length;
|
|
91
|
-
process.lastReportedStderrLength = process.stderrBuffer.join('').length;
|
|
92
|
-
process.lastReportedStatus = process.status;
|
|
93
|
-
}
|
|
94
|
-
// Clean up completed processes that we've already reported
|
|
95
|
-
cleanupReportedProcesses();
|
|
96
|
-
return updates.map(([update, toolCallId]) => {
|
|
97
|
-
return {
|
|
98
|
-
name: 'background_process_updates',
|
|
99
|
-
result: update,
|
|
100
|
-
id: toolCallId,
|
|
101
|
-
};
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
function deleteFileIfExists(fileName) {
|
|
105
|
-
try {
|
|
106
|
-
(0, fs_1.unlinkSync)(fileName);
|
|
107
|
-
}
|
|
108
|
-
catch { }
|
|
109
|
-
}
|
|
110
|
-
const zodMaybeNumber = zod_1.z.preprocess((val) => {
|
|
111
|
-
const n = Number(val);
|
|
112
|
-
return typeof val === 'undefined' || isNaN(n) ? undefined : n;
|
|
113
|
-
}, zod_1.z.number().optional());
|
|
114
|
-
const lockFileSchema = zod_1.z.object({
|
|
115
|
-
parentPid: zodMaybeNumber,
|
|
116
|
-
});
|
|
117
|
-
/**
|
|
118
|
-
* Creates a lock file for a background process with the current process's PID.
|
|
119
|
-
* This allows tracking parent-child process relationships for cleanup.
|
|
120
|
-
*
|
|
121
|
-
* @param filePath - Path where the lock file should be created
|
|
122
|
-
*/
|
|
123
|
-
function createLockFile(filePath) {
|
|
124
|
-
const data = {
|
|
125
|
-
parentPid: process_1.default.pid,
|
|
126
|
-
};
|
|
127
|
-
(0, fs_1.writeFileSync)(filePath, JSON.stringify(data, null, 1));
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Checks if a process with the given PID is still running.
|
|
131
|
-
*
|
|
132
|
-
* @param pid - Process ID to check
|
|
133
|
-
* @returns true if the process is running, false otherwise
|
|
134
|
-
*/
|
|
135
|
-
function isRunning(pid) {
|
|
136
|
-
try {
|
|
137
|
-
process_1.default.kill(pid, 0);
|
|
138
|
-
}
|
|
139
|
-
catch (error) {
|
|
140
|
-
if (error.code === 'ESRCH') {
|
|
141
|
-
return false;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
return true;
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* Determines whether the process associated with a given PID should be
|
|
148
|
-
* terminated, based on the lock file contents stored for that PID.
|
|
149
|
-
*
|
|
150
|
-
* If the parent process is no longer active or the file is invalid, the
|
|
151
|
-
* function assumes the process is orphaned and should be killed.
|
|
152
|
-
*
|
|
153
|
-
* @param lockFile - The path of the lock file.
|
|
154
|
-
* @returns `true` if the process should be killed (e.g. parent no longer exists or file is invalid),
|
|
155
|
-
* `false` if the parent process is still alive and the process should be kept running.
|
|
156
|
-
*/
|
|
157
|
-
function shouldKillProcessUsingLock(lockFile) {
|
|
158
|
-
const fileContents = String((0, fs_1.readFileSync)(lockFile));
|
|
159
|
-
let data;
|
|
160
|
-
try {
|
|
161
|
-
data = lockFileSchema.parse(JSON.parse(fileContents));
|
|
162
|
-
}
|
|
163
|
-
catch (error) {
|
|
164
|
-
data = {
|
|
165
|
-
parentPid: undefined,
|
|
166
|
-
};
|
|
167
|
-
}
|
|
168
|
-
if (data.parentPid && isRunning(data.parentPid)) {
|
|
169
|
-
return false;
|
|
170
|
-
}
|
|
171
|
-
return true;
|
|
172
|
-
}
|
|
173
|
-
function spawnAndTrack(command, args = [], options) {
|
|
174
|
-
const child = (0, child_process_1.spawn)(command, args, {
|
|
175
|
-
...options,
|
|
176
|
-
detached: true,
|
|
177
|
-
});
|
|
178
|
-
(0, assert_1.default)(child.pid !== undefined);
|
|
179
|
-
logger_1.logger.info({
|
|
180
|
-
eventId: analytics_events_1.AnalyticsEvent.BACKGROUND_PROCESS_START,
|
|
181
|
-
pid: child.pid,
|
|
182
|
-
}, `Process start: \`${command} ${args.join(' ')}\``);
|
|
183
|
-
(0, fs_1.mkdirSync)(LOCK_DIR, { recursive: true });
|
|
184
|
-
const filePath = path_1.default.join(LOCK_DIR, `${child.pid}`);
|
|
185
|
-
createLockFile(filePath);
|
|
186
|
-
child.on('exit', () => {
|
|
187
|
-
deleteFileIfExists(filePath);
|
|
188
|
-
logger_1.logger.info({ eventId: analytics_events_1.AnalyticsEvent.BACKGROUND_PROCESS_END, pid: child.pid }, `Graceful exit: \`${command} ${args.join(' ')}\``);
|
|
189
|
-
});
|
|
190
|
-
return child;
|
|
191
|
-
}
|
|
192
|
-
/**
|
|
193
|
-
* Removes completed processes that have been fully reported
|
|
194
|
-
*/
|
|
195
|
-
function cleanupReportedProcesses() {
|
|
196
|
-
for (const [pid, info] of exports.backgroundProcesses.entries()) {
|
|
197
|
-
if ((info.status === 'completed' || info.status === 'error') &&
|
|
198
|
-
info.lastReportedStatus === info.status &&
|
|
199
|
-
info.lastReportedStdoutLength === info.stdoutBuffer.join('').length &&
|
|
200
|
-
info.lastReportedStderrLength === info.stderrBuffer.join('').length) {
|
|
201
|
-
exports.backgroundProcesses.delete(pid);
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
function waitForProcessExit(pid) {
|
|
206
|
-
return new Promise((resolve) => {
|
|
207
|
-
let resolved = false;
|
|
208
|
-
const interval = setInterval(() => {
|
|
209
|
-
if (!isRunning(pid)) {
|
|
210
|
-
clearInterval(interval);
|
|
211
|
-
clearTimeout(timeout);
|
|
212
|
-
resolved = true;
|
|
213
|
-
resolve(true);
|
|
214
|
-
}
|
|
215
|
-
}, POLLING_INTERVAL_MS);
|
|
216
|
-
const timeout = setTimeout(() => {
|
|
217
|
-
if (!resolved) {
|
|
218
|
-
clearInterval(interval);
|
|
219
|
-
resolve(false);
|
|
220
|
-
}
|
|
221
|
-
}, COMMAND_KILL_TIMEOUT_MS);
|
|
222
|
-
});
|
|
223
|
-
}
|
|
224
|
-
function killProcessTreeSoftly(pid) {
|
|
225
|
-
if (process_1.default.platform === 'win32') {
|
|
226
|
-
// /T = kill tree, no /F = soft kill
|
|
227
|
-
(0, child_process_1.spawn)('taskkill', ['/PID', String(pid), '/T'], {
|
|
228
|
-
stdio: 'ignore',
|
|
229
|
-
detached: true,
|
|
230
|
-
}).unref();
|
|
231
|
-
}
|
|
232
|
-
else {
|
|
233
|
-
try {
|
|
234
|
-
process_1.default.kill(-pid, 'SIGTERM');
|
|
235
|
-
}
|
|
236
|
-
catch (err) {
|
|
237
|
-
if (err?.code !== 'ESRCH')
|
|
238
|
-
throw err;
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
async function killAndWait(pid) {
|
|
243
|
-
try {
|
|
244
|
-
killProcessTreeSoftly(pid);
|
|
245
|
-
if (await waitForProcessExit(pid)) {
|
|
246
|
-
return;
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
catch (error) {
|
|
250
|
-
if (error.code === 'ESRCH') {
|
|
251
|
-
return;
|
|
252
|
-
}
|
|
253
|
-
else {
|
|
254
|
-
throw error;
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
throw new Error(`Unable to kill process ${pid}`);
|
|
258
|
-
}
|
|
259
|
-
// Only to be run on exit
|
|
260
|
-
function sendKillSignalToAllBackgroundProcesses() {
|
|
261
|
-
for (const [pid, p] of exports.backgroundProcesses.entries()) {
|
|
262
|
-
if (p.status !== 'running') {
|
|
263
|
-
continue;
|
|
264
|
-
}
|
|
265
|
-
try {
|
|
266
|
-
killProcessTreeSoftly(pid);
|
|
267
|
-
}
|
|
268
|
-
catch { }
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
async function killAllBackgroundProcesses() {
|
|
272
|
-
const killPromises = Array.from(exports.backgroundProcesses.entries())
|
|
273
|
-
.filter(([, p]) => p.status === 'running')
|
|
274
|
-
.map(async ([pid, processInfo]) => {
|
|
275
|
-
try {
|
|
276
|
-
await killAndWait(pid);
|
|
277
|
-
// console.log(gray(`Killed process: \`${processInfo.command}\``))
|
|
278
|
-
}
|
|
279
|
-
catch (error) {
|
|
280
|
-
console.error((0, picocolors_1.red)(`Failed to kill: \`${processInfo.command}\` (pid ${pid}): ${error?.message || error}`));
|
|
281
|
-
}
|
|
282
|
-
});
|
|
283
|
-
await Promise.all(killPromises);
|
|
284
|
-
exports.backgroundProcesses.clear();
|
|
285
|
-
}
|
|
286
|
-
/**
|
|
287
|
-
* Cleans up stale lock files and attempts to kill orphaned processes found in the lock directory.
|
|
288
|
-
* This function is intended to run on startup to handle cases where the application might have
|
|
289
|
-
* exited uncleanly, leaving orphaned processes or lock files.
|
|
290
|
-
*
|
|
291
|
-
* @returns Object containing:
|
|
292
|
-
* - shouldStartNewProcesses: boolean indicating if it's safe to start new processes
|
|
293
|
-
* - cleanUpPromise: Promise that resolves when cleanup is complete
|
|
294
|
-
*/
|
|
295
|
-
function cleanupStoredProcesses() {
|
|
296
|
-
// Determine which processes to kill (sync)
|
|
297
|
-
let separateCodebuffInstanceRunning = false;
|
|
298
|
-
const locksToProcess = [];
|
|
299
|
-
try {
|
|
300
|
-
(0, fs_1.mkdirSync)(LOCK_DIR, { recursive: true });
|
|
301
|
-
const files = (0, fs_1.readdirSync)(LOCK_DIR);
|
|
302
|
-
for (const file of files) {
|
|
303
|
-
const lockFile = path_1.default.join(LOCK_DIR, file);
|
|
304
|
-
if (shouldKillProcessUsingLock(lockFile)) {
|
|
305
|
-
locksToProcess.push(file);
|
|
306
|
-
}
|
|
307
|
-
else {
|
|
308
|
-
separateCodebuffInstanceRunning = true;
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
}
|
|
312
|
-
catch { }
|
|
313
|
-
if (locksToProcess.length) {
|
|
314
|
-
console.log((0, picocolors_1.gray)('Detected running codebuff processes. Cleaning...\n'));
|
|
315
|
-
logger_1.logger.info({
|
|
316
|
-
eventId: analytics_events_1.AnalyticsEvent.BACKGROUND_PROCESS_LEFTOVER_DETECTED,
|
|
317
|
-
pids: locksToProcess,
|
|
318
|
-
});
|
|
319
|
-
}
|
|
320
|
-
// Actually kill processes (async)
|
|
321
|
-
const processLockFile = async (pidName) => {
|
|
322
|
-
const lockFile = path_1.default.join(LOCK_DIR, pidName);
|
|
323
|
-
const pid = parseInt(pidName, 10);
|
|
324
|
-
if (isNaN(pid)) {
|
|
325
|
-
deleteFileIfExists(lockFile);
|
|
326
|
-
logger_1.logger.info({ eventId: analytics_events_1.AnalyticsEvent.BACKGROUND_PROCESS_END, pid }, 'Lock found but process not running.');
|
|
327
|
-
return;
|
|
328
|
-
}
|
|
329
|
-
if (exports.backgroundProcesses.has(pid)) {
|
|
330
|
-
logger_1.logger.error({ eventId: analytics_events_1.AnalyticsEvent.BACKGROUND_PROCESS_END, pid }, 'Process running in current session. Should not occur.');
|
|
331
|
-
return;
|
|
332
|
-
}
|
|
333
|
-
try {
|
|
334
|
-
killProcessTreeSoftly(pid);
|
|
335
|
-
if (await waitForProcessExit(pid)) {
|
|
336
|
-
deleteFileIfExists(lockFile);
|
|
337
|
-
logger_1.logger.info({ eventId: analytics_events_1.AnalyticsEvent.BACKGROUND_PROCESS_END, pid }, 'Process successfully killed.');
|
|
338
|
-
}
|
|
339
|
-
else {
|
|
340
|
-
logger_1.logger.warn({ eventId: analytics_events_1.AnalyticsEvent.BACKGROUND_PROCESS_CONTINUE, pid }, 'Process unable to be killed. Leaving lock file.');
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
catch (err) {
|
|
344
|
-
if (err.code === 'ESRCH') {
|
|
345
|
-
deleteFileIfExists(lockFile);
|
|
346
|
-
logger_1.logger.info({ eventId: analytics_events_1.AnalyticsEvent.BACKGROUND_PROCESS_END, pid }, 'Leftover process (with lock) died naturally.');
|
|
347
|
-
}
|
|
348
|
-
else {
|
|
349
|
-
logger_1.logger.error({ eventId: analytics_events_1.AnalyticsEvent.BACKGROUND_PROCESS_CONTINUE, err, pid }, 'Error killing process');
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
};
|
|
353
|
-
const cleanUpPromise = Promise.all(locksToProcess.map(processLockFile));
|
|
354
|
-
return {
|
|
355
|
-
separateCodebuffInstanceRunning,
|
|
356
|
-
cleanUpPromise,
|
|
357
|
-
};
|
|
358
|
-
}
|
|
359
|
-
//# sourceMappingURL=background-process-manager.js.map
|