@kb-labs/release-manager-cli 2.15.0 → 2.18.0

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.
Files changed (49) hide show
  1. package/dist/cli/commands/publish.js +6 -6
  2. package/dist/cli/commands/publish.js.map +1 -1
  3. package/dist/cli/commands/run.js +15 -9
  4. package/dist/cli/commands/run.js.map +1 -1
  5. package/dist/rest/handlers/checklist-handler.js +2 -2
  6. package/dist/rest/handlers/checklist-handler.js.map +1 -1
  7. package/dist/rest/handlers/run-handler.js +3 -3
  8. package/dist/rest/handlers/run-handler.js.map +1 -1
  9. package/package.json +8 -8
  10. package/dist/widgets/117.js +0 -2
  11. package/dist/widgets/117.js.map +0 -1
  12. package/dist/widgets/297.js +0 -2
  13. package/dist/widgets/297.js.map +0 -1
  14. package/dist/widgets/338.js +0 -2
  15. package/dist/widgets/338.js.map +0 -1
  16. package/dist/widgets/370.js +0 -2
  17. package/dist/widgets/370.js.map +0 -1
  18. package/dist/widgets/451.js +0 -2
  19. package/dist/widgets/451.js.map +0 -1
  20. package/dist/widgets/50.js +0 -2
  21. package/dist/widgets/50.js.map +0 -1
  22. package/dist/widgets/586.js +0 -39
  23. package/dist/widgets/586.js.map +0 -1
  24. package/dist/widgets/59.js +0 -2
  25. package/dist/widgets/59.js.map +0 -1
  26. package/dist/widgets/607.js +0 -2
  27. package/dist/widgets/607.js.map +0 -1
  28. package/dist/widgets/626.js +0 -2
  29. package/dist/widgets/626.js.map +0 -1
  30. package/dist/widgets/669.js +0 -2
  31. package/dist/widgets/669.js.map +0 -1
  32. package/dist/widgets/678.js +0 -2
  33. package/dist/widgets/678.js.map +0 -1
  34. package/dist/widgets/781.js +0 -2
  35. package/dist/widgets/781.js.map +0 -1
  36. package/dist/widgets/842.js +0 -446
  37. package/dist/widgets/842.js.map +0 -1
  38. package/dist/widgets/968.js +0 -10
  39. package/dist/widgets/968.js.map +0 -1
  40. package/dist/widgets/997.js +0 -35
  41. package/dist/widgets/997.js.map +0 -1
  42. package/dist/widgets/@mf-types.d.ts +0 -3
  43. package/dist/widgets/@mf-types.zip +0 -0
  44. package/dist/widgets/__federation_expose_ReleasePage.js +0 -2
  45. package/dist/widgets/__federation_expose_ReleasePage.js.map +0 -1
  46. package/dist/widgets/mf-manifest.json +0 -262
  47. package/dist/widgets/mf-stats.json +0 -304
  48. package/dist/widgets/remoteEntry.js +0 -7
  49. package/dist/widgets/remoteEntry.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/shared/changelog-factory.ts","../../../src/shared/publish-programmatic.ts","../../../src/shared/publish-with-otp.ts","../../../src/cli/commands/run.ts"],"names":["join","readFileSync","writeFileSync","publishSinglePackage","published","failed","errors","spawn","useLoader","readline2"],"mappings":"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","file":"run.js","sourcesContent":["/**\n * Shared changelog generator factory.\n * Used by both CLI (run.ts) and REST (run-handler.ts) to avoid duplication.\n */\n\nimport {\n generateChangelog,\n generateSimpleChangelog,\n type ChangelogPackageInfo,\n} from '@kb-labs/release-manager-changelog';\nimport type { ReleaseConfig, ChangelogGenerator } from '@kb-labs/release-manager-core';\n\nexport function createChangelogGenerator(config: ReleaseConfig, llm?: any): ChangelogGenerator {\n return {\n async generate(plan, opts) {\n const locale = (config.changelog?.locale as 'en' | 'ru') || 'en';\n const packages: ChangelogPackageInfo[] = plan.packages.map(pkg => ({\n name: pkg.name,\n path: pkg.path,\n currentVersion: pkg.currentVersion,\n nextVersion: pkg.nextVersion,\n bump: pkg.bump === 'auto' ? 'patch' : pkg.bump,\n }));\n try {\n const result = await generateChangelog({\n repoRoot: opts.repoRoot,\n gitCwd: opts.gitCwd,\n packages,\n range: { to: 'HEAD' },\n changelog: {\n template: config.changelog?.template ?? undefined,\n locale,\n metadata: config.changelog?.metadata,\n ignoreAuthors: config.changelog?.ignoreAuthors,\n includeTypes: config.changelog?.includeTypes as string[],\n excludeTypes: config.changelog?.excludeTypes as string[],\n collapseMerges: config.changelog?.collapseMerges,\n collapseReverts: config.changelog?.collapseReverts,\n preferMergeSummary: config.changelog?.preferMergeSummary,\n groups: config.changelog?.groups,\n },\n git: {\n autoUnshallow: config.git?.autoUnshallow,\n requireSignedTags: config.git?.requireSignedTags,\n baseUrl: config.git?.baseUrl ?? undefined,\n },\n platform: llm ? { llm } : undefined,\n });\n return result.markdown;\n } catch {\n return generateSimpleChangelog(packages, locale);\n }\n },\n };\n}\n","/**\n * Programmatic npm publishing for REST handlers (non-interactive context)\n *\n * Uses `npm publish` CLI via spawn with NODE_AUTH_TOKEN env variable.\n * This is the correct approach for granular access tokens (classic tokens\n * were revoked by npm in December 2025).\n *\n * Token resolution order:\n * 1. options.token (explicit override)\n * 2. NPM_TOKEN env variable\n * 3. NODE_AUTH_TOKEN env variable\n */\n\nimport { spawn } from 'node:child_process';\nimport { readFileSync, writeFileSync, readdirSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { useLogger } from '@kb-labs/sdk';\n\nexport interface PackageToPublish {\n name: string;\n version: string;\n path: string;\n}\n\nexport interface ProgrammaticPublishOptions {\n packages: PackageToPublish[];\n packageManager?: 'pnpm' | 'npm' | 'yarn';\n dryRun?: boolean;\n otp?: string;\n tag?: string;\n access?: 'public' | 'restricted';\n registry?: string;\n token?: string;\n}\n\nexport interface PublishResult {\n name: string;\n version: string;\n success: boolean;\n error?: string;\n}\n\nexport interface ProgrammaticPublishResult {\n results: PublishResult[];\n published: string[];\n failed: string[];\n skipped: string[];\n errors: string[];\n}\n\n/**\n * Resolve npm auth token from options or environment\n */\nfunction resolveToken(token?: string): string | undefined {\n return token ?? process.env.NPM_TOKEN ?? process.env.NODE_AUTH_TOKEN;\n}\n\n/**\n * Publish a single package using npm CLI\n * Passes auth token via NODE_AUTH_TOKEN env (recommended for granular tokens)\n */\nfunction publishSinglePackage(options: {\n packagePath: string;\n packageManager: string;\n token: string | undefined;\n otp?: string;\n dryRun?: boolean;\n tag?: string;\n access?: string;\n registry?: string;\n}): Promise<void> {\n const { packagePath, packageManager, token, otp, dryRun, tag, access, registry } = options;\n\n return new Promise((resolve, reject) => {\n const args = ['publish'];\n\n // pnpm checks git cleanliness before publish, but our pipeline already bumps versions\n // (making the tree dirty) before calling publish — disable this check.\n if (packageManager === 'pnpm') {\n args.push('--no-git-checks');\n }\n\n if (dryRun) {\n args.push('--dry-run');\n }\n\n if (tag) {\n args.push(`--tag=${tag}`);\n }\n\n if (access) {\n args.push(`--access=${access}`);\n }\n\n if (registry) {\n args.push(`--registry=${registry}`);\n }\n\n if (otp) {\n args.push(`--otp=${otp}`);\n }\n\n // Pass token via env — this is the correct way for granular tokens\n const env: NodeJS.ProcessEnv = { ...process.env };\n if (token) {\n env['NODE_AUTH_TOKEN'] = token;\n }\n\n const child = spawn(packageManager, args, {\n cwd: packagePath,\n stdio: ['ignore', 'pipe', 'pipe'],\n shell: true,\n env,\n });\n\n let stdout = '';\n let stderr = '';\n\n child.stdout?.on('data', (data: Buffer) => {\n stdout += data.toString();\n });\n\n child.stderr?.on('data', (data: Buffer) => {\n stderr += data.toString();\n });\n\n child.on('close', (code: number | null) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(stderr || stdout || `${packageManager} publish exited with code ${code}`));\n }\n });\n\n child.on('error', (err: Error) => {\n reject(err);\n });\n });\n}\n\n/**\n * Publish packages programmatically (non-interactive, for REST handlers)\n * Uses npm CLI with NODE_AUTH_TOKEN — works with granular access tokens.\n */\nexport async function publishPackagesProgrammatic(\n options: ProgrammaticPublishOptions\n): Promise<ProgrammaticPublishResult> {\n const { packages, packageManager = 'pnpm', dryRun, otp, tag, access, registry } = options;\n const logger = useLogger();\n\n const token = resolveToken(options.token);\n\n if (!token && !dryRun) {\n const error = 'No npm token found. Set NPM_TOKEN (or NODE_AUTH_TOKEN) in environment.';\n logger.error(error);\n return {\n results: [],\n published: [],\n failed: packages.map((p) => `${p.name}@${p.version}`),\n skipped: [],\n errors: [error],\n };\n }\n\n // Build version map from all packages in this release for link: → ^version replacement\n const versionMap = new Map(packages.map(p => [p.name, p.version]));\n\n const CONCURRENCY = Number(process.env.KB_PUBLISH_CONCURRENCY ?? 8);\n\n const publishOne = async (pkg: PackageToPublish): Promise<PublishResult> => {\n logger.info(`Publishing ${pkg.name}@${pkg.version}`, { path: pkg.path, dryRun });\n\n const pkgJsonPath = join(pkg.path, 'package.json');\n const originalPkgJson = readFileSync(pkgJsonPath, 'utf-8');\n let restored = false;\n\n try {\n const pkgJson = JSON.parse(originalPkgJson);\n let modified = false;\n\n for (const section of ['dependencies', 'peerDependencies'] as const) {\n const deps = pkgJson[section];\n if (!deps) {continue;}\n for (const [depName, depValue] of Object.entries(deps)) {\n if (typeof depValue !== 'string') {continue;}\n const val = depValue as string;\n\n if (val.startsWith('link:')) {\n const planVersion = versionMap.get(depName);\n if (planVersion) {\n deps[depName] = `^${planVersion}`;\n modified = true;\n } else {\n try {\n const linkPath = val.replace('link:', '');\n const linkedPkg = JSON.parse(readFileSync(join(pkg.path, linkPath, 'package.json'), 'utf-8'));\n deps[depName] = `^${linkedPkg.version}`;\n modified = true;\n } catch {\n deps[depName] = '*';\n modified = true;\n }\n }\n } else if (val.startsWith('workspace:') && packageManager !== 'pnpm') {\n const planVersion = versionMap.get(depName);\n if (planVersion) {\n deps[depName] = val === 'workspace:*' ? `^${planVersion}` : val.replace('workspace:', '');\n modified = true;\n }\n }\n }\n }\n\n if (modified) {\n writeFileSync(pkgJsonPath, JSON.stringify(pkgJson, null, 2) + '\\n');\n }\n\n await publishSinglePackage({\n packagePath: pkg.path,\n packageManager,\n token,\n otp,\n dryRun,\n tag,\n access: access ?? 'public',\n registry,\n });\n\n logger.info(`Published ${pkg.name}@${pkg.version}`);\n return { name: pkg.name, version: pkg.version, success: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Failed to publish ${pkg.name}@${pkg.version}`, undefined, { error: message });\n return { name: pkg.name, version: pkg.version, success: false, error: message };\n } finally {\n if (!restored) {\n writeFileSync(pkgJsonPath, originalPkgJson);\n restored = true;\n }\n }\n };\n\n // Run publishes in parallel batches\n const results: PublishResult[] = [];\n for (let i = 0; i < packages.length; i += CONCURRENCY) {\n const batch = packages.slice(i, i + CONCURRENCY);\n const batchResults = await Promise.all(batch.map(publishOne));\n results.push(...batchResults);\n }\n\n const published = results.filter((r) => r.success).map((r) => `${r.name}@${r.version}`);\n const failed = results.filter((r) => !r.success).map((r) => `${r.name}@${r.version}`);\n const errors = results.filter((r) => !r.success && r.error).map((r) => `${r.name}: ${r.error}`);\n\n return {\n results,\n published,\n failed,\n skipped: dryRun ? packages.map((p) => `${p.name}@${p.version} (dry-run)`) : [],\n errors,\n };\n}\n","/**\n * Shared publishing logic with interactive OTP support\n * Used by both `release:run` and `release publish` commands\n */\n\nimport { spawn } from 'node:child_process';\nimport { readFileSync, writeFileSync, readdirSync } from 'node:fs';\nimport { join } from 'node:path';\nimport * as readline from 'node:readline/promises';\nimport { useLoader } from '@kb-labs/sdk';\n\nexport interface PackageToPublish {\n name: string;\n version: string;\n path: string;\n}\n\nexport interface PublishWithOTPOptions {\n packages: PackageToPublish[];\n packageManager?: 'pnpm' | 'npm' | 'yarn';\n dryRun?: boolean;\n otp?: string;\n tag?: string;\n access?: string;\n ui: {\n write?: (text: string) => void;\n };\n logger?: {\n info: (msg: string, meta?: any) => void;\n warn: (msg: string, meta?: any) => void;\n error: (msg: string, meta?: any) => void;\n debug: (msg: string, meta?: any) => void;\n };\n}\n\nexport interface PublishResult {\n name: string;\n version: string;\n success: boolean;\n error?: string;\n}\n\nexport interface PublishWithOTPResult {\n results: PublishResult[];\n published: string[];\n failed: string[];\n skipped: string[];\n errors: string[];\n}\n\n/**\n * Publish packages with interactive OTP support\n */\nexport async function publishPackagesWithOTP(\n options: PublishWithOTPOptions\n): Promise<PublishWithOTPResult> {\n const { packages, packageManager = 'pnpm', dryRun, tag, access, ui, logger } = options;\n let otp = options.otp;\n\n const results: PublishResult[] = [];\n\n // Build version map from all packages in this release for link: → ^version replacement\n const versionMap = new Map(packages.map(p => [p.name, p.version]));\n\n // Helper: prepare package.json (replace link:/workspace: deps), returns a restore function\n const preparePackage = (pkg: PackageToPublish): (() => void) => {\n const pkgJsonPath = join(pkg.path, 'package.json');\n const originalPkgJson = readFileSync(pkgJsonPath, 'utf-8');\n const pkgJson = JSON.parse(originalPkgJson);\n let modified = false;\n\n for (const section of ['dependencies', 'peerDependencies'] as const) {\n const deps = pkgJson[section];\n if (!deps) {continue;}\n for (const [depName, depValue] of Object.entries(deps)) {\n if (typeof depValue !== 'string') {continue;}\n const val = depValue as string;\n\n if (val.startsWith('link:')) {\n const planVersion = versionMap.get(depName);\n if (planVersion) {\n deps[depName] = `^${planVersion}`;\n modified = true;\n } else {\n try {\n const linkPath = val.replace('link:', '');\n const linkedPkg = JSON.parse(readFileSync(join(pkg.path, linkPath, 'package.json'), 'utf-8'));\n deps[depName] = `^${linkedPkg.version}`;\n modified = true;\n } catch {\n deps[depName] = '*';\n modified = true;\n }\n }\n } else if (val.startsWith('workspace:') && packageManager !== 'pnpm') {\n const planVersion = versionMap.get(depName);\n if (planVersion) {\n deps[depName] = val === 'workspace:*' ? `^${planVersion}` : val.replace('workspace:', '');\n modified = true;\n }\n }\n }\n }\n\n if (modified) {\n writeFileSync(pkgJsonPath, JSON.stringify(pkgJson, null, 2) + '\\n');\n }\n\n return () => writeFileSync(pkgJsonPath, originalPkgJson);\n };\n\n // Fast-path: parallel optimistic publishing (works when no OTP is required — pnpm keychain/session)\n // If any package fails with EOTP, we fall back to sequential path below for the rest.\n const CONCURRENCY = Number(process.env.KB_PUBLISH_CONCURRENCY ?? 8);\n const remaining: PackageToPublish[] = [];\n let otpFailureDetected = false;\n\n const fastPublishOne = async (pkg: PackageToPublish): Promise<PublishResult | null> => {\n const restore = preparePackage(pkg);\n try {\n await publishSinglePackage({ packagePath: pkg.path, packageManager, otp, dryRun, tag, access });\n logger?.info('Package published successfully (fast-path)', { name: pkg.name, version: pkg.version, dryRun });\n return { name: pkg.name, version: pkg.version, success: true };\n } catch (error: any) {\n const msg = error.message || String(error);\n if (msg.includes('EOTP') || msg.includes('one-time password')) {\n otpFailureDetected = true;\n return null; // requeue for sequential path\n }\n logger?.error('Package publish failed (fast-path)', { name: pkg.name, error: msg });\n return { name: pkg.name, version: pkg.version, success: false, error: msg };\n } finally {\n restore();\n }\n };\n\n ui.write?.(` Publishing ${packages.length} package(s) in parallel (concurrency=${CONCURRENCY})...\\n`);\n for (let i = 0; i < packages.length; i += CONCURRENCY) {\n const batch = packages.slice(i, i + CONCURRENCY);\n const batchResults = await Promise.all(batch.map(fastPublishOne));\n for (let j = 0; j < batch.length; j++) {\n const res = batchResults[j];\n if (res === null) {\n remaining.push(batch[j]!);\n } else {\n results.push(res);\n }\n }\n // If OTP needed, stop parallelizing and queue the rest for sequential path\n if (otpFailureDetected) {\n remaining.push(...packages.slice(i + CONCURRENCY));\n break;\n }\n }\n\n if (remaining.length === 0) {\n const published = results.filter((r) => r.success).map((r) => `${r.name}@${r.version}`);\n const failed = results.filter((r) => !r.success).map((r) => `${r.name}@${r.version}`);\n const errors = results.filter((r) => !r.success && r.error).map((r) => `${r.name}: ${r.error}`);\n return {\n results,\n published,\n failed,\n skipped: dryRun ? packages.map((p) => `${p.name}@${p.version} (dry-run)`) : [],\n errors,\n };\n }\n\n ui.write?.(` OTP required — falling back to sequential publish for ${remaining.length} package(s)\\n`);\n\n for (const pkg of remaining) {\n logger?.info('Publishing package', { name: pkg.name, version: pkg.version });\n\n // Replace link: deps with real versions before publish, restore after\n const pkgJsonPath = join(pkg.path, 'package.json');\n const originalPkgJson = readFileSync(pkgJsonPath, 'utf-8');\n let restored = false;\n\n try {\n const pkgJson = JSON.parse(originalPkgJson);\n let modified = false;\n\n for (const section of ['dependencies', 'peerDependencies'] as const) {\n const deps = pkgJson[section];\n if (!deps) {continue;}\n for (const [depName, depValue] of Object.entries(deps)) {\n if (typeof depValue !== 'string') {continue;}\n const val = depValue as string;\n\n if (val.startsWith('link:')) {\n const planVersion = versionMap.get(depName);\n if (planVersion) {\n deps[depName] = `^${planVersion}`;\n modified = true;\n } else {\n try {\n const linkPath = val.replace('link:', '');\n const linkedPkg = JSON.parse(readFileSync(join(pkg.path, linkPath, 'package.json'), 'utf-8'));\n deps[depName] = `^${linkedPkg.version}`;\n modified = true;\n } catch {\n deps[depName] = '*';\n modified = true;\n }\n }\n } else if (val.startsWith('workspace:') && packageManager !== 'pnpm') {\n // workspace:* → ^version only needed for npm/yarn (pnpm publish handles this automatically)\n const planVersion = versionMap.get(depName);\n if (planVersion) {\n deps[depName] = val === 'workspace:*' ? `^${planVersion}` : val.replace('workspace:', '');\n modified = true;\n }\n }\n }\n }\n\n if (modified) {\n writeFileSync(pkgJsonPath, JSON.stringify(pkgJson, null, 2) + '\\n');\n logger?.info(`Replaced link: deps for ${pkg.name}`);\n }\n\n const loader = useLoader(`Publishing ${pkg.name}@${pkg.version}...`);\n loader.start();\n\n let attempts = 0;\n const maxAttempts = 3;\n let published = false;\n\n while (!published && attempts < maxAttempts) {\n attempts++;\n\n try {\n await publishSinglePackage({\n packagePath: pkg.path,\n packageManager,\n otp,\n dryRun,\n tag,\n access,\n });\n\n published = true;\n results.push({ name: pkg.name, version: pkg.version, success: true });\n\n const successMsg = dryRun\n ? `Dry-run succeeded for ${pkg.name}@${pkg.version}`\n : `Published ${pkg.name}@${pkg.version}`;\n\n loader.succeed(successMsg);\n logger?.info('Package published successfully', {\n name: pkg.name,\n version: pkg.version,\n dryRun,\n });\n } catch (error: any) {\n const errorMessage = error.message || String(error);\n\n // Check if OTP is required\n if (errorMessage.includes('EOTP') || errorMessage.includes('one-time password')) {\n if (attempts < maxAttempts) {\n loader.succeed(`🔐 2FA required for ${pkg.name}`);\n logger?.info('OTP required for publishing', {\n name: pkg.name,\n attempt: attempts,\n });\n\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n try {\n otp = await rl.question(' Enter OTP code: ');\n rl.close();\n\n if (!otp || otp.trim().length !== 6) {\n ui.write?.(' ⚠️ Invalid OTP code (must be 6 digits)\\n');\n logger?.warn('Invalid OTP code provided', { length: otp?.trim().length });\n otp = undefined;\n continue;\n }\n\n loader.update({ text: `Publishing ${pkg.name}@${pkg.version} with OTP...` });\n loader.start();\n logger?.debug('Retrying with OTP');\n } catch (e) {\n rl.close();\n throw e;\n }\n } else {\n loader.fail('Max OTP attempts reached');\n logger?.error('Max OTP attempts reached', {\n name: pkg.name,\n attempts: maxAttempts,\n });\n results.push({\n name: pkg.name,\n version: pkg.version,\n success: false,\n error: 'Max OTP attempts reached',\n });\n break;\n }\n } else {\n loader.fail(`Failed: ${errorMessage}`);\n logger?.error('Package publish failed', {\n name: pkg.name,\n version: pkg.version,\n error: errorMessage,\n });\n results.push({\n name: pkg.name,\n version: pkg.version,\n success: false,\n error: errorMessage,\n });\n break;\n }\n }\n }\n } finally {\n // Always restore original package.json\n if (!restored) {\n writeFileSync(pkgJsonPath, originalPkgJson);\n restored = true;\n }\n }\n }\n\n // Build result summary\n const published = results\n .filter((r) => r.success)\n .map((r) => `${r.name}@${r.version}`);\n const failed = results\n .filter((r) => !r.success)\n .map((r) => `${r.name}@${r.version}`);\n const errors = results\n .filter((r) => !r.success && r.error)\n .map((r) => `${r.name}: ${r.error}`);\n\n return {\n results,\n published,\n failed,\n skipped: dryRun ? packages.map((p) => `${p.name}@${p.version} (dry-run)`) : [],\n errors,\n };\n}\n\ninterface PublishSingleOptions {\n packagePath: string;\n packageManager?: 'pnpm' | 'npm' | 'yarn';\n otp?: string;\n dryRun?: boolean;\n tag?: string;\n access?: string;\n}\n\n/**\n * Publish a single package using npm CLI\n */\nfunction publishSinglePackage(options: PublishSingleOptions): Promise<void> {\n const { packagePath, packageManager = 'pnpm', otp, dryRun, tag, access } = options;\n\n return new Promise((resolve, reject) => {\n const args = ['publish'];\n\n if (packageManager === 'pnpm') {\n args.push('--no-git-checks');\n }\n\n if (dryRun) {\n args.push('--dry-run');\n }\n\n if (otp) {\n args.push(`--otp=${otp}`);\n }\n\n if (tag) {\n args.push(`--tag=${tag}`);\n }\n\n if (access) {\n args.push(`--access=${access}`);\n }\n\n const child = spawn(packageManager, args, {\n cwd: packagePath,\n stdio: ['inherit', 'pipe', 'pipe'],\n shell: true,\n });\n\n let stdout = '';\n let stderr = '';\n\n child.stdout?.on('data', (data) => {\n stdout += data.toString();\n });\n\n child.stderr?.on('data', (data) => {\n stderr += data.toString();\n });\n\n child.on('close', (code) => {\n if (code === 0) {\n resolve();\n } else {\n const errorOutput = stderr || stdout;\n reject(new Error(errorOutput));\n }\n });\n\n child.on('error', (err) => {\n reject(err);\n });\n });\n}\n","/**\n * Release run command — thin adapter over core runReleasePipeline().\n * Mirror of rest/handlers/run-handler.ts for CLI context.\n *\n * Flow:\n * 1. Load config\n * 2. Plan (discover packages, compute versions)\n * 3. Show plan table + confirm [y/N] (skipped with --yes or --dry-run)\n * 4. Execute pipeline with elapsed-time progress\n */\n\nimport * as readline from 'node:readline/promises';\nimport {\n defineCommand,\n type CLIInput,\n type CommandResult,\n type PluginContextV3,\n useLLM,\n useLoader,\n useConfig,\n} from '@kb-labs/sdk';\nimport {\n runReleasePipeline,\n planRelease,\n resolveScopePath,\n type ReleaseConfig,\n type ReleaseReport,\n type CheckResult,\n type PublishablePackage,\n type PublishResult,\n} from '@kb-labs/release-manager-core';\nimport { findRepoRoot } from '../../shared/utils';\nimport { createChangelogGenerator } from '../../shared/changelog-factory';\nimport { publishPackagesProgrammatic } from '../../shared/publish-programmatic';\nimport { publishPackagesWithOTP } from '../../shared/publish-with-otp';\n\ninterface RunFlags {\n scope?: string;\n flow?: string;\n bump?: 'patch' | 'minor' | 'major' | 'auto';\n strict?: boolean;\n 'dry-run'?: boolean;\n 'skip-checks'?: boolean;\n 'skip-build'?: boolean;\n 'skip-verify'?: boolean;\n 'no-verify'?: boolean;\n yes?: boolean;\n json?: boolean;\n}\n\ntype ReleaseRunResult = CommandResult & {\n report?: ReleaseReport;\n};\n\nconst BUMP_SYMBOL: Record<string, string> = {\n major: '!!',\n minor: '+',\n patch: '·',\n auto: '?',\n};\n\nexport default defineCommand({\n id: 'release:run',\n description: 'Execute release process (plan, check, publish)',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<RunFlags>): Promise<ReleaseRunResult> {\n const { flags } = input;\n const cwd = ctx.cwd || process.cwd();\n const repoRoot = await findRepoRoot(cwd);\n const dryRun = flags['dry-run'] === true;\n const skipYes = flags.yes === true || dryRun;\n\n // 1. Load config\n const configLoader = useLoader('Loading configuration...');\n configLoader.start();\n const fileConfig = await useConfig<ReleaseConfig>();\n const config: ReleaseConfig = {\n ...fileConfig,\n ...(flags.bump && { bump: flags.bump }),\n ...(flags.strict !== undefined && { strict: flags.strict }),\n };\n configLoader.succeed('Configuration loaded');\n\n const scopeCwd = await resolveScopePath(repoRoot, flags.scope || 'root');\n\n // 2. Plan — run separately so we can show it before asking for confirm\n const planLoader = useLoader('Discovering packages...');\n planLoader.start();\n const plan = await planRelease({\n cwd: repoRoot,\n config,\n scope: flags.scope,\n flow: flags.flow,\n bumpOverride: config.bump as any,\n });\n planLoader.succeed(`Found ${plan.packages.length} package(s)`);\n\n if (plan.packages.length === 0) {\n ctx.ui.sideBox({\n title: 'Release',\n sections: [{ items: [`${ctx.ui.symbols.warning} No packages to release`] }],\n status: 'info',\n });\n return { exitCode: 0 };\n }\n\n // 3. Show plan table\n if (!flags.json) {\n const rows = plan.packages.map(pkg => {\n const bump = pkg.bump ?? 'auto';\n const sym = BUMP_SYMBOL[bump] ?? '?';\n return ` ${sym} ${pkg.name.padEnd(40)} ${pkg.currentVersion.padStart(8)} → ${pkg.nextVersion}`;\n });\n\n ctx.ui.sideBox({\n title: dryRun ? 'Release Plan (dry-run)' : 'Release Plan',\n sections: [\n {\n header: `${plan.packages.length} package(s) · strategy: ${config.versioningStrategy ?? 'independent'}${flags.flow ? ` · flow: ${flags.flow}` : ''}`,\n items: rows,\n },\n ],\n status: 'info',\n });\n\n if (flags['no-verify']) {\n ctx.ui.write?.(` ⚠️ --no-verify: git pre-push hooks will be skipped\\n`);\n }\n }\n\n // 4. Confirm (skip with --yes or --dry-run)\n if (!skipYes) {\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout });\n let answer: string;\n try {\n answer = await rl.question('\\nProceed with release? [y/N] ');\n } finally {\n rl.close();\n }\n\n if (answer.trim().toLowerCase() !== 'y') {\n ctx.ui.sideBox({\n title: 'Release',\n sections: [{ items: [`${ctx.ui.symbols.info} Cancelled`] }],\n status: 'info',\n });\n return { exitCode: 0 };\n }\n }\n\n // 5. Execute pipeline\n const llm = useLLM();\n const changelog = createChangelogGenerator(config, llm ?? undefined);\n\n const token = process.env.NPM_TOKEN ?? process.env.NODE_AUTH_TOKEN;\n const packageManager = config.workspace?.type ?? config.publish?.packageManager ?? 'pnpm';\n const publisher = {\n async publish(packages: PublishablePackage[], opts: { dryRun?: boolean; access?: string }): Promise<PublishResult> {\n if (token) {\n return publishPackagesProgrammatic({ packages, packageManager, dryRun: opts.dryRun }) as any;\n }\n return publishPackagesWithOTP({\n packages,\n packageManager,\n dryRun: opts.dryRun,\n access: opts.access ?? 'public',\n ui: ctx.ui,\n logger: ctx.platform?.logger,\n }) as any;\n },\n };\n\n const pipelineLoader = useLoader('Running release pipeline...');\n pipelineLoader.start();\n\n const pipelineStart = Date.now();\n\n const result = await runReleasePipeline({\n cwd,\n repoRoot,\n scopeCwd,\n scope: flags.scope,\n flow: flags.flow,\n config,\n dryRun,\n skipChecks: flags['skip-checks'],\n skipBuild: flags['skip-build'],\n skipVerify: flags['skip-verify'],\n noVerify: flags['no-verify'],\n checks: (flags.flow ? config.flows?.[flags.flow]?.checks : undefined)\n ?? (flags.scope ? config.scopes?.[flags.scope]?.checks : undefined)\n ?? config.checks ?? [],\n publisher,\n changelog,\n logger: ctx.platform?.logger,\n onProgress: (_stage, message) => {\n const elapsed = ((Date.now() - pipelineStart) / 1000).toFixed(1);\n pipelineLoader.update({ text: `[${elapsed}s] ${message}` });\n },\n });\n\n pipelineLoader.succeed(result.success ? 'Release completed' : 'Release failed');\n\n if (flags.json) {\n ctx.ui?.json?.(result.report);\n } else {\n const report = result.report;\n const sections: Array<{ header?: string; items: string[] }> = [];\n\n if (!dryRun && report.result.published?.length) {\n sections.push({\n header: 'Published',\n items: report.result.published.map(p => `${ctx.ui.symbols.success} ${p}`),\n });\n }\n\n if (dryRun && report.result.skipped?.length) {\n sections.push({\n header: 'Would publish (dry-run)',\n items: report.result.skipped.map(p => `${ctx.ui.symbols.info} ${p.replace(' (dry-run)', '')}`),\n });\n }\n\n if (report.result.checks) {\n const checkEntries = (Object.values(report.result.checks) as CheckResult[]).filter(Boolean);\n const passed = checkEntries.filter(c => c.ok);\n const failed = checkEntries.filter(c => !c.ok && c.hint !== 'optional');\n const skipped = checkEntries.filter(c => !c.ok && c.hint === 'optional');\n\n if (checkEntries.length > 0) {\n const checkItems: string[] = [];\n\n for (const c of checkEntries) {\n const sym = c.ok ? ctx.ui.symbols.success : (c.hint === 'optional' ? ctx.ui.symbols.warning : ctx.ui.symbols.error);\n const timing = c.timingMs ? ` (${(c.timingMs / 1000).toFixed(1)}s)` : '';\n checkItems.push(`${sym} ${c.id}${timing}`);\n\n if (!c.ok && c.hint !== 'optional') {\n if (c.details?.packagePath) checkItems.push(` package: ${c.details.packagePath}`);\n if (c.details?.error) checkItems.push(` reason: ${c.details.error}`);\n const output = (c.details?.stderr || c.details?.stdout || '').trim();\n if (output) {\n const lines = output.split('\\n').slice(0, 8);\n checkItems.push(` output:`);\n for (const line of lines) checkItems.push(` ${line}`);\n }\n if (c.packages?.filter(p => !p.ok).length) {\n const failedPkgs = c.packages.filter(p => !p.ok);\n checkItems.push(` failed in ${failedPkgs.length}/${c.packages.length} package(s):`);\n for (const pkg of failedPkgs.slice(0, 10)) {\n checkItems.push(` - ${pkg.path}${pkg.details?.error ? `: ${pkg.details.error}` : ''}`);\n }\n }\n }\n }\n\n sections.push({\n header: `Checks — ${passed.length} passed, ${failed.length} failed${skipped.length ? `, ${skipped.length} skipped` : ''}`,\n items: checkItems,\n });\n }\n }\n\n if (report.result.errors?.length && !report.result.checks) {\n sections.push({\n header: 'Errors',\n items: report.result.errors.map(e => `${ctx.ui.symbols.error} ${e}`),\n });\n }\n\n if (report.result.git) {\n const g = report.result.git;\n sections.push({\n header: 'Git',\n items: [\n `Committed: ${g.committed}`,\n `Tags: ${g.tagged?.join(', ') || 'none'}`,\n `Pushed: ${g.pushed}`,\n ],\n });\n }\n\n ctx.ui.sideBox({\n title: 'Release',\n sections,\n status: result.success ? 'success' : 'error',\n timing: report.result.timingMs,\n });\n }\n\n return { exitCode: result.success ? 0 : 1, report: result.report };\n },\n },\n});\n"]}
1
+ {"version":3,"sources":["../../../src/shared/changelog-factory.ts","../../../src/shared/publish-programmatic.ts","../../../src/shared/publish-with-otp.ts","../../../src/cli/commands/run.ts"],"names":["join","readFileSync","writeFileSync","useEnv","publishSinglePackage","published","failed","errors","spawn","useLoader","readline2"],"mappings":"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","file":"run.js","sourcesContent":["/**\n * Shared changelog generator factory.\n * Used by both CLI (run.ts) and REST (run-handler.ts) to avoid duplication.\n */\n\nimport {\n generateChangelog,\n generateSimpleChangelog,\n type ChangelogPackageInfo,\n} from '@kb-labs/release-manager-changelog';\nimport type { ReleaseConfig, ChangelogGenerator } from '@kb-labs/release-manager-core';\n\nexport function createChangelogGenerator(config: ReleaseConfig, llm?: any): ChangelogGenerator {\n return {\n async generate(plan, opts) {\n const locale = (config.changelog?.locale as 'en' | 'ru') || 'en';\n const packages: ChangelogPackageInfo[] = plan.packages.map(pkg => ({\n name: pkg.name,\n path: pkg.path,\n currentVersion: pkg.currentVersion,\n nextVersion: pkg.nextVersion,\n bump: pkg.bump === 'auto' ? 'patch' : pkg.bump,\n }));\n try {\n const result = await generateChangelog({\n repoRoot: opts.repoRoot,\n gitCwd: opts.gitCwd,\n packages,\n range: { to: 'HEAD' },\n changelog: {\n template: config.changelog?.template ?? undefined,\n locale,\n metadata: config.changelog?.metadata,\n ignoreAuthors: config.changelog?.ignoreAuthors,\n includeTypes: config.changelog?.includeTypes as string[],\n excludeTypes: config.changelog?.excludeTypes as string[],\n collapseMerges: config.changelog?.collapseMerges,\n collapseReverts: config.changelog?.collapseReverts,\n preferMergeSummary: config.changelog?.preferMergeSummary,\n groups: config.changelog?.groups,\n },\n git: {\n autoUnshallow: config.git?.autoUnshallow,\n requireSignedTags: config.git?.requireSignedTags,\n baseUrl: config.git?.baseUrl ?? undefined,\n },\n platform: llm ? { llm } : undefined,\n });\n return result.markdown;\n } catch {\n return generateSimpleChangelog(packages, locale);\n }\n },\n };\n}\n","/**\n * Programmatic npm publishing for REST handlers (non-interactive context)\n *\n * Uses `npm publish` CLI via spawn with NODE_AUTH_TOKEN env variable.\n * This is the correct approach for granular access tokens (classic tokens\n * were revoked by npm in December 2025).\n *\n * Token resolution order:\n * 1. options.token (explicit override)\n * 2. NPM_TOKEN env variable\n * 3. NODE_AUTH_TOKEN env variable\n */\n\nimport { spawn } from 'node:child_process';\nimport { readFileSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { useLogger, useEnv } from '@kb-labs/sdk';\n\nexport interface PackageToPublish {\n name: string;\n version: string;\n path: string;\n}\n\nexport interface ProgrammaticPublishOptions {\n packages: PackageToPublish[];\n packageManager?: 'pnpm' | 'npm' | 'yarn';\n dryRun?: boolean;\n otp?: string;\n tag?: string;\n access?: 'public' | 'restricted';\n registry?: string;\n token?: string;\n}\n\nexport interface PublishResult {\n name: string;\n version: string;\n success: boolean;\n error?: string;\n}\n\nexport interface ProgrammaticPublishResult {\n results: PublishResult[];\n published: string[];\n failed: string[];\n skipped: string[];\n errors: string[];\n}\n\n/**\n * Resolve npm auth token from options or environment\n */\nfunction resolveToken(token?: string): string | undefined {\n return token ?? useEnv('NPM_TOKEN') ?? useEnv('NODE_AUTH_TOKEN');\n}\n\n/**\n * Publish a single package using npm CLI\n * Passes auth token via NODE_AUTH_TOKEN env (recommended for granular tokens)\n */\nfunction publishSinglePackage(options: {\n packagePath: string;\n packageManager: string;\n token: string | undefined;\n otp?: string;\n dryRun?: boolean;\n tag?: string;\n access?: string;\n registry?: string;\n}): Promise<void> {\n const { packagePath, packageManager, token, otp, dryRun, tag, access, registry } = options;\n\n return new Promise((resolve, reject) => {\n const args = ['publish'];\n\n // pnpm checks git cleanliness before publish, but our pipeline already bumps versions\n // (making the tree dirty) before calling publish — disable this check.\n if (packageManager === 'pnpm') {\n args.push('--no-git-checks');\n }\n\n if (dryRun) {\n args.push('--dry-run');\n }\n\n if (tag) {\n args.push(`--tag=${tag}`);\n }\n\n if (access) {\n args.push(`--access=${access}`);\n }\n\n if (registry) {\n args.push(`--registry=${registry}`);\n }\n\n if (otp) {\n args.push(`--otp=${otp}`);\n }\n\n // Pass token via env — this is the correct way for granular tokens\n const env: NodeJS.ProcessEnv = { ...process.env };\n if (token) {\n env['NODE_AUTH_TOKEN'] = token;\n }\n\n const child = spawn(packageManager, args, {\n cwd: packagePath,\n stdio: ['ignore', 'pipe', 'pipe'],\n shell: true,\n env,\n });\n\n let stdout = '';\n let stderr = '';\n\n child.stdout?.on('data', (data: Buffer) => {\n stdout += data.toString();\n });\n\n child.stderr?.on('data', (data: Buffer) => {\n stderr += data.toString();\n });\n\n child.on('close', (code: number | null) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(stderr || stdout || `${packageManager} publish exited with code ${code}`));\n }\n });\n\n child.on('error', (err: Error) => {\n reject(err);\n });\n });\n}\n\n/**\n * Publish packages programmatically (non-interactive, for REST handlers)\n * Uses npm CLI with NODE_AUTH_TOKEN — works with granular access tokens.\n */\nexport async function publishPackagesProgrammatic(\n options: ProgrammaticPublishOptions\n): Promise<ProgrammaticPublishResult> {\n const { packages, packageManager = 'pnpm', dryRun, otp, tag, access, registry } = options;\n const logger = useLogger();\n\n const token = resolveToken(options.token);\n\n if (!token && !dryRun) {\n const error = 'No npm token found. Set NPM_TOKEN (or NODE_AUTH_TOKEN) in environment.';\n logger.error(error);\n return {\n results: [],\n published: [],\n failed: packages.map((p) => `${p.name}@${p.version}`),\n skipped: [],\n errors: [error],\n };\n }\n\n // Build version map from all packages in this release for link: → ^version replacement\n const versionMap = new Map(packages.map(p => [p.name, p.version]));\n\n const CONCURRENCY = Number(useEnv('KB_PUBLISH_CONCURRENCY') ?? 8);\n\n const publishOne = async (pkg: PackageToPublish): Promise<PublishResult> => {\n logger.info(`Publishing ${pkg.name}@${pkg.version}`, { path: pkg.path, dryRun });\n\n const pkgJsonPath = join(pkg.path, 'package.json');\n const originalPkgJson = readFileSync(pkgJsonPath, 'utf-8');\n let restored = false;\n\n try {\n const pkgJson = JSON.parse(originalPkgJson);\n let modified = false;\n\n for (const section of ['dependencies', 'peerDependencies'] as const) {\n const deps = pkgJson[section];\n if (!deps) {continue;}\n for (const [depName, depValue] of Object.entries(deps)) {\n if (typeof depValue !== 'string') {continue;}\n const val = depValue as string;\n\n if (val.startsWith('link:')) {\n const planVersion = versionMap.get(depName);\n if (planVersion) {\n deps[depName] = `^${planVersion}`;\n modified = true;\n } else {\n try {\n const linkPath = val.replace('link:', '');\n const linkedPkg = JSON.parse(readFileSync(join(pkg.path, linkPath, 'package.json'), 'utf-8'));\n deps[depName] = `^${linkedPkg.version}`;\n modified = true;\n } catch {\n deps[depName] = '*';\n modified = true;\n }\n }\n } else if (val.startsWith('workspace:') && packageManager !== 'pnpm') {\n const planVersion = versionMap.get(depName);\n if (planVersion) {\n deps[depName] = val === 'workspace:*' ? `^${planVersion}` : val.replace('workspace:', '');\n modified = true;\n }\n }\n }\n }\n\n if (modified) {\n writeFileSync(pkgJsonPath, JSON.stringify(pkgJson, null, 2) + '\\n');\n }\n\n await publishSinglePackage({\n packagePath: pkg.path,\n packageManager,\n token,\n otp,\n dryRun,\n tag,\n access: access ?? 'public',\n registry,\n });\n\n logger.info(`Published ${pkg.name}@${pkg.version}`);\n return { name: pkg.name, version: pkg.version, success: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Failed to publish ${pkg.name}@${pkg.version}`, undefined, { error: message });\n return { name: pkg.name, version: pkg.version, success: false, error: message };\n } finally {\n if (!restored) {\n writeFileSync(pkgJsonPath, originalPkgJson);\n restored = true;\n }\n }\n };\n\n // Run publishes in parallel batches\n const results: PublishResult[] = [];\n for (let i = 0; i < packages.length; i += CONCURRENCY) {\n const batch = packages.slice(i, i + CONCURRENCY);\n const batchResults = await Promise.all(batch.map(publishOne));\n results.push(...batchResults);\n }\n\n const published = results.filter((r) => r.success).map((r) => `${r.name}@${r.version}`);\n const failed = results.filter((r) => !r.success).map((r) => `${r.name}@${r.version}`);\n const errors = results.filter((r) => !r.success && r.error).map((r) => `${r.name}: ${r.error}`);\n\n return {\n results,\n published,\n failed,\n skipped: dryRun ? packages.map((p) => `${p.name}@${p.version} (dry-run)`) : [],\n errors,\n };\n}\n","/**\n * Shared publishing logic with interactive OTP support\n * Used by both `release:run` and `release publish` commands\n */\n\nimport { spawn } from 'node:child_process';\nimport { readFileSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport * as readline from 'node:readline/promises';\nimport { useLoader, useEnv } from '@kb-labs/sdk';\n\nexport interface PackageToPublish {\n name: string;\n version: string;\n path: string;\n}\n\nexport interface PublishWithOTPOptions {\n packages: PackageToPublish[];\n packageManager?: 'pnpm' | 'npm' | 'yarn';\n dryRun?: boolean;\n otp?: string;\n tag?: string;\n access?: string;\n ui: {\n write?: (text: string) => void;\n };\n logger?: {\n info: (msg: string, meta?: any) => void;\n warn: (msg: string, meta?: any) => void;\n error: (msg: string, meta?: any) => void;\n debug: (msg: string, meta?: any) => void;\n };\n}\n\nexport interface PublishResult {\n name: string;\n version: string;\n success: boolean;\n error?: string;\n}\n\nexport interface PublishWithOTPResult {\n results: PublishResult[];\n published: string[];\n failed: string[];\n skipped: string[];\n errors: string[];\n}\n\n/**\n * Publish packages with interactive OTP support\n */\nexport async function publishPackagesWithOTP(\n options: PublishWithOTPOptions\n): Promise<PublishWithOTPResult> {\n const { packages, packageManager = 'pnpm', dryRun, tag, access, ui, logger } = options;\n let otp = options.otp;\n\n const results: PublishResult[] = [];\n\n // Build version map from all packages in this release for link: → ^version replacement\n const versionMap = new Map(packages.map(p => [p.name, p.version]));\n\n // Helper: prepare package.json (replace link:/workspace: deps), returns a restore function\n const preparePackage = (pkg: PackageToPublish): (() => void) => {\n const pkgJsonPath = join(pkg.path, 'package.json');\n const originalPkgJson = readFileSync(pkgJsonPath, 'utf-8');\n const pkgJson = JSON.parse(originalPkgJson);\n let modified = false;\n\n for (const section of ['dependencies', 'peerDependencies'] as const) {\n const deps = pkgJson[section];\n if (!deps) {continue;}\n for (const [depName, depValue] of Object.entries(deps)) {\n if (typeof depValue !== 'string') {continue;}\n const val = depValue as string;\n\n if (val.startsWith('link:')) {\n const planVersion = versionMap.get(depName);\n if (planVersion) {\n deps[depName] = `^${planVersion}`;\n modified = true;\n } else {\n try {\n const linkPath = val.replace('link:', '');\n const linkedPkg = JSON.parse(readFileSync(join(pkg.path, linkPath, 'package.json'), 'utf-8'));\n deps[depName] = `^${linkedPkg.version}`;\n modified = true;\n } catch {\n deps[depName] = '*';\n modified = true;\n }\n }\n } else if (val.startsWith('workspace:') && packageManager !== 'pnpm') {\n const planVersion = versionMap.get(depName);\n if (planVersion) {\n deps[depName] = val === 'workspace:*' ? `^${planVersion}` : val.replace('workspace:', '');\n modified = true;\n }\n }\n }\n }\n\n if (modified) {\n writeFileSync(pkgJsonPath, JSON.stringify(pkgJson, null, 2) + '\\n');\n }\n\n return () => writeFileSync(pkgJsonPath, originalPkgJson);\n };\n\n // Fast-path: parallel optimistic publishing (works when no OTP is required — pnpm keychain/session)\n // If any package fails with EOTP, we fall back to sequential path below for the rest.\n const CONCURRENCY = Number(useEnv('KB_PUBLISH_CONCURRENCY') ?? 8);\n const remaining: PackageToPublish[] = [];\n let otpFailureDetected = false;\n\n const fastPublishOne = async (pkg: PackageToPublish): Promise<PublishResult | null> => {\n const restore = preparePackage(pkg);\n try {\n await publishSinglePackage({ packagePath: pkg.path, packageManager, otp, dryRun, tag, access });\n logger?.info('Package published successfully (fast-path)', { name: pkg.name, version: pkg.version, dryRun });\n return { name: pkg.name, version: pkg.version, success: true };\n } catch (error: any) {\n const msg = error.message || String(error);\n if (msg.includes('EOTP') || msg.includes('one-time password')) {\n otpFailureDetected = true;\n return null; // requeue for sequential path\n }\n logger?.error('Package publish failed (fast-path)', { name: pkg.name, error: msg });\n return { name: pkg.name, version: pkg.version, success: false, error: msg };\n } finally {\n restore();\n }\n };\n\n ui.write?.(` Publishing ${packages.length} package(s) in parallel (concurrency=${CONCURRENCY})...\\n`);\n for (let i = 0; i < packages.length; i += CONCURRENCY) {\n const batch = packages.slice(i, i + CONCURRENCY);\n const batchResults = await Promise.all(batch.map(fastPublishOne));\n for (let j = 0; j < batch.length; j++) {\n const res = batchResults[j];\n if (res === null || res === undefined) {\n remaining.push(batch[j]!);\n } else {\n results.push(res);\n }\n }\n // If OTP needed, stop parallelizing and queue the rest for sequential path\n if (otpFailureDetected) {\n remaining.push(...packages.slice(i + CONCURRENCY));\n break;\n }\n }\n\n if (remaining.length === 0) {\n const published = results.filter((r) => r.success).map((r) => `${r.name}@${r.version}`);\n const failed = results.filter((r) => !r.success).map((r) => `${r.name}@${r.version}`);\n const errors = results.filter((r) => !r.success && r.error).map((r) => `${r.name}: ${r.error}`);\n return {\n results,\n published,\n failed,\n skipped: dryRun ? packages.map((p) => `${p.name}@${p.version} (dry-run)`) : [],\n errors,\n };\n }\n\n ui.write?.(` OTP required — falling back to sequential publish for ${remaining.length} package(s)\\n`);\n\n for (const pkg of remaining) {\n logger?.info('Publishing package', { name: pkg.name, version: pkg.version });\n\n // Replace link: deps with real versions before publish, restore after\n const pkgJsonPath = join(pkg.path, 'package.json');\n const originalPkgJson = readFileSync(pkgJsonPath, 'utf-8');\n let restored = false;\n\n try {\n const pkgJson = JSON.parse(originalPkgJson);\n let modified = false;\n\n for (const section of ['dependencies', 'peerDependencies'] as const) {\n const deps = pkgJson[section];\n if (!deps) {continue;}\n for (const [depName, depValue] of Object.entries(deps)) {\n if (typeof depValue !== 'string') {continue;}\n const val = depValue as string;\n\n if (val.startsWith('link:')) {\n const planVersion = versionMap.get(depName);\n if (planVersion) {\n deps[depName] = `^${planVersion}`;\n modified = true;\n } else {\n try {\n const linkPath = val.replace('link:', '');\n const linkedPkg = JSON.parse(readFileSync(join(pkg.path, linkPath, 'package.json'), 'utf-8'));\n deps[depName] = `^${linkedPkg.version}`;\n modified = true;\n } catch {\n deps[depName] = '*';\n modified = true;\n }\n }\n } else if (val.startsWith('workspace:') && packageManager !== 'pnpm') {\n // workspace:* → ^version only needed for npm/yarn (pnpm publish handles this automatically)\n const planVersion = versionMap.get(depName);\n if (planVersion) {\n deps[depName] = val === 'workspace:*' ? `^${planVersion}` : val.replace('workspace:', '');\n modified = true;\n }\n }\n }\n }\n\n if (modified) {\n writeFileSync(pkgJsonPath, JSON.stringify(pkgJson, null, 2) + '\\n');\n logger?.info(`Replaced link: deps for ${pkg.name}`);\n }\n\n const loader = useLoader(`Publishing ${pkg.name}@${pkg.version}...`);\n loader.start();\n\n let attempts = 0;\n const maxAttempts = 3;\n let published = false;\n\n while (!published && attempts < maxAttempts) {\n attempts++;\n\n try {\n await publishSinglePackage({\n packagePath: pkg.path,\n packageManager,\n otp,\n dryRun,\n tag,\n access,\n });\n\n published = true;\n results.push({ name: pkg.name, version: pkg.version, success: true });\n\n const successMsg = dryRun\n ? `Dry-run succeeded for ${pkg.name}@${pkg.version}`\n : `Published ${pkg.name}@${pkg.version}`;\n\n loader.succeed(successMsg);\n logger?.info('Package published successfully', {\n name: pkg.name,\n version: pkg.version,\n dryRun,\n });\n } catch (error: any) {\n const errorMessage = error.message || String(error);\n\n // Check if OTP is required\n if (errorMessage.includes('EOTP') || errorMessage.includes('one-time password')) {\n if (attempts < maxAttempts) {\n loader.succeed(`🔐 2FA required for ${pkg.name}`);\n logger?.info('OTP required for publishing', {\n name: pkg.name,\n attempt: attempts,\n });\n\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n try {\n otp = await rl.question(' Enter OTP code: ');\n rl.close();\n\n if (!otp || otp.trim().length !== 6) {\n ui.write?.(' ⚠️ Invalid OTP code (must be 6 digits)\\n');\n logger?.warn('Invalid OTP code provided', { length: otp?.trim().length });\n otp = undefined;\n continue;\n }\n\n loader.update({ text: `Publishing ${pkg.name}@${pkg.version} with OTP...` });\n loader.start();\n logger?.debug('Retrying with OTP');\n } catch (e) {\n rl.close();\n throw e;\n }\n } else {\n loader.fail('Max OTP attempts reached');\n logger?.error('Max OTP attempts reached', {\n name: pkg.name,\n attempts: maxAttempts,\n });\n results.push({\n name: pkg.name,\n version: pkg.version,\n success: false,\n error: 'Max OTP attempts reached',\n });\n break;\n }\n } else {\n loader.fail(`Failed: ${errorMessage}`);\n logger?.error('Package publish failed', {\n name: pkg.name,\n version: pkg.version,\n error: errorMessage,\n });\n results.push({\n name: pkg.name,\n version: pkg.version,\n success: false,\n error: errorMessage,\n });\n break;\n }\n }\n }\n } finally {\n // Always restore original package.json\n if (!restored) {\n writeFileSync(pkgJsonPath, originalPkgJson);\n restored = true;\n }\n }\n }\n\n // Build result summary\n const published = results\n .filter((r) => r.success)\n .map((r) => `${r.name}@${r.version}`);\n const failed = results\n .filter((r) => !r.success)\n .map((r) => `${r.name}@${r.version}`);\n const errors = results\n .filter((r) => !r.success && r.error)\n .map((r) => `${r.name}: ${r.error}`);\n\n return {\n results,\n published,\n failed,\n skipped: dryRun ? packages.map((p) => `${p.name}@${p.version} (dry-run)`) : [],\n errors,\n };\n}\n\ninterface PublishSingleOptions {\n packagePath: string;\n packageManager?: 'pnpm' | 'npm' | 'yarn';\n otp?: string;\n dryRun?: boolean;\n tag?: string;\n access?: string;\n}\n\n/**\n * Publish a single package using npm CLI\n */\nfunction publishSinglePackage(options: PublishSingleOptions): Promise<void> {\n const { packagePath, packageManager = 'pnpm', otp, dryRun, tag, access } = options;\n\n return new Promise((resolve, reject) => {\n const args = ['publish'];\n\n if (packageManager === 'pnpm') {\n args.push('--no-git-checks');\n }\n\n if (dryRun) {\n args.push('--dry-run');\n }\n\n if (otp) {\n args.push(`--otp=${otp}`);\n }\n\n if (tag) {\n args.push(`--tag=${tag}`);\n }\n\n if (access) {\n args.push(`--access=${access}`);\n }\n\n const child = spawn(packageManager, args, {\n cwd: packagePath,\n stdio: ['inherit', 'pipe', 'pipe'],\n shell: true,\n });\n\n let stdout = '';\n let stderr = '';\n\n child.stdout?.on('data', (data) => {\n stdout += data.toString();\n });\n\n child.stderr?.on('data', (data) => {\n stderr += data.toString();\n });\n\n child.on('close', (code) => {\n if (code === 0) {\n resolve();\n } else {\n const errorOutput = stderr || stdout;\n reject(new Error(errorOutput));\n }\n });\n\n child.on('error', (err) => {\n reject(err);\n });\n });\n}\n","/**\n * Release run command — thin adapter over core runReleasePipeline().\n * Mirror of rest/handlers/run-handler.ts for CLI context.\n *\n * Flow:\n * 1. Load config\n * 2. Plan (discover packages, compute versions)\n * 3. Show plan table + confirm [y/N] (skipped with --yes or --dry-run)\n * 4. Execute pipeline with elapsed-time progress\n */\n\nimport * as readline from 'node:readline/promises';\nimport {\n defineCommand,\n type CLIInput,\n type CommandResult,\n type PluginContextV3,\n useLLM,\n useLoader,\n useConfig,\n useEnv,\n} from '@kb-labs/sdk';\nimport {\n runReleasePipeline,\n planRelease,\n resolveScopePath,\n type ReleaseConfig,\n type ReleaseReport,\n type CheckResult,\n type PublishablePackage,\n type PublishResult,\n} from '@kb-labs/release-manager-core';\nimport { findRepoRoot } from '../../shared/utils';\nimport { createChangelogGenerator } from '../../shared/changelog-factory';\nimport { publishPackagesProgrammatic } from '../../shared/publish-programmatic';\nimport { publishPackagesWithOTP } from '../../shared/publish-with-otp';\n\ninterface RunFlags {\n scope?: string;\n flow?: string;\n bump?: 'patch' | 'minor' | 'major' | 'auto';\n strict?: boolean;\n 'dry-run'?: boolean;\n 'skip-checks'?: boolean;\n 'skip-build'?: boolean;\n 'skip-verify'?: boolean;\n 'no-verify'?: boolean;\n yes?: boolean;\n json?: boolean;\n}\n\ntype ReleaseRunResult = CommandResult & {\n report?: ReleaseReport;\n};\n\nconst BUMP_SYMBOL: Record<string, string> = {\n major: '!!',\n minor: '+',\n patch: '·',\n auto: '?',\n};\n\nexport default defineCommand({\n id: 'release:run',\n description: 'Execute release process (plan, check, publish)',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<RunFlags>): Promise<ReleaseRunResult> {\n const { flags } = input;\n const cwd = ctx.cwd || process.cwd();\n const repoRoot = await findRepoRoot(cwd);\n const dryRun = flags['dry-run'] === true;\n const skipYes = flags.yes === true || dryRun;\n\n // 1. Load config\n const configLoader = useLoader('Loading configuration...');\n configLoader.start();\n const fileConfig = await useConfig<ReleaseConfig>();\n const config: ReleaseConfig = {\n ...fileConfig,\n ...(flags.bump && { bump: flags.bump }),\n ...(flags.strict !== undefined && { strict: flags.strict }),\n };\n configLoader.succeed('Configuration loaded');\n\n const scopeCwd = await resolveScopePath(repoRoot, flags.scope || 'root');\n\n // 2. Plan — run separately so we can show it before asking for confirm\n const planLoader = useLoader('Discovering packages...');\n planLoader.start();\n const plan = await planRelease({\n cwd: repoRoot,\n config,\n scope: flags.scope,\n flow: flags.flow,\n bumpOverride: config.bump as any,\n });\n planLoader.succeed(`Found ${plan.packages.length} package(s)`);\n\n if (plan.packages.length === 0) {\n ctx.ui.sideBox({\n title: 'Release',\n sections: [{ items: [`${ctx.ui.symbols.warning} No packages to release`] }],\n status: 'info',\n });\n return { exitCode: 0 };\n }\n\n // 3. Show plan table\n if (!flags.json) {\n const rows = plan.packages.map(pkg => {\n const bump = pkg.bump ?? 'auto';\n const sym = BUMP_SYMBOL[bump] ?? '?';\n return ` ${sym} ${pkg.name.padEnd(40)} ${pkg.currentVersion.padStart(8)} → ${pkg.nextVersion}`;\n });\n\n ctx.ui.sideBox({\n title: dryRun ? 'Release Plan (dry-run)' : 'Release Plan',\n sections: [\n {\n header: `${plan.packages.length} package(s) · strategy: ${config.versioningStrategy ?? 'independent'}${flags.flow ? ` · flow: ${flags.flow}` : ''}`,\n items: rows,\n },\n ],\n status: 'info',\n });\n\n if (flags['no-verify']) {\n ctx.ui.write?.(` ⚠️ --no-verify: git pre-push hooks will be skipped\\n`);\n }\n }\n\n // 4. Confirm (skip with --yes or --dry-run)\n if (!skipYes) {\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout });\n let answer: string;\n try {\n answer = await rl.question('\\nProceed with release? [y/N] ');\n } finally {\n rl.close();\n }\n\n if (answer.trim().toLowerCase() !== 'y') {\n ctx.ui.sideBox({\n title: 'Release',\n sections: [{ items: [`${ctx.ui.symbols.info} Cancelled`] }],\n status: 'info',\n });\n return { exitCode: 0 };\n }\n }\n\n // 5. Execute pipeline\n const llm = useLLM();\n const changelog = createChangelogGenerator(config, llm ?? undefined);\n\n const token = useEnv('NPM_TOKEN') ?? useEnv('NODE_AUTH_TOKEN');\n const packageManager = config.workspace?.type ?? config.publish?.packageManager ?? 'pnpm';\n const publisher = {\n async publish(packages: PublishablePackage[], opts: { dryRun?: boolean; access?: string }): Promise<PublishResult> {\n if (token) {\n return publishPackagesProgrammatic({ packages, packageManager, dryRun: opts.dryRun }) as any;\n }\n return publishPackagesWithOTP({\n packages,\n packageManager,\n dryRun: opts.dryRun,\n access: opts.access ?? 'public',\n ui: ctx.ui,\n logger: ctx.platform?.logger,\n }) as any;\n },\n };\n\n const pipelineLoader = useLoader('Running release pipeline...');\n pipelineLoader.start();\n\n const pipelineStart = Date.now();\n\n const result = await runReleasePipeline({\n cwd,\n repoRoot,\n scopeCwd,\n scope: flags.scope,\n flow: flags.flow,\n config,\n dryRun,\n skipChecks: flags['skip-checks'],\n skipBuild: flags['skip-build'],\n skipVerify: flags['skip-verify'],\n noVerify: flags['no-verify'],\n checks: (flags.flow ? config.flows?.[flags.flow]?.checks : undefined)\n ?? (flags.scope ? config.scopes?.[flags.scope]?.checks : undefined)\n ?? config.checks ?? [],\n publisher,\n changelog,\n logger: ctx.platform?.logger,\n onProgress: (_stage, message) => {\n const elapsed = ((Date.now() - pipelineStart) / 1000).toFixed(1);\n pipelineLoader.update({ text: `[${elapsed}s] ${message}` });\n },\n });\n\n pipelineLoader.succeed(result.success ? 'Release completed' : 'Release failed');\n\n if (flags.json) {\n ctx.ui?.json?.(result.report);\n } else {\n const report = result.report;\n const sections: Array<{ header?: string; items: string[] }> = [];\n\n if (!dryRun && report.result.published?.length) {\n sections.push({\n header: 'Published',\n items: report.result.published.map(p => `${ctx.ui.symbols.success} ${p}`),\n });\n }\n\n if (dryRun && report.result.skipped?.length) {\n sections.push({\n header: 'Would publish (dry-run)',\n items: report.result.skipped.map(p => `${ctx.ui.symbols.info} ${p.replace(' (dry-run)', '')}`),\n });\n }\n\n if (report.result.checks) {\n const checkEntries = (Object.values(report.result.checks) as CheckResult[]).filter(Boolean);\n const passed = checkEntries.filter(c => c.ok);\n const failed = checkEntries.filter(c => !c.ok && c.hint !== 'optional');\n const skipped = checkEntries.filter(c => !c.ok && c.hint === 'optional');\n\n if (checkEntries.length > 0) {\n const checkItems: string[] = [];\n\n for (const c of checkEntries) {\n const sym = c.ok ? ctx.ui.symbols.success : (c.hint === 'optional' ? ctx.ui.symbols.warning : ctx.ui.symbols.error);\n const timing = c.timingMs ? ` (${(c.timingMs / 1000).toFixed(1)}s)` : '';\n checkItems.push(`${sym} ${c.id}${timing}`);\n\n if (!c.ok && c.hint !== 'optional') {\n if (c.details?.packagePath) {checkItems.push(` package: ${c.details.packagePath}`);}\n if (c.details?.error) {checkItems.push(` reason: ${c.details.error}`);}\n const output = (c.details?.stderr || c.details?.stdout || '').trim();\n if (output) {\n const lines = output.split('\\n').slice(0, 8);\n checkItems.push(` output:`);\n for (const line of lines) {checkItems.push(` ${line}`);}\n }\n if (c.packages?.filter(p => !p.ok).length) {\n const failedPkgs = c.packages.filter(p => !p.ok);\n checkItems.push(` failed in ${failedPkgs.length}/${c.packages.length} package(s):`);\n for (const pkg of failedPkgs.slice(0, 10)) {\n checkItems.push(` - ${pkg.path}${pkg.details?.error ? `: ${pkg.details.error}` : ''}`);\n }\n }\n }\n }\n\n sections.push({\n header: `Checks — ${passed.length} passed, ${failed.length} failed${skipped.length ? `, ${skipped.length} skipped` : ''}`,\n items: checkItems,\n });\n }\n }\n\n if (report.result.errors?.length && !report.result.checks) {\n sections.push({\n header: 'Errors',\n items: report.result.errors.map(e => `${ctx.ui.symbols.error} ${e}`),\n });\n }\n\n if (report.result.git) {\n const g = report.result.git;\n sections.push({\n header: 'Git',\n items: [\n `Committed: ${g.committed}`,\n `Tags: ${g.tagged?.join(', ') || 'none'}`,\n `Pushed: ${g.pushed}`,\n ],\n });\n }\n\n ctx.ui.sideBox({\n title: 'Release',\n sections,\n status: result.success ? 'success' : 'error',\n timing: report.result.timingMs,\n });\n }\n\n return { exitCode: result.success ? 0 : 1, report: result.report };\n },\n },\n});\n"]}
@@ -1,4 +1,4 @@
1
- import { defineHandler, findRepoRoot } from '@kb-labs/sdk';
1
+ import { defineHandler, findRepoRoot, useEnv } from '@kb-labs/sdk';
2
2
  import { readFile, access, readdir, stat } from 'fs/promises';
3
3
  import { join } from 'path';
4
4
  import 'globby';
@@ -112,7 +112,7 @@ var checklist_handler_default = defineHandler({
112
112
  previewMessage = "No files found to publish";
113
113
  }
114
114
  }
115
- const hasNpmToken = !!(process.env.NPM_TOKEN ?? process.env.NODE_AUTH_TOKEN);
115
+ const hasNpmToken = !!(useEnv("NPM_TOKEN") ?? useEnv("NODE_AUTH_TOKEN"));
116
116
  const npmStatus = hasNpmToken ? "ready" : "error";
117
117
  const npmMessage = hasNpmToken ? "npm token configured" : "Set NPM_TOKEN (granular access token) in environment";
118
118
  const canPublish = planStatus === "ready" && changelogStatus === "ready" && buildStatus === "ready" && previewStatus === "ready" && npmStatus === "ready";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/shared/utils.ts","../../../src/rest/handlers/checklist-handler.ts"],"names":["findRepoRoot","join","readFile"],"mappings":"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","file":"checklist-handler.js","sourcesContent":["import { join } from 'node:path';\nimport { readFile } from 'node:fs/promises';\nimport globby from 'globby';\n\nexport { findRepoRoot } from '@kb-labs/sdk';\n\n/**\n * Converts scope to safe directory name\n */\nexport function scopeToDir(scope: string): string {\n return scope\n .replace(/^@/, '')\n .replace(/\\//g, '-')\n .replace(/:/g, '-')\n .replace(/\\*/g, '');\n}\n\n/**\n * Converts safe directory name back to scope\n */\nexport function dirToScope(dirName: string): string {\n if (dirName === 'root') {\n return 'root';\n }\n\n const parts = dirName.split('-');\n if (parts.length >= 2) {\n return '@' + parts[0] + '-' + parts[1] + '/' + parts.slice(2).join('-');\n }\n\n return dirName;\n}\n\n/**\n * Resolve scope name to absolute filesystem path.\n * Scans all package.json in repoRoot to find the matching package by name.\n */\nexport async function resolveScopePath(repoRoot: string, scope: string): Promise<string> {\n if (scope === 'root') {\n return repoRoot;\n }\n\n if (scope.startsWith('@')) {\n const packageJsonPaths = await globby('**/package.json', {\n cwd: repoRoot,\n absolute: true,\n onlyFiles: true,\n ignore: ['**/node_modules/**', '**/dist/**', '**/build/**', '**/.git/**', '**/.*/**'],\n });\n\n for (const pkgJsonPath of packageJsonPaths) {\n try {\n const pkg = JSON.parse(await readFile(pkgJsonPath, 'utf-8'));\n if (pkg.name === scope) {\n return join(pkgJsonPath, '..');\n }\n } catch { /* skip */ }\n }\n }\n\n // Direct path or fallback\n return join(repoRoot, scope);\n}\n","/**\n * Checklist handler - Get unified release checklist status\n *\n * Returns status of all release steps: plan, changelog, build, preview\n */\n\nimport { defineHandler, findRepoRoot, type RestInput } from '@kb-labs/sdk';\nimport type {\n ReleaseChecklist,\n ChecklistItemStatus,\n ReleasePlan,\n} from '@kb-labs/release-manager-contracts';\nimport { readFile, access, readdir, stat } from 'node:fs/promises';\nimport { scopeToDir } from '../../shared/utils';\nimport { join } from 'node:path';\n\ninterface ChecklistInput {\n scope?: string;\n}\n\nexport default defineHandler({\n async execute(ctx, input: RestInput<ChecklistInput>): Promise<ReleaseChecklist> {\n const scope = input.query?.scope || 'root';\n const cwd = ctx.cwd ?? process.cwd();\n const repoRoot = await findRepoRoot(cwd);\n\n const scopeDir = scopeToDir(scope);\n const basePath = join(repoRoot, '.kb/release/plans', scopeDir, 'current');\n\n // Check plan status\n let planStatus: ChecklistItemStatus = 'pending';\n let planMessage = 'No release plan found';\n let packagesCount = 0;\n let bump: string | undefined;\n let plan: ReleasePlan | undefined;\n\n try {\n const planRaw = await readFile(join(basePath, 'plan.json'), 'utf-8');\n const parsedPlan: ReleasePlan = JSON.parse(planRaw);\n plan = parsedPlan;\n packagesCount = parsedPlan.packages.length;\n // Get bump type from first package (simplified)\n bump = parsedPlan.packages[0]?.bump;\n planStatus = 'ready';\n planMessage = `${packagesCount} package${packagesCount !== 1 ? 's' : ''}, ${bump} bump`;\n } catch {\n // No plan\n }\n\n // Check changelog status\n let changelogStatus: ChecklistItemStatus = 'pending';\n let changelogMessage = 'Changelog not generated';\n let commitsCount: number | undefined;\n\n try {\n const changelogPath = join(basePath, 'CHANGELOG.md');\n await access(changelogPath);\n const changelog = await readFile(changelogPath, 'utf-8');\n // Count commits by looking for commit-like patterns\n const commitMatches = changelog.match(/^- /gm);\n commitsCount = commitMatches?.length || 0;\n changelogStatus = 'ready';\n changelogMessage = `${commitsCount} change${commitsCount !== 1 ? 's' : ''} documented`;\n } catch {\n if (planStatus === 'ready') {\n changelogMessage = 'Generate changelog to continue';\n }\n }\n\n // Check build status\n let buildStatus: ChecklistItemStatus = 'pending';\n let buildMessage = 'Build required';\n let builtCount = 0;\n let totalCount = 0;\n\n if (plan) {\n totalCount = plan.packages.length;\n for (const pkg of plan.packages) {\n const packagePath = pkg.path.startsWith('/') ? pkg.path : join(repoRoot, pkg.path);\n try {\n await access(join(packagePath, 'dist'));\n builtCount++;\n } catch {\n // Not built\n }\n }\n\n if (builtCount === totalCount) {\n buildStatus = 'ready';\n buildMessage = `All ${totalCount} package${totalCount !== 1 ? 's' : ''} built`;\n } else if (builtCount > 0) {\n buildStatus = 'warning';\n buildMessage = `${builtCount}/${totalCount} packages built`;\n } else {\n buildMessage = `${totalCount} package${totalCount !== 1 ? 's' : ''} need build`;\n }\n }\n\n // Check preview status\n let previewStatus: ChecklistItemStatus = 'pending';\n let previewMessage = 'Waiting for build';\n let filesCount: number | undefined;\n let totalSize: number | undefined;\n\n if (buildStatus === 'ready' && plan) {\n filesCount = 0;\n totalSize = 0;\n\n for (const pkg of plan.packages) {\n const packagePath = pkg.path.startsWith('/') ? pkg.path : join(repoRoot, pkg.path);\n try {\n // Count files in dist folder recursively\n const distPath = join(packagePath, 'dist');\n const countFiles = async (dir: string): Promise<{ count: number; size: number }> => {\n let count = 0;\n let size = 0;\n const entries = await readdir(dir, { withFileTypes: true });\n for (const entry of entries) {\n const fullPath = join(dir, entry.name);\n if (entry.isDirectory()) {\n const sub = await countFiles(fullPath);\n count += sub.count;\n size += sub.size;\n } else {\n count++;\n const fileStat = await stat(fullPath);\n size += fileStat.size;\n }\n }\n return { count, size };\n };\n const result = await countFiles(distPath);\n filesCount += result.count;\n totalSize += result.size;\n } catch {\n // Skip - dist doesn't exist or error reading\n }\n }\n\n if (filesCount > 0) {\n previewStatus = 'ready';\n previewMessage = `${filesCount} file${filesCount !== 1 ? 's' : ''} ready to publish`;\n } else {\n previewStatus = 'warning';\n previewMessage = 'No files found to publish';\n }\n }\n\n // Check npm auth token\n const hasNpmToken = !!(process.env.NPM_TOKEN ?? process.env.NODE_AUTH_TOKEN);\n const npmStatus: ChecklistItemStatus = hasNpmToken ? 'ready' : 'error';\n const npmMessage = hasNpmToken\n ? 'npm token configured'\n : 'Set NPM_TOKEN (granular access token) in environment';\n\n // Determine if can publish\n const canPublish =\n planStatus === 'ready' &&\n changelogStatus === 'ready' &&\n buildStatus === 'ready' &&\n previewStatus === 'ready' &&\n npmStatus === 'ready';\n\n return {\n scope,\n plan: {\n status: planStatus,\n message: planMessage,\n packagesCount: packagesCount > 0 ? packagesCount : undefined,\n bump,\n },\n changelog: {\n status: changelogStatus,\n message: changelogMessage,\n commitsCount,\n },\n build: {\n status: buildStatus,\n message: buildMessage,\n builtCount: builtCount > 0 ? builtCount : undefined,\n totalCount: totalCount > 0 ? totalCount : undefined,\n },\n preview: {\n status: previewStatus,\n message: previewMessage,\n filesCount,\n totalSize,\n },\n npm: {\n status: npmStatus,\n message: npmMessage,\n },\n canPublish,\n };\n },\n});\n"]}
1
+ {"version":3,"sources":["../../../src/shared/utils.ts","../../../src/rest/handlers/checklist-handler.ts"],"names":["findRepoRoot","join","readFile"],"mappings":"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","file":"checklist-handler.js","sourcesContent":["import { join } from 'node:path';\nimport { readFile } from 'node:fs/promises';\nimport globby from 'globby';\n\nexport { findRepoRoot } from '@kb-labs/sdk';\n\n/**\n * Converts scope to safe directory name\n */\nexport function scopeToDir(scope: string): string {\n return scope\n .replace(/^@/, '')\n .replace(/\\//g, '-')\n .replace(/:/g, '-')\n .replace(/\\*/g, '');\n}\n\n/**\n * Converts safe directory name back to scope\n */\nexport function dirToScope(dirName: string): string {\n if (dirName === 'root') {\n return 'root';\n }\n\n const parts = dirName.split('-');\n if (parts.length >= 2) {\n return '@' + parts[0] + '-' + parts[1] + '/' + parts.slice(2).join('-');\n }\n\n return dirName;\n}\n\n/**\n * Resolve scope name to absolute filesystem path.\n * Scans all package.json in repoRoot to find the matching package by name.\n */\nexport async function resolveScopePath(repoRoot: string, scope: string): Promise<string> {\n if (scope === 'root') {\n return repoRoot;\n }\n\n if (scope.startsWith('@')) {\n const packageJsonPaths = await globby('**/package.json', {\n cwd: repoRoot,\n absolute: true,\n onlyFiles: true,\n ignore: ['**/node_modules/**', '**/dist/**', '**/build/**', '**/.git/**', '**/.*/**'],\n });\n\n for (const pkgJsonPath of packageJsonPaths) {\n try {\n const pkg = JSON.parse(await readFile(pkgJsonPath, 'utf-8'));\n if (pkg.name === scope) {\n return join(pkgJsonPath, '..');\n }\n } catch { /* skip */ }\n }\n }\n\n // Direct path or fallback\n return join(repoRoot, scope);\n}\n","/**\n * Checklist handler - Get unified release checklist status\n *\n * Returns status of all release steps: plan, changelog, build, preview\n */\n\nimport { defineHandler, findRepoRoot, useEnv, type RestInput } from '@kb-labs/sdk';\nimport type {\n ReleaseChecklist,\n ChecklistItemStatus,\n ReleasePlan,\n} from '@kb-labs/release-manager-contracts';\nimport { readFile, access, readdir, stat } from 'node:fs/promises';\nimport { scopeToDir } from '../../shared/utils';\nimport { join } from 'node:path';\n\ninterface ChecklistInput {\n scope?: string;\n}\n\nexport default defineHandler({\n async execute(ctx, input: RestInput<ChecklistInput>): Promise<ReleaseChecklist> {\n const scope = input.query?.scope || 'root';\n const cwd = ctx.cwd ?? process.cwd();\n const repoRoot = await findRepoRoot(cwd);\n\n const scopeDir = scopeToDir(scope);\n const basePath = join(repoRoot, '.kb/release/plans', scopeDir, 'current');\n\n // Check plan status\n let planStatus: ChecklistItemStatus = 'pending';\n let planMessage = 'No release plan found';\n let packagesCount = 0;\n let bump: string | undefined;\n let plan: ReleasePlan | undefined;\n\n try {\n const planRaw = await readFile(join(basePath, 'plan.json'), 'utf-8');\n const parsedPlan: ReleasePlan = JSON.parse(planRaw);\n plan = parsedPlan;\n packagesCount = parsedPlan.packages.length;\n // Get bump type from first package (simplified)\n bump = parsedPlan.packages[0]?.bump;\n planStatus = 'ready';\n planMessage = `${packagesCount} package${packagesCount !== 1 ? 's' : ''}, ${bump} bump`;\n } catch {\n // No plan\n }\n\n // Check changelog status\n let changelogStatus: ChecklistItemStatus = 'pending';\n let changelogMessage = 'Changelog not generated';\n let commitsCount: number | undefined;\n\n try {\n const changelogPath = join(basePath, 'CHANGELOG.md');\n await access(changelogPath);\n const changelog = await readFile(changelogPath, 'utf-8');\n // Count commits by looking for commit-like patterns\n const commitMatches = changelog.match(/^- /gm);\n commitsCount = commitMatches?.length || 0;\n changelogStatus = 'ready';\n changelogMessage = `${commitsCount} change${commitsCount !== 1 ? 's' : ''} documented`;\n } catch {\n if (planStatus === 'ready') {\n changelogMessage = 'Generate changelog to continue';\n }\n }\n\n // Check build status\n let buildStatus: ChecklistItemStatus = 'pending';\n let buildMessage = 'Build required';\n let builtCount = 0;\n let totalCount = 0;\n\n if (plan) {\n totalCount = plan.packages.length;\n for (const pkg of plan.packages) {\n const packagePath = pkg.path.startsWith('/') ? pkg.path : join(repoRoot, pkg.path);\n try {\n await access(join(packagePath, 'dist'));\n builtCount++;\n } catch {\n // Not built\n }\n }\n\n if (builtCount === totalCount) {\n buildStatus = 'ready';\n buildMessage = `All ${totalCount} package${totalCount !== 1 ? 's' : ''} built`;\n } else if (builtCount > 0) {\n buildStatus = 'warning';\n buildMessage = `${builtCount}/${totalCount} packages built`;\n } else {\n buildMessage = `${totalCount} package${totalCount !== 1 ? 's' : ''} need build`;\n }\n }\n\n // Check preview status\n let previewStatus: ChecklistItemStatus = 'pending';\n let previewMessage = 'Waiting for build';\n let filesCount: number | undefined;\n let totalSize: number | undefined;\n\n if (buildStatus === 'ready' && plan) {\n filesCount = 0;\n totalSize = 0;\n\n for (const pkg of plan.packages) {\n const packagePath = pkg.path.startsWith('/') ? pkg.path : join(repoRoot, pkg.path);\n try {\n // Count files in dist folder recursively\n const distPath = join(packagePath, 'dist');\n const countFiles = async (dir: string): Promise<{ count: number; size: number }> => {\n let count = 0;\n let size = 0;\n const entries = await readdir(dir, { withFileTypes: true });\n for (const entry of entries) {\n const fullPath = join(dir, entry.name);\n if (entry.isDirectory()) {\n const sub = await countFiles(fullPath);\n count += sub.count;\n size += sub.size;\n } else {\n count++;\n const fileStat = await stat(fullPath);\n size += fileStat.size;\n }\n }\n return { count, size };\n };\n const result = await countFiles(distPath);\n filesCount += result.count;\n totalSize += result.size;\n } catch {\n // Skip - dist doesn't exist or error reading\n }\n }\n\n if (filesCount > 0) {\n previewStatus = 'ready';\n previewMessage = `${filesCount} file${filesCount !== 1 ? 's' : ''} ready to publish`;\n } else {\n previewStatus = 'warning';\n previewMessage = 'No files found to publish';\n }\n }\n\n // Check npm auth token\n const hasNpmToken = !!(useEnv('NPM_TOKEN') ?? useEnv('NODE_AUTH_TOKEN'));\n const npmStatus: ChecklistItemStatus = hasNpmToken ? 'ready' : 'error';\n const npmMessage = hasNpmToken\n ? 'npm token configured'\n : 'Set NPM_TOKEN (granular access token) in environment';\n\n // Determine if can publish\n const canPublish =\n planStatus === 'ready' &&\n changelogStatus === 'ready' &&\n buildStatus === 'ready' &&\n previewStatus === 'ready' &&\n npmStatus === 'ready';\n\n return {\n scope,\n plan: {\n status: planStatus,\n message: planMessage,\n packagesCount: packagesCount > 0 ? packagesCount : undefined,\n bump,\n },\n changelog: {\n status: changelogStatus,\n message: changelogMessage,\n commitsCount,\n },\n build: {\n status: buildStatus,\n message: buildMessage,\n builtCount: builtCount > 0 ? builtCount : undefined,\n totalCount: totalCount > 0 ? totalCount : undefined,\n },\n preview: {\n status: previewStatus,\n message: previewMessage,\n filesCount,\n totalSize,\n },\n npm: {\n status: npmStatus,\n message: npmMessage,\n },\n canPublish,\n };\n },\n});\n"]}
@@ -1,4 +1,4 @@
1
- import { defineHandler, findRepoRoot, useConfig, useLLM, useLogger } from '@kb-labs/sdk';
1
+ import { defineHandler, findRepoRoot, useConfig, useLLM, useLogger, useEnv } from '@kb-labs/sdk';
2
2
  import { resolveScopePath, runReleasePipeline } from '@kb-labs/release-manager-core';
3
3
  import { spawn } from 'child_process';
4
4
  import { readFileSync, writeFileSync } from 'fs';
@@ -7,7 +7,7 @@ import { generateChangelog, generateSimpleChangelog } from '@kb-labs/release-man
7
7
 
8
8
  // src/rest/handlers/run-handler.ts
9
9
  function resolveToken(token) {
10
- return token ?? process.env.NPM_TOKEN ?? process.env.NODE_AUTH_TOKEN;
10
+ return token ?? useEnv("NPM_TOKEN") ?? useEnv("NODE_AUTH_TOKEN");
11
11
  }
12
12
  function publishSinglePackage(options) {
13
13
  const { packagePath, packageManager, token, otp, dryRun, tag, access, registry } = options;
@@ -77,7 +77,7 @@ async function publishPackagesProgrammatic(options) {
77
77
  };
78
78
  }
79
79
  const versionMap = new Map(packages.map((p) => [p.name, p.version]));
80
- const CONCURRENCY = Number(process.env.KB_PUBLISH_CONCURRENCY ?? 8);
80
+ const CONCURRENCY = Number(useEnv("KB_PUBLISH_CONCURRENCY") ?? 8);
81
81
  const publishOne = async (pkg) => {
82
82
  logger.info(`Publishing ${pkg.name}@${pkg.version}`, { path: pkg.path, dryRun });
83
83
  const pkgJsonPath = join(pkg.path, "package.json");
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/shared/publish-programmatic.ts","../../../src/shared/changelog-factory.ts","../../../src/rest/handlers/run-handler.ts"],"names":[],"mappings":"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","file":"run-handler.js","sourcesContent":["/**\n * Programmatic npm publishing for REST handlers (non-interactive context)\n *\n * Uses `npm publish` CLI via spawn with NODE_AUTH_TOKEN env variable.\n * This is the correct approach for granular access tokens (classic tokens\n * were revoked by npm in December 2025).\n *\n * Token resolution order:\n * 1. options.token (explicit override)\n * 2. NPM_TOKEN env variable\n * 3. NODE_AUTH_TOKEN env variable\n */\n\nimport { spawn } from 'node:child_process';\nimport { readFileSync, writeFileSync, readdirSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { useLogger } from '@kb-labs/sdk';\n\nexport interface PackageToPublish {\n name: string;\n version: string;\n path: string;\n}\n\nexport interface ProgrammaticPublishOptions {\n packages: PackageToPublish[];\n packageManager?: 'pnpm' | 'npm' | 'yarn';\n dryRun?: boolean;\n otp?: string;\n tag?: string;\n access?: 'public' | 'restricted';\n registry?: string;\n token?: string;\n}\n\nexport interface PublishResult {\n name: string;\n version: string;\n success: boolean;\n error?: string;\n}\n\nexport interface ProgrammaticPublishResult {\n results: PublishResult[];\n published: string[];\n failed: string[];\n skipped: string[];\n errors: string[];\n}\n\n/**\n * Resolve npm auth token from options or environment\n */\nfunction resolveToken(token?: string): string | undefined {\n return token ?? process.env.NPM_TOKEN ?? process.env.NODE_AUTH_TOKEN;\n}\n\n/**\n * Publish a single package using npm CLI\n * Passes auth token via NODE_AUTH_TOKEN env (recommended for granular tokens)\n */\nfunction publishSinglePackage(options: {\n packagePath: string;\n packageManager: string;\n token: string | undefined;\n otp?: string;\n dryRun?: boolean;\n tag?: string;\n access?: string;\n registry?: string;\n}): Promise<void> {\n const { packagePath, packageManager, token, otp, dryRun, tag, access, registry } = options;\n\n return new Promise((resolve, reject) => {\n const args = ['publish'];\n\n // pnpm checks git cleanliness before publish, but our pipeline already bumps versions\n // (making the tree dirty) before calling publish — disable this check.\n if (packageManager === 'pnpm') {\n args.push('--no-git-checks');\n }\n\n if (dryRun) {\n args.push('--dry-run');\n }\n\n if (tag) {\n args.push(`--tag=${tag}`);\n }\n\n if (access) {\n args.push(`--access=${access}`);\n }\n\n if (registry) {\n args.push(`--registry=${registry}`);\n }\n\n if (otp) {\n args.push(`--otp=${otp}`);\n }\n\n // Pass token via env — this is the correct way for granular tokens\n const env: NodeJS.ProcessEnv = { ...process.env };\n if (token) {\n env['NODE_AUTH_TOKEN'] = token;\n }\n\n const child = spawn(packageManager, args, {\n cwd: packagePath,\n stdio: ['ignore', 'pipe', 'pipe'],\n shell: true,\n env,\n });\n\n let stdout = '';\n let stderr = '';\n\n child.stdout?.on('data', (data: Buffer) => {\n stdout += data.toString();\n });\n\n child.stderr?.on('data', (data: Buffer) => {\n stderr += data.toString();\n });\n\n child.on('close', (code: number | null) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(stderr || stdout || `${packageManager} publish exited with code ${code}`));\n }\n });\n\n child.on('error', (err: Error) => {\n reject(err);\n });\n });\n}\n\n/**\n * Publish packages programmatically (non-interactive, for REST handlers)\n * Uses npm CLI with NODE_AUTH_TOKEN — works with granular access tokens.\n */\nexport async function publishPackagesProgrammatic(\n options: ProgrammaticPublishOptions\n): Promise<ProgrammaticPublishResult> {\n const { packages, packageManager = 'pnpm', dryRun, otp, tag, access, registry } = options;\n const logger = useLogger();\n\n const token = resolveToken(options.token);\n\n if (!token && !dryRun) {\n const error = 'No npm token found. Set NPM_TOKEN (or NODE_AUTH_TOKEN) in environment.';\n logger.error(error);\n return {\n results: [],\n published: [],\n failed: packages.map((p) => `${p.name}@${p.version}`),\n skipped: [],\n errors: [error],\n };\n }\n\n // Build version map from all packages in this release for link: → ^version replacement\n const versionMap = new Map(packages.map(p => [p.name, p.version]));\n\n const CONCURRENCY = Number(process.env.KB_PUBLISH_CONCURRENCY ?? 8);\n\n const publishOne = async (pkg: PackageToPublish): Promise<PublishResult> => {\n logger.info(`Publishing ${pkg.name}@${pkg.version}`, { path: pkg.path, dryRun });\n\n const pkgJsonPath = join(pkg.path, 'package.json');\n const originalPkgJson = readFileSync(pkgJsonPath, 'utf-8');\n let restored = false;\n\n try {\n const pkgJson = JSON.parse(originalPkgJson);\n let modified = false;\n\n for (const section of ['dependencies', 'peerDependencies'] as const) {\n const deps = pkgJson[section];\n if (!deps) {continue;}\n for (const [depName, depValue] of Object.entries(deps)) {\n if (typeof depValue !== 'string') {continue;}\n const val = depValue as string;\n\n if (val.startsWith('link:')) {\n const planVersion = versionMap.get(depName);\n if (planVersion) {\n deps[depName] = `^${planVersion}`;\n modified = true;\n } else {\n try {\n const linkPath = val.replace('link:', '');\n const linkedPkg = JSON.parse(readFileSync(join(pkg.path, linkPath, 'package.json'), 'utf-8'));\n deps[depName] = `^${linkedPkg.version}`;\n modified = true;\n } catch {\n deps[depName] = '*';\n modified = true;\n }\n }\n } else if (val.startsWith('workspace:') && packageManager !== 'pnpm') {\n const planVersion = versionMap.get(depName);\n if (planVersion) {\n deps[depName] = val === 'workspace:*' ? `^${planVersion}` : val.replace('workspace:', '');\n modified = true;\n }\n }\n }\n }\n\n if (modified) {\n writeFileSync(pkgJsonPath, JSON.stringify(pkgJson, null, 2) + '\\n');\n }\n\n await publishSinglePackage({\n packagePath: pkg.path,\n packageManager,\n token,\n otp,\n dryRun,\n tag,\n access: access ?? 'public',\n registry,\n });\n\n logger.info(`Published ${pkg.name}@${pkg.version}`);\n return { name: pkg.name, version: pkg.version, success: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Failed to publish ${pkg.name}@${pkg.version}`, undefined, { error: message });\n return { name: pkg.name, version: pkg.version, success: false, error: message };\n } finally {\n if (!restored) {\n writeFileSync(pkgJsonPath, originalPkgJson);\n restored = true;\n }\n }\n };\n\n // Run publishes in parallel batches\n const results: PublishResult[] = [];\n for (let i = 0; i < packages.length; i += CONCURRENCY) {\n const batch = packages.slice(i, i + CONCURRENCY);\n const batchResults = await Promise.all(batch.map(publishOne));\n results.push(...batchResults);\n }\n\n const published = results.filter((r) => r.success).map((r) => `${r.name}@${r.version}`);\n const failed = results.filter((r) => !r.success).map((r) => `${r.name}@${r.version}`);\n const errors = results.filter((r) => !r.success && r.error).map((r) => `${r.name}: ${r.error}`);\n\n return {\n results,\n published,\n failed,\n skipped: dryRun ? packages.map((p) => `${p.name}@${p.version} (dry-run)`) : [],\n errors,\n };\n}\n","/**\n * Shared changelog generator factory.\n * Used by both CLI (run.ts) and REST (run-handler.ts) to avoid duplication.\n */\n\nimport {\n generateChangelog,\n generateSimpleChangelog,\n type ChangelogPackageInfo,\n} from '@kb-labs/release-manager-changelog';\nimport type { ReleaseConfig, ChangelogGenerator } from '@kb-labs/release-manager-core';\n\nexport function createChangelogGenerator(config: ReleaseConfig, llm?: any): ChangelogGenerator {\n return {\n async generate(plan, opts) {\n const locale = (config.changelog?.locale as 'en' | 'ru') || 'en';\n const packages: ChangelogPackageInfo[] = plan.packages.map(pkg => ({\n name: pkg.name,\n path: pkg.path,\n currentVersion: pkg.currentVersion,\n nextVersion: pkg.nextVersion,\n bump: pkg.bump === 'auto' ? 'patch' : pkg.bump,\n }));\n try {\n const result = await generateChangelog({\n repoRoot: opts.repoRoot,\n gitCwd: opts.gitCwd,\n packages,\n range: { to: 'HEAD' },\n changelog: {\n template: config.changelog?.template ?? undefined,\n locale,\n metadata: config.changelog?.metadata,\n ignoreAuthors: config.changelog?.ignoreAuthors,\n includeTypes: config.changelog?.includeTypes as string[],\n excludeTypes: config.changelog?.excludeTypes as string[],\n collapseMerges: config.changelog?.collapseMerges,\n collapseReverts: config.changelog?.collapseReverts,\n preferMergeSummary: config.changelog?.preferMergeSummary,\n groups: config.changelog?.groups,\n },\n git: {\n autoUnshallow: config.git?.autoUnshallow,\n requireSignedTags: config.git?.requireSignedTags,\n baseUrl: config.git?.baseUrl ?? undefined,\n },\n platform: llm ? { llm } : undefined,\n });\n return result.markdown;\n } catch {\n return generateSimpleChangelog(packages, locale);\n }\n },\n };\n}\n","/**\n * Run release handler — thin adapter over core runReleasePipeline().\n */\n\nimport { defineHandler, findRepoRoot, type RestInput, useConfig, useLLM } from '@kb-labs/sdk';\nimport type {\n RunReleaseRequest,\n RunReleaseResponse,\n} from '@kb-labs/release-manager-contracts';\nimport {\n runReleasePipeline,\n resolveScopePath,\n type ReleaseConfig,\n type PublishablePackage,\n type PublishResult,\n} from '@kb-labs/release-manager-core';\nimport { publishPackagesProgrammatic } from '../../shared/publish-programmatic';\nimport { createChangelogGenerator } from '../../shared/changelog-factory';\n\nexport default defineHandler({\n async execute(ctx, input: RestInput<unknown, RunReleaseRequest>): Promise<RunReleaseResponse> {\n const scope = input.body?.scope || 'root';\n const flow = input.body?.flow;\n const dryRun = input.body?.dryRun ?? false;\n const skipChecks = input.body?.skipChecks ?? false;\n const otp = input.body?.otp;\n const cwd = ctx.cwd ?? process.cwd();\n const repoRoot = await findRepoRoot(cwd);\n const scopeCwd = await resolveScopePath(repoRoot, scope);\n\n const config = await useConfig<ReleaseConfig>() ?? {};\n\n // Changelog generator (with LLM if available)\n const llm = useLLM();\n const changelog = createChangelogGenerator(config, llm ?? undefined);\n\n // Programmatic publisher (token-based, no interactive OTP)\n const publisher = {\n async publish(packages: PublishablePackage[], opts: { dryRun?: boolean }): Promise<PublishResult> {\n return publishPackagesProgrammatic({\n packages,\n packageManager: config.workspace?.type ?? config.publish?.packageManager ?? 'pnpm',\n dryRun: opts.dryRun,\n otp,\n });\n },\n };\n\n const result = await runReleasePipeline({\n cwd,\n repoRoot,\n scopeCwd,\n scope,\n flow,\n config,\n dryRun,\n skipChecks,\n checks: (flow ? config.flows?.[flow]?.checks : undefined)\n ?? config.scopes?.[scope]?.checks\n ?? config.checks ?? [],\n publisher,\n changelog,\n logger: ctx.platform?.logger,\n });\n\n // Track analytics\n await ctx.platform?.analytics?.track?.(result.success ? 'release.completed' : 'release.failed', {\n scope,\n packagesCount: result.plan.packages.length,\n publishedCount: result.report.result.published?.length ?? 0,\n dryRun,\n durationMs: result.report.result.timingMs,\n });\n\n return {\n scope,\n report: result.report as any,\n success: result.success,\n errors: result.report.result.errors,\n };\n },\n});\n"]}
1
+ {"version":3,"sources":["../../../src/shared/publish-programmatic.ts","../../../src/shared/changelog-factory.ts","../../../src/rest/handlers/run-handler.ts"],"names":[],"mappings":"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","file":"run-handler.js","sourcesContent":["/**\n * Programmatic npm publishing for REST handlers (non-interactive context)\n *\n * Uses `npm publish` CLI via spawn with NODE_AUTH_TOKEN env variable.\n * This is the correct approach for granular access tokens (classic tokens\n * were revoked by npm in December 2025).\n *\n * Token resolution order:\n * 1. options.token (explicit override)\n * 2. NPM_TOKEN env variable\n * 3. NODE_AUTH_TOKEN env variable\n */\n\nimport { spawn } from 'node:child_process';\nimport { readFileSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { useLogger, useEnv } from '@kb-labs/sdk';\n\nexport interface PackageToPublish {\n name: string;\n version: string;\n path: string;\n}\n\nexport interface ProgrammaticPublishOptions {\n packages: PackageToPublish[];\n packageManager?: 'pnpm' | 'npm' | 'yarn';\n dryRun?: boolean;\n otp?: string;\n tag?: string;\n access?: 'public' | 'restricted';\n registry?: string;\n token?: string;\n}\n\nexport interface PublishResult {\n name: string;\n version: string;\n success: boolean;\n error?: string;\n}\n\nexport interface ProgrammaticPublishResult {\n results: PublishResult[];\n published: string[];\n failed: string[];\n skipped: string[];\n errors: string[];\n}\n\n/**\n * Resolve npm auth token from options or environment\n */\nfunction resolveToken(token?: string): string | undefined {\n return token ?? useEnv('NPM_TOKEN') ?? useEnv('NODE_AUTH_TOKEN');\n}\n\n/**\n * Publish a single package using npm CLI\n * Passes auth token via NODE_AUTH_TOKEN env (recommended for granular tokens)\n */\nfunction publishSinglePackage(options: {\n packagePath: string;\n packageManager: string;\n token: string | undefined;\n otp?: string;\n dryRun?: boolean;\n tag?: string;\n access?: string;\n registry?: string;\n}): Promise<void> {\n const { packagePath, packageManager, token, otp, dryRun, tag, access, registry } = options;\n\n return new Promise((resolve, reject) => {\n const args = ['publish'];\n\n // pnpm checks git cleanliness before publish, but our pipeline already bumps versions\n // (making the tree dirty) before calling publish — disable this check.\n if (packageManager === 'pnpm') {\n args.push('--no-git-checks');\n }\n\n if (dryRun) {\n args.push('--dry-run');\n }\n\n if (tag) {\n args.push(`--tag=${tag}`);\n }\n\n if (access) {\n args.push(`--access=${access}`);\n }\n\n if (registry) {\n args.push(`--registry=${registry}`);\n }\n\n if (otp) {\n args.push(`--otp=${otp}`);\n }\n\n // Pass token via env — this is the correct way for granular tokens\n const env: NodeJS.ProcessEnv = { ...process.env };\n if (token) {\n env['NODE_AUTH_TOKEN'] = token;\n }\n\n const child = spawn(packageManager, args, {\n cwd: packagePath,\n stdio: ['ignore', 'pipe', 'pipe'],\n shell: true,\n env,\n });\n\n let stdout = '';\n let stderr = '';\n\n child.stdout?.on('data', (data: Buffer) => {\n stdout += data.toString();\n });\n\n child.stderr?.on('data', (data: Buffer) => {\n stderr += data.toString();\n });\n\n child.on('close', (code: number | null) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(stderr || stdout || `${packageManager} publish exited with code ${code}`));\n }\n });\n\n child.on('error', (err: Error) => {\n reject(err);\n });\n });\n}\n\n/**\n * Publish packages programmatically (non-interactive, for REST handlers)\n * Uses npm CLI with NODE_AUTH_TOKEN — works with granular access tokens.\n */\nexport async function publishPackagesProgrammatic(\n options: ProgrammaticPublishOptions\n): Promise<ProgrammaticPublishResult> {\n const { packages, packageManager = 'pnpm', dryRun, otp, tag, access, registry } = options;\n const logger = useLogger();\n\n const token = resolveToken(options.token);\n\n if (!token && !dryRun) {\n const error = 'No npm token found. Set NPM_TOKEN (or NODE_AUTH_TOKEN) in environment.';\n logger.error(error);\n return {\n results: [],\n published: [],\n failed: packages.map((p) => `${p.name}@${p.version}`),\n skipped: [],\n errors: [error],\n };\n }\n\n // Build version map from all packages in this release for link: → ^version replacement\n const versionMap = new Map(packages.map(p => [p.name, p.version]));\n\n const CONCURRENCY = Number(useEnv('KB_PUBLISH_CONCURRENCY') ?? 8);\n\n const publishOne = async (pkg: PackageToPublish): Promise<PublishResult> => {\n logger.info(`Publishing ${pkg.name}@${pkg.version}`, { path: pkg.path, dryRun });\n\n const pkgJsonPath = join(pkg.path, 'package.json');\n const originalPkgJson = readFileSync(pkgJsonPath, 'utf-8');\n let restored = false;\n\n try {\n const pkgJson = JSON.parse(originalPkgJson);\n let modified = false;\n\n for (const section of ['dependencies', 'peerDependencies'] as const) {\n const deps = pkgJson[section];\n if (!deps) {continue;}\n for (const [depName, depValue] of Object.entries(deps)) {\n if (typeof depValue !== 'string') {continue;}\n const val = depValue as string;\n\n if (val.startsWith('link:')) {\n const planVersion = versionMap.get(depName);\n if (planVersion) {\n deps[depName] = `^${planVersion}`;\n modified = true;\n } else {\n try {\n const linkPath = val.replace('link:', '');\n const linkedPkg = JSON.parse(readFileSync(join(pkg.path, linkPath, 'package.json'), 'utf-8'));\n deps[depName] = `^${linkedPkg.version}`;\n modified = true;\n } catch {\n deps[depName] = '*';\n modified = true;\n }\n }\n } else if (val.startsWith('workspace:') && packageManager !== 'pnpm') {\n const planVersion = versionMap.get(depName);\n if (planVersion) {\n deps[depName] = val === 'workspace:*' ? `^${planVersion}` : val.replace('workspace:', '');\n modified = true;\n }\n }\n }\n }\n\n if (modified) {\n writeFileSync(pkgJsonPath, JSON.stringify(pkgJson, null, 2) + '\\n');\n }\n\n await publishSinglePackage({\n packagePath: pkg.path,\n packageManager,\n token,\n otp,\n dryRun,\n tag,\n access: access ?? 'public',\n registry,\n });\n\n logger.info(`Published ${pkg.name}@${pkg.version}`);\n return { name: pkg.name, version: pkg.version, success: true };\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Failed to publish ${pkg.name}@${pkg.version}`, undefined, { error: message });\n return { name: pkg.name, version: pkg.version, success: false, error: message };\n } finally {\n if (!restored) {\n writeFileSync(pkgJsonPath, originalPkgJson);\n restored = true;\n }\n }\n };\n\n // Run publishes in parallel batches\n const results: PublishResult[] = [];\n for (let i = 0; i < packages.length; i += CONCURRENCY) {\n const batch = packages.slice(i, i + CONCURRENCY);\n const batchResults = await Promise.all(batch.map(publishOne));\n results.push(...batchResults);\n }\n\n const published = results.filter((r) => r.success).map((r) => `${r.name}@${r.version}`);\n const failed = results.filter((r) => !r.success).map((r) => `${r.name}@${r.version}`);\n const errors = results.filter((r) => !r.success && r.error).map((r) => `${r.name}: ${r.error}`);\n\n return {\n results,\n published,\n failed,\n skipped: dryRun ? packages.map((p) => `${p.name}@${p.version} (dry-run)`) : [],\n errors,\n };\n}\n","/**\n * Shared changelog generator factory.\n * Used by both CLI (run.ts) and REST (run-handler.ts) to avoid duplication.\n */\n\nimport {\n generateChangelog,\n generateSimpleChangelog,\n type ChangelogPackageInfo,\n} from '@kb-labs/release-manager-changelog';\nimport type { ReleaseConfig, ChangelogGenerator } from '@kb-labs/release-manager-core';\n\nexport function createChangelogGenerator(config: ReleaseConfig, llm?: any): ChangelogGenerator {\n return {\n async generate(plan, opts) {\n const locale = (config.changelog?.locale as 'en' | 'ru') || 'en';\n const packages: ChangelogPackageInfo[] = plan.packages.map(pkg => ({\n name: pkg.name,\n path: pkg.path,\n currentVersion: pkg.currentVersion,\n nextVersion: pkg.nextVersion,\n bump: pkg.bump === 'auto' ? 'patch' : pkg.bump,\n }));\n try {\n const result = await generateChangelog({\n repoRoot: opts.repoRoot,\n gitCwd: opts.gitCwd,\n packages,\n range: { to: 'HEAD' },\n changelog: {\n template: config.changelog?.template ?? undefined,\n locale,\n metadata: config.changelog?.metadata,\n ignoreAuthors: config.changelog?.ignoreAuthors,\n includeTypes: config.changelog?.includeTypes as string[],\n excludeTypes: config.changelog?.excludeTypes as string[],\n collapseMerges: config.changelog?.collapseMerges,\n collapseReverts: config.changelog?.collapseReverts,\n preferMergeSummary: config.changelog?.preferMergeSummary,\n groups: config.changelog?.groups,\n },\n git: {\n autoUnshallow: config.git?.autoUnshallow,\n requireSignedTags: config.git?.requireSignedTags,\n baseUrl: config.git?.baseUrl ?? undefined,\n },\n platform: llm ? { llm } : undefined,\n });\n return result.markdown;\n } catch {\n return generateSimpleChangelog(packages, locale);\n }\n },\n };\n}\n","/**\n * Run release handler — thin adapter over core runReleasePipeline().\n */\n\nimport { defineHandler, findRepoRoot, type RestInput, useConfig, useLLM } from '@kb-labs/sdk';\nimport type {\n RunReleaseRequest,\n RunReleaseResponse,\n} from '@kb-labs/release-manager-contracts';\nimport {\n runReleasePipeline,\n resolveScopePath,\n type ReleaseConfig,\n type PublishablePackage,\n type PublishResult,\n} from '@kb-labs/release-manager-core';\nimport { publishPackagesProgrammatic } from '../../shared/publish-programmatic';\nimport { createChangelogGenerator } from '../../shared/changelog-factory';\n\nexport default defineHandler({\n async execute(ctx, input: RestInput<unknown, RunReleaseRequest>): Promise<RunReleaseResponse> {\n const scope = input.body?.scope || 'root';\n const flow = input.body?.flow;\n const dryRun = input.body?.dryRun ?? false;\n const skipChecks = input.body?.skipChecks ?? false;\n const otp = input.body?.otp;\n const cwd = ctx.cwd ?? process.cwd();\n const repoRoot = await findRepoRoot(cwd);\n const scopeCwd = await resolveScopePath(repoRoot, scope);\n\n const config = await useConfig<ReleaseConfig>() ?? {};\n\n // Changelog generator (with LLM if available)\n const llm = useLLM();\n const changelog = createChangelogGenerator(config, llm ?? undefined);\n\n // Programmatic publisher (token-based, no interactive OTP)\n const publisher = {\n async publish(packages: PublishablePackage[], opts: { dryRun?: boolean }): Promise<PublishResult> {\n return publishPackagesProgrammatic({\n packages,\n packageManager: config.workspace?.type ?? config.publish?.packageManager ?? 'pnpm',\n dryRun: opts.dryRun,\n otp,\n });\n },\n };\n\n const result = await runReleasePipeline({\n cwd,\n repoRoot,\n scopeCwd,\n scope,\n flow,\n config,\n dryRun,\n skipChecks,\n checks: (flow ? config.flows?.[flow]?.checks : undefined)\n ?? config.scopes?.[scope]?.checks\n ?? config.checks ?? [],\n publisher,\n changelog,\n logger: ctx.platform?.logger,\n });\n\n // Track analytics\n await ctx.platform?.analytics?.track?.(result.success ? 'release.completed' : 'release.failed', {\n scope,\n packagesCount: result.plan.packages.length,\n publishedCount: result.report.result.published?.length ?? 0,\n dryRun,\n durationMs: result.report.result.timingMs,\n });\n\n return {\n scope,\n report: result.report as any,\n success: result.success,\n errors: result.report.result.errors,\n };\n },\n});\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kb-labs/release-manager-cli",
3
- "version": "2.15.0",
3
+ "version": "2.18.0",
4
4
  "description": "KB Labs Release Manager - CLI commands for release management",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -32,12 +32,12 @@
32
32
  "globby": "^11.0.0",
33
33
  "npm-packlist": "^10.0.3",
34
34
  "zod": "^3.23.8",
35
- "@kb-labs/release-manager-changelog": "2.15.0",
36
- "@kb-labs/release-manager-checks": "2.15.0",
37
- "@kb-labs/release-manager-contracts": "2.15.0",
38
- "@kb-labs/sdk": "1.6.6",
39
- "@kb-labs/studio-plugin-tools": "2.15.0",
40
- "@kb-labs/release-manager-core": "2.15.0"
35
+ "@kb-labs/release-manager-checks": "2.18.0",
36
+ "@kb-labs/release-manager-contracts": "2.18.0",
37
+ "@kb-labs/studio-plugin-tools": "2.18.0",
38
+ "@kb-labs/release-manager-changelog": "2.18.0",
39
+ "@kb-labs/release-manager-core": "2.18.0",
40
+ "@kb-labs/sdk": "2.17.0"
41
41
  },
42
42
  "peerDependencies": {
43
43
  "react": ">=18.0.0",
@@ -57,7 +57,7 @@
57
57
  "tsup": "^8.5.0",
58
58
  "typescript": "^5.6.3",
59
59
  "vitest": "^3.2.4",
60
- "@kb-labs/devkit": "2.15.0"
60
+ "@kb-labs/devkit": "2.18.0"
61
61
  },
62
62
  "kb": {
63
63
  "manifest": "./dist/manifest.js"