reeboot 1.3.2 → 1.3.4
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/container/entrypoint.sh +55 -3
- package/dist/agent-runner/index.d.ts.map +1 -1
- package/dist/agent-runner/index.js +3 -9
- package/dist/agent-runner/index.js.map +1 -1
- package/dist/agent-runner/pi-runner.d.ts +3 -1
- package/dist/agent-runner/pi-runner.d.ts.map +1 -1
- package/dist/agent-runner/pi-runner.js +81 -7
- package/dist/agent-runner/pi-runner.js.map +1 -1
- package/dist/channels/whatsapp.d.ts.map +1 -1
- package/dist/channels/whatsapp.js +10 -1
- package/dist/channels/whatsapp.js.map +1 -1
- package/dist/config.d.ts +7 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -1
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +3 -0
- package/dist/context.js.map +1 -1
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +2 -2
- package/dist/db/schema.js.map +1 -1
- package/dist/extensions/confirm-destructive.d.ts +9 -0
- package/dist/extensions/confirm-destructive.d.ts.map +1 -0
- package/dist/extensions/confirm-destructive.js +43 -0
- package/dist/extensions/confirm-destructive.js.map +1 -0
- package/dist/extensions/custom-compaction.d.ts +17 -0
- package/dist/extensions/custom-compaction.d.ts.map +1 -0
- package/dist/extensions/custom-compaction.js +99 -0
- package/dist/extensions/custom-compaction.js.map +1 -0
- package/dist/extensions/loader.d.ts.map +1 -1
- package/dist/extensions/loader.js +24 -16
- package/dist/extensions/loader.js.map +1 -1
- package/dist/extensions/protected-paths.d.ts +9 -0
- package/dist/extensions/protected-paths.d.ts.map +1 -0
- package/dist/extensions/protected-paths.js +24 -0
- package/dist/extensions/protected-paths.js.map +1 -0
- package/dist/extensions/scheduler-tool.d.ts +31 -0
- package/dist/extensions/scheduler-tool.d.ts.map +1 -0
- package/dist/extensions/scheduler-tool.js +341 -0
- package/dist/extensions/scheduler-tool.js.map +1 -0
- package/dist/extensions/session-name.d.ts +11 -0
- package/dist/extensions/session-name.d.ts.map +1 -0
- package/dist/extensions/session-name.js +25 -0
- package/dist/extensions/session-name.js.map +1 -0
- package/dist/extensions/skill-manager.d.ts +49 -0
- package/dist/extensions/skill-manager.d.ts.map +1 -0
- package/dist/extensions/skill-manager.js +368 -0
- package/dist/extensions/skill-manager.js.map +1 -0
- package/dist/extensions/token-meter.d.ts +11 -0
- package/dist/extensions/token-meter.d.ts.map +1 -0
- package/dist/extensions/token-meter.js +46 -0
- package/dist/extensions/token-meter.js.map +1 -0
- package/dist/extensions/web-search.d.ts +39 -0
- package/dist/extensions/web-search.d.ts.map +1 -0
- package/dist/extensions/web-search.js +366 -0
- package/dist/extensions/web-search.js.map +1 -0
- package/dist/index.js +9 -2
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +3 -3
- package/dist/server.js.map +1 -1
- package/dist/setup-wizard.d.ts +1 -0
- package/dist/setup-wizard.d.ts.map +1 -1
- package/dist/setup-wizard.js +4 -3
- package/dist/setup-wizard.js.map +1 -1
- package/dist/utils/agent-dir.d.ts +11 -0
- package/dist/utils/agent-dir.d.ts.map +1 -0
- package/dist/utils/agent-dir.js +26 -0
- package/dist/utils/agent-dir.js.map +1 -0
- package/dist/wizard/detect-pi-auth.d.ts +19 -0
- package/dist/wizard/detect-pi-auth.d.ts.map +1 -0
- package/dist/wizard/detect-pi-auth.js +36 -0
- package/dist/wizard/detect-pi-auth.js.map +1 -0
- package/dist/wizard/index.d.ts.map +1 -1
- package/dist/wizard/index.js +1 -0
- package/dist/wizard/index.js.map +1 -1
- package/dist/wizard/probe-searxng.d.ts +9 -0
- package/dist/wizard/probe-searxng.d.ts.map +1 -0
- package/dist/wizard/probe-searxng.js +30 -0
- package/dist/wizard/probe-searxng.js.map +1 -0
- package/dist/wizard/steps/channels.js +7 -35
- package/dist/wizard/steps/channels.js.map +1 -1
- package/dist/wizard/steps/launch.d.ts +1 -0
- package/dist/wizard/steps/launch.d.ts.map +1 -1
- package/dist/wizard/steps/launch.js +5 -4
- package/dist/wizard/steps/launch.js.map +1 -1
- package/dist/wizard/steps/provider.d.ts +1 -0
- package/dist/wizard/steps/provider.d.ts.map +1 -1
- package/dist/wizard/steps/provider.js +18 -1
- package/dist/wizard/steps/provider.js.map +1 -1
- package/dist/wizard/steps/web-search.js +33 -10
- package/dist/wizard/steps/web-search.js.map +1 -1
- package/extensions/web-search.ts +2 -3
- package/package.json +4 -2
|
@@ -31,7 +31,7 @@ export async function runWebSearchStep(opts) {
|
|
|
31
31
|
return { provider: 'none', apiKey: '', searxngBaseUrl: '' };
|
|
32
32
|
}
|
|
33
33
|
if (provider === 'searxng') {
|
|
34
|
-
return await runSearXNGSubflow();
|
|
34
|
+
return await runSearXNGSubflow(prompter);
|
|
35
35
|
}
|
|
36
36
|
// API-key providers: Brave, Tavily, Serper, Exa
|
|
37
37
|
const envVar = SEARCH_ENV_VARS[provider] ?? 'API_KEY';
|
|
@@ -43,7 +43,9 @@ export async function runWebSearchStep(opts) {
|
|
|
43
43
|
return { provider, apiKey, searxngBaseUrl: '' };
|
|
44
44
|
}
|
|
45
45
|
// ─── SearXNG sub-flow ─────────────────────────────────────────────────────────
|
|
46
|
-
|
|
46
|
+
const SEARXNG_PORT = 8888;
|
|
47
|
+
const SEARXNG_DEFAULT_URL = `http://localhost:${SEARXNG_PORT}`;
|
|
48
|
+
async function runSearXNGSubflow(prompter) {
|
|
47
49
|
const { checkDockerStatus } = await import('../../utils/docker.js');
|
|
48
50
|
const dockerStatus = await checkDockerStatus();
|
|
49
51
|
if (dockerStatus === 'not-installed') {
|
|
@@ -57,10 +59,35 @@ async function runSearXNGSubflow() {
|
|
|
57
59
|
console.log(' ℹ Using DuckDuckGo as fallback. Run `reeboot search setup searxng` later.\n');
|
|
58
60
|
return { provider: 'duckduckgo', apiKey: '', searxngBaseUrl: '' };
|
|
59
61
|
}
|
|
60
|
-
//
|
|
62
|
+
// Probe for an already-running SearXNG instance
|
|
63
|
+
const { probeSearXNG } = await import('../probe-searxng.js');
|
|
64
|
+
const detected = await probeSearXNG();
|
|
65
|
+
// Ask user to confirm or edit the URL
|
|
66
|
+
const urlMessage = detected
|
|
67
|
+
? ' SearXNG URL (confirm or edit):'
|
|
68
|
+
: ' SearXNG URL:';
|
|
69
|
+
const defaultUrl = detected ?? SEARXNG_DEFAULT_URL;
|
|
70
|
+
const searxngUrl = await prompter.input({
|
|
71
|
+
message: urlMessage,
|
|
72
|
+
default: defaultUrl,
|
|
73
|
+
validate: (val) => val.trim().length > 0 ? true : 'URL cannot be empty',
|
|
74
|
+
});
|
|
75
|
+
// Ask whether to use URL directly or start a new container
|
|
76
|
+
const action = await prompter.select({
|
|
77
|
+
message: ' What would you like to do?',
|
|
78
|
+
choices: [
|
|
79
|
+
{ name: 'Use this URL directly', value: 'use-url' },
|
|
80
|
+
{ name: `Start new reeboot-searxng container on port ${SEARXNG_PORT}`, value: 'start-new' },
|
|
81
|
+
],
|
|
82
|
+
default: 'use-url',
|
|
83
|
+
});
|
|
84
|
+
if (action === 'use-url') {
|
|
85
|
+
console.log(` ✓ Using SearXNG at ${searxngUrl}\n`);
|
|
86
|
+
return { provider: 'searxng', apiKey: '', searxngBaseUrl: searxngUrl };
|
|
87
|
+
}
|
|
88
|
+
// Start new container
|
|
61
89
|
console.log(' Starting reeboot-searxng container...');
|
|
62
90
|
const { spawnSync } = await import('child_process');
|
|
63
|
-
const SEARXNG_PORT = 8888;
|
|
64
91
|
// Remove any existing container
|
|
65
92
|
spawnSync('docker', ['rm', '-f', 'reeboot-searxng'], { stdio: 'pipe' });
|
|
66
93
|
const start = spawnSync('docker', [
|
|
@@ -74,11 +101,7 @@ async function runSearXNGSubflow() {
|
|
|
74
101
|
console.log(' ✗ SearXNG failed to start — using DuckDuckGo instead.\n');
|
|
75
102
|
return { provider: 'duckduckgo', apiKey: '', searxngBaseUrl: '' };
|
|
76
103
|
}
|
|
77
|
-
console.log(` ✓ SearXNG running at
|
|
78
|
-
return {
|
|
79
|
-
provider: 'searxng',
|
|
80
|
-
apiKey: '',
|
|
81
|
-
searxngBaseUrl: `http://localhost:${SEARXNG_PORT}`,
|
|
82
|
-
};
|
|
104
|
+
console.log(` ✓ SearXNG running at ${SEARXNG_DEFAULT_URL}\n`);
|
|
105
|
+
return { provider: 'searxng', apiKey: '', searxngBaseUrl: SEARXNG_DEFAULT_URL };
|
|
83
106
|
}
|
|
84
107
|
//# sourceMappingURL=web-search.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-search.js","sourceRoot":"","sources":["../../../src/wizard/steps/web-search.ts"],"names":[],"mappings":"AAUA,iFAAiF;AAEjF,MAAM,eAAe,GAA2B;IAC9C,KAAK,EAAE,eAAe;IACtB,MAAM,EAAE,gBAAgB;IACxB,MAAM,EAAE,gBAAgB;IACxB,GAAG,EAAE,aAAa;CACnB,CAAA;AAED,iFAAiF;AAEjF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAEtC;IACC,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAA;IAEzB,OAAO,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAA;IAEpF,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QACrC,OAAO,EAAE,+BAA+B;QACxC,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,6CAA6C,EAAE,KAAK,EAAE,YAAY,EAAE;YAC5E,EAAE,IAAI,EAAE,iCAAiC,EAAE,KAAK,EAAE,OAAO,EAAE;YAC3D,EAAE,IAAI,EAAE,2BAA2B,EAAE,KAAK,EAAE,QAAQ,EAAE;YACtD,EAAE,IAAI,EAAE,2BAA2B,EAAE,KAAK,EAAE,QAAQ,EAAE;YACtD,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,EAAE,KAAK,EAAE;YAChD,EAAE,IAAI,EAAE,wCAAwC,EAAE,KAAK,EAAE,SAAS,EAAE;YACpE,EAAE,IAAI,EAAE,2CAA2C,EAAE,KAAK,EAAE,MAAM,EAAE;SACrE;QACD,OAAO,EAAE,YAAY;KACtB,CAAC,CAAA;IAEF,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAA;QAC3E,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAA;IACnE,CAAC;IAED,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,0FAA0F,CAAC,CAAA;QACvG,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAA;IAC7D,CAAC;IAED,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,MAAM,iBAAiB,
|
|
1
|
+
{"version":3,"file":"web-search.js","sourceRoot":"","sources":["../../../src/wizard/steps/web-search.ts"],"names":[],"mappings":"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"}
|
package/extensions/web-search.ts
CHANGED
|
@@ -392,9 +392,8 @@ export async function searchBackend(
|
|
|
392
392
|
|
|
393
393
|
// ─── Extension Default Export ─────────────────────────────────────────────────
|
|
394
394
|
|
|
395
|
-
export default async function webSearchExtension(pi: ExtensionAPI): Promise<void> {
|
|
396
|
-
const
|
|
397
|
-
const searchConfig: SearchConfig = config?.search ?? {};
|
|
395
|
+
export default async function webSearchExtension(pi: ExtensionAPI, reebotConfig?: any): Promise<void> {
|
|
396
|
+
const searchConfig: SearchConfig = reebotConfig?.search ?? {};
|
|
398
397
|
const rawProvider: string = searchConfig.provider ?? 'none';
|
|
399
398
|
|
|
400
399
|
// SearXNG startup health-check — fall back to DDG if unreachable
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "reeboot",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.4",
|
|
4
4
|
"description": "Personal AI agent running locally, reachable via WhatsApp, Signal, or WebChat",
|
|
5
5
|
"author": "Bogdan Nenu",
|
|
6
6
|
"license": "MIT",
|
|
@@ -36,7 +36,9 @@
|
|
|
36
36
|
"build": "tsc",
|
|
37
37
|
"dev": "tsx src/index.ts",
|
|
38
38
|
"test": "vitest",
|
|
39
|
-
"test:ui": "vitest --ui"
|
|
39
|
+
"test:ui": "vitest --ui",
|
|
40
|
+
"test:run": "vitest run",
|
|
41
|
+
"check": "npm run build && npm run test:run"
|
|
40
42
|
},
|
|
41
43
|
"dependencies": {
|
|
42
44
|
"@fastify/static": "^9.0.0",
|