@kosuke-ai/cli 0.0.7 → 0.0.8

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.
@@ -0,0 +1,152 @@
1
+ /**
2
+ * PR Orchestrator - Generic PR workflow utility
3
+ *
4
+ * Handles branch creation, commits, push, and PR creation
5
+ * Used across all commands that support --pr flag
6
+ */
7
+ import simpleGit from 'simple-git';
8
+ import { createBranch, commit, push, getCurrentRepo, getCurrentBranch } from './git.js';
9
+ import { createPullRequest } from './github.js';
10
+ /**
11
+ * Execute core logic wrapped with PR workflow
12
+ */
13
+ export async function runWithPR(options, coreLogic) {
14
+ // Validate environment
15
+ if (!process.env.GITHUB_TOKEN) {
16
+ throw new Error('GITHUB_TOKEN environment variable is required for --pr flag');
17
+ }
18
+ const git = simpleGit();
19
+ // Get base branch (current branch before creating feature branch)
20
+ const baseBranch = options.baseBranch || (await getCurrentBranch());
21
+ console.log(`šŸ“ Base branch: ${baseBranch}\n`);
22
+ // Create working branch with unique name
23
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-').split('.')[0];
24
+ const branchName = `${options.branchPrefix}/${timestamp}`;
25
+ console.log(`🌿 Creating branch: ${branchName}\n`);
26
+ await createBranch(branchName, baseBranch);
27
+ // Execute core logic
28
+ const result = await coreLogic();
29
+ // Check if there are any changes to commit
30
+ const status = await git.status();
31
+ if (status.files.length === 0) {
32
+ console.log('\nā„¹ļø No changes detected. Skipping PR creation.');
33
+ throw new Error('No changes to commit');
34
+ }
35
+ // Commit changes
36
+ console.log('\nšŸ“ Committing changes...');
37
+ const commitMsg = typeof options.commitMessage === 'function' ? options.commitMessage(0) : options.commitMessage;
38
+ await commit(commitMsg);
39
+ console.log(' āœ… Changes committed\n');
40
+ // Push branch
41
+ console.log('šŸ“¤ Pushing branch...');
42
+ await push(branchName);
43
+ console.log(' āœ… Branch pushed\n');
44
+ // Create PR
45
+ console.log('šŸ“‹ Creating pull request...');
46
+ const { owner, repo } = await getCurrentRepo();
47
+ const prUrl = await createPullRequest({
48
+ owner,
49
+ repo,
50
+ title: options.prTitle,
51
+ head: branchName,
52
+ base: baseBranch,
53
+ body: options.prBody,
54
+ });
55
+ console.log(` āœ… Pull request created: ${prUrl}\n`);
56
+ return {
57
+ result,
58
+ prInfo: {
59
+ branchName,
60
+ prUrl,
61
+ baseBranch,
62
+ commitsCreated: 1,
63
+ },
64
+ };
65
+ }
66
+ /**
67
+ * Execute core logic wrapped with PR workflow (batch mode)
68
+ * Supports multiple commits for batch processing
69
+ */
70
+ export async function runWithPRBatched(options, batches) {
71
+ // Validate environment
72
+ if (!process.env.GITHUB_TOKEN) {
73
+ throw new Error('GITHUB_TOKEN environment variable is required for --pr flag');
74
+ }
75
+ const git = simpleGit();
76
+ // Get base branch
77
+ const baseBranch = options.baseBranch || (await getCurrentBranch());
78
+ console.log(`šŸ“ Base branch: ${baseBranch}\n`);
79
+ // Create working branch
80
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-').split('.')[0];
81
+ const branchName = `${options.branchPrefix}/${timestamp}`;
82
+ console.log(`🌿 Creating branch: ${branchName}\n`);
83
+ await createBranch(branchName, baseBranch);
84
+ // Process each batch
85
+ const results = [];
86
+ let commitsCreated = 0;
87
+ for (let i = 0; i < batches.length; i++) {
88
+ console.log(`\nšŸ“Š Processing batch ${i + 1}/${batches.length}...`);
89
+ // Execute batch logic
90
+ const result = await batches[i]();
91
+ results.push(result);
92
+ // Check if there are changes
93
+ const status = await git.status();
94
+ if (status.files.length === 0) {
95
+ console.log(' ā„¹ļø No changes in this batch, skipping commit');
96
+ continue;
97
+ }
98
+ // Validate if needed
99
+ if (options.validateBeforeCommit) {
100
+ console.log(' šŸ”§ Running validation...');
101
+ const isValid = await options.validateBeforeCommit();
102
+ if (!isValid) {
103
+ console.warn(' āš ļø Validation failed, skipping this batch');
104
+ await git.reset(['--hard', 'HEAD']);
105
+ continue;
106
+ }
107
+ console.log(' āœ… Validation passed');
108
+ }
109
+ // Commit batch
110
+ const commitMsg = typeof options.commitMessage === 'function'
111
+ ? options.commitMessage(i)
112
+ : options.commitMessage;
113
+ await commit(commitMsg);
114
+ commitsCreated++;
115
+ console.log(' āœ… Batch committed');
116
+ // Callback if needed
117
+ if (options.onBatchComplete) {
118
+ await options.onBatchComplete(i);
119
+ }
120
+ }
121
+ // Check if any commits were made
122
+ if (commitsCreated === 0) {
123
+ console.log('\nā„¹ļø No changes were committed. Skipping PR creation.');
124
+ throw new Error('No changes to commit');
125
+ }
126
+ // Push all commits
127
+ console.log(`\nšŸ“¤ Pushing ${commitsCreated} commit(s)...`);
128
+ await push(branchName);
129
+ console.log(' āœ… All commits pushed\n');
130
+ // Create PR
131
+ console.log('šŸ“‹ Creating pull request...');
132
+ const { owner, repo } = await getCurrentRepo();
133
+ const prUrl = await createPullRequest({
134
+ owner,
135
+ repo,
136
+ title: options.prTitle,
137
+ head: branchName,
138
+ base: baseBranch,
139
+ body: options.prBody,
140
+ });
141
+ console.log(` āœ… Pull request created: ${prUrl}\n`);
142
+ return {
143
+ results,
144
+ prInfo: {
145
+ branchName,
146
+ prUrl,
147
+ baseBranch,
148
+ commitsCreated,
149
+ },
150
+ };
151
+ }
152
+ //# sourceMappingURL=pr-orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr-orchestrator.js","sourceRoot":"","sources":["../../../kosuke/utils/pr-orchestrator.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kosuke-ai/cli",
3
- "version": "0.0.7",
3
+ "version": "0.0.8",
4
4
  "description": "Kosuke CLI - Development automation tool for syncing rules and analyzing code quality",
5
5
  "keywords": [
6
6
  "CLI",
@@ -30,10 +30,12 @@
30
30
  "LICENSE"
31
31
  ],
32
32
  "scripts": {
33
- "build": "tsc",
33
+ "build": "tsc && chmod +x dist/index.js",
34
+ "build:watch": "tsc --watch",
34
35
  "clean": "rm -rf dist",
35
36
  "prepublishOnly": "npm run clean && npm run build",
36
37
  "dev": "tsx index.ts",
38
+ "dev:link": "npm run build && npm link && npm run build:watch",
37
39
  "test": "vitest run",
38
40
  "test:watch": "vitest",
39
41
  "test:coverage": "vitest run --coverage",