@kb-labs/release-manager-cli 2.109.0 → 2.111.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/cli/commands/build.js +22 -6
  2. package/dist/cli/commands/build.js.map +1 -1
  3. package/dist/cli/commands/changelog.d.ts +8 -1
  4. package/dist/cli/commands/changelog.js +3 -4
  5. package/dist/cli/commands/changelog.js.map +1 -1
  6. package/dist/cli/commands/checks.js +3 -3
  7. package/dist/cli/commands/checks.js.map +1 -1
  8. package/dist/cli/commands/deliver.d.ts +18 -1
  9. package/dist/cli/commands/deliver.js +17 -14
  10. package/dist/cli/commands/deliver.js.map +1 -1
  11. package/dist/cli/commands/git.js +6 -4
  12. package/dist/cli/commands/git.js.map +1 -1
  13. package/dist/cli/commands/pack.js +3 -3
  14. package/dist/cli/commands/pack.js.map +1 -1
  15. package/dist/cli/commands/plan.js +1 -1
  16. package/dist/cli/commands/plan.js.map +1 -1
  17. package/dist/cli/commands/promote.js +7 -6
  18. package/dist/cli/commands/promote.js.map +1 -1
  19. package/dist/cli/commands/publish.js +7 -6
  20. package/dist/cli/commands/publish.js.map +1 -1
  21. package/dist/cli/commands/report.js +3 -3
  22. package/dist/cli/commands/report.js.map +1 -1
  23. package/dist/cli/commands/rollback.js +2 -2
  24. package/dist/cli/commands/rollback.js.map +1 -1
  25. package/dist/cli/commands/run.js +4 -4
  26. package/dist/cli/commands/run.js.map +1 -1
  27. package/dist/cli/commands/stage.d.ts +5 -1
  28. package/dist/cli/commands/stage.js +7 -6
  29. package/dist/cli/commands/stage.js.map +1 -1
  30. package/dist/cli/commands/verify.js +2 -2
  31. package/dist/cli/commands/verify.js.map +1 -1
  32. package/dist/cli/commands/version.js +3 -3
  33. package/dist/cli/commands/version.js.map +1 -1
  34. package/dist/index.js +2 -2
  35. package/dist/index.js.map +1 -1
  36. package/dist/manifest.js +2 -2
  37. package/dist/manifest.js.map +1 -1
  38. package/dist/manifest.json +2 -1
  39. package/dist/widgets/mf-manifest.json +12 -12
  40. package/dist/widgets/mf-stats.json +16 -16
  41. package/dist/widgets/remoteEntry.js +2 -2
  42. package/package.json +6 -6
@@ -1,5 +1,5 @@
1
1
  import { defineCommand, findRepoRoot, useConfig, useLoader } from '@kb-labs/sdk';
2
- import { planRelease, buildPackages } from '@kb-labs/release-manager-core';
2
+ import { planRelease, mergeConfigWithFlow, buildPackages } from '@kb-labs/release-manager-core';
3
3
 
4
4
  // src/cli/commands/build.ts
5
5
 
@@ -50,11 +50,27 @@ var build_default = defineCommand({
50
50
  ctx.ui?.write?.(msg);
51
51
  }
52
52
  console.log("::kb-output::" + JSON.stringify({ ok: true, failed: [] }));
53
- return { exitCode: 0, ok: true, failed: [], results: [] };
53
+ return { ok: true, result: { ok: true, failed: [], results: [] } };
54
54
  }
55
- const buildLoader = useLoader(`Building ${plan.packages.length} package(s)...`);
55
+ const effectiveConfig = flags.flow ? mergeConfigWithFlow(config, flags.flow) : config;
56
+ const buildScript = effectiveConfig.build?.script;
57
+ const buildLoader = useLoader(
58
+ buildScript ? `Running "pnpm run ${buildScript}"...` : `Building ${plan.packages.length} package(s)...`
59
+ );
56
60
  buildLoader.start();
