codebuff 1.0.310 → 1.0.311

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 (55) hide show
  1. package/dist/background-process-manager.d.ts +1 -1
  2. package/dist/background-process-manager.js +3 -3
  3. package/dist/browser-runner.d.ts +1 -1
  4. package/dist/browser-runner.js +4 -4
  5. package/dist/chat-storage.d.ts +1 -1
  6. package/dist/chat-storage.js +1 -1
  7. package/dist/checkpoints/checkpoint-manager.d.ts +1 -1
  8. package/dist/checkpoints/checkpoint-manager.js +1 -1
  9. package/dist/cli-handlers/api-key.d.ts +1 -1
  10. package/dist/cli-handlers/api-key.js +1 -1
  11. package/dist/cli-handlers/diff.d.ts +1 -1
  12. package/dist/cli-handlers/inititalization-flow.js +2 -1
  13. package/dist/cli-handlers/inititalization-flow.js.map +1 -1
  14. package/dist/cli.d.ts +1 -1
  15. package/dist/cli.js +2 -2
  16. package/dist/client.d.ts +6 -6
  17. package/dist/client.js +9 -9
  18. package/dist/common/json-config/__tests__/constants.test.d.ts +1 -0
  19. package/dist/common/json-config/__tests__/constants.test.js +273 -0
  20. package/dist/common/json-config/__tests__/constants.test.js.map +1 -0
  21. package/dist/credentials.d.ts +1 -1
  22. package/dist/credentials.js +2 -2
  23. package/dist/dev-process-manager.d.ts +1 -1
  24. package/dist/dev-process-manager.js +2 -2
  25. package/dist/index.js +0 -0
  26. package/dist/json-config/hooks.d.ts +1 -1
  27. package/dist/json-config/hooks.js +1 -1
  28. package/dist/json-config/parser.d.ts +1 -1
  29. package/dist/json-config/parser.js +1 -1
  30. package/dist/menu.d.ts +1 -1
  31. package/dist/menu.js +1 -1
  32. package/dist/project-files.d.ts +2 -2
  33. package/dist/project-files.js +6 -6
  34. package/dist/tool-handlers.d.ts +2 -2
  35. package/dist/tool-handlers.js +4 -4
  36. package/dist/types.d.ts +1 -1
  37. package/dist/update-codebuff.js +1 -1
  38. package/dist/utils/__tests__/tool-renderers.test.js +2 -2
  39. package/dist/utils/__tests__/xml-stream-parser.test.js +1 -1
  40. package/dist/utils/analytics.d.ts +1 -1
  41. package/dist/utils/logger.js +1 -1
  42. package/dist/utils/terminal.js +3 -3
  43. package/dist/utils/tool-renderers.d.ts +1 -1
  44. package/dist/utils/tool-renderers.js +2 -2
  45. package/dist/utils/xml-stream-parser.d.ts +1 -1
  46. package/dist/utils/xml-stream-parser.js +2 -2
  47. package/dist/web-scraper.js +1 -1
  48. package/dist/workers/project-context.js +1 -1
  49. package/package.json +2 -2
  50. package/dist/common/json-config/parser.d.ts +0 -7
  51. package/dist/common/json-config/parser.js +0 -51
  52. package/dist/common/json-config/parser.js.map +0 -1
  53. package/dist/json-config-parser.d.ts +0 -7
  54. package/dist/json-config-parser.js +0 -53
  55. package/dist/json-config-parser.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import { ChildProcessByStdio, ChildProcessWithoutNullStreams, SpawnOptionsWithoutStdio } from 'child_process';
2
- import { ToolResult } from './common/types/agent-state';
2
+ import { ToolResult } from 'common/types/agent-state';
3
3
  /**
4
4
  * Interface describing the information stored for each background process.
5
5
  */
@@ -15,9 +15,9 @@ const child_process_1 = require("child_process");
15
15
  const fs_1 = require("fs");
16
16
  const path_1 = __importDefault(require("path"));
17
17
  const process_1 = __importDefault(require("process"));
18
- const analytics_events_1 = require("./common/constants/analytics-events");
19
- const array_1 = require("./common/util/array");
20
- const string_1 = require("./common/util/string");
18
+ const analytics_events_1 = require("common/constants/analytics-events");
19
+ const array_1 = require("common/util/array");
20
+ const string_1 = require("common/util/string");
21
21
  const picocolors_1 = require("picocolors");
22
22
  const zod_1 = require("zod");
23
23
  const credentials_1 = require("./credentials");
