@kb-labs/release-manager-cli 2.89.0 → 2.93.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/shared/changelog-factory.ts","../../../src/cli/commands/changelog.ts"],"names":[],"mappings":"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","file":"changelog.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 * Release changelog command — thin adapter over planRelease + createChangelogGenerator.\n */\n\nimport { join } from 'node:path';\nimport { stat, writeFile, mkdir, readFile } from 'node:fs/promises';\nimport { defineCommand, type CLIInput, type PluginContextV3, useLLM, useLoader, displayArtifacts, type ArtifactInfo, useConfig } from '@kb-labs/sdk';\nimport { planRelease, type ReleaseConfig } from '@kb-labs/release-manager-core';\nimport { findRepoRoot } from '../../shared/utils';\nimport { createChangelogGenerator } from '../../shared/changelog-factory';\n\ninterface ChangelogFlags {\n scope?: string;\n flow?: string;\n from?: string;\n to?: string;\n 'since-tag'?: string;\n format?: 'json' | 'md' | 'both';\n level?: 'compact' | 'standard' | 'detailed';\n template?: string;\n 'breaking-only'?: boolean;\n json?: boolean;\n}\n\ninterface ReleaseChangelogResult {\n exitCode: number;\n artifacts?: Array<{ name: string; path: string; size: number }>;\n}\n\n// ── helpers ────────────────────────────────────────────────────────────────\n\nasync function resolveGitCwd(\n scope: string | undefined,\n packages: Array<{ path: string }>,\n repoRoot: string,\n): Promise<string> {\n if (!scope || !packages[0]) { return repoRoot; }\n try {\n return await findRepoRoot(packages[0].path);\n } catch {\n return packages[0].path;\n }\n}\n\n/** Remove a version block from existing changelog content, if present. */\nfunction removeExistingVersionBlock(existing: string, newMarkdown: string): string {\n const newVersionMatch = newMarkdown.match(/^## \\[([^\\]]+)\\]/m);\n if (!newVersionMatch) { return existing; }\n\n const versionHeader = `## [${newVersionMatch[1]}]`;\n const blockStart = existing.indexOf(versionHeader);\n if (blockStart === -1) { return existing; }\n\n const nextBlockStart = existing.indexOf('\\n## [', blockStart + 1);\n const blockEnd = nextBlockStart !== -1 ? nextBlockStart : existing.length;\n const before = existing.substring(0, blockStart).trimEnd();\n const after = existing.substring(blockEnd).trimStart();\n return before && after ? `${before}\\n\\n${after}` : before || after;\n}\n\n/** Read existing changelog, strip footer + duplicate version, then prepend new content. */\nasync function mergeChangelogContent(changelogPath: string, newMarkdown: string): Promise<string> {\n let existing = '';\n try {\n existing = await readFile(changelogPath, 'utf-8');\n const footerStart = existing.indexOf('\\n---\\n\\n*Generated automatically');\n if (footerStart !== -1) { existing = existing.substring(0, footerStart); }\n existing = removeExistingVersionBlock(existing, newMarkdown);\n } catch { /* file doesn't exist yet */ }\n return existing ? `${newMarkdown}\\n\\n${existing}` : newMarkdown;\n}\n\nfunction buildChangelogSections(\n plan: { packages: Array<{ name: string }> },\n format: string,\n artifacts: ArtifactInfo[],\n): Array<{ header?: string; items: string[] }> {\n const sections: Array<{ header?: string; items: string[] }> = [];\n sections.push({\n header: 'Summary',\n items: [\n `Packages: ${plan.packages.map(p => p.name).join(', ')}`,\n `Format: ${format === 'both' ? 'Markdown + JSON' : format}`,\n ],\n });\n if (artifacts.length > 0) {\n sections.push({\n header: 'Artifacts',\n items: displayArtifacts(artifacts, { showSize: true, showTime: true, showDescription: true, maxItems: 10, title: '' }),\n });\n }\n return sections;\n}\n\n// ── command ────────────────────────────────────────────────────────────────\n\nexport default defineCommand({\n id: 'release:changelog',\n description: 'Generate changelog from conventional commits',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<ChangelogFlags>): Promise<ReleaseChangelogResult> {\n const { flags } = input;\n const cwd = ctx.cwd || process.cwd();\n const repoRoot = await findRepoRoot(cwd);\n\n const loader = useLoader('Loading configuration...');\n loader.start();\n\n const fileConfig = await useConfig<ReleaseConfig>();\n const config: ReleaseConfig = fileConfig ?? {};\n\n loader.update({ text: 'Discovering packages...' });\n const plan = await planRelease({ cwd: repoRoot, config, scope: flags.scope, flow: flags.flow });\n\n if (plan.packages.length === 0) {\n loader.fail(`No packages found matching scope: ${flags.scope || 'all'}`);\n return { exitCode: 1 };\n }\n\n const gitCwd = await resolveGitCwd(flags.scope, plan.packages, repoRoot);\n\n loader.update({ text: 'Generating changelog...' });\n const llm = useLLM();\n const generator = createChangelogGenerator(config, llm ?? undefined);\n const markdown = await generator.generate(plan, { repoRoot, gitCwd, config });\n\n const format = flags.format || config.changelog?.format || 'both';\n const outputDir = join(repoRoot, '.kb', 'release');\n const artifacts: ArtifactInfo[] = [];\n\n if (!flags.json) {\n loader.update({ text: 'Saving artifacts...' });\n await mkdir(outputDir, { recursive: true });\n\n if (markdown && (format === 'md' || format === 'both')) {\n const changelogPath = join(outputDir, 'CHANGELOG.md');\n const combined = await mergeChangelogContent(changelogPath, markdown);\n await writeFile(changelogPath, combined, 'utf-8');\n const stats = await stat(changelogPath);\n artifacts.push({\n name: 'Changelog',\n path: changelogPath,\n size: stats.size,\n modified: stats.mtime,\n description: 'Generated changelog in Markdown format',\n });\n }\n }\n\n loader.succeed('Changelog generated successfully');\n\n if (flags.json) {\n ctx.ui?.json?.({\n packagesCount: plan.packages.length,\n markdown: format === 'md' || format === 'both' ? markdown : undefined,\n artifacts: artifacts.map(a => ({ name: a.name, path: a.path, size: a.size ?? 0 })),\n });\n } else {\n ctx.ui.sideBox({\n title: 'Changelog Generated',\n sections: buildChangelogSections(plan, format, artifacts),\n status: 'success',\n });\n }\n\n return {\n exitCode: 0,\n artifacts: artifacts.map(a => ({ name: a.name, path: a.path, size: a.size ?? 0 })),\n };\n },\n },\n});\n"]}
1
+ {"version":3,"sources":["../../../src/shared/changelog-factory.ts","../../../src/cli/commands/changelog.ts"],"names":[],"mappings":"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","file":"changelog.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';\nimport type { ILLM } from '@kb-labs/sdk';\n\nexport function createChangelogGenerator(config: ReleaseConfig, llm?: ILLM): 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 * Release changelog command — thin adapter over planRelease + createChangelogGenerator.\n */\n\nimport { join } from 'node:path';\nimport { stat, writeFile, mkdir, readFile } from 'node:fs/promises';\nimport { defineCommand, type CLIInput, type PluginContextV3, useLLM, useLoader, displayArtifacts, type ArtifactInfo, useConfig } from '@kb-labs/sdk';\nimport { planRelease, type ReleaseConfig } from '@kb-labs/release-manager-core';\nimport { findRepoRoot } from '../../shared/utils';\nimport { createChangelogGenerator } from '../../shared/changelog-factory';\n\ninterface ChangelogFlags {\n scope?: string;\n flow?: string;\n from?: string;\n to?: string;\n 'since-tag'?: string;\n format?: 'json' | 'md' | 'both';\n level?: 'compact' | 'standard' | 'detailed';\n template?: string;\n 'breaking-only'?: boolean;\n json?: boolean;\n}\n\ninterface ReleaseChangelogResult {\n exitCode: number;\n artifacts?: Array<{ name: string; path: string; size: number }>;\n}\n\n// ── helpers ────────────────────────────────────────────────────────────────\n\nasync function resolveGitCwd(\n scope: string | undefined,\n packages: Array<{ path: string }>,\n repoRoot: string,\n): Promise<string> {\n if (!scope || !packages[0]) { return repoRoot; }\n try {\n return await findRepoRoot(packages[0].path);\n } catch {\n return packages[0].path;\n }\n}\n\n/** Remove a version block from existing changelog content, if present. */\nfunction removeExistingVersionBlock(existing: string, newMarkdown: string): string {\n const newVersionMatch = newMarkdown.match(/^## \\[([^\\]]+)\\]/m);\n if (!newVersionMatch) { return existing; }\n\n const versionHeader = `## [${newVersionMatch[1]}]`;\n const blockStart = existing.indexOf(versionHeader);\n if (blockStart === -1) { return existing; }\n\n const nextBlockStart = existing.indexOf('\\n## [', blockStart + 1);\n const blockEnd = nextBlockStart !== -1 ? nextBlockStart : existing.length;\n const before = existing.substring(0, blockStart).trimEnd();\n const after = existing.substring(blockEnd).trimStart();\n return before && after ? `${before}\\n\\n${after}` : before || after;\n}\n\n/** Read existing changelog, strip footer + duplicate version, then prepend new content. */\nasync function mergeChangelogContent(changelogPath: string, newMarkdown: string): Promise<string> {\n let existing = '';\n try {\n existing = await readFile(changelogPath, 'utf-8');\n const footerStart = existing.indexOf('\\n---\\n\\n*Generated automatically');\n if (footerStart !== -1) { existing = existing.substring(0, footerStart); }\n existing = removeExistingVersionBlock(existing, newMarkdown);\n } catch { /* file doesn't exist yet */ }\n return existing ? `${newMarkdown}\\n\\n${existing}` : newMarkdown;\n}\n\nfunction buildChangelogSections(\n plan: { packages: Array<{ name: string }> },\n format: string,\n artifacts: ArtifactInfo[],\n): Array<{ header?: string; items: string[] }> {\n const sections: Array<{ header?: string; items: string[] }> = [];\n sections.push({\n header: 'Summary',\n items: [\n `Packages: ${plan.packages.map(p => p.name).join(', ')}`,\n `Format: ${format === 'both' ? 'Markdown + JSON' : format}`,\n ],\n });\n if (artifacts.length > 0) {\n sections.push({\n header: 'Artifacts',\n items: displayArtifacts(artifacts, { showSize: true, showTime: true, showDescription: true, maxItems: 10, title: '' }),\n });\n }\n return sections;\n}\n\n// ── command ────────────────────────────────────────────────────────────────\n\nexport default defineCommand({\n id: 'release:changelog',\n description: 'Generate changelog from conventional commits',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<ChangelogFlags>): Promise<ReleaseChangelogResult> {\n const { flags } = input;\n const cwd = ctx.cwd || process.cwd();\n const repoRoot = await findRepoRoot(cwd);\n\n const loader = useLoader('Loading configuration...');\n loader.start();\n\n const fileConfig = await useConfig<ReleaseConfig>();\n const config: ReleaseConfig = fileConfig ?? {};\n\n loader.update({ text: 'Discovering packages...' });\n const plan = await planRelease({ cwd: repoRoot, config, scope: flags.scope, flow: flags.flow });\n\n if (plan.packages.length === 0) {\n loader.fail(`No packages found matching scope: ${flags.scope || 'all'}`);\n return { exitCode: 1 };\n }\n\n const gitCwd = await resolveGitCwd(flags.scope, plan.packages, repoRoot);\n\n loader.update({ text: 'Generating changelog...' });\n const llm = useLLM();\n const generator = createChangelogGenerator(config, llm ?? undefined);\n const markdown = await generator.generate(plan, { repoRoot, gitCwd, config });\n\n const format = flags.format || config.changelog?.format || 'both';\n const outputDir = join(repoRoot, '.kb', 'release');\n const artifacts: ArtifactInfo[] = [];\n\n if (!flags.json) {\n loader.update({ text: 'Saving artifacts...' });\n await mkdir(outputDir, { recursive: true });\n\n if (markdown && (format === 'md' || format === 'both')) {\n const changelogPath = join(outputDir, 'CHANGELOG.md');\n const combined = await mergeChangelogContent(changelogPath, markdown);\n await writeFile(changelogPath, combined, 'utf-8');\n const stats = await stat(changelogPath);\n artifacts.push({\n name: 'Changelog',\n path: changelogPath,\n size: stats.size,\n modified: stats.mtime,\n description: 'Generated changelog in Markdown format',\n });\n }\n }\n\n loader.succeed('Changelog generated successfully');\n\n if (flags.json) {\n ctx.ui?.json?.({\n packagesCount: plan.packages.length,\n markdown: format === 'md' || format === 'both' ? markdown : undefined,\n artifacts: artifacts.map(a => ({ name: a.name, path: a.path, size: a.size ?? 0 })),\n });\n } else {\n ctx.ui.sideBox({\n title: 'Changelog Generated',\n sections: buildChangelogSections(plan, format, artifacts),\n status: 'success',\n });\n }\n\n return {\n exitCode: 0,\n artifacts: artifacts.map(a => ({ name: a.name, path: a.path, size: a.size ?? 0 })),\n };\n },\n },\n});\n"]}
@@ -860,6 +860,7 @@ var run_default = defineCommand({
860
860
  config,
861
861
  scope: flags.scope,
862
862
  flow: flags.flow,
863
+ // config.bump is already VersionBump | undefined — same type as bumpOverride
863
864
  bumpOverride: config.bump
864
865
  });
