@kb-labs/release-manager-cli 2.89.0 → 2.94.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.
- package/dist/cli/commands/changelog.js.map +1 -1
- package/dist/cli/commands/run.js +1 -0
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/rest/handlers/build-handler.js.map +1 -1
- package/dist/rest/handlers/changelog-generate-handler.js.map +1 -1
- package/dist/rest/handlers/run-checks-handler.js.map +1 -1
- package/dist/rest/handlers/run-handler.js.map +1 -1
- package/dist/rest/handlers/status-handler.js.map +1 -1
- package/dist/setup/handler.js.map +1 -1
- package/dist/widgets/117.js +1 -0
- package/dist/widgets/165.js +1 -0
- package/dist/widgets/326.js +1 -0
- package/dist/widgets/370.js +1 -0
- package/dist/widgets/405.js +1 -0
- package/dist/widgets/418.js +38 -0
- package/dist/widgets/451.js +1 -0
- package/dist/widgets/50.js +1 -0
- package/dist/widgets/546.js +1 -0
- package/dist/widgets/669.js +1 -0
- package/dist/widgets/694.js +1 -0
- package/dist/widgets/707.js +1 -0
- package/dist/widgets/775.js +1 -0
- package/dist/widgets/805.js +445 -0
- package/dist/widgets/919.js +34 -0
- package/dist/widgets/945.js +1 -0
- package/dist/widgets/968.js +9 -0
- package/dist/widgets/__federation_expose_ReleasePage.js +1 -0
- package/dist/widgets/mf-manifest.json +229 -0
- package/dist/widgets/mf-stats.json +256 -0
- package/dist/widgets/remoteEntry.js +7 -0
- package/dist/workflows/templates/dry-run.yaml +37 -0
- package/dist/workflows/templates/full-release.yaml +58 -0
- package/dist/workflows/templates/hotfix.yaml +40 -0
- package/package.json +7 -7
|
@@ -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 } 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: Parameters<typeof defineHandler>[0] extends { execute(ctx: infer C, ...args: any[]): any } ? C : any,\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: any,\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 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 }\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 } 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 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 }\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/shared/utils.ts","../../../src/rest/handlers/run-checks-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;ACAA,IAAO,6BAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CAAQ,GAAA,EAAK,KAAA,EAAyE;AAC1F,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,EAAM,KAAA,IAAS,MAAA;AACnC,IAAA,MAAM,GAAA,GAAM,GAAA,CAAI,GAAA,IAAO,OAAA,CAAQ,GAAA,EAAI;AACnC,IAAA,MAAM,QAAA,GAAW,MAAMA,YAAAA,CAAa,GAAG,CAAA;AACvC,IAAA,MAAM,QAAA,GAAW,MAAM,gBAAA,CAAiB,QAAA,EAAU,KAAK,CAAA;AACvD,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAE3B,IAAA,MAAM,MAAA,GAAS,MAAM,SAAA,EAAyB;AAC9C,IAAA,MAAM,MAAA,GAA8B,QAAQ,MAAA,GAAS,KAAK,GAAG,MAAA,IAAU,MAAA,EAAQ,UAAU,EAAC;AAE1F,IAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,MAAA,OAAO,EAAE,KAAA,EAAO,OAAA,EAAS,IAAA,EAAM,MAAA,EAAQ,EAAC,EAAG,eAAA,EAAiB,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA,EAAU;AAAA,IACrF;AAGA,IAAA,MAAM,QAAA,GAAW,WAAW,KAAK,CAAA;AACjC,IAAA,MAAM,WAAW,IAAA,CAAK,QAAA,EAAU,mBAAA,EAAqB,QAAA,EAAU,WAAW,WAAW,CAAA;AACrF,IAAA,IAAI,eAAyB,EAAC;AAC9B,IAAA,IAAI;AACF,MAAA,MAAM,OAA4D,IAAA,CAAK,KAAA,CAAM,MAAM,QAAA,CAAS,QAAA,EAAU,OAAO,CAAC,CAAA;AAC9G,MAAA,YAAA,GAAe,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,CAAA,GAAA,KAAO,IAAI,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,GAAI,IAAI,IAAA,GAAO,IAAA,CAAK,QAAA,EAAU,GAAA,CAAI,IAAI,CAAC,CAAA;AAAA,IACxG,CAAA,CAAA,MAAQ;AACN,MAAA,YAAA,GAAe,CAAC,QAAQ,CAAA;AAAA,IAC1B;AAGA,IAAA,MAAM,OAAA,GAAU,MAAM,gBAAA,CAAiB,MAAA,EAAQ;AAAA,MAC7C,QAAA;AAAA,MACA,YAAA;AAAA,MACA,SAAA,EAAW,QAAA;AAAA,MACX,MAAA,EAAQ,IAAI,QAAA,EAAU;AAAA,KACvB,CAAA;AAED,IAAA,MAAM,SAAA,GAAY,QAAQ,KAAA,CAAM,CAAA,CAAA,KAAK,EAAE,EAAA,IAAM,CAAA,CAAE,SAAS,UAAU,CAAA;AAGlE,IAAA,MAAM,UAAA,GAAgC,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAA,MAAM;AAAA,MACtD,IAAI,CAAA,CAAE,EAAA;AAAA,MACN,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,OAAO,CAAA,CAAE,EAAE,CAAA,EAAG,IAAA,IAAQ,CAAA,CAAE,EAAA;AAAA,MACjD,SAAS,CAAA,CAAE,EAAA;AAAA,MACX,KAAA,EAAO,CAAA,CAAE,OAAA,IAAW,OAAO,EAAE,OAAA,KAAY,QAAA,IAAY,OAAA,IAAW,CAAA,CAAE,OAAA,GAAU,MAAA,CAAQ,CAAA,CAAE,OAAA,
|
|
1
|
+
{"version":3,"sources":["../../../src/shared/utils.ts","../../../src/rest/handlers/run-checks-handler.ts"],"names":["findRepoRoot"],"mappings":"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","file":"run-checks-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 * Run pre-release checks handler — thin adapter over core runReleaseChecks().\n */\n\nimport { defineHandler, findRepoRoot, type RestInput, useConfig } from '@kb-labs/sdk';\nimport type { RunChecksRequest, RunChecksResponse, CheckResultItem } from '@kb-labs/release-manager-contracts';\nimport { runReleaseChecks, type ReleaseConfig, type CustomCheckConfig } from '@kb-labs/release-manager-core';\nimport { readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { scopeToDir } from '../../shared/utils.js';\nimport { resolveScopePath } from '@kb-labs/release-manager-core';\n\nexport default defineHandler({\n async execute(ctx, input: RestInput<unknown, RunChecksRequest>): Promise<RunChecksResponse> {\n const scope = input.body?.scope ?? 'root';\n const cwd = ctx.cwd ?? process.cwd();\n const repoRoot = await findRepoRoot(cwd);\n const scopeCwd = await resolveScopePath(repoRoot, scope);\n const startTime = Date.now();\n\n const config = await useConfig<ReleaseConfig>();\n const checks: CustomCheckConfig[] = config?.scopes?.[scope]?.checks ?? config?.checks ?? [];\n\n if (checks.length === 0) {\n return { scope, success: true, checks: [], totalDurationMs: Date.now() - startTime };\n }\n\n // Read plan to get package paths\n const scopeDir = scopeToDir(scope);\n const planPath = join(repoRoot, '.kb/release/plans', scopeDir, 'current', 'plan.json');\n let packagePaths: string[] = [];\n try {\n const plan: { packages: Array<{ name: string; path: string }> } = JSON.parse(await readFile(planPath, 'utf-8'));\n packagePaths = plan.packages.map(pkg => pkg.path.startsWith('/') ? pkg.path : join(repoRoot, pkg.path));\n } catch {\n packagePaths = [scopeCwd];\n }\n\n // Run checks via core\n const results = await runReleaseChecks(checks, {\n repoRoot,\n packagePaths,\n scopePath: scopeCwd,\n logger: ctx.platform?.logger,\n });\n\n const allPassed = results.every(r => r.ok || r.hint === 'optional');\n\n // Map core CheckResult to REST CheckResultItem\n const checkItems: CheckResultItem[] = results.map(r => ({\n id: r.id,\n name: checks.find(c => c.id === r.id)?.name ?? r.id,\n success: r.ok,\n error: r.details && typeof r.details === 'object' && 'error' in r.details ? String((r.details as Record<string, unknown>).error) : undefined,\n durationMs: r.timingMs ?? 0,\n optional: checks.find(c => c.id === r.id)?.optional,\n }));\n\n return {\n scope,\n success: allPassed,\n checks: checkItems,\n totalDurationMs: Date.now() - startTime,\n };\n },\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/shared/dep-rewrite.ts","../../../src/shared/publish-programmatic.ts","../../../src/shared/changelog-factory.ts","../../../src/rest/handlers/run-handler.ts"],"names":["join","readFileSync","writeFileSync"],"mappings":";;;;;;;;AAgBA,SAAS,cAAA,CACP,IAAA,EACA,OAAA,EACA,GAAA,EACA,SACA,UAAA,EACM;AACN,EAAA,MAAM,MAAA,GAAS,UAAA,CAAW,GAAA,CAAI,OAAO,CAAA;AACrC,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,IAAA,CAAK,OAAO,CAAA,GAAI,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAC1B,IAAA;AAAA,EACF;AACA,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,GAAA,CAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA;AACzC,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,YAAA,CAAa,IAAA,CAAK,SAAS,QAAA,EAAU,cAAc,CAAA,EAAG,OAAO,CAAC,CAAA;AACxF,IAAA,IAAA,CAAK,OAAO,CAAA,GAAI,CAAA,CAAA,EAAI,MAAA,CAAO,WAAW,GAAG,CAAA,CAAA;AAAA,EAC3C,CAAA,CAAA,MAAQ;AACN,IAAA,IAAA,CAAK,OAAO,CAAA,GAAI,GAAA;AAAA,EAClB;AACF;AAEA,SAAS,mBAAA,CACP,IAAA,EACA,OAAA,EACA,GAAA,EACA,UAAA,EACS;AACT,EAAA,MAAM,MAAA,GAAS,UAAA,CAAW,GAAA,CAAI,OAAO,CAAA;AACrC,EAAA,IAAI,CAAC,MAAA,EAAQ;AAAE,IAAA,OAAO,KAAA;AAAA,EAAO;AAC7B,EAAA,IAAA,CAAK,OAAO,CAAA,GAAI,GAAA,KAAQ,aAAA,GAAgB,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,GAAK,GAAA,CAAI,OAAA,CAAQ,YAAA,EAAc,EAAE,CAAA;AACnF,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,kBAAA,CACP,IAAA,EACA,OAAA,EACA,UAAA,EACA,cAAA,EACS;AACT,EAAA,IAAI,QAAA,GAAW,KAAA;AACf,EAAA,KAAA,MAAW,OAAA,IAAW,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,EAAG;AACvC,IAAA,MAAM,GAAA,GAAM,KAAK,OAAO,CAAA;AACxB,IAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAAE,MAAA;AAAA,IAAU;AACzC,IAAA,IAAI,GAAA,CAAI,UAAA,CAAW,OAAO,CAAA,EAAG;AAC3B,MAAA,cAAA,CAAe,IAAA,EAAM,OAAA,EAAS,GAAA,EAAK,OAAA,EAAS,UAAU,CAAA;AACtD,MAAA,QAAA,GAAW,IAAA;AAAA,IACb,CAAA,MAAA,IAAW,GAAA,CAAI,UAAA,CAAW,YAAY,CAAA,IAAK,cAAA,KAAmB,MAAA,IAAU,mBAAA,CAAoB,IAAA,EAAM,OAAA,EAAS,GAAA,EAAK,UAAU,CAAA,EAAG;AAC3H,MAAA,QAAA,GAAW,IAAA;AAAA,IACb;AAAA,EACF;AACA,EAAA,OAAO,QAAA;AACT;AAEO,SAAS,oBAAA,CACd,OAAA,EACA,UAAA,EACA,cAAA,EACY;AACZ,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,OAAA,EAAS,cAAc,CAAA;AAChD,EAAA,MAAM,QAAA,GAAW,YAAA,CAAa,WAAA,EAAa,OAAO,CAAA;AAClD,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AACnC,EAAA,IAAI,QAAA,GAAW,KAAA;AAEf,EAAA,KAAA,MAAW,OAAA,IAAW,CAAC,cAAA,EAAgB,kBAAkB,CAAA,EAAY;AACnE,IAAA,MAAM,IAAA,GAAO,QAAQ,OAAO,CAAA;AAC5B,IAAA,IAAI,CAAC,IAAA,EAAM;AAAE,MAAA;AAAA,IAAU;AACvB,IAAA,IAAI,kBAAA,CAAmB,IAAA,EAAM,OAAA,EAAS,UAAA,EAAY,cAAc,CAAA,EAAG;AAAE,MAAA,QAAA,GAAW,IAAA;AAAA,IAAM;AAAA,EACxF;AAEA,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,aAAA,CAAc,aAAa,IAAA,CAAK,SAAA,CAAU,SAAS,IAAA,EAAM,CAAC,IAAI,IAAI,CAAA;AAAA,EACpE;AAEA,EAAA,OAAO,MAAM,aAAA,CAAc,WAAA,EAAa,QAAQ,CAAA;AAClD;AAoBA,SAAS,cAAA,CAAe,UAAyB,OAAA,EAAgD;AAC/F,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAyB;AAC1C,EAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,IAAA,MAAM,KAAA,uBAAY,GAAA,EAAY;AAC9B,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,YAAA,CAAa,IAAA,CAAK,IAAI,IAAA,EAAM,cAAc,CAAA,EAAG,OAAO,CAAC,CAAA;AAIhF,MAAA,KAAA,MAAW,OAAA,IAAW,CAAC,cAAA,EAAgB,kBAAkB,CAAA,EAAY;AACnE,QAAA,KAAA,MAAW,OAAA,IAAW,OAAO,IAAA,CAAK,OAAA,CAAQ,OAAO,CAAA,IAAK,EAAE,CAAA,EAAG;AACzD,UAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,EAAG;AAAE,YAAA,KAAA,CAAM,IAAI,OAAO,CAAA;AAAA,UAAG;AAAA,QAClD;AAAA,MACF;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AACA,IAAA,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,IAAA,EAAM,KAAK,CAAA;AAAA,EAC1B;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,kBAAA,CAAmB,UAAyB,IAAA,EAA0D;AAC7G,EAAA,MAAM,UAAA,uBAAiB,GAAA,EAAyB;AAChD,EAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,IAAA,KAAA,MAAW,OAAO,IAAA,CAAK,GAAA,CAAI,IAAI,IAAI,CAAA,IAAK,EAAC,EAAG;AAC1C,MAAA,IAAI,CAAC,UAAA,CAAW,GAAA,CAAI,GAAG,CAAA,EAAG;AAAE,QAAA,UAAA,CAAW,GAAA,CAAI,GAAA,kBAAK,IAAI,GAAA,EAAK,CAAA;AAAA,MAAG;AAC5D,MAAA,UAAA,CAAW,GAAA,CAAI,GAAG,CAAA,CAAG,GAAA,CAAI,IAAI,IAAI,CAAA;AAAA,IACnC;AAAA,EACF;AACA,EAAA,OAAO,UAAA;AACT;AAEA,SAAS,YAAA,CACP,QAAA,EACA,IAAA,EACA,UAAA,EACiB;AACjB,EAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,QAAA,CAAS,GAAA,CAAI,CAAA,CAAA,KAAK,CAAC,CAAA,CAAE,IAAA,EAAM,CAAC,CAAC,CAAC,CAAA;AACrD,EAAA,MAAM,YAAY,IAAI,GAAA;AAAA,IACpB,QAAA,CAAS,GAAA,CAAI,CAAA,CAAA,KAAK,CAAC,EAAE,IAAA,EAAA,CAAO,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA,oBAAK,IAAI,GAAA,EAAI,EAAG,IAAI,CAAC;AAAA,GAClE;AACA,EAAA,MAAM,QAAyB,EAAC;AAEhC,EAAA,OAAO,SAAA,CAAU,OAAO,CAAA,EAAG;AACzB,IAAA,MAAM,IAAA,GAAO,CAAC,GAAG,SAAA,CAAU,OAAA,EAAS,CAAA,CACjC,MAAA,CAAO,CAAC,GAAG,KAAK,MAAM,KAAA,KAAU,CAAC,CAAA,CACjC,GAAA,CAAI,CAAC,CAAC,IAAI,CAAA,KAAM,MAAA,CAAO,GAAA,CAAI,IAAI,CAAE,CAAA;AAEpC,IAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,MAAA,KAAA,CAAM,IAAA,CAAK,CAAC,GAAG,SAAA,CAAU,IAAA,EAAM,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,KAAK,MAAA,CAAO,GAAA,CAAI,CAAC,CAAE,CAAC,CAAA;AACzD,MAAA;AAAA,IACF;AAEA,IAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AACf,IAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,MAAA,SAAA,CAAU,MAAA,CAAO,IAAI,IAAI,CAAA;AACzB,MAAA,KAAA,MAAW,aAAa,UAAA,CAAW,GAAA,CAAI,IAAI,IAAI,CAAA,IAAK,EAAC,EAAG;AACtD,QAAA,IAAI,SAAA,CAAU,GAAA,CAAI,SAAS,CAAA,EAAG;AAC5B,UAAA,SAAA,CAAU,IAAI,SAAA,EAAA,CAAY,SAAA,CAAU,IAAI,SAAS,CAAA,IAAK,KAAK,CAAC,CAAA;AAAA,QAC9D;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAM,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,SAAS,CAAC,CAAA;AACvC;AAEO,SAAS,QAAA,CAAS,UAAyB,eAAA,EAA0C;AAC1F,EAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,QAAA,CAAS,IAAI,CAAA,CAAA,KAAK,CAAA,CAAE,IAAI,CAAC,CAAA;AACjD,EAAA,MAAM,IAAA,GAAO,cAAA,CAAe,QAAA,EAAU,OAAO,CAAA;AAC7C,EAAA,MAAM,UAAA,GAAa,kBAAA,CAAmB,QAAA,EAAU,IAAI,CAAA;AACpD,EAAA,OAAO,YAAA,CAAa,QAAA,EAAU,IAAA,EAAM,UAAU,CAAA;AAChD;;;ACrHA,IAAM,WAAA,GAAc,CAAA;AAGpB,IAAM,uBAAuB,CAAC,GAAA,EAAQ,GAAA,EAAQ,GAAA,EAAQ,KAAQ,IAAO,CAAA;AAGrE,IAAM,kBAAA,GAAqB;AAAA,EACzB,MAAA;AAAA,EACA,uBAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,gBAAA;AAAA,EACA,iBAAA;AAAA,EACA;AACF,CAAA;AAGA,IAAM,0BAAA,GAA6B;AAAA,EACjC,2DAAA;AAAA,EACA,sDAAA;AAAA,EACA;AAAA;AAEF,CAAA;AAEA,SAAS,YAAY,OAAA,EAA0B;AAC7C,EAAA,OAAO,mBAAmB,IAAA,CAAK,CAAA,CAAA,KAAK,OAAA,CAAQ,QAAA,CAAS,CAAC,CAAC,CAAA;AACzD;AAEA,SAAS,mBAAmB,OAAA,EAA0B;AACpD,EAAA,OAAO,2BAA2B,IAAA,CAAK,CAAA,CAAA,KAAK,OAAA,CAAQ,QAAA,CAAS,CAAC,CAAC,CAAA;AACjE;AAGA,SAAS,WAAW,OAAA,EAAyB;AAC3C,EAAA,MAAM,IAAA,GAAO,qBAAqB,IAAA,CAAK,GAAA,CAAI,SAAS,oBAAA,CAAqB,MAAA,GAAS,CAAC,CAAC,CAAA;AACpF,EAAA,MAAM,MAAA,GAAS,GAAA,GAAM,IAAA,CAAK,MAAA,EAAO,GAAI,GAAA;AACrC,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,IAAA,GAAO,MAAM,CAAA;AACjC;AAMA,SAAS,aAAa,KAAA,EAAoC;AACxD,EAAA,OAAO,KAAA,IAAS,MAAA,CAAO,WAAW,CAAA,IAAK,OAAO,iBAAiB,CAAA;AACjE;AAUA,SAAS,aAAa,OAAA,EASJ;AAChB,EAAA,MAAM,EAAE,aAAa,cAAA,EAAgB,KAAA,EAAO,KAAK,MAAA,EAAQ,GAAA,EAAK,MAAA,EAAQ,QAAA,EAAS,GAAI,OAAA;AAEnF,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,IAAA,MAAM,IAAA,GAAO,CAAC,SAAS,CAAA;AAEvB,IAAA,IAAI,mBAAmB,MAAA,EAAQ;AAG7B,MAAA,IAAA,CAAK,KAAK,iBAAiB,CAAA;AAAA,IAC7B;AACA,IAAA,IAAI,MAAA,EAAU;AAAE,MAAA,IAAA,CAAK,KAAK,WAAW,CAAA;AAAA,IAAG;AACxC,IAAA,IAAI,GAAA,EAAU;AAAE,MAAA,IAAA,CAAK,IAAA,CAAK,CAAA,MAAA,EAAS,GAAG,CAAA,CAAE,CAAA;AAAA,IAAG;AAC3C,IAAA,IAAI,MAAA,EAAU;AAAE,MAAA,IAAA,CAAK,IAAA,CAAK,CAAA,SAAA,EAAY,MAAM,CAAA,CAAE,CAAA;AAAA,IAAG;AACjD,IAAA,IAAI,QAAA,EAAU;AAAE,MAAA,IAAA,CAAK,IAAA,CAAK,CAAA,WAAA,EAAc,QAAQ,CAAA,CAAE,CAAA;AAAA,IAAG;AACrD,IAAA,IAAI,GAAA,EAAU;AAAE,MAAA,IAAA,CAAK,IAAA,CAAK,CAAA,MAAA,EAAS,GAAG,CAAA,CAAE,CAAA;AAAA,IAAG;AAE3C,IAAA,MAAM,GAAA,GAAyB,EAAE,GAAG,OAAA,CAAQ,GAAA,EAAI;AAChD,IAAA,IAAI,KAAA,EAAO;AAAE,MAAA,GAAA,CAAI,iBAAiB,CAAA,GAAI,KAAA;AAAA,IAAO;AAG7C,IAAA,MAAM,SAAA,GAAYA,IAAAA,CAAK,WAAA,EAAa,QAAQ,CAAA;AAC5C,IAAA,MAAM,YAAA,GAAe,WAAW,SAAS,CAAA;AACzC,IAAA,MAAM,WAAA,GAAc,YAAA,GAAeC,YAAAA,CAAa,SAAA,EAAW,OAAO,CAAA,GAAI,IAAA;AACtE,IAAA,MAAM,QAAA,GAAW,uDAAA;AAEjB,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,MAAM,QAAA,GAAW,YAAA,GAAeA,YAAAA,CAAa,SAAA,EAAW,OAAO,CAAA,GAAI,EAAA;AACnE,MAAA,IAAI,CAAC,QAAA,CAAS,QAAA,CAAS,YAAY,CAAA,EAAG;AACpC,QAAAC,aAAAA,CAAc,SAAA,EAAW,QAAA,GAAW,QAAQ,CAAA;AAAA,MAC9C;AAAA,IACF;AAEA,IAAA,MAAM,eAAe,MAAM;AACzB,MAAA,IAAI,CAAC,KAAA,EAAO;AAAE,QAAA;AAAA,MAAQ;AACtB,MAAA,IAAI;AACF,QAAA,IAAI,gBAAgB,IAAA,EAAM;AACxB,UAAAA,aAAAA,CAAc,WAAW,WAAW,CAAA;AAAA,QACtC,CAAA,MAAA,IAAW,UAAA,CAAW,SAAS,CAAA,EAAG;AAChC,UAAA,UAAA,CAAW,SAAS,CAAA;AAAA,QACtB;AAAA,MACF,CAAA,CAAA,MAAQ;AAAA,MAAoB;AAAA,IAC9B,CAAA;AAEA,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,cAAA,EAAgB,IAAA,EAAM;AAAA,MACxC,GAAA,EAAK,WAAA;AAAA,MACL,KAAA,EAAO,CAAC,QAAA,EAAU,MAAA,EAAQ,MAAM,CAAA;AAAA,MAChC,KAAA,EAAO,IAAA;AAAA,MACP;AAAA,KACD,CAAA;AAED,IAAA,IAAI,MAAA,GAAS,EAAA;AACb,IAAA,IAAI,MAAA,GAAS,EAAA;AAEb,IAAA,KAAA,CAAM,MAAA,EAAQ,EAAA,CAAG,MAAA,EAAQ,CAAC,CAAA,KAAc;AAAE,MAAA,MAAA,IAAU,EAAE,QAAA,EAAS;AAAA,IAAG,CAAC,CAAA;AACnE,IAAA,KAAA,CAAM,MAAA,EAAQ,EAAA,CAAG,MAAA,EAAQ,CAAC,CAAA,KAAc;AAAE,MAAA,MAAA,IAAU,EAAE,QAAA,EAAS;AAAA,IAAG,CAAC,CAAA;AAEnE,IAAA,KAAA,CAAM,EAAA,CAAG,OAAA,EAAS,CAAC,IAAA,KAAwB;AACzC,MAAA,YAAA,EAAa;AACb,MAAA,IAAI,SAAS,CAAA,EAAG;AACd,QAAA,OAAA,EAAQ;AAAA,MACV,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,IAAI,MAAM,MAAA,IAAU,MAAA,IAAU,GAAG,cAAc,CAAA,0BAAA,EAA6B,IAAI,CAAA,CAAE,CAAC,CAAA;AAAA,MAC5F;AAAA,IACF,CAAC,CAAA;AAED,IAAA,KAAA,CAAM,EAAA,CAAG,OAAA,EAAS,CAAC,GAAA,KAAe;AAChC,MAAA,YAAA,EAAa;AACb,MAAA,MAAA,CAAO,GAAG,CAAA;AAAA,IACZ,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH;AAMA,eAAe,UAAA,CACb,GAAA,EACA,IAAA,EAUA,MAAA,EACwB;AACxB,EAAA,MAAM,UAAU,oBAAA,CAAqB,GAAA,CAAI,MAAM,IAAA,CAAK,UAAA,EAAY,KAAK,cAAc,CAAA;AAEnF,EAAA,IAAI;AACF,IAAA,KAAA,IAAS,OAAA,GAAU,CAAA,EAAG,OAAA,IAAW,WAAA,EAAa,OAAA,EAAA,EAAW;AACvD,MAAA,IAAI;AACF,QAAA,MAAM,YAAA,CAAa;AAAA,UACjB,aAAa,GAAA,CAAI,IAAA;AAAA,UACjB,gBAAgB,IAAA,CAAK,cAAA;AAAA,UACrB,OAAO,IAAA,CAAK,KAAA;AAAA,UACZ,KAAK,IAAA,CAAK,GAAA;AAAA,UACV,QAAQ,IAAA,CAAK,MAAA;AAAA,UACb,KAAK,IAAA,CAAK,GAAA;AAAA,UACV,QAAQ,IAAA,CAAK,MAAA;AAAA,UACb,UAAU,IAAA,CAAK;AAAA,SAChB,CAAA;AAED,QAAA,MAAA,CAAO,KAAK,CAAA,UAAA,EAAa,GAAA,CAAI,IAAI,CAAA,CAAA,EAAI,GAAA,CAAI,OAAO,CAAA,CAAE,CAAA;AAClD,QAAA,OAAO,EAAE,MAAM,GAAA,CAAI,IAAA,EAAM,SAAS,GAAA,CAAI,OAAA,EAAS,SAAS,IAAA,EAAK;AAAA,MAE/D,SAAS,GAAA,EAAc;AACrB,QAAA,MAAM,UAAU,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAG/D,QAAA,IAAI,kBAAA,CAAmB,OAAO,CAAA,EAAG;AAC/B,UAAA,MAAA,CAAO,KAAK,CAAA,EAAG,GAAA,CAAI,IAAI,CAAA,CAAA,EAAI,GAAA,CAAI,OAAO,CAAA,kCAAA,CAA+B,CAAA;AACrE,UAAA,OAAO,EAAE,IAAA,EAAM,GAAA,CAAI,IAAA,EAAM,OAAA,EAAS,IAAI,OAAA,EAAS,OAAA,EAAS,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAK;AAAA,QACvF;AAGA,QAAA,IAAI,WAAA,CAAY,OAAO,CAAA,IAAK,OAAA,GAAU,WAAA,EAAa;AACjD,UAAA,MAAM,KAAA,GAAQ,WAAW,OAAO,CAAA;AAChC,UAAA,MAAA,CAAO,IAAA;AAAA,YACL,CAAA,oBAAA,EAAuB,IAAI,IAAI,CAAA,CAAA,EAAI,IAAI,OAAO,CAAA,UAAA,EAAa,OAAA,GAAU,CAAC,CAAA,CAAA,EAAI,WAAW,mBACrE,KAAA,GAAQ,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,GAAA,EAAM,QAAQ,KAAA,CAAM,IAAI,CAAA,CAAE,CAAC,CAAC,CAAA;AAAA,WACtE;AACA,UAAA,MAAM,IAAI,QAAc,CAAA,CAAA,KAAK;AAAE,YAAA,UAAA,CAAW,GAAG,KAAK,CAAA;AAAA,UAAG,CAAC,CAAA;AACtD,UAAA;AAAA,QACF;AAGA,QAAA,MAAA,CAAO,KAAA,CAAM,CAAA,kBAAA,EAAqB,GAAA,CAAI,IAAI,CAAA,CAAA,EAAI,GAAA,CAAI,OAAO,CAAA,CAAA,EAAI,KAAA,CAAA,EAAW,EAAE,KAAA,EAAO,OAAA,EAAS,CAAA;AAC1F,QAAA,OAAO,EAAE,IAAA,EAAM,GAAA,CAAI,IAAA,EAAM,OAAA,EAAS,IAAI,OAAA,EAAS,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,OAAA,EAAQ;AAAA,MAChF;AAAA,IACF;AAGA,IAAA,OAAO;AAAA,MACL,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,SAAS,GAAA,CAAI,OAAA;AAAA,MACb,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO,wBAAwB,WAAW,CAAA,2BAAA;AAAA,KAC5C;AAAA,EACF,CAAA,SAAE;AACA,IAAA,OAAA,EAAQ;AAAA,EACV;AACF;AAMA,SAAS,kBAAA,CACP,KAAA,EACA,OAAA,EACA,UAAA,EACA,QACA,UAAA,EACM;AACN,EAAA,MAAM,SAAA,GAAY,KAAA,CAAM,KAAA,CAAM,OAAA,GAAU,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,GAAA,EAAK,CAAA,KAAM,GAAA,GAAM,CAAA,CAAE,QAAQ,CAAC,CAAA;AAC/E,EAAA,IAAI,cAAc,CAAA,EAAG;AAAE,IAAA;AAAA,EAAQ;AAC/B,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,QAAQ,OAAA,GAAU,CAAC,QAAQ,UAAA,CAAW,MAAM,+BAChC,SAAS,CAAA,2DAAA;AAAA,GACvB;AACA,EAAA,KAAA,MAAW,SAAA,IAAa,KAAA,CAAM,KAAA,CAAM,OAAA,GAAU,CAAC,CAAA,EAAG;AAChD,IAAA,KAAA,MAAW,OAAO,SAAA,EAAW;AAC3B,MAAA,UAAA,CAAW,IAAA,CAAK,EAAE,IAAA,EAAM,GAAA,CAAI,IAAA,EAAM,OAAA,EAAS,GAAA,CAAI,OAAA,EAAS,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,iCAAA,EAAmC,CAAA;AAAA,IACpH;AAAA,EACF;AACF;AAUA,eAAsB,4BACpB,OAAA,EACoC;AACpC,EAAA,MAAM;AAAA,IACJ,QAAA;AAAA,IACA,cAAA,GAAiB,MAAA;AAAA,IACjB,MAAA;AAAA,IACA,GAAA;AAAA,IACA,GAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF,GAAI,OAAA;AAEJ,EAAA,MAAM,SAAS,SAAA,EAAU;AACzB,EAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,OAAA,CAAQ,KAAK,CAAA;AAExC,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,MAAA,EAAQ;AACrB,IAAA,MAAM,KAAA,GAAQ,wEAAA;AACd,IAAA,MAAA,CAAO,MAAM,KAAK,CAAA;AAClB,IAAA,OAAO;AAAA,MACL,SAAS,EAAC;AAAA,MACV,WAAW,EAAC;AAAA,MACZ,kBAAkB,EAAC;AAAA,MACnB,MAAA,EAAQ,QAAA,CAAS,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,EAAG,EAAE,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA;AAAA,MAClD,SAAS,EAAC;AAAA,MACV,MAAA,EAAQ,CAAC,KAAK;AAAA,KAChB;AAAA,EACF;AAGA,EAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,QAAA,CAAS,GAAA,CAAI,CAAA,CAAA,KAAK,CAAC,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,OAAO,CAAC,CAAC,CAAA;AAGjE,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,MAAA,CAAO,wBAAwB,KAAK,CAAC,CAAA;AAGhE,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,QAAwB,CAAA;AAE/C,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,CAAA,WAAA,EAAc,QAAA,CAAS,MAAM,CAAA,eAAA,EAAkB,KAAA,CAAM,MAAM,CAAA,kCAAA,EAC3C,WAAW,CAAA,SAAA,EAAY,MAAA,IAAU,KAAK,CAAA,CAAA;AAAA,GACxD;AAEA,EAAA,MAAM,aAA8B,EAAC;AAErC,EAAA,KAAA,IAAS,OAAA,GAAU,CAAA,EAAG,OAAA,GAAU,KAAA,CAAM,QAAQ,OAAA,EAAA,EAAW;AACvD,IAAA,MAAM,IAAA,GAAO,MAAM,OAAO,CAAA;AAC1B,IAAA,MAAA,CAAO,IAAA,CAAK,CAAA,KAAA,EAAQ,OAAA,GAAU,CAAC,CAAA,CAAA,EAAI,MAAM,MAAM,CAAA,aAAA,EAAgB,IAAA,CAAK,MAAM,CAAA,WAAA,CAAa,CAAA;AAGvF,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,EAAQ,KAAK,WAAA,EAAa;AACjD,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,IAAI,WAAW,CAAA;AAC3C,MAAA,MAAM,YAAA,GAAe,MAAM,OAAA,CAAQ,GAAA;AAAA,QACjC,KAAA,CAAM,GAAA;AAAA,UAAI,CAAA,GAAA,KACR,UAAA,CAAW,GAAA,EAAK,EAAE,cAAA,EAAgB,KAAA,EAAO,UAAA,EAAY,MAAA,EAAQ,GAAA,EAAK,GAAA,EAAK,MAAA,EAAQ,QAAA,IAAY,MAAM;AAAA;AACnG,OACF;AACA,MAAA,UAAA,CAAW,IAAA,CAAK,GAAG,YAAY,CAAA;AAAA,IACjC;AAIA,IAAA,MAAM,UAAA,GAAa,UAAA,CAAW,KAAA,CAAM,CAAC,IAAA,CAAK,MAAM,CAAA,CAAE,MAAA,CAAO,CAAA,CAAA,KAAK,CAAC,CAAA,CAAE,OAAO,CAAA;AACxE,IAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,MAAA,kBAAA,CAAmB,KAAA,EAAO,OAAA,EAAS,UAAA,EAAY,MAAA,EAAQ,UAAU,CAAA;AACjE,MAAA;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,YAAoB,UAAA,CAAW,MAAA,CAAO,OAAK,CAAA,CAAE,OAAA,IAAW,CAAC,CAAA,CAAE,gBAAgB,CAAA,CAAE,GAAA,CAAI,OAAK,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA;AACpH,EAAA,MAAM,gBAAA,GAAoB,UAAA,CAAW,MAAA,CAAO,CAAA,CAAA,KAAK,EAAE,gBAAgB,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,KAAK,GAAG,CAAA,CAAE,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA;AACtG,EAAA,MAAM,SAAoB,UAAA,CAAW,MAAA,CAAO,CAAA,CAAA,KAAK,CAAC,EAAE,OAAO,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,KAAK,GAAG,CAAA,CAAE,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA;AAC9F,EAAA,MAAM,SAAoB,UAAA,CAAW,MAAA,CAAO,OAAK,CAAC,CAAA,CAAE,WAAW,CAAA,CAAE,KAAK,CAAA,CAAE,GAAA,CAAI,OAAK,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AAExG,EAAA,IAAI,gBAAA,CAAiB,SAAS,CAAA,EAAG;AAC/B,IAAA,MAAA,CAAO,IAAA,CAAK,CAAA,EAAG,gBAAA,CAAiB,MAAM,CAAA,uDAAA,CAAoD,CAAA;AAAA,EAC5F;AAEA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,UAAA;AAAA,IACT,SAAA;AAAA,IACA,gBAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA,EAAS,MAAA,GAAS,QAAA,CAAS,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,OAAO,CAAA,UAAA,CAAY,IAAI,EAAC;AAAA,IAC3E;AAAA,GACF;AACF;ACnYO,SAAS,wBAAA,CAAyB,QAAuB,GAAA,EAA+B;AAC7F,EAAA,OAAO;AAAA,IACL,MAAM,QAAA,CAAS,IAAA,EAAM,IAAA,EAAM;AACzB,MAAA,MAAM,MAAA,GAAU,MAAA,CAAO,SAAA,EAAW,MAAA,IAA0B,IAAA;AAC5D,MAAA,MAAM,QAAA,GAAmC,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,CAAA,GAAA,MAAQ;AAAA,QACjE,MAAM,GAAA,CAAI,IAAA;AAAA,QACV,MAAM,GAAA,CAAI,IAAA;AAAA,QACV,gBAAgB,GAAA,CAAI,cAAA;AAAA,QACpB,aAAa,GAAA,CAAI,WAAA;AAAA,QACjB,IAAA,EAAM,GAAA,CAAI,IAAA,KAAS,MAAA,GAAS,UAAU,GAAA,CAAI;AAAA,OAC5C,CAAE,CAAA;AACF,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,CAAkB;AAAA,UACrC,UAAU,IAAA,CAAK,QAAA;AAAA,UACf,QAAQ,IAAA,CAAK,MAAA;AAAA,UACb,QAAA;AAAA,UACA,KAAA,EAAO,EAAE,EAAA,EAAI,MAAA,EAAO;AAAA,UACpB,SAAA,EAAW;AAAA,YACT,QAAA,EAAU,MAAA,CAAO,SAAA,EAAW,QAAA,IAAY,KAAA,CAAA;AAAA,YACxC,MAAA;AAAA,YACA,QAAA,EAAU,OAAO,SAAA,EAAW,QAAA;AAAA,YAC5B,aAAA,EAAe,OAAO,SAAA,EAAW,aAAA;AAAA,YACjC,YAAA,EAAc,OAAO,SAAA,EAAW,YAAA;AAAA,YAChC,YAAA,EAAc,OAAO,SAAA,EAAW,YAAA;AAAA,YAChC,cAAA,EAAgB,OAAO,SAAA,EAAW,cAAA;AAAA,YAClC,eAAA,EAAiB,OAAO,SAAA,EAAW,eAAA;AAAA,YACnC,kBAAA,EAAoB,OAAO,SAAA,EAAW,kBAAA;AAAA,YACtC,MAAA,EAAQ,OAAO,SAAA,EAAW;AAAA,WAC5B;AAAA,UACA,GAAA,EAAK;AAAA,YACH,aAAA,EAAe,OAAO,GAAA,EAAK,aAAA;AAAA,YAC3B,iBAAA,EAAmB,OAAO,GAAA,EAAK,iBAAA;AAAA,YAC/B,OAAA,EAAS,MAAA,CAAO,GAAA,EAAK,OAAA,IAAW,KAAA;AAAA,WAClC;AAAA,UACA,QAAA,EAAU,GAAA,GAAM,EAAE,GAAA,EAAI,GAAI,KAAA;AAAA,SAC3B,CAAA;AACD,QAAA,OAAO,MAAA,CAAO,QAAA;AAAA,MAChB,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,uBAAA,CAAwB,UAAU,MAAM,CAAA;AAAA,MACjD;AAAA,IACF;AAAA,GACF;AACF;;;ACnCA,IAAO,sBAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CAAQ,GAAA,EAAK,KAAA,EAA2E;AAC5F,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,EAAM,KAAA,IAAS,MAAA;AACnC,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,EAAM,IAAA;AACzB,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,EAAM,MAAA,IAAU,KAAA;AACrC,IAAA,MAAM,UAAA,GAAa,KAAA,CAAM,IAAA,EAAM,UAAA,IAAc,KAAA;AAC7C,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,EAAM,GAAA;AACxB,IAAA,MAAM,GAAA,GAAM,GAAA,CAAI,GAAA,IAAO,OAAA,CAAQ,GAAA,EAAI;AACnC,IAAA,MAAM,QAAA,GAAW,MAAM,YAAA,CAAa,GAAG,CAAA;AACvC,IAAA,MAAM,QAAA,GAAW,MAAM,gBAAA,CAAiB,QAAA,EAAU,KAAK,CAAA;AAEvD,IAAA,MAAM,MAAA,GAAS,MAAM,SAAA,EAAyB,IAAK,EAAC;AAGpD,IAAA,MAAM,MAAM,MAAA,EAAO;AACnB,IAAA,MAAM,SAAA,GAAY,wBAAA,CAAyB,MAAA,EAAQ,GAAA,IAAO,MAAS,CAAA;AAGnE,IAAA,MAAM,SAAA,GAAY;AAAA,MAChB,MAAM,OAAA,CAAQ,QAAA,EAAgC,IAAA,EAAoD;AAChG,QAAA,OAAO,2BAAA,CAA4B;AAAA,UACjC,QAAA;AAAA,UACA,gBAAgB,MAAA,CAAO,SAAA,EAAW,IAAA,IAAQ,MAAA,CAAO,SAAS,cAAA,IAAkB,MAAA;AAAA,UAC5E,QAAQ,IAAA,CAAK,MAAA;AAAA,UACb;AAAA,SACD,CAAA;AAAA,MACH;AAAA,KACF;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,kBAAA,CAAmB;AAAA,MACtC,GAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,KAAA;AAAA,MACA,IAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,MACA,MAAA,EAAA,CAAS,IAAA,GAAO,MAAA,CAAO,KAAA,GAAQ,IAAI,CAAA,EAAG,MAAA,GAAS,MAAA,KACvC,MAAA,CAAO,SAAS,KAAK,CAAA,EAAG,MAAA,IACxB,MAAA,CAAO,UAAU,EAAC;AAAA,MAC1B,SAAA;AAAA,MACA,SAAA;AAAA,MACA,MAAA,EAAQ,IAAI,QAAA,EAAU;AAAA,KACvB,CAAA;AAGD,IAAA,MAAM,IAAI,QAAA,EAAU,SAAA,EAAW,QAAQ,MAAA,CAAO,OAAA,GAAU,sBAAsB,gBAAA,EAAkB;AAAA,MAC9F,KAAA;AAAA,MACA,aAAA,EAAe,MAAA,CAAO,IAAA,CAAK,QAAA,CAAS,MAAA;AAAA,MACpC,cAAA,EAAgB,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO,WAAW,MAAA,IAAU,CAAA;AAAA,MAC1D,MAAA;AAAA,MACA,UAAA,EAAY,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO;AAAA,KAClC,CAAA;AAED,IAAA,OAAO;AAAA,MACL,KAAA;AAAA,MACA,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,MAAA,EAAQ,MAAA,CAAO,MAAA,CAAO,MAAA,CAAO;AAAA,KAC/B;AAAA,EACF;AACF,CAAC","file":"run-handler.js","sourcesContent":["/**\n * Rewrite workspace:/link: dependency references to pinned npm versions.\n *\n * - pnpm handles `workspace:*` natively during `pnpm publish` — no rewrite needed.\n * - npm/yarn do NOT — we must replace with `^version` before publish.\n * - `link:` references are never valid on the npm registry — always rewrite.\n *\n * Returns a restore function that reverts package.json to original content.\n * Call it in a finally block to guarantee cleanup.\n */\n\nimport { readFileSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\n\n// ── rewriteWorkspaceDeps helpers ──────────────────────────────────────────\n\nfunction rewriteLinkDep(\n deps: Record<string, string>,\n depName: string,\n val: string,\n pkgPath: string,\n versionMap: Map<string, string>,\n): void {\n const pinned = versionMap.get(depName);\n if (pinned) {\n deps[depName] = `^${pinned}`;\n return;\n }\n try {\n const linkPath = val.slice('link:'.length);\n const linked = JSON.parse(readFileSync(join(pkgPath, linkPath, 'package.json'), 'utf-8')) as { version?: string };\n deps[depName] = `^${linked.version ?? '*'}`;\n } catch {\n deps[depName] = '*';\n }\n}\n\nfunction rewriteWorkspaceDep(\n deps: Record<string, string>,\n depName: string,\n val: string,\n versionMap: Map<string, string>,\n): boolean {\n const pinned = versionMap.get(depName);\n if (!pinned) { return false; }\n deps[depName] = val === 'workspace:*' ? `^${pinned}` : val.replace('workspace:', '');\n return true;\n}\n\nfunction rewriteDepsSection(\n deps: Record<string, string>,\n pkgPath: string,\n versionMap: Map<string, string>,\n packageManager: string,\n): boolean {\n let modified = false;\n for (const depName of Object.keys(deps)) {\n const val = deps[depName];\n if (typeof val !== 'string') { continue; }\n if (val.startsWith('link:')) {\n rewriteLinkDep(deps, depName, val, pkgPath, versionMap);\n modified = true;\n } else if (val.startsWith('workspace:') && packageManager !== 'pnpm' && rewriteWorkspaceDep(deps, depName, val, versionMap)) {\n modified = true;\n }\n }\n return modified;\n}\n\nexport function rewriteWorkspaceDeps(\n pkgPath: string,\n versionMap: Map<string, string>,\n packageManager: string,\n): () => void {\n const pkgJsonPath = join(pkgPath, 'package.json');\n const original = readFileSync(pkgJsonPath, 'utf-8');\n const pkgJson = JSON.parse(original) as Record<string, unknown>;\n let modified = false;\n\n for (const section of ['dependencies', 'peerDependencies'] as const) {\n const deps = pkgJson[section] as Record<string, string> | undefined;\n if (!deps) { continue; }\n if (rewriteDepsSection(deps, pkgPath, versionMap, packageManager)) { modified = true; }\n }\n\n if (modified) {\n writeFileSync(pkgJsonPath, JSON.stringify(pkgJson, null, 2) + '\\n');\n }\n\n return () => writeFileSync(pkgJsonPath, original);\n}\n\n// ── topoSort helpers ──────────────────────────────────────────────────────\n\n/**\n * Build a simple topological sort of packages for publish order.\n *\n * Packages are grouped into \"waves\": wave 0 has no intra-release deps,\n * wave 1 depends only on wave 0, etc. Within each wave publish order\n * is arbitrary (safe to parallelise).\n *\n * Cycles (should not exist in a well-formed monorepo) fall into a\n * \"remainder\" group appended at the end.\n */\nexport interface TopoPackage {\n name: string;\n path: string;\n version: string;\n}\n\nfunction buildIntraDeps(packages: TopoPackage[], nameSet: Set<string>): Map<string, Set<string>> {\n const deps = new Map<string, Set<string>>();\n for (const pkg of packages) {\n const intra = new Set<string>();\n try {\n const pkgJson = JSON.parse(readFileSync(join(pkg.path, 'package.json'), 'utf-8')) as {\n dependencies?: Record<string, string>;\n peerDependencies?: Record<string, string>;\n };\n for (const section of ['dependencies', 'peerDependencies'] as const) {\n for (const depName of Object.keys(pkgJson[section] ?? {})) {\n if (nameSet.has(depName)) { intra.add(depName); }\n }\n }\n } catch {\n // If we can't read package.json, treat as no deps\n }\n deps.set(pkg.name, intra);\n }\n return deps;\n}\n\nfunction buildDependantsMap(packages: TopoPackage[], deps: Map<string, Set<string>>): Map<string, Set<string>> {\n const dependants = new Map<string, Set<string>>();\n for (const pkg of packages) {\n for (const dep of deps.get(pkg.name) ?? []) {\n if (!dependants.has(dep)) { dependants.set(dep, new Set()); }\n dependants.get(dep)!.add(pkg.name);\n }\n }\n return dependants;\n}\n\nfunction computeWaves(\n packages: TopoPackage[],\n deps: Map<string, Set<string>>,\n dependants: Map<string, Set<string>>,\n): TopoPackage[][] {\n const byName = new Map(packages.map(p => [p.name, p]));\n const remaining = new Map<string, number>(\n packages.map(p => [p.name, (deps.get(p.name) ?? new Set()).size])\n );\n const waves: TopoPackage[][] = [];\n\n while (remaining.size > 0) {\n const wave = [...remaining.entries()]\n .filter(([, count]) => count === 0)\n .map(([name]) => byName.get(name)!);\n\n if (wave.length === 0) {\n waves.push([...remaining.keys()].map(n => byName.get(n)!));\n break;\n }\n\n waves.push(wave);\n for (const pkg of wave) {\n remaining.delete(pkg.name);\n for (const dependant of dependants.get(pkg.name) ?? []) {\n if (remaining.has(dependant)) {\n remaining.set(dependant, (remaining.get(dependant) ?? 1) - 1);\n }\n }\n }\n }\n\n return waves.filter(w => w.length > 0);\n}\n\nexport function topoSort(packages: TopoPackage[], _packageManager: string): TopoPackage[][] {\n const nameSet = new Set(packages.map(p => p.name));\n const deps = buildIntraDeps(packages, nameSet);\n const dependants = buildDependantsMap(packages, deps);\n return computeWaves(packages, deps, dependants);\n}\n","/**\n * Programmatic npm publishing for REST handlers (non-interactive context).\n *\n * Uses `npm publish` CLI via spawn with NODE_AUTH_TOKEN env variable.\n * This is the correct approach for granular access tokens (classic tokens\n * were revoked by npm in December 2025).\n *\n * Token resolution order:\n * 1. options.token (explicit override)\n * 2. NPM_TOKEN env variable\n * 3. NODE_AUTH_TOKEN env variable\n *\n * Reliability guarantees:\n * - Already-published versions are treated as success (idempotent re-runs).\n * - 429 rate-limit: exponential back-off with jitter, up to MAX_RETRIES attempts.\n * - Transient network errors (ECONNRESET, ETIMEDOUT, etc.) are also retried.\n * - Packages are published in topological order (deps before dependants).\n * - Default concurrency is 4 — enough throughput, low enough to avoid rate limits.\n */\n\nimport { spawn } from 'node:child_process';\nimport { readFileSync, writeFileSync, existsSync, unlinkSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { useLogger, useEnv } from '@kb-labs/sdk';\nimport { rewriteWorkspaceDeps, topoSort } from './dep-rewrite';\n\nexport interface PackageToPublish {\n name: string;\n version: string;\n path: string;\n}\n\nexport interface ProgrammaticPublishOptions {\n packages: PackageToPublish[];\n packageManager?: 'pnpm' | 'npm' | 'yarn';\n dryRun?: boolean;\n otp?: string;\n tag?: string;\n access?: 'public' | 'restricted';\n registry?: string;\n token?: string;\n}\n\nexport interface PublishResult {\n name: string;\n version: string;\n success: boolean;\n /** Package was already published at this version — counted as success. */\n alreadyPublished?: boolean;\n error?: string;\n}\n\nexport interface ProgrammaticPublishResult {\n results: PublishResult[];\n published: string[];\n /** Versions that were already on npm (counted as success). */\n alreadyPublished: string[];\n failed: string[];\n skipped: string[];\n errors: string[];\n}\n\n// ---------------------------------------------------------------------------\n// Retry configuration\n// ---------------------------------------------------------------------------\n\nconst MAX_RETRIES = 5;\n\n// Exponential base delays (ms). Actual delay = base * jitter(0.8–1.2).\nconst RETRY_BASE_DELAYS_MS = [10_000, 20_000, 40_000, 80_000, 160_000] as const;\n\n/** Retryable error patterns — all transient, not indicative of a bad package. */\nconst RETRYABLE_PATTERNS = [\n 'E429',\n '429 Too Many Requests',\n 'ECONNRESET',\n 'ETIMEDOUT',\n 'ECONNREFUSED',\n 'ENOTFOUND',\n 'EAI_AGAIN',\n 'socket hang up',\n 'network timeout',\n 'read ECONNRESET',\n];\n\n/** \"Already published\" — treat as success so re-runs are idempotent. */\nconst ALREADY_PUBLISHED_PATTERNS = [\n 'You cannot publish over the previously published versions',\n 'cannot publish over the previously published version',\n 'EPUBLISHCONFLICT',\n // Some registries return 403 for conflicts\n];\n\nfunction isRetryable(message: string): boolean {\n return RETRYABLE_PATTERNS.some(p => message.includes(p));\n}\n\nfunction isAlreadyPublished(message: string): boolean {\n return ALREADY_PUBLISHED_PATTERNS.some(p => message.includes(p));\n}\n\n/** Exponential back-off with ±20% jitter. */\nfunction retryDelay(attempt: number): number {\n const base = RETRY_BASE_DELAYS_MS[Math.min(attempt, RETRY_BASE_DELAYS_MS.length - 1)]!;\n const jitter = 0.8 + Math.random() * 0.4; // 0.8 – 1.2\n return Math.round(base * jitter);\n}\n\n// ---------------------------------------------------------------------------\n// Token resolution\n// ---------------------------------------------------------------------------\n\nfunction resolveToken(token?: string): string | undefined {\n return token ?? useEnv('NPM_TOKEN') ?? useEnv('NODE_AUTH_TOKEN');\n}\n\n// ---------------------------------------------------------------------------\n// Low-level spawn\n// ---------------------------------------------------------------------------\n\n/**\n * Spawn `packageManager publish` for a single package.\n * Writes a temporary .npmrc for NODE_AUTH_TOKEN auth, cleans it up on exit.\n */\nfunction spawnPublish(options: {\n packagePath: string;\n packageManager: string;\n token: string | undefined;\n otp?: string;\n dryRun?: boolean;\n tag?: string;\n access?: string;\n registry?: string;\n}): Promise<void> {\n const { packagePath, packageManager, token, otp, dryRun, tag, access, registry } = options;\n\n return new Promise((resolve, reject) => {\n const args = ['publish'];\n\n if (packageManager === 'pnpm') {\n // pnpm checks git cleanliness; we version-bump before publish which makes\n // the tree dirty — bypass that check.\n args.push('--no-git-checks');\n }\n if (dryRun) { args.push('--dry-run'); }\n if (tag) { args.push(`--tag=${tag}`); }\n if (access) { args.push(`--access=${access}`); }\n if (registry) { args.push(`--registry=${registry}`); }\n if (otp) { args.push(`--otp=${otp}`); }\n\n const env: NodeJS.ProcessEnv = { ...process.env };\n if (token) { env['NODE_AUTH_TOKEN'] = token; }\n\n // Write a per-package .npmrc so npm picks up NODE_AUTH_TOKEN.\n const npmrcPath = join(packagePath, '.npmrc');\n const npmrcExisted = existsSync(npmrcPath);\n const npmrcBackup = npmrcExisted ? readFileSync(npmrcPath, 'utf-8') : null;\n const authLine = '//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}\\n';\n\n if (token) {\n const existing = npmrcExisted ? readFileSync(npmrcPath, 'utf-8') : '';\n if (!existing.includes('_authToken')) {\n writeFileSync(npmrcPath, existing + authLine);\n }\n }\n\n const restoreNpmrc = () => {\n if (!token) { return; }\n try {\n if (npmrcBackup !== null) {\n writeFileSync(npmrcPath, npmrcBackup);\n } else if (existsSync(npmrcPath)) {\n unlinkSync(npmrcPath);\n }\n } catch { /* best-effort */ }\n };\n\n const child = spawn(packageManager, args, {\n cwd: packagePath,\n stdio: ['ignore', 'pipe', 'pipe'],\n shell: true,\n env,\n });\n\n let stdout = '';\n let stderr = '';\n\n child.stdout?.on('data', (d: Buffer) => { stdout += d.toString(); });\n child.stderr?.on('data', (d: Buffer) => { stderr += d.toString(); });\n\n child.on('close', (code: number | null) => {\n restoreNpmrc();\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(stderr || stdout || `${packageManager} publish exited with code ${code}`));\n }\n });\n\n child.on('error', (err: Error) => {\n restoreNpmrc();\n reject(err);\n });\n });\n}\n\n// ---------------------------------------------------------------------------\n// Per-package publish with retry\n// ---------------------------------------------------------------------------\n\nasync function publishOne(\n pkg: PackageToPublish,\n opts: {\n packageManager: string;\n token: string | undefined;\n versionMap: Map<string, string>;\n dryRun?: boolean;\n otp?: string;\n tag?: string;\n access?: string;\n registry?: string;\n },\n logger: ReturnType<typeof useLogger>,\n): Promise<PublishResult> {\n const restore = rewriteWorkspaceDeps(pkg.path, opts.versionMap, opts.packageManager);\n\n try {\n for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {\n try {\n await spawnPublish({\n packagePath: pkg.path,\n packageManager: opts.packageManager,\n token: opts.token,\n otp: opts.otp,\n dryRun: opts.dryRun,\n tag: opts.tag,\n access: opts.access,\n registry: opts.registry,\n });\n\n logger.info(`Published ${pkg.name}@${pkg.version}`);\n return { name: pkg.name, version: pkg.version, success: true };\n\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n\n // Idempotency: already published at this version → success.\n if (isAlreadyPublished(message)) {\n logger.info(`${pkg.name}@${pkg.version} already published — skipping`);\n return { name: pkg.name, version: pkg.version, success: true, alreadyPublished: true };\n }\n\n // Retryable transient error (rate-limit, network blip).\n if (isRetryable(message) && attempt < MAX_RETRIES) {\n const delay = retryDelay(attempt);\n logger.warn(\n `Transient error for ${pkg.name}@${pkg.version} (attempt ${attempt + 1}/${MAX_RETRIES}), ` +\n `retrying in ${(delay / 1000).toFixed(1)}s: ${message.split('\\n')[0]}`,\n );\n await new Promise<void>(r => { setTimeout(r, delay); });\n continue;\n }\n\n // Permanent failure.\n logger.error(`Failed to publish ${pkg.name}@${pkg.version}`, undefined, { error: message });\n return { name: pkg.name, version: pkg.version, success: false, error: message };\n }\n }\n\n // Exhausted retries.\n return {\n name: pkg.name,\n version: pkg.version,\n success: false,\n error: `Publish failed after ${MAX_RETRIES} retries (transient errors)`,\n };\n } finally {\n restore();\n }\n}\n\n// ---------------------------------------------------------------------------\n// Main export\n// ---------------------------------------------------------------------------\n\nfunction skipRemainingWaves(\n waves: ReturnType<typeof topoSort>,\n waveIdx: number,\n waveFailed: PublishResult[],\n logger: ReturnType<typeof useLogger>,\n allResults: PublishResult[],\n): void {\n const remaining = waves.slice(waveIdx + 1).reduce((acc, w) => acc + w.length, 0);\n if (remaining === 0) { return; }\n logger.warn(\n `Wave ${waveIdx + 1} had ${waveFailed.length} failure(s) — ` +\n `skipping ${remaining} package(s) in later waves to avoid broken dependency chain`,\n );\n for (const laterWave of waves.slice(waveIdx + 1)) {\n for (const pkg of laterWave) {\n allResults.push({ name: pkg.name, version: pkg.version, success: false, error: 'Skipped: dependency wave failed' });\n }\n }\n}\n\n/**\n * Publish packages programmatically (non-interactive, for REST handlers / CI).\n *\n * Packages are published in topological order (deps before dependants) to\n * avoid \"package not found\" errors when a dependent is installed right after\n * release. Within each topological wave, publishes run in parallel up to\n * CONCURRENCY.\n */\nexport async function publishPackagesProgrammatic(\n options: ProgrammaticPublishOptions,\n): Promise<ProgrammaticPublishResult> {\n const {\n packages,\n packageManager = 'pnpm',\n dryRun,\n otp,\n tag,\n access,\n registry,\n } = options;\n\n const logger = useLogger();\n const token = resolveToken(options.token);\n\n if (!token && !dryRun) {\n const error = 'No npm token found. Set NPM_TOKEN (or NODE_AUTH_TOKEN) in environment.';\n logger.error(error);\n return {\n results: [],\n published: [],\n alreadyPublished: [],\n failed: packages.map(p => `${p.name}@${p.version}`),\n skipped: [],\n errors: [error],\n };\n }\n\n // Version map for dep rewriting (workspace:/link: → ^version).\n const versionMap = new Map(packages.map(p => [p.name, p.version]));\n\n // Concurrency: default 4 — enough throughput, below npm's sustained rate limit.\n const CONCURRENCY = Number(useEnv('KB_PUBLISH_CONCURRENCY') ?? 4);\n\n // Sort packages into topological waves so deps are always published first.\n const waves = topoSort(packages, packageManager);\n\n logger.info(\n `Publishing ${packages.length} package(s) in ${waves.length} topological wave(s) ` +\n `(concurrency=${CONCURRENCY}, dryRun=${dryRun ?? false})`,\n );\n\n const allResults: PublishResult[] = [];\n\n for (let waveIdx = 0; waveIdx < waves.length; waveIdx++) {\n const wave = waves[waveIdx]!;\n logger.info(`Wave ${waveIdx + 1}/${waves.length}: publishing ${wave.length} package(s)`);\n\n // Publish wave in parallel batches.\n for (let i = 0; i < wave.length; i += CONCURRENCY) {\n const batch = wave.slice(i, i + CONCURRENCY);\n const batchResults = await Promise.all(\n batch.map(pkg =>\n publishOne(pkg, { packageManager, token, versionMap, dryRun, otp, tag, access, registry }, logger),\n ),\n );\n allResults.push(...batchResults);\n }\n\n // If any package in this wave genuinely failed (not alreadyPublished), stop\n // publishing the next wave — it may depend on the failed packages.\n const waveFailed = allResults.slice(-wave.length).filter(r => !r.success);\n if (waveFailed.length > 0) {\n skipRemainingWaves(waves, waveIdx, waveFailed, logger, allResults);\n break;\n }\n }\n\n const published = allResults.filter(r => r.success && !r.alreadyPublished).map(r => `${r.name}@${r.version}`);\n const alreadyPublished = allResults.filter(r => r.alreadyPublished).map(r => `${r.name}@${r.version}`);\n const failed = allResults.filter(r => !r.success).map(r => `${r.name}@${r.version}`);\n const errors = allResults.filter(r => !r.success && r.error).map(r => `${r.name}: ${r.error}`);\n\n if (alreadyPublished.length > 0) {\n logger.info(`${alreadyPublished.length} package(s) already published — counted as success`);\n }\n\n return {\n results: allResults,\n published,\n alreadyPublished,\n failed,\n skipped: dryRun ? packages.map(p => `${p.name}@${p.version} (dry-run)`) : [],\n errors,\n };\n}\n","/**\n * Shared changelog generator factory.\n * Used by both CLI (run.ts) and REST (run-handler.ts) to avoid duplication.\n */\n\nimport {\n generateChangelog,\n generateSimpleChangelog,\n type ChangelogPackageInfo,\n} from '@kb-labs/release-manager-changelog';\nimport type { ReleaseConfig, ChangelogGenerator } from '@kb-labs/release-manager-core';\n\nexport function createChangelogGenerator(config: ReleaseConfig, llm?: any): ChangelogGenerator {\n return {\n async generate(plan, opts) {\n const locale = (config.changelog?.locale as 'en' | 'ru') || 'en';\n const packages: ChangelogPackageInfo[] = plan.packages.map(pkg => ({\n name: pkg.name,\n path: pkg.path,\n currentVersion: pkg.currentVersion,\n nextVersion: pkg.nextVersion,\n bump: pkg.bump === 'auto' ? 'patch' : pkg.bump,\n }));\n try {\n const result = await generateChangelog({\n repoRoot: opts.repoRoot,\n gitCwd: opts.gitCwd,\n packages,\n range: { to: 'HEAD' },\n changelog: {\n template: config.changelog?.template ?? undefined,\n locale,\n metadata: config.changelog?.metadata,\n ignoreAuthors: config.changelog?.ignoreAuthors,\n includeTypes: config.changelog?.includeTypes as string[],\n excludeTypes: config.changelog?.excludeTypes as string[],\n collapseMerges: config.changelog?.collapseMerges,\n collapseReverts: config.changelog?.collapseReverts,\n preferMergeSummary: config.changelog?.preferMergeSummary,\n groups: config.changelog?.groups,\n },\n git: {\n autoUnshallow: config.git?.autoUnshallow,\n requireSignedTags: config.git?.requireSignedTags,\n baseUrl: config.git?.baseUrl ?? undefined,\n },\n platform: llm ? { llm } : undefined,\n });\n return result.markdown;\n } catch {\n return generateSimpleChangelog(packages, locale);\n }\n },\n };\n}\n","/**\n * Run release handler — thin adapter over core runReleasePipeline().\n */\n\nimport { defineHandler, findRepoRoot, type RestInput, useConfig, useLLM } from '@kb-labs/sdk';\nimport type {\n RunReleaseRequest,\n RunReleaseResponse,\n} from '@kb-labs/release-manager-contracts';\nimport {\n runReleasePipeline,\n resolveScopePath,\n type ReleaseConfig,\n type PublishablePackage,\n type PublishResult,\n} from '@kb-labs/release-manager-core';\nimport { publishPackagesProgrammatic } from '../../shared/publish-programmatic';\nimport { createChangelogGenerator } from '../../shared/changelog-factory';\n\nexport default defineHandler({\n async execute(ctx, input: RestInput<unknown, RunReleaseRequest>): Promise<RunReleaseResponse> {\n const scope = input.body?.scope || 'root';\n const flow = input.body?.flow;\n const dryRun = input.body?.dryRun ?? false;\n const skipChecks = input.body?.skipChecks ?? false;\n const otp = input.body?.otp;\n const cwd = ctx.cwd ?? process.cwd();\n const repoRoot = await findRepoRoot(cwd);\n const scopeCwd = await resolveScopePath(repoRoot, scope);\n\n const config = await useConfig<ReleaseConfig>() ?? {};\n\n // Changelog generator (with LLM if available)\n const llm = useLLM();\n const changelog = createChangelogGenerator(config, llm ?? undefined);\n\n // Programmatic publisher (token-based, no interactive OTP)\n const publisher = {\n async publish(packages: PublishablePackage[], opts: { dryRun?: boolean }): Promise<PublishResult> {\n return publishPackagesProgrammatic({\n packages,\n packageManager: config.workspace?.type ?? config.publish?.packageManager ?? 'pnpm',\n dryRun: opts.dryRun,\n otp,\n });\n },\n };\n\n const result = await runReleasePipeline({\n cwd,\n repoRoot,\n scopeCwd,\n scope,\n flow,\n config,\n dryRun,\n skipChecks,\n checks: (flow ? config.flows?.[flow]?.checks : undefined)\n ?? config.scopes?.[scope]?.checks\n ?? config.checks ?? [],\n publisher,\n changelog,\n logger: ctx.platform?.logger,\n });\n\n // Track analytics\n await ctx.platform?.analytics?.track?.(result.success ? 'release.completed' : 'release.failed', {\n scope,\n packagesCount: result.plan.packages.length,\n publishedCount: result.report.result.published?.length ?? 0,\n dryRun,\n durationMs: result.report.result.timingMs,\n });\n\n return {\n scope,\n report: result.report as any,\n success: result.success,\n errors: result.report.result.errors,\n };\n },\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/shared/dep-rewrite.ts","../../../src/shared/publish-programmatic.ts","../../../src/shared/changelog-factory.ts","../../../src/rest/handlers/run-handler.ts"],"names":["join","readFileSync","writeFileSync"],"mappings":"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","file":"run-handler.js","sourcesContent":["/**\n * Rewrite workspace:/link: dependency references to pinned npm versions.\n *\n * - pnpm handles `workspace:*` natively during `pnpm publish` — no rewrite needed.\n * - npm/yarn do NOT — we must replace with `^version` before publish.\n * - `link:` references are never valid on the npm registry — always rewrite.\n *\n * Returns a restore function that reverts package.json to original content.\n * Call it in a finally block to guarantee cleanup.\n */\n\nimport { readFileSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\n\n// ── rewriteWorkspaceDeps helpers ──────────────────────────────────────────\n\nfunction rewriteLinkDep(\n deps: Record<string, string>,\n depName: string,\n val: string,\n pkgPath: string,\n versionMap: Map<string, string>,\n): void {\n const pinned = versionMap.get(depName);\n if (pinned) {\n deps[depName] = `^${pinned}`;\n return;\n }\n try {\n const linkPath = val.slice('link:'.length);\n const linked = JSON.parse(readFileSync(join(pkgPath, linkPath, 'package.json'), 'utf-8')) as { version?: string };\n deps[depName] = `^${linked.version ?? '*'}`;\n } catch {\n deps[depName] = '*';\n }\n}\n\nfunction rewriteWorkspaceDep(\n deps: Record<string, string>,\n depName: string,\n val: string,\n versionMap: Map<string, string>,\n): boolean {\n const pinned = versionMap.get(depName);\n if (!pinned) { return false; }\n deps[depName] = val === 'workspace:*' ? `^${pinned}` : val.replace('workspace:', '');\n return true;\n}\n\nfunction rewriteDepsSection(\n deps: Record<string, string>,\n pkgPath: string,\n versionMap: Map<string, string>,\n packageManager: string,\n): boolean {\n let modified = false;\n for (const depName of Object.keys(deps)) {\n const val = deps[depName];\n if (typeof val !== 'string') { continue; }\n if (val.startsWith('link:')) {\n rewriteLinkDep(deps, depName, val, pkgPath, versionMap);\n modified = true;\n } else if (val.startsWith('workspace:') && packageManager !== 'pnpm' && rewriteWorkspaceDep(deps, depName, val, versionMap)) {\n modified = true;\n }\n }\n return modified;\n}\n\nexport function rewriteWorkspaceDeps(\n pkgPath: string,\n versionMap: Map<string, string>,\n packageManager: string,\n): () => void {\n const pkgJsonPath = join(pkgPath, 'package.json');\n const original = readFileSync(pkgJsonPath, 'utf-8');\n const pkgJson = JSON.parse(original) as Record<string, unknown>;\n let modified = false;\n\n for (const section of ['dependencies', 'peerDependencies'] as const) {\n const deps = pkgJson[section] as Record<string, string> | undefined;\n if (!deps) { continue; }\n if (rewriteDepsSection(deps, pkgPath, versionMap, packageManager)) { modified = true; }\n }\n\n if (modified) {\n writeFileSync(pkgJsonPath, JSON.stringify(pkgJson, null, 2) + '\\n');\n }\n\n return () => writeFileSync(pkgJsonPath, original);\n}\n\n// ── topoSort helpers ──────────────────────────────────────────────────────\n\n/**\n * Build a simple topological sort of packages for publish order.\n *\n * Packages are grouped into \"waves\": wave 0 has no intra-release deps,\n * wave 1 depends only on wave 0, etc. Within each wave publish order\n * is arbitrary (safe to parallelise).\n *\n * Cycles (should not exist in a well-formed monorepo) fall into a\n * \"remainder\" group appended at the end.\n */\nexport interface TopoPackage {\n name: string;\n path: string;\n version: string;\n}\n\nfunction buildIntraDeps(packages: TopoPackage[], nameSet: Set<string>): Map<string, Set<string>> {\n const deps = new Map<string, Set<string>>();\n for (const pkg of packages) {\n const intra = new Set<string>();\n try {\n const pkgJson = JSON.parse(readFileSync(join(pkg.path, 'package.json'), 'utf-8')) as {\n dependencies?: Record<string, string>;\n peerDependencies?: Record<string, string>;\n };\n for (const section of ['dependencies', 'peerDependencies'] as const) {\n for (const depName of Object.keys(pkgJson[section] ?? {})) {\n if (nameSet.has(depName)) { intra.add(depName); }\n }\n }\n } catch {\n // If we can't read package.json, treat as no deps\n }\n deps.set(pkg.name, intra);\n }\n return deps;\n}\n\nfunction buildDependantsMap(packages: TopoPackage[], deps: Map<string, Set<string>>): Map<string, Set<string>> {\n const dependants = new Map<string, Set<string>>();\n for (const pkg of packages) {\n for (const dep of deps.get(pkg.name) ?? []) {\n if (!dependants.has(dep)) { dependants.set(dep, new Set()); }\n dependants.get(dep)!.add(pkg.name);\n }\n }\n return dependants;\n}\n\nfunction computeWaves(\n packages: TopoPackage[],\n deps: Map<string, Set<string>>,\n dependants: Map<string, Set<string>>,\n): TopoPackage[][] {\n const byName = new Map(packages.map(p => [p.name, p]));\n const remaining = new Map<string, number>(\n packages.map(p => [p.name, (deps.get(p.name) ?? new Set()).size])\n );\n const waves: TopoPackage[][] = [];\n\n while (remaining.size > 0) {\n const wave = [...remaining.entries()]\n .filter(([, count]) => count === 0)\n .map(([name]) => byName.get(name)!);\n\n if (wave.length === 0) {\n waves.push([...remaining.keys()].map(n => byName.get(n)!));\n break;\n }\n\n waves.push(wave);\n for (const pkg of wave) {\n remaining.delete(pkg.name);\n for (const dependant of dependants.get(pkg.name) ?? []) {\n if (remaining.has(dependant)) {\n remaining.set(dependant, (remaining.get(dependant) ?? 1) - 1);\n }\n }\n }\n }\n\n return waves.filter(w => w.length > 0);\n}\n\nexport function topoSort(packages: TopoPackage[], _packageManager: string): TopoPackage[][] {\n const nameSet = new Set(packages.map(p => p.name));\n const deps = buildIntraDeps(packages, nameSet);\n const dependants = buildDependantsMap(packages, deps);\n return computeWaves(packages, deps, dependants);\n}\n","/**\n * Programmatic npm publishing for REST handlers (non-interactive context).\n *\n * Uses `npm publish` CLI via spawn with NODE_AUTH_TOKEN env variable.\n * This is the correct approach for granular access tokens (classic tokens\n * were revoked by npm in December 2025).\n *\n * Token resolution order:\n * 1. options.token (explicit override)\n * 2. NPM_TOKEN env variable\n * 3. NODE_AUTH_TOKEN env variable\n *\n * Reliability guarantees:\n * - Already-published versions are treated as success (idempotent re-runs).\n * - 429 rate-limit: exponential back-off with jitter, up to MAX_RETRIES attempts.\n * - Transient network errors (ECONNRESET, ETIMEDOUT, etc.) are also retried.\n * - Packages are published in topological order (deps before dependants).\n * - Default concurrency is 4 — enough throughput, low enough to avoid rate limits.\n */\n\nimport { spawn } from 'node:child_process';\nimport { readFileSync, writeFileSync, existsSync, unlinkSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { useLogger, useEnv } from '@kb-labs/sdk';\nimport { rewriteWorkspaceDeps, topoSort } from './dep-rewrite';\n\nexport interface PackageToPublish {\n name: string;\n version: string;\n path: string;\n}\n\nexport interface ProgrammaticPublishOptions {\n packages: PackageToPublish[];\n packageManager?: 'pnpm' | 'npm' | 'yarn';\n dryRun?: boolean;\n otp?: string;\n tag?: string;\n access?: 'public' | 'restricted';\n registry?: string;\n token?: string;\n}\n\nexport interface PublishResult {\n name: string;\n version: string;\n success: boolean;\n /** Package was already published at this version — counted as success. */\n alreadyPublished?: boolean;\n error?: string;\n}\n\nexport interface ProgrammaticPublishResult {\n results: PublishResult[];\n published: string[];\n /** Versions that were already on npm (counted as success). */\n alreadyPublished: string[];\n failed: string[];\n skipped: string[];\n errors: string[];\n}\n\n// ---------------------------------------------------------------------------\n// Retry configuration\n// ---------------------------------------------------------------------------\n\nconst MAX_RETRIES = 5;\n\n// Exponential base delays (ms). Actual delay = base * jitter(0.8–1.2).\nconst RETRY_BASE_DELAYS_MS = [10_000, 20_000, 40_000, 80_000, 160_000] as const;\n\n/** Retryable error patterns — all transient, not indicative of a bad package. */\nconst RETRYABLE_PATTERNS = [\n 'E429',\n '429 Too Many Requests',\n 'ECONNRESET',\n 'ETIMEDOUT',\n 'ECONNREFUSED',\n 'ENOTFOUND',\n 'EAI_AGAIN',\n 'socket hang up',\n 'network timeout',\n 'read ECONNRESET',\n];\n\n/** \"Already published\" — treat as success so re-runs are idempotent. */\nconst ALREADY_PUBLISHED_PATTERNS = [\n 'You cannot publish over the previously published versions',\n 'cannot publish over the previously published version',\n 'EPUBLISHCONFLICT',\n // Some registries return 403 for conflicts\n];\n\nfunction isRetryable(message: string): boolean {\n return RETRYABLE_PATTERNS.some(p => message.includes(p));\n}\n\nfunction isAlreadyPublished(message: string): boolean {\n return ALREADY_PUBLISHED_PATTERNS.some(p => message.includes(p));\n}\n\n/** Exponential back-off with ±20% jitter. */\nfunction retryDelay(attempt: number): number {\n const base = RETRY_BASE_DELAYS_MS[Math.min(attempt, RETRY_BASE_DELAYS_MS.length - 1)]!;\n const jitter = 0.8 + Math.random() * 0.4; // 0.8 – 1.2\n return Math.round(base * jitter);\n}\n\n// ---------------------------------------------------------------------------\n// Token resolution\n// ---------------------------------------------------------------------------\n\nfunction resolveToken(token?: string): string | undefined {\n return token ?? useEnv('NPM_TOKEN') ?? useEnv('NODE_AUTH_TOKEN');\n}\n\n// ---------------------------------------------------------------------------\n// Low-level spawn\n// ---------------------------------------------------------------------------\n\n/**\n * Spawn `packageManager publish` for a single package.\n * Writes a temporary .npmrc for NODE_AUTH_TOKEN auth, cleans it up on exit.\n */\nfunction spawnPublish(options: {\n packagePath: string;\n packageManager: string;\n token: string | undefined;\n otp?: string;\n dryRun?: boolean;\n tag?: string;\n access?: string;\n registry?: string;\n}): Promise<void> {\n const { packagePath, packageManager, token, otp, dryRun, tag, access, registry } = options;\n\n return new Promise((resolve, reject) => {\n const args = ['publish'];\n\n if (packageManager === 'pnpm') {\n // pnpm checks git cleanliness; we version-bump before publish which makes\n // the tree dirty — bypass that check.\n args.push('--no-git-checks');\n }\n if (dryRun) { args.push('--dry-run'); }\n if (tag) { args.push(`--tag=${tag}`); }\n if (access) { args.push(`--access=${access}`); }\n if (registry) { args.push(`--registry=${registry}`); }\n if (otp) { args.push(`--otp=${otp}`); }\n\n const env: NodeJS.ProcessEnv = { ...process.env };\n if (token) { env['NODE_AUTH_TOKEN'] = token; }\n\n // Write a per-package .npmrc so npm picks up NODE_AUTH_TOKEN.\n const npmrcPath = join(packagePath, '.npmrc');\n const npmrcExisted = existsSync(npmrcPath);\n const npmrcBackup = npmrcExisted ? readFileSync(npmrcPath, 'utf-8') : null;\n const authLine = '//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}\\n';\n\n if (token) {\n const existing = npmrcExisted ? readFileSync(npmrcPath, 'utf-8') : '';\n if (!existing.includes('_authToken')) {\n writeFileSync(npmrcPath, existing + authLine);\n }\n }\n\n const restoreNpmrc = () => {\n if (!token) { return; }\n try {\n if (npmrcBackup !== null) {\n writeFileSync(npmrcPath, npmrcBackup);\n } else if (existsSync(npmrcPath)) {\n unlinkSync(npmrcPath);\n }\n } catch { /* best-effort */ }\n };\n\n const child = spawn(packageManager, args, {\n cwd: packagePath,\n stdio: ['ignore', 'pipe', 'pipe'],\n shell: true,\n env,\n });\n\n let stdout = '';\n let stderr = '';\n\n child.stdout?.on('data', (d: Buffer) => { stdout += d.toString(); });\n child.stderr?.on('data', (d: Buffer) => { stderr += d.toString(); });\n\n child.on('close', (code: number | null) => {\n restoreNpmrc();\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(stderr || stdout || `${packageManager} publish exited with code ${code}`));\n }\n });\n\n child.on('error', (err: Error) => {\n restoreNpmrc();\n reject(err);\n });\n });\n}\n\n// ---------------------------------------------------------------------------\n// Per-package publish with retry\n// ---------------------------------------------------------------------------\n\nasync function publishOne(\n pkg: PackageToPublish,\n opts: {\n packageManager: string;\n token: string | undefined;\n versionMap: Map<string, string>;\n dryRun?: boolean;\n otp?: string;\n tag?: string;\n access?: string;\n registry?: string;\n },\n logger: ReturnType<typeof useLogger>,\n): Promise<PublishResult> {\n const restore = rewriteWorkspaceDeps(pkg.path, opts.versionMap, opts.packageManager);\n\n try {\n for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {\n try {\n await spawnPublish({\n packagePath: pkg.path,\n packageManager: opts.packageManager,\n token: opts.token,\n otp: opts.otp,\n dryRun: opts.dryRun,\n tag: opts.tag,\n access: opts.access,\n registry: opts.registry,\n });\n\n logger.info(`Published ${pkg.name}@${pkg.version}`);\n return { name: pkg.name, version: pkg.version, success: true };\n\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n\n // Idempotency: already published at this version → success.\n if (isAlreadyPublished(message)) {\n logger.info(`${pkg.name}@${pkg.version} already published — skipping`);\n return { name: pkg.name, version: pkg.version, success: true, alreadyPublished: true };\n }\n\n // Retryable transient error (rate-limit, network blip).\n if (isRetryable(message) && attempt < MAX_RETRIES) {\n const delay = retryDelay(attempt);\n logger.warn(\n `Transient error for ${pkg.name}@${pkg.version} (attempt ${attempt + 1}/${MAX_RETRIES}), ` +\n `retrying in ${(delay / 1000).toFixed(1)}s: ${message.split('\\n')[0]}`,\n );\n await new Promise<void>(r => { setTimeout(r, delay); });\n continue;\n }\n\n // Permanent failure.\n logger.error(`Failed to publish ${pkg.name}@${pkg.version}`, undefined, { error: message });\n return { name: pkg.name, version: pkg.version, success: false, error: message };\n }\n }\n\n // Exhausted retries.\n return {\n name: pkg.name,\n version: pkg.version,\n success: false,\n error: `Publish failed after ${MAX_RETRIES} retries (transient errors)`,\n };\n } finally {\n restore();\n }\n}\n\n// ---------------------------------------------------------------------------\n// Main export\n// ---------------------------------------------------------------------------\n\nfunction skipRemainingWaves(\n waves: ReturnType<typeof topoSort>,\n waveIdx: number,\n waveFailed: PublishResult[],\n logger: ReturnType<typeof useLogger>,\n allResults: PublishResult[],\n): void {\n const remaining = waves.slice(waveIdx + 1).reduce((acc, w) => acc + w.length, 0);\n if (remaining === 0) { return; }\n logger.warn(\n `Wave ${waveIdx + 1} had ${waveFailed.length} failure(s) — ` +\n `skipping ${remaining} package(s) in later waves to avoid broken dependency chain`,\n );\n for (const laterWave of waves.slice(waveIdx + 1)) {\n for (const pkg of laterWave) {\n allResults.push({ name: pkg.name, version: pkg.version, success: false, error: 'Skipped: dependency wave failed' });\n }\n }\n}\n\n/**\n * Publish packages programmatically (non-interactive, for REST handlers / CI).\n *\n * Packages are published in topological order (deps before dependants) to\n * avoid \"package not found\" errors when a dependent is installed right after\n * release. Within each topological wave, publishes run in parallel up to\n * CONCURRENCY.\n */\nexport async function publishPackagesProgrammatic(\n options: ProgrammaticPublishOptions,\n): Promise<ProgrammaticPublishResult> {\n const {\n packages,\n packageManager = 'pnpm',\n dryRun,\n otp,\n tag,\n access,\n registry,\n } = options;\n\n const logger = useLogger();\n const token = resolveToken(options.token);\n\n if (!token && !dryRun) {\n const error = 'No npm token found. Set NPM_TOKEN (or NODE_AUTH_TOKEN) in environment.';\n logger.error(error);\n return {\n results: [],\n published: [],\n alreadyPublished: [],\n failed: packages.map(p => `${p.name}@${p.version}`),\n skipped: [],\n errors: [error],\n };\n }\n\n // Version map for dep rewriting (workspace:/link: → ^version).\n const versionMap = new Map(packages.map(p => [p.name, p.version]));\n\n // Concurrency: default 4 — enough throughput, below npm's sustained rate limit.\n const CONCURRENCY = Number(useEnv('KB_PUBLISH_CONCURRENCY') ?? 4);\n\n // Sort packages into topological waves so deps are always published first.\n const waves = topoSort(packages, packageManager);\n\n logger.info(\n `Publishing ${packages.length} package(s) in ${waves.length} topological wave(s) ` +\n `(concurrency=${CONCURRENCY}, dryRun=${dryRun ?? false})`,\n );\n\n const allResults: PublishResult[] = [];\n\n for (let waveIdx = 0; waveIdx < waves.length; waveIdx++) {\n const wave = waves[waveIdx]!;\n logger.info(`Wave ${waveIdx + 1}/${waves.length}: publishing ${wave.length} package(s)`);\n\n // Publish wave in parallel batches.\n for (let i = 0; i < wave.length; i += CONCURRENCY) {\n const batch = wave.slice(i, i + CONCURRENCY);\n const batchResults = await Promise.all(\n batch.map(pkg =>\n publishOne(pkg, { packageManager, token, versionMap, dryRun, otp, tag, access, registry }, logger),\n ),\n );\n allResults.push(...batchResults);\n }\n\n // If any package in this wave genuinely failed (not alreadyPublished), stop\n // publishing the next wave — it may depend on the failed packages.\n const waveFailed = allResults.slice(-wave.length).filter(r => !r.success);\n if (waveFailed.length > 0) {\n skipRemainingWaves(waves, waveIdx, waveFailed, logger, allResults);\n break;\n }\n }\n\n const published = allResults.filter(r => r.success && !r.alreadyPublished).map(r => `${r.name}@${r.version}`);\n const alreadyPublished = allResults.filter(r => r.alreadyPublished).map(r => `${r.name}@${r.version}`);\n const failed = allResults.filter(r => !r.success).map(r => `${r.name}@${r.version}`);\n const errors = allResults.filter(r => !r.success && r.error).map(r => `${r.name}: ${r.error}`);\n\n if (alreadyPublished.length > 0) {\n logger.info(`${alreadyPublished.length} package(s) already published — counted as success`);\n }\n\n return {\n results: allResults,\n published,\n alreadyPublished,\n failed,\n skipped: dryRun ? packages.map(p => `${p.name}@${p.version} (dry-run)`) : [],\n errors,\n };\n}\n","/**\n * Shared changelog generator factory.\n * Used by both CLI (run.ts) and REST (run-handler.ts) to avoid duplication.\n */\n\nimport {\n generateChangelog,\n generateSimpleChangelog,\n type ChangelogPackageInfo,\n} from '@kb-labs/release-manager-changelog';\nimport type { ReleaseConfig, ChangelogGenerator } from '@kb-labs/release-manager-core';\nimport type { ILLM } from '@kb-labs/sdk';\n\nexport function createChangelogGenerator(config: ReleaseConfig, llm?: ILLM): ChangelogGenerator {\n return {\n async generate(plan, opts) {\n const locale = (config.changelog?.locale as 'en' | 'ru') || 'en';\n const packages: ChangelogPackageInfo[] = plan.packages.map(pkg => ({\n name: pkg.name,\n path: pkg.path,\n currentVersion: pkg.currentVersion,\n nextVersion: pkg.nextVersion,\n bump: pkg.bump === 'auto' ? 'patch' : pkg.bump,\n }));\n try {\n const result = await generateChangelog({\n repoRoot: opts.repoRoot,\n gitCwd: opts.gitCwd,\n packages,\n range: { to: 'HEAD' },\n changelog: {\n template: config.changelog?.template ?? undefined,\n locale,\n metadata: config.changelog?.metadata,\n ignoreAuthors: config.changelog?.ignoreAuthors,\n includeTypes: config.changelog?.includeTypes as string[],\n excludeTypes: config.changelog?.excludeTypes as string[],\n collapseMerges: config.changelog?.collapseMerges,\n collapseReverts: config.changelog?.collapseReverts,\n preferMergeSummary: config.changelog?.preferMergeSummary,\n groups: config.changelog?.groups,\n },\n git: {\n autoUnshallow: config.git?.autoUnshallow,\n requireSignedTags: config.git?.requireSignedTags,\n baseUrl: config.git?.baseUrl ?? undefined,\n },\n platform: llm ? { llm } : undefined,\n });\n return result.markdown;\n } catch {\n return generateSimpleChangelog(packages, locale);\n }\n },\n };\n}\n","/**\n * Run release handler — thin adapter over core runReleasePipeline().\n */\n\nimport { defineHandler, findRepoRoot, type RestInput, useConfig, useLLM } from '@kb-labs/sdk';\nimport type {\n RunReleaseRequest,\n RunReleaseResponse,\n} from '@kb-labs/release-manager-contracts';\nimport {\n runReleasePipeline,\n resolveScopePath,\n type ReleaseConfig,\n type PublishablePackage,\n type PublishResult,\n} from '@kb-labs/release-manager-core';\nimport { publishPackagesProgrammatic } from '../../shared/publish-programmatic';\nimport { createChangelogGenerator } from '../../shared/changelog-factory';\n\nexport default defineHandler({\n async execute(ctx, input: RestInput<unknown, RunReleaseRequest>): Promise<RunReleaseResponse> {\n const scope = input.body?.scope || 'root';\n const flow = input.body?.flow;\n const dryRun = input.body?.dryRun ?? false;\n const skipChecks = input.body?.skipChecks ?? false;\n const otp = input.body?.otp;\n const cwd = ctx.cwd ?? process.cwd();\n const repoRoot = await findRepoRoot(cwd);\n const scopeCwd = await resolveScopePath(repoRoot, scope);\n\n const config = await useConfig<ReleaseConfig>() ?? {};\n\n // Changelog generator (with LLM if available)\n const llm = useLLM();\n const changelog = createChangelogGenerator(config, llm ?? undefined);\n\n // Programmatic publisher (token-based, no interactive OTP)\n const publisher = {\n async publish(packages: PublishablePackage[], opts: { dryRun?: boolean }): Promise<PublishResult> {\n return publishPackagesProgrammatic({\n packages,\n packageManager: config.workspace?.type ?? config.publish?.packageManager ?? 'pnpm',\n dryRun: opts.dryRun,\n otp,\n });\n },\n };\n\n const result = await runReleasePipeline({\n cwd,\n repoRoot,\n scopeCwd,\n scope,\n flow,\n config,\n dryRun,\n skipChecks,\n checks: (flow ? config.flows?.[flow]?.checks : undefined)\n ?? config.scopes?.[scope]?.checks\n ?? config.checks ?? [],\n publisher,\n changelog,\n logger: ctx.platform?.logger,\n });\n\n // Track analytics\n await ctx.platform?.analytics?.track?.(result.success ? 'release.completed' : 'release.failed', {\n scope,\n packagesCount: result.plan.packages.length,\n publishedCount: result.report.result.published?.length ?? 0,\n dryRun,\n durationMs: result.report.result.timingMs,\n });\n\n return {\n scope,\n report: result.report as unknown as RunReleaseResponse['report'],\n success: result.success,\n errors: result.report.result.errors,\n };\n },\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/shared/utils.ts","../../../src/rest/handlers/status-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,yBAAQ,aAAA,CAAc;AAAA,EAC3B,MAAM,OAAA,CAAQ,GAAA,EAAK,KAAA,EAAwD;AACvE,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,EAAO,KAAA,IAAS,MAAA;AACpC,IAAA,MAAM,GAAA,GAAM,GAAA,CAAI,GAAA,IAAO,OAAA,CAAQ,GAAA,EAAI;AACnC,IAAA,MAAM,QAAA,GAAW,MAAMA,YAAAA,CAAa,GAAG,CAAA;AAGvC,IAAA,MAAM,SAAA,GAAY,MAAM,YAAA,CAAa,QAAA,EAAU,KAAK,CAAA;AAGpD,IAAA,MAAM,YAAA,GAAe,WAAW,KAAK,CAAA;AACrC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,EAAU,mBAAA,EAAqB,cAAc,SAAS,CAAA;AAC5E,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,EAAU,WAAW,CAAA;AAC3C,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,QAAA,EAAU,cAAc,CAAA;AAGnD,IAAA,MAAM,OAAA,GAAU,MAAM,UAAA,CAAW,QAAQ,CAAA;AACzC,IAAA,MAAM,YAAA,GAAe,MAAM,UAAA,CAAW,aAAa,CAAA;AAEnD,IAAA,IAAI,UAAA,GAAoE,MAAA;AACxE,IAAA,IAAI,cAAA,GAAiB,CAAA;AAErB,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,IAAI;AACF,QAAA,MAAM,WAAA,GAAc,MAAM,QAAA,CAAS,QAAA,EAAU,OAAO,CAAA;AACpD,QAAA,MAAM,IAAA,GAAoB,IAAA,CAAK,KAAA,CAAM,WAAW,CAAA;AAEhD,QAAA,cAAA,GAAiB,KAAK,QAAA,CAAS,MAAA;AAG/B,QAAA,IAAI,KAAK,QAAA,CAAS,IAAA,CAAK,CAAA,GAAA,KAAO,GAAA,CAAI,WAAW,CAAA,EAAG;AAC9C,UAAA,UAAA,GAAa,WAAA;AAAA,QACf,CAAA,MAAA,IAAW,iBAAiB,CAAA,EAAG;AAC7B,UAAA,UAAA,GAAa,OAAA;AAAA,QACf;AAAA,MACF,CAAA,CAAA,MAAQ;AACN,QAAA,UAAA,GAAa,QAAA;AAAA,MACf;AAAA,IACF;AAGA,IAAA,IAAI,aAAA;AACJ,IAAA,IAAI,SAAA,GAAY,KAAA;AAEhB,IAAA,IAAI;AACF,MAAA,MAAM,gBAAA,GAAmB,IAAA,CAAK,QAAA,EAAU,gCAAgC,CAAA;AACxE,MAAA,MAAM,YAAA,GAAe,MAAM,QAAA,CAAS,gBAAA,EAAkB,OAAO,CAAA;AAC7D,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,YAAY,CAAA;AAGrC,MAAA,MAAM,aAAA,
|
|
1
|
+
{"version":3,"sources":["../../../src/shared/utils.ts","../../../src/rest/handlers/status-handler.ts"],"names":["findRepoRoot"],"mappings":"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","file":"status-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 * Status handler - Get current release status for a scope\n *\n * Checks:\n * - .kb/release/plans/{scope}/current/plan.json\n * - .kb/release/plans/{scope}/current/status.json\n * - .kb/release/plans/{scope}/current/changelog.md\n * - .kb/release/history/ for last release\n */\n\nimport { defineHandler, findRepoRoot, type RestInput } from '@kb-labs/sdk';\nimport type { StatusResponse, ReleasePlan, ReleaseScopeInfo, StatusInput } from '@kb-labs/release-manager-contracts';\nimport { readFile, access } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { glob } from 'glob';\nimport { scopeToDir } from '../../shared/utils';\n\nexport default defineHandler({\n async execute(ctx, input: RestInput<StatusInput>): Promise<StatusResponse> {\n const scope = input.query?.scope || 'root';\n const cwd = ctx.cwd || process.cwd();\n const repoRoot = await findRepoRoot(cwd);\n\n // Get scope info (package metadata)\n const scopeInfo = await getScopeInfo(repoRoot, scope);\n\n // Paths for scope-specific files\n const scopeDirName = scopeToDir(scope);\n const scopeDir = join(repoRoot, '.kb/release/plans', scopeDirName, 'current');\n const planPath = join(scopeDir, 'plan.json');\n const changelogPath = join(scopeDir, 'changelog.md');\n\n // Check if plan exists\n const hasPlan = await fileExists(planPath);\n const hasChangelog = await fileExists(changelogPath);\n\n let planStatus: 'idle' | 'ready' | 'running' | 'completed' | 'failed' = 'idle';\n let packagesInPlan = 0;\n\n if (hasPlan) {\n try {\n const planContent = await readFile(planPath, 'utf-8');\n const plan: ReleasePlan = JSON.parse(planContent);\n\n packagesInPlan = plan.packages.length;\n\n // Determine status based on plan metadata\n if (plan.packages.some(pkg => pkg.isPublished)) {\n planStatus = 'completed';\n } else if (packagesInPlan > 0) {\n planStatus = 'ready';\n }\n } catch {\n planStatus = 'failed';\n }\n }\n\n // Check for last release in history\n let lastReleaseAt: string | undefined;\n let hasReport = false;\n\n try {\n const historyIndexPath = join(repoRoot, '.kb/release/history/index.json');\n const indexContent = await readFile(historyIndexPath, 'utf-8');\n const index = JSON.parse(indexContent);\n\n // Find last release for this scope\n const scopeReleases = (index.releases as Array<{ scope: string; timestamp: string }>).filter((r) => r.scope === scope);\n if (scopeReleases.length > 0) {\n hasReport = true;\n lastReleaseAt = scopeReleases[0]!.timestamp;\n }\n } catch {\n // No history index yet\n }\n\n return {\n scope,\n scopeInfo,\n hasPlan,\n hasReport,\n hasChangelog,\n planStatus,\n packagesInPlan,\n lastReleaseAt,\n };\n },\n});\n\n/**\n * Get scope metadata (name, version, description) from package.json\n */\nasync function getScopeInfo(repoRoot: string, scope: string): Promise<ReleaseScopeInfo | undefined> {\n try {\n if (scope === 'root') {\n // Root scope\n const rootPkgPath = join(repoRoot, 'package.json');\n const pkg = JSON.parse(await readFile(rootPkgPath, 'utf-8'));\n\n return {\n id: 'root',\n name: pkg.name || 'Root',\n path: repoRoot,\n currentVersion: pkg.version,\n description: pkg.description,\n type: 'root',\n };\n }\n\n // Find package by name\n const packageJsonFiles = await glob('*/package.json', {\n cwd: repoRoot,\n ignore: ['**/node_modules/**', '**/dist/**', '**/.git/**'],\n absolute: true,\n });\n\n for (const pkgPath of packageJsonFiles) {\n try {\n const pkg = JSON.parse(await readFile(pkgPath, 'utf-8'));\n\n if (pkg.name === scope) {\n const pkgDir = join(pkgPath, '..');\n\n // Check if it's a monorepo\n const isMonorepo =\n (await fileExists(join(pkgDir, 'pnpm-workspace.yaml'))) ||\n (await fileExists(join(pkgDir, 'lerna.json')));\n\n return {\n id: pkg.name,\n name: pkg.displayName || pkg.name,\n path: pkgDir,\n currentVersion: pkg.version,\n description: pkg.description,\n type: isMonorepo ? 'monorepo' : 'package',\n };\n }\n } catch {\n // Skip invalid package.json\n }\n }\n\n return undefined;\n } catch {\n return undefined;\n }\n}\n\nasync function fileExists(path: string): Promise<boolean> {\n try {\n await access(path);\n return true;\n } catch {\n return false;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/setup/handler.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"sources":["../../src/setup/handler.ts"],"names":[],"mappings":"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","file":"handler.js","sourcesContent":["import type { PluginContextV3 } from '@kb-labs/sdk';\n\nconst RELEASE_DIRS = ['plans', 'reports', 'backups'];\n\nexport async function run(ctx: PluginContextV3) {\n const cwd = ctx.cwd;\n const releaseDir = ctx.runtime.fs.join(cwd, '.kb', 'release');\n const created: string[] = [];\n\n await ctx.runtime.fs.mkdir(releaseDir, { recursive: true });\n\n for (const dir of RELEASE_DIRS) {\n const target = ctx.runtime.fs.join(releaseDir, dir);\n await ctx.runtime.fs.mkdir(target, { recursive: true });\n created.push(target);\n }\n\n await ensureFile(\n ctx,\n ctx.runtime.fs.join(releaseDir, '.gitignore'),\n ['# Release artifacts', 'plans/', 'reports/', 'backups/', '*.json', '*.md', ''].join('\\n')\n );\n\n await ensureFile(\n ctx,\n ctx.runtime.fs.join(releaseDir, 'README.md'),\n [\n '# KB Labs Release workspace',\n '',\n 'This directory stores release plans, reports, and backups generated by `kb release ...` commands.',\n '',\n 'Contents are environment-specific and should not be committed unless you intentionally share release evidence.',\n '',\n ].join('\\n')\n );\n\n // Generate example release.config.ts with checks\n await ensureFile(\n ctx,\n ctx.runtime.fs.join(releaseDir, 'release.config.example.ts'),\n [\n '/**',\n ' * Example Release Manager Configuration',\n ' * Copy to release.config.ts and customize',\n ' */',\n '',\n 'export default {',\n ' checks: [',\n ' {',\n ' id: \\'build\\',',\n ' command: \\'pnpm\\',',\n ' args: [\\'build\\'],',\n ' parser: \\'exitcode\\',',\n ' timeoutMs: 300000, // 5 minutes',\n ' },',\n ' {',\n ' id: \\'tests\\',',\n ' command: \\'pnpm\\',',\n ' args: [\\'test\\'],',\n ' parser: \\'exitcode\\',',\n ' timeoutMs: 120000, // 2 minutes',\n ' optional: true, // Don\\'t fail release if tests fail',\n ' },',\n ' // Custom check with JSON output',\n ' // {',\n ' // id: \\'devlink\\',',\n ' // command: \\'kb\\',',\n ' // args: [\\'devlink\\', \\'check\\', \\'--json\\'],',\n ' // parser: \\'json\\',',\n ' // },',\n ' // Custom check with function parser',\n ' // {',\n ' // id: \\'lint\\',',\n ' // command: \\'pnpm\\',',\n ' // args: [\\'lint\\'],',\n ' // parser: (stdout, stderr, exitCode) => exitCode === 0 && !stdout.includes(\\'error\\'),',\n ' // },',\n ' ],',\n '};',\n '',\n ].join('\\n')\n );\n\n ctx.platform.logger.info('Release setup completed', { cwd, created });\n\n return {\n ok: true,\n releaseDir,\n created,\n configDefaults: {\n workspace: {\n type: 'pnpm',\n root: '.',\n },\n git: {},\n changelog: {\n locale: 'en',\n },\n },\n };\n}\n\nasync function ensureFile(ctx: PluginContextV3, path: string, contents: string) {\n const exists = await ctx.runtime.fs.exists(path);\n if (!exists) {\n const dir = ctx.runtime.fs.dirname(path);\n await ctx.runtime.fs.mkdir(dir, { recursive: true });\n await ctx.runtime.fs.writeFile(path, contents, { encoding: 'utf-8' });\n }\n}\n\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.rspackChunk_kb_labs_release_manager_cli=self.rspackChunk_kb_labs_release_manager_cli||[]).push([[117],{2924(e,r,n){n.r(r),n.d(r,{UIAccordion:()=>eV,UIAlert:()=>e7,UIAreaChart:()=>ei,UIAvatar:()=>G,UIAvatarGroup:()=>X,UIBadge:()=>w,UIBarChart:()=>ec,UIBox:()=>m,UIBreadcrumb:()=>eX,UIButton:()=>M,UICard:()=>z,UICheckbox:()=>ez,UICheckboxGroup:()=>eF,UICol:()=>T,UIColumnChart:()=>eo,UIDatePicker:()=>eD,UIDescriptions:()=>ep,UIDescriptionsItem:()=>ex,UIDiffViewer:()=>rM,UIDivider:()=>k,UIDrawer:()=>rb,UIDropdown:()=>eY,UIDropdownButton:()=>eJ,UIEmptyState:()=>e9,UIErrorState:()=>rr,UIFlex:()=>h,UIForm:()=>eB,UIFormItem:()=>eM,UIFormList:()=>eP,UIHeader:()=>e6,UIIcon:()=>_,UIIconButton:()=>H,UIInput:()=>eU,UIInputNumber:()=>eL,UIInputPassword:()=>eT,UIInputSearch:()=>eC,UIInputTextArea:()=>ek,UIJsonViewer:()=>rC,UILineChart:()=>er,UIList:()=>eb,UIListItem:()=>eS,UIListItemMeta:()=>ev,UIMarkdownViewer:()=>rT,UIMenu:()=>eZ,UIMessage:()=>rd,UIMetricCard:()=>J,UIModal:()=>rp,UIModalConfirm:()=>rx,UIModalError:()=>ry,UIModalInfo:()=>rm,UIModalSuccess:()=>rh,UIModalWarning:()=>rj,UINotification:()=>rg,UIPage:()=>e1,UIPageHeader:()=>e4,UIPageSection:()=>e5,UIPieChart:()=>ea,UIPopconfirm:()=>rS,UIPopover:()=>rv,UIProgress:()=>ef,UIRadio:()=>eW,UIRadioGroup:()=>eN,UIRangePicker:()=>eR,UIResult:()=>rc,UIRow:()=>U,UISegmented:()=>eq,UISelect:()=>ew,UIShimmerText:()=>V,UISkeleton:()=>rn,UISkeletonButton:()=>ro,UISkeletonImage:()=>ri,UISkeletonInput:()=>rt,UISkeletonNode:()=>rl,UISkeletonText:()=>ra,UISlider:()=>eG,UISpace:()=>S,UISpaceCompact:()=>v,UISpin:()=>rs,UIStack:()=>b,UIStatistic:()=>eu,UIStatisticCountdown:()=>eg,UIStatisticsChart:()=>ed,UISteps:()=>eQ,UISwitch:()=>eA,UITable:()=>q,UITabs:()=>eO,UITag:()=>A,UIText:()=>x,UITimePicker:()=>e$,UITimeline:()=>em,UITimelineItem:()=>eh,UITitle:()=>R,UITooltip:()=>rI,UITree:()=>ey,UITreeDirectoryTree:()=>ej,UITreeNode:()=>eI,UITypographyLink:()=>I,UITypographyParagraph:()=>j,UITypographyText:()=>y,UIUpload:()=>e_,UIUploadDragger:()=>eH,createFillFunction:()=>Z,registerIconRenderer:()=>N,useChartColors:()=>Q,useUIForm:()=>eE,useUIMessage:()=>ru,useUINotification:()=>rf,useUITheme:()=>K});var o=n(296),t=n(5783),i=n(4552),l=n(2913),a=n(5505),s=n(5793),c=n(7346),d=n(1499),u=n(3292),g=n(6911),f=n(6831),{useToken:p}=o.theme;function x({children:e,size:r="base",weight:n="normal",color:o="primary",as:l="span",className:a,style:s}){let{token:c}=p(),d={primary:c.colorText,secondary:c.colorTextSecondary,success:c.colorSuccess,warning:c.colorWarning,error:c.colorError,info:c.colorInfo},u={...{fontSize:t.typography.fontSize[r][0],lineHeight:t.typography.fontSize[r][1].lineHeight,fontWeight:t.typography.fontWeight[n],color:d[o]},...s};return(0,i.jsx)(l,{style:u,className:a,children:e})}function m({children:e,p:r,pt:n,pr:o,pb:l,pl:a,m:s,mt:c,mr:d,mb:u,ml:g,as:f="div",className:p,style:x}){let h={...void 0!==r&&{padding:t.spacing[r]},...void 0!==n&&{paddingTop:t.spacing[n]},...void 0!==o&&{paddingRight:t.spacing[o]},...void 0!==l&&{paddingBottom:t.spacing[l]},...void 0!==a&&{paddingLeft:t.spacing[a]},...void 0!==s&&{margin:t.spacing[s]},...void 0!==c&&{marginTop:t.spacing[c]},...void 0!==d&&{marginRight:t.spacing[d]},...void 0!==u&&{marginBottom:t.spacing[u]},...void 0!==g&&{marginLeft:t.spacing[g]},...x};return(0,i.jsx)(f,{style:h,className:p,children:e})}function h({children:e,direction:r="row",justify:n="start",align:o="stretch",gap:l,wrap:a="nowrap",as:s="div",className:c,style:d}){let u={display:"flex",flexDirection:r,justifyContent:{start:"flex-start",end:"flex-end",center:"center",between:"space-between",around:"space-around",evenly:"space-evenly"}[n],alignItems:{start:"flex-start",end:"flex-end",center:"center",baseline:"baseline",stretch:"stretch"}[o],flexWrap:a,...void 0!==l&&{gap:t.spacing[l]},...d};return(0,i.jsx)(s,{style:u,className:c,children:e})}function y(e){return(0,i.jsx)(o.Typography.Text,{...e})}function j(e){return(0,i.jsx)(o.Typography.Paragraph,{...e})}function I(e){return(0,i.jsx)(o.Typography.Link,{...e})}function b({direction:e="vertical",spacing:r=2,align:n,children:o,as:t,className:l,style:a}){return(0,i.jsx)(h,{direction:"vertical"===e?"column":"row",gap:r,align:n,as:t,className:l,style:a,children:o})}function S(e){return(0,i.jsx)(o.Space,{...e})}function v(e){return(0,i.jsx)(o.Space.Compact,{...e})}function U(e){return(0,i.jsx)(o.Row,{...e})}function T(e){return(0,i.jsx)(o.Col,{...e})}function k(e){return(0,i.jsx)(o.Divider,{...e})}var{useToken:C}=o.theme;function w({variant:e="default",children:r,...n}){let{token:t}=C(),l={success:t.colorSuccess,warning:t.colorWarning,error:t.colorError,info:t.colorInfo,default:t.colorTextSecondary};return r?(0,i.jsx)(o.Badge,{color:l[e],text:r,...n}):(0,i.jsx)(o.Badge,{status:{success:"success",warning:"warning",error:"error",info:"processing",default:"default"}[e],...n})}var B={},M=l.forwardRef(function({variant:e="default",className:r,...n},t){let l=[B.uiButton,r].filter(Boolean).join(" ");return(0,i.jsx)(o.Button,{ref:t,type:e,className:l,...n})}),{useToken:E}=o.theme,P={default:{tint:"transparent",accent:"transparent",border:"var(--border-primary, #e8eaed)"},success:{tint:"rgba(82,196,26,0.07)",accent:"#52c41a",border:"rgba(82,196,26,0.25)"},warning:{tint:"rgba(250,173,20,0.08)",accent:"#faad14",border:"rgba(250,173,20,0.30)"},error:{tint:"rgba(255,77,79,0.07)",accent:"#ff4d4f",border:"rgba(255,77,79,0.25)"},info:{tint:"rgba(12,102,255,0.07)",accent:"#0c66ff",border:"rgba(12,102,255,0.20)"}};function z({title:e,subtitle:r,extra:n,footer:t,children:l,size:a="default",bordered:s=!0,hoverable:c=!1,loading:d=!1,status:u="default",...g}){let{token:f}=E(),p=P[u],h=e||r?(0,i.jsxs)(m,{children:[e&&("string"==typeof e?(0,i.jsx)(x,{size:"lg",weight:"semibold",as:"div",children:e}):e),r&&(0,i.jsx)(x,{size:"sm",color:"secondary",as:"div",style:{marginTop:f.marginXXS},children:r})]}):void 0;return(0,i.jsxs)(o.Card,{title:h,extra:n,size:a,variant:s?"outlined":"borderless",hoverable:c,loading:d,...g,style:{boxShadow:c?"0 4px 16px rgba(0,0,0,0.08)":"0 1px 3px rgba(0,0,0,0.06)",transition:"box-shadow 200ms ease, transform 200ms ease",backgroundColor:"default"!==u?p.tint:void 0,borderColor:p.border,borderTopColor:"default"!==u?p.accent:p.border,borderTopWidth:"default"!==u?3:1,overflow:"hidden",...g.style},children:[l,t&&(0,i.jsx)(m,{mt:3,pt:3,style:{borderTop:`1px solid ${f.colorBorder}`},children:t})]})}var{useToken:F}=o.theme;function A({variant:e="default",color:r,children:n,closable:t,onClose:l,icon:a,...s}){let{token:c}=F(),d={success:c.colorSuccess,warning:c.colorWarning,error:c.colorError,info:c.colorInfo,default:c.colorPrimary,neutral:c.colorTextSecondary};return(0,i.jsx)(o.Tag,{color:r??d[e],closable:t,onClose:l,icon:a,...s,children:n})}var{Title:D}=o.Typography,{useToken:$}=o.theme;function R({level:e=1,children:r,subtitle:n,className:o,style:l}){let{token:a}=$();return n?(0,i.jsxs)(m,{mb:n?2:3,children:[(0,i.jsx)(D,{level:e,className:o,style:{margin:0,...l},children:r}),(0,i.jsx)(x,{size:"base",color:"secondary",as:"div",style:{marginTop:t.spacing["1"]},children:n})]}):(0,i.jsx)(D,{level:e,className:o,style:{marginBottom:t.spacing["3"],...l},children:r})}var L={},W=null;function N(e){W=e}function _({icon:e,name:r,size:n="base",color:o="inherit",spin:t=!1,onClick:a,className:s,style:c}){let d=[L.uiIcon,"anticon",L[`size-${n}`],L[`color-${o}`],t&&L.spin,a&&L.clickable,s].filter(Boolean).join(" "),u=null,g=r||("string"==typeof e?e:null);return(g?W?u=W(g):(console.warn(`Icon "${g}" could not be loaded. Call registerIconRenderer() at app startup.`),u=null):l.isValidElement(e)&&(u=e),u)?(0,i.jsx)("span",{className:d,style:c,onClick:a,role:a?"button":void 0,tabIndex:a?0:void 0,onKeyDown:a?e=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),a())}:void 0,children:u}):null}var H=({icon:e,name:r,onClick:n,size:o="base",color:t="primary",...l})=>(0,i.jsx)(_,{icon:e,name:r,size:o,color:t,onClick:n,style:{cursor:"pointer",transition:"opacity 0.2s",...l.style},...l});function G(e){return(0,i.jsx)(o.Avatar,{...e})}function X(e){return(0,i.jsx)(o.Avatar.Group,{...e})}function K(){return o.theme.useToken()}var O={};function V({children:e,color:r="var(--text-secondary, #9CA3AF)",highlight:n="var(--text-primary, #111827)",duration:o="2s",className:t,style:l}){return(0,i.jsx)("span",{className:[O.shimmer,t].filter(Boolean).join(" "),style:{"--shimmer-color-1":r,"--shimmer-color-2":r,"--shimmer-highlight":n,"--shimmer-duration":o,...l},children:e})}var{useToken:Y}=o.theme;function J({label:e,value:r,trend:n="neutral",delta:t,unit:l,size:a="default",showDelta:s=!0,loading:c=!1}){let{token:d}=Y(),u="up"===n?d.colorSuccess:"down"===n?d.colorError:d.colorText;return(0,i.jsx)(o.Card,{size:a,loading:c,style:{height:"100%"},children:(0,i.jsxs)(m,{children:[(0,i.jsx)(x,{size:"sm",color:"secondary",as:"div",children:e}),(0,i.jsxs)(h,{align:"baseline",gap:2,style:{marginTop:d.marginXS},children:[(0,i.jsx)(x,{size:"2xl",weight:"bold",as:"div",style:{color:u},children:r}),l&&(0,i.jsx)(x,{size:"base",color:"secondary",children:l})]}),s&&void 0!==t&&(0,i.jsx)(h,{align:"center",gap:1,style:{marginTop:d.marginXS},children:(0,i.jsxs)(x,{size:"sm",style:{color:t>=0?d.colorSuccess:d.colorError},children:["up"===n?"↑":"down"===n?"↓":""," ",Math.abs(t),"%"]})})]})})}function q({columns:e,dataSource:r,rowKey:n="id",loading:t,pagination:l,rowSelection:a,onRow:s,size:c="middle",bordered:d=!1,expandable:u,className:g,style:f,scroll:p}){return(0,i.jsx)(o.Table,{columns:e,dataSource:r,rowKey:n,loading:t,pagination:l,rowSelection:a,onRow:s,size:c,bordered:d,expandable:u,className:g,style:f,scroll:p})}function Q(){return(0,l.useMemo)(()=>{let e=["#1677ff","#52c41a","#faad14","#ff4d4f","#1890ff","#722ed1","#eb2f96","#13c2c2","#fa8c16","#2f54eb"];console.log("[useChartColors] Created palette:",{colors:e});let r=[...e,"#e6f4ff","#f6ffed","#fffbe6","#fff2f0","#e6f4ff","#f759ab","#9254de","#40a9ff","#73d13d","#ffc53d"],n=r=>e[r%e.length]||"#1890ff";return{colors:e,extendedColors:r,getColor:n,mapColors:(e,r)=>{let o=Array.from(new Set(e.map(e=>String(e[r]??"")))),t={};return o.forEach((e,r)=>{t[e]=n(r)}),t}}},[])}function Z(e,r){return n=>{let o=String(n[r]??""),t=Object.keys(e)[0];return e[o]||(t?e[t]:"#1890ff")||"#1890ff"}}var{useToken:ee}=o.theme;function er({colors:e,disableAutoColors:r,...n}){let o=function(){let{token:e}=ee();return l.useMemo(()=>({defaultColor:e.colorPrimary,styleSheet:{backgroundColor:e.colorBgContainer,fontFamily:e.fontFamily,fontSize:e.fontSize,color:e.colorText}}),[e])}(),t=Q(),s=l.useMemo(()=>{let o=n.colorField||n.seriesField;if(console.log("[UILineChart] Debug info:",{hasColorField:o,colorField:n.colorField,seriesField:n.seriesField,disableAutoColors:r,hasData:!!n.data,dataLength:n.data?.length,customColors:e,paletteColors:t.colors}),r||!o||!n.data)return console.log("[UILineChart] Skipping auto-colors:",{disableAutoColors:r,hasColorField:o,hasData:!!n.data}),n;let i=e||t.colors;return console.log("[UILineChart] Applying colors:",{source:e?"custom":"palette",colors:i}),{...n,scale:{...n.scale,color:{range:i}}}},[n,e,t.colors,r]);return(0,i.jsx)(a.A,{...s,theme:o})}var{useToken:en}=o.theme;function eo({colors:e,...r}){let n=function(){let{token:e}=en();return l.useMemo(()=>({defaultColor:e.colorPrimary,colors10:[e.colorInfo,e.colorSuccess,e.colorWarning,e.colorError,e.colorPrimary,e.colorInfoBg,e.colorSuccessBg,e.colorWarningBg,e.colorErrorBg,e.colorPrimaryBg],colors20:[e.colorInfo,e.colorSuccess,e.colorWarning,e.colorError,e.colorPrimary,e.colorInfoBg,e.colorSuccessBg,e.colorWarningBg,e.colorErrorBg,e.colorPrimaryBg,e.colorInfoBorder,e.colorSuccessBorder,e.colorWarningBorder,e.colorErrorBorder,e.colorPrimaryBorder,e.colorInfoText,e.colorSuccessText,e.colorWarningText,e.colorErrorText,e.colorPrimaryText],styleSheet:{backgroundColor:e.colorBgContainer,fontFamily:e.fontFamily,fontSize:e.fontSize,color:e.colorText}}),[e])}(),o=e?{...n,colors10:e,colors20:e}:n;return(0,i.jsx)(s.A,{...r,theme:o})}var{useToken:et}=o.theme;function ei({colors:e,disableAutoColors:r,...n}){let o=function(){let{token:e}=et();return l.useMemo(()=>({defaultColor:e.colorPrimary,styleSheet:{backgroundColor:e.colorBgContainer,fontFamily:e.fontFamily,fontSize:e.fontSize,color:e.colorText}}),[e])}(),t=Q(),a=l.useMemo(()=>{if(r||!n.colorField||!n.data)return n;let o=e||t.colors;return{...n,scale:{...n.scale,color:{range:o}}}},[n,e,t.colors,r]);return(0,i.jsx)(c.A,{...a,theme:o})}var{useToken:el}=o.theme;function ea({colors:e,disableAutoColors:r,...n}){let o=function(){let{token:e}=el();return l.useMemo(()=>({defaultColor:e.colorPrimary,styleSheet:{backgroundColor:e.colorBgContainer,fontFamily:e.fontFamily,fontSize:e.fontSize,color:e.colorText}}),[e])}(),t=Q(),a=l.useMemo(()=>{if(r||!n.colorField||!n.data)return n;let o=e||t.colors;return{...n,scale:{...n.scale,color:{range:o}}}},[n,e,t.colors,r]);return(0,i.jsx)(d.A,{...a,theme:o})}var{useToken:es}=o.theme;function ec({colors:e,disableAutoColors:r,...n}){let o=function(){let{token:e}=es();return l.useMemo(()=>({defaultColor:e.colorPrimary,styleSheet:{backgroundColor:e.colorBgContainer,fontFamily:e.fontFamily,fontSize:e.fontSize,color:e.colorText}}),[e])}(),t=Q(),a=l.useMemo(()=>{if(r||!n.seriesField||!n.data)return n;let o=e||t.colors;return{...n,scale:{...n.scale,color:{range:o}}}},[n,e,t.colors,r]);return(0,i.jsx)(u.A,{...a,theme:o})}function ed({data:e,loading:r=!1,title:n,metrics:t=[],xField:a="date",yField:s="value",colorField:c="category",style:d,height:u=350,showLegend:f=!0,chartProps:p}){let m=Q(),h=l.useMemo(()=>m.colors.slice(0,Math.max(t.length,3)),[m.colors,t.length]),y=l.useMemo(()=>e?0===t.length?e:e.flatMap(e=>{let r=[];for(let n of t){let o;o=n.key in e&&"number"==typeof e[n.key]?e[n.key]:e.metrics&&n.key in e.metrics?e.metrics[n.key]:0,n.transform&&(o=n.transform(o)),r.push({[a]:e.date?g(e.date).format("YYYY-MM-DD"):e[a],[c]:n.label,[s]:o})}return r}):[],[e,t,a,s,c]),j=()=>(0,i.jsxs)(i.Fragment,{children:[r&&(0,i.jsx)("div",{style:{textAlign:"center",padding:"40px 0"},children:(0,i.jsx)(x,{color:"secondary",children:"Loading chart data..."})}),!r&&(!y||0===y.length)&&(0,i.jsx)("div",{style:{textAlign:"center",padding:"40px 0"},children:(0,i.jsx)(x,{color:"secondary",children:"No data available for the selected date range"})}),!r&&y&&y.length>0&&(0,i.jsxs)("div",{children:[f&&0!==t.length?(0,i.jsx)("div",{style:{display:"flex",justifyContent:"flex-end",marginBottom:12,gap:16},children:t.map((e,r)=>(0,i.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6},children:[(0,i.jsx)("span",{style:{display:"inline-block",width:10,height:10,borderRadius:"50%",backgroundColor:h[r%h.length]}}),(0,i.jsx)("span",{style:{fontSize:13,fontWeight:500},children:e.label})]},e.label))}):null,(0,i.jsx)(er,{data:y,xField:a,yField:s,colorField:c,height:u,colors:h,scale:{color:{range:h}},axis:{x:{label:{autoRotate:!1}},y:{label:{formatter:e=>{let r=Number(e);return r>=1e6?`${(r/1e6).toFixed(1)}M`:r>=1e3?`${(r/1e3).toFixed(1)}K`:r.toLocaleString()}}}},style:{shape:"smooth",lineWidth:2},legend:!1,tooltip:{title:e=>e[a],items:[e=>{let r=t.find(r=>r.label===e[c]),n=t.findIndex(r=>r.label===e[c]),o=e[s]?.toLocaleString()||"0";return r?.format&&null!=e[s]&&(o=r.format(e[s])),{name:e[c],value:o,color:h[n>=0?n:0]}}]},...p})]})]});return n?(0,i.jsx)(o.Card,{title:n,style:{marginTop:16,...d},children:j()}):(0,i.jsx)("div",{style:d,children:j()})}function eu(e){return(0,i.jsx)(o.Statistic,{...e})}function eg(e){return(0,i.jsx)(o.Statistic.Countdown,{...e})}function ef(e){return(0,i.jsx)(o.Progress,{...e})}function ep(e){return(0,i.jsx)(o.Descriptions,{...e})}function ex(e){return(0,i.jsx)(o.Descriptions.Item,{...e})}function em(e){return(0,i.jsx)(o.Timeline,{...e})}function eh(e){return(0,i.jsx)(o.Timeline.Item,{...e})}function ey(e){return(0,i.jsx)(o.Tree,{...e})}function ej(e){return(0,i.jsx)(o.Tree.DirectoryTree,{...e})}function eI(e){return(0,i.jsx)(o.Tree.TreeNode,{...e})}function eb(e){return(0,i.jsx)(o.List,{...e})}function eS(e){return(0,i.jsx)(o.List.Item,{...e})}function ev(e){return(0,i.jsx)(o.List.Item.Meta,{...e})}function eU({value:e,defaultValue:r,placeholder:n,disabled:t,prefix:l,suffix:a,maxLength:s,showCount:c,allowClear:d,onChange:u,onPressEnter:g,...f}){return(0,i.jsx)(o.Input,{value:e,defaultValue:r,placeholder:n,disabled:t,prefix:l,suffix:a,maxLength:s,showCount:c,allowClear:d,onChange:e=>{u?.(e.target.value)},onPressEnter:g,...f})}function eT(e){return(0,i.jsx)(o.Input.Password,{...e})}function ek(e){return(0,i.jsx)(o.Input.TextArea,{...e})}function eC(e){return(0,i.jsx)(o.Input.Search,{...e})}function ew({options:e=[],value:r,defaultValue:n,placeholder:t,disabled:l,loading:a,allowClear:s,showSearch:c,mode:d,onChange:u,...g}){let f=e.map(e=>({label:e.icon||e.description?(0,i.jsxs)(h,{align:"center",gap:2,style:{width:"100%"},children:[e.icon&&(0,i.jsx)("span",{children:e.icon}),(0,i.jsx)("span",{style:{flex:1},children:e.label}),e.description&&(0,i.jsx)("span",{style:{fontSize:"0.85em",opacity:.7},children:e.description})]}):e.label,value:e.value,disabled:e.disabled}));return(0,i.jsx)(o.Select,{options:f,value:r,defaultValue:n,placeholder:t,disabled:l,loading:a,allowClear:s,showSearch:c,mode:d,onChange:u,...g})}function eB({layout:e="vertical",onFinish:r,onFinishFailed:n,initialValues:t,children:l,...a}){return(0,i.jsx)(o.Form,{layout:e,onFinish:r,onFinishFailed:n,initialValues:t,...a,children:l})}function eM(e){return(0,i.jsx)(o.Form.Item,{...e})}var eE=o.Form.useForm;function eP(e){return(0,i.jsx)(o.Form.List,{...e})}function ez({children:e,checked:r,defaultChecked:n,disabled:t,indeterminate:l,onChange:a,...s}){return(0,i.jsx)(o.Checkbox,{checked:r,defaultChecked:n,disabled:t,indeterminate:l,onChange:e=>{a?.(e.target.checked)},...s,children:e})}function eF({options:e,value:r,defaultValue:n,disabled:l,gap:a=2,onChange:s}){return(0,i.jsx)(o.Checkbox.Group,{value:r,defaultValue:n,disabled:l,onChange:s,children:(0,i.jsx)(m,{children:e.map((r,n)=>(0,i.jsxs)(m,{mb:n<e.length-1?a:0,children:[(0,i.jsx)(o.Checkbox,{value:r.value,disabled:r.disabled,children:r.label}),r.description&&(0,i.jsx)(x,{size:"sm",color:"secondary",as:"div",style:{marginLeft:t.spacing["6"],marginTop:t.spacing["1"]},children:r.description})]},r.value))})})}function eA({checked:e,defaultChecked:r,disabled:n,loading:t,size:l="default",label:a,labelPosition:s="right",checkedChildren:c,unCheckedChildren:d,onChange:u,...g}){let f=(0,i.jsx)(o.Switch,{checked:e,defaultChecked:r,disabled:n,loading:t,size:l,checkedChildren:c,unCheckedChildren:d,onChange:u,...g});return a?(0,i.jsxs)(h,{align:"center",gap:2,children:["left"===s&&(0,i.jsx)(x,{children:a}),f,"right"===s&&(0,i.jsx)(x,{children:a})]}):f}function eD({value:e,defaultValue:r,placeholder:n,disabled:t,format:l,allowClear:a=!0,showTime:s,onChange:c,...d}){return(0,i.jsx)(o.DatePicker,{value:e,defaultValue:r,placeholder:n,disabled:t,format:l,allowClear:a,showTime:s,onChange:c,...d})}function e$({value:e,defaultValue:r,placeholder:n,disabled:t,format:l,allowClear:a=!0,onChange:s,...c}){return(0,i.jsx)(o.TimePicker,{value:e,defaultValue:r,placeholder:n,disabled:t,format:l,allowClear:a,onChange:s,...c})}function eR(e){return(0,i.jsx)(o.DatePicker.RangePicker,{...e})}function eL(e){return(0,i.jsx)(o.InputNumber,{...e})}function eW(e){return(0,i.jsx)(o.Radio,{...e})}function eN(e){return(0,i.jsx)(o.Radio.Group,{...e})}function e_(e){return(0,i.jsx)(o.Upload,{...e})}function eH(e){return(0,i.jsx)(o.Upload.Dragger,{...e})}function eG(e){return(0,i.jsx)(o.Slider,{...e})}function eX({items:e,separator:r,className:n}){let t=e.map(e=>({title:e.icon?(0,i.jsxs)("span",{style:{display:"flex",alignItems:"center",gap:"4px"},children:[e.icon,(0,i.jsx)("span",{children:e.title})]}):e.title,href:e.href,onClick:e.onClick}));return(0,i.jsx)(o.Breadcrumb,{items:t,separator:r,className:n})}function eK({items:e,syncUrl:r,activeKey:n,defaultActiveKey:t,tabPosition:l="top",type:a="line",size:s="middle",onChange:c,onEdit:d,className:u,style:g}){let[p,x]=(0,f.useSearchParams)(),m=(0,f.useNavigate)(),h=(0,f.useParams)(),y=e[0]?.key??"",j=n,I=!0===r||"search"===r,b=r&&"object"==typeof r&&"path"===r.mode;I?j=p.get("tab")??y:b&&(j=h.tab??y);let S=e.map(e=>({key:e.key,label:e.icon?(0,i.jsxs)("span",{style:{display:"flex",alignItems:"center",gap:"6px"},children:[e.icon,(0,i.jsx)("span",{children:e.label})]}):e.label,children:e.children,disabled:e.disabled,closable:e.closable}));return(0,i.jsx)(o.Tabs,{items:S,activeKey:j,defaultActiveKey:r?void 0:t,tabPosition:l,type:a,size:s,onChange:e=>{I?x(e===y?{}:{tab:e}):b&&"object"==typeof r&&m(e===y?r.basePath:`${r.basePath}/${e}`),c?.(e)},onEdit:d?(e,r)=>{d("string"==typeof e?e:"",r)}:void 0,className:u,style:g})}function eO(e){return(0,i.jsx)(eK,{...e})}function eV({items:e,activeKey:r,defaultActiveKey:n,accordion:t=!1,bordered:l=!0,ghost:a=!1,size:s="middle",onChange:c,className:d,style:u}){let g=e.map(e=>({key:e.key,label:e.label,children:e.children,extra:e.extra,showArrow:e.showArrow,collapsible:e.collapsible}));return(0,i.jsx)(o.Collapse,{items:g,activeKey:r,defaultActiveKey:n,accordion:t,bordered:l,ghost:a,size:s,onChange:c,className:d,style:u})}function eY(e){return(0,i.jsx)(o.Dropdown,{...e})}function eJ(e){return(0,i.jsx)(o.Dropdown.Button,{...e})}function eq(e){return(0,i.jsx)(o.Segmented,{...e})}function eQ(e){return(0,i.jsx)(o.Steps,{...e})}function eZ(e){return(0,i.jsx)(o.Menu,{...e})}var{useToken:e0}=o.theme;function e1({children:e,width:r="default",variant:n="default",className:o,style:t}){let{token:l}=e0(),a="document"===n,s={maxWidth:{default:"1280px",wide:"1600px",full:"100%"}[r],margin:"0 auto",padding:l.padding,...a&&{backgroundColor:l.colorBgContainer,borderRadius:l.borderRadiusLG,boxShadow:"0 1px 3px rgba(0,0,0,0.06)"},minHeight:a?void 0:"100%",...t};return(0,i.jsx)(m,{as:"main",className:o,style:s,children:e})}var{useToken:e2}=o.theme;function e6({title:e,subtitle:r,breadcrumb:n,actions:o,className:l,style:a}){let{token:s}=e2(),c={borderBottom:`1px solid ${s.colorBorder}`,paddingBottom:t.spacing["4"],marginBottom:t.spacing["6"],...a};return(0,i.jsxs)(m,{className:l,style:c,children:[n&&(0,i.jsx)(m,{mb:2,children:n}),(0,i.jsxs)(h,{justify:"between",align:"start",gap:4,children:[(0,i.jsxs)(m,{style:{flex:1},children:[(0,i.jsx)(R,{level:1,style:{marginBottom:r?t.spacing["2"]:0},children:e}),r&&(0,i.jsx)(x,{size:"base",color:"secondary",children:r})]}),o&&(0,i.jsx)(m,{style:{flexShrink:0},children:o})]})]})}var{useToken:e3}=o.theme;function e4({title:e,description:r,icon:n,breadcrumbs:o,actions:t,tabs:l,onBack:a,children:s}){let{token:c}=e3(),d=!!l;return(0,i.jsxs)("div",{style:{marginBottom:24*!d},children:[(a||o&&o.length>0)&&(0,i.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:c.marginXS,marginBottom:c.marginXS},children:[a&&(0,i.jsx)(M,{variant:"text",size:"small",icon:(0,i.jsx)(_,{name:"ArrowLeftOutlined"}),onClick:a,style:{padding:"0 4px"}}),o&&o.length>0&&(0,i.jsx)(eX,{items:o.map(e=>({title:e.title,...e.href?{href:e.href}:{}}))})]}),(0,i.jsxs)("div",{style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:c.marginSM},children:[(0,i.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:c.marginSM,minWidth:0},children:[n&&(0,i.jsx)("span",{style:{fontSize:24,color:c.colorPrimary,flexShrink:0,display:"flex",alignItems:"center"},children:n}),(0,i.jsxs)("div",{style:{minWidth:0},children:["string"==typeof e?(0,i.jsx)("h2",{style:{margin:0,fontSize:c.fontSizeHeading3,fontWeight:c.fontWeightStrong,color:c.colorTextHeading,lineHeight:1.3},children:e}):e,r&&(0,i.jsx)("div",{style:{marginTop:4},children:"string"==typeof r?(0,i.jsx)(x,{color:"secondary",size:"sm",children:r}):r})]})]}),t&&(0,i.jsx)("div",{style:{display:"flex",alignItems:"center",gap:c.marginXS,flexShrink:0},children:t})]}),s&&(0,i.jsx)("div",{style:{marginTop:c.marginSM},children:s}),d&&(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(k,{style:{marginBottom:0}}),l]})]})}function e5({children:e,gap:r=24,style:n,...o}){return(0,i.jsx)("div",{style:{marginBottom:r,...n},...o,children:e})}function e7({variant:e="info",title:r,message:n,description:t,showIcon:l,closable:a,onClose:s,action:c,icon:d,className:u,style:g}){return(0,i.jsx)(o.Alert,{type:e,message:r||n,description:r?t||n:t,showIcon:l,closable:a,onClose:s,action:c,icon:d,className:u,style:g})}var{useToken:e8}=o.theme;function e9({icon:e,title:r,description:n,action:l,children:a,useDefaultImage:s,image:c,className:d,style:u}){let{token:g}=e8(),f=a??l;if(s||void 0!==c)return(0,i.jsx)(o.Empty,{description:n,image:c,className:d,style:u,children:f});let p={padding:t.spacing["8"],textAlign:"center",...u};return(0,i.jsx)(m,{className:d,style:p,children:(0,i.jsxs)(h,{direction:"column",align:"center",gap:3,children:[e&&(0,i.jsx)(m,{style:{fontSize:"48px",color:g.colorTextSecondary},children:e}),r&&(0,i.jsx)(x,{size:"lg",weight:"semibold",children:r}),n&&(0,i.jsx)(x,{size:"base",color:"secondary",children:n}),f&&(0,i.jsx)(m,{mt:2,children:f})]})})}e9.PRESENTED_IMAGE_SIMPLE=o.Empty.PRESENTED_IMAGE_SIMPLE,e9.PRESENTED_IMAGE_DEFAULT=o.Empty.PRESENTED_IMAGE_DEFAULT;var{useToken:re}=o.theme;function rr({icon:e,title:r="Something went wrong",description:n,details:o,showRetry:l=!1,retryText:a="Try again",onRetry:s,action:c,className:d,style:u}){let{token:g}=re(),f={padding:t.spacing["8"],textAlign:"center",...u};return(0,i.jsx)(m,{className:d,style:f,children:(0,i.jsxs)(h,{direction:"column",align:"center",gap:3,children:[e&&(0,i.jsx)(m,{style:{fontSize:"48px",color:g.colorError},children:e}),(0,i.jsx)(x,{size:"lg",weight:"semibold",color:"error",children:r}),n&&(0,i.jsx)(x,{size:"base",color:"secondary",children:n}),o&&(0,i.jsx)(m,{p:3,style:{backgroundColor:g.colorErrorBg,borderRadius:g.borderRadius,maxWidth:"600px",width:"100%"},children:(0,i.jsx)(x,{size:"sm",as:"pre",style:{margin:0,textAlign:"left",whiteSpace:"pre-wrap"},children:o})}),(l||c)&&(0,i.jsx)(m,{mt:2,children:c||(0,i.jsx)(M,{variant:"primary",onClick:s,children:a})})]})})}function rn({loading:e=!0,children:r,avatar:n,avatarShape:t="circle",lines:l=3,title:a=!0,active:s=!0,className:c,style:d}){return(0,i.jsx)(o.Skeleton,{loading:e,avatar:!!n&&{shape:t},paragraph:{rows:l},title:a,active:s,className:c,style:d,children:r})}function ro(e){return(0,i.jsx)(o.Skeleton.Button,{...e})}function rt(e){return(0,i.jsx)(o.Skeleton.Input,{...e})}function ri(e){return(0,i.jsx)(o.Skeleton.Image,{...e})}function rl(e){return(0,i.jsx)(o.Skeleton.Node,{...e})}function ra({width:e="100%",height:r="1em",gap:n=6,className:t,style:l}){let a=Array.isArray(e)?e:[e];return(0,i.jsx)("span",{className:t,style:{display:"inline-flex",flexDirection:"column",gap:n,...l},children:a.map((e,n)=>(0,i.jsx)("span",{style:{display:"inline-block",width:e,height:r,overflow:"hidden",borderRadius:4,flexShrink:0},children:(0,i.jsx)(o.Skeleton.Input,{active:!0,size:"small",style:{width:"100%",minWidth:"unset",height:"100%",display:"block"}})},n))})}function rs(e){return(0,i.jsx)(o.Spin,{...e})}function rc(e){return(0,i.jsx)(o.Result,{...e})}var rd=o.message;function ru(){return o.message.useMessage()}var rg=o.notification;function rf(){return o.notification.useNotification()}function rp({open:e,title:r,children:n,width:t="default",closable:l=!0,maskClosable:a=!0,footer:s,okText:c,cancelText:d,confirmLoading:u,onOk:g,onCancel:f,onClose:p,className:x,style:m}){let h={small:416,default:520,large:800,full:window.innerWidth-64},y="number"==typeof t?t:h[t];return(0,i.jsx)(o.Modal,{open:e,title:r,width:y,closable:l,maskClosable:a,footer:s,okText:c,cancelText:d,confirmLoading:u,onOk:g,onCancel:f||p,className:x,style:m,children:n})}var rx=o.Modal.confirm,rm=o.Modal.info,rh=o.Modal.success,ry=o.Modal.error,rj=o.Modal.warning;function rI({title:e,children:r,placement:n="top",arrow:t=!0,trigger:l="hover",open:a,className:s}){return(0,i.jsx)(o.Tooltip,{title:e,placement:n,arrow:t,trigger:l,open:a,className:s,children:r})}function rb(e){return(0,i.jsx)(o.Drawer,{...e})}function rS(e){return(0,i.jsx)(o.Popconfirm,{...e})}function rv(e){return(0,i.jsx)(o.Popover,{...e})}var{useToken:rU}=o.theme;function rT({content:e,className:r,style:n}){let o,{token:t}=rU(),l={padding:t.padding,backgroundColor:t.colorBgContainer,borderRadius:t.borderRadius,border:`1px solid ${t.colorBorder}`,lineHeight:1.6,...n},a={fontFamily:t.fontFamily,fontSize:t.fontSize,color:t.colorText};return(0,i.jsx)(m,{className:r,style:l,children:(0,i.jsx)("div",{style:a,dangerouslySetInnerHTML:{__html:(o=(o=(o=(o=(o=(o=(o=e.replace(/^### (.*$)/gim,"<h3>$1</h3>")).replace(/^## (.*$)/gim,"<h2>$1</h2>")).replace(/^# (.*$)/gim,"<h1>$1</h1>")).replace(/\*\*(.*?)\*\*/g,"<strong>$1</strong>")).replace(/\*(.*?)\*/g,"<em>$1</em>")).replace(/`(.*?)`/g,"<code>$1</code>")).replace(/\[([^\]]+)\]\(([^)]+)\)/g,'<a href="$2">$1</a>')).replace(/\n/g,"<br />")}})})}var{useToken:rk}=o.theme;function rC({data:e,collapsed:r=!1,indent:n=2,showLineNumbers:o=!1,className:t,style:a}){let{token:s}=rk(),c=l.useMemo(()=>{try{return JSON.stringify(e,null,n)}catch(e){return`Error: ${e instanceof Error?e.message:"Invalid JSON"}`}},[e,n]),d=c.split("\n"),u={backgroundColor:s.colorBgContainer,borderRadius:s.borderRadius,border:`1px solid ${s.colorBorder}`,overflow:"auto",maxHeight:"600px",...a},g={display:"block",fontFamily:'Consolas, Monaco, "Courier New", monospace',fontSize:"13px",lineHeight:"1.6",padding:s.padding,margin:0,whiteSpace:"pre",color:s.colorText},f={display:"inline-block",width:"40px",color:s.colorTextSecondary,userSelect:"none",textAlign:"right",marginRight:s.marginSM},p=rw(c,s);return(0,i.jsx)(m,{className:t,style:u,children:(0,i.jsx)("pre",{style:g,children:o?d.map((e,r)=>(0,i.jsxs)("div",{children:[(0,i.jsx)("span",{style:f,children:r+1}),(0,i.jsx)("span",{dangerouslySetInnerHTML:{__html:rw(e,s)}})]},r)):(0,i.jsx)("span",{dangerouslySetInnerHTML:{__html:p}})})})}function rw(e,r){return(e=(e=(e=(e=e.replace(/"([^"]+)":/g,`<span style="color: ${r.colorPrimary}">"$1"</span>:`)).replace(/: "([^"]*)"/g,`: <span style="color: ${r.colorSuccess}">"$1"</span>`)).replace(/: (\d+)/g,`: <span style="color: ${r.colorWarning}">$1</span>`)).replace(/: (true|false)/g,`: <span style="color: ${r.colorInfo}">$1</span>`)).replace(/: (null)/g,`: <span style="color: ${r.colorTextSecondary}">$1</span>`)}var rB={add:{bg:"rgba(22, 163, 74, 0.12)",border:"var(--success, #16a34a)",color:"var(--success, #16a34a)"},remove:{bg:"rgba(220, 38, 38, 0.12)",border:"var(--error, #dc2626)",color:"var(--error, #dc2626)"},header:{bg:"var(--bg-tertiary, rgba(0,0,0,0.04))",border:"transparent",color:"var(--text-secondary, #6b7280)"},context:{bg:"transparent",border:"transparent",color:"inherit"}};function rM({diff:e,showLineNumbers:r=!0,maxHeight:n=500,className:o,style:t}){if(!e||""===e.trim())return(0,i.jsx)("div",{style:{padding:16,textAlign:"center"},children:(0,i.jsx)(y,{type:"secondary",children:"No changes to display"})});let l=e.split("\n");return(0,i.jsx)("div",{className:o,style:{background:"var(--bg-tertiary, rgba(0,0,0,0.02))",border:"1px solid var(--border-primary, rgba(0,0,0,0.1))",borderRadius:"var(--radius-md, 6px)",fontFamily:'Monaco, Menlo, "Courier New", monospace',fontSize:13,lineHeight:1.5,maxHeight:n,overflow:"auto",...t},children:l.map((e,n)=>{let o=e.startsWith("@@")?"header":e.startsWith("+")?"add":e.startsWith("-")?"remove":"context",t=rB[o],l="add"===o||"remove"===o;return(0,i.jsxs)("div",{style:{display:"flex",background:t.bg,borderLeft:l?`3px solid ${t.border}`:"none",paddingLeft:l?8:11},children:[r&&(0,i.jsx)("span",{style:{minWidth:44,textAlign:"right",paddingRight:12,userSelect:"none",color:"var(--text-secondary, #6c757d)",fontSize:12},children:n+1}),(0,i.jsx)("pre",{style:{margin:0,padding:0,color:t.color,whiteSpace:"pre",flex:1},children:e})]},n)})})}}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.rspackChunk_kb_labs_release_manager_cli=self.rspackChunk_kb_labs_release_manager_cli||[]).push([[165],{1597(e,t,r){var i=r(2913);function n(e){var t="https://react.dev/errors/"+e;if(1<arguments.length){t+="?args[]="+encodeURIComponent(arguments[1]);for(var r=2;r<arguments.length;r++)t+="&args[]="+encodeURIComponent(arguments[r])}return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function o(){}var s={d:{f:o,r:function(){throw Error(n(522))},D:o,C:o,L:o,m:o,X:o,S:o,M:o},p:0,findDOMNode:null},f=Symbol.for("react.portal"),c=i.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function a(e,t){return"font"===e?"":"string"==typeof t?"use-credentials"===t?t:"":void 0}t.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=s,t.createPortal=function(e,t){var r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!t||1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType)throw Error(n(299));return function(e,t,r){var i=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:f,key:null==i?null:""+i,children:e,containerInfo:t,implementation:r}}(e,t,null,r)},t.flushSync=function(e){var t=c.T,r=s.p;try{if(c.T=null,s.p=2,e)return e()}finally{c.T=t,s.p=r,s.d.f()}},t.preconnect=function(e,t){"string"==typeof e&&(t=t?"string"==typeof(t=t.crossOrigin)?"use-credentials"===t?t:"":void 0:null,s.d.C(e,t))},t.prefetchDNS=function(e){"string"==typeof e&&s.d.D(e)},t.preinit=function(e,t){if("string"==typeof e&&t&&"string"==typeof t.as){var r=t.as,i=a(r,t.crossOrigin),n="string"==typeof t.integrity?t.integrity:void 0,o="string"==typeof t.fetchPriority?t.fetchPriority:void 0;"style"===r?s.d.S(e,"string"==typeof t.precedence?t.precedence:void 0,{crossOrigin:i,integrity:n,fetchPriority:o}):"script"===r&&s.d.X(e,{crossOrigin:i,integrity:n,fetchPriority:o,nonce:"string"==typeof t.nonce?t.nonce:void 0})}},t.preinitModule=function(e,t){if("string"==typeof e)if("object"==typeof t&&null!==t){if(null==t.as||"script"===t.as){var r=a(t.as,t.crossOrigin);s.d.M(e,{crossOrigin:r,integrity:"string"==typeof t.integrity?t.integrity:void 0,nonce:"string"==typeof t.nonce?t.nonce:void 0})}}else null==t&&s.d.M(e)},t.preload=function(e,t){if("string"==typeof e&&"object"==typeof t&&null!==t&&"string"==typeof t.as){var r=t.as,i=a(r,t.crossOrigin);s.d.L(e,r,{crossOrigin:i,integrity:"string"==typeof t.integrity?t.integrity:void 0,nonce:"string"==typeof t.nonce?t.nonce:void 0,type:"string"==typeof t.type?t.type:void 0,fetchPriority:"string"==typeof t.fetchPriority?t.fetchPriority:void 0,referrerPolicy:"string"==typeof t.referrerPolicy?t.referrerPolicy:void 0,imageSrcSet:"string"==typeof t.imageSrcSet?t.imageSrcSet:void 0,imageSizes:"string"==typeof t.imageSizes?t.imageSizes:void 0,media:"string"==typeof t.media?t.media:void 0})}},t.preloadModule=function(e,t){if("string"==typeof e)if(t){var r=a(t.as,t.crossOrigin);s.d.m(e,{as:"string"==typeof t.as&&"script"!==t.as?t.as:void 0,crossOrigin:r,integrity:"string"==typeof t.integrity?t.integrity:void 0})}else s.d.m(e)},t.requestFormReset=function(e){s.d.r(e)},t.unstable_batchedUpdates=function(e,t){return e(t)},t.useFormState=function(e,t,r){return c.H.useFormState(e,t,r)},t.useFormStatus=function(){return c.H.useHostTransitionStatus()},t.version="19.2.5"},1297(e,t,r){!function e(){if("u">typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(e){console.error(e)}}(),e.exports=r(1597)}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.rspackChunk_kb_labs_release_manager_cli=self.rspackChunk_kb_labs_release_manager_cli||[]).push([[326],{6026(e,r){var a=Symbol.for("react.transitional.element");function s(e,r,s){var l=null;if(void 0!==s&&(l=""+s),void 0!==r.key&&(l=""+r.key),"key"in r)for(var n in s={},r)"key"!==n&&(s[n]=r[n]);else s=r;return{$$typeof:a,type:e,key:l,ref:void 0!==(r=s.ref)?r:null,props:s}}r.Fragment=Symbol.for("react.fragment"),r.jsx=s,r.jsxs=s},4552(e,r,a){e.exports=a(6026)}}]);
|