sqlew 3.6.5 → 3.6.6
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/CHANGELOG.md +41 -0
- package/LICENSE +52 -52
- package/README.md +3 -2
- package/assets/sample-agents/sqlew-architect.md +89 -273
- package/assets/sample-agents/sqlew-researcher.md +87 -237
- package/assets/sample-agents/sqlew-scrum-master.md +105 -108
- package/dist/index.js +32 -71
- package/dist/index.js.map +1 -1
- package/dist/migrations/knex/bootstrap/20251025020452_create_master_tables.d.ts.map +1 -1
- package/dist/migrations/knex/bootstrap/20251025020452_create_master_tables.js +49 -34
- package/dist/migrations/knex/bootstrap/20251025020452_create_master_tables.js.map +1 -1
- package/dist/migrations/knex/bootstrap/20251025021152_create_transaction_tables.d.ts.map +1 -1
- package/dist/migrations/knex/bootstrap/20251025021152_create_transaction_tables.js +211 -175
- package/dist/migrations/knex/bootstrap/20251025021152_create_transaction_tables.js.map +1 -1
- package/dist/tests/all-features.test.js +0 -71
- package/dist/tests/all-features.test.js.map +1 -1
- package/dist/tests/parameter-validation.test.d.ts +8 -0
- package/dist/tests/parameter-validation.test.d.ts.map +1 -0
- package/dist/tests/parameter-validation.test.js +461 -0
- package/dist/tests/parameter-validation.test.js.map +1 -0
- package/dist/tools/constraints.d.ts.map +1 -1
- package/dist/tools/constraints.js +7 -8
- package/dist/tools/constraints.js.map +1 -1
- package/dist/tools/context.d.ts.map +1 -1
- package/dist/tools/context.js +68 -39
- package/dist/tools/context.js.map +1 -1
- package/dist/tools/files.d.ts.map +1 -1
- package/dist/tools/files.js +9 -7
- package/dist/tools/files.js.map +1 -1
- package/dist/tools/help-queries.d.ts.map +1 -1
- package/dist/tools/help-queries.js +20 -14
- package/dist/tools/help-queries.js.map +1 -1
- package/dist/tools/messaging.d.ts +1 -1
- package/dist/tools/messaging.js +10 -10
- package/dist/tools/tasks.d.ts.map +1 -1
- package/dist/tools/tasks.js +13 -0
- package/dist/tools/tasks.js.map +1 -1
- package/dist/tools/utils.d.ts.map +1 -1
- package/dist/tools/utils.js +15 -12
- package/dist/tools/utils.js.map +1 -1
- package/dist/types.d.ts +93 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/action-specs.d.ts +46 -0
- package/dist/utils/action-specs.d.ts.map +1 -0
- package/dist/utils/action-specs.js +527 -0
- package/dist/utils/action-specs.js.map +1 -0
- package/dist/utils/error-handler.d.ts.map +1 -1
- package/dist/utils/error-handler.js +41 -24
- package/dist/utils/error-handler.js.map +1 -1
- package/dist/utils/parameter-validator.d.ts +53 -0
- package/dist/utils/parameter-validator.d.ts.map +1 -0
- package/dist/utils/parameter-validator.js +286 -0
- package/dist/utils/parameter-validator.js.map +1 -0
- package/docs/BEST_PRACTICES.md +69 -0
- package/docs/CONFIGURATION.md +35 -19
- package/docs/TOOL_REFERENCE.md +178 -0
- package/package.json +86 -86
- package/dist/tools/config.d.ts +0 -50
- package/dist/tools/config.d.ts.map +0 -1
- package/dist/tools/config.js +0 -170
- package/dist/tools/config.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/utils/error-handler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE5D;;GAEG;AACH,SAAS,kBAAkB,CAAC,KAAU;IAKpC,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,MAAM,KAAK,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/D,MAAM,SAAS,GAAG,KAAK,EAAE,WAAW,EAAE,IAAI,IAAI,SAAS,CAAC;IAExD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,QAAgB,EAChB,MAAc,EACd,KAAU,EACV,MAAY;IAEZ,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAEhE,iDAAiD;IACjD,aAAa,CAAC,QAAQ,QAAQ,IAAI,MAAM,EAAE,EAAE,KAAK,EAAE;QACjD,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,MAAM;QACd,SAAS,EAAE,SAAS;QACpB,KAAK,EAAE,KAAK;KACb,CAAC,CAAC;IAEH,
|
|
1
|
+
{"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/utils/error-handler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE5D;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,GAAG,IAAW;IACtC,IAAI,CAAC;QACH,yDAAyD;QACzD,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC9C,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,+CAA+C;QAC/C,yDAAyD;IAC3D,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,KAAU;IAKpC,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,MAAM,KAAK,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/D,MAAM,SAAS,GAAG,KAAK,EAAE,WAAW,EAAE,IAAI,IAAI,SAAS,CAAC;IAExD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,QAAgB,EAChB,MAAc,EACd,KAAU,EACV,MAAY;IAEZ,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAEhE,iDAAiD;IACjD,aAAa,CAAC,QAAQ,QAAQ,IAAI,MAAM,EAAE,EAAE,KAAK,EAAE;QACjD,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,MAAM;QACd,SAAS,EAAE,SAAS;QACpB,KAAK,EAAE,KAAK;KACb,CAAC,CAAC;IAEH,qDAAqD;IACrD,gBAAgB,CAAC,gBAAgB,QAAQ,IAAI,MAAM,GAAG,CAAC,CAAC;IACxD,gBAAgB,CAAC,eAAe,OAAO,EAAE,CAAC,CAAC;IAC3C,IAAI,KAAK,EAAE,CAAC;QACV,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;QACpC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,MAAM,EAAE,CAAC;QACX,gBAAgB,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAErB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC5B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,KAAU;IAClD,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAEhE,aAAa,CAAC,sBAAsB,EAAE,KAAK,EAAE;QAC3C,SAAS,EAAE,SAAS;QACpB,KAAK,EAAE,KAAK;KACb,CAAC,CAAC;IAEH,gBAAgB,CAAC,2BAA2B,CAAC,CAAC;IAC9C,gBAAgB,CAAC,eAAe,OAAO,EAAE,CAAC,CAAC;IAC3C,IAAI,KAAK,EAAE,CAAC;QACV,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;QACpC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7E,CAAC;IACD,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAErB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CACtC,SAAsB;IAEtB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAY,EAAE,EAAE;QAC/C,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAEhE,gBAAgB,CAAC,6CAA6C,CAAC,CAAC;QAChE,gBAAgB,CAAC,eAAe,OAAO,EAAE,CAAC,CAAC;QAC3C,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;QACpC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAE5E,aAAa,CAAC,oBAAoB,EAAE,KAAK,EAAE;YACzC,SAAS,EAAE,SAAS;YACpB,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;QAEH,gBAAgB,CAAC,0CAA0C,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,sCAAsC;IACtC,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAW,EAAE,OAAqB,EAAE,EAAE;QACtE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAEjE,gBAAgB,CAAC,sDAAsD,CAAC,CAAC;QACzE,gBAAgB,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC;QAC1C,IAAI,KAAK,EAAE,CAAC;YACV,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;YACpC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7E,CAAC;QAED,aAAa,CAAC,qBAAqB,EAAE,MAAM,EAAE;YAC3C,SAAS,EAAE,SAAS;YACpB,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;SACzB,CAAC,CAAC;QAEH,gBAAgB,CAAC,0CAA0C,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,2BAA2B;IAC3B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QAC9B,gBAAgB,CAAC,iCAAiC,CAAC,CAAC;QACpD,IAAI,SAAS,EAAE,CAAC;YACd,SAAS,EAAE,CAAC;QACd,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;QAC/B,gBAAgB,CAAC,iCAAiC,CAAC,CAAC;QACpD,IAAI,SAAS,EAAE,CAAC;YACd,SAAS,EAAE,CAAC;QACd,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,QAAgB,EAChB,MAAc,EACd,iBAAyB;IAEzB,QAAQ,CAAC,MAAM,EAAE,uBAAuB,QAAQ,IAAI,MAAM,EAAE,EAAE;QAC5D,UAAU,EAAE,iBAAiB;KAC9B,CAAC,CAAC;IAEH,OAAO,iBAAiB,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parameter Validation with Typo Detection for MCP Tools
|
|
3
|
+
*
|
|
4
|
+
* Provides comprehensive parameter validation with:
|
|
5
|
+
* - Missing required parameter detection
|
|
6
|
+
* - Typo suggestions using Levenshtein distance
|
|
7
|
+
* - Structured error messages with examples
|
|
8
|
+
* - Support for all sqlew MCP tools
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* validateActionParams('decision', 'set', params);
|
|
12
|
+
* // Throws ValidationError with structured details if validation fails
|
|
13
|
+
*/
|
|
14
|
+
import type { DecisionAction, TaskAction, FileAction, ConstraintAction, StatsAction, ConfigAction, MessageAction } from '../types.js';
|
|
15
|
+
/**
|
|
16
|
+
* Validate action parameters and throw structured error if invalid
|
|
17
|
+
*
|
|
18
|
+
* @param tool Tool name (e.g., 'decision', 'task', 'file', 'constraint', 'stats')
|
|
19
|
+
* @param action Action name (accepts both typed action enums and strings for backward compatibility)
|
|
20
|
+
* @param params Parameters provided by user
|
|
21
|
+
* @throws Error with structured ValidationError JSON if validation fails
|
|
22
|
+
*/
|
|
23
|
+
export declare function validateActionParams(tool: string, action: DecisionAction | TaskAction | FileAction | ConstraintAction | StatsAction | ConfigAction | MessageAction | string, params: any): void;
|
|
24
|
+
/**
|
|
25
|
+
* Validate batch operation parameters
|
|
26
|
+
* Used by set_batch, record_batch, batch_create actions
|
|
27
|
+
*
|
|
28
|
+
* @param tool Tool name
|
|
29
|
+
* @param batchParamName Name of the batch array parameter (e.g., 'decisions', 'tasks', 'file_changes')
|
|
30
|
+
* @param items Array of items to validate
|
|
31
|
+
* @param itemAction Action name for each item (e.g., 'set' for decision items)
|
|
32
|
+
* @param maxItems Maximum allowed items (default: 50)
|
|
33
|
+
* @throws Error if batch validation fails
|
|
34
|
+
*/
|
|
35
|
+
export declare function validateBatchParams(tool: string, batchParamName: string, items: any[], itemAction: string, maxItems?: number): void;
|
|
36
|
+
/**
|
|
37
|
+
* Get all available actions for a tool
|
|
38
|
+
* Useful for error messages suggesting alternatives
|
|
39
|
+
*
|
|
40
|
+
* @param tool Tool name
|
|
41
|
+
* @returns Array of available action names
|
|
42
|
+
*/
|
|
43
|
+
export declare function getAvailableActions(tool: string): string[];
|
|
44
|
+
/**
|
|
45
|
+
* Suggest similar action names using Levenshtein distance
|
|
46
|
+
* Helps users when they misspell an action name
|
|
47
|
+
*
|
|
48
|
+
* @param tool Tool name
|
|
49
|
+
* @param providedAction Action name provided by user
|
|
50
|
+
* @returns Array of suggested action names (max 3)
|
|
51
|
+
*/
|
|
52
|
+
export declare function suggestSimilarActions(tool: string, providedAction: string): string[];
|
|
53
|
+
//# sourceMappingURL=parameter-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parameter-validator.d.ts","sourceRoot":"","sources":["../../src/utils/parameter-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAEV,cAAc,EACd,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,aAAa,EACd,MAAM,aAAa,CAAC;AAgKrB;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,cAAc,GAAG,UAAU,GAAG,UAAU,GAAG,gBAAgB,GAAG,WAAW,GAAG,YAAY,GAAG,aAAa,GAAG,MAAM,EACzH,MAAM,EAAE,GAAG,GACV,IAAI,CAmDN;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,GAAG,EAAE,EACZ,UAAU,EAAE,MAAM,EAClB,QAAQ,GAAE,MAAW,GACpB,IAAI,CAqCN;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAM1D;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,EAAE,CAcpF"}
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parameter Validation with Typo Detection for MCP Tools
|
|
3
|
+
*
|
|
4
|
+
* Provides comprehensive parameter validation with:
|
|
5
|
+
* - Missing required parameter detection
|
|
6
|
+
* - Typo suggestions using Levenshtein distance
|
|
7
|
+
* - Structured error messages with examples
|
|
8
|
+
* - Support for all sqlew MCP tools
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* validateActionParams('decision', 'set', params);
|
|
12
|
+
* // Throws ValidationError with structured details if validation fails
|
|
13
|
+
*/
|
|
14
|
+
import { getActionSpec, ACTION_SPECS_BY_TOOL } from './action-specs.js';
|
|
15
|
+
/**
|
|
16
|
+
* Calculate Levenshtein distance between two strings
|
|
17
|
+
* Used for typo detection (e.g., "context_key" → "key")
|
|
18
|
+
*
|
|
19
|
+
* @param a First string
|
|
20
|
+
* @param b Second string
|
|
21
|
+
* @returns Edit distance (number of single-character edits needed)
|
|
22
|
+
*/
|
|
23
|
+
function levenshteinDistance(a, b) {
|
|
24
|
+
if (a.length === 0)
|
|
25
|
+
return b.length;
|
|
26
|
+
if (b.length === 0)
|
|
27
|
+
return a.length;
|
|
28
|
+
const matrix = [];
|
|
29
|
+
// Initialize matrix
|
|
30
|
+
for (let i = 0; i <= b.length; i++) {
|
|
31
|
+
matrix[i] = [i];
|
|
32
|
+
}
|
|
33
|
+
for (let j = 0; j <= a.length; j++) {
|
|
34
|
+
matrix[0][j] = j;
|
|
35
|
+
}
|
|
36
|
+
// Fill matrix
|
|
37
|
+
for (let i = 1; i <= b.length; i++) {
|
|
38
|
+
for (let j = 1; j <= a.length; j++) {
|
|
39
|
+
if (b.charAt(i - 1) === a.charAt(j - 1)) {
|
|
40
|
+
matrix[i][j] = matrix[i - 1][j - 1];
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, // substitution
|
|
44
|
+
matrix[i][j - 1] + 1, // insertion
|
|
45
|
+
matrix[i - 1][j] + 1 // deletion
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return matrix[b.length][a.length];
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Common abbreviation patterns for AI parameter typos
|
|
54
|
+
* Maps abbreviated/shortened names to their full parameter names
|
|
55
|
+
*/
|
|
56
|
+
const COMMON_ABBREVIATIONS = {
|
|
57
|
+
desc: ['description'],
|
|
58
|
+
val: ['value'],
|
|
59
|
+
prio: ['priority'],
|
|
60
|
+
pri: ['priority'],
|
|
61
|
+
config: ['configuration'],
|
|
62
|
+
msg: ['message'],
|
|
63
|
+
crit: ['criteria', 'critical'],
|
|
64
|
+
req: ['required'],
|
|
65
|
+
opt: ['optional'],
|
|
66
|
+
param: ['parameter', 'params'],
|
|
67
|
+
arg: ['argument', 'args'],
|
|
68
|
+
attr: ['attribute', 'attributes'],
|
|
69
|
+
prop: ['property', 'properties'],
|
|
70
|
+
stat: ['status', 'statistics'],
|
|
71
|
+
info: ['information'],
|
|
72
|
+
temp: ['template'],
|
|
73
|
+
rel: ['related', 'relation'],
|
|
74
|
+
deps: ['dependencies'],
|
|
75
|
+
dep: ['dependency'],
|
|
76
|
+
ref: ['reference'],
|
|
77
|
+
ctx: ['context'],
|
|
78
|
+
db: ['database'],
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* Check if provided parameter matches any common abbreviation pattern
|
|
82
|
+
*
|
|
83
|
+
* @param provided Parameter name provided by user (potentially abbreviated)
|
|
84
|
+
* @param validParams List of valid parameters to match against
|
|
85
|
+
* @returns Matched full parameter name, or null if no match
|
|
86
|
+
*/
|
|
87
|
+
function checkAbbreviation(provided, validParams) {
|
|
88
|
+
const lowerProvided = provided.toLowerCase();
|
|
89
|
+
// Direct abbreviation match
|
|
90
|
+
if (COMMON_ABBREVIATIONS[lowerProvided]) {
|
|
91
|
+
for (const fullForm of COMMON_ABBREVIATIONS[lowerProvided]) {
|
|
92
|
+
// Check if any valid parameter contains this full form
|
|
93
|
+
const match = validParams.find(v => v.toLowerCase().includes(fullForm));
|
|
94
|
+
if (match) {
|
|
95
|
+
return match;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// Check if provided is a prefix abbreviation (e.g., "desc" → "description")
|
|
100
|
+
for (const valid of validParams) {
|
|
101
|
+
if (valid.length > provided.length &&
|
|
102
|
+
valid.toLowerCase().startsWith(lowerProvided) &&
|
|
103
|
+
provided.length >= 3) { // Minimum 3 chars for prefix matching
|
|
104
|
+
return valid;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Find typo suggestions for provided parameters
|
|
111
|
+
* Uses:
|
|
112
|
+
* 1. Abbreviation dictionary for common AI shortcuts
|
|
113
|
+
* 2. Prefix matching for partial parameter names
|
|
114
|
+
* 3. Levenshtein distance ≤ 2 for typos
|
|
115
|
+
*
|
|
116
|
+
* @param providedParams Parameters actually provided by user
|
|
117
|
+
* @param validParams All valid parameters (required + optional)
|
|
118
|
+
* @returns Map of typo → suggested correction
|
|
119
|
+
*/
|
|
120
|
+
function findTypoSuggestions(providedParams, validParams) {
|
|
121
|
+
const suggestions = {};
|
|
122
|
+
for (const provided of providedParams) {
|
|
123
|
+
// Skip 'action' parameter (always valid)
|
|
124
|
+
if (provided === 'action') {
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
// Skip if it's a valid parameter
|
|
128
|
+
if (validParams.includes(provided)) {
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
// 1. Check abbreviation dictionary first (highest priority)
|
|
132
|
+
const abbreviationMatch = checkAbbreviation(provided, validParams);
|
|
133
|
+
if (abbreviationMatch) {
|
|
134
|
+
suggestions[provided] = abbreviationMatch;
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
// 2. Find closest match within Levenshtein distance ≤ 2
|
|
138
|
+
let bestMatch = null;
|
|
139
|
+
let bestDistance = Infinity;
|
|
140
|
+
for (const valid of validParams) {
|
|
141
|
+
const distance = levenshteinDistance(provided.toLowerCase(), valid.toLowerCase());
|
|
142
|
+
if (distance <= 2 && distance < bestDistance) {
|
|
143
|
+
bestDistance = distance;
|
|
144
|
+
bestMatch = valid;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
if (bestMatch) {
|
|
148
|
+
suggestions[provided] = bestMatch;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return suggestions;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Validate action parameters and throw structured error if invalid
|
|
155
|
+
*
|
|
156
|
+
* @param tool Tool name (e.g., 'decision', 'task', 'file', 'constraint', 'stats')
|
|
157
|
+
* @param action Action name (accepts both typed action enums and strings for backward compatibility)
|
|
158
|
+
* @param params Parameters provided by user
|
|
159
|
+
* @throws Error with structured ValidationError JSON if validation fails
|
|
160
|
+
*/
|
|
161
|
+
export function validateActionParams(tool, action, params) {
|
|
162
|
+
// Skip validation for help actions
|
|
163
|
+
const helpActions = ['help', 'example', 'use_case', 'help_action', 'help_params',
|
|
164
|
+
'help_tool', 'help_use_case', 'help_list_use_cases', 'help_next_actions'];
|
|
165
|
+
if (helpActions.includes(action)) {
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
// Get action specification
|
|
169
|
+
const spec = getActionSpec(tool, action);
|
|
170
|
+
if (!spec) {
|
|
171
|
+
throw new Error(`Unknown action "${action}" for tool "${tool}". Use action: "help" to see available actions, or action: "use_case" for comprehensive scenarios.`);
|
|
172
|
+
}
|
|
173
|
+
// Check for missing required parameters
|
|
174
|
+
const missingParams = [];
|
|
175
|
+
for (const requiredParam of spec.required) {
|
|
176
|
+
if (params[requiredParam] === undefined || params[requiredParam] === null || params[requiredParam] === '') {
|
|
177
|
+
missingParams.push(requiredParam);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
// Get all provided parameters (excluding 'action')
|
|
181
|
+
const providedParams = Object.keys(params).filter(p => p !== 'action');
|
|
182
|
+
// All valid parameters for this action
|
|
183
|
+
const allValidParams = [...spec.required, ...spec.optional];
|
|
184
|
+
// Find typo suggestions
|
|
185
|
+
const typoSuggestions = findTypoSuggestions(providedParams, allValidParams);
|
|
186
|
+
// If validation fails, throw structured error
|
|
187
|
+
if (missingParams.length > 0 || Object.keys(typoSuggestions).length > 0) {
|
|
188
|
+
const error = {
|
|
189
|
+
error: missingParams.length > 0
|
|
190
|
+
? `Missing required parameter${missingParams.length > 1 ? 's' : ''} for action '${action}': ${missingParams.join(', ')}`
|
|
191
|
+
: `Invalid parameter name${Object.keys(typoSuggestions).length > 1 ? 's' : ''} detected`,
|
|
192
|
+
action: action,
|
|
193
|
+
missing_params: missingParams.length > 0 ? missingParams : undefined,
|
|
194
|
+
required_params: spec.required,
|
|
195
|
+
optional_params: spec.optional,
|
|
196
|
+
you_provided: providedParams,
|
|
197
|
+
did_you_mean: Object.keys(typoSuggestions).length > 0 ? typoSuggestions : undefined,
|
|
198
|
+
example: spec.example,
|
|
199
|
+
hint: spec.hint,
|
|
200
|
+
need_help: `For comprehensive scenarios and examples, try: ${tool}({ action: "use_case" })`
|
|
201
|
+
};
|
|
202
|
+
// Throw error with JSON-formatted details for easy parsing by AI agents
|
|
203
|
+
throw new Error(JSON.stringify(error, null, 2));
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Validate batch operation parameters
|
|
208
|
+
* Used by set_batch, record_batch, batch_create actions
|
|
209
|
+
*
|
|
210
|
+
* @param tool Tool name
|
|
211
|
+
* @param batchParamName Name of the batch array parameter (e.g., 'decisions', 'tasks', 'file_changes')
|
|
212
|
+
* @param items Array of items to validate
|
|
213
|
+
* @param itemAction Action name for each item (e.g., 'set' for decision items)
|
|
214
|
+
* @param maxItems Maximum allowed items (default: 50)
|
|
215
|
+
* @throws Error if batch validation fails
|
|
216
|
+
*/
|
|
217
|
+
export function validateBatchParams(tool, batchParamName, items, itemAction, maxItems = 50) {
|
|
218
|
+
// Check if batch parameter exists and is an array
|
|
219
|
+
if (!items || !Array.isArray(items)) {
|
|
220
|
+
throw new Error(`Parameter "${batchParamName}" is required and must be an array`);
|
|
221
|
+
}
|
|
222
|
+
// Check array is not empty
|
|
223
|
+
if (items.length === 0) {
|
|
224
|
+
// Allow empty arrays (will return empty success response)
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
// Check max items constraint
|
|
228
|
+
if (items.length > maxItems) {
|
|
229
|
+
throw new Error(`Parameter "${batchParamName}" must contain at most ${maxItems} items (got ${items.length})`);
|
|
230
|
+
}
|
|
231
|
+
// Validate each item in the batch
|
|
232
|
+
const itemErrors = [];
|
|
233
|
+
for (let i = 0; i < items.length; i++) {
|
|
234
|
+
try {
|
|
235
|
+
validateActionParams(tool, itemAction, items[i]);
|
|
236
|
+
}
|
|
237
|
+
catch (error) {
|
|
238
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
239
|
+
itemErrors.push({
|
|
240
|
+
index: i,
|
|
241
|
+
error: message
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
// If any items have validation errors, throw aggregate error
|
|
246
|
+
if (itemErrors.length > 0) {
|
|
247
|
+
const errorSummary = itemErrors.map(e => `Item ${e.index}: ${e.error}`).join('\n');
|
|
248
|
+
throw new Error(`Batch validation failed for ${itemErrors.length} item(s):\n${errorSummary}`);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Get all available actions for a tool
|
|
253
|
+
* Useful for error messages suggesting alternatives
|
|
254
|
+
*
|
|
255
|
+
* @param tool Tool name
|
|
256
|
+
* @returns Array of available action names
|
|
257
|
+
*/
|
|
258
|
+
export function getAvailableActions(tool) {
|
|
259
|
+
const toolSpecs = ACTION_SPECS_BY_TOOL[tool];
|
|
260
|
+
if (!toolSpecs) {
|
|
261
|
+
return [];
|
|
262
|
+
}
|
|
263
|
+
return Object.keys(toolSpecs);
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Suggest similar action names using Levenshtein distance
|
|
267
|
+
* Helps users when they misspell an action name
|
|
268
|
+
*
|
|
269
|
+
* @param tool Tool name
|
|
270
|
+
* @param providedAction Action name provided by user
|
|
271
|
+
* @returns Array of suggested action names (max 3)
|
|
272
|
+
*/
|
|
273
|
+
export function suggestSimilarActions(tool, providedAction) {
|
|
274
|
+
const availableActions = getAvailableActions(tool);
|
|
275
|
+
const scored = availableActions.map(action => ({
|
|
276
|
+
action,
|
|
277
|
+
distance: levenshteinDistance(providedAction.toLowerCase(), action.toLowerCase())
|
|
278
|
+
}));
|
|
279
|
+
// Sort by distance and return top 3 within distance ≤ 3
|
|
280
|
+
return scored
|
|
281
|
+
.filter(item => item.distance <= 3)
|
|
282
|
+
.sort((a, b) => a.distance - b.distance)
|
|
283
|
+
.slice(0, 3)
|
|
284
|
+
.map(item => item.action);
|
|
285
|
+
}
|
|
286
|
+
//# sourceMappingURL=parameter-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parameter-validator.js","sourceRoot":"","sources":["../../src/utils/parameter-validator.ts"],"names":[],"mappings":"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"}
|
package/docs/BEST_PRACTICES.md
CHANGED
|
@@ -33,11 +33,80 @@
|
|
|
33
33
|
|
|
34
34
|
---
|
|
35
35
|
|
|
36
|
+
## Parameter Validation Patterns
|
|
37
|
+
|
|
38
|
+
**NEW in dev branch**: sqlew provides comprehensive parameter validation with helpful error messages.
|
|
39
|
+
|
|
40
|
+
### How Validation Helps
|
|
41
|
+
|
|
42
|
+
1. **Catch Typos Early** - Get instant feedback on misspelled parameter names
|
|
43
|
+
2. **Learn by Example** - Every error includes a working example
|
|
44
|
+
3. **Clear Requirements** - Know exactly which parameters are required vs optional
|
|
45
|
+
4. **Visual Markers** - Help responses show 🔴 REQUIRED and ⚪ OPTIONAL
|
|
46
|
+
|
|
47
|
+
### Common Validation Errors and Fixes
|
|
48
|
+
|
|
49
|
+
**Missing Required Parameter:**
|
|
50
|
+
```javascript
|
|
51
|
+
// ❌ ERROR: Missing required parameter 'value'
|
|
52
|
+
{ action: "set", key: "auth_method" }
|
|
53
|
+
|
|
54
|
+
// ✅ FIX: Add required parameter
|
|
55
|
+
{ action: "set", key: "auth_method", value: "JWT authentication chosen" }
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**Typo in Parameter Name:**
|
|
59
|
+
```javascript
|
|
60
|
+
// ❌ ERROR: Unknown parameter 'tgas' (did you mean 'tags'?)
|
|
61
|
+
{ action: "set", key: "api/v2", value: "New API", tgas: ["api"] }
|
|
62
|
+
|
|
63
|
+
// ✅ FIX: Correct the typo
|
|
64
|
+
{ action: "set", key: "api/v2", value: "New API", tags: ["api"] }
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**Wrong Action Name:**
|
|
68
|
+
```javascript
|
|
69
|
+
// ❌ ERROR: Unknown action 'create_task' (did you mean 'create'?)
|
|
70
|
+
{ action: "create_task", title: "Implement auth" }
|
|
71
|
+
|
|
72
|
+
// ✅ FIX: Use correct action name
|
|
73
|
+
{ action: "create", title: "Implement auth" }
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**Parameters from Wrong Action:**
|
|
77
|
+
```javascript
|
|
78
|
+
// ❌ ERROR: Unknown parameter 'task_id' for action 'create'
|
|
79
|
+
{ action: "create", task_id: 5, title: "New task" }
|
|
80
|
+
|
|
81
|
+
// ✅ FIX: Use 'update' action instead
|
|
82
|
+
{ action: "update", task_id: 5, title: "Updated task" }
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Reading Validation Error Messages
|
|
86
|
+
|
|
87
|
+
Error messages provide structured guidance:
|
|
88
|
+
|
|
89
|
+
```json
|
|
90
|
+
{
|
|
91
|
+
"error": "Missing required parameter for action 'set': value",
|
|
92
|
+
"missing_params": ["value"], // What you're missing
|
|
93
|
+
"required_params": ["key", "value"], // All required fields
|
|
94
|
+
"optional_params": ["agent", "layer"], // All optional fields
|
|
95
|
+
"you_provided": ["key", "layer"], // What you actually sent
|
|
96
|
+
"example": { ... }, // Working example
|
|
97
|
+
"hint": "Use 'quick_set' for simpler..." // Helpful tip
|
|
98
|
+
}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
36
103
|
## Common Errors
|
|
37
104
|
|
|
38
105
|
| Error | Cause | Solution |
|
|
39
106
|
|-------|-------|----------|
|
|
40
107
|
| "Unknown action: undefined" | Missing `action` | Always include `action` parameter |
|
|
108
|
+
| "Missing required parameter" | Omitted required field | Check `required_params` in error message |
|
|
109
|
+
| "Unknown parameter" | Typo or wrong action | Check `did_you_mean` suggestions |
|
|
41
110
|
| "Parameter 'value' is required" | Using `defaults` with templates | Pass parameters directly, not in `defaults` |
|
|
42
111
|
| "Invalid layer" | Wrong layer name | Use: presentation, business, data, infrastructure, cross-cutting |
|
|
43
112
|
| "Invalid status" | Wrong status | Use: active, deprecated, draft |
|
package/docs/CONFIGURATION.md
CHANGED
|
@@ -613,37 +613,53 @@ stale_hours_in_progress = 200 # ❌ Error: must be <= 168
|
|
|
613
613
|
|
|
614
614
|
## Runtime Configuration
|
|
615
615
|
|
|
616
|
-
###
|
|
616
|
+
### ⚠️ Config Tool Removed (dev branch)
|
|
617
617
|
|
|
618
|
-
|
|
618
|
+
**DEPRECATED**: The `config` MCP tool has been removed in the dev branch.
|
|
619
619
|
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
620
|
+
**Why removed:**
|
|
621
|
+
- Messaging system deprecated (primary use case eliminated)
|
|
622
|
+
- File-based configuration (`.sqlew/config.toml`) is clearer and more maintainable
|
|
623
|
+
- Runtime updates were confusing (changes lost on restart unless manually synced to file)
|
|
624
|
+
- Configuration drift between `m_config` table and config file
|
|
625
625
|
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
626
|
+
**Migration path:**
|
|
627
|
+
- ✅ **Use `.sqlew/config.toml`** for all configuration (persistent, version-controlled)
|
|
628
|
+
- ✅ **Use CLI arguments** for one-time overrides (`--autodelete-message-hours=48`)
|
|
629
|
+
- ❌ **Do NOT use** `config` tool (removed in dev, will error)
|
|
630
|
+
|
|
631
|
+
### File-Based Configuration (Recommended)
|
|
632
|
+
|
|
633
|
+
Edit `.sqlew/config.toml` directly:
|
|
634
|
+
|
|
635
|
+
```toml
|
|
636
|
+
[database]
|
|
637
|
+
path = ".sqlew/custom.db"
|
|
638
|
+
|
|
639
|
+
[autodelete]
|
|
640
|
+
ignore_weekend = true
|
|
641
|
+
message_hours = 48 # Messaging system deprecated, but config preserved for backward compatibility
|
|
632
642
|
```
|
|
633
643
|
|
|
634
|
-
|
|
644
|
+
**Benefits:**
|
|
645
|
+
1. **Version control** - Commit config to git, share with team
|
|
646
|
+
2. **No drift** - Single source of truth (no table vs file conflicts)
|
|
647
|
+
3. **Clear documentation** - Config file documents project requirements
|
|
648
|
+
4. **Type safety** - TOML validation catches errors at startup
|
|
649
|
+
|
|
650
|
+
### Configuration Persistence (Legacy - v3.6.6 and earlier)
|
|
635
651
|
|
|
636
|
-
**How it
|
|
652
|
+
**How it worked (DEPRECATED):**
|
|
637
653
|
1. Config file loaded on startup
|
|
638
654
|
2. Values merged with CLI arguments
|
|
639
655
|
3. Final config written to `m_config` table
|
|
640
656
|
4. MCP `config` tool updates `m_config` table
|
|
641
657
|
5. Changes persist until next startup (then config file reloads)
|
|
642
658
|
|
|
643
|
-
**
|
|
644
|
-
1.
|
|
645
|
-
2.
|
|
646
|
-
3.
|
|
659
|
+
**Migration to file-based:**
|
|
660
|
+
1. Remove all `config` tool calls from workflows
|
|
661
|
+
2. Update `.sqlew/config.toml` directly
|
|
662
|
+
3. Restart MCP server to apply changes
|
|
647
663
|
|
|
648
664
|
---
|
|
649
665
|
|