@mclawnet/agent 0.6.3 → 0.6.5
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/service/index.js
CHANGED
|
@@ -24,7 +24,7 @@ async function getServiceManager() {
|
|
|
24
24
|
return new LinuxServiceManager();
|
|
25
25
|
}
|
|
26
26
|
case "win32": {
|
|
27
|
-
const { WindowsServiceManager } = await import("../windows-
|
|
27
|
+
const { WindowsServiceManager } = await import("../windows-IQNSUMN6.js");
|
|
28
28
|
return new WindowsServiceManager();
|
|
29
29
|
}
|
|
30
30
|
default:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"windows.d.ts","sourceRoot":"","sources":["../../src/service/windows.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAOL,KAAK,aAAa,EACnB,MAAM,aAAa,CAAC;AAErB,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAkBD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CA4B/D;AAWD,qBAAa,qBAAsB,YAAW,cAAc;IACpD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBxB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAc1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"windows.d.ts","sourceRoot":"","sources":["../../src/service/windows.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAOL,KAAK,aAAa,EACnB,MAAM,aAAa,CAAC;AAErB,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAkBD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CA4B/D;AAWD,qBAAa,qBAAsB,YAAW,cAAc;IACpD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBxB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAc1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IActB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IASrB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAcxB,MAAM,IAAI,OAAO,CAAC,aAAa,CAAC;IAehC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5B,IAAI,CACR,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GACjD,OAAO,CAAC,IAAI,CAAC;CASjB"}
|
|
@@ -103,11 +103,7 @@ pm2 resurrect
|
|
|
103
103
|
"Service not registered. Run clawnet-agent enable first."
|
|
104
104
|
);
|
|
105
105
|
}
|
|
106
|
-
|
|
107
|
-
execSync(`pm2 start ${SERVICE_NAME}`, { stdio: "ignore" });
|
|
108
|
-
} catch {
|
|
109
|
-
execSync(`pm2 start "${ecoPath}"`, { stdio: "inherit" });
|
|
110
|
-
}
|
|
106
|
+
execSync(`pm2 start "${ecoPath}"`, { stdio: "inherit" });
|
|
111
107
|
execSync("pm2 save", { stdio: "ignore" });
|
|
112
108
|
console.log("\u2713 Service started");
|
|
113
109
|
}
|
|
@@ -124,7 +120,11 @@ pm2 resurrect
|
|
|
124
120
|
if (!existsSync(ecoPath)) {
|
|
125
121
|
throw new Error("Service not registered. Run clawnet-agent enable first.");
|
|
126
122
|
}
|
|
127
|
-
|
|
123
|
+
try {
|
|
124
|
+
execSync(`pm2 restart ${SERVICE_NAME}`, { stdio: "inherit" });
|
|
125
|
+
} catch {
|
|
126
|
+
execSync(`pm2 start "${ecoPath}"`, { stdio: "inherit" });
|
|
127
|
+
}
|
|
128
128
|
console.log("\u2713 Service restarted");
|
|
129
129
|
}
|
|
130
130
|
async status() {
|
|
@@ -162,4 +162,4 @@ export {
|
|
|
162
162
|
generateEcosystem,
|
|
163
163
|
getEcosystemPath
|
|
164
164
|
};
|
|
165
|
-
//# sourceMappingURL=windows-
|
|
165
|
+
//# sourceMappingURL=windows-IQNSUMN6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/service/windows.ts"],"sourcesContent":["import { execSync, spawn } from \"child_process\";\nimport { existsSync, writeFileSync, unlinkSync, mkdirSync } from \"fs\";\nimport { join, dirname } from \"path\";\nimport { homedir } from \"os\";\nimport type { ServiceManager, ServiceStatus } from \"./types.js\";\nimport {\n SERVICE_NAME,\n getConfigDir,\n getLogDir,\n getNodePath,\n getCliPath,\n loadServiceConfig,\n type ServiceConfig,\n} from \"./config.js\";\n\nexport function getEcosystemPath(): string {\n return join(getConfigDir(), \"ecosystem.config.cjs\");\n}\n\nfunction getStartupBatPath(): string {\n return join(\n process.env.APPDATA || join(homedir(), \"AppData\", \"Roaming\"),\n \"Microsoft\",\n \"Windows\",\n \"Start Menu\",\n \"Programs\",\n \"Startup\",\n `${SERVICE_NAME}.bat`,\n );\n}\n\nfunction escapePath(p: string): string {\n return p.replace(/\\\\/g, \"\\\\\\\\\");\n}\n\nexport function generateEcosystem(config: ServiceConfig): string {\n const nodePath = escapePath(getNodePath());\n const cliPath = escapePath(getCliPath());\n const logDir = escapePath(getLogDir());\n\n const env: Record<string, string> = {};\n if (config.hubUrl) env.CLAWNET_HUB_URL = config.hubUrl;\n if (config.token) env.CLAWNET_TOKEN = config.token;\n if (config.name) env.CLAWNET_NAME = config.name;\n\n return `module.exports = {\n apps: [{\n name: '${SERVICE_NAME}',\n script: '${cliPath}',\n args: 'start -f',\n interpreter: '${nodePath}',\n env: ${JSON.stringify(env, null, 6)},\n autorestart: true,\n watch: false,\n max_restarts: 10,\n restart_delay: 5000,\n log_date_format: 'YYYY-MM-DD HH:mm:ss',\n error_file: '${logDir}/error.log',\n out_file: '${logDir}/out.log',\n merge_logs: true,\n max_memory_restart: '500M',\n }]\n};`;\n}\n\nfunction ensurePm2(): void {\n try {\n execSync(\"pm2 --version\", { stdio: \"ignore\" });\n } catch {\n console.log(\"Installing PM2...\");\n execSync(\"npm install -g pm2\", { stdio: \"inherit\" });\n }\n}\n\nexport class WindowsServiceManager implements ServiceManager {\n async install(): Promise<void> {\n ensurePm2();\n const config = loadServiceConfig();\n const ecoPath = getEcosystemPath();\n const logDir = getLogDir();\n const configDir = getConfigDir();\n\n if (!existsSync(configDir)) mkdirSync(configDir, { recursive: true });\n if (!existsSync(logDir)) mkdirSync(logDir, { recursive: true });\n\n writeFileSync(ecoPath, generateEcosystem(config), \"utf-8\");\n\n const batPath = getStartupBatPath();\n const batDir = dirname(batPath);\n if (!existsSync(batDir)) mkdirSync(batDir, { recursive: true });\n writeFileSync(batPath, `@echo off\\npm2 resurrect\\n`, \"utf-8\");\n\n console.log(`\\u2713 Service registered: ${ecoPath}`);\n }\n\n async uninstall(): Promise<void> {\n try {\n execSync(`pm2 delete ${SERVICE_NAME}`, { stdio: \"ignore\" });\n execSync(\"pm2 save\", { stdio: \"ignore\" });\n } catch {\n /* ignore */\n }\n const ecoPath = getEcosystemPath();\n if (existsSync(ecoPath)) unlinkSync(ecoPath);\n const batPath = getStartupBatPath();\n if (existsSync(batPath)) unlinkSync(batPath);\n console.log(\"\\u2713 Service removed\");\n }\n\n async start(): Promise<void> {\n ensurePm2();\n const ecoPath = getEcosystemPath();\n if (!existsSync(ecoPath)) {\n throw new Error(\n \"Service not registered. Run clawnet-agent enable first.\",\n );\n }\n // Always use ecosystem file to avoid PM2 resolving the .CMD shim from PATH\n execSync(`pm2 start \"${ecoPath}\"`, { stdio: \"inherit\" });\n execSync(\"pm2 save\", { stdio: \"ignore\" });\n console.log(\"\\u2713 Service started\");\n }\n\n async stop(): Promise<void> {\n try {\n execSync(`pm2 stop ${SERVICE_NAME}`, { stdio: \"inherit\" });\n console.log(\"\\u2713 Service stopped\");\n } catch {\n console.log(\"Service not running\");\n }\n }\n\n async restart(): Promise<void> {\n const ecoPath = getEcosystemPath();\n if (!existsSync(ecoPath)) {\n throw new Error(\"Service not registered. Run clawnet-agent enable first.\");\n }\n try {\n execSync(`pm2 restart ${SERVICE_NAME}`, { stdio: \"inherit\" });\n } catch {\n // Process may not exist in PM2, start fresh from ecosystem file\n execSync(`pm2 start \"${ecoPath}\"`, { stdio: \"inherit\" });\n }\n console.log(\"\\u2713 Service restarted\");\n }\n\n async status(): Promise<ServiceStatus> {\n try {\n const output = execSync(\"pm2 jlist\", { encoding: \"utf-8\" });\n const apps = JSON.parse(output);\n const app = apps.find((a: any) => a.name === SERVICE_NAME);\n if (!app) return { running: false };\n return {\n running: app.pm2_env?.status === \"online\",\n pid: app.pid,\n };\n } catch {\n return { running: false };\n }\n }\n\n async printStatus(): Promise<void> {\n const s = await this.status();\n console.log(\"ClawNet Agent\");\n console.log(` Status: ${s.running ? \"Running \\u2713\" : \"Stopped \\u2717\"}`);\n if (s.pid) console.log(` PID: ${s.pid}`);\n console.log(\" Platform: Windows (PM2)\");\n }\n\n async logs(\n options: { follow?: boolean; lines?: number } = {},\n ): Promise<void> {\n ensurePm2();\n const lines = options.lines || 100;\n const args = [\"logs\", SERVICE_NAME, \"--lines\", String(lines)];\n if (!options.follow) args.push(\"--nostream\");\n\n const child = spawn(\"pm2\", args, { stdio: \"inherit\", shell: true });\n await new Promise<void>((resolve) => child.on(\"close\", resolve));\n }\n}\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mclawnet/agent",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.5",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -22,11 +22,11 @@
|
|
|
22
22
|
"dependencies": {
|
|
23
23
|
"commander": "^14.0.3",
|
|
24
24
|
"ws": "^8.19.0",
|
|
25
|
-
"@mclawnet/claude-adapter": "0.1.
|
|
26
|
-
"@mclawnet/logger": "0.1.2",
|
|
25
|
+
"@mclawnet/claude-adapter": "0.1.3",
|
|
27
26
|
"@mclawnet/shared": "0.1.1",
|
|
28
27
|
"@mclawnet/swarm": "0.1.1",
|
|
29
|
-
"@mclawnet/memory": "0.1.1"
|
|
28
|
+
"@mclawnet/memory": "0.1.1",
|
|
29
|
+
"@mclawnet/logger": "0.1.2"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
32
|
"@types/node": "^22",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/service/windows.ts"],"sourcesContent":["import { execSync, spawn } from \"child_process\";\nimport { existsSync, writeFileSync, unlinkSync, mkdirSync } from \"fs\";\nimport { join, dirname } from \"path\";\nimport { homedir } from \"os\";\nimport type { ServiceManager, ServiceStatus } from \"./types.js\";\nimport {\n SERVICE_NAME,\n getConfigDir,\n getLogDir,\n getNodePath,\n getCliPath,\n loadServiceConfig,\n type ServiceConfig,\n} from \"./config.js\";\n\nexport function getEcosystemPath(): string {\n return join(getConfigDir(), \"ecosystem.config.cjs\");\n}\n\nfunction getStartupBatPath(): string {\n return join(\n process.env.APPDATA || join(homedir(), \"AppData\", \"Roaming\"),\n \"Microsoft\",\n \"Windows\",\n \"Start Menu\",\n \"Programs\",\n \"Startup\",\n `${SERVICE_NAME}.bat`,\n );\n}\n\nfunction escapePath(p: string): string {\n return p.replace(/\\\\/g, \"\\\\\\\\\");\n}\n\nexport function generateEcosystem(config: ServiceConfig): string {\n const nodePath = escapePath(getNodePath());\n const cliPath = escapePath(getCliPath());\n const logDir = escapePath(getLogDir());\n\n const env: Record<string, string> = {};\n if (config.hubUrl) env.CLAWNET_HUB_URL = config.hubUrl;\n if (config.token) env.CLAWNET_TOKEN = config.token;\n if (config.name) env.CLAWNET_NAME = config.name;\n\n return `module.exports = {\n apps: [{\n name: '${SERVICE_NAME}',\n script: '${cliPath}',\n args: 'start -f',\n interpreter: '${nodePath}',\n env: ${JSON.stringify(env, null, 6)},\n autorestart: true,\n watch: false,\n max_restarts: 10,\n restart_delay: 5000,\n log_date_format: 'YYYY-MM-DD HH:mm:ss',\n error_file: '${logDir}/error.log',\n out_file: '${logDir}/out.log',\n merge_logs: true,\n max_memory_restart: '500M',\n }]\n};`;\n}\n\nfunction ensurePm2(): void {\n try {\n execSync(\"pm2 --version\", { stdio: \"ignore\" });\n } catch {\n console.log(\"Installing PM2...\");\n execSync(\"npm install -g pm2\", { stdio: \"inherit\" });\n }\n}\n\nexport class WindowsServiceManager implements ServiceManager {\n async install(): Promise<void> {\n ensurePm2();\n const config = loadServiceConfig();\n const ecoPath = getEcosystemPath();\n const logDir = getLogDir();\n const configDir = getConfigDir();\n\n if (!existsSync(configDir)) mkdirSync(configDir, { recursive: true });\n if (!existsSync(logDir)) mkdirSync(logDir, { recursive: true });\n\n writeFileSync(ecoPath, generateEcosystem(config), \"utf-8\");\n\n const batPath = getStartupBatPath();\n const batDir = dirname(batPath);\n if (!existsSync(batDir)) mkdirSync(batDir, { recursive: true });\n writeFileSync(batPath, `@echo off\\npm2 resurrect\\n`, \"utf-8\");\n\n console.log(`\\u2713 Service registered: ${ecoPath}`);\n }\n\n async uninstall(): Promise<void> {\n try {\n execSync(`pm2 delete ${SERVICE_NAME}`, { stdio: \"ignore\" });\n execSync(\"pm2 save\", { stdio: \"ignore\" });\n } catch {\n /* ignore */\n }\n const ecoPath = getEcosystemPath();\n if (existsSync(ecoPath)) unlinkSync(ecoPath);\n const batPath = getStartupBatPath();\n if (existsSync(batPath)) unlinkSync(batPath);\n console.log(\"\\u2713 Service removed\");\n }\n\n async start(): Promise<void> {\n ensurePm2();\n const ecoPath = getEcosystemPath();\n if (!existsSync(ecoPath)) {\n throw new Error(\n \"Service not registered. Run clawnet-agent enable first.\",\n );\n }\n try {\n execSync(`pm2 start ${SERVICE_NAME}`, { stdio: \"ignore\" });\n } catch {\n execSync(`pm2 start \"${ecoPath}\"`, { stdio: \"inherit\" });\n }\n execSync(\"pm2 save\", { stdio: \"ignore\" });\n console.log(\"\\u2713 Service started\");\n }\n\n async stop(): Promise<void> {\n try {\n execSync(`pm2 stop ${SERVICE_NAME}`, { stdio: \"inherit\" });\n console.log(\"\\u2713 Service stopped\");\n } catch {\n console.log(\"Service not running\");\n }\n }\n\n async restart(): Promise<void> {\n const ecoPath = getEcosystemPath();\n if (!existsSync(ecoPath)) {\n throw new Error(\"Service not registered. Run clawnet-agent enable first.\");\n }\n execSync(`pm2 restart ${SERVICE_NAME}`, { stdio: \"inherit\" });\n console.log(\"\\u2713 Service restarted\");\n }\n\n async status(): Promise<ServiceStatus> {\n try {\n const output = execSync(\"pm2 jlist\", { encoding: \"utf-8\" });\n const apps = JSON.parse(output);\n const app = apps.find((a: any) => a.name === SERVICE_NAME);\n if (!app) return { running: false };\n return {\n running: app.pm2_env?.status === \"online\",\n pid: app.pid,\n };\n } catch {\n return { running: false };\n }\n }\n\n async printStatus(): Promise<void> {\n const s = await this.status();\n console.log(\"ClawNet Agent\");\n console.log(` Status: ${s.running ? \"Running \\u2713\" : \"Stopped \\u2717\"}`);\n if (s.pid) console.log(` PID: ${s.pid}`);\n console.log(\" Platform: Windows (PM2)\");\n }\n\n async logs(\n options: { follow?: boolean; lines?: number } = {},\n ): Promise<void> {\n ensurePm2();\n const lines = options.lines || 100;\n const args = [\"logs\", SERVICE_NAME, \"--lines\", String(lines)];\n if (!options.follow) args.push(\"--nostream\");\n\n const child = spawn(\"pm2\", args, { stdio: \"inherit\", shell: true });\n await new Promise<void>((resolve) => child.on(\"close\", resolve));\n }\n}\n"],"mappings":"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","names":[]}
|