@kody-ade/kody-engine 0.4.650 → 0.4.651
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/bin/kody.js +24 -16
- package/package.json +1 -1
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.
|
|
18
|
+
version: "0.4.651",
|
|
19
19
|
description: "kody \u2014 autonomous development engine. Single-session Claude Code agent behind a generic executor + declarative implementation profiles.",
|
|
20
20
|
license: "MIT",
|
|
21
21
|
repository: {
|
|
@@ -24969,8 +24969,7 @@ async function runJob(job, base) {
|
|
|
24969
24969
|
});
|
|
24970
24970
|
}
|
|
24971
24971
|
if (valid.workflowRunId && workflowIdentity && base.config && result.workflowState) {
|
|
24972
|
-
await
|
|
24973
|
-
await writeWorkflowRunState(base.config, base.cwd, workflowIdentity, valid.workflowRunId, result.workflowState);
|
|
24972
|
+
await checkpointTerminalWorkflowState(checkpoint, result.workflowState);
|
|
24974
24973
|
}
|
|
24975
24974
|
if (valid.workflowRunId && workflowIdentity && hasGitHubActionsIdentity() && result.workflowState?.status !== "waiting-approval") {
|
|
24976
24975
|
const facts = result.workflowState?.facts ?? {};
|
|
@@ -25122,7 +25121,7 @@ async function runCapabilityWorkflow(parent, workflow, capability, base, checkpo
|
|
|
25122
25121
|
const state = initialWorkflowState(parent, workflow);
|
|
25123
25122
|
state.status = "blocked";
|
|
25124
25123
|
state.blocker = invalid;
|
|
25125
|
-
await checkpoint
|
|
25124
|
+
await checkpointTerminalWorkflowState(checkpoint, state);
|
|
25126
25125
|
return { exitCode: 64, reason: invalid, workflowState: state };
|
|
25127
25126
|
}
|
|
25128
25127
|
return { exitCode: 64, reason: invalid };
|
|
@@ -25132,7 +25131,7 @@ async function runCapabilityWorkflow(parent, workflow, capability, base, checkpo
|
|
|
25132
25131
|
const state = initialWorkflowState(parent, workflow);
|
|
25133
25132
|
state.status = "blocked";
|
|
25134
25133
|
state.blocker = resumeBlocker;
|
|
25135
|
-
await checkpoint
|
|
25134
|
+
await checkpointTerminalWorkflowState(checkpoint, state);
|
|
25136
25135
|
return { exitCode: 64, reason: resumeBlocker, workflowState: state };
|
|
25137
25136
|
}
|
|
25138
25137
|
const result = isGraphWorkflow(workflow) ? await runGraphCapabilityWorkflow(parent, workflow, capability, base, checkpoint) : await runLinearCapabilityWorkflow(parent, workflow, capability, base, checkpoint);
|
|
@@ -25226,7 +25225,7 @@ async function runLinearCapabilityWorkflow(parent, workflow, capability, base, c
|
|
|
25226
25225
|
if (result.exitCode !== 0 && !canContinueWorkflow(step, outcome)) {
|
|
25227
25226
|
state.status = result.capabilityResults?.at(-1)?.status === "blocked" ? "blocked" : "failed";
|
|
25228
25227
|
state.blocker = result.reason ?? `workflow ${capability.slug} stopped at step ${index + 1}/${workflow.steps.length}: ${label}`;
|
|
25229
|
-
await checkpoint
|
|
25228
|
+
await checkpointTerminalWorkflowState(checkpoint, state);
|
|
25230
25229
|
return withWorkflowBoundaryEval(capability, {
|
|
25231
25230
|
...result,
|
|
25232
25231
|
reason: state.blocker,
|
|
@@ -25236,7 +25235,7 @@ async function runLinearCapabilityWorkflow(parent, workflow, capability, base, c
|
|
|
25236
25235
|
}
|
|
25237
25236
|
state.status = "done";
|
|
25238
25237
|
delete state.blocker;
|
|
25239
|
-
await checkpoint
|
|
25238
|
+
await checkpointTerminalWorkflowState(checkpoint, state);
|
|
25240
25239
|
return withWorkflowBoundaryEval(capability, { ...result, workflowState: state });
|
|
25241
25240
|
}
|
|
25242
25241
|
function isGraphWorkflow(workflow) {
|
|
@@ -25335,7 +25334,7 @@ async function runGraphCapabilityWorkflow(parent, workflow, capability, base, ch
|
|
|
25335
25334
|
const reason = `workflow ${capability.slug} exceeded ${maxExecutedSteps} executed steps`;
|
|
25336
25335
|
state.status = "blocked";
|
|
25337
25336
|
state.blocker = reason;
|
|
25338
|
-
await checkpoint
|
|
25337
|
+
await checkpointTerminalWorkflowState(checkpoint, state);
|
|
25339
25338
|
return { ...result, exitCode: 64, reason, workflowState: state };
|
|
25340
25339
|
}
|
|
25341
25340
|
const index = workflow.steps.findIndex((step2) => step2.id === state.currentStepId);
|
|
@@ -25344,7 +25343,7 @@ async function runGraphCapabilityWorkflow(parent, workflow, capability, base, ch
|
|
|
25344
25343
|
const reason = `workflow ${capability.slug} current step ${state.currentStepId} is missing`;
|
|
25345
25344
|
state.status = "blocked";
|
|
25346
25345
|
state.blocker = reason;
|
|
25347
|
-
await checkpoint
|
|
25346
|
+
await checkpointTerminalWorkflowState(checkpoint, state);
|
|
25348
25347
|
return { ...result, exitCode: 64, reason, workflowState: state };
|
|
25349
25348
|
}
|
|
25350
25349
|
const label = step.action ?? step.capability;
|
|
@@ -25377,7 +25376,7 @@ async function runGraphCapabilityWorkflow(parent, workflow, capability, base, ch
|
|
|
25377
25376
|
output: { status: "blocked", summary: reason },
|
|
25378
25377
|
completedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
25379
25378
|
};
|
|
25380
|
-
await checkpoint
|
|
25379
|
+
await checkpointTerminalWorkflowState(checkpoint, state);
|
|
25381
25380
|
return { exitCode: 64, reason, workflowState: state };
|
|
25382
25381
|
}
|
|
25383
25382
|
beginWorkflowStep(state, step, child);
|
|
@@ -25438,7 +25437,7 @@ async function runGraphCapabilityWorkflow(parent, workflow, capability, base, ch
|
|
|
25438
25437
|
const lastResult = result.capabilityResults?.at(-1);
|
|
25439
25438
|
state.status = lastResult?.status === "blocked" ? "blocked" : "failed";
|
|
25440
25439
|
state.blocker = result.reason ?? `workflow step ${step.id} failed`;
|
|
25441
|
-
await checkpoint
|
|
25440
|
+
await checkpointTerminalWorkflowState(checkpoint, state);
|
|
25442
25441
|
return withWorkflowBoundaryEval(capability, { ...result, workflowState: state });
|
|
25443
25442
|
}
|
|
25444
25443
|
if (!step.next || step.next.length === 0) {
|
|
@@ -25449,7 +25448,7 @@ async function runGraphCapabilityWorkflow(parent, workflow, capability, base, ch
|
|
|
25449
25448
|
const reason = `workflow step ${step.id} did not emit the structured result required by its conditions: ${resultConditionPaths.join(", ")}`;
|
|
25450
25449
|
state.status = "blocked";
|
|
25451
25450
|
state.blocker = reason;
|
|
25452
|
-
await checkpoint
|
|
25451
|
+
await checkpointTerminalWorkflowState(checkpoint, state);
|
|
25453
25452
|
return { ...result, exitCode: 64, reason, workflowState: state };
|
|
25454
25453
|
}
|
|
25455
25454
|
const transition = selectWorkflowTransition(step, chainData, state.transitionCounts);
|
|
@@ -25458,7 +25457,7 @@ async function runGraphCapabilityWorkflow(parent, workflow, capability, base, ch
|
|
|
25458
25457
|
const reason = exhausted.length > 0 ? `workflow step ${step.id} reached iteration limit: ${exhausted.join(", ")}` : `workflow step ${step.id} has no available connection`;
|
|
25459
25458
|
state.status = "blocked";
|
|
25460
25459
|
state.blocker = reason;
|
|
25461
|
-
await checkpoint
|
|
25460
|
+
await checkpointTerminalWorkflowState(checkpoint, state);
|
|
25462
25461
|
return { ...result, exitCode: 64, reason, workflowState: state };
|
|
25463
25462
|
}
|
|
25464
25463
|
if (transition.maxIterations !== void 0) {
|
|
@@ -25474,7 +25473,7 @@ async function runGraphCapabilityWorkflow(parent, workflow, capability, base, ch
|
|
|
25474
25473
|
await checkpoint?.(state);
|
|
25475
25474
|
}
|
|
25476
25475
|
state.status = "done";
|
|
25477
|
-
await checkpoint
|
|
25476
|
+
await checkpointTerminalWorkflowState(checkpoint, state);
|
|
25478
25477
|
return withWorkflowBoundaryEval(capability, { ...result, workflowState: state });
|
|
25479
25478
|
}
|
|
25480
25479
|
async function completeWorkflowAtTerminal(capability, state, output, checkpoint) {
|
|
@@ -25485,7 +25484,7 @@ async function completeWorkflowAtTerminal(capability, state, output, checkpoint)
|
|
|
25485
25484
|
const summary = result?.summary ?? (typeof output.capabilityOutput?.summary === "string" ? output.capabilityOutput.summary : "Workflow ended without a usable result");
|
|
25486
25485
|
state.status = terminalFailure;
|
|
25487
25486
|
state.blocker = summary;
|
|
25488
|
-
await checkpoint
|
|
25487
|
+
await checkpointTerminalWorkflowState(checkpoint, state);
|
|
25489
25488
|
return withWorkflowBoundaryEval(capability, {
|
|
25490
25489
|
...output,
|
|
25491
25490
|
exitCode: terminalFailure === "failed" ? 1 : 64,
|
|
@@ -25496,9 +25495,18 @@ async function completeWorkflowAtTerminal(capability, state, output, checkpoint)
|
|
|
25496
25495
|
state.status = "done";
|
|
25497
25496
|
delete state.currentStepId;
|
|
25498
25497
|
delete state.blocker;
|
|
25499
|
-
await checkpoint
|
|
25498
|
+
await checkpointTerminalWorkflowState(checkpoint, state);
|
|
25500
25499
|
return withWorkflowBoundaryEval(capability, { ...output, workflowState: state });
|
|
25501
25500
|
}
|
|
25501
|
+
async function checkpointTerminalWorkflowState(checkpoint, state) {
|
|
25502
|
+
if (!checkpoint) return;
|
|
25503
|
+
try {
|
|
25504
|
+
await checkpoint(state);
|
|
25505
|
+
} catch (error) {
|
|
25506
|
+
process.stderr.write(`warning: failed to save terminal Workflow state: ${String(error)}
|
|
25507
|
+
`);
|
|
25508
|
+
}
|
|
25509
|
+
}
|
|
25502
25510
|
function graphWorkflowExecutionKey(parentExecutionKey, workflowSlug, stepId, transitionCounts) {
|
|
25503
25511
|
const transitionHistory = Object.entries(transitionCounts).filter(([, count]) => count > 0).sort(([left], [right]) => left.localeCompare(right)).map(([transition, count]) => `${transition}=${count}`).join(",");
|
|
25504
25512
|
return [
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kody-ade/kody-engine",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.651",
|
|
4
4
|
"description": "kody — autonomous development engine. Single-session Claude Code agent behind a generic executor + declarative implementation profiles.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|