feat(setup): clarify setup flow from user-feedback session

- Container step: duration hint + 3-line rolling output window with
  60s stall detector that offers "keep waiting" vs "ask Claude"
- First chat: reframed as a try-out with sandbox-model explainer
  (wakes on message, sleeps when idle, context persists)
- Timezone: auto-detected non-UTC zones now get an explicit
  confirm from the user instead of silent persist
- Outro: added always-on warning + prominent "check your DM" banner
  when a channel was configured; directive last line
- Discord: always show token-location reminder even when user says
  they have one; new "do you have a server?" branch walks through
  server creation if not
- All select prompts: custom brightSelect renderer keeps inactive
  option labels at full brightness (was dim gray); adds @clack/core
  as a direct dep

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
gavrielc
2026-04-23 10:35:12 +03:00
parent 4f6d62a65e
commit 56ef5b4461
11 changed files with 611 additions and 51 deletions

View File

@@ -30,6 +30,7 @@ import path from 'path';
import * as p from '@clack/prompts';
import k from 'kleur';
import { brightSelect } from '../lib/bright-select.js';
import { confirmThenOpen } from '../lib/browser.js';
import {
isHelpEscape,
@@ -223,7 +224,7 @@ async function askAppType(args: {
}): Promise<'SingleTenant' | 'MultiTenant'> {
while (true) {
const choice = ensureAnswer(
await p.select({
await brightSelect({
message: 'Which account type did you pick?',
options: [
{
@@ -515,7 +516,7 @@ async function finishWithHandoff(
);
const choice = ensureAnswer(
await p.select({
await brightSelect({
message: 'Ready to finish?',
options: [
{
@@ -571,7 +572,7 @@ async function stepGate(args: {
}): Promise<void> {
while (true) {
const choice = ensureAnswer(
await p.select({
await brightSelect({
message: 'How did that go?',
options: [
{ value: 'done', label: "Done — let's continue" },