@kody-ade/kody-engine 0.4.242 → 0.4.244

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.
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "agent-factory",
3
+ "action": "agent-factory",
4
+ "describe": "Create or assemble Kody agency model definitions from an operator request.",
5
+ "capabilityKind": "act",
6
+ "role": "primitive",
7
+ "kind": "oneshot",
8
+ "inputs": [
9
+ {
10
+ "name": "issue",
11
+ "flag": "--issue",
12
+ "type": "int",
13
+ "required": true,
14
+ "describe": "GitHub issue number containing the operator request."
15
+ }
16
+ ],
17
+ "claudeCode": {
18
+ "model": "inherit",
19
+ "permissionMode": "default",
20
+ "maxTurns": null,
21
+ "maxTurnTimeoutSec": 1200,
22
+ "systemPromptAppend": null,
23
+ "cacheable": true,
24
+ "enableVerifyTool": false,
25
+ "tools": ["Read", "Grep", "Glob"],
26
+ "hooks": [],
27
+ "skills": [],
28
+ "commands": [],
29
+ "subagents": [],
30
+ "plugins": [],
31
+ "mcpServers": []
32
+ },
33
+ "cliTools": [],
34
+ "scripts": {
35
+ "preflight": [
36
+ { "script": "loadIssueContext" },
37
+ { "script": "composePrompt" }
38
+ ],
39
+ "postflight": [
40
+ { "script": "parseAgentResult" },
41
+ { "script": "openAgentFactoryStatePr" }
42
+ ]
43
+ },
44
+ "output": {
45
+ "actionTypes": ["AGENT_FACTORY_COMPLETED", "AGENT_FACTORY_FAILED", "AGENT_NOT_RUN"]
46
+ }
47
+ }
@@ -0,0 +1,62 @@
1
+ You are Kody's agent factory. Convert the operator request into review-ready Kody agency model definitions.
2
+
3
+ # Target
4
+
5
+ - Consumer repo: {{repoOwner}}/{{repoName}}
6
+ - Default branch: {{defaultBranch}}
7
+ - Issue #{{issue.number}}: {{issue.title}}
8
+
9
+ {{agentResponsibilityReference}}
10
+
11
+ # Operator Request
12
+
13
+ {{issue.body}}
14
+
15
+ # Recent comments (most recent first, truncated)
16
+
17
+ {{issue.commentsFormatted}}
18
+
19
+ # Task
20
+
21
+ Design the smallest Kody model structure that satisfies the request. You may create or assemble simple agentActions, agentResponsibilities, loops, goals, and agents.
22
+
23
+ Use the current Kody vocabulary:
24
+
25
+ - agent: who runs
26
+ - agentResponsibility: why/when and public action ownership
27
+ - agentAction: how work runs
28
+ - goal: related task list/state
29
+
30
+ # Boundaries
31
+
32
+ - Do not edit files directly.
33
+ - Do not run `git`, `gh`, shell commands, or any external command.
34
+ - Do not activate generated definitions yourself.
35
+ - Do not create a consumer-repo PR.
36
+ - The deterministic postflight will open a review PR in the configured state repo under the configured state path.
37
+ - Put generated file paths relative to the consumer repo, usually under `.kody/...`.
38
+ - Produce complete file contents. Do not describe patches.
39
+ - Prefer a small bundle over a broad framework. Include assumptions in the summary.
40
+
41
+ # Final Output Contract
42
+
43
+ If the request is too ambiguous to produce review-ready definitions, output one line:
44
+
45
+ FAILED: <specific missing decision>
46
+
47
+ Otherwise output exactly:
48
+
49
+ DONE
50
+ PR_SUMMARY:
51
+ {
52
+ "title": "short title",
53
+ "summary": "human explanation and assumptions",
54
+ "files": [
55
+ {
56
+ "path": ".kody/agent-actions/example/profile.json",
57
+ "content": "{\n \"name\": \"example\"\n}\n"
58
+ }
59
+ ]
60
+ }
61
+
62
+ The `PR_SUMMARY` value must be valid JSON. Do not wrap it in a markdown code fence.
@@ -0,0 +1,10 @@
1
+ # Agent Factory
2
+
3
+ ## Purpose
4
+
5
+ Create or assemble Kody agency model definitions from an operator request.
6
+
7
+ ## Instructions
8
+
9
+ Use the `agent-factory` agentAction for the implementation details.
10
+ The agentResponsibility owns the public action name and review boundary; the agentAction owns model reasoning and state-repo PR creation.
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "agent-factory",
3
+ "action": "agent-factory",
4
+ "agentAction": "agent-factory",
5
+ "capabilityKind": "act",
6
+ "describe": "Create or assemble Kody agency model definitions from an operator request."
7
+ }
package/dist/bin/kody.js CHANGED
@@ -15,7 +15,7 @@ var init_package = __esm({
15
15
  "package.json"() {
16
16
  package_default = {
17
17
  name: "@kody-ade/kody-engine",
18
- version: "0.4.242",
18
+ version: "0.4.244",
19
19
  description: "kody \u2014 autonomous development engine. Single-session Claude Code agent behind a generic executor + declarative agentAction profiles.",
20
20
  license: "MIT",
21
21
  type: "module",
@@ -2406,6 +2406,7 @@ function parseAgentResponsibilityConfig(raw) {
2406
2406
  mentions: stringList(raw.mentions).map((m) => m.replace(/^@/, "")),
2407
2407
  tools,
2408
2408
  agentActions: stringList(raw.agentActions),
2409
+ capabilityKind: capabilityKindField(raw.capabilityKind),
2409
2410
  describe: stringField(raw.describe),
2410
2411
  stage: stringField(raw.stage),
2411
2412
  readsFrom: stringList(raw.readsFrom ?? raw.reads_from),
@@ -2445,6 +2446,10 @@ function stringList(value) {
2445
2446
  }
2446
2447
  return [];
2447
2448
  }
2449
+ function capabilityKindField(value) {
2450
+ if (value === "observe" || value === "act" || value === "verify") return value;
2451
+ return void 0;
2452
+ }
2448
2453
  var AGENT_RESPONSIBILITY_PROFILE_FILE, AGENT_RESPONSIBILITY_BODY_FILE;
2449
2454
  var init_agent_responsibilityFolders = __esm({
2450
2455
  "src/agent-responsibilityFolders.ts"() {
@@ -2750,6 +2755,7 @@ function listFolderAgentResponsibilityActions(root, source) {
2750
2755
  cliArgs,
2751
2756
  source,
2752
2757
  describe: agentResponsibility.config.describe ?? agentResponsibility.title,
2758
+ capabilityKind: agentResponsibility.config.capabilityKind,
2753
2759
  profilePath: agentResponsibility.profilePath,
2754
2760
  bodyPath: agentResponsibility.bodyPath
2755
2761
  });
@@ -2772,6 +2778,7 @@ function listBuiltinAgentResponsibilityActions(root = getBuiltinAgentResponsibil
2772
2778
  cliArgs: {},
2773
2779
  source: "builtin",
2774
2780
  describe: agentResponsibility.config.describe ?? agentResponsibility.title,
2781
+ capabilityKind: agentResponsibility.config.capabilityKind,
2775
2782
  profilePath: agentResponsibility.profilePath,
2776
2783
  bodyPath: agentResponsibility.bodyPath
2777
2784
  });
@@ -11265,6 +11272,220 @@ var init_notifyTerminal = __esm({
11265
11272
  }
11266
11273
  });
11267
11274
 
11275
+ // src/scripts/openAgentFactoryStatePr.ts
11276
+ function parseAgentFactoryBundle(raw) {
11277
+ const jsonText = stripJsonFence(raw);
11278
+ let parsed;
11279
+ try {
11280
+ parsed = JSON.parse(jsonText);
11281
+ } catch (err) {
11282
+ throw new Error(`openAgentFactoryStatePr: PR_SUMMARY must be valid JSON: ${err instanceof Error ? err.message : String(err)}`);
11283
+ }
11284
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
11285
+ throw new Error("openAgentFactoryStatePr: PR_SUMMARY must be a JSON object");
11286
+ }
11287
+ const value = parsed;
11288
+ const title = readRequiredJsonString(value.title, "title");
11289
+ const summary = readRequiredJsonString(value.summary, "summary");
11290
+ if (!Array.isArray(value.files) || value.files.length === 0) {
11291
+ throw new Error("openAgentFactoryStatePr: files must be a non-empty array");
11292
+ }
11293
+ const files = value.files.map((item, index) => {
11294
+ if (!item || typeof item !== "object" || Array.isArray(item)) {
11295
+ throw new Error(`openAgentFactoryStatePr: files[${index}] must be an object`);
11296
+ }
11297
+ const file = item;
11298
+ return {
11299
+ path: readRequiredJsonString(file.path, `files[${index}].path`),
11300
+ content: readJsonString(file.content, `files[${index}].content`)
11301
+ };
11302
+ });
11303
+ return { title, summary, files };
11304
+ }
11305
+ function buildAgentFactoryBranchName(issueNumber, title, now = Date.now()) {
11306
+ const slug = title.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "").slice(0, 48).replace(/-+$/g, "");
11307
+ const suffix = slug ? `-${slug}` : "";
11308
+ return `agent-factory/issue-${issueNumber}-${now.toString(36)}${suffix}`;
11309
+ }
11310
+ function normalizeBundleFiles(ctx, bundle) {
11311
+ const seen = /* @__PURE__ */ new Set();
11312
+ return bundle.files.map((file, index) => {
11313
+ if (file.path.startsWith("/") || file.path.includes("\\")) {
11314
+ throw new Error(`openAgentFactoryStatePr: files[${index}].path must be a relative POSIX path`);
11315
+ }
11316
+ const relativePath = normalizeStatePath(file.path, `files[${index}].path`);
11317
+ if (seen.has(relativePath)) {
11318
+ throw new Error(`openAgentFactoryStatePr: duplicate generated file path: ${relativePath}`);
11319
+ }
11320
+ seen.add(relativePath);
11321
+ return {
11322
+ ...file,
11323
+ path: relativePath,
11324
+ targetPath: stateRepoPath(ctx.config, relativePath)
11325
+ };
11326
+ });
11327
+ }
11328
+ function stripJsonFence(raw) {
11329
+ const text = raw.trim();
11330
+ const fence = text.match(/^```(?:json)?\s*\n([\s\S]*?)\n```$/i);
11331
+ return (fence ? fence[1] : text).trim();
11332
+ }
11333
+ function readIssueNumber(ctx) {
11334
+ const issueNumber = ctx.args.issue;
11335
+ if (typeof issueNumber !== "number" || !Number.isInteger(issueNumber) || issueNumber <= 0) {
11336
+ throw new Error("openAgentFactoryStatePr: ctx.args.issue must be a positive integer");
11337
+ }
11338
+ return issueNumber;
11339
+ }
11340
+ function readRequiredJsonString(value, field) {
11341
+ const text = readJsonString(value, field).trim();
11342
+ if (!text) throw new Error(`openAgentFactoryStatePr: ${field} must be a non-empty string`);
11343
+ return text;
11344
+ }
11345
+ function readJsonString(value, field) {
11346
+ if (typeof value !== "string") throw new Error(`openAgentFactoryStatePr: ${field} must be a string`);
11347
+ return value;
11348
+ }
11349
+ function requireString2(value, label) {
11350
+ if (typeof value !== "string" || value.trim().length === 0) {
11351
+ throw new Error(`openAgentFactoryStatePr: missing ${label}`);
11352
+ }
11353
+ return value;
11354
+ }
11355
+ function ghJson(args, cwd, input) {
11356
+ const raw = gh(args, input === void 0 ? { cwd } : { cwd, input: JSON.stringify(input) });
11357
+ if (!raw) return {};
11358
+ try {
11359
+ return JSON.parse(raw);
11360
+ } catch (err) {
11361
+ throw new Error(`openAgentFactoryStatePr: gh api returned invalid JSON: ${err instanceof Error ? err.message : String(err)}`);
11362
+ }
11363
+ }
11364
+ function renderPullRequestBody(ctx, bundle, files) {
11365
+ const issueNumber = readIssueNumber(ctx);
11366
+ return [
11367
+ "Agent factory generated a Kody agency model bundle for review.",
11368
+ "",
11369
+ `Source issue: ${ctx.config.github.owner}/${ctx.config.github.repo}#${issueNumber}`,
11370
+ "",
11371
+ "## Summary",
11372
+ "",
11373
+ bundle.summary,
11374
+ "",
11375
+ "## Files",
11376
+ "",
11377
+ ...files.map((file) => `- \`${file.targetPath}\``),
11378
+ "",
11379
+ "Generated definitions are inactive until this state-repo PR is reviewed and merged."
11380
+ ].join("\n");
11381
+ }
11382
+ function renderIssueComment(owner, repo, prUrl, bundle) {
11383
+ return [
11384
+ `agent-factory opened a state-repo review PR: ${prUrl}`,
11385
+ "",
11386
+ `State repo: ${owner}/${repo}`,
11387
+ "",
11388
+ "Summary:",
11389
+ bundle.summary
11390
+ ].join("\n");
11391
+ }
11392
+ var openAgentFactoryStatePr;
11393
+ var init_openAgentFactoryStatePr = __esm({
11394
+ "src/scripts/openAgentFactoryStatePr.ts"() {
11395
+ "use strict";
11396
+ init_issue();
11397
+ init_stateRepo();
11398
+ openAgentFactoryStatePr = async (ctx, _profile, agentResult) => {
11399
+ if (agentResult?.outcome !== "completed") {
11400
+ throw new Error(`openAgentFactoryStatePr: agent did not complete: ${agentResult?.error ?? "unknown failure"}`);
11401
+ }
11402
+ if (ctx.data.agentDone !== true) {
11403
+ throw new Error("openAgentFactoryStatePr: agent did not produce a successful final result");
11404
+ }
11405
+ if (!ctx.config.state?.repo || !ctx.config.state?.path) {
11406
+ throw new Error("openAgentFactoryStatePr: config.state.repo and config.state.path are required");
11407
+ }
11408
+ const issueNumber = readIssueNumber(ctx);
11409
+ const bundle = parseAgentFactoryBundle(String(ctx.data.prSummary ?? ""));
11410
+ const normalizedFiles = normalizeBundleFiles(ctx, bundle);
11411
+ const stateRepo = parseStateRepo(ctx.config);
11412
+ const baseBranch = "main";
11413
+ const branch = buildAgentFactoryBranchName(issueNumber, bundle.title);
11414
+ const baseRef = ghJson(["api", `/repos/${stateRepo.owner}/${stateRepo.repo}/git/ref/heads/${baseBranch}`], ctx.cwd);
11415
+ const baseSha = requireString2(baseRef.object?.sha, `state repo ${stateRepo.owner}/${stateRepo.repo} ${baseBranch} ref sha`);
11416
+ const baseCommit = ghJson(
11417
+ ["api", `/repos/${stateRepo.owner}/${stateRepo.repo}/git/commits/${baseSha}`],
11418
+ ctx.cwd
11419
+ );
11420
+ const baseTreeSha = requireString2(baseCommit.tree?.sha, `state repo ${stateRepo.owner}/${stateRepo.repo} base tree sha`);
11421
+ ghJson(
11422
+ ["api", "--method", "POST", `/repos/${stateRepo.owner}/${stateRepo.repo}/git/refs`, "--input", "-"],
11423
+ ctx.cwd,
11424
+ {
11425
+ ref: `refs/heads/${branch}`,
11426
+ sha: baseSha
11427
+ }
11428
+ );
11429
+ const tree = ghJson(
11430
+ ["api", "--method", "POST", `/repos/${stateRepo.owner}/${stateRepo.repo}/git/trees`, "--input", "-"],
11431
+ ctx.cwd,
11432
+ {
11433
+ base_tree: baseTreeSha,
11434
+ tree: normalizedFiles.map((file) => ({
11435
+ path: file.targetPath,
11436
+ mode: "100644",
11437
+ type: "blob",
11438
+ content: file.content
11439
+ }))
11440
+ }
11441
+ );
11442
+ const treeSha = requireString2(tree.sha, "created tree sha");
11443
+ const commit = ghJson(
11444
+ ["api", "--method", "POST", `/repos/${stateRepo.owner}/${stateRepo.repo}/git/commits`, "--input", "-"],
11445
+ ctx.cwd,
11446
+ {
11447
+ message: `agent-factory: ${bundle.title}`,
11448
+ tree: treeSha,
11449
+ parents: [baseSha]
11450
+ }
11451
+ );
11452
+ const commitSha = requireString2(commit.sha, "created commit sha");
11453
+ ghJson(
11454
+ ["api", "--method", "PATCH", `/repos/${stateRepo.owner}/${stateRepo.repo}/git/refs/heads/${branch}`, "--input", "-"],
11455
+ ctx.cwd,
11456
+ {
11457
+ sha: commitSha,
11458
+ force: false
11459
+ }
11460
+ );
11461
+ const pr = ghJson(
11462
+ ["api", "--method", "POST", `/repos/${stateRepo.owner}/${stateRepo.repo}/pulls`, "--input", "-"],
11463
+ ctx.cwd,
11464
+ {
11465
+ title: `agent-factory: ${bundle.title}`,
11466
+ head: branch,
11467
+ base: baseBranch,
11468
+ body: renderPullRequestBody(ctx, bundle, normalizedFiles)
11469
+ }
11470
+ );
11471
+ const prUrl = requireString2(pr.html_url, "created pull request url");
11472
+ gh(["issue", "comment", String(issueNumber), "--body-file", "-"], {
11473
+ cwd: ctx.cwd,
11474
+ input: renderIssueComment(stateRepo.owner, stateRepo.repo, prUrl, bundle)
11475
+ });
11476
+ ctx.data.agentFactoryStatePr = {
11477
+ repo: `${stateRepo.owner}/${stateRepo.repo}`,
11478
+ branch,
11479
+ base: baseBranch,
11480
+ url: prUrl,
11481
+ number: pr.number,
11482
+ files: normalizedFiles.map((file) => file.targetPath)
11483
+ };
11484
+ ctx.output.prUrl = prUrl;
11485
+ };
11486
+ }
11487
+ });
11488
+
11268
11489
  // src/scripts/openQaIssue.ts
11269
11490
  function qaAction2(verdict, payload) {
11270
11491
  const type = verdict === "PASS" ? "QA_PASS" : verdict === "CONCERNS" ? "QA_CONCERNS" : verdict === "FAIL" ? "QA_FAIL" : "QA_COMPLETED";
@@ -14407,6 +14628,7 @@ var init_scripts = __esm({
14407
14628
  init_mergeReleasePr();
14408
14629
  init_mirrorStateToPr();
14409
14630
  init_notifyTerminal();
14631
+ init_openAgentFactoryStatePr();
14410
14632
  init_openQaIssue();
14411
14633
  init_parseAgentResult();
14412
14634
  init_parseIssueStateFromAgentResult();
@@ -14536,6 +14758,7 @@ var init_scripts = __esm({
14536
14758
  recordClassification,
14537
14759
  dispatchClassified,
14538
14760
  notifyTerminal,
14761
+ openAgentFactoryStatePr,
14539
14762
  openQaIssue,
14540
14763
  createQaGoal,
14541
14764
  failOnceTaskJob,
@@ -15419,7 +15642,8 @@ var init_executor = __esm({
15419
15642
  MUTATING_POSTFLIGHTS = /* @__PURE__ */ new Set([
15420
15643
  "commitAndPush",
15421
15644
  "ensurePr",
15422
- "applyAgentResponsibilityReports"
15645
+ "applyAgentResponsibilityReports",
15646
+ "openAgentFactoryStatePr"
15423
15647
  ]);
15424
15648
  MAX_CHAIN_HOPS = 60;
15425
15649
  DEFAULT_SHELL_TIMEOUT_MS = 3e5;
@@ -16798,6 +17022,18 @@ function unpackAllSecrets(env = process.env) {
16798
17022
  return count;
16799
17023
  }
16800
17024
  async function resolveAuthToken(env = process.env) {
17025
+ const creds = readAppCreds(env);
17026
+ if (creds) {
17027
+ try {
17028
+ const minted = await mintAppInstallationToken(creds);
17029
+ env.GH_TOKEN = minted;
17030
+ process.stdout.write("\u2192 kody: GH_TOKEN minted from GitHub App (KODY_APP_ID/KODY_APP_PRIVATE_KEY)\n");
17031
+ return minted;
17032
+ } catch (err) {
17033
+ process.stdout.write(`\u2192 kody: WARNING GitHub App token mint failed: ${err.message}
17034
+ `);
17035
+ }
17036
+ }
16801
17037
  const sources = [
16802
17038
  ["KODY_TOKEN", env.KODY_TOKEN],
16803
17039
  ["GH_TOKEN", env.GH_TOKEN],
@@ -16812,18 +17048,6 @@ async function resolveAuthToken(env = process.env) {
16812
17048
  `);
16813
17049
  return token;
16814
17050
  }
16815
- const creds = readAppCreds(env);
16816
- if (creds) {
16817
- try {
16818
- const minted = await mintAppInstallationToken(creds);
16819
- env.GH_TOKEN = minted;
16820
- process.stdout.write("\u2192 kody: GH_TOKEN minted from GitHub App (KODY_APP_ID/KODY_APP_PRIVATE_KEY)\n");
16821
- return minted;
16822
- } catch (err) {
16823
- process.stdout.write(`\u2192 kody: WARNING GitHub App token mint failed: ${err.message}
16824
- `);
16825
- }
16826
- }
16827
17051
  process.stdout.write(
16828
17052
  "\u2192 kody: WARNING no auth token found (KODY_TOKEN/GH_TOKEN/GITHUB_TOKEN/GH_PAT/GitHub App all empty)\n"
16829
17053
  );
@@ -53,6 +53,22 @@
53
53
  "repo": { "type": "string" }
54
54
  }
55
55
  },
56
+ "state": {
57
+ "type": "object",
58
+ "description": "External repository and path used for Kody runtime state.",
59
+ "additionalProperties": false,
60
+ "properties": {
61
+ "repo": {
62
+ "type": "string",
63
+ "description": "Full GitHub repository URL for Kody runtime state.",
64
+ "pattern": "^https://github\\.com/[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+(?:\\.git)?$"
65
+ },
66
+ "path": {
67
+ "type": "string",
68
+ "description": "Folder inside state.repo that belongs to this consumer repo."
69
+ }
70
+ }
71
+ },
56
72
  "agent": {
57
73
  "type": "object",
58
74
  "required": ["model"],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kody-ade/kody-engine",
3
- "version": "0.4.242",
3
+ "version": "0.4.244",
4
4
  "description": "kody — autonomous development engine. Single-session Claude Code agent behind a generic executor + declarative agentAction profiles.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -12,6 +12,26 @@
12
12
  "templates",
13
13
  "kody.config.schema.json"
14
14
  ],
15
+ "scripts": {
16
+ "kody:run": "tsx bin/kody.ts",
17
+ "serve": "tsx bin/kody.ts serve",
18
+ "serve:vscode": "tsx bin/kody.ts serve vscode",
19
+ "serve:claude": "tsx bin/kody.ts serve claude",
20
+ "build": "tsup && node scripts/copy-assets.cjs",
21
+ "check:modularity": "tsx scripts/check-script-modularity.ts",
22
+ "pretest": "pnpm check:modularity",
23
+ "test": "vitest run tests/unit tests/int --coverage",
24
+ "posttest": "tsx scripts/check-coverage-floor.ts",
25
+ "test:smoke": "vitest run tests/smoke --no-coverage",
26
+ "test:e2e": "vitest run tests/e2e --no-coverage",
27
+ "test:all": "vitest run tests --no-coverage",
28
+ "typecheck": "tsc --noEmit",
29
+ "lint": "biome check",
30
+ "lint:fix": "biome check --write",
31
+ "format": "biome format --write",
32
+ "brain:publish": "docker buildx build --platform linux/amd64 -f runner/Dockerfile.brain -t ghcr.io/${KODY_BRAIN_GHCR_OWNER:-aharonyaircohen}/kody-brain:latest --push runner",
33
+ "prepublishOnly": "pnpm typecheck && vitest run tests/unit tests/int --no-coverage && pnpm build"
34
+ },
15
35
  "dependencies": {
16
36
  "@actions/cache": "^6.0.0",
17
37
  "@anthropic-ai/claude-agent-sdk": "0.2.119",
@@ -35,24 +55,5 @@
35
55
  "url": "git+https://github.com/aharonyaircohen/kody-engine.git"
36
56
  },
37
57
  "homepage": "https://github.com/aharonyaircohen/kody-engine",
38
- "bugs": "https://github.com/aharonyaircohen/kody-engine/issues",
39
- "scripts": {
40
- "kody:run": "tsx bin/kody.ts",
41
- "serve": "tsx bin/kody.ts serve",
42
- "serve:vscode": "tsx bin/kody.ts serve vscode",
43
- "serve:claude": "tsx bin/kody.ts serve claude",
44
- "build": "tsup && node scripts/copy-assets.cjs",
45
- "check:modularity": "tsx scripts/check-script-modularity.ts",
46
- "pretest": "pnpm check:modularity",
47
- "test": "vitest run tests/unit tests/int --coverage",
48
- "posttest": "tsx scripts/check-coverage-floor.ts",
49
- "test:smoke": "vitest run tests/smoke --no-coverage",
50
- "test:e2e": "vitest run tests/e2e --no-coverage",
51
- "test:all": "vitest run tests --no-coverage",
52
- "typecheck": "tsc --noEmit",
53
- "lint": "biome check",
54
- "lint:fix": "biome check --write",
55
- "format": "biome format --write",
56
- "brain:publish": "docker buildx build --platform linux/amd64 -f runner/Dockerfile.brain -t ghcr.io/${KODY_BRAIN_GHCR_OWNER:-aharonyaircohen}/kody-brain:latest --push runner"
57
- }
58
- }
58
+ "bugs": "https://github.com/aharonyaircohen/kody-engine/issues"
59
+ }