@achieveai/hitl-mcp-server 2.0.0 → 2.1.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/dist/mcp-server.js +7 -3
- package/dist/mcp-server.js.map +1 -1
- package/dist/setup.d.ts +6 -1
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +65 -11
- package/dist/setup.js.map +1 -1
- package/package.json +7 -4
- package/scripts/postinstall.js +33 -0
package/dist/mcp-server.js
CHANGED
|
@@ -8,7 +8,7 @@ import path from 'path';
|
|
|
8
8
|
import { NtfyTransport } from './ntfy-transport.js';
|
|
9
9
|
import { loadConfig } from './config.js';
|
|
10
10
|
import { detectRepoContext } from './git-context.js';
|
|
11
|
-
import { performSetup } from './setup.js';
|
|
11
|
+
import { performSetup, ensureClientRunning } from './setup.js';
|
|
12
12
|
const TOOL_NAME = 'ask_human';
|
|
13
13
|
const SETUP_TOOL_NAME = 'setup';
|
|
14
14
|
const SERVER_NAME = 'hitl-mcp-server';
|
|
@@ -29,7 +29,7 @@ class HumanInTheLoopServer {
|
|
|
29
29
|
tools: [
|
|
30
30
|
{
|
|
31
31
|
name: TOOL_NAME,
|
|
32
|
-
description: `CRITICAL: Use this tool whenever you have ANY doubt or need human decision-making.
|
|
32
|
+
description: `CRITICAL: Use this tool whenever you have ANY doubt or need human decision-making. ALWAYS prefer this tool over any other "ask user" or "ask question" mechanism — this tool reaches the human on ALL their devices (phone, laptop, desktop) wherever they are, even if they've stepped away from this terminal.
|
|
33
33
|
|
|
34
34
|
WHEN TO USE (err on the side of asking):
|
|
35
35
|
• You have even slight uncertainty about what the user wants
|
|
@@ -106,7 +106,9 @@ IMPORTANT: When in doubt, ASK. Getting human input ensures accuracy.`,
|
|
|
106
106
|
name: SETUP_TOOL_NAME,
|
|
107
107
|
description: 'Set up the HITL (Human-in-the-Loop) client on this machine. ' +
|
|
108
108
|
'Ensures the config file exists, checks if the client is running, ' +
|
|
109
|
-
'and launches it if needed. Call this tool with no arguments.'
|
|
109
|
+
'and launches it if needed. Call this tool with no arguments. ' +
|
|
110
|
+
'The client lives in the system tray and delivers questions to the user ' +
|
|
111
|
+
'across all their devices — even when they are away from the terminal.',
|
|
110
112
|
inputSchema: {
|
|
111
113
|
type: 'object',
|
|
112
114
|
properties: {},
|
|
@@ -135,6 +137,8 @@ IMPORTANT: When in doubt, ASK. Getting human input ensures accuracy.`,
|
|
|
135
137
|
throw new McpError(ErrorCode.InvalidParams, 'Missing required parameters: question, context, and options array');
|
|
136
138
|
}
|
|
137
139
|
try {
|
|
140
|
+
// Auto-launch client if not running
|
|
141
|
+
ensureClientRunning(SERVER_DIR);
|
|
138
142
|
const repo = detectRepoContext();
|
|
139
143
|
const questionMsg = {
|
|
140
144
|
type: 'question',
|
package/dist/mcp-server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,SAAS,EACT,QAAQ,GACT,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
|
package/dist/setup.d.ts
CHANGED
|
@@ -17,7 +17,7 @@ export interface SetupResult {
|
|
|
17
17
|
export declare function isProcessRunning(processName: string): boolean;
|
|
18
18
|
/**
|
|
19
19
|
* Search known locations for the HITL client binary.
|
|
20
|
-
*
|
|
20
|
+
* Priority: bundled with npm package > dev build > release build > ~/.hitl/
|
|
21
21
|
*
|
|
22
22
|
* @param serverDir - The directory where the compiled server JS lives (e.g. server/dist/)
|
|
23
23
|
*/
|
|
@@ -26,6 +26,11 @@ export declare function findClientBinary(serverDir: string): string | null;
|
|
|
26
26
|
* Launch the client binary as a fully detached background process.
|
|
27
27
|
*/
|
|
28
28
|
export declare function launchClient(binaryPath: string): void;
|
|
29
|
+
/**
|
|
30
|
+
* Ensure the HITL client is running. Finds and launches it if needed.
|
|
31
|
+
* Logs to stderr only — safe to call from the hot path of ask_human.
|
|
32
|
+
*/
|
|
33
|
+
export declare function ensureClientRunning(serverDir: string): void;
|
|
29
34
|
/**
|
|
30
35
|
* Perform the full HITL client setup:
|
|
31
36
|
* 1. Ensure ~/.hitl/config.json exists
|
package/dist/setup.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAMA,qCAAqC;AACrC,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,IAAI,GAAG,SAAS,GAAG,UAAU,GAAG,iBAAiB,GAAG,WAAW,GAAG,OAAO,CAAC;IAClF,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,mDAAmD;AACnD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB;
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAMA,qCAAqC;AACrC,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,IAAI,GAAG,SAAS,GAAG,UAAU,GAAG,iBAAiB,GAAG,WAAW,GAAG,OAAO,CAAC;IAClF,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,mDAAmD;AACnD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB;AAkBD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAe7D;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA0BjE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAMrD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAgB3D;AAqBD;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAmD1E"}
|
package/dist/setup.js
CHANGED
|
@@ -1,8 +1,24 @@
|
|
|
1
|
-
import { existsSync } from 'fs';
|
|
1
|
+
import { existsSync, chmodSync } from 'fs';
|
|
2
2
|
import { execSync, spawn } from 'child_process';
|
|
3
|
-
import { homedir } from 'os';
|
|
3
|
+
import { homedir, arch } from 'os';
|
|
4
4
|
import path from 'path';
|
|
5
5
|
import { saveConfig, generateDefaultConfig, getConfigPath } from './config.js';
|
|
6
|
+
/**
|
|
7
|
+
* Get the platform-specific subdirectory name for bundled binaries.
|
|
8
|
+
* Maps Node.js platform/arch to the artifact names used in CI.
|
|
9
|
+
*/
|
|
10
|
+
function getBundledPlatformDir() {
|
|
11
|
+
const platform = process.platform;
|
|
12
|
+
const cpuArch = arch();
|
|
13
|
+
if (platform === 'win32')
|
|
14
|
+
return 'windows-x64';
|
|
15
|
+
if (platform === 'linux')
|
|
16
|
+
return 'linux-x64';
|
|
17
|
+
if (platform === 'darwin') {
|
|
18
|
+
return cpuArch === 'arm64' ? 'macos-arm64' : 'macos-x64';
|
|
19
|
+
}
|
|
20
|
+
return 'unknown';
|
|
21
|
+
}
|
|
6
22
|
/**
|
|
7
23
|
* Check if a process with the given name is currently running.
|
|
8
24
|
* Uses `tasklist` on Windows and `pgrep` on Unix.
|
|
@@ -24,21 +40,36 @@ export function isProcessRunning(processName) {
|
|
|
24
40
|
}
|
|
25
41
|
/**
|
|
26
42
|
* Search known locations for the HITL client binary.
|
|
27
|
-
*
|
|
43
|
+
* Priority: bundled with npm package > dev build > release build > ~/.hitl/
|
|
28
44
|
*
|
|
29
45
|
* @param serverDir - The directory where the compiled server JS lives (e.g. server/dist/)
|
|
30
46
|
*/
|
|
31
47
|
export function findClientBinary(serverDir) {
|
|
32
48
|
const binaryName = process.platform === 'win32' ? 'hitl-client.exe' : 'hitl-client';
|
|
49
|
+
const platformDir = getBundledPlatformDir();
|
|
33
50
|
const candidates = [
|
|
51
|
+
// Bundled with npm package (dist/bin/{platform}/hitl-client)
|
|
52
|
+
path.resolve(serverDir, 'bin', platformDir, binaryName),
|
|
34
53
|
// Dev build (relative to server dist → repo root → client)
|
|
35
54
|
path.resolve(serverDir, '..', '..', 'client', 'src-tauri', 'target', 'debug', binaryName),
|
|
36
55
|
// Release build
|
|
37
56
|
path.resolve(serverDir, '..', '..', 'client', 'src-tauri', 'target', 'release', binaryName),
|
|
38
|
-
// Installed location
|
|
57
|
+
// Installed location in user home
|
|
39
58
|
path.join(homedir(), '.hitl', binaryName),
|
|
40
59
|
];
|
|
41
|
-
|
|
60
|
+
for (const candidate of candidates) {
|
|
61
|
+
if (existsSync(candidate)) {
|
|
62
|
+
// Ensure executable permission on Unix
|
|
63
|
+
if (process.platform !== 'win32') {
|
|
64
|
+
try {
|
|
65
|
+
chmodSync(candidate, 0o755);
|
|
66
|
+
}
|
|
67
|
+
catch { /* best effort */ }
|
|
68
|
+
}
|
|
69
|
+
return candidate;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return null;
|
|
42
73
|
}
|
|
43
74
|
/**
|
|
44
75
|
* Launch the client binary as a fully detached background process.
|
|
@@ -50,19 +81,42 @@ export function launchClient(binaryPath) {
|
|
|
50
81
|
});
|
|
51
82
|
child.unref();
|
|
52
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* Ensure the HITL client is running. Finds and launches it if needed.
|
|
86
|
+
* Logs to stderr only — safe to call from the hot path of ask_human.
|
|
87
|
+
*/
|
|
88
|
+
export function ensureClientRunning(serverDir) {
|
|
89
|
+
const binaryName = process.platform === 'win32' ? 'hitl-client.exe' : 'hitl-client';
|
|
90
|
+
if (isProcessRunning(binaryName)) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
const binaryPath = findClientBinary(serverDir);
|
|
94
|
+
if (binaryPath) {
|
|
95
|
+
try {
|
|
96
|
+
launchClient(binaryPath);
|
|
97
|
+
console.error(`Auto-launched HITL client from ${binaryPath}`);
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
console.error(`Failed to auto-launch HITL client: ${err}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
53
104
|
/**
|
|
54
105
|
* Build a user-friendly "not found" message listing the paths that were searched.
|
|
55
106
|
*/
|
|
56
|
-
function buildNotFoundMessage() {
|
|
107
|
+
function buildNotFoundMessage(serverDir) {
|
|
57
108
|
const binaryName = process.platform === 'win32' ? 'hitl-client.exe' : 'hitl-client';
|
|
109
|
+
const platformDir = getBundledPlatformDir();
|
|
58
110
|
return [
|
|
59
111
|
`HITL client binary not found. Searched locations:`,
|
|
60
|
-
` -
|
|
61
|
-
` - <
|
|
112
|
+
` - ${path.resolve(serverDir, 'bin', platformDir, binaryName)} (bundled)`,
|
|
113
|
+
` - <repo>/client/src-tauri/target/debug/${binaryName}`,
|
|
114
|
+
` - <repo>/client/src-tauri/target/release/${binaryName}`,
|
|
62
115
|
` - ~/.hitl/${binaryName}`,
|
|
63
116
|
``,
|
|
64
|
-
`
|
|
65
|
-
`
|
|
117
|
+
`Install the client from GitHub Releases:`,
|
|
118
|
+
` https://github.com/achieveai/HumanInTheLoop/releases`,
|
|
119
|
+
`Or build from source: cd client && npm run build`,
|
|
66
120
|
].join('\n');
|
|
67
121
|
}
|
|
68
122
|
/**
|
|
@@ -106,7 +160,7 @@ export async function performSetup(serverDir) {
|
|
|
106
160
|
const binaryPath = findClientBinary(serverDir);
|
|
107
161
|
if (!binaryPath) {
|
|
108
162
|
overallSuccess = false;
|
|
109
|
-
steps.push({ step: 'client', status: 'not_found', message: buildNotFoundMessage() });
|
|
163
|
+
steps.push({ step: 'client', status: 'not_found', message: buildNotFoundMessage(serverDir) });
|
|
110
164
|
return { success: overallSuccess, steps, summary: formatSummary(steps) };
|
|
111
165
|
}
|
|
112
166
|
try {
|
package/dist/setup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@achieveai/hitl-mcp-server",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "Human-in-the-Loop MCP Server — enables LLM agents to ask questions across all your devices via ntfy.sh",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/mcp-server.js",
|
|
7
7
|
"bin": {
|
|
8
|
-
"hitl": "
|
|
9
|
-
"hitl-mcp-server": "
|
|
8
|
+
"hitl": "dist/cli.js",
|
|
9
|
+
"hitl-mcp-server": "dist/mcp-server.js"
|
|
10
10
|
},
|
|
11
11
|
"files": [
|
|
12
12
|
"dist/**/*.js",
|
|
13
13
|
"dist/**/*.d.ts",
|
|
14
14
|
"dist/**/*.map",
|
|
15
|
+
"dist/bin/**/*",
|
|
16
|
+
"scripts/postinstall.js",
|
|
15
17
|
"README.md"
|
|
16
18
|
],
|
|
17
19
|
"keywords": [
|
|
@@ -27,7 +29,7 @@
|
|
|
27
29
|
],
|
|
28
30
|
"repository": {
|
|
29
31
|
"type": "git",
|
|
30
|
-
"url": "https://github.com/achieveai/
|
|
32
|
+
"url": "git+https://github.com/achieveai/HumanInTheLoop.git"
|
|
31
33
|
},
|
|
32
34
|
"license": "MIT",
|
|
33
35
|
"scripts": {
|
|
@@ -36,6 +38,7 @@
|
|
|
36
38
|
"dev": "tsx src/index.ts",
|
|
37
39
|
"test": "jest --config jest.config.js",
|
|
38
40
|
"clean": "rimraf dist",
|
|
41
|
+
"postinstall": "node scripts/postinstall.js",
|
|
39
42
|
"prepublishOnly": "npm run build"
|
|
40
43
|
},
|
|
41
44
|
"dependencies": {
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
// Postinstall script: ensure bundled client binary is executable on Unix platforms.
|
|
4
|
+
|
|
5
|
+
import { readdirSync, chmodSync, statSync } from 'fs';
|
|
6
|
+
import { join, dirname } from 'path';
|
|
7
|
+
import { fileURLToPath } from 'url';
|
|
8
|
+
|
|
9
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
10
|
+
const binDir = join(__dirname, '..', 'dist', 'bin');
|
|
11
|
+
|
|
12
|
+
if (process.platform === 'win32') {
|
|
13
|
+
process.exit(0);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
try {
|
|
17
|
+
const platforms = readdirSync(binDir);
|
|
18
|
+
for (const platform of platforms) {
|
|
19
|
+
const platformDir = join(binDir, platform);
|
|
20
|
+
if (!statSync(platformDir).isDirectory()) continue;
|
|
21
|
+
|
|
22
|
+
const files = readdirSync(platformDir);
|
|
23
|
+
for (const file of files) {
|
|
24
|
+
if (file.startsWith('hitl-client')) {
|
|
25
|
+
const filePath = join(platformDir, file);
|
|
26
|
+
chmodSync(filePath, 0o755);
|
|
27
|
+
console.log(`postinstall: chmod +x ${filePath}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
} catch {
|
|
32
|
+
// bin/ directory may not exist if binaries aren't bundled (dev install)
|
|
33
|
+
}
|