codeharness 0.35.2 → 0.35.4

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.35.2" : "0.0.0-dev";
2898
+ var HARNESS_VERSION = true ? "0.35.4" : "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-KJF2YA5T.js";
19
+ } from "./chunk-3CJIJVLY.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-KJF2YA5T.js";
43
+ } from "./chunk-3CJIJVLY.js";
44
44
 
45
45
  // src/index.ts
46
46
  import { Command } from "commander";
@@ -3971,6 +3971,11 @@ async function executeWorkflow(config) {
3971
3971
  const storyFlowTasks = /* @__PURE__ */ new Set();
3972
3972
  for (const step of config.workflow.storyFlow) {
3973
3973
  if (typeof step === "string") storyFlowTasks.add(step);
3974
+ if (typeof step === "object" && "loop" in step) {
3975
+ for (const loopTask of step.loop) {
3976
+ storyFlowTasks.add(loopTask);
3977
+ }
3978
+ }
3974
3979
  }
3975
3980
  const epicGroups = /* @__PURE__ */ new Map();
3976
3981
  for (const item of workItems) {
@@ -6260,18 +6265,19 @@ function registerRunCommand(program) {
6260
6265
  let storiesDone = counts.done;
6261
6266
  let currentStoryKey = "";
6262
6267
  let currentTaskName = "";
6268
+ let displayEpicId = "";
6269
+ let displayStoryKeyForHeader = "";
6263
6270
  const headerRefresh = setInterval(() => {
6264
6271
  if (interrupted) return;
6265
- const epicId = currentStoryKey ? extractEpicId2(currentStoryKey) : "";
6266
- const epic = epicId ? epicData[epicId] : void 0;
6272
+ const epic = displayEpicId ? epicData[displayEpicId] : void 0;
6267
6273
  renderer.updateSprintState({
6268
- storyKey: currentStoryKey,
6274
+ storyKey: displayStoryKeyForHeader || currentStoryKey,
6269
6275
  phase: currentTaskName,
6270
6276
  done: storiesDone,
6271
6277
  total: counts.total,
6272
6278
  totalCost: totalCostUsd,
6273
6279
  elapsed: formatElapsed(Date.now() - sessionStartMs),
6274
- epicId: epicId || void 0,
6280
+ epicId: displayEpicId || void 0,
6275
6281
  epicStoriesDone: epic?.storiesDone,
6276
6282
  epicStoriesTotal: epic?.storiesTotal
6277
6283
  });
@@ -6334,8 +6340,20 @@ function registerRunCommand(program) {
6334
6340
  currentTaskName = event.taskName;
6335
6341
  const inLoop = inEpicPhase && epicLoopTasks.has(event.taskName) && taskStates[event.taskName] === "done";
6336
6342
  const stateKey = inLoop ? `loop:${event.taskName}` : event.taskName;
6337
- const epicId = event.storyKey.startsWith("__epic_") ? event.storyKey.replace("__epic_", "").replace("__", "") : extractEpicId2(event.storyKey);
6338
- const displayStoryKey = event.storyKey.startsWith("__epic_") ? `Epic ${epicId}` : event.storyKey;
6343
+ let epicId;
6344
+ let displayStoryKey;
6345
+ if (event.storyKey.startsWith("__epic_")) {
6346
+ epicId = event.storyKey.replace("__epic_", "").replace("__", "");
6347
+ displayStoryKey = `Epic ${epicId} verification`;
6348
+ } else if (event.storyKey === "__run__") {
6349
+ epicId = currentStoryKey ? extractEpicId2(currentStoryKey) : "";
6350
+ displayStoryKey = epicId ? `Epic ${epicId}` : "Run";
6351
+ } else {
6352
+ epicId = extractEpicId2(event.storyKey);
6353
+ displayStoryKey = event.storyKey;
6354
+ }
6355
+ displayEpicId = epicId;
6356
+ displayStoryKeyForHeader = displayStoryKey;
6339
6357
  const epic = epicData[epicId];
6340
6358
  renderer.updateSprintState({
6341
6359
  storyKey: displayStoryKey,
@@ -11199,7 +11217,7 @@ function registerTeardownCommand(program) {
11199
11217
  } else if (otlpMode === "remote-routed") {
11200
11218
  if (!options.keepDocker) {
11201
11219
  try {
11202
- const { stopCollectorOnly: stopCollectorOnly2 } = await import("./docker-EIWOFRFK.js");
11220
+ const { stopCollectorOnly: stopCollectorOnly2 } = await import("./docker-CR3F2RCU.js");
11203
11221
  stopCollectorOnly2();
11204
11222
  result.docker.stopped = true;
11205
11223
  if (!isJson) {
@@ -11231,7 +11249,7 @@ function registerTeardownCommand(program) {
11231
11249
  info("Shared stack: kept running (other projects may use it)");
11232
11250
  }
11233
11251
  } else if (isLegacyStack) {
11234
- const { isStackRunning: isStackRunning2, stopStack } = await import("./docker-EIWOFRFK.js");
11252
+ const { isStackRunning: isStackRunning2, stopStack } = await import("./docker-CR3F2RCU.js");
11235
11253
  let stackRunning = false;
11236
11254
  try {
11237
11255
  stackRunning = isStackRunning2(composeFile);
@@ -14218,7 +14236,7 @@ function registerDriversCommand(program) {
14218
14236
  }
14219
14237
 
14220
14238
  // src/index.ts
14221
- var VERSION = true ? "0.35.2" : "0.0.0-dev";
14239
+ var VERSION = true ? "0.35.4" : "0.0.0-dev";
14222
14240
  function createProgram() {
14223
14241
  const program = new Command();
14224
14242
  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.35.2",
3
+ "version": "0.35.4",
4
4
  "type": "module",
5
5
  "description": "CLI for codeharness — makes autonomous coding agents produce software that actually works",
6
6
  "bin": {