codebuff 1.0.281 → 1.0.282

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 (130) hide show
  1. package/dist/cli-handlers/initialization-flow.d.ts +1 -0
  2. package/dist/cli-handlers/initialization-flow.js +24 -0
  3. package/dist/cli-handlers/initialization-flow.js.map +1 -0
  4. package/dist/cli-modules/command-processor.d.ts +2 -0
  5. package/dist/cli-modules/command-processor.js +112 -0
  6. package/dist/cli-modules/command-processor.js.map +1 -0
  7. package/dist/cli-modules/input-handler.d.ts +4 -0
  8. package/dist/cli-modules/input-handler.js +75 -0
  9. package/dist/cli-modules/input-handler.js.map +1 -0
  10. package/dist/cli-modules/readline-handler.d.ts +11 -0
  11. package/dist/cli-modules/readline-handler.js +158 -0
  12. package/dist/cli-modules/readline-handler.js.map +1 -0
  13. package/dist/cli-modules/signal-handler.d.ts +7 -0
  14. package/dist/cli-modules/signal-handler.js +128 -0
  15. package/dist/cli-modules/signal-handler.js.map +1 -0
  16. package/dist/cli-modules/types.d.ts +51 -0
  17. package/dist/cli-modules/types.js +3 -0
  18. package/dist/cli-modules/types.js.map +1 -0
  19. package/dist/cli-modules/websocket-handler.d.ts +16 -0
  20. package/dist/cli-modules/websocket-handler.js +53 -0
  21. package/dist/cli-modules/websocket-handler.js.map +1 -0
  22. package/dist/cli.js +8 -6
  23. package/dist/cli.js.map +1 -1
  24. package/dist/client.d.ts +2 -2
  25. package/dist/client.js +5 -6
  26. package/dist/client.js.map +1 -1
  27. package/dist/code-map/__mocks__/tree-sitter-typescript.d.ts +12 -0
  28. package/dist/code-map/__mocks__/tree-sitter-typescript.d.ts.map +1 -0
  29. package/dist/code-map/__mocks__/tree-sitter-typescript.js +14 -0
  30. package/dist/code-map/__mocks__/tree-sitter-typescript.js.map +1 -0
  31. package/dist/code-map/__mocks__/wasm-mock.d.ts +2 -0
  32. package/dist/code-map/__mocks__/wasm-mock.d.ts.map +1 -0
  33. package/dist/code-map/__mocks__/wasm-mock.js +3 -0
  34. package/dist/code-map/__mocks__/wasm-mock.js.map +1 -0
  35. package/dist/code-map/__tests__/parse.test.d.ts +2 -0
  36. package/dist/code-map/__tests__/parse.test.d.ts.map +1 -0
  37. package/dist/code-map/__tests__/parse.test.js +231 -0
  38. package/dist/code-map/__tests__/parse.test.js.map +1 -0
  39. package/dist/code-map/__tests__/test-langs/consumer.d.ts +2 -0
  40. package/dist/code-map/__tests__/test-langs/consumer.d.ts.map +1 -0
  41. package/dist/code-map/__tests__/test-langs/consumer.js +6 -0
  42. package/dist/code-map/__tests__/test-langs/consumer.js.map +1 -0
  43. package/dist/code-map/__tests__/test-langs/empty.d.ts +1 -0
  44. package/dist/code-map/__tests__/test-langs/empty.d.ts.map +1 -0
  45. package/dist/code-map/__tests__/test-langs/empty.js +2 -0
  46. package/dist/code-map/__tests__/test-langs/empty.js.map +1 -0
  47. package/dist/code-map/__tests__/test-langs/test.d.ts +12 -0
  48. package/dist/code-map/__tests__/test-langs/test.d.ts.map +1 -0
  49. package/dist/code-map/__tests__/test-langs/test.js +23 -0
  50. package/dist/code-map/__tests__/test-langs/test.js.map +1 -0
  51. package/dist/code-map/__tests__/test-langs/unused.d.ts +2 -0
  52. package/dist/code-map/__tests__/test-langs/unused.d.ts.map +1 -0
  53. package/dist/code-map/__tests__/test-langs/unused.js +7 -0
  54. package/dist/code-map/__tests__/test-langs/unused.js.map +1 -0
  55. package/dist/code-map/__tests__/test-langs/utils1.d.ts +2 -0
  56. package/dist/code-map/__tests__/test-langs/utils1.d.ts.map +1 -0
  57. package/dist/code-map/__tests__/test-langs/utils1.js +7 -0
  58. package/dist/code-map/__tests__/test-langs/utils1.js.map +1 -0
  59. package/dist/code-map/__tests__/test-langs/utils2.d.ts +2 -0
  60. package/dist/code-map/__tests__/test-langs/utils2.d.ts.map +1 -0
  61. package/dist/code-map/__tests__/test-langs/utils2.js +8 -0
  62. package/dist/code-map/__tests__/test-langs/utils2.js.map +1 -0
  63. package/dist/code-map/__tests__/tree-sitter-minimal.test.d.ts +2 -0
  64. package/dist/code-map/__tests__/tree-sitter-minimal.test.d.ts.map +1 -0
  65. package/dist/code-map/__tests__/tree-sitter-minimal.test.js +79 -0
  66. package/dist/code-map/__tests__/tree-sitter-minimal.test.js.map +1 -0
  67. package/dist/code-map/jest.config.d.ts +4 -0
  68. package/dist/code-map/jest.config.d.ts.map +1 -0
  69. package/dist/code-map/jest.config.js +18 -0
  70. package/dist/code-map/jest.config.js.map +1 -0
  71. package/dist/code-map/parse.test.d.ts +2 -0
  72. package/dist/code-map/parse.test.d.ts.map +1 -0
  73. package/dist/code-map/parse.test.js +218 -0
  74. package/dist/code-map/parse.test.js.map +1 -0
  75. package/dist/code-map/scripts/tree-sitter-test.cjs +27 -0
  76. package/dist/code-map/scripts/tree-sitter-test.cjs.map +1 -0
  77. package/dist/code-map/scripts/tree-sitter-test.d.cts +2 -0
  78. package/dist/code-map/scripts/tree-sitter-test.d.cts.map +1 -0
  79. package/dist/code-map/scripts/tree-sitter-test.d.ts +2 -0
  80. package/dist/code-map/scripts/tree-sitter-test.d.ts.map +1 -0
  81. package/dist/code-map/scripts/tree-sitter-test.js +54 -0
  82. package/dist/code-map/scripts/tree-sitter-test.js.map +1 -0
  83. package/dist/code-map/test-parser.d.ts +2 -0
  84. package/dist/code-map/test-parser.d.ts.map +1 -0
  85. package/dist/code-map/test-parser.js +42 -0
  86. package/dist/code-map/test-parser.js.map +1 -0
  87. package/dist/code-map/tsconfig.tsbuildinfo +1 -1
  88. package/dist/common/actions.d.ts +66 -66
  89. package/dist/common/bigquery/client.d.ts +15 -0
  90. package/dist/common/bigquery/client.js +265 -0
  91. package/dist/common/bigquery/client.js.map +1 -0
  92. package/dist/common/bigquery/schema.d.ts +55 -0
  93. package/dist/common/bigquery/schema.js +24 -0
  94. package/dist/common/bigquery/schema.js.map +1 -0
  95. package/dist/common/constants/tools.d.ts +0 -2
  96. package/dist/common/constants/tools.js +0 -3
  97. package/dist/common/constants/tools.js.map +1 -1
  98. package/dist/common/types/agent-state.d.ts +12 -12
  99. package/dist/common/util/file-metadata.d.ts +9 -0
  100. package/dist/common/util/file-metadata.js +24 -0
  101. package/dist/common/util/file-metadata.js.map +1 -0
  102. package/dist/common/util/saxy.js +3 -1
  103. package/dist/common/util/saxy.js.map +1 -1
  104. package/dist/common/websockets/websocket-schema.d.ts +124 -124
  105. package/dist/index.js +2 -56
  106. package/dist/tool-handlers.js +0 -6
  107. package/dist/tool-handlers.js.map +1 -1
  108. package/dist/utils/tool-renderers.js +0 -6
  109. package/dist/utils/tool-renderers.js.map +1 -1
  110. package/package.json +1 -1
  111. package/dist/common/__tests__/project-file-tree.test.d.ts +0 -1
  112. package/dist/common/__tests__/project-file-tree.test.js +0 -251
  113. package/dist/common/__tests__/project-file-tree.test.js.map +0 -1
  114. package/dist/common/json-config/__tests__/__snapshots__/stringify-schema.test.js.snap +0 -119
  115. package/dist/common/util/process-stream.d.ts +0 -7
  116. package/dist/common/util/process-stream.js +0 -162
  117. package/dist/common/util/process-stream.js.map +0 -1
  118. package/dist/utils/__tests__/__snapshots__/background-process-manager.test.js.snap +0 -137
  119. package/dist/utils/__tests__/file-paths.test.d.ts +0 -1
  120. package/dist/utils/__tests__/file-paths.test.js +0 -37
  121. package/dist/utils/__tests__/file-paths.test.js.map +0 -1
  122. package/dist/utils/__tests__/path.test.d.ts +0 -1
  123. package/dist/utils/__tests__/path.test.js +0 -37
  124. package/dist/utils/__tests__/path.test.js.map +0 -1
  125. package/dist/utils/file-paths.d.ts +0 -9
  126. package/dist/utils/file-paths.js +0 -24
  127. package/dist/utils/file-paths.js.map +0 -1
  128. package/dist/utils/path.d.ts +0 -9
  129. package/dist/utils/path.js +0 -27
  130. package/dist/utils/path.js.map +0 -1
