taskplane 0.1.9 → 0.1.11
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.
|
@@ -715,14 +715,14 @@ body {
|
|
|
715
715
|
font-size: 0.75rem;
|
|
716
716
|
padding: 2px;
|
|
717
717
|
border-radius: var(--radius-sm);
|
|
718
|
-
opacity: 0.
|
|
718
|
+
opacity: 0.6;
|
|
719
719
|
transition: opacity 0.2s, background 0.2s;
|
|
720
720
|
line-height: 1;
|
|
721
721
|
}
|
|
722
722
|
|
|
723
723
|
.viewer-eye-btn:hover {
|
|
724
|
-
opacity:
|
|
725
|
-
background: rgba(88,166,255,0.
|
|
724
|
+
opacity: 1;
|
|
725
|
+
background: rgba(88,166,255,0.15);
|
|
726
726
|
}
|
|
727
727
|
|
|
728
728
|
.viewer-eye-btn.active {
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
|
|
20
20
|
import type { ExtensionAPI, ExtensionContext } from "@mariozechner/pi-coding-agent";
|
|
21
21
|
import { DynamicBorder } from "@mariozechner/pi-coding-agent";
|
|
22
|
-
import { Container, Text, truncateToWidth
|
|
22
|
+
import { Container, Text, truncateToWidth } from "@mariozechner/pi-tui";
|
|
23
23
|
import { spawn, spawnSync } from "child_process";
|
|
24
24
|
import {
|
|
25
25
|
readFileSync, writeFileSync, appendFileSync, existsSync, mkdirSync, unlinkSync,
|
|
@@ -130,7 +130,7 @@ const DEFAULT_CONFIG: TaskConfig = {
|
|
|
130
130
|
standards_overrides: {},
|
|
131
131
|
task_areas: {},
|
|
132
132
|
worker: { model: "", tools: "read,write,edit,bash,grep,find,ls", thinking: "off" },
|
|
133
|
-
reviewer: { model: "openai/gpt-5.3-codex", tools: "read,bash,grep,find,ls", thinking: "
|
|
133
|
+
reviewer: { model: "openai/gpt-5.3-codex", tools: "read,bash,grep,find,ls", thinking: "on" },
|
|
134
134
|
context: {
|
|
135
135
|
worker_context_window: 200000, warn_percent: 70, kill_percent: 85,
|
|
136
136
|
max_worker_iterations: 20, max_review_cycles: 2, no_progress_limit: 3,
|
|
@@ -214,18 +214,16 @@ function getTmuxPrefix(): string {
|
|
|
214
214
|
/**
|
|
215
215
|
* Detects whether this task runner is executing inside the parallel orchestrator.
|
|
216
216
|
*
|
|
217
|
-
*
|
|
218
|
-
*
|
|
219
|
-
*
|
|
217
|
+
* TASK_RUNNER_TMUX_PREFIX is only ever set by the orchestrator (via execution.ts
|
|
218
|
+
* buildLaneEnv). Its presence — regardless of value — indicates orchestrated mode.
|
|
219
|
+
* The prefix can be any user-configured value (e.g., "orch-lane-1", "penster-lane-1").
|
|
220
220
|
*
|
|
221
221
|
* When true, certain worker behaviors are suppressed — most notably, workers
|
|
222
222
|
* must NOT archive task folders because the orchestrator polls for .DONE files
|
|
223
223
|
* at the original path.
|
|
224
224
|
*/
|
|
225
225
|
function isOrchestratedMode(): boolean {
|
|
226
|
-
|
|
227
|
-
// Spawn mode can be "tmux" or "subprocess" — both are valid orchestrated modes.
|
|
228
|
-
return !!process.env.TASK_RUNNER_TMUX_PREFIX?.startsWith("orch-");
|
|
226
|
+
return !!process.env.TASK_RUNNER_TMUX_PREFIX;
|
|
229
227
|
}
|
|
230
228
|
|
|
231
229
|
/**
|
|
@@ -1101,7 +1099,7 @@ export default function (pi: ExtensionAPI) {
|
|
|
1101
1099
|
return {
|
|
1102
1100
|
render(width: number): string[] {
|
|
1103
1101
|
if (!state.task) {
|
|
1104
|
-
return [
|
|
1102
|
+
return [];
|
|
1105
1103
|
}
|
|
1106
1104
|
|
|
1107
1105
|
const task = state.task;
|
|
@@ -1624,7 +1622,7 @@ export default function (pi: ExtensionAPI) {
|
|
|
1624
1622
|
prompt: promptContent,
|
|
1625
1623
|
model: reviewerModel,
|
|
1626
1624
|
tools: config.reviewer.tools || reviewerDef?.tools || "read,write,bash,grep,find,ls",
|
|
1627
|
-
thinking: config.reviewer.thinking || "
|
|
1625
|
+
thinking: config.reviewer.thinking || "on",
|
|
1628
1626
|
});
|
|
1629
1627
|
reviewPromise = spawned.promise;
|
|
1630
1628
|
state.reviewerProc = { kill: spawned.kill };
|
|
@@ -1633,7 +1631,7 @@ export default function (pi: ExtensionAPI) {
|
|
|
1633
1631
|
const spawned = spawnAgent({
|
|
1634
1632
|
model: reviewerModel,
|
|
1635
1633
|
tools: config.reviewer.tools || reviewerDef?.tools || "read,write,bash,grep,find,ls",
|
|
1636
|
-
thinking: config.reviewer.thinking || "
|
|
1634
|
+
thinking: config.reviewer.thinking || "on",
|
|
1637
1635
|
systemPrompt,
|
|
1638
1636
|
prompt: promptContent,
|
|
1639
1637
|
onToolCall: (toolName, args) => {
|
|
@@ -1864,33 +1862,6 @@ export default function (pi: ExtensionAPI) {
|
|
|
1864
1862
|
|
|
1865
1863
|
updateWidgets();
|
|
1866
1864
|
|
|
1867
|
-
// Footer
|
|
1868
|
-
ctx.ui.setFooter((_tui, theme, _footerData) => ({
|
|
1869
|
-
dispose: () => {},
|
|
1870
|
-
invalidate() {},
|
|
1871
|
-
render(width: number): string[] {
|
|
1872
|
-
const model = ctx.model?.id || "no-model";
|
|
1873
|
-
const usage = ctx.getContextUsage();
|
|
1874
|
-
const pct = usage ? usage.percent : 0;
|
|
1875
|
-
const filled = Math.round(pct / 10);
|
|
1876
|
-
const bar = "#".repeat(filled) + "-".repeat(10 - filled);
|
|
1877
|
-
|
|
1878
|
-
const taskLabel = state.task
|
|
1879
|
-
? theme.fg("accent", state.task.taskId) +
|
|
1880
|
-
theme.fg("dim", ` ${state.phase}`) +
|
|
1881
|
-
(state.phase === "running" ? theme.fg("accent", ` Step ${state.currentStep}`) : "")
|
|
1882
|
-
: theme.fg("dim", "no task");
|
|
1883
|
-
|
|
1884
|
-
const left = theme.fg("dim", ` ${model}`) +
|
|
1885
|
-
theme.fg("muted", " · ") +
|
|
1886
|
-
taskLabel;
|
|
1887
|
-
const right = theme.fg("dim", `[${bar}] ${Math.round(pct)}% `);
|
|
1888
|
-
const pad = " ".repeat(Math.max(1, width - visibleWidth(left) - visibleWidth(right)));
|
|
1889
|
-
|
|
1890
|
-
return [truncateToWidth(left + pad + right, width)];
|
|
1891
|
-
},
|
|
1892
|
-
}));
|
|
1893
|
-
|
|
1894
1865
|
const config = loadConfig(ctx.cwd);
|
|
1895
1866
|
ctx.ui.setStatus("task-runner", `📋 ${config.project.name}`);
|
|
1896
1867
|
|
|
@@ -667,7 +667,7 @@ async function checkForUpdate(ctx: ExtensionContext): Promise<void> {
|
|
|
667
667
|
`\n` +
|
|
668
668
|
` Update Available\n` +
|
|
669
669
|
` New version ${latestVersion} is available (installed: ${installedVersion}).\n` +
|
|
670
|
-
` Run:
|
|
670
|
+
` Run: pi update\n`,
|
|
671
671
|
"info",
|
|
672
672
|
);
|
|
673
673
|
}
|
|
@@ -560,13 +560,7 @@ export function createOrchWidget(
|
|
|
560
560
|
|
|
561
561
|
// ── Idle state ─────────────────────────────────
|
|
562
562
|
if (vm.phase === "idle") {
|
|
563
|
-
return [
|
|
564
|
-
"",
|
|
565
|
-
truncateToWidth(
|
|
566
|
-
theme.fg("dim", " No active batch. Use /orch <areas|all> to start."),
|
|
567
|
-
width,
|
|
568
|
-
),
|
|
569
|
-
];
|
|
563
|
+
return [];
|
|
570
564
|
}
|
|
571
565
|
|
|
572
566
|
const lines: string[] = [""];
|