@eldrforge/kodrdriv 1.2.26 → 1.2.28
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/AI-FRIENDLY-LOGGING-GUIDE.md +237 -0
- package/AI-LOGGING-MIGRATION-COMPLETE.md +371 -0
- package/ALREADY-PUBLISHED-PACKAGES-FIX.md +264 -0
- package/AUDIT-BRANCHES-PROGRESS-FIX.md +90 -0
- package/AUDIT-EXAMPLE-OUTPUT.md +113 -0
- package/CHECKPOINT-RECOVERY-FIX.md +450 -0
- package/LOGGING-MIGRATION-STATUS.md +186 -0
- package/PARALLEL-PUBLISH-FIXES-IMPLEMENTED.md +405 -0
- package/PARALLEL-PUBLISH-IMPROVEMENTS-IMPLEMENTED.md +439 -0
- package/PARALLEL-PUBLISH-QUICK-REFERENCE.md +375 -0
- package/PARALLEL_EXECUTION_FIX.md +2 -2
- package/PUBLISH_IMPROVEMENTS_IMPLEMENTED.md +294 -0
- package/VERSION-AUDIT-FIX.md +333 -0
- package/dist/application.js +6 -6
- package/dist/application.js.map +1 -1
- package/dist/arguments.js +43 -13
- package/dist/arguments.js.map +1 -1
- package/dist/commands/audio-commit.js +18 -18
- package/dist/commands/audio-commit.js.map +1 -1
- package/dist/commands/audio-review.js +32 -32
- package/dist/commands/audio-review.js.map +1 -1
- package/dist/commands/clean.js +9 -9
- package/dist/commands/clean.js.map +1 -1
- package/dist/commands/commit.js +20 -20
- package/dist/commands/commit.js.map +1 -1
- package/dist/commands/development.js +91 -90
- package/dist/commands/development.js.map +1 -1
- package/dist/commands/link.js +36 -36
- package/dist/commands/link.js.map +1 -1
- package/dist/commands/publish.js +345 -225
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/release.js +14 -14
- package/dist/commands/release.js.map +1 -1
- package/dist/commands/review.js +15 -17
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/select-audio.js +5 -5
- package/dist/commands/select-audio.js.map +1 -1
- package/dist/commands/tree.js +75 -34
- package/dist/commands/tree.js.map +1 -1
- package/dist/commands/unlink.js +39 -39
- package/dist/commands/unlink.js.map +1 -1
- package/dist/commands/updates.js +150 -14
- package/dist/commands/updates.js.map +1 -1
- package/dist/commands/versions.js +14 -13
- package/dist/commands/versions.js.map +1 -1
- package/dist/constants.js +1 -1
- package/dist/content/diff.js +5 -5
- package/dist/content/diff.js.map +1 -1
- package/dist/content/files.js +2 -2
- package/dist/content/files.js.map +1 -1
- package/dist/content/log.js +3 -3
- package/dist/content/log.js.map +1 -1
- package/dist/execution/CommandValidator.js +6 -6
- package/dist/execution/CommandValidator.js.map +1 -1
- package/dist/execution/DynamicTaskPool.js +33 -10
- package/dist/execution/DynamicTaskPool.js.map +1 -1
- package/dist/execution/RecoveryManager.js +99 -21
- package/dist/execution/RecoveryManager.js.map +1 -1
- package/dist/execution/TreeExecutionAdapter.js +65 -48
- package/dist/execution/TreeExecutionAdapter.js.map +1 -1
- package/dist/main.js +2 -2
- package/dist/main.js.map +1 -1
- package/dist/util/checkpointManager.js +4 -4
- package/dist/util/checkpointManager.js.map +1 -1
- package/dist/util/dependencyGraph.js +2 -2
- package/dist/util/dependencyGraph.js.map +1 -1
- package/dist/util/fileLock.js +1 -1
- package/dist/util/fileLock.js.map +1 -1
- package/dist/util/general.js +148 -15
- package/dist/util/general.js.map +1 -1
- package/dist/util/interactive.js +2 -2
- package/dist/util/interactive.js.map +1 -1
- package/dist/util/performance.js.map +1 -1
- package/dist/util/safety.js +13 -13
- package/dist/util/safety.js.map +1 -1
- package/dist/utils/branchState.js +567 -0
- package/dist/utils/branchState.js.map +1 -0
- package/package.json +1 -1
- package/scripts/update-test-log-assertions.js +73 -0
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
# Version Consistency Audit Fix
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Enhanced the `kodrdriv tree publish --audit-branches` command to detect version consistency issues, preventing publish failures caused by packages having release versions on development branches or vice versa.
|
|
6
|
+
|
|
7
|
+
## Problems Fixed
|
|
8
|
+
|
|
9
|
+
### 1. ✅ Audit Misses Version Issues
|
|
10
|
+
|
|
11
|
+
**Before**: `--audit-branches` only checked:
|
|
12
|
+
- Branch consistency
|
|
13
|
+
- Uncommitted changes
|
|
14
|
+
- Sync status
|
|
15
|
+
- Merge conflicts
|
|
16
|
+
|
|
17
|
+
**Did NOT check**:
|
|
18
|
+
- Version patterns (dev vs release)
|
|
19
|
+
- Whether versions match branch expectations
|
|
20
|
+
- Monorepo version alignment
|
|
21
|
+
|
|
22
|
+
**After**: Now checks all of the above PLUS:
|
|
23
|
+
- ✅ Version patterns for each package
|
|
24
|
+
- ✅ Validates versions match branch type
|
|
25
|
+
- ✅ Shows clear fix instructions
|
|
26
|
+
- ✅ Blocks publish if issues found
|
|
27
|
+
|
|
28
|
+
### 2. ✅ Silent Version Inconsistencies
|
|
29
|
+
|
|
30
|
+
**Before**: Developer could have:
|
|
31
|
+
```
|
|
32
|
+
✅ @fjell/common-config: 1.1.37-dev.0 (correct)
|
|
33
|
+
❌ @fjell/logging: 4.4.64 (missing -dev.0 suffix)
|
|
34
|
+
✅ @fjell/core: 4.4.72-dev.0 (correct)
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
And `--audit-branches` would say "All OK!" leading to:
|
|
38
|
+
- Skipped packages during publish
|
|
39
|
+
- Unclear failures
|
|
40
|
+
- Wasted debugging time
|
|
41
|
+
|
|
42
|
+
**After**: Audit now reports:
|
|
43
|
+
```
|
|
44
|
+
⚠️ Version Issues (1 package):
|
|
45
|
+
@fjell/logging
|
|
46
|
+
- Branch: working
|
|
47
|
+
- Version: 4.4.64
|
|
48
|
+
- Issue: Release version on development branch
|
|
49
|
+
- Fix: Run kodrdriv development to update to development version
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Implementation Details
|
|
53
|
+
|
|
54
|
+
### New Utility Functions (`src/util/general.ts`)
|
|
55
|
+
|
|
56
|
+
```typescript
|
|
57
|
+
// Check if version has prerelease tag
|
|
58
|
+
export const isDevelopmentVersion = (version: string): boolean
|
|
59
|
+
|
|
60
|
+
// Check if version is release version (X.Y.Z)
|
|
61
|
+
export const isReleaseVersion = (version: string): boolean
|
|
62
|
+
|
|
63
|
+
// Get expected version pattern for branch
|
|
64
|
+
export const getExpectedVersionPattern = (branchName: string): {
|
|
65
|
+
pattern: RegExp;
|
|
66
|
+
description: string;
|
|
67
|
+
isDevelopment: boolean;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Validate version against branch expectations
|
|
71
|
+
export const validateVersionForBranch = (version: string, branchName: string): {
|
|
72
|
+
valid: boolean;
|
|
73
|
+
issue?: string;
|
|
74
|
+
fix?: string;
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Enhanced Branch Audit (`src/utils/branchState.ts`)
|
|
79
|
+
|
|
80
|
+
Added new interfaces:
|
|
81
|
+
```typescript
|
|
82
|
+
interface VersionStatus {
|
|
83
|
+
version: string;
|
|
84
|
+
isValid: boolean;
|
|
85
|
+
issue?: string;
|
|
86
|
+
fix?: string;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
interface PackageBranchAudit {
|
|
90
|
+
packageName: string;
|
|
91
|
+
path: string;
|
|
92
|
+
status: BranchStatus;
|
|
93
|
+
versionStatus?: VersionStatus; // NEW
|
|
94
|
+
issues: string[];
|
|
95
|
+
fixes: string[];
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
interface BranchAuditResult {
|
|
99
|
+
totalPackages: number;
|
|
100
|
+
goodPackages: number;
|
|
101
|
+
issuesFound: number;
|
|
102
|
+
versionIssues: number; // NEW
|
|
103
|
+
audits: PackageBranchAudit[];
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Version Pattern Rules
|
|
108
|
+
|
|
109
|
+
**Development Branches** (`working`, `development`, `dev`, `feature/*`, `wip/*`):
|
|
110
|
+
- **Expected**: `X.Y.Z-<tag>` (e.g., `1.2.3-dev.0`)
|
|
111
|
+
- **Invalid**: `X.Y.Z` (release versions)
|
|
112
|
+
- **Fix**: `kodrdriv development`
|
|
113
|
+
|
|
114
|
+
**Release Branches** (`main`, `master`, `production`, `release/*`):
|
|
115
|
+
- **Expected**: `X.Y.Z` (e.g., `1.2.3`)
|
|
116
|
+
- **Invalid**: `X.Y.Z-<tag>` (development versions)
|
|
117
|
+
- **Fix**: Do not commit dev versions to release branches
|
|
118
|
+
|
|
119
|
+
**Other Branches**:
|
|
120
|
+
- **Expected**: Either format acceptable
|
|
121
|
+
- **No strict validation**
|
|
122
|
+
|
|
123
|
+
### Enhanced Audit Output
|
|
124
|
+
|
|
125
|
+
```
|
|
126
|
+
╔══════════════════════════════════════════════════════════════╗
|
|
127
|
+
║ Branch State Audit (16 packages) ║
|
|
128
|
+
║ All packages on: working ║
|
|
129
|
+
╠══════════════════════════════════════════════════════════════╣
|
|
130
|
+
|
|
131
|
+
✅ Good State (15 packages):
|
|
132
|
+
@fjell/common-config (v1.1.37-dev.0)
|
|
133
|
+
@fjell/core (v4.4.72-dev.0)
|
|
134
|
+
@fjell/http-api (v4.4.62-dev.0)
|
|
135
|
+
...
|
|
136
|
+
|
|
137
|
+
⚠️ Version Issues (1 package):
|
|
138
|
+
@fjell/logging
|
|
139
|
+
- Branch: working
|
|
140
|
+
- Version: 4.4.64
|
|
141
|
+
- Issue: Release version on development branch
|
|
142
|
+
- Fix: Run kodrdriv development to update to development version
|
|
143
|
+
|
|
144
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
145
|
+
📝 RECOMMENDED WORKFLOW:
|
|
146
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
147
|
+
|
|
148
|
+
1️⃣ FIX VERSION ISSUES (recommended before publish):
|
|
149
|
+
• @fjell/logging: cd logging && kodrdriv development
|
|
150
|
+
|
|
151
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
152
|
+
|
|
153
|
+
🔄 After fixing issues, re-run audit to verify:
|
|
154
|
+
kodrdriv tree publish --audit-branches
|
|
155
|
+
|
|
156
|
+
✅ Once all clear, proceed with publish:
|
|
157
|
+
kodrdriv tree publish --parallel --model "gpt-5-mini"
|
|
158
|
+
|
|
159
|
+
╚══════════════════════════════════════════════════════════════╝
|
|
160
|
+
|
|
161
|
+
⚠️ Found issues in 1 package(s). Review the fixes above.
|
|
162
|
+
1 package(s) have version consistency issues
|
|
163
|
+
Run 'kodrdriv development' in each package to fix version issues
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### Integration with Tree Commands
|
|
167
|
+
|
|
168
|
+
Enhanced tree.ts audit handling:
|
|
169
|
+
```typescript
|
|
170
|
+
const auditResult = await auditBranchState(packages, undefined, {
|
|
171
|
+
targetBranch,
|
|
172
|
+
checkPR: true,
|
|
173
|
+
checkConflicts: true,
|
|
174
|
+
checkVersions: true, // NEW - enabled by default
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
if (auditResult.issuesFound > 0 || auditResult.versionIssues > 0) {
|
|
178
|
+
const totalIssues = auditResult.issuesFound + (auditResult.versionIssues || 0);
|
|
179
|
+
logger.warn(`Found issues in ${totalIssues} package(s)`);
|
|
180
|
+
|
|
181
|
+
if (auditResult.versionIssues > 0) {
|
|
182
|
+
logger.warn(`${auditResult.versionIssues} package(s) have version consistency issues`);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
## Real-World Usage
|
|
188
|
+
|
|
189
|
+
### Before This Fix
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
$ kodrdriv tree publish --audit-branches
|
|
193
|
+
✅ All 16 packages are in good state!
|
|
194
|
+
|
|
195
|
+
$ kodrdriv tree publish --parallel
|
|
196
|
+
# Publishes, but skips @fjell/logging
|
|
197
|
+
# Developer confused: "Why was logging skipped? It had changes!"
|
|
198
|
+
# 30 minutes debugging to find: version was 4.4.64 instead of 4.4.64-dev.0
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### After This Fix
|
|
202
|
+
|
|
203
|
+
```bash
|
|
204
|
+
$ kodrdriv tree publish --audit-branches
|
|
205
|
+
|
|
206
|
+
⚠️ Version Issues (1 package):
|
|
207
|
+
@fjell/logging
|
|
208
|
+
- Branch: working
|
|
209
|
+
- Version: 4.4.64
|
|
210
|
+
- Issue: Release version on development branch
|
|
211
|
+
- Fix: Run kodrdriv development to update to development version
|
|
212
|
+
|
|
213
|
+
1️⃣ FIX VERSION ISSUES (recommended before publish):
|
|
214
|
+
• @fjell/logging: cd logging && kodrdriv development
|
|
215
|
+
|
|
216
|
+
⚠️ Found issues in 1 package(s). Review the fixes above.
|
|
217
|
+
|
|
218
|
+
$ cd logging && kodrdriv development
|
|
219
|
+
✓ Updated to 4.4.65-dev.0
|
|
220
|
+
|
|
221
|
+
$ kodrdriv tree publish --audit-branches
|
|
222
|
+
✅ All 16 packages are in good state!
|
|
223
|
+
|
|
224
|
+
$ kodrdriv tree publish --parallel
|
|
225
|
+
# All packages publish successfully
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
## Files Modified
|
|
229
|
+
|
|
230
|
+
```
|
|
231
|
+
src/util/general.ts - Added version validation utilities
|
|
232
|
+
src/utils/branchState.ts - Enhanced audit with version checking
|
|
233
|
+
src/commands/tree.ts - Enabled version checking in audit
|
|
234
|
+
tests/utils/branchState.test.ts - Updated tests for new fields
|
|
235
|
+
VERSION-AUDIT-FIX.md - This documentation
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
## Test Updates
|
|
239
|
+
|
|
240
|
+
Updated existing tests to include new `versionIssues` field:
|
|
241
|
+
```typescript
|
|
242
|
+
const result: BranchAuditResult = {
|
|
243
|
+
totalPackages: 2,
|
|
244
|
+
goodPackages: 2,
|
|
245
|
+
issuesFound: 0,
|
|
246
|
+
versionIssues: 0, // NEW
|
|
247
|
+
audits: [...]
|
|
248
|
+
};
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
## Backward Compatibility
|
|
252
|
+
|
|
253
|
+
✅ **Fully backward compatible**
|
|
254
|
+
- Version checking enabled by default (can be disabled with `checkVersions: false`)
|
|
255
|
+
- Existing audit functionality unchanged
|
|
256
|
+
- New fields added to interfaces (optional in most contexts)
|
|
257
|
+
|
|
258
|
+
## Impact
|
|
259
|
+
|
|
260
|
+
### Before
|
|
261
|
+
- ❌ Version issues discovered during publish (too late)
|
|
262
|
+
- ❌ Unclear why packages skipped
|
|
263
|
+
- ❌ 30+ minutes debugging per issue
|
|
264
|
+
- ❌ No pre-flight validation
|
|
265
|
+
|
|
266
|
+
### After
|
|
267
|
+
- ✅ Version issues caught in audit (before publish)
|
|
268
|
+
- ✅ Clear fix instructions shown
|
|
269
|
+
- ✅ 2 minutes to identify and fix
|
|
270
|
+
- ✅ Confidence before publishing
|
|
271
|
+
|
|
272
|
+
## Remaining Work (Future Enhancements)
|
|
273
|
+
|
|
274
|
+
### 1. Tree Development Command (Not Implemented)
|
|
275
|
+
|
|
276
|
+
User requested but not yet implemented:
|
|
277
|
+
```bash
|
|
278
|
+
kodrdriv tree development
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
Would update ALL packages in monorepo to development versions in one command.
|
|
282
|
+
|
|
283
|
+
**Current Workaround**: Run `kodrdriv development` in each package individually, or use the audit to identify which packages need updating.
|
|
284
|
+
|
|
285
|
+
### 2. Smart Monorepo Detection (Not Implemented)
|
|
286
|
+
|
|
287
|
+
User requested: When running `kodrdriv development` in one package, detect monorepo and ask:
|
|
288
|
+
```
|
|
289
|
+
📦 Detected monorepo: 16 packages found
|
|
290
|
+
Update only this package, or all packages in monorepo? [single/all]
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
**Current Behavior**: Only updates current package.
|
|
294
|
+
|
|
295
|
+
### 3. Automated Version Alignment (Not Implemented)
|
|
296
|
+
|
|
297
|
+
User requested: Automatically update all packages when one is updated.
|
|
298
|
+
|
|
299
|
+
**Current Behavior**: Manual per-package updates required.
|
|
300
|
+
|
|
301
|
+
## Priority Assessment
|
|
302
|
+
|
|
303
|
+
**COMPLETED (This PR)**:
|
|
304
|
+
- ✅ Version consistency checking in audit
|
|
305
|
+
- ✅ Clear error messages and fix instructions
|
|
306
|
+
- ✅ Integration with existing workflows
|
|
307
|
+
|
|
308
|
+
**FUTURE (Lower Priority)**:
|
|
309
|
+
- Tree development command (nice-to-have)
|
|
310
|
+
- Automatic monorepo-wide updates (quality-of-life)
|
|
311
|
+
- Smart monorepo detection (convenience)
|
|
312
|
+
|
|
313
|
+
The core issue (audit missing version problems) is **FIXED**. The remaining items are enhancements that improve convenience but don't block workflows.
|
|
314
|
+
|
|
315
|
+
## Version
|
|
316
|
+
|
|
317
|
+
Implemented in: **kodrdriv 1.2.29-dev.0**
|
|
318
|
+
|
|
319
|
+
---
|
|
320
|
+
|
|
321
|
+
## Example Test Case
|
|
322
|
+
|
|
323
|
+
Given monorepo with 3 packages:
|
|
324
|
+
- package-a: 1.0.0-dev.0 on `working` branch ✓
|
|
325
|
+
- package-b: 2.0.0 on `working` branch ✗ (missing -dev.0)
|
|
326
|
+
- package-c: 3.0.0-dev.0 on `working` branch ✓
|
|
327
|
+
|
|
328
|
+
Running `kodrdriv tree publish --audit-branches`:
|
|
329
|
+
- ✅ Reports version issue in package-b
|
|
330
|
+
- ✅ Provides fix command
|
|
331
|
+
- ✅ Returns non-zero exit code
|
|
332
|
+
- ✅ Prevents publish from proceeding until fixed
|
|
333
|
+
|
package/dist/application.js
CHANGED
|
@@ -27,10 +27,10 @@ import { getLogger, setLogLevel } from './logging.js';
|
|
|
27
27
|
*/ function printDebugCommandInfo(commandName, runConfig) {
|
|
28
28
|
if (runConfig.debug) {
|
|
29
29
|
const logger = getLogger();
|
|
30
|
-
logger.info('
|
|
31
|
-
logger.info('Command: %s', commandName);
|
|
32
|
-
logger.info('Version: %s', VERSION);
|
|
33
|
-
logger.info('
|
|
30
|
+
logger.info('DEBUG_INFO_HEADER: KodrDriv debug information');
|
|
31
|
+
logger.info('DEBUG_INFO_COMMAND: Command being executed | Command: %s', commandName);
|
|
32
|
+
logger.info('DEBUG_INFO_VERSION: KodrDriv version | Version: %s', VERSION);
|
|
33
|
+
logger.info('DEBUG_INFO_FOOTER: End of debug information');
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
/**
|
|
@@ -81,7 +81,7 @@ async function runApplication() {
|
|
|
81
81
|
setLogger$1(logger);
|
|
82
82
|
setPromptFunction(promptConfirmation);
|
|
83
83
|
// Display version information
|
|
84
|
-
logger.info('
|
|
84
|
+
logger.info('APPLICATION_STARTING: KodrDriv application initializing | Version: %s | Status: starting', VERSION);
|
|
85
85
|
// Handle check-config command first
|
|
86
86
|
if (commandConfig.commandName === COMMAND_CHECK_CONFIG) {
|
|
87
87
|
// CardiganTime's checkConfig has already been called in Arguments.configure()
|
|
@@ -174,7 +174,7 @@ async function runApplication() {
|
|
|
174
174
|
} catch (error) {
|
|
175
175
|
// Handle user cancellation gracefully
|
|
176
176
|
if (error instanceof UserCancellationError) {
|
|
177
|
-
logger.info(error.message);
|
|
177
|
+
logger.info('APPLICATION_ERROR: Application error occurred | Error: ' + error.message);
|
|
178
178
|
process.exit(0);
|
|
179
179
|
}
|
|
180
180
|
// Re-throw other errors to be handled by main.ts
|
package/dist/application.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"application.js","sources":["../src/application.ts"],"sourcesContent":["import * as Cardigantime from '@theunwalked/cardigantime';\nimport 'dotenv/config';\nimport { setLogger as setGitLogger } from '@eldrforge/git-tools';\nimport { setLogger as setGitHubLogger, setPromptFunction } from '@eldrforge/github-tools';\nimport { promptConfirmation } from './util/stdin';\nimport { CommandConfig } from 'types';\nimport * as Arguments from './arguments';\nimport * as AudioCommit from './commands/audio-commit';\nimport * as AudioReview from './commands/audio-review';\nimport * as Clean from './commands/clean';\nimport * as Commit from './commands/commit';\nimport * as Development from './commands/development';\nimport * as Link from './commands/link';\nimport * as Publish from './commands/publish';\nimport * as Release from './commands/release';\nimport * as Review from './commands/review';\nimport * as SelectAudio from './commands/select-audio';\nimport * as Tree from './commands/tree';\nimport * as Unlink from './commands/unlink';\nimport * as Updates from './commands/updates';\nimport * as Versions from './commands/versions';\nimport { COMMAND_AUDIO_COMMIT, COMMAND_AUDIO_REVIEW, COMMAND_CHECK_CONFIG, COMMAND_CLEAN, COMMAND_COMMIT, COMMAND_DEVELOPMENT, COMMAND_INIT_CONFIG, COMMAND_LINK, COMMAND_PUBLISH, COMMAND_RELEASE, COMMAND_REVIEW, COMMAND_SELECT_AUDIO, COMMAND_TREE, COMMAND_UNLINK, COMMAND_UPDATES, COMMAND_VERSIONS, DEFAULT_CONFIG_DIR, VERSION } from './constants';\nimport { UserCancellationError } from './error/CommandErrors';\nimport { getLogger, setLogLevel } from './logging';\nimport { Config, SecureConfig } from './types';\n\n/**\n * Print debug information about the command being executed when debug flag is enabled.\n */\nfunction printDebugCommandInfo(commandName: string, runConfig: Config): void {\n if (runConfig.debug) {\n const logger = getLogger();\n logger.info('=== KODRDRIV DEBUG INFO ===');\n logger.info('Command: %s', commandName);\n logger.info('Version: %s', VERSION);\n logger.info('===========================');\n }\n}\n\n/**\n * Configure early logging based on command line flags.\n *\n * Hey we need this because we need to be able to debug CardiganTime.\n * This method checks for --verbose and --debug flags early in the process\n * before CardiganTime is configured, allowing us to capture debug output\n * from the CardiganTime initialization itself.\n */\nexport function configureEarlyLogging(): void {\n const hasVerbose = process.argv.includes('--verbose');\n const hasDebug = process.argv.includes('--debug');\n\n // Set log level based on early flag detection\n if (hasDebug) {\n setLogLevel('debug');\n } else if (hasVerbose) {\n setLogLevel('verbose');\n }\n}\n\nexport async function runApplication(): Promise<void> {\n // Configure logging early, before CardiganTime initialization\n configureEarlyLogging();\n\n // Use proper typing for CardiganTime create function\n interface CardigantimeCreateParams {\n defaults?: any;\n features?: string[];\n configShape?: any;\n logger?: any;\n }\n\n interface CardigantimeInstance {\n read: (args: any) => Promise<any>;\n checkConfig: () => Promise<void>;\n generateConfig: (dir: string) => Promise<void>;\n setLogger: (logger: any) => void;\n }\n\n const cardigantimeModule = Cardigantime as any;\n const createCardigantime = cardigantimeModule.create as (params: CardigantimeCreateParams) => CardigantimeInstance;\n\n const cardigantime = createCardigantime({\n defaults: {\n configDirectory: DEFAULT_CONFIG_DIR,\n },\n features: ['config', 'hierarchical'],\n logger: getLogger(),\n });\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const [runConfig, secureConfig, commandConfig]: [Config, SecureConfig, CommandConfig] = await Arguments.configure(cardigantime); // Pass cardigantime instance\n\n // Set log level based on verbose flag\n if (runConfig.verbose) {\n setLogLevel('verbose');\n }\n if (runConfig.debug) {\n setLogLevel('debug');\n }\n\n const logger = getLogger();\n cardigantime.setLogger(logger);\n\n // Configure external packages to use our logger and prompt\n setGitLogger(logger);\n setGitHubLogger(logger);\n setPromptFunction(promptConfirmation);\n\n // Display version information\n logger.info('🚀 kodrdriv %s', VERSION);\n\n // Handle check-config command first\n if (commandConfig.commandName === COMMAND_CHECK_CONFIG) {\n // CardiganTime's checkConfig has already been called in Arguments.configure()\n // No additional processing needed here\n return;\n }\n\n // Handle init-config command\n if (commandConfig.commandName === COMMAND_INIT_CONFIG) {\n // CardiganTime's initConfig has already been called in Arguments.configure()\n // No additional processing needed here\n return;\n }\n\n // Get the command from Commander\n const command = process.argv[2];\n let commandName = commandConfig.commandName;\n\n // Handle special case for tree command with built-in command argument\n if (command === 'tree' && process.argv[3]) {\n const treeBuiltInCommand = process.argv[3];\n const supportedBuiltInCommands = ['commit', 'publish', 'link', 'unlink', 'development', 'updates'];\n if (supportedBuiltInCommands.includes(treeBuiltInCommand)) {\n // This is a tree command with built-in command, keep commandName as 'tree'\n commandName = 'tree';\n } else {\n // Unknown tree argument, let it fail naturally in tree.ts\n commandName = 'tree';\n }\n }\n // If we have a specific command argument, use that\n else if (command === 'commit' || command === 'audio-commit' || command === 'release' || command === 'publish' || command === 'tree' || command === 'link' || command === 'unlink' || command === 'audio-review' || command === 'clean' || command === 'review' || command === 'select-audio' || command === 'development' || command === 'versions' || command === 'updates') {\n commandName = command;\n }\n\n let summary: string = '';\n\n try {\n // Print debug info at the start of command execution\n if (commandName) {\n printDebugCommandInfo(commandName, runConfig);\n }\n\n if (commandName === COMMAND_COMMIT) {\n summary = await Commit.execute(runConfig);\n } else if (commandName === COMMAND_AUDIO_COMMIT) {\n summary = await AudioCommit.execute(runConfig);\n } else if (commandName === COMMAND_RELEASE) {\n const releaseSummary = await Release.execute(runConfig);\n summary = `${releaseSummary.title}\\n\\n${releaseSummary.body}`;\n } else if (commandName === COMMAND_PUBLISH) {\n await Publish.execute(runConfig);\n } else if (commandName === COMMAND_TREE) {\n // Handle tree directories mapping from command-specific arguments\n if (runConfig.audioReview?.directory && !runConfig.tree?.directories) {\n runConfig.tree = runConfig.tree || {};\n runConfig.tree.directories = [runConfig.audioReview.directory];\n }\n // Handle tree exclusion patterns - use global excludedPatterns for tree\n if (runConfig.excludedPatterns && !runConfig.tree?.exclude) {\n runConfig.tree = runConfig.tree || {};\n runConfig.tree.exclude = runConfig.excludedPatterns;\n }\n summary = await Tree.execute(runConfig);\n } else if (commandName === COMMAND_LINK) {\n summary = await Link.execute(runConfig);\n } else if (commandName === COMMAND_UNLINK) {\n summary = await Unlink.execute(runConfig);\n } else if (commandName === COMMAND_AUDIO_REVIEW) {\n summary = await AudioReview.execute(runConfig);\n } else if (commandName === COMMAND_CLEAN) {\n await Clean.execute(runConfig);\n summary = 'Output directory cleaned successfully.';\n } else if (commandName === COMMAND_REVIEW) {\n summary = await Review.execute(runConfig);\n } else if (commandName === COMMAND_SELECT_AUDIO) {\n await SelectAudio.execute(runConfig);\n summary = 'Audio selection completed successfully.';\n } else if (commandName === COMMAND_DEVELOPMENT) {\n summary = await Development.execute(runConfig);\n } else if (commandName === COMMAND_VERSIONS) {\n summary = await Versions.execute(runConfig);\n } else if (commandName === COMMAND_UPDATES) {\n summary = await Updates.execute(runConfig);\n }\n\n // eslint-disable-next-line no-console\n console.log(`\\n\\n${summary}\\n\\n`);\n } catch (error: any) {\n // Handle user cancellation gracefully\n if (error instanceof UserCancellationError) {\n logger.info(error.message);\n process.exit(0);\n }\n\n // Re-throw other errors to be handled by main.ts\n throw error;\n }\n}\n"],"names":["printDebugCommandInfo","commandName","runConfig","debug","logger","getLogger","info","VERSION","configureEarlyLogging","hasVerbose","process","argv","includes","hasDebug","setLogLevel","runApplication","cardigantimeModule","Cardigantime","createCardigantime","create","cardigantime","defaults","configDirectory","DEFAULT_CONFIG_DIR","features","secureConfig","commandConfig","Arguments","verbose","setLogger","setGitLogger","setGitHubLogger","setPromptFunction","promptConfirmation","COMMAND_CHECK_CONFIG","COMMAND_INIT_CONFIG","command","treeBuiltInCommand","supportedBuiltInCommands","summary","COMMAND_COMMIT","Commit","COMMAND_AUDIO_COMMIT","AudioCommit","COMMAND_RELEASE","releaseSummary","Release","title","body","COMMAND_PUBLISH","Publish","COMMAND_TREE","audioReview","directory","tree","directories","excludedPatterns","exclude","Tree","COMMAND_LINK","Link","COMMAND_UNLINK","Unlink","COMMAND_AUDIO_REVIEW","AudioReview","COMMAND_CLEAN","Clean","COMMAND_REVIEW","Review","COMMAND_SELECT_AUDIO","SelectAudio","COMMAND_DEVELOPMENT","Development","COMMAND_VERSIONS","Versions","COMMAND_UPDATES","Updates","console","log","error","UserCancellationError","message","exit"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"application.js","sources":["../src/application.ts"],"sourcesContent":["import * as Cardigantime from '@theunwalked/cardigantime';\nimport 'dotenv/config';\nimport { setLogger as setGitLogger } from '@eldrforge/git-tools';\nimport { setLogger as setGitHubLogger, setPromptFunction } from '@eldrforge/github-tools';\nimport { promptConfirmation } from './util/stdin';\nimport { CommandConfig } from 'types';\nimport * as Arguments from './arguments';\nimport * as AudioCommit from './commands/audio-commit';\nimport * as AudioReview from './commands/audio-review';\nimport * as Clean from './commands/clean';\nimport * as Commit from './commands/commit';\nimport * as Development from './commands/development';\nimport * as Link from './commands/link';\nimport * as Publish from './commands/publish';\nimport * as Release from './commands/release';\nimport * as Review from './commands/review';\nimport * as SelectAudio from './commands/select-audio';\nimport * as Tree from './commands/tree';\nimport * as Unlink from './commands/unlink';\nimport * as Updates from './commands/updates';\nimport * as Versions from './commands/versions';\nimport { COMMAND_AUDIO_COMMIT, COMMAND_AUDIO_REVIEW, COMMAND_CHECK_CONFIG, COMMAND_CLEAN, COMMAND_COMMIT, COMMAND_DEVELOPMENT, COMMAND_INIT_CONFIG, COMMAND_LINK, COMMAND_PUBLISH, COMMAND_RELEASE, COMMAND_REVIEW, COMMAND_SELECT_AUDIO, COMMAND_TREE, COMMAND_UNLINK, COMMAND_UPDATES, COMMAND_VERSIONS, DEFAULT_CONFIG_DIR, VERSION } from './constants';\nimport { UserCancellationError } from './error/CommandErrors';\nimport { getLogger, setLogLevel } from './logging';\nimport { Config, SecureConfig } from './types';\n\n/**\n * Print debug information about the command being executed when debug flag is enabled.\n */\nfunction printDebugCommandInfo(commandName: string, runConfig: Config): void {\n if (runConfig.debug) {\n const logger = getLogger();\n logger.info('DEBUG_INFO_HEADER: KodrDriv debug information');\n logger.info('DEBUG_INFO_COMMAND: Command being executed | Command: %s', commandName);\n logger.info('DEBUG_INFO_VERSION: KodrDriv version | Version: %s', VERSION);\n logger.info('DEBUG_INFO_FOOTER: End of debug information');\n }\n}\n\n/**\n * Configure early logging based on command line flags.\n *\n * Hey we need this because we need to be able to debug CardiganTime.\n * This method checks for --verbose and --debug flags early in the process\n * before CardiganTime is configured, allowing us to capture debug output\n * from the CardiganTime initialization itself.\n */\nexport function configureEarlyLogging(): void {\n const hasVerbose = process.argv.includes('--verbose');\n const hasDebug = process.argv.includes('--debug');\n\n // Set log level based on early flag detection\n if (hasDebug) {\n setLogLevel('debug');\n } else if (hasVerbose) {\n setLogLevel('verbose');\n }\n}\n\nexport async function runApplication(): Promise<void> {\n // Configure logging early, before CardiganTime initialization\n configureEarlyLogging();\n\n // Use proper typing for CardiganTime create function\n interface CardigantimeCreateParams {\n defaults?: any;\n features?: string[];\n configShape?: any;\n logger?: any;\n }\n\n interface CardigantimeInstance {\n read: (args: any) => Promise<any>;\n checkConfig: () => Promise<void>;\n generateConfig: (dir: string) => Promise<void>;\n setLogger: (logger: any) => void;\n }\n\n const cardigantimeModule = Cardigantime as any;\n const createCardigantime = cardigantimeModule.create as (params: CardigantimeCreateParams) => CardigantimeInstance;\n\n const cardigantime = createCardigantime({\n defaults: {\n configDirectory: DEFAULT_CONFIG_DIR,\n },\n features: ['config', 'hierarchical'],\n logger: getLogger(),\n });\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const [runConfig, secureConfig, commandConfig]: [Config, SecureConfig, CommandConfig] = await Arguments.configure(cardigantime); // Pass cardigantime instance\n\n // Set log level based on verbose flag\n if (runConfig.verbose) {\n setLogLevel('verbose');\n }\n if (runConfig.debug) {\n setLogLevel('debug');\n }\n\n const logger = getLogger();\n cardigantime.setLogger(logger);\n\n // Configure external packages to use our logger and prompt\n setGitLogger(logger);\n setGitHubLogger(logger);\n setPromptFunction(promptConfirmation);\n\n // Display version information\n logger.info('APPLICATION_STARTING: KodrDriv application initializing | Version: %s | Status: starting', VERSION);\n\n // Handle check-config command first\n if (commandConfig.commandName === COMMAND_CHECK_CONFIG) {\n // CardiganTime's checkConfig has already been called in Arguments.configure()\n // No additional processing needed here\n return;\n }\n\n // Handle init-config command\n if (commandConfig.commandName === COMMAND_INIT_CONFIG) {\n // CardiganTime's initConfig has already been called in Arguments.configure()\n // No additional processing needed here\n return;\n }\n\n // Get the command from Commander\n const command = process.argv[2];\n let commandName = commandConfig.commandName;\n\n // Handle special case for tree command with built-in command argument\n if (command === 'tree' && process.argv[3]) {\n const treeBuiltInCommand = process.argv[3];\n const supportedBuiltInCommands = ['commit', 'publish', 'link', 'unlink', 'development', 'updates'];\n if (supportedBuiltInCommands.includes(treeBuiltInCommand)) {\n // This is a tree command with built-in command, keep commandName as 'tree'\n commandName = 'tree';\n } else {\n // Unknown tree argument, let it fail naturally in tree.ts\n commandName = 'tree';\n }\n }\n // If we have a specific command argument, use that\n else if (command === 'commit' || command === 'audio-commit' || command === 'release' || command === 'publish' || command === 'tree' || command === 'link' || command === 'unlink' || command === 'audio-review' || command === 'clean' || command === 'review' || command === 'select-audio' || command === 'development' || command === 'versions' || command === 'updates') {\n commandName = command;\n }\n\n let summary: string = '';\n\n try {\n // Print debug info at the start of command execution\n if (commandName) {\n printDebugCommandInfo(commandName, runConfig);\n }\n\n if (commandName === COMMAND_COMMIT) {\n summary = await Commit.execute(runConfig);\n } else if (commandName === COMMAND_AUDIO_COMMIT) {\n summary = await AudioCommit.execute(runConfig);\n } else if (commandName === COMMAND_RELEASE) {\n const releaseSummary = await Release.execute(runConfig);\n summary = `${releaseSummary.title}\\n\\n${releaseSummary.body}`;\n } else if (commandName === COMMAND_PUBLISH) {\n await Publish.execute(runConfig);\n } else if (commandName === COMMAND_TREE) {\n // Handle tree directories mapping from command-specific arguments\n if (runConfig.audioReview?.directory && !runConfig.tree?.directories) {\n runConfig.tree = runConfig.tree || {};\n runConfig.tree.directories = [runConfig.audioReview.directory];\n }\n // Handle tree exclusion patterns - use global excludedPatterns for tree\n if (runConfig.excludedPatterns && !runConfig.tree?.exclude) {\n runConfig.tree = runConfig.tree || {};\n runConfig.tree.exclude = runConfig.excludedPatterns;\n }\n summary = await Tree.execute(runConfig);\n } else if (commandName === COMMAND_LINK) {\n summary = await Link.execute(runConfig);\n } else if (commandName === COMMAND_UNLINK) {\n summary = await Unlink.execute(runConfig);\n } else if (commandName === COMMAND_AUDIO_REVIEW) {\n summary = await AudioReview.execute(runConfig);\n } else if (commandName === COMMAND_CLEAN) {\n await Clean.execute(runConfig);\n summary = 'Output directory cleaned successfully.';\n } else if (commandName === COMMAND_REVIEW) {\n summary = await Review.execute(runConfig);\n } else if (commandName === COMMAND_SELECT_AUDIO) {\n await SelectAudio.execute(runConfig);\n summary = 'Audio selection completed successfully.';\n } else if (commandName === COMMAND_DEVELOPMENT) {\n summary = await Development.execute(runConfig);\n } else if (commandName === COMMAND_VERSIONS) {\n summary = await Versions.execute(runConfig);\n } else if (commandName === COMMAND_UPDATES) {\n summary = await Updates.execute(runConfig);\n }\n\n // eslint-disable-next-line no-console\n console.log(`\\n\\n${summary}\\n\\n`);\n } catch (error: any) {\n // Handle user cancellation gracefully\n if (error instanceof UserCancellationError) {\n logger.info('APPLICATION_ERROR: Application error occurred | Error: ' + error.message);\n process.exit(0);\n }\n\n // Re-throw other errors to be handled by main.ts\n throw error;\n }\n}\n"],"names":["printDebugCommandInfo","commandName","runConfig","debug","logger","getLogger","info","VERSION","configureEarlyLogging","hasVerbose","process","argv","includes","hasDebug","setLogLevel","runApplication","cardigantimeModule","Cardigantime","createCardigantime","create","cardigantime","defaults","configDirectory","DEFAULT_CONFIG_DIR","features","secureConfig","commandConfig","Arguments","verbose","setLogger","setGitLogger","setGitHubLogger","setPromptFunction","promptConfirmation","COMMAND_CHECK_CONFIG","COMMAND_INIT_CONFIG","command","treeBuiltInCommand","supportedBuiltInCommands","summary","COMMAND_COMMIT","Commit","COMMAND_AUDIO_COMMIT","AudioCommit","COMMAND_RELEASE","releaseSummary","Release","title","body","COMMAND_PUBLISH","Publish","COMMAND_TREE","audioReview","directory","tree","directories","excludedPatterns","exclude","Tree","COMMAND_LINK","Link","COMMAND_UNLINK","Unlink","COMMAND_AUDIO_REVIEW","AudioReview","COMMAND_CLEAN","Clean","COMMAND_REVIEW","Review","COMMAND_SELECT_AUDIO","SelectAudio","COMMAND_DEVELOPMENT","Development","COMMAND_VERSIONS","Versions","COMMAND_UPDATES","Updates","console","log","error","UserCancellationError","message","exit"],"mappings":"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"}
|
package/dist/arguments.js
CHANGED
|
@@ -33,6 +33,8 @@ z.object({
|
|
|
33
33
|
from: z.string().optional(),
|
|
34
34
|
to: z.string().optional(),
|
|
35
35
|
targetVersion: z.string().optional(),
|
|
36
|
+
skipAlreadyPublished: z.boolean().optional(),
|
|
37
|
+
forceRepublish: z.boolean().optional(),
|
|
36
38
|
excludedPatterns: z.array(z.string()).optional(),
|
|
37
39
|
excludedPaths: z.array(z.string()).optional(),
|
|
38
40
|
exclude: z.array(z.string()).optional(),
|
|
@@ -78,7 +80,9 @@ z.object({
|
|
|
78
80
|
scope: z.string().optional(),
|
|
79
81
|
tagWorkingBranch: z.boolean().optional(),
|
|
80
82
|
createRetroactiveTags: z.boolean().optional(),
|
|
81
|
-
workingTagPrefix: z.string().optional()
|
|
83
|
+
workingTagPrefix: z.string().optional(),
|
|
84
|
+
updateDeps: z.string().optional(),
|
|
85
|
+
interProject: z.boolean().optional()
|
|
82
86
|
});
|
|
83
87
|
// Function to transform flat CLI args into nested Config structure
|
|
84
88
|
const transformCliArgs = (finalCliArgs, commandName)=>{
|
|
@@ -136,14 +140,17 @@ const transformCliArgs = (finalCliArgs, commandName)=>{
|
|
|
136
140
|
}
|
|
137
141
|
}
|
|
138
142
|
// Nested mappings for 'publish' options – map whenever publish-specific options are provided
|
|
139
|
-
if (finalCliArgs.mergeMethod !== undefined || finalCliArgs.targetVersion !== undefined || finalCliArgs.interactive !== undefined || finalCliArgs.syncTarget !== undefined || commandName === 'publish' && (finalCliArgs.from !== undefined || finalCliArgs.noMilestones !== undefined)) {
|
|
143
|
+
if (finalCliArgs.mergeMethod !== undefined || finalCliArgs.targetVersion !== undefined || finalCliArgs.interactive !== undefined || finalCliArgs.syncTarget !== undefined || finalCliArgs.skipAlreadyPublished !== undefined || finalCliArgs.forceRepublish !== undefined || commandName === 'publish' && (finalCliArgs.from !== undefined || finalCliArgs.noMilestones !== undefined)) {
|
|
140
144
|
transformedCliArgs.publish = {};
|
|
141
145
|
if (finalCliArgs.mergeMethod !== undefined) transformedCliArgs.publish.mergeMethod = finalCliArgs.mergeMethod;
|
|
142
|
-
if ((commandName === 'publish' || finalCliArgs.mergeMethod !== undefined || finalCliArgs.targetVersion !== undefined || finalCliArgs.syncTarget !== undefined || finalCliArgs.interactive !== undefined) && finalCliArgs.from !== undefined) transformedCliArgs.publish.from = finalCliArgs.from;
|
|
146
|
+
if ((commandName === 'publish' || finalCliArgs.mergeMethod !== undefined || finalCliArgs.targetVersion !== undefined || finalCliArgs.syncTarget !== undefined || finalCliArgs.interactive !== undefined || finalCliArgs.skipAlreadyPublished !== undefined || finalCliArgs.forceRepublish !== undefined) && finalCliArgs.from !== undefined) transformedCliArgs.publish.from = finalCliArgs.from;
|
|
143
147
|
if (finalCliArgs.targetVersion !== undefined) transformedCliArgs.publish.targetVersion = finalCliArgs.targetVersion;
|
|
144
148
|
if (finalCliArgs.interactive !== undefined) transformedCliArgs.publish.interactive = finalCliArgs.interactive;
|
|
145
149
|
if (finalCliArgs.syncTarget !== undefined) transformedCliArgs.publish.syncTarget = finalCliArgs.syncTarget;
|
|
146
|
-
if (
|
|
150
|
+
if (finalCliArgs.skipAlreadyPublished !== undefined) transformedCliArgs.publish.skipAlreadyPublished = finalCliArgs.skipAlreadyPublished;
|
|
151
|
+
if (finalCliArgs.forceRepublish !== undefined) transformedCliArgs.publish.forceRepublish = finalCliArgs.forceRepublish;
|
|
152
|
+
if ((commandName === 'publish' || finalCliArgs.mergeMethod !== undefined || finalCliArgs.targetVersion !== undefined || finalCliArgs.syncTarget !== undefined || finalCliArgs.interactive !== undefined || finalCliArgs.skipAlreadyPublished !== undefined || finalCliArgs.forceRepublish !== undefined) && finalCliArgs.noMilestones !== undefined) transformedCliArgs.publish.noMilestones = finalCliArgs.noMilestones;
|
|
153
|
+
if (finalCliArgs.updateDeps !== undefined) transformedCliArgs.publish.updateDeps = finalCliArgs.updateDeps;
|
|
147
154
|
}
|
|
148
155
|
// Nested mappings for 'development' options
|
|
149
156
|
if (commandName === 'development' && (finalCliArgs.targetVersion !== undefined || finalCliArgs.noMilestones !== undefined || finalCliArgs.tagWorkingBranch !== undefined || finalCliArgs.createRetroactiveTags !== undefined || finalCliArgs.workingTagPrefix !== undefined)) {
|
|
@@ -247,7 +254,8 @@ const transformCliArgs = (finalCliArgs, commandName)=>{
|
|
|
247
254
|
const builtInCommand = finalCliArgs.builtInCommand;
|
|
248
255
|
const packageArgument = finalCliArgs.packageArgument;
|
|
249
256
|
// Only create tree object if there are actual tree-specific options
|
|
250
|
-
|
|
257
|
+
const cliArgs = finalCliArgs;
|
|
258
|
+
if (finalCliArgs.directories !== undefined || finalCliArgs.directory !== undefined || finalCliArgs.startFrom !== undefined || finalCliArgs.stopAt !== undefined || finalCliArgs.cmd !== undefined || builtInCommand !== undefined || finalCliArgs.continue !== undefined || packageArgument !== undefined || finalCliArgs.cleanNodeModules !== undefined || finalCliArgs.externals !== undefined || cliArgs.statusParallel !== undefined || cliArgs.auditBranches !== undefined || cliArgs.parallel !== undefined || cliArgs.markCompleted !== undefined || cliArgs.skip !== undefined || cliArgs.retryFailed !== undefined || cliArgs.skipFailed !== undefined || cliArgs.validateState !== undefined) {
|
|
251
259
|
transformedCliArgs.tree = {};
|
|
252
260
|
if (finalCliArgs.directories !== undefined) transformedCliArgs.tree.directories = finalCliArgs.directories;
|
|
253
261
|
else if (finalCliArgs.directory !== undefined) transformedCliArgs.tree.directories = [
|
|
@@ -263,8 +271,7 @@ const transformCliArgs = (finalCliArgs, commandName)=>{
|
|
|
263
271
|
if (packageArgument !== undefined) transformedCliArgs.tree.packageArgument = packageArgument;
|
|
264
272
|
if (finalCliArgs.cleanNodeModules !== undefined) transformedCliArgs.tree.cleanNodeModules = finalCliArgs.cleanNodeModules;
|
|
265
273
|
if (finalCliArgs.externals !== undefined) transformedCliArgs.tree.externals = finalCliArgs.externals;
|
|
266
|
-
// Parallel execution options
|
|
267
|
-
const cliArgs = finalCliArgs;
|
|
274
|
+
// Parallel execution options
|
|
268
275
|
if (cliArgs.parallel !== undefined) transformedCliArgs.tree.parallel = cliArgs.parallel;
|
|
269
276
|
if (cliArgs.maxConcurrency !== undefined) transformedCliArgs.tree.maxConcurrency = cliArgs.maxConcurrency;
|
|
270
277
|
if (cliArgs.maxRetries !== undefined || cliArgs.retryDelay !== undefined) {
|
|
@@ -277,6 +284,7 @@ const transformCliArgs = (finalCliArgs, commandName)=>{
|
|
|
277
284
|
}
|
|
278
285
|
// Recovery options
|
|
279
286
|
if (cliArgs.statusParallel !== undefined) transformedCliArgs.tree.statusParallel = cliArgs.statusParallel;
|
|
287
|
+
if (cliArgs.auditBranches !== undefined) transformedCliArgs.tree.auditBranches = cliArgs.auditBranches;
|
|
280
288
|
if (cliArgs.markCompleted !== undefined) {
|
|
281
289
|
transformedCliArgs.tree.markCompleted = cliArgs.markCompleted.split(',').map((s)=>s.trim());
|
|
282
290
|
}
|
|
@@ -304,10 +312,11 @@ const transformCliArgs = (finalCliArgs, commandName)=>{
|
|
|
304
312
|
if (finalCliArgs.directories !== undefined) transformedCliArgs.versions.directories = finalCliArgs.directories;
|
|
305
313
|
}
|
|
306
314
|
// Nested mappings for 'updates' options
|
|
307
|
-
if (commandName === 'updates' && (finalCliArgs.scope !== undefined || finalCliArgs.directories !== undefined)) {
|
|
315
|
+
if (commandName === 'updates' && (finalCliArgs.scope !== undefined || finalCliArgs.directories !== undefined || finalCliArgs.interProject !== undefined)) {
|
|
308
316
|
transformedCliArgs.updates = {};
|
|
309
317
|
if (finalCliArgs.scope !== undefined) transformedCliArgs.updates.scope = finalCliArgs.scope;
|
|
310
318
|
if (finalCliArgs.directories !== undefined) transformedCliArgs.updates.directories = finalCliArgs.directories;
|
|
319
|
+
if (finalCliArgs.interProject !== undefined) transformedCliArgs.updates.interProject = finalCliArgs.interProject;
|
|
311
320
|
}
|
|
312
321
|
// Handle excluded patterns (Commander.js converts --excluded-paths to excludedPaths)
|
|
313
322
|
// Also handle exclude as alias for excludedPatterns
|
|
@@ -619,9 +628,30 @@ async function getCliConfig(program, commands) {
|
|
|
619
628
|
addSharedOptions(audioCommitCommand);
|
|
620
629
|
const releaseCommand = program.command('release').option('--from <from>', 'branch to generate release notes from').option('--to <to>', 'branch to generate release notes to').option('--context <context>', 'context for the commit message').option('--interactive', 'Present release notes for interactive review and editing').option('--max-diff-bytes <maxDiffBytes>', 'maximum bytes per file in diff (default: 2048)').option('--no-milestones', 'disable GitHub milestone integration').option('--from-main', 'force comparison against main branch instead of previous release tag').description('Generate release notes');
|
|
621
630
|
addSharedOptions(releaseCommand);
|
|
622
|
-
const publishCommand = program.command('publish').option('--merge-method <method>', 'method to merge PR (merge, squash, rebase)', 'squash').option('--from <from>', 'branch/tag to generate release notes from (default: previous release tag)').option('--target-version <targetVersion>', 'target version for release (explicit version like "4.30.0" or semantic bump: "patch", "minor", "major")').option('--interactive', 'present release notes for interactive review and editing').option('--sendit', 'skip all confirmation prompts and proceed automatically').option('--sync-target', 'attempt to automatically sync target branch with remote before publishing').option('--no-milestones', 'disable GitHub milestone integration').option('--from-main', 'force comparison against main branch instead of previous release tag').description('Publish a release');
|
|
631
|
+
const publishCommand = program.command('publish').option('--merge-method <method>', 'method to merge PR (merge, squash, rebase)', 'squash').option('--from <from>', 'branch/tag to generate release notes from (default: previous release tag)').option('--target-version <targetVersion>', 'target version for release (explicit version like "4.30.0" or semantic bump: "patch", "minor", "major")').option('--interactive', 'present release notes for interactive review and editing').option('--sendit', 'skip all confirmation prompts and proceed automatically').option('--sync-target', 'attempt to automatically sync target branch with remote before publishing').option('--skip-already-published', 'skip packages that are already published at target version on npm').option('--force-republish', 'delete existing tags and force republish even if tag exists').option('--no-milestones', 'disable GitHub milestone integration').option('--from-main', 'force comparison against main branch instead of previous release tag').option('--update-deps <scope>', 'update inter-project dependencies before publish (e.g., --update-deps @fjell)').description('Publish a release');
|
|
623
632
|
addSharedOptions(publishCommand);
|
|
624
|
-
const treeCommand = program.command('tree [command] [packageArgument]').option('--directory <directory>', 'target directory containing multiple packages (defaults to current directory)').option('--directories [directories...]', 'target directories containing multiple packages (defaults to current directory)').option('--start-from <startFrom>', 'resume execution from this package directory name (useful for restarting failed builds)').option('--stop-at <stopAt>', 'stop execution at this package directory name (the specified package will not be executed)').option('--cmd <cmd>', 'shell command to execute in each package directory (e.g., "npm install", "git status")')
|
|
633
|
+
const treeCommand = program.command('tree [command] [packageArgument]').option('--directory <directory>', 'target directory containing multiple packages (defaults to current directory)').option('--directories [directories...]', 'target directories containing multiple packages (defaults to current directory)').option('--start-from <startFrom>', 'resume execution from this package directory name (useful for restarting failed builds)').option('--stop-at <stopAt>', 'stop execution at this package directory name (the specified package will not be executed)').option('--cmd <cmd>', 'shell command to execute in each package directory (e.g., "npm install", "git status")')// Parallel Execution Options
|
|
634
|
+
.option('--parallel', 'execute packages in parallel when dependencies allow (packages with no interdependencies run simultaneously)').option('--max-concurrency <number>', 'maximum number of packages to execute concurrently (default: number of CPU cores)', parseInt).option('--max-retries <number>', 'maximum retry attempts for failed packages (default: 3)', parseInt).option('--retry-delay <ms>', 'initial retry delay in milliseconds (default: 5000)', parseInt)// Recovery & Status Options
|
|
635
|
+
.option('--continue', 'continue from previous tree publish execution using saved checkpoint state').option('--status', 'check status of running tree publish processes').option('--status-parallel', 'show detailed parallel execution status with package states, timing, and errors').option('--audit-branches', 'audit git branch state across all packages (checks branch consistency, merge conflicts with target, existing PRs, sync status, unpushed commits)').option('--promote <packageName>', 'mark a package as completed in the execution context (useful for recovery after timeouts)').option('--mark-completed <packages>', 'mark packages as completed using directory names (comma-separated, for recovery)').option('--skip <packages>', 'skip packages and their dependents (comma-separated)').option('--retry-failed', 'retry all previously failed packages from checkpoint').option('--skip-failed', 'skip failed packages and continue with remaining packages').option('--validate-state', 'validate checkpoint state integrity before continuing')// Package Filtering
|
|
636
|
+
.option('--excluded-patterns [excludedPatterns...]', 'patterns to exclude packages from processing (e.g., "**/node_modules/**", "dist/*")')// Link/Unlink Options
|
|
637
|
+
.option('--clean-node-modules', 'for unlink command: remove node_modules and package-lock.json, then reinstall dependencies').description(`Analyze package dependencies in workspace and execute commands in dependency order.
|
|
638
|
+
|
|
639
|
+
Built-in commands:
|
|
640
|
+
commit - Run 'kodrdriv commit' in each package
|
|
641
|
+
publish - Run 'kodrdriv publish' in each package (supports --parallel)
|
|
642
|
+
link - Create file: dependencies for local development
|
|
643
|
+
unlink - Restore npm registry dependencies
|
|
644
|
+
development - Switch to development branch with version bump
|
|
645
|
+
branches - Show branch information for all packages
|
|
646
|
+
run - Execute custom shell command (use --cmd)
|
|
647
|
+
checkout - Checkout specified branch in all packages
|
|
648
|
+
|
|
649
|
+
Examples:
|
|
650
|
+
kodrdriv tree publish --parallel --model "gpt-5-mini"
|
|
651
|
+
kodrdriv tree --cmd "npm test"
|
|
652
|
+
kodrdriv tree publish --continue --retry-failed
|
|
653
|
+
kodrdriv tree publish --audit-branches
|
|
654
|
+
kodrdriv tree publish --status-parallel`);
|
|
625
655
|
addSharedOptions(treeCommand);
|
|
626
656
|
const linkCommand = program.command('link [packageArgument]').option('--scope-roots <scopeRoots>', 'JSON mapping of scopes to root directories (e.g., \'{"@company": "../"}\')').description('Create npm file: dependencies for local development');
|
|
627
657
|
addSharedOptions(linkCommand);
|
|
@@ -774,7 +804,7 @@ async function getCliConfig(program, commands) {
|
|
|
774
804
|
addSharedOptions(developmentCommand);
|
|
775
805
|
const versionsCommand = program.command('versions <subcommand>').option('--directories [directories...]', 'directories to scan for packages (defaults to current directory)').description('Update dependency versions across packages. Subcommands: minor');
|
|
776
806
|
addSharedOptions(versionsCommand);
|
|
777
|
-
const updatesCommand = program.command('updates
|
|
807
|
+
const updatesCommand = program.command('updates [scope]').option('--directories [directories...]', 'directories to scan for packages (tree mode, defaults to current directory)').option('--inter-project', 'update inter-project dependencies based on tree state (requires --scope)').description('Update dependencies matching a specific scope using npm-check-updates (e.g., kodrdriv updates @fjell) or update inter-project dependencies (kodrdriv updates --inter-project @fjell)');
|
|
778
808
|
addSharedOptions(updatesCommand);
|
|
779
809
|
const selectAudioCommand = program.command('select-audio').description('Interactively select and save audio device for recording');
|
|
780
810
|
addSharedOptions(selectAudioCommand);
|
|
@@ -1139,10 +1169,10 @@ async function validateContextDirectories(contextDirectories) {
|
|
|
1139
1169
|
if (await storage.isDirectoryReadable(dir)) {
|
|
1140
1170
|
validDirectories.push(dir);
|
|
1141
1171
|
} else {
|
|
1142
|
-
logger.warn(`Directory not readable: ${dir}`);
|
|
1172
|
+
logger.warn(`DIRECTORY_NOT_READABLE: Directory not readable | Directory: ${dir} | Impact: Cannot scan for packages`);
|
|
1143
1173
|
}
|
|
1144
1174
|
} catch (error) {
|
|
1145
|
-
logger.warn(`Error validating directory ${dir}: ${error.message}`);
|
|
1175
|
+
logger.warn(`DIRECTORY_VALIDATION_ERROR: Error validating directory | Directory: ${dir} | Error: ${error.message}`);
|
|
1146
1176
|
}
|
|
1147
1177
|
}
|
|
1148
1178
|
return validDirectories;
|