57
- const results = await buildPackages(plan.packages, {
61
+ const results = buildScript ? await (async () => {
62
+ const startedAt = Date.now();
63
+ const execResult = await ctx.api.shell.exec("pnpm", ["run", buildScript], {
64
+ cwd: repoRoot,
65
+ timeout: 20 * 60 * 1e3
66
+ });
67
+ return [{
68
+ name: `pnpm run ${buildScript}`,
69
+ success: execResult.ok,
70
+ durationMs: Date.now() - startedAt,
71
+ error: execResult.ok ? void 0 : (execResult.stderr || execResult.stdout).trim().split("\n").slice(-30).join("\n")
72
+ }];
73
+ })() : await buildPackages(plan.packages, {
58
74
  logger: ctx.platform?.logger,
59
75
  onProgress: (name, result) => {
60
76
  ctx.platform?.logger?.info?.(`Built ${name}`, { ok: result.success, ms: result.durationMs });
@@ -70,14 +86,14 @@ var build_default = defineCommand({
70
86
  console.log("::kb-output::" + JSON.stringify({ ok, failed }));
71
87
  if (flags.json) {
72
88
  ctx.ui?.json?.({ ok, failed, results });
73
- return { exitCode: ok ? 0 : 1, ok, failed, results };
89
+ return ok ? { ok: true, result: { ok, failed, results } } : { ok: false, error: "Command failed", result: { ok, failed, results } };
74
90
  }
75
91
  ctx.ui?.sideBox?.({
76
92
  title: "Build Results",
77
93
  sections: buildSections(results, ctx.ui.symbols),
78
94
  status: ok ? "success" : "error"
79
95
  });
80
- return { exitCode: ok ? 0 : 1, ok, failed, results };
96
+ return ok ? { ok: true, result: { ok, failed, results } } : { ok: false, error: "Command failed", result: { ok, failed, results } };
81
97
  }
82
98
  }
83
99
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/cli/commands/build.ts"],"names":[],"mappings":"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","file":"build.js","sourcesContent":["/**\n * Release build command — build packages in plan using safe build strategy.\n * Atomic step: reads plan, builds, emits output marker for workflow.\n */\n\nimport { defineCommand, type CLIInput, type CommandResult, type PluginContextV3, useLoader, useConfig } from '@kb-labs/sdk';\nimport {\n planRelease,\n buildPackages,\n type ReleaseConfig,\n type BuildResult,\n} from '@kb-labs/release-manager-core';\nimport { findRepoRoot } from '../../shared/utils';\n\ninterface BuildFlags {\n scope?: string;\n flow?: string;\n json?: boolean;\n}\n\ntype ReleaseBuildResult = CommandResult & {\n ok?: boolean;\n failed?: string[];\n results?: BuildResult[];\n};\n\nfunction buildSections(\n results: BuildResult[],\n symbols: { success: string; error: string },\n): Array<{ header?: string; items: string[] }> {\n const sections: Array<{ header?: string; items: string[] }> = [];\n\n const passed = results.filter(r => r.success);\n const failed = results.filter(r => !r.success);\n\n if (passed.length > 0) {\n sections.push({\n header: 'Built',\n items: passed.map(r => `${symbols.success} ${r.name}${r.durationMs ? ` (${r.durationMs}ms)` : ''}`),\n });\n }\n\n if (failed.length > 0) {\n sections.push({\n header: 'Failed',\n items: failed.flatMap(r => {\n const lines = [`${symbols.error} ${r.name}`];\n if (r.error) { lines.push(` ${r.error.slice(0, 200)}`); }\n return lines;\n }),\n });\n }\n\n return sections;\n}\n\nexport default defineCommand({\n id: 'release:build',\n description: 'Build packages from release plan using safe build strategy',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<BuildFlags>): Promise<ReleaseBuildResult> {\n const { flags } = input;\n const cwd = ctx.cwd || process.cwd();\n const repoRoot = await findRepoRoot(cwd);\n\n const fileConfig = await useConfig<ReleaseConfig>();\n const config: ReleaseConfig = fileConfig ?? {};\n\n const planLoader = useLoader('Discovering packages...');\n planLoader.start();\n const plan = await planRelease({ cwd: repoRoot, config, scope: flags.scope, flow: flags.flow });\n planLoader.succeed(`Found ${plan.packages.length} package(s)`);\n\n if (plan.packages.length === 0) {\n const msg = `No packages found${flags.scope ? ` matching scope: ${flags.scope}` : ''}`;\n if (flags.json) { ctx.ui?.json?.({ ok: true, failed: [], results: [], message: msg }); }\n else { ctx.ui?.write?.(msg); }\n console.log('::kb-output::' + JSON.stringify({ ok: true, failed: [] }));\n return { exitCode: 0, ok: true, failed: [], results: [] };\n }\n\n const buildLoader = useLoader(`Building ${plan.packages.length} package(s)...`);\n buildLoader.start();\n\n const results = await buildPackages(plan.packages, {\n logger: ctx.platform?.logger,\n onProgress: (name, result) => {\n ctx.platform?.logger?.info?.(`Built ${name}`, { ok: result.success, ms: result.durationMs });\n },\n });\n\n const ok = results.every(r => r.success);\n const failed = results.filter(r => !r.success).map(r => r.name);\n\n if (ok) {\n buildLoader.succeed(`Built ${results.length} package(s)`);\n } else {\n buildLoader.fail(`${failed.length} package(s) failed to build`);\n }\n\n console.log('::kb-output::' + JSON.stringify({ ok, failed }));\n\n if (flags.json) {\n ctx.ui?.json?.({ ok, failed, results });\n return { exitCode: ok ? 0 : 1, ok, failed, results };\n }\n\n ctx.ui?.sideBox?.({\n title: 'Build Results',\n sections: buildSections(results, ctx.ui.symbols),\n status: ok ? 'success' : 'error',\n });\n\n return { exitCode: ok ? 0 : 1, ok, failed, results };\n },\n },\n});\n"]}
1
+ {"version":3,"sources":["../../../src/cli/commands/build.ts"],"names":[],"mappings":"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","file":"build.js","sourcesContent":["/**\n * Release build command — build packages in plan using safe build strategy.\n * Atomic step: reads plan, builds, emits output marker for workflow.\n */\n\nimport { defineCommand, type CLIInput, type CommandResult, type PluginContextV3, useLoader, useConfig } from '@kb-labs/sdk';\nimport {\n planRelease,\n buildPackages,\n mergeConfigWithFlow,\n type ReleaseConfig,\n type BuildResult,\n} from '@kb-labs/release-manager-core';\nimport { findRepoRoot } from '../../shared/utils';\n\ninterface BuildFlags {\n scope?: string;\n flow?: string;\n json?: boolean;\n}\n\ntype ReleaseBuildResult = CommandResult<unknown>;\n\nfunction buildSections(\n results: BuildResult[],\n symbols: { success: string; error: string },\n): Array<{ header?: string; items: string[] }> {\n const sections: Array<{ header?: string; items: string[] }> = [];\n\n const passed = results.filter(r => r.success);\n const failed = results.filter(r => !r.success);\n\n if (passed.length > 0) {\n sections.push({\n header: 'Built',\n items: passed.map(r => `${symbols.success} ${r.name}${r.durationMs ? ` (${r.durationMs}ms)` : ''}`),\n });\n }\n\n if (failed.length > 0) {\n sections.push({\n header: 'Failed',\n items: failed.flatMap(r => {\n const lines = [`${symbols.error} ${r.name}`];\n if (r.error) { lines.push(` ${r.error.slice(0, 200)}`); }\n return lines;\n }),\n });\n }\n\n return sections;\n}\n\nexport default defineCommand({\n id: 'release:build',\n description: 'Build packages from release plan using safe build strategy',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<BuildFlags>): Promise<ReleaseBuildResult> {\n const { flags } = input;\n const cwd = ctx.cwd || process.cwd();\n const repoRoot = await findRepoRoot(cwd);\n\n const fileConfig = await useConfig<ReleaseConfig>();\n const config: ReleaseConfig = fileConfig ?? {};\n\n const planLoader = useLoader('Discovering packages...');\n planLoader.start();\n const plan = await planRelease({ cwd: repoRoot, config, scope: flags.scope, flow: flags.flow });\n planLoader.succeed(`Found ${plan.packages.length} package(s)`);\n\n if (plan.packages.length === 0) {\n const msg = `No packages found${flags.scope ? ` matching scope: ${flags.scope}` : ''}`;\n if (flags.json) { ctx.ui?.json?.({ ok: true, failed: [], results: [], message: msg }); }\n else { ctx.ui?.write?.(msg); }\n console.log('::kb-output::' + JSON.stringify({ ok: true, failed: [] }));\n return { ok: true, result: { ok: true, failed: [], results: [] } };\n }\n\n const effectiveConfig = flags.flow ? mergeConfigWithFlow(config, flags.flow) : config;\n const buildScript = effectiveConfig.build?.script;\n\n const buildLoader = useLoader(\n buildScript\n ? `Running \"pnpm run ${buildScript}\"...`\n : `Building ${plan.packages.length} package(s)...`,\n );\n buildLoader.start();\n\n const results: BuildResult[] = buildScript\n ? await (async () => {\n const startedAt = Date.now();\n const execResult = await ctx.api.shell.exec('pnpm', ['run', buildScript], {\n cwd: repoRoot,\n timeout: 20 * 60 * 1000,\n });\n return [{\n name: `pnpm run ${buildScript}`,\n success: execResult.ok,\n durationMs: Date.now() - startedAt,\n error: execResult.ok ? undefined : (execResult.stderr || execResult.stdout).trim().split('\\n').slice(-30).join('\\n'),\n }];\n })()\n : await buildPackages(plan.packages, {\n logger: ctx.platform?.logger,\n onProgress: (name, result) => {\n ctx.platform?.logger?.info?.(`Built ${name}`, { ok: result.success, ms: result.durationMs });\n },\n });\n\n const ok = results.every(r => r.success);\n const failed = results.filter(r => !r.success).map(r => r.name);\n\n if (ok) {\n buildLoader.succeed(`Built ${results.length} package(s)`);\n } else {\n buildLoader.fail(`${failed.length} package(s) failed to build`);\n }\n\n console.log('::kb-output::' + JSON.stringify({ ok, failed }));\n\n if (flags.json) {\n ctx.ui?.json?.({ ok, failed, results });\n return ok ? { ok: true, result: { ok, failed, results } } : { ok: false, error: 'Command failed', result: { ok, failed, results } };\n }\n\n ctx.ui?.sideBox?.({\n title: 'Build Results',\n sections: buildSections(results, ctx.ui.symbols),\n status: ok ? 'success' : 'error',\n });\n\n return ok ? { ok: true, result: { ok, failed, results } } : { ok: false, error: 'Command failed', result: { ok, failed, results } };\n },\n },\n});\n"]}
@@ -13,6 +13,13 @@ interface ChangelogFlags {
13
13
  'breaking-only'?: boolean;
14
14
  json?: boolean;
15
15
  }
16
- declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<ChangelogFlags>, unknown>;
16
+ interface ChangelogPayload {
17
+ artifacts?: Array<{
18
+ name: string;
19
+ path: string;
20
+ size: number;
21
+ }>;
22
+ }
23
+ declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<ChangelogFlags>, ChangelogPayload>;
17
24
 
18
25
  export { _default as default };
@@ -126,7 +126,7 @@ var changelog_default = defineCommand({
126
126
  const plan = await planRelease({ cwd: repoRoot, config, scope: flags.scope, flow: flags.flow });
127
127
  if (plan.packages.length === 0) {
128
128
  loader.fail(`No packages found matching scope: ${flags.scope || "all"}`);
129
- return { exitCode: 1 };
129
+ return { ok: false, error: "Command failed" };
130
130
  }
131
131
  const gitCwd = await resolveGitCwd(flags.scope, plan.packages, repoRoot);
132
132
  loader.update({ text: "Generating changelog..." });
@@ -167,10 +167,9 @@ var changelog_default = defineCommand({
167
167
  status: "success"
168
168
  });
169
169
  }
170
- return {
171
- exitCode: 0,
170
+ return { ok: true, result: {
172
171
  artifacts: artifacts.map((a) => ({ name: a.name, path: a.path, size: a.size ?? 0 }))
173
- };
172
+ } };
174
173
  }
175
174
  }
176
175
  });
