@kb-labs/commit-entry 2.73.0 → 2.74.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.
@@ -60,7 +60,9 @@ var run_default = defineCommand({
60
60
  config,
61
61
  allowSecrets,
62
62
  autoConfirm,
63
- onProgress: (message) => analyzeLoader.update({ text: message })
63
+ onProgress: (message) => analyzeLoader.update({ text: message }),
64
+ onPauseProgress: () => analyzeLoader.stop(),
65
+ onResumeProgress: () => analyzeLoader.start()
64
66
  });
65
67
  await savePlan(cwd, plan);
66
68
  analyzeLoader.succeed(`Generated commit plan with ${plan.commits.length} commit(s)`);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/rest/handlers/scope-resolver.ts","../../../src/cli/commands/run.ts"],"names":[],"mappings":";;;;;;AAaO,SAAS,gBAAA,CACd,OAAA,EACA,OAAA,GAAkB,MAAA,EAClB,MAAA,EACQ;AACR,EAAA,MAAM,WAAW,MAAA,EAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,OAAO,CAAA;AACrD,EAAA,MAAM,YAAA,GAAe,QAAA,EAAU,IAAA,KAAS,OAAA,KAAY,SAAS,GAAA,GAAM,OAAA,CAAA;AACnE,EAAA,OAAO,YAAA,KAAiB,GAAA,GAAM,OAAA,GAAe,IAAA,CAAA,IAAA,CAAK,SAAS,YAAY,CAAA;AACzE;;;ACwBA,IAAO,cAAQ,aAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,eAAA;AAAA,EACJ,WAAA,EAAa,2CAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAqC;AACvE,MAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,MAAA,MAAM,MAAM,MAAA,EAAO;AACnB,MAAA,MAAM,GAAA,GAAO,MAAM,YAAA,CAAa,GAAA,CAAI,GAAA,IAAO,QAAQ,GAAA,EAAK,CAAA,IAAM,OAAA,CAAQ,GAAA,EAAI;AAG1E,MAAA,MAAM,UAAA,GAAa,MAAM,SAAA,EAAuC;AAGhE,MAAA,MAAM,GAAA,GAAM,SAAA,CAAU,KAAA,CAAM,GAAA,CAAI,OAAO,CAAA;AAEvC,MAAA,MAAM,MAAA,GAAS,mBAAA,CAAoB,UAAA,IAAc,IAAI,GAAG,CAAA;AAGxD,MAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,IAAS,KAAA;AAC7B,MAAA,MAAM,cAAA,GAAiB,KAAA,CAAM,KAAA,IAAS,MAAA,CAAO,OAAO,OAAA,IAAW,MAAA;AAC/D,MAAA,MAAM,WAAW,gBAAA,CAAiB,GAAA,EAAK,cAAA,EAAgB,MAAA,CAAO,OAAO,MAAM,CAAA;AAC3E,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,SAAS,CAAA,IAAK,KAAA;AACnC,MAAA,MAAM,QAAA,GAAW,KAAA,CAAM,WAAW,CAAA,IAAK,KAAA;AACvC,MAAA,MAAM,UAAA,GAAa,MAAM,IAAA,IAAQ,KAAA;AACjC,MAAA,MAAM,YAAA,GAAe,KAAA,CAAM,eAAe,CAAA,IAAK,KAAA;AAC/C,MAAA,MAAM,WAAA,GAAc,MAAM,GAAA,IAAO,KAAA;AAGjC,MAAA,MAAM,YAAA,GAAe,UAAU,wBAAwB,CAAA;AACvD,MAAA,YAAA,CAAa,KAAA,EAAM;AACnB,MAAA,MAAM,MAAA,GAAS,MAAM,YAAA,CAAa,QAAQ,CAAA;AAE1C,MAAA,IAAI,CAAC,UAAA,CAAW,MAAM,CAAA,EAAG;AACvB,QAAA,YAAA,CAAa,IAAA,EAAK;AAClB,QAAA,GAAA,CAAI,EAAA,EAAI,OAAO,sBAAsB,CAAA;AACrC,QAAA,OAAO;AAAA,UACL,QAAA,EAAU;AAAA,SACZ;AAAA,MACF;AACA,MAAA,YAAA,CAAa,QAAQ,qBAAqB,CAAA;AAG1C,MAAA,MAAM,aAAA,GAAgB,UAAU,sBAAsB,CAAA;AACtD,MAAA,aAAA,CAAc,KAAA,EAAM;AAGpB,MAAA,MAAM,cACJ,GAAA,IAAO,MAAA,CAAO,IAAI,OAAA,GACd,OAAO,QAAgB,OAAA,KAAkF;AACvG,QAAA,MAAM,MAAA,GAAS,MAAM,GAAA,CAAI,QAAA,CAAS,MAAA,EAAQ;AAAA,UACxC,GAAG,OAAA;AAAA,UACH,WAAA,EAAa,OAAA,EAAS,WAAA,IAAe,MAAA,CAAO,GAAA,CAAI,WAAA;AAAA,UAChD,SAAA,EAAW,OAAA,EAAS,SAAA,IAAa,MAAA,CAAO,GAAA,CAAI;AAAA,SAC7C,CAAA;AACD,QAAA,OAAO;AAAA,UACL,SAAS,MAAA,CAAO,OAAA;AAAA,UAChB,UAAA,EAAY,OAAO,KAAA,GAAQ,MAAA,CAAO,MAAM,YAAA,GAAe,MAAA,CAAO,MAAM,gBAAA,GAAmB;AAAA,SACzF;AAAA,MACF,CAAA,GACA,MAAA;AAEN,MAAA,MAAM,IAAA,GAAO,MAAM,kBAAA,CAAmB;AAAA,QACpC,GAAA,EAAK,QAAA;AAAA,QACL,WAAA;AAAA,QACA,MAAA;AAAA,QACA,YAAA;AAAA,QACA,WAAA;AAAA,QACA,UAAA,EAAY,CAAC,OAAA,KAAY,aAAA,CAAc,OAAO,EAAE,IAAA,EAAM,SAAS;AAAA,OAChE,CAAA;AAGD,MAAA,MAAM,QAAA,CAAS,KAAK,IAAI,CAAA;AAGxB,MAAA,aAAA,CAAc,OAAA,CAAQ,CAAA,2BAAA,EAA8B,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA,UAAA,CAAY,CAAA;AAGnF,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,MAAM,YAAA,GAAe,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,KAAW;AAChD,UAAA,MAAM,QAAQ,MAAA,CAAO,KAAA,GAAQ,CAAA,CAAA,EAAI,MAAA,CAAO,KAAK,CAAA,CAAA,CAAA,GAAM,EAAA;AACnD,UAAA,OAAO,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA,EAAG,KAAK,CAAA,EAAA,EAAK,MAAA,CAAO,OAAO,CAAA,EAAA,EAAK,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA,SAAA,CAAA;AAAA,QAC1E,CAAC,CAAA;AAED,QAAA,MAAM,YAAA,GAAyB;AAAA,UAC7B,CAAA,OAAA,EAAU,IAAA,CAAK,QAAA,CAAS,UAAU,CAAA,CAAA;AAAA,UAClC,CAAA,SAAA,EAAY,IAAA,CAAK,QAAA,CAAS,YAAY,CAAA,CAAA;AAAA,UACtC;AAAA,SACF;AAEA,QAAA,IAAI,IAAA,CAAK,SAAS,OAAA,EAAS;AACzB,UAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,SAAA,GAAY,qBAAA,GAAwB,SAAA;AACnE,UAAA,YAAA,CAAa,IAAA,CAAK,CAAA,KAAA,EAAQ,QAAQ,CAAA,CAAE,CAAA;AACpC,UAAA,IAAI,IAAA,CAAK,SAAS,UAAA,EAAY;AAC5B,YAAA,YAAA,CAAa,IAAA,CAAK,CAAA,QAAA,EAAW,IAAA,CAAK,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,UACzD;AAAA,QACF,CAAA,MAAO;AACL,UAAA,YAAA,CAAa,KAAK,uBAAuB,CAAA;AAAA,QAC3C;AAEA,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAE5B,QAAA,GAAA,CAAI,EAAA,EAAI,UAAU,qCAAA,EAAuC;AAAA,UACvD,KAAA,EAAO,sBAAA;AAAA,UACP,QAAA,EAAU;AAAA,YACR,EAAE,MAAA,EAAQ,SAAA,EAAW,KAAA,EAAO,YAAA,EAAa;AAAA,YACzC,EAAE,MAAA,EAAQ,iBAAA,EAAmB,KAAA,EAAO,YAAA;AAAa,WACnD;AAAA,UACA;AAAA,SACD,CAAA;AAED,QAAA,OAAO;AAAA,UACL,QAAA,EAAU,CAAA;AAAA,UACV,MAAA,EAAQ;AAAA,YACN,IAAA;AAAA,YACA,OAAA,EAAS,KAAA;AAAA,YACT,MAAA,EAAQ,KAAA;AAAA,YACR,OAAA,EAAS,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,cAChC,IAAI,CAAA,CAAE,EAAA;AAAA,cACN,OAAA,EAAS,CAAA,EAAG,CAAA,CAAE,IAAI,GAAG,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAA,EAAI,CAAA,CAAE,KAAK,CAAA,CAAA,CAAA,GAAM,EAAE,CAAA,EAAA,EAAK,EAAE,OAAO,CAAA;AAAA,aAClE,CAAE;AAAA,WACJ;AAAA,UACA,IAAA,EAAM;AAAA,YACJ;AAAA;AACF,SACF;AAAA,MACF;AAGA,MAAA,MAAM,WAAA,GAAc,UAAU,qBAAqB,CAAA;AACnD,MAAA,WAAA,CAAY,KAAA,EAAM;AAClB,MAAA,MAAM,WAAA,GAAc,MAAM,eAAA,CAAgB,QAAA,EAAU,IAAI,CAAA;AAExD,MAAA,IAAI,CAAC,YAAY,OAAA,EAAS;AACxB,QAAA,WAAA,CAAY,KAAK,yBAAyB,CAAA;AAC1C,QAAA,KAAA,MAAW,KAAA,IAAS,YAAY,MAAA,EAAQ;AACtC,UAAA,GAAA,CAAI,EAAA,EAAI,KAAA,GAAQ,CAAA,EAAA,EAAK,KAAK,CAAA,CAAE,CAAA;AAAA,QAC9B;AACA,QAAA,OAAO;AAAA,UACL,QAAA,EAAU;AAAA,SACZ;AAAA,MACF;AAGA,MAAA,MAAM,aAAA,CAAc,GAAA,EAAK,IAAA,EAAM,WAAW,CAAA;AAC1C,MAAA,MAAM,UAAU,GAAG,CAAA;AAEnB,MAAA,WAAA,CAAY,OAAA,CAAQ,CAAA,QAAA,EAAW,WAAA,CAAY,cAAA,CAAe,MAAM,CAAA,UAAA,CAAY,CAAA;AAG5E,MAAA,IAAI,MAAA,GAAS,KAAA;AACb,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,MAAM,UAAA,GAAa,UAAU,oBAAoB,CAAA;AACjD,QAAA,UAAA,CAAW,KAAA,EAAM;AACjB,QAAA,MAAM,UAAA,GAAa,MAAM,WAAA,CAAY,QAAQ,CAAA;AAE7C,QAAA,IAAI,WAAW,OAAA,EAAS;AACtB,UAAA,MAAA,GAAS,IAAA;AACT,UAAA,UAAA,CAAW,QAAQ,CAAA,UAAA,EAAa,UAAA,CAAW,MAAM,CAAA,CAAA,EAAI,UAAA,CAAW,MAAM,CAAA,CAAE,CAAA;AAAA,QAC1E,CAAA,MAAO;AACL,UAAA,UAAA,CAAW,IAAA,CAAK,CAAA,gBAAA,EAAmB,UAAA,CAAW,KAAK,CAAA,CAAE,CAAA;AAAA,QACvD;AAAA,MACF;AAGA,MAAA,MAAM,MAAA,GAA0B;AAAA,QAC9B,IAAA;AAAA,QACA,OAAA,EAAS,IAAA;AAAA,QACT,MAAA;AAAA,QACA,OAAA,EAAS,WAAA,CAAY,cAAA,CAAe,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,UAC9C,IAAI,CAAA,CAAE,OAAA;AAAA,UACN,KAAK,CAAA,CAAE,GAAA;AAAA,UACP,SAAS,CAAA,CAAE;AAAA,SACb,CAAE;AAAA,OACJ;AAEA,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,GAAA,CAAI,EAAA,EAAI,OAAO,MAAM,CAAA;AAAA,MACvB,CAAA,MAAO;AAEL,QAAA,MAAM,YAAA,GAAe,WAAA,CAAY,cAAA,CAAe,GAAA,CAAI,CAAC,CAAA,KAAM;AACzD,UAAA,MAAM,QAAA,GAAW,CAAA,CAAE,GAAA,CAAI,SAAA,CAAU,GAAG,CAAC,CAAA;AACrC,UAAA,MAAM,YAAY,CAAA,CAAE,OAAA,CAAQ,KAAA,CAAM,IAAI,EAAE,CAAC,CAAA;AACzC,UAAA,OAAO,CAAA,CAAA,EAAI,QAAQ,CAAA,EAAA,EAAK,SAAS,CAAA,CAAA;AAAA,QACnC,CAAC,CAAA;AAGD,QAAA,MAAM,YAAA,GAAyB;AAAA,UAC7B,CAAA,SAAA,EAAY,WAAA,CAAY,cAAA,CAAe,MAAM,CAAA,CAAA;AAAA,UAC7C,CAAA,QAAA,EAAW,MAAA,GAAS,KAAA,GAAQ,IAAI,CAAA;AAAA,SAClC;AAEA,QAAA,IAAI,IAAA,CAAK,SAAS,OAAA,EAAS;AACzB,UAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,SAAA,GAAY,SAAA,GAAY,SAAA;AACvD,UAAA,YAAA,CAAa,IAAA,CAAK,CAAA,KAAA,EAAQ,QAAQ,CAAA,CAAE,CAAA;AACpC,UAAA,IAAI,IAAA,CAAK,SAAS,UAAA,EAAY;AAC5B,YAAA,YAAA,CAAa,IAAA,CAAK,CAAA,QAAA,EAAW,IAAA,CAAK,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,UACzD;AAAA,QACF;AAEA,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAE5B,QAAA,GAAA,CAAI,EAAA,EAAI,UAAU,8BAAA,EAAgC;AAAA,UAChD,KAAA,EAAO,YAAA;AAAA,UACP,QAAA,EAAU;AAAA,YACR,EAAE,MAAA,EAAQ,SAAA,EAAW,KAAA,EAAO,YAAA,EAAa;AAAA,YACzC,EAAE,MAAA,EAAQ,iBAAA,EAAmB,KAAA,EAAO,YAAA;AAAa,WACnD;AAAA,UACA;AAAA,SACD,CAAA;AAAA,MACH;AAEA,MAAA,OAAO;AAAA,QACL,QAAA,EAAU,CAAA;AAAA,QACV,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM;AAAA,UACJ,MAAA,EAAQ,IAAA,CAAK,GAAA,EAAI,GAAI;AAAA;AACvB,OACF;AAAA,IACF;AAAA;AAEJ,CAAC","file":"run.js","sourcesContent":["import * as path from 'node:path';\nimport type { CommitScope } from '@kb-labs/commit-contracts';\n\n/**\n * Resolves a scope id to an absolute filesystem path.\n *\n * Looks up the scope in the provided scopes array by id.\n * Falls back to treating the id as a relative path from baseCwd (legacy compat).\n *\n * @param baseCwd - Workspace root (ctx.cwd)\n * @param scopeId - Scope identifier, e.g. \"root\", \"public/kb-labs\"\n * @param scopes - Configured scopes from CommitPluginConfig.scope.scopes\n */\nexport function resolveScopePath(\n baseCwd: string,\n scopeId: string = 'root',\n scopes?: CommitScope[],\n): string {\n const scopeDef = scopes?.find((s) => s.id === scopeId);\n const relativePath = scopeDef?.path ?? (scopeId === 'root' ? '.' : scopeId);\n return relativePath === '.' ? baseCwd : path.join(baseCwd, relativePath);\n}\n","/**\n * commit command (default flow)\n * Generate → Apply → (optional) Push\n */\n\nimport {\n defineCommand,\n useLLM,\n useLoader,\n useConfig,\n findRepoRoot,\n type PluginContextV3,\n} from '@kb-labs/sdk';\nimport {\n generateCommitPlan,\n savePlan,\n hasChanges,\n getGitStatus,\n applyCommitPlan,\n pushCommits,\n saveToHistory,\n clearPlan,\n} from '@kb-labs/commit-core';\nimport {\n type CommitRunOutput,\n type CommitPluginConfig,\n resolveCommitConfig,\n type CommitFlags,\n commitEnv,\n} from '@kb-labs/commit-contracts';\nimport { resolveScopePath } from '../../rest/handlers/scope-resolver';\n\n// Input type with V3 handler compatibility\n// V3 handlers receive flags either in input.flags (CLI) or directly in input (REST API)\ntype RunInput = CommitFlags & {\n argv?: string[];\n flags?: CommitFlags;\n};\n\ntype RunResult = {\n exitCode: number;\n result?: CommitRunOutput;\n meta?: Record<string, unknown>;\n};\n\nexport default defineCommand({\n id: 'commit:commit',\n description: 'Generate and apply commits (default flow)',\n\n handler: {\n async execute(ctx: PluginContextV3, input: RunInput): Promise<RunResult> {\n const startTime = Date.now();\n const llm = useLLM();\n const cwd = (await findRepoRoot(ctx.cwd || process.cwd())) ?? process.cwd();\n\n // Load config from kb.config.json + env overrides\n const fileConfig = await useConfig<Partial<CommitPluginConfig>>();\n\n // V3: Parse env variables with type safety and validation\n const env = commitEnv.parse(ctx.runtime);\n\n const config = resolveCommitConfig(fileConfig ?? {}, env);\n\n // V3: Flags come in input.flags (CLI) or directly in input (REST API)\n const flags = input.flags ?? input;\n const effectiveScope = flags.scope ?? config.scope?.default ?? 'root';\n const scopeCwd = resolveScopePath(cwd, effectiveScope, config.scope?.scopes);\n const dryRun = flags['dry-run'] ?? false;\n const withPush = flags['with-push'] ?? false;\n const outputJson = flags.json ?? false;\n const allowSecrets = flags['allow-secrets'] ?? false;\n const autoConfirm = flags.yes ?? false;\n\n // 1. Check for changes\n const statusLoader = useLoader('Checking git status...');\n statusLoader.start();\n const status = await getGitStatus(scopeCwd);\n\n if (!hasChanges(status)) {\n statusLoader.stop();\n ctx.ui?.warn?.('No changes to commit');\n return {\n exitCode: 1,\n };\n }\n statusLoader.succeed('Git status analyzed');\n\n // 2. Generate plan\n const analyzeLoader = useLoader('Analyzing changes...');\n analyzeLoader.start();\n\n // Create LLM wrapper with config values\n const llmComplete =\n llm && config.llm.enabled\n ? async (prompt: string, options?: { systemPrompt?: string; temperature?: number; maxTokens?: number }) => {\n const result = await llm.complete(prompt, {\n ...options,\n temperature: options?.temperature ?? config.llm.temperature,\n maxTokens: options?.maxTokens ?? config.llm.maxTokens,\n });\n return {\n content: result.content,\n tokensUsed: result.usage ? result.usage.promptTokens + result.usage.completionTokens : undefined,\n };\n }\n : undefined;\n\n const plan = await generateCommitPlan({\n cwd: scopeCwd,\n llmComplete,\n config,\n allowSecrets,\n autoConfirm,\n onProgress: (message) => analyzeLoader.update({ text: message }),\n });\n\n // Save plan\n await savePlan(cwd, plan);\n\n // Show plan summary\n analyzeLoader.succeed(`Generated commit plan with ${plan.commits.length} commit(s)`);\n\n // If dry-run, show plan and stop\n if (dryRun) {\n const commitsItems = plan.commits.map((commit) => {\n const scope = commit.scope ? `(${commit.scope})` : '';\n return `${commit.type}${scope}: ${commit.message} [${commit.files.length} file(s)]`;\n });\n\n const summaryItems: string[] = [\n `Files: ${plan.metadata.totalFiles}`,\n `Commits: ${plan.metadata.totalCommits}`,\n 'Mode: Dry Run',\n ];\n\n if (plan.metadata.llmUsed) {\n const llmPhase = plan.metadata.escalated ? 'Phase 2 (with diff)' : 'Phase 1';\n summaryItems.push(`LLM: ${llmPhase}`);\n if (plan.metadata.tokensUsed) {\n summaryItems.push(`Tokens: ${plan.metadata.tokensUsed}`);\n }\n } else {\n summaryItems.push('Generator: Heuristics');\n }\n\n const timing = Date.now() - startTime;\n\n ctx.ui?.success?.('Plan generated (no commits created)', {\n title: 'Git Commit (Dry Run)',\n sections: [\n { header: 'Summary', items: summaryItems },\n { header: 'Planned Commits', items: commitsItems },\n ],\n timing,\n });\n\n return {\n exitCode: 0,\n result: {\n plan,\n applied: false,\n pushed: false,\n commits: plan.commits.map((c) => ({\n id: c.id,\n message: `${c.type}${c.scope ? `(${c.scope})` : ''}: ${c.message}`,\n })),\n },\n meta: {\n timing,\n },\n };\n }\n\n // 3. Apply plan\n const applyLoader = useLoader('Applying commits...');\n applyLoader.start();\n const applyResult = await applyCommitPlan(scopeCwd, plan);\n\n if (!applyResult.success) {\n applyLoader.fail('Failed to apply commits');\n for (const error of applyResult.errors) {\n ctx.ui?.error?.(` ${error}`);\n }\n return {\n exitCode: 1,\n };\n }\n\n // Save to history and clear\n await saveToHistory(cwd, plan, applyResult);\n await clearPlan(cwd);\n\n applyLoader.succeed(`Applied ${applyResult.appliedCommits.length} commit(s)`);\n\n // 4. Push (optional)\n let pushed = false;\n if (withPush) {\n const pushLoader = useLoader('Pushing commits...');\n pushLoader.start();\n const pushResult = await pushCommits(scopeCwd);\n\n if (pushResult.success) {\n pushed = true;\n pushLoader.succeed(`Pushed to ${pushResult.remote}/${pushResult.branch}`);\n } else {\n pushLoader.fail(`Failed to push: ${pushResult.error}`);\n }\n }\n\n // Output\n const output: CommitRunOutput = {\n plan,\n applied: true,\n pushed,\n commits: applyResult.appliedCommits.map((c) => ({\n id: c.groupId,\n sha: c.sha,\n message: c.message,\n })),\n };\n\n if (outputJson) {\n ctx.ui?.json?.(output);\n } else {\n // Build commits list items\n const commitsItems = applyResult.appliedCommits.map((c) => {\n const shortSha = c.sha.substring(0, 7);\n const firstLine = c.message.split('\\n')[0];\n return `[${shortSha}] ${firstLine}`;\n });\n\n // Build summary items\n const summaryItems: string[] = [\n `Commits: ${applyResult.appliedCommits.length}`,\n `Pushed: ${pushed ? 'Yes' : 'No'}`,\n ];\n\n if (plan.metadata.llmUsed) {\n const llmPhase = plan.metadata.escalated ? 'Phase 2' : 'Phase 1';\n summaryItems.push(`LLM: ${llmPhase}`);\n if (plan.metadata.tokensUsed) {\n summaryItems.push(`Tokens: ${plan.metadata.tokensUsed}`);\n }\n }\n\n const timing = Date.now() - startTime;\n\n ctx.ui?.success?.('Commits created successfully', {\n title: 'Git Commit',\n sections: [\n { header: 'Summary', items: summaryItems },\n { header: 'Commits Created', items: commitsItems },\n ],\n timing,\n });\n }\n\n return {\n exitCode: 0,\n result: output,\n meta: {\n timing: Date.now() - startTime,\n },\n };\n },\n },\n});\n"]}
1
+ {"version":3,"sources":["../../../src/rest/handlers/scope-resolver.ts","../../../src/cli/commands/run.ts"],"names":[],"mappings":"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","file":"run.js","sourcesContent":["import * as path from 'node:path';\nimport type { CommitScope } from '@kb-labs/commit-contracts';\n\n/**\n * Resolves a scope id to an absolute filesystem path.\n *\n * Looks up the scope in the provided scopes array by id.\n * Falls back to treating the id as a relative path from baseCwd (legacy compat).\n *\n * @param baseCwd - Workspace root (ctx.cwd)\n * @param scopeId - Scope identifier, e.g. \"root\", \"public/kb-labs\"\n * @param scopes - Configured scopes from CommitPluginConfig.scope.scopes\n */\nexport function resolveScopePath(\n baseCwd: string,\n scopeId: string = 'root',\n scopes?: CommitScope[],\n): string {\n const scopeDef = scopes?.find((s) => s.id === scopeId);\n const relativePath = scopeDef?.path ?? (scopeId === 'root' ? '.' : scopeId);\n return relativePath === '.' ? baseCwd : path.join(baseCwd, relativePath);\n}\n","/**\n * commit command (default flow)\n * Generate → Apply → (optional) Push\n */\n\nimport {\n defineCommand,\n useLLM,\n useLoader,\n useConfig,\n findRepoRoot,\n type PluginContextV3,\n} from '@kb-labs/sdk';\nimport {\n generateCommitPlan,\n savePlan,\n hasChanges,\n getGitStatus,\n applyCommitPlan,\n pushCommits,\n saveToHistory,\n clearPlan,\n} from '@kb-labs/commit-core';\nimport {\n type CommitRunOutput,\n type CommitPluginConfig,\n resolveCommitConfig,\n type CommitFlags,\n commitEnv,\n} from '@kb-labs/commit-contracts';\nimport { resolveScopePath } from '../../rest/handlers/scope-resolver';\n\n// Input type with V3 handler compatibility\n// V3 handlers receive flags either in input.flags (CLI) or directly in input (REST API)\ntype RunInput = CommitFlags & {\n argv?: string[];\n flags?: CommitFlags;\n};\n\ntype RunResult = {\n exitCode: number;\n result?: CommitRunOutput;\n meta?: Record<string, unknown>;\n};\n\nexport default defineCommand({\n id: 'commit:commit',\n description: 'Generate and apply commits (default flow)',\n\n handler: {\n async execute(ctx: PluginContextV3, input: RunInput): Promise<RunResult> {\n const startTime = Date.now();\n const llm = useLLM();\n const cwd = (await findRepoRoot(ctx.cwd || process.cwd())) ?? process.cwd();\n\n // Load config from kb.config.json + env overrides\n const fileConfig = await useConfig<Partial<CommitPluginConfig>>();\n\n // V3: Parse env variables with type safety and validation\n const env = commitEnv.parse(ctx.runtime);\n\n const config = resolveCommitConfig(fileConfig ?? {}, env);\n\n // V3: Flags come in input.flags (CLI) or directly in input (REST API)\n const flags = input.flags ?? input;\n const effectiveScope = flags.scope ?? config.scope?.default ?? 'root';\n const scopeCwd = resolveScopePath(cwd, effectiveScope, config.scope?.scopes);\n const dryRun = flags['dry-run'] ?? false;\n const withPush = flags['with-push'] ?? false;\n const outputJson = flags.json ?? false;\n const allowSecrets = flags['allow-secrets'] ?? false;\n const autoConfirm = flags.yes ?? false;\n\n // 1. Check for changes\n const statusLoader = useLoader('Checking git status...');\n statusLoader.start();\n const status = await getGitStatus(scopeCwd);\n\n if (!hasChanges(status)) {\n statusLoader.stop();\n ctx.ui?.warn?.('No changes to commit');\n return {\n exitCode: 1,\n };\n }\n statusLoader.succeed('Git status analyzed');\n\n // 2. Generate plan\n const analyzeLoader = useLoader('Analyzing changes...');\n analyzeLoader.start();\n\n // Create LLM wrapper with config values\n const llmComplete =\n llm && config.llm.enabled\n ? async (prompt: string, options?: { systemPrompt?: string; temperature?: number; maxTokens?: number }) => {\n const result = await llm.complete(prompt, {\n ...options,\n temperature: options?.temperature ?? config.llm.temperature,\n maxTokens: options?.maxTokens ?? config.llm.maxTokens,\n });\n return {\n content: result.content,\n tokensUsed: result.usage ? result.usage.promptTokens + result.usage.completionTokens : undefined,\n };\n }\n : undefined;\n\n const plan = await generateCommitPlan({\n cwd: scopeCwd,\n llmComplete,\n config,\n allowSecrets,\n autoConfirm,\n onProgress: (message) => analyzeLoader.update({ text: message }),\n onPauseProgress: () => analyzeLoader.stop(),\n onResumeProgress: () => analyzeLoader.start(),\n });\n\n // Save plan\n await savePlan(cwd, plan);\n\n // Show plan summary\n analyzeLoader.succeed(`Generated commit plan with ${plan.commits.length} commit(s)`);\n\n // If dry-run, show plan and stop\n if (dryRun) {\n const commitsItems = plan.commits.map((commit) => {\n const scope = commit.scope ? `(${commit.scope})` : '';\n return `${commit.type}${scope}: ${commit.message} [${commit.files.length} file(s)]`;\n });\n\n const summaryItems: string[] = [\n `Files: ${plan.metadata.totalFiles}`,\n `Commits: ${plan.metadata.totalCommits}`,\n 'Mode: Dry Run',\n ];\n\n if (plan.metadata.llmUsed) {\n const llmPhase = plan.metadata.escalated ? 'Phase 2 (with diff)' : 'Phase 1';\n summaryItems.push(`LLM: ${llmPhase}`);\n if (plan.metadata.tokensUsed) {\n summaryItems.push(`Tokens: ${plan.metadata.tokensUsed}`);\n }\n } else {\n summaryItems.push('Generator: Heuristics');\n }\n\n const timing = Date.now() - startTime;\n\n ctx.ui?.success?.('Plan generated (no commits created)', {\n title: 'Git Commit (Dry Run)',\n sections: [\n { header: 'Summary', items: summaryItems },\n { header: 'Planned Commits', items: commitsItems },\n ],\n timing,\n });\n\n return {\n exitCode: 0,\n result: {\n plan,\n applied: false,\n pushed: false,\n commits: plan.commits.map((c) => ({\n id: c.id,\n message: `${c.type}${c.scope ? `(${c.scope})` : ''}: ${c.message}`,\n })),\n },\n meta: {\n timing,\n },\n };\n }\n\n // 3. Apply plan\n const applyLoader = useLoader('Applying commits...');\n applyLoader.start();\n const applyResult = await applyCommitPlan(scopeCwd, plan);\n\n if (!applyResult.success) {\n applyLoader.fail('Failed to apply commits');\n for (const error of applyResult.errors) {\n ctx.ui?.error?.(` ${error}`);\n }\n return {\n exitCode: 1,\n };\n }\n\n // Save to history and clear\n await saveToHistory(cwd, plan, applyResult);\n await clearPlan(cwd);\n\n applyLoader.succeed(`Applied ${applyResult.appliedCommits.length} commit(s)`);\n\n // 4. Push (optional)\n let pushed = false;\n if (withPush) {\n const pushLoader = useLoader('Pushing commits...');\n pushLoader.start();\n const pushResult = await pushCommits(scopeCwd);\n\n if (pushResult.success) {\n pushed = true;\n pushLoader.succeed(`Pushed to ${pushResult.remote}/${pushResult.branch}`);\n } else {\n pushLoader.fail(`Failed to push: ${pushResult.error}`);\n }\n }\n\n // Output\n const output: CommitRunOutput = {\n plan,\n applied: true,\n pushed,\n commits: applyResult.appliedCommits.map((c) => ({\n id: c.groupId,\n sha: c.sha,\n message: c.message,\n })),\n };\n\n if (outputJson) {\n ctx.ui?.json?.(output);\n } else {\n // Build commits list items\n const commitsItems = applyResult.appliedCommits.map((c) => {\n const shortSha = c.sha.substring(0, 7);\n const firstLine = c.message.split('\\n')[0];\n return `[${shortSha}] ${firstLine}`;\n });\n\n // Build summary items\n const summaryItems: string[] = [\n `Commits: ${applyResult.appliedCommits.length}`,\n `Pushed: ${pushed ? 'Yes' : 'No'}`,\n ];\n\n if (plan.metadata.llmUsed) {\n const llmPhase = plan.metadata.escalated ? 'Phase 2' : 'Phase 1';\n summaryItems.push(`LLM: ${llmPhase}`);\n if (plan.metadata.tokensUsed) {\n summaryItems.push(`Tokens: ${plan.metadata.tokensUsed}`);\n }\n }\n\n const timing = Date.now() - startTime;\n\n ctx.ui?.success?.('Commits created successfully', {\n title: 'Git Commit',\n sections: [\n { header: 'Summary', items: summaryItems },\n { header: 'Commits Created', items: commitsItems },\n ],\n timing,\n });\n }\n\n return {\n exitCode: 0,\n result: output,\n meta: {\n timing: Date.now() - startTime,\n },\n };\n },\n },\n});\n"]}
@@ -5,7 +5,7 @@
5
5
  "name": "commitPlugin",
6
6
  "globalName": "commitPlugin",
7
7
  "buildInfo": {
8
- "buildVersion": "2.72.0",
8
+ "buildVersion": "2.73.0",
9
9
  "buildName": "@kb-labs/commit-entry"
10
10
  },
11
11
  "publicPath": "auto",
@@ -27,7 +27,7 @@
27
27
  {
28
28
  "id": "commitPlugin:@kb-labs/studio-event-bus",
29
29
  "name": "@kb-labs/studio-event-bus",
30
- "version": "2.72.0",
30
+ "version": "2.73.0",
31
31
  "singleton": true,
32
32
  "requiredVersion": "^0.1.0",
33
33
  "assets": {
@@ -47,7 +47,7 @@
47
47
  {
48
48
  "id": "commitPlugin:@kb-labs/studio-ui-core",
49
49
  "name": "@kb-labs/studio-ui-core",
50
- "version": "2.72.0",
50
+ "version": "2.73.0",
51
51
  "singleton": true,
52
52
  "requiredVersion": "^0.1.0",
53
53
  "assets": {
@@ -86,7 +86,7 @@
86
86
  {
87
87
  "id": "commitPlugin:@kb-labs/studio-hooks",
88
88
  "name": "@kb-labs/studio-hooks",
89
- "version": "2.72.0",
89
+ "version": "2.73.0",
90
90
  "singleton": true,
91
91
  "requiredVersion": "^0.1.0",
92
92
  "assets": {
@@ -106,7 +106,7 @@
106
106
  {
107
107
  "id": "commitPlugin:@kb-labs/studio-ui-kit",
108
108
  "name": "@kb-labs/studio-ui-kit",
109
- "version": "2.72.0",
109
+ "version": "2.73.0",
110
110
  "singleton": true,
111
111
  "requiredVersion": "^0.1.0",
112
112
  "assets": {
@@ -126,15 +126,16 @@
126
126
  }
127
127
  },
128
128
  {
129
- "id": "commitPlugin:react",
130
- "name": "react",
129
+ "id": "commitPlugin:react-dom",
130
+ "name": "react-dom",
131
131
  "version": "19.2.5",
132
132
  "singleton": true,
133
133
  "requiredVersion": "^19.0.0",
134
134
  "assets": {
135
135
  "js": {
136
136
  "sync": [
137
- "405.js"
137
+ "165.js",
138
+ "546.js"
138
139
  ],
139
140
  "async": []
140
141
  },
@@ -145,16 +146,15 @@
145
146
  }
146
147
  },
147
148
  {
148
- "id": "commitPlugin:react-dom",
149
- "name": "react-dom",
149
+ "id": "commitPlugin:react",
150
+ "name": "react",
150
151
  "version": "19.2.5",
151
152
  "singleton": true,
152
153
  "requiredVersion": "^19.0.0",
153
154
  "assets": {
154
155
  "js": {
155
156
  "sync": [
156
- "165.js",
157
- "546.js"
157
+ "405.js"
158
158
  ],
159
159
  "async": []
160
160
  },
@@ -5,7 +5,7 @@
5
5
  "name": "commitPlugin",
6
6
  "globalName": "commitPlugin",
7
7
  "buildInfo": {
8
- "buildVersion": "2.72.0",
8
+ "buildVersion": "2.73.0",
9
9
  "buildName": "@kb-labs/commit-entry"
10
10
  },
11
11
  "publicPath": "auto",
@@ -27,7 +27,7 @@
27
27
  {
28
28
  "id": "commitPlugin:@kb-labs/studio-event-bus",
29
29
  "name": "@kb-labs/studio-event-bus",
30
- "version": "2.72.0",
30
+ "version": "2.73.0",
31
31
  "requiredVersion": "^0.1.0",
32
32
  "singleton": true,
33
33
  "assets": {
@@ -48,7 +48,7 @@
48
48
  {
49
49
  "id": "commitPlugin:@kb-labs/studio-ui-core",
50
50
  "name": "@kb-labs/studio-ui-core",
51
- "version": "2.72.0",
51
+ "version": "2.73.0",
52
52
  "requiredVersion": "^0.1.0",
53
53
  "singleton": true,
54
54
  "assets": {
@@ -89,7 +89,7 @@
89
89
  {
90
90
  "id": "commitPlugin:@kb-labs/studio-hooks",
91
91
  "name": "@kb-labs/studio-hooks",
92
- "version": "2.72.0",
92
+ "version": "2.73.0",
93
93
  "requiredVersion": "^0.1.0",
94
94
  "singleton": true,
95
95
  "assets": {
@@ -110,7 +110,7 @@
110
110
  {
111
111
  "id": "commitPlugin:@kb-labs/studio-ui-kit",
112
112
  "name": "@kb-labs/studio-ui-kit",
113
- "version": "2.72.0",
113
+ "version": "2.73.0",
114
114
  "requiredVersion": "^0.1.0",
115
115
  "singleton": true,
116
116
  "assets": {
@@ -131,15 +131,16 @@
131
131
  "usedIn": []
132
132
  },
133
133
  {
134
- "id": "commitPlugin:react",
135
- "name": "react",
134
+ "id": "commitPlugin:react-dom",
135
+ "name": "react-dom",
136
136
  "version": "19.2.5",
137
137
  "requiredVersion": "^19.0.0",
138
138
  "singleton": true,
139
139
  "assets": {
140
140
  "js": {
141
141
  "sync": [
142
- "405.js"
142
+ "165.js",
143
+ "546.js"
143
144
  ],
144
145
  "async": []
145
146
  },
@@ -151,16 +152,15 @@
151
152
  "usedIn": []
152
153
  },
153
154
  {
154
- "id": "commitPlugin:react-dom",
155
- "name": "react-dom",
155
+ "id": "commitPlugin:react",
156
+ "name": "react",
156
157
  "version": "19.2.5",
157
158
  "requiredVersion": "^19.0.0",
158
159
  "singleton": true,
159
160
  "assets": {
160
161
  "js": {
161
162
  "sync": [
162
- "165.js",
163
- "546.js"
163
+ "405.js"
164
164
  ],
165
165
  "async": []
166
166
  },