askvireo 0.0.0-stage → 0.1.2
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/dist/access.js +33 -0
- package/dist/access.js.map +1 -0
- package/dist/acp.js +257 -0
- package/dist/acp.js.map +1 -0
- package/dist/actions.js +141 -0
- package/dist/actions.js.map +1 -0
- package/dist/address.js +32 -0
- package/dist/address.js.map +1 -0
- package/dist/aftercare.js +51 -0
- package/dist/aftercare.js.map +1 -0
- package/dist/agents.js +164 -0
- package/dist/agents.js.map +1 -0
- package/dist/app.js +67 -0
- package/dist/app.js.map +1 -0
- package/dist/audit.js +40 -0
- package/dist/audit.js.map +1 -0
- package/dist/browser.js +559 -0
- package/dist/browser.js.map +1 -0
- package/dist/bus.js +27 -0
- package/dist/bus.js.map +1 -0
- package/dist/cards/blocks.js +80 -0
- package/dist/cards/blocks.js.map +1 -0
- package/dist/cards/diff.js +48 -0
- package/dist/cards/diff.js.map +1 -0
- package/dist/cards/kinds.js +139 -0
- package/dist/cards/kinds.js.map +1 -0
- package/dist/cards/store.js +177 -0
- package/dist/cards/store.js.map +1 -0
- package/dist/cli.js +245 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.js +33 -0
- package/dist/config.js.map +1 -0
- package/dist/connect.js +97 -0
- package/dist/connect.js.map +1 -0
- package/dist/db.js +288 -0
- package/dist/db.js.map +1 -0
- package/dist/extract.js +75 -0
- package/dist/extract.js.map +1 -0
- package/dist/fake-llm-server.js +118 -0
- package/dist/fake-llm-server.js.map +1 -0
- package/dist/fake-model.js +517 -0
- package/dist/fake-model.js.map +1 -0
- package/dist/files.js +70 -0
- package/dist/files.js.map +1 -0
- package/dist/hook.js +146 -0
- package/dist/hook.js.map +1 -0
- package/dist/http/browser.js +91 -0
- package/dist/http/browser.js.map +1 -0
- package/dist/http/events.js +54 -0
- package/dist/http/events.js.map +1 -0
- package/dist/http/index.js +91 -0
- package/dist/http/index.js.map +1 -0
- package/dist/http/memory.js +40 -0
- package/dist/http/memory.js.map +1 -0
- package/dist/http/settings.js +69 -0
- package/dist/http/settings.js.map +1 -0
- package/dist/http/test.js +38 -0
- package/dist/http/test.js.map +1 -0
- package/dist/http/threads.js +109 -0
- package/dist/http/threads.js.map +1 -0
- package/dist/http/views.js +43 -0
- package/dist/http/views.js.map +1 -0
- package/dist/http/work.js +27 -0
- package/dist/http/work.js.map +1 -0
- package/dist/identity.js +26 -0
- package/dist/identity.js.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/index.js +44 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/integrations/local.js +144 -0
- package/dist/integrations/local.js.map +1 -0
- package/dist/integrations/types.js +2 -0
- package/dist/integrations/types.js.map +1 -0
- package/dist/lifecycle.js +74 -0
- package/dist/lifecycle.js.map +1 -0
- package/dist/link.js +33 -0
- package/dist/link.js.map +1 -0
- package/dist/memory-sync.js +93 -0
- package/dist/memory-sync.js.map +1 -0
- package/dist/memory-worker.js +146 -0
- package/dist/memory-worker.js.map +1 -0
- package/dist/memory.js +217 -0
- package/dist/memory.js.map +1 -0
- package/dist/messages.js +13 -0
- package/dist/messages.js.map +1 -0
- package/dist/models.js +275 -0
- package/dist/models.js.map +1 -0
- package/dist/net.js +28 -0
- package/dist/net.js.map +1 -0
- package/dist/peers.js +82 -0
- package/dist/peers.js.map +1 -0
- package/dist/plugins/agents/index.js +357 -0
- package/dist/plugins/agents/index.js.map +1 -0
- package/dist/plugins/chat.js +258 -0
- package/dist/plugins/chat.js.map +1 -0
- package/dist/plugins/endpoint/index.js +436 -0
- package/dist/plugins/endpoint/index.js.map +1 -0
- package/dist/plugins/feishu/index.js +256 -0
- package/dist/plugins/feishu/index.js.map +1 -0
- package/dist/plugins/google/api.js +347 -0
- package/dist/plugins/google/api.js.map +1 -0
- package/dist/plugins/google/index.js +138 -0
- package/dist/plugins/google/index.js.map +1 -0
- package/dist/plugins/index.js +518 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/mcp/index.js +218 -0
- package/dist/plugins/mcp/index.js.map +1 -0
- package/dist/plugins/nodes/index.js +232 -0
- package/dist/plugins/nodes/index.js.map +1 -0
- package/dist/plugins/search/index.js +122 -0
- package/dist/plugins/search/index.js.map +1 -0
- package/dist/plugins/tailscale/api.js +52 -0
- package/dist/plugins/tailscale/api.js.map +1 -0
- package/dist/plugins/tailscale/daemon.js +203 -0
- package/dist/plugins/tailscale/daemon.js.map +1 -0
- package/dist/plugins/tailscale/index.js +504 -0
- package/dist/plugins/tailscale/index.js.map +1 -0
- package/dist/plugins/telegram/index.js +174 -0
- package/dist/plugins/telegram/index.js.map +1 -0
- package/dist/plugins/types.js +2 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/pricing.js +113 -0
- package/dist/pricing.js.map +1 -0
- package/dist/procedures.js +57 -0
- package/dist/procedures.js.map +1 -0
- package/dist/prompt.js +106 -0
- package/dist/prompt.js.map +1 -0
- package/dist/push.js +48 -0
- package/dist/push.js.map +1 -0
- package/dist/relay-client.js +176 -0
- package/dist/relay-client.js.map +1 -0
- package/dist/reminders.js +40 -0
- package/dist/reminders.js.map +1 -0
- package/dist/runner.js +350 -0
- package/dist/runner.js.map +1 -0
- package/dist/scheduler.js +182 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/server.js +105 -0
- package/dist/server.js.map +1 -0
- package/dist/service.js +196 -0
- package/dist/service.js.map +1 -0
- package/dist/settings.js +28 -0
- package/dist/settings.js.map +1 -0
- package/dist/threads.js +197 -0
- package/dist/threads.js.map +1 -0
- package/dist/time.js +85 -0
- package/dist/time.js.map +1 -0
- package/dist/tool-gate.js +70 -0
- package/dist/tool-gate.js.map +1 -0
- package/dist/tools/approval.js +22 -0
- package/dist/tools/approval.js.map +1 -0
- package/dist/tools/browser.js +291 -0
- package/dist/tools/browser.js.map +1 -0
- package/dist/tools/calendar.js +153 -0
- package/dist/tools/calendar.js.map +1 -0
- package/dist/tools/cards.js +176 -0
- package/dist/tools/cards.js.map +1 -0
- package/dist/tools/email.js +76 -0
- package/dist/tools/email.js.map +1 -0
- package/dist/tools/files.js +57 -0
- package/dist/tools/files.js.map +1 -0
- package/dist/tools/index.js +16 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/memory.js +90 -0
- package/dist/tools/memory.js.map +1 -0
- package/dist/tools/research.js +163 -0
- package/dist/tools/research.js.map +1 -0
- package/dist/tools/setup.js +96 -0
- package/dist/tools/setup.js.map +1 -0
- package/dist/tools/threads.js +132 -0
- package/dist/tools/threads.js.map +1 -0
- package/dist/tools/types.js +16 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/usage.js +75 -0
- package/dist/usage.js.map +1 -0
- package/dist/util.js +71 -0
- package/dist/util.js.map +1 -0
- package/dist/vault.js +81 -0
- package/dist/vault.js.map +1 -0
- package/dist/version.js +4 -0
- package/dist/version.js.map +1 -0
- package/dist/watch.js +104 -0
- package/dist/watch.js.map +1 -0
- package/package.json +45 -4
- package/README.md +0 -3
package/dist/cli.js
ADDED
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { execFileSync, spawn } from "node:child_process";
|
|
3
|
+
import { existsSync, mkdirSync, readdirSync, renameSync, rmSync } from "node:fs";
|
|
4
|
+
import { homedir, platform } from "node:os";
|
|
5
|
+
import { dirname, join } from "node:path";
|
|
6
|
+
import { parseArgs } from "node:util";
|
|
7
|
+
import { createInterface } from "node:readline/promises";
|
|
8
|
+
import { loadConfig } from "./config.js";
|
|
9
|
+
import { Identity } from "./identity.js";
|
|
10
|
+
import { connectAgents } from "./connect.js";
|
|
11
|
+
import { linkNode } from "./link.js";
|
|
12
|
+
import { runNode } from "./server.js";
|
|
13
|
+
import * as service from "./service.js";
|
|
14
|
+
import { VERSION } from "./version.js";
|
|
15
|
+
const HELP = `Vireo node ${VERSION}: your own Vireo agent, on this machine.
|
|
16
|
+
|
|
17
|
+
Usage: npx askvireo [command] [options]
|
|
18
|
+
|
|
19
|
+
Commands:
|
|
20
|
+
start Start the node (default). Links it to your account first if needed.
|
|
21
|
+
link Link this node again, e.g. to another account or another way of connecting.
|
|
22
|
+
unlink Forget the link to the account.
|
|
23
|
+
status Show which account and cloud this node is linked to.
|
|
24
|
+
connect Connect Claude Code and Codex on this machine to Vireo: MCP, plus
|
|
25
|
+
hooks that tell you when a long task finishes or it waits on you,
|
|
26
|
+
and ask your approval before a risky shell command.
|
|
27
|
+
service Run in the background, started at login and restarted if it stops
|
|
28
|
+
(launchd on macOS, systemd on Linux):
|
|
29
|
+
service install link if needed, then install and start it
|
|
30
|
+
service upgrade update to the latest version and restart
|
|
31
|
+
service uninstall stop and remove it (your data stays)
|
|
32
|
+
service status whether it is running, and where it logs
|
|
33
|
+
|
|
34
|
+
Options:
|
|
35
|
+
--mode <relay|tailscale> How the app reaches this node (asked when linking)
|
|
36
|
+
--name <name> Name shown in the app (default: this machine's name)
|
|
37
|
+
--cloud <url> Vireo cloud to use
|
|
38
|
+
--data <dir> Where threads, memory, settings and logs live (default ~/.config/vireo)
|
|
39
|
+
--port <port> Local port (default 8787)
|
|
40
|
+
--yes Ask nothing; use the defaults and options given
|
|
41
|
+
--help Show this help
|
|
42
|
+
`;
|
|
43
|
+
const { values, positionals } = parseArgs({
|
|
44
|
+
allowPositionals: true,
|
|
45
|
+
options: {
|
|
46
|
+
mode: { type: "string" },
|
|
47
|
+
name: { type: "string" },
|
|
48
|
+
cloud: { type: "string" },
|
|
49
|
+
data: { type: "string" },
|
|
50
|
+
port: { type: "string" },
|
|
51
|
+
yes: { type: "boolean", default: false },
|
|
52
|
+
help: { type: "boolean", default: false },
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
const command = positionals[0] ?? "start";
|
|
56
|
+
if (values.help || !["start", "link", "unlink", "status", "service", "connect", "hook"].includes(command)) {
|
|
57
|
+
console.log(HELP);
|
|
58
|
+
process.exit(values.help ? 0 : 1);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Everything Vireo keeps on this machine (link, database, files, browser
|
|
62
|
+
* profile, logs, the service's copy of the node) lives in one directory:
|
|
63
|
+
* $XDG_CONFIG_HOME/vireo, usually ~/.config/vireo. Data from before, in
|
|
64
|
+
* ~/.vireo, moves there once.
|
|
65
|
+
*/
|
|
66
|
+
function defaultDataDir() {
|
|
67
|
+
const dir = join(process.env.XDG_CONFIG_HOME || join(homedir(), ".config"), "vireo");
|
|
68
|
+
const old = join(homedir(), ".vireo");
|
|
69
|
+
const empty = !existsSync(dir) || readdirSync(dir).length === 0;
|
|
70
|
+
if (empty && existsSync(old)) {
|
|
71
|
+
try {
|
|
72
|
+
mkdirSync(dirname(dir), { recursive: true });
|
|
73
|
+
rmSync(dir, { recursive: true, force: true });
|
|
74
|
+
renameSync(old, dir);
|
|
75
|
+
console.error(` Moved Vireo's data from ${old} to ${dir}.`);
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
console.warn(` Could not move ${old} to ${dir} (${err instanceof Error ? err.message : err}); using ${old}.`);
|
|
79
|
+
return old;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return dir;
|
|
83
|
+
}
|
|
84
|
+
process.env.VIREO_DATA_DIR = values.data ?? process.env.VIREO_DATA_DIR ?? defaultDataDir();
|
|
85
|
+
if (values.cloud)
|
|
86
|
+
process.env.VIREO_CLOUD_URL = values.cloud;
|
|
87
|
+
if (values.name)
|
|
88
|
+
process.env.VIREO_NAME = values.name;
|
|
89
|
+
if (values.port)
|
|
90
|
+
process.env.VIREO_PORT = values.port;
|
|
91
|
+
const config = loadConfig();
|
|
92
|
+
const identity = new Identity(config.dataDir);
|
|
93
|
+
if (command === "hook") {
|
|
94
|
+
// Run by a coding agent's hook: quick, quiet, and never in the agent's way.
|
|
95
|
+
const { runHook } = await import("./hook.js");
|
|
96
|
+
await runHook(positionals[1] ?? "", config.dataDir, positionals.slice(2)).catch(() => undefined);
|
|
97
|
+
process.exit(0);
|
|
98
|
+
}
|
|
99
|
+
/** Connects the coding agents here to this node; the hooks run the service's copy of the node when there is one. */
|
|
100
|
+
function connect(cli = service.installedCli(service.servicePaths(config.dataDir)) ?? process.argv[1]) {
|
|
101
|
+
return connectAgents({ dataDir: config.dataDir, port: config.port, cli });
|
|
102
|
+
}
|
|
103
|
+
if (command === "connect") {
|
|
104
|
+
try {
|
|
105
|
+
const lines = connect();
|
|
106
|
+
console.log(lines.length ? lines.map((l) => ` ${l}`).join("\n") : " No Claude Code or Codex found on this machine.");
|
|
107
|
+
if (!service.installedCli(service.servicePaths(config.dataDir)))
|
|
108
|
+
console.log(" Tip: npx askvireo service install keeps Vireo running for them.");
|
|
109
|
+
process.exit(0);
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
console.error(` ${err instanceof Error ? err.message : err}`);
|
|
113
|
+
process.exit(1);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
if (command === "status") {
|
|
117
|
+
const id = identity.get();
|
|
118
|
+
console.log(id ? `Linked to ${id.owner.login} on ${id.cloudUrl} as node ${id.nodeId} (${id.mode}). Data: ${config.dataDir}` : `Not linked. Data: ${config.dataDir}`);
|
|
119
|
+
process.exit(0);
|
|
120
|
+
}
|
|
121
|
+
if (command === "unlink" || command === "link") {
|
|
122
|
+
identity.clear();
|
|
123
|
+
if (command === "unlink") {
|
|
124
|
+
console.log("Unlinked. Remove the node in the app too, under Settings → Nodes.");
|
|
125
|
+
process.exit(0);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
const interactive = process.stdin.isTTY && !values.yes;
|
|
129
|
+
const has = (bin) => {
|
|
130
|
+
try {
|
|
131
|
+
execFileSync(bin, ["version"], { stdio: "ignore" });
|
|
132
|
+
return true;
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
/** Asks how the app should reach this node, the first time only. */
|
|
139
|
+
async function chooseMode() {
|
|
140
|
+
if (values.mode === "relay" || values.mode === "tailscale")
|
|
141
|
+
return values.mode;
|
|
142
|
+
if (!interactive)
|
|
143
|
+
return config.mode;
|
|
144
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
145
|
+
console.log(`
|
|
146
|
+
How should the Vireo app reach this node?
|
|
147
|
+
|
|
148
|
+
1. Through the Vireo cloud (recommended): works from anywhere, nothing to open or install.
|
|
149
|
+
2. Over Tailscale: your devices talk to this node directly on your tailnet;
|
|
150
|
+
the cloud only signs you in. Needs Tailscale on this machine and your devices.
|
|
151
|
+
`);
|
|
152
|
+
const answer = (await rl.question(" Choose 1 or 2 [1]: ")).trim();
|
|
153
|
+
rl.close();
|
|
154
|
+
return answer === "2" ? "tailscale" : "relay";
|
|
155
|
+
}
|
|
156
|
+
// Only starting or installing the node may need to link it, and so to ask.
|
|
157
|
+
const linking = command !== "service" || positionals[1] === "install";
|
|
158
|
+
const mode = identity.get()?.mode ?? (linking ? await chooseMode() : config.mode);
|
|
159
|
+
function showLinkCode(start) {
|
|
160
|
+
console.log(`
|
|
161
|
+
Link this node to your Vireo account:
|
|
162
|
+
|
|
163
|
+
${start.verifyUrl}
|
|
164
|
+
|
|
165
|
+
Sign in with GitHub there and check the code shows ${start.userCode}.
|
|
166
|
+
`);
|
|
167
|
+
if (interactive)
|
|
168
|
+
openBrowser(start.verifyUrl);
|
|
169
|
+
}
|
|
170
|
+
if (command === "service") {
|
|
171
|
+
const action = positionals[1] ?? "status";
|
|
172
|
+
const paths = service.servicePaths(config.dataDir);
|
|
173
|
+
try {
|
|
174
|
+
if (action === "status") {
|
|
175
|
+
console.log(` Service: ${service.status()}\n Data: ${config.dataDir}\n Log: ${paths.logFile}`);
|
|
176
|
+
}
|
|
177
|
+
else if (action === "install" || action === "upgrade") {
|
|
178
|
+
if (action === "upgrade" && !service.installed())
|
|
179
|
+
throw new Error("The service is not installed yet. Run: npx askvireo service install");
|
|
180
|
+
// A node running in a terminal holds the port; the service would fail to start next to it.
|
|
181
|
+
const running = await fetch(`http://127.0.0.1:${config.port}/api/health`, { signal: AbortSignal.timeout(2000) }).then((r) => r.ok, () => false);
|
|
182
|
+
if (running && !service.installed())
|
|
183
|
+
throw new Error(`A Vireo node is already running on port ${config.port}. Stop it (Ctrl+C in its terminal), then run this again.`);
|
|
184
|
+
if (!identity.get()) {
|
|
185
|
+
console.log(" First, link this node to your account.");
|
|
186
|
+
identity.save(await linkNode({ cloudUrl: config.cloudUrl, request: { name: config.name, platform: platform(), version: VERSION, mode }, onCode: showLinkCode }));
|
|
187
|
+
console.log(" Linked.");
|
|
188
|
+
}
|
|
189
|
+
const cli = service.install(paths, action === "upgrade" ? "latest" : VERSION);
|
|
190
|
+
// The coding agents here talk to the node the service runs; their hooks point at its copy.
|
|
191
|
+
let agents = [];
|
|
192
|
+
try {
|
|
193
|
+
agents = connect(cli);
|
|
194
|
+
}
|
|
195
|
+
catch (err) {
|
|
196
|
+
agents = [`Could not connect the coding agents here: ${err instanceof Error ? err.message : err}`];
|
|
197
|
+
}
|
|
198
|
+
console.log(`
|
|
199
|
+
Vireo runs in the background now, and starts again at login.
|
|
200
|
+
Data: ${config.dataDir}
|
|
201
|
+
Log: ${paths.logFile}
|
|
202
|
+
Update later with: npx askvireo service upgrade`);
|
|
203
|
+
for (const line of agents)
|
|
204
|
+
console.log(` ${line}`);
|
|
205
|
+
const hint = service.lingerHint();
|
|
206
|
+
if (hint)
|
|
207
|
+
console.log(` ${hint}`);
|
|
208
|
+
}
|
|
209
|
+
else if (action === "uninstall") {
|
|
210
|
+
service.uninstall(paths);
|
|
211
|
+
console.log(` Stopped and removed the service. Your data stays in ${config.dataDir}.`);
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
console.log(HELP);
|
|
215
|
+
process.exit(1);
|
|
216
|
+
}
|
|
217
|
+
process.exit(0);
|
|
218
|
+
}
|
|
219
|
+
catch (err) {
|
|
220
|
+
console.error(` ${err instanceof Error ? err.message : err}`);
|
|
221
|
+
process.exit(1);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
config.mode = mode;
|
|
225
|
+
// On a machine that already runs Tailscale, use it; otherwise Vireo runs its own tailscaled.
|
|
226
|
+
const tailscale = mode === "tailscale" ? { mode: has("tailscale") ? "system" : "managed" } : undefined;
|
|
227
|
+
if (tailscale?.mode === "managed" && !has("tailscaled")) {
|
|
228
|
+
console.error(" Tailscale is not installed here. Install it (https://tailscale.com/download) or choose the cloud relay.");
|
|
229
|
+
process.exit(1);
|
|
230
|
+
}
|
|
231
|
+
function openBrowser(url) {
|
|
232
|
+
const [cmd, args] = process.platform === "darwin" ? ["open", [url]] : process.platform === "win32" ? ["cmd", ["/c", "start", "", url]] : ["xdg-open", [url]];
|
|
233
|
+
spawn(cmd, args, { stdio: "ignore", detached: true })
|
|
234
|
+
.on("error", () => undefined)
|
|
235
|
+
.unref();
|
|
236
|
+
}
|
|
237
|
+
console.log("");
|
|
238
|
+
const node = await runNode(config, {
|
|
239
|
+
tailscale,
|
|
240
|
+
onLinkCode: showLinkCode,
|
|
241
|
+
});
|
|
242
|
+
const shutdown = () => void node.stop().then(() => process.exit(0));
|
|
243
|
+
process.on("SIGINT", shutdown);
|
|
244
|
+
process.on("SIGTERM", shutdown);
|
|
245
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { mkdirSync } from "node:fs";
|
|
2
|
+
import { hostname } from "node:os";
|
|
3
|
+
import { join, resolve } from "node:path";
|
|
4
|
+
function bool(v, fallback) {
|
|
5
|
+
if (v === undefined || v === "")
|
|
6
|
+
return fallback;
|
|
7
|
+
return ["1", "true", "yes", "on"].includes(v.toLowerCase());
|
|
8
|
+
}
|
|
9
|
+
/** The cloud a node uses unless told otherwise (VIREO_CLOUD_URL or --cloud). */
|
|
10
|
+
export const DEFAULT_CLOUD = "https://cloud.askvireo.com";
|
|
11
|
+
export function loadConfig(env = process.env) {
|
|
12
|
+
const dataDir = resolve(env.VIREO_DATA_DIR ?? join(process.cwd(), "data"));
|
|
13
|
+
mkdirSync(dataDir, { recursive: true });
|
|
14
|
+
return {
|
|
15
|
+
port: Number(env.VIREO_PORT ?? env.PORT ?? 8787),
|
|
16
|
+
host: env.VIREO_HOST ?? "127.0.0.1",
|
|
17
|
+
dataDir,
|
|
18
|
+
cloudUrl: (env.VIREO_CLOUD_URL ?? DEFAULT_CLOUD).replace(/\/+$/, ""),
|
|
19
|
+
name: env.VIREO_NAME?.trim() || hostname(),
|
|
20
|
+
mode: env.VIREO_MODE === "tailscale" ? "tailscale" : "relay",
|
|
21
|
+
fakeModel: bool(env.VIREO_FAKE_MODEL, false),
|
|
22
|
+
fakeGoogle: bool(env.VIREO_FAKE_GOOGLE, false),
|
|
23
|
+
searchEndpoint: env.VIREO_SEARCH_ENDPOINT || undefined,
|
|
24
|
+
searxngUrl: env.VIREO_SEARXNG_URL || undefined,
|
|
25
|
+
braveApiKey: env.BRAVE_API_KEY || undefined,
|
|
26
|
+
schedulerIntervalMs: Number(env.VIREO_SCHEDULER_INTERVAL_MS ?? 30_000),
|
|
27
|
+
publicUrl: env.VIREO_PUBLIC_URL?.replace(/\/$/, "") || undefined,
|
|
28
|
+
chromiumPath: env.VIREO_CHROMIUM_PATH || undefined,
|
|
29
|
+
browserHeadless: bool(env.VIREO_BROWSER_HEADLESS, true),
|
|
30
|
+
testMode: bool(env.VIREO_TEST_MODE, false),
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0C1C,SAAS,IAAI,CAAC,CAAqB,EAAE,QAAiB;IACpD,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE;QAAE,OAAO,QAAQ,CAAC;IACjD,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED,gFAAgF;AAChF,MAAM,CAAC,MAAM,aAAa,GAAG,4BAA4B,CAAC;AAE1D,MAAM,UAAU,UAAU,CAAC,GAAG,GAAsB,OAAO,CAAC,GAAG;IAC7D,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3E,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC;QAChD,IAAI,EAAE,GAAG,CAAC,UAAU,IAAI,WAAW;QACnC,OAAO;QACP,QAAQ,EAAE,CAAC,GAAG,CAAC,eAAe,IAAI,aAAa,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QACpE,IAAI,EAAE,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,QAAQ,EAAE;QAC1C,IAAI,EAAE,GAAG,CAAC,UAAU,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO;QAC5D,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,CAAC;QAC5C,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,CAAC;QAC9C,cAAc,EAAE,GAAG,CAAC,qBAAqB,IAAI,SAAS;QACtD,UAAU,EAAE,GAAG,CAAC,iBAAiB,IAAI,SAAS;QAC9C,WAAW,EAAE,GAAG,CAAC,aAAa,IAAI,SAAS;QAC3C,mBAAmB,EAAE,MAAM,CAAC,GAAG,CAAC,2BAA2B,IAAI,MAAM,CAAC;QACtE,SAAS,EAAE,GAAG,CAAC,gBAAgB,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,SAAS;QAChE,YAAY,EAAE,GAAG,CAAC,mBAAmB,IAAI,SAAS;QAClD,eAAe,EAAE,IAAI,CAAC,GAAG,CAAC,sBAAsB,EAAE,IAAI,CAAC;QACvD,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC;KAC3C,CAAC;AACJ,CAAC"}
|
package/dist/connect.js
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
|
+
import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { homedir, hostname } from "node:os";
|
|
4
|
+
import { dirname, join } from "node:path";
|
|
5
|
+
import { Db } from "./db.js";
|
|
6
|
+
import { addKey, KEYS_KV, PATH } from "./plugins/endpoint/index.js";
|
|
7
|
+
/** Where the hooks find the node and their key; readable by this user only. */
|
|
8
|
+
export const hooksFile = (dataDir) => join(dataDir, "hooks.json");
|
|
9
|
+
const has = (bin) => {
|
|
10
|
+
try {
|
|
11
|
+
execFileSync(bin, ["--version"], { stdio: "ignore" });
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
function readJson(file, fallback) {
|
|
19
|
+
try {
|
|
20
|
+
return JSON.parse(readFileSync(file, "utf8"));
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return fallback;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function writePrivate(file, text) {
|
|
27
|
+
mkdirSync(dirname(file), { recursive: true });
|
|
28
|
+
writeFileSync(file, text, { mode: 0o600 });
|
|
29
|
+
chmodSync(file, 0o600);
|
|
30
|
+
}
|
|
31
|
+
/** Adds Vireo over MCP (if the owner had not) and a key for one agent. */
|
|
32
|
+
function keyFor(db, name) {
|
|
33
|
+
const plugins = db.getKv("plugins") ?? {};
|
|
34
|
+
if (!plugins.endpoint?.enabled)
|
|
35
|
+
db.setKv("plugins", { ...plugins, endpoint: { enabled: true, config: plugins.endpoint?.config ?? {} } });
|
|
36
|
+
return addKey({ get: () => db.getKv(KEYS_KV) ?? [], set: (keys) => db.setKv(KEYS_KV, keys) }, name).secret;
|
|
37
|
+
}
|
|
38
|
+
function connectClaude(url, key, hookArgs) {
|
|
39
|
+
try {
|
|
40
|
+
execFileSync("claude", ["mcp", "remove", "--scope", "user", "vireo"], { stdio: "ignore" });
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
// Not added before.
|
|
44
|
+
}
|
|
45
|
+
execFileSync("claude", ["mcp", "add", "--scope", "user", "--transport", "http", "vireo", url, "--header", `Authorization: Bearer ${key}`], { stdio: "ignore" });
|
|
46
|
+
const file = join(process.env.CLAUDE_CONFIG_DIR || join(homedir(), ".claude"), "settings.json");
|
|
47
|
+
const settings = readJson(file, {});
|
|
48
|
+
const hooks = settings.hooks ?? {};
|
|
49
|
+
const ours = (e) => e.hooks.some((h) => h.command.includes(" hook claude"));
|
|
50
|
+
const add = (event, entry) => (hooks[event] = [...(hooks[event] ?? []).filter((e) => !ours(e)), entry]);
|
|
51
|
+
const command = [...hookArgs.map((a) => JSON.stringify(a)), "hook", "claude"].join(" ");
|
|
52
|
+
add("Stop", { hooks: [{ type: "command", command, timeout: 30 }] });
|
|
53
|
+
add("Notification", { hooks: [{ type: "command", command, timeout: 30 }] });
|
|
54
|
+
// Long enough for the owner to answer on their phone.
|
|
55
|
+
add("PreToolUse", { matcher: "Bash", hooks: [{ type: "command", command, timeout: 600 }] });
|
|
56
|
+
writePrivate(file, `${JSON.stringify({ ...settings, hooks }, null, 2)}\n`);
|
|
57
|
+
return "Claude Code: Vireo added as an MCP server; you hear when a long task finishes or it waits on you, and risky shell commands wait for your approval.";
|
|
58
|
+
}
|
|
59
|
+
function connectCodex(url, key, hookArgs) {
|
|
60
|
+
const file = join(process.env.CODEX_HOME || join(homedir(), ".codex"), "config.toml");
|
|
61
|
+
let toml = existsSync(file) ? readFileSync(file, "utf8") : "";
|
|
62
|
+
// Our own block from before, from its marker to the next table or the end.
|
|
63
|
+
toml = toml.replace(/\n?# Added by Vireo \(askvireo connect\)\n\[mcp_servers\.vireo\][\s\S]*?(?=\n\[|$)/, "");
|
|
64
|
+
const notes = ["Codex: Vireo added as an MCP server"];
|
|
65
|
+
const notify = /^notify\s*=/m.test(toml);
|
|
66
|
+
if (!notify) {
|
|
67
|
+
toml = `notify = ${JSON.stringify([...hookArgs, "hook", "codex"])}\n${toml}`;
|
|
68
|
+
notes.push("you hear when a turn finishes");
|
|
69
|
+
}
|
|
70
|
+
else if (!/^notify\s*=.*hook", "codex"/m.test(toml))
|
|
71
|
+
notes.push("its notify setting was yours already, so it is left alone");
|
|
72
|
+
toml = `${toml.replace(/\s*$/, "")}\n\n# Added by Vireo (askvireo connect)\n[mcp_servers.vireo]\nurl = ${JSON.stringify(url)}\nhttp_headers = { "Authorization" = ${JSON.stringify(`Bearer ${key}`)} }\n`;
|
|
73
|
+
writePrivate(file, toml.replace(/^\n+/, ""));
|
|
74
|
+
return `${notes.join("; ")}.`;
|
|
75
|
+
}
|
|
76
|
+
/** Connects every coding agent found on this machine; returns one line per agent, empty when there is none. */
|
|
77
|
+
export function connectAgents(opts) {
|
|
78
|
+
const url = `http://127.0.0.1:${opts.port}${PATH}`;
|
|
79
|
+
const hookArgs = [process.execPath, "--disable-warning=ExperimentalWarning", opts.cli];
|
|
80
|
+
const wanted = opts.only ?? ["claude", "codex"];
|
|
81
|
+
const db = Db.open(opts.dataDir);
|
|
82
|
+
const lines = [];
|
|
83
|
+
try {
|
|
84
|
+
const host = hostname().split(".")[0];
|
|
85
|
+
if (wanted.includes("claude") && has("claude"))
|
|
86
|
+
lines.push(connectClaude(url, keyFor(db, `Claude Code on ${host}`), hookArgs));
|
|
87
|
+
if (wanted.includes("codex") && has("codex"))
|
|
88
|
+
lines.push(connectCodex(url, keyFor(db, `Codex on ${host}`), hookArgs));
|
|
89
|
+
if (lines.length)
|
|
90
|
+
writePrivate(hooksFile(opts.dataDir), `${JSON.stringify({ url, key: keyFor(db, `Hooks on ${host}`) })}\n`);
|
|
91
|
+
}
|
|
92
|
+
finally {
|
|
93
|
+
db.close();
|
|
94
|
+
}
|
|
95
|
+
return lines;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=connect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"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"}
|