@eldrforge/kodrdriv 0.0.14 → 0.0.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/README.md +1 -9
  2. package/dist/arguments.js +306 -55
  3. package/dist/arguments.js.map +1 -1
  4. package/dist/audio/devices.js +284 -0
  5. package/dist/audio/devices.js.map +1 -0
  6. package/dist/audio/index.js +31 -0
  7. package/dist/audio/index.js.map +1 -0
  8. package/dist/audio/processor.js +766 -0
  9. package/dist/audio/processor.js.map +1 -0
  10. package/dist/audio/types.js +16 -0
  11. package/dist/audio/types.js.map +1 -0
  12. package/dist/audio/validation.js +35 -0
  13. package/dist/audio/validation.js.map +1 -0
  14. package/dist/commands/audio-commit.js +64 -248
  15. package/dist/commands/audio-commit.js.map +1 -1
  16. package/dist/commands/audio-review.js +90 -701
  17. package/dist/commands/audio-review.js.map +1 -1
  18. package/dist/commands/commit.js +18 -18
  19. package/dist/commands/commit.js.map +1 -1
  20. package/dist/commands/release.js +14 -15
  21. package/dist/commands/release.js.map +1 -1
  22. package/dist/commands/review.js +152 -0
  23. package/dist/commands/review.js.map +1 -0
  24. package/dist/commands/select-audio.js +265 -0
  25. package/dist/commands/select-audio.js.map +1 -0
  26. package/dist/constants.js +86 -68
  27. package/dist/constants.js.map +1 -1
  28. package/dist/content/diff.js +155 -1
  29. package/dist/content/diff.js.map +1 -1
  30. package/dist/content/issues.js +256 -0
  31. package/dist/content/issues.js.map +1 -0
  32. package/dist/content/releaseNotes.js +90 -0
  33. package/dist/content/releaseNotes.js.map +1 -0
  34. package/dist/main.js +9 -2
  35. package/dist/main.js.map +1 -1
  36. package/dist/prompt/instructions/commit.md +18 -15
  37. package/dist/prompt/instructions/release.md +6 -5
  38. package/dist/prompt/instructions/{audio-review.md → review.md} +24 -18
  39. package/dist/prompt/prompts.js +87 -19
  40. package/dist/prompt/prompts.js.map +1 -1
  41. package/dist/types.js +27 -3
  42. package/dist/types.js.map +1 -1
  43. package/dist/util/general.js +7 -1
  44. package/dist/util/general.js.map +1 -1
  45. package/dist/util/openai.js +34 -3
  46. package/dist/util/openai.js.map +1 -1
  47. package/dist/util/stdin.js +61 -0
  48. package/dist/util/stdin.js.map +1 -0
  49. package/package.json +6 -6
  50. package/.kodrdriv/config.yaml +0 -20
  51. package/.kodrdriv/context/content.md +0 -7
  52. package/RELEASE_NOTES.md +0 -14
  53. package/docs/index.html +0 -17
  54. package/docs/package.json +0 -36
  55. package/docs/pnpm-lock.yaml +0 -3441
  56. package/docs/public/README.md +0 -132
  57. package/docs/public/advanced-usage.md +0 -188
  58. package/docs/public/code-icon.svg +0 -4
  59. package/docs/public/commands.md +0 -116
  60. package/docs/public/configuration.md +0 -274
  61. package/docs/public/examples.md +0 -352
  62. package/docs/public/kodrdriv-logo.svg +0 -62
  63. package/docs/src/App.css +0 -387
  64. package/docs/src/App.tsx +0 -60
  65. package/docs/src/components/DocumentPage.tsx +0 -56
  66. package/docs/src/components/ErrorMessage.tsx +0 -15
  67. package/docs/src/components/LoadingSpinner.tsx +0 -14
  68. package/docs/src/components/MarkdownRenderer.tsx +0 -56
  69. package/docs/src/components/Navigation.css +0 -73
  70. package/docs/src/components/Navigation.tsx +0 -36
  71. package/docs/src/index.css +0 -61
  72. package/docs/src/main.tsx +0 -10
  73. package/docs/src/test/setup.ts +0 -1
  74. package/docs/src/vite-env.d.ts +0 -10
  75. package/docs/tsconfig.node.json +0 -13
  76. package/docs/vite.config.ts +0 -15
  77. package/docs/vitest.config.ts +0 -15
  78. package/eslint.config.mjs +0 -83
  79. package/nodemon.json +0 -14
  80. package/output/kodrdriv/250701-1442-release-notes.md +0 -3
  81. package/pnpm-workspace.yaml +0 -5
  82. package/tsconfig.tsbuildinfo +0 -1
  83. package/vite.config.ts +0 -90
  84. package/vitest.config.ts +0 -24
