@kb-labs/release-manager-cli 2.118.2 → 2.119.0-canary.0b1ec4151

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 (39) hide show
  1. package/dist/cli/commands/changelog.js +13 -3
  2. package/dist/cli/commands/changelog.js.map +1 -1
  3. package/dist/cli/commands/run.js +6 -2
  4. package/dist/cli/commands/run.js.map +1 -1
  5. package/dist/index.js +14 -4
  6. package/dist/index.js.map +1 -1
  7. package/dist/manifest.js +14 -4
  8. package/dist/manifest.js.map +1 -1
  9. package/dist/manifest.json +13 -2
  10. package/dist/rest/handlers/changelog-generate-handler.d.ts +1 -0
  11. package/dist/rest/handlers/changelog-generate-handler.js +15 -8
  12. package/dist/rest/handlers/changelog-generate-handler.js.map +1 -1
  13. package/dist/rest/handlers/generate-handler.d.ts +1 -0
  14. package/dist/rest/handlers/history-changelog-handler.js +4 -3
  15. package/dist/rest/handlers/history-changelog-handler.js.map +1 -1
  16. package/dist/rest/handlers/history-handler.d.ts +2 -0
  17. package/dist/rest/handlers/history-handler.js +3 -1
  18. package/dist/rest/handlers/history-handler.js.map +1 -1
  19. package/dist/rest/handlers/history-plan-handler.d.ts +1 -0
  20. package/dist/rest/handlers/history-plan-handler.js +12 -3
  21. package/dist/rest/handlers/history-plan-handler.js.map +1 -1
  22. package/dist/rest/handlers/history-report-handler.d.ts +1 -0
  23. package/dist/rest/handlers/plan-handler.d.ts +1 -0
  24. package/dist/rest/handlers/report-handler.d.ts +1 -0
  25. package/dist/rest/handlers/run-handler.d.ts +2 -1
  26. package/dist/rest/handlers/run-handler.js +6 -2
  27. package/dist/rest/handlers/run-handler.js.map +1 -1
  28. package/dist/widgets/117.js +10 -3
  29. package/dist/widgets/46.js +19 -19
  30. package/dist/widgets/648.js +1 -1
  31. package/dist/widgets/78.js +1 -1
  32. package/dist/widgets/832.js +96 -0
  33. package/dist/widgets/875.js +3 -3
  34. package/dist/widgets/__federation_expose_ReleasePage.js +1 -1
  35. package/dist/widgets/mf-manifest.json +7 -7
  36. package/dist/widgets/mf-stats.json +7 -7
  37. package/dist/widgets/remoteEntry.js +7 -7
  38. package/package.json +8 -8
  39. package/dist/widgets/62.js +0 -96
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/manifest.ts"],"names":[],"mappings":"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","file":"manifest.js","sourcesContent":["/**\n * KB Labs Release Manager - Manifest V3\n *\n * Migration from V2 to V3 following best practices from V3-MIGRATION-GUIDE.md\n *\n * Key changes:\n * - Schema: kb.plugin/3\n * - Commands use handler#default suffix\n * - Commands have handlerPath field\n * - Permissions moved to manifest level\n * - All imports from @kb-labs/sdk\n */\n\nimport {\n defineCommandFlags,\n combinePermissions,\n gitWorkflowPreset,\n kbPlatformPreset,\n npmPublishPreset,\n ciEnvironmentPreset,\n} from '@kb-labs/sdk';\nimport {\n RELEASE_BASE_PATH,\n RELEASE_ROUTES,\n RELEASE_CACHE_PREFIX,\n} from '@kb-labs/release-manager-contracts';\nimport { CHECKS_CONCURRENCY } from '@kb-labs/release-manager-core';\n\n/**\n * Build permissions using presets:\n * - gitWorkflow: HOME, USER, GIT_*, SSH_* for git/changelog operations\n * - kbPlatform: KB_* env vars and .kb/ directory\n * - npmPublish: NPM_TOKEN, npm registry access for publishing\n * - ciEnvironment: CI, GITHUB_TOKEN for CI/CD integrations\n * - Custom: KB_RELEASE_*, additional fs paths\n */\nconst pluginPermissions = combinePermissions()\n .with(gitWorkflowPreset)\n .with(kbPlatformPreset)\n .with(npmPublishPreset)\n .with(ciEnvironmentPreset)\n .withEnv(['KB_RELEASE_*', 'NODE_ENV'])\n .withFs({\n mode: 'readWrite',\n allow: [\n '.kb/release/**',\n 'package.json',\n '**/package.json',\n 'pnpm-workspace.yaml',\n '**/*.yml',\n '**/*.yaml',\n 'CHANGELOG.md',\n '**/CHANGELOG.md',\n ],\n // Note: deny patterns (*.key, *.secret, node_modules) are enforced by platform\n })\n .withShell({\n allow: ['bash', 'git', 'npm', 'npx', 'pnpm'], // release gates/builds plus git, npm publishing, and configurable pnpm scripts\n // Must match CHECKS_CONCURRENCY (manager-core/src/checks.ts): the process\n // broker grants at most this many concurrent shells per plugin, so a lower\n // value here throttles perPackage check batches to 1-at-a-time and can\n // blow their timeout; a higher value defeats the plugin's own batching.\n maxConcurrent: CHECKS_CONCURRENCY,\n })\n .withPlatform({\n cache: [RELEASE_CACHE_PREFIX], // Cache namespace prefix for plan/changelog caching\n llm: true, // LLM for changelog generation\n analytics: true, // Track release events\n })\n .withQuotas({\n timeoutMs: 1800000, // 30 min for complex releases (148 packages)\n memoryMb: 2048,\n cpuMs: 300000, // 5 min CPU time\n })\n .build();\n\nexport const manifest = {\n schema: 'kb.plugin/3',\n id: '@kb-labs/release',\n version: '0.1.0',\n\n display: {\n name: 'Release Manager',\n description: 'Plan, execute, and audit releases across your workspace',\n tags: ['release', 'publish', 'versioning'],\n },\n\n // Platform requirements\n platform: {\n requires: ['storage', 'cache'], // cache required for plan/changelog caching\n optional: ['llm', 'analytics', 'logger'],\n },\n\n // Setup handler - V3 pattern\n setup: {\n handler: './setup/handler.js#default',\n describe: 'Prepare the .kb/release workspace (plans, reports, backups).',\n },\n\n // CLI commands - V3 format\n cli: {\n groupMeta: [\n { path: 'release', describe: 'Release management commands' },\n ],\n commands: [\n // release:plan - Analyze changes and prepare release plan\n {\n path: 'release plan',\n category: 'Pipeline',\n describe: 'Analyze changes and prepare release plan',\n operationType: 'analyze' as const,\n longDescription: 'Detect modified packages and compute version bumps based on changes',\n\n handler: './cli/commands/plan.js#default',\n\n flags: defineCommandFlags({\n scope: { type: 'string', description: 'Package scope (glob pattern)' },\n flow: { type: 'string', description: 'Named release flow from release.flows' },\n bump: {\n type: 'string',\n choices: ['patch', 'minor', 'major', 'auto'] as const,\n default: 'auto',\n description: 'Version bump strategy',\n },\n channel: {\n type: 'string',\n choices: ['stable', 'canary'] as const,\n default: 'stable',\n description: 'Release channel — canary previews the -canary.<shortsha> version shape',\n },\n json: { type: 'boolean', description: 'Print plan as JSON' },\n }),\n\n examples: [\n 'kb release plan',\n 'kb release plan --scope packages/*',\n 'kb release plan --bump minor',\n 'kb release plan --channel canary',\n 'kb release plan --json',\n ],\n },\n\n // release:run - Execute release process\n {\n path: 'release run',\n category: 'Pipeline',\n describe: 'Execute release process (plan, check, publish)',\n operationType: 'execute' as const,\n longDescription: 'Run full release: plan versions, run checks, publish packages',\n\n handler: './cli/commands/run.js#default',\n\n flags: defineCommandFlags({\n scope: { type: 'string', description: 'Package scope or glob pattern (e.g. @my-org/core, packages/*)' },\n bump: {\n type: 'string',\n choices: ['patch', 'minor', 'major', 'auto'] as const,\n default: 'auto',\n description: 'Version bump override (default: auto-detect from commits)',\n },\n strict: { type: 'boolean', description: 'Fail on any check failure' },\n channel: {\n type: 'string',\n choices: ['stable', 'canary'] as const,\n default: 'stable',\n description: 'Release channel — canary publishes straight to npm under a prerelease tag, no git commit/tag',\n },\n 'dry-run': { type: 'boolean', description: 'Simulate release without publishing or tagging' },\n 'skip-checks': { type: 'boolean', description: 'Skip pre-release checks' },\n 'skip-build': { type: 'boolean', description: 'Skip build step' },\n 'skip-verify': { type: 'boolean', description: 'Skip artifact verification (npm pack check)' },\n 'skip-publish': {\n type: 'boolean',\n description: 'Prepare-only: build, version, changelog, git commit/tag — never publish to npm. No npm credentials required. Pair with a tag-triggered CI job running `kb release promote`.',\n },\n 'no-verify': { type: 'boolean', description: 'Pass --no-verify to git push (bypasses pre-push hooks)' },\n yes: { type: 'boolean', description: 'Skip confirmation prompt — for CI/headless mode' },\n json: { type: 'boolean', description: 'Print result as JSON' },\n }),\n\n examples: [\n 'kb release run',\n 'kb release run --dry-run',\n 'kb release run --yes',\n 'kb release run --yes --no-verify',\n 'kb release run --bump minor --yes',\n 'kb release run --scope @my-org/core',\n 'kb release run --skip-checks --skip-build',\n 'kb release run --strict --json',\n 'kb release run --channel canary --yes',\n 'kb release run --flow platform --skip-publish --yes',\n ],\n },\n\n // release:publish - Publish packages to npm\n {\n path: 'release publish',\n category: 'Publish',\n describe: 'Publish packages to npm registry',\n operationType: 'execute' as const,\n longDescription: 'Smart npm publish with interactive 2FA support and better UX',\n\n handler: './cli/commands/publish.js#default',\n\n flags: defineCommandFlags({\n scope: { type: 'string', description: 'Package scope (glob pattern)' },\n otp: { type: 'string', description: 'One-time password (optional, will prompt if needed)' },\n 'dry-run': { type: 'boolean', description: 'Simulate publish without actually publishing' },\n tag: { type: 'string', description: 'NPM dist-tag (default: latest)' },\n access: {\n type: 'string',\n choices: ['public', 'restricted'] as const,\n description: 'Package access level',\n },\n token: { type: 'string', description: 'NPM auth token (overrides NPM_TOKEN env)' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n }),\n\n examples: [\n 'kb release publish',\n 'kb release publish --scope @kb-labs/core',\n 'kb release publish --otp 123456',\n 'kb release publish --dry-run',\n 'kb release publish --tag next --access public',\n ],\n },\n\n // release:stage - Pack the currently-committed versions into real tarballs, once\n {\n path: 'release stage',\n category: 'Publish',\n describe: 'Pack the currently-committed package versions for a flow into real npm tarballs, once, for `release deliver` to ship',\n operationType: 'execute' as const,\n longDescription:\n 'Produces the actual npm tarball artifacts for a flow\\'s already-committed package.json versions ' +\n '— no re-bump, no rebuild. Writes a manifest.json (name/version/tarball/sha256) alongside the tarballs. ' +\n 'Intended to run once in CI right after checking out a release tag; every `release deliver` target then ' +\n 'ships these exact bytes instead of re-packing independently. Not the same command as `release pack` ' +\n '(that one verifies proposed packages before a release is decided; this one packs an already-decided one).',\n\n handler: './cli/commands/stage.js#default',\n\n flags: defineCommandFlags({\n 'release-tag': { type: 'string', description: 'Git tag to resolve {flow, channel} from (via release.flows[*].tagPattern) — alternative to --flow' },\n flow: { type: 'string', description: 'Named flow — selects packages the same way `release run --flow` does (e.g. excludes sdk from platform)' },\n 'out-dir': { type: 'string', description: 'Output directory for tarballs + manifest.json (default: .kb/release/artifacts)' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n }),\n\n examples: [\n 'kb release stage --flow platform',\n 'kb release stage --release-tag platform-v2.105.0',\n 'kb release stage --flow sdk --out-dir .kb/release/artifacts',\n ],\n },\n\n // release:clean-install - Shared install-verification used by both\n // check-pack-install.sh and `release stage`\n {\n path: 'release clean install',\n category: 'Publish',\n describe: 'Install a packed tarball into a throwaway consumer and confirm it imports cleanly',\n operationType: 'execute' as const,\n longDescription:\n 'Installs --tarball into a fresh, outside-the-workspace consumer project and confirms --name can be ' +\n 'imported afterward. Shared by check-pack-install.sh (local release gate) and `release stage` (CI publish ' +\n 'path) so both use identical verification — catches an already-published PEER dependency that is itself ' +\n 'broken, which static manifest checks cannot see. Surfaces the real failure reason via @npmcli/arborist ' +\n 'directly; plain `npm install` swallows this exact failure class as an unhandled rejection with no usable error.',\n\n handler: './cli/commands/verify-clean-install.js#default',\n\n flags: defineCommandFlags({\n tarball: { type: 'string', description: 'Path to the packed tarball to install' },\n name: { type: 'string', description: 'Package name to import after install' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n }),\n\n examples: [\n 'kb release clean install --tarball ./kb-labs-sdk-2.115.0.tgz --name @kb-labs/sdk',\n ],\n },\n\n // release:promote - Promote an already-released version to npm\n {\n path: 'release promote',\n category: 'Publish',\n describe: 'Promote already-released package versions to npm (no re-bump, no rebuild)',\n operationType: 'execute' as const,\n longDescription:\n 'Publishes the CURRENT on-disk package.json versions to npm — no version bump, no rebuild. ' +\n 'Intended to run after `release run --channel stable` (typically targeting Verdaccio via ' +\n 'config.registry): once that run is verified, `release promote` pushes the exact same, ' +\n 'already-committed versions to npm under the stable dist-tag.',\n\n handler: './cli/commands/promote.js#default',\n\n flags: defineCommandFlags({\n scope: { type: 'string', description: 'Package scope (glob pattern)' },\n flow: { type: 'string', description: 'Named flow — selects packages the same way `release run --flow` does (e.g. excludes sdk from platform)' },\n tag: { type: 'string', description: 'npm dist-tag override (default: config.publish.stableTag, falls back to \"latest\")' },\n registry: { type: 'string', description: 'Registry override (default: config.publish.npmRegistry, falls back to real npm)' },\n otp: { type: 'string', description: 'One-time password (optional, will prompt if needed)' },\n 'dry-run': { type: 'boolean', description: 'Simulate promote without actually publishing' },\n access: {\n type: 'string',\n choices: ['public', 'restricted'] as const,\n description: 'Package access level',\n },\n token: { type: 'string', description: 'NPM auth token (overrides NPM_TOKEN env)' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n }),\n\n examples: [\n 'kb release promote',\n 'kb release promote --flow platform',\n 'kb release promote --flow sdk',\n 'kb release promote --scope @kb-labs/core',\n 'kb release promote --dry-run',\n 'kb release promote --tag next',\n ],\n },\n\n // release:deliver - Ship a `release stage`d artifact to a target (npm)\n {\n path: 'release deliver',\n category: 'Publish',\n describe: 'Ship the tarballs `release stage` already packed to a target — no packing, no rebuild',\n operationType: 'execute' as const,\n longDescription:\n 'CI-side half of the \"plugin prepares, CI delivers\" release flow: reads manifest.json written by ' +\n '`release stage` and ships those exact tarballs to --target (only \"npm\" is implemented this pass). ' +\n 'Resolves {flow, channel} from --release-tag via release.flows[*].tagPattern so CI never needs to ' +\n 'guess the flow itself — just pass the tag. Verifies the delivery against the real registry ' +\n 'afterwards (with retry, since real npm has propagation lag); never attempts npm unpublish on a ' +\n 'verification failure — that is a human decision.',\n\n handler: './cli/commands/deliver.js#default',\n\n flags: defineCommandFlags({\n 'release-tag': { type: 'string', description: 'Git tag to resolve {flow, channel} from (via release.flows[*].tagPattern) — alternative to --flow' },\n flow: { type: 'string', description: 'Named flow — alternative to --release-tag' },\n target: { type: 'string', choices: ['npm'] as const, description: 'Delivery target (default: npm — the only target implemented this pass)' },\n 'artifacts-dir': { type: 'string', description: 'Where `release stage` wrote tarballs + manifest.json (default: .kb/release/artifacts)' },\n tag: { type: 'string', description: 'npm dist-tag override (default: config.publish.stableTag, falls back to \"latest\")' },\n registry: { type: 'string', description: 'Registry override (default: config.publish.npmRegistry, falls back to real npm)' },\n otp: { type: 'string', description: 'One-time password (optional, will prompt if needed)' },\n 'dry-run': { type: 'boolean', description: 'Simulate delivery without actually publishing' },\n access: {\n type: 'string',\n choices: ['public', 'restricted'] as const,\n description: 'Package access level',\n },\n token: { type: 'string', description: 'NPM auth token (overrides NPM_TOKEN env)' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n }),\n\n examples: [\n 'kb release deliver --release-tag platform-v2.105.0 --target npm',\n 'kb release deliver --flow sdk --target npm',\n 'kb release deliver --release-tag sdk-v3.2.0 --dry-run',\n ],\n },\n\n // release:rollback - Rollback last release\n {\n path: 'release rollback',\n category: 'Utilities',\n describe: 'Rollback last release',\n operationType: 'mutate' as const,\n longDescription: 'Restore workspace state from backup snapshot',\n\n handler: './cli/commands/rollback.js#default',\n\n flags: defineCommandFlags({\n json: { type: 'boolean', description: 'Output in JSON format' },\n }),\n\n examples: ['kb release rollback', 'kb release rollback --json'],\n },\n\n // release:report - Show last release report\n {\n path: 'release report',\n category: 'Utilities',\n describe: 'Show last release report',\n operationType: 'read' as const,\n longDescription: 'Display the most recent release execution report',\n\n handler: './cli/commands/report.js#default',\n\n flags: defineCommandFlags({\n json: { type: 'boolean', description: 'Output in JSON format' },\n }),\n\n examples: ['kb release report', 'kb release report --json'],\n },\n\n // release:changelog - Generate changelog\n {\n path: 'release changelog',\n category: 'Utilities',\n describe: 'Generate changelog from conventional commits',\n operationType: 'read' as const,\n longDescription: 'Parse git history and generate changelog with conventional commits support',\n\n handler: './cli/commands/changelog.js#default',\n\n flags: defineCommandFlags({\n scope: { type: 'string', description: 'Filter to specific package' },\n flow: { type: 'string', description: 'Named release flow from release.flows' },\n from: { type: 'string', description: 'Start commit/tag' },\n to: { type: 'string', description: 'End commit/tag (default: HEAD)' },\n 'since-tag': { type: 'string', description: 'Shorthand for --from <tag>' },\n format: {\n type: 'string',\n choices: ['json', 'md', 'both'] as const,\n default: 'both',\n description: 'Output format',\n },\n level: {\n type: 'string',\n choices: ['compact', 'standard', 'detailed'] as const,\n default: 'standard',\n description: 'Detail level',\n },\n template: {\n type: 'string',\n description:\n 'Template name (builtin: corporate, corporate-ai, technical, compact) or custom path',\n },\n 'breaking-only': { type: 'boolean', description: 'Show only breaking changes' },\n include: { type: 'string', description: 'Comma-separated types to include' },\n exclude: { type: 'string', description: 'Types to exclude' },\n 'workspace-only': { type: 'boolean', description: 'Only workspace changelog' },\n 'per-package': { type: 'boolean', description: 'Only per-package changelogs' },\n force: { type: 'boolean', description: 'Skip audit gate' },\n 'allow-major': { type: 'boolean', description: 'Allow major bumps for experimental packages' },\n preid: { type: 'string', description: 'Pre-release identifier (rc, beta, alpha)' },\n }),\n\n examples: [\n 'kb release changelog',\n 'kb release changelog --from v1.0.0',\n 'kb release changelog --format md --level detailed',\n 'kb release changelog --template corporate-ai',\n 'kb release changelog --template ./my-template.ts',\n 'kb release changelog --breaking-only',\n ],\n },\n\n // release:verify - Validate release readiness\n {\n path: 'release verify',\n category: 'Validation',\n describe: 'Validate release readiness',\n operationType: 'analyze' as const,\n longDescription: 'Validate release readiness via flag gates (packages, breaking changes, commit types)',\n\n handler: './cli/commands/verify.js#default',\n\n flags: defineCommandFlags({\n 'fail-if-empty': { type: 'boolean', description: 'Fail if no version bumps needed' },\n 'fail-on-breaking': { type: 'boolean', description: 'Fail if breaking changes detected' },\n 'allow-types': {\n type: 'string',\n description: 'Comma-separated types required (e.g., feat,fix)',\n },\n json: { type: 'boolean', description: 'Output in JSON format' },\n }),\n\n examples: [\n 'kb release verify',\n 'kb release verify --fail-if-empty',\n 'kb release verify --allow-types feat,fix',\n ],\n },\n\n // release:checks - Run pre-release checks\n {\n path: 'release checks',\n category: 'Validation',\n describe: 'Run pre-release checks from release config',\n operationType: 'analyze' as const,\n longDescription: 'Execute custom checks defined in release config (lint, test, audit, etc.)',\n\n handler: './cli/commands/checks.js#default',\n\n flags: defineCommandFlags({\n scope: { type: 'string', description: 'Package scope (glob pattern)' },\n flow: { type: 'string', description: 'Named release flow from release.flows' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n }),\n\n examples: [\n 'kb release checks',\n 'kb release checks --scope @my-org/core',\n 'kb release checks --json',\n ],\n },\n\n // release:build - Build packages\n {\n path: 'release build',\n category: 'Publish',\n describe: 'Build packages from release plan',\n operationType: 'execute' as const,\n longDescription: 'Build all packages in plan into temp dir then atomically swap dist/',\n\n handler: './cli/commands/build.js#default',\n\n flags: defineCommandFlags({\n scope: { type: 'string', description: 'Package scope (glob pattern)' },\n flow: { type: 'string', description: 'Named release flow from release.flows' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n }),\n\n examples: [\n 'kb release build',\n 'kb release build --scope platform',\n 'kb release build --json',\n ],\n },\n\n // release:pack - Verify npm artifacts\n {\n path: 'release pack',\n category: 'Publish',\n describe: 'Verify built package artifacts via npm pack',\n operationType: 'execute' as const,\n longDescription: 'Run npm pack checks: directory imports, test file leaks, missing exports, syntax errors',\n\n handler: './cli/commands/pack.js#default',\n\n flags: defineCommandFlags({\n scope: { type: 'string', description: 'Package scope (glob pattern)' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n }),\n\n examples: [\n 'kb release pack',\n 'kb release pack --scope @my-org/core',\n 'kb release pack --json',\n ],\n },\n\n // release:version - Bump package.json versions\n {\n path: 'release version',\n category: 'Publish',\n describe: 'Bump package.json versions per release plan',\n operationType: 'mutate' as const,\n longDescription: 'Update version fields in package.json files based on computed plan',\n\n handler: './cli/commands/version.js#default',\n\n flags: defineCommandFlags({\n scope: { type: 'string', description: 'Package scope (glob pattern)' },\n flow: { type: 'string', description: 'Named release flow from release.flows' },\n bump: {\n type: 'string',\n choices: ['patch', 'minor', 'major', 'auto'] as const,\n default: 'auto',\n description: 'Version bump override',\n },\n 'dry-run': { type: 'boolean', description: 'Show what would be bumped without writing' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n }),\n\n examples: [\n 'kb release version',\n 'kb release version --bump minor',\n 'kb release version --dry-run',\n 'kb release version --scope platform --json',\n ],\n },\n\n // release:git - Commit, tag, push\n {\n path: 'release git',\n category: 'Publish',\n describe: 'Commit, tag, and push release changes',\n operationType: 'mutate' as const,\n longDescription: 'Create release commit, create version tags, and push to remote',\n\n handler: './cli/commands/git.js#default',\n\n flags: defineCommandFlags({\n scope: { type: 'string', description: 'Package scope (glob pattern)' },\n flow: { type: 'string', description: 'Named release flow from release.flows' },\n bump: {\n type: 'string',\n choices: ['patch', 'minor', 'major', 'auto'] as const,\n description: 'Version bump override (used to reload plan)',\n },\n 'dry-run': { type: 'boolean', description: 'Skip git operations' },\n 'no-verify': { type: 'boolean', description: 'Pass --no-verify to git push' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n }),\n\n examples: [\n 'kb release git',\n 'kb release git --scope platform',\n 'kb release git --dry-run',\n 'kb release git --no-verify --json',\n ],\n },\n ],\n },\n\n // REST API routes - V3 format (scope-based architecture)\n rest: {\n basePath: RELEASE_BASE_PATH,\n routes: [\n // GET /scopes - List available release scopes\n {\n method: 'GET',\n path: RELEASE_ROUTES.SCOPES,\n handler: './rest/handlers/scopes-handler.js#default',\n output: {\n zod: '@kb-labs/release-manager-contracts#ScopesResponseSchema',\n },\n },\n // GET /status - Get release status for a scope\n {\n method: 'GET',\n path: RELEASE_ROUTES.STATUS,\n handler: './rest/handlers/status-handler.js#default',\n output: {\n zod: '@kb-labs/release-manager-contracts#StatusResponseSchema',\n },\n },\n // GET /plan - Get current release plan for a scope\n {\n method: 'GET',\n path: RELEASE_ROUTES.PLAN,\n handler: './rest/handlers/plan-handler.js#default',\n input: {\n zod: '@kb-labs/release-manager-contracts#PlanInputSchema',\n },\n output: {\n zod: '@kb-labs/release-manager-contracts#PlanResponseSchema',\n },\n },\n // POST /generate - Generate release plan (LLM)\n {\n method: 'POST',\n path: RELEASE_ROUTES.GENERATE,\n handler: './rest/handlers/generate-handler.js#default',\n input: {\n zod: '@kb-labs/release-manager-contracts#GeneratePlanRequestSchema',\n },\n output: {\n zod: '@kb-labs/release-manager-contracts#GeneratePlanResponseSchema',\n },\n timeoutMs: 120000, // 2 minutes for LLM analysis\n },\n // DELETE /plan - Reset release plan\n {\n method: 'DELETE',\n path: RELEASE_ROUTES.RESET,\n handler: './rest/handlers/reset-handler.js#default',\n input: {\n zod: '@kb-labs/release-manager-contracts#ResetPlanRequestSchema',\n },\n output: {\n zod: '@kb-labs/release-manager-contracts#ResetPlanResponseSchema',\n },\n },\n // GET /changelog - Get changelog for a scope\n {\n method: 'GET',\n path: RELEASE_ROUTES.CHANGELOG,\n handler: './rest/handlers/changelog-handler.js#default',\n input: {\n zod: '@kb-labs/release-manager-contracts#ChangelogInputSchema',\n },\n output: {\n zod: '@kb-labs/release-manager-contracts#ChangelogResponseSchema',\n },\n },\n // POST /changelog/generate - Generate changelog (LLM)\n {\n method: 'POST',\n path: RELEASE_ROUTES.CHANGELOG_GENERATE,\n handler: './rest/handlers/changelog-generate-handler.js#default',\n input: {\n zod: '@kb-labs/release-manager-contracts#GenerateChangelogRequestSchema',\n },\n output: {\n zod: '@kb-labs/release-manager-contracts#GenerateChangelogResponseSchema',\n },\n timeoutMs: 120000, // 2 minutes for LLM generation\n },\n // POST /changelog/save - Save edited changelog\n {\n method: 'POST',\n path: RELEASE_ROUTES.CHANGELOG_SAVE,\n handler: './rest/handlers/changelog-save-handler.js#default',\n input: {\n zod: '@kb-labs/release-manager-contracts#SaveChangelogRequestSchema',\n },\n output: {\n zod: '@kb-labs/release-manager-contracts#SaveChangelogResponseSchema',\n },\n },\n // POST /run - Execute release process\n {\n method: 'POST',\n path: RELEASE_ROUTES.RUN,\n handler: './rest/handlers/run-handler.js#default',\n input: {\n zod: '@kb-labs/release-manager-contracts#RunReleaseRequestSchema',\n },\n output: {\n zod: '@kb-labs/release-manager-contracts#RunReleaseResponseSchema',\n },\n timeoutMs: 300000, // 5 minutes for release execution\n },\n // GET /report - Get latest release report\n {\n method: 'GET',\n path: RELEASE_ROUTES.REPORT,\n handler: './rest/handlers/report-handler.js#default',\n output: {\n zod: '@kb-labs/release-manager-contracts#ReportResponseSchema',\n },\n },\n // GET /history - Get release history\n {\n method: 'GET',\n path: RELEASE_ROUTES.HISTORY,\n handler: './rest/handlers/history-handler.js#default',\n output: {\n zod: '@kb-labs/release-manager-contracts#HistoryResponseSchema',\n },\n },\n // GET /history/:id/report - Get historical release report\n {\n method: 'GET',\n path: RELEASE_ROUTES.HISTORY_REPORT,\n handler: './rest/handlers/history-report-handler.js#default',\n output: {\n zod: '@kb-labs/release-manager-contracts#HistoryReportResponseSchema',\n },\n },\n // GET /history/:id/plan - Get historical release plan\n {\n method: 'GET',\n path: RELEASE_ROUTES.HISTORY_PLAN,\n handler: './rest/handlers/history-plan-handler.js#default',\n output: {\n zod: '@kb-labs/release-manager-contracts#HistoryPlanResponseSchema',\n },\n },\n // GET /history/:id/changelog - Get historical changelog\n {\n method: 'GET',\n path: RELEASE_ROUTES.HISTORY_CHANGELOG,\n handler: './rest/handlers/history-changelog-handler.js#default',\n output: {\n zod: '@kb-labs/release-manager-contracts#HistoryChangelogResponseSchema',\n },\n },\n // GET /git-timeline - Get git commit timeline and version preview\n {\n method: 'GET',\n path: RELEASE_ROUTES.GIT_TIMELINE,\n handler: './rest/handlers/git-timeline-handler.js#default',\n output: {\n zod: '@kb-labs/release-manager-contracts#GitTimelineResponseSchema',\n },\n },\n // GET /preview - Preview package contents before publish\n {\n method: 'GET',\n path: RELEASE_ROUTES.PREVIEW,\n handler: './rest/handlers/preview-handler.js#default',\n output: {\n zod: '@kb-labs/release-manager-contracts#PreviewResponseSchema',\n },\n },\n // POST /build - Trigger package build\n {\n method: 'POST',\n path: RELEASE_ROUTES.BUILD,\n handler: './rest/handlers/build-handler.js#default',\n input: {\n zod: '@kb-labs/release-manager-contracts#BuildRequestSchema',\n },\n output: {\n zod: '@kb-labs/release-manager-contracts#BuildResponseSchema',\n },\n timeoutMs: 300000, // 5 minutes for build\n },\n // GET /checklist - Get unified release checklist status\n {\n method: 'GET',\n path: RELEASE_ROUTES.CHECKLIST,\n handler: './rest/handlers/checklist-handler.js#default',\n output: {\n zod: '@kb-labs/release-manager-contracts#ReleaseChecklistSchema',\n },\n },\n // GET /checks - Get list of configured checks (without running them)\n {\n method: 'GET',\n path: RELEASE_ROUTES.CHECKS,\n handler: './rest/handlers/get-checks-handler.js#default',\n output: {\n zod: '@kb-labs/release-manager-contracts#GetChecksResponseSchema',\n },\n },\n // POST /checks/run - Run pre-release checks from kb.config.json release.checks\n {\n method: 'POST',\n path: RELEASE_ROUTES.CHECKS_RUN,\n handler: './rest/handlers/run-checks-handler.js#default',\n input: {\n zod: '@kb-labs/release-manager-contracts#RunChecksRequestSchema',\n },\n output: {\n zod: '@kb-labs/release-manager-contracts#RunChecksResponseSchema',\n },\n timeoutMs: 600000, // 10 minutes - all checks combined\n },\n ],\n },\n\n // Studio V2 — Module Federation pages\n studio: {\n version: 2 as const,\n remoteName: 'releasePlugin',\n pages: [\n {\n id: 'release.overview',\n title: 'Release',\n icon: 'RocketOutlined',\n route: '/p/release',\n entry: './ReleasePage',\n order: 1,\n },\n ],\n menus: [\n {\n id: 'release',\n label: 'Release',\n icon: 'RocketOutlined',\n target: 'release.overview',\n order: 60,\n },\n ],\n },\n\n // Studio widgets (legacy - commented out, using new UI integration)\n // studio_legacy: {\n // widgets: [\n // {\n // id: 'release.plan',\n // kind: 'infopanel',\n // title: 'Latest Release Plan',\n // description: 'Shows the most recent release plan generated via `kb release plan`.',\n // data: {\n // source: {\n // type: 'rest',\n // routeId: 'plan/latest',\n // method: 'GET',\n // },\n // },\n // layoutHint: {\n // w: 4,\n // h: 5,\n // minW: 3,\n // minH: 3,\n // },\n // },\n // {\n // id: 'release.report',\n // kind: 'cardlist',\n // title: 'Release Report',\n // description: 'Status of the last release execution.',\n // data: {\n // source: {\n // type: 'rest',\n // routeId: 'report/latest',\n // method: 'GET',\n // },\n // },\n // options: {\n // layout: 'list',\n // },\n // layoutHint: {\n // w: 4,\n // h: 4,\n // minW: 3,\n // minH: 3,\n // },\n // },\n // ],\n // menus: [\n // {\n // id: 'release-menu',\n // label: 'Release',\n // icon: 'RocketOutlined',\n // target: '/plugins/release/dashboard',\n // order: 0,\n // },\n // {\n // id: 'release-dashboard',\n // label: 'Dashboard',\n // icon: 'DashboardOutlined',\n // parentId: 'release-menu',\n // target: '/plugins/release/dashboard',\n // order: 1,\n // },\n // ],\n // layouts: [\n // {\n // id: 'release.dashboard',\n // kind: 'grid',\n // title: 'Release Dashboard',\n // description: 'Overview of release planning and execution.',\n // config: {\n // cols: { sm: 2, md: 4, lg: 6 },\n // rowHeight: 5,\n // },\n // },\n // ],\n // },\n\n // Auto-detects kb.config.json section for useConfig()\n // maps to profiles[].products.release in kb.config.json\n configSection: 'release',\n\n capabilities: ['fs:read', 'fs:write'],\n\n // V3: Manifest-first permissions using composable presets\n permissions: pluginPermissions,\n\n // Workflow templates — composed from atomic release CLI commands\n // Registered in workflow engine and runnable via `kb workflow run plugin:@kb-labs/release/<id>`\n workflows: {\n handlers: [],\n templates: [\n {\n id: 'full-release',\n path: './workflows/templates/full-release.yaml',\n describe: 'Full release cycle: plan → checks → build → pack → approve → publish → git',\n tags: ['release', 'full'],\n },\n {\n id: 'hotfix',\n path: './workflows/templates/hotfix.yaml',\n describe: 'Quick hotfix: plan → approve → publish → git (patch bump, no checks)',\n tags: ['release', 'hotfix'],\n },\n {\n id: 'dry-run',\n path: './workflows/templates/dry-run.yaml',\n describe: 'Preview release: plan, checks, pack, changelog — no publish or git ops',\n tags: ['release', 'dry-run'],\n },\n ],\n },\n\n // Artifacts\n artifacts: [\n {\n id: 'release.plan.json',\n pathTemplate: '.kb/release/plan.json',\n description: 'Serialized release plan generated by `kb release plan`.',\n },\n {\n id: 'release.report.json',\n pathTemplate: '.kb/release/report.json',\n description: 'Execution report emitted by `kb release run`.',\n },\n {\n id: 'release.changelog.md',\n pathTemplate: '.kb/release/changelog.md',\n description: 'Workspace changelog output produced during release.',\n },\n ],\n};\n\nexport default manifest;\n"]}
1
+ {"version":3,"sources":["../src/manifest.ts"],"names":[],"mappings":"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","file":"manifest.js","sourcesContent":["/**\n * KB Labs Release Manager - Manifest V3\n *\n * Migration from V2 to V3 following best practices from V3-MIGRATION-GUIDE.md\n *\n * Key changes:\n * - Schema: kb.plugin/3\n * - Commands use handler#default suffix\n * - Commands have handlerPath field\n * - Permissions moved to manifest level\n * - All imports from @kb-labs/sdk\n */\n\nimport {\n defineCommandFlags,\n combinePermissions,\n gitWorkflowPreset,\n kbPlatformPreset,\n npmPublishPreset,\n ciEnvironmentPreset,\n} from '@kb-labs/sdk';\nimport {\n RELEASE_BASE_PATH,\n RELEASE_ROUTES,\n RELEASE_CACHE_PREFIX,\n} from '@kb-labs/release-manager-contracts';\nimport { CHECKS_CONCURRENCY } from '@kb-labs/release-manager-core';\n\n/**\n * Build permissions using presets:\n * - gitWorkflow: HOME, USER, GIT_*, SSH_* for git/changelog operations\n * - kbPlatform: KB_* env vars and .kb/ directory\n * - npmPublish: NPM_TOKEN, npm registry access for publishing\n * - ciEnvironment: CI, GITHUB_TOKEN for CI/CD integrations\n * - Custom: KB_RELEASE_*, additional fs paths\n */\nconst pluginPermissions = combinePermissions()\n .with(gitWorkflowPreset)\n .with(kbPlatformPreset)\n .with(npmPublishPreset)\n .with(ciEnvironmentPreset)\n .withEnv(['KB_RELEASE_*', 'NODE_ENV'])\n .withFs({\n mode: 'readWrite',\n allow: [\n '.kb/release/**',\n 'package.json',\n '**/package.json',\n 'pnpm-workspace.yaml',\n '**/*.yml',\n '**/*.yaml',\n 'CHANGELOG.md',\n '**/CHANGELOG.md',\n ],\n // Note: deny patterns (*.key, *.secret, node_modules) are enforced by platform\n })\n .withShell({\n allow: ['bash', 'git', 'npm', 'npx', 'pnpm'], // release gates/builds plus git, npm publishing, and configurable pnpm scripts\n // Must match CHECKS_CONCURRENCY (manager-core/src/checks.ts): the process\n // broker grants at most this many concurrent shells per plugin, so a lower\n // value here throttles perPackage check batches to 1-at-a-time and can\n // blow their timeout; a higher value defeats the plugin's own batching.\n maxConcurrent: CHECKS_CONCURRENCY,\n })\n .withPlatform({\n cache: [RELEASE_CACHE_PREFIX], // Cache namespace prefix for plan/changelog caching\n llm: true, // LLM for changelog generation\n analytics: true, // Track release events\n })\n .withQuotas({\n timeoutMs: 1800000, // 30 min for complex releases (167 packages)\n memoryMb: 4096, // full platform build:affected across 167 packages peaked at ~2.05GB on a CI runner, right at the old 2048 ceiling\n cpuMs: 300000, // 5 min CPU time\n })\n .build();\n\nexport const manifest = {\n schema: 'kb.plugin/3',\n id: '@kb-labs/release',\n version: '0.1.0',\n\n display: {\n name: 'Release Manager',\n description: 'Plan, execute, and audit releases across your workspace',\n tags: ['release', 'publish', 'versioning'],\n },\n\n // Platform requirements\n platform: {\n requires: ['storage', 'cache'], // cache required for plan/changelog caching\n optional: ['llm', 'analytics', 'logger'],\n },\n\n // Setup handler - V3 pattern\n setup: {\n handler: './setup/handler.js#default',\n describe: 'Prepare the .kb/release workspace (plans, reports, backups).',\n },\n\n // CLI commands - V3 format\n cli: {\n groupMeta: [\n { path: 'release', describe: 'Release management commands' },\n ],\n commands: [\n // release:plan - Analyze changes and prepare release plan\n {\n path: 'release plan',\n category: 'Pipeline',\n describe: 'Analyze changes and prepare release plan',\n operationType: 'analyze' as const,\n longDescription: 'Detect modified packages and compute version bumps based on changes',\n\n handler: './cli/commands/plan.js#default',\n\n flags: defineCommandFlags({\n scope: { type: 'string', description: 'Package scope (glob pattern)' },\n flow: { type: 'string', description: 'Named release flow from release.flows' },\n bump: {\n type: 'string',\n choices: ['patch', 'minor', 'major', 'auto'] as const,\n default: 'auto',\n description: 'Version bump strategy',\n },\n channel: {\n type: 'string',\n choices: ['stable', 'canary'] as const,\n default: 'stable',\n description: 'Release channel — canary previews the -canary.<shortsha> version shape',\n },\n json: { type: 'boolean', description: 'Print plan as JSON' },\n }),\n\n examples: [\n 'kb release plan',\n 'kb release plan --scope packages/*',\n 'kb release plan --bump minor',\n 'kb release plan --channel canary',\n 'kb release plan --json',\n ],\n },\n\n // release:run - Execute release process\n {\n path: 'release run',\n category: 'Pipeline',\n describe: 'Execute release process (plan, check, publish)',\n operationType: 'execute' as const,\n longDescription: 'Run full release: plan versions, run checks, publish packages',\n\n handler: './cli/commands/run.js#default',\n\n flags: defineCommandFlags({\n scope: { type: 'string', description: 'Package scope or glob pattern (e.g. @my-org/core, packages/*)' },\n bump: {\n type: 'string',\n choices: ['patch', 'minor', 'major', 'auto'] as const,\n default: 'auto',\n description: 'Version bump override (default: auto-detect from commits)',\n },\n strict: { type: 'boolean', description: 'Fail on any check failure' },\n channel: {\n type: 'string',\n choices: ['stable', 'canary'] as const,\n default: 'stable',\n description: 'Release channel — canary publishes straight to npm under a prerelease tag, no git commit/tag',\n },\n 'dry-run': { type: 'boolean', description: 'Simulate release without publishing or tagging' },\n 'skip-checks': { type: 'boolean', description: 'Skip pre-release checks' },\n 'skip-build': { type: 'boolean', description: 'Skip build step' },\n 'skip-verify': { type: 'boolean', description: 'Skip artifact verification (npm pack check)' },\n 'skip-publish': {\n type: 'boolean',\n description: 'Prepare-only: build, version, changelog, git commit/tag — never publish to npm. No npm credentials required. Pair with a tag-triggered CI job running `kb release promote`.',\n },\n 'no-verify': { type: 'boolean', description: 'Pass --no-verify to git push (bypasses pre-push hooks)' },\n yes: { type: 'boolean', description: 'Skip confirmation prompt — for CI/headless mode' },\n json: { type: 'boolean', description: 'Print result as JSON' },\n }),\n\n examples: [\n 'kb release run',\n 'kb release run --dry-run',\n 'kb release run --yes',\n 'kb release run --yes --no-verify',\n 'kb release run --bump minor --yes',\n 'kb release run --scope @my-org/core',\n 'kb release run --skip-checks --skip-build',\n 'kb release run --strict --json',\n 'kb release run --channel canary --yes',\n 'kb release run --flow platform --skip-publish --yes',\n ],\n },\n\n // release:publish - Publish packages to npm\n {\n path: 'release publish',\n category: 'Publish',\n describe: 'Publish packages to npm registry',\n operationType: 'execute' as const,\n longDescription: 'Smart npm publish with interactive 2FA support and better UX',\n\n handler: './cli/commands/publish.js#default',\n\n flags: defineCommandFlags({\n scope: { type: 'string', description: 'Package scope (glob pattern)' },\n otp: { type: 'string', description: 'One-time password (optional, will prompt if needed)' },\n 'dry-run': { type: 'boolean', description: 'Simulate publish without actually publishing' },\n tag: { type: 'string', description: 'NPM dist-tag (default: latest)' },\n access: {\n type: 'string',\n choices: ['public', 'restricted'] as const,\n description: 'Package access level',\n },\n token: { type: 'string', description: 'NPM auth token (overrides NPM_TOKEN env)' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n }),\n\n examples: [\n 'kb release publish',\n 'kb release publish --scope @kb-labs/core',\n 'kb release publish --otp 123456',\n 'kb release publish --dry-run',\n 'kb release publish --tag next --access public',\n ],\n },\n\n // release:stage - Pack the currently-committed versions into real tarballs, once\n {\n path: 'release stage',\n category: 'Publish',\n describe: 'Pack the currently-committed package versions for a flow into real npm tarballs, once, for `release deliver` to ship',\n operationType: 'execute' as const,\n longDescription:\n 'Produces the actual npm tarball artifacts for a flow\\'s already-committed package.json versions ' +\n '— no re-bump, no rebuild. Writes a manifest.json (name/version/tarball/sha256) alongside the tarballs. ' +\n 'Intended to run once in CI right after checking out a release tag; every `release deliver` target then ' +\n 'ships these exact bytes instead of re-packing independently. Not the same command as `release pack` ' +\n '(that one verifies proposed packages before a release is decided; this one packs an already-decided one).',\n\n handler: './cli/commands/stage.js#default',\n\n flags: defineCommandFlags({\n 'release-tag': { type: 'string', description: 'Git tag to resolve {flow, channel} from (via release.flows[*].tagPattern) — alternative to --flow' },\n flow: { type: 'string', description: 'Named flow — selects packages the same way `release run --flow` does (e.g. excludes sdk from platform)' },\n 'out-dir': { type: 'string', description: 'Output directory for tarballs + manifest.json (default: .kb/release/artifacts)' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n }),\n\n examples: [\n 'kb release stage --flow platform',\n 'kb release stage --release-tag platform-v2.105.0',\n 'kb release stage --flow sdk --out-dir .kb/release/artifacts',\n ],\n },\n\n // release:clean-install - Shared install-verification used by both\n // check-pack-install.sh and `release stage`\n {\n path: 'release clean install',\n category: 'Publish',\n describe: 'Install a packed tarball into a throwaway consumer and confirm it imports cleanly',\n operationType: 'execute' as const,\n longDescription:\n 'Installs --tarball into a fresh, outside-the-workspace consumer project and confirms --name can be ' +\n 'imported afterward. Shared by check-pack-install.sh (local release gate) and `release stage` (CI publish ' +\n 'path) so both use identical verification — catches an already-published PEER dependency that is itself ' +\n 'broken, which static manifest checks cannot see. Surfaces the real failure reason via @npmcli/arborist ' +\n 'directly; plain `npm install` swallows this exact failure class as an unhandled rejection with no usable error.',\n\n handler: './cli/commands/verify-clean-install.js#default',\n\n flags: defineCommandFlags({\n tarball: { type: 'string', description: 'Path to the packed tarball to install' },\n name: { type: 'string', description: 'Package name to import after install' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n additionalTarballs: {\n type: 'string',\n description:\n 'Comma-separated tarball paths for workspace siblings. Forces pnpm to install these exact local ' +\n 'artifacts via pnpm.overrides instead of resolving the same package names from the real npm registry ' +\n '— required with --package-manager pnpm to avoid silently testing an already-published, possibly ' +\n 'stale, version of an in-repo sibling.',\n },\n packageManager: {\n type: 'string',\n description: '\"pnpm\" enables the additionalTarballs override path; \"npm\" (default) keeps the plain Arborist install.',\n },\n }),\n\n examples: [\n 'kb release clean install --tarball ./kb-labs-sdk-2.115.0.tgz --name @kb-labs/sdk',\n 'kb release clean install --tarball ./a.tgz --name @kb-labs/a --package-manager pnpm --additional-tarballs ./b.tgz,./c.tgz',\n ],\n },\n\n // release:promote - Promote an already-released version to npm\n {\n path: 'release promote',\n category: 'Publish',\n describe: 'Promote already-released package versions to npm (no re-bump, no rebuild)',\n operationType: 'execute' as const,\n longDescription:\n 'Publishes the CURRENT on-disk package.json versions to npm — no version bump, no rebuild. ' +\n 'Intended to run after `release run --channel stable` (typically targeting Verdaccio via ' +\n 'config.registry): once that run is verified, `release promote` pushes the exact same, ' +\n 'already-committed versions to npm under the stable dist-tag.',\n\n handler: './cli/commands/promote.js#default',\n\n flags: defineCommandFlags({\n scope: { type: 'string', description: 'Package scope (glob pattern)' },\n flow: { type: 'string', description: 'Named flow — selects packages the same way `release run --flow` does (e.g. excludes sdk from platform)' },\n tag: { type: 'string', description: 'npm dist-tag override (default: config.publish.stableTag, falls back to \"latest\")' },\n registry: { type: 'string', description: 'Registry override (default: config.publish.npmRegistry, falls back to real npm)' },\n otp: { type: 'string', description: 'One-time password (optional, will prompt if needed)' },\n 'dry-run': { type: 'boolean', description: 'Simulate promote without actually publishing' },\n access: {\n type: 'string',\n choices: ['public', 'restricted'] as const,\n description: 'Package access level',\n },\n token: { type: 'string', description: 'NPM auth token (overrides NPM_TOKEN env)' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n }),\n\n examples: [\n 'kb release promote',\n 'kb release promote --flow platform',\n 'kb release promote --flow sdk',\n 'kb release promote --scope @kb-labs/core',\n 'kb release promote --dry-run',\n 'kb release promote --tag next',\n ],\n },\n\n // release:deliver - Ship a `release stage`d artifact to a target (npm)\n {\n path: 'release deliver',\n category: 'Publish',\n describe: 'Ship the tarballs `release stage` already packed to a target — no packing, no rebuild',\n operationType: 'execute' as const,\n longDescription:\n 'CI-side half of the \"plugin prepares, CI delivers\" release flow: reads manifest.json written by ' +\n '`release stage` and ships those exact tarballs to --target (only \"npm\" is implemented this pass). ' +\n 'Resolves {flow, channel} from --release-tag via release.flows[*].tagPattern so CI never needs to ' +\n 'guess the flow itself — just pass the tag. Verifies the delivery against the real registry ' +\n 'afterwards (with retry, since real npm has propagation lag); never attempts npm unpublish on a ' +\n 'verification failure — that is a human decision.',\n\n handler: './cli/commands/deliver.js#default',\n\n flags: defineCommandFlags({\n 'release-tag': { type: 'string', description: 'Git tag to resolve {flow, channel} from (via release.flows[*].tagPattern) — alternative to --flow' },\n flow: { type: 'string', description: 'Named flow — alternative to --release-tag' },\n target: { type: 'string', choices: ['npm'] as const, description: 'Delivery target (default: npm — the only target implemented this pass)' },\n 'artifacts-dir': { type: 'string', description: 'Where `release stage` wrote tarballs + manifest.json (default: .kb/release/artifacts)' },\n tag: { type: 'string', description: 'npm dist-tag override (default: config.publish.stableTag, falls back to \"latest\")' },\n registry: { type: 'string', description: 'Registry override (default: config.publish.npmRegistry, falls back to real npm)' },\n otp: { type: 'string', description: 'One-time password (optional, will prompt if needed)' },\n 'dry-run': { type: 'boolean', description: 'Simulate delivery without actually publishing' },\n access: {\n type: 'string',\n choices: ['public', 'restricted'] as const,\n description: 'Package access level',\n },\n token: { type: 'string', description: 'NPM auth token (overrides NPM_TOKEN env)' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n }),\n\n examples: [\n 'kb release deliver --release-tag platform-v2.105.0 --target npm',\n 'kb release deliver --flow sdk --target npm',\n 'kb release deliver --release-tag sdk-v3.2.0 --dry-run',\n ],\n },\n\n // release:rollback - Rollback last release\n {\n path: 'release rollback',\n category: 'Utilities',\n describe: 'Rollback last release',\n operationType: 'mutate' as const,\n longDescription: 'Restore workspace state from backup snapshot',\n\n handler: './cli/commands/rollback.js#default',\n\n flags: defineCommandFlags({\n json: { type: 'boolean', description: 'Output in JSON format' },\n }),\n\n examples: ['kb release rollback', 'kb release rollback --json'],\n },\n\n // release:report - Show last release report\n {\n path: 'release report',\n category: 'Utilities',\n describe: 'Show last release report',\n operationType: 'read' as const,\n longDescription: 'Display the most recent release execution report',\n\n handler: './cli/commands/report.js#default',\n\n flags: defineCommandFlags({\n json: { type: 'boolean', description: 'Output in JSON format' },\n }),\n\n examples: ['kb release report', 'kb release report --json'],\n },\n\n // release:changelog - Generate changelog\n {\n path: 'release changelog',\n category: 'Utilities',\n describe: 'Generate changelog from conventional commits',\n operationType: 'read' as const,\n longDescription: 'Parse git history and generate changelog with conventional commits support',\n\n handler: './cli/commands/changelog.js#default',\n\n flags: defineCommandFlags({\n scope: { type: 'string', description: 'Filter to specific package' },\n flow: { type: 'string', description: 'Named release flow from release.flows' },\n from: { type: 'string', description: 'Start commit/tag' },\n to: { type: 'string', description: 'End commit/tag (default: HEAD)' },\n 'since-tag': { type: 'string', description: 'Shorthand for --from <tag>' },\n format: {\n type: 'string',\n choices: ['json', 'md', 'both'] as const,\n default: 'both',\n description: 'Output format',\n },\n level: {\n type: 'string',\n choices: ['compact', 'standard', 'detailed'] as const,\n default: 'standard',\n description: 'Detail level',\n },\n template: {\n type: 'string',\n description:\n 'Template name (builtin: corporate, corporate-ai, technical, compact) or custom path',\n },\n 'breaking-only': { type: 'boolean', description: 'Show only breaking changes' },\n include: { type: 'string', description: 'Comma-separated types to include' },\n exclude: { type: 'string', description: 'Types to exclude' },\n 'workspace-only': { type: 'boolean', description: 'Only workspace changelog' },\n 'per-package': { type: 'boolean', description: 'Only per-package changelogs' },\n force: { type: 'boolean', description: 'Skip audit gate' },\n 'allow-major': { type: 'boolean', description: 'Allow major bumps for experimental packages' },\n preid: { type: 'string', description: 'Pre-release identifier (rc, beta, alpha)' },\n }),\n\n examples: [\n 'kb release changelog',\n 'kb release changelog --from v1.0.0',\n 'kb release changelog --format md --level detailed',\n 'kb release changelog --template corporate-ai',\n 'kb release changelog --template ./my-template.ts',\n 'kb release changelog --breaking-only',\n ],\n },\n\n // release:verify - Validate release readiness\n {\n path: 'release verify',\n category: 'Validation',\n describe: 'Validate release readiness',\n operationType: 'analyze' as const,\n longDescription: 'Validate release readiness via flag gates (packages, breaking changes, commit types)',\n\n handler: './cli/commands/verify.js#default',\n\n flags: defineCommandFlags({\n 'fail-if-empty': { type: 'boolean', description: 'Fail if no version bumps needed' },\n 'fail-on-breaking': { type: 'boolean', description: 'Fail if breaking changes detected' },\n 'allow-types': {\n type: 'string',\n description: 'Comma-separated types required (e.g., feat,fix)',\n },\n json: { type: 'boolean', description: 'Output in JSON format' },\n }),\n\n examples: [\n 'kb release verify',\n 'kb release verify --fail-if-empty',\n 'kb release verify --allow-types feat,fix',\n ],\n },\n\n // release:checks - Run pre-release checks\n {\n path: 'release checks',\n category: 'Validation',\n describe: 'Run pre-release checks from release config',\n operationType: 'analyze' as const,\n longDescription: 'Execute custom checks defined in release config (lint, test, audit, etc.)',\n\n handler: './cli/commands/checks.js#default',\n\n flags: defineCommandFlags({\n scope: { type: 'string', description: 'Package scope (glob pattern)' },\n flow: { type: 'string', description: 'Named release flow from release.flows' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n }),\n\n examples: [\n 'kb release checks',\n 'kb release checks --scope @my-org/core',\n 'kb release checks --json',\n ],\n },\n\n // release:build - Build packages\n {\n path: 'release build',\n category: 'Publish',\n describe: 'Build packages from release plan',\n operationType: 'execute' as const,\n longDescription: 'Build all packages in plan into temp dir then atomically swap dist/',\n\n handler: './cli/commands/build.js#default',\n\n flags: defineCommandFlags({\n scope: { type: 'string', description: 'Package scope (glob pattern)' },\n flow: { type: 'string', description: 'Named release flow from release.flows' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n }),\n\n examples: [\n 'kb release build',\n 'kb release build --scope platform',\n 'kb release build --json',\n ],\n },\n\n // release:pack - Verify npm artifacts\n {\n path: 'release pack',\n category: 'Publish',\n describe: 'Verify built package artifacts via npm pack',\n operationType: 'execute' as const,\n longDescription: 'Run npm pack checks: directory imports, test file leaks, missing exports, syntax errors',\n\n handler: './cli/commands/pack.js#default',\n\n flags: defineCommandFlags({\n scope: { type: 'string', description: 'Package scope (glob pattern)' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n }),\n\n examples: [\n 'kb release pack',\n 'kb release pack --scope @my-org/core',\n 'kb release pack --json',\n ],\n },\n\n // release:version - Bump package.json versions\n {\n path: 'release version',\n category: 'Publish',\n describe: 'Bump package.json versions per release plan',\n operationType: 'mutate' as const,\n longDescription: 'Update version fields in package.json files based on computed plan',\n\n handler: './cli/commands/version.js#default',\n\n flags: defineCommandFlags({\n scope: { type: 'string', description: 'Package scope (glob pattern)' },\n flow: { type: 'string', description: 'Named release flow from release.flows' },\n bump: {\n type: 'string',\n choices: ['patch', 'minor', 'major', 'auto'] as const,\n default: 'auto',\n description: 'Version bump override',\n },\n 'dry-run': { type: 'boolean', description: 'Show what would be bumped without writing' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n }),\n\n examples: [\n 'kb release version',\n 'kb release version --bump minor',\n 'kb release version --dry-run',\n 'kb release version --scope platform --json',\n ],\n },\n\n // release:git - Commit, tag, push\n {\n path: 'release git',\n category: 'Publish',\n describe: 'Commit, tag, and push release changes',\n operationType: 'mutate' as const,\n longDescription: 'Create release commit, create version tags, and push to remote',\n\n handler: './cli/commands/git.js#default',\n\n flags: defineCommandFlags({\n scope: { type: 'string', description: 'Package scope (glob pattern)' },\n flow: { type: 'string', description: 'Named release flow from release.flows' },\n bump: {\n type: 'string',\n choices: ['patch', 'minor', 'major', 'auto'] as const,\n description: 'Version bump override (used to reload plan)',\n },\n 'dry-run': { type: 'boolean', description: 'Skip git operations' },\n 'no-verify': { type: 'boolean', description: 'Pass --no-verify to git push' },\n json: { type: 'boolean', description: 'Output in JSON format' },\n }),\n\n examples: [\n 'kb release git',\n 'kb release git --scope platform',\n 'kb release git --dry-run',\n 'kb release git --no-verify --json',\n ],\n },\n ],\n },\n\n // REST API routes - V3 format (scope-based architecture)\n rest: {\n basePath: RELEASE_BASE_PATH,\n routes: [\n // GET /scopes - List available release scopes\n {\n method: 'GET',\n path: RELEASE_ROUTES.SCOPES,\n handler: './rest/handlers/scopes-handler.js#default',\n output: {\n zod: '@kb-labs/release-manager-contracts#ScopesResponseSchema',\n },\n },\n // GET /status - Get release status for a scope\n {\n method: 'GET',\n path: RELEASE_ROUTES.STATUS,\n handler: './rest/handlers/status-handler.js#default',\n output: {\n zod: '@kb-labs/release-manager-contracts#StatusResponseSchema',\n },\n },\n // GET /plan - Get current release plan for a scope\n {\n method: 'GET',\n path: RELEASE_ROUTES.PLAN,\n handler: './rest/handlers/plan-handler.js#default',\n input: {\n zod: '@kb-labs/release-manager-contracts#PlanInputSchema',\n },\n output: {\n zod: '@kb-labs/release-manager-contracts#PlanResponseSchema',\n },\n },\n // POST /generate - Generate release plan (LLM)\n {\n method: 'POST',\n path: RELEASE_ROUTES.GENERATE,\n handler: './rest/handlers/generate-handler.js#default',\n input: {\n zod: '@kb-labs/release-manager-contracts#GeneratePlanRequestSchema',\n },\n output: {\n zod: '@kb-labs/release-manager-contracts#GeneratePlanResponseSchema',\n },\n timeoutMs: 120000, // 2 minutes for LLM analysis\n },\n // DELETE /plan - Reset release plan\n {\n method: 'DELETE',\n path: RELEASE_ROUTES.RESET,\n handler: './rest/handlers/reset-handler.js#default',\n input: {\n zod: '@kb-labs/release-manager-contracts#ResetPlanRequestSchema',\n },\n output: {\n zod: '@kb-labs/release-manager-contracts#ResetPlanResponseSchema',\n },\n },\n // GET /changelog - Get changelog for a scope\n {\n method: 'GET',\n path: RELEASE_ROUTES.CHANGELOG,\n handler: './rest/handlers/changelog-handler.js#default',\n input: {\n zod: '@kb-labs/release-manager-contracts#ChangelogInputSchema',\n },\n output: {\n zod: '@kb-labs/release-manager-contracts#ChangelogResponseSchema',\n },\n },\n // POST /changelog/generate - Generate changelog (LLM)\n {\n method: 'POST',\n path: RELEASE_ROUTES.CHANGELOG_GENERATE,\n handler: './rest/handlers/changelog-generate-handler.js#default',\n input: {\n zod: '@kb-labs/release-manager-contracts#GenerateChangelogRequestSchema',\n },\n output: {\n zod: '@kb-labs/release-manager-contracts#GenerateChangelogResponseSchema',\n },\n timeoutMs: 120000, // 2 minutes for LLM generation\n },\n // POST /changelog/save - Save edited changelog\n {\n method: 'POST',\n path: RELEASE_ROUTES.CHANGELOG_SAVE,\n handler: './rest/handlers/changelog-save-handler.js#default',\n input: {\n zod: '@kb-labs/release-manager-contracts#SaveChangelogRequestSchema',\n },\n output: {\n zod: '@kb-labs/release-manager-contracts#SaveChangelogResponseSchema',\n },\n },\n // POST /run - Execute release process\n {\n method: 'POST',\n path: RELEASE_ROUTES.RUN,\n handler: './rest/handlers/run-handler.js#default',\n input: {\n zod: '@kb-labs/release-manager-contracts#RunReleaseRequestSchema',\n },\n output: {\n zod: '@kb-labs/release-manager-contracts#RunReleaseResponseSchema',\n },\n timeoutMs: 300000, // 5 minutes for release execution\n },\n // GET /report - Get latest release report\n {\n method: 'GET',\n path: RELEASE_ROUTES.REPORT,\n handler: './rest/handlers/report-handler.js#default',\n output: {\n zod: '@kb-labs/release-manager-contracts#ReportResponseSchema',\n },\n },\n // GET /history - Get release history\n {\n method: 'GET',\n path: RELEASE_ROUTES.HISTORY,\n handler: './rest/handlers/history-handler.js#default',\n output: {\n zod: '@kb-labs/release-manager-contracts#HistoryResponseSchema',\n },\n },\n // GET /history/:id/report - Get historical release report\n {\n method: 'GET',\n path: RELEASE_ROUTES.HISTORY_REPORT,\n handler: './rest/handlers/history-report-handler.js#default',\n output: {\n zod: '@kb-labs/release-manager-contracts#HistoryReportResponseSchema',\n },\n },\n // GET /history/:id/plan - Get historical release plan\n {\n method: 'GET',\n path: RELEASE_ROUTES.HISTORY_PLAN,\n handler: './rest/handlers/history-plan-handler.js#default',\n output: {\n zod: '@kb-labs/release-manager-contracts#HistoryPlanResponseSchema',\n },\n },\n // GET /history/:id/changelog - Get historical changelog\n {\n method: 'GET',\n path: RELEASE_ROUTES.HISTORY_CHANGELOG,\n handler: './rest/handlers/history-changelog-handler.js#default',\n output: {\n zod: '@kb-labs/release-manager-contracts#HistoryChangelogResponseSchema',\n },\n },\n // GET /git-timeline - Get git commit timeline and version preview\n {\n method: 'GET',\n path: RELEASE_ROUTES.GIT_TIMELINE,\n handler: './rest/handlers/git-timeline-handler.js#default',\n output: {\n zod: '@kb-labs/release-manager-contracts#GitTimelineResponseSchema',\n },\n },\n // GET /preview - Preview package contents before publish\n {\n method: 'GET',\n path: RELEASE_ROUTES.PREVIEW,\n handler: './rest/handlers/preview-handler.js#default',\n output: {\n zod: '@kb-labs/release-manager-contracts#PreviewResponseSchema',\n },\n },\n // POST /build - Trigger package build\n {\n method: 'POST',\n path: RELEASE_ROUTES.BUILD,\n handler: './rest/handlers/build-handler.js#default',\n input: {\n zod: '@kb-labs/release-manager-contracts#BuildRequestSchema',\n },\n output: {\n zod: '@kb-labs/release-manager-contracts#BuildResponseSchema',\n },\n timeoutMs: 300000, // 5 minutes for build\n },\n // GET /checklist - Get unified release checklist status\n {\n method: 'GET',\n path: RELEASE_ROUTES.CHECKLIST,\n handler: './rest/handlers/checklist-handler.js#default',\n output: {\n zod: '@kb-labs/release-manager-contracts#ReleaseChecklistSchema',\n },\n },\n // GET /checks - Get list of configured checks (without running them)\n {\n method: 'GET',\n path: RELEASE_ROUTES.CHECKS,\n handler: './rest/handlers/get-checks-handler.js#default',\n output: {\n zod: '@kb-labs/release-manager-contracts#GetChecksResponseSchema',\n },\n },\n // POST /checks/run - Run pre-release checks from kb.config.json release.checks\n {\n method: 'POST',\n path: RELEASE_ROUTES.CHECKS_RUN,\n handler: './rest/handlers/run-checks-handler.js#default',\n input: {\n zod: '@kb-labs/release-manager-contracts#RunChecksRequestSchema',\n },\n output: {\n zod: '@kb-labs/release-manager-contracts#RunChecksResponseSchema',\n },\n timeoutMs: 600000, // 10 minutes - all checks combined\n },\n ],\n },\n\n // Studio V2 — Module Federation pages\n studio: {\n version: 2 as const,\n remoteName: 'releasePlugin',\n pages: [\n {\n id: 'release.overview',\n title: 'Release',\n icon: 'RocketOutlined',\n route: '/p/release',\n entry: './ReleasePage',\n order: 1,\n },\n ],\n menus: [\n {\n id: 'release',\n label: 'Release',\n icon: 'RocketOutlined',\n target: 'release.overview',\n order: 60,\n },\n ],\n },\n\n // Studio widgets (legacy - commented out, using new UI integration)\n // studio_legacy: {\n // widgets: [\n // {\n // id: 'release.plan',\n // kind: 'infopanel',\n // title: 'Latest Release Plan',\n // description: 'Shows the most recent release plan generated via `kb release plan`.',\n // data: {\n // source: {\n // type: 'rest',\n // routeId: 'plan/latest',\n // method: 'GET',\n // },\n // },\n // layoutHint: {\n // w: 4,\n // h: 5,\n // minW: 3,\n // minH: 3,\n // },\n // },\n // {\n // id: 'release.report',\n // kind: 'cardlist',\n // title: 'Release Report',\n // description: 'Status of the last release execution.',\n // data: {\n // source: {\n // type: 'rest',\n // routeId: 'report/latest',\n // method: 'GET',\n // },\n // },\n // options: {\n // layout: 'list',\n // },\n // layoutHint: {\n // w: 4,\n // h: 4,\n // minW: 3,\n // minH: 3,\n // },\n // },\n // ],\n // menus: [\n // {\n // id: 'release-menu',\n // label: 'Release',\n // icon: 'RocketOutlined',\n // target: '/plugins/release/dashboard',\n // order: 0,\n // },\n // {\n // id: 'release-dashboard',\n // label: 'Dashboard',\n // icon: 'DashboardOutlined',\n // parentId: 'release-menu',\n // target: '/plugins/release/dashboard',\n // order: 1,\n // },\n // ],\n // layouts: [\n // {\n // id: 'release.dashboard',\n // kind: 'grid',\n // title: 'Release Dashboard',\n // description: 'Overview of release planning and execution.',\n // config: {\n // cols: { sm: 2, md: 4, lg: 6 },\n // rowHeight: 5,\n // },\n // },\n // ],\n // },\n\n // Auto-detects kb.config.json section for useConfig()\n // maps to profiles[].products.release in kb.config.json\n configSection: 'release',\n\n capabilities: ['fs:read', 'fs:write'],\n\n // V3: Manifest-first permissions using composable presets\n permissions: pluginPermissions,\n\n // Workflow templates — composed from atomic release CLI commands\n // Registered in workflow engine and runnable via `kb workflow run plugin:@kb-labs/release/<id>`\n workflows: {\n handlers: [],\n templates: [\n {\n id: 'full-release',\n path: './workflows/templates/full-release.yaml',\n describe: 'Full release cycle: plan → checks → build → pack → approve → publish → git',\n tags: ['release', 'full'],\n },\n {\n id: 'hotfix',\n path: './workflows/templates/hotfix.yaml',\n describe: 'Quick hotfix: plan → approve → publish → git (patch bump, no checks)',\n tags: ['release', 'hotfix'],\n },\n {\n id: 'dry-run',\n path: './workflows/templates/dry-run.yaml',\n describe: 'Preview release: plan, checks, pack, changelog — no publish or git ops',\n tags: ['release', 'dry-run'],\n },\n ],\n },\n\n // Artifacts\n artifacts: [\n {\n id: 'release.plan.json',\n pathTemplate: '.kb/release/plan.json',\n description: 'Serialized release plan generated by `kb release plan`.',\n },\n {\n id: 'release.report.json',\n pathTemplate: '.kb/release/report.json',\n description: 'Execution report emitted by `kb release run`.',\n },\n {\n id: 'release.changelog.md',\n pathTemplate: '.kb/release/changelog.md',\n description: 'Workspace changelog output produced during release.',\n },\n ],\n};\n\nexport default manifest;\n"]}
@@ -295,10 +295,21 @@
295
295
  "name": "json",
296
296
  "type": "boolean",
297
297
  "description": "Output in JSON format"
298
+ },
299
+ {
300
+ "name": "additionalTarballs",
301
+ "type": "string",
302
+ "description": "Comma-separated tarball paths for workspace siblings. Forces pnpm to install these exact local artifacts via pnpm.overrides instead of resolving the same package names from the real npm registry — required with --package-manager pnpm to avoid silently testing an already-published, possibly stale, version of an in-repo sibling."
303
+ },
304
+ {
305
+ "name": "packageManager",
306
+ "type": "string",
307
+ "description": "\"pnpm\" enables the additionalTarballs override path; \"npm\" (default) keeps the plain Arborist install."
298
308
  }
299
309
  ],
