reepoe 1.1.5 ā 1.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/bin/metrics.js +3 -3
- package/bin/reepoe.js +31 -135
- package/package.json +1 -1
package/bin/metrics.js
CHANGED
|
@@ -24,9 +24,9 @@ async function showMetrics() {
|
|
|
24
24
|
console.log('\nš Loading your ReePoe metrics...\n');
|
|
25
25
|
|
|
26
26
|
try {
|
|
27
|
-
// Use per-user metrics endpoint
|
|
28
|
-
const
|
|
29
|
-
const res = await axios.get(`${
|
|
27
|
+
// Use per-user metrics endpoint with api_base from activation
|
|
28
|
+
const API_BASE = activation.api_base || 'https://reepoe-api.onrender.com';
|
|
29
|
+
const res = await axios.get(`${API_BASE}/api/metrics/user/${activation.email}`);
|
|
30
30
|
const data = res.data;
|
|
31
31
|
|
|
32
32
|
// Per-user endpoint returns the correct structure already
|
package/bin/reepoe.js
CHANGED
|
@@ -1,146 +1,42 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
* ReePoe CLI - Main command wrapper
|
|
4
|
-
* Manages ReePoe binary execution and queries
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
const { spawn } = require('child_process');
|
|
8
|
-
const path = require('path');
|
|
2
|
+
const axios = require('axios');
|
|
9
3
|
const fs = require('fs');
|
|
4
|
+
const path = require('path');
|
|
10
5
|
const os = require('os');
|
|
11
6
|
|
|
12
|
-
|
|
13
|
-
function getBinaryPath() {
|
|
14
|
-
const platform = os.platform();
|
|
15
|
-
const arch = os.arch();
|
|
16
|
-
|
|
17
|
-
let binaryName;
|
|
18
|
-
if (platform === 'darwin') {
|
|
19
|
-
binaryName = arch === 'arm64' ? 'reepoe-macos-arm64' : 'reepoe-macos-x64';
|
|
20
|
-
} else if (platform === 'linux') {
|
|
21
|
-
binaryName = 'reepoe-linux-x64';
|
|
22
|
-
} else if (platform === 'win32') {
|
|
23
|
-
binaryName = 'reepoe-windows.exe';
|
|
24
|
-
} else {
|
|
25
|
-
console.error(`ā Unsupported platform: ${platform}`);
|
|
26
|
-
process.exit(1);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
const binaryPath = path.join(__dirname, '../binaries', binaryName);
|
|
30
|
-
|
|
31
|
-
if (!fs.existsSync(binaryPath)) {
|
|
32
|
-
console.error(`ā Binary not found: ${binaryPath}`);
|
|
33
|
-
console.error(` Platform: ${platform}-${arch}`);
|
|
34
|
-
process.exit(1);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
return binaryPath;
|
|
38
|
-
}
|
|
7
|
+
const ACTIVATION_FILE = path.join(os.homedir(), '.reepoe', 'activation.json');
|
|
39
8
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
showHelp();
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
if (args[0] === 'version' || args[0] === '--version') {
|
|
51
|
-
console.log('ReePoe Plugin v1.0.0');
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
if (args[0] === 'query') {
|
|
56
|
-
// Direct query command
|
|
57
|
-
const query = args.slice(1).join(' ');
|
|
58
|
-
makeQuery(query);
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
// For other commands, pass through to binary
|
|
63
|
-
console.log('ā¹ļø Use specific commands: reepoe-start, reepoe-stop, reepoe-status');
|
|
64
|
-
console.log(' Or: reepoe query "your question here"');
|
|
9
|
+
function loadActivation() {
|
|
10
|
+
if (!fs.existsSync(ACTIVATION_FILE)) {
|
|
11
|
+
console.error('ā Not activated. Run: reepoe-start');
|
|
12
|
+
process.exit(1);
|
|
13
|
+
}
|
|
14
|
+
return JSON.parse(fs.readFileSync(ACTIVATION_FILE, 'utf8'));
|
|
65
15
|
}
|
|
66
16
|
|
|
67
|
-
function
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
MANAGEMENT:
|
|
85
|
-
reepoe-start Start server in background
|
|
86
|
-
reepoe-stop Stop server
|
|
87
|
-
reepoe-status Check if server is running
|
|
88
|
-
|
|
89
|
-
MORE INFO:
|
|
90
|
-
Documentation: https://reepoe.com/docs
|
|
91
|
-
API: http://localhost:<port>/describe
|
|
92
|
-
`);
|
|
17
|
+
async function query(instruction) {
|
|
18
|
+
const activation = loadActivation();
|
|
19
|
+
const API_BASE = activation.api_base || 'http://localhost:8000';
|
|
20
|
+
|
|
21
|
+
console.log(`š¤ ReePoe processing: "${instruction}"`);
|
|
22
|
+
|
|
23
|
+
try {
|
|
24
|
+
const response = await axios.post(`${API_BASE}/query`, {
|
|
25
|
+
instruction,
|
|
26
|
+
user_email: activation.email
|
|
27
|
+
}, { timeout: 60000 });
|
|
28
|
+
|
|
29
|
+
console.log(response.data.response || JSON.stringify(response.data, null, 2));
|
|
30
|
+
} catch (error) {
|
|
31
|
+
console.error('ā Query failed:', error.response?.data?.detail || error.message);
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
93
34
|
}
|
|
94
35
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
// Read config to get port
|
|
100
|
-
let port = 8000;
|
|
101
|
-
if (fs.existsSync(configPath)) {
|
|
102
|
-
try {
|
|
103
|
-
const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
|
|
104
|
-
port = config.api?.port || 8000;
|
|
105
|
-
} catch (e) {
|
|
106
|
-
// Use default port
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
// Load activation to get user email and API URL
|
|
111
|
-
let userEmail = null;
|
|
112
|
-
let apiBase = `http://localhost:${port}`;
|
|
113
|
-
const activationPath = path.join(os.homedir(), '.reepoe', 'activation.json');
|
|
114
|
-
if (fs.existsSync(activationPath)) {
|
|
115
|
-
try {
|
|
116
|
-
const activation = JSON.parse(fs.readFileSync(activationPath, 'utf8'));
|
|
117
|
-
userEmail = activation.email;
|
|
118
|
-
// Use API base from activation (for cloud environments)
|
|
119
|
-
apiBase = activation.api_base || `http://localhost:${port}`;
|
|
120
|
-
} catch (e) {
|
|
121
|
-
// No activation or invalid - use localhost
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
const url = `${apiBase}/query`;
|
|
126
|
-
|
|
127
|
-
try {
|
|
128
|
-
console.log(`\nš¤ ReePoe processing: "${query}"\n`);
|
|
129
|
-
const requestBody = { instruction: query };
|
|
130
|
-
if (userEmail) {
|
|
131
|
-
requestBody.user_email = userEmail;
|
|
132
|
-
}
|
|
133
|
-
const response = await axios.post(url, requestBody);
|
|
134
|
-
console.log(response.data.response || response.data);
|
|
135
|
-
} catch (error) {
|
|
136
|
-
if (error.code === 'ECONNREFUSED') {
|
|
137
|
-
console.error('ā ReePoe server not running. Start it with: reepoe-start');
|
|
138
|
-
} else {
|
|
139
|
-
console.error(`ā Query failed: ${error.message}`);
|
|
140
|
-
}
|
|
141
|
-
process.exit(1);
|
|
142
|
-
}
|
|
36
|
+
const args = process.argv.slice(2);
|
|
37
|
+
if (args.length === 0) {
|
|
38
|
+
console.log('Usage: reepoe query "your question"');
|
|
39
|
+
process.exit(1);
|
|
143
40
|
}
|
|
144
41
|
|
|
145
|
-
|
|
146
|
-
|
|
42
|
+
query(args.join(' '));
|