@@ -1,4 +1,4 @@
1
- import { BrowserAction, BrowserResponse } from './common/browser-actions';
1
+ import { BrowserAction, BrowserResponse } from 'common/browser-actions';
2
2
  export declare class BrowserRunner {
3
3
  getLogs(): BrowserResponse['logs'];
4
4
  getNetworkEvents(): BrowserResponse['networkEvents'];
@@ -27,10 +27,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  exports.activeBrowserRunner = exports.handleBrowserInstruction = exports.BrowserRunner = void 0;
30
- const browser_actions_1 = require("./common/browser-actions");
31
- const file_1 = require("./common/util/file");
32
- const promise_1 = require("./common/util/promise");
33
- const string_1 = require("./common/util/string");
30
+ const browser_actions_1 = require("common/browser-actions");
31
+ const file_1 = require("common/util/file");
32
+ const promise_1 = require("common/util/promise");
33
+ const string_1 = require("common/util/string");
34
34
  const fs = __importStar(require("fs"));
35
35
  const path = __importStar(require("path"));
36
36
  const puppeteer_core_1 = __importDefault(require("puppeteer-core"));
@@ -1,2 +1,2 @@
1
- import { type CodebuffMessage } from './common/types/message';
1
+ import { type CodebuffMessage } from 'common/types/message';
2
2
  export declare function setMessages(messages: CodebuffMessage[]): void;
@@ -24,7 +24,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.setMessages = setMessages;
27
- const string_1 = require("./common/util/string");
27
+ const string_1 = require("common/util/string");
28
28
  const fs = __importStar(require("fs"));
29
29
  const path = __importStar(require("path"));
30
30
  const project_files_1 = require("./project-files");
@@ -1,4 +1,4 @@
1
- import { AgentState, ToolResult } from '../common/types/agent-state';
1
+ import { AgentState, ToolResult } from 'common/types/agent-state';
2
2
  export declare class CheckpointsDisabledError extends Error {
3
3
  constructor(message?: string, options?: ErrorOptions);
4
4
  }
@@ -8,7 +8,7 @@ const assert_1 = __importDefault(require("assert"));
8
8
  const os_1 = __importDefault(require("os"));
9
9
  const path_1 = require("path");
10
10
  const worker_threads_1 = require("worker_threads");
11
- const project_file_tree_1 = require("../common/project-file-tree");
11
+ const project_file_tree_1 = require("common/project-file-tree");
12
12
  const picocolors_1 = require("picocolors");
13
13
  const project_files_1 = require("../project-files");
14
14
  const file_manager_1 = require("./file-manager");
@@ -1,4 +1,4 @@
1
- import { ApiKeyType } from '../common/api-keys/constants';
1
+ import { ApiKeyType } from 'common/api-keys/constants';
2
2
  import { Client } from '../client';
3
3
  export type ApiKeyDetectionResult = {
4
4
  status: 'found';
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.detectApiKey = detectApiKey;
4
4
  exports.handleApiKeyInput = handleApiKeyInput;
5
- const constants_1 = require("../common/api-keys/constants");
5
+ const constants_1 = require("common/api-keys/constants");
6
6
  const picocolors_1 = require("picocolors");
7
7
  /**
8
8
  * Detects if the user input contains a known API key pattern.
@@ -1,2 +1,2 @@
1
- import { FileChange } from '../common/actions';
1
+ import { FileChange } from 'common/actions';
2
2
  export declare function handleDiff(lastChanges: FileChange[]): void;
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.handleInitializationFlowLocally = handleInitializationFlowLocally;
7
7
  const fs_1 = require("fs");
8
8
  const path_1 = __importDefault(require("path"));
9
- const constants_1 = require("../common/json-config/constants");
9
+ const constants_1 = require("common/json-config/constants");
10
10
  const project_files_1 = require("../project-files");
11
11
  function handleInitializationFlowLocally() {
12
12
  const projectRoot = (0, project_files_1.getProjectRoot)();
@@ -17,6 +17,7 @@ function handleInitializationFlowLocally() {
17
17
  const configContent = {
18
18
  description: 'Template configuration for this project. See https://www.codebuff.com/config for all options.',
19
19
  startupProcesses: [],
20
+ fileChangeHooks: [],
20
21
  };
21
22
  (0, fs_1.writeFileSync)(configPath, JSON.stringify(configContent, null, 2));
22
23
  }
@@ -1 +1 @@
1
- {"version":3,"file":"inititalization-flow.js","sourceRoot":"","sources":["../../src/cli-handlers/inititalization-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"}
1
+ {"version":3,"file":"inititalization-flow.js","sourceRoot":"","sources":["../../src/cli-handlers/inititalization-flow.ts"],"names":[],"mappings":";;;;;AAOA,0EAgBC;AAvBD,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;YACpB,eAAe,EAAE,EAAE;SACpB,CAAA;QACD,IAAA,kBAAa,EAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IACnE,CAAC;AACH,CAAC"}
package/dist/cli.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as readline from 'readline';
2
- import { ProjectFileContext } from './common/util/file';
2
+ import { ProjectFileContext } from 'common/util/file';
3
3
  import { CliOptions } from './types';
4
4
  export declare class CLI {
5
5
  private static instance;
package/dist/cli.js CHANGED
@@ -29,8 +29,8 @@ const os = __importStar(require("os"));
29
29
  const os_1 = require("os");
30
30
  const path_1 = __importStar(require("path"));
31
31
  const readline = __importStar(require("readline"));
32
- const analytics_events_1 = require("./common/constants/analytics-events");
33
- const string_1 = require("./common/util/string");
32
+ const analytics_events_1 = require("common/constants/analytics-events");
33
+ const string_1 = require("common/util/string");
34
34
  const picocolors_1 = require("picocolors");
35
35
  const background_process_manager_1 = require("./background-process-manager");
36
36
  const chat_storage_1 = require("./chat-storage");
package/dist/client.d.ts CHANGED
@@ -1,9 +1,9 @@
1
- import { FileChanges, ServerAction, UsageResponse } from './common/actions';
2
- import { ApiKeyType } from './common/api-keys/constants';
3
- import { CostMode } from './common/constants';
4
- import { AgentState, ToolResult } from './common/types/agent-state';
5
- import { User } from './common/util/credentials';
6
- import { ProjectFileContext } from './common/util/file';
1
+ import { FileChanges, ServerAction, UsageResponse } from 'common/actions';
2
+ import { ApiKeyType } from 'common/api-keys/constants';
3
+ import { CostMode } from 'common/constants';
4
+ import { AgentState, ToolResult } from 'common/types/agent-state';
5
+ import { User } from 'common/util/credentials';
6
+ import { ProjectFileContext } from 'common/util/file';
7
7
  import { GitCommand, MakeNullable } from './types';
8
8
  type UsageData = Omit<MakeNullable<UsageResponse, 'remainingBalance'>, 'type'>;
9
9
  interface ClientOptions {
package/dist/client.js CHANGED
@@ -8,15 +8,15 @@ const child_process_1 = require("child_process");
8
8
  const fs_1 = require("fs");
9
9
  const os_1 = __importDefault(require("os"));
10
10
  const path_1 = __importDefault(require("path"));
11
- const actions_1 = require("./common/actions");
12
- const constants_1 = require("./common/api-keys/constants");
13
- const constants_2 = require("./common/constants");
14
- const analytics_events_1 = require("./common/constants/analytics-events");
15
- const constants_3 = require("./common/json-config/constants");
16
- const agent_state_1 = require("./common/types/agent-state");
17
- const array_1 = require("./common/util/array");
18
- const string_1 = require("./common/util/string");
19
- const websocket_client_1 = require("./common/websockets/websocket-client");
11
+ const actions_1 = require("common/actions");
12
+ const constants_1 = require("common/api-keys/constants");
13
+ const constants_2 = require("common/constants");
14
+ const analytics_events_1 = require("common/constants/analytics-events");
15
+ const constants_3 = require("common/json-config/constants");
16
+ const agent_state_1 = require("common/types/agent-state");
17
+ const array_1 = require("common/util/array");
18
+ const string_1 = require("common/util/string");
19
+ const websocket_client_1 = require("common/websockets/websocket-client");
20
20
  const picocolors_1 = require("picocolors");
21
21
  const ts_pattern_1 = require("ts-pattern");
22
22
  const zod_1 = require("zod");
@@ -0,0 +1,273 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ // @ts-ignore
4
+ const bun_test_1 = require("bun:test");
5
+ const constants_1 = require("../constants");
6
+ (0, bun_test_1.describe)('constants', () => {
7
+ (0, bun_test_1.describe)('codebuffConfigFile and codebuffConfigFileBackup', () => {
8
+ (0, bun_test_1.it)('should have correct file names', () => {
9
+ (0, bun_test_1.expect)(constants_1.codebuffConfigFile).toBe('codebuff.json');
10
+ (0, bun_test_1.expect)(constants_1.codebuffConfigFileBackup).toBe('codebuff.jsonc');
11
+ });
12
+ });
13
+ (0, bun_test_1.describe)('StartupProcessSchema', () => {
14
+ (0, bun_test_1.it)('should validate a minimal startup process', () => {
15
+ const validProcess = {
16
+ name: 'test-process',
17
+ command: 'echo hello',
18
+ };
19
+ const result = constants_1.StartupProcessSchema.safeParse(validProcess);
20
+ (0, bun_test_1.expect)(result.success).toBe(true);
21
+ if (result.success) {
22
+ (0, bun_test_1.expect)(result.data.enabled).toBe(true); // default value
23
+ }
24
+ });
25
+ (0, bun_test_1.it)('should validate a complete startup process', () => {
26
+ const validProcess = {
27
+ name: 'web-server',
28
+ command: 'npm start',
29
+ cwd: './web',
30
+ enabled: false,
31
+ stdoutFile: 'logs/web.log',
32
+ stderrFile: 'logs/web-error.log',
33
+ };
34
+ const result = constants_1.StartupProcessSchema.safeParse(validProcess);
35
+ (0, bun_test_1.expect)(result.success).toBe(true);
36
+ if (result.success) {
37
+ (0, bun_test_1.expect)(result.data).toEqual(validProcess);
38
+ }
39
+ });
40
+ (0, bun_test_1.it)('should reject startup process with empty name', () => {
41
+ const invalidProcess = {
42
+ name: '',
43
+ command: 'echo hello',
44
+ };
45
+ const result = constants_1.StartupProcessSchema.safeParse(invalidProcess);
46
+ (0, bun_test_1.expect)(result.success).toBe(false);
47
+ });
48
+ (0, bun_test_1.it)('should reject startup process with empty command', () => {
49
+ const invalidProcess = {
50
+ name: 'test',
51
+ command: '',
52
+ };
53
+ const result = constants_1.StartupProcessSchema.safeParse(invalidProcess);
54
+ (0, bun_test_1.expect)(result.success).toBe(false);
55
+ });
56
+ (0, bun_test_1.it)('should apply default enabled value', () => {
57
+ const process = {
58
+ name: 'test',
59
+ command: 'echo hello',
60
+ };
61
+ const result = constants_1.StartupProcessSchema.safeParse(process);
62
+ (0, bun_test_1.expect)(result.success).toBe(true);
63
+ if (result.success) {
64
+ (0, bun_test_1.expect)(result.data.enabled).toBe(true);
65
+ }
66
+ });
67
+ });
68
+ (0, bun_test_1.describe)('FileChangeHook', () => {
69
+ (0, bun_test_1.it)('should validate a minimal file change hook', () => {
70
+ const validHook = {
71
+ name: 'test-hook',
72
+ command: 'npm test',
73
+ };
74
+ const result = constants_1.FileChangeHook.safeParse(validHook);
75
+ (0, bun_test_1.expect)(result.success).toBe(true);
76
+ if (result.success) {
77
+ (0, bun_test_1.expect)(result.data.enabled).toBe(true); // default value
78
+ }
79
+ });
80
+ (0, bun_test_1.it)('should validate a complete file change hook', () => {
81
+ const validHook = {
82
+ name: 'lint-check',
83
+ command: 'eslint .',
84
+ cwd: './src',
85
+ filePattern: '**/*.ts',
86
+ enabled: false,
87
+ };
88
+ const result = constants_1.FileChangeHook.safeParse(validHook);
89
+ (0, bun_test_1.expect)(result.success).toBe(true);
90
+ if (result.success) {
91
+ (0, bun_test_1.expect)(result.data).toEqual(validHook);
92
+ }
93
+ });
94
+ (0, bun_test_1.it)('should reject hook with empty name', () => {
95
+ const invalidHook = {
96
+ name: '',
97
+ command: 'npm test',
98
+ };
99
+ const result = constants_1.FileChangeHook.safeParse(invalidHook);
100
+ (0, bun_test_1.expect)(result.success).toBe(false);
101
+ });
102
+ (0, bun_test_1.it)('should reject hook with empty command', () => {
103
+ const invalidHook = {
104
+ name: 'test',
105
+ command: '',
106
+ };
107
+ const result = constants_1.FileChangeHook.safeParse(invalidHook);
108
+ (0, bun_test_1.expect)(result.success).toBe(false);
109
+ });
110
+ });
111
+ (0, bun_test_1.describe)('CodebuffConfigSchema', () => {
112
+ (0, bun_test_1.it)('should validate an empty object as a valid config', () => {
113
+ const emptyConfig = {};
114
+ const result = constants_1.CodebuffConfigSchema.safeParse(emptyConfig);
115
+ (0, bun_test_1.expect)(result.success).toBe(true);
116
+ if (result.success) {
117
+ (0, bun_test_1.expect)(result.data.maxAgentSteps).toBe(12); // default value
118
+ (0, bun_test_1.expect)(result.data.description).toBeUndefined();
119
+ (0, bun_test_1.expect)(result.data.startupProcesses).toBeUndefined();
120
+ (0, bun_test_1.expect)(result.data.fileChangeHooks).toBeUndefined();
121
+ }
122
+ });
123
+ (0, bun_test_1.it)('should validate a minimal config with description only', () => {
124
+ const config = {
125
+ description: 'My project config',
126
+ };
127
+ const result = constants_1.CodebuffConfigSchema.safeParse(config);
128
+ (0, bun_test_1.expect)(result.success).toBe(true);
129
+ if (result.success) {
130
+ (0, bun_test_1.expect)(result.data.description).toBe('My project config');
131
+ (0, bun_test_1.expect)(result.data.maxAgentSteps).toBe(12);
132
+ }
133
+ });
134
+ (0, bun_test_1.it)('should validate a complete config', () => {
135
+ const config = {
136
+ description: 'Full configuration',
137
+ startupProcesses: [
138
+ {
139
+ name: 'web-server',
140
+ command: 'npm start',
141
+ cwd: './web',
142
+ stdoutFile: 'logs/web.log',
143
+ },
144
+ ],
145
+ fileChangeHooks: [
146
+ {
147
+ name: 'test-runner',
148
+ command: 'npm test',
149
+ filePattern: '**/*.ts',
150
+ },
151
+ ],
152
+ maxAgentSteps: 20,
153
+ };
154
+ const result = constants_1.CodebuffConfigSchema.safeParse(config);
155
+ (0, bun_test_1.expect)(result.success).toBe(true);
156
+ if (result.success) {
157
+ (0, bun_test_1.expect)(result.data).toEqual({
158
+ ...config,
159
+ startupProcesses: [
160
+ {
161
+ ...config.startupProcesses[0],
162
+ enabled: true, // default value
163
+ },
164
+ ],
165
+ fileChangeHooks: [
166
+ {
167
+ ...config.fileChangeHooks[0],
168
+ enabled: true, // default value
169
+ },
170
+ ],
171
+ });
172
+ }
173
+ });
174
+ (0, bun_test_1.it)('should accept any type for description field', () => {
175
+ const configs = [
176
+ { description: 'string description' },
177
+ { description: 42 },
178
+ { description: true },
179
+ { description: { nested: 'object' } },
180
+ { description: ['array', 'values'] },
181
+ { description: null },
182
+ ];
183
+ configs.forEach((config) => {
184
+ const result = constants_1.CodebuffConfigSchema.safeParse(config);
185
+ (0, bun_test_1.expect)(result.success).toBe(true);
186
+ });
187
+ });
188
+ (0, bun_test_1.it)('should apply default maxAgentSteps value', () => {
189
+ const config = {
190
+ description: 'Test config',
191
+ };
192
+ const result = constants_1.CodebuffConfigSchema.safeParse(config);
193
+ (0, bun_test_1.expect)(result.success).toBe(true);
194
+ if (result.success) {
195
+ (0, bun_test_1.expect)(result.data.maxAgentSteps).toBe(12);
196
+ }
197
+ });
198
+ (0, bun_test_1.it)('should allow custom maxAgentSteps value', () => {
199
+ const config = {
200
+ maxAgentSteps: 25,
201
+ };
202
+ const result = constants_1.CodebuffConfigSchema.safeParse(config);
203
+ (0, bun_test_1.expect)(result.success).toBe(true);
204
+ if (result.success) {
205
+ (0, bun_test_1.expect)(result.data.maxAgentSteps).toBe(25);
206
+ }
207
+ });
208
+ (0, bun_test_1.it)('should reject invalid startup process in array', () => {
209
+ const config = {
210
+ startupProcesses: [
211
+ {
212
+ name: '', // invalid: empty name
213
+ command: 'npm start',
214
+ },
215
+ ],
216
+ };
217
+ const result = constants_1.CodebuffConfigSchema.safeParse(config);
218
+ (0, bun_test_1.expect)(result.success).toBe(false);
219
+ });
220
+ (0, bun_test_1.it)('should reject invalid file change hook in array', () => {
221
+ const config = {
222
+ fileChangeHooks: [
223
+ {
224
+ name: 'test',
225
+ command: '', // invalid: empty command
226
+ },
227
+ ],
228
+ };
229
+ const result = constants_1.CodebuffConfigSchema.safeParse(config);
230
+ (0, bun_test_1.expect)(result.success).toBe(false);
231
+ });
232
+ (0, bun_test_1.it)('should reject non-number maxAgentSteps', () => {
233
+ const config = {
234
+ maxAgentSteps: 'not-a-number',
235
+ };
236
+ const result = constants_1.CodebuffConfigSchema.safeParse(config);
237
+ (0, bun_test_1.expect)(result.success).toBe(false);
238
+ });
239
+ (0, bun_test_1.it)('should reject non-array startupProcesses', () => {
240
+ const config = {
241
+ startupProcesses: 'not-an-array',
242
+ };
243
+ const result = constants_1.CodebuffConfigSchema.safeParse(config);
244
+ (0, bun_test_1.expect)(result.success).toBe(false);
245
+ });
246
+ (0, bun_test_1.it)('should reject non-array fileChangeHooks', () => {
247
+ const config = {
248
+ fileChangeHooks: 'not-an-array',
249
+ };
250
+ const result = constants_1.CodebuffConfigSchema.safeParse(config);
251
+ (0, bun_test_1.expect)(result.success).toBe(false);
252
+ });
253
+ });
254
+ (0, bun_test_1.describe)('TypeScript types', () => {
255
+ (0, bun_test_1.it)('should have correct TypeScript types', () => {
256
+ // This test ensures the types are properly exported and inferred
257
+ const startupProcess = {
258
+ name: 'test',
259
+ command: 'echo hello',
260
+ enabled: true,
261
+ };
262
+ const config = {
263
+ description: 'Test config',
264
+ startupProcesses: [startupProcess],
265
+ maxAgentSteps: 15,
266
+ };
267
+ // If this compiles without TypeScript errors, the types are correct
268
+ (0, bun_test_1.expect)(startupProcess.name).toBe('test');
269
+ (0, bun_test_1.expect)(config.maxAgentSteps).toBe(15);
270
+ });
271
+ });
272
+ });
273
+ //# sourceMappingURL=constants.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.test.js","sourceRoot":"","sources":["../../../src/json-config/__tests__/constants.test.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { User } from './common/util/credentials';
1
+ import { User } from 'common/util/credentials';
2
2
  export declare const userFromJson: (json: string, profileName?: string) => User | undefined;
