@kody-ade/kody-engine 0.1.7 → 0.2.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/LICENSE +21 -0
- package/README.md +28 -61
- package/dist/bin/kody2.js +2512 -0
- package/dist/executables/build/profile.json +83 -0
- package/dist/executables/build/prompts/fix-ci.md +42 -0
- package/dist/executables/build/prompts/fix.md +40 -0
- package/dist/executables/build/prompts/resolve.md +34 -0
- package/dist/executables/build/prompts/run.md +31 -0
- package/dist/executables/types.ts +154 -0
- package/kody.config.schema.json +406 -0
- package/package.json +23 -28
- package/templates/kody2.yml +57 -0
- package/dist/bin/cli.mjs +0 -10781
- package/dist/bin/cli.mjs.map +0 -1
- package/opencode/agents/admin-expert.md +0 -73
- package/opencode/agents/advisor.md +0 -128
- package/opencode/agents/architect.md +0 -193
- package/opencode/agents/autofix.md +0 -103
- package/opencode/agents/build-delegation-test.md +0 -93
- package/opencode/agents/build-delegation.md +0 -98
- package/opencode/agents/build-manager.md +0 -212
- package/opencode/agents/build.md +0 -266
- package/opencode/agents/clarify.md +0 -84
- package/opencode/agents/code-reviewer.md +0 -42
- package/opencode/agents/commit.md +0 -27
- package/opencode/agents/docs.md +0 -123
- package/opencode/agents/domain/admin-expert.md +0 -43
- package/opencode/agents/domain/llm-expert.md +0 -55
- package/opencode/agents/domain/payload-expert.md +0 -67
- package/opencode/agents/domain/security-auditor.md +0 -62
- package/opencode/agents/domain/ui-expert.md +0 -43
- package/opencode/agents/domain/web-expert.md +0 -45
- package/opencode/agents/e2e-test-writer.md +0 -156
- package/opencode/agents/fix.md +0 -158
- package/opencode/agents/gap.md +0 -206
- package/opencode/agents/kody-expert.md +0 -173
- package/opencode/agents/llm-expert.md +0 -90
- package/opencode/agents/neuron.md +0 -12
- package/opencode/agents/payload-expert.md +0 -32
- package/opencode/agents/plan-gap.md +0 -132
- package/opencode/agents/pr.md +0 -25
- package/opencode/agents/review.md +0 -163
- package/opencode/agents/security-auditor.md +0 -33
- package/opencode/agents/taskify.md +0 -344
- package/opencode/agents/test-writer.md +0 -261
- package/opencode/agents/test.md +0 -142
- package/opencode/agents/verify.md +0 -30
- package/opencode/agents/web-expert.md +0 -63
- package/opencode/docs/BROWSER_AUTOMATION.md +0 -64
- package/opencode/docs/PIPELINE.md +0 -210
- package/opencode/opencode.json +0 -98
- package/templates/kody.yml +0 -312
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"title": "Kody Engine Lite Configuration",
|
|
4
|
+
"description": "Configuration for the Kody autonomous SDLC pipeline. See https://github.com/aharonyaircohen/Kody-Engine-Lite",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"properties": {
|
|
7
|
+
"quality": {
|
|
8
|
+
"type": "object",
|
|
9
|
+
"description": "Quality gate commands run during the verify stage. Leave empty string to skip.",
|
|
10
|
+
"properties": {
|
|
11
|
+
"typecheck": {
|
|
12
|
+
"type": "string",
|
|
13
|
+
"description": "TypeScript type checking command (e.g., 'pnpm typecheck', 'pnpm tsc --noEmit')",
|
|
14
|
+
"default": "pnpm -s tsc --noEmit"
|
|
15
|
+
},
|
|
16
|
+
"lint": {
|
|
17
|
+
"type": "string",
|
|
18
|
+
"description": "Lint command (e.g., 'pnpm lint'). Empty to skip.",
|
|
19
|
+
"default": ""
|
|
20
|
+
},
|
|
21
|
+
"lintFix": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"description": "Auto-fix lint command, run when verify fails (e.g., 'pnpm lint:fix')",
|
|
24
|
+
"default": ""
|
|
25
|
+
},
|
|
26
|
+
"formatFix": {
|
|
27
|
+
"type": "string",
|
|
28
|
+
"description": "Auto-fix format command, run when verify fails (e.g., 'pnpm format')",
|
|
29
|
+
"default": ""
|
|
30
|
+
},
|
|
31
|
+
"testUnit": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"description": "Unit test command. Use test:unit to exclude integration/e2e tests (e.g., 'pnpm test:unit')",
|
|
34
|
+
"default": "pnpm -s test"
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
"additionalProperties": false
|
|
38
|
+
},
|
|
39
|
+
"git": {
|
|
40
|
+
"type": "object",
|
|
41
|
+
"description": "Git configuration",
|
|
42
|
+
"properties": {
|
|
43
|
+
"defaultBranch": {
|
|
44
|
+
"type": "string",
|
|
45
|
+
"description": "Default branch for PR base and branch syncing (e.g., 'main', 'dev')",
|
|
46
|
+
"default": "dev"
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"additionalProperties": false
|
|
50
|
+
},
|
|
51
|
+
"github": {
|
|
52
|
+
"type": "object",
|
|
53
|
+
"description": "GitHub repository settings. Auto-detected from git remote by init.",
|
|
54
|
+
"properties": {
|
|
55
|
+
"owner": {
|
|
56
|
+
"type": "string",
|
|
57
|
+
"description": "GitHub organization or username (e.g., 'my-org')"
|
|
58
|
+
},
|
|
59
|
+
"repo": {
|
|
60
|
+
"type": "string",
|
|
61
|
+
"description": "GitHub repository name (e.g., 'my-repo')"
|
|
62
|
+
},
|
|
63
|
+
"postSummary": {
|
|
64
|
+
"type": "boolean",
|
|
65
|
+
"description": "Post a structured pipeline summary comment on the issue after completion. Default: true in CI, false locally.",
|
|
66
|
+
"default": true
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
"additionalProperties": false
|
|
70
|
+
},
|
|
71
|
+
"timeouts": {
|
|
72
|
+
"type": "object",
|
|
73
|
+
"description": "Per-stage timeout overrides in seconds. Defaults: taskify=600, plan=600, build=2400, verify=300, review=600, review-fix=1200, ship=240",
|
|
74
|
+
"properties": {
|
|
75
|
+
"taskify": { "type": "number", "description": "Taskify stage timeout in seconds", "default": 600 },
|
|
76
|
+
"plan": { "type": "number", "description": "Plan stage timeout in seconds", "default": 600 },
|
|
77
|
+
"build": { "type": "number", "description": "Build stage timeout in seconds", "default": 2400 },
|
|
78
|
+
"verify": { "type": "number", "description": "Verify stage timeout in seconds", "default": 300 },
|
|
79
|
+
"review": { "type": "number", "description": "Review stage timeout in seconds", "default": 600 },
|
|
80
|
+
"review-fix": { "type": "number", "description": "Review-fix stage timeout in seconds", "default": 1200 },
|
|
81
|
+
"ship": { "type": "number", "description": "Ship stage timeout in seconds", "default": 240 }
|
|
82
|
+
},
|
|
83
|
+
"additionalProperties": false
|
|
84
|
+
},
|
|
85
|
+
"issueContext": {
|
|
86
|
+
"type": "object",
|
|
87
|
+
"description": "kody2: how many and how much of the issue's comments the agent sees in its prompt. Higher = more context but larger prompts. Defaults: 50 comments, 10000 bytes each.",
|
|
88
|
+
"properties": {
|
|
89
|
+
"commentLimit": {
|
|
90
|
+
"type": "integer",
|
|
91
|
+
"minimum": 1,
|
|
92
|
+
"description": "Max number of comments (most recent first) to include in the agent prompt. Default: 50.",
|
|
93
|
+
"default": 50
|
|
94
|
+
},
|
|
95
|
+
"commentMaxBytes": {
|
|
96
|
+
"type": "integer",
|
|
97
|
+
"minimum": 1,
|
|
98
|
+
"description": "Max bytes per comment before truncation. Default: 10000.",
|
|
99
|
+
"default": 10000
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
"additionalProperties": false
|
|
103
|
+
},
|
|
104
|
+
"testRequirements": {
|
|
105
|
+
"type": "array",
|
|
106
|
+
"description": "kody2 enforces that newly added files matching `pattern` ship with a sibling test file matching `requireSibling`. Misses fail the run; the agent gets one retry with the gap as feedback. Empty array or absent = no enforcement.",
|
|
107
|
+
"items": {
|
|
108
|
+
"type": "object",
|
|
109
|
+
"required": ["pattern", "requireSibling"],
|
|
110
|
+
"additionalProperties": false,
|
|
111
|
+
"properties": {
|
|
112
|
+
"pattern": {
|
|
113
|
+
"type": "string",
|
|
114
|
+
"description": "Glob-style pattern (* within segment, ** across segments). Example: 'src/app/api/**/route.ts'"
|
|
115
|
+
},
|
|
116
|
+
"requireSibling": {
|
|
117
|
+
"type": "string",
|
|
118
|
+
"description": "Sibling test path template. Tokens: {name} (filename without ext), {ext} (e.g. .ts). Example: '{name}.test{ext}'"
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
"agent": {
|
|
124
|
+
"type": "object",
|
|
125
|
+
"description": "Agent execution configuration",
|
|
126
|
+
"properties": {
|
|
127
|
+
"model": {
|
|
128
|
+
"type": "string",
|
|
129
|
+
"pattern": "^[^/]+/.+$",
|
|
130
|
+
"description": "Single 'provider/model' string used by kody2 (single-session pipeline). Use 'claude/...' or 'anthropic/...' for direct Anthropic API; anything else routes through LiteLLM proxy.",
|
|
131
|
+
"examples": ["claude/claude-sonnet-4-6", "minimax/MiniMax-M2.7-highspeed"]
|
|
132
|
+
},
|
|
133
|
+
"modelMap": {
|
|
134
|
+
"type": "object",
|
|
135
|
+
"description": "Maps model tiers to 'provider/model' strings. Use 'claude/...' or 'anthropic/...' for direct Anthropic API; anything else routes through LiteLLM proxy.",
|
|
136
|
+
"properties": {
|
|
137
|
+
"cheap": {
|
|
138
|
+
"type": "string",
|
|
139
|
+
"pattern": "^[^/]+/.+$",
|
|
140
|
+
"description": "Fast/cheap 'provider/model' for taskify (e.g., 'claude/claude-haiku-4-5-20251001', 'minimax/MiniMax-M2.7-highspeed')",
|
|
141
|
+
"examples": ["claude/claude-haiku-4-5-20251001", "minimax/MiniMax-M2.7-highspeed"]
|
|
142
|
+
},
|
|
143
|
+
"mid": {
|
|
144
|
+
"type": "string",
|
|
145
|
+
"pattern": "^[^/]+/.+$",
|
|
146
|
+
"description": "Mid-tier 'provider/model' for build, review-fix, autofix (e.g., 'claude/claude-sonnet-4-6')",
|
|
147
|
+
"examples": ["claude/claude-sonnet-4-6", "minimax/MiniMax-M2.7-highspeed"]
|
|
148
|
+
},
|
|
149
|
+
"strong": {
|
|
150
|
+
"type": "string",
|
|
151
|
+
"pattern": "^[^/]+/.+$",
|
|
152
|
+
"description": "Strongest 'provider/model' for plan, review — deep reasoning (e.g., 'claude/claude-opus-4-6')",
|
|
153
|
+
"examples": ["claude/claude-opus-4-6", "minimax/MiniMax-M2.7-highspeed"]
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
"additionalProperties": false
|
|
157
|
+
},
|
|
158
|
+
"defaultRunner": {
|
|
159
|
+
"type": "string",
|
|
160
|
+
"description": "Name of the default runner when multiple runners are configured (advanced)",
|
|
161
|
+
"default": "claude"
|
|
162
|
+
},
|
|
163
|
+
"runners": {
|
|
164
|
+
"type": "object",
|
|
165
|
+
"description": "Named runner definitions (advanced)",
|
|
166
|
+
"additionalProperties": {
|
|
167
|
+
"type": "object",
|
|
168
|
+
"properties": {
|
|
169
|
+
"type": {
|
|
170
|
+
"type": "string",
|
|
171
|
+
"enum": ["claude-code"]
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
"required": ["type"]
|
|
175
|
+
}
|
|
176
|
+
},
|
|
177
|
+
"stageRunners": {
|
|
178
|
+
"type": "object",
|
|
179
|
+
"description": "Per-stage runner assignment (advanced). Maps stage name to runner name.",
|
|
180
|
+
"properties": {
|
|
181
|
+
"taskify": { "type": "string" },
|
|
182
|
+
"plan": { "type": "string" },
|
|
183
|
+
"build": { "type": "string" },
|
|
184
|
+
"autofix": { "type": "string" },
|
|
185
|
+
"review": { "type": "string" },
|
|
186
|
+
"review-fix": { "type": "string" }
|
|
187
|
+
},
|
|
188
|
+
"additionalProperties": false
|
|
189
|
+
},
|
|
190
|
+
"default": {
|
|
191
|
+
"type": "string",
|
|
192
|
+
"pattern": "^[^/]+/.+$",
|
|
193
|
+
"description": "Default 'provider/model' string applied to every stage. Use 'claude/<model>' for direct Anthropic API; anything else routes through LiteLLM proxy. Overridden by entries in 'stages'.",
|
|
194
|
+
"examples": ["claude/claude-sonnet-4-6", "minimax/MiniMax-M2.7-highspeed", "openai/gpt-4o"]
|
|
195
|
+
},
|
|
196
|
+
"stages": {
|
|
197
|
+
"type": "object",
|
|
198
|
+
"description": "Per-stage 'provider/model' overrides. Takes precedence over 'default' and 'modelMap'.",
|
|
199
|
+
"properties": {
|
|
200
|
+
"taskify": { "type": "string", "pattern": "^[^/]+/.+$" },
|
|
201
|
+
"plan": { "type": "string", "pattern": "^[^/]+/.+$" },
|
|
202
|
+
"build": { "type": "string", "pattern": "^[^/]+/.+$" },
|
|
203
|
+
"verify": { "type": "string", "pattern": "^[^/]+/.+$" },
|
|
204
|
+
"review": { "type": "string", "pattern": "^[^/]+/.+$" },
|
|
205
|
+
"review-fix": { "type": "string", "pattern": "^[^/]+/.+$" },
|
|
206
|
+
"ship": { "type": "string", "pattern": "^[^/]+/.+$" }
|
|
207
|
+
},
|
|
208
|
+
"additionalProperties": false
|
|
209
|
+
},
|
|
210
|
+
"escalateOnTimeout": {
|
|
211
|
+
"type": "boolean",
|
|
212
|
+
"description": "Escalate to a stronger model tier when a stage times out and retries. Default: true.",
|
|
213
|
+
"default": true
|
|
214
|
+
}
|
|
215
|
+
},
|
|
216
|
+
"additionalProperties": false
|
|
217
|
+
},
|
|
218
|
+
"watch": {
|
|
219
|
+
"type": "object",
|
|
220
|
+
"description": "Kody Watch — periodic health monitoring. Runs every 30 minutes via GitHub Actions to check pipeline health, security, and configuration.",
|
|
221
|
+
"properties": {
|
|
222
|
+
"enabled": {
|
|
223
|
+
"type": "boolean",
|
|
224
|
+
"description": "Enable Kody Watch periodic monitoring",
|
|
225
|
+
"default": false
|
|
226
|
+
},
|
|
227
|
+
"activityLog": {
|
|
228
|
+
"type": "number",
|
|
229
|
+
"description": "GitHub issue number for posting activity log reports. Auto-created by bootstrap."
|
|
230
|
+
},
|
|
231
|
+
"model": {
|
|
232
|
+
"type": "string",
|
|
233
|
+
"pattern": "^[^/]+/.+$",
|
|
234
|
+
"description": "'provider/model' string for watch agents. Falls back to agent.modelMap.cheap if not set.",
|
|
235
|
+
"examples": ["claude/claude-sonnet-4-6", "claude/claude-haiku-4-5-20251001", "minimax/MiniMax-M1"]
|
|
236
|
+
}
|
|
237
|
+
},
|
|
238
|
+
"additionalProperties": false
|
|
239
|
+
},
|
|
240
|
+
"decompose": {
|
|
241
|
+
"type": "object",
|
|
242
|
+
"description": "Decompose command configuration for splitting complex tasks into parallel sub-tasks.",
|
|
243
|
+
"properties": {
|
|
244
|
+
"enabled": {
|
|
245
|
+
"type": "boolean",
|
|
246
|
+
"description": "Enable the decompose command. Default: true.",
|
|
247
|
+
"default": true
|
|
248
|
+
},
|
|
249
|
+
"maxParallelSubTasks": {
|
|
250
|
+
"type": "number",
|
|
251
|
+
"description": "Maximum number of sub-tasks to build in parallel. Default: 3.",
|
|
252
|
+
"default": 3
|
|
253
|
+
},
|
|
254
|
+
"minComplexityScore": {
|
|
255
|
+
"type": "number",
|
|
256
|
+
"description": "Minimum complexity score (1-10) for a task to be decomposed. Set lower to decompose more tasks. Default: 4.",
|
|
257
|
+
"default": 4
|
|
258
|
+
}
|
|
259
|
+
},
|
|
260
|
+
"additionalProperties": false
|
|
261
|
+
},
|
|
262
|
+
"mcp": {
|
|
263
|
+
"type": "object",
|
|
264
|
+
"description": "MCP (Model Context Protocol) server configuration. Enables external tools like browser automation.",
|
|
265
|
+
"properties": {
|
|
266
|
+
"enabled": {
|
|
267
|
+
"type": "boolean",
|
|
268
|
+
"description": "Enable MCP server integration",
|
|
269
|
+
"default": false
|
|
270
|
+
},
|
|
271
|
+
"servers": {
|
|
272
|
+
"type": "object",
|
|
273
|
+
"description": "Named MCP server definitions. Each key is a server name.",
|
|
274
|
+
"additionalProperties": {
|
|
275
|
+
"type": "object",
|
|
276
|
+
"properties": {
|
|
277
|
+
"command": {
|
|
278
|
+
"type": "string",
|
|
279
|
+
"description": "Command to start the MCP server (e.g., 'npx')"
|
|
280
|
+
},
|
|
281
|
+
"args": {
|
|
282
|
+
"type": "array",
|
|
283
|
+
"items": { "type": "string" },
|
|
284
|
+
"description": "Command arguments"
|
|
285
|
+
},
|
|
286
|
+
"env": {
|
|
287
|
+
"type": "object",
|
|
288
|
+
"additionalProperties": { "type": "string" },
|
|
289
|
+
"description": "Environment variables for the server process"
|
|
290
|
+
}
|
|
291
|
+
},
|
|
292
|
+
"required": ["command"]
|
|
293
|
+
}
|
|
294
|
+
},
|
|
295
|
+
"stages": {
|
|
296
|
+
"type": "array",
|
|
297
|
+
"items": { "type": "string" },
|
|
298
|
+
"description": "Stages that can use MCP tools. Defaults to [\"build\", \"verify\", \"review\", \"review-fix\"]",
|
|
299
|
+
"default": ["build", "verify", "review", "review-fix"]
|
|
300
|
+
},
|
|
301
|
+
"devServer": {
|
|
302
|
+
"type": "object",
|
|
303
|
+
"description": "DEPRECATED: Use top-level devServer instead. Kept for backward compatibility.",
|
|
304
|
+
"properties": {
|
|
305
|
+
"command": {
|
|
306
|
+
"type": "string",
|
|
307
|
+
"description": "Command to start the dev server (e.g., 'pnpm dev')"
|
|
308
|
+
},
|
|
309
|
+
"url": {
|
|
310
|
+
"type": "string",
|
|
311
|
+
"description": "URL where the dev server will be accessible (e.g., 'http://localhost:3000')"
|
|
312
|
+
},
|
|
313
|
+
"readyPattern": {
|
|
314
|
+
"type": "string",
|
|
315
|
+
"description": "Regex pattern to match in stdout when server is ready. Default: 'Ready in|compiled|started server|Local:'"
|
|
316
|
+
},
|
|
317
|
+
"readyTimeout": {
|
|
318
|
+
"type": "number",
|
|
319
|
+
"description": "Seconds to wait for the server to be ready. Default: 180"
|
|
320
|
+
}
|
|
321
|
+
},
|
|
322
|
+
"required": ["command", "url"]
|
|
323
|
+
}
|
|
324
|
+
},
|
|
325
|
+
"required": ["enabled", "servers"],
|
|
326
|
+
"additionalProperties": false
|
|
327
|
+
},
|
|
328
|
+
"release": {
|
|
329
|
+
"type": "object",
|
|
330
|
+
"description": "Release automation configuration. Used by 'kody-engine release' command.",
|
|
331
|
+
"properties": {
|
|
332
|
+
"versionFiles": {
|
|
333
|
+
"type": "array",
|
|
334
|
+
"items": { "type": "string" },
|
|
335
|
+
"description": "Files containing version strings to update on release. Default: [\"package.json\"]",
|
|
336
|
+
"default": ["package.json"]
|
|
337
|
+
},
|
|
338
|
+
"publishCommand": {
|
|
339
|
+
"type": "string",
|
|
340
|
+
"description": "Shell command to run after tagging for publishing. Empty = skip. NOT hardcoded to any registry.",
|
|
341
|
+
"default": "",
|
|
342
|
+
"examples": ["npm publish --access public", "cargo publish", "make publish"]
|
|
343
|
+
},
|
|
344
|
+
"notifyCommand": {
|
|
345
|
+
"type": "string",
|
|
346
|
+
"description": "Shell command for post-release notifications. $VERSION is interpolated at runtime. Empty = skip.",
|
|
347
|
+
"default": "",
|
|
348
|
+
"examples": ["curl -X POST $SLACK_WEBHOOK -d '{\"text\": \"Released v$VERSION\"}'"]
|
|
349
|
+
},
|
|
350
|
+
"e2eCommand": {
|
|
351
|
+
"type": "string",
|
|
352
|
+
"description": "Shell command to run E2E tests as a release gate. Runs before publishCommand. $VERSION is interpolated at runtime. Empty = skip (no E2E gate).",
|
|
353
|
+
"default": "",
|
|
354
|
+
"examples": ["pnpm test:e2e", "npm run e2e", "playwright test"]
|
|
355
|
+
},
|
|
356
|
+
"timeoutMs": {
|
|
357
|
+
"type": "integer",
|
|
358
|
+
"description": "Timeout in milliseconds for e2eCommand, publishCommand, and notifyCommand. Default: 600000 (10 minutes).",
|
|
359
|
+
"default": 600000,
|
|
360
|
+
"examples": [600000, 1200000, 1800000]
|
|
361
|
+
},
|
|
362
|
+
"releaseBranch": {
|
|
363
|
+
"type": "string",
|
|
364
|
+
"description": "Production branch — E2E gates PRs into this branch. Release PR targets git.defaultBranch. Defaults to 'main'.",
|
|
365
|
+
"default": "main"
|
|
366
|
+
},
|
|
367
|
+
"labels": {
|
|
368
|
+
"type": "array",
|
|
369
|
+
"items": { "type": "string" },
|
|
370
|
+
"description": "Labels to add to the release PR. Default: [\"release\"]",
|
|
371
|
+
"default": ["kody:release"]
|
|
372
|
+
},
|
|
373
|
+
"draftRelease": {
|
|
374
|
+
"type": "boolean",
|
|
375
|
+
"description": "Create GitHub Releases as drafts. Default: false",
|
|
376
|
+
"default": false
|
|
377
|
+
}
|
|
378
|
+
},
|
|
379
|
+
"additionalProperties": false
|
|
380
|
+
},
|
|
381
|
+
"devServer": {
|
|
382
|
+
"type": "object",
|
|
383
|
+
"description": "Dev server configuration for browser tool verification. Works with any provider (MCP or CLI-based).",
|
|
384
|
+
"properties": {
|
|
385
|
+
"command": {
|
|
386
|
+
"type": "string",
|
|
387
|
+
"description": "Command to start the dev server (e.g., 'pnpm dev')"
|
|
388
|
+
},
|
|
389
|
+
"url": {
|
|
390
|
+
"type": "string",
|
|
391
|
+
"description": "URL where the dev server will be accessible (e.g., 'http://localhost:3000')"
|
|
392
|
+
},
|
|
393
|
+
"readyPattern": {
|
|
394
|
+
"type": "string",
|
|
395
|
+
"description": "Regex pattern to match in stdout when server is ready. Default: 'Ready in|compiled|started server|Local:'"
|
|
396
|
+
},
|
|
397
|
+
"readyTimeout": {
|
|
398
|
+
"type": "number",
|
|
399
|
+
"description": "Seconds to wait for the server to be ready. Default: 180"
|
|
400
|
+
}
|
|
401
|
+
},
|
|
402
|
+
"required": ["command", "url"]
|
|
403
|
+
}
|
|
404
|
+
},
|
|
405
|
+
"additionalProperties": false
|
|
406
|
+
}
|
package/package.json
CHANGED
|
@@ -1,48 +1,43 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kody-ade/kody-engine",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "kody2 — autonomous development engine. Single-session Claude Code agent behind a generic executor + declarative executable profiles.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|
|
8
|
-
"
|
|
8
|
+
"kody2": "dist/bin/kody2.js"
|
|
9
9
|
},
|
|
10
10
|
"files": [
|
|
11
11
|
"dist",
|
|
12
12
|
"templates",
|
|
13
|
-
"
|
|
13
|
+
"kody.config.schema.json"
|
|
14
14
|
],
|
|
15
15
|
"scripts": {
|
|
16
|
-
"
|
|
17
|
-
"build": "tsup",
|
|
18
|
-
"
|
|
16
|
+
"kody2": "tsx bin/kody2.ts",
|
|
17
|
+
"build": "tsup && node -e \"require('fs').cpSync('src/executables', 'dist/executables', { recursive: true })\"",
|
|
18
|
+
"test": "vitest run tests --no-coverage",
|
|
19
|
+
"test:e2e": "vitest run e2e --no-coverage",
|
|
20
|
+
"test:all": "vitest run tests e2e --no-coverage",
|
|
21
|
+
"typecheck": "tsc --noEmit",
|
|
22
|
+
"prepublishOnly": "pnpm build"
|
|
19
23
|
},
|
|
20
24
|
"dependencies": {
|
|
21
|
-
"@ai-sdk
|
|
22
|
-
"@ai-sdk/mcp": "^1.0.30",
|
|
23
|
-
"@anthropic-ai/sdk": "^0.80.0",
|
|
24
|
-
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
25
|
-
"@octokit/core": "^7.0.6",
|
|
26
|
-
"@octokit/plugin-throttling": "^11.0.3",
|
|
27
|
-
"@octokit/rest": "^22.0.1",
|
|
28
|
-
"ai": "^6.0.97",
|
|
29
|
-
"commander": "^14.0.3",
|
|
30
|
-
"date-fns": "^4.1.0",
|
|
31
|
-
"dotenv": "17.2.3",
|
|
32
|
-
"ms": "^2.1.3",
|
|
33
|
-
"pino": "^10.1.0",
|
|
34
|
-
"pino-pretty": "^13.1.3",
|
|
35
|
-
"slugify": "^1.6.6",
|
|
36
|
-
"znv": "^0.5.0",
|
|
37
|
-
"zod": "^4.3.5"
|
|
25
|
+
"@anthropic-ai/claude-agent-sdk": "0.2.92"
|
|
38
26
|
},
|
|
39
27
|
"devDependencies": {
|
|
40
|
-
"@types/ms": "^2.1.0",
|
|
41
28
|
"@types/node": "^22.5.4",
|
|
42
|
-
"tsup": "^8.5.
|
|
43
|
-
"
|
|
29
|
+
"tsup": "^8.5.1",
|
|
30
|
+
"tsx": "^4.21.0",
|
|
31
|
+
"typescript": "~5.7.0",
|
|
32
|
+
"vitest": "^4.1.1"
|
|
44
33
|
},
|
|
45
34
|
"engines": {
|
|
46
35
|
"node": ">=22"
|
|
47
|
-
}
|
|
36
|
+
},
|
|
37
|
+
"repository": {
|
|
38
|
+
"type": "git",
|
|
39
|
+
"url": "git+https://github.com/aharonyaircohen/kody-engine.git"
|
|
40
|
+
},
|
|
41
|
+
"homepage": "https://github.com/aharonyaircohen/kody-engine",
|
|
42
|
+
"bugs": "https://github.com/aharonyaircohen/kody-engine/issues"
|
|
48
43
|
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Drop this file at .github/workflows/kody2.yml in your repo.
|
|
2
|
+
#
|
|
3
|
+
# Triggers: @kody2 comment on an issue, or manual workflow_dispatch.
|
|
4
|
+
# Everything else (install deps, set up LiteLLM, run the agent, open the PR)
|
|
5
|
+
# is handled inside the @kody-ade/engine package. This template should
|
|
6
|
+
# rarely need editing — future kody2 capabilities ship via npm publish.
|
|
7
|
+
#
|
|
8
|
+
# Required repo secrets: at least one model provider key (e.g. MINIMAX_API_KEY,
|
|
9
|
+
# ANTHROPIC_API_KEY). kody2 reads any *_API_KEY secret automatically via
|
|
10
|
+
# toJSON(secrets) — no need to list them here.
|
|
11
|
+
#
|
|
12
|
+
# Optional: KODY_TOKEN secret — a PAT or GitHub App token. Needed only if
|
|
13
|
+
# you want kody2's pushes to trigger downstream workflows. Without it,
|
|
14
|
+
# github.token works fine for the PR/commit itself but won't fire other CI.
|
|
15
|
+
|
|
16
|
+
name: kody2
|
|
17
|
+
|
|
18
|
+
on:
|
|
19
|
+
workflow_dispatch:
|
|
20
|
+
inputs:
|
|
21
|
+
issue_number:
|
|
22
|
+
description: "GitHub issue number"
|
|
23
|
+
required: true
|
|
24
|
+
type: string
|
|
25
|
+
issue_comment:
|
|
26
|
+
types: [created]
|
|
27
|
+
|
|
28
|
+
jobs:
|
|
29
|
+
run:
|
|
30
|
+
if: >-
|
|
31
|
+
${{ github.event_name == 'workflow_dispatch' ||
|
|
32
|
+
(github.event_name == 'issue_comment' &&
|
|
33
|
+
!github.event.issue.pull_request &&
|
|
34
|
+
contains(github.event.comment.body, '@kody2')) }}
|
|
35
|
+
runs-on: ubuntu-latest
|
|
36
|
+
timeout-minutes: 60
|
|
37
|
+
permissions:
|
|
38
|
+
issues: write
|
|
39
|
+
pull-requests: write
|
|
40
|
+
contents: write
|
|
41
|
+
steps:
|
|
42
|
+
- uses: actions/checkout@v4
|
|
43
|
+
with:
|
|
44
|
+
fetch-depth: 0
|
|
45
|
+
token: ${{ secrets.KODY_TOKEN || github.token }}
|
|
46
|
+
|
|
47
|
+
- uses: actions/setup-node@v4
|
|
48
|
+
with:
|
|
49
|
+
node-version: 22
|
|
50
|
+
|
|
51
|
+
- uses: actions/setup-python@v5
|
|
52
|
+
with:
|
|
53
|
+
python-version: "3.12"
|
|
54
|
+
|
|
55
|
+
- env:
|
|
56
|
+
ALL_SECRETS: ${{ toJSON(secrets) }}
|
|
57
|
+
run: npx -y -p @kody-ade/engine@latest kody2 ci --issue ${{ github.event.inputs.issue_number || github.event.issue.number }}
|