openpalm 0.10.2 → 0.11.0-beta.2
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 +11 -19
- package/package.json +4 -2
- package/src/commands/addon.ts +5 -4
- package/src/commands/automations.ts +63 -0
- package/src/commands/install.ts +98 -280
- package/src/commands/logs.ts +1 -1
- package/src/commands/restart.ts +5 -4
- package/src/commands/rollback.ts +4 -3
- package/src/commands/scan.ts +66 -32
- package/src/commands/service.ts +5 -4
- package/src/commands/start.ts +5 -4
- package/src/commands/status.ts +1 -1
- package/src/commands/stop.ts +2 -4
- package/src/commands/uninstall.ts +3 -5
- package/src/commands/update.ts +19 -2
- package/src/commands/validate.ts +16 -34
- package/src/install-flow.test.ts +153 -154
- package/src/lib/admin-skills/index.test.ts +70 -0
- package/src/lib/admin-skills/index.ts +113 -0
- package/src/lib/browser.ts +20 -0
- package/src/lib/cli-compose.ts +2 -20
- package/src/lib/cli-state.ts +1 -1
- package/src/lib/docker.ts +8 -214
- package/src/lib/env.ts +12 -83
- package/src/lib/io.ts +130 -0
- package/src/lib/opencode-subprocess.ts +14 -6
- package/src/lib/paths.ts +2 -2
- package/src/lib/ui-server.ts +150 -0
- package/src/main.test.ts +76 -173
- package/src/main.ts +131 -7
- package/e2e/start-wizard-server.ts +0 -59
- package/src/commands/admin.ts +0 -43
- package/src/commands/install-services.test.ts +0 -13
- package/src/commands/install-services.ts +0 -9
- package/src/commands/upgrade.ts +0 -12
- package/src/lib/embedded-assets.ts +0 -115
- package/src/lib/varlock.ts +0 -126
- package/src/setup-wizard/index.html +0 -321
- package/src/setup-wizard/server-errors.test.ts +0 -418
- package/src/setup-wizard/server-integration.test.ts +0 -511
- package/src/setup-wizard/server.test.ts +0 -508
- package/src/setup-wizard/server.ts +0 -342
- package/src/setup-wizard/wizard-renderers.js +0 -1294
- package/src/setup-wizard/wizard-state.js +0 -346
- package/src/setup-wizard/wizard-validators.js +0 -81
- package/src/setup-wizard/wizard.css +0 -1611
- package/src/setup-wizard/wizard.js +0 -613
|
@@ -1,321 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
-
<title>OpenPalm Setup Wizard</title>
|
|
7
|
-
<link rel="stylesheet" href="/setup/wizard.css">
|
|
8
|
-
</head>
|
|
9
|
-
<body>
|
|
10
|
-
<main class="setup-page" aria-label="Setup wizard">
|
|
11
|
-
<div class="wizard-card">
|
|
12
|
-
|
|
13
|
-
<!-- ── Header ─────────────────────────────────────────────── -->
|
|
14
|
-
<div class="wizard-header">
|
|
15
|
-
<div class="hdr-logo">OP</div>
|
|
16
|
-
<h1>OpenPalm <span class="hdr-suffix">Setup</span></h1>
|
|
17
|
-
</div>
|
|
18
|
-
|
|
19
|
-
<div class="wizard-body">
|
|
20
|
-
|
|
21
|
-
<!-- ── Progress Bar ────────────────────────────────────── -->
|
|
22
|
-
<nav class="prog-bar" aria-label="Wizard steps" id="step-indicators">
|
|
23
|
-
<div class="prog-segments" id="prog-segments"></div>
|
|
24
|
-
<div class="prog-labels" id="prog-labels"></div>
|
|
25
|
-
</nav>
|
|
26
|
-
|
|
27
|
-
<!-- ═══════════════════════════════════════════════════════════
|
|
28
|
-
Step 0: Welcome & Identity
|
|
29
|
-
═══════════════════════════════════════════════════════════ -->
|
|
30
|
-
<section class="step-content" id="step-0" data-testid="step-welcome">
|
|
31
|
-
<!-- Welcome Hero -->
|
|
32
|
-
<div class="welcome-hero" id="welcome-hero">
|
|
33
|
-
<div class="welcome-icon">👋</div>
|
|
34
|
-
<h2>Welcome to OpenPalm</h2>
|
|
35
|
-
<p class="welcome-subtitle">Your self-hosted AI assistant. Pick your providers, choose models, and you're up and running.</p>
|
|
36
|
-
<div class="welcome-pills">
|
|
37
|
-
<span class="pill">Cloud or local</span>
|
|
38
|
-
<span class="pill">Smart defaults</span>
|
|
39
|
-
<span class="pill">Privacy first</span>
|
|
40
|
-
</div>
|
|
41
|
-
<button class="btn btn-primary-lg" id="btn-get-started">Get Started</button>
|
|
42
|
-
</div>
|
|
43
|
-
|
|
44
|
-
<!-- Identity Form (hidden until Get Started) -->
|
|
45
|
-
<div class="identity-form hidden" id="identity-form">
|
|
46
|
-
<h2>About You</h2>
|
|
47
|
-
<p class="step-description">Set up admin credentials and optional identity details.</p>
|
|
48
|
-
|
|
49
|
-
<div class="field-group">
|
|
50
|
-
<label for="admin-token">Admin Token</label>
|
|
51
|
-
<input id="admin-token" type="text" autocomplete="off" placeholder="Min 8 characters">
|
|
52
|
-
<p class="field-hint">Protects the admin console. A random token has been generated for you.</p>
|
|
53
|
-
</div>
|
|
54
|
-
|
|
55
|
-
<div class="field-group">
|
|
56
|
-
<label for="owner-name">Your Name</label>
|
|
57
|
-
<input id="owner-name" type="text" placeholder="Jane Doe" autocomplete="name" required>
|
|
58
|
-
</div>
|
|
59
|
-
|
|
60
|
-
<div class="field-group">
|
|
61
|
-
<label for="owner-email">Email</label>
|
|
62
|
-
<input id="owner-email" type="email" placeholder="jane@example.com" autocomplete="email" required>
|
|
63
|
-
</div>
|
|
64
|
-
|
|
65
|
-
<div id="step0-error" class="field-error hidden" role="alert"></div>
|
|
66
|
-
|
|
67
|
-
<div class="step-actions">
|
|
68
|
-
<button class="btn btn-primary" id="btn-step0-next">Set Up Providers</button>
|
|
69
|
-
</div>
|
|
70
|
-
</div>
|
|
71
|
-
</section>
|
|
72
|
-
|
|
73
|
-
<!-- ═══════════════════════════════════════════════════════════
|
|
74
|
-
Step 1: Providers (Card Grid)
|
|
75
|
-
═══════════════════════════════════════════════════════════ -->
|
|
76
|
-
<section class="step-content hidden" id="step-1" data-testid="step-capabilities">
|
|
77
|
-
<h2>Where should your models run?</h2>
|
|
78
|
-
<p class="step-description">Select one or more providers. Click a card to configure it.</p>
|
|
79
|
-
|
|
80
|
-
<!-- Loading state for provider detection -->
|
|
81
|
-
<div class="loading-state hidden" id="conn-detecting">
|
|
82
|
-
<span class="spinner"></span> Detecting local providers...
|
|
83
|
-
</div>
|
|
84
|
-
|
|
85
|
-
<!-- Provider card grid -->
|
|
86
|
-
<div class="provider-grid" id="provider-grid"></div>
|
|
87
|
-
|
|
88
|
-
<!-- Provider count info + nav -->
|
|
89
|
-
<div class="step-actions" id="step1-actions">
|
|
90
|
-
<button class="btn btn-secondary" id="btn-step1-back">Back</button>
|
|
91
|
-
<span class="nav-info" id="provider-count-info"></span>
|
|
92
|
-
<button class="btn btn-primary" id="btn-step1-next" disabled>Choose Models</button>
|
|
93
|
-
</div>
|
|
94
|
-
</section>
|
|
95
|
-
|
|
96
|
-
<!-- ═══════════════════════════════════════════════════════════
|
|
97
|
-
Step 2: Model Assignment (Radio Options)
|
|
98
|
-
═══════════════════════════════════════════════════════════ -->
|
|
99
|
-
<section class="step-content hidden" id="step-2" data-testid="step-models">
|
|
100
|
-
<h2>Choose Your Models</h2>
|
|
101
|
-
<p class="step-description">Pre-selected from your providers. Adjust if needed.</p>
|
|
102
|
-
|
|
103
|
-
<!-- Model groups rendered dynamically -->
|
|
104
|
-
<div id="model-groups"></div>
|
|
105
|
-
|
|
106
|
-
<!-- Hidden fields for backward compatibility with API payload -->
|
|
107
|
-
<input type="hidden" id="llm-connection" value="">
|
|
108
|
-
<input type="hidden" id="llm-model" value="">
|
|
109
|
-
<input type="hidden" id="llm-small-model" value="">
|
|
110
|
-
<input type="hidden" id="emb-connection" value="">
|
|
111
|
-
<input type="hidden" id="emb-model" value="">
|
|
112
|
-
<input type="hidden" id="emb-dims" value="1536">
|
|
113
|
-
|
|
114
|
-
<div id="step2-error" class="field-error hidden" role="alert"></div>
|
|
115
|
-
|
|
116
|
-
<div class="step-actions">
|
|
117
|
-
<button class="btn btn-secondary" id="btn-step2-back">Back</button>
|
|
118
|
-
<button class="btn btn-primary" id="btn-step2-next">Voice Setup</button>
|
|
119
|
-
</div>
|
|
120
|
-
</section>
|
|
121
|
-
|
|
122
|
-
<!-- ═══════════════════════════════════════════════════════════
|
|
123
|
-
Step 3: Voice (TTS / STT)
|
|
124
|
-
═══════════════════════════════════════════════════════════ -->
|
|
125
|
-
<section class="step-content hidden" id="step-3" data-testid="step-voice">
|
|
126
|
-
<h2>Voice Capabilities</h2>
|
|
127
|
-
<p class="step-description">Choose how your assistant speaks and listens.</p>
|
|
128
|
-
|
|
129
|
-
<!-- Voice groups rendered dynamically -->
|
|
130
|
-
<div id="voice-groups"></div>
|
|
131
|
-
|
|
132
|
-
<div class="step-actions">
|
|
133
|
-
<button class="btn btn-secondary" id="btn-step3-back">Back</button>
|
|
134
|
-
<button class="btn btn-primary" id="btn-step3-next">Options</button>
|
|
135
|
-
</div>
|
|
136
|
-
</section>
|
|
137
|
-
|
|
138
|
-
<!-- ═══════════════════════════════════════════════════════════
|
|
139
|
-
Step 4: Options (Channels + Services + Memory)
|
|
140
|
-
═══════════════════════════════════════════════════════════ -->
|
|
141
|
-
<section class="step-content hidden" id="step-4" data-testid="step-options">
|
|
142
|
-
<h2>Options</h2>
|
|
143
|
-
<p class="step-description">Choose channels, services, and tweak settings before review.</p>
|
|
144
|
-
|
|
145
|
-
<!-- Channels -->
|
|
146
|
-
<div class="options-section">
|
|
147
|
-
<h3 class="options-section-title">Channels</h3>
|
|
148
|
-
<p class="options-section-desc">How you talk to your assistant. Web Chat is always on.</p>
|
|
149
|
-
<div class="toggle-grid" id="channels-grid"></div>
|
|
150
|
-
</div>
|
|
151
|
-
|
|
152
|
-
<!-- Services -->
|
|
153
|
-
<div class="options-section">
|
|
154
|
-
<h3 class="options-section-title">Services</h3>
|
|
155
|
-
<p class="options-section-desc">Extra capabilities for your stack.</p>
|
|
156
|
-
<div class="toggle-grid" id="services-grid"></div>
|
|
157
|
-
</div>
|
|
158
|
-
|
|
159
|
-
<!-- Ollama in-stack toggle (only shown when relevant) -->
|
|
160
|
-
<div class="addon-row hidden" id="ollama-addon">
|
|
161
|
-
<div class="addon-toggle-row">
|
|
162
|
-
<label class="addon-toggle-label">
|
|
163
|
-
<input type="checkbox" id="ollama-enabled">
|
|
164
|
-
<span class="addon-label-text">Run Ollama inside the stack</span>
|
|
165
|
-
</label>
|
|
166
|
-
<span class="addon-help">Adds an Ollama container to the compose stack so you do not need a separate install.</span>
|
|
167
|
-
</div>
|
|
168
|
-
</div>
|
|
169
|
-
|
|
170
|
-
<!-- Memory Settings -->
|
|
171
|
-
<div class="options-section">
|
|
172
|
-
<h3 class="options-section-title">Memory</h3>
|
|
173
|
-
<p class="options-section-desc">Configure how your assistant remembers context.</p>
|
|
174
|
-
|
|
175
|
-
<div class="field-group">
|
|
176
|
-
<label for="memory-user-id">Memory User ID</label>
|
|
177
|
-
<input id="memory-user-id" type="text" placeholder="default_user">
|
|
178
|
-
<p class="field-hint">Identifies the memory owner. Defaults to your name or "default_user".</p>
|
|
179
|
-
</div>
|
|
180
|
-
|
|
181
|
-
<div class="addon-toggle-row">
|
|
182
|
-
<label class="addon-toggle-label">
|
|
183
|
-
<input type="checkbox" id="reranking-enabled">
|
|
184
|
-
<span class="addon-label-text">Enable memory reranking</span>
|
|
185
|
-
</label>
|
|
186
|
-
<span class="addon-help">Improves memory recall by reranking search results using an LLM. Uses the chat model by default.</span>
|
|
187
|
-
</div>
|
|
188
|
-
|
|
189
|
-
<div class="reranking-options hidden" id="reranking-options">
|
|
190
|
-
<div class="field-group">
|
|
191
|
-
<label for="reranking-mode">Reranking Mode</label>
|
|
192
|
-
<select id="reranking-mode" class="field-select">
|
|
193
|
-
<option value="llm" selected>LLM-based (use chat model)</option>
|
|
194
|
-
<option value="dedicated">Dedicated reranker model</option>
|
|
195
|
-
</select>
|
|
196
|
-
</div>
|
|
197
|
-
<div class="field-group hidden" id="reranking-model-group">
|
|
198
|
-
<label for="reranking-model">Reranking Model</label>
|
|
199
|
-
<input id="reranking-model" type="text" placeholder="e.g. BAAI/bge-reranker-v2-m3">
|
|
200
|
-
<p class="field-hint">Model name for the dedicated reranker.</p>
|
|
201
|
-
</div>
|
|
202
|
-
<div class="field-row">
|
|
203
|
-
<div class="field-group field-group-half">
|
|
204
|
-
<label for="reranking-top-k">Top K (candidates)</label>
|
|
205
|
-
<input id="reranking-top-k" type="number" min="1" max="100" value="20" placeholder="20">
|
|
206
|
-
<p class="field-hint">Number of candidates to rerank.</p>
|
|
207
|
-
</div>
|
|
208
|
-
<div class="field-group field-group-half">
|
|
209
|
-
<label for="reranking-top-n">Top N (results)</label>
|
|
210
|
-
<input id="reranking-top-n" type="number" min="1" max="50" value="5" placeholder="5">
|
|
211
|
-
<p class="field-hint">Final results returned after reranking.</p>
|
|
212
|
-
</div>
|
|
213
|
-
</div>
|
|
214
|
-
</div>
|
|
215
|
-
</div>
|
|
216
|
-
|
|
217
|
-
<div id="step4-error" class="field-error hidden" role="alert"></div>
|
|
218
|
-
|
|
219
|
-
<div class="step-actions">
|
|
220
|
-
<button class="btn btn-secondary" id="btn-step4-back">Back</button>
|
|
221
|
-
<button class="btn btn-primary" id="btn-step4-next">Review</button>
|
|
222
|
-
</div>
|
|
223
|
-
</section>
|
|
224
|
-
|
|
225
|
-
<!-- ═══════════════════════════════════════════════════════════
|
|
226
|
-
Step 5: Review & Install
|
|
227
|
-
═══════════════════════════════════════════════════════════ -->
|
|
228
|
-
<section class="step-content hidden" id="step-5" data-testid="step-review">
|
|
229
|
-
<h2>Review & Install</h2>
|
|
230
|
-
<p class="step-description">Confirm your settings, then install.</p>
|
|
231
|
-
|
|
232
|
-
<div id="review-summary"></div>
|
|
233
|
-
|
|
234
|
-
<div class="review-json-toggle" id="review-json-toggle">
|
|
235
|
-
<button class="btn-json-toggle" id="btn-toggle-json" type="button">Show Setup JSON</button>
|
|
236
|
-
</div>
|
|
237
|
-
<div class="review-json hidden" id="review-json">
|
|
238
|
-
<pre id="review-json-pre"></pre>
|
|
239
|
-
</div>
|
|
240
|
-
|
|
241
|
-
<div id="install-error" class="install-error hidden" role="alert"></div>
|
|
242
|
-
|
|
243
|
-
<div class="step-actions" id="review-actions">
|
|
244
|
-
<button class="btn btn-secondary" id="btn-step5-back">Back</button>
|
|
245
|
-
<button class="btn btn-primary" id="btn-install">Install</button>
|
|
246
|
-
</div>
|
|
247
|
-
</section>
|
|
248
|
-
|
|
249
|
-
<!-- ═══════════════════════════════════════════════════════════
|
|
250
|
-
Deploy Status Screen
|
|
251
|
-
═══════════════════════════════════════════════════════════ -->
|
|
252
|
-
<section class="step-content hidden" id="step-deploy" data-testid="step-deploy">
|
|
253
|
-
<div class="deploy-header">
|
|
254
|
-
<h2 id="deploy-title">Deploying...</h2>
|
|
255
|
-
<p class="step-description" id="deploy-subtitle">Writing configuration and starting services.</p>
|
|
256
|
-
</div>
|
|
257
|
-
|
|
258
|
-
<div class="deploy-progress-summary">
|
|
259
|
-
<div class="deploy-progress-meta">
|
|
260
|
-
<span class="deploy-progress-label" id="deploy-progress-label">Progress</span>
|
|
261
|
-
<span class="deploy-progress-value" id="deploy-progress-value">0%</span>
|
|
262
|
-
</div>
|
|
263
|
-
<div class="deploy-progress-bar">
|
|
264
|
-
<div class="deploy-progress-fill" id="deploy-progress-fill" style="width:0%"></div>
|
|
265
|
-
</div>
|
|
266
|
-
<p class="deploy-progress-note hidden" id="deploy-progress-note"></p>
|
|
267
|
-
</div>
|
|
268
|
-
|
|
269
|
-
<div class="deploy-services" id="deploy-services"></div>
|
|
270
|
-
|
|
271
|
-
<!-- Error card -->
|
|
272
|
-
<div class="deploy-failure-card hidden" id="deploy-failure" role="alert" aria-label="Deployment failure">
|
|
273
|
-
<div class="deploy-failure-header">
|
|
274
|
-
<span class="deploy-failure-kicker">Error</span>
|
|
275
|
-
<h3 id="deploy-failure-title">Deployment failed</h3>
|
|
276
|
-
</div>
|
|
277
|
-
<p class="deploy-failure-summary" id="deploy-failure-summary"></p>
|
|
278
|
-
<details class="deploy-error-details">
|
|
279
|
-
<summary>Technical details</summary>
|
|
280
|
-
<pre id="deploy-error-pre"></pre>
|
|
281
|
-
</details>
|
|
282
|
-
</div>
|
|
283
|
-
|
|
284
|
-
<!-- Tips -->
|
|
285
|
-
<aside class="deploy-tips" id="deploy-tips" aria-label="Startup tips">
|
|
286
|
-
<div class="deploy-tips-header">
|
|
287
|
-
<span class="deploy-tips-kicker">Tips</span>
|
|
288
|
-
<h3>First startup takes a few minutes</h3>
|
|
289
|
-
</div>
|
|
290
|
-
<ul>
|
|
291
|
-
<li>Container images are being downloaded for the first time.</li>
|
|
292
|
-
<li>The admin console will be available once all services are healthy.</li>
|
|
293
|
-
<li>You can close this page; setup will continue in the background.</li>
|
|
294
|
-
</ul>
|
|
295
|
-
</aside>
|
|
296
|
-
|
|
297
|
-
<!-- Done state -->
|
|
298
|
-
<div class="done-state hidden" id="deploy-done">
|
|
299
|
-
<div class="done-icon">
|
|
300
|
-
<svg width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="var(--color-success)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/><polyline points="22 4 12 14.01 9 11.01"/></svg>
|
|
301
|
-
</div>
|
|
302
|
-
<h2>Setup Complete</h2>
|
|
303
|
-
<p class="done-subtitle">Your OpenPalm stack is up and running.</p>
|
|
304
|
-
<ul class="service-list" id="deploy-service-list"></ul>
|
|
305
|
-
<a href="http://localhost:3800" class="btn btn-primary" target="_blank" rel="noopener">Open Console</a>
|
|
306
|
-
</div>
|
|
307
|
-
|
|
308
|
-
<!-- Deploy error actions -->
|
|
309
|
-
<div class="step-actions hidden" id="deploy-error-actions">
|
|
310
|
-
<button class="btn btn-secondary" id="btn-deploy-back">Back to Review</button>
|
|
311
|
-
<button class="btn btn-primary" id="btn-deploy-retry">Retry</button>
|
|
312
|
-
</div>
|
|
313
|
-
</section>
|
|
314
|
-
|
|
315
|
-
</div><!-- .wizard-body -->
|
|
316
|
-
</div><!-- .wizard-card -->
|
|
317
|
-
</main>
|
|
318
|
-
|
|
319
|
-
<script src="/setup/wizard.js"></script>
|
|
320
|
-
</body>
|
|
321
|
-
</html>
|