@@ -0,0 +1 @@
1
+ export declare function handleInitializationFlowLocally(): void;
@@ -0,0 +1,24 @@
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.handleInitializationFlowLocally = handleInitializationFlowLocally;
7
+ const fs_1 = require("fs");
8
+ const path_1 = __importDefault(require("path"));
9
+ const constants_1 = require("../common/json-config/constants");
10
+ const project_files_1 = require("../project-files");
11
+ function handleInitializationFlowLocally() {
12
+ const projectRoot = (0, project_files_1.getProjectRoot)();
13
+ // Knowledge file will be created in the backend
14
+ const configPath = path_1.default.join(projectRoot, constants_1.codebuffConfigFile);
15
+ if (!(0, fs_1.existsSync)(configPath)) {
16
+ // Create the config file
17
+ const configContent = {
18
+ description: 'Template configuration for this project. See https://www.codebuff.com/config for all options.',
19
+ startupProcesses: [],
20
+ };
21
+ (0, fs_1.writeFileSync)(configPath, JSON.stringify(configContent, null, 2));
22
+ }
23
+ }
24
+ //# sourceMappingURL=initialization-flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initialization-flow.js","sourceRoot":"","sources":["../../src/cli-handlers/initialization-flow.ts"],"names":[],"mappings":";;;;;AAOA,0EAeC;AAtBD,2BAA8C;AAC9C,gDAAuB;AAEvB,4DAAiE;AAEjE,oDAAiD;AAEjD,SAAgB,+BAA+B;IAC7C,MAAM,WAAW,GAAG,IAAA,8BAAc,GAAE,CAAA;IAEpC,gDAAgD;IAEhD,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,8BAAkB,CAAC,CAAA;IAC7D,IAAI,CAAC,IAAA,eAAU,EAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,yBAAyB;QACzB,MAAM,aAAa,GAAG;YACpB,WAAW,EACT,+FAA+F;YACjG,gBAAgB,EAAE,EAAE;SACrB,CAAA;QACD,IAAA,kBAAa,EAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IACnE,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { CLI } from '../cli';
2
+ export declare function processCommand(cli: CLI, userInput: string): Promise<boolean>;
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.processCommand = processCommand;
4
+ const analytics_events_1 = require("../common/constants/analytics-events");
5
+ const analytics_1 = require("../utils/analytics");
6
+ const menu_1 = require("../menu");
7
+ const checkpoint_manager_1 = require("../checkpoints/checkpoint-manager");
8
+ const api_key_1 = require("../cli-handlers/api-key");
9
+ const checkpoint_1 = require("../cli-handlers/checkpoint");
10
+ const diff_1 = require("../cli-handlers/diff");
11
+ const easter_egg_1 = require("../cli-handlers/easter-egg");
12
+ const inititalization_flow_1 = require("../cli-handlers/inititalization-flow");
13
+ async function processCommand(cli, userInput) {
14
+ const { client, readyPromise, rl } = cli;
15
+ // freshPrompt is now an arrow function on CLI, so direct reference is fine.
16
+ const freshPromptFn = cli.freshPrompt;
17
+ if (userInput === 'help' || userInput === 'h' || userInput === '/help') {
18
+ (0, menu_1.displayMenu)();
19
+ freshPromptFn();
20
+ return true;
21
+ }
22
+ if (userInput === 'login' || userInput === 'signin') {
23
+ await client.login();
24
+ checkpoint_manager_1.checkpointManager.clearCheckpoints();
25
+ return true;
26
+ }
27
+ if (userInput === 'logout' || userInput === 'signout') {
28
+ await client.logout();
29
+ freshPromptFn();
30
+ return true;
31
+ }
32
+ if (userInput.startsWith('ref-')) {
33
+ await client.handleReferralCode(userInput.trim());
34
+ return true;
35
+ }
36
+ const detectionResult = (0, api_key_1.detectApiKey)(userInput);
37
+ if (detectionResult.status !== 'not_found') {
38
+ await (0, api_key_1.handleApiKeyInput)(client, detectionResult, readyPromise, freshPromptFn // Pass the function directly
39
+ );
40
+ return true;
41
+ }
42
+ if (userInput === 'usage' || userInput === 'credits') {
43
+ await client.getUsage();
44
+ return true;
45
+ }
46
+ if (userInput === 'quit' || userInput === 'exit' || userInput === 'q') {
47
+ rl.close();
48
+ return true;
49
+ }
50
+ if (['diff', 'doff', 'dif', 'iff', 'd'].includes(userInput)) {
51
+ (0, diff_1.handleDiff)(client.lastChanges);
52
+ freshPromptFn();
53
+ return true;
54
+ }
55
+ if (userInput === 'uuddlrlrba' ||
56
+ userInput === 'konami' ||
57
+ userInput === 'codebuffy') {
58
+ (0, easter_egg_1.showEasterEgg)(freshPromptFn); // Pass the function directly
59
+ return true;
60
+ }
61
+ if ((0, checkpoint_1.isCheckpointCommand)(userInput)) {
62
+ (0, analytics_1.trackEvent)(analytics_events_1.AnalyticsEvent.CHECKPOINT_COMMAND_USED, {
63
+ command: userInput,
64
+ });
65
+ if ((0, checkpoint_1.isCheckpointCommand)(userInput, 'undo')) {
66
+ await (0, checkpoint_1.saveCheckpoint)(userInput, client, readyPromise);
67
+ const toRestore = await (0, checkpoint_1.handleUndo)(client, rl);
68
+ freshPromptFn(toRestore);
69
+ return true;
70
+ }
71
+ if ((0, checkpoint_1.isCheckpointCommand)(userInput, 'redo')) {
72
+ await (0, checkpoint_1.saveCheckpoint)(userInput, client, readyPromise);
73
+ const toRestore = await (0, checkpoint_1.handleRedo)(client, rl);
74
+ freshPromptFn(toRestore);
75
+ return true;
76
+ }
77
+ if ((0, checkpoint_1.isCheckpointCommand)(userInput, 'list')) {
78
+ await (0, checkpoint_1.saveCheckpoint)(userInput, client, readyPromise);
79
+ await (0, checkpoint_1.listCheckpoints)();
80
+ freshPromptFn();
81
+ return true;
82
+ }
83
+ const restoreMatch = (0, checkpoint_1.isCheckpointCommand)(userInput, 'restore');
84
+ if (restoreMatch) {
85
+ const id = parseInt(restoreMatch[1], 10);
86
+ await (0, checkpoint_1.saveCheckpoint)(userInput, client, readyPromise);
87
+ const toRestore = await (0, checkpoint_1.handleRestoreCheckpoint)(id, client, rl);
88
+ freshPromptFn(toRestore);
89
+ return true;
90
+ }
91
+ if ((0, checkpoint_1.isCheckpointCommand)(userInput, 'clear')) {
92
+ (0, checkpoint_1.handleClearCheckpoints)();
93
+ freshPromptFn();
94
+ return true;
95
+ }
96
+ if ((0, checkpoint_1.isCheckpointCommand)(userInput, 'save')) {
97
+ await (0, checkpoint_1.saveCheckpoint)(userInput, client, readyPromise, true);
98
+ (0, checkpoint_1.displayCheckpointMenu)();
99
+ freshPromptFn();
100
+ return true;
101
+ }
102
+ (0, checkpoint_1.displayCheckpointMenu)();
103
+ freshPromptFn();
104
+ return true;
105
+ }
106
+ if (userInput === 'init') {
107
+ (0, inititalization_flow_1.handleInitializationFlowLocally)();
108
+ return false;
109
+ }
110
+ return false;
111
+ }
112
+ //# sourceMappingURL=command-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-processor.js","sourceRoot":"","sources":["../../src/cli-modules/command-processor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { CLI } from '../cli';
2
+ export declare function handleLineInput(cli: CLI, line: string): Promise<void>;
3
+ export declare function handleKeyPressInput(cli: CLI, str: string, key: any): void;
4
+ export declare function attachInputEventHandlers(cli: CLI): void;
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleLineInput = handleLineInput;
4
+ exports.handleKeyPressInput = handleKeyPressInput;
5
+ exports.attachInputEventHandlers = attachInputEventHandlers;
6
+ const readline_handler_1 = require("./readline-handler"); // For handleLine
7
+ // State variables that were previously in CLI, now managed here or passed via CLI instance
8
+ // For simplicity, we'll access them via the CLI instance passed to functions.
9
+ function detectPasting(cli) {
10
+ const currentTime = Date.now();
11
+ // Accessing and modifying CLI instance properties directly.
12
+ // Consider if these should be passed and returned if more functional style is preferred.
13
+ const timeDiff = currentTime - cli['lastInputTime']; // Private access via string key
14
+ if (timeDiff < 10) {
15
+ cli['consecutiveFastInputs']++;
16
+ if (cli['consecutiveFastInputs'] >= 2) {
17
+ cli['isPasting'] = true;
18
+ }
19
+ }
20
+ else {
21
+ cli['consecutiveFastInputs'] = 0;
22
+ if (cli['isPasting']) {
23
+ cli['isPasting'] = false;
24
+ }
25
+ }
26
+ cli['lastInputTime'] = currentTime;
27
+ }
28
+ async function handleLineInput(cli, line) {
29
+ detectPasting(cli); // detectPasting will modify cli.isPasting and cli.pastedContent
30
+ if (cli['isPasting']) {
31
+ cli['pastedContent'] += line + '\n';
32
+ }
33
+ else if (!cli.isReceivingResponse) { // isReceivingResponse is public
34
+ const input = (cli['pastedContent'] + line).trim();
35
+ cli['pastedContent'] = '';
36
+ // Directly call a method on cli that was originally handleUserInput
37
+ // For now, assuming handleUserInput is still on CLI and public/accessible.
38
+ // If handleUserInput is also refactored, this call will change.
39
+ await cli['handleUserInput'](input); // Private access for now
40
+ (0, readline_handler_1.appendToHistory)(input);
41
+ }
42
+ }
43
+ function handleKeyPressInput(cli, str, key) {
44
+ // ESC key is handled by signal-handler. This only handles other specific keypresses.
45
+ if (!cli['isPasting'] &&
46
+ str === ' ' &&
47
+ '_refreshLine' in cli.rl && // rl is public
48
+ 'line' in cli.rl &&
49
+ 'cursor' in cli.rl) {
50
+ const rlAny = cli.rl;
51
+ const { cursor, line } = rlAny;
52
+ const prevTwoChars = cursor > 1 ? line.slice(cursor - 2, cursor) : '';
53
+ if (prevTwoChars === ' ') {
54
+ rlAny.line = line.slice(0, cursor - 2) + '\n\n' + line.slice(cursor);
55
+ rlAny._refreshLine();
56
+ }
57
+ }
58
+ detectPasting(cli); // Also call detectPasting on keypress
59
+ }
60
+ // This function will be called from CLI to attach specific readline and keypress events
61
+ function attachInputEventHandlers(cli) {
62
+ cli.rl.on('line', (line) => handleLineInput(cli, line));
63
+ // process.stdin.on('keypress') is already set up by signal-handler for ESC.
64
+ // We need to ensure that this new keypress handler for other keys
65
+ // doesn't conflict or override it.
66
+ // A better approach might be a single keypress dispatcher in CLI
67
+ // that calls out to signal-handler for ESC and input-handler for others.
68
+ // For now, let's assume signal-handler's keypress is specific enough.
69
+ // Or, we can have this module handle all non-ESC keypresses.
70
+ // The current handleKeyPress in CLI will be replaced by this.
71
+ // The signal-handler's attachCliBehaviorEventHandlers already sets up a keypress listener for ESC.
72
+ // We need to make sure this doesn't add a second one or that they coordinate.
73
+ // Let's modify CLI's handleKeyPress to call this.
74
+ }
75
+ //# sourceMappingURL=input-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-handler.js","sourceRoot":"","sources":["../../src/cli-modules/input-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import * as readline from 'readline';
2
+ import type { Client } from '../client';
3
+ export declare function loadHistory(): string[];
4
+ export declare function appendToHistory(line: string): void;
5
+ export declare function filePathCompleter(line: string): [string[], string];
6
+ export declare function setPrompt(rl: readline.Interface): void;
7
+ export declare function freshPrompt(rl: readline.Interface, client: Client, // Pass client instance
8
+ shouldReconnectWhenIdle: boolean, // Pass this state
9
+ onReconnect: () => void, // Callback for reconnection
10
+ userInput?: string): void;
11
+ export declare function initReadline(cliInstance: any): readline.Interface;
@@ -0,0 +1,158 @@
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.loadHistory = loadHistory;
30
+ exports.appendToHistory = appendToHistory;
31
+ exports.filePathCompleter = filePathCompleter;
32
+ exports.setPrompt = setPrompt;
33
+ exports.freshPrompt = freshPrompt;
34
+ exports.initReadline = initReadline;
35
+ const fs_1 = __importDefault(require("fs"));
36
+ const path_1 = __importStar(require("path"));
37
+ const readline = __importStar(require("readline"));
38
+ const os = __importStar(require("os"));
39
+ const os_1 = require("os");
40
+ const fs_2 = require("fs");
41
+ const picocolors_1 = require("picocolors");
42
+ const lodash_1 = require("lodash");
43
+ const credentials_1 = require("../credentials");
44
+ const project_files_1 = require("../project-files");
45
+ const spinner_1 = require("../utils/spinner");
46
+ const display_1 = require("../display");
47
+ const PROMPT_HISTORY_PATH = path_1.default.join(credentials_1.CONFIG_DIR, 'prompt_history.json');
48
+ function loadHistory() {
49
+ try {
50
+ if (fs_1.default.existsSync(PROMPT_HISTORY_PATH)) {
51
+ const content = fs_1.default.readFileSync(PROMPT_HISTORY_PATH, 'utf8');
52
+ const history = JSON.parse(content);
53
+ return (0, lodash_1.uniq)(history.filter((line) => line.trim())).reverse();
54
+ }
55
+ }
56
+ catch (error) {
57
+ console.error('Error loading prompt history:', error);
58
+ fs_1.default.writeFileSync(PROMPT_HISTORY_PATH, '[]');
59
+ }
60
+ return [];
61
+ }
62
+ function appendToHistory(line) {
63
+ try {
64
+ let history = [];
65
+ if (fs_1.default.existsSync(PROMPT_HISTORY_PATH)) {
66
+ const content = fs_1.default.readFileSync(PROMPT_HISTORY_PATH, 'utf8');
67
+ history = JSON.parse(content);
68
+ }
69
+ if (line.trim() && !history.includes(line)) {
70
+ history.push(line);
71
+ fs_1.default.writeFileSync(PROMPT_HISTORY_PATH, JSON.stringify(history, null, 2));
72
+ }
73
+ }
74
+ catch (error) {
75
+ console.error('Error appending to prompt history:', error);
76
+ }
77
+ }
78
+ function filePathCompleter(line) {
79
+ const lastWord = line.split(' ').pop() || '';
80
+ const input = lastWord.startsWith('~')
81
+ ? (0, os_1.homedir)() + lastWord.slice(1)
82
+ : lastWord;
83
+ const directorySuffix = process.platform === 'win32' ? '\\' : '/';
84
+ const dir = input.endsWith(directorySuffix)
85
+ ? input.slice(0, input.length - 1)
86
+ : (0, path_1.dirname)(input);
87
+ const partial = input.endsWith(directorySuffix) ? '' : (0, path_1.basename)(input);
88
+ let baseDir = (0, path_1.isAbsolute)(dir) ? dir : path_1.default.join((0, project_files_1.getWorkingDirectory)(), dir);
89
+ try {
90
+ const files = (0, fs_2.readdirSync)(baseDir);
91
+ const matches = files
92
+ .filter((file) => file.startsWith(partial))
93
+ .map((file) => file + ((0, project_files_1.isDir)(path_1.default.join(baseDir, file)) ? directorySuffix : ''));
94
+ return [matches, partial];
95
+ }
96
+ catch {
97
+ return [[], line];
98
+ }
99
+ }
100
+ function setPrompt(rl) {
101
+ const projectRoot = (0, project_files_1.getProjectRoot)();
102
+ const cwd = (0, project_files_1.getWorkingDirectory)();
103
+ const projectDirName = path_1.default.parse(projectRoot).base;
104
+ const ps1Dir = projectDirName +
105
+ (cwd === projectRoot
106
+ ? ''
107
+ : (os.platform() === 'win32' ? '\\' : '/') +
108
+ path_1.default.relative(projectRoot, cwd));
109
+ rl.setPrompt((0, picocolors_1.green)(`${ps1Dir} > `));
110
+ }
111
+ function freshPrompt(rl, client, // Pass client instance
112
+ shouldReconnectWhenIdle, // Pass this state
113
+ onReconnect, // Callback for reconnection
114
+ userInput = '') {
115
+ spinner_1.Spinner.get().stop();
116
+ // this.isReceivingResponse = false; // This state will be managed in CLI class
117
+ if (shouldReconnectWhenIdle) {
118
+ client.reconnect(); // Call client's reconnect method
119
+ onReconnect(); // Call the passed onReconnect callback
120
+ }
121
+ readline.cursorTo(process.stdout, 0);
122
+ const rlAny = rl;
123
+ if (client.pendingTopUpMessageAmount > 0) {
124
+ console.log('\n\n' +
125
+ (0, picocolors_1.green)(`Auto top-up successful! ${client.pendingTopUpMessageAmount.toLocaleString()} credits added.`) +
126
+ '\n');
127
+ client.pendingTopUpMessageAmount = 0;
128
+ }
129
+ rlAny.line = '';
130
+ setPrompt(rl);
131
+ rl.prompt();
132
+ (0, display_1.disableSquashNewlines)();
133
+ if (!userInput) {
134
+ return;
135
+ }
136
+ rl.write(' '.repeat(userInput.length));
137
+ rlAny.line = userInput;
138
+ rlAny._refreshLine();
139
+ }
140
+ function initReadline(cliInstance // Using 'any' for now, will refine later
141
+ ) {
142
+ const rl = readline.createInterface({
143
+ input: process.stdin,
144
+ output: process.stdout,
145
+ historySize: 1000,
146
+ terminal: true,
147
+ completer: filePathCompleter,
148
+ });
149
+ const history = loadHistory();
150
+ rl.history.push(...history);
151
+ // Event handlers will be attached in the CLI class or a dedicated input handler module
152
+ // rl.on('line', (line) => cliInstance.handleLine(line));
153
+ // rl.on('SIGINT', async () => await cliInstance.handleSigint());
154
+ // rl.on('close', async () => await cliInstance.handleExit());
155
+ // process.stdin.on('keypress', (str, key) => cliInstance.handleKeyPress(str, key));
156
+ return rl;
157
+ }
158
+ //# sourceMappingURL=readline-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readline-handler.js","sourceRoot":"","sources":["../../src/cli-modules/readline-handler.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,kCAYC;AAED,0CAcC;AAED,8CA2BC;AAED,8BAWC;AAED,kCAyCC;AAED,oCAsBC;AA3JD,4CAAoB;AACpB,6CAA2D;AAC3D,mDAAqC;AACrC,uCAAyB;AACzB,2BAA6B;AAC7B,2BAAiC;AAEjC,2CAAmC;AACnC,mCAA8B;AAE9B,gDAA4C;AAC5C,oDAA8E;AAC9E,8CAA2C;AAC3C,wCAAmD;AAGnD,MAAM,mBAAmB,GAAG,cAAI,CAAC,IAAI,CAAC,wBAAU,EAAE,qBAAqB,CAAC,CAAC;AAEzE,SAAgB,WAAW;IACzB,IAAI,CAAC;QACH,IAAI,YAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACvC,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;YAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAa,CAAC;YAChD,OAAO,IAAA,aAAI,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAC/D,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;QACtD,YAAE,CAAC,aAAa,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAgB,eAAe,CAAC,IAAY;IAC1C,IAAI,CAAC;QACH,IAAI,OAAO,GAAa,EAAE,CAAC;QAC3B,IAAI,YAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACvC,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;YAC7D,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,YAAE,CAAC,aAAa,CAAC,mBAAmB,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED,SAAgB,iBAAiB,CAAC,IAAY;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IAC7C,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;QACpC,CAAC,CAAC,IAAA,YAAO,GAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/B,CAAC,CAAC,QAAQ,CAAC;IAEb,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;IAElE,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC;QACzC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAClC,CAAC,CAAC,IAAA,cAAO,EAAC,KAAK,CAAC,CAAC;IACnB,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAA,eAAQ,EAAC,KAAK,CAAC,CAAC;IAEvE,IAAI,OAAO,GAAG,IAAA,iBAAU,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAI,CAAC,IAAI,CAAC,IAAA,mCAAmB,GAAE,EAAE,GAAG,CAAC,CAAC;IAE5E,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAA,gBAAW,EAAC,OAAO,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,KAAK;aAClB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;aAC1C,GAAG,CACF,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,GAAG,CAAC,IAAA,qBAAK,EAAC,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAClE,CAAC;QACJ,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,SAAgB,SAAS,CAAC,EAAsB;IAC9C,MAAM,WAAW,GAAG,IAAA,8BAAc,GAAE,CAAC;IACrC,MAAM,GAAG,GAAG,IAAA,mCAAmB,GAAE,CAAC;IAClC,MAAM,cAAc,GAAG,cAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC;IACpD,MAAM,MAAM,GACV,cAAc;QACd,CAAC,GAAG,KAAK,WAAW;YAClB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;gBACxC,cAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;IACvC,EAAE,CAAC,SAAS,CAAC,IAAA,kBAAK,EAAC,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC;AACtC,CAAC;AAED,SAAgB,WAAW,CACzB,EAAsB,EACtB,MAAc,EAAE,uBAAuB;AACvC,uBAAgC,EAAE,kBAAkB;AACpD,WAAuB,EAAE,4BAA4B;AACrD,YAAoB,EAAE;IAEtB,iBAAO,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;IACrB,+EAA+E;IAE/E,IAAI,uBAAuB,EAAE,CAAC;QAC5B,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,iCAAiC;QACrD,WAAW,EAAE,CAAC,CAAC,uCAAuC;IACxD,CAAC;IAED,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,EAAS,CAAC;IAExB,IAAI,MAAM,CAAC,yBAAyB,GAAG,CAAC,EAAE,CAAC;QACzC,OAAO,CAAC,GAAG,CACT,MAAM;YACJ,IAAA,kBAAK,EACH,2BAA2B,MAAM,CAAC,yBAAyB,CAAC,cAAc,EAAE,iBAAiB,CAC9F;YACD,IAAI,CACP,CAAC;QACF,MAAM,CAAC,yBAAyB,GAAG,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,CAAC,CAAC;IACd,EAAE,CAAC,MAAM,EAAE,CAAC;IACZ,IAAA,+BAAqB,GAAE,CAAC;IAExB,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;IACT,CAAC;IAED,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC;IACvB,KAAK,CAAC,YAAY,EAAE,CAAC;AACvB,CAAC;AAED,SAAgB,YAAY,CAC1B,WAAgB,CAAC,yCAAyC;;IAE1D,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,WAAW,EAAE,IAAI;QACjB,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE,iBAAiB;KAC7B,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC7B,EAAU,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;IAErC,uFAAuF;IACvF,yDAAyD;IACzD,iEAAiE;IACjE,8DAA8D;IAE9D,oFAAoF;IAEpF,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { CLI } from '../cli';
2
+ export declare function handleStopResponse(cli: CLI): void;
3
+ export declare function handleExit(cli: CLI): Promise<void>;
4
+ export declare function handleSigint(cli: CLI): Promise<void>;
5
+ export declare function handleEscKey(cli: CLI): void;
6
+ export declare function setupSignalHandlers(cli: CLI): void;
7
+ export declare function attachCliBehaviorEventHandlers(cli: CLI): void;
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleStopResponse = handleStopResponse;
4
+ exports.handleExit = handleExit;
5
+ exports.handleSigint = handleSigint;
6
+ exports.handleEscKey = handleEscKey;
7
+ exports.setupSignalHandlers = setupSignalHandlers;
8
+ exports.attachCliBehaviorEventHandlers = attachCliBehaviorEventHandlers;
9
+ const picocolors_1 = require("picocolors");
10
+ const string_1 = require("../common/util/string");
11
+ const background_process_manager_1 = require("../background-process-manager");
12
+ const analytics_1 = require("../utils/analytics");
13
+ const spinner_1 = require("../utils/spinner");
14
+ const terminal_1 = require("../utils/terminal");
15
+ const project_files_1 = require("../project-files");
16
+ // Helper function to access CLI properties safely
17
+ function getCliProperties(cli) {
18
+ return {
19
+ rl: cli.rl,
20
+ isReceivingResponse: cli.isReceivingResponse,
21
+ stopResponse: cli.stopResponse,
22
+ client: cli.client,
23
+ };
24
+ }
25
+ let lastSigintTime = 0;
26
+ function handleStopResponse(cli) {
27
+ console.log((0, picocolors_1.yellow)('\n[Response stopped by user]'));
28
+ cli.isReceivingResponse = false;
29
+ if (cli.stopResponse) {
30
+ cli.stopResponse();
31
+ cli.stopResponse = null;
32
+ }
33
+ spinner_1.Spinner.get().stop();
34
+ }
35
+ async function handleExit(cli) {
36
+ spinner_1.Spinner.get().restoreCursor();
37
+ process.removeAllListeners('unhandledRejection');
38
+ process.removeAllListeners('uncaughtException');
39
+ console.log('\n');
40
+ (0, terminal_1.killAndResetPersistentProcess)();
41
+ await (0, background_process_manager_1.killAllBackgroundProcesses)();
42
+ const logMessages = [];
43
+ const { client } = getCliProperties(cli);
44
+ if (client && client.creditsByPromptId && client.usageData) {
45
+ const totalCreditsUsedThisSession = Object.values(client.creditsByPromptId)
46
+ .flat()
47
+ .reduce((sum, credits) => sum + credits, 0);
48
+ logMessages.push(`${(0, string_1.pluralize)(totalCreditsUsedThisSession, 'credit')} used this session${client.usageData.remainingBalance !== null
49
+ ? `, ${client.usageData.remainingBalance.toLocaleString()} credits left.`
50
+ : '.'}`);
51
+ if (client.usageData.next_quota_reset) {
52
+ const daysUntilReset = Math.ceil((new Date(client.usageData.next_quota_reset).getTime() - Date.now()) /
53
+ (1000 * 60 * 60 * 24));
54
+ logMessages.push(`Your free credits will reset in ${(0, string_1.pluralize)(daysUntilReset, 'day')}.`);
55
+ }
56
+ }
57
+ else {
58
+ logMessages.push("Exiting Codebuff.");
59
+ }
60
+ console.log(logMessages.join(' '));
61
+ await (0, analytics_1.flushAnalytics)();
62
+ process.exit(0);
63
+ }
64
+ async function handleSigint(cli) {
65
+ const { rl, isReceivingResponse } = getCliProperties(cli);
66
+ if ((0, terminal_1.isCommandRunning)()) {
67
+ (0, terminal_1.resetShell)((0, project_files_1.getProjectRoot)());
68
+ }
69
+ if ('line' in rl) {
70
+ rl.line = '';
71
+ }
72
+ if (isReceivingResponse) {
73
+ handleStopResponse(cli);
74
+ cli.freshPrompt();
75
+ }
76
+ else {
77
+ const now = Date.now();
78
+ if (now - lastSigintTime < 5000) {
79
+ await handleExit(cli);
80
+ }
81
+ else {
82
+ lastSigintTime = now;
83
+ console.log('\nPress Ctrl-C again to exit');
84
+ cli.freshPrompt();
85
+ }
86
+ }
87
+ }
88
+ function handleEscKey(cli) {
89
+ const { isReceivingResponse } = getCliProperties(cli);
90
+ if (isReceivingResponse) {
91
+ handleStopResponse(cli);
92
+ cli.freshPrompt();
93
+ }
94
+ }
95
+ function setupSignalHandlers(cli) {
96
+ process.on('exit', () => {
97
+ spinner_1.Spinner.get().restoreCursor();
98
+ if (terminal_1.persistentProcess?.type === 'pty') {
99
+ terminal_1.persistentProcess.pty.kill();
100
+ }
101
+ (0, background_process_manager_1.sendKillSignalToAllBackgroundProcesses)();
102
+ });
103
+ for (const signal of ['SIGTERM', 'SIGHUP']) {
104
+ process.on(signal, async () => {
105
+ spinner_1.Spinner.get().restoreCursor();
106
+ await (0, background_process_manager_1.killAllBackgroundProcesses)();
107
+ await (0, analytics_1.flushAnalytics)();
108
+ process.exit(0);
109
+ });
110
+ }
111
+ process.on('SIGTSTP', async () => await handleExit(cli));
112
+ }
113
+ function attachCliBehaviorEventHandlers(cli) {
114
+ cli.rl.on('SIGINT', async () => await handleSigint(cli));
115
+ cli.rl.on('close', async () => await handleExit(cli));
116
+ process.stdin.on('keypress', (str, key) => {
117
+ if (key.name === 'escape') {
118
+ handleEscKey(cli);
119
+ }
120
+ else {
121
+ // Dispatch other key presses to the CLI's central key press handler
122
+ if (cli.dispatchKeyPress) { // Check if method exists
123
+ cli.dispatchKeyPress(str, key);
124
+ }
125
+ }
126
+ });
127
+ }
128
+ //# sourceMappingURL=signal-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal-handler.js","sourceRoot":"","sources":["../../src/cli-modules/signal-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
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
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/cli-modules/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
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
+ }