codeharness 0.35.4 → 0.35.6

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.4" : "0.0.0-dev";
2898
+ var HARNESS_VERSION = true ? "0.35.6" : "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-3CJIJVLY.js";
19
+ } from "./chunk-A6L3F4PG.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-3CJIJVLY.js";
43
+ } from "./chunk-A6L3F4PG.js";
44
44
 
45
45
  // src/index.ts
46
46
  import { Command } from "commander";
@@ -6041,14 +6041,16 @@ function startRenderer(options) {
6041
6041
  const ctx = [];
6042
6042
  const currentStory = currentKey ?? "";
6043
6043
  const currentTask = state.currentTaskName ?? "";
6044
- const epicMatch = currentStory.match(/^Epic (\d+)/);
6044
+ const epicMatch = currentStory.match(/Epic (\d+)/);
6045
6045
  if (epicMatch) {
6046
6046
  const epicPrefix2 = `${epicMatch[1]}-`;
6047
6047
  const epicStories = updatedStories.filter((s) => s.key.startsWith(epicPrefix2));
6048
- const lastDone = [...epicStories].reverse().find((s) => s.status === "done" || s.status === "in-progress");
6048
+ const lastDone = [...epicStories].reverse().find((s) => s.status === "done");
6049
+ const firstIp = epicStories.find((s) => s.status === "in-progress");
6050
+ const firstPending = epicStories.find((s) => s.status === "pending");
6049
6051
  if (lastDone) ctx.push({ key: lastDone.key, role: "prev" });
6050
- const ipStory = epicStories.find((s) => s.status === "in-progress");
6051
- if (ipStory) ctx.push({ key: `${epicStories.length} stories in epic`, role: "current" });
6052
+ if (firstIp) ctx.push({ key: firstIp.key, role: "current" });
6053
+ else if (firstPending) ctx.push({ key: firstPending.key, role: "next" });
6052
6054
  } else {
6053
6055
  let foundCurrent = false;
6054
6056
  let prevKey = null;
@@ -6278,6 +6280,7 @@ function registerRunCommand(program) {
6278
6280
  totalCost: totalCostUsd,
6279
6281
  elapsed: formatElapsed(Date.now() - sessionStartMs),
6280
6282
  epicId: displayEpicId || void 0,
6283
+ epicTitle: epic?.name,
6281
6284
  epicStoriesDone: epic?.storiesDone,
6282
6285
  epicStoriesTotal: epic?.storiesTotal
6283
6286
  });
@@ -6287,7 +6290,8 @@ function registerRunCommand(program) {
6287
6290
  if (sprintStateResult.success) {
6288
6291
  for (const [epicKey, epic] of Object.entries(sprintStateResult.data.epics ?? {})) {
6289
6292
  const epicId = epicKey.replace("epic-", "");
6290
- epicData[epicId] = { storiesDone: epic.storiesDone ?? 0, storiesTotal: epic.storiesTotal ?? 0 };
6293
+ const e = epic;
6294
+ epicData[epicId] = { name: e.name, storiesDone: e.storiesDone ?? 0, storiesTotal: e.storiesTotal ?? 0 };
6291
6295
  }
6292
6296
  }
6293
6297
  const storyFlowTasks = /* @__PURE__ */ new Set();
@@ -6344,10 +6348,12 @@ function registerRunCommand(program) {
6344
6348
  let displayStoryKey;
6345
6349
  if (event.storyKey.startsWith("__epic_")) {
6346
6350
  epicId = event.storyKey.replace("__epic_", "").replace("__", "");
6347
- displayStoryKey = `Epic ${epicId} verification`;
6351
+ const epicName = epicData[epicId]?.name;
6352
+ displayStoryKey = epicName ? `${epicName} \u2014 verification` : `Epic ${epicId} verification`;
6348
6353
  } else if (event.storyKey === "__run__") {
6349
6354
  epicId = currentStoryKey ? extractEpicId2(currentStoryKey) : "";
6350
- displayStoryKey = epicId ? `Epic ${epicId}` : "Run";
6355
+ const epicName = epicId ? epicData[epicId]?.name : void 0;
6356
+ displayStoryKey = epicName ?? (epicId ? `Epic ${epicId}` : "Run");
6351
6357
  } else {
6352
6358
  epicId = extractEpicId2(event.storyKey);
6353
6359
  displayStoryKey = event.storyKey;
@@ -6363,6 +6369,7 @@ function registerRunCommand(program) {
6363
6369
  totalCost: totalCostUsd,
6364
6370
  elapsed: formatElapsed(Date.now() - sessionStartMs),
6365
6371
  epicId,
6372
+ epicTitle: epic?.name,
6366
6373
  epicStoriesDone: epic?.storiesDone ?? 0,
6367
6374
  epicStoriesTotal: epic?.storiesTotal ?? 0
6368
6375
  });
@@ -11217,7 +11224,7 @@ function registerTeardownCommand(program) {
11217
11224
  } else if (otlpMode === "remote-routed") {
11218
11225
  if (!options.keepDocker) {
11219
11226
  try {
11220
- const { stopCollectorOnly: stopCollectorOnly2 } = await import("./docker-CR3F2RCU.js");
11227
+ const { stopCollectorOnly: stopCollectorOnly2 } = await import("./docker-LXF5I54P.js");
11221
11228
  stopCollectorOnly2();
11222
11229
  result.docker.stopped = true;
11223
11230
  if (!isJson) {
@@ -11249,7 +11256,7 @@ function registerTeardownCommand(program) {
11249
11256
  info("Shared stack: kept running (other projects may use it)");
11250
11257
  }
11251
11258
  } else if (isLegacyStack) {
11252
- const { isStackRunning: isStackRunning2, stopStack } = await import("./docker-CR3F2RCU.js");
11259
+ const { isStackRunning: isStackRunning2, stopStack } = await import("./docker-LXF5I54P.js");
11253
11260
  let stackRunning = false;
11254
11261
  try {
11255
11262
  stackRunning = isStackRunning2(composeFile);
@@ -14236,7 +14243,7 @@ function registerDriversCommand(program) {
14236
14243
  }
14237
14244
 
14238
14245
  // src/index.ts
14239
- var VERSION = true ? "0.35.4" : "0.0.0-dev";
14246
+ var VERSION = true ? "0.35.6" : "0.0.0-dev";
14240
14247
  function createProgram() {
14241
14248
  const program = new Command();
14242
14249
  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.4",
3
+ "version": "0.35.6",
4
4
  "type": "module",
5
5
  "description": "CLI for codeharness — makes autonomous coding agents produce software that actually works",
6
6
  "bin": {