codeharness 0.32.2 → 0.32.3

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.
@@ -2895,7 +2895,7 @@ function generateDockerfileTemplate(projectDir, stackOrDetections) {
2895
2895
  }
2896
2896
 
2897
2897
  // src/modules/infra/init-project.ts
2898
- var HARNESS_VERSION = true ? "0.32.2" : "0.0.0-dev";
2898
+ var HARNESS_VERSION = true ? "0.32.3" : "0.0.0-dev";
2899
2899
  function failResult(opts, error) {
2900
2900
  return {
2901
2901
  status: "fail",
@@ -16,7 +16,7 @@ import {
16
16
  stopCollectorOnly,
17
17
  stopSharedStack,
18
18
  stopStack
19
- } from "./chunk-IICSAAF4.js";
19
+ } from "./chunk-N57BYUXA.js";
20
20
  export {
21
21
  checkRemoteEndpoint,
22
22
  cleanupOrphanedContainers,
package/dist/index.js CHANGED
@@ -40,7 +40,7 @@ import {
40
40
  validateDockerfile,
41
41
  warn,
42
42
  writeState
43
- } from "./chunk-IICSAAF4.js";
43
+ } from "./chunk-N57BYUXA.js";
44
44
 
45
45
  // src/index.ts
46
46
  import { Command } from "commander";
@@ -3878,7 +3878,7 @@ async function executeWorkflow(config) {
3878
3878
  }
3879
3879
  if (state.phase === "error" || state.phase === "failed") {
3880
3880
  const errorCount = state.tasks_completed.filter((t) => t.error).length;
3881
- info(`Resuming from ${state.phase} state \u2014 ${errorCount} previous error(s), retrying failed tasks`);
3881
+ if (!config.onEvent) info(`Resuming from ${state.phase} state \u2014 ${errorCount} previous error(s), retrying failed tasks`);
3882
3882
  }
3883
3883
  state = {
3884
3884
  ...state,
@@ -3929,13 +3929,17 @@ async function executeWorkflow(config) {
3929
3929
  for (const [epicId, epicItems] of epicGroups) {
3930
3930
  if (halted) break;
3931
3931
  if (config.abortSignal?.aborted) {
3932
- info("Execution interrupted \u2014 saving state");
3932
+ if (!config.onEvent) info("Execution interrupted \u2014 saving state");
3933
3933
  state = { ...state, phase: "interrupted" };
3934
3934
  writeWorkflowState(state, projectDir);
3935
3935
  halted = true;
3936
3936
  break;
3937
3937
  }
3938
- info(`[epic-${epicId}] Starting epic with ${epicItems.length} stories`);
3938
+ if (config.onEvent) {
3939
+ config.onEvent({ type: "dispatch-start", taskName: "story_flow", storyKey: `__epic_${epicId}__` });
3940
+ } else {
3941
+ info(`[epic-${epicId}] Starting epic with ${epicItems.length} stories`);
3942
+ }
3939
3943
  for (const step of config.workflow.epicFlow) {
3940
3944
  if (halted) break;
3941
3945
  if (config.abortSignal?.aborted) {
@@ -4049,7 +4053,7 @@ async function executeWorkflow(config) {
4049
4053
  }
4050
4054
  }
4051
4055
  if (!halted) {
4052
- info(`[epic-${epicId}] Epic completed`);
4056
+ if (!config.onEvent) info(`[epic-${epicId}] Epic completed`);
4053
4057
  }
4054
4058
  }
4055
4059
  if (state.phase === "interrupted") {
@@ -6239,17 +6243,17 @@ function registerRunCommand(program) {
6239
6243
  total: counts.total,
6240
6244
  totalCost: totalCostUsd
6241
6245
  });
6242
- if (storyFlowTasks.has(event.taskName)) {
6243
- const allStoryDone = [...storyFlowTasks].every((tn) => taskStates[tn] === "done");
6244
- if (allStoryDone) {
6245
- storiesDone++;
6246
- updateStoryStatus2(event.storyKey, "done");
6247
- const idx = storyEntries.findIndex((s) => s.key === event.storyKey);
6248
- if (idx >= 0) {
6249
- storyEntries[idx] = { ...storyEntries[idx], status: "done" };
6250
- renderer.updateStories([...storyEntries]);
6246
+ if (event.taskName === "verify" && event.storyKey.startsWith("__epic_")) {
6247
+ const epicId = event.storyKey.replace("__epic_", "").replace("__", "");
6248
+ for (let i = 0; i < storyEntries.length; i++) {
6249
+ const se = storyEntries[i];
6250
+ if (se.status === "in-progress" && se.key.startsWith(`${epicId}-`)) {
6251
+ storiesDone++;
6252
+ updateStoryStatus2(se.key, "done");
6253
+ storyEntries[i] = { ...se, status: "done" };
6251
6254
  }
6252
6255
  }
6256
+ renderer.updateStories([...storyEntries]);
6253
6257
  }
6254
6258
  }
6255
6259
  if (event.type === "dispatch-error") {
@@ -11160,7 +11164,7 @@ function registerTeardownCommand(program) {
11160
11164
  } else if (otlpMode === "remote-routed") {
11161
11165
  if (!options.keepDocker) {
11162
11166
  try {
11163
- const { stopCollectorOnly: stopCollectorOnly2 } = await import("./docker-GLX24TXX.js");
11167
+ const { stopCollectorOnly: stopCollectorOnly2 } = await import("./docker-UY37PFPB.js");
11164
11168
  stopCollectorOnly2();
11165
11169
  result.docker.stopped = true;
11166
11170
  if (!isJson) {
@@ -11192,7 +11196,7 @@ function registerTeardownCommand(program) {
11192
11196
  info("Shared stack: kept running (other projects may use it)");
11193
11197
  }
11194
11198
  } else if (isLegacyStack) {
11195
- const { isStackRunning: isStackRunning2, stopStack } = await import("./docker-GLX24TXX.js");
11199
+ const { isStackRunning: isStackRunning2, stopStack } = await import("./docker-UY37PFPB.js");
11196
11200
  let stackRunning = false;
11197
11201
  try {
11198
11202
  stackRunning = isStackRunning2(composeFile);
@@ -14179,7 +14183,7 @@ function registerDriversCommand(program) {
14179
14183
  }
14180
14184
 
14181
14185
  // src/index.ts
14182
- var VERSION = true ? "0.32.2" : "0.0.0-dev";
14186
+ var VERSION = true ? "0.32.3" : "0.0.0-dev";
14183
14187
  function createProgram() {
14184
14188
  const program = new Command();
14185
14189
  program.name("codeharness").description("Makes autonomous coding agents produce software that actually works").version(VERSION).option("--json", "Output in machine-readable JSON format");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeharness",
3
- "version": "0.32.2",
3
+ "version": "0.32.3",
4
4
  "type": "module",
5
5
  "description": "CLI for codeharness — makes autonomous coding agents produce software that actually works",
6
6
  "bin": {