@git.zone/cli 1.18.9 → 1.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@git.zone/cli',
6
- version: '1.18.9',
6
+ version: '1.19.0',
7
7
  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.'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxlQUFlO0lBQ3JCLE9BQU8sRUFBRSxRQUFRO0lBQ2pCLFdBQVcsRUFBRSwrTEFBK0w7Q0FDN00sQ0FBQSJ9
@@ -3,23 +3,23 @@ import * as plugins from './mod.plugins.js';
3
3
  import * as paths from '../paths.js';
4
4
  import { logger } from '../gitzone.logging.js';
5
5
  import * as helpers from './mod.helpers.js';
6
+ import * as ui from './mod.ui.js';
6
7
  export const run = async (argvArg) => {
7
8
  if (argvArg.format) {
8
9
  const formatMod = await import('../mod_format/index.js');
9
10
  await formatMod.run();
10
11
  }
11
- logger.log('info', `gathering facts...`);
12
+ ui.printHeader('🔍 Analyzing repository changes...');
12
13
  const aidoc = new plugins.tsdoc.AiDoc();
13
14
  await aidoc.start();
14
15
  const nextCommitObject = await aidoc.buildNextCommitObject(paths.cwd);
15
16
  await aidoc.stop();
16
- logger.log('info', `---------
17
- Next recommended commit would be:
18
- ===========
19
- -> ${nextCommitObject.recommendedNextVersion}:
20
- -> ${nextCommitObject.recommendedNextVersionLevel}(${nextCommitObject.recommendedNextVersionScope}): ${nextCommitObject.recommendedNextVersionMessage}
21
- ===========
22
- `);
17
+ ui.printRecommendation({
18
+ recommendedNextVersion: nextCommitObject.recommendedNextVersion,
19
+ recommendedNextVersionLevel: nextCommitObject.recommendedNextVersionLevel,
20
+ recommendedNextVersionScope: nextCommitObject.recommendedNextVersionScope,
21
+ recommendedNextVersionMessage: nextCommitObject.recommendedNextVersionMessage,
22
+ });
23
23
  const commitInteract = new plugins.smartinteract.SmartInteract();
24
24
  commitInteract.addQuestions([
25
25
  {
@@ -60,15 +60,24 @@ export const run = async (argvArg) => {
60
60
  return 'major';
61
61
  }
62
62
  })();
63
- logger.log('info', `OK! Creating commit with message '${commitString}'`);
63
+ ui.printHeader('✨ Creating Semantic Commit');
64
+ ui.printCommitMessage(commitString);
64
65
  const smartshellInstance = new plugins.smartshell.Smartshell({
65
66
  executor: 'bash',
66
67
  sourceFilePaths: [],
67
68
  });
68
- logger.log('info', `Baking commitinfo into code ...`);
69
+ // Determine total steps (6 if pushing, 5 if not)
70
+ const totalSteps = answerBucket.getAnswerFor('pushToOrigin') && !(process.env.CI === 'true') ? 6 : 5;
71
+ let currentStep = 0;
72
+ // Step 1: Baking commitinfo
73
+ currentStep++;
74
+ ui.printStep(currentStep, totalSteps, '🔧 Baking commit info into code', 'in-progress');
69
75
  const commitInfo = new plugins.commitinfo.CommitInfo(paths.cwd, commitVersionType);
70
76
  await commitInfo.writeIntoPotentialDirs();
71
- logger.log('info', `Writing changelog.md ...`);
77
+ ui.printStep(currentStep, totalSteps, '🔧 Baking commit info into code', 'done');
78
+ // Step 2: Writing changelog
79
+ currentStep++;
80
+ ui.printStep(currentStep, totalSteps, '📄 Generating changelog.md', 'in-progress');
72
81
  let changelog = nextCommitObject.changelog;
73
82
  changelog = changelog.replaceAll('{{nextVersion}}', (await commitInfo.getNextPlannedVersion()).versionString);
74
83
  changelog = changelog.replaceAll('{{nextVersionScope}}', `${await answerBucket.getAnswerFor('commitType')}(${await answerBucket.getAnswerFor('commitScope')})`);
@@ -80,18 +89,45 @@ export const run = async (argvArg) => {
80
89
  changelog = changelog.replaceAll('\n{{nextVersionDetails}}', '');
81
90
  }
82
91
  await plugins.smartfile.memory.toFs(changelog, plugins.path.join(paths.cwd, `changelog.md`));
83
- logger.log('info', `Staging files for commit:`);
92
+ ui.printStep(currentStep, totalSteps, '📄 Generating changelog.md', 'done');
93
+ // Step 3: Staging files
94
+ currentStep++;
95
+ ui.printStep(currentStep, totalSteps, 'đŸ“Ļ Staging files', 'in-progress');
84
96
  await smartshellInstance.exec(`git add -A`);
97
+ ui.printStep(currentStep, totalSteps, 'đŸ“Ļ Staging files', 'done');
98
+ // Step 4: Creating commit
99
+ currentStep++;
100
+ ui.printStep(currentStep, totalSteps, '💾 Creating git commit', 'in-progress');
85
101
  await smartshellInstance.exec(`git commit -m "${commitString}"`);
86
- // Detect project type and bump version accordingly
102
+ ui.printStep(currentStep, totalSteps, '💾 Creating git commit', 'done');
103
+ // Step 5: Bumping version
104
+ currentStep++;
87
105
  const projectType = await helpers.detectProjectType();
88
- await helpers.bumpProjectVersion(projectType, commitVersionType);
106
+ const newVersion = await helpers.bumpProjectVersion(projectType, commitVersionType, currentStep, totalSteps);
107
+ // Step 6: Push to remote (optional)
108
+ const currentBranch = await helpers.detectCurrentBranch();
89
109
  if (answerBucket.getAnswerFor('pushToOrigin') &&
90
110
  !(process.env.CI === 'true')) {
91
- // Detect current branch instead of hardcoding "master"
92
- const currentBranch = await helpers.detectCurrentBranch();
111
+ currentStep++;
112
+ ui.printStep(currentStep, totalSteps, `🚀 Pushing to origin/${currentBranch}`, 'in-progress');
93
113
  await smartshellInstance.exec(`git push origin ${currentBranch} --follow-tags`);
114
+ ui.printStep(currentStep, totalSteps, `🚀 Pushing to origin/${currentBranch}`, 'done');
94
115
  }
116
+ console.log(''); // Add spacing before summary
117
+ // Get commit SHA for summary
118
+ const commitShaResult = await smartshellInstance.exec('git rev-parse --short HEAD');
119
+ const commitSha = commitShaResult.stdout.trim();
120
+ // Print final summary
121
+ ui.printSummary({
122
+ projectType,
123
+ branch: currentBranch,
124
+ commitType: answerBucket.getAnswerFor('commitType'),
125
+ commitScope: answerBucket.getAnswerFor('commitScope'),
126
+ commitMessage: answerBucket.getAnswerFor('commitDescription'),
127
+ newVersion: newVersion,
128
+ commitSha: commitSha,
129
+ pushed: answerBucket.getAnswerFor('pushToOrigin') && !(process.env.CI === 'true'),
130
+ });
95
131
  };
96
132
  const createCommitStringFromAnswerBucket = (answerBucket) => {
97
133
  const commitType = answerBucket.getAnswerFor('commitType');
@@ -99,4 +135,4 @@ const createCommitStringFromAnswerBucket = (answerBucket) => {
99
135
  const commitDescription = answerBucket.getAnswerFor('commitDescription');
100
136
  return `${commitType}(${commitScope}): ${commitDescription}`;
101
137
  };
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfY29tbWl0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdFQUFnRTtBQUVoRSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxLQUFLLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBRTVDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQUUsT0FBWSxFQUFFLEVBQUU7SUFDeEMsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbkIsTUFBTSxTQUFTLEdBQUcsTUFBTSxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUN6RCxNQUFNLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztJQUN6QyxNQUFNLEtBQUssR0FBRyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDeEMsTUFBTSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFFcEIsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFdEUsTUFBTSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFbkIsTUFBTSxDQUFDLEdBQUcsQ0FDUixNQUFNLEVBQ047OztTQUdLLGdCQUFnQixDQUFDLHNCQUFzQjtTQUN2QyxnQkFBZ0IsQ0FBQywyQkFBMkIsSUFBSSxnQkFBZ0IsQ0FBQywyQkFBMkIsTUFBTSxnQkFBZ0IsQ0FBQyw2QkFBNkI7O0dBRXRKLENBQ0EsQ0FBQztJQUNGLE1BQU0sY0FBYyxH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
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfY29tbWl0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGdFQUFnRTtBQUVoRSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxLQUFLLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWxDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQUUsT0FBWSxFQUFFLEVBQUU7SUFDeEMsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbkIsTUFBTSxTQUFTLEdBQUcsTUFBTSxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUN6RCxNQUFNLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsRUFBRSxDQUFDLFdBQVcsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO0lBRXJELE1BQU0sS0FBSyxHQUFHLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN4QyxNQUFNLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUVwQixNQUFNLGdCQUFnQixHQUFHLE1BQU0sS0FBSyxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUV0RSxNQUFNLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUVuQixFQUFFLENBQUMsbUJBQW1CLENBQUM7UUFDckIsc0JBQXNCLEVBQUUsZ0JBQWdCLENBQUMsc0JBQXNCO1FBQy9ELDJCQUEyQixFQUFFLGdCQUFnQixDQUFDLDJCQUEyQjtRQUN6RSwyQkFBMkIsRUFBRSxnQkFBZ0IsQ0FBQywyQkFBMkI7UUFD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
@@ -20,6 +20,8 @@ export declare function bumpDenoVersion(versionType: VersionType): Promise<strin
20
20
  * Bumps the project version based on project type
21
21
  * @param projectType The detected project type
22
22
  * @param versionType The type of version bump
23
+ * @param currentStep The current step number for progress display
24
+ * @param totalSteps The total number of steps for progress display
23
25
  * @returns The new version string
24
26
  */
25
- export declare function bumpProjectVersion(projectType: ProjectType, versionType: VersionType): Promise<string>;
27
+ export declare function bumpProjectVersion(projectType: ProjectType, versionType: VersionType, currentStep?: number, totalSteps?: number): Promise<string>;
@@ -1,6 +1,7 @@
1
1
  import * as plugins from './mod.plugins.js';
2
2
  import * as paths from '../paths.js';
3
3
  import { logger } from '../gitzone.logging.js';
4
+ import * as ui from './mod.ui.js';
4
5
  /**
5
6
  * Detects the current git branch
6
7
  * @returns The current branch name, defaults to 'master' if detection fails
@@ -162,25 +163,39 @@ async function syncVersionToDenoJson(version) {
162
163
  * Bumps the project version based on project type
163
164
  * @param projectType The detected project type
164
165
  * @param versionType The type of version bump
166
+ * @param currentStep The current step number for progress display
167
+ * @param totalSteps The total number of steps for progress display
165
168
  * @returns The new version string
166
169
  */
167
- export async function bumpProjectVersion(projectType, versionType) {
170
+ export async function bumpProjectVersion(projectType, versionType, currentStep, totalSteps) {
171
+ const projectEmoji = projectType === 'npm' ? 'đŸ“Ļ' : projectType === 'deno' ? 'đŸĻ•' : '🔀';
172
+ const description = `đŸˇī¸ Bumping version (${projectEmoji} ${projectType})`;
173
+ if (currentStep && totalSteps) {
174
+ ui.printStep(currentStep, totalSteps, description, 'in-progress');
175
+ }
176
+ let newVersion;
168
177
  switch (projectType) {
169
178
  case 'npm':
170
- return await bumpNpmVersion(versionType);
179
+ newVersion = await bumpNpmVersion(versionType);
180
+ break;
171
181
  case 'deno':
172
- return await bumpDenoVersion(versionType);
182
+ newVersion = await bumpDenoVersion(versionType);
183
+ break;
173
184
  case 'both': {
174
185
  // Bump npm version first (it handles git tags)
175
- const newVersion = await bumpNpmVersion(versionType);
186
+ newVersion = await bumpNpmVersion(versionType);
176
187
  // Then sync to deno.json
177
188
  await syncVersionToDenoJson(newVersion);
178
- return newVersion;
189
+ break;
179
190
  }
180
191
  case 'none':
181
192
  throw new Error('Cannot bump version: no package.json or deno.json found');
182
193
  default:
183
194
  throw new Error(`Unknown project type: ${projectType}`);
184
195
  }
196
+ if (currentStep && totalSteps) {
197
+ ui.printStep(currentStep, totalSteps, description, 'done');
198
+ }
199
+ return newVersion;
185
200
  }
186
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kLmhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfY29tbWl0L21vZC5oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxLQUFLLEtBQUssTUFBTSxhQUFhLENBQUM7QUFDckMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBSy9DOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsbUJBQW1CO0lBQ3ZDLElBQUksQ0FBQztRQUNILE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztZQUMzRCxRQUFRLEVBQUUsTUFBTTtZQUNoQixlQUFlLEVBQUUsRUFBRTtTQUNwQixDQUFDLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLGtCQUFrQixDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQzFFLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFeEMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLDJEQUEyRCxDQUFDLENBQUM7WUFDaEYsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztRQUVELE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLDRCQUE0QixVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQzdELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsNEJBQTRCLEtBQUssQ0FBQyxPQUFPLDRCQUE0QixDQUFDLENBQUM7UUFDMUYsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztBQUNILENBQUM7QUFFRDs7O0dBR0c7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
201
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kLmhlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9tb2RfY29tbWl0L21vZC5oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxLQUFLLEtBQUssTUFBTSxhQUFhLENBQUM7QUFDckMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBS2xDOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsbUJBQW1CO0lBQ3ZDLElBQUksQ0FBQztRQUNILE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztZQUMzRCxRQUFRLEVBQUUsTUFBTTtZQUNoQixlQUFlLEVBQUUsRUFBRTtTQUNwQixDQUFDLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLGtCQUFrQixDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQzFFLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFeEMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLDJEQUEyRCxDQUFDLENBQUM7WUFDaEYsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztRQUVELE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLDRCQUE0QixVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQzdELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsNEJBQTRCLEtBQUssQ0FBQyxPQUFPLDRCQUE0QixDQUFDLENBQUM7UUFDMUYsT0FBTyxRQUFRLENB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
@@ -0,0 +1,61 @@
1
+ /**
2
+ * UI helper module for beautiful CLI output
3
+ */
4
+ interface ICommitSummary {
5
+ projectType: string;
6
+ branch: string;
7
+ commitType: string;
8
+ commitScope: string;
9
+ commitMessage: string;
10
+ newVersion: string;
11
+ commitSha?: string;
12
+ pushed: boolean;
13
+ repoUrl?: string;
14
+ }
15
+ interface IRecommendation {
16
+ recommendedNextVersion: string;
17
+ recommendedNextVersionLevel: string;
18
+ recommendedNextVersionScope: string;
19
+ recommendedNextVersionMessage: string;
20
+ }
21
+ /**
22
+ * Print a header with a box around it
23
+ */
24
+ export declare function printHeader(title: string): void;
25
+ /**
26
+ * Print a section with a border
27
+ */
28
+ export declare function printSection(title: string, lines: string[]): void;
29
+ /**
30
+ * Print AI recommendations in a nice box
31
+ */
32
+ export declare function printRecommendation(recommendation: IRecommendation): void;
33
+ /**
34
+ * Print a progress step
35
+ */
36
+ export declare function printStep(current: number, total: number, description: string, status: 'in-progress' | 'done' | 'error'): void;
37
+ /**
38
+ * Print final commit summary
39
+ */
40
+ export declare function printSummary(summary: ICommitSummary): void;
41
+ /**
42
+ * Print an info message with consistent formatting
43
+ */
44
+ export declare function printInfo(message: string): void;
45
+ /**
46
+ * Print a success message
47
+ */
48
+ export declare function printSuccess(message: string): void;
49
+ /**
50
+ * Print a warning message
51
+ */
52
+ export declare function printWarning(message: string): void;
53
+ /**
54
+ * Print an error message
55
+ */
56
+ export declare function printError(message: string): void;
57
+ /**
58
+ * Print commit message being created
59
+ */
60
+ export declare function printCommitMessage(commitString: string): void;
61
+ export {};
@@ -0,0 +1,147 @@
1
+ import { logger } from '../gitzone.logging.js';
2
+ /**
3
+ * Print a header with a box around it
4
+ */
5
+ export function printHeader(title) {
6
+ const width = 57;
7
+ const padding = Math.max(0, width - title.length - 2);
8
+ const leftPad = Math.floor(padding / 2);
9
+ const rightPad = padding - leftPad;
10
+ console.log('');
11
+ console.log('╭─' + '─'.repeat(width) + '─╮');
12
+ console.log('│ ' + title + ' '.repeat(rightPad + leftPad) + ' │');
13
+ console.log('╰─' + '─'.repeat(width) + '─╯');
14
+ console.log('');
15
+ }
16
+ /**
17
+ * Print a section with a border
18
+ */
19
+ export function printSection(title, lines) {
20
+ const width = 59;
21
+ console.log('┌─ ' + title + ' ' + '─'.repeat(Math.max(0, width - title.length - 3)) + '┐');
22
+ console.log('│' + ' '.repeat(width) + '│');
23
+ for (const line of lines) {
24
+ const padding = width - line.length;
25
+ console.log('│ ' + line + ' '.repeat(Math.max(0, padding - 2)) + '│');
26
+ }
27
+ console.log('│' + ' '.repeat(width) + '│');
28
+ console.log('└─' + '─'.repeat(width) + '─┘');
29
+ console.log('');
30
+ }
31
+ /**
32
+ * Print AI recommendations in a nice box
33
+ */
34
+ export function printRecommendation(recommendation) {
35
+ const lines = [
36
+ `Suggested Version: v${recommendation.recommendedNextVersion}`,
37
+ `Suggested Type: ${recommendation.recommendedNextVersionLevel}`,
38
+ `Suggested Scope: ${recommendation.recommendedNextVersionScope}`,
39
+ `Suggested Message: ${recommendation.recommendedNextVersionMessage}`,
40
+ ];
41
+ printSection('📊 AI Recommendations', lines);
42
+ }
43
+ /**
44
+ * Print a progress step
45
+ */
46
+ export function printStep(current, total, description, status) {
47
+ const statusIcon = status === 'done' ? '✓' : status === 'error' ? '✗' : 'âŗ';
48
+ const dots = '.'.repeat(Math.max(0, 40 - description.length));
49
+ console.log(` [${current}/${total}] ${description}${dots} ${statusIcon}`);
50
+ // Clear the line on next update if in progress
51
+ if (status === 'in-progress') {
52
+ process.stdout.write('\x1b[1A'); // Move cursor up one line
53
+ }
54
+ }
55
+ /**
56
+ * Get emoji for project type
57
+ */
58
+ function getProjectTypeEmoji(projectType) {
59
+ switch (projectType) {
60
+ case 'npm':
61
+ return 'đŸ“Ļ npm';
62
+ case 'deno':
63
+ return 'đŸĻ• Deno';
64
+ case 'both':
65
+ return '🔀 npm + Deno';
66
+ default:
67
+ return '❓ Unknown';
68
+ }
69
+ }
70
+ /**
71
+ * Get emoji for commit type
72
+ */
73
+ function getCommitTypeEmoji(commitType) {
74
+ switch (commitType) {
75
+ case 'fix':
76
+ return '🔧 fix';
77
+ case 'feat':
78
+ return '✨ feat';
79
+ case 'BREAKING CHANGE':
80
+ return 'đŸ’Ĩ BREAKING CHANGE';
81
+ default:
82
+ return commitType;
83
+ }
84
+ }
85
+ /**
86
+ * Print final commit summary
87
+ */
88
+ export function printSummary(summary) {
89
+ const lines = [
90
+ `Project Type: ${getProjectTypeEmoji(summary.projectType)}`,
91
+ `Branch: đŸŒŋ ${summary.branch}`,
92
+ `Commit Type: ${getCommitTypeEmoji(summary.commitType)}`,
93
+ `Scope: 📍 ${summary.commitScope}`,
94
+ `New Version: đŸˇī¸ v${summary.newVersion}`,
95
+ ];
96
+ if (summary.commitSha) {
97
+ lines.push(`Commit SHA: 📌 ${summary.commitSha}`);
98
+ }
99
+ if (summary.pushed) {
100
+ lines.push(`Remote: ✓ Pushed successfully`);
101
+ }
102
+ else {
103
+ lines.push(`Remote: ⊘ Not pushed (local only)`);
104
+ }
105
+ if (summary.repoUrl && summary.commitSha) {
106
+ lines.push('');
107
+ lines.push(`View at: ${summary.repoUrl}/commit/${summary.commitSha}`);
108
+ }
109
+ printSection('✅ Commit Summary', lines);
110
+ if (summary.pushed) {
111
+ console.log('🎉 All done! Your changes are committed and pushed.\n');
112
+ }
113
+ else {
114
+ console.log('✓ Commit created successfully.\n');
115
+ }
116
+ }
117
+ /**
118
+ * Print an info message with consistent formatting
119
+ */
120
+ export function printInfo(message) {
121
+ console.log(` â„šī¸ ${message}`);
122
+ }
123
+ /**
124
+ * Print a success message
125
+ */
126
+ export function printSuccess(message) {
127
+ console.log(` ✓ ${message}`);
128
+ }
129
+ /**
130
+ * Print a warning message
131
+ */
132
+ export function printWarning(message) {
133
+ logger.log('warn', `âš ī¸ ${message}`);
134
+ }
135
+ /**
136
+ * Print an error message
137
+ */
138
+ export function printError(message) {
139
+ logger.log('error', `✗ ${message}`);
140
+ }
141
+ /**
142
+ * Print commit message being created
143
+ */
144
+ export function printCommitMessage(commitString) {
145
+ console.log(`\n 📝 Commit: ${commitString}\n`);
146
+ }
147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kLnVpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvbW9kX2NvbW1pdC9tb2QudWkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBeUIvQzs7R0FFRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsS0FBYTtJQUN2QyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDakIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDeEMsTUFBTSxRQUFRLEdBQUcsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUVuQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDN0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQ3BFLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDN0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLEtBQWEsRUFBRSxLQUFlO0lBQ3pELE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUVqQixPQUFPLENB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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@git.zone/cli",
3
3
  "private": false,
4
- "version": "1.18.9",
4
+ "version": "1.19.0",
5
5
  "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.",
6
6
  "main": "dist_ts/index.ts",
7
7
  "typings": "dist_ts/index.d.ts",
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@git.zone/cli',
6
- version: '1.18.9',
6
+ version: '1.19.0',
7
7
  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.'
8
8
  }
@@ -4,6 +4,7 @@ import * as plugins from './mod.plugins.js';
4
4
  import * as paths from '../paths.js';
5
5
  import { logger } from '../gitzone.logging.js';
6
6
  import * as helpers from './mod.helpers.js';
7
+ import * as ui from './mod.ui.js';
7
8
 
8
9
  export const run = async (argvArg: any) => {
9
10
  if (argvArg.format) {
@@ -11,7 +12,8 @@ export const run = async (argvArg: any) => {
11
12
  await formatMod.run();
12
13
  }
13
14
 
14
- logger.log('info', `gathering facts...`);
15
+ ui.printHeader('🔍 Analyzing repository changes...');
16
+
15
17
  const aidoc = new plugins.tsdoc.AiDoc();
16
18
  await aidoc.start();
17
19
 
@@ -19,16 +21,12 @@ export const run = async (argvArg: any) => {
19
21
 
20
22
  await aidoc.stop();
21
23
 
22
- logger.log(
23
- 'info',
24
- `---------
25
- Next recommended commit would be:
26
- ===========
27
- -> ${nextCommitObject.recommendedNextVersion}:
28
- -> ${nextCommitObject.recommendedNextVersionLevel}(${nextCommitObject.recommendedNextVersionScope}): ${nextCommitObject.recommendedNextVersionMessage}
29
- ===========
30
- `,
31
- );
24
+ ui.printRecommendation({
25
+ recommendedNextVersion: nextCommitObject.recommendedNextVersion,
26
+ recommendedNextVersionLevel: nextCommitObject.recommendedNextVersionLevel,
27
+ recommendedNextVersionScope: nextCommitObject.recommendedNextVersionScope,
28
+ recommendedNextVersionMessage: nextCommitObject.recommendedNextVersionMessage,
29
+ });
32
30
  const commitInteract = new plugins.smartinteract.SmartInteract();
33
31
  commitInteract.addQuestions([
34
32
  {
@@ -70,20 +68,30 @@ export const run = async (argvArg: any) => {
70
68
  }
71
69
  })();
72
70
 
73
- logger.log('info', `OK! Creating commit with message '${commitString}'`);
71
+ ui.printHeader('✨ Creating Semantic Commit');
72
+ ui.printCommitMessage(commitString);
74
73
  const smartshellInstance = new plugins.smartshell.Smartshell({
75
74
  executor: 'bash',
76
75
  sourceFilePaths: [],
77
76
  });
78
77
 
79
- logger.log('info', `Baking commitinfo into code ...`);
78
+ // Determine total steps (6 if pushing, 5 if not)
79
+ const totalSteps = answerBucket.getAnswerFor('pushToOrigin') && !(process.env.CI === 'true') ? 6 : 5;
80
+ let currentStep = 0;
81
+
82
+ // Step 1: Baking commitinfo
83
+ currentStep++;
84
+ ui.printStep(currentStep, totalSteps, '🔧 Baking commit info into code', 'in-progress');
80
85
  const commitInfo = new plugins.commitinfo.CommitInfo(
81
86
  paths.cwd,
82
87
  commitVersionType,
83
88
  );
84
89
  await commitInfo.writeIntoPotentialDirs();
90
+ ui.printStep(currentStep, totalSteps, '🔧 Baking commit info into code', 'done');
85
91
 
86
- logger.log('info', `Writing changelog.md ...`);
92
+ // Step 2: Writing changelog
93
+ currentStep++;
94
+ ui.printStep(currentStep, totalSteps, '📄 Generating changelog.md', 'in-progress');
87
95
  let changelog = nextCommitObject.changelog;
88
96
  changelog = changelog.replaceAll(
89
97
  '{{nextVersion}}',
@@ -110,23 +118,54 @@ export const run = async (argvArg: any) => {
110
118
  changelog,
111
119
  plugins.path.join(paths.cwd, `changelog.md`),
112
120
  );
121
+ ui.printStep(currentStep, totalSteps, '📄 Generating changelog.md', 'done');
113
122
 
114
- logger.log('info', `Staging files for commit:`);
123
+ // Step 3: Staging files
124
+ currentStep++;
125
+ ui.printStep(currentStep, totalSteps, 'đŸ“Ļ Staging files', 'in-progress');
115
126
  await smartshellInstance.exec(`git add -A`);
127
+ ui.printStep(currentStep, totalSteps, 'đŸ“Ļ Staging files', 'done');
128
+
129
+ // Step 4: Creating commit
130
+ currentStep++;
131
+ ui.printStep(currentStep, totalSteps, '💾 Creating git commit', 'in-progress');
116
132
  await smartshellInstance.exec(`git commit -m "${commitString}"`);
133
+ ui.printStep(currentStep, totalSteps, '💾 Creating git commit', 'done');
117
134
 
118
- // Detect project type and bump version accordingly
135
+ // Step 5: Bumping version
136
+ currentStep++;
119
137
  const projectType = await helpers.detectProjectType();
120
- await helpers.bumpProjectVersion(projectType, commitVersionType);
138
+ const newVersion = await helpers.bumpProjectVersion(projectType, commitVersionType, currentStep, totalSteps);
121
139
 
140
+ // Step 6: Push to remote (optional)
141
+ const currentBranch = await helpers.detectCurrentBranch();
122
142
  if (
123
143
  answerBucket.getAnswerFor('pushToOrigin') &&
124
144
  !(process.env.CI === 'true')
125
145
  ) {
126
- // Detect current branch instead of hardcoding "master"
127
- const currentBranch = await helpers.detectCurrentBranch();
146
+ currentStep++;
147
+ ui.printStep(currentStep, totalSteps, `🚀 Pushing to origin/${currentBranch}`, 'in-progress');
128
148
  await smartshellInstance.exec(`git push origin ${currentBranch} --follow-tags`);
149
+ ui.printStep(currentStep, totalSteps, `🚀 Pushing to origin/${currentBranch}`, 'done');
129
150
  }
151
+
152
+ console.log(''); // Add spacing before summary
153
+
154
+ // Get commit SHA for summary
155
+ const commitShaResult = await smartshellInstance.exec('git rev-parse --short HEAD');
156
+ const commitSha = commitShaResult.stdout.trim();
157
+
158
+ // Print final summary
159
+ ui.printSummary({
160
+ projectType,
161
+ branch: currentBranch,
162
+ commitType: answerBucket.getAnswerFor('commitType'),
163
+ commitScope: answerBucket.getAnswerFor('commitScope'),
164
+ commitMessage: answerBucket.getAnswerFor('commitDescription'),
165
+ newVersion: newVersion,
166
+ commitSha: commitSha,
167
+ pushed: answerBucket.getAnswerFor('pushToOrigin') && !(process.env.CI === 'true'),
168
+ });
130
169
  };
131
170
 
132
171
  const createCommitStringFromAnswerBucket = (
@@ -1,6 +1,7 @@
1
1
  import * as plugins from './mod.plugins.js';
2
2
  import * as paths from '../paths.js';
3
3
  import { logger } from '../gitzone.logging.js';
4
+ import * as ui from './mod.ui.js';
4
5
 
5
6
  export type ProjectType = 'npm' | 'deno' | 'both' | 'none';
6
7
  export type VersionType = 'patch' | 'minor' | 'major';
@@ -204,25 +205,40 @@ async function syncVersionToDenoJson(version: string): Promise<void> {
204
205
  * Bumps the project version based on project type
205
206
  * @param projectType The detected project type
206
207
  * @param versionType The type of version bump
208
+ * @param currentStep The current step number for progress display
209
+ * @param totalSteps The total number of steps for progress display
207
210
  * @returns The new version string
208
211
  */
209
212
  export async function bumpProjectVersion(
210
213
  projectType: ProjectType,
211
- versionType: VersionType
214
+ versionType: VersionType,
215
+ currentStep?: number,
216
+ totalSteps?: number
212
217
  ): Promise<string> {
218
+ const projectEmoji = projectType === 'npm' ? 'đŸ“Ļ' : projectType === 'deno' ? 'đŸĻ•' : '🔀';
219
+ const description = `đŸˇī¸ Bumping version (${projectEmoji} ${projectType})`;
220
+
221
+ if (currentStep && totalSteps) {
222
+ ui.printStep(currentStep, totalSteps, description, 'in-progress');
223
+ }
224
+
225
+ let newVersion: string;
226
+
213
227
  switch (projectType) {
214
228
  case 'npm':
215
- return await bumpNpmVersion(versionType);
229
+ newVersion = await bumpNpmVersion(versionType);
230
+ break;
216
231
 
217
232
  case 'deno':
218
- return await bumpDenoVersion(versionType);
233
+ newVersion = await bumpDenoVersion(versionType);
234
+ break;
219
235
 
220
236
  case 'both': {
221
237
  // Bump npm version first (it handles git tags)
222
- const newVersion = await bumpNpmVersion(versionType);
238
+ newVersion = await bumpNpmVersion(versionType);
223
239
  // Then sync to deno.json
224
240
  await syncVersionToDenoJson(newVersion);
225
- return newVersion;
241
+ break;
226
242
  }
227
243
 
228
244
  case 'none':
@@ -231,4 +247,10 @@ export async function bumpProjectVersion(
231
247
  default:
232
248
  throw new Error(`Unknown project type: ${projectType}`);
233
249
  }
250
+
251
+ if (currentStep && totalSteps) {
252
+ ui.printStep(currentStep, totalSteps, description, 'done');
253
+ }
254
+
255
+ return newVersion;
234
256
  }
@@ -0,0 +1,196 @@
1
+ import { logger } from '../gitzone.logging.js';
2
+
3
+ /**
4
+ * UI helper module for beautiful CLI output
5
+ */
6
+
7
+ interface ICommitSummary {
8
+ projectType: string;
9
+ branch: string;
10
+ commitType: string;
11
+ commitScope: string;
12
+ commitMessage: string;
13
+ newVersion: string;
14
+ commitSha?: string;
15
+ pushed: boolean;
16
+ repoUrl?: string;
17
+ }
18
+
19
+ interface IRecommendation {
20
+ recommendedNextVersion: string;
21
+ recommendedNextVersionLevel: string;
22
+ recommendedNextVersionScope: string;
23
+ recommendedNextVersionMessage: string;
24
+ }
25
+
26
+ /**
27
+ * Print a header with a box around it
28
+ */
29
+ export function printHeader(title: string): void {
30
+ const width = 57;
31
+ const padding = Math.max(0, width - title.length - 2);
32
+ const leftPad = Math.floor(padding / 2);
33
+ const rightPad = padding - leftPad;
34
+
35
+ console.log('');
36
+ console.log('╭─' + '─'.repeat(width) + '─╮');
37
+ console.log('│ ' + title + ' '.repeat(rightPad + leftPad) + ' │');
38
+ console.log('╰─' + '─'.repeat(width) + '─╯');
39
+ console.log('');
40
+ }
41
+
42
+ /**
43
+ * Print a section with a border
44
+ */
45
+ export function printSection(title: string, lines: string[]): void {
46
+ const width = 59;
47
+
48
+ console.log('┌─ ' + title + ' ' + '─'.repeat(Math.max(0, width - title.length - 3)) + '┐');
49
+ console.log('│' + ' '.repeat(width) + '│');
50
+
51
+ for (const line of lines) {
52
+ const padding = width - line.length;
53
+ console.log('│ ' + line + ' '.repeat(Math.max(0, padding - 2)) + '│');
54
+ }
55
+
56
+ console.log('│' + ' '.repeat(width) + '│');
57
+ console.log('└─' + '─'.repeat(width) + '─┘');
58
+ console.log('');
59
+ }
60
+
61
+ /**
62
+ * Print AI recommendations in a nice box
63
+ */
64
+ export function printRecommendation(recommendation: IRecommendation): void {
65
+ const lines = [
66
+ `Suggested Version: v${recommendation.recommendedNextVersion}`,
67
+ `Suggested Type: ${recommendation.recommendedNextVersionLevel}`,
68
+ `Suggested Scope: ${recommendation.recommendedNextVersionScope}`,
69
+ `Suggested Message: ${recommendation.recommendedNextVersionMessage}`,
70
+ ];
71
+
72
+ printSection('📊 AI Recommendations', lines);
73
+ }
74
+
75
+ /**
76
+ * Print a progress step
77
+ */
78
+ export function printStep(
79
+ current: number,
80
+ total: number,
81
+ description: string,
82
+ status: 'in-progress' | 'done' | 'error'
83
+ ): void {
84
+ const statusIcon = status === 'done' ? '✓' : status === 'error' ? '✗' : 'âŗ';
85
+ const dots = '.'.repeat(Math.max(0, 40 - description.length));
86
+
87
+ console.log(` [${current}/${total}] ${description}${dots} ${statusIcon}`);
88
+
89
+ // Clear the line on next update if in progress
90
+ if (status === 'in-progress') {
91
+ process.stdout.write('\x1b[1A'); // Move cursor up one line
92
+ }
93
+ }
94
+
95
+ /**
96
+ * Get emoji for project type
97
+ */
98
+ function getProjectTypeEmoji(projectType: string): string {
99
+ switch (projectType) {
100
+ case 'npm':
101
+ return 'đŸ“Ļ npm';
102
+ case 'deno':
103
+ return 'đŸĻ• Deno';
104
+ case 'both':
105
+ return '🔀 npm + Deno';
106
+ default:
107
+ return '❓ Unknown';
108
+ }
109
+ }
110
+
111
+ /**
112
+ * Get emoji for commit type
113
+ */
114
+ function getCommitTypeEmoji(commitType: string): string {
115
+ switch (commitType) {
116
+ case 'fix':
117
+ return '🔧 fix';
118
+ case 'feat':
119
+ return '✨ feat';
120
+ case 'BREAKING CHANGE':
121
+ return 'đŸ’Ĩ BREAKING CHANGE';
122
+ default:
123
+ return commitType;
124
+ }
125
+ }
126
+
127
+ /**
128
+ * Print final commit summary
129
+ */
130
+ export function printSummary(summary: ICommitSummary): void {
131
+ const lines = [
132
+ `Project Type: ${getProjectTypeEmoji(summary.projectType)}`,
133
+ `Branch: đŸŒŋ ${summary.branch}`,
134
+ `Commit Type: ${getCommitTypeEmoji(summary.commitType)}`,
135
+ `Scope: 📍 ${summary.commitScope}`,
136
+ `New Version: đŸˇī¸ v${summary.newVersion}`,
137
+ ];
138
+
139
+ if (summary.commitSha) {
140
+ lines.push(`Commit SHA: 📌 ${summary.commitSha}`);
141
+ }
142
+
143
+ if (summary.pushed) {
144
+ lines.push(`Remote: ✓ Pushed successfully`);
145
+ } else {
146
+ lines.push(`Remote: ⊘ Not pushed (local only)`);
147
+ }
148
+
149
+ if (summary.repoUrl && summary.commitSha) {
150
+ lines.push('');
151
+ lines.push(`View at: ${summary.repoUrl}/commit/${summary.commitSha}`);
152
+ }
153
+
154
+ printSection('✅ Commit Summary', lines);
155
+
156
+ if (summary.pushed) {
157
+ console.log('🎉 All done! Your changes are committed and pushed.\n');
158
+ } else {
159
+ console.log('✓ Commit created successfully.\n');
160
+ }
161
+ }
162
+
163
+ /**
164
+ * Print an info message with consistent formatting
165
+ */
166
+ export function printInfo(message: string): void {
167
+ console.log(` â„šī¸ ${message}`);
168
+ }
169
+
170
+ /**
171
+ * Print a success message
172
+ */
173
+ export function printSuccess(message: string): void {
174
+ console.log(` ✓ ${message}`);
175
+ }
176
+
177
+ /**
178
+ * Print a warning message
179
+ */
180
+ export function printWarning(message: string): void {
181
+ logger.log('warn', `âš ī¸ ${message}`);
182
+ }
183
+
184
+ /**
185
+ * Print an error message
186
+ */
187
+ export function printError(message: string): void {
188
+ logger.log('error', `✗ ${message}`);
189
+ }
190
+
191
+ /**
192
+ * Print commit message being created
193
+ */
194
+ export function printCommitMessage(commitString: string): void {
195
+ console.log(`\n 📝 Commit: ${commitString}\n`);
196
+ }