865
866
  planLoader.succeed(`Found ${plan.packages.length} package(s)`);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/shared/changelog-factory.ts","../../../src/shared/dep-rewrite.ts","../../../src/shared/publish-programmatic.ts","../../../src/shared/publish-with-otp.ts","../../../src/cli/commands/run.ts"],"names":["join","readFileSync","writeFileSync","MAX_RETRIES","RETRY_BASE_DELAYS_MS","RETRYABLE_PATTERNS","ALREADY_PUBLISHED_PATTERNS","isRetryable","isAlreadyPublished","retryDelay","spawn","useEnv","readline2","useLoader"],"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 * Rewrite workspace:/link: dependency references to pinned npm versions.\n *\n * - pnpm handles `workspace:*` natively during `pnpm publish` — no rewrite needed.\n * - npm/yarn do NOT — we must replace with `^version` before publish.\n * - `link:` references are never valid on the npm registry — always rewrite.\n *\n * Returns a restore function that reverts package.json to original content.\n * Call it in a finally block to guarantee cleanup.\n */\n\nimport { readFileSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\n\n// ── rewriteWorkspaceDeps helpers ──────────────────────────────────────────\n\nfunction rewriteLinkDep(\n deps: Record<string, string>,\n depName: string,\n val: string,\n pkgPath: string,\n versionMap: Map<string, string>,\n): void {\n const pinned = versionMap.get(depName);\n if (pinned) {\n deps[depName] = `^${pinned}`;\n return;\n }\n try {\n const linkPath = val.slice('link:'.length);\n const linked = JSON.parse(readFileSync(join(pkgPath, linkPath, 'package.json'), 'utf-8')) as { version?: string };\n deps[depName] = `^${linked.version ?? '*'}`;\n } catch {\n deps[depName] = '*';\n }\n}\n\nfunction rewriteWorkspaceDep(\n deps: Record<string, string>,\n depName: string,\n val: string,\n versionMap: Map<string, string>,\n): boolean {\n const pinned = versionMap.get(depName);\n if (!pinned) { return false; }\n deps[depName] = val === 'workspace:*' ? `^${pinned}` : val.replace('workspace:', '');\n return true;\n}\n\nfunction rewriteDepsSection(\n deps: Record<string, string>,\n pkgPath: string,\n versionMap: Map<string, string>,\n packageManager: string,\n): boolean {\n let modified = false;\n for (const depName of Object.keys(deps)) {\n const val = deps[depName];\n if (typeof val !== 'string') { continue; }\n if (val.startsWith('link:')) {\n rewriteLinkDep(deps, depName, val, pkgPath, versionMap);\n modified = true;\n } else if (val.startsWith('workspace:') && packageManager !== 'pnpm' && rewriteWorkspaceDep(deps, depName, val, versionMap)) {\n modified = true;\n }\n }\n return modified;\n}\n\nexport function rewriteWorkspaceDeps(\n pkgPath: string,\n versionMap: Map<string, string>,\n packageManager: string,\n): () => void {\n const pkgJsonPath = join(pkgPath, 'package.json');\n const original = readFileSync(pkgJsonPath, 'utf-8');\n const pkgJson = JSON.parse(original) as Record<string, unknown>;\n let modified = false;\n\n for (const section of ['dependencies', 'peerDependencies'] as const) {\n const deps = pkgJson[section] as Record<string, string> | undefined;\n if (!deps) { continue; }\n if (rewriteDepsSection(deps, pkgPath, versionMap, packageManager)) { modified = true; }\n }\n\n if (modified) {\n writeFileSync(pkgJsonPath, JSON.stringify(pkgJson, null, 2) + '\\n');\n }\n\n return () => writeFileSync(pkgJsonPath, original);\n}\n\n// ── topoSort helpers ──────────────────────────────────────────────────────\n\n/**\n * Build a simple topological sort of packages for publish order.\n *\n * Packages are grouped into \"waves\": wave 0 has no intra-release deps,\n * wave 1 depends only on wave 0, etc. Within each wave publish order\n * is arbitrary (safe to parallelise).\n *\n * Cycles (should not exist in a well-formed monorepo) fall into a\n * \"remainder\" group appended at the end.\n */\nexport interface TopoPackage {\n name: string;\n path: string;\n version: string;\n}\n\nfunction buildIntraDeps(packages: TopoPackage[], nameSet: Set<string>): Map<string, Set<string>> {\n const deps = new Map<string, Set<string>>();\n for (const pkg of packages) {\n const intra = new Set<string>();\n try {\n const pkgJson = JSON.parse(readFileSync(join(pkg.path, 'package.json'), 'utf-8')) as {\n dependencies?: Record<string, string>;\n peerDependencies?: Record<string, string>;\n };\n for (const section of ['dependencies', 'peerDependencies'] as const) {\n for (const depName of Object.keys(pkgJson[section] ?? {})) {\n if (nameSet.has(depName)) { intra.add(depName); }\n }\n }\n } catch {\n // If we can't read package.json, treat as no deps\n }\n deps.set(pkg.name, intra);\n }\n return deps;\n}\n\nfunction buildDependantsMap(packages: TopoPackage[], deps: Map<string, Set<string>>): Map<string, Set<string>> {\n const dependants = new Map<string, Set<string>>();\n for (const pkg of packages) {\n for (const dep of deps.get(pkg.name) ?? []) {\n if (!dependants.has(dep)) { dependants.set(dep, new Set()); }\n dependants.get(dep)!.add(pkg.name);\n }\n }\n return dependants;\n}\n\nfunction computeWaves(\n packages: TopoPackage[],\n deps: Map<string, Set<string>>,\n dependants: Map<string, Set<string>>,\n): TopoPackage[][] {\n const byName = new Map(packages.map(p => [p.name, p]));\n const remaining = new Map<string, number>(\n packages.map(p => [p.name, (deps.get(p.name) ?? new Set()).size])\n );\n const waves: TopoPackage[][] = [];\n\n while (remaining.size > 0) {\n const wave = [...remaining.entries()]\n .filter(([, count]) => count === 0)\n .map(([name]) => byName.get(name)!);\n\n if (wave.length === 0) {\n waves.push([...remaining.keys()].map(n => byName.get(n)!));\n break;\n }\n\n waves.push(wave);\n for (const pkg of wave) {\n remaining.delete(pkg.name);\n for (const dependant of dependants.get(pkg.name) ?? []) {\n if (remaining.has(dependant)) {\n remaining.set(dependant, (remaining.get(dependant) ?? 1) - 1);\n }\n }\n }\n }\n\n return waves.filter(w => w.length > 0);\n}\n\nexport function topoSort(packages: TopoPackage[], _packageManager: string): TopoPackage[][] {\n const nameSet = new Set(packages.map(p => p.name));\n const deps = buildIntraDeps(packages, nameSet);\n const dependants = buildDependantsMap(packages, deps);\n return computeWaves(packages, deps, dependants);\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 * Reliability guarantees:\n * - Already-published versions are treated as success (idempotent re-runs).\n * - 429 rate-limit: exponential back-off with jitter, up to MAX_RETRIES attempts.\n * - Transient network errors (ECONNRESET, ETIMEDOUT, etc.) are also retried.\n * - Packages are published in topological order (deps before dependants).\n * - Default concurrency is 4 — enough throughput, low enough to avoid rate limits.\n */\n\nimport { spawn } from 'node:child_process';\nimport { readFileSync, writeFileSync, existsSync, unlinkSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { useLogger, useEnv } from '@kb-labs/sdk';\nimport { rewriteWorkspaceDeps, topoSort } from './dep-rewrite';\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 /** Package was already published at this version — counted as success. */\n alreadyPublished?: boolean;\n error?: string;\n}\n\nexport interface ProgrammaticPublishResult {\n results: PublishResult[];\n published: string[];\n /** Versions that were already on npm (counted as success). */\n alreadyPublished: string[];\n failed: string[];\n skipped: string[];\n errors: string[];\n}\n\n// ---------------------------------------------------------------------------\n// Retry configuration\n// ---------------------------------------------------------------------------\n\nconst MAX_RETRIES = 5;\n\n// Exponential base delays (ms). Actual delay = base * jitter(0.8–1.2).\nconst RETRY_BASE_DELAYS_MS = [10_000, 20_000, 40_000, 80_000, 160_000] as const;\n\n/** Retryable error patterns — all transient, not indicative of a bad package. */\nconst RETRYABLE_PATTERNS = [\n 'E429',\n '429 Too Many Requests',\n 'ECONNRESET',\n 'ETIMEDOUT',\n 'ECONNREFUSED',\n 'ENOTFOUND',\n 'EAI_AGAIN',\n 'socket hang up',\n 'network timeout',\n 'read ECONNRESET',\n];\n\n/** \"Already published\" — treat as success so re-runs are idempotent. */\nconst ALREADY_PUBLISHED_PATTERNS = [\n 'You cannot publish over the previously published versions',\n 'cannot publish over the previously published version',\n 'EPUBLISHCONFLICT',\n // Some registries return 403 for conflicts\n];\n\nfunction isRetryable(message: string): boolean {\n return RETRYABLE_PATTERNS.some(p => message.includes(p));\n}\n\nfunction isAlreadyPublished(message: string): boolean {\n return ALREADY_PUBLISHED_PATTERNS.some(p => message.includes(p));\n}\n\n/** Exponential back-off with ±20% jitter. */\nfunction retryDelay(attempt: number): number {\n const base = RETRY_BASE_DELAYS_MS[Math.min(attempt, RETRY_BASE_DELAYS_MS.length - 1)]!;\n const jitter = 0.8 + Math.random() * 0.4; // 0.8 – 1.2\n return Math.round(base * jitter);\n}\n\n// ---------------------------------------------------------------------------\n// Token resolution\n// ---------------------------------------------------------------------------\n\nfunction resolveToken(token?: string): string | undefined {\n return token ?? useEnv('NPM_TOKEN') ?? useEnv('NODE_AUTH_TOKEN');\n}\n\n// ---------------------------------------------------------------------------\n// Low-level spawn\n// ---------------------------------------------------------------------------\n\n/**\n * Spawn `packageManager publish` for a single package.\n * Writes a temporary .npmrc for NODE_AUTH_TOKEN auth, cleans it up on exit.\n */\nfunction spawnPublish(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 if (packageManager === 'pnpm') {\n // pnpm checks git cleanliness; we version-bump before publish which makes\n // the tree dirty — bypass that check.\n args.push('--no-git-checks');\n }\n if (dryRun) { args.push('--dry-run'); }\n if (tag) { args.push(`--tag=${tag}`); }\n if (access) { args.push(`--access=${access}`); }\n if (registry) { args.push(`--registry=${registry}`); }\n if (otp) { args.push(`--otp=${otp}`); }\n\n const env: NodeJS.ProcessEnv = { ...process.env };\n if (token) { env['NODE_AUTH_TOKEN'] = token; }\n\n // Write a per-package .npmrc so npm picks up NODE_AUTH_TOKEN.\n const npmrcPath = join(packagePath, '.npmrc');\n const npmrcExisted = existsSync(npmrcPath);\n const npmrcBackup = npmrcExisted ? readFileSync(npmrcPath, 'utf-8') : null;\n const authLine = '//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}\\n';\n\n if (token) {\n const existing = npmrcExisted ? readFileSync(npmrcPath, 'utf-8') : '';\n if (!existing.includes('_authToken')) {\n writeFileSync(npmrcPath, existing + authLine);\n }\n }\n\n const restoreNpmrc = () => {\n if (!token) { return; }\n try {\n if (npmrcBackup !== null) {\n writeFileSync(npmrcPath, npmrcBackup);\n } else if (existsSync(npmrcPath)) {\n unlinkSync(npmrcPath);\n }\n } catch { /* best-effort */ }\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', (d: Buffer) => { stdout += d.toString(); });\n child.stderr?.on('data', (d: Buffer) => { stderr += d.toString(); });\n\n child.on('close', (code: number | null) => {\n restoreNpmrc();\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 restoreNpmrc();\n reject(err);\n });\n });\n}\n\n// ---------------------------------------------------------------------------\n// Per-package publish with retry\n// ---------------------------------------------------------------------------\n\nasync function publishOne(\n pkg: PackageToPublish,\n opts: {\n packageManager: string;\n token: string | undefined;\n versionMap: Map<string, string>;\n dryRun?: boolean;\n otp?: string;\n tag?: string;\n access?: string;\n registry?: string;\n },\n logger: ReturnType<typeof useLogger>,\n): Promise<PublishResult> {\n const restore = rewriteWorkspaceDeps(pkg.path, opts.versionMap, opts.packageManager);\n\n try {\n for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {\n try {\n await spawnPublish({\n packagePath: pkg.path,\n packageManager: opts.packageManager,\n token: opts.token,\n otp: opts.otp,\n dryRun: opts.dryRun,\n tag: opts.tag,\n access: opts.access,\n registry: opts.registry,\n });\n\n logger.info(`Published ${pkg.name}@${pkg.version}`);\n return { name: pkg.name, version: pkg.version, success: true };\n\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n\n // Idempotency: already published at this version → success.\n if (isAlreadyPublished(message)) {\n logger.info(`${pkg.name}@${pkg.version} already published — skipping`);\n return { name: pkg.name, version: pkg.version, success: true, alreadyPublished: true };\n }\n\n // Retryable transient error (rate-limit, network blip).\n if (isRetryable(message) && attempt < MAX_RETRIES) {\n const delay = retryDelay(attempt);\n logger.warn(\n `Transient error for ${pkg.name}@${pkg.version} (attempt ${attempt + 1}/${MAX_RETRIES}), ` +\n `retrying in ${(delay / 1000).toFixed(1)}s: ${message.split('\\n')[0]}`,\n );\n await new Promise<void>(r => { setTimeout(r, delay); });\n continue;\n }\n\n // Permanent failure.\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 }\n }\n\n // Exhausted retries.\n return {\n name: pkg.name,\n version: pkg.version,\n success: false,\n error: `Publish failed after ${MAX_RETRIES} retries (transient errors)`,\n };\n } finally {\n restore();\n }\n}\n\n// ---------------------------------------------------------------------------\n// Main export\n// ---------------------------------------------------------------------------\n\nfunction skipRemainingWaves(\n waves: ReturnType<typeof topoSort>,\n waveIdx: number,\n waveFailed: PublishResult[],\n logger: ReturnType<typeof useLogger>,\n allResults: PublishResult[],\n): void {\n const remaining = waves.slice(waveIdx + 1).reduce((acc, w) => acc + w.length, 0);\n if (remaining === 0) { return; }\n logger.warn(\n `Wave ${waveIdx + 1} had ${waveFailed.length} failure(s) — ` +\n `skipping ${remaining} package(s) in later waves to avoid broken dependency chain`,\n );\n for (const laterWave of waves.slice(waveIdx + 1)) {\n for (const pkg of laterWave) {\n allResults.push({ name: pkg.name, version: pkg.version, success: false, error: 'Skipped: dependency wave failed' });\n }\n }\n}\n\n/**\n * Publish packages programmatically (non-interactive, for REST handlers / CI).\n *\n * Packages are published in topological order (deps before dependants) to\n * avoid \"package not found\" errors when a dependent is installed right after\n * release. Within each topological wave, publishes run in parallel up to\n * CONCURRENCY.\n */\nexport async function publishPackagesProgrammatic(\n options: ProgrammaticPublishOptions,\n): Promise<ProgrammaticPublishResult> {\n const {\n packages,\n packageManager = 'pnpm',\n dryRun,\n otp,\n tag,\n access,\n registry,\n } = options;\n\n const logger = useLogger();\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 alreadyPublished: [],\n failed: packages.map(p => `${p.name}@${p.version}`),\n skipped: [],\n errors: [error],\n };\n }\n\n // Version map for dep rewriting (workspace:/link: → ^version).\n const versionMap = new Map(packages.map(p => [p.name, p.version]));\n\n // Concurrency: default 4 — enough throughput, below npm's sustained rate limit.\n const CONCURRENCY = Number(useEnv('KB_PUBLISH_CONCURRENCY') ?? 4);\n\n // Sort packages into topological waves so deps are always published first.\n const waves = topoSort(packages, packageManager);\n\n logger.info(\n `Publishing ${packages.length} package(s) in ${waves.length} topological wave(s) ` +\n `(concurrency=${CONCURRENCY}, dryRun=${dryRun ?? false})`,\n );\n\n const allResults: PublishResult[] = [];\n\n for (let waveIdx = 0; waveIdx < waves.length; waveIdx++) {\n const wave = waves[waveIdx]!;\n logger.info(`Wave ${waveIdx + 1}/${waves.length}: publishing ${wave.length} package(s)`);\n\n // Publish wave in parallel batches.\n for (let i = 0; i < wave.length; i += CONCURRENCY) {\n const batch = wave.slice(i, i + CONCURRENCY);\n const batchResults = await Promise.all(\n batch.map(pkg =>\n publishOne(pkg, { packageManager, token, versionMap, dryRun, otp, tag, access, registry }, logger),\n ),\n );\n allResults.push(...batchResults);\n }\n\n // If any package in this wave genuinely failed (not alreadyPublished), stop\n // publishing the next wave — it may depend on the failed packages.\n const waveFailed = allResults.slice(-wave.length).filter(r => !r.success);\n if (waveFailed.length > 0) {\n skipRemainingWaves(waves, waveIdx, waveFailed, logger, allResults);\n break;\n }\n }\n\n const published = allResults.filter(r => r.success && !r.alreadyPublished).map(r => `${r.name}@${r.version}`);\n const alreadyPublished = allResults.filter(r => r.alreadyPublished).map(r => `${r.name}@${r.version}`);\n const failed = allResults.filter(r => !r.success).map(r => `${r.name}@${r.version}`);\n const errors = allResults.filter(r => !r.success && r.error).map(r => `${r.name}: ${r.error}`);\n\n if (alreadyPublished.length > 0) {\n logger.info(`${alreadyPublished.length} package(s) already published — counted as success`);\n }\n\n return {\n results: allResults,\n published,\n alreadyPublished,\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 * Flow:\n * 1. Optimistic parallel publish (fast-path, works when OTP is not required).\n * 2. On EOTP: fall back to sequential publish with interactive OTP prompt.\n *\n * Reliability:\n * - Already-published versions are treated as success (idempotent re-runs).\n * - Transient errors (429, ECONNRESET, etc.) are retried with exponential back-off + jitter.\n * - dep rewriting (workspace:/link: → ^version) is handled by shared dep-rewrite utility.\n */\n\nimport { spawn } from 'node:child_process';\nimport * as readline from 'node:readline/promises';\nimport { useLoader, useEnv } from '@kb-labs/sdk';\nimport { rewriteWorkspaceDeps } from './dep-rewrite';\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?: Record<string, unknown>) => void;\n warn: (msg: string, meta?: Record<string, unknown>) => void;\n error: (msg: string, error?: Error, meta?: Record<string, unknown>) => void;\n debug: (msg: string, meta?: Record<string, unknown>) => void;\n };\n}\n\nexport interface PublishResult {\n name: string;\n version: string;\n success: boolean;\n alreadyPublished?: boolean;\n error?: string;\n}\n\nexport interface PublishWithOTPResult {\n results: PublishResult[];\n published: string[];\n alreadyPublished: string[];\n failed: string[];\n skipped: string[];\n errors: string[];\n}\n\n// ---------------------------------------------------------------------------\n// Retry helpers (shared with publish-programmatic)\n// ---------------------------------------------------------------------------\n\nconst MAX_RETRIES = 5;\nconst RETRY_BASE_DELAYS_MS = [10_000, 20_000, 40_000, 80_000, 160_000] as const;\n\nconst RETRYABLE_PATTERNS = [\n 'E429', '429 Too Many Requests',\n 'ECONNRESET', 'ETIMEDOUT', 'ECONNREFUSED', 'ENOTFOUND', 'EAI_AGAIN',\n 'socket hang up', 'network timeout', 'read ECONNRESET',\n];\n\nconst ALREADY_PUBLISHED_PATTERNS = [\n 'You cannot publish over the previously published versions',\n 'cannot publish over the previously published version',\n 'EPUBLISHCONFLICT',\n];\n\nfunction isRetryable(msg: string): boolean {\n return RETRYABLE_PATTERNS.some(p => msg.includes(p));\n}\n\nfunction isAlreadyPublished(msg: string): boolean {\n return ALREADY_PUBLISHED_PATTERNS.some(p => msg.includes(p));\n}\n\nfunction retryDelay(attempt: number): number {\n const base = RETRY_BASE_DELAYS_MS[Math.min(attempt, RETRY_BASE_DELAYS_MS.length - 1)]!;\n const jitter = 0.8 + Math.random() * 0.4;\n return Math.round(base * jitter);\n}\n\n// ---------------------------------------------------------------------------\n// Low-level spawn\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\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') { args.push('--no-git-checks'); }\n if (dryRun) { args.push('--dry-run'); }\n if (otp) { args.push(`--otp=${otp}`); }\n if (tag) { args.push(`--tag=${tag}`); }\n if (access) { args.push(`--access=${access}`); }\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 child.stdout?.on('data', (d: Buffer) => { stdout += d.toString(); });\n child.stderr?.on('data', (d: Buffer) => { stderr += d.toString(); });\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) => reject(err));\n });\n}\n\n// ---------------------------------------------------------------------------\n// Fast-path helpers\n// ---------------------------------------------------------------------------\n\ninterface FastPublishContext {\n packageManager: 'pnpm' | 'npm' | 'yarn';\n versionMap: Map<string, string>;\n otp?: string;\n dryRun?: boolean;\n tag?: string;\n access?: string;\n}\n\ninterface FastPublishOutcome {\n result: PublishResult | null; // null = needs OTP sequential path\n otpFailed: boolean;\n}\n\nasync function fastPublishPkg(\n pkg: PackageToPublish,\n ctx: FastPublishContext,\n logger: PublishWithOTPOptions['logger'],\n): Promise<FastPublishOutcome> {\n const restore = rewriteWorkspaceDeps(pkg.path, ctx.versionMap, ctx.packageManager);\n try {\n for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {\n try {\n await publishSinglePackage({ packagePath: pkg.path, packageManager: ctx.packageManager, otp: ctx.otp, dryRun: ctx.dryRun, tag: ctx.tag, access: ctx.access });\n logger?.info('Published (fast-path)', { name: pkg.name, version: pkg.version });\n return { result: { name: pkg.name, version: pkg.version, success: true }, otpFailed: false };\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n if (isAlreadyPublished(msg)) {\n logger?.info(`${pkg.name}@${pkg.version} already published — skipping`);\n return { result: { name: pkg.name, version: pkg.version, success: true, alreadyPublished: true }, otpFailed: false };\n }\n if (msg.includes('EOTP') || msg.includes('one-time password')) {\n return { result: null, otpFailed: true };\n }\n if (isRetryable(msg) && attempt < MAX_RETRIES) {\n const delay = retryDelay(attempt);\n logger?.warn(`Transient error for ${pkg.name} (attempt ${attempt + 1}/${MAX_RETRIES}), retrying in ${(delay / 1000).toFixed(1)}s`);\n await new Promise<void>(r => { setTimeout(r, delay); });\n continue;\n }\n logger?.error('Publish failed (fast-path)', undefined, { name: pkg.name, error: msg });\n return { result: { name: pkg.name, version: pkg.version, success: false, error: msg }, otpFailed: false };\n }\n }\n return { result: { name: pkg.name, version: pkg.version, success: false, error: `Publish failed after ${MAX_RETRIES} retries (transient errors)` }, otpFailed: false };\n } finally {\n restore();\n }\n}\n\n// ---------------------------------------------------------------------------\n// Sequential OTP path helpers\n// ---------------------------------------------------------------------------\n\ninterface OtpState { otp?: string; }\n\nasync function promptForOtp(\n ui: PublishWithOTPOptions['ui'],\n loader: ReturnType<typeof useLoader>,\n pkgName: string,\n): Promise<string | undefined> {\n loader.succeed(`🔐 2FA required for ${pkgName}`);\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout });\n try {\n const entered = await rl.question(' Enter OTP code: ');\n rl.close();\n if (!entered || entered.trim().length !== 6) {\n ui.write?.(' ⚠️ Invalid OTP (must be 6 digits)\\n');\n return undefined;\n }\n return entered.trim();\n } catch (e) {\n rl.close();\n throw e;\n }\n}\n\ninterface SequentialContext {\n packageManager: 'pnpm' | 'npm' | 'yarn';\n versionMap: Map<string, string>;\n dryRun?: boolean;\n tag?: string;\n access?: string;\n}\n\nasync function sequentialPublishPkg(\n pkg: PackageToPublish,\n ctx: SequentialContext,\n otpState: OtpState,\n ui: PublishWithOTPOptions['ui'],\n logger: PublishWithOTPOptions['logger'],\n): Promise<PublishResult> {\n const loader = useLoader(`Publishing ${pkg.name}@${pkg.version}...`);\n loader.start();\n const restore = rewriteWorkspaceDeps(pkg.path, ctx.versionMap, ctx.packageManager);\n try {\n const MAX_OTP_ATTEMPTS = 3;\n for (let otpAttempts = 0; otpAttempts < MAX_OTP_ATTEMPTS; otpAttempts++) {\n try {\n await publishSinglePackage({ packagePath: pkg.path, packageManager: ctx.packageManager, otp: otpState.otp, dryRun: ctx.dryRun, tag: ctx.tag, access: ctx.access });\n loader.succeed(ctx.dryRun ? `Dry-run: ${pkg.name}@${pkg.version}` : `Published ${pkg.name}@${pkg.version}`);\n return { name: pkg.name, version: pkg.version, success: true };\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n if (isAlreadyPublished(msg)) {\n loader.succeed(`${pkg.name}@${pkg.version} already published`);\n return { name: pkg.name, version: pkg.version, success: true, alreadyPublished: true };\n }\n if (msg.includes('EOTP') || msg.includes('one-time password')) {\n if (otpAttempts + 1 < MAX_OTP_ATTEMPTS) {\n otpState.otp = await promptForOtp(ui, loader, pkg.name);\n loader.update({ text: `Publishing ${pkg.name}@${pkg.version} with OTP...` });\n loader.start();\n } else {\n loader.fail('Max OTP attempts reached');\n return { name: pkg.name, version: pkg.version, success: false, error: 'Max OTP attempts reached' };\n }\n } else if (isRetryable(msg)) {\n const delay = retryDelay(MAX_RETRIES - 1);\n loader.update({ text: `Rate limited — waiting ${(delay / 1000).toFixed(0)}s…` });\n loader.start();\n await new Promise<void>(r => { setTimeout(r, delay); });\n otpAttempts--; // don't count transient error as an OTP attempt\n } else {\n loader.fail(`Failed: ${msg.split('\\n')[0]}`);\n return { name: pkg.name, version: pkg.version, success: false, error: msg };\n }\n }\n }\n return { name: pkg.name, version: pkg.version, success: false, error: 'Publish failed after max OTP attempts' };\n } finally {\n restore();\n }\n}\n\n// ---------------------------------------------------------------------------\n// Main export\n// ---------------------------------------------------------------------------\n\n/**\n * Publish packages with interactive OTP support.\n *\n * Tries parallel optimistic publish first. On EOTP, falls back to sequential\n * publish with interactive OTP prompt.\n */\nexport async function publishPackagesWithOTP(\n options: PublishWithOTPOptions,\n): Promise<PublishWithOTPResult> {\n const { packages, packageManager = 'pnpm', dryRun, tag, access, ui, logger } = options;\n const otpState: OtpState = { otp: options.otp };\n const versionMap = new Map(packages.map(p => [p.name, p.version]));\n const fastCtx: FastPublishContext = { packageManager, versionMap, otp: otpState.otp, dryRun, tag, access };\n const seqCtx: SequentialContext = { packageManager, versionMap, dryRun, tag, access };\n\n const results: PublishResult[] = [];\n const remaining: PackageToPublish[] = [];\n const CONCURRENCY = Number(useEnv('KB_PUBLISH_CONCURRENCY') ?? 4);\n let otpFailureDetected = false;\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 outcomes = await Promise.all(batch.map(pkg => fastPublishPkg(pkg, fastCtx, logger)));\n for (let j = 0; j < batch.length; j++) {\n const outcome = outcomes[j]!;\n if (outcome.result === null) { remaining.push(batch[j]!); } else { results.push(outcome.result); }\n if (outcome.otpFailed) { otpFailureDetected = true; }\n }\n if (otpFailureDetected) {\n remaining.push(...packages.slice(i + CONCURRENCY));\n break;\n }\n }\n\n if (remaining.length === 0) { return buildResult(results, packages, dryRun); }\n\n ui.write?.(` OTP required — falling back to sequential publish for ${remaining.length} package(s)\\n`);\n for (const pkg of remaining) {\n logger?.info('Publishing package (sequential)', { name: pkg.name, version: pkg.version });\n results.push(await sequentialPublishPkg(pkg, seqCtx, otpState, ui, logger));\n }\n\n return buildResult(results, packages, dryRun);\n}\n\nfunction buildResult(\n results: PublishResult[],\n packages: PackageToPublish[],\n dryRun?: boolean,\n): PublishWithOTPResult {\n return {\n results,\n published: results.filter(r => r.success && !r.alreadyPublished).map(r => `${r.name}@${r.version}`),\n alreadyPublished: results.filter(r => r.alreadyPublished).map(r => `${r.name}@${r.version}`),\n failed: results.filter(r => !r.success).map(r => `${r.name}@${r.version}`),\n skipped: dryRun ? packages.map(p => `${p.name}@${p.version} (dry-run)`) : [],\n errors: results.filter(r => !r.success && r.error).map(r => `${r.name}: ${r.error}`),\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\n// ── helpers ────────────────────────────────────────────────────────────────\n\nfunction buildPlanRows(packages: Array<{ bump?: string; name: string; currentVersion: string; nextVersion: string }>): string[] {\n return 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\nfunction createPublisher(\n config: ReleaseConfig,\n token: string | undefined,\n ctx: PluginContextV3,\n): { publish(packages: PublishablePackage[], opts: { dryRun?: boolean; access?: string }): Promise<PublishResult> } {\n const packageManager = config.workspace?.type ?? config.publish?.packageManager ?? 'pnpm';\n return {\n async publish(packages: PublishablePackage[], opts: { dryRun?: boolean; access?: string }): Promise<PublishResult> {\n if (token) {\n const r = await publishPackagesProgrammatic({\n packages,\n packageManager,\n dryRun: opts.dryRun,\n access: (opts.access as 'public' | 'restricted') ?? 'public',\n registry: config.registry,\n token,\n });\n return { published: r.published, alreadyPublished: r.alreadyPublished, failed: r.failed, skipped: r.skipped, errors: r.errors };\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\nfunction appendCheckDetails(c: CheckResult, checkItems: string[]): void {\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 checkItems.push(` output:`);\n for (const line of output.split('\\n').slice(0, 8)) { checkItems.push(` ${line}`); }\n }\n const failedPkgs = (c.packages ?? []).filter(p => !p.ok);\n if (failedPkgs.length) {\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\nfunction buildCheckItems(checkEntries: CheckResult[], symbols: { success: string; warning: string; error: string }): string[] {\n const checkItems: string[] = [];\n for (const c of checkEntries) {\n const sym = c.ok ? symbols.success : (c.hint === 'optional' ? symbols.warning : symbols.error);\n const timing = c.timingMs ? ` (${(c.timingMs / 1000).toFixed(1)}s)` : '';\n checkItems.push(`${sym} ${c.id}${timing}`);\n if (!c.ok && c.hint !== 'optional') { appendCheckDetails(c, checkItems); }\n }\n return checkItems;\n}\n\nfunction buildReleaseSections(\n report: ReleaseReport,\n dryRun: boolean,\n ctx: PluginContextV3,\n): Array<{ header?: string; items: string[] }> {\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 as any).alreadyPublished?.length) {\n sections.push({\n header: 'Already published (skipped)',\n items: ((report.result as any).alreadyPublished as string[]).map(p => `${ctx.ui.symbols.info} ${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 sections.push({\n header: `Checks — ${passed.length} passed, ${failed.length} failed${skipped.length ? `, ${skipped.length} skipped` : ''}`,\n items: buildCheckItems(checkEntries, ctx.ui.symbols),\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 return sections;\n}\n\nfunction resolveChecks(flags: RunFlags, config: ReleaseConfig): any[] {\n if (flags.flow) { return config.flows?.[flags.flow]?.checks ?? config.checks ?? []; }\n if (flags.scope) { return config.scopes?.[flags.scope]?.checks ?? config.checks ?? []; }\n return config.checks ?? [];\n}\n\nasync function confirmRelease(): Promise<boolean> {\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 return answer.trim().toLowerCase() === 'y';\n}\n\nfunction showPlanBox(\n ctx: PluginContextV3,\n flags: RunFlags,\n plan: { packages: Array<{ bump?: string; name: string; currentVersion: string; nextVersion: string }> },\n config: ReleaseConfig,\n dryRun: boolean,\n): void {\n if (flags.json) { return; }\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: buildPlanRows(plan.packages),\n },\n ],\n status: 'info',\n });\n if (flags['no-verify']) {\n ctx.ui.write?.(` ⚠️ --no-verify: git pre-push hooks will be skipped\\n`);\n }\n}\n\nfunction reportPipelineResult(\n ctx: PluginContextV3,\n flags: RunFlags,\n result: { success: boolean; report: ReleaseReport },\n dryRun: boolean,\n): void {\n if (flags.json) {\n ctx.ui?.json?.(result.report);\n return;\n }\n ctx.ui.sideBox({\n title: 'Release',\n sections: buildReleaseSections(result.report, dryRun, ctx),\n status: result.success ? 'success' : 'error',\n timing: result.report.result.timingMs,\n });\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 token = useEnv('NPM_TOKEN') ?? useEnv('NODE_AUTH_TOKEN');\n\n // 1b. Pre-flight — fail fast before planning (which is slow)\n if (!dryRun) {\n const preErrors: string[] = [];\n const registry = config.registry ?? 'https://registry.npmjs.org';\n if (!token) {\n preErrors.push('NPM_TOKEN or NODE_AUTH_TOKEN is not set');\n } else {\n try {\n const res = await fetch(`${registry}/-/whoami`, {\n headers: { Authorization: `Bearer ${token}` },\n signal: AbortSignal.timeout(8000),\n });\n if (!res.ok) {\n preErrors.push(`npm token invalid or expired (HTTP ${res.status} from ${registry})`);\n }\n } catch (e) {\n preErrors.push(`npm registry unreachable: ${e instanceof Error ? e.message : String(e)}`);\n }\n }\n\n if (flags.flow && config.flows && !(flags.flow in config.flows)) {\n preErrors.push(`Flow \"${flags.flow}\" is not defined in release.flows config`);\n }\n\n if (preErrors.length > 0) {\n ctx.ui.sideBox({\n title: 'Release — pre-flight failed',\n sections: [{ items: preErrors.map(e => `${ctx.ui.symbols.error} ${e}`) }],\n status: 'error',\n });\n return { exitCode: 1 };\n }\n }\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 showPlanBox(ctx, flags, plan, config, dryRun);\n\n // 4. Confirm (skip with --yes or --dry-run)\n if (!skipYes) {\n const confirmed = await confirmRelease();\n if (!confirmed) {\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 const publisher = createPublisher(config, token, ctx);\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: resolveChecks(flags, config),\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 reportPipelineResult(ctx, flags, result, dryRun);\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/dep-rewrite.ts","../../../src/shared/publish-programmatic.ts","../../../src/shared/publish-with-otp.ts","../../../src/cli/commands/run.ts"],"names":["join","readFileSync","writeFileSync","MAX_RETRIES","RETRY_BASE_DELAYS_MS","RETRYABLE_PATTERNS","ALREADY_PUBLISHED_PATTERNS","isRetryable","isAlreadyPublished","retryDelay","spawn","useEnv","readline2","useLoader"],"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';\nimport type { ILLM } from '@kb-labs/sdk';\n\nexport function createChangelogGenerator(config: ReleaseConfig, llm?: ILLM): 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 * Rewrite workspace:/link: dependency references to pinned npm versions.\n *\n * - pnpm handles `workspace:*` natively during `pnpm publish` — no rewrite needed.\n * - npm/yarn do NOT — we must replace with `^version` before publish.\n * - `link:` references are never valid on the npm registry — always rewrite.\n *\n * Returns a restore function that reverts package.json to original content.\n * Call it in a finally block to guarantee cleanup.\n */\n\nimport { readFileSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\n\n// ── rewriteWorkspaceDeps helpers ──────────────────────────────────────────\n\nfunction rewriteLinkDep(\n deps: Record<string, string>,\n depName: string,\n val: string,\n pkgPath: string,\n versionMap: Map<string, string>,\n): void {\n const pinned = versionMap.get(depName);\n if (pinned) {\n deps[depName] = `^${pinned}`;\n return;\n }\n try {\n const linkPath = val.slice('link:'.length);\n const linked = JSON.parse(readFileSync(join(pkgPath, linkPath, 'package.json'), 'utf-8')) as { version?: string };\n deps[depName] = `^${linked.version ?? '*'}`;\n } catch {\n deps[depName] = '*';\n }\n}\n\nfunction rewriteWorkspaceDep(\n deps: Record<string, string>,\n depName: string,\n val: string,\n versionMap: Map<string, string>,\n): boolean {\n const pinned = versionMap.get(depName);\n if (!pinned) { return false; }\n deps[depName] = val === 'workspace:*' ? `^${pinned}` : val.replace('workspace:', '');\n return true;\n}\n\nfunction rewriteDepsSection(\n deps: Record<string, string>,\n pkgPath: string,\n versionMap: Map<string, string>,\n packageManager: string,\n): boolean {\n let modified = false;\n for (const depName of Object.keys(deps)) {\n const val = deps[depName];\n if (typeof val !== 'string') { continue; }\n if (val.startsWith('link:')) {\n rewriteLinkDep(deps, depName, val, pkgPath, versionMap);\n modified = true;\n } else if (val.startsWith('workspace:') && packageManager !== 'pnpm' && rewriteWorkspaceDep(deps, depName, val, versionMap)) {\n modified = true;\n }\n }\n return modified;\n}\n\nexport function rewriteWorkspaceDeps(\n pkgPath: string,\n versionMap: Map<string, string>,\n packageManager: string,\n): () => void {\n const pkgJsonPath = join(pkgPath, 'package.json');\n const original = readFileSync(pkgJsonPath, 'utf-8');\n const pkgJson = JSON.parse(original) as Record<string, unknown>;\n let modified = false;\n\n for (const section of ['dependencies', 'peerDependencies'] as const) {\n const deps = pkgJson[section] as Record<string, string> | undefined;\n if (!deps) { continue; }\n if (rewriteDepsSection(deps, pkgPath, versionMap, packageManager)) { modified = true; }\n }\n\n if (modified) {\n writeFileSync(pkgJsonPath, JSON.stringify(pkgJson, null, 2) + '\\n');\n }\n\n return () => writeFileSync(pkgJsonPath, original);\n}\n\n// ── topoSort helpers ──────────────────────────────────────────────────────\n\n/**\n * Build a simple topological sort of packages for publish order.\n *\n * Packages are grouped into \"waves\": wave 0 has no intra-release deps,\n * wave 1 depends only on wave 0, etc. Within each wave publish order\n * is arbitrary (safe to parallelise).\n *\n * Cycles (should not exist in a well-formed monorepo) fall into a\n * \"remainder\" group appended at the end.\n */\nexport interface TopoPackage {\n name: string;\n path: string;\n version: string;\n}\n\nfunction buildIntraDeps(packages: TopoPackage[], nameSet: Set<string>): Map<string, Set<string>> {\n const deps = new Map<string, Set<string>>();\n for (const pkg of packages) {\n const intra = new Set<string>();\n try {\n const pkgJson = JSON.parse(readFileSync(join(pkg.path, 'package.json'), 'utf-8')) as {\n dependencies?: Record<string, string>;\n peerDependencies?: Record<string, string>;\n };\n for (const section of ['dependencies', 'peerDependencies'] as const) {\n for (const depName of Object.keys(pkgJson[section] ?? {})) {\n if (nameSet.has(depName)) { intra.add(depName); }\n }\n }\n } catch {\n // If we can't read package.json, treat as no deps\n }\n deps.set(pkg.name, intra);\n }\n return deps;\n}\n\nfunction buildDependantsMap(packages: TopoPackage[], deps: Map<string, Set<string>>): Map<string, Set<string>> {\n const dependants = new Map<string, Set<string>>();\n for (const pkg of packages) {\n for (const dep of deps.get(pkg.name) ?? []) {\n if (!dependants.has(dep)) { dependants.set(dep, new Set()); }\n dependants.get(dep)!.add(pkg.name);\n }\n }\n return dependants;\n}\n\nfunction computeWaves(\n packages: TopoPackage[],\n deps: Map<string, Set<string>>,\n dependants: Map<string, Set<string>>,\n): TopoPackage[][] {\n const byName = new Map(packages.map(p => [p.name, p]));\n const remaining = new Map<string, number>(\n packages.map(p => [p.name, (deps.get(p.name) ?? new Set()).size])\n );\n const waves: TopoPackage[][] = [];\n\n while (remaining.size > 0) {\n const wave = [...remaining.entries()]\n .filter(([, count]) => count === 0)\n .map(([name]) => byName.get(name)!);\n\n if (wave.length === 0) {\n waves.push([...remaining.keys()].map(n => byName.get(n)!));\n break;\n }\n\n waves.push(wave);\n for (const pkg of wave) {\n remaining.delete(pkg.name);\n for (const dependant of dependants.get(pkg.name) ?? []) {\n if (remaining.has(dependant)) {\n remaining.set(dependant, (remaining.get(dependant) ?? 1) - 1);\n }\n }\n }\n }\n\n return waves.filter(w => w.length > 0);\n}\n\nexport function topoSort(packages: TopoPackage[], _packageManager: string): TopoPackage[][] {\n const nameSet = new Set(packages.map(p => p.name));\n const deps = buildIntraDeps(packages, nameSet);\n const dependants = buildDependantsMap(packages, deps);\n return computeWaves(packages, deps, dependants);\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 * Reliability guarantees:\n * - Already-published versions are treated as success (idempotent re-runs).\n * - 429 rate-limit: exponential back-off with jitter, up to MAX_RETRIES attempts.\n * - Transient network errors (ECONNRESET, ETIMEDOUT, etc.) are also retried.\n * - Packages are published in topological order (deps before dependants).\n * - Default concurrency is 4 — enough throughput, low enough to avoid rate limits.\n */\n\nimport { spawn } from 'node:child_process';\nimport { readFileSync, writeFileSync, existsSync, unlinkSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { useLogger, useEnv } from '@kb-labs/sdk';\nimport { rewriteWorkspaceDeps, topoSort } from './dep-rewrite';\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 /** Package was already published at this version — counted as success. */\n alreadyPublished?: boolean;\n error?: string;\n}\n\nexport interface ProgrammaticPublishResult {\n results: PublishResult[];\n published: string[];\n /** Versions that were already on npm (counted as success). */\n alreadyPublished: string[];\n failed: string[];\n skipped: string[];\n errors: string[];\n}\n\n// ---------------------------------------------------------------------------\n// Retry configuration\n// ---------------------------------------------------------------------------\n\nconst MAX_RETRIES = 5;\n\n// Exponential base delays (ms). Actual delay = base * jitter(0.8–1.2).\nconst RETRY_BASE_DELAYS_MS = [10_000, 20_000, 40_000, 80_000, 160_000] as const;\n\n/** Retryable error patterns — all transient, not indicative of a bad package. */\nconst RETRYABLE_PATTERNS = [\n 'E429',\n '429 Too Many Requests',\n 'ECONNRESET',\n 'ETIMEDOUT',\n 'ECONNREFUSED',\n 'ENOTFOUND',\n 'EAI_AGAIN',\n 'socket hang up',\n 'network timeout',\n 'read ECONNRESET',\n];\n\n/** \"Already published\" — treat as success so re-runs are idempotent. */\nconst ALREADY_PUBLISHED_PATTERNS = [\n 'You cannot publish over the previously published versions',\n 'cannot publish over the previously published version',\n 'EPUBLISHCONFLICT',\n // Some registries return 403 for conflicts\n];\n\nfunction isRetryable(message: string): boolean {\n return RETRYABLE_PATTERNS.some(p => message.includes(p));\n}\n\nfunction isAlreadyPublished(message: string): boolean {\n return ALREADY_PUBLISHED_PATTERNS.some(p => message.includes(p));\n}\n\n/** Exponential back-off with ±20% jitter. */\nfunction retryDelay(attempt: number): number {\n const base = RETRY_BASE_DELAYS_MS[Math.min(attempt, RETRY_BASE_DELAYS_MS.length - 1)]!;\n const jitter = 0.8 + Math.random() * 0.4; // 0.8 – 1.2\n return Math.round(base * jitter);\n}\n\n// ---------------------------------------------------------------------------\n// Token resolution\n// ---------------------------------------------------------------------------\n\nfunction resolveToken(token?: string): string | undefined {\n return token ?? useEnv('NPM_TOKEN') ?? useEnv('NODE_AUTH_TOKEN');\n}\n\n// ---------------------------------------------------------------------------\n// Low-level spawn\n// ---------------------------------------------------------------------------\n\n/**\n * Spawn `packageManager publish` for a single package.\n * Writes a temporary .npmrc for NODE_AUTH_TOKEN auth, cleans it up on exit.\n */\nfunction spawnPublish(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 if (packageManager === 'pnpm') {\n // pnpm checks git cleanliness; we version-bump before publish which makes\n // the tree dirty — bypass that check.\n args.push('--no-git-checks');\n }\n if (dryRun) { args.push('--dry-run'); }\n if (tag) { args.push(`--tag=${tag}`); }\n if (access) { args.push(`--access=${access}`); }\n if (registry) { args.push(`--registry=${registry}`); }\n if (otp) { args.push(`--otp=${otp}`); }\n\n const env: NodeJS.ProcessEnv = { ...process.env };\n if (token) { env['NODE_AUTH_TOKEN'] = token; }\n\n // Write a per-package .npmrc so npm picks up NODE_AUTH_TOKEN.\n const npmrcPath = join(packagePath, '.npmrc');\n const npmrcExisted = existsSync(npmrcPath);\n const npmrcBackup = npmrcExisted ? readFileSync(npmrcPath, 'utf-8') : null;\n const authLine = '//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}\\n';\n\n if (token) {\n const existing = npmrcExisted ? readFileSync(npmrcPath, 'utf-8') : '';\n if (!existing.includes('_authToken')) {\n writeFileSync(npmrcPath, existing + authLine);\n }\n }\n\n const restoreNpmrc = () => {\n if (!token) { return; }\n try {\n if (npmrcBackup !== null) {\n writeFileSync(npmrcPath, npmrcBackup);\n } else if (existsSync(npmrcPath)) {\n unlinkSync(npmrcPath);\n }\n } catch { /* best-effort */ }\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', (d: Buffer) => { stdout += d.toString(); });\n child.stderr?.on('data', (d: Buffer) => { stderr += d.toString(); });\n\n child.on('close', (code: number | null) => {\n restoreNpmrc();\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 restoreNpmrc();\n reject(err);\n });\n });\n}\n\n// ---------------------------------------------------------------------------\n// Per-package publish with retry\n// ---------------------------------------------------------------------------\n\nasync function publishOne(\n pkg: PackageToPublish,\n opts: {\n packageManager: string;\n token: string | undefined;\n versionMap: Map<string, string>;\n dryRun?: boolean;\n otp?: string;\n tag?: string;\n access?: string;\n registry?: string;\n },\n logger: ReturnType<typeof useLogger>,\n): Promise<PublishResult> {\n const restore = rewriteWorkspaceDeps(pkg.path, opts.versionMap, opts.packageManager);\n\n try {\n for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {\n try {\n await spawnPublish({\n packagePath: pkg.path,\n packageManager: opts.packageManager,\n token: opts.token,\n otp: opts.otp,\n dryRun: opts.dryRun,\n tag: opts.tag,\n access: opts.access,\n registry: opts.registry,\n });\n\n logger.info(`Published ${pkg.name}@${pkg.version}`);\n return { name: pkg.name, version: pkg.version, success: true };\n\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n\n // Idempotency: already published at this version → success.\n if (isAlreadyPublished(message)) {\n logger.info(`${pkg.name}@${pkg.version} already published — skipping`);\n return { name: pkg.name, version: pkg.version, success: true, alreadyPublished: true };\n }\n\n // Retryable transient error (rate-limit, network blip).\n if (isRetryable(message) && attempt < MAX_RETRIES) {\n const delay = retryDelay(attempt);\n logger.warn(\n `Transient error for ${pkg.name}@${pkg.version} (attempt ${attempt + 1}/${MAX_RETRIES}), ` +\n `retrying in ${(delay / 1000).toFixed(1)}s: ${message.split('\\n')[0]}`,\n );\n await new Promise<void>(r => { setTimeout(r, delay); });\n continue;\n }\n\n // Permanent failure.\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 }\n }\n\n // Exhausted retries.\n return {\n name: pkg.name,\n version: pkg.version,\n success: false,\n error: `Publish failed after ${MAX_RETRIES} retries (transient errors)`,\n };\n } finally {\n restore();\n }\n}\n\n// ---------------------------------------------------------------------------\n// Main export\n// ---------------------------------------------------------------------------\n\nfunction skipRemainingWaves(\n waves: ReturnType<typeof topoSort>,\n waveIdx: number,\n waveFailed: PublishResult[],\n logger: ReturnType<typeof useLogger>,\n allResults: PublishResult[],\n): void {\n const remaining = waves.slice(waveIdx + 1).reduce((acc, w) => acc + w.length, 0);\n if (remaining === 0) { return; }\n logger.warn(\n `Wave ${waveIdx + 1} had ${waveFailed.length} failure(s) — ` +\n `skipping ${remaining} package(s) in later waves to avoid broken dependency chain`,\n );\n for (const laterWave of waves.slice(waveIdx + 1)) {\n for (const pkg of laterWave) {\n allResults.push({ name: pkg.name, version: pkg.version, success: false, error: 'Skipped: dependency wave failed' });\n }\n }\n}\n\n/**\n * Publish packages programmatically (non-interactive, for REST handlers / CI).\n *\n * Packages are published in topological order (deps before dependants) to\n * avoid \"package not found\" errors when a dependent is installed right after\n * release. Within each topological wave, publishes run in parallel up to\n * CONCURRENCY.\n */\nexport async function publishPackagesProgrammatic(\n options: ProgrammaticPublishOptions,\n): Promise<ProgrammaticPublishResult> {\n const {\n packages,\n packageManager = 'pnpm',\n dryRun,\n otp,\n tag,\n access,\n registry,\n } = options;\n\n const logger = useLogger();\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 alreadyPublished: [],\n failed: packages.map(p => `${p.name}@${p.version}`),\n skipped: [],\n errors: [error],\n };\n }\n\n // Version map for dep rewriting (workspace:/link: → ^version).\n const versionMap = new Map(packages.map(p => [p.name, p.version]));\n\n // Concurrency: default 4 — enough throughput, below npm's sustained rate limit.\n const CONCURRENCY = Number(useEnv('KB_PUBLISH_CONCURRENCY') ?? 4);\n\n // Sort packages into topological waves so deps are always published first.\n const waves = topoSort(packages, packageManager);\n\n logger.info(\n `Publishing ${packages.length} package(s) in ${waves.length} topological wave(s) ` +\n `(concurrency=${CONCURRENCY}, dryRun=${dryRun ?? false})`,\n );\n\n const allResults: PublishResult[] = [];\n\n for (let waveIdx = 0; waveIdx < waves.length; waveIdx++) {\n const wave = waves[waveIdx]!;\n logger.info(`Wave ${waveIdx + 1}/${waves.length}: publishing ${wave.length} package(s)`);\n\n // Publish wave in parallel batches.\n for (let i = 0; i < wave.length; i += CONCURRENCY) {\n const batch = wave.slice(i, i + CONCURRENCY);\n const batchResults = await Promise.all(\n batch.map(pkg =>\n publishOne(pkg, { packageManager, token, versionMap, dryRun, otp, tag, access, registry }, logger),\n ),\n );\n allResults.push(...batchResults);\n }\n\n // If any package in this wave genuinely failed (not alreadyPublished), stop\n // publishing the next wave — it may depend on the failed packages.\n const waveFailed = allResults.slice(-wave.length).filter(r => !r.success);\n if (waveFailed.length > 0) {\n skipRemainingWaves(waves, waveIdx, waveFailed, logger, allResults);\n break;\n }\n }\n\n const published = allResults.filter(r => r.success && !r.alreadyPublished).map(r => `${r.name}@${r.version}`);\n const alreadyPublished = allResults.filter(r => r.alreadyPublished).map(r => `${r.name}@${r.version}`);\n const failed = allResults.filter(r => !r.success).map(r => `${r.name}@${r.version}`);\n const errors = allResults.filter(r => !r.success && r.error).map(r => `${r.name}: ${r.error}`);\n\n if (alreadyPublished.length > 0) {\n logger.info(`${alreadyPublished.length} package(s) already published — counted as success`);\n }\n\n return {\n results: allResults,\n published,\n alreadyPublished,\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 * Flow:\n * 1. Optimistic parallel publish (fast-path, works when OTP is not required).\n * 2. On EOTP: fall back to sequential publish with interactive OTP prompt.\n *\n * Reliability:\n * - Already-published versions are treated as success (idempotent re-runs).\n * - Transient errors (429, ECONNRESET, etc.) are retried with exponential back-off + jitter.\n * - dep rewriting (workspace:/link: → ^version) is handled by shared dep-rewrite utility.\n */\n\nimport { spawn } from 'node:child_process';\nimport * as readline from 'node:readline/promises';\nimport { useLoader, useEnv } from '@kb-labs/sdk';\nimport { rewriteWorkspaceDeps } from './dep-rewrite';\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?: Record<string, unknown>) => void;\n warn: (msg: string, meta?: Record<string, unknown>) => void;\n error: (msg: string, error?: Error, meta?: Record<string, unknown>) => void;\n debug: (msg: string, meta?: Record<string, unknown>) => void;\n };\n}\n\nexport interface PublishResult {\n name: string;\n version: string;\n success: boolean;\n alreadyPublished?: boolean;\n error?: string;\n}\n\nexport interface PublishWithOTPResult {\n results: PublishResult[];\n published: string[];\n alreadyPublished: string[];\n failed: string[];\n skipped: string[];\n errors: string[];\n}\n\n// ---------------------------------------------------------------------------\n// Retry helpers (shared with publish-programmatic)\n// ---------------------------------------------------------------------------\n\nconst MAX_RETRIES = 5;\nconst RETRY_BASE_DELAYS_MS = [10_000, 20_000, 40_000, 80_000, 160_000] as const;\n\nconst RETRYABLE_PATTERNS = [\n 'E429', '429 Too Many Requests',\n 'ECONNRESET', 'ETIMEDOUT', 'ECONNREFUSED', 'ENOTFOUND', 'EAI_AGAIN',\n 'socket hang up', 'network timeout', 'read ECONNRESET',\n];\n\nconst ALREADY_PUBLISHED_PATTERNS = [\n 'You cannot publish over the previously published versions',\n 'cannot publish over the previously published version',\n 'EPUBLISHCONFLICT',\n];\n\nfunction isRetryable(msg: string): boolean {\n return RETRYABLE_PATTERNS.some(p => msg.includes(p));\n}\n\nfunction isAlreadyPublished(msg: string): boolean {\n return ALREADY_PUBLISHED_PATTERNS.some(p => msg.includes(p));\n}\n\nfunction retryDelay(attempt: number): number {\n const base = RETRY_BASE_DELAYS_MS[Math.min(attempt, RETRY_BASE_DELAYS_MS.length - 1)]!;\n const jitter = 0.8 + Math.random() * 0.4;\n return Math.round(base * jitter);\n}\n\n// ---------------------------------------------------------------------------\n// Low-level spawn\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\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') { args.push('--no-git-checks'); }\n if (dryRun) { args.push('--dry-run'); }\n if (otp) { args.push(`--otp=${otp}`); }\n if (tag) { args.push(`--tag=${tag}`); }\n if (access) { args.push(`--access=${access}`); }\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 child.stdout?.on('data', (d: Buffer) => { stdout += d.toString(); });\n child.stderr?.on('data', (d: Buffer) => { stderr += d.toString(); });\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) => reject(err));\n });\n}\n\n// ---------------------------------------------------------------------------\n// Fast-path helpers\n// ---------------------------------------------------------------------------\n\ninterface FastPublishContext {\n packageManager: 'pnpm' | 'npm' | 'yarn';\n versionMap: Map<string, string>;\n otp?: string;\n dryRun?: boolean;\n tag?: string;\n access?: string;\n}\n\ninterface FastPublishOutcome {\n result: PublishResult | null; // null = needs OTP sequential path\n otpFailed: boolean;\n}\n\nasync function fastPublishPkg(\n pkg: PackageToPublish,\n ctx: FastPublishContext,\n logger: PublishWithOTPOptions['logger'],\n): Promise<FastPublishOutcome> {\n const restore = rewriteWorkspaceDeps(pkg.path, ctx.versionMap, ctx.packageManager);\n try {\n for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {\n try {\n await publishSinglePackage({ packagePath: pkg.path, packageManager: ctx.packageManager, otp: ctx.otp, dryRun: ctx.dryRun, tag: ctx.tag, access: ctx.access });\n logger?.info('Published (fast-path)', { name: pkg.name, version: pkg.version });\n return { result: { name: pkg.name, version: pkg.version, success: true }, otpFailed: false };\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n if (isAlreadyPublished(msg)) {\n logger?.info(`${pkg.name}@${pkg.version} already published — skipping`);\n return { result: { name: pkg.name, version: pkg.version, success: true, alreadyPublished: true }, otpFailed: false };\n }\n if (msg.includes('EOTP') || msg.includes('one-time password')) {\n return { result: null, otpFailed: true };\n }\n if (isRetryable(msg) && attempt < MAX_RETRIES) {\n const delay = retryDelay(attempt);\n logger?.warn(`Transient error for ${pkg.name} (attempt ${attempt + 1}/${MAX_RETRIES}), retrying in ${(delay / 1000).toFixed(1)}s`);\n await new Promise<void>(r => { setTimeout(r, delay); });\n continue;\n }\n logger?.error('Publish failed (fast-path)', undefined, { name: pkg.name, error: msg });\n return { result: { name: pkg.name, version: pkg.version, success: false, error: msg }, otpFailed: false };\n }\n }\n return { result: { name: pkg.name, version: pkg.version, success: false, error: `Publish failed after ${MAX_RETRIES} retries (transient errors)` }, otpFailed: false };\n } finally {\n restore();\n }\n}\n\n// ---------------------------------------------------------------------------\n// Sequential OTP path helpers\n// ---------------------------------------------------------------------------\n\ninterface OtpState { otp?: string; }\n\nasync function promptForOtp(\n ui: PublishWithOTPOptions['ui'],\n loader: ReturnType<typeof useLoader>,\n pkgName: string,\n): Promise<string | undefined> {\n loader.succeed(`🔐 2FA required for ${pkgName}`);\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout });\n try {\n const entered = await rl.question(' Enter OTP code: ');\n rl.close();\n if (!entered || entered.trim().length !== 6) {\n ui.write?.(' ⚠️ Invalid OTP (must be 6 digits)\\n');\n return undefined;\n }\n return entered.trim();\n } catch (e) {\n rl.close();\n throw e;\n }\n}\n\ninterface SequentialContext {\n packageManager: 'pnpm' | 'npm' | 'yarn';\n versionMap: Map<string, string>;\n dryRun?: boolean;\n tag?: string;\n access?: string;\n}\n\nasync function sequentialPublishPkg(\n pkg: PackageToPublish,\n ctx: SequentialContext,\n otpState: OtpState,\n ui: PublishWithOTPOptions['ui'],\n logger: PublishWithOTPOptions['logger'],\n): Promise<PublishResult> {\n const loader = useLoader(`Publishing ${pkg.name}@${pkg.version}...`);\n loader.start();\n const restore = rewriteWorkspaceDeps(pkg.path, ctx.versionMap, ctx.packageManager);\n try {\n const MAX_OTP_ATTEMPTS = 3;\n for (let otpAttempts = 0; otpAttempts < MAX_OTP_ATTEMPTS; otpAttempts++) {\n try {\n await publishSinglePackage({ packagePath: pkg.path, packageManager: ctx.packageManager, otp: otpState.otp, dryRun: ctx.dryRun, tag: ctx.tag, access: ctx.access });\n loader.succeed(ctx.dryRun ? `Dry-run: ${pkg.name}@${pkg.version}` : `Published ${pkg.name}@${pkg.version}`);\n return { name: pkg.name, version: pkg.version, success: true };\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n if (isAlreadyPublished(msg)) {\n loader.succeed(`${pkg.name}@${pkg.version} already published`);\n return { name: pkg.name, version: pkg.version, success: true, alreadyPublished: true };\n }\n if (msg.includes('EOTP') || msg.includes('one-time password')) {\n if (otpAttempts + 1 < MAX_OTP_ATTEMPTS) {\n otpState.otp = await promptForOtp(ui, loader, pkg.name);\n loader.update({ text: `Publishing ${pkg.name}@${pkg.version} with OTP...` });\n loader.start();\n } else {\n loader.fail('Max OTP attempts reached');\n return { name: pkg.name, version: pkg.version, success: false, error: 'Max OTP attempts reached' };\n }\n } else if (isRetryable(msg)) {\n const delay = retryDelay(MAX_RETRIES - 1);\n loader.update({ text: `Rate limited — waiting ${(delay / 1000).toFixed(0)}s…` });\n loader.start();\n await new Promise<void>(r => { setTimeout(r, delay); });\n otpAttempts--; // don't count transient error as an OTP attempt\n } else {\n loader.fail(`Failed: ${msg.split('\\n')[0]}`);\n return { name: pkg.name, version: pkg.version, success: false, error: msg };\n }\n }\n }\n return { name: pkg.name, version: pkg.version, success: false, error: 'Publish failed after max OTP attempts' };\n } finally {\n restore();\n }\n}\n\n// ---------------------------------------------------------------------------\n// Main export\n// ---------------------------------------------------------------------------\n\n/**\n * Publish packages with interactive OTP support.\n *\n * Tries parallel optimistic publish first. On EOTP, falls back to sequential\n * publish with interactive OTP prompt.\n */\nexport async function publishPackagesWithOTP(\n options: PublishWithOTPOptions,\n): Promise<PublishWithOTPResult> {\n const { packages, packageManager = 'pnpm', dryRun, tag, access, ui, logger } = options;\n const otpState: OtpState = { otp: options.otp };\n const versionMap = new Map(packages.map(p => [p.name, p.version]));\n const fastCtx: FastPublishContext = { packageManager, versionMap, otp: otpState.otp, dryRun, tag, access };\n const seqCtx: SequentialContext = { packageManager, versionMap, dryRun, tag, access };\n\n const results: PublishResult[] = [];\n const remaining: PackageToPublish[] = [];\n const CONCURRENCY = Number(useEnv('KB_PUBLISH_CONCURRENCY') ?? 4);\n let otpFailureDetected = false;\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 outcomes = await Promise.all(batch.map(pkg => fastPublishPkg(pkg, fastCtx, logger)));\n for (let j = 0; j < batch.length; j++) {\n const outcome = outcomes[j]!;\n if (outcome.result === null) { remaining.push(batch[j]!); } else { results.push(outcome.result); }\n if (outcome.otpFailed) { otpFailureDetected = true; }\n }\n if (otpFailureDetected) {\n remaining.push(...packages.slice(i + CONCURRENCY));\n break;\n }\n }\n\n if (remaining.length === 0) { return buildResult(results, packages, dryRun); }\n\n ui.write?.(` OTP required — falling back to sequential publish for ${remaining.length} package(s)\\n`);\n for (const pkg of remaining) {\n logger?.info('Publishing package (sequential)', { name: pkg.name, version: pkg.version });\n results.push(await sequentialPublishPkg(pkg, seqCtx, otpState, ui, logger));\n }\n\n return buildResult(results, packages, dryRun);\n}\n\nfunction buildResult(\n results: PublishResult[],\n packages: PackageToPublish[],\n dryRun?: boolean,\n): PublishWithOTPResult {\n return {\n results,\n published: results.filter(r => r.success && !r.alreadyPublished).map(r => `${r.name}@${r.version}`),\n alreadyPublished: results.filter(r => r.alreadyPublished).map(r => `${r.name}@${r.version}`),\n failed: results.filter(r => !r.success).map(r => `${r.name}@${r.version}`),\n skipped: dryRun ? packages.map(p => `${p.name}@${p.version} (dry-run)`) : [],\n errors: results.filter(r => !r.success && r.error).map(r => `${r.name}: ${r.error}`),\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\n// ── helpers ────────────────────────────────────────────────────────────────\n\nfunction buildPlanRows(packages: Array<{ bump?: string; name: string; currentVersion: string; nextVersion: string }>): string[] {\n return 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\nfunction createPublisher(\n config: ReleaseConfig,\n token: string | undefined,\n ctx: PluginContextV3,\n): { publish(packages: PublishablePackage[], opts: { dryRun?: boolean; access?: string }): Promise<PublishResult> } {\n const packageManager = config.workspace?.type ?? config.publish?.packageManager ?? 'pnpm';\n return {\n async publish(packages: PublishablePackage[], opts: { dryRun?: boolean; access?: string }): Promise<PublishResult> {\n if (token) {\n const r = await publishPackagesProgrammatic({\n packages,\n packageManager,\n dryRun: opts.dryRun,\n access: (opts.access as 'public' | 'restricted') ?? 'public',\n registry: config.registry,\n token,\n });\n return { published: r.published, alreadyPublished: r.alreadyPublished, failed: r.failed, skipped: r.skipped, errors: r.errors };\n }\n // PublishWithOTPResult is structurally compatible with core PublishResult\n // (both have published/alreadyPublished/failed/skipped). Double-cast to satisfy\n // the return type without widening to any.\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 unknown as Promise<PublishResult>;\n },\n };\n}\n\nfunction appendCheckDetails(c: CheckResult, checkItems: string[]): void {\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 checkItems.push(` output:`);\n for (const line of output.split('\\n').slice(0, 8)) { checkItems.push(` ${line}`); }\n }\n const failedPkgs = (c.packages ?? []).filter(p => !p.ok);\n if (failedPkgs.length) {\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\nfunction buildCheckItems(checkEntries: CheckResult[], symbols: { success: string; warning: string; error: string }): string[] {\n const checkItems: string[] = [];\n for (const c of checkEntries) {\n const sym = c.ok ? symbols.success : (c.hint === 'optional' ? symbols.warning : symbols.error);\n const timing = c.timingMs ? ` (${(c.timingMs / 1000).toFixed(1)}s)` : '';\n checkItems.push(`${sym} ${c.id}${timing}`);\n if (!c.ok && c.hint !== 'optional') { appendCheckDetails(c, checkItems); }\n }\n return checkItems;\n}\n\nfunction buildReleaseSections(\n report: ReleaseReport,\n dryRun: boolean,\n ctx: PluginContextV3,\n): Array<{ header?: string; items: string[] }> {\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.alreadyPublished?.length) {\n sections.push({\n header: 'Already published (skipped)',\n items: report.result.alreadyPublished.map(p => `${ctx.ui.symbols.info} ${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 sections.push({\n header: `Checks — ${passed.length} passed, ${failed.length} failed${skipped.length ? `, ${skipped.length} skipped` : ''}`,\n items: buildCheckItems(checkEntries, ctx.ui.symbols),\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 return sections;\n}\n\nfunction resolveChecks(flags: RunFlags, config: ReleaseConfig): NonNullable<ReleaseConfig['checks']> {\n if (flags.flow) { return config.flows?.[flags.flow]?.checks ?? config.checks ?? []; }\n if (flags.scope) { return config.scopes?.[flags.scope]?.checks ?? config.checks ?? []; }\n return config.checks ?? [];\n}\n\nasync function confirmRelease(): Promise<boolean> {\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 return answer.trim().toLowerCase() === 'y';\n}\n\nfunction showPlanBox(\n ctx: PluginContextV3,\n flags: RunFlags,\n plan: { packages: Array<{ bump?: string; name: string; currentVersion: string; nextVersion: string }> },\n config: ReleaseConfig,\n dryRun: boolean,\n): void {\n if (flags.json) { return; }\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: buildPlanRows(plan.packages),\n },\n ],\n status: 'info',\n });\n if (flags['no-verify']) {\n ctx.ui.write?.(` ⚠️ --no-verify: git pre-push hooks will be skipped\\n`);\n }\n}\n\nfunction reportPipelineResult(\n ctx: PluginContextV3,\n flags: RunFlags,\n result: { success: boolean; report: ReleaseReport },\n dryRun: boolean,\n): void {\n if (flags.json) {\n ctx.ui?.json?.(result.report);\n return;\n }\n ctx.ui.sideBox({\n title: 'Release',\n sections: buildReleaseSections(result.report, dryRun, ctx),\n status: result.success ? 'success' : 'error',\n timing: result.report.result.timingMs,\n });\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 token = useEnv('NPM_TOKEN') ?? useEnv('NODE_AUTH_TOKEN');\n\n // 1b. Pre-flight — fail fast before planning (which is slow)\n if (!dryRun) {\n const preErrors: string[] = [];\n const registry = config.registry ?? 'https://registry.npmjs.org';\n if (!token) {\n preErrors.push('NPM_TOKEN or NODE_AUTH_TOKEN is not set');\n } else {\n try {\n const res = await fetch(`${registry}/-/whoami`, {\n headers: { Authorization: `Bearer ${token}` },\n signal: AbortSignal.timeout(8000),\n });\n if (!res.ok) {\n preErrors.push(`npm token invalid or expired (HTTP ${res.status} from ${registry})`);\n }\n } catch (e) {\n preErrors.push(`npm registry unreachable: ${e instanceof Error ? e.message : String(e)}`);\n }\n }\n\n if (flags.flow && config.flows && !(flags.flow in config.flows)) {\n preErrors.push(`Flow \"${flags.flow}\" is not defined in release.flows config`);\n }\n\n if (preErrors.length > 0) {\n ctx.ui.sideBox({\n title: 'Release — pre-flight failed',\n sections: [{ items: preErrors.map(e => `${ctx.ui.symbols.error} ${e}`) }],\n status: 'error',\n });\n return { exitCode: 1 };\n }\n }\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 // config.bump is already VersionBump | undefined — same type as bumpOverride\n bumpOverride: config.bump,\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 showPlanBox(ctx, flags, plan, config, dryRun);\n\n // 4. Confirm (skip with --yes or --dry-run)\n if (!skipYes) {\n const confirmed = await confirmRelease();\n if (!confirmed) {\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 const publisher = createPublisher(config, token, ctx);\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: resolveChecks(flags, config),\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 reportPipelineResult(ctx, flags, result, dryRun);\n\n return { exitCode: result.success ? 0 : 1, report: result.report };\n },\n },\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/shared/utils.ts","../../../src/rest/handlers/build-handler.ts"],"names":["findRepoRoot"],"mappings":"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","file":"build-handler.js","sourcesContent":["export { findRepoRoot } from '@kb-labs/sdk';\nexport { resolveScopePath } from './resolve-scope';\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 * Build handler — thin adapter over core buildPackages().\n */\n\nimport { defineHandler, findRepoRoot, type RestInput } from '@kb-labs/sdk';\nimport type { BuildRequest, BuildResponse } from '@kb-labs/release-manager-contracts';\nimport { buildPackages } from '@kb-labs/release-manager-core';\nimport { readFile, writeFile, mkdir } from 'node:fs/promises';\nimport { existsSync } from 'node:fs';\nimport { scopeToDir } from '../../shared/utils';\nimport { join } from 'node:path';\n\n// ── helpers ────────────────────────────────────────────────────────────────\n\nasync function copyChangelogToPackages(\n repoRoot: string,\n packages: Array<{ name: string; path: string }>,\n results: Array<{ name: string; success: boolean }>,\n changelogContent: string,\n): Promise<void> {\n for (const r of results) {\n if (!r.success) {\n break;\n }\n const pkg = packages.find(p => p.name === r.name);\n if (!pkg) {\n continue;\n }\n const pkgPath = pkg.path.startsWith('/') ? pkg.path : join(repoRoot, pkg.path);\n try {\n await writeFile(join(pkgPath, 'CHANGELOG.md'), changelogContent, 'utf-8');\n const distDir = join(pkgPath, 'dist');\n if (!existsSync(distDir)) {\n await mkdir(distDir, { recursive: true });\n }\n await writeFile(join(distDir, 'CHANGELOG.md'), changelogContent, 'utf-8');\n } catch { /* skip */ }\n }\n}\n\nexport default defineHandler({\n async execute(ctx, input: RestInput<unknown, BuildRequest>): Promise<BuildResponse> {\n const scope = input.body?.scope || 'root';\n const cwd = ctx.cwd ?? process.cwd();\n const repoRoot = await findRepoRoot(cwd);\n const startTime = Date.now();\n\n // Read plan\n const scopeDir = scopeToDir(scope);\n const planPath = join(repoRoot, '.kb/release/plans', scopeDir, 'current', 'plan.json');\n\n let plan: { packages: Array<{ name: string; path: string; currentVersion: string; nextVersion: string; bump: any }> };\n try {\n plan = JSON.parse(await readFile(planPath, 'utf-8'));\n } catch {\n return { scope, success: false, packages: [], builtCount: 0, totalCount: 0, totalDurationMs: Date.now() - startTime };\n }\n\n // Build via core\n const results = await buildPackages(plan.packages as any, { logger: ctx.platform?.logger });\n\n // Copy changelog if exists\n const changelogPath = join(repoRoot, '.kb/release/plans', scopeDir, 'current', 'changelog.md');\n let changelogContent: string | undefined;\n try { changelogContent = await readFile(changelogPath, 'utf-8'); } catch { /* skip */ }\n\n if (changelogContent) {\n await copyChangelogToPackages(repoRoot, plan.packages, results, changelogContent);\n }\n\n const builtCount = results.filter(r => r.success).length;\n return {\n scope,\n success: results.every(r => r.success),\n packages: results.map(r => ({ name: r.name, success: r.success, error: r.error, durationMs: r.durationMs })),\n builtCount,\n totalCount: plan.packages.length,\n totalDurationMs: Date.now() - startTime,\n };\n },\n});\n"]}
1
+ {"version":3,"sources":["../../../src/shared/utils.ts","../../../src/rest/handlers/build-handler.ts"],"names":["findRepoRoot"],"mappings":";;;;;;;AAMO,SAAS,WAAW,KAAA,EAAuB;AAChD,EAAA,OAAO,KAAA,CACJ,OAAA,CAAQ,IAAA,EAAM,EAAE,EAChB,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA,CAClB,QAAQ,IAAA,EAAM,GAAG,CAAA,CACjB,OAAA,CAAQ,OAAO,EAAE,CAAA;AACtB;ACEA,eAAe,uBAAA,CACb,QAAA,EACA,QAAA,EACA,OAAA,EACA,gBAAA,EACe;AACf,EAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,IAAA,IAAI,CAAC,EAAE,OAAA,EAAS;AACd,MAAA;AAAA,IACF;AACA,IAAA,MAAM,MAAM,QAAA,CAAS,IAAA,CAAK,OAAK,CAAA,CAAE,IAAA,KAAS,EAAE,IAAI,CAAA;AAChD,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA;AAAA,IACF;AACA,IAAA,MAAM,OAAA,GAAU,GAAA,CAAI,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,GAAI,GAAA,CAAI,IAAA,GAAO,IAAA,CAAK,QAAA,EAAU,GAAA,CAAI,IAAI,CAAA;AAC7E,IAAA,IAAI;AACF,MAAA,MAAM,UAAU,IAAA,CAAK,OAAA,EAAS,cAAc,CAAA,EAAG,kBAAkB,OAAO,CAAA;AACxE,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,OAAA,EAAS,MAAM,CAAA;AACpC,MAAA,IAAI,CAAC,UAAA,CAAW,OAAO,CAAA,EAAG;AACxB,QAAA,MAAM,KAAA,CAAM,OAAA,EAAS,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,MAC1C;AACA,MAAA,MAAM,UAAU,IAAA,CAAK,OAAA,EAAS,cAAc,CAAA,EAAG,kBAAkB,OAAO,CAAA;AAAA,IAC1E,CAAA,CAAA,MAAQ;AAAA,IAAa;AAAA,EACvB;AACF;AAEA,IAAO,wBAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CAAQ,GAAA,EAAK,KAAA,EAAiE;AAClF,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,EAAM,KAAA,IAAS,MAAA;AACnC,IAAA,MAAM,GAAA,GAAM,GAAA,CAAI,GAAA,IAAO,OAAA,CAAQ,GAAA,EAAI;AACnC,IAAA,MAAM,QAAA,GAAW,MAAMA,YAAAA,CAAa,GAAG,CAAA;AACvC,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAG3B,IAAA,MAAM,QAAA,GAAW,WAAW,KAAK,CAAA;AACjC,IAAA,MAAM,WAAW,IAAA,CAAK,QAAA,EAAU,mBAAA,EAAqB,QAAA,EAAU,WAAW,WAAW,CAAA;AAErF,IAAA,IAAI,IAAA;AACJ,IAAA,IAAI;AACF,MAAA,IAAA,GAAO,KAAK,KAAA,CAAM,MAAM,QAAA,CAAS,QAAA,EAAU,OAAO,CAAC,CAAA;AAAA,IACrD,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,UAAU,EAAC,EAAG,UAAA,EAAY,CAAA,EAAG,YAAY,CAAA,EAAG,eAAA,EAAiB,IAAA,CAAK,GAAA,KAAQ,SAAA,EAAU;AAAA,IACtH;AAGA,IAAA,MAAM,OAAA,GAAU,MAAM,aAAA,CAAc,IAAA,CAAK,QAAA,EAAyC,EAAE,MAAA,EAAQ,GAAA,CAAI,QAAA,EAAU,MAAA,EAAQ,CAAA;AAGlH,IAAA,MAAM,gBAAgB,IAAA,CAAK,QAAA,EAAU,mBAAA,EAAqB,QAAA,EAAU,WAAW,cAAc,CAAA;AAC7F,IAAA,IAAI,gBAAA;AACJ,IAAA,IAAI;AAAE,MAAA,gBAAA,GAAmB,MAAM,QAAA,CAAS,aAAA,EAAe,OAAO,CAAA;AAAA,IAAG,CAAA,CAAA,MAAQ;AAAA,IAAa;AAEtF,IAAA,IAAI,gBAAA,EAAkB;AACpB,MAAA,MAAM,uBAAA,CAAwB,QAAA,EAAU,IAAA,CAAK,QAAA,EAAU,SAAS,gBAAgB,CAAA;AAAA,IAClF;AAEA,IAAA,MAAM,aAAa,OAAA,CAAQ,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,OAAO,CAAA,CAAE,MAAA;AAClD,IAAA,OAAO;AAAA,MACL,KAAA;AAAA,MACA,OAAA,EAAS,OAAA,CAAQ,KAAA,CAAM,CAAA,CAAA,KAAK,EAAE,OAAO,CAAA;AAAA,MACrC,UAAU,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAA,MAAM,EAAE,MAAM,CAAA,CAAE,IAAA,EAAM,OAAA,EAAS,CAAA,CAAE,SAAS,KAAA,EAAO,CAAA,CAAE,OAAO,UAAA,EAAY,CAAA,CAAE,YAAW,CAAE,CAAA;AAAA,MAC3G,UAAA;AAAA,MACA,UAAA,EAAY,KAAK,QAAA,CAAS,MAAA;AAAA,MAC1B,eAAA,EAAiB,IAAA,CAAK,GAAA,EAAI,GAAI;AAAA,KAChC;AAAA,EACF;AACF,CAAC","file":"build-handler.js","sourcesContent":["export { findRepoRoot } from '@kb-labs/sdk';\nexport { resolveScopePath } from './resolve-scope';\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 * Build handler — thin adapter over core buildPackages().\n */\n\nimport { defineHandler, findRepoRoot, type RestInput } from '@kb-labs/sdk';\nimport type { BuildRequest, BuildResponse } from '@kb-labs/release-manager-contracts';\nimport { buildPackages, type PackageVersion } from '@kb-labs/release-manager-core';\nimport { readFile, writeFile, mkdir } from 'node:fs/promises';\nimport { existsSync } from 'node:fs';\nimport { scopeToDir } from '../../shared/utils';\nimport { join } from 'node:path';\n\n// ── helpers ────────────────────────────────────────────────────────────────\n\nasync function copyChangelogToPackages(\n repoRoot: string,\n packages: Array<{ name: string; path: string }>,\n results: Array<{ name: string; success: boolean }>,\n changelogContent: string,\n): Promise<void> {\n for (const r of results) {\n if (!r.success) {\n break;\n }\n const pkg = packages.find(p => p.name === r.name);\n if (!pkg) {\n continue;\n }\n const pkgPath = pkg.path.startsWith('/') ? pkg.path : join(repoRoot, pkg.path);\n try {\n await writeFile(join(pkgPath, 'CHANGELOG.md'), changelogContent, 'utf-8');\n const distDir = join(pkgPath, 'dist');\n if (!existsSync(distDir)) {\n await mkdir(distDir, { recursive: true });\n }\n await writeFile(join(distDir, 'CHANGELOG.md'), changelogContent, 'utf-8');\n } catch { /* skip */ }\n }\n}\n\nexport default defineHandler({\n async execute(ctx, input: RestInput<unknown, BuildRequest>): Promise<BuildResponse> {\n const scope = input.body?.scope || 'root';\n const cwd = ctx.cwd ?? process.cwd();\n const repoRoot = await findRepoRoot(cwd);\n const startTime = Date.now();\n\n // Read plan\n const scopeDir = scopeToDir(scope);\n const planPath = join(repoRoot, '.kb/release/plans', scopeDir, 'current', 'plan.json');\n\n let plan: { packages: Array<{ name: string; path: string; currentVersion: string; nextVersion: string; bump: unknown }> };\n try {\n plan = JSON.parse(await readFile(planPath, 'utf-8'));\n } catch {\n return { scope, success: false, packages: [], builtCount: 0, totalCount: 0, totalDurationMs: Date.now() - startTime };\n }\n\n // Build via core\n const results = await buildPackages(plan.packages as unknown as PackageVersion[], { logger: ctx.platform?.logger });\n\n // Copy changelog if exists\n const changelogPath = join(repoRoot, '.kb/release/plans', scopeDir, 'current', 'changelog.md');\n let changelogContent: string | undefined;\n try { changelogContent = await readFile(changelogPath, 'utf-8'); } catch { /* skip */ }\n\n if (changelogContent) {\n await copyChangelogToPackages(repoRoot, plan.packages, results, changelogContent);\n }\n\n const builtCount = results.filter(r => r.success).length;\n return {\n scope,\n success: results.every(r => r.success),\n packages: results.map(r => ({ name: r.name, success: r.success, error: r.error, durationMs: r.durationMs })),\n builtCount,\n totalCount: plan.packages.length,\n totalDurationMs: Date.now() - startTime,\n };\n },\n});\n"]}