open-agents-ai 0.187.537 → 0.187.539
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/index.js +38 -40
- package/dist/scripts/tor/UPSTREAM-README.md +148 -0
- package/dist/scripts/tor/destroy_tor.sh +29 -0
- package/dist/scripts/tor/tor_setup.sh +163 -0
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -285,9 +285,14 @@ function saveCache(cache8) {
|
|
|
285
285
|
}
|
|
286
286
|
async function fetchLatestVersion() {
|
|
287
287
|
try {
|
|
288
|
-
const
|
|
288
|
+
const url = `https://registry.npmjs.org/${PACKAGE_NAME}/latest?_=${Date.now()}`;
|
|
289
|
+
const resp = await fetch(url, {
|
|
289
290
|
signal: AbortSignal.timeout(5e3),
|
|
290
|
-
headers: {
|
|
291
|
+
headers: {
|
|
292
|
+
Accept: "application/json",
|
|
293
|
+
"Cache-Control": "no-cache, no-store, max-age=0",
|
|
294
|
+
Pragma: "no-cache"
|
|
295
|
+
}
|
|
291
296
|
});
|
|
292
297
|
if (!resp.ok) return null;
|
|
293
298
|
const data = await resp.json();
|
|
@@ -315,7 +320,7 @@ async function checkForUpdate(currentVersion, forceCheck = false) {
|
|
|
315
320
|
function formatUpdateBanner(info) {
|
|
316
321
|
return `
|
|
317
322
|
Update available: v${info.currentVersion} → v${info.latestVersion}
|
|
318
|
-
Run: npm i -g ${PACKAGE_NAME} or use /update in the REPL
|
|
323
|
+
Run: npm i -g ${PACKAGE_NAME}@${info.latestVersion} or use /update in the REPL
|
|
319
324
|
`;
|
|
320
325
|
}
|
|
321
326
|
var PACKAGE_NAME, CHECK_INTERVAL_MS, CACHE_DIR, CACHE_FILE;
|
|
@@ -569329,12 +569334,13 @@ async function handleUpdate(subcommand, ctx3) {
|
|
|
569329
569334
|
if (doPackage && info) {
|
|
569330
569335
|
installOverlay.setPhase("Package");
|
|
569331
569336
|
installOverlay.setStatus("Installing package...");
|
|
569332
|
-
const
|
|
569337
|
+
const versionSpec = info.latestVersion ? `@${info.latestVersion}` : "@latest";
|
|
569338
|
+
const installCmd = `${sudoPrefix}npm install -g open-agents-ai${versionSpec} --prefer-online --cache-min=0`;
|
|
569333
569339
|
let installOk = await runInstall2(installCmd);
|
|
569334
569340
|
if (!installOk && process.platform === "win32" && /EPERM|EACCES|access|denied|permission/i.test(installError)) {
|
|
569335
569341
|
installOverlay.setStatus("Elevating permissions...");
|
|
569336
569342
|
installError = "";
|
|
569337
|
-
installOk = await runInstall2(`powershell -NoProfile -Command "Start-Process -FilePath 'npm' -ArgumentList 'install -g open-agents-ai
|
|
569343
|
+
installOk = await runInstall2(`powershell -NoProfile -Command "Start-Process -FilePath 'npm' -ArgumentList 'install -g open-agents-ai${versionSpec} --prefer-online --cache-min=0' -Verb RunAs -Wait"`);
|
|
569338
569344
|
}
|
|
569339
569345
|
if (!installOk && /ENOTEMPTY|errno -39/i.test(installError)) {
|
|
569340
569346
|
installOverlay.setStatus("Cleaning stale artifacts...");
|
|
@@ -569353,13 +569359,13 @@ async function handleUpdate(subcommand, ctx3) {
|
|
|
569353
569359
|
}
|
|
569354
569360
|
installOverlay.setStatus("Installing...");
|
|
569355
569361
|
installError = "";
|
|
569356
|
-
installOk = await runInstall2(`${process.platform === "win32" ? "" : sudoPrefix}npm install -g open-agents-ai
|
|
569362
|
+
installOk = await runInstall2(`${process.platform === "win32" ? "" : sudoPrefix}npm install -g open-agents-ai${versionSpec} --force --prefer-online --cache-min=0`);
|
|
569357
569363
|
}
|
|
569358
569364
|
if (!installOk) {
|
|
569359
569365
|
installOverlay.stop("Install failed");
|
|
569360
569366
|
await new Promise((r2) => setTimeout(r2, 2e3));
|
|
569361
569367
|
installOverlay.dismiss();
|
|
569362
|
-
const hint = process.platform === "win32" ? `npm i -g open-agents-ai (run terminal as Administrator)` : `${sudoPrefix}npm i -g open-agents-ai`;
|
|
569368
|
+
const hint = process.platform === "win32" ? `npm i -g open-agents-ai${versionSpec} (run terminal as Administrator)` : `${sudoPrefix}npm cache clean --force && ${sudoPrefix}npm i -g open-agents-ai${versionSpec}`;
|
|
569363
569369
|
renderWarning2(`Update failed: ${installError.slice(0, 150) || "unknown error"}`);
|
|
569364
569370
|
renderWarning2(`Try manually: ${hint}`);
|
|
569365
569371
|
return;
|
|
@@ -587232,6 +587238,29 @@ function resolveLocalPeerId() {
|
|
|
587232
587238
|
_peerIdScanCache = { ts: now, result: scanResult };
|
|
587233
587239
|
return scanResult;
|
|
587234
587240
|
}
|
|
587241
|
+
function locateTorScript(filename) {
|
|
587242
|
+
const candidates = [
|
|
587243
|
+
// npm-installed layout: scripts get copied to dist/scripts/tor/ by
|
|
587244
|
+
// scripts/build-publish.mjs. __dirname at runtime points at dist/api.
|
|
587245
|
+
join119(__dirname, "..", "scripts", "tor", filename),
|
|
587246
|
+
// Workspace dev: cli package's source tree.
|
|
587247
|
+
join119(__dirname, "..", "..", "scripts", "tor", filename),
|
|
587248
|
+
// Workspace dev (from cwd at repo root):
|
|
587249
|
+
join119(process.cwd(), "packages", "cli", "scripts", "tor", filename),
|
|
587250
|
+
join119(process.cwd(), "scripts", "tor", filename)
|
|
587251
|
+
];
|
|
587252
|
+
for (const p2 of candidates) {
|
|
587253
|
+
if (existsSync103(p2)) return p2;
|
|
587254
|
+
}
|
|
587255
|
+
try {
|
|
587256
|
+
const { execSync: execSync59 } = __require("node:child_process");
|
|
587257
|
+
const root = execSync59("npm root -g", { encoding: "utf-8", timeout: 5e3 }).trim();
|
|
587258
|
+
const p2 = join119(root, "open-agents-ai", "dist", "scripts", "tor", filename);
|
|
587259
|
+
if (existsSync103(p2)) return p2;
|
|
587260
|
+
} catch {
|
|
587261
|
+
}
|
|
587262
|
+
return null;
|
|
587263
|
+
}
|
|
587235
587264
|
async function handleTorStatus(ctx3) {
|
|
587236
587265
|
const { res } = ctx3;
|
|
587237
587266
|
const { getLocalOnion: getLocalOnion2, torIsReachable: torIsReachable2 } = await Promise.resolve().then(() => (init_tor_fallback(), tor_fallback_exports));
|
|
@@ -587267,27 +587296,7 @@ async function handleTorEnable(ctx3) {
|
|
|
587267
587296
|
});
|
|
587268
587297
|
return true;
|
|
587269
587298
|
}
|
|
587270
|
-
|
|
587271
|
-
try {
|
|
587272
|
-
const candidates = [
|
|
587273
|
-
join119(process.cwd(), "scripts", "tor", "tor_setup.sh"),
|
|
587274
|
-
join119(__dirname, "..", "..", "scripts", "tor", "tor_setup.sh"),
|
|
587275
|
-
join119(__dirname, "..", "scripts", "tor", "tor_setup.sh")
|
|
587276
|
-
];
|
|
587277
|
-
for (const p2 of candidates) {
|
|
587278
|
-
if (existsSync103(p2)) {
|
|
587279
|
-
scriptPath2 = p2;
|
|
587280
|
-
break;
|
|
587281
|
-
}
|
|
587282
|
-
}
|
|
587283
|
-
if (!scriptPath2) {
|
|
587284
|
-
const { execSync: execSync59 } = __require("node:child_process");
|
|
587285
|
-
const root = execSync59("npm root -g", { encoding: "utf-8", timeout: 5e3 }).trim();
|
|
587286
|
-
const p2 = join119(root, "open-agents-ai", "scripts", "tor", "tor_setup.sh");
|
|
587287
|
-
if (existsSync103(p2)) scriptPath2 = p2;
|
|
587288
|
-
}
|
|
587289
|
-
} catch {
|
|
587290
|
-
}
|
|
587299
|
+
const scriptPath2 = locateTorScript("tor_setup.sh");
|
|
587291
587300
|
if (!scriptPath2) {
|
|
587292
587301
|
sendProblem(res, problemDetails({
|
|
587293
587302
|
type: P.internalError,
|
|
@@ -587343,18 +587352,7 @@ async function handleTorDisable(ctx3) {
|
|
|
587343
587352
|
}));
|
|
587344
587353
|
return true;
|
|
587345
587354
|
}
|
|
587346
|
-
|
|
587347
|
-
const candidates = [
|
|
587348
|
-
join119(process.cwd(), "scripts", "tor", "destroy_tor.sh"),
|
|
587349
|
-
join119(__dirname, "..", "..", "scripts", "tor", "destroy_tor.sh"),
|
|
587350
|
-
join119(__dirname, "..", "scripts", "tor", "destroy_tor.sh")
|
|
587351
|
-
];
|
|
587352
|
-
for (const p2 of candidates) {
|
|
587353
|
-
if (existsSync103(p2)) {
|
|
587354
|
-
scriptPath2 = p2;
|
|
587355
|
-
break;
|
|
587356
|
-
}
|
|
587357
|
-
}
|
|
587355
|
+
const scriptPath2 = locateTorScript("destroy_tor.sh");
|
|
587358
587356
|
if (!scriptPath2) {
|
|
587359
587357
|
sendProblem(res, problemDetails({
|
|
587360
587358
|
type: P.internalError,
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
```plaintext
|
|
4
|
+
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
|
5
|
+
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⡆⠀⢰⣿⠁⠀⢀⣾⠏⠀⠀⠀⠀
|
|
6
|
+
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⡇⠀⣿⠇⠀⣠⡿⠃⠀⠀⠀⠀⠀
|
|
7
|
+
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⡇⢰⡟⠀⠴⠟⠁⣀⣤⣶⠄⠀⠀
|
|
8
|
+
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⠃⢸⠃⣠⣴⣶⠿⠛⠉⠀⠀⠀⠀
|
|
9
|
+
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⣿⠀⠛⠀⣉⣉⣠⣤⣤⡶⠶⠆⠀⠀
|
|
10
|
+
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⣿⡇⢰⡿⠿⠟⠛⠉⠁⠀⠀⠀⠀⠀⠀
|
|
11
|
+
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⣿⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
|
12
|
+
⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⡿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
|
13
|
+
⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⡿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
|
14
|
+
⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⠟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
|
15
|
+
⠀⠀⠀⠀⠀⢠⣤⡈⠹⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
|
16
|
+
⠀⠀⠀⢀⣴⣿⣿⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
|
17
|
+
⠀⠀⠀⢿⣿⡿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
|
18
|
+
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
⠀⠀⠀⠀⠀⠀
|
|
22
|
+
**Whispers of Renewal**
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
In the quiet dawn of cyberspace,
|
|
27
|
+
A gardener prepares the sacred ground.
|
|
28
|
+
First, the old vines of silence are swept away,
|
|
29
|
+
Clearing paths where shadows once were found.
|
|
30
|
+
|
|
31
|
+
With a single breath from the ether's stream,
|
|
32
|
+
He gathers tools from distant lands,
|
|
33
|
+
Scripts like seeds in morning light,
|
|
34
|
+
Held gently in his steady hands.
|
|
35
|
+
|
|
36
|
+
To the sanctuary named "leek" he strides,
|
|
37
|
+
A vessel where new life will begin.
|
|
38
|
+
He sows the seeds of transformation,
|
|
39
|
+
Where old ends and new shall spin.
|
|
40
|
+
|
|
41
|
+
The storm of destruction clears the air,
|
|
42
|
+
Making way for growth unseen.
|
|
43
|
+
Tor's guardians rise with silent grace,
|
|
44
|
+
Anchoring whispers in the in-between.
|
|
45
|
+
|
|
46
|
+
Finally, the messenger awakens,
|
|
47
|
+
Python's spirit flows with ease.
|
|
48
|
+
Messages dance on hidden winds,
|
|
49
|
+
Carried through the veiled breeze.
|
|
50
|
+
|
|
51
|
+
Thus, with unity and purpose bound,
|
|
52
|
+
A cycle of creation starts to weave.
|
|
53
|
+
From destruction springs renewal’s thread,
|
|
54
|
+
In harmony, the systems breathe.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
**WITHOUT SCORTCHED EARTH**
|
|
59
|
+
```
|
|
60
|
+
mkdir -p ~/leek && cd ~/leek && \
|
|
61
|
+
curl -sSL https://raw.githubusercontent.com/robit-man/leek_messenger/main/tor_setup.sh -o tor_setup.sh && \
|
|
62
|
+
curl -sSL https://raw.githubusercontent.com/robit-man/leek_messenger/main/leek_messenger.py -o leek_messenger.py && \
|
|
63
|
+
chmod +x tor_setup.sh && \
|
|
64
|
+
sudo ./tor_setup.sh && \
|
|
65
|
+
sudo python3 leek_messenger.py
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
**WITH SCORTCHED EARTH**
|
|
70
|
+
```
|
|
71
|
+
mkdir -p ~/leek && cd ~/leek && \
|
|
72
|
+
curl -sSL https://raw.githubusercontent.com/robit-man/leek_messenger/main/destroy_tor.sh -o destroy_tor.sh && \
|
|
73
|
+
curl -sSL https://raw.githubusercontent.com/robit-man/leek_messenger/main/tor_setup.sh -o tor_setup.sh && \
|
|
74
|
+
curl -sSL https://raw.githubusercontent.com/robit-man/leek_messenger/main/leek_messenger.py -o leek_messenger.py && \
|
|
75
|
+
chmod +x destroy_tor.sh tor_setup.sh && \
|
|
76
|
+
sudo ./destroy_tor.sh && \
|
|
77
|
+
sudo ./tor_setup.sh && \
|
|
78
|
+
sudo python3 leek_messenger.py
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
**Explanation of the Poem:**
|
|
84
|
+
|
|
85
|
+
1. **Clearing the Old (`destroy_tor.sh`):**
|
|
86
|
+
- *"First, the old vines of silence are swept away, Clearing paths where shadows once were found."*
|
|
87
|
+
- This symbolizes removing existing Tor configurations or remnants to prepare for a fresh setup.
|
|
88
|
+
|
|
89
|
+
2. **Gathering and Sowing New Tools (`tor_setup.sh`):**
|
|
90
|
+
- *"With a single breath from the ether's stream, He gathers tools from distant lands, Scripts like seeds in morning light,"*
|
|
91
|
+
- Represents using `curl` to pull the necessary setup scripts into the `leek` directory.
|
|
92
|
+
|
|
93
|
+
3. **Planting in the Sanctuary (`leek` Directory):**
|
|
94
|
+
- *"To the sanctuary named 'leek' he strides, A vessel where new life will begin."*
|
|
95
|
+
- Refers to creating and navigating into the `leek` folder where the scripts are executed.
|
|
96
|
+
|
|
97
|
+
4. **Setting Up Tor (`tor_setup.sh` Execution):**
|
|
98
|
+
- *"He sows the seeds of transformation, Where old ends and new shall spin."*
|
|
99
|
+
- Symbolizes running the Tor setup script to configure the hidden service anew.
|
|
100
|
+
|
|
101
|
+
5. **Starting the Messenger (`leek_messenger.py` Execution):**
|
|
102
|
+
- *"Finally, the messenger awakens, Python's spirit flows with ease."*
|
|
103
|
+
- Denotes running the Python script that handles sending and receiving messages.
|
|
104
|
+
|
|
105
|
+
6. **Harmony and Communication:**
|
|
106
|
+
- *"Messages dance on hidden winds, Carried through the veiled breeze."*
|
|
107
|
+
- Illustrates the functioning of the messaging system over the Tor network.
|
|
108
|
+
|
|
109
|
+
7. **Cycle of Renewal:**
|
|
110
|
+
- *"From destruction springs renewal’s thread, In harmony, the systems breathe."*
|
|
111
|
+
- Emphasizes the seamless transition from removing old configurations to establishing a new, harmonious communication system.
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
**Usage:**
|
|
116
|
+
|
|
117
|
+
- **Single `curl` Command Equivalent:**
|
|
118
|
+
The poem encapsulates the essence of a single `curl` command that automates the entire setup process:
|
|
119
|
+
1. **Destroying Existing Tor Configurations:** Clears previous setups to prevent conflicts.
|
|
120
|
+
2. **Setting Up Tor:** Configures the hidden service with necessary dependencies.
|
|
121
|
+
3. **Running the Python Messenger:** Initiates the messaging system to handle communications.
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
```plaintext
|
|
125
|
+
___ __ _________ ________ ________ ___
|
|
126
|
+
|\ \ |\ \ |\___ ___\|\ _____\|\ __ \ |\ \
|
|
127
|
+
\ \ \ \ \ \\|___ \ \_|\ \ \__/ \ \ \|\ \\ \ \
|
|
128
|
+
\ \ \ __\ \ \ \ \ \ \ \ __\ \ \ ____\\ \ \
|
|
129
|
+
\ \ \|\__\_\ \ \ \ \ \ \ \_| \ \ \___| \ \ \____
|
|
130
|
+
\ \____________\ \ \__\ \ \__\ \ \__\ \ \_______\
|
|
131
|
+
\|____________| \|__| \|__| \|__| \|_______|
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
|
136
|
+
Version 2, December 2004
|
|
137
|
+
|
|
138
|
+
Copyleft (ↄ) 2004 Sam Hocevar <sam@hocevar.net>
|
|
139
|
+
|
|
140
|
+
Everyone is permitted to copy and distribute verbatim or modified
|
|
141
|
+
copies of this license document, and changing it is allowed as long
|
|
142
|
+
as the name is changed.
|
|
143
|
+
|
|
144
|
+
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
|
145
|
+
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
|
146
|
+
|
|
147
|
+
0. You just DO WHAT THE FUCK YOU WANT TO.
|
|
148
|
+
```
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
echo "Starting complete Tor cleanup..."
|
|
4
|
+
|
|
5
|
+
# Step 1: Kill all running Tor processes
|
|
6
|
+
echo "Terminating all active Tor processes..."
|
|
7
|
+
if pgrep -x "tor" > /dev/null; then
|
|
8
|
+
sudo pkill -9 -x "tor" && echo "All Tor processes have been killed."
|
|
9
|
+
else
|
|
10
|
+
echo "No active Tor processes found."
|
|
11
|
+
fi
|
|
12
|
+
|
|
13
|
+
# Step 2: Remove Tor service from system startup
|
|
14
|
+
echo "Disabling Tor service at startup..."
|
|
15
|
+
sudo systemctl disable tor --now &>/dev/null
|
|
16
|
+
|
|
17
|
+
# Step 3: Remove Tor package and configuration files
|
|
18
|
+
echo "Removing Tor and associated packages..."
|
|
19
|
+
sudo apt purge -y tor tor-geoipdb
|
|
20
|
+
sudo apt autoremove -y # Remove unnecessary dependencies
|
|
21
|
+
|
|
22
|
+
# Step 4: Clear any residual Tor directories
|
|
23
|
+
echo "Cleaning up residual Tor files and directories..."
|
|
24
|
+
sudo rm -rf /var/lib/tor
|
|
25
|
+
sudo rm -rf /var/log/tor
|
|
26
|
+
sudo rm -rf /etc/tor
|
|
27
|
+
sudo rm -rf $HOME/my_tor_data
|
|
28
|
+
|
|
29
|
+
echo "Tor has been completely removed from this system."
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Define variables
|
|
4
|
+
TOR_SERVICE_NAME="tor@default"
|
|
5
|
+
HIDDEN_SERVICE_DIR="/var/lib/tor/hidden_service"
|
|
6
|
+
TORRC_PATH="/etc/tor/torrc"
|
|
7
|
+
BACKUP_DIR="/var/backups/tor"
|
|
8
|
+
LOG_FILE="/var/log/tor_setup.log"
|
|
9
|
+
LOCAL_SERVICE_PORT=${OA_API_PORT:-${LOCAL_SERVICE_PORT:-8080}}
|
|
10
|
+
TOR_SOCKS_PORT=${TOR_SOCKS_PORT:-9050}
|
|
11
|
+
|
|
12
|
+
# Function to log messages
|
|
13
|
+
log_message() {
|
|
14
|
+
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
# Install Tor if not installed
|
|
18
|
+
install_tor() {
|
|
19
|
+
log_message "Checking if Tor is installed..."
|
|
20
|
+
if ! command -v tor > /dev/null; then
|
|
21
|
+
log_message "Tor is not installed. Installing..."
|
|
22
|
+
sudo apt-get update
|
|
23
|
+
sudo apt-get install -y tor
|
|
24
|
+
else
|
|
25
|
+
log_message "Tor is already installed."
|
|
26
|
+
fi
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
# Set up the hidden service
|
|
30
|
+
setup_hidden_service() {
|
|
31
|
+
log_message "Setting up hidden service directory..."
|
|
32
|
+
sudo mkdir -p "$HIDDEN_SERVICE_DIR"
|
|
33
|
+
sudo chown -R debian-tor:debian-tor "$HIDDEN_SERVICE_DIR"
|
|
34
|
+
sudo chmod 700 "$HIDDEN_SERVICE_DIR"
|
|
35
|
+
log_message "Hidden service directory is set with proper ownership and permissions."
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
# Backup existing Tor configuration
|
|
39
|
+
backup_torrc() {
|
|
40
|
+
log_message "Backing up existing Tor configuration..."
|
|
41
|
+
sudo mkdir -p "$BACKUP_DIR"
|
|
42
|
+
if [ -f "$TORRC_PATH" ]; then
|
|
43
|
+
sudo cp "$TORRC_PATH" "$BACKUP_DIR/torrc_backup_$(date +%Y%m%d%H%M%S)"
|
|
44
|
+
log_message "Tor configuration backed up to $BACKUP_DIR."
|
|
45
|
+
else
|
|
46
|
+
log_message "No existing Tor configuration found to back up."
|
|
47
|
+
fi
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
# Update Tor configuration to include hidden service settings
|
|
51
|
+
configure_torrc() {
|
|
52
|
+
log_message "Updating Tor configuration at $TORRC_PATH..."
|
|
53
|
+
|
|
54
|
+
# Ensure the necessary directives are present
|
|
55
|
+
sudo sed -i '/^User /d' "$TORRC_PATH"
|
|
56
|
+
sudo sed -i '/^DataDirectory /d' "$TORRC_PATH"
|
|
57
|
+
sudo sed -i '/^HiddenServiceDir /d' "$TORRC_PATH"
|
|
58
|
+
sudo sed -i '/^HiddenServicePort /d' "$TORRC_PATH"
|
|
59
|
+
|
|
60
|
+
sudo bash -c "cat >> $TORRC_PATH <<EOL
|
|
61
|
+
# Tor configuration generated by setup script
|
|
62
|
+
User debian-tor
|
|
63
|
+
DataDirectory /var/lib/tor
|
|
64
|
+
|
|
65
|
+
# Hidden Service Configuration
|
|
66
|
+
HiddenServiceDir $HIDDEN_SERVICE_DIR
|
|
67
|
+
HiddenServicePort 80 127.0.0.1:$LOCAL_SERVICE_PORT
|
|
68
|
+
EOL"
|
|
69
|
+
|
|
70
|
+
log_message "Tor configuration updated."
|
|
71
|
+
|
|
72
|
+
# Verify the Tor configuration
|
|
73
|
+
log_message "Verifying Tor configuration syntax..."
|
|
74
|
+
if ! sudo tor --verify-config -f "$TORRC_PATH"; then
|
|
75
|
+
log_message "[ERROR] Tor configuration is invalid."
|
|
76
|
+
exit 1
|
|
77
|
+
else
|
|
78
|
+
log_message "Tor configuration is valid."
|
|
79
|
+
fi
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
# Restart Tor service
|
|
83
|
+
restart_tor() {
|
|
84
|
+
log_message "Restarting Tor service..."
|
|
85
|
+
sudo systemctl restart "$TOR_SERVICE_NAME"
|
|
86
|
+
sleep 5 # Give Tor some time to start
|
|
87
|
+
if ! systemctl is-active --quiet "$TOR_SERVICE_NAME"; then
|
|
88
|
+
log_message "[ERROR] Tor service failed to start."
|
|
89
|
+
log_message "Checking Tor logs for errors..."
|
|
90
|
+
sudo journalctl -u "$TOR_SERVICE_NAME" -b --no-pager | tail -n 50 | tee -a "$LOG_FILE"
|
|
91
|
+
exit 1
|
|
92
|
+
else
|
|
93
|
+
log_message "Tor service restarted successfully."
|
|
94
|
+
fi
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
# Ensure Tor starts at boot
|
|
98
|
+
enable_tor_on_boot() {
|
|
99
|
+
log_message "Enabling Tor to start on boot..."
|
|
100
|
+
sudo systemctl enable "$TOR_SERVICE_NAME"
|
|
101
|
+
if systemctl is-enabled --quiet "$TOR_SERVICE_NAME"; then
|
|
102
|
+
log_message "Tor service enabled to start on boot."
|
|
103
|
+
else
|
|
104
|
+
log_message "[ERROR] Failed to enable Tor to start on boot."
|
|
105
|
+
fi
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
# Display the hidden service .onion address and copy it to a user-accessible location
|
|
109
|
+
display_and_copy_hidden_service_address() {
|
|
110
|
+
log_message "Attempting to read hidden service hostname..."
|
|
111
|
+
if [ -f "$HIDDEN_SERVICE_DIR/hostname" ]; then
|
|
112
|
+
local onion_address
|
|
113
|
+
onion_address=$(sudo cat "$HIDDEN_SERVICE_DIR/hostname")
|
|
114
|
+
if [ -n "$onion_address" ]; then
|
|
115
|
+
echo "[INFO] Hidden service address: $onion_address"
|
|
116
|
+
log_message "Hidden service address: $onion_address"
|
|
117
|
+
|
|
118
|
+
# Copy the hostname to a user-accessible location
|
|
119
|
+
USER_ONION_FILE="$HOME/hidden_service_hostname"
|
|
120
|
+
echo "$onion_address" > "$USER_ONION_FILE"
|
|
121
|
+
chmod 644 "$USER_ONION_FILE"
|
|
122
|
+
log_message "Copied hidden service address to $USER_ONION_FILE"
|
|
123
|
+
else
|
|
124
|
+
log_message "[ERROR] Hidden service hostname is empty."
|
|
125
|
+
fi
|
|
126
|
+
else
|
|
127
|
+
log_message "[ERROR] Hidden service hostname file is missing."
|
|
128
|
+
fi
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
# Verify that the local service is running on the specified port
|
|
132
|
+
verify_local_service() {
|
|
133
|
+
log_message "Verifying that the local service on port $LOCAL_SERVICE_PORT is running..."
|
|
134
|
+
if nc -zv 127.0.0.1 "$LOCAL_SERVICE_PORT" 2>&1 | grep -q succeeded; then
|
|
135
|
+
log_message "Local service on port $LOCAL_SERVICE_PORT is running."
|
|
136
|
+
else
|
|
137
|
+
log_message "[WARNING] Local service on port $LOCAL_SERVICE_PORT is not running."
|
|
138
|
+
log_message "Please ensure your service is running for the hidden service to function properly."
|
|
139
|
+
fi
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
# Main function
|
|
143
|
+
main() {
|
|
144
|
+
log_message "Starting Tor setup script..."
|
|
145
|
+
sudo pip3 install pysocks
|
|
146
|
+
install_tor
|
|
147
|
+
setup_hidden_service
|
|
148
|
+
backup_torrc
|
|
149
|
+
configure_torrc
|
|
150
|
+
verify_local_service
|
|
151
|
+
restart_tor
|
|
152
|
+
enable_tor_on_boot
|
|
153
|
+
|
|
154
|
+
# Wait for the hidden service to initialize
|
|
155
|
+
log_message "Waiting for the hidden service to initialize..."
|
|
156
|
+
sleep 30
|
|
157
|
+
|
|
158
|
+
display_and_copy_hidden_service_address
|
|
159
|
+
|
|
160
|
+
log_message "Tor setup script completed."
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
main
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "open-agents-ai",
|
|
3
|
-
"version": "0.187.
|
|
3
|
+
"version": "0.187.539",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "open-agents-ai",
|
|
9
|
-
"version": "0.187.
|
|
9
|
+
"version": "0.187.539",
|
|
10
10
|
"hasInstallScript": true,
|
|
11
11
|
"license": "CC-BY-NC-4.0",
|
|
12
12
|
"dependencies": {
|
package/package.json
CHANGED