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:
ezl-keygraph
2026-08-27 18:53:56 +05:30
committed by GitHub
parent ed5659e2e2
commit dc2a4fe4e8
10 changed files with 105 additions and 22 deletions
+6 -4
View File
@@ -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)
+2 -2
View File
@@ -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:
+17
View File
@@ -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);
}