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.
- package/CHANGELOG.md +33 -0
- package/LICENSE +21 -0
- package/README.md +130 -0
- package/bin/git-smart-flow.js +2 -0
- package/bin/gsf.js +2 -0
- package/bin/gsfc.js +3 -0
- package/bin/gsfm.js +3 -0
- package/bin/gsfp.js +3 -0
- package/bin/gsfpr.js +3 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +214 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/aliases.d.ts +2 -0
- package/dist/commands/aliases.js +37 -0
- package/dist/commands/aliases.js.map +1 -0
- package/dist/commands/branch.d.ts +2 -0
- package/dist/commands/branch.js +414 -0
- package/dist/commands/branch.js.map +1 -0
- package/dist/commands/commit-message.d.ts +7 -0
- package/dist/commands/commit-message.js +95 -0
- package/dist/commands/commit-message.js.map +1 -0
- package/dist/commands/commit.d.ts +3 -0
- package/dist/commands/commit.js +597 -0
- package/dist/commands/commit.js.map +1 -0
- package/dist/commands/config.d.ts +2 -0
- package/dist/commands/config.js +88 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/doctor.d.ts +2 -0
- package/dist/commands/doctor.js +246 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/info.d.ts +2 -0
- package/dist/commands/info.js +155 -0
- package/dist/commands/info.js.map +1 -0
- package/dist/commands/install-hooks.d.ts +2 -0
- package/dist/commands/install-hooks.js +66 -0
- package/dist/commands/install-hooks.js.map +1 -0
- package/dist/commands/log.d.ts +2 -0
- package/dist/commands/log.js +101 -0
- package/dist/commands/log.js.map +1 -0
- package/dist/commands/menu.d.ts +2 -0
- package/dist/commands/menu.js +297 -0
- package/dist/commands/menu.js.map +1 -0
- package/dist/commands/merge.d.ts +6 -0
- package/dist/commands/merge.js +128 -0
- package/dist/commands/merge.js.map +1 -0
- package/dist/commands/pr.d.ts +2 -0
- package/dist/commands/pr.js +731 -0
- package/dist/commands/pr.js.map +1 -0
- package/dist/commands/push.d.ts +7 -0
- package/dist/commands/push.js +225 -0
- package/dist/commands/push.js.map +1 -0
- package/dist/commands/reflog.d.ts +2 -0
- package/dist/commands/reflog.js +162 -0
- package/dist/commands/reflog.js.map +1 -0
- package/dist/commands/repo-init.d.ts +2 -0
- package/dist/commands/repo-init.js +466 -0
- package/dist/commands/repo-init.js.map +1 -0
- package/dist/commands/revert.d.ts +7 -0
- package/dist/commands/revert.js +694 -0
- package/dist/commands/revert.js.map +1 -0
- package/dist/commands/setup.d.ts +2 -0
- package/dist/commands/setup.js +86 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/stash.d.ts +2 -0
- package/dist/commands/stash.js +130 -0
- package/dist/commands/stash.js.map +1 -0
- package/dist/commands/sync.d.ts +2 -0
- package/dist/commands/sync.js +335 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/tag.d.ts +2 -0
- package/dist/commands/tag.js +163 -0
- package/dist/commands/tag.js.map +1 -0
- package/dist/commands/validate.d.ts +2 -0
- package/dist/commands/validate.js +203 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/config/config.d.ts +10 -0
- package/dist/config/config.js +126 -0
- package/dist/config/config.js.map +1 -0
- package/dist/git/ai-context-builder.d.ts +11 -0
- package/dist/git/ai-context-builder.js +112 -0
- package/dist/git/ai-context-builder.js.map +1 -0
- package/dist/git/convention-detector.d.ts +3 -0
- package/dist/git/convention-detector.js +211 -0
- package/dist/git/convention-detector.js.map +1 -0
- package/dist/git/ensure-repo.d.ts +7 -0
- package/dist/git/ensure-repo.js +141 -0
- package/dist/git/ensure-repo.js.map +1 -0
- package/dist/git/gitignore.d.ts +8 -0
- package/dist/git/gitignore.js +261 -0
- package/dist/git/gitignore.js.map +1 -0
- package/dist/git/remote-setup.d.ts +2 -0
- package/dist/git/remote-setup.js +129 -0
- package/dist/git/remote-setup.js.map +1 -0
- package/dist/git/repo.d.ts +73 -0
- package/dist/git/repo.js +308 -0
- package/dist/git/repo.js.map +1 -0
- package/dist/git/validate.d.ts +36 -0
- package/dist/git/validate.js +113 -0
- package/dist/git/validate.js.map +1 -0
- package/dist/providers/base.provider.d.ts +10 -0
- package/dist/providers/base.provider.js +40 -0
- package/dist/providers/base.provider.js.map +1 -0
- package/dist/providers/claude.provider.d.ts +14 -0
- package/dist/providers/claude.provider.js +85 -0
- package/dist/providers/claude.provider.js.map +1 -0
- package/dist/providers/copilot.provider.d.ts +12 -0
- package/dist/providers/copilot.provider.js +88 -0
- package/dist/providers/copilot.provider.js.map +1 -0
- package/dist/providers/heuristic.provider.d.ts +9 -0
- package/dist/providers/heuristic.provider.js +163 -0
- package/dist/providers/heuristic.provider.js.map +1 -0
- package/dist/providers/ollama.provider.d.ts +14 -0
- package/dist/providers/ollama.provider.js +83 -0
- package/dist/providers/ollama.provider.js.map +1 -0
- package/dist/providers/openai.provider.d.ts +14 -0
- package/dist/providers/openai.provider.js +84 -0
- package/dist/providers/openai.provider.js.map +1 -0
- package/dist/providers/provider.factory.d.ts +5 -0
- package/dist/providers/provider.factory.js +51 -0
- package/dist/providers/provider.factory.js.map +1 -0
- package/dist/security/scanner.d.ts +13 -0
- package/dist/security/scanner.js +138 -0
- package/dist/security/scanner.js.map +1 -0
- package/dist/types/index.d.ts +146 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/ux/components/BranchTree.d.ts +8 -0
- package/dist/ux/components/BranchTree.js +57 -0
- package/dist/ux/components/BranchTree.js.map +1 -0
- package/dist/ux/components/CommitProposal.d.ts +13 -0
- package/dist/ux/components/CommitProposal.js +127 -0
- package/dist/ux/components/CommitProposal.js.map +1 -0
- package/dist/ux/components/DiagnosticReport.d.ts +18 -0
- package/dist/ux/components/DiagnosticReport.js +19 -0
- package/dist/ux/components/DiagnosticReport.js.map +1 -0
- package/dist/ux/components/ErrorBox.d.ts +7 -0
- package/dist/ux/components/ErrorBox.js +9 -0
- package/dist/ux/components/ErrorBox.js.map +1 -0
- package/dist/ux/components/FileSelector.d.ts +14 -0
- package/dist/ux/components/FileSelector.js +87 -0
- package/dist/ux/components/FileSelector.js.map +1 -0
- package/dist/ux/components/Logo.d.ts +6 -0
- package/dist/ux/components/Logo.js +21 -0
- package/dist/ux/components/Logo.js.map +1 -0
- package/dist/ux/components/RepoContext.d.ts +8 -0
- package/dist/ux/components/RepoContext.js +17 -0
- package/dist/ux/components/RepoContext.js.map +1 -0
- package/dist/ux/components/SecurityAlert.d.ts +9 -0
- package/dist/ux/components/SecurityAlert.js +16 -0
- package/dist/ux/components/SecurityAlert.js.map +1 -0
- package/dist/ux/components/StatusDashboard.d.ts +14 -0
- package/dist/ux/components/StatusDashboard.js +36 -0
- package/dist/ux/components/StatusDashboard.js.map +1 -0
- package/dist/ux/components/SuccessBox.d.ts +7 -0
- package/dist/ux/components/SuccessBox.js +9 -0
- package/dist/ux/components/SuccessBox.js.map +1 -0
- package/dist/ux/components/ValidationReport.d.ts +16 -0
- package/dist/ux/components/ValidationReport.js +19 -0
- package/dist/ux/components/ValidationReport.js.map +1 -0
- package/dist/ux/components/WarningBox.d.ts +7 -0
- package/dist/ux/components/WarningBox.js +9 -0
- package/dist/ux/components/WarningBox.js.map +1 -0
- package/dist/ux/display.d.ts +21 -0
- package/dist/ux/display.js +96 -0
- package/dist/ux/display.js.map +1 -0
- package/dist/ux/hooks/useActivation.d.ts +8 -0
- package/dist/ux/hooks/useActivation.js +16 -0
- package/dist/ux/hooks/useActivation.js.map +1 -0
- package/dist/ux/hooks/useSpinner.d.ts +2 -0
- package/dist/ux/hooks/useSpinner.js +13 -0
- package/dist/ux/hooks/useSpinner.js.map +1 -0
- package/dist/ux/menu.d.ts +7 -0
- package/dist/ux/menu.js +56 -0
- package/dist/ux/menu.js.map +1 -0
- package/dist/ux/prompt.d.ts +7 -0
- package/dist/ux/prompt.js +361 -0
- package/dist/ux/prompt.js.map +1 -0
- package/dist/ux/renderer.d.ts +9 -0
- package/dist/ux/renderer.js +45 -0
- package/dist/ux/renderer.js.map +1 -0
- package/dist/ux/spinner.d.ts +6 -0
- package/dist/ux/spinner.js +42 -0
- package/dist/ux/spinner.js.map +1 -0
- package/dist/ux/statusbar.d.ts +2 -0
- package/dist/ux/statusbar.js +44 -0
- package/dist/ux/statusbar.js.map +1 -0
- package/dist/ux/theme.d.ts +37 -0
- package/dist/ux/theme.js +55 -0
- package/dist/ux/theme.js.map +1 -0
- package/package.json +125 -0
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync } from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
export function detectProjectType(cwd) {
|
|
4
|
+
if (existsSync(join(cwd, 'package.json')))
|
|
5
|
+
return 'node';
|
|
6
|
+
if (existsSync(join(cwd, 'requirements.txt')) ||
|
|
7
|
+
existsSync(join(cwd, 'pyproject.toml')) ||
|
|
8
|
+
existsSync(join(cwd, 'setup.py')))
|
|
9
|
+
return 'python';
|
|
10
|
+
if (existsSync(join(cwd, 'pom.xml')) || existsSync(join(cwd, 'build.gradle')))
|
|
11
|
+
return 'java';
|
|
12
|
+
if (existsSync(join(cwd, 'go.mod')))
|
|
13
|
+
return 'go';
|
|
14
|
+
if (existsSync(join(cwd, 'Cargo.toml')))
|
|
15
|
+
return 'rust';
|
|
16
|
+
return 'generic';
|
|
17
|
+
}
|
|
18
|
+
export const PROJECT_TYPE_LABELS = {
|
|
19
|
+
node: 'Node.js / TypeScript / JavaScript',
|
|
20
|
+
python: 'Python',
|
|
21
|
+
java: 'Java / Kotlin (Maven / Gradle)',
|
|
22
|
+
go: 'Go',
|
|
23
|
+
rust: 'Rust',
|
|
24
|
+
generic: 'Generic (editor files, env, logs)',
|
|
25
|
+
};
|
|
26
|
+
const TEMPLATES = {
|
|
27
|
+
node: `# Dependencies
|
|
28
|
+
node_modules/
|
|
29
|
+
.pnp
|
|
30
|
+
.pnp.js
|
|
31
|
+
|
|
32
|
+
# Build output
|
|
33
|
+
dist/
|
|
34
|
+
build/
|
|
35
|
+
out/
|
|
36
|
+
.next/
|
|
37
|
+
.nuxt/
|
|
38
|
+
|
|
39
|
+
# Environment variables — NEVER commit secrets
|
|
40
|
+
.env
|
|
41
|
+
.env.local
|
|
42
|
+
.env.*.local
|
|
43
|
+
.env.production
|
|
44
|
+
|
|
45
|
+
# Package manager locks (keep only the one you use)
|
|
46
|
+
# yarn.lock
|
|
47
|
+
# pnpm-lock.yaml
|
|
48
|
+
|
|
49
|
+
# Logs
|
|
50
|
+
logs/
|
|
51
|
+
*.log
|
|
52
|
+
npm-debug.log*
|
|
53
|
+
yarn-debug.log*
|
|
54
|
+
pnpm-debug.log*
|
|
55
|
+
lerna-debug.log*
|
|
56
|
+
|
|
57
|
+
# Runtime data
|
|
58
|
+
pids/
|
|
59
|
+
*.pid
|
|
60
|
+
*.seed
|
|
61
|
+
*.pid.lock
|
|
62
|
+
|
|
63
|
+
# Test & coverage
|
|
64
|
+
coverage/
|
|
65
|
+
.nyc_output/
|
|
66
|
+
*.lcov
|
|
67
|
+
|
|
68
|
+
# IDE / Editor
|
|
69
|
+
.vscode/
|
|
70
|
+
.idea/
|
|
71
|
+
*.swp
|
|
72
|
+
*.swo
|
|
73
|
+
.project
|
|
74
|
+
.classpath
|
|
75
|
+
|
|
76
|
+
# OS
|
|
77
|
+
.DS_Store
|
|
78
|
+
Thumbs.db
|
|
79
|
+
Desktop.ini
|
|
80
|
+
|
|
81
|
+
# Temp
|
|
82
|
+
*.tmp
|
|
83
|
+
*.temp
|
|
84
|
+
.cache/
|
|
85
|
+
`,
|
|
86
|
+
python: `# Byte-compiled / optimized / DLL files
|
|
87
|
+
__pycache__/
|
|
88
|
+
*.py[cod]
|
|
89
|
+
*$py.class
|
|
90
|
+
*.pyo
|
|
91
|
+
|
|
92
|
+
# Distribution / packaging
|
|
93
|
+
dist/
|
|
94
|
+
build/
|
|
95
|
+
*.egg-info/
|
|
96
|
+
.eggs/
|
|
97
|
+
*.whl
|
|
98
|
+
|
|
99
|
+
# Virtual environments
|
|
100
|
+
.venv/
|
|
101
|
+
venv/
|
|
102
|
+
env/
|
|
103
|
+
.Python
|
|
104
|
+
|
|
105
|
+
# Environment variables
|
|
106
|
+
.env
|
|
107
|
+
.env.*
|
|
108
|
+
|
|
109
|
+
# Test & coverage
|
|
110
|
+
.coverage
|
|
111
|
+
htmlcov/
|
|
112
|
+
.pytest_cache/
|
|
113
|
+
.tox/
|
|
114
|
+
|
|
115
|
+
# Type checking
|
|
116
|
+
.mypy_cache/
|
|
117
|
+
.pytype/
|
|
118
|
+
|
|
119
|
+
# IDE / Editor
|
|
120
|
+
.vscode/
|
|
121
|
+
.idea/
|
|
122
|
+
*.swp
|
|
123
|
+
|
|
124
|
+
# OS
|
|
125
|
+
.DS_Store
|
|
126
|
+
Thumbs.db
|
|
127
|
+
`,
|
|
128
|
+
java: `# Compiled output
|
|
129
|
+
*.class
|
|
130
|
+
target/
|
|
131
|
+
build/
|
|
132
|
+
out/
|
|
133
|
+
|
|
134
|
+
# Package files
|
|
135
|
+
*.jar
|
|
136
|
+
*.war
|
|
137
|
+
*.ear
|
|
138
|
+
|
|
139
|
+
# Maven wrapper
|
|
140
|
+
.mvn/wrapper/maven-wrapper.jar
|
|
141
|
+
!.mvn/wrapper/maven-wrapper.properties
|
|
142
|
+
|
|
143
|
+
# Gradle
|
|
144
|
+
.gradle/
|
|
145
|
+
gradle-app.setting
|
|
146
|
+
!gradle-wrapper.jar
|
|
147
|
+
.gradletasknamecache
|
|
148
|
+
local.properties
|
|
149
|
+
|
|
150
|
+
# Environment
|
|
151
|
+
.env
|
|
152
|
+
.env.*
|
|
153
|
+
|
|
154
|
+
# IDE / Editor
|
|
155
|
+
.vscode/
|
|
156
|
+
.idea/
|
|
157
|
+
*.iml
|
|
158
|
+
*.iws
|
|
159
|
+
.project
|
|
160
|
+
.classpath
|
|
161
|
+
.settings/
|
|
162
|
+
|
|
163
|
+
# OS
|
|
164
|
+
.DS_Store
|
|
165
|
+
Thumbs.db
|
|
166
|
+
`,
|
|
167
|
+
go: `# Binaries
|
|
168
|
+
*.exe
|
|
169
|
+
*.exe~
|
|
170
|
+
*.dll
|
|
171
|
+
*.so
|
|
172
|
+
*.dylib
|
|
173
|
+
|
|
174
|
+
# Test binary
|
|
175
|
+
*.test
|
|
176
|
+
|
|
177
|
+
# Output
|
|
178
|
+
bin/
|
|
179
|
+
dist/
|
|
180
|
+
|
|
181
|
+
# Vendor (if not using modules)
|
|
182
|
+
vendor/
|
|
183
|
+
|
|
184
|
+
# Environment
|
|
185
|
+
.env
|
|
186
|
+
.env.*
|
|
187
|
+
|
|
188
|
+
# IDE / Editor
|
|
189
|
+
.vscode/
|
|
190
|
+
.idea/
|
|
191
|
+
*.swp
|
|
192
|
+
|
|
193
|
+
# OS
|
|
194
|
+
.DS_Store
|
|
195
|
+
Thumbs.db
|
|
196
|
+
`,
|
|
197
|
+
rust: `# Compiled output
|
|
198
|
+
/target/
|
|
199
|
+
**/*.rs.bk
|
|
200
|
+
|
|
201
|
+
# Cargo lock (keep for binaries; add to .gitignore for libraries)
|
|
202
|
+
# Cargo.lock
|
|
203
|
+
|
|
204
|
+
# Environment
|
|
205
|
+
.env
|
|
206
|
+
.env.*
|
|
207
|
+
|
|
208
|
+
# IDE / Editor
|
|
209
|
+
.vscode/
|
|
210
|
+
.idea/
|
|
211
|
+
*.swp
|
|
212
|
+
|
|
213
|
+
# OS
|
|
214
|
+
.DS_Store
|
|
215
|
+
Thumbs.db
|
|
216
|
+
`,
|
|
217
|
+
generic: `# Environment variables — NEVER commit secrets
|
|
218
|
+
.env
|
|
219
|
+
.env.*
|
|
220
|
+
.env.local
|
|
221
|
+
|
|
222
|
+
# Logs
|
|
223
|
+
*.log
|
|
224
|
+
logs/
|
|
225
|
+
|
|
226
|
+
# Build output
|
|
227
|
+
dist/
|
|
228
|
+
build/
|
|
229
|
+
out/
|
|
230
|
+
|
|
231
|
+
# IDE / Editor
|
|
232
|
+
.vscode/
|
|
233
|
+
.idea/
|
|
234
|
+
*.swp
|
|
235
|
+
*.swo
|
|
236
|
+
|
|
237
|
+
# OS
|
|
238
|
+
.DS_Store
|
|
239
|
+
Thumbs.db
|
|
240
|
+
Desktop.ini
|
|
241
|
+
|
|
242
|
+
# Temp
|
|
243
|
+
*.tmp
|
|
244
|
+
*.temp
|
|
245
|
+
.cache/
|
|
246
|
+
`,
|
|
247
|
+
};
|
|
248
|
+
export function hasGitignore(cwd) {
|
|
249
|
+
return existsSync(join(cwd, '.gitignore'));
|
|
250
|
+
}
|
|
251
|
+
export function readGitignore(cwd) {
|
|
252
|
+
const path = join(cwd, '.gitignore');
|
|
253
|
+
return existsSync(path) ? readFileSync(path, 'utf-8') : '';
|
|
254
|
+
}
|
|
255
|
+
export function writeGitignore(content, cwd) {
|
|
256
|
+
writeFileSync(join(cwd, '.gitignore'), content, 'utf-8');
|
|
257
|
+
}
|
|
258
|
+
export function getTemplate(type) {
|
|
259
|
+
return TEMPLATES[type];
|
|
260
|
+
}
|
|
261
|
+
//# sourceMappingURL=gitignore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitignore.js","sourceRoot":"","sources":["../../src/git/gitignore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAI5B,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC;IACzD,IACE,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;QACzC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;QACvC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAEjC,OAAO,QAAQ,CAAC;IAClB,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC;IAC7F,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACjD,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC;IACvD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAgC;IAC9D,IAAI,EAAE,mCAAmC;IACzC,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,gCAAgC;IACtC,EAAE,EAAE,IAAI;IACR,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,mCAAmC;CAC7C,CAAC;AAEF,MAAM,SAAS,GAAgC;IAC7C,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0DP;IAEC,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyCT;IAEC,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsCP;IAEC,EAAE,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BL;IAEC,IAAI,EAAE;;;;;;;;;;;;;;;;;;;CAmBP;IAEC,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BV;CACA,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACrC,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,GAAW;IACzD,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAiB;IAC3C,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { spawnSync } from 'child_process';
|
|
2
|
+
import { basename } from 'path';
|
|
3
|
+
import { blank, info, section, success, warning } from '../ux/display.js';
|
|
4
|
+
import { confirmPrompt, inputPrompt, selectPrompt } from '../ux/prompt.js';
|
|
5
|
+
function isGhAvailable() {
|
|
6
|
+
return spawnSync('gh', ['--version'], { encoding: 'utf-8' }).status === 0;
|
|
7
|
+
}
|
|
8
|
+
function isGhAuthenticated() {
|
|
9
|
+
return spawnSync('gh', ['auth', 'status'], { encoding: 'utf-8' }).status === 0;
|
|
10
|
+
}
|
|
11
|
+
function gitRemoteAdd(name, url, cwd) {
|
|
12
|
+
return spawnSync('git', ['remote', 'add', name, url], { cwd, encoding: 'utf-8' }).status === 0;
|
|
13
|
+
}
|
|
14
|
+
function getExistingRemotes(cwd) {
|
|
15
|
+
const r = spawnSync('git', ['remote'], { cwd, encoding: 'utf-8' });
|
|
16
|
+
return r.status === 0 ? r.stdout.trim().split('\n').filter(Boolean) : [];
|
|
17
|
+
}
|
|
18
|
+
export async function runRemoteSetup(cwd = process.cwd()) {
|
|
19
|
+
section('Remote Repository');
|
|
20
|
+
const existingRemotes = getExistingRemotes(cwd);
|
|
21
|
+
if (existingRemotes.length > 0) {
|
|
22
|
+
info(`Remote already configured: ${existingRemotes.join(', ')}`);
|
|
23
|
+
const reconfigure = await confirmPrompt('Do you want to add another remote?', false);
|
|
24
|
+
if (!reconfigure)
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const ghAvailable = isGhAvailable();
|
|
28
|
+
const ghAuth = ghAvailable && isGhAuthenticated();
|
|
29
|
+
const options = [];
|
|
30
|
+
if (ghAvailable && ghAuth) {
|
|
31
|
+
options.push('Create new GitHub repository (gh CLI — authenticated)');
|
|
32
|
+
}
|
|
33
|
+
else if (ghAvailable) {
|
|
34
|
+
options.push('Create new GitHub repository (gh CLI — need to login first)');
|
|
35
|
+
}
|
|
36
|
+
options.push('Enter remote URL manually (GitHub, GitLab, Bitbucket, self-hosted...)');
|
|
37
|
+
options.push('Skip for now — I will add the remote later');
|
|
38
|
+
const choice = await selectPrompt('How do you want to connect to a remote?', options);
|
|
39
|
+
if (choice.startsWith('Skip')) {
|
|
40
|
+
blank();
|
|
41
|
+
info('No remote configured. Add it later with:');
|
|
42
|
+
console.log(' git remote add origin <URL>');
|
|
43
|
+
console.log(' gsf push');
|
|
44
|
+
blank();
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if (choice.startsWith('Create new GitHub') && ghAvailable) {
|
|
48
|
+
if (!ghAuth) {
|
|
49
|
+
warning('You need to authenticate with GitHub first.');
|
|
50
|
+
info('Run the following command in your terminal, then come back:');
|
|
51
|
+
console.log('\n gh auth login\n');
|
|
52
|
+
const retry = await confirmPrompt('Have you logged in? Try creating the repo now?', false);
|
|
53
|
+
if (!retry)
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
await createGitHubRepo(cwd);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
// Manual URL
|
|
60
|
+
await enterRemoteManually(cwd);
|
|
61
|
+
}
|
|
62
|
+
async function createGitHubRepo(cwd) {
|
|
63
|
+
const dirName = basename(cwd);
|
|
64
|
+
const repoName = await inputPrompt('Repository name', dirName);
|
|
65
|
+
if (!repoName.trim()) {
|
|
66
|
+
info('Cancelled.');
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
const visibility = await selectPrompt('Visibility:', ['private', 'public']);
|
|
70
|
+
const description = await inputPrompt('Description (optional, press Enter to skip)', '');
|
|
71
|
+
blank();
|
|
72
|
+
info(`Creating "${repoName}" on GitHub...`);
|
|
73
|
+
const args = [
|
|
74
|
+
'repo',
|
|
75
|
+
'create',
|
|
76
|
+
repoName.trim(),
|
|
77
|
+
`--${visibility}`,
|
|
78
|
+
'--source=.',
|
|
79
|
+
'--remote=origin',
|
|
80
|
+
'--push=false',
|
|
81
|
+
];
|
|
82
|
+
if (description.trim())
|
|
83
|
+
args.push('--description', description.trim());
|
|
84
|
+
const result = spawnSync('gh', args, { cwd, encoding: 'utf-8' });
|
|
85
|
+
if (result.status === 0) {
|
|
86
|
+
const url = result.stdout.trim() || `https://github.com/<user>/${repoName.trim()}`;
|
|
87
|
+
success(`Repository "${repoName.trim()}" created and "origin" remote configured.`);
|
|
88
|
+
info(`Remote URL: ${url}`);
|
|
89
|
+
blank();
|
|
90
|
+
info('Your first push:');
|
|
91
|
+
console.log(' gsf push');
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
warning('Could not create repository automatically.');
|
|
95
|
+
if (result.stderr)
|
|
96
|
+
console.log('\n' + result.stderr.trim());
|
|
97
|
+
blank();
|
|
98
|
+
info('Create it manually at https://github.com/new, then run:');
|
|
99
|
+
console.log(' git remote add origin <URL>');
|
|
100
|
+
console.log(' gsf push');
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
async function enterRemoteManually(cwd) {
|
|
104
|
+
blank();
|
|
105
|
+
info('Steps to get your remote URL:');
|
|
106
|
+
console.log(' GitHub → https://github.com/new');
|
|
107
|
+
console.log(' GitLab → https://gitlab.com/projects/new');
|
|
108
|
+
console.log(' Create the repository there (empty, no README), then copy the clone URL.');
|
|
109
|
+
blank();
|
|
110
|
+
const url = await inputPrompt('Remote URL (SSH or HTTPS)');
|
|
111
|
+
if (!url.trim()) {
|
|
112
|
+
info('Skipped — no URL provided.');
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const remoteName = await inputPrompt('Remote name', 'origin');
|
|
116
|
+
const name = remoteName.trim() || 'origin';
|
|
117
|
+
const ok = gitRemoteAdd(name, url.trim(), cwd);
|
|
118
|
+
if (ok) {
|
|
119
|
+
success(`Remote "${name}" set to: ${url.trim()}`);
|
|
120
|
+
blank();
|
|
121
|
+
info('Your first push:');
|
|
122
|
+
console.log(' gsf push');
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
warning(`Could not add remote "${name}". It may already exist.`);
|
|
126
|
+
info('Check existing remotes with: git remote -v');
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=remote-setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-setup.js","sourceRoot":"","sources":["../../src/git/remote-setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { CommitConvention, RepoContext, StagedFile } from '../types/index.js';
|
|
2
|
+
export declare function isGitRepo(cwd?: string): boolean;
|
|
3
|
+
export declare function initRepo(cwd?: string): void;
|
|
4
|
+
export declare function hasCommits(cwd?: string): boolean;
|
|
5
|
+
export declare function unstageAll(cwd?: string): void;
|
|
6
|
+
export declare function setDefaultBranch(name: string, cwd?: string): void;
|
|
7
|
+
export declare function getGitUserConfig(cwd?: string): {
|
|
8
|
+
name: string;
|
|
9
|
+
email: string;
|
|
10
|
+
};
|
|
11
|
+
export declare function setGitUserConfig(name: string, email: string, cwd?: string): void;
|
|
12
|
+
export interface BranchInfo {
|
|
13
|
+
name: string;
|
|
14
|
+
current: boolean;
|
|
15
|
+
remote: boolean;
|
|
16
|
+
merged: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare function listBranches(includeRemote?: boolean, cwd?: string): BranchInfo[];
|
|
19
|
+
export declare function createBranch(name: string, baseBranch?: string, cwd?: string): void;
|
|
20
|
+
export declare function switchBranch(name: string, cwd?: string): void;
|
|
21
|
+
export declare function deleteBranch(name: string, force?: boolean, cwd?: string): void;
|
|
22
|
+
export declare function deleteRemoteBranch(remote: string, name: string, cwd?: string): void;
|
|
23
|
+
export declare function renameBranch(newName: string, cwd?: string): void;
|
|
24
|
+
export declare function branchExists(name: string, cwd?: string): boolean;
|
|
25
|
+
export declare function getRepoName(cwd?: string): string;
|
|
26
|
+
export declare function getCurrentBranch(cwd?: string): string;
|
|
27
|
+
export declare function isProtectedBranch(branch: string, protectedBranches: string[]): boolean;
|
|
28
|
+
export declare function extractTicketFromBranch(branch: string, ticketPattern: string): string | undefined;
|
|
29
|
+
export declare function getStagedFiles(cwd?: string): StagedFile[];
|
|
30
|
+
export declare function getUnstagedFiles(cwd?: string): string[];
|
|
31
|
+
export declare function getUntrackedFiles(cwd?: string): string[];
|
|
32
|
+
export declare function getStagedDiff(cwd?: string): string;
|
|
33
|
+
export interface LastCommit {
|
|
34
|
+
shortSha: string;
|
|
35
|
+
message: string;
|
|
36
|
+
author: string;
|
|
37
|
+
ago: string;
|
|
38
|
+
}
|
|
39
|
+
export declare function getLastCommit(cwd?: string): LastCommit | null;
|
|
40
|
+
export declare function fetchRemote(cwd?: string): {
|
|
41
|
+
ok: boolean;
|
|
42
|
+
output: string;
|
|
43
|
+
};
|
|
44
|
+
export declare function getLastFetchTime(cwd?: string): Date | null;
|
|
45
|
+
export declare function getCommitsSinceBase(base: string, cwd?: string): string[];
|
|
46
|
+
export declare function getUpstream(cwd?: string): string | undefined;
|
|
47
|
+
export declare function getAheadBehindCount(upstream: string, cwd?: string): {
|
|
48
|
+
ahead: number;
|
|
49
|
+
behind: number;
|
|
50
|
+
};
|
|
51
|
+
export declare function hasMergeConflicts(cwd?: string): boolean;
|
|
52
|
+
export declare function hasUncommittedChanges(cwd?: string): boolean;
|
|
53
|
+
export declare function stageFile(filePath: string, cwd?: string): void;
|
|
54
|
+
export declare function stageFiles(paths: string[], cwd?: string): void;
|
|
55
|
+
export declare function buildRepoContext(protectedBranches: string[], ticketPattern: string, convention: CommitConvention, cwd?: string): RepoContext;
|
|
56
|
+
export declare function refExists(ref: string, cwd?: string): boolean;
|
|
57
|
+
export declare function stashSave(message: string, cwd?: string): void;
|
|
58
|
+
export declare function stashPop(cwd?: string): void;
|
|
59
|
+
export interface StashEntry {
|
|
60
|
+
index: number;
|
|
61
|
+
ref: string;
|
|
62
|
+
message: string;
|
|
63
|
+
ago: string;
|
|
64
|
+
}
|
|
65
|
+
export declare function stashList(cwd?: string): StashEntry[];
|
|
66
|
+
export declare function stashApplyRef(ref: string, cwd?: string): void;
|
|
67
|
+
export declare function stashPopRef(ref: string, cwd?: string): void;
|
|
68
|
+
export declare function stashDropRef(ref: string, cwd?: string): void;
|
|
69
|
+
export declare function resetHard(ref: string, cwd?: string): void;
|
|
70
|
+
export declare function detectGhCli(): boolean;
|
|
71
|
+
export declare function autoFetchIfStale(thresholdMinutes: number, cwd?: string): void;
|
|
72
|
+
export declare function listRemotes(cwd?: string): string[];
|
|
73
|
+
//# sourceMappingURL=repo.d.ts.map
|