codecane 1.0.293 → 1.0.296
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/README.md +87 -0
- package/dist/background-process-manager.d.ts +50 -0
- package/dist/background-process-manager.js +359 -0
- package/dist/background-process-manager.js.map +1 -0
- package/dist/browser-runner.d.ts +35 -0
- package/dist/browser-runner.js +680 -0
- package/dist/browser-runner.js.map +1 -0
- package/dist/chat-storage.d.ts +2 -0
- package/dist/chat-storage.js +93 -0
- package/dist/chat-storage.js.map +1 -0
- package/dist/checkpoints/checkpoint-manager.d.ts +94 -0
- package/dist/checkpoints/checkpoint-manager.js +280 -0
- package/dist/checkpoints/checkpoint-manager.js.map +1 -0
- package/dist/checkpoints/file-manager.d.ts +72 -0
- package/dist/checkpoints/file-manager.js +294 -0
- package/dist/checkpoints/file-manager.js.map +1 -0
- package/dist/cli-handlers/api-key.d.ts +25 -0
- package/dist/cli-handlers/api-key.js +66 -0
- package/dist/cli-handlers/api-key.js.map +1 -0
- package/dist/cli-handlers/checkpoint.d.ts +18 -0
- package/dist/cli-handlers/checkpoint.js +195 -0
- package/dist/cli-handlers/checkpoint.js.map +1 -0
- package/dist/cli-handlers/diff.d.ts +2 -0
- package/dist/cli-handlers/diff.js +31 -0
- package/dist/cli-handlers/diff.js.map +1 -0
- package/dist/cli-handlers/easter-egg.d.ts +1 -0
- package/dist/cli-handlers/easter-egg.js +126 -0
- package/dist/cli-handlers/easter-egg.js.map +1 -0
- package/dist/cli-handlers/inititalization-flow.d.ts +1 -0
- package/dist/cli-handlers/inititalization-flow.js +24 -0
- package/dist/cli-handlers/inititalization-flow.js.map +1 -0
- package/dist/cli.d.ts +44 -0
- package/dist/cli.js +494 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +151 -0
- package/dist/client.js +835 -0
- package/dist/client.js.map +1 -0
- package/dist/code-map/languages.d.ts +13 -0
- package/dist/code-map/languages.d.ts.map +1 -0
- package/dist/code-map/languages.js +129 -0
- package/dist/code-map/languages.js.map +1 -0
- package/dist/code-map/parse.d.ts +12 -0
- package/dist/code-map/parse.d.ts.map +1 -0
- package/dist/code-map/parse.js +127 -0
- package/dist/code-map/parse.js.map +1 -0
- package/dist/code-map/test-langs/test.d.ts +12 -0
- package/dist/code-map/test-langs/test.d.ts.map +1 -0
- package/dist/code-map/test-langs/test.js +23 -0
- package/dist/code-map/test-langs/test.js.map +1 -0
- package/dist/code-map/tree-sitter-queries/readme.md +23 -0
- package/dist/code-map/tree-sitter-queries/tree-sitter-c-tags.scm +11 -0
- package/dist/code-map/tree-sitter-queries/tree-sitter-c_sharp-tags.scm +13 -0
- package/dist/code-map/tree-sitter-queries/tree-sitter-cpp-tags.scm +17 -0
- package/dist/code-map/tree-sitter-queries/tree-sitter-go-tags.scm +26 -0
- package/dist/code-map/tree-sitter-queries/tree-sitter-java-tags.scm +19 -0
- package/dist/code-map/tree-sitter-queries/tree-sitter-javascript-tags.scm +15 -0
- package/dist/code-map/tree-sitter-queries/tree-sitter-php-tags.scm +26 -0
- package/dist/code-map/tree-sitter-queries/tree-sitter-python-tags.scm +9 -0
- package/dist/code-map/tree-sitter-queries/tree-sitter-ruby-tags.scm +58 -0
- package/dist/code-map/tree-sitter-queries/tree-sitter-rust-tags.scm +26 -0
- package/dist/code-map/tree-sitter-queries/tree-sitter-typescript-tags.scm +15 -0
- package/dist/code-map/tsconfig.tsbuildinfo +1 -0
- package/dist/common/actions.d.ts +2592 -0
- package/dist/common/actions.js +144 -0
- package/dist/common/actions.js.map +1 -0
- 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/api-keys/constants.d.ts +8 -0
- package/dist/common/api-keys/constants.js +26 -0
- package/dist/common/api-keys/constants.js.map +1 -0
- package/dist/common/api-keys/crypto.d.ts +24 -0
- package/dist/common/api-keys/crypto.js +186 -0
- package/dist/common/api-keys/crypto.js.map +1 -0
- package/dist/common/browser-actions.d.ts +4415 -0
- package/dist/common/browser-actions.js +343 -0
- package/dist/common/browser-actions.js.map +1 -0
- package/dist/common/constants/analytics-events.d.ts +19 -0
- package/dist/common/constants/analytics-events.js +27 -0
- package/dist/common/constants/analytics-events.js.map +1 -0
- package/dist/common/constants/grant-priorities.d.ts +2 -0
- package/dist/common/constants/grant-priorities.js +10 -0
- package/dist/common/constants/grant-priorities.js.map +1 -0
- package/dist/common/constants/tools.d.ts +17 -0
- package/dist/common/constants/tools.js +45 -0
- package/dist/common/constants/tools.js.map +1 -0
- package/dist/common/constants.d.ts +134 -0
- package/dist/common/constants.js +180 -0
- package/dist/common/constants.js.map +1 -0
- package/dist/common/db/drizzle.config.d.ts +2 -0
- package/dist/common/db/drizzle.config.js +17 -0
- package/dist/common/db/drizzle.config.js.map +1 -0
- package/dist/common/db/env.d.mts +1 -0
- package/dist/common/db/env.mjs +26 -0
- package/dist/common/db/env.mjs.map +1 -0
- package/dist/common/db/index.d.ts +6 -0
- package/dist/common/db/index.js +35 -0
- package/dist/common/db/index.js.map +1 -0
- package/dist/common/db/schema.d.ts +1419 -0
- package/dist/common/db/schema.js +175 -0
- package/dist/common/db/schema.js.map +1 -0
- package/dist/common/db/transaction.d.ts +12 -0
- package/dist/common/db/transaction.js +36 -0
- package/dist/common/db/transaction.js.map +1 -0
- package/dist/common/env.d.mts +1 -0
- package/dist/common/env.mjs +40 -0
- package/dist/common/env.mjs.map +1 -0
- package/dist/common/json-config/__tests__/stringify-schema.test.d.ts +1 -0
- package/dist/common/json-config/__tests__/stringify-schema.test.js +66 -0
- package/dist/common/json-config/__tests__/stringify-schema.test.js.map +1 -0
- package/dist/common/json-config/constants.d.ts +82 -0
- package/dist/common/json-config/constants.js +48 -0
- package/dist/common/json-config/constants.js.map +1 -0
- package/dist/common/json-config/parser.d.ts +7 -0
- package/dist/common/json-config/parser.js +51 -0
- package/dist/common/json-config/parser.js.map +1 -0
- package/dist/common/json-config/stringify-schema.d.ts +9 -0
- package/dist/common/json-config/stringify-schema.js +131 -0
- package/dist/common/json-config/stringify-schema.js.map +1 -0
- package/dist/common/project-file-tree.d.ts +11 -0
- package/dist/common/project-file-tree.js +200 -0
- package/dist/common/project-file-tree.js.map +1 -0
- package/dist/common/types/agent-state.d.ts +464 -0
- package/dist/common/types/agent-state.js +32 -0
- package/dist/common/types/agent-state.js.map +1 -0
- package/dist/common/types/grant.d.ts +2 -0
- package/dist/common/types/grant.js +10 -0
- package/dist/common/types/grant.js.map +1 -0
- package/dist/common/types/message.d.ts +311 -0
- package/dist/common/types/message.js +54 -0
- package/dist/common/types/message.js.map +1 -0
- package/dist/common/types/referral.d.ts +2 -0
- package/dist/common/types/referral.js +5 -0
- package/dist/common/types/referral.js.map +1 -0
- package/dist/common/types/tools.d.ts +5 -0
- package/dist/common/types/tools.js +3 -0
- package/dist/common/types/tools.js.map +1 -0
- package/dist/common/types/usage.d.ts +40 -0
- package/dist/common/types/usage.js +15 -0
- package/dist/common/types/usage.js.map +1 -0
- package/dist/common/util/__tests__/messages.test.d.ts +1 -0
- package/dist/common/util/__tests__/messages.test.js +70 -0
- package/dist/common/util/__tests__/messages.test.js.map +1 -0
- package/dist/common/util/__tests__/saxy.test.d.ts +1 -0
- package/dist/common/util/__tests__/saxy.test.js +387 -0
- package/dist/common/util/__tests__/saxy.test.js.map +1 -0
- package/dist/common/util/__tests__/string.test.d.ts +1 -0
- package/dist/common/util/__tests__/string.test.js +82 -0
- package/dist/common/util/__tests__/string.test.js.map +1 -0
- package/dist/common/util/array.d.ts +6 -0
- package/dist/common/util/array.js +32 -0
- package/dist/common/util/array.js.map +1 -0
- package/dist/common/util/changes.d.ts +7 -0
- package/dist/common/util/changes.js +78 -0
- package/dist/common/util/changes.js.map +1 -0
- package/dist/common/util/credentials.d.ts +25 -0
- package/dist/common/util/credentials.js +24 -0
- package/dist/common/util/credentials.js.map +1 -0
- package/dist/common/util/currency.d.ts +14 -0
- package/dist/common/util/currency.js +23 -0
- package/dist/common/util/currency.js.map +1 -0
- package/dist/common/util/dates.d.ts +10 -0
- package/dist/common/util/dates.js +22 -0
- package/dist/common/util/dates.js.map +1 -0
- package/dist/common/util/file.d.ts +159 -0
- package/dist/common/util/file.js +192 -0
- package/dist/common/util/file.js.map +1 -0
- package/dist/common/util/git.d.ts +6 -0
- package/dist/common/util/git.js +81 -0
- package/dist/common/util/git.js.map +1 -0
- package/dist/common/util/logger.d.ts +8 -0
- package/dist/common/util/logger.js +52 -0
- package/dist/common/util/logger.js.map +1 -0
- package/dist/common/util/lru-cache.d.ts +30 -0
- package/dist/common/util/lru-cache.js +68 -0
- package/dist/common/util/lru-cache.js.map +1 -0
- package/dist/common/util/messages.d.ts +9 -0
- package/dist/common/util/messages.js +69 -0
- package/dist/common/util/messages.js.map +1 -0
- package/dist/common/util/min-heap.d.ts +15 -0
- package/dist/common/util/min-heap.js +73 -0
- package/dist/common/util/min-heap.js.map +1 -0
- package/dist/common/util/object.d.ts +18 -0
- package/dist/common/util/object.js +91 -0
- package/dist/common/util/object.js.map +1 -0
- package/dist/common/util/patch.d.ts +1 -0
- package/dist/common/util/patch.js +215 -0
- package/dist/common/util/patch.js.map +1 -0
- package/dist/common/util/promise.d.ts +17 -0
- package/dist/common/util/promise.js +80 -0
- package/dist/common/util/promise.js.map +1 -0
- package/dist/common/util/referral.d.ts +1 -0
- package/dist/common/util/referral.js +6 -0
- package/dist/common/util/referral.js.map +1 -0
- package/dist/common/util/saxy.d.ts +164 -0
- package/dist/common/util/saxy.js +503 -0
- package/dist/common/util/saxy.js.map +1 -0
- package/dist/common/util/string.d.ts +61 -0
- package/dist/common/util/string.js +220 -0
- package/dist/common/util/string.js.map +1 -0
- package/dist/common/util/stripe.d.ts +3 -0
- package/dist/common/util/stripe.js +22 -0
- package/dist/common/util/stripe.js.map +1 -0
- package/dist/common/util/sync-failure.d.ts +1 -0
- package/dist/common/util/sync-failure.js +57 -0
- package/dist/common/util/sync-failure.js.map +1 -0
- package/dist/common/websockets/websocket-client.d.ts +42 -0
- package/dist/common/websockets/websocket-client.js +216 -0
- package/dist/common/websockets/websocket-client.js.map +1 -0
- package/dist/common/websockets/websocket-schema.d.ts +4876 -0
- package/dist/common/websockets/websocket-schema.js +55 -0
- package/dist/common/websockets/websocket-schema.js.map +1 -0
- package/dist/config.d.ts +4 -0
- package/dist/config.js +12 -0
- package/dist/config.js.map +1 -0
- package/dist/create-template-project.d.ts +1 -0
- package/dist/create-template-project.js +107 -0
- package/dist/create-template-project.js.map +1 -0
- package/dist/credentials.d.ts +4 -0
- package/dist/credentials.js +38 -0
- package/dist/credentials.js.map +1 -0
- package/dist/dev-process-manager.d.ts +10 -0
- package/dist/dev-process-manager.js +55 -0
- package/dist/dev-process-manager.js.map +1 -0
- package/dist/display.d.ts +9 -0
- package/dist/display.js +68 -0
- package/dist/display.js.map +1 -0
- package/dist/fingerprint.d.ts +1 -0
- package/dist/fingerprint.js +48 -0
- package/dist/fingerprint.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +130 -0
- package/dist/index.js.map +1 -0
- package/dist/menu.d.ts +3 -0
- package/dist/menu.js +170 -0
- package/dist/menu.js.map +1 -0
- package/dist/project-files.d.ts +129 -0
- package/dist/project-files.js +556 -0
- package/dist/project-files.js.map +1 -0
- package/dist/startup-process-handler.d.ts +2 -0
- package/dist/startup-process-handler.js +21 -0
- package/dist/startup-process-handler.js.map +1 -0
- package/dist/tool-handlers.d.ts +30 -0
- package/dist/tool-handlers.js +245 -0
- package/dist/tool-handlers.js.map +1 -0
- package/dist/types.d.ts +15 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/update-codebuff.d.ts +1 -0
- package/dist/update-codebuff.js +161 -0
- package/dist/update-codebuff.js.map +1 -0
- package/dist/utils/__tests__/background-process-manager.test.d.ts +1 -0
- package/dist/utils/__tests__/background-process-manager.test.js +327 -0
- package/dist/utils/__tests__/background-process-manager.test.js.map +1 -0
- package/dist/utils/__tests__/response-example-4-files.txt +621 -0
- package/dist/utils/__tests__/tool-renderers.test.d.ts +1 -0
- package/dist/utils/__tests__/tool-renderers.test.js +51 -0
- package/dist/utils/__tests__/tool-renderers.test.js.map +1 -0
- package/dist/utils/__tests__/xml-stream-parser.test.d.ts +1 -0
- package/dist/utils/__tests__/xml-stream-parser.test.js +229 -0
- package/dist/utils/__tests__/xml-stream-parser.test.js.map +1 -0
- package/dist/utils/analytics.d.ts +6 -0
- package/dist/utils/analytics.js +83 -0
- package/dist/utils/analytics.js.map +1 -0
- package/dist/utils/detect-shell.d.ts +1 -0
- package/dist/utils/detect-shell.js +60 -0
- package/dist/utils/detect-shell.js.map +1 -0
- package/dist/utils/git.d.ts +2 -0
- package/dist/utils/git.js +40 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/logger.d.ts +21 -0
- package/dist/utils/logger.js +105 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/spinner.d.ts +11 -0
- package/dist/utils/spinner.js +87 -0
- package/dist/utils/spinner.js.map +1 -0
- package/dist/utils/system-info.d.ts +8 -0
- package/dist/utils/system-info.js +22 -0
- package/dist/utils/system-info.js.map +1 -0
- package/dist/utils/terminal.d.ts +43 -0
- package/dist/utils/terminal.js +546 -0
- package/dist/utils/terminal.js.map +1 -0
- package/dist/utils/tool-renderers.d.ts +16 -0
- package/dist/utils/tool-renderers.js +163 -0
- package/dist/utils/tool-renderers.js.map +1 -0
- package/dist/utils/xml-stream-parser.d.ts +9 -0
- package/dist/utils/xml-stream-parser.js +128 -0
- package/dist/utils/xml-stream-parser.js.map +1 -0
- package/dist/web-scraper.d.ts +3 -0
- package/dist/web-scraper.js +57 -0
- package/dist/web-scraper.js.map +1 -0
- package/dist/workers/checkpoint-worker.d.ts +1 -0
- package/dist/workers/checkpoint-worker.js +48 -0
- package/dist/workers/checkpoint-worker.js.map +1 -0
- package/dist/workers/project-context.d.ts +1 -0
- package/dist/workers/project-context.js +20 -0
- package/dist/workers/project-context.js.map +1 -0
- package/package.json +69 -22
- package/bin/launcher.js +0 -21
- package/scripts/postinstall.js +0 -100
|
@@ -0,0 +1,229 @@
|
|
|
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
|
+
const fs_1 = __importDefault(require("fs"));
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const stream_1 = require("stream");
|
|
9
|
+
// @ts-ignore
|
|
10
|
+
const bun_test_1 = require("bun:test");
|
|
11
|
+
const tools_1 = require("../../common/constants/tools");
|
|
12
|
+
const strip_ansi_1 = __importDefault(require("strip-ansi"));
|
|
13
|
+
const tool_renderers_1 = require("../tool-renderers");
|
|
14
|
+
const xml_stream_parser_1 = require("../xml-stream-parser");
|
|
15
|
+
const toolRenderers = {
|
|
16
|
+
run_terminal_command: tool_renderers_1.defaultToolCallRenderer,
|
|
17
|
+
write_file: tool_renderers_1.defaultToolCallRenderer,
|
|
18
|
+
read_files: tool_renderers_1.defaultToolCallRenderer,
|
|
19
|
+
};
|
|
20
|
+
(0, bun_test_1.describe)('Saxy Stream Processor', () => {
|
|
21
|
+
(0, bun_test_1.test)('pipes output to writable stream', async () => {
|
|
22
|
+
const xml = (0, tools_1.getToolCallString)('run_terminal_command', {
|
|
23
|
+
command: 'echo hello',
|
|
24
|
+
});
|
|
25
|
+
let result = '';
|
|
26
|
+
const processor = (0, xml_stream_parser_1.createXMLStreamParser)(toolRenderers);
|
|
27
|
+
const writable = new stream_1.Writable({
|
|
28
|
+
write(chunk, encoding, callback) {
|
|
29
|
+
result += chunk.toString();
|
|
30
|
+
callback();
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
processor.pipe(writable);
|
|
34
|
+
processor.write(xml);
|
|
35
|
+
processor.end();
|
|
36
|
+
// Wait for the stream to finish
|
|
37
|
+
await new Promise((resolve) => {
|
|
38
|
+
writable.on('finish', resolve);
|
|
39
|
+
});
|
|
40
|
+
(0, bun_test_1.expect)(result).toContain('Run Terminal Command');
|
|
41
|
+
(0, bun_test_1.expect)(result).toContain('echo hello');
|
|
42
|
+
});
|
|
43
|
+
(0, bun_test_1.test)('handles multiple tool calls in sequence', async () => {
|
|
44
|
+
const xml = (0, tools_1.getToolCallString)('run_terminal_command', { command: 'ls' }) +
|
|
45
|
+
(0, tools_1.getToolCallString)('read_files', { paths: 'file.txt' });
|
|
46
|
+
let result = '';
|
|
47
|
+
const processor = (0, xml_stream_parser_1.createXMLStreamParser)(toolRenderers);
|
|
48
|
+
const writable = new stream_1.Writable({
|
|
49
|
+
write(chunk, encoding, callback) {
|
|
50
|
+
result += chunk.toString();
|
|
51
|
+
callback();
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
processor.pipe(writable);
|
|
55
|
+
processor.write(xml);
|
|
56
|
+
processor.end();
|
|
57
|
+
// Wait for the stream to finish
|
|
58
|
+
await new Promise((resolve) => {
|
|
59
|
+
writable.on('finish', resolve);
|
|
60
|
+
});
|
|
61
|
+
(0, bun_test_1.expect)(result).toContain('Run Terminal Command');
|
|
62
|
+
(0, bun_test_1.expect)(result).toContain('ls');
|
|
63
|
+
(0, bun_test_1.expect)(result).toContain('Read Files');
|
|
64
|
+
(0, bun_test_1.expect)(result).toContain('file.txt');
|
|
65
|
+
});
|
|
66
|
+
(0, bun_test_1.test)('handles text content between tool calls', async () => {
|
|
67
|
+
const xml = (0, tools_1.getToolCallString)('run_terminal_command', { command: 'ls' }) +
|
|
68
|
+
'Some text between tool calls' +
|
|
69
|
+
(0, tools_1.getToolCallString)('read_files', { paths: 'file.txt' });
|
|
70
|
+
let result = '';
|
|
71
|
+
const processor = (0, xml_stream_parser_1.createXMLStreamParser)(toolRenderers);
|
|
72
|
+
const writable = new stream_1.Writable({
|
|
73
|
+
write(chunk, encoding, callback) {
|
|
74
|
+
result += chunk.toString();
|
|
75
|
+
callback();
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
processor.pipe(writable);
|
|
79
|
+
processor.write(xml);
|
|
80
|
+
processor.end();
|
|
81
|
+
// Wait for the stream to finish
|
|
82
|
+
await new Promise((resolve) => {
|
|
83
|
+
writable.on('finish', resolve);
|
|
84
|
+
});
|
|
85
|
+
(0, bun_test_1.expect)(result).toContain('Run Terminal Command');
|
|
86
|
+
(0, bun_test_1.expect)(result).toContain('ls');
|
|
87
|
+
(0, bun_test_1.expect)(result).toContain('Some text between tool calls');
|
|
88
|
+
(0, bun_test_1.expect)(result).toContain('Read Files');
|
|
89
|
+
(0, bun_test_1.expect)(result).toContain('file.txt');
|
|
90
|
+
});
|
|
91
|
+
(0, bun_test_1.test)('processes chunks incrementally with output verification', async () => {
|
|
92
|
+
// Define chunks that will be written one at a time
|
|
93
|
+
const terminalCommand = (0, tools_1.getToolCallString)('run_terminal_command', {
|
|
94
|
+
command: 'npm install',
|
|
95
|
+
});
|
|
96
|
+
const codeSearch = (0, tools_1.getToolCallString)('code_search', { pattern: 'function' });
|
|
97
|
+
// Split the XML into chunks
|
|
98
|
+
const chunks = [
|
|
99
|
+
terminalCommand.slice(0, 15),
|
|
100
|
+
terminalCommand.slice(15, 30),
|
|
101
|
+
terminalCommand.slice(30, 40),
|
|
102
|
+
terminalCommand.slice(40, 50),
|
|
103
|
+
terminalCommand.slice(50),
|
|
104
|
+
codeSearch.slice(0, 15),
|
|
105
|
+
codeSearch.slice(15),
|
|
106
|
+
];
|
|
107
|
+
// Array to store output chunks as they're produced
|
|
108
|
+
const outputChunks = [];
|
|
109
|
+
// Create a writable stream that captures each output chunk
|
|
110
|
+
const writable = new stream_1.Writable({
|
|
111
|
+
write(chunk, encoding, callback) {
|
|
112
|
+
const chunkStr = chunk.toString();
|
|
113
|
+
outputChunks.push(chunkStr);
|
|
114
|
+
callback();
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
// Create the processor
|
|
118
|
+
const processor = (0, xml_stream_parser_1.createXMLStreamParser)(toolRenderers);
|
|
119
|
+
processor.pipe(writable);
|
|
120
|
+
// Process each chunk with a small delay between them
|
|
121
|
+
for (const chunk of chunks) {
|
|
122
|
+
processor.write(chunk);
|
|
123
|
+
// Small delay to simulate real-world streaming
|
|
124
|
+
await new Promise((resolve) => setTimeout(resolve, 5));
|
|
125
|
+
}
|
|
126
|
+
processor.end();
|
|
127
|
+
// Wait for the stream to finish
|
|
128
|
+
await new Promise((resolve) => {
|
|
129
|
+
writable.on('finish', resolve);
|
|
130
|
+
});
|
|
131
|
+
// Verify the complete output
|
|
132
|
+
const fullOutput = (0, strip_ansi_1.default)(outputChunks.join(''));
|
|
133
|
+
(0, bun_test_1.expect)(fullOutput).toContain('Run Terminal Command');
|
|
134
|
+
(0, bun_test_1.expect)(fullOutput).toContain('npm install');
|
|
135
|
+
(0, bun_test_1.expect)(fullOutput).toContain('Code Search');
|
|
136
|
+
(0, bun_test_1.expect)(fullOutput).toContain('function');
|
|
137
|
+
// Verify incremental output - but don't make assumptions about which chunks contain what
|
|
138
|
+
// Just check that we got multiple output chunks (incremental processing)
|
|
139
|
+
(0, bun_test_1.expect)(outputChunks.length).toBeGreaterThan(1);
|
|
140
|
+
// Check that the terminal command appears before the code search in the output
|
|
141
|
+
const terminalCommandIndex = fullOutput.indexOf('Run Terminal Command');
|
|
142
|
+
const codeSearchIndex = fullOutput.indexOf('Code Search');
|
|
143
|
+
(0, bun_test_1.expect)(terminalCommandIndex).toBeLessThan(codeSearchIndex);
|
|
144
|
+
});
|
|
145
|
+
(0, bun_test_1.test)('processes text content incrementally', async () => {
|
|
146
|
+
// Define chunks that will be written one at a time
|
|
147
|
+
const chunks = ['hi', 'hi2', 'hi3 <yo>\nyo\n</yo>'];
|
|
148
|
+
// Array to store output chunks as they're produced
|
|
149
|
+
const outputChunks = [];
|
|
150
|
+
// Create a writable stream that captures each output chunk
|
|
151
|
+
const writable = new stream_1.Writable({
|
|
152
|
+
write(chunk, encoding, callback) {
|
|
153
|
+
const chunkStr = chunk.toString();
|
|
154
|
+
outputChunks.push(chunkStr);
|
|
155
|
+
callback();
|
|
156
|
+
},
|
|
157
|
+
});
|
|
158
|
+
// Create the processor
|
|
159
|
+
const processor = (0, xml_stream_parser_1.createXMLStreamParser)(toolRenderers);
|
|
160
|
+
processor.pipe(writable);
|
|
161
|
+
// Process each chunk with a small delay between them
|
|
162
|
+
for (const chunk of chunks) {
|
|
163
|
+
processor.write(chunk);
|
|
164
|
+
// Small delay to simulate real-world streaming
|
|
165
|
+
await new Promise((resolve) => setTimeout(resolve, 5));
|
|
166
|
+
}
|
|
167
|
+
processor.end();
|
|
168
|
+
// Wait for the stream to finish
|
|
169
|
+
await new Promise((resolve) => {
|
|
170
|
+
writable.on('finish', resolve);
|
|
171
|
+
});
|
|
172
|
+
// Verify the complete output
|
|
173
|
+
const fullOutput = outputChunks.join('');
|
|
174
|
+
(0, bun_test_1.expect)(fullOutput).toEqual('hihi2hi3 <yo>\nyo\n</yo>');
|
|
175
|
+
(0, bun_test_1.expect)(outputChunks.length).toBeGreaterThan(3);
|
|
176
|
+
});
|
|
177
|
+
(0, bun_test_1.test)('real world example write to 4 files', async () => {
|
|
178
|
+
// Read the file content directly - no need for complex unescaping
|
|
179
|
+
const response = fs_1.default.readFileSync(path_1.default.join(__dirname, './response-example-4-files.txt'), 'utf-8');
|
|
180
|
+
// Array to store output chunks as they're produced
|
|
181
|
+
const outputChunks = [];
|
|
182
|
+
// Create a writable stream that captures each output chunk
|
|
183
|
+
const writable = new stream_1.Writable({
|
|
184
|
+
write(chunk, encoding, callback) {
|
|
185
|
+
const chunkStr = chunk.toString();
|
|
186
|
+
outputChunks.push(chunkStr);
|
|
187
|
+
callback();
|
|
188
|
+
},
|
|
189
|
+
});
|
|
190
|
+
let writeFileStartCount = 0;
|
|
191
|
+
let writeFileEndCount = 0;
|
|
192
|
+
const testToolRenderers = {
|
|
193
|
+
...toolRenderers,
|
|
194
|
+
write_file: {
|
|
195
|
+
...tool_renderers_1.defaultToolCallRenderer,
|
|
196
|
+
onToolStart: (toolName) => {
|
|
197
|
+
writeFileStartCount++;
|
|
198
|
+
return 'Write File';
|
|
199
|
+
},
|
|
200
|
+
onParamStart: (paramName, toolName) => {
|
|
201
|
+
return null;
|
|
202
|
+
},
|
|
203
|
+
onParamEnd: (paramName, toolName, content) => {
|
|
204
|
+
return null;
|
|
205
|
+
},
|
|
206
|
+
onToolEnd: (toolName, params) => {
|
|
207
|
+
writeFileEndCount++;
|
|
208
|
+
return null;
|
|
209
|
+
},
|
|
210
|
+
},
|
|
211
|
+
};
|
|
212
|
+
// Create the processor
|
|
213
|
+
const processor = (0, xml_stream_parser_1.createXMLStreamParser)(testToolRenderers);
|
|
214
|
+
processor.pipe(writable);
|
|
215
|
+
processor.write(response);
|
|
216
|
+
processor.end();
|
|
217
|
+
// Wait for the stream to finish
|
|
218
|
+
await new Promise((resolve) => {
|
|
219
|
+
writable.on('finish', resolve);
|
|
220
|
+
});
|
|
221
|
+
// Verify the complete output
|
|
222
|
+
const fullOutput = outputChunks.join('');
|
|
223
|
+
(0, bun_test_1.expect)(fullOutput).toContain('Write File'); // Check for expected output without worrying about formatting
|
|
224
|
+
(0, bun_test_1.expect)(writeFileEndCount).toBe(4);
|
|
225
|
+
// We expect multiple chunks for a large response
|
|
226
|
+
(0, bun_test_1.expect)(outputChunks.length).toBeGreaterThan(1);
|
|
227
|
+
});
|
|
228
|
+
});
|
|
229
|
+
//# sourceMappingURL=xml-stream-parser.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xml-stream-parser.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/xml-stream-parser.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { AnalyticsEvent } from '../common/constants/analytics-events';
|
|
2
|
+
export declare let identified: boolean;
|
|
3
|
+
export declare function initAnalytics(): void;
|
|
4
|
+
export declare function flushAnalytics(): Promise<void>;
|
|
5
|
+
export declare function trackEvent(event: AnalyticsEvent, properties?: Record<string, any>): void;
|
|
6
|
+
export declare function identifyUser(userId: string, properties?: Record<string, any>): void;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.identified = void 0;
|
|
4
|
+
exports.initAnalytics = initAnalytics;
|
|
5
|
+
exports.flushAnalytics = flushAnalytics;
|
|
6
|
+
exports.trackEvent = trackEvent;
|
|
7
|
+
exports.identifyUser = identifyUser;
|
|
8
|
+
const posthog_node_1 = require("posthog-node");
|
|
9
|
+
// Prints the events to console
|
|
10
|
+
// It's very noisy, so recommended you set this to true
|
|
11
|
+
// only when you're actively adding new analytics
|
|
12
|
+
let DEBUG_DEV_EVENTS = false;
|
|
13
|
+
// Store the identified user ID
|
|
14
|
+
let currentUserId;
|
|
15
|
+
let client;
|
|
16
|
+
exports.identified = false;
|
|
17
|
+
function initAnalytics() {
|
|
18
|
+
if (!process.env.NEXT_PUBLIC_POSTHOG_API_KEY ||
|
|
19
|
+
!process.env.NEXT_PUBLIC_APP_URL) {
|
|
20
|
+
throw new Error('NEXT_PUBLIC_POSTHOG_API_KEY or NEXT_PUBLIC_APP_URL is not set');
|
|
21
|
+
}
|
|
22
|
+
client = new posthog_node_1.PostHog(process.env.NEXT_PUBLIC_POSTHOG_API_KEY, {
|
|
23
|
+
host: `${process.env.NEXT_PUBLIC_APP_URL}/ingest`,
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
async function flushAnalytics() {
|
|
27
|
+
if (!client) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
try {
|
|
31
|
+
await client.flush();
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
// Silently handle PostHog network errors
|
|
35
|
+
if (DEBUG_DEV_EVENTS) {
|
|
36
|
+
console.error('PostHog error:', error);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function trackEvent(event, properties) {
|
|
41
|
+
const distinctId = currentUserId;
|
|
42
|
+
if (!distinctId) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (!client) {
|
|
46
|
+
throw new Error('Analytics client not initialized');
|
|
47
|
+
}
|
|
48
|
+
if (process.env.NEXT_PUBLIC_CB_ENVIRONMENT !== 'production') {
|
|
49
|
+
if (DEBUG_DEV_EVENTS) {
|
|
50
|
+
console.log('Analytics event sent', {
|
|
51
|
+
event,
|
|
52
|
+
properties,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
client.capture({
|
|
58
|
+
distinctId,
|
|
59
|
+
event,
|
|
60
|
+
properties,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
function identifyUser(userId, properties) {
|
|
64
|
+
// Store the user ID for future events
|
|
65
|
+
currentUserId = userId;
|
|
66
|
+
if (!client) {
|
|
67
|
+
throw new Error('Analytics client not initialized');
|
|
68
|
+
}
|
|
69
|
+
if (process.env.NEXT_PUBLIC_CB_ENVIRONMENT !== 'production') {
|
|
70
|
+
if (DEBUG_DEV_EVENTS) {
|
|
71
|
+
console.log('Identify event sent', {
|
|
72
|
+
userId,
|
|
73
|
+
properties,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
client.identify({
|
|
79
|
+
distinctId: userId,
|
|
80
|
+
properties,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=analytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/utils/analytics.ts"],"names":[],"mappings":";;;AAcA,sCAaC;AAED,wCAYC;AAED,gCA2BC;AAED,oCAsBC;AA7FD,+CAAsC;AAEtC,+BAA+B;AAC/B,uDAAuD;AACvD,iDAAiD;AACjD,IAAI,gBAAgB,GAAG,KAAK,CAAA;AAE5B,+BAA+B;AAC/B,IAAI,aAAiC,CAAA;AACrC,IAAI,MAA2B,CAAA;AAEpB,QAAA,UAAU,GAAY,KAAK,CAAA;AAEtC,SAAgB,aAAa;IAC3B,IACE,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B;QACxC,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAChC,CAAC;QACD,MAAM,IAAI,KAAK,CACb,+DAA+D,CAChE,CAAA;IACH,CAAC;IAED,MAAM,GAAG,IAAI,sBAAO,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE;QAC5D,IAAI,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,SAAS;KAClD,CAAC,CAAA;AACJ,CAAC;AAEM,KAAK,UAAU,cAAc;IAClC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAM;IACR,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,yCAAyC;QACzC,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAA;QACxC,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAgB,UAAU,CACxB,KAAqB,EACrB,UAAgC;IAEhC,MAAM,UAAU,GAAG,aAAa,CAAA;IAChC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAM;IACR,CAAC;IACD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;IACrD,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,0BAA0B,KAAK,YAAY,EAAE,CAAC;QAC5D,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE;gBAClC,KAAK;gBACL,UAAU;aACX,CAAC,CAAA;QACJ,CAAC;QACD,OAAM;IACR,CAAC;IAED,MAAM,CAAC,OAAO,CAAC;QACb,UAAU;QACV,KAAK;QACL,UAAU;KACX,CAAC,CAAA;AACJ,CAAC;AAED,SAAgB,YAAY,CAAC,MAAc,EAAE,UAAgC;IAC3E,sCAAsC;IACtC,aAAa,GAAG,MAAM,CAAA;IAEtB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;IACrD,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,CAAC,0BAA0B,KAAK,YAAY,EAAE,CAAC;QAC5D,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE;gBACjC,MAAM;gBACN,UAAU;aACX,CAAC,CAAA;QACJ,CAAC;QACD,OAAM;IACR,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC;QACd,UAAU,EAAE,MAAM;QAClB,UAAU;KACX,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function detectShell(): 'bash' | 'zsh' | 'fish' | 'cmd.exe' | 'powershell' | 'unknown' | string;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.detectShell = detectShell;
|
|
4
|
+
const os_1 = require("os");
|
|
5
|
+
const child_process_1 = require("child_process");
|
|
6
|
+
function detectShell() {
|
|
7
|
+
// Get the parent process environment
|
|
8
|
+
const shell = process.env.SHELL || process.env.COMSPEC || process.env.PSModulePath;
|
|
9
|
+
try {
|
|
10
|
+
// Handle Windows detection
|
|
11
|
+
if ((0, os_1.platform)() === 'win32') {
|
|
12
|
+
try {
|
|
13
|
+
// Check if running in PowerShell
|
|
14
|
+
(0, child_process_1.execSync)('$PSVersionTable', { stdio: 'pipe' });
|
|
15
|
+
return 'powershell';
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
// Check explicit CMD environment
|
|
19
|
+
if (process.env.COMSPEC?.toLowerCase().includes('cmd.exe')) {
|
|
20
|
+
return 'cmd.exe';
|
|
21
|
+
}
|
|
22
|
+
// Check parent process as final Windows check
|
|
23
|
+
const parentProcess = (0, child_process_1.execSync)('wmic process get ParentProcessId,CommandLine', { stdio: 'pipe' })
|
|
24
|
+
.toString()
|
|
25
|
+
.toLowerCase();
|
|
26
|
+
if (parentProcess.includes('powershell'))
|
|
27
|
+
return 'powershell';
|
|
28
|
+
if (parentProcess.includes('cmd.exe'))
|
|
29
|
+
return 'cmd.exe';
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// Handle Unix-like systems
|
|
33
|
+
if (shell) {
|
|
34
|
+
const shellLower = shell.toLowerCase();
|
|
35
|
+
if (shellLower.includes('bash'))
|
|
36
|
+
return 'bash';
|
|
37
|
+
if (shellLower.includes('zsh'))
|
|
38
|
+
return 'zsh';
|
|
39
|
+
if (shellLower.includes('fish'))
|
|
40
|
+
return 'fish';
|
|
41
|
+
}
|
|
42
|
+
// Try to get the parent process name on Unix systems
|
|
43
|
+
if ((0, os_1.platform)() !== 'win32') {
|
|
44
|
+
const ppid = process.ppid;
|
|
45
|
+
const parentProcess = (0, child_process_1.execSync)(`ps -p ${ppid} -o comm=`, {
|
|
46
|
+
stdio: 'pipe',
|
|
47
|
+
})
|
|
48
|
+
.toString()
|
|
49
|
+
.trim();
|
|
50
|
+
if (parentProcess)
|
|
51
|
+
return parentProcess;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
// Log error if needed
|
|
56
|
+
// console.error('Error detecting shell:', error);
|
|
57
|
+
}
|
|
58
|
+
return 'unknown';
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=detect-shell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect-shell.js","sourceRoot":"","sources":["../../src/utils/detect-shell.ts"],"names":[],"mappings":";;AAGA,kCA6DC;AAhED,2BAA6B;AAC7B,iDAAwC;AAExC,SAAgB,WAAW;IAQzB,qCAAqC;IACrC,MAAM,KAAK,GACT,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAA;IAEtE,IAAI,CAAC;QACH,2BAA2B;QAC3B,IAAI,IAAA,aAAQ,GAAE,KAAK,OAAO,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,iCAAiC;gBACjC,IAAA,wBAAQ,EAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;gBAC9C,OAAO,YAAY,CAAA;YACrB,CAAC;YAAC,MAAM,CAAC;gBACP,iCAAiC;gBACjC,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC3D,OAAO,SAAS,CAAA;gBAClB,CAAC;gBAED,8CAA8C;gBAC9C,MAAM,aAAa,GAAG,IAAA,wBAAQ,EAC5B,8CAA8C,EAC9C,EAAE,KAAK,EAAE,MAAM,EAAE,CAClB;qBACE,QAAQ,EAAE;qBACV,WAAW,EAAE,CAAA;gBAChB,IAAI,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC;oBAAE,OAAO,YAAY,CAAA;gBAC7D,IAAI,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC;oBAAE,OAAO,SAAS,CAAA;YACzD,CAAC;QACH,CAAC;QAED,2BAA2B;QAC3B,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAA;YACtC,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,OAAO,MAAM,CAAA;YAC9C,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAA;YAC5C,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,OAAO,MAAM,CAAA;QAChD,CAAC;QAED,qDAAqD;QACrD,IAAI,IAAA,aAAQ,GAAE,KAAK,OAAO,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;YACzB,MAAM,aAAa,GAAG,IAAA,wBAAQ,EAAC,SAAS,IAAI,WAAW,EAAE;gBACvD,KAAK,EAAE,MAAM;aACd,CAAC;iBACC,QAAQ,EAAE;iBACV,IAAI,EAAE,CAAA;YACT,IAAI,aAAa;gBAAE,OAAO,aAAa,CAAA;QACzC,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,sBAAsB;QACtB,kDAAkD;IACpD,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
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.gitCommandIsAvailable = gitCommandIsAvailable;
|
|
7
|
+
exports.findGitRoot = findGitRoot;
|
|
8
|
+
const child_process_1 = require("child_process");
|
|
9
|
+
const fs_1 = require("fs");
|
|
10
|
+
const path_1 = __importDefault(require("path"));
|
|
11
|
+
/**
|
|
12
|
+
* Checks if the native git command is available on the system.
|
|
13
|
+
* Caches the result to avoid repeated checks.
|
|
14
|
+
* @returns boolean indicating if git command is available
|
|
15
|
+
*/
|
|
16
|
+
let cachedGitAvailable = null;
|
|
17
|
+
function gitCommandIsAvailable() {
|
|
18
|
+
if (cachedGitAvailable === null) {
|
|
19
|
+
try {
|
|
20
|
+
(0, child_process_1.execFileSync)('git', ['--version'], { stdio: 'ignore' });
|
|
21
|
+
cachedGitAvailable = true;
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
cachedGitAvailable = false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return cachedGitAvailable;
|
|
28
|
+
}
|
|
29
|
+
function findGitRoot(startDir) {
|
|
30
|
+
let currentDir = startDir;
|
|
31
|
+
while (currentDir !== path_1.default.parse(currentDir).root) {
|
|
32
|
+
const gitDir = path_1.default.join(currentDir, '.git');
|
|
33
|
+
if ((0, fs_1.existsSync)(gitDir) && (0, fs_1.statSync)(gitDir).isDirectory()) {
|
|
34
|
+
return currentDir;
|
|
35
|
+
}
|
|
36
|
+
currentDir = path_1.default.dirname(currentDir);
|
|
37
|
+
}
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/utils/git.ts"],"names":[],"mappings":";;;;;AAUA,sDAWC;AAED,kCAYC;AAnCD,iDAA4C;AAC5C,2BAAyC;AACzC,gDAAuB;AAEvB;;;;GAIG;AACH,IAAI,kBAAkB,GAAmB,IAAI,CAAA;AAC7C,SAAgB,qBAAqB;IACnC,IAAI,kBAAkB,KAAK,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,IAAA,4BAAY,EAAC,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAA;YACvD,kBAAkB,GAAG,IAAI,CAAA;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,kBAAkB,GAAG,KAAK,CAAA;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,kBAAkB,CAAA;AAC3B,CAAC;AAED,SAAgB,WAAW,CAAC,QAAgB;IAC1C,IAAI,UAAU,GAAG,QAAQ,CAAA;IAEzB,OAAO,UAAU,KAAK,cAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;QAClD,MAAM,MAAM,GAAG,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;QAC5C,IAAI,IAAA,eAAU,EAAC,MAAM,CAAC,IAAI,IAAA,aAAQ,EAAC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YACzD,OAAO,UAAU,CAAA;QACnB,CAAC;QACD,UAAU,GAAG,cAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IACvC,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import pino from 'pino';
|
|
2
|
+
export interface LoggerContext {
|
|
3
|
+
userId?: string;
|
|
4
|
+
userEmail?: string;
|
|
5
|
+
clientSessionId?: string;
|
|
6
|
+
fingerprintId?: string;
|
|
7
|
+
clientRequestId?: string;
|
|
8
|
+
[key: string]: any;
|
|
9
|
+
}
|
|
10
|
+
export declare const loggerContext: LoggerContext;
|
|
11
|
+
declare const loggingLevels: readonly ["info", "debug", "warn", "error", "fatal"];
|
|
12
|
+
type LogLevel = (typeof loggingLevels)[number];
|
|
13
|
+
/**
|
|
14
|
+
* Wrapper around Pino logger.
|
|
15
|
+
*
|
|
16
|
+
* To also send to Posthog, set data.eventId to type AnalyticsEvent
|
|
17
|
+
*
|
|
18
|
+
* e.g. logger.info({eventId: AnalyticsEvent.SOME_EVENT, field: value}, 'some message')
|
|
19
|
+
*/
|
|
20
|
+
export declare const logger: Record<LogLevel, pino.LogFn>;
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.logger = exports.loggerContext = void 0;
|
|
30
|
+
const fs_1 = require("fs");
|
|
31
|
+
const path_1 = __importStar(require("path"));
|
|
32
|
+
const util_1 = require("util");
|
|
33
|
+
const analytics_events_1 = require("../common/constants/analytics-events");
|
|
34
|
+
const pino_1 = __importDefault(require("pino"));
|
|
35
|
+
const project_files_1 = require("../project-files");
|
|
36
|
+
const analytics_1 = require("./analytics");
|
|
37
|
+
exports.loggerContext = {};
|
|
38
|
+
const analyticsBuffer = [];
|
|
39
|
+
let logPath = undefined;
|
|
40
|
+
let pinoLogger = undefined;
|
|
41
|
+
const loggingLevels = ['info', 'debug', 'warn', 'error', 'fatal'];
|
|
42
|
+
function setLogPath(p) {
|
|
43
|
+
if (logPath === p) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
logPath = p;
|
|
47
|
+
(0, fs_1.mkdirSync)((0, path_1.dirname)(p), { recursive: true });
|
|
48
|
+
pinoLogger = (0, pino_1.default)({
|
|
49
|
+
level: 'debug',
|
|
50
|
+
formatters: {
|
|
51
|
+
level: (label) => {
|
|
52
|
+
return { level: label.toUpperCase() };
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
timestamp: () => `,"timestamp":"${new Date(Date.now()).toISOString()}"`,
|
|
56
|
+
}, pino_1.default.transport({
|
|
57
|
+
target: 'pino/file',
|
|
58
|
+
options: { destination: p },
|
|
59
|
+
level: 'debug',
|
|
60
|
+
}));
|
|
61
|
+
}
|
|
62
|
+
function sendAnalyticsAndLog(level, data, msg, ...args) {
|
|
63
|
+
if (process.env.CODEBUFF_GITHUB_ACTIONS !== 'true') {
|
|
64
|
+
setLogPath(process.env.NEXT_PUBLIC_CB_ENVIRONMENT === 'local'
|
|
65
|
+
? path_1.default.join(__dirname, '../../../debug', 'npm-app.log')
|
|
66
|
+
: path_1.default.join((0, project_files_1.getCurrentChatDir)(), 'log.jsonl'));
|
|
67
|
+
}
|
|
68
|
+
logOrStore: if (process.env.NEXT_PUBLIC_CB_ENVIRONMENT !== 'local' &&
|
|
69
|
+
Object.values(analytics_events_1.AnalyticsEvent).includes(data.eventId)) {
|
|
70
|
+
const analyticsEventId = data.eventId;
|
|
71
|
+
const toTrack = {
|
|
72
|
+
data,
|
|
73
|
+
level,
|
|
74
|
+
loggerContext: exports.loggerContext,
|
|
75
|
+
msg: (0, util_1.format)(msg, ...args),
|
|
76
|
+
};
|
|
77
|
+
// Not accurate for anonymous users
|
|
78
|
+
if (!exports.loggerContext.userId) {
|
|
79
|
+
analyticsBuffer.push({ analyticsEventId, toTrack });
|
|
80
|
+
break logOrStore;
|
|
81
|
+
}
|
|
82
|
+
for (const item of analyticsBuffer) {
|
|
83
|
+
(0, analytics_1.trackEvent)(item.analyticsEventId, item.toTrack);
|
|
84
|
+
}
|
|
85
|
+
analyticsBuffer.length = 0;
|
|
86
|
+
(0, analytics_1.trackEvent)(analyticsEventId, toTrack);
|
|
87
|
+
}
|
|
88
|
+
if (pinoLogger !== undefined) {
|
|
89
|
+
pinoLogger[level]({ ...exports.loggerContext, data }, msg, ...args);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Wrapper around Pino logger.
|
|
94
|
+
*
|
|
95
|
+
* To also send to Posthog, set data.eventId to type AnalyticsEvent
|
|
96
|
+
*
|
|
97
|
+
* e.g. logger.info({eventId: AnalyticsEvent.SOME_EVENT, field: value}, 'some message')
|
|
98
|
+
*/
|
|
99
|
+
exports.logger = Object.fromEntries(loggingLevels.map((level) => {
|
|
100
|
+
return [
|
|
101
|
+
level,
|
|
102
|
+
(data, msg, ...args) => sendAnalyticsAndLog(level, data, msg, ...args),
|
|
103
|
+
];
|
|
104
|
+
}));
|
|
105
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
|