247-cli 2.25.0 → 2.27.0
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/agent/node_modules/247-shared/package.json +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +28 -0
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/hooks.d.ts +3 -0
- package/dist/commands/hooks.d.ts.map +1 -0
- package/dist/commands/hooks.js +151 -0
- package/dist/commands/hooks.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/hooks.d.ts +46 -0
- package/dist/lib/hooks.d.ts.map +1 -0
- package/dist/lib/hooks.js +249 -0
- package/dist/lib/hooks.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC,eAAO,MAAM,aAAa,SAkStB,CAAC"}
|
package/dist/commands/doctor.js
CHANGED
|
@@ -6,6 +6,7 @@ import { configExists, loadConfig } from '../lib/config.js';
|
|
|
6
6
|
import { isAgentRunning, getAgentHealth } from '../lib/process.js';
|
|
7
7
|
import { createServiceManager } from '../service/index.js';
|
|
8
8
|
import { getAgentPaths } from '../lib/paths.js';
|
|
9
|
+
import { getHooksStatus } from '../lib/hooks.js';
|
|
9
10
|
export const doctorCommand = new Command('doctor')
|
|
10
11
|
.description('Diagnose issues with your 247 installation')
|
|
11
12
|
.action(async () => {
|
|
@@ -206,6 +207,33 @@ export const doctorCommand = new Command('doctor')
|
|
|
206
207
|
}
|
|
207
208
|
}
|
|
208
209
|
}
|
|
210
|
+
// 10. Check hooks status
|
|
211
|
+
const hooksStatus = getHooksStatus();
|
|
212
|
+
if (hooksStatus.installed) {
|
|
213
|
+
if (hooksStatus.needsUpdate) {
|
|
214
|
+
results.push({
|
|
215
|
+
name: 'Notification hooks',
|
|
216
|
+
status: 'warn',
|
|
217
|
+
message: `Installed (v${hooksStatus.version}) - update available`,
|
|
218
|
+
hint: 'Run "247 hooks install" to update',
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
results.push({
|
|
223
|
+
name: 'Notification hooks',
|
|
224
|
+
status: 'pass',
|
|
225
|
+
message: `Installed (v${hooksStatus.version})`,
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
results.push({
|
|
231
|
+
name: 'Notification hooks',
|
|
232
|
+
status: 'warn',
|
|
233
|
+
message: 'Not installed',
|
|
234
|
+
hint: 'Run "247 hooks install" for attention notifications',
|
|
235
|
+
});
|
|
236
|
+
}
|
|
209
237
|
// Print results
|
|
210
238
|
console.log(chalk.bold('Results:\n'));
|
|
211
239
|
let passCount = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/commands/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,YAAY,SAExB,CAAC"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import ora from 'ora';
|
|
4
|
+
import { getHooksStatus, installHook, uninstallHook } from '../lib/hooks.js';
|
|
5
|
+
export const hooksCommand = new Command('hooks').description('Manage Claude Code notification hooks');
|
|
6
|
+
hooksCommand
|
|
7
|
+
.command('install')
|
|
8
|
+
.description('Install Claude Code notification hooks')
|
|
9
|
+
.option('-f, --force', 'Force reinstall even if hooks are up to date')
|
|
10
|
+
.action(async (options) => {
|
|
11
|
+
const spinner = ora('Checking hooks status...').start();
|
|
12
|
+
try {
|
|
13
|
+
const status = getHooksStatus();
|
|
14
|
+
// Check if already installed and up to date
|
|
15
|
+
if (status.installed && !status.needsUpdate && !options.force) {
|
|
16
|
+
spinner.succeed('Hooks already installed and up to date');
|
|
17
|
+
console.log(chalk.dim(` Version: ${status.version}`));
|
|
18
|
+
console.log(chalk.dim(` Path: ${status.path}`));
|
|
19
|
+
console.log(chalk.dim('\nUse --force to reinstall.\n'));
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
// Check if update needed
|
|
23
|
+
if (status.installed && status.needsUpdate) {
|
|
24
|
+
spinner.text = `Updating hooks (${status.version} -> ${status.packagedVersion})...`;
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
spinner.text = 'Installing hooks...';
|
|
28
|
+
}
|
|
29
|
+
const result = installHook();
|
|
30
|
+
if (result.success) {
|
|
31
|
+
if (status.installed && status.needsUpdate) {
|
|
32
|
+
spinner.succeed(`Hooks updated to v${result.installedVersion}`);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
spinner.succeed(`Hooks installed (v${result.installedVersion})`);
|
|
36
|
+
}
|
|
37
|
+
console.log(chalk.dim(` Path: ${status.path}`));
|
|
38
|
+
console.log(chalk.dim(' Settings: ~/.claude/settings.json\n'));
|
|
39
|
+
console.log(chalk.green('Claude Code will now notify 247 when it needs attention.'));
|
|
40
|
+
console.log(chalk.dim('Make sure the 247 agent is running: 247 start\n'));
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
spinner.fail(`Failed to install hooks: ${result.error}`);
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
spinner.fail(`Error: ${err.message}`);
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
hooksCommand
|
|
53
|
+
.command('uninstall')
|
|
54
|
+
.description('Uninstall Claude Code notification hooks')
|
|
55
|
+
.option('--keep-script', 'Keep the script file, only remove from settings')
|
|
56
|
+
.action(async (options) => {
|
|
57
|
+
const spinner = ora('Checking hooks status...').start();
|
|
58
|
+
try {
|
|
59
|
+
const status = getHooksStatus();
|
|
60
|
+
if (!status.installed && !status.settingsConfigured) {
|
|
61
|
+
spinner.succeed('No hooks installed - nothing to uninstall');
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
spinner.text = 'Uninstalling hooks...';
|
|
65
|
+
const result = uninstallHook(!options.keepScript);
|
|
66
|
+
if (result.success) {
|
|
67
|
+
spinner.succeed('Hooks uninstalled');
|
|
68
|
+
if (!options.keepScript) {
|
|
69
|
+
console.log(chalk.dim(` Removed: ${status.path}`));
|
|
70
|
+
}
|
|
71
|
+
console.log(chalk.dim(' Cleaned: ~/.claude/settings.json\n'));
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
spinner.fail(`Failed to uninstall hooks: ${result.error}`);
|
|
75
|
+
process.exit(1);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
spinner.fail(`Error: ${err.message}`);
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
hooksCommand
|
|
84
|
+
.command('status')
|
|
85
|
+
.description('Show hooks installation status')
|
|
86
|
+
.action(async () => {
|
|
87
|
+
console.log(chalk.bold('\n247 Hooks Status\n'));
|
|
88
|
+
const status = getHooksStatus();
|
|
89
|
+
if (status.installed) {
|
|
90
|
+
console.log(chalk.green('✓ Hooks installed'));
|
|
91
|
+
console.log(chalk.dim(` Version: ${status.version || 'unknown'}`));
|
|
92
|
+
console.log(chalk.dim(` Path: ${status.path}`));
|
|
93
|
+
if (status.needsUpdate) {
|
|
94
|
+
console.log();
|
|
95
|
+
console.log(chalk.yellow(`⚠ Update available: ${status.version} -> ${status.packagedVersion}`));
|
|
96
|
+
console.log(chalk.dim(' Run: 247 hooks install'));
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
console.log(chalk.green('✓ Up to date'));
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
console.log(chalk.yellow('✗ Hooks not installed'));
|
|
104
|
+
if (status.settingsConfigured) {
|
|
105
|
+
console.log(chalk.dim(' Settings configured but script missing'));
|
|
106
|
+
}
|
|
107
|
+
console.log();
|
|
108
|
+
console.log('Run: 247 hooks install');
|
|
109
|
+
}
|
|
110
|
+
console.log();
|
|
111
|
+
// Show settings configuration
|
|
112
|
+
console.log(chalk.bold('Claude Code Settings:'));
|
|
113
|
+
if (status.settingsConfigured) {
|
|
114
|
+
console.log(chalk.green('✓ Notification hook registered'));
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
console.log(chalk.yellow('✗ Notification hook not registered'));
|
|
118
|
+
}
|
|
119
|
+
console.log();
|
|
120
|
+
});
|
|
121
|
+
hooksCommand
|
|
122
|
+
.command('update')
|
|
123
|
+
.description('Update hooks to the latest version')
|
|
124
|
+
.action(async () => {
|
|
125
|
+
const spinner = ora('Checking for updates...').start();
|
|
126
|
+
try {
|
|
127
|
+
const status = getHooksStatus();
|
|
128
|
+
if (!status.installed) {
|
|
129
|
+
spinner.info('Hooks not installed. Run: 247 hooks install');
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
if (!status.needsUpdate) {
|
|
133
|
+
spinner.succeed(`Hooks already up to date (v${status.version})`);
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
spinner.text = `Updating hooks (${status.version} -> ${status.packagedVersion})...`;
|
|
137
|
+
const result = installHook();
|
|
138
|
+
if (result.success) {
|
|
139
|
+
spinner.succeed(`Hooks updated to v${result.installedVersion}`);
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
spinner.fail(`Failed to update hooks: ${result.error}`);
|
|
143
|
+
process.exit(1);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
catch (err) {
|
|
147
|
+
spinner.fail(`Error: ${err.message}`);
|
|
148
|
+
process.exit(1);
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/commands/hooks.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,QAAA,MAAM,OAAO,SAAgB,CAAC;AAsB9B,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -10,11 +10,12 @@ import { updateCommand } from './commands/update.js';
|
|
|
10
10
|
import { doctorCommand } from './commands/doctor.js';
|
|
11
11
|
import { profileCommand } from './commands/profile.js';
|
|
12
12
|
import { versionCommand } from './commands/version.js';
|
|
13
|
+
import { hooksCommand } from './commands/hooks.js';
|
|
13
14
|
const program = new Command();
|
|
14
15
|
program
|
|
15
16
|
.name('247')
|
|
16
17
|
.description('247 - Access Claude Code from anywhere 24/7\nby The Vibe Company')
|
|
17
|
-
.version('2.
|
|
18
|
+
.version('2.27.0')
|
|
18
19
|
.option('-P, --profile <name>', 'Use a specific profile (dev, prod, etc.)');
|
|
19
20
|
// Add commands
|
|
20
21
|
program.addCommand(initCommand);
|
|
@@ -27,6 +28,7 @@ program.addCommand(updateCommand);
|
|
|
27
28
|
program.addCommand(doctorCommand);
|
|
28
29
|
program.addCommand(profileCommand);
|
|
29
30
|
program.addCommand(versionCommand);
|
|
31
|
+
program.addCommand(hooksCommand);
|
|
30
32
|
// Export program for use in subcommands (to access global options)
|
|
31
33
|
export { program };
|
|
32
34
|
// Default action (no command)
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,KAAK,CAAC;KACX,WAAW,CAAC,kEAAkE,CAAC;KAC/E,OAAO,CAAC,QAAQ,CAAC;KACjB,MAAM,CAAC,sBAAsB,EAAE,0CAA0C,CAAC,CAAC;AAE9E,eAAe;AACf,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AAEjC,mEAAmE;AACnE,OAAO,EAAE,OAAO,EAAE,CAAC;AAEnB,8BAA8B;AAC9B,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE;IAClB,OAAO,CAAC,GAAG,CAAC;;;;;CAKb,CAAC,CAAC;IACD,OAAO,CAAC,IAAI,EAAE,CAAC;AACjB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export interface HookStatus {
|
|
2
|
+
installed: boolean;
|
|
3
|
+
version: string | null;
|
|
4
|
+
path: string;
|
|
5
|
+
settingsConfigured: boolean;
|
|
6
|
+
needsUpdate: boolean;
|
|
7
|
+
packagedVersion: string;
|
|
8
|
+
}
|
|
9
|
+
export interface InstallResult {
|
|
10
|
+
success: boolean;
|
|
11
|
+
error?: string;
|
|
12
|
+
installedVersion?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface UninstallResult {
|
|
15
|
+
success: boolean;
|
|
16
|
+
error?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Get the version of the installed hook script.
|
|
20
|
+
*/
|
|
21
|
+
export declare function getHookVersion(): string | null;
|
|
22
|
+
/**
|
|
23
|
+
* Get the version of the packaged hook script.
|
|
24
|
+
*/
|
|
25
|
+
export declare function getPackagedHookVersion(): string;
|
|
26
|
+
/**
|
|
27
|
+
* Check if the hook script file exists.
|
|
28
|
+
*/
|
|
29
|
+
export declare function isHookInstalled(): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Check if the installed hook needs an update.
|
|
32
|
+
*/
|
|
33
|
+
export declare function needsUpdate(): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Get comprehensive hook status.
|
|
36
|
+
*/
|
|
37
|
+
export declare function getHooksStatus(): HookStatus;
|
|
38
|
+
/**
|
|
39
|
+
* Install the hook: copy script and update Claude Code settings.
|
|
40
|
+
*/
|
|
41
|
+
export declare function installHook(): InstallResult;
|
|
42
|
+
/**
|
|
43
|
+
* Uninstall the hook: remove from settings and optionally delete script.
|
|
44
|
+
*/
|
|
45
|
+
export declare function uninstallHook(removeScript?: boolean): UninstallResult;
|
|
46
|
+
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/lib/hooks.ts"],"names":[],"mappings":"AAyBA,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB,EAAE,OAAO,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAsCD;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,GAAG,IAAI,CAE9C;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAkB/C;AAyBD;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAiBrC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,UAAU,CAc3C;AA4BD;;GAEG;AACH,wBAAgB,WAAW,IAAI,aAAa,CA4D3C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,YAAY,GAAE,OAAc,GAAG,eAAe,CA+C3E"}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync, copyFileSync, chmodSync, unlinkSync, } from 'fs';
|
|
2
|
+
import { join, dirname } from 'path';
|
|
3
|
+
import { homedir } from 'os';
|
|
4
|
+
import { fileURLToPath } from 'url';
|
|
5
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
6
|
+
// Paths
|
|
7
|
+
const CLAUDE_SETTINGS_PATH = join(homedir(), '.claude', 'settings.json');
|
|
8
|
+
const HOOKS_DIR = join(homedir(), '.247', 'hooks');
|
|
9
|
+
const HOOK_SCRIPT_NAME = 'notify-247.sh';
|
|
10
|
+
const HOOK_SCRIPT_PATH = join(HOOKS_DIR, HOOK_SCRIPT_NAME);
|
|
11
|
+
// Hook configuration for Claude Code settings.json
|
|
12
|
+
const HOOK_MATCHER = '*';
|
|
13
|
+
const HOOK_COMMAND = `bash ${HOOK_SCRIPT_PATH}`;
|
|
14
|
+
/**
|
|
15
|
+
* Get the path to the packaged hook script.
|
|
16
|
+
* In dev mode, it's in packages/hooks; in production, it's bundled with CLI.
|
|
17
|
+
*/
|
|
18
|
+
function getPackagedHookPath() {
|
|
19
|
+
// CLI root is 2 levels up from lib/ (dist/lib -> dist -> cli root)
|
|
20
|
+
const cliRoot = join(__dirname, '..', '..');
|
|
21
|
+
// Check if running from source (monorepo) or installed (npm global)
|
|
22
|
+
const monorepoRoot = join(cliRoot, '..', '..');
|
|
23
|
+
const isDev = existsSync(join(monorepoRoot, 'pnpm-workspace.yaml'));
|
|
24
|
+
if (isDev) {
|
|
25
|
+
// Development: hook is in packages/hooks
|
|
26
|
+
return join(monorepoRoot, 'packages', 'hooks', HOOK_SCRIPT_NAME);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
// Production: hook is bundled in cli/hooks
|
|
30
|
+
return join(cliRoot, 'hooks', HOOK_SCRIPT_NAME);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Extract version from a hook script.
|
|
35
|
+
* Looks for: # VERSION: x.y.z
|
|
36
|
+
*/
|
|
37
|
+
function extractVersion(scriptPath) {
|
|
38
|
+
try {
|
|
39
|
+
if (!existsSync(scriptPath))
|
|
40
|
+
return null;
|
|
41
|
+
const content = readFileSync(scriptPath, 'utf-8');
|
|
42
|
+
const match = content.match(/^# VERSION:\s*(\d+\.\d+\.\d+)/m);
|
|
43
|
+
return match ? match[1] : null;
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get the version of the installed hook script.
|
|
51
|
+
*/
|
|
52
|
+
export function getHookVersion() {
|
|
53
|
+
return extractVersion(HOOK_SCRIPT_PATH);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Get the version of the packaged hook script.
|
|
57
|
+
*/
|
|
58
|
+
export function getPackagedHookVersion() {
|
|
59
|
+
const packagedPath = getPackagedHookPath();
|
|
60
|
+
const version = extractVersion(packagedPath);
|
|
61
|
+
// Fall back to reading from package.json if not found in script
|
|
62
|
+
if (!version) {
|
|
63
|
+
try {
|
|
64
|
+
const cliRoot = join(__dirname, '..', '..');
|
|
65
|
+
const pkgPath = join(cliRoot, 'package.json');
|
|
66
|
+
if (existsSync(pkgPath)) {
|
|
67
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
68
|
+
return pkg.version || '0.0.0';
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
// Ignore
|
|
73
|
+
}
|
|
74
|
+
return '0.0.0';
|
|
75
|
+
}
|
|
76
|
+
return version;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Check if the hook is installed in Claude Code settings.
|
|
80
|
+
*/
|
|
81
|
+
function isHookInSettings() {
|
|
82
|
+
try {
|
|
83
|
+
if (!existsSync(CLAUDE_SETTINGS_PATH))
|
|
84
|
+
return false;
|
|
85
|
+
const content = readFileSync(CLAUDE_SETTINGS_PATH, 'utf-8');
|
|
86
|
+
const settings = JSON.parse(content);
|
|
87
|
+
if (!settings.hooks?.Notification)
|
|
88
|
+
return false;
|
|
89
|
+
// Check if our hook is registered
|
|
90
|
+
const notifications = settings.hooks.Notification;
|
|
91
|
+
return notifications.some((entry) => entry.matcher === HOOK_MATCHER &&
|
|
92
|
+
entry.hooks?.some((h) => h.command?.includes(HOOK_SCRIPT_NAME)));
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Check if the hook script file exists.
|
|
100
|
+
*/
|
|
101
|
+
export function isHookInstalled() {
|
|
102
|
+
return existsSync(HOOK_SCRIPT_PATH) && isHookInSettings();
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Check if the installed hook needs an update.
|
|
106
|
+
*/
|
|
107
|
+
export function needsUpdate() {
|
|
108
|
+
const installedVersion = getHookVersion();
|
|
109
|
+
const packagedVersion = getPackagedHookVersion();
|
|
110
|
+
if (!installedVersion)
|
|
111
|
+
return true;
|
|
112
|
+
if (!packagedVersion)
|
|
113
|
+
return false;
|
|
114
|
+
// Simple semver comparison
|
|
115
|
+
const installed = installedVersion.split('.').map(Number);
|
|
116
|
+
const packaged = packagedVersion.split('.').map(Number);
|
|
117
|
+
for (let i = 0; i < 3; i++) {
|
|
118
|
+
if (packaged[i] > installed[i])
|
|
119
|
+
return true;
|
|
120
|
+
if (packaged[i] < installed[i])
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Get comprehensive hook status.
|
|
127
|
+
*/
|
|
128
|
+
export function getHooksStatus() {
|
|
129
|
+
const scriptExists = existsSync(HOOK_SCRIPT_PATH);
|
|
130
|
+
const settingsConfigured = isHookInSettings();
|
|
131
|
+
const installedVersion = scriptExists ? getHookVersion() : null;
|
|
132
|
+
const packagedVersion = getPackagedHookVersion();
|
|
133
|
+
return {
|
|
134
|
+
installed: scriptExists && settingsConfigured,
|
|
135
|
+
version: installedVersion,
|
|
136
|
+
path: HOOK_SCRIPT_PATH,
|
|
137
|
+
settingsConfigured,
|
|
138
|
+
needsUpdate: scriptExists ? needsUpdate() : false,
|
|
139
|
+
packagedVersion,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Read Claude Code settings.json, creating default if needed.
|
|
144
|
+
*/
|
|
145
|
+
function readClaudeSettings() {
|
|
146
|
+
try {
|
|
147
|
+
if (existsSync(CLAUDE_SETTINGS_PATH)) {
|
|
148
|
+
const content = readFileSync(CLAUDE_SETTINGS_PATH, 'utf-8');
|
|
149
|
+
return JSON.parse(content);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
// Ignore parse errors, will create new settings
|
|
154
|
+
}
|
|
155
|
+
return {};
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Write Claude Code settings.json.
|
|
159
|
+
*/
|
|
160
|
+
function writeClaudeSettings(settings) {
|
|
161
|
+
const dir = dirname(CLAUDE_SETTINGS_PATH);
|
|
162
|
+
if (!existsSync(dir)) {
|
|
163
|
+
mkdirSync(dir, { recursive: true });
|
|
164
|
+
}
|
|
165
|
+
writeFileSync(CLAUDE_SETTINGS_PATH, JSON.stringify(settings, null, 2));
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Install the hook: copy script and update Claude Code settings.
|
|
169
|
+
*/
|
|
170
|
+
export function installHook() {
|
|
171
|
+
try {
|
|
172
|
+
// 1. Ensure hooks directory exists
|
|
173
|
+
if (!existsSync(HOOKS_DIR)) {
|
|
174
|
+
mkdirSync(HOOKS_DIR, { recursive: true });
|
|
175
|
+
}
|
|
176
|
+
// 2. Copy hook script
|
|
177
|
+
const packagedPath = getPackagedHookPath();
|
|
178
|
+
if (!existsSync(packagedPath)) {
|
|
179
|
+
return { success: false, error: `Packaged hook not found at ${packagedPath}` };
|
|
180
|
+
}
|
|
181
|
+
copyFileSync(packagedPath, HOOK_SCRIPT_PATH);
|
|
182
|
+
chmodSync(HOOK_SCRIPT_PATH, 0o755); // Make executable
|
|
183
|
+
// 3. Update Claude Code settings
|
|
184
|
+
const settings = readClaudeSettings();
|
|
185
|
+
// Ensure hooks object exists
|
|
186
|
+
if (!settings.hooks) {
|
|
187
|
+
settings.hooks = {};
|
|
188
|
+
}
|
|
189
|
+
const hooks = settings.hooks;
|
|
190
|
+
// Ensure Notification array exists
|
|
191
|
+
if (!Array.isArray(hooks.Notification)) {
|
|
192
|
+
hooks.Notification = [];
|
|
193
|
+
}
|
|
194
|
+
// Remove any existing 247 hook entries
|
|
195
|
+
hooks.Notification = hooks.Notification.filter((entry) => !(entry.matcher === HOOK_MATCHER && entry.hooks?.some((h) => h.command?.includes('247'))));
|
|
196
|
+
// Add our hook
|
|
197
|
+
hooks.Notification.push({
|
|
198
|
+
matcher: HOOK_MATCHER,
|
|
199
|
+
hooks: [
|
|
200
|
+
{
|
|
201
|
+
type: 'command',
|
|
202
|
+
command: HOOK_COMMAND,
|
|
203
|
+
},
|
|
204
|
+
],
|
|
205
|
+
});
|
|
206
|
+
writeClaudeSettings(settings);
|
|
207
|
+
const installedVersion = getHookVersion();
|
|
208
|
+
return { success: true, installedVersion: installedVersion || undefined };
|
|
209
|
+
}
|
|
210
|
+
catch (err) {
|
|
211
|
+
return { success: false, error: err.message };
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Uninstall the hook: remove from settings and optionally delete script.
|
|
216
|
+
*/
|
|
217
|
+
export function uninstallHook(removeScript = true) {
|
|
218
|
+
try {
|
|
219
|
+
// 1. Remove from Claude Code settings
|
|
220
|
+
if (existsSync(CLAUDE_SETTINGS_PATH)) {
|
|
221
|
+
const settings = readClaudeSettings();
|
|
222
|
+
if (settings.hooks) {
|
|
223
|
+
const hooks = settings.hooks;
|
|
224
|
+
if (Array.isArray(hooks.Notification)) {
|
|
225
|
+
hooks.Notification = hooks.Notification.filter((entry) => !(entry.matcher === HOOK_MATCHER &&
|
|
226
|
+
entry.hooks?.some((h) => h.command?.includes('247'))));
|
|
227
|
+
// Clean up empty Notification array
|
|
228
|
+
if (hooks.Notification.length === 0) {
|
|
229
|
+
delete hooks.Notification;
|
|
230
|
+
}
|
|
231
|
+
// Clean up empty hooks object
|
|
232
|
+
if (Object.keys(hooks).length === 0) {
|
|
233
|
+
delete settings.hooks;
|
|
234
|
+
}
|
|
235
|
+
writeClaudeSettings(settings);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
// 2. Remove script file if requested
|
|
240
|
+
if (removeScript && existsSync(HOOK_SCRIPT_PATH)) {
|
|
241
|
+
unlinkSync(HOOK_SCRIPT_PATH);
|
|
242
|
+
}
|
|
243
|
+
return { success: true };
|
|
244
|
+
}
|
|
245
|
+
catch (err) {
|
|
246
|
+
return { success: false, error: err.message };
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/lib/hooks.ts"],"names":[],"mappings":"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"}
|