git-smart-flow 0.3.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.
Files changed (190) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/LICENSE +21 -0
  3. package/README.md +130 -0
  4. package/bin/git-smart-flow.js +2 -0
  5. package/bin/gsf.js +2 -0
  6. package/bin/gsfc.js +3 -0
  7. package/bin/gsfm.js +3 -0
  8. package/bin/gsfp.js +3 -0
  9. package/bin/gsfpr.js +3 -0
  10. package/dist/cli.d.ts +2 -0
  11. package/dist/cli.js +214 -0
  12. package/dist/cli.js.map +1 -0
  13. package/dist/commands/aliases.d.ts +2 -0
  14. package/dist/commands/aliases.js +37 -0
  15. package/dist/commands/aliases.js.map +1 -0
  16. package/dist/commands/branch.d.ts +2 -0
  17. package/dist/commands/branch.js +414 -0
  18. package/dist/commands/branch.js.map +1 -0
  19. package/dist/commands/commit-message.d.ts +7 -0
  20. package/dist/commands/commit-message.js +95 -0
  21. package/dist/commands/commit-message.js.map +1 -0
  22. package/dist/commands/commit.d.ts +3 -0
  23. package/dist/commands/commit.js +597 -0
  24. package/dist/commands/commit.js.map +1 -0
  25. package/dist/commands/config.d.ts +2 -0
  26. package/dist/commands/config.js +88 -0
  27. package/dist/commands/config.js.map +1 -0
  28. package/dist/commands/doctor.d.ts +2 -0
  29. package/dist/commands/doctor.js +246 -0
  30. package/dist/commands/doctor.js.map +1 -0
  31. package/dist/commands/info.d.ts +2 -0
  32. package/dist/commands/info.js +155 -0
  33. package/dist/commands/info.js.map +1 -0
  34. package/dist/commands/install-hooks.d.ts +2 -0
  35. package/dist/commands/install-hooks.js +66 -0
  36. package/dist/commands/install-hooks.js.map +1 -0
  37. package/dist/commands/log.d.ts +2 -0
  38. package/dist/commands/log.js +101 -0
  39. package/dist/commands/log.js.map +1 -0
  40. package/dist/commands/menu.d.ts +2 -0
  41. package/dist/commands/menu.js +297 -0
  42. package/dist/commands/menu.js.map +1 -0
  43. package/dist/commands/merge.d.ts +6 -0
  44. package/dist/commands/merge.js +128 -0
  45. package/dist/commands/merge.js.map +1 -0
  46. package/dist/commands/pr.d.ts +2 -0
  47. package/dist/commands/pr.js +731 -0
  48. package/dist/commands/pr.js.map +1 -0
  49. package/dist/commands/push.d.ts +7 -0
  50. package/dist/commands/push.js +225 -0
  51. package/dist/commands/push.js.map +1 -0
  52. package/dist/commands/reflog.d.ts +2 -0
  53. package/dist/commands/reflog.js +162 -0
  54. package/dist/commands/reflog.js.map +1 -0
  55. package/dist/commands/repo-init.d.ts +2 -0
  56. package/dist/commands/repo-init.js +466 -0
  57. package/dist/commands/repo-init.js.map +1 -0
  58. package/dist/commands/revert.d.ts +7 -0
  59. package/dist/commands/revert.js +694 -0
  60. package/dist/commands/revert.js.map +1 -0
  61. package/dist/commands/setup.d.ts +2 -0
  62. package/dist/commands/setup.js +86 -0
  63. package/dist/commands/setup.js.map +1 -0
  64. package/dist/commands/stash.d.ts +2 -0
  65. package/dist/commands/stash.js +130 -0
  66. package/dist/commands/stash.js.map +1 -0
  67. package/dist/commands/sync.d.ts +2 -0
  68. package/dist/commands/sync.js +335 -0
  69. package/dist/commands/sync.js.map +1 -0
  70. package/dist/commands/tag.d.ts +2 -0
  71. package/dist/commands/tag.js +163 -0
  72. package/dist/commands/tag.js.map +1 -0
  73. package/dist/commands/validate.d.ts +2 -0
  74. package/dist/commands/validate.js +203 -0
  75. package/dist/commands/validate.js.map +1 -0
  76. package/dist/config/config.d.ts +10 -0
  77. package/dist/config/config.js +126 -0
  78. package/dist/config/config.js.map +1 -0
  79. package/dist/git/ai-context-builder.d.ts +11 -0
  80. package/dist/git/ai-context-builder.js +112 -0
  81. package/dist/git/ai-context-builder.js.map +1 -0
  82. package/dist/git/convention-detector.d.ts +3 -0
  83. package/dist/git/convention-detector.js +211 -0
  84. package/dist/git/convention-detector.js.map +1 -0
  85. package/dist/git/ensure-repo.d.ts +7 -0
  86. package/dist/git/ensure-repo.js +141 -0
  87. package/dist/git/ensure-repo.js.map +1 -0
  88. package/dist/git/gitignore.d.ts +8 -0
  89. package/dist/git/gitignore.js +261 -0
  90. package/dist/git/gitignore.js.map +1 -0
  91. package/dist/git/remote-setup.d.ts +2 -0
  92. package/dist/git/remote-setup.js +129 -0
  93. package/dist/git/remote-setup.js.map +1 -0
  94. package/dist/git/repo.d.ts +73 -0
  95. package/dist/git/repo.js +308 -0
  96. package/dist/git/repo.js.map +1 -0
  97. package/dist/git/validate.d.ts +36 -0
  98. package/dist/git/validate.js +113 -0
  99. package/dist/git/validate.js.map +1 -0
  100. package/dist/providers/base.provider.d.ts +10 -0
  101. package/dist/providers/base.provider.js +40 -0
  102. package/dist/providers/base.provider.js.map +1 -0
  103. package/dist/providers/claude.provider.d.ts +14 -0
  104. package/dist/providers/claude.provider.js +85 -0
  105. package/dist/providers/claude.provider.js.map +1 -0
  106. package/dist/providers/copilot.provider.d.ts +12 -0
  107. package/dist/providers/copilot.provider.js +88 -0
  108. package/dist/providers/copilot.provider.js.map +1 -0
  109. package/dist/providers/heuristic.provider.d.ts +9 -0
  110. package/dist/providers/heuristic.provider.js +163 -0
  111. package/dist/providers/heuristic.provider.js.map +1 -0
  112. package/dist/providers/ollama.provider.d.ts +14 -0
  113. package/dist/providers/ollama.provider.js +83 -0
  114. package/dist/providers/ollama.provider.js.map +1 -0
  115. package/dist/providers/openai.provider.d.ts +14 -0
  116. package/dist/providers/openai.provider.js +84 -0
  117. package/dist/providers/openai.provider.js.map +1 -0
  118. package/dist/providers/provider.factory.d.ts +5 -0
  119. package/dist/providers/provider.factory.js +51 -0
  120. package/dist/providers/provider.factory.js.map +1 -0
  121. package/dist/security/scanner.d.ts +13 -0
  122. package/dist/security/scanner.js +138 -0
  123. package/dist/security/scanner.js.map +1 -0
  124. package/dist/types/index.d.ts +146 -0
  125. package/dist/types/index.js +2 -0
  126. package/dist/types/index.js.map +1 -0
  127. package/dist/ux/components/BranchTree.d.ts +8 -0
  128. package/dist/ux/components/BranchTree.js +57 -0
  129. package/dist/ux/components/BranchTree.js.map +1 -0
  130. package/dist/ux/components/CommitProposal.d.ts +13 -0
  131. package/dist/ux/components/CommitProposal.js +127 -0
  132. package/dist/ux/components/CommitProposal.js.map +1 -0
  133. package/dist/ux/components/DiagnosticReport.d.ts +18 -0
  134. package/dist/ux/components/DiagnosticReport.js +19 -0
  135. package/dist/ux/components/DiagnosticReport.js.map +1 -0
  136. package/dist/ux/components/ErrorBox.d.ts +7 -0
  137. package/dist/ux/components/ErrorBox.js +9 -0
  138. package/dist/ux/components/ErrorBox.js.map +1 -0
  139. package/dist/ux/components/FileSelector.d.ts +14 -0
  140. package/dist/ux/components/FileSelector.js +87 -0
  141. package/dist/ux/components/FileSelector.js.map +1 -0
  142. package/dist/ux/components/Logo.d.ts +6 -0
  143. package/dist/ux/components/Logo.js +21 -0
  144. package/dist/ux/components/Logo.js.map +1 -0
  145. package/dist/ux/components/RepoContext.d.ts +8 -0
  146. package/dist/ux/components/RepoContext.js +17 -0
  147. package/dist/ux/components/RepoContext.js.map +1 -0
  148. package/dist/ux/components/SecurityAlert.d.ts +9 -0
  149. package/dist/ux/components/SecurityAlert.js +16 -0
  150. package/dist/ux/components/SecurityAlert.js.map +1 -0
  151. package/dist/ux/components/StatusDashboard.d.ts +14 -0
  152. package/dist/ux/components/StatusDashboard.js +36 -0
  153. package/dist/ux/components/StatusDashboard.js.map +1 -0
  154. package/dist/ux/components/SuccessBox.d.ts +7 -0
  155. package/dist/ux/components/SuccessBox.js +9 -0
  156. package/dist/ux/components/SuccessBox.js.map +1 -0
  157. package/dist/ux/components/ValidationReport.d.ts +16 -0
  158. package/dist/ux/components/ValidationReport.js +19 -0
  159. package/dist/ux/components/ValidationReport.js.map +1 -0
  160. package/dist/ux/components/WarningBox.d.ts +7 -0
  161. package/dist/ux/components/WarningBox.js +9 -0
  162. package/dist/ux/components/WarningBox.js.map +1 -0
  163. package/dist/ux/display.d.ts +21 -0
  164. package/dist/ux/display.js +96 -0
  165. package/dist/ux/display.js.map +1 -0
  166. package/dist/ux/hooks/useActivation.d.ts +8 -0
  167. package/dist/ux/hooks/useActivation.js +16 -0
  168. package/dist/ux/hooks/useActivation.js.map +1 -0
  169. package/dist/ux/hooks/useSpinner.d.ts +2 -0
  170. package/dist/ux/hooks/useSpinner.js +13 -0
  171. package/dist/ux/hooks/useSpinner.js.map +1 -0
  172. package/dist/ux/menu.d.ts +7 -0
  173. package/dist/ux/menu.js +56 -0
  174. package/dist/ux/menu.js.map +1 -0
  175. package/dist/ux/prompt.d.ts +7 -0
  176. package/dist/ux/prompt.js +361 -0
  177. package/dist/ux/prompt.js.map +1 -0
  178. package/dist/ux/renderer.d.ts +9 -0
  179. package/dist/ux/renderer.js +45 -0
  180. package/dist/ux/renderer.js.map +1 -0
  181. package/dist/ux/spinner.d.ts +6 -0
  182. package/dist/ux/spinner.js +42 -0
  183. package/dist/ux/spinner.js.map +1 -0
  184. package/dist/ux/statusbar.d.ts +2 -0
  185. package/dist/ux/statusbar.js +44 -0
  186. package/dist/ux/statusbar.js.map +1 -0
  187. package/dist/ux/theme.d.ts +37 -0
  188. package/dist/ux/theme.js +55 -0
  189. package/dist/ux/theme.js.map +1 -0
  190. package/package.json +125 -0
