rovloom 0.6.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.
Files changed (62) hide show
  1. package/README.md +2 -2
  2. package/dist/src/admin/index.js +1 -1
  3. package/dist/src/{chunk-g27b2gmx.js → chunk-0e9gg4sg.js} +2 -2
  4. package/dist/src/chunk-1xer1ent.js +102 -0
  5. package/dist/src/{chunk-863tk45b.js → chunk-41fny9qm.js} +5 -5
  6. package/dist/src/{chunk-zjzrcc59.js → chunk-59h200cr.js} +139 -7
  7. package/dist/src/chunk-5w5srj3b.js +93 -0
  8. package/dist/src/{chunk-d4ejrtjq.js → chunk-6n6b1xpy.js} +1 -1
  9. package/dist/src/{chunk-ez7d5dac.js → chunk-6w4g9fw8.js} +4 -1
  10. package/dist/src/{chunk-0dqx2mmz.js → chunk-73aq2qkz.js} +1 -1
  11. package/dist/src/{chunk-n6wtjyfb.js → chunk-8c9yc0ge.js} +5 -5
  12. package/dist/src/{chunk-57ayxqnb.js → chunk-8fy8w7ds.js} +2 -23
  13. package/dist/src/{chunk-2tn0r64b.js → chunk-9h9x79bx.js} +5 -5
  14. package/dist/src/{chunk-qjh9x872.js → chunk-av31bx1e.js} +1 -1
  15. package/dist/src/{chunk-0xgpxdgc.js → chunk-bbdtsg4b.js} +7 -5
  16. package/dist/src/{chunk-q5pgbwb3.js → chunk-e7jgpxkf.js} +2 -2
  17. package/dist/src/{chunk-zj48jvfe.js → chunk-efty77sb.js} +3 -40
  18. package/dist/src/{chunk-gyvqqnjb.js → chunk-enj7s8cv.js} +49 -29
  19. package/dist/src/{chunk-jka7v3wb.js → chunk-ftpy8xx3.js} +311 -23
  20. package/dist/src/{chunk-zdxww7ms.js → chunk-h3xyq7zk.js} +1 -1
  21. package/dist/src/{chunk-ttsrctxg.js → chunk-hxmq28pg.js} +9 -7
  22. package/dist/src/{chunk-s3ydr65k.js → chunk-j59ac0xs.js} +2 -2
  23. package/dist/src/{chunk-5s2emvww.js → chunk-j6svdqr8.js} +10 -302
  24. package/dist/src/{chunk-9zkq0kc8.js → chunk-jkzfck98.js} +3 -3
  25. package/dist/src/{chunk-ssp57p43.js → chunk-m76cmkfy.js} +7 -5
  26. package/dist/src/{chunk-d2kz25f2.js → chunk-m96mbzcw.js} +674 -308
  27. package/dist/src/{chunk-yv9px0f5.js → chunk-n3z3jaxy.js} +20 -14
  28. package/dist/src/{chunk-jf4r0r44.js → chunk-ndj0ay2p.js} +19 -18
  29. package/dist/src/{chunk-5b8g62kw.js → chunk-pgs9jp6t.js} +61 -179
  30. package/dist/src/chunk-pksaqt9a.js +25 -0
  31. package/dist/src/{chunk-wxqhscsw.js → chunk-pnep7yhj.js} +7 -99
  32. package/dist/src/chunk-qn5xae7g.js +66 -0
  33. package/dist/src/{chunk-0pewfj89.js → chunk-qp8tgms2.js} +1 -1
  34. package/dist/src/{chunk-mg0fd6ph.js → chunk-rmgw8h27.js} +10 -8
  35. package/dist/src/{chunk-gbsbwssz.js → chunk-sf4ztxba.js} +3 -3
  36. package/dist/src/{chunk-x0td5wn4.js → chunk-shez7hkc.js} +1 -1
  37. package/dist/src/chunk-sqz614bh.js +30 -0
  38. package/dist/src/{chunk-09f9q26d.js → chunk-vdwzb63d.js} +2 -2
  39. package/dist/src/chunk-xtvgm6kf.js +48 -0
  40. package/dist/src/chunk-y8zm75jt.js +157 -0
  41. package/dist/src/chunk-yasqw2vj.js +756 -0
  42. package/dist/src/{chunk-srfbjwtk.js → chunk-z0qmfqvd.js} +3 -3
  43. package/dist/src/chunk-zm705snh.js +53 -0
  44. package/dist/src/cli/index.js +29 -28
  45. package/dist/src/cli/main.js +5 -5
  46. package/dist/src/connector/herdr/installation.js +4 -4
  47. package/dist/src/connector/herdr/provider.js +9 -9
  48. package/dist/src/connector/herdr/runtime.js +7 -7
  49. package/dist/src/connector/luvus/index.js +7 -6
  50. package/dist/src/mcp/index.js +16 -15
  51. package/dist/src/runtime/index.js +16 -15
  52. package/dist/src/service/index.js +2 -2
  53. package/dist/src/store.js +4 -4
  54. package/dist/src/transport/index.js +9 -9
  55. package/dist/src/webui/index.js +141 -939
  56. package/package.json +1 -1
  57. package/dist/src/chunk-0qgk7mhz.js +0 -52
  58. package/dist/src/chunk-3dvn33c4.js +0 -1299
  59. package/dist/src/chunk-5j0gj6w2.js +0 -7
  60. package/dist/src/chunk-vwcntax3.js +0 -228
  61. package/dist/src/chunk-ytpfmcp1.js +0 -25
  62. package/dist/src/chunk-zjkjjm81.js +0 -1114
