@eldrforge/kodrdriv 0.0.33 → 0.0.37

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 (69) hide show
  1. package/README.md +46 -69
  2. package/dist/application.js +146 -0
  3. package/dist/application.js.map +1 -0
  4. package/dist/arguments.js +22 -21
  5. package/dist/arguments.js.map +1 -1
  6. package/dist/commands/audio-commit.js +43 -21
  7. package/dist/commands/audio-commit.js.map +1 -1
  8. package/dist/commands/audio-review.js +46 -38
  9. package/dist/commands/audio-review.js.map +1 -1
  10. package/dist/commands/clean.js +28 -12
  11. package/dist/commands/clean.js.map +1 -1
  12. package/dist/commands/commit.js +132 -39
  13. package/dist/commands/commit.js.map +1 -1
  14. package/dist/commands/link.js +177 -159
  15. package/dist/commands/link.js.map +1 -1
  16. package/dist/commands/publish-tree.js +19 -6
  17. package/dist/commands/publish-tree.js.map +1 -1
  18. package/dist/commands/publish.js +152 -82
  19. package/dist/commands/publish.js.map +1 -1
  20. package/dist/commands/release.js +21 -16
  21. package/dist/commands/release.js.map +1 -1
  22. package/dist/commands/review.js +286 -60
  23. package/dist/commands/review.js.map +1 -1
  24. package/dist/commands/select-audio.js +25 -8
  25. package/dist/commands/select-audio.js.map +1 -1
  26. package/dist/commands/unlink.js +349 -159
  27. package/dist/commands/unlink.js.map +1 -1
  28. package/dist/constants.js +14 -5
  29. package/dist/constants.js.map +1 -1
  30. package/dist/content/diff.js +7 -5
  31. package/dist/content/diff.js.map +1 -1
  32. package/dist/content/log.js +4 -1
  33. package/dist/content/log.js.map +1 -1
  34. package/dist/error/CancellationError.js +9 -0
  35. package/dist/error/CancellationError.js.map +1 -0
  36. package/dist/error/CommandErrors.js +120 -0
  37. package/dist/error/CommandErrors.js.map +1 -0
  38. package/dist/logging.js +55 -12
  39. package/dist/logging.js.map +1 -1
  40. package/dist/main.js +6 -131
  41. package/dist/main.js.map +1 -1
  42. package/dist/prompt/commit.js +4 -0
  43. package/dist/prompt/commit.js.map +1 -1
  44. package/dist/prompt/instructions/commit.md +33 -24
  45. package/dist/prompt/instructions/release.md +39 -5
  46. package/dist/prompt/release.js +41 -1
  47. package/dist/prompt/release.js.map +1 -1
  48. package/dist/types.js +9 -2
  49. package/dist/types.js.map +1 -1
  50. package/dist/util/github.js +71 -4
  51. package/dist/util/github.js.map +1 -1
  52. package/dist/util/npmOptimizations.js +174 -0
  53. package/dist/util/npmOptimizations.js.map +1 -0
  54. package/dist/util/openai.js +4 -2
  55. package/dist/util/openai.js.map +1 -1
  56. package/dist/util/performance.js +202 -0
  57. package/dist/util/performance.js.map +1 -0
  58. package/dist/util/safety.js +166 -0
  59. package/dist/util/safety.js.map +1 -0
  60. package/dist/util/storage.js +10 -0
  61. package/dist/util/storage.js.map +1 -1
  62. package/dist/util/validation.js +81 -0
  63. package/dist/util/validation.js.map +1 -0
  64. package/package.json +19 -18
  65. package/packages/components/package.json +4 -0
  66. package/packages/tools/package.json +4 -0
  67. package/packages/utils/package.json +4 -0
  68. package/scripts/pre-commit-hook.sh +52 -0
  69. package/test-project/package.json +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sources":["../../src/util/validation.ts"],"sourcesContent":["/**\n * Runtime validation utilities for safe type handling\n */\n\nexport interface ReleaseSummary {\n title: string;\n body: string;\n}\n\nexport interface LinkBackup {\n [key: string]: {\n originalVersion: string;\n dependencyType: string;\n relativePath: string;\n };\n}\n\nexport interface TranscriptionResult {\n text: string;\n [key: string]: any;\n}\n\n/**\n * Validates and safely casts data to ReleaseSummary type\n */\nexport const validateReleaseSummary = (data: any): ReleaseSummary => {\n if (!data || typeof data !== 'object') {\n throw new Error('Invalid release summary: not an object');\n }\n if (typeof data.title !== 'string') {\n throw new Error('Invalid release summary: title must be a string');\n }\n if (typeof data.body !== 'string') {\n throw new Error('Invalid release summary: body must be a string');\n }\n return data as ReleaseSummary;\n};\n\n/**\n * Validates and safely casts data to LinkBackup type\n */\nexport const validateLinkBackup = (data: any): LinkBackup => {\n if (!data || typeof data !== 'object') {\n throw new Error('Invalid link backup: not an object');\n }\n\n // Validate each backup entry\n for (const [key, value] of Object.entries(data)) {\n if (!value || typeof value !== 'object') {\n throw new Error(`Invalid link backup entry for ${key}: not an object`);\n }\n const entry = value as any;\n if (typeof entry.originalVersion !== 'string') {\n throw new Error(`Invalid link backup entry for ${key}: originalVersion must be a string`);\n }\n if (typeof entry.dependencyType !== 'string') {\n throw new Error(`Invalid link backup entry for ${key}: dependencyType must be a string`);\n }\n if (typeof entry.relativePath !== 'string') {\n throw new Error(`Invalid link backup entry for ${key}: relativePath must be a string`);\n }\n }\n\n return data as LinkBackup;\n};\n\n/**\n * Validates transcription result has required text property\n */\nexport const validateTranscriptionResult = (data: any): TranscriptionResult => {\n if (!data || typeof data !== 'object') {\n throw new Error('Invalid transcription result: not an object');\n }\n if (typeof data.text !== 'string') {\n throw new Error('Invalid transcription result: text property must be a string');\n }\n return data as TranscriptionResult;\n};\n\n/**\n * Safely parses JSON with error handling\n */\nexport const safeJsonParse = <T = any>(jsonString: string, context?: string): T => {\n try {\n const parsed = JSON.parse(jsonString);\n if (parsed === null || parsed === undefined) {\n throw new Error('Parsed JSON is null or undefined');\n }\n return parsed;\n } catch (error) {\n const contextStr = context ? ` (${context})` : '';\n throw new Error(`Failed to parse JSON${contextStr}: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n};\n\n/**\n * Validates that a value is a non-empty string\n */\nexport const validateString = (value: any, fieldName: string): string => {\n if (typeof value !== 'string') {\n throw new Error(`${fieldName} must be a string, got ${typeof value}`);\n }\n if (value.trim() === '') {\n throw new Error(`${fieldName} cannot be empty`);\n }\n return value;\n};\n\n/**\n * Validates that a value exists and has a specific property\n */\nexport const validateHasProperty = (obj: any, property: string, context?: string): void => {\n if (!obj || typeof obj !== 'object') {\n const contextStr = context ? ` in ${context}` : '';\n throw new Error(`Object is null or not an object${contextStr}`);\n }\n if (!(property in obj)) {\n const contextStr = context ? ` in ${context}` : '';\n throw new Error(`Missing required property '${property}'${contextStr}`);\n }\n};\n\n/**\n * Validates package.json structure has basic required fields\n */\nexport const validatePackageJson = (data: any, context?: string, requireName: boolean = true): any => {\n if (!data || typeof data !== 'object') {\n const contextStr = context ? ` (${context})` : '';\n throw new Error(`Invalid package.json${contextStr}: not an object`);\n }\n if (requireName && typeof data.name !== 'string') {\n const contextStr = context ? ` (${context})` : '';\n throw new Error(`Invalid package.json${contextStr}: name must be a string`);\n }\n return data;\n};\n"],"names":["validateReleaseSummary","data","Error","title","body","validateLinkBackup","key","value","Object","entries","entry","originalVersion","dependencyType","relativePath","safeJsonParse","jsonString","context","parsed","JSON","parse","undefined","error","contextStr","message","validateString","fieldName","trim","validatePackageJson","requireName","name"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eldrforge/kodrdriv",
3
- "version": "0.0.33",
3
+ "version": "0.0.37",
4
4
  "description": "Create Intelligent Release Notes or Change Logs from Git",
5
5
  "main": "dist/main.js",
6
6
  "type": "module",
@@ -11,6 +11,22 @@
11
11
  "type": "git",
12
12
  "url": "git+https://github.com/calenvarek/kodrdriv.git"
13
13
  },
