Skip to content

feat(cli): replace banner rendering with echo-banner#149

Draft
teneplaysofficial wants to merge 4 commits into
mainfrom
echo-banner
Draft

feat(cli): replace banner rendering with echo-banner#149
teneplaysofficial wants to merge 4 commits into
mainfrom
echo-banner

Conversation

@teneplaysofficial

@teneplaysofficial teneplaysofficial commented Mar 28, 2026

Copy link
Copy Markdown
Owner

Summary by CodeRabbit

Improvements

  • CLI banner rendering has been updated with a streamlined library implementation, improving performance and maintainability while maintaining consistent visual display.

@changeset-bot

changeset-bot Bot commented Mar 28, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: c7a7fb0

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
juk-cli Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coderabbitai

coderabbitai Bot commented Mar 28, 2026

Copy link
Copy Markdown

Warning

Rate limit exceeded

@teneplaysofficial has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 14 minutes and 37 seconds before requesting another review.

Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 14 minutes and 37 seconds.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: de4386c4-85e8-45e7-886e-f3e15efe37d1

📥 Commits

Reviewing files that changed from the base of the PR and between 7488ed3 and c7a7fb0.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (1)
  • package.json
📝 Walkthrough

Walkthrough

Replaces the figlet banner rendering library with echo-banner across the workspace. Updates package dependencies in root and juk-cli, removes the local printBanner implementation, modifies CLI startup to use async banner printing, and documents the patch release via changeset.

Changes

Cohort / File(s) Summary
Dependency Configuration
package.json, packages/juk-cli/package.json, pnpm-workspace.yaml
Replaced figlet (^1.11.0) with echo-banner (^0.3.0) in catalog and workspace dependencies; removed @types/figlet typings package from devDependencies.
Implementation Updates
packages/juk-cli/src/index.ts, packages/juk-cli/src/printBanner.ts
Removed the local printBanner module (25 lines). Updated CLI entry point to invoke echo-banner's print function via top-level await with pkg argument, replacing synchronous banner rendering.
Release Documentation
.changeset/common-lands-walk.md
Added changeset entry documenting a patch release for juk-cli noting that banner rendering was replaced by echo-banner.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Possibly related PRs

  • feat: introduce juk-cli CLI #89: Directly related—both PRs involve replacing the figlet-based printBanner implementation with echo-banner in the juk-cli package, including dependency and catalog updates.

Poem

🐰 A banner swap, from figlet's ways,
To echo-banner's brighter days,
Async now, our CLI sings,
With cleaner code on fresher wings!

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately describes the main change: replacing banner rendering functionality with the echo-banner package across the CLI module.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch echo-banner

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@codecov

codecov Bot commented Mar 28, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request replaces the figlet library with echo-banner for CLI banner rendering and updates the project's ESLint configuration. Feedback suggests that disabling reportUnusedDisableDirectives globally may hinder maintainability by allowing stale comments to persist. Furthermore, it is recommended to provide proper TypeScript definitions for the echo-banner package to avoid the need for manual ESLint suppressions when calling its print function.

Comment thread eslint.config.ts Outdated
Comment on lines +16 to +20
{
linterOptions: {
reportUnusedDisableDirectives: false,
},
},

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Disabling reportUnusedDisableDirectives globally can lead to stale eslint-disable comments in the codebase, which harms maintainability. It's better to keep this enabled (the default is usually 'warn') to get feedback on unnecessary disable directives.

If a disable directive is incorrectly reported as unused due to different environments, consider using a more specific configuration or adding a description to the eslint-disable comment itself.

Comment thread packages/juk-cli/src/index.ts Outdated
}

printBanner();
// eslint-disable-next-line @typescript-eslint/no-unsafe-call

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Using eslint-disable-next-line for @typescript-eslint/no-unsafe-call should be a last resort. Since echo-banner appears to be a package within this monorepo, the best solution would be to add proper types to the print function in the echo-banner package itself. This would provide type safety and improve developer experience across the project.

If fixing the types is not immediately possible, it's good practice to add a descriptive comment to the disable directive explaining why it's necessary, for example:

// eslint-disable-next-line @typescript-eslint/no-unsafe-call -- Follow-up task: Add types to echo-banner

This provides context for future developers.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (2)
eslint.config.ts (1)

16-20: Global reportUnusedDisableDirectives: false is overly broad.

This setting disables unused directive warnings across the entire codebase, but it appears to have been added to support a single eslint-disable-next-line in packages/juk-cli/src/index.ts. Consider either:

  1. Removing this setting entirely—the directive in index.ts is actively used and won't trigger an "unused" warning.
  2. If you need to suppress specific directives, scope this to the relevant files only.

