@sulala/agent 0.1.8 → 0.1.10
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 +23 -1
- package/dist/ai/orchestrator.d.ts.map +1 -1
- package/dist/ai/orchestrator.js +187 -188
- package/dist/ai/orchestrator.js.map +1 -1
- package/dist/config.d.ts +2 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +31 -0
- package/dist/config.js.map +1 -1
- package/dist/gateway/server.d.ts.map +1 -1
- package/dist/gateway/server.js +135 -125
- package/dist/gateway/server.js.map +1 -1
- package/package.json +9 -2
package/dist/config.d.ts
CHANGED
|
@@ -2,6 +2,8 @@ import 'dotenv/config';
|
|
|
2
2
|
import type { Config } from './types.js';
|
|
3
3
|
/** Path to ~/.sulala/.env used by onboard; gateway uses this for GET/PUT /api/onboard/env. */
|
|
4
4
|
export declare function getSulalaEnvPath(): string;
|
|
5
|
+
/** Get a key from process.env or ~/.sulala/.env (file wins only if process.env[key] is unset). Use at request time so keys saved via dashboard take effect without restart. */
|
|
6
|
+
export declare function getSulalaEnvKey(key: string): string | undefined;
|
|
5
7
|
/** Path to ~/.sulala/secrets.json for future use (skill secrets, OAuth tokens). Not yet used; config stores secrets for now. */
|
|
6
8
|
export declare function getSulalaSecretsPath(): string;
|
|
7
9
|
/** Default Portal gateway URL (fixed, not user-configurable). */
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAMvB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AA6BzC,8FAA8F;AAC9F,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,gIAAgI;AAChI,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,iEAAiE;AACjE,eAAO,MAAM,0BAA0B,yCAAyC,CAAC;AAEjF,oLAAoL;AACpL,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,IAAI,CAKpD;AAED,wIAAwI;AACxI,wBAAgB,wBAAwB,IAAI,MAAM,GAAG,IAAI,CAExD;AA0BD,MAAM,MAAM,aAAa,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAE9E,wBAAgB,mBAAmB,IAAI,aAAa,EAAE,CAUrD;AAOD,eAAO,MAAM,MAAM,EAAE,MA8DpB,CAAC"}
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAMvB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AA6BzC,8FAA8F;AAC9F,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,+KAA+K;AAC/K,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAsB/D;AAED,gIAAgI;AAChI,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAED,iEAAiE;AACjE,eAAO,MAAM,0BAA0B,yCAAyC,CAAC;AAEjF,oLAAoL;AACpL,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,IAAI,CAKpD;AAED,wIAAwI;AACxI,wBAAgB,wBAAwB,IAAI,MAAM,GAAG,IAAI,CAExD;AA0BD,MAAM,MAAM,aAAa,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAE9E,wBAAgB,mBAAmB,IAAI,aAAa,EAAE,CAUrD;AAOD,eAAO,MAAM,MAAM,EAAE,MA8DpB,CAAC"}
|
package/dist/config.js
CHANGED
|
@@ -39,6 +39,37 @@ const SULALA_ENV_LOAD_KEYS = [
|
|
|
39
39
|
export function getSulalaEnvPath() {
|
|
40
40
|
return join(homedir(), '.sulala', '.env');
|
|
41
41
|
}
|
|
42
|
+
/** Get a key from process.env or ~/.sulala/.env (file wins only if process.env[key] is unset). Use at request time so keys saved via dashboard take effect without restart. */
|
|
43
|
+
export function getSulalaEnvKey(key) {
|
|
44
|
+
const fromProcess = process.env[key];
|
|
45
|
+
if (fromProcess !== undefined && fromProcess !== '')
|
|
46
|
+
return fromProcess;
|
|
47
|
+
const path = getSulalaEnvPath();
|
|
48
|
+
if (!existsSync(path))
|
|
49
|
+
return undefined;
|
|
50
|
+
try {
|
|
51
|
+
const content = readFileSync(path, 'utf8');
|
|
52
|
+
const allow = new Set(SULALA_ENV_LOAD_KEYS);
|
|
53
|
+
if (!allow.has(key))
|
|
54
|
+
return undefined;
|
|
55
|
+
for (const line of content.split('\n')) {
|
|
56
|
+
const trimmed = line.trim();
|
|
57
|
+
if (!trimmed || trimmed.startsWith('#'))
|
|
58
|
+
continue;
|
|
59
|
+
const eq = trimmed.indexOf('=');
|
|
60
|
+
if (eq <= 0)
|
|
61
|
+
continue;
|
|
62
|
+
const k = trimmed.slice(0, eq).trim();
|
|
63
|
+
if (k !== key)
|
|
64
|
+
continue;
|
|
65
|
+
return trimmed.slice(eq + 1).trim().replace(/^["']|["']$/g, '') || undefined;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
// ignore
|
|
70
|
+
}
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
42
73
|
/** Path to ~/.sulala/secrets.json for future use (skill secrets, OAuth tokens). Not yet used; config stores secrets for now. */
|
|
43
74
|
export function getSulalaSecretsPath() {
|
|
44
75
|
return join(homedir(), '.sulala', 'secrets.json');
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/gateway/server.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,KAAK,OAAO,EAA+B,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/gateway/server.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,KAAK,OAAO,EAA+B,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAIpC,OAAO,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,IAAI,CAAC;AA2NrD,wBAAgB,aAAa,CAAC,QAAQ,GAAE,OAAO,GAAG,IAAW,GAAG,OAAO,CA0oDtE;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,EACvC,YAAY,GAAE,CAAC,EAAE,EAAE,SAAS,KAAK,IAAe,GAC/C;IAAE,GAAG,EAAE,eAAe,CAAC;IAAC,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;CAAE,CAa9D;AAED,wBAAgB,YAAY,IAAI;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAA;CAAE,CAmBxF"}
|
package/dist/gateway/server.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import express from 'express';
|
|
2
2
|
import { createServer } from 'http';
|
|
3
3
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
|
|
4
|
-
import { join
|
|
5
|
-
import { fileURLToPath } from 'url';
|
|
4
|
+
import { join } from 'path';
|
|
6
5
|
import { randomBytes } from 'crypto';
|
|
7
6
|
import { WebSocketServer } from 'ws';
|
|
8
7
|
import cors from 'cors';
|
|
@@ -27,10 +26,131 @@ import { withSessionLock } from '../agent/session-queue.js';
|
|
|
27
26
|
import { listPendingActions, getPendingAction, getPendingActionForReplay, setPendingActionApproved, setPendingActionRejected, sanitizeArgsForDisplay, } from '../agent/pending-actions.js';
|
|
28
27
|
import { isOllamaReachable, startOllamaServeForApi, runOllamaInstall, setPullProgressCallback, pullOllamaModel } from '../ollama-setup.js';
|
|
29
28
|
import { getSystemCapabilities } from '../system-capabilities.js';
|
|
30
|
-
|
|
31
|
-
const projectRoot =
|
|
29
|
+
import { getPackageRoot } from '../onboard.js';
|
|
30
|
+
const projectRoot = getPackageRoot();
|
|
32
31
|
const dashboardDist = join(projectRoot, 'dashboard', 'dist');
|
|
33
32
|
const registryDir = join(projectRoot, 'registry');
|
|
33
|
+
/** Legacy minimal onboard HTML (used only when dashboard/dist is missing). */
|
|
34
|
+
function sendLegacyOnboardHtml(res) {
|
|
35
|
+
const keys = ONBOARD_ENV_WHITELIST.map((k) => `<div class="row"><label for="${k}">${k}</label><input type="password" id="${k}" name="${k}" placeholder="optional" autocomplete="off" /></div>`).join('\n');
|
|
36
|
+
const html = `<!DOCTYPE html>
|
|
37
|
+
<html lang="en">
|
|
38
|
+
<head>
|
|
39
|
+
<meta charset="utf-8" />
|
|
40
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
41
|
+
<title>Sulala — API keys</title>
|
|
42
|
+
<style>
|
|
43
|
+
* { box-sizing: border-box; }
|
|
44
|
+
body { font-family: system-ui, sans-serif; max-width: 480px; margin: 2rem auto; padding: 0 1rem; }
|
|
45
|
+
h1 { font-size: 1.25rem; margin-bottom: 0.5rem; }
|
|
46
|
+
h2 { font-size: 1rem; margin: 1.5rem 0 0.5rem; color: #374151; }
|
|
47
|
+
p { color: #666; font-size: 0.875rem; margin-bottom: 1.25rem; }
|
|
48
|
+
.row { margin-bottom: 0.75rem; }
|
|
49
|
+
label { display: block; font-size: 0.75rem; font-weight: 600; margin-bottom: 0.25rem; color: #374151; }
|
|
50
|
+
input { width: 100%; padding: 0.5rem 0.75rem; border: 1px solid #d1d5db; border-radius: 6px; font-size: 0.875rem; }
|
|
51
|
+
input:focus { outline: none; border-color: #3b82f6; box-shadow: 0 0 0 2px rgba(59,130,246,0.2); }
|
|
52
|
+
button { background: #2563eb; color: white; border: none; padding: 0.5rem 1rem; border-radius: 6px; font-size: 0.875rem; cursor: pointer; margin-top: 0.5rem; margin-right: 0.5rem; }
|
|
53
|
+
button:hover { background: #1d4ed8; }
|
|
54
|
+
button.secondary { background: #6b7280; }
|
|
55
|
+
button.secondary:hover { background: #4b5563; }
|
|
56
|
+
.msg { margin-top: 1rem; font-size: 0.875rem; }
|
|
57
|
+
.msg.success { color: #059669; }
|
|
58
|
+
.msg.err { color: #dc2626; }
|
|
59
|
+
.ollama-ok { color: #059669; font-size: 0.875rem; }
|
|
60
|
+
a { color: #2563eb; }
|
|
61
|
+
#ollama-section { margin-bottom: 1rem; padding: 1rem; background: #f9fafb; border-radius: 8px; }
|
|
62
|
+
</style>
|
|
63
|
+
</head>
|
|
64
|
+
<body>
|
|
65
|
+
<div id="ollama-section">
|
|
66
|
+
<h2>Ollama (default AI)</h2>
|
|
67
|
+
<p id="ollama-status">Checking…</p>
|
|
68
|
+
<div id="ollama-actions" style="display: none;">
|
|
69
|
+
<button type="button" id="ollama-install">Install Ollama</button>
|
|
70
|
+
<button type="button" id="ollama-start">Start Ollama</button>
|
|
71
|
+
<button type="button" id="ollama-check" class="secondary">Check again</button>
|
|
72
|
+
<p style="margin-top: 0.75rem; font-size: 0.8rem;">Or install from <a href="https://ollama.com" target="_blank" rel="noopener">ollama.com</a> or run in terminal: <code>ollama serve</code></p>
|
|
73
|
+
</div>
|
|
74
|
+
</div>
|
|
75
|
+
<h1>API keys (optional)</h1>
|
|
76
|
+
<p>Ollama works with no key. Add keys below to use OpenAI, Claude, Gemini, or OpenRouter. Saved to <code>~/.sulala/.env</code>. Restart the agent for changes.</p>
|
|
77
|
+
<form id="f">
|
|
78
|
+
${keys}
|
|
79
|
+
<button type="submit">Save</button>
|
|
80
|
+
</form>
|
|
81
|
+
<div id="msg" class="msg" aria-live="polite"></div>
|
|
82
|
+
<p style="margin-top: 1.5rem;"><a href="/">Dashboard</a> (if available)</p>
|
|
83
|
+
<script>
|
|
84
|
+
const form = document.getElementById('f');
|
|
85
|
+
const msg = document.getElementById('msg');
|
|
86
|
+
const ollamaStatus = document.getElementById('ollama-status');
|
|
87
|
+
const ollamaActions = document.getElementById('ollama-actions');
|
|
88
|
+
async function checkOllama() {
|
|
89
|
+
ollamaStatus.textContent = 'Checking…';
|
|
90
|
+
ollamaActions.style.display = 'none';
|
|
91
|
+
try {
|
|
92
|
+
const r = await fetch('/api/ollama/status');
|
|
93
|
+
const d = await r.json();
|
|
94
|
+
if (d.running) {
|
|
95
|
+
ollamaStatus.textContent = 'Ollama is running. You can use Chat.';
|
|
96
|
+
ollamaStatus.className = 'ollama-ok';
|
|
97
|
+
} else {
|
|
98
|
+
ollamaStatus.textContent = 'Ollama is not running.';
|
|
99
|
+
ollamaStatus.className = '';
|
|
100
|
+
ollamaActions.style.display = 'block';
|
|
101
|
+
}
|
|
102
|
+
} catch (e) {
|
|
103
|
+
ollamaStatus.textContent = 'Could not check Ollama.';
|
|
104
|
+
ollamaActions.style.display = 'block';
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
document.getElementById('ollama-install').onclick = async () => {
|
|
108
|
+
ollamaStatus.textContent = 'Starting install… (see terminal or install from ollama.com)';
|
|
109
|
+
try {
|
|
110
|
+
await fetch('/api/ollama/install', { method: 'POST' });
|
|
111
|
+
ollamaStatus.textContent = 'Install started. After it finishes, run: ollama serve';
|
|
112
|
+
ollamaActions.style.display = 'block';
|
|
113
|
+
} catch (e) { ollamaStatus.textContent = e.message; }
|
|
114
|
+
};
|
|
115
|
+
document.getElementById('ollama-start').onclick = async () => {
|
|
116
|
+
ollamaStatus.textContent = 'Starting Ollama…';
|
|
117
|
+
try {
|
|
118
|
+
const r = await fetch('/api/ollama/start', { method: 'POST' });
|
|
119
|
+
const d = await r.json();
|
|
120
|
+
if (d.started) ollamaStatus.textContent = 'Ollama starting… Check again in a few seconds.';
|
|
121
|
+
else ollamaStatus.textContent = 'Ollama not found. Install it first (button above or ollama.com).';
|
|
122
|
+
ollamaActions.style.display = 'block';
|
|
123
|
+
} catch (e) { ollamaStatus.textContent = e.message; }
|
|
124
|
+
};
|
|
125
|
+
document.getElementById('ollama-check').onclick = checkOllama;
|
|
126
|
+
checkOllama();
|
|
127
|
+
fetch('/api/onboard/env').then(r => r.json()).then(d => {
|
|
128
|
+
for (const [key, status] of Object.entries(d.keys || {})) {
|
|
129
|
+
const el = document.getElementById(key);
|
|
130
|
+
if (el && status === 'set') el.placeholder = '(set)';
|
|
131
|
+
}
|
|
132
|
+
}).catch(() => {});
|
|
133
|
+
form.onsubmit = async (e) => {
|
|
134
|
+
e.preventDefault();
|
|
135
|
+
msg.textContent = '';
|
|
136
|
+
const body = {};
|
|
137
|
+
for (const k of ${JSON.stringify([...ONBOARD_ENV_WHITELIST])}) {
|
|
138
|
+
const v = form.elements[k]?.value?.trim();
|
|
139
|
+
if (v) body[k] = v;
|
|
140
|
+
}
|
|
141
|
+
try {
|
|
142
|
+
const r = await fetch('/api/onboard/env', { method: 'PUT', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body) });
|
|
143
|
+
const data = await r.json();
|
|
144
|
+
if (r.ok) { msg.textContent = 'Saved.'; msg.className = 'msg success'; }
|
|
145
|
+
else { msg.textContent = data.error || r.status; msg.className = 'msg err'; }
|
|
146
|
+
} catch (err) { msg.textContent = err.message; msg.className = 'msg err'; }
|
|
147
|
+
};
|
|
148
|
+
</script>
|
|
149
|
+
</body>
|
|
150
|
+
</html>`;
|
|
151
|
+
res.setHeader('Content-Type', 'text/html; charset=utf-8');
|
|
152
|
+
res.send(html);
|
|
153
|
+
}
|
|
34
154
|
const rateLimitMap = new Map();
|
|
35
155
|
function rateLimitMiddleware(req, res, next) {
|
|
36
156
|
if (!config.rateLimitMax || config.rateLimitMax <= 0)
|
|
@@ -274,127 +394,7 @@ export function createGateway(appMount = null) {
|
|
|
274
394
|
app.get('/api/onboard/recommended-models', (_req, res) => {
|
|
275
395
|
res.json({ models: RECOMMENDED_OLLAMA_MODELS });
|
|
276
396
|
});
|
|
277
|
-
/**
|
|
278
|
-
app.get('/onboard', (_req, res) => {
|
|
279
|
-
const keys = ONBOARD_ENV_WHITELIST.map((k) => `<div class="row"><label for="${k}">${k}</label><input type="password" id="${k}" name="${k}" placeholder="optional" autocomplete="off" /></div>`).join('\n');
|
|
280
|
-
const html = `<!DOCTYPE html>
|
|
281
|
-
<html lang="en">
|
|
282
|
-
<head>
|
|
283
|
-
<meta charset="utf-8" />
|
|
284
|
-
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
285
|
-
<title>Sulala — API keys</title>
|
|
286
|
-
<style>
|
|
287
|
-
* { box-sizing: border-box; }
|
|
288
|
-
body { font-family: system-ui, sans-serif; max-width: 480px; margin: 2rem auto; padding: 0 1rem; }
|
|
289
|
-
h1 { font-size: 1.25rem; margin-bottom: 0.5rem; }
|
|
290
|
-
h2 { font-size: 1rem; margin: 1.5rem 0 0.5rem; color: #374151; }
|
|
291
|
-
p { color: #666; font-size: 0.875rem; margin-bottom: 1.25rem; }
|
|
292
|
-
.row { margin-bottom: 0.75rem; }
|
|
293
|
-
label { display: block; font-size: 0.75rem; font-weight: 600; margin-bottom: 0.25rem; color: #374151; }
|
|
294
|
-
input { width: 100%; padding: 0.5rem 0.75rem; border: 1px solid #d1d5db; border-radius: 6px; font-size: 0.875rem; }
|
|
295
|
-
input:focus { outline: none; border-color: #3b82f6; box-shadow: 0 0 0 2px rgba(59,130,246,0.2); }
|
|
296
|
-
button { background: #2563eb; color: white; border: none; padding: 0.5rem 1rem; border-radius: 6px; font-size: 0.875rem; cursor: pointer; margin-top: 0.5rem; margin-right: 0.5rem; }
|
|
297
|
-
button:hover { background: #1d4ed8; }
|
|
298
|
-
button.secondary { background: #6b7280; }
|
|
299
|
-
button.secondary:hover { background: #4b5563; }
|
|
300
|
-
.msg { margin-top: 1rem; font-size: 0.875rem; }
|
|
301
|
-
.msg.success { color: #059669; }
|
|
302
|
-
.msg.err { color: #dc2626; }
|
|
303
|
-
.ollama-ok { color: #059669; font-size: 0.875rem; }
|
|
304
|
-
a { color: #2563eb; }
|
|
305
|
-
#ollama-section { margin-bottom: 1rem; padding: 1rem; background: #f9fafb; border-radius: 8px; }
|
|
306
|
-
</style>
|
|
307
|
-
</head>
|
|
308
|
-
<body>
|
|
309
|
-
<div id="ollama-section">
|
|
310
|
-
<h2>Ollama (default AI)</h2>
|
|
311
|
-
<p id="ollama-status">Checking…</p>
|
|
312
|
-
<div id="ollama-actions" style="display: none;">
|
|
313
|
-
<button type="button" id="ollama-install">Install Ollama</button>
|
|
314
|
-
<button type="button" id="ollama-start">Start Ollama</button>
|
|
315
|
-
<button type="button" id="ollama-check" class="secondary">Check again</button>
|
|
316
|
-
<p style="margin-top: 0.75rem; font-size: 0.8rem;">Or install from <a href="https://ollama.com" target="_blank" rel="noopener">ollama.com</a> or run in terminal: <code>ollama serve</code></p>
|
|
317
|
-
</div>
|
|
318
|
-
</div>
|
|
319
|
-
<h1>API keys (optional)</h1>
|
|
320
|
-
<p>Ollama works with no key. Add keys below to use OpenAI, Claude, Gemini, or OpenRouter. Saved to <code>~/.sulala/.env</code>. Restart the agent for changes.</p>
|
|
321
|
-
<form id="f">
|
|
322
|
-
${keys}
|
|
323
|
-
<button type="submit">Save</button>
|
|
324
|
-
</form>
|
|
325
|
-
<div id="msg" class="msg" aria-live="polite"></div>
|
|
326
|
-
<p style="margin-top: 1.5rem;"><a href="/">Dashboard</a> (if available)</p>
|
|
327
|
-
<script>
|
|
328
|
-
const form = document.getElementById('f');
|
|
329
|
-
const msg = document.getElementById('msg');
|
|
330
|
-
const ollamaStatus = document.getElementById('ollama-status');
|
|
331
|
-
const ollamaActions = document.getElementById('ollama-actions');
|
|
332
|
-
async function checkOllama() {
|
|
333
|
-
ollamaStatus.textContent = 'Checking…';
|
|
334
|
-
ollamaActions.style.display = 'none';
|
|
335
|
-
try {
|
|
336
|
-
const r = await fetch('/api/ollama/status');
|
|
337
|
-
const d = await r.json();
|
|
338
|
-
if (d.running) {
|
|
339
|
-
ollamaStatus.textContent = 'Ollama is running. You can use Chat.';
|
|
340
|
-
ollamaStatus.className = 'ollama-ok';
|
|
341
|
-
} else {
|
|
342
|
-
ollamaStatus.textContent = 'Ollama is not running.';
|
|
343
|
-
ollamaStatus.className = '';
|
|
344
|
-
ollamaActions.style.display = 'block';
|
|
345
|
-
}
|
|
346
|
-
} catch (e) {
|
|
347
|
-
ollamaStatus.textContent = 'Could not check Ollama.';
|
|
348
|
-
ollamaActions.style.display = 'block';
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
document.getElementById('ollama-install').onclick = async () => {
|
|
352
|
-
ollamaStatus.textContent = 'Starting install… (see terminal or install from ollama.com)';
|
|
353
|
-
try {
|
|
354
|
-
await fetch('/api/ollama/install', { method: 'POST' });
|
|
355
|
-
ollamaStatus.textContent = 'Install started. After it finishes, run: ollama serve';
|
|
356
|
-
ollamaActions.style.display = 'block';
|
|
357
|
-
} catch (e) { ollamaStatus.textContent = e.message; }
|
|
358
|
-
};
|
|
359
|
-
document.getElementById('ollama-start').onclick = async () => {
|
|
360
|
-
ollamaStatus.textContent = 'Starting Ollama…';
|
|
361
|
-
try {
|
|
362
|
-
const r = await fetch('/api/ollama/start', { method: 'POST' });
|
|
363
|
-
const d = await r.json();
|
|
364
|
-
if (d.started) ollamaStatus.textContent = 'Ollama starting… Check again in a few seconds.';
|
|
365
|
-
else ollamaStatus.textContent = 'Ollama not found. Install it first (button above or ollama.com).';
|
|
366
|
-
ollamaActions.style.display = 'block';
|
|
367
|
-
} catch (e) { ollamaStatus.textContent = e.message; }
|
|
368
|
-
};
|
|
369
|
-
document.getElementById('ollama-check').onclick = checkOllama;
|
|
370
|
-
checkOllama();
|
|
371
|
-
fetch('/api/onboard/env').then(r => r.json()).then(d => {
|
|
372
|
-
for (const [key, status] of Object.entries(d.keys || {})) {
|
|
373
|
-
const el = document.getElementById(key);
|
|
374
|
-
if (el && status === 'set') el.placeholder = '(set)';
|
|
375
|
-
}
|
|
376
|
-
}).catch(() => {});
|
|
377
|
-
form.onsubmit = async (e) => {
|
|
378
|
-
e.preventDefault();
|
|
379
|
-
msg.textContent = '';
|
|
380
|
-
const body = {};
|
|
381
|
-
for (const k of ${JSON.stringify([...ONBOARD_ENV_WHITELIST])}) {
|
|
382
|
-
const v = form.elements[k]?.value?.trim();
|
|
383
|
-
if (v) body[k] = v;
|
|
384
|
-
}
|
|
385
|
-
try {
|
|
386
|
-
const r = await fetch('/api/onboard/env', { method: 'PUT', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body) });
|
|
387
|
-
const data = await r.json();
|
|
388
|
-
if (r.ok) { msg.textContent = 'Saved.'; msg.className = 'msg success'; }
|
|
389
|
-
else { msg.textContent = data.error || r.status; msg.className = 'msg err'; }
|
|
390
|
-
} catch (err) { msg.textContent = err.message; msg.className = 'msg err'; }
|
|
391
|
-
};
|
|
392
|
-
</script>
|
|
393
|
-
</body>
|
|
394
|
-
</html>`;
|
|
395
|
-
res.setHeader('Content-Type', 'text/html; charset=utf-8');
|
|
396
|
-
res.send(html);
|
|
397
|
-
});
|
|
397
|
+
/** /onboard is served by the dashboard SPA (new step-by-step OnboardingFlow) when dashboard exists. See fallback below when dashboard is missing. */
|
|
398
398
|
app.get('/api/tasks', (req, res) => {
|
|
399
399
|
try {
|
|
400
400
|
const db = getDb();
|
|
@@ -1867,6 +1867,16 @@ export function createGateway(appMount = null) {
|
|
|
1867
1867
|
res.sendFile(join(dashboardDist, 'index.html'));
|
|
1868
1868
|
});
|
|
1869
1869
|
}
|
|
1870
|
+
else {
|
|
1871
|
+
// Dashboard not built or not present. Serve legacy minimal onboard page at /onboard; redirect / to /onboard.
|
|
1872
|
+
log('gateway', 'warn', 'Dashboard not found at dashboard/dist; serving / as redirect to /onboard', { dashboardDist });
|
|
1873
|
+
app.get('/onboard', (_req, res) => {
|
|
1874
|
+
sendLegacyOnboardHtml(res);
|
|
1875
|
+
});
|
|
1876
|
+
app.get(/^\/(?!api|health|ws|onboard)/, (_req, res) => {
|
|
1877
|
+
res.redirect(302, '/onboard');
|
|
1878
|
+
});
|
|
1879
|
+
}
|
|
1870
1880
|
return app;
|
|
1871
1881
|
}
|
|
1872
1882
|
export function attachWebSocket(server, onConnection = () => { }) {
|