@@ -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';\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"]}
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, type CommandResult } 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 ChangelogPayload {\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<CommandResult<ChangelogPayload>> {\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 { ok: false, error: 'Command failed' };\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 { ok: true, result: {\n artifacts: artifacts.map(a => ({ name: a.name, path: a.path, size: a.size ?? 0 })),\n } };\n },\n },\n});\n"]}
@@ -50,7 +50,7 @@ var checks_default = defineCommand({
50
50
  ctx.ui?.write?.(msg);
51
51
  }
52
52
  console.log("::kb-output::" + JSON.stringify({ ok: true, failed: [] }));
53
- return { exitCode: 0, ok: true, failed: [], results: [] };
53
+ return { ok: true, result: { ok: true, failed: [], results: [] } };
54
54
  }
55
55
  const planLoader = useLoader("Discovering packages...");
56
56
  planLoader.start();
@@ -76,14 +76,14 @@ var checks_default = defineCommand({
76
76
  console.log("::kb-output::" + JSON.stringify({ ok, failed }));
77
77
  if (flags.json) {
78
78
  ctx.ui?.json?.({ ok, failed, results });
79
- return { exitCode: ok ? 0 : 1, ok, failed, results };
79
+ return ok ? { ok: true, result: { ok, failed, results } } : { ok: false, error: "Command failed", result: { ok, failed, results } };
80
80
  }
81
81
  ctx.ui?.sideBox?.({
82
82
  title: "Pre-release Checks",
83
83
  sections: buildChecksSections(results, ctx.ui.symbols),
84
84
  status: ok ? "success" : "error"
85
85
  });
86
- return { exitCode: ok ? 0 : 1, ok, failed, results };
86
+ return ok ? { ok: true, result: { ok, failed, results } } : { ok: false, error: "Command failed", result: { ok, failed, results } };
87
87
  }
88
88
  }
