@kolatts/pncli 1.0.1
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/LICENSE +201 -0
- package/NOTICE +81 -0
- package/README.md +93 -0
- package/copilot-instructions.md +159 -0
- package/dist/cli.js +1536 -0
- package/dist/cli.js.map +1 -0
- package/package.json +49 -0
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts","../src/lib/output.ts","../src/lib/errors.ts","../src/services/git/client.ts","../src/lib/git-context.ts","../src/lib/config.ts","../src/lib/http.ts","../src/services/bitbucket/client.ts","../src/services/git/commands.ts","../src/services/jira/client.ts","../src/services/jira/commands.ts","../src/services/bitbucket/commands.ts","../src/services/confluence/commands.ts","../src/services/sonar/commands.ts","../src/services/artifactory/commands.ts","../src/services/config/commands.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { createRequire } from 'module';\nimport { setGlobalOptions } from './lib/output.js';\nimport { registerGitCommands } from './services/git/commands.js';\nimport { registerJiraCommands } from './services/jira/commands.js';\nimport { registerBitbucketCommands } from './services/bitbucket/commands.js';\nimport { registerConfluenceCommands } from './services/confluence/commands.js';\nimport { registerSonarCommands } from './services/sonar/commands.js';\nimport { registerArtifactoryCommands } from './services/artifactory/commands.js';\nimport { registerConfigCommands } from './services/config/commands.js';\n\nconst require = createRequire(import.meta.url);\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst pkg = require('../package.json') as any;\n\nconst TAGLINE = 'One command does what three meetings couldn\\'t.';\n\nconst program = new Command();\n\nprogram\n .name('pncli')\n .description(`The Paperwork Nightmare CLI — ${TAGLINE}`)\n .version(`${pkg.version as string} — ${TAGLINE}`, '-v, --version')\n .option('--pretty', 'Human-readable formatted output', false)\n .option('--verbose', 'Include full response metadata', false)\n .option('--dry-run', 'Print API requests without executing', false)\n .option('--config <path>', 'Override global config file location');\n\n// Propagate global options before any command runs\nprogram.hook('preAction', (thisCommand) => {\n const opts = thisCommand.optsWithGlobals();\n setGlobalOptions({\n pretty: Boolean(opts.pretty),\n verbose: Boolean(opts.verbose)\n });\n});\n\nregisterGitCommands(program);\nregisterJiraCommands(program);\nregisterBitbucketCommands(program);\nregisterConfluenceCommands(program);\nregisterSonarCommands(program);\nregisterArtifactoryCommands(program);\nregisterConfigCommands(program);\n\nprogram.addHelpText('after', `\nServices:\n git Local git operations (status, diff, log, branch)\n jira Jira Data Cloud (coming soon)\n bitbucket Bitbucket Server (coming soon)\n confluence Confluence (coming soon)\n sonar SonarQube (coming soon)\n artifactory Artifactory (coming soon)\n config Manage pncli configuration\n`);\n\nprogram.parseAsync(process.argv).catch((err: unknown) => {\n process.stderr.write(`Fatal: ${err instanceof Error ? err.message : String(err)}\\n`);\n process.exit(1);\n});\n","import chalk from 'chalk';\nimport type { Meta, SuccessEnvelope, ErrorEnvelope, ErrorDetail } from '../types/common.js';\nimport { PncliError } from './errors.js';\n\nlet globalOptions = { pretty: false, verbose: false };\n\nexport function setGlobalOptions(opts: { pretty: boolean; verbose: boolean }): void {\n globalOptions = opts;\n}\n\nfunction buildMeta(service: string, action: string, startTime: number): Meta {\n return {\n service,\n action,\n timestamp: new Date().toISOString(),\n duration_ms: Date.now() - startTime\n };\n}\n\nexport function success<T>(data: T, service: string, action: string, startTime: number): void {\n const envelope: SuccessEnvelope<T> = {\n ok: true,\n data,\n meta: buildMeta(service, action, startTime)\n };\n process.stdout.write(\n (globalOptions.pretty ? JSON.stringify(envelope, null, 2) : JSON.stringify(envelope)) + '\\n'\n );\n}\n\nexport function fail(\n err: unknown,\n service: string,\n action: string,\n startTime: number\n): never {\n const errorDetail: ErrorDetail = {\n status: err instanceof PncliError ? err.status : 1,\n message: err instanceof Error ? err.message : String(err),\n url: err instanceof PncliError ? (err.url ?? null) : null\n };\n\n const envelope: ErrorEnvelope = {\n ok: false,\n error: errorDetail,\n meta: buildMeta(service, action, startTime)\n };\n\n const msg = globalOptions.pretty\n ? chalk.red('✗ Error: ') + errorDetail.message\n : null;\n\n if (msg) process.stderr.write(msg + '\\n');\n\n process.stdout.write(\n (globalOptions.pretty ? JSON.stringify(envelope, null, 2) : JSON.stringify(envelope)) + '\\n'\n );\n\n process.exit(1);\n}\n\nexport function log(message: string): void {\n if (globalOptions.verbose) {\n process.stderr.write(\n (globalOptions.pretty ? chalk.gray('▸ ') : '') + message + '\\n'\n );\n }\n}\n\nexport function warn(message: string): void {\n process.stderr.write(\n (globalOptions.pretty ? chalk.yellow('⚠ ') : '') + message + '\\n'\n );\n}\n","export class PncliError extends Error {\n status: number;\n url?: string;\n\n constructor(message: string, status: number = 1, url?: string) {\n super(message);\n this.name = 'PncliError';\n this.status = status;\n this.url = url;\n }\n}\n","import { execSync, execFileSync } from 'child_process';\n\nconst DIFF_LINE_LIMIT = 5000;\n\nexport interface GitStatusResult {\n staged: string[];\n unstaged: string[];\n untracked: string[];\n}\n\nexport interface DiffHunk {\n oldStart: number;\n oldCount: number;\n newStart: number;\n newCount: number;\n lines: string[];\n}\n\nexport interface DiffFile {\n path: string;\n binary: boolean;\n truncated: boolean;\n hunks: DiffHunk[];\n}\n\nexport interface DiffResult {\n files: DiffFile[];\n truncated: boolean;\n}\n\nexport interface CommitEntry {\n hash: string;\n author: string;\n date: string;\n message: string;\n}\n\nexport interface BranchResult {\n current: string;\n local: string[];\n remote: string[];\n}\n\nfunction exec(cmd: string, cwd: string): string {\n return execSync(cmd, { encoding: 'utf8', cwd }).trim();\n}\n\nexport function getStatus(root: string): GitStatusResult {\n const output = exec('git status --porcelain', root);\n const staged: string[] = [];\n const unstaged: string[] = [];\n const untracked: string[] = [];\n\n if (!output) return { staged, unstaged, untracked };\n\n for (const line of output.split('\\n')) {\n if (!line) continue;\n const x = line[0]!;\n const y = line[1]!;\n const file = line.slice(3);\n\n if (x === '?' && y === '?') {\n untracked.push(file);\n } else {\n if (x !== ' ' && x !== '?') staged.push(file);\n if (y !== ' ' && y !== '?') unstaged.push(file);\n }\n }\n\n return { staged, unstaged, untracked };\n}\n\nfunction parseHunkHeader(header: string): { oldStart: number; oldCount: number; newStart: number; newCount: number } {\n const match = header.match(/@@ -(\\d+)(?:,(\\d+))? \\+(\\d+)(?:,(\\d+))? @@/);\n if (!match) return { oldStart: 0, oldCount: 0, newStart: 0, newCount: 0 };\n return {\n oldStart: parseInt(match[1]!, 10),\n oldCount: parseInt(match[2] ?? '1', 10),\n newStart: parseInt(match[3]!, 10),\n newCount: parseInt(match[4] ?? '1', 10)\n };\n}\n\nfunction parseDiff(rawDiff: string): DiffResult {\n const lines = rawDiff.split('\\n');\n const files: DiffFile[] = [];\n let globalTruncated = false;\n let lineCount = 0;\n\n let currentFile: DiffFile | null = null;\n let currentHunk: DiffHunk | null = null;\n\n for (const line of lines) {\n lineCount++;\n if (lineCount > DIFF_LINE_LIMIT) {\n globalTruncated = true;\n if (currentFile) currentFile.truncated = true;\n break;\n }\n\n if (line.startsWith('diff --git ')) {\n if (currentHunk && currentFile) currentFile.hunks.push(currentHunk);\n currentHunk = null;\n if (currentFile) files.push(currentFile);\n\n const pathMatch = line.match(/diff --git a\\/(.+) b\\/.+$/);\n currentFile = {\n path: pathMatch ? pathMatch[1]! : line,\n binary: false,\n truncated: false,\n hunks: []\n };\n continue;\n }\n\n if (!currentFile) continue;\n\n if (line.startsWith('Binary files')) {\n currentFile.binary = true;\n continue;\n }\n\n if (line.startsWith('@@ ')) {\n if (currentHunk) currentFile.hunks.push(currentHunk);\n const { oldStart, oldCount, newStart, newCount } = parseHunkHeader(line);\n currentHunk = { oldStart, oldCount, newStart, newCount, lines: [] };\n continue;\n }\n\n if (currentHunk && (line.startsWith('+') || line.startsWith('-') || line.startsWith(' '))) {\n currentHunk.lines.push(line);\n }\n }\n\n if (currentHunk && currentFile) currentFile.hunks.push(currentHunk);\n if (currentFile) files.push(currentFile);\n\n return { files, truncated: globalTruncated };\n}\n\nexport function getDiff(root: string, opts: { staged?: boolean; file?: string }): DiffResult {\n const args = ['git', 'diff'];\n if (opts.staged) args.push('--staged');\n if (opts.file) args.push('--', opts.file);\n\n try {\n const raw = exec(args.join(' '), root);\n if (!raw) return { files: [], truncated: false };\n return parseDiff(raw);\n } catch {\n return { files: [], truncated: false };\n }\n}\n\nexport function getLog(root: string, opts: { count?: number; since?: string }): CommitEntry[] {\n const sep = '\\x1F'; // ASCII unit separator — safe in git format strings\n const fmt = `%H${sep}%an${sep}%aI${sep}%s`;\n const args = [`log`, `--format=${fmt}`];\n if (opts.count) args.push(`-n`, String(opts.count));\n if (opts.since) args.push(`--since=${opts.since}`);\n\n try {\n const output = execFileSync('git', args, { encoding: 'utf8', cwd: root }).trim();\n if (!output) return [];\n return output.split('\\n').filter(Boolean).map(line => {\n const parts = line.split(sep);\n return {\n hash: parts[0] ?? '',\n author: parts[1] ?? '',\n date: parts[2] ?? '',\n message: parts[3] ?? ''\n };\n });\n } catch {\n return [];\n }\n}\n\nexport function getBranches(root: string): BranchResult {\n const output = exec('git branch -a', root);\n const local: string[] = [];\n const remote: string[] = [];\n let current = '';\n\n for (const line of output.split('\\n')) {\n if (!line.trim()) continue;\n const isCurrent = line.startsWith('*');\n const name = line.replace(/^\\*?\\s+/, '').trim();\n\n if (name.startsWith('remotes/')) {\n remote.push(name.replace('remotes/', ''));\n } else {\n if (isCurrent) current = name;\n local.push(name);\n }\n }\n\n return { current, local, remote };\n}\n","import { execSync } from 'child_process';\nimport type { ResolvedConfig } from '../types/config.js';\n\nexport interface GitContext {\n root: string;\n branch: string;\n project: string | null;\n repo: string | null;\n}\n\nexport function getRepoRoot(): string | null {\n try {\n return execSync('git rev-parse --show-toplevel', { encoding: 'utf8' }).trim();\n } catch {\n return null;\n }\n}\n\nexport function getCurrentBranch(repoRoot: string): string | null {\n try {\n return execSync('git rev-parse --abbrev-ref HEAD', {\n encoding: 'utf8',\n cwd: repoRoot\n }).trim();\n } catch {\n return null;\n }\n}\n\nexport function parseRemote(\n remoteUrl: string,\n bitbucketBaseUrl: string | undefined\n): { project: string; repo: string } | null {\n if (!bitbucketBaseUrl) return null;\n\n // Normalize base URL for comparison\n const base = bitbucketBaseUrl.replace(/\\/$/, '').replace(/^https?:\\/\\//, '');\n\n // SSH format: git@bitbucket.company.com:7999/PROJ/repo.git\n const sshMatch = remoteUrl.match(/^git@([^:]+)(?::\\d+)?[:/]([^/]+)\\/([^/]+?)(?:\\.git)?$/);\n if (sshMatch) {\n const [, host, project, repo] = sshMatch;\n if (host && base.includes(host)) {\n return { project, repo };\n }\n }\n\n // HTTPS format: https://bitbucket.company.com/scm/PROJ/repo.git\n const httpsMatch = remoteUrl.match(/^https?:\\/\\/([^/]+)\\/scm\\/([^/]+)\\/([^/]+?)(?:\\.git)?$/);\n if (httpsMatch) {\n const [, host, project, repo] = httpsMatch;\n if (host && base.includes(host)) {\n return { project, repo };\n }\n }\n\n return null;\n}\n\nfunction getRemoteUrls(repoRoot: string): string[] {\n try {\n const output = execSync('git remote -v', { encoding: 'utf8', cwd: repoRoot });\n return output\n .split('\\n')\n .filter(line => line.includes('(fetch)'))\n .map(line => line.split('\\t')[1]?.split(' ')[0] ?? '')\n .filter(Boolean);\n } catch {\n return [];\n }\n}\n\nexport function getGitContext(config: ResolvedConfig): GitContext | null {\n const root = getRepoRoot();\n if (!root) return null;\n\n const branch = getCurrentBranch(root) ?? 'unknown';\n const remoteUrls = getRemoteUrls(root);\n\n let project: string | null = null;\n let repo: string | null = null;\n\n for (const url of remoteUrls) {\n const parsed = parseRemote(url, config.bitbucket.baseUrl);\n if (parsed) {\n project = parsed.project;\n repo = parsed.repo;\n break;\n }\n }\n\n return { root, branch, project, repo };\n}\n","import fs from 'fs';\nimport os from 'os';\nimport path from 'path';\nimport { execSync } from 'child_process';\nimport type { GlobalConfig, RepoConfig, ResolvedConfig, JiraDefaults, BitbucketDefaults } from '../types/config.js';\n\nconst ENV_KEYS = {\n JIRA_BASE_URL: 'PNCLI_JIRA_BASE_URL',\n JIRA_EMAIL: 'PNCLI_JIRA_EMAIL',\n JIRA_API_TOKEN: 'PNCLI_JIRA_API_TOKEN',\n BITBUCKET_BASE_URL: 'PNCLI_BITBUCKET_BASE_URL',\n BITBUCKET_PAT: 'PNCLI_BITBUCKET_PAT',\n CONFIG_PATH: 'PNCLI_CONFIG_PATH'\n} as const;\n\nfunction getGlobalConfigPath(overridePath?: string): string {\n if (overridePath) return overridePath;\n const envPath = process.env[ENV_KEYS.CONFIG_PATH];\n if (envPath) return envPath;\n return path.join(os.homedir(), '.pncli', 'config.json');\n}\n\nfunction loadJsonFile<T>(filePath: string): T | null {\n try {\n const content = fs.readFileSync(filePath, 'utf8');\n return JSON.parse(content) as T;\n } catch {\n return null;\n }\n}\n\nfunction getRepoRoot(): string | null {\n try {\n return execSync('git rev-parse --show-toplevel', { encoding: 'utf8' }).trim();\n } catch {\n return null;\n }\n}\n\nfunction mergeDefaults(\n global: GlobalConfig['defaults'],\n repo: RepoConfig['defaults']\n): { jira: JiraDefaults; bitbucket: BitbucketDefaults } {\n return {\n jira: { ...global?.jira, ...repo?.jira },\n bitbucket: { ...global?.bitbucket, ...repo?.bitbucket }\n };\n}\n\nexport interface LoadConfigOptions {\n configPath?: string;\n}\n\nexport function loadConfig(opts: LoadConfigOptions = {}): ResolvedConfig {\n const globalConfigPath = getGlobalConfigPath(opts.configPath);\n const globalConfig = loadJsonFile<GlobalConfig>(globalConfigPath) ?? {};\n\n const repoRoot = getRepoRoot();\n let repoConfig: RepoConfig = {};\n if (repoRoot) {\n repoConfig = loadJsonFile<RepoConfig>(path.join(repoRoot, '.pncli.json')) ?? {};\n }\n\n const mergedDefaults = mergeDefaults(globalConfig.defaults, repoConfig.defaults);\n\n return {\n jira: {\n baseUrl: process.env[ENV_KEYS.JIRA_BASE_URL] ?? globalConfig.jira?.baseUrl,\n email: process.env[ENV_KEYS.JIRA_EMAIL] ?? globalConfig.jira?.email,\n apiToken: process.env[ENV_KEYS.JIRA_API_TOKEN] ?? globalConfig.jira?.apiToken\n },\n bitbucket: {\n baseUrl: process.env[ENV_KEYS.BITBUCKET_BASE_URL] ?? globalConfig.bitbucket?.baseUrl,\n pat: process.env[ENV_KEYS.BITBUCKET_PAT] ?? globalConfig.bitbucket?.pat\n },\n defaults: mergedDefaults\n };\n}\n\nexport function writeGlobalConfig(config: GlobalConfig, configPath?: string): void {\n const filePath = getGlobalConfigPath(configPath);\n const dir = path.dirname(filePath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n fs.writeFileSync(filePath, JSON.stringify(config, null, 2) + '\\n', 'utf8');\n}\n\nexport function writeRepoConfig(config: RepoConfig): void {\n const repoRoot = getRepoRoot();\n const targetDir = repoRoot ?? process.cwd();\n fs.writeFileSync(path.join(targetDir, '.pncli.json'), JSON.stringify(config, null, 2) + '\\n', 'utf8');\n}\n\nexport function setConfigValue(key: string, value: string, configPath?: string): void {\n const filePath = getGlobalConfigPath(configPath);\n const existing = loadJsonFile<GlobalConfig>(filePath) ?? {};\n\n const parts = key.split('.');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let current: any = existing;\n for (let i = 0; i < parts.length - 1; i++) {\n const part = parts[i]!;\n if (typeof current[part] !== 'object' || current[part] === null) {\n current[part] = {};\n }\n current = current[part];\n }\n current[parts[parts.length - 1]!] = value;\n\n writeGlobalConfig(existing, configPath);\n}\n\nexport function maskConfig(config: ResolvedConfig): unknown {\n return {\n ...config,\n jira: {\n ...config.jira,\n apiToken: config.jira.apiToken ? '***' : undefined\n },\n bitbucket: {\n ...config.bitbucket,\n pat: config.bitbucket.pat ? '***' : undefined\n }\n };\n}\n\nexport { getGlobalConfigPath };\n","import type { ResolvedConfig } from '../types/config.js';\nimport { PncliError } from './errors.js';\nimport { log } from './output.js';\n\nexport type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\n\nexport interface HttpRequestOptions {\n method?: HttpMethod;\n body?: unknown;\n params?: Record<string, string | number | boolean | undefined>;\n timeoutMs?: number;\n}\n\nexport interface HttpError {\n error: true;\n status: number;\n message: string;\n url: string;\n}\n\nfunction buildUrl(base: string, path: string, params?: Record<string, string | number | boolean | undefined>): string {\n const url = new URL(path, base.endsWith('/') ? base : base + '/');\n if (params) {\n for (const [key, val] of Object.entries(params)) {\n if (val !== undefined) {\n url.searchParams.set(key, String(val));\n }\n }\n }\n return url.toString();\n}\n\nasync function fetchWithTimeout(url: string, init: RequestInit, timeoutMs: number): Promise<Response> {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n try {\n return await fetch(url, { ...init, signal: controller.signal });\n } finally {\n clearTimeout(timer);\n }\n}\n\nasync function request<T>(\n url: string,\n init: RequestInit,\n timeoutMs: number\n): Promise<T> {\n let lastError: unknown;\n\n for (let attempt = 0; attempt < 3; attempt++) {\n let response: Response;\n try {\n response = await fetchWithTimeout(url, init, timeoutMs);\n } catch (err) {\n throw new PncliError(\n `Request failed: ${err instanceof Error ? err.message : String(err)}`,\n 0,\n url\n );\n }\n\n if (response.status === 429) {\n const retryAfter = response.headers.get('Retry-After');\n const waitMs = retryAfter ? parseInt(retryAfter, 10) * 1000 : (attempt + 1) * 1000;\n log(`Rate limited. Retrying after ${waitMs}ms...`);\n await new Promise(resolve => setTimeout(resolve, waitMs));\n lastError = new PncliError('Rate limited', 429, url);\n continue;\n }\n\n if (!response.ok) {\n let message = `HTTP ${response.status} ${response.statusText}`;\n try {\n const body = await response.text();\n const parsed = JSON.parse(body);\n if (parsed.message) message = parsed.message;\n else if (parsed.errors?.[0]?.message) message = parsed.errors[0].message;\n } catch {\n // ignore parse errors\n }\n throw new PncliError(message, response.status, url);\n }\n\n if (response.status === 204) {\n return undefined as T;\n }\n\n return response.json() as Promise<T>;\n }\n\n throw lastError ?? new PncliError('Request failed after retries', 1, url);\n}\n\nexport class HttpClient {\n private config: ResolvedConfig;\n private dryRun: boolean;\n\n constructor(config: ResolvedConfig, dryRun = false) {\n this.config = config;\n this.dryRun = dryRun;\n }\n\n private jiraHeaders(): Record<string, string> {\n const { email, apiToken } = this.config.jira;\n if (!email || !apiToken) throw new PncliError('Jira credentials not configured. Run: pncli config init');\n const token = Buffer.from(`${email}:${apiToken}`).toString('base64');\n return {\n 'Authorization': `Basic ${token}`,\n 'Content-Type': 'application/json',\n 'Accept': 'application/json'\n };\n }\n\n private bitbucketHeaders(): Record<string, string> {\n const { pat } = this.config.bitbucket;\n if (!pat) throw new PncliError('Bitbucket credentials not configured. Run: pncli config init');\n return {\n 'Authorization': `Bearer ${pat}`,\n 'Content-Type': 'application/json',\n 'Accept': 'application/json'\n };\n }\n\n async jira<T>(\n path: string,\n opts: HttpRequestOptions = {}\n ): Promise<T> {\n const baseUrl = this.config.jira.baseUrl;\n if (!baseUrl) throw new PncliError('Jira baseUrl not configured. Run: pncli config init');\n\n const url = buildUrl(baseUrl, path, opts.params);\n const headers = this.jiraHeaders();\n const init: RequestInit = {\n method: opts.method ?? 'GET',\n headers,\n body: opts.body !== undefined ? JSON.stringify(opts.body) : undefined\n };\n\n if (this.dryRun) {\n const safeHeaders = { ...headers, Authorization: '[REDACTED]' };\n process.stderr.write(`DRY RUN: ${init.method} ${url}\\nHeaders: ${JSON.stringify(safeHeaders, null, 2)}\\n`);\n if (opts.body) process.stderr.write(`Body: ${JSON.stringify(opts.body, null, 2)}\\n`);\n process.exit(0);\n }\n\n return request<T>(url, init, opts.timeoutMs ?? 30000);\n }\n\n async bitbucket<T>(\n path: string,\n opts: HttpRequestOptions = {}\n ): Promise<T> {\n const baseUrl = this.config.bitbucket.baseUrl;\n if (!baseUrl) throw new PncliError('Bitbucket baseUrl not configured. Run: pncli config init');\n\n const url = buildUrl(baseUrl, path, opts.params);\n const headers = this.bitbucketHeaders();\n const init: RequestInit = {\n method: opts.method ?? 'GET',\n headers,\n body: opts.body !== undefined ? JSON.stringify(opts.body) : undefined\n };\n\n if (this.dryRun) {\n const safeHeaders = { ...headers, Authorization: '[REDACTED]' };\n process.stderr.write(`DRY RUN: ${init.method} ${url}\\nHeaders: ${JSON.stringify(safeHeaders, null, 2)}\\n`);\n if (opts.body) process.stderr.write(`Body: ${JSON.stringify(opts.body, null, 2)}\\n`);\n process.exit(0);\n }\n\n return request<T>(url, init, opts.timeoutMs ?? 30000);\n }\n\n async paginate<T>(\n fetchPage: (start: number, limit: number) => Promise<{ values: T[]; isLastPage: boolean; nextPageStart?: number }>\n ): Promise<T[]> {\n const results: T[] = [];\n let start = 0;\n const limit = 100;\n\n while (true) {\n const page = await fetchPage(start, limit);\n results.push(...page.values);\n if (page.isLastPage) break;\n start = page.nextPageStart ?? start + limit;\n }\n\n return results;\n }\n\n async jiraPaginate<T>(\n fetchPage: (startAt: number, maxResults: number) => Promise<{ issues?: T[]; values?: T[]; total: number; startAt: number; maxResults: number }>\n ): Promise<T[]> {\n const results: T[] = [];\n let startAt = 0;\n const maxResults = 100;\n\n while (true) {\n const page = await fetchPage(startAt, maxResults);\n const items = (page.issues ?? page.values ?? []) as T[];\n results.push(...items);\n startAt += items.length;\n if (startAt >= page.total || items.length === 0) break;\n }\n\n return results;\n }\n}\n\nexport function createHttpClient(config: ResolvedConfig, dryRun = false): HttpClient {\n return new HttpClient(config, dryRun);\n}\n","import type { HttpClient } from '../../lib/http.js';\nimport type {\n BitbucketPR,\n BitbucketComment,\n BitbucketPageResponse,\n BitbucketBuildStatus\n} from '../../types/bitbucket.js';\n\nconst API = '/rest/api/1.0';\n\nexport interface ListPRsOpts {\n project: string;\n repo: string;\n state?: string;\n author?: string;\n reviewer?: string;\n}\n\nexport interface CreatePROpts {\n project: string;\n repo: string;\n title: string;\n source: string;\n target: string;\n description?: string;\n reviewers?: string[];\n}\n\nexport interface UpdatePROpts {\n project: string;\n repo: string;\n id: number;\n title?: string;\n description?: string;\n reviewers?: string[];\n version: number;\n}\n\nexport interface MergePROpts {\n project: string;\n repo: string;\n id: number;\n version: number;\n strategy?: 'merge' | 'squash' | 'ff';\n deleteBranch?: boolean;\n}\n\nexport interface InlineCommentOpts {\n project: string;\n repo: string;\n prId: number;\n text: string;\n filePath: string;\n line: number;\n lineType?: 'ADDED' | 'REMOVED' | 'CONTEXT';\n}\n\nexport class BitbucketClient {\n constructor(private http: HttpClient) {}\n\n async listPRs(opts: ListPRsOpts): Promise<BitbucketPR[]> {\n return this.http.paginate<BitbucketPR>((start, limit) =>\n this.http.bitbucket<BitbucketPageResponse<BitbucketPR>>(\n `${API}/projects/${opts.project}/repos/${opts.repo}/pull-requests`,\n {\n params: {\n state: opts.state ?? 'OPEN',\n ...(opts.author ? { 'author.username': opts.author } : {}),\n start,\n limit\n }\n }\n )\n );\n }\n\n async getPR(project: string, repo: string, id: number): Promise<BitbucketPR> {\n return this.http.bitbucket<BitbucketPR>(\n `${API}/projects/${project}/repos/${repo}/pull-requests/${id}`\n );\n }\n\n async createPR(opts: CreatePROpts): Promise<BitbucketPR> {\n return this.http.bitbucket<BitbucketPR>(\n `${API}/projects/${opts.project}/repos/${opts.repo}/pull-requests`,\n {\n method: 'POST',\n body: {\n title: opts.title,\n description: opts.description,\n fromRef: {\n id: `refs/heads/${opts.source}`,\n repository: {\n slug: opts.repo,\n project: { key: opts.project }\n }\n },\n toRef: {\n id: `refs/heads/${opts.target}`,\n repository: {\n slug: opts.repo,\n project: { key: opts.project }\n }\n },\n reviewers: (opts.reviewers ?? []).map(slug => ({ user: { slug } }))\n }\n }\n );\n }\n\n async updatePR(opts: UpdatePROpts): Promise<BitbucketPR> {\n const body: Record<string, unknown> = { version: opts.version };\n if (opts.title) body.title = opts.title;\n if (opts.description !== undefined) body.description = opts.description;\n if (opts.reviewers) body.reviewers = opts.reviewers.map(slug => ({ user: { slug } }));\n\n return this.http.bitbucket<BitbucketPR>(\n `${API}/projects/${opts.project}/repos/${opts.repo}/pull-requests/${opts.id}`,\n { method: 'PUT', body }\n );\n }\n\n async mergePR(opts: MergePROpts): Promise<BitbucketPR> {\n const params: Record<string, string | number | boolean | undefined> = {\n version: opts.version\n };\n const body: Record<string, unknown> = {};\n if (opts.strategy) body.strategyId = opts.strategy;\n if (opts.deleteBranch) body.autoSubject = true;\n\n return this.http.bitbucket<BitbucketPR>(\n `${API}/projects/${opts.project}/repos/${opts.repo}/pull-requests/${opts.id}/merge`,\n { method: 'POST', params, body }\n );\n }\n\n async declinePR(project: string, repo: string, id: number, version: number): Promise<BitbucketPR> {\n return this.http.bitbucket<BitbucketPR>(\n `${API}/projects/${project}/repos/${repo}/pull-requests/${id}/decline`,\n { method: 'POST', params: { version } }\n );\n }\n\n async listComments(project: string, repo: string, prId: number): Promise<BitbucketComment[]> {\n interface Activity { action: string; comment?: BitbucketComment }\n const activities = await this.http.paginate<Activity>((start, limit) =>\n this.http.bitbucket<BitbucketPageResponse<Activity>>(\n `${API}/projects/${project}/repos/${repo}/pull-requests/${prId}/activities`,\n { params: { start, limit } }\n )\n );\n return activities\n .filter(a => a.action === 'COMMENTED' && a.comment)\n .map(a => a.comment!);\n }\n\n async addComment(project: string, repo: string, prId: number, text: string): Promise<BitbucketComment> {\n return this.http.bitbucket<BitbucketComment>(\n `${API}/projects/${project}/repos/${repo}/pull-requests/${prId}/comments`,\n { method: 'POST', body: { text } }\n );\n }\n\n async addInlineComment(opts: InlineCommentOpts): Promise<BitbucketComment> {\n return this.http.bitbucket<BitbucketComment>(\n `${API}/projects/${opts.project}/repos/${opts.repo}/pull-requests/${opts.prId}/comments`,\n {\n method: 'POST',\n body: {\n text: opts.text,\n anchor: {\n line: opts.line,\n lineType: opts.lineType ?? 'ADDED',\n fileType: 'TO',\n path: opts.filePath\n }\n }\n }\n );\n }\n\n async replyComment(project: string, repo: string, prId: number, commentId: number, text: string): Promise<BitbucketComment> {\n return this.http.bitbucket<BitbucketComment>(\n `${API}/projects/${project}/repos/${repo}/pull-requests/${prId}/comments`,\n { method: 'POST', body: { text, parent: { id: commentId } } }\n );\n }\n\n async resolveComment(project: string, repo: string, prId: number, commentId: number, version: number): Promise<void> {\n await this.http.bitbucket<void>(\n `${API}/projects/${project}/repos/${repo}/pull-requests/${prId}/comments/${commentId}/resolve`,\n { method: 'PUT', params: { version } }\n );\n }\n\n async deleteComment(project: string, repo: string, prId: number, commentId: number, version: number): Promise<void> {\n await this.http.bitbucket<void>(\n `${API}/projects/${project}/repos/${repo}/pull-requests/${prId}/comments/${commentId}`,\n { method: 'DELETE', params: { version } }\n );\n }\n\n async getDiff(project: string, repo: string, prId: number, file?: string, contextLines?: number): Promise<string> {\n const params: Record<string, string | number | boolean | undefined> = {};\n if (contextLines !== undefined) params.contextLines = contextLines;\n if (file) params.path = file;\n\n const result = await this.http.bitbucket<{ diffs?: unknown[] } | string>(\n `${API}/projects/${project}/repos/${repo}/pull-requests/${prId}/diff`,\n { params }\n );\n // Return raw diff as string\n return typeof result === 'string' ? result : JSON.stringify(result);\n }\n\n async listFiles(project: string, repo: string, prId: number): Promise<string[]> {\n const result = await this.http.bitbucket<{ values?: Array<{ path: { toString: string } }> }>(\n `${API}/projects/${project}/repos/${repo}/pull-requests/${prId}/changes`,\n { params: { limit: 1000 } }\n );\n return (result.values ?? []).map(v => (typeof v.path === 'string' ? v.path : JSON.stringify(v.path)));\n }\n\n async approvePR(project: string, repo: string, prId: number): Promise<unknown> {\n return this.http.bitbucket<unknown>(\n `${API}/projects/${project}/repos/${repo}/pull-requests/${prId}/participants/~`,\n { method: 'PUT', body: { status: 'APPROVED' } }\n );\n }\n\n async unapprovePR(project: string, repo: string, prId: number): Promise<unknown> {\n return this.http.bitbucket<unknown>(\n `${API}/projects/${project}/repos/${repo}/pull-requests/${prId}/participants/~`,\n { method: 'DELETE' }\n );\n }\n\n async needsWorkPR(project: string, repo: string, prId: number): Promise<unknown> {\n return this.http.bitbucket<unknown>(\n `${API}/projects/${project}/repos/${repo}/pull-requests/${prId}/participants/~`,\n { method: 'PUT', body: { status: 'NEEDS_WORK' } }\n );\n }\n\n async listReviewers(project: string, repo: string, prId: number): Promise<unknown[]> {\n const pr = await this.getPR(project, repo, prId);\n return pr.reviewers;\n }\n\n async listBuilds(project: string, repo: string, prId: number): Promise<BitbucketBuildStatus[]> {\n // Get the latest commit on the source branch\n const commits = await this.http.bitbucket<BitbucketPageResponse<{ id: string }>>(\n `${API}/projects/${project}/repos/${repo}/pull-requests/${prId}/commits`,\n { params: { limit: 1 } }\n );\n const sha = commits.values[0]?.id;\n if (!sha) return [];\n return this.getBuildStatus(sha);\n }\n\n async getBuildStatus(commit: string): Promise<BitbucketBuildStatus[]> {\n const result = await this.http.bitbucket<BitbucketPageResponse<BitbucketBuildStatus>>(\n `/rest/build-status/1.0/commits/${commit}`\n );\n return result.values ?? [];\n }\n}\n","import { Command } from 'commander';\nimport { getStatus, getDiff, getLog, getBranches } from './client.js';\nimport { getRepoRoot, getCurrentBranch } from '../../lib/git-context.js';\nimport { success, fail } from '../../lib/output.js';\nimport { PncliError } from '../../lib/errors.js';\nimport { loadConfig } from '../../lib/config.js';\nimport { createHttpClient } from '../../lib/http.js';\nimport { BitbucketClient } from '../bitbucket/client.js';\nimport { getGitContext } from '../../lib/git-context.js';\n\nfunction requireRepoRoot(): string {\n const root = getRepoRoot();\n if (!root) throw new PncliError('Not a git repository', 1);\n return root;\n}\n\nexport function registerGitCommands(program: Command): void {\n const git = program.command('git').description('Local git operations');\n\n git\n .command('status')\n .description('Show staged, unstaged, and untracked files as JSON')\n .action(() => {\n const start = Date.now();\n try {\n const root = requireRepoRoot();\n const data = getStatus(root);\n success(data, 'git', 'status', start);\n } catch (err) {\n fail(err, 'git', 'status', start);\n }\n });\n\n git\n .command('diff')\n .description('Show diff as structured JSON')\n .option('--staged', 'Show staged changes only')\n .option('--file <path>', 'Limit diff to a specific file')\n .action((opts: { staged?: boolean; file?: string }) => {\n const start = Date.now();\n try {\n const root = requireRepoRoot();\n const data = getDiff(root, { staged: opts.staged, file: opts.file });\n success(data, 'git', 'diff', start);\n } catch (err) {\n fail(err, 'git', 'diff', start);\n }\n });\n\n git\n .command('log')\n .description('Show recent commits as JSON')\n .option('--count <n>', 'Number of commits to show', '10')\n .option('--since <date>', 'Show commits since date (e.g. \"2 weeks ago\")')\n .action((opts: { count?: string; since?: string }) => {\n const start = Date.now();\n try {\n const root = requireRepoRoot();\n const count = opts.count ? parseInt(opts.count, 10) : undefined;\n const data = getLog(root, { count, since: opts.since });\n success(data, 'git', 'log', start);\n } catch (err) {\n fail(err, 'git', 'log', start);\n }\n });\n\n git\n .command('branch')\n .description('Show current branch and all local/remote branches')\n .action(() => {\n const start = Date.now();\n try {\n const root = requireRepoRoot();\n const data = getBranches(root);\n success(data, 'git', 'branch', start);\n } catch (err) {\n fail(err, 'git', 'branch', start);\n }\n });\n\n git\n .command('current-pr')\n .description('Find the open PR for the current branch')\n .action(async () => {\n const start = Date.now();\n try {\n const opts = program.optsWithGlobals();\n const config = loadConfig({ configPath: opts.config });\n\n if (!config.bitbucket.baseUrl || !config.bitbucket.pat) {\n success(\n { message: 'Requires Bitbucket config. Available after pncli config init.' },\n 'git',\n 'current-pr',\n start\n );\n return;\n }\n\n const root = requireRepoRoot();\n const branch = getCurrentBranch(root);\n if (!branch) throw new PncliError('Could not determine current branch', 1);\n\n const ctx = getGitContext(config);\n const project = ctx?.project ?? config.defaults.bitbucket?.project ?? '';\n const repo = ctx?.repo ?? config.defaults.bitbucket?.repo ?? '';\n if (!project || !repo) throw new PncliError('Could not determine Bitbucket project/repo', 1);\n\n const http = createHttpClient(config, Boolean(opts.dryRun));\n const client = new BitbucketClient(http);\n const prs = await client.listPRs({ project, repo, state: 'OPEN' });\n const match = prs.find(pr => pr.fromRef.displayId === branch) ?? null;\n success(match, 'git', 'current-pr', start);\n } catch (err) {\n fail(err, 'git', 'current-pr', start);\n }\n });\n}\n","import type { HttpClient } from '../../lib/http.js';\nimport type {\n JiraIssue,\n JiraTransition,\n JiraComment,\n JiraSearchResult\n} from '../../types/jira.js';\n\nconst API = '/rest/api/3';\n\nexport interface CreateIssueOpts {\n project: string;\n issueType: string;\n summary: string;\n description?: string;\n priority?: string;\n assignee?: string;\n labels?: string[];\n}\n\nexport interface UpdateIssueOpts {\n summary?: string;\n description?: string;\n priority?: string;\n assignee?: string;\n labels?: string[];\n}\n\nexport interface LinkIssueOpts {\n key: string;\n linkType: string;\n target: string;\n}\n\nexport class JiraClient {\n constructor(private http: HttpClient) {}\n\n async getIssue(key: string): Promise<JiraIssue> {\n return this.http.jira<JiraIssue>(`${API}/issue/${key}`);\n }\n\n async createIssue(opts: CreateIssueOpts): Promise<JiraIssue> {\n const body: Record<string, unknown> = {\n fields: {\n project: { key: opts.project },\n issuetype: { name: opts.issueType },\n summary: opts.summary,\n ...(opts.description ? {\n description: {\n type: 'doc',\n version: 1,\n content: [{ type: 'paragraph', content: [{ type: 'text', text: opts.description }] }]\n }\n } : {}),\n ...(opts.priority ? { priority: { name: opts.priority } } : {}),\n ...(opts.assignee ? { assignee: { accountId: opts.assignee } } : {}),\n ...(opts.labels?.length ? { labels: opts.labels } : {})\n }\n };\n\n const created = await this.http.jira<{ id: string; key: string }>(`${API}/issue`, {\n method: 'POST',\n body\n });\n\n return this.getIssue(created.key);\n }\n\n async updateIssue(key: string, opts: UpdateIssueOpts): Promise<void> {\n const fields: Record<string, unknown> = {};\n if (opts.summary) fields.summary = opts.summary;\n if (opts.description) {\n fields.description = {\n type: 'doc',\n version: 1,\n content: [{ type: 'paragraph', content: [{ type: 'text', text: opts.description }] }]\n };\n }\n if (opts.priority) fields.priority = { name: opts.priority };\n if (opts.assignee) fields.assignee = { accountId: opts.assignee };\n if (opts.labels) fields.labels = opts.labels;\n\n await this.http.jira<void>(`${API}/issue/${key}`, {\n method: 'PUT',\n body: { fields }\n });\n }\n\n async listTransitions(key: string): Promise<JiraTransition[]> {\n const result = await this.http.jira<{ transitions: JiraTransition[] }>(\n `${API}/issue/${key}/transitions`\n );\n return result.transitions;\n }\n\n async transitionIssue(key: string, transitionId: string): Promise<void> {\n await this.http.jira<void>(`${API}/issue/${key}/transitions`, {\n method: 'POST',\n body: { transition: { id: transitionId } }\n });\n }\n\n async addComment(key: string, text: string): Promise<JiraComment> {\n return this.http.jira<JiraComment>(`${API}/issue/${key}/comment`, {\n method: 'POST',\n body: {\n body: {\n type: 'doc',\n version: 1,\n content: [{ type: 'paragraph', content: [{ type: 'text', text }] }]\n }\n }\n });\n }\n\n async listComments(key: string): Promise<JiraComment[]> {\n return this.http.jiraPaginate<JiraComment>(async (startAt, maxResults) => {\n const result = await this.http.jira<{ comments: JiraComment[]; total: number; startAt: number; maxResults: number }>(\n `${API}/issue/${key}/comment`,\n { params: { startAt, maxResults } }\n );\n return { ...result, values: result.comments };\n });\n }\n\n async search(jql: string, maxResults?: number): Promise<JiraSearchResult> {\n if (maxResults !== undefined) {\n return this.http.jira<JiraSearchResult>(`${API}/search`, {\n method: 'POST',\n body: { jql, maxResults, fields: ['summary', 'status', 'priority', 'assignee', 'issuetype', 'project', 'created', 'updated', 'labels', 'reporter'] }\n });\n }\n\n // Paginate all results\n const allIssues = await this.http.jiraPaginate<JiraIssue>(async (startAt, max) => {\n const result = await this.http.jira<JiraSearchResult>(`${API}/search`, {\n method: 'POST',\n body: { jql, startAt, maxResults: max, fields: ['summary', 'status', 'priority', 'assignee', 'issuetype', 'project', 'created', 'updated', 'labels', 'reporter'] }\n });\n return { ...result, values: result.issues };\n });\n\n return { issues: allIssues, total: allIssues.length, startAt: 0, maxResults: allIssues.length };\n }\n\n async assignIssue(key: string, accountId: string): Promise<void> {\n await this.http.jira<void>(`${API}/issue/${key}/assignee`, {\n method: 'PUT',\n body: { accountId }\n });\n }\n\n async linkIssue(opts: LinkIssueOpts): Promise<void> {\n // First, find the link type ID if a name was given\n let linkTypeId = opts.linkType;\n if (isNaN(parseInt(opts.linkType, 10))) {\n const types = await this.http.jira<{ issueLinkTypes: Array<{ id: string; name: string; inward: string; outward: string }> }>(\n `${API}/issueLinkType`\n );\n const found = types.issueLinkTypes.find(\n t => t.name.toLowerCase() === opts.linkType.toLowerCase() ||\n t.inward.toLowerCase() === opts.linkType.toLowerCase() ||\n t.outward.toLowerCase() === opts.linkType.toLowerCase()\n );\n if (!found) throw new Error(`Link type not found: ${opts.linkType}`);\n linkTypeId = found.id;\n }\n\n await this.http.jira<void>(`${API}/issueLink`, {\n method: 'POST',\n body: {\n type: { id: linkTypeId },\n inwardIssue: { key: opts.key },\n outwardIssue: { key: opts.target }\n }\n });\n }\n}\n","import { Command } from 'commander';\nimport { JiraClient } from './client.js';\nimport { createHttpClient } from '../../lib/http.js';\nimport { loadConfig } from '../../lib/config.js';\nimport { success, fail } from '../../lib/output.js';\nimport { PncliError } from '../../lib/errors.js';\n\nfunction getClient(program: Command): JiraClient {\n const opts = program.optsWithGlobals();\n const config = loadConfig({ configPath: opts.config });\n if (!config.jira.baseUrl) throw new PncliError('Jira not configured. Run: pncli config init');\n const http = createHttpClient(config, Boolean(opts.dryRun));\n return new JiraClient(http);\n}\n\nfunction getDefaults(program: Command): { project?: string; issueType?: string; priority?: string } {\n const opts = program.optsWithGlobals();\n const config = loadConfig({ configPath: opts.config });\n return {\n project: config.defaults.jira?.project,\n issueType: config.defaults.jira?.issueType,\n priority: config.defaults.jira?.priority\n };\n}\n\nexport function registerJiraCommands(program: Command): void {\n const jira = program.command('jira').description('Jira Data Cloud operations');\n\n jira.command('get-issue')\n .description('Get a Jira issue by key')\n .requiredOption('--key <issue-key>', 'Issue key (e.g. PROJ-123)')\n .action(async (opts: { key: string }) => {\n const start = Date.now();\n try {\n const client = getClient(program);\n const data = await client.getIssue(opts.key);\n success(data, 'jira', 'get-issue', start);\n } catch (err) { fail(err, 'jira', 'get-issue', start); }\n });\n\n jira.command('create-issue')\n .description('Create a Jira issue')\n .option('--project <key>', 'Project key')\n .option('--type <type>', 'Issue type (Bug, Story, Task, ...)')\n .requiredOption('--summary <text>', 'Issue summary')\n .option('--description <text>', 'Issue description')\n .option('--priority <name>', 'Priority name')\n .option('--assignee <accountId>', 'Assignee account ID')\n .option('--labels <labels>', 'Comma-separated labels')\n .action(async (opts: { project?: string; type?: string; summary: string; description?: string; priority?: string; assignee?: string; labels?: string }) => {\n const start = Date.now();\n try {\n const client = getClient(program);\n const defaults = getDefaults(program);\n const project = opts.project ?? defaults.project;\n const issueType = opts.type ?? defaults.issueType ?? 'Task';\n const priority = opts.priority ?? defaults.priority;\n if (!project) throw new PncliError('--project required (or set defaults.jira.project in config)', 1);\n const labels = opts.labels ? opts.labels.split(',').map(s => s.trim()) : undefined;\n const data = await client.createIssue({ project, issueType, summary: opts.summary, description: opts.description, priority, assignee: opts.assignee, labels });\n success(data, 'jira', 'create-issue', start);\n } catch (err) { fail(err, 'jira', 'create-issue', start); }\n });\n\n jira.command('update-issue')\n .description('Update a Jira issue')\n .requiredOption('--key <issue-key>', 'Issue key')\n .option('--summary <text>', 'New summary')\n .option('--description <text>', 'New description')\n .option('--priority <name>', 'New priority')\n .option('--assignee <accountId>', 'New assignee account ID')\n .option('--labels <labels>', 'Comma-separated labels')\n .action(async (opts: { key: string; summary?: string; description?: string; priority?: string; assignee?: string; labels?: string }) => {\n const start = Date.now();\n try {\n const client = getClient(program);\n const labels = opts.labels ? opts.labels.split(',').map(s => s.trim()) : undefined;\n await client.updateIssue(opts.key, { summary: opts.summary, description: opts.description, priority: opts.priority, assignee: opts.assignee, labels });\n success({ updated: opts.key }, 'jira', 'update-issue', start);\n } catch (err) { fail(err, 'jira', 'update-issue', start); }\n });\n\n jira.command('transition-issue')\n .description('Transition a Jira issue to a new status')\n .requiredOption('--key <issue-key>', 'Issue key')\n .requiredOption('--transition <name-or-id>', 'Transition name or ID')\n .action(async (opts: { key: string; transition: string }) => {\n const start = Date.now();\n try {\n const client = getClient(program);\n // Resolve transition name to ID if needed\n let transitionId = opts.transition;\n if (isNaN(parseInt(opts.transition, 10))) {\n const transitions = await client.listTransitions(opts.key);\n const found = transitions.find(t => t.name.toLowerCase() === opts.transition.toLowerCase());\n if (!found) throw new PncliError(`Transition not found: ${opts.transition}`, 1);\n transitionId = found.id;\n }\n await client.transitionIssue(opts.key, transitionId);\n success({ transitioned: opts.key, transition: opts.transition }, 'jira', 'transition-issue', start);\n } catch (err) { fail(err, 'jira', 'transition-issue', start); }\n });\n\n jira.command('list-transitions')\n .description('List available transitions for an issue')\n .requiredOption('--key <issue-key>', 'Issue key')\n .action(async (opts: { key: string }) => {\n const start = Date.now();\n try {\n const client = getClient(program);\n const data = await client.listTransitions(opts.key);\n success(data, 'jira', 'list-transitions', start);\n } catch (err) { fail(err, 'jira', 'list-transitions', start); }\n });\n\n jira.command('add-comment')\n .description('Add a comment to a Jira issue')\n .requiredOption('--key <issue-key>', 'Issue key')\n .requiredOption('--body <text>', 'Comment text')\n .action(async (opts: { key: string; body: string }) => {\n const start = Date.now();\n try {\n const client = getClient(program);\n const data = await client.addComment(opts.key, opts.body);\n success(data, 'jira', 'add-comment', start);\n } catch (err) { fail(err, 'jira', 'add-comment', start); }\n });\n\n jira.command('list-comments')\n .description('List comments on a Jira issue')\n .requiredOption('--key <issue-key>', 'Issue key')\n .action(async (opts: { key: string }) => {\n const start = Date.now();\n try {\n const client = getClient(program);\n const data = await client.listComments(opts.key);\n success(data, 'jira', 'list-comments', start);\n } catch (err) { fail(err, 'jira', 'list-comments', start); }\n });\n\n jira.command('search')\n .description('Search Jira issues with JQL')\n .requiredOption('--jql <query>', 'JQL query string')\n .option('--max-results <n>', 'Maximum number of results')\n .action(async (opts: { jql: string; maxResults?: string }) => {\n const start = Date.now();\n try {\n const client = getClient(program);\n const maxResults = opts.maxResults ? parseInt(opts.maxResults, 10) : undefined;\n const data = await client.search(opts.jql, maxResults);\n success(data, 'jira', 'search', start);\n } catch (err) { fail(err, 'jira', 'search', start); }\n });\n\n jira.command('assign')\n .description('Assign a Jira issue to a user')\n .requiredOption('--key <issue-key>', 'Issue key')\n .requiredOption('--assignee <accountId>', 'Assignee account ID')\n .action(async (opts: { key: string; assignee: string }) => {\n const start = Date.now();\n try {\n const client = getClient(program);\n await client.assignIssue(opts.key, opts.assignee);\n success({ assigned: opts.key, assignee: opts.assignee }, 'jira', 'assign', start);\n } catch (err) { fail(err, 'jira', 'assign', start); }\n });\n\n jira.command('link-issue')\n .description('Link two Jira issues together')\n .requiredOption('--key <issue-key>', 'Source issue key')\n .requiredOption('--link-type <type>', 'Link type name or ID')\n .requiredOption('--target <issue-key>', 'Target issue key')\n .action(async (opts: { key: string; linkType: string; target: string }) => {\n const start = Date.now();\n try {\n const client = getClient(program);\n await client.linkIssue({ key: opts.key, linkType: opts.linkType, target: opts.target });\n success({ linked: opts.key, to: opts.target, type: opts.linkType }, 'jira', 'link-issue', start);\n } catch (err) { fail(err, 'jira', 'link-issue', start); }\n });\n}\n","import { Command } from 'commander';\nimport { BitbucketClient } from './client.js';\nimport { createHttpClient } from '../../lib/http.js';\nimport { loadConfig } from '../../lib/config.js';\nimport { getGitContext } from '../../lib/git-context.js';\nimport { success, fail } from '../../lib/output.js';\nimport { PncliError } from '../../lib/errors.js';\n\nfunction getClient(program: Command): { client: BitbucketClient; project: string; repo: string } {\n const opts = program.optsWithGlobals();\n const config = loadConfig({ configPath: opts.config });\n const http = createHttpClient(config, Boolean(opts.dryRun));\n const client = new BitbucketClient(http);\n const ctx = getGitContext(config);\n\n const project: string = opts.project ?? ctx?.project ?? config.defaults.bitbucket?.project ?? '';\n const repo: string = opts.repo ?? ctx?.repo ?? config.defaults.bitbucket?.repo ?? '';\n\n if (!project || !repo) {\n throw new PncliError(\n 'Could not determine Bitbucket project/repo. Pass --project and --repo, or run pncli config init.',\n 1\n );\n }\n\n return { client, project, repo };\n}\n\nexport function registerBitbucketCommands(program: Command): void {\n const bb = program\n .command('bitbucket')\n .description('Bitbucket Server operations')\n .option('--project <key>', 'Bitbucket project key')\n .option('--repo <slug>', 'Bitbucket repository slug');\n\n // ── Pull Requests ──────────────────────────────────────────────────\n\n bb.command('list-prs')\n .description('List pull requests')\n .option('--state <state>', 'PR state: OPEN|MERGED|DECLINED|ALL', 'OPEN')\n .option('--author <username>', 'Filter by author username')\n .option('--reviewer <username>', 'Filter by reviewer username')\n .action(async (opts: { state?: string; author?: string; reviewer?: string }) => {\n const start = Date.now();\n try {\n const { client, project, repo } = getClient(program);\n const data = await client.listPRs({ project, repo, state: opts.state, author: opts.author, reviewer: opts.reviewer });\n success(data, 'bitbucket', 'list-prs', start);\n } catch (err) { fail(err, 'bitbucket', 'list-prs', start); }\n });\n\n bb.command('get-pr')\n .description('Get a pull request by ID')\n .requiredOption('--id <pr-id>', 'Pull request ID')\n .action(async (opts: { id: string }) => {\n const start = Date.now();\n try {\n const { client, project, repo } = getClient(program);\n const data = await client.getPR(project, repo, parseInt(opts.id, 10));\n success(data, 'bitbucket', 'get-pr', start);\n } catch (err) { fail(err, 'bitbucket', 'get-pr', start); }\n });\n\n bb.command('create-pr')\n .description('Create a pull request')\n .requiredOption('--title <title>', 'PR title')\n .requiredOption('--source <branch>', 'Source branch')\n .option('--target <branch>', 'Target branch (defaults to config)')\n .option('--description <desc>', 'PR description')\n .option('--reviewers <users>', 'Comma-separated reviewer usernames')\n .action(async (opts: { title: string; source: string; target?: string; description?: string; reviewers?: string }) => {\n const start = Date.now();\n try {\n const { client, project, repo } = getClient(program);\n const config = loadConfig({ configPath: program.optsWithGlobals().config });\n const target = opts.target ?? config.defaults.bitbucket?.targetBranch ?? 'main';\n const reviewers = opts.reviewers ? opts.reviewers.split(',').map(s => s.trim()) : [];\n const data = await client.createPR({ project, repo, title: opts.title, source: opts.source, target, description: opts.description, reviewers });\n success(data, 'bitbucket', 'create-pr', start);\n } catch (err) { fail(err, 'bitbucket', 'create-pr', start); }\n });\n\n bb.command('update-pr')\n .description('Update a pull request')\n .requiredOption('--id <pr-id>', 'Pull request ID')\n .option('--title <title>', 'New title')\n .option('--description <desc>', 'New description')\n .option('--reviewers <users>', 'Comma-separated reviewer usernames')\n .action(async (opts: { id: string; title?: string; description?: string; reviewers?: string }) => {\n const start = Date.now();\n try {\n const { client, project, repo } = getClient(program);\n const prId = parseInt(opts.id, 10);\n const pr = await client.getPR(project, repo, prId);\n const reviewers = opts.reviewers ? opts.reviewers.split(',').map(s => s.trim()) : undefined;\n const data = await client.updatePR({ project, repo, id: prId, title: opts.title, description: opts.description, reviewers, version: pr.version });\n success(data, 'bitbucket', 'update-pr', start);\n } catch (err) { fail(err, 'bitbucket', 'update-pr', start); }\n });\n\n bb.command('merge-pr')\n .description('Merge a pull request')\n .requiredOption('--id <pr-id>', 'Pull request ID')\n .option('--strategy <strategy>', 'Merge strategy: merge|squash|ff')\n .option('--delete-branch', 'Delete source branch after merge')\n .action(async (opts: { id: string; strategy?: string; deleteBranch?: boolean }) => {\n const start = Date.now();\n try {\n const { client, project, repo } = getClient(program);\n const prId = parseInt(opts.id, 10);\n const pr = await client.getPR(project, repo, prId);\n const data = await client.mergePR({ project, repo, id: prId, version: pr.version, strategy: opts.strategy as 'merge' | 'squash' | 'ff', deleteBranch: opts.deleteBranch });\n success(data, 'bitbucket', 'merge-pr', start);\n } catch (err) { fail(err, 'bitbucket', 'merge-pr', start); }\n });\n\n bb.command('decline-pr')\n .description('Decline a pull request')\n .requiredOption('--id <pr-id>', 'Pull request ID')\n .action(async (opts: { id: string }) => {\n const start = Date.now();\n try {\n const { client, project, repo } = getClient(program);\n const prId = parseInt(opts.id, 10);\n const pr = await client.getPR(project, repo, prId);\n const data = await client.declinePR(project, repo, prId, pr.version);\n success(data, 'bitbucket', 'decline-pr', start);\n } catch (err) { fail(err, 'bitbucket', 'decline-pr', start); }\n });\n\n // ── Comments ───────────────────────────────────────────────────────\n\n bb.command('list-comments')\n .description('List comments on a pull request')\n .requiredOption('--pr <pr-id>', 'Pull request ID')\n .action(async (opts: { pr: string }) => {\n const start = Date.now();\n try {\n const { client, project, repo } = getClient(program);\n const data = await client.listComments(project, repo, parseInt(opts.pr, 10));\n success(data, 'bitbucket', 'list-comments', start);\n } catch (err) { fail(err, 'bitbucket', 'list-comments', start); }\n });\n\n bb.command('add-comment')\n .description('Add a comment to a pull request')\n .requiredOption('--pr <pr-id>', 'Pull request ID')\n .requiredOption('--body <text>', 'Comment text')\n .action(async (opts: { pr: string; body: string }) => {\n const start = Date.now();\n try {\n const { client, project, repo } = getClient(program);\n const data = await client.addComment(project, repo, parseInt(opts.pr, 10), opts.body);\n success(data, 'bitbucket', 'add-comment', start);\n } catch (err) { fail(err, 'bitbucket', 'add-comment', start); }\n });\n\n bb.command('add-inline-comment')\n .description('Add an inline comment to a file in a pull request')\n .requiredOption('--pr <pr-id>', 'Pull request ID')\n .requiredOption('--file <path>', 'File path')\n .requiredOption('--line <n>', 'Line number')\n .requiredOption('--body <text>', 'Comment text')\n .option('--line-type <type>', 'Line type: ADDED|REMOVED|CONTEXT', 'ADDED')\n .action(async (opts: { pr: string; file: string; line: string; body: string; lineType?: string }) => {\n const start = Date.now();\n try {\n const { client, project, repo } = getClient(program);\n const data = await client.addInlineComment({\n project, repo,\n prId: parseInt(opts.pr, 10),\n text: opts.body,\n filePath: opts.file,\n line: parseInt(opts.line, 10),\n lineType: opts.lineType as 'ADDED' | 'REMOVED' | 'CONTEXT'\n });\n success(data, 'bitbucket', 'add-inline-comment', start);\n } catch (err) { fail(err, 'bitbucket', 'add-inline-comment', start); }\n });\n\n bb.command('reply-comment')\n .description('Reply to a comment on a pull request')\n .requiredOption('--pr <pr-id>', 'Pull request ID')\n .requiredOption('--comment-id <id>', 'Comment ID to reply to')\n .requiredOption('--body <text>', 'Reply text')\n .action(async (opts: { pr: string; commentId: string; body: string }) => {\n const start = Date.now();\n try {\n const { client, project, repo } = getClient(program);\n const data = await client.replyComment(project, repo, parseInt(opts.pr, 10), parseInt(opts.commentId, 10), opts.body);\n success(data, 'bitbucket', 'reply-comment', start);\n } catch (err) { fail(err, 'bitbucket', 'reply-comment', start); }\n });\n\n bb.command('resolve-comment')\n .description('Resolve a comment on a pull request')\n .requiredOption('--pr <pr-id>', 'Pull request ID')\n .requiredOption('--comment-id <id>', 'Comment ID')\n .option('--version <n>', 'Comment version', '0')\n .action(async (opts: { pr: string; commentId: string; version?: string }) => {\n const start = Date.now();\n try {\n const { client, project, repo } = getClient(program);\n await client.resolveComment(project, repo, parseInt(opts.pr, 10), parseInt(opts.commentId, 10), parseInt(opts.version ?? '0', 10));\n success({ resolved: true }, 'bitbucket', 'resolve-comment', start);\n } catch (err) { fail(err, 'bitbucket', 'resolve-comment', start); }\n });\n\n bb.command('delete-comment')\n .description('Delete a comment on a pull request')\n .requiredOption('--pr <pr-id>', 'Pull request ID')\n .requiredOption('--comment-id <id>', 'Comment ID')\n .option('--version <n>', 'Comment version', '0')\n .action(async (opts: { pr: string; commentId: string; version?: string }) => {\n const start = Date.now();\n try {\n const { client, project, repo } = getClient(program);\n await client.deleteComment(project, repo, parseInt(opts.pr, 10), parseInt(opts.commentId, 10), parseInt(opts.version ?? '0', 10));\n success({ deleted: true }, 'bitbucket', 'delete-comment', start);\n } catch (err) { fail(err, 'bitbucket', 'delete-comment', start); }\n });\n\n // ── Diff / Files ───────────────────────────────────────────────────\n\n bb.command('diff')\n .description('Get unified diff for a pull request')\n .requiredOption('--pr <pr-id>', 'Pull request ID')\n .option('--file <path>', 'Limit diff to a specific file')\n .option('--context-lines <n>', 'Lines of context around changes')\n .action(async (opts: { pr: string; file?: string; contextLines?: string }) => {\n const start = Date.now();\n try {\n const { client, project, repo } = getClient(program);\n const contextLines = opts.contextLines ? parseInt(opts.contextLines, 10) : undefined;\n const diff = await client.getDiff(project, repo, parseInt(opts.pr, 10), opts.file, contextLines);\n success({ diff }, 'bitbucket', 'diff', start);\n } catch (err) { fail(err, 'bitbucket', 'diff', start); }\n });\n\n bb.command('list-files')\n .description('List files changed in a pull request')\n .requiredOption('--pr <pr-id>', 'Pull request ID')\n .action(async (opts: { pr: string }) => {\n const start = Date.now();\n try {\n const { client, project, repo } = getClient(program);\n const data = await client.listFiles(project, repo, parseInt(opts.pr, 10));\n success(data, 'bitbucket', 'list-files', start);\n } catch (err) { fail(err, 'bitbucket', 'list-files', start); }\n });\n\n // ── Approvals ──────────────────────────────────────────────────────\n\n bb.command('approve')\n .description('Approve a pull request')\n .requiredOption('--pr <pr-id>', 'Pull request ID')\n .action(async (opts: { pr: string }) => {\n const start = Date.now();\n try {\n const { client, project, repo } = getClient(program);\n const data = await client.approvePR(project, repo, parseInt(opts.pr, 10));\n success(data, 'bitbucket', 'approve', start);\n } catch (err) { fail(err, 'bitbucket', 'approve', start); }\n });\n\n bb.command('unapprove')\n .description('Remove approval from a pull request')\n .requiredOption('--pr <pr-id>', 'Pull request ID')\n .action(async (opts: { pr: string }) => {\n const start = Date.now();\n try {\n const { client, project, repo } = getClient(program);\n const data = await client.unapprovePR(project, repo, parseInt(opts.pr, 10));\n success(data, 'bitbucket', 'unapprove', start);\n } catch (err) { fail(err, 'bitbucket', 'unapprove', start); }\n });\n\n bb.command('needs-work')\n .description('Mark a pull request as needs-work')\n .requiredOption('--pr <pr-id>', 'Pull request ID')\n .action(async (opts: { pr: string }) => {\n const start = Date.now();\n try {\n const { client, project, repo } = getClient(program);\n const data = await client.needsWorkPR(project, repo, parseInt(opts.pr, 10));\n success(data, 'bitbucket', 'needs-work', start);\n } catch (err) { fail(err, 'bitbucket', 'needs-work', start); }\n });\n\n bb.command('list-reviewers')\n .description('List reviewers of a pull request')\n .requiredOption('--pr <pr-id>', 'Pull request ID')\n .action(async (opts: { pr: string }) => {\n const start = Date.now();\n try {\n const { client, project, repo } = getClient(program);\n const data = await client.listReviewers(project, repo, parseInt(opts.pr, 10));\n success(data, 'bitbucket', 'list-reviewers', start);\n } catch (err) { fail(err, 'bitbucket', 'list-reviewers', start); }\n });\n\n // ── Build Status ───────────────────────────────────────────────────\n\n bb.command('list-builds')\n .description('List build statuses for a pull request')\n .requiredOption('--pr <pr-id>', 'Pull request ID')\n .action(async (opts: { pr: string }) => {\n const start = Date.now();\n try {\n const { client, project, repo } = getClient(program);\n const data = await client.listBuilds(project, repo, parseInt(opts.pr, 10));\n success(data, 'bitbucket', 'list-builds', start);\n } catch (err) { fail(err, 'bitbucket', 'list-builds', start); }\n });\n\n bb.command('get-build-status')\n .description('Get build status for a commit SHA')\n .requiredOption('--commit <sha>', 'Commit SHA')\n .action(async (opts: { commit: string }) => {\n const start = Date.now();\n try {\n const { client } = getClient(program);\n const data = await client.getBuildStatus(opts.commit);\n success(data, 'bitbucket', 'get-build-status', start);\n } catch (err) { fail(err, 'bitbucket', 'get-build-status', start); }\n });\n}\n","import { Command } from 'commander';\nimport { success } from '../../lib/output.js';\n\nexport function registerConfluenceCommands(program: Command): void {\n program\n .command('confluence')\n .description('Confluence operations')\n .action(() => {\n success(\n { message: 'Coming soon — the nightmare never ends.' },\n 'confluence',\n 'stub',\n Date.now()\n );\n });\n}\n","import { Command } from 'commander';\nimport { success } from '../../lib/output.js';\n\nexport function registerSonarCommands(program: Command): void {\n program\n .command('sonar')\n .description('SonarQube operations')\n .action(() => {\n success(\n { message: 'Coming soon — the nightmare never ends.' },\n 'sonar',\n 'stub',\n Date.now()\n );\n });\n}\n","import { Command } from 'commander';\nimport { success } from '../../lib/output.js';\n\nexport function registerArtifactoryCommands(program: Command): void {\n program\n .command('artifactory')\n .description('Artifactory operations')\n .action(() => {\n success(\n { message: 'Coming soon — the nightmare never ends.' },\n 'artifactory',\n 'stub',\n Date.now()\n );\n });\n}\n","import { Command } from 'commander';\nimport { input, password, confirm } from '@inquirer/prompts';\nimport {\n loadConfig,\n writeGlobalConfig,\n writeRepoConfig,\n setConfigValue,\n maskConfig,\n getGlobalConfigPath\n} from '../../lib/config.js';\nimport { success, fail, warn } from '../../lib/output.js';\nimport fs from 'fs';\n\nexport function registerConfigCommands(program: Command): void {\n const config = program.command('config').description('Manage pncli configuration');\n\n config\n .command('init')\n .description('Interactive setup wizard')\n .option('--repo', 'Write repo config (.pncli.json) instead of global config')\n .action(async (opts: { repo?: boolean }) => {\n const start = Date.now();\n try {\n if (opts.repo) {\n await initRepoConfig(start);\n } else {\n await initGlobalConfig(start);\n }\n } catch (err) {\n // Handle prompt cancellation (Ctrl+C) gracefully\n if (err instanceof Error && err.message.includes('User force closed')) {\n process.stderr.write('\\nSetup cancelled.\\n');\n process.exit(1);\n }\n fail(err, 'config', 'init', start);\n }\n });\n\n config\n .command('show')\n .description('Print fully resolved config (PATs masked)')\n .action(() => {\n const start = Date.now();\n try {\n const resolved = loadConfig();\n success(maskConfig(resolved), 'config', 'show', start);\n } catch (err) {\n fail(err, 'config', 'show', start);\n }\n });\n\n config\n .command('set')\n .description('Set a config value by dot-notation key (e.g. jira.baseUrl https://...)')\n .argument('<key>', 'Config key in dot notation')\n .argument('<value>', 'Value to set')\n .action((key: string, value: string) => {\n const start = Date.now();\n try {\n const opts = program.optsWithGlobals();\n setConfigValue(key, value, opts.config);\n success({ key, value }, 'config', 'set', start);\n } catch (err) {\n fail(err, 'config', 'set', start);\n }\n });\n\n config\n .command('test')\n .description('Test connectivity to configured services')\n .action(() => {\n const start = Date.now();\n success(\n { message: 'Service connectivity test available after Phase 2.' },\n 'config',\n 'test',\n start\n );\n });\n}\n\nasync function initGlobalConfig(start: number): Promise<void> {\n process.stderr.write('pncli config init — Global configuration\\n\\n');\n\n const jiraBaseUrl = await input({\n message: 'Jira base URL (e.g. https://your-domain.atlassian.net):',\n default: ''\n });\n\n const jiraEmail = await input({\n message: 'Jira email address:',\n default: ''\n });\n\n const jiraApiToken = await password({\n message: 'Jira API token:'\n });\n\n const bitbucketBaseUrl = await input({\n message: 'Bitbucket Server base URL (e.g. https://bitbucket.your-company.com):',\n default: ''\n });\n\n const bitbucketPat = await password({\n message: 'Bitbucket personal access token:'\n });\n\n const jiraProject = await input({\n message: 'Default Jira project key (optional):',\n default: ''\n });\n\n const confirmed = await confirm({\n message: 'Write config to ~/.pncli/config.json?',\n default: true\n });\n\n if (!confirmed) {\n process.stderr.write('Aborted.\\n');\n process.exit(0);\n }\n\n writeGlobalConfig({\n jira: {\n baseUrl: jiraBaseUrl || undefined,\n email: jiraEmail || undefined,\n apiToken: jiraApiToken || undefined\n },\n bitbucket: {\n baseUrl: bitbucketBaseUrl || undefined,\n pat: bitbucketPat || undefined\n },\n defaults: {\n jira: {\n project: jiraProject || undefined\n }\n }\n });\n\n const configPath = getGlobalConfigPath();\n warn(`Config written to ${configPath}`);\n success({ written: configPath }, 'config', 'init', start);\n}\n\nasync function initRepoConfig(start: number): Promise<void> {\n process.stderr.write('pncli config init --repo — Repo configuration\\n\\n');\n\n const jiraProject = await input({\n message: 'Jira project key (e.g. ACME):',\n default: ''\n });\n\n const jiraIssueType = await input({\n message: 'Default issue type:',\n default: 'Story'\n });\n\n const jiraPriority = await input({\n message: 'Default priority:',\n default: 'Medium'\n });\n\n const targetBranch = await input({\n message: 'Default target branch for PRs:',\n default: 'main'\n });\n\n const confirmed = await confirm({\n message: 'Write config to .pncli.json in repo root?',\n default: true\n });\n\n if (!confirmed) {\n process.stderr.write('Aborted.\\n');\n process.exit(0);\n }\n\n // Warn if .pncli.json already exists\n if (fs.existsSync('.pncli.json')) {\n const overwrite = await confirm({\n message: '.pncli.json already exists. Overwrite?',\n default: false\n });\n if (!overwrite) {\n process.stderr.write('Aborted.\\n');\n process.exit(0);\n }\n }\n\n writeRepoConfig({\n defaults: {\n jira: {\n project: jiraProject || undefined,\n issueType: jiraIssueType || undefined,\n priority: jiraPriority || undefined\n },\n bitbucket: {\n targetBranch: targetBranch || undefined\n }\n }\n });\n\n success({ written: '.pncli.json' }, 'config', 'init', start);\n}\n"],"mappings":"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","names":["execSync","execSync","getRepoRoot","path","program","API","program","getClient","program","program","program","program","fs","program","require"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@kolatts/pncli",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"description": "The Paperwork Nightmare CLI — One command does what three meetings couldn't.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"pncli": "./dist/cli.js"
|
|
8
|
+
},
|
|
9
|
+
"engines": {
|
|
10
|
+
"node": ">=18"
|
|
11
|
+
},
|
|
12
|
+
"scripts": {
|
|
13
|
+
"build": "tsup",
|
|
14
|
+
"dev": "tsx src/cli.ts",
|
|
15
|
+
"lint": "eslint src/",
|
|
16
|
+
"typecheck": "tsc --noEmit"
|
|
17
|
+
},
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"@inquirer/prompts": "^7.5.0",
|
|
20
|
+
"chalk": "^5.4.1",
|
|
21
|
+
"commander": "^13.1.0"
|
|
22
|
+
},
|
|
23
|
+
"devDependencies": {
|
|
24
|
+
"@types/node": "^22.15.3",
|
|
25
|
+
"@typescript-eslint/eslint-plugin": "^8.31.0",
|
|
26
|
+
"@typescript-eslint/parser": "^8.31.0",
|
|
27
|
+
"eslint": "^9.25.1",
|
|
28
|
+
"tsup": "^8.4.0",
|
|
29
|
+
"tsx": "^4.19.3",
|
|
30
|
+
"typescript": "^5.8.3"
|
|
31
|
+
},
|
|
32
|
+
"keywords": [
|
|
33
|
+
"cli",
|
|
34
|
+
"jira",
|
|
35
|
+
"bitbucket",
|
|
36
|
+
"developer-tools",
|
|
37
|
+
"code-review",
|
|
38
|
+
"agent",
|
|
39
|
+
"automation"
|
|
40
|
+
],
|
|
41
|
+
"license": "Apache-2.0",
|
|
42
|
+
"files": [
|
|
43
|
+
"dist",
|
|
44
|
+
"LICENSE",
|
|
45
|
+
"NOTICE",
|
|
46
|
+
"README.md",
|
|
47
|
+
"copilot-instructions.md"
|
|
48
|
+
]
|
|
49
|
+
}
|