@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.
Files changed (70) hide show
  1. package/dist/index.d.ts +5 -3
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +32 -5
  4. package/dist/index.js.map +1 -1
  5. package/dist/setup/auto-update.d.ts +20 -0
  6. package/dist/setup/auto-update.d.ts.map +1 -0
  7. package/dist/setup/auto-update.js +295 -0
  8. package/dist/setup/auto-update.js.map +1 -0
  9. package/dist/setup/commands/doctor.d.ts +15 -0
  10. package/dist/setup/commands/doctor.d.ts.map +1 -0
  11. package/dist/setup/commands/doctor.js +264 -0
  12. package/dist/setup/commands/doctor.js.map +1 -0
  13. package/dist/setup/commands/repair.d.ts +14 -0
  14. package/dist/setup/commands/repair.d.ts.map +1 -0
  15. package/dist/setup/commands/repair.js +252 -0
  16. package/dist/setup/commands/repair.js.map +1 -0
  17. package/dist/setup/hooks/templates.d.ts +30 -0
  18. package/dist/setup/hooks/templates.d.ts.map +1 -0
  19. package/dist/setup/hooks/templates.js +237 -0
  20. package/dist/setup/hooks/templates.js.map +1 -0
  21. package/dist/setup/types.d.ts +120 -0
  22. package/dist/setup/types.d.ts.map +1 -0
  23. package/dist/setup/types.js +58 -0
  24. package/dist/setup/types.js.map +1 -0
  25. package/dist/setup/validators/api-key.d.ts +8 -0
  26. package/dist/setup/validators/api-key.d.ts.map +1 -0
  27. package/dist/setup/validators/api-key.js +233 -0
  28. package/dist/setup/validators/api-key.js.map +1 -0
  29. package/dist/setup/validators/connectivity.d.ts +8 -0
  30. package/dist/setup/validators/connectivity.d.ts.map +1 -0
  31. package/dist/setup/validators/connectivity.js +150 -0
  32. package/dist/setup/validators/connectivity.js.map +1 -0
  33. package/dist/setup/validators/hooks.d.ts +8 -0
  34. package/dist/setup/validators/hooks.d.ts.map +1 -0
  35. package/dist/setup/validators/hooks.js +431 -0
  36. package/dist/setup/validators/hooks.js.map +1 -0
  37. package/dist/setup/validators/index.d.ts +18 -0
  38. package/dist/setup/validators/index.d.ts.map +1 -0
  39. package/dist/setup/validators/index.js +123 -0
  40. package/dist/setup/validators/index.js.map +1 -0
  41. package/dist/setup/validators/mcp-config.d.ts +8 -0
  42. package/dist/setup/validators/mcp-config.d.ts.map +1 -0
  43. package/dist/setup/validators/mcp-config.js +333 -0
  44. package/dist/setup/validators/mcp-config.js.map +1 -0
  45. package/dist/setup/validators/project.d.ts +8 -0
  46. package/dist/setup/validators/project.d.ts.map +1 -0
  47. package/dist/setup/validators/project.js +202 -0
  48. package/dist/setup/validators/project.js.map +1 -0
  49. package/dist/setup/version.d.ts +58 -0
  50. package/dist/setup/version.d.ts.map +1 -0
  51. package/dist/setup/version.js +262 -0
  52. package/dist/setup/version.js.map +1 -0
  53. package/dist/setup.d.ts.map +1 -1
  54. package/dist/setup.js +264 -28
  55. package/dist/setup.js.map +1 -1
  56. package/package.json +1 -1
  57. package/src/index.ts +32 -5
  58. package/src/setup/auto-update.ts +328 -0
  59. package/src/setup/commands/doctor.ts +266 -0
  60. package/src/setup/commands/repair.ts +260 -0
  61. package/src/setup/hooks/templates.ts +239 -0
  62. package/src/setup/types.ts +199 -0
  63. package/src/setup/validators/api-key.ts +218 -0
  64. package/src/setup/validators/connectivity.ts +176 -0
  65. package/src/setup/validators/hooks.ts +447 -0
  66. package/src/setup/validators/index.ts +137 -0
  67. package/src/setup/validators/mcp-config.ts +329 -0
  68. package/src/setup/validators/project.ts +179 -0
  69. package/src/setup/version.ts +267 -0
  70. package/src/setup.ts +297 -28
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Connectivity Validator
3
+ *
4
+ * Tests API connectivity and response times.
5
+ */
6
+ import { Validator } from '../types.js';
7
+ export declare const connectivityValidator: Validator;
8
+ //# sourceMappingURL=connectivity.d.ts.map
@@ -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,8 @@
1
+ /**
2
+ * Hooks Validator
3
+ *
4
+ * Validates that hooks are installed, executable, and at correct versions.
5
+ */
6
+ import { Validator } from '../types';
7
+ export declare const hooksValidator: Validator;
8
+ //# sourceMappingURL=hooks.d.ts.map
@@ -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":"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"}
@@ -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"}