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.
Files changed (61) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/LICENSE +52 -52
  3. package/README.md +3 -2
  4. package/assets/sample-agents/sqlew-architect.md +89 -273
  5. package/assets/sample-agents/sqlew-researcher.md +87 -237
  6. package/assets/sample-agents/sqlew-scrum-master.md +105 -108
  7. package/dist/index.js +32 -71
  8. package/dist/index.js.map +1 -1
  9. package/dist/migrations/knex/bootstrap/20251025020452_create_master_tables.d.ts.map +1 -1
  10. package/dist/migrations/knex/bootstrap/20251025020452_create_master_tables.js +49 -34
  11. package/dist/migrations/knex/bootstrap/20251025020452_create_master_tables.js.map +1 -1
  12. package/dist/migrations/knex/bootstrap/20251025021152_create_transaction_tables.d.ts.map +1 -1
  13. package/dist/migrations/knex/bootstrap/20251025021152_create_transaction_tables.js +211 -175
  14. package/dist/migrations/knex/bootstrap/20251025021152_create_transaction_tables.js.map +1 -1
  15. package/dist/tests/all-features.test.js +0 -71
  16. package/dist/tests/all-features.test.js.map +1 -1
  17. package/dist/tests/parameter-validation.test.d.ts +8 -0
  18. package/dist/tests/parameter-validation.test.d.ts.map +1 -0
  19. package/dist/tests/parameter-validation.test.js +461 -0
  20. package/dist/tests/parameter-validation.test.js.map +1 -0
  21. package/dist/tools/constraints.d.ts.map +1 -1
  22. package/dist/tools/constraints.js +7 -8
  23. package/dist/tools/constraints.js.map +1 -1
  24. package/dist/tools/context.d.ts.map +1 -1
  25. package/dist/tools/context.js +68 -39
  26. package/dist/tools/context.js.map +1 -1
  27. package/dist/tools/files.d.ts.map +1 -1
  28. package/dist/tools/files.js +9 -7
  29. package/dist/tools/files.js.map +1 -1
  30. package/dist/tools/help-queries.d.ts.map +1 -1
  31. package/dist/tools/help-queries.js +20 -14
  32. package/dist/tools/help-queries.js.map +1 -1
  33. package/dist/tools/messaging.d.ts +1 -1
  34. package/dist/tools/messaging.js +10 -10
  35. package/dist/tools/tasks.d.ts.map +1 -1
  36. package/dist/tools/tasks.js +13 -0
  37. package/dist/tools/tasks.js.map +1 -1
  38. package/dist/tools/utils.d.ts.map +1 -1
  39. package/dist/tools/utils.js +15 -12
  40. package/dist/tools/utils.js.map +1 -1
  41. package/dist/types.d.ts +93 -1
  42. package/dist/types.d.ts.map +1 -1
  43. package/dist/utils/action-specs.d.ts +46 -0
  44. package/dist/utils/action-specs.d.ts.map +1 -0
  45. package/dist/utils/action-specs.js +527 -0
  46. package/dist/utils/action-specs.js.map +1 -0
  47. package/dist/utils/error-handler.d.ts.map +1 -1
  48. package/dist/utils/error-handler.js +41 -24
  49. package/dist/utils/error-handler.js.map +1 -1
  50. package/dist/utils/parameter-validator.d.ts +53 -0
  51. package/dist/utils/parameter-validator.d.ts.map +1 -0
  52. package/dist/utils/parameter-validator.js +286 -0
  53. package/dist/utils/parameter-validator.js.map +1 -0
  54. package/docs/BEST_PRACTICES.md +69 -0
  55. package/docs/CONFIGURATION.md +35 -19
  56. package/docs/TOOL_REFERENCE.md +178 -0
  57. package/package.json +86 -86
  58. package/dist/tools/config.d.ts +0 -50
  59. package/dist/tools/config.d.ts.map +0 -1
  60. package/dist/tools/config.js +0 -170
  61. 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":"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"}
1
+ {"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/utils/error-handler.ts"],"names":[],"mappings":"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"}
@@ -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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"}
@@ -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 |
@@ -613,37 +613,53 @@ stale_hours_in_progress = 200 # ❌ Error: must be <= 168
613
613
 
614
614
  ## Runtime Configuration
615
615
 
616
- ### Update via MCP Tools
616
+ ### ⚠️ Config Tool Removed (dev branch)
617
617
 
618
- Use the `config` tool to change settings at runtime:
618
+ **DEPRECATED**: The `config` MCP tool has been removed in the dev branch.
619
619
 
620
- ```javascript
621
- // Get current configuration
622
- {
623
- action: "get"
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
- // Update settings (persists to m_config table)
627
- {
628
- action: "update",
629
- autodelete_message_hours: 48,
630
- autodelete_ignore_weekend: true
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
- ### Configuration Persistence
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 works:**
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
- **To persist runtime changes:**
644
- 1. Update values via MCP `config` tool
645
- 2. Manually update `.sqlew/config.toml` to match
646
- 3. Or regenerate config file from database (manual export)
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