3
3
  export declare const CONFIG_DIR: string;
4
4
  export declare const CREDENTIALS_PATH: string;
@@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.CREDENTIALS_PATH = exports.CONFIG_DIR = exports.userFromJson = void 0;
7
- const credentials_1 = require("./common/util/credentials");
7
+ const credentials_1 = require("common/util/credentials");
8
8
  const node_path_1 = __importDefault(require("node:path"));
9
9
  const os_1 = __importDefault(require("os"));
10
10
  const zod_1 = require("zod");
@@ -31,7 +31,7 @@ const userFromJson = (json, profileName = 'default') => {
31
31
  }
32
32
  };
33
33
  exports.userFromJson = userFromJson;
34
- const file_1 = require("./common/util/file");
34
+ const file_1 = require("common/util/file");
35
35
  exports.CONFIG_DIR = node_path_1.default.join(os_1.default.homedir(), '.config', 'manicode' +
36
36
  // on a development stack?
37
37
  (process.env.NEXT_PUBLIC_CB_ENVIRONMENT &&
@@ -1,4 +1,4 @@
1
- import { StartupProcess } from './common/json-config/constants';
1
+ import { StartupProcess } from 'common/json-config/constants';
2
2
  /**
3
3
  * Starts background development processes defined in the config file.
4
4
  * Processes are started asynchronously and their output is tracked.
@@ -5,8 +5,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.startDevProcesses = startDevProcesses;
7
7
  const path_1 = __importDefault(require("path"));
8
- const constants_1 = require("./common/json-config/constants");
9
- const string_1 = require("./common/util/string");
8
+ const constants_1 = require("common/json-config/constants");
9
+ const string_1 = require("common/util/string");
10
10
  const picocolors_1 = require("picocolors");
11
11
  const terminal_1 = require("./utils/terminal");
12
12
  /**
package/dist/index.js CHANGED
File without changes
@@ -1,4 +1,4 @@
1
- import { ToolResult } from '../common/types/agent-state';
1
+ import { ToolResult } from 'common/types/agent-state';
2
2
  /**
3
3
  * Runs file change hooks defined in the codebuff.json configuration.
4
4
  * Returns an array of tool results for any hooks that fail.
@@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.runFileChangeHooks = runFileChangeHooks;
7
- const string_1 = require("../common/util/string");
7
+ const string_1 = require("common/util/string");
8
8
  const micromatch_1 = __importDefault(require("micromatch"));
9
9
  const project_files_1 = require("../project-files");
10
10
  const logger_1 = require("../utils/logger");
@@ -1,4 +1,4 @@
1
- import { CodebuffConfig } from '../common/json-config/constants';
1
+ import { CodebuffConfig } from 'common/json-config/constants';
2
2
  /**
3
3
  * Loads and validates the configuration file from the project directory.
4
4
  * @param projectPath - The root directory of the project
@@ -8,7 +8,7 @@ const fs_1 = require("fs");
8
8
  const path_1 = __importDefault(require("path"));
9
9
  const jsonc_parser_1 = require("jsonc-parser");
10
10
  const picocolors_1 = require("picocolors");
11
- const constants_1 = require("../common/json-config/constants");
11
+ const constants_1 = require("common/json-config/constants");
12
12
  const project_files_1 = require("../project-files");
13
13
  /**
14
14
  * Loads and validates the configuration file from the project directory.
package/dist/menu.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { CostMode } from './common/constants';
1
+ import { CostMode } from 'common/constants';
2
2
  export interface CommandInfo {
3
3
  commandText: string;
4
4
  description: string;
package/dist/menu.js CHANGED
@@ -35,7 +35,7 @@ const fs = __importStar(require("fs"));
35
35
  const os_1 = __importDefault(require("os"));
36
36
  const path_1 = __importDefault(require("path"));
37
37
  const picocolors_1 = require("picocolors");
38
- const constants_1 = require("./common/json-config/constants");
38
+ const constants_1 = require("common/json-config/constants");
39
39
  const project_files_1 = require("./project-files");
40
40
  exports.interactiveCommandDetails = [
41
41
  {
@@ -23,7 +23,7 @@ export declare function toAbsolutePath(filepath: string, projectRoot: string): s
23
23
  export declare function isSubdir(fromPath: string, toPath: string): boolean;
24
24
  export declare function initProjectFileContextWithWorker(dir: string, resetCache?: boolean): Promise<{
25
25
  currentWorkingDirectory: string;
26
- fileTree: import("./common/util/file").FileTreeNode[];
26
+ fileTree: import("common/util/file").FileTreeNode[];
27
27
  fileTokenScores: Record<string, Record<string, number>>;
28
28
  knowledgeFiles: Record<string, string>;
29
29
  gitChanges: {
@@ -73,7 +73,7 @@ export declare function initProjectFileContextWithWorker(dir: string, resetCache
73
73
  */
74
74
  export declare const getProjectFileContext: (projectRoot: string, lastFileVersion: Record<string, string>) => Promise<{
75
75
  currentWorkingDirectory: string;
76
- fileTree: import("./common/util/file").FileTreeNode[];
76
+ fileTree: import("common/util/file").FileTreeNode[];
77
77
  fileTokenScores: Record<string, Record<string, number>>;
78
78
  knowledgeFiles: Record<string, string>;
79
79
  gitChanges: {
@@ -54,14 +54,14 @@ const os_1 = __importDefault(require("os"));
54
54
  const path_1 = __importStar(require("path"));
55
55
  const util_1 = require("util");
56
56
  const worker_threads_1 = require("worker_threads");
57
- const parse_1 = require("./code-map/parse");
58
- const constants_1 = require("./common/constants");
59
- const project_file_tree_1 = require("./common/project-file-tree");
60
- const file_1 = require("./common/util/file");
61
- const object_1 = require("./common/util/object");
57
+ const parse_1 = require("code-map/parse");
58
+ const constants_1 = require("common/constants");
59
+ const project_file_tree_1 = require("common/project-file-tree");
60
+ const file_1 = require("common/util/file");
61
+ const object_1 = require("common/util/object");
62
62
  const diff_1 = require("diff");
63
63
  const picocolors_1 = require("picocolors");
64
- const constants_2 = require("./common/json-config/constants");
64
+ const constants_2 = require("common/json-config/constants");
65
65
  const checkpoint_manager_1 = require("./checkpoints/checkpoint-manager");
66
66
  const credentials_1 = require("./credentials");
67
67
  const logger_1 = require("./utils/logger");
@@ -1,5 +1,5 @@
1
- import { BrowserResponse } from './common/browser-actions';
2
- import { RawToolCall } from './common/types/tools';
1
+ import { BrowserResponse } from 'common/browser-actions';
2
+ import { RawToolCall } from 'common/types/tools';
3
3
  export type ToolHandler<T extends Record<string, any>> = (parameters: T, id: string) => Promise<string | BrowserResponse>;
4
4
  export declare const handleUpdateFile: ToolHandler<{
5
5
  tool: 'write_file' | 'str_replace' | 'create_plan';
@@ -27,10 +27,10 @@ exports.handleToolCall = exports.toolHandlers = exports.handleSleep = exports.ha
27
27
  const child_process_1 = require("child_process");
28
28
  const path = __importStar(require("path"));
29
29
  const ripgrep_1 = require("@vscode/ripgrep");
30
- const actions_1 = require("./common/actions");
31
- const browser_actions_1 = require("./common/browser-actions");
32
- const changes_1 = require("./common/util/changes");
33
- const string_1 = require("./common/util/string");
30
+ const actions_1 = require("common/actions");
31
+ const browser_actions_1 = require("common/browser-actions");
32
+ const changes_1 = require("common/util/changes");
33
+ const string_1 = require("common/util/string");
34
34
  const picocolors_1 = require("picocolors");
35
35
  const logger_1 = require("./utils/logger");
36
36
  const browser_runner_1 = require("./browser-runner");
package/dist/types.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { CostMode } from './common/constants';
1
+ import { CostMode } from 'common/constants';
2
2
  export type GitCommand = 'stage' | undefined;
3
3
  export interface CliOptions {
4
4
  initialInput?: string;
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.updateCodebuff = updateCodebuff;
7
7
  const child_process_1 = require("child_process");
8
8
  const picocolors_1 = require("picocolors");
9
- const analytics_events_1 = require("./common/constants/analytics-events");
9
+ const analytics_events_1 = require("common/constants/analytics-events");
10
10
  const package_json_1 = __importDefault(require("../package.json"));
11
11
  const background_process_manager_1 = require("./background-process-manager");
12
12
  const config_1 = require("./config");
@@ -29,8 +29,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
29
29
  const stream_1 = require("stream");
30
30
  // @ts-ignore
31
31
  const bun_test_1 = require("bun:test");
32
- const tools_1 = require("../../common/constants/tools");
33
- const projectFileTree = __importStar(require("../../common/project-file-tree"));
32
+ const tools_1 = require("common/constants/tools");
33
+ const projectFileTree = __importStar(require("common/project-file-tree"));
34
34
  const strip_ansi_1 = __importDefault(require("strip-ansi"));
35
35
  const projectFiles = __importStar(require("../../project-files"));
36
36
  const tool_renderers_1 = require("../tool-renderers");
@@ -8,7 +8,7 @@ const path_1 = __importDefault(require("path"));
8
8
  const stream_1 = require("stream");
9
9
  // @ts-ignore
10
10
  const bun_test_1 = require("bun:test");
11
- const tools_1 = require("../../common/constants/tools");
11
+ const tools_1 = require("common/constants/tools");
12
12
  const strip_ansi_1 = __importDefault(require("strip-ansi"));
13
13
  const tool_renderers_1 = require("../tool-renderers");
14
14
  const xml_stream_parser_1 = require("../xml-stream-parser");
@@ -1,4 +1,4 @@
1
- import { AnalyticsEvent } from '../common/constants/analytics-events';
1
+ import { AnalyticsEvent } from 'common/constants/analytics-events';
2
2
  export declare let identified: boolean;
3
3
  export declare function initAnalytics(): void;
4
4
  export declare function flushAnalytics(): Promise<void>;
@@ -27,7 +27,7 @@ exports.logger = exports.loggerContext = void 0;
27
27
  const fs_1 = require("fs");
28
28
  const path_1 = __importStar(require("path"));
29
29
  const util_1 = require("util");
30
- const analytics_events_1 = require("../common/constants/analytics-events");
30
+ const analytics_events_1 = require("common/constants/analytics-events");
31
31
  const pino_1 = require("pino");
32
32
  const project_files_1 = require("../project-files");
33
33
  const analytics_1 = require("./analytics");
@@ -36,9 +36,9 @@ const fs = __importStar(require("fs"));
36
36
  const fs_1 = require("fs");
37
37
  const os = __importStar(require("os"));
38
38
  const path_1 = __importStar(require("path"));
39
- const analytics_events_1 = require("../common/constants/analytics-events");
40
- const array_1 = require("../common/util/array");
41
- const string_1 = require("../common/util/string");
39
+ const analytics_events_1 = require("common/constants/analytics-events");
40
+ const array_1 = require("common/util/array");
41
+ const string_1 = require("common/util/string");
42
42
  const picocolors_1 = require("picocolors");
43
43
  const background_process_manager_1 = require("../background-process-manager");
44
44
  const project_files_1 = require("../project-files");
@@ -1,4 +1,4 @@
1
- import { ToolName } from '../common/constants/tools';
1
+ import { ToolName } from 'common/constants/tools';
2
2
  /**
3
3
  * Interface for handling tool call rendering
4
4
  */
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.toolRenderers = exports.defaultToolCallRenderer = void 0;
4
- const project_file_tree_1 = require("../common/project-file-tree");
5
- const string_1 = require("../common/util/string");
4
+ const project_file_tree_1 = require("common/project-file-tree");
5
+ const string_1 = require("common/util/string");
6
6
  const picocolors_1 = require("picocolors");
7
7
  const project_files_1 = require("../project-files");
8
8
  let toolStart = true;
@@ -1,4 +1,4 @@
1
- import { Saxy } from '../common/util/saxy';
1
+ import { Saxy } from 'common/util/saxy';
2
2
  import { ToolCallRenderer } from './tool-renderers';
3
3
  /**
4
4
  * Creates a transform stream that processes XML tool calls
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createXMLStreamParser = createXMLStreamParser;
4
- const tools_1 = require("../common/constants/tools");
5
- const saxy_1 = require("../common/util/saxy");
4
+ const tools_1 = require("common/constants/tools");
5
+ const saxy_1 = require("common/util/saxy");
6
6
  const tool_renderers_1 = require("./tool-renderers");
7
7
  /**
8
8
  * Creates a transform stream that processes XML tool calls
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.scrapeWebPage = scrapeWebPage;
4
4
  exports.parseUrlsFromContent = parseUrlsFromContent;
5
5
  exports.getScrapedContentBlocks = getScrapedContentBlocks;
6
- const string_1 = require("./common/util/string");
6
+ const string_1 = require("common/util/string");
7
7
  const logger_1 = require("./utils/logger");
8
8
  // Global cache for scraped web pages
9
9
  const scrapedPagesCache = {};
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const worker_threads_1 = require("worker_threads");
4
- const project_file_tree_1 = require("../common/project-file-tree");
4
+ const project_file_tree_1 = require("common/project-file-tree");
5
5
  const file_manager_1 = require("../checkpoints/file-manager");
6
6
  const project_files_1 = require("../project-files");
7
7
  if (worker_threads_1.parentPort) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codebuff",
3
- "version": "1.0.310",
3
+ "version": "1.0.311",
4
4
  "description": "AI dev assistant",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",
@@ -13,7 +13,7 @@
13
13
  "postpublish": "echo \"const fs=require('fs');fs.copyFileSync('temp.package.json','package.json');fs.unlinkSync('temp.package.json');\" | bun run -",
14
14
  "format": "prettier --write \"**/*.{ts,tsx,json,md}\"",
15
15
  "test": "jest",
16
- "start-js": "nx clean npm-app && nx build npm-app && bun run with-env -- sh -c 'TS_NODE_BASEURL=./dist node -r tsconfig-paths/register dist/index.js ..'",
16
+ "start-js": "nx build npm-app && bun run with-env -- sh -c 'TS_NODE_BASEURL=./dist node -r tsconfig-paths/register dist/index.js ..'",
17
17
  "start": "nx build npm-app > /dev/null && bun run with-env -- sh -c 'TS_NODE_PROJECT=./tsconfig.json ts-node -r tsconfig-paths/register src/index.ts ..'",
18
18
  "start-max": "nx build npm-app > /dev/null && bun run with-env -- sh -c 'TS_NODE_PROJECT=./tsconfig.json ts-node -r tsconfig-paths/register src/index.ts .. --max'",
19
19
  "start-lite": "nx build npm-app > /dev/null && bun run with-env -- sh -c 'TS_NODE_PROJECT=./tsconfig.json ts-node -r tsconfig-paths/register src/index.ts .. --lite'",
@@ -1,7 +0,0 @@
1
- import { CodebuffConfig } from './constants';
2
- /**
3
- * Loads and validates the configuration file from the project directory.
4
- * @param projectPath - The root directory of the project
5
- * @returns The parsed and validated configuration, or null if no valid config exists
6
- */
7
- export declare function loadCodebuffConfig(projectPath: string): CodebuffConfig | null;
@@ -1,51 +0,0 @@
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.loadCodebuffConfig = loadCodebuffConfig;
7
- const fs_1 = require("fs");
8
- const path_1 = __importDefault(require("path"));
9
- const jsonc_parser_1 = require("jsonc-parser");
10
- const picocolors_1 = require("picocolors");
11
- const constants_1 = require("./constants");
12
- /**
13
- * Loads and validates the configuration file from the project directory.
14
- * @param projectPath - The root directory of the project
15
- * @returns The parsed and validated configuration, or null if no valid config exists
16
- */
17
- function loadCodebuffConfig(projectPath) {
18
- const configPathPrimary = path_1.default.join(projectPath, constants_1.codebuffConfigFile);
19
- const configPathBackup = path_1.default.join(projectPath, constants_1.codebuffConfigFileBackup);
20
- const configPath = (0, fs_1.existsSync)(configPathBackup)
21
- ? configPathBackup
22
- : (0, fs_1.existsSync)(configPathPrimary)
23
- ? configPathPrimary
24
- : null;
25
- if (configPath === null) {
26
- return null;
27
- }
28
- try {
29
- const jsoncContent = (0, fs_1.readFileSync)(configPath, 'utf-8');
30
- const parsedConfig = (0, jsonc_parser_1.parse)(jsoncContent);
31
- const result = constants_1.CodebuffConfigSchema.safeParse(parsedConfig);
32
- if (!result.success) {
33
- console.warn((0, picocolors_1.yellow)(`Warning: Invalid ${constants_1.codebuffConfigFile} configuration. Please check the schema:\n` +
34
- result.error.errors
35
- .map((err) => `- ${err.path.join('.')}: ${err.message}`)
36
- .join('\n')));
37
- return null;
38
- }
39
- return result.data;
40
- }
41
- catch (error) {
42
- if (error instanceof SyntaxError) {
43
- console.warn((0, picocolors_1.yellow)(`Warning: Invalid JSON in ${constants_1.codebuffConfigFile}. Please check the syntax.`));
44
- }
45
- else {
46
- console.warn((0, picocolors_1.yellow)(`Warning: Error reading ${constants_1.codebuffConfigFile} configuration file.`));
47
- }
48
- return null;
49
- }
50
- }
51
- //# sourceMappingURL=parser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/json-config/parser.ts"],"names":[],"mappings":";;;;;AAkBA,gDAgDC;AAlED,2BAA6C;AAC7C,gDAAuB;AAEvB,+CAAkD;AAClD,2CAAmC;AAEnC,2CAKoB;AAEpB;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,WAAmB;IACpD,MAAM,iBAAiB,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,8BAAkB,CAAC,CAAA;IACpE,MAAM,gBAAgB,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,oCAAwB,CAAC,CAAA;IACzE,MAAM,UAAU,GAAG,IAAA,eAAU,EAAC,gBAAgB,CAAC;QAC7C,CAAC,CAAC,gBAAgB;QAClB,CAAC,CAAC,IAAA,eAAU,EAAC,iBAAiB,CAAC;YAC7B,CAAC,CAAC,iBAAiB;YACnB,CAAC,CAAC,IAAI,CAAA;IAEV,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,IAAA,iBAAY,EAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QACtD,MAAM,YAAY,GAAG,IAAA,oBAAU,EAAC,YAAY,CAAC,CAAA;QAE7C,MAAM,MAAM,GAAG,gCAAoB,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;QAE3D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CACV,IAAA,mBAAM,EACJ,oBAAoB,8BAAkB,4CAA4C;gBAChF,MAAM,CAAC,KAAK,CAAC,MAAM;qBAChB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC;qBACvD,IAAI,CAAC,IAAI,CAAC,CAChB,CACF,CAAA;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAA;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YACjC,OAAO,CAAC,IAAI,CACV,IAAA,mBAAM,EACJ,4BAA4B,8BAAkB,4BAA4B,CAC3E,CACF,CAAA;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CACV,IAAA,mBAAM,EACJ,0BAA0B,8BAAkB,sBAAsB,CACnE,CACF,CAAA;QACH,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC"}
@@ -1,7 +0,0 @@
1
- import { CodebuffConfig } from './common/json-config/constants';
2
- /**
3
- * Loads and validates the configuration file from the project directory.
4
- * @param projectPath - The root directory of the project
5
- * @returns The parsed and validated configuration, or null if no valid config exists
6
- */
7
- export declare function loadCodebuffConfig(): CodebuffConfig | null;
@@ -1,53 +0,0 @@
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.loadCodebuffConfig = loadCodebuffConfig;
7
- const fs_1 = require("fs");
8
- const path_1 = __importDefault(require("path"));
9
- const jsonc_parser_1 = require("jsonc-parser");
10
- const picocolors_1 = require("picocolors");
11
- const constants_1 = require("./common/json-config/constants");
12
- const project_files_1 = require("./project-files");
13
- /**
14
- * Loads and validates the configuration file from the project directory.
15
- * @param projectPath - The root directory of the project
16
- * @returns The parsed and validated configuration, or null if no valid config exists
17
- */
18
- function loadCodebuffConfig() {
19
- const projectPath = (0, project_files_1.getProjectRoot)();
20
- const configPathPrimary = path_1.default.join(projectPath, constants_1.codebuffConfigFile);
21
- const configPathBackup = path_1.default.join(projectPath, constants_1.codebuffConfigFileBackup);
22
- const configPath = (0, fs_1.existsSync)(configPathBackup)
23
- ? configPathBackup
24
- : (0, fs_1.existsSync)(configPathPrimary)
25
- ? configPathPrimary
26
- : null;
27
- if (configPath === null) {
28
- return null;
29
- }
30
- try {
31
- const jsoncContent = (0, fs_1.readFileSync)(configPath, 'utf-8');
32
- const parsedConfig = (0, jsonc_parser_1.parse)(jsoncContent);
33
- const result = constants_1.CodebuffConfigSchema.safeParse(parsedConfig);
34
- if (!result.success) {
35
- console.warn((0, picocolors_1.yellow)(`Warning: Invalid ${constants_1.codebuffConfigFile} configuration. Please check the schema:\n` +
36
- result.error.errors
37
- .map((err) => `- ${err.path.join('.')}: ${err.message}`)
38
- .join('\n')));
39
- return null;
40
- }
41
- return result.data;
42
- }
43
- catch (error) {
44
- if (error instanceof SyntaxError) {
45
- console.warn((0, picocolors_1.yellow)(`Warning: Invalid JSON in ${constants_1.codebuffConfigFile}. Please check the syntax.`));
46
- }
47
- else {
48
- console.warn((0, picocolors_1.yellow)(`Warning: Error reading ${constants_1.codebuffConfigFile} configuration file.`));
49
- }
50
- return null;
51
- }
52
- }
53
- //# sourceMappingURL=json-config-parser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"json-config-parser.js","sourceRoot":"","sources":["../src/json-config-parser.ts"],"names":[],"mappings":";;;;;AAmBA,gDAiDC;AApED,2BAA6C;AAC7C,gDAAuB;AAEvB,+CAAkD;AAClD,2CAAmC;AAEnC,4DAKqC;AACrC,mDAAgD;AAEhD;;;;GAIG;AACH,SAAgB,kBAAkB;IAChC,MAAM,WAAW,GAAG,IAAA,8BAAc,GAAE,CAAA;IACpC,MAAM,iBAAiB,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,8BAAkB,CAAC,CAAA;IACpE,MAAM,gBAAgB,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,oCAAwB,CAAC,CAAA;IACzE,MAAM,UAAU,GAAG,IAAA,eAAU,EAAC,gBAAgB,CAAC;QAC7C,CAAC,CAAC,gBAAgB;QAClB,CAAC,CAAC,IAAA,eAAU,EAAC,iBAAiB,CAAC;YAC7B,CAAC,CAAC,iBAAiB;YACnB,CAAC,CAAC,IAAI,CAAA;IAEV,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,IAAA,iBAAY,EAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QACtD,MAAM,YAAY,GAAG,IAAA,oBAAU,EAAC,YAAY,CAAC,CAAA;QAE7C,MAAM,MAAM,GAAG,gCAAoB,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;QAE3D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CACV,IAAA,mBAAM,EACJ,oBAAoB,8BAAkB,4CAA4C;gBAChF,MAAM,CAAC,KAAK,CAAC,MAAM;qBAChB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC;qBACvD,IAAI,CAAC,IAAI,CAAC,CAChB,CACF,CAAA;YACD,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAA;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YACjC,OAAO,CAAC,IAAI,CACV,IAAA,mBAAM,EACJ,4BAA4B,8BAAkB,4BAA4B,CAC3E,CACF,CAAA;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CACV,IAAA,mBAAM,EACJ,0BAA0B,8BAAkB,sBAAsB,CACnE,CACF,CAAA;QACH,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC"}