@@ -1,17 +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";
7
11
  import {
8
12
  cliMessages2,
9
13
  formatMessage2
10
- } from "./chunk-5b8g62kw.js";
14
+ } from "./chunk-pgs9jp6t.js";
11
15
  import {
12
- setupFileStamp,
13
- writeSetupFile,
14
- readSetupJson,
15
16
  REGISTRY_MAX_BYTES,
16
17
  parseRegistry,
17
18
  DEFAULT_ADMIN_TTL_DAYS,
@@ -19,7 +20,12 @@ import {
19
20
  issueAdmin,
20
21
  revokeAdmin,
21
22
  summarizeAdmins
22
- } from "./chunk-wxqhscsw.js";
23
+ } from "./chunk-pnep7yhj.js";
24
+ import {
25
+ setupFileStamp,
26
+ writeSetupFile,
27
+ readSetupJson
28
+ } from "./chunk-1xer1ent.js";
23
29
  import {
24
30
  resolveRoleConfigPath2
25
31
  } from "./chunk-1bf0wmgk.js";
@@ -34,6 +40,8 @@ import {
34
40
  import {
35
41
  canonicalLoopbackHost
36
42
  } from "./chunk-6n9s7nfe.js";
43
+ import"./chunk-3nnahj0j.js";
44
+ import"./chunk-0y5542k8.js";
37
45
 
38
46
  // src/cli/admin-command.ts
39
47
  import { mkdirSync } from "fs";
@@ -107,7 +115,7 @@ function callersStamp(path) {
107
115
  throw error;
108
116
  }
109
117
  }