@@ -0,0 +1,265 @@
1
+ #!/usr/bin/env node
2
+ import path from 'path';
3
+ import yaml from 'js-yaml';
4
+ import { getLogger } from '../logging.js';
5
+ import { run } from '../util/child.js';
6
+ import { create } from '../util/storage.js';
7
+ import { getAudioDeviceInfo } from '../audio/devices.js';
8
+
9
+ const parseAudioDevices = async ()=>{
10
+ try {
11
+ try {
12
+ await run('ffmpeg -f avfoundation -list_devices true -i ""');
13
+ } catch (result) {
14
+ const output = result.stderr || result.stdout || '';
15
+ const audioDevicesSection = output.split('AVFoundation audio devices:')[1];
16
+ if (audioDevicesSection) {
17
+ const deviceLines = audioDevicesSection.split('\n').filter((line)=>line.includes('[') && line.includes(']')).map((line)=>line.trim());
18
+ return deviceLines.map((line)=>{
19
+ const match = line.match(/\[(\d+)\]\s+(.+)/);
20
+ if (match) {
21
+ return {
22
+ index: match[1],
23
+ name: match[2]
24
+ };
25
+ }
26
+ return null;
27
+ }).filter(Boolean);
28
+ }
29
+ }
30
+ return [];
31
+ } catch {
32
+ return [];
33
+ }
34
+ };
35
+ const selectAudioDeviceInteractively = async ()=>{
36
+ const logger = getLogger();
37
+ logger.info('🎙️ Available audio devices:');
38
+ const devices = await parseAudioDevices();
39
+ if (devices.length === 0) {
40
+ logger.error('❌ No audio devices found. Make sure ffmpeg is installed and audio devices are available.');
41
+ return null;
42
+ }
43
+ // Test devices and show status
44
+ logger.info('🔍 Testing audio devices...');
45
+ const deviceStatuses = await Promise.all(devices.map(async (device)=>{
46
+ const { testAudioDevice } = await import('../audio/devices.js');
47
+ const isWorking = await testAudioDevice(device.index);
48
+ return {
49
+ ...device,
50
+ isWorking
51
+ };
52
+ }));
53
+ // Display devices with status
54
+ deviceStatuses.forEach((device, i)=>{
55
+ const status = device.isWorking ? '✅' : '❌';
56
+ logger.info(` ${i + 1}. ${status} ${device.name}`);
57
+ });
58
+ const workingDevices = deviceStatuses.filter((d)=>d.isWorking);
59
+ if (workingDevices.length === 0) {
60
+ logger.error('❌ No working audio devices found. This may be due to:');
61
+ logger.error(' • Microphone permission not granted to Terminal/iTerm');
62
+ logger.error(' • Audio devices in use by other applications');
63
+ logger.error(' • ffmpeg configuration issues');
64
+ logger.error('');
65
+ logger.error('💡 Try:');
66
+ logger.error(' • Go to System Preferences → Security & Privacy → Privacy → Microphone');
67
+ logger.error(' • Make sure Terminal (or your terminal app) has microphone access');
68
+ logger.error(' • Close other audio applications and try again');
69
+ return null;
70
+ }
71
+ logger.info('');
72
+ logger.info('📋 Select an audio device by entering its number (1-' + devices.length + '):');
73
+ return new Promise((resolve)=>{
74
+ // Set up keyboard input
75
+ process.stdin.setRawMode(true);
76
+ process.stdin.resume();
77
+ process.stdin.setEncoding('utf8');
78
+ let inputBuffer = '';
79
+ const keyHandler = (key)=>{
80
+ const keyCode = key.charCodeAt(0);
81
+ if (keyCode === 13) {
82
+ const selectedIndex = parseInt(inputBuffer) - 1;
83
+ if (selectedIndex >= 0 && selectedIndex < devices.length) {
84
+ const selectedDevice = deviceStatuses[selectedIndex];
85
+ process.stdout.write('\n\n');
86
+ if (!selectedDevice.isWorking) {
87
+ logger.warn(`⚠️ Warning: Selected device "${selectedDevice.name}" failed testing`);
88
+ logger.warn(' This device may not work properly for recording');
89
+ logger.warn(' Consider selecting a device marked with ✅');
90
+ } else {
91
+ logger.info(`✅ Selected: ${selectedDevice.name}`);
92
+ }
93
+ // Cleanup and resolve
94
+ process.stdin.setRawMode(false);
95
+ process.stdin.pause();
96
+ process.stdin.removeListener('data', keyHandler);
97
+ resolve(selectedDevice);
98
+ } else {
99
+ logger.error('❌ Invalid selection. Please enter a number between 1 and ' + devices.length);
100
+ inputBuffer = '';
101
+ process.stdout.write('📋 Select an audio device: ');
102
+ }
103
+ } else if (keyCode === 3) {
104
+ logger.info('\n❌ Selection cancelled');
105
+ process.stdin.setRawMode(false);
106
+ process.stdin.pause();
107
+ process.stdin.removeListener('data', keyHandler);
108
+ resolve(null);
109
+ } else if (keyCode >= 48 && keyCode <= 57) {
110
+ inputBuffer += key;
111
+ process.stdout.write(key);
112
+ } else if (keyCode === 127) {
113
+ if (inputBuffer.length > 0) {
114
+ inputBuffer = inputBuffer.slice(0, -1);
115
+ process.stdout.write('\b \b');
116
+ }
117
+ }
118
+ };
119
+ process.stdin.on('data', keyHandler);
120
+ process.stdout.write('📋 Select an audio device: ');
121
+ });
122
+ };
123
+ const getAudioDeviceConfigPath = (preferencesDirectory)=>{
124
+ return path.join(preferencesDirectory, 'audio-device.yaml');
125
+ };
126
+ const ensurePreferencesDirectory = async (preferencesDirectory)=>{
127
+ const logger = getLogger();
128
+ const storage = create({
129
+ log: logger.info
130
+ });
131
+ try {
132
+ await storage.ensureDirectory(preferencesDirectory);
133
+ logger.debug('Ensured preferences directory exists: %s', preferencesDirectory);
134
+ } catch (error) {
135
+ logger.error('Failed to create preferences directory: %s', error.message);
136
+ throw error;
137
+ }
138
+ };
139
+ const saveAudioDeviceToHomeConfig = async (deviceIndex, deviceName, capabilities, preferencesDirectory)=>{
140
+ const logger = getLogger();
141
+ const storage = create({
142
+ log: logger.info
143
+ });
144
+ try {
145
+ await ensurePreferencesDirectory(preferencesDirectory);
146
+ const configPath = getAudioDeviceConfigPath(preferencesDirectory);
147
+ const audioConfig = {
148
+ audioDevice: deviceIndex,
149
+ audioDeviceName: deviceName,
150
+ sampleRate: capabilities.sampleRate,
151
+ channels: capabilities.channels,
152
+ channelLayout: capabilities.channelLayout,
153
+ lastUpdated: new Date().toISOString()
154
+ };
155
+ // Save as YAML
156
+ const yamlContent = yaml.dump(audioConfig, {
157
+ indent: 2,
158
+ lineWidth: 120,
159
+ noRefs: true
160
+ });
161
+ await storage.writeFile(configPath, yamlContent, 'utf-8');
162
+ logger.debug('Saved audio configuration to: %s', configPath);
163
+ } catch (error) {
164
+ logger.error('Failed to save audio configuration: %s', error.message);
165
+ throw error;
166
+ }
167
+ };
168
+ const loadAudioDeviceFromHomeConfig = async (preferencesDirectory)=>{
169
+ const logger = getLogger();
170
+ const storage = create({
171
+ log: logger.info
172
+ });
173
+ try {
174
+ const configPath = getAudioDeviceConfigPath(preferencesDirectory);
175
+ const configContent = await storage.readFile(configPath, 'utf-8');
176
+ const audioConfig = yaml.load(configContent);
177
+ if (audioConfig === null || audioConfig === void 0 ? void 0 : audioConfig.audioDevice) {
178
+ logger.debug('Loaded audio device from preferences config: [%s] %s', audioConfig.audioDevice, audioConfig.audioDeviceName || 'Unknown');
179
+ return {
180
+ audioDevice: audioConfig.audioDevice,
181
+ audioDeviceName: audioConfig.audioDeviceName || 'Unknown',
182
+ sampleRate: audioConfig.sampleRate,
183
+ channels: audioConfig.channels,
184
+ channelLayout: audioConfig.channelLayout
185
+ };
186
+ }
187
+ return null;
188
+ } catch {
189
+ // Config file doesn't exist or is invalid
190
+ logger.debug('No saved audio device configuration found in preferences directory');
191
+ return null;
192
+ }
193
+ };
194
+ const audioDeviceConfigExists = async (preferencesDirectory)=>{
195
+ const storage = create({
196
+ log: ()=>{}
197
+ });
198
+ const configPath = getAudioDeviceConfigPath(preferencesDirectory);
199
+ try {
200
+ await storage.readFile(configPath, 'utf-8');
201
+ return true;
202
+ } catch {
203
+ return false;
204
+ }
205
+ };
206
+ const listAudioDevices = async ()=>{
207
+ const logger = getLogger();
208
+ try {
209
+ try {
210
+ await run('ffmpeg -f avfoundation -list_devices true -i ""');
211
+ } catch (result) {
212
+ const output = result.stderr || result.stdout || '';
213
+ const audioDevicesSection = output.split('AVFoundation audio devices:')[1];
214
+ if (audioDevicesSection) {
215
+ logger.info('🎙️ Available audio devices:');
216
+ const deviceLines = audioDevicesSection.split('\n').filter((line)=>line.includes('[') && line.includes(']')).map((line)=>line.trim());
217
+ deviceLines.forEach((line, i)=>{
218
+ const match = line.match(/\[(\d+)\]\s+(.+)/);
219
+ if (match) {
220
+ logger.info(` ${i + 1}. ${match[2]}`);
221
+ }
222
+ });
223
+ }
224
+ }
225
+ } catch {
226
+ logger.debug('Could not list audio devices');
227
+ }
228
+ };
229
+ const execute = async (runConfig)=>{
230
+ const logger = getLogger();
231
+ const isDryRun = runConfig.dryRun || false;
232
+ if (isDryRun) {
233
+ logger.info('DRY RUN: Would start audio device selection process');
234
+ logger.info('DRY RUN: Would save selected device to %s/audio-device.yaml', runConfig.preferencesDirectory);
235
+ return 'Audio device selection completed (dry run)';
236
+ }
237
+ logger.info('🎛️ Starting audio device selection...');
238
+ logger.info('');
239
+ logger.info('This device will be used to capture audio for:');
240
+ logger.info(' • Audio commit messages (audio-commit command)');
241
+ logger.info(' • Audio code reviews (audio-review command)');
242
+ logger.info('');
243
+ // List available devices in debug mode
244
+ if (runConfig.debug) {
245
+ await listAudioDevices();
246
+ }
247
+ const selectedDevice = await selectAudioDeviceInteractively();
248
+ if (selectedDevice === null) {
249
+ logger.error('❌ Audio device selection cancelled or failed');
250
+ process.exit(1);
251
+ }
252
+ // Probe device capabilities (sample rate / channels)
253
+ const capabilities = await getAudioDeviceInfo(selectedDevice.index);
254
+ // Save to preferences directory configuration
255
+ await saveAudioDeviceToHomeConfig(selectedDevice.index, selectedDevice.name, capabilities, runConfig.preferencesDirectory);
256
+ logger.info('💾 Audio device saved to %s/audio-device.yaml', runConfig.preferencesDirectory);
257
+ logger.info('✅ Audio device selection complete');
258
+ logger.info('');
259
+ logger.info('You can now run audio-commit or audio-review commands to use your selected device');
260
+ logger.info('To change your audio device in the future, run the select-audio command again');
261
+ return `Audio device configured successfully: ${selectedDevice.name}`;
262
+ };
263
+
264
+ export { audioDeviceConfigExists, execute, loadAudioDeviceFromHomeConfig, saveAudioDeviceToHomeConfig };
265
+ //# sourceMappingURL=select-audio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select-audio.js","sources":["../../src/commands/select-audio.ts"],"sourcesContent":["#!/usr/bin/env node\nimport path from 'path';\nimport yaml from 'js-yaml';\nimport { getLogger } from '../logging';\nimport { Config } from '../types';\nimport { run } from '../util/child';\nimport { create as createStorage } from '../util/storage';\nimport { getAudioDeviceInfo } from '../audio/devices';\n\nconst parseAudioDevices = async (): Promise<Array<{ index: string; name: string }>> => {\n try {\n try {\n await run('ffmpeg -f avfoundation -list_devices true -i \"\"');\n } catch (result: any) {\n const output = result.stderr || result.stdout || '';\n const audioDevicesSection = output.split('AVFoundation audio devices:')[1];\n\n if (audioDevicesSection) {\n const deviceLines = audioDevicesSection.split('\\n')\n .filter((line: string) => line.includes('[') && line.includes(']'))\n .map((line: string) => line.trim());\n\n return deviceLines.map((line: string) => {\n const match = line.match(/\\[(\\d+)\\]\\s+(.+)/);\n if (match) {\n return { index: match[1], name: match[2] };\n }\n return null;\n }).filter(Boolean) as Array<{ index: string; name: string }>;\n }\n }\n return [];\n } catch {\n return [];\n }\n};\n\nconst selectAudioDeviceInteractively = async (): Promise<{ index: string; name: string } | null> => {\n const logger = getLogger();\n\n logger.info('🎙️ Available audio devices:');\n const devices = await parseAudioDevices();\n\n if (devices.length === 0) {\n logger.error('❌ No audio devices found. Make sure ffmpeg is installed and audio devices are available.');\n return null;\n }\n\n // Test devices and show status\n logger.info('🔍 Testing audio devices...');\n const deviceStatuses = await Promise.all(\n devices.map(async (device) => {\n const { testAudioDevice } = await import('../audio/devices');\n const isWorking = await testAudioDevice(device.index);\n return { ...device, isWorking };\n })\n );\n\n // Display devices with status\n deviceStatuses.forEach((device, i) => {\n const status = device.isWorking ? '✅' : '❌';\n logger.info(` ${i + 1}. ${status} ${device.name}`);\n });\n\n const workingDevices = deviceStatuses.filter(d => d.isWorking);\n if (workingDevices.length === 0) {\n logger.error('❌ No working audio devices found. This may be due to:');\n logger.error(' • Microphone permission not granted to Terminal/iTerm');\n logger.error(' • Audio devices in use by other applications');\n logger.error(' • ffmpeg configuration issues');\n logger.error('');\n logger.error('💡 Try:');\n logger.error(' • Go to System Preferences → Security & Privacy → Privacy → Microphone');\n logger.error(' • Make sure Terminal (or your terminal app) has microphone access');\n logger.error(' • Close other audio applications and try again');\n return null;\n }\n\n logger.info('');\n logger.info('📋 Select an audio device by entering its number (1-' + devices.length + '):');\n\n return new Promise((resolve) => {\n // Set up keyboard input\n process.stdin.setRawMode(true);\n process.stdin.resume();\n process.stdin.setEncoding('utf8');\n\n let inputBuffer = '';\n\n const keyHandler = (key: string) => {\n const keyCode = key.charCodeAt(0);\n\n if (keyCode === 13) { // ENTER key\n const selectedIndex = parseInt(inputBuffer) - 1;\n\n if (selectedIndex >= 0 && selectedIndex < devices.length) {\n const selectedDevice = deviceStatuses[selectedIndex];\n process.stdout.write('\\n\\n');\n\n if (!selectedDevice.isWorking) {\n logger.warn(`⚠️ Warning: Selected device \"${selectedDevice.name}\" failed testing`);\n logger.warn(' This device may not work properly for recording');\n logger.warn(' Consider selecting a device marked with ✅');\n } else {\n logger.info(`✅ Selected: ${selectedDevice.name}`);\n }\n\n // Cleanup and resolve\n process.stdin.setRawMode(false);\n process.stdin.pause();\n process.stdin.removeListener('data', keyHandler);\n resolve(selectedDevice);\n } else {\n logger.error('❌ Invalid selection. Please enter a number between 1 and ' + devices.length);\n inputBuffer = '';\n process.stdout.write('📋 Select an audio device: ');\n }\n } else if (keyCode === 3) { // Ctrl+C\n logger.info('\\n❌ Selection cancelled');\n process.stdin.setRawMode(false);\n process.stdin.pause();\n process.stdin.removeListener('data', keyHandler);\n resolve(null);\n } else if (keyCode >= 48 && keyCode <= 57) { // Numbers 0-9\n inputBuffer += key;\n process.stdout.write(key);\n } else if (keyCode === 127) { // Backspace\n if (inputBuffer.length > 0) {\n inputBuffer = inputBuffer.slice(0, -1);\n process.stdout.write('\\b \\b');\n }\n }\n };\n\n process.stdin.on('data', keyHandler);\n process.stdout.write('📋 Select an audio device: ');\n });\n};\n\nconst getAudioDeviceConfigPath = (preferencesDirectory: string): string => {\n return path.join(preferencesDirectory, 'audio-device.yaml');\n};\n\nconst ensurePreferencesDirectory = async (preferencesDirectory: string): Promise<void> => {\n const logger = getLogger();\n const storage = createStorage({ log: logger.info });\n\n try {\n await storage.ensureDirectory(preferencesDirectory);\n logger.debug('Ensured preferences directory exists: %s', preferencesDirectory);\n } catch (error: any) {\n logger.error('Failed to create preferences directory: %s', error.message);\n throw error;\n }\n};\n\nexport const saveAudioDeviceToHomeConfig = async (\n deviceIndex: string,\n deviceName: string,\n capabilities: { sampleRate?: number; channels?: number; channelLayout?: string },\n preferencesDirectory: string\n): Promise<void> => {\n const logger = getLogger();\n const storage = createStorage({ log: logger.info });\n\n try {\n await ensurePreferencesDirectory(preferencesDirectory);\n const configPath = getAudioDeviceConfigPath(preferencesDirectory);\n\n const audioConfig = {\n audioDevice: deviceIndex,\n audioDeviceName: deviceName,\n sampleRate: capabilities.sampleRate,\n channels: capabilities.channels,\n channelLayout: capabilities.channelLayout,\n lastUpdated: new Date().toISOString()\n };\n\n // Save as YAML\n const yamlContent = yaml.dump(audioConfig, {\n indent: 2,\n lineWidth: 120,\n noRefs: true\n });\n\n await storage.writeFile(configPath, yamlContent, 'utf-8');\n logger.debug('Saved audio configuration to: %s', configPath);\n\n } catch (error: any) {\n logger.error('Failed to save audio configuration: %s', error.message);\n throw error;\n }\n};\n\nexport const loadAudioDeviceFromHomeConfig = async (preferencesDirectory: string): Promise<{ audioDevice: string; audioDeviceName: string; sampleRate?: number; channels?: number; channelLayout?: string } | null> => {\n const logger = getLogger();\n const storage = createStorage({ log: logger.info });\n\n try {\n const configPath = getAudioDeviceConfigPath(preferencesDirectory);\n const configContent = await storage.readFile(configPath, 'utf-8');\n const audioConfig = yaml.load(configContent) as any;\n\n if (audioConfig?.audioDevice) {\n logger.debug('Loaded audio device from preferences config: [%s] %s', audioConfig.audioDevice, audioConfig.audioDeviceName || 'Unknown');\n return {\n audioDevice: audioConfig.audioDevice,\n audioDeviceName: audioConfig.audioDeviceName || 'Unknown',\n sampleRate: audioConfig.sampleRate,\n channels: audioConfig.channels,\n channelLayout: audioConfig.channelLayout\n };\n }\n\n return null;\n } catch {\n // Config file doesn't exist or is invalid\n logger.debug('No saved audio device configuration found in preferences directory');\n return null;\n }\n};\n\nexport const audioDeviceConfigExists = async (preferencesDirectory: string): Promise<boolean> => {\n const storage = createStorage({ log: () => { } });\n const configPath = getAudioDeviceConfigPath(preferencesDirectory);\n\n try {\n await storage.readFile(configPath, 'utf-8');\n return true;\n } catch {\n return false;\n }\n};\n\nconst listAudioDevices = async (): Promise<void> => {\n const logger = getLogger();\n try {\n try {\n await run('ffmpeg -f avfoundation -list_devices true -i \"\"');\n } catch (result: any) {\n const output = result.stderr || result.stdout || '';\n const audioDevicesSection = output.split('AVFoundation audio devices:')[1];\n\n if (audioDevicesSection) {\n logger.info('🎙️ Available audio devices:');\n const deviceLines = audioDevicesSection.split('\\n')\n .filter((line: string) => line.includes('[') && line.includes(']'))\n .map((line: string) => line.trim());\n\n deviceLines.forEach((line: string, i: number) => {\n const match = line.match(/\\[(\\d+)\\]\\s+(.+)/);\n if (match) {\n logger.info(` ${i + 1}. ${match[2]}`);\n }\n });\n }\n }\n } catch {\n logger.debug('Could not list audio devices');\n }\n};\n\nexport const execute = async (runConfig: Config): Promise<string> => {\n const logger = getLogger();\n const isDryRun = runConfig.dryRun || false;\n\n if (isDryRun) {\n logger.info('DRY RUN: Would start audio device selection process');\n logger.info('DRY RUN: Would save selected device to %s/audio-device.yaml', runConfig.preferencesDirectory);\n return 'Audio device selection completed (dry run)';\n }\n\n logger.info('🎛️ Starting audio device selection...');\n logger.info('');\n logger.info('This device will be used to capture audio for:');\n logger.info(' • Audio commit messages (audio-commit command)');\n logger.info(' • Audio code reviews (audio-review command)');\n logger.info('');\n\n // List available devices in debug mode\n if (runConfig.debug) {\n await listAudioDevices();\n }\n\n const selectedDevice = await selectAudioDeviceInteractively();\n\n if (selectedDevice === null) {\n logger.error('❌ Audio device selection cancelled or failed');\n process.exit(1);\n }\n\n // Probe device capabilities (sample rate / channels)\n const capabilities = await getAudioDeviceInfo(selectedDevice.index);\n\n // Save to preferences directory configuration\n await saveAudioDeviceToHomeConfig(selectedDevice.index, selectedDevice.name, capabilities, runConfig.preferencesDirectory!);\n logger.info('💾 Audio device saved to %s/audio-device.yaml', runConfig.preferencesDirectory);\n\n logger.info('✅ Audio device selection complete');\n logger.info('');\n logger.info('You can now run audio-commit or audio-review commands to use your selected device');\n logger.info('To change your audio device in the future, run the select-audio command again');\n\n return `Audio device configured successfully: ${selectedDevice.name}`;\n}; "],"names":["parseAudioDevices","run","result","output","stderr","stdout","audioDevicesSection","split","deviceLines","filter","line","includes","map","trim","match","index","name","Boolean","selectAudioDeviceInteractively","logger","getLogger","info","devices","length","error","deviceStatuses","Promise","all","device","testAudioDevice","isWorking","forEach","i","status","workingDevices","d","resolve","process","stdin","setRawMode","resume","setEncoding","inputBuffer","keyHandler","key","keyCode","charCodeAt","selectedIndex","parseInt","selectedDevice","write","warn","pause","removeListener","slice","on","getAudioDeviceConfigPath","preferencesDirectory","path","join","ensurePreferencesDirectory","storage","createStorage","log","ensureDirectory","debug","message","saveAudioDeviceToHomeConfig","deviceIndex","deviceName","capabilities","configPath","audioConfig","audioDevice","audioDeviceName","sampleRate","channels","channelLayout","lastUpdated","Date","toISOString","yamlContent","yaml","dump","indent","lineWidth","noRefs","writeFile","loadAudioDeviceFromHomeConfig","configContent","readFile","load","audioDeviceConfigExists","listAudioDevices","execute","runConfig","isDryRun","dryRun","exit","getAudioDeviceInfo"],"mappings":"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"}
package/dist/constants.js CHANGED
@@ -1,96 +1,95 @@
1
- const VERSION = '0.0.14 (HEAD/38aa7b9 T:v0.0.14 2025-07-01 11:39:46 -0700) linux x64 v22.16.0';
1
+ import os from 'os';
2
+ import path from 'path';
3
+
4
+ const VERSION = '0.0.17 (HEAD/11fb779 T:v0.0.17 2025-07-02 16:08:40 -0700) linux x64 v22.16.0';
2
5
  const PROGRAM_NAME = 'kodrdriv';
