@winmatrix/daemon 1.0.4 → 1.0.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.
Files changed (46) hide show
  1. package/bin/winmatrix-daemon.js +3 -1
  2. package/dist/core/AgentProcessManager.d.ts +111 -0
  3. package/dist/core/AgentProcessManager.d.ts.map +1 -0
  4. package/dist/core/AgentProcessManager.js +702 -0
  5. package/dist/core/AgentProcessManager.js.map +1 -0
  6. package/dist/core/ConfigLoader.d.ts +110 -0
  7. package/dist/core/ConfigLoader.d.ts.map +1 -0
  8. package/dist/core/ConfigLoader.js +296 -0
  9. package/dist/core/ConfigLoader.js.map +1 -0
  10. package/dist/core/DaemonClient.d.ts +102 -0
  11. package/dist/core/DaemonClient.d.ts.map +1 -0
  12. package/dist/core/DaemonClient.js +225 -0
  13. package/dist/core/DaemonClient.js.map +1 -0
  14. package/dist/core/DaemonFileLogger.d.ts +34 -0
  15. package/dist/core/DaemonFileLogger.d.ts.map +1 -0
  16. package/dist/core/DaemonFileLogger.js +192 -0
  17. package/dist/core/DaemonFileLogger.js.map +1 -0
  18. package/dist/core/DaemonLifecycle.d.ts +22 -0
  19. package/dist/core/DaemonLifecycle.d.ts.map +1 -0
  20. package/dist/core/DaemonLifecycle.js +157 -0
  21. package/dist/core/DaemonLifecycle.js.map +1 -0
  22. package/dist/core/DiagnosticsServer.d.ts +28 -0
  23. package/dist/core/DiagnosticsServer.d.ts.map +1 -0
  24. package/dist/core/DiagnosticsServer.js +155 -0
  25. package/dist/core/DiagnosticsServer.js.map +1 -0
  26. package/dist/core/InstallationId.d.ts +14 -0
  27. package/dist/core/InstallationId.d.ts.map +1 -0
  28. package/dist/core/InstallationId.js +50 -0
  29. package/dist/core/InstallationId.js.map +1 -0
  30. package/dist/core/RuntimeDoctor.d.ts +13 -0
  31. package/dist/core/RuntimeDoctor.d.ts.map +1 -0
  32. package/dist/core/RuntimeDoctor.js +86 -0
  33. package/dist/core/RuntimeDoctor.js.map +1 -0
  34. package/dist/core/WinMatrixAgentClient.d.ts +199 -0
  35. package/dist/core/WinMatrixAgentClient.d.ts.map +1 -0
  36. package/dist/core/WinMatrixAgentClient.js +569 -0
  37. package/dist/core/WinMatrixAgentClient.js.map +1 -0
  38. package/dist/core/WorkspaceScanner.d.ts +45 -0
  39. package/dist/core/WorkspaceScanner.d.ts.map +1 -0
  40. package/dist/core/WorkspaceScanner.js +170 -0
  41. package/dist/core/WorkspaceScanner.js.map +1 -0
  42. package/dist/index.d.ts +16 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +264 -0
  45. package/dist/index.js.map +1 -0
  46. package/package.json +3 -3
