@kody-ade/kody-engine 0.4.161 → 0.4.163

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.
Files changed (2) hide show
  1. package/dist/bin/kody.js +22 -24
  2. package/package.json +1 -1
package/dist/bin/kody.js CHANGED
@@ -1061,7 +1061,7 @@ var init_loadPriorArt = __esm({
1061
1061
  // package.json
1062
1062
  var package_default = {
1063
1063
  name: "@kody-ade/kody-engine",
1064
- version: "0.4.161",
1064
+ version: "0.4.163",
1065
1065
  description: "kody \u2014 autonomous development engine. Single-session Claude Code agent behind a generic executor + declarative executable profiles.",
1066
1066
  license: "MIT",
1067
1067
  type: "module",
@@ -9141,7 +9141,7 @@ function composeAuthBlock(authProfile, login, password) {
9141
9141
  return `Auth: a saved Playwright \`storageState.json\` is available at \`${authProfile}\`. Pass it to the browser via the \`storageState\` parameter so the session starts pre-authenticated.`;
9142
9142
  }
9143
9143
  if (login && password) {
9144
- return `Auth: log in once at the app's login page. Username: \`${login}\` \xB7 Password: \`${password}\`. Re-use the session afterwards.`;
9144
+ return `Auth: log in once at the app's login page. Username: \`${login}\` \xB7 Password: \`${password}\`. Type each field key-by-key (Playwright \`locator.pressSequentially()\` / the MCP \`browser_type\` tool), NOT a one-shot \`fill()\` or value assignment: pasting a value in a single step often fails to fire the login form's framework onChange handler, so the form submits empty and you get a FALSE "invalid email or password". After typing, confirm the field shows the value before clicking submit; if the first attempt is rejected, re-type key-by-key before treating the credentials as wrong. Re-use the session afterwards.`;
9145
9145
  }
9146
9146
  if (login) {
9147
9147
  return `Auth: username \`${login}\` is configured but no \`LOGIN_PASSWORD\` secret was found. Note auth-gated surfaces as gaps.`;
@@ -13474,6 +13474,24 @@ async function runExecutable(profileName, input) {
13474
13474
  }
13475
13475
  }
13476
13476
  }
13477
+ var MAX_CHAIN_HOPS = 60;
13478
+ async function runExecutableChain(profileName, input) {
13479
+ let result = await runExecutable(profileName, input);
13480
+ for (let hops = 1; result.nextDispatch && hops <= MAX_CHAIN_HOPS; hops++) {
13481
+ const next = result.nextDispatch;
13482
+ process.stdout.write(`\u2192 kody: in-process hand-off \u2192 ${next.executable} (hop ${hops}/${MAX_CHAIN_HOPS})
13483
+
13484
+ `);
13485
+ result = await runExecutable(next.executable, { ...input, cliArgs: next.cliArgs });
13486
+ }
13487
+ if (result.nextDispatch) {
13488
+ process.stderr.write(
13489
+ `[kody] in-process hand-off cap (${MAX_CHAIN_HOPS}) reached; not running ${result.nextDispatch.executable}
13490
+ `
13491
+ );
13492
+ }
13493
+ return result;
13494
+ }
13477
13495
  function clearStampedLifecycleLabels(profile, ctx) {
13478
13496
  const target = ctx.args.issue ?? ctx.args.pr;
13479
13497
  if (typeof target !== "number" || !Number.isFinite(target)) return;
@@ -14353,33 +14371,13 @@ ${CI_HELP}`);
14353
14371
  `);
14354
14372
  try {
14355
14373
  const config = earlyConfig ?? loadConfig(cwd);
14356
- let result = await runExecutable(dispatch2.executable, {
14374
+ const result = await runExecutableChain(dispatch2.executable, {
14357
14375
  cliArgs: dispatch2.cliArgs,
14358
14376
  cwd,
14359
14377
  config,
14360
14378
  verbose: args.verbose,
14361
14379
  quiet: args.quiet
14362
14380
  });
14363
- const MAX_CHAIN_HOPS = 60;
14364
- for (let hops = 1; result.nextDispatch && hops <= MAX_CHAIN_HOPS; hops++) {
14365
- const next = result.nextDispatch;
14366
- process.stdout.write(`\u2192 kody: in-process hand-off \u2192 ${next.executable} (hop ${hops}/${MAX_CHAIN_HOPS})
14367
-
14368
- `);
14369
- result = await runExecutable(next.executable, {
14370
- cliArgs: next.cliArgs,
14371
- cwd,
14372
- config,
14373
- verbose: args.verbose,
14374
- quiet: args.quiet
14375
- });
14376
- }
14377
- if (result.nextDispatch) {
14378
- process.stderr.write(
14379
- `[kody] in-process hand-off cap (${MAX_CHAIN_HOPS}) reached; not running ${result.nextDispatch.executable}
14380
- `
14381
- );
14382
- }
14383
14381
  if (result.exitCode !== 0 && result.exitCode !== 1 && result.exitCode !== 2) {
14384
14382
  postFailureTail(issueNumber, cwd, result.reason || `exit ${result.exitCode}`);
14385
14383
  }
@@ -14987,7 +14985,7 @@ ${HELP_TEXT}`);
14987
14985
  const configlessCommands = /* @__PURE__ */ new Set(["init", "goal-scheduler", "brain-serve"]);
14988
14986
  const skipConfig = configlessCommands.has(args.executableName ?? "");
14989
14987
  try {
14990
- const result = await runExecutable(args.executableName, {
14988
+ const result = await runExecutableChain(args.executableName, {
14991
14989
  cliArgs: args.cliArgs ?? {},
14992
14990
  cwd,
14993
14991
  skipConfig,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kody-ade/kody-engine",
3
- "version": "0.4.161",
3
+ "version": "0.4.163",
4
4
  "description": "kody — autonomous development engine. Single-session Claude Code agent behind a generic executor + declarative executable profiles.",
5
5
  "license": "MIT",
6
6
  "type": "module",