clawconnect-agent 0.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.
Files changed (103) hide show
  1. package/.env.example +41 -0
  2. package/README.md +259 -0
  3. package/README.zh-CN.md +329 -0
  4. package/dist/commands/backup-manager.d.ts +21 -0
  5. package/dist/commands/backup-manager.js +346 -0
  6. package/dist/commands/backup-manager.js.map +1 -0
  7. package/dist/commands/install.d.ts +6 -0
  8. package/dist/commands/install.js +107 -0
  9. package/dist/commands/install.js.map +1 -0
  10. package/dist/commands/local-handlers.d.ts +2 -0
  11. package/dist/commands/local-handlers.js +375 -0
  12. package/dist/commands/local-handlers.js.map +1 -0
  13. package/dist/commands/local-runtime.d.ts +36 -0
  14. package/dist/commands/local-runtime.js +445 -0
  15. package/dist/commands/local-runtime.js.map +1 -0
  16. package/dist/commands/pair.d.ts +7 -0
  17. package/dist/commands/pair.js +100 -0
  18. package/dist/commands/pair.js.map +1 -0
  19. package/dist/commands/provider-config.d.ts +35 -0
  20. package/dist/commands/provider-config.js +291 -0
  21. package/dist/commands/provider-config.js.map +1 -0
  22. package/dist/commands/provider-handlers.d.ts +2 -0
  23. package/dist/commands/provider-handlers.js +216 -0
  24. package/dist/commands/provider-handlers.js.map +1 -0
  25. package/dist/commands/provider-registry.d.ts +19 -0
  26. package/dist/commands/provider-registry.js +120 -0
  27. package/dist/commands/provider-registry.js.map +1 -0
  28. package/dist/commands/run.d.ts +1 -0
  29. package/dist/commands/run.js +35 -0
  30. package/dist/commands/run.js.map +1 -0
  31. package/dist/commands/send-file-utils.d.ts +6 -0
  32. package/dist/commands/send-file-utils.js +94 -0
  33. package/dist/commands/send-file-utils.js.map +1 -0
  34. package/dist/commands/send-file.d.ts +41 -0
  35. package/dist/commands/send-file.js +492 -0
  36. package/dist/commands/send-file.js.map +1 -0
  37. package/dist/commands/set-token.d.ts +1 -0
  38. package/dist/commands/set-token.js +43 -0
  39. package/dist/commands/set-token.js.map +1 -0
  40. package/dist/commands/status.d.ts +1 -0
  41. package/dist/commands/status.js +135 -0
  42. package/dist/commands/status.js.map +1 -0
  43. package/dist/commands/voice-reply.d.ts +39 -0
  44. package/dist/commands/voice-reply.js +329 -0
  45. package/dist/commands/voice-reply.js.map +1 -0
  46. package/dist/config/config.d.ts +32 -0
  47. package/dist/config/config.js +103 -0
  48. package/dist/config/config.js.map +1 -0
  49. package/dist/config/env.d.ts +16 -0
  50. package/dist/config/env.js +138 -0
  51. package/dist/config/env.js.map +1 -0
  52. package/dist/i18n/index.d.ts +1 -0
  53. package/dist/i18n/index.js +147 -0
  54. package/dist/i18n/index.js.map +1 -0
  55. package/dist/index.d.ts +2 -0
  56. package/dist/index.js +117 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/platform/service-manager-common.d.ts +26 -0
  59. package/dist/platform/service-manager-common.js +51 -0
  60. package/dist/platform/service-manager-common.js.map +1 -0
  61. package/dist/platform/service-manager-linux.d.ts +6 -0
  62. package/dist/platform/service-manager-linux.js +229 -0
  63. package/dist/platform/service-manager-linux.js.map +1 -0
  64. package/dist/platform/service-manager.d.ts +16 -0
  65. package/dist/platform/service-manager.js +165 -0
  66. package/dist/platform/service-manager.js.map +1 -0
  67. package/dist/relay/attachment-staging.d.ts +12 -0
  68. package/dist/relay/attachment-staging.js +116 -0
  69. package/dist/relay/attachment-staging.js.map +1 -0
  70. package/dist/relay/chat-history.d.ts +29 -0
  71. package/dist/relay/chat-history.js +69 -0
  72. package/dist/relay/chat-history.js.map +1 -0
  73. package/dist/relay/chat-payload.d.ts +6 -0
  74. package/dist/relay/chat-payload.js +170 -0
  75. package/dist/relay/chat-payload.js.map +1 -0
  76. package/dist/relay/chat-send-attachments.d.ts +4 -0
  77. package/dist/relay/chat-send-attachments.js +47 -0
  78. package/dist/relay/chat-send-attachments.js.map +1 -0
  79. package/dist/relay/gateway-client.d.ts +41 -0
  80. package/dist/relay/gateway-client.js +288 -0
  81. package/dist/relay/gateway-client.js.map +1 -0
  82. package/dist/relay/office-payload.d.ts +19 -0
  83. package/dist/relay/office-payload.js +205 -0
  84. package/dist/relay/office-payload.js.map +1 -0
  85. package/dist/relay/reconnect.d.ts +14 -0
  86. package/dist/relay/reconnect.js +27 -0
  87. package/dist/relay/reconnect.js.map +1 -0
  88. package/dist/relay/relay-manager.d.ts +36 -0
  89. package/dist/relay/relay-manager.js +619 -0
  90. package/dist/relay/relay-manager.js.map +1 -0
  91. package/dist/relay/session-context.d.ts +19 -0
  92. package/dist/relay/session-context.js +323 -0
  93. package/dist/relay/session-context.js.map +1 -0
  94. package/dist/relay/slash-command-catalog.d.ts +8 -0
  95. package/dist/relay/slash-command-catalog.generated.d.ts +226 -0
  96. package/dist/relay/slash-command-catalog.generated.js +275 -0
  97. package/dist/relay/slash-command-catalog.generated.js.map +1 -0
  98. package/dist/relay/slash-command-catalog.js +3 -0
  99. package/dist/relay/slash-command-catalog.js.map +1 -0
  100. package/dist/relay/voice-reply-preference.d.ts +25 -0
  101. package/dist/relay/voice-reply-preference.js +103 -0
  102. package/dist/relay/voice-reply-preference.js.map +1 -0
  103. package/package.json +50 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACnF,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAExE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,CAAC;AACnD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AACpD,MAAM,oBAAoB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;AAoB3E,MAAM,UAAU,YAAY;IAC1B,OAAO,UAAU,CAAC,WAAW,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,uBAAuB,WAAW,iCAAiC,CAAC,CAAC;IACvF,CAAC;IACD,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAsB,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAyB;IACnD,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACxD,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAChG,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,GAAsB;IACzD,OAAO;QACL,eAAe,EAAE,wBAAwB,CAAC,GAAG,CAAC,kCAAkC,CAAC;QACjF,WAAW,EAAE,gBAAgB,CAAC,GAAG,CAAC,8BAA8B,CAAC;KAClE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAyB,EAAE,gBAAkC;IAClG,MAAM,UAAU,GAAsB,EAAE,GAAG,MAAM,EAAE,CAAC;IACpD,MAAM,eAAe,GAAG,wBAAwB,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;IACnF,MAAM,WAAW,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAEnE,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,UAAU,CAAC,kCAAkC,CAAC;IACvD,CAAC;SAAM,CAAC;QACN,UAAU,CAAC,kCAAkC,GAAG,eAAe,CAAC;IAClE,CAAC;IAED,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,UAAU,CAAC,8BAA8B,CAAC;IACnD,CAAC;SAAM,CAAC;QACN,UAAU,CAAC,8BAA8B,GAAG,WAAW,CAAC;IAC1D,CAAC;IAED,WAAW,CAAC,UAAU,CAAC,CAAC;IACxB,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,MAAM,oBAAoB,GAAG,uBAAuB,EAAE,CAAC;IACvD,IAAI,oBAAoB,EAAE,CAAC;QACzB,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;QACxD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAoC,CAAC;QAChE,MAAM,IAAI,GAAG,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,KAAK,CAAC;QAC1C,OAAO,kBAAkB,IAAI,EAAE,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,mBAAmB,CAAC;IAC7B,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,GAAsB;IACpD,IAAI,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC;QAC5C,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,YAAY,EAAE,QAAQ,EAAE,GAAG,CAAC,eAAe,EAAE,CAAC;IACpE,CAAC;IACD,mDAAmD;IACnD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;QACxD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAsG,CAAC;QAClI,MAAM,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,IAAI,SAAS,CAAC;QAC9E,MAAM,QAAQ,GAAG,IAAI,EAAE,OAAO,EAAE,QAAQ,IAAI,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,IAAI,SAAS,CAAC;QACvF,IAAI,KAAK,IAAI,QAAQ;YAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;IACD,gEAAgE;IAChE,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;IACpD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;IAC1D,IAAI,QAAQ,IAAI,WAAW,EAAE,CAAC;QAC5B,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;IACpD,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,wBAAwB,CAAC,eAAmC;IACnE,MAAM,OAAO,GAAG,eAAe,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC9C,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAED,SAAS,gBAAgB,CAAC,WAA+B;IACvD,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QACrE,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAC9D,CAAC"}