110
- function writeAdminFiles2(config, principal, at, days) {
118
+ function writeAdminFiles(config, principal, at, days) {
111
119
  const callersPath = runtimeReference(config.state_dir, "mcp-callers");
112
120
  const managementPath = runtimeReference(config.state_dir, "management");
113
121
  mkdirSync(dirname(managementPath), { recursive: true, mode: 448 });
@@ -124,10 +132,7 @@ function writeAdminFiles2(config, principal, at, days) {
124
132
  writeSetupFile(managementPath, boundedJson2(issued.management, 65536), exists, managementStamp);
125
133
  return { secret: issued.secret, expires_at: issued.expires_at };
126
134
  }
127
- function managementSourceExists2(config) {
128
- return readSetupJson(runtimeReference(config.state_dir, "management")) !== undefined;
129
- }
130
- async function handleAdminCommand2(args, io, environment, now = Date.now) {
135
+ async function handleAdminCommand(args, io, environment, now = Date.now) {
131
136
  try {
132
137
  if (args.length === 2 && args[1] === "--help") {
133
138
  io.stderr.write(formatMessage2(cliMessages2(io.language)["help.admin"], { ttlDays: DEFAULT_ADMIN_TTL_DAYS }));
@@ -143,7 +148,7 @@ async function handleAdminCommand2(args, io, environment, now = Date.now) {
143
148
  const at = now();
144
149
  const principal = flags.principal ?? "admin";
145
150
  if (flags.sub === "create") {
146
- const issued = writeAdminFiles2(config, principal, at, flags.days);
151
+ const issued = writeAdminFiles(config, principal, at, flags.days);
147
152
  io.stderr.write(formatMessage2(cliMessages2(io.language)["admin.create.created"], {
148
153
  principal,
149
154
  expires: new Date(issued.expires_at).toISOString()
@@ -182,7 +187,8 @@ async function handleAdminCommand2(args, io, environment, now = Date.now) {
182
187
  return 1;
183
188
  }
184
189
  }
190
+ export {
191
+ handleAdminCommand
192
+ };
185
193
 
186
- export { writeAdminFiles2, managementSourceExists2, handleAdminCommand2 };
187
-
188
- //# debugId=0EB59DEAE24D22AB64756E2164756E21
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-09f9q26d.js";
18
+ import"./chunk-vdwzb63d.js";
19
19
  import {
20
20
  pinTerminalExecution
21
- } from "./chunk-57ayxqnb.js";
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-q5pgbwb3.js";
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-zjzrcc59.js";
40
- import"./chunk-zj48jvfe.js";
41
- import"./chunk-qjh9x872.js";
42
- import"./chunk-0xgpxdgc.js";
43
- import"./chunk-d4ejrtjq.js";
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-5s2emvww.js";
50
+ } from "./chunk-j6svdqr8.js";
51
51
  import {
52
52
  composeConnectorSessions2,
53
53
  createLuvusConnectorSessions2,
54
54
  createLuvusProductionSources2
55
- } from "./chunk-jka7v3wb.js";
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-863tk45b.js";
61
+ } from "./chunk-41fny9qm.js";
62
62
  import"./chunk-zb641qa3.js";
63
- import"./chunk-ttsrctxg.js";
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-2tn0r64b.js";
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-vwcntax3.js";
77
- import"./chunk-gbsbwssz.js";
76
+ import"./chunk-xtvgm6kf.js";
77
+ import"./chunk-5w5srj3b.js";
78
+ import"./chunk-sf4ztxba.js";
78
79
  import"./chunk-3nnahj0j.js";
79
- import"./chunk-zdxww7ms.js";
80
+ import"./chunk-h3xyq7zk.js";
80
81
  import {
81
82
  currentProcessIdentity,
82
83
  listening,
83
84
  ownerIsDead
84
- } from "./chunk-0pewfj89.js";
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=8CB62E3C0DB6789864756E2164756E21
978
+ //# debugId=C72B2A5481F7ADBD64756E2164756E21
@@ -21,20 +21,23 @@ Usage:
21
21
  rovloom config init gateway [--container] [--config /absolute/path/config.json]
22
22
  rovloom config check [--role gateway|connector] [--config /absolute/path/config.json]
23
23
  rovloom config check-runtime [--role gateway|connector] [--config /absolute/path/config.json]
24
- rovloom gateway [--add-device | --repair-device] [--config /absolute/path/config.json] [--non-interactive]
25
- rovloom connector [--repair | --claim] [--config /absolute/path/config.json] [--non-interactive]
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]
26
27
  rovloom service --help
27
28
  rovloom token --help
28
29
  rovloom doctor --help
29
30
  rovloom storage --help
30
31
  rovloom admin --help
31
32
 
32
- gateway / connector starts the matching role. The first run completes one-time pairing and native installation approval in a real local terminal;
33
- declining the pairing prompt keeps the Gateway running unpaired, so rovloom admin create can be run first and first pairing completed from the management page;
34
- --add-device pairs one more Connector on top of a completed setup (same MCP credential; authorization grows to the new device);
35
- --repair-device / --repair re-pairs the same already-paired device (lost or leaked credentials), keeping native setup and MCP authorization.
36
- --claim lets an unpaired Connector claim an administrator-created pairing application from a running Gateway online (management-page code approval; the Gateway keeps running).
37
- These four options need a real local terminal and cannot be combined with --non-interactive. --non-interactive disables the local interactive setup (services run this way).
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).
38
41
  token manages MCP Bearer tokens, admin manages management-page administrators, and service manages boot services; see each --help.
39
42
  config check validates the configuration file read-only; check-runtime additionally verifies program-managed state without reading credentials.
40
43
 
@@ -55,7 +58,7 @@ The password is written to stdout once, only by create (the Gateway stores only
55
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.
56
59
  Administrators cannot call MCP and share nothing with MCP tokens or device credentials; the default validity is {ttlDays} days (1-365).
57
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
58
- pairs the first Connector online (create a pairing application, then run rovloom connector --claim on the device).
61
+ pairs the first Connector (generate a per-device code, then run the displayed join command on the device).
59
62
  `,
60
63
  "help.token": `Usage:
61
64
  rovloom token list [--config /absolute/path/gateway.json]
@@ -97,97 +100,36 @@ Windows uses the explicitly selected existing user with S4U, without storing a p
97
100
  "run.wildcardListenWarning": `wildcard_listener
98
101
  MCP/management listen on all interfaces over plain HTTP; protect them with a firewall or a TLS reverse proxy.
99
102
  `,
100
- "run.pairingRequiredHint": `Gateway is running; complete local pairing and native setup before using an Agent.
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.
101
104
  `,
102
- "run.configurationRequiredHint": `Setup requires a local terminal, a reachable Gateway, completed pairing and a compatible installed Luvus. Preserve uncertain setup state for owner review.
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.
103
106
  `,
104
- "setup.gatewayAddressPrompt": "Gateway address (ws://host:port or wss://host): ",
105
- "setup.connector.pairingCodePrompt": "One-time pairing code: ",
106
- "setup.connector.trustGateway": "Trust this Gateway address for one-time device enrollment and reviewed native setup?",
107
- "setup.connector.pairingCompleted": `pairing_completed: Device identity is durably paired; discovering the selected native installation next.
107
+ "setup.native.managedUnsupportedWindows": `{provider}_managed_unsupported_on_windows: set native.{configKey}.mode to "attach".
108
108
  `,
109
- "setup.connector.nativeSetupResponseUnavailable": `Native setup response unavailable; retain the original setup and rerun Connector to check it.
109
+ "setup.native.managedUnsupportedMacos": `{provider}_managed_unsupported_on_macos: set native.{configKey}.mode to "attach".
110
110
  `,
111
- "setup.connector.nativeStatePrepared": `Native state prepared; starting the real Connector. Watch Gateway for connector_ready.
111
+ "setup.join.completed": `pairing_completed: device {machine} is paired with {url}.
112
112
  `,
113
- "setup.native.managedUnsupportedWindows": `{provider}_managed_unsupported_on_windows: set native.{configKey}.mode to "attach".
113
+ "setup.join.providers": `providers: {entries}
114
114
  `,
115
- "setup.native.managedUnsupportedMacos": `{provider}_managed_unsupported_on_macos: set native.{configKey}.mode to "attach".
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.
116
126
  `,
117
127
  "setup.native.statePathTooLongLuvus": `native_state_path_too_long: choose a shorter data.directory before initialization (Luvus state path maximum 52 UTF-8 bytes).
118
128
  `,
119
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).
120
130
  `,
121
- "setup.prompt.connectorNativeAttachEnabled": "Attach to your running {kind} session (or start one in your own config directory if none is running); remote callers will act on your REAL workspaces (terminal execution ENABLED in user config)?",
122
- "setup.prompt.connectorNativeAttachDisabled": "Attach to your running {kind} session (or start one in your own config directory if none is running); remote callers will act on your REAL workspaces (terminal execution disabled)?",
123
- "setup.prompt.connectorNativeIsolatedEnabled": "Discover {kind} and create isolated state (terminal execution ENABLED in user config)?",
124
- "setup.prompt.connectorNativeIsolatedDisabled": "Discover this {kind} installation and create its isolated local state (terminal execution disabled)?",
125
- "setup.prompt.gatewayNative": "Allow this paired device's measured Luvus ({version}, binary SHA-256 {sha}) for reviewed workspace/Agent operations and one local MCP caller? Terminal execution is controlled by the Connector machine owner's local configuration.",
126
- "setup.prompt.gatewayNativeInstallations": "Allow this paired device's measured native installations ({entries}) for reviewed workspace/Agent operations and one local MCP caller? Terminal execution is controlled by the Connector machine owner's local configuration.",
127
- "setup.repair.alreadyPaired": `This Connector is paired as {machine}. Re-pairing replaces only its Gateway credential; native setup is kept. Stop any other running Connector for this device first.
128
- `,
129
- "setup.repair.codePrompt": "One-time re-pairing code from rovloom gateway --repair-device: ",
130
- "setup.repair.trustConfirm": "Trust this Gateway address and replace this device credential with a new one?",
131
- "setup.repair.confirmationUnavailable": `Gateway confirmation unavailable; if this Connector cannot authenticate, run the re-pairing again.
132
- `,
133
- "setup.repair.deviceRepaired": `device_repaired: The device credential is replaced; starting the Connector.
134
- `,
135
- "setup.gateway.resumeRePairing": `Resuming the device re-pairing; waiting for the Connector to reconnect.
136
- `,
137
- "setup.gateway.repairCodeBlock": `Gateway MCP: {mcpUrl}
138
- Connector endpoint: {endpoint}
139
- One-time re-pairing code for the existing device (5 minutes; keep private):
140
- {code}
141
- Stop that Connector, then run rovloom connector --repair on its machine and enter the code. The old credential no longer works.
142
- `,
143
- "setup.gateway.endpoints": `Gateway MCP: {mcpUrl}
144
- Connector endpoint: {endpoint}
145
- `,
146
- "setup.gateway.unpairedRunning": `Gateway stays unpaired and running; no enrollment or credential is issued.
147
- `,
148
- "setup.gateway.managementFirstPairing": "Finish first pairing from the management page: create the administrator with `rovloom admin create`, sign in at {page}, create a pairing application, then run `rovloom connector --claim` on the device.\n",
149
- "setup.gateway.managementDisabled": `Management is disabled; enable it or rerun to pair from this terminal.
150
- `,
151
- "setup.gateway.pairingCodeBlock": `One-time pairing code (5 minutes; keep private):
152
- {code}
153
- Run rovloom connector in another local terminal and enter the Gateway address and code.
154
- `,
155
- "setup.gateway.resumingExisting": `Resuming the existing setup; no new enrollment or credential is issued.
156
- `,
157
- "setup.gateway.connectorReady": `connector_ready: The Connector passed real authentication and every selected native provider is ready.
158
- `,
159
- "setup.gateway.adminBlock": `
160
- Management page: {page}
161
- Management user: admin
162
- Management password (private): {secret}
163
- (Shown once; run rovloom admin create to re-issue.)`,
164
- "setup.gateway.adminNotCreated": `
165
- Management administrator was not created; run rovloom admin create.`,
166
- "setup.gateway.nativeSaved": `Native configuration saved; Gateway will reopen its real providers.
167
- MCP credential file: {clientPath}
168
- MCP URL: {url}
169
- Targets: {targets}
170
- Binding revision: 1`,
171
- "setup.gateway.bearerAdditional": `
172
- Existing MCP Bearer now also covers this device (not shown again; tokens made with rovloom token create --like need re-creating).`,
173
- "setup.gateway.bearerSecret": `
174
- Bearer (private): {token}`,
175
- "setup.approval.resumeConfirm": "Resume the existing device setup?",
176
- "setup.approval.pairConfirm": "Pair one Connector with this Gateway?",
177
- "setup.approval.repairDeviceConfirm": "Re-pair the existing Connector device {name} ({machine})? The credential it holds stops working now and in-flight calls become unknown.",
178
- "setup.claim.pairingCompletedActivated": `pairing_completed: Device identity is durably paired and native activation is complete.
179
- `,
180
- "setup.claim.waitEnded": `Approval wait ended; rerun the same command to resume this claim.
181
- `,
182
- "setup.claim.restartConfirm": "Start a new claim with a new pairing application?",
183
- "setup.claim.pairingIdPrompt": "Pairing application ID: ",
184
- "setup.claim.trustConfirm": "Trust this Gateway address for online device enrollment?",
185
- "setup.claim.claimCodeBlock": `Claim code: {code}
186
- Approve this exact code for machine {machine} in the management page.
187
- `,
188
- "setup.claim.activationResponseUnavailable": `Native activation response unavailable; rerun the same command to check the original claim.
189
- `,
190
- "setup.claim.nativeStatePrepared": `Native state prepared; starting the real Connector.
131
+ "setup.gateway.joinCommandBlock": `Join command (one per device; run it on the Connector machine to consume):
132
+ {command}
191
133
  `,
192
134
  "admin.create.login": `login at {url} with user "{user}" and the password below (shown once)
193
135
  `,
@@ -229,20 +171,21 @@ var chinese = Object.freeze({
229
171
  rovloom config init gateway [--container] [--config /absolute/path/config.json]
230
172
  rovloom config check [--role gateway|connector] [--config /absolute/path/config.json]
231
173
  rovloom config check-runtime [--role gateway|connector] [--config /absolute/path/config.json]
232
- rovloom gateway [--add-device | --repair-device] [--config /absolute/path/config.json] [--non-interactive]
233
- rovloom connector [--repair | --claim] [--config /absolute/path/config.json] [--non-interactive]
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]
234
177
  rovloom service --help
235
178
  rovloom token --help
236
179
  rovloom doctor --help
237
180
  rovloom storage --help
238
181
  rovloom admin --help
239
182
 
240
- gateway / connector \u542F\u52A8\u5BF9\u5E94\u89D2\u8272\u3002\u9996\u6B21\u8FD0\u884C\u65F6\u5728\u771F\u5B9E\u672C\u5730\u7EC8\u7AEF\u5B8C\u6210\u4E00\u6B21\u6027\u914D\u5BF9\u4E0E\u539F\u751F\u5B89\u88C5\u6279\u51C6\uFF1B
241
- \u5728\u7EC8\u7AEF\u62D2\u7EDD\u914D\u5BF9\u63D0\u793A\u65F6\uFF0CGateway \u4FDD\u6301\u672A\u914D\u5BF9\u8FD0\u884C\uFF0C\u53EF\u5148\u8FD0\u884C rovloom admin create \u518D\u4ECE\u7BA1\u7406\u9875\u5B8C\u6210\u9996\u53F0\u914D\u5BF9\uFF1B
242
- --add-device \u5728\u5DF2\u5B8C\u6210\u7684\u5F15\u5BFC\u4E4B\u4E0A\u518D\u914D\u5BF9\u4E00\u53F0 Connector\uFF08\u6CBF\u7528\u540C\u4E00 MCP \u51ED\u636E\uFF0C\u6388\u6743\u968F\u4E4B\u6269\u5927\u5230\u65B0\u8BBE\u5907\uFF09\uFF1B
243
- --repair-device / --repair \u91CD\u65B0\u914D\u5BF9\u5DF2\u914D\u5BF9\u7684\u540C\u4E00\u8BBE\u5907\uFF08\u51ED\u636E\u4E22\u5931\u6216\u6CC4\u6F0F\uFF09\uFF0C\u4FDD\u7559\u539F\u751F\u8BBE\u7F6E\u4E0E MCP \u6388\u6743\u3002
244
- --claim \u8BA9\u672A\u914D\u5BF9\u7684 Connector \u5411\u8FD0\u884C\u4E2D\u7684 Gateway \u5728\u7EBF\u8BA4\u9886\u7BA1\u7406\u5458\u521B\u5EFA\u7684\u914D\u5BF9\u7533\u8BF7\uFF08\u7BA1\u7406\u9875\u6838\u5BF9\u7801\u6279\u51C6\uFF0CGateway \u4E0D\u505C\u673A\uFF09\u3002
245
- \u8FD9\u56DB\u4E2A\u9009\u9879\u9700\u8981\u771F\u5B9E\u672C\u5730\u7EC8\u7AEF\uFF0C\u4E0D\u53EF\u4E0E --non-interactive \u5408\u7528\u3002--non-interactive \u5173\u95ED\u672C\u5730\u4EA4\u4E92\u5F15\u5BFC\uFF08\u670D\u52A1\u4EE5\u6B64\u8FD0\u884C\uFF09\u3002
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
246
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
247
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
248
191
 
@@ -263,7 +206,7 @@ Agent \u4E0E\u6A21\u578B\u767B\u5F55\u9700\u72EC\u7ACB\u51C6\u5907\uFF1B\u539F\u
263
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
264
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
265
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
266
- \u5728\u7EBF\u914D\u5BF9\u9996\u53F0 Connector\uFF08\u65B0\u5EFA\u7533\u8BF7\uFF0C\u8BBE\u5907\u8FD0\u884C rovloom connector --claim\uFF09\u3002
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
267
210
  `,
268
211
  "help.token": `\u7528\u6CD5\uFF1A
269
212
  rovloom token list [--config /absolute/path/gateway.json]
@@ -305,97 +248,36 @@ Windows \u4F7F\u7528\u663E\u5F0F\u9009\u62E9\u7684\u65E2\u6709\u7528\u6237\u4E0E
305
248
  "run.wildcardListenWarning": `wildcard_listener
306
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
307
250
  `,
308
- "run.pairingRequiredHint": `Gateway \u5DF2\u542F\u52A8\uFF1B\u4F7F\u7528 Agent \u524D\u4ECD\u9700\u5B8C\u6210\u672C\u5730\u914D\u5BF9\u548C\u539F\u751F\u521D\u59CB\u5316\u3002
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
309
252
  `,
310
- "run.configurationRequiredHint": `\u521D\u59CB\u5316\u9700\u672C\u5730\u7EC8\u7AEF\u3001\u53EF\u8FBE Gateway\u3001\u5B8C\u6574\u914D\u5BF9\u53CA\u517C\u5BB9 Luvus \u5B89\u88C5\uFF1B\u7ED3\u679C\u4E0D\u786E\u5B9A\u65F6\u4FDD\u7559\u539F\u72B6\u6001\u5E76\u7531\u6240\u6709\u8005\u6838\u67E5\u3002
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
311
254
  `,
312
- "setup.gatewayAddressPrompt": "Gateway \u5730\u5740: ",
313
- "setup.connector.pairingCodePrompt": "\u4E00\u6B21\u6027\u914D\u5BF9\u7801: ",
314
- "setup.connector.trustGateway": "\u4FE1\u4EFB\u6B64 Gateway \u5730\u5740\u5E76\u5151\u6362\u4E00\u6B21\u6027\u8BBE\u5907\u914D\u5BF9\uFF1F",
315
- "setup.connector.pairingCompleted": `pairing_completed: \u8BBE\u5907\u8EAB\u4EFD\u5DF2\u6301\u4E45\u914D\u5BF9\uFF1B\u63A5\u4E0B\u6765\u53D1\u73B0\u6240\u9009\u539F\u751F\u5B89\u88C5\u3002
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
316
256
  `,
317
- "setup.connector.nativeSetupResponseUnavailable": `\u539F\u751F\u8BBE\u7F6E\u54CD\u5E94\u4E0D\u53EF\u7528\uFF1B\u4FDD\u7559\u539F\u72B6\u6001\uFF0C\u91CD\u65B0\u8FD0\u884C Connector \u6838\u5BF9\u3002
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
318
258
  `,
319
- "setup.connector.nativeStatePrepared": `\u539F\u751F\u72B6\u6001\u5DF2\u51C6\u5907\uFF1B\u542F\u52A8\u6B63\u5F0F Connector\uFF0C\u4EE5 Gateway \u7684\u5B9E\u9645\u5C31\u7EEA\u63D0\u793A\u4E3A\u51C6\u3002
259
+ "setup.join.completed": `pairing_completed: \u8BBE\u5907 {machine} \u5DF2\u4E0E {url} \u5B8C\u6210\u914D\u5BF9\u3002
320
260
  `,
321
- "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
261
+ "setup.join.providers": `providers: {entries}
322
262
  `,
323
- "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
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
324
274
  `,
325
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
326
276
  `,
327
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
328
278
  `,
329
- "setup.prompt.connectorNativeAttachEnabled": "\u9644\u7740\u5230\u4F60\u6B63\u5728\u8FD0\u884C\u7684 {kind} \u4F1A\u8BDD\uFF08\u6CA1\u6709\u5219\u5728\u4F60\u81EA\u5DF1\u7684\u914D\u7F6E\u76EE\u5F55\u91CC\u542F\u52A8\u4E00\u4E2A\uFF09\uFF0C\u8FDC\u7A0B\u8C03\u7528\u5C06\u76F4\u63A5\u64CD\u4F5C\u4F60\u7684\u771F\u5B9E\u5DE5\u4F5C\u533A\uFF08\u7528\u6237\u914D\u7F6E\u5DF2\u5F00\u542F\u7EC8\u7AEF\u6267\u884C\uFF09\uFF1F",
330
- "setup.prompt.connectorNativeAttachDisabled": "\u9644\u7740\u5230\u4F60\u6B63\u5728\u8FD0\u884C\u7684 {kind} \u4F1A\u8BDD\uFF08\u6CA1\u6709\u5219\u5728\u4F60\u81EA\u5DF1\u7684\u914D\u7F6E\u76EE\u5F55\u91CC\u542F\u52A8\u4E00\u4E2A\uFF09\uFF0C\u8FDC\u7A0B\u8C03\u7528\u5C06\u76F4\u63A5\u64CD\u4F5C\u4F60\u7684\u771F\u5B9E\u5DE5\u4F5C\u533A\uFF08\u5173\u95ED\u7EC8\u7AEF\u6267\u884C\uFF09\uFF1F",
331
- "setup.prompt.connectorNativeIsolatedEnabled": "\u53D1\u73B0 {kind} \u5E76\u521B\u5EFA\u9694\u79BB\u72B6\u6001\uFF08\u7528\u6237\u914D\u7F6E\u5DF2\u5F00\u542F\u7EC8\u7AEF\u6267\u884C\uFF09\uFF1F",
332
- "setup.prompt.connectorNativeIsolatedDisabled": "\u53D1\u73B0 {kind} \u5E76\u521B\u5EFA\u9694\u79BB\u72B6\u6001\uFF08\u5173\u95ED\u7EC8\u7AEF\u6267\u884C\uFF09\uFF1F",
333
- "setup.prompt.gatewayNative": "\u6279\u51C6\u8FD9\u53F0\u8BBE\u5907\u7684\u5B9E\u6D4B Luvus\uFF08\u7248\u672C {version}\uFF0C\u4E8C\u8FDB\u5236 SHA-256 {sha}\uFF09\u3001\u666E\u901A\u7A97\u53E3/Agent \u64CD\u4F5C\u53CA\u4E00\u4E2A\u672C\u673A MCP caller\uFF08\u7EC8\u7AEF\u6267\u884C\u7531 Connector \u672C\u673A\u6240\u6709\u8005\u914D\u7F6E\u51B3\u5B9A\uFF09\uFF1F",
334
- "setup.prompt.gatewayNativeInstallations": "\u6279\u51C6\u8FD9\u4E9B\u5B9E\u6D4B\u539F\u751F\u6765\u6E90\uFF08{entries}\uFF09\u3001\u5404\u81EA\u7A97\u53E3/Agent \u64CD\u4F5C\u53CA\u4E00\u4E2A\u672C\u673A MCP caller\uFF08\u7EC8\u7AEF\u6267\u884C\u7531 Connector \u672C\u673A\u6240\u6709\u8005\u914D\u7F6E\u51B3\u5B9A\uFF09\uFF1F",
335
- "setup.repair.alreadyPaired": `\u6B64 Connector \u5DF2\u914D\u5BF9\u4E3A {machine}\u3002\u91CD\u65B0\u914D\u5BF9\u53EA\u66F4\u6362\u4E0E Gateway \u7684\u51ED\u636E\uFF0C\u4FDD\u7559\u539F\u751F\u8BBE\u7F6E\uFF1B\u8BF7\u5148\u505C\u6B62\u8BE5\u8BBE\u5907\u4E0A\u5176\u5B83\u6B63\u5728\u8FD0\u884C\u7684 Connector\u3002
336
- `,
337
- "setup.repair.codePrompt": "\u6765\u81EA rovloom gateway --repair-device \u7684\u4E00\u6B21\u6027\u7801: ",
338
- "setup.repair.trustConfirm": "\u4FE1\u4EFB\u6B64 Gateway \u5730\u5740\u5E76\u7528\u65B0\u51ED\u636E\u66FF\u6362\u672C\u673A\u8BBE\u5907\u51ED\u636E\uFF1F",
339
- "setup.repair.confirmationUnavailable": `\u672A\u6536\u5230 Gateway \u7684\u786E\u8BA4\uFF1B\u82E5 Connector \u4E4B\u540E\u65E0\u6CD5\u8BA4\u8BC1\uFF0C\u8BF7\u91CD\u65B0\u6267\u884C\u91CD\u65B0\u914D\u5BF9\u3002
340
- `,
341
- "setup.repair.deviceRepaired": `device_repaired: \u8BBE\u5907\u51ED\u636E\u5DF2\u66F4\u6362\uFF1B\u6B63\u5728\u542F\u52A8 Connector\u3002
342
- `,
343
- "setup.gateway.resumeRePairing": `\u7EE7\u7EED\u539F\u91CD\u65B0\u914D\u5BF9\uFF0C\u7B49\u5F85 Connector \u91CD\u8FDE\u3002
344
- `,
345
- "setup.gateway.repairCodeBlock": `Gateway MCP: {mcpUrl}
346
- Connector endpoint: {endpoint}
347
- \u5DF2\u6709\u8BBE\u5907\u7684\u4E00\u6B21\u6027\u91CD\u65B0\u914D\u5BF9\u7801\uFF085\u5206\u949F\uFF0C\u8BF7\u4FDD\u5BC6\uFF09:
348
- {code}
349
- \u5728\u8BE5\u8BBE\u5907\u4E0A\u505C\u6B62 Connector\uFF0C\u8FD0\u884C rovloom connector --repair \u5E76\u8F93\u5165\u6B64\u7801\uFF1B\u65E7\u51ED\u636E\u5DF2\u5931\u6548\u3002
350
- `,
351
- "setup.gateway.endpoints": `Gateway MCP: {mcpUrl}
352
- Connector endpoint: {endpoint}
353
- `,
354
- "setup.gateway.unpairedRunning": `Gateway \u4FDD\u6301\u672A\u914D\u5BF9\u5E76\u7EE7\u7EED\u8FD0\u884C\uFF0C\u4E0D\u7B7E\u53D1\u51ED\u636E\u3002
355
- `,
356
- "setup.gateway.managementFirstPairing": "\u5728\u7BA1\u7406\u9875\u5B8C\u6210\u9996\u6B21\u914D\u5BF9\uFF1A\u5148\u7528 `rovloom admin create` \u521B\u5EFA\u7BA1\u7406\u5458\uFF0C\u767B\u5F55 {page} \u65B0\u5EFA\u914D\u5BF9\u7533\u8BF7\uFF0C\u518D\u5728\u8BBE\u5907\u4E0A\u8FD0\u884C `rovloom connector --claim`\u3002\n",
357
- "setup.gateway.managementDisabled": `\u7BA1\u7406\u9875\u672A\u542F\u7528\uFF1B\u8BF7\u542F\u7528\u540E\u91CD\u8BD5\u6216\u5728\u672C\u7EC8\u7AEF\u5B8C\u6210\u914D\u5BF9\u3002
358
- `,
359
- "setup.gateway.pairingCodeBlock": `\u4E00\u6B21\u6027\u914D\u5BF9\u7801\uFF085\u5206\u949F\uFF0C\u8BF7\u4FDD\u5BC6\uFF09:
360
- {code}
361
- \u5728 Connector \u7684\u672C\u5730\u7EC8\u7AEF\u8F93\u5165 Gateway \u5730\u5740\u4E0E\u8BE5\u7801\uFF1B\u968F\u540E\u56DE\u5230\u6B64\u7EC8\u7AEF\u6279\u51C6\u5B9E\u6D4B\u5B89\u88C5\u3002
362
- `,
363
- "setup.gateway.resumingExisting": `\u7EE7\u7EED\u539F\u8BBE\u7F6E\uFF0C\u4E0D\u91CD\u65B0\u7B7E\u53D1\u3002
364
- `,
365
- "setup.gateway.connectorReady": `connector_ready: Connector \u5DF2\u901A\u8FC7\u771F\u5B9E\u8BA4\u8BC1\u4E14\u5168\u90E8\u6240\u9009\u539F\u751F provider \u5C31\u7EEA\u3002
366
- `,
367
- "setup.gateway.adminBlock": `
368
- \u7BA1\u7406\u9875: {page}
369
- \u7BA1\u7406\u5458: admin
370
- \u7BA1\u7406\u5458\u5BC6\u7801: {secret}
371
- (\u53EA\u663E\u793A\u4E00\u6B21\uFF1B\u4E22\u5931\u540E\u8FD0\u884C rovloom admin create \u91CD\u65B0\u7B7E\u53D1\u3002)`,
372
- "setup.gateway.adminNotCreated": `
373
- \u672A\u80FD\u521B\u5EFA\u7BA1\u7406\u9875\u7BA1\u7406\u5458\uFF0C\u8BF7\u7A0D\u540E\u8FD0\u884C rovloom admin create\u3002`,
374
- "setup.gateway.nativeSaved": `\u539F\u751F\u914D\u7F6E\u5DF2\u4FDD\u5B58\uFF0CGateway \u5C06\u91CD\u5F00\u5B9E\u9645 provider\u3002
375
- MCP \u51ED\u636E\u6587\u4EF6: {clientPath}
376
- MCP URL: {url}
377
- Targets: {targets}
378
- Binding revision: 1`,
379
- "setup.gateway.bearerAdditional": `
380
- \u73B0\u6709 MCP Bearer \u5DF2\u8986\u76D6\u6B64\u8BBE\u5907\uFF08\u4E0D\u518D\u663E\u793A\uFF1B\u7528 token create --like \u514B\u9686\u7684\u4EE4\u724C\u9700\u8981\u91CD\u65B0\u514B\u9686\uFF09\u3002`,
381
- "setup.gateway.bearerSecret": `
382
- Bearer (private): {token}`,
383
- "setup.approval.resumeConfirm": "\u7EE7\u7EED\u539F\u8BBE\u5907\u8BBE\u7F6E\uFF1F",
384
- "setup.approval.pairConfirm": "\u5141\u8BB8\u914D\u5BF9\u4E00\u4E2A Connector\uFF1F",
385
- "setup.approval.repairDeviceConfirm": "\u91CD\u65B0\u914D\u5BF9\u5DF2\u6709\u8BBE\u5907 {name}\uFF08{machine}\uFF09\uFF1F\u8BE5\u8BBE\u5907\u5F53\u524D\u51ED\u636E\u7ACB\u5373\u5931\u6548\uFF0C\u8FDB\u884C\u4E2D\u7684\u8C03\u7528\u7ED3\u679C\u53D8\u4E3A\u672A\u77E5\u3002",
386
- "setup.claim.pairingCompletedActivated": `pairing_completed: \u8BBE\u5907\u8EAB\u4EFD\u5DF2\u6301\u4E45\u914D\u5BF9\uFF0C\u539F\u751F\u6FC0\u6D3B\u5DF2\u5B8C\u6210\u3002
387
- `,
388
- "setup.claim.waitEnded": `\u7B49\u5F85\u6279\u51C6\u5DF2\u7ED3\u675F\uFF1B\u91CD\u65B0\u8FD0\u884C\u540C\u4E00\u547D\u4EE4\u53EF\u7EE7\u7EED\u539F\u8BA4\u9886\u3002
389
- `,
390
- "setup.claim.restartConfirm": "\u539F\u8BA4\u9886\u5DF2\u7EC8\u6B62\u6216\u8FC7\u671F\uFF0C\u662F\u5426\u4F7F\u7528\u65B0\u7684\u914D\u5BF9\u7533\u8BF7\u91CD\u65B0\u8BA4\u9886\uFF1F",
391
- "setup.claim.pairingIdPrompt": "\u914D\u5BF9\u7533\u8BF7 ID: ",
392
- "setup.claim.trustConfirm": "\u4FE1\u4EFB\u6B64 Gateway \u5730\u5740\u5E76\u5728\u7EBF\u8BA4\u9886\u8BBE\u5907\u914D\u5BF9\uFF1F",
393
- "setup.claim.claimCodeBlock": `\u6838\u5BF9\u7801: {code}
394
- \u8BF7\u5728\u7BA1\u7406\u9875\u4E3A\u8BBE\u5907 {machine} \u6838\u5BF9\u5E76\u6279\u51C6\u6B64\u7801\u3002
395
- `,
396
- "setup.claim.activationResponseUnavailable": `\u539F\u751F\u6FC0\u6D3B\u54CD\u5E94\u4E0D\u53EF\u7528\uFF1B\u91CD\u65B0\u8FD0\u884C\u540C\u4E00\u547D\u4EE4\u6309\u539F\u8BA4\u9886\u6838\u5BF9\u3002
397
- `,
398
- "setup.claim.nativeStatePrepared": `\u539F\u751F\u72B6\u6001\u5DF2\u51C6\u5907\uFF1B\u542F\u52A8\u6B63\u5F0F Connector\u3002
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}
399
281
  `,
400
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
401
283
  `,
@@ -435,4 +317,4 @@ function formatMessage2(template, values) {
435
317
 
436
318
  export { resolveCliLanguage2, cliMessages2, formatMessage2 };
437
319
 
438
- //# debugId=8069F52A271C482D64756E2164756E21
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