pi-long-task 0.3.13 → 0.3.15
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 +14 -0
- package/README.md +13 -1
- package/package.json +31 -16
- package/src/index.ts +13 -7
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,20 @@
|
|
|
2
2
|
|
|
3
3
|
Notable changes to Pi Long Task are recorded here. This project follows semantic versioning.
|
|
4
4
|
|
|
5
|
+
## 0.3.15 - 2026-08-20
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- Show the full active task status in a dedicated "Active status" section below the active task in the TUI sidebar, wrapping instead of truncating long status messages.
|
|
10
|
+
- Wrap the active task status message and current task line in the plain widget fallback instead of hard-truncating them.
|
|
11
|
+
|
|
12
|
+
## 0.3.14 - 2026-08-20
|
|
13
|
+
|
|
14
|
+
### Documentation and metadata
|
|
15
|
+
|
|
16
|
+
- Improve npm and GitHub discoverability with a richer package description, expanded keywords, and added `repository`, `homepage`, `bugs`, and `engines` fields.
|
|
17
|
+
- Add npm version, Node.js, and license badges, a keyword-rich introduction, and the embedded package preview image to the README.
|
|
18
|
+
|
|
5
19
|
## 0.3.13 - 2026-07-22
|
|
6
20
|
|
|
7
21
|
### Fixed
|
package/README.md
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
# Pi Long Task
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://www.npmjs.com/package/pi-long-task)
|
|
4
|
+
[](https://nodejs.org/)
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
|
|
7
|
+
**Pi Long Task** is a long-running task runner and subagent orchestrator for the [Pi coding agent](https://github.com/earendil-works/pi). It is a Pi extension that breaks large coding requests into tracked TODOs, executes them in isolated AI worker sessions, registers a real Pi TUI progress sidebar while a run is active, and optionally commits completed work.
|
|
8
|
+
|
|
9
|
+
If you are looking for a way to run long-running, multi-step, autonomous coding tasks with Pi — refactors, test coverage pushes, full feature builds, or entire product goals — this extension handles the planning, delegation, progress tracking, retries, and safe git commits for you.
|
|
4
10
|
|
|
5
11
|
Use it when a coding request is bigger than one focused interaction. Pi Long Task creates or cleans up the TODO plan, hands each TODO to a fresh worker session, tracks every attempt, and keeps the run artifacts so you can inspect what happened later.
|
|
6
12
|
|
|
@@ -198,6 +204,8 @@ During execution, Pi Long Task creates `tmp/pi-long-task/<run-id>/TODO.md` and `
|
|
|
198
204
|
|
|
199
205
|
## What it looks like
|
|
200
206
|
|
|
207
|
+

|
|
208
|
+
|
|
201
209
|
In Pi TUI, Pi Long Task keeps worker activity in the main tool result flow and registers a real right-side TUI sidebar for the run timeline:
|
|
202
210
|
|
|
203
211
|
```text
|
|
@@ -460,6 +468,10 @@ That smoke test creates disposable git repos and verifies both `commit: false` a
|
|
|
460
468
|
- Worker spend is added to the main Pi `$ spent` total as cost-only usage. Token counts are not merged into the main thread because worker sessions have separate context windows, and merging their token usage would corrupt the main conversation's context statistics.
|
|
461
469
|
- Run artifacts are written under `tmp/pi-long-task/<run-id>/`.
|
|
462
470
|
|
|
471
|
+
## Keywords
|
|
472
|
+
|
|
473
|
+
Pi extension, Pi package, Pi coding agent, AI coding agent, AI coding assistant, LLM agent, agentic coding, subagent orchestration, long-running tasks, task runner, task orchestration, TODO planner, autonomous coding, background coding agent, isolated worker sessions, multi-step coding tasks.
|
|
474
|
+
|
|
463
475
|
## License
|
|
464
476
|
|
|
465
477
|
MIT. See [LICENSE](LICENSE).
|
package/package.json
CHANGED
|
@@ -1,15 +1,41 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-long-task",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.15",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"description": "Pi extension
|
|
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": [
|
|
7
|
+
"pi",
|
|
7
8
|
"pi-package",
|
|
9
|
+
"pi-extension",
|
|
10
|
+
"pi-coding-agent",
|
|
11
|
+
"coding-agent",
|
|
12
|
+
"ai-coding-agent",
|
|
13
|
+
"ai-coding-assistant",
|
|
14
|
+
"llm-agent",
|
|
15
|
+
"agentic-coding",
|
|
16
|
+
"subagent",
|
|
8
17
|
"long-task",
|
|
18
|
+
"long-running-tasks",
|
|
9
19
|
"task-runner",
|
|
10
|
-
"
|
|
11
|
-
"
|
|
20
|
+
"task-orchestration",
|
|
21
|
+
"todo-planner",
|
|
22
|
+
"autonomous-coding",
|
|
23
|
+
"background-agent",
|
|
24
|
+
"worker-sessions",
|
|
25
|
+
"ai-automation",
|
|
26
|
+
"developer-tools"
|
|
12
27
|
],
|
|
28
|
+
"repository": {
|
|
29
|
+
"type": "git",
|
|
30
|
+
"url": "git+https://github.com/thestuntcoder/pi-long-task.git"
|
|
31
|
+
},
|
|
32
|
+
"homepage": "https://github.com/thestuntcoder/pi-long-task#readme",
|
|
33
|
+
"bugs": {
|
|
34
|
+
"url": "https://github.com/thestuntcoder/pi-long-task/issues"
|
|
35
|
+
},
|
|
36
|
+
"engines": {
|
|
37
|
+
"node": ">=22.19.0"
|
|
38
|
+
},
|
|
13
39
|
"files": [
|
|
14
40
|
"CHANGELOG.md",
|
|
15
41
|
"LICENSE",
|
|
@@ -53,16 +79,5 @@
|
|
|
53
79
|
"typescript-eslint": "^8.61.1"
|
|
54
80
|
},
|
|
55
81
|
"license": "MIT",
|
|
56
|
-
"author": "Dejan Jacimovic <dejan@stuntcoders.com>"
|
|
57
|
-
"repository": {
|
|
58
|
-
"type": "git",
|
|
59
|
-
"url": "git+https://github.com/thestuntcoder/pi-long-task.git"
|
|
60
|
-
},
|
|
61
|
-
"bugs": {
|
|
62
|
-
"url": "https://github.com/thestuntcoder/pi-long-task/issues"
|
|
63
|
-
},
|
|
64
|
-
"homepage": "https://github.com/thestuntcoder/pi-long-task#readme",
|
|
65
|
-
"engines": {
|
|
66
|
-
"node": ">=22.19.0"
|
|
67
|
-
}
|
|
82
|
+
"author": "Dejan Jacimovic <dejan@stuntcoders.com>"
|
|
68
83
|
}
|
package/src/index.ts
CHANGED
|
@@ -275,7 +275,10 @@ function renderSidebarWidgetLines(update: CoordinatorProgressUpdate): string[] {
|
|
|
275
275
|
const progress = update.taskProgress;
|
|
276
276
|
const summary = progress?.summary;
|
|
277
277
|
const statusDetails = sidebarUpdateStateDetails(update);
|
|
278
|
-
const lines = [
|
|
278
|
+
const lines = [
|
|
279
|
+
"Pi Long Task",
|
|
280
|
+
...wrapPlainText(`${statusDetails.icon} ${statusDetails.label} · ${update.message}`, 96),
|
|
281
|
+
];
|
|
279
282
|
if (summary) {
|
|
280
283
|
lines.push(
|
|
281
284
|
`Tasks: ${summary.completedTasks}/${summary.totalTasks} · ${summary.completedPercent}%` +
|
|
@@ -290,7 +293,9 @@ function renderSidebarWidgetLines(update: CoordinatorProgressUpdate): string[] {
|
|
|
290
293
|
const currentTask = currentIndex >= 0 ? progress.tasks[currentIndex] : undefined;
|
|
291
294
|
if (currentTask) {
|
|
292
295
|
const details = taskStatusDetails(currentTask.status);
|
|
293
|
-
lines.push(
|
|
296
|
+
lines.push(
|
|
297
|
+
...wrapPlainText(`${details.label}: ${details.icon} TODO ${currentTask.taskId} — ${currentTask.title}`, 96),
|
|
298
|
+
);
|
|
294
299
|
}
|
|
295
300
|
}
|
|
296
301
|
if (update.workerCostTotal > 0) {
|
|
@@ -346,11 +351,6 @@ function renderSidebarRows(update: CoordinatorProgressUpdate | undefined, theme:
|
|
|
346
351
|
}
|
|
347
352
|
rows.push(renderSidebarStateLine(update, theme));
|
|
348
353
|
|
|
349
|
-
const message = normalizeMessageForSidebar(update.message, update);
|
|
350
|
-
if (message) {
|
|
351
|
-
rows.push(...wrapPlainText(message, width, 2).map((line) => theme.fg("dim", line)));
|
|
352
|
-
}
|
|
353
|
-
|
|
354
354
|
if (!progress || progress.tasks.length === 0) {
|
|
355
355
|
rows.push("", sidebarHeading("Context", theme), theme.fg("muted", "Waiting for TODO plan"));
|
|
356
356
|
if (update.workerCostTotal > 0) {
|
|
@@ -397,6 +397,12 @@ function renderSidebarRows(update: CoordinatorProgressUpdate | undefined, theme:
|
|
|
397
397
|
rows.push(theme.fg("success", "No active task"));
|
|
398
398
|
}
|
|
399
399
|
|
|
400
|
+
const message = normalizeMessageForSidebar(update.message, update);
|
|
401
|
+
if (currentTask && message) {
|
|
402
|
+
rows.push("", sidebarHeading("Active status", theme));
|
|
403
|
+
rows.push(...wrapPlainText(message, width, 6).map((line) => theme.fg("dim", line)));
|
|
404
|
+
}
|
|
405
|
+
|
|
400
406
|
rows.push("", sidebarHeading("Task timeline", theme));
|
|
401
407
|
const taskIndexes = centeredTaskIndexes(progress.tasks.length, currentIndex, 9);
|
|
402
408
|
const first = taskIndexes[0] ?? 0;
|