fluq-watch 0.1.2 → 0.1.3
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/bin/fluq.js +177 -0
- package/dist/bin/fluq.js.map +1 -1
- package/package.json +1 -1
package/dist/bin/fluq.js
CHANGED
|
@@ -1,5 +1,38 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
3
36
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
37
|
const commander_1 = require("commander");
|
|
5
38
|
const watcher_1 = require("../src/watcher");
|
|
@@ -77,5 +110,149 @@ program
|
|
|
77
110
|
process.exit(1);
|
|
78
111
|
}
|
|
79
112
|
});
|
|
113
|
+
program
|
|
114
|
+
.command("install")
|
|
115
|
+
.description("Install fluq-watch as a background service (auto-starts on login)")
|
|
116
|
+
.option("--api-key <key>", "API key (or set FLUQ_API_KEY)")
|
|
117
|
+
.option("--endpoint <url>", "API endpoint (default: https://fluq.ai)")
|
|
118
|
+
.option("--uninstall", "Remove the background service")
|
|
119
|
+
.action(async (opts) => {
|
|
120
|
+
const { execSync } = await Promise.resolve().then(() => __importStar(require("child_process")));
|
|
121
|
+
const { writeFileSync, existsSync, mkdirSync, unlinkSync } = await Promise.resolve().then(() => __importStar(require("fs")));
|
|
122
|
+
const { homedir, platform } = await Promise.resolve().then(() => __importStar(require("os")));
|
|
123
|
+
const { join } = await Promise.resolve().then(() => __importStar(require("path")));
|
|
124
|
+
const apiKey = opts.apiKey || process.env.FLUQ_API_KEY;
|
|
125
|
+
const endpoint = opts.endpoint || process.env.FLUQ_ENDPOINT || "https://fluq.ai";
|
|
126
|
+
const isMac = platform() === "darwin";
|
|
127
|
+
const isLinux = platform() === "linux";
|
|
128
|
+
if (!isMac && !isLinux) {
|
|
129
|
+
console.error("Auto-install only supported on macOS and Linux.");
|
|
130
|
+
console.log("On Windows: add fluq-watch to Task Scheduler or use WSL.");
|
|
131
|
+
process.exit(1);
|
|
132
|
+
}
|
|
133
|
+
// Find the fluq-watch binary path
|
|
134
|
+
let binPath;
|
|
135
|
+
try {
|
|
136
|
+
binPath = execSync("which fluq-watch || which fluq", { encoding: "utf8" }).trim().split("\n")[0];
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
binPath = process.execPath; // fallback to current node executable
|
|
140
|
+
}
|
|
141
|
+
if (opts.uninstall) {
|
|
142
|
+
if (isMac) {
|
|
143
|
+
const plistPath = join(homedir(), "Library/LaunchAgents/ai.fluq.watch.plist");
|
|
144
|
+
if (existsSync(plistPath)) {
|
|
145
|
+
try {
|
|
146
|
+
execSync(`launchctl unload "${plistPath}"`, { stdio: "ignore" });
|
|
147
|
+
}
|
|
148
|
+
catch { /* ignore */ }
|
|
149
|
+
unlinkSync(plistPath);
|
|
150
|
+
console.log("✓ fluq-watch service removed");
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
console.log("No service installed");
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
const unitPath = join(homedir(), ".config/systemd/user/fluq-watch.service");
|
|
158
|
+
if (existsSync(unitPath)) {
|
|
159
|
+
try {
|
|
160
|
+
execSync("systemctl --user disable --now fluq-watch", { stdio: "ignore" });
|
|
161
|
+
}
|
|
162
|
+
catch { /* ignore */ }
|
|
163
|
+
unlinkSync(unitPath);
|
|
164
|
+
console.log("✓ fluq-watch service removed");
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
console.log("No service installed");
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
if (!apiKey) {
|
|
173
|
+
console.error("Error: --api-key is required");
|
|
174
|
+
process.exit(1);
|
|
175
|
+
}
|
|
176
|
+
if (isMac) {
|
|
177
|
+
const launchAgentsDir = join(homedir(), "Library/LaunchAgents");
|
|
178
|
+
if (!existsSync(launchAgentsDir))
|
|
179
|
+
mkdirSync(launchAgentsDir, { recursive: true });
|
|
180
|
+
const plistPath = join(launchAgentsDir, "ai.fluq.watch.plist");
|
|
181
|
+
const logPath = join(homedir(), "Library/Logs/fluq-watch.log");
|
|
182
|
+
const plist = `<?xml version="1.0" encoding="UTF-8"?>
|
|
183
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
184
|
+
<plist version="1.0">
|
|
185
|
+
<dict>
|
|
186
|
+
<key>Label</key>
|
|
187
|
+
<string>ai.fluq.watch</string>
|
|
188
|
+
<key>ProgramArguments</key>
|
|
189
|
+
<array>
|
|
190
|
+
<string>${binPath}</string>
|
|
191
|
+
<string>watch</string>
|
|
192
|
+
<string>--api-key</string>
|
|
193
|
+
<string>${apiKey}</string>
|
|
194
|
+
<string>--endpoint</string>
|
|
195
|
+
<string>${endpoint}</string>
|
|
196
|
+
</array>
|
|
197
|
+
<key>EnvironmentVariables</key>
|
|
198
|
+
<dict>
|
|
199
|
+
<key>FLUQ_API_KEY</key>
|
|
200
|
+
<string>${apiKey}</string>
|
|
201
|
+
</dict>
|
|
202
|
+
<key>RunAtLoad</key>
|
|
203
|
+
<true/>
|
|
204
|
+
<key>KeepAlive</key>
|
|
205
|
+
<true/>
|
|
206
|
+
<key>StandardOutPath</key>
|
|
207
|
+
<string>${logPath}</string>
|
|
208
|
+
<key>StandardErrorPath</key>
|
|
209
|
+
<string>${logPath}</string>
|
|
210
|
+
<key>ThrottleInterval</key>
|
|
211
|
+
<integer>10</integer>
|
|
212
|
+
</dict>
|
|
213
|
+
</plist>`;
|
|
214
|
+
// Unload existing if present
|
|
215
|
+
try {
|
|
216
|
+
execSync(`launchctl unload "${plistPath}"`, { stdio: "ignore" });
|
|
217
|
+
}
|
|
218
|
+
catch { /* ignore */ }
|
|
219
|
+
writeFileSync(plistPath, plist);
|
|
220
|
+
execSync(`launchctl load "${plistPath}"`);
|
|
221
|
+
console.log("✓ fluq-watch installed as background service");
|
|
222
|
+
console.log(` Starts automatically on login`);
|
|
223
|
+
console.log(` Logs: tail -f ${logPath}`);
|
|
224
|
+
console.log(` Stop: launchctl unload "${plistPath}"`);
|
|
225
|
+
console.log(` Remove: fluq-watch uninstall`);
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
// Linux: systemd user service
|
|
229
|
+
const systemdDir = join(homedir(), ".config/systemd/user");
|
|
230
|
+
if (!existsSync(systemdDir))
|
|
231
|
+
mkdirSync(systemdDir, { recursive: true });
|
|
232
|
+
const unitPath = join(systemdDir, "fluq-watch.service");
|
|
233
|
+
const unit = `[Unit]
|
|
234
|
+
Description=Fluq Watch — AI agent fleet observer
|
|
235
|
+
After=network.target
|
|
236
|
+
|
|
237
|
+
[Service]
|
|
238
|
+
Type=simple
|
|
239
|
+
ExecStart=${binPath} watch --api-key ${apiKey} --endpoint ${endpoint}
|
|
240
|
+
Environment=FLUQ_API_KEY=${apiKey}
|
|
241
|
+
Restart=always
|
|
242
|
+
RestartSec=10
|
|
243
|
+
|
|
244
|
+
[Install]
|
|
245
|
+
WantedBy=default.target
|
|
246
|
+
`;
|
|
247
|
+
writeFileSync(unitPath, unit);
|
|
248
|
+
execSync("systemctl --user daemon-reload");
|
|
249
|
+
execSync("systemctl --user enable --now fluq-watch");
|
|
250
|
+
console.log("✓ fluq-watch installed as systemd user service");
|
|
251
|
+
console.log(" Status: systemctl --user status fluq-watch");
|
|
252
|
+
console.log(" Logs: journalctl --user -u fluq-watch -f");
|
|
253
|
+
console.log(" Stop: systemctl --user stop fluq-watch");
|
|
254
|
+
console.log(" Remove: fluq-watch install --uninstall");
|
|
255
|
+
}
|
|
256
|
+
});
|
|
80
257
|
program.parse();
|
|
81
258
|
//# sourceMappingURL=fluq.js.map
|
package/dist/bin/fluq.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fluq.js","sourceRoot":"","sources":["../../bin/fluq.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fluq.js","sourceRoot":"","sources":["../../bin/fluq.ts"],"names":[],"mappings":"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"}
|