@alejandrochaves/devflow-cli 0.1.1 → 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 (80) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +217 -15
  3. package/dist/colors.d.ts +9 -0
  4. package/dist/colors.d.ts.map +1 -0
  5. package/dist/colors.js +13 -0
  6. package/dist/colors.js.map +1 -0
  7. package/dist/commands/amend.d.ts +4 -0
  8. package/dist/commands/amend.d.ts.map +1 -0
  9. package/dist/commands/amend.js +138 -0
  10. package/dist/commands/amend.js.map +1 -0
  11. package/dist/commands/branch.d.ts +3 -1
  12. package/dist/commands/branch.d.ts.map +1 -1
  13. package/dist/commands/branch.js +37 -5
  14. package/dist/commands/branch.js.map +1 -1
  15. package/dist/commands/changelog.d.ts +4 -0
  16. package/dist/commands/changelog.d.ts.map +1 -0
  17. package/dist/commands/changelog.js +204 -0
  18. package/dist/commands/changelog.js.map +1 -0
  19. package/dist/commands/cleanup.d.ts +4 -0
  20. package/dist/commands/cleanup.d.ts.map +1 -0
  21. package/dist/commands/cleanup.js +124 -0
  22. package/dist/commands/cleanup.js.map +1 -0
  23. package/dist/commands/commit.d.ts +13 -1
  24. package/dist/commands/commit.d.ts.map +1 -1
  25. package/dist/commands/commit.js +107 -25
  26. package/dist/commands/commit.js.map +1 -1
  27. package/dist/commands/doctor.d.ts +2 -0
  28. package/dist/commands/doctor.d.ts.map +1 -0
  29. package/dist/commands/doctor.js +122 -0
  30. package/dist/commands/doctor.js.map +1 -0
  31. package/dist/commands/fixup.d.ts +4 -0
  32. package/dist/commands/fixup.d.ts.map +1 -0
  33. package/dist/commands/fixup.js +100 -0
  34. package/dist/commands/fixup.js.map +1 -0
  35. package/dist/commands/init.d.ts.map +1 -1
  36. package/dist/commands/init.js +260 -22
  37. package/dist/commands/init.js.map +1 -1
  38. package/dist/commands/merge.d.ts +4 -0
  39. package/dist/commands/merge.d.ts.map +1 -0
  40. package/dist/commands/merge.js +84 -0
  41. package/dist/commands/merge.js.map +1 -0
  42. package/dist/commands/pr.d.ts +3 -1
  43. package/dist/commands/pr.d.ts.map +1 -1
  44. package/dist/commands/pr.js +49 -40
  45. package/dist/commands/pr.js.map +1 -1
  46. package/dist/commands/status.d.ts +2 -0
  47. package/dist/commands/status.d.ts.map +1 -0
  48. package/dist/commands/status.js +83 -0
  49. package/dist/commands/status.js.map +1 -0
  50. package/dist/commands/test-plan.d.ts +2 -0
  51. package/dist/commands/test-plan.d.ts.map +1 -0
  52. package/dist/commands/test-plan.js +92 -0
  53. package/dist/commands/test-plan.js.map +1 -0
  54. package/dist/commands/undo.d.ts +4 -0
  55. package/dist/commands/undo.d.ts.map +1 -0
  56. package/dist/commands/undo.js +46 -0
  57. package/dist/commands/undo.js.map +1 -0
  58. package/dist/config.d.ts +13 -0
  59. package/dist/config.d.ts.map +1 -1
  60. package/dist/config.js +100 -3
  61. package/dist/config.js.map +1 -1
  62. package/dist/git.d.ts +1 -0
  63. package/dist/git.d.ts.map +1 -1
  64. package/dist/git.js +5 -0
  65. package/dist/git.js.map +1 -1
  66. package/dist/index.js +145 -5
  67. package/dist/index.js.map +1 -1
  68. package/dist/monorepo.d.ts +13 -0
  69. package/dist/monorepo.d.ts.map +1 -0
  70. package/dist/monorepo.js +191 -0
  71. package/dist/monorepo.js.map +1 -0
  72. package/dist/test-plan.d.ts +5 -0
  73. package/dist/test-plan.d.ts.map +1 -0
  74. package/dist/test-plan.js +48 -0
  75. package/dist/test-plan.js.map +1 -0
  76. package/dist/update-notifier.d.ts +2 -0
  77. package/dist/update-notifier.d.ts.map +1 -0
  78. package/dist/update-notifier.js +96 -0
  79. package/dist/update-notifier.js.map +1 -0
  80. package/package.json +14 -3
