Skip to content

feat(cli): Add --skill-output and --force options for non-interactive skill generation#1022

Merged
yamadashy merged 6 commits intomainfrom
feat/skill-generate-non-interactive-options
Dec 30, 2025
Merged

feat(cli): Add --skill-output and --force options for non-interactive skill generation#1022
yamadashy merged 6 commits intomainfrom
feat/skill-generate-non-interactive-options

Conversation

@yamadashy
Copy link
Owner

@yamadashy yamadashy commented Dec 23, 2025

Add two new CLI options to enable non-interactive skill generation for CI/CD pipelines and automation scripts (addresses #1012):

  • --skill-output <path>: Specify skill output directory path directly, skipping the interactive location prompt
  • -f, --force: Skip all confirmation prompts (currently: skill directory overwrite)

Usage Examples

# Non-interactive execution for CI/automation
repomix --skill-generate --skill-output .codebuddy --force

# With remote repository
repomix --remote https://github.com/user/repo --skill-generate --skill-output ./skills/repo-ref -f

Changes

  • Added skillOutput and force options to CLI types
  • Added --skill-output and -f, --force CLI options in "Skill Generation" group
  • Added prepareSkillDir() function to handle directory preparation with force overwrite
  • Updated defaultAction.ts and remoteAction.ts to support non-interactive mode
  • Added tests for prepareSkillDir()

Checklist

  • Run npm run test
  • Run npm run lint

… skill generation

Add two new CLI options to enable non-interactive skill generation for CI/CD
pipelines and automation scripts:

- `--skill-output <path>`: Specify skill output directory path directly,
  skipping the interactive location prompt
- `-f, --force`: Force overwrite existing skill directory without confirmation

This addresses #1012 where users needed to generate skills in automated
environments without interactive prompts.

Example usage:
```bash
repomix --skill-generate --skill-output .codebuddy --force
```
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Dec 23, 2025

Important

Review skipped

Auto incremental reviews are disabled on this repository.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Note

Other AI code review bot(s) detected

CodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review.

📝 Walkthrough

Walkthrough

Adds non-interactive skill generation by introducing --skill-output and --force CLI options, plus utilities to resolve, prepare, and classify skill directories; updates default and remote action flows to use these utilities when --skill-output is supplied.

Changes

Cohort / File(s) Summary
CLI options & types
src/cli/cliRun.ts, src/cli/types.ts
Add --skill-output <path> and -f, --force CLI flags; extend CliOptions with skillOutput?: string and force?: boolean.
Default & Remote actions
src/cli/actions/defaultAction.ts, src/cli/actions/remoteAction.ts
Validate that --skill-generate is required when --skill-output/--force are used; when skillOutput provided, bypass interactive prompt by calling resolveAndPrepareSkillDir(...) and set cliOptions.skillDir; adjust copy behavior in remoteAction so copying/skipping respects --skill-output and project vs personal locations.
Skill prompt utilities
src/cli/prompts/skillPrompts.ts
Add prepareSkillDir(skillDir, force, deps) to check/remove existing dirs, resolveAndPrepareSkillDir(skillOutput, cwd, force) to resolve + prepare, and getSkillLocation(skillDir) to classify as personal or project; import RepomixError for error signaling.
Tests
tests/cli/prompts/skillPrompts.test.ts
Add tests for prepareSkillDir (absent dir, exists+force=false error, exists+force=true removal, non-ENOENT rethrow) and for getSkillLocation paths; update imports to include new functions/errors.

Sequence Diagram(s)

sequenceDiagram
    participant User as User (CLI)
    participant Action as defaultAction / remoteAction
    participant Validate as Validation Logic
    participant SkillPrompts as skillPrompts (resolve/prepare/getLocation)
    participant FS as FileSystem

    rect rgb(240,248,255)
    Note over User,FS: Non-interactive flow (--skill-output provided)
    User->>Action: Run with --skill-output [--force]
    Action->>Validate: validateConflictingOptions(...)
    Validate-->>Action: validation result
    Action->>SkillPrompts: resolveAndPrepareSkillDir(skillOutput, cwd, force)
    SkillPrompts->>FS: fs.access/fs.rm checks (via deps)
    alt dir exists
        SkillPrompts->>FS: rm (if force=true)
        FS-->>SkillPrompts: rm result
    else dir exists & force=false
        SkillPrompts-->>Action: throw RepomixError
    else dir absent
        SkillPrompts-->>Action: resolved path (no-op)
    end
    Action->>SkillPrompts: getSkillLocation(resolvedPath)
    SkillPrompts-->>Action: 'personal' or 'project'
    Action->>Action: set cliOptions.skillDir / adjust copy behavior
    end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately describes the main feature added: two new CLI options (--skill-output and --force) for non-interactive skill generation.
Description check ✅ Passed The description covers the feature purpose, usage examples, implementation details, and includes a completed checklist matching the required template sections.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

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.

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @yamadashy, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request enhances the command-line interface by adding two new options, --skill-output and --force, which enable non-interactive skill generation. This is particularly useful for integrating skill generation into automated workflows like CI/CD pipelines, allowing users to specify the output directory directly and automatically overwrite existing directories without manual confirmation.

Highlights

  • Non-Interactive Skill Generation: Introduced --skill-output and --force CLI options to enable automated skill generation without user interaction, addressing the need for CI/CD pipelines.
  • Directory Management Logic: Implemented a new prepareSkillDir utility function to handle the creation and conditional overwriting of skill directories, centralizing this logic.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@codecov
Copy link

codecov bot commented Dec 23, 2025

Codecov Report

❌ Patch coverage is 76.19048% with 15 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.34%. Comparing base (7b3e7fd) to head (6ecce38).
⚠️ Report is 7 commits behind head on main.

Files with missing lines Patch % Lines
src/cli/actions/remoteAction.ts 25.00% 9 Missing ⚠️
src/cli/actions/defaultAction.ts 53.84% 6 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #1022      +/-   ##
==========================================
- Coverage   90.42%   90.34%   -0.08%     
==========================================
  Files         123      123              
  Lines        9430     9457      +27     
  Branches     1699     1709      +10     
==========================================
+ Hits         8527     8544      +17     
- Misses        903      913      +10     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@cloudflare-workers-and-pages
Copy link

cloudflare-workers-and-pages bot commented Dec 23, 2025

Deploying repomix with  Cloudflare Pages  Cloudflare Pages

Latest commit: 6ecce38
Status: ✅  Deploy successful!
Preview URL: https://b4900674.repomix.pages.dev
Branch Preview URL: https://feat-skill-generate-non-inte.repomix.pages.dev

View logs

@claude
Copy link
Contributor

claude bot commented Dec 23, 2025

PR Review: feat(cli): Add --skill-output and --force options for non-interactive skill generation

This PR adds two CLI options (--skill-output and --force) to enable non-interactive skill generation for CI/CD pipelines and automation scripts. Overall, the implementation looks solid and well-structured.

✅ Positives

  • Clean implementation with proper validation of option dependencies
  • Good use of dependency injection pattern for testability
  • Follows existing code patterns in the codebase
  • Test coverage for prepareSkillDir() is comprehensive
📋 Detailed Feedback

Code Quality

1. Consider validating both options together in defaultAction.ts

The current validation checks --skill-output and --force independently:

if (cliOptions.skillOutput && config.skillGenerate === undefined) {
  throw new RepomixError('--skill-output can only be used with --skill-generate');
}
if (cliOptions.force && config.skillGenerate === undefined) {
  throw new RepomixError('--force can only be used with --skill-generate');
}

This is fine, but you could consolidate into a single check for slightly cleaner code:

if ((cliOptions.skillOutput || cliOptions.force) && config.skillGenerate === undefined) {
  throw new RepomixError('--skill-output and --force can only be used with --skill-generate');
}

However, the current approach gives more specific error messages which is arguably better for UX.

2. Minor: Duplicate path resolution logic

The path resolution logic is duplicated in both defaultAction.ts:75-79 and remoteAction.ts:108-111:

skillDir = path.isAbsolute(cliOptions.skillOutput)
  ? cliOptions.skillOutput
  : path.resolve(process.cwd(), cliOptions.skillOutput);

Consider extracting this to a shared utility function in skillPrompts.ts or a new utility file. This would reduce duplication and ensure consistent path handling.

Test Coverage

The new prepareSkillDir function has good test coverage. Consider adding tests for:

  1. Integration with defaultAction.ts validation logic (the --skill-output requires --skill-generate check)
  2. Edge cases for path handling (e.g., paths with spaces, special characters)

Potential Issues

1. --force flag is a generic name

The -f, --force flag could potentially conflict if future CLI options need a force flag (e.g., --force for overwriting output files). Consider a more specific name like --skill-force or --overwrite-skill to avoid future ambiguity.

2. Missing validation in remoteAction.ts

Unlike defaultAction.ts, remoteAction.ts doesn't validate that --skill-output and --force require --skill-generate. While this may work implicitly because the skill generation block is inside if (cliOptions.skillGenerate !== undefined), adding explicit validation would be more robust.

Premortem Analysis

🔮 Potential Failure Scenarios & Mitigations
Scenario Risk Mitigation
Race condition during --force overwrite Low If multiple CI jobs run concurrently targeting the same skill directory, there could be race conditions. The current rm + create approach is not atomic.
Symlink handling Low prepareSkillDir uses fs.access() which follows symlinks. If skillDir is a symlink to an important directory and --force is used, the linked directory contents could be deleted. Consider using fs.lstat() or adding a check for symlinks.
Path traversal Very Low Users could potentially specify paths like --skill-output ../../../important-dir. While this requires user action, documenting that the path is used as-is would help.
Partial cleanup on error Low If prepareSkillDir removes the existing directory but skill generation fails, the user loses their previous skill. Consider a backup/restore strategy for robustness.

Summary

The PR is well-implemented and ready for merge with minor suggestions. The new options will be valuable for CI/CD automation scenarios. Great work! 👍

Copy link
Contributor

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

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 adds useful --skill-output and --force options for non-interactive skill generation, which is a great enhancement for CI/CD and automation workflows. The implementation is generally well-done, including new tests for the directory preparation logic. My review focuses on a couple of potential bugs: one related to incorrect path matching for personal skills, and another concerning error handling that might hide filesystem issues. I've also included some suggestions to refactor the code for better maintainability by leveraging commander.js features and reducing duplication.

Update description to indicate it's a general confirmation skip flag,
not specific to skill generation only.
@claude
Copy link
Contributor

claude bot commented Dec 23, 2025

PR Review: Additional Feedback

I've reviewed this PR after the previous reviews. The implementation is solid and addresses the CI/CD automation use case well. Most major points have been covered, but I want to highlight one potential bug and a few additional observations:

🐛 Potential Bug: skillLocation Detection in remoteAction.ts

Details

At line 117 in remoteAction.ts:

skillLocation = skillDir.startsWith(path.join(os.homedir(), '.claude')) ? 'personal' : 'project';

This detection has a subtle issue: if the user provides a path like ~/.claude-backup/skills or ~/.claudeabc/, it would incorrectly be classified as 'personal' because the path starts with ~/.claude. A more robust check would be:

const personalSkillsBase = path.join(os.homedir(), '.claude', 'skills');
skillLocation = skillDir.startsWith(personalSkillsBase + path.sep) || skillDir === personalSkillsBase
  ? 'personal'
  : 'project';

This is an edge case, but worth considering for robustness.

📊 Test Coverage Observations

Details

The Codecov report shows 60.78% patch coverage (below the 80% target). The main gaps are in defaultAction.ts and remoteAction.ts. Consider adding integration tests that cover:

  1. Validation that --skill-output throws without --skill-generate
  2. The non-interactive path resolution flow
  3. Edge cases with relative vs absolute paths

The prepareSkillDir tests are good, but the integration of these options into the action files lacks coverage.

✅ What Looks Good

  • Clean validation logic with clear error messages
  • Proper dependency injection pattern in prepareSkillDir for testability
  • Good separation of concerns between interactive and non-interactive flows
  • The --force description is accurate and appropriately scoped

Minor Suggestion

The comment in cliRun.ts for --force says "(currently: skill directory overwrite)" which is good for future extensibility documentation. If you add more force-able operations later, this comment serves as a reminder to update documentation.


Overall, this is a well-implemented feature that will be valuable for CI/CD automation. 👍

🤖 Generated with Claude Code

- Fix skillLocation detection using getSkillBaseDir for accurate path matching
- Improve error handling in prepareSkillDir to re-throw non-ENOENT errors
- Extract resolveAndPrepareSkillDir helper to reduce code duplication
- Add getSkillLocation helper for consistent location type detection
- Add tests for new error handling and getSkillLocation function
@claude
Copy link
Contributor

claude bot commented Dec 24, 2025

PR Review: Additional Observations

I've reviewed this PR after previous reviews from CodeRabbit, Gemini, and other Claude reviews. The implementation is well-structured and addresses the CI/CD automation use case effectively. Here are a few new observations not covered in previous reviews:

✅ What's Working Well

  • Clean validation logic with proper error messages
  • Good use of dependency injection in prepareSkillDir for testability
  • Proper separation between interactive and non-interactive flows
  • Test coverage for prepareSkillDir is comprehensive

🔍 New Observations

1. Missing validation in remoteAction.ts

Unlike defaultAction.ts (lines 58-64), remoteAction.ts doesn't validate that --skill-output and --force require --skill-generate. While this works implicitly because the skill generation code is inside if (cliOptions.skillGenerate !== undefined), adding explicit validation would be more consistent:

// In remoteAction.ts, before line 103:
if ((cliOptions.skillOutput || cliOptions.force) && cliOptions.skillGenerate === undefined) {
  throw new RepomixError('--skill-output and --force can only be used with --skill-generate');
}

This provides consistent behavior and error messages regardless of which action path is taken.

2. Error message propagation for RepomixError

In prepareSkillDir (line 116), when re-throwing errors, the RepomixError thrown at line 112 will also be re-thrown because it doesn't have a code property matching 'ENOENT'. This is correct behavior, but worth noting:

// Line 116 - correctly re-throws RepomixError because error.code !== 'ENOENT'
if ((error as NodeJS.ErrnoException)?.code !== 'ENOENT') {
  throw error;
}

The logic works correctly because RepomixError doesn't have a code property, so error.code would be undefined, which isn't 'ENOENT'.

3. Consider adding resolveAndPrepareSkillDir to test coverage

While prepareSkillDir has tests, resolveAndPrepareSkillDir (lines 127-131) doesn't have dedicated tests. It's a simple wrapper, but testing path resolution with relative/absolute paths would improve coverage:

describe('resolveAndPrepareSkillDir', () => {
  test('should resolve relative path from cwd', async () => {
    // Test that relative paths are resolved correctly
  });
  
  test('should use absolute path as-is', async () => {
    // Test that absolute paths are not modified
  });
});

📊 Test Coverage Note

The Codecov report shows 60.78% patch coverage (below the 80% target). The gaps are in the action files (defaultAction.ts and remoteAction.ts). The prepareSkillDir tests are good, but integration tests for the validation logic and path resolution flows would help reach the coverage target.


Overall, this is a solid implementation that will be valuable for CI/CD automation. The suggestions above are minor improvements. 👍

When using --skill-output with a custom path (e.g., `aaa` instead of
`.claude/skills/...`), the skill directory was not being created correctly
for remote repositories.

Two issues were fixed:
1. defaultAction was re-calculating skillDir even when already set by
   remoteAction, causing the path to be resolved relative to tempDir
   instead of cwd
2. copySkillOutputToCurrentDirectory was being called unnecessarily
   for --skill-output paths, looking in .claude/skills/ when the skill
   was written directly to the specified path
@claude
Copy link
Contributor

claude bot commented Dec 24, 2025

PR Review: Additional Follow-up Observations

I've reviewed this PR after the previous reviews (Claude, Gemini, CodeRabbit). The implementation is well-structured and addresses the CI/CD automation use case effectively. Most major points have been covered, but I want to highlight one potential bug that hasn't been addressed:

🐛 Bug: Error Handling Logic in prepareSkillDir Can Mask RepomixError

Details

In src/cli/prompts/skillPrompts.ts:114-118:

} catch (error) {
  // Re-throw if it's not a "file not found" error
  if ((error as NodeJS.ErrnoException)?.code !== 'ENOENT') {
    throw error;
  }
  // Directory doesn't exist - good to go
}