3
- const DEFAULT_CHARACTER_ENCODING = 'utf-8';
4
6
  const DEFAULT_OVERRIDES = false;
5
7
  const DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS = 'YYYY-MM-DD-HHmmss';
6
8
  const DEFAULT_VERBOSE = false;
7
9
  const DEFAULT_DRY_RUN = false;
8
10
  const DEFAULT_DEBUG = false;
9
11
  const DEFAULT_MODEL = 'gpt-4o-mini';
12
+ const DEFAULT_OUTPUT_DIRECTORY = 'output/kodrdriv';
10
13
  const DEFAULT_CONTEXT_DIRECTORIES = [];
14
+ const DEFAULT_CONFIG_DIR = '.kodrdriv';
15
+ const DEFAULT_PREFERENCES_DIRECTORY = path.join(os.homedir(), '.kodrdriv');
16
+ const DEFAULT_FROM_COMMIT_ALIAS = 'origin/HEAD';
17
+ const DEFAULT_TO_COMMIT_ALIAS = 'HEAD';
18
+ const DEFAULT_ADD = false;
19
+ const DEFAULT_CACHED = false;
20
+ const DEFAULT_SENDIT_MODE = false;
21
+ const DEFAULT_MESSAGE_LIMIT = 50;
22
+ const DEFAULT_MERGE_METHOD = 'squash';
23
+ const DEFAULT_EXCLUDED_PATTERNS = [
24
+ 'node_modules',
25
+ 'pnpm-lock.yaml',
26
+ 'package-lock.json',
27
+ 'yarn.lock',
28
+ 'bun.lockb',
29
+ 'composer.lock',
30
+ 'Cargo.lock',
31
+ 'Gemfile.lock',
32
+ 'dist',
33
+ 'build',
34
+ 'out',
35
+ '.next',
36
+ '.nuxt',
37
+ 'coverage',
38
+ '.vscode',
39
+ '.idea',
40
+ '.DS_Store',
41
+ '.git',
42
+ '.gitignore',
43
+ 'logs',
44
+ 'tmp',
45
+ '.cache',
46
+ '*.log',
47
+ '.env',
48
+ '.env.*',
49
+ '*.pem',
50
+ '*.crt',
51
+ '*.key',
52
+ '*.sqlite',
53
+ '*.db',
54
+ '*.zip',
55
+ '*.tar',
56
+ '*.gz',
57
+ '*.exe',
58
+ '*.bin'
59
+ ];
11
60
  const COMMAND_COMMIT = 'commit';