The underlying issue is that echo-banner lacks TypeScript type declarations. Addressing that (see index.ts comment) would remove the need for any suppression.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@eslint.config.ts` around lines 16 - 20, Remove the global
linterOptions.reportUnusedDisableDirectives: false from eslint.config.ts and
instead either (a) delete the lone eslint-disable-next-line in
packages/juk-cli/src/index.ts if it's no longer needed, or (b) restrict
suppression to only that file by adding a per-file overrides entry in
eslint.config.ts that sets reportUnusedDisableDirectives for the pattern
matching packages/juk-cli/src/index.ts; additionally add or create TypeScript
type declarations for the echo-banner module (or a local .d.ts with declare
module "echo-banner") so the disable directive becomes unnecessary.
packages/juk-cli/src/index.ts (1)

35-38: ESLint suppression can be removed once types are added.

The @typescript-eslint/no-unsafe-call suppression is a symptom of missing type declarations. Once you add the type declaration file (see previous comment), this suppression should be removed.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/juk-cli/src/index.ts` around lines 35 - 38, Remove the eslint
suppression and add proper TypeScript types so the call to print({ pkg }) is
type-safe: declare or import the correct type for the pkg variable (e.g.,
PackageJson or a custom IPackage interface) and ensure the print function has an
appropriate typed signature (e.g., print(opts: { pkg: IPackage }):
Promise<void>), then remove the line "// eslint-disable-next-line
`@typescript-eslint/no-unsafe-call`" so the linter can validate the call to print
and pkg.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@pnpm-workspace.yaml`:
- Line 6: The workspace lists an unpublished/experimental package "echo-banner"
in pnpm-workspace.yaml which will break dependency resolution; remove or replace
the echo-banner entry (or pin it to a valid published version) and instead add a
stable published alternative or a local workspace reference that actually
exists; ensure pnpm install succeeds after updating pnpm-workspace.yaml and
verify the package is published on npm (or convert to a local package folder and
reference it via its workspace name) before reintroducing echo-banner.

---

Nitpick comments:
In `@eslint.config.ts`:
- Around line 16-20: Remove the global
linterOptions.reportUnusedDisableDirectives: false from eslint.config.ts and
instead either (a) delete the lone eslint-disable-next-line in
packages/juk-cli/src/index.ts if it's no longer needed, or (b) restrict
suppression to only that file by adding a per-file overrides entry in
eslint.config.ts that sets reportUnusedDisableDirectives for the pattern
matching packages/juk-cli/src/index.ts; additionally add or create TypeScript
type declarations for the echo-banner module (or a local .d.ts with declare
module "echo-banner") so the disable directive becomes unnecessary.

In `@packages/juk-cli/src/index.ts`:
- Around line 35-38: Remove the eslint suppression and add proper TypeScript
types so the call to print({ pkg }) is type-safe: declare or import the correct
type for the pkg variable (e.g., PackageJson or a custom IPackage interface) and
ensure the print function has an appropriate typed signature (e.g., print(opts:
{ pkg: IPackage }): Promise<void>), then remove the line "//
eslint-disable-next-line `@typescript-eslint/no-unsafe-call`" so the linter can
validate the call to print and pkg.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 1ada0fc2-f09b-46c4-8174-4d7d4052c2fc

📥 Commits

Reviewing files that changed from the base of the PR and between 8c094d7 and 8f1516f.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (7)
  • .changeset/common-lands-walk.md
  • eslint.config.ts
  • package.json
  • packages/juk-cli/package.json
  • packages/juk-cli/src/index.ts
  • packages/juk-cli/src/printBanner.ts
  • pnpm-workspace.yaml
💤 Files with no reviewable changes (1)
  • packages/juk-cli/src/printBanner.ts

Comment thread pnpm-workspace.yaml
catalog:
archiver: ^7.0.1
figlet: ^1.11.0
echo-banner: ^0.3.0

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🌐 Web query:

echo-banner npm package documentation and stability

💡 Result:

The "echo-banner" npm package is a new utility for creating clean metadata banners in builds and beautiful ASCII titles for CLI applications. Official documentation and source code are available on GitHub at https://github.com/teneplaysofficial/echo-banner. Installation is via npm install echo-banner. No npm registry page was found in searches, suggesting it may not yet be published to npm or is very new (repo published 2026-03-19). The same author (teneplaysofficial/tenedev) has a recent published package @tenedev/react-slideshow (Apr 2025). Stability: Low confidence due to recent creation (9 days ago as of 2026-03-28), no visible releases/tags, no npm stats/downloads/versions, and no dependent packages mentioned. Appears experimental or pre-release. Use with caution for production; suitable for testing CLI banners or build metadata.

Citations:


echo-banner package is not published on npm and too experimental for production use.

This package was created only 9 days ago with no releases or tags on GitHub and does not appear to be available on npm registry. Using an unpublished or unavailable package in a production workspace breaks dependency resolution. Before using this package, verify:

  1. It is published to npm with proper versioning and changelog
  2. Installation succeeds via pnpm install
  3. It is stable enough for production use

Consider using a stable, published alternative instead.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pnpm-workspace.yaml` at line 6, The workspace lists an
unpublished/experimental package "echo-banner" in pnpm-workspace.yaml which will
break dependency resolution; remove or replace the echo-banner entry (or pin it
to a valid published version) and instead add a stable published alternative or
a local workspace reference that actually exists; ensure pnpm install succeeds
after updating pnpm-workspace.yaml and verify the package is published on npm
(or convert to a local package folder and reference it via its workspace name)
before reintroducing echo-banner.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (2)
package.json (1)

