@eldrforge/kodrdriv 1.2.132 → 1.2.133

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/dist/constants.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import os__default from 'os';
2
2
  import path__default from 'path';
3
3
 
4
- const VERSION = '1.2.132 (HEAD/665eee8 T:v1.2.132 2025-12-27 16:03:32 -0800) linux x64 v22.21.1';
4
+ const VERSION = '1.2.133 (HEAD/1c05f66 T:v1.2.133 2025-12-31 11:42:01 -0800) linux x64 v22.21.1';
5
5
  const PROGRAM_NAME = 'kodrdriv';
6
6
  const DEFAULT_OVERRIDES = false;
7
7
  const DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS = 'YYYY-MM-DD-HHmmss.SSS';
@@ -124,6 +124,7 @@ const KODRDRIV_DEFAULTS = {
124
124
  messageLimit: DEFAULT_MESSAGE_LIMIT,
125
125
  skipFileCheck: false,
126
126
  maxDiffBytes: DEFAULT_MAX_DIFF_BYTES,
127
+ contextFiles: undefined,
127
128
  openaiReasoning: DEFAULT_OPENAI_REASONING,
128
129
  openaiMaxOutputTokens: DEFAULT_OPENAI_MAX_OUTPUT_TOKENS
129
130
  },
@@ -133,6 +134,7 @@ const KODRDRIV_DEFAULTS = {
133
134
  messageLimit: DEFAULT_MESSAGE_LIMIT,
134
135
  interactive: DEFAULT_INTERACTIVE_MODE,
135
136
  maxDiffBytes: DEFAULT_MAX_DIFF_BYTES,
137
+ contextFiles: undefined,
136
138
  noMilestones: false,
137
139
  openaiReasoning: DEFAULT_OPENAI_REASONING,
138
140
  openaiMaxOutputTokens: DEFAULT_OPENAI_MAX_OUTPUT_TOKENS
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sources":["../src/constants.ts"],"sourcesContent":["import { MergeMethod } from './types';\nimport os from 'os';\nimport path from 'path';\n\nexport const VERSION = '__VERSION__ (__GIT_BRANCH__/__GIT_COMMIT__ __GIT_TAGS__ __GIT_COMMIT_DATE__) __SYSTEM_INFO__';\nexport const PROGRAM_NAME = 'kodrdriv';\nexport const DEFAULT_CHARACTER_ENCODING = 'utf-8';\nexport const DEFAULT_BINARY_TO_TEXT_ENCODING = 'base64';\nexport const DEFAULT_DIFF = true;\nexport const DEFAULT_LOG = false;\nexport const DEFAULT_OVERRIDES = false;\nexport const DATE_FORMAT_MONTH_DAY = 'MM-DD';\nexport const DATE_FORMAT_YEAR = 'YYYY';\nexport const DATE_FORMAT_YEAR_MONTH = 'YYYY-MM';\nexport const DATE_FORMAT_YEAR_MONTH_DAY = 'YYYY-MM-DD';\nexport const DATE_FORMAT_YEAR_MONTH_DAY_SLASH = 'YYYY/MM/DD';\nexport const DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES = 'YYYY-MM-DD-HHmm';\nexport const DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS = 'YYYY-MM-DD-HHmmss';\nexport const DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS = 'YYYY-MM-DD-HHmmss.SSS';\nexport const DATE_FORMAT_SHORT_TIMESTAMP = 'YYMMdd-HHmm';\nexport const DATE_FORMAT_MONTH = 'MM';\nexport const DATE_FORMAT_DAY = 'DD';\nexport const DATE_FORMAT_HOURS = 'HHmm';\nexport const DATE_FORMAT_MINUTES = 'mm';\nexport const DATE_FORMAT_SECONDS = 'ss';\nexport const DATE_FORMAT_MILLISECONDS = 'SSS';\nexport const DEFAULT_VERBOSE = false;\nexport const DEFAULT_DRY_RUN = false;\nexport const DEFAULT_DEBUG = false;\nexport const DEFAULT_MODEL = 'gpt-4o-mini';\nexport const DEFAULT_MODEL_STRONG = 'gpt-4o';\nexport const DEFAULT_OPENAI_REASONING = 'low';\nexport const DEFAULT_OPENAI_MAX_OUTPUT_TOKENS = 10000;\nexport const DEFAULT_OUTPUT_DIRECTORY = 'output/kodrdriv';\n\n// Buffer size for git commands that may produce large output (like git log)\nexport const DEFAULT_GIT_COMMAND_MAX_BUFFER = 50 * 1024 * 1024; // 50MB\n\nexport const DEFAULT_CONTEXT_DIRECTORIES: string[] = [];\n\nexport const DEFAULT_CONFIG_DIR = '.kodrdriv';\nexport const DEFAULT_PREFERENCES_DIRECTORY = path.join(os.homedir(), '.kodrdriv');\n\nexport const DEFAULT_FROM_COMMIT_ALIAS = 'main';\nexport const DEFAULT_TO_COMMIT_ALIAS = 'HEAD';\n\nexport const DEFAULT_ADD = false;\nexport const DEFAULT_CACHED = false;\nexport const DEFAULT_SENDIT_MODE = false;\nexport const DEFAULT_INTERACTIVE_MODE = false;\nexport const DEFAULT_AMEND_MODE = false;\n// CRITICAL: Keep this low (3-5) to prevent log context contamination.\n// The LLM tends to pattern-match against recent commits instead of describing\n// the actual diff when it sees too much commit history. Set to 0 to disable.\nexport const DEFAULT_MESSAGE_LIMIT = 3;\nexport const DEFAULT_MAX_DIFF_BYTES = 20480; // 20KB limit per file\n\nexport const DEFAULT_MERGE_METHOD: MergeMethod = 'squash';\n\nexport const DEFAULT_EXCLUDED_PATTERNS = [\n 'node_modules', 'package-lock.json', 'yarn.lock', 'bun.lockb',\n 'composer.lock', 'Cargo.lock', 'Gemfile.lock',\n 'dist', 'build', 'out', '.next', '.nuxt', 'coverage',\n '.vscode', '.idea', '.DS_Store', '.git', '.gitignore',\n 'logs', 'tmp', '.cache', '*.log', '.env', '.env.*',\n '*.pem', '*.crt', '*.key', '*.sqlite', '*.db',\n '*.zip', '*.tar', '*.gz', '*.exe', '*.bin'\n];\n\nexport const COMMAND_COMMIT = 'commit';\nexport const COMMAND_AUDIO_COMMIT = 'audio-commit';\nexport const COMMAND_SELECT_AUDIO = 'select-audio';\nexport const COMMAND_RELEASE = 'release';\nexport const COMMAND_REVIEW = 'review';\nexport const COMMAND_AUDIO_REVIEW = 'audio-review';\nexport const COMMAND_PUBLISH = 'publish';\nexport const COMMAND_TREE = 'tree';\nexport const COMMAND_LINK = 'link';\nexport const COMMAND_UNLINK = 'unlink';\nexport const COMMAND_CLEAN = 'clean';\nexport const COMMAND_PRECOMMIT = 'precommit';\nexport const COMMAND_DEVELOPMENT = 'development';\nexport const COMMAND_VERSIONS = 'versions';\nexport const COMMAND_UPDATES = 'updates';\nexport const COMMAND_CHECK_CONFIG = 'check-config';\nexport const COMMAND_INIT_CONFIG = 'init-config';\n\nexport const ALLOWED_COMMANDS = [\n COMMAND_COMMIT,\n COMMAND_AUDIO_COMMIT,\n COMMAND_SELECT_AUDIO,\n COMMAND_RELEASE,\n COMMAND_REVIEW,\n COMMAND_AUDIO_REVIEW,\n COMMAND_PUBLISH,\n COMMAND_TREE,\n COMMAND_LINK,\n COMMAND_UNLINK,\n COMMAND_CLEAN,\n COMMAND_PRECOMMIT,\n COMMAND_DEVELOPMENT,\n COMMAND_VERSIONS,\n COMMAND_UPDATES\n];\n\nexport const DEFAULT_COMMAND = COMMAND_COMMIT;\n\nexport const DEFAULT_INSTRUCTIONS_DIR = `instructions`;\n\nexport const DEFAULT_PERSONA_DIR = `personas`;\n\nexport const DEFAULT_INSTRUCTIONS_COMMIT_FILE = `${DEFAULT_INSTRUCTIONS_DIR}/commit.md`;\nexport const DEFAULT_INSTRUCTIONS_RELEASE_FILE = `${DEFAULT_INSTRUCTIONS_DIR}/release.md`;\nexport const DEFAULT_INSTRUCTIONS_REVIEW_FILE = `${DEFAULT_INSTRUCTIONS_DIR}/review.md`;\n\nexport const DEFAULT_PERSONA_RELEASER_FILE = `${DEFAULT_PERSONA_DIR}/releaser.md`;\nexport const DEFAULT_PERSONA_YOU_FILE = `${DEFAULT_PERSONA_DIR}/you.md`;\n\n// Default instructions for each persona\nexport const DEFAULT_INSTRUCTIONS_MAP = {\n [COMMAND_COMMIT]: DEFAULT_INSTRUCTIONS_COMMIT_FILE,\n [COMMAND_AUDIO_COMMIT]: DEFAULT_INSTRUCTIONS_COMMIT_FILE, // Reuse commit instructions\n [COMMAND_RELEASE]: DEFAULT_INSTRUCTIONS_RELEASE_FILE,\n [COMMAND_REVIEW]: DEFAULT_INSTRUCTIONS_REVIEW_FILE, // Reuse audio-review instructions for now\n [COMMAND_AUDIO_REVIEW]: DEFAULT_INSTRUCTIONS_REVIEW_FILE,\n};\n\n// Default personas for each command\nexport const DEFAULT_PERSONA_MAP = {\n [COMMAND_COMMIT]: DEFAULT_PERSONA_YOU_FILE,\n [COMMAND_AUDIO_COMMIT]: DEFAULT_PERSONA_YOU_FILE, // Use You persona\n [COMMAND_RELEASE]: DEFAULT_PERSONA_RELEASER_FILE,\n [COMMAND_REVIEW]: DEFAULT_PERSONA_YOU_FILE, // Use You persona\n [COMMAND_AUDIO_REVIEW]: DEFAULT_PERSONA_YOU_FILE,\n};\n\n// Used by child process to create paths\nexport const DEFAULT_PATH_SEPARATOR = '/';\n\n// Used by util/general for file filtering\nexport const DEFAULT_IGNORE_PATTERNS = [\n 'node_modules/**',\n '**/*.log',\n '.git/**',\n 'dist/**',\n 'build/**',\n 'coverage/**',\n 'output/**',\n '.DS_Store',\n '*.tmp',\n '*.cache',\n '**/.kodrdriv-*.json', // Internal kodrdriv cache and state files\n];\n\n// Used by util/storage for directory names\nexport const DEFAULT_DIRECTORY_PREFIX = '.kodrdriv';\n\n// Used by other commands but not exposed in CLI\nexport const INTERNAL_DEFAULT_OUTPUT_FILE = 'output.txt';\n\nexport const INTERNAL_DATETIME_FORMAT = 'YYYY-MM-DD_HH-mm-ss';\n\n// Define defaults in one place\nexport const KODRDRIV_DEFAULTS = {\n dryRun: DEFAULT_DRY_RUN,\n verbose: DEFAULT_VERBOSE,\n debug: DEFAULT_DEBUG,\n overrides: DEFAULT_OVERRIDES,\n model: DEFAULT_MODEL,\n openaiReasoning: DEFAULT_OPENAI_REASONING as 'low' | 'medium' | 'high',\n openaiMaxOutputTokens: DEFAULT_OPENAI_MAX_OUTPUT_TOKENS,\n contextDirectories: DEFAULT_CONTEXT_DIRECTORIES,\n commandName: DEFAULT_COMMAND,\n configDirectory: DEFAULT_CONFIG_DIR,\n outputDirectory: DEFAULT_OUTPUT_DIRECTORY,\n preferencesDirectory: DEFAULT_PREFERENCES_DIRECTORY,\n commit: {\n add: DEFAULT_ADD,\n cached: DEFAULT_CACHED,\n sendit: DEFAULT_SENDIT_MODE,\n interactive: DEFAULT_INTERACTIVE_MODE,\n amend: DEFAULT_AMEND_MODE,\n messageLimit: DEFAULT_MESSAGE_LIMIT,\n skipFileCheck: false,\n maxDiffBytes: DEFAULT_MAX_DIFF_BYTES,\n openaiReasoning: DEFAULT_OPENAI_REASONING as 'low' | 'medium' | 'high',\n openaiMaxOutputTokens: DEFAULT_OPENAI_MAX_OUTPUT_TOKENS,\n },\n release: {\n from: DEFAULT_FROM_COMMIT_ALIAS,\n to: DEFAULT_TO_COMMIT_ALIAS,\n messageLimit: DEFAULT_MESSAGE_LIMIT,\n interactive: DEFAULT_INTERACTIVE_MODE,\n maxDiffBytes: DEFAULT_MAX_DIFF_BYTES,\n noMilestones: false,\n openaiReasoning: DEFAULT_OPENAI_REASONING as 'low' | 'medium' | 'high',\n openaiMaxOutputTokens: DEFAULT_OPENAI_MAX_OUTPUT_TOKENS,\n },\n audioCommit: {\n maxRecordingTime: 300, // 5 minutes default\n audioDevice: undefined, // Auto-detect by default\n openaiReasoning: DEFAULT_OPENAI_REASONING as 'low' | 'medium' | 'high',\n openaiMaxOutputTokens: DEFAULT_OPENAI_MAX_OUTPUT_TOKENS,\n },\n review: {\n includeCommitHistory: true,\n includeRecentDiffs: true,\n includeReleaseNotes: false,\n includeGithubIssues: true,\n commitHistoryLimit: 10,\n diffHistoryLimit: 5,\n releaseNotesLimit: 3,\n githubIssuesLimit: 20,\n sendit: DEFAULT_SENDIT_MODE,\n openaiReasoning: DEFAULT_OPENAI_REASONING as 'low' | 'medium' | 'high',\n openaiMaxOutputTokens: DEFAULT_OPENAI_MAX_OUTPUT_TOKENS,\n },\n audioReview: {\n includeCommitHistory: true,\n includeRecentDiffs: true,\n includeReleaseNotes: false,\n includeGithubIssues: true,\n commitHistoryLimit: 10,\n diffHistoryLimit: 5,\n releaseNotesLimit: 3,\n githubIssuesLimit: 20,\n sendit: DEFAULT_SENDIT_MODE,\n maxRecordingTime: 300, // 5 minutes default\n audioDevice: undefined, // Auto-detect by default\n directory: undefined, // No default directory\n openaiReasoning: DEFAULT_OPENAI_REASONING as 'low' | 'medium' | 'high',\n openaiMaxOutputTokens: DEFAULT_OPENAI_MAX_OUTPUT_TOKENS,\n },\n publish: {\n mergeMethod: DEFAULT_MERGE_METHOD,\n from: DEFAULT_FROM_COMMIT_ALIAS,\n targetVersion: 'patch',\n interactive: DEFAULT_INTERACTIVE_MODE,\n requiredEnvVars: ['GITHUB_TOKEN', 'OPENAI_API_KEY'],\n linkWorkspacePackages: true,\n unlinkWorkspacePackages: true,\n sendit: DEFAULT_SENDIT_MODE,\n targetBranch: 'main',\n noMilestones: false,\n checksTimeout: 3600000, // 1 hour default for PR checks\n releaseWorkflowsTimeout: 1800000, // 30 minutes default for release workflows\n },\n link: {\n scopeRoots: {},\n dryRun: false,\n packageArgument: undefined,\n externals: [],\n },\n unlink: {\n scopeRoots: {},\n workspaceFile: undefined,\n dryRun: false,\n cleanNodeModules: false,\n packageArgument: undefined,\n externals: [],\n },\n tree: {\n directories: undefined,\n exclude: undefined,\n startFrom: undefined,\n stopAt: undefined,\n cmd: undefined,\n\n builtInCommand: undefined,\n continue: false,\n packageArgument: undefined,\n cleanNodeModules: false,\n externals: [],\n },\n development: {\n targetVersion: 'patch',\n noMilestones: false,\n },\n versions: {\n subcommand: undefined,\n directories: undefined,\n },\n updates: {\n scope: undefined,\n directories: undefined,\n },\n excludedPatterns: DEFAULT_EXCLUDED_PATTERNS,\n branches: {\n working: {\n targetBranch: 'main',\n developmentBranch: true,\n version: {\n type: 'prerelease' as const,\n increment: true,\n incrementLevel: 'patch' as const,\n tag: 'dev'\n }\n },\n main: {\n version: {\n type: 'release' as const\n }\n }\n }\n};\n"],"names":["VERSION","PROGRAM_NAME","DEFAULT_OVERRIDES","DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS","DEFAULT_VERBOSE","DEFAULT_DRY_RUN","DEFAULT_DEBUG","DEFAULT_MODEL","DEFAULT_OPENAI_REASONING","DEFAULT_OPENAI_MAX_OUTPUT_TOKENS","DEFAULT_OUTPUT_DIRECTORY","DEFAULT_GIT_COMMAND_MAX_BUFFER","DEFAULT_CONTEXT_DIRECTORIES","DEFAULT_CONFIG_DIR","DEFAULT_PREFERENCES_DIRECTORY","path","join","os","homedir","DEFAULT_FROM_COMMIT_ALIAS","DEFAULT_TO_COMMIT_ALIAS","DEFAULT_ADD","DEFAULT_CACHED","DEFAULT_SENDIT_MODE","DEFAULT_INTERACTIVE_MODE","DEFAULT_AMEND_MODE","DEFAULT_MESSAGE_LIMIT","DEFAULT_MAX_DIFF_BYTES","DEFAULT_MERGE_METHOD","DEFAULT_EXCLUDED_PATTERNS","COMMAND_COMMIT","COMMAND_AUDIO_COMMIT","COMMAND_SELECT_AUDIO","COMMAND_RELEASE","COMMAND_REVIEW","COMMAND_AUDIO_REVIEW","COMMAND_PUBLISH","COMMAND_TREE","COMMAND_LINK","COMMAND_UNLINK","COMMAND_CLEAN","COMMAND_PRECOMMIT","COMMAND_DEVELOPMENT","COMMAND_VERSIONS","COMMAND_UPDATES","COMMAND_CHECK_CONFIG","COMMAND_INIT_CONFIG","ALLOWED_COMMANDS","DEFAULT_COMMAND","KODRDRIV_DEFAULTS","dryRun","verbose","debug","overrides","model","openaiReasoning","openaiMaxOutputTokens","contextDirectories","commandName","configDirectory","outputDirectory","preferencesDirectory","commit","add","cached","sendit","interactive","amend","messageLimit","skipFileCheck","maxDiffBytes","release","from","to","noMilestones","audioCommit","maxRecordingTime","audioDevice","undefined","review","includeCommitHistory","includeRecentDiffs","includeReleaseNotes","includeGithubIssues","commitHistoryLimit","diffHistoryLimit","releaseNotesLimit","githubIssuesLimit","audioReview","directory","publish","mergeMethod","targetVersion","requiredEnvVars","linkWorkspacePackages","unlinkWorkspacePackages","targetBranch","checksTimeout","releaseWorkflowsTimeout","link","scopeRoots","packageArgument","externals","unlink","workspaceFile","cleanNodeModules","tree","directories","exclude","startFrom","stopAt","cmd","builtInCommand","continue","development","versions","subcommand","updates","scope","excludedPatterns","branches","working","developmentBranch","version","type","increment","incrementLevel","tag","main"],"mappings":"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"}
1
+ {"version":3,"file":"constants.js","sources":["../src/constants.ts"],"sourcesContent":["import { MergeMethod } from './types';\nimport os from 'os';\nimport path from 'path';\n\nexport const VERSION = '__VERSION__ (__GIT_BRANCH__/__GIT_COMMIT__ __GIT_TAGS__ __GIT_COMMIT_DATE__) __SYSTEM_INFO__';\nexport const PROGRAM_NAME = 'kodrdriv';\nexport const DEFAULT_CHARACTER_ENCODING = 'utf-8';\nexport const DEFAULT_BINARY_TO_TEXT_ENCODING = 'base64';\nexport const DEFAULT_DIFF = true;\nexport const DEFAULT_LOG = false;\nexport const DEFAULT_OVERRIDES = false;\nexport const DATE_FORMAT_MONTH_DAY = 'MM-DD';\nexport const DATE_FORMAT_YEAR = 'YYYY';\nexport const DATE_FORMAT_YEAR_MONTH = 'YYYY-MM';\nexport const DATE_FORMAT_YEAR_MONTH_DAY = 'YYYY-MM-DD';\nexport const DATE_FORMAT_YEAR_MONTH_DAY_SLASH = 'YYYY/MM/DD';\nexport const DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES = 'YYYY-MM-DD-HHmm';\nexport const DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS = 'YYYY-MM-DD-HHmmss';\nexport const DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS = 'YYYY-MM-DD-HHmmss.SSS';\nexport const DATE_FORMAT_SHORT_TIMESTAMP = 'YYMMdd-HHmm';\nexport const DATE_FORMAT_MONTH = 'MM';\nexport const DATE_FORMAT_DAY = 'DD';\nexport const DATE_FORMAT_HOURS = 'HHmm';\nexport const DATE_FORMAT_MINUTES = 'mm';\nexport const DATE_FORMAT_SECONDS = 'ss';\nexport const DATE_FORMAT_MILLISECONDS = 'SSS';\nexport const DEFAULT_VERBOSE = false;\nexport const DEFAULT_DRY_RUN = false;\nexport const DEFAULT_DEBUG = false;\nexport const DEFAULT_MODEL = 'gpt-4o-mini';\nexport const DEFAULT_MODEL_STRONG = 'gpt-4o';\nexport const DEFAULT_OPENAI_REASONING = 'low';\nexport const DEFAULT_OPENAI_MAX_OUTPUT_TOKENS = 10000;\nexport const DEFAULT_OUTPUT_DIRECTORY = 'output/kodrdriv';\n\n// Buffer size for git commands that may produce large output (like git log)\nexport const DEFAULT_GIT_COMMAND_MAX_BUFFER = 50 * 1024 * 1024; // 50MB\n\nexport const DEFAULT_CONTEXT_DIRECTORIES: string[] = [];\n\nexport const DEFAULT_CONFIG_DIR = '.kodrdriv';\nexport const DEFAULT_PREFERENCES_DIRECTORY = path.join(os.homedir(), '.kodrdriv');\n\nexport const DEFAULT_FROM_COMMIT_ALIAS = 'main';\nexport const DEFAULT_TO_COMMIT_ALIAS = 'HEAD';\n\nexport const DEFAULT_ADD = false;\nexport const DEFAULT_CACHED = false;\nexport const DEFAULT_SENDIT_MODE = false;\nexport const DEFAULT_INTERACTIVE_MODE = false;\nexport const DEFAULT_AMEND_MODE = false;\n// CRITICAL: Keep this low (3-5) to prevent log context contamination.\n// The LLM tends to pattern-match against recent commits instead of describing\n// the actual diff when it sees too much commit history. Set to 0 to disable.\nexport const DEFAULT_MESSAGE_LIMIT = 3;\nexport const DEFAULT_MAX_DIFF_BYTES = 20480; // 20KB limit per file\n\nexport const DEFAULT_MERGE_METHOD: MergeMethod = 'squash';\n\nexport const DEFAULT_EXCLUDED_PATTERNS = [\n 'node_modules', 'package-lock.json', 'yarn.lock', 'bun.lockb',\n 'composer.lock', 'Cargo.lock', 'Gemfile.lock',\n 'dist', 'build', 'out', '.next', '.nuxt', 'coverage',\n '.vscode', '.idea', '.DS_Store', '.git', '.gitignore',\n 'logs', 'tmp', '.cache', '*.log', '.env', '.env.*',\n '*.pem', '*.crt', '*.key', '*.sqlite', '*.db',\n '*.zip', '*.tar', '*.gz', '*.exe', '*.bin'\n];\n\nexport const COMMAND_COMMIT = 'commit';\nexport const COMMAND_AUDIO_COMMIT = 'audio-commit';\nexport const COMMAND_SELECT_AUDIO = 'select-audio';\nexport const COMMAND_RELEASE = 'release';\nexport const COMMAND_REVIEW = 'review';\nexport const COMMAND_AUDIO_REVIEW = 'audio-review';\nexport const COMMAND_PUBLISH = 'publish';\nexport const COMMAND_TREE = 'tree';\nexport const COMMAND_LINK = 'link';\nexport const COMMAND_UNLINK = 'unlink';\nexport const COMMAND_CLEAN = 'clean';\nexport const COMMAND_PRECOMMIT = 'precommit';\nexport const COMMAND_DEVELOPMENT = 'development';\nexport const COMMAND_VERSIONS = 'versions';\nexport const COMMAND_UPDATES = 'updates';\nexport const COMMAND_CHECK_CONFIG = 'check-config';\nexport const COMMAND_INIT_CONFIG = 'init-config';\n\nexport const ALLOWED_COMMANDS = [\n COMMAND_COMMIT,\n COMMAND_AUDIO_COMMIT,\n COMMAND_SELECT_AUDIO,\n COMMAND_RELEASE,\n COMMAND_REVIEW,\n COMMAND_AUDIO_REVIEW,\n COMMAND_PUBLISH,\n COMMAND_TREE,\n COMMAND_LINK,\n COMMAND_UNLINK,\n COMMAND_CLEAN,\n COMMAND_PRECOMMIT,\n COMMAND_DEVELOPMENT,\n COMMAND_VERSIONS,\n COMMAND_UPDATES\n];\n\nexport const DEFAULT_COMMAND = COMMAND_COMMIT;\n\nexport const DEFAULT_INSTRUCTIONS_DIR = `instructions`;\n\nexport const DEFAULT_PERSONA_DIR = `personas`;\n\nexport const DEFAULT_INSTRUCTIONS_COMMIT_FILE = `${DEFAULT_INSTRUCTIONS_DIR}/commit.md`;\nexport const DEFAULT_INSTRUCTIONS_RELEASE_FILE = `${DEFAULT_INSTRUCTIONS_DIR}/release.md`;\nexport const DEFAULT_INSTRUCTIONS_REVIEW_FILE = `${DEFAULT_INSTRUCTIONS_DIR}/review.md`;\n\nexport const DEFAULT_PERSONA_RELEASER_FILE = `${DEFAULT_PERSONA_DIR}/releaser.md`;\nexport const DEFAULT_PERSONA_YOU_FILE = `${DEFAULT_PERSONA_DIR}/you.md`;\n\n// Default instructions for each persona\nexport const DEFAULT_INSTRUCTIONS_MAP = {\n [COMMAND_COMMIT]: DEFAULT_INSTRUCTIONS_COMMIT_FILE,\n [COMMAND_AUDIO_COMMIT]: DEFAULT_INSTRUCTIONS_COMMIT_FILE, // Reuse commit instructions\n [COMMAND_RELEASE]: DEFAULT_INSTRUCTIONS_RELEASE_FILE,\n [COMMAND_REVIEW]: DEFAULT_INSTRUCTIONS_REVIEW_FILE, // Reuse audio-review instructions for now\n [COMMAND_AUDIO_REVIEW]: DEFAULT_INSTRUCTIONS_REVIEW_FILE,\n};\n\n// Default personas for each command\nexport const DEFAULT_PERSONA_MAP = {\n [COMMAND_COMMIT]: DEFAULT_PERSONA_YOU_FILE,\n [COMMAND_AUDIO_COMMIT]: DEFAULT_PERSONA_YOU_FILE, // Use You persona\n [COMMAND_RELEASE]: DEFAULT_PERSONA_RELEASER_FILE,\n [COMMAND_REVIEW]: DEFAULT_PERSONA_YOU_FILE, // Use You persona\n [COMMAND_AUDIO_REVIEW]: DEFAULT_PERSONA_YOU_FILE,\n};\n\n// Used by child process to create paths\nexport const DEFAULT_PATH_SEPARATOR = '/';\n\n// Used by util/general for file filtering\nexport const DEFAULT_IGNORE_PATTERNS = [\n 'node_modules/**',\n '**/*.log',\n '.git/**',\n 'dist/**',\n 'build/**',\n 'coverage/**',\n 'output/**',\n '.DS_Store',\n '*.tmp',\n '*.cache',\n '**/.kodrdriv-*.json', // Internal kodrdriv cache and state files\n];\n\n// Used by util/storage for directory names\nexport const DEFAULT_DIRECTORY_PREFIX = '.kodrdriv';\n\n// Used by other commands but not exposed in CLI\nexport const INTERNAL_DEFAULT_OUTPUT_FILE = 'output.txt';\n\nexport const INTERNAL_DATETIME_FORMAT = 'YYYY-MM-DD_HH-mm-ss';\n\n// Define defaults in one place\nexport const KODRDRIV_DEFAULTS = {\n dryRun: DEFAULT_DRY_RUN,\n verbose: DEFAULT_VERBOSE,\n debug: DEFAULT_DEBUG,\n overrides: DEFAULT_OVERRIDES,\n model: DEFAULT_MODEL,\n openaiReasoning: DEFAULT_OPENAI_REASONING as 'low' | 'medium' | 'high',\n openaiMaxOutputTokens: DEFAULT_OPENAI_MAX_OUTPUT_TOKENS,\n contextDirectories: DEFAULT_CONTEXT_DIRECTORIES,\n commandName: DEFAULT_COMMAND,\n configDirectory: DEFAULT_CONFIG_DIR,\n outputDirectory: DEFAULT_OUTPUT_DIRECTORY,\n preferencesDirectory: DEFAULT_PREFERENCES_DIRECTORY,\n commit: {\n add: DEFAULT_ADD,\n cached: DEFAULT_CACHED,\n sendit: DEFAULT_SENDIT_MODE,\n interactive: DEFAULT_INTERACTIVE_MODE,\n amend: DEFAULT_AMEND_MODE,\n messageLimit: DEFAULT_MESSAGE_LIMIT,\n skipFileCheck: false,\n maxDiffBytes: DEFAULT_MAX_DIFF_BYTES,\n contextFiles: undefined,\n openaiReasoning: DEFAULT_OPENAI_REASONING as 'low' | 'medium' | 'high',\n openaiMaxOutputTokens: DEFAULT_OPENAI_MAX_OUTPUT_TOKENS,\n },\n release: {\n from: DEFAULT_FROM_COMMIT_ALIAS,\n to: DEFAULT_TO_COMMIT_ALIAS,\n messageLimit: DEFAULT_MESSAGE_LIMIT,\n interactive: DEFAULT_INTERACTIVE_MODE,\n maxDiffBytes: DEFAULT_MAX_DIFF_BYTES,\n contextFiles: undefined,\n noMilestones: false,\n openaiReasoning: DEFAULT_OPENAI_REASONING as 'low' | 'medium' | 'high',\n openaiMaxOutputTokens: DEFAULT_OPENAI_MAX_OUTPUT_TOKENS,\n },\n audioCommit: {\n maxRecordingTime: 300, // 5 minutes default\n audioDevice: undefined, // Auto-detect by default\n openaiReasoning: DEFAULT_OPENAI_REASONING as 'low' | 'medium' | 'high',\n openaiMaxOutputTokens: DEFAULT_OPENAI_MAX_OUTPUT_TOKENS,\n },\n review: {\n includeCommitHistory: true,\n includeRecentDiffs: true,\n includeReleaseNotes: false,\n includeGithubIssues: true,\n commitHistoryLimit: 10,\n diffHistoryLimit: 5,\n releaseNotesLimit: 3,\n githubIssuesLimit: 20,\n sendit: DEFAULT_SENDIT_MODE,\n openaiReasoning: DEFAULT_OPENAI_REASONING as 'low' | 'medium' | 'high',\n openaiMaxOutputTokens: DEFAULT_OPENAI_MAX_OUTPUT_TOKENS,\n },\n audioReview: {\n includeCommitHistory: true,\n includeRecentDiffs: true,\n includeReleaseNotes: false,\n includeGithubIssues: true,\n commitHistoryLimit: 10,\n diffHistoryLimit: 5,\n releaseNotesLimit: 3,\n githubIssuesLimit: 20,\n sendit: DEFAULT_SENDIT_MODE,\n maxRecordingTime: 300, // 5 minutes default\n audioDevice: undefined, // Auto-detect by default\n directory: undefined, // No default directory\n openaiReasoning: DEFAULT_OPENAI_REASONING as 'low' | 'medium' | 'high',\n openaiMaxOutputTokens: DEFAULT_OPENAI_MAX_OUTPUT_TOKENS,\n },\n publish: {\n mergeMethod: DEFAULT_MERGE_METHOD,\n from: DEFAULT_FROM_COMMIT_ALIAS,\n targetVersion: 'patch',\n interactive: DEFAULT_INTERACTIVE_MODE,\n requiredEnvVars: ['GITHUB_TOKEN', 'OPENAI_API_KEY'],\n linkWorkspacePackages: true,\n unlinkWorkspacePackages: true,\n sendit: DEFAULT_SENDIT_MODE,\n targetBranch: 'main',\n noMilestones: false,\n checksTimeout: 3600000, // 1 hour default for PR checks\n releaseWorkflowsTimeout: 1800000, // 30 minutes default for release workflows\n },\n link: {\n scopeRoots: {},\n dryRun: false,\n packageArgument: undefined,\n externals: [],\n },\n unlink: {\n scopeRoots: {},\n workspaceFile: undefined,\n dryRun: false,\n cleanNodeModules: false,\n packageArgument: undefined,\n externals: [],\n },\n tree: {\n directories: undefined,\n exclude: undefined,\n startFrom: undefined,\n stopAt: undefined,\n cmd: undefined,\n\n builtInCommand: undefined,\n continue: false,\n packageArgument: undefined,\n cleanNodeModules: false,\n externals: [],\n },\n development: {\n targetVersion: 'patch',\n noMilestones: false,\n },\n versions: {\n subcommand: undefined,\n directories: undefined,\n },\n updates: {\n scope: undefined,\n directories: undefined,\n },\n excludedPatterns: DEFAULT_EXCLUDED_PATTERNS,\n branches: {\n working: {\n targetBranch: 'main',\n developmentBranch: true,\n version: {\n type: 'prerelease' as const,\n increment: true,\n incrementLevel: 'patch' as const,\n tag: 'dev'\n }\n },\n main: {\n version: {\n type: 'release' as const\n }\n }\n }\n};\n"],"names":["VERSION","PROGRAM_NAME","DEFAULT_OVERRIDES","DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS","DEFAULT_VERBOSE","DEFAULT_DRY_RUN","DEFAULT_DEBUG","DEFAULT_MODEL","DEFAULT_OPENAI_REASONING","DEFAULT_OPENAI_MAX_OUTPUT_TOKENS","DEFAULT_OUTPUT_DIRECTORY","DEFAULT_GIT_COMMAND_MAX_BUFFER","DEFAULT_CONTEXT_DIRECTORIES","DEFAULT_CONFIG_DIR","DEFAULT_PREFERENCES_DIRECTORY","path","join","os","homedir","DEFAULT_FROM_COMMIT_ALIAS","DEFAULT_TO_COMMIT_ALIAS","DEFAULT_ADD","DEFAULT_CACHED","DEFAULT_SENDIT_MODE","DEFAULT_INTERACTIVE_MODE","DEFAULT_AMEND_MODE","DEFAULT_MESSAGE_LIMIT","DEFAULT_MAX_DIFF_BYTES","DEFAULT_MERGE_METHOD","DEFAULT_EXCLUDED_PATTERNS","COMMAND_COMMIT","COMMAND_AUDIO_COMMIT","COMMAND_SELECT_AUDIO","COMMAND_RELEASE","COMMAND_REVIEW","COMMAND_AUDIO_REVIEW","COMMAND_PUBLISH","COMMAND_TREE","COMMAND_LINK","COMMAND_UNLINK","COMMAND_CLEAN","COMMAND_PRECOMMIT","COMMAND_DEVELOPMENT","COMMAND_VERSIONS","COMMAND_UPDATES","COMMAND_CHECK_CONFIG","COMMAND_INIT_CONFIG","ALLOWED_COMMANDS","DEFAULT_COMMAND","KODRDRIV_DEFAULTS","dryRun","verbose","debug","overrides","model","openaiReasoning","openaiMaxOutputTokens","contextDirectories","commandName","configDirectory","outputDirectory","preferencesDirectory","commit","add","cached","sendit","interactive","amend","messageLimit","skipFileCheck","maxDiffBytes","contextFiles","undefined","release","from","to","noMilestones","audioCommit","maxRecordingTime","audioDevice","review","includeCommitHistory","includeRecentDiffs","includeReleaseNotes","includeGithubIssues","commitHistoryLimit","diffHistoryLimit","releaseNotesLimit","githubIssuesLimit","audioReview","directory","publish","mergeMethod","targetVersion","requiredEnvVars","linkWorkspacePackages","unlinkWorkspacePackages","targetBranch","checksTimeout","releaseWorkflowsTimeout","link","scopeRoots","packageArgument","externals","unlink","workspaceFile","cleanNodeModules","tree","directories","exclude","startFrom","stopAt","cmd","builtInCommand","continue","development","versions","subcommand","updates","scope","excludedPatterns","branches","working","developmentBranch","version","type","increment","incrementLevel","tag","main"],"mappings":"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"}
@@ -1,12 +1,19 @@
1
1
  import { createStorage } from '@eldrforge/shared';
2
+ import path__default from 'path';
2
3
 
3
4
  /**
4
5
  * Create a StorageAdapter implementation using kodrdriv Storage
5
- */ function createStorageAdapter() {
6
+ *
7
+ * @param outputDirectory - Directory where output files should be written (default: 'output')
8
+ */ function createStorageAdapter(outputDirectory = 'output') {
6
9
  const storage = createStorage();
7
10
  return {
8
11
  async writeOutput (fileName, content) {
9
- await storage.writeFile(fileName, content, 'utf8');
12
+ // Ensure output directory exists
13
+ await storage.ensureDirectory(outputDirectory);
14
+ // Write file to output directory
15
+ const filePath = path__default.join(outputDirectory, fileName);
16
+ await storage.writeFile(filePath, content, 'utf8');
10
17
  },
11
18
  async readTemp (fileName) {
12
19
  return await storage.readFile(fileName, 'utf8');
@@ -1 +1 @@
1
- {"version":3,"file":"storageAdapter.js","sources":["../../src/util/storageAdapter.ts"],"sourcesContent":["/**\n * Adapter for ai-service StorageAdapter using kodrdriv Storage\n */\n\nimport type { StorageAdapter } from '@eldrforge/ai-service';\nimport { createStorage } from '@eldrforge/shared';\n\n/**\n * Create a StorageAdapter implementation using kodrdriv Storage\n */\nexport function createStorageAdapter(): StorageAdapter {\n const storage = createStorage();\n\n return {\n async writeOutput(fileName: string, content: string): Promise<void> {\n await storage.writeFile(fileName, content, 'utf8');\n },\n\n async readTemp(fileName: string): Promise<string> {\n return await storage.readFile(fileName, 'utf8');\n },\n\n async writeTemp(fileName: string, content: string): Promise<void> {\n await storage.writeFile(fileName, content, 'utf8');\n },\n\n async readFile(fileName: string, encoding: string = 'utf8'): Promise<string> {\n return await storage.readFile(fileName, encoding);\n },\n };\n}\n\n"],"names":["createStorageAdapter","storage","createStorage","writeOutput","fileName","content","writeFile","readTemp","readFile","writeTemp","encoding"],"mappings":";;AAOA;;AAEC,IACM,SAASA,oBAAAA,GAAAA;AACZ,IAAA,MAAMC,OAAAA,GAAUC,aAAAA,EAAAA;IAEhB,OAAO;QACH,MAAMC,WAAAA,CAAAA,CAAYC,QAAgB,EAAEC,OAAe,EAAA;AAC/C,YAAA,MAAMJ,OAAAA,CAAQK,SAAS,CAACF,QAAAA,EAAUC,OAAAA,EAAS,MAAA,CAAA;AAC/C,QAAA,CAAA;AAEA,QAAA,MAAME,UAASH,QAAgB,EAAA;AAC3B,YAAA,OAAO,MAAMH,OAAAA,CAAQO,QAAQ,CAACJ,QAAAA,EAAU,MAAA,CAAA;AAC5C,QAAA,CAAA;QAEA,MAAMK,SAAAA,CAAAA,CAAUL,QAAgB,EAAEC,OAAe,EAAA;AAC7C,YAAA,MAAMJ,OAAAA,CAAQK,SAAS,CAACF,QAAAA,EAAUC,OAAAA,EAAS,MAAA,CAAA;AAC/C,QAAA,CAAA;AAEA,QAAA,MAAMG,QAAAA,CAAAA,CAASJ,QAAgB,EAAEM,QAAAA,GAAmB,MAAM,EAAA;AACtD,YAAA,OAAO,MAAMT,OAAAA,CAAQO,QAAQ,CAACJ,QAAAA,EAAUM,QAAAA,CAAAA;AAC5C,QAAA;AACJ,KAAA;AACJ;;;;"}
1
+ {"version":3,"file":"storageAdapter.js","sources":["../../src/util/storageAdapter.ts"],"sourcesContent":["/**\n * Adapter for ai-service StorageAdapter using kodrdriv Storage\n */\n\nimport type { StorageAdapter } from '@eldrforge/ai-service';\nimport { createStorage } from '@eldrforge/shared';\nimport path from 'path';\n\n/**\n * Create a StorageAdapter implementation using kodrdriv Storage\n *\n * @param outputDirectory - Directory where output files should be written (default: 'output')\n */\nexport function createStorageAdapter(outputDirectory: string = 'output'): StorageAdapter {\n const storage = createStorage();\n\n return {\n async writeOutput(fileName: string, content: string): Promise<void> {\n // Ensure output directory exists\n await storage.ensureDirectory(outputDirectory);\n\n // Write file to output directory\n const filePath = path.join(outputDirectory, fileName);\n await storage.writeFile(filePath, content, 'utf8');\n },\n\n async readTemp(fileName: string): Promise<string> {\n return await storage.readFile(fileName, 'utf8');\n },\n\n async writeTemp(fileName: string, content: string): Promise<void> {\n await storage.writeFile(fileName, content, 'utf8');\n },\n\n async readFile(fileName: string, encoding: string = 'utf8'): Promise<string> {\n return await storage.readFile(fileName, encoding);\n },\n };\n}\n\n"],"names":["createStorageAdapter","outputDirectory","storage","createStorage","writeOutput","fileName","content","ensureDirectory","filePath","path","join","writeFile","readTemp","readFile","writeTemp","encoding"],"mappings":";;;AAQA;;;;AAIC,IACM,SAASA,oBAAAA,CAAqBC,eAAAA,GAA0B,QAAQ,EAAA;AACnE,IAAA,MAAMC,OAAAA,GAAUC,aAAAA,EAAAA;IAEhB,OAAO;QACH,MAAMC,WAAAA,CAAAA,CAAYC,QAAgB,EAAEC,OAAe,EAAA;;YAE/C,MAAMJ,OAAAA,CAAQK,eAAe,CAACN,eAAAA,CAAAA;;AAG9B,YAAA,MAAMO,QAAAA,GAAWC,aAAAA,CAAKC,IAAI,CAACT,eAAAA,EAAiBI,QAAAA,CAAAA;AAC5C,YAAA,MAAMH,OAAAA,CAAQS,SAAS,CAACH,QAAAA,EAAUF,OAAAA,EAAS,MAAA,CAAA;AAC/C,QAAA,CAAA;AAEA,QAAA,MAAMM,UAASP,QAAgB,EAAA;AAC3B,YAAA,OAAO,MAAMH,OAAAA,CAAQW,QAAQ,CAACR,QAAAA,EAAU,MAAA,CAAA;AAC5C,QAAA,CAAA;QAEA,MAAMS,SAAAA,CAAAA,CAAUT,QAAgB,EAAEC,OAAe,EAAA;AAC7C,YAAA,MAAMJ,OAAAA,CAAQS,SAAS,CAACN,QAAAA,EAAUC,OAAAA,EAAS,MAAA,CAAA;AAC/C,QAAA,CAAA;AAEA,QAAA,MAAMO,QAAAA,CAAAA,CAASR,QAAgB,EAAEU,QAAAA,GAAmB,MAAM,EAAA;AACtD,YAAA,OAAO,MAAMb,OAAAA,CAAQW,QAAQ,CAACR,QAAAA,EAAUU,QAAAA,CAAAA;AAC5C,QAAA;AACJ,KAAA;AACJ;;;;"}
@@ -0,0 +1,519 @@
1
+ # AI System Guide
2
+
3
+ Understanding how kodrdriv's AI analysis works.
4
+
5
+ ## Overview
6
+
7
+ Kodrdriv uses an **agentic AI system** - the AI doesn't just generate text, it actively investigates your code changes using specialized tools before writing commit messages or release notes.
8
+
9
+ **Key Concept**: Instead of blindly describing diffs, the AI asks questions like "what files depend on this?" and "what tests cover this?" to understand your changes deeply.
10
+
11
+ ## Always-On Agentic Mode
12
+
13
+ As of recent updates, **agentic mode is always enabled**. The AI always uses tools to investigate changes.
14
+
15
+ ### What This Means
16
+
17
+ **Old way** (single-shot):
18
+ ```
19
+ Diff → AI → Commit Message
20
+ ```
21
+
22
+ **New way** (agentic):
23
+ ```
24
+ Diff → AI analyzes → Uses tools → Gathers context → AI writes message
25
+ ```
26
+
27
+ The AI can:
28
+ - Read file contents
29
+ - Check file history
30
+ - Find dependencies
31
+ - Search codebase
32
+ - Review tests
33
+ - Check recent commits
34
+
35
+ ## AI Tools
36
+
37
+ ### Commit Message Tools (8 tools)
38
+
39
+ | Tool | Purpose | Example Use Case |
40
+ |------|---------|------------------|
41
+ | `get_file_history` | View file's commit history | Understand evolution of changed file |
42
+ | `get_file_content` | Read complete file | See context around diff |
43
+ | `get_related_tests` | Find test files | Understand behavior changes |
44
+ | `analyze_diff_section` | Expand context around lines | Clarify cryptic changes |
45
+ | `get_recent_commits` | Check recent commits | Avoid duplicate messages |
46
+ | `search_codebase` | Find patterns/usage | Assess impact of changes |
47
+ | `get_file_dependencies` | Find what depends on file | Understand impact scope |
48
+ | `group_files_by_concern` | Organize files logically | Suggest commit splits |
49
+
50
+ ### Release Notes Tools (13 tools)
51
+
52
+ **All commit tools** plus:
53
+
54
+ | Tool | Purpose | Example Use Case |
55
+ |------|---------|------------------|
56
+ | `get_tag_history` | View past tags | Understand release patterns |
57
+ | `get_release_stats` | Quantify changes | Get metrics on scope |
58
+ | `analyze_commit_patterns` | Detect themes | Identify focus areas |
59
+ | `compare_previous_release` | Compare releases | Contextualize changes |
60
+ | `get_breaking_changes` | Identify breaking changes | Alert users to issues |
61
+
62
+ ## How the AI Decides
63
+
64
+ ### Investigation Strategy
65
+
66
+ The AI decides which tools to use based on:
67
+
68
+ 1. **Change Complexity**
69
+ - 1-3 files → Use 1-2 tools (simple)
70
+ - 4-10 files → Use 2-4 tools (moderate)
71
+ - 10+ files → Use 4-6 tools (complex)
72
+
73
+ 2. **Change Type**
74
+ - New feature → Check tests, dependencies
75
+ - Bug fix → Review file history, related changes
76
+ - Refactor → Check dependencies, search usage
77
+ - Documentation → Group by concern
78
+
79
+ 3. **Clarity**
80
+ - Clear diff → Fewer tools needed
81
+ - Cryptic diff → Read full files, expand context
82
+ - Multiple concerns → Group files, suggest splits
83
+
84
+ ### Example: AI Investigating a Change
85
+
86
+ ```
87
+ User: Generate commit message for auth.ts changes
88
+
89
+ AI: Let me investigate...
90
+ 1. get_file_content(auth.ts) → See full context
91
+ 2. get_related_tests(auth.ts) → Find auth.test.ts
92
+ 3. get_file_dependencies(auth.ts) → Used by user.ts, api.ts
93
+ 4. get_recent_commits(auth.ts) → Last changed 2 days ago
94
+ "refactor: simplify auth flow"
95
+
96
+ AI: Based on investigation, this adds JWT support to
97
+ existing auth system, affecting user and API modules.
98
+ Tests updated to cover new token validation.
99
+
100
+ Output: "feat(auth): add JWT token support
101
+
102
+ Adds JWT-based authentication alongside existing session auth.
103
+ Updates user and API modules to handle tokens.
104
+ Includes tests for token validation and refresh."
105
+ ```
106
+
107
+ ## Prompt Engineering
108
+
109
+ ### Commit Message Prompts
110
+
111
+ **System Prompt** (abbreviated):
112
+ ```
113
+ You are a professional software engineer writing commit messages for your team.
114
+
115
+ Write naturally and directly:
116
+ - Use plain language, not corporate speak
117
+ - Be specific and concrete
118
+ - Avoid buzzwords and jargon
119
+ - No emojis or excessive punctuation
120
+ - No phrases like "this commit"
121
+ ```
122
+
123
+ **User Prompt**:
124
+ ```
125
+ I have staged changes that need a commit message.
126
+
127
+ Changed files (3):
128
+ - src/auth.ts
129
+ - src/user.ts
130
+ - tests/auth.test.ts
131
+
132
+ Diff: [full diff]
133
+
134
+ Analyze these changes and write a clear commit message.
135
+ ```
136
+
137
+ ### Release Notes Prompts
138
+
139
+ **System Prompt** (abbreviated):
140
+ ```
141
+ You are a professional software engineer writing release notes for your team and users.
142
+
143
+ Focus on:
144
+ - What problems does this release solve?
145
+ - What new capabilities does it add?
146
+ - What's the impact on users?
147
+ - Are there breaking changes?
148
+
149
+ Write naturally and directly:
150
+ - Use plain language
151
+ - Be specific about what changed and why
152
+ - No marketing speak
153
+ - No emojis
154
+ - Focus on facts, not enthusiasm
155
+ ```
156
+
157
+ **User Prompt**:
158
+ ```
159
+ I need release notes for changes from v1.0.0 to v1.1.0.
160
+
161
+ Commit Log: [commits]
162
+ Diff Summary: [diffs]
163
+ Milestone Issues: [resolved issues]
164
+
165
+ Consider:
166
+ - What's the main story?
167
+ - What problems does it solve?
168
+ - Are there breaking changes?
169
+ ```
170
+
171
+ ## Quality Standards
172
+
173
+ ### Anti-Slop Guidelines
174
+
175
+ The AI is explicitly instructed to avoid:
176
+ - ✗ Emojis (🎉, ✨, 🚀)
177
+ - ✗ Marketing language ("excited to announce")
178
+ - ✗ Meta-commentary ("this commit", "this PR")
179
+ - ✗ Buzzwords ("leverage", "synergy")
180
+ - ✗ Excessive punctuation (!!!, ???)
181
+ - ✗ Conversational closings ("Let me know")
182
+
183
+ ### What Good Output Looks Like
184
+
185
+ **Commit Message**:
186
+ ```
187
+ feat(auth): add JWT token support
188
+
189
+ Adds JWT-based authentication alongside existing session auth. Token
190
+ validation happens in middleware, with automatic refresh handling.
191
+
192
+ Updates user and API modules to accept both auth methods. Backward
193
+ compatible - existing session auth continues to work.
194
+
195
+ Includes tests for token validation, refresh, and mixed auth scenarios.
196
+ ```
197
+
198
+ **Release Notes**:
199
+ ```
200
+ ## Authentication Improvements
201
+
202
+ Added JWT token support alongside existing session-based authentication.
203
+ Tokens are validated in middleware with automatic refresh handling.
204
+
205
+ Both authentication methods work simultaneously, allowing gradual migration.
206
+ Session-based auth continues to work without changes.
207
+
208
+ ## Breaking Changes
209
+
210
+ None. This release is fully backward compatible.
211
+
212
+ ## Testing
213
+
214
+ Added comprehensive tests for token validation, refresh logic, and
215
+ compatibility with existing session auth.
216
+ ```
217
+
218
+ ## Iteration Control
219
+
220
+ ### What Are Iterations?
221
+
222
+ Each iteration is one loop of AI → Tool Calls → Response.
223
+
224
+ **Example**:
225
+ ```
226
+ Iteration 1: AI requests get_file_content(auth.ts)
227
+ Iteration 2: AI requests get_related_tests(auth.ts)
228
+ Iteration 3: AI writes commit message
229
+ ```
230
+
231
+ ### Controlling Iterations
232
+
233
+ ```bash
234
+ # More iterations = more investigation
235
+ kodrdriv commit --max-agentic-iterations 15
236
+
237
+ # Fewer for speed
238
+ kodrdriv commit --max-agentic-iterations 5
239
+
240
+ # Default is 10 for commits, 30 for releases
241
+ ```
242
+
243
+ **When to adjust**:
244
+ - Simple changes → Use 5-8 iterations
245
+ - Complex changes → Use 12-20 iterations
246
+ - Large releases → Use 40-50 iterations
247
+
248
+ ### Monitoring Iterations
249
+
250
+ Enable self-reflection to see iteration details:
251
+
252
+ ```bash
253
+ kodrdriv commit --self-reflection
254
+ cat output/agentic-reflection-commit-*.md
255
+ ```
256
+
257
+ Report shows:
258
+ - Number of iterations used
259
+ - Tools called per iteration
260
+ - Time spent per tool
261
+ - Success/failure rates
262
+
263
+ ## Token Budgets
264
+
265
+ ### Understanding Token Limits
266
+
267
+ Each AI request has a token budget:
268
+ - **Commit messages**: ~150K tokens max
269
+ - **Release notes**: ~200K tokens max
270
+
271
+ Includes:
272
+ - Your code diffs
273
+ - Git history
274
+ - Tool outputs
275
+ - AI responses
276
+
277
+ ### When Budgets Are Exceeded
278
+
279
+ Kodrdriv automatically:
280
+ 1. Compresses oldest messages
281
+ 2. Removes low-priority context
282
+ 3. Truncates large diffs
283
+ 4. Retries with smaller input
284
+
285
+ You can:
286
+ ```bash
287
+ # Reduce diff size
288
+ kodrdriv commit --max-diff-bytes 5120
289
+
290
+ # Limit commit history
291
+ kodrdriv commit --message-limit 5
292
+
293
+ # Reduce iterations
294
+ kodrdriv commit --max-agentic-iterations 8
295
+ ```
296
+
297
+ ## Reasoning Levels
298
+
299
+ OpenAI reasoning models support different effort levels:
300
+
301
+ ```yaml
302
+ # Fast, less thorough
303
+ openaiReasoning: low
304
+
305
+ # Balanced (default)
306
+ openaiReasoning: medium
307
+
308
+ # Thorough, slower
309
+ openaiReasoning: high
310
+ ```
311
+
312
+ **When to use**:
313
+ - `low`: Simple changes, quick commits
314
+ - `medium`: Standard development (default)
315
+ - `high`: Complex releases, critical changes
316
+
317
+ ## Context Sources
318
+
319
+ ### Automatic Context
320
+
321
+ Always included:
322
+ - Git diff of changes
323
+ - Recent commit history
324
+ - File structure
325
+ - Repository metadata
326
+
327
+ ### Optional Context
328
+
329
+ Enable with options:
330
+ - `--context "text"` - Free-form context
331
+ - `--context-files FILES` - Documentation files
332
+ - `-d, --context-directories DIRS` - Code directories
333
+ - GitHub issues (automatic for commits)
334
+ - Milestone issues (automatic for releases)
335
+
336
+ ### Example: Rich Context
337
+
338
+ ```bash
339
+ kodrdriv release \
340
+ --context "This release focuses on performance" \
341
+ --context-files OPTIMIZATION-NOTES.md BENCHMARKS.md \
342
+ -d src/performance -d src/cache \
343
+ --self-reflection
344
+ ```
345
+
346
+ AI receives:
347
+ - Git diff
348
+ - Git history
349
+ - Your context text
350
+ - Contents of OPTIMIZATION-NOTES.md
351
+ - Contents of BENCHMARKS.md
352
+ - Directory trees for src/performance and src/cache
353
+ - Milestone issues
354
+ - Analysis from previous tools
355
+
356
+ ## Observability
357
+
358
+ ### Self-Reflection Reports
359
+
360
+ Enable with `--self-reflection`:
361
+
362
+ ```markdown
363
+ # Agentic Workflow - Self-Reflection Report
364
+
365
+ ## Execution Summary
366
+ - Iterations: 12
367
+ - Tool Calls: 18
368
+ - Unique Tools: 6
369
+
370
+ ## Tool Effectiveness
371
+ | Tool | Calls | Success | Duration |
372
+ |------|-------|---------|----------|
373
+ | get_file_content | 5 | 100% | 450ms |
374
+ | get_recent_commits | 3 | 100% | 230ms |
375
+ | get_related_tests | 2 | 100% | 180ms |
376
+
377
+ ## Conversation History
378
+ [Full AI interaction log]
379
+
380
+ ## Generated Output
381
+ [Final commit message]
382
+ ```
383
+
384
+ ### Debug Files
385
+
386
+ Enable with `--debug`:
387
+
388
+ **output/request-*.json**:
389
+ ```json
390
+ {
391
+ "model": "gpt-4o",
392
+ "messages": [...],
393
+ "tools": [...]
394
+ }
395
+ ```
396
+
397
+ **output/response-*.json**:
398
+ ```json
399
+ {
400
+ "choices": [...],
401
+ "usage": {
402
+ "prompt_tokens": 12450,
403
+ "completion_tokens": 235
404
+ }
405
+ }
406
+ ```
407
+
408
+ ## Best Practices
409
+
410
+ ### For Commit Messages
411
+
412
+ 1. **Enable self-reflection** to improve quality
413
+ 2. **Use context files** for complex features
414
+ 3. **Allow commit splitting** for mixed changes
415
+ 4. **Review interactive** for important commits
416
+ 5. **Check recent commits** to avoid duplicates
417
+
418
+ ### For Release Notes
419
+
420
+ 1. **Always use context files** for comprehensive notes
421
+ 2. **Set release focus** to guide framing
422
+ 3. **Enable self-reflection** to see analysis depth
423
+ 4. **Use interactive mode** to refine
424
+ 5. **Check breaking changes** are highlighted
425
+
426
+ ### For Team Use
427
+
428
+ 1. **Document guidelines** in `.kodrdriv/personas/`
429
+ 2. **Set consistent models** in config
430
+ 3. **Enable verbose** mode for transparency
431
+ 4. **Use dry-run** mode for training
432
+ 5. **Review self-reflection** reports regularly
433
+
434
+ ## Troubleshooting AI Issues
435
+
436
+ ### AI Output is Too Verbose
437
+
438
+ ```yaml
439
+ commit:
440
+ maxAgenticIterations: 6 # Reduce investigation depth
441
+ ```
442
+
443
+ ### AI Output is Too Shallow
444
+
445
+ ```yaml
446
+ commit:
447
+ maxAgenticIterations: 15 # More investigation
448
+ contextFiles: ["docs/IMPL.md"] # More context
449
+ ```
450
+
451
+ ### AI Misunderstands Changes
452
+
453
+ ```bash
454
+ # Pass explicit context
455
+ kodrdriv commit --context "This refactors auth for testability"
456
+
457
+ # Or context files
458
+ kodrdriv commit --context-files ARCHITECTURE.md
459
+ ```
460
+
461
+ ### AI Uses Wrong Tone
462
+
463
+ Customize persona in `.kodrdriv/personas/committer.md`:
464
+ ```markdown
465
+ You write terse, technical commit messages.
466
+ Focus on changed behavior, not implementation details.
467
+ ```
468
+
469
+ ### Tool Calls Fail
470
+
471
+ Check self-reflection report:
472
+ ```bash
473
+ kodrdriv commit --self-reflection --verbose
474
+ cat output/agentic-reflection-commit-*.md
475
+ # Look for tool failures
476
+ ```
477
+
478
+ ## Advanced: Understanding Tool Selection
479
+
480
+ The AI chooses tools based on what would help write better output:
481
+
482
+ **Scenario**: Large refactoring (15 files changed)
483
+
484
+ ```
485
+ AI thinking: "Many files changed. Let me group them first."
486
+ → group_files_by_concern(all files)
487
+ Returns: "Auth module (5 files), Database (3 files), Tests (7 files)"
488
+
489
+ AI: "This might be separate concerns. Let me check dependencies."
490
+ → get_file_dependencies(auth files)
491
+ Returns: "Used by api.ts, user.ts"
492
+
493
+ AI: "Significant changes. Let me check tests."
494
+ → get_related_tests(auth files)
495
+ Returns: "auth.test.ts, integration.test.ts"
496
+
497
+ AI: "I understand. This is a unified refactor with tests."
498
+ → Writes single commit message covering all changes
499
+ ```
500
+
501
+ ## Next Steps
502
+
503
+ - **[Debugging Guide](./debugging.md)** - Troubleshoot AI issues
504
+ - **[Configuration Guide](./configuration.md)** - Fine-tune AI behavior
505
+ - **[Development Guide](./development.md)** - Extend the AI system
506
+ - **[Commands Reference](./commands.md)** - All available commands
507
+
508
+ ## Quick Reference
509
+
510
+ | Setting | Purpose | Values |
511
+ |---------|---------|--------|
512
+ | `model` | AI model to use | gpt-4o, gpt-4o-mini |
513
+ | `openaiReasoning` | Reasoning depth | low, medium, high |
514
+ | `maxAgenticIterations` | Analysis depth | 5-50 (default: 10/30) |
515
+ | `selfReflection` | Generate reports | true/false |
516
+ | `contextFiles` | Additional context | File paths |
517
+
518
+ The AI system is designed to be transparent, controllable, and effective. Use self-reflection reports to understand and improve its decision-making over time.
519
+