12
61
  const COMMAND_AUDIO_COMMIT = 'audio-commit';
62
+ const COMMAND_SELECT_AUDIO = 'select-audio';
13
63
  const COMMAND_RELEASE = 'release';
64
+ const COMMAND_REVIEW = 'review';
65
+ const COMMAND_AUDIO_REVIEW = 'audio-review';
14
66
  const COMMAND_PUBLISH = 'publish';
15
67
  const COMMAND_LINK = 'link';
16
68
  const COMMAND_UNLINK = 'unlink';
17
- const COMMAND_AUDIO_REVIEW = 'audio-review';
18
69
  const COMMAND_CLEAN = 'clean';
19
70
  const COMMAND_CHECK_CONFIG = 'check-config';
20
71
  const COMMAND_INIT_CONFIG = 'init-config';
21
72
  const ALLOWED_COMMANDS = [
22
73
  COMMAND_COMMIT,
23
74
  COMMAND_AUDIO_COMMIT,
75
+ COMMAND_SELECT_AUDIO,
24
76
  COMMAND_RELEASE,
77
+ COMMAND_REVIEW,
78
+ COMMAND_AUDIO_REVIEW,
25
79
  COMMAND_PUBLISH,
26
80
  COMMAND_LINK,
27
81
  COMMAND_UNLINK,
28
- COMMAND_AUDIO_REVIEW,
29
82
  COMMAND_CLEAN
30
83
  ];
