@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/AI-GUIDE.md +834 -0
- package/README.md +35 -6
- package/dist/arguments.js +54 -21
- package/dist/arguments.js.map +1 -1
- package/dist/commands/audio-commit.js +2 -1
- package/dist/commands/audio-commit.js.map +1 -1
- package/dist/commands/audio-review.js +4 -2
- package/dist/commands/audio-review.js.map +1 -1
- package/dist/commands/commit.js +91 -133
- package/dist/commands/commit.js.map +1 -1
- package/dist/commands/publish.js +3 -6
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/release.js +62 -139
- package/dist/commands/release.js.map +1 -1
- package/dist/commands/review.js +1 -1
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/tree.js +29 -33
- package/dist/commands/tree.js.map +1 -1
- package/dist/constants.js +3 -1
- package/dist/constants.js.map +1 -1
- package/dist/util/storageAdapter.js +9 -2
- package/dist/util/storageAdapter.js.map +1 -1
- package/guide/ai-system.md +519 -0
- package/guide/architecture.md +346 -0
- package/guide/commands.md +380 -0
- package/guide/configuration.md +513 -0
- package/guide/debugging.md +584 -0
- package/guide/development.md +629 -0
- package/guide/index.md +212 -0
- package/guide/integration.md +507 -0
- package/guide/monorepo.md +530 -0
- package/guide/quickstart.md +223 -0
- package/guide/testing.md +460 -0
- package/guide/tree-operations.md +618 -0
- package/guide/usage.md +575 -0
- package/package.json +6 -6
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.
|
|
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
|
package/dist/constants.js.map
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
+
|