@@ -0,0 +1,122 @@
1
+ import { execSync } from "child_process";
2
+ import { existsSync, readFileSync } from "fs";
3
+ import { resolve } from "path";
4
+ import { bold, dim, green, red, yellow, gray } from "../colors.js";
5
+ function checkCommand(cmd) {
6
+ try {
7
+ return execSync(cmd, { encoding: "utf-8", stdio: ["pipe", "pipe", "ignore"] }).trim();
8
+ }
9
+ catch {
10
+ return undefined;
11
+ }
12
+ }
13
+ export async function doctorCommand() {
14
+ const cwd = process.cwd();
15
+ const checks = [];
16
+ console.log(`\n${dim("───")} ${bold("devflow doctor")} ${dim("───")}\n`);
17
+ // 1. Git
18
+ const gitVersion = checkCommand("git --version");
19
+ checks.push(gitVersion
20
+ ? { name: "git", status: "ok", detail: gitVersion.replace("git version ", "") }
21
+ : { name: "git", status: "error", detail: "Not installed" });
22
+ // 2. Node
23
+ const nodeVersion = checkCommand("node --version");
24
+ if (nodeVersion) {
25
+ const major = parseInt(nodeVersion.replace("v", "").split(".")[0], 10);
26
+ checks.push(major >= 20
27
+ ? { name: "node", status: "ok", detail: nodeVersion }
28
+ : { name: "node", status: "warning", detail: `${nodeVersion} (>= 20 recommended)` });
29
+ }
30
+ else {
31
+ checks.push({ name: "node", status: "error", detail: "Not installed" });
32
+ }
33
+ // 3. GitHub CLI
34
+ const ghVersion = checkCommand("gh --version");
35
+ if (ghVersion) {
36
+ const version = ghVersion.split("\n")[0];
37
+ checks.push({ name: "gh (GitHub CLI)", status: "ok", detail: version.replace("gh version ", "").split(" ")[0] });
38
+ }
39
+ else {
40
+ checks.push({ name: "gh (GitHub CLI)", status: "warning", detail: "Not installed (needed for PR command)" });
41
+ }
42
+ // 4. gh auth
43
+ if (ghVersion) {
44
+ const ghAuth = checkCommand("gh auth status");
45
+ checks.push(ghAuth
46
+ ? { name: "gh auth", status: "ok", detail: "Authenticated" }
47
+ : { name: "gh auth", status: "warning", detail: "Not authenticated (run: gh auth login)" });
48
+ }
49
+ // 5. Git repo
50
+ const isRepo = checkCommand("git rev-parse --is-inside-work-tree");
51
+ checks.push(isRepo === "true"
52
+ ? { name: "git repository", status: "ok" }
53
+ : { name: "git repository", status: "error", detail: "Not inside a git repository" });
54
+ // 6. .devflow.json
55
+ const configExists = existsSync(resolve(cwd, ".devflow.json"));
56
+ checks.push(configExists
57
+ ? { name: ".devflow.json", status: "ok" }
58
+ : { name: ".devflow.json", status: "warning", detail: "Not found (run: devflow init)" });
59
+ // 7. commitlint
60
+ const commitlintConfig = existsSync(resolve(cwd, "commitlint.config.js"))
61
+ || existsSync(resolve(cwd, "commitlint.config.cjs"))
62
+ || existsSync(resolve(cwd, ".commitlintrc.js"));
63
+ checks.push(commitlintConfig
64
+ ? { name: "commitlint config", status: "ok" }
65
+ : { name: "commitlint config", status: "warning", detail: "Not found" });
66
+ // 8. Husky
67
+ const huskyDir = existsSync(resolve(cwd, ".husky"));
68
+ checks.push(huskyDir
69
+ ? { name: "husky (.husky/)", status: "ok" }
70
+ : { name: "husky (.husky/)", status: "warning", detail: "Not found" });
71
+ // 9. commit-msg hook
72
+ const commitMsgHook = existsSync(resolve(cwd, ".husky/commit-msg"));
73
+ checks.push(commitMsgHook
74
+ ? { name: "commit-msg hook", status: "ok" }
75
+ : { name: "commit-msg hook", status: "warning", detail: "Not found" });
76
+ // 10. package.json scripts
77
+ try {
78
+ const pkgPath = resolve(cwd, "package.json");
79
+ if (existsSync(pkgPath)) {
80
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
81
+ const scripts = pkg.scripts || {};
82
+ const hasCommit = scripts.commit?.includes("devflow");
83
+ const hasBranch = scripts.branch?.includes("devflow");
84
+ const hasPr = scripts.pr?.includes("devflow");
85
+ if (hasCommit && hasBranch && hasPr) {
86
+ checks.push({ name: "package.json scripts", status: "ok", detail: "commit, branch, pr" });
87
+ }
88
+ else {
89
+ const missing = [];
90
+ if (!hasCommit)
91
+ missing.push("commit");
92
+ if (!hasBranch)
93
+ missing.push("branch");
94
+ if (!hasPr)
95
+ missing.push("pr");
96
+ checks.push({ name: "package.json scripts", status: "warning", detail: `Missing: ${missing.join(", ")}` });
97
+ }
98
+ }
99
+ }
100
+ catch {
101
+ checks.push({ name: "package.json scripts", status: "warning", detail: "Could not read package.json" });
102
+ }
103
+ // Print results
104
+ let hasErrors = false;
105
+ for (const check of checks) {
106
+ const icon = check.status === "ok" ? green("✓")
107
+ : check.status === "warning" ? yellow("⚠")
108
+ : red("✗");
109
+ const detail = check.detail ? gray(` ${check.detail}`) : "";
110
+ console.log(` ${icon} ${check.name}${detail}`);
111
+ if (check.status === "error")
112
+ hasErrors = true;
113
+ }
114
+ const okCount = checks.filter((c) => c.status === "ok").length;
115
+ const warnCount = checks.filter((c) => c.status === "warning").length;
116
+ const errCount = checks.filter((c) => c.status === "error").length;
117
+ console.log(`\n ${green(`${okCount} passed`)}${warnCount ? `, ${yellow(`${warnCount} warnings`)}` : ""}${errCount ? `, ${red(`${errCount} errors`)}` : ""}\n`);
118
+ if (hasErrors) {
119
+ process.exit(1);
120
+ }
121
+ }
122
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function fixupCommand(options?: {
2
+ dryRun?: boolean;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=fixup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixup.d.ts","sourceRoot":"","sources":["../../src/commands/fixup.ts"],"names":[],"mappings":"AAkBA,wBAAsB,YAAY,CAAC,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAyFpF"}
@@ -0,0 +1,100 @@
1
+ import { select, confirm, checkbox } from "@inquirer/prompts";
2
+ import { execSync } from "child_process";
3
+ import { bold, dim, green, cyan } from "../colors.js";
4
+ import { getDefaultBase, getBranch } from "../git.js";
5
+ function getCommitsOnBranch(base) {
6
+ try {
7
+ const log = execSync(`git log ${base}..HEAD --format=%H|%s`, { encoding: "utf-8" }).trim();
8
+ if (!log)
9
+ return [];
10
+ return log.split("\n").map((line) => {
11
+ const [hash, ...rest] = line.split("|");
12
+ return { hash, message: rest.join("|") };
13
+ });
14
+ }
15
+ catch {
16
+ return [];
17
+ }
18
+ }
19
+ export async function fixupCommand(options = {}) {
20
+ try {
21
+ const branch = getBranch();
22
+ const base = getDefaultBase(branch);
23
+ const commits = getCommitsOnBranch(base);
24
+ if (commits.length < 2) {
25
+ console.log("Need at least 2 commits on the branch to fixup.");
26
+ return;
27
+ }
28
+ // Check for unstaged/staged changes
29
+ const staged = execSync("git diff --cached --name-only", { encoding: "utf-8" }).trim();
30
+ const unstaged = execSync("git diff --name-only", { encoding: "utf-8" }).trim();
31
+ const untracked = execSync("git ls-files --others --exclude-standard", { encoding: "utf-8" }).trim();
32
+ const hasChanges = staged || unstaged || untracked;
33
+ if (hasChanges) {
34
+ // Stage changes first
35
+ const allChanges = [
36
+ ...unstaged.split("\n").filter(Boolean).map((f) => ({ file: f, label: `M ${f}` })),
37
+ ...untracked.split("\n").filter(Boolean).map((f) => ({ file: f, label: `? ${f}` })),
38
+ ];
39
+ if (!staged && allChanges.length > 0) {
40
+ const filesToStage = await checkbox({
41
+ message: "Select files to include in fixup:",
42
+ choices: [
43
+ { value: "__ALL__", name: "Stage all" },
44
+ ...allChanges.map((c) => ({ value: c.file, name: c.label })),
45
+ ],
46
+ required: true,
47
+ });
48
+ if (!options.dryRun) {
49
+ if (filesToStage.includes("__ALL__")) {
50
+ execSync("git add -A");
51
+ }
52
+ else {
53
+ for (const file of filesToStage) {
54
+ execSync(`git add ${JSON.stringify(file)}`);
55
+ }
56
+ }
57
+ }
58
+ }
59
+ }
60
+ console.log(`\n${dim("───")} ${bold("Fixup Commit")} ${dim("───")}\n`);
61
+ console.log(`${dim("Branch commits (newest first):")}\n`);
62
+ const target = await select({
63
+ message: "Which commit should this fixup apply to?",
64
+ choices: commits.map((c) => ({
65
+ value: c.hash,
66
+ name: `${cyan(c.hash.slice(0, 7))} ${c.message}`,
67
+ })),
68
+ });
69
+ if (options.dryRun) {
70
+ const targetCommit = commits.find((c) => c.hash === target);
71
+ console.log(dim(`[dry-run] Would create fixup for: ${targetCommit?.message}`));
72
+ return;
73
+ }
74
+ // Create fixup commit
75
+ execSync(`git commit --fixup=${target}`, { stdio: "inherit" });
76
+ console.log(green("✓ Fixup commit created."));
77
+ const autoSquash = await confirm({
78
+ message: "Auto-squash now? (interactive rebase)",
79
+ default: false,
80
+ });
81
+ if (autoSquash) {
82
+ execSync(`GIT_SEQUENCE_EDITOR=true git rebase -i --autosquash ${base}`, {
83
+ stdio: "inherit",
84
+ env: { ...process.env, GIT_SEQUENCE_EDITOR: "true" },
85
+ });
86
+ console.log(green("✓ Commits squashed."));
87
+ }
88
+ else {
89
+ console.log(dim("Run later: git rebase -i --autosquash " + base));
90
+ }
91
+ }
92
+ catch (error) {
93
+ if (error.name === "ExitPromptError") {
94
+ console.log("\nCancelled.");
95
+ process.exit(0);
96
+ }
97
+ process.exit(1);
98
+ }
99
+ }
100
+ //# sourceMappingURL=fixup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixup.js","sourceRoot":"","sources":["../../src/commands/fixup.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAqBA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAkCjD"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AA+BA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAqSjD"}
@@ -1,25 +1,31 @@
1
- import { existsSync, writeFileSync } from "fs";
1
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from "fs";
2
2
  import { resolve } from "path";
3
3
  import { confirm, input } from "@inquirer/prompts";
4
- const TEMPLATE = {
5
- ticketBaseUrl: "",
6
- scopes: [
7
- { value: "core", description: "Core functionality" },
8
- { value: "ui", description: "UI components" },
9
- { value: "api", description: "API layer" },
10
- { value: "config", description: "Configuration" },
11
- { value: "deps", description: "Dependencies" },
12
- { value: "ci", description: "CI/CD" },
13
- ],
14
- checklist: [
15
- "Code follows project conventions",
16
- "Self-reviewed the changes",
17
- "No new warnings or errors introduced",
18
- ],
19
- };
4
+ import { execSync } from "child_process";
5
+ const DEFAULT_CHECKLIST = [
6
+ "Code follows project conventions",
7
+ "Self-reviewed the changes",
8
+ "No new warnings or errors introduced",
9
+ ];
10
+ function readPackageJson(cwd) {
11
+ const pkgPath = resolve(cwd, "package.json");
12
+ if (!existsSync(pkgPath))
13
+ return undefined;
14
+ try {
15
+ return JSON.parse(readFileSync(pkgPath, "utf-8"));
16
+ }
17
+ catch {
18
+ return undefined;
19
+ }
20
+ }
21
+ function writePackageJson(cwd, pkg) {
22
+ const pkgPath = resolve(cwd, "package.json");
23
+ writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + "\n");
24
+ }
20
25
  export async function initCommand() {
21
26
  try {
22
- const configPath = resolve(process.cwd(), ".devflow.json");
27
+ const cwd = process.cwd();
28
+ const configPath = resolve(cwd, ".devflow.json");
23
29
  if (existsSync(configPath)) {
24
30
  const overwrite = await confirm({
25
31
  message: ".devflow.json already exists. Overwrite?",
@@ -30,16 +36,248 @@ export async function initCommand() {
30
36
  process.exit(0);
31
37
  }
32
38
  }
39
+ console.log("\n devflow setup\n");
40
+ // 1. Ticket base URL
33
41
  const ticketBaseUrl = await input({
34
42
  message: "Ticket base URL (e.g., https://github.com/org/repo/issues):",
35
43
  });
44
+ // 2. Scopes
45
+ console.log("\nLet's define your project scopes for commits.");
46
+ console.log("Add scopes one at a time. Press Enter with empty name to finish.\n");
47
+ const scopes = [];
48
+ let addingScopes = true;
49
+ while (addingScopes) {
50
+ const value = await input({
51
+ message: `Scope name${scopes.length > 0 ? " (blank to finish)" : ""}:`,
52
+ });
53
+ if (!value.trim()) {
54
+ if (scopes.length === 0) {
55
+ const useDefaults = await confirm({
56
+ message: "No scopes added. Use defaults (core, ui, api, config, deps, ci)?",
57
+ default: true,
58
+ });
59
+ if (useDefaults) {
60
+ scopes.push({ value: "core", description: "Core functionality" }, { value: "ui", description: "UI components" }, { value: "api", description: "API layer" }, { value: "config", description: "Configuration" }, { value: "deps", description: "Dependencies" }, { value: "ci", description: "CI/CD" });
61
+ }
62
+ }
63
+ addingScopes = false;
64
+ }
65
+ else {
66
+ const description = await input({
67
+ message: `Description for "${value.trim()}":`,
68
+ });
69
+ scopes.push({
70
+ value: value.trim().toLowerCase(),
71
+ description: description.trim() || value.trim(),
72
+ });
73
+ }
74
+ }
75
+ // 3. Checklist
76
+ const customizeChecklist = await confirm({
77
+ message: "Customize PR checklist items?",
78
+ default: false,
79
+ });
80
+ let checklist = [...DEFAULT_CHECKLIST];
81
+ if (customizeChecklist) {
82
+ console.log("\nAdd checklist items one at a time. Press Enter with empty text to finish.\n");
83
+ checklist = [];
84
+ let addingChecklist = true;
85
+ while (addingChecklist) {
86
+ const item = await input({
87
+ message: `Checklist item${checklist.length > 0 ? " (blank to finish)" : ""}:`,
88
+ });
89
+ if (!item.trim()) {
90
+ if (checklist.length === 0) {
91
+ checklist = [...DEFAULT_CHECKLIST];
92
+ console.log("Using default checklist.");
93
+ }
94
+ addingChecklist = false;
95
+ }
96
+ else {
97
+ checklist.push(item.trim());
98
+ }
99
+ }
100
+ }
101
+ // Write .devflow.json
36
102
  const config = {
37
- ...TEMPLATE,
38
- ticketBaseUrl: ticketBaseUrl.trim() || undefined,
103
+ scopes,
104
+ checklist,
39
105
  };
106
+ if (ticketBaseUrl.trim()) {
107
+ config.ticketBaseUrl = ticketBaseUrl.trim();
108
+ }
40
109
  writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n");
41
- console.log("Created .devflow.json");
42
- console.log("Edit this file to customize scopes, checklist items, and more.");
110
+ console.log("\n✓ Created .devflow.json");
111
+ // 4. Add scripts to package.json
112
+ const pkg = readPackageJson(cwd);
113
+ if (pkg) {
114
+ const addScripts = await confirm({
115
+ message: "Add commit/branch/pr scripts to package.json?",
116
+ default: true,
117
+ });
118
+ if (addScripts) {
119
+ const scripts = (pkg.scripts || {});
120
+ scripts.commit = "devflow commit";
121
+ scripts.branch = "devflow branch";
122
+ scripts.pr = "devflow pr";
123
+ pkg.scripts = scripts;
124
+ writePackageJson(cwd, pkg);
125
+ console.log("✓ Added scripts to package.json");
126
+ }
127
+ }
128
+ // 5. Commitlint setup
129
+ const setupCommitlint = await confirm({
130
+ message: "Set up commitlint for the devflow commit format?",
131
+ default: true,
132
+ });
133
+ if (setupCommitlint) {
134
+ const commitlintConfig = `module.exports = {
135
+ extends: ['@commitlint/config-conventional'],
136
+ parserPreset: {
137
+ parserOpts: {
138
+ headerPattern: /^(\\w+)\\[.*?\\]!?\\((.+)\\): (.+)$/,
139
+ headerCorrespondence: ['type', 'scope', 'subject'],
140
+ },
141
+ },
142
+ rules: {
143
+ 'subject-case': [0],
144
+ },
145
+ };
146
+ `;
147
+ writeFileSync(resolve(cwd, "commitlint.config.js"), commitlintConfig);
148
+ console.log("✓ Created commitlint.config.js");
149
+ // Install commitlint deps
150
+ const installCommitlint = await confirm({
151
+ message: "Install @commitlint/cli and @commitlint/config-conventional?",
152
+ default: true,
153
+ });
154
+ if (installCommitlint) {
155
+ console.log("Installing commitlint...");
156
+ try {
157
+ execSync("npm install -D @commitlint/cli @commitlint/config-conventional", {
158
+ cwd,
159
+ stdio: "inherit",
160
+ });
161
+ console.log("✓ Installed commitlint");
162
+ }
163
+ catch {
164
+ console.log("⚠ Failed to install commitlint. Run manually:");
165
+ console.log(" npm install -D @commitlint/cli @commitlint/config-conventional");
166
+ }
167
+ }
168
+ }
169
+ // 6. Husky setup
170
+ const setupHusky = await confirm({
171
+ message: "Set up husky with a commit-msg hook?",
172
+ default: true,
173
+ });
174
+ if (setupHusky) {
175
+ // Install husky
176
+ const installHusky = await confirm({
177
+ message: "Install husky?",
178
+ default: true,
179
+ });
180
+ if (installHusky) {
181
+ console.log("Installing husky...");
182
+ try {
183
+ execSync("npm install -D husky", { cwd, stdio: "inherit" });
184
+ execSync("npx husky init", { cwd, stdio: "inherit" });
185
+ console.log("✓ Installed and initialized husky");
186
+ }
187
+ catch {
188
+ console.log("⚠ Failed to install husky. Run manually:");
189
+ console.log(" npm install -D husky && npx husky init");
190
+ }
191
+ }
192
+ // Create commit-msg hook
193
+ const huskyDir = resolve(cwd, ".husky");
194
+ if (!existsSync(huskyDir)) {
195
+ mkdirSync(huskyDir, { recursive: true });
196
+ }
197
+ const commitMsgHook = `npx --no -- commitlint --edit $1 || {
198
+ echo ""
199
+ echo " Commit message does not follow the required format."
200
+ echo " Use: npm run commit"
201
+ echo ""
202
+ exit 1
203
+ }
204
+ `;
205
+ writeFileSync(resolve(huskyDir, "commit-msg"), commitMsgHook);
206
+ console.log("✓ Created .husky/commit-msg hook");
207
+ // Pre-push hook
208
+ const addPrePush = await confirm({
209
+ message: "Add pre-push hook (lint + typecheck)?",
210
+ default: true,
211
+ });
212
+ if (addPrePush) {
213
+ const prePushHook = `npm run lint
214
+ npx tsc --noEmit
215
+ `;
216
+ writeFileSync(resolve(huskyDir, "pre-push"), prePushHook);
217
+ console.log("✓ Created .husky/pre-push hook");
218
+ }
219
+ // Add prepare script
220
+ const updatedPkg = readPackageJson(cwd);
221
+ if (updatedPkg) {
222
+ const scripts = (updatedPkg.scripts || {});
223
+ if (!scripts.prepare) {
224
+ scripts.prepare = "husky";
225
+ updatedPkg.scripts = scripts;
226
+ writePackageJson(cwd, updatedPkg);
227
+ console.log("✓ Added prepare script to package.json");
228
+ }
229
+ }
230
+ }
231
+ // 7. CI workflow
232
+ const setupCi = await confirm({
233
+ message: "Generate a GitHub Actions CI workflow?",
234
+ default: false,
235
+ });
236
+ if (setupCi) {
237
+ const workflowDir = resolve(cwd, ".github/workflows");
238
+ if (!existsSync(workflowDir)) {
239
+ mkdirSync(workflowDir, { recursive: true });
240
+ }
241
+ const ciWorkflow = `name: CI
242
+
243
+ on:
244
+ pull_request:
245
+ branches: [main]
246
+
247
+ jobs:
248
+ ci:
249
+ runs-on: ubuntu-latest
250
+ steps:
251
+ - uses: actions/checkout@v4
252
+
253
+ - uses: actions/setup-node@v4
254
+ with:
255
+ node-version: 20
256
+ cache: npm
257
+
258
+ - run: npm ci
259
+
260
+ - name: Lint
261
+ run: npm run lint
262
+
263
+ - name: Type check
264
+ run: npx tsc --noEmit
265
+
266
+ - name: Test
267
+ run: npm test
268
+ `;
269
+ writeFileSync(resolve(workflowDir, "ci.yml"), ciWorkflow);
270
+ console.log("✓ Created .github/workflows/ci.yml");
271
+ }
272
+ // 8. Summary
273
+ console.log("\n Setup complete!\n");
274
+ console.log("Usage:");
275
+ console.log(" npm run branch Create a new branch");
276
+ console.log(" npm run commit Create a conventional commit");
277
+ console.log(" npm run pr Create or update a PR");
278
+ console.log(" devflow status Show branch and PR info");
279
+ console.log(" devflow doctor Verify setup");
280
+ console.log("");
43
281
  }
44
282
  catch (error) {
45
283
  if (error.name === "ExitPromptError") {
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,QAAQ,GAAG;IACf,aAAa,EAAE,EAAE;IACjB,MAAM,EAAE;QACN,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,oBAAoB,EAAE;QACpD,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE;QAC7C,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE;QAC1C,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE;QACjD,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE;QAC9C,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE;KACtC;IACD,SAAS,EAAE;QACT,kCAAkC;QAClC,2BAA2B;QAC3B,sCAAsC;KACvC;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC,CAAC;QAE3D,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC;gBAC9B,OAAO,EAAE,0CAA0C;gBACnD,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;YACH,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,KAAK,CAAC;YAChC,OAAO,EAAE,6DAA6D;SACvE,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG;YACb,GAAG,QAAQ;YACX,aAAa,EAAE,aAAa,CAAC,IAAI,EAAE,IAAI,SAAS;SACjD,CAAC;QAEF,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;IAChF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAAe,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function mergeCommand(options?: {
2
+ dryRun?: boolean;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../src/commands/merge.ts"],"names":[],"mappings":"AAkBA,wBAAsB,YAAY,CAAC,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA2EpF"}