taskplane 0.2.0 → 0.2.2
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.
|
@@ -712,22 +712,26 @@ body {
|
|
|
712
712
|
background: none;
|
|
713
713
|
border: none;
|
|
714
714
|
cursor: pointer;
|
|
715
|
-
font-size: 0.
|
|
716
|
-
padding:
|
|
715
|
+
font-size: 0.85rem;
|
|
716
|
+
padding: 3px 5px;
|
|
717
717
|
border-radius: var(--radius-sm);
|
|
718
|
-
opacity:
|
|
719
|
-
transition: opacity 0.2s, background 0.2s;
|
|
718
|
+
opacity: 1;
|
|
719
|
+
transition: opacity 0.2s, background 0.2s, color 0.2s, box-shadow 0.2s;
|
|
720
720
|
line-height: 1;
|
|
721
|
+
color: var(--text-muted);
|
|
721
722
|
}
|
|
722
723
|
|
|
723
724
|
.viewer-eye-btn:hover {
|
|
724
725
|
opacity: 1;
|
|
725
|
-
background: rgba(88,166,255,0.
|
|
726
|
+
background: rgba(88,166,255,0.18);
|
|
727
|
+
color: var(--accent);
|
|
726
728
|
}
|
|
727
729
|
|
|
728
730
|
.viewer-eye-btn.active {
|
|
729
731
|
opacity: 1;
|
|
730
|
-
background: rgba(88,166,255,0.
|
|
732
|
+
background: rgba(88,166,255,0.25);
|
|
733
|
+
color: var(--accent);
|
|
734
|
+
box-shadow: 0 0 0 1px var(--accent-dim);
|
|
731
735
|
}
|
|
732
736
|
|
|
733
737
|
.tmux-view-btn.active {
|
|
@@ -34,6 +34,7 @@ import { deleteBranchBestEffort, forceCleanupWorktree, formatPreflightResults, l
|
|
|
34
34
|
* @param onNotify - Callback for user-facing messages
|
|
35
35
|
* @param onMonitorUpdate - Optional callback for dashboard updates
|
|
36
36
|
* @param workspaceConfig - Workspace configuration for repo routing (null = repo mode)
|
|
37
|
+
* @param workspaceRoot - Workspace root for resolving task area paths (defaults to cwd)
|
|
37
38
|
*/
|
|
38
39
|
export async function executeOrchBatch(
|
|
39
40
|
args: string,
|
|
@@ -44,6 +45,7 @@ export async function executeOrchBatch(
|
|
|
44
45
|
onNotify: (message: string, level: "info" | "warning" | "error") => void,
|
|
45
46
|
onMonitorUpdate?: MonitorUpdateCallback,
|
|
46
47
|
workspaceConfig?: WorkspaceConfig | null,
|
|
48
|
+
workspaceRoot?: string,
|
|
47
49
|
): Promise<void> {
|
|
48
50
|
const repoRoot = cwd;
|
|
49
51
|
|
|
@@ -85,7 +87,7 @@ export async function executeOrchBatch(
|
|
|
85
87
|
execLog("batch", batchState.batchId, "starting batch planning");
|
|
86
88
|
|
|
87
89
|
// Preflight
|
|
88
|
-
const preflight = runPreflight(orchConfig);
|
|
90
|
+
const preflight = runPreflight(orchConfig, repoRoot);
|
|
89
91
|
onNotify(formatPreflightResults(preflight), preflight.passed ? "info" : "error");
|
|
90
92
|
if (!preflight.passed) {
|
|
91
93
|
batchState.phase = "failed";
|
|
@@ -94,8 +96,10 @@ export async function executeOrchBatch(
|
|
|
94
96
|
return;
|
|
95
97
|
}
|
|
96
98
|
|
|
97
|
-
// Discovery
|
|
98
|
-
|
|
99
|
+
// Discovery — task area paths in task-runner.yaml are workspace-relative.
|
|
100
|
+
// In repo mode workspaceRoot === repoRoot, so this is always correct.
|
|
101
|
+
const discoveryRoot = workspaceRoot ?? cwd;
|
|
102
|
+
const discovery = runDiscovery(args, runnerConfig.task_areas, discoveryRoot, {
|
|
99
103
|
refreshDependencies: false,
|
|
100
104
|
dependencySource: orchConfig.dependencies.source,
|
|
101
105
|
useDependencyCache: orchConfig.dependencies.cache,
|
|
@@ -207,6 +207,7 @@ export default function (pi: ExtensionAPI) {
|
|
|
207
207
|
if (changed) updateOrchWidget(); // Only refresh on actual state change
|
|
208
208
|
},
|
|
209
209
|
execCtx!.workspaceConfig,
|
|
210
|
+
execCtx!.workspaceRoot,
|
|
210
211
|
);
|
|
211
212
|
|
|
212
213
|
// Final widget update after batch completes
|
|
@@ -252,14 +253,14 @@ export default function (pi: ExtensionAPI) {
|
|
|
252
253
|
}
|
|
253
254
|
|
|
254
255
|
// ── Section 1: Preflight ─────────────────────────────────
|
|
255
|
-
const preflight = runPreflight(orchConfig);
|
|
256
|
+
const preflight = runPreflight(orchConfig, execCtx!.repoRoot);
|
|
256
257
|
ctx.ui.notify(formatPreflightResults(preflight), preflight.passed ? "info" : "error");
|
|
257
258
|
if (!preflight.passed) return;
|
|
258
259
|
|
|
259
260
|
// ── Section 2: Discovery ─────────────────────────────────
|
|
260
|
-
// Discovery
|
|
261
|
-
//
|
|
262
|
-
const discovery = runDiscovery(cleanArgs, runnerConfig.task_areas, execCtx!.
|
|
261
|
+
// Discovery resolves task area paths relative to workspaceRoot (not repoRoot),
|
|
262
|
+
// because task_areas in task-runner.yaml are workspace-relative paths.
|
|
263
|
+
const discovery = runDiscovery(cleanArgs, runnerConfig.task_areas, execCtx!.workspaceRoot, {
|
|
263
264
|
refreshDependencies: hasRefresh,
|
|
264
265
|
dependencySource: orchConfig.dependencies.source,
|
|
265
266
|
useDependencyCache: orchConfig.dependencies.cache,
|
|
@@ -608,8 +609,8 @@ export default function (pi: ExtensionAPI) {
|
|
|
608
609
|
}
|
|
609
610
|
|
|
610
611
|
// Run discovery (no preflight needed for deps view).
|
|
611
|
-
//
|
|
612
|
-
const discovery = runDiscovery(cleanArgs, runnerConfig.task_areas, execCtx!.
|
|
612
|
+
// Task area paths are workspace-relative, so use workspaceRoot.
|
|
613
|
+
const discovery = runDiscovery(cleanArgs, runnerConfig.task_areas, execCtx!.workspaceRoot, {
|
|
613
614
|
refreshDependencies: hasRefresh,
|
|
614
615
|
dependencySource: orchConfig.dependencies.source,
|
|
615
616
|
useDependencyCache: orchConfig.dependencies.cache,
|
|
@@ -1373,12 +1373,13 @@ export function removeAllWorktrees(
|
|
|
1373
1373
|
* Execute a command synchronously and return { ok, stdout }.
|
|
1374
1374
|
* Returns ok=false on any error (non-zero exit, command not found, etc.).
|
|
1375
1375
|
*/
|
|
1376
|
-
export function execCheck(command: string): { ok: boolean; stdout: string } {
|
|
1376
|
+
export function execCheck(command: string, cwd?: string): { ok: boolean; stdout: string } {
|
|
1377
1377
|
try {
|
|
1378
1378
|
const stdout = execSync(command, {
|
|
1379
1379
|
encoding: "utf-8",
|
|
1380
1380
|
timeout: 10_000,
|
|
1381
1381
|
stdio: ["pipe", "pipe", "pipe"],
|
|
1382
|
+
...(cwd ? { cwd } : {}),
|
|
1382
1383
|
}).trim();
|
|
1383
1384
|
return { ok: true, stdout };
|
|
1384
1385
|
} catch {
|
|
@@ -1417,7 +1418,7 @@ export function meetsMinVersion(actual: [number, number], minimum: [number, numb
|
|
|
1417
1418
|
* - tmux version >= 2.6
|
|
1418
1419
|
* - tmux functional (can create/destroy sessions)
|
|
1419
1420
|
*/
|
|
1420
|
-
export function runPreflight(config: OrchestratorConfig): PreflightResult {
|
|
1421
|
+
export function runPreflight(config: OrchestratorConfig, repoRoot?: string): PreflightResult {
|
|
1421
1422
|
const checks: PreflightCheck[] = [];
|
|
1422
1423
|
const tmuxRequired = config.orchestrator.spawn_mode === "tmux";
|
|
1423
1424
|
|
|
@@ -1450,14 +1451,19 @@ export function runPreflight(config: OrchestratorConfig): PreflightResult {
|
|
|
1450
1451
|
}
|
|
1451
1452
|
|
|
1452
1453
|
// ── Git worktree support ─────────────────────────────────────
|
|
1453
|
-
|
|
1454
|
+
// In workspace mode, cwd may not be a git repo — run from a repo root
|
|
1455
|
+
const worktreeResult = execCheck("git worktree list", repoRoot);
|
|
1454
1456
|
checks.push({
|
|
1455
1457
|
name: "git-worktree",
|
|
1456
1458
|
status: worktreeResult.ok ? "pass" : "fail",
|
|
1457
1459
|
message: worktreeResult.ok
|
|
1458
1460
|
? "Worktree support available"
|
|
1459
1461
|
: "Git worktree not available",
|
|
1460
|
-
hint: worktreeResult.ok
|
|
1462
|
+
hint: worktreeResult.ok
|
|
1463
|
+
? undefined
|
|
1464
|
+
: repoRoot
|
|
1465
|
+
? "Upgrade Git to 2.15+"
|
|
1466
|
+
: "Workspace root is not a git repo. Check workspace config repo paths.",
|
|
1461
1467
|
});
|
|
1462
1468
|
|
|
1463
1469
|
// ── TMUX availability and version ────────────────────────────
|