50-53: Consider adding type declarations for echo-banner.

The dependency swap looks correct. However, given that @types/figlet was removed from devDependencies and the pipeline is failing with TypeScript errors for the echo-banner module, you may need to add type declarations if echo-banner doesn't ship its own types.

If echo-banner doesn't include TypeScript declarations, you may need to:

  1. Add @types/echo-banner to devDependencies (if available), or
  2. Create a local type declaration file (e.g., echo-banner.d.ts)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@package.json` around lines 50 - 53, TypeScript errors indicate `echo-banner`
lacks type declarations; either add a devDependency `@types/echo-banner` if it
exists (update devDependencies in package.json) or create a local ambient
declaration file (e.g., declare module "echo-banner"; in a new echo-banner.d.ts
included by tsconfig) and commit it so the compiler recognizes the module;
update tsconfig "typeRoots" or include pattern if necessary to ensure the new
.d.ts is picked up.
packages/juk-cli/src/index.ts (1)

35-37: Verify print function API matches echo-banner expectations.

The call print({ pkg }) passes an object with a pkg property. Ensure this matches the expected signature of echo-banner's print function. The static analysis warning "Unsafe call of a type that could not be resolved" also stems from the missing type declarations.

If the types cannot be resolved, consider adding a minimal type declaration:

Create a type declaration file if echo-banner lacks types

Create packages/juk-cli/src/echo-banner.d.ts:

declare module 'echo-banner' {
  interface PrintOptions {
    pkg: {
      name?: string;
      version?: string;
      // Add other properties as needed
    };
  }
  export function print(options: PrintOptions): Promise<void>;
}
What is the API for the npm package echo-banner and does it export a print function?
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/juk-cli/src/index.ts` around lines 35 - 37, The call await print({
pkg }) may not match the actual echo-banner API and is causing unresolved-type
warnings; confirm whether echo-banner exports a print function and its expected
parameter shape, then either adjust the call site (the print invocation in
packages/juk-cli/src/index.ts) to match the real signature or add a minimal
ambient declaration module for 'echo-banner' that declares the exported print
function and its PrintOptions (including a pkg with name/version) so TypeScript
can resolve the type; create the declaration as a new echo-banner.d.ts in the
juk-cli src if the package lacks types and update the call accordingly.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@package.json`:
- Around line 50-53: TypeScript errors indicate `echo-banner` lacks type
declarations; either add a devDependency `@types/echo-banner` if it exists
(update devDependencies in package.json) or create a local ambient declaration
file (e.g., declare module "echo-banner"; in a new echo-banner.d.ts included by
tsconfig) and commit it so the compiler recognizes the module; update tsconfig
"typeRoots" or include pattern if necessary to ensure the new .d.ts is picked
up.

In `@packages/juk-cli/src/index.ts`:
- Around line 35-37: The call await print({ pkg }) may not match the actual
echo-banner API and is causing unresolved-type warnings; confirm whether
echo-banner exports a print function and its expected parameter shape, then
either adjust the call site (the print invocation in
packages/juk-cli/src/index.ts) to match the real signature or add a minimal
ambient declaration module for 'echo-banner' that declares the exported print
function and its PrintOptions (including a pkg with name/version) so TypeScript
can resolve the type; create the declaration as a new echo-banner.d.ts in the
juk-cli src if the package lacks types and update the call accordingly.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 6b73836c-85f9-489e-8baf-71fba8a08d2b

📥 Commits

Reviewing files that changed from the base of the PR and between 8c094d7 and 7488ed3.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (6)
  • .changeset/common-lands-walk.md
  • package.json
  • packages/juk-cli/package.json
  • packages/juk-cli/src/index.ts
  • packages/juk-cli/src/printBanner.ts
  • pnpm-workspace.yaml
💤 Files with no reviewable changes (1)
  • packages/juk-cli/src/printBanner.ts

@teneplaysofficial teneplaysofficial marked this pull request as draft April 2, 2026 08:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant