codingbuddy 1.0.0 → 1.0.1

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 (37) hide show
  1. package/README.md +37 -0
  2. package/dist/api/mcp.d.ts +2 -0
  3. package/dist/api/mcp.js +92 -0
  4. package/dist/api/mcp.js.map +1 -0
  5. package/dist/src/cli/cli.d.ts +1 -0
  6. package/dist/src/cli/cli.js +15 -0
  7. package/dist/src/cli/cli.js.map +1 -1
  8. package/dist/src/config/config.loader.d.ts +2 -0
  9. package/dist/src/config/config.loader.js +14 -0
  10. package/dist/src/config/config.loader.js.map +1 -1
  11. package/dist/src/main.js +25 -1
  12. package/dist/src/main.js.map +1 -1
  13. package/dist/src/mcp/mcp-serverless.d.ts +27 -0
  14. package/dist/src/mcp/mcp-serverless.js +380 -0
  15. package/dist/src/mcp/mcp-serverless.js.map +1 -0
  16. package/dist/src/mcp/mcp.service.js +3 -1
  17. package/dist/src/mcp/mcp.service.js.map +1 -1
  18. package/dist/src/rules/agent.schema.d.ts +20 -0
  19. package/dist/src/rules/agent.schema.js +82 -0
  20. package/dist/src/rules/agent.schema.js.map +1 -0
  21. package/dist/src/rules/rules.service.js +18 -1
  22. package/dist/src/rules/rules.service.js.map +1 -1
  23. package/dist/src/rules/rules.types.d.ts +8 -5
  24. package/dist/src/shared/error.utils.d.ts +1 -0
  25. package/dist/src/shared/error.utils.js +46 -0
  26. package/dist/src/shared/error.utils.js.map +1 -0
  27. package/dist/src/shared/security.utils.d.ts +1 -0
  28. package/dist/src/shared/security.utils.js +17 -0
  29. package/dist/src/shared/security.utils.js.map +1 -0
  30. package/dist/src/shared/validation.constants.d.ts +11 -0
  31. package/dist/src/shared/validation.constants.js +53 -0
  32. package/dist/src/shared/validation.constants.js.map +1 -0
  33. package/dist/tsconfig.build.tsbuildinfo +1 -1
  34. package/package.json +3 -2
  35. package/dist/vitest.config.d.ts +0 -2
  36. package/dist/vitest.config.js +0 -23
  37. package/dist/vitest.config.js.map +0 -1