@@ -0,0 +1,170 @@
1
+ /**
2
+ * WorkspaceScanner - 扫描 workDir 获取项目元数据
3
+ *
4
+ * 在 Agent 注册成功后调用,将扫描结果通过 Daemon WS 上报至 Server。
5
+ * 安全约束:不上报绝对路径、文件内容、环境变量、含凭据的 Git remote。
6
+ */
7
+ import { readdir, readFile } from 'node:fs/promises';
8
+ import { basename } from 'node:path';
9
+ import { execFile } from 'node:child_process';
10
+ import { promisify } from 'node:util';
11
+ const execFileAsync = promisify(execFile);
12
+ /** 常用 CLI 工具列表 */
13
+ const COMMON_CLI_TOOLS = ['git', 'docker', 'pnpm', 'yarn', 'npm', 'python', 'go', 'cargo', 'node'];
14
+ /** 对 execFile 调用的超时(毫秒) */
15
+ const EXEC_TIMEOUT_MS = 5000;
16
+ /** 跨平台查找可执行文件的命令 */
17
+ function whichCmd() {
18
+ return process.platform === 'win32' ? 'where' : 'which';
19
+ }
20
+ /**
21
+ * 扫描指定工作目录,提取项目元数据。
22
+ * 所有 git/which 调用均带 5s 超时,失败不影响整体结果。
23
+ */
24
+ export async function scanWorkDir(workDir) {
25
+ const result = {
26
+ pathSummary: basename(workDir),
27
+ };
28
+ try {
29
+ const files = await readdir(workDir);
30
+ // 仅判断是否存在 package.json,不读取内容(后续统一读取)
31
+ const hasPackageJson = files.includes('package.json');
32
+ // 读取 package.json 提取关键字段
33
+ if (hasPackageJson) {
34
+ try {
35
+ const pkgRaw = await readFile(`${workDir}/package.json`, 'utf-8');
36
+ const pkg = JSON.parse(pkgRaw);
37
+ const techStack = {};
38
+ if (pkg.name) {
39
+ // name 仅用于内部识别
40
+ }
41
+ // 提取 scripts(最多 20 个 key,防止 package.json 异常膨胀)
42
+ const scriptKeys = Object.keys(pkg.scripts ?? {}).slice(0, 20);
43
+ if (scriptKeys.length > 0) {
44
+ result.scripts = {};
45
+ for (const key of scriptKeys) {
46
+ result.scripts[key] = String(pkg.scripts[key]);
47
+ }
48
+ }
49
+ // 提取技术栈信息(从 dependencies/devDependencies 推断)
50
+ const allDeps = { ...(pkg.dependencies ?? {}), ...(pkg.devDependencies ?? {}) };
51
+ const depNames = Object.keys(allDeps);
52
+ if (depNames.includes('vue')) {
53
+ techStack.framework = 'vue';
54
+ techStack.frameworkVersion = allDeps.vue;
55
+ }
56
+ else if (depNames.includes('react')) {
57
+ techStack.framework = 'react';
58
+ techStack.frameworkVersion = allDeps.react;
59
+ }
60
+ if (depNames.includes('vite')) {
61
+ techStack.bundler = 'vite';
62
+ techStack.bundlerVersion = allDeps.vite;
63
+ }
64
+ else if (depNames.includes('webpack')) {
65
+ techStack.bundler = 'webpack';
66
+ techStack.bundlerVersion = allDeps.webpack;
67
+ }
68
+ if (depNames.includes('typescript')) {
69
+ techStack.language = 'typescript';
70
+ techStack.languageVersion = allDeps.typescript;
71
+ }
72
+ else if (allDeps['@types/node'] || depNames.some((d) => d.startsWith('@types/'))) {
73
+ techStack.language = 'typescript';
74
+ }
75
+ const runtimeEntry = depNames.find((d) => d === 'next' || d === 'nuxt' || d === 'express' || d === 'fastify');
76
+ if (runtimeEntry) {
77
+ techStack.runtime = runtimeEntry;
78
+ techStack.runtimeVersion = allDeps[runtimeEntry];
79
+ }
80
+ else if (depNames.includes('node')) {
81
+ techStack.runtime = 'node';
82
+ }
83
+ // 包管理器检测
84
+ const lockFiles = files.filter((f) => ['pnpm-lock.yaml', 'yarn.lock', 'package-lock.json', 'bun.lockb'].includes(f));
85
+ if (lockFiles.includes('pnpm-lock.yaml'))
86
+ techStack.packageManager = 'pnpm';
87
+ else if (lockFiles.includes('yarn.lock'))
88
+ techStack.packageManager = 'yarn';
89
+ else if (lockFiles.includes('package-lock.json'))
90
+ techStack.packageManager = 'npm';
91
+ else if (lockFiles.includes('bun.lockb'))
92
+ techStack.packageManager = 'bun';
93
+ if (Object.keys(techStack).length > 0) {
94
+ result.techStack = techStack;
95
+ }
96
+ }
97
+ catch {
98
+ // package.json 读取或解析失败,静默跳过
99
+ }
100
+ }
101
+ // Git 信息
102
+ try {
103
+ const { stdout: remoteOut } = await execFileAsync('git', ['-C', workDir, 'remote', 'get-url', 'origin'], { timeout: EXEC_TIMEOUT_MS });
104
+ result.gitRemote = sanitizeGitRemote(remoteOut.trim());
105
+ }
106
+ catch {
107
+ // git remote 获取失败
108
+ }
109
+ try {
110
+ const { stdout: branchOut } = await execFileAsync('git', ['-C', workDir, 'rev-parse', '--abbrev-ref', 'HEAD'], { timeout: EXEC_TIMEOUT_MS });
111
+ result.gitBranch = branchOut.trim();
112
+ }
113
+ catch {
114
+ // git branch 获取失败
115
+ }
116
+ // 扫描已安装 CLI 工具
117
+ const installedCli = [];
118
+ for (const cli of COMMON_CLI_TOOLS) {
119
+ try {
120
+ await execFileAsync(whichCmd(), [cli], { timeout: EXEC_TIMEOUT_MS });
121
+ installedCli.push(cli);
122
+ }
123
+ catch {
124
+ // CLI 未安装
125
+ }
126
+ }
127
+ if (installedCli.length > 0) {
128
+ result.installedCli = installedCli;
129
+ }
130
+ }
131
+ catch {
132
+ // readdir 失败(权限不足或路径不存在),返回基本信息
133
+ }
134
+ return result;
135
+ }
136
+ /**
137
+ * 脱敏 Git remote URL:
138
+ * - HTTPS: 移除 userinfo(用户名:密码@)
139
+ * - SSH: 保持原样(git@host:org/repo)
140
+ * - 仅保留 host/org/repo
141
+ */
142
+ export function sanitizeGitRemote(remote) {
143
+ // HTTPS with credentials: https://user:token@github.com/org/repo.git
144
+ const httpsMatch = remote.match(/^https?:\/\/(?:[^@]+@)?(.+)$/i);
145
+ if (httpsMatch) {
146
+ return httpsMatch[1].replace(/\.git$/, '');
147
+ }
148
+ // SSH: git@github.com:org/repo.git - already safe
149
+ const sshMatch = remote.match(/^git@(.+)$/);
150
+ if (sshMatch) {
151
+ return sshMatch[0].replace(/\.git$/, '');
152
+ }
153
+ // Unknown format: return as-is but strip potential userinfo
154
+ return remote.replace(/\/\/[^@]+@/, '//').replace(/\.git$/, '');
155
+ }
156
+ /**
157
+ * 检测运行时可用的运行时版本信息。
158
+ * 基于 agentType 选择性检测,避免不必要的磁盘扫描。
159
+ */
160
+ export async function detectRuntimeInfo(runtimeBinary) {
161
+ try {
162
+ const { stdout } = await execFileAsync(runtimeBinary, ['--version'], { timeout: EXEC_TIMEOUT_MS });
163
+ const version = stdout.trim().split('\n')[0]; // 取第一行
164
+ return { version, available: true };
165
+ }
166
+ catch {
167
+ return { available: false };
168
+ }
169
+ }
170
+ //# sourceMappingURL=WorkspaceScanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkspaceScanner.js","sourceRoot":"","sources":["../../src/core/WorkspaceScanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * WinMatrix Daemon v2 — CLI Entry Point
4
+ *
5
+ * 使用 @winmatrix/agent-sdk 的 DaemonClient + AgentAdapter 架构。
6
+ * 方案 B:adapter 在 daemon 进程内直接运行,不再 spawn 子进程。
7
+ *
8
+ * 1. 解析 CLI 参数
9
+ * 2. 加载或生成持久化 installation UUID
10
+ * 3. 检测本地 AI runtimes
11
+ * 4. 注册 adapters 到全局 registry
12
+ * 5. 连接 WinMatrix Server (DaemonClient)
13
+ * 6. 监听 agent.create / agent.stop 信令
14
+ */
15
+ export declare function mainEntry(): Promise<void>;
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;GAYG;AA0RH,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CA8B/C"}
package/dist/index.js ADDED
@@ -0,0 +1,264 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * WinMatrix Daemon v2 — CLI Entry Point
4
+ *
5
+ * 使用 @winmatrix/agent-sdk 的 DaemonClient + AgentAdapter 架构。
6
+ * 方案 B:adapter 在 daemon 进程内直接运行,不再 spawn 子进程。
7
+ *
8
+ * 1. 解析 CLI 参数
9
+ * 2. 加载或生成持久化 installation UUID
10
+ * 3. 检测本地 AI runtimes
11
+ * 4. 注册 adapters 到全局 registry
12
+ * 5. 连接 WinMatrix Server (DaemonClient)
13
+ * 6. 监听 agent.create / agent.stop 信令
14
+ */
15
+ import { pathToFileURL } from 'node:url';
16
+ import { loadDaemonStartupOptions, persistDaemonCredentialsToDisk, sanitizeConfig, describeDaemonCredentialFile, } from './core/ConfigLoader.js';
17
+ import { getOrCreateInstallationId } from './core/InstallationId.js';
18
+ import { AgentProcessManager, } from './core/AgentProcessManager.js';
19
+ import { DaemonFileLogger, mirrorConsoleToFile } from './core/DaemonFileLogger.js';
20
+ import { startDiagnosticsServer } from './core/DiagnosticsServer.js';
21
+ import { writeDaemonPidFile, clearDaemonPidFile, runSetup, runRestart, printCliHelp, } from './core/DaemonLifecycle.js';
22
+ import { DaemonClient } from './core/DaemonClient.js';
23
+ import { getGlobalRegistry, ClaudeAdapter, CodexAdapter, HermesAdapter, OpenClawAdapter, } from '@winmatrix/agent-sdk';
24
+ import { adapterClaudePathFromRuntimeEntry, formatClaudeDoctorLines, runDaemonRuntimeDoctor, } from './core/RuntimeDoctor.js';
25
+ /* ── Constants ── */
26
+ const DAEMON_VERSION = '0.2.0';
27
+ /* ── Helpers ── */
28
+ function logConfig(config) {
29
+ const safe = sanitizeConfig(config);
30
+ const src = config.tokenSource ? ` (${config.tokenSource})` : '';
31
+ console.log(`[daemon] Server URL: ${safe.serverUrl}`);
32
+ console.log(`[daemon] Computer token: ${safe.token}${src}`);
33
+ }
34
+ function logRuntimes(runtimes) {
35
+ const available = runtimes.filter((r) => r.available);
36
+ const unavailable = runtimes.filter((r) => !r.available);
37
+ console.log(`[daemon] Detected ${available.length} available runtime(s):`);
38
+ for (const r of available) {
39
+ console.log(`[daemon] - ${r.name}${r.version ? ` (${r.version})` : ''}`);
40
+ }
41
+ if (unavailable.length > 0) {
42
+ console.log(`[daemon] ${unavailable.length} runtime(s) not found: ${unavailable.map((r) => r.name).join(', ')}`);
43
+ }
44
+ }
45
+ function registerAdapters() {
46
+ const registry = getGlobalRegistry();
47
+ registry.register('claude-code', ClaudeAdapter);
48
+ registry.register('codex', CodexAdapter);
49
+ registry.register('hermes', HermesAdapter);
50
+ registry.register('openclaw', OpenClawAdapter);
51
+ console.log(`[daemon] Registered ${registry.listTypes().length} adapter(s): ${registry.listTypes().join(', ')}`);
52
+ }
53
+ /* ── Main ── */
54
+ async function runDaemon(configArgv) {
55
+ console.log(`[daemon] WinMatrix Daemon v${DAEMON_VERSION} starting...`);
56
+ // Step 1: Load configuration
57
+ const { config, persistCredentials } = loadDaemonStartupOptions(configArgv);
58
+ const fileLogger = new DaemonFileLogger();
59
+ mirrorConsoleToFile(fileLogger);
60
+ const retentionTimer = fileLogger.startRetentionTimer();
61
+ if (persistCredentials && config.token.length > 0) {
62
+ persistDaemonCredentialsToDisk(config);
63
+ console.log('[daemon] Saved server URL and computerToken to ~/.winmatrix/daemon.json');
64
+ }
65
+ logConfig(config);
66
+ writeDaemonPidFile();
67
+ if (config.token.length === 0) {
68
+ const st = describeDaemonCredentialFile();
69
+ const detail = !st.fileExists
70
+ ? `未找到配置文件 ${st.pathLabel}。请执行一次:winmatrix-daemon setup --token wmc_...(可选 --server ws://.../connect)。`
71
+ : `${st.pathLabel} 中未配置有效的 computerToken,或 JSON 无法解析。可编辑该文件添加 "computerToken",或:winmatrix-daemon setup --token wmc_...;也可在本终端 export WINMATRIX_TOKEN 后再执行 winmatrix-daemon restart。`;
72
+ console.warn(`[daemon] WARNING: No computer token. ${detail}`);
73
+ }
74
+ // Step 2: Get or create installation ID
75
+ const installationId = getOrCreateInstallationId();
76
+ console.log(`[daemon] Installation ID: ${installationId}`);
77
+ // Step 3: Detect runtimes
78
+ const runtimeDoctor = await runDaemonRuntimeDoctor();
79
+ const runtimes = runtimeDoctor.runtimes;
80
+ logRuntimes(runtimes);
81
+ // Step 4: Register adapters
82
+ registerAdapters();
83
+ // Step 5: Create Agent Manager
84
+ const agentManager = new AgentProcessManager();
85
+ // Step 6: Connect to server as Computer
86
+ let daemonClient = null;
87
+ let isShuttingDown = false;
88
+ const diagDisabled = process.env.WINMATRIX_DAEMON_DIAG_DISABLE === '1' ||
89
+ process.env.WINMATRIX_DAEMON_DIAG_DISABLE === 'true';
90
+ const diagnosticsServer = !diagDisabled
91
+ ? startDiagnosticsServer({
92
+ fileLogger,
93
+ agentManager,
94
+ getContext: () => ({
95
+ version: DAEMON_VERSION,
96
+ installationId,
97
+ serverUrl: config.serverUrl,
98
+ computerState: daemonClient?.getState() ?? null,
99
+ computerId: daemonClient?.getComputerId() ?? null,
100
+ uptimeSec: Math.floor(process.uptime()),
101
+ }),
102
+ onRescanProfiles: async () => {
103
+ try {
104
+ await agentManager.rescanAndReportProfiles();
105
+ await daemonClient?.sendHeartbeatNow();
106
+ return { ok: true };
107
+ }
108
+ catch (err) {
109
+ return { ok: false, error: err instanceof Error ? err.message : String(err) };
110
+ }
111
+ },
112
+ })
113
+ : null;
114
+ function connectDaemon() {
115
+ if (isShuttingDown)
116
+ return;
117
+ console.log(`[daemon] Connecting to ${config.serverUrl}...`);
118
+ daemonClient = new DaemonClient({
119
+ url: config.serverUrl,
120
+ token: config.token,
121
+ installationId,
122
+ hostOs: `${process.platform} ${process.version}`,
123
+ hostArch: process.arch,
124
+ hostname: process.env.HOSTNAME ?? process.env.HOST ?? process.env.COMPUTERNAME ?? 'unknown',
125
+ daemonVersion: DAEMON_VERSION,
126
+ autoReconnect: true,
127
+ runtimes: runtimes.map((r) => ({
128
+ name: r.name,
129
+ version: r.version,
130
+ available: r.available,
131
+ })),
132
+ });
133
+ // Wire profile collection: DaemonClient reads from AgentProcessManager
134
+ daemonClient.setProfileCollector(() => agentManager.collectAgentProfiles());
135
+ agentManager.setOnProfilesChanged(() => {
136
+ void daemonClient?.sendHeartbeatNow();
137
+ });
138
+ // Handle agent.create
139
+ daemonClient.onDaemonEvent('agent.create', async (payload) => {
140
+ const raw = payload;
141
+ const agentId = typeof raw.agentId === 'string' ? raw.agentId : '';
142
+ const agentType = typeof raw.agentType === 'string' ? raw.agentType : '';
143
+ if (!agentId || !agentType) {
144
+ console.error('[daemon] Invalid agent.create payload');
145
+ return;
146
+ }
147
+ const agentApiKey = (typeof raw.apiKey === 'string' ? raw.apiKey : '').trim();
148
+ if (!agentApiKey) {
149
+ console.error('[daemon] Invalid agent.create: missing apiKey for agent');
150
+ return;
151
+ }
152
+ // endpoint 语义按 agentType 区分:hermes/openclaw=CLI 可执行路径(如 openclaw)
153
+ const endpoint = typeof raw.endpoint === 'string' ? raw.endpoint.trim() : undefined;
154
+ const agentPayload = {
155
+ agentId,
156
+ agentType,
157
+ name: typeof raw.name === 'string' ? raw.name : undefined,
158
+ serverUrl: config.serverUrl,
159
+ apiKey: agentApiKey,
160
+ workDir: typeof raw.workDir === 'string' ? raw.workDir : undefined,
161
+ adapterConfig: {
162
+ claudePath: adapterClaudePathFromRuntimeEntry(runtimeDoctor.claude)
163
+ ?? adapterClaudePathFromRuntimeEntry(config.runtimes?.claude),
164
+ mcpBridgeUrl: typeof raw.mcpBridgeUrl === 'string' ? raw.mcpBridgeUrl : undefined,
165
+ mcpApiKey: typeof raw.mcpApiKey === 'string' ? raw.mcpApiKey : undefined,
166
+ token: typeof raw.endpointToken === 'string' ? raw.endpointToken : undefined,
167
+ agentId: agentId,
168
+ // hermes: endpoint = CLI 路径(如 ~/.local/bin/hermes)
169
+ ...(agentType === 'hermes' && endpoint ? { hermesPath: endpoint } : {}),
170
+ // openclaw: endpoint = CLI 路径(如 openclaw 或 /usr/local/bin/openclaw)
171
+ ...(agentType === 'openclaw' && endpoint ? { openclawPath: endpoint } : {}),
172
+ },
173
+ };
174
+ const result = await agentManager.createAgent(agentPayload);
175
+ if (!result.ok) {
176
+ console.error(`[daemon] Failed to create agent: ${result.error}`);
177
+ // Notify server of failure via the daemon connection
178
+ daemonClient?.sendAgentError(agentId, result.error);
179
+ }
180
+ });
181
+ // Handle agent.stop
182
+ daemonClient.onDaemonEvent('agent.stop', async (payload) => {
183
+ const raw = payload;
184
+ const stopAgentId = typeof raw.agentId === 'string' ? raw.agentId : '';
185
+ if (!stopAgentId) {
186
+ console.error('[daemon] Invalid agent.stop payload');
187
+ return;
188
+ }
189
+ const result = await agentManager.stopAgent({ agentId: stopAgentId });
190
+ if (!result.ok) {
191
+ console.error(`[daemon] Failed to stop agent: ${result.error}`);
192
+ }
193
+ });
194
+ // Connect
195
+ daemonClient.connect().catch((err) => {
196
+ console.error(`[daemon] Connection failed: ${err.message}`);
197
+ });
198
+ }
199
+ async function shutdown() {
200
+ if (isShuttingDown)
201
+ return;
202
+ isShuttingDown = true;
203
+ console.log('[daemon] Shutting down...');
204
+ clearInterval(retentionTimer);
205
+ diagnosticsServer?.close();
206
+ clearDaemonPidFile();
207
+ // Await agent shutdown with timeout
208
+ try {
209
+ await Promise.race([
210
+ agentManager.stopAllAgents(),
211
+ new Promise((r) => setTimeout(r, 5_000)),
212
+ ]);
213
+ }
214
+ catch (err) {
215
+ console.error(`[daemon] Error stopping agents: ${err instanceof Error ? err.message : String(err)}`);
216
+ }
217
+ if (daemonClient) {
218
+ daemonClient.disconnect();
219
+ }
220
+ console.log('[daemon] Goodbye.');
221
+ process.exit(0);
222
+ }
223
+ // Register signal handlers
224
+ process.on('SIGINT', shutdown);
225
+ process.on('SIGTERM', shutdown);
226
+ // Start connection
227
+ connectDaemon();
228
+ }
229
+ export async function mainEntry() {
230
+ const argv = process.argv.slice(2);
231
+ const cmd = argv[0];
232
+ if (cmd === 'setup') {
233
+ runSetup(argv.slice(1));
234
+ process.exit(0);
235
+ }
236
+ if (cmd === 'restart') {
237
+ await runRestart(argv.slice(1));
238
+ process.exit(process.exitCode ?? 0);
239
+ }
240
+ if (cmd === 'doctor') {
241
+ const target = argv[1] ?? 'claude';
242
+ if (target !== 'claude') {
243
+ console.error(`[daemon] doctor: unsupported runtime '${target}'`);
244
+ process.exit(1);
245
+ }
246
+ const summary = await runDaemonRuntimeDoctor();
247
+ for (const line of formatClaudeDoctorLines(summary.claude)) {
248
+ console.log(line);
249
+ }
250
+ process.exit(summary.claude.available ? 0 : 1);
251
+ }
252
+ if (cmd === 'help' || cmd === '--help' || cmd === '-h') {
253
+ printCliHelp(DAEMON_VERSION);
254
+ process.exit(0);
255
+ }
256
+ await runDaemon(argv);
257
+ }
258
+ if (import.meta.url === pathToFileURL(process.argv[1]).href) {
259
+ mainEntry().catch((err) => {
260
+ console.error(err instanceof Error ? err.message : String(err));
261
+ process.exit(1);
262
+ });
263
+ }
264
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@winmatrix/daemon",
3
- "version": "1.0.4",
3
+ "version": "1.0.6",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -28,8 +28,8 @@
28
28
  "node": ">=18"
29
29
  },
30
30
  "dependencies": {
31
- "@winmatrix/agent-sdk": "^1.0.4",
32
- "@winmatrix/protocol": "^1.0.4",
31
+ "@winmatrix/agent-sdk": "^1.0.6",
32
+ "@winmatrix/protocol": "^1.0.6",
33
33
  "ws": "^8.16.0"
34
34
  },
35
35
  "devDependencies": {