31
84
  const DEFAULT_COMMAND = COMMAND_COMMIT;
32
- const DEFAULT_CONFIG_DIR = `.${PROGRAM_NAME}`;
33
- const DEFAULT_PERSONAS_DIR = `/personas`;
34
- const DEFAULT_PERSONA_COMMITTER_FILE = `${DEFAULT_PERSONAS_DIR}/committer.md`;
35
- const DEFAULT_PERSONA_RELEASER_FILE = `${DEFAULT_PERSONAS_DIR}/releaser.md`;
36
- const DEFAULT_PERSONA_REVIEWER_FILE = `${DEFAULT_PERSONAS_DIR}/reviewer.md`;
37
- const DEFAULT_INSTRUCTIONS_DIR = `/instructions`;
85
+ const DEFAULT_INSTRUCTIONS_DIR = `instructions`;
86
+ const DEFAULT_PERSONA_DIR = `personas`;
38
87
  const DEFAULT_INSTRUCTIONS_COMMIT_FILE = `${DEFAULT_INSTRUCTIONS_DIR}/commit.md`;
39
88
  const DEFAULT_INSTRUCTIONS_RELEASE_FILE = `${DEFAULT_INSTRUCTIONS_DIR}/release.md`;
40
- const DEFAULT_INSTRUCTIONS_AUDIO_REVIEW_FILE = `${DEFAULT_INSTRUCTIONS_DIR}/audio-review.md`;
41
- const DEFAULT_CACHED = false;
42
- const DEFAULT_ADD = false;
43
- const DEFAULT_SENDIT_MODE = false;
44
- const DEFAULT_FROM_COMMIT_ALIAS = 'main';
45
- const DEFAULT_TO_COMMIT_ALIAS = 'HEAD';
46
- const DEFAULT_MESSAGE_LIMIT = 10;
47
- const DEFAULT_MERGE_METHOD = 'squash';
48
- // Output directory for generated files
49
- const DEFAULT_OUTPUT_DIRECTORY = 'output/kodrdriv';
50
- const DEFAULT_EXCLUDED_PATTERNS = [
51
- // Node modules & dependency files
52
- "node_modules",
53
- "pnpm-lock.yaml",
54
- "package-lock.json",
55
- "yarn.lock",
56
- "bun.lockb",
57
- "composer.lock",
58
- "Cargo.lock",
59
- "Gemfile.lock",
60
- // Build output
61
- "dist",
62
- "build",
63
- "out",
64
- ".next",
65
- ".nuxt",
66
- "coverage",
67
- // IDE & OS files
68
- ".vscode",
69
- ".idea",
70
- ".DS_Store",
71
- // Version control
72
- ".git",
73
- ".gitignore",
74
- // Logs, caches, and temp
75
- "logs",
76
- "tmp",
77
- ".cache",
78
- "*.log",
79
- // Sensitive data
80
- ".env",
81
- ".env.*",
82
- "*.pem",
83
- "*.crt",
84
- "*.key",
85
- // Binary and database files
86
- "*.sqlite",
87
- "*.db",
88
- "*.zip",
89
- "*.tar",
90
- "*.gz",
91
- "*.exe",
92
- "*.bin"
93
- ];
89
+ const DEFAULT_INSTRUCTIONS_AUDIO_REVIEW_FILE = `${DEFAULT_INSTRUCTIONS_DIR}/review.md`;
90
+ const DEFAULT_PERSONA_COMMITTER_FILE = `${DEFAULT_PERSONA_DIR}/committer.md`;
91
+ const DEFAULT_PERSONA_RELEASER_FILE = `${DEFAULT_PERSONA_DIR}/releaser.md`;
92
+ const DEFAULT_PERSONA_REVIEWER_FILE = `${DEFAULT_PERSONA_DIR}/reviewer.md`;
94
93
  // Define defaults in one place
