fix(installer): require provider in quick-start (#1) + local-tier gateway Redis gate (#2)
Some checks failed
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/pr/ci Pipeline failed

Bug #1 — quick-start wizard let users skip the LLM provider/API key yet
reported "Mosaic is ready". provider-setup now requires an interactive
provider select + a validated key; quick-start guards the headless path;
finalize won't print "Mosaic is ready" without a configured provider;
removed references to the non-existent `mosaic configure` command.

Bug #2 — the "local" storage tier still opened ioredis/BullMQ
connections at bootstrap (ECONNREFUSED, gateway never healthy). Every
Redis consumer (queue.service, gc.module, session-gc.service,
commands.module, command-executor.service, system-override.service,
cron.service, admin-health.controller) is now tier-aware and degrades
gracefully on local tier. Standalone/Federated unaffected. Also fixed a
pre-existing SystemOverrideService ioredis handle leak (added shutdown hook).

Refs #675

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RMoEx7hfdFGjUiCHuN1RRi
This commit is contained in:
Jarvis
2026-06-24 16:35:23 -05:00
parent e0e7be70f5
commit d604d31676
14 changed files with 352 additions and 83 deletions

View File

@@ -69,6 +69,8 @@ describe('Unified wizard (runWizard with default skipGateway)', () => {
const prompter = new HeadlessPrompter({
'Installation mode': 'quick',
'Select your LLM provider': 'anthropic',
'Anthropic API key': 'sk-ant-api03-test',
'What name should agents use?': 'TestBot',
'Communication style': 'direct',
'Your name': 'Tester',
@@ -103,6 +105,8 @@ describe('Unified wizard (runWizard with default skipGateway)', () => {
const prompter = new HeadlessPrompter({
'Installation mode': 'quick',
'Select your LLM provider': 'anthropic',
'Anthropic API key': 'sk-ant-api03-test',
'What name should agents use?': 'TestBot',
'Communication style': 'direct',
'Your name': 'Tester',
@@ -125,6 +129,8 @@ describe('Unified wizard (runWizard with default skipGateway)', () => {
it('respects skipGateway: true', async () => {
const prompter = new HeadlessPrompter({
'Installation mode': 'quick',
'Select your LLM provider': 'anthropic',
'Anthropic API key': 'sk-ant-api03-test',
'What name should agents use?': 'TestBot',
'Communication style': 'direct',
'Your name': 'Tester',