codebuff 1.0.275 → 1.0.277

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.
Files changed (124) hide show
  1. package/dist/code-map/tsconfig.tsbuildinfo +1 -1
  2. package/dist/common/__tests__/project-file-tree.test.d.ts +1 -0
  3. package/dist/common/__tests__/project-file-tree.test.js +251 -0
  4. package/dist/common/__tests__/project-file-tree.test.js.map +1 -0
  5. package/dist/common/actions.d.ts +28 -28
  6. package/dist/common/constants.d.ts +5 -5
  7. package/dist/common/constants.js +7 -7
  8. package/dist/common/constants.js.map +1 -1
  9. package/dist/common/json-config/__tests__/__snapshots__/stringify-schema.test.js.snap +119 -0
  10. package/dist/common/util/file.js +3 -6
  11. package/dist/common/util/file.js.map +1 -1
  12. package/dist/common/util/process-stream.d.ts +7 -0
  13. package/dist/common/util/process-stream.js +162 -0
  14. package/dist/common/util/process-stream.js.map +1 -0
  15. package/dist/common/util/saxy.js +2 -2
  16. package/dist/common/util/saxy.js.map +1 -1
  17. package/dist/common/websockets/websocket-schema.d.ts +48 -48
  18. package/dist/index.js +20 -2
  19. package/dist/utils/__tests__/__snapshots__/background-process-manager.test.js.snap +137 -0
  20. package/dist/utils/__tests__/file-paths.test.d.ts +1 -0
  21. package/dist/utils/__tests__/file-paths.test.js +37 -0
  22. package/dist/utils/__tests__/file-paths.test.js.map +1 -0
  23. package/dist/utils/__tests__/path.test.d.ts +1 -0
  24. package/dist/utils/__tests__/path.test.js +37 -0
  25. package/dist/utils/__tests__/path.test.js.map +1 -0
  26. package/dist/utils/__tests__/tool-renderers.test.js +12 -4
  27. package/dist/utils/__tests__/tool-renderers.test.js.map +1 -1
  28. package/dist/utils/file-paths.d.ts +9 -0
  29. package/dist/utils/file-paths.js +24 -0
  30. package/dist/utils/file-paths.js.map +1 -0
  31. package/dist/utils/path.d.ts +9 -0
  32. package/dist/utils/path.js +27 -0
  33. package/dist/utils/path.js.map +1 -0
  34. package/package.json +1 -1
  35. package/dist/cli-handlers/initialization-flow.d.ts +0 -1
  36. package/dist/cli-handlers/initialization-flow.js +0 -24
  37. package/dist/cli-handlers/initialization-flow.js.map +0 -1
  38. package/dist/cli-modules/command-processor.d.ts +0 -12
  39. package/dist/cli-modules/command-processor.js +0 -129
  40. package/dist/cli-modules/command-processor.js.map +0 -1
  41. package/dist/cli-modules/input-handler.d.ts +0 -20
  42. package/dist/cli-modules/input-handler.js +0 -98
  43. package/dist/cli-modules/input-handler.js.map +0 -1
  44. package/dist/cli-modules/readline-handler.d.ts +0 -17
  45. package/dist/cli-modules/readline-handler.js +0 -134
  46. package/dist/cli-modules/readline-handler.js.map +0 -1
  47. package/dist/cli-modules/signal-handler.d.ts +0 -13
  48. package/dist/cli-modules/signal-handler.js +0 -69
  49. package/dist/cli-modules/signal-handler.js.map +0 -1
  50. package/dist/cli-modules/types.d.ts +0 -51
  51. package/dist/cli-modules/types.js +0 -3
  52. package/dist/cli-modules/types.js.map +0 -1
  53. package/dist/cli-modules/websocket-handler.d.ts +0 -16
  54. package/dist/cli-modules/websocket-handler.js +0 -53
  55. package/dist/cli-modules/websocket-handler.js.map +0 -1
  56. package/dist/code-map/__mocks__/tree-sitter-typescript.d.ts +0 -12
  57. package/dist/code-map/__mocks__/tree-sitter-typescript.d.ts.map +0 -1
  58. package/dist/code-map/__mocks__/tree-sitter-typescript.js +0 -14
  59. package/dist/code-map/__mocks__/tree-sitter-typescript.js.map +0 -1
  60. package/dist/code-map/__mocks__/wasm-mock.d.ts +0 -2
  61. package/dist/code-map/__mocks__/wasm-mock.d.ts.map +0 -1
  62. package/dist/code-map/__mocks__/wasm-mock.js +0 -3
  63. package/dist/code-map/__mocks__/wasm-mock.js.map +0 -1
  64. package/dist/code-map/__tests__/parse.test.d.ts +0 -2
  65. package/dist/code-map/__tests__/parse.test.d.ts.map +0 -1
  66. package/dist/code-map/__tests__/parse.test.js +0 -231
  67. package/dist/code-map/__tests__/parse.test.js.map +0 -1
  68. package/dist/code-map/__tests__/test-langs/consumer.d.ts +0 -2
  69. package/dist/code-map/__tests__/test-langs/consumer.d.ts.map +0 -1
  70. package/dist/code-map/__tests__/test-langs/consumer.js +0 -6
  71. package/dist/code-map/__tests__/test-langs/consumer.js.map +0 -1
  72. package/dist/code-map/__tests__/test-langs/empty.d.ts +0 -1
  73. package/dist/code-map/__tests__/test-langs/empty.d.ts.map +0 -1
  74. package/dist/code-map/__tests__/test-langs/empty.js +0 -2
  75. package/dist/code-map/__tests__/test-langs/empty.js.map +0 -1
  76. package/dist/code-map/__tests__/test-langs/test.d.ts +0 -12
  77. package/dist/code-map/__tests__/test-langs/test.d.ts.map +0 -1
  78. package/dist/code-map/__tests__/test-langs/test.js +0 -23
  79. package/dist/code-map/__tests__/test-langs/test.js.map +0 -1
  80. package/dist/code-map/__tests__/test-langs/unused.d.ts +0 -2
  81. package/dist/code-map/__tests__/test-langs/unused.d.ts.map +0 -1
  82. package/dist/code-map/__tests__/test-langs/unused.js +0 -7
  83. package/dist/code-map/__tests__/test-langs/unused.js.map +0 -1
  84. package/dist/code-map/__tests__/test-langs/utils1.d.ts +0 -2
  85. package/dist/code-map/__tests__/test-langs/utils1.d.ts.map +0 -1
  86. package/dist/code-map/__tests__/test-langs/utils1.js +0 -7
  87. package/dist/code-map/__tests__/test-langs/utils1.js.map +0 -1
  88. package/dist/code-map/__tests__/test-langs/utils2.d.ts +0 -2
  89. package/dist/code-map/__tests__/test-langs/utils2.d.ts.map +0 -1
  90. package/dist/code-map/__tests__/test-langs/utils2.js +0 -8
  91. package/dist/code-map/__tests__/test-langs/utils2.js.map +0 -1
  92. package/dist/code-map/__tests__/tree-sitter-minimal.test.d.ts +0 -2
  93. package/dist/code-map/__tests__/tree-sitter-minimal.test.d.ts.map +0 -1
  94. package/dist/code-map/__tests__/tree-sitter-minimal.test.js +0 -79
  95. package/dist/code-map/__tests__/tree-sitter-minimal.test.js.map +0 -1
  96. package/dist/code-map/jest.config.d.ts +0 -4
  97. package/dist/code-map/jest.config.d.ts.map +0 -1
  98. package/dist/code-map/jest.config.js +0 -18
  99. package/dist/code-map/jest.config.js.map +0 -1
  100. package/dist/code-map/parse.test.d.ts +0 -2
  101. package/dist/code-map/parse.test.d.ts.map +0 -1
  102. package/dist/code-map/parse.test.js +0 -218
  103. package/dist/code-map/parse.test.js.map +0 -1
  104. package/dist/code-map/scripts/tree-sitter-test.cjs +0 -27
  105. package/dist/code-map/scripts/tree-sitter-test.cjs.map +0 -1
  106. package/dist/code-map/scripts/tree-sitter-test.d.cts +0 -2
  107. package/dist/code-map/scripts/tree-sitter-test.d.cts.map +0 -1
  108. package/dist/code-map/scripts/tree-sitter-test.d.ts +0 -2
  109. package/dist/code-map/scripts/tree-sitter-test.d.ts.map +0 -1
  110. package/dist/code-map/scripts/tree-sitter-test.js +0 -54
  111. package/dist/code-map/scripts/tree-sitter-test.js.map +0 -1
  112. package/dist/code-map/test-parser.d.ts +0 -2
  113. package/dist/code-map/test-parser.d.ts.map +0 -1
  114. package/dist/code-map/test-parser.js +0 -42
  115. package/dist/code-map/test-parser.js.map +0 -1
  116. package/dist/common/bigquery/client.d.ts +0 -15
  117. package/dist/common/bigquery/client.js +0 -265
  118. package/dist/common/bigquery/client.js.map +0 -1
  119. package/dist/common/bigquery/schema.d.ts +0 -55
  120. package/dist/common/bigquery/schema.js +0 -24
  121. package/dist/common/bigquery/schema.js.map +0 -1
  122. package/dist/common/util/file-metadata.d.ts +0 -9
  123. package/dist/common/util/file-metadata.js +0 -24
  124. package/dist/common/util/file-metadata.js.map +0 -1