14
+ "scripts": {
15
+ "build": "npm run lint && tsc --noEmit && vite build && copyfiles -u 1 \"src/**/*.md\" dist",
16
+ "start": "dist/main.js",
17
+ "dev": "vite",
18
+ "watch": "vite build --watch",
19
+ "test": "vitest run --coverage",
20
+ "lint": "eslint . --ext .ts",
21
+ "lint:fix": "eslint . --ext .ts --fix",
22
+ "clean": "rm -rf dist",
23
+ "prepublishOnly": "npm run clean && npm run lint && npm run build && npm run test",
24
+ "docs:dev": "cd docs && cp ../README.md public/ && npm install && npm run dev",
25
+ "docs:build": "cd docs && cp ../README.md public/ && npm install && npm run build",
26
+ "docs:preview": "cd docs && npm run preview",
27
+ "docs:test": "cd docs && npm run test",
28
+ "docs:coverage": "cd docs && npm run coverage"
29
+ },
14
30
  "keywords": [
15
31
  "git",
16
32
  "genai",
@@ -34,7 +50,7 @@
34
50
  "openai": "^5.10.2",
35
51
  "shell-escape": "^0.2.0",
36
52
  "winston": "^3.17.0",
37
- "zod": "^4.0.10"
53
+ "zod": "^3.23.8"
38
54
  },
