@caupulican/pi-adaptative 0.95.0 → 0.96.1
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 +33 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.d.ts.map +1 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.js +28 -0
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.js.map +1 -1
- package/dist/bundled-resources/extensions/tmux-agent-manager/index.ts +25 -0
- package/dist/bundled-resources/extensions/tps/index.d.ts +3 -0
- package/dist/bundled-resources/extensions/tps/index.d.ts.map +1 -0
- package/dist/bundled-resources/extensions/tps/index.js +44 -0
- package/dist/bundled-resources/extensions/tps/index.js.map +1 -0
- package/dist/bundled-resources/extensions/tps/index.ts +48 -0
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +12 -3
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session.d.ts +3 -3
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +16 -6
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/compaction-controller.d.ts +3 -0
- package/dist/core/compaction-controller.d.ts.map +1 -1
- package/dist/core/compaction-controller.js +12 -1
- package/dist/core/compaction-controller.js.map +1 -1
- package/dist/core/extension-import-authority.d.ts +3 -1
- package/dist/core/extension-import-authority.d.ts.map +1 -1
- package/dist/core/extension-import-authority.js +15 -0
- package/dist/core/extension-import-authority.js.map +1 -1
- package/dist/core/goal-loop-controller.d.ts +2 -2
- package/dist/core/goal-loop-controller.js +2 -2
- package/dist/core/goal-loop-controller.js.map +1 -1
- package/dist/core/goals/compact-goal-context.d.ts.map +1 -1
- package/dist/core/goals/compact-goal-context.js +12 -8
- package/dist/core/goals/compact-goal-context.js.map +1 -1
- package/dist/core/goals/goal-continuation-controller.d.ts +3 -3
- package/dist/core/goals/goal-continuation-controller.js +14 -15
- package/dist/core/goals/goal-continuation-controller.js.map +1 -1
- package/dist/core/goals/goal-continuation-defaults.d.ts +3 -3
- package/dist/core/goals/goal-continuation-defaults.js +3 -3
- package/dist/core/goals/goal-continuation-defaults.js.map +1 -1
- package/dist/core/goals/goal-lifecycle.d.ts +2 -0
- package/dist/core/goals/goal-lifecycle.d.ts.map +1 -1
- package/dist/core/goals/goal-lifecycle.js +22 -0
- package/dist/core/goals/goal-lifecycle.js.map +1 -1
- package/dist/core/goals/goal-session-controller.d.ts +8 -2
- package/dist/core/goals/goal-session-controller.d.ts.map +1 -1
- package/dist/core/goals/goal-session-controller.js +22 -3
- package/dist/core/goals/goal-session-controller.js.map +1 -1
- package/dist/core/goals/goal-state.d.ts.map +1 -1
- package/dist/core/goals/goal-state.js +1 -7
- package/dist/core/goals/goal-state.js.map +1 -1
- package/dist/core/goals/goal-tool-core.js +1 -1
- package/dist/core/goals/goal-tool-core.js.map +1 -1
- package/dist/core/keybindings.d.ts +2 -2
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +2 -2
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/model-resolver.js +1 -1
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/package-manager.d.ts +1 -1
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +2 -21
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/profile-filter-controller.d.ts.map +1 -1
- package/dist/core/profile-filter-controller.js +5 -2
- package/dist/core/profile-filter-controller.js.map +1 -1
- package/dist/core/provider-prompt-contracts.d.ts +5 -1
- package/dist/core/provider-prompt-contracts.d.ts.map +1 -1
- package/dist/core/provider-prompt-contracts.js +5 -1
- package/dist/core/provider-prompt-contracts.js.map +1 -1
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +6 -2
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/risk-classifier.d.ts.map +1 -1
- package/dist/core/risk-classifier.js +22 -2
- package/dist/core/risk-classifier.js.map +1 -1
- package/dist/core/settings-manager.d.ts +9 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +63 -9
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/system-prompt-builder.d.ts +1 -0
- package/dist/core/system-prompt-builder.d.ts.map +1 -1
- package/dist/core/system-prompt-builder.js +21 -1
- package/dist/core/system-prompt-builder.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +5 -1
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/goal.d.ts.map +1 -1
- package/dist/core/tools/goal.js +8 -18
- package/dist/core/tools/goal.js.map +1 -1
- package/dist/core/tools/orchestration-panel.d.ts +7 -0
- package/dist/core/tools/orchestration-panel.d.ts.map +1 -1
- package/dist/core/tools/orchestration-panel.js +58 -9
- package/dist/core/tools/orchestration-panel.js.map +1 -1
- package/dist/core/tools/task-steps.d.ts.map +1 -1
- package/dist/core/tools/task-steps.js +1 -0
- package/dist/core/tools/task-steps.js.map +1 -1
- package/dist/modes/interactive/components/agents-overlay.d.ts +16 -4
- package/dist/modes/interactive/components/agents-overlay.d.ts.map +1 -1
- package/dist/modes/interactive/components/agents-overlay.js +108 -29
- package/dist/modes/interactive/components/agents-overlay.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.js +7 -2
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +2 -2
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +5 -4
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/session-flow-commands.d.ts.map +1 -1
- package/dist/modes/interactive/session-flow-commands.js +9 -2
- package/dist/modes/interactive/session-flow-commands.js.map +1 -1
- package/docs/extensions.md +2 -0
- package/docs/index.md +1 -0
- package/docs/keybindings.md +2 -0
- package/docs/sessions.md +1 -1
- package/docs/task-steps.md +2 -0
- package/docs/tmux-agent-manager.md +1 -1
- package/docs/tool-repair.md +4 -3
- package/docs/work-lifecycle.md +137 -0
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/npm-shrinkwrap.json +12 -12
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/bundled-resources/extensions/tmux-agent-manager/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawnSync } from \"node:child_process\";\nimport * as crypto from \"node:crypto\";\nimport * as fs from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport * as path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport {\n\ttype ExtensionAPI,\n\ttype ExtensionContext,\n\tencodeWorkerSessionAllowedPaths,\n\tgetProcessWorkRun,\n\torchestrationThinkingLevelSchema,\n\tPI_ORCHESTRATION_AGENT_ID_ENV,\n\tPI_WORKER_ALLOWED_PATHS_ENV,\n} from \"@caupulican/pi-adaptative\";\nimport type { AgentToolResult, ThinkingLevel } from \"@caupulican/pi-agent-core\";\nimport type { Usage } from \"@caupulican/pi-ai\";\nimport { Type } from \"typebox\";\nimport {\n\tbuildLaunchProfileFlags,\n\tDEFAULT_MANAGED_WORKER_TOOLS,\n\tdecodeTmuxWorkerUsageClaim,\n\tderiveWorkerLaunchProfile,\n\ttype LaunchProfileFlag,\n\ttype Provider,\n\ttype WorkerLaunchProfile,\n} from \"./launch-profile.ts\";\n\nexport const piConfig = { tools: [\"tmux_agent_manager\"] };\n\ntype Action =\n\t| \"status\"\n\t| \"setup_help\"\n\t| \"guard\"\n\t| \"notify\"\n\t| \"set_status\"\n\t| \"clear_status\"\n\t| \"workspace_plan\"\n\t| \"launch_workspace\"\n\t| \"fire_task\"\n\t| \"send_followup\"\n\t| \"dismiss\"\n\t| \"job_status\"\n\t| \"list_jobs\"\n\t| \"set_variable\"\n\t| \"list_variables\"\n\t| \"list_templates\"\n\t| \"show_template\"\n\t| \"stop_job\"\n\t| \"stop_session\";\n\ntype AgentSpec = {\n\tprovider?: Provider;\n\tname?: string;\n\tcommand?: string;\n\t/** Optional workspace. Sets cwd; narrows Pi structured file tools but not external host processes. */\n\tpath?: string;\n\t/** Legacy process cwd override. Does not narrow the managed profile. */\n\tcwd?: string;\n\ttools?: string[];\n\tresourceProfile?: string;\n\tthinkingLevel?: ThinkingLevel;\n\t/**\n\t * Pi-only worktree-sync lane binding. Goal dispatch supplies this automatically; an explicit\n\t * fire_task profile may also narrow a Pi worker to a named lane. The launch adds\n\t * `--worktree-lane <key>` and the lane doctrine through the immutable profile.\n\t */\n\tworktreeLane?: string;\n};\ntype TeamTemplate = {\n\tname: string;\n\tdescription: string;\n\tagents: AgentSpec[];\n\tdeadlineSeconds?: number;\n\tnotes?: string[];\n};\ntype Params = {\n\taction?: Action;\n\ttitle?: string;\n\tbody?: string;\n\tsubtitle?: string;\n\tstatusKey?: string;\n\tstatus?: string;\n\ticon?: string;\n\tcolor?: string;\n\tworkspaceName?: string;\n\tcwd?: string;\n\tagents?: AgentSpec[];\n\tteamTemplate?: string;\n\ttask?: string;\n\tjobId?: string;\n\tagentId?: string;\n\tvariableName?: string;\n\tvariableValue?: string;\n\tdeadlineSeconds?: number;\n\tdryRun?: boolean;\n\tforce?: boolean;\n\tconfirm?: string;\n\t/** Non-retained launch identity for a fresh fire_task. Unlike jobId, extension identity memory\n\t * never auto-fills this field from an earlier result. */\n\tlaunchKey?: string;\n\t/** Goal this dispatch is scoped to. Goal-bound dispatch wires this through to managed-lane\n\t * ownership and the child process's task-recovery fence. */\n\tgoalId?: string;\n};\n\ntype RunResult = { ok: boolean; status: number | null; stdout: string; stderr: string; error?: string; args: string[] };\ntype TmuxDetection = {\n\tinsideTmux: boolean;\n\ttmuxBin?: string;\n\tcliAvailable: boolean;\n\tversion?: string;\n\tcurrentSession?: string;\n\tsessions: string[];\n\tenv: { tmux?: string; term?: string };\n\terrors: string[];\n};\ntype AgentResult = {\n\tstatus: string;\n\tmarker?: string;\n\tdetectedAt?: string;\n\treason?: string;\n};\ntype VariableState = { updatedAt: string | null; variables: Record<string, unknown> };\ntype FireAgentPlan = {\n\tid: string;\n\tname: string;\n\tprovider: Provider;\n\tcommand?: string;\n\tcwd: string;\n\tdoneMarker: string;\n\tblockedMarker: string;\n\tpromptPath: string;\n\tlogPath: string;\n\tresultPath: string;\n\tpaneId?: string;\n\tresult?: AgentResult;\n\tresourceProfile?: string;\n\tthinkingLevel?: ThinkingLevel;\n\t/** Last turn dispatched to this agent's pane via fire_task (1) or send_followup (>=2). Absent means 1. */\n\tcurrentTurn?: number;\n\t/** Last turn whose terminal handoff was delivered to the parent. Absent means 0 (never notified). */\n\tnotifiedTurn?: number;\n\t/** A follow-up turn durably reserved before its prompt is injected. Reconciliation may re-arm its\n\t * watcher, but never re-injects it: a retry must not duplicate an uncertain external side effect. */\n\tpendingTurn?: number;\n\t/** Mirrors `AgentSpec.worktreeLane` -- carried onto the plan so `applyLaunchProfile` (per-agent\n\t * flags) and the dispatch-phase `reportManagedLane` call can both read it after `buildFireTaskPlan`. */\n\tworktreeLane?: string;\n\t/** Durable host-lifecycle metadata for the current turn. */\n\tdispatchProfileId?: string;\n\tdispatchAuthorizationId?: string;\n\tdispatchAuthorizationKind?: \"profile-derived\" | \"legacy-recovery\";\n\tdispatchAllowedTools?: string[];\n\tdispatchWritePaths?: string[];\n\tdispatchInstructions?: string;\n\tdispatchGoalId?: string;\n\tdispatchLeaseTtlMs?: number;\n};\ntype FireTaskPlan = {\n\tid: string;\n\tcreatedAt: string;\n\tnotifiedAt?: string;\n\tparentSessionFile?: string;\n\tworkspaceName: string;\n\tsessionName: string;\n\tcwd: string;\n\ttask: string;\n\tteamTemplate?: string;\n\tdeadlineSeconds: number;\n\tjobDir: string;\n\tjobPath: string;\n\tvarsPath: string;\n\twatcherPath: string;\n\tagents: FireAgentPlan[];\n\tlaunchCommands: string[];\n\tvariables?: VariableState;\n\t/** Mirrors the follow-up target agent's currentTurn, for external observability (job_status). */\n\tcurrentTurn?: number;\n\t/** Set when session-level reconcile finds the tmux session gone while the job was not terminal. Informational only; nothing is ever killed to produce this state. */\n\torphanedAt?: string;\n\t/** Set by action=dismiss after its pane watchers are detached. The tmux session is left running. */\n\tdismissedAt?: string;\n};\n/** The subset of FireTaskPlan the pane watcher generator actually reads — narrow on purpose so a\n * synthesized single-agent, single-turn spec (send_followup, reconcile resume) can reuse it without\n * fabricating unrelated FireTaskPlan fields (createdAt, jobPath, task, ...). */\ntype PaneWatcherJobSpec = Pick<FireTaskPlan, \"id\" | \"sessionName\" | \"deadlineSeconds\" | \"agents\">;\ntype ManagedLaneDispatchBridge = {\n\tsequence: number;\n\tinstructions: string;\n\tprofileId: string;\n\tprovider: string;\n\tauthorizationId: string;\n\tauthorizationKind: \"profile-derived\" | \"legacy-recovery\";\n\tallowedTools: readonly string[];\n\twritePaths: readonly string[];\n\tleaseTtlMs: number;\n};\ntype ManagedLaneBridgeEventBase = {\n\tlaneId: string;\n\tgoalId?: string;\n\tworktreeLaneKey?: string;\n};\ntype ManagedLaneBridgeEvent =\n\t| (ManagedLaneBridgeEventBase & { phase: \"dispatch\"; dispatch: ManagedLaneDispatchBridge })\n\t| (ManagedLaneBridgeEventBase & {\n\t\t\tphase: \"terminal\";\n\t\t\tstatus?: string;\n\t\t\treasonCode?: string;\n\t\t\tchangedFiles?: string[];\n\t\t\tusage?: Usage;\n\t });\n/** The subset of `ExtensionAPI` this file calls through a narrow local type instead of the full\n * `ExtensionAPI`, so a lightweight test double only needs to implement what a given test path actually\n * exercises. Production hosts provide `reportManagedLane`, making its pre-launch durable reservation a\n * hard gate. The optional shape only preserves standalone extension-test hosts; without the bridge,\n * lifecycle durability is explicitly unavailable. `reportSpawnedUsage` remains an advisory claim sink.\n * `getActiveTools` supplies the parent's current tool surface so a new worker profile can inherit its\n * policy-owned worker-compatible subset without asking the model to reconstruct it. */\ntype HostBridge = {\n\treportManagedLane?: (event: ManagedLaneBridgeEvent) => void;\n\treportSpawnedUsage?: (usage: Usage, opts?: { label?: string; sourceSessionId?: string; reportId?: string }) => void;\n\tgetActiveTools?: () => string[];\n\tgetThinkingLevel?: () => ThinkingLevel;\n\tgetEffectiveResourceProfile?: ExtensionAPI[\"getEffectiveResourceProfile\"];\n};\nfunction agentLaneId(jobId: string, agentId: string): string {\n\treturn `tmux:${jobId}:${agentId}`;\n}\n\nfunction managedDispatch(job: FireTaskPlan, agent: FireAgentPlan): ManagedLaneDispatchBridge {\n\tconst sequence = agent.currentTurn ?? 1;\n\tconst instructions = agent.dispatchInstructions ?? job.task;\n\tconst authorizationId = agent.dispatchAuthorizationId ?? `legacy-job:${job.id}:turn:${sequence}`;\n\treturn {\n\t\tsequence,\n\t\tinstructions,\n\t\tprofileId: agent.dispatchProfileId ?? `tmux:${agent.provider}`,\n\t\tprovider: agent.provider,\n\t\tauthorizationId,\n\t\tauthorizationKind: agent.dispatchAuthorizationKind ?? \"legacy-recovery\",\n\t\tallowedTools: agent.dispatchAllowedTools ?? DEFAULT_MANAGED_WORKER_TOOLS,\n\t\twritePaths: agent.dispatchWritePaths ?? [],\n\t\tleaseTtlMs: agent.dispatchLeaseTtlMs ?? job.deadlineSeconds * 1_000,\n\t};\n}\n\nfunction applyManagedProfile(\n\tagent: FireAgentPlan,\n\tprofile: WorkerLaunchProfile,\n\targs: { instructions: string; goalId?: string; leaseTtlMs: number },\n): void {\n\tagent.dispatchProfileId = profile.identity;\n\tagent.dispatchAuthorizationId = profile.identity;\n\tagent.dispatchAuthorizationKind = \"profile-derived\";\n\tagent.dispatchAllowedTools = [...profile.allowedTools];\n\tagent.dispatchWritePaths = [...profile.writePaths];\n\tapplyManagedTurn(agent, args);\n}\n\nfunction applyManagedTurn(\n\tagent: FireAgentPlan,\n\targs: { instructions: string; goalId?: string; leaseTtlMs: number },\n): void {\n\tagent.dispatchInstructions = args.instructions;\n\tagent.dispatchGoalId = args.goalId;\n\tagent.dispatchLeaseTtlMs = args.leaseTtlMs;\n}\n\nfunction reportManagedDispatchReservations(\n\tbridge: HostBridge,\n\tjob: FireTaskPlan,\n\tagents: readonly FireAgentPlan[],\n): void {\n\tif (!bridge.reportManagedLane) return;\n\tconst attemptedLaneIds: string[] = [];\n\ttry {\n\t\tfor (const agent of agents) {\n\t\t\tconst laneId = agentLaneId(job.id, agent.id);\n\t\t\tattemptedLaneIds.push(laneId);\n\t\t\tbridge.reportManagedLane({\n\t\t\t\tlaneId,\n\t\t\t\tphase: \"dispatch\",\n\t\t\t\tgoalId: agent.dispatchGoalId,\n\t\t\t\tworktreeLaneKey: agent.worktreeLane,\n\t\t\t\tdispatch: managedDispatch(job, agent),\n\t\t\t});\n\t\t}\n\t} catch (error: unknown) {\n\t\tfor (const laneId of attemptedLaneIds) {\n\t\t\ttry {\n\t\t\t\tbridge.reportManagedLane({\n\t\t\t\t\tlaneId,\n\t\t\t\t\tphase: \"terminal\",\n\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\treasonCode: \"managed_process_launch_reservation_failed\",\n\t\t\t\t});\n\t\t\t} catch {\n\t\t\t\t// Preserve the reservation error; durable leases fence any compensation failure.\n\t\t\t}\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nfunction reportManagedLaunchFailure(bridge: HostBridge, job: FireTaskPlan, reasonCode: string): void {\n\tif (!bridge.reportManagedLane) return;\n\tfor (const agent of job.agents) {\n\t\treportManagedAgentFailure(bridge, job.id, agent.id, reasonCode);\n\t}\n}\n\nfunction reportManagedAgentFailure(bridge: HostBridge, jobId: string, agentId: string, reasonCode: string): void {\n\tif (!bridge.reportManagedLane) return;\n\ttry {\n\t\tbridge.reportManagedLane({\n\t\t\tlaneId: agentLaneId(jobId, agentId),\n\t\t\tphase: \"terminal\",\n\t\t\tstatus: \"failed\",\n\t\t\treasonCode,\n\t\t});\n\t} catch {\n\t\t// Preserve the launch failure; durable leases fence any terminal-report failure.\n\t}\n}\n\nconst EXTENSION_ROOT = path.dirname(fileURLToPath(import.meta.url));\nexport function getTmuxAgentManagerDataRoot(): string {\n\tconst agentDir =\n\t\tprocess.env.PI_ADAPTATIVE_CODING_AGENT_DIR ||\n\t\tprocess.env[\"PI-ADAPTATIVE_CODING_AGENT_DIR\"] ||\n\t\tprocess.env.PI_CODING_AGENT_DIR ||\n\t\tprocess.env.PI_AGENT_DIR ||\n\t\tpath.join(homedir(), \".pi\", \"agent\");\n\treturn getProcessWorkRun(agentDir, \"background\", \"tmux-agent-manager\", \"state\").path;\n}\nfunction jobsRoot(): string {\n\treturn path.join(getTmuxAgentManagerDataRoot(), \"jobs\");\n}\nfunction archiveRoot(): string {\n\treturn path.join(getTmuxAgentManagerDataRoot(), \"archives\");\n}\nfunction templateDirs(): string[] {\n\treturn [path.join(EXTENSION_ROOT, \"templates\"), path.join(getTmuxAgentManagerDataRoot(), \"templates\")];\n}\nconst MAX_OUTPUT = 12_000;\nconst DEFAULT_AGENT_PROVIDERS: Provider[] = [\"pi\", \"agy\", \"codex\"];\nconst PROVIDER_COMMANDS: Record<Provider, string> = {\n\tpi: \"pi\",\n\tcodex: \"codex\",\n\tagy: \"agy\",\n\tclaude: \"claude\",\n\topencode: \"opencode\",\n\tcustom: \"\",\n};\nfunction providerSchema(description?: string) {\n\treturn Type.Union(\n\t\t[\n\t\t\tType.Literal(\"pi\"),\n\t\t\tType.Literal(\"codex\"),\n\t\t\tType.Literal(\"agy\"),\n\t\t\tType.Literal(\"claude\"),\n\t\t\tType.Literal(\"opencode\"),\n\t\t\tType.Literal(\"custom\"),\n\t\t],\n\t\tdescription === undefined ? {} : { description },\n\t);\n}\nconst DEFAULT_DEADLINE_SECONDS = 20 * 60;\nconst MAX_DEADLINE_SECONDS = 24 * 60 * 60;\nconst TEAM_TEMPLATES: TeamTemplate[] = [\n\t{\n\t\tname: \"provider-prompt-smoke\",\n\t\tdescription:\n\t\t\t\"Real minimal interactive prompt smoke for native Claude, Agy, and Pi. Consumes provider/model tokens.\",\n\t\tdeadlineSeconds: 10 * 60,\n\t\tagents: [\n\t\t\t{ provider: \"claude\", name: \"claude-prompt-smoke\" },\n\t\t\t{ provider: \"agy\", name: \"agy-prompt-smoke\" },\n\t\t\t{ provider: \"pi\", name: \"pi-prompt-smoke\" },\n\t\t],\n\t\tnotes: [\n\t\t\t\"Use only when model-token/auth validation is intended.\",\n\t\t\t\"The manager arms pane capture, starts each CLI with its task, and watches DONE/BLOCKED markers.\",\n\t\t],\n\t},\n\t{\n\t\tname: \"full-provider-review\",\n\t\tdescription:\n\t\t\t\"Interactive native-provider review team: Pi lead, Claude reviewer, Agy validator, Agy reviewer. Consumes provider/model tokens.\",\n\t\tdeadlineSeconds: 30 * 60,\n\t\tagents: [\n\t\t\t{ provider: \"pi\", name: \"pi-lead\" },\n\t\t\t{ provider: \"claude\", name: \"claude-reviewer\" },\n\t\t\t{ provider: \"agy\", name: \"agy-validator\" },\n\t\t\t{ provider: \"agy\", name: \"agy-reviewer\" },\n\t\t],\n\t\tnotes: [\n\t\t\t\"Best for non-trivial review/QA where independent native CLIs help.\",\n\t\t\t\"Keep the task objective bounded; inspect captured panes/result files before accepting PASS.\",\n\t\t],\n\t},\n\t{\n\t\tname: \"builder-validator\",\n\t\tdescription:\n\t\t\t\"Interactive implementation loop: Agy builder, Claude reviewer, Agy validator, Pi coordinator. Good default for scoped code work.\",\n\t\tdeadlineSeconds: 25 * 60,\n\t\tagents: [\n\t\t\t{ provider: \"agy\", name: \"builder\" },\n\t\t\t{ provider: \"claude\", name: \"code-reviewer\" },\n\t\t\t{ provider: \"agy\", name: \"validator\" },\n\t\t\t{ provider: \"pi\", name: \"coordinator\" },\n\t\t],\n\t\tnotes: [\n\t\t\t\"Use for implementation/QA batches; never claim complete until result files and validation evidence are inspected.\",\n\t\t],\n\t},\n];\n\nfunction cap(text: string, max = MAX_OUTPUT): string {\n\treturn text.length <= max ? text : `${text.slice(0, max)}\\n...[truncated ${text.length - max} chars]`;\n}\nfunction firstString(...values: unknown[]): string | undefined {\n\tfor (const value of values) if (typeof value === \"string\" && value.trim()) return value.trim();\n\treturn undefined;\n}\nfunction errorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\nfunction clampInt(value: unknown, fallback: number, min: number, max: number): number {\n\tif (typeof value !== \"number\" || !Number.isFinite(value)) return fallback;\n\treturn Math.max(min, Math.min(max, Math.trunc(value)));\n}\nfunction findExecutable(name: string): string | undefined {\n\tfor (const dir of (process.env.PATH || \"\").split(path.delimiter)) {\n\t\tif (!dir) continue;\n\t\tconst candidate = path.join(dir, process.platform === \"win32\" ? `${name}.exe` : name);\n\t\ttry {\n\t\t\tif (fs.statSync(candidate).isFile()) return candidate;\n\t\t} catch {\n\t\t\t/* ignore */\n\t\t}\n\t}\n\treturn undefined;\n}\nfunction quoteShell(value: string): string {\n\treturn `'${value.replace(/'/g, `'\\\\''`)}'`;\n}\nfunction ensureDir(dir: string): void {\n\tfs.mkdirSync(dir, { recursive: true, mode: 0o700 });\n}\nfunction resolveCwd(ctx: ExtensionContext, requested?: string): string {\n\tconst cwd = path.resolve(ctx.cwd || process.cwd(), requested?.trim() || \".\");\n\tconst stat = fs.statSync(cwd);\n\tif (!stat.isDirectory()) throw new Error(`cwd is not a directory: ${cwd}`);\n\treturn cwd;\n}\nfunction safeName(value: string, fallback = \"pi-agents\"): string {\n\tconst safe = value\n\t\t.toLowerCase()\n\t\t.replace(/[^a-z0-9_.:-]+/g, \"-\")\n\t\t.replace(/^-+|-+$/g, \"\")\n\t\t.slice(0, 60);\n\treturn safe || fallback;\n}\nfunction makeJobId(): string {\n\treturn `tmux-${Date.now().toString(36)}-${crypto.randomBytes(4).toString(\"hex\")}`;\n}\nfunction safeStatusKey(value?: string): string {\n\tconst raw = value?.trim() || \"pi-agents\";\n\tif (!/^[a-zA-Z0-9_.:-]{1,80}$/.test(raw))\n\t\tthrow new Error(\"statusKey must be 1-80 chars: letters, numbers, _, ., :, or -\");\n\treturn raw;\n}\n\nfunction runTmux(args: string[], timeoutMs = 5_000): RunResult {\n\tconst tmux = process.env.PI_TMUX_MANAGER_TMUX_BIN || findExecutable(\"tmux\") || \"tmux\";\n\tconst result = spawnSync(tmux, args, {\n\t\tencoding: \"utf8\",\n\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\ttimeout: timeoutMs,\n\t\tmaxBuffer: 256 * 1024,\n\t});\n\treturn {\n\t\tok: !result.error && result.status === 0,\n\t\tstatus: result.status,\n\t\tstdout: cap(result.stdout || \"\"),\n\t\tstderr: cap(result.stderr || \"\"),\n\t\terror: result.error ? String(result.error.message || result.error) : undefined,\n\t\targs: [tmux, ...args],\n\t};\n}\nfunction requireTmuxRun(result: RunResult, action: string): void {\n\tif (!result.ok) throw new Error(`${action} failed: ${result.error || result.stderr || `exit ${result.status}`}`);\n}\nfunction detectTmux(): TmuxDetection {\n\tconst tmuxBin = process.env.PI_TMUX_MANAGER_TMUX_BIN || findExecutable(\"tmux\");\n\tconst errors: string[] = [];\n\tlet version: string | undefined;\n\tlet currentSession: string | undefined;\n\tlet sessions: string[] = [];\n\tconst insideTmux = Boolean(process.env.TMUX);\n\tif (!tmuxBin) errors.push(\"tmux CLI not found on PATH.\");\n\telse {\n\t\tconst versionRun = runTmux([\"-V\"], 2_000);\n\t\tif (versionRun.ok) version = versionRun.stdout.trim();\n\t\telse errors.push(`tmux -V failed: ${versionRun.error || versionRun.stderr || `exit ${versionRun.status}`}`);\n\t\tconst listRun = runTmux([\"list-sessions\", \"-F\", \"#{session_name}\"]);\n\t\tif (listRun.ok) sessions = listRun.stdout.trim() ? listRun.stdout.trim().split(/\\n+/) : [];\n\t\telse if (!/no server running/i.test(listRun.stderr))\n\t\t\terrors.push(`tmux list-sessions failed: ${listRun.error || listRun.stderr || `exit ${listRun.status}`}`);\n\t\tif (insideTmux) {\n\t\t\tconst sessionRun = runTmux([\"display-message\", \"-p\", \"#S\"], 2_000);\n\t\t\tif (sessionRun.ok) currentSession = sessionRun.stdout.trim();\n\t\t}\n\t}\n\treturn {\n\t\tinsideTmux,\n\t\ttmuxBin,\n\t\tcliAvailable: Boolean(tmuxBin),\n\t\tversion,\n\t\tcurrentSession,\n\t\tsessions,\n\t\tenv: { tmux: process.env.TMUX, term: process.env.TERM },\n\t\terrors,\n\t};\n}\nfunction formatDetection(d: TmuxDetection): string {\n\treturn [\n\t\t`tmux: ${d.cliAvailable ? \"available\" : \"missing\"}`,\n\t\td.tmuxBin ? `bin: ${d.tmuxBin}` : undefined,\n\t\td.version ? `version: ${d.version}` : undefined,\n\t\t`insideTmux: ${d.insideTmux}`,\n\t\td.currentSession ? `currentSession: ${d.currentSession}` : undefined,\n\t\td.sessions.length ? `sessions: ${d.sessions.join(\", \")}` : \"sessions: none\",\n\t\td.errors.length ? `errors:\\n- ${d.errors.join(\"\\n- \")}` : undefined,\n\t]\n\t\t.filter(Boolean)\n\t\t.join(\"\\n\");\n}\nfunction setupHelp(d: TmuxDetection): string {\n\tif (d.cliAvailable)\n\t\treturn `tmux CLI available: ${d.tmuxBin || \"tmux\"}\\nUse native delegate for ordinary subagents. Use tmux_agent_manager when a persistent interactive provider pane benefits the task; set dryRun=true only when a preview is useful.`;\n\treturn [\n\t\t\"tmux CLI not found.\",\n\t\t\"Ordinary subagents remain available through native delegate; do not abort delegation.\",\n\t\t\"Install tmux only if persistent interactive provider panes are required, then reload Pi:\",\n\t\t\"- Debian/Ubuntu/WSL: sudo apt-get install tmux\",\n\t\t\"- Fedora: sudo dnf install tmux\",\n\t\t\"- Arch: sudo pacman -S tmux\",\n\t\t\"- macOS: brew install tmux\",\n\t\t\"- Native Windows: use native delegate. WSL may use tmux when it is installed on PATH.\",\n\t\t\"cmux is macOS-only and intentionally not used by this tmux manager.\",\n\t].join(\"\\n\");\n}\nasync function guardTmux(_ctx: ExtensionContext, detection: TmuxDetection, purpose: string) {\n\tif (detection.cliAvailable) return { allowed: true, text: `tmux available for ${purpose}.` };\n\treturn {\n\t\tallowed: false,\n\t\ttext: `${setupHelp(detection)}\\n\\nTmux route unavailable. Continue ordinary subagent work with native delegate.`,\n\t};\n}\nfunction tmuxManagerInstructions(toolName: string, detection: TmuxDetection): string {\n\treturn [\n\t\t`tmux is available (${detection.version || detection.tmuxBin || \"tmux\"}). Native delegate remains the standard subagent route. Use tmux_agent_manager when managed ${toolName} panes need persistent interactive provider processes.`,\n\t\t\"Suggested next call:\",\n\t\t'tmux_agent_manager({ action: \"fire_task\", teamTemplate: \"builder-validator\", task: \"<objective>\" })',\n\t\t\"The launch returns after pane capture is armed and each provider command receives its initial task.\",\n\t\t\"Managed mode creates panes, prompt files, result files, event-driven terminal handoffs, tmux display-message notifications, @pi_* status options, shared variables, and one-shot deadlines.\",\n\t].join(\"\\n\");\n}\nfunction validateTemplate(value: unknown, source: string): TeamTemplate {\n\tif (!value || typeof value !== \"object\") throw new Error(`${source}: template must be an object`);\n\tconst template = value as TeamTemplate;\n\tif (!firstString(template.name)) throw new Error(`${source}: missing name`);\n\tif (!firstString(template.description)) throw new Error(`${source}: missing description`);\n\tif (!Array.isArray(template.agents) || template.agents.length < 1)\n\t\tthrow new Error(`${source}: agents must be a non-empty array`);\n\tif (template.agents.length > 12) throw new Error(`${source}: agents max is 12`);\n\ttemplate.agents.forEach((agent, index) => {\n\t\tconst provider = agent.provider || \"custom\";\n\t\tif (!Object.hasOwn(PROVIDER_COMMANDS, provider))\n\t\t\tthrow new Error(`${source}: unsupported provider at agents[${index}]: ${provider}`);\n\t\tif (provider === \"custom\" && !firstString(agent.command))\n\t\t\tthrow new Error(`${source}: custom agent ${agent.name || index} needs command`);\n\t});\n\treturn template;\n}\nfunction loadTemplateFiles(): { templates: TeamTemplate[]; errors: string[] } {\n\tconst templates: TeamTemplate[] = [];\n\tconst errors: string[] = [];\n\tfor (const dir of templateDirs()) {\n\t\tlet entries: fs.Dirent[] = [];\n\t\ttry {\n\t\t\tentries = fs.readdirSync(dir, { withFileTypes: true });\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const entry of entries) {\n\t\t\tif (!entry.isFile() || !entry.name.endsWith(\".json\")) continue;\n\t\t\tconst filePath = path.join(dir, entry.name);\n\t\t\ttry {\n\t\t\t\tconst parsed = JSON.parse(fs.readFileSync(filePath, \"utf8\"));\n\t\t\t\ttemplates.push(validateTemplate(parsed, filePath));\n\t\t\t} catch (error: unknown) {\n\t\t\t\terrors.push(`${filePath}: ${errorMessage(error)}`);\n\t\t\t}\n\t\t}\n\t}\n\treturn { templates, errors };\n}\nfunction getTeamTemplates(): { templates: TeamTemplate[]; errors: string[] } {\n\tconst byName = new Map<string, TeamTemplate>();\n\tfor (const template of TEAM_TEMPLATES) byName.set(template.name.toLowerCase(), template);\n\tconst loaded = loadTemplateFiles();\n\tfor (const template of loaded.templates) byName.set(template.name.toLowerCase(), template);\n\treturn { templates: Array.from(byName.values()), errors: loaded.errors };\n}\nfunction findTeamTemplate(name?: string): TeamTemplate | undefined {\n\tif (!name) return undefined;\n\tconst wanted = name.trim().toLowerCase();\n\treturn getTeamTemplates().templates.find((template) => template.name.toLowerCase() === wanted);\n}\nfunction requireTeamTemplate(name?: string): TeamTemplate {\n\tconst { templates, errors } = getTeamTemplates();\n\tconst wanted = name?.trim().toLowerCase();\n\tconst template = wanted ? templates.find((item) => item.name.toLowerCase() === wanted) : undefined;\n\tif (!template)\n\t\tthrow new Error(\n\t\t\t`unknown teamTemplate '${name || \"\"}'. Use action=list_templates.${errors.length ? ` Template load errors: ${errors.join(\"; \")}` : \"\"}`,\n\t\t);\n\treturn template;\n}\nfunction templateSummary(): { text: string; templates: TeamTemplate[]; errors: string[] } {\n\tconst loaded = getTeamTemplates();\n\tconst lines = loaded.templates.map((template) => `- ${template.name}: ${template.description}`);\n\tif (loaded.errors.length) lines.push(\"\", \"Template load errors:\", ...loaded.errors.map((error) => `- ${error}`));\n\treturn { text: lines.join(\"\\n\"), ...loaded };\n}\nfunction formatTemplate(template: TeamTemplate): string {\n\treturn JSON.stringify(template, null, 2);\n}\nfunction templateDefaults(params: Params): Partial<TeamTemplate> {\n\treturn findTeamTemplate(params.teamTemplate) || {};\n}\n\nfunction normalizeAgents(params: Params): AgentSpec[] {\n\tconst template = findTeamTemplate(params.teamTemplate);\n\tconst input: AgentSpec[] = params.agents?.length\n\t\t? params.agents\n\t\t: template?.agents?.length\n\t\t\t? template.agents\n\t\t\t: DEFAULT_AGENT_PROVIDERS.map((provider) => ({ provider }));\n\tif (input.length < 1) throw new Error(\"agents must contain at least one agent\");\n\tif (input.length > 12) throw new Error(\"agents max is 12\");\n\treturn input.map((agent, index) => {\n\t\tconst provider = agent.provider || \"custom\";\n\t\tif (!Object.hasOwn(PROVIDER_COMMANDS, provider)) throw new Error(`unsupported provider: ${provider}`);\n\t\tconst name =\n\t\t\tfirstString(agent.name, provider === \"custom\" ? `custom-${index + 1}` : provider) || `agent-${index + 1}`;\n\t\tconst command = firstString(agent.command, PROVIDER_COMMANDS[provider]);\n\t\tif (!command) throw new Error(`agent ${name} needs command when provider=custom`);\n\t\tconst tools = Array.isArray(agent.tools) && agent.tools.length > 0 ? agent.tools : undefined;\n\t\tconst resourceProfile = firstString(agent.resourceProfile);\n\t\tif (provider !== \"pi\" && (tools || resourceProfile || agent.thinkingLevel || agent.worktreeLane)) {\n\t\t\tthrow new Error(\n\t\t\t\t`agent ${name}: tools, resourceProfile, thinkingLevel, and worktreeLane overrides are Pi-only; configure ${provider}'s native CLI in command instead`,\n\t\t\t);\n\t\t}\n\t\treturn {\n\t\t\tprovider,\n\t\t\tname,\n\t\t\tcommand,\n\t\t\tpath: firstString(agent.path),\n\t\t\tcwd: agent.cwd,\n\t\t\ttools,\n\t\t\tresourceProfile,\n\t\t\tthinkingLevel: agent.thinkingLevel,\n\t\t\tworktreeLane: agent.worktreeLane,\n\t\t};\n\t});\n}\nfunction defaultProviderInvocation(provider: Provider): string {\n\tswitch (provider) {\n\t\tcase \"pi\":\n\t\t\treturn \"pi\";\n\t\tcase \"agy\":\n\t\t\treturn \"agy\";\n\t\tcase \"codex\":\n\t\t\treturn \"codex\";\n\t\tcase \"claude\":\n\t\t\treturn \"claude\";\n\t\tcase \"opencode\":\n\t\t\treturn \"opencode\";\n\t\tcase \"custom\":\n\t\t\treturn \"\";\n\t}\n}\nfunction interactivePromptText(prompt: string): string {\n\treturn prompt.replace(/\\r?\\n/g, \"\\\\n\");\n}\nfunction initialPromptInvocation(command: string, provider: Provider, promptPath: string): string {\n\tconst promptArgument = `\"$(cat ${quoteShell(promptPath)})\"`;\n\tif (provider === \"agy\" && !/(?:^|\\s)(?:-i|--prompt-interactive)(?:\\s|$)/.test(command)) {\n\t\treturn `${command} --prompt-interactive ${promptArgument}`;\n\t}\n\treturn `${command} ${promptArgument}`;\n}\nfunction spellMarker(marker: string): string {\n\treturn marker.split(\"\").join(\" \");\n}\nfunction managedPrompt(\n\ttask: string,\n\tjobId: string,\n\tagent: { name: string; provider: Provider },\n\tdoneMarker: string,\n\tblockedMarker: string,\n\tvarsPath: string,\n): string {\n\treturn [\n\t\t`You are ${agent.name} (${agent.provider}) working inside a tmux-managed Pi worker pane.`,\n\t\t`Job id: ${jobId}`,\n\t\t`Shared variable file: ${varsPath}`,\n\t\t\"\",\n\t\t\"Objective:\",\n\t\ttask,\n\t\t\"\",\n\t\t\"Rules:\",\n\t\t\"- Work autonomously until honest PASS or BLOCKED.\",\n\t\t\"- Verify important claims before PASS; include concise evidence.\",\n\t\t\"- Use the assigned profile without asking for routine permission. Report BLOCKED only when missing external information or an unavailable dependency makes the objective impossible.\",\n\t\t\"- Never print secrets/tokens. Prompts, commands, and logs persist under ~/.pi/agent/work/background/tmux-agent-manager/state/jobs.\",\n\t\t\"- If a task names an external decision variable, read it only at the decision point; never loop or poll the shared JSON file.\",\n\t\t\"\",\n\t\t\"Completion contract:\",\n\t\t\"Your final response must contain exactly one marker line. Build it by removing spaces from one of these character sequences:\",\n\t\t` DONE: ${spellMarker(doneMarker)}`,\n\t\t` BLOCKED: ${spellMarker(blockedMarker)}`,\n\t\t\"If BLOCKED, print a short reason on the next line. Do not print either marker until the final answer. After marker, stop.\",\n\t].join(\"\\n\");\n}\nfunction buildWorkspacePlan(ctx: ExtensionContext, params: Params) {\n\tconst cwd = resolveCwd(ctx, params.cwd);\n\tconst agents = normalizeAgents(params).map((agent, index) => ({\n\t\t...agent,\n\t\tcwd: resolveCwd(ctx, agent.path || agent.cwd || cwd),\n\t\tid: `${safeName(agent.name || agent.provider || \"agent\")}-${index + 1}`,\n\t}));\n\tconst workspaceName = firstString(params.workspaceName, `pi-agents-${Date.now().toString(36)}`) || \"pi-agents\";\n\tconst sessionName = safeName(workspaceName, \"pi-agents\");\n\tconst launchCommands = agents.map(\n\t\t(agent) => `tmux pane: ${agent.name} -> cd ${quoteShell(agent.cwd)} && ${agent.command}`,\n\t);\n\treturn { workspaceName, sessionName, cwd, agents, launchCommands };\n}\nexport function makePaneWatcherScript(job: PaneWatcherJobSpec): string {\n\tconst agentCases = job.agents.flatMap((agent) => [\n\t\t` ${agent.id})`,\n\t\t` agent_name=${quoteShell(agent.name)}`,\n\t\t` agent_id_json=${quoteShell(JSON.stringify(agent.id))}`,\n\t\t` agent_name_json=${quoteShell(JSON.stringify(agent.name))}`,\n\t\t` done_marker=${quoteShell(agent.doneMarker)}`,\n\t\t` blocked_marker=${quoteShell(agent.blockedMarker)}`,\n\t\t` log_path=${quoteShell(agent.logPath)}`,\n\t\t` log_path_json=${quoteShell(JSON.stringify(agent.logPath))}`,\n\t\t` result_path=${quoteShell(agent.resultPath)}`,\n\t\t` stop_request_path=${quoteShell(`${agent.resultPath}.stop-requested`)}`,\n\t\t` pane_id=${quoteShell(agent.paneId || \"\")}`,\n\t\t` pane_id_json=${quoteShell(JSON.stringify(agent.paneId || null))}`,\n\t\t\" ;;\",\n\t]);\n\treturn [\n\t\t\"#!/bin/sh\",\n\t\t\"set -eu\",\n\t\t\"umask 077\",\n\t\t\"LC_ALL=C\",\n\t\t\"export LC_ALL\",\n\t\t`job_id=${quoteShell(job.id)}`,\n\t\t`job_id_json=${quoteShell(JSON.stringify(job.id))}`,\n\t\t`session_name=${quoteShell(job.sessionName)}`,\n\t\t`deadline=${Math.max(1, job.deadlineSeconds)}`,\n\t\t// biome-ignore lint/suspicious/noTemplateCurlyInString: POSIX shell parameter expansion.\n\t\t\"agent_id=${1:-}\",\n\t\t'case \"$agent_id\" in',\n\t\t...agentCases,\n\t\t\" *) printf 'unknown tmux agent id: %s\\\\n' \\\"$agent_id\\\" >&2; exit 2 ;;\",\n\t\t\"esac\",\n\t\t\"lock_path=$result_path.lock\",\n\t\t\"status_path=$result_path.status.$$\",\n\t\t\"timer_pid=\",\n\t\t\"awk_pid=\",\n\t\t\"finish() {\",\n\t\t\" status=$1\",\n\t\t\" notified_by=$2\",\n\t\t' [ ! -e \"$result_path\" ] || return 0',\n\t\t' mkdir \"$lock_path\" 2>/dev/null || return 0',\n\t\t\" finished_at=$(date -u +%Y-%m-%dT%H:%M:%SZ)\",\n\t\t\" temporary=$result_path.tmp.$$\",\n\t\t' printf \\'{\\\\n \"jobId\": %s,\\\\n \"agentId\": %s,\\\\n \"agentName\": %s,\\\\n \"status\": \"%s\",\\\\n \"exitCode\": null,\\\\n \"logPath\": %s,\\\\n \"paneId\": %s,\\\\n \"finishedAt\": \"%s\",\\\\n \"notifiedBy\": \"%s\"\\\\n}\\\\n\\' \\\\',\n\t\t' \"$job_id_json\" \"$agent_id_json\" \"$agent_name_json\" \"$status\" \"$log_path_json\" \"$pane_id_json\" \"$finished_at\" \"$notified_by\" > \"$temporary\"',\n\t\t' mv \"$temporary\" \"$result_path\"',\n\t\t' rm -f \"$stop_request_path\"',\n\t\t\" option_suffix=$(printf '%s' \\\"$job_id-$agent_id\\\" | tr -c 'A-Za-z0-9_.:-' '-')\",\n\t\t' tmux set-option -t \"$session_name\" \"@pi_$option_suffix\" \"$status\" >/dev/null 2>&1 || true',\n\t\t' tmux set-option -t \"$session_name\" \"@pi_$job_id\" \"$status:$agent_name\" >/dev/null 2>&1 || true',\n\t\t' tmux display-message -t \"$session_name\" \"tmux agent $agent_name: $status (job $job_id)\" >/dev/null 2>&1 || true',\n\t\t\"}\",\n\t\t\"cleanup() {\",\n\t\t' [ -z \"$timer_pid\" ] || kill \"$timer_pid\" 2>/dev/null || true',\n\t\t' [ -z \"$awk_pid\" ] || kill \"$awk_pid\" 2>/dev/null || true',\n\t\t' rm -f \"$status_path\"',\n\t\t\"}\",\n\t\t\"terminate() { cleanup; exit 0; }\",\n\t\t\"trap terminate TERM INT HUP\",\n\t\t\"trap cleanup EXIT\",\n\t\t\"parent_pid=$$\",\n\t\t\"exec 3<&0\",\n\t\t\"(\",\n\t\t\" sleep_pid=\",\n\t\t' stop_timer() { [ -z \"$sleep_pid\" ] || kill \"$sleep_pid\" 2>/dev/null || true; exit 0; }',\n\t\t\" trap stop_timer TERM INT HUP\",\n\t\t' sleep \"$deadline\" &',\n\t\t\" sleep_pid=$!\",\n\t\t' wait \"$sleep_pid\" 2>/dev/null || exit 0',\n\t\t\" sleep_pid=\",\n\t\t' if [ -e \"$stop_request_path\" ]; then',\n\t\t\" finish stopped stop-requested-event\",\n\t\t\" else\",\n\t\t\" finish timeout deadline-event\",\n\t\t' [ -z \"$pane_id\" ] || tmux kill-pane -t \"$pane_id\" >/dev/null 2>&1 || true',\n\t\t\" fi\",\n\t\t' kill -TERM \"$parent_pid\" 2>/dev/null || true',\n\t\t\") &\",\n\t\t\"timer_pid=$!\",\n\t\t\"logged_bytes=0\",\n\t\t'[ ! -f \"$log_path\" ] || logged_bytes=$(wc -c < \"$log_path\" | tr -d \\' \\')',\n\t\t'awk -v done=\"$done_marker\" -v blocked=\"$blocked_marker\" -v log_file=\"$log_path\" -v status_file=\"$status_path\" -v logged=\"$logged_bytes\" -v max=4194304 -v esc=\"$(printf \\'\\\\033\\')\" \\'',\n\t\t'function settle(status, reason) { print status \"|\" reason > status_file; close(status_file); settled = 1; exit }',\n\t\t\"{\",\n\t\t\" raw = $0 ORS\",\n\t\t\" remaining = max - logged\",\n\t\t' if (remaining > 0) { if (length(raw) > remaining) raw = substr(raw, 1, remaining); printf \"%s\", raw >> log_file; logged += length(raw) }',\n\t\t\" clean = $0\",\n\t\t' gsub(esc \"\\\\\\\\[[0-9;?]*[ -/]*[@-~]\", \"\", clean)',\n\t\t' gsub(/\\\\r/, \"\", clean)',\n\t\t' sub(/^[ \\\\t]+/, \"\", clean); sub(/[ \\\\t]+$/, \"\", clean)',\n\t\t' if (clean == done) settle(\"done\", \"pane-output-event\")',\n\t\t' if (clean == blocked) settle(\"blocked\", \"pane-output-event\")',\n\t\t\"}\",\n\t\t'END { if (!settled) { print \"failed|pane-stream-ended\" > status_file; close(status_file) } }',\n\t\t\"' <&3 &\",\n\t\t\"awk_pid=$!\",\n\t\t'wait \"$awk_pid\" || true',\n\t\t\"awk_pid=\",\n\t\t'kill \"$timer_pid\" 2>/dev/null || true',\n\t\t'wait \"$timer_pid\" 2>/dev/null || true',\n\t\t\"timer_pid=\",\n\t\t'if [ -e \"$stop_request_path\" ]; then',\n\t\t\" finish stopped stop-requested-event\",\n\t\t'elif [ -f \"$status_path\" ]; then',\n\t\t' terminal=$(cat \"$status_path\")',\n\t\t// biome-ignore lint/suspicious/noTemplateCurlyInString: POSIX shell parameter expansion.\n\t\t' finish \"${terminal%%|*}\" \"${terminal#*|}\"',\n\t\t\"else\",\n\t\t\" finish failed watcher-status-missing\",\n\t\t\"fi\",\n\t\t\"exit 0\",\n\t].join(\"\\n\");\n}\nfunction buildFireTaskPlan(ctx: ExtensionContext, params: Params): FireTaskPlan {\n\tconst defaults = templateDefaults(params);\n\tconst task = firstString(params.task, params.body);\n\tif (!task) throw new Error(\"fire_task requires task (or body) with the worker objective\");\n\tconst cwd = resolveCwd(ctx, params.cwd);\n\tconst id = firstString(params.launchKey) || makeJobId();\n\tif (!/^[a-zA-Z0-9_.:-]{4,80}$/.test(id))\n\t\tthrow new Error(\"launchKey must be 4-80 chars: letters, numbers, _, ., :, or -\");\n\tconst jobDir = path.join(jobsRoot(), id);\n\tconst workspaceName = firstString(params.workspaceName, `Pi job ${id}`) || `Pi job ${id}`;\n\tconst sessionName = safeName(workspaceName, id);\n\tconst rawAgents = normalizeAgents(params);\n\tconst agents: FireAgentPlan[] = rawAgents.map((agent, index) => {\n\t\tconst provider = agent.provider || \"custom\";\n\t\tconst agentCwd = resolveCwd(ctx, agent.path || agent.cwd || cwd);\n\t\tconst slug = `${safeName(agent.name || provider)}-${index + 1}`;\n\t\tconst markerBase = `TMUX_${crypto.createHash(\"sha1\").update(`${id}:${slug}`).digest(\"hex\").slice(0, 10).toUpperCase()}`;\n\t\tconst doneMarker = `${markerBase}_DONE`;\n\t\tconst blockedMarker = `${markerBase}_BLOCKED`;\n\t\treturn {\n\t\t\tid: slug,\n\t\t\tname: firstString(agent.name, provider) || slug,\n\t\t\tprovider,\n\t\t\tcommand: firstString(agent.command, PROVIDER_COMMANDS[provider]),\n\t\t\tcwd: agentCwd,\n\t\t\tdispatchAllowedTools: agent.tools ? [...agent.tools] : undefined,\n\t\t\tdispatchWritePaths: agent.path ? [agentCwd] : undefined,\n\t\t\tdoneMarker,\n\t\t\tblockedMarker,\n\t\t\tpromptPath: path.join(jobDir, `${slug}.prompt.md`),\n\t\t\tlogPath: path.join(jobDir, `${slug}.log`),\n\t\t\tresultPath: path.join(jobDir, `${slug}.result.json`),\n\t\t\tworktreeLane: agent.worktreeLane,\n\t\t\tresourceProfile: agent.resourceProfile,\n\t\t\tthinkingLevel: agent.thinkingLevel,\n\t\t};\n\t});\n\tconst job: FireTaskPlan = {\n\t\tid,\n\t\tcreatedAt: new Date().toISOString(),\n\t\tparentSessionFile: ctx.sessionManager.getSessionFile(),\n\t\tworkspaceName,\n\t\tsessionName,\n\t\tcwd,\n\t\ttask,\n\t\tteamTemplate: params.teamTemplate,\n\t\tdeadlineSeconds: clampInt(\n\t\t\tparams.deadlineSeconds,\n\t\t\tdefaults.deadlineSeconds || DEFAULT_DEADLINE_SECONDS,\n\t\t\t5,\n\t\t\tMAX_DEADLINE_SECONDS,\n\t\t),\n\t\tjobDir,\n\t\tjobPath: path.join(jobDir, \"job.json\"),\n\t\tvarsPath: path.join(jobDir, \"variables.json\"),\n\t\twatcherPath: path.join(jobDir, \"pane-watcher.sh\"),\n\t\tagents,\n\t\tlaunchCommands: [],\n\t};\n\tjob.launchCommands = agents.map(\n\t\t(agent) =>\n\t\t\t`${agent.command || defaultProviderInvocation(agent.provider)} with initial task from ${path.basename(agent.promptPath)}`,\n\t);\n\treturn job;\n}\nfunction archiveExistingJobDir(jobDir: string): string {\n\tconst root = archiveRoot();\n\tensureDir(root);\n\tconst target = path.join(root, `${path.basename(jobDir)}-${new Date().toISOString().replace(/[:.]/g, \"-\")}`);\n\tfs.renameSync(jobDir, target);\n\treturn target;\n}\nfunction prepareJobDirForLaunch(job: FireTaskPlan, force?: boolean): string | undefined {\n\tif (!fs.existsSync(job.jobDir)) return undefined;\n\tif (!force)\n\t\tthrow new Error(\n\t\t\t`tmux job already exists: ${job.id}. Use a new launchKey, or pass force:true to archive the old job before launching.`,\n\t\t);\n\treturn archiveExistingJobDir(job.jobDir);\n}\nfunction writeFireTaskFiles(job: FireTaskPlan): void {\n\tensureDir(job.jobDir);\n\tif (!fs.existsSync(job.varsPath))\n\t\tfs.writeFileSync(job.varsPath, `${JSON.stringify({ updatedAt: null, variables: {} }, null, 2)}\\n`, {\n\t\t\tmode: 0o600,\n\t\t});\n\tfor (const agent of job.agents) {\n\t\tfs.writeFileSync(\n\t\t\tagent.promptPath,\n\t\t\t`${managedPrompt(job.task, job.id, agent, agent.doneMarker, agent.blockedMarker, job.varsPath)}\\n`,\n\t\t\t{ mode: 0o600 },\n\t\t);\n\t\tfs.writeFileSync(\n\t\t\tagent.logPath,\n\t\t\t`[tmux-agent-manager] waiting for captured pane output\\njob=${job.id} agent=${agent.name} pane=${agent.paneId || \"pending\"} command=${agent.command || defaultProviderInvocation(agent.provider)}\\n`,\n\t\t\t{ mode: 0o600 },\n\t\t);\n\t}\n\tfs.writeFileSync(job.watcherPath, makePaneWatcherScript(job), { mode: 0o700 });\n\tfs.chmodSync(job.watcherPath, 0o700);\n\tfs.writeFileSync(\n\t\tjob.jobPath,\n\t\t`${JSON.stringify({ ...job, agents: job.agents.map((agent) => ({ ...agent, result: null })) }, null, 2)}\\n`,\n\t\t{ mode: 0o600 },\n\t);\n}\nfunction startPaneWatchers(job: FireTaskPlan): Array<{ agentId: string; paneId: string }> {\n\tconst started: Array<{ agentId: string; paneId: string }> = [];\n\tfor (const agent of job.agents) {\n\t\tif (!agent.paneId) throw new Error(`Missing pane id for tmux agent ${agent.name}`);\n\t\tconst command = `sh ${quoteShell(job.watcherPath)} ${quoteShell(agent.id)}`;\n\t\tconst result = runTmux([\"pipe-pane\", \"-O\", \"-t\", agent.paneId, command]);\n\t\tif (!result.ok) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to arm completion watcher for ${agent.name}: ${result.error || result.stderr || result.stdout}`,\n\t\t\t);\n\t\t}\n\t\tstarted.push({ agentId: agent.id, paneId: agent.paneId });\n\t}\n\treturn started;\n}\nfunction targetDisplayName(agent: AgentSpec, index: number): string {\n\treturn firstString(agent.name, agent.provider, `agent-${index + 1}`) || `agent-${index + 1}`;\n}\nfunction tmuxSessionExists(name: string): boolean {\n\treturn runTmux([\"has-session\", \"-t\", name], 2_000).ok;\n}\nfunction tmuxPaneExists(sessionName: string, paneId: string): boolean {\n\tconst result = runTmux([\"list-panes\", \"-t\", sessionName, \"-F\", \"#{pane_id}\"], 2_000);\n\tif (!result.ok) return false;\n\treturn result.stdout\n\t\t.split(/\\s+/)\n\t\t.map((line) => line.trim())\n\t\t.includes(paneId);\n}\n/** True when tmux already has a pipe-pane consumer attached to this pane (tmux's own `#{pane_pipe}`\n * format flag). Session-level reconcile MUST check this before re-arming: a pane that still has an\n * active pipe already has a live watcher; replacing it would close that watcher's stdin and race its\n * own EOF-triggered `finish(failed, pane-stream-ended)` against the real marker that may be about to\n * arrive, possibly recording a false failure for a job that was about to succeed on its own. Re-arming\n * is only safe (and only useful) when tmux reports no pipe is currently attached. */\nfunction tmuxPaneHasPipe(paneId: string): boolean {\n\tconst result = runTmux([\"display-message\", \"-p\", \"-t\", paneId, \"#{pane_pipe}\"], 2_000);\n\treturn result.ok && result.stdout.trim() === \"1\";\n}\nfunction turnMarkers(\n\tjob: PaneWatcherJobSpec,\n\tagent: FireAgentPlan,\n\tturn: number,\n): { doneMarker: string; blockedMarker: string } {\n\tif (turn <= 1) return { doneMarker: agent.doneMarker, blockedMarker: agent.blockedMarker };\n\tconst base = `TMUX_${crypto.createHash(\"sha1\").update(`${job.id}:${agent.id}:${turn}`).digest(\"hex\").slice(0, 10).toUpperCase()}`;\n\treturn { doneMarker: `${base}_DONE`, blockedMarker: `${base}_BLOCKED` };\n}\nfunction turnResultPath(jobDir: string, agentId: string, turn: number, baseResultPath: string): string {\n\treturn turn <= 1 ? baseResultPath : path.join(jobDir, `${agentId}.turn-${turn}.result.json`);\n}\nfunction turnPromptPath(jobDir: string, agentId: string, turn: number, basePromptPath: string): string {\n\treturn turn <= 1 ? basePromptPath : path.join(jobDir, `${agentId}.turn-${turn}.prompt.md`);\n}\nfunction turnWatcherPath(job: FireTaskPlan, turn: number): string {\n\treturn turn <= 1 ? job.watcherPath : path.join(job.jobDir, `pane-watcher.turn-${turn}.sh`);\n}\n/** The result-file path the CURRENT turn's watcher will write to for this agent (turn 1 keeps the\n * fixed back-compat path). Stop handling must target this path, not the fixed one, or a stop signal\n * issued mid-follow-up would land on a stale turn's file that nothing is watching anymore. */\nfunction currentResultPath(job: FireTaskPlan, agent: FireAgentPlan): string {\n\treturn turnResultPath(job.jobDir, agent.id, agent.currentTurn ?? 1, agent.resultPath);\n}\n\nfunction persistAgentTurnFailure(jobId: string, agentId: string, turn: number, reason: string): void {\n\tpersistJobPatch(jobId, (current) => {\n\t\tconst agent = current.agents.find((entry) => entry.id === agentId);\n\t\tif (!agent || agent.currentTurn !== turn) return undefined;\n\t\tconst result: AgentResult = {\n\t\t\tstatus: \"failed\",\n\t\t\tdetectedAt: new Date().toISOString(),\n\t\t\treason,\n\t\t};\n\t\tfs.writeFileSync(currentResultPath(current, agent), `${JSON.stringify(result, null, 2)}\\n`, { mode: 0o600 });\n\t\tagent.result = result;\n\t\tdelete agent.pendingTurn;\n\t\treturn current;\n\t});\n}\n/** Atomically read-modify-write job.json, always from a FRESH read (never from a caller's possibly\n * stale in-memory copy), mirroring the temp+rename pattern the original notify path used. */\nfunction persistJobPatch(jobId: string, mutate: (current: FireTaskPlan) => FireTaskPlan | undefined): FireTaskPlan {\n\tconst jobPath = path.join(jobsRoot(), jobId, \"job.json\");\n\tconst current = JSON.parse(fs.readFileSync(jobPath, \"utf8\")) as FireTaskPlan;\n\tconst mutated = mutate(current) ?? current;\n\tconst temporaryPath = `${jobPath}.tmp-${process.pid}-${Date.now()}`;\n\tfs.writeFileSync(temporaryPath, `${JSON.stringify(mutated, null, 2)}\\n`, { encoding: \"utf8\", mode: 0o600 });\n\tfs.renameSync(temporaryPath, jobPath);\n\treturn mutated;\n}\nfunction sendCommandToPane(paneId: string, command: string): void {\n\trequireTmuxRun(runTmux([\"send-keys\", \"-t\", paneId, \"-l\", command]), `tmux command injection for ${paneId}`);\n\trequireTmuxRun(runTmux([\"send-keys\", \"-t\", paneId, \"Enter\"]), `tmux command submit for ${paneId}`);\n}\nfunction launchTmuxSession(\n\tsessionName: string,\n\tcwd: string,\n\tpanes: Array<{ title: string; cwd: string; command: string }>,\n\toptions: { deferCommands?: boolean } = {},\n): { runs: RunResult[]; paneIds: string[] } {\n\tif (tmuxSessionExists(sessionName))\n\t\tthrow new Error(\n\t\t\t`tmux session already exists: ${sessionName}. Use stop_session/stop_job first or choose a different workspaceName.`,\n\t\t);\n\tconst runs: RunResult[] = [];\n\tconst paneIds: string[] = [];\n\tconst first = panes[0];\n\tconst create = runTmux(\n\t\t[\"new-session\", \"-d\", \"-P\", \"-F\", \"#{pane_id}\", \"-s\", sessionName, \"-n\", \"agents\", \"-c\", first.cwd || cwd],\n\t\t5_000,\n\t);\n\truns.push(create);\n\tif (!create.ok)\n\t\tthrow new Error(`tmux new-session failed: ${create.error || create.stderr || `exit ${create.status}`}`);\n\ttry {\n\t\tconst firstPane = create.stdout.trim();\n\t\tpaneIds.push(firstPane);\n\t\tif (!options.deferCommands) sendCommandToPane(firstPane, first.command);\n\t\tfor (const pane of panes.slice(1)) {\n\t\t\tconst split = runTmux(\n\t\t\t\t[\"split-window\", \"-d\", \"-P\", \"-F\", \"#{pane_id}\", \"-t\", `${sessionName}:0`, \"-c\", pane.cwd || cwd],\n\t\t\t\t5_000,\n\t\t\t);\n\t\t\truns.push(split);\n\t\t\tif (!split.ok)\n\t\t\t\tthrow new Error(`tmux split-window failed: ${split.error || split.stderr || `exit ${split.status}`}`);\n\t\t\tconst paneId = split.stdout.trim();\n\t\t\tpaneIds.push(paneId);\n\t\t\tif (!options.deferCommands) sendCommandToPane(paneId, pane.command);\n\t\t}\n\t\truns.push(runTmux([\"select-layout\", \"-t\", `${sessionName}:0`, \"tiled\"], 3_000));\n\t\treturn { runs, paneIds };\n\t} catch (error: unknown) {\n\t\trunTmux([\"kill-session\", \"-t\", sessionName], 5_000);\n\t\tthrow error;\n\t}\n}\nfunction injectPromptToPane(paneId: string, prompt: string, provider: Provider): void {\n\tconst text = interactivePromptText(prompt);\n\tif (provider === \"claude\") {\n\t\tconst bufferName = `pi-tmux-${crypto.randomBytes(4).toString(\"hex\")}`;\n\t\trequireTmuxRun(runTmux([\"set-buffer\", \"-b\", bufferName, text], 10_000), \"tmux prompt buffer creation\");\n\t\ttry {\n\t\t\trequireTmuxRun(\n\t\t\t\trunTmux([\"paste-buffer\", \"-b\", bufferName, \"-t\", paneId], 10_000),\n\t\t\t\t`tmux prompt injection for ${paneId}`,\n\t\t\t);\n\t\t\trequireTmuxRun(runTmux([\"send-keys\", \"-t\", paneId, \"Enter\"], 3_000), `tmux prompt submit for ${paneId}`);\n\t\t} finally {\n\t\t\trunTmux([\"delete-buffer\", \"-b\", bufferName], 3_000);\n\t\t}\n\t\treturn;\n\t}\n\trequireTmuxRun(runTmux([\"send-keys\", \"-t\", paneId, \"-l\", text], 10_000), `tmux prompt injection for ${paneId}`);\n\trequireTmuxRun(\n\t\trunTmux([\"send-keys\", \"-t\", paneId, provider === \"agy\" ? \"C-m\" : \"Enter\"], 3_000),\n\t\t`tmux prompt submit for ${paneId}`,\n\t);\n}\ntype AgentTurnArtifacts = {\n\tdoneMarker: string;\n\tblockedMarker: string;\n\tresultPath: string;\n\tpromptPath: string;\n\twatcherPath: string;\n};\nfunction resolveAgentTurnArtifacts(job: FireTaskPlan, agent: FireAgentPlan, turn: number): AgentTurnArtifacts {\n\tconst markers = turnMarkers(job, agent, turn);\n\treturn {\n\t\tdoneMarker: markers.doneMarker,\n\t\tblockedMarker: markers.blockedMarker,\n\t\tresultPath: turnResultPath(job.jobDir, agent.id, turn, agent.resultPath),\n\t\tpromptPath: turnPromptPath(job.jobDir, agent.id, turn, agent.promptPath),\n\t\twatcherPath: turnWatcherPath(job, turn),\n\t};\n}\nfunction writeAgentTurnWatcher(job: FireTaskPlan, agent: FireAgentPlan, artifacts: AgentTurnArtifacts): void {\n\tconst turnSpec: PaneWatcherJobSpec = {\n\t\tid: job.id,\n\t\tsessionName: job.sessionName,\n\t\tdeadlineSeconds: job.deadlineSeconds,\n\t\tagents: [\n\t\t\t{\n\t\t\t\t...agent,\n\t\t\t\tdoneMarker: artifacts.doneMarker,\n\t\t\t\tblockedMarker: artifacts.blockedMarker,\n\t\t\t\tresultPath: artifacts.resultPath,\n\t\t\t\tpromptPath: artifacts.promptPath,\n\t\t\t},\n\t\t],\n\t};\n\tfs.writeFileSync(artifacts.watcherPath, makePaneWatcherScript(turnSpec), { mode: 0o700 });\n\tfs.chmodSync(artifacts.watcherPath, 0o700);\n}\n/** Write a fresh per-turn prompt + single-agent watcher script and arm `pipe-pane -O` for it. Used by\n * send_followup to open a NEW turn on an already-live pane. Does not inject the prompt text into the\n * pane itself — callers do that separately via injectPromptToPane, after this has armed the watcher,\n * so the completion contract is listening before the worker can possibly reply. */\nfunction dispatchAgentTurn(\n\tjob: FireTaskPlan,\n\tagent: FireAgentPlan,\n\tturn: number,\n\tpromptText: string,\n): { promptPath: string; resultPath: string; watcherPath: string } {\n\tif (!agent.paneId) throw new Error(`tmux agent ${agent.name} has no recorded pane id`);\n\tconst artifacts = resolveAgentTurnArtifacts(job, agent, turn);\n\tfs.writeFileSync(artifacts.promptPath, `${promptText}\\n`, { mode: 0o600 });\n\twriteAgentTurnWatcher(job, agent, artifacts);\n\tconst armed = runTmux([\n\t\t\"pipe-pane\",\n\t\t\"-O\",\n\t\t\"-t\",\n\t\tagent.paneId,\n\t\t`sh ${quoteShell(artifacts.watcherPath)} ${quoteShell(agent.id)}`,\n\t]);\n\tif (!armed.ok)\n\t\tthrow new Error(\n\t\t\t`Failed to arm completion watcher for turn ${turn}: ${armed.error || armed.stderr || armed.stdout}`,\n\t\t);\n\treturn {\n\t\tpromptPath: artifacts.promptPath,\n\t\tresultPath: artifacts.resultPath,\n\t\twatcherPath: artifacts.watcherPath,\n\t};\n}\n/** Session-level reconcile's resume step: re-arm `pipe-pane` for an agent whose current turn is still\n * pending on a pane tmux confirms is alive AND has no pipe already attached (see tmuxPaneHasPipe). Only\n * regenerates the watcher SCRIPT file if it is missing (e.g. this is the first reconcile after a reload\n * whose disk state predates a crash) — the prompt was already injected once and is not re-sent. */\nfunction rearmAgentWatcher(job: FireTaskPlan, agent: FireAgentPlan): void {\n\tif (!agent.paneId) return;\n\tconst turn = agent.currentTurn ?? 1;\n\tconst artifacts = resolveAgentTurnArtifacts(job, agent, turn);\n\tif (!fs.existsSync(artifacts.watcherPath)) writeAgentTurnWatcher(job, agent, artifacts);\n\trunTmux([\"pipe-pane\", \"-O\", \"-t\", agent.paneId, `sh ${quoteShell(artifacts.watcherPath)} ${quoteShell(agent.id)}`]);\n}\nfunction stopTmuxSession(\n\tsessionName: string,\n\tdryRun: boolean,\n\tconfirm?: string,\n): { text: string; run?: RunResult; existed: boolean } {\n\tif (!sessionName) throw new Error(\"session name required\");\n\tconst existed = tmuxSessionExists(sessionName);\n\tif (!existed) return { text: `tmux session not running: ${sessionName}`, existed: false };\n\tif (dryRun) return { text: `DRY RUN would stop tmux session: ${sessionName}`, existed: true };\n\tif (confirm !== \"yes-tmux-stop\") throw new Error(\"real stop requires confirm=yes-tmux-stop\");\n\tconst run = runTmux([\"kill-session\", \"-t\", sessionName], 5_000);\n\tif (!run.ok) throw new Error(`tmux kill-session failed: ${run.error || run.stderr || `exit ${run.status}`}`);\n\treturn { text: `Stopped tmux session: ${sessionName}`, run, existed: true };\n}\nfunction isAlreadyExistsError(error: unknown): boolean {\n\treturn typeof error === \"object\" && error !== null && \"code\" in error && error.code === \"EEXIST\";\n}\nfunction markStopRequested(job: FireTaskPlan): void {\n\tfor (const agent of job.agents) {\n\t\tconst resultPath = currentResultPath(job, agent);\n\t\tif (fs.existsSync(resultPath)) continue;\n\t\ttry {\n\t\t\tfs.writeFileSync(`${resultPath}.stop-requested`, `${new Date().toISOString()}\\n`, {\n\t\t\t\tencoding: \"utf8\",\n\t\t\t\tmode: 0o600,\n\t\t\t\tflag: \"wx\",\n\t\t\t});\n\t\t} catch (error: unknown) {\n\t\t\tif (!isAlreadyExistsError(error)) throw error;\n\t\t}\n\t}\n}\nfunction clearStopRequested(job: FireTaskPlan): void {\n\tfor (const agent of job.agents) fs.rmSync(`${currentResultPath(job, agent)}.stop-requested`, { force: true });\n}\nfunction persistStoppedResults(job: FireTaskPlan): void {\n\tfor (const agent of job.agents) {\n\t\tconst resultPath = currentResultPath(job, agent);\n\t\tif (!fs.existsSync(resultPath)) {\n\t\t\tconst result = {\n\t\t\t\tjobId: job.id,\n\t\t\t\tagentId: agent.id,\n\t\t\t\tagentName: agent.name,\n\t\t\t\tstatus: \"stopped\",\n\t\t\t\texitCode: null,\n\t\t\t\tlogPath: agent.logPath,\n\t\t\t\tpaneId: agent.paneId || null,\n\t\t\t\tfinishedAt: new Date().toISOString(),\n\t\t\t\tnotifiedBy: \"stop-action-event\",\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tfs.writeFileSync(resultPath, `${JSON.stringify(result, null, 2)}\\n`, {\n\t\t\t\t\tencoding: \"utf8\",\n\t\t\t\t\tmode: 0o600,\n\t\t\t\t\tflag: \"wx\",\n\t\t\t\t});\n\t\t\t} catch (error: unknown) {\n\t\t\t\tif (!isAlreadyExistsError(error)) throw error;\n\t\t\t}\n\t\t}\n\t\tfs.rmSync(`${resultPath}.stop-requested`, { force: true });\n\t}\n}\nfunction stopTmuxSessionWithJobSignals(\n\tsessionName: string,\n\tjobs: FireTaskPlan[],\n\tdryRun: boolean,\n\tconfirm?: string,\n): { text: string; run?: RunResult; existed: boolean } {\n\tif (!dryRun && confirm !== \"yes-tmux-stop\") throw new Error(\"real stop requires confirm=yes-tmux-stop\");\n\tif (!dryRun) for (const job of jobs) markStopRequested(job);\n\ttry {\n\t\tconst result = stopTmuxSession(sessionName, dryRun, confirm);\n\t\tif (!dryRun) for (const job of jobs) persistStoppedResults(job);\n\t\treturn result;\n\t} catch (error: unknown) {\n\t\tfor (const job of jobs) clearStopRequested(job);\n\t\tthrow error;\n\t}\n}\nfunction formatWorkspacePreview(plan: ReturnType<typeof buildWorkspacePlan>): string {\n\treturn [\n\t\t`Session: ${plan.sessionName}`,\n\t\t`Cwd: ${plan.cwd}`,\n\t\t\"Panes:\",\n\t\t...plan.agents.map((agent, index) => `- ${targetDisplayName(agent, index)}: ${agent.command} (cwd ${agent.cwd})`),\n\t].join(\"\\n\");\n}\nfunction formatFireTaskPreview(job: FireTaskPlan): string {\n\treturn [\n\t\t`Job: ${job.id}`,\n\t\t`Session: ${job.sessionName}`,\n\t\t`Cwd: ${job.cwd}`,\n\t\t`State: ${job.jobPath}`,\n\t\t`Deadline: ${job.deadlineSeconds}s enforced by each event-driven pane watcher`,\n\t\t\"Workers:\",\n\t\t...job.agents.map((agent) => `- ${agent.name}: ${agent.command || defaultProviderInvocation(agent.provider)}`),\n\t].join(\"\\n\");\n}\nfunction loadJob(id: string): FireTaskPlan {\n\tconst jobPath = path.join(jobsRoot(), id, \"job.json\");\n\tif (!fs.existsSync(jobPath)) throw new Error(`tmux job not found: ${id}`);\n\tconst parsed = JSON.parse(fs.readFileSync(jobPath, \"utf8\")) as FireTaskPlan;\n\tif (!Array.isArray(parsed.agents)) throw new Error(`tmux job has invalid agents: ${id}`);\n\tfor (const agent of parsed.agents) {\n\t\t// Read from the CURRENT turn's result path (turn 1 is the fixed back-compat path) so a job\n\t\t// mid-follow-up is correctly seen as non-terminal until the NEW turn settles.\n\t\ttry {\n\t\t\tagent.result = JSON.parse(fs.readFileSync(currentResultPath(parsed, agent), \"utf8\")) as AgentResult;\n\t\t} catch {\n\t\t\tdelete agent.result;\n\t\t}\n\t}\n\ttry {\n\t\tparsed.variables = readVariables(parsed.varsPath);\n\t} catch {\n\t\tparsed.variables = { updatedAt: null, variables: {} };\n\t}\n\treturn parsed;\n}\nfunction loadJobPlans(): FireTaskPlan[] {\n\ttry {\n\t\treturn fs\n\t\t\t.readdirSync(jobsRoot(), { withFileTypes: true })\n\t\t\t.filter((entry) => entry.isDirectory())\n\t\t\t.flatMap((entry) => {\n\t\t\t\ttry {\n\t\t\t\t\treturn [loadJob(entry.name)];\n\t\t\t\t} catch {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t});\n\t} catch {\n\t\treturn [];\n\t}\n}\nfunction listJobs(): unknown[] {\n\ttry {\n\t\treturn fs\n\t\t\t.readdirSync(jobsRoot(), { withFileTypes: true })\n\t\t\t.filter((d) => d.isDirectory())\n\t\t\t.map((d) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst job = loadJob(d.name);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: job.id,\n\t\t\t\t\t\tworkspaceName: job.workspaceName,\n\t\t\t\t\t\tsessionName: job.sessionName,\n\t\t\t\t\t\tcreatedAt: job.createdAt,\n\t\t\t\t\t\torphaned: Boolean(job.orphanedAt),\n\t\t\t\t\t\tdismissed: Boolean(job.dismissedAt),\n\t\t\t\t\t\tagents: job.agents.map((agent) => ({\n\t\t\t\t\t\t\tname: agent.name,\n\t\t\t\t\t\t\tstatus: agent.result?.status || \"pending\",\n\t\t\t\t\t\t\tturn: agent.currentTurn ?? 1,\n\t\t\t\t\t\t})),\n\t\t\t\t\t};\n\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\treturn { id: d.name, error: errorMessage(error) };\n\t\t\t\t}\n\t\t\t});\n\t} catch {\n\t\treturn [];\n\t}\n}\nfunction readVariables(varsPath: string): { updatedAt: string | null; variables: Record<string, unknown> } {\n\ttry {\n\t\treturn JSON.parse(fs.readFileSync(varsPath, \"utf8\"));\n\t} catch {\n\t\treturn { updatedAt: null, variables: {} };\n\t}\n}\nfunction setVariable(jobId: string, name: string, value: string) {\n\tif (!/^[a-zA-Z0-9_.:-]{1,80}$/.test(name))\n\t\tthrow new Error(\"variableName must be 1-80 chars: letters, numbers, _, ., :, or -\");\n\tconst job = loadJob(jobId);\n\tconst current = readVariables(job.varsPath);\n\tcurrent.variables[name] = value;\n\tcurrent.updatedAt = new Date().toISOString();\n\tfs.writeFileSync(job.varsPath, `${JSON.stringify(current, null, 2)}\\n`, { mode: 0o600 });\n\treturn { varsPath: job.varsPath, variables: current.variables, updatedAt: current.updatedAt };\n}\n/** Render a host-derived launch profile into a Pi child's start command. Values are shell-quoted;\n * flags are fixed literals. */\nfunction appendLaunchProfileFlags(command: string, flags: LaunchProfileFlag[]): string {\n\tconst rendered = flags.map((flag) =>\n\t\tflag.value !== undefined ? `${flag.flag} ${quoteShell(flag.value)}` : flag.flag,\n\t);\n\treturn [command, ...rendered].join(\" \");\n}\nfunction deriveLaunchProfile(\n\tbridge: HostBridge,\n\tctx: ExtensionContext,\n\tjob: FireTaskPlan,\n\tagent: FireAgentPlan,\n\tgoalId?: string,\n): WorkerLaunchProfile {\n\tif (agent.provider !== \"pi\") {\n\t\treturn deriveWorkerLaunchProfile({\n\t\t\tidentity: `tmux-profile:${job.id}:${agent.id}`,\n\t\t\t// External interactive CLIs expose their own native, unrestricted tool surfaces. Model the\n\t\t\t// managed boundary honestly as one host-trusted process instead of projecting Pi tool names.\n\t\t\tallowedTools: [\"bash\"],\n\t\t\twritePaths: [],\n\t\t\tparentPid: process.pid,\n\t\t\tparentSession: ctx.sessionManager.getSessionId?.() ?? ctx.sessionManager.getSessionFile(),\n\t\t\ttaskRef: goalId,\n\t\t});\n\t}\n\tconst effectiveResources = agent.resourceProfile ? undefined : bridge.getEffectiveResourceProfile?.();\n\tconst serializedResources =\n\t\teffectiveResources && Object.keys(effectiveResources).length > 0 ? JSON.stringify(effectiveResources) : undefined;\n\tconst inheritedResourceProfile = serializedResources\n\t\t? `tmux-inherited-${crypto.createHash(\"sha256\").update(serializedResources).digest(\"hex\").slice(0, 12)}`\n\t\t: undefined;\n\treturn deriveWorkerLaunchProfile({\n\t\tidentity: `tmux-profile:${job.id}:${agent.id}`,\n\t\tinheritedTools: bridge.getActiveTools?.(),\n\t\tallowedTools: agent.dispatchAllowedTools,\n\t\tresourceProfile: agent.resourceProfile ?? inheritedResourceProfile,\n\t\tresourceProfileJson:\n\t\t\tinheritedResourceProfile && effectiveResources\n\t\t\t\t? JSON.stringify({ [inheritedResourceProfile]: effectiveResources })\n\t\t\t\t: undefined,\n\t\twritePaths: agent.dispatchWritePaths ?? (agent.worktreeLane ? [agent.cwd] : []),\n\t\tthinkingLevel: agent.thinkingLevel ?? bridge.getThinkingLevel?.(),\n\t\tworktreeLane: agent.worktreeLane,\n\t\tparentPid: process.pid,\n\t\tparentSession: ctx.sessionManager.getSessionId?.() ?? ctx.sessionManager.getSessionFile(),\n\t\ttaskRef: goalId,\n\t});\n}\n\n/** Apply the already-compiled immutable profile to a Pi child. Other provider CLIs retain their own\n * native tool surface; the profile remains the host's durable audit contract for every provider. */\nfunction applyLaunchProfile(job: FireTaskPlan, agent: FireAgentPlan, profile: WorkerLaunchProfile): void {\n\tif (agent.provider !== \"pi\") return;\n\tconst profiledCommand = appendLaunchProfileFlags(\n\t\tagent.command || defaultProviderInvocation(agent.provider),\n\t\tbuildLaunchProfileFlags(profile),\n\t);\n\tagent.command = `env ${PI_ORCHESTRATION_AGENT_ID_ENV}=${quoteShell(agentLaneId(job.id, agent.id))} ${PI_WORKER_ALLOWED_PATHS_ENV}=${quoteShell(encodeWorkerSessionAllowedPaths(profile.writePaths))} ${profiledCommand}`;\n}\n/** Read an OPTIONAL, cooperative worker-reported usage claim for the turn that just went terminal (a\n * sibling `<result-path>.usage.json` file next to the watcher's own result file). Absent file ⇒ no\n * claim was offered ⇒ nothing is reported (never fabricated). */\nfunction readWorkerUsageClaim(job: FireTaskPlan, agent: FireAgentPlan): Usage | undefined {\n\tconst usagePath = `${currentResultPath(job, agent)}.usage.json`;\n\ttry {\n\t\treturn decodeTmuxWorkerUsageClaim(JSON.parse(fs.readFileSync(usagePath, \"utf8\")));\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nasync function executeTool(\n\t_toolCallId: string,\n\tparams: Params,\n\t_signal: AbortSignal | undefined,\n\t_onUpdate: unknown,\n\tctx: ExtensionContext,\n\tbridge: HostBridge,\n): Promise<AgentToolResult<unknown>> {\n\tconst action = params.action || \"status\";\n\tconst detection = detectTmux();\n\tif (action === \"status\")\n\t\treturn { content: [{ type: \"text\", text: formatDetection(detection) }], details: { action, detection } };\n\tif (action === \"setup_help\")\n\t\treturn { content: [{ type: \"text\", text: setupHelp(detection) }], details: { action, detection } };\n\tif (action === \"guard\") {\n\t\tconst guard = await guardTmux(ctx, detection, \"tmux-managed interactive subagent/provider orchestration\");\n\t\treturn { content: [{ type: \"text\", text: guard.text }], details: { action, detection, guard } };\n\t}\n\tif (action === \"list_jobs\")\n\t\treturn { content: [{ type: \"text\", text: JSON.stringify(listJobs(), null, 2) }], details: { action } };\n\tif (action === \"list_templates\") {\n\t\tconst summary = templateSummary();\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: summary.text }],\n\t\t\tdetails: { action, templates: summary.templates, errors: summary.errors, templateDirs: templateDirs() },\n\t\t};\n\t}\n\tif (action === \"show_template\") {\n\t\tconst template = requireTeamTemplate(params.teamTemplate || params.title);\n\t\treturn { content: [{ type: \"text\", text: formatTemplate(template) }], details: { action, template } };\n\t}\n\tif (action === \"job_status\") {\n\t\tif (!params.jobId) throw new Error(\"job_status requires jobId\");\n\t\tconst job = loadJob(params.jobId);\n\t\treturn { content: [{ type: \"text\", text: JSON.stringify(job, null, 2) }], details: { action, job } };\n\t}\n\tif (action === \"list_variables\") {\n\t\tif (!params.jobId) throw new Error(\"list_variables requires jobId\");\n\t\tconst job = loadJob(params.jobId);\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(job.variables || { variables: {} }, null, 2) }],\n\t\t\tdetails: { action, jobId: params.jobId, variables: job.variables },\n\t\t};\n\t}\n\tif (action === \"set_variable\") {\n\t\tif (!params.jobId) throw new Error(\"set_variable requires jobId\");\n\t\tif (!params.variableName) throw new Error(\"set_variable requires variableName\");\n\t\tconst value = firstString(params.variableValue, params.body, params.status, \"\") || \"\";\n\t\tconst result = setVariable(params.jobId, params.variableName, value);\n\t\treturn {\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\ttext: `Set tmux job variable ${params.variableName} for ${params.jobId}. Workers read ${result.varsPath} only at the named decision point.`,\n\t\t\t\t},\n\t\t\t],\n\t\t\tdetails: { action, jobId: params.jobId, variableName: params.variableName, result },\n\t\t};\n\t}\n\tconst guard = await guardTmux(ctx, detection, `tmux ${action}`);\n\tif (!guard.allowed)\n\t\treturn { content: [{ type: \"text\", text: guard.text }], details: { action, detection, guard, skipped: true } };\n\tif (action === \"stop_job\") {\n\t\tif (!params.jobId) throw new Error(\"stop_job requires jobId\");\n\t\tconst job = loadJob(params.jobId);\n\t\tconst result = stopTmuxSessionWithJobSignals(job.sessionName, [job], params.dryRun !== false, params.confirm);\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: result.text }],\n\t\t\tdetails: {\n\t\t\t\taction,\n\t\t\t\tdetection,\n\t\t\t\tjobId: params.jobId,\n\t\t\t\tsessionName: job.sessionName,\n\t\t\t\tdryRun: params.dryRun !== false,\n\t\t\t\tresult,\n\t\t\t},\n\t\t};\n\t}\n\tif (action === \"stop_session\") {\n\t\tconst sessionName = firstString(params.workspaceName, params.title);\n\t\tif (!sessionName) throw new Error(\"stop_session requires workspaceName or title with the tmux session name\");\n\t\tconst jobs = loadJobPlans().filter((job) => job.sessionName === sessionName);\n\t\tconst result = stopTmuxSessionWithJobSignals(sessionName, jobs, params.dryRun !== false, params.confirm);\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: result.text }],\n\t\t\tdetails: { action, detection, sessionName, dryRun: params.dryRun !== false, result },\n\t\t};\n\t}\n\tif (action === \"workspace_plan\" || action === \"launch_workspace\") {\n\t\tconst plan = buildWorkspacePlan(ctx, params);\n\t\tconst preview = formatWorkspacePreview(plan);\n\t\tif (action === \"workspace_plan\" || params.dryRun === true)\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: `DRY RUN tmux workspace plan\\n${preview}` }],\n\t\t\t\tdetails: { action, detection, dryRun: true, plan },\n\t\t\t};\n\t\tconst panes = plan.agents.map((agent, index) => ({\n\t\t\ttitle: targetDisplayName(agent, index),\n\t\t\tcwd: agent.cwd || plan.cwd,\n\t\t\tcommand: agent.command || PROVIDER_COMMANDS[agent.provider || \"custom\"],\n\t\t}));\n\t\tconst launch = launchTmuxSession(plan.sessionName, plan.cwd, panes);\n\t\treturn {\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\ttext: `Launched tmux session '${plan.sessionName}'. Attach with: tmux attach -t ${plan.sessionName}`,\n\t\t\t\t},\n\t\t\t],\n\t\t\tdetails: { action, detection, runs: launch.runs, paneIds: launch.paneIds, plan },\n\t\t};\n\t}\n\tif (action === \"fire_task\") {\n\t\tconst job = buildFireTaskPlan(ctx, params);\n\t\tif (params.dryRun === true)\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: `DRY RUN tmux interactive task\\n${formatFireTaskPreview(job)}` }],\n\t\t\t\tdetails: { action, detection, dryRun: true, job },\n\t\t\t};\n\t\tif (tmuxSessionExists(job.sessionName))\n\t\t\tthrow new Error(\n\t\t\t\t`tmux session already exists: ${job.sessionName}. Use stop_job/stop_session first or choose a different workspaceName.`,\n\t\t\t);\n\t\t// Compile each immutable worker profile from the parent surface plus per-agent overrides before\n\t\t// any durable reservation, filesystem artifact, pane, watcher, or prompt side effect.\n\t\tfor (const agent of job.agents) {\n\t\t\tconst profile = deriveLaunchProfile(bridge, ctx, job, agent, params.goalId);\n\t\t\tagent.currentTurn = 1;\n\t\t\tapplyManagedProfile(agent, profile, {\n\t\t\t\tinstructions: job.task,\n\t\t\t\tgoalId: params.goalId,\n\t\t\t\tleaseTtlMs: job.deadlineSeconds * 1_000,\n\t\t\t});\n\t\t\tapplyLaunchProfile(job, agent, profile);\n\t\t}\n\t\t// The host commits the full execution profile and starts the durable lease before any child\n\t\t// process, job artifact, watcher, or prompt side effect occurs.\n\t\treportManagedDispatchReservations(bridge, job, job.agents);\n\t\tlet sessionCreated = false;\n\t\ttry {\n\t\t\tconst archivedJobDir = prepareJobDirForLaunch(job, params.force);\n\t\t\tconst panes = job.agents.map((agent) => ({\n\t\t\t\ttitle: agent.name,\n\t\t\t\tcwd: agent.cwd,\n\t\t\t\tcommand: agent.command || defaultProviderInvocation(agent.provider),\n\t\t\t}));\n\t\t\t// Create idle panes first. The initial provider task is part of the provider command, but no\n\t\t\t// command starts until its output watcher owns the pane stream.\n\t\t\tconst launch = launchTmuxSession(job.sessionName, job.cwd, panes, { deferCommands: true });\n\t\t\tsessionCreated = true;\n\t\t\tjob.agents.forEach((agent, index) => {\n\t\t\t\tagent.paneId = launch.paneIds[index];\n\t\t\t});\n\t\t\twriteFireTaskFiles(job);\n\t\t\tconst watcherPanes = startPaneWatchers(job);\n\t\t\tfor (const agent of job.agents) {\n\t\t\t\tif (!agent.paneId) continue;\n\t\t\t\tsendCommandToPane(\n\t\t\t\t\tagent.paneId,\n\t\t\t\t\tinitialPromptInvocation(\n\t\t\t\t\t\tagent.command || defaultProviderInvocation(agent.provider),\n\t\t\t\t\t\tagent.provider,\n\t\t\t\t\t\tagent.promptPath,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tcontent: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\ttext: [\n\t\t\t\t\t\t\t`Launched tmux interactive fire-and-forget job ${job.id}.`,\n\t\t\t\t\t\t\t`Session: ${job.sessionName}`,\n\t\t\t\t\t\t\t`Attach: tmux attach -t ${job.sessionName}`,\n\t\t\t\t\t\t\t`Job state: ${job.jobPath}`,\n\t\t\t\t\t\t\tarchivedJobDir ? `Archived previous job dir: ${archivedJobDir}` : undefined,\n\t\t\t\t\t\t\t\"Completion: event-driven pane output watchers armed (no polling).\",\n\t\t\t\t\t\t]\n\t\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t\t.join(\"\\n\"),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdetails: {\n\t\t\t\t\taction,\n\t\t\t\t\tdetection,\n\t\t\t\t\tjob,\n\t\t\t\t\truns: launch.runs,\n\t\t\t\t\tpaneIds: launch.paneIds,\n\t\t\t\t\twatcherPanes,\n\t\t\t\t\tarchivedJobDir,\n\t\t\t\t},\n\t\t\t};\n\t\t} catch (error: unknown) {\n\t\t\tif (sessionCreated) runTmux([\"kill-session\", \"-t\", job.sessionName], 5_000);\n\t\t\treportManagedLaunchFailure(bridge, job, \"managed_process_launch_failed\");\n\t\t\tthrow error;\n\t\t}\n\t}\n\tif (action === \"send_followup\") {\n\t\tif (!params.jobId) throw new Error(\"send_followup requires jobId\");\n\t\tconst followupTask = firstString(params.task, params.body);\n\t\tif (!followupTask) throw new Error(\"send_followup requires task (or body) with the follow-up objective\");\n\t\tconst job = loadJob(params.jobId);\n\t\tif (job.dismissedAt)\n\t\t\tthrow new Error(`tmux job ${job.id} was dismissed; use fire_task to relaunch instead of send_followup`);\n\t\tif (job.agents.length === 0) throw new Error(`tmux job has no agents: ${job.id}`);\n\t\tconst targetAgent = params.agentId ? job.agents.find((agent) => agent.id === params.agentId) : job.agents[0];\n\t\tif (!targetAgent) throw new Error(`tmux job ${job.id} has no agent ${params.agentId}`);\n\t\tif (!targetAgent.paneId)\n\t\t\tthrow new Error(`tmux agent ${targetAgent.name} has no recorded pane id; cannot send a follow-up`);\n\t\tif (targetAgent.pendingTurn !== undefined)\n\t\t\tthrow new Error(\n\t\t\t\t`send_followup refused: turn ${targetAgent.pendingTurn} for ${targetAgent.id} is pending reconciliation; refusing to risk a duplicate prompt`,\n\t\t\t);\n\t\tconst turn = (targetAgent.currentTurn ?? 1) + 1;\n\t\tconst markers = turnMarkers(job, targetAgent, turn);\n\t\tconst promptText = managedPrompt(\n\t\t\tfollowupTask,\n\t\t\tjob.id,\n\t\t\ttargetAgent,\n\t\t\tmarkers.doneMarker,\n\t\t\tmarkers.blockedMarker,\n\t\t\tjob.varsPath,\n\t\t);\n\t\tif (params.dryRun === true)\n\t\t\treturn {\n\t\t\t\tcontent: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\ttext: `DRY RUN tmux send_followup\\nJob: ${job.id}\\nAgent: ${targetAgent.name}\\nTurn: ${turn}`,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdetails: { action, detection, dryRun: true, jobId: job.id, agentId: targetAgent.id, turn },\n\t\t\t};\n\t\tif (!tmuxSessionExists(job.sessionName))\n\t\t\tthrow new Error(\n\t\t\t\t`tmux session is gone: ${job.sessionName}. The worker pane cannot receive a follow-up; use fire_task to relaunch.`,\n\t\t\t);\n\t\tif (!tmuxPaneExists(job.sessionName, targetAgent.paneId))\n\t\t\tthrow new Error(\n\t\t\t\t`tmux pane ${targetAgent.paneId} for ${targetAgent.name} is gone. The worker cannot receive a follow-up; use fire_task to relaunch.`,\n\t\t\t);\n\t\t// The live process keeps the immutable profile persisted at birth. A follow-up only advances\n\t\t// instructions and its fenced sequence; it cannot widen or replace the process profile.\n\t\t// Reserve before watcher/prompt side effects. Reconcile re-arms a reserved turn but never\n\t\t// re-injects it, so crash recovery cannot duplicate a provider prompt.\n\t\tconst reserved = persistJobPatch(job.id, (current) => {\n\t\t\tconst agent = current.agents.find((entry) => entry.id === targetAgent.id);\n\t\t\tif (!agent || agent.pendingTurn !== undefined) return undefined;\n\t\t\tagent.currentTurn = turn;\n\t\t\tagent.pendingTurn = turn;\n\t\t\tagent.result = undefined;\n\t\t\tapplyManagedTurn(agent, {\n\t\t\t\tinstructions: followupTask,\n\t\t\t\tgoalId: params.goalId ?? agent.dispatchGoalId,\n\t\t\t\tleaseTtlMs: job.deadlineSeconds * 1_000,\n\t\t\t});\n\t\t\tcurrent.currentTurn = turn;\n\t\t\treturn current;\n\t\t});\n\t\tconst reservedAgent = reserved.agents.find((agent) => agent.id === targetAgent.id);\n\t\tif (!reservedAgent || reservedAgent.pendingTurn !== turn)\n\t\t\tthrow new Error(`send_followup refused: failed to reserve turn ${turn} for ${targetAgent.id}`);\n\t\ttry {\n\t\t\treportManagedDispatchReservations(bridge, reserved, [reservedAgent]);\n\t\t} catch (error: unknown) {\n\t\t\tpersistAgentTurnFailure(job.id, reservedAgent.id, turn, \"managed_process_launch_reservation_failed\");\n\t\t\tthrow error;\n\t\t}\n\t\tlet written: ReturnType<typeof dispatchAgentTurn>;\n\t\ttry {\n\t\t\twritten = dispatchAgentTurn(reserved, reservedAgent, turn, promptText);\n\t\t\tinjectPromptToPane(reservedAgent.paneId as string, promptText, reservedAgent.provider);\n\t\t\tpersistJobPatch(job.id, (current) => {\n\t\t\t\tconst agent = current.agents.find((entry) => entry.id === reservedAgent.id);\n\t\t\t\tif (!agent || agent.pendingTurn !== turn) return undefined;\n\t\t\t\tdelete agent.pendingTurn;\n\t\t\t\treturn current;\n\t\t\t});\n\t\t} catch (error: unknown) {\n\t\t\tpersistAgentTurnFailure(job.id, reservedAgent.id, turn, \"managed_process_followup_failed\");\n\t\t\treportManagedAgentFailure(bridge, job.id, reservedAgent.id, \"managed_process_followup_failed\");\n\t\t\tthrow error;\n\t\t}\n\t\treturn {\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\ttext: [\n\t\t\t\t\t\t`Sent follow-up turn ${turn} to ${targetAgent.name} in job ${job.id}.`,\n\t\t\t\t\t\t`Session: ${job.sessionName}`,\n\t\t\t\t\t\t`Prompt: ${written.promptPath}`,\n\t\t\t\t\t\t`Completion: event-driven pane watcher re-armed for turn ${turn} (no polling).`,\n\t\t\t\t\t].join(\"\\n\"),\n\t\t\t\t},\n\t\t\t],\n\t\t\tdetails: { action, detection, jobId: job.id, agentId: targetAgent.id, turn, ...written },\n\t\t};\n\t}\n\tif (action === \"dismiss\") {\n\t\tif (!params.jobId) throw new Error(\"dismiss requires jobId\");\n\t\tconst job = loadJob(params.jobId);\n\t\tif (job.dismissedAt)\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: `tmux job ${job.id} was already dismissed.` }],\n\t\t\t\tdetails: { action, jobId: job.id, alreadyDismissed: true },\n\t\t\t};\n\t\tif (tmuxSessionExists(job.sessionName)) {\n\t\t\tfor (const agent of job.agents) {\n\t\t\t\tif (!agent.paneId || !tmuxPaneExists(job.sessionName, agent.paneId)) continue;\n\t\t\t\trequireTmuxRun(\n\t\t\t\t\trunTmux([\"pipe-pane\", \"-t\", agent.paneId]),\n\t\t\t\t\t`tmux completion watcher detach for ${agent.paneId}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tpersistJobPatch(job.id, (current) => {\n\t\t\tcurrent.dismissedAt = new Date().toISOString();\n\t\t\treturn current;\n\t\t});\n\t\tfor (const agent of job.agents)\n\t\t\tbridge.reportManagedLane?.({ laneId: agentLaneId(job.id, agent.id), phase: \"terminal\", status: \"dismissed\" });\n\t\treturn {\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\ttext: `Dismissed tmux job ${job.id}. Session '${job.sessionName}' left running (not killed); attach with: tmux attach -t ${job.sessionName}. Use stop_session/stop_job to terminate it.`,\n\t\t\t\t},\n\t\t\t],\n\t\t\tdetails: { action, jobId: job.id, sessionName: job.sessionName },\n\t\t};\n\t}\n\tif (action === \"notify\") {\n\t\tconst title = firstString(params.title, \"Pi\") || \"Pi\";\n\t\tconst body = firstString(params.body, \"Pi needs attention\") || \"Pi needs attention\";\n\t\tconst target = firstString(params.workspaceName, detection.currentSession, detection.sessions[0]);\n\t\tif (!target) throw new Error(\"notify requires an active tmux session or workspaceName target\");\n\t\tconst run = runTmux([\"display-message\", \"-t\", target, `${title}: ${body}`], 3_000);\n\t\tif (!run.ok) throw new Error(`tmux display-message failed: ${run.error || run.stderr || `exit ${run.status}`}`);\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: `Sent tmux display-message to ${target}: ${title}` }],\n\t\t\tdetails: { action, detection, run },\n\t\t};\n\t}\n\tif (action === \"set_status\") {\n\t\tconst key = safeStatusKey(params.statusKey);\n\t\tconst value = firstString(params.status, params.body, \"\") || \"\";\n\t\tconst target = firstString(params.workspaceName, detection.currentSession, detection.sessions[0]);\n\t\tconst args = target\n\t\t\t? [\"set-option\", \"-t\", target, `@pi_${key}`, value]\n\t\t\t: [\"set-option\", \"-g\", `@pi_${key}`, value];\n\t\tconst run = runTmux(args, 3_000);\n\t\tif (!run.ok) throw new Error(`tmux set-option failed: ${run.error || run.stderr || `exit ${run.status}`}`);\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: `Set tmux user option @pi_${key}=${value}` }],\n\t\t\tdetails: { action, detection, run },\n\t\t};\n\t}\n\tif (action === \"clear_status\") {\n\t\tconst key = safeStatusKey(params.statusKey);\n\t\tconst target = firstString(params.workspaceName, detection.currentSession, detection.sessions[0]);\n\t\tconst args = target ? [\"set-option\", \"-u\", \"-t\", target, `@pi_${key}`] : [\"set-option\", \"-gu\", `@pi_${key}`];\n\t\tconst run = runTmux(args, 3_000);\n\t\tif (!run.ok) throw new Error(`tmux clear status failed: ${run.error || run.stderr || `exit ${run.status}`}`);\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: `Cleared tmux user option @pi_${key}` }],\n\t\t\tdetails: { action, detection, run },\n\t\t};\n\t}\n\tthrow new Error(`unsupported action: ${action}`);\n}\n\nfunction isFireTaskTerminal(job: FireTaskPlan): boolean {\n\treturn job.agents.length > 0 && job.agents.every((agent) => agent.result !== undefined);\n}\n\nfunction readBoundedLogTail(filePath: string, maxBytes = 2048): string {\n\ttry {\n\t\tconst size = fs.statSync(filePath).size;\n\t\tconst length = Math.min(size, maxBytes);\n\t\tconst buffer = Buffer.alloc(length);\n\t\tconst descriptor = fs.openSync(filePath, \"r\");\n\t\ttry {\n\t\t\tfs.readSync(descriptor, buffer, 0, length, Math.max(0, size - length));\n\t\t} finally {\n\t\t\tfs.closeSync(descriptor);\n\t\t}\n\t\treturn buffer.toString(\"utf8\").replace(/<(?=\\/?untrusted_content\\b)/gi, \"<\");\n\t} catch {\n\t\treturn \"(no captured output)\";\n\t}\n}\n\nfunction formatFireTaskHandoff(job: FireTaskPlan): string {\n\tconst included = job.agents.slice(0, 4);\n\treturn [\n\t\t`tmux background task terminal handoff: ${job.id}`,\n\t\t`session: ${job.sessionName}`,\n\t\t...included.flatMap((agent) => [\n\t\t\t`- ${agent.name}: ${agent.result?.status ?? \"unknown\"}`,\n\t\t\t`<untrusted_content source=\"tmux_agent:${job.id}:${agent.id}\">`,\n\t\t\treadBoundedLogTail(agent.logPath),\n\t\t\t\"</untrusted_content>\",\n\t\t]),\n\t\t...(job.agents.length > included.length\n\t\t\t? [`- ${job.agents.length - included.length} additional agent handoff(s) omitted.`]\n\t\t\t: []),\n\t\t\"This event woke the parent; do not poll. Continue safe scoped work from the bounded handoff and inspect terminal artifacts only if needed for a material claim.\",\n\t].join(\"\\n\");\n}\n\nfunction compactTmuxAgentStatus(status: string | undefined): \"succeeded\" | \"partial\" | \"failed\" | \"canceled\" {\n\tif (status === \"done\" || status === \"succeeded\" || status === \"completed\") return \"succeeded\";\n\tif (status === \"blocked\" || status === \"partial\") return \"partial\";\n\tif (status === \"canceled\" || status === \"cancelled\" || status === \"stopped\") return \"canceled\";\n\treturn \"failed\";\n}\n\n/** Diff live tmux sessions against this session's job records. Mirrors the invariant behind\n * `LocalRuntimeController.reconcile` (local-runtime-controller.ts): reconcile only ever OBSERVES —\n * it never kills a session it did not provably start. A job whose tmux session is gone is marked\n * orphaned (informational, one-shot); a job whose session is alive but current turn is still\n * pending is resumed by re-arming its watcher, but ONLY when tmux confirms no pipe is already\n * attached to that pane (see tmuxPaneHasPipe) — otherwise a live watcher would be raced and could\n * be made to report a false failure. */\nfunction reconcileTmuxSessions(ctx: ExtensionContext, bridge: HostBridge): void {\n\tconst sessionFile = ctx.sessionManager.getSessionFile();\n\tconst jobs = loadJobPlans().filter((job) => job.parentSessionFile === sessionFile && !job.dismissedAt);\n\tif (jobs.length === 0) return;\n\tconst detection = detectTmux();\n\tif (!detection.cliAvailable) return;\n\tconst liveSessions = new Set(detection.sessions);\n\tfor (const job of jobs) {\n\t\tif (!liveSessions.has(job.sessionName)) {\n\t\t\tif (!isFireTaskTerminal(job) && !job.orphanedAt) {\n\t\t\t\tpersistJobPatch(job.id, (current) => {\n\t\t\t\t\tcurrent.orphanedAt = new Date().toISOString();\n\t\t\t\t\treturn current;\n\t\t\t\t});\n\t\t\t\tif (ctx.hasUI)\n\t\t\t\t\tctx.ui.notify(\n\t\t\t\t\t\t`tmux job ${job.id} is orphaned: session '${job.sessionName}' is gone and the job never reached a terminal state. Nothing was killed; this is informational only.`,\n\t\t\t\t\t\t\"warning\",\n\t\t\t\t\t);\n\t\t\t\t// Nothing is killed here — only the LANE record is released. A dead session means the\n\t\t\t\t// worker itself can no longer report its own terminal state, so a goal bound to it would\n\t\t\t\t// wait forever without this: release the managed lane per non-terminal agent so the goal's\n\t\t\t\t// continuation stops waiting on a worker that will never report back.\n\t\t\t\tfor (const agent of job.agents) {\n\t\t\t\t\tif (agent.result !== undefined) continue;\n\t\t\t\t\tbridge.reportManagedLane?.({\n\t\t\t\t\t\tlaneId: agentLaneId(job.id, agent.id),\n\t\t\t\t\t\tphase: \"terminal\",\n\t\t\t\t\t\tstatus: \"orphaned\",\n\t\t\t\t\t\treasonCode: \"tmux_session_orphaned\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (isFireTaskTerminal(job)) continue;\n\t\tfor (const agent of job.agents) {\n\t\t\tif (agent.result !== undefined) continue;\n\t\t\tif (!agent.paneId || !tmuxPaneExists(job.sessionName, agent.paneId)) continue;\n\t\t\tif (tmuxPaneHasPipe(agent.paneId)) continue;\n\t\t\treportManagedDispatchReservations(bridge, job, [agent]);\n\t\t\trearmAgentWatcher(job, agent);\n\t\t}\n\t}\n}\n\nexport default function tmuxAgentManagerExtension(pi: ExtensionAPI) {\n\tlet handoffContext: ExtensionContext | undefined;\n\tlet handoffTail = Promise.resolve();\n\tconst jobWatchers = new Map<string, fs.FSWatcher>();\n\tconst bridge: HostBridge = pi;\n\n\tconst closeJobWatchers = () => {\n\t\tfor (const watcher of jobWatchers.values()) watcher.close();\n\t\tjobWatchers.clear();\n\t};\n\n\tconst refreshJobHandoffs = async (ctx: ExtensionContext): Promise<void> => {\n\t\tconst sessionFile = ctx.sessionManager.getSessionFile();\n\t\tconst jobs = loadJobPlans().filter(\n\t\t\t(job) => (!job.parentSessionFile || job.parentSessionFile === sessionFile) && !job.dismissedAt,\n\t\t);\n\t\tfor (const job of jobs) {\n\t\t\tif (!isFireTaskTerminal(job)) continue;\n\t\t\t// Per-turn notify: a job is not permanently \"closed\" after its first terminal turn — a\n\t\t\t// follow-up reopens it, so the gate is per-agent (notifiedTurn < currentTurn), not a\n\t\t\t// single whole-job notifiedAt flag.\n\t\t\tconst pendingAgents = job.agents.filter((agent) => (agent.notifiedTurn ?? 0) < (agent.currentTurn ?? 1));\n\t\t\tif (pendingAgents.length === 0) continue;\n\t\t\tfor (const agent of pendingAgents) {\n\t\t\t\t// Advisory-only, and only ever reported when the worker itself chose to write the\n\t\t\t\t// claim file — never fabricated, never a hard cross-process cap.\n\t\t\t\tconst usage = readWorkerUsageClaim(job, agent);\n\t\t\t\tbridge.reportManagedLane?.({\n\t\t\t\t\tlaneId: agentLaneId(job.id, agent.id),\n\t\t\t\t\tphase: \"terminal\",\n\t\t\t\t\tstatus: agent.result?.status,\n\t\t\t\t\tusage,\n\t\t\t\t});\n\t\t\t\tif (usage) {\n\t\t\t\t\tbridge.reportSpawnedUsage?.(usage, {\n\t\t\t\t\t\tlabel: \"tmux-worker\",\n\t\t\t\t\t\treportId: `tmux-worker:${job.sessionName}:${job.id}:${agent.currentTurn ?? 1}`,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Production hosts own the sole durable wake path through reportManagedLane. The direct\n\t\t\t// message remains only for lightweight/standalone hosts that omit that bridge entirely.\n\t\t\tif (!bridge.reportManagedLane) {\n\t\t\t\tpi.sendMessage(\n\t\t\t\t\t{\n\t\t\t\t\t\tcustomType: \"background-worker-completion\",\n\t\t\t\t\t\tcontent: formatFireTaskHandoff(job),\n\t\t\t\t\t\tdisplay: true,\n\t\t\t\t\t\tdetails: {\n\t\t\t\t\t\t\trecords: job.agents.map((agent) => ({\n\t\t\t\t\t\t\t\tlaneId: agentLaneId(job.id, agent.id),\n\t\t\t\t\t\t\t\tstatus: compactTmuxAgentStatus(agent.result?.status),\n\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{ triggerTurn: true, deliverAs: \"followUp\" },\n\t\t\t\t);\n\t\t\t}\n\t\t\t// reportManagedLane persisted the terminal result + outbox synchronously before returning.\n\t\t\t// This marker only suppresses duplicate extension reports; it is not notification truth.\n\t\t\tpersistJobPatch(job.id, (current) => {\n\t\t\t\tcurrent.notifiedAt = new Date().toISOString();\n\t\t\t\tfor (const agent of current.agents) {\n\t\t\t\t\tconst inMemoryAgent = job.agents.find((entry) => entry.id === agent.id);\n\t\t\t\t\tagent.notifiedTurn = inMemoryAgent?.currentTurn ?? agent.currentTurn ?? 1;\n\t\t\t\t}\n\t\t\t\treturn current;\n\t\t\t});\n\t\t}\n\n\t\tconst activeIds = new Set(jobs.filter((job) => !isFireTaskTerminal(job)).map((job) => job.id));\n\t\tfor (const [jobId, watcher] of jobWatchers) {\n\t\t\tif (activeIds.has(jobId)) continue;\n\t\t\twatcher.close();\n\t\t\tjobWatchers.delete(jobId);\n\t\t}\n\t\tfor (const job of jobs) {\n\t\t\tif (isFireTaskTerminal(job) || jobWatchers.has(job.id)) continue;\n\t\t\ttry {\n\t\t\t\tconst watcher = fs.watch(job.jobDir, { persistent: false }, (_event, fileName) => {\n\t\t\t\t\tif (fileName && !String(fileName).endsWith(\".result.json\") && String(fileName) !== \"job.json\") return;\n\t\t\t\t\tif (handoffContext) void queueJobHandoffRefresh(handoffContext);\n\t\t\t\t});\n\t\t\t\twatcher.on(\"error\", (error) => {\n\t\t\t\t\twatcher.close();\n\t\t\t\t\tjobWatchers.delete(job.id);\n\t\t\t\t\tif (ctx.hasUI) ctx.ui.notify(`tmux completion signal failed for ${job.id}: ${error.message}`, \"warning\");\n\t\t\t\t});\n\t\t\t\tjobWatchers.set(job.id, watcher);\n\t\t\t} catch (error: unknown) {\n\t\t\t\tif (ctx.hasUI)\n\t\t\t\t\tctx.ui.notify(`tmux completion signal failed for ${job.id}: ${errorMessage(error)}`, \"warning\");\n\t\t\t}\n\t\t}\n\t};\n\n\tfunction queueJobHandoffRefresh(ctx: ExtensionContext): Promise<void> {\n\t\tconst refresh = handoffTail.then(() => refreshJobHandoffs(ctx));\n\t\tconst guarded = refresh.catch((error: unknown) => {\n\t\t\tif (ctx.hasUI) {\n\t\t\t\tctx.ui.notify(\n\t\t\t\t\t`tmux terminal handoff failed: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t\t\"warning\",\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t\thandoffTail = guarded;\n\t\treturn guarded;\n\t}\n\n\tpi.on(\"session_start\", async (_event, ctx) => {\n\t\thandoffContext = ctx;\n\t\tcloseJobWatchers();\n\t\treconcileTmuxSessions(ctx, bridge);\n\t\tawait queueJobHandoffRefresh(ctx);\n\t});\n\tpi.on(\"session_shutdown\", async () => {\n\t\thandoffContext = undefined;\n\t\tcloseJobWatchers();\n\t\thandoffTail = Promise.resolve();\n\t});\n\n\tpi.registerTool({\n\t\tname: \"tmux_agent_manager\",\n\t\tlabel: \"tmux Agent Manager\",\n\t\tdescription:\n\t\t\t\"Tmux-backed persistent interactive provider/workspace manager. Native delegate remains the standard cross-platform route; use this when a task benefits from persistent CLI panes.\",\n\t\tpromptSnippet:\n\t\t\t\"Persistent tmux workers with inherited, immutable launch profiles; ordinary agents use native delegate.\",\n\t\tpromptGuidelines: [\n\t\t\t\"Ordinary agents: delegate. Tmux availability detection is automatic; guard is diagnostic only. Never use native Windows tmux.\",\n\t\t\t\"fire_task derives one immutable profile per agent; omitted fields inherit parent tools, thinking, and machine scope.\",\n\t\t\t\"tools, thinkingLevel, resourceProfile, and worktreeLane are Pi-only; configure external CLIs in command.\",\n\t\t\t\"Pi path narrows structured file tools; external path sets cwd only and is audited as a machine-wide host process.\",\n\t\t\t\"fire_task arms capture before atomically starting each CLI with its task; never wait/poll/peek.\",\n\t\t\t\"Teams: list/show_template, teamTemplate. Layout: workspace_plan, then launch_workspace.\",\n\t\t\t\"send_followup prompts live pane/re-arms watcher; no relaunch. dismiss stops tracking, not session.\",\n\t\t\t\"Cleanup: stop_job/stop_session dryRun, then confirm=yes-tmux-stop.\",\n\t\t\t\"No secrets in task/command; all persist: ~/.pi/agent/work/background/tmux-agent-manager/state/jobs.\",\n\t\t\t\"Display/status metadata only; verify result/log before completion claim.\",\n\t\t\t\"Workers continue autonomously inside the assigned profile; no separate approval handshake exists.\",\n\t\t\t\"Non-Pi process behavior is CLI-owned; never represent Pi-only profile controls as enforced for an external CLI.\",\n\t\t],\n\t\tparameters: Type.Object({\n\t\t\taction: Type.Optional(\n\t\t\t\tType.Union(\n\t\t\t\t\t[\n\t\t\t\t\t\tType.Literal(\"status\"),\n\t\t\t\t\t\tType.Literal(\"setup_help\"),\n\t\t\t\t\t\tType.Literal(\"guard\"),\n\t\t\t\t\t\tType.Literal(\"notify\"),\n\t\t\t\t\t\tType.Literal(\"set_status\"),\n\t\t\t\t\t\tType.Literal(\"clear_status\"),\n\t\t\t\t\t\tType.Literal(\"workspace_plan\"),\n\t\t\t\t\t\tType.Literal(\"launch_workspace\"),\n\t\t\t\t\t\tType.Literal(\"fire_task\"),\n\t\t\t\t\t\tType.Literal(\"send_followup\"),\n\t\t\t\t\t\tType.Literal(\"dismiss\"),\n\t\t\t\t\t\tType.Literal(\"job_status\"),\n\t\t\t\t\t\tType.Literal(\"list_jobs\"),\n\t\t\t\t\t\tType.Literal(\"set_variable\"),\n\t\t\t\t\t\tType.Literal(\"list_variables\"),\n\t\t\t\t\t\tType.Literal(\"list_templates\"),\n\t\t\t\t\t\tType.Literal(\"show_template\"),\n\t\t\t\t\t\tType.Literal(\"stop_job\"),\n\t\t\t\t\t\tType.Literal(\"stop_session\"),\n\t\t\t\t\t],\n\t\t\t\t\t{\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\"status, setup_help, guard, notify, set_status, clear_status, workspace_plan, launch_workspace, fire_task, send_followup, dismiss, job_status, list_jobs, set_variable, list_variables, list_templates, show_template, stop_job, or stop_session. Default status.\",\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t),\n\t\t\ttitle: Type.Optional(Type.String({ description: \"Notification title or workspace title context.\" })),\n\t\t\tbody: Type.Optional(\n\t\t\t\tType.String({ description: \"Notification body/status text, or fallback task text for fire_task.\" }),\n\t\t\t),\n\t\t\tsubtitle: Type.Optional(\n\t\t\t\tType.String({ description: \"Accepted for cmux parity; tmux display-message ignores subtitle.\" }),\n\t\t\t),\n\t\t\tstatusKey: Type.Optional(\n\t\t\t\tType.String({\n\t\t\t\t\tdescription: \"Status key for tmux set_status/clear_status. Stored as @pi_<key>. Default pi-agents.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\tstatus: Type.Optional(Type.String({ description: \"Status value for set_status.\" })),\n\t\t\ticon: Type.Optional(\n\t\t\t\tType.String({ description: \"Accepted for cmux parity; tmux display-message/user options ignore icon.\" }),\n\t\t\t),\n\t\t\tcolor: Type.Optional(\n\t\t\t\tType.String({ description: \"Accepted for cmux parity; tmux display-message/user options ignore color.\" }),\n\t\t\t),\n\t\t\tworkspaceName: Type.Optional(\n\t\t\t\tType.String({\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"tmux session name/title for workspace_plan/launch_workspace/fire_task, or target for notify/status.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\tcwd: Type.Optional(\n\t\t\t\tType.String({\n\t\t\t\t\tdescription: \"Working directory for planned/launched agent workspace. Defaults to current cwd.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\tteamTemplate: Type.Optional(\n\t\t\t\tType.String({\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Built-in team template name for workspace/fire_task, or target for show_template. Use list_templates first. Current templates include provider-prompt-smoke, full-provider-review, builder-validator, plus JSON templates under templates/.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\ttask: Type.Optional(\n\t\t\t\tType.String({\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Fire-and-forget worker objective. Required for fire_task unless body is provided. Also used as the follow-up objective for send_followup.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\tjobId: Type.Optional(\n\t\t\t\tType.String({\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Existing job id for job_status/list_variables/set_variable/send_followup/dismiss. Never creates a fresh fire_task job.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\tlaunchKey: Type.Optional(\n\t\t\t\tType.String({\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Optional fresh fire_task identity. Use only for intentional stable naming; omitted creates a unique key. Never auto-retained from results.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\tagentId: Type.Optional(\n\t\t\t\tType.String({\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Target agent id for send_followup. Defaults to the job's first (primary) agent. Multi-agent-per-turn follow-up is not supported; only one agent's pane receives each follow-up.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\tvariableName: Type.Optional(\n\t\t\t\tType.String({\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"For set_variable: named condition/decision variable workers read only at the decision point.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\tvariableValue: Type.Optional(\n\t\t\t\tType.String({ description: \"For set_variable: value to write. body/status can also supply the value.\" }),\n\t\t\t),\n\t\t\tdeadlineSeconds: Type.Optional(\n\t\t\t\tType.Number({\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"For fire_task: seconds before each event-driven watcher records timeout and terminates its owned pane. Default 1200.\",\n\t\t\t\t\tminimum: 5,\n\t\t\t\t\tmaximum: MAX_DEADLINE_SECONDS,\n\t\t\t\t}),\n\t\t\t),\n\t\t\tagents: Type.Optional(\n\t\t\t\tType.Array(\n\t\t\t\t\tType.Object({\n\t\t\t\t\t\tprovider: Type.Optional(providerSchema()),\n\t\t\t\t\t\tname: Type.Optional(Type.String({ description: \"Pane/worker name.\" })),\n\t\t\t\t\t\tcommand: Type.Optional(\n\t\t\t\t\t\t\tType.String({\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\"Interactive CLI start command. Capture is armed first, then the initial prompt file is passed as the final CLI argument; Agy also gets --prompt-interactive.\",\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tcwd: Type.Optional(\n\t\t\t\t\t\t\tType.String({\n\t\t\t\t\t\t\t\tdescription: \"Legacy per-agent working directory; does not narrow filesystem scope.\",\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tpath: Type.Optional(\n\t\t\t\t\t\t\tType.String({\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\"Optional workspace cwd. For Pi it narrows structured file tools; external CLIs remain machine-wide host-trusted processes.\",\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t\ttools: Type.Optional(\n\t\t\t\t\t\t\tType.Array(Type.String(), {\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\"Pi-only policy-owned tool override. Omitted inherits the parent's eligible worker tools; parent-only controls are removed.\",\n\t\t\t\t\t\t\t\tminItems: 1,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tresourceProfile: Type.Optional(\n\t\t\t\t\t\t\tType.String({\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\"Pi-only resource-profile override. Omitted inherits the parent's effective resources.\",\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tthinkingLevel: Type.Optional(\n\t\t\t\t\t\t\torchestrationThinkingLevelSchema(\n\t\t\t\t\t\t\t\t\"Pi-only thinking override. Omitted inherits the orchestrator's current level.\",\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tworktreeLane: Type.Optional(\n\t\t\t\t\t\t\tType.String({ description: \"Pi-only worktree-sync lane binding for this worker.\" }),\n\t\t\t\t\t\t),\n\t\t\t\t\t}),\n\t\t\t\t\t{ description: \"Agents/providers to lay out in tmux. Default: pi, agy, codex.\" },\n\t\t\t\t),\n\t\t\t),\n\t\t\tdryRun: Type.Optional(\n\t\t\t\tType.Boolean({\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Preview only when true. Launch actions run by default; stop actions remain previews by default.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\tforce: Type.Optional(\n\t\t\t\tType.Boolean({\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"For fire_task only: archive an existing job directory with the same launchKey before launch. Existing tmux sessions are still refused; stop them first.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\tconfirm: Type.Optional(\n\t\t\t\tType.String({ description: \"Required for real stop_job/stop_session: yes-tmux-stop.\" }),\n\t\t\t),\n\t\t\tgoalId: Type.Optional(\n\t\t\t\tType.String({\n\t\t\t\t\tdescription: \"Goal this fire_task/send_followup belongs to for durable lane ownership and recovery.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t}),\n\t\tasync execute(toolCallId, params, signal, onUpdate, ctx) {\n\t\t\tconst result = await executeTool(toolCallId, params as Params, signal, onUpdate, ctx, bridge);\n\t\t\tawait queueJobHandoffRefresh(ctx);\n\t\t\treturn result;\n\t\t},\n\t});\n\n\tpi.registerCommand(\"tmux-agents\", {\n\t\tdescription: \"Check tmux availability and show managed-agent guidance.\",\n\t\thandler: async (_args, ctx) => {\n\t\t\tconst detection = detectTmux();\n\t\t\tconst text = detection.cliAvailable\n\t\t\t\t? tmuxManagerInstructions(\"agent/provider\", detection)\n\t\t\t\t: setupHelp(detection);\n\t\t\tctx.ui.notify(text, detection.cliAvailable ? \"info\" : \"warning\");\n\t\t},\n\t});\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/bundled-resources/extensions/tmux-agent-manager/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawnSync } from \"node:child_process\";\nimport * as crypto from \"node:crypto\";\nimport * as fs from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport * as path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport {\n\ttype ExtensionAPI,\n\ttype ExtensionContext,\n\tencodeWorkerSessionAllowedPaths,\n\tgetProcessWorkRun,\n\torchestrationThinkingLevelSchema,\n\tPI_ORCHESTRATION_AGENT_ID_ENV,\n\tPI_WORKER_ALLOWED_PATHS_ENV,\n} from \"@caupulican/pi-adaptative\";\nimport type { AgentToolResult, ThinkingLevel } from \"@caupulican/pi-agent-core\";\nimport type { Usage } from \"@caupulican/pi-ai\";\nimport { Type } from \"typebox\";\nimport {\n\tbuildLaunchProfileFlags,\n\tDEFAULT_MANAGED_WORKER_TOOLS,\n\tdecodeTmuxWorkerUsageClaim,\n\tderiveWorkerLaunchProfile,\n\ttype LaunchProfileFlag,\n\ttype Provider,\n\ttype WorkerLaunchProfile,\n} from \"./launch-profile.ts\";\n\nexport const piConfig = { tools: [\"tmux_agent_manager\"] };\n\ntype Action =\n\t| \"status\"\n\t| \"setup_help\"\n\t| \"guard\"\n\t| \"notify\"\n\t| \"set_status\"\n\t| \"clear_status\"\n\t| \"workspace_plan\"\n\t| \"launch_workspace\"\n\t| \"fire_task\"\n\t| \"send_followup\"\n\t| \"dismiss\"\n\t| \"job_status\"\n\t| \"list_jobs\"\n\t| \"set_variable\"\n\t| \"list_variables\"\n\t| \"list_templates\"\n\t| \"show_template\"\n\t| \"stop_job\"\n\t| \"stop_session\";\n\ntype AgentSpec = {\n\tprovider?: Provider;\n\tname?: string;\n\tcommand?: string;\n\t/** Optional workspace. Sets cwd; narrows Pi structured file tools but not external host processes. */\n\tpath?: string;\n\t/** Legacy process cwd override. Does not narrow the managed profile. */\n\tcwd?: string;\n\ttools?: string[];\n\tresourceProfile?: string;\n\tthinkingLevel?: ThinkingLevel;\n\t/**\n\t * Pi-only worktree-sync lane binding. Goal dispatch supplies this automatically; an explicit\n\t * fire_task profile may also narrow a Pi worker to a named lane. The launch adds\n\t * `--worktree-lane <key>` and the lane doctrine through the immutable profile.\n\t */\n\tworktreeLane?: string;\n};\ntype TeamTemplate = {\n\tname: string;\n\tdescription: string;\n\tagents: AgentSpec[];\n\tdeadlineSeconds?: number;\n\tnotes?: string[];\n};\ntype Params = {\n\taction?: Action;\n\ttitle?: string;\n\tbody?: string;\n\tsubtitle?: string;\n\tstatusKey?: string;\n\tstatus?: string;\n\ticon?: string;\n\tcolor?: string;\n\tworkspaceName?: string;\n\tcwd?: string;\n\tagents?: AgentSpec[];\n\tteamTemplate?: string;\n\ttask?: string;\n\tjobId?: string;\n\tagentId?: string;\n\tvariableName?: string;\n\tvariableValue?: string;\n\tdeadlineSeconds?: number;\n\tdryRun?: boolean;\n\tforce?: boolean;\n\tconfirm?: string;\n\t/** Non-retained launch identity for a fresh fire_task. Unlike jobId, extension identity memory\n\t * never auto-fills this field from an earlier result. */\n\tlaunchKey?: string;\n\t/** Goal this dispatch is scoped to. Goal-bound dispatch wires this through to managed-lane\n\t * ownership and the child process's task-recovery fence. */\n\tgoalId?: string;\n};\n\ntype RunResult = { ok: boolean; status: number | null; stdout: string; stderr: string; error?: string; args: string[] };\ntype TmuxDetection = {\n\tinsideTmux: boolean;\n\ttmuxBin?: string;\n\tcliAvailable: boolean;\n\tversion?: string;\n\tcurrentSession?: string;\n\tsessions: string[];\n\tenv: { tmux?: string; term?: string };\n\terrors: string[];\n};\ntype AgentResult = {\n\tstatus: string;\n\tmarker?: string;\n\tdetectedAt?: string;\n\treason?: string;\n};\ntype VariableState = { updatedAt: string | null; variables: Record<string, unknown> };\ntype FireAgentPlan = {\n\tid: string;\n\tname: string;\n\tprovider: Provider;\n\tcommand?: string;\n\tcwd: string;\n\tdoneMarker: string;\n\tblockedMarker: string;\n\tpromptPath: string;\n\tlogPath: string;\n\tresultPath: string;\n\tpaneId?: string;\n\tresult?: AgentResult;\n\tresourceProfile?: string;\n\tthinkingLevel?: ThinkingLevel;\n\t/** Last turn dispatched to this agent's pane via fire_task (1) or send_followup (>=2). Absent means 1. */\n\tcurrentTurn?: number;\n\t/** Last turn whose terminal handoff was delivered to the parent. Absent means 0 (never notified). */\n\tnotifiedTurn?: number;\n\t/** A follow-up turn durably reserved before its prompt is injected. Reconciliation may re-arm its\n\t * watcher, but never re-injects it: a retry must not duplicate an uncertain external side effect. */\n\tpendingTurn?: number;\n\t/** Mirrors `AgentSpec.worktreeLane` -- carried onto the plan so `applyLaunchProfile` (per-agent\n\t * flags) and the dispatch-phase `reportManagedLane` call can both read it after `buildFireTaskPlan`. */\n\tworktreeLane?: string;\n\t/** Durable host-lifecycle metadata for the current turn. */\n\tdispatchProfileId?: string;\n\tdispatchAuthorizationId?: string;\n\tdispatchAuthorizationKind?: \"profile-derived\" | \"legacy-recovery\";\n\tdispatchAllowedTools?: string[];\n\tdispatchWritePaths?: string[];\n\tdispatchInstructions?: string;\n\tdispatchGoalId?: string;\n\tdispatchLeaseTtlMs?: number;\n};\ntype FireTaskPlan = {\n\tid: string;\n\tcreatedAt: string;\n\tnotifiedAt?: string;\n\tparentSessionFile?: string;\n\tworkspaceName: string;\n\tsessionName: string;\n\tcwd: string;\n\ttask: string;\n\tteamTemplate?: string;\n\tdeadlineSeconds: number;\n\tjobDir: string;\n\tjobPath: string;\n\tvarsPath: string;\n\twatcherPath: string;\n\tagents: FireAgentPlan[];\n\tlaunchCommands: string[];\n\tvariables?: VariableState;\n\t/** Mirrors the follow-up target agent's currentTurn, for external observability (job_status). */\n\tcurrentTurn?: number;\n\t/** Set when session-level reconcile finds the tmux session gone while the job was not terminal. Informational only; nothing is ever killed to produce this state. */\n\torphanedAt?: string;\n\t/** Set by action=dismiss after its pane watchers are detached. The tmux session is left running. */\n\tdismissedAt?: string;\n};\n/** The subset of FireTaskPlan the pane watcher generator actually reads — narrow on purpose so a\n * synthesized single-agent, single-turn spec (send_followup, reconcile resume) can reuse it without\n * fabricating unrelated FireTaskPlan fields (createdAt, jobPath, task, ...). */\ntype PaneWatcherJobSpec = Pick<FireTaskPlan, \"id\" | \"sessionName\" | \"deadlineSeconds\" | \"agents\">;\ntype ManagedLaneDispatchBridge = {\n\tsequence: number;\n\tinstructions: string;\n\tprofileId: string;\n\tprovider: string;\n\tauthorizationId: string;\n\tauthorizationKind: \"profile-derived\" | \"legacy-recovery\";\n\tallowedTools: readonly string[];\n\twritePaths: readonly string[];\n\tleaseTtlMs: number;\n};\ntype ManagedLaneBridgeEventBase = {\n\tlaneId: string;\n\tgoalId?: string;\n\tworktreeLaneKey?: string;\n};\ntype ManagedLaneBridgeEvent =\n\t| (ManagedLaneBridgeEventBase & { phase: \"dispatch\"; dispatch: ManagedLaneDispatchBridge })\n\t| (ManagedLaneBridgeEventBase & {\n\t\t\tphase: \"terminal\";\n\t\t\tstatus?: string;\n\t\t\treasonCode?: string;\n\t\t\tchangedFiles?: string[];\n\t\t\tusage?: Usage;\n\t });\n/** The subset of `ExtensionAPI` this file calls through a narrow local type instead of the full\n * `ExtensionAPI`, so a lightweight test double only needs to implement what a given test path actually\n * exercises. Production hosts provide `reportManagedLane`, making its pre-launch durable reservation a\n * hard gate. The optional shape only preserves standalone extension-test hosts; without the bridge,\n * lifecycle durability is explicitly unavailable. `reportSpawnedUsage` remains an advisory claim sink.\n * `getActiveTools` supplies the parent's current tool surface so a new worker profile can inherit its\n * policy-owned worker-compatible subset without asking the model to reconstruct it. */\ntype HostBridge = {\n\treportManagedLane?: (event: ManagedLaneBridgeEvent) => void;\n\treportSpawnedUsage?: (usage: Usage, opts?: { label?: string; sourceSessionId?: string; reportId?: string }) => void;\n\tgetActiveTools?: () => string[];\n\tgetThinkingLevel?: () => ThinkingLevel;\n\tgetEffectiveResourceProfile?: ExtensionAPI[\"getEffectiveResourceProfile\"];\n};\nfunction agentLaneId(jobId: string, agentId: string): string {\n\treturn `tmux:${jobId}:${agentId}`;\n}\n\nfunction managedDispatch(job: FireTaskPlan, agent: FireAgentPlan): ManagedLaneDispatchBridge {\n\tconst sequence = agent.currentTurn ?? 1;\n\tconst instructions = agent.dispatchInstructions ?? job.task;\n\tconst authorizationId = agent.dispatchAuthorizationId ?? `legacy-job:${job.id}:turn:${sequence}`;\n\treturn {\n\t\tsequence,\n\t\tinstructions,\n\t\tprofileId: agent.dispatchProfileId ?? `tmux:${agent.provider}`,\n\t\tprovider: agent.provider,\n\t\tauthorizationId,\n\t\tauthorizationKind: agent.dispatchAuthorizationKind ?? \"legacy-recovery\",\n\t\tallowedTools: agent.dispatchAllowedTools ?? DEFAULT_MANAGED_WORKER_TOOLS,\n\t\twritePaths: agent.dispatchWritePaths ?? [],\n\t\tleaseTtlMs: agent.dispatchLeaseTtlMs ?? job.deadlineSeconds * 1_000,\n\t};\n}\n\nfunction applyManagedProfile(\n\tagent: FireAgentPlan,\n\tprofile: WorkerLaunchProfile,\n\targs: { instructions: string; goalId?: string; leaseTtlMs: number },\n): void {\n\tagent.dispatchProfileId = profile.identity;\n\tagent.dispatchAuthorizationId = profile.identity;\n\tagent.dispatchAuthorizationKind = \"profile-derived\";\n\tagent.dispatchAllowedTools = [...profile.allowedTools];\n\tagent.dispatchWritePaths = [...profile.writePaths];\n\tapplyManagedTurn(agent, args);\n}\n\nfunction applyManagedTurn(\n\tagent: FireAgentPlan,\n\targs: { instructions: string; goalId?: string; leaseTtlMs: number },\n): void {\n\tagent.dispatchInstructions = args.instructions;\n\tagent.dispatchGoalId = args.goalId;\n\tagent.dispatchLeaseTtlMs = args.leaseTtlMs;\n}\n\nfunction reportManagedDispatchReservations(\n\tbridge: HostBridge,\n\tjob: FireTaskPlan,\n\tagents: readonly FireAgentPlan[],\n): void {\n\tif (!bridge.reportManagedLane) return;\n\tconst attemptedLaneIds: string[] = [];\n\ttry {\n\t\tfor (const agent of agents) {\n\t\t\tconst laneId = agentLaneId(job.id, agent.id);\n\t\t\tattemptedLaneIds.push(laneId);\n\t\t\tbridge.reportManagedLane({\n\t\t\t\tlaneId,\n\t\t\t\tphase: \"dispatch\",\n\t\t\t\tgoalId: agent.dispatchGoalId,\n\t\t\t\tworktreeLaneKey: agent.worktreeLane,\n\t\t\t\tdispatch: managedDispatch(job, agent),\n\t\t\t});\n\t\t}\n\t} catch (error: unknown) {\n\t\tfor (const laneId of attemptedLaneIds) {\n\t\t\ttry {\n\t\t\t\tbridge.reportManagedLane({\n\t\t\t\t\tlaneId,\n\t\t\t\t\tphase: \"terminal\",\n\t\t\t\t\tstatus: \"failed\",\n\t\t\t\t\treasonCode: \"managed_process_launch_reservation_failed\",\n\t\t\t\t});\n\t\t\t} catch {\n\t\t\t\t// Preserve the reservation error; durable leases fence any compensation failure.\n\t\t\t}\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nfunction reportManagedLaunchFailure(bridge: HostBridge, job: FireTaskPlan, reasonCode: string): void {\n\tif (!bridge.reportManagedLane) return;\n\tfor (const agent of job.agents) {\n\t\treportManagedAgentFailure(bridge, job.id, agent.id, reasonCode);\n\t}\n}\n\nfunction reportManagedAgentFailure(bridge: HostBridge, jobId: string, agentId: string, reasonCode: string): void {\n\tif (!bridge.reportManagedLane) return;\n\ttry {\n\t\tbridge.reportManagedLane({\n\t\t\tlaneId: agentLaneId(jobId, agentId),\n\t\t\tphase: \"terminal\",\n\t\t\tstatus: \"failed\",\n\t\t\treasonCode,\n\t\t});\n\t} catch {\n\t\t// Preserve the launch failure; durable leases fence any terminal-report failure.\n\t}\n}\n\nconst EXTENSION_ROOT = path.dirname(fileURLToPath(import.meta.url));\nexport function getTmuxAgentManagerDataRoot(): string {\n\tconst agentDir =\n\t\tprocess.env.PI_ADAPTATIVE_CODING_AGENT_DIR ||\n\t\tprocess.env[\"PI-ADAPTATIVE_CODING_AGENT_DIR\"] ||\n\t\tprocess.env.PI_CODING_AGENT_DIR ||\n\t\tprocess.env.PI_AGENT_DIR ||\n\t\tpath.join(homedir(), \".pi\", \"agent\");\n\treturn getProcessWorkRun(agentDir, \"background\", \"tmux-agent-manager\", \"state\").path;\n}\nfunction jobsRoot(): string {\n\treturn path.join(getTmuxAgentManagerDataRoot(), \"jobs\");\n}\nfunction archiveRoot(): string {\n\treturn path.join(getTmuxAgentManagerDataRoot(), \"archives\");\n}\nfunction templateDirs(): string[] {\n\treturn [path.join(EXTENSION_ROOT, \"templates\"), path.join(getTmuxAgentManagerDataRoot(), \"templates\")];\n}\nconst MAX_OUTPUT = 12_000;\nconst DEFAULT_AGENT_PROVIDERS: Provider[] = [\"pi\", \"agy\", \"codex\"];\nconst PROVIDER_COMMANDS: Record<Provider, string> = {\n\tpi: \"pi\",\n\tcodex: \"codex\",\n\tagy: \"agy\",\n\tclaude: \"claude\",\n\topencode: \"opencode\",\n\tcustom: \"\",\n};\nfunction providerSchema(description?: string) {\n\treturn Type.Union(\n\t\t[\n\t\t\tType.Literal(\"pi\"),\n\t\t\tType.Literal(\"codex\"),\n\t\t\tType.Literal(\"agy\"),\n\t\t\tType.Literal(\"claude\"),\n\t\t\tType.Literal(\"opencode\"),\n\t\t\tType.Literal(\"custom\"),\n\t\t],\n\t\tdescription === undefined ? {} : { description },\n\t);\n}\nconst DEFAULT_DEADLINE_SECONDS = 20 * 60;\nconst MAX_DEADLINE_SECONDS = 24 * 60 * 60;\nconst TEAM_TEMPLATES: TeamTemplate[] = [\n\t{\n\t\tname: \"provider-prompt-smoke\",\n\t\tdescription:\n\t\t\t\"Real minimal interactive prompt smoke for native Claude, Agy, and Pi. Consumes provider/model tokens.\",\n\t\tdeadlineSeconds: 10 * 60,\n\t\tagents: [\n\t\t\t{ provider: \"claude\", name: \"claude-prompt-smoke\" },\n\t\t\t{ provider: \"agy\", name: \"agy-prompt-smoke\" },\n\t\t\t{ provider: \"pi\", name: \"pi-prompt-smoke\" },\n\t\t],\n\t\tnotes: [\n\t\t\t\"Use only when model-token/auth validation is intended.\",\n\t\t\t\"The manager arms pane capture, starts each CLI with its task, and watches DONE/BLOCKED markers.\",\n\t\t],\n\t},\n\t{\n\t\tname: \"full-provider-review\",\n\t\tdescription:\n\t\t\t\"Interactive native-provider review team: Pi lead, Claude reviewer, Agy validator, Agy reviewer. Consumes provider/model tokens.\",\n\t\tdeadlineSeconds: 30 * 60,\n\t\tagents: [\n\t\t\t{ provider: \"pi\", name: \"pi-lead\" },\n\t\t\t{ provider: \"claude\", name: \"claude-reviewer\" },\n\t\t\t{ provider: \"agy\", name: \"agy-validator\" },\n\t\t\t{ provider: \"agy\", name: \"agy-reviewer\" },\n\t\t],\n\t\tnotes: [\n\t\t\t\"Best for non-trivial review/QA where independent native CLIs help.\",\n\t\t\t\"Keep the task objective bounded; inspect captured panes/result files before accepting PASS.\",\n\t\t],\n\t},\n\t{\n\t\tname: \"builder-validator\",\n\t\tdescription:\n\t\t\t\"Interactive implementation loop: Agy builder, Claude reviewer, Agy validator, Pi coordinator. Good default for scoped code work.\",\n\t\tdeadlineSeconds: 25 * 60,\n\t\tagents: [\n\t\t\t{ provider: \"agy\", name: \"builder\" },\n\t\t\t{ provider: \"claude\", name: \"code-reviewer\" },\n\t\t\t{ provider: \"agy\", name: \"validator\" },\n\t\t\t{ provider: \"pi\", name: \"coordinator\" },\n\t\t],\n\t\tnotes: [\n\t\t\t\"Use for implementation/QA batches; never claim complete until result files and validation evidence are inspected.\",\n\t\t],\n\t},\n];\n\nfunction cap(text: string, max = MAX_OUTPUT): string {\n\treturn text.length <= max ? text : `${text.slice(0, max)}\\n...[truncated ${text.length - max} chars]`;\n}\nfunction firstString(...values: unknown[]): string | undefined {\n\tfor (const value of values) if (typeof value === \"string\" && value.trim()) return value.trim();\n\treturn undefined;\n}\nfunction errorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\nfunction clampInt(value: unknown, fallback: number, min: number, max: number): number {\n\tif (typeof value !== \"number\" || !Number.isFinite(value)) return fallback;\n\treturn Math.max(min, Math.min(max, Math.trunc(value)));\n}\nfunction findExecutable(name: string): string | undefined {\n\tfor (const dir of (process.env.PATH || \"\").split(path.delimiter)) {\n\t\tif (!dir) continue;\n\t\tconst candidate = path.join(dir, process.platform === \"win32\" ? `${name}.exe` : name);\n\t\ttry {\n\t\t\tif (fs.statSync(candidate).isFile()) return candidate;\n\t\t} catch {\n\t\t\t/* ignore */\n\t\t}\n\t}\n\treturn undefined;\n}\nfunction quoteShell(value: string): string {\n\treturn `'${value.replace(/'/g, `'\\\\''`)}'`;\n}\nfunction ensureDir(dir: string): void {\n\tfs.mkdirSync(dir, { recursive: true, mode: 0o700 });\n}\nfunction resolveCwd(ctx: ExtensionContext, requested?: string): string {\n\tconst cwd = path.resolve(ctx.cwd || process.cwd(), requested?.trim() || \".\");\n\tconst stat = fs.statSync(cwd);\n\tif (!stat.isDirectory()) throw new Error(`cwd is not a directory: ${cwd}`);\n\treturn cwd;\n}\nfunction safeName(value: string, fallback = \"pi-agents\"): string {\n\tconst safe = value\n\t\t.toLowerCase()\n\t\t.replace(/[^a-z0-9_.:-]+/g, \"-\")\n\t\t.replace(/^-+|-+$/g, \"\")\n\t\t.slice(0, 60);\n\treturn safe || fallback;\n}\nfunction makeJobId(): string {\n\treturn `tmux-${Date.now().toString(36)}-${crypto.randomBytes(4).toString(\"hex\")}`;\n}\nfunction safeStatusKey(value?: string): string {\n\tconst raw = value?.trim() || \"pi-agents\";\n\tif (!/^[a-zA-Z0-9_.:-]{1,80}$/.test(raw))\n\t\tthrow new Error(\"statusKey must be 1-80 chars: letters, numbers, _, ., :, or -\");\n\treturn raw;\n}\n\nfunction runTmux(args: string[], timeoutMs = 5_000): RunResult {\n\tconst tmux = process.env.PI_TMUX_MANAGER_TMUX_BIN || findExecutable(\"tmux\") || \"tmux\";\n\tconst result = spawnSync(tmux, args, {\n\t\tencoding: \"utf8\",\n\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\ttimeout: timeoutMs,\n\t\tmaxBuffer: 256 * 1024,\n\t});\n\treturn {\n\t\tok: !result.error && result.status === 0,\n\t\tstatus: result.status,\n\t\tstdout: cap(result.stdout || \"\"),\n\t\tstderr: cap(result.stderr || \"\"),\n\t\terror: result.error ? String(result.error.message || result.error) : undefined,\n\t\targs: [tmux, ...args],\n\t};\n}\nfunction requireTmuxRun(result: RunResult, action: string): void {\n\tif (!result.ok) throw new Error(`${action} failed: ${result.error || result.stderr || `exit ${result.status}`}`);\n}\nfunction detectTmux(): TmuxDetection {\n\tconst tmuxBin = process.env.PI_TMUX_MANAGER_TMUX_BIN || findExecutable(\"tmux\");\n\tconst errors: string[] = [];\n\tlet version: string | undefined;\n\tlet currentSession: string | undefined;\n\tlet sessions: string[] = [];\n\tconst insideTmux = Boolean(process.env.TMUX);\n\tif (!tmuxBin) errors.push(\"tmux CLI not found on PATH.\");\n\telse {\n\t\tconst versionRun = runTmux([\"-V\"], 2_000);\n\t\tif (versionRun.ok) version = versionRun.stdout.trim();\n\t\telse errors.push(`tmux -V failed: ${versionRun.error || versionRun.stderr || `exit ${versionRun.status}`}`);\n\t\tconst listRun = runTmux([\"list-sessions\", \"-F\", \"#{session_name}\"]);\n\t\tif (listRun.ok) sessions = listRun.stdout.trim() ? listRun.stdout.trim().split(/\\n+/) : [];\n\t\telse if (!/no server running/i.test(listRun.stderr))\n\t\t\terrors.push(`tmux list-sessions failed: ${listRun.error || listRun.stderr || `exit ${listRun.status}`}`);\n\t\tif (insideTmux) {\n\t\t\tconst sessionRun = runTmux([\"display-message\", \"-p\", \"#S\"], 2_000);\n\t\t\tif (sessionRun.ok) currentSession = sessionRun.stdout.trim();\n\t\t}\n\t}\n\treturn {\n\t\tinsideTmux,\n\t\ttmuxBin,\n\t\tcliAvailable: Boolean(tmuxBin),\n\t\tversion,\n\t\tcurrentSession,\n\t\tsessions,\n\t\tenv: { tmux: process.env.TMUX, term: process.env.TERM },\n\t\terrors,\n\t};\n}\nfunction formatDetection(d: TmuxDetection): string {\n\treturn [\n\t\t`tmux: ${d.cliAvailable ? \"available\" : \"missing\"}`,\n\t\td.tmuxBin ? `bin: ${d.tmuxBin}` : undefined,\n\t\td.version ? `version: ${d.version}` : undefined,\n\t\t`insideTmux: ${d.insideTmux}`,\n\t\td.currentSession ? `currentSession: ${d.currentSession}` : undefined,\n\t\td.sessions.length ? `sessions: ${d.sessions.join(\", \")}` : \"sessions: none\",\n\t\td.errors.length ? `errors:\\n- ${d.errors.join(\"\\n- \")}` : undefined,\n\t]\n\t\t.filter(Boolean)\n\t\t.join(\"\\n\");\n}\nfunction setupHelp(d: TmuxDetection): string {\n\tif (d.cliAvailable)\n\t\treturn `tmux CLI available: ${d.tmuxBin || \"tmux\"}\\nUse native delegate for ordinary subagents. Use tmux_agent_manager when a persistent interactive provider pane benefits the task; set dryRun=true only when a preview is useful.`;\n\treturn [\n\t\t\"tmux CLI not found.\",\n\t\t\"Ordinary subagents remain available through native delegate; do not abort delegation.\",\n\t\t\"Install tmux only if persistent interactive provider panes are required, then reload Pi:\",\n\t\t\"- Debian/Ubuntu/WSL: sudo apt-get install tmux\",\n\t\t\"- Fedora: sudo dnf install tmux\",\n\t\t\"- Arch: sudo pacman -S tmux\",\n\t\t\"- macOS: brew install tmux\",\n\t\t\"- Native Windows: use native delegate. WSL may use tmux when it is installed on PATH.\",\n\t\t\"cmux is macOS-only and intentionally not used by this tmux manager.\",\n\t].join(\"\\n\");\n}\nasync function guardTmux(_ctx: ExtensionContext, detection: TmuxDetection, purpose: string) {\n\tif (detection.cliAvailable) return { allowed: true, text: `tmux available for ${purpose}.` };\n\treturn {\n\t\tallowed: false,\n\t\ttext: `${setupHelp(detection)}\\n\\nTmux route unavailable. Continue ordinary subagent work with native delegate.`,\n\t};\n}\nfunction tmuxManagerInstructions(toolName: string, detection: TmuxDetection): string {\n\treturn [\n\t\t`tmux is available (${detection.version || detection.tmuxBin || \"tmux\"}). Native delegate remains the standard subagent route. Use tmux_agent_manager when managed ${toolName} panes need persistent interactive provider processes.`,\n\t\t\"Suggested next call:\",\n\t\t'tmux_agent_manager({ action: \"fire_task\", teamTemplate: \"builder-validator\", task: \"<objective>\" })',\n\t\t\"The launch returns after pane capture is armed and each provider command receives its initial task.\",\n\t\t\"Managed mode creates panes, prompt files, result files, event-driven terminal handoffs, tmux display-message notifications, @pi_* status options, shared variables, and one-shot deadlines.\",\n\t].join(\"\\n\");\n}\nfunction validateTemplate(value: unknown, source: string): TeamTemplate {\n\tif (!value || typeof value !== \"object\") throw new Error(`${source}: template must be an object`);\n\tconst template = value as TeamTemplate;\n\tif (!firstString(template.name)) throw new Error(`${source}: missing name`);\n\tif (!firstString(template.description)) throw new Error(`${source}: missing description`);\n\tif (!Array.isArray(template.agents) || template.agents.length < 1)\n\t\tthrow new Error(`${source}: agents must be a non-empty array`);\n\tif (template.agents.length > 12) throw new Error(`${source}: agents max is 12`);\n\ttemplate.agents.forEach((agent, index) => {\n\t\tconst provider = agent.provider || \"custom\";\n\t\tif (!Object.hasOwn(PROVIDER_COMMANDS, provider))\n\t\t\tthrow new Error(`${source}: unsupported provider at agents[${index}]: ${provider}`);\n\t\tif (provider === \"custom\" && !firstString(agent.command))\n\t\t\tthrow new Error(`${source}: custom agent ${agent.name || index} needs command`);\n\t});\n\treturn template;\n}\nfunction loadTemplateFiles(): { templates: TeamTemplate[]; errors: string[] } {\n\tconst templates: TeamTemplate[] = [];\n\tconst errors: string[] = [];\n\tfor (const dir of templateDirs()) {\n\t\tlet entries: fs.Dirent[] = [];\n\t\ttry {\n\t\t\tentries = fs.readdirSync(dir, { withFileTypes: true });\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const entry of entries) {\n\t\t\tif (!entry.isFile() || !entry.name.endsWith(\".json\")) continue;\n\t\t\tconst filePath = path.join(dir, entry.name);\n\t\t\ttry {\n\t\t\t\tconst parsed = JSON.parse(fs.readFileSync(filePath, \"utf8\"));\n\t\t\t\ttemplates.push(validateTemplate(parsed, filePath));\n\t\t\t} catch (error: unknown) {\n\t\t\t\terrors.push(`${filePath}: ${errorMessage(error)}`);\n\t\t\t}\n\t\t}\n\t}\n\treturn { templates, errors };\n}\nfunction getTeamTemplates(): { templates: TeamTemplate[]; errors: string[] } {\n\tconst byName = new Map<string, TeamTemplate>();\n\tfor (const template of TEAM_TEMPLATES) byName.set(template.name.toLowerCase(), template);\n\tconst loaded = loadTemplateFiles();\n\tfor (const template of loaded.templates) byName.set(template.name.toLowerCase(), template);\n\treturn { templates: Array.from(byName.values()), errors: loaded.errors };\n}\nfunction findTeamTemplate(name?: string): TeamTemplate | undefined {\n\tif (!name) return undefined;\n\tconst wanted = name.trim().toLowerCase();\n\treturn getTeamTemplates().templates.find((template) => template.name.toLowerCase() === wanted);\n}\nfunction requireTeamTemplate(name?: string): TeamTemplate {\n\tconst { templates, errors } = getTeamTemplates();\n\tconst wanted = name?.trim().toLowerCase();\n\tconst template = wanted ? templates.find((item) => item.name.toLowerCase() === wanted) : undefined;\n\tif (!template)\n\t\tthrow new Error(\n\t\t\t`unknown teamTemplate '${name || \"\"}'. Use action=list_templates.${errors.length ? ` Template load errors: ${errors.join(\"; \")}` : \"\"}`,\n\t\t);\n\treturn template;\n}\nfunction templateSummary(): { text: string; templates: TeamTemplate[]; errors: string[] } {\n\tconst loaded = getTeamTemplates();\n\tconst lines = loaded.templates.map((template) => `- ${template.name}: ${template.description}`);\n\tif (loaded.errors.length) lines.push(\"\", \"Template load errors:\", ...loaded.errors.map((error) => `- ${error}`));\n\treturn { text: lines.join(\"\\n\"), ...loaded };\n}\nfunction formatTemplate(template: TeamTemplate): string {\n\treturn JSON.stringify(template, null, 2);\n}\nfunction templateDefaults(params: Params): Partial<TeamTemplate> {\n\treturn findTeamTemplate(params.teamTemplate) || {};\n}\n\nfunction normalizeAgents(params: Params): AgentSpec[] {\n\tconst template = findTeamTemplate(params.teamTemplate);\n\tconst input: AgentSpec[] = params.agents?.length\n\t\t? params.agents\n\t\t: template?.agents?.length\n\t\t\t? template.agents\n\t\t\t: DEFAULT_AGENT_PROVIDERS.map((provider) => ({ provider }));\n\tif (input.length < 1) throw new Error(\"agents must contain at least one agent\");\n\tif (input.length > 12) throw new Error(\"agents max is 12\");\n\treturn input.map((agent, index) => {\n\t\tconst provider = agent.provider || \"custom\";\n\t\tif (!Object.hasOwn(PROVIDER_COMMANDS, provider)) throw new Error(`unsupported provider: ${provider}`);\n\t\tconst name =\n\t\t\tfirstString(agent.name, provider === \"custom\" ? `custom-${index + 1}` : provider) || `agent-${index + 1}`;\n\t\tconst command = firstString(agent.command, PROVIDER_COMMANDS[provider]);\n\t\tif (!command) throw new Error(`agent ${name} needs command when provider=custom`);\n\t\tconst tools = Array.isArray(agent.tools) && agent.tools.length > 0 ? agent.tools : undefined;\n\t\tconst resourceProfile = firstString(agent.resourceProfile);\n\t\tif (provider !== \"pi\" && (tools || resourceProfile || agent.thinkingLevel || agent.worktreeLane)) {\n\t\t\tthrow new Error(\n\t\t\t\t`agent ${name}: tools, resourceProfile, thinkingLevel, and worktreeLane overrides are Pi-only; configure ${provider}'s native CLI in command instead`,\n\t\t\t);\n\t\t}\n\t\treturn {\n\t\t\tprovider,\n\t\t\tname,\n\t\t\tcommand,\n\t\t\tpath: firstString(agent.path),\n\t\t\tcwd: agent.cwd,\n\t\t\ttools,\n\t\t\tresourceProfile,\n\t\t\tthinkingLevel: agent.thinkingLevel,\n\t\t\tworktreeLane: agent.worktreeLane,\n\t\t};\n\t});\n}\nfunction defaultProviderInvocation(provider: Provider): string {\n\tswitch (provider) {\n\t\tcase \"pi\":\n\t\t\treturn \"pi\";\n\t\tcase \"agy\":\n\t\t\treturn \"agy\";\n\t\tcase \"codex\":\n\t\t\treturn \"codex\";\n\t\tcase \"claude\":\n\t\t\treturn \"claude\";\n\t\tcase \"opencode\":\n\t\t\treturn \"opencode\";\n\t\tcase \"custom\":\n\t\t\treturn \"\";\n\t}\n}\nfunction interactivePromptText(prompt: string): string {\n\treturn prompt.replace(/\\r?\\n/g, \"\\\\n\");\n}\nfunction initialPromptInvocation(command: string, provider: Provider, promptPath: string): string {\n\tconst promptArgument = `\"$(cat ${quoteShell(promptPath)})\"`;\n\tif (provider === \"agy\" && !/(?:^|\\s)(?:-i|--prompt-interactive)(?:\\s|$)/.test(command)) {\n\t\treturn `${command} --prompt-interactive ${promptArgument}`;\n\t}\n\treturn `${command} ${promptArgument}`;\n}\nfunction spellMarker(marker: string): string {\n\treturn marker.split(\"\").join(\" \");\n}\nfunction managedPrompt(\n\ttask: string,\n\tjobId: string,\n\tagent: { name: string; provider: Provider },\n\tdoneMarker: string,\n\tblockedMarker: string,\n\tvarsPath: string,\n): string {\n\treturn [\n\t\t`You are ${agent.name} (${agent.provider}) working inside a tmux-managed Pi worker pane.`,\n\t\t`Job id: ${jobId}`,\n\t\t`Shared variable file: ${varsPath}`,\n\t\t\"\",\n\t\t\"Objective:\",\n\t\ttask,\n\t\t\"\",\n\t\t\"Rules:\",\n\t\t\"- Work autonomously until honest PASS or BLOCKED.\",\n\t\t\"- Verify important claims before PASS; include concise evidence.\",\n\t\t\"- Use the assigned profile without asking for routine permission. Report BLOCKED only when missing external information or an unavailable dependency makes the objective impossible.\",\n\t\t\"- Never print secrets/tokens. Prompts, commands, and logs persist under ~/.pi/agent/work/background/tmux-agent-manager/state/jobs.\",\n\t\t\"- If a task names an external decision variable, read it only at the decision point; never loop or poll the shared JSON file.\",\n\t\t\"\",\n\t\t\"Completion contract:\",\n\t\t\"Your final response must contain exactly one marker line. Build it by removing spaces from one of these character sequences:\",\n\t\t` DONE: ${spellMarker(doneMarker)}`,\n\t\t` BLOCKED: ${spellMarker(blockedMarker)}`,\n\t\t\"If BLOCKED, print a short reason on the next line. Do not print either marker until the final answer. After marker, stop.\",\n\t].join(\"\\n\");\n}\nfunction buildWorkspacePlan(ctx: ExtensionContext, params: Params) {\n\tconst cwd = resolveCwd(ctx, params.cwd);\n\tconst agents = normalizeAgents(params).map((agent, index) => ({\n\t\t...agent,\n\t\tcwd: resolveCwd(ctx, agent.path || agent.cwd || cwd),\n\t\tid: `${safeName(agent.name || agent.provider || \"agent\")}-${index + 1}`,\n\t}));\n\tconst workspaceName = firstString(params.workspaceName, `pi-agents-${Date.now().toString(36)}`) || \"pi-agents\";\n\tconst sessionName = safeName(workspaceName, \"pi-agents\");\n\tconst launchCommands = agents.map(\n\t\t(agent) => `tmux pane: ${agent.name} -> cd ${quoteShell(agent.cwd)} && ${agent.command}`,\n\t);\n\treturn { workspaceName, sessionName, cwd, agents, launchCommands };\n}\nexport function makePaneWatcherScript(job: PaneWatcherJobSpec): string {\n\tconst agentCases = job.agents.flatMap((agent) => [\n\t\t` ${agent.id})`,\n\t\t` agent_name=${quoteShell(agent.name)}`,\n\t\t` agent_id_json=${quoteShell(JSON.stringify(agent.id))}`,\n\t\t` agent_name_json=${quoteShell(JSON.stringify(agent.name))}`,\n\t\t` done_marker=${quoteShell(agent.doneMarker)}`,\n\t\t` blocked_marker=${quoteShell(agent.blockedMarker)}`,\n\t\t` log_path=${quoteShell(agent.logPath)}`,\n\t\t` log_path_json=${quoteShell(JSON.stringify(agent.logPath))}`,\n\t\t` result_path=${quoteShell(agent.resultPath)}`,\n\t\t` stop_request_path=${quoteShell(`${agent.resultPath}.stop-requested`)}`,\n\t\t` pane_id=${quoteShell(agent.paneId || \"\")}`,\n\t\t` pane_id_json=${quoteShell(JSON.stringify(agent.paneId || null))}`,\n\t\t\" ;;\",\n\t]);\n\treturn [\n\t\t\"#!/bin/sh\",\n\t\t\"set -eu\",\n\t\t\"umask 077\",\n\t\t\"LC_ALL=C\",\n\t\t\"export LC_ALL\",\n\t\t`job_id=${quoteShell(job.id)}`,\n\t\t`job_id_json=${quoteShell(JSON.stringify(job.id))}`,\n\t\t`session_name=${quoteShell(job.sessionName)}`,\n\t\t`deadline=${Math.max(1, job.deadlineSeconds)}`,\n\t\t// biome-ignore lint/suspicious/noTemplateCurlyInString: POSIX shell parameter expansion.\n\t\t\"agent_id=${1:-}\",\n\t\t'case \"$agent_id\" in',\n\t\t...agentCases,\n\t\t\" *) printf 'unknown tmux agent id: %s\\\\n' \\\"$agent_id\\\" >&2; exit 2 ;;\",\n\t\t\"esac\",\n\t\t\"lock_path=$result_path.lock\",\n\t\t\"status_path=$result_path.status.$$\",\n\t\t\"timer_pid=\",\n\t\t\"awk_pid=\",\n\t\t\"finish() {\",\n\t\t\" status=$1\",\n\t\t\" notified_by=$2\",\n\t\t' [ ! -e \"$result_path\" ] || return 0',\n\t\t' mkdir \"$lock_path\" 2>/dev/null || return 0',\n\t\t\" finished_at=$(date -u +%Y-%m-%dT%H:%M:%SZ)\",\n\t\t\" temporary=$result_path.tmp.$$\",\n\t\t' printf \\'{\\\\n \"jobId\": %s,\\\\n \"agentId\": %s,\\\\n \"agentName\": %s,\\\\n \"status\": \"%s\",\\\\n \"exitCode\": null,\\\\n \"logPath\": %s,\\\\n \"paneId\": %s,\\\\n \"finishedAt\": \"%s\",\\\\n \"notifiedBy\": \"%s\"\\\\n}\\\\n\\' \\\\',\n\t\t' \"$job_id_json\" \"$agent_id_json\" \"$agent_name_json\" \"$status\" \"$log_path_json\" \"$pane_id_json\" \"$finished_at\" \"$notified_by\" > \"$temporary\"',\n\t\t' mv \"$temporary\" \"$result_path\"',\n\t\t' rm -f \"$stop_request_path\"',\n\t\t\" option_suffix=$(printf '%s' \\\"$job_id-$agent_id\\\" | tr -c 'A-Za-z0-9_.:-' '-')\",\n\t\t' tmux set-option -t \"$session_name\" \"@pi_$option_suffix\" \"$status\" >/dev/null 2>&1 || true',\n\t\t' tmux set-option -t \"$session_name\" \"@pi_$job_id\" \"$status:$agent_name\" >/dev/null 2>&1 || true',\n\t\t' tmux display-message -t \"$session_name\" \"tmux agent $agent_name: $status (job $job_id)\" >/dev/null 2>&1 || true',\n\t\t\"}\",\n\t\t\"cleanup() {\",\n\t\t' [ -z \"$timer_pid\" ] || kill \"$timer_pid\" 2>/dev/null || true',\n\t\t' [ -z \"$awk_pid\" ] || kill \"$awk_pid\" 2>/dev/null || true',\n\t\t' rm -f \"$status_path\"',\n\t\t\"}\",\n\t\t\"terminate() { cleanup; exit 0; }\",\n\t\t\"trap terminate TERM INT HUP\",\n\t\t\"trap cleanup EXIT\",\n\t\t\"parent_pid=$$\",\n\t\t\"exec 3<&0\",\n\t\t\"(\",\n\t\t\" sleep_pid=\",\n\t\t' stop_timer() { [ -z \"$sleep_pid\" ] || kill \"$sleep_pid\" 2>/dev/null || true; exit 0; }',\n\t\t\" trap stop_timer TERM INT HUP\",\n\t\t' sleep \"$deadline\" &',\n\t\t\" sleep_pid=$!\",\n\t\t' wait \"$sleep_pid\" 2>/dev/null || exit 0',\n\t\t\" sleep_pid=\",\n\t\t' if [ -e \"$stop_request_path\" ]; then',\n\t\t\" finish stopped stop-requested-event\",\n\t\t\" else\",\n\t\t\" finish timeout deadline-event\",\n\t\t' [ -z \"$pane_id\" ] || tmux kill-pane -t \"$pane_id\" >/dev/null 2>&1 || true',\n\t\t\" fi\",\n\t\t' kill -TERM \"$parent_pid\" 2>/dev/null || true',\n\t\t\") &\",\n\t\t\"timer_pid=$!\",\n\t\t\"logged_bytes=0\",\n\t\t'[ ! -f \"$log_path\" ] || logged_bytes=$(wc -c < \"$log_path\" | tr -d \\' \\')',\n\t\t'awk -v done=\"$done_marker\" -v blocked=\"$blocked_marker\" -v log_file=\"$log_path\" -v status_file=\"$status_path\" -v logged=\"$logged_bytes\" -v max=4194304 -v esc=\"$(printf \\'\\\\033\\')\" \\'',\n\t\t'function settle(status, reason) { print status \"|\" reason > status_file; close(status_file); settled = 1; exit }',\n\t\t\"{\",\n\t\t\" raw = $0 ORS\",\n\t\t\" remaining = max - logged\",\n\t\t' if (remaining > 0) { if (length(raw) > remaining) raw = substr(raw, 1, remaining); printf \"%s\", raw >> log_file; logged += length(raw) }',\n\t\t\" clean = $0\",\n\t\t' gsub(esc \"\\\\\\\\[[0-9;?]*[ -/]*[@-~]\", \"\", clean)',\n\t\t' gsub(/\\\\r/, \"\", clean)',\n\t\t' sub(/^[ \\\\t]+/, \"\", clean); sub(/[ \\\\t]+$/, \"\", clean)',\n\t\t' if (clean == done) settle(\"done\", \"pane-output-event\")',\n\t\t' if (clean == blocked) settle(\"blocked\", \"pane-output-event\")',\n\t\t\"}\",\n\t\t'END { if (!settled) { print \"failed|pane-stream-ended\" > status_file; close(status_file) } }',\n\t\t\"' <&3 &\",\n\t\t\"awk_pid=$!\",\n\t\t'wait \"$awk_pid\" || true',\n\t\t\"awk_pid=\",\n\t\t'kill \"$timer_pid\" 2>/dev/null || true',\n\t\t'wait \"$timer_pid\" 2>/dev/null || true',\n\t\t\"timer_pid=\",\n\t\t'if [ -e \"$stop_request_path\" ]; then',\n\t\t\" finish stopped stop-requested-event\",\n\t\t'elif [ -f \"$status_path\" ]; then',\n\t\t' terminal=$(cat \"$status_path\")',\n\t\t// biome-ignore lint/suspicious/noTemplateCurlyInString: POSIX shell parameter expansion.\n\t\t' finish \"${terminal%%|*}\" \"${terminal#*|}\"',\n\t\t\"else\",\n\t\t\" finish failed watcher-status-missing\",\n\t\t\"fi\",\n\t\t\"exit 0\",\n\t].join(\"\\n\");\n}\nfunction buildFireTaskPlan(ctx: ExtensionContext, params: Params): FireTaskPlan {\n\tconst defaults = templateDefaults(params);\n\tconst task = firstString(params.task, params.body);\n\tif (!task) throw new Error(\"fire_task requires task (or body) with the worker objective\");\n\tconst cwd = resolveCwd(ctx, params.cwd);\n\tconst id = firstString(params.launchKey) || makeJobId();\n\tif (!/^[a-zA-Z0-9_.:-]{4,80}$/.test(id))\n\t\tthrow new Error(\"launchKey must be 4-80 chars: letters, numbers, _, ., :, or -\");\n\tconst jobDir = path.join(jobsRoot(), id);\n\tconst workspaceName = firstString(params.workspaceName, `Pi job ${id}`) || `Pi job ${id}`;\n\tconst sessionName = safeName(workspaceName, id);\n\tconst rawAgents = normalizeAgents(params);\n\tconst agents: FireAgentPlan[] = rawAgents.map((agent, index) => {\n\t\tconst provider = agent.provider || \"custom\";\n\t\tconst agentCwd = resolveCwd(ctx, agent.path || agent.cwd || cwd);\n\t\tconst slug = `${safeName(agent.name || provider)}-${index + 1}`;\n\t\tconst markerBase = `TMUX_${crypto.createHash(\"sha1\").update(`${id}:${slug}`).digest(\"hex\").slice(0, 10).toUpperCase()}`;\n\t\tconst doneMarker = `${markerBase}_DONE`;\n\t\tconst blockedMarker = `${markerBase}_BLOCKED`;\n\t\treturn {\n\t\t\tid: slug,\n\t\t\tname: firstString(agent.name, provider) || slug,\n\t\t\tprovider,\n\t\t\tcommand: firstString(agent.command, PROVIDER_COMMANDS[provider]),\n\t\t\tcwd: agentCwd,\n\t\t\tdispatchAllowedTools: agent.tools ? [...agent.tools] : undefined,\n\t\t\tdispatchWritePaths: agent.path ? [agentCwd] : undefined,\n\t\t\tdoneMarker,\n\t\t\tblockedMarker,\n\t\t\tpromptPath: path.join(jobDir, `${slug}.prompt.md`),\n\t\t\tlogPath: path.join(jobDir, `${slug}.log`),\n\t\t\tresultPath: path.join(jobDir, `${slug}.result.json`),\n\t\t\tworktreeLane: agent.worktreeLane,\n\t\t\tresourceProfile: agent.resourceProfile,\n\t\t\tthinkingLevel: agent.thinkingLevel,\n\t\t};\n\t});\n\tconst job: FireTaskPlan = {\n\t\tid,\n\t\tcreatedAt: new Date().toISOString(),\n\t\tparentSessionFile: ctx.sessionManager.getSessionFile(),\n\t\tworkspaceName,\n\t\tsessionName,\n\t\tcwd,\n\t\ttask,\n\t\tteamTemplate: params.teamTemplate,\n\t\tdeadlineSeconds: clampInt(\n\t\t\tparams.deadlineSeconds,\n\t\t\tdefaults.deadlineSeconds || DEFAULT_DEADLINE_SECONDS,\n\t\t\t5,\n\t\t\tMAX_DEADLINE_SECONDS,\n\t\t),\n\t\tjobDir,\n\t\tjobPath: path.join(jobDir, \"job.json\"),\n\t\tvarsPath: path.join(jobDir, \"variables.json\"),\n\t\twatcherPath: path.join(jobDir, \"pane-watcher.sh\"),\n\t\tagents,\n\t\tlaunchCommands: [],\n\t};\n\tjob.launchCommands = agents.map(\n\t\t(agent) =>\n\t\t\t`${agent.command || defaultProviderInvocation(agent.provider)} with initial task from ${path.basename(agent.promptPath)}`,\n\t);\n\treturn job;\n}\nfunction archiveExistingJobDir(jobDir: string): string {\n\tconst root = archiveRoot();\n\tensureDir(root);\n\tconst target = path.join(root, `${path.basename(jobDir)}-${new Date().toISOString().replace(/[:.]/g, \"-\")}`);\n\tfs.renameSync(jobDir, target);\n\treturn target;\n}\nfunction prepareJobDirForLaunch(job: FireTaskPlan, force?: boolean): string | undefined {\n\tif (!fs.existsSync(job.jobDir)) return undefined;\n\tif (!force)\n\t\tthrow new Error(\n\t\t\t`tmux job already exists: ${job.id}. Use a new launchKey, or pass force:true to archive the old job before launching.`,\n\t\t);\n\treturn archiveExistingJobDir(job.jobDir);\n}\nfunction writeFireTaskFiles(job: FireTaskPlan): void {\n\tensureDir(job.jobDir);\n\tif (!fs.existsSync(job.varsPath))\n\t\tfs.writeFileSync(job.varsPath, `${JSON.stringify({ updatedAt: null, variables: {} }, null, 2)}\\n`, {\n\t\t\tmode: 0o600,\n\t\t});\n\tfor (const agent of job.agents) {\n\t\tfs.writeFileSync(\n\t\t\tagent.promptPath,\n\t\t\t`${managedPrompt(job.task, job.id, agent, agent.doneMarker, agent.blockedMarker, job.varsPath)}\\n`,\n\t\t\t{ mode: 0o600 },\n\t\t);\n\t\tfs.writeFileSync(\n\t\t\tagent.logPath,\n\t\t\t`[tmux-agent-manager] waiting for captured pane output\\njob=${job.id} agent=${agent.name} pane=${agent.paneId || \"pending\"} command=${agent.command || defaultProviderInvocation(agent.provider)}\\n`,\n\t\t\t{ mode: 0o600 },\n\t\t);\n\t}\n\tfs.writeFileSync(job.watcherPath, makePaneWatcherScript(job), { mode: 0o700 });\n\tfs.chmodSync(job.watcherPath, 0o700);\n\tfs.writeFileSync(\n\t\tjob.jobPath,\n\t\t`${JSON.stringify({ ...job, agents: job.agents.map((agent) => ({ ...agent, result: null })) }, null, 2)}\\n`,\n\t\t{ mode: 0o600 },\n\t);\n}\nfunction startPaneWatchers(job: FireTaskPlan): Array<{ agentId: string; paneId: string }> {\n\tconst started: Array<{ agentId: string; paneId: string }> = [];\n\tfor (const agent of job.agents) {\n\t\tif (!agent.paneId) throw new Error(`Missing pane id for tmux agent ${agent.name}`);\n\t\tconst command = `sh ${quoteShell(job.watcherPath)} ${quoteShell(agent.id)}`;\n\t\tconst result = runTmux([\"pipe-pane\", \"-O\", \"-t\", agent.paneId, command]);\n\t\tif (!result.ok) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to arm completion watcher for ${agent.name}: ${result.error || result.stderr || result.stdout}`,\n\t\t\t);\n\t\t}\n\t\tstarted.push({ agentId: agent.id, paneId: agent.paneId });\n\t}\n\treturn started;\n}\nfunction targetDisplayName(agent: AgentSpec, index: number): string {\n\treturn firstString(agent.name, agent.provider, `agent-${index + 1}`) || `agent-${index + 1}`;\n}\nfunction tmuxSessionExists(name: string): boolean {\n\treturn runTmux([\"has-session\", \"-t\", name], 2_000).ok;\n}\nfunction tmuxPaneExists(sessionName: string, paneId: string): boolean {\n\tconst result = runTmux([\"list-panes\", \"-t\", sessionName, \"-F\", \"#{pane_id}\"], 2_000);\n\tif (!result.ok) return false;\n\treturn result.stdout\n\t\t.split(/\\s+/)\n\t\t.map((line) => line.trim())\n\t\t.includes(paneId);\n}\n/** True when tmux already has a pipe-pane consumer attached to this pane (tmux's own `#{pane_pipe}`\n * format flag). Session-level reconcile MUST check this before re-arming: a pane that still has an\n * active pipe already has a live watcher; replacing it would close that watcher's stdin and race its\n * own EOF-triggered `finish(failed, pane-stream-ended)` against the real marker that may be about to\n * arrive, possibly recording a false failure for a job that was about to succeed on its own. Re-arming\n * is only safe (and only useful) when tmux reports no pipe is currently attached. */\nfunction tmuxPaneHasPipe(paneId: string): boolean {\n\tconst result = runTmux([\"display-message\", \"-p\", \"-t\", paneId, \"#{pane_pipe}\"], 2_000);\n\treturn result.ok && result.stdout.trim() === \"1\";\n}\nfunction turnMarkers(\n\tjob: PaneWatcherJobSpec,\n\tagent: FireAgentPlan,\n\tturn: number,\n): { doneMarker: string; blockedMarker: string } {\n\tif (turn <= 1) return { doneMarker: agent.doneMarker, blockedMarker: agent.blockedMarker };\n\tconst base = `TMUX_${crypto.createHash(\"sha1\").update(`${job.id}:${agent.id}:${turn}`).digest(\"hex\").slice(0, 10).toUpperCase()}`;\n\treturn { doneMarker: `${base}_DONE`, blockedMarker: `${base}_BLOCKED` };\n}\nfunction turnResultPath(jobDir: string, agentId: string, turn: number, baseResultPath: string): string {\n\treturn turn <= 1 ? baseResultPath : path.join(jobDir, `${agentId}.turn-${turn}.result.json`);\n}\nfunction turnPromptPath(jobDir: string, agentId: string, turn: number, basePromptPath: string): string {\n\treturn turn <= 1 ? basePromptPath : path.join(jobDir, `${agentId}.turn-${turn}.prompt.md`);\n}\nfunction turnWatcherPath(job: FireTaskPlan, turn: number): string {\n\treturn turn <= 1 ? job.watcherPath : path.join(job.jobDir, `pane-watcher.turn-${turn}.sh`);\n}\n/** The result-file path the CURRENT turn's watcher will write to for this agent (turn 1 keeps the\n * fixed back-compat path). Stop handling must target this path, not the fixed one, or a stop signal\n * issued mid-follow-up would land on a stale turn's file that nothing is watching anymore. */\nfunction currentResultPath(job: FireTaskPlan, agent: FireAgentPlan): string {\n\treturn turnResultPath(job.jobDir, agent.id, agent.currentTurn ?? 1, agent.resultPath);\n}\n\nfunction persistAgentTurnFailure(jobId: string, agentId: string, turn: number, reason: string): void {\n\tpersistJobPatch(jobId, (current) => {\n\t\tconst agent = current.agents.find((entry) => entry.id === agentId);\n\t\tif (!agent || agent.currentTurn !== turn) return undefined;\n\t\tconst result: AgentResult = {\n\t\t\tstatus: \"failed\",\n\t\t\tdetectedAt: new Date().toISOString(),\n\t\t\treason,\n\t\t};\n\t\tfs.writeFileSync(currentResultPath(current, agent), `${JSON.stringify(result, null, 2)}\\n`, { mode: 0o600 });\n\t\tagent.result = result;\n\t\tdelete agent.pendingTurn;\n\t\treturn current;\n\t});\n}\n/** Atomically read-modify-write job.json, always from a FRESH read (never from a caller's possibly\n * stale in-memory copy), mirroring the temp+rename pattern the original notify path used. */\nfunction persistJobPatch(jobId: string, mutate: (current: FireTaskPlan) => FireTaskPlan | undefined): FireTaskPlan {\n\tconst jobPath = path.join(jobsRoot(), jobId, \"job.json\");\n\tconst current = JSON.parse(fs.readFileSync(jobPath, \"utf8\")) as FireTaskPlan;\n\tconst mutated = mutate(current) ?? current;\n\tconst temporaryPath = `${jobPath}.tmp-${process.pid}-${Date.now()}`;\n\tfs.writeFileSync(temporaryPath, `${JSON.stringify(mutated, null, 2)}\\n`, { encoding: \"utf8\", mode: 0o600 });\n\tfs.renameSync(temporaryPath, jobPath);\n\treturn mutated;\n}\nfunction sendCommandToPane(paneId: string, command: string): void {\n\trequireTmuxRun(runTmux([\"send-keys\", \"-t\", paneId, \"-l\", command]), `tmux command injection for ${paneId}`);\n\trequireTmuxRun(runTmux([\"send-keys\", \"-t\", paneId, \"Enter\"]), `tmux command submit for ${paneId}`);\n}\nfunction launchTmuxSession(\n\tsessionName: string,\n\tcwd: string,\n\tpanes: Array<{ title: string; cwd: string; command: string }>,\n\toptions: { deferCommands?: boolean } = {},\n): { runs: RunResult[]; paneIds: string[] } {\n\tif (tmuxSessionExists(sessionName))\n\t\tthrow new Error(\n\t\t\t`tmux session already exists: ${sessionName}. Use stop_session/stop_job first or choose a different workspaceName.`,\n\t\t);\n\tconst runs: RunResult[] = [];\n\tconst paneIds: string[] = [];\n\tconst first = panes[0];\n\tconst create = runTmux(\n\t\t[\"new-session\", \"-d\", \"-P\", \"-F\", \"#{pane_id}\", \"-s\", sessionName, \"-n\", \"agents\", \"-c\", first.cwd || cwd],\n\t\t5_000,\n\t);\n\truns.push(create);\n\tif (!create.ok)\n\t\tthrow new Error(`tmux new-session failed: ${create.error || create.stderr || `exit ${create.status}`}`);\n\ttry {\n\t\tconst firstPane = create.stdout.trim();\n\t\tpaneIds.push(firstPane);\n\t\tif (!options.deferCommands) sendCommandToPane(firstPane, first.command);\n\t\tfor (const pane of panes.slice(1)) {\n\t\t\tconst split = runTmux(\n\t\t\t\t[\"split-window\", \"-d\", \"-P\", \"-F\", \"#{pane_id}\", \"-t\", `${sessionName}:0`, \"-c\", pane.cwd || cwd],\n\t\t\t\t5_000,\n\t\t\t);\n\t\t\truns.push(split);\n\t\t\tif (!split.ok)\n\t\t\t\tthrow new Error(`tmux split-window failed: ${split.error || split.stderr || `exit ${split.status}`}`);\n\t\t\tconst paneId = split.stdout.trim();\n\t\t\tpaneIds.push(paneId);\n\t\t\tif (!options.deferCommands) sendCommandToPane(paneId, pane.command);\n\t\t}\n\t\truns.push(runTmux([\"select-layout\", \"-t\", `${sessionName}:0`, \"tiled\"], 3_000));\n\t\treturn { runs, paneIds };\n\t} catch (error: unknown) {\n\t\trunTmux([\"kill-session\", \"-t\", sessionName], 5_000);\n\t\tthrow error;\n\t}\n}\nfunction injectPromptToPane(paneId: string, prompt: string, provider: Provider): void {\n\tconst text = interactivePromptText(prompt);\n\tif (provider === \"claude\") {\n\t\tconst bufferName = `pi-tmux-${crypto.randomBytes(4).toString(\"hex\")}`;\n\t\trequireTmuxRun(runTmux([\"set-buffer\", \"-b\", bufferName, text], 10_000), \"tmux prompt buffer creation\");\n\t\ttry {\n\t\t\trequireTmuxRun(\n\t\t\t\trunTmux([\"paste-buffer\", \"-b\", bufferName, \"-t\", paneId], 10_000),\n\t\t\t\t`tmux prompt injection for ${paneId}`,\n\t\t\t);\n\t\t\trequireTmuxRun(runTmux([\"send-keys\", \"-t\", paneId, \"Enter\"], 3_000), `tmux prompt submit for ${paneId}`);\n\t\t} finally {\n\t\t\trunTmux([\"delete-buffer\", \"-b\", bufferName], 3_000);\n\t\t}\n\t\treturn;\n\t}\n\trequireTmuxRun(runTmux([\"send-keys\", \"-t\", paneId, \"-l\", text], 10_000), `tmux prompt injection for ${paneId}`);\n\trequireTmuxRun(\n\t\trunTmux([\"send-keys\", \"-t\", paneId, provider === \"agy\" ? \"C-m\" : \"Enter\"], 3_000),\n\t\t`tmux prompt submit for ${paneId}`,\n\t);\n}\ntype AgentTurnArtifacts = {\n\tdoneMarker: string;\n\tblockedMarker: string;\n\tresultPath: string;\n\tpromptPath: string;\n\twatcherPath: string;\n};\nfunction resolveAgentTurnArtifacts(job: FireTaskPlan, agent: FireAgentPlan, turn: number): AgentTurnArtifacts {\n\tconst markers = turnMarkers(job, agent, turn);\n\treturn {\n\t\tdoneMarker: markers.doneMarker,\n\t\tblockedMarker: markers.blockedMarker,\n\t\tresultPath: turnResultPath(job.jobDir, agent.id, turn, agent.resultPath),\n\t\tpromptPath: turnPromptPath(job.jobDir, agent.id, turn, agent.promptPath),\n\t\twatcherPath: turnWatcherPath(job, turn),\n\t};\n}\nfunction writeAgentTurnWatcher(job: FireTaskPlan, agent: FireAgentPlan, artifacts: AgentTurnArtifacts): void {\n\tconst turnSpec: PaneWatcherJobSpec = {\n\t\tid: job.id,\n\t\tsessionName: job.sessionName,\n\t\tdeadlineSeconds: job.deadlineSeconds,\n\t\tagents: [\n\t\t\t{\n\t\t\t\t...agent,\n\t\t\t\tdoneMarker: artifacts.doneMarker,\n\t\t\t\tblockedMarker: artifacts.blockedMarker,\n\t\t\t\tresultPath: artifacts.resultPath,\n\t\t\t\tpromptPath: artifacts.promptPath,\n\t\t\t},\n\t\t],\n\t};\n\tfs.writeFileSync(artifacts.watcherPath, makePaneWatcherScript(turnSpec), { mode: 0o700 });\n\tfs.chmodSync(artifacts.watcherPath, 0o700);\n}\n/** Write a fresh per-turn prompt + single-agent watcher script and arm `pipe-pane -O` for it. Used by\n * send_followup to open a NEW turn on an already-live pane. Does not inject the prompt text into the\n * pane itself — callers do that separately via injectPromptToPane, after this has armed the watcher,\n * so the completion contract is listening before the worker can possibly reply. */\nfunction dispatchAgentTurn(\n\tjob: FireTaskPlan,\n\tagent: FireAgentPlan,\n\tturn: number,\n\tpromptText: string,\n): { promptPath: string; resultPath: string; watcherPath: string } {\n\tif (!agent.paneId) throw new Error(`tmux agent ${agent.name} has no recorded pane id`);\n\tconst artifacts = resolveAgentTurnArtifacts(job, agent, turn);\n\tfs.writeFileSync(artifacts.promptPath, `${promptText}\\n`, { mode: 0o600 });\n\twriteAgentTurnWatcher(job, agent, artifacts);\n\tconst armed = runTmux([\n\t\t\"pipe-pane\",\n\t\t\"-O\",\n\t\t\"-t\",\n\t\tagent.paneId,\n\t\t`sh ${quoteShell(artifacts.watcherPath)} ${quoteShell(agent.id)}`,\n\t]);\n\tif (!armed.ok)\n\t\tthrow new Error(\n\t\t\t`Failed to arm completion watcher for turn ${turn}: ${armed.error || armed.stderr || armed.stdout}`,\n\t\t);\n\treturn {\n\t\tpromptPath: artifacts.promptPath,\n\t\tresultPath: artifacts.resultPath,\n\t\twatcherPath: artifacts.watcherPath,\n\t};\n}\n/** Session-level reconcile's resume step: re-arm `pipe-pane` for an agent whose current turn is still\n * pending on a pane tmux confirms is alive AND has no pipe already attached (see tmuxPaneHasPipe). Only\n * regenerates the watcher SCRIPT file if it is missing (e.g. this is the first reconcile after a reload\n * whose disk state predates a crash) — the prompt was already injected once and is not re-sent. */\nfunction rearmAgentWatcher(job: FireTaskPlan, agent: FireAgentPlan): void {\n\tif (!agent.paneId) return;\n\tconst turn = agent.currentTurn ?? 1;\n\tconst artifacts = resolveAgentTurnArtifacts(job, agent, turn);\n\tif (!fs.existsSync(artifacts.watcherPath)) writeAgentTurnWatcher(job, agent, artifacts);\n\trunTmux([\"pipe-pane\", \"-O\", \"-t\", agent.paneId, `sh ${quoteShell(artifacts.watcherPath)} ${quoteShell(agent.id)}`]);\n}\nfunction stopTmuxSession(\n\tsessionName: string,\n\tdryRun: boolean,\n\tconfirm?: string,\n): { text: string; run?: RunResult; existed: boolean } {\n\tif (!sessionName) throw new Error(\"session name required\");\n\tconst existed = tmuxSessionExists(sessionName);\n\tif (!existed) return { text: `tmux session not running: ${sessionName}`, existed: false };\n\tif (dryRun) return { text: `DRY RUN would stop tmux session: ${sessionName}`, existed: true };\n\tif (confirm !== \"yes-tmux-stop\") throw new Error(\"real stop requires confirm=yes-tmux-stop\");\n\tconst run = runTmux([\"kill-session\", \"-t\", sessionName], 5_000);\n\tif (!run.ok) throw new Error(`tmux kill-session failed: ${run.error || run.stderr || `exit ${run.status}`}`);\n\treturn { text: `Stopped tmux session: ${sessionName}`, run, existed: true };\n}\nfunction isAlreadyExistsError(error: unknown): boolean {\n\treturn typeof error === \"object\" && error !== null && \"code\" in error && error.code === \"EEXIST\";\n}\nfunction markStopRequested(job: FireTaskPlan): void {\n\tfor (const agent of job.agents) {\n\t\tconst resultPath = currentResultPath(job, agent);\n\t\tif (fs.existsSync(resultPath)) continue;\n\t\ttry {\n\t\t\tfs.writeFileSync(`${resultPath}.stop-requested`, `${new Date().toISOString()}\\n`, {\n\t\t\t\tencoding: \"utf8\",\n\t\t\t\tmode: 0o600,\n\t\t\t\tflag: \"wx\",\n\t\t\t});\n\t\t} catch (error: unknown) {\n\t\t\tif (!isAlreadyExistsError(error)) throw error;\n\t\t}\n\t}\n}\nfunction clearStopRequested(job: FireTaskPlan): void {\n\tfor (const agent of job.agents) fs.rmSync(`${currentResultPath(job, agent)}.stop-requested`, { force: true });\n}\nfunction persistStoppedResults(job: FireTaskPlan): void {\n\tfor (const agent of job.agents) {\n\t\tconst resultPath = currentResultPath(job, agent);\n\t\tif (!fs.existsSync(resultPath)) {\n\t\t\tconst result = {\n\t\t\t\tjobId: job.id,\n\t\t\t\tagentId: agent.id,\n\t\t\t\tagentName: agent.name,\n\t\t\t\tstatus: \"stopped\",\n\t\t\t\texitCode: null,\n\t\t\t\tlogPath: agent.logPath,\n\t\t\t\tpaneId: agent.paneId || null,\n\t\t\t\tfinishedAt: new Date().toISOString(),\n\t\t\t\tnotifiedBy: \"stop-action-event\",\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tfs.writeFileSync(resultPath, `${JSON.stringify(result, null, 2)}\\n`, {\n\t\t\t\t\tencoding: \"utf8\",\n\t\t\t\t\tmode: 0o600,\n\t\t\t\t\tflag: \"wx\",\n\t\t\t\t});\n\t\t\t} catch (error: unknown) {\n\t\t\t\tif (!isAlreadyExistsError(error)) throw error;\n\t\t\t}\n\t\t}\n\t\tfs.rmSync(`${resultPath}.stop-requested`, { force: true });\n\t}\n}\nfunction stopTmuxSessionWithJobSignals(\n\tsessionName: string,\n\tjobs: FireTaskPlan[],\n\tdryRun: boolean,\n\tconfirm?: string,\n): { text: string; run?: RunResult; existed: boolean } {\n\tif (!dryRun && confirm !== \"yes-tmux-stop\") throw new Error(\"real stop requires confirm=yes-tmux-stop\");\n\tif (!dryRun) for (const job of jobs) markStopRequested(job);\n\ttry {\n\t\tconst result = stopTmuxSession(sessionName, dryRun, confirm);\n\t\tif (!dryRun) for (const job of jobs) persistStoppedResults(job);\n\t\treturn result;\n\t} catch (error: unknown) {\n\t\tfor (const job of jobs) clearStopRequested(job);\n\t\tthrow error;\n\t}\n}\nfunction formatWorkspacePreview(plan: ReturnType<typeof buildWorkspacePlan>): string {\n\treturn [\n\t\t`Session: ${plan.sessionName}`,\n\t\t`Cwd: ${plan.cwd}`,\n\t\t\"Panes:\",\n\t\t...plan.agents.map((agent, index) => `- ${targetDisplayName(agent, index)}: ${agent.command} (cwd ${agent.cwd})`),\n\t].join(\"\\n\");\n}\nfunction formatFireTaskPreview(job: FireTaskPlan): string {\n\treturn [\n\t\t`Job: ${job.id}`,\n\t\t`Session: ${job.sessionName}`,\n\t\t`Cwd: ${job.cwd}`,\n\t\t`State: ${job.jobPath}`,\n\t\t`Deadline: ${job.deadlineSeconds}s enforced by each event-driven pane watcher`,\n\t\t\"Workers:\",\n\t\t...job.agents.map((agent) => `- ${agent.name}: ${agent.command || defaultProviderInvocation(agent.provider)}`),\n\t].join(\"\\n\");\n}\nfunction loadJob(id: string): FireTaskPlan {\n\tconst jobPath = path.join(jobsRoot(), id, \"job.json\");\n\tif (!fs.existsSync(jobPath)) throw new Error(`tmux job not found: ${id}`);\n\tconst parsed = JSON.parse(fs.readFileSync(jobPath, \"utf8\")) as FireTaskPlan;\n\tif (!Array.isArray(parsed.agents)) throw new Error(`tmux job has invalid agents: ${id}`);\n\tfor (const agent of parsed.agents) {\n\t\t// Read from the CURRENT turn's result path (turn 1 is the fixed back-compat path) so a job\n\t\t// mid-follow-up is correctly seen as non-terminal until the NEW turn settles.\n\t\ttry {\n\t\t\tagent.result = JSON.parse(fs.readFileSync(currentResultPath(parsed, agent), \"utf8\")) as AgentResult;\n\t\t} catch {\n\t\t\tdelete agent.result;\n\t\t}\n\t}\n\ttry {\n\t\tparsed.variables = readVariables(parsed.varsPath);\n\t} catch {\n\t\tparsed.variables = { updatedAt: null, variables: {} };\n\t}\n\treturn parsed;\n}\nfunction loadJobPlans(): FireTaskPlan[] {\n\ttry {\n\t\treturn fs\n\t\t\t.readdirSync(jobsRoot(), { withFileTypes: true })\n\t\t\t.filter((entry) => entry.isDirectory())\n\t\t\t.flatMap((entry) => {\n\t\t\t\ttry {\n\t\t\t\t\treturn [loadJob(entry.name)];\n\t\t\t\t} catch {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t});\n\t} catch {\n\t\treturn [];\n\t}\n}\nfunction listJobs(): unknown[] {\n\ttry {\n\t\treturn fs\n\t\t\t.readdirSync(jobsRoot(), { withFileTypes: true })\n\t\t\t.filter((d) => d.isDirectory())\n\t\t\t.map((d) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst job = loadJob(d.name);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: job.id,\n\t\t\t\t\t\tworkspaceName: job.workspaceName,\n\t\t\t\t\t\tsessionName: job.sessionName,\n\t\t\t\t\t\tcreatedAt: job.createdAt,\n\t\t\t\t\t\torphaned: Boolean(job.orphanedAt),\n\t\t\t\t\t\tdismissed: Boolean(job.dismissedAt),\n\t\t\t\t\t\tagents: job.agents.map((agent) => ({\n\t\t\t\t\t\t\tname: agent.name,\n\t\t\t\t\t\t\tstatus: agent.result?.status || \"pending\",\n\t\t\t\t\t\t\tturn: agent.currentTurn ?? 1,\n\t\t\t\t\t\t})),\n\t\t\t\t\t};\n\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\treturn { id: d.name, error: errorMessage(error) };\n\t\t\t\t}\n\t\t\t});\n\t} catch {\n\t\treturn [];\n\t}\n}\nfunction readVariables(varsPath: string): { updatedAt: string | null; variables: Record<string, unknown> } {\n\ttry {\n\t\treturn JSON.parse(fs.readFileSync(varsPath, \"utf8\"));\n\t} catch {\n\t\treturn { updatedAt: null, variables: {} };\n\t}\n}\nfunction setVariable(jobId: string, name: string, value: string) {\n\tif (!/^[a-zA-Z0-9_.:-]{1,80}$/.test(name))\n\t\tthrow new Error(\"variableName must be 1-80 chars: letters, numbers, _, ., :, or -\");\n\tconst job = loadJob(jobId);\n\tconst current = readVariables(job.varsPath);\n\tcurrent.variables[name] = value;\n\tcurrent.updatedAt = new Date().toISOString();\n\tfs.writeFileSync(job.varsPath, `${JSON.stringify(current, null, 2)}\\n`, { mode: 0o600 });\n\treturn { varsPath: job.varsPath, variables: current.variables, updatedAt: current.updatedAt };\n}\n/** Render a host-derived launch profile into a Pi child's start command. Values are shell-quoted;\n * flags are fixed literals. */\nfunction appendLaunchProfileFlags(command: string, flags: LaunchProfileFlag[]): string {\n\tconst rendered = flags.map((flag) =>\n\t\tflag.value !== undefined ? `${flag.flag} ${quoteShell(flag.value)}` : flag.flag,\n\t);\n\treturn [command, ...rendered].join(\" \");\n}\nfunction deriveLaunchProfile(\n\tbridge: HostBridge,\n\tctx: ExtensionContext,\n\tjob: FireTaskPlan,\n\tagent: FireAgentPlan,\n\tgoalId?: string,\n): WorkerLaunchProfile {\n\tif (agent.provider !== \"pi\") {\n\t\treturn deriveWorkerLaunchProfile({\n\t\t\tidentity: `tmux-profile:${job.id}:${agent.id}`,\n\t\t\t// External interactive CLIs expose their own native, unrestricted tool surfaces. Model the\n\t\t\t// managed boundary honestly as one host-trusted process instead of projecting Pi tool names.\n\t\t\tallowedTools: [\"bash\"],\n\t\t\twritePaths: [],\n\t\t\tparentPid: process.pid,\n\t\t\tparentSession: ctx.sessionManager.getSessionId?.() ?? ctx.sessionManager.getSessionFile(),\n\t\t\ttaskRef: goalId,\n\t\t});\n\t}\n\tconst effectiveResources = agent.resourceProfile ? undefined : bridge.getEffectiveResourceProfile?.();\n\tconst serializedResources =\n\t\teffectiveResources && Object.keys(effectiveResources).length > 0 ? JSON.stringify(effectiveResources) : undefined;\n\tconst inheritedResourceProfile = serializedResources\n\t\t? `tmux-inherited-${crypto.createHash(\"sha256\").update(serializedResources).digest(\"hex\").slice(0, 12)}`\n\t\t: undefined;\n\treturn deriveWorkerLaunchProfile({\n\t\tidentity: `tmux-profile:${job.id}:${agent.id}`,\n\t\tinheritedTools: bridge.getActiveTools?.(),\n\t\tallowedTools: agent.dispatchAllowedTools,\n\t\tresourceProfile: agent.resourceProfile ?? inheritedResourceProfile,\n\t\tresourceProfileJson:\n\t\t\tinheritedResourceProfile && effectiveResources\n\t\t\t\t? JSON.stringify({ [inheritedResourceProfile]: effectiveResources })\n\t\t\t\t: undefined,\n\t\twritePaths: agent.dispatchWritePaths ?? (agent.worktreeLane ? [agent.cwd] : []),\n\t\tthinkingLevel: agent.thinkingLevel ?? bridge.getThinkingLevel?.(),\n\t\tworktreeLane: agent.worktreeLane,\n\t\tparentPid: process.pid,\n\t\tparentSession: ctx.sessionManager.getSessionId?.() ?? ctx.sessionManager.getSessionFile(),\n\t\ttaskRef: goalId,\n\t});\n}\n\n/** Apply the already-compiled immutable profile to a Pi child. Other provider CLIs retain their own\n * native tool surface; the profile remains the host's durable audit contract for every provider. */\nfunction applyLaunchProfile(job: FireTaskPlan, agent: FireAgentPlan, profile: WorkerLaunchProfile): void {\n\tif (agent.provider !== \"pi\") return;\n\tconst profiledCommand = appendLaunchProfileFlags(\n\t\tagent.command || defaultProviderInvocation(agent.provider),\n\t\tbuildLaunchProfileFlags(profile),\n\t);\n\tagent.command = `env ${PI_ORCHESTRATION_AGENT_ID_ENV}=${quoteShell(agentLaneId(job.id, agent.id))} ${PI_WORKER_ALLOWED_PATHS_ENV}=${quoteShell(encodeWorkerSessionAllowedPaths(profile.writePaths))} ${profiledCommand}`;\n}\n/** Read an OPTIONAL, cooperative worker-reported usage claim for the turn that just went terminal (a\n * sibling `<result-path>.usage.json` file next to the watcher's own result file). Absent file ⇒ no\n * claim was offered ⇒ nothing is reported (never fabricated). */\nfunction readWorkerUsageClaim(job: FireTaskPlan, agent: FireAgentPlan): Usage | undefined {\n\tconst usagePath = `${currentResultPath(job, agent)}.usage.json`;\n\ttry {\n\t\treturn decodeTmuxWorkerUsageClaim(JSON.parse(fs.readFileSync(usagePath, \"utf8\")));\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nasync function executeTool(\n\t_toolCallId: string,\n\tparams: Params,\n\t_signal: AbortSignal | undefined,\n\t_onUpdate: unknown,\n\tctx: ExtensionContext,\n\tbridge: HostBridge,\n): Promise<AgentToolResult<unknown>> {\n\tconst action = params.action || \"status\";\n\tconst detection = detectTmux();\n\tif (action === \"status\")\n\t\treturn { content: [{ type: \"text\", text: formatDetection(detection) }], details: { action, detection } };\n\tif (action === \"setup_help\")\n\t\treturn { content: [{ type: \"text\", text: setupHelp(detection) }], details: { action, detection } };\n\tif (action === \"guard\") {\n\t\tconst guard = await guardTmux(ctx, detection, \"tmux-managed interactive subagent/provider orchestration\");\n\t\treturn { content: [{ type: \"text\", text: guard.text }], details: { action, detection, guard } };\n\t}\n\tif (action === \"list_jobs\")\n\t\treturn { content: [{ type: \"text\", text: JSON.stringify(listJobs(), null, 2) }], details: { action } };\n\tif (action === \"list_templates\") {\n\t\tconst summary = templateSummary();\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: summary.text }],\n\t\t\tdetails: { action, templates: summary.templates, errors: summary.errors, templateDirs: templateDirs() },\n\t\t};\n\t}\n\tif (action === \"show_template\") {\n\t\tconst template = requireTeamTemplate(params.teamTemplate || params.title);\n\t\treturn { content: [{ type: \"text\", text: formatTemplate(template) }], details: { action, template } };\n\t}\n\tif (action === \"job_status\") {\n\t\tif (!params.jobId) throw new Error(\"job_status requires jobId\");\n\t\tconst job = loadJob(params.jobId);\n\t\treturn { content: [{ type: \"text\", text: JSON.stringify(job, null, 2) }], details: { action, job } };\n\t}\n\tif (action === \"list_variables\") {\n\t\tif (!params.jobId) throw new Error(\"list_variables requires jobId\");\n\t\tconst job = loadJob(params.jobId);\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: JSON.stringify(job.variables || { variables: {} }, null, 2) }],\n\t\t\tdetails: { action, jobId: params.jobId, variables: job.variables },\n\t\t};\n\t}\n\tif (action === \"set_variable\") {\n\t\tif (!params.jobId) throw new Error(\"set_variable requires jobId\");\n\t\tif (!params.variableName) throw new Error(\"set_variable requires variableName\");\n\t\tconst value = firstString(params.variableValue, params.body, params.status, \"\") || \"\";\n\t\tconst result = setVariable(params.jobId, params.variableName, value);\n\t\treturn {\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\ttext: `Set tmux job variable ${params.variableName} for ${params.jobId}. Workers read ${result.varsPath} only at the named decision point.`,\n\t\t\t\t},\n\t\t\t],\n\t\t\tdetails: { action, jobId: params.jobId, variableName: params.variableName, result },\n\t\t};\n\t}\n\tconst guard = await guardTmux(ctx, detection, `tmux ${action}`);\n\tif (!guard.allowed)\n\t\treturn { content: [{ type: \"text\", text: guard.text }], details: { action, detection, guard, skipped: true } };\n\tif (action === \"stop_job\") {\n\t\tif (!params.jobId) throw new Error(\"stop_job requires jobId\");\n\t\tconst job = loadJob(params.jobId);\n\t\tconst result = stopTmuxSessionWithJobSignals(job.sessionName, [job], params.dryRun !== false, params.confirm);\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: result.text }],\n\t\t\tdetails: {\n\t\t\t\taction,\n\t\t\t\tdetection,\n\t\t\t\tjobId: params.jobId,\n\t\t\t\tsessionName: job.sessionName,\n\t\t\t\tdryRun: params.dryRun !== false,\n\t\t\t\tresult,\n\t\t\t},\n\t\t};\n\t}\n\tif (action === \"stop_session\") {\n\t\tconst sessionName = firstString(params.workspaceName, params.title);\n\t\tif (!sessionName) throw new Error(\"stop_session requires workspaceName or title with the tmux session name\");\n\t\tconst jobs = loadJobPlans().filter((job) => job.sessionName === sessionName);\n\t\tconst result = stopTmuxSessionWithJobSignals(sessionName, jobs, params.dryRun !== false, params.confirm);\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: result.text }],\n\t\t\tdetails: { action, detection, sessionName, dryRun: params.dryRun !== false, result },\n\t\t};\n\t}\n\tif (action === \"workspace_plan\" || action === \"launch_workspace\") {\n\t\tconst plan = buildWorkspacePlan(ctx, params);\n\t\tconst preview = formatWorkspacePreview(plan);\n\t\tif (action === \"workspace_plan\" || params.dryRun === true)\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: `DRY RUN tmux workspace plan\\n${preview}` }],\n\t\t\t\tdetails: { action, detection, dryRun: true, plan },\n\t\t\t};\n\t\tconst panes = plan.agents.map((agent, index) => ({\n\t\t\ttitle: targetDisplayName(agent, index),\n\t\t\tcwd: agent.cwd || plan.cwd,\n\t\t\tcommand: agent.command || PROVIDER_COMMANDS[agent.provider || \"custom\"],\n\t\t}));\n\t\tconst launch = launchTmuxSession(plan.sessionName, plan.cwd, panes);\n\t\treturn {\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\ttext: `Launched tmux session '${plan.sessionName}'. Attach with: tmux attach -t ${plan.sessionName}`,\n\t\t\t\t},\n\t\t\t],\n\t\t\tdetails: { action, detection, runs: launch.runs, paneIds: launch.paneIds, plan },\n\t\t};\n\t}\n\tif (action === \"fire_task\") {\n\t\tconst job = buildFireTaskPlan(ctx, params);\n\t\tif (params.dryRun === true)\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: `DRY RUN tmux interactive task\\n${formatFireTaskPreview(job)}` }],\n\t\t\t\tdetails: { action, detection, dryRun: true, job },\n\t\t\t};\n\t\tif (tmuxSessionExists(job.sessionName))\n\t\t\tthrow new Error(\n\t\t\t\t`tmux session already exists: ${job.sessionName}. Use stop_job/stop_session first or choose a different workspaceName.`,\n\t\t\t);\n\t\t// Compile each immutable worker profile from the parent surface plus per-agent overrides before\n\t\t// any durable reservation, filesystem artifact, pane, watcher, or prompt side effect.\n\t\tfor (const agent of job.agents) {\n\t\t\tconst profile = deriveLaunchProfile(bridge, ctx, job, agent, params.goalId);\n\t\t\tagent.currentTurn = 1;\n\t\t\tapplyManagedProfile(agent, profile, {\n\t\t\t\tinstructions: job.task,\n\t\t\t\tgoalId: params.goalId,\n\t\t\t\tleaseTtlMs: job.deadlineSeconds * 1_000,\n\t\t\t});\n\t\t\tapplyLaunchProfile(job, agent, profile);\n\t\t}\n\t\t// The host commits the full execution profile and starts the durable lease before any child\n\t\t// process, job artifact, watcher, or prompt side effect occurs.\n\t\treportManagedDispatchReservations(bridge, job, job.agents);\n\t\tlet sessionCreated = false;\n\t\ttry {\n\t\t\tconst archivedJobDir = prepareJobDirForLaunch(job, params.force);\n\t\t\tconst panes = job.agents.map((agent) => ({\n\t\t\t\ttitle: agent.name,\n\t\t\t\tcwd: agent.cwd,\n\t\t\t\tcommand: agent.command || defaultProviderInvocation(agent.provider),\n\t\t\t}));\n\t\t\t// Create idle panes first. The initial provider task is part of the provider command, but no\n\t\t\t// command starts until its output watcher owns the pane stream.\n\t\t\tconst launch = launchTmuxSession(job.sessionName, job.cwd, panes, { deferCommands: true });\n\t\t\tsessionCreated = true;\n\t\t\tjob.agents.forEach((agent, index) => {\n\t\t\t\tagent.paneId = launch.paneIds[index];\n\t\t\t});\n\t\t\twriteFireTaskFiles(job);\n\t\t\tconst watcherPanes = startPaneWatchers(job);\n\t\t\tfor (const agent of job.agents) {\n\t\t\t\tif (!agent.paneId) continue;\n\t\t\t\tsendCommandToPane(\n\t\t\t\t\tagent.paneId,\n\t\t\t\t\tinitialPromptInvocation(\n\t\t\t\t\t\tagent.command || defaultProviderInvocation(agent.provider),\n\t\t\t\t\t\tagent.provider,\n\t\t\t\t\t\tagent.promptPath,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tcontent: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\ttext: [\n\t\t\t\t\t\t\t`Launched tmux interactive fire-and-forget job ${job.id}.`,\n\t\t\t\t\t\t\t`Session: ${job.sessionName}`,\n\t\t\t\t\t\t\t`Attach: tmux attach -t ${job.sessionName}`,\n\t\t\t\t\t\t\t`Job state: ${job.jobPath}`,\n\t\t\t\t\t\t\tarchivedJobDir ? `Archived previous job dir: ${archivedJobDir}` : undefined,\n\t\t\t\t\t\t\t\"Completion: event-driven pane output watchers armed (no polling).\",\n\t\t\t\t\t\t]\n\t\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t\t.join(\"\\n\"),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdetails: {\n\t\t\t\t\taction,\n\t\t\t\t\tdetection,\n\t\t\t\t\tjob,\n\t\t\t\t\truns: launch.runs,\n\t\t\t\t\tpaneIds: launch.paneIds,\n\t\t\t\t\twatcherPanes,\n\t\t\t\t\tarchivedJobDir,\n\t\t\t\t},\n\t\t\t};\n\t\t} catch (error: unknown) {\n\t\t\tif (sessionCreated) runTmux([\"kill-session\", \"-t\", job.sessionName], 5_000);\n\t\t\treportManagedLaunchFailure(bridge, job, \"managed_process_launch_failed\");\n\t\t\tthrow error;\n\t\t}\n\t}\n\tif (action === \"send_followup\") {\n\t\tif (!params.jobId) throw new Error(\"send_followup requires jobId\");\n\t\tconst followupTask = firstString(params.task, params.body);\n\t\tif (!followupTask) throw new Error(\"send_followup requires task (or body) with the follow-up objective\");\n\t\tconst job = loadJob(params.jobId);\n\t\tif (job.dismissedAt)\n\t\t\tthrow new Error(`tmux job ${job.id} was dismissed; use fire_task to relaunch instead of send_followup`);\n\t\tif (job.agents.length === 0) throw new Error(`tmux job has no agents: ${job.id}`);\n\t\tconst targetAgent = params.agentId ? job.agents.find((agent) => agent.id === params.agentId) : job.agents[0];\n\t\tif (!targetAgent) throw new Error(`tmux job ${job.id} has no agent ${params.agentId}`);\n\t\tif (!targetAgent.paneId)\n\t\t\tthrow new Error(`tmux agent ${targetAgent.name} has no recorded pane id; cannot send a follow-up`);\n\t\tif (targetAgent.pendingTurn !== undefined)\n\t\t\tthrow new Error(\n\t\t\t\t`send_followup refused: turn ${targetAgent.pendingTurn} for ${targetAgent.id} is pending reconciliation; refusing to risk a duplicate prompt`,\n\t\t\t);\n\t\tconst turn = (targetAgent.currentTurn ?? 1) + 1;\n\t\tconst markers = turnMarkers(job, targetAgent, turn);\n\t\tconst promptText = managedPrompt(\n\t\t\tfollowupTask,\n\t\t\tjob.id,\n\t\t\ttargetAgent,\n\t\t\tmarkers.doneMarker,\n\t\t\tmarkers.blockedMarker,\n\t\t\tjob.varsPath,\n\t\t);\n\t\tif (params.dryRun === true)\n\t\t\treturn {\n\t\t\t\tcontent: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\ttext: `DRY RUN tmux send_followup\\nJob: ${job.id}\\nAgent: ${targetAgent.name}\\nTurn: ${turn}`,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tdetails: { action, detection, dryRun: true, jobId: job.id, agentId: targetAgent.id, turn },\n\t\t\t};\n\t\tif (!tmuxSessionExists(job.sessionName))\n\t\t\tthrow new Error(\n\t\t\t\t`tmux session is gone: ${job.sessionName}. The worker pane cannot receive a follow-up; use fire_task to relaunch.`,\n\t\t\t);\n\t\tif (!tmuxPaneExists(job.sessionName, targetAgent.paneId))\n\t\t\tthrow new Error(\n\t\t\t\t`tmux pane ${targetAgent.paneId} for ${targetAgent.name} is gone. The worker cannot receive a follow-up; use fire_task to relaunch.`,\n\t\t\t);\n\t\t// The live process keeps the immutable profile persisted at birth. A follow-up only advances\n\t\t// instructions and its fenced sequence; it cannot widen or replace the process profile.\n\t\t// Reserve before watcher/prompt side effects. Reconcile re-arms a reserved turn but never\n\t\t// re-injects it, so crash recovery cannot duplicate a provider prompt.\n\t\tconst reserved = persistJobPatch(job.id, (current) => {\n\t\t\tconst agent = current.agents.find((entry) => entry.id === targetAgent.id);\n\t\t\tif (!agent || agent.pendingTurn !== undefined) return undefined;\n\t\t\tagent.currentTurn = turn;\n\t\t\tagent.pendingTurn = turn;\n\t\t\tagent.result = undefined;\n\t\t\tapplyManagedTurn(agent, {\n\t\t\t\tinstructions: followupTask,\n\t\t\t\tgoalId: params.goalId ?? agent.dispatchGoalId,\n\t\t\t\tleaseTtlMs: job.deadlineSeconds * 1_000,\n\t\t\t});\n\t\t\tcurrent.currentTurn = turn;\n\t\t\treturn current;\n\t\t});\n\t\tconst reservedAgent = reserved.agents.find((agent) => agent.id === targetAgent.id);\n\t\tif (!reservedAgent || reservedAgent.pendingTurn !== turn)\n\t\t\tthrow new Error(`send_followup refused: failed to reserve turn ${turn} for ${targetAgent.id}`);\n\t\ttry {\n\t\t\treportManagedDispatchReservations(bridge, reserved, [reservedAgent]);\n\t\t} catch (error: unknown) {\n\t\t\tpersistAgentTurnFailure(job.id, reservedAgent.id, turn, \"managed_process_launch_reservation_failed\");\n\t\t\tthrow error;\n\t\t}\n\t\tlet written: ReturnType<typeof dispatchAgentTurn>;\n\t\ttry {\n\t\t\twritten = dispatchAgentTurn(reserved, reservedAgent, turn, promptText);\n\t\t\tinjectPromptToPane(reservedAgent.paneId as string, promptText, reservedAgent.provider);\n\t\t\tpersistJobPatch(job.id, (current) => {\n\t\t\t\tconst agent = current.agents.find((entry) => entry.id === reservedAgent.id);\n\t\t\t\tif (!agent || agent.pendingTurn !== turn) return undefined;\n\t\t\t\tdelete agent.pendingTurn;\n\t\t\t\treturn current;\n\t\t\t});\n\t\t} catch (error: unknown) {\n\t\t\tpersistAgentTurnFailure(job.id, reservedAgent.id, turn, \"managed_process_followup_failed\");\n\t\t\treportManagedAgentFailure(bridge, job.id, reservedAgent.id, \"managed_process_followup_failed\");\n\t\t\tthrow error;\n\t\t}\n\t\treturn {\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\ttext: [\n\t\t\t\t\t\t`Sent follow-up turn ${turn} to ${targetAgent.name} in job ${job.id}.`,\n\t\t\t\t\t\t`Session: ${job.sessionName}`,\n\t\t\t\t\t\t`Prompt: ${written.promptPath}`,\n\t\t\t\t\t\t`Completion: event-driven pane watcher re-armed for turn ${turn} (no polling).`,\n\t\t\t\t\t].join(\"\\n\"),\n\t\t\t\t},\n\t\t\t],\n\t\t\tdetails: { action, detection, jobId: job.id, agentId: targetAgent.id, turn, ...written },\n\t\t};\n\t}\n\tif (action === \"dismiss\") {\n\t\tif (!params.jobId) throw new Error(\"dismiss requires jobId\");\n\t\tconst job = loadJob(params.jobId);\n\t\tif (job.dismissedAt)\n\t\t\treturn {\n\t\t\t\tcontent: [{ type: \"text\", text: `tmux job ${job.id} was already dismissed.` }],\n\t\t\t\tdetails: { action, jobId: job.id, alreadyDismissed: true },\n\t\t\t};\n\t\tif (tmuxSessionExists(job.sessionName)) {\n\t\t\tfor (const agent of job.agents) {\n\t\t\t\tif (!agent.paneId || !tmuxPaneExists(job.sessionName, agent.paneId)) continue;\n\t\t\t\trequireTmuxRun(\n\t\t\t\t\trunTmux([\"pipe-pane\", \"-t\", agent.paneId]),\n\t\t\t\t\t`tmux completion watcher detach for ${agent.paneId}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tpersistJobPatch(job.id, (current) => {\n\t\t\tcurrent.dismissedAt = new Date().toISOString();\n\t\t\treturn current;\n\t\t});\n\t\tfor (const agent of job.agents)\n\t\t\tbridge.reportManagedLane?.({ laneId: agentLaneId(job.id, agent.id), phase: \"terminal\", status: \"dismissed\" });\n\t\treturn {\n\t\t\tcontent: [\n\t\t\t\t{\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\ttext: `Dismissed tmux job ${job.id}. Session '${job.sessionName}' left running (not killed); attach with: tmux attach -t ${job.sessionName}. Use stop_session/stop_job to terminate it.`,\n\t\t\t\t},\n\t\t\t],\n\t\t\tdetails: { action, jobId: job.id, sessionName: job.sessionName },\n\t\t};\n\t}\n\tif (action === \"notify\") {\n\t\tconst title = firstString(params.title, \"Pi\") || \"Pi\";\n\t\tconst body = firstString(params.body, \"Pi needs attention\") || \"Pi needs attention\";\n\t\tconst target = firstString(params.workspaceName, detection.currentSession, detection.sessions[0]);\n\t\tif (!target) throw new Error(\"notify requires an active tmux session or workspaceName target\");\n\t\tconst run = runTmux([\"display-message\", \"-t\", target, `${title}: ${body}`], 3_000);\n\t\tif (!run.ok) throw new Error(`tmux display-message failed: ${run.error || run.stderr || `exit ${run.status}`}`);\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: `Sent tmux display-message to ${target}: ${title}` }],\n\t\t\tdetails: { action, detection, run },\n\t\t};\n\t}\n\tif (action === \"set_status\") {\n\t\tconst key = safeStatusKey(params.statusKey);\n\t\tconst value = firstString(params.status, params.body, \"\") || \"\";\n\t\tconst target = firstString(params.workspaceName, detection.currentSession, detection.sessions[0]);\n\t\tconst args = target\n\t\t\t? [\"set-option\", \"-t\", target, `@pi_${key}`, value]\n\t\t\t: [\"set-option\", \"-g\", `@pi_${key}`, value];\n\t\tconst run = runTmux(args, 3_000);\n\t\tif (!run.ok) throw new Error(`tmux set-option failed: ${run.error || run.stderr || `exit ${run.status}`}`);\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: `Set tmux user option @pi_${key}=${value}` }],\n\t\t\tdetails: { action, detection, run },\n\t\t};\n\t}\n\tif (action === \"clear_status\") {\n\t\tconst key = safeStatusKey(params.statusKey);\n\t\tconst target = firstString(params.workspaceName, detection.currentSession, detection.sessions[0]);\n\t\tconst args = target ? [\"set-option\", \"-u\", \"-t\", target, `@pi_${key}`] : [\"set-option\", \"-gu\", `@pi_${key}`];\n\t\tconst run = runTmux(args, 3_000);\n\t\tif (!run.ok) throw new Error(`tmux clear status failed: ${run.error || run.stderr || `exit ${run.status}`}`);\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: `Cleared tmux user option @pi_${key}` }],\n\t\t\tdetails: { action, detection, run },\n\t\t};\n\t}\n\tthrow new Error(`unsupported action: ${action}`);\n}\n\nfunction isFireTaskTerminal(job: FireTaskPlan): boolean {\n\treturn job.agents.length > 0 && job.agents.every((agent) => agent.result !== undefined);\n}\n\nfunction readBoundedLogTail(filePath: string, maxBytes = 2048): string {\n\ttry {\n\t\tconst size = fs.statSync(filePath).size;\n\t\tconst length = Math.min(size, maxBytes);\n\t\tconst buffer = Buffer.alloc(length);\n\t\tconst descriptor = fs.openSync(filePath, \"r\");\n\t\ttry {\n\t\t\tfs.readSync(descriptor, buffer, 0, length, Math.max(0, size - length));\n\t\t} finally {\n\t\t\tfs.closeSync(descriptor);\n\t\t}\n\t\treturn buffer.toString(\"utf8\").replace(/<(?=\\/?untrusted_content\\b)/gi, \"<\");\n\t} catch {\n\t\treturn \"(no captured output)\";\n\t}\n}\n\nfunction formatFireTaskHandoff(job: FireTaskPlan): string {\n\tconst included = job.agents.slice(0, 4);\n\treturn [\n\t\t`tmux background task terminal handoff: ${job.id}`,\n\t\t`session: ${job.sessionName}`,\n\t\t...included.flatMap((agent) => [\n\t\t\t`- ${agent.name}: ${agent.result?.status ?? \"unknown\"}`,\n\t\t\t`<untrusted_content source=\"tmux_agent:${job.id}:${agent.id}\">`,\n\t\t\treadBoundedLogTail(agent.logPath),\n\t\t\t\"</untrusted_content>\",\n\t\t]),\n\t\t...(job.agents.length > included.length\n\t\t\t? [`- ${job.agents.length - included.length} additional agent handoff(s) omitted.`]\n\t\t\t: []),\n\t\t\"This event woke the parent; do not poll. Continue safe scoped work from the bounded handoff and inspect terminal artifacts only if needed for a material claim.\",\n\t].join(\"\\n\");\n}\n\nfunction compactTmuxAgentStatus(status: string | undefined): \"succeeded\" | \"partial\" | \"failed\" | \"canceled\" {\n\tif (status === \"done\" || status === \"succeeded\" || status === \"completed\") return \"succeeded\";\n\tif (status === \"blocked\" || status === \"partial\") return \"partial\";\n\tif (status === \"canceled\" || status === \"cancelled\" || status === \"stopped\") return \"canceled\";\n\treturn \"failed\";\n}\n\n/** Diff live tmux sessions against this session's job records. Mirrors the invariant behind\n * `LocalRuntimeController.reconcile` (local-runtime-controller.ts): reconcile only ever OBSERVES —\n * it never kills a session it did not provably start. A job whose tmux session is gone is marked\n * orphaned (informational, one-shot); a job whose session is alive but current turn is still\n * pending is resumed by re-arming its watcher, but ONLY when tmux confirms no pipe is already\n * attached to that pane (see tmuxPaneHasPipe) — otherwise a live watcher would be raced and could\n * be made to report a false failure. */\nfunction reconcileTmuxSessions(ctx: ExtensionContext, bridge: HostBridge): void {\n\tconst sessionFile = ctx.sessionManager.getSessionFile();\n\tconst jobs = loadJobPlans().filter((job) => job.parentSessionFile === sessionFile && !job.dismissedAt);\n\tif (jobs.length === 0) return;\n\tconst detection = detectTmux();\n\tif (!detection.cliAvailable) return;\n\tconst liveSessions = new Set(detection.sessions);\n\tfor (const job of jobs) {\n\t\tif (!liveSessions.has(job.sessionName)) {\n\t\t\tif (!isFireTaskTerminal(job) && !job.orphanedAt) {\n\t\t\t\tpersistJobPatch(job.id, (current) => {\n\t\t\t\t\tcurrent.orphanedAt = new Date().toISOString();\n\t\t\t\t\treturn current;\n\t\t\t\t});\n\t\t\t\tif (ctx.hasUI)\n\t\t\t\t\tctx.ui.notify(\n\t\t\t\t\t\t`tmux job ${job.id} is orphaned: session '${job.sessionName}' is gone and the job never reached a terminal state. Nothing was killed; this is informational only.`,\n\t\t\t\t\t\t\"warning\",\n\t\t\t\t\t);\n\t\t\t\t// Nothing is killed here — only the LANE record is released. A dead session means the\n\t\t\t\t// worker itself can no longer report its own terminal state, so a goal bound to it would\n\t\t\t\t// wait forever without this: release the managed lane per non-terminal agent so the goal's\n\t\t\t\t// continuation stops waiting on a worker that will never report back.\n\t\t\t\tfor (const agent of job.agents) {\n\t\t\t\t\tif (agent.result !== undefined) continue;\n\t\t\t\t\tbridge.reportManagedLane?.({\n\t\t\t\t\t\tlaneId: agentLaneId(job.id, agent.id),\n\t\t\t\t\t\tphase: \"terminal\",\n\t\t\t\t\t\tstatus: \"orphaned\",\n\t\t\t\t\t\treasonCode: \"tmux_session_orphaned\",\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (isFireTaskTerminal(job)) continue;\n\t\tfor (const agent of job.agents) {\n\t\t\tif (agent.result !== undefined) continue;\n\t\t\tif (!agent.paneId || !tmuxPaneExists(job.sessionName, agent.paneId)) continue;\n\t\t\tif (tmuxPaneHasPipe(agent.paneId)) continue;\n\t\t\treportManagedDispatchReservations(bridge, job, [agent]);\n\t\t\trearmAgentWatcher(job, agent);\n\t\t}\n\t}\n}\n\nexport default function tmuxAgentManagerExtension(pi: ExtensionAPI) {\n\tlet handoffContext: ExtensionContext | undefined;\n\tlet handoffTail = Promise.resolve();\n\tconst jobWatchers = new Map<string, fs.FSWatcher>();\n\tconst reconciledTerminalTurns = new Set<string>();\n\tconst bridge: HostBridge = pi;\n\n\tconst closeJobWatchers = () => {\n\t\tfor (const watcher of jobWatchers.values()) watcher.close();\n\t\tjobWatchers.clear();\n\t};\n\n\tconst refreshJobHandoffs = async (ctx: ExtensionContext): Promise<void> => {\n\t\tconst sessionFile = ctx.sessionManager.getSessionFile();\n\t\tconst jobs = loadJobPlans().filter(\n\t\t\t(job) => (!job.parentSessionFile || job.parentSessionFile === sessionFile) && !job.dismissedAt,\n\t\t);\n\t\tfor (const job of jobs) {\n\t\t\tif (!isFireTaskTerminal(job)) continue;\n\t\t\t// A fresh host may rehydrate a legacy running lane after this external job already persisted\n\t\t\t// its terminal result. Reconcile that terminal truth once per process/turn even when the\n\t\t\t// completion handoff was delivered earlier; ManagedLaneController makes the replay inert\n\t\t\t// when its own lifecycle is already terminal.\n\t\t\tfor (const agent of job.agents) {\n\t\t\t\tconst turn = agent.currentTurn ?? 1;\n\t\t\t\tif ((agent.notifiedTurn ?? 0) < turn) continue;\n\t\t\t\tconst reconciliationKey = `${job.id}:${agent.id}:${turn}:${agent.result?.status ?? \"failed\"}`;\n\t\t\t\tif (reconciledTerminalTurns.has(reconciliationKey)) continue;\n\t\t\t\tbridge.reportManagedLane?.({\n\t\t\t\t\tlaneId: agentLaneId(job.id, agent.id),\n\t\t\t\t\tphase: \"terminal\",\n\t\t\t\t\tstatus: agent.result?.status,\n\t\t\t\t\treasonCode: \"tmux_terminal_reconciled\",\n\t\t\t\t});\n\t\t\t\treconciledTerminalTurns.add(reconciliationKey);\n\t\t\t\twhile (reconciledTerminalTurns.size > 1_024) {\n\t\t\t\t\tconst oldest = reconciledTerminalTurns.values().next().value;\n\t\t\t\t\tif (oldest === undefined) break;\n\t\t\t\t\treconciledTerminalTurns.delete(oldest);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Per-turn notify: a job is not permanently \"closed\" after its first terminal turn — a\n\t\t\t// follow-up reopens it, so the gate is per-agent (notifiedTurn < currentTurn), not a\n\t\t\t// single whole-job notifiedAt flag.\n\t\t\tconst pendingAgents = job.agents.filter((agent) => (agent.notifiedTurn ?? 0) < (agent.currentTurn ?? 1));\n\t\t\tif (pendingAgents.length === 0) continue;\n\t\t\tfor (const agent of pendingAgents) {\n\t\t\t\tconst reconciliationKey = `${job.id}:${agent.id}:${agent.currentTurn ?? 1}:${agent.result?.status ?? \"failed\"}`;\n\t\t\t\treconciledTerminalTurns.add(reconciliationKey);\n\t\t\t\t// Advisory-only, and only ever reported when the worker itself chose to write the\n\t\t\t\t// claim file — never fabricated, never a hard cross-process cap.\n\t\t\t\tconst usage = readWorkerUsageClaim(job, agent);\n\t\t\t\tbridge.reportManagedLane?.({\n\t\t\t\t\tlaneId: agentLaneId(job.id, agent.id),\n\t\t\t\t\tphase: \"terminal\",\n\t\t\t\t\tstatus: agent.result?.status,\n\t\t\t\t\tusage,\n\t\t\t\t});\n\t\t\t\tif (usage) {\n\t\t\t\t\tbridge.reportSpawnedUsage?.(usage, {\n\t\t\t\t\t\tlabel: \"tmux-worker\",\n\t\t\t\t\t\treportId: `tmux-worker:${job.sessionName}:${job.id}:${agent.currentTurn ?? 1}`,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Production hosts own the sole durable wake path through reportManagedLane. The direct\n\t\t\t// message remains only for lightweight/standalone hosts that omit that bridge entirely.\n\t\t\tif (!bridge.reportManagedLane) {\n\t\t\t\tpi.sendMessage(\n\t\t\t\t\t{\n\t\t\t\t\t\tcustomType: \"background-worker-completion\",\n\t\t\t\t\t\tcontent: formatFireTaskHandoff(job),\n\t\t\t\t\t\tdisplay: true,\n\t\t\t\t\t\tdetails: {\n\t\t\t\t\t\t\trecords: job.agents.map((agent) => ({\n\t\t\t\t\t\t\t\tlaneId: agentLaneId(job.id, agent.id),\n\t\t\t\t\t\t\t\tstatus: compactTmuxAgentStatus(agent.result?.status),\n\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{ triggerTurn: true, deliverAs: \"followUp\" },\n\t\t\t\t);\n\t\t\t}\n\t\t\t// reportManagedLane persisted the terminal result + outbox synchronously before returning.\n\t\t\t// This marker only suppresses duplicate extension reports; it is not notification truth.\n\t\t\tpersistJobPatch(job.id, (current) => {\n\t\t\t\tcurrent.notifiedAt = new Date().toISOString();\n\t\t\t\tfor (const agent of current.agents) {\n\t\t\t\t\tconst inMemoryAgent = job.agents.find((entry) => entry.id === agent.id);\n\t\t\t\t\tagent.notifiedTurn = inMemoryAgent?.currentTurn ?? agent.currentTurn ?? 1;\n\t\t\t\t}\n\t\t\t\treturn current;\n\t\t\t});\n\t\t}\n\n\t\tconst activeIds = new Set(jobs.filter((job) => !isFireTaskTerminal(job)).map((job) => job.id));\n\t\tfor (const [jobId, watcher] of jobWatchers) {\n\t\t\tif (activeIds.has(jobId)) continue;\n\t\t\twatcher.close();\n\t\t\tjobWatchers.delete(jobId);\n\t\t}\n\t\tfor (const job of jobs) {\n\t\t\tif (isFireTaskTerminal(job) || jobWatchers.has(job.id)) continue;\n\t\t\ttry {\n\t\t\t\tconst watcher = fs.watch(job.jobDir, { persistent: false }, (_event, fileName) => {\n\t\t\t\t\tif (fileName && !String(fileName).endsWith(\".result.json\") && String(fileName) !== \"job.json\") return;\n\t\t\t\t\tif (handoffContext) void queueJobHandoffRefresh(handoffContext);\n\t\t\t\t});\n\t\t\t\twatcher.on(\"error\", (error) => {\n\t\t\t\t\twatcher.close();\n\t\t\t\t\tjobWatchers.delete(job.id);\n\t\t\t\t\tif (ctx.hasUI) ctx.ui.notify(`tmux completion signal failed for ${job.id}: ${error.message}`, \"warning\");\n\t\t\t\t});\n\t\t\t\tjobWatchers.set(job.id, watcher);\n\t\t\t} catch (error: unknown) {\n\t\t\t\tif (ctx.hasUI)\n\t\t\t\t\tctx.ui.notify(`tmux completion signal failed for ${job.id}: ${errorMessage(error)}`, \"warning\");\n\t\t\t}\n\t\t}\n\t};\n\n\tfunction queueJobHandoffRefresh(ctx: ExtensionContext): Promise<void> {\n\t\tconst refresh = handoffTail.then(() => refreshJobHandoffs(ctx));\n\t\tconst guarded = refresh.catch((error: unknown) => {\n\t\t\tif (ctx.hasUI) {\n\t\t\t\tctx.ui.notify(\n\t\t\t\t\t`tmux terminal handoff failed: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t\t\"warning\",\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t\thandoffTail = guarded;\n\t\treturn guarded;\n\t}\n\n\tpi.on(\"session_start\", async (_event, ctx) => {\n\t\thandoffContext = ctx;\n\t\tcloseJobWatchers();\n\t\treconcileTmuxSessions(ctx, bridge);\n\t\tawait queueJobHandoffRefresh(ctx);\n\t});\n\tpi.on(\"session_shutdown\", async () => {\n\t\thandoffContext = undefined;\n\t\tcloseJobWatchers();\n\t\thandoffTail = Promise.resolve();\n\t});\n\n\tpi.registerTool({\n\t\tname: \"tmux_agent_manager\",\n\t\tlabel: \"tmux Agent Manager\",\n\t\tdescription:\n\t\t\t\"Tmux-backed persistent interactive provider/workspace manager. Native delegate remains the standard cross-platform route; use this when a task benefits from persistent CLI panes.\",\n\t\tpromptSnippet:\n\t\t\t\"Persistent tmux workers with inherited, immutable launch profiles; ordinary agents use native delegate.\",\n\t\tpromptGuidelines: [\n\t\t\t\"Ordinary agents: delegate. Tmux availability detection is automatic; guard is diagnostic only. Never use native Windows tmux.\",\n\t\t\t\"fire_task derives one immutable profile per agent; omitted fields inherit parent tools, thinking, and machine scope.\",\n\t\t\t\"tools, thinkingLevel, resourceProfile, and worktreeLane are Pi-only; configure external CLIs in command.\",\n\t\t\t\"Pi path narrows structured file tools; external path sets cwd only and is audited as a machine-wide host process.\",\n\t\t\t\"fire_task arms capture before atomically starting each CLI with its task; never wait/poll/peek.\",\n\t\t\t\"Teams: list/show_template, teamTemplate. Layout: workspace_plan, then launch_workspace.\",\n\t\t\t\"send_followup prompts live pane/re-arms watcher; no relaunch. dismiss stops tracking, not session.\",\n\t\t\t\"Cleanup: stop_job/stop_session dryRun, then confirm=yes-tmux-stop.\",\n\t\t\t\"No secrets in task/command; all persist: ~/.pi/agent/work/background/tmux-agent-manager/state/jobs.\",\n\t\t\t\"Display/status metadata only; verify result/log before completion claim.\",\n\t\t\t\"Workers continue autonomously inside the assigned profile; no separate approval handshake exists.\",\n\t\t\t\"Non-Pi process behavior is CLI-owned; never represent Pi-only profile controls as enforced for an external CLI.\",\n\t\t],\n\t\tparameters: Type.Object({\n\t\t\taction: Type.Optional(\n\t\t\t\tType.Union(\n\t\t\t\t\t[\n\t\t\t\t\t\tType.Literal(\"status\"),\n\t\t\t\t\t\tType.Literal(\"setup_help\"),\n\t\t\t\t\t\tType.Literal(\"guard\"),\n\t\t\t\t\t\tType.Literal(\"notify\"),\n\t\t\t\t\t\tType.Literal(\"set_status\"),\n\t\t\t\t\t\tType.Literal(\"clear_status\"),\n\t\t\t\t\t\tType.Literal(\"workspace_plan\"),\n\t\t\t\t\t\tType.Literal(\"launch_workspace\"),\n\t\t\t\t\t\tType.Literal(\"fire_task\"),\n\t\t\t\t\t\tType.Literal(\"send_followup\"),\n\t\t\t\t\t\tType.Literal(\"dismiss\"),\n\t\t\t\t\t\tType.Literal(\"job_status\"),\n\t\t\t\t\t\tType.Literal(\"list_jobs\"),\n\t\t\t\t\t\tType.Literal(\"set_variable\"),\n\t\t\t\t\t\tType.Literal(\"list_variables\"),\n\t\t\t\t\t\tType.Literal(\"list_templates\"),\n\t\t\t\t\t\tType.Literal(\"show_template\"),\n\t\t\t\t\t\tType.Literal(\"stop_job\"),\n\t\t\t\t\t\tType.Literal(\"stop_session\"),\n\t\t\t\t\t],\n\t\t\t\t\t{\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\"status, setup_help, guard, notify, set_status, clear_status, workspace_plan, launch_workspace, fire_task, send_followup, dismiss, job_status, list_jobs, set_variable, list_variables, list_templates, show_template, stop_job, or stop_session. Default status.\",\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t),\n\t\t\ttitle: Type.Optional(Type.String({ description: \"Notification title or workspace title context.\" })),\n\t\t\tbody: Type.Optional(\n\t\t\t\tType.String({ description: \"Notification body/status text, or fallback task text for fire_task.\" }),\n\t\t\t),\n\t\t\tsubtitle: Type.Optional(\n\t\t\t\tType.String({ description: \"Accepted for cmux parity; tmux display-message ignores subtitle.\" }),\n\t\t\t),\n\t\t\tstatusKey: Type.Optional(\n\t\t\t\tType.String({\n\t\t\t\t\tdescription: \"Status key for tmux set_status/clear_status. Stored as @pi_<key>. Default pi-agents.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\tstatus: Type.Optional(Type.String({ description: \"Status value for set_status.\" })),\n\t\t\ticon: Type.Optional(\n\t\t\t\tType.String({ description: \"Accepted for cmux parity; tmux display-message/user options ignore icon.\" }),\n\t\t\t),\n\t\t\tcolor: Type.Optional(\n\t\t\t\tType.String({ description: \"Accepted for cmux parity; tmux display-message/user options ignore color.\" }),\n\t\t\t),\n\t\t\tworkspaceName: Type.Optional(\n\t\t\t\tType.String({\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"tmux session name/title for workspace_plan/launch_workspace/fire_task, or target for notify/status.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\tcwd: Type.Optional(\n\t\t\t\tType.String({\n\t\t\t\t\tdescription: \"Working directory for planned/launched agent workspace. Defaults to current cwd.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\tteamTemplate: Type.Optional(\n\t\t\t\tType.String({\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Built-in team template name for workspace/fire_task, or target for show_template. Use list_templates first. Current templates include provider-prompt-smoke, full-provider-review, builder-validator, plus JSON templates under templates/.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\ttask: Type.Optional(\n\t\t\t\tType.String({\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Fire-and-forget worker objective. Required for fire_task unless body is provided. Also used as the follow-up objective for send_followup.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\tjobId: Type.Optional(\n\t\t\t\tType.String({\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Existing job id for job_status/list_variables/set_variable/send_followup/dismiss. Never creates a fresh fire_task job.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\tlaunchKey: Type.Optional(\n\t\t\t\tType.String({\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Optional fresh fire_task identity. Use only for intentional stable naming; omitted creates a unique key. Never auto-retained from results.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\tagentId: Type.Optional(\n\t\t\t\tType.String({\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Target agent id for send_followup. Defaults to the job's first (primary) agent. Multi-agent-per-turn follow-up is not supported; only one agent's pane receives each follow-up.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\tvariableName: Type.Optional(\n\t\t\t\tType.String({\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"For set_variable: named condition/decision variable workers read only at the decision point.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\tvariableValue: Type.Optional(\n\t\t\t\tType.String({ description: \"For set_variable: value to write. body/status can also supply the value.\" }),\n\t\t\t),\n\t\t\tdeadlineSeconds: Type.Optional(\n\t\t\t\tType.Number({\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"For fire_task: seconds before each event-driven watcher records timeout and terminates its owned pane. Default 1200.\",\n\t\t\t\t\tminimum: 5,\n\t\t\t\t\tmaximum: MAX_DEADLINE_SECONDS,\n\t\t\t\t}),\n\t\t\t),\n\t\t\tagents: Type.Optional(\n\t\t\t\tType.Array(\n\t\t\t\t\tType.Object({\n\t\t\t\t\t\tprovider: Type.Optional(providerSchema()),\n\t\t\t\t\t\tname: Type.Optional(Type.String({ description: \"Pane/worker name.\" })),\n\t\t\t\t\t\tcommand: Type.Optional(\n\t\t\t\t\t\t\tType.String({\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\"Interactive CLI start command. Capture is armed first, then the initial prompt file is passed as the final CLI argument; Agy also gets --prompt-interactive.\",\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tcwd: Type.Optional(\n\t\t\t\t\t\t\tType.String({\n\t\t\t\t\t\t\t\tdescription: \"Legacy per-agent working directory; does not narrow filesystem scope.\",\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tpath: Type.Optional(\n\t\t\t\t\t\t\tType.String({\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\"Optional workspace cwd. For Pi it narrows structured file tools; external CLIs remain machine-wide host-trusted processes.\",\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t\ttools: Type.Optional(\n\t\t\t\t\t\t\tType.Array(Type.String(), {\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\"Pi-only policy-owned tool override. Omitted inherits the parent's eligible worker tools; parent-only controls are removed.\",\n\t\t\t\t\t\t\t\tminItems: 1,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tresourceProfile: Type.Optional(\n\t\t\t\t\t\t\tType.String({\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t\"Pi-only resource-profile override. Omitted inherits the parent's effective resources.\",\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tthinkingLevel: Type.Optional(\n\t\t\t\t\t\t\torchestrationThinkingLevelSchema(\n\t\t\t\t\t\t\t\t\"Pi-only thinking override. Omitted inherits the orchestrator's current level.\",\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tworktreeLane: Type.Optional(\n\t\t\t\t\t\t\tType.String({ description: \"Pi-only worktree-sync lane binding for this worker.\" }),\n\t\t\t\t\t\t),\n\t\t\t\t\t}),\n\t\t\t\t\t{ description: \"Agents/providers to lay out in tmux. Default: pi, agy, codex.\" },\n\t\t\t\t),\n\t\t\t),\n\t\t\tdryRun: Type.Optional(\n\t\t\t\tType.Boolean({\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Preview only when true. Launch actions run by default; stop actions remain previews by default.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\tforce: Type.Optional(\n\t\t\t\tType.Boolean({\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"For fire_task only: archive an existing job directory with the same launchKey before launch. Existing tmux sessions are still refused; stop them first.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\tconfirm: Type.Optional(\n\t\t\t\tType.String({ description: \"Required for real stop_job/stop_session: yes-tmux-stop.\" }),\n\t\t\t),\n\t\t\tgoalId: Type.Optional(\n\t\t\t\tType.String({\n\t\t\t\t\tdescription: \"Goal this fire_task/send_followup belongs to for durable lane ownership and recovery.\",\n\t\t\t\t}),\n\t\t\t),\n\t\t}),\n\t\tasync execute(toolCallId, params, signal, onUpdate, ctx) {\n\t\t\tconst result = await executeTool(toolCallId, params as Params, signal, onUpdate, ctx, bridge);\n\t\t\tawait queueJobHandoffRefresh(ctx);\n\t\t\treturn result;\n\t\t},\n\t});\n\n\tpi.registerCommand(\"tmux-agents\", {\n\t\tdescription: \"Check tmux availability and show managed-agent guidance.\",\n\t\thandler: async (_args, ctx) => {\n\t\t\tconst detection = detectTmux();\n\t\t\tconst text = detection.cliAvailable\n\t\t\t\t? tmuxManagerInstructions(\"agent/provider\", detection)\n\t\t\t\t: setupHelp(detection);\n\t\t\tctx.ui.notify(text, detection.cliAvailable ? \"info\" : \"warning\");\n\t\t},\n\t});\n}\n"]}
|