@@ -0,0 +1 @@
1
+ export declare function sanitizeError(error: unknown): string;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sanitizeError = sanitizeError;
4
+ const SENSITIVE_PATTERNS = [
5
+ /\/[a-zA-Z0-9_-]+\/[a-zA-Z0-9_./\\-]+/,
6
+ /[A-Z]:\\[a-zA-Z0-9_\\.-]+/,
7
+ /node_modules/i,
8
+ /\s+at\s+.+:\d+:\d+/,
9
+ /\.[jt]sx?:\d+/,
10
+ ];
11
+ function isDebugMode() {
12
+ return process.env.CODINGBUDDY_DEBUG === 'true';
13
+ }
14
+ function containsSensitiveInfo(message) {
15
+ return SENSITIVE_PATTERNS.some(pattern => pattern.test(message));
16
+ }
17
+ function sanitizeError(error) {
18
+ const genericMessage = 'An internal error occurred';
19
+ if (error === null || error === undefined) {
20
+ return isDebugMode() ? 'Unknown error: null or undefined' : genericMessage;
21
+ }
22
+ if (error instanceof Error) {
23
+ const message = error.message;
24
+ if (isDebugMode()) {
25
+ return message;
26
+ }
27
+ if (containsSensitiveInfo(message)) {
28
+ return genericMessage;
29
+ }
30
+ return message;
31
+ }
32
+ if (typeof error === 'string') {
33
+ if (isDebugMode()) {
34
+ return error;
35
+ }
36
+ if (containsSensitiveInfo(error)) {
37
+ return genericMessage;
38
+ }
39
+ return error;
40
+ }
41
+ if (isDebugMode()) {
42
+ return `Unknown error: ${JSON.stringify(error)}`;
43
+ }
44
+ return genericMessage;
45
+ }
46
+ //# sourceMappingURL=error.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.utils.js","sourceRoot":"","sources":["../../../src/shared/error.utils.ts"],"names":[],"mappings":";;AA+CA,sCA2CC;AAnFD,MAAM,kBAAkB,GAAG;IAEzB,sCAAsC;IAEtC,2BAA2B;IAE3B,eAAe;IAEf,oBAAoB;IAEpB,eAAe;CAChB,CAAC;AAKF,SAAS,WAAW;IAClB,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,MAAM,CAAC;AAClD,CAAC;AAKD,SAAS,qBAAqB,CAAC,OAAe;IAC5C,OAAO,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACnE,CAAC;AAeD,SAAgB,aAAa,CAAC,KAAc;IAC1C,MAAM,cAAc,GAAG,4BAA4B,CAAC;IAGpD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,WAAW,EAAE,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,cAAc,CAAC;IAC7E,CAAC;IAGD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAE9B,IAAI,WAAW,EAAE,EAAE,CAAC;YAClB,OAAO,OAAO,CAAC;QACjB,CAAC;QAGD,IAAI,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC;YACnC,OAAO,cAAc,CAAC;QACxB,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAGD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,WAAW,EAAE,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,cAAc,CAAC;QACxB,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAGD,IAAI,WAAW,EAAE,EAAE,CAAC;QAClB,OAAO,kBAAkB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;IACnD,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function isPathSafe(basePath: string, relativePath: string): boolean;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isPathSafe = isPathSafe;
4
+ const path = require("path");
5
+ function isPathSafe(basePath, relativePath) {
6
+ if (relativePath.includes('\x00')) {
7
+ return false;
8
+ }
9
+ const normalizedRelative = relativePath.replace(/\\/g, '/');
10
+ const resolvedBase = path.resolve(basePath);
11
+ const resolvedTarget = path.resolve(basePath, normalizedRelative);
12
+ if (resolvedTarget === resolvedBase) {
13
+ return true;
14
+ }
15
+ return resolvedTarget.startsWith(resolvedBase + path.sep);
16
+ }
17
+ //# sourceMappingURL=security.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.utils.js","sourceRoot":"","sources":["../../../src/shared/security.utils.ts"],"names":[],"mappings":";;AAmBA,gCAuBC;AAtCD,6BAA6B;AAe7B,SAAgB,UAAU,CAAC,QAAgB,EAAE,YAAoB;IAE/D,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAClC,OAAO,KAAK,CAAC;IACf,CAAC;IAID,MAAM,kBAAkB,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAG5D,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;IAIlE,IAAI,cAAc,KAAK,YAAY,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAID,OAAO,cAAc,CAAC,UAAU,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,11 @@
1
+ export declare const MAX_QUERY_LENGTH = 1000;
2
+ export declare const MAX_PROMPT_LENGTH = 10000;
3
+ export declare const MAX_AGENT_NAME_LENGTH = 100;
4
+ export declare const AGENT_NAME_PATTERN: RegExp;
5
+ export interface ValidationResult {
6
+ valid: boolean;
7
+ error?: string;
8
+ }
9
+ export declare function validateQuery(query: string): ValidationResult;
10
+ export declare function validatePrompt(prompt: string): ValidationResult;
11
+ export declare function validateAgentName(name: string): ValidationResult;
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AGENT_NAME_PATTERN = exports.MAX_AGENT_NAME_LENGTH = exports.MAX_PROMPT_LENGTH = exports.MAX_QUERY_LENGTH = void 0;
4
+ exports.validateQuery = validateQuery;
5
+ exports.validatePrompt = validatePrompt;
6
+ exports.validateAgentName = validateAgentName;
7
+ exports.MAX_QUERY_LENGTH = 1000;
8
+ exports.MAX_PROMPT_LENGTH = 10000;
9
+ exports.MAX_AGENT_NAME_LENGTH = 100;
10
+ exports.AGENT_NAME_PATTERN = /^[a-z0-9-]+$/;
11
+ function validateQuery(query) {
12
+ if (!query || query.trim().length === 0) {
13
+ return { valid: false, error: 'Query cannot be empty' };
14
+ }
15
+ if (query.length > exports.MAX_QUERY_LENGTH) {
16
+ return {
17
+ valid: false,
18
+ error: `Query exceeds maximum length of ${exports.MAX_QUERY_LENGTH} characters`,
19
+ };
20
+ }
21
+ return { valid: true };
22
+ }
23
+ function validatePrompt(prompt) {
24
+ if (!prompt || prompt.trim().length === 0) {
25
+ return { valid: false, error: 'Prompt cannot be empty' };
26
+ }
27
+ if (prompt.length > exports.MAX_PROMPT_LENGTH) {
28
+ return {
29
+ valid: false,
30
+ error: `Prompt exceeds maximum length of ${exports.MAX_PROMPT_LENGTH} characters`,
31
+ };
32
+ }
33
+ return { valid: true };
34
+ }
35
+ function validateAgentName(name) {
36
+ if (!name || name.trim().length === 0) {
37
+ return { valid: false, error: 'Agent name cannot be empty' };
38
+ }
39
+ if (name.length > exports.MAX_AGENT_NAME_LENGTH) {
40
+ return {
41
+ valid: false,
42
+ error: `Agent name exceeds maximum length of ${exports.MAX_AGENT_NAME_LENGTH} characters`,
43
+ };
44
+ }
45
+ if (!exports.AGENT_NAME_PATTERN.test(name)) {
46
+ return {
47
+ valid: false,
48
+ error: 'Agent name must contain only lowercase letters, numbers, and hyphens',
49
+ };
50
+ }
51
+ return { valid: true };
52
+ }
53
+ //# sourceMappingURL=validation.constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.constants.js","sourceRoot":"","sources":["../../../src/shared/validation.constants.ts"],"names":[],"mappings":";;;AAoDA,sCAWC;AAKD,wCAWC;AAKD,8CAkBC;AAvFY,QAAA,gBAAgB,GAAG,IAAI,CAAC;AAMxB,QAAA,iBAAiB,GAAG,KAAK,CAAC;AAM1B,QAAA,qBAAqB,GAAG,GAAG,CAAC;AAW5B,QAAA,kBAAkB,GAAG,cAAc,CAAC;AAcjD,SAAgB,aAAa,CAAC,KAAa;IACzC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;IAC1D,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,GAAG,wBAAgB,EAAE,CAAC;QACpC,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,mCAAmC,wBAAgB,aAAa;SACxE,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC;AAKD,SAAgB,cAAc,CAAC,MAAc;IAC3C,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC;IAC3D,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,GAAG,yBAAiB,EAAE,CAAC;QACtC,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,oCAAoC,yBAAiB,aAAa;SAC1E,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC;AAKD,SAAgB,iBAAiB,CAAC,IAAY;IAC5C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC;IAC/D,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,GAAG,6BAAqB,EAAE,CAAC;QACxC,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,wCAAwC,6BAAqB,aAAa;SAClF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,0BAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EACH,sEAAsE;SACzE,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC"}