taskplane 0.9.2 → 0.10.0
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/README.md +11 -21
- package/dashboard/public/app.js +10 -5
- package/extensions/taskplane/extension.ts +730 -548
- package/extensions/taskplane/persistence.ts +4 -2
- package/extensions/taskplane/supervisor.ts +34 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -19,10 +19,12 @@ The taskplane dashboard runs on a local port on your system and gives you elegan
|
|
|
19
19
|
### Key Features
|
|
20
20
|
|
|
21
21
|
- **Task Orchestrator** — Parallel multi-task execution using git worktrees for full filesystem isolation. Dependency-aware wave scheduling. Automated merges into a dedicated orch branch — your working branch stays stable until you choose to integrate.
|
|
22
|
-
- **
|
|
23
|
-
- **
|
|
22
|
+
- **Persistent Worker Context** — Workers handle all steps in a single context, auto-detecting the model's context window (1M for Claude 4.6 Opus, 200K for Bedrock). Only iterates on context overflow. Dramatic reduction in spawn count and token cost.
|
|
23
|
+
- **Worker-Driven Inline Reviews** — Workers invoke a `review_step` tool at step boundaries. Reviewer agents spawn in tmux sessions with full telemetry. REVISE feedback is addressed inline without losing context.
|
|
24
|
+
- **Supervisor Agent** — Conversational supervisor monitors batch progress, handles failures, and can invoke orchestrator commands autonomously (resume, integrate, pause, abort).
|
|
25
|
+
- **Web Dashboard** — Live browser-based monitoring via `taskplane dashboard`. SSE streaming, lane/task progress, reviewer activity, merge telemetry, batch history.
|
|
24
26
|
- **Structured Tasks** — PROMPT.md defines the mission, steps, and constraints. STATUS.md tracks progress. Agents follow the plan, not vibes.
|
|
25
|
-
- **Checkpoint Discipline** —
|
|
27
|
+
- **Checkpoint Discipline** — Step boundary commits ensure work is never lost, even if a worker crashes mid-task.
|
|
26
28
|
- **Cross-Model Review** — Reviewer agent uses a different model than the worker agent (highly recommended, not enforced). Independent quality gate before merge.
|
|
27
29
|
|
|
28
30
|
## Install
|
|
@@ -117,27 +119,17 @@ Inside the pi session:
|
|
|
117
119
|
|
|
118
120
|
`/orch` with no arguments is the universal entry point — it detects your project state and activates the supervisor for guided interaction (onboarding, batch planning, health checks, or retrospective). The default scaffold includes two independent example tasks, so `/orch all` gives you an immediate orchestrator + dashboard experience.
|
|
119
121
|
|
|
120
|
-
### 4.
|
|
122
|
+
### 4. Run a single task with isolation
|
|
121
123
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
```
|
|
125
|
-
/task taskplane-tasks/EXAMPLE-001-hello-world/PROMPT.md
|
|
126
|
-
/task-status
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
Important distinction:
|
|
130
|
-
|
|
131
|
-
- `/task` runs in your **current branch/worktree**.
|
|
132
|
-
- `/orch` runs tasks in **isolated worktrees** on a dedicated orch branch — your working branch is never touched until you integrate.
|
|
133
|
-
|
|
134
|
-
Because workers checkpoint with git commits, `/task` can capture unrelated local edits if you're changing files in parallel. For safer isolation (even with one task), prefer:
|
|
124
|
+
For a single task with full worktree isolation, dashboard, and reviews:
|
|
135
125
|
|
|
136
126
|
```text
|
|
137
127
|
/orch taskplane-tasks/EXAMPLE-001-hello-world/PROMPT.md
|
|
138
128
|
```
|
|
139
129
|
|
|
140
|
-
|
|
130
|
+
This uses the same orchestrator infrastructure as a full batch — isolated worktree, orch branch, supervisor, dashboard, inline reviews — but for just one task.
|
|
131
|
+
|
|
132
|
+
> **Note:** The `/task` command still exists for direct single-task execution in the current branch, but `/orch` is recommended for all workflows. `/task` does not provide worktree isolation, dashboard, or inline reviews.
|
|
141
133
|
|
|
142
134
|
## Commands
|
|
143
135
|
|
|
@@ -200,9 +192,7 @@ Orchestrator lanes execute tasks through task-runner under the hood, so `/task`
|
|
|
200
192
|
└─────────────┘
|
|
201
193
|
```
|
|
202
194
|
|
|
203
|
-
**
|
|
204
|
-
|
|
205
|
-
**Parallel batch** (`/orch`): Tasks are sorted into dependency waves. Each wave runs in parallel across lanes (git worktrees). Completed lanes merge into a dedicated orch branch. When the batch completes, use `/orch-integrate` to bring the results into your working branch (or configure auto-integration).
|
|
195
|
+
**How it works:** Tasks are sorted into dependency waves. Each wave runs in parallel across lanes (git worktrees). Workers handle all steps in a single context, calling `review_step` at step boundaries for inline reviews. Completed lanes merge into a dedicated orch branch. A supervisor agent monitors progress and can autonomously resume, integrate, or abort. When the batch completes, use `/orch-integrate` to bring the results into your working branch (or configure auto-integration).
|
|
206
196
|
|
|
207
197
|
## Documentation
|
|
208
198
|
|
package/dashboard/public/app.js
CHANGED
|
@@ -78,15 +78,17 @@ function tokenSummaryFromLaneState(ls) {
|
|
|
78
78
|
/** Build compact telemetry badge HTML for retry/compaction indicators.
|
|
79
79
|
* Only shows badges when telemetry data has meaningful values.
|
|
80
80
|
* @param {object|null} tel - Telemetry data for a lane (from currentData.telemetry[prefix])
|
|
81
|
+
* @param {boolean} [suppressRetry=false] - When true, hide the retrying badge
|
|
82
|
+
* (used when reviewer is active — long tool calls trigger false retry signals)
|
|
81
83
|
* @returns {string} HTML string with badges, or "" if nothing to show
|
|
82
84
|
*/
|
|
83
|
-
function telemetryBadgesHtml(tel) {
|
|
85
|
+
function telemetryBadgesHtml(tel, suppressRetry) {
|
|
84
86
|
if (!tel) return "";
|
|
85
87
|
let badges = "";
|
|
86
|
-
if (tel.retryActive) {
|
|
88
|
+
if (tel.retryActive && !suppressRetry) {
|
|
87
89
|
const err = tel.lastRetryError ? ` — ${tel.lastRetryError}` : "";
|
|
88
90
|
badges += `<span class="telem-badge telem-retry-active" title="Retry in progress${escapeHtml(err)}">🔄 retrying</span>`;
|
|
89
|
-
} else if (tel.retries > 0) {
|
|
91
|
+
} else if (tel.retries > 0 && !suppressRetry) {
|
|
90
92
|
badges += `<span class="telem-badge telem-retry" title="${tel.retries} auto-retry event(s)">🔄 ${tel.retries}</span>`;
|
|
91
93
|
}
|
|
92
94
|
if (tel.compactions > 0) {
|
|
@@ -529,8 +531,11 @@ function renderLanesTasks(batch, tmuxSessions) {
|
|
|
529
531
|
|
|
530
532
|
// Worker stats from lane state sidecar + telemetry badges
|
|
531
533
|
let workerHtml = "";
|
|
532
|
-
const telemBadges = task.status !== "pending" ? telemetryBadgesHtml(tel) : "";
|
|
533
|
-
|
|
534
|
+
const telemBadges = task.status !== "pending" ? telemetryBadgesHtml(tel, reviewerActive) : "";
|
|
535
|
+
// Reviewer sub-row should only appear under the task currently being reviewed,
|
|
536
|
+
// not all tasks in the lane. The lane-state sidecar is per-lane (shared by all
|
|
537
|
+
// tasks in the lane), so check that the sidecar's current taskId matches this task.
|
|
538
|
+
const reviewerActive = ls && ls.reviewerStatus === "running" && ls.taskId === task.taskId;
|
|
534
539
|
if (ls && ls.workerStatus === "running" && task.status === "running") {
|
|
535
540
|
const elapsed = ls.workerElapsed ? `${Math.round(ls.workerElapsed / 1000)}s` : "";
|
|
536
541
|
const tools = ls.workerToolCount || 0;
|