pi-long-task 0.3.16 → 0.3.17

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/CHANGELOG.md CHANGED
@@ -2,6 +2,13 @@
2
2
 
3
3
  Notable changes to Pi Long Task are recorded here. This project follows semantic versioning.
4
4
 
5
+ ## 0.3.17 - 2026-08-26
6
+
7
+ ### Fixed
8
+
9
+ - Prevent repeated `Finished:` and `Failed:` prefixes from accumulating in the sidebar's active status across tool events.
10
+ - Reset the active status at every tool start so a completed tool's status cannot leak into the next tool.
11
+
5
12
  ## 0.3.16 - 2026-08-20
6
13
 
7
14
  ### Changed
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-long-task",
3
- "version": "0.3.16",
3
+ "version": "0.3.17",
4
4
  "type": "module",
5
5
  "description": "Pi coding agent extension that breaks large coding requests into tracked TODOs and runs them in isolated AI worker sessions. A long-running task runner and subagent orchestrator for Pi, with a live TUI progress sidebar, retries, goal loops, and optional per-task git commits.",
6
6
  "keywords": [
@@ -1053,11 +1053,15 @@ function emitWorkerEventProgress(
1053
1053
 
1054
1054
  const action = event.type === "tool_execution_start" ? "started" : event.isError ? "failed" : "finished";
1055
1055
  if (event.type === "tool_execution_end") {
1056
- const previousActivity = runtime.workerActivityByWorker.get(worker) ?? `Running ${event.toolName}`;
1056
+ const previousActivity = stripToolOutcomePrefix(
1057
+ runtime.workerActivityByWorker.get(worker) ?? `Running ${event.toolName}`,
1058
+ );
1057
1059
  activeStatus = event.isError ? `Failed: ${previousActivity}` : `Finished: ${previousActivity}`;
1058
1060
  runtime.workerActivityByWorker.set(worker, activeStatus);
1059
- } else if (!activeStatus) {
1060
- activeStatus = `Running ${event.toolName}`;
1061
+ } else {
1062
+ // Every tool start begins a new activity. Keeping the previous tool's completed
1063
+ // status here causes each later tool end to prepend another "Finished:" label.
1064
+ activeStatus = event.activity ?? `Running ${event.toolName}`;
1061
1065
  runtime.workerActivityByWorker.set(worker, activeStatus);
1062
1066
  }
1063
1067
 
@@ -1080,6 +1084,10 @@ function emitWorkerEventProgress(
1080
1084
  emitProgress(runtime, activeStatus, update);
1081
1085
  }
1082
1086
 
1087
+ function stripToolOutcomePrefix(activity: string): string {
1088
+ return activity.replace(/^(?:(?:Finished|Failed):\s*)+/i, "");
1089
+ }
1090
+
1083
1091
  function activeStatusFromWorkerText(text: string): string {
1084
1092
  const taskResultIndex = text.indexOf("TASK_RESULT:");
1085
1093
  return (taskResultIndex >= 0 ? text.slice(0, taskResultIndex) : text).replace(/\s+/g, " ").trim();