@eldrforge/kodrdriv 0.1.0 ā 1.2.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/README.md +1 -0
- package/dist/application.js +25 -3
- package/dist/application.js.map +1 -1
- package/dist/arguments.js +103 -18
- package/dist/arguments.js.map +1 -1
- package/dist/commands/audio-commit.js +28 -7
- package/dist/commands/audio-commit.js.map +1 -1
- package/dist/commands/audio-review.js +28 -7
- package/dist/commands/audio-review.js.map +1 -1
- package/dist/commands/commit.js +75 -18
- package/dist/commands/commit.js.map +1 -1
- package/dist/commands/development.js +264 -0
- package/dist/commands/development.js.map +1 -0
- package/dist/commands/link.js +356 -181
- package/dist/commands/link.js.map +1 -1
- package/dist/commands/publish.js +166 -32
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/release.js +78 -13
- package/dist/commands/release.js.map +1 -1
- package/dist/commands/review.js +10 -6
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/tree.js +450 -24
- package/dist/commands/tree.js.map +1 -1
- package/dist/commands/unlink.js +267 -372
- package/dist/commands/unlink.js.map +1 -1
- package/dist/commands/versions.js +224 -0
- package/dist/commands/versions.js.map +1 -0
- package/dist/constants.js +29 -10
- package/dist/constants.js.map +1 -1
- package/dist/content/diff.js.map +1 -1
- package/dist/content/files.js +192 -0
- package/dist/content/files.js.map +1 -0
- package/dist/content/log.js +16 -0
- package/dist/content/log.js.map +1 -1
- package/dist/main.js +0 -0
- package/dist/prompt/commit.js +9 -2
- package/dist/prompt/commit.js.map +1 -1
- package/dist/prompt/instructions/commit.md +20 -2
- package/dist/prompt/instructions/release.md +27 -10
- package/dist/prompt/instructions/review.md +75 -8
- package/dist/prompt/release.js +13 -5
- package/dist/prompt/release.js.map +1 -1
- package/dist/types.js +21 -5
- package/dist/types.js.map +1 -1
- package/dist/util/child.js +112 -26
- package/dist/util/child.js.map +1 -1
- package/dist/util/countdown.js +215 -0
- package/dist/util/countdown.js.map +1 -0
- package/dist/util/general.js +10 -2
- package/dist/util/general.js.map +1 -1
- package/dist/util/git.js +587 -0
- package/dist/util/git.js.map +1 -0
- package/dist/util/github.js +519 -3
- package/dist/util/github.js.map +1 -1
- package/dist/util/interactive.js +245 -79
- package/dist/util/interactive.js.map +1 -1
- package/dist/util/openai.js +70 -22
- package/dist/util/openai.js.map +1 -1
- package/dist/util/performance.js +1 -69
- package/dist/util/performance.js.map +1 -1
- package/dist/util/storage.js +28 -1
- package/dist/util/storage.js.map +1 -1
- package/dist/util/validation.js +1 -25
- package/dist/util/validation.js.map +1 -1
- package/package.json +10 -8
- package/test-multiline/cli/package.json +8 -0
- package/test-multiline/core/package.json +5 -0
- package/test-multiline/mobile/package.json +8 -0
- package/test-multiline/web/package.json +8 -0
- package/dist/util/npmOptimizations.js +0 -174
- package/dist/util/npmOptimizations.js.map +0 -1
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { getLogger } from '../logging.js';
|
|
3
|
+
|
|
4
|
+
function _define_property(obj, key, value) {
|
|
5
|
+
if (key in obj) {
|
|
6
|
+
Object.defineProperty(obj, key, {
|
|
7
|
+
value: value,
|
|
8
|
+
enumerable: true,
|
|
9
|
+
configurable: true,
|
|
10
|
+
writable: true
|
|
11
|
+
});
|
|
12
|
+
} else {
|
|
13
|
+
obj[key] = value;
|
|
14
|
+
}
|
|
15
|
+
return obj;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* ANSI escape codes for terminal control
|
|
19
|
+
*/ const ANSI = {
|
|
20
|
+
// Cursor movement
|
|
21
|
+
CURSOR_UP: '\x1b[1A',
|
|
22
|
+
CURSOR_TO_START: '\x1b[0G',
|
|
23
|
+
CLEAR_LINE: '\x1b[2K',
|
|
24
|
+
// Colors
|
|
25
|
+
RED: '\x1b[31m',
|
|
26
|
+
CYAN: '\x1b[36m',
|
|
27
|
+
RESET: '\x1b[0m',
|
|
28
|
+
// Text styles
|
|
29
|
+
BOLD: '\x1b[1m'};
|
|
30
|
+
/**
|
|
31
|
+
* Format seconds into MM:SS format
|
|
32
|
+
*/ function formatTime(seconds) {
|
|
33
|
+
const minutes = Math.floor(seconds / 60);
|
|
34
|
+
const remainingSeconds = seconds % 60;
|
|
35
|
+
return `${minutes.toString().padStart(2, '0')}:${remainingSeconds.toString().padStart(2, '0')}`;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Generate a beep sound using process.stdout.write with ASCII bell character
|
|
39
|
+
*/ function beep() {
|
|
40
|
+
process.stdout.write('\x07'); // ASCII bell character
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Check if terminal supports colors and cursor movement
|
|
44
|
+
*/ function supportsAnsi() {
|
|
45
|
+
return process.stdout.isTTY && process.env.TERM !== 'dumb' && !process.env.NO_COLOR;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Display a live countdown timer that updates in place
|
|
49
|
+
*/ class CountdownTimer {
|
|
50
|
+
/**
|
|
51
|
+
* Start the countdown timer
|
|
52
|
+
*/ start() {
|
|
53
|
+
return new Promise((resolve)=>{
|
|
54
|
+
// Display initial countdown
|
|
55
|
+
this.displayCountdown();
|
|
56
|
+
this.intervalId = setInterval(()=>{
|
|
57
|
+
// Check if destroyed before processing
|
|
58
|
+
if (this.isDestroyed) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
this.currentSeconds--;
|
|
62
|
+
// Check for beep warning
|
|
63
|
+
if (this.options.beepAt30Seconds && this.currentSeconds === 30 && !this.hasBeepedAt30) {
|
|
64
|
+
beep();
|
|
65
|
+
this.hasBeepedAt30 = true;
|
|
66
|
+
}
|
|
67
|
+
// Call tick callback
|
|
68
|
+
this.options.onTick(this.currentSeconds);
|
|
69
|
+
if (this.currentSeconds <= 0) {
|
|
70
|
+
this.stop();
|
|
71
|
+
this.options.onComplete();
|
|
72
|
+
resolve();
|
|
73
|
+
} else {
|
|
74
|
+
this.displayCountdown();
|
|
75
|
+
}
|
|
76
|
+
}, 1000);
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Stop the countdown timer
|
|
81
|
+
*/ stop() {
|
|
82
|
+
if (this.isDestroyed) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
if (this.intervalId) {
|
|
86
|
+
clearInterval(this.intervalId);
|
|
87
|
+
this.intervalId = null;
|
|
88
|
+
}
|
|
89
|
+
if (this.options.clearOnComplete && this.supportsAnsi) {
|
|
90
|
+
// Clear the countdown line
|
|
91
|
+
process.stdout.write(ANSI.CURSOR_TO_START + ANSI.CLEAR_LINE);
|
|
92
|
+
} else if (!this.isFirstDisplay) {
|
|
93
|
+
// Add a newline if we've been updating in place
|
|
94
|
+
process.stdout.write('\n');
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Get current remaining time
|
|
99
|
+
*/ getRemainingSeconds() {
|
|
100
|
+
return this.currentSeconds;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Display the countdown timer
|
|
104
|
+
*/ displayCountdown() {
|
|
105
|
+
const timeString = formatTime(this.currentSeconds);
|
|
106
|
+
const isWarningTime = this.currentSeconds <= 30;
|
|
107
|
+
let output;
|
|
108
|
+
if (this.supportsAnsi) {
|
|
109
|
+
// Use colors and in-place updating if supported
|
|
110
|
+
if (!this.isFirstDisplay) {
|
|
111
|
+
// Move cursor up and clear the line to overwrite previous countdown
|
|
112
|
+
process.stdout.write(ANSI.CURSOR_UP + ANSI.CURSOR_TO_START + ANSI.CLEAR_LINE);
|
|
113
|
+
}
|
|
114
|
+
const color = isWarningTime && this.options.redAt30Seconds ? ANSI.RED : ANSI.CYAN;
|
|
115
|
+
const style = isWarningTime ? ANSI.BOLD : '';
|
|
116
|
+
output = `${color}${style}ā±ļø Recording time remaining: ${timeString}${ANSI.RESET}`;
|
|
117
|
+
} else {
|
|
118
|
+
// Fallback for terminals that don't support ANSI
|
|
119
|
+
const warning = isWarningTime ? ' ā ļø ' : '';
|
|
120
|
+
output = `ā±ļø Recording time remaining: ${timeString}${warning}`;
|
|
121
|
+
}
|
|
122
|
+
process.stdout.write(output + '\n');
|
|
123
|
+
this.isFirstDisplay = false;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Set up cleanup handlers for process termination and uncaught exceptions
|
|
127
|
+
*/ setupCleanupHandlers() {
|
|
128
|
+
// Skip setting up process listeners in test environments to avoid listener leaks
|
|
129
|
+
if (process.env.NODE_ENV === 'test' || process.env.VITEST) {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
const cleanup = ()=>{
|
|
133
|
+
this.destroy();
|
|
134
|
+
};
|
|
135
|
+
// Handle various exit scenarios
|
|
136
|
+
const exitHandler = ()=>cleanup();
|
|
137
|
+
const uncaughtExceptionHandler = (error)=>{
|
|
138
|
+
cleanup();
|
|
139
|
+
// Re-throw to maintain normal error handling
|
|
140
|
+
throw error;
|
|
141
|
+
};
|
|
142
|
+
process.on('exit', exitHandler);
|
|
143
|
+
process.on('SIGINT', exitHandler);
|
|
144
|
+
process.on('SIGTERM', exitHandler);
|
|
145
|
+
process.on('uncaughtException', uncaughtExceptionHandler);
|
|
146
|
+
process.on('unhandledRejection', cleanup);
|
|
147
|
+
// Store handlers for removal during destroy
|
|
148
|
+
this.cleanupHandlers = [
|
|
149
|
+
()=>process.removeListener('exit', exitHandler),
|
|
150
|
+
()=>process.removeListener('SIGINT', exitHandler),
|
|
151
|
+
()=>process.removeListener('SIGTERM', exitHandler),
|
|
152
|
+
()=>process.removeListener('uncaughtException', uncaughtExceptionHandler),
|
|
153
|
+
()=>process.removeListener('unhandledRejection', cleanup)
|
|
154
|
+
];
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Destroy the timer and clean up all resources
|
|
158
|
+
*/ destroy() {
|
|
159
|
+
if (this.isDestroyed) {
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
this.isDestroyed = true;
|
|
163
|
+
this.stop();
|
|
164
|
+
// Remove all process event listeners
|
|
165
|
+
this.cleanupHandlers.forEach((handler)=>{
|
|
166
|
+
try {
|
|
167
|
+
handler();
|
|
168
|
+
} catch {
|
|
169
|
+
// Ignore errors during cleanup
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
this.cleanupHandlers = [];
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Check if the timer has been destroyed
|
|
176
|
+
*/ isTimerDestroyed() {
|
|
177
|
+
return this.isDestroyed;
|
|
178
|
+
}
|
|
179
|
+
constructor(options){
|
|
180
|
+
_define_property(this, "options", void 0);
|
|
181
|
+
_define_property(this, "intervalId", null);
|
|
182
|
+
_define_property(this, "currentSeconds", void 0);
|
|
183
|
+
_define_property(this, "hasBeepedAt30", false);
|
|
184
|
+
_define_property(this, "isFirstDisplay", true);
|
|
185
|
+
_define_property(this, "supportsAnsi", void 0);
|
|
186
|
+
_define_property(this, "logger", getLogger());
|
|
187
|
+
_define_property(this, "cleanupHandlers", []);
|
|
188
|
+
_define_property(this, "isDestroyed", false);
|
|
189
|
+
this.options = {
|
|
190
|
+
beepAt30Seconds: true,
|
|
191
|
+
redAt30Seconds: true,
|
|
192
|
+
onTick: ()=>{},
|
|
193
|
+
onComplete: ()=>{},
|
|
194
|
+
clearOnComplete: false,
|
|
195
|
+
...options
|
|
196
|
+
};
|
|
197
|
+
this.currentSeconds = this.options.durationSeconds;
|
|
198
|
+
this.supportsAnsi = supportsAnsi();
|
|
199
|
+
// Set up cleanup handlers for process termination
|
|
200
|
+
this.setupCleanupHandlers();
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Create a countdown timer for audio recording with sensible defaults
|
|
205
|
+
*/ function createAudioRecordingCountdown(durationSeconds) {
|
|
206
|
+
return new CountdownTimer({
|
|
207
|
+
durationSeconds,
|
|
208
|
+
beepAt30Seconds: true,
|
|
209
|
+
redAt30Seconds: true,
|
|
210
|
+
clearOnComplete: true
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
export { CountdownTimer, createAudioRecordingCountdown };
|
|
215
|
+
//# sourceMappingURL=countdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"countdown.js","sources":["../../src/util/countdown.ts"],"sourcesContent":["#!/usr/bin/env node\n\n/**\n * Countdown timer utility for audio recording sessions\n * Provides a visual countdown with beep warnings and color changes\n */\n\nimport { getLogger } from '../logging';\n\nexport interface CountdownOptions {\n /** Duration in seconds */\n durationSeconds: number;\n /** Show beep warning at 30 seconds remaining */\n beepAt30Seconds?: boolean;\n /** Change color to red at 30 seconds remaining */\n redAt30Seconds?: boolean;\n /** Callback function called every second with remaining time */\n onTick?: (remainingSeconds: number) => void;\n /** Callback function called when countdown reaches zero */\n onComplete?: () => void;\n /** Whether to clear the countdown line when finished */\n clearOnComplete?: boolean;\n}\n\n/**\n * ANSI escape codes for terminal control\n */\nconst ANSI = {\n // Cursor movement\n CURSOR_UP: '\\x1b[1A',\n CURSOR_TO_START: '\\x1b[0G',\n CLEAR_LINE: '\\x1b[2K',\n\n // Colors\n RED: '\\x1b[31m',\n GREEN: '\\x1b[32m',\n YELLOW: '\\x1b[33m',\n BLUE: '\\x1b[34m',\n MAGENTA: '\\x1b[35m',\n CYAN: '\\x1b[36m',\n WHITE: '\\x1b[37m',\n RESET: '\\x1b[0m',\n\n // Text styles\n BOLD: '\\x1b[1m',\n DIM: '\\x1b[2m'\n} as const;\n\n/**\n * Format seconds into MM:SS format\n */\nfunction formatTime(seconds: number): string {\n const minutes = Math.floor(seconds / 60);\n const remainingSeconds = seconds % 60;\n return `${minutes.toString().padStart(2, '0')}:${remainingSeconds.toString().padStart(2, '0')}`;\n}\n\n/**\n * Generate a beep sound using process.stdout.write with ASCII bell character\n */\nfunction beep(): void {\n process.stdout.write('\\x07'); // ASCII bell character\n}\n\n/**\n * Check if terminal supports colors and cursor movement\n */\nfunction supportsAnsi(): boolean {\n return process.stdout.isTTY &&\n process.env.TERM !== 'dumb' &&\n !process.env.NO_COLOR;\n}\n\n/**\n * Display a live countdown timer that updates in place\n */\nexport class CountdownTimer {\n private options: Required<CountdownOptions>;\n private intervalId: NodeJS.Timeout | null = null;\n private currentSeconds: number;\n private hasBeepedAt30: boolean = false;\n private isFirstDisplay: boolean = true;\n private supportsAnsi: boolean;\n private logger = getLogger();\n private cleanupHandlers: Array<() => void> = [];\n private isDestroyed = false;\n\n constructor(options: CountdownOptions) {\n this.options = {\n beepAt30Seconds: true,\n redAt30Seconds: true,\n onTick: () => {},\n onComplete: () => {},\n clearOnComplete: false,\n ...options\n };\n this.currentSeconds = this.options.durationSeconds;\n this.supportsAnsi = supportsAnsi();\n\n // Set up cleanup handlers for process termination\n this.setupCleanupHandlers();\n }\n\n /**\n * Start the countdown timer\n */\n start(): Promise<void> {\n return new Promise((resolve) => {\n // Display initial countdown\n this.displayCountdown();\n\n this.intervalId = setInterval(() => {\n // Check if destroyed before processing\n if (this.isDestroyed) {\n return;\n }\n\n this.currentSeconds--;\n\n // Check for beep warning\n if (this.options.beepAt30Seconds &&\n this.currentSeconds === 30 &&\n !this.hasBeepedAt30) {\n beep();\n this.hasBeepedAt30 = true;\n }\n\n // Call tick callback\n this.options.onTick(this.currentSeconds);\n\n if (this.currentSeconds <= 0) {\n this.stop();\n this.options.onComplete();\n resolve();\n } else {\n this.displayCountdown();\n }\n }, 1000);\n });\n }\n\n /**\n * Stop the countdown timer\n */\n stop(): void {\n if (this.isDestroyed) {\n return;\n }\n\n if (this.intervalId) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n\n if (this.options.clearOnComplete && this.supportsAnsi) {\n // Clear the countdown line\n process.stdout.write(ANSI.CURSOR_TO_START + ANSI.CLEAR_LINE);\n } else if (!this.isFirstDisplay) {\n // Add a newline if we've been updating in place\n process.stdout.write('\\n');\n }\n }\n\n /**\n * Get current remaining time\n */\n getRemainingSeconds(): number {\n return this.currentSeconds;\n }\n\n /**\n * Display the countdown timer\n */\n private displayCountdown(): void {\n const timeString = formatTime(this.currentSeconds);\n const isWarningTime = this.currentSeconds <= 30;\n\n let output: string;\n\n if (this.supportsAnsi) {\n // Use colors and in-place updating if supported\n if (!this.isFirstDisplay) {\n // Move cursor up and clear the line to overwrite previous countdown\n process.stdout.write(ANSI.CURSOR_UP + ANSI.CURSOR_TO_START + ANSI.CLEAR_LINE);\n }\n\n const color = isWarningTime && this.options.redAt30Seconds ? ANSI.RED : ANSI.CYAN;\n const style = isWarningTime ? ANSI.BOLD : '';\n\n output = `${color}${style}ā±ļø Recording time remaining: ${timeString}${ANSI.RESET}`;\n } else {\n // Fallback for terminals that don't support ANSI\n const warning = isWarningTime ? ' ā ļø ' : '';\n output = `ā±ļø Recording time remaining: ${timeString}${warning}`;\n }\n\n process.stdout.write(output + '\\n');\n this.isFirstDisplay = false;\n }\n\n /**\n * Set up cleanup handlers for process termination and uncaught exceptions\n */\n private setupCleanupHandlers(): void {\n // Skip setting up process listeners in test environments to avoid listener leaks\n if (process.env.NODE_ENV === 'test' || process.env.VITEST) {\n return;\n }\n\n const cleanup = () => {\n this.destroy();\n };\n\n // Handle various exit scenarios\n const exitHandler = () => cleanup();\n const uncaughtExceptionHandler = (error: Error) => {\n cleanup();\n // Re-throw to maintain normal error handling\n throw error;\n };\n\n process.on('exit', exitHandler);\n process.on('SIGINT', exitHandler);\n process.on('SIGTERM', exitHandler);\n process.on('uncaughtException', uncaughtExceptionHandler);\n process.on('unhandledRejection', cleanup);\n\n // Store handlers for removal during destroy\n this.cleanupHandlers = [\n () => process.removeListener('exit', exitHandler),\n () => process.removeListener('SIGINT', exitHandler),\n () => process.removeListener('SIGTERM', exitHandler),\n () => process.removeListener('uncaughtException', uncaughtExceptionHandler),\n () => process.removeListener('unhandledRejection', cleanup)\n ];\n }\n\n /**\n * Destroy the timer and clean up all resources\n */\n destroy(): void {\n if (this.isDestroyed) {\n return;\n }\n\n this.isDestroyed = true;\n this.stop();\n\n // Remove all process event listeners\n this.cleanupHandlers.forEach(handler => {\n try {\n handler();\n } catch {\n // Ignore errors during cleanup\n }\n });\n this.cleanupHandlers = [];\n }\n\n /**\n * Check if the timer has been destroyed\n */\n isTimerDestroyed(): boolean {\n return this.isDestroyed;\n }\n}\n\n/**\n * Create and start a countdown timer (convenience function)\n */\nexport async function startCountdown(options: CountdownOptions): Promise<void> {\n const timer = new CountdownTimer(options);\n return timer.start();\n}\n\n/**\n * Create a countdown timer for audio recording with sensible defaults\n */\nexport function createAudioRecordingCountdown(durationSeconds: number): CountdownTimer {\n return new CountdownTimer({\n durationSeconds,\n beepAt30Seconds: true,\n redAt30Seconds: true,\n clearOnComplete: true\n });\n}\n"],"names":["ANSI","CURSOR_UP","CURSOR_TO_START","CLEAR_LINE","RED","CYAN","RESET","BOLD","formatTime","seconds","minutes","Math","floor","remainingSeconds","toString","padStart","beep","process","stdout","write","supportsAnsi","isTTY","env","TERM","NO_COLOR","CountdownTimer","start","Promise","resolve","displayCountdown","intervalId","setInterval","isDestroyed","currentSeconds","options","beepAt30Seconds","hasBeepedAt30","onTick","stop","onComplete","clearInterval","clearOnComplete","isFirstDisplay","getRemainingSeconds","timeString","isWarningTime","output","color","redAt30Seconds","style","warning","setupCleanupHandlers","NODE_ENV","VITEST","cleanup","destroy","exitHandler","uncaughtExceptionHandler","error","on","cleanupHandlers","removeListener","forEach","handler","isTimerDestroyed","logger","getLogger","durationSeconds","createAudioRecordingCountdown"],"mappings":"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"}
|
package/dist/util/general.js
CHANGED
|
@@ -141,9 +141,17 @@ const calculateTargetVersion = (currentVersion, targetVersion)=>{
|
|
|
141
141
|
}
|
|
142
142
|
};
|
|
143
143
|
const checkIfTagExists = async (tagName)=>{
|
|
144
|
-
const {
|
|
144
|
+
const { runSecure, validateGitRef } = await import('./child.js');
|
|
145
145
|
try {
|
|
146
|
-
|
|
146
|
+
// Validate tag name to prevent injection
|
|
147
|
+
if (!validateGitRef(tagName)) {
|
|
148
|
+
throw new Error(`Invalid tag name: ${tagName}`);
|
|
149
|
+
}
|
|
150
|
+
const { stdout } = await runSecure('git', [
|
|
151
|
+
'tag',
|
|
152
|
+
'-l',
|
|
153
|
+
tagName
|
|
154
|
+
]);
|
|
147
155
|
return stdout.trim() === tagName;
|
|
148
156
|
} catch {
|
|
149
157
|
// If git command fails, assume tag doesn't exist
|
package/dist/util/general.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"general.js","sources":["../../src/util/general.ts"],"sourcesContent":["import path from 'path';\nimport * as Storage from './storage';\nimport { getLogger } from '../logging';\n// eslint-disable-next-line no-restricted-imports\nimport * as fs from 'fs';\n\n// Utility function for deep merging two objects.\nexport function deepMerge(target: any, source: any): any {\n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n if (key === \"__proto__\" || key === \"constructor\") {\n continue; // Skip prototype-polluting keys\n }\n if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {\n if (!target[key]) {\n target[key] = {};\n }\n deepMerge(target[key], source[key]);\n } else {\n target[key] = source[key];\n }\n }\n }\n return target;\n}\n\n//Recursive implementation of jSON.stringify;\nexport const stringifyJSON = function (obj: any, options: { depth: number } = { depth: 0 }): string {\n\n if (options.depth > 10) {\n return '{\"error\": \"Maximum depth reached\"}';\n }\n\n const arrOfKeyVals: string[] = [];\n const arrVals: string[] = [];\n let objKeys: string[] = [];\n\n /*********CHECK FOR PRIMITIVE TYPES**********/\n if (typeof obj === 'number' || typeof obj === 'boolean' || obj === null)\n return '' + obj;\n else if (typeof obj === 'string')\n return '\"' + obj + '\"';\n\n /*********CHECK FOR ARRAY**********/\n else if (Array.isArray(obj)) {\n //check for empty array\n if (obj[0] === undefined)\n return '[]';\n else {\n obj.forEach(function (el) {\n arrVals.push(stringifyJSON(el, { depth: options.depth + 1 }));\n });\n return '[' + arrVals + ']';\n }\n }\n /*********CHECK FOR OBJECT**********/\n else if (obj instanceof Object) {\n //get object keys\n objKeys = Object.keys(obj);\n //set key output;\n objKeys.forEach(function (key) {\n const keyOut = '\"' + key + '\":';\n const keyValOut = obj[key];\n //skip functions and undefined properties\n if (keyValOut instanceof Function || keyValOut === undefined)\n arrOfKeyVals.push('');\n else if (typeof keyValOut === 'string')\n arrOfKeyVals.push(keyOut + '\"' + keyValOut + '\"');\n else if (typeof keyValOut === 'boolean' || typeof keyValOut === 'number' || keyValOut === null)\n arrOfKeyVals.push(keyOut + keyValOut);\n //check for nested objects, call recursively until no more objects\n else if (keyValOut instanceof Object) {\n arrOfKeyVals.push(keyOut + stringifyJSON(keyValOut, { depth: options.depth + 1 }));\n }\n });\n return '{' + arrOfKeyVals + '}';\n }\n return '';\n};\n\nexport const incrementPatchVersion = (version: string): string => {\n // Remove 'v' prefix if present\n const cleanVersion = version.startsWith('v') ? version.slice(1) : version;\n\n // Split into major.minor.patch and handle pre-release identifiers\n const parts = cleanVersion.split('.');\n if (parts.length < 3) {\n throw new Error(`Invalid version string: ${version}`);\n }\n\n // Handle pre-release versions like \"4.6.24-dev.0\"\n // Split the patch part on '-' to separate patch number from pre-release\n const patchPart = parts[2];\n let patchNumber: number;\n\n if (patchPart.startsWith('-')) {\n // Handle negative patch numbers like \"-1\" or \"-5\"\n patchNumber = parseInt(patchPart, 10);\n } else {\n // Handle normal patch numbers with possible pre-release like \"24-dev.0\"\n const patchComponents = patchPart.split('-');\n patchNumber = parseInt(patchComponents[0], 10);\n }\n\n if (isNaN(patchNumber)) {\n throw new Error(`Invalid patch version: ${patchPart}`);\n }\n\n // Increment the patch number and rebuild the version\n const newPatchNumber = patchNumber + 1;\n\n // For pre-release versions, we'll create a clean release version by dropping the pre-release identifier\n const newVersion = `${parts[0]}.${parts[1]}.${newPatchNumber}`;\n\n return newVersion;\n};\n\nexport const incrementMinorVersion = (version: string): string => {\n // Remove 'v' prefix if present\n const cleanVersion = version.startsWith('v') ? version.slice(1) : version;\n\n // Split into major.minor.patch and handle pre-release identifiers\n const parts = cleanVersion.split('.');\n if (parts.length < 3) {\n throw new Error(`Invalid version string: ${version}`);\n }\n\n const majorNumber = parseInt(parts[0], 10);\n const minorPart = parts[1];\n\n // Handle pre-release versions on minor like \"23-dev.0\"\n const minorComponents = minorPart.split('-');\n const minorNumber = parseInt(minorComponents[0], 10);\n\n if (isNaN(majorNumber) || isNaN(minorNumber)) {\n throw new Error(`Invalid version numbers in: ${version}`);\n }\n\n // Increment the minor number and reset patch to 0\n const newMinorNumber = minorNumber + 1;\n const newVersion = `${majorNumber}.${newMinorNumber}.0`;\n\n return newVersion;\n};\n\nexport const incrementMajorVersion = (version: string): string => {\n // Remove 'v' prefix if present\n const cleanVersion = version.startsWith('v') ? version.slice(1) : version;\n\n // Split into major.minor.patch and handle pre-release identifiers\n const parts = cleanVersion.split('.');\n if (parts.length < 3) {\n throw new Error(`Invalid version string: ${version}`);\n }\n\n const majorPart = parts[0];\n\n // Handle pre-release versions on major like \"4-dev.0\"\n const majorComponents = majorPart.split('-');\n const majorNumber = parseInt(majorComponents[0], 10);\n\n if (isNaN(majorNumber)) {\n throw new Error(`Invalid major version number in: ${version}`);\n }\n\n // Increment the major number and reset minor and patch to 0\n const newMajorNumber = majorNumber + 1;\n const newVersion = `${newMajorNumber}.0.0`;\n\n return newVersion;\n};\n\nexport const validateVersionString = (version: string): boolean => {\n // Remove 'v' prefix if present\n const cleanVersion = version.startsWith('v') ? version.slice(1) : version;\n\n // Basic semver regex pattern\n const semverPattern = /^\\d+\\.\\d+\\.\\d+$/;\n return semverPattern.test(cleanVersion);\n};\n\nexport const calculateTargetVersion = (currentVersion: string, targetVersion: string): string => {\n switch (targetVersion.toLowerCase()) {\n case 'patch':\n return incrementPatchVersion(currentVersion);\n case 'minor':\n return incrementMinorVersion(currentVersion);\n case 'major':\n return incrementMajorVersion(currentVersion);\n default:\n // Explicit version provided\n if (!validateVersionString(targetVersion)) {\n throw new Error(`Invalid version format: ${targetVersion}. Expected format: \"x.y.z\" or one of: \"patch\", \"minor\", \"major\"`);\n }\n return targetVersion.startsWith('v') ? targetVersion.slice(1) : targetVersion;\n }\n};\n\nexport const checkIfTagExists = async (tagName: string): Promise<boolean> => {\n const { run } = await import('./child');\n try {\n const { stdout } = await run(`git tag -l ${tagName}`);\n return stdout.trim() === tagName;\n } catch {\n // If git command fails, assume tag doesn't exist\n return false;\n }\n};\n\nexport const confirmVersionInteractively = async (currentVersion: string, proposedVersion: string, targetVersionInput?: string): Promise<string> => {\n const { getUserChoice, getUserTextInput, requireTTY } = await import('./interactive');\n const { getLogger } = await import('../logging');\n\n requireTTY('Interactive version confirmation requires a terminal.');\n\n const logger = getLogger();\n logger.info(`\\nš¦ Version Confirmation:`);\n logger.info(` Current version: ${currentVersion}`);\n logger.info(` Proposed version: ${proposedVersion}`);\n if (targetVersionInput) {\n logger.info(` Target input: ${targetVersionInput}`);\n }\n\n const choices = [\n { key: 'c', label: `Confirm ${proposedVersion}` },\n { key: 'e', label: 'Enter custom version' },\n { key: 'a', label: 'Abort publish' }\n ];\n\n const choice = await getUserChoice('\\nš¤ Confirm the version for this release:', choices);\n\n switch (choice) {\n case 'c':\n return proposedVersion;\n case 'e': {\n const customVersion = await getUserTextInput('\\nš Enter the version number (e.g., \"4.30.0\"):');\n if (!validateVersionString(customVersion)) {\n throw new Error(`Invalid version format: ${customVersion}. Expected format: \"x.y.z\"`);\n }\n const cleanCustomVersion = customVersion.startsWith('v') ? customVersion.slice(1) : customVersion;\n logger.info(`ā
Using custom version: ${cleanCustomVersion}`);\n return cleanCustomVersion;\n }\n case 'a':\n throw new Error('Release aborted by user');\n default:\n throw new Error(`Unexpected choice: ${choice}`);\n }\n};\n\nexport const getOutputPath = (outputDirectory: string, filename: string): string => {\n return path.join(outputDirectory, filename);\n};\n\nexport const getTimestampedFilename = (baseName: string, extension: string = '.json'): string => {\n const now = new Date();\n\n // Format as YYMMdd-HHmm (e.g., 250701-1030)\n const yy = now.getFullYear().toString().slice(-2);\n const mm = (now.getMonth() + 1).toString().padStart(2, '0');\n const dd = now.getDate().toString().padStart(2, '0');\n const hh = now.getHours().toString().padStart(2, '0');\n const min = now.getMinutes().toString().padStart(2, '0');\n\n const timestamp = `${yy}${mm}${dd}-${hh}${min}`;\n\n return `${timestamp}-${baseName}${extension}`;\n};\n\nexport const getTimestampedRequestFilename = (baseName: string): string => {\n return getTimestampedFilename(baseName, '.request.json');\n};\n\nexport const getTimestampedResponseFilename = (baseName: string): string => {\n return getTimestampedFilename(baseName, '.response.json');\n};\n\nexport const getTimestampedCommitFilename = (): string => {\n return getTimestampedFilename('commit-message', '.md');\n};\n\nexport const getTimestampedReleaseNotesFilename = (): string => {\n return getTimestampedFilename('release-notes', '.md');\n};\n\nexport const getTimestampedAudioFilename = (): string => {\n return getTimestampedFilename('audio-recording', '.wav');\n};\n\nexport const getTimestampedTranscriptFilename = (): string => {\n return getTimestampedFilename('audio-transcript', '.md');\n};\n\nexport const getTimestampedReviewFilename = (): string => {\n return getTimestampedFilename('review-analysis', '.md');\n};\n\nexport const getTimestampedReviewNotesFilename = (): string => {\n return getTimestampedFilename('review-notes', '.md');\n};\n\nexport const getTimestampedArchivedAudioFilename = (originalExtension: string = '.wav'): string => {\n return getTimestampedFilename('review-audio', originalExtension);\n};\n\nexport const getTimestampedArchivedTranscriptFilename = (): string => {\n return getTimestampedFilename('review-transcript', '.md');\n};\n\n/**\n * Archives an audio file and its transcription to the output/kodrdriv directory\n * @param originalAudioPath - Path to the original audio file\n * @param transcriptionText - The raw transcription text\n * @param outputDirectory - Base output directory (default: 'output')\n * @returns Object containing the paths where files were archived\n */\nexport const archiveAudio = async (\n originalAudioPath: string,\n transcriptionText: string,\n outputDirectory: string = 'output'\n): Promise<{ audioPath: string; transcriptPath: string }> => {\n const logger = getLogger();\n const storage = Storage.create({ log: logger.debug });\n\n try {\n // Ensure the output directory exists (should already be output/kodrdriv)\n await storage.ensureDirectory(outputDirectory);\n\n // Get file extension from original audio file\n const originalExtension = path.extname(originalAudioPath);\n\n // Generate timestamped filenames\n const archivedAudioFilename = getTimestampedArchivedAudioFilename(originalExtension);\n const archivedTranscriptFilename = getTimestampedArchivedTranscriptFilename();\n\n // Full paths for archived files - directly in the output directory\n const archivedAudioPath = path.join(outputDirectory, archivedAudioFilename);\n const archivedTranscriptPath = path.join(outputDirectory, archivedTranscriptFilename);\n\n // Copy audio file if it exists\n if (await storage.isFileReadable(originalAudioPath)) {\n // Read original audio file as buffer using fs directly for binary files\n const audioBuffer = await fs.promises.readFile(originalAudioPath);\n await storage.writeFile(archivedAudioPath, audioBuffer, 'binary');\n logger.debug('Archived audio file to: %s', archivedAudioPath);\n } else {\n logger.warn('Original audio file not found or not readable: %s', originalAudioPath);\n }\n\n // Save transcription text\n const transcriptContent = `# Audio Transcription Archive\\n\\n**Original Audio File:** ${originalAudioPath}\\n**Archived:** ${new Date().toISOString()}\\n\\n## Transcription\\n\\n${transcriptionText}`;\n await storage.writeFile(archivedTranscriptPath, transcriptContent, 'utf8');\n logger.debug('Archived transcription to: %s', archivedTranscriptPath);\n\n logger.info('š Audio archived successfully - Audio: %s, Transcript: %s', archivedAudioFilename, archivedTranscriptFilename);\n\n return {\n audioPath: archivedAudioPath,\n transcriptPath: archivedTranscriptPath\n };\n\n } catch (error: any) {\n logger.error('Failed to archive audio: %s', error.message);\n throw new Error(`Audio archiving failed: ${error.message}`);\n }\n};\n"],"names":["stringifyJSON","obj","options","depth","arrOfKeyVals","arrVals","objKeys","Array","isArray","undefined","forEach","el","push","Object","keys","key","keyOut","keyValOut","Function","incrementPatchVersion","version","cleanVersion","startsWith","slice","parts","split","length","Error","patchPart","patchNumber","parseInt","patchComponents","isNaN","newPatchNumber","newVersion","incrementMinorVersion","majorNumber","minorPart","minorComponents","minorNumber","newMinorNumber","incrementMajorVersion","majorPart","majorComponents","newMajorNumber","validateVersionString","semverPattern","test","calculateTargetVersion","currentVersion","targetVersion","toLowerCase","checkIfTagExists","tagName","run","stdout","trim","confirmVersionInteractively","proposedVersion","targetVersionInput","getUserChoice","getUserTextInput","requireTTY","getLogger","logger","info","choices","label","choice","customVersion","cleanCustomVersion","getOutputPath","outputDirectory","filename","path","join","getTimestampedFilename","baseName","extension","now","Date","yy","getFullYear","toString","mm","getMonth","padStart","dd","getDate","hh","getHours","min","getMinutes","timestamp","getTimestampedRequestFilename","getTimestampedResponseFilename","getTimestampedCommitFilename","getTimestampedReleaseNotesFilename","getTimestampedAudioFilename","getTimestampedReviewFilename","getTimestampedReviewNotesFilename","getTimestampedArchivedAudioFilename","originalExtension","getTimestampedArchivedTranscriptFilename","archiveAudio","originalAudioPath","transcriptionText","storage","Storage","log","debug","ensureDirectory","extname","archivedAudioFilename","archivedTranscriptFilename","archivedAudioPath","archivedTranscriptPath","isFileReadable","audioBuffer","fs","promises","readFile","writeFile","warn","transcriptContent","toISOString","audioPath","transcriptPath","error","message"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"general.js","sources":["../../src/util/general.ts"],"sourcesContent":["import path from 'path';\nimport * as Storage from './storage';\nimport { getLogger } from '../logging';\n// eslint-disable-next-line no-restricted-imports\nimport * as fs from 'fs';\n\n// Utility function for deep merging two objects.\nexport function deepMerge(target: any, source: any): any {\n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n if (key === \"__proto__\" || key === \"constructor\") {\n continue; // Skip prototype-polluting keys\n }\n if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {\n if (!target[key]) {\n target[key] = {};\n }\n deepMerge(target[key], source[key]);\n } else {\n target[key] = source[key];\n }\n }\n }\n return target;\n}\n\n//Recursive implementation of jSON.stringify;\nexport const stringifyJSON = function (obj: any, options: { depth: number } = { depth: 0 }): string {\n\n if (options.depth > 10) {\n return '{\"error\": \"Maximum depth reached\"}';\n }\n\n const arrOfKeyVals: string[] = [];\n const arrVals: string[] = [];\n let objKeys: string[] = [];\n\n /*********CHECK FOR PRIMITIVE TYPES**********/\n if (typeof obj === 'number' || typeof obj === 'boolean' || obj === null)\n return '' + obj;\n else if (typeof obj === 'string')\n return '\"' + obj + '\"';\n\n /*********CHECK FOR ARRAY**********/\n else if (Array.isArray(obj)) {\n //check for empty array\n if (obj[0] === undefined)\n return '[]';\n else {\n obj.forEach(function (el) {\n arrVals.push(stringifyJSON(el, { depth: options.depth + 1 }));\n });\n return '[' + arrVals + ']';\n }\n }\n /*********CHECK FOR OBJECT**********/\n else if (obj instanceof Object) {\n //get object keys\n objKeys = Object.keys(obj);\n //set key output;\n objKeys.forEach(function (key) {\n const keyOut = '\"' + key + '\":';\n const keyValOut = obj[key];\n //skip functions and undefined properties\n if (keyValOut instanceof Function || keyValOut === undefined)\n arrOfKeyVals.push('');\n else if (typeof keyValOut === 'string')\n arrOfKeyVals.push(keyOut + '\"' + keyValOut + '\"');\n else if (typeof keyValOut === 'boolean' || typeof keyValOut === 'number' || keyValOut === null)\n arrOfKeyVals.push(keyOut + keyValOut);\n //check for nested objects, call recursively until no more objects\n else if (keyValOut instanceof Object) {\n arrOfKeyVals.push(keyOut + stringifyJSON(keyValOut, { depth: options.depth + 1 }));\n }\n });\n return '{' + arrOfKeyVals + '}';\n }\n return '';\n};\n\nexport const incrementPatchVersion = (version: string): string => {\n // Remove 'v' prefix if present\n const cleanVersion = version.startsWith('v') ? version.slice(1) : version;\n\n // Split into major.minor.patch and handle pre-release identifiers\n const parts = cleanVersion.split('.');\n if (parts.length < 3) {\n throw new Error(`Invalid version string: ${version}`);\n }\n\n // Handle pre-release versions like \"4.6.24-dev.0\"\n // Split the patch part on '-' to separate patch number from pre-release\n const patchPart = parts[2];\n let patchNumber: number;\n\n if (patchPart.startsWith('-')) {\n // Handle negative patch numbers like \"-1\" or \"-5\"\n patchNumber = parseInt(patchPart, 10);\n } else {\n // Handle normal patch numbers with possible pre-release like \"24-dev.0\"\n const patchComponents = patchPart.split('-');\n patchNumber = parseInt(patchComponents[0], 10);\n }\n\n if (isNaN(patchNumber)) {\n throw new Error(`Invalid patch version: ${patchPart}`);\n }\n\n // Increment the patch number and rebuild the version\n const newPatchNumber = patchNumber + 1;\n\n // For pre-release versions, we'll create a clean release version by dropping the pre-release identifier\n const newVersion = `${parts[0]}.${parts[1]}.${newPatchNumber}`;\n\n return newVersion;\n};\n\nexport const incrementMinorVersion = (version: string): string => {\n // Remove 'v' prefix if present\n const cleanVersion = version.startsWith('v') ? version.slice(1) : version;\n\n // Split into major.minor.patch and handle pre-release identifiers\n const parts = cleanVersion.split('.');\n if (parts.length < 3) {\n throw new Error(`Invalid version string: ${version}`);\n }\n\n const majorNumber = parseInt(parts[0], 10);\n const minorPart = parts[1];\n\n // Handle pre-release versions on minor like \"23-dev.0\"\n const minorComponents = minorPart.split('-');\n const minorNumber = parseInt(minorComponents[0], 10);\n\n if (isNaN(majorNumber) || isNaN(minorNumber)) {\n throw new Error(`Invalid version numbers in: ${version}`);\n }\n\n // Increment the minor number and reset patch to 0\n const newMinorNumber = minorNumber + 1;\n const newVersion = `${majorNumber}.${newMinorNumber}.0`;\n\n return newVersion;\n};\n\nexport const incrementMajorVersion = (version: string): string => {\n // Remove 'v' prefix if present\n const cleanVersion = version.startsWith('v') ? version.slice(1) : version;\n\n // Split into major.minor.patch and handle pre-release identifiers\n const parts = cleanVersion.split('.');\n if (parts.length < 3) {\n throw new Error(`Invalid version string: ${version}`);\n }\n\n const majorPart = parts[0];\n\n // Handle pre-release versions on major like \"4-dev.0\"\n const majorComponents = majorPart.split('-');\n const majorNumber = parseInt(majorComponents[0], 10);\n\n if (isNaN(majorNumber)) {\n throw new Error(`Invalid major version number in: ${version}`);\n }\n\n // Increment the major number and reset minor and patch to 0\n const newMajorNumber = majorNumber + 1;\n const newVersion = `${newMajorNumber}.0.0`;\n\n return newVersion;\n};\n\nexport const validateVersionString = (version: string): boolean => {\n // Remove 'v' prefix if present\n const cleanVersion = version.startsWith('v') ? version.slice(1) : version;\n\n // Basic semver regex pattern\n const semverPattern = /^\\d+\\.\\d+\\.\\d+$/;\n return semverPattern.test(cleanVersion);\n};\n\nexport const calculateTargetVersion = (currentVersion: string, targetVersion: string): string => {\n switch (targetVersion.toLowerCase()) {\n case 'patch':\n return incrementPatchVersion(currentVersion);\n case 'minor':\n return incrementMinorVersion(currentVersion);\n case 'major':\n return incrementMajorVersion(currentVersion);\n default:\n // Explicit version provided\n if (!validateVersionString(targetVersion)) {\n throw new Error(`Invalid version format: ${targetVersion}. Expected format: \"x.y.z\" or one of: \"patch\", \"minor\", \"major\"`);\n }\n return targetVersion.startsWith('v') ? targetVersion.slice(1) : targetVersion;\n }\n};\n\nexport const checkIfTagExists = async (tagName: string): Promise<boolean> => {\n const { runSecure, validateGitRef } = await import('./child');\n try {\n // Validate tag name to prevent injection\n if (!validateGitRef(tagName)) {\n throw new Error(`Invalid tag name: ${tagName}`);\n }\n const { stdout } = await runSecure('git', ['tag', '-l', tagName]);\n return stdout.trim() === tagName;\n } catch {\n // If git command fails, assume tag doesn't exist\n return false;\n }\n};\n\nexport const confirmVersionInteractively = async (currentVersion: string, proposedVersion: string, targetVersionInput?: string): Promise<string> => {\n const { getUserChoice, getUserTextInput, requireTTY } = await import('./interactive');\n const { getLogger } = await import('../logging');\n\n requireTTY('Interactive version confirmation requires a terminal.');\n\n const logger = getLogger();\n logger.info(`\\nš¦ Version Confirmation:`);\n logger.info(` Current version: ${currentVersion}`);\n logger.info(` Proposed version: ${proposedVersion}`);\n if (targetVersionInput) {\n logger.info(` Target input: ${targetVersionInput}`);\n }\n\n const choices = [\n { key: 'c', label: `Confirm ${proposedVersion}` },\n { key: 'e', label: 'Enter custom version' },\n { key: 'a', label: 'Abort publish' }\n ];\n\n const choice = await getUserChoice('\\nš¤ Confirm the version for this release:', choices);\n\n switch (choice) {\n case 'c':\n return proposedVersion;\n case 'e': {\n const customVersion = await getUserTextInput('\\nš Enter the version number (e.g., \"4.30.0\"):');\n if (!validateVersionString(customVersion)) {\n throw new Error(`Invalid version format: ${customVersion}. Expected format: \"x.y.z\"`);\n }\n const cleanCustomVersion = customVersion.startsWith('v') ? customVersion.slice(1) : customVersion;\n logger.info(`ā
Using custom version: ${cleanCustomVersion}`);\n return cleanCustomVersion;\n }\n case 'a':\n throw new Error('Release aborted by user');\n default:\n throw new Error(`Unexpected choice: ${choice}`);\n }\n};\n\nexport const getOutputPath = (outputDirectory: string, filename: string): string => {\n return path.join(outputDirectory, filename);\n};\n\nexport const getTimestampedFilename = (baseName: string, extension: string = '.json'): string => {\n const now = new Date();\n\n // Format as YYMMdd-HHmm (e.g., 250701-1030)\n const yy = now.getFullYear().toString().slice(-2);\n const mm = (now.getMonth() + 1).toString().padStart(2, '0');\n const dd = now.getDate().toString().padStart(2, '0');\n const hh = now.getHours().toString().padStart(2, '0');\n const min = now.getMinutes().toString().padStart(2, '0');\n\n const timestamp = `${yy}${mm}${dd}-${hh}${min}`;\n\n return `${timestamp}-${baseName}${extension}`;\n};\n\nexport const getTimestampedRequestFilename = (baseName: string): string => {\n return getTimestampedFilename(baseName, '.request.json');\n};\n\nexport const getTimestampedResponseFilename = (baseName: string): string => {\n return getTimestampedFilename(baseName, '.response.json');\n};\n\nexport const getTimestampedCommitFilename = (): string => {\n return getTimestampedFilename('commit-message', '.md');\n};\n\nexport const getTimestampedReleaseNotesFilename = (): string => {\n return getTimestampedFilename('release-notes', '.md');\n};\n\nexport const getTimestampedAudioFilename = (): string => {\n return getTimestampedFilename('audio-recording', '.wav');\n};\n\nexport const getTimestampedTranscriptFilename = (): string => {\n return getTimestampedFilename('audio-transcript', '.md');\n};\n\nexport const getTimestampedReviewFilename = (): string => {\n return getTimestampedFilename('review-analysis', '.md');\n};\n\nexport const getTimestampedReviewNotesFilename = (): string => {\n return getTimestampedFilename('review-notes', '.md');\n};\n\nexport const getTimestampedArchivedAudioFilename = (originalExtension: string = '.wav'): string => {\n return getTimestampedFilename('review-audio', originalExtension);\n};\n\nexport const getTimestampedArchivedTranscriptFilename = (): string => {\n return getTimestampedFilename('review-transcript', '.md');\n};\n\n/**\n * Archives an audio file and its transcription to the output/kodrdriv directory\n * @param originalAudioPath - Path to the original audio file\n * @param transcriptionText - The raw transcription text\n * @param outputDirectory - Base output directory (default: 'output')\n * @returns Object containing the paths where files were archived\n */\nexport const archiveAudio = async (\n originalAudioPath: string,\n transcriptionText: string,\n outputDirectory: string = 'output'\n): Promise<{ audioPath: string; transcriptPath: string }> => {\n const logger = getLogger();\n const storage = Storage.create({ log: logger.debug });\n\n try {\n // Ensure the output directory exists (should already be output/kodrdriv)\n await storage.ensureDirectory(outputDirectory);\n\n // Get file extension from original audio file\n const originalExtension = path.extname(originalAudioPath);\n\n // Generate timestamped filenames\n const archivedAudioFilename = getTimestampedArchivedAudioFilename(originalExtension);\n const archivedTranscriptFilename = getTimestampedArchivedTranscriptFilename();\n\n // Full paths for archived files - directly in the output directory\n const archivedAudioPath = path.join(outputDirectory, archivedAudioFilename);\n const archivedTranscriptPath = path.join(outputDirectory, archivedTranscriptFilename);\n\n // Copy audio file if it exists\n if (await storage.isFileReadable(originalAudioPath)) {\n // Read original audio file as buffer using fs directly for binary files\n const audioBuffer = await fs.promises.readFile(originalAudioPath);\n await storage.writeFile(archivedAudioPath, audioBuffer, 'binary');\n logger.debug('Archived audio file to: %s', archivedAudioPath);\n } else {\n logger.warn('Original audio file not found or not readable: %s', originalAudioPath);\n }\n\n // Save transcription text\n const transcriptContent = `# Audio Transcription Archive\\n\\n**Original Audio File:** ${originalAudioPath}\\n**Archived:** ${new Date().toISOString()}\\n\\n## Transcription\\n\\n${transcriptionText}`;\n await storage.writeFile(archivedTranscriptPath, transcriptContent, 'utf8');\n logger.debug('Archived transcription to: %s', archivedTranscriptPath);\n\n logger.info('š Audio archived successfully - Audio: %s, Transcript: %s', archivedAudioFilename, archivedTranscriptFilename);\n\n return {\n audioPath: archivedAudioPath,\n transcriptPath: archivedTranscriptPath\n };\n\n } catch (error: any) {\n logger.error('Failed to archive audio: %s', error.message);\n throw new Error(`Audio archiving failed: ${error.message}`);\n }\n};\n"],"names":["stringifyJSON","obj","options","depth","arrOfKeyVals","arrVals","objKeys","Array","isArray","undefined","forEach","el","push","Object","keys","key","keyOut","keyValOut","Function","incrementPatchVersion","version","cleanVersion","startsWith","slice","parts","split","length","Error","patchPart","patchNumber","parseInt","patchComponents","isNaN","newPatchNumber","newVersion","incrementMinorVersion","majorNumber","minorPart","minorComponents","minorNumber","newMinorNumber","incrementMajorVersion","majorPart","majorComponents","newMajorNumber","validateVersionString","semverPattern","test","calculateTargetVersion","currentVersion","targetVersion","toLowerCase","checkIfTagExists","tagName","runSecure","validateGitRef","stdout","trim","confirmVersionInteractively","proposedVersion","targetVersionInput","getUserChoice","getUserTextInput","requireTTY","getLogger","logger","info","choices","label","choice","customVersion","cleanCustomVersion","getOutputPath","outputDirectory","filename","path","join","getTimestampedFilename","baseName","extension","now","Date","yy","getFullYear","toString","mm","getMonth","padStart","dd","getDate","hh","getHours","min","getMinutes","timestamp","getTimestampedRequestFilename","getTimestampedResponseFilename","getTimestampedCommitFilename","getTimestampedReleaseNotesFilename","getTimestampedAudioFilename","getTimestampedReviewFilename","getTimestampedReviewNotesFilename","getTimestampedArchivedAudioFilename","originalExtension","getTimestampedArchivedTranscriptFilename","archiveAudio","originalAudioPath","transcriptionText","storage","Storage","log","debug","ensureDirectory","extname","archivedAudioFilename","archivedTranscriptFilename","archivedAudioPath","archivedTranscriptPath","isFileReadable","audioBuffer","fs","promises","readFile","writeFile","warn","transcriptContent","toISOString","audioPath","transcriptPath","error","message"],"mappings":"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"}
|