The issue is that when the directory exists and force is false, a RepomixError is thrown at line 112. This error doesn't have an ENOENT code, so it correctly gets re-thrown. However, the logic is inverted - the RepomixError thrown at line 112 won't be caught by the catch block because it's thrown before the try block ends.

Wait - on closer inspection, the RepomixError is thrown inside the try block (line 112), so it will be caught by the catch block. But since RepomixError doesn't have code === 'ENOENT', it gets re-thrown correctly.

Actually, the logic is correct! The error flow is:

  1. deps.access(skillDir) succeeds → directory exists
  2. If !force, throw RepomixError → this exits the try block, goes to catch
  3. In catch, RepomixError doesn't have code === 'ENOENT', so it's re-thrown ✓

Apologies for the false alarm - the error handling is correct upon detailed analysis.

✅ Validation Consistency

Details

I noticed that defaultAction.ts has explicit validation for --force requiring --skill-generate (line 62-64), but remoteAction.ts doesn't have this explicit check. While it works implicitly because the --force usage is inside the if (cliOptions.skillGenerate !== undefined) block, adding explicit validation would provide clearer error messages if a user runs:

repomix --remote <url> --force

Currently this would silently ignore --force. With explicit validation, users would get a helpful error message.

However, this is a minor improvement and not blocking - the current behavior is safe (it just doesn't do anything).

📊 Test Coverage

The Codecov report shows 67.30% patch coverage (below the 80% target). The prepareSkillDir function has excellent test coverage, but the integration points in defaultAction.ts and remoteAction.ts lack coverage. Consider adding tests for:

  • Validation error when --skill-output is used without --skill-generate
  • The non-interactive flow end-to-end

✅ Summary

The PR is well-implemented and ready for merge. The new options will be valuable for CI/CD automation. Previous review feedback has been comprehensive, and the remaining items are minor polish.

@yamadashy
Copy link
Owner Author

@coderabbitai review

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Dec 24, 2025

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@yamadashy
Copy link
Owner Author

/gemini review

Copy link
Contributor

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

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 introduces --skill-output and --force options to enable non-interactive skill generation, which is a valuable feature for CI/CD and automation scripts. The changes are well-implemented across the CLI, actions, and supporting functions, including the addition of relevant tests. My review includes a suggestion to refactor a new function for better readability and points out a potential pre-existing issue in the remote action's skill-copying logic that this PR touches upon.

The copySkillOutputToCurrentDirectory function was never actually used
because skills are written directly to their final destination via the
skillDir absolute path, not to the temp directory.

- Remove copySkillOutputToCurrentDirectory function
- Remove related tests
- Simplify the copy logic in runRemoteAction
- Remove unused skillLocation variable and imports
@claude
Copy link
Contributor

claude bot commented Dec 27, 2025

PR Review: Additional Observations

I've reviewed this PR after the previous reviews. The implementation is solid and well-structured for CI/CD automation use cases. Most points have been well-covered by prior reviewers, so I'll focus on incremental observations.

✅ Strengths

  • Clean implementation with proper validation of option dependencies
  • Good use of dependency injection pattern for testability
  • Follows existing codebase patterns consistently
  • prepareSkillDir() has good test coverage

📌 Minor Observations

1. Unused function: `getSkillLocation` is defined but never used

The getSkillLocation() function in skillPrompts.ts:136-139 is defined and tested but not called anywhere in the PR:

export const getSkillLocation = (skillDir: string): SkillLocation => {
  const personalSkillsBase = getSkillBaseDir('', 'personal');
  return skillDir.startsWith(personalSkillsBase) ? 'personal' : 'project';
};

If this is intentionally added for future use, consider adding a comment to clarify. Otherwise, it could be removed to avoid unused code.

2. Test coverage gap for action files

Per Codecov, patch coverage is 67.92% (below the 80% target):

  • remoteAction.ts: 20.00% patch coverage (8 lines missing)
  • defaultAction.ts: 50.00% patch coverage (5 lines missing)

While prepareSkillDir has excellent test coverage, the integration paths in action files could benefit from additional tests, particularly:

  • Testing validation errors when --skill-output or --force are used without --skill-generate
  • Testing the non-interactive flow end-to-end
3. CLI option grouping

The new options are in the main options list rather than grouped with --skill-generate. Consider using Commander.js option grouping for better CLI help organization:

.option('--skill-generate [name]', '...')
.option('--skill-output <path>', '... (requires --skill-generate)')
.option('-f, --force', '... (requires --skill-generate)')

Adding the (requires --skill-generate) hint in the help text would improve discoverability.

🔍 Premortem Analysis

Scenario Risk Notes
Concurrent CI jobs Low Multiple jobs targeting the same skill directory with --force could race. Consider atomic operations if this becomes an issue.
Symlink edge case Low fs.access() follows symlinks. Using --force on a symlink could delete the linked target.
Relative path edge cases Very Low Paths like ../../../important-dir work as provided. This is expected behavior but worth documenting.

Summary

This PR is well-implemented and ready for merge. The test coverage gap in action files is the main area for improvement, though the core logic is well-tested. Nice work! 👍

…ling

Address review feedback:
- Add empty string validation for --skill-output option
- Add file vs directory check in prepareSkillDir to prevent silent file deletion
- Add tests for resolveAndPrepareSkillDir function
@claude
Copy link
Contributor

claude bot commented Dec 30, 2025

PR Review: Additional Observations (Post-Latest Commits)

The latest commits (Dec 30) have addressed key feedback from previous reviews:

  • ✅ Empty string validation for --skill-output
  • ✅ File vs directory check in prepareSkillDir
  • ✅ Removed dead code (copySkillOutputToCurrentDirectory)
  • ✅ Tests for resolveAndPrepareSkillDir

The implementation is now cleaner and more robust. A few remaining observations:

📋 New Observations

1. Unused getSkillLocation Function

The getSkillLocation function in skillPrompts.ts:142-145 is exported and tested but never used in the codebase. The previous code used it for determining copy behavior in remoteAction.ts, but after the refactoring to remove copySkillOutputToCurrentDirectory, it became dead code.

Suggestion: Either remove getSkillLocation and its tests, or add a comment explaining its intended future use.

2. Test Coverage Gap in Codecov

Codecov reports 71.15% patch coverage (below the 80% target). The main gaps are in:

  • remoteAction.ts: 6 lines uncovered (the skill generation non-interactive path at lines 106-117)
  • defaultAction.ts: 5 lines uncovered (validation and non-interactive path at lines 59-82)

Consider adding integration tests for the non-interactive flow in defaultAction and remoteAction to improve coverage.

3. Minor: Duplicate Empty String Validation

The empty string validation appears in two places:

  • defaultAction.ts:66-68
  • remoteAction.ts:107-109

This is acceptable since they're in different code paths, but you could alternatively move this validation into resolveAndPrepareSkillDir for a single point of validation.

Summary

The PR is well-implemented and ready for merge. The recent commits effectively addressed previous review feedback. The remaining items above are minor suggestions for future cleanup rather than blockers.

👍 Approved - Great work on this CI/CD automation feature!

@yamadashy yamadashy merged commit 3d791b0 into main Dec 30, 2025
54 checks passed
@yamadashy yamadashy deleted the feat/skill-generate-non-interactive-options branch December 30, 2025 09:20
@gabimoncha
Copy link

when will this be released? :D

yamadashy added a commit that referenced this pull request Jan 18, 2026
Add release notes for v1.11.1 covering:
- Multi-root directory labels (#1024)
- Non-interactive skill generation options (#1022)
- Remote git command timeout fix (#1078)
- CLI output visibility fix for light themes (#1088)
- Library bundling documentation (#1075)

Improve release note generation guidelines:
- Clarify "What's New" vs "Improvements" usage
- Add rule to include related issue numbers with PRs
- Add rule to include links in documentation sections
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.

2 participants