mirror of
https://github.com/KeygraphHQ/shannon.git
synced 2026-09-16 06:55:37 +02:00
feat: brand the npm page, CLI output, and reports (#432)
* docs: rebuild the npm package README on the main README's identity * docs: point the README banner fallback at an asset that exists * docs: declare the npm package author, homepage, and issue tracker * docs(cli): retire "Framework" and settle on the canonical product line * docs: describe the banner image in alt text instead of repeating the lockup * feat(cli): print a plain-text banner when stdout is not a terminal * feat(report): attribute the markdown report from a shared brand constant * feat(cli): frame the plain-text banner with rules and split the version line * docs: drop the URL from the npm author field
This commit is contained in:
@@ -26,7 +26,7 @@ import {
|
||||
} from '../paths.js';
|
||||
import { indentFailureSegments } from '../scan/failure.js';
|
||||
import { resolveWorkflowId } from '../session.js';
|
||||
import { displaySplash } from '../splash.js';
|
||||
import { displayPlainBanner, displaySplash } from '../splash.js';
|
||||
import { getTerminalOutcome } from '../temporal-client.js';
|
||||
import { stdoutIsTerminal } from '../tty.js';
|
||||
import { tailUntilComplete } from './logs.js';
|
||||
@@ -81,10 +81,12 @@ export async function start(args: StartArgs): Promise<void> {
|
||||
const repo = resolveRepo(args.repo);
|
||||
const config = args.config ? resolveConfig(args.config) : undefined;
|
||||
|
||||
// Inputs are valid — show the splash before the Docker/Temporal setup work.
|
||||
// Skip it off a real terminal (e.g. CI) so piped/logged output stays clean.
|
||||
// Inputs are valid — identify the run before the Docker/Temporal setup work.
|
||||
const bannerVersion = isLocal() ? undefined : args.version;
|
||||
if (stdoutIsTerminal()) {
|
||||
displaySplash(isLocal() ? undefined : args.version);
|
||||
displaySplash(bannerVersion);
|
||||
} else {
|
||||
displayPlainBanner(bannerVersion);
|
||||
}
|
||||
|
||||
// 4. Ensure workspaces dir is writable by container user (UID 1001)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* Shannon CLI — AI Penetration Testing Framework
|
||||
* Shannon CLI — AI Pentester for Web Apps and APIs
|
||||
*
|
||||
* Unified CLI supporting two modes:
|
||||
* Local mode: Run from cloned repo — builds locally, mounts prompts, uses ./workspaces/
|
||||
@@ -79,7 +79,7 @@ function showHelp(withSplash: boolean): void {
|
||||
const mode = getMode();
|
||||
const prefix = commandPrefix();
|
||||
|
||||
const header = withSplash ? '' : '\nShannon - AI Penetration Testing Framework\n';
|
||||
const header = withSplash ? '' : '\nShannon — AI Pentester by Keygraph\n';
|
||||
|
||||
console.log(`${header}
|
||||
Usage:
|
||||
|
||||
@@ -75,3 +75,20 @@ export function displaySplash(version?: string): void {
|
||||
|
||||
console.log(lines.join('\n'));
|
||||
}
|
||||
|
||||
/** Matches the divider width the CI wrappers and the scan renderer already use. */
|
||||
const RULE_WIDTH = 60;
|
||||
|
||||
/**
|
||||
* Plain-text banner for non-terminal output (CI logs, pipes, redirects).
|
||||
* Drops the wordmark but keeps the authorized-use notice, which a reader of
|
||||
* someone else's pipeline log still needs to see.
|
||||
*/
|
||||
export function displayPlainBanner(version?: string): void {
|
||||
const rule = '─'.repeat(RULE_WIDTH);
|
||||
console.log(rule);
|
||||
console.log(version ? ` Shannon v${version}` : ' Shannon');
|
||||
console.log(' AI Pentester for Web Apps and APIs, by Keygraph');
|
||||
console.log(' Authorized security testing only.');
|
||||
console.log(rule);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user