@@ -0,0 +1,101 @@
1
+ import { spawnSync } from 'child_process';
2
+ import { ensureGitRepo } from '../git/ensure-repo.js';
3
+ import { getConfig } from '../config/config.js';
4
+ import { section, info, blank } from '../ux/display.js';
5
+ import { selectPrompt, inputPrompt } from '../ux/prompt.js';
6
+ import { isCI } from '../ux/renderer.js';
7
+ async function runInkLog(cwd, logLimit) {
8
+ const React = (await import('react')).default;
9
+ const { Box, Text } = await import('ink');
10
+ const { render } = await import('ink');
11
+ const { BranchTree } = await import('../ux/components/BranchTree.js');
12
+ const { getCurrentBranch, getRepoName } = await import('../git/repo.js');
13
+ const { theme } = await import('../ux/theme.js');
14
+ const branch = getCurrentBranch(cwd);
15
+ const repoName = getRepoName(cwd);
16
+ function LogView() {
17
+ const width = Math.min(process.stdout.columns ?? 80, 78);
18
+ return React.createElement(Box, { flexDirection: 'column', paddingX: 1, width }, React.createElement(Box, { marginBottom: 1 }, React.createElement(Text, { bold: true, color: 'white' }, repoName), React.createElement(Text, { color: theme.muted }, ' · '), React.createElement(Text, { color: theme.info }, branch), React.createElement(Text, { color: theme.muted }, ' · commit history')), React.createElement(BranchTree, { cwd, limit: logLimit, showMeta: true }));
19
+ }
20
+ const { unmount } = render(React.createElement(LogView, null));
21
+ await new Promise((r) => setTimeout(() => {
22
+ unmount();
23
+ r();
24
+ }, 80));
25
+ console.log('');
26
+ }
27
+ function runPlainLog(cwd, logLimit) {
28
+ spawnSync('git', ['log', '--graph', '--oneline', '--all', `-${logLimit}`], {
29
+ cwd,
30
+ stdio: 'inherit',
31
+ });
32
+ }
33
+ async function runFilteredLog(cwd) {
34
+ section('Filtrar historial de commits');
35
+ blank();
36
+ const author = await inputPrompt('Autor (Enter para omitir)');
37
+ const since = await inputPrompt('Desde fecha (ej: "2024-01-01", "1 week ago", Enter para omitir)');
38
+ const until = await inputPrompt('Hasta fecha (ej: "2024-12-31", Enter para omitir)');
39
+ const path = await inputPrompt('Fichero/directorio (Enter para omitir)');
40
+ const grep = await inputPrompt('Buscar en mensaje (Enter para omitir)');
41
+ const args = ['log', '--oneline', '--graph', '-50'];
42
+ if (author.trim())
43
+ args.push(`--author=${author.trim()}`);
44
+ if (since.trim())
45
+ args.push(`--since=${since.trim()}`);
46
+ if (until.trim())
47
+ args.push(`--until=${until.trim()}`);
48
+ if (grep.trim())
49
+ args.push(`--grep=${grep.trim()}`);
50
+ if (path.trim())
51
+ args.push('--', path.trim());
52
+ blank();
53
+ section('Resultados');
54
+ const result = spawnSync('git', args, { cwd, encoding: 'utf-8', stdio: 'pipe' });
55
+ if (!result.stdout?.trim()) {
56
+ info('No se encontraron commits con los filtros aplicados.');
57
+ return;
58
+ }
59
+ const filters = [];
60
+ if (author.trim())
61
+ filters.push(`autor: ${author}`);
62
+ if (since.trim())
63
+ filters.push(`desde: ${since}`);
64
+ if (until.trim())
65
+ filters.push(`hasta: ${until}`);
66
+ if (path.trim())
67
+ filters.push(`path: ${path}`);
68
+ if (grep.trim())
69
+ filters.push(`mensaje: ${grep}`);
70
+ if (filters.length > 0) {
71
+ info('Filtros: ' + filters.join(' · '));
72
+ blank();
73
+ }
74
+ const lines = result.stdout.split('\n').filter(Boolean);
75
+ lines.forEach((line) => console.log(line));
76
+ blank();
77
+ info(`${lines.length} resultado(s)`);
78
+ }
79
+ export async function runLog() {
80
+ const cwd = process.cwd();
81
+ if (!(await ensureGitRepo(cwd)))
82
+ return;
83
+ const config = getConfig();
84
+ const logLimit = config.ui?.logLimit ?? 25;
85
+ if (isCI()) {
86
+ runPlainLog(cwd, logLimit);
87
+ return;
88
+ }
89
+ const choice = await selectPrompt('¿Qué quieres ver?', [
90
+ 'Ver historial completo',
91
+ 'Filtrar historial',
92
+ 'Salir',
93
+ ]);
94
+ if (choice === 'Ver historial completo') {
95
+ await runInkLog(cwd, logLimit);
96
+ }
97
+ else if (choice === 'Filtrar historial') {
98
+ await runFilteredLog(cwd);
99
+ }
100
+ }
101
+ //# sourceMappingURL=log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/commands/log.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runMenu(): Promise<void>;
2
+ //# sourceMappingURL=menu.d.ts.map
@@ -0,0 +1,297 @@
1
+ import { readFileSync } from 'fs';
2
+ import { fileURLToPath } from 'url';
3
+ import { dirname, join } from 'path';
4
+ import { getConfig } from '../config/config.js';
5
+ import { detectConvention } from '../git/convention-detector.js';
6
+ import { getAheadBehindCount, buildRepoContext, getCurrentBranch, getLastCommit, getLastFetchTime, getRepoName, getStagedFiles, getUnstagedFiles, getUntrackedFiles, getUpstream, hasMergeConflicts, isGitRepo, } from '../git/repo.js';
7
+ import { isCI } from '../ux/renderer.js';
8
+ import { blank, error, header, info, keyValue, section, success, warning } from '../ux/display.js';
9
+ const __filename = fileURLToPath(import.meta.url);
10
+ const __dirname = dirname(__filename);
11
+ // ── Relative time helper ───────────────────────────────────────────────────
12
+ function relativeTime(d) {
13
+ const s = Math.floor((Date.now() - d.getTime()) / 1000);
14
+ if (s < 60)
15
+ return `${s}s ago`;
16
+ if (s < 3600)
17
+ return `${Math.floor(s / 60)}m ago`;
18
+ if (s < 86400)
19
+ return `${Math.floor(s / 3600)}h ago`;
20
+ return `${Math.floor(s / 86400)}d ago`;
21
+ }
22
+ // ── Status panel ───────────────────────────────────────────────────────────
23
+ async function printStatus(cwd) {
24
+ const config = getConfig();
25
+ const convention = await detectConvention(cwd);
26
+ const branch = getCurrentBranch(cwd);
27
+ const repoName = getRepoName(cwd);
28
+ const upstream = getUpstream(cwd);
29
+ const lastCommit = getLastCommit(cwd);
30
+ const staged = getStagedFiles(cwd);
31
+ const modified = getUnstagedFiles(cwd);
32
+ const untracked = getUntrackedFiles(cwd);
33
+ const conflicts = hasMergeConflicts(cwd);
34
+ const lastFetch = getLastFetchTime(cwd);
35
+ const { ahead, behind } = upstream ? getAheadBehindCount(upstream, cwd) : { ahead: 0, behind: 0 };
36
+ section('Context');
37
+ keyValue('Repository', repoName);
38
+ keyValue('Branch', branch);
39
+ keyValue('Convention', convention.type);
40
+ keyValue('Commitlint', convention.hasCommitlint ? 'detected' : 'not detected');
41
+ keyValue('AI Provider', config.ai.provider);
42
+ blank();
43
+ section('Status');
44
+ if (lastCommit) {
45
+ const msg = lastCommit.message.length > 50 ? lastCommit.message.slice(0, 48) + '…' : lastCommit.message;
46
+ keyValue('Last commit', `${lastCommit.shortSha} "${msg}" (${lastCommit.ago})`);
47
+ }
48
+ if (upstream) {
49
+ const parts = [];
50
+ if (ahead > 0)
51
+ parts.push(`↑ ${ahead} to push`);
52
+ if (behind > 0)
53
+ parts.push(`↓ ${behind} to pull`);
54
+ if (parts.length === 0)
55
+ parts.push('in sync ✔');
56
+ const fetchNote = lastFetch ? `fetched ${relativeTime(lastFetch)}` : 'never fetched';
57
+ const syncStr = `${upstream} · ${parts.join(' ')} · ${fetchNote}`;
58
+ if (behind > 0 || conflicts)
59
+ warning(`Remote: ${syncStr}`);
60
+ else if (ahead > 0)
61
+ keyValue('Remote', syncStr);
62
+ else
63
+ success(`Remote: ${syncStr}`);
64
+ }
65
+ else {
66
+ info('Remote: no upstream configured → option r');
67
+ }
68
+ const hasChanges = staged.length > 0 || modified.length > 0 || untracked.length > 0 || conflicts;
69
+ if (hasChanges) {
70
+ const parts = [];
71
+ if (staged.length > 0)
72
+ parts.push(`● ${staged.length} staged`);
73
+ if (modified.length > 0)
74
+ parts.push(`△ ${modified.length} modified`);
75
+ if (untracked.length > 0)
76
+ parts.push(`○ ${untracked.length} untracked`);
77
+ if (conflicts)
78
+ parts.push('✖ CONFLICTS');
79
+ const line = parts.join(' · ');
80
+ if (conflicts)
81
+ error(`Working tree: ${line}`);
82
+ else if (staged.length > 0 || modified.length > 0)
83
+ warning(`Working tree: ${line}`);
84
+ else
85
+ keyValue('Working tree', line);
86
+ }
87
+ else {
88
+ success('Working tree: clean');
89
+ }
90
+ const hints = [];
91
+ if (conflicts)
92
+ hints.push('✖ Conflicts detected → option 7 (merge) or u (undo)');
93
+ if (staged.length > 0)
94
+ hints.push(`● ${staged.length} staged → option 2 to commit`);
95
+ else if (modified.length > 0 || untracked.length > 0)
96
+ hints.push(`△ ${modified.length + untracked.length} file(s) changed → option 2 to commit`);
97
+ if (ahead > 0)
98
+ hints.push(`↑ ${ahead} commit(s) to push → option 6`);
99
+ if (behind > 0)
100
+ hints.push(`↓ ${behind} commit(s) from remote → option s to sync`);
101
+ if (hints.length > 0) {
102
+ blank();
103
+ hints.forEach((h) => console.log(` ${h}`));
104
+ }
105
+ blank();
106
+ }
107
+ // ── Ink-based interactive menu (TTY) ──────────────────────────────────────
108
+ async function runInkMenu(pkg) {
109
+ const { renderInteractive } = await import('../ux/renderer.js');
110
+ const React = (await import('react')).default;
111
+ const { useState, useEffect } = await import('react');
112
+ const { Select } = await import('@inkjs/ui');
113
+ const { Box, Text } = await import('ink');
114
+ const { theme } = await import('../ux/theme.js');
115
+ const { StatusDashboard } = await import('../ux/components/StatusDashboard.js');
116
+ const cwd = process.cwd();
117
+ const config = getConfig();
118
+ const convention = await detectConvention(cwd);
119
+ const ctx = buildRepoContext(config.git.protectedBranches, config.commit.ticketPattern, convention, cwd);
120
+ const lastCommit = getLastCommit(cwd);
121
+ const lastFetch = getLastFetchTime(cwd);
122
+ const options = [
123
+ { label: '📌 Branch manager (create, switch, delete…)', value: '1' },
124
+ { label: '✏️ Crear commit asistido', value: '2' },
125
+ { label: '💬 Generar mensaje de commit (sin commit)', value: '3' },
126
+ { label: '📋 Generar descripción de PR', value: '4' },
127
+ { label: '🔍 Validar repositorio', value: '5' },
128
+ { label: '🚀 Push validado', value: '6' },
129
+ { label: '🔄 Sync con remote', value: 's' },
130
+ { label: '🔀 Merge asistido', value: '7' },
131
+ { label: '↩️ Undo / revert wizard', value: 'u' },
132
+ { label: '📈 Ver historial de commits', value: 'l' },
133
+ { label: '⚙️ Configuración', value: '8' },
134
+ { label: '🔗 Aliases & hooks', value: '9' },
135
+ { label: '📁 Repository setup wizard', value: 'r' },
136
+ { label: '🩺 Diagnóstico (doctor)', value: 'd' },
137
+ { label: '❌ Salir', value: '0' },
138
+ ];
139
+ function MenuApp({ onSelect }) {
140
+ const [active, setActive] = useState(false);
141
+ useEffect(() => {
142
+ const t = setTimeout(() => setActive(true), 120);
143
+ return () => clearTimeout(t);
144
+ }, []);
145
+ return React.createElement(Box, { flexDirection: 'column', paddingX: 1 }, React.createElement(StatusDashboard, {
146
+ ctx,
147
+ lastCommit,
148
+ lastFetch,
149
+ version: pkg.version,
150
+ provider: config.ai.provider,
151
+ cwd,
152
+ graphLimit: 3,
153
+ }), React.createElement(Box, {
154
+ flexDirection: 'column',
155
+ borderStyle: 'round',
156
+ borderColor: theme.border,
157
+ paddingX: 1,
158
+ marginBottom: 1,
159
+ }, React.createElement(Text, { bold: true, color: theme.muted }, '¿Qué quieres hacer?'), React.createElement(Text, { color: theme.muted }, ''), React.createElement(Select, { isDisabled: !active, options, onChange: onSelect })), React.createElement(Text, { color: theme.muted }, ' ↑↓ navegar Enter seleccionar'));
160
+ }
161
+ const choice = await renderInteractive((resolve) => React.createElement(MenuApp, { onSelect: resolve }));
162
+ await handleChoice(choice);
163
+ }
164
+ async function handleChoice(choice) {
165
+ switch (choice) {
166
+ case '1': {
167
+ const { runBranch } = await import('./branch.js');
168
+ await runBranch();
169
+ break;
170
+ }
171
+ case '2': {
172
+ const { runCommit } = await import('./commit.js');
173
+ await runCommit();
174
+ break;
175
+ }
176
+ case '3': {
177
+ const { runCommitMessage } = await import('./commit-message.js');
178
+ await runCommitMessage({});
179
+ break;
180
+ }
181
+ case '4': {
182
+ const { runPR } = await import('./pr.js');
183
+ await runPR();
184
+ break;
185
+ }
186
+ case '5': {
187
+ const { runValidate } = await import('./validate.js');
188
+ await runValidate();
189
+ break;
190
+ }
191
+ case '6': {
192
+ const { runPush } = await import('./push.js');
193
+ await runPush();
194
+ break;
195
+ }
196
+ case 's': {
197
+ const { runSync } = await import('./sync.js');
198
+ await runSync();
199
+ break;
200
+ }
201
+ case '7': {
202
+ const { runMerge } = await import('./merge.js');
203
+ await runMerge();
204
+ break;
205
+ }
206
+ case 'u': {
207
+ const { runRevert } = await import('./revert.js');
208
+ await runRevert();
209
+ break;
210
+ }
211
+ case 'l': {
212
+ const { runLog } = await import('./log.js');
213
+ await runLog();
214
+ break;
215
+ }
216
+ case '8': {
217
+ const { runConfig } = await import('./config.js');
218
+ await runConfig();
219
+ break;
220
+ }
221
+ case '9': {
222
+ const { runAliases } = await import('./aliases.js');
223
+ await runAliases();
224
+ break;
225
+ }
226
+ case 'r': {
227
+ const { runRepoInit } = await import('./repo-init.js');
228
+ await runRepoInit();
229
+ break;
230
+ }
231
+ case 'd': {
232
+ const { runDoctor } = await import('./doctor.js');
233
+ await runDoctor();
234
+ break;
235
+ }
236
+ case '0':
237
+ process.exit(0);
238
+ break;
239
+ default:
240
+ info('Unknown option.');
241
+ break;
242
+ }
243
+ }
244
+ // ── Help screen ────────────────────────────────────────────────────────────
245
+ function showHelp() {
246
+ blank();
247
+ section('Available Commands');
248
+ const commands = [
249
+ ['gsf', 'Open interactive menu (default)'],
250
+ ['gsf setup', 'Interactive setup wizard'],
251
+ ['gsf branch', 'Branch manager: create, switch, list, delete, rename'],
252
+ ['gsf commit', 'Guided commit assistant'],
253
+ ['gsf commit-message', 'Generate commit message without committing'],
254
+ ['gsf pr', 'Generate PR title and description'],
255
+ ['gsf validate', 'Validate repository state'],
256
+ ['gsf push', 'Validated push with confirmation'],
257
+ ['gsf sync', 'Fetch + sync status + pull/merge/conflict guide'],
258
+ ['gsf merge', 'Assisted merge with conflict handling'],
259
+ ['gsf revert', 'Undo / revert wizard (remove files, reset commits…)'],
260
+ ['gsf config', 'Edit global and local configuration'],
261
+ ['gsf aliases', 'Manage optional command aliases and hooks'],
262
+ ['gsf install-hooks', 'Install Git hooks in .git/hooks/'],
263
+ ['gsf repo-init', 'Repository setup wizard (branch, identity, .gitignore, remote, hooks)'],
264
+ ['gsf info', 'Show current repository context'],
265
+ ['gsf doctor', 'Full environment diagnostic'],
266
+ ];
267
+ for (const [cmd, desc] of commands) {
268
+ console.log(` ${cmd.padEnd(24)} ${desc}`);
269
+ }
270
+ blank();
271
+ }
272
+ // ── CI / plain menu ────────────────────────────────────────────────────────
273
+ async function runPlainMenu(pkg) {
274
+ header('', pkg.version);
275
+ const cwd = process.cwd();
276
+ if (isGitRepo(cwd)) {
277
+ await printStatus(cwd);
278
+ }
279
+ else {
280
+ info('Not a Git repository.');
281
+ blank();
282
+ }
283
+ showHelp();
284
+ }
285
+ // ── Entry point ────────────────────────────────────────────────────────────
286
+ export async function runMenu() {
287
+ const pkg = JSON.parse(readFileSync(join(__dirname, '../../package.json'), 'utf-8'));
288
+ if (isCI()) {
289
+ await runPlainMenu(pkg);
290
+ return;
291
+ }
292
+ // Loop: after each action the menu re-renders with fresh repo data
293
+ while (true) {
294
+ await runInkMenu(pkg);
295
+ }
296
+ }
297
+ //# sourceMappingURL=menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menu.js","sourceRoot":"","sources":["../../src/commands/menu.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface RunOptions {
2
+ dryRun?: boolean;
3
+ yes?: boolean;
4
+ }
5
+ export declare function runMerge(opts?: RunOptions): Promise<void>;
6
+ //# sourceMappingURL=merge.d.ts.map
@@ -0,0 +1,128 @@
1
+ import { spawnSync } from 'child_process';
2
+ import { getCurrentBranch, hasUncommittedChanges, hasMergeConflicts } from '../git/repo.js';
3
+ import { validateRef } from '../git/validate.js';
4
+ import { getConfig } from '../config/config.js';
5
+ import { ensureGitRepo } from '../git/ensure-repo.js';
6
+ import { blank, error, info, keyValue, section, success, warning } from '../ux/display.js';
7
+ import { confirmPrompt, inputPrompt, selectPrompt } from '../ux/prompt.js';
8
+ import { startSpinner, succeedSpinner, failSpinner } from '../ux/spinner.js';
9
+ export async function runMerge(opts = {}) {
10
+ const cwd = process.cwd();
11
+ if (opts.dryRun)
12
+ info('[DRY RUN] No changes will be made.\n');
13
+ if (!(await ensureGitRepo(cwd)))
14
+ return;
15
+ if (hasUncommittedChanges(cwd)) {
16
+ error('You have uncommitted changes. Commit or stash them before merging.');
17
+ return;
18
+ }
19
+ const config = getConfig();
20
+ const currentBranch = getCurrentBranch(cwd);
21
+ // List branches
22
+ const branchResult = spawnSync('git', ['branch', '-a', '--format=%(refname:short)'], {
23
+ cwd,
24
+ encoding: 'utf-8',
25
+ });
26
+ const _allBranches = (branchResult.stdout ?? '')
27
+ .split('\n')
28
+ .map((b) => b.trim())
29
+ .filter((b) => b && b !== currentBranch && !b.includes('HEAD'));
30
+ section('Merge Assistant');
31
+ keyValue('Current branch', currentBranch);
32
+ blank();
33
+ const sourceBranch = await inputPrompt(`Branch to merge INTO "${currentBranch}"`, config.git.defaultBaseBranches[0]);
34
+ const refCheck = validateRef(sourceBranch);
35
+ if (!refCheck.valid) {
36
+ error(`Invalid ref "${sourceBranch}": ${refCheck.reason}`);
37
+ return;
38
+ }
39
+ // Fetch
40
+ startSpinner('Fetching from remote...');
41
+ const fetchResult = spawnSync('git', ['fetch'], { cwd, stdio: 'pipe' });
42
+ if (fetchResult.status === 0) {
43
+ succeedSpinner('Fetched.');
44
+ }
45
+ else {
46
+ failSpinner('Fetch failed — continuing with local state.');
47
+ }
48
+ // Show commits that will be merged
49
+ const logResult = spawnSync('git', ['log', `${currentBranch}..${sourceBranch}`, '--oneline'], {
50
+ cwd,
51
+ encoding: 'utf-8',
52
+ });
53
+ const commits = (logResult.stdout ?? '').split('\n').filter(Boolean);
54
+ section(`Commits to merge from "${sourceBranch}"`);
55
+ if (commits.length === 0) {
56
+ info('No new commits to merge.');
57
+ return;
58
+ }
59
+ commits.forEach((c) => console.log(' ' + c));
60
+ blank();
61
+ const confirmed = opts.yes || opts.dryRun
62
+ ? true
63
+ : await confirmPrompt(`Merge "${sourceBranch}" into "${currentBranch}"?`);
64
+ if (!confirmed) {
65
+ info('Merge cancelled.');
66
+ return;
67
+ }
68
+ const strategy = opts.yes
69
+ ? 'Merge commit — preserva toda la historia'
70
+ : await selectPrompt('¿Estrategia de merge?', [
71
+ 'Merge commit — preserva toda la historia',
72
+ 'Squash merge — aplasta los commits en uno',
73
+ 'Rebase — reaplica commits sobre la base',
74
+ ]);
75
+ if (opts.dryRun) {
76
+ info(`[DRY RUN] Would run: git merge ${sourceBranch}`);
77
+ info(`[DRY RUN] ${commits.length} commit(s) would be merged into "${currentBranch}".`);
78
+ info(`[DRY RUN] Strategy: ${strategy}`);
79
+ return;
80
+ }
81
+ if (strategy.startsWith('Squash')) {
82
+ const squashResult = spawnSync('git', ['merge', '--squash', sourceBranch], {
83
+ cwd,
84
+ stdio: 'inherit',
85
+ });
86
+ if (squashResult.status === 0) {
87
+ info('Cambios staged. Escribe el mensaje del commit de squash:');
88
+ const { guidedMessageBuilder } = await import('./commit.js');
89
+ const msg = await guidedMessageBuilder();
90
+ if (!msg) {
91
+ info('Merge squash cancelado.');
92
+ return;
93
+ }
94
+ spawnSync('git', ['commit', '-m', msg], { cwd, stdio: 'inherit' });
95
+ success(`Squash merge de "${sourceBranch}" completado.`);
96
+ }
97
+ }
98
+ else if (strategy.startsWith('Rebase')) {
99
+ const rebaseResult = spawnSync('git', ['rebase', sourceBranch], { cwd, stdio: 'inherit' });
100
+ if (rebaseResult.status !== 0) {
101
+ warning('Rebase en conflicto. Resuelve los conflictos y ejecuta "git rebase --continue".');
102
+ warning('Para abortar: git rebase --abort');
103
+ }
104
+ else {
105
+ success(`Rebase sobre "${sourceBranch}" completado.`);
106
+ }
107
+ }
108
+ else {
109
+ const mergeResult = spawnSync('git', ['merge', sourceBranch], { cwd, stdio: 'inherit' });
110
+ if (hasMergeConflicts(cwd)) {
111
+ warning('Merge conflicts detected. Resolve them and run "git commit" to finish.');
112
+ const conflictResult = spawnSync('git', ['diff', '--name-only', '--diff-filter=U'], {
113
+ cwd,
114
+ encoding: 'utf-8',
115
+ });
116
+ const conflicted = (conflictResult.stdout ?? '').split('\n').filter(Boolean);
117
+ section('Conflicted files');
118
+ conflicted.forEach((f) => console.log(' ' + f));
119
+ }
120
+ else if (mergeResult.status === 0) {
121
+ success(`Merge of "${sourceBranch}" completed.`);
122
+ }
123
+ else {
124
+ error('git merge failed.');
125
+ }
126
+ }
127
+ }
128
+ //# sourceMappingURL=merge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/commands/merge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runPR(): Promise<void>;
2
+ //# sourceMappingURL=pr.d.ts.map