fa-mcp-sdk 0.4.3 → 0.4.6
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/bin/fa-mcp.js +1040 -1039
- package/cli-template/eslint.config.js +16 -136
- package/cli-template/package.json +9 -10
- package/cli-template/tsconfig.json +1 -0
- package/dist/core/_types_/active-directory-config.d.ts.map +1 -1
- package/dist/core/_types_/config.d.ts +1 -1
- package/dist/core/_types_/config.d.ts.map +1 -1
- package/dist/core/_types_/types.d.ts.map +1 -1
- package/dist/core/ad/group-checker.d.ts.map +1 -1
- package/dist/core/ad/group-checker.js.map +1 -1
- package/dist/core/agent-tester/agent-tester-router.d.ts.map +1 -1
- package/dist/core/agent-tester/agent-tester-router.js +8 -8
- package/dist/core/agent-tester/agent-tester-router.js.map +1 -1
- package/dist/core/agent-tester/check-llm.d.ts.map +1 -1
- package/dist/core/agent-tester/check-llm.js +1 -1
- package/dist/core/agent-tester/check-llm.js.map +1 -1
- package/dist/core/agent-tester/services/TesterAgentService.d.ts.map +1 -1
- package/dist/core/agent-tester/services/TesterAgentService.js +53 -53
- package/dist/core/agent-tester/services/TesterAgentService.js.map +1 -1
- package/dist/core/agent-tester/services/TesterMcpClientService.d.ts.map +1 -1
- package/dist/core/agent-tester/services/TesterMcpClientService.js +2 -2
- package/dist/core/agent-tester/services/TesterMcpClientService.js.map +1 -1
- package/dist/core/auth/admin-auth.d.ts.map +1 -1
- package/dist/core/auth/admin-auth.js +3 -3
- package/dist/core/auth/admin-auth.js.map +1 -1
- package/dist/core/auth/basic.d.ts.map +1 -1
- package/dist/core/auth/basic.js.map +1 -1
- package/dist/core/auth/jwt.d.ts.map +1 -1
- package/dist/core/auth/jwt.js +6 -16
- package/dist/core/auth/jwt.js.map +1 -1
- package/dist/core/auth/middleware.d.ts.map +1 -1
- package/dist/core/auth/middleware.js +3 -2
- package/dist/core/auth/middleware.js.map +1 -1
- package/dist/core/auth/multi-auth.d.ts +0 -3
- package/dist/core/auth/multi-auth.d.ts.map +1 -1
- package/dist/core/auth/multi-auth.js +10 -7
- package/dist/core/auth/multi-auth.js.map +1 -1
- package/dist/core/auth/permanent.d.ts.map +1 -1
- package/dist/core/auth/permanent.js +1 -1
- package/dist/core/auth/permanent.js.map +1 -1
- package/dist/core/auth/token-generator/ntlm/ntlm-auth-options.d.ts.map +1 -1
- package/dist/core/auth/token-generator/ntlm/ntlm-auth-options.js +2 -2
- package/dist/core/auth/token-generator/ntlm/ntlm-auth-options.js.map +1 -1
- package/dist/core/auth/token-generator/ntlm/ntlm-domain-config.d.ts.map +1 -1
- package/dist/core/auth/token-generator/ntlm/ntlm-domain-config.js +1 -1
- package/dist/core/auth/token-generator/ntlm/ntlm-domain-config.js.map +1 -1
- package/dist/core/auth/token-generator/ntlm/ntlm-integration.d.ts.map +1 -1
- package/dist/core/auth/token-generator/ntlm/ntlm-integration.js +1 -1
- package/dist/core/auth/token-generator/ntlm/ntlm-integration.js.map +1 -1
- package/dist/core/auth/token-generator/ntlm/ntlm-templates.d.ts.map +1 -1
- package/dist/core/auth/token-generator/ntlm/ntlm-templates.js +222 -221
- package/dist/core/auth/token-generator/ntlm/ntlm-templates.js.map +1 -1
- package/dist/core/auth/token-generator/server.d.ts.map +1 -1
- package/dist/core/auth/token-generator/server.js +8 -8
- package/dist/core/auth/token-generator/server.js.map +1 -1
- package/dist/core/bootstrap/init-config.d.ts.map +1 -1
- package/dist/core/bootstrap/init-config.js +4 -4
- package/dist/core/bootstrap/init-config.js.map +1 -1
- package/dist/core/bootstrap/startup-info.d.ts.map +1 -1
- package/dist/core/bootstrap/startup-info.js +4 -4
- package/dist/core/bootstrap/startup-info.js.map +1 -1
- package/dist/core/cache/cache.d.ts.map +1 -1
- package/dist/core/cache/cache.js +3 -3
- package/dist/core/cache/cache.js.map +1 -1
- package/dist/core/consul/access-points-updater.d.ts.map +1 -1
- package/dist/core/consul/access-points-updater.js +3 -3
- package/dist/core/consul/access-points-updater.js.map +1 -1
- package/dist/core/consul/deregister.d.ts.map +1 -1
- package/dist/core/consul/deregister.js +1 -1
- package/dist/core/consul/deregister.js.map +1 -1
- package/dist/core/consul/get-consul-api.d.ts.map +1 -1
- package/dist/core/consul/get-consul-api.js +3 -3
- package/dist/core/consul/get-consul-api.js.map +1 -1
- package/dist/core/db/pg-db.d.ts +1 -1
- package/dist/core/db/pg-db.d.ts.map +1 -1
- package/dist/core/db/pg-db.js +2 -2
- package/dist/core/db/pg-db.js.map +1 -1
- package/dist/core/debug.js +1 -1
- package/dist/core/debug.js.map +1 -1
- package/dist/core/init-mcp-server.d.ts.map +1 -1
- package/dist/core/init-mcp-server.js +9 -9
- package/dist/core/init-mcp-server.js.map +1 -1
- package/dist/core/logger.d.ts.map +1 -1
- package/dist/core/logger.js +3 -3
- package/dist/core/logger.js.map +1 -1
- package/dist/core/mcp/create-mcp-server.d.ts.map +1 -1
- package/dist/core/mcp/create-mcp-server.js +1 -1
- package/dist/core/mcp/create-mcp-server.js.map +1 -1
- package/dist/core/mcp/prompts.d.ts.map +1 -1
- package/dist/core/mcp/prompts.js +1 -3
- package/dist/core/mcp/prompts.js.map +1 -1
- package/dist/core/mcp/resources.d.ts.map +1 -1
- package/dist/core/mcp/resources.js +8 -10
- package/dist/core/mcp/resources.js.map +1 -1
- package/dist/core/mcp/server-stdio.d.ts.map +1 -1
- package/dist/core/mcp/server-stdio.js.map +1 -1
- package/dist/core/utils/formatToolResult.d.ts.map +1 -1
- package/dist/core/utils/formatToolResult.js +1 -3
- package/dist/core/utils/formatToolResult.js.map +1 -1
- package/dist/core/utils/port-checker.d.ts.map +1 -1
- package/dist/core/utils/port-checker.js +1 -1
- package/dist/core/utils/port-checker.js.map +1 -1
- package/dist/core/utils/rate-limit.js +2 -2
- package/dist/core/utils/testing/McpSseClient.d.ts.map +1 -1
- package/dist/core/utils/testing/McpSseClient.js.map +1 -1
- package/dist/core/utils/testing/McpStdioClient.d.ts.map +1 -1
- package/dist/core/utils/testing/McpStdioClient.js.map +1 -1
- package/dist/core/utils/utils.d.ts.map +1 -1
- package/dist/core/utils/utils.js.map +1 -1
- package/dist/core/web/admin-router.d.ts.map +1 -1
- package/dist/core/web/admin-router.js +4 -4
- package/dist/core/web/admin-router.js.map +1 -1
- package/dist/core/web/cors.d.ts.map +1 -1
- package/dist/core/web/cors.js.map +1 -1
- package/dist/core/web/favicon-svg.d.ts.map +1 -1
- package/dist/core/web/favicon-svg.js.map +1 -1
- package/dist/core/web/home-api.d.ts.map +1 -1
- package/dist/core/web/home-api.js +4 -4
- package/dist/core/web/home-api.js.map +1 -1
- package/dist/core/web/openapi.d.ts.map +1 -1
- package/dist/core/web/openapi.js.map +1 -1
- package/dist/core/web/server-http.d.ts.map +1 -1
- package/dist/core/web/server-http.js +20 -22
- package/dist/core/web/server-http.js.map +1 -1
- package/dist/core/web/static/agent-tester/script.js +1503 -1513
- package/dist/core/web/static/home/script.js +646 -646
- package/dist/core/web/static/token-gen/script.js +561 -561
- package/dist/core/web/svg-icons.d.ts.map +1 -1
- package/dist/core/web/svg-icons.js +1 -1
- package/dist/core/web/svg-icons.js.map +1 -1
- package/package.json +2 -6
- package/scripts/copy-static.js +31 -31
- package/scripts/kill-port.js +107 -107
- package/scripts/npm/patch_node_modules.js +8 -8
- package/scripts/npm/run.js +31 -31
- package/scripts/remove-nul.js +53 -53
- package/scripts/update-doc.js +18 -18
- package/src/template/_types_/custom-config.ts +83 -83
- package/src/template/api/router.ts +86 -89
- package/src/template/custom-resources.ts +11 -11
- package/src/template/prompts/agent-brief.ts +8 -8
- package/src/template/prompts/agent-prompt.ts +10 -10
- package/src/template/prompts/custom-prompts.ts +12 -12
- package/src/template/start.ts +71 -72
- package/src/template/tools/handle-tool-call.ts +57 -56
- package/src/template/tools/tools.ts +89 -88
- package/src/tests/jest-simple-reporter.js +10 -10
- package/src/tests/mcp/sse/test-sse-npm-package.js +96 -96
- package/src/tests/mcp/test-cases.js +143 -143
- package/src/tests/mcp/test-http.js +76 -75
- package/src/tests/mcp/test-sse.js +80 -79
- package/src/tests/mcp/test-stdio.js +83 -81
- package/src/tests/utils.ts +157 -156
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"svg-icons.d.ts","sourceRoot":"","sources":["../../../src/core/web/svg-icons.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"svg-icons.d.ts","sourceRoot":"","sources":["../../../src/core/web/svg-icons.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,EAAqB,MAAM,EAAE,MAAM,SAAS,CAAC;AAuEpD,eAAO,MAAM,eAAe,QAAO,MAelC,CAAC"}
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
* SVG Icons endpoint with color substitution
|
|
3
3
|
* Serves SVG files from static folder with currentColor replaced by primary color
|
|
4
4
|
*/
|
|
5
|
-
import { Router } from 'express';
|
|
6
5
|
import crypto from 'crypto';
|
|
7
6
|
import { readFileSync, existsSync } from 'fs';
|
|
8
7
|
import { dirname, join } from 'path';
|
|
9
8
|
import { fileURLToPath } from 'url';
|
|
9
|
+
import { Router } from 'express';
|
|
10
10
|
import { config } from '../bootstrap/init-config.js';
|
|
11
11
|
const __filename = fileURLToPath(import.meta.url);
|
|
12
12
|
const __dirname = dirname(__filename);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"svg-icons.js","sourceRoot":"","sources":["../../../src/core/web/svg-icons.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"svg-icons.js","sourceRoot":"","sources":["../../../src/core/web/svg-icons.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fa-mcp-sdk",
|
|
3
3
|
"productName": "FA MCP SDK",
|
|
4
|
-
"version": "0.4.
|
|
4
|
+
"version": "0.4.6",
|
|
5
5
|
"description": "Core infrastructure and templates for building Model Context Protocol (MCP) servers with TypeScript",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "dist/core/index.js",
|
|
@@ -99,11 +99,7 @@
|
|
|
99
99
|
"@types/mssql": "^9.1.11",
|
|
100
100
|
"@types/node": "^25.5.2",
|
|
101
101
|
"@types/swagger-ui-express": "^4.1.8",
|
|
102
|
-
"
|
|
103
|
-
"@typescript-eslint/parser": "^8.58.0",
|
|
104
|
-
"eslint": "^10.2.0",
|
|
105
|
-
"eslint-config-at-26": "^25.12.23",
|
|
106
|
-
"eslint-plugin-import-x": "^4.16.2",
|
|
102
|
+
"eslint-config-at-26-2": "^26.4.9",
|
|
107
103
|
"rimraf": "^6.1.3",
|
|
108
104
|
"typescript": "^6.0.2"
|
|
109
105
|
}
|
package/scripts/copy-static.js
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
import { cpSync, existsSync, mkdirSync } from 'fs';
|
|
2
|
-
import { dirname, join } from 'path';
|
|
3
|
-
import { fileURLToPath } from 'url';
|
|
4
|
-
|
|
5
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
6
|
-
const rootDir = join(__dirname, '..');
|
|
7
|
-
|
|
8
|
-
const staticDirs = [
|
|
9
|
-
{
|
|
10
|
-
src: 'src/core/web/static',
|
|
11
|
-
dest: 'dist/core/web/static',
|
|
12
|
-
},
|
|
13
|
-
];
|
|
14
|
-
|
|
15
|
-
for (const { src, dest } of staticDirs) {
|
|
16
|
-
const srcPath = join(rootDir, src);
|
|
17
|
-
const destPath = join(rootDir, dest);
|
|
18
|
-
|
|
19
|
-
if (existsSync(srcPath)) {
|
|
20
|
-
// Ensure destination directory exists
|
|
21
|
-
mkdirSync(dirname(destPath), { recursive: true });
|
|
22
|
-
|
|
23
|
-
// Copy directory recursively
|
|
24
|
-
cpSync(srcPath, destPath, { recursive: true });
|
|
25
|
-
console.log(`Copied: ${src} -> ${dest}`);
|
|
26
|
-
} else {
|
|
27
|
-
console.warn(`Warning: Source not found: ${src}`);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
console.log('Static files copy completed.');
|
|
1
|
+
import { cpSync, existsSync, mkdirSync } from 'fs';
|
|
2
|
+
import { dirname, join } from 'path';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
|
|
5
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
6
|
+
const rootDir = join(__dirname, '..');
|
|
7
|
+
|
|
8
|
+
const staticDirs = [
|
|
9
|
+
{
|
|
10
|
+
src: 'src/core/web/static',
|
|
11
|
+
dest: 'dist/core/web/static',
|
|
12
|
+
},
|
|
13
|
+
];
|
|
14
|
+
|
|
15
|
+
for (const { src, dest } of staticDirs) {
|
|
16
|
+
const srcPath = join(rootDir, src);
|
|
17
|
+
const destPath = join(rootDir, dest);
|
|
18
|
+
|
|
19
|
+
if (existsSync(srcPath)) {
|
|
20
|
+
// Ensure destination directory exists
|
|
21
|
+
mkdirSync(dirname(destPath), { recursive: true });
|
|
22
|
+
|
|
23
|
+
// Copy directory recursively
|
|
24
|
+
cpSync(srcPath, destPath, { recursive: true });
|
|
25
|
+
console.log(`Copied: ${src} -> ${dest}`);
|
|
26
|
+
} else {
|
|
27
|
+
console.warn(`Warning: Source not found: ${src}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
console.log('Static files copy completed.');
|
package/scripts/kill-port.js
CHANGED
|
@@ -1,107 +1,107 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* Kill process on specified port (cross-platform)
|
|
4
|
-
* Usage: node scripts/kill-port.js [port_number]
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import { exec } from 'child_process';
|
|
8
|
-
import { promisify } from 'util';
|
|
9
|
-
|
|
10
|
-
const execAsync = promisify(exec);
|
|
11
|
-
const port = process.argv[2];
|
|
12
|
-
|
|
13
|
-
if (!port) {
|
|
14
|
-
console.error('Usage: node scripts/kill-port.js [port_number]');
|
|
15
|
-
process.exit(1);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
async function killProcessOnPort (portNumber) {
|
|
19
|
-
const isWindows = process.platform === 'win32';
|
|
20
|
-
|
|
21
|
-
console.log(`Searching for process on port ${portNumber}...`);
|
|
22
|
-
|
|
23
|
-
try {
|
|
24
|
-
if (isWindows) {
|
|
25
|
-
// Windows: netstat + taskkill
|
|
26
|
-
let stdout;
|
|
27
|
-
try {
|
|
28
|
-
const result = await execAsync(`netstat -ano | findstr :${portNumber}`);
|
|
29
|
-
stdout = result
|
|
30
|
-
} catch {
|
|
31
|
-
// findstr returns error when no matches found
|
|
32
|
-
console.log(`No process found on port ${portNumber}`);
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
if (!stdout || !stdout.trim()) {
|
|
37
|
-
console.log(`No process found on port ${portNumber}`);
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
// Parse PIDs from netstat output
|
|
42
|
-
const lines = stdout.trim().split('\n');
|
|
43
|
-
const pids = new Set();
|
|
44
|
-
|
|
45
|
-
for (const line of lines) {
|
|
46
|
-
const parts = line.trim().split(/\s+/);
|
|
47
|
-
const pid = parts[parts.length - 1];
|
|
48
|
-
if (pid && pid !== '0' && !isNaN(pid)) {
|
|
49
|
-
pids.add(pid);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
if (pids.size === 0) {
|
|
54
|
-
console.log(`No process found on port ${portNumber}`);
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// Kill all PIDs
|
|
59
|
-
for (const pid of pids) {
|
|
60
|
-
try {
|
|
61
|
-
console.log(`Found process PID: ${pid}`);
|
|
62
|
-
await execAsync(`taskkill /F /PID ${pid}`);
|
|
63
|
-
console.log(`Process ${pid} on port ${portNumber} killed`);
|
|
64
|
-
} catch (error) {
|
|
65
|
-
console.error(`Failed to kill process ${pid}:`, error.message);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
} else {
|
|
69
|
-
// Unix-like: lsof + kill
|
|
70
|
-
try {
|
|
71
|
-
const { stdout } = await execAsync(`lsof -ti:${portNumber}`);
|
|
72
|
-
|
|
73
|
-
if (!stdout.trim()) {
|
|
74
|
-
console.log(`No process found on port ${portNumber}`);
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
const pids = stdout.trim().split('\n').filter(pid => pid);
|
|
79
|
-
|
|
80
|
-
for (const pid of pids) {
|
|
81
|
-
try {
|
|
82
|
-
console.log(`Found process PID: ${pid}`);
|
|
83
|
-
await execAsync(`kill -9 ${pid}`);
|
|
84
|
-
console.log(`Process ${pid} on port ${portNumber} killed`);
|
|
85
|
-
} catch (error) {
|
|
86
|
-
console.error(`Failed to kill process ${pid}:`, error.message);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
} catch (error) {
|
|
90
|
-
if (error.message.includes('No such file or directory')) {
|
|
91
|
-
console.error('Error: lsof command not found. Please install lsof.');
|
|
92
|
-
process.exit(1);
|
|
93
|
-
}
|
|
94
|
-
console.log(`No process found on port ${portNumber}`);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
} catch (error) {
|
|
98
|
-
if (error.stdout && error.stdout.includes('')) {
|
|
99
|
-
console.log(`No process found on port ${portNumber}`);
|
|
100
|
-
} else {
|
|
101
|
-
console.error('Error:', error.message);
|
|
102
|
-
process.exit(1);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
killProcessOnPort(port);
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Kill process on specified port (cross-platform)
|
|
4
|
+
* Usage: node scripts/kill-port.js [port_number]
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { exec } from 'child_process';
|
|
8
|
+
import { promisify } from 'util';
|
|
9
|
+
|
|
10
|
+
const execAsync = promisify(exec);
|
|
11
|
+
const port = process.argv[2];
|
|
12
|
+
|
|
13
|
+
if (!port) {
|
|
14
|
+
console.error('Usage: node scripts/kill-port.js [port_number]');
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
async function killProcessOnPort (portNumber) {
|
|
19
|
+
const isWindows = process.platform === 'win32';
|
|
20
|
+
|
|
21
|
+
console.log(`Searching for process on port ${portNumber}...`);
|
|
22
|
+
|
|
23
|
+
try {
|
|
24
|
+
if (isWindows) {
|
|
25
|
+
// Windows: netstat + taskkill
|
|
26
|
+
let stdout;
|
|
27
|
+
try {
|
|
28
|
+
const result = await execAsync(`netstat -ano | findstr :${portNumber}`);
|
|
29
|
+
({ stdout } = result);
|
|
30
|
+
} catch {
|
|
31
|
+
// findstr returns error when no matches found
|
|
32
|
+
console.log(`No process found on port ${portNumber}`);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (!stdout || !stdout.trim()) {
|
|
37
|
+
console.log(`No process found on port ${portNumber}`);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Parse PIDs from netstat output
|
|
42
|
+
const lines = stdout.trim().split('\n');
|
|
43
|
+
const pids = new Set();
|
|
44
|
+
|
|
45
|
+
for (const line of lines) {
|
|
46
|
+
const parts = line.trim().split(/\s+/);
|
|
47
|
+
const pid = parts[parts.length - 1];
|
|
48
|
+
if (pid && pid !== '0' && !isNaN(pid)) {
|
|
49
|
+
pids.add(pid);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if (pids.size === 0) {
|
|
54
|
+
console.log(`No process found on port ${portNumber}`);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Kill all PIDs
|
|
59
|
+
for (const pid of pids) {
|
|
60
|
+
try {
|
|
61
|
+
console.log(`Found process PID: ${pid}`);
|
|
62
|
+
await execAsync(`taskkill /F /PID ${pid}`);
|
|
63
|
+
console.log(`Process ${pid} on port ${portNumber} killed`);
|
|
64
|
+
} catch (error) {
|
|
65
|
+
console.error(`Failed to kill process ${pid}:`, error.message);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
} else {
|
|
69
|
+
// Unix-like: lsof + kill
|
|
70
|
+
try {
|
|
71
|
+
const { stdout } = await execAsync(`lsof -ti:${portNumber}`);
|
|
72
|
+
|
|
73
|
+
if (!stdout.trim()) {
|
|
74
|
+
console.log(`No process found on port ${portNumber}`);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const pids = stdout.trim().split('\n').filter(pid => pid);
|
|
79
|
+
|
|
80
|
+
for (const pid of pids) {
|
|
81
|
+
try {
|
|
82
|
+
console.log(`Found process PID: ${pid}`);
|
|
83
|
+
await execAsync(`kill -9 ${pid}`);
|
|
84
|
+
console.log(`Process ${pid} on port ${portNumber} killed`);
|
|
85
|
+
} catch (error) {
|
|
86
|
+
console.error(`Failed to kill process ${pid}:`, error.message);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
} catch (error) {
|
|
90
|
+
if (error.message.includes('No such file or directory')) {
|
|
91
|
+
console.error('Error: lsof command not found. Please install lsof.');
|
|
92
|
+
process.exit(1);
|
|
93
|
+
}
|
|
94
|
+
console.log(`No process found on port ${portNumber}`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
} catch (error) {
|
|
98
|
+
if (error.stdout && error.stdout.includes('')) {
|
|
99
|
+
console.log(`No process found on port ${portNumber}`);
|
|
100
|
+
} else {
|
|
101
|
+
console.error('Error:', error.message);
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
killProcessOnPort(port);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
|
|
4
|
-
const virusFilePath = path.join(process.env.INIT_CWD || process.cwd(), 'node_modules/es5-ext/_postinstall.js');
|
|
5
|
-
|
|
6
|
-
if (fs.existsSync(virusFilePath)) {
|
|
7
|
-
fs.unlinkSync(virusFilePath);
|
|
8
|
-
}
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
|
|
4
|
+
const virusFilePath = path.join(process.env.INIT_CWD || process.cwd(), 'node_modules/es5-ext/_postinstall.js');
|
|
5
|
+
|
|
6
|
+
if (fs.existsSync(virusFilePath)) {
|
|
7
|
+
fs.unlinkSync(virusFilePath);
|
|
8
|
+
}
|
package/scripts/npm/run.js
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
|
|
2
|
-
import { spawn } from 'child_process';
|
|
3
|
-
import os from 'os';
|
|
4
|
-
|
|
5
|
-
function runScript (command, args) {
|
|
6
|
-
const process = spawn(command, args);
|
|
7
|
-
|
|
8
|
-
process.stdout.on('data', (data) => {
|
|
9
|
-
console.log(data.toString());
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
process.stderr.on('data', (data) => {
|
|
13
|
-
console.error(data.toString());
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
process.on('close', (code) => {
|
|
17
|
-
console.log(`${command} script is completed with code: ${code}`);
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
const platform = os.platform();
|
|
22
|
-
|
|
23
|
-
const scriptType = process.argv[2] === 'reinstall' ? 'reinstall' : 'ci';
|
|
24
|
-
|
|
25
|
-
const scriptsPath = `./scripts/npm/yarn-${scriptType}`;
|
|
26
|
-
|
|
27
|
-
if (platform === 'win32') {
|
|
28
|
-
runScript('powershell.exe', ['-ExecutionPolicy', 'Bypass', '-File', `${scriptsPath}.ps1`]);
|
|
29
|
-
} else {
|
|
30
|
-
runScript('bash', [`${scriptsPath}.sh`]);
|
|
31
|
-
}
|
|
1
|
+
|
|
2
|
+
import { spawn } from 'child_process';
|
|
3
|
+
import os from 'os';
|
|
4
|
+
|
|
5
|
+
function runScript (command, args) {
|
|
6
|
+
const process = spawn(command, args);
|
|
7
|
+
|
|
8
|
+
process.stdout.on('data', (data) => {
|
|
9
|
+
console.log(data.toString());
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
process.stderr.on('data', (data) => {
|
|
13
|
+
console.error(data.toString());
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
process.on('close', (code) => {
|
|
17
|
+
console.log(`${command} script is completed with code: ${code}`);
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const platform = os.platform();
|
|
22
|
+
|
|
23
|
+
const scriptType = process.argv[2] === 'reinstall' ? 'reinstall' : 'ci';
|
|
24
|
+
|
|
25
|
+
const scriptsPath = `./scripts/npm/yarn-${scriptType}`;
|
|
26
|
+
|
|
27
|
+
if (platform === 'win32') {
|
|
28
|
+
runScript('powershell.exe', ['-ExecutionPolicy', 'Bypass', '-File', `${scriptsPath}.ps1`]);
|
|
29
|
+
} else {
|
|
30
|
+
runScript('bash', [`${scriptsPath}.sh`]);
|
|
31
|
+
}
|
package/scripts/remove-nul.js
CHANGED
|
@@ -1,53 +1,53 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Script to remove 'nul' file that accidentally gets created on Windows
|
|
5
|
-
* This file is created when using 2>nul redirection in Windows commands
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import fs from 'fs';
|
|
9
|
-
import path from 'path';
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
|
|
13
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
14
|
-
const __dirname = dirname(__filename);
|
|
15
|
-
|
|
16
|
-
// Get project root (parent of scripts directory)
|
|
17
|
-
const projectRoot = path.resolve(__dirname, '..');
|
|
18
|
-
|
|
19
|
-
// File to remove
|
|
20
|
-
const nulFile = path.join(projectRoot, 'nul');
|
|
21
|
-
|
|
22
|
-
// Check if file exists and remove it
|
|
23
|
-
if (fs.existsSync(nulFile)) {
|
|
24
|
-
try {
|
|
25
|
-
fs.unlinkSync(nulFile);
|
|
26
|
-
console.log('✅ Removed "nul" file from project root');
|
|
27
|
-
} catch (error) {
|
|
28
|
-
console.error('❌ Error removing "nul" file:', error.message);
|
|
29
|
-
process.exit(1);
|
|
30
|
-
}
|
|
31
|
-
} else {
|
|
32
|
-
console.log('ℹ️ No "nul" file found in project root');
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
// Also check for other common accidental files on Windows
|
|
36
|
-
const accidentalFiles = ['nul', 'NUL', 'con', 'CON', 'aux', 'AUX', 'prn', 'PRN'];
|
|
37
|
-
|
|
38
|
-
accidentalFiles.forEach(fileName => {
|
|
39
|
-
const filePath = path.join(projectRoot, fileName);
|
|
40
|
-
if (fs.existsSync(filePath)) {
|
|
41
|
-
try {
|
|
42
|
-
const stats = fs.statSync(filePath);
|
|
43
|
-
if (stats.isFile()) {
|
|
44
|
-
fs.unlinkSync(filePath);
|
|
45
|
-
console.log(`✅ Removed "${fileName}" file from project root`);
|
|
46
|
-
}
|
|
47
|
-
} catch (error) {
|
|
48
|
-
console.error(`⚠️ Could not remove "${fileName}":`, error.message);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
console.log('🎯 Cleanup completed');
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Script to remove 'nul' file that accidentally gets created on Windows
|
|
5
|
+
* This file is created when using 2>nul redirection in Windows commands
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import fs from 'fs';
|
|
9
|
+
import path from 'path';
|
|
10
|
+
import { dirname } from 'path';
|
|
11
|
+
import { fileURLToPath } from 'url';
|
|
12
|
+
|
|
13
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
14
|
+
const __dirname = dirname(__filename);
|
|
15
|
+
|
|
16
|
+
// Get project root (parent of scripts directory)
|
|
17
|
+
const projectRoot = path.resolve(__dirname, '..');
|
|
18
|
+
|
|
19
|
+
// File to remove
|
|
20
|
+
const nulFile = path.join(projectRoot, 'nul');
|
|
21
|
+
|
|
22
|
+
// Check if file exists and remove it
|
|
23
|
+
if (fs.existsSync(nulFile)) {
|
|
24
|
+
try {
|
|
25
|
+
fs.unlinkSync(nulFile);
|
|
26
|
+
console.log('✅ Removed "nul" file from project root');
|
|
27
|
+
} catch (error) {
|
|
28
|
+
console.error('❌ Error removing "nul" file:', error.message);
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
} else {
|
|
32
|
+
console.log('ℹ️ No "nul" file found in project root');
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Also check for other common accidental files on Windows
|
|
36
|
+
const accidentalFiles = ['nul', 'NUL', 'con', 'CON', 'aux', 'AUX', 'prn', 'PRN'];
|
|
37
|
+
|
|
38
|
+
accidentalFiles.forEach(fileName => {
|
|
39
|
+
const filePath = path.join(projectRoot, fileName);
|
|
40
|
+
if (fs.existsSync(filePath)) {
|
|
41
|
+
try {
|
|
42
|
+
const stats = fs.statSync(filePath);
|
|
43
|
+
if (stats.isFile()) {
|
|
44
|
+
fs.unlinkSync(filePath);
|
|
45
|
+
console.log(`✅ Removed "${fileName}" file from project root`);
|
|
46
|
+
}
|
|
47
|
+
} catch (error) {
|
|
48
|
+
console.error(`⚠️ Could not remove "${fileName}":`, error.message);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
console.log('🎯 Cleanup completed');
|
package/scripts/update-doc.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { cpSync, existsSync, rmSync } from 'fs';
|
|
3
|
-
import { join } from 'path';
|
|
4
|
-
|
|
5
|
-
const src = join(process.cwd(), './node_modules/fa-mcp-sdk/cli-template/FA-MCP-SDK-DOC');
|
|
6
|
-
const dest = join(process.cwd(), 'FA-MCP-SDK-DOC');
|
|
7
|
-
|
|
8
|
-
if (!existsSync(src)) {
|
|
9
|
-
console.error('Source not found:', src);
|
|
10
|
-
process.exit(1);
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
if (existsSync(dest)) {
|
|
14
|
-
rmSync(dest, { recursive: true });
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
cpSync(src, dest, { recursive: true });
|
|
18
|
-
console.log('FA-MCP-SDK-DOC updated');
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { cpSync, existsSync, rmSync } from 'fs';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
|
|
5
|
+
const src = join(process.cwd(), './node_modules/fa-mcp-sdk/cli-template/FA-MCP-SDK-DOC');
|
|
6
|
+
const dest = join(process.cwd(), 'FA-MCP-SDK-DOC');
|
|
7
|
+
|
|
8
|
+
if (!existsSync(src)) {
|
|
9
|
+
console.error('Source not found:', src);
|
|
10
|
+
process.exit(1);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
if (existsSync(dest)) {
|
|
14
|
+
rmSync(dest, { recursive: true });
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
cpSync(src, dest, { recursive: true });
|
|
18
|
+
console.log('FA-MCP-SDK-DOC updated');
|