@@ -1,134 +0,0 @@
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
- Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.ReadlineHandler = void 0;
27
- const readline = __importStar(require("readline"));
28
- const fs = __importStar(require("fs"));
29
- const os = __importStar(require("os"));
30
- const path_1 = __importStar(require("path"));
31
- const os_1 = require("os");
32
- const picocolors_1 = require("picocolors");
33
- const lodash_1 = require("lodash");
34
- const project_files_1 = require("../project-files");
35
- class ReadlineHandler {
36
- rl;
37
- client;
38
- historyPath;
39
- freshPromptCallback;
40
- constructor(options) {
41
- this.client = options.client;
42
- this.historyPath = options.historyPath;
43
- this.freshPromptCallback = options.freshPrompt;
44
- this.rl = this.initInterface();
45
- this.loadHistory();
46
- }
47
- initInterface() {
48
- const rl = readline.createInterface({
49
- input: process.stdin,
50
- output: process.stdout,
51
- historySize: 1000,
52
- terminal: true,
53
- completer: this.filePathCompleter.bind(this),
54
- });
55
- return rl;
56
- }
57
- loadHistory() {
58
- try {
59
- if (fs.existsSync(this.historyPath)) {
60
- const content = fs.readFileSync(this.historyPath, 'utf8');
61
- const history = JSON.parse(content);
62
- // Filter out empty lines and duplicates
63
- const cleanHistory = (0, lodash_1.uniq)(history.filter((line) => line.trim())).reverse();
64
- this.rl.history.push(...cleanHistory);
65
- }
66
- }
67
- catch (error) {
68
- console.error('Error loading prompt history:', error);
69
- // If file doesn't exist or is invalid JSON, create empty history file
70
- fs.writeFileSync(this.historyPath, '[]');
71
- }
72
- }
73
- appendToHistory(line) {
74
- try {
75
- let history = [];
76
- if (fs.existsSync(this.historyPath)) {
77
- const content = fs.readFileSync(this.historyPath, 'utf8');
78
- history = JSON.parse(content);
79
- }
80
- // Only add non-empty, non-duplicate lines
81
- if (line.trim() && !history.includes(line)) {
82
- history.push(line);
83
- fs.writeFileSync(this.historyPath, JSON.stringify(history, null, 2));
84
- }
85
- }
86
- catch (error) {
87
- console.error('Error appending to prompt history:', error);
88
- }
89
- }
90
- filePathCompleter(line) {
91
- const lastWord = line.split(' ').pop() || '';
92
- const input = lastWord.startsWith('~')
93
- ? (0, os_1.homedir)() + lastWord.slice(1)
94
- : lastWord;
95
- const directorySuffix = process.platform === 'win32' ? '\\' : '/';
96
- const dir = input.endsWith(directorySuffix)
97
- ? input.slice(0, input.length - 1)
98
- : (0, path_1.dirname)(input);
99
- const partial = input.endsWith(directorySuffix) ? '' : path_1.default.basename(input);
100
- let baseDir = path_1.default.isAbsolute(dir) ? dir : path_1.default.join((0, project_files_1.getWorkingDirectory)(), dir);
101
- try {
102
- const files = fs.readdirSync(baseDir);
103
- const matches = files
104
- .filter((file) => file.startsWith(partial))
105
- .map((file) => file + ((0, project_files_1.isDir)(path_1.default.join(baseDir, file)) ? directorySuffix : ''));
106
- return [matches, partial];
107
- }
108
- catch {
109
- return [[], line];
110
- }
111
- }
112
- setPrompt() {
113
- const projectRoot = (0, project_files_1.getProjectRoot)();
114
- const cwd = (0, project_files_1.getWorkingDirectory)();
115
- const projectDirName = (0, path_1.parse)(projectRoot).base;
116
- const ps1Dir = projectDirName +
117
- (cwd === projectRoot
118
- ? ''
119
- : (os.platform() === 'win32' ? '\\' : '/') +
120
- path_1.default.relative(projectRoot, cwd));
121
- this.rl.setPrompt((0, picocolors_1.green)(`${ps1Dir} > `));
122
- }
123
- freshPrompt(userInput = '') {
124
- this.freshPromptCallback(userInput);
125
- }
126
- getReadlineInterface() {
127
- return this.rl;
128
- }
129
- async cleanup() {
130
- this.rl.close();
131
- }
132
- }
133
- exports.ReadlineHandler = ReadlineHandler;
134
- //# sourceMappingURL=readline-handler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"readline-handler.js","sourceRoot":"","sources":["../../src/cli-modules/readline-handler.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- import { SignalHandlerOptions, Handler } from './types';
2
- export declare class SignalHandler implements Handler {
3
- private client;
4
- private rl;
5
- private freshPrompt;
6
- private onExit;
7
- private lastSigintTime;
8
- constructor(options: SignalHandlerOptions);
9
- private setupHandlers;
10
- handleSigint(): Promise<void>;
11
- handleExit(): Promise<void>;
12
- cleanup(): Promise<void>;
13
- }
@@ -1,69 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SignalHandler = void 0;
4
- const picocolors_1 = require("picocolors");
5
- const analytics_1 = require("../utils/analytics");
6
- const spinner_1 = require("../utils/spinner");
7
- const terminal_1 = require("../utils/terminal");
8
- const background_process_manager_1 = require("../background-process-manager");
9
- class SignalHandler {
10
- client;
11
- rl;
12
- freshPrompt;
13
- onExit;
14
- lastSigintTime = 0;
15
- constructor(options) {
16
- this.client = options.client;
17
- this.rl = options.rl;
18
- this.freshPrompt = options.freshPrompt;
19
- this.onExit = options.onExit;
20
- this.setupHandlers();
21
- }
22
- setupHandlers() {
23
- process.on('exit', () => {
24
- spinner_1.Spinner.get().restoreCursor();
25
- // Kill the persistent PTY process first
26
- (0, terminal_1.killAndResetPersistentProcess)();
27
- (0, background_process_manager_1.sendKillSignalToAllBackgroundProcesses)();
28
- console.log((0, picocolors_1.green)('Codebuff out!'));
29
- });
30
- for (const signal of ['SIGTERM', 'SIGHUP']) {
31
- process.on(signal, async () => {
32
- process.removeAllListeners('unhandledRejection');
33
- process.removeAllListeners('uncaughtException');
34
- spinner_1.Spinner.get().restoreCursor();
35
- await (0, background_process_manager_1.killAllBackgroundProcesses)();
36
- await (0, analytics_1.flushAnalytics)();
37
- process.exit(0);
38
- });
39
- }
40
- process.on('SIGTSTP', async () => await this.handleExit());
41
- }
42
- async handleSigint() {
43
- if ('line' in this.rl) {
44
- ;
45
- this.rl.line = '';
46
- }
47
- const now = Date.now();
48
- if (now - this.lastSigintTime < 5000) {
49
- await this.handleExit();
50
- }
51
- else {
52
- this.lastSigintTime = now;
53
- console.log('\nPress Ctrl-C again to exit');
54
- this.freshPrompt();
55
- }
56
- }
57
- async handleExit() {
58
- await this.onExit();
59
- }
60
- async cleanup() {
61
- // Remove all signal handlers
62
- process.removeAllListeners('exit');
63
- process.removeAllListeners('SIGTERM');
64
- process.removeAllListeners('SIGHUP');
65
- process.removeAllListeners('SIGTSTP');
66
- }
67
- }
68
- exports.SignalHandler = SignalHandler;
69
- //# sourceMappingURL=signal-handler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"signal-handler.js","sourceRoot":"","sources":["../../src/cli-modules/signal-handler.ts"],"names":[],"mappings":";;;AAAA,2CAAkC;AAClC,kDAAmD;AACnD,8CAA0C;AAC1C,gDAAiE;AACjE,8EAAkH;AAGlH,MAAa,aAAa;IAChB,MAAM,CAAgC;IACtC,EAAE,CAA4B;IAC9B,WAAW,CAAqC;IAChD,MAAM,CAAgC;IACtC,cAAc,GAAW,CAAC,CAAA;IAElC,YAAY,OAA6B;QACvC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;QAC5B,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAA;QACpB,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAA;QACtC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;QAC5B,IAAI,CAAC,aAAa,EAAE,CAAA;IACtB,CAAC;IAEO,aAAa;QACnB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YACtB,iBAAO,CAAC,GAAG,EAAE,CAAC,aAAa,EAAE,CAAA;YAC7B,wCAAwC;YACxC,IAAA,wCAA6B,GAAE,CAAA;YAC/B,IAAA,mEAAsC,GAAE,CAAA;YACxC,OAAO,CAAC,GAAG,CAAC,IAAA,kBAAK,EAAC,eAAe,CAAC,CAAC,CAAA;QACrC,CAAC,CAAC,CAAA;QAEF,KAAK,MAAM,MAAM,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC;YAC3C,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;gBAC5B,OAAO,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,CAAA;gBAChD,OAAO,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAA;gBAC/C,iBAAO,CAAC,GAAG,EAAE,CAAC,aAAa,EAAE,CAAA;gBAC7B,MAAM,IAAA,uDAA0B,GAAE,CAAA;gBAClC,MAAM,IAAA,0BAAc,GAAE,CAAA;gBACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACjB,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,CAAA;IAC5D,CAAC;IAEM,KAAK,CAAC,YAAY;QACvB,IAAI,MAAM,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACtB,CAAC;YAAC,IAAI,CAAC,EAAU,CAAC,IAAI,GAAG,EAAE,CAAA;QAC7B,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,IAAI,GAAG,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,EAAE,CAAC;YACrC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA;QACzB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,cAAc,GAAG,GAAG,CAAA;YACzB,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAA;YAC3C,IAAI,CAAC,WAAW,EAAE,CAAA;QACpB,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,UAAU;QACrB,MAAM,IAAI,CAAC,MAAM,EAAE,CAAA;IACrB,CAAC;IAEM,KAAK,CAAC,OAAO;QAClB,6BAA6B;QAC7B,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;QAClC,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAA;QACrC,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAA;QACpC,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAA;IACvC,CAAC;CACF;AAhED,sCAgEC"}
@@ -1,51 +0,0 @@
1
- import { Interface as ReadlineInterface } from 'readline';
2
- import { Client } from '../client';
3
- import { CostMode } from '../common/constants';
4
- import { GitCommand } from '../types';
5
- /**
6
- * Base options interface that contains properties shared across multiple handlers
7
- */
8
- export interface BaseHandlerOptions {
9
- client: Client;
10
- rl: ReadlineInterface;
11
- freshPrompt: (userInput?: string) => void;
12
- }
13
- /**
14
- * Options for ReadlineHandler initialization
15
- */
16
- export interface ReadlineHandlerOptions extends BaseHandlerOptions {
17
- historyPath: string;
18
- }
19
- /**
20
- * Options for InputHandler initialization
21
- */
22
- export interface InputHandlerOptions extends BaseHandlerOptions {
23
- isReceivingResponse: boolean;
24
- }
25
- /**
26
- * Options for CommandProcessor initialization
27
- */
28
- export interface CommandProcessorOptions extends BaseHandlerOptions {
29
- readyPromise: Promise<any>;
30
- costMode: CostMode;
31
- git: GitCommand;
32
- }
33
- /**
34
- * Options for SignalHandler initialization
35
- */
36
- export interface SignalHandlerOptions extends BaseHandlerOptions {
37
- onExit: () => Promise<void>;
38
- }
39
- /**
40
- * Options for WebSocketHandler initialization
41
- */
42
- export interface WebSocketHandlerOptions extends BaseHandlerOptions {
43
- isReceivingResponse: boolean;
44
- shouldReconnectWhenIdle: boolean;
45
- }
46
- /**
47
- * Common interface for all handlers
48
- */
49
- export interface Handler {
50
- cleanup?: () => Promise<void>;
51
- }
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/cli-modules/types.ts"],"names":[],"mappings":""}
@@ -1,16 +0,0 @@
1
- import { WebSocketHandlerOptions, Handler } from './types';
2
- export declare class WebSocketHandler implements Handler {
3
- private client;
4
- private freshPrompt;
5
- private isReceivingResponse;
6
- private shouldReconnectWhenIdle;
7
- private stopResponse;
8
- constructor(options: WebSocketHandlerOptions);
9
- onError(): void;
10
- onReconnect(): void;
11
- reconnectWhenNextIdle(): void;
12
- setStopResponse(stopResponse: (() => void) | null): void;
13
- setIsReceivingResponse(value: boolean): void;
14
- setShouldReconnectWhenIdle(value: boolean): void;
15
- cleanup(): Promise<void>;
16
- }
@@ -1,53 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WebSocketHandler = void 0;
4
- const picocolors_1 = require("picocolors");
5
- const spinner_1 = require("../utils/spinner");
6
- class WebSocketHandler {
7
- client;
8
- freshPrompt;
9
- isReceivingResponse;
10
- shouldReconnectWhenIdle;
11
- stopResponse = null;
12
- constructor(options) {
13
- this.client = options.client;
14
- this.freshPrompt = options.freshPrompt;
15
- this.isReceivingResponse = options.isReceivingResponse;
16
- this.shouldReconnectWhenIdle = options.shouldReconnectWhenIdle;
17
- }
18
- onError() {
19
- spinner_1.Spinner.get().stop();
20
- this.isReceivingResponse = false;
21
- if (this.stopResponse) {
22
- this.stopResponse();
23
- this.stopResponse = null;
24
- }
25
- console.error('\n' + (0, picocolors_1.yellow)('Could not connect. Retrying...'));
26
- }
27
- onReconnect() {
28
- console.log('\n' + (0, picocolors_1.green)('Reconnected!'));
29
- this.freshPrompt();
30
- }
31
- reconnectWhenNextIdle() {
32
- if (!this.isReceivingResponse) {
33
- this.client.reconnect();
34
- }
35
- else {
36
- this.shouldReconnectWhenIdle = true;
37
- }
38
- }
39
- setStopResponse(stopResponse) {
40
- this.stopResponse = stopResponse;
41
- }
42
- setIsReceivingResponse(value) {
43
- this.isReceivingResponse = value;
44
- }
45
- setShouldReconnectWhenIdle(value) {
46
- this.shouldReconnectWhenIdle = value;
47
- }
48
- async cleanup() {
49
- // Nothing to clean up for now
50
- }
51
- }
52
- exports.WebSocketHandler = WebSocketHandler;
53
- //# sourceMappingURL=websocket-handler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"websocket-handler.js","sourceRoot":"","sources":["../../src/cli-modules/websocket-handler.ts"],"names":[],"mappings":";;;AAAA,2CAA0C;AAC1C,8CAA0C;AAG1C,MAAa,gBAAgB;IACnB,MAAM,CAAmC;IACzC,WAAW,CAAwC;IACnD,mBAAmB,CAAS;IAC5B,uBAAuB,CAAS;IAChC,YAAY,GAAwB,IAAI,CAAA;IAEhD,YAAY,OAAgC;QAC1C,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;QAC5B,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAA;QACtC,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAA;QACtD,IAAI,CAAC,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAA;IAChE,CAAC;IAEM,OAAO;QACZ,iBAAO,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAA;QACpB,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAA;QAChC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,YAAY,EAAE,CAAA;YACnB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;QAC1B,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,IAAA,mBAAM,EAAC,gCAAgC,CAAC,CAAC,CAAA;IAChE,CAAC;IAEM,WAAW;QAChB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,IAAA,kBAAK,EAAC,cAAc,CAAC,CAAC,CAAA;QACzC,IAAI,CAAC,WAAW,EAAE,CAAA;IACpB,CAAC;IAEM,qBAAqB;QAC1B,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAA;QACzB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAA;QACrC,CAAC;IACH,CAAC;IAEM,eAAe,CAAC,YAAiC;QACtD,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;IAClC,CAAC;IAEM,sBAAsB,CAAC,KAAc;QAC1C,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAA;IAClC,CAAC;IAEM,0BAA0B,CAAC,KAAc;QAC9C,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAA;IACtC,CAAC;IAEM,KAAK,CAAC,OAAO;QAClB,8BAA8B;IAChC,CAAC;CACF;AApDD,4CAoDC"}
@@ -1,12 +0,0 @@
1
- export namespace typescript {
2
- let name: string;
3
- namespace language {
4
- function parse(): {
5
- rootNode: {
6
- toString: () => string;
7
- text: string;
8
- };
9
- };
10
- }
11
- }
12
- //# sourceMappingURL=tree-sitter-typescript.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tree-sitter-typescript.d.ts","sourceRoot":"","sources":["../../__mocks__/tree-sitter-typescript.js"],"names":[],"mappings":";;;QAGW;;;;;UAKL"}
@@ -1,14 +0,0 @@
1
- "use strict";
2
- const typescript = {
3
- name: 'typescript',
4
- language: {
5
- parse: () => ({
6
- rootNode: {
7
- toString: () => '(program (interface_declaration name: (type_identifier) body: (interface_body)))',
8
- text: 'Greeter'
9
- }
10
- })
11
- }
12
- };
13
- module.exports = { typescript };
14
- //# sourceMappingURL=tree-sitter-typescript.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tree-sitter-typescript.js","sourceRoot":"","sources":["../../__mocks__/tree-sitter-typescript.js"],"names":[],"mappings":";AAAA,MAAM,UAAU,GAAG;IACjB,IAAI,EAAE,YAAY;IAClB,QAAQ,EAAE;QACR,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YACZ,QAAQ,EAAE;gBACR,QAAQ,EAAE,GAAG,EAAE,CAAC,kFAAkF;gBAClG,IAAI,EAAE,SAAS;aAChB;SACF,CAAC;KACH;CACF,CAAC;AAEF,MAAM,CAAC,OAAO,GAAG,EAAE,UAAU,EAAE,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=wasm-mock.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wasm-mock.d.ts","sourceRoot":"","sources":["../../__mocks__/wasm-mock.js"],"names":[],"mappings":""}
@@ -1,3 +0,0 @@
1
- "use strict";
2
- module.exports = {};
3
- //# sourceMappingURL=wasm-mock.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wasm-mock.js","sourceRoot":"","sources":["../../__mocks__/wasm-mock.js"],"names":[],"mappings":";AAAA,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=parse.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parse.test.d.ts","sourceRoot":"","sources":["../../__tests__/parse.test.ts"],"names":[],"mappings":""}
@@ -1,231 +0,0 @@
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
- Object.defineProperty(exports, "__esModule", { value: true });
26
- const path = __importStar(require("path"));
27
- const fs = __importStar(require("fs"));
28
- const parse_1 = require("../parse");
29
- const globals_1 = require("@jest/globals");
30
- // Test data
31
- const tsFile = `
32
- interface Greeter {
33
- greet(name: string): string;
34
- }
35
-
36
- class Greeting implements Greeter {
37
- private prefix: string;
38
-
39
- constructor(prefix: string) {
40
- this.prefix = prefix;
41
- }
42
-
43
- greet(name: string): string {
44
- return \`\${this.prefix}, \${name}!\`;
45
- }
46
-
47
- static printGreeting(greeter: Greeter, name: string): void {
48
- console.log(greeter.greet(name));
49
- }
50
- }
51
-
52
- function createGreeter(prefix: string): Greeter {
53
- return new Greeting(prefix);
54
- }
55
-
56
- const greeting = createGreeter('Hello');
57
- Greeting.printGreeting(greeting, 'World');
58
- `;
59
- const pyFile = `
60
- from abc import ABC, abstractmethod
61
-
62
- class Greeter(ABC):
63
- @abstractmethod
64
- def greet(self, name: str) -> str:
65
- pass
66
-
67
- class Greeting(Greeter):
68
- def __init__(self, prefix: str):
69
- self.prefix = prefix
70
-
71
- def greet(self, name: str) -> str:
72
- return f'{self.prefix}, {name}!'
73
-
74
- def print_greeting(greeter: Greeter, name: str):
75
- print(greeter.greet(name))
76
-
77
- if __name__ == "__main__":
78
- greeting = Greeting("Hello")
79
- print_greeting(greeting, "World")
80
- `;
81
- const multiDefFile1 = `
82
- export function utils() {
83
- console.log('utils from file 1');
84
- }
85
- `;
86
- const multiDefFile2 = `
87
- // This file is deeper in the directory structure, so it will have a lower base score
88
- export function utils() {
89
- console.log('utils from file 2');
90
- }
91
- `;
92
- const noDefsOnlyCallsFile = `
93
- import { utils } from './utils';
94
- utils();
95
- console.log('no definitions here');
96
- `;
97
- const noCallsOnlyDefsFile = `
98
- export function unusedFunction() {
99
- console.log('never called');
100
- }
101
- `;
102
- const emptyFile = '';
103
- // Pre-read query files
104
- let tsQueryFile;
105
- let pyQueryFile;
106
- (0, globals_1.beforeAll)(async () => {
107
- // Read the actual query files
108
- tsQueryFile = await fs.promises.readFile(path.join(__dirname, '../tree-sitter-queries/tree-sitter-typescript-tags.scm'), 'utf8');
109
- pyQueryFile = await fs.promises.readFile(path.join(__dirname, '../tree-sitter-queries/tree-sitter-python-tags.scm'), 'utf8');
110
- });
111
- (0, globals_1.describe)('getFileTokenScores', () => {
112
- (0, globals_1.it)('should correctly identify tokens and calls in TypeScript', async () => {
113
- // Write test file to disk temporarily
114
- const testFilePath = path.join(__dirname, 'test.ts');
115
- await fs.promises.writeFile(testFilePath, tsFile);
116
- try {
117
- const result = await (0, parse_1.getFileTokenScores)('/root', ['test.ts']);
118
- // Check token identification
119
- (0, globals_1.expect)(result.tokenScores['test.ts']).toHaveProperty('Greeter');
120
- (0, globals_1.expect)(result.tokenScores['test.ts']).toHaveProperty('Greeting');
121
- (0, globals_1.expect)(result.tokenScores['test.ts']).toHaveProperty('createGreeter');
122
- (0, globals_1.expect)(result.tokenScores['test.ts']).toHaveProperty('greet');
123
- (0, globals_1.expect)(result.tokenScores['test.ts']).toHaveProperty('printGreeting');
124
- // Check calls
125
- (0, globals_1.expect)(result.tokenCallers['test.ts']['Greeting']).toContain('test.ts');
126
- (0, globals_1.expect)(result.tokenCallers['test.ts']['createGreeter']).toContain('test.ts');
127
- (0, globals_1.expect)(result.tokenCallers['test.ts']['printGreeting']).toContain('test.ts');
128
- (0, globals_1.expect)(result.tokenCallers['test.ts']['greet']).toContain('test.ts');
129
- }
130
- finally {
131
- // Clean up test file
132
- await fs.promises.unlink(testFilePath);
133
- }
134
- });
135
- globals_1.it.skip('should correctly identify tokens and calls in Python', async () => {
136
- // Write test file to disk temporarily
137
- const testFilePath = path.join(__dirname, 'test.py');
138
- await fs.promises.writeFile(testFilePath, pyFile);
139
- try {
140
- const result = await (0, parse_1.getFileTokenScores)('/root', ['test.py']);
141
- // Check token identification
142
- (0, globals_1.expect)(result.tokenScores['test.py']).toHaveProperty('Greeter');
143
- (0, globals_1.expect)(result.tokenScores['test.py']).toHaveProperty('Greeting');
144
- (0, globals_1.expect)(result.tokenScores['test.py']).toHaveProperty('print_greeting');
145
- (0, globals_1.expect)(result.tokenScores['test.py']).toHaveProperty('greet');
146
- // Check calls
147
- (0, globals_1.expect)(result.tokenCallers['test.py']['Greeting']).toContain('test.py');
148
- (0, globals_1.expect)(result.tokenCallers['test.py']['print_greeting']).toContain('test.py');
149
- (0, globals_1.expect)(result.tokenCallers['test.py']['greet']).toContain('test.py');
150
- }
151
- finally {
152
- // Clean up test file
153
- await fs.promises.unlink(testFilePath);
154
- }
155
- });
156
- (0, globals_1.it)('should use highest scoring definition when token is defined in multiple files', async () => {
157
- // Write test files to disk temporarily
158
- const utils1Path = path.join(__dirname, 'utils1.ts');
159
- const utils2Path = path.join(__dirname, 'deep/utils2.ts');
160
- const consumerPath = path.join(__dirname, 'consumer.ts');
161
- await fs.promises.mkdir(path.join(__dirname, 'deep'), { recursive: true });
162
- await fs.promises.writeFile(utils1Path, multiDefFile1);
163
- await fs.promises.writeFile(utils2Path, multiDefFile2);
164
- await fs.promises.writeFile(consumerPath, noDefsOnlyCallsFile);
165
- try {
166
- const result = await (0, parse_1.getFileTokenScores)('/root', [
167
- 'utils1.ts',
168
- 'deep/utils2.ts',
169
- 'consumer.ts',
170
- ]);
171
- // utils1.ts has a higher score (shallower path)
172
- (0, globals_1.expect)(result.tokenCallers['utils1.ts']['utils']).toContain('consumer.ts');
173
- // utils2.ts should not be chosen as the defining file
174
- (0, globals_1.expect)(result.tokenCallers['deep/utils2.ts']['utils']).toBeUndefined();
175
- }
176
- finally {
177
- // Clean up test files
178
- await fs.promises.unlink(utils1Path);
179
- await fs.promises.unlink(utils2Path);
180
- await fs.promises.unlink(consumerPath);
181
- await fs.promises.rmdir(path.join(__dirname, 'deep'));
182
- }
183
- });
184
- (0, globals_1.it)('should handle files with no definitions', async () => {
185
- // Write test file to disk temporarily
186
- const testFilePath = path.join(__dirname, 'consumer.ts');
187
- await fs.promises.writeFile(testFilePath, noDefsOnlyCallsFile);
188
- try {
189
- const result = await (0, parse_1.getFileTokenScores)('/root', ['consumer.ts']);
190
- // No definitions, only calls
191
- (0, globals_1.expect)(Object.keys(result.tokenScores['consumer.ts'])).toHaveLength(0);
192
- // External calls are tracked but not mapped to callers since definition is unknown
193
- (0, globals_1.expect)(Object.keys(result.tokenCallers)).toHaveLength(0);
194
- }
195
- finally {
196
- // Clean up test file
197
- await fs.promises.unlink(testFilePath);
198
- }
199
- });
200
- (0, globals_1.it)('should handle files with no calls', async () => {
201
- // Write test file to disk temporarily
202
- const testFilePath = path.join(__dirname, 'unused.ts');
203
- await fs.promises.writeFile(testFilePath, noCallsOnlyDefsFile);
204
- try {
205
- const result = await (0, parse_1.getFileTokenScores)('/root', ['unused.ts']);
206
- // Has definition but no calls
207
- (0, globals_1.expect)(result.tokenScores['unused.ts']).toHaveProperty('unusedFunction');
208
- (0, globals_1.expect)(result.tokenCallers['unused.ts']['unusedFunction']).toEqual([]);
209
- }
210
- finally {
211
- // Clean up test file
212
- await fs.promises.unlink(testFilePath);
213
- }
214
- });
215
- (0, globals_1.it)('should handle empty files', async () => {
216
- // Write test file to disk temporarily
217
- const testFilePath = path.join(__dirname, 'empty.ts');
218
- await fs.promises.writeFile(testFilePath, emptyFile);
219
- try {
220
- const result = await (0, parse_1.getFileTokenScores)('/root', ['empty.ts']);
221
- // No definitions or calls
222
- (0, globals_1.expect)(Object.keys(result.tokenScores['empty.ts'] || {})).toHaveLength(0);
223
- (0, globals_1.expect)(Object.keys(result.tokenCallers)).toHaveLength(0);
224
- }
225
- finally {
226
- // Clean up test file
227
- await fs.promises.unlink(testFilePath);
228
- }
229
- });
230
- });
231
- //# sourceMappingURL=parse.test.js.map