@kb-labs/commit-contracts 0.6.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/schema.js ADDED
@@ -0,0 +1,158 @@
1
+ import { z } from 'zod';
2
+
3
+ // src/schema.ts
4
+ var ConventionalTypeSchema = z.enum([
5
+ "feat",
6
+ "fix",
7
+ "refactor",
8
+ "chore",
9
+ "docs",
10
+ "test",
11
+ "build",
12
+ "ci",
13
+ "perf"
14
+ ]);
15
+ var ReleaseHintSchema = z.enum(["none", "patch", "minor", "major"]);
16
+ var GitStatusSchema = z.object({
17
+ staged: z.array(z.string()),
18
+ unstaged: z.array(z.string()),
19
+ untracked: z.array(z.string())
20
+ });
21
+ var FileSummarySchema = z.object({
22
+ path: z.string(),
23
+ status: z.enum(["added", "modified", "deleted", "renamed", "copied"]),
24
+ additions: z.number().int().min(0),
25
+ deletions: z.number().int().min(0),
26
+ binary: z.boolean().default(false),
27
+ /** Whether file is truly new (never existed in repo history) */
28
+ isNewFile: z.boolean().default(false)
29
+ });
30
+ var CommitReasoningSchema = z.object({
31
+ /** Does this change add NEW user-visible behavior? */
32
+ newBehavior: z.boolean().default(false),
33
+ /** Does this change fix BROKEN functionality? */
34
+ fixesBug: z.boolean().default(false),
35
+ /** Is this only INTERNAL restructuring? */
36
+ internalOnly: z.boolean().default(false),
37
+ /** Human-readable explanation of why this type was chosen */
38
+ explanation: z.string().default(""),
39
+ /** LLM confidence in this classification (0.0-1.0) */
40
+ confidence: z.number().min(0).max(1).default(0.5)
41
+ });
42
+ var CommitGroupSchema = z.object({
43
+ id: z.string(),
44
+ type: ConventionalTypeSchema,
45
+ scope: z.string().optional(),
46
+ message: z.string().min(1),
47
+ body: z.string().optional(),
48
+ files: z.array(z.string()).min(1),
49
+ releaseHint: ReleaseHintSchema.default("none"),
50
+ breaking: z.boolean().default(false),
51
+ /** Reasoning for commit type classification (optional, added by LLM) */
52
+ reasoning: CommitReasoningSchema.optional()
53
+ });
54
+ var CommitPlanSchema = z.object({
55
+ schemaVersion: z.literal("1.0"),
56
+ createdAt: z.string().datetime(),
57
+ repoRoot: z.string(),
58
+ gitStatus: GitStatusSchema,
59
+ commits: z.array(CommitGroupSchema),
60
+ metadata: z.object({
61
+ totalFiles: z.number().int().min(0),
62
+ totalCommits: z.number().int().min(0),
63
+ llmUsed: z.boolean(),
64
+ tokensUsed: z.number().int().min(0).optional(),
65
+ /** Whether LLM escalated to Phase 2 (requested diff for more context) */
66
+ escalated: z.boolean().optional()
67
+ })
68
+ });
69
+ var GitStatusSnapshotSchema = z.object({
70
+ schemaVersion: z.literal("1.0"),
71
+ createdAt: z.string().datetime(),
72
+ status: GitStatusSchema,
73
+ summaries: z.array(FileSummarySchema)
74
+ });
75
+ var CommitRunInputSchema = z.object({
76
+ scope: z.string().optional(),
77
+ dryRun: z.boolean().default(false),
78
+ withPush: z.boolean().default(false)
79
+ });
80
+ var CommitRunOutputSchema = z.object({
81
+ plan: CommitPlanSchema,
82
+ applied: z.boolean(),
83
+ pushed: z.boolean(),
84
+ commits: z.array(
85
+ z.object({
86
+ id: z.string(),
87
+ sha: z.string().optional(),
88
+ message: z.string()
89
+ })
90
+ )
91
+ });
92
+ var GenerateInputSchema = z.object({
93
+ scope: z.string().optional()
94
+ });
95
+ var GenerateOutputSchema = z.object({
96
+ plan: CommitPlanSchema,
97
+ planPath: z.string()
98
+ });
99
+ var ApplyInputSchema = z.object({
100
+ force: z.boolean().default(false)
101
+ });
102
+ var ApplyOutputSchema = z.object({
103
+ success: z.boolean(),
104
+ commits: z.array(
105
+ z.object({
106
+ id: z.string(),
107
+ sha: z.string(),
108
+ message: z.string()
109
+ })
110
+ ),
111
+ errors: z.array(z.string()).default([])
112
+ });
113
+ var PushInputSchema = z.object({
114
+ force: z.boolean().default(false)
115
+ });
116
+ var PushOutputSchema = z.object({
117
+ success: z.boolean(),
118
+ remote: z.string(),
119
+ branch: z.string(),
120
+ commits: z.number().int().min(0)
121
+ });
122
+ var OpenInputSchema = z.object({
123
+ json: z.boolean().default(false)
124
+ });
125
+ var OpenOutputSchema = z.object({
126
+ hasPlan: z.boolean(),
127
+ plan: CommitPlanSchema.optional(),
128
+ planPath: z.string().optional()
129
+ });
130
+ var ResetOutputSchema = z.object({
131
+ success: z.boolean(),
132
+ message: z.string()
133
+ });
134
+ var ApplyResultSchema = z.object({
135
+ success: z.boolean(),
136
+ appliedCommits: z.array(
137
+ z.object({
138
+ groupId: z.string(),
139
+ sha: z.string(),
140
+ message: z.string()
141
+ })
142
+ ),
143
+ errors: z.array(z.string())
144
+ });
145
+ var PushResultSchema = z.object({
146
+ success: z.boolean(),
147
+ remote: z.string(),
148
+ branch: z.string(),
149
+ commitsPushed: z.number().int().min(0),
150
+ error: z.string().optional()
151
+ });
152
+ var ActionsResponseSchema = z.object({
153
+ scope: z.string().optional()
154
+ });
155
+
156
+ export { ActionsResponseSchema, ApplyInputSchema, ApplyOutputSchema, ApplyResultSchema, CommitGroupSchema, CommitPlanSchema, CommitReasoningSchema, CommitRunInputSchema, CommitRunOutputSchema, ConventionalTypeSchema, FileSummarySchema, GenerateInputSchema, GenerateOutputSchema, GitStatusSchema, GitStatusSnapshotSchema, OpenInputSchema, OpenOutputSchema, PushInputSchema, PushOutputSchema, PushResultSchema, ReleaseHintSchema, ResetOutputSchema };
157
+ //# sourceMappingURL=schema.js.map
158
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/schema.ts"],"names":[],"mappings":"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","file":"schema.js","sourcesContent":["import { z } from \"zod\";\n\n// ============================================================================\n// Core Types\n// ============================================================================\n\n/**\n * Conventional commit types\n */\nexport const ConventionalTypeSchema = z.enum([\n \"feat\",\n \"fix\",\n \"refactor\",\n \"chore\",\n \"docs\",\n \"test\",\n \"build\",\n \"ci\",\n \"perf\",\n]);\n\nexport type ConventionalType = z.infer<typeof ConventionalTypeSchema>;\n\n/**\n * Release hint for semantic versioning\n */\nexport const ReleaseHintSchema = z.enum([\"none\", \"patch\", \"minor\", \"major\"]);\n\nexport type ReleaseHint = z.infer<typeof ReleaseHintSchema>;\n\n// ============================================================================\n// Git Status\n// ============================================================================\n\n/**\n * Git status snapshot\n */\nexport const GitStatusSchema = z.object({\n staged: z.array(z.string()),\n unstaged: z.array(z.string()),\n untracked: z.array(z.string()),\n});\n\nexport type GitStatus = z.infer<typeof GitStatusSchema>;\n\n/**\n * File summary with diff stats\n */\nexport const FileSummarySchema = z.object({\n path: z.string(),\n status: z.enum([\"added\", \"modified\", \"deleted\", \"renamed\", \"copied\"]),\n additions: z.number().int().min(0),\n deletions: z.number().int().min(0),\n binary: z.boolean().default(false),\n /** Whether file is truly new (never existed in repo history) */\n isNewFile: z.boolean().default(false),\n});\n\nexport type FileSummary = z.infer<typeof FileSummarySchema>;\n\n// ============================================================================\n// Commit Plan\n// ============================================================================\n\n/**\n * Reasoning for commit type classification\n */\nexport const CommitReasoningSchema = z.object({\n /** Does this change add NEW user-visible behavior? */\n newBehavior: z.boolean().default(false),\n /** Does this change fix BROKEN functionality? */\n fixesBug: z.boolean().default(false),\n /** Is this only INTERNAL restructuring? */\n internalOnly: z.boolean().default(false),\n /** Human-readable explanation of why this type was chosen */\n explanation: z.string().default(''),\n /** LLM confidence in this classification (0.0-1.0) */\n confidence: z.number().min(0).max(1).default(0.5),\n});\n\nexport type CommitReasoning = z.infer<typeof CommitReasoningSchema>;\n\n/**\n * A single commit group in the plan\n */\nexport const CommitGroupSchema = z.object({\n id: z.string(),\n type: ConventionalTypeSchema,\n scope: z.string().optional(),\n message: z.string().min(1),\n body: z.string().optional(),\n files: z.array(z.string()).min(1),\n releaseHint: ReleaseHintSchema.default(\"none\"),\n breaking: z.boolean().default(false),\n /** Reasoning for commit type classification (optional, added by LLM) */\n reasoning: CommitReasoningSchema.optional(),\n});\n\nexport type CommitGroup = z.infer<typeof CommitGroupSchema>;\n\n/**\n * Complete commit plan\n */\nexport const CommitPlanSchema = z.object({\n schemaVersion: z.literal(\"1.0\"),\n createdAt: z.string().datetime(),\n repoRoot: z.string(),\n gitStatus: GitStatusSchema,\n commits: z.array(CommitGroupSchema),\n metadata: z.object({\n totalFiles: z.number().int().min(0),\n totalCommits: z.number().int().min(0),\n llmUsed: z.boolean(),\n tokensUsed: z.number().int().min(0).optional(),\n /** Whether LLM escalated to Phase 2 (requested diff for more context) */\n escalated: z.boolean().optional(),\n }),\n});\n\nexport type CommitPlan = z.infer<typeof CommitPlanSchema>;\n\n/**\n * Git status snapshot for storage\n */\nexport const GitStatusSnapshotSchema = z.object({\n schemaVersion: z.literal(\"1.0\"),\n createdAt: z.string().datetime(),\n status: GitStatusSchema,\n summaries: z.array(FileSummarySchema),\n});\n\nexport type GitStatusSnapshot = z.infer<typeof GitStatusSnapshotSchema>;\n\n// ============================================================================\n// Command Input/Output Schemas\n// ============================================================================\n\n// --- commit (run) ---\nexport const CommitRunInputSchema = z.object({\n scope: z.string().optional(),\n dryRun: z.boolean().default(false),\n withPush: z.boolean().default(false),\n});\n\nexport type CommitRunInput = z.infer<typeof CommitRunInputSchema>;\n\nexport const CommitRunOutputSchema = z.object({\n plan: CommitPlanSchema,\n applied: z.boolean(),\n pushed: z.boolean(),\n commits: z.array(\n z.object({\n id: z.string(),\n sha: z.string().optional(),\n message: z.string(),\n }),\n ),\n});\n\nexport type CommitRunOutput = z.infer<typeof CommitRunOutputSchema>;\n\n// --- commit:generate ---\nexport const GenerateInputSchema = z.object({\n scope: z.string().optional(),\n});\n\nexport type GenerateInput = z.infer<typeof GenerateInputSchema>;\n\nexport const GenerateOutputSchema = z.object({\n plan: CommitPlanSchema,\n planPath: z.string(),\n});\n\nexport type GenerateOutput = z.infer<typeof GenerateOutputSchema>;\n\n// --- commit:apply ---\nexport const ApplyInputSchema = z.object({\n force: z.boolean().default(false),\n});\n\nexport type ApplyInput = z.infer<typeof ApplyInputSchema>;\n\nexport const ApplyOutputSchema = z.object({\n success: z.boolean(),\n commits: z.array(\n z.object({\n id: z.string(),\n sha: z.string(),\n message: z.string(),\n }),\n ),\n errors: z.array(z.string()).default([]),\n});\n\nexport type ApplyOutput = z.infer<typeof ApplyOutputSchema>;\n\n// --- commit:push ---\nexport const PushInputSchema = z.object({\n force: z.boolean().default(false),\n});\n\nexport type PushInput = z.infer<typeof PushInputSchema>;\n\nexport const PushOutputSchema = z.object({\n success: z.boolean(),\n remote: z.string(),\n branch: z.string(),\n commits: z.number().int().min(0),\n});\n\nexport type PushOutput = z.infer<typeof PushOutputSchema>;\n\n// --- commit:open ---\nexport const OpenInputSchema = z.object({\n json: z.boolean().default(false),\n});\n\nexport type OpenInput = z.infer<typeof OpenInputSchema>;\n\nexport const OpenOutputSchema = z.object({\n hasPlan: z.boolean(),\n plan: CommitPlanSchema.optional(),\n planPath: z.string().optional(),\n});\n\nexport type OpenOutput = z.infer<typeof OpenOutputSchema>;\n\n// --- commit:reset ---\nexport const ResetOutputSchema = z.object({\n success: z.boolean(),\n message: z.string(),\n});\n\nexport type ResetOutput = z.infer<typeof ResetOutputSchema>;\n\n// ============================================================================\n// Result Types (for core package)\n// ============================================================================\n\nexport const ApplyResultSchema = z.object({\n success: z.boolean(),\n appliedCommits: z.array(\n z.object({\n groupId: z.string(),\n sha: z.string(),\n message: z.string(),\n }),\n ),\n errors: z.array(z.string()),\n});\n\nexport type ApplyResult = z.infer<typeof ApplyResultSchema>;\n\nexport const PushResultSchema = z.object({\n success: z.boolean(),\n remote: z.string(),\n branch: z.string(),\n commitsPushed: z.number().int().min(0),\n error: z.string().optional(),\n});\n\nexport type PushResult = z.infer<typeof PushResultSchema>;\n\n// ============================================================================\n// REST API Responses\n// ============================================================================\n\n/**\n * GET /actions response\n * Returns empty object for actions widget (widget only needs action buttons)\n */\nexport const ActionsResponseSchema = z.object({\n scope: z.string().optional(),\n});\n\nexport type ActionsResponse = z.infer<typeof ActionsResponseSchema>;\n"]}
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "@kb-labs/commit-contracts",
3
+ "version": "0.6.0",
4
+ "type": "module",
5
+ "description": "Public contracts package for KB Labs Commit plugin. Provides typed guarantees about artifacts, commands, and APIs.",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ },
13
+ "./contract": {
14
+ "import": "./dist/contract.js",
15
+ "types": "./dist/contract.d.ts"
16
+ },
17
+ "./schema": {
18
+ "import": "./dist/schema.js",
19
+ "types": "./dist/schema.d.ts"
20
+ },
21
+ "./dist/*": "./dist/*"
22
+ },
23
+ "files": [
24
+ "dist",
25
+ "README.md",
26
+ "LICENSE"
27
+ ],
28
+ "sideEffects": false,
29
+ "scripts": {
30
+ "pretype-check": "pnpm --filter @kb-labs/commit-contracts build",
31
+ "clean": "rimraf dist",
32
+ "build": "tsup --config tsup.config.ts",
33
+ "dev": "tsup --config tsup.config.ts --watch",
34
+ "lint": "eslint src --ext .ts",
35
+ "lint:fix": "eslint . --fix",
36
+ "type-check": "tsc --noEmit",
37
+ "test": "vitest run --passWithNoTests",
38
+ "test:watch": "vitest"
39
+ },
40
+ "dependencies": {
41
+ "@kb-labs/sdk": "^1.5.0",
42
+ "zod": "^3.23.8"
43
+ },
44
+ "devDependencies": {
45
+ "@kb-labs/devkit": "link:../../../../infra/kb-labs-devkit",
46
+ "@types/node": "^24.3.3",
47
+ "eslint": "^9",
48
+ "rimraf": "^6.0.1",
49
+ "tsup": "^8.5.0",
50
+ "typescript": "^5.6.3",
51
+ "vitest": "^3.2.4"
52
+ },
53
+ "engines": {
54
+ "node": ">=20.0.0",
55
+ "pnpm": ">=9.0.0"
56
+ }
57
+ }