@kb-labs/release-manager-cli 2.82.0 → 2.87.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/dist/cli/commands/build.d.ts +10 -0
  2. package/dist/cli/commands/build.js +87 -0
  3. package/dist/cli/commands/build.js.map +1 -0
  4. package/dist/cli/commands/changelog.js +65 -57
  5. package/dist/cli/commands/changelog.js.map +1 -1
  6. package/dist/cli/commands/checks.d.ts +10 -0
  7. package/dist/cli/commands/checks.js +93 -0
  8. package/dist/cli/commands/checks.js.map +1 -0
  9. package/dist/cli/commands/git.d.ts +13 -0
  10. package/dist/cli/commands/git.js +93 -0
  11. package/dist/cli/commands/git.js.map +1 -0
  12. package/dist/cli/commands/pack.d.ts +10 -0
  13. package/dist/cli/commands/pack.js +83 -0
  14. package/dist/cli/commands/pack.js.map +1 -0
  15. package/dist/cli/commands/plan.js +40 -41
  16. package/dist/cli/commands/plan.js.map +1 -1
  17. package/dist/cli/commands/publish.js +225 -194
  18. package/dist/cli/commands/publish.js.map +1 -1
  19. package/dist/cli/commands/report.js +28 -31
  20. package/dist/cli/commands/report.js.map +1 -1
  21. package/dist/cli/commands/rollback.js +0 -3
  22. package/dist/cli/commands/rollback.js.map +1 -1
  23. package/dist/cli/commands/run.js +386 -300
  24. package/dist/cli/commands/run.js.map +1 -1
  25. package/dist/cli/commands/verify.js +29 -28
  26. package/dist/cli/commands/verify.js.map +1 -1
  27. package/dist/cli/commands/version.d.ts +12 -0
  28. package/dist/cli/commands/version.js +111 -0
  29. package/dist/cli/commands/version.js.map +1 -0
  30. package/dist/index.d.ts +6 -5
  31. package/dist/index.js +146 -13
  32. package/dist/index.js.map +1 -1
  33. package/dist/manifest.d.ts +9 -0
  34. package/dist/manifest.js +131 -0
  35. package/dist/manifest.js.map +1 -1
  36. package/dist/rest/handlers/build-handler.js +22 -20
  37. package/dist/rest/handlers/build-handler.js.map +1 -1
  38. package/dist/rest/handlers/changelog-generate-handler.js +75 -88
  39. package/dist/rest/handlers/changelog-generate-handler.js.map +1 -1
  40. package/dist/rest/handlers/changelog-handler.js +1 -4
  41. package/dist/rest/handlers/changelog-handler.js.map +1 -1
  42. package/dist/rest/handlers/changelog-save-handler.js +0 -2
  43. package/dist/rest/handlers/changelog-save-handler.js.map +1 -1
  44. package/dist/rest/handlers/checklist-handler.js +113 -99
  45. package/dist/rest/handlers/checklist-handler.js.map +1 -1
  46. package/dist/rest/handlers/generate-handler.js +0 -3
  47. package/dist/rest/handlers/generate-handler.js.map +1 -1
  48. package/dist/rest/handlers/git-timeline-handler.js.map +1 -1
  49. package/dist/rest/handlers/history-changelog-handler.js +0 -1
  50. package/dist/rest/handlers/history-changelog-handler.js.map +1 -1
  51. package/dist/rest/handlers/history-handler.js +2 -3
  52. package/dist/rest/handlers/history-handler.js.map +1 -1
  53. package/dist/rest/handlers/history-plan-handler.js +0 -1
  54. package/dist/rest/handlers/history-plan-handler.js.map +1 -1
  55. package/dist/rest/handlers/history-report-handler.js +0 -1
  56. package/dist/rest/handlers/history-report-handler.js.map +1 -1
  57. package/dist/rest/handlers/plan-handler.js +0 -3
  58. package/dist/rest/handlers/plan-handler.js.map +1 -1
  59. package/dist/rest/handlers/preview-handler.js +0 -1
  60. package/dist/rest/handlers/preview-handler.js.map +1 -1
  61. package/dist/rest/handlers/report-handler.js +1 -1
  62. package/dist/rest/handlers/report-handler.js.map +1 -1
  63. package/dist/rest/handlers/reset-handler.js +0 -1
  64. package/dist/rest/handlers/reset-handler.js.map +1 -1
  65. package/dist/rest/handlers/run-checks-handler.js +0 -1
  66. package/dist/rest/handlers/run-checks-handler.js.map +1 -1
  67. package/dist/rest/handlers/run-handler.js +72 -52
  68. package/dist/rest/handlers/run-handler.js.map +1 -1
  69. package/dist/rest/handlers/status-handler.js +0 -2
  70. package/dist/rest/handlers/status-handler.js.map +1 -1
  71. package/dist/setup/handler.js.map +1 -1
  72. package/package.json +9 -8
