@hivefloor/cli 0.1.5 → 0.1.8
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/LICENSE +6 -20
- package/README.md +29 -8
- package/dist/chunk-2ERPDCOT.js +38 -0
- package/dist/chunk-4G362W6G.js +19 -0
- package/dist/chunk-5OJUJCE3.js +817 -0
- package/dist/{chunk-U6RRUAC2.js → chunk-5XXYQQG6.js} +53 -8
- package/dist/chunk-AGIYVFDQ.js +10984 -0
- package/dist/{chunk-RYGL6XU4.js → chunk-BLLPDPTL.js} +4 -2
- package/dist/{chunk-3N5JYP5O.js → chunk-FPJNGKT5.js} +5 -3
- package/dist/chunk-HW3KRNCO.js +201 -0
- package/dist/{chunk-4DRHR7LR.js → chunk-HWBUESB4.js} +1158 -196
- package/dist/{chunk-C627OKTW.js → chunk-K2IRTZH5.js} +7 -6
- package/dist/chunk-KQMPCV57.js +122 -0
- package/dist/{chunk-J36OIJBM.js → chunk-L6EFW2SJ.js} +14 -10
- package/dist/{chunk-IJRHCDIG.js → chunk-LX5A25O6.js} +4 -2
- package/dist/{chunk-MZGGJ6ZS.js → chunk-MYJCU5JL.js} +4 -2
- package/dist/{chunk-H6NYMF2D.js → chunk-NMUH5NXN.js} +6 -4
- package/dist/{chunk-VX7SCIF2.js → chunk-NRJONTFT.js} +3 -1
- package/dist/chunk-QBBKGORP.js +327 -0
- package/dist/{chunk-SOXRITAW.js → chunk-QGULSOQ2.js} +3 -0
- package/dist/{chunk-6MDJB3BV.js → chunk-QLMLB7RB.js} +17 -9
- package/dist/{chunk-TKMIV7BG.js → chunk-QPAFN47B.js} +3 -1
- package/dist/chunk-SBOEAOHD.js +48 -0
- package/dist/{chunk-IWIDKNWC.js → chunk-TIR4CV3P.js} +21 -17
- package/dist/{chunk-6XVIEX75.js → chunk-X2KH6AR4.js} +25 -303
- package/dist/chunk-XAXKZ572.js +106 -0
- package/dist/{chunk-TPMFQUAW.js → chunk-XPGL7VYE.js} +12 -0
- package/dist/{cli-JCBZICR3.js → cli-BFOJWJNG.js} +56 -20
- package/dist/connect-ZJ4JXBAJ.js +27 -0
- package/dist/control-6GHTZQJV.js +25 -0
- package/dist/{disconnect-WQMDCUXT.js → disconnect-3T25NTKX.js} +24 -17
- package/dist/{hook-AYJNRGIY.js → hook-TPSHBCWU.js} +277 -17
- package/dist/index.js +9 -6
- package/dist/{link-ORT4LID6.js → link-EAS5F5PC.js} +14 -11
- package/dist/{machine-connect-N52CKQEW.js → machine-connect-KEI4BRWF.js} +23 -17
- package/dist/mcp-LVIYR3EN.js +1882 -0
- package/dist/orch-KVRL2YA2.js +137 -0
- package/dist/{run-ZAZ45MKQ.js → run-JL2OZWK3.js} +1920 -28
- package/dist/{status-GOCFNO7K.js → status-QXOOJGGN.js} +14 -11
- package/dist/{token-EMM4AJAU.js → token-BFWWQIDA.js} +10 -7
- package/dist/{voice-F5MIS3IZ.js → voice-QXHFXRWG.js} +5 -3
- package/dist/{where-XFXRTP7E.js → where-CMUORQIO.js} +11 -8
- package/package.json +5 -6
- package/dist/chunk-JCLWCMEM.js +0 -8
- package/dist/chunk-K3NQKI34.js +0 -10
- package/dist/chunk-X6B6R32A.js +0 -303
- package/dist/connect-2HLVPEOL.js +0 -23
- package/dist/mcp-2SF6Y73M.js +0 -118
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire as __hfCreateRequire } from 'node:module';
|
|
3
|
+
const require = __hfCreateRequire(import.meta.url);
|
|
4
|
+
import {
|
|
5
|
+
findBin,
|
|
6
|
+
home
|
|
7
|
+
} from "./chunk-XPGL7VYE.js";
|
|
8
|
+
|
|
9
|
+
// src/service/control/proc.ts
|
|
10
|
+
import { execFile } from "child_process";
|
|
11
|
+
function runFile(file, args, opts = {}) {
|
|
12
|
+
return new Promise((resolve) => {
|
|
13
|
+
try {
|
|
14
|
+
const child = execFile(file, args, { timeout: opts.timeoutMs ?? 5e3, maxBuffer: 1024 * 1024, windowsHide: true, ...opts.env ? { env: opts.env } : {} }, (err, stdout, stderr) => {
|
|
15
|
+
if (!err) return resolve({ code: 0, stdout: String(stdout), stderr: String(stderr) });
|
|
16
|
+
const e = err;
|
|
17
|
+
const spawnError = typeof e.code === "string";
|
|
18
|
+
resolve({ code: typeof e.code === "number" ? e.code : null, stdout: String(stdout ?? ""), stderr: String(stderr ?? ""), ...spawnError ? { spawnError: true } : {} });
|
|
19
|
+
});
|
|
20
|
+
if (opts.input !== void 0) {
|
|
21
|
+
child.stdin?.on("error", () => void 0);
|
|
22
|
+
child.stdin?.end(opts.input);
|
|
23
|
+
}
|
|
24
|
+
} catch {
|
|
25
|
+
resolve({ code: null, stdout: "", stderr: "", spawnError: true });
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// src/service/claude-bin.ts
|
|
31
|
+
import fs from "fs";
|
|
32
|
+
import path from "path";
|
|
33
|
+
var CLAUDE_BIN_ENV = "HIVEFLOOR_CLAUDE_BIN";
|
|
34
|
+
var SHELLS = /* @__PURE__ */ new Set(["sh", "bash", "zsh", "fish", "dash", "ksh"]);
|
|
35
|
+
var NOT_FOUND_TTL_MS = 6e4;
|
|
36
|
+
var LOGIN_SHELL_TIMEOUT_MS = 3e3;
|
|
37
|
+
function userBinDirs(homeDir = home()) {
|
|
38
|
+
return [path.join(homeDir, ".local", "bin"), path.join(homeDir, ".claude", "local"), "/opt/homebrew/bin", "/usr/local/bin"];
|
|
39
|
+
}
|
|
40
|
+
function claudeFallbackPaths(homeDir = home()) {
|
|
41
|
+
return userBinDirs(homeDir).map((d) => path.join(d, "claude"));
|
|
42
|
+
}
|
|
43
|
+
var isExecutableFile = (p) => {
|
|
44
|
+
try {
|
|
45
|
+
if (!fs.statSync(p).isFile()) return false;
|
|
46
|
+
fs.accessSync(p, fs.constants.X_OK);
|
|
47
|
+
return true;
|
|
48
|
+
} catch {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
var lastAbsLine = (out) => {
|
|
53
|
+
const lines = out.split(/\r?\n/).map((l) => l.trim()).filter(Boolean);
|
|
54
|
+
for (let i = lines.length - 1; i >= 0; i--) if (path.isAbsolute(lines[i])) return lines[i];
|
|
55
|
+
return void 0;
|
|
56
|
+
};
|
|
57
|
+
function createClaudeResolver(deps = {}) {
|
|
58
|
+
const isExec = deps.isExecutable ?? isExecutableFile;
|
|
59
|
+
const now = deps.now ?? Date.now;
|
|
60
|
+
let found;
|
|
61
|
+
let missAt = -Infinity;
|
|
62
|
+
let warnedBadEnv = false;
|
|
63
|
+
const search = async () => {
|
|
64
|
+
const env = deps.env ?? process.env;
|
|
65
|
+
const homeDir = deps.home ?? home();
|
|
66
|
+
if ((deps.platform ?? process.platform) === "win32") {
|
|
67
|
+
return findBin("claude", env);
|
|
68
|
+
}
|
|
69
|
+
const explicit = env[CLAUDE_BIN_ENV];
|
|
70
|
+
if (explicit) {
|
|
71
|
+
if (path.isAbsolute(explicit) && isExec(explicit)) return explicit;
|
|
72
|
+
if (!warnedBadEnv) {
|
|
73
|
+
warnedBadEnv = true;
|
|
74
|
+
(deps.log ?? ((m) => console.error(m)))(`hivefloor: ${CLAUDE_BIN_ENV} is set but is not an absolute path to an executable file; ignoring it and searching for claude`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
for (const dir of (env.PATH ?? "").split(path.delimiter)) {
|
|
78
|
+
if (!dir || !path.isAbsolute(dir)) continue;
|
|
79
|
+
const p2 = path.join(dir, "claude");
|
|
80
|
+
if (isExec(p2)) return p2;
|
|
81
|
+
}
|
|
82
|
+
for (const p2 of claudeFallbackPaths(homeDir)) if (isExec(p2)) return p2;
|
|
83
|
+
const shell = env.SHELL;
|
|
84
|
+
if (!shell || !path.isAbsolute(shell) || !SHELLS.has(path.basename(shell)) || !isExec(shell)) return void 0;
|
|
85
|
+
const r = await (deps.run ?? runFile)(shell, ["-lc", "command -v claude"], { timeoutMs: LOGIN_SHELL_TIMEOUT_MS });
|
|
86
|
+
if (r.code !== 0) return void 0;
|
|
87
|
+
const p = lastAbsLine(r.stdout);
|
|
88
|
+
return p && isExec(p) ? p : void 0;
|
|
89
|
+
};
|
|
90
|
+
return async () => {
|
|
91
|
+
if (found && isExec(found)) return found;
|
|
92
|
+
found = void 0;
|
|
93
|
+
if (now() - missAt < NOT_FOUND_TTL_MS) return void 0;
|
|
94
|
+
found = await search();
|
|
95
|
+
if (!found) missAt = now();
|
|
96
|
+
return found;
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
var shared;
|
|
100
|
+
var resolveClaudeBin = () => (shared ??= createClaudeResolver())();
|
|
101
|
+
|
|
102
|
+
export {
|
|
103
|
+
runFile,
|
|
104
|
+
userBinDirs,
|
|
105
|
+
resolveClaudeBin
|
|
106
|
+
};
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import { createRequire as __hfCreateRequire } from 'node:module';
|
|
3
|
+
const require = __hfCreateRequire(import.meta.url);
|
|
2
4
|
|
|
3
5
|
// src/fsutil.ts
|
|
4
6
|
import fs from "fs";
|
|
@@ -17,6 +19,11 @@ var machineFile = () => path.join(configDir(), "machine.json");
|
|
|
17
19
|
var machineSpoolFile = () => path.join(configDir(), "machine-spool.jsonl");
|
|
18
20
|
var serviceStateFile = () => path.join(configDir(), "service.json");
|
|
19
21
|
var serviceLogFile = () => path.join(configDir(), "service.log");
|
|
22
|
+
var controlFile = () => path.join(configDir(), "control.json");
|
|
23
|
+
var sessionsFile = () => path.join(configDir(), "sessions.json");
|
|
24
|
+
var controlLogFile = () => path.join(configDir(), "control.log");
|
|
25
|
+
var controlInboxDir = () => path.join(configDir(), "control", "inbox");
|
|
26
|
+
var controlDecisionsDir = () => path.join(configDir(), "control", "decisions");
|
|
20
27
|
var cliDir = () => path.join(configDir(), "cli");
|
|
21
28
|
var cliEntry = () => path.join(cliDir(), "index.js");
|
|
22
29
|
function readText(file) {
|
|
@@ -221,6 +228,11 @@ export {
|
|
|
221
228
|
machineSpoolFile,
|
|
222
229
|
serviceStateFile,
|
|
223
230
|
serviceLogFile,
|
|
231
|
+
controlFile,
|
|
232
|
+
sessionsFile,
|
|
233
|
+
controlLogFile,
|
|
234
|
+
controlInboxDir,
|
|
235
|
+
controlDecisionsDir,
|
|
224
236
|
cliDir,
|
|
225
237
|
cliEntry,
|
|
226
238
|
readText,
|
|
@@ -1,22 +1,24 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import { createRequire as __hfCreateRequire } from 'node:module';
|
|
3
|
+
const require = __hfCreateRequire(import.meta.url);
|
|
2
4
|
import {
|
|
3
5
|
parseArgs
|
|
4
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-QPAFN47B.js";
|
|
5
7
|
import {
|
|
6
8
|
VERSION
|
|
7
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-K2IRTZH5.js";
|
|
8
10
|
import {
|
|
9
11
|
ApiError
|
|
10
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-NRJONTFT.js";
|
|
11
13
|
import {
|
|
12
14
|
defaultCtx
|
|
13
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-QGULSOQ2.js";
|
|
14
16
|
import {
|
|
15
17
|
CLI_BIN_NAME,
|
|
16
18
|
CLI_INSTALL_COMMAND,
|
|
17
19
|
cliNpxCommand
|
|
18
|
-
} from "./chunk-
|
|
19
|
-
import "./chunk-
|
|
20
|
+
} from "./chunk-HWBUESB4.js";
|
|
21
|
+
import "./chunk-2ERPDCOT.js";
|
|
20
22
|
|
|
21
23
|
// src/help.ts
|
|
22
24
|
var HOST_NOTE = `Host: --host URL, else HIVEFLOOR_URL, else the hosted instance. Self-hosting: pass --host or set HIVEFLOOR_URL.`;
|
|
@@ -26,7 +28,7 @@ var COMMAND_HELP = {
|
|
|
26
28
|
Connect this computer once: every agent on it (Claude profiles, Codex, ...) shows up.
|
|
27
29
|
|
|
28
30
|
Options:
|
|
29
|
-
--host URL
|
|
31
|
+
--host URL HiveFloor server (default: HIVEFLOOR_URL, else the hosted instance)
|
|
30
32
|
--name NAME Display name for this machine (default: the computer's hostname)
|
|
31
33
|
--no-open Print the sign-in link instead of opening a browser
|
|
32
34
|
--no-service Do not install the background service
|
|
@@ -72,6 +74,35 @@ ${HOST_NOTE}
|
|
|
72
74
|
service: `Usage: ${CLI_BIN_NAME} service run
|
|
73
75
|
|
|
74
76
|
Run the background service in the foreground. Your OS starts it for you after connect; you rarely run it by hand.
|
|
77
|
+
`,
|
|
78
|
+
control: `Usage: ${CLI_BIN_NAME} control on [--verbs message,approve,deny,stop|none] [--from owner|admins] [--replies off|after_message|always] [--orchestrator on|off]
|
|
79
|
+
${CLI_BIN_NAME} control off
|
|
80
|
+
${CLI_BIN_NAME} control status
|
|
81
|
+
|
|
82
|
+
Session control: let people you allow send a message to, approve or deny a permission prompt of, or stop a live Claude Code session on this computer.
|
|
83
|
+
Off until you turn it on here. Nothing opens a port: the service asks the server for commands. status says what a compromised server could do with the verbs that are on.
|
|
84
|
+
|
|
85
|
+
Options:
|
|
86
|
+
--verbs LIST Which verbs to turn on (default: message,stop). approve and deny add one synchronous PermissionRequest hook to Claude Code's settings.json
|
|
87
|
+
--from WHO owner (default): only the machine's owner; admins: also the project's owners and admins
|
|
88
|
+
--replies MODE Send the agent's last message to the server: off, after_message (default) or always
|
|
89
|
+
--orchestrator on|off Let the server start one Claude Code session in its own folder and type to it (docs/ORCHESTRATOR.md).
|
|
90
|
+
Its tool calls outside reading that folder are asked on the orchestrator page. --verbs none --orchestrator on turns on only this.
|
|
91
|
+
`,
|
|
92
|
+
orch: `Usage: ${CLI_BIN_NAME} orch enable [--full | --no-full]
|
|
93
|
+
${CLI_BIN_NAME} orch disable
|
|
94
|
+
${CLI_BIN_NAME} orch status
|
|
95
|
+
|
|
96
|
+
The orchestrator: let your HiveFloor account start one Claude Code session on this computer and talk to it (docs/ORCHESTRATOR.md).
|
|
97
|
+
|
|
98
|
+
enable Turn the orchestrator on. By default the session is sandboxed: its own folder, none of your settings, every tool call asked on the orchestrator page.
|
|
99
|
+
--full Also allow full power: a start from HiveFloor may run the session as a normal Claude Code session of yours (your settings, MCP servers,
|
|
100
|
+
skills and environment, any folder, resume any of your sessions by id, permission prompts bypassed when the start asks for it).
|
|
101
|
+
That is remote code as you: a session with prompts bypassed asks nothing, so text from fleet reports, scheduled check-ins and
|
|
102
|
+
tool output can make it run commands as you. Only this command can turn it on; the server cannot. It asks you to type FULL,
|
|
103
|
+
needs a terminal (no pipe or script), and is refused inside a Claude Code session.
|
|
104
|
+
--no-full Turn full power off again (a running full-power session is stopped).
|
|
105
|
+
disable Turn the orchestrator off (full power too). Session control verbs stay as they are.
|
|
75
106
|
`,
|
|
76
107
|
link: `Usage: ${CLI_BIN_NAME} link [options]
|
|
77
108
|
|
|
@@ -99,7 +130,7 @@ Options:
|
|
|
99
130
|
`,
|
|
100
131
|
mcp: `Usage: ${CLI_BIN_NAME} mcp [options]
|
|
101
132
|
|
|
102
|
-
Stdio MCP server that proxies to
|
|
133
|
+
Stdio MCP server that proxies to HiveFloor, for tools that cannot send HTTP headers. Needs a stored token (run ${cliNpxCommand("connect")} first).
|
|
103
134
|
|
|
104
135
|
Options:
|
|
105
136
|
--url URL MCP endpoint (default: <host>/mcp)
|
|
@@ -131,7 +162,7 @@ If TalkBack is not installed, status and say print the install line and exit 1.
|
|
|
131
162
|
`,
|
|
132
163
|
hook: `Usage: ${CLI_BIN_NAME} hook <tool> <event> [--profile KEY]
|
|
133
164
|
|
|
134
|
-
The hook runner that Claude Code, Codex and other tools call. It reads the event JSON on stdin, reports it to
|
|
165
|
+
The hook runner that Claude Code, Codex and other tools call. It reads the event JSON on stdin, reports it to HiveFloor, and always exits 0 so a hook never fails the agent. You do not run it by hand; ${cliNpxCommand("connect")} installs the hook entries.
|
|
135
166
|
|
|
136
167
|
Arguments:
|
|
137
168
|
tool claude, codex, ...
|
|
@@ -156,11 +187,12 @@ Commands:
|
|
|
156
187
|
disconnect Remove everything connect added, the machine on the server included (--tool <name> for one agent tool)
|
|
157
188
|
status This machine and its service; the per-repo agent, its projects and live sessions
|
|
158
189
|
where [tool] Which account to run next on (read only; --json for the raw answer)
|
|
190
|
+
control on [--verbs ...] [--from owner|admins] | off | status: let people message, approve or stop live sessions
|
|
159
191
|
service run: the background service (started by your OS; you rarely run it by hand)
|
|
160
192
|
link Link this repo to another project (--project ID | --new NAME [--path PREFIX])
|
|
161
193
|
token Print the stored token for shell use (--reveal to print to a terminal)
|
|
162
194
|
voice status | list [--agent-id ID] | say "<text>" --out file.wav: TalkBack's spoken voice on this computer
|
|
163
|
-
mcp Stdio MCP server that proxies to
|
|
195
|
+
mcp Stdio MCP server that proxies to HiveFloor (for tools without HTTP header support)
|
|
164
196
|
hook <tool> <event>: the hook runner the tools call (reads JSON on stdin)
|
|
165
197
|
help Show this help (hivefloor <command> --help, or help <command>, for one command)
|
|
166
198
|
--version Print the version
|
|
@@ -197,29 +229,33 @@ async function run(argv, ctx = defaultCtx()) {
|
|
|
197
229
|
try {
|
|
198
230
|
switch (cmd) {
|
|
199
231
|
case "connect":
|
|
200
|
-
return await (await import("./connect-
|
|
232
|
+
return await (await import("./connect-ZJ4JXBAJ.js")).connect(ctx, p);
|
|
201
233
|
case "disconnect":
|
|
202
|
-
return await (await import("./disconnect-
|
|
234
|
+
return await (await import("./disconnect-3T25NTKX.js")).disconnect(ctx, p);
|
|
203
235
|
case "status":
|
|
204
|
-
return await (await import("./status-
|
|
236
|
+
return await (await import("./status-QXOOJGGN.js")).status(ctx, p);
|
|
205
237
|
case "where":
|
|
206
|
-
return await (await import("./where-
|
|
238
|
+
return await (await import("./where-CMUORQIO.js")).where(ctx, p);
|
|
207
239
|
case "service":
|
|
208
240
|
if (p.positionals[0] !== "run") {
|
|
209
241
|
ctx.err("hivefloor: usage: hivefloor service run\n");
|
|
210
242
|
return 2;
|
|
211
243
|
}
|
|
212
|
-
return await (await import("./run-
|
|
244
|
+
return await (await import("./run-JL2OZWK3.js")).runService({ ctx });
|
|
245
|
+
case "control":
|
|
246
|
+
return await (await import("./control-6GHTZQJV.js")).control(ctx, p);
|
|
247
|
+
case "orch":
|
|
248
|
+
return await (await import("./orch-KVRL2YA2.js")).orch(ctx, p);
|
|
213
249
|
case "link":
|
|
214
|
-
return await (await import("./link-
|
|
250
|
+
return await (await import("./link-EAS5F5PC.js")).link(ctx, p);
|
|
215
251
|
case "token":
|
|
216
|
-
return await (await import("./token-
|
|
252
|
+
return await (await import("./token-BFWWQIDA.js")).token(ctx, p);
|
|
217
253
|
case "voice":
|
|
218
|
-
return await (await import("./voice-
|
|
254
|
+
return await (await import("./voice-QXHFXRWG.js")).voice(ctx, p);
|
|
219
255
|
case "mcp":
|
|
220
|
-
return await (await import("./mcp-
|
|
256
|
+
return await (await import("./mcp-LVIYR3EN.js")).runMcpProxy(ctx, p);
|
|
221
257
|
case "hook": {
|
|
222
|
-
const { runHook, readStdin } = await import("./hook-
|
|
258
|
+
const { runHook, readStdin } = await import("./hook-TPSHBCWU.js");
|
|
223
259
|
await runHook(rest, { env: ctx.env, cwd: ctx.cwd, fetch: ctx.fetch, now: ctx.now, readStdin });
|
|
224
260
|
return 0;
|
|
225
261
|
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire as __hfCreateRequire } from 'node:module';
|
|
3
|
+
const require = __hfCreateRequire(import.meta.url);
|
|
4
|
+
import {
|
|
5
|
+
connect,
|
|
6
|
+
connectAgent,
|
|
7
|
+
resolveHost
|
|
8
|
+
} from "./chunk-TIR4CV3P.js";
|
|
9
|
+
import "./chunk-FPJNGKT5.js";
|
|
10
|
+
import "./chunk-QBBKGORP.js";
|
|
11
|
+
import "./chunk-X2KH6AR4.js";
|
|
12
|
+
import "./chunk-BLLPDPTL.js";
|
|
13
|
+
import "./chunk-QLMLB7RB.js";
|
|
14
|
+
import "./chunk-QPAFN47B.js";
|
|
15
|
+
import "./chunk-K2IRTZH5.js";
|
|
16
|
+
import "./chunk-LX5A25O6.js";
|
|
17
|
+
import "./chunk-NRJONTFT.js";
|
|
18
|
+
import "./chunk-XAXKZ572.js";
|
|
19
|
+
import "./chunk-XPGL7VYE.js";
|
|
20
|
+
import "./chunk-QGULSOQ2.js";
|
|
21
|
+
import "./chunk-HWBUESB4.js";
|
|
22
|
+
import "./chunk-2ERPDCOT.js";
|
|
23
|
+
export {
|
|
24
|
+
connect,
|
|
25
|
+
connectAgent,
|
|
26
|
+
resolveHost
|
|
27
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire as __hfCreateRequire } from 'node:module';
|
|
3
|
+
const require = __hfCreateRequire(import.meta.url);
|
|
4
|
+
import {
|
|
5
|
+
FULL_POWER_MEANS,
|
|
6
|
+
control,
|
|
7
|
+
describeFull
|
|
8
|
+
} from "./chunk-HW3KRNCO.js";
|
|
9
|
+
import "./chunk-5XXYQQG6.js";
|
|
10
|
+
import "./chunk-4G362W6G.js";
|
|
11
|
+
import "./chunk-X2KH6AR4.js";
|
|
12
|
+
import "./chunk-QPAFN47B.js";
|
|
13
|
+
import "./chunk-KQMPCV57.js";
|
|
14
|
+
import "./chunk-L6EFW2SJ.js";
|
|
15
|
+
import "./chunk-LX5A25O6.js";
|
|
16
|
+
import "./chunk-NRJONTFT.js";
|
|
17
|
+
import "./chunk-XPGL7VYE.js";
|
|
18
|
+
import "./chunk-QGULSOQ2.js";
|
|
19
|
+
import "./chunk-HWBUESB4.js";
|
|
20
|
+
import "./chunk-2ERPDCOT.js";
|
|
21
|
+
export {
|
|
22
|
+
FULL_POWER_MEANS,
|
|
23
|
+
control,
|
|
24
|
+
describeFull
|
|
25
|
+
};
|
|
@@ -1,38 +1,45 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import { createRequire as __hfCreateRequire } from 'node:module';
|
|
3
|
+
const require = __hfCreateRequire(import.meta.url);
|
|
2
4
|
import {
|
|
3
5
|
removeCliCopy,
|
|
4
6
|
removeMachineHooks
|
|
5
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-5XXYQQG6.js";
|
|
8
|
+
import "./chunk-4G362W6G.js";
|
|
6
9
|
import {
|
|
7
|
-
claudeJson,
|
|
8
10
|
geminiSettings,
|
|
9
|
-
readManifest,
|
|
10
|
-
removeClaude,
|
|
11
|
-
removeCodex,
|
|
12
11
|
removeCursor,
|
|
13
12
|
removeGemini,
|
|
14
13
|
removeGrok,
|
|
15
|
-
removeRcLine
|
|
14
|
+
removeRcLine
|
|
15
|
+
} from "./chunk-QBBKGORP.js";
|
|
16
|
+
import {
|
|
17
|
+
claudeJson,
|
|
18
|
+
readManifest,
|
|
19
|
+
removeClaude,
|
|
20
|
+
removeCodex,
|
|
16
21
|
updateManifest
|
|
17
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-X2KH6AR4.js";
|
|
18
23
|
import {
|
|
19
24
|
KEYCHAIN_SERVICE,
|
|
20
25
|
deleteCredentials,
|
|
21
26
|
readCredentials,
|
|
22
27
|
uninstallService
|
|
23
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-QLMLB7RB.js";
|
|
24
29
|
import {
|
|
25
30
|
checkUnknownFlags,
|
|
26
31
|
flagStr
|
|
27
|
-
} from "./chunk-
|
|
28
|
-
import "./chunk-
|
|
32
|
+
} from "./chunk-QPAFN47B.js";
|
|
33
|
+
import "./chunk-KQMPCV57.js";
|
|
34
|
+
import "./chunk-L6EFW2SJ.js";
|
|
29
35
|
import {
|
|
30
36
|
readMachine,
|
|
31
37
|
removeMachineFile
|
|
32
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-LX5A25O6.js";
|
|
33
39
|
import {
|
|
34
40
|
apiRequest
|
|
35
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-NRJONTFT.js";
|
|
42
|
+
import "./chunk-XAXKZ572.js";
|
|
36
43
|
import {
|
|
37
44
|
ConfigError,
|
|
38
45
|
REAL_TOOLS,
|
|
@@ -43,14 +50,14 @@ import {
|
|
|
43
50
|
removeFile,
|
|
44
51
|
serviceLogFile,
|
|
45
52
|
serviceStateFile
|
|
46
|
-
} from "./chunk-
|
|
53
|
+
} from "./chunk-XPGL7VYE.js";
|
|
47
54
|
import {
|
|
48
55
|
hostFromFlag,
|
|
49
56
|
runCmd,
|
|
50
57
|
sameOrigin
|
|
51
|
-
} from "./chunk-
|
|
52
|
-
import "./chunk-
|
|
53
|
-
import "./chunk-
|
|
58
|
+
} from "./chunk-QGULSOQ2.js";
|
|
59
|
+
import "./chunk-HWBUESB4.js";
|
|
60
|
+
import "./chunk-2ERPDCOT.js";
|
|
54
61
|
|
|
55
62
|
// src/disconnect.ts
|
|
56
63
|
import fs from "fs";
|
|
@@ -139,7 +146,7 @@ async function disconnect(ctx, p) {
|
|
|
139
146
|
});
|
|
140
147
|
const m = readManifest();
|
|
141
148
|
if (Object.keys(m.tools).length === 0 && m.rc.length === 0) removeFile(manifestFile());
|
|
142
|
-
if (lines.length === 0 && warnings.length === 0) ctx.out("Nothing to remove: no
|
|
149
|
+
if (lines.length === 0 && warnings.length === 0) ctx.out("Nothing to remove: no HiveFloor entries found.\n");
|
|
143
150
|
else if (lines.length > 0) {
|
|
144
151
|
ctx.out("Disconnected:\n");
|
|
145
152
|
for (const l of lines) ctx.out(` ${l}
|