39
55
  "devDependencies": {
40
56
  "@eslint/eslintrc": "^3.3.1",
@@ -60,20 +76,5 @@
60
76
  "vite": "^7.0.6",
61
77
  "vite-plugin-node": "^7.0.0",
62
78
  "vitest": "^3.2.4"
63
- },
64
- "scripts": {
65
- "build": "pnpm run lint && tsc --noEmit && vite build && copyfiles -u 1 \"src/**/*.md\" dist",
66
- "start": "dist/main.js",
67
- "dev": "vite",
68
- "watch": "vite build --watch",
69
- "test": "vitest run --coverage",
70
- "lint": "eslint . --ext .ts",
71
- "lint:fix": "eslint . --ext .ts --fix",
72
- "clean": "rm -rf dist",
73
- "docs:dev": "cd docs && cp ../README.md public/ && pnpm install && pnpm run dev",
74
- "docs:build": "cd docs && cp ../README.md public/ && pnpm install && pnpm run build",
75
- "docs:preview": "cd docs && pnpm run preview",
76
- "docs:test": "cd docs && pnpm run test",
77
- "docs:coverage": "cd docs && pnpm run coverage"
78
79
  }
79
- }
80
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "name": "@myorg/components",
3
+ "version": "3.0.1"
4
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "name": "@myorg/tools",
3
+ "version": "2.1.0"
4
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "name": "@myorg/utils",
3
+ "version": "1.2.3"
4
+ }
@@ -0,0 +1,52 @@
1
+ #!/bin/bash
2
+
3
+ # KodrDriv Pre-commit Hook
4
+ # Prevents committing package.json files that contain file: dependencies
5
+ #
6
+ # To install this hook:
7
+ # 1. Copy this file to .git/hooks/pre-commit
8
+ # 2. Make it executable: chmod +x .git/hooks/pre-commit
9
+ #
10
+ # Or run: npm run install-hooks (if you add this script to package.json)
11
+
12
+ echo "🔍 Checking for file: dependencies in staged package.json files..."
13
+
14
+ # Find all staged package.json files
15
+ staged_package_files=$(git diff --cached --name-only | grep "package\.json$")
16
+
17
+ if [ -z "$staged_package_files" ]; then
18
+ echo "✅ No package.json files staged for commit"
19
+ exit 0
20
+ fi
21
+
22
+ found_file_deps=false
23
+
24
+ # Check each staged package.json file for file: dependencies
25
+ for file in $staged_package_files; do
26
+ if [ -f "$file" ]; then
27
+ # Look for "file:" dependencies in the staged version
28
+ if git show :$file | grep -q '"file:'; then
29
+ echo "❌ Found file: dependencies in $file:"
30
+ git show :$file | grep '"file:' | sed 's/^/ /'
31
+ found_file_deps=true
32
+ fi
33
+ fi
34
+ done
35
+
36
+ if $found_file_deps; then
37
+ echo ""
38
+ echo "🚫 COMMIT BLOCKED: Cannot commit package.json files with file: dependencies"
39
+ echo ""
40
+ echo "💡 To fix this:"
41
+ echo " 1. Run 'kodrdriv unlink' to restore registry versions"
42
+ echo " 2. Commit your changes"
43
+ echo " 3. Run 'kodrdriv link' again for local development"
44
+ echo ""
45
+ echo " Or to commit anyway (not recommended):"
46
+ echo " git commit --no-verify"
47
+ echo ""
48
+ exit 1
49
+ fi
50
+
51
+ echo "✅ No file: dependencies found in staged package.json files"
52
+ exit 0
@@ -0,0 +1 @@
1
+ {"dependencies": {"@myorg/utils": "file:../packages/utils"}}