package/dist/manifest.js CHANGED
@@ -241,6 +241,112 @@ var manifest = {
241
241
  "kb release verify --fail-if-empty",
242
242
  "kb release verify --allow-types feat,fix"
243
243
  ]
244
+ },
245
+ // release:checks - Run pre-release checks
246
+ {
247
+ id: "checks",
248
+ group: "release",
249
+ describe: "Run pre-release checks from release config",
250
+ longDescription: "Execute custom checks defined in release config (lint, test, audit, etc.)",
251
+ handler: "./cli/commands/checks.js#default",
252
+ handlerPath: "./cli/commands/checks.js",
253
+ flags: defineCommandFlags({
254
+ scope: { type: "string", description: "Package scope (glob pattern)" },
255
+ json: { type: "boolean", description: "Output in JSON format" }
256
+ }),
257
+ examples: [
258
+ "kb release checks",
259
+ "kb release checks --scope @my-org/core",
260
+ "kb release checks --json"
261
+ ]
262
+ },
263
+ // release:build - Build packages
264
+ {
265
+ id: "build",
266
+ group: "release",
267
+ describe: "Build packages from release plan using safe build strategy",
268
+ longDescription: "Build all packages in plan into temp dir then atomically swap dist/",
269
+ handler: "./cli/commands/build.js#default",
270
+ handlerPath: "./cli/commands/build.js",
271
+ flags: defineCommandFlags({
272
+ scope: { type: "string", description: "Package scope (glob pattern)" },
273
+ json: { type: "boolean", description: "Output in JSON format" }
274
+ }),
275
+ examples: [
276
+ "kb release build",
277
+ "kb release build --scope platform",
278
+ "kb release build --json"
279
+ ]
280
+ },
281
+ // release:pack - Verify npm artifacts
282
+ {
283
+ id: "pack",
284
+ group: "release",
285
+ describe: "Verify built package artifacts via npm pack",
286
+ longDescription: "Run npm pack checks: directory imports, test file leaks, missing exports, syntax errors",
287
+ handler: "./cli/commands/pack.js#default",
288
+ handlerPath: "./cli/commands/pack.js",
289
+ flags: defineCommandFlags({
290
+ scope: { type: "string", description: "Package scope (glob pattern)" },
291
+ json: { type: "boolean", description: "Output in JSON format" }
292
+ }),
293
+ examples: [
294
+ "kb release pack",
295
+ "kb release pack --scope @my-org/core",
296
+ "kb release pack --json"
297
+ ]
298
+ },
299
+ // release:version - Bump package.json versions
300
+ {
301
+ id: "version",
302
+ group: "release",
303
+ describe: "Bump package.json versions according to release plan",
304
+ longDescription: "Update version fields in package.json files based on computed plan",
305
+ handler: "./cli/commands/version.js#default",
306
+ handlerPath: "./cli/commands/version.js",
307
+ flags: defineCommandFlags({
308
+ scope: { type: "string", description: "Package scope (glob pattern)" },
309
+ bump: {
310
+ type: "string",
311
+ choices: ["patch", "minor", "major", "auto"],
312
+ default: "auto",
313
+ description: "Version bump override"
314
+ },
315
+ "dry-run": { type: "boolean", description: "Show what would be bumped without writing" },
316
+ json: { type: "boolean", description: "Output in JSON format" }
317
+ }),
318
+ examples: [
319
+ "kb release version",
320
+ "kb release version --bump minor",
321
+ "kb release version --dry-run",
322
+ "kb release version --scope platform --json"
323
+ ]
324
+ },
325
+ // release:git - Commit, tag, push
326
+ {
327
+ id: "git",
328
+ group: "release",
329
+ describe: "Commit, tag, and push release changes",
330
+ longDescription: "Create release commit, create version tags, and push to remote",
331
+ handler: "./cli/commands/git.js#default",
332
+ handlerPath: "./cli/commands/git.js",
333
+ flags: defineCommandFlags({
334
+ scope: { type: "string", description: "Package scope (glob pattern)" },
335
+ bump: {
336
+ type: "string",
337
+ choices: ["patch", "minor", "major", "auto"],
338
+ description: "Version bump override (used to reload plan)"
339
+ },
340
+ "dry-run": { type: "boolean", description: "Skip git operations" },
341
+ "no-verify": { type: "boolean", description: "Pass --no-verify to git push" },
342
+ json: { type: "boolean", description: "Output in JSON format" }
343
+ }),
344
+ examples: [
345
+ "kb release git",
346
+ "kb release git --scope platform",
347
+ "kb release git --dry-run",
348
+ "kb release git --no-verify --json"
349
+ ]
244
350
  }
245
351
  ]
246
352
  },
@@ -592,6 +698,31 @@ var manifest = {
592
698
  capabilities: ["fs:read", "fs:write"],
593
699
  // V3: Manifest-first permissions using composable presets
594
700
  permissions: pluginPermissions,
701
+ // Workflow templates — composed from atomic release CLI commands
702
+ // Registered in workflow engine and runnable via `kb workflow run plugin:@kb-labs/release/<id>`
703
+ workflows: {
704
+ handlers: [],
705
+ templates: [
706
+ {
707
+ id: "full-release",
708
+ path: "./workflows/templates/full-release.yaml",
709
+ describe: "Full release cycle: plan \u2192 checks \u2192 build \u2192 pack \u2192 approve \u2192 publish \u2192 git",
710
+ tags: ["release", "full"]
711
+ },
712
+ {
713
+ id: "hotfix",
714
+ path: "./workflows/templates/hotfix.yaml",
715
+ describe: "Quick hotfix: plan \u2192 approve \u2192 publish \u2192 git (patch bump, no checks)",
716
+ tags: ["release", "hotfix"]
717
+ },
718
+ {
719
+ id: "dry-run",
720
+ path: "./workflows/templates/dry-run.yaml",
721
+ describe: "Preview release: plan, checks, pack, changelog \u2014 no publish or git ops",
722
+ tags: ["release", "dry-run"]
723
+ }
724
+ ]
725
+ },
595
726
  // Artifacts
596
727
  artifacts: [
597
728
  {
@@ -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';\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: ['git', 'npm'], // git: timeline/tagging/commits, npm: publish packages\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 handlerPath: './setup/handler.js',\n describe: 'Prepare the .kb/release workspace (plans, reports, backups).',\n },\n\n // CLI commands - V3 format\n cli: {\n commands: [\n // release:plan - Analyze changes and prepare release plan\n {\n id: 'plan',\n group: 'release',\n describe: 'Analyze changes and prepare release plan',\n longDescription: 'Detect modified packages and compute version bumps based on changes',\n\n handler: './cli/commands/plan.js#default',\n handlerPath: './cli/commands/plan.js',\n\n flags: defineCommandFlags({\n scope: { type: 'string', description: 'Package scope (glob pattern)' },\n bump: {\n type: 'string',\n choices: ['patch', 'minor', 'major', 'auto'] as const,\n default: 'auto',\n description: 'Version bump strategy',\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 --json',\n ],\n },\n\n // release:run - Execute release process\n {\n id: 'run',\n group: 'release',\n describe: 'Execute release process (plan, check, publish)',\n longDescription: 'Run full release: plan versions, run checks, publish packages',\n\n handler: './cli/commands/run.js#default',\n handlerPath: './cli/commands/run.js',\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 '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 '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 ],\n },\n\n // release:publish - Publish packages to npm\n {\n id: 'publish',\n group: 'release',\n describe: 'Publish packages to npm registry with interactive OTP',\n longDescription: 'Smart npm publish with interactive 2FA support and better UX',\n\n handler: './cli/commands/publish.js#default',\n handlerPath: './cli/commands/publish.js',\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:rollback - Rollback last release\n {\n id: 'rollback',\n group: 'release',\n describe: 'Rollback last release',\n longDescription: 'Restore workspace state from backup snapshot',\n\n handler: './cli/commands/rollback.js#default',\n handlerPath: './cli/commands/rollback.js',\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 id: 'report',\n group: 'release',\n describe: 'Show last release report',\n longDescription: 'Display the most recent release execution report',\n\n handler: './cli/commands/report.js#default',\n handlerPath: './cli/commands/report.js',\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 id: 'changelog',\n group: 'release',\n describe: 'Generate changelog from conventional commits',\n longDescription: 'Parse git history and generate changelog with conventional commits support',\n\n handler: './cli/commands/changelog.js#default',\n handlerPath: './cli/commands/changelog.js',\n\n flags: defineCommandFlags({\n scope: { type: 'string', description: 'Filter to specific package' },\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 id: 'verify',\n group: 'release',\n describe: 'Validate release readiness',\n longDescription: 'Validate release readiness via flag gates (packages, breaking changes, commit types)',\n\n handler: './cli/commands/verify.js#default',\n handlerPath: './cli/commands/verify.js',\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 },\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 handlerPath: './rest/handlers/scopes-handler.js',\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 handlerPath: './rest/handlers/status-handler.js',\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 handlerPath: './rest/handlers/plan-handler.js',\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 handlerPath: './rest/handlers/generate-handler.js',\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 handlerPath: './rest/handlers/reset-handler.js',\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 handlerPath: './rest/handlers/changelog-handler.js',\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 handlerPath: './rest/handlers/changelog-generate-handler.js',\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 handlerPath: './rest/handlers/changelog-save-handler.js',\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 handlerPath: './rest/handlers/run-handler.js',\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 handlerPath: './rest/handlers/report-handler.js',\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 handlerPath: './rest/handlers/history-handler.js',\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 handlerPath: './rest/handlers/history-report-handler.js',\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 handlerPath: './rest/handlers/history-plan-handler.js',\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 handlerPath: './rest/handlers/history-changelog-handler.js',\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 handlerPath: './rest/handlers/git-timeline-handler.js',\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 handlerPath: './rest/handlers/preview-handler.js',\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 handlerPath: './rest/handlers/build-handler.js',\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 handlerPath: './rest/handlers/checklist-handler.js',\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 handlerPath: './rest/handlers/get-checks-handler.js',\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 handlerPath: './rest/handlers/run-checks-handler.js',\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 // 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';\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: ['git', 'npm'], // git: timeline/tagging/commits, npm: publish packages\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 handlerPath: './setup/handler.js',\n describe: 'Prepare the .kb/release workspace (plans, reports, backups).',\n },\n\n // CLI commands - V3 format\n cli: {\n commands: [\n // release:plan - Analyze changes and prepare release plan\n {\n id: 'plan',\n group: 'release',\n describe: 'Analyze changes and prepare release plan',\n longDescription: 'Detect modified packages and compute version bumps based on changes',\n\n handler: './cli/commands/plan.js#default',\n handlerPath: './cli/commands/plan.js',\n\n flags: defineCommandFlags({\n scope: { type: 'string', description: 'Package scope (glob pattern)' },\n bump: {\n type: 'string',\n choices: ['patch', 'minor', 'major', 'auto'] as const,\n default: 'auto',\n description: 'Version bump strategy',\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 --json',\n ],\n },\n\n // release:run - Execute release process\n {\n id: 'run',\n group: 'release',\n describe: 'Execute release process (plan, check, publish)',\n longDescription: 'Run full release: plan versions, run checks, publish packages',\n\n handler: './cli/commands/run.js#default',\n handlerPath: './cli/commands/run.js',\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 '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 '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 ],\n },\n\n // release:publish - Publish packages to npm\n {\n id: 'publish',\n group: 'release',\n describe: 'Publish packages to npm registry with interactive OTP',\n longDescription: 'Smart npm publish with interactive 2FA support and better UX',\n\n handler: './cli/commands/publish.js#default',\n handlerPath: './cli/commands/publish.js',\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:rollback - Rollback last release\n {\n id: 'rollback',\n group: 'release',\n describe: 'Rollback last release',\n longDescription: 'Restore workspace state from backup snapshot',\n\n handler: './cli/commands/rollback.js#default',\n handlerPath: './cli/commands/rollback.js',\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 id: 'report',\n group: 'release',\n describe: 'Show last release report',\n longDescription: 'Display the most recent release execution report',\n\n handler: './cli/commands/report.js#default',\n handlerPath: './cli/commands/report.js',\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 id: 'changelog',\n group: 'release',\n describe: 'Generate changelog from conventional commits',\n longDescription: 'Parse git history and generate changelog with conventional commits support',\n\n handler: './cli/commands/changelog.js#default',\n handlerPath: './cli/commands/changelog.js',\n\n flags: defineCommandFlags({\n scope: { type: 'string', description: 'Filter to specific package' },\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 id: 'verify',\n group: 'release',\n describe: 'Validate release readiness',\n longDescription: 'Validate release readiness via flag gates (packages, breaking changes, commit types)',\n\n handler: './cli/commands/verify.js#default',\n handlerPath: './cli/commands/verify.js',\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 id: 'checks',\n group: 'release',\n describe: 'Run pre-release checks from release config',\n longDescription: 'Execute custom checks defined in release config (lint, test, audit, etc.)',\n\n handler: './cli/commands/checks.js#default',\n handlerPath: './cli/commands/checks.js',\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 checks',\n 'kb release checks --scope @my-org/core',\n 'kb release checks --json',\n ],\n },\n\n // release:build - Build packages\n {\n id: 'build',\n group: 'release',\n describe: 'Build packages from release plan using safe build strategy',\n longDescription: 'Build all packages in plan into temp dir then atomically swap dist/',\n\n handler: './cli/commands/build.js#default',\n handlerPath: './cli/commands/build.js',\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 build',\n 'kb release build --scope platform',\n 'kb release build --json',\n ],\n },\n\n // release:pack - Verify npm artifacts\n {\n id: 'pack',\n group: 'release',\n describe: 'Verify built package artifacts via npm pack',\n longDescription: 'Run npm pack checks: directory imports, test file leaks, missing exports, syntax errors',\n\n handler: './cli/commands/pack.js#default',\n handlerPath: './cli/commands/pack.js',\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 id: 'version',\n group: 'release',\n describe: 'Bump package.json versions according to release plan',\n longDescription: 'Update version fields in package.json files based on computed plan',\n\n handler: './cli/commands/version.js#default',\n handlerPath: './cli/commands/version.js',\n\n flags: defineCommandFlags({\n scope: { type: 'string', description: 'Package scope (glob pattern)' },\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 id: 'git',\n group: 'release',\n describe: 'Commit, tag, and push release changes',\n longDescription: 'Create release commit, create version tags, and push to remote',\n\n handler: './cli/commands/git.js#default',\n handlerPath: './cli/commands/git.js',\n\n flags: defineCommandFlags({\n scope: { type: 'string', description: 'Package scope (glob pattern)' },\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 handlerPath: './rest/handlers/scopes-handler.js',\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 handlerPath: './rest/handlers/status-handler.js',\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 handlerPath: './rest/handlers/plan-handler.js',\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 handlerPath: './rest/handlers/generate-handler.js',\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 handlerPath: './rest/handlers/reset-handler.js',\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 handlerPath: './rest/handlers/changelog-handler.js',\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 handlerPath: './rest/handlers/changelog-generate-handler.js',\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 handlerPath: './rest/handlers/changelog-save-handler.js',\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 handlerPath: './rest/handlers/run-handler.js',\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 handlerPath: './rest/handlers/report-handler.js',\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 handlerPath: './rest/handlers/history-handler.js',\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 handlerPath: './rest/handlers/history-report-handler.js',\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 handlerPath: './rest/handlers/history-plan-handler.js',\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 handlerPath: './rest/handlers/history-changelog-handler.js',\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 handlerPath: './rest/handlers/git-timeline-handler.js',\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 handlerPath: './rest/handlers/preview-handler.js',\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 handlerPath: './rest/handlers/build-handler.js',\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 handlerPath: './rest/handlers/checklist-handler.js',\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 handlerPath: './rest/handlers/get-checks-handler.js',\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 handlerPath: './rest/handlers/run-checks-handler.js',\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"]}
@@ -3,12 +3,32 @@ import { buildPackages } from '@kb-labs/release-manager-core';
3
3
  import { readFile, writeFile, mkdir } from 'fs/promises';
4
4
  import { existsSync } from 'fs';
5
5
  import { join } from 'path';
6
- import 'globby';
7
6
 
8
7
  // src/rest/handlers/build-handler.ts
9
8
  function scopeToDir(scope) {
10
9
  return scope.replace(/^@/, "").replace(/\//g, "-").replace(/:/g, "-").replace(/\*/g, "");
11
10
  }
11
+ async function copyChangelogToPackages(repoRoot, packages, results, changelogContent) {
12
+ for (const r of results) {
13
+ if (!r.success) {
14
+ break;
15
+ }
16
+ const pkg = packages.find((p) => p.name === r.name);
17
+ if (!pkg) {
18
+ continue;
19
+ }
20
+ const pkgPath = pkg.path.startsWith("/") ? pkg.path : join(repoRoot, pkg.path);
21
+ try {
22
+ await writeFile(join(pkgPath, "CHANGELOG.md"), changelogContent, "utf-8");
23
+ const distDir = join(pkgPath, "dist");
24
+ if (!existsSync(distDir)) {
25
+ await mkdir(distDir, { recursive: true });
26
+ }
27
+ await writeFile(join(distDir, "CHANGELOG.md"), changelogContent, "utf-8");
28
+ } catch {
29
+ }
30
+ }
31
+ }
12
32
  var build_handler_default = defineHandler({
13
33
  async execute(ctx, input) {
14
34
  const scope = input.body?.scope || "root";
@@ -31,25 +51,7 @@ var build_handler_default = defineHandler({
31
51
  } catch {
32
52
  }
33
53
  if (changelogContent) {
34
- for (const r of results) {
35
- if (!r.success) {
36
- break;
37
- }
38
- const pkg = plan.packages.find((p) => p.name === r.name);
39
- if (!pkg) {
40
- continue;
41
- }
42
- const pkgPath = pkg.path.startsWith("/") ? pkg.path : join(repoRoot, pkg.path);
43
- try {
44
- await writeFile(join(pkgPath, "CHANGELOG.md"), changelogContent, "utf-8");
45
- const distDir = join(pkgPath, "dist");
46
- if (!existsSync(distDir)) {
47
- await mkdir(distDir, { recursive: true });
48
- }
49
- await writeFile(join(distDir, "CHANGELOG.md"), changelogContent, "utf-8");
50
- } catch {
51
- }
52
- }
54
+ await copyChangelogToPackages(repoRoot, plan.packages, results, changelogContent);
53
55
  }
54
56
  const builtCount = results.filter((r) => r.success).length;
55
57
  return {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/shared/utils.ts","../../../src/rest/handlers/build-handler.ts"],"names":["findRepoRoot","join","readFile"],"mappings":"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","file":"build-handler.js","sourcesContent":["import { join } from 'node:path';\nimport { readFile } from 'node:fs/promises';\nimport globby from 'globby';\n\nexport { findRepoRoot } from '@kb-labs/sdk';\n\n/**\n * Converts scope to safe directory name\n */\nexport function scopeToDir(scope: string): string {\n return scope\n .replace(/^@/, '')\n .replace(/\\//g, '-')\n .replace(/:/g, '-')\n .replace(/\\*/g, '');\n}\n\n/**\n * Converts safe directory name back to scope\n */\nexport function dirToScope(dirName: string): string {\n if (dirName === 'root') {\n return 'root';\n }\n\n const parts = dirName.split('-');\n if (parts.length >= 2) {\n return '@' + parts[0] + '-' + parts[1] + '/' + parts.slice(2).join('-');\n }\n\n return dirName;\n}\n\n/**\n * Resolve scope name to absolute filesystem path.\n * Scans all package.json in repoRoot to find the matching package by name.\n */\nexport async function resolveScopePath(repoRoot: string, scope: string): Promise<string> {\n if (scope === 'root') {\n return repoRoot;\n }\n\n if (scope.startsWith('@')) {\n const packageJsonPaths = await globby('**/package.json', {\n cwd: repoRoot,\n absolute: true,\n onlyFiles: true,\n ignore: ['**/node_modules/**', '**/dist/**', '**/build/**', '**/.git/**', '**/.*/**'],\n });\n\n for (const pkgJsonPath of packageJsonPaths) {\n try {\n const pkg = JSON.parse(await readFile(pkgJsonPath, 'utf-8'));\n if (pkg.name === scope) {\n return join(pkgJsonPath, '..');\n }\n } catch { /* skip */ }\n }\n }\n\n // Direct path or fallback\n return join(repoRoot, scope);\n}\n","/**\n * Build handler — thin adapter over core buildPackages().\n */\n\nimport { defineHandler, findRepoRoot, type RestInput } from '@kb-labs/sdk';\nimport type { BuildRequest, BuildResponse } from '@kb-labs/release-manager-contracts';\nimport { buildPackages } from '@kb-labs/release-manager-core';\nimport { readFile, writeFile, mkdir } from 'node:fs/promises';\nimport { existsSync } from 'node:fs';\nimport { scopeToDir } from '../../shared/utils';\nimport { join } from 'node:path';\n\nexport default defineHandler({\n async execute(ctx, input: RestInput<unknown, BuildRequest>): Promise<BuildResponse> {\n const scope = input.body?.scope || 'root';\n const cwd = ctx.cwd ?? process.cwd();\n const repoRoot = await findRepoRoot(cwd);\n const startTime = Date.now();\n\n // Read plan\n const scopeDir = scopeToDir(scope);\n const planPath = join(repoRoot, '.kb/release/plans', scopeDir, 'current', 'plan.json');\n\n let plan: { packages: Array<{ name: string; path: string; currentVersion: string; nextVersion: string; bump: any }> };\n try {\n plan = JSON.parse(await readFile(planPath, 'utf-8'));\n } catch {\n return { scope, success: false, packages: [], builtCount: 0, totalCount: 0, totalDurationMs: Date.now() - startTime };\n }\n\n // Build via core\n const results = await buildPackages(plan.packages as any, { logger: ctx.platform?.logger });\n\n // Copy changelog if exists\n const changelogPath = join(repoRoot, '.kb/release/plans', scopeDir, 'current', 'changelog.md');\n let changelogContent: string | undefined;\n try { changelogContent = await readFile(changelogPath, 'utf-8'); } catch { /* skip */ }\n\n if (changelogContent) {\n for (const r of results) {\n if (!r.success) {break;}\n const pkg = plan.packages.find(p => p.name === r.name);\n if (!pkg) {continue;}\n const pkgPath = pkg.path.startsWith('/') ? pkg.path : join(repoRoot, pkg.path);\n try {\n await writeFile(join(pkgPath, 'CHANGELOG.md'), changelogContent, 'utf-8');\n const distDir = join(pkgPath, 'dist');\n if (!existsSync(distDir)) {await mkdir(distDir, { recursive: true });}\n await writeFile(join(distDir, 'CHANGELOG.md'), changelogContent, 'utf-8');\n } catch { /* skip */ }\n }\n }\n\n const builtCount = results.filter(r => r.success).length;\n return {\n scope,\n success: results.every(r => r.success),\n packages: results.map(r => ({ name: r.name, success: r.success, error: r.error, durationMs: r.durationMs })),\n builtCount,\n totalCount: plan.packages.length,\n totalDurationMs: Date.now() - startTime,\n };\n },\n});\n"]}
1
+ {"version":3,"sources":["../../../src/shared/utils.ts","../../../src/rest/handlers/build-handler.ts"],"names":["findRepoRoot"],"mappings":"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","file":"build-handler.js","sourcesContent":["export { findRepoRoot } from '@kb-labs/sdk';\nexport { resolveScopePath } from './resolve-scope';\n\n/**\n * Converts scope to safe directory name\n */\nexport function scopeToDir(scope: string): string {\n return scope\n .replace(/^@/, '')\n .replace(/\\//g, '-')\n .replace(/:/g, '-')\n .replace(/\\*/g, '');\n}\n\n/**\n * Converts safe directory name back to scope\n */\nexport function dirToScope(dirName: string): string {\n if (dirName === 'root') {\n return 'root';\n }\n\n const parts = dirName.split('-');\n if (parts.length >= 2) {\n return '@' + parts[0] + '-' + parts[1] + '/' + parts.slice(2).join('-');\n }\n\n return dirName;\n}\n","/**\n * Build handler thin adapter over core buildPackages().\n */\n\nimport { defineHandler, findRepoRoot, type RestInput } from '@kb-labs/sdk';\nimport type { BuildRequest, BuildResponse } from '@kb-labs/release-manager-contracts';\nimport { buildPackages } from '@kb-labs/release-manager-core';\nimport { readFile, writeFile, mkdir } from 'node:fs/promises';\nimport { existsSync } from 'node:fs';\nimport { scopeToDir } from '../../shared/utils';\nimport { join } from 'node:path';\n\n// ── helpers ────────────────────────────────────────────────────────────────\n\nasync function copyChangelogToPackages(\n repoRoot: string,\n packages: Array<{ name: string; path: string }>,\n results: Array<{ name: string; success: boolean }>,\n changelogContent: string,\n): Promise<void> {\n for (const r of results) {\n if (!r.success) {\n break;\n }\n const pkg = packages.find(p => p.name === r.name);\n if (!pkg) {\n continue;\n }\n const pkgPath = pkg.path.startsWith('/') ? pkg.path : join(repoRoot, pkg.path);\n try {\n await writeFile(join(pkgPath, 'CHANGELOG.md'), changelogContent, 'utf-8');\n const distDir = join(pkgPath, 'dist');\n if (!existsSync(distDir)) {\n await mkdir(distDir, { recursive: true });\n }\n await writeFile(join(distDir, 'CHANGELOG.md'), changelogContent, 'utf-8');\n } catch { /* skip */ }\n }\n}\n\nexport default defineHandler({\n async execute(ctx, input: RestInput<unknown, BuildRequest>): Promise<BuildResponse> {\n const scope = input.body?.scope || 'root';\n const cwd = ctx.cwd ?? process.cwd();\n const repoRoot = await findRepoRoot(cwd);\n const startTime = Date.now();\n\n // Read plan\n const scopeDir = scopeToDir(scope);\n const planPath = join(repoRoot, '.kb/release/plans', scopeDir, 'current', 'plan.json');\n\n let plan: { packages: Array<{ name: string; path: string; currentVersion: string; nextVersion: string; bump: any }> };\n try {\n plan = JSON.parse(await readFile(planPath, 'utf-8'));\n } catch {\n return { scope, success: false, packages: [], builtCount: 0, totalCount: 0, totalDurationMs: Date.now() - startTime };\n }\n\n // Build via core\n const results = await buildPackages(plan.packages as any, { logger: ctx.platform?.logger });\n\n // Copy changelog if exists\n const changelogPath = join(repoRoot, '.kb/release/plans', scopeDir, 'current', 'changelog.md');\n let changelogContent: string | undefined;\n try { changelogContent = await readFile(changelogPath, 'utf-8'); } catch { /* skip */ }\n\n if (changelogContent) {\n await copyChangelogToPackages(repoRoot, plan.packages, results, changelogContent);\n }\n\n const builtCount = results.filter(r => r.success).length;\n return {\n scope,\n success: results.every(r => r.success),\n packages: results.map(r => ({ name: r.name, success: r.success, error: r.error, durationMs: r.durationMs })),\n builtCount,\n totalCount: plan.packages.length,\n totalDurationMs: Date.now() - startTime,\n };\n },\n});\n"]}