codebuff 1.0.288 → 1.0.289
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli-handlers/checkpoint.d.ts +1 -1
- package/dist/cli.d.ts +2 -1
- package/dist/cli.js +2 -3
- package/dist/cli.js.map +1 -1
- package/dist/client.d.ts +1 -4
- package/dist/client.js +3 -4
- package/dist/client.js.map +1 -1
- package/dist/common/actions.d.ts +60 -60
- package/dist/common/types/agent-state.d.ts +8 -8
- package/dist/common/types/message.d.ts +6 -6
- package/dist/common/types/usage.d.ts +2 -2
- package/dist/common/util/credentials.d.ts +2 -2
- package/dist/common/websockets/websocket-schema.d.ts +112 -112
- package/dist/index.js +8 -2
- package/dist/slash-commands.d.ts +7 -0
- package/dist/slash-commands.js +21 -0
- package/dist/slash-commands.js.map +1 -0
- package/dist/utils/spinner.js +1 -1
- package/package.json +1 -1
- package/dist/common/__tests__/project-file-tree.test.d.ts +0 -1
- package/dist/common/__tests__/project-file-tree.test.js +0 -251
- package/dist/common/__tests__/project-file-tree.test.js.map +0 -1
- package/dist/common/json-config/__tests__/__snapshots__/stringify-schema.test.js.snap +0 -119
- package/dist/common/util/process-stream.d.ts +0 -7
- package/dist/common/util/process-stream.js +0 -162
- package/dist/common/util/process-stream.js.map +0 -1
- package/dist/readline.d.ts +0 -22
- package/dist/readline.js +0 -180
- package/dist/readline.js.map +0 -1
- package/dist/utils/__tests__/__snapshots__/background-process-manager.test.js.snap +0 -137
- package/dist/utils/__tests__/file-paths.test.d.ts +0 -1
- package/dist/utils/__tests__/file-paths.test.js +0 -37
- package/dist/utils/__tests__/file-paths.test.js.map +0 -1
- package/dist/utils/__tests__/path.test.d.ts +0 -1
- package/dist/utils/__tests__/path.test.js +0 -37
- package/dist/utils/__tests__/path.test.js.map +0 -1
- package/dist/utils/file-paths.d.ts +0 -9
- package/dist/utils/file-paths.js +0 -24
- package/dist/utils/file-paths.js.map +0 -1
- package/dist/utils/path.d.ts +0 -9
- package/dist/utils/path.js +0 -27
- package/dist/utils/path.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
process.env.NEXT_PUBLIC_CB_ENVIRONMENT = 'production';
|
|
3
3
|
process.env.NEXT_PUBLIC_BACKEND_URL = 'manicode-backend.onrender.com';
|
|
4
|
-
process.env.NEXT_PUBLIC_APP_URL = 'https://
|
|
4
|
+
process.env.NEXT_PUBLIC_APP_URL = 'https://codebuff.com';
|
|
5
5
|
process.env.NEXT_PUBLIC_SUPPORT_EMAIL = 'support@codebuff.com';
|
|
6
6
|
process.env.NEXT_PUBLIC_POSTHOG_API_KEY = 'phc_tug7g8yc10qNestK14QV8WyKwjfEl6vwzIbJkBdqeHS';
|
|
7
7
|
process.env.NEXT_PUBLIC_POSTHOG_HOST_URL = 'https://us.i.posthog.com';
|
|
8
8
|
process.env.NEXT_PUBLIC_CB_ENVIRONMENT = 'production';
|
|
9
9
|
process.env.NEXT_PUBLIC_BACKEND_URL = 'manicode-backend.onrender.com';
|
|
10
|
-
process.env.NEXT_PUBLIC_APP_URL = 'https://
|
|
10
|
+
process.env.NEXT_PUBLIC_APP_URL = 'https://codebuff.com';
|
|
11
|
+
process.env.NEXT_PUBLIC_SUPPORT_EMAIL = 'support@codebuff.com';
|
|
12
|
+
process.env.NEXT_PUBLIC_POSTHOG_API_KEY = 'phc_tug7g8yc10qNestK14QV8WyKwjfEl6vwzIbJkBdqeHS';
|
|
13
|
+
process.env.NEXT_PUBLIC_POSTHOG_HOST_URL = 'https://us.i.posthog.com';
|
|
14
|
+
process.env.NEXT_PUBLIC_CB_ENVIRONMENT = 'production';
|
|
15
|
+
process.env.NEXT_PUBLIC_BACKEND_URL = 'manicode-backend.onrender.com';
|
|
16
|
+
process.env.NEXT_PUBLIC_APP_URL = 'https://codebuff.com';
|
|
11
17
|
process.env.NEXT_PUBLIC_SUPPORT_EMAIL = 'support@codebuff.com';
|
|
12
18
|
process.env.NEXT_PUBLIC_POSTHOG_API_KEY = 'phc_tug7g8yc10qNestK14QV8WyKwjfEl6vwzIbJkBdqeHS';
|
|
13
19
|
process.env.NEXT_PUBLIC_POSTHOG_HOST_URL = 'https://us.i.posthog.com';
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.slashCommands = void 0;
|
|
4
|
+
exports.slashCommands = [
|
|
5
|
+
{ command: '/help', fullCommand: 'help', description: 'Show help menu', aliases: ['/h'] },
|
|
6
|
+
{ command: '/login', fullCommand: 'login', description: 'Authenticate your session' },
|
|
7
|
+
{ command: '/logout', fullCommand: 'logout', description: 'Sign out of your session' },
|
|
8
|
+
{ command: '/init', fullCommand: 'init', description: 'Configure project for better results' },
|
|
9
|
+
{ command: '/diff', fullCommand: 'diff', description: 'Show last assistant change diff', aliases: ['/d'] },
|
|
10
|
+
{ command: '/undo', fullCommand: 'undo', description: 'Revert to previous checkpoint', aliases: ['/u'] },
|
|
11
|
+
{ command: '/redo', fullCommand: 'redo', description: 'Re-apply previously undone checkpoint', aliases: ['/r'] },
|
|
12
|
+
{ command: '/checkpoint save', fullCommand: 'checkpoint save', description: 'Save current state as a new checkpoint' },
|
|
13
|
+
{ command: '/checkpoint list', fullCommand: 'checkpoint list', description: 'List all saved checkpoints' },
|
|
14
|
+
{ command: '/checkpoint clear', fullCommand: 'checkpoint clear', description: 'Clear all checkpoints' },
|
|
15
|
+
// For commands like "checkpoint <id>", direct slash command is tricky.
|
|
16
|
+
// User would type "/checkpoint restore" then space and the id.
|
|
17
|
+
{ command: '/checkpoint restore', fullCommand: 'checkpoint restore', description: 'Restore to checkpoint <id> (type ID after)' },
|
|
18
|
+
{ command: '/usage', fullCommand: 'usage', description: 'View remaining/bonus AI credits', aliases: ['/credits'] },
|
|
19
|
+
{ command: '/exit', fullCommand: 'exit', description: 'Quit Codebuff', aliases: ['/quit', '/q'] },
|
|
20
|
+
];
|
|
21
|
+
//# sourceMappingURL=slash-commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slash-commands.js","sourceRoot":"","sources":["../src/slash-commands.ts"],"names":[],"mappings":";;;AAOa,QAAA,aAAa,GAAmB;IAC3C,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE;IACzF,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,2BAA2B,EAAE;IACrF,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,0BAA0B,EAAE;IACtF,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,sCAAsC,EAAE;IAC9F,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,iCAAiC,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE;IAC1G,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,+BAA+B,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE;IACxG,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,uCAAuC,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE;IAChH,EAAE,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,iBAAiB,EAAE,WAAW,EAAE,wCAAwC,EAAE;IACtH,EAAE,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,iBAAiB,EAAE,WAAW,EAAE,4BAA4B,EAAE;IAC1G,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,kBAAkB,EAAE,WAAW,EAAE,uBAAuB,EAAE;IACvG,uEAAuE;IACvE,+DAA+D;IAC/D,EAAE,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,oBAAoB,EAAE,WAAW,EAAE,4CAA4C,EAAE;IAChI,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,iCAAiC,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE;IAClH,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;CAClG,CAAC"}
|
package/dist/utils/spinner.js
CHANGED
|
@@ -24,7 +24,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
26
|
exports.Spinner = void 0;
|
|
27
|
-
const readline = __importStar(require("
|
|
27
|
+
const readline = __importStar(require("readline"));
|
|
28
28
|
const picocolors_1 = require("picocolors");
|
|
29
29
|
const display_1 = require("../display");
|
|
30
30
|
const chars = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,251 +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
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
-
};
|
|
28
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
// @ts-ignore
|
|
30
|
-
const bun_test_1 = require("bun:test");
|
|
31
|
-
const path_1 = __importDefault(require("path"));
|
|
32
|
-
const memfs_1 = require("memfs");
|
|
33
|
-
// Mock fs to use memfs's vol directly
|
|
34
|
-
bun_test_1.mock.module('fs', () => ({
|
|
35
|
-
existsSync: (path) => memfs_1.vol.existsSync(path),
|
|
36
|
-
readFileSync: (path, options) => memfs_1.vol.readFileSync(path, options),
|
|
37
|
-
}));
|
|
38
|
-
// Import fs after mocking to get the mocked version
|
|
39
|
-
const fs_1 = __importDefault(require("fs"));
|
|
40
|
-
const projectFileTreeModule = __importStar(require("../project-file-tree"));
|
|
41
|
-
const project_file_tree_1 = require("../project-file-tree");
|
|
42
|
-
// Basic memfs check
|
|
43
|
-
(0, bun_test_1.it)('memfs basic check', () => {
|
|
44
|
-
memfs_1.vol.reset();
|
|
45
|
-
memfs_1.vol.fromJSON({ '/testfile.txt': 'content' });
|
|
46
|
-
(0, bun_test_1.expect)(fs_1.default.existsSync('/testfile.txt')).toBe(true);
|
|
47
|
-
(0, bun_test_1.expect)(fs_1.default.readFileSync('/testfile.txt', 'utf8')).toBe('content');
|
|
48
|
-
});
|
|
49
|
-
(0, bun_test_1.describe)('parseGitignore', () => {
|
|
50
|
-
const projectRoot = '/project';
|
|
51
|
-
(0, bun_test_1.it)('handles empty .gitignore', () => {
|
|
52
|
-
memfs_1.vol.reset();
|
|
53
|
-
memfs_1.vol.fromJSON({
|
|
54
|
-
'/project/.gitignore': '',
|
|
55
|
-
});
|
|
56
|
-
const ig = (0, project_file_tree_1.parseGitignore)(projectRoot, projectRoot);
|
|
57
|
-
(0, bun_test_1.expect)(ig.ignores('file.txt')).toBe(false);
|
|
58
|
-
});
|
|
59
|
-
(0, bun_test_1.it)('ignores comments and blank lines', () => {
|
|
60
|
-
memfs_1.vol.reset();
|
|
61
|
-
memfs_1.vol.fromJSON({
|
|
62
|
-
'/project/.gitignore': `
|
|
63
|
-
# This is a comment
|
|
64
|
-
|
|
65
|
-
# Another comment
|
|
66
|
-
`,
|
|
67
|
-
});
|
|
68
|
-
const ig = (0, project_file_tree_1.parseGitignore)(projectRoot, projectRoot);
|
|
69
|
-
(0, bun_test_1.expect)(ig.ignores('file.txt')).toBe(false);
|
|
70
|
-
});
|
|
71
|
-
(0, bun_test_1.it)('handles simple file patterns', () => {
|
|
72
|
-
memfs_1.vol.reset();
|
|
73
|
-
memfs_1.vol.fromJSON({
|
|
74
|
-
'/project/.gitignore': `
|
|
75
|
-
file.txt
|
|
76
|
-
*.log
|
|
77
|
-
`,
|
|
78
|
-
});
|
|
79
|
-
const ig = (0, project_file_tree_1.parseGitignore)(projectRoot, projectRoot);
|
|
80
|
-
(0, bun_test_1.expect)(ig.ignores('file.txt')).toBe(true);
|
|
81
|
-
(0, bun_test_1.expect)(ig.ignores('debug.log')).toBe(true);
|
|
82
|
-
(0, bun_test_1.expect)(ig.ignores('src/error.log')).toBe(true);
|
|
83
|
-
(0, bun_test_1.expect)(ig.ignores('other.txt')).toBe(false);
|
|
84
|
-
});
|
|
85
|
-
(0, bun_test_1.it)('handles directory patterns', () => {
|
|
86
|
-
memfs_1.vol.reset();
|
|
87
|
-
memfs_1.vol.fromJSON({
|
|
88
|
-
'/project/.gitignore': 'build/',
|
|
89
|
-
});
|
|
90
|
-
const ig = (0, project_file_tree_1.parseGitignore)(projectRoot, projectRoot);
|
|
91
|
-
(0, bun_test_1.expect)(ig.ignores('build/output.js')).toBe(true);
|
|
92
|
-
(0, bun_test_1.expect)(ig.ignores('src/build/output.js')).toBe(true);
|
|
93
|
-
(0, bun_test_1.expect)(ig.ignores('building.js')).toBe(false);
|
|
94
|
-
});
|
|
95
|
-
(0, bun_test_1.it)('handles root-anchored patterns in root .gitignore', () => {
|
|
96
|
-
memfs_1.vol.reset();
|
|
97
|
-
memfs_1.vol.fromJSON({
|
|
98
|
-
'/project/.gitignore': '/config.js',
|
|
99
|
-
});
|
|
100
|
-
const ig = (0, project_file_tree_1.parseGitignore)(projectRoot, projectRoot);
|
|
101
|
-
(0, bun_test_1.expect)(ig.ignores('config.js')).toBe(true);
|
|
102
|
-
(0, bun_test_1.expect)(ig.ignores('src/config.js')).toBe(false);
|
|
103
|
-
});
|
|
104
|
-
(0, bun_test_1.it)('handles root-anchored patterns in subdirectory .gitignore', () => {
|
|
105
|
-
memfs_1.vol.reset();
|
|
106
|
-
memfs_1.vol.fromJSON({
|
|
107
|
-
'/project/src/.gitignore': '/config.js',
|
|
108
|
-
});
|
|
109
|
-
const ig = (0, project_file_tree_1.parseGitignore)(path_1.default.join(projectRoot, 'src'), projectRoot);
|
|
110
|
-
(0, bun_test_1.expect)(ig.ignores('config.js')).toBe(true);
|
|
111
|
-
(0, bun_test_1.expect)(ig.ignores('src/config.js')).toBe(false);
|
|
112
|
-
});
|
|
113
|
-
(0, bun_test_1.it)('handles negation patterns', () => {
|
|
114
|
-
memfs_1.vol.reset();
|
|
115
|
-
memfs_1.vol.fromJSON({
|
|
116
|
-
'/project/.gitignore': `
|
|
117
|
-
*.log
|
|
118
|
-
!important.log
|
|
119
|
-
`,
|
|
120
|
-
});
|
|
121
|
-
const ig = (0, project_file_tree_1.parseGitignore)(projectRoot, projectRoot);
|
|
122
|
-
(0, bun_test_1.expect)(ig.ignores('debug.log')).toBe(true);
|
|
123
|
-
(0, bun_test_1.expect)(ig.ignores('important.log')).toBe(false);
|
|
124
|
-
});
|
|
125
|
-
(0, bun_test_1.it)('handles patterns with leading/trailing whitespace', () => {
|
|
126
|
-
memfs_1.vol.reset();
|
|
127
|
-
memfs_1.vol.fromJSON({
|
|
128
|
-
'/project/.gitignore': `
|
|
129
|
-
\t file.txt \t
|
|
130
|
-
\t *.log \t
|
|
131
|
-
`,
|
|
132
|
-
});
|
|
133
|
-
const ig = (0, project_file_tree_1.parseGitignore)(projectRoot, projectRoot);
|
|
134
|
-
(0, bun_test_1.expect)(ig.ignores('file.txt')).toBe(true);
|
|
135
|
-
(0, bun_test_1.expect)(ig.ignores('debug.log')).toBe(true);
|
|
136
|
-
});
|
|
137
|
-
(0, bun_test_1.it)('handles .codebuffignore and .manicodeignore', () => {
|
|
138
|
-
memfs_1.vol.reset();
|
|
139
|
-
memfs_1.vol.fromJSON({
|
|
140
|
-
'/project/.codebuffignore': 'codebuff.log',
|
|
141
|
-
'/project/.manicodeignore': 'manicode.log',
|
|
142
|
-
});
|
|
143
|
-
const ig = (0, project_file_tree_1.parseGitignore)(projectRoot, projectRoot);
|
|
144
|
-
(0, bun_test_1.expect)(ig.ignores('codebuff.log')).toBe(true);
|
|
145
|
-
(0, bun_test_1.expect)(ig.ignores('manicode.log')).toBe(true);
|
|
146
|
-
(0, bun_test_1.expect)(ig.ignores('other.log')).toBe(false);
|
|
147
|
-
});
|
|
148
|
-
(0, bun_test_1.it)('handles multiple ignore files in the same directory', () => {
|
|
149
|
-
memfs_1.vol.reset();
|
|
150
|
-
memfs_1.vol.fromJSON({
|
|
151
|
-
'/project/.gitignore': 'git.log',
|
|
152
|
-
'/project/.codebuffignore': 'codebuff.log',
|
|
153
|
-
'/project/.manicodeignore': '!git.log', // Should not un-ignore git.log
|
|
154
|
-
});
|
|
155
|
-
const ig = (0, project_file_tree_1.parseGitignore)(projectRoot, projectRoot);
|
|
156
|
-
(0, bun_test_1.expect)(ig.ignores('git.log')).toBe(true);
|
|
157
|
-
(0, bun_test_1.expect)(ig.ignores('codebuff.log')).toBe(true);
|
|
158
|
-
});
|
|
159
|
-
(0, bun_test_1.it)('handles Windows-style backslashes', () => {
|
|
160
|
-
memfs_1.vol.reset();
|
|
161
|
-
memfs_1.vol.fromJSON({
|
|
162
|
-
'/project/.gitignore': 'src\\build\\output.js',
|
|
163
|
-
});
|
|
164
|
-
const ig = (0, project_file_tree_1.parseGitignore)(projectRoot, projectRoot);
|
|
165
|
-
(0, bun_test_1.expect)(ig.ignores('src/build/output.js')).toBe(true);
|
|
166
|
-
});
|
|
167
|
-
(0, bun_test_1.it)('handles patterns relative to subdirectory .gitignore', () => {
|
|
168
|
-
memfs_1.vol.reset();
|
|
169
|
-
memfs_1.vol.fromJSON({
|
|
170
|
-
'/project/src/.gitignore': 'build/',
|
|
171
|
-
});
|
|
172
|
-
const ig = (0, project_file_tree_1.parseGitignore)(path_1.default.join(projectRoot, 'src'), projectRoot);
|
|
173
|
-
(0, bun_test_1.expect)(ig.ignores('src/build/output.js')).toBe(true);
|
|
174
|
-
(0, bun_test_1.expect)(ig.ignores('build/output.js')).toBe(false);
|
|
175
|
-
});
|
|
176
|
-
(0, bun_test_1.it)('calls fs.existsSync and fs.readFileSync for each ignore file', () => {
|
|
177
|
-
memfs_1.vol.reset();
|
|
178
|
-
memfs_1.vol.fromJSON({
|
|
179
|
-
'/project/.gitignore': 'git.log',
|
|
180
|
-
'/project/.codebuffignore': 'codebuff.log',
|
|
181
|
-
});
|
|
182
|
-
const existsSpy = bun_test_1.mock.spyOn(fs_1.default, 'existsSync');
|
|
183
|
-
const readSpy = bun_test_1.mock.spyOn(fs_1.default, 'readFileSync');
|
|
184
|
-
(0, project_file_tree_1.parseGitignore)(projectRoot, projectRoot);
|
|
185
|
-
// Should check for all three possible ignore files
|
|
186
|
-
(0, bun_test_1.expect)(existsSpy).toHaveBeenCalledTimes(3);
|
|
187
|
-
(0, bun_test_1.expect)(existsSpy).toHaveBeenCalledWith(path_1.default.join(projectRoot, '.gitignore'));
|
|
188
|
-
(0, bun_test_1.expect)(existsSpy).toHaveBeenCalledWith(path_1.default.join(projectRoot, '.codebuffignore'));
|
|
189
|
-
(0, bun_test_1.expect)(existsSpy).toHaveBeenCalledWith(path_1.default.join(projectRoot, '.manicodeignore'));
|
|
190
|
-
// Should read the two files that exist
|
|
191
|
-
(0, bun_test_1.expect)(readSpy).toHaveBeenCalledTimes(2);
|
|
192
|
-
(0, bun_test_1.expect)(readSpy).toHaveBeenCalledWith(path_1.default.join(projectRoot, '.gitignore'), 'utf8');
|
|
193
|
-
(0, bun_test_1.expect)(readSpy).toHaveBeenCalledWith(path_1.default.join(projectRoot, '.codebuffignore'), 'utf8');
|
|
194
|
-
existsSpy.mockRestore();
|
|
195
|
-
readSpy.mockRestore();
|
|
196
|
-
});
|
|
197
|
-
});
|
|
198
|
-
(0, bun_test_1.describe)('isFileIgnored', () => {
|
|
199
|
-
const projectRoot = '/project';
|
|
200
|
-
(0, bun_test_1.it)('aggregates ignore rules from parent directories', () => {
|
|
201
|
-
memfs_1.vol.reset();
|
|
202
|
-
memfs_1.vol.fromJSON({
|
|
203
|
-
'/project/.gitignore': '*.log',
|
|
204
|
-
'/project/src/.gitignore': 'build/',
|
|
205
|
-
'/project/src/frontend/.gitignore': '*.min.js',
|
|
206
|
-
});
|
|
207
|
-
const parseGitignoreSpy = bun_test_1.mock.spyOn(projectFileTreeModule, 'parseGitignore');
|
|
208
|
-
// Root .gitignore pattern
|
|
209
|
-
(0, bun_test_1.expect)((0, project_file_tree_1.isFileIgnored)('debug.log', projectRoot)).toBe(true);
|
|
210
|
-
(0, bun_test_1.expect)((0, project_file_tree_1.isFileIgnored)('src/error.log', projectRoot)).toBe(true);
|
|
211
|
-
// src/.gitignore pattern
|
|
212
|
-
(0, bun_test_1.expect)((0, project_file_tree_1.isFileIgnored)('src/build/output.js', projectRoot)).toBe(true);
|
|
213
|
-
(0, bun_test_1.expect)((0, project_file_tree_1.isFileIgnored)('other/build/output.js', projectRoot)).toBe(false);
|
|
214
|
-
// src/frontend/.gitignore pattern
|
|
215
|
-
(0, bun_test_1.expect)((0, project_file_tree_1.isFileIgnored)('src/frontend/app.min.js', projectRoot)).toBe(true);
|
|
216
|
-
(0, bun_test_1.expect)((0, project_file_tree_1.isFileIgnored)('src/frontend/app.js', projectRoot)).toBe(false);
|
|
217
|
-
// Should call parseGitignore for each directory up to root
|
|
218
|
-
(0, bun_test_1.expect)(parseGitignoreSpy).toHaveBeenCalledTimes(3);
|
|
219
|
-
parseGitignoreSpy.mockRestore();
|
|
220
|
-
});
|
|
221
|
-
(0, bun_test_1.it)('handles root-anchored patterns in subdirectories', () => {
|
|
222
|
-
memfs_1.vol.reset();
|
|
223
|
-
memfs_1.vol.fromJSON({
|
|
224
|
-
'/project/src/.gitignore': '/config.js',
|
|
225
|
-
});
|
|
226
|
-
(0, bun_test_1.expect)((0, project_file_tree_1.isFileIgnored)('config.js', projectRoot)).toBe(true);
|
|
227
|
-
(0, bun_test_1.expect)((0, project_file_tree_1.isFileIgnored)('src/config.js', projectRoot)).toBe(false);
|
|
228
|
-
});
|
|
229
|
-
(0, bun_test_1.it)('handles negation patterns across directories', () => {
|
|
230
|
-
memfs_1.vol.reset();
|
|
231
|
-
memfs_1.vol.fromJSON({
|
|
232
|
-
'/project/.gitignore': '*.log',
|
|
233
|
-
'/project/src/.gitignore': '!important.log',
|
|
234
|
-
});
|
|
235
|
-
(0, bun_test_1.expect)((0, project_file_tree_1.isFileIgnored)('debug.log', projectRoot)).toBe(true);
|
|
236
|
-
(0, bun_test_1.expect)((0, project_file_tree_1.isFileIgnored)('src/important.log', projectRoot)).toBe(false);
|
|
237
|
-
});
|
|
238
|
-
(0, bun_test_1.it)('handles multiple ignore files in the same directory', () => {
|
|
239
|
-
memfs_1.vol.reset();
|
|
240
|
-
memfs_1.vol.fromJSON({
|
|
241
|
-
'/project/src/.gitignore': 'git.log',
|
|
242
|
-
'/project/src/.codebuffignore': 'codebuff.log',
|
|
243
|
-
'/project/src/.manicodeignore': 'manicode.log',
|
|
244
|
-
});
|
|
245
|
-
(0, bun_test_1.expect)((0, project_file_tree_1.isFileIgnored)('src/git.log', projectRoot)).toBe(true);
|
|
246
|
-
(0, bun_test_1.expect)((0, project_file_tree_1.isFileIgnored)('src/codebuff.log', projectRoot)).toBe(true);
|
|
247
|
-
(0, bun_test_1.expect)((0, project_file_tree_1.isFileIgnored)('src/manicode.log', projectRoot)).toBe(true);
|
|
248
|
-
(0, bun_test_1.expect)((0, project_file_tree_1.isFileIgnored)('src/other.log', projectRoot)).toBe(false);
|
|
249
|
-
});
|
|
250
|
-
});
|
|
251
|
-
//# sourceMappingURL=project-file-tree.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"project-file-tree.test.js","sourceRoot":"","sources":["../../src/__tests__/project-file-tree.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
// Bun Snapshot v1, https://goo.gl/fbAQLP
|
|
2
|
-
|
|
3
|
-
exports[`stringifySchema should correctly stringify StartupProcessSchema 1`] = `
|
|
4
|
-
"// Defines a single startup process.
|
|
5
|
-
{
|
|
6
|
-
// A user-friendly name for the process. Should be one word and unique.
|
|
7
|
-
"name": string,
|
|
8
|
-
|
|
9
|
-
// The actual shell command to execute.
|
|
10
|
-
"command": string,
|
|
11
|
-
|
|
12
|
-
// (optional): The working directory from which to run the command.
|
|
13
|
-
"cwd": string | undefined,
|
|
14
|
-
|
|
15
|
-
// (optional): Whether this process should be run, default: true
|
|
16
|
-
"enabled": boolean | undefined,
|
|
17
|
-
|
|
18
|
-
// (optional): Path to write the process's stdout. If not specified, stderr is not stored.
|
|
19
|
-
"stdoutFile": string | undefined,
|
|
20
|
-
|
|
21
|
-
// (optional): Path to write the process's stderr. If not specified, stderr will be put into the stdoutFile.
|
|
22
|
-
"stderrFile": string | undefined
|
|
23
|
-
}"
|
|
24
|
-
`;
|
|
25
|
-
|
|
26
|
-
exports[`stringifySchema should correctly stringify CodebuffConfigSchema 1`] = `
|
|
27
|
-
"// Defines the overall Codebuff configuration file (e.g., codebuff.json). This schema defines the top-level structure of the configuration.
|
|
28
|
-
{
|
|
29
|
-
// (optional): Does nothing. Put any thing you want here!
|
|
30
|
-
"description": any | undefined,
|
|
31
|
-
|
|
32
|
-
// (optional): An array of startup processes.
|
|
33
|
-
"startupProcesses": [
|
|
34
|
-
|
|
35
|
-
// Defines a single startup process.
|
|
36
|
-
{
|
|
37
|
-
// A user-friendly name for the process. Should be one word and unique.
|
|
38
|
-
"name": string,
|
|
39
|
-
|
|
40
|
-
// The actual shell command to execute.
|
|
41
|
-
"command": string,
|
|
42
|
-
|
|
43
|
-
// (optional): The working directory from which to run the command.
|
|
44
|
-
"cwd": string | undefined,
|
|
45
|
-
|
|
46
|
-
// (optional): Whether this process should be run, default: true
|
|
47
|
-
"enabled": boolean | undefined,
|
|
48
|
-
|
|
49
|
-
// (optional): Path to write the process's stdout. If not specified, stderr is not stored.
|
|
50
|
-
"stdoutFile": string | undefined,
|
|
51
|
-
|
|
52
|
-
// (optional): Path to write the process's stderr. If not specified, stderr will be put into the stdoutFile.
|
|
53
|
-
"stderrFile": string | undefined
|
|
54
|
-
}
|
|
55
|
-
] | undefined
|
|
56
|
-
}"
|
|
57
|
-
`;
|
|
58
|
-
|
|
59
|
-
exports[`stringifySchema should handle a more complex schema 1`] = `
|
|
60
|
-
"// A complex test schema
|
|
61
|
-
{
|
|
62
|
-
// Unique identifier
|
|
63
|
-
"id": string,
|
|
64
|
-
|
|
65
|
-
// A positive integer count
|
|
66
|
-
"count": number,
|
|
67
|
-
|
|
68
|
-
// Activity status
|
|
69
|
-
"isActive": boolean,
|
|
70
|
-
|
|
71
|
-
// (optional): Optional list of tags
|
|
72
|
-
"tags": [
|
|
73
|
-
|
|
74
|
-
string
|
|
75
|
-
] | undefined,
|
|
76
|
-
|
|
77
|
-
// A nested object structure
|
|
78
|
-
"nested": {
|
|
79
|
-
"value": string,
|
|
80
|
-
|
|
81
|
-
// Nested configuration
|
|
82
|
-
"config": {
|
|
83
|
-
// (optional): Number of retries, default: 3
|
|
84
|
-
"retries": number
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}"
|
|
88
|
-
`;
|
|
89
|
-
|
|
90
|
-
exports[`stringifySchema should handle an empty object schema 1`] = `
|
|
91
|
-
"// An empty schema
|
|
92
|
-
{
|
|
93
|
-
}"
|
|
94
|
-
`;
|
|
95
|
-
|
|
96
|
-
exports[`stringifySchema should handle schema with only optional fields 1`] = `
|
|
97
|
-
"// Schema with only optional fields
|
|
98
|
-
{
|
|
99
|
-
// (optional): Optional field 1
|
|
100
|
-
"field1": string | undefined,
|
|
101
|
-
|
|
102
|
-
// (optional): Optional field 2
|
|
103
|
-
"field2": number | undefined
|
|
104
|
-
}"
|
|
105
|
-
`;
|
|
106
|
-
|
|
107
|
-
exports[`stringifySchema should handle schema with default values 1`] = `
|
|
108
|
-
"// Schema demonstrating default values
|
|
109
|
-
{
|
|
110
|
-
// (optional): Name with default, default: "anonymous"
|
|
111
|
-
"name": string,
|
|
112
|
-
|
|
113
|
-
// (optional): Level with default, default: 1
|
|
114
|
-
"level": number,
|
|
115
|
-
|
|
116
|
-
// (optional): Enabled with default, default: false
|
|
117
|
-
"enabled": boolean
|
|
118
|
-
}"
|
|
119
|
-
`;
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export declare function processStreamWithTags<T extends string>(stream: AsyncGenerator<T>, tags: {
|
|
2
|
-
[tagName: string]: {
|
|
3
|
-
attributeNames: string[];
|
|
4
|
-
onTagStart: (attributes: Record<string, string>) => void;
|
|
5
|
-
onTagEnd: (content: string, attributes: Record<string, string>) => boolean;
|
|
6
|
-
};
|
|
7
|
-
}): AsyncGenerator<string, void, unknown>;
|
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.processStreamWithTags = processStreamWithTags;
|
|
4
|
-
const saxy_1 = require("./saxy");
|
|
5
|
-
async function* processStreamWithTags(stream, tags) {
|
|
6
|
-
const saxyParser = new saxy_1.Saxy();
|
|
7
|
-
let currentTagName = null;
|
|
8
|
-
let currentTagAttributes = {};
|
|
9
|
-
let currentTagContentBuffer = '';
|
|
10
|
-
let shouldStopProcessing = false;
|
|
11
|
-
const outputQueue = [];
|
|
12
|
-
const enqueueOutput = (str) => {
|
|
13
|
-
if (str) {
|
|
14
|
-
// Only enqueue non-empty strings
|
|
15
|
-
outputQueue.push(str);
|
|
16
|
-
}
|
|
17
|
-
};
|
|
18
|
-
saxyParser.on('tagopen', (node) => {
|
|
19
|
-
if (shouldStopProcessing)
|
|
20
|
-
return;
|
|
21
|
-
if (currentTagName === null) {
|
|
22
|
-
// Not currently inside a tracked tag
|
|
23
|
-
if (tags[node.name]) {
|
|
24
|
-
// This is a tag we want to track
|
|
25
|
-
currentTagName = node.name;
|
|
26
|
-
try {
|
|
27
|
-
currentTagAttributes = saxy_1.Saxy.parseAttrs(node.attrs);
|
|
28
|
-
}
|
|
29
|
-
catch (e) {
|
|
30
|
-
// If attributes are malformed, default to empty or handle as error
|
|
31
|
-
// console.error(`Error parsing attributes for tag ${node.name}: "${node.attrs}"`, e);
|
|
32
|
-
currentTagAttributes = {}; // Default to empty attributes on parsing error
|
|
33
|
-
}
|
|
34
|
-
tags[currentTagName].onTagStart(currentTagAttributes);
|
|
35
|
-
currentTagContentBuffer = '';
|
|
36
|
-
if (node.isSelfClosing) {
|
|
37
|
-
const stop = tags[currentTagName].onTagEnd(currentTagContentBuffer, currentTagAttributes);
|
|
38
|
-
currentTagName = null;
|
|
39
|
-
currentTagAttributes = {};
|
|
40
|
-
if (stop) {
|
|
41
|
-
shouldStopProcessing = true;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
// A non-tracked tag, pass it through
|
|
47
|
-
enqueueOutput(`<${node.name}${node.attrs ? ' ' + node.attrs : ''}${node.isSelfClosing ? ' /' : ''}>`);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
else {
|
|
51
|
-
// Inside a tracked tag, so this is nested content
|
|
52
|
-
currentTagContentBuffer += `<${node.name}${node.attrs ? ' ' + node.attrs : ''}${node.isSelfClosing ? ' /' : ''}>`;
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
saxyParser.on('text', (node) => {
|
|
56
|
-
if (shouldStopProcessing)
|
|
57
|
-
return;
|
|
58
|
-
if (currentTagName !== null) {
|
|
59
|
-
currentTagContentBuffer += node.contents;
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
enqueueOutput(node.contents);
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
saxyParser.on('tagclose', (node) => {
|
|
66
|
-
if (shouldStopProcessing)
|
|
67
|
-
return;
|
|
68
|
-
if (currentTagName === node.name) {
|
|
69
|
-
const stop = tags[currentTagName].onTagEnd(currentTagContentBuffer, currentTagAttributes);
|
|
70
|
-
currentTagName = null;
|
|
71
|
-
currentTagAttributes = {};
|
|
72
|
-
currentTagContentBuffer = '';
|
|
73
|
-
if (stop) {
|
|
74
|
-
shouldStopProcessing = true;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
else if (currentTagName !== null) {
|
|
78
|
-
// Closing a nested tag inside a tracked tag
|
|
79
|
-
currentTagContentBuffer += `</${node.name}>`;
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
// Closing a non-tracked tag, pass it through
|
|
83
|
-
enqueueOutput(`</${node.name}>`);
|
|
84
|
-
}
|
|
85
|
-
});
|
|
86
|
-
saxyParser.on('cdata', (node) => {
|
|
87
|
-
if (shouldStopProcessing)
|
|
88
|
-
return;
|
|
89
|
-
const cdataStr = `<![CDATA[${node.contents}]]>`;
|
|
90
|
-
if (currentTagName !== null) {
|
|
91
|
-
currentTagContentBuffer += cdataStr;
|
|
92
|
-
}
|
|
93
|
-
else {
|
|
94
|
-
enqueueOutput(cdataStr);
|
|
95
|
-
}
|
|
96
|
-
});
|
|
97
|
-
saxyParser.on('comment', (node) => {
|
|
98
|
-
if (shouldStopProcessing)
|
|
99
|
-
return;
|
|
100
|
-
const commentStr = `<!--${node.contents}-->`;
|
|
101
|
-
if (currentTagName !== null) {
|
|
102
|
-
currentTagContentBuffer += commentStr;
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
enqueueOutput(commentStr);
|
|
106
|
-
}
|
|
107
|
-
});
|
|
108
|
-
saxyParser.on('processinginstruction', (node) => {
|
|
109
|
-
if (shouldStopProcessing)
|
|
110
|
-
return;
|
|
111
|
-
const piStr = `<?${node.contents}?>`;
|
|
112
|
-
if (currentTagName !== null) {
|
|
113
|
-
currentTagContentBuffer += piStr;
|
|
114
|
-
}
|
|
115
|
-
else {
|
|
116
|
-
enqueueOutput(piStr);
|
|
117
|
-
}
|
|
118
|
-
});
|
|
119
|
-
saxyParser.on('error', (err) => {
|
|
120
|
-
// Saxy might emit 'error' for issues not causing write/end to throw.
|
|
121
|
-
// This flag helps stop processing in such cases.
|
|
122
|
-
// console.error("Saxy parser emitted an error:", err);
|
|
123
|
-
shouldStopProcessing = true;
|
|
124
|
-
// The error might need to be explicitly thrown here if it's critical
|
|
125
|
-
// and not otherwise surfaced to the generator's caller.
|
|
126
|
-
// For now, this ensures processing stops.
|
|
127
|
-
});
|
|
128
|
-
try {
|
|
129
|
-
for await (const chunk of stream) {
|
|
130
|
-
if (shouldStopProcessing)
|
|
131
|
-
break;
|
|
132
|
-
saxyParser.write(chunk); // Saxy events fill outputQueue
|
|
133
|
-
while (outputQueue.length > 0) {
|
|
134
|
-
// If stopping and not inside a tracked tag, clear queue to prevent further passthrough.
|
|
135
|
-
if (shouldStopProcessing && currentTagName === null) {
|
|
136
|
-
outputQueue.length = 0;
|
|
137
|
-
break;
|
|
138
|
-
}
|
|
139
|
-
yield outputQueue.shift();
|
|
140
|
-
}
|
|
141
|
-
// Re-check stop condition after yielding, as an event during write might have set it.
|
|
142
|
-
if (shouldStopProcessing)
|
|
143
|
-
break;
|
|
144
|
-
}
|
|
145
|
-
if (!shouldStopProcessing) {
|
|
146
|
-
saxyParser.end(); // Finalize parsing
|
|
147
|
-
while (outputQueue.length > 0) {
|
|
148
|
-
if (shouldStopProcessing && currentTagName === null) {
|
|
149
|
-
outputQueue.length = 0;
|
|
150
|
-
break;
|
|
151
|
-
}
|
|
152
|
-
yield outputQueue.shift();
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
catch (error) {
|
|
157
|
-
// Catches errors from saxyParser.write() or saxyParser.end()
|
|
158
|
-
// console.error("Error during Saxy stream processing in generator:", error);
|
|
159
|
-
throw error; // Propagate error to the caller
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
//# sourceMappingURL=process-stream.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"process-stream.js","sourceRoot":"","sources":["../../src/util/process-stream.ts"],"names":[],"mappings":"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"}
|