devdaily-ai 0.1.2 → 0.1.3

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/index.js CHANGED
@@ -575,11 +575,9 @@ var weekCommand = new Command3("week").description("Generate weekly work summary
575
575
  const weeksAgo = options.last ? 1 : 0;
576
576
  const start = getWeekStart(weeksAgo);
577
577
  const end = getWeekEnd(weeksAgo);
578
- const user = await git.getCurrentUser();
579
578
  const commits = await git.getCommits({
580
579
  since: start,
581
- until: end,
582
- author: user.email
580
+ until: end
583
581
  });
584
582
  if (commits.length === 0) {
585
583
  load.stop();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/commands/standup.ts","../src/core/git-analyzer.ts","../src/core/copilot.ts","../src/utils/ui.ts","../src/utils/helpers.ts","../src/commands/pr.ts","../src/utils/commitlint.ts","../src/commands/week.ts","../src/commands/context.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { standupCommand } from './commands/standup.js';\nimport { prCommand } from './commands/pr.js';\nimport { weekCommand } from './commands/week.js';\nimport { contextCommand } from './commands/context.js';\n\nconst program = new Command();\n\nprogram.name('devdaily').description('Your AI memory for developer work').version('1.0.0');\n\n// Register commands\nprogram.addCommand(standupCommand);\nprogram.addCommand(prCommand);\nprogram.addCommand(weekCommand);\nprogram.addCommand(contextCommand);\n\n// Parse and execute\nprogram.parse();\n","import { Command } from 'commander';\nimport { GitAnalyzer } from '../core/git-analyzer.js';\nimport { CopilotClient } from '../core/copilot.js';\nimport { UI } from '../utils/ui.js';\nimport { spinner, copyToClipboard, getDaysAgo } from '../utils/helpers.js';\n\nexport const standupCommand = new Command('standup')\n .description('Generate standup notes from your recent commits')\n .option('-d, --days <number>', 'Number of days to look back', '1')\n .option('-f, --format <type>', 'Output format (markdown|slack|plain)', 'markdown')\n .option('--no-copy', 'Do not copy to clipboard')\n .action(async (options) => {\n const git = new GitAnalyzer();\n const copilot = new CopilotClient();\n\n // Check if in git repo\n if (!(await git.isRepository())) {\n console.log(UI.error('Not a git repository'));\n console.log(UI.info('Run this command inside a git repository'));\n process.exit(1);\n }\n\n // Check if Copilot CLI is installed\n if (!(await copilot.isInstalled())) {\n console.log(UI.error('GitHub Copilot CLI not found'));\n console.log(UI.info('Install with: gh extension install github/gh-copilot'));\n process.exit(1);\n }\n\n const load = spinner('Analyzing your work...').start();\n\n try {\n // Get commits\n const days = parseInt(options.days, 10);\n const since = getDaysAgo(days);\n const commits = await git.getCommits({\n since,\n });\n\n if (commits.length === 0) {\n load.stop();\n console.log(UI.warning(`No commits found in the last ${days} day(s)`));\n console.log(UI.info(`Try: devdaily standup --days=${days + 1}`));\n process.exit(0);\n }\n\n load.text = 'Generating standup notes with Copilot CLI...';\n\n // Generate standup using Copilot\n const commitMessages = commits.map((c) => c.message);\n const standup = await copilot.summarizeCommits(commitMessages);\n\n load.stop();\n\n // Format output\n const title = days === 1 ? 'Your Standup' : `Your Work (Last ${days} Days)`;\n const content = `${standup}\\n\\n${UI.divider()}\\n${UI.dim(`${commits.length} commits analyzed`)}`;\n\n console.log(UI.box(content, title));\n\n // Copy to clipboard\n if (options.copy) {\n await copyToClipboard(standup);\n }\n } catch (error) {\n load.stop();\n console.log(UI.error('Failed to generate standup'));\n console.log(UI.dim((error as Error).message));\n process.exit(1);\n }\n });\n","import simpleGit, { SimpleGit, DiffResult } from 'simple-git';\nimport type { Commit, CommitOptions, DiffStats } from '../types/index.js';\n\nexport class GitAnalyzer {\n private git: SimpleGit;\n\n constructor(repoPath?: string) {\n this.git = simpleGit(repoPath || process.cwd());\n }\n\n async isRepository(): Promise<boolean> {\n try {\n await this.git.revparse(['--is-inside-work-tree']);\n return true;\n } catch {\n return false;\n }\n }\n\n async getCurrentBranch(): Promise<string> {\n const branch = await this.git.revparse(['--abbrev-ref', 'HEAD']);\n return branch.trim();\n }\n\n async getCommits(options: CommitOptions = {}): Promise<Commit[]> {\n const args: string[] = ['log'];\n\n if (options.since) {\n args.push(`--since=${options.since.toISOString()}`);\n }\n\n if (options.until) {\n args.push(`--until=${options.until.toISOString()}`);\n }\n\n if (options.author) {\n args.push(`--author=${options.author}`);\n }\n\n args.push('--format=%H|%s|%b|%an|%ae|%ai');\n\n const result = await this.git.raw(args);\n\n const commits = result\n .trim()\n .split('\\n')\n .filter(Boolean)\n .map((line) => {\n const parts = line.split('|');\n const [hash, message, body, author, _authorEmail, date] = parts;\n return {\n hash,\n message,\n author,\n date: new Date(date),\n body: body || '',\n };\n });\n\n return commits;\n }\n\n async getDiff(base: string = 'main', head: string = 'HEAD'): Promise<string> {\n const diff = await this.git.diff([`${base}...${head}`]);\n return diff;\n }\n\n async getDiffStats(base: string = 'main', head: string = 'HEAD'): Promise<DiffStats> {\n const diffSummary = await this.git.diffSummary([`${base}...${head}`]);\n\n return {\n filesChanged: diffSummary.files.length,\n insertions: diffSummary.insertions,\n deletions: diffSummary.deletions,\n };\n }\n\n async getChangedFiles(base: string = 'main', head: string = 'HEAD'): Promise<string[]> {\n const diff = await this.git.diff([`${base}...${head}`, '--name-only']);\n return diff.split('\\n').filter(Boolean);\n }\n\n async getCurrentUser(): Promise<{ name: string; email: string }> {\n const name = await this.git.getConfig('user.name');\n const email = await this.git.getConfig('user.email');\n\n return {\n name: name.value || '',\n email: email.value || '',\n };\n }\n\n async getStatus(): Promise<{ modified: string[]; untracked: string[] }> {\n const status = await this.git.status();\n\n return {\n modified: status.modified,\n untracked: status.not_added,\n };\n }\n\n async hasUncommittedChanges(): Promise<boolean> {\n const status = await this.git.status();\n return !status.isClean();\n }\n}\n","import { execa } from 'execa';\n\nexport class CopilotClient {\n async isInstalled(): Promise<boolean> {\n try {\n await execa('gh', ['copilot', '--version']);\n return true;\n } catch {\n return false;\n }\n }\n\n async suggest(prompt: string): Promise<string> {\n try {\n const { stdout } = await execa('gh', ['copilot', 'suggest', '-t', 'shell', prompt]);\n\n return this.parseOutput(stdout);\n } catch (error) {\n throw new Error(`Copilot CLI error: ${error}`);\n }\n }\n\n async explain(code: string): Promise<string> {\n try {\n const { stdout } = await execa('gh', ['copilot', 'explain', code]);\n return this.parseOutput(stdout);\n } catch (error) {\n throw new Error(`Copilot CLI error: ${error}`);\n }\n }\n\n private parseOutput(raw: string): string {\n // The gh copilot CLI wraps output in UI elements\n // We need to extract just the AI response\n\n // Remove ANSI codes\n // eslint-disable-next-line no-control-regex\n const cleaned = raw.replace(/\\x1B\\[[0-9;]*[a-zA-Z]/g, '');\n\n // Extract the actual suggestion (between prompts)\n const lines = cleaned.split('\\n');\n const relevantLines = lines.filter(\n (line) =>\n line.trim() &&\n !line.includes('Suggestion:') &&\n !line.includes('Explain command:') &&\n !line.includes('?')\n );\n\n return relevantLines.join('\\n').trim();\n }\n\n async summarizeCommits(commits: string[]): Promise<string> {\n const prompt = `\nYou are helping a developer write their standup notes.\n\nHere are their git commits from yesterday:\n${commits.map((c, i) => `${i + 1}. ${c}`).join('\\n')}\n\nGenerate a professional standup update following this format:\n\nYesterday I:\n- [achievement 1 with impact]\n- [achievement 2 with impact]\n- [achievement 3 with impact]\n\nToday I'm working on:\n- [planned work based on commits]\n\nBlockers: None\n\nRequirements:\n- Make it sound natural and professional\n- Focus on WHAT was accomplished, not HOW\n- Highlight business impact when possible\n- Keep it concise (3-5 bullet points max)\n- No emojis\n`;\n\n return this.suggest(prompt);\n }\n\n async generatePRDescription(data: {\n branch: string;\n commits: string[];\n files: string[];\n issues: string[];\n }): Promise<string> {\n const prompt = `\nYou are helping a developer create a Pull Request description.\n\nBranch: ${data.branch}\n\nCommits:\n${data.commits.map((c, i) => `${i + 1}. ${c}`).join('\\n')}\n\nFiles changed:\n${data.files.join('\\n')}\n\nRelated issues: ${data.issues.length > 0 ? data.issues.join(', ') : 'None'}\n\nGenerate a comprehensive PR description following this template:\n\n## What Changed\n- [bullet point 1]\n- [bullet point 2]\n- [bullet point 3]\n\n## Why\n[Business or technical reason for these changes]\n${data.issues.length > 0 ? `Closes ${data.issues.join(', ')}` : ''}\n\n## How to Test\n1. [testing step 1]\n2. [testing step 2]\n3. [testing step 3]\n\nRequirements:\n- Be specific and technical where appropriate\n- Focus on value for code reviewers\n- Keep it clear and concise\n- No emojis\n`;\n\n return this.suggest(prompt);\n }\n\n async generateWeeklySummary(data: {\n commits: string[];\n stats: {\n commits: number;\n linesAdded: number;\n linesRemoved: number;\n };\n }): Promise<string> {\n const prompt = `\nYou are helping a developer create their weekly work summary.\n\nThis week's commits:\n${data.commits.map((c, i) => `${i + 1}. ${c}`).join('\\n')}\n\nStatistics:\n- ${data.stats.commits} commits\n- ${data.stats.linesAdded} lines added\n- ${data.stats.linesRemoved} lines removed\n\nGenerate a professional weekly summary following this format:\n\nKey Accomplishments:\n1. [Major accomplishment with impact]\n2. [Second accomplishment]\n3. [Third accomplishment]\n4. [Fourth accomplishment]\n5. [Fifth accomplishment]\n\nTop Achievement:\n[Single sentence highlighting the most impactful work]\n\nRequirements:\n- Focus on business value and impact\n- Be suitable for sharing with manager or team\n- Highlight 3-5 key accomplishments\n- Keep it professional\n- No emojis\n`;\n\n return this.suggest(prompt);\n }\n}\n","import chalk from 'chalk';\nimport boxen from 'boxen';\n\n// Clean, minimal UI inspired by terminal.shop\n// No emojis, professional output\n\nexport class UI {\n static readonly colors = {\n primary: chalk.blue,\n success: chalk.green,\n warning: chalk.yellow,\n error: chalk.red,\n dim: chalk.gray,\n bold: chalk.bold,\n };\n\n static header(title: string): string {\n return this.colors.bold(title);\n }\n\n static section(title: string, content: string): string {\n return `\\n${this.colors.primary(title)}\\n${content}`;\n }\n\n static box(content: string, title?: string): string {\n return boxen(content, {\n padding: 1,\n margin: 1,\n borderStyle: 'round',\n borderColor: 'blue',\n title: title,\n titleAlignment: 'left',\n });\n }\n\n static list(items: string[]): string {\n return items.map((item) => ` ${this.colors.dim('>')} ${item}`).join('\\n');\n }\n\n static success(message: string): string {\n return this.colors.success(`✓ ${message}`);\n }\n\n static error(message: string): string {\n return this.colors.error(`✗ ${message}`);\n }\n\n static warning(message: string): string {\n return this.colors.warning(`! ${message}`);\n }\n\n static info(message: string): string {\n return this.colors.dim(`i ${message}`);\n }\n\n static divider(): string {\n return this.colors.dim('─'.repeat(50));\n }\n\n static dim(text: string): string {\n return this.colors.dim(text);\n }\n\n static table(headers: string[], rows: string[][]): string {\n const colWidths = headers.map((h, i) => {\n const maxRowWidth = Math.max(...rows.map((r) => r[i]?.length || 0));\n return Math.max(h.length, maxRowWidth);\n });\n\n const headerRow = headers.map((h, i) => h.padEnd(colWidths[i])).join(' ');\n\n const separator = colWidths.map((w) => '─'.repeat(w)).join(' ');\n\n const dataRows = rows\n .map((row) => row.map((cell, i) => cell.padEnd(colWidths[i])).join(' '))\n .join('\\n');\n\n return `${this.colors.bold(headerRow)}\\n${this.colors.dim(separator)}\\n${dataRows}`;\n }\n\n static progress(current: number, total: number, label: string): string {\n const percentage = Math.round((current / total) * 100);\n const barLength = 30;\n const filled = Math.round((barLength * current) / total);\n const bar = '█'.repeat(filled) + '░'.repeat(barLength - filled);\n\n return `${label} ${this.colors.primary(bar)} ${percentage}%`;\n }\n}\n","import ora from 'ora';\nimport clipboard from 'clipboardy';\nimport { UI } from './ui.js';\n\nexport async function copyToClipboard(text: string): Promise<void> {\n try {\n await clipboard.write(text);\n console.log(UI.success('Copied to clipboard'));\n } catch {\n console.log(UI.warning('Failed to copy to clipboard'));\n }\n}\n\nexport function spinner(text: string) {\n return ora({\n text,\n spinner: 'dots',\n color: 'blue',\n });\n}\n\nexport function formatDate(date: Date): string {\n return date.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n });\n}\n\nexport function formatDateRange(start: Date, end: Date): string {\n return `${formatDate(start)} - ${formatDate(end)}`;\n}\n\nexport function getWeekStart(weeksAgo: number = 0): Date {\n const now = new Date();\n const dayOfWeek = now.getDay();\n const monday = new Date(now);\n monday.setDate(now.getDate() - dayOfWeek + (dayOfWeek === 0 ? -6 : 1));\n monday.setDate(monday.getDate() - weeksAgo * 7);\n monday.setHours(0, 0, 0, 0);\n return monday;\n}\n\nexport function getWeekEnd(weeksAgo: number = 0): Date {\n const start = getWeekStart(weeksAgo);\n const end = new Date(start);\n end.setDate(start.getDate() + 6);\n end.setHours(23, 59, 59, 999);\n return end;\n}\n\nexport function getDaysAgo(days: number): Date {\n const date = new Date();\n date.setDate(date.getDate() - days);\n date.setHours(0, 0, 0, 0);\n return date;\n}\n","import { Command } from 'commander';\nimport inquirer from 'inquirer';\nimport { execa } from 'execa';\nimport open from 'open';\nimport { GitAnalyzer } from '../core/git-analyzer.js';\nimport { CopilotClient } from '../core/copilot.js';\nimport { UI } from '../utils/ui.js';\nimport { spinner, copyToClipboard } from '../utils/helpers.js';\nimport { extractIssueNumbers, generatePRTitle, categorizePRType } from '../utils/commitlint.js';\n\nexport const prCommand = new Command('pr')\n .description('Generate PR description from current branch')\n .option('-b, --base <branch>', 'Base branch to compare against', 'main')\n .option('-c, --create', 'Create PR on GitHub')\n .option('-d, --draft', 'Create as draft PR')\n .option('-e, --edit', 'Edit description before creating')\n .action(async (options) => {\n const git = new GitAnalyzer();\n const copilot = new CopilotClient();\n\n // Check if in git repo\n if (!(await git.isRepository())) {\n console.log(UI.error('Not a git repository'));\n process.exit(1);\n }\n\n // Check if Copilot CLI is installed\n if (!(await copilot.isInstalled())) {\n console.log(UI.error('GitHub Copilot CLI not found'));\n console.log(UI.info('Install with: gh extension install github/gh-copilot'));\n process.exit(1);\n }\n\n const load = spinner('Analyzing branch...').start();\n\n try {\n // Get current branch\n const currentBranch = await git.getCurrentBranch();\n\n if (currentBranch === options.base) {\n load.stop();\n console.log(UI.error(`Cannot create PR from ${options.base} branch`));\n console.log(UI.info('Switch to a feature branch first'));\n process.exit(1);\n }\n\n // Get commits on this branch\n const commits = await git.getCommits();\n\n if (commits.length === 0) {\n load.stop();\n console.log(UI.warning('No commits on this branch'));\n process.exit(0);\n }\n\n // Get changed files\n const files = await git.getChangedFiles(options.base);\n\n // Extract issue numbers\n const commitMessages = commits.map((c) => c.message);\n const allText = commitMessages.join(' ');\n const issues = extractIssueNumbers(allText);\n\n // Generate PR title from commits\n const suggestedTitle = generatePRTitle(commitMessages);\n const prType = categorizePRType(commitMessages);\n\n load.text = 'Generating PR description with Copilot CLI...';\n\n // Generate description\n const description = await copilot.generatePRDescription({\n branch: currentBranch,\n commits: commitMessages,\n files,\n issues,\n });\n\n load.stop();\n\n // Display\n console.log(\n UI.box(\n `${UI.colors.bold(suggestedTitle)}\\n\\n${description}\\n\\n${UI.divider()}\\n${UI.dim(`${commits.length} commits • ${files.length} files changed • ${prType}`)}`,\n `PR Description for ${currentBranch}`\n )\n );\n\n // Interactive options\n const { action } = await inquirer.prompt([\n {\n type: 'list',\n name: 'action',\n message: 'What would you like to do?',\n choices: [\n { name: 'Preview in browser (render markdown)', value: 'preview' },\n { name: 'Copy to clipboard', value: 'copy' },\n { name: 'Create PR on GitHub', value: 'create' },\n { name: 'Create draft PR', value: 'draft' },\n { name: 'Exit', value: 'exit' },\n ],\n },\n ]);\n\n if (action === 'copy') {\n await copyToClipboard(description);\n } else if (action === 'preview') {\n // Create temporary markdown file and open in browser\n console.log(UI.info('Opening preview in browser...'));\n // TODO: Implement preview (save to temp file, open with `open` package)\n await open(`https://github.com`);\n } else if (action === 'create' || action === 'draft') {\n const isDraft = action === 'draft' || options.draft;\n\n const createSpinner = spinner(`Creating ${isDraft ? 'draft ' : ''}PR...`).start();\n\n try {\n const args = [\n 'pr',\n 'create',\n '--title',\n suggestedTitle,\n '--body',\n description,\n '--base',\n options.base,\n ];\n\n if (isDraft) {\n args.push('--draft');\n }\n\n const { stdout } = await execa('gh', args);\n\n createSpinner.stop();\n console.log(UI.success('PR created successfully'));\n console.log(UI.dim(stdout));\n } catch (error) {\n createSpinner.stop();\n console.log(UI.error('Failed to create PR'));\n console.log(UI.dim((error as Error).message));\n }\n }\n } catch (error) {\n load.stop();\n console.log(UI.error('Failed to generate PR description'));\n console.log(UI.dim((error as Error).message));\n process.exit(1);\n }\n });\n","import type { ConventionalCommit } from '../types/index.js';\n\nconst COMMIT_PATTERN =\n // eslint-disable-next-line no-useless-escape\n /^(feat|fix|docs|style|refactor|test|chore|perf|ci|build|revert)(\\([^\\)]+\\))?(!)?:\\s*(.+)$/;\n\nexport function parseConventionalCommit(message: string): ConventionalCommit | null {\n const match = message.match(COMMIT_PATTERN);\n\n if (!match) {\n return null;\n }\n\n const [, type, scope, breaking, subject] = match;\n\n return {\n type: type as ConventionalCommit['type'],\n scope: scope?.replace(/[()]/g, ''),\n subject: subject.trim(),\n breaking: breaking === '!',\n };\n}\n\nexport function extractIssueNumbers(text: string): string[] {\n const issuePattern = /#(\\d+)/g;\n const matches = text.matchAll(issuePattern);\n return Array.from(matches, (m) => `#${m[1]}`);\n}\n\nexport function generatePRTitle(commits: string[]): string {\n // Try to parse conventional commits\n const parsed = commits\n .map(parseConventionalCommit)\n .filter((c): c is ConventionalCommit => c !== null);\n\n if (parsed.length === 0) {\n // Fallback: use first commit message\n return commits[0] || 'Update';\n }\n\n // Group by type\n const features = parsed.filter((c) => c.type === 'feat');\n const fixes = parsed.filter((c) => c.type === 'fix');\n\n if (features.length > 0) {\n return features[0].subject;\n }\n\n if (fixes.length > 0) {\n return `Fix: ${fixes[0].subject}`;\n }\n\n return parsed[0].subject;\n}\n\nexport function categorizePRType(commits: string[]): string {\n const parsed = commits\n .map(parseConventionalCommit)\n .filter((c): c is ConventionalCommit => c !== null);\n\n const hasFeatures = parsed.some((c) => c.type === 'feat');\n const hasFixes = parsed.some((c) => c.type === 'fix');\n const hasBreaking = parsed.some((c) => c.breaking);\n\n if (hasBreaking) return 'breaking';\n if (hasFeatures) return 'feature';\n if (hasFixes) return 'bugfix';\n return 'chore';\n}\n","import { Command } from 'commander';\nimport { GitAnalyzer } from '../core/git-analyzer.js';\nimport { CopilotClient } from '../core/copilot.js';\nimport { UI } from '../utils/ui.js';\nimport {\n spinner,\n copyToClipboard,\n getWeekStart,\n getWeekEnd,\n formatDateRange,\n} from '../utils/helpers.js';\n\nexport const weekCommand = new Command('week')\n .description('Generate weekly work summary')\n .option('-l, --last', 'Last week instead of current week')\n .option('--no-copy', 'Do not copy to clipboard')\n .action(async (options) => {\n const git = new GitAnalyzer();\n const copilot = new CopilotClient();\n\n // Check if in git repo\n if (!(await git.isRepository())) {\n console.log(UI.error('Not a git repository'));\n process.exit(1);\n }\n\n // Check if Copilot CLI is installed\n if (!(await copilot.isInstalled())) {\n console.log(UI.error('GitHub Copilot CLI not found'));\n process.exit(1);\n }\n\n const load = spinner('Analyzing your week...').start();\n\n try {\n const weeksAgo = options.last ? 1 : 0;\n const start = getWeekStart(weeksAgo);\n const end = getWeekEnd(weeksAgo);\n\n // Get user info\n const user = await git.getCurrentUser();\n\n // Get commits\n const commits = await git.getCommits({\n since: start,\n until: end,\n author: user.email,\n });\n\n if (commits.length === 0) {\n load.stop();\n console.log(UI.warning('No commits found this week'));\n process.exit(0);\n }\n\n // Get stats\n const stats = await git.getDiffStats();\n\n load.text = 'Generating summary with Copilot CLI...';\n\n // Generate summary\n const commitMessages = commits.map((c) => c.message);\n const summary = await copilot.generateWeeklySummary({\n commits: commitMessages,\n stats: {\n commits: commits.length,\n linesAdded: stats.insertions,\n linesRemoved: stats.deletions,\n },\n });\n\n load.stop();\n\n // Display\n const title = `Week in Review (${formatDateRange(start, end)})`;\n const content = `${summary}\\n\\n${UI.divider()}\\n${UI.dim(`${commits.length} commits • ${stats.insertions}+ ${stats.deletions}- lines`)}`;\n\n console.log(UI.box(content, title));\n\n // Copy to clipboard\n if (options.copy) {\n await copyToClipboard(summary);\n }\n } catch (error) {\n load.stop();\n console.log(UI.error('Failed to generate weekly summary'));\n console.log(UI.dim((error as Error).message));\n process.exit(1);\n }\n });\n","import { Command } from 'commander';\nimport { UI } from '../utils/ui.js';\n\nexport const contextCommand = new Command('context')\n .description('Recover what you were working on (coming soon)')\n .action(async () => {\n console.log(UI.info('Context recovery feature coming soon!'));\n console.log(UI.dim('This will help you remember what you were working on after interruptions'));\n });\n"],"mappings":"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","names":["Command","Command","execa","Command","execa","Command","Command","Command","Command","Command"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/commands/standup.ts","../src/core/git-analyzer.ts","../src/core/copilot.ts","../src/utils/ui.ts","../src/utils/helpers.ts","../src/commands/pr.ts","../src/utils/commitlint.ts","../src/commands/week.ts","../src/commands/context.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { standupCommand } from './commands/standup.js';\nimport { prCommand } from './commands/pr.js';\nimport { weekCommand } from './commands/week.js';\nimport { contextCommand } from './commands/context.js';\n\nconst program = new Command();\n\nprogram.name('devdaily').description('Your AI memory for developer work').version('1.0.0');\n\n// Register commands\nprogram.addCommand(standupCommand);\nprogram.addCommand(prCommand);\nprogram.addCommand(weekCommand);\nprogram.addCommand(contextCommand);\n\n// Parse and execute\nprogram.parse();\n","import { Command } from 'commander';\nimport { GitAnalyzer } from '../core/git-analyzer.js';\nimport { CopilotClient } from '../core/copilot.js';\nimport { UI } from '../utils/ui.js';\nimport { spinner, copyToClipboard, getDaysAgo } from '../utils/helpers.js';\n\nexport const standupCommand = new Command('standup')\n .description('Generate standup notes from your recent commits')\n .option('-d, --days <number>', 'Number of days to look back', '1')\n .option('-f, --format <type>', 'Output format (markdown|slack|plain)', 'markdown')\n .option('--no-copy', 'Do not copy to clipboard')\n .action(async (options) => {\n const git = new GitAnalyzer();\n const copilot = new CopilotClient();\n\n // Check if in git repo\n if (!(await git.isRepository())) {\n console.log(UI.error('Not a git repository'));\n console.log(UI.info('Run this command inside a git repository'));\n process.exit(1);\n }\n\n // Check if Copilot CLI is installed\n if (!(await copilot.isInstalled())) {\n console.log(UI.error('GitHub Copilot CLI not found'));\n console.log(UI.info('Install with: gh extension install github/gh-copilot'));\n process.exit(1);\n }\n\n const load = spinner('Analyzing your work...').start();\n\n try {\n // Get commits\n const days = parseInt(options.days, 10);\n const since = getDaysAgo(days);\n const commits = await git.getCommits({\n since,\n });\n\n if (commits.length === 0) {\n load.stop();\n console.log(UI.warning(`No commits found in the last ${days} day(s)`));\n console.log(UI.info(`Try: devdaily standup --days=${days + 1}`));\n process.exit(0);\n }\n\n load.text = 'Generating standup notes with Copilot CLI...';\n\n // Generate standup using Copilot\n const commitMessages = commits.map((c) => c.message);\n const standup = await copilot.summarizeCommits(commitMessages);\n\n load.stop();\n\n // Format output\n const title = days === 1 ? 'Your Standup' : `Your Work (Last ${days} Days)`;\n const content = `${standup}\\n\\n${UI.divider()}\\n${UI.dim(`${commits.length} commits analyzed`)}`;\n\n console.log(UI.box(content, title));\n\n // Copy to clipboard\n if (options.copy) {\n await copyToClipboard(standup);\n }\n } catch (error) {\n load.stop();\n console.log(UI.error('Failed to generate standup'));\n console.log(UI.dim((error as Error).message));\n process.exit(1);\n }\n });\n","import simpleGit, { SimpleGit } from 'simple-git';\nimport { Commit, CommitOptions, DiffStats } from '../types';\n\nexport class GitAnalyzer {\n private git: SimpleGit;\n\n constructor(repoPath?: string) {\n this.git = simpleGit(repoPath || process.cwd());\n }\n\n async isRepository(): Promise<boolean> {\n try {\n await this.git.revparse(['--is-inside-work-tree']);\n return true;\n } catch {\n return false;\n }\n }\n\n async getCurrentBranch(): Promise<string> {\n const branch = await this.git.revparse(['--abbrev-ref', 'HEAD']);\n return branch.trim();\n }\n\n async getCommits(options: CommitOptions = {}): Promise<Commit[]> {\n const args: string[] = ['log'];\n\n if (options.since) {\n args.push(`--since=${options.since.toISOString()}`);\n }\n\n if (options.until) {\n args.push(`--until=${options.until.toISOString()}`);\n }\n\n if (options.author) {\n args.push(`--author=${options.author}`);\n }\n\n args.push('--format=%H|%s|%b|%an|%ae|%ai');\n\n const result = await this.git.raw(args);\n\n const commits = result\n .trim()\n .split('\\n')\n .filter(Boolean)\n .map((line) => {\n const parts = line.split('|');\n const [hash, message, body, author, _authorEmail, date] = parts;\n return {\n hash,\n message,\n author,\n date: new Date(date),\n body: body || '',\n };\n });\n\n return commits;\n }\n\n async getDiff(base: string = 'main', head: string = 'HEAD'): Promise<string> {\n const diff = await this.git.diff([`${base}...${head}`]);\n return diff;\n }\n\n async getDiffStats(base: string = 'main', head: string = 'HEAD'): Promise<DiffStats> {\n const diffSummary = await this.git.diffSummary([`${base}...${head}`]);\n\n return {\n filesChanged: diffSummary.files.length,\n insertions: diffSummary.insertions,\n deletions: diffSummary.deletions,\n };\n }\n\n async getChangedFiles(base: string = 'main', head: string = 'HEAD'): Promise<string[]> {\n const diff = await this.git.diff([`${base}...${head}`, '--name-only']);\n return diff.split('\\n').filter(Boolean);\n }\n\n async getCurrentUser(): Promise<{ name: string; email: string }> {\n const name = await this.git.getConfig('user.name');\n const email = await this.git.getConfig('user.email');\n\n return {\n name: name.value || '',\n email: email.value || '',\n };\n }\n\n async getStatus(): Promise<{ modified: string[]; untracked: string[] }> {\n const status = await this.git.status();\n\n return {\n modified: status.modified,\n untracked: status.not_added,\n };\n }\n\n async hasUncommittedChanges(): Promise<boolean> {\n const status = await this.git.status();\n return !status.isClean();\n }\n}\n","import { execa } from 'execa';\n\nexport class CopilotClient {\n async isInstalled(): Promise<boolean> {\n try {\n await execa('gh', ['copilot', '--version']);\n return true;\n } catch {\n return false;\n }\n }\n\n async suggest(prompt: string): Promise<string> {\n try {\n const { stdout } = await execa('gh', ['copilot', 'suggest', '-t', 'shell', prompt]);\n\n return this.parseOutput(stdout);\n } catch (error) {\n throw new Error(`Copilot CLI error: ${error}`);\n }\n }\n\n async explain(code: string): Promise<string> {\n try {\n const { stdout } = await execa('gh', ['copilot', 'explain', code]);\n return this.parseOutput(stdout);\n } catch (error) {\n throw new Error(`Copilot CLI error: ${error}`);\n }\n }\n\n private parseOutput(raw: string): string {\n // The gh copilot CLI wraps output in UI elements\n // We need to extract just the AI response\n\n // Remove ANSI codes\n // eslint-disable-next-line no-control-regex\n const cleaned = raw.replace(/\\x1B\\[[0-9;]*[a-zA-Z]/g, '');\n\n // Extract the actual suggestion (between prompts)\n const lines = cleaned.split('\\n');\n const relevantLines = lines.filter(\n (line) =>\n line.trim() &&\n !line.includes('Suggestion:') &&\n !line.includes('Explain command:') &&\n !line.includes('?')\n );\n\n return relevantLines.join('\\n').trim();\n }\n\n async summarizeCommits(commits: string[]): Promise<string> {\n const prompt = `\nYou are helping a developer write their standup notes.\n\nHere are their git commits from yesterday:\n${commits.map((c, i) => `${i + 1}. ${c}`).join('\\n')}\n\nGenerate a professional standup update following this format:\n\nYesterday I:\n- [achievement 1 with impact]\n- [achievement 2 with impact]\n- [achievement 3 with impact]\n\nToday I'm working on:\n- [planned work based on commits]\n\nBlockers: None\n\nRequirements:\n- Make it sound natural and professional\n- Focus on WHAT was accomplished, not HOW\n- Highlight business impact when possible\n- Keep it concise (3-5 bullet points max)\n- No emojis\n`;\n\n return this.suggest(prompt);\n }\n\n async generatePRDescription(data: {\n branch: string;\n commits: string[];\n files: string[];\n issues: string[];\n }): Promise<string> {\n const prompt = `\nYou are helping a developer create a Pull Request description.\n\nBranch: ${data.branch}\n\nCommits:\n${data.commits.map((c, i) => `${i + 1}. ${c}`).join('\\n')}\n\nFiles changed:\n${data.files.join('\\n')}\n\nRelated issues: ${data.issues.length > 0 ? data.issues.join(', ') : 'None'}\n\nGenerate a comprehensive PR description following this template:\n\n## What Changed\n- [bullet point 1]\n- [bullet point 2]\n- [bullet point 3]\n\n## Why\n[Business or technical reason for these changes]\n${data.issues.length > 0 ? `Closes ${data.issues.join(', ')}` : ''}\n\n## How to Test\n1. [testing step 1]\n2. [testing step 2]\n3. [testing step 3]\n\nRequirements:\n- Be specific and technical where appropriate\n- Focus on value for code reviewers\n- Keep it clear and concise\n- No emojis\n`;\n\n return this.suggest(prompt);\n }\n\n async generateWeeklySummary(data: {\n commits: string[];\n stats: {\n commits: number;\n linesAdded: number;\n linesRemoved: number;\n };\n }): Promise<string> {\n const prompt = `\nYou are helping a developer create their weekly work summary.\n\nThis week's commits:\n${data.commits.map((c, i) => `${i + 1}. ${c}`).join('\\n')}\n\nStatistics:\n- ${data.stats.commits} commits\n- ${data.stats.linesAdded} lines added\n- ${data.stats.linesRemoved} lines removed\n\nGenerate a professional weekly summary following this format:\n\nKey Accomplishments:\n1. [Major accomplishment with impact]\n2. [Second accomplishment]\n3. [Third accomplishment]\n4. [Fourth accomplishment]\n5. [Fifth accomplishment]\n\nTop Achievement:\n[Single sentence highlighting the most impactful work]\n\nRequirements:\n- Focus on business value and impact\n- Be suitable for sharing with manager or team\n- Highlight 3-5 key accomplishments\n- Keep it professional\n- No emojis\n`;\n\n return this.suggest(prompt);\n }\n}\n","import chalk from 'chalk';\nimport boxen from 'boxen';\n\n// Clean, minimal UI inspired by terminal.shop\n// No emojis, professional output\n\nexport class UI {\n static readonly colors = {\n primary: chalk.blue,\n success: chalk.green,\n warning: chalk.yellow,\n error: chalk.red,\n dim: chalk.gray,\n bold: chalk.bold,\n };\n\n static header(title: string): string {\n return this.colors.bold(title);\n }\n\n static section(title: string, content: string): string {\n return `\\n${this.colors.primary(title)}\\n${content}`;\n }\n\n static box(content: string, title?: string): string {\n return boxen(content, {\n padding: 1,\n margin: 1,\n borderStyle: 'round',\n borderColor: 'blue',\n title: title,\n titleAlignment: 'left',\n });\n }\n\n static list(items: string[]): string {\n return items.map((item) => ` ${this.colors.dim('>')} ${item}`).join('\\n');\n }\n\n static success(message: string): string {\n return this.colors.success(`✓ ${message}`);\n }\n\n static error(message: string): string {\n return this.colors.error(`✗ ${message}`);\n }\n\n static warning(message: string): string {\n return this.colors.warning(`! ${message}`);\n }\n\n static info(message: string): string {\n return this.colors.dim(`i ${message}`);\n }\n\n static divider(): string {\n return this.colors.dim('─'.repeat(50));\n }\n\n static dim(text: string): string {\n return this.colors.dim(text);\n }\n\n static table(headers: string[], rows: string[][]): string {\n const colWidths = headers.map((h, i) => {\n const maxRowWidth = Math.max(...rows.map((r) => r[i]?.length || 0));\n return Math.max(h.length, maxRowWidth);\n });\n\n const headerRow = headers.map((h, i) => h.padEnd(colWidths[i])).join(' ');\n\n const separator = colWidths.map((w) => '─'.repeat(w)).join(' ');\n\n const dataRows = rows\n .map((row) => row.map((cell, i) => cell.padEnd(colWidths[i])).join(' '))\n .join('\\n');\n\n return `${this.colors.bold(headerRow)}\\n${this.colors.dim(separator)}\\n${dataRows}`;\n }\n\n static progress(current: number, total: number, label: string): string {\n const percentage = Math.round((current / total) * 100);\n const barLength = 30;\n const filled = Math.round((barLength * current) / total);\n const bar = '█'.repeat(filled) + '░'.repeat(barLength - filled);\n\n return `${label} ${this.colors.primary(bar)} ${percentage}%`;\n }\n}\n","import ora from 'ora';\nimport clipboard from 'clipboardy';\nimport { UI } from './ui.js';\n\nexport async function copyToClipboard(text: string): Promise<void> {\n try {\n await clipboard.write(text);\n console.log(UI.success('Copied to clipboard'));\n } catch {\n console.log(UI.warning('Failed to copy to clipboard'));\n }\n}\n\nexport function spinner(text: string) {\n return ora({\n text,\n spinner: 'dots',\n color: 'blue',\n });\n}\n\nexport function formatDate(date: Date): string {\n return date.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n });\n}\n\nexport function formatDateRange(start: Date, end: Date): string {\n return `${formatDate(start)} - ${formatDate(end)}`;\n}\n\nexport function getWeekStart(weeksAgo: number = 0): Date {\n const now = new Date();\n const dayOfWeek = now.getDay();\n const monday = new Date(now);\n monday.setDate(now.getDate() - dayOfWeek + (dayOfWeek === 0 ? -6 : 1));\n monday.setDate(monday.getDate() - weeksAgo * 7);\n monday.setHours(0, 0, 0, 0);\n return monday;\n}\n\nexport function getWeekEnd(weeksAgo: number = 0): Date {\n const start = getWeekStart(weeksAgo);\n const end = new Date(start);\n end.setDate(start.getDate() + 6);\n end.setHours(23, 59, 59, 999);\n return end;\n}\n\nexport function getDaysAgo(days: number): Date {\n const date = new Date();\n date.setDate(date.getDate() - days);\n date.setHours(0, 0, 0, 0);\n return date;\n}\n","import { Command } from 'commander';\nimport inquirer from 'inquirer';\nimport { execa } from 'execa';\nimport open from 'open';\nimport { GitAnalyzer } from '../core/git-analyzer.js';\nimport { CopilotClient } from '../core/copilot.js';\nimport { UI } from '../utils/ui.js';\nimport { spinner, copyToClipboard } from '../utils/helpers.js';\nimport { extractIssueNumbers, generatePRTitle, categorizePRType } from '../utils/commitlint.js';\n\nexport const prCommand = new Command('pr')\n .description('Generate PR description from current branch')\n .option('-b, --base <branch>', 'Base branch to compare against', 'main')\n .option('-c, --create', 'Create PR on GitHub')\n .option('-d, --draft', 'Create as draft PR')\n .option('-e, --edit', 'Edit description before creating')\n .action(async (options) => {\n const git = new GitAnalyzer();\n const copilot = new CopilotClient();\n\n // Check if in git repo\n if (!(await git.isRepository())) {\n console.log(UI.error('Not a git repository'));\n process.exit(1);\n }\n\n // Check if Copilot CLI is installed\n if (!(await copilot.isInstalled())) {\n console.log(UI.error('GitHub Copilot CLI not found'));\n console.log(UI.info('Install with: gh extension install github/gh-copilot'));\n process.exit(1);\n }\n\n const load = spinner('Analyzing branch...').start();\n\n try {\n // Get current branch\n const currentBranch = await git.getCurrentBranch();\n\n if (currentBranch === options.base) {\n load.stop();\n console.log(UI.error(`Cannot create PR from ${options.base} branch`));\n console.log(UI.info('Switch to a feature branch first'));\n process.exit(1);\n }\n\n // Get commits on this branch\n const commits = await git.getCommits();\n\n if (commits.length === 0) {\n load.stop();\n console.log(UI.warning('No commits on this branch'));\n process.exit(0);\n }\n\n // Get changed files\n const files = await git.getChangedFiles(options.base);\n\n // Extract issue numbers\n const commitMessages = commits.map((c) => c.message);\n const allText = commitMessages.join(' ');\n const issues = extractIssueNumbers(allText);\n\n // Generate PR title from commits\n const suggestedTitle = generatePRTitle(commitMessages);\n const prType = categorizePRType(commitMessages);\n\n load.text = 'Generating PR description with Copilot CLI...';\n\n // Generate description\n const description = await copilot.generatePRDescription({\n branch: currentBranch,\n commits: commitMessages,\n files,\n issues,\n });\n\n load.stop();\n\n // Display\n console.log(\n UI.box(\n `${UI.colors.bold(suggestedTitle)}\\n\\n${description}\\n\\n${UI.divider()}\\n${UI.dim(`${commits.length} commits • ${files.length} files changed • ${prType}`)}`,\n `PR Description for ${currentBranch}`\n )\n );\n\n // Interactive options\n const { action } = await inquirer.prompt([\n {\n type: 'list',\n name: 'action',\n message: 'What would you like to do?',\n choices: [\n { name: 'Preview in browser (render markdown)', value: 'preview' },\n { name: 'Copy to clipboard', value: 'copy' },\n { name: 'Create PR on GitHub', value: 'create' },\n { name: 'Create draft PR', value: 'draft' },\n { name: 'Exit', value: 'exit' },\n ],\n },\n ]);\n\n if (action === 'copy') {\n await copyToClipboard(description);\n } else if (action === 'preview') {\n // Create temporary markdown file and open in browser\n console.log(UI.info('Opening preview in browser...'));\n // TODO: Implement preview (save to temp file, open with `open` package)\n await open(`https://github.com`);\n } else if (action === 'create' || action === 'draft') {\n const isDraft = action === 'draft' || options.draft;\n\n const createSpinner = spinner(`Creating ${isDraft ? 'draft ' : ''}PR...`).start();\n\n try {\n const args = [\n 'pr',\n 'create',\n '--title',\n suggestedTitle,\n '--body',\n description,\n '--base',\n options.base,\n ];\n\n if (isDraft) {\n args.push('--draft');\n }\n\n const { stdout } = await execa('gh', args);\n\n createSpinner.stop();\n console.log(UI.success('PR created successfully'));\n console.log(UI.dim(stdout));\n } catch (error) {\n createSpinner.stop();\n console.log(UI.error('Failed to create PR'));\n console.log(UI.dim((error as Error).message));\n }\n }\n } catch (error) {\n load.stop();\n console.log(UI.error('Failed to generate PR description'));\n console.log(UI.dim((error as Error).message));\n process.exit(1);\n }\n });\n","import type { ConventionalCommit } from '../types/index.js';\n\nconst COMMIT_PATTERN =\n // eslint-disable-next-line no-useless-escape\n /^(feat|fix|docs|style|refactor|test|chore|perf|ci|build|revert)(\\([^\\)]+\\))?(!)?:\\s*(.+)$/;\n\nexport function parseConventionalCommit(message: string): ConventionalCommit | null {\n const match = message.match(COMMIT_PATTERN);\n\n if (!match) {\n return null;\n }\n\n const [, type, scope, breaking, subject] = match;\n\n return {\n type: type as ConventionalCommit['type'],\n scope: scope?.replace(/[()]/g, ''),\n subject: subject.trim(),\n breaking: breaking === '!',\n };\n}\n\nexport function extractIssueNumbers(text: string): string[] {\n const issuePattern = /#(\\d+)/g;\n const matches = text.matchAll(issuePattern);\n return Array.from(matches, (m) => `#${m[1]}`);\n}\n\nexport function generatePRTitle(commits: string[]): string {\n // Try to parse conventional commits\n const parsed = commits\n .map(parseConventionalCommit)\n .filter((c): c is ConventionalCommit => c !== null);\n\n if (parsed.length === 0) {\n // Fallback: use first commit message\n return commits[0] || 'Update';\n }\n\n // Group by type\n const features = parsed.filter((c) => c.type === 'feat');\n const fixes = parsed.filter((c) => c.type === 'fix');\n\n if (features.length > 0) {\n return features[0].subject;\n }\n\n if (fixes.length > 0) {\n return `Fix: ${fixes[0].subject}`;\n }\n\n return parsed[0].subject;\n}\n\nexport function categorizePRType(commits: string[]): string {\n const parsed = commits\n .map(parseConventionalCommit)\n .filter((c): c is ConventionalCommit => c !== null);\n\n const hasFeatures = parsed.some((c) => c.type === 'feat');\n const hasFixes = parsed.some((c) => c.type === 'fix');\n const hasBreaking = parsed.some((c) => c.breaking);\n\n if (hasBreaking) return 'breaking';\n if (hasFeatures) return 'feature';\n if (hasFixes) return 'bugfix';\n return 'chore';\n}\n","import { Command } from 'commander';\nimport { GitAnalyzer } from '../core/git-analyzer.js';\nimport { CopilotClient } from '../core/copilot.js';\nimport { UI } from '../utils/ui.js';\nimport {\n spinner,\n copyToClipboard,\n getWeekStart,\n getWeekEnd,\n formatDateRange,\n} from '../utils/helpers.js';\n\nexport const weekCommand = new Command('week')\n .description('Generate weekly work summary')\n .option('-l, --last', 'Last week instead of current week')\n .option('--no-copy', 'Do not copy to clipboard')\n .action(async (options) => {\n const git = new GitAnalyzer();\n const copilot = new CopilotClient();\n\n // Check if in git repo\n if (!(await git.isRepository())) {\n console.log(UI.error('Not a git repository'));\n process.exit(1);\n }\n\n // Check if Copilot CLI is installed\n if (!(await copilot.isInstalled())) {\n console.log(UI.error('GitHub Copilot CLI not found'));\n process.exit(1);\n }\n\n const load = spinner('Analyzing your week...').start();\n\n try {\n const weeksAgo = options.last ? 1 : 0;\n const start = getWeekStart(weeksAgo);\n const end = getWeekEnd(weeksAgo);\n\n // Get commits\n const commits = await git.getCommits({\n since: start,\n until: end,\n });\n\n if (commits.length === 0) {\n load.stop();\n console.log(UI.warning('No commits found this week'));\n process.exit(0);\n }\n\n // Get stats\n const stats = await git.getDiffStats();\n\n load.text = 'Generating summary with Copilot CLI...';\n\n // Generate summary\n const commitMessages = commits.map((c) => c.message);\n const summary = await copilot.generateWeeklySummary({\n commits: commitMessages,\n stats: {\n commits: commits.length,\n linesAdded: stats.insertions,\n linesRemoved: stats.deletions,\n },\n });\n\n load.stop();\n\n // Display\n const title = `Week in Review (${formatDateRange(start, end)})`;\n const content = `${summary}\\n\\n${UI.divider()}\\n${UI.dim(`${commits.length} commits • ${stats.insertions}+ ${stats.deletions}- lines`)}`;\n\n console.log(UI.box(content, title));\n\n // Copy to clipboard\n if (options.copy) {\n await copyToClipboard(summary);\n }\n } catch (error) {\n load.stop();\n console.log(UI.error('Failed to generate weekly summary'));\n console.log(UI.dim((error as Error).message));\n process.exit(1);\n }\n });\n","import { Command } from 'commander';\nimport { UI } from '../utils/ui.js';\n\nexport const contextCommand = new Command('context')\n .description('Recover what you were working on (coming soon)')\n .action(async () => {\n console.log(UI.info('Context recovery feature coming soon!'));\n console.log(UI.dim('This will help you remember what you were working on after interruptions'));\n });\n"],"mappings":"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","names":["Command","Command","execa","Command","execa","Command","Command","Command","Command","Command"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "devdaily-ai",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "Your AI memory for developer work - auto-generate PR descriptions, standup notes, and work summaries",
5
5
  "type": "module",
6
6
  "bin": {