@@ -0,0 +1,16 @@
1
+ export declare const DEFAULT_RELAY_SERVER_URL = "https://clawlinks.cn";
2
+ export declare const DEFAULT_GATEWAY_URL = "ws://localhost:18789";
3
+ export declare const AGENT_ENV_TEMPLATE = "# ClawConnect Agent environment configuration.\n# Copy this file to ~/.clawconnect/.env for an installed agent.\n# For local development from this package directory, copy it to .env.local.\n#\n# Precedence:\n# 1. Shell environment variables\n# 2. CLAWCONNECT_ENV_FILE, if set\n# 3. ~/.clawconnect/.env\n# 4. .env.local\n# 5. .env\n# 6. Built-in defaults\n#\n# Existing pairing credentials in ~/.clawconnect/config.json still control\n# `clawconnect run`, `status`, and `send-file`. Use `clawconnect pair --server`\n# or `clawconnect reset` when switching relay servers.\n\n# Default relay used by `clawconnect pair` when --server is omitted.\nCLAWCONNECT_RELAY_SERVER_URL=https://clawlinks.cn\n\n# Optional: explicitly select another env file.\n# Usually set this in your shell, not inside ~/.clawconnect/.env.\n# CLAWCONNECT_ENV_FILE=/Users/you/.clawconnect/.env\n\n# Optional: force the local OpenClaw Gateway websocket URL instead of reading\n# ~/.openclaw/openclaw.json and falling back to ws://localhost:18789.\n# CLAWCONNECT_GATEWAY_URL=ws://localhost:18789\n\n# Optional: Gateway auth fallback.\n# Prefer `clawconnect set-token` or ~/.openclaw/openclaw.json when possible.\n# OPENCLAW_GATEWAY_TOKEN=\n# OPENCLAW_GATEWAY_PASSWORD=\n\n# Optional: assistant voice replies.\n# OPENCLAW_TTS_ENABLED=0\n# OPENCLAW_TTS_VOICE=Ting-Ting\n# OPENCLAW_TTS_RATE=\n# OPENCLAW_TTS_ENGINE=\n\n# Optional: override how local maintenance commands find the OpenClaw CLI.\n# OPENCLAW_BIN=/usr/local/bin/openclaw\n# OPENCLAW_PACKAGE_BIN=/path/to/openclaw/package/dist/index.js\n";
4
+ type EnvMap = Record<string, string | undefined>;
5
+ export interface LoadEnvOptions {
6
+ cwd?: string;
7
+ env?: EnvMap;
8
+ paths?: string[];
9
+ }
10
+ export declare function getDefaultRelayServerUrl(env?: EnvMap): string;
11
+ export declare function getConfiguredGatewayUrl(env?: EnvMap): string | undefined;
12
+ export declare function getUserEnvPath(): string;
13
+ export declare function ensureUserEnvFile(path?: string): boolean;
14
+ export declare function loadAgentEnv(options?: LoadEnvOptions): string[];
15
+ export declare function parseEnvFile(raw: string): Record<string, string>;
16
+ export {};
@@ -0,0 +1,138 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
2
+ import { homedir } from "os";
3
+ import { dirname, join, resolve } from "path";
4
+ export const DEFAULT_RELAY_SERVER_URL = "https://clawlinks.cn";
5
+ export const DEFAULT_GATEWAY_URL = "ws://localhost:18789";
6
+ export const AGENT_ENV_TEMPLATE = `# ClawConnect Agent environment configuration.
7
+ # Copy this file to ~/.clawconnect/.env for an installed agent.
8
+ # For local development from this package directory, copy it to .env.local.
9
+ #
10
+ # Precedence:
11
+ # 1. Shell environment variables
12
+ # 2. CLAWCONNECT_ENV_FILE, if set
13
+ # 3. ~/.clawconnect/.env
14
+ # 4. .env.local
15
+ # 5. .env
16
+ # 6. Built-in defaults
17
+ #
18
+ # Existing pairing credentials in ~/.clawconnect/config.json still control
19
+ # \`clawconnect run\`, \`status\`, and \`send-file\`. Use \`clawconnect pair --server\`
20
+ # or \`clawconnect reset\` when switching relay servers.
21
+
22
+ # Default relay used by \`clawconnect pair\` when --server is omitted.
23
+ CLAWCONNECT_RELAY_SERVER_URL=https://clawlinks.cn
24
+
25
+ # Optional: explicitly select another env file.
26
+ # Usually set this in your shell, not inside ~/.clawconnect/.env.
27
+ # CLAWCONNECT_ENV_FILE=/Users/you/.clawconnect/.env
28
+
29
+ # Optional: force the local OpenClaw Gateway websocket URL instead of reading
30
+ # ~/.openclaw/openclaw.json and falling back to ws://localhost:18789.
31
+ # CLAWCONNECT_GATEWAY_URL=ws://localhost:18789
32
+
33
+ # Optional: Gateway auth fallback.
34
+ # Prefer \`clawconnect set-token\` or ~/.openclaw/openclaw.json when possible.
35
+ # OPENCLAW_GATEWAY_TOKEN=
36
+ # OPENCLAW_GATEWAY_PASSWORD=
37
+
38
+ # Optional: assistant voice replies.
39
+ # OPENCLAW_TTS_ENABLED=0
40
+ # OPENCLAW_TTS_VOICE=Ting-Ting
41
+ # OPENCLAW_TTS_RATE=
42
+ # OPENCLAW_TTS_ENGINE=
43
+
44
+ # Optional: override how local maintenance commands find the OpenClaw CLI.
45
+ # OPENCLAW_BIN=/usr/local/bin/openclaw
46
+ # OPENCLAW_PACKAGE_BIN=/path/to/openclaw/package/dist/index.js
47
+ `;
48
+ export function getDefaultRelayServerUrl(env = process.env) {
49
+ return normalizeNonEmpty(env.CLAWCONNECT_RELAY_SERVER_URL) ?? DEFAULT_RELAY_SERVER_URL;
50
+ }
51
+ export function getConfiguredGatewayUrl(env = process.env) {
52
+ return normalizeNonEmpty(env.CLAWCONNECT_GATEWAY_URL);
53
+ }
54
+ export function getUserEnvPath() {
55
+ return join(homedir(), ".clawconnect", ".env");
56
+ }
57
+ export function ensureUserEnvFile(path = getUserEnvPath()) {
58
+ if (existsSync(path)) {
59
+ return false;
60
+ }
61
+ mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
62
+ writeFileSync(path, AGENT_ENV_TEMPLATE, { encoding: "utf-8", mode: 0o600 });
63
+ return true;
64
+ }
65
+ export function loadAgentEnv(options = {}) {
66
+ const cwd = options.cwd ?? process.cwd();
67
+ const env = options.env ?? process.env;
68
+ const paths = options.paths ?? defaultEnvPaths(cwd, env);
69
+ const loaded = [];
70
+ for (const path of paths) {
71
+ if (!existsSync(path))
72
+ continue;
73
+ const values = parseEnvFile(readFileSync(path, "utf-8"));
74
+ for (const [key, value] of Object.entries(values)) {
75
+ if (env[key] === undefined) {
76
+ env[key] = value;
77
+ }
78
+ }
79
+ loaded.push(path);
80
+ }
81
+ return loaded;
82
+ }
83
+ export function parseEnvFile(raw) {
84
+ const values = {};
85
+ for (const line of raw.split(/\r?\n/)) {
86
+ const trimmed = line.trim();
87
+ if (!trimmed || trimmed.startsWith("#"))
88
+ continue;
89
+ const body = trimmed.startsWith("export ") ? trimmed.slice("export ".length).trimStart() : trimmed;
90
+ const separatorIndex = body.indexOf("=");
91
+ if (separatorIndex <= 0)
92
+ continue;
93
+ const key = body.slice(0, separatorIndex).trim();
94
+ if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key))
95
+ continue;
96
+ const rawValue = body.slice(separatorIndex + 1).trim();
97
+ values[key] = parseEnvValue(rawValue);
98
+ }
99
+ return values;
100
+ }
101
+ function defaultEnvPaths(cwd, env) {
102
+ const paths = [];
103
+ const explicitPath = normalizeNonEmpty(env.CLAWCONNECT_ENV_FILE);
104
+ if (explicitPath) {
105
+ paths.push(resolve(cwd, explicitPath));
106
+ }
107
+ paths.push(getUserEnvPath());
108
+ paths.push(resolve(cwd, ".env.local"));
109
+ paths.push(resolve(cwd, ".env"));
110
+ return dedupe(paths);
111
+ }
112
+ function parseEnvValue(rawValue) {
113
+ if (!rawValue)
114
+ return "";
115
+ const quote = rawValue[0];
116
+ if ((quote === `"` || quote === `'`) && rawValue.endsWith(quote)) {
117
+ const quoted = rawValue.slice(1, -1);
118
+ return quote === `"` ? unescapeDoubleQuotedValue(quoted) : quoted;
119
+ }
120
+ const commentIndex = rawValue.search(/\s#/);
121
+ return (commentIndex >= 0 ? rawValue.slice(0, commentIndex) : rawValue).trim();
122
+ }
123
+ function unescapeDoubleQuotedValue(value) {
124
+ return value
125
+ .replace(/\\n/g, "\n")
126
+ .replace(/\\r/g, "\r")
127
+ .replace(/\\t/g, "\t")
128
+ .replace(/\\"/g, `"`)
129
+ .replace(/\\\\/g, "\\");
130
+ }
131
+ function normalizeNonEmpty(value) {
132
+ const trimmed = value?.trim() ?? "";
133
+ return trimmed.length > 0 ? trimmed : undefined;
134
+ }
135
+ function dedupe(values) {
136
+ return [...new Set(values)];
137
+ }
138
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function t(key: string, ...args: string[]): string;
@@ -0,0 +1,147 @@
1
+ const en = {
2
+ // pair
3
+ "pair.alreadyRegistered": (id) => `Gateway already registered (id=${id}). Refreshing access code…`,
4
+ "pair.invalidCredentials": "Invalid credentials (401). The server doesn't recognize this gateway.\nRun `clawconnect reset` to clear config and re-register.",
5
+ "pair.refreshFailed": (status, body) => `Failed to refresh access code: ${status} ${body}`,
6
+ "pair.registering": "Registering with relay server…",
7
+ "pair.registrationFailed": (status, body) => `Registration failed: ${status} ${body}`,
8
+ "pair.registered": (id) => `Registered! Gateway ID: ${id}`,
9
+ "pair.scanQR": "\nScan this QR code with the ClawConnect mobile app:\n",
10
+ "pair.accessCode": (code) => `\nAccess code (one-time use): ${code}`,
11
+ "pair.installingService": "\nInstalling/updating relay background service…",
12
+ // run
13
+ "run.starting": "Starting ClawConnect host agent…",
14
+ "run.gatewayId": (id) => ` Gateway ID: ${id}`,
15
+ "run.relayServer": (url) => ` Relay Server: ${url}`,
16
+ "run.gatewayUrl": (url) => ` Gateway URL: ${url}`,
17
+ "run.connected": "Relay connected.",
18
+ "run.disconnected": "Relay disconnected. Reconnecting…",
19
+ "run.retry": (attempt, delay) => `Retry attempt ${attempt}, waiting ${delay}ms…`,
20
+ // install
21
+ "install.serviceStarted": (manager) => `Service installed and started via ${manager}.`,
22
+ "install.installFailed": (manager) => `Failed to activate service via ${manager}.`,
23
+ "install.serviceFileWritten": (path) => `Service file written to: ${path}`,
24
+ "install.startManually": (command) => `Start manually: ${command}`,
25
+ "install.restarting": "Restarting relay service…",
26
+ "install.serviceRestarted": (manager) => `Service restarted via ${manager}.`,
27
+ "install.restartFailed": (manager) => `Failed to restart service via ${manager}.`,
28
+ "install.stopped": (manager) => `Relay client stopped via ${manager}.`,
29
+ "install.stoppedAndRemoved": (manager) => `Relay client stopped and removed from ${manager}.`,
30
+ "install.noService": "No running relay service found.",
31
+ "install.unsupported": (platform) => `Background service management is not supported on platform: ${platform}`,
32
+ "install.runForeground": "Run `clawconnect run` manually in the foreground instead.",
33
+ "install.configRemoved": (path) => `Config removed: ${path}`,
34
+ "install.removeConfigFailed": "Failed to remove config:",
35
+ "install.noConfig": "No config file found.",
36
+ "install.resetComplete": "\nReset complete. Run `clawconnect pair` to re-register.",
37
+ // status
38
+ "status.title": "── ClawConnect Agent Status ──\n",
39
+ "status.notPaired": "Config: ✗ Not paired — run 'clawconnect pair' first",
40
+ "status.paired": "Config: ✓ Paired",
41
+ "status.displayName": (name) => ` Display name : ${name}`,
42
+ "status.gatewayId": (id) => ` Gateway ID : ${id}`,
43
+ "status.relayServer": (url) => ` Relay server : ${url}`,
44
+ "status.configCorrupted": "Config: ✗ File exists but is corrupted",
45
+ "status.gateway": (url) => `\nGateway: ${url}`,
46
+ "status.servicePlatform": (manager) => `\nService Manager: ${manager}`,
47
+ "status.serviceNotInstalled": "\nService: ✗ Not installed — run 'clawconnect install'",
48
+ "status.serviceRunning": (manager) => `\nService: ✓ Running (${manager})`,
49
+ "status.serviceLog": (path) => ` Log : ${path}`,
50
+ "status.relayHealth": (icon, detail) => ` Relay : ${icon} ${detail}`,
51
+ "status.gatewayHealth": (icon, detail) => ` Gateway : ${icon} ${detail}`,
52
+ "status.serviceNotRunning": "\nService: ⚠ Installed but not running",
53
+ "status.serviceFile": (path) => ` Service file : ${path}`,
54
+ "status.serviceStart": (command) => ` Start : ${command}`,
55
+ "status.serviceUnsupported": (platform) => `\nService: - Unsupported on platform ${platform}`,
56
+ // set-token
57
+ "setToken.noPairing": "No pairing config found. Run 'clawconnect pair' first.",
58
+ "setToken.whereToFind": "\nWhere to find your Gateway Token:",
59
+ "setToken.option1": " Option 1 — OpenClaw desktop app: Settings → Advanced → Gateway Token",
60
+ "setToken.option2": " Option 2 — Terminal:",
61
+ "setToken.option2cmd": " cat ~/.openclaw/openclaw.json | grep -A2 'auth'",
62
+ "setToken.option3": " Option 3 — If set via environment variable: echo $OPENCLAW_GATEWAY_TOKEN\n",
63
+ "setToken.prompt": "Gateway Token (leave blank to clear): ",
64
+ "setToken.saved": "\nToken saved to ~/.clawconnect/config.json.",
65
+ "setToken.cleared": "\nToken cleared from ~/.clawconnect/config.json.",
66
+ "setToken.restart": "Run 'clawconnect restart' to apply the change.\n",
67
+ };
68
+ const zh = {
69
+ // pair
70
+ "pair.alreadyRegistered": (id) => `网关已注册 (id=${id}),正在刷新访问码…`,
71
+ "pair.invalidCredentials": "凭证无效 (401),服务器无法识别此网关。\n请运行 `clawconnect reset` 清除配置后重新注册。",
72
+ "pair.refreshFailed": (status, body) => `刷新访问码失败:${status} ${body}`,
73
+ "pair.registering": "正在向中继服务器注册…",
74
+ "pair.registrationFailed": (status, body) => `注册失败:${status} ${body}`,
75
+ "pair.registered": (id) => `注册成功!网关 ID:${id}`,
76
+ "pair.scanQR": "\n请用 ClawConnect 移动应用扫描此二维码:\n",
77
+ "pair.accessCode": (code) => `\n访问码(一次性使用):${code}`,
78
+ "pair.installingService": "\n正在安装/更新中继后台服务…",
79
+ // run
80
+ "run.starting": "正在启动 ClawConnect 主机代理…",
81
+ "run.gatewayId": (id) => ` 网关 ID: ${id}`,
82
+ "run.relayServer": (url) => ` 中继服务器:${url}`,
83
+ "run.gatewayUrl": (url) => ` 网关地址: ${url}`,
84
+ "run.connected": "中继已连接。",
85
+ "run.disconnected": "中继已断开,正在重连…",
86
+ "run.retry": (attempt, delay) => `第 ${attempt} 次重试,等待 ${delay}ms…`,
87
+ // install
88
+ "install.serviceStarted": (manager) => `服务已通过 ${manager} 安装并启动。`,
89
+ "install.installFailed": (manager) => `通过 ${manager} 启动服务失败。`,
90
+ "install.serviceFileWritten": (path) => `服务文件已写入:${path}`,
91
+ "install.startManually": (command) => `请手动运行:${command}`,
92
+ "install.restarting": "正在重启中继服务…",
93
+ "install.serviceRestarted": (manager) => `服务已通过 ${manager} 重启。`,
94
+ "install.restartFailed": (manager) => `通过 ${manager} 重启服务失败。`,
95
+ "install.stopped": (manager) => `已通过 ${manager} 停止中继客户端。`,
96
+ "install.stoppedAndRemoved": (manager) => `中继客户端已停止并从 ${manager} 移除。`,
97
+ "install.noService": "未找到正在运行的中继服务。",
98
+ "install.unsupported": (platform) => `当前平台 ${platform} 暂不支持后台服务管理`,
99
+ "install.runForeground": "请改用 `clawconnect run` 前台运行。",
100
+ "install.configRemoved": (path) => `配置文件已删除:${path}`,
101
+ "install.removeConfigFailed": "删除配置文件失败:",
102
+ "install.noConfig": "未找到配置文件。",
103
+ "install.resetComplete": "\n重置完成。请运行 `clawconnect pair` 重新注册。",
104
+ // status
105
+ "status.title": "── ClawConnect 主机代理状态 ──\n",
106
+ "status.notPaired": "配置:✗ 未配对 — 请先运行 'clawconnect pair'",
107
+ "status.paired": "配置:✓ 已配对",
108
+ "status.displayName": (name) => ` 显示名称:${name}`,
109
+ "status.gatewayId": (id) => ` 网关 ID: ${id}`,
110
+ "status.relayServer": (url) => ` 中继服务器:${url}`,
111
+ "status.configCorrupted": "配置:✗ 文件存在但已损坏",
112
+ "status.gateway": (url) => `\n网关地址:${url}`,
113
+ "status.servicePlatform": (manager) => `\n服务管理器:${manager}`,
114
+ "status.serviceNotInstalled": "\n服务:✗ 未安装 — 请运行 'clawconnect install'",
115
+ "status.serviceRunning": (manager) => `\n服务:✓ 运行中 (${manager})`,
116
+ "status.serviceLog": (path) => ` 日志:${path}`,
117
+ "status.relayHealth": (icon, detail) => ` 中继连接:${icon} ${detail}`,
118
+ "status.gatewayHealth": (icon, detail) => ` 网关连接:${icon} ${detail}`,
119
+ "status.serviceNotRunning": "\n服务:⚠ 已安装但未运行",
120
+ "status.serviceFile": (path) => ` 服务文件:${path}`,
121
+ "status.serviceStart": (command) => ` 启动命令:${command}`,
122
+ "status.serviceUnsupported": (platform) => `\n服务:- 平台 ${platform} 暂不支持`,
123
+ // set-token
124
+ "setToken.noPairing": "未找到配对配置,请先运行 'clawconnect pair'。",
125
+ "setToken.whereToFind": "\n如何查找 Gateway Token:",
126
+ "setToken.option1": " 方式一 — OpenClaw 桌面应用:设置 → 高级 → Gateway Token",
127
+ "setToken.option2": " 方式二 — 终端:",
128
+ "setToken.option2cmd": " cat ~/.openclaw/openclaw.json | grep -A2 'auth'",
129
+ "setToken.option3": " 方式三 — 若通过环境变量设置:echo $OPENCLAW_GATEWAY_TOKEN\n",
130
+ "setToken.prompt": "Gateway Token(留空则清除):",
131
+ "setToken.saved": "\nToken 已保存到 ~/.clawconnect/config.json。",
132
+ "setToken.cleared": "\nToken 已从 ~/.clawconnect/config.json 清除。",
133
+ "setToken.restart": "请运行 'clawconnect restart' 使修改生效。\n",
134
+ };
135
+ function detectLocale() {
136
+ const lang = process.env.LANG ?? process.env.LC_ALL ?? process.env.LANGUAGE ?? "";
137
+ return lang.toLowerCase().startsWith("zh") ? "zh" : "en";
138
+ }
139
+ const locale = detectLocale();
140
+ const msgs = locale === "zh" ? zh : en;
141
+ export function t(key, ...args) {
142
+ const val = msgs[key] ?? en[key] ?? key;
143
+ if (typeof val === "function")
144
+ return val(...args);
145
+ return val;
146
+ }
147
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/i18n/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/index.js ADDED
@@ -0,0 +1,117 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from "commander";
3
+ import { createRequire } from "module";
4
+ import { DEFAULT_RELAY_SERVER_URL, ensureUserEnvFile, loadAgentEnv } from "./config/env.js";
5
+ import { pairCommand } from "./commands/pair.js";
6
+ import { runCommand } from "./commands/run.js";
7
+ import { sendFileCommand } from "./commands/send-file.js";
8
+ import { installCommand, uninstallCommand, stopCommand, restartCommand, resetCommand } from "./commands/install.js";
9
+ import { statusCommand } from "./commands/status.js";
10
+ import { setTokenCommand } from "./commands/set-token.js";
11
+ const require = createRequire(import.meta.url);
12
+ const { version } = require("../package.json");
13
+ ensureUserEnvFile();
14
+ loadAgentEnv();
15
+ const program = new Command();
16
+ program
17
+ .name("clawconnect")
18
+ .description("ClawConnect host agent — connects OpenClaw gateway hosts to your relay server")
19
+ .version(version);
20
+ program
21
+ .command("pair")
22
+ .description("Register with relay server and display QR code for iOS pairing")
23
+ .option("-s, --server <url>", `Relay server URL (default: CLAWCONNECT_RELAY_SERVER_URL or ${DEFAULT_RELAY_SERVER_URL})`)
24
+ .option("-n, --name <name>", "Display name for this host")
25
+ .option("--code-only", "Print only the access code and skip QR code output", false)
26
+ .action(async (opts) => {
27
+ try {
28
+ await pairCommand(opts);
29
+ }
30
+ catch (err) {
31
+ console.error("Error:", err instanceof Error ? err.message : err);
32
+ process.exit(1);
33
+ }
34
+ });
35
+ program
36
+ .command("send-file")
37
+ .description("Upload a local file to the paired gateway's chat session")
38
+ .argument("<path>", "Path to the local file")
39
+ .option("-g, --gateway <id>", "Override gateway ID from local config")
40
+ .option("-s, --session <key>", "Target chat session key (defaults to the latest active session)")
41
+ .option("--json", "Print the upload result as JSON", false)
42
+ .action(async (filePath, opts) => {
43
+ try {
44
+ await sendFileCommand({
45
+ filePath,
46
+ gateway: opts.gateway,
47
+ session: opts.session,
48
+ json: opts.json,
49
+ });
50
+ }
51
+ catch (err) {
52
+ console.error("Error:", err instanceof Error ? err.message : err);
53
+ process.exit(1);
54
+ }
55
+ });
56
+ program
57
+ .command("run")
58
+ .description("Run relay client in foreground (used by the background service manager)")
59
+ .action(async () => {
60
+ try {
61
+ await runCommand();
62
+ }
63
+ catch (err) {
64
+ console.error("Error:", err instanceof Error ? err.message : err);
65
+ process.exit(1);
66
+ }
67
+ });
68
+ program
69
+ .command("stop")
70
+ .description("Stop relay client background service")
71
+ .action(() => {
72
+ stopCommand();
73
+ });
74
+ program
75
+ .command("status")
76
+ .description("Show pairing config, gateway URL, and background service status")
77
+ .action(() => {
78
+ statusCommand();
79
+ });
80
+ program
81
+ .command("install")
82
+ .description("Register as a background service (launchd on macOS, systemd --user on Linux)")
83
+ .action(() => {
84
+ installCommand();
85
+ });
86
+ program
87
+ .command("restart")
88
+ .description("Restart the relay background service")
89
+ .action(() => {
90
+ restartCommand();
91
+ });
92
+ program
93
+ .command("uninstall")
94
+ .description("Remove background service")
95
+ .action(() => {
96
+ uninstallCommand();
97
+ });
98
+ program
99
+ .command("set-token")
100
+ .description("Set the local OpenClaw gateway token (needed when using token auth)")
101
+ .action(async () => {
102
+ try {
103
+ await setTokenCommand();
104
+ }
105
+ catch (err) {
106
+ console.error("Error:", err instanceof Error ? err.message : err);
107
+ process.exit(1);
108
+ }
109
+ });
110
+ program
111
+ .command("reset")
112
+ .description("Clear saved config and stop service — use when switching servers or on auth errors")
113
+ .action(() => {
114
+ resetCommand();
115
+ });
116
+ program.parse(process.argv);
117
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export type ServicePlatform = "macos" | "linux" | "unsupported";
2
+ export interface ServiceStatus {
3
+ platform: ServicePlatform;
4
+ installed: boolean;
5
+ running: boolean;
6
+ serviceName: string;
7
+ manager: string;
8
+ servicePath?: string;
9
+ logPath: string;
10
+ startHint?: string;
11
+ }
12
+ export declare const LOG_DIR: string;
13
+ export declare const LOG_PATH: string;
14
+ export declare const ERROR_LOG_PATH: string;
15
+ export declare const LINUX_SERVICE_NAME = "clawconnect-agent.service";
16
+ export declare const LINUX_SYSTEMD_USER_DIR: string;
17
+ export declare const LINUX_SERVICE_PATH: string;
18
+ export declare const LINUX_NOHUP_PID_PATH: string;
19
+ export declare const LINUX_NOHUP_START_SCRIPT_PATH: string;
20
+ export declare function detectPlatform(): ServicePlatform;
21
+ export declare function shellEscape(arg: string): string;
22
+ export declare function run(command: string, stdio?: "pipe" | "inherit"): void;
23
+ export declare function commandExists(command: string): boolean;
24
+ export declare function resolveServiceEntryPath(scriptPath: string): string;
25
+ export declare function getProgramArgs(): string[];
26
+ export declare function ensureLogDir(): void;
@@ -0,0 +1,51 @@
1
+ import { execSync } from "child_process";
2
+ import { existsSync, mkdirSync } from "fs";
3
+ import { homedir } from "os";
4
+ import { join } from "path";
5
+ export const LOG_DIR = join(homedir(), ".clawconnect");
6
+ export const LOG_PATH = join(LOG_DIR, "clawconnect.log");
7
+ export const ERROR_LOG_PATH = join(LOG_DIR, "clawconnect-error.log");
8
+ export const LINUX_SERVICE_NAME = "clawconnect-agent.service";
9
+ export const LINUX_SYSTEMD_USER_DIR = join(homedir(), ".config", "systemd", "user");
10
+ export const LINUX_SERVICE_PATH = join(LINUX_SYSTEMD_USER_DIR, LINUX_SERVICE_NAME);
11
+ export const LINUX_NOHUP_PID_PATH = join(LOG_DIR, "clawconnect.pid");
12
+ export const LINUX_NOHUP_START_SCRIPT_PATH = join(LOG_DIR, "clawconnect-start.sh");
13
+ export function detectPlatform() {
14
+ if (process.platform === "darwin")
15
+ return "macos";
16
+ if (process.platform === "linux")
17
+ return "linux";
18
+ return "unsupported";
19
+ }
20
+ export function shellEscape(arg) {
21
+ return `'${arg.replace(/'/g, `'\\''`)}'`;
22
+ }
23
+ export function run(command, stdio = "pipe") {
24
+ execSync(command, { stdio });
25
+ }
26
+ export function commandExists(command) {
27
+ try {
28
+ run(`command -v ${command}`, "pipe");
29
+ return true;
30
+ }
31
+ catch {
32
+ return false;
33
+ }
34
+ }
35
+ export function resolveServiceEntryPath(scriptPath) {
36
+ const normalizedScriptPath = scriptPath.replace(/\\/g, "/");
37
+ const distIndexPath = normalizedScriptPath.replace(/\/src\/index\.(ts|js)$/, "/dist/index.js");
38
+ if (distIndexPath !== normalizedScriptPath && existsSync(distIndexPath)) {
39
+ return distIndexPath;
40
+ }
41
+ return scriptPath;
42
+ }
43
+ export function getProgramArgs() {
44
+ const nodeBin = process.execPath;
45
+ const scriptPath = resolveServiceEntryPath(process.argv[1]);
46
+ return nodeBin === scriptPath ? [scriptPath, "run"] : [nodeBin, scriptPath, "run"];
47
+ }
48
+ export function ensureLogDir() {
49
+ mkdirSync(LOG_DIR, { recursive: true });
50
+ }
51
+ //# sourceMappingURL=service-manager-common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-manager-common.js","sourceRoot":"","sources":["../../src/platform/service-manager-common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAe5B,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,CAAC;AACvD,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;AACzD,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC;AAErE,MAAM,CAAC,MAAM,kBAAkB,GAAG,2BAA2B,CAAC;AAC9D,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;AACpF,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC,sBAAsB,EAAE,kBAAkB,CAAC,CAAC;AACnF,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;AACrE,MAAM,CAAC,MAAM,6BAA6B,GAAG,IAAI,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;AAEnF,MAAM,UAAU,cAAc;IAC5B,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAClD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,OAAO,CAAC;IACjD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,OAAe,EAAE,QAA4B,MAAM;IACrE,QAAQ,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,IAAI,CAAC;QACH,GAAG,CAAC,cAAc,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,UAAkB;IACxD,MAAM,oBAAoB,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC5D,MAAM,aAAa,GAAG,oBAAoB,CAAC,OAAO,CAAC,wBAAwB,EAAE,gBAAgB,CAAC,CAAC;IAC/F,IAAI,aAAa,KAAK,oBAAoB,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACxE,OAAO,aAAa,CAAC;IACvB,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;IACjC,MAAM,UAAU,GAAG,uBAAuB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,OAAO,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { type ServiceStatus } from "./service-manager-common.js";
2
+ export declare function installLinuxService(): boolean;
3
+ export declare function stopLinuxService(): boolean;
4
+ export declare function uninstallLinuxService(): boolean;
5
+ export declare function restartLinuxService(): boolean;
6
+ export declare function getLinuxServiceStatus(): ServiceStatus;