taskplane 0.24.20 → 0.24.21
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.
|
@@ -609,9 +609,20 @@ export async function spawnMergeAgentV2(
|
|
|
609
609
|
timeoutMs: (config.merge.timeout_minutes ?? 10) * 60 * 1000,
|
|
610
610
|
stateRoot: stateRoot ?? repoRoot,
|
|
611
611
|
packet: null,
|
|
612
|
-
env: {
|
|
612
|
+
env: {
|
|
613
|
+
ORCH_BATCH_ID: bid,
|
|
614
|
+
// Isolate merge agent from operator's user preferences to prevent
|
|
615
|
+
// verification test contamination (e.g., stale reviewerModel pref
|
|
616
|
+
// overriding schema defaults in deep-equal assertions).
|
|
617
|
+
PI_CODING_AGENT_DIR: join(sidecarRoot, "runtime", bid, "merge-agent-env"),
|
|
618
|
+
},
|
|
613
619
|
};
|
|
614
620
|
|
|
621
|
+
// Ensure isolated agent dir exists with empty preferences
|
|
622
|
+
const isolatedAgentDir = join(sidecarRoot, "runtime", bid, "merge-agent-env", "taskplane");
|
|
623
|
+
mkdirSync(isolatedAgentDir, { recursive: true });
|
|
624
|
+
try { writeFileSync(join(isolatedAgentDir, "preferences.json"), "{}\n", { flag: "wx" }); } catch { /* already exists */ }
|
|
625
|
+
|
|
615
626
|
const { promise, kill } = spawnAgent(opts);
|
|
616
627
|
|
|
617
628
|
// Store the kill handle for external cleanup (pause/abort).
|
|
@@ -102,7 +102,7 @@ export const SECTIONS: SectionDef[] = [
|
|
|
102
102
|
// The user-facing spawn mode setting is under Worker (controls /task behavior).
|
|
103
103
|
{ configPath: "orchestrator.orchestrator.sessionPrefix", label: "Session Prefix", control: "input", layer: "L1+L2", fieldType: "string", prefsKey: "sessionPrefix", description: "Prefix for orchestrator session names" },
|
|
104
104
|
{ configPath: "orchestrator.orchestrator.operatorId", label: "Operator ID", control: "input", layer: "L1+L2", fieldType: "string", prefsKey: "operatorId", description: "Operator identifier (empty = auto-detect)" },
|
|
105
|
-
{ configPath: "orchestrator.orchestrator.integration", label: "Integration", control: "
|
|
105
|
+
{ configPath: "orchestrator.orchestrator.integration", label: "Integration", control: "picker", layer: "L1", fieldType: "enum", values: ["manual", "supervised", "auto"], description: "How completed batches are integrated. manual = user runs /orch-integrate. supervised = supervisor proposes plan, asks confirmation. auto = supervisor executes without asking." },
|
|
106
106
|
],
|
|
107
107
|
},
|
|
108
108
|
{
|
|
@@ -154,7 +154,7 @@ export const SECTIONS: SectionDef[] = [
|
|
|
154
154
|
name: "Supervisor",
|
|
155
155
|
fields: [
|
|
156
156
|
{ configPath: "orchestrator.supervisor.model", label: "Supervisor Model", control: "input", layer: "L1+L2", fieldType: "string", prefsKey: "supervisorModel", description: "Supervisor model (inherit = use session model)" },
|
|
157
|
-
{ configPath: "orchestrator.supervisor.autonomy", label: "Autonomy Level", control: "
|
|
157
|
+
{ configPath: "orchestrator.supervisor.autonomy", label: "Autonomy Level", control: "picker", layer: "L1", fieldType: "enum", values: ["interactive", "supervised", "autonomous"], description: "Recovery action confirmation behavior" },
|
|
158
158
|
],
|
|
159
159
|
},
|
|
160
160
|
{
|
|
@@ -1391,6 +1391,14 @@ async function showSectionSettingsLoop(
|
|
|
1391
1391
|
const selected = await pickThinkingMode(ctx, normalizedCurrent);
|
|
1392
1392
|
if (selected === undefined) continue; // Cancelled
|
|
1393
1393
|
result.rawValue = selected;
|
|
1394
|
+
} else if (field.control === "picker" && field.values && field.values.length > 0) {
|
|
1395
|
+
// Enum picker: show scrollable list of allowed values
|
|
1396
|
+
const options = field.values.map((v) =>
|
|
1397
|
+
`${v}${v === normalizedCurrent ? " ✓ current" : ""}`
|
|
1398
|
+
);
|
|
1399
|
+
const selected = await selectScrollable(ctx, field.label, options);
|
|
1400
|
+
if (!selected) continue; // Cancelled
|
|
1401
|
+
result.rawValue = selected.replace(/\s+✓ current$/, "");
|
|
1394
1402
|
} else {
|
|
1395
1403
|
const placeholder = currentClean === "(not set)" || currentClean === "(inherit)" ? "" : currentClean;
|
|
1396
1404
|
|