rovloom 0.5.0 → 0.6.1
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/README.md +9 -1
- package/dist/src/admin/index.js +1 -1
- package/dist/src/{chunk-emcefrc1.js → chunk-0e9gg4sg.js} +3 -4
- package/dist/src/chunk-1xer1ent.js +102 -0
- package/dist/src/{chunk-863tk45b.js → chunk-41fny9qm.js} +5 -5
- package/dist/src/{chunk-zjzrcc59.js → chunk-59h200cr.js} +139 -7
- package/dist/src/chunk-5w5srj3b.js +93 -0
- package/dist/src/{chunk-d4ejrtjq.js → chunk-6n6b1xpy.js} +1 -1
- package/dist/src/{chunk-ympzv86c.js → chunk-6w4g9fw8.js} +16 -4
- package/dist/src/{chunk-smpevv7n.js → chunk-73aq2qkz.js} +9 -16
- package/dist/src/{chunk-0ake7e4r.js → chunk-8c9yc0ge.js} +9 -17
- package/dist/src/{chunk-57ayxqnb.js → chunk-8fy8w7ds.js} +2 -23
- package/dist/src/{chunk-64ftwe9b.js → chunk-8ykrqhxh.js} +8 -2
- package/dist/src/{chunk-2tn0r64b.js → chunk-9h9x79bx.js} +5 -5
- package/dist/src/{chunk-nyn75b8v.js → chunk-av31bx1e.js} +31 -2
- package/dist/src/{chunk-0xgpxdgc.js → chunk-bbdtsg4b.js} +7 -5
- package/dist/src/{chunk-q5pgbwb3.js → chunk-e7jgpxkf.js} +2 -2
- package/dist/src/{chunk-zj48jvfe.js → chunk-efty77sb.js} +3 -40
- package/dist/src/{chunk-abd4envz.js → chunk-enj7s8cv.js} +71 -78
- package/dist/src/{chunk-4etdq0cp.js → chunk-ftpy8xx3.js} +313 -28
- package/dist/src/{chunk-zdxww7ms.js → chunk-h3xyq7zk.js} +1 -1
- package/dist/src/{chunk-ttsrctxg.js → chunk-hxmq28pg.js} +9 -7
- package/dist/src/{chunk-r0nfthsf.js → chunk-j59ac0xs.js} +2 -2
- package/dist/src/{chunk-5s2emvww.js → chunk-j6svdqr8.js} +10 -302
- package/dist/src/{chunk-9y36gntb.js → chunk-jkzfck98.js} +10 -5
- package/dist/src/{chunk-sj24fpz3.js → chunk-m76cmkfy.js} +28 -30
- package/dist/src/{chunk-5n8csngz.js → chunk-m96mbzcw.js} +816 -305
- package/dist/src/{chunk-xhq21g24.js → chunk-m9c1pnv9.js} +3 -3
- package/dist/src/{chunk-fnakrk0a.js → chunk-n3z3jaxy.js} +39 -36
- package/dist/src/{chunk-e7x51y0t.js → chunk-ndj0ay2p.js} +19 -18
- package/dist/src/chunk-pgs9jp6t.js +320 -0
- package/dist/src/chunk-pksaqt9a.js +25 -0
- package/dist/src/{chunk-ebm3kvnq.js → chunk-pnep7yhj.js} +31 -100
- package/dist/src/chunk-qn5xae7g.js +66 -0
- package/dist/src/{chunk-0pewfj89.js → chunk-qp8tgms2.js} +1 -1
- package/dist/src/{chunk-7k9g0x5e.js → chunk-rmgw8h27.js} +10 -8
- package/dist/src/{chunk-gbsbwssz.js → chunk-sf4ztxba.js} +3 -3
- package/dist/src/{chunk-7q96e161.js → chunk-shez7hkc.js} +6 -12
- package/dist/src/chunk-sqz614bh.js +30 -0
- package/dist/src/{chunk-09f9q26d.js → chunk-vdwzb63d.js} +2 -2
- package/dist/src/chunk-xtvgm6kf.js +48 -0
- package/dist/src/chunk-y8zm75jt.js +157 -0
- package/dist/src/chunk-yasqw2vj.js +756 -0
- package/dist/src/{chunk-ybte82d3.js → chunk-z0qmfqvd.js} +4 -3
- package/dist/src/chunk-zm705snh.js +53 -0
- package/dist/src/cli/index.js +39 -30
- package/dist/src/cli/main.js +14 -9
- package/dist/src/connector/herdr/installation.js +4 -4
- package/dist/src/connector/herdr/provider.js +9 -9
- package/dist/src/connector/herdr/runtime.js +7 -7
- package/dist/src/connector/luvus/index.js +7 -6
- package/dist/src/mcp/index.js +16 -14
- package/dist/src/runtime/index.js +16 -15
- package/dist/src/service/index.js +3 -4
- package/dist/src/store.js +4 -4
- package/dist/src/transport/index.js +9 -9
- package/dist/src/webui/index.js +975 -834
- package/package.json +1 -1
- package/dist/src/chunk-5j0gj6w2.js +0 -7
- package/dist/src/chunk-9yg6x3gt.js +0 -24
- package/dist/src/chunk-erdq0rn8.js +0 -1300
- package/dist/src/chunk-n073xnr1.js +0 -1117
- package/dist/src/chunk-rwpynx2j.js +0 -51
- package/dist/src/chunk-vwcntax3.js +0 -228
|
@@ -6,7 +6,7 @@ import"./chunk-9tt13dm0.js";
|
|
|
6
6
|
import"./chunk-g7pnjzkk.js";
|
|
7
7
|
import {
|
|
8
8
|
readOrCreateRoleConfig
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-8ykrqhxh.js";
|
|
10
10
|
import {
|
|
11
11
|
resolveRoleConfigPath2
|
|
12
12
|
} from "./chunk-1bf0wmgk.js";
|
|
@@ -50,7 +50,7 @@ function initializeRoleConfig(args, environment) {
|
|
|
50
50
|
if (config.role === "connector" && provider && (config.native?.provider ?? "luvus") !== provider) {
|
|
51
51
|
throw new CliError2("config_exists");
|
|
52
52
|
}
|
|
53
|
-
if (config.role === "gateway" && container && [config.mcp_hostname, config.device_hostname, config.management_hostname].some((host) => host !== "0.0.0.0")) {
|
|
53
|
+
if (config.role === "gateway" && container && (config.management_lan !== true || [config.mcp_hostname, config.device_hostname, config.management_hostname].some((host) => host !== "0.0.0.0"))) {
|
|
54
54
|
throw new CliError2("config_exists");
|
|
55
55
|
}
|
|
56
56
|
return config;
|
|
@@ -59,4 +59,4 @@ export {
|
|
|
59
59
|
initializeRoleConfig
|
|
60
60
|
};
|
|
61
61
|
|
|
62
|
-
//# debugId=
|
|
62
|
+
//# debugId=5FE0BCD7E52AF87B64756E2164756E21
|
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
// @bun
|
|
2
|
+
import"./chunk-d71r315c.js";
|
|
3
|
+
import"./chunk-7crhmqn2.js";
|
|
2
4
|
import {
|
|
3
5
|
object2,
|
|
4
6
|
fields2,
|
|
5
7
|
boundedJson2
|
|
6
8
|
} from "./chunk-qt9m2kg2.js";
|
|
9
|
+
import"./chunk-9tt13dm0.js";
|
|
10
|
+
import"./chunk-g7pnjzkk.js";
|
|
11
|
+
import {
|
|
12
|
+
cliMessages2,
|
|
13
|
+
formatMessage2
|
|
14
|
+
} from "./chunk-pgs9jp6t.js";
|
|
7
15
|
import {
|
|
8
|
-
setupFileStamp,
|
|
9
|
-
writeSetupFile,
|
|
10
|
-
readSetupJson,
|
|
11
16
|
REGISTRY_MAX_BYTES,
|
|
12
17
|
parseRegistry,
|
|
13
18
|
DEFAULT_ADMIN_TTL_DAYS,
|
|
@@ -15,13 +20,17 @@ import {
|
|
|
15
20
|
issueAdmin,
|
|
16
21
|
revokeAdmin,
|
|
17
22
|
summarizeAdmins
|
|
18
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-pnep7yhj.js";
|
|
24
|
+
import {
|
|
25
|
+
setupFileStamp,
|
|
26
|
+
writeSetupFile,
|
|
27
|
+
readSetupJson
|
|
28
|
+
} from "./chunk-1xer1ent.js";
|
|
19
29
|
import {
|
|
20
30
|
resolveRoleConfigPath2
|
|
21
31
|
} from "./chunk-1bf0wmgk.js";
|
|
22
32
|
import {
|
|
23
|
-
runtimeReference
|
|
24
|
-
readRuntimeJson
|
|
33
|
+
runtimeReference
|
|
25
34
|
} from "./chunk-z7kkfrgz.js";
|
|
26
35
|
import {
|
|
27
36
|
CLI_ERROR_CODES,
|
|
@@ -31,20 +40,12 @@ import {
|
|
|
31
40
|
import {
|
|
32
41
|
canonicalLoopbackHost
|
|
33
42
|
} from "./chunk-6n9s7nfe.js";
|
|
43
|
+
import"./chunk-3nnahj0j.js";
|
|
44
|
+
import"./chunk-0y5542k8.js";
|
|
34
45
|
|
|
35
46
|
// src/cli/admin-command.ts
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
rovloom admin create [--principal ID] [--ttl-days N] [--config /absolute/path/gateway.json]
|
|
39
|
-
rovloom admin revoke [--principal ID] [--config /absolute/path/gateway.json]
|
|
40
|
-
|
|
41
|
-
\u7BA1\u7406\u9875\uFF08\u9ED8\u8BA4 http://127.0.0.1:9445/\uFF09\u7528 HTTP Basic \u767B\u5F55\uFF1A\u7528\u6237\u540D\u662F\u7BA1\u7406\u5458 ID\uFF08\u9ED8\u8BA4 admin\uFF09\uFF0C\u5BC6\u7801\u662F create \u8F93\u51FA\u7684\u53E3\u4EE4\u3002
|
|
42
|
-
\u53E3\u4EE4\u539F\u503C\u53EA\u5728 create \u65F6\u5199\u5230 stdout \u4E00\u6B21\uFF08Gateway \u53EA\u4FDD\u5B58 SHA-256 \u6458\u8981\uFF09\uFF1B\u5176\u4F59\u4FE1\u606F\u5199\u5230 stderr\u3002\u4E22\u5931\u53E3\u4EE4\u5C31\u518D create \u4E00\u6B21\uFF1A
|
|
43
|
-
\u540C\u540D\u7BA1\u7406\u5458\u88AB\u91CD\u65B0\u7B7E\u53D1\uFF0C\u65E7\u53E3\u4EE4\u4E0E\u5DF2\u767B\u5F55\u7684\u6D4F\u89C8\u5668\u4F1A\u8BDD\u7ACB\u5373\u5931\u6548\u3002revoke \u5220\u9664\u7BA1\u7406\u5458\uFF0C\u540C\u6837\u7ACB\u5373\u751F\u6548\u3002\u4FEE\u6539\u65E0\u9700\u91CD\u542F Gateway\u3002
|
|
44
|
-
\u7BA1\u7406\u5458\u4E0D\u80FD\u8C03\u7528 MCP\uFF0C\u4E5F\u4E0E MCP \u4EE4\u724C\u3001\u8BBE\u5907\u51ED\u636E\u4E92\u4E0D\u901A\u7528\uFF1B\u6709\u6548\u671F\u9ED8\u8BA4 ${DEFAULT_ADMIN_TTL_DAYS} \u5929\uFF081-365\uFF09\u3002
|
|
45
|
-
\u53EF\u5728\u9996\u6B21\u914D\u5BF9\u524D\u521B\u5EFA\uFF1A\u5168\u65B0 Gateway \u4F1A\u81EA\u884C\u521D\u59CB\u5316\u7A7A\u7684 MCP \u8C03\u7528\u65B9\u6CE8\u518C\u8868\uFF0C\u968F\u540E\u5373\u53EF\u5728\u7BA1\u7406\u9875
|
|
46
|
-
\u5728\u7EBF\u914D\u5BF9\u9996\u53F0 Connector\uFF08\u65B0\u5EFA\u7533\u8BF7\uFF0C\u8BBE\u5907\u8FD0\u884C rovloom connector --claim\uFF09\u3002
|
|
47
|
-
`;
|
|
47
|
+
import { mkdirSync } from "fs";
|
|
48
|
+
import { dirname } from "path";
|
|
48
49
|
function parse(args) {
|
|
49
50
|
const sub = args[1];
|
|
50
51
|
if (!sub || !["list", "create", "revoke"].includes(sub)) {
|
|
@@ -114,9 +115,10 @@ function callersStamp(path) {
|
|
|
114
115
|
throw error;
|
|
115
116
|
}
|
|
116
117
|
}
|
|
117
|
-
function
|
|
118
|
+
function writeAdminFiles(config, principal, at, days) {
|
|
118
119
|
const callersPath = runtimeReference(config.state_dir, "mcp-callers");
|
|
119
120
|
const managementPath = runtimeReference(config.state_dir, "management");
|
|
121
|
+
mkdirSync(dirname(managementPath), { recursive: true, mode: 448 });
|
|
120
122
|
const stamp = callersStamp(callersPath);
|
|
121
123
|
const callers = parseRegistry(readSetupJson(callersPath, REGISTRY_MAX_BYTES) ?? emptyCallerRegistry(callerResource(config)));
|
|
122
124
|
const { file, exists } = loadManagement(managementPath, config.management_port);
|
|
@@ -130,13 +132,10 @@ function writeAdminFiles2(config, principal, at, days) {
|
|
|
130
132
|
writeSetupFile(managementPath, boundedJson2(issued.management, 65536), exists, managementStamp);
|
|
131
133
|
return { secret: issued.secret, expires_at: issued.expires_at };
|
|
132
134
|
}
|
|
133
|
-
function
|
|
134
|
-
return readSetupJson(runtimeReference(config.state_dir, "management")) !== undefined;
|
|
135
|
-
}
|
|
136
|
-
async function handleAdminCommand2(args, io, environment, now = Date.now) {
|
|
135
|
+
async function handleAdminCommand(args, io, environment, now = Date.now) {
|
|
137
136
|
try {
|
|
138
137
|
if (args.length === 2 && args[1] === "--help") {
|
|
139
|
-
io.stderr.write(
|
|
138
|
+
io.stderr.write(formatMessage2(cliMessages2(io.language)["help.admin"], { ttlDays: DEFAULT_ADMIN_TTL_DAYS }));
|
|
140
139
|
return 0;
|
|
141
140
|
}
|
|
142
141
|
const flags = parse(args);
|
|
@@ -149,16 +148,20 @@ async function handleAdminCommand2(args, io, environment, now = Date.now) {
|
|
|
149
148
|
const at = now();
|
|
150
149
|
const principal = flags.principal ?? "admin";
|
|
151
150
|
if (flags.sub === "create") {
|
|
152
|
-
const issued =
|
|
153
|
-
io.stderr.write(
|
|
154
|
-
|
|
155
|
-
|
|
151
|
+
const issued = writeAdminFiles(config, principal, at, flags.days);
|
|
152
|
+
io.stderr.write(formatMessage2(cliMessages2(io.language)["admin.create.created"], {
|
|
153
|
+
principal,
|
|
154
|
+
expires: new Date(issued.expires_at).toISOString()
|
|
155
|
+
}) + formatMessage2(cliMessages2(io.language)["admin.create.login"], {
|
|
156
|
+
url: "http://127.0.0.1:" + config.management_port + "/",
|
|
157
|
+
user: principal
|
|
158
|
+
}));
|
|
156
159
|
io.stdout.write(issued.secret + `
|
|
157
160
|
`);
|
|
158
161
|
return 0;
|
|
159
162
|
}
|
|
160
|
-
const
|
|
161
|
-
const callers = parseRegistry(
|
|
163
|
+
const registryStamp = callersStamp(callersPath);
|
|
164
|
+
const callers = parseRegistry(readSetupJson(callersPath, REGISTRY_MAX_BYTES) ?? emptyCallerRegistry(callerResource(config)));
|
|
162
165
|
const { file, exists } = loadManagement(managementPath, config.management_port);
|
|
163
166
|
if (flags.sub === "list") {
|
|
164
167
|
for (const row of summarizeAdmins(file, at)) {
|
|
@@ -170,9 +173,8 @@ login at http://127.0.0.1:` + config.management_port + '/ with user "' + princip
|
|
|
170
173
|
const stamp = exists ? setupFileStamp(managementPath) : undefined;
|
|
171
174
|
const revoked = revokeAdmin(callers, file, principal);
|
|
172
175
|
writeSetupFile(managementPath, boundedJson2(revoked.management, 65536), true, stamp);
|
|
173
|
-
writeSetupFile(callersPath, boundedJson2(revoked.callers, REGISTRY_MAX_BYTES), true,
|
|
174
|
-
io.stderr.write("revoked
|
|
175
|
-
`);
|
|
176
|
+
writeSetupFile(callersPath, boundedJson2(revoked.callers, REGISTRY_MAX_BYTES), true, registryStamp);
|
|
177
|
+
io.stderr.write(formatMessage2(cliMessages2(io.language)["admin.revoked"], { principal }));
|
|
176
178
|
return 0;
|
|
177
179
|
} catch (error) {
|
|
178
180
|
if (error instanceof CliError2 && CLI_ERROR_CODES.includes(error.code)) {
|
|
@@ -185,7 +187,8 @@ login at http://127.0.0.1:` + config.management_port + '/ with user "' + princip
|
|
|
185
187
|
return 1;
|
|
186
188
|
}
|
|
187
189
|
}
|
|
190
|
+
export {
|
|
191
|
+
handleAdminCommand
|
|
192
|
+
};
|
|
188
193
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
//# debugId=B65D75D1FF47247C64756E2164756E21
|
|
194
|
+
//# debugId=708B820E06464CB564756E2164756E21
|
|
@@ -15,10 +15,10 @@ import"./chunk-9tt13dm0.js";
|
|
|
15
15
|
import"./chunk-g7pnjzkk.js";
|
|
16
16
|
import"./chunk-y4hksha9.js";
|
|
17
17
|
import"./chunk-zxsz6g14.js";
|
|
18
|
-
import"./chunk-
|
|
18
|
+
import"./chunk-vdwzb63d.js";
|
|
19
19
|
import {
|
|
20
20
|
pinTerminalExecution
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-8fy8w7ds.js";
|
|
22
22
|
import {
|
|
23
23
|
HerdrLocalError,
|
|
24
24
|
peerIsCurrentUser,
|
|
@@ -31,57 +31,58 @@ import {
|
|
|
31
31
|
inspectHerdrServerProcess,
|
|
32
32
|
bindAttachedHerdr,
|
|
33
33
|
launchHerdrProcess2
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-e7jgpxkf.js";
|
|
35
35
|
import"./chunk-mqyq5jh6.js";
|
|
36
36
|
import"./chunk-hz8pm6hz.js";
|
|
37
37
|
import {
|
|
38
38
|
closeSession
|
|
39
|
-
} from "./chunk-
|
|
40
|
-
import"./chunk-
|
|
41
|
-
import"./chunk-
|
|
42
|
-
import"./chunk-
|
|
43
|
-
import"./chunk-
|
|
39
|
+
} from "./chunk-59h200cr.js";
|
|
40
|
+
import"./chunk-efty77sb.js";
|
|
41
|
+
import"./chunk-av31bx1e.js";
|
|
42
|
+
import"./chunk-bbdtsg4b.js";
|
|
43
|
+
import"./chunk-6n6b1xpy.js";
|
|
44
44
|
import {
|
|
45
45
|
nativeRecordStamp,
|
|
46
46
|
readNativeRecord,
|
|
47
47
|
createNativeRecord,
|
|
48
48
|
removeNativeRecord,
|
|
49
49
|
recoverLuvusClaimsLock
|
|
50
|
-
} from "./chunk-
|
|
50
|
+
} from "./chunk-j6svdqr8.js";
|
|
51
51
|
import {
|
|
52
52
|
composeConnectorSessions2,
|
|
53
53
|
createLuvusConnectorSessions2,
|
|
54
54
|
createLuvusProductionSources2
|
|
55
|
-
} from "./chunk-
|
|
55
|
+
} from "./chunk-ftpy8xx3.js";
|
|
56
56
|
import"./chunk-5h82060k.js";
|
|
57
57
|
import {
|
|
58
58
|
herdrDeadline,
|
|
59
59
|
withHerdrSocket,
|
|
60
60
|
HerdrInstallation2
|
|
61
|
-
} from "./chunk-
|
|
61
|
+
} from "./chunk-41fny9qm.js";
|
|
62
62
|
import"./chunk-zb641qa3.js";
|
|
63
|
-
import"./chunk-
|
|
63
|
+
import"./chunk-hxmq28pg.js";
|
|
64
64
|
import"./chunk-5svt6rwr.js";
|
|
65
65
|
import {
|
|
66
66
|
parseHerdrProviderRefConfig2,
|
|
67
67
|
createHerdrGatewayResources2,
|
|
68
68
|
createHerdrConnectorResources2
|
|
69
|
-
} from "./chunk-
|
|
69
|
+
} from "./chunk-9h9x79bx.js";
|
|
70
70
|
import {
|
|
71
71
|
readRuntimeFile
|
|
72
72
|
} from "./chunk-z7kkfrgz.js";
|
|
73
73
|
import {
|
|
74
74
|
CliError2
|
|
75
75
|
} from "./chunk-hpzr94hm.js";
|
|
76
|
-
import"./chunk-
|
|
77
|
-
import"./chunk-
|
|
76
|
+
import"./chunk-xtvgm6kf.js";
|
|
77
|
+
import"./chunk-5w5srj3b.js";
|
|
78
|
+
import"./chunk-sf4ztxba.js";
|
|
78
79
|
import"./chunk-3nnahj0j.js";
|
|
79
|
-
import"./chunk-
|
|
80
|
+
import"./chunk-h3xyq7zk.js";
|
|
80
81
|
import {
|
|
81
82
|
currentProcessIdentity,
|
|
82
83
|
listening,
|
|
83
84
|
ownerIsDead
|
|
84
|
-
} from "./chunk-
|
|
85
|
+
} from "./chunk-qp8tgms2.js";
|
|
85
86
|
import"./chunk-0y5542k8.js";
|
|
86
87
|
|
|
87
88
|
// src/cli/production-herdr.ts
|
|
@@ -974,4 +975,4 @@ export {
|
|
|
974
975
|
createProductSources
|
|
975
976
|
};
|
|
976
977
|
|
|
977
|
-
//# debugId=
|
|
978
|
+
//# debugId=C72B2A5481F7ADBD64756E2164756E21
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
// src/cli/messages.ts
|
|
3
|
+
function prefersChinese(tag) {
|
|
4
|
+
return tag.split(".")[0].toLowerCase().replace(/_/gu, "-").startsWith("zh");
|
|
5
|
+
}
|
|
6
|
+
function resolveCliLanguage2(env) {
|
|
7
|
+
const explicit = env.ROVLOOM_LANG?.trim();
|
|
8
|
+
if (explicit) {
|
|
9
|
+
return prefersChinese(explicit) ? "zh-CN" : "en";
|
|
10
|
+
}
|
|
11
|
+
return "en";
|
|
12
|
+
}
|
|
13
|
+
var english = Object.freeze({
|
|
14
|
+
"help.main": `Rovloom {version}
|
|
15
|
+
|
|
16
|
+
Usage:
|
|
17
|
+
rovloom --help
|
|
18
|
+
rovloom --version
|
|
19
|
+
rovloom config template gateway|connector
|
|
20
|
+
rovloom config init connector [--provider luvus|herdr|mixed] [--config /absolute/path/config.json]
|
|
21
|
+
rovloom config init gateway [--container] [--config /absolute/path/config.json]
|
|
22
|
+
rovloom config check [--role gateway|connector] [--config /absolute/path/config.json]
|
|
23
|
+
rovloom config check-runtime [--role gateway|connector] [--config /absolute/path/config.json]
|
|
24
|
+
rovloom gateway [--issue-code] [--config /absolute/path/config.json] [--non-interactive]
|
|
25
|
+
rovloom connector --join <ws://host:port#pairing-code> [--config /absolute/path/config.json]
|
|
26
|
+
rovloom connector --unpair [--non-interactive]
|
|
27
|
+
rovloom service --help
|
|
28
|
+
rovloom token --help
|
|
29
|
+
rovloom doctor --help
|
|
30
|
+
rovloom storage --help
|
|
31
|
+
rovloom admin --help
|
|
32
|
+
|
|
33
|
+
gateway / connector starts the matching role. Pairing is one command: create a per-device pairing code on the
|
|
34
|
+
management page (or run 'rovloom gateway --issue-code' to print one), then run the displayed join command on the
|
|
35
|
+
Connector machine. No prompts, approvals or verification codes.
|
|
36
|
+
--issue-code makes the running Gateway print one fresh per-device pairing code and the full join command.
|
|
37
|
+
--join pairs and starts in one step; running it again with a new code re-pairs this machine as a new device,
|
|
38
|
+
and a join command from a different Gateway retires the previous local state and pairs there.
|
|
39
|
+
--unpair retires all local pairing state (kept under state/retired/) and clears the Gateway address for a clean start.
|
|
40
|
+
--non-interactive disables local interactive behavior (services run this way).
|
|
41
|
+
token manages MCP Bearer tokens, admin manages management-page administrators, and service manages boot services; see each --help.
|
|
42
|
+
config check validates the configuration file read-only; check-runtime additionally verifies program-managed state without reading credentials.
|
|
43
|
+
|
|
44
|
+
Without --config, ~/.config/rovloom/gateway.json or connector.json is used (Windows also uses the user home).
|
|
45
|
+
A missing file is created with defaults on the first run; an existing file is never overwritten or reset.
|
|
46
|
+
Gateway supports Linux/macOS/Windows; Connector supports Linux x64, Windows x64 and macOS (x64 / arm64, attaching only already-running Herdr / Luvus).
|
|
47
|
+
First-run setup selects luvus (default), herdr or mixed via the Connector's native.provider.
|
|
48
|
+
Agent and model logins must be prepared separately; a ready native installation does not mean a model has replied.
|
|
49
|
+
Exit codes: 0 success/clean shutdown, 2 argument or configuration error, 3 backend unavailable, 1 runtime or shutdown failure.
|
|
50
|
+
`,
|
|
51
|
+
"help.admin": `Usage:
|
|
52
|
+
rovloom admin list [--config /absolute/path/gateway.json]
|
|
53
|
+
rovloom admin create [--principal ID] [--ttl-days N] [--config /absolute/path/gateway.json]
|
|
54
|
+
rovloom admin revoke [--principal ID] [--config /absolute/path/gateway.json]
|
|
55
|
+
|
|
56
|
+
The management page (default http://127.0.0.1:9445/) signs in with HTTP Basic: the user name is the administrator ID (default admin) and the password is the secret printed by create.
|
|
57
|
+
The password is written to stdout once, only by create (the Gateway stores only a SHA-256 digest); everything else goes to stderr. If the password is lost, run create again:
|
|
58
|
+
an administrator with the same name is re-issued, and the old password plus signed-in browser sessions stop working immediately. revoke removes an administrator with the same immediate effect. Changes apply without restarting the Gateway.
|
|
59
|
+
Administrators cannot call MCP and share nothing with MCP tokens or device credentials; the default validity is {ttlDays} days (1-365).
|
|
60
|
+
Can be created before the first pairing: a fresh Gateway initializes an empty MCP caller registry on its own, after which the management page
|
|
61
|
+
pairs the first Connector (generate a per-device code, then run the displayed join command on the device).
|
|
62
|
+
`,
|
|
63
|
+
"help.token": `Usage:
|
|
64
|
+
rovloom token list [--config /absolute/path/gateway.json]
|
|
65
|
+
rovloom token create --principal ID --like EXISTING_ID [--ttl-days N]
|
|
66
|
+
rovloom token renew --principal ID [--ttl-days N]
|
|
67
|
+
rovloom token rotate --principal ID [--ttl-days N] [--grace-minutes M]
|
|
68
|
+
rovloom token revoke --principal ID
|
|
69
|
+
rovloom token permissions --principal ID --discard-response true|false
|
|
70
|
+
|
|
71
|
+
The token registry lives in the Gateway state directory; the Gateway re-reads it on every authentication, so changes apply immediately without a restart.
|
|
72
|
+
create/rotate write the new token value to stdout once (new tokens are kept in the private registry and can be viewed again in the Dashboard); everything else goes to stderr.
|
|
73
|
+
create clones the new principal's permissions from the existing principal named by --like, without widening them. renew extends the expiry; the token stays the same.
|
|
74
|
+
rotate issues a new token; the old one keeps working within --grace-minutes (default 0, immediate invalidation). revoke removes the principal.
|
|
75
|
+
permissions manages the explicit result-discard permission, hot-reloaded and off by default. Read and save anything you need before discarding results.
|
|
76
|
+
ttl defaults to 30 days (1-365).
|
|
77
|
+
`,
|
|
78
|
+
"help.storage": `Usage:
|
|
79
|
+
rovloom doctor --role gateway|connector [--config /absolute/config.json] [--json]
|
|
80
|
+
rovloom storage check --role gateway [--config /absolute/config.json] [--json]
|
|
81
|
+
rovloom storage backup --role gateway --output /path/to/gateway.backups/snapshot.db [--config /absolute/config.json] [--json]
|
|
82
|
+
rovloom storage resume --role gateway [--config /absolute/config.json] [--json]
|
|
83
|
+
|
|
84
|
+
Gateway commands require the service to be stopped first; they share the same write lock and refuse active or undeterminable holders.
|
|
85
|
+
check is read-only; backup only uses the plain <state>.backups directory next to the real state directory and exports a redacted snapshot (no raw text or valid credentials); full state needs a separate offline backup.
|
|
86
|
+
resume is an explicit degradation release approved by the local operator and still refuses when integrity, clock or budget checks fail.
|
|
87
|
+
Connector doctor only checks the configuration and managed state; it starts no native runtime and claims no native readiness.
|
|
88
|
+
`,
|
|
89
|
+
"help.service": `service install --role gateway|connector [--executable ABS] [--config ABS] --workdir ABS --user ACCOUNT
|
|
90
|
+
service uninstall|start|restart|stop --role gateway|connector
|
|
91
|
+
install registers boot startup without starting; uninstall only revokes future boot startup and preserves running instances and their control records.
|
|
92
|
+
Omitted --executable uses the current standalone binary; a different binary is rejected.
|
|
93
|
+
Omitted --config uses the same current-user role file as foreground startup. Installation fixes its absolute path; background startup does not select another home.
|
|
94
|
+
Linux uses systemd system units; macOS uses system LaunchDaemons; Windows uses boot-triggered tasks, not SCM services or login tasks.
|
|
95
|
+
Gateway services support Linux systemd, macOS system LaunchDaemons and Windows boot-triggered tasks; the local native Connector service supports Linux x64, Windows x64 and macOS (x64 / arm64).
|
|
96
|
+
Windows uses the explicitly selected existing user with S4U, without storing a password or requiring login. It does not provide an interactive desktop or Windows network credentials/EFS access. Running services receive a local shutdown request; queued/start-racing tasks return service_busy without forced termination; uninstall never stops it.
|
|
97
|
+
`,
|
|
98
|
+
"guard.bunUnsupported": `Rovloom requires Bun {minimum} or newer (https://bun.sh); this runtime is not supported.
|
|
99
|
+
`,
|
|
100
|
+
"run.wildcardListenWarning": `wildcard_listener
|
|
101
|
+
MCP/management listen on all interfaces over plain HTTP; protect them with a firewall or a TLS reverse proxy.
|
|
102
|
+
`,
|
|
103
|
+
"run.pairingRequiredHint": `Gateway is running; pair a Connector (management page or rovloom gateway --issue-code, then run the join command on the device) before using an Agent.
|
|
104
|
+
`,
|
|
105
|
+
"run.configurationRequiredHint": `Setup requires a reachable Gateway, a valid pairing code and a compatible installed Luvus or Herdr. Preserve uncertain setup state for owner review.
|
|
106
|
+
`,
|
|
107
|
+
"setup.native.managedUnsupportedWindows": `{provider}_managed_unsupported_on_windows: set native.{configKey}.mode to "attach".
|
|
108
|
+
`,
|
|
109
|
+
"setup.native.managedUnsupportedMacos": `{provider}_managed_unsupported_on_macos: set native.{configKey}.mode to "attach".
|
|
110
|
+
`,
|
|
111
|
+
"setup.join.completed": `pairing_completed: device {machine} is paired with {url}.
|
|
112
|
+
`,
|
|
113
|
+
"setup.join.providers": `providers: {entries}
|
|
114
|
+
`,
|
|
115
|
+
"setup.join.mcpBlock": `MCP URL: {url}
|
|
116
|
+
Bearer (private): {token}
|
|
117
|
+
`,
|
|
118
|
+
"setup.join.resettingState": `Previous pairing state for another device was retired to {retired}; pairing as a new device.
|
|
119
|
+
`,
|
|
120
|
+
"setup.join.switchingGateway": `Joining a different Gateway; previous pairing state was retired to {retired}.
|
|
121
|
+
`,
|
|
122
|
+
"unpair.completed": `unpair_completed: local pairing state was retired to {retired} and the Gateway address was cleared.
|
|
123
|
+
Run rovloom connector --join to pair with any Gateway.
|
|
124
|
+
`,
|
|
125
|
+
"unpair.empty": `unpair_completed: no local pairing state found; nothing to reset.
|
|
126
|
+
`,
|
|
127
|
+
"setup.native.statePathTooLongLuvus": `native_state_path_too_long: choose a shorter data.directory before initialization (Luvus state path maximum 52 UTF-8 bytes).
|
|
128
|
+
`,
|
|
129
|
+
"setup.native.statePathTooLongHerdr": `native_state_path_too_long: choose a shorter data.directory for the private Herdr sockets (herdr.sock and herdr-client.sock).
|
|
130
|
+
`,
|
|
131
|
+
"setup.gateway.joinCommandBlock": `Join command (one per device; run it on the Connector machine to consume):
|
|
132
|
+
{command}
|
|
133
|
+
`,
|
|
134
|
+
"admin.create.login": `login at {url} with user "{user}" and the password below (shown once)
|
|
135
|
+
`,
|
|
136
|
+
"admin.create.created": `created administrator {principal} expires {expires}
|
|
137
|
+
`,
|
|
138
|
+
"admin.revoked": `revoked administrator {principal}
|
|
139
|
+
`,
|
|
140
|
+
"token.created": `created {principal} expires {expires}
|
|
141
|
+
`,
|
|
142
|
+
"token.renewed": `renewed {principal} expires {expires}
|
|
143
|
+
`,
|
|
144
|
+
"token.rotated": `rotated {principal} expires {expires}
|
|
145
|
+
`,
|
|
146
|
+
"token.permissions": `permissions {principal} discard_response={discard}
|
|
147
|
+
`,
|
|
148
|
+
"token.revoked": `revoked {principal}
|
|
149
|
+
`,
|
|
150
|
+
"mcp.instructions": "Tool availability does not imply a ready backend; execution, authorization, confirmation, deduplication and result retention are owned by the trusted service.",
|
|
151
|
+
"mcp.tool.machines_list": "List the devices visible to the current caller; paging and counts must pass the current ACL.",
|
|
152
|
+
"mcp.tool.machines_get": "Read a visible device by stable ID or exact name.",
|
|
153
|
+
"mcp.tool.providers_list": "List the configured providers visible to the current caller under a device; local machine configuration is not returned.",
|
|
154
|
+
"mcp.tool.providers_get": "Read the kind, revision and readiness of an explicit provider.",
|
|
155
|
+
"mcp.tool.runtime_discover": "Discover the effective capabilities and sources of an explicit Target/revision; grants no execution permission.",
|
|
156
|
+
"mcp.tool.runtime_describe": "Describe the exact methods\u2019 native parameters, categories and limits under an explicit Target/revision.",
|
|
157
|
+
"mcp.tool.runtime_call": "Submit one native call for an explicit Target/revision/contract. deadline is an absolute millisecond deadline; wait_ms only controls short waits; no retries or provider management.",
|
|
158
|
+
"mcp.tool.runtime_call_get": "Read a call under the current ownership, both-end policies and content gating; a short-wait timeout does not change the execution deadline.",
|
|
159
|
+
"mcp.tool.runtime_call_cancel": "Request stopping a wait or bridge; reports only what the service can confirm and promises no native rollback.",
|
|
160
|
+
"mcp.tool.runtime_result_read": "Read bounded result pages under the current read authorization and deadlines; the cursor is bound by the service to the caller and the original result.",
|
|
161
|
+
"mcp.tool.runtime_response_discard": "After processing, explicitly delete the raw text and handle and release read capacity; ownership, the current original-method policy and the independent discard_response permission must be verified. Reading to EOF does not delete the result."
|
|
162
|
+
});
|
|
163
|
+
var chinese = Object.freeze({
|
|
164
|
+
"help.main": `Rovloom {version}
|
|
165
|
+
|
|
166
|
+
\u7528\u6CD5\uFF1A
|
|
167
|
+
rovloom --help
|
|
168
|
+
rovloom --version
|
|
169
|
+
rovloom config template gateway|connector
|
|
170
|
+
rovloom config init connector [--provider luvus|herdr|mixed] [--config /absolute/path/config.json]
|
|
171
|
+
rovloom config init gateway [--container] [--config /absolute/path/config.json]
|
|
172
|
+
rovloom config check [--role gateway|connector] [--config /absolute/path/config.json]
|
|
173
|
+
rovloom config check-runtime [--role gateway|connector] [--config /absolute/path/config.json]
|
|
174
|
+
rovloom gateway [--issue-code] [--config /absolute/path/config.json] [--non-interactive]
|
|
175
|
+
rovloom connector --join <ws://host:port#\u914D\u5BF9\u7801> [--config /absolute/path/config.json]
|
|
176
|
+
rovloom connector --unpair [--non-interactive]
|
|
177
|
+
rovloom service --help
|
|
178
|
+
rovloom token --help
|
|
179
|
+
rovloom doctor --help
|
|
180
|
+
rovloom storage --help
|
|
181
|
+
rovloom admin --help
|
|
182
|
+
|
|
183
|
+
gateway / connector \u542F\u52A8\u5BF9\u5E94\u89D2\u8272\u3002\u914D\u5BF9\u53EA\u9700\u4E00\u6761\u547D\u4EE4\uFF1A\u5728\u7BA1\u7406\u9875\u751F\u6210\u4E00\u673A\u4E00\u7801\uFF08\u6216\u8FD0\u884C rovloom gateway --issue-code \u6253\u5370\u4E00\u5F20\uFF09\uFF0C\u628A\u663E\u793A\u7684\u52A0\u5165\u547D\u4EE4\u590D\u5236\u5230 Connector \u673A\u5668\u6267\u884C\u5373\u53EF\u3002\u6CA1\u6709\u95EE\u7B54\u3001\u6279\u51C6\u6216\u6838\u5BF9\u7801\u3002
|
|
184
|
+
--issue-code \u8BA9\u8FD0\u884C\u4E2D\u7684 Gateway \u6253\u5370\u4E00\u5F20\u65B0\u7684\u4E00\u673A\u4E00\u7801\u53CA\u5B8C\u6574\u52A0\u5165\u547D\u4EE4\u3002
|
|
185
|
+
--join \u4E00\u6761\u547D\u4EE4\u5B8C\u6210\u914D\u5BF9\u5E76\u542F\u52A8\uFF1B\u7528\u65B0\u7801\u518D\u6B21\u6267\u884C\u5373\u628A\u672C\u673A\u4F5C\u4E3A\u65B0\u8BBE\u5907\u91CD\u65B0\u914D\u5BF9\uFF0C
|
|
186
|
+
\u6362\u4E00\u53F0 Gateway \u7684\u52A0\u5165\u547D\u4EE4\u5219\u4F1A\u9000\u5F79\u65E7\u72B6\u6001\u5E76\u76F4\u63A5\u914D\u5BF9\u8FC7\u53BB\u3002
|
|
187
|
+
--unpair \u628A\u672C\u5730\u914D\u5BF9\u72B6\u6001\u6574\u4F53\u9000\u5F79\uFF08\u4FDD\u7559\u5728 state/retired/\uFF09\u5E76\u6E05\u7A7A Gateway \u5730\u5740\uFF0C\u5F97\u5230\u5E72\u51C0\u7684\u8D77\u70B9\u3002
|
|
188
|
+
--non-interactive \u5173\u95ED\u672C\u5730\u4EA4\u4E92\u884C\u4E3A\uFF08\u670D\u52A1\u4EE5\u6B64\u8FD0\u884C\uFF09\u3002
|
|
189
|
+
token \u7BA1\u7406 MCP Bearer \u4EE4\u724C\uFF0Cadmin \u7BA1\u7406\u7BA1\u7406\u9875\u7BA1\u7406\u5458\uFF0Cservice \u7BA1\u7406\u5F00\u673A\u670D\u52A1\uFF1B\u8BE6\u89C1\u5404\u81EA\u7684 --help\u3002
|
|
190
|
+
config check \u53EA\u8BFB\u68C0\u67E5\u914D\u7F6E\u6587\u4EF6\uFF1Bcheck-runtime \u53E6\u6838\u5BF9\u7A0B\u5E8F\u7BA1\u7406\u7684\u72B6\u6001\uFF0C\u4E0D\u8BFB\u53D6\u51ED\u636E\u3002
|
|
191
|
+
|
|
192
|
+
\u7701\u7565 --config \u65F6\u8BFB\u53D6 ~/.config/rovloom/gateway.json \u6216 connector.json\uFF08Windows \u540C\u6837\u4F7F\u7528\u7528\u6237 home\uFF09\u3002
|
|
193
|
+
\u6587\u4EF6\u7F3A\u5931\u65F6\u9996\u6B21\u8FD0\u884C\u4F1A\u751F\u6210\u9ED8\u8BA4\u914D\u7F6E\uFF0C\u5DF2\u6709\u6587\u4EF6\u4E0D\u4F1A\u88AB\u8986\u76D6\u6216\u91CD\u7F6E\u3002
|
|
194
|
+
Gateway \u652F\u6301 Linux/macOS/Windows\uFF1BConnector \u652F\u6301 Linux x64\u3001Windows x64 \u4E0E macOS\uFF08x64 / arm64\uFF0C\u4EC5\u9644\u7740\u5DF2\u8FD0\u884C\u7684 Herdr / Luvus\uFF09\u3002
|
|
195
|
+
\u9996\u6B21\u5F15\u5BFC\u6309 Connector \u7684 native.provider \u9009\u62E9 luvus\uFF08\u9ED8\u8BA4\uFF09\u3001herdr \u6216 mixed\u3002
|
|
196
|
+
Agent \u4E0E\u6A21\u578B\u767B\u5F55\u9700\u72EC\u7ACB\u51C6\u5907\uFF1B\u539F\u751F ready \u4E0D\u4EE3\u8868\u6A21\u578B\u5DF2\u56DE\u590D\u3002
|
|
197
|
+
\u9000\u51FA\u7801\uFF1A0 \u6210\u529F/\u6B63\u5E38\u5173\u95ED\uFF0C2 \u53C2\u6570\u6216\u914D\u7F6E\u9519\u8BEF\uFF0C3 \u540E\u7AEF\u4E0D\u53EF\u7528\uFF0C1 \u8FD0\u884C\u6216\u5173\u95ED\u5931\u8D25\u3002
|
|
198
|
+
`,
|
|
199
|
+
"help.admin": `\u7528\u6CD5\uFF1A
|
|
200
|
+
rovloom admin list [--config /absolute/path/gateway.json]
|
|
201
|
+
rovloom admin create [--principal ID] [--ttl-days N] [--config /absolute/path/gateway.json]
|
|
202
|
+
rovloom admin revoke [--principal ID] [--config /absolute/path/gateway.json]
|
|
203
|
+
|
|
204
|
+
\u7BA1\u7406\u9875\uFF08\u9ED8\u8BA4 http://127.0.0.1:9445/\uFF09\u7528 HTTP Basic \u767B\u5F55\uFF1A\u7528\u6237\u540D\u662F\u7BA1\u7406\u5458 ID\uFF08\u9ED8\u8BA4 admin\uFF09\uFF0C\u5BC6\u7801\u662F create \u8F93\u51FA\u7684\u53E3\u4EE4\u3002
|
|
205
|
+
\u53E3\u4EE4\u539F\u503C\u53EA\u5728 create \u65F6\u5199\u5230 stdout \u4E00\u6B21\uFF08Gateway \u53EA\u4FDD\u5B58 SHA-256 \u6458\u8981\uFF09\uFF1B\u5176\u4F59\u4FE1\u606F\u5199\u5230 stderr\u3002\u4E22\u5931\u53E3\u4EE4\u5C31\u518D create \u4E00\u6B21\uFF1A
|
|
206
|
+
\u540C\u540D\u7BA1\u7406\u5458\u88AB\u91CD\u65B0\u7B7E\u53D1\uFF0C\u65E7\u53E3\u4EE4\u4E0E\u5DF2\u767B\u5F55\u7684\u6D4F\u89C8\u5668\u4F1A\u8BDD\u7ACB\u5373\u5931\u6548\u3002revoke \u5220\u9664\u7BA1\u7406\u5458\uFF0C\u540C\u6837\u7ACB\u5373\u751F\u6548\u3002\u4FEE\u6539\u65E0\u9700\u91CD\u542F Gateway\u3002
|
|
207
|
+
\u7BA1\u7406\u5458\u4E0D\u80FD\u8C03\u7528 MCP\uFF0C\u4E5F\u4E0E MCP \u4EE4\u724C\u3001\u8BBE\u5907\u51ED\u636E\u4E92\u4E0D\u901A\u7528\uFF1B\u6709\u6548\u671F\u9ED8\u8BA4 {ttlDays} \u5929\uFF081-365\uFF09\u3002
|
|
208
|
+
\u53EF\u5728\u9996\u6B21\u914D\u5BF9\u524D\u521B\u5EFA\uFF1A\u5168\u65B0 Gateway \u4F1A\u81EA\u884C\u521D\u59CB\u5316\u7A7A\u7684 MCP \u8C03\u7528\u65B9\u6CE8\u518C\u8868\uFF0C\u968F\u540E\u5373\u53EF\u5728\u7BA1\u7406\u9875
|
|
209
|
+
\u914D\u5BF9\u9996\u53F0 Connector\uFF08\u751F\u6210\u4E00\u673A\u4E00\u7801\uFF0C\u8BBE\u5907\u6267\u884C\u663E\u793A\u7684\u52A0\u5165\u547D\u4EE4\uFF09\u3002
|
|
210
|
+
`,
|
|
211
|
+
"help.token": `\u7528\u6CD5\uFF1A
|
|
212
|
+
rovloom token list [--config /absolute/path/gateway.json]
|
|
213
|
+
rovloom token create --principal ID --like EXISTING_ID [--ttl-days N]
|
|
214
|
+
rovloom token renew --principal ID [--ttl-days N]
|
|
215
|
+
rovloom token rotate --principal ID [--ttl-days N] [--grace-minutes M]
|
|
216
|
+
rovloom token revoke --principal ID
|
|
217
|
+
rovloom token permissions --principal ID --discard-response true|false
|
|
218
|
+
|
|
219
|
+
\u4EE4\u724C\u6CE8\u518C\u8868\u4F4D\u4E8E Gateway \u72B6\u6001\u76EE\u5F55\uFF1BGateway \u6BCF\u6B21\u8BA4\u8BC1\u91CD\u8BFB\uFF0C\u4FEE\u6539\u7ACB\u5373\u751F\u6548\u3001\u65E0\u9700\u91CD\u542F\u3002
|
|
220
|
+
create/rotate \u628A\u65B0\u4EE4\u724C\u539F\u503C\u53EA\u5199\u5230 stdout \u4E00\u6B21\uFF08\u65B0\u4EE4\u724C\u4FDD\u5B58\u5728\u79C1\u6709\u6CE8\u518C\u8868\uFF0C\u53EF\u5728\u7BA1\u7406\u5458\u9762\u677F\u518D\u6B21\u67E5\u770B\uFF09\uFF1B\u5176\u4F59\u4FE1\u606F\u5199\u5230 stderr\u3002
|
|
221
|
+
create \u7684\u65B0\u4E3B\u4F53\u6743\u9650\u514B\u9686\u81EA --like \u6307\u5B9A\u7684\u73B0\u6709\u4E3B\u4F53\uFF0C\u4E0D\u6269\u5927\u6743\u9650\u3002renew \u5EF6\u957F\u5230\u671F\u65F6\u95F4\u3001\u4EE4\u724C\u4E0D\u53D8\u3002
|
|
222
|
+
rotate \u7B7E\u53D1\u65B0\u4EE4\u724C\uFF1B--grace-minutes \u5185\u65E7\u4EE4\u724C\u7EE7\u7EED\u6709\u6548\uFF08\u9ED8\u8BA4 0\uFF0C\u7ACB\u5373\u5931\u6548\uFF09\u3002revoke \u5220\u9664\u4E3B\u4F53\u3002
|
|
223
|
+
permissions \u663E\u5F0F\u7BA1\u7406\u7ED3\u679C\u5220\u9664\u6743\u9650\uFF0C\u70ED\u751F\u6548\uFF1B\u9ED8\u8BA4\u5173\u95ED\u3002\u5220\u9664\u7ED3\u679C\u524D\u5E94\u5148\u8BFB\u53D6\u5E76\u4FDD\u5B58\u6240\u9700\u5185\u5BB9\u3002
|
|
224
|
+
ttl \u9ED8\u8BA4 30 \u5929\uFF081-365\uFF09\u3002
|
|
225
|
+
`,
|
|
226
|
+
"help.storage": `\u7528\u6CD5\uFF1A
|
|
227
|
+
rovloom doctor --role gateway|connector [--config /absolute/config.json] [--json]
|
|
228
|
+
rovloom storage check --role gateway [--config /absolute/config.json] [--json]
|
|
229
|
+
rovloom storage backup --role gateway --output /path/to/gateway.backups/snapshot.db [--config /absolute/config.json] [--json]
|
|
230
|
+
rovloom storage resume --role gateway [--config /absolute/config.json] [--json]
|
|
231
|
+
|
|
232
|
+
Gateway \u547D\u4EE4\u987B\u5148\u505C\u6B62\u670D\u52A1\uFF1B\u6CBF\u7528\u540C\u4E00\u5199\u9501\uFF0C\u62D2\u7EDD\u6D3B\u52A8\u6216\u65E0\u6CD5\u5224\u5B9A\u7684\u6301\u6709\u8005\u3002
|
|
233
|
+
check \u53EA\u8BFB\uFF1Bbackup \u4EC5\u4F7F\u7528\u771F\u5B9E\u72B6\u6001\u76EE\u5F55\u540C\u7EA7\u7684 <state>.backups \u666E\u901A\u76EE\u5F55\uFF0C\u5BFC\u51FA\u8131\u654F\u5FEB\u7167\uFF08\u4E0D\u542B\u539F\u6587\u53CA\u6709\u6548\u51ED\u636E\uFF09\uFF0C\u5B8C\u6574\u72B6\u6001\u9700\u53E6\u884C\u79BB\u7EBF\u5907\u4EFD\u3002
|
|
234
|
+
resume \u662F\u672C\u673A\u64CD\u4F5C\u5458\u663E\u5F0F\u6279\u51C6\u7684\u89E3\u9664\u964D\u7EA7\uFF0C\u5B8C\u6574\u6027\u3001\u65F6\u949F\u6216\u9884\u7B97\u4E0D\u6B63\u5E38\u65F6\u4ECD\u62D2\u7EDD\u3002
|
|
235
|
+
Connector doctor \u53EA\u68C0\u67E5\u914D\u7F6E\u53CA managed \u72B6\u6001\uFF0C\u4E0D\u542F\u52A8 native\uFF0C\u4E5F\u4E0D\u58F0\u660E native \u5C31\u7EEA\u3002
|
|
236
|
+
`,
|
|
237
|
+
"help.service": `service install --role gateway|connector [--executable ABS] [--config ABS] --workdir ABS --user ACCOUNT
|
|
238
|
+
service uninstall|start|restart|stop --role gateway|connector
|
|
239
|
+
install \u6CE8\u518C\u5F00\u673A\u81EA\u542F\u4F46\u4E0D\u7ACB\u5373\u542F\u52A8\uFF1Buninstall \u53EA\u64A4\u9500\u672A\u6765\u7684\u5F00\u673A\u81EA\u542F\uFF0C\u4FDD\u7559\u6B63\u5728\u8FD0\u884C\u7684\u5B9E\u4F8B\u53CA\u5176\u63A7\u5236\u8BB0\u5F55\u3002
|
|
240
|
+
\u7701\u7565 --executable \u65F6\u4F7F\u7528\u5F53\u524D\u72EC\u7ACB\u53EF\u6267\u884C\u6587\u4EF6\uFF1B\u4F20\u5165\u5176\u5B83\u53EF\u6267\u884C\u6587\u4EF6\u4F1A\u88AB\u62D2\u7EDD\u3002
|
|
241
|
+
\u7701\u7565 --config \u65F6\u6CBF\u7528\u4E0E\u524D\u53F0\u542F\u52A8\u76F8\u540C\u7684\u5F53\u524D\u7528\u6237\u89D2\u8272\u6587\u4EF6\uFF1B\u5B89\u88C5\u56FA\u5B9A\u5176\u7EDD\u5BF9\u8DEF\u5F84\uFF0C\u540E\u53F0\u542F\u52A8\u4E0D\u518D\u9009\u62E9\u5176\u5B83 home\u3002
|
|
242
|
+
Linux \u4F7F\u7528 systemd system \u5355\u5143\uFF1BmacOS \u4F7F\u7528\u7CFB\u7EDF LaunchDaemons\uFF1BWindows \u4F7F\u7528\u5F00\u673A\u89E6\u53D1\u4EFB\u52A1\uFF0C\u4E0D\u662F SCM \u670D\u52A1\u6216\u767B\u5F55\u4EFB\u52A1\u3002
|
|
243
|
+
Gateway \u670D\u52A1\u652F\u6301 Linux systemd\u3001macOS \u7CFB\u7EDF LaunchDaemons \u548C Windows \u5F00\u673A\u89E6\u53D1\u4EFB\u52A1\uFF1B\u672C\u673A\u539F\u751F Connector \u670D\u52A1\u652F\u6301 Linux x64\u3001Windows x64 \u548C macOS\uFF08x64 / arm64\uFF09\u3002
|
|
244
|
+
Windows \u4F7F\u7528\u663E\u5F0F\u9009\u62E9\u7684\u65E2\u6709\u7528\u6237\u4E0E S4U\uFF0C\u4E0D\u4FDD\u5B58\u5BC6\u7801\u3001\u4E0D\u8981\u6C42\u767B\u5F55\uFF1B\u4E0D\u63D0\u4F9B\u4EA4\u4E92\u684C\u9762\u6216 Windows \u7F51\u7EDC\u51ED\u636E/EFS \u8BBF\u95EE\u3002\u8FD0\u884C\u4E2D\u7684\u670D\u52A1\u6536\u5230\u672C\u5730\u505C\u6B62\u8BF7\u6C42\uFF1B\u6392\u961F/\u542F\u52A8\u7ADE\u6001\u4E2D\u7684\u4EFB\u52A1\u8FD4\u56DE service_busy \u4E14\u4E0D\u5F3A\u505C\uFF1Buninstall \u4ECE\u4E0D\u505C\u6B62\u5B83\u3002
|
|
245
|
+
`,
|
|
246
|
+
"guard.bunUnsupported": `Rovloom \u9700\u8981 Bun {minimum} \u6216\u66F4\u9AD8\u7248\u672C\uFF08https://bun.sh\uFF09\uFF1B\u5F53\u524D\u8FD0\u884C\u65F6\u4E0D\u53D7\u652F\u6301\u3002
|
|
247
|
+
`,
|
|
248
|
+
"run.wildcardListenWarning": `wildcard_listener
|
|
249
|
+
MCP/\u7BA1\u7406\u9875\u76D1\u542C\u6240\u6709\u7F51\u5361\u4E14\u4E3A\u660E\u6587 HTTP\uFF1B\u8BF7\u7528\u9632\u706B\u5899\u6216 TLS \u53CD\u5411\u4EE3\u7406\u6536\u53E3\u3002
|
|
250
|
+
`,
|
|
251
|
+
"run.pairingRequiredHint": `Gateway \u5DF2\u542F\u52A8\uFF1B\u4F7F\u7528 Agent \u524D\u5148\u914D\u5BF9\u4E00\u53F0 Connector\uFF08\u7BA1\u7406\u9875\u6216 rovloom gateway --issue-code \u751F\u6210\u914D\u5BF9\u7801\uFF0C\u8BBE\u5907\u6267\u884C\u52A0\u5165\u547D\u4EE4\uFF09\u3002
|
|
252
|
+
`,
|
|
253
|
+
"run.configurationRequiredHint": `\u521D\u59CB\u5316\u9700\u53EF\u8FBE Gateway\u3001\u6709\u6548\u914D\u5BF9\u7801\u53CA\u517C\u5BB9\u7684 Luvus/Herdr \u5B89\u88C5\uFF1B\u7ED3\u679C\u4E0D\u786E\u5B9A\u65F6\u4FDD\u7559\u539F\u72B6\u6001\u5E76\u7531\u6240\u6709\u8005\u6838\u67E5\u3002
|
|
254
|
+
`,
|
|
255
|
+
"setup.native.managedUnsupportedWindows": `{provider}_managed_unsupported_on_windows: Windows \u4E0A\u6682\u4E0D\u652F\u6301 managed\uFF0C\u8BF7\u628A native.{configKey}.mode \u8BBE\u4E3A "attach"\u3002
|
|
256
|
+
`,
|
|
257
|
+
"setup.native.managedUnsupportedMacos": `{provider}_managed_unsupported_on_macos: macOS \u4E0A\u6682\u4E0D\u652F\u6301 managed\uFF0C\u8BF7\u628A native.{configKey}.mode \u8BBE\u4E3A "attach"\u3002
|
|
258
|
+
`,
|
|
259
|
+
"setup.join.completed": `pairing_completed: \u8BBE\u5907 {machine} \u5DF2\u4E0E {url} \u5B8C\u6210\u914D\u5BF9\u3002
|
|
260
|
+
`,
|
|
261
|
+
"setup.join.providers": `providers: {entries}
|
|
262
|
+
`,
|
|
263
|
+
"setup.join.mcpBlock": `MCP URL: {url}
|
|
264
|
+
Bearer (private): {token}
|
|
265
|
+
`,
|
|
266
|
+
"setup.join.resettingState": `\u53E6\u4E00\u53F0\u8BBE\u5907\u7684\u65E7\u914D\u5BF9\u72B6\u6001\u5DF2\u9000\u5F79\u5230 {retired}\uFF1B\u6B63\u4EE5\u65B0\u8BBE\u5907\u8EAB\u4EFD\u91CD\u65B0\u914D\u5BF9\u3002
|
|
267
|
+
`,
|
|
268
|
+
"setup.join.switchingGateway": `\u6B63\u5728\u52A0\u5165\u53E6\u4E00\u53F0 Gateway\uFF1B\u65E7\u914D\u5BF9\u72B6\u6001\u5DF2\u9000\u5F79\u5230 {retired}\u3002
|
|
269
|
+
`,
|
|
270
|
+
"unpair.completed": `unpair_completed: \u672C\u5730\u914D\u5BF9\u72B6\u6001\u5DF2\u9000\u5F79\u5230 {retired}\uFF0CGateway \u5730\u5740\u5DF2\u6E05\u7A7A\u3002
|
|
271
|
+
\u8FD0\u884C rovloom connector --join \u5373\u53EF\u4E0E\u4EFB\u610F Gateway \u91CD\u65B0\u914D\u5BF9\u3002
|
|
272
|
+
`,
|
|
273
|
+
"unpair.empty": `unpair_completed: \u672C\u673A\u6CA1\u6709\u53EF\u91CD\u7F6E\u7684\u914D\u5BF9\u72B6\u6001\u3002
|
|
274
|
+
`,
|
|
275
|
+
"setup.native.statePathTooLongLuvus": `native_state_path_too_long: \u521D\u59CB\u5316\u524D\u8BF7\u7F29\u77ED data.directory\uFF08Luvus \u72B6\u6001\u8DEF\u5F84\u6700\u591A52\u4E2AUTF-8\u5B57\u8282\uFF09\u3002
|
|
276
|
+
`,
|
|
277
|
+
"setup.native.statePathTooLongHerdr": `native_state_path_too_long: \u8BF7\u7F29\u77ED data.directory \u4EE5\u5BB9\u7EB3\u9694\u79BB Herdr \u7684 socket\uFF08\u542B herdr-client.sock\uFF09\u3002
|
|
278
|
+
`,
|
|
279
|
+
"setup.gateway.joinCommandBlock": `\u52A0\u5165\u547D\u4EE4\uFF08\u4E00\u673A\u4E00\u7801\uFF0C\u590D\u5236\u5230 Connector \u673A\u5668\u6267\u884C\u5373\u6D88\u8D39\uFF09\uFF1A
|
|
280
|
+
{command}
|
|
281
|
+
`,
|
|
282
|
+
"admin.create.login": `\u5728 {url} \u7528\u7528\u6237\u540D "{user}" \u548C\u4E0B\u65B9\u5BC6\u7801\u767B\u5F55\uFF08\u5BC6\u7801\u53EA\u663E\u793A\u4E00\u6B21\uFF09
|
|
283
|
+
`,
|
|
284
|
+
"admin.create.created": `\u5DF2\u521B\u5EFA\u7BA1\u7406\u5458 {principal}\uFF0C\u5230\u671F\u65F6\u95F4 {expires}
|
|
285
|
+
`,
|
|
286
|
+
"admin.revoked": `\u5DF2\u64A4\u9500\u7BA1\u7406\u5458 {principal}
|
|
287
|
+
`,
|
|
288
|
+
"token.created": `\u5DF2\u521B\u5EFA {principal}\uFF0C\u5230\u671F\u65F6\u95F4 {expires}
|
|
289
|
+
`,
|
|
290
|
+
"token.renewed": `\u5DF2\u7EED\u671F {principal}\uFF0C\u5230\u671F\u65F6\u95F4 {expires}
|
|
291
|
+
`,
|
|
292
|
+
"token.rotated": `\u5DF2\u8F6E\u6362 {principal}\uFF0C\u5230\u671F\u65F6\u95F4 {expires}
|
|
293
|
+
`,
|
|
294
|
+
"token.permissions": `\u5DF2\u8BBE\u7F6E {principal} \u7684\u6743\u9650 discard_response={discard}
|
|
295
|
+
`,
|
|
296
|
+
"token.revoked": `\u5DF2\u64A4\u9500 {principal}
|
|
297
|
+
`,
|
|
298
|
+
"mcp.instructions": "\u5DE5\u5177\u5B58\u5728\u4E0D\u8868\u793A\u540E\u7AEF\u53EF\u7528\uFF1B\u6267\u884C\u3001\u6388\u6743\u3001\u786E\u8BA4\u3001\u53BB\u91CD\u4E0E\u7ED3\u679C\u4FDD\u7559\u7531\u53D7\u4FE1\u670D\u52A1\u8D1F\u8D23\u3002",
|
|
299
|
+
"mcp.tool.machines_list": "\u5217\u51FA\u5F53\u524D caller \u53EF\u89C1\u7684\u8BBE\u5907\uFF1B\u5206\u9875\u548C\u8BA1\u6570\u987B\u7ECF\u8FC7\u5F53\u524D ACL\u3002",
|
|
300
|
+
"mcp.tool.machines_get": "\u6309\u7A33\u5B9A ID \u6216\u7CBE\u786E\u540D\u79F0\u8BFB\u53D6\u53EF\u89C1\u8BBE\u5907\u3002",
|
|
301
|
+
"mcp.tool.providers_list": "\u5217\u51FA\u6307\u5B9A\u8BBE\u5907\u4E0B\u5F53\u524D caller \u53EF\u89C1\u7684\u5DF2\u914D\u7F6E provider\uFF1B\u4E0D\u8FD4\u56DE\u672C\u673A\u914D\u7F6E\u3002",
|
|
302
|
+
"mcp.tool.providers_get": "\u8BFB\u53D6\u663E\u5F0F provider \u7684 kind\u3001revision \u548C readiness\u3002",
|
|
303
|
+
"mcp.tool.runtime_discover": "\u53D1\u73B0\u663E\u5F0F Target/revision \u7684\u6709\u6548\u80FD\u529B\u53CA\u6765\u6E90\uFF1B\u4E0D\u6388\u4E88\u6267\u884C\u6743\u9650\u3002",
|
|
304
|
+
"mcp.tool.runtime_describe": "\u63CF\u8FF0\u663E\u5F0F Target/revision \u4E0B\u7CBE\u786E\u65B9\u6CD5\u7684\u539F\u751F\u53C2\u6570\u3001\u5206\u7C7B\u548C\u9650\u5236\u3002",
|
|
305
|
+
"mcp.tool.runtime_call": "\u63D0\u4EA4\u4E00\u6B21\u663E\u5F0F Target/revision/\u5951\u7EA6\u7684\u539F\u751F\u8C03\u7528\u3002deadline \u662F\u7EDD\u5BF9\u6BEB\u79D2\u671F\u9650\uFF0Cwait_ms \u53EA\u63A7\u5236\u77ED\u7B49\uFF1B\u4E0D\u91CD\u8BD5\u6216\u7BA1\u7406 provider\u3002",
|
|
306
|
+
"mcp.tool.runtime_call_get": "\u6309\u5F53\u524D\u5F52\u5C5E\u3001\u53CC\u7AEF\u7B56\u7565\u548C\u5185\u5BB9\u95E8\u7981\u8BFB\u53D6\u8C03\u7528\uFF1B\u77ED\u7B49\u5230\u671F\u4E0D\u6539\u53D8\u6267\u884C\u671F\u9650\u3002",
|
|
307
|
+
"mcp.tool.runtime_call_cancel": "\u8BF7\u6C42\u505C\u6B62\u7B49\u5F85\u6216\u6865\u63A5\uFF1B\u4EC5\u62A5\u544A\u670D\u52A1\u53EF\u786E\u8BA4\u7A0B\u5EA6\uFF0C\u4E0D\u627F\u8BFA\u539F\u751F\u56DE\u6EDA\u3002",
|
|
308
|
+
"mcp.tool.runtime_result_read": "\u6309\u5F53\u524D\u8BFB\u53D6\u6388\u6743\u548C\u671F\u9650\u8BFB\u53D6\u6709\u754C\u7ED3\u679C\u9875\uFF1Bcursor \u7531\u670D\u52A1\u7ED1\u5B9A caller \u548C\u539F\u7ED3\u679C\u3002",
|
|
309
|
+
"mcp.tool.runtime_response_discard": "\u5904\u7406\u5B8C\u7ED3\u679C\u540E\u663E\u5F0F\u5220\u9664\u539F\u6587\u4E0E\u53E5\u67C4\u5E76\u91CA\u653E\u8BFB\u53D6\u5BB9\u91CF\uFF1B\u5FC5\u987B\u9A8C\u8BC1\u5F52\u5C5E\u3001\u5F53\u524D\u539F\u65B9\u6CD5\u7B56\u7565\u53CA\u72EC\u7ACB discard_response \u6743\u9650\u3002\u8BFB\u53D6\u5230 EOF \u4E0D\u4F1A\u81EA\u52A8\u5220\u9664\u7ED3\u679C\u3002"
|
|
310
|
+
});
|
|
311
|
+
function cliMessages2(language = "en") {
|
|
312
|
+
return language === "zh-CN" ? chinese : english;
|
|
313
|
+
}
|
|
314
|
+
function formatMessage2(template, values) {
|
|
315
|
+
return template.replace(/\{(\w+)\}/gu, (match, name) => Object.hasOwn(values, name) ? String(values[name]) : match);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
export { resolveCliLanguage2, cliMessages2, formatMessage2 };
|
|
319
|
+
|
|
320
|
+
//# debugId=768BC4F3AD60420064756E2164756E21
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
// src/connector/luvus/types.ts
|
|
3
|
+
class LuvusAdapterError2 extends Error {
|
|
4
|
+
code;
|
|
5
|
+
outcome;
|
|
6
|
+
constructor(code, outcome = "not_dispatched") {
|
|
7
|
+
super(code);
|
|
8
|
+
this.code = code;
|
|
9
|
+
this.outcome = outcome;
|
|
10
|
+
this.name = "LuvusAdapterError";
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
// src/connector/capacity.ts
|
|
15
|
+
class ConnectorCapacityError extends LuvusAdapterError2 {
|
|
16
|
+
capacity;
|
|
17
|
+
constructor(resource, reclaimAt) {
|
|
18
|
+
super(resource.startsWith("claim_") ? "claim_capacity" : "connector_attempt_capacity");
|
|
19
|
+
this.capacity = Object.freeze({ resource, reclaim_at: reclaimAt });
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export { LuvusAdapterError2, ConnectorCapacityError };
|
|
24
|
+
|
|
25
|
+
//# debugId=756004902A6361DA64756E2164756E21
|