@kb-labs/commit-entry 2.93.0 → 2.96.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/apply.js +10 -5
- package/dist/cli/commands/apply.js.map +1 -1
- package/dist/cli/commands/generate.d.ts +1 -1
- package/dist/cli/commands/generate.js +23 -10
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/open.d.ts +1 -1
- package/dist/cli/commands/open.js +8 -2
- package/dist/cli/commands/open.js.map +1 -1
- package/dist/cli/commands/push.js +9 -4
- package/dist/cli/commands/push.js.map +1 -1
- package/dist/cli/commands/reset.js +14 -2
- package/dist/cli/commands/reset.js.map +1 -1
- package/dist/cli/commands/run.d.ts +3 -6
- package/dist/cli/commands/run.js +75 -82
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +25 -19
- package/dist/index.js.map +1 -1
- package/dist/manifest.d.ts +45 -7
- package/dist/manifest.js +25 -19
- package/dist/manifest.js.map +1 -1
- package/dist/rest/handlers/actions-handler.js +9 -5
- package/dist/rest/handlers/actions-handler.js.map +1 -1
- package/dist/rest/handlers/apply-handler.js +2 -2
- package/dist/rest/handlers/apply-handler.js.map +1 -1
- package/dist/rest/handlers/diff-handler.d.ts +2 -2
- package/dist/rest/handlers/diff-handler.js +2 -2
- package/dist/rest/handlers/diff-handler.js.map +1 -1
- package/dist/rest/handlers/files-handler.js +2 -2
- package/dist/rest/handlers/files-handler.js.map +1 -1
- package/dist/rest/handlers/generate-handler.d.ts +2 -2
- package/dist/rest/handlers/generate-handler.js +2 -2
- package/dist/rest/handlers/generate-handler.js.map +1 -1
- package/dist/rest/handlers/git-status-handler.js +2 -2
- package/dist/rest/handlers/git-status-handler.js.map +1 -1
- package/dist/rest/handlers/patch-plan-handler.js +40 -36
- package/dist/rest/handlers/patch-plan-handler.js.map +1 -1
- package/dist/rest/handlers/plan-handler.d.ts +1 -1
- package/dist/rest/handlers/plan-handler.js +2 -5
- package/dist/rest/handlers/plan-handler.js.map +1 -1
- package/dist/rest/handlers/push-handler.js +2 -2
- package/dist/rest/handlers/push-handler.js.map +1 -1
- package/dist/rest/handlers/regenerate-handler.d.ts +1 -1
- package/dist/rest/handlers/regenerate-handler.js +2 -2
- package/dist/rest/handlers/regenerate-handler.js.map +1 -1
- package/dist/rest/handlers/reset-handler.d.ts +1 -1
- package/dist/rest/handlers/reset-handler.js +2 -6
- package/dist/rest/handlers/reset-handler.js.map +1 -1
- package/dist/rest/handlers/scopes-handler.js +17 -13
- package/dist/rest/handlers/scopes-handler.js.map +1 -1
- package/dist/rest/handlers/status-handler.js +2 -9
- package/dist/rest/handlers/status-handler.js.map +1 -1
- package/dist/rest/handlers/summarize-handler.d.ts +1 -1
- package/dist/rest/handlers/summarize-handler.js +2 -2
- package/dist/rest/handlers/summarize-handler.js.map +1 -1
- package/dist/widgets/117.js +24 -1
- package/dist/widgets/117.js.map +1 -1
- package/dist/widgets/370.js +1 -1
- package/dist/widgets/370.js.map +1 -1
- package/dist/widgets/62.js +97 -0
- package/dist/widgets/62.js.map +1 -0
- package/dist/widgets/__federation_expose_CommitOverview.js +1 -1
- package/dist/widgets/__federation_expose_CommitOverview.js.map +1 -1
- package/dist/widgets/mf-manifest.json +27 -27
- package/dist/widgets/mf-stats.json +27 -27
- package/dist/widgets/remoteEntry.js +2 -2
- package/dist/widgets/remoteEntry.js.map +1 -1
- package/package.json +8 -7
- package/dist/widgets/418.js +0 -39
- package/dist/widgets/418.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
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"]}
|
|
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 handleError,\n type PluginContextV3,\n type CLIInput,\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\ntype RunResult = {\n exitCode: number;\n result?: CommitRunOutput;\n meta?: Record<string, unknown>;\n};\n\nasync function resolveContext(ctx: PluginContextV3, flags: CommitFlags) {\n const llm = useLLM();\n const cwd = (await findRepoRoot(ctx.cwd || process.cwd())) ?? process.cwd();\n const fileConfig = await useConfig<Partial<CommitPluginConfig>>();\n const env = commitEnv.parse(ctx.runtime);\n const config = resolveCommitConfig(fileConfig ?? {}, env);\n const effectiveScope = flags.scope ?? config.scope?.default ?? 'root';\n const scopeCwd = resolveScopePath(cwd, effectiveScope, config.scope?.scopes);\n\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 return { cwd, config, effectiveScope, scopeCwd, llmComplete };\n}\n\nexport default defineCommand({\n id: 'commit:commit',\n description: 'Generate and apply commits (default flow)',\n\n handler: {\n async intent(ctx: PluginContextV3, input: CLIInput<CommitFlags>) {\n const flags = input.flags;\n const { effectiveScope, scopeCwd, llmComplete, config } = await resolveContext(ctx, flags);\n\n const status = await getGitStatus(scopeCwd);\n if (!hasChanges(status)) {\n return {\n summary: 'No changes to commit',\n operations: [],\n };\n }\n\n const plan = await generateCommitPlan({\n cwd: scopeCwd,\n llmComplete,\n config,\n allowSecrets: flags['allow-secrets'] ?? false,\n autoConfirm: flags.yes ?? false,\n });\n\n return {\n summary: `Generate and apply ${plan.commits.length} commit(s) in scope \"${effectiveScope}\"`,\n operations: plan.commits.map(c => ({\n type: 'create' as const,\n resource: 'git-commit',\n details: {\n message: `${c.type}${c.scope ? `(${c.scope})` : ''}: ${c.message}`,\n files: c.files.length,\n },\n })),\n };\n },\n\n async execute(ctx: PluginContextV3, input: CLIInput<CommitFlags>): Promise<RunResult> {\n const startTime = Date.now();\n const flags = input.flags;\n const { cwd, effectiveScope, scopeCwd, llmComplete, config } = await resolveContext(ctx, flags);\n const withPush = flags['with-push'] ?? false;\n const outputJson = flags.json ?? false;\n\n // 1. Check for changes\n const statusLoader = useLoader('Checking git status...');\n statusLoader.start();\n let status;\n try {\n status = await getGitStatus(scopeCwd);\n } catch (err) {\n statusLoader.fail('Failed to check git status');\n handleError(ctx, err, outputJson);\n return { exitCode: 1 };\n }\n\n if (!hasChanges(status)) {\n statusLoader.stop();\n ctx.ui?.warn?.('No changes to commit');\n return { exitCode: 1 };\n }\n statusLoader.succeed('Git status analyzed');\n\n // 2. Generate plan\n const analyzeLoader = useLoader('Analyzing changes...');\n analyzeLoader.start();\n\n const plan = await generateCommitPlan({\n cwd: scopeCwd,\n llmComplete,\n config,\n allowSecrets: flags['allow-secrets'] ?? false,\n autoConfirm: flags.yes ?? false,\n onProgress: (message) => analyzeLoader.update({ text: message }),\n onPauseProgress: () => analyzeLoader.stop(),\n onResumeProgress: () => analyzeLoader.start(),\n });\n\n await savePlan(cwd, plan);\n analyzeLoader.succeed(`Generated commit plan with ${plan.commits.length} commit(s)`);\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 if (outputJson) {\n ctx.ui?.json?.({ ok: false, error: { code: 'APPLY_FAILED', message: applyResult.errors.join('; ') } });\n } else {\n ctx.ui?.error?.('Failed to apply commits', {\n hint: 'Check git status and resolve conflicts manually',\n cause: applyResult.errors.join('; '),\n });\n }\n return { exitCode: 1 };\n }\n\n await saveToHistory(cwd, plan, applyResult);\n await clearPlan(cwd);\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 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 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 const summaryItems: string[] = [\n `Commits: ${applyResult.appliedCommits.length}`,\n `Pushed: ${pushed ? 'Yes' : 'No'}`,\n `Scope: ${effectiveScope}`,\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 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: { timing: Date.now() - startTime },\n };\n },\n },\n});\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,4 +2,4 @@ export { ApplyFlags, EmptyFlags, GenerateFlags, JsonOnlyFlags, PushFlags, RunFla
|
|
|
2
2
|
export { default as setup } from './lifecycle/setup.js';
|
|
3
3
|
export { default as manifest } from './manifest.js';
|
|
4
4
|
import '@kb-labs/commit-contracts';
|
|
5
|
-
import '@kb-labs/
|
|
5
|
+
import '@kb-labs/plugin-contracts';
|
package/dist/index.js
CHANGED
|
@@ -180,7 +180,7 @@ var manifest = {
|
|
|
180
180
|
configSection: "commit",
|
|
181
181
|
display: {
|
|
182
182
|
name: "Commit Generator",
|
|
183
|
-
description: "AI-powered
|
|
183
|
+
description: "AI-powered conventional commit generation",
|
|
184
184
|
tags: ["commit", "git", "ai", "conventional-commits"]
|
|
185
185
|
},
|
|
186
186
|
// Platform requirements (LLM is optional but preferred)
|
|
@@ -203,16 +203,22 @@ var manifest = {
|
|
|
203
203
|
// },
|
|
204
204
|
// V3: cli wrapper with commands array
|
|
205
205
|
cli: {
|
|
206
|
+
groupMeta: [
|
|
207
|
+
{
|
|
208
|
+
path: "commit",
|
|
209
|
+
describe: "AI-powered conventional commit generation."
|
|
210
|
+
}
|
|
211
|
+
],
|
|
206
212
|
commands: [
|
|
207
213
|
// Main command: commit (default flow)
|
|
208
214
|
{
|
|
209
|
-
|
|
210
|
-
|
|
215
|
+
path: "commit",
|
|
216
|
+
category: "Pipeline",
|
|
211
217
|
describe: "Generate and apply commits (default flow).",
|
|
218
|
+
operationType: "execute",
|
|
212
219
|
longDescription: "Analyzes changes, generates commit plan with LLM, applies commits locally. Use --dry-run to preview without applying, --with-push to push after applying.",
|
|
213
220
|
// ✅ V3: handler with #default suffix
|
|
214
221
|
handler: "./cli/commands/run.js#default",
|
|
215
|
-
handlerPath: "./cli/commands/run.js",
|
|
216
222
|
flags: defineCommandFlags(runFlags),
|
|
217
223
|
examples: [
|
|
218
224
|
"kb commit commit",
|
|
@@ -223,12 +229,12 @@ var manifest = {
|
|
|
223
229
|
},
|
|
224
230
|
// commit:generate - Generate commit plan
|
|
225
231
|
{
|
|
226
|
-
|
|
227
|
-
|
|
232
|
+
path: "commit generate",
|
|
233
|
+
category: "Pipeline",
|
|
228
234
|
describe: "Generate commit plan from git changes.",
|
|
235
|
+
operationType: "execute",
|
|
229
236
|
longDescription: "Analyzes staged and unstaged changes using git diff, then uses LLM to group related changes and generate conventional commit messages.",
|
|
230
237
|
handler: "./cli/commands/generate.js#default",
|
|
231
|
-
handlerPath: "./cli/commands/generate.js",
|
|
232
238
|
flags: defineCommandFlags(generateFlags),
|
|
233
239
|
examples: [
|
|
234
240
|
"kb commit generate",
|
|
@@ -238,12 +244,12 @@ var manifest = {
|
|
|
238
244
|
},
|
|
239
245
|
// commit:apply - Apply commit plan
|
|
240
246
|
{
|
|
241
|
-
|
|
242
|
-
|
|
247
|
+
path: "commit apply",
|
|
248
|
+
category: "Pipeline",
|
|
243
249
|
describe: "Apply current commit plan (create local commits).",
|
|
250
|
+
operationType: "mutate",
|
|
244
251
|
longDescription: "Creates git commits according to the current plan. Checks for staleness (working tree changes since plan generation) unless --force is used.",
|
|
245
252
|
handler: "./cli/commands/apply.js#default",
|
|
246
|
-
handlerPath: "./cli/commands/apply.js",
|
|
247
253
|
flags: defineCommandFlags(applyFlags),
|
|
248
254
|
examples: [
|
|
249
255
|
"kb commit apply",
|
|
@@ -252,12 +258,12 @@ var manifest = {
|
|
|
252
258
|
},
|
|
253
259
|
// commit:push - Push commits
|
|
254
260
|
{
|
|
255
|
-
|
|
256
|
-
|
|
261
|
+
path: "commit push",
|
|
262
|
+
category: "Pipeline",
|
|
257
263
|
describe: "Push commits to remote repository.",
|
|
264
|
+
operationType: "execute",
|
|
258
265
|
longDescription: "Pushes local commits to the remote. Refuses force push to protected branches (main, master) by default.",
|
|
259
266
|
handler: "./cli/commands/push.js#default",
|
|
260
|
-
handlerPath: "./cli/commands/push.js",
|
|
261
267
|
flags: defineCommandFlags(pushFlags),
|
|
262
268
|
examples: [
|
|
263
269
|
"kb commit push"
|
|
@@ -265,12 +271,12 @@ var manifest = {
|
|
|
265
271
|
},
|
|
266
272
|
// commit:open - Show current plan
|
|
267
273
|
{
|
|
268
|
-
|
|
269
|
-
|
|
274
|
+
path: "commit open",
|
|
275
|
+
category: "Plan",
|
|
270
276
|
describe: "Show current commit plan.",
|
|
277
|
+
operationType: "read",
|
|
271
278
|
longDescription: "Displays the current commit plan if one exists.",
|
|
272
279
|
handler: "./cli/commands/open.js#default",
|
|
273
|
-
handlerPath: "./cli/commands/open.js",
|
|
274
280
|
flags: defineCommandFlags(jsonOnlyFlags),
|
|
275
281
|
examples: [
|
|
276
282
|
"kb commit open",
|
|
@@ -279,12 +285,12 @@ var manifest = {
|
|
|
279
285
|
},
|
|
280
286
|
// commit:reset - Clear current plan
|
|
281
287
|
{
|
|
282
|
-
|
|
283
|
-
|
|
288
|
+
path: "commit reset",
|
|
289
|
+
category: "Plan",
|
|
284
290
|
describe: "Clear current commit plan.",
|
|
291
|
+
operationType: "mutate",
|
|
285
292
|
longDescription: "Removes the current commit plan from storage.",
|
|
286
293
|
handler: "./cli/commands/reset.js#default",
|
|
287
|
-
handlerPath: "./cli/commands/reset.js",
|
|
288
294
|
flags: defineCommandFlags(emptyFlags),
|
|
289
295
|
examples: [
|
|
290
296
|
"kb commit reset"
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/commands/flags.ts","../src/lifecycle/setup.ts","../src/manifest.ts"],"names":[],"mappings":"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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyaA,SAAA,EAAW;AAAA,IACT;AAAA,MACE,EAAA,EAAI,kBAAA;AAAA,MACJ,YAAA,EAAc,8BAAA;AAAA,MACd,WAAA,EAAa;AAAA,KACf;AAAA,IACA;AAAA,MACE,EAAA,EAAI,oBAAA;AAAA,MACJ,YAAA,EAAc,gCAAA;AAAA,MACd,WAAA,EAAa;AAAA;AACf;AAEJ","file":"index.js","sourcesContent":["/**\n * Shared command flags definitions\n *\n * DRY pattern: Define flags once, use in both manifest and command handlers.\n */\n\n/**\n * Flags for commit:generate command\n */\nexport const generateFlags = {\n scope: {\n type: 'string',\n description: 'Filter by package name (@kb-labs/core), wildcard (@kb-labs/*), or path pattern (packages/**)',\n alias: 's',\n },\n json: {\n type: 'boolean',\n description: 'Output JSON',\n default: false,\n },\n} as const;\n\nexport type GenerateFlags = typeof generateFlags;\n\n/**\n * Flags for commit:apply command\n */\nexport const applyFlags = {\n force: {\n type: 'boolean',\n description: 'Apply even if working tree changed',\n default: false,\n alias: 'f',\n },\n json: {\n type: 'boolean',\n description: 'Output JSON',\n default: false,\n },\n} as const;\n\nexport type ApplyFlags = typeof applyFlags;\n\n/**\n * Flags for commit:push command\n */\nexport const pushFlags = {\n force: {\n type: 'boolean',\n description: 'Force push (dangerous!)',\n default: false,\n alias: 'f',\n },\n json: {\n type: 'boolean',\n description: 'Output JSON',\n default: false,\n },\n} as const;\n\nexport type PushFlags = typeof pushFlags;\n\n/**\n * Flags for commit (run) command - combines generate + apply + optional push\n */\nexport const runFlags = {\n scope: {\n type: 'string',\n description: 'Filter by package name (@kb-labs/core), wildcard (@kb-labs/*), or path pattern (packages/**)',\n alias: 's',\n },\n json: {\n type: 'boolean',\n description: 'Output JSON',\n default: false,\n },\n 'dry-run': {\n type: 'boolean',\n description: 'Generate plan only, do not apply',\n default: false,\n },\n 'with-push': {\n type: 'boolean',\n description: 'Push after apply',\n default: false,\n },\n} as const;\n\nexport type RunFlags = typeof runFlags;\n\n/**\n * Common json-only flags for simple commands\n */\nexport const jsonOnlyFlags = {\n json: {\n type: 'boolean',\n description: 'Output JSON',\n default: false,\n },\n} as const;\n\nexport type JsonOnlyFlags = typeof jsonOnlyFlags;\n\n/**\n * Empty flags for commands that take no arguments\n */\nexport const emptyFlags = {} as const;\n\nexport type EmptyFlags = typeof emptyFlags;\n","/**\n * Setup handler for commit plugin\n * Initializes .kb/commit/ directory structure and config\n */\n\nimport { defaultCommitConfig } from '@kb-labs/commit-contracts';\n\nconst COMMIT_DIR = '.kb/commit';\n\n/**\n * Plugin setup configuration\n *\n * Uses CommitPluginConfig from contracts as single source of truth.\n */\nexport const setup = {\n files: [\n {\n path: `${COMMIT_DIR}/README.md`,\n content: [\n '# Commit Plugin Workspace',\n '',\n 'This directory contains commit plugin data:',\n '',\n '- `current/` - Current commit plan (generated, not committed)',\n '- `history/` - Applied commit plans history',\n '',\n '## Configuration',\n '',\n 'Plugin configuration is stored in `kb.config.json` under `plugins.commit`.',\n '',\n '### Environment Variables',\n '',\n '| Variable | Description | Default |',\n '|----------|-------------|---------|',\n '| `KB_COMMIT_LLM_ENABLED` | Enable/disable LLM | `true` |',\n '| `KB_COMMIT_LLM_TEMPERATURE` | LLM temperature (0-1) | `0.3` |',\n '| `KB_COMMIT_LLM_MAX_TOKENS` | Max tokens for LLM | `2000` |',\n '| `KB_COMMIT_STORAGE_DIR` | Storage directory | `.kb/commit` |',\n '| `KB_COMMIT_AUTO_STAGE` | Auto-stage changes | `false` |',\n '',\n '## Commands',\n '',\n '```bash',\n '# Full flow: generate → apply',\n 'kb commit',\n '',\n '# Generate plan only',\n 'kb commit:generate',\n '',\n '# Apply current plan',\n 'kb commit:apply',\n '',\n '# View current plan',\n 'kb commit:open',\n '',\n '# Reset current plan',\n 'kb commit:reset',\n '',\n '# Push commits',\n 'kb commit:push',\n '```',\n '',\n 'Re-run `kb commit setup --force` to regenerate defaults.',\n ].join('\\n') + '\\n',\n description: 'README for commit plugin workspace',\n },\n ],\n\n config: [\n {\n pointer: 'plugins.commit',\n value: defaultCommitConfig,\n },\n ],\n\n scripts: [\n {\n name: 'commit',\n command: 'kb commit',\n description: 'Generate and apply commits',\n },\n {\n name: 'commit:generate',\n command: 'kb commit:generate',\n description: 'Generate commit plan from changes',\n },\n ],\n\n gitignore: [\n '.kb/commit/current/',\n '.kb/commit/history/',\n ],\n\n notes: [\n 'Run `kb commit` to analyze changes and generate commit plan.',\n 'Set KB_COMMIT_LLM_ENABLED=false to use heuristics only.',\n 'Use `kb commit:open` to view current plan before applying.',\n ],\n};\n\n/**\n * Setup handler function (for manifest registration)\n */\nexport async function run() {\n return {\n message: 'Commit plugin setup completed. Try `kb commit` to generate commits!',\n ...setup,\n };\n}\n\nexport default run;\n","/**\n * KB Labs Commit Plugin - Manifest V3\n *\n * Migration from V2 to V3 following best practices from V3-MIGRATION-GUIDE.md\n *\n * Key changes:\n * - Schema: kb.plugin/3\n * - Commands use handler#default suffix\n * - Commands have handlerPath field\n * - All imports from @kb-labs/sdk\n */\n\nimport {\n defineCommandFlags,\n combinePermissions,\n gitWorkflowPreset,\n kbPlatformPreset,\n} from '@kb-labs/sdk';\nimport {\n COMMIT_ENV_VARS,\n COMMIT_BASE_PATH,\n COMMIT_ROUTES,\n COMMIT_CACHE_PREFIX,\n} from '@kb-labs/commit-contracts';\nimport {\n runFlags,\n generateFlags,\n applyFlags,\n pushFlags,\n jsonOnlyFlags,\n emptyFlags,\n} from './cli/commands/flags';\n\n/**\n * Build permissions using presets:\n * - gitWorkflow: HOME, USER, GIT_*, SSH_* for git operations\n * - kbPlatform: KB_* env vars and .kb/ directory\n * - Custom: COMMIT_ENV_VARS, quotas, platform services (llm, cache)\n *\n * Note: LLM access goes through platform services, no direct API keys needed.\n */\nconst pluginPermissions = combinePermissions()\n .with(gitWorkflowPreset)\n .with(kbPlatformPreset)\n .withEnv([...COMMIT_ENV_VARS])\n .withFs({\n mode: 'readWrite',\n allow: ['.kb/commit/**'],\n })\n .withPlatform({\n llm: true, // Full LLM access for commit generation\n cache: [COMMIT_CACHE_PREFIX], // Cache namespace prefix from contracts\n analytics: true, // Track commit generation events\n })\n .withQuotas({\n timeoutMs: 600000, // 10 min for LLM\n memoryMb: 512,\n })\n .build();\n\nexport const manifest = {\n schema: 'kb.plugin/3',\n id: '@kb-labs/commit',\n version: '0.1.0',\n configSection: 'commit',\n\n display: {\n name: 'Commit Generator',\n description: 'AI-powered commit generation with conventional commit support.',\n tags: ['commit', 'git', 'ai', 'conventional-commits'],\n },\n\n // Platform requirements (LLM is optional but preferred)\n platform: {\n requires: ['storage', 'cache'],\n optional: ['llm', 'analytics', 'logger'],\n },\n\n // TODO: Implement V3 setup handler\n // Setup temporarily disabled during migration - needs proper V3 implementation\n // setup: {\n // handler: './lifecycle/setup.js#default',\n // handlerPath: './lifecycle/setup.js',\n // describe: 'Initialize .kb/commit/ directory structure.',\n // permissions: permissions.combine(\n // permissions.presets.pluginWorkspace('commit'),\n // {\n // quotas: { timeoutMs: 10000, memoryMb: 128, cpuMs: 3000 },\n // }\n // ),\n // },\n\n // V3: cli wrapper with commands array\n cli: {\n commands: [\n // Main command: commit (default flow)\n {\n id: 'commit',\n group: 'commit',\n describe: 'Generate and apply commits (default flow).',\n longDescription:\n 'Analyzes changes, generates commit plan with LLM, applies commits locally. ' +\n 'Use --dry-run to preview without applying, --with-push to push after applying.',\n\n // ✅ V3: handler with #default suffix\n handler: './cli/commands/run.js#default',\n handlerPath: './cli/commands/run.js',\n\n flags: defineCommandFlags(runFlags),\n\n examples: [\n 'kb commit commit',\n 'kb commit commit --dry-run',\n 'kb commit commit --with-push',\n 'kb commit commit --scope \"src/components/**\"',\n ],\n },\n\n // commit:generate - Generate commit plan\n {\n id: 'generate',\n group: 'commit',\n describe: 'Generate commit plan from git changes.',\n longDescription:\n 'Analyzes staged and unstaged changes using git diff, then uses LLM to group ' +\n 'related changes and generate conventional commit messages.',\n\n handler: './cli/commands/generate.js#default',\n handlerPath: './cli/commands/generate.js',\n\n flags: defineCommandFlags(generateFlags),\n\n examples: [\n 'kb commit generate',\n 'kb commit generate --json',\n 'kb commit generate --scope \"packages/**\"',\n ],\n },\n\n // commit:apply - Apply commit plan\n {\n id: 'apply',\n group: 'commit',\n describe: 'Apply current commit plan (create local commits).',\n longDescription:\n 'Creates git commits according to the current plan. Checks for staleness ' +\n '(working tree changes since plan generation) unless --force is used.',\n\n handler: './cli/commands/apply.js#default',\n handlerPath: './cli/commands/apply.js',\n\n flags: defineCommandFlags(applyFlags),\n\n examples: [\n 'kb commit apply',\n 'kb commit apply --force',\n ],\n },\n\n // commit:push - Push commits\n {\n id: 'push',\n group: 'commit',\n describe: 'Push commits to remote repository.',\n longDescription:\n 'Pushes local commits to the remote. Refuses force push to protected branches ' +\n '(main, master) by default.',\n\n handler: './cli/commands/push.js#default',\n handlerPath: './cli/commands/push.js',\n\n flags: defineCommandFlags(pushFlags),\n\n examples: [\n 'kb commit push',\n ],\n },\n\n // commit:open - Show current plan\n {\n id: 'open',\n group: 'commit',\n describe: 'Show current commit plan.',\n longDescription: 'Displays the current commit plan if one exists.',\n\n handler: './cli/commands/open.js#default',\n handlerPath: './cli/commands/open.js',\n\n flags: defineCommandFlags(jsonOnlyFlags),\n\n examples: [\n 'kb commit open',\n 'kb commit open --json',\n ],\n },\n\n // commit:reset - Clear current plan\n {\n id: 'reset',\n group: 'commit',\n describe: 'Clear current commit plan.',\n longDescription: 'Removes the current commit plan from storage.',\n\n handler: './cli/commands/reset.js#default',\n handlerPath: './cli/commands/reset.js',\n\n flags: defineCommandFlags(emptyFlags),\n\n examples: [\n 'kb commit reset',\n ],\n },\n ],\n },\n\n capabilities: [],\n\n // ✅ V3: Manifest-first permissions using composable presets\n permissions: pluginPermissions,\n\n // REST API routes (inherit permissions from manifest)\n rest: {\n basePath: COMMIT_BASE_PATH,\n routes: [\n // GET /scopes\n {\n method: 'GET',\n path: COMMIT_ROUTES.SCOPES,\n handler: './rest/handlers/scopes-handler.js#default',\n output: {\n zod: '@kb-labs/sdk#SelectDataSchema',\n },\n },\n // GET /status\n {\n method: 'GET',\n path: COMMIT_ROUTES.STATUS,\n handler: './rest/handlers/status-handler.js#default',\n output: {\n zod: '@kb-labs/commit-contracts#StatusResponseSchema',\n },\n },\n // POST /generate\n {\n method: 'POST',\n path: COMMIT_ROUTES.GENERATE,\n handler: './rest/handlers/generate-handler.js#default',\n input: {\n zod: '@kb-labs/commit-contracts#GenerateRequestSchema',\n },\n output: {\n zod: '@kb-labs/commit-contracts#GenerateResponseSchema',\n },\n timeoutMs: 300000, // 5 minutes for LLM analysis\n },\n // GET /plan\n {\n method: 'GET',\n path: COMMIT_ROUTES.PLAN,\n handler: './rest/handlers/plan-handler.js#default',\n output: {\n zod: '@kb-labs/commit-contracts#PlanResponseSchema',\n },\n },\n // POST /apply\n {\n method: 'POST',\n path: COMMIT_ROUTES.APPLY,\n handler: './rest/handlers/apply-handler.js#default',\n input: {\n zod: '@kb-labs/commit-contracts#ApplyRequestSchema',\n },\n output: {\n zod: '@kb-labs/commit-contracts#ApplyResponseSchema',\n },\n timeoutMs: 600000, // 10 min for pre/post hooks\n },\n // POST /push\n {\n method: 'POST',\n path: COMMIT_ROUTES.PUSH,\n handler: './rest/handlers/push-handler.js#default',\n input: {\n zod: '@kb-labs/commit-contracts#PushRequestSchema',\n },\n output: {\n zod: '@kb-labs/commit-contracts#PushResponseSchema',\n },\n timeoutMs: 600000, // 10 min for pre/post push hooks\n },\n // DELETE /plan\n {\n method: 'DELETE',\n path: COMMIT_ROUTES.RESET,\n handler: './rest/handlers/reset-handler.js#default',\n output: {\n zod: '@kb-labs/commit-contracts#ResetResponseSchema',\n },\n },\n // GET /git-status\n {\n method: 'GET',\n path: COMMIT_ROUTES.GIT_STATUS,\n handler: './rest/handlers/git-status-handler.js#default',\n output: {\n zod: '@kb-labs/commit-contracts#GitStatusResponseSchema',\n },\n },\n // GET /files\n {\n method: 'GET',\n path: COMMIT_ROUTES.FILES,\n handler: './rest/handlers/files-handler.js#default',\n },\n // GET /diff\n {\n method: 'GET',\n path: COMMIT_ROUTES.DIFF,\n handler: './rest/handlers/diff-handler.js#default',\n output: {\n zod: '@kb-labs/commit-contracts#FileDiffResponseSchema',\n },\n },\n // POST /summarize\n {\n method: 'POST',\n path: COMMIT_ROUTES.SUMMARIZE,\n handler: './rest/handlers/summarize-handler.js#default',\n input: {\n zod: '@kb-labs/commit-contracts#SummarizeRequestSchema',\n },\n output: {\n zod: '@kb-labs/commit-contracts#SummarizeResponseSchema',\n },\n },\n // GET /actions\n {\n method: 'GET',\n path: COMMIT_ROUTES.ACTIONS,\n handler: './rest/handlers/actions-handler.js#default',\n output: {\n zod: '@kb-labs/commit-contracts#ActionsResponseSchema',\n },\n },\n // PATCH /plan — edit a single commit in the plan\n {\n method: 'PATCH',\n path: COMMIT_ROUTES.PATCH_PLAN,\n handler: './rest/handlers/patch-plan-handler.js#default',\n input: {\n zod: '@kb-labs/commit-contracts#PatchPlanRequestSchema',\n },\n output: {\n zod: '@kb-labs/commit-contracts#PatchPlanResponseSchema',\n },\n },\n // POST /regenerate-commit — regenerate a single commit with LLM\n {\n method: 'POST',\n path: COMMIT_ROUTES.REGENERATE_COMMIT,\n handler: './rest/handlers/regenerate-handler.js#default',\n input: {\n zod: '@kb-labs/commit-contracts#RegenerateCommitRequestSchema',\n },\n output: {\n zod: '@kb-labs/commit-contracts#RegenerateCommitResponseSchema',\n },\n timeoutMs: 300000, // 5 minutes for LLM analysis\n },\n ],\n },\n\n // Studio V2 — Module Federation pages\n studio: {\n version: 2 as const,\n remoteName: 'commitPlugin',\n pages: [\n {\n id: 'commit.overview',\n title: 'Commit',\n icon: 'GitlabOutlined',\n route: '/p/commit',\n entry: './CommitOverview',\n order: 1,\n },\n ],\n menus: [\n {\n id: 'commit',\n label: 'Commit',\n icon: 'GitlabOutlined',\n target: 'commit.overview',\n order: 30,\n },\n ],\n },\n\n // Legacy V1 studio widgets (deleted)\n /*\n _legacy_studio: {\n widgets: [\n // Workspace Selector\n {\n id: 'commit.workspace-selector',\n kind: 'select',\n title: 'Select Scope',\n description: 'Choose monorepo package or repository',\n data: {\n source: {\n type: 'rest',\n routeId: COMMIT_WIDGET_ROUTES.SCOPES,\n method: 'GET',\n },\n },\n options: {\n searchable: true,\n placeholder: 'Select scope...',\n },\n events: {\n emit: [{\n name: COMMIT_EVENTS.SCOPE_CHANGED,\n payloadMap: { scope: 'value' }, // Maps selected value to payload.scope\n }],\n },\n layoutHint: { w: 6, h: 1, minH: 1 },\n order: 0,\n },\n // Status Metrics\n {\n id: 'commit.status',\n kind: 'metric-group',\n title: 'Commit Status',\n description: 'Current plan and git status',\n data: {\n source: {\n type: 'rest',\n routeId: COMMIT_WIDGET_ROUTES.STATUS,\n method: 'GET',\n },\n },\n events: {\n subscribe: [\n {\n name: COMMIT_EVENTS.SCOPE_CHANGED,\n paramsMap: { scope: 'scope' }, // Maps payload.workspace to params.workspace\n },\n COMMIT_EVENTS.FORM_SUBMITTED,\n ],\n },\n layoutHint: { w: 6, h: 2, minH: 2 },\n order: 1,\n },\n // Plan Viewer (child of commit.plan-section)\n {\n id: 'commit.plan-viewer',\n kind: 'cardlist',\n title: '', // Title shown in parent section\n description: '',\n data: {\n source: {\n type: 'rest',\n routeId: COMMIT_WIDGET_ROUTES.PLAN,\n method: 'GET',\n },\n },\n options: {\n layout: 'list',\n emptyMessage: 'No plan. Click Generate Plan to create commits.',\n },\n events: {\n subscribe: [\n {\n name: COMMIT_EVENTS.SCOPE_CHANGED,\n paramsMap: { scope: 'scope' },\n },\n {\n name: COMMIT_EVENTS.PLAN_GENERATED,\n // When plan is generated, update widget data with cards\n // No paramsMap - use entire payload as widget data\n },\n COMMIT_EVENTS.FORM_SUBMITTED,\n ],\n },\n order: 2,\n },\n // Git Files Table (child of commit.files-section)\n {\n id: 'commit.git-files',\n kind: 'table',\n title: '', // Title shown in parent section\n description: '',\n data: {\n source: {\n type: 'rest',\n routeId: COMMIT_WIDGET_ROUTES.FILES,\n method: 'GET',\n },\n },\n options: {\n columns: [\n {\n id: 'path',\n label: 'File',\n sortable: true,\n width: '60%',\n },\n {\n id: 'status',\n label: 'Status',\n sortable: true,\n width: 80,\n },\n {\n id: 'changes',\n label: 'Changes',\n sortable: false,\n width: 120,\n },\n ],\n pagination: false,\n rowSelection: false,\n size: 'small',\n },\n events: {\n subscribe: [{\n name: COMMIT_EVENTS.SCOPE_CHANGED,\n paramsMap: { scope: 'scope' },\n }],\n },\n order: 3,\n },\n // Quick Actions Widget\n {\n id: 'commit.actions',\n kind: 'card',\n title: 'Quick Actions',\n description: 'Common commit workflow actions',\n data: {\n source: {\n type: 'rest',\n routeId: COMMIT_WIDGET_ROUTES.ACTIONS,\n method: 'GET',\n },\n },\n events: {\n subscribe: [{\n name: COMMIT_EVENTS.SCOPE_CHANGED,\n paramsMap: { scope: 'scope' },\n }],\n },\n actions: [\n {\n id: 'generate',\n label: 'Generate Plan',\n icon: 'ThunderboltOutlined',\n variant: 'primary',\n handler: {\n type: 'rest',\n routeId: COMMIT_WIDGET_ROUTES.GENERATE,\n method: 'POST',\n bodyMap: { scope: 'scope' },\n onSuccess: {\n emitEvent: COMMIT_EVENTS.PLAN_GENERATED,\n // Response data will be used as payload (contains plan + workspace)\n },\n },\n },\n {\n id: 'apply',\n label: 'Apply Commits',\n icon: 'CheckOutlined',\n variant: 'default',\n handler: {\n type: 'rest',\n routeId: COMMIT_WIDGET_ROUTES.APPLY,\n method: 'POST',\n bodyMap: { scope: 'scope' },\n },\n confirm: {\n title: 'Apply Commits',\n description: 'This will create git commits according to the plan. Continue?',\n confirmLabel: 'Apply',\n cancelLabel: 'Cancel',\n },\n },\n {\n id: 'push',\n label: 'Push',\n icon: 'UploadOutlined',\n handler: {\n type: 'rest',\n routeId: COMMIT_WIDGET_ROUTES.PUSH,\n method: 'POST',\n bodyMap: { scope: 'scope' },\n },\n confirm: {\n title: 'Push to Remote',\n description: 'This will push commits to the remote repository. Continue?',\n confirmLabel: 'Push',\n cancelLabel: 'Cancel',\n },\n },\n ],\n layoutHint: { w: 6, h: 3, minH: 2 },\n order: 6,\n },\n // Files Section (collapsible, GitLab-style)\n {\n id: 'commit.files-section',\n kind: 'section',\n title: 'Changed Files',\n description: 'Files with uncommitted changes',\n data: {\n source: { type: 'static' }, // Sections use static source (no data)\n },\n options: {\n collapsible: true,\n defaultExpanded: true,\n variant: 'bordered',\n icon: 'FolderOutlined',\n showDivider: true,\n },\n children: ['commit.git-files'],\n events: {\n subscribe: [{\n name: COMMIT_EVENTS.SCOPE_CHANGED,\n paramsMap: { scope: 'scope' },\n }],\n },\n layoutHint: { w: 6, h: 8, minH: 4 },\n order: 4,\n },\n // Plan Section (collapsible, GitLab-style)\n {\n id: 'commit.plan-section',\n kind: 'section',\n title: 'Commit Plan',\n description: 'Generated commits ready to apply',\n data: {\n source: { type: 'static' }, // Sections use static source (no data)\n },\n options: {\n collapsible: true,\n defaultExpanded: true,\n variant: 'bordered',\n icon: 'FileTextOutlined',\n showDivider: true,\n },\n children: ['commit.plan-viewer'],\n events: {\n subscribe: [\n {\n name: COMMIT_EVENTS.SCOPE_CHANGED,\n paramsMap: { scope: 'scope' },\n },\n COMMIT_EVENTS.FORM_SUBMITTED,\n ],\n },\n layoutHint: { w: 6, h: 8, minH: 4 },\n order: 5,\n },\n ],\n // Studio menus\n menus: [\n {\n id: 'commit-menu',\n label: 'Commit',\n icon: 'GitlabOutlined',\n target: '/plugins/commit/overview',\n order: 0,\n },\n {\n id: 'commit-overview',\n label: 'Overview',\n icon: 'DashboardOutlined',\n parentId: 'commit-menu',\n target: '/plugins/commit/overview',\n order: 1,\n },\n {\n id: 'commit-plan',\n label: 'Plan',\n icon: 'UnorderedListOutlined',\n parentId: 'commit-menu',\n target: '/plugins/commit/plan',\n order: 2,\n },\n {\n id: 'commit-files',\n label: 'Files',\n icon: 'FileTextOutlined',\n parentId: 'commit-menu',\n target: '/plugins/commit/files',\n order: 3,\n },\n ],\n // Studio layouts\n layouts: [\n // Overview page - Quick status and actions\n {\n id: 'commit.overview',\n kind: 'grid',\n title: 'Overview',\n description: 'Workspace status and quick actions',\n icon: 'home',\n widgets: [\n 'commit.workspace-selector',\n 'commit.status',\n 'commit.actions',\n 'commit.plan-section', // Show plan section on overview too\n ],\n config: {\n cols: 6,\n gap: 16,\n },\n order: 1,\n },\n // Plan page - GitLab-style commit plan view\n {\n id: 'commit.plan',\n kind: 'grid',\n title: 'Commit Plan',\n description: 'Review and manage generated commits',\n icon: 'list',\n widgets: [\n 'commit.workspace-selector',\n 'commit.files-section',\n 'commit.plan-section',\n ],\n actions: [\n {\n id: 'generate',\n label: 'Generate Plan',\n icon: 'ThunderboltOutlined',\n variant: 'primary',\n handler: {\n type: 'rest',\n routeId: COMMIT_WIDGET_ROUTES.GENERATE,\n method: 'POST',\n },\n },\n {\n id: 'apply',\n label: 'Apply Commits',\n icon: 'CheckOutlined',\n variant: 'default',\n handler: {\n type: 'rest',\n routeId: COMMIT_WIDGET_ROUTES.APPLY,\n method: 'POST',\n },\n confirm: {\n title: 'Apply Commits',\n description: 'This will create git commits according to the plan. Continue?',\n confirmLabel: 'Apply',\n cancelLabel: 'Cancel',\n },\n },\n {\n id: 'push',\n label: 'Push',\n icon: 'UploadOutlined',\n handler: {\n type: 'rest',\n routeId: COMMIT_WIDGET_ROUTES.PUSH,\n method: 'POST',\n },\n confirm: {\n title: 'Push to Remote',\n description: 'This will push commits to the remote repository. Continue?',\n confirmLabel: 'Push',\n cancelLabel: 'Cancel',\n },\n },\n {\n id: 'reset',\n label: 'Reset Plan',\n icon: 'DeleteOutlined',\n variant: 'danger',\n handler: {\n type: 'rest',\n routeId: COMMIT_WIDGET_ROUTES.RESET,\n method: 'DELETE',\n },\n confirm: {\n title: 'Reset Plan',\n description: 'This will delete the current commit plan. This action cannot be undone.',\n confirmLabel: 'Delete',\n cancelLabel: 'Cancel',\n },\n },\n ],\n config: {\n cols: 6,\n gap: 16,\n },\n order: 2,\n },\n // Files page - Changed files table\n {\n id: 'commit.files',\n kind: 'grid',\n title: 'Changed Files',\n description: 'Git status and modified files',\n icon: 'file',\n widgets: [\n 'commit.workspace-selector',\n 'commit.git-files',\n ],\n config: {\n cols: 6,\n gap: 16,\n },\n order: 3,\n },\n ],\n },\n */\n\n // Artifacts\n artifacts: [\n {\n id: 'commit.plan.json',\n pathTemplate: '.kb/commit/current/plan.json',\n description: 'Current commit plan.',\n },\n {\n id: 'commit.status.json',\n pathTemplate: '.kb/commit/current/status.json',\n description: 'Git status snapshot at plan generation time.',\n },\n ],\n};\n\nexport default manifest;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli/commands/flags.ts","../src/lifecycle/setup.ts","../src/manifest.ts"],"names":[],"mappings":"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KAAA,EAAO;AAAA;AACT;AACF,GACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyaA,SAAA,EAAW;AAAA,IACT;AAAA,MACE,EAAA,EAAI,kBAAA;AAAA,MACJ,YAAA,EAAc,8BAAA;AAAA,MACd,WAAA,EAAa;AAAA,KACf;AAAA,IACA;AAAA,MACE,EAAA,EAAI,oBAAA;AAAA,MACJ,YAAA,EAAc,gCAAA;AAAA,MACd,WAAA,EAAa;AAAA;AACf;AAEJ","file":"index.js","sourcesContent":["/**\n * Shared command flags definitions\n *\n * DRY pattern: Define flags once, use in both manifest and command handlers.\n */\n\n/**\n * Flags for commit:generate command\n */\nexport const generateFlags = {\n scope: {\n type: 'string',\n description: 'Filter by package name (@kb-labs/core), wildcard (@kb-labs/*), or path pattern (packages/**)',\n alias: 's',\n },\n json: {\n type: 'boolean',\n description: 'Output JSON',\n default: false,\n },\n} as const;\n\nexport type GenerateFlags = typeof generateFlags;\n\n/**\n * Flags for commit:apply command\n */\nexport const applyFlags = {\n force: {\n type: 'boolean',\n description: 'Apply even if working tree changed',\n default: false,\n alias: 'f',\n },\n json: {\n type: 'boolean',\n description: 'Output JSON',\n default: false,\n },\n} as const;\n\nexport type ApplyFlags = typeof applyFlags;\n\n/**\n * Flags for commit:push command\n */\nexport const pushFlags = {\n force: {\n type: 'boolean',\n description: 'Force push (dangerous!)',\n default: false,\n alias: 'f',\n },\n json: {\n type: 'boolean',\n description: 'Output JSON',\n default: false,\n },\n} as const;\n\nexport type PushFlags = typeof pushFlags;\n\n/**\n * Flags for commit (run) command - combines generate + apply + optional push\n */\nexport const runFlags = {\n scope: {\n type: 'string',\n description: 'Filter by package name (@kb-labs/core), wildcard (@kb-labs/*), or path pattern (packages/**)',\n alias: 's',\n },\n json: {\n type: 'boolean',\n description: 'Output JSON',\n default: false,\n },\n 'dry-run': {\n type: 'boolean',\n description: 'Generate plan only, do not apply',\n default: false,\n },\n 'with-push': {\n type: 'boolean',\n description: 'Push after apply',\n default: false,\n },\n} as const;\n\nexport type RunFlags = typeof runFlags;\n\n/**\n * Common json-only flags for simple commands\n */\nexport const jsonOnlyFlags = {\n json: {\n type: 'boolean',\n description: 'Output JSON',\n default: false,\n },\n} as const;\n\nexport type JsonOnlyFlags = typeof jsonOnlyFlags;\n\n/**\n * Empty flags for commands that take no arguments\n */\nexport const emptyFlags = {} as const;\n\nexport type EmptyFlags = typeof emptyFlags;\n","/**\n * Setup handler for commit plugin\n * Initializes .kb/commit/ directory structure and config\n */\n\nimport { defaultCommitConfig } from '@kb-labs/commit-contracts';\n\nconst COMMIT_DIR = '.kb/commit';\n\n/**\n * Plugin setup configuration\n *\n * Uses CommitPluginConfig from contracts as single source of truth.\n */\nexport const setup = {\n files: [\n {\n path: `${COMMIT_DIR}/README.md`,\n content: [\n '# Commit Plugin Workspace',\n '',\n 'This directory contains commit plugin data:',\n '',\n '- `current/` - Current commit plan (generated, not committed)',\n '- `history/` - Applied commit plans history',\n '',\n '## Configuration',\n '',\n 'Plugin configuration is stored in `kb.config.json` under `plugins.commit`.',\n '',\n '### Environment Variables',\n '',\n '| Variable | Description | Default |',\n '|----------|-------------|---------|',\n '| `KB_COMMIT_LLM_ENABLED` | Enable/disable LLM | `true` |',\n '| `KB_COMMIT_LLM_TEMPERATURE` | LLM temperature (0-1) | `0.3` |',\n '| `KB_COMMIT_LLM_MAX_TOKENS` | Max tokens for LLM | `2000` |',\n '| `KB_COMMIT_STORAGE_DIR` | Storage directory | `.kb/commit` |',\n '| `KB_COMMIT_AUTO_STAGE` | Auto-stage changes | `false` |',\n '',\n '## Commands',\n '',\n '```bash',\n '# Full flow: generate → apply',\n 'kb commit',\n '',\n '# Generate plan only',\n 'kb commit:generate',\n '',\n '# Apply current plan',\n 'kb commit:apply',\n '',\n '# View current plan',\n 'kb commit:open',\n '',\n '# Reset current plan',\n 'kb commit:reset',\n '',\n '# Push commits',\n 'kb commit:push',\n '```',\n '',\n 'Re-run `kb commit setup --force` to regenerate defaults.',\n ].join('\\n') + '\\n',\n description: 'README for commit plugin workspace',\n },\n ],\n\n config: [\n {\n pointer: 'plugins.commit',\n value: defaultCommitConfig,\n },\n ],\n\n scripts: [\n {\n name: 'commit',\n command: 'kb commit',\n description: 'Generate and apply commits',\n },\n {\n name: 'commit:generate',\n command: 'kb commit:generate',\n description: 'Generate commit plan from changes',\n },\n ],\n\n gitignore: [\n '.kb/commit/current/',\n '.kb/commit/history/',\n ],\n\n notes: [\n 'Run `kb commit` to analyze changes and generate commit plan.',\n 'Set KB_COMMIT_LLM_ENABLED=false to use heuristics only.',\n 'Use `kb commit:open` to view current plan before applying.',\n ],\n};\n\n/**\n * Setup handler function (for manifest registration)\n */\nexport async function run() {\n return {\n message: 'Commit plugin setup completed. Try `kb commit` to generate commits!',\n ...setup,\n };\n}\n\nexport default run;\n","/**\n * KB Labs Commit Plugin - Manifest V3\n *\n * Migration from V2 to V3 following best practices from V3-MIGRATION-GUIDE.md\n *\n * Key changes:\n * - Schema: kb.plugin/3\n * - Commands use handler#default suffix\n * - Commands have handlerPath field\n * - All imports from @kb-labs/sdk\n */\n\nimport {\n defineCommandFlags,\n combinePermissions,\n gitWorkflowPreset,\n kbPlatformPreset,\n} from '@kb-labs/sdk';\nimport {\n COMMIT_ENV_VARS,\n COMMIT_BASE_PATH,\n COMMIT_ROUTES,\n COMMIT_CACHE_PREFIX,\n} from '@kb-labs/commit-contracts';\nimport {\n runFlags,\n generateFlags,\n applyFlags,\n pushFlags,\n jsonOnlyFlags,\n emptyFlags,\n} from './cli/commands/flags';\n\n/**\n * Build permissions using presets:\n * - gitWorkflow: HOME, USER, GIT_*, SSH_* for git operations\n * - kbPlatform: KB_* env vars and .kb/ directory\n * - Custom: COMMIT_ENV_VARS, quotas, platform services (llm, cache)\n *\n * Note: LLM access goes through platform services, no direct API keys needed.\n */\nconst pluginPermissions = combinePermissions()\n .with(gitWorkflowPreset)\n .with(kbPlatformPreset)\n .withEnv([...COMMIT_ENV_VARS])\n .withFs({\n mode: 'readWrite',\n allow: ['.kb/commit/**'],\n })\n .withPlatform({\n llm: true, // Full LLM access for commit generation\n cache: [COMMIT_CACHE_PREFIX], // Cache namespace prefix from contracts\n analytics: true, // Track commit generation events\n })\n .withQuotas({\n timeoutMs: 600000, // 10 min for LLM\n memoryMb: 512,\n })\n .build();\n\nexport const manifest = {\n schema: 'kb.plugin/3',\n id: '@kb-labs/commit',\n version: '0.1.0',\n configSection: 'commit',\n\n display: {\n name: 'Commit Generator',\n description: 'AI-powered conventional commit generation',\n tags: ['commit', 'git', 'ai', 'conventional-commits'],\n },\n\n // Platform requirements (LLM is optional but preferred)\n platform: {\n requires: ['storage', 'cache'],\n optional: ['llm', 'analytics', 'logger'],\n },\n\n // TODO: Implement V3 setup handler\n // Setup temporarily disabled during migration - needs proper V3 implementation\n // setup: {\n // handler: './lifecycle/setup.js#default',\n // handlerPath: './lifecycle/setup.js',\n // describe: 'Initialize .kb/commit/ directory structure.',\n // permissions: permissions.combine(\n // permissions.presets.pluginWorkspace('commit'),\n // {\n // quotas: { timeoutMs: 10000, memoryMb: 128, cpuMs: 3000 },\n // }\n // ),\n // },\n\n // V3: cli wrapper with commands array\n cli: {\n groupMeta: [\n {\n path: 'commit',\n describe: 'AI-powered conventional commit generation.',\n },\n ],\n commands: [\n // Main command: commit (default flow)\n {\n path: 'commit',\n category: 'Pipeline',\n describe: 'Generate and apply commits (default flow).',\n operationType: 'execute' as const,\n longDescription:\n 'Analyzes changes, generates commit plan with LLM, applies commits locally. ' +\n 'Use --dry-run to preview without applying, --with-push to push after applying.',\n\n // ✅ V3: handler with #default suffix\n handler: './cli/commands/run.js#default',\n\n flags: defineCommandFlags(runFlags),\n\n examples: [\n 'kb commit commit',\n 'kb commit commit --dry-run',\n 'kb commit commit --with-push',\n 'kb commit commit --scope \"src/components/**\"',\n ],\n },\n\n // commit:generate - Generate commit plan\n {\n path: 'commit generate',\n category: 'Pipeline',\n describe: 'Generate commit plan from git changes.',\n operationType: 'execute' as const,\n longDescription:\n 'Analyzes staged and unstaged changes using git diff, then uses LLM to group ' +\n 'related changes and generate conventional commit messages.',\n\n handler: './cli/commands/generate.js#default',\n\n flags: defineCommandFlags(generateFlags),\n\n examples: [\n 'kb commit generate',\n 'kb commit generate --json',\n 'kb commit generate --scope \"packages/**\"',\n ],\n },\n\n // commit:apply - Apply commit plan\n {\n path: 'commit apply',\n category: 'Pipeline',\n describe: 'Apply current commit plan (create local commits).',\n operationType: 'mutate' as const,\n longDescription:\n 'Creates git commits according to the current plan. Checks for staleness ' +\n '(working tree changes since plan generation) unless --force is used.',\n\n handler: './cli/commands/apply.js#default',\n\n flags: defineCommandFlags(applyFlags),\n\n examples: [\n 'kb commit apply',\n 'kb commit apply --force',\n ],\n },\n\n // commit:push - Push commits\n {\n path: 'commit push',\n category: 'Pipeline',\n describe: 'Push commits to remote repository.',\n operationType: 'execute' as const,\n longDescription:\n 'Pushes local commits to the remote. Refuses force push to protected branches ' +\n '(main, master) by default.',\n\n handler: './cli/commands/push.js#default',\n\n flags: defineCommandFlags(pushFlags),\n\n examples: [\n 'kb commit push',\n ],\n },\n\n // commit:open - Show current plan\n {\n path: 'commit open',\n category: 'Plan',\n describe: 'Show current commit plan.',\n operationType: 'read' as const,\n longDescription: 'Displays the current commit plan if one exists.',\n\n handler: './cli/commands/open.js#default',\n\n flags: defineCommandFlags(jsonOnlyFlags),\n\n examples: [\n 'kb commit open',\n 'kb commit open --json',\n ],\n },\n\n // commit:reset - Clear current plan\n {\n path: 'commit reset',\n category: 'Plan',\n describe: 'Clear current commit plan.',\n operationType: 'mutate' as const,\n longDescription: 'Removes the current commit plan from storage.',\n\n handler: './cli/commands/reset.js#default',\n\n flags: defineCommandFlags(emptyFlags),\n\n examples: [\n 'kb commit reset',\n ],\n },\n ],\n },\n\n capabilities: [],\n\n // ✅ V3: Manifest-first permissions using composable presets\n permissions: pluginPermissions,\n\n // REST API routes (inherit permissions from manifest)\n rest: {\n basePath: COMMIT_BASE_PATH,\n routes: [\n // GET /scopes\n {\n method: 'GET',\n path: COMMIT_ROUTES.SCOPES,\n handler: './rest/handlers/scopes-handler.js#default',\n output: {\n zod: '@kb-labs/sdk#SelectDataSchema',\n },\n },\n // GET /status\n {\n method: 'GET',\n path: COMMIT_ROUTES.STATUS,\n handler: './rest/handlers/status-handler.js#default',\n output: {\n zod: '@kb-labs/commit-contracts#StatusResponseSchema',\n },\n },\n // POST /generate\n {\n method: 'POST',\n path: COMMIT_ROUTES.GENERATE,\n handler: './rest/handlers/generate-handler.js#default',\n input: {\n zod: '@kb-labs/commit-contracts#GenerateRequestSchema',\n },\n output: {\n zod: '@kb-labs/commit-contracts#GenerateResponseSchema',\n },\n timeoutMs: 300000, // 5 minutes for LLM analysis\n },\n // GET /plan\n {\n method: 'GET',\n path: COMMIT_ROUTES.PLAN,\n handler: './rest/handlers/plan-handler.js#default',\n output: {\n zod: '@kb-labs/commit-contracts#PlanResponseSchema',\n },\n },\n // POST /apply\n {\n method: 'POST',\n path: COMMIT_ROUTES.APPLY,\n handler: './rest/handlers/apply-handler.js#default',\n input: {\n zod: '@kb-labs/commit-contracts#ApplyRequestSchema',\n },\n output: {\n zod: '@kb-labs/commit-contracts#ApplyResponseSchema',\n },\n timeoutMs: 600000, // 10 min for pre/post hooks\n },\n // POST /push\n {\n method: 'POST',\n path: COMMIT_ROUTES.PUSH,\n handler: './rest/handlers/push-handler.js#default',\n input: {\n zod: '@kb-labs/commit-contracts#PushRequestSchema',\n },\n output: {\n zod: '@kb-labs/commit-contracts#PushResponseSchema',\n },\n timeoutMs: 600000, // 10 min for pre/post push hooks\n },\n // DELETE /plan\n {\n method: 'DELETE',\n path: COMMIT_ROUTES.RESET,\n handler: './rest/handlers/reset-handler.js#default',\n output: {\n zod: '@kb-labs/commit-contracts#ResetResponseSchema',\n },\n },\n // GET /git-status\n {\n method: 'GET',\n path: COMMIT_ROUTES.GIT_STATUS,\n handler: './rest/handlers/git-status-handler.js#default',\n output: {\n zod: '@kb-labs/commit-contracts#GitStatusResponseSchema',\n },\n },\n // GET /files\n {\n method: 'GET',\n path: COMMIT_ROUTES.FILES,\n handler: './rest/handlers/files-handler.js#default',\n },\n // GET /diff\n {\n method: 'GET',\n path: COMMIT_ROUTES.DIFF,\n handler: './rest/handlers/diff-handler.js#default',\n output: {\n zod: '@kb-labs/commit-contracts#FileDiffResponseSchema',\n },\n },\n // POST /summarize\n {\n method: 'POST',\n path: COMMIT_ROUTES.SUMMARIZE,\n handler: './rest/handlers/summarize-handler.js#default',\n input: {\n zod: '@kb-labs/commit-contracts#SummarizeRequestSchema',\n },\n output: {\n zod: '@kb-labs/commit-contracts#SummarizeResponseSchema',\n },\n },\n // GET /actions\n {\n method: 'GET',\n path: COMMIT_ROUTES.ACTIONS,\n handler: './rest/handlers/actions-handler.js#default',\n output: {\n zod: '@kb-labs/commit-contracts#ActionsResponseSchema',\n },\n },\n // PATCH /plan — edit a single commit in the plan\n {\n method: 'PATCH',\n path: COMMIT_ROUTES.PATCH_PLAN,\n handler: './rest/handlers/patch-plan-handler.js#default',\n input: {\n zod: '@kb-labs/commit-contracts#PatchPlanRequestSchema',\n },\n output: {\n zod: '@kb-labs/commit-contracts#PatchPlanResponseSchema',\n },\n },\n // POST /regenerate-commit — regenerate a single commit with LLM\n {\n method: 'POST',\n path: COMMIT_ROUTES.REGENERATE_COMMIT,\n handler: './rest/handlers/regenerate-handler.js#default',\n input: {\n zod: '@kb-labs/commit-contracts#RegenerateCommitRequestSchema',\n },\n output: {\n zod: '@kb-labs/commit-contracts#RegenerateCommitResponseSchema',\n },\n timeoutMs: 300000, // 5 minutes for LLM analysis\n },\n ],\n },\n\n // Studio V2 — Module Federation pages\n studio: {\n version: 2 as const,\n remoteName: 'commitPlugin',\n pages: [\n {\n id: 'commit.overview',\n title: 'Commit',\n icon: 'GitlabOutlined',\n route: '/p/commit',\n entry: './CommitOverview',\n order: 1,\n },\n ],\n menus: [\n {\n id: 'commit',\n label: 'Commit',\n icon: 'GitlabOutlined',\n target: 'commit.overview',\n order: 30,\n },\n ],\n },\n\n // Legacy V1 studio widgets (deleted)\n /*\n _legacy_studio: {\n widgets: [\n // Workspace Selector\n {\n id: 'commit.workspace-selector',\n kind: 'select',\n title: 'Select Scope',\n description: 'Choose monorepo package or repository',\n data: {\n source: {\n type: 'rest',\n routeId: COMMIT_WIDGET_ROUTES.SCOPES,\n method: 'GET',\n },\n },\n options: {\n searchable: true,\n placeholder: 'Select scope...',\n },\n events: {\n emit: [{\n name: COMMIT_EVENTS.SCOPE_CHANGED,\n payloadMap: { scope: 'value' }, // Maps selected value to payload.scope\n }],\n },\n layoutHint: { w: 6, h: 1, minH: 1 },\n order: 0,\n },\n // Status Metrics\n {\n id: 'commit.status',\n kind: 'metric-group',\n title: 'Commit Status',\n description: 'Current plan and git status',\n data: {\n source: {\n type: 'rest',\n routeId: COMMIT_WIDGET_ROUTES.STATUS,\n method: 'GET',\n },\n },\n events: {\n subscribe: [\n {\n name: COMMIT_EVENTS.SCOPE_CHANGED,\n paramsMap: { scope: 'scope' }, // Maps payload.workspace to params.workspace\n },\n COMMIT_EVENTS.FORM_SUBMITTED,\n ],\n },\n layoutHint: { w: 6, h: 2, minH: 2 },\n order: 1,\n },\n // Plan Viewer (child of commit.plan-section)\n {\n id: 'commit.plan-viewer',\n kind: 'cardlist',\n title: '', // Title shown in parent section\n description: '',\n data: {\n source: {\n type: 'rest',\n routeId: COMMIT_WIDGET_ROUTES.PLAN,\n method: 'GET',\n },\n },\n options: {\n layout: 'list',\n emptyMessage: 'No plan. Click Generate Plan to create commits.',\n },\n events: {\n subscribe: [\n {\n name: COMMIT_EVENTS.SCOPE_CHANGED,\n paramsMap: { scope: 'scope' },\n },\n {\n name: COMMIT_EVENTS.PLAN_GENERATED,\n // When plan is generated, update widget data with cards\n // No paramsMap - use entire payload as widget data\n },\n COMMIT_EVENTS.FORM_SUBMITTED,\n ],\n },\n order: 2,\n },\n // Git Files Table (child of commit.files-section)\n {\n id: 'commit.git-files',\n kind: 'table',\n title: '', // Title shown in parent section\n description: '',\n data: {\n source: {\n type: 'rest',\n routeId: COMMIT_WIDGET_ROUTES.FILES,\n method: 'GET',\n },\n },\n options: {\n columns: [\n {\n id: 'path',\n label: 'File',\n sortable: true,\n width: '60%',\n },\n {\n id: 'status',\n label: 'Status',\n sortable: true,\n width: 80,\n },\n {\n id: 'changes',\n label: 'Changes',\n sortable: false,\n width: 120,\n },\n ],\n pagination: false,\n rowSelection: false,\n size: 'small',\n },\n events: {\n subscribe: [{\n name: COMMIT_EVENTS.SCOPE_CHANGED,\n paramsMap: { scope: 'scope' },\n }],\n },\n order: 3,\n },\n // Quick Actions Widget\n {\n id: 'commit.actions',\n kind: 'card',\n title: 'Quick Actions',\n description: 'Common commit workflow actions',\n data: {\n source: {\n type: 'rest',\n routeId: COMMIT_WIDGET_ROUTES.ACTIONS,\n method: 'GET',\n },\n },\n events: {\n subscribe: [{\n name: COMMIT_EVENTS.SCOPE_CHANGED,\n paramsMap: { scope: 'scope' },\n }],\n },\n actions: [\n {\n id: 'generate',\n label: 'Generate Plan',\n icon: 'ThunderboltOutlined',\n variant: 'primary',\n handler: {\n type: 'rest',\n routeId: COMMIT_WIDGET_ROUTES.GENERATE,\n method: 'POST',\n bodyMap: { scope: 'scope' },\n onSuccess: {\n emitEvent: COMMIT_EVENTS.PLAN_GENERATED,\n // Response data will be used as payload (contains plan + workspace)\n },\n },\n },\n {\n id: 'apply',\n label: 'Apply Commits',\n icon: 'CheckOutlined',\n variant: 'default',\n handler: {\n type: 'rest',\n routeId: COMMIT_WIDGET_ROUTES.APPLY,\n method: 'POST',\n bodyMap: { scope: 'scope' },\n },\n confirm: {\n title: 'Apply Commits',\n description: 'This will create git commits according to the plan. Continue?',\n confirmLabel: 'Apply',\n cancelLabel: 'Cancel',\n },\n },\n {\n id: 'push',\n label: 'Push',\n icon: 'UploadOutlined',\n handler: {\n type: 'rest',\n routeId: COMMIT_WIDGET_ROUTES.PUSH,\n method: 'POST',\n bodyMap: { scope: 'scope' },\n },\n confirm: {\n title: 'Push to Remote',\n description: 'This will push commits to the remote repository. Continue?',\n confirmLabel: 'Push',\n cancelLabel: 'Cancel',\n },\n },\n ],\n layoutHint: { w: 6, h: 3, minH: 2 },\n order: 6,\n },\n // Files Section (collapsible, GitLab-style)\n {\n id: 'commit.files-section',\n kind: 'section',\n title: 'Changed Files',\n description: 'Files with uncommitted changes',\n data: {\n source: { type: 'static' }, // Sections use static source (no data)\n },\n options: {\n collapsible: true,\n defaultExpanded: true,\n variant: 'bordered',\n icon: 'FolderOutlined',\n showDivider: true,\n },\n children: ['commit.git-files'],\n events: {\n subscribe: [{\n name: COMMIT_EVENTS.SCOPE_CHANGED,\n paramsMap: { scope: 'scope' },\n }],\n },\n layoutHint: { w: 6, h: 8, minH: 4 },\n order: 4,\n },\n // Plan Section (collapsible, GitLab-style)\n {\n id: 'commit.plan-section',\n kind: 'section',\n title: 'Commit Plan',\n description: 'Generated commits ready to apply',\n data: {\n source: { type: 'static' }, // Sections use static source (no data)\n },\n options: {\n collapsible: true,\n defaultExpanded: true,\n variant: 'bordered',\n icon: 'FileTextOutlined',\n showDivider: true,\n },\n children: ['commit.plan-viewer'],\n events: {\n subscribe: [\n {\n name: COMMIT_EVENTS.SCOPE_CHANGED,\n paramsMap: { scope: 'scope' },\n },\n COMMIT_EVENTS.FORM_SUBMITTED,\n ],\n },\n layoutHint: { w: 6, h: 8, minH: 4 },\n order: 5,\n },\n ],\n // Studio menus\n menus: [\n {\n id: 'commit-menu',\n label: 'Commit',\n icon: 'GitlabOutlined',\n target: '/plugins/commit/overview',\n order: 0,\n },\n {\n id: 'commit-overview',\n label: 'Overview',\n icon: 'DashboardOutlined',\n parentId: 'commit-menu',\n target: '/plugins/commit/overview',\n order: 1,\n },\n {\n id: 'commit-plan',\n label: 'Plan',\n icon: 'UnorderedListOutlined',\n parentId: 'commit-menu',\n target: '/plugins/commit/plan',\n order: 2,\n },\n {\n id: 'commit-files',\n label: 'Files',\n icon: 'FileTextOutlined',\n parentId: 'commit-menu',\n target: '/plugins/commit/files',\n order: 3,\n },\n ],\n // Studio layouts\n layouts: [\n // Overview page - Quick status and actions\n {\n id: 'commit.overview',\n kind: 'grid',\n title: 'Overview',\n description: 'Workspace status and quick actions',\n icon: 'home',\n widgets: [\n 'commit.workspace-selector',\n 'commit.status',\n 'commit.actions',\n 'commit.plan-section', // Show plan section on overview too\n ],\n config: {\n cols: 6,\n gap: 16,\n },\n order: 1,\n },\n // Plan page - GitLab-style commit plan view\n {\n id: 'commit.plan',\n kind: 'grid',\n title: 'Commit Plan',\n description: 'Review and manage generated commits',\n icon: 'list',\n widgets: [\n 'commit.workspace-selector',\n 'commit.files-section',\n 'commit.plan-section',\n ],\n actions: [\n {\n id: 'generate',\n label: 'Generate Plan',\n icon: 'ThunderboltOutlined',\n variant: 'primary',\n handler: {\n type: 'rest',\n routeId: COMMIT_WIDGET_ROUTES.GENERATE,\n method: 'POST',\n },\n },\n {\n id: 'apply',\n label: 'Apply Commits',\n icon: 'CheckOutlined',\n variant: 'default',\n handler: {\n type: 'rest',\n routeId: COMMIT_WIDGET_ROUTES.APPLY,\n method: 'POST',\n },\n confirm: {\n title: 'Apply Commits',\n description: 'This will create git commits according to the plan. Continue?',\n confirmLabel: 'Apply',\n cancelLabel: 'Cancel',\n },\n },\n {\n id: 'push',\n label: 'Push',\n icon: 'UploadOutlined',\n handler: {\n type: 'rest',\n routeId: COMMIT_WIDGET_ROUTES.PUSH,\n method: 'POST',\n },\n confirm: {\n title: 'Push to Remote',\n description: 'This will push commits to the remote repository. Continue?',\n confirmLabel: 'Push',\n cancelLabel: 'Cancel',\n },\n },\n {\n id: 'reset',\n label: 'Reset Plan',\n icon: 'DeleteOutlined',\n variant: 'danger',\n handler: {\n type: 'rest',\n routeId: COMMIT_WIDGET_ROUTES.RESET,\n method: 'DELETE',\n },\n confirm: {\n title: 'Reset Plan',\n description: 'This will delete the current commit plan. This action cannot be undone.',\n confirmLabel: 'Delete',\n cancelLabel: 'Cancel',\n },\n },\n ],\n config: {\n cols: 6,\n gap: 16,\n },\n order: 2,\n },\n // Files page - Changed files table\n {\n id: 'commit.files',\n kind: 'grid',\n title: 'Changed Files',\n description: 'Git status and modified files',\n icon: 'file',\n widgets: [\n 'commit.workspace-selector',\n 'commit.git-files',\n ],\n config: {\n cols: 6,\n gap: 16,\n },\n order: 3,\n },\n ],\n },\n */\n\n // Artifacts\n artifacts: [\n {\n id: 'commit.plan.json',\n pathTemplate: '.kb/commit/current/plan.json',\n description: 'Current commit plan.',\n },\n {\n id: 'commit.status.json',\n pathTemplate: '.kb/commit/current/status.json',\n description: 'Git status snapshot at plan generation time.',\n },\n ],\n};\n\nexport default manifest;\n"]}
|
package/dist/manifest.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as _kb_labs_plugin_contracts from '@kb-labs/plugin-contracts';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* KB Labs Commit Plugin - Manifest V3
|
|
@@ -26,13 +26,17 @@ declare const manifest: {
|
|
|
26
26
|
optional: string[];
|
|
27
27
|
};
|
|
28
28
|
cli: {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
groupMeta: {
|
|
30
|
+
path: string;
|
|
31
|
+
describe: string;
|
|
32
|
+
}[];
|
|
33
|
+
commands: ({
|
|
34
|
+
path: string;
|
|
35
|
+
category: string;
|
|
32
36
|
describe: string;
|
|
37
|
+
operationType: "execute";
|
|
33
38
|
longDescription: string;
|
|
34
39
|
handler: string;
|
|
35
|
-
handlerPath: string;
|
|
36
40
|
flags: {
|
|
37
41
|
name: string;
|
|
38
42
|
type: "string" | "boolean" | "number" | "array";
|
|
@@ -43,10 +47,44 @@ declare const manifest: {
|
|
|
43
47
|
required?: boolean;
|
|
44
48
|
}[];
|
|
45
49
|
examples: string[];
|
|
46
|
-
}
|
|
50
|
+
} | {
|
|
51
|
+
path: string;
|
|
52
|
+
category: string;
|
|
53
|
+
describe: string;
|
|
54
|
+
operationType: "mutate";
|
|
55
|
+
longDescription: string;
|
|
56
|
+
handler: string;
|
|
57
|
+
flags: {
|
|
58
|
+
name: string;
|
|
59
|
+
type: "string" | "boolean" | "number" | "array";
|
|
60
|
+
alias?: string;
|
|
61
|
+
default?: unknown;
|
|
62
|
+
description?: string;
|
|
63
|
+
choices?: string[];
|
|
64
|
+
required?: boolean;
|
|
65
|
+
}[];
|
|
66
|
+
examples: string[];
|
|
67
|
+
} | {
|
|
68
|
+
path: string;
|
|
69
|
+
category: string;
|
|
70
|
+
describe: string;
|
|
71
|
+
operationType: "read";
|
|
72
|
+
longDescription: string;
|
|
73
|
+
handler: string;
|
|
74
|
+
flags: {
|
|
75
|
+
name: string;
|
|
76
|
+
type: "string" | "boolean" | "number" | "array";
|
|
77
|
+
alias?: string;
|
|
78
|
+
default?: unknown;
|
|
79
|
+
description?: string;
|
|
80
|
+
choices?: string[];
|
|
81
|
+
required?: boolean;
|
|
82
|
+
}[];
|
|
83
|
+
examples: string[];
|
|
84
|
+
})[];
|
|
47
85
|
};
|
|
48
86
|
capabilities: never[];
|
|
49
|
-
permissions:
|
|
87
|
+
permissions: _kb_labs_plugin_contracts.PermissionSpec;
|
|
50
88
|
rest: {
|
|
51
89
|
basePath: "/v1/plugins/commit";
|
|
52
90
|
routes: ({
|
package/dist/manifest.js
CHANGED
|
@@ -96,7 +96,7 @@ var manifest = {
|
|
|
96
96
|
configSection: "commit",
|
|
97
97
|
display: {
|
|
98
98
|
name: "Commit Generator",
|
|
99
|
-
description: "AI-powered
|
|
99
|
+
description: "AI-powered conventional commit generation",
|
|
100
100
|
tags: ["commit", "git", "ai", "conventional-commits"]
|
|
101
101
|
},
|
|
102
102
|
// Platform requirements (LLM is optional but preferred)
|
|
@@ -119,16 +119,22 @@ var manifest = {
|
|
|
119
119
|
// },
|
|
120
120
|
// V3: cli wrapper with commands array
|
|
121
121
|
cli: {
|
|
122
|
+
groupMeta: [
|
|
123
|
+
{
|
|
124
|
+
path: "commit",
|
|
125
|
+
describe: "AI-powered conventional commit generation."
|
|
126
|
+
}
|
|
127
|
+
],
|
|
122
128
|
commands: [
|
|
123
129
|
// Main command: commit (default flow)
|
|
124
130
|
{
|
|
125
|
-
|
|
126
|
-
|
|
131
|
+
path: "commit",
|
|
132
|
+
category: "Pipeline",
|
|
127
133
|
describe: "Generate and apply commits (default flow).",
|
|
134
|
+
operationType: "execute",
|
|
128
135
|
longDescription: "Analyzes changes, generates commit plan with LLM, applies commits locally. Use --dry-run to preview without applying, --with-push to push after applying.",
|
|
129
136
|
// ✅ V3: handler with #default suffix
|
|
130
137
|
handler: "./cli/commands/run.js#default",
|
|
131
|
-
handlerPath: "./cli/commands/run.js",
|
|
132
138
|
flags: defineCommandFlags(runFlags),
|
|
133
139
|
examples: [
|
|
134
140
|
"kb commit commit",
|
|
@@ -139,12 +145,12 @@ var manifest = {
|
|
|
139
145
|
},
|
|
140
146
|
// commit:generate - Generate commit plan
|
|
141
147
|
{
|
|
142
|
-
|
|
143
|
-
|
|
148
|
+
path: "commit generate",
|
|
149
|
+
category: "Pipeline",
|
|
144
150
|
describe: "Generate commit plan from git changes.",
|
|
151
|
+
operationType: "execute",
|
|
145
152
|
longDescription: "Analyzes staged and unstaged changes using git diff, then uses LLM to group related changes and generate conventional commit messages.",
|
|
146
153
|
handler: "./cli/commands/generate.js#default",
|
|
147
|
-
handlerPath: "./cli/commands/generate.js",
|
|
148
154
|
flags: defineCommandFlags(generateFlags),
|
|
149
155
|
examples: [
|
|
150
156
|
"kb commit generate",
|
|
@@ -154,12 +160,12 @@ var manifest = {
|
|
|
154
160
|
},
|
|
155
161
|
// commit:apply - Apply commit plan
|
|
156
162
|
{
|
|
157
|
-
|
|
158
|
-
|
|
163
|
+
path: "commit apply",
|
|
164
|
+
category: "Pipeline",
|
|
159
165
|
describe: "Apply current commit plan (create local commits).",
|
|
166
|
+
operationType: "mutate",
|
|
160
167
|
longDescription: "Creates git commits according to the current plan. Checks for staleness (working tree changes since plan generation) unless --force is used.",
|
|
161
168
|
handler: "./cli/commands/apply.js#default",
|
|
162
|
-
handlerPath: "./cli/commands/apply.js",
|
|
163
169
|
flags: defineCommandFlags(applyFlags),
|
|
164
170
|
examples: [
|
|
165
171
|
"kb commit apply",
|
|
@@ -168,12 +174,12 @@ var manifest = {
|
|
|
168
174
|
},
|
|
169
175
|
// commit:push - Push commits
|
|
170
176
|
{
|
|
171
|
-
|
|
172
|
-
|
|
177
|
+
path: "commit push",
|
|
178
|
+
category: "Pipeline",
|
|
173
179
|
describe: "Push commits to remote repository.",
|
|
180
|
+
operationType: "execute",
|
|
174
181
|
longDescription: "Pushes local commits to the remote. Refuses force push to protected branches (main, master) by default.",
|
|
175
182
|
handler: "./cli/commands/push.js#default",
|
|
176
|
-
handlerPath: "./cli/commands/push.js",
|
|
177
183
|
flags: defineCommandFlags(pushFlags),
|
|
178
184
|
examples: [
|
|
179
185
|
"kb commit push"
|
|
@@ -181,12 +187,12 @@ var manifest = {
|
|
|
181
187
|
},
|
|
182
188
|
// commit:open - Show current plan
|
|
183
189
|
{
|
|
184
|
-
|
|
185
|
-
|
|
190
|
+
path: "commit open",
|
|
191
|
+
category: "Plan",
|
|
186
192
|
describe: "Show current commit plan.",
|
|
193
|
+
operationType: "read",
|
|
187
194
|
longDescription: "Displays the current commit plan if one exists.",
|
|
188
195
|
handler: "./cli/commands/open.js#default",
|
|
189
|
-
handlerPath: "./cli/commands/open.js",
|
|
190
196
|
flags: defineCommandFlags(jsonOnlyFlags),
|
|
191
197
|
examples: [
|
|
192
198
|
"kb commit open",
|
|
@@ -195,12 +201,12 @@ var manifest = {
|
|
|
195
201
|
},
|
|
196
202
|
// commit:reset - Clear current plan
|
|
197
203
|
{
|
|
198
|
-
|
|
199
|
-
|
|
204
|
+
path: "commit reset",
|
|
205
|
+
category: "Plan",
|
|
200
206
|
describe: "Clear current commit plan.",
|
|
207
|
+
operationType: "mutate",
|
|
201
208
|
longDescription: "Removes the current commit plan from storage.",
|
|
202
209
|
handler: "./cli/commands/reset.js#default",
|
|
203
|
-
handlerPath: "./cli/commands/reset.js",
|
|
204
210
|
flags: defineCommandFlags(emptyFlags),
|
|
205
211
|
examples: [
|
|
206
212
|
"kb commit reset"
|