@staticn0va/wigolo 0.3.1 → 0.5.1
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/README.md +57 -2
- package/SKILL.md +196 -0
- package/dist/agent/executor.d.ts +13 -0
- package/dist/agent/executor.d.ts.map +1 -0
- package/dist/agent/executor.js +128 -0
- package/dist/agent/executor.js.map +1 -0
- package/dist/agent/pipeline.d.ts +5 -0
- package/dist/agent/pipeline.d.ts.map +1 -0
- package/dist/agent/pipeline.js +198 -0
- package/dist/agent/pipeline.js.map +1 -0
- package/dist/agent/planner.d.ts +9 -0
- package/dist/agent/planner.d.ts.map +1 -0
- package/dist/agent/planner.js +190 -0
- package/dist/agent/planner.js.map +1 -0
- package/dist/cache/change-detector.d.ts +7 -0
- package/dist/cache/change-detector.d.ts.map +1 -0
- package/dist/cache/change-detector.js +43 -0
- package/dist/cache/change-detector.js.map +1 -0
- package/dist/cache/db.d.ts.map +1 -1
- package/dist/cache/db.js +32 -0
- package/dist/cache/db.js.map +1 -1
- package/dist/cache/diff-summary.d.ts +2 -0
- package/dist/cache/diff-summary.d.ts.map +1 -0
- package/dist/cache/diff-summary.js +87 -0
- package/dist/cache/diff-summary.js.map +1 -0
- package/dist/cache/store.d.ts +16 -0
- package/dist/cache/store.d.ts.map +1 -1
- package/dist/cache/store.js +79 -0
- package/dist/cache/store.js.map +1 -1
- package/dist/cli/auth.d.ts +2 -0
- package/dist/cli/auth.d.ts.map +1 -0
- package/dist/cli/auth.js +95 -0
- package/dist/cli/auth.js.map +1 -0
- package/dist/cli/daemon.d.ts +6 -1
- package/dist/cli/daemon.d.ts.map +1 -1
- package/dist/cli/daemon.js +56 -3
- package/dist/cli/daemon.js.map +1 -1
- package/dist/cli/health.d.ts +1 -1
- package/dist/cli/health.d.ts.map +1 -1
- package/dist/cli/health.js +41 -3
- package/dist/cli/health.js.map +1 -1
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/plugin.d.ts +5 -0
- package/dist/cli/plugin.d.ts.map +1 -0
- package/dist/cli/plugin.js +188 -0
- package/dist/cli/plugin.js.map +1 -0
- package/dist/cli/shell.d.ts +2 -0
- package/dist/cli/shell.d.ts.map +1 -0
- package/dist/cli/shell.js +86 -0
- package/dist/cli/shell.js.map +1 -0
- package/dist/cli/warmup.d.ts +8 -0
- package/dist/cli/warmup.d.ts.map +1 -1
- package/dist/cli/warmup.js +106 -1
- package/dist/cli/warmup.js.map +1 -1
- package/dist/config.d.ts +15 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +23 -0
- package/dist/config.js.map +1 -1
- package/dist/daemon/health-check.d.ts +16 -0
- package/dist/daemon/health-check.d.ts.map +1 -0
- package/dist/daemon/health-check.js +36 -0
- package/dist/daemon/health-check.js.map +1 -0
- package/dist/daemon/http-server.d.ts +26 -0
- package/dist/daemon/http-server.d.ts.map +1 -0
- package/dist/daemon/http-server.js +282 -0
- package/dist/daemon/http-server.js.map +1 -0
- package/dist/daemon/proxy.d.ts +10 -0
- package/dist/daemon/proxy.d.ts.map +1 -0
- package/dist/daemon/proxy.js +99 -0
- package/dist/daemon/proxy.js.map +1 -0
- package/dist/embedding/embed.d.ts +19 -0
- package/dist/embedding/embed.d.ts.map +1 -0
- package/dist/embedding/embed.js +131 -0
- package/dist/embedding/embed.js.map +1 -0
- package/dist/embedding/key-terms.d.ts +12 -0
- package/dist/embedding/key-terms.d.ts.map +1 -0
- package/dist/embedding/key-terms.js +138 -0
- package/dist/embedding/key-terms.js.map +1 -0
- package/dist/embedding/subprocess.d.ts +31 -0
- package/dist/embedding/subprocess.d.ts.map +1 -0
- package/dist/embedding/subprocess.js +213 -0
- package/dist/embedding/subprocess.js.map +1 -0
- package/dist/embedding/vector-index.d.ts +26 -0
- package/dist/embedding/vector-index.d.ts.map +1 -0
- package/dist/embedding/vector-index.js +78 -0
- package/dist/embedding/vector-index.js.map +1 -0
- package/dist/fetch/action-executor.d.ts +28 -0
- package/dist/fetch/action-executor.d.ts.map +1 -0
- package/dist/fetch/action-executor.js +86 -0
- package/dist/fetch/action-executor.js.map +1 -0
- package/dist/fetch/auth.d.ts +2 -1
- package/dist/fetch/auth.d.ts.map +1 -1
- package/dist/fetch/auth.js +30 -2
- package/dist/fetch/auth.js.map +1 -1
- package/dist/fetch/browser-pool.d.ts +30 -11
- package/dist/fetch/browser-pool.d.ts.map +1 -1
- package/dist/fetch/browser-pool.js +228 -51
- package/dist/fetch/browser-pool.js.map +1 -1
- package/dist/fetch/browser-selector.d.ts +17 -0
- package/dist/fetch/browser-selector.d.ts.map +1 -0
- package/dist/fetch/browser-selector.js +70 -0
- package/dist/fetch/browser-selector.js.map +1 -0
- package/dist/fetch/browser-types.d.ts +3 -0
- package/dist/fetch/browser-types.d.ts.map +1 -0
- package/dist/fetch/browser-types.js +45 -0
- package/dist/fetch/browser-types.js.map +1 -0
- package/dist/fetch/cdp-client.d.ts +9 -0
- package/dist/fetch/cdp-client.d.ts.map +1 -0
- package/dist/fetch/cdp-client.js +90 -0
- package/dist/fetch/cdp-client.js.map +1 -0
- package/dist/fetch/lightpanda.d.ts +28 -0
- package/dist/fetch/lightpanda.d.ts.map +1 -0
- package/dist/fetch/lightpanda.js +177 -0
- package/dist/fetch/lightpanda.js.map +1 -0
- package/dist/fetch/router.d.ts +4 -1
- package/dist/fetch/router.d.ts.map +1 -1
- package/dist/fetch/router.js +8 -2
- package/dist/fetch/router.js.map +1 -1
- package/dist/index.js +32 -3
- package/dist/index.js.map +1 -1
- package/dist/instructions.d.ts +29 -0
- package/dist/instructions.d.ts.map +1 -0
- package/dist/instructions.js +176 -0
- package/dist/instructions.js.map +1 -0
- package/dist/logger.d.ts +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/plugins/loader.d.ts +20 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +162 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/registry.d.ts +26 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/registry.js +68 -0
- package/dist/plugins/registry.js.map +1 -0
- package/dist/plugins/validate.d.ts +9 -0
- package/dist/plugins/validate.d.ts.map +1 -0
- package/dist/plugins/validate.js +70 -0
- package/dist/plugins/validate.js.map +1 -0
- package/dist/repl/commands/agent.d.ts +5 -0
- package/dist/repl/commands/agent.d.ts.map +1 -0
- package/dist/repl/commands/agent.js +48 -0
- package/dist/repl/commands/agent.js.map +1 -0
- package/dist/repl/commands/cache.d.ts +4 -0
- package/dist/repl/commands/cache.d.ts.map +1 -0
- package/dist/repl/commands/cache.js +44 -0
- package/dist/repl/commands/cache.js.map +1 -0
- package/dist/repl/commands/crawl.d.ts +7 -0
- package/dist/repl/commands/crawl.d.ts.map +1 -0
- package/dist/repl/commands/crawl.js +42 -0
- package/dist/repl/commands/crawl.js.map +1 -0
- package/dist/repl/commands/extract.d.ts +5 -0
- package/dist/repl/commands/extract.d.ts.map +1 -0
- package/dist/repl/commands/extract.js +37 -0
- package/dist/repl/commands/extract.js.map +1 -0
- package/dist/repl/commands/fetch.d.ts +5 -0
- package/dist/repl/commands/fetch.d.ts.map +1 -0
- package/dist/repl/commands/fetch.js +53 -0
- package/dist/repl/commands/fetch.js.map +1 -0
- package/dist/repl/commands/find-similar.d.ts +5 -0
- package/dist/repl/commands/find-similar.d.ts.map +1 -0
- package/dist/repl/commands/find-similar.js +61 -0
- package/dist/repl/commands/find-similar.js.map +1 -0
- package/dist/repl/commands/research.d.ts +5 -0
- package/dist/repl/commands/research.d.ts.map +1 -0
- package/dist/repl/commands/research.js +50 -0
- package/dist/repl/commands/research.js.map +1 -0
- package/dist/repl/commands/search.d.ts +5 -0
- package/dist/repl/commands/search.d.ts.map +1 -0
- package/dist/repl/commands/search.js +62 -0
- package/dist/repl/commands/search.js.map +1 -0
- package/dist/repl/commands/types.d.ts +9 -0
- package/dist/repl/commands/types.d.ts.map +1 -0
- package/dist/repl/commands/types.js +2 -0
- package/dist/repl/commands/types.js.map +1 -0
- package/dist/repl/formatters.d.ts +13 -0
- package/dist/repl/formatters.d.ts.map +1 -0
- package/dist/repl/formatters.js +282 -0
- package/dist/repl/formatters.js.map +1 -0
- package/dist/repl/parser.d.ts +9 -0
- package/dist/repl/parser.d.ts.map +1 -0
- package/dist/repl/parser.js +84 -0
- package/dist/repl/parser.js.map +1 -0
- package/dist/repl/shell.d.ts +8 -0
- package/dist/repl/shell.d.ts.map +1 -0
- package/dist/repl/shell.js +177 -0
- package/dist/repl/shell.js.map +1 -0
- package/dist/research/decompose.d.ts +7 -0
- package/dist/research/decompose.d.ts.map +1 -0
- package/dist/research/decompose.js +195 -0
- package/dist/research/decompose.js.map +1 -0
- package/dist/research/pipeline.d.ts +5 -0
- package/dist/research/pipeline.d.ts.map +1 -0
- package/dist/research/pipeline.js +135 -0
- package/dist/research/pipeline.js.map +1 -0
- package/dist/research/synthesize.d.ts +10 -0
- package/dist/research/synthesize.d.ts.map +1 -0
- package/dist/research/synthesize.js +119 -0
- package/dist/research/synthesize.js.map +1 -0
- package/dist/search/answer-synthesis.d.ts +13 -0
- package/dist/search/answer-synthesis.d.ts.map +1 -0
- package/dist/search/answer-synthesis.js +120 -0
- package/dist/search/answer-synthesis.js.map +1 -0
- package/dist/search/context-formatter.d.ts +3 -0
- package/dist/search/context-formatter.d.ts.map +1 -0
- package/dist/search/context-formatter.js +56 -0
- package/dist/search/context-formatter.js.map +1 -0
- package/dist/search/find-similar.d.ts +5 -0
- package/dist/search/find-similar.d.ts.map +1 -0
- package/dist/search/find-similar.js +329 -0
- package/dist/search/find-similar.js.map +1 -0
- package/dist/search/multi-query.d.ts +22 -0
- package/dist/search/multi-query.d.ts.map +1 -0
- package/dist/search/multi-query.js +157 -0
- package/dist/search/multi-query.js.map +1 -0
- package/dist/search/rrf.d.ts +17 -0
- package/dist/search/rrf.d.ts.map +1 -0
- package/dist/search/rrf.js +48 -0
- package/dist/search/rrf.js.map +1 -0
- package/dist/search/sampling.d.ts +25 -0
- package/dist/search/sampling.d.ts.map +1 -0
- package/dist/search/sampling.js +52 -0
- package/dist/search/sampling.js.map +1 -0
- package/dist/server.d.ts +17 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +366 -105
- package/dist/server.js.map +1 -1
- package/dist/tools/agent.d.ts +5 -0
- package/dist/tools/agent.d.ts.map +1 -0
- package/dist/tools/agent.js +67 -0
- package/dist/tools/agent.js.map +1 -0
- package/dist/tools/cache.d.ts +2 -1
- package/dist/tools/cache.d.ts.map +1 -1
- package/dist/tools/cache.js +56 -1
- package/dist/tools/cache.js.map +1 -1
- package/dist/tools/fetch.d.ts.map +1 -1
- package/dist/tools/fetch.js +26 -1
- package/dist/tools/fetch.js.map +1 -1
- package/dist/tools/find-similar.d.ts +5 -0
- package/dist/tools/find-similar.d.ts.map +1 -0
- package/dist/tools/find-similar.js +48 -0
- package/dist/tools/find-similar.js.map +1 -0
- package/dist/tools/research.d.ts +5 -0
- package/dist/tools/research.d.ts.map +1 -0
- package/dist/tools/research.js +50 -0
- package/dist/tools/research.js.map +1 -0
- package/dist/tools/search.d.ts +2 -1
- package/dist/tools/search.d.ts.map +1 -1
- package/dist/tools/search.js +179 -13
- package/dist/tools/search.js.map +1 -1
- package/dist/types.d.ts +147 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +43 -4
package/dist/cli/auth.js
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { getConfig } from '../config.js';
|
|
2
|
+
import { createLogger } from '../logger.js';
|
|
3
|
+
import { listSessions } from '../fetch/auth.js';
|
|
4
|
+
const log = createLogger('cli');
|
|
5
|
+
function write(text) {
|
|
6
|
+
process.stderr.write(text + '\n');
|
|
7
|
+
}
|
|
8
|
+
async function discoverCommand() {
|
|
9
|
+
const config = getConfig();
|
|
10
|
+
if (!config.cdpUrl) {
|
|
11
|
+
write('Error: WIGOLO_CDP_URL is not configured.');
|
|
12
|
+
write('Set it to your Chrome debugging endpoint, e.g.:');
|
|
13
|
+
write(' export WIGOLO_CDP_URL=http://localhost:9222');
|
|
14
|
+
write('');
|
|
15
|
+
write('Launch Chrome with debugging enabled:');
|
|
16
|
+
write(' google-chrome --remote-debugging-port=9222');
|
|
17
|
+
return 1;
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
const sessions = await listSessions();
|
|
21
|
+
if (sessions.length === 0) {
|
|
22
|
+
write('No active CDP sessions found.');
|
|
23
|
+
write(`Endpoint: ${config.cdpUrl}`);
|
|
24
|
+
write('');
|
|
25
|
+
write('Make sure Chrome is running with --remote-debugging-port=9222');
|
|
26
|
+
return 0;
|
|
27
|
+
}
|
|
28
|
+
write(`Found ${sessions.length} active session(s) at ${config.cdpUrl}:\n`);
|
|
29
|
+
for (const session of sessions) {
|
|
30
|
+
write(` ID: ${session.id}`);
|
|
31
|
+
write(` Title: ${session.title || '(untitled)'}`);
|
|
32
|
+
write(` URL: ${session.url}`);
|
|
33
|
+
write(` WS: ${session.webSocketDebuggerUrl}`);
|
|
34
|
+
if (session.type) {
|
|
35
|
+
write(` Type: ${session.type}`);
|
|
36
|
+
}
|
|
37
|
+
write('');
|
|
38
|
+
}
|
|
39
|
+
return 0;
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
43
|
+
write(`Error discovering CDP sessions: ${message}`);
|
|
44
|
+
log.error('auth discover failed', { error: message });
|
|
45
|
+
return 1;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
async function statusCommand() {
|
|
49
|
+
const config = getConfig();
|
|
50
|
+
write('Auth Configuration Status:\n');
|
|
51
|
+
if (config.authStatePath) {
|
|
52
|
+
write(` Storage State: ${config.authStatePath}`);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
write(' Storage State: not configured (WIGOLO_AUTH_STATE_PATH)');
|
|
56
|
+
}
|
|
57
|
+
if (config.chromeProfilePath) {
|
|
58
|
+
write(` Chrome Profile: ${config.chromeProfilePath}`);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
write(' Chrome Profile: not configured (WIGOLO_CHROME_PROFILE_PATH)');
|
|
62
|
+
}
|
|
63
|
+
if (config.cdpUrl) {
|
|
64
|
+
write(` CDP URL: ${config.cdpUrl}`);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
write(' CDP URL: not configured (WIGOLO_CDP_URL)');
|
|
68
|
+
}
|
|
69
|
+
write('');
|
|
70
|
+
const hasAny = config.authStatePath || config.chromeProfilePath || config.cdpUrl;
|
|
71
|
+
if (!hasAny) {
|
|
72
|
+
write(' No auth methods configured. Set one of the above env vars.');
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
write(' Fallback order: Storage State > Chrome Profile > CDP');
|
|
76
|
+
}
|
|
77
|
+
return 0;
|
|
78
|
+
}
|
|
79
|
+
export async function runAuth(args) {
|
|
80
|
+
const subcommand = args[0];
|
|
81
|
+
switch (subcommand) {
|
|
82
|
+
case 'discover':
|
|
83
|
+
return discoverCommand();
|
|
84
|
+
case 'status':
|
|
85
|
+
return statusCommand();
|
|
86
|
+
default:
|
|
87
|
+
write('Usage: wigolo auth <subcommand>');
|
|
88
|
+
write('');
|
|
89
|
+
write('Subcommands:');
|
|
90
|
+
write(' discover List active Chrome CDP debugging sessions');
|
|
91
|
+
write(' status Show current auth configuration');
|
|
92
|
+
return 1;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/cli/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/daemon.d.ts
CHANGED
|
@@ -1,2 +1,7 @@
|
|
|
1
|
-
export
|
|
1
|
+
export interface DaemonArgs {
|
|
2
|
+
port: number;
|
|
3
|
+
host: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function parseDaemonArgs(args: string[]): DaemonArgs;
|
|
6
|
+
export declare function runDaemon(args: string[]): void;
|
|
2
7
|
//# sourceMappingURL=daemon.d.ts.map
|
package/dist/cli/daemon.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/cli/daemon.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/cli/daemon.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAmB1D;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAoC9C"}
|
package/dist/cli/daemon.js
CHANGED
|
@@ -1,5 +1,58 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { getConfig } from '../config.js';
|
|
2
|
+
import { DaemonHttpServer } from '../daemon/http-server.js';
|
|
3
|
+
function log(msg) {
|
|
4
|
+
process.stderr.write(`[wigolo serve] ${msg}\n`);
|
|
5
|
+
}
|
|
6
|
+
export function parseDaemonArgs(args) {
|
|
7
|
+
const config = getConfig();
|
|
8
|
+
let port = config.daemonPort;
|
|
9
|
+
let host = config.daemonHost;
|
|
10
|
+
for (let i = 0; i < args.length; i++) {
|
|
11
|
+
if (args[i] === '--port' && i + 1 < args.length) {
|
|
12
|
+
const parsed = parseInt(args[i + 1], 10);
|
|
13
|
+
if (!isNaN(parsed)) {
|
|
14
|
+
port = parsed;
|
|
15
|
+
}
|
|
16
|
+
i++;
|
|
17
|
+
}
|
|
18
|
+
else if (args[i] === '--host' && i + 1 < args.length) {
|
|
19
|
+
host = args[i + 1];
|
|
20
|
+
i++;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return { port, host };
|
|
24
|
+
}
|
|
25
|
+
export function runDaemon(args) {
|
|
26
|
+
const parsed = parseDaemonArgs(args);
|
|
27
|
+
log(`Starting daemon on ${parsed.host}:${parsed.port}...`);
|
|
28
|
+
const daemon = new DaemonHttpServer({
|
|
29
|
+
port: parsed.port,
|
|
30
|
+
host: parsed.host,
|
|
31
|
+
});
|
|
32
|
+
daemon.start()
|
|
33
|
+
.then((url) => {
|
|
34
|
+
log(`Daemon running at ${url}`);
|
|
35
|
+
log(`Health check: curl ${url}/health`);
|
|
36
|
+
log(`MCP endpoint: ${url}/mcp (StreamableHTTP)`);
|
|
37
|
+
log(`SSE endpoint: ${url}/sse`);
|
|
38
|
+
log('');
|
|
39
|
+
log('Press Ctrl+C to stop.');
|
|
40
|
+
})
|
|
41
|
+
.catch((err) => {
|
|
42
|
+
log(`Failed to start daemon: ${err instanceof Error ? err.message : String(err)}`);
|
|
43
|
+
process.exit(1);
|
|
44
|
+
});
|
|
45
|
+
const shutdown = async () => {
|
|
46
|
+
log('Shutting down daemon...');
|
|
47
|
+
try {
|
|
48
|
+
await daemon.stop();
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
log(`Shutdown error: ${err instanceof Error ? err.message : String(err)}`);
|
|
52
|
+
}
|
|
53
|
+
process.exit(0);
|
|
54
|
+
};
|
|
55
|
+
process.on('SIGINT', () => void shutdown());
|
|
56
|
+
process.on('SIGTERM', () => void shutdown());
|
|
4
57
|
}
|
|
5
58
|
//# sourceMappingURL=daemon.js.map
|
package/dist/cli/daemon.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/cli/daemon.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/cli/daemon.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/health.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare function runHealthCheck():
|
|
1
|
+
export declare function runHealthCheck(): Promise<number>;
|
|
2
2
|
//# sourceMappingURL=health.d.ts.map
|
package/dist/cli/health.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/cli/health.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/cli/health.ts"],"names":[],"mappings":"AAMA,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAyCtD"}
|
package/dist/cli/health.js
CHANGED
|
@@ -1,5 +1,43 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
process.stderr.write(
|
|
1
|
+
import { getConfig } from '../config.js';
|
|
2
|
+
function log(msg) {
|
|
3
|
+
process.stderr.write(`[wigolo health] ${msg}\n`);
|
|
4
|
+
}
|
|
5
|
+
export async function runHealthCheck() {
|
|
6
|
+
const config = getConfig();
|
|
7
|
+
const host = config.daemonHost;
|
|
8
|
+
const port = config.daemonPort;
|
|
9
|
+
const url = `http://${host}:${port}/health`;
|
|
10
|
+
try {
|
|
11
|
+
const response = await fetch(url, {
|
|
12
|
+
signal: AbortSignal.timeout(5000),
|
|
13
|
+
});
|
|
14
|
+
if (!response.ok) {
|
|
15
|
+
log(`Daemon returned HTTP ${response.status}`);
|
|
16
|
+
const text = await response.text().catch(() => '');
|
|
17
|
+
if (text)
|
|
18
|
+
log(text);
|
|
19
|
+
return 1;
|
|
20
|
+
}
|
|
21
|
+
const report = await response.json();
|
|
22
|
+
log(`Status: ${report.status}`);
|
|
23
|
+
log(`SearXNG: ${report.searxng}`);
|
|
24
|
+
log(`Browsers: ${report.browsers}`);
|
|
25
|
+
log(`Cache: ${report.cache}`);
|
|
26
|
+
log(`Uptime: ${report.uptime_seconds}s`);
|
|
27
|
+
log('');
|
|
28
|
+
log(JSON.stringify(report, null, 2));
|
|
29
|
+
return report.status === 'healthy' ? 0 : 1;
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
33
|
+
if (message.includes('ECONNREFUSED') || message.includes('fetch failed') || message.includes('timed out')) {
|
|
34
|
+
log(`Daemon is not running at ${host}:${port}`);
|
|
35
|
+
log(`Start it with: npx @staticn0va/wigolo serve`);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
log(`Health check failed: ${message}`);
|
|
39
|
+
}
|
|
40
|
+
return 1;
|
|
41
|
+
}
|
|
4
42
|
}
|
|
5
43
|
//# sourceMappingURL=health.js.map
|
package/dist/cli/health.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/cli/health.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,cAAc;
|
|
1
|
+
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/cli/health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,SAAS,GAAG,CAAC,GAAW;IACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;IAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;IAC/B,MAAM,GAAG,GAAG,UAAU,IAAI,IAAI,IAAI,SAAS,CAAC;IAE5C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;SAClC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,GAAG,CAAC,wBAAwB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YAC/C,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YACnD,IAAI,IAAI;gBAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YACpB,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAErC,GAAG,CAAC,WAAW,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAChC,GAAG,CAAC,YAAY,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAClC,GAAG,CAAC,aAAa,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QACpC,GAAG,CAAC,UAAU,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC9B,GAAG,CAAC,WAAW,MAAM,CAAC,cAAc,GAAG,CAAC,CAAC;QACzC,GAAG,CAAC,EAAE,CAAC,CAAC;QACR,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAErC,OAAO,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAEjE,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAC1G,GAAG,CAAC,4BAA4B,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;YAChD,GAAG,CAAC,6CAA6C,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC"}
|
package/dist/cli/index.d.ts
CHANGED
package/dist/cli/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAErG,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAID,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,aAAa,CAQ1D"}
|
package/dist/cli/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const KNOWN_COMMANDS = new Set(['warmup', 'serve', 'health', 'doctor']);
|
|
1
|
+
const KNOWN_COMMANDS = new Set(['warmup', 'serve', 'health', 'doctor', 'auth', 'plugin', 'shell']);
|
|
2
2
|
export function parseCommand(argv) {
|
|
3
3
|
const first = argv[0];
|
|
4
4
|
if (first && KNOWN_COMMANDS.has(first)) {
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAOA,MAAM,cAAc,GAAwB,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAOA,MAAM,cAAc,GAAwB,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AAExH,MAAM,UAAU,YAAY,CAAC,IAAc;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAEtB,IAAI,KAAK,IAAI,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,EAAE,OAAO,EAAE,KAAgB,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function runPluginAdd(gitUrl: string): void;
|
|
2
|
+
export declare function runPluginList(): void;
|
|
3
|
+
export declare function runPluginRemove(name: string): void;
|
|
4
|
+
export declare function runPluginCommand(args: string[]): void;
|
|
5
|
+
//# sourceMappingURL=plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/cli/plugin.ts"],"names":[],"mappings":"AAgDA,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CA+CjD;AAED,wBAAgB,aAAa,IAAI,IAAI,CAwDpC;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAoBlD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAkCrD"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { execFileSync } from 'node:child_process';
|
|
2
|
+
import { existsSync, readdirSync, readFileSync, mkdirSync, rmSync, statSync } from 'node:fs';
|
|
3
|
+
import { join, basename } from 'node:path';
|
|
4
|
+
import { getConfig } from '../config.js';
|
|
5
|
+
function log(msg) {
|
|
6
|
+
process.stderr.write(`[wigolo plugin] ${msg}\n`);
|
|
7
|
+
}
|
|
8
|
+
function extractRepoName(gitUrl) {
|
|
9
|
+
// Handle SSH-style URLs: git@github.com:user/repo.git
|
|
10
|
+
if (gitUrl.includes(':') && !gitUrl.includes('://')) {
|
|
11
|
+
const parts = gitUrl.split(':');
|
|
12
|
+
const pathPart = parts[parts.length - 1];
|
|
13
|
+
const name = basename(pathPart, '.git');
|
|
14
|
+
if (!name)
|
|
15
|
+
throw new Error('could not extract repo name from URL');
|
|
16
|
+
return name;
|
|
17
|
+
}
|
|
18
|
+
// Handle HTTPS URLs
|
|
19
|
+
try {
|
|
20
|
+
const url = new URL(gitUrl);
|
|
21
|
+
const pathParts = url.pathname.split('/').filter(Boolean);
|
|
22
|
+
if (pathParts.length === 0) {
|
|
23
|
+
throw new Error('could not extract repo name from URL');
|
|
24
|
+
}
|
|
25
|
+
const last = pathParts[pathParts.length - 1];
|
|
26
|
+
return last.endsWith('.git') ? last.slice(0, -4) : last;
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
if (err instanceof TypeError) {
|
|
30
|
+
throw new Error(`invalid git URL: ${gitUrl}`);
|
|
31
|
+
}
|
|
32
|
+
throw err;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function validatePluginName(name) {
|
|
36
|
+
if (!name || name.trim().length === 0) {
|
|
37
|
+
throw new Error('plugin name is required');
|
|
38
|
+
}
|
|
39
|
+
if (name.includes('/') || name.includes('\\') || name.includes('..')) {
|
|
40
|
+
throw new Error(`invalid plugin name: ${name} (must not contain path separators or "..")`);
|
|
41
|
+
}
|
|
42
|
+
if (name.startsWith('/')) {
|
|
43
|
+
throw new Error(`invalid plugin name: ${name} (must not be an absolute path)`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export function runPluginAdd(gitUrl) {
|
|
47
|
+
if (!gitUrl || gitUrl.trim().length === 0) {
|
|
48
|
+
throw new Error('git url is required');
|
|
49
|
+
}
|
|
50
|
+
const config = getConfig();
|
|
51
|
+
const pluginsDir = config.pluginsDir;
|
|
52
|
+
const repoName = extractRepoName(gitUrl);
|
|
53
|
+
const targetDir = join(pluginsDir, repoName);
|
|
54
|
+
if (existsSync(targetDir)) {
|
|
55
|
+
throw new Error(`plugin "${repoName}" already exists at ${targetDir}. ` +
|
|
56
|
+
`Remove it first: wigolo plugin remove ${repoName}`);
|
|
57
|
+
}
|
|
58
|
+
mkdirSync(pluginsDir, { recursive: true });
|
|
59
|
+
log(`cloning ${gitUrl} into ${targetDir}...`);
|
|
60
|
+
try {
|
|
61
|
+
execFileSync('git', ['clone', '--depth', '1', gitUrl, repoName], {
|
|
62
|
+
cwd: pluginsDir,
|
|
63
|
+
stdio: 'pipe',
|
|
64
|
+
timeout: 60000,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
69
|
+
throw new Error(`clone failed: ${message}`);
|
|
70
|
+
}
|
|
71
|
+
log(`plugin "${repoName}" installed successfully`);
|
|
72
|
+
// Check for package.json with main field
|
|
73
|
+
const pkgPath = join(targetDir, 'package.json');
|
|
74
|
+
if (!existsSync(pkgPath)) {
|
|
75
|
+
log('WARNING: plugin has no package.json -- it may not load correctly');
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
try {
|
|
79
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
80
|
+
if (!pkg.main) {
|
|
81
|
+
log('WARNING: package.json has no "main" field -- plugin may not load');
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
log('WARNING: package.json is not valid JSON');
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
export function runPluginList() {
|
|
90
|
+
const config = getConfig();
|
|
91
|
+
const pluginsDir = config.pluginsDir;
|
|
92
|
+
if (!existsSync(pluginsDir)) {
|
|
93
|
+
log('no plugins installed');
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
let entries;
|
|
97
|
+
try {
|
|
98
|
+
entries = readdirSync(pluginsDir);
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
log('no plugins installed (could not read plugins directory)');
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
const plugins = [];
|
|
105
|
+
for (const entry of entries) {
|
|
106
|
+
const dir = join(pluginsDir, entry);
|
|
107
|
+
let stat;
|
|
108
|
+
try {
|
|
109
|
+
stat = statSync(dir);
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
if (!stat.isDirectory() && !stat.isSymbolicLink())
|
|
115
|
+
continue;
|
|
116
|
+
let name = entry;
|
|
117
|
+
let version = 'unknown';
|
|
118
|
+
try {
|
|
119
|
+
const pkg = JSON.parse(readFileSync(join(dir, 'package.json'), 'utf-8'));
|
|
120
|
+
name = pkg.name ?? entry;
|
|
121
|
+
version = pkg.version ?? 'unknown';
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
// package.json missing or malformed -- use directory name
|
|
125
|
+
}
|
|
126
|
+
plugins.push({ name, version, dir });
|
|
127
|
+
}
|
|
128
|
+
if (plugins.length === 0) {
|
|
129
|
+
log('no plugins installed');
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
log(`installed plugins (${plugins.length}):\n`);
|
|
133
|
+
for (const p of plugins) {
|
|
134
|
+
process.stderr.write(` ${p.name} (${p.version})\n`);
|
|
135
|
+
process.stderr.write(` ${p.dir}\n\n`);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
export function runPluginRemove(name) {
|
|
139
|
+
validatePluginName(name);
|
|
140
|
+
const config = getConfig();
|
|
141
|
+
const pluginsDir = config.pluginsDir;
|
|
142
|
+
const targetDir = join(pluginsDir, name);
|
|
143
|
+
if (!existsSync(targetDir)) {
|
|
144
|
+
throw new Error(`plugin "${name}" not found at ${targetDir}`);
|
|
145
|
+
}
|
|
146
|
+
log(`removing plugin "${name}"...`);
|
|
147
|
+
try {
|
|
148
|
+
rmSync(targetDir, { recursive: true, force: true });
|
|
149
|
+
}
|
|
150
|
+
catch (err) {
|
|
151
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
152
|
+
throw new Error(`remove "${name}" failed: ${message}`);
|
|
153
|
+
}
|
|
154
|
+
log(`plugin "${name}" removed successfully`);
|
|
155
|
+
}
|
|
156
|
+
export function runPluginCommand(args) {
|
|
157
|
+
const subcommand = args[0];
|
|
158
|
+
switch (subcommand) {
|
|
159
|
+
case 'add': {
|
|
160
|
+
const gitUrl = args[1];
|
|
161
|
+
if (!gitUrl) {
|
|
162
|
+
process.stderr.write('Usage: wigolo plugin add <git-url>\n');
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
runPluginAdd(gitUrl);
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
case 'list':
|
|
169
|
+
runPluginList();
|
|
170
|
+
break;
|
|
171
|
+
case 'remove': {
|
|
172
|
+
const name = args[1];
|
|
173
|
+
if (!name) {
|
|
174
|
+
process.stderr.write('Usage: wigolo plugin remove <name>\n');
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
runPluginRemove(name);
|
|
178
|
+
break;
|
|
179
|
+
}
|
|
180
|
+
default:
|
|
181
|
+
process.stderr.write('Usage: wigolo plugin <add|list|remove>\n\n' +
|
|
182
|
+
' add <git-url> Clone a plugin repository\n' +
|
|
183
|
+
' list List installed plugins\n' +
|
|
184
|
+
' remove <name> Remove an installed plugin\n');
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/cli/plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/cli/shell.ts"],"names":[],"mappings":"AAoBA,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuE5D"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { join } from 'node:path';
|
|
2
|
+
import { mkdirSync } from 'node:fs';
|
|
3
|
+
import { SmartRouter } from '../fetch/router.js';
|
|
4
|
+
import { BrowserPool } from '../fetch/browser-pool.js';
|
|
5
|
+
import { httpFetch } from '../fetch/http-client.js';
|
|
6
|
+
import { initDatabase, closeDatabase } from '../cache/db.js';
|
|
7
|
+
import { SearxngClient } from '../search/searxng.js';
|
|
8
|
+
import { DuckDuckGoEngine } from '../search/engines/duckduckgo.js';
|
|
9
|
+
import { BingEngine } from '../search/engines/bing.js';
|
|
10
|
+
import { StartpageEngine } from '../search/engines/startpage.js';
|
|
11
|
+
import { resolveSearchBackend, getBootstrapState } from '../searxng/bootstrap.js';
|
|
12
|
+
import { SearxngProcess } from '../searxng/process.js';
|
|
13
|
+
import { BackendStatus } from '../server/backend-status.js';
|
|
14
|
+
import { getConfig } from '../config.js';
|
|
15
|
+
import { createLogger } from '../logger.js';
|
|
16
|
+
import { startShell } from '../repl/shell.js';
|
|
17
|
+
const log = createLogger('cli');
|
|
18
|
+
export async function runShell(args) {
|
|
19
|
+
const config = getConfig();
|
|
20
|
+
const jsonMode = args.includes('--json');
|
|
21
|
+
mkdirSync(config.dataDir, { recursive: true });
|
|
22
|
+
initDatabase(join(config.dataDir, 'wigolo.db'));
|
|
23
|
+
const httpClient = {
|
|
24
|
+
fetch: (url, options) => httpFetch(url, options),
|
|
25
|
+
};
|
|
26
|
+
const browserPool = new BrowserPool();
|
|
27
|
+
const router = new SmartRouter(httpClient, browserPool);
|
|
28
|
+
const backendStatus = new BackendStatus();
|
|
29
|
+
const searchEngines = [
|
|
30
|
+
new BingEngine(),
|
|
31
|
+
new DuckDuckGoEngine(),
|
|
32
|
+
new StartpageEngine(),
|
|
33
|
+
];
|
|
34
|
+
let searxngProcess = null;
|
|
35
|
+
try {
|
|
36
|
+
const backend = await resolveSearchBackend();
|
|
37
|
+
if (backend.type === 'external' && backend.url) {
|
|
38
|
+
searchEngines.unshift(new SearxngClient(backend.url));
|
|
39
|
+
backendStatus.markHealthy();
|
|
40
|
+
log.info('shell using external SearXNG', { url: backend.url });
|
|
41
|
+
}
|
|
42
|
+
else if (backend.type === 'native' && backend.searxngPath) {
|
|
43
|
+
const state = getBootstrapState(config.dataDir);
|
|
44
|
+
if (state?.status === 'ready') {
|
|
45
|
+
searxngProcess = new SearxngProcess(backend.searxngPath, config.dataDir, {
|
|
46
|
+
onUnhealthy: (reason) => {
|
|
47
|
+
backendStatus.markUnhealthy(reason);
|
|
48
|
+
const idx = searchEngines.findIndex(e => e.name === 'searxng');
|
|
49
|
+
if (idx >= 0)
|
|
50
|
+
searchEngines.splice(idx, 1);
|
|
51
|
+
log.warn('SearXNG unhealthy in shell', { reason });
|
|
52
|
+
},
|
|
53
|
+
onHealthy: () => {
|
|
54
|
+
const url = searxngProcess?.getUrl();
|
|
55
|
+
if (!url)
|
|
56
|
+
return;
|
|
57
|
+
backendStatus.markHealthy();
|
|
58
|
+
if (!searchEngines.some(e => e.name === 'searxng')) {
|
|
59
|
+
searchEngines.unshift(new SearxngClient(url));
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
const url = await searxngProcess.start();
|
|
64
|
+
if (url) {
|
|
65
|
+
searchEngines.unshift(new SearxngClient(url));
|
|
66
|
+
backendStatus.markHealthy();
|
|
67
|
+
log.info('SearXNG ready for shell', { url });
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
log.warn('SearXNG setup failed for shell, using direct scraping', { error: String(err) });
|
|
74
|
+
backendStatus.markUnhealthy(`SearXNG setup failed: ${String(err)}`);
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
await startShell({ router, engines: searchEngines, backendStatus }, { jsonMode });
|
|
78
|
+
}
|
|
79
|
+
finally {
|
|
80
|
+
if (searxngProcess)
|
|
81
|
+
await searxngProcess.stop();
|
|
82
|
+
await browserPool.shutdown();
|
|
83
|
+
closeDatabase();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=shell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/cli/shell.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/warmup.d.ts
CHANGED
|
@@ -6,6 +6,14 @@ export interface WarmupResult {
|
|
|
6
6
|
trafilatura?: 'ok' | 'failed' | 'skipped';
|
|
7
7
|
reranker?: 'ok' | 'failed';
|
|
8
8
|
rerankerError?: string;
|
|
9
|
+
firefox?: 'ok' | 'failed';
|
|
10
|
+
firefoxError?: string;
|
|
11
|
+
webkit?: 'ok' | 'failed';
|
|
12
|
+
webkitError?: string;
|
|
13
|
+
embeddings?: 'ok' | 'failed';
|
|
14
|
+
embeddingsError?: string;
|
|
15
|
+
lightpanda?: 'ok' | 'failed';
|
|
16
|
+
lightpandaError?: string;
|
|
9
17
|
}
|
|
10
18
|
export declare function runWarmup(flags?: string[]): Promise<WarmupResult>;
|
|
11
19
|
//# sourceMappingURL=warmup.d.ts.map
|
package/dist/cli/warmup.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"warmup.d.ts","sourceRoot":"","sources":["../../src/cli/warmup.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,IAAI,GAAG,QAAQ,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,OAAO,GAAG,cAAc,GAAG,QAAQ,GAAG,WAAW,CAAC;IAC3D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,IAAI,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,EAAE,IAAI,GAAG,QAAQ,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"warmup.d.ts","sourceRoot":"","sources":["../../src/cli/warmup.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,IAAI,GAAG,QAAQ,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,OAAO,GAAG,cAAc,GAAG,QAAQ,GAAG,WAAW,CAAC;IAC3D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,IAAI,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,EAAE,IAAI,GAAG,QAAQ,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,IAAI,GAAG,QAAQ,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,IAAI,GAAG,QAAQ,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,IAAI,GAAG,QAAQ,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,IAAI,GAAG,QAAQ,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAiKD,wBAAsB,SAAS,CAAC,KAAK,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CA8F3E"}
|