cli: add PAPERCLIP banner to onboard doctor configure

This commit is contained in:
Dotta
2026-03-03 10:15:25 -06:00
parent 98964b7c01
commit 5c07bdafc5
4 changed files with 29 additions and 0 deletions

View File

@@ -14,6 +14,7 @@ import {
resolveDefaultLogsDir, resolveDefaultLogsDir,
resolvePaperclipInstanceId, resolvePaperclipInstanceId,
} from "../config/home.js"; } from "../config/home.js";
import { printPaperclipCliBanner } from "../utils/banner.js";
type Section = "llm" | "database" | "logging" | "server" | "storage" | "secrets"; type Section = "llm" | "database" | "logging" | "server" | "storage" | "secrets";
@@ -63,6 +64,7 @@ export async function configure(opts: {
config?: string; config?: string;
section?: string; section?: string;
}): Promise<void> { }): Promise<void> {
printPaperclipCliBanner();
p.intro(pc.bgCyan(pc.black(" paperclip configure "))); p.intro(pc.bgCyan(pc.black(" paperclip configure ")));
const configPath = resolveConfigPath(opts.config); const configPath = resolveConfigPath(opts.config);

View File

@@ -14,6 +14,7 @@ import {
storageCheck, storageCheck,
type CheckResult, type CheckResult,
} from "../checks/index.js"; } from "../checks/index.js";
import { printPaperclipCliBanner } from "../utils/banner.js";
const STATUS_ICON = { const STATUS_ICON = {
pass: pc.green("✓"), pass: pc.green("✓"),
@@ -26,6 +27,7 @@ export async function doctor(opts: {
repair?: boolean; repair?: boolean;
yes?: boolean; yes?: boolean;
}): Promise<{ passed: number; warned: number; failed: number }> { }): Promise<{ passed: number; warned: number; failed: number }> {
printPaperclipCliBanner();
p.intro(pc.bgCyan(pc.black(" paperclip doctor "))); p.intro(pc.bgCyan(pc.black(" paperclip doctor ")));
const configPath = resolveConfigPath(opts.config); const configPath = resolveConfigPath(opts.config);

View File

@@ -12,8 +12,10 @@ import { defaultStorageConfig, promptStorage } from "../prompts/storage.js";
import { promptServer } from "../prompts/server.js"; import { promptServer } from "../prompts/server.js";
import { describeLocalInstancePaths, resolvePaperclipInstanceId } from "../config/home.js"; import { describeLocalInstancePaths, resolvePaperclipInstanceId } from "../config/home.js";
import { bootstrapCeoInvite } from "./auth-bootstrap-ceo.js"; import { bootstrapCeoInvite } from "./auth-bootstrap-ceo.js";
import { printPaperclipCliBanner } from "../utils/banner.js";
export async function onboard(opts: { config?: string }): Promise<void> { export async function onboard(opts: { config?: string }): Promise<void> {
printPaperclipCliBanner();
p.intro(pc.bgCyan(pc.black(" paperclipai onboard "))); p.intro(pc.bgCyan(pc.black(" paperclipai onboard ")));
const instance = describeLocalInstancePaths(resolvePaperclipInstanceId()); const instance = describeLocalInstancePaths(resolvePaperclipInstanceId());
p.log.message( p.log.message(

23
cli/src/utils/banner.ts Normal file
View File

@@ -0,0 +1,23 @@
import pc from "picocolors";
const PAPERCLIP_ART = [
" ____ _ ____ _____ ____ ____ _ ___ ____ ",
"| _ \\ / \\ | _ \\| ____| _ \\ / ___| | |_ _| _ \\ ",
"| |_) / _ \\ | |_) | _| | |_) | | | | | || |_) |",
"| __/ ___ \\| __/| |___| _ <| |___| |___ | || __/ ",
"|_| /_/ \\_\\_| |_____|_| \\_\\\\____|_____|___|_| ",
] as const;
const TAGLINE = "Open-source orchestration for zero-human companies";
export function printPaperclipCliBanner(): void {
const lines = [
"",
...PAPERCLIP_ART.map((line) => pc.cyan(line)),
pc.blue(" ------------------------------------------------------"),
pc.bold(pc.white(` ${TAGLINE}`)),
"",
];
console.log(lines.join("\n"));
}