300
310
  "examples": [
301
- "kb release clean install --tarball ./kb-labs-sdk-2.115.0.tgz --name @kb-labs/sdk"
311
+ "kb release clean install --tarball ./kb-labs-sdk-2.115.0.tgz --name @kb-labs/sdk",
312
+ "kb release clean install --tarball ./a.tgz --name @kb-labs/a --package-manager pnpm --additional-tarballs ./b.tgz,./c.tgz"
302
313
  ]
303
314
  },
304
315
  {
@@ -1143,7 +1154,7 @@
1143
1154
  },
1144
1155
  "quotas": {
1145
1156
  "timeoutMs": 1800000,
1146
- "memoryMb": 2048,
1157
+ "memoryMb": 4096,
1147
1158
  "cpuMs": 300000
1148
1159
  }
1149
1160
  },
@@ -4,6 +4,7 @@ import { RestInput } from '@kb-labs/sdk';
4
4
  declare const _default: _kb_labs_shared_command_kit.Handler<unknown, RestInput<unknown, {
5
5
  scope: string;
6
6
  useLLM: boolean;
7
+ flow?: string | undefined;
7
8
  from?: string | undefined;
8
9
  to?: string | undefined;
9
10
  template?: string | undefined;
@@ -1,6 +1,7 @@
1
- import { defineHandler, findRepoRoot, rethrowForRest } from '@kb-labs/sdk';
1
+ import { defineHandler, findRepoRoot, useConfig, rethrowForRest } from '@kb-labs/sdk';
2
2
  import { generateSimpleChangelog, generateChangelog } from '@kb-labs/release-manager-changelog';
3
3
  import { RELEASE_CACHE_PREFIX } from '@kb-labs/release-manager-contracts';
4
+ import { buildReleaseTag } from '@kb-labs/release-manager-core';
4
5
 
5
6
  // src/rest/handlers/changelog-generate-handler.ts
6
7
 
@@ -52,9 +53,7 @@ var ANALYTICS_ACTOR = {
52
53
  function scopeToDir(scope) {
53
54
  return scope.replace(/^@/, "").replace(/\//g, "-").replace(/:/g, "-").replace(/\*/g, "");
54
55
  }
55
-
56
- // src/rest/handlers/changelog-generate-handler.ts
57
- async function generateWithLLM(ctx, packages, repoRoot, gitCwd, locale, scope) {
56
+ async function generateWithLLM(ctx, packages, repoRoot, gitCwd, locale, scope, range) {
58
57
  try {
59
58
  ctx.platform?.logger?.info?.("Starting LLM changelog generation", {
60
59
  scope,
@@ -65,7 +64,7 @@ async function generateWithLLM(ctx, packages, repoRoot, gitCwd, locale, scope) {
65
64
  repoRoot,
66
65
  gitCwd,
67
66
  packages,
68
- range: { from: void 0, to: "HEAD" },
67
+ range,
69
68
  changelog: { template: "corporate-ai", locale },
70
69
  platform: {
71
70
  llm: ctx.platform.llm,
@@ -89,7 +88,7 @@ async function generateWithLLM(ctx, packages, repoRoot, gitCwd, locale, scope) {
89
88
  return { markdown: generateSimpleChangelog(packages, "en"), commitsCount: 0, usedLLM: false };
90
89
  }
91
90
  }
92
- async function resolveMarkdown(ctx, packages, repoRoot, gitCwd, locale, useLLMFlag, scope) {
91
+ async function resolveMarkdown(ctx, packages, repoRoot, gitCwd, locale, useLLMFlag, scope, range) {
93
92
  if (!useLLMFlag) {
94
93
  ctx.platform?.logger?.info?.("Using simple changelog (LLM disabled by user)", { scope });
95
94
  return { markdown: generateSimpleChangelog(packages, "en"), commitsCount: 0, usedLLM: false };
@@ -100,7 +99,7 @@ async function resolveMarkdown(ctx, packages, repoRoot, gitCwd, locale, useLLMFl
100
99
  ctx.platform?.logger?.warn?.("LLM service not available, falling back to simple changelog", { scope });
101
100
  return { markdown: generateSimpleChangelog(packages, "en"), commitsCount: 0, usedLLM: false };
102
101
  }
103
- return generateWithLLM(ctx, packages, repoRoot, gitCwd, locale, scope);
102
+ return generateWithLLM(ctx, packages, repoRoot, gitCwd, locale, scope, range);
104
103
  }
105
104
  async function resolveGitCwd(packages, repoRoot) {
106
105
  if (!packages.length || !packages[0]) {
@@ -134,6 +133,7 @@ var changelog_generate_handler_default = defineHandler({
134
133
  );
135
134
  throw new Error(`Release plan not found for scope "${scope}". Generate plan first.`);
136
135
  }
136
+ const flow = input.body?.flow ?? plan.flow;
137
137
  const packages = plan.packages.map((pkg) => ({
138
138
  name: pkg.name,
139
139
  path: pkg.path,
@@ -144,6 +144,12 @@ var changelog_generate_handler_default = defineHandler({
144
144
  const gitCwd = await resolveGitCwd(packages, repoRoot);
145
145
  const localeRaw = input.body?.locale;
146
146
  const locale = localeRaw === "ru" ? "ru" : "en";
147
+ const config = await useConfig() ?? {};
148
+ const range = {
149
+ from: input.body?.from,
150
+ to: input.body?.to ?? "HEAD",
151
+ tagGlob: flow ? buildReleaseTag(flow, "*", config.flows?.[flow]?.tagPattern) : void 0
152
+ };
147
153
  const { markdown, commitsCount, usedLLM } = await resolveMarkdown(
148
154
  ctx,
149
155
  packages,
@@ -151,7 +157,8 @@ var changelog_generate_handler_default = defineHandler({
151
157
  gitCwd,
152
158
  locale,
153
159
  input.body?.useLLM ?? true,
154
- scope
160
+ scope,
161
+ range
155
162
  );
156
163
  const scopeDir = `${repoRoot}/.kb/release/plans/${scopeDirName}/current`;
157
164
  await ctx.runtime.fs.mkdir(scopeDir, { recursive: true });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/infra/analytics/events.ts","../../../src/shared/utils.ts","../../../src/rest/handlers/changelog-generate-handler.ts"],"names":["findRepoRoot"],"mappings":"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","file":"changelog-generate-handler.js","sourcesContent":["/**\n * Analytics event types for Release CLI\n * Centralized constants to prevent typos and enable type safety\n */\n\n/**\n * Event type prefixes by command\n */\nexport const ANALYTICS_PREFIX = {\n PLAN: 'release.plan',\n RUN: 'release.run',\n ROLLBACK: 'release.rollback',\n REPORT: 'release.report',\n CHANGELOG: 'release.changelog',\n PREVIEW: 'release.preview',\n VERIFY: 'release.verify',\n PUBLISH: 'release.publish',\n} as const;\n\n/**\n * Event lifecycle suffixes\n */\nexport const ANALYTICS_SUFFIX = {\n STARTED: 'started',\n FINISHED: 'finished',\n} as const;\n\n/**\n * Release analytics event types\n */\nexport const ANALYTICS_EVENTS = {\n // Plan events\n PLAN_STARTED: `${ANALYTICS_PREFIX.PLAN}.${ANALYTICS_SUFFIX.STARTED}`,\n PLAN_FINISHED: `${ANALYTICS_PREFIX.PLAN}.${ANALYTICS_SUFFIX.FINISHED}`,\n\n // Run events\n RUN_STARTED: `${ANALYTICS_PREFIX.RUN}.${ANALYTICS_SUFFIX.STARTED}`,\n RUN_FINISHED: `${ANALYTICS_PREFIX.RUN}.${ANALYTICS_SUFFIX.FINISHED}`,\n\n // Rollback events\n ROLLBACK_STARTED: `${ANALYTICS_PREFIX.ROLLBACK}.${ANALYTICS_SUFFIX.STARTED}`,\n ROLLBACK_FINISHED: `${ANALYTICS_PREFIX.ROLLBACK}.${ANALYTICS_SUFFIX.FINISHED}`,\n\n // Report events\n REPORT_STARTED: `${ANALYTICS_PREFIX.REPORT}.${ANALYTICS_SUFFIX.STARTED}`,\n REPORT_FINISHED: `${ANALYTICS_PREFIX.REPORT}.${ANALYTICS_SUFFIX.FINISHED}`,\n\n // Changelog events\n CHANGELOG_STARTED: `${ANALYTICS_PREFIX.CHANGELOG}.${ANALYTICS_SUFFIX.STARTED}`,\n CHANGELOG_FINISHED: `${ANALYTICS_PREFIX.CHANGELOG}.${ANALYTICS_SUFFIX.FINISHED}`,\n\n // Preview events\n PREVIEW_STARTED: `${ANALYTICS_PREFIX.PREVIEW}.${ANALYTICS_SUFFIX.STARTED}`,\n PREVIEW_FINISHED: `${ANALYTICS_PREFIX.PREVIEW}.${ANALYTICS_SUFFIX.FINISHED}`,\n\n // Verify events\n VERIFY_STARTED: `${ANALYTICS_PREFIX.VERIFY}.${ANALYTICS_SUFFIX.STARTED}`,\n VERIFY_FINISHED: `${ANALYTICS_PREFIX.VERIFY}.${ANALYTICS_SUFFIX.FINISHED}`,\n\n // Publish events\n PUBLISH_STARTED: `${ANALYTICS_PREFIX.PUBLISH}.${ANALYTICS_SUFFIX.STARTED}`,\n PUBLISH_FINISHED: `${ANALYTICS_PREFIX.PUBLISH}.${ANALYTICS_SUFFIX.FINISHED}`,\n} as const;\n\n/**\n * Type helper for analytics event types\n */\nexport type AnalyticsEventType = typeof ANALYTICS_EVENTS[keyof typeof ANALYTICS_EVENTS];\n\n/**\n * Actor configuration for Release analytics\n */\nexport const ANALYTICS_ACTOR = {\n type: 'agent' as const,\n id: 'release-cli',\n} as const;\n\n","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 * Changelog generate handler - Generate changelog using LLM\n *\n * Writes: .kb/release/plans/{scope}/current/changelog.md\n */\n\nimport { defineHandler, findRepoRoot, type RestInput, type PluginContextV3, rethrowForRest } from '@kb-labs/sdk';\nimport type {\n GenerateChangelogRequest,\n GenerateChangelogResponse,\n ReleasePlan,\n} from '@kb-labs/release-manager-contracts';\nimport {\n generateChangelog,\n generateSimpleChangelog,\n type ChangelogPackageInfo,\n} from '@kb-labs/release-manager-changelog';\nimport { ANALYTICS_EVENTS, ANALYTICS_ACTOR } from '../../infra/analytics/events';\nimport { RELEASE_CACHE_PREFIX } from '@kb-labs/release-manager-contracts';\nimport { scopeToDir } from '../../shared/utils';\n\n// ── helpers ────────────────────────────────────────────────────────────────\n\ninterface GenerateResult {\n markdown: string;\n commitsCount: number;\n usedLLM: boolean;\n}\n\nasync function generateWithLLM(\n ctx: PluginContextV3,\n packages: ChangelogPackageInfo[],\n repoRoot: string,\n gitCwd: string,\n locale: 'en' | 'ru',\n scope: string,\n): Promise<GenerateResult> {\n try {\n ctx.platform?.logger?.info?.('Starting LLM changelog generation', {\n scope,\n packagesCount: packages.length,\n template: 'corporate-ai',\n });\n const result = await generateChangelog({\n repoRoot,\n gitCwd,\n packages,\n range: { from: undefined, to: 'HEAD' },\n changelog: { template: 'corporate-ai', locale },\n platform: {\n llm: ctx.platform.llm,\n logger: ctx.platform.logger,\n analytics: ctx.platform.analytics,\n },\n });\n ctx.platform?.logger?.info?.('LLM changelog generated', {\n scope,\n markdownLength: result.markdown.length,\n linesCount: result.markdown.split('\\n').length,\n commitsCount: result.changes.length,\n });\n return { markdown: result.markdown, commitsCount: result.changes.length, usedLLM: true };\n } catch (err) {\n ctx.platform?.logger?.error?.(\n 'Changelog generation failed, using simple fallback',\n err instanceof Error ? err : undefined,\n { scope, packagesCount: packages.length },\n );\n return { markdown: generateSimpleChangelog(packages, 'en'), commitsCount: 0, usedLLM: false };\n }\n}\n\nasync function resolveMarkdown(\n ctx: PluginContextV3,\n packages: ChangelogPackageInfo[],\n repoRoot: string,\n gitCwd: string,\n locale: 'en' | 'ru',\n useLLMFlag: boolean,\n scope: string,\n): Promise<GenerateResult> {\n if (!useLLMFlag) {\n ctx.platform?.logger?.info?.('Using simple changelog (LLM disabled by user)', { scope });\n return { markdown: generateSimpleChangelog(packages, 'en'), commitsCount: 0, usedLLM: false };\n }\n const hasLLM = !!ctx.platform?.llm;\n ctx.platform?.logger?.info?.('Changelog generation mode', { scope, useLLM: useLLMFlag, hasLLMPlatform: hasLLM });\n if (!hasLLM) {\n ctx.platform?.logger?.warn?.('LLM service not available, falling back to simple changelog', { scope });\n return { markdown: generateSimpleChangelog(packages, 'en'), commitsCount: 0, usedLLM: false };\n }\n return generateWithLLM(ctx, packages, repoRoot, gitCwd, locale, scope);\n}\n\nasync function resolveGitCwd(packages: ChangelogPackageInfo[], repoRoot: string): Promise<string> {\n if (!packages.length || !packages[0]) { return repoRoot; }\n try {\n return await findRepoRoot(packages[0].path);\n } catch {\n return packages[0].path;\n }\n}\n\n// ── handler ────────────────────────────────────────────────────────────────\n\nexport default defineHandler({\n async execute(ctx, input: RestInput<unknown, GenerateChangelogRequest>): Promise<GenerateChangelogResponse> {\n try {\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 ctx.platform?.analytics?.track?.(ANALYTICS_EVENTS.CHANGELOG_STARTED, { scope, actor: ANALYTICS_ACTOR });\n\n const scopeDirName = scopeToDir(scope);\n const planPath = `${repoRoot}/.kb/release/plans/${scopeDirName}/current/plan.json`;\n let plan: ReleasePlan;\n try {\n const planContent = await ctx.runtime.fs.readFile(planPath, 'utf-8');\n plan = JSON.parse(planContent);\n } catch (err) {\n ctx.platform?.logger?.error?.(\n 'Failed to read release plan',\n err instanceof Error ? err : undefined,\n { scope, planPath },\n );\n throw new Error(`Release plan not found for scope \"${scope}\". Generate plan first.`);\n }\n\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\n const gitCwd = await resolveGitCwd(packages, repoRoot);\n\n const localeRaw = input.body?.locale;\n const locale: 'en' | 'ru' = localeRaw === 'ru' ? 'ru' : 'en';\n\n const { markdown, commitsCount, usedLLM } = await resolveMarkdown(\n ctx,\n packages,\n repoRoot,\n gitCwd,\n locale,\n input.body?.useLLM ?? true,\n scope,\n );\n\n const scopeDir = `${repoRoot}/.kb/release/plans/${scopeDirName}/current`;\n await ctx.runtime.fs.mkdir(scopeDir, { recursive: true });\n\n const changelogPath = `${scopeDir}/changelog.md`;\n await ctx.runtime.fs.writeFile(changelogPath, markdown, { encoding: 'utf-8' });\n\n const cacheKey = `${RELEASE_CACHE_PREFIX}changelog:${scope}`;\n await ctx.platform?.cache?.delete(cacheKey);\n\n const duration = Date.now() - startTime;\n const tokensUsed = 0;\n\n ctx.platform?.logger?.info?.('Changelog generated', {\n scope, path: changelogPath, packagesCount: packages.length,\n commitsCount, usedLLM, durationMs: duration,\n });\n\n ctx.platform?.analytics?.track?.(ANALYTICS_EVENTS.CHANGELOG_FINISHED, {\n scope, packagesCount: packages.length, commitsCount,\n durationMs: duration, tokensUsed, usedLLM, actor: ANALYTICS_ACTOR,\n });\n\n return { scope, markdown, changelogPath, tokensUsed, usedLLM, commitsCount };\n } catch (err) {\n rethrowForRest(err);\n }\n }\n});\n"]}
1
+ {"version":3,"sources":["../../../src/infra/analytics/events.ts","../../../src/shared/utils.ts","../../../src/rest/handlers/changelog-generate-handler.ts"],"names":["findRepoRoot"],"mappings":"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","file":"changelog-generate-handler.js","sourcesContent":["/**\n * Analytics event types for Release CLI\n * Centralized constants to prevent typos and enable type safety\n */\n\n/**\n * Event type prefixes by command\n */\nexport const ANALYTICS_PREFIX = {\n PLAN: 'release.plan',\n RUN: 'release.run',\n ROLLBACK: 'release.rollback',\n REPORT: 'release.report',\n CHANGELOG: 'release.changelog',\n PREVIEW: 'release.preview',\n VERIFY: 'release.verify',\n PUBLISH: 'release.publish',\n} as const;\n\n/**\n * Event lifecycle suffixes\n */\nexport const ANALYTICS_SUFFIX = {\n STARTED: 'started',\n FINISHED: 'finished',\n} as const;\n\n/**\n * Release analytics event types\n */\nexport const ANALYTICS_EVENTS = {\n // Plan events\n PLAN_STARTED: `${ANALYTICS_PREFIX.PLAN}.${ANALYTICS_SUFFIX.STARTED}`,\n PLAN_FINISHED: `${ANALYTICS_PREFIX.PLAN}.${ANALYTICS_SUFFIX.FINISHED}`,\n\n // Run events\n RUN_STARTED: `${ANALYTICS_PREFIX.RUN}.${ANALYTICS_SUFFIX.STARTED}`,\n RUN_FINISHED: `${ANALYTICS_PREFIX.RUN}.${ANALYTICS_SUFFIX.FINISHED}`,\n\n // Rollback events\n ROLLBACK_STARTED: `${ANALYTICS_PREFIX.ROLLBACK}.${ANALYTICS_SUFFIX.STARTED}`,\n ROLLBACK_FINISHED: `${ANALYTICS_PREFIX.ROLLBACK}.${ANALYTICS_SUFFIX.FINISHED}`,\n\n // Report events\n REPORT_STARTED: `${ANALYTICS_PREFIX.REPORT}.${ANALYTICS_SUFFIX.STARTED}`,\n REPORT_FINISHED: `${ANALYTICS_PREFIX.REPORT}.${ANALYTICS_SUFFIX.FINISHED}`,\n\n // Changelog events\n CHANGELOG_STARTED: `${ANALYTICS_PREFIX.CHANGELOG}.${ANALYTICS_SUFFIX.STARTED}`,\n CHANGELOG_FINISHED: `${ANALYTICS_PREFIX.CHANGELOG}.${ANALYTICS_SUFFIX.FINISHED}`,\n\n // Preview events\n PREVIEW_STARTED: `${ANALYTICS_PREFIX.PREVIEW}.${ANALYTICS_SUFFIX.STARTED}`,\n PREVIEW_FINISHED: `${ANALYTICS_PREFIX.PREVIEW}.${ANALYTICS_SUFFIX.FINISHED}`,\n\n // Verify events\n VERIFY_STARTED: `${ANALYTICS_PREFIX.VERIFY}.${ANALYTICS_SUFFIX.STARTED}`,\n VERIFY_FINISHED: `${ANALYTICS_PREFIX.VERIFY}.${ANALYTICS_SUFFIX.FINISHED}`,\n\n // Publish events\n PUBLISH_STARTED: `${ANALYTICS_PREFIX.PUBLISH}.${ANALYTICS_SUFFIX.STARTED}`,\n PUBLISH_FINISHED: `${ANALYTICS_PREFIX.PUBLISH}.${ANALYTICS_SUFFIX.FINISHED}`,\n} as const;\n\n/**\n * Type helper for analytics event types\n */\nexport type AnalyticsEventType = typeof ANALYTICS_EVENTS[keyof typeof ANALYTICS_EVENTS];\n\n/**\n * Actor configuration for Release analytics\n */\nexport const ANALYTICS_ACTOR = {\n type: 'agent' as const,\n id: 'release-cli',\n} as const;\n\n","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 * Changelog generate handler - Generate changelog using LLM\n *\n * Writes: .kb/release/plans/{scope}/current/changelog.md\n */\n\nimport { defineHandler, findRepoRoot, type RestInput, type PluginContextV3, rethrowForRest, useConfig } from '@kb-labs/sdk';\nimport type {\n GenerateChangelogRequest,\n GenerateChangelogResponse,\n ReleasePlan,\n} from '@kb-labs/release-manager-contracts';\nimport {\n generateChangelog,\n generateSimpleChangelog,\n type ChangelogPackageInfo,\n} from '@kb-labs/release-manager-changelog';\nimport { ANALYTICS_EVENTS, ANALYTICS_ACTOR } from '../../infra/analytics/events';\nimport { RELEASE_CACHE_PREFIX } from '@kb-labs/release-manager-contracts';\nimport { scopeToDir } from '../../shared/utils';\nimport { buildReleaseTag, type ReleaseConfig } from '@kb-labs/release-manager-core';\n\n// ── helpers ────────────────────────────────────────────────────────────────\n\ninterface GenerateResult {\n markdown: string;\n commitsCount: number;\n usedLLM: boolean;\n}\n\nasync function generateWithLLM(\n ctx: PluginContextV3,\n packages: ChangelogPackageInfo[],\n repoRoot: string,\n gitCwd: string,\n locale: 'en' | 'ru',\n scope: string,\n range: { from?: string; to?: string; tagGlob?: string },\n): Promise<GenerateResult> {\n try {\n ctx.platform?.logger?.info?.('Starting LLM changelog generation', {\n scope,\n packagesCount: packages.length,\n template: 'corporate-ai',\n });\n const result = await generateChangelog({\n repoRoot,\n gitCwd,\n packages,\n range,\n changelog: { template: 'corporate-ai', locale },\n platform: {\n llm: ctx.platform.llm,\n logger: ctx.platform.logger,\n analytics: ctx.platform.analytics,\n },\n });\n ctx.platform?.logger?.info?.('LLM changelog generated', {\n scope,\n markdownLength: result.markdown.length,\n linesCount: result.markdown.split('\\n').length,\n commitsCount: result.changes.length,\n });\n return { markdown: result.markdown, commitsCount: result.changes.length, usedLLM: true };\n } catch (err) {\n ctx.platform?.logger?.error?.(\n 'Changelog generation failed, using simple fallback',\n err instanceof Error ? err : undefined,\n { scope, packagesCount: packages.length },\n );\n return { markdown: generateSimpleChangelog(packages, 'en'), commitsCount: 0, usedLLM: false };\n }\n}\n\nasync function resolveMarkdown(\n ctx: PluginContextV3,\n packages: ChangelogPackageInfo[],\n repoRoot: string,\n gitCwd: string,\n locale: 'en' | 'ru',\n useLLMFlag: boolean,\n scope: string,\n range: { from?: string; to?: string; tagGlob?: string },\n): Promise<GenerateResult> {\n if (!useLLMFlag) {\n ctx.platform?.logger?.info?.('Using simple changelog (LLM disabled by user)', { scope });\n return { markdown: generateSimpleChangelog(packages, 'en'), commitsCount: 0, usedLLM: false };\n }\n const hasLLM = !!ctx.platform?.llm;\n ctx.platform?.logger?.info?.('Changelog generation mode', { scope, useLLM: useLLMFlag, hasLLMPlatform: hasLLM });\n if (!hasLLM) {\n ctx.platform?.logger?.warn?.('LLM service not available, falling back to simple changelog', { scope });\n return { markdown: generateSimpleChangelog(packages, 'en'), commitsCount: 0, usedLLM: false };\n }\n return generateWithLLM(ctx, packages, repoRoot, gitCwd, locale, scope, range);\n}\n\nasync function resolveGitCwd(packages: ChangelogPackageInfo[], repoRoot: string): Promise<string> {\n if (!packages.length || !packages[0]) { return repoRoot; }\n try {\n return await findRepoRoot(packages[0].path);\n } catch {\n return packages[0].path;\n }\n}\n\n// ── handler ────────────────────────────────────────────────────────────────\n\nexport default defineHandler({\n async execute(ctx, input: RestInput<unknown, GenerateChangelogRequest>): Promise<GenerateChangelogResponse> {\n try {\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 ctx.platform?.analytics?.track?.(ANALYTICS_EVENTS.CHANGELOG_STARTED, { scope, actor: ANALYTICS_ACTOR });\n\n const scopeDirName = scopeToDir(scope);\n const planPath = `${repoRoot}/.kb/release/plans/${scopeDirName}/current/plan.json`;\n let plan: ReleasePlan;\n try {\n const planContent = await ctx.runtime.fs.readFile(planPath, 'utf-8');\n plan = JSON.parse(planContent);\n } catch (err) {\n ctx.platform?.logger?.error?.(\n 'Failed to read release plan',\n err instanceof Error ? err : undefined,\n { scope, planPath },\n );\n throw new Error(`Release plan not found for scope \"${scope}\". Generate plan first.`);\n }\n // Studio normally regenerates from the persisted plan, while API callers\n // may override its flow explicitly. Either way, stay on the same tag\n // family that produced the plan rather than guessing across all tags.\n const flow = input.body?.flow ?? plan.flow;\n\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\n const gitCwd = await resolveGitCwd(packages, repoRoot);\n\n const localeRaw = input.body?.locale;\n const locale: 'en' | 'ru' = localeRaw === 'ru' ? 'ru' : 'en';\n const config = await useConfig<ReleaseConfig>() ?? {};\n const range = {\n from: input.body?.from,\n to: input.body?.to ?? 'HEAD',\n tagGlob: flow ? buildReleaseTag(flow, '*', config.flows?.[flow]?.tagPattern) : undefined,\n };\n\n const { markdown, commitsCount, usedLLM } = await resolveMarkdown(\n ctx,\n packages,\n repoRoot,\n gitCwd,\n locale,\n input.body?.useLLM ?? true,\n scope,\n range,\n );\n\n const scopeDir = `${repoRoot}/.kb/release/plans/${scopeDirName}/current`;\n await ctx.runtime.fs.mkdir(scopeDir, { recursive: true });\n\n const changelogPath = `${scopeDir}/changelog.md`;\n await ctx.runtime.fs.writeFile(changelogPath, markdown, { encoding: 'utf-8' });\n\n const cacheKey = `${RELEASE_CACHE_PREFIX}changelog:${scope}`;\n await ctx.platform?.cache?.delete(cacheKey);\n\n const duration = Date.now() - startTime;\n const tokensUsed = 0;\n\n ctx.platform?.logger?.info?.('Changelog generated', {\n scope, path: changelogPath, packagesCount: packages.length,\n commitsCount, usedLLM, durationMs: duration,\n });\n\n ctx.platform?.analytics?.track?.(ANALYTICS_EVENTS.CHANGELOG_FINISHED, {\n scope, packagesCount: packages.length, commitsCount,\n durationMs: duration, tokensUsed, usedLLM, actor: ANALYTICS_ACTOR,\n });\n\n return { scope, markdown, changelogPath, tokensUsed, usedLLM, commitsCount };\n } catch (err) {\n rethrowForRest(err);\n }\n }\n});\n"]}
@@ -26,6 +26,7 @@ declare const _default: _kb_labs_shared_command_kit.Handler<unknown, RestInput<u
26
26
  rollbackEnabled: boolean;
27
27
  channel: "stable" | "canary";
28
28
  createdAt: string;
29
+ flow?: string | undefined;
29
30
  };
30
31
  scope: string;
31
32
  planPath: string;
@@ -14,12 +14,13 @@ var history_changelog_handler_default = defineHandler({
14
14
  const cwd = ctx.cwd ?? process.cwd();
15
15
  const repoRoot = await findRepoRoot(cwd);
16
16
  const scopeDir = scopeToDir(scope);
17
- const changelogPath = join(repoRoot, ".kb/release/history", scopeDir, id, "changelog.md");
17
+ const reportPath = join(repoRoot, ".kb/release/history", scopeDir, id, "report.json");
18
18
  try {
19
- const markdown = await readFile(changelogPath, "utf-8");
19
+ const reportRaw = await readFile(reportPath, "utf-8");
20
+ const report = JSON.parse(reportRaw);
20
21
  return {
21
22
  id,
22
- markdown,
23
+ markdown: report.result?.changelog ?? "",
23
24
  scope
24
25
  };
25
26
  } catch (error) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/shared/utils.ts","../../../src/rest/handlers/history-changelog-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;;;ACKA,IAAO,oCAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CAAQ,GAAA,EAAK,KAAA,EAA+F;AAChH,IAAA,MAAM,EAAE,KAAA,EAAO,EAAA,EAAG,GAAI,KAAA,CAAM,MAAA;AAC5B,IAAA,MAAM,GAAA,GAAM,GAAA,CAAI,GAAA,IAAO,OAAA,CAAQ,GAAA,EAAI;AACnC,IAAA,MAAM,QAAA,GAAW,MAAMA,YAAAA,CAAa,GAAG,CAAA;AAEvC,IAAA,MAAM,QAAA,GAAW,WAAW,KAAK,CAAA;AACjC,IAAA,MAAM,gBAAgB,IAAA,CAAK,QAAA,EAAU,qBAAA,EAAuB,QAAA,EAAU,IAAI,cAAc,CAAA;AAExF,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,QAAA,CAAS,aAAA,EAAe,OAAO,CAAA;AAEtD,MAAA,OAAO;AAAA,QACL,EAAA;AAAA,QACA,QAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,cAAA,CAAe,KAAK,CAAA;AAAA,IACtB;AAAA,EACF;AACF,CAAC","file":"history-changelog-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 * History changelog handler - Get specific changelog from history\n *\n * Reads: .kb/release/history/{scope}/{id}/changelog.md\n */\n\nimport { defineHandler, findRepoRoot, type RestInput, rethrowForRest } from '@kb-labs/sdk';\nimport type { HistoryChangelogResponse } from '@kb-labs/release-manager-contracts';\nimport { readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { scopeToDir } from '../../shared/utils';\n\nexport interface HistoryChangelogParams {\n scope: string; // Scope (e.g., \"root\" or \"@kb-labs/shared\")\n id: string; // Release ID (folder name like 2026-01-04T12-30-00Z)\n}\n\nexport default defineHandler({\n async execute(ctx, input: RestInput<unknown, unknown, HistoryChangelogParams>): Promise<HistoryChangelogResponse> {\n const { scope, id } = input.params!;\n const cwd = ctx.cwd ?? process.cwd();\n const repoRoot = await findRepoRoot(cwd);\n\n const scopeDir = scopeToDir(scope);\n const changelogPath = join(repoRoot, '.kb/release/history', scopeDir, id, 'changelog.md');\n\n try {\n const markdown = await readFile(changelogPath, 'utf-8');\n\n return {\n id,\n markdown,\n scope,\n };\n } catch (error) {\n rethrowForRest(error);\n }\n }\n});\n"]}
1
+ {"version":3,"sources":["../../../src/shared/utils.ts","../../../src/rest/handlers/history-changelog-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;;;ACWA,IAAO,oCAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CAAQ,GAAA,EAAK,KAAA,EAA+F;AAChH,IAAA,MAAM,EAAE,KAAA,EAAO,EAAA,EAAG,GAAI,KAAA,CAAM,MAAA;AAC5B,IAAA,MAAM,GAAA,GAAM,GAAA,CAAI,GAAA,IAAO,OAAA,CAAQ,GAAA,EAAI;AACnC,IAAA,MAAM,QAAA,GAAW,MAAMA,YAAAA,CAAa,GAAG,CAAA;AAEvC,IAAA,MAAM,QAAA,GAAW,WAAW,KAAK,CAAA;AACjC,IAAA,MAAM,aAAa,IAAA,CAAK,QAAA,EAAU,qBAAA,EAAuB,QAAA,EAAU,IAAI,aAAa,CAAA;AAEpF,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,GAAY,MAAM,QAAA,CAAS,UAAA,EAAY,OAAO,CAAA;AACpD,MAAA,MAAM,MAAA,GAAwB,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA;AAElD,MAAA,OAAO;AAAA,QACL,EAAA;AAAA,QACA,QAAA,EAAU,MAAA,CAAO,MAAA,EAAQ,SAAA,IAAa,EAAA;AAAA,QACtC;AAAA,OACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,cAAA,CAAe,KAAK,CAAA;AAAA,IACtB;AAAA,EACF;AACF,CAAC","file":"history-changelog-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 * History changelog handler - Get specific changelog from history\n *\n * Reads: .kb/release/history/{scope}/{id}/report.json\n *\n * The changelog is never persisted as a standalone changelog.md — it's\n * embedded in the release report at result.changelog. It's legitimately\n * absent for some releases (e.g. canary channel skips changelog generation\n * — see pipeline.ts), in which case we return an empty string rather than\n * throwing; the caller distinguishes \"no changelog\" from \"release not found\".\n */\n\nimport { defineHandler, findRepoRoot, type RestInput, rethrowForRest } from '@kb-labs/sdk';\nimport type { HistoryChangelogResponse, ReleaseReport } from '@kb-labs/release-manager-contracts';\nimport { readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { scopeToDir } from '../../shared/utils';\n\nexport interface HistoryChangelogParams {\n scope: string; // Scope (e.g., \"root\" or \"@kb-labs/shared\")\n id: string; // Release ID (folder name like 2026-01-04T12-30-00Z)\n}\n\nexport default defineHandler({\n async execute(ctx, input: RestInput<unknown, unknown, HistoryChangelogParams>): Promise<HistoryChangelogResponse> {\n const { scope, id } = input.params!;\n const cwd = ctx.cwd ?? process.cwd();\n const repoRoot = await findRepoRoot(cwd);\n\n const scopeDir = scopeToDir(scope);\n const reportPath = join(repoRoot, '.kb/release/history', scopeDir, id, 'report.json');\n\n try {\n const reportRaw = await readFile(reportPath, 'utf-8');\n const report: ReleaseReport = JSON.parse(reportRaw);\n\n return {\n id,\n markdown: report.result?.changelog ?? '',\n scope,\n };\n } catch (error) {\n rethrowForRest(error);\n }\n }\n});\n"]}
@@ -12,6 +12,8 @@ declare const _default: _kb_labs_shared_command_kit.Handler<unknown, RestInput<H
12
12
  success: boolean;
13
13
  stage: "rollback" | "planning" | "checking" | "versioning" | "publishing" | "verifying";
14
14
  timestamp: string;
15
+ channel?: "stable" | "canary" | undefined;
16
+ flow?: string | undefined;
15
17
  version?: string | undefined;
16
18
  error?: string | undefined;
17
19
  }[];
@@ -55,7 +55,9 @@ var history_handler_default = defineHandler({
55
55
  packages: report.result?.published || [],
56
56
  success: report.result?.ok || false,
57
57
  stage: report.stage,
58
- error: report.result?.errors?.[0]
58
+ error: report.result?.errors?.[0],
59
+ channel: report.plan?.channel,
60
+ flow: report.plan?.flow
59
61
  });
60
62
  } catch {
61
63
  continue;