95
94
  const KODRDRIV_DEFAULTS = {
96
95
  dryRun: DEFAULT_DRY_RUN,
@@ -98,11 +97,11 @@ const KODRDRIV_DEFAULTS = {
98
97
  debug: DEFAULT_DEBUG,
99
98
  overrides: DEFAULT_OVERRIDES,
100
99
  model: DEFAULT_MODEL,
101
- instructions: DEFAULT_INSTRUCTIONS_DIR,
102
100
  contextDirectories: DEFAULT_CONTEXT_DIRECTORIES,
103
101
  commandName: DEFAULT_COMMAND,
104
102
  configDirectory: DEFAULT_CONFIG_DIR,
105
103
  outputDirectory: DEFAULT_OUTPUT_DIRECTORY,
104
+ preferencesDirectory: DEFAULT_PREFERENCES_DIRECTORY,
106
105
  commit: {
107
106
  add: DEFAULT_ADD,
108
107
  cached: DEFAULT_CACHED,
@@ -114,7 +113,11 @@ const KODRDRIV_DEFAULTS = {
114
113
  to: DEFAULT_TO_COMMIT_ALIAS,
115
114
  messageLimit: DEFAULT_MESSAGE_LIMIT
116
115
  },
117
- audioReview: {
116
+ audioCommit: {
117
+ maxRecordingTime: 300,
118
+ audioDevice: undefined
119
+ },
120
+ review: {
118
121
  includeCommitHistory: true,
119
122
  includeRecentDiffs: true,
120
123
  includeReleaseNotes: false,
@@ -125,12 +128,27 @@ const KODRDRIV_DEFAULTS = {
125
128
  githubIssuesLimit: 20,
126
129
  sendit: DEFAULT_SENDIT_MODE
127
130
  },
131
+ audioReview: {
132
+ includeCommitHistory: true,
133
+ includeRecentDiffs: true,
134
+ includeReleaseNotes: false,
135
+ includeGithubIssues: true,
136
+ commitHistoryLimit: 10,
137
+ diffHistoryLimit: 5,
138
+ releaseNotesLimit: 3,
139
+ githubIssuesLimit: 20,
140
+ sendit: DEFAULT_SENDIT_MODE,
141
+ maxRecordingTime: 300,
142
+ audioDevice: undefined
143
+ },
128
144
  publish: {
129
145
  mergeMethod: DEFAULT_MERGE_METHOD,
130
146
  requiredEnvVars: [
131
147
  'GITHUB_TOKEN',
132
148
  'OPENAI_API_KEY'
133
- ]
149
+ ],
150
+ linkWorkspacePackages: true,
151
+ unlinkWorkspacePackages: true
134
152
  },
135
153
  link: {
136
154
  scopeRoots: {},
@@ -140,5 +158,5 @@ const KODRDRIV_DEFAULTS = {
140
158
  excludedPatterns: DEFAULT_EXCLUDED_PATTERNS
141
159
  };
142
160
 
143
- export { ALLOWED_COMMANDS, COMMAND_AUDIO_COMMIT, COMMAND_AUDIO_REVIEW, COMMAND_CHECK_CONFIG, COMMAND_CLEAN, COMMAND_COMMIT, COMMAND_INIT_CONFIG, COMMAND_LINK, COMMAND_PUBLISH, COMMAND_RELEASE, COMMAND_UNLINK, DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS, DEFAULT_ADD, DEFAULT_CACHED, DEFAULT_CHARACTER_ENCODING, DEFAULT_COMMAND, DEFAULT_CONFIG_DIR, DEFAULT_CONTEXT_DIRECTORIES, DEFAULT_DEBUG, DEFAULT_DRY_RUN, DEFAULT_EXCLUDED_PATTERNS, DEFAULT_FROM_COMMIT_ALIAS, DEFAULT_INSTRUCTIONS_AUDIO_REVIEW_FILE, DEFAULT_INSTRUCTIONS_COMMIT_FILE, DEFAULT_INSTRUCTIONS_DIR, DEFAULT_INSTRUCTIONS_RELEASE_FILE, DEFAULT_MERGE_METHOD, DEFAULT_MESSAGE_LIMIT, DEFAULT_MODEL, DEFAULT_OUTPUT_DIRECTORY, DEFAULT_OVERRIDES, DEFAULT_PERSONAS_DIR, DEFAULT_PERSONA_COMMITTER_FILE, DEFAULT_PERSONA_RELEASER_FILE, DEFAULT_PERSONA_REVIEWER_FILE, DEFAULT_SENDIT_MODE, DEFAULT_TO_COMMIT_ALIAS, DEFAULT_VERBOSE, KODRDRIV_DEFAULTS, PROGRAM_NAME, VERSION };
161
+ export { ALLOWED_COMMANDS, COMMAND_AUDIO_COMMIT, COMMAND_AUDIO_REVIEW, COMMAND_CHECK_CONFIG, COMMAND_CLEAN, COMMAND_COMMIT, COMMAND_INIT_CONFIG, COMMAND_LINK, COMMAND_PUBLISH, COMMAND_RELEASE, COMMAND_REVIEW, COMMAND_SELECT_AUDIO, COMMAND_UNLINK, DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS, DEFAULT_ADD, DEFAULT_CACHED, DEFAULT_COMMAND, DEFAULT_CONFIG_DIR, DEFAULT_CONTEXT_DIRECTORIES, DEFAULT_DEBUG, DEFAULT_DRY_RUN, DEFAULT_EXCLUDED_PATTERNS, DEFAULT_FROM_COMMIT_ALIAS, DEFAULT_INSTRUCTIONS_AUDIO_REVIEW_FILE, DEFAULT_INSTRUCTIONS_COMMIT_FILE, DEFAULT_INSTRUCTIONS_DIR, DEFAULT_INSTRUCTIONS_RELEASE_FILE, DEFAULT_MERGE_METHOD, DEFAULT_MESSAGE_LIMIT, DEFAULT_MODEL, DEFAULT_OUTPUT_DIRECTORY, DEFAULT_OVERRIDES, DEFAULT_PERSONA_COMMITTER_FILE, DEFAULT_PERSONA_DIR, DEFAULT_PERSONA_RELEASER_FILE, DEFAULT_PERSONA_REVIEWER_FILE, DEFAULT_PREFERENCES_DIRECTORY, DEFAULT_SENDIT_MODE, DEFAULT_TO_COMMIT_ALIAS, DEFAULT_VERBOSE, KODRDRIV_DEFAULTS, PROGRAM_NAME, VERSION };
144
162
  //# sourceMappingURL=constants.js.map