sqlew 3.5.3 → 3.6.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.
- package/CHANGELOG.md +247 -1772
- package/README.md +70 -304
- package/assets/config.example.toml +106 -0
- package/dist/adapters/index.d.ts +11 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +21 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/mysql-adapter.d.ts +31 -0
- package/dist/adapters/mysql-adapter.d.ts.map +1 -0
- package/dist/adapters/mysql-adapter.js +63 -0
- package/dist/adapters/mysql-adapter.js.map +1 -0
- package/dist/adapters/postgresql-adapter.d.ts +31 -0
- package/dist/adapters/postgresql-adapter.d.ts.map +1 -0
- package/dist/adapters/postgresql-adapter.js +63 -0
- package/dist/adapters/postgresql-adapter.js.map +1 -0
- package/dist/adapters/sqlite-adapter.d.ts +37 -0
- package/dist/adapters/sqlite-adapter.d.ts.map +1 -0
- package/dist/adapters/sqlite-adapter.js +129 -0
- package/dist/adapters/sqlite-adapter.js.map +1 -0
- package/dist/adapters/types.d.ts +33 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +2 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/cli.js +55 -54
- package/dist/cli.js.map +1 -1
- package/dist/config/example-generator.d.ts +11 -0
- package/dist/config/example-generator.d.ts.map +1 -0
- package/dist/config/example-generator.js +48 -0
- package/dist/config/example-generator.js.map +1 -0
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +4 -0
- package/dist/config/loader.js.map +1 -1
- package/dist/config/types.d.ts +11 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js.map +1 -1
- package/dist/database.d.ts +56 -121
- package/dist/database.d.ts.map +1 -1
- package/dist/database.js +266 -414
- package/dist/database.js.map +1 -1
- package/dist/index.js +329 -245
- package/dist/index.js.map +1 -1
- package/dist/knexfile.d.ts +6 -0
- package/dist/knexfile.d.ts.map +1 -0
- package/dist/knexfile.js +85 -0
- package/dist/knexfile.js.map +1 -0
- package/dist/migrations/add-help-system-tables.d.ts +35 -0
- package/dist/migrations/add-help-system-tables.d.ts.map +1 -0
- package/dist/migrations/add-help-system-tables.js +206 -0
- package/dist/migrations/add-help-system-tables.js.map +1 -0
- package/dist/migrations/add-token-tracking.d.ts +28 -0
- package/dist/migrations/add-token-tracking.d.ts.map +1 -0
- package/dist/migrations/add-token-tracking.js +108 -0
- package/dist/migrations/add-token-tracking.js.map +1 -0
- package/dist/migrations/index.d.ts +25 -12
- package/dist/migrations/index.d.ts.map +1 -1
- package/dist/migrations/index.js +147 -20
- package/dist/migrations/index.js.map +1 -1
- package/dist/migrations/knex/20251025020452_create_master_tables.d.ts +4 -0
- package/dist/migrations/knex/20251025020452_create_master_tables.d.ts.map +1 -0
- package/dist/migrations/knex/20251025020452_create_master_tables.js +65 -0
- package/dist/migrations/knex/20251025020452_create_master_tables.js.map +1 -0
- package/dist/migrations/knex/20251025021152_create_transaction_tables.d.ts +4 -0
- package/dist/migrations/knex/20251025021152_create_transaction_tables.d.ts.map +1 -0
- package/dist/migrations/knex/20251025021152_create_transaction_tables.js +235 -0
- package/dist/migrations/knex/20251025021152_create_transaction_tables.js.map +1 -0
- package/dist/migrations/knex/20251025021351_create_indexes.d.ts +4 -0
- package/dist/migrations/knex/20251025021351_create_indexes.d.ts.map +1 -0
- package/dist/migrations/knex/20251025021351_create_indexes.js +62 -0
- package/dist/migrations/knex/20251025021351_create_indexes.js.map +1 -0
- package/dist/migrations/knex/20251025021416_seed_master_data.d.ts +4 -0
- package/dist/migrations/knex/20251025021416_seed_master_data.d.ts.map +1 -0
- package/dist/migrations/knex/20251025021416_seed_master_data.js +58 -0
- package/dist/migrations/knex/20251025021416_seed_master_data.js.map +1 -0
- package/dist/migrations/knex/20251025070349_create_views.d.ts +4 -0
- package/dist/migrations/knex/20251025070349_create_views.d.ts.map +1 -0
- package/dist/migrations/knex/20251025070349_create_views.js +143 -0
- package/dist/migrations/knex/20251025070349_create_views.js.map +1 -0
- package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.d.ts +4 -0
- package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.d.ts.map +1 -0
- package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.js +15 -0
- package/dist/migrations/knex/20251025081221_add_link_type_to_task_decision_links.js.map +1 -0
- package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.d.ts +8 -0
- package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.d.ts.map +1 -0
- package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.js +12 -0
- package/dist/migrations/knex/20251025082220_fix_task_dependencies_columns.js.map +1 -0
- package/dist/migrations/knex/20251025090000_create_help_system_tables.d.ts +19 -0
- package/dist/migrations/knex/20251025090000_create_help_system_tables.d.ts.map +1 -0
- package/dist/migrations/knex/20251025090000_create_help_system_tables.js +115 -0
- package/dist/migrations/knex/20251025090000_create_help_system_tables.js.map +1 -0
- package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.d.ts +13 -0
- package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.d.ts.map +1 -0
- package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.js +377 -0
- package/dist/migrations/knex/20251025090100_seed_help_categories_and_use_cases.js.map +1 -0
- package/dist/migrations/knex/20251025100000_seed_help_metadata.d.ts +15 -0
- package/dist/migrations/knex/20251025100000_seed_help_metadata.d.ts.map +1 -0
- package/dist/migrations/knex/20251025100000_seed_help_metadata.js +253 -0
- package/dist/migrations/knex/20251025100000_seed_help_metadata.js.map +1 -0
- package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.d.ts +16 -0
- package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.d.ts.map +1 -0
- package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.js +276 -0
- package/dist/migrations/knex/20251025100100_seed_remaining_use_cases.js.map +1 -0
- package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.d.ts +8 -0
- package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.d.ts.map +1 -0
- package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.js +64 -0
- package/dist/migrations/knex/20251025120000_add_cascade_to_task_dependencies.js.map +1 -0
- package/dist/migrations/knex/20251027000000_add_agent_reuse_system.d.ts +14 -0
- package/dist/migrations/knex/20251027000000_add_agent_reuse_system.d.ts.map +1 -0
- package/dist/migrations/knex/20251027000000_add_agent_reuse_system.js +34 -0
- package/dist/migrations/knex/20251027000000_add_agent_reuse_system.js.map +1 -0
- package/dist/migrations/knex/20251027010000_add_task_constraint_to_decision_context.d.ts +4 -0
- package/dist/migrations/knex/20251027010000_add_task_constraint_to_decision_context.d.ts.map +1 -0
- package/dist/migrations/knex/20251027010000_add_task_constraint_to_decision_context.js +24 -0
- package/dist/migrations/knex/20251027010000_add_task_constraint_to_decision_context.js.map +1 -0
- package/dist/migrations/knex/20251027020000_update_agent_reusability.d.ts +16 -0
- package/dist/migrations/knex/20251027020000_update_agent_reusability.d.ts.map +1 -0
- package/dist/migrations/knex/20251027020000_update_agent_reusability.js +27 -0
- package/dist/migrations/knex/20251027020000_update_agent_reusability.js.map +1 -0
- package/dist/migrations/seed-help-data.d.ts +48 -0
- package/dist/migrations/seed-help-data.d.ts.map +1 -0
- package/dist/migrations/seed-help-data.js +1466 -0
- package/dist/migrations/seed-help-data.js.map +1 -0
- package/dist/migrations/seed-tool-metadata.d.ts +24 -0
- package/dist/migrations/seed-tool-metadata.d.ts.map +1 -0
- package/dist/migrations/seed-tool-metadata.js +392 -0
- package/dist/migrations/seed-tool-metadata.js.map +1 -0
- package/dist/migrations/v3.6.0-help-system-refactor.d.ts +46 -0
- package/dist/migrations/v3.6.0-help-system-refactor.d.ts.map +1 -0
- package/dist/migrations/v3.6.0-help-system-refactor.js +223 -0
- package/dist/migrations/v3.6.0-help-system-refactor.js.map +1 -0
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +2 -0
- package/dist/schema.js.map +1 -1
- package/dist/tests/agent-reuse.test.d.ts +6 -0
- package/dist/tests/agent-reuse.test.d.ts.map +1 -0
- package/dist/tests/agent-reuse.test.js +242 -0
- package/dist/tests/agent-reuse.test.js.map +1 -0
- package/dist/tests/all-features.test.d.ts +7 -0
- package/dist/tests/all-features.test.d.ts.map +1 -0
- package/dist/tests/all-features.test.js +514 -0
- package/dist/tests/all-features.test.js.map +1 -0
- package/dist/tests/git-aware-completion.test.js +89 -70
- package/dist/tests/git-aware-completion.test.js.map +1 -1
- package/dist/tests/help-system.test.d.ts +23 -0
- package/dist/tests/help-system.test.d.ts.map +1 -0
- package/dist/tests/help-system.test.js +374 -0
- package/dist/tests/help-system.test.js.map +1 -0
- package/dist/tests/tasks.auto-pruning-decision-link.test.js +92 -78
- package/dist/tests/tasks.auto-pruning-decision-link.test.js.map +1 -1
- package/dist/tests/tasks.auto-pruning-partial.test.js +106 -95
- package/dist/tests/tasks.auto-pruning-partial.test.js.map +1 -1
- package/dist/tests/tasks.auto-pruning-persistence.test.js +115 -97
- package/dist/tests/tasks.auto-pruning-persistence.test.js.map +1 -1
- package/dist/tests/tasks.auto-pruning-safety.test.js +124 -103
- package/dist/tests/tasks.auto-pruning-safety.test.js.map +1 -1
- package/dist/tests/tasks.dependencies.test.js +338 -307
- package/dist/tests/tasks.dependencies.test.js.map +1 -1
- package/dist/tests/tasks.link-file-backward-compat.test.js +116 -104
- package/dist/tests/tasks.link-file-backward-compat.test.js.map +1 -1
- package/dist/tests/tasks.watch-files-action.test.js +122 -101
- package/dist/tests/tasks.watch-files-action.test.js.map +1 -1
- package/dist/tests/tasks.watch-files-parameter.test.js +105 -94
- package/dist/tests/tasks.watch-files-parameter.test.js.map +1 -1
- package/dist/tests/two-step-git-completion.test.js +176 -133
- package/dist/tests/two-step-git-completion.test.js.map +1 -1
- package/dist/tests/vcs-staging.test.js +1 -1
- package/dist/tests/vcs-staging.test.js.map +1 -1
- package/dist/tools/config.d.ts +9 -6
- package/dist/tools/config.d.ts.map +1 -1
- package/dist/tools/config.js +16 -14
- package/dist/tools/config.js.map +1 -1
- package/dist/tools/constraints.d.ts +10 -7
- package/dist/tools/constraints.d.ts.map +1 -1
- package/dist/tools/constraints.js +73 -51
- package/dist/tools/constraints.js.map +1 -1
- package/dist/tools/context.d.ts +36 -33
- package/dist/tools/context.d.ts.map +1 -1
- package/dist/tools/context.js +441 -340
- package/dist/tools/context.js.map +1 -1
- package/dist/tools/files.d.ts +12 -9
- package/dist/tools/files.d.ts.map +1 -1
- package/dist/tools/files.js +173 -95
- package/dist/tools/files.js.map +1 -1
- package/dist/tools/help-queries.d.ts +130 -0
- package/dist/tools/help-queries.d.ts.map +1 -0
- package/dist/tools/help-queries.js +393 -0
- package/dist/tools/help-queries.js.map +1 -0
- package/dist/tools/messaging.d.ts +14 -11
- package/dist/tools/messaging.d.ts.map +1 -1
- package/dist/tools/messaging.js +239 -133
- package/dist/tools/messaging.js.map +1 -1
- package/dist/tools/tasks.d.ts +18 -16
- package/dist/tools/tasks.d.ts.map +1 -1
- package/dist/tools/tasks.js +519 -442
- package/dist/tools/tasks.js.map +1 -1
- package/dist/tools/utils.d.ts +14 -11
- package/dist/tools/utils.d.ts.map +1 -1
- package/dist/tools/utils.js +90 -122
- package/dist/tools/utils.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/activity-logging.d.ts +114 -0
- package/dist/utils/activity-logging.d.ts.map +1 -0
- package/dist/utils/activity-logging.js +162 -0
- package/dist/utils/activity-logging.js.map +1 -0
- package/dist/utils/batch.d.ts +2 -2
- package/dist/utils/batch.d.ts.map +1 -1
- package/dist/utils/batch.js +8 -8
- package/dist/utils/batch.js.map +1 -1
- package/dist/utils/cleanup.d.ts +24 -14
- package/dist/utils/cleanup.d.ts.map +1 -1
- package/dist/utils/cleanup.js +37 -27
- package/dist/utils/cleanup.js.map +1 -1
- package/dist/utils/debug-logger.d.ts +99 -0
- package/dist/utils/debug-logger.d.ts.map +1 -0
- package/dist/utils/debug-logger.js +267 -0
- package/dist/utils/debug-logger.js.map +1 -0
- package/dist/utils/error-handler.d.ts +28 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +121 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/help-tracking.d.ts +55 -0
- package/dist/utils/help-tracking.d.ts.map +1 -0
- package/dist/utils/help-tracking.js +88 -0
- package/dist/utils/help-tracking.js.map +1 -0
- package/dist/utils/param-parser.d.ts +23 -0
- package/dist/utils/param-parser.d.ts.map +1 -0
- package/dist/utils/param-parser.js +52 -0
- package/dist/utils/param-parser.js.map +1 -0
- package/dist/utils/retention.d.ts +17 -7
- package/dist/utils/retention.d.ts.map +1 -1
- package/dist/utils/retention.js +31 -12
- package/dist/utils/retention.js.map +1 -1
- package/dist/utils/task-stale-detection.d.ts +15 -13
- package/dist/utils/task-stale-detection.d.ts.map +1 -1
- package/dist/utils/task-stale-detection.js +100 -302
- package/dist/utils/task-stale-detection.js.map +1 -1
- package/dist/utils/token-estimation.d.ts +72 -0
- package/dist/utils/token-estimation.d.ts.map +1 -0
- package/dist/utils/token-estimation.js +71 -0
- package/dist/utils/token-estimation.js.map +1 -0
- package/dist/utils/token-logging.d.ts +48 -0
- package/dist/utils/token-logging.d.ts.map +1 -0
- package/dist/utils/token-logging.js +112 -0
- package/dist/utils/token-logging.js.map +1 -0
- package/dist/utils/view-queries.d.ts +34 -0
- package/dist/utils/view-queries.d.ts.map +1 -0
- package/dist/utils/view-queries.js +192 -0
- package/dist/utils/view-queries.js.map +1 -0
- package/dist/watcher/file-watcher.d.ts.map +1 -1
- package/dist/watcher/file-watcher.js +25 -11
- package/dist/watcher/file-watcher.js.map +1 -1
- package/docs/BEST_PRACTICES.md +56 -448
- package/docs/MIGRATION_v3.6.0.md +170 -0
- package/docs/SHARED_CONCEPTS.md +63 -208
- package/docs/TASK_OVERVIEW.md +2 -2
- package/docs/TOOL_SELECTION.md +41 -248
- package/package.json +17 -4
package/dist/index.js
CHANGED
|
@@ -6,8 +6,9 @@
|
|
|
6
6
|
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
7
7
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
8
8
|
import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
9
|
-
import { initializeDatabase, closeDatabase, setConfigValue, getAllConfig } from './database.js';
|
|
9
|
+
import { initializeDatabase, closeDatabase, setConfigValue, getAllConfig, getAdapter } from './database.js';
|
|
10
10
|
import { CONFIG_KEYS } from './constants.js';
|
|
11
|
+
import { loadConfigFile } from './config/loader.js';
|
|
11
12
|
import { setDecision, getContext, getDecision, searchByTags, getVersions, searchByLayer, quickSetDecision, searchAdvanced, setDecisionBatch, hasUpdates, setFromTemplate, createTemplate, listTemplates, hardDeleteDecision, addDecisionContextAction, listDecisionContextsAction, decisionHelp, decisionExample } from './tools/context.js';
|
|
12
13
|
import { sendMessage, getMessages, markRead, sendMessageBatch, messageHelp, messageExample } from './tools/messaging.js';
|
|
13
14
|
import { recordFileChange, getFileChanges, checkFileLock, recordFileChangeBatch, fileHelp, fileExample } from './tools/files.js';
|
|
@@ -16,6 +17,11 @@ import { getLayerSummary, clearOldData, getStats, getActivityLog, flushWAL, stat
|
|
|
16
17
|
import { getConfig, updateConfig, configHelp, configExample } from './tools/config.js';
|
|
17
18
|
import { createTask, updateTask, getTask, listTasks, moveTask, linkTask, archiveTask, batchCreateTasks, addDependency, removeDependency, getDependencies, watchFiles, getPrunedFiles, linkPrunedFile, taskHelp, taskExample, watcherStatus } from './tools/tasks.js';
|
|
18
19
|
import { FileWatcher } from './watcher/index.js';
|
|
20
|
+
import { trackAndReturnHelp } from './utils/help-tracking.js';
|
|
21
|
+
import { queryHelpAction, queryHelpParams, queryHelpTool, queryHelpUseCase, queryHelpListUseCases, queryHelpNextActions } from './tools/help-queries.js';
|
|
22
|
+
import { initDebugLogger, closeDebugLogger, debugLog, debugLogToolCall, debugLogToolResponse } from './utils/debug-logger.js';
|
|
23
|
+
import { handleToolError, handleInitializationError, setupGlobalErrorHandlers } from './utils/error-handler.js';
|
|
24
|
+
import { ensureSqlewDirectory } from './config/example-generator.js';
|
|
19
25
|
// Parse command-line arguments
|
|
20
26
|
const args = process.argv.slice(2);
|
|
21
27
|
const parsedArgs = {};
|
|
@@ -46,6 +52,12 @@ for (let i = 0; i < args.length; i++) {
|
|
|
46
52
|
else if (arg === '--autodelete-file-history-days' && i + 1 < args.length) {
|
|
47
53
|
parsedArgs.autodeleteFileHistoryDays = parseInt(args[++i], 10);
|
|
48
54
|
}
|
|
55
|
+
else if (arg.startsWith('--debug-log=')) {
|
|
56
|
+
parsedArgs.debugLogPath = arg.split('=')[1];
|
|
57
|
+
}
|
|
58
|
+
else if (arg === '--debug-log' && i + 1 < args.length) {
|
|
59
|
+
parsedArgs.debugLogPath = args[++i];
|
|
60
|
+
}
|
|
49
61
|
else if (!arg.startsWith('--')) {
|
|
50
62
|
// Backward compatibility: first non-flag argument is dbPath
|
|
51
63
|
if (!parsedArgs.dbPath) {
|
|
@@ -53,33 +65,12 @@ for (let i = 0; i < args.length; i++) {
|
|
|
53
65
|
}
|
|
54
66
|
}
|
|
55
67
|
}
|
|
56
|
-
|
|
57
|
-
//
|
|
68
|
+
// Load config file and determine database path
|
|
69
|
+
// Priority: CLI --db-path > config file > default
|
|
70
|
+
const fileConfig = loadConfigFile();
|
|
71
|
+
const dbPath = parsedArgs.dbPath || fileConfig.database?.path;
|
|
72
|
+
// Initialize database (will be set after async init completes)
|
|
58
73
|
let db;
|
|
59
|
-
try {
|
|
60
|
-
db = initializeDatabase(dbPath);
|
|
61
|
-
// Apply CLI config overrides if provided
|
|
62
|
-
if (parsedArgs.autodeleteIgnoreWeekend !== undefined) {
|
|
63
|
-
setConfigValue(db, CONFIG_KEYS.AUTODELETE_IGNORE_WEEKEND, parsedArgs.autodeleteIgnoreWeekend ? '1' : '0');
|
|
64
|
-
}
|
|
65
|
-
if (parsedArgs.autodeleteMessageHours !== undefined) {
|
|
66
|
-
setConfigValue(db, CONFIG_KEYS.AUTODELETE_MESSAGE_HOURS, String(parsedArgs.autodeleteMessageHours));
|
|
67
|
-
}
|
|
68
|
-
if (parsedArgs.autodeleteFileHistoryDays !== undefined) {
|
|
69
|
-
setConfigValue(db, CONFIG_KEYS.AUTODELETE_FILE_HISTORY_DAYS, String(parsedArgs.autodeleteFileHistoryDays));
|
|
70
|
-
}
|
|
71
|
-
// Display current config
|
|
72
|
-
const config = getAllConfig(db);
|
|
73
|
-
const ignoreWeekend = config[CONFIG_KEYS.AUTODELETE_IGNORE_WEEKEND] === '1';
|
|
74
|
-
const messageHours = config[CONFIG_KEYS.AUTODELETE_MESSAGE_HOURS];
|
|
75
|
-
const fileHistoryDays = config[CONFIG_KEYS.AUTODELETE_FILE_HISTORY_DAYS];
|
|
76
|
-
console.error('✓ MCP Shared Context Server initialized');
|
|
77
|
-
console.error(` Auto-delete config: messages=${messageHours}h, file_history=${fileHistoryDays}d, ignore_weekend=${ignoreWeekend}`);
|
|
78
|
-
}
|
|
79
|
-
catch (error) {
|
|
80
|
-
console.error('✗ Failed to initialize database:', error);
|
|
81
|
-
process.exit(1);
|
|
82
|
-
}
|
|
83
74
|
// Create MCP server
|
|
84
75
|
const server = new Server({
|
|
85
76
|
name: 'mcp-sqlew',
|
|
@@ -100,55 +91,16 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
100
91
|
Context Management - Store decisions with metadata (tags, layers, versions, scopes)
|
|
101
92
|
|
|
102
93
|
Use action: "help" for detailed documentation.
|
|
103
|
-
Use action: "example" for comprehensive usage examples
|
|
94
|
+
Use action: "example" for comprehensive usage examples.
|
|
95
|
+
Use action: "use_case" for practical scenarios and when-to-use guidance.`,
|
|
104
96
|
inputSchema: {
|
|
105
97
|
type: 'object',
|
|
106
98
|
properties: {
|
|
107
99
|
action: {
|
|
108
100
|
type: 'string',
|
|
109
101
|
description: 'Action',
|
|
110
|
-
enum: ['set', 'get', 'list', 'search_tags', 'search_layer', 'versions', 'quick_set', 'search_advanced', 'set_batch', 'has_updates', 'set_from_template', 'create_template', 'list_templates', 'hard_delete', 'add_decision_context', 'list_decision_contexts', 'help', 'example']
|
|
111
|
-
}
|
|
112
|
-
key: { type: 'string' },
|
|
113
|
-
value: { type: ['string', 'number'] },
|
|
114
|
-
agent: { type: 'string' },
|
|
115
|
-
layer: { type: 'string', enum: ['presentation', 'business', 'data', 'infrastructure', 'cross-cutting'] },
|
|
116
|
-
version: { type: 'string' },
|
|
117
|
-
status: { type: 'string', enum: ['active', 'deprecated', 'draft'] },
|
|
118
|
-
tags: { type: 'array', items: { type: 'string' } },
|
|
119
|
-
scopes: { type: 'array', items: { type: 'string' } },
|
|
120
|
-
scope: { type: 'string' },
|
|
121
|
-
tag_match: { type: 'string', enum: ['AND', 'OR'] },
|
|
122
|
-
include_tags: { type: 'boolean' },
|
|
123
|
-
layers: { type: 'array', items: { type: 'string' } },
|
|
124
|
-
tags_all: { type: 'array', items: { type: 'string' } },
|
|
125
|
-
tags_any: { type: 'array', items: { type: 'string' } },
|
|
126
|
-
exclude_tags: { type: 'array', items: { type: 'string' } },
|
|
127
|
-
updated_after: { type: 'string' },
|
|
128
|
-
updated_before: { type: 'string' },
|
|
129
|
-
decided_by: { type: 'array', items: { type: 'string' } },
|
|
130
|
-
statuses: { type: 'array', items: { type: 'string', enum: ['active', 'deprecated', 'draft'] } },
|
|
131
|
-
search_text: { type: 'string' },
|
|
132
|
-
sort_by: { type: 'string', enum: ['updated', 'key', 'version'] },
|
|
133
|
-
sort_order: { type: 'string', enum: ['asc', 'desc'] },
|
|
134
|
-
limit: { type: 'number' },
|
|
135
|
-
offset: { type: 'number' },
|
|
136
|
-
decisions: { type: 'array' },
|
|
137
|
-
atomic: { type: 'boolean' },
|
|
138
|
-
agent_name: { type: 'string' },
|
|
139
|
-
since_timestamp: { type: 'string' },
|
|
140
|
-
template: { type: 'string' },
|
|
141
|
-
name: { type: 'string' },
|
|
142
|
-
defaults: { type: 'object' },
|
|
143
|
-
required_fields: { type: 'array', items: { type: 'string' } },
|
|
144
|
-
created_by: { type: 'string' },
|
|
145
|
-
rationale: { type: 'string' },
|
|
146
|
-
alternatives_considered: { type: ['array', 'string'] },
|
|
147
|
-
tradeoffs: { type: ['object', 'string'] },
|
|
148
|
-
decision_key: { type: 'string' },
|
|
149
|
-
related_task_id: { type: 'number' },
|
|
150
|
-
related_constraint_id: { type: 'number' },
|
|
151
|
-
include_context: { type: 'boolean' },
|
|
102
|
+
enum: ['set', 'get', 'list', 'search_tags', 'search_layer', 'versions', 'quick_set', 'search_advanced', 'set_batch', 'has_updates', 'set_from_template', 'create_template', 'list_templates', 'hard_delete', 'add_decision_context', 'list_decision_contexts', 'help', 'example', 'use_case']
|
|
103
|
+
}
|
|
152
104
|
},
|
|
153
105
|
required: ['action'],
|
|
154
106
|
},
|
|
@@ -160,26 +112,16 @@ Use action: "example" for comprehensive usage examples.`,
|
|
|
160
112
|
Agent Messaging - Send messages between agents with priority levels and read tracking
|
|
161
113
|
|
|
162
114
|
Use action: "help" for detailed documentation.
|
|
163
|
-
Use action: "example" for comprehensive usage examples
|
|
115
|
+
Use action: "example" for comprehensive usage examples.
|
|
116
|
+
Use action: "use_case" for practical scenarios and when-to-use guidance.`,
|
|
164
117
|
inputSchema: {
|
|
165
118
|
type: 'object',
|
|
166
119
|
properties: {
|
|
167
|
-
action: {
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
message: { type: 'string' },
|
|
173
|
-
priority: { type: 'string', enum: ['low', 'medium', 'high', 'critical'], default: 'medium' },
|
|
174
|
-
payload: { type: 'object' },
|
|
175
|
-
message_ids: { type: 'array', items: { type: 'number' } },
|
|
176
|
-
unread_only: { type: 'boolean', default: false },
|
|
177
|
-
msg_type_filter: { type: 'string', enum: ['decision', 'warning', 'request', 'info'] },
|
|
178
|
-
priority_filter: { type: 'string', enum: ['low', 'medium', 'high', 'critical'] },
|
|
179
|
-
limit: { type: 'number', default: 50 },
|
|
180
|
-
// send_batch parameters
|
|
181
|
-
messages: { type: 'array', description: 'Array of messages for batch operation (max: 50)' },
|
|
182
|
-
atomic: { type: 'boolean', description: 'Atomic mode - all succeed or all fail (default: true)' },
|
|
120
|
+
action: {
|
|
121
|
+
type: 'string',
|
|
122
|
+
description: 'Action',
|
|
123
|
+
enum: ['send', 'get', 'mark_read', 'send_batch', 'help', 'example', 'use_case']
|
|
124
|
+
}
|
|
183
125
|
},
|
|
184
126
|
required: ['action'],
|
|
185
127
|
},
|
|
@@ -191,22 +133,16 @@ Use action: "example" for comprehensive usage examples.`,
|
|
|
191
133
|
File Change Tracking - Track file changes with layer classification and lock detection
|
|
192
134
|
|
|
193
135
|
Use action: "help" for detailed documentation.
|
|
194
|
-
Use action: "example" for comprehensive usage examples
|
|
136
|
+
Use action: "example" for comprehensive usage examples.
|
|
137
|
+
Use action: "use_case" for practical scenarios and when-to-use guidance.`,
|
|
195
138
|
inputSchema: {
|
|
196
139
|
type: 'object',
|
|
197
140
|
properties: {
|
|
198
|
-
action: {
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
description: { type: 'string' },
|
|
204
|
-
since: { type: 'string' },
|
|
205
|
-
limit: { type: 'number' },
|
|
206
|
-
lock_duration: { type: 'number' },
|
|
207
|
-
// record_batch parameters
|
|
208
|
-
file_changes: { type: 'array', description: 'Array of file changes for batch operation (max: 50)' },
|
|
209
|
-
atomic: { type: 'boolean', description: 'Atomic mode - all succeed or all fail (default: true)' },
|
|
141
|
+
action: {
|
|
142
|
+
type: 'string',
|
|
143
|
+
description: 'Action',
|
|
144
|
+
enum: ['record', 'get', 'check_lock', 'record_batch', 'help', 'example', 'use_case']
|
|
145
|
+
}
|
|
210
146
|
},
|
|
211
147
|
required: ['action'],
|
|
212
148
|
},
|
|
@@ -218,20 +154,16 @@ Use action: "example" for comprehensive usage examples.`,
|
|
|
218
154
|
Constraint Management - Manage architectural rules and requirements
|
|
219
155
|
|
|
220
156
|
Use action: "help" for detailed documentation.
|
|
221
|
-
Use action: "example" for comprehensive usage examples
|
|
157
|
+
Use action: "example" for comprehensive usage examples.
|
|
158
|
+
Use action: "use_case" for practical scenarios and when-to-use guidance.`,
|
|
222
159
|
inputSchema: {
|
|
223
160
|
type: 'object',
|
|
224
161
|
properties: {
|
|
225
|
-
action: {
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
layer: { type: 'string', enum: ['presentation', 'business', 'data', 'infrastructure', 'cross-cutting'] },
|
|
231
|
-
tags: { type: 'array', items: { type: 'string' } },
|
|
232
|
-
created_by: { type: 'string' },
|
|
233
|
-
active_only: { type: 'boolean', default: true },
|
|
234
|
-
limit: { type: 'number', default: 50 },
|
|
162
|
+
action: {
|
|
163
|
+
type: 'string',
|
|
164
|
+
description: 'Action',
|
|
165
|
+
enum: ['add', 'get', 'deactivate', 'help', 'example', 'use_case']
|
|
166
|
+
}
|
|
235
167
|
},
|
|
236
168
|
required: ['action'],
|
|
237
169
|
},
|
|
@@ -243,17 +175,16 @@ Use action: "example" for comprehensive usage examples.`,
|
|
|
243
175
|
Statistics & Utilities - View stats, activity logs, manage data cleanup, and WAL checkpoints
|
|
244
176
|
|
|
245
177
|
Use action: "help" for detailed documentation.
|
|
246
|
-
Use action: "example" for comprehensive usage examples
|
|
178
|
+
Use action: "example" for comprehensive usage examples.
|
|
179
|
+
Use action: "use_case" for practical scenarios and when-to-use guidance.`,
|
|
247
180
|
inputSchema: {
|
|
248
181
|
type: 'object',
|
|
249
182
|
properties: {
|
|
250
|
-
action: {
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
actions: { type: 'array', items: { type: 'string' }, description: 'Filter by action types' },
|
|
256
|
-
limit: { type: 'number', description: 'Max results (default: 100)' },
|
|
183
|
+
action: {
|
|
184
|
+
type: 'string',
|
|
185
|
+
description: 'Action',
|
|
186
|
+
enum: ['layer_summary', 'db_stats', 'clear', 'activity_log', 'flush', 'help_action', 'help_params', 'help_tool', 'help_use_case', 'help_list_use_cases', 'help_next_actions', 'help', 'example', 'use_case']
|
|
187
|
+
}
|
|
257
188
|
},
|
|
258
189
|
required: ['action'],
|
|
259
190
|
},
|
|
@@ -265,14 +196,16 @@ Use action: "example" for comprehensive usage examples.`,
|
|
|
265
196
|
Configuration - Manage auto-deletion settings with weekend-aware retention
|
|
266
197
|
|
|
267
198
|
Use action: "help" for detailed documentation.
|
|
268
|
-
Use action: "example" for comprehensive usage examples
|
|
199
|
+
Use action: "example" for comprehensive usage examples.
|
|
200
|
+
Use action: "use_case" for practical scenarios and when-to-use guidance.`,
|
|
269
201
|
inputSchema: {
|
|
270
202
|
type: 'object',
|
|
271
203
|
properties: {
|
|
272
|
-
action: {
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
204
|
+
action: {
|
|
205
|
+
type: 'string',
|
|
206
|
+
description: 'Action',
|
|
207
|
+
enum: ['get', 'update', 'help', 'example', 'use_case']
|
|
208
|
+
}
|
|
276
209
|
},
|
|
277
210
|
required: ['action'],
|
|
278
211
|
},
|
|
@@ -284,40 +217,16 @@ Use action: "example" for comprehensive usage examples.`,
|
|
|
284
217
|
Kanban Task Watcher - AI-optimized task management with auto-stale detection
|
|
285
218
|
|
|
286
219
|
Use action: "help" for detailed documentation.
|
|
287
|
-
Use action: "example" for comprehensive usage examples
|
|
220
|
+
Use action: "example" for comprehensive usage examples.
|
|
221
|
+
Use action: "use_case" for practical scenarios and when-to-use guidance.`,
|
|
288
222
|
inputSchema: {
|
|
289
223
|
type: 'object',
|
|
290
224
|
properties: {
|
|
291
|
-
action: {
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
notes: { type: 'string' },
|
|
297
|
-
priority: { type: 'number', minimum: 1, maximum: 4 },
|
|
298
|
-
assigned_agent: { type: 'string' },
|
|
299
|
-
created_by_agent: { type: 'string' },
|
|
300
|
-
layer: { type: 'string', enum: ['presentation', 'business', 'data', 'infrastructure', 'cross-cutting'] },
|
|
301
|
-
tags: { type: 'array', items: { type: 'string' } },
|
|
302
|
-
status: { type: 'string', enum: ['todo', 'in_progress', 'waiting_review', 'blocked', 'done', 'archived'] },
|
|
303
|
-
new_status: { type: 'string', enum: ['todo', 'in_progress', 'waiting_review', 'blocked', 'done', 'archived'] },
|
|
304
|
-
link_type: { type: 'string', enum: ['decision', 'constraint', 'file'] },
|
|
305
|
-
target_id: { type: ['string', 'number'] },
|
|
306
|
-
link_relation: { type: 'string' },
|
|
307
|
-
limit: { type: 'number', default: 50 },
|
|
308
|
-
offset: { type: 'number', default: 0 },
|
|
309
|
-
// watch_files parameters (v3.4.1)
|
|
310
|
-
watch_files: { type: 'array', items: { type: 'string' }, description: 'Array of file paths to watch for auto-tracking' },
|
|
311
|
-
file_path: { type: 'string', description: 'Single file path (for watch_files action)' },
|
|
312
|
-
file_paths: { type: 'array', items: { type: 'string' }, description: 'Array of file paths (for watch_files action)' },
|
|
313
|
-
// batch_create parameters
|
|
314
|
-
tasks: { type: 'array', description: 'Array of tasks for batch operation (max: 50)' },
|
|
315
|
-
atomic: { type: 'boolean', description: 'Atomic mode - all succeed or all fail (default: true)' },
|
|
316
|
-
// dependency parameters (v3.2.0)
|
|
317
|
-
blocker_task_id: { type: 'number' },
|
|
318
|
-
blocked_task_id: { type: 'number' },
|
|
319
|
-
include_dependencies: { type: 'boolean' },
|
|
320
|
-
include_dependency_counts: { type: 'boolean' },
|
|
225
|
+
action: {
|
|
226
|
+
type: 'string',
|
|
227
|
+
description: 'Action',
|
|
228
|
+
enum: ['create', 'update', 'get', 'list', 'move', 'link', 'archive', 'batch_create', 'add_dependency', 'remove_dependency', 'get_dependencies', 'watch_files', 'watcher', 'help', 'example', 'use_case']
|
|
229
|
+
}
|
|
321
230
|
},
|
|
322
231
|
required: ['action'],
|
|
323
232
|
},
|
|
@@ -329,34 +238,37 @@ Use action: "example" for comprehensive usage examples.`,
|
|
|
329
238
|
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
330
239
|
const { name, arguments: args } = request.params;
|
|
331
240
|
const params = args;
|
|
241
|
+
const action = params.action || 'N/A';
|
|
242
|
+
// Debug logging: Tool call
|
|
243
|
+
debugLogToolCall(name, action, params);
|
|
332
244
|
try {
|
|
333
245
|
let result;
|
|
334
246
|
switch (name) {
|
|
335
247
|
case 'decision':
|
|
336
248
|
switch (params.action) {
|
|
337
249
|
case 'set':
|
|
338
|
-
result = setDecision(params);
|
|
250
|
+
result = await setDecision(params);
|
|
339
251
|
break;
|
|
340
252
|
case 'get':
|
|
341
|
-
result = getDecision(params);
|
|
253
|
+
result = await getDecision(params);
|
|
342
254
|
break;
|
|
343
255
|
case 'list':
|
|
344
|
-
result = getContext(params);
|
|
256
|
+
result = await getContext(params);
|
|
345
257
|
break;
|
|
346
258
|
case 'search_tags':
|
|
347
|
-
result = searchByTags({ tags: params.tags, match_mode: params.tag_match, status: params.status, layer: params.layer });
|
|
259
|
+
result = await searchByTags({ tags: params.tags, match_mode: params.tag_match, status: params.status, layer: params.layer });
|
|
348
260
|
break;
|
|
349
261
|
case 'search_layer':
|
|
350
|
-
result = searchByLayer({ layer: params.layer, status: params.status, include_tags: params.include_tags });
|
|
262
|
+
result = await searchByLayer({ layer: params.layer, status: params.status, include_tags: params.include_tags });
|
|
351
263
|
break;
|
|
352
264
|
case 'versions':
|
|
353
|
-
result = getVersions(params);
|
|
265
|
+
result = await getVersions(params);
|
|
354
266
|
break;
|
|
355
267
|
case 'quick_set':
|
|
356
|
-
result = quickSetDecision(params);
|
|
268
|
+
result = await quickSetDecision(params);
|
|
357
269
|
break;
|
|
358
270
|
case 'search_advanced':
|
|
359
|
-
result = searchAdvanced({
|
|
271
|
+
result = await searchAdvanced({
|
|
360
272
|
layers: params.layers,
|
|
361
273
|
tags_all: params.tags_all,
|
|
362
274
|
tags_any: params.tags_any,
|
|
@@ -374,34 +286,46 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
374
286
|
});
|
|
375
287
|
break;
|
|
376
288
|
case 'set_batch':
|
|
377
|
-
result = setDecisionBatch({ decisions: params.decisions, atomic: params.atomic });
|
|
289
|
+
result = await setDecisionBatch({ decisions: params.decisions, atomic: params.atomic });
|
|
378
290
|
break;
|
|
379
291
|
case 'has_updates':
|
|
380
|
-
result = hasUpdates({ agent_name: params.agent_name, since_timestamp: params.since_timestamp });
|
|
292
|
+
result = await hasUpdates({ agent_name: params.agent_name, since_timestamp: params.since_timestamp });
|
|
381
293
|
break;
|
|
382
294
|
case 'set_from_template':
|
|
383
|
-
result = setFromTemplate(params);
|
|
295
|
+
result = await setFromTemplate(params);
|
|
384
296
|
break;
|
|
385
297
|
case 'create_template':
|
|
386
|
-
result = createTemplate(params);
|
|
298
|
+
result = await createTemplate(params);
|
|
387
299
|
break;
|
|
388
300
|
case 'list_templates':
|
|
389
|
-
result = listTemplates(params);
|
|
301
|
+
result = await listTemplates(params);
|
|
390
302
|
break;
|
|
391
303
|
case 'hard_delete':
|
|
392
|
-
result = hardDeleteDecision(params);
|
|
304
|
+
result = await hardDeleteDecision(params);
|
|
393
305
|
break;
|
|
394
306
|
case 'add_decision_context':
|
|
395
|
-
result = addDecisionContextAction(params);
|
|
307
|
+
result = await addDecisionContextAction(params);
|
|
396
308
|
break;
|
|
397
309
|
case 'list_decision_contexts':
|
|
398
|
-
result = listDecisionContextsAction(params);
|
|
310
|
+
result = await listDecisionContextsAction(params);
|
|
399
311
|
break;
|
|
400
312
|
case 'help':
|
|
401
|
-
|
|
313
|
+
const helpContent = decisionHelp();
|
|
314
|
+
trackAndReturnHelp('decision', 'help', JSON.stringify(helpContent));
|
|
315
|
+
result = helpContent;
|
|
402
316
|
break;
|
|
403
317
|
case 'example':
|
|
404
|
-
|
|
318
|
+
const exampleContent = decisionExample();
|
|
319
|
+
trackAndReturnHelp('decision', 'example', JSON.stringify(exampleContent));
|
|
320
|
+
result = exampleContent;
|
|
321
|
+
break;
|
|
322
|
+
case 'use_case':
|
|
323
|
+
result = await queryHelpListUseCases(getAdapter(), {
|
|
324
|
+
category: params.category,
|
|
325
|
+
complexity: params.complexity,
|
|
326
|
+
limit: params.limit,
|
|
327
|
+
offset: params.offset
|
|
328
|
+
});
|
|
405
329
|
break;
|
|
406
330
|
default: throw new Error(`Unknown action: ${params.action}`);
|
|
407
331
|
}
|
|
@@ -409,22 +333,34 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
409
333
|
case 'message':
|
|
410
334
|
switch (params.action) {
|
|
411
335
|
case 'send':
|
|
412
|
-
result = sendMessage(params);
|
|
336
|
+
result = await sendMessage(params);
|
|
413
337
|
break;
|
|
414
338
|
case 'get':
|
|
415
|
-
result = getMessages(params);
|
|
339
|
+
result = await getMessages(params);
|
|
416
340
|
break;
|
|
417
341
|
case 'mark_read':
|
|
418
|
-
result = markRead(params);
|
|
342
|
+
result = await markRead(params);
|
|
419
343
|
break;
|
|
420
344
|
case 'send_batch':
|
|
421
|
-
result = sendMessageBatch({ messages: params.messages, atomic: params.atomic });
|
|
345
|
+
result = await sendMessageBatch({ messages: params.messages, atomic: params.atomic });
|
|
422
346
|
break;
|
|
423
347
|
case 'help':
|
|
424
|
-
|
|
348
|
+
const msgHelpContent = messageHelp();
|
|
349
|
+
trackAndReturnHelp('message', 'help', JSON.stringify(msgHelpContent));
|
|
350
|
+
result = msgHelpContent;
|
|
425
351
|
break;
|
|
426
352
|
case 'example':
|
|
427
|
-
|
|
353
|
+
const msgExampleContent = messageExample();
|
|
354
|
+
trackAndReturnHelp('message', 'example', JSON.stringify(msgExampleContent));
|
|
355
|
+
result = msgExampleContent;
|
|
356
|
+
break;
|
|
357
|
+
case 'use_case':
|
|
358
|
+
result = await queryHelpListUseCases(getAdapter(), {
|
|
359
|
+
category: params.category,
|
|
360
|
+
complexity: params.complexity,
|
|
361
|
+
limit: params.limit,
|
|
362
|
+
offset: params.offset
|
|
363
|
+
});
|
|
428
364
|
break;
|
|
429
365
|
default: throw new Error(`Unknown action: ${params.action}`);
|
|
430
366
|
}
|
|
@@ -432,22 +368,34 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
432
368
|
case 'file':
|
|
433
369
|
switch (params.action) {
|
|
434
370
|
case 'record':
|
|
435
|
-
result = recordFileChange(params);
|
|
371
|
+
result = await recordFileChange(params);
|
|
436
372
|
break;
|
|
437
373
|
case 'get':
|
|
438
|
-
result = getFileChanges(params);
|
|
374
|
+
result = await getFileChanges(params);
|
|
439
375
|
break;
|
|
440
376
|
case 'check_lock':
|
|
441
|
-
result = checkFileLock(params);
|
|
377
|
+
result = await checkFileLock(params);
|
|
442
378
|
break;
|
|
443
379
|
case 'record_batch':
|
|
444
|
-
result = recordFileChangeBatch({ file_changes: params.file_changes, atomic: params.atomic });
|
|
380
|
+
result = await recordFileChangeBatch({ file_changes: params.file_changes, atomic: params.atomic });
|
|
445
381
|
break;
|
|
446
382
|
case 'help':
|
|
447
|
-
|
|
383
|
+
const fileHelpContent = fileHelp();
|
|
384
|
+
trackAndReturnHelp('file', 'help', JSON.stringify(fileHelpContent));
|
|
385
|
+
result = fileHelpContent;
|
|
448
386
|
break;
|
|
449
387
|
case 'example':
|
|
450
|
-
|
|
388
|
+
const fileExampleContent = fileExample();
|
|
389
|
+
trackAndReturnHelp('file', 'example', JSON.stringify(fileExampleContent));
|
|
390
|
+
result = fileExampleContent;
|
|
391
|
+
break;
|
|
392
|
+
case 'use_case':
|
|
393
|
+
result = await queryHelpListUseCases(getAdapter(), {
|
|
394
|
+
category: params.category,
|
|
395
|
+
complexity: params.complexity,
|
|
396
|
+
limit: params.limit,
|
|
397
|
+
offset: params.offset
|
|
398
|
+
});
|
|
451
399
|
break;
|
|
452
400
|
default: throw new Error(`Unknown action: ${params.action}`);
|
|
453
401
|
}
|
|
@@ -455,19 +403,31 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
455
403
|
case 'constraint':
|
|
456
404
|
switch (params.action) {
|
|
457
405
|
case 'add':
|
|
458
|
-
result = addConstraint(params);
|
|
406
|
+
result = await addConstraint(params);
|
|
459
407
|
break;
|
|
460
408
|
case 'get':
|
|
461
|
-
result = getConstraints(params);
|
|
409
|
+
result = await getConstraints(params);
|
|
462
410
|
break;
|
|
463
411
|
case 'deactivate':
|
|
464
|
-
result = deactivateConstraint(params);
|
|
412
|
+
result = await deactivateConstraint(params);
|
|
465
413
|
break;
|
|
466
414
|
case 'help':
|
|
467
|
-
|
|
415
|
+
const constraintHelpContent = constraintHelp();
|
|
416
|
+
trackAndReturnHelp('constraint', 'help', JSON.stringify(constraintHelpContent));
|
|
417
|
+
result = constraintHelpContent;
|
|
468
418
|
break;
|
|
469
419
|
case 'example':
|
|
470
|
-
|
|
420
|
+
const constraintExampleContent = constraintExample();
|
|
421
|
+
trackAndReturnHelp('constraint', 'example', JSON.stringify(constraintExampleContent));
|
|
422
|
+
result = constraintExampleContent;
|
|
423
|
+
break;
|
|
424
|
+
case 'use_case':
|
|
425
|
+
result = await queryHelpListUseCases(getAdapter(), {
|
|
426
|
+
category: params.category,
|
|
427
|
+
complexity: params.complexity,
|
|
428
|
+
limit: params.limit,
|
|
429
|
+
offset: params.offset
|
|
430
|
+
});
|
|
471
431
|
break;
|
|
472
432
|
default: throw new Error(`Unknown action: ${params.action}`);
|
|
473
433
|
}
|
|
@@ -475,16 +435,16 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
475
435
|
case 'stats':
|
|
476
436
|
switch (params.action) {
|
|
477
437
|
case 'layer_summary':
|
|
478
|
-
result = getLayerSummary();
|
|
438
|
+
result = await getLayerSummary();
|
|
479
439
|
break;
|
|
480
440
|
case 'db_stats':
|
|
481
|
-
result = getStats();
|
|
441
|
+
result = await getStats();
|
|
482
442
|
break;
|
|
483
443
|
case 'clear':
|
|
484
|
-
result = clearOldData(params);
|
|
444
|
+
result = await clearOldData(params);
|
|
485
445
|
break;
|
|
486
446
|
case 'activity_log':
|
|
487
|
-
result = getActivityLog({
|
|
447
|
+
result = await getActivityLog({
|
|
488
448
|
since: params.since,
|
|
489
449
|
agent_names: params.agent_names,
|
|
490
450
|
actions: params.actions,
|
|
@@ -492,13 +452,73 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
492
452
|
});
|
|
493
453
|
break;
|
|
494
454
|
case 'flush':
|
|
495
|
-
result = flushWAL();
|
|
455
|
+
result = await flushWAL();
|
|
456
|
+
break;
|
|
457
|
+
case 'help_action':
|
|
458
|
+
if (!params.target_tool || !params.target_action) {
|
|
459
|
+
result = { error: 'Parameters "target_tool" and "target_action" are required' };
|
|
460
|
+
}
|
|
461
|
+
else {
|
|
462
|
+
result = await queryHelpAction(getAdapter(), params.target_tool, params.target_action);
|
|
463
|
+
}
|
|
464
|
+
break;
|
|
465
|
+
case 'help_params':
|
|
466
|
+
if (!params.target_tool || !params.target_action) {
|
|
467
|
+
result = { error: 'Parameters "target_tool" and "target_action" are required' };
|
|
468
|
+
}
|
|
469
|
+
else {
|
|
470
|
+
result = await queryHelpParams(getAdapter(), params.target_tool, params.target_action);
|
|
471
|
+
}
|
|
472
|
+
break;
|
|
473
|
+
case 'help_tool':
|
|
474
|
+
if (!params.tool) {
|
|
475
|
+
result = { error: 'Parameter "tool" is required' };
|
|
476
|
+
}
|
|
477
|
+
else {
|
|
478
|
+
result = await queryHelpTool(getAdapter(), params.tool);
|
|
479
|
+
}
|
|
480
|
+
break;
|
|
481
|
+
case 'help_use_case':
|
|
482
|
+
if (!params.use_case_id) {
|
|
483
|
+
result = { error: 'Parameter "use_case_id" is required' };
|
|
484
|
+
}
|
|
485
|
+
else {
|
|
486
|
+
result = await queryHelpUseCase(getAdapter(), params.use_case_id);
|
|
487
|
+
}
|
|
488
|
+
break;
|
|
489
|
+
case 'help_list_use_cases':
|
|
490
|
+
result = await queryHelpListUseCases(getAdapter(), {
|
|
491
|
+
category: params.category,
|
|
492
|
+
complexity: params.complexity,
|
|
493
|
+
limit: params.limit,
|
|
494
|
+
offset: params.offset
|
|
495
|
+
});
|
|
496
|
+
break;
|
|
497
|
+
case 'help_next_actions':
|
|
498
|
+
if (!params.target_tool || !params.target_action) {
|
|
499
|
+
result = { error: 'Parameters "target_tool" and "target_action" are required' };
|
|
500
|
+
}
|
|
501
|
+
else {
|
|
502
|
+
result = await queryHelpNextActions(getAdapter(), params.target_tool, params.target_action);
|
|
503
|
+
}
|
|
496
504
|
break;
|
|
497
505
|
case 'help':
|
|
498
|
-
|
|
506
|
+
const statsHelpContent = statsHelp();
|
|
507
|
+
trackAndReturnHelp('stats', 'help', JSON.stringify(statsHelpContent));
|
|
508
|
+
result = statsHelpContent;
|
|
499
509
|
break;
|
|
500
510
|
case 'example':
|
|
501
|
-
|
|
511
|
+
const statsExampleContent = statsExample();
|
|
512
|
+
trackAndReturnHelp('stats', 'example', JSON.stringify(statsExampleContent));
|
|
513
|
+
result = statsExampleContent;
|
|
514
|
+
break;
|
|
515
|
+
case 'use_case':
|
|
516
|
+
result = await queryHelpListUseCases(getAdapter(), {
|
|
517
|
+
category: params.category,
|
|
518
|
+
complexity: params.complexity,
|
|
519
|
+
limit: params.limit,
|
|
520
|
+
offset: params.offset
|
|
521
|
+
});
|
|
502
522
|
break;
|
|
503
523
|
default: throw new Error(`Unknown action: ${params.action}`);
|
|
504
524
|
}
|
|
@@ -506,16 +526,28 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
506
526
|
case 'config':
|
|
507
527
|
switch (params.action) {
|
|
508
528
|
case 'get':
|
|
509
|
-
result = getConfig();
|
|
529
|
+
result = await getConfig();
|
|
510
530
|
break;
|
|
511
531
|
case 'update':
|
|
512
|
-
result = updateConfig(params);
|
|
532
|
+
result = await updateConfig(params);
|
|
513
533
|
break;
|
|
514
534
|
case 'help':
|
|
515
|
-
|
|
535
|
+
const configHelpContent = configHelp();
|
|
536
|
+
trackAndReturnHelp('config', 'help', JSON.stringify(configHelpContent));
|
|
537
|
+
result = configHelpContent;
|
|
516
538
|
break;
|
|
517
539
|
case 'example':
|
|
518
|
-
|
|
540
|
+
const configExampleContent = configExample();
|
|
541
|
+
trackAndReturnHelp('config', 'example', JSON.stringify(configExampleContent));
|
|
542
|
+
result = configExampleContent;
|
|
543
|
+
break;
|
|
544
|
+
case 'use_case':
|
|
545
|
+
result = await queryHelpListUseCases(getAdapter(), {
|
|
546
|
+
category: params.category,
|
|
547
|
+
complexity: params.complexity,
|
|
548
|
+
limit: params.limit,
|
|
549
|
+
offset: params.offset
|
|
550
|
+
});
|
|
519
551
|
break;
|
|
520
552
|
default: throw new Error(`Unknown action: ${params.action}`);
|
|
521
553
|
}
|
|
@@ -523,55 +555,67 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
523
555
|
case 'task':
|
|
524
556
|
switch (params.action) {
|
|
525
557
|
case 'create':
|
|
526
|
-
result = createTask(params);
|
|
558
|
+
result = await createTask(params);
|
|
527
559
|
break;
|
|
528
560
|
case 'update':
|
|
529
|
-
result = updateTask(params);
|
|
561
|
+
result = await updateTask(params);
|
|
530
562
|
break;
|
|
531
563
|
case 'get':
|
|
532
|
-
result = getTask(params);
|
|
564
|
+
result = await getTask(params);
|
|
533
565
|
break;
|
|
534
566
|
case 'list':
|
|
535
567
|
result = await listTasks(params);
|
|
536
568
|
break;
|
|
537
569
|
case 'move':
|
|
538
|
-
result = moveTask(params);
|
|
570
|
+
result = await moveTask(params);
|
|
539
571
|
break;
|
|
540
572
|
case 'link':
|
|
541
|
-
result = linkTask(params);
|
|
573
|
+
result = await linkTask(params);
|
|
542
574
|
break;
|
|
543
575
|
case 'archive':
|
|
544
|
-
result = archiveTask(params);
|
|
576
|
+
result = await archiveTask(params);
|
|
545
577
|
break;
|
|
546
578
|
case 'batch_create':
|
|
547
|
-
result = batchCreateTasks({ tasks: params.tasks, atomic: params.atomic });
|
|
579
|
+
result = await batchCreateTasks({ tasks: params.tasks, atomic: params.atomic });
|
|
548
580
|
break;
|
|
549
581
|
case 'add_dependency':
|
|
550
|
-
result = addDependency(params);
|
|
582
|
+
result = await addDependency(params);
|
|
551
583
|
break;
|
|
552
584
|
case 'remove_dependency':
|
|
553
|
-
result = removeDependency(params);
|
|
585
|
+
result = await removeDependency(params);
|
|
554
586
|
break;
|
|
555
587
|
case 'get_dependencies':
|
|
556
|
-
result = getDependencies(params);
|
|
588
|
+
result = await getDependencies(params);
|
|
557
589
|
break;
|
|
558
590
|
case 'watch_files':
|
|
559
|
-
result = watchFiles(params);
|
|
591
|
+
result = await watchFiles(params);
|
|
560
592
|
break;
|
|
561
593
|
case 'get_pruned_files':
|
|
562
|
-
result = getPrunedFiles(params);
|
|
594
|
+
result = await getPrunedFiles(params);
|
|
563
595
|
break;
|
|
564
596
|
case 'link_pruned_file':
|
|
565
|
-
result = linkPrunedFile(params);
|
|
597
|
+
result = await linkPrunedFile(params);
|
|
566
598
|
break;
|
|
567
599
|
case 'watcher':
|
|
568
|
-
result = watcherStatus(params);
|
|
600
|
+
result = await watcherStatus(params);
|
|
569
601
|
break;
|
|
570
602
|
case 'help':
|
|
571
|
-
|
|
603
|
+
const taskHelpContent = taskHelp();
|
|
604
|
+
trackAndReturnHelp('task', 'help', JSON.stringify(taskHelpContent));
|
|
605
|
+
result = taskHelpContent;
|
|
572
606
|
break;
|
|
573
607
|
case 'example':
|
|
574
|
-
|
|
608
|
+
const taskExampleContent = taskExample();
|
|
609
|
+
trackAndReturnHelp('task', 'example', JSON.stringify(taskExampleContent));
|
|
610
|
+
result = taskExampleContent;
|
|
611
|
+
break;
|
|
612
|
+
case 'use_case':
|
|
613
|
+
result = await queryHelpListUseCases(getAdapter(), {
|
|
614
|
+
category: params.category,
|
|
615
|
+
complexity: params.complexity,
|
|
616
|
+
limit: params.limit,
|
|
617
|
+
offset: params.offset
|
|
618
|
+
});
|
|
575
619
|
break;
|
|
576
620
|
default: throw new Error(`Unknown action: ${params.action}`);
|
|
577
621
|
}
|
|
@@ -579,61 +623,101 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
579
623
|
default:
|
|
580
624
|
throw new Error(`Unknown tool: ${name}`);
|
|
581
625
|
}
|
|
626
|
+
// Debug logging: Success
|
|
627
|
+
debugLogToolResponse(name, action, true, result);
|
|
582
628
|
return {
|
|
583
629
|
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
584
630
|
};
|
|
585
631
|
}
|
|
586
632
|
catch (error) {
|
|
587
|
-
|
|
633
|
+
// Use centralized error handler
|
|
634
|
+
const { message, stack } = handleToolError(name, action, error, params);
|
|
635
|
+
debugLogToolResponse(name, action, false, undefined, { message, stack });
|
|
588
636
|
return {
|
|
589
|
-
content: [{ type: 'text', text: JSON.stringify({ error: message }, null, 2) }],
|
|
637
|
+
content: [{ type: 'text', text: JSON.stringify({ error: message, stack: stack }, null, 2) }],
|
|
590
638
|
isError: true,
|
|
591
639
|
};
|
|
592
640
|
}
|
|
593
641
|
});
|
|
594
|
-
//
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
try {
|
|
598
|
-
const watcher = FileWatcher.getInstance();
|
|
599
|
-
await watcher.stop();
|
|
600
|
-
}
|
|
601
|
-
catch (error) {
|
|
602
|
-
// Ignore watcher errors during shutdown
|
|
603
|
-
}
|
|
604
|
-
closeDatabase();
|
|
605
|
-
process.exit(0);
|
|
606
|
-
});
|
|
607
|
-
process.on('SIGTERM', async () => {
|
|
608
|
-
console.error('\n✓ Shutting down MCP server...');
|
|
642
|
+
// Setup centralized global error handlers
|
|
643
|
+
setupGlobalErrorHandlers(() => {
|
|
644
|
+
debugLog('INFO', 'Shutting down gracefully');
|
|
609
645
|
try {
|
|
610
646
|
const watcher = FileWatcher.getInstance();
|
|
611
|
-
|
|
647
|
+
watcher.stop();
|
|
612
648
|
}
|
|
613
649
|
catch (error) {
|
|
614
650
|
// Ignore watcher errors during shutdown
|
|
615
651
|
}
|
|
616
652
|
closeDatabase();
|
|
617
|
-
|
|
653
|
+
closeDebugLogger();
|
|
618
654
|
});
|
|
619
655
|
// Start server with stdio transport
|
|
620
656
|
async function main() {
|
|
621
|
-
const transport = new StdioServerTransport();
|
|
622
|
-
await server.connect(transport);
|
|
623
|
-
console.error('✓ MCP Shared Context Server running on stdio');
|
|
624
|
-
// Start file watcher for auto-task-tracking
|
|
625
657
|
try {
|
|
626
|
-
|
|
627
|
-
|
|
658
|
+
// 0. Ensure .sqlew directory and config template exist (first launch)
|
|
659
|
+
ensureSqlewDirectory();
|
|
660
|
+
// 1. Initialize database
|
|
661
|
+
const config = dbPath ? { connection: { filename: dbPath } } : undefined;
|
|
662
|
+
db = await initializeDatabase(config);
|
|
663
|
+
// Apply CLI config overrides if provided
|
|
664
|
+
if (parsedArgs.autodeleteIgnoreWeekend !== undefined) {
|
|
665
|
+
await setConfigValue(db, CONFIG_KEYS.AUTODELETE_IGNORE_WEEKEND, parsedArgs.autodeleteIgnoreWeekend ? '1' : '0');
|
|
666
|
+
}
|
|
667
|
+
if (parsedArgs.autodeleteMessageHours !== undefined) {
|
|
668
|
+
await setConfigValue(db, CONFIG_KEYS.AUTODELETE_MESSAGE_HOURS, String(parsedArgs.autodeleteMessageHours));
|
|
669
|
+
}
|
|
670
|
+
if (parsedArgs.autodeleteFileHistoryDays !== undefined) {
|
|
671
|
+
await setConfigValue(db, CONFIG_KEYS.AUTODELETE_FILE_HISTORY_DAYS, String(parsedArgs.autodeleteFileHistoryDays));
|
|
672
|
+
}
|
|
673
|
+
// Display current config
|
|
674
|
+
const configValues = await getAllConfig(db);
|
|
675
|
+
const ignoreWeekend = configValues[CONFIG_KEYS.AUTODELETE_IGNORE_WEEKEND] === '1';
|
|
676
|
+
const messageHours = configValues[CONFIG_KEYS.AUTODELETE_MESSAGE_HOURS];
|
|
677
|
+
const fileHistoryDays = configValues[CONFIG_KEYS.AUTODELETE_FILE_HISTORY_DAYS];
|
|
678
|
+
console.error('✓ MCP Shared Context Server initialized');
|
|
679
|
+
if (dbPath) {
|
|
680
|
+
const source = parsedArgs.dbPath ? 'CLI' : 'config file';
|
|
681
|
+
console.error(` Database: ${dbPath} (from ${source})`);
|
|
682
|
+
}
|
|
683
|
+
console.error(` Auto-delete config: messages=${messageHours}h, file_history=${fileHistoryDays}d, ignore_weekend=${ignoreWeekend}`);
|
|
684
|
+
// Initialize debug logger (priority: CLI arg > environment variable > config file)
|
|
685
|
+
const debugLogPath = parsedArgs.debugLogPath || process.env.SQLEW_DEBUG || fileConfig.debug?.log_path;
|
|
686
|
+
const debugLogLevel = fileConfig.debug?.log_level || 'info';
|
|
687
|
+
initDebugLogger(debugLogPath, debugLogLevel);
|
|
688
|
+
debugLog('INFO', 'MCP Shared Context Server initialized', {
|
|
689
|
+
dbPath,
|
|
690
|
+
autoDeleteConfig: { messageHours, fileHistoryDays, ignoreWeekend },
|
|
691
|
+
debugLogLevel: debugLogLevel
|
|
692
|
+
});
|
|
693
|
+
// 2. Connect MCP server
|
|
694
|
+
const transport = new StdioServerTransport();
|
|
695
|
+
await server.connect(transport);
|
|
696
|
+
console.error('✓ MCP Shared Context Server running on stdio');
|
|
697
|
+
// 3. Start file watcher for auto-task-tracking (after database is ready)
|
|
698
|
+
try {
|
|
699
|
+
const watcher = FileWatcher.getInstance();
|
|
700
|
+
await watcher.start();
|
|
701
|
+
}
|
|
702
|
+
catch (error) {
|
|
703
|
+
console.error('⚠ Failed to start file watcher:', error);
|
|
704
|
+
console.error(' (Auto task tracking will be disabled)');
|
|
705
|
+
}
|
|
628
706
|
}
|
|
629
707
|
catch (error) {
|
|
630
|
-
|
|
631
|
-
|
|
708
|
+
// Use centralized initialization error handler
|
|
709
|
+
handleInitializationError(error);
|
|
710
|
+
closeDatabase();
|
|
711
|
+
closeDebugLogger();
|
|
712
|
+
process.exit(1);
|
|
632
713
|
}
|
|
633
714
|
}
|
|
634
715
|
main().catch((error) => {
|
|
635
|
-
|
|
716
|
+
// Use centralized initialization error handler
|
|
717
|
+
console.error('\n❌ FATAL ERROR:');
|
|
718
|
+
handleInitializationError(error);
|
|
636
719
|
closeDatabase();
|
|
720
|
+
closeDebugLogger();
|
|
637
721
|
process.exit(1);
|
|
638
722
|
});
|
|
639
723
|
//# sourceMappingURL=index.js.map
|