UNPKG

@fromsvenwithlove/devops-issues-cli

Version:

AI-powered CLI tool and library for Azure DevOps work item management with Claude agents

115 lines (97 loc) 3.14 kB
import inquirer from 'inquirer'; import chalk from 'chalk'; import { getConfig, ConfigError } from '../config/index.js'; import { AzureDevOpsClient } from '../api/azure-client.js'; import { formatWorkItemsAsTable, formatWorkItemsAsJson, formatWorkItemsMinimal, formatSummary } from '../utils/formatter.js'; import { mainMenuPrompt, stateFilterPrompt, outputFormatPrompt } from './prompts.js'; import { TreeNavigator } from '../explorer/tree-navigator.js'; export async function runInteractiveMode() { console.log(chalk.bold.blue('\nAzure DevOps Issue Tracker\n')); try { // Get configuration const config = getConfig(); // Create and connect client const client = new AzureDevOpsClient(config); await client.connect(); // Main interactive loop let shouldContinue = true; while (shouldContinue) { const { action } = await inquirer.prompt(mainMenuPrompt); switch (action) { case 'list-all': await listAllIssues(client); break; case 'filter-state': await filterByState(client); break; case 'explore': await exploreIssues(client); break; case 'exit': shouldContinue = false; console.log(chalk.green('\nGoodbye!\n')); break; } } } catch (error) { if (error instanceof ConfigError) { console.error(chalk.red('Configuration Error:')); console.error(error.message); process.exit(1); } else { console.error(chalk.red('Error:'), error.message); process.exit(3); } } } async function listAllIssues(client) { const { format } = await inquirer.prompt(outputFormatPrompt); const workItems = await client.getAssignedWorkItems(); displayResults(workItems, format); } async function filterByState(client) { const { state } = await inquirer.prompt(stateFilterPrompt); const { format } = await inquirer.prompt(outputFormatPrompt); let options = {}; if (state === 'active-new') { // Special case for Active and New options.multiState = ['Active', 'New']; } else if (state !== 'all') { options.state = state; } const workItems = await client.getAssignedWorkItems(options); displayResults(workItems, format); } async function exploreIssues(client) { const workItems = await client.getAssignedWorkItems(); if (workItems.length === 0) { console.log(chalk.green('\n✅ No work items found\n')); return; } const navigator = new TreeNavigator(workItems); await navigator.navigate(); } function displayResults(workItems, format) { if (workItems.length === 0) { console.log(chalk.green('\n✅ No work items found\n')); return; } console.log(''); // Empty line for better formatting switch (format) { case 'json': console.log(formatWorkItemsAsJson(workItems)); break; case 'minimal': console.log(formatWorkItemsMinimal(workItems)); break; default: console.log(formatWorkItemsAsTable(workItems)); console.log(formatSummary(workItems)); } console.log(''); // Empty line after results }