codecane 1.0.123
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/__tests__/tool-handlers.test.d.ts +1 -0
- package/dist/__tests__/tool-handlers.test.js +32 -0
- package/dist/__tests__/tool-handlers.test.js.map +1 -0
- package/dist/chat-storage.d.ts +29 -0
- package/dist/chat-storage.js +125 -0
- package/dist/chat-storage.js.map +1 -0
- package/dist/cli.d.ts +38 -0
- package/dist/cli.js +453 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +71 -0
- package/dist/client.js +458 -0
- package/dist/client.js.map +1 -0
- package/dist/code-map/languages.d.ts +12 -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 +11 -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 +11 -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 +1405 -0
- package/dist/common/actions.js +193 -0
- package/dist/common/actions.js.map +1 -0
- package/dist/common/billing/quota-manager.d.ts +29 -0
- package/dist/common/billing/quota-manager.js +213 -0
- package/dist/common/billing/quota-manager.js.map +1 -0
- package/dist/common/constants.d.ts +41 -0
- package/dist/common/constants.js +126 -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 +1089 -0
- package/dist/common/db/schema.js +114 -0
- package/dist/common/db/schema.js.map +1 -0
- package/dist/common/env.d.mts +1 -0
- package/dist/common/env.mjs +34 -0
- package/dist/common/env.mjs.map +1 -0
- package/dist/common/project-file-tree.d.ts +9 -0
- package/dist/common/project-file-tree.js +166 -0
- package/dist/common/project-file-tree.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/usage.d.ts +24 -0
- package/dist/common/types/usage.js +13 -0
- package/dist/common/types/usage.js.map +1 -0
- package/dist/common/util/__tests__/string.test.d.ts +1 -0
- package/dist/common/util/__tests__/string.test.js +83 -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 +6 -0
- package/dist/common/util/changes.js +72 -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/dates.d.ts +1 -0
- package/dist/common/util/dates.js +13 -0
- package/dist/common/util/dates.js.map +1 -0
- package/dist/common/util/file.d.ts +151 -0
- package/dist/common/util/file.js +180 -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/helpers.d.ts +1 -0
- package/dist/common/util/helpers.js +6 -0
- package/dist/common/util/helpers.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 +1 -0
- package/dist/common/util/promise.js +33 -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/server/referral.d.ts +14 -0
- package/dist/common/util/server/referral.js +85 -0
- package/dist/common/util/server/referral.js.map +1 -0
- package/dist/common/util/string.d.ts +9 -0
- package/dist/common/util/string.js +90 -0
- package/dist/common/util/string.js.map +1 -0
- package/dist/common/util/stripe.d.ts +2 -0
- package/dist/common/util/stripe.js +19 -0
- package/dist/common/util/stripe.js.map +1 -0
- package/dist/common/util/tools.d.ts +2 -0
- package/dist/common/util/tools.js +13 -0
- package/dist/common/util/tools.js.map +1 -0
- package/dist/common/websockets/websocket-client.d.ts +40 -0
- package/dist/common/websockets/websocket-client.js +187 -0
- package/dist/common/websockets/websocket-client.js.map +1 -0
- package/dist/common/websockets/websocket-schema.d.ts +3058 -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 +2 -0
- package/dist/config.js +8 -0
- package/dist/config.js.map +1 -0
- package/dist/credentials.d.ts +3 -0
- package/dist/credentials.js +33 -0
- package/dist/credentials.js.map +1 -0
- package/dist/fingerprint.d.ts +1 -0
- package/dist/fingerprint.js +43 -0
- package/dist/fingerprint.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +75 -0
- package/dist/index.js.map +1 -0
- package/dist/menu.d.ts +1 -0
- package/dist/menu.js +94 -0
- package/dist/menu.js.map +1 -0
- package/dist/project-files.d.ts +64 -0
- package/dist/project-files.js +338 -0
- package/dist/project-files.js.map +1 -0
- package/dist/tool-handlers.d.ts +11 -0
- package/dist/tool-handlers.js +215 -0
- package/dist/tool-handlers.js.map +1 -0
- package/dist/types.d.ts +7 -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 +156 -0
- package/dist/update-codebuff.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/worker-script-project-context.d.ts +1 -0
- package/dist/worker-script-project-context.js +13 -0
- package/dist/worker-script-project-context.js.map +1 -0
- package/package.json +71 -0
package/README.md
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# The most powerful coding agent
|
|
2
|
+
|
|
3
|
+
Codebuff is a CLI tool that writes code for you.
|
|
4
|
+
|
|
5
|
+
1. Run `codebuff` from your project directory
|
|
6
|
+
2. Tell it what to do
|
|
7
|
+
3. It will read and write to files and run commands to produce the code you want
|
|
8
|
+
|
|
9
|
+
Note: Codebuff will run commands in your terminal as it deems necessary to fulfill your request.
|
|
10
|
+
|
|
11
|
+
## Installation
|
|
12
|
+
|
|
13
|
+
To install Codebuff, run:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm install -g codebuff
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
(Use `sudo` if you get a permission error.)
|
|
20
|
+
|
|
21
|
+
## Usage
|
|
22
|
+
|
|
23
|
+
After installation, you can start Codebuff by running:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
codebuff [project-directory]
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
If no project directory is specified, Codebuff will use the current directory.
|
|
30
|
+
|
|
31
|
+
You can also control the cost/quality tradeoff with these flags:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
codebuff --lite # Budget mode for more econonmical responses
|
|
35
|
+
codebuff --pro # Premium mode for higher quality responses
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
After running `codebuff`, simply chat with it to say what coding task you want done.
|
|
39
|
+
|
|
40
|
+
## Features
|
|
41
|
+
|
|
42
|
+
- Understands your whole codebase
|
|
43
|
+
- Creates and edits multiple files based on your request
|
|
44
|
+
- Can run your tests or type checker or linter; can install packages
|
|
45
|
+
- It's powerful: ask Codebuff to keep working until it reaches a condition and it will.
|
|
46
|
+
|
|
47
|
+
Our users regularly use Codebuff to implement new features, write unit tests, refactor code,write scripts, or give advice.
|
|
48
|
+
|
|
49
|
+
## Knowledge Files
|
|
50
|
+
|
|
51
|
+
To unlock the full benefits of modern LLMs, we recommend storing knowledge alongside your code. Add a `knowledge.md` file anywhere in your project to provide helpful context, guidance, and tips for the LLM as it performs tasks for you.
|
|
52
|
+
|
|
53
|
+
Codebuff can fluently read and write files, so it will add knowledge as it goes. You don't need to write knowledge manually!
|
|
54
|
+
|
|
55
|
+
Some have said every change should be paired with a unit test. In 2024, every change should come with a knowledge update!
|
|
56
|
+
|
|
57
|
+
## Tips
|
|
58
|
+
|
|
59
|
+
1. Create a `knowledge.md` file and collect specific points of advice. The assistant will use this knowledge to improve its responses.
|
|
60
|
+
2. Type `undo` or `redo` to revert or reapply file changes from the conversation.
|
|
61
|
+
3. Press `Esc` or `Ctrl+C` while Codebuff is generating a response to stop it.
|
|
62
|
+
|
|
63
|
+
## Troubleshooting
|
|
64
|
+
|
|
65
|
+
If you are getting permission errors during installation, try using sudo:
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
sudo npm install -g codebuff
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Or, we recommend [installing node with a version manager](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm). See below.
|
|
72
|
+
|
|
73
|
+
#### For Mac or Unix, use [nvm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm). Run:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
#### For Windows, use [nvm-windows](https://github.com/coreybutler/nvm-windows):
|
|
80
|
+
|
|
81
|
+
Make sure to uninstall your existing node program. Then get this executable:
|
|
82
|
+
|
|
83
|
+
[Download the release .exe](https://github.com/coreybutler/nvm-windows/releases)
|
|
84
|
+
|
|
85
|
+
## Feedback
|
|
86
|
+
|
|
87
|
+
We value your input! Please email your feedback to `founders@codebuff.com`. Thank you for using Codebuff!
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tool_handlers_1 = require("../tool-handlers");
|
|
4
|
+
// Set up test directory
|
|
5
|
+
beforeAll(() => {
|
|
6
|
+
(0, tool_handlers_1.resetPtyShell)(process.cwd());
|
|
7
|
+
});
|
|
8
|
+
describe('handleRunTerminalCommand', () => {
|
|
9
|
+
afterEach(() => {
|
|
10
|
+
// Clean up after each test
|
|
11
|
+
(0, tool_handlers_1.resetPtyShell)(process.cwd());
|
|
12
|
+
});
|
|
13
|
+
it('should preserve shell state between commands', async () => {
|
|
14
|
+
// First command: Create a test variable
|
|
15
|
+
const result1 = await (0, tool_handlers_1.handleRunTerminalCommand)({ command: 'TEST_VAR=hello' }, 'test-id', 'user');
|
|
16
|
+
// Second command: Echo the test variable
|
|
17
|
+
const result2 = await (0, tool_handlers_1.handleRunTerminalCommand)({ command: 'echo $TEST_VAR' }, 'test-id', 'user');
|
|
18
|
+
expect(result2.stdout.trim()).toBe('hello');
|
|
19
|
+
});
|
|
20
|
+
it('should handle command timeout by restarting shell', async () => {
|
|
21
|
+
// Start a command that will definitely timeout
|
|
22
|
+
const longRunningCommand = (0, tool_handlers_1.handleRunTerminalCommand)({ command: 'sleep 15' }, // Longer than MAX_EXECUTION_TIME
|
|
23
|
+
'test-id', 'assistant');
|
|
24
|
+
const result = await longRunningCommand;
|
|
25
|
+
// Verify the shell was restarted
|
|
26
|
+
expect(result.result).toContain('Shell has been restarted');
|
|
27
|
+
// Verify we can still run commands after restart
|
|
28
|
+
const subsequentCommand = await (0, tool_handlers_1.handleRunTerminalCommand)({ command: 'echo "test"' }, 'test-id', 'assistant');
|
|
29
|
+
expect(subsequentCommand.stdout).toContain('test');
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
//# sourceMappingURL=tool-handlers.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-handlers.test.js","sourceRoot":"","sources":["../../src/__tests__/tool-handlers.test.ts"],"names":[],"mappings":";;AAAA,oDAA0E;AAE1E,wBAAwB;AACxB,SAAS,CAAC,GAAG,EAAE;IACb,IAAA,6BAAa,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;AAC9B,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,SAAS,CAAC,GAAG,EAAE;QACb,2BAA2B;QAC3B,IAAA,6BAAa,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;IAC9B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,wCAAwC;QACxC,MAAM,OAAO,GAAG,MAAM,IAAA,wCAAwB,EAC5C,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAC7B,SAAS,EACT,MAAM,CACP,CAAA;QAED,yCAAyC;QACzC,MAAM,OAAO,GAAG,MAAM,IAAA,wCAAwB,EAC5C,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAC7B,SAAS,EACT,MAAM,CACP,CAAA;QAED,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC7C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,+CAA+C;QAC/C,MAAM,kBAAkB,GAAG,IAAA,wCAAwB,EACjD,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,iCAAiC;QAC1D,SAAS,EACT,WAAW,CACZ,CAAA;QAED,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAA;QAEvC,iCAAiC;QACjC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAA;QAE3D,iDAAiD;QACjD,MAAM,iBAAiB,GAAG,MAAM,IAAA,wCAAwB,EACtD,EAAE,OAAO,EAAE,aAAa,EAAE,EAC1B,SAAS,EACT,WAAW,CACZ,CAAA;QACD,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IACpD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Message } from './common/actions';
|
|
2
|
+
interface Chat {
|
|
3
|
+
id: string;
|
|
4
|
+
messages: Message[];
|
|
5
|
+
fileVersions: FileVersion[];
|
|
6
|
+
createdAt: string;
|
|
7
|
+
updatedAt: string;
|
|
8
|
+
}
|
|
9
|
+
interface FileVersion {
|
|
10
|
+
files: Record<string, string>;
|
|
11
|
+
}
|
|
12
|
+
export declare class ChatStorage {
|
|
13
|
+
private baseDir;
|
|
14
|
+
private currentChat;
|
|
15
|
+
private currentVersionIndex;
|
|
16
|
+
constructor();
|
|
17
|
+
getCurrentChat(): Chat;
|
|
18
|
+
addMessage(chat: Chat, message: Message): void;
|
|
19
|
+
getCurrentVersion(): FileVersion | null;
|
|
20
|
+
navigateVersion(direction: 'undo' | 'redo'): boolean;
|
|
21
|
+
saveFilesChanged(filesChanged: string[]): string[];
|
|
22
|
+
saveCurrentFileState(files: Record<string, string>): void;
|
|
23
|
+
addNewFileState(files: Record<string, string>): void;
|
|
24
|
+
private createChat;
|
|
25
|
+
private saveChat;
|
|
26
|
+
private generateChatId;
|
|
27
|
+
private getFilePath;
|
|
28
|
+
}
|
|
29
|
+
export {};
|
|
@@ -0,0 +1,125 @@
|
|
|
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.ChatStorage = void 0;
|
|
27
|
+
const path = __importStar(require("path"));
|
|
28
|
+
const project_files_1 = require("./project-files");
|
|
29
|
+
const MANICODE_DIR = '.manicode';
|
|
30
|
+
const CHATS_DIR = 'chats';
|
|
31
|
+
class ChatStorage {
|
|
32
|
+
baseDir;
|
|
33
|
+
currentChat;
|
|
34
|
+
currentVersionIndex;
|
|
35
|
+
constructor() {
|
|
36
|
+
this.baseDir = path.join((0, project_files_1.getProjectRoot)(), MANICODE_DIR, CHATS_DIR);
|
|
37
|
+
this.currentChat = this.createChat();
|
|
38
|
+
this.currentVersionIndex = -1;
|
|
39
|
+
}
|
|
40
|
+
getCurrentChat() {
|
|
41
|
+
return this.currentChat;
|
|
42
|
+
}
|
|
43
|
+
addMessage(chat, message) {
|
|
44
|
+
chat.messages.push(message);
|
|
45
|
+
chat.updatedAt = new Date().toISOString();
|
|
46
|
+
this.saveChat(chat);
|
|
47
|
+
}
|
|
48
|
+
getCurrentVersion() {
|
|
49
|
+
if (this.currentVersionIndex >= 0 &&
|
|
50
|
+
this.currentVersionIndex < this.currentChat.fileVersions.length) {
|
|
51
|
+
return this.currentChat.fileVersions[this.currentVersionIndex];
|
|
52
|
+
}
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
navigateVersion(direction) {
|
|
56
|
+
if (direction === 'undo' && this.currentVersionIndex >= 0) {
|
|
57
|
+
this.currentVersionIndex--;
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
else if (direction === 'redo' &&
|
|
61
|
+
this.currentVersionIndex < this.currentChat.fileVersions.length - 1) {
|
|
62
|
+
this.currentVersionIndex++;
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
saveFilesChanged(filesChanged) {
|
|
68
|
+
let currentVersion = this.getCurrentVersion();
|
|
69
|
+
if (!currentVersion) {
|
|
70
|
+
this.addNewFileState({});
|
|
71
|
+
currentVersion = this.getCurrentVersion();
|
|
72
|
+
}
|
|
73
|
+
const newFilesChanged = filesChanged.filter((f) => !currentVersion.files[f]);
|
|
74
|
+
const updatedFiles = (0, project_files_1.getExistingFiles)(newFilesChanged);
|
|
75
|
+
currentVersion.files = { ...currentVersion.files, ...updatedFiles };
|
|
76
|
+
return Object.keys(currentVersion.files);
|
|
77
|
+
}
|
|
78
|
+
saveCurrentFileState(files) {
|
|
79
|
+
const currentVersion = this.getCurrentVersion();
|
|
80
|
+
if (currentVersion) {
|
|
81
|
+
currentVersion.files = files;
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
this.addNewFileState(files);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
addNewFileState(files) {
|
|
88
|
+
const newVersion = {
|
|
89
|
+
files,
|
|
90
|
+
};
|
|
91
|
+
this.currentChat.fileVersions.push(newVersion);
|
|
92
|
+
this.currentVersionIndex = this.currentChat.fileVersions.length - 1;
|
|
93
|
+
}
|
|
94
|
+
createChat(messages = []) {
|
|
95
|
+
const chat = {
|
|
96
|
+
id: this.generateChatId(),
|
|
97
|
+
messages,
|
|
98
|
+
fileVersions: [],
|
|
99
|
+
createdAt: new Date().toISOString(),
|
|
100
|
+
updatedAt: new Date().toISOString(),
|
|
101
|
+
};
|
|
102
|
+
this.saveChat(chat);
|
|
103
|
+
return chat;
|
|
104
|
+
}
|
|
105
|
+
saveChat(chat) {
|
|
106
|
+
const filePath = this.getFilePath(chat.id);
|
|
107
|
+
// fs.writeFileSync(filePath, JSON.stringify(chat, null, 2))
|
|
108
|
+
}
|
|
109
|
+
generateChatId() {
|
|
110
|
+
const now = new Date();
|
|
111
|
+
const datePart = now.toISOString().split('T')[0]; // YYYY-MM-DD
|
|
112
|
+
const timePart = now
|
|
113
|
+
.toISOString()
|
|
114
|
+
.split('T')[1]
|
|
115
|
+
.replace(/:/g, '-')
|
|
116
|
+
.split('.')[0]; // HH-MM-SS
|
|
117
|
+
const randomPart = Math.random().toString(36).substr(2, 5);
|
|
118
|
+
return `${datePart}_${timePart}_${randomPart}`;
|
|
119
|
+
}
|
|
120
|
+
getFilePath(chatId) {
|
|
121
|
+
return path.join(this.baseDir, `${chatId}.json`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
exports.ChatStorage = ChatStorage;
|
|
125
|
+
//# sourceMappingURL=chat-storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-storage.js","sourceRoot":"","sources":["../src/chat-storage.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { ProjectFileContext } from './common/util/file';
|
|
2
|
+
import { CliOptions } from './types';
|
|
3
|
+
export declare class CLI {
|
|
4
|
+
private client;
|
|
5
|
+
private chatStorage;
|
|
6
|
+
private readyPromise;
|
|
7
|
+
private git;
|
|
8
|
+
private costMode;
|
|
9
|
+
private rl;
|
|
10
|
+
private isReceivingResponse;
|
|
11
|
+
private stopResponse;
|
|
12
|
+
private loadingInterval;
|
|
13
|
+
private lastChanges;
|
|
14
|
+
private lastSigintTime;
|
|
15
|
+
private lastInputTime;
|
|
16
|
+
private consecutiveFastInputs;
|
|
17
|
+
private pastedContent;
|
|
18
|
+
private isPasting;
|
|
19
|
+
constructor(readyPromise: Promise<[void, ProjectFileContext]>, { git, costMode }: CliOptions);
|
|
20
|
+
private onWebSocketError;
|
|
21
|
+
private detectPasting;
|
|
22
|
+
private handleInput;
|
|
23
|
+
private setPrompt;
|
|
24
|
+
printInitialPrompt(initialInput?: string): void;
|
|
25
|
+
private handleUndo;
|
|
26
|
+
private handleRedo;
|
|
27
|
+
private navigateFileVersion;
|
|
28
|
+
private handleStopResponse;
|
|
29
|
+
private handleExit;
|
|
30
|
+
private handleEscKey;
|
|
31
|
+
private applyAndDisplayCurrentFileVersion;
|
|
32
|
+
private startLoadingAnimation;
|
|
33
|
+
private stopLoadingAnimation;
|
|
34
|
+
private autoCommitChanges;
|
|
35
|
+
private handleDiff;
|
|
36
|
+
private handleUserInput;
|
|
37
|
+
private sendUserInputAndAwaitResponse;
|
|
38
|
+
}
|