89
89
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/cli/commands/checks.ts"],"names":[],"mappings":"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","file":"checks.js","sourcesContent":["/**\n * Release checks command — run pre-release checks from config.\n * Atomic step: reads plan, runs checks, emits output marker for workflow.\n */\n\nimport { defineCommand, type CLIInput, type CommandResult, type PluginContextV3, useLoader, useConfig } from '@kb-labs/sdk';\nimport {\n planRelease,\n runReleaseChecks,\n resolveScopePath,\n type ReleaseConfig,\n type CheckResult,\n} from '@kb-labs/release-manager-core';\nimport { findRepoRoot } from '../../shared/utils';\n\ninterface ChecksFlags {\n scope?: string;\n flow?: string;\n json?: boolean;\n}\n\ntype ReleaseChecksResult = CommandResult & {\n ok?: boolean;\n failed?: string[];\n results?: CheckResult[];\n};\n\nfunction buildChecksSections(\n results: CheckResult[],\n symbols: { success: string; error: string; warning: string },\n): Array<{ header?: string; items: string[] }> {\n const sections: Array<{ header?: string; items: string[] }> = [];\n\n const passed = results.filter(r => r.ok);\n const failed = results.filter(r => !r.ok);\n\n if (passed.length > 0) {\n sections.push({\n header: 'Passed',\n items: passed.map(r => `${symbols.success} ${r.id}${r.timingMs ? ` (${r.timingMs}ms)` : ''}`),\n });\n }\n\n if (failed.length > 0) {\n sections.push({\n header: 'Failed',\n items: failed.flatMap(r => {\n const lines = [`${symbols.error} ${r.id}`];\n if (r.details?.stderr) { lines.push(` ${r.details.stderr.slice(0, 120)}`); }\n if (r.hint) { lines.push(` Hint: ${r.hint}`); }\n return lines;\n }),\n });\n }\n\n return sections;\n}\n\nexport default defineCommand({\n id: 'release:checks',\n description: 'Run pre-release checks from release config',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<ChecksFlags>): Promise<ReleaseChecksResult> {\n const { flags } = input;\n const cwd = ctx.cwd || process.cwd();\n const repoRoot = await findRepoRoot(cwd);\n\n const fileConfig = await useConfig<ReleaseConfig>();\n const config: ReleaseConfig = fileConfig ?? {};\n const checks = config.checks ?? [];\n\n if (checks.length === 0) {\n const msg = 'No checks configured in release config';\n if (flags.json) {\n ctx.ui?.json?.({ ok: true, failed: [], results: [], message: msg });\n } else {\n ctx.ui?.write?.(msg);\n }\n console.log('::kb-output::' + JSON.stringify({ ok: true, failed: [] }));\n return { exitCode: 0, ok: true, failed: [], results: [] };\n }\n\n const planLoader = useLoader('Discovering packages...');\n planLoader.start();\n const plan = await planRelease({ cwd: repoRoot, config, scope: flags.scope, flow: flags.flow });\n planLoader.succeed(`Found ${plan.packages.length} package(s)`);\n\n const scopePath = await resolveScopePath(repoRoot, flags.scope ?? 'root');\n const packagePaths = plan.packages.map(p => p.path);\n\n const checksLoader = useLoader(`Running ${checks.length} check(s)...`);\n checksLoader.start();\n\n const results = await runReleaseChecks(checks, {\n repoRoot,\n packagePaths,\n scopePath,\n logger: ctx.platform?.logger,\n });\n\n const ok = results.every(r => r.ok);\n const failed = results.filter(r => !r.ok).map(r => r.id);\n\n if (ok) {\n checksLoader.succeed(`All ${results.length} check(s) passed`);\n } else {\n checksLoader.fail(`${failed.length} check(s) failed`);\n }\n\n console.log('::kb-output::' + JSON.stringify({ ok, failed }));\n\n if (flags.json) {\n ctx.ui?.json?.({ ok, failed, results });\n return { exitCode: ok ? 0 : 1, ok, failed, results };\n }\n\n ctx.ui?.sideBox?.({\n title: 'Pre-release Checks',\n sections: buildChecksSections(results, ctx.ui.symbols),\n status: ok ? 'success' : 'error',\n });\n\n return { exitCode: ok ? 0 : 1, ok, failed, results };\n },\n },\n});\n"]}
1
+ {"version":3,"sources":["../../../src/cli/commands/checks.ts"],"names":[],"mappings":"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","file":"checks.js","sourcesContent":["/**\n * Release checks command — run pre-release checks from config.\n * Atomic step: reads plan, runs checks, emits output marker for workflow.\n */\n\nimport { defineCommand, type CLIInput, type CommandResult, type PluginContextV3, useLoader, useConfig } from '@kb-labs/sdk';\nimport {\n planRelease,\n runReleaseChecks,\n resolveScopePath,\n type ReleaseConfig,\n type CheckResult,\n} from '@kb-labs/release-manager-core';\nimport { findRepoRoot } from '../../shared/utils';\n\ninterface ChecksFlags {\n scope?: string;\n flow?: string;\n json?: boolean;\n}\n\ntype ReleaseChecksResult = CommandResult<unknown>;\n\nfunction buildChecksSections(\n results: CheckResult[],\n symbols: { success: string; error: string; warning: string },\n): Array<{ header?: string; items: string[] }> {\n const sections: Array<{ header?: string; items: string[] }> = [];\n\n const passed = results.filter(r => r.ok);\n const failed = results.filter(r => !r.ok);\n\n if (passed.length > 0) {\n sections.push({\n header: 'Passed',\n items: passed.map(r => `${symbols.success} ${r.id}${r.timingMs ? ` (${r.timingMs}ms)` : ''}`),\n });\n }\n\n if (failed.length > 0) {\n sections.push({\n header: 'Failed',\n items: failed.flatMap(r => {\n const lines = [`${symbols.error} ${r.id}`];\n if (r.details?.stderr) { lines.push(` ${r.details.stderr.slice(0, 120)}`); }\n if (r.hint) { lines.push(` Hint: ${r.hint}`); }\n return lines;\n }),\n });\n }\n\n return sections;\n}\n\nexport default defineCommand({\n id: 'release:checks',\n description: 'Run pre-release checks from release config',\n\n handler: {\n async execute(ctx: PluginContextV3, input: CLIInput<ChecksFlags>): Promise<ReleaseChecksResult> {\n const { flags } = input;\n const cwd = ctx.cwd || process.cwd();\n const repoRoot = await findRepoRoot(cwd);\n\n const fileConfig = await useConfig<ReleaseConfig>();\n const config: ReleaseConfig = fileConfig ?? {};\n const checks = config.checks ?? [];\n\n if (checks.length === 0) {\n const msg = 'No checks configured in release config';\n if (flags.json) {\n ctx.ui?.json?.({ ok: true, failed: [], results: [], message: msg });\n } else {\n ctx.ui?.write?.(msg);\n }\n console.log('::kb-output::' + JSON.stringify({ ok: true, failed: [] }));\n return { ok: true, result: { ok: true, failed: [], results: [] } };\n }\n\n const planLoader = useLoader('Discovering packages...');\n planLoader.start();\n const plan = await planRelease({ cwd: repoRoot, config, scope: flags.scope, flow: flags.flow });\n planLoader.succeed(`Found ${plan.packages.length} package(s)`);\n\n const scopePath = await resolveScopePath(repoRoot, flags.scope ?? 'root');\n const packagePaths = plan.packages.map(p => p.path);\n\n const checksLoader = useLoader(`Running ${checks.length} check(s)...`);\n checksLoader.start();\n\n const results = await runReleaseChecks(checks, {\n repoRoot,\n packagePaths,\n scopePath,\n logger: ctx.platform?.logger,\n });\n\n const ok = results.every(r => r.ok);\n const failed = results.filter(r => !r.ok).map(r => r.id);\n\n if (ok) {\n checksLoader.succeed(`All ${results.length} check(s) passed`);\n } else {\n checksLoader.fail(`${failed.length} check(s) failed`);\n }\n\n console.log('::kb-output::' + JSON.stringify({ ok, failed }));\n\n if (flags.json) {\n ctx.ui?.json?.({ ok, failed, results });\n return ok ? { ok: true, result: { ok, failed, results } } : { ok: false, error: 'Command failed', result: { ok, failed, results } };\n }\n\n ctx.ui?.sideBox?.({\n title: 'Pre-release Checks',\n sections: buildChecksSections(results, ctx.ui.symbols),\n status: ok ? 'success' : 'error',\n });\n\n return ok ? { ok: true, result: { ok, failed, results } } : { ok: false, error: 'Command failed', result: { ok, failed, results } };\n },\n },\n});\n"]}
@@ -13,6 +13,23 @@ interface DeliverFlags extends FlowResolvableFlags {
13
13
  'dry-run'?: boolean;
14
14
  json?: boolean;
15
15
  }
16
- declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<DeliverFlags>, unknown>;
16
+ interface DeliverFailure {
17
+ name: string;
18
+ version: string;
19
+ error: string;
20
+ errorCode?: string;
21
+ errorHint?: string;
22
+ }
23
+ interface DeliverPayload {
24
+ success: boolean;
25
+ target?: string;
26
+ published?: Array<{
27
+ name: string;
28
+ version: string;
29
+ }>;
30
+ failed?: DeliverFailure[];
31
+ verifyIssues?: string[];
32
+ }
33
+ declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, CLIInput<DeliverFlags>, DeliverPayload>;
17
34
 
18
35
  export { _default as default };
@@ -455,7 +455,7 @@ var deliver_default = defineCommand({
455
455
  } else {
456
456
  ctx.ui?.error?.(msg);
457
457
  }
458
- return { exitCode: 1 };
458
+ return { ok: false, error: "Command failed" };
459
459
  }
460
460
  const cwd = ctx.cwd || process.cwd();
461
461
  const repoRoot = await findRepoRoot(cwd);
@@ -469,7 +469,7 @@ var deliver_default = defineCommand({
469
469
  } else {
470
470
  ctx.ui?.error?.(msg);
471
471
  }
472
- return { exitCode: 1 };
472
+ return { ok: false, error: "Command failed" };
473
473
  }
474
474
  const config = mergeConfigWithFlow(baseConfig, flowResult);
475
475
  const artifactsDir = join(repoRoot, flags["artifacts-dir"] ?? ".kb/release/artifacts");
@@ -480,7 +480,7 @@ var deliver_default = defineCommand({
480
480
  } else {
481
481
  ctx.ui?.error?.(manifest.error);
482
482
  }
483
- return { exitCode: 1 };
483
+ return { ok: false, error: "Command failed" };
484
484
  }
485
485
  if (manifest.length === 0) {
486
486
  const msg = `manifest.json at ${artifactsDir} lists no packages`;
@@ -489,7 +489,7 @@ var deliver_default = defineCommand({
489
489
  } else {
490
490
  ctx.ui?.error?.(msg);
491
491
  }
492
- return { exitCode: 1 };
492
+ return { ok: false, error: "Command failed" };
493
493
  }
494
494
  const dryRun = flags["dry-run"];
495
495
  const npmTag = flags.tag ?? resolvePublishTag(config, "stable");
@@ -524,10 +524,11 @@ var deliver_default = defineCommand({
524
524
  errorCode: r.errorCode,
525
525
  errorHint: r.errorHint
526
526
  }));
527
- const result2 = { exitCode: 1, target, published: publishedList, failed: failedList };
527
+ const result2 = { success: false, target, published: publishedList, failed: failedList };
528
528
  writeGithubStepSummary(buildFailureSummaryMarkdown(target, publishedList.length, failedList));
529
+ const response = { ok: false, error: "Delivery failed", result: result2 };
529
530
  if (flags.json) {
530
- ctx.ui?.json?.(result2);
531
+ ctx.ui?.json?.(response);
531
532
  } else {
532
533
  ctx.ui?.sideBox?.({
533
534
  title: "Deliver \u2014 npm",
@@ -538,15 +539,16 @@ var deliver_default = defineCommand({
538
539
  status: "error"
539
540
  });
540
541
  }
541
- return result2;
542
+ return response;
542
543
  }
543
544
  publishLoader.succeed(`Delivered ${publishResult.results.length} package(s) to npm`);
544
545
  if (dryRun) {
545
- const result2 = { exitCode: 0, target, published: publishResult.results.map((r) => ({ name: r.name, version: r.version })) };
546
+ const result2 = { success: true, target, published: publishResult.results.map((r) => ({ name: r.name, version: r.version })) };
547
+ const response = { ok: true, result: result2 };
546
548
  if (flags.json) {
547
- ctx.ui?.json?.(result2);
549
+ ctx.ui?.json?.(response);
548
550
  }
549
- return result2;
551
+ return response;
550
552
  }
551
553
  const verifyLoader = useLoader("Verifying delivery against the registry...");
552
554
  verifyLoader.start();
@@ -558,7 +560,7 @@ var deliver_default = defineCommand({
558
560
  });
559
561
  const verifyIssues = verifyResults.flatMap((r) => r.issues);
560
562
  const result = {
561
- exitCode: verifyIssues.length === 0 ? 0 : 1,
563
+ success: verifyIssues.length === 0,
562
564
  target,
563
565
  published: publishResult.results.map((r) => ({ name: r.name, version: r.version })),
564
566
  verifyIssues
@@ -576,8 +578,9 @@ var deliver_default = defineCommand({
576
578
  verifyLoader.succeed("Delivery verified against the registry");
577
579
  }
578
580
  if (flags.json) {
579
- ctx.ui?.json?.(result);
580
- return result;
581
+ const response = verifyIssues.length === 0 ? { ok: true, result } : { ok: false, error: "Delivery verification failed", result };
582
+ ctx.ui?.json?.(response);
583
+ return response;
581
584
  }
582
585
  ctx.ui?.sideBox?.({
583
586
  title: "Deliver \u2014 npm",
@@ -587,7 +590,7 @@ var deliver_default = defineCommand({
587
590
  ],
588
591
  status: verifyIssues.length === 0 ? "success" : "error"
589
592
  });
590
- return result;
593
+ return verifyIssues.length === 0 ? { ok: true, result } : { ok: false, error: "Delivery verification failed", result };
591
594
  }
592
595
  }
593
596
  });