From 485c0a3855f4f55139a51a3d013729b91783f8fa Mon Sep 17 00:00:00 2001 From: Juergen Kunz Date: Thu, 6 Nov 2025 00:06:02 +0000 Subject: [PATCH] feat(commit): Add non-interactive --yes (-y) flag to commit command to auto-accept AI recommendations and optionally push with -p --- changelog.md | 9 +++++ readme.hints.md | 36 +++++++++++++++++ ts/00_commitinfo_data.ts | 2 +- ts/mod_commit/index.ts | 86 ++++++++++++++++++++++++++-------------- 4 files changed, 103 insertions(+), 30 deletions(-) diff --git a/changelog.md b/changelog.md index 123e4d8..7fa51e5 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,14 @@ # Changelog +## 2025-11-06 - 1.20.0 - feat(commit) +Add non-interactive --yes (-y) flag to commit command to auto-accept AI recommendations and optionally push with -p + +- Add -y / --yes flag to gitzone commit to auto-accept AI-generated commit recommendations without interactive prompts +- Support -yp or -y -p combinations to auto-accept and push to origin; -p / --push remains the separate control for pushing +- Implementation creates a smartinteract AnswerBucket programmatically when -y is used and populates commitType, commitScope, commitDescription and pushToOrigin +- Preserves existing UI output and interactive flow when -y is not used; fully backward compatible and CI/CD friendly +- Updated CLI usage and documentation (readme.hints.md) to document the new flags + ## 2025-11-05 - 1.19.9 - fix(mod_commit) Refactor version bumping to a unified implementation for npm and Deno; remove npm-exec based helpers and add file-based version readers/updaters to avoid npm warning pollution diff --git a/readme.hints.md b/readme.hints.md index 6db1c3a..c93bee4 100644 --- a/readme.hints.md +++ b/readme.hints.md @@ -110,6 +110,21 @@ The commit module's version bumping has been refactored to eliminate npm command - Same code path for all project types - Reuses existing `calculateNewVersion()` function +### Auto-Accept Flag for Commits + +The commit module now supports `-y/--yes` flag for non-interactive commits: + +**Usage:** +- `gitzone commit -y` - Auto-accepts AI recommendations without prompts +- `gitzone commit -yp` - Auto-accepts and pushes to origin +- Separate `-p/--push` flag controls push behavior + +**Implementation:** +- Creates AnswerBucket programmatically when `-y` flag detected +- Preserves all UI output for transparency +- Fully backward compatible with interactive mode +- CI/CD friendly for automated workflows + ## Development Tips - Always check readme.plan.md for ongoing improvement plans @@ -157,6 +172,27 @@ The commit module's version bumping has been refactored to eliminate npm command ## CLI Usage +### Commit Commands + +```bash +# Interactive commit (default) +gitzone commit + +# Auto-accept AI recommendations (no prompts) +gitzone commit -y +gitzone commit --yes + +# Auto-accept and push to origin +gitzone commit -yp +gitzone commit -y -p +gitzone commit --yes --push + +# Run format before commit +gitzone commit --format +``` + +### Format Commands + ```bash # Basic format gitzone format diff --git a/ts/00_commitinfo_data.ts b/ts/00_commitinfo_data.ts index 31c4585..fc86da0 100644 --- a/ts/00_commitinfo_data.ts +++ b/ts/00_commitinfo_data.ts @@ -3,6 +3,6 @@ */ export const commitinfo = { name: '@git.zone/cli', - version: '1.19.9', + version: '1.20.0', description: 'A comprehensive CLI tool for enhancing and managing local development workflows with gitzone utilities, focusing on project setup, version control, code formatting, and template management.' } diff --git a/ts/mod_commit/index.ts b/ts/mod_commit/index.ts index 42fa60f..44cb06d 100644 --- a/ts/mod_commit/index.ts +++ b/ts/mod_commit/index.ts @@ -27,35 +27,63 @@ export const run = async (argvArg: any) => { recommendedNextVersionScope: nextCommitObject.recommendedNextVersionScope, recommendedNextVersionMessage: nextCommitObject.recommendedNextVersionMessage, }); - const commitInteract = new plugins.smartinteract.SmartInteract(); - commitInteract.addQuestions([ - { - type: 'list', - name: `commitType`, - message: `Choose TYPE of the commit:`, - choices: [`fix`, `feat`, `BREAKING CHANGE`], - default: nextCommitObject.recommendedNextVersionLevel, - }, - { - type: 'input', - name: `commitScope`, - message: `What is the SCOPE of the commit:`, - default: nextCommitObject.recommendedNextVersionScope, - }, - { - type: `input`, - name: `commitDescription`, - message: `What is the DESCRIPTION of the commit?`, - default: nextCommitObject.recommendedNextVersionMessage, - }, - { - type: 'confirm', - name: `pushToOrigin`, - message: `Do you want to push this version now?`, - default: true, - }, - ]); - const answerBucket = await commitInteract.runQueue(); + + let answerBucket: plugins.smartinteract.AnswerBucket; + + // Check if -y or --yes flag is set to auto-accept recommendations + if (argvArg.y || argvArg.yes) { + // Auto-mode: create AnswerBucket programmatically + logger.log('info', '✓ Auto-accepting AI recommendations (--yes flag)'); + + answerBucket = new plugins.smartinteract.AnswerBucket(); + answerBucket.addAnswer({ + name: 'commitType', + value: nextCommitObject.recommendedNextVersionLevel, + }); + answerBucket.addAnswer({ + name: 'commitScope', + value: nextCommitObject.recommendedNextVersionScope, + }); + answerBucket.addAnswer({ + name: 'commitDescription', + value: nextCommitObject.recommendedNextVersionMessage, + }); + answerBucket.addAnswer({ + name: 'pushToOrigin', + value: !!(argvArg.p || argvArg.push), // Only push if -p flag also provided + }); + } else { + // Interactive mode: prompt user for input + const commitInteract = new plugins.smartinteract.SmartInteract(); + commitInteract.addQuestions([ + { + type: 'list', + name: `commitType`, + message: `Choose TYPE of the commit:`, + choices: [`fix`, `feat`, `BREAKING CHANGE`], + default: nextCommitObject.recommendedNextVersionLevel, + }, + { + type: 'input', + name: `commitScope`, + message: `What is the SCOPE of the commit:`, + default: nextCommitObject.recommendedNextVersionScope, + }, + { + type: `input`, + name: `commitDescription`, + message: `What is the DESCRIPTION of the commit?`, + default: nextCommitObject.recommendedNextVersionMessage, + }, + { + type: 'confirm', + name: `pushToOrigin`, + message: `Do you want to push this version now?`, + default: true, + }, + ]); + answerBucket = await commitInteract.runQueue(); + } const commitString = createCommitStringFromAnswerBucket(answerBucket); const commitVersionType = (() => { switch (answerBucket.getAnswerFor('commitType')) {