codingbuddy 2.2.0 → 2.2.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 (87) hide show
  1. package/README.md +62 -0
  2. package/dist/src/analyzer/analyzer.module.js +3 -2
  3. package/dist/src/analyzer/analyzer.module.js.map +1 -1
  4. package/dist/src/analyzer/config.analyzer.js +11 -3
  5. package/dist/src/analyzer/config.analyzer.js.map +1 -1
  6. package/dist/src/analyzer/conventions.analyzer.d.ts +20 -0
  7. package/dist/src/analyzer/conventions.analyzer.js +395 -0
  8. package/dist/src/analyzer/conventions.analyzer.js.map +1 -0
  9. package/dist/src/analyzer/conventions.schemas.d.ts +76 -0
  10. package/dist/src/analyzer/conventions.schemas.js +71 -0
  11. package/dist/src/analyzer/conventions.schemas.js.map +1 -0
  12. package/dist/src/analyzer/conventions.types.d.ts +81 -0
  13. package/dist/src/analyzer/conventions.types.js +33 -0
  14. package/dist/src/analyzer/conventions.types.js.map +1 -0
  15. package/dist/src/checklist/checklist.types.d.ts +1 -1
  16. package/dist/src/checklist/checklist.types.js +1 -0
  17. package/dist/src/checklist/checklist.types.js.map +1 -1
  18. package/dist/src/config/config.loader.d.ts +2 -0
  19. package/dist/src/config/config.loader.js +35 -4
  20. package/dist/src/config/config.loader.js.map +1 -1
  21. package/dist/src/keyword/auto-executor.d.ts +2 -2
  22. package/dist/src/keyword/auto-executor.js +15 -30
  23. package/dist/src/keyword/auto-executor.js.map +1 -1
  24. package/dist/src/keyword/auto-prompt-builder.d.ts +6 -0
  25. package/dist/src/keyword/auto-prompt-builder.js +47 -0
  26. package/dist/src/keyword/auto-prompt-builder.js.map +1 -0
  27. package/dist/src/keyword/keyword.module.js +11 -1
  28. package/dist/src/keyword/keyword.module.js.map +1 -1
  29. package/dist/src/keyword/keyword.service.d.ts +9 -2
  30. package/dist/src/keyword/keyword.service.js +94 -47
  31. package/dist/src/keyword/keyword.service.js.map +1 -1
  32. package/dist/src/keyword/keyword.types.d.ts +0 -3
  33. package/dist/src/keyword/keyword.types.js +1 -4
  34. package/dist/src/keyword/keyword.types.js.map +1 -1
  35. package/dist/src/keyword/primary-agent-resolver.js +4 -4
  36. package/dist/src/keyword/primary-agent-resolver.js.map +1 -1
  37. package/dist/src/main.js +12 -4
  38. package/dist/src/main.js.map +1 -1
  39. package/dist/src/mcp/handlers/abstract-handler.d.ts +8 -0
  40. package/dist/src/mcp/handlers/abstract-handler.js +19 -0
  41. package/dist/src/mcp/handlers/abstract-handler.js.map +1 -0
  42. package/dist/src/mcp/handlers/agent.handler.d.ts +6 -4
  43. package/dist/src/mcp/handlers/agent.handler.js +8 -15
  44. package/dist/src/mcp/handlers/agent.handler.js.map +1 -1
  45. package/dist/src/mcp/handlers/checklist-context.handler.d.ts +6 -4
  46. package/dist/src/mcp/handlers/checklist-context.handler.js +8 -12
  47. package/dist/src/mcp/handlers/checklist-context.handler.js.map +1 -1
  48. package/dist/src/mcp/handlers/config.handler.d.ts +6 -4
  49. package/dist/src/mcp/handlers/config.handler.js +12 -20
  50. package/dist/src/mcp/handlers/config.handler.js.map +1 -1
  51. package/dist/src/mcp/handlers/conventions.handler.d.ts +12 -0
  52. package/dist/src/mcp/handlers/conventions.handler.js +73 -0
  53. package/dist/src/mcp/handlers/conventions.handler.js.map +1 -0
  54. package/dist/src/mcp/handlers/index.d.ts +1 -0
  55. package/dist/src/mcp/handlers/index.js +3 -1
  56. package/dist/src/mcp/handlers/index.js.map +1 -1
  57. package/dist/src/mcp/handlers/mode.handler.d.ts +6 -5
  58. package/dist/src/mcp/handlers/mode.handler.js +6 -13
  59. package/dist/src/mcp/handlers/mode.handler.js.map +1 -1
  60. package/dist/src/mcp/handlers/rules.handler.d.ts +6 -4
  61. package/dist/src/mcp/handlers/rules.handler.js +8 -12
  62. package/dist/src/mcp/handlers/rules.handler.js.map +1 -1
  63. package/dist/src/mcp/handlers/skill.handler.d.ts +6 -4
  64. package/dist/src/mcp/handlers/skill.handler.js +8 -12
  65. package/dist/src/mcp/handlers/skill.handler.js.map +1 -1
  66. package/dist/src/mcp/mcp.module.js +1 -0
  67. package/dist/src/mcp/mcp.module.js.map +1 -1
  68. package/dist/src/mcp/mcp.service.d.ts +0 -1
  69. package/dist/src/mcp/mcp.service.js +2 -5
  70. package/dist/src/mcp/mcp.service.js.map +1 -1
  71. package/dist/src/shared/async.utils.d.ts +8 -0
  72. package/dist/src/shared/async.utils.js +18 -0
  73. package/dist/src/shared/async.utils.js.map +1 -0
  74. package/dist/src/shared/file.utils.d.ts +38 -2
  75. package/dist/src/shared/file.utils.js +104 -3
  76. package/dist/src/shared/file.utils.js.map +1 -1
  77. package/dist/src/shared/format.utils.d.ts +1 -0
  78. package/dist/src/shared/format.utils.js +19 -0
  79. package/dist/src/shared/format.utils.js.map +1 -0
  80. package/dist/src/shared/lru-cache.d.ts +21 -0
  81. package/dist/src/shared/lru-cache.js +70 -0
  82. package/dist/src/shared/lru-cache.js.map +1 -0
  83. package/dist/src/shared/validation.constants.d.ts +31 -0
  84. package/dist/src/shared/validation.constants.js +82 -8
  85. package/dist/src/shared/validation.constants.js.map +1 -1
  86. package/dist/tsconfig.build.tsbuildinfo +1 -1
  87. package/package.json +2 -2
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.asyncWithFallback = asyncWithFallback;
4
+ async function asyncWithFallback(options) {
5
+ const { fn, fallback, errorMessage, logger } = options;
6
+ try {
7
+ return await fn();
8
+ }
9
+ catch (error) {
10
+ const errorText = error instanceof Error ? error.message : 'Unknown error';
11
+ const message = errorMessage.replace('${error}', errorText);
12
+ if (logger) {
13
+ logger.debug(message);
14
+ }
15
+ return fallback;
16
+ }
17
+ }
18
+ //# sourceMappingURL=async.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async.utils.js","sourceRoot":"","sources":["../../../src/shared/async.utils.ts"],"names":[],"mappings":";;AA8CA,8CAiBC;AAjBM,KAAK,UAAU,iBAAiB,CACrC,OAAoC;IAEpC,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAEvD,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,SAAS,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QAC3E,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAE5D,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -1,4 +1,40 @@
1
1
  import { type Dirent } from 'fs';
2
- export declare function safeReadFile(filePath: string): Promise<string | null>;
3
- export declare function tryReadFile(filePath: string): Promise<string | undefined>;
2
+ import { AccessibleErrorResponse } from './validation.constants';
3
+ export interface Logger {
4
+ warn(message: string, context?: Record<string, unknown>): void;
5
+ }
6
+ export interface FileReadOptions {
7
+ maxSize?: number;
8
+ logger?: Logger;
9
+ allowedBasePath?: string;
10
+ }
11
+ export declare class FileSizeError extends Error implements AccessibleErrorResponse {
12
+ readonly code = "FILE_SIZE_EXCEEDED";
13
+ readonly userMessage: string;
14
+ readonly technicalMessage: string;
15
+ readonly accessibilityHints: {
16
+ role: "alert";
17
+ live: "assertive";
18
+ announce: boolean;
19
+ };
20
+ readonly suggestions: string[];
21
+ constructor(actualSize: number, maxSize: number, filePath?: string);
22
+ }
23
+ export declare class PathTraversalError extends Error implements AccessibleErrorResponse {
24
+ readonly code = "PATH_TRAVERSAL_DETECTED";
25
+ readonly userMessage: string;
26
+ readonly technicalMessage: string;
27
+ readonly accessibilityHints: {
28
+ role: "alert";
29
+ live: "assertive";
30
+ announce: boolean;
31
+ };
32
+ readonly suggestions: string[];
33
+ constructor(filePath: string, reason: string);
34
+ }
35
+ export declare function validateFilePath(filePath: string, options?: {
36
+ allowedBasePath?: string;
37
+ }): void;
38
+ export declare function safeReadFile(filePath: string, options?: FileReadOptions): Promise<string | null>;
39
+ export declare function tryReadFile(filePath: string, options?: FileReadOptions): Promise<string | undefined>;
4
40
  export declare function safeReadDirWithTypes(dirPath: string): Promise<Dirent[]>;
@@ -1,11 +1,90 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PathTraversalError = exports.FileSizeError = void 0;
4
+ exports.validateFilePath = validateFilePath;
3
5
  exports.safeReadFile = safeReadFile;
4
6
  exports.tryReadFile = tryReadFile;
5
7
  exports.safeReadDirWithTypes = safeReadDirWithTypes;
6
8
  const fs_1 = require("fs");
7
- async function safeReadFile(filePath) {
9
+ const path_1 = require("path");
10
+ const format_utils_1 = require("./format.utils");
11
+ class FileSizeError extends Error {
12
+ constructor(actualSize, maxSize, filePath) {
13
+ const userMsg = `File too large (${(0, format_utils_1.formatBytes)(actualSize)}). Maximum size is ${(0, format_utils_1.formatBytes)(maxSize)}.`;
14
+ super(userMsg);
15
+ this.code = 'FILE_SIZE_EXCEEDED';
16
+ this.accessibilityHints = {
17
+ role: 'alert',
18
+ live: 'assertive',
19
+ announce: true,
20
+ };
21
+ this.userMessage = userMsg;
22
+ this.technicalMessage = `File size ${actualSize} bytes exceeds maximum ${maxSize} bytes${filePath ? ` (${filePath})` : ''}`;
23
+ this.suggestions = [
24
+ 'Use a smaller file',
25
+ 'Compress the file before uploading',
26
+ `Split file into chunks under ${(0, format_utils_1.formatBytes)(maxSize)}`,
27
+ ];
28
+ this.name = 'FileSizeError';
29
+ }
30
+ }
31
+ exports.FileSizeError = FileSizeError;
32
+ class PathTraversalError extends Error {
33
+ constructor(filePath, reason) {
34
+ const userMsg = 'Invalid file path: path traversal attempt detected';
35
+ super(`Path traversal detected in "${filePath}": ${reason}`);
36
+ this.code = 'PATH_TRAVERSAL_DETECTED';
37
+ this.accessibilityHints = {
38
+ role: 'alert',
39
+ live: 'assertive',
40
+ announce: true,
41
+ };
42
+ this.userMessage = userMsg;
43
+ this.technicalMessage = `Path traversal detected in "${filePath}": ${reason}`;
44
+ this.suggestions = [
45
+ 'Use file paths without .. components',
46
+ 'Use absolute paths within allowed directories',
47
+ 'Avoid null bytes and special characters in file paths',
48
+ ];
49
+ this.name = 'PathTraversalError';
50
+ }
51
+ }
52
+ exports.PathTraversalError = PathTraversalError;
53
+ function validateFilePath(filePath, options) {
54
+ if (filePath.includes('\0')) {
55
+ throw new PathTraversalError(filePath, 'Null byte detected');
56
+ }
57
+ const segments = filePath.split(/[/\\]/);
58
+ for (const segment of segments) {
59
+ if (segment === '..') {
60
+ throw new PathTraversalError(filePath, 'Path traversal pattern detected (..)');
61
+ }
62
+ }
63
+ if (options?.allowedBasePath) {
64
+ const resolvedPath = (0, path_1.resolve)(filePath);
65
+ const resolvedBase = (0, path_1.resolve)(options.allowedBasePath);
66
+ const normalizedPath = (0, path_1.normalize)(resolvedPath);
67
+ const normalizedBase = (0, path_1.normalize)(resolvedBase);
68
+ if (!normalizedPath.startsWith(normalizedBase + path_1.sep) &&
69
+ normalizedPath !== normalizedBase) {
70
+ throw new PathTraversalError(filePath, `Path escapes allowed base directory "${options.allowedBasePath}"`);
71
+ }
72
+ }
73
+ }
74
+ async function validateFileSize(filePath, maxSize) {
75
+ const stats = await fs_1.promises.stat(filePath);
76
+ if (stats.size > maxSize) {
77
+ throw new FileSizeError(stats.size, maxSize, filePath);
78
+ }
79
+ }
80
+ async function safeReadFile(filePath, options) {
8
81
  try {
82
+ if (options?.allowedBasePath !== undefined) {
83
+ validateFilePath(filePath, { allowedBasePath: options.allowedBasePath });
84
+ }
85
+ if (options?.maxSize !== undefined) {
86
+ await validateFileSize(filePath, options.maxSize);
87
+ }
9
88
  return await fs_1.promises.readFile(filePath, 'utf-8');
10
89
  }
11
90
  catch (error) {
@@ -15,11 +94,33 @@ async function safeReadFile(filePath) {
15
94
  throw error;
16
95
  }
17
96
  }
18
- async function tryReadFile(filePath) {
97
+ async function tryReadFile(filePath, options) {
19
98
  try {
99
+ if (options?.allowedBasePath !== undefined) {
100
+ validateFilePath(filePath, { allowedBasePath: options.allowedBasePath });
101
+ }
102
+ if (options?.maxSize !== undefined) {
103
+ await validateFileSize(filePath, options.maxSize);
104
+ }
20
105
  return await fs_1.promises.readFile(filePath, 'utf-8');
21
106
  }
22
- catch {
107
+ catch (error) {
108
+ if (error instanceof FileSizeError) {
109
+ options?.logger?.warn('tryReadFile: File size violation (silent failure)', {
110
+ code: error.code,
111
+ filePath,
112
+ userMessage: error.userMessage,
113
+ technicalMessage: error.technicalMessage,
114
+ suggestions: error.suggestions,
115
+ });
116
+ }
117
+ if (error instanceof PathTraversalError) {
118
+ options?.logger?.warn('tryReadFile: Path traversal attempt (silent failure)', {
119
+ code: error.code,
120
+ filePath,
121
+ message: error.message,
122
+ });
123
+ }
23
124
  return undefined;
24
125
  }
25
126
  }
@@ -1 +1 @@
1
- {"version":3,"file":"file.utils.js","sourceRoot":"","sources":["../../../src/shared/file.utils.ts"],"names":[],"mappings":";;AAMA,oCASC;AAMD,kCAQC;AAMD,oDASC;AA5CD,2BAAiD;AAM1C,KAAK,UAAU,YAAY,CAAC,QAAgB;IACjD,IAAI,CAAC;QACH,OAAO,MAAM,aAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAMM,KAAK,UAAU,WAAW,CAC/B,QAAgB;IAEhB,IAAI,CAAC;QACH,OAAO,MAAM,aAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAMM,KAAK,UAAU,oBAAoB,CAAC,OAAe;IACxD,IAAI,CAAC;QACH,OAAO,MAAM,aAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"file.utils.js","sourceRoot":"","sources":["../../../src/shared/file.utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function formatBytes(bytes: number): string;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatBytes = formatBytes;
4
+ function formatBytes(bytes) {
5
+ if (bytes === 0)
6
+ return '0 bytes';
7
+ if (bytes === 1)
8
+ return '1 byte';
9
+ const units = ['bytes', 'KB', 'MB', 'GB', 'TB'];
10
+ let size = bytes;
11
+ let unitIndex = 0;
12
+ while (size >= 1024 && unitIndex < units.length - 1) {
13
+ size /= 1024;
14
+ unitIndex++;
15
+ }
16
+ const formatted = unitIndex === 0 ? size.toString() : size.toFixed(2).replace(/\.?0+$/, '');
17
+ return `${formatted} ${units[unitIndex]}`;
18
+ }
19
+ //# sourceMappingURL=format.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.utils.js","sourceRoot":"","sources":["../../../src/shared/format.utils.ts"],"names":[],"mappings":";;AAeA,kCAmBC;AAnBD,SAAgB,WAAW,CAAC,KAAa;IACvC,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAClC,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IAEjC,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAChD,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,OAAO,IAAI,IAAI,IAAI,IAAI,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpD,IAAI,IAAI,IAAI,CAAC;QACb,SAAS,EAAE,CAAC;IACd,CAAC;IAID,MAAM,SAAS,GACb,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAE5E,OAAO,GAAG,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,21 @@
1
+ export interface CacheEntry<T> {
2
+ value: T;
3
+ timestamp: number;
4
+ mtimes?: Map<string, number>;
5
+ }
6
+ export interface LRUCacheOptions {
7
+ maxSize?: number;
8
+ ttl?: number;
9
+ }
10
+ export declare class LRUCache<K, V> {
11
+ private cache;
12
+ private readonly maxSize;
13
+ private readonly ttl;
14
+ constructor(options?: LRUCacheOptions);
15
+ get(key: K, currentMtimes?: Map<string, number>): V | undefined;
16
+ set(key: K, value: V, mtimes?: Map<string, number>): void;
17
+ has(key: K, currentMtimes?: Map<string, number>): boolean;
18
+ clear(): void;
19
+ size(): number;
20
+ private haveMtimesChanged;
21
+ }
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LRUCache = void 0;
4
+ class LRUCache {
5
+ constructor(options = {}) {
6
+ this.cache = new Map();
7
+ this.maxSize = options.maxSize ?? 10;
8
+ this.ttl = options.ttl ?? 5 * 60 * 1000;
9
+ }
10
+ get(key, currentMtimes) {
11
+ const entry = this.cache.get(key);
12
+ if (!entry) {
13
+ return undefined;
14
+ }
15
+ const now = Date.now();
16
+ if (now - entry.timestamp > this.ttl) {
17
+ this.cache.delete(key);
18
+ return undefined;
19
+ }
20
+ if (currentMtimes && entry.mtimes) {
21
+ const mtimesChanged = this.haveMtimesChanged(entry.mtimes, currentMtimes);
22
+ if (mtimesChanged) {
23
+ this.cache.delete(key);
24
+ return undefined;
25
+ }
26
+ }
27
+ this.cache.delete(key);
28
+ this.cache.set(key, entry);
29
+ return entry.value;
30
+ }
31
+ set(key, value, mtimes) {
32
+ this.cache.delete(key);
33
+ if (this.cache.size >= this.maxSize) {
34
+ const firstKey = this.cache.keys().next().value;
35
+ if (firstKey !== undefined) {
36
+ this.cache.delete(firstKey);
37
+ }
38
+ }
39
+ this.cache.set(key, {
40
+ value,
41
+ timestamp: Date.now(),
42
+ mtimes,
43
+ });
44
+ }
45
+ has(key, currentMtimes) {
46
+ return this.get(key, currentMtimes) !== undefined;
47
+ }
48
+ clear() {
49
+ this.cache.clear();
50
+ }
51
+ size() {
52
+ return this.cache.size;
53
+ }
54
+ haveMtimesChanged(oldMtimes, newMtimes) {
55
+ for (const [filePath, newMtime] of newMtimes) {
56
+ const oldMtime = oldMtimes.get(filePath);
57
+ if (oldMtime !== newMtime) {
58
+ return true;
59
+ }
60
+ }
61
+ for (const filePath of oldMtimes.keys()) {
62
+ if (!newMtimes.has(filePath)) {
63
+ return true;
64
+ }
65
+ }
66
+ return false;
67
+ }
68
+ }
69
+ exports.LRUCache = LRUCache;
70
+ //# sourceMappingURL=lru-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lru-cache.js","sourceRoot":"","sources":["../../../src/shared/lru-cache.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ export declare const MAX_CONFIG_FILE_SIZE: number;
1
2
  export declare const MAX_QUERY_LENGTH = 1000;
2
3
  export declare const MAX_PROMPT_LENGTH = 10000;
3
4
  export declare const MAX_AGENT_NAME_LENGTH = 100;
@@ -6,6 +7,23 @@ export interface ValidationResult {
6
7
  valid: boolean;
7
8
  error?: string;
8
9
  }
10
+ export interface ParseResult<T> {
11
+ success: boolean;
12
+ value?: T;
13
+ error?: string;
14
+ }
15
+ export interface AccessibleErrorResponse {
16
+ code: string;
17
+ userMessage: string;
18
+ technicalMessage: string;
19
+ accessibilityHints?: {
20
+ role: 'alert' | 'status';
21
+ live?: 'assertive' | 'polite';
22
+ level?: 1 | 2 | 3 | 4 | 5 | 6;
23
+ announce?: boolean;
24
+ };
25
+ suggestions?: string[];
26
+ }
9
27
  export declare function validateQuery(query: string): ValidationResult;
10
28
  export declare function validatePrompt(prompt: string): ValidationResult;
11
29
  export declare function validateAgentName(name: string): ValidationResult;
@@ -19,3 +37,16 @@ export declare function extractRequiredString(args: Record<string, unknown> | un
19
37
  export declare function extractOptionalString(args: Record<string, unknown> | undefined, paramName: string): string | undefined;
20
38
  export declare function extractStringArray(args: Record<string, unknown> | undefined, paramName: string): string[] | undefined;
21
39
  export declare function extractMode(args: Record<string, unknown> | undefined, paramName?: string): ValidMode | null;
40
+ declare const VALID_INDENT_STYLES: readonly ["space", "tab"];
41
+ type IndentStyle = (typeof VALID_INDENT_STYLES)[number];
42
+ declare const VALID_END_OF_LINE: readonly ["lf", "cr", "crlf"];
43
+ type EndOfLine = (typeof VALID_END_OF_LINE)[number];
44
+ declare const VALID_CHARSETS: readonly ["utf-8", "utf-16be", "utf-16le", "latin1"];
45
+ type Charset = (typeof VALID_CHARSETS)[number];
46
+ export declare function isIndentStyle(value: unknown): value is IndentStyle;
47
+ export declare function isEndOfLine(value: unknown): value is EndOfLine;
48
+ export declare function isCharset(value: unknown): value is Charset;
49
+ export declare function parseIndentSize(value: string): ParseResult<number>;
50
+ export declare function parseTabWidth(value: string): ParseResult<number>;
51
+ export declare function parseMaxLineLength(value: string): ParseResult<number>;
52
+ export {};
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.VALID_MODES = exports.AGENT_NAME_PATTERN = exports.MAX_AGENT_NAME_LENGTH = exports.MAX_PROMPT_LENGTH = exports.MAX_QUERY_LENGTH = void 0;
3
+ exports.VALID_MODES = exports.AGENT_NAME_PATTERN = exports.MAX_AGENT_NAME_LENGTH = exports.MAX_PROMPT_LENGTH = exports.MAX_QUERY_LENGTH = exports.MAX_CONFIG_FILE_SIZE = void 0;
4
4
  exports.validateQuery = validateQuery;
5
5
  exports.validatePrompt = validatePrompt;
6
6
  exports.validateAgentName = validateAgentName;
@@ -12,48 +12,64 @@ exports.extractRequiredString = extractRequiredString;
12
12
  exports.extractOptionalString = extractOptionalString;
13
13
  exports.extractStringArray = extractStringArray;
14
14
  exports.extractMode = extractMode;
15
+ exports.isIndentStyle = isIndentStyle;
16
+ exports.isEndOfLine = isEndOfLine;
17
+ exports.isCharset = isCharset;
18
+ exports.parseIndentSize = parseIndentSize;
19
+ exports.parseTabWidth = parseTabWidth;
20
+ exports.parseMaxLineLength = parseMaxLineLength;
21
+ exports.MAX_CONFIG_FILE_SIZE = 1024 * 1024;
15
22
  exports.MAX_QUERY_LENGTH = 1000;
16
23
  exports.MAX_PROMPT_LENGTH = 10000;
17
24
  exports.MAX_AGENT_NAME_LENGTH = 100;
18
25
  exports.AGENT_NAME_PATTERN = /^[a-z0-9-]+$/;
19
26
  function validateQuery(query) {
20
27
  if (!query || query.trim().length === 0) {
21
- return { valid: false, error: 'Query cannot be empty' };
28
+ return {
29
+ valid: false,
30
+ error: 'Query cannot be empty. Please provide a search term. Example: "authentication flow"',
31
+ };
22
32
  }
23
33
  if (query.length > exports.MAX_QUERY_LENGTH) {
24
34
  return {
25
35
  valid: false,
26
- error: `Query exceeds maximum length of ${exports.MAX_QUERY_LENGTH} characters`,
36
+ error: `Query exceeds maximum length of ${exports.MAX_QUERY_LENGTH} characters. Please shorten your query.`,
27
37
  };
28
38
  }
29
39
  return { valid: true };
30
40
  }
31
41
  function validatePrompt(prompt) {
32
42
  if (!prompt || prompt.trim().length === 0) {
33
- return { valid: false, error: 'Prompt cannot be empty' };
43
+ return {
44
+ valid: false,
45
+ error: 'Prompt cannot be empty. Please provide a task description. Example: "PLAN design authentication flow"',
46
+ };
34
47
  }
35
48
  if (prompt.length > exports.MAX_PROMPT_LENGTH) {
36
49
  return {
37
50
  valid: false,
38
- error: `Prompt exceeds maximum length of ${exports.MAX_PROMPT_LENGTH} characters`,
51
+ error: `Prompt exceeds maximum length of ${exports.MAX_PROMPT_LENGTH} characters. Please shorten your prompt.`,
39
52
  };
40
53
  }
41
54
  return { valid: true };
42
55
  }
43
56
  function validateAgentName(name) {
44
57
  if (!name || name.trim().length === 0) {
45
- return { valid: false, error: 'Agent name cannot be empty' };
58
+ return {
59
+ valid: false,
60
+ error: 'Agent name cannot be empty. Please provide an agent name. Example: "frontend-developer"',
61
+ };
46
62
  }
47
63
  if (name.length > exports.MAX_AGENT_NAME_LENGTH) {
48
64
  return {
49
65
  valid: false,
50
- error: `Agent name exceeds maximum length of ${exports.MAX_AGENT_NAME_LENGTH} characters`,
66
+ error: `Agent name exceeds maximum length of ${exports.MAX_AGENT_NAME_LENGTH} characters. Please use a shorter name.`,
51
67
  };
52
68
  }
53
69
  if (!exports.AGENT_NAME_PATTERN.test(name)) {
54
70
  return {
55
71
  valid: false,
56
- error: 'Agent name must contain only lowercase letters, numbers, and hyphens',
72
+ error: 'Agent name must contain only lowercase letters, numbers, and hyphens. Example: "frontend-developer" or "code-reviewer"',
57
73
  };
58
74
  }
59
75
  return { valid: true };
@@ -91,4 +107,62 @@ function extractMode(args, paramName = 'mode') {
91
107
  const value = args?.[paramName];
92
108
  return isValidMode(value) ? value : null;
93
109
  }
110
+ const VALID_INDENT_STYLES = ['space', 'tab'];
111
+ const VALID_END_OF_LINE = ['lf', 'cr', 'crlf'];
112
+ const VALID_CHARSETS = ['utf-8', 'utf-16be', 'utf-16le', 'latin1'];
113
+ function isIndentStyle(value) {
114
+ return (typeof value === 'string' &&
115
+ VALID_INDENT_STYLES.includes(value));
116
+ }
117
+ function isEndOfLine(value) {
118
+ return (typeof value === 'string' && VALID_END_OF_LINE.includes(value));
119
+ }
120
+ function isCharset(value) {
121
+ return typeof value === 'string' && VALID_CHARSETS.includes(value);
122
+ }
123
+ function parseIndentSize(value) {
124
+ if (value.includes('.')) {
125
+ return {
126
+ success: false,
127
+ error: 'Indent size must be an integer, decimals are not allowed',
128
+ };
129
+ }
130
+ const parsed = parseInt(value, 10);
131
+ if (isNaN(parsed) || parsed < 1 || !Number.isInteger(parsed)) {
132
+ return {
133
+ success: false,
134
+ error: 'Indent size must be a positive integer (>= 1)',
135
+ };
136
+ }
137
+ return { success: true, value: parsed };
138
+ }
139
+ function parseTabWidth(value) {
140
+ if (value.includes('.')) {
141
+ return {
142
+ success: false,
143
+ error: 'Tab width must be an integer, decimals are not allowed',
144
+ };
145
+ }
146
+ const parsed = parseInt(value, 10);
147
+ if (isNaN(parsed) || parsed < 1 || !Number.isInteger(parsed)) {
148
+ return {
149
+ success: false,
150
+ error: 'Tab width must be a positive integer (>= 1)',
151
+ };
152
+ }
153
+ return { success: true, value: parsed };
154
+ }
155
+ function parseMaxLineLength(value) {
156
+ if (value === 'off') {
157
+ return { success: true };
158
+ }
159
+ const parsed = parseInt(value, 10);
160
+ if (isNaN(parsed) || parsed < 1 || !Number.isInteger(parsed)) {
161
+ return {
162
+ success: false,
163
+ error: 'Max line length must be a positive integer (>= 1) or "off"',
164
+ };
165
+ }
166
+ return { success: true, value: parsed };
167
+ }
94
168
  //# sourceMappingURL=validation.constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validation.constants.js","sourceRoot":"","sources":["../../../src/shared/validation.constants.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validation.constants.js","sourceRoot":"","sources":["../../../src/shared/validation.constants.ts"],"names":[],"mappings":"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"}