@kody-ade/kody-engine 0.2.12 → 0.2.13

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.
@@ -1,7 +1,6 @@
1
1
  {
2
2
  "name": "review",
3
3
  "describe": "Read-only structured review of an open PR. Posts one comment, never commits.",
4
-
5
4
  "inputs": [
6
5
  {
7
6
  "name": "pr",
@@ -11,31 +10,41 @@
11
10
  "describe": "GitHub PR number to review."
12
11
  }
13
12
  ],
14
-
15
13
  "claudeCode": {
16
14
  "model": "inherit",
17
15
  "permissionMode": "default",
18
16
  "maxTurns": null,
19
17
  "systemPromptAppend": null,
20
- "tools": ["Read", "Grep", "Glob", "Bash"],
21
- "hooks": { "PreToolUse": [], "PostToolUse": [], "Stop": [] },
18
+ "tools": [
19
+ "Read",
20
+ "Grep",
21
+ "Glob",
22
+ "Bash"
23
+ ],
24
+ "hooks": [],
22
25
  "skills": [],
23
26
  "commands": [],
24
27
  "subagents": [],
25
28
  "plugins": [],
26
29
  "mcpServers": []
27
30
  },
28
-
29
31
  "cliTools": [],
30
-
31
32
  "scripts": {
32
33
  "preflight": [
33
- { "script": "reviewFlow" },
34
- { "script": "loadConventions" },
35
- { "script": "composePrompt" }
34
+ {
35
+ "script": "reviewFlow"
36
+ },
37
+ {
38
+ "script": "loadConventions"
39
+ },
40
+ {
41
+ "script": "composePrompt"
42
+ }
36
43
  ],
37
44
  "postflight": [
38
- { "script": "postReviewResult" }
45
+ {
46
+ "script": "postReviewResult"
47
+ }
39
48
  ]
40
49
  }
41
50
  }
@@ -1,7 +1,6 @@
1
1
  {
2
2
  "name": "run",
3
3
  "describe": "Implement a GitHub issue end-to-end: branch, code, commit, open PR.",
4
-
5
4
  "inputs": [
6
5
  {
7
6
  "name": "issue",
@@ -11,44 +10,70 @@
11
10
  "describe": "GitHub issue number to implement."
12
11
  }
13
12
  ],
14
-
15
13
  "claudeCode": {
16
14
  "model": "inherit",
17
15
  "permissionMode": "acceptEdits",
18
16
  "maxTurns": null,
19
17
  "systemPromptAppend": null,
20
- "tools": ["Read", "Write", "Edit", "Bash", "Grep", "Glob"],
21
- "hooks": {
22
- "PreToolUse": [],
23
- "PostToolUse": [],
24
- "Stop": []
25
- },
18
+ "tools": [
19
+ "Read",
20
+ "Write",
21
+ "Edit",
22
+ "Bash",
23
+ "Grep",
24
+ "Glob"
25
+ ],
26
+ "hooks": [],
26
27
  "skills": [],
27
28
  "commands": [],
28
29
  "subagents": [],
29
30
  "plugins": [],
30
31
  "mcpServers": []
31
32
  },
32
-
33
33
  "cliTools": [],
34
-
35
34
  "scripts": {
36
35
  "preflight": [
37
- { "script": "runFlow" },
38
- { "script": "loadTaskState" },
39
- { "script": "loadConventions" },
40
- { "script": "loadCoverageRules" },
41
- { "script": "composePrompt" }
36
+ {
37
+ "script": "runFlow"
38
+ },
39
+ {
40
+ "script": "loadTaskState"
41
+ },
42
+ {
43
+ "script": "loadConventions"
44
+ },
45
+ {
46
+ "script": "loadCoverageRules"
47
+ },
48
+ {
49
+ "script": "composePrompt"
50
+ }
42
51
  ],
43
52
  "postflight": [
44
- { "script": "parseAgentResult" },
45
- { "script": "verify" },
46
- { "script": "checkCoverageWithRetry" },
47
- { "script": "commitAndPush" },
48
- { "script": "ensurePr" },
49
- { "script": "postIssueComment" },
50
- { "script": "writeRunSummary" },
51
- { "script": "saveTaskState" }
53
+ {
54
+ "script": "parseAgentResult"
55
+ },
56
+ {
57
+ "script": "verify"
58
+ },
59
+ {
60
+ "script": "checkCoverageWithRetry"
61
+ },
62
+ {
63
+ "script": "commitAndPush"
64
+ },
65
+ {
66
+ "script": "ensurePr"
67
+ },
68
+ {
69
+ "script": "postIssueComment"
70
+ },
71
+ {
72
+ "script": "writeRunSummary"
73
+ },
74
+ {
75
+ "script": "saveTaskState"
76
+ }
52
77
  ]
53
78
  },
54
79
  "output": {
@@ -62,24 +62,26 @@ export interface ClaudeCodeSpec {
62
62
  systemPromptAppend: string | null
63
63
  /** SDK built-in tools this executable is allowed to use (capability pack). */
64
64
  tools: string[]
65
- /** Claude Code hooks. `matcher` is a tool-name glob; `command` is a shell invocation. */
66
- hooks: {
67
- PreToolUse: HookEntry[]
68
- PostToolUse: HookEntry[]
69
- Stop: HookEntry[]
70
- }
65
+ /**
66
+ * Names of bundled hook configs to load (from src/plugins/hooks/<name>.json).
67
+ * Each referenced file is a Claude Code hooks JSON ({ hooks: { PreToolUse: [...] } }).
68
+ * Merged into a synthetic plugin at runtime.
69
+ */
70
+ hooks: string[]
71
+ /** Names of bundled skills to load (from src/plugins/skills/<name>/SKILL.md). */
71
72
  skills: string[]
73
+ /** Names of bundled slash commands to load (from src/plugins/commands/<name>.md). */
72
74
  commands: string[]
75
+ /** Names of bundled subagents to load (from src/plugins/agents/<name>.md). */
73
76
  subagents: string[]
77
+ /**
78
+ * External plugin directory paths (absolute, or relative to the profile dir).
79
+ * Loaded as-is by the SDK via { type: 'local', path }.
80
+ */
74
81
  plugins: string[]
75
82
  mcpServers: McpServerSpec[]
76
83
  }
77
84
 
78
- export interface HookEntry {
79
- matcher: string
80
- command: string
81
- }
82
-
83
85
  export interface McpServerSpec {
84
86
  name: string
85
87
  command: string
@@ -1,31 +1,28 @@
1
1
  {
2
2
  "name": "watch-stale-prs",
3
3
  "describe": "Scheduled: list open PRs untouched for N days and report. No agent invocation.",
4
-
5
4
  "kind": "scheduled",
6
5
  "schedule": "0 8 * * MON",
7
-
8
6
  "inputs": [],
9
-
10
7
  "claudeCode": {
11
8
  "model": "inherit",
12
9
  "permissionMode": "default",
13
10
  "maxTurns": null,
14
11
  "systemPromptAppend": null,
15
12
  "tools": [],
16
- "hooks": { "PreToolUse": [], "PostToolUse": [], "Stop": [] },
13
+ "hooks": [],
17
14
  "skills": [],
18
15
  "commands": [],
19
16
  "subagents": [],
20
17
  "plugins": [],
21
18
  "mcpServers": []
22
19
  },
23
-
24
20
  "cliTools": [],
25
-
26
21
  "scripts": {
27
22
  "preflight": [
28
- { "script": "watchStalePrsFlow" }
23
+ {
24
+ "script": "watchStalePrsFlow"
25
+ }
29
26
  ],
30
27
  "postflight": []
31
28
  }
@@ -0,0 +1,9 @@
1
+ ---
2
+ description: Internal Kody2 live-test slash command. Prints a confirmation token proving commands are loaded.
3
+ ---
4
+
5
+ # /kody-live-probe
6
+
7
+ Print the literal token `COMMAND_LOADED_OK` in your next message, followed by the current ISO timestamp on a new line.
8
+
9
+ Do not perform any other action — this command is a no-op confirmation signal for Kody2 infrastructure validation.
@@ -0,0 +1,17 @@
1
+ {
2
+ "$schema": "https://json.schemastore.org/claude-code-settings.json",
3
+ "hooks": {
4
+ "PreToolUse": [
5
+ {
6
+ "matcher": "tool == \"Read\"",
7
+ "hooks": [
8
+ {
9
+ "type": "command",
10
+ "command": "printf 'HOOK_FIRED_OK\\n' >> /tmp/kody-hook-signal.txt"
11
+ }
12
+ ],
13
+ "description": "Kody2 live-test hook — appends HOOK_FIRED_OK to /tmp/kody-hook-signal.txt on every Read tool use, so the agent can verify the hook fired."
14
+ }
15
+ ]
16
+ }
17
+ }
@@ -0,0 +1,18 @@
1
+ ---
2
+ name: kody-live-marker
3
+ description: Internal Kody2 live-test skill. Activates when a prompt mentions "kody-live-marker" and provides a confirmation token.
4
+ ---
5
+
6
+ # kody-live-marker
7
+
8
+ This skill exists only to verify that Kody2's synthetic plugin wiring actually loads skills into the agent's session.
9
+
10
+ ## When to activate
11
+
12
+ When the user's prompt contains the phrase "kody-live-marker" or explicitly asks whether the skill is loaded.
13
+
14
+ ## What to do
15
+
16
+ Include the literal token `SKILL_LOADED_OK` somewhere in your final message. Include the skill's description verbatim: "Internal Kody2 live-test skill."
17
+
18
+ Do not use this skill for anything else. It is a no-op confirmation signal for infrastructure validation.
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "kody2-test-plugin",
3
+ "version": "1.0.0",
4
+ "description": "Kody2 internal live-test plugin. Ships a single skill that proves external-plugin loading works.",
5
+ "skills": ["./skills/"]
6
+ }
@@ -0,0 +1,16 @@
1
+ ---
2
+ name: kody-plugin-marker
3
+ description: Kody2 external-plugin live-test skill. Activates when prompt mentions "kody-plugin-marker" and outputs a confirmation token.
4
+ ---
5
+
6
+ # kody-plugin-marker
7
+
8
+ This skill is bundled inside a standalone plugin directory (not copied into a synthetic plugin). Its purpose is to verify that Kody2's `plugins: string[]` profile field successfully loads an external plugin as-is.
9
+
10
+ ## When to activate
11
+
12
+ When the user's prompt contains the phrase "kody-plugin-marker".
13
+
14
+ ## What to do
15
+
16
+ Include the literal token `PLUGIN_LOADED_OK` somewhere in your final message.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kody-ade/kody-engine",
3
- "version": "0.2.12",
3
+ "version": "0.2.13",
4
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",
@@ -34,7 +34,7 @@
34
34
  "bugs": "https://github.com/aharonyaircohen/kody-engine/issues",
35
35
  "scripts": {
36
36
  "kody2": "tsx bin/kody2.ts",
37
- "build": "tsup && node -e \"const fs=require('fs');fs.rmSync('dist/executables',{recursive:true,force:true});fs.cpSync('src/executables','dist/executables',{recursive:true})\"",
37
+ "build": "tsup && node scripts/copy-assets.cjs",
38
38
  "test": "vitest run tests/unit tests/int --no-coverage",
39
39
  "test:e2e": "vitest run tests/e2e --no-coverage",
40
40
  "test:all": "vitest run tests --no-coverage",