@everstateai/mcp 1.3.1 → 1.3.3
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/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -5
- package/dist/index.js.map +1 -1
- package/dist/setup/auto-update.d.ts +20 -0
- package/dist/setup/auto-update.d.ts.map +1 -0
- package/dist/setup/auto-update.js +295 -0
- package/dist/setup/auto-update.js.map +1 -0
- package/dist/setup/commands/doctor.d.ts +15 -0
- package/dist/setup/commands/doctor.d.ts.map +1 -0
- package/dist/setup/commands/doctor.js +264 -0
- package/dist/setup/commands/doctor.js.map +1 -0
- package/dist/setup/commands/repair.d.ts +14 -0
- package/dist/setup/commands/repair.d.ts.map +1 -0
- package/dist/setup/commands/repair.js +252 -0
- package/dist/setup/commands/repair.js.map +1 -0
- package/dist/setup/hooks/templates.d.ts +30 -0
- package/dist/setup/hooks/templates.d.ts.map +1 -0
- package/dist/setup/hooks/templates.js +237 -0
- package/dist/setup/hooks/templates.js.map +1 -0
- package/dist/setup/types.d.ts +120 -0
- package/dist/setup/types.d.ts.map +1 -0
- package/dist/setup/types.js +58 -0
- package/dist/setup/types.js.map +1 -0
- package/dist/setup/validators/api-key.d.ts +8 -0
- package/dist/setup/validators/api-key.d.ts.map +1 -0
- package/dist/setup/validators/api-key.js +233 -0
- package/dist/setup/validators/api-key.js.map +1 -0
- package/dist/setup/validators/connectivity.d.ts +8 -0
- package/dist/setup/validators/connectivity.d.ts.map +1 -0
- package/dist/setup/validators/connectivity.js +150 -0
- package/dist/setup/validators/connectivity.js.map +1 -0
- package/dist/setup/validators/hooks.d.ts +8 -0
- package/dist/setup/validators/hooks.d.ts.map +1 -0
- package/dist/setup/validators/hooks.js +431 -0
- package/dist/setup/validators/hooks.js.map +1 -0
- package/dist/setup/validators/index.d.ts +18 -0
- package/dist/setup/validators/index.d.ts.map +1 -0
- package/dist/setup/validators/index.js +123 -0
- package/dist/setup/validators/index.js.map +1 -0
- package/dist/setup/validators/mcp-config.d.ts +8 -0
- package/dist/setup/validators/mcp-config.d.ts.map +1 -0
- package/dist/setup/validators/mcp-config.js +333 -0
- package/dist/setup/validators/mcp-config.js.map +1 -0
- package/dist/setup/validators/project.d.ts +8 -0
- package/dist/setup/validators/project.d.ts.map +1 -0
- package/dist/setup/validators/project.js +202 -0
- package/dist/setup/validators/project.js.map +1 -0
- package/dist/setup/version.d.ts +58 -0
- package/dist/setup/version.d.ts.map +1 -0
- package/dist/setup/version.js +262 -0
- package/dist/setup/version.js.map +1 -0
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +264 -28
- package/dist/setup.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +32 -5
- package/src/setup/auto-update.ts +328 -0
- package/src/setup/commands/doctor.ts +266 -0
- package/src/setup/commands/repair.ts +260 -0
- package/src/setup/hooks/templates.ts +239 -0
- package/src/setup/types.ts +199 -0
- package/src/setup/validators/api-key.ts +218 -0
- package/src/setup/validators/connectivity.ts +176 -0
- package/src/setup/validators/hooks.ts +447 -0
- package/src/setup/validators/index.ts +137 -0
- package/src/setup/validators/mcp-config.ts +329 -0
- package/src/setup/validators/project.ts +179 -0
- package/src/setup/version.ts +267 -0
- package/src/setup.ts +297 -28
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connectivity.d.ts","sourceRoot":"","sources":["../../../src/setup/validators/connectivity.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,SAAS,EAIV,MAAM,aAAa,CAAC;AAKrB,eAAO,MAAM,qBAAqB,EAAE,SA4BnC,CAAC"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Connectivity Validator
|
|
4
|
+
*
|
|
5
|
+
* Tests API connectivity and response times.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.connectivityValidator = void 0;
|
|
9
|
+
const types_js_1 = require("../types.js");
|
|
10
|
+
const SLOW_THRESHOLD_MS = 2000;
|
|
11
|
+
const TIMEOUT_MS = 10000;
|
|
12
|
+
exports.connectivityValidator = {
|
|
13
|
+
name: 'Connectivity',
|
|
14
|
+
async validate(context) {
|
|
15
|
+
const results = [];
|
|
16
|
+
if (context.skipNetwork) {
|
|
17
|
+
results.push({
|
|
18
|
+
component: 'Connectivity',
|
|
19
|
+
check: 'API reachable',
|
|
20
|
+
status: 'warn',
|
|
21
|
+
message: 'Skipped (--skip-network)',
|
|
22
|
+
});
|
|
23
|
+
return results;
|
|
24
|
+
}
|
|
25
|
+
// Check 1: Health endpoint
|
|
26
|
+
const healthResult = await checkHealth();
|
|
27
|
+
results.push(healthResult);
|
|
28
|
+
// Check 2: Authenticated endpoint (if API key available)
|
|
29
|
+
if (context.apiKey && healthResult.status === 'pass') {
|
|
30
|
+
const authResult = await checkAuthenticated(context.apiKey);
|
|
31
|
+
results.push(authResult);
|
|
32
|
+
}
|
|
33
|
+
return results;
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
async function checkHealth() {
|
|
37
|
+
const startTime = Date.now();
|
|
38
|
+
try {
|
|
39
|
+
const controller = new AbortController();
|
|
40
|
+
const timeoutId = setTimeout(() => controller.abort(), TIMEOUT_MS);
|
|
41
|
+
const response = await fetch(`${types_js_1.EVERSTATE_API_URL}/health`, {
|
|
42
|
+
signal: controller.signal,
|
|
43
|
+
});
|
|
44
|
+
clearTimeout(timeoutId);
|
|
45
|
+
const elapsed = Date.now() - startTime;
|
|
46
|
+
if (!response.ok) {
|
|
47
|
+
return {
|
|
48
|
+
component: 'Connectivity',
|
|
49
|
+
check: 'API reachable',
|
|
50
|
+
status: 'fail',
|
|
51
|
+
message: `Health check failed: ${response.status}`,
|
|
52
|
+
details: { status: response.status, elapsed },
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
if (elapsed > SLOW_THRESHOLD_MS) {
|
|
56
|
+
return {
|
|
57
|
+
component: 'Connectivity',
|
|
58
|
+
check: 'API reachable',
|
|
59
|
+
status: 'warn',
|
|
60
|
+
message: `Slow response (${elapsed}ms)`,
|
|
61
|
+
details: { elapsed, threshold: SLOW_THRESHOLD_MS },
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
component: 'Connectivity',
|
|
66
|
+
check: 'API reachable',
|
|
67
|
+
status: 'pass',
|
|
68
|
+
message: `OK (${elapsed}ms)`,
|
|
69
|
+
details: { elapsed },
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
const elapsed = Date.now() - startTime;
|
|
74
|
+
if (error instanceof Error && error.name === 'AbortError') {
|
|
75
|
+
return {
|
|
76
|
+
component: 'Connectivity',
|
|
77
|
+
check: 'API reachable',
|
|
78
|
+
status: 'fail',
|
|
79
|
+
message: `Timeout after ${TIMEOUT_MS}ms`,
|
|
80
|
+
details: { timeout: TIMEOUT_MS },
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
component: 'Connectivity',
|
|
85
|
+
check: 'API reachable',
|
|
86
|
+
status: 'fail',
|
|
87
|
+
message: 'Network error',
|
|
88
|
+
details: { error: String(error), elapsed },
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
async function checkAuthenticated(apiKey) {
|
|
93
|
+
const startTime = Date.now();
|
|
94
|
+
try {
|
|
95
|
+
const controller = new AbortController();
|
|
96
|
+
const timeoutId = setTimeout(() => controller.abort(), TIMEOUT_MS);
|
|
97
|
+
const response = await fetch(`${types_js_1.EVERSTATE_API_URL}/api/context`, {
|
|
98
|
+
headers: {
|
|
99
|
+
Authorization: `Bearer ${apiKey}`,
|
|
100
|
+
},
|
|
101
|
+
signal: controller.signal,
|
|
102
|
+
});
|
|
103
|
+
clearTimeout(timeoutId);
|
|
104
|
+
const elapsed = Date.now() - startTime;
|
|
105
|
+
if (response.status === 401) {
|
|
106
|
+
return {
|
|
107
|
+
component: 'Connectivity',
|
|
108
|
+
check: 'Authenticated access',
|
|
109
|
+
status: 'fail',
|
|
110
|
+
message: 'API key rejected',
|
|
111
|
+
details: { elapsed },
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
if (!response.ok) {
|
|
115
|
+
return {
|
|
116
|
+
component: 'Connectivity',
|
|
117
|
+
check: 'Authenticated access',
|
|
118
|
+
status: 'warn',
|
|
119
|
+
message: `Unexpected status: ${response.status}`,
|
|
120
|
+
details: { status: response.status, elapsed },
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
if (elapsed > SLOW_THRESHOLD_MS) {
|
|
124
|
+
return {
|
|
125
|
+
component: 'Connectivity',
|
|
126
|
+
check: 'Authenticated access',
|
|
127
|
+
status: 'warn',
|
|
128
|
+
message: `Slow response (${elapsed}ms)`,
|
|
129
|
+
details: { elapsed, threshold: SLOW_THRESHOLD_MS },
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
return {
|
|
133
|
+
component: 'Connectivity',
|
|
134
|
+
check: 'Authenticated access',
|
|
135
|
+
status: 'pass',
|
|
136
|
+
message: `OK (${elapsed}ms)`,
|
|
137
|
+
details: { elapsed },
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
return {
|
|
142
|
+
component: 'Connectivity',
|
|
143
|
+
check: 'Authenticated access',
|
|
144
|
+
status: 'warn',
|
|
145
|
+
message: 'Could not verify authenticated access',
|
|
146
|
+
details: { error: String(error) },
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=connectivity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connectivity.js","sourceRoot":"","sources":["../../../src/setup/validators/connectivity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/setup/validators/hooks.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EACL,SAAS,EAMV,MAAM,UAAU,CAAC;AAElB,eAAO,MAAM,cAAc,EAAE,SAmC5B,CAAC"}
|
|
@@ -0,0 +1,431 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Hooks Validator
|
|
4
|
+
*
|
|
5
|
+
* Validates that hooks are installed, executable, and at correct versions.
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
+
var ownKeys = function(o) {
|
|
25
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
+
var ar = [];
|
|
27
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
+
return ar;
|
|
29
|
+
};
|
|
30
|
+
return ownKeys(o);
|
|
31
|
+
};
|
|
32
|
+
return function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.hooksValidator = void 0;
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const types_1 = require("../types");
|
|
45
|
+
exports.hooksValidator = {
|
|
46
|
+
name: 'Hooks',
|
|
47
|
+
async validate(context) {
|
|
48
|
+
const results = [];
|
|
49
|
+
// Check global hooks
|
|
50
|
+
const globalResults = await validateGlobalHooks();
|
|
51
|
+
results.push(...globalResults);
|
|
52
|
+
// Check TodoWrite hook registration
|
|
53
|
+
const registrationResults = await validateHookRegistration();
|
|
54
|
+
results.push(...registrationResults);
|
|
55
|
+
// Check project hooks if in a project directory
|
|
56
|
+
if (context.projectDir) {
|
|
57
|
+
const projectResults = await validateProjectHooks(context.projectDir);
|
|
58
|
+
results.push(...projectResults);
|
|
59
|
+
}
|
|
60
|
+
return results;
|
|
61
|
+
},
|
|
62
|
+
async repair(result, context) {
|
|
63
|
+
if (result.check === 'sync-todos.js exists' || result.check === 'sync-todos.js version') {
|
|
64
|
+
return await repairSyncTodosHook();
|
|
65
|
+
}
|
|
66
|
+
if (result.check === 'sync-todos.js executable') {
|
|
67
|
+
return await repairSyncTodosPermissions();
|
|
68
|
+
}
|
|
69
|
+
if (result.check === 'TodoWrite hook registration') {
|
|
70
|
+
return await repairHookRegistration();
|
|
71
|
+
}
|
|
72
|
+
return false;
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
async function validateGlobalHooks() {
|
|
76
|
+
const results = [];
|
|
77
|
+
const hooksDir = `${(0, types_1.getEverstateDir)()}/hooks`;
|
|
78
|
+
const syncTodosPath = `${hooksDir}/sync-todos.js`;
|
|
79
|
+
// Check 1: Hooks directory exists
|
|
80
|
+
if (!fs.existsSync(hooksDir)) {
|
|
81
|
+
results.push({
|
|
82
|
+
component: 'Hooks',
|
|
83
|
+
check: 'Global hooks directory',
|
|
84
|
+
status: 'fail',
|
|
85
|
+
message: `Directory not found: ${hooksDir}`,
|
|
86
|
+
repairAction: {
|
|
87
|
+
type: 'install',
|
|
88
|
+
description: 'Create hooks directory',
|
|
89
|
+
automatic: true,
|
|
90
|
+
},
|
|
91
|
+
});
|
|
92
|
+
return results;
|
|
93
|
+
}
|
|
94
|
+
results.push({
|
|
95
|
+
component: 'Hooks',
|
|
96
|
+
check: 'Global hooks directory',
|
|
97
|
+
status: 'pass',
|
|
98
|
+
message: `Found at ${hooksDir}`,
|
|
99
|
+
});
|
|
100
|
+
// Check 2: sync-todos.js exists
|
|
101
|
+
if (!fs.existsSync(syncTodosPath)) {
|
|
102
|
+
results.push({
|
|
103
|
+
component: 'Hooks',
|
|
104
|
+
check: 'sync-todos.js exists',
|
|
105
|
+
status: 'fail',
|
|
106
|
+
message: 'sync-todos.js not found',
|
|
107
|
+
repairAction: {
|
|
108
|
+
type: 'install',
|
|
109
|
+
description: 'Install sync-todos hook',
|
|
110
|
+
automatic: true,
|
|
111
|
+
},
|
|
112
|
+
});
|
|
113
|
+
return results;
|
|
114
|
+
}
|
|
115
|
+
results.push({
|
|
116
|
+
component: 'Hooks',
|
|
117
|
+
check: 'sync-todos.js exists',
|
|
118
|
+
status: 'pass',
|
|
119
|
+
message: 'sync-todos.js found',
|
|
120
|
+
});
|
|
121
|
+
// Check 3: sync-todos.js is executable
|
|
122
|
+
try {
|
|
123
|
+
fs.accessSync(syncTodosPath, fs.constants.X_OK);
|
|
124
|
+
results.push({
|
|
125
|
+
component: 'Hooks',
|
|
126
|
+
check: 'sync-todos.js executable',
|
|
127
|
+
status: 'pass',
|
|
128
|
+
message: 'sync-todos.js is executable',
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
results.push({
|
|
133
|
+
component: 'Hooks',
|
|
134
|
+
check: 'sync-todos.js executable',
|
|
135
|
+
status: 'fail',
|
|
136
|
+
message: 'sync-todos.js is not executable',
|
|
137
|
+
repairAction: {
|
|
138
|
+
type: 'chmod',
|
|
139
|
+
description: 'Make sync-todos.js executable',
|
|
140
|
+
automatic: true,
|
|
141
|
+
},
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
// Check 4: Version check
|
|
145
|
+
const version = extractHookVersion(syncTodosPath);
|
|
146
|
+
const expectedVersion = types_1.HOOK_VERSIONS.syncTodos;
|
|
147
|
+
if (!version) {
|
|
148
|
+
results.push({
|
|
149
|
+
component: 'Hooks',
|
|
150
|
+
check: 'sync-todos.js version',
|
|
151
|
+
status: 'warn',
|
|
152
|
+
message: 'Could not determine version',
|
|
153
|
+
repairAction: {
|
|
154
|
+
type: 'update',
|
|
155
|
+
description: 'Update to versioned hook',
|
|
156
|
+
automatic: true,
|
|
157
|
+
},
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
else if (compareVersions(version, expectedVersion) < 0) {
|
|
161
|
+
results.push({
|
|
162
|
+
component: 'Hooks',
|
|
163
|
+
check: 'sync-todos.js version',
|
|
164
|
+
status: 'warn',
|
|
165
|
+
message: `Outdated (${version} < ${expectedVersion})`,
|
|
166
|
+
details: { installed: version, expected: expectedVersion },
|
|
167
|
+
repairAction: {
|
|
168
|
+
type: 'update',
|
|
169
|
+
description: 'Update sync-todos hook',
|
|
170
|
+
automatic: true,
|
|
171
|
+
},
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
results.push({
|
|
176
|
+
component: 'Hooks',
|
|
177
|
+
check: 'sync-todos.js version',
|
|
178
|
+
status: 'pass',
|
|
179
|
+
message: `Version ${version}`,
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
return results;
|
|
183
|
+
}
|
|
184
|
+
async function validateHookRegistration() {
|
|
185
|
+
const results = [];
|
|
186
|
+
const configPath = (0, types_1.getClaudeConfigPath)();
|
|
187
|
+
if (!fs.existsSync(configPath)) {
|
|
188
|
+
results.push({
|
|
189
|
+
component: 'Hooks',
|
|
190
|
+
check: 'TodoWrite hook registration',
|
|
191
|
+
status: 'fail',
|
|
192
|
+
message: 'Claude config not found',
|
|
193
|
+
repairAction: {
|
|
194
|
+
type: 'configure',
|
|
195
|
+
description: 'Configure hooks in Claude config',
|
|
196
|
+
automatic: true,
|
|
197
|
+
},
|
|
198
|
+
});
|
|
199
|
+
return results;
|
|
200
|
+
}
|
|
201
|
+
let config;
|
|
202
|
+
try {
|
|
203
|
+
config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
206
|
+
results.push({
|
|
207
|
+
component: 'Hooks',
|
|
208
|
+
check: 'TodoWrite hook registration',
|
|
209
|
+
status: 'fail',
|
|
210
|
+
message: 'Could not parse Claude config',
|
|
211
|
+
});
|
|
212
|
+
return results;
|
|
213
|
+
}
|
|
214
|
+
const hooks = config.hooks;
|
|
215
|
+
const postToolUse = hooks?.PostToolUse;
|
|
216
|
+
if (!postToolUse) {
|
|
217
|
+
results.push({
|
|
218
|
+
component: 'Hooks',
|
|
219
|
+
check: 'TodoWrite hook registration',
|
|
220
|
+
status: 'fail',
|
|
221
|
+
message: 'No PostToolUse hooks configured',
|
|
222
|
+
repairAction: {
|
|
223
|
+
type: 'configure',
|
|
224
|
+
description: 'Register TodoWrite hook',
|
|
225
|
+
automatic: true,
|
|
226
|
+
},
|
|
227
|
+
});
|
|
228
|
+
return results;
|
|
229
|
+
}
|
|
230
|
+
const todoWriteEntry = postToolUse.find((e) => e.matcher === 'TodoWrite');
|
|
231
|
+
if (!todoWriteEntry) {
|
|
232
|
+
results.push({
|
|
233
|
+
component: 'Hooks',
|
|
234
|
+
check: 'TodoWrite hook registration',
|
|
235
|
+
status: 'fail',
|
|
236
|
+
message: 'TodoWrite hook not registered',
|
|
237
|
+
repairAction: {
|
|
238
|
+
type: 'configure',
|
|
239
|
+
description: 'Register TodoWrite hook',
|
|
240
|
+
automatic: true,
|
|
241
|
+
},
|
|
242
|
+
});
|
|
243
|
+
return results;
|
|
244
|
+
}
|
|
245
|
+
const syncTodosHook = todoWriteEntry.hooks?.find((h) => h.command?.includes('sync-todos'));
|
|
246
|
+
if (!syncTodosHook) {
|
|
247
|
+
results.push({
|
|
248
|
+
component: 'Hooks',
|
|
249
|
+
check: 'TodoWrite hook registration',
|
|
250
|
+
status: 'fail',
|
|
251
|
+
message: 'sync-todos command not in TodoWrite hooks',
|
|
252
|
+
repairAction: {
|
|
253
|
+
type: 'configure',
|
|
254
|
+
description: 'Add sync-todos to TodoWrite hooks',
|
|
255
|
+
automatic: true,
|
|
256
|
+
},
|
|
257
|
+
});
|
|
258
|
+
return results;
|
|
259
|
+
}
|
|
260
|
+
// Check the path is correct
|
|
261
|
+
const expectedPath = `${(0, types_1.getEverstateDir)()}/hooks/sync-todos.js`;
|
|
262
|
+
if (!syncTodosHook.command?.includes(expectedPath)) {
|
|
263
|
+
results.push({
|
|
264
|
+
component: 'Hooks',
|
|
265
|
+
check: 'TodoWrite hook registration',
|
|
266
|
+
status: 'warn',
|
|
267
|
+
message: 'sync-todos path may be incorrect',
|
|
268
|
+
details: { command: syncTodosHook.command, expected: `node ${expectedPath}` },
|
|
269
|
+
repairAction: {
|
|
270
|
+
type: 'configure',
|
|
271
|
+
description: 'Update sync-todos path',
|
|
272
|
+
automatic: true,
|
|
273
|
+
},
|
|
274
|
+
});
|
|
275
|
+
return results;
|
|
276
|
+
}
|
|
277
|
+
results.push({
|
|
278
|
+
component: 'Hooks',
|
|
279
|
+
check: 'TodoWrite hook registration',
|
|
280
|
+
status: 'pass',
|
|
281
|
+
message: 'TodoWrite hook correctly registered',
|
|
282
|
+
});
|
|
283
|
+
return results;
|
|
284
|
+
}
|
|
285
|
+
async function validateProjectHooks(projectDir) {
|
|
286
|
+
const results = [];
|
|
287
|
+
const hooksDir = path.join(projectDir, '.claude', 'hooks');
|
|
288
|
+
if (!fs.existsSync(hooksDir)) {
|
|
289
|
+
results.push({
|
|
290
|
+
component: 'Hooks',
|
|
291
|
+
check: 'Project hooks directory',
|
|
292
|
+
status: 'warn',
|
|
293
|
+
message: 'No project hooks directory',
|
|
294
|
+
details: { path: hooksDir },
|
|
295
|
+
});
|
|
296
|
+
return results;
|
|
297
|
+
}
|
|
298
|
+
results.push({
|
|
299
|
+
component: 'Hooks',
|
|
300
|
+
check: 'Project hooks directory',
|
|
301
|
+
status: 'pass',
|
|
302
|
+
message: `Found at ${hooksDir}`,
|
|
303
|
+
});
|
|
304
|
+
// Check session hooks
|
|
305
|
+
const sessionStartPath = path.join(hooksDir, 'session-start.sh');
|
|
306
|
+
const altSessionStartPath = path.join(hooksDir, 'everstate-session-start.sh');
|
|
307
|
+
if (fs.existsSync(sessionStartPath) || fs.existsSync(altSessionStartPath)) {
|
|
308
|
+
results.push({
|
|
309
|
+
component: 'Hooks',
|
|
310
|
+
check: 'Session start hook',
|
|
311
|
+
status: 'pass',
|
|
312
|
+
message: 'Session start hook found',
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
else {
|
|
316
|
+
results.push({
|
|
317
|
+
component: 'Hooks',
|
|
318
|
+
check: 'Session start hook',
|
|
319
|
+
status: 'warn',
|
|
320
|
+
message: 'No session start hook (context may not load automatically)',
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
return results;
|
|
324
|
+
}
|
|
325
|
+
function extractHookVersion(filePath) {
|
|
326
|
+
try {
|
|
327
|
+
const content = fs.readFileSync(filePath, 'utf8');
|
|
328
|
+
// Look for VERSION: x.y.z in comments
|
|
329
|
+
const versionMatch = content.match(/VERSION:\s*(\d+\.\d+\.\d+)/i);
|
|
330
|
+
if (versionMatch) {
|
|
331
|
+
return versionMatch[1];
|
|
332
|
+
}
|
|
333
|
+
// Look for "Hook vX" pattern
|
|
334
|
+
const hookVMatch = content.match(/Hook\s+v(\d+)/i);
|
|
335
|
+
if (hookVMatch) {
|
|
336
|
+
return `${hookVMatch[1]}.0.0`;
|
|
337
|
+
}
|
|
338
|
+
return null;
|
|
339
|
+
}
|
|
340
|
+
catch {
|
|
341
|
+
return null;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
function compareVersions(a, b) {
|
|
345
|
+
const aParts = a.split('.').map(Number);
|
|
346
|
+
const bParts = b.split('.').map(Number);
|
|
347
|
+
for (let i = 0; i < 3; i++) {
|
|
348
|
+
const aNum = aParts[i] || 0;
|
|
349
|
+
const bNum = bParts[i] || 0;
|
|
350
|
+
if (aNum < bNum)
|
|
351
|
+
return -1;
|
|
352
|
+
if (aNum > bNum)
|
|
353
|
+
return 1;
|
|
354
|
+
}
|
|
355
|
+
return 0;
|
|
356
|
+
}
|
|
357
|
+
async function repairSyncTodosHook() {
|
|
358
|
+
const hooksDir = `${(0, types_1.getEverstateDir)()}/hooks`;
|
|
359
|
+
const syncTodosPath = `${hooksDir}/sync-todos.js`;
|
|
360
|
+
try {
|
|
361
|
+
// Ensure directory exists
|
|
362
|
+
if (!fs.existsSync(hooksDir)) {
|
|
363
|
+
fs.mkdirSync(hooksDir, { recursive: true });
|
|
364
|
+
}
|
|
365
|
+
// Import and use the hook template
|
|
366
|
+
const { getSyncTodosHook } = await import('../hooks/templates.js');
|
|
367
|
+
const hookContent = getSyncTodosHook();
|
|
368
|
+
fs.writeFileSync(syncTodosPath, hookContent, { mode: 0o755 });
|
|
369
|
+
return true;
|
|
370
|
+
}
|
|
371
|
+
catch {
|
|
372
|
+
return false;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
async function repairSyncTodosPermissions() {
|
|
376
|
+
const syncTodosPath = `${(0, types_1.getEverstateDir)()}/hooks/sync-todos.js`;
|
|
377
|
+
try {
|
|
378
|
+
fs.chmodSync(syncTodosPath, 0o755);
|
|
379
|
+
return true;
|
|
380
|
+
}
|
|
381
|
+
catch {
|
|
382
|
+
return false;
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
async function repairHookRegistration() {
|
|
386
|
+
const configPath = (0, types_1.getClaudeConfigPath)();
|
|
387
|
+
const syncTodosPath = `${(0, types_1.getEverstateDir)()}/hooks/sync-todos.js`;
|
|
388
|
+
try {
|
|
389
|
+
let config = {};
|
|
390
|
+
if (fs.existsSync(configPath)) {
|
|
391
|
+
config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
|
|
392
|
+
}
|
|
393
|
+
if (!config.hooks) {
|
|
394
|
+
config.hooks = {};
|
|
395
|
+
}
|
|
396
|
+
const hooks = config.hooks;
|
|
397
|
+
if (!hooks.PostToolUse) {
|
|
398
|
+
hooks.PostToolUse = [];
|
|
399
|
+
}
|
|
400
|
+
const postToolUse = hooks.PostToolUse;
|
|
401
|
+
// Find or create TodoWrite entry
|
|
402
|
+
let todoWriteEntry = postToolUse.find((e) => e.matcher === 'TodoWrite');
|
|
403
|
+
if (!todoWriteEntry) {
|
|
404
|
+
todoWriteEntry = { matcher: 'TodoWrite', hooks: [] };
|
|
405
|
+
postToolUse.push(todoWriteEntry);
|
|
406
|
+
}
|
|
407
|
+
// Update or add sync-todos hook
|
|
408
|
+
const syncTodosIndex = todoWriteEntry.hooks.findIndex((h) => h.command?.includes('sync-todos'));
|
|
409
|
+
const hookEntry = {
|
|
410
|
+
type: 'command',
|
|
411
|
+
command: `node ${syncTodosPath}`,
|
|
412
|
+
timeout: 10,
|
|
413
|
+
};
|
|
414
|
+
if (syncTodosIndex >= 0) {
|
|
415
|
+
todoWriteEntry.hooks[syncTodosIndex] = hookEntry;
|
|
416
|
+
}
|
|
417
|
+
else {
|
|
418
|
+
todoWriteEntry.hooks.push(hookEntry);
|
|
419
|
+
}
|
|
420
|
+
// Backup and write
|
|
421
|
+
if (fs.existsSync(configPath)) {
|
|
422
|
+
fs.copyFileSync(configPath, `${configPath}.backup`);
|
|
423
|
+
}
|
|
424
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n');
|
|
425
|
+
return true;
|
|
426
|
+
}
|
|
427
|
+
catch {
|
|
428
|
+
return false;
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/setup/validators/hooks.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,2CAA6B;AAC7B,oCAOkB;AAEL,QAAA,cAAc,GAAc;IACvC,IAAI,EAAE,OAAO;IAEb,KAAK,CAAC,QAAQ,CAAC,OAA0B;QACvC,MAAM,OAAO,GAAuB,EAAE,CAAC;QAEvC,qBAAqB;QACrB,MAAM,aAAa,GAAG,MAAM,mBAAmB,EAAE,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;QAE/B,oCAAoC;QACpC,MAAM,mBAAmB,GAAG,MAAM,wBAAwB,EAAE,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,CAAC;QAErC,gDAAgD;QAChD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,MAAM,cAAc,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACtE,OAAO,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;QAClC,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAwB,EAAE,OAA0B;QAC/D,IAAI,MAAM,CAAC,KAAK,KAAK,sBAAsB,IAAI,MAAM,CAAC,KAAK,KAAK,uBAAuB,EAAE,CAAC;YACxF,OAAO,MAAM,mBAAmB,EAAE,CAAC;QACrC,CAAC;QACD,IAAI,MAAM,CAAC,KAAK,KAAK,0BAA0B,EAAE,CAAC;YAChD,OAAO,MAAM,0BAA0B,EAAE,CAAC;QAC5C,CAAC;QACD,IAAI,MAAM,CAAC,KAAK,KAAK,6BAA6B,EAAE,CAAC;YACnD,OAAO,MAAM,sBAAsB,EAAE,CAAC;QACxC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF,CAAC;AAEF,KAAK,UAAU,mBAAmB;IAChC,MAAM,OAAO,GAAuB,EAAE,CAAC;IACvC,MAAM,QAAQ,GAAG,GAAG,IAAA,uBAAe,GAAE,QAAQ,CAAC;IAC9C,MAAM,aAAa,GAAG,GAAG,QAAQ,gBAAgB,CAAC;IAElD,kCAAkC;IAClC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,OAAO;YAClB,KAAK,EAAE,wBAAwB;YAC/B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,wBAAwB,QAAQ,EAAE;YAC3C,YAAY,EAAE;gBACZ,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,wBAAwB;gBACrC,SAAS,EAAE,IAAI;aAChB;SACF,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,CAAC,IAAI,CAAC;QACX,SAAS,EAAE,OAAO;QAClB,KAAK,EAAE,wBAAwB;QAC/B,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,YAAY,QAAQ,EAAE;KAChC,CAAC,CAAC;IAEH,gCAAgC;IAChC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,OAAO;YAClB,KAAK,EAAE,sBAAsB;YAC7B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,yBAAyB;YAClC,YAAY,EAAE;gBACZ,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,yBAAyB;gBACtC,SAAS,EAAE,IAAI;aAChB;SACF,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,CAAC,IAAI,CAAC;QACX,SAAS,EAAE,OAAO;QAClB,KAAK,EAAE,sBAAsB;QAC7B,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,qBAAqB;KAC/B,CAAC,CAAC;IAEH,uCAAuC;IACvC,IAAI,CAAC;QACH,EAAE,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,OAAO;YAClB,KAAK,EAAE,0BAA0B;YACjC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,6BAA6B;SACvC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,OAAO;YAClB,KAAK,EAAE,0BAA0B;YACjC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,iCAAiC;YAC1C,YAAY,EAAE;gBACZ,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,+BAA+B;gBAC5C,SAAS,EAAE,IAAI;aAChB;SACF,CAAC,CAAC;IACL,CAAC;IAED,yBAAyB;IACzB,MAAM,OAAO,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAClD,MAAM,eAAe,GAAG,qBAAa,CAAC,SAAS,CAAC;IAEhD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,OAAO;YAClB,KAAK,EAAE,uBAAuB;YAC9B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,6BAA6B;YACtC,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,0BAA0B;gBACvC,SAAS,EAAE,IAAI;aAChB;SACF,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,eAAe,CAAC,OAAO,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,OAAO;YAClB,KAAK,EAAE,uBAAuB;YAC9B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,aAAa,OAAO,MAAM,eAAe,GAAG;YACrD,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE;YAC1D,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,wBAAwB;gBACrC,SAAS,EAAE,IAAI;aAChB;SACF,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,OAAO;YAClB,KAAK,EAAE,uBAAuB;YAC9B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,WAAW,OAAO,EAAE;SAC9B,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,wBAAwB;IACrC,MAAM,OAAO,GAAuB,EAAE,CAAC;IACvC,MAAM,UAAU,GAAG,IAAA,2BAAmB,GAAE,CAAC;IAEzC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,OAAO;YAClB,KAAK,EAAE,6BAA6B;YACpC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,yBAAyB;YAClC,YAAY,EAAE;gBACZ,IAAI,EAAE,WAAW;gBACjB,WAAW,EAAE,kCAAkC;gBAC/C,SAAS,EAAE,IAAI;aAChB;SACF,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,MAA+B,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,OAAO;YAClB,KAAK,EAAE,6BAA6B;YACpC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,+BAA+B;SACzC,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,KAA8C,CAAC;IACpE,MAAM,WAAW,GAAG,KAAK,EAAE,WAAuE,CAAC;IAEnG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,OAAO;YAClB,KAAK,EAAE,6BAA6B;YACpC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,iCAAiC;YAC1C,YAAY,EAAE;gBACZ,IAAI,EAAE,WAAW;gBACjB,WAAW,EAAE,yBAAyB;gBACtC,SAAS,EAAE,IAAI;aAChB;SACF,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,cAAc,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,WAAW,CAAC,CAAC;IAC1E,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,OAAO;YAClB,KAAK,EAAE,6BAA6B;YACpC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,+BAA+B;YACxC,YAAY,EAAE;gBACZ,IAAI,EAAE,WAAW;gBACjB,WAAW,EAAE,yBAAyB;gBACtC,SAAS,EAAE,IAAI;aAChB;SACF,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,aAAa,GAAI,cAAc,CAAC,KAAqC,EAAE,IAAI,CAC/E,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,CACzC,CAAC;IAEF,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,OAAO;YAClB,KAAK,EAAE,6BAA6B;YACpC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,2CAA2C;YACpD,YAAY,EAAE;gBACZ,IAAI,EAAE,WAAW;gBACjB,WAAW,EAAE,mCAAmC;gBAChD,SAAS,EAAE,IAAI;aAChB;SACF,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,4BAA4B;IAC5B,MAAM,YAAY,GAAG,GAAG,IAAA,uBAAe,GAAE,sBAAsB,CAAC;IAChE,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,OAAO;YAClB,KAAK,EAAE,6BAA6B;YACpC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,kCAAkC;YAC3C,OAAO,EAAE,EAAE,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,YAAY,EAAE,EAAE;YAC7E,YAAY,EAAE;gBACZ,IAAI,EAAE,WAAW;gBACjB,WAAW,EAAE,wBAAwB;gBACrC,SAAS,EAAE,IAAI;aAChB;SACF,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,CAAC,IAAI,CAAC;QACX,SAAS,EAAE,OAAO;QAClB,KAAK,EAAE,6BAA6B;QACpC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,qCAAqC;KAC/C,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,UAAkB;IACpD,MAAM,OAAO,GAAuB,EAAE,CAAC;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAE3D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,OAAO;YAClB,KAAK,EAAE,yBAAyB;YAChC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,4BAA4B;YACrC,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SAC5B,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,CAAC,IAAI,CAAC;QACX,SAAS,EAAE,OAAO;QAClB,KAAK,EAAE,yBAAyB;QAChC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,YAAY,QAAQ,EAAE;KAChC,CAAC,CAAC;IAEH,sBAAsB;IACtB,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;IACjE,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,4BAA4B,CAAC,CAAC;IAE9E,IAAI,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;QAC1E,OAAO,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,OAAO;YAClB,KAAK,EAAE,oBAAoB;YAC3B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,0BAA0B;SACpC,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,OAAO;YAClB,KAAK,EAAE,oBAAoB;YAC3B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,4DAA4D;SACtE,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAgB;IAC1C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAClD,sCAAsC;QACtC,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAClE,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC;QACD,6BAA6B;QAC7B,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACnD,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;QAChC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,CAAS,EAAE,CAAS;IAC3C,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAExC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,IAAI,GAAG,IAAI;YAAE,OAAO,CAAC,CAAC,CAAC;QAC3B,IAAI,IAAI,GAAG,IAAI;YAAE,OAAO,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,KAAK,UAAU,mBAAmB;IAChC,MAAM,QAAQ,GAAG,GAAG,IAAA,uBAAe,GAAE,QAAQ,CAAC;IAC9C,MAAM,aAAa,GAAG,GAAG,QAAQ,gBAAgB,CAAC;IAElD,IAAI,CAAC;QACH,0BAA0B;QAC1B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,CAAC;QAED,mCAAmC;QACnC,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QACnE,MAAM,WAAW,GAAG,gBAAgB,EAAE,CAAC;QAEvC,EAAE,CAAC,aAAa,CAAC,aAAa,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,0BAA0B;IACvC,MAAM,aAAa,GAAG,GAAG,IAAA,uBAAe,GAAE,sBAAsB,CAAC;IACjE,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,sBAAsB;IACnC,MAAM,UAAU,GAAG,IAAA,2BAAmB,GAAE,CAAC;IACzC,MAAM,aAAa,GAAG,GAAG,IAAA,uBAAe,GAAE,sBAAsB,CAAC;IAEjE,IAAI,CAAC;QACH,IAAI,MAAM,GAA4B,EAAE,CAAC;QAEzC,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;QACpB,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,KAAkC,CAAC;QACxD,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YACvB,KAAK,CAAC,WAAW,GAAG,EAAE,CAAC;QACzB,CAAC;QAED,MAAM,WAAW,GAAG,KAAK,CAAC,WAA2D,CAAC;QAEtF,iCAAiC;QACjC,IAAI,cAAc,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,WAAW,CAAC,CAAC;QACxE,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,cAAc,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;YACrD,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACnC,CAAC;QAED,gCAAgC;QAChC,MAAM,cAAc,GAAI,cAAc,CAAC,KAAqC,CAAC,SAAS,CACpF,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,CACzC,CAAC;QAEF,MAAM,SAAS,GAAG;YAChB,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,QAAQ,aAAa,EAAE;YAChC,OAAO,EAAE,EAAE;SACZ,CAAC;QAEF,IAAI,cAAc,IAAI,CAAC,EAAE,CAAC;YACxB,cAAc,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,SAAS,CAAC;QACnD,CAAC;aAAM,CAAC;YACN,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvC,CAAC;QAED,mBAAmB;QACnB,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,UAAU,SAAS,CAAC,CAAC;QACtD,CAAC;QAED,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validation Orchestrator
|
|
3
|
+
*
|
|
4
|
+
* Runs all validators and aggregates results.
|
|
5
|
+
*/
|
|
6
|
+
import { Validator, ValidationResult, ValidationContext, ValidationSummary } from '../types.js';
|
|
7
|
+
declare const validators: Validator[];
|
|
8
|
+
export declare function validateAll(context: ValidationContext): Promise<ValidationSummary>;
|
|
9
|
+
export declare function validateComponent(componentName: string, context: ValidationContext): Promise<ValidationSummary>;
|
|
10
|
+
export declare function repairResult(result: ValidationResult, context: ValidationContext): Promise<boolean>;
|
|
11
|
+
export declare function summarize(results: ValidationResult[]): ValidationSummary;
|
|
12
|
+
export { validators };
|
|
13
|
+
export { apiKeyValidator } from './api-key';
|
|
14
|
+
export { mcpConfigValidator } from './mcp-config';
|
|
15
|
+
export { hooksValidator } from './hooks';
|
|
16
|
+
export { projectValidator } from './project';
|
|
17
|
+
export { connectivityValidator } from './connectivity';
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/setup/validators/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,aAAa,CAAC;AASrB,QAAA,MAAM,UAAU,EAAE,SAAS,EAM1B,CAAC;AAEF,wBAAsB,WAAW,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAkBxF;AAED,wBAAsB,iBAAiB,CACrC,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,iBAAiB,CAAC,CAuC5B;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,OAAO,CAAC,CAYlB;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,iBAAiB,CAoBxE;AAED,OAAO,EAAE,UAAU,EAAE,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC"}
|