{"version":3,"file":"server.cjs","names":["TeamToolParamsSchema","createSessionScope","toModelInfo","SubagentToolSchema","validateSubagentParams","SUBAGENT_ACTIONS","DoomTeamExpectedError","formatAgentDetail","publicAgent","formatAgentList","loadConfig","formatFleetView","formatRunTranscript","listSuspendedRuns","formatSuspendedRuns","resolveTrackedRunId","isSuspendedRunResumable","defineRoot","createTeamExtensionRuntime","readDoomChildSessionService","createSessionScope","createDelegationBridge","loadConfig","formatCompletionHeadline","SUBAGENT_NOTIFY_MESSAGE_TYPE","toModelInfo","DOOM_DELEGATION_SERVICE","readDoomBackgroundWorkService","DOOM_SUBAGENT_POLICY_SERVICE","createSubagentPolicyService","resolveActiveTeamModelSpecs","openScopeAsync","formatSuspendedRuns","suspendScopeRuns","defineRoot","contribution","defineChannel","defineChannel","contribution","defineChannel","defineChannel","contribution","DoomTeamExpectedError","AgentDiscoveryService","resolveActiveTeamModelSpecs","createSessionScope","toModelInfo","loadConfig","defineRoute","contribution","formatTeamContextSnapshot","readActiveTeamSnapshot","defineResource","contribution","defineServerTool","defineServerTool","defineServerPlugin","channelSubagentCatalog","channelSubagentRuns","rootSession","composeRootHooks","apiRoute","resourceTeam","toolIntercom","toolSubagent"],"sources":["../../src/services/headlessIntercomTool/index.ts","../../src/services/headlessSubagentTool/index.ts","../../src/services/mcpTools/index.ts","../../src/services/nativeRunProjection/index.ts","../../src/services/webSubagentCatalog/index.ts","../../src/types/webSubagents.ts","../../src/extensions/workspaces/sessions/(backend)/_lib/root.server.ts","../../src/extensions/workspaces/sessions/(backend)/root.server.ts","../../src/extensions/(backend)/channel/_lib/subagent-catalog.ts","../../src/extensions/(backend)/channel/subagent-catalog.server.ts","../../src/extensions/(backend)/channel/_lib/subagent-runs.ts","../../src/extensions/(backend)/channel/subagent-runs.server.ts","../../src/extensions/workspaces/sessions/(backend)/api/_lib/route.server.ts","../../src/extensions/workspaces/sessions/(backend)/api/route.server.ts","../../src/extensions/workspaces/sessions/(backend)/resource/_lib/team.server.ts","../../src/extensions/workspaces/sessions/(backend)/resource/team.server.ts","../../src/extensions/workspaces/sessions/(backend)/tool/intercom.server.ts","../../src/extensions/workspaces/sessions/(backend)/tool/subagent.server.ts","../../generated/server.ts"],"sourcesContent":["import type { DoomHeadlessTool } from '@agimon-ai/doompi-core/headless';\n\nimport { TeamToolParamsSchema, type NativeTeamRuntime } from '../nativeTeamChannel';\n\nexport function createHeadlessIntercomTool(channel: NativeTeamRuntime): DoomHeadlessTool<typeof TeamToolParamsSchema> {\n  return {\n    name: 'intercom',\n    label: 'Intercom',\n    description: 'Communicate with active agents in this root session.',\n    parameters: TeamToolParamsSchema,\n    promptGuidelines: [\n      'Send only new progress, blockers, or decisions. Do not repeat task briefs or delegation instructions.',\n    ],\n    executionMode: 'serial',\n    async execute(toolCallId, parameters, signal, onUpdate) {\n      return channel.execute(toolCallId, parameters, signal, onUpdate);\n    },\n  };\n}\n","import type {\n  DoomHeadlessExecutionContext,\n  DoomHeadlessTool,\n  DoomHeadlessToolResult,\n} from '@agimon-ai/doompi-core/headless';\n\nimport { SUBAGENT_ACTIONS, SubagentToolSchema, type SubagentToolParams } from '../../schemas/subagentTool';\nimport { resolveTrackedRunId } from '../asyncJobTracker';\nimport { loadConfig } from '../config';\nimport { DoomTeamExpectedError } from '../errors';\nimport { toModelInfo } from '../modelInfo';\nimport { createSessionScope } from '../sessionPaths';\nimport type { SpawnPlanResult } from '../spawnPlan';\nimport { formatFleetView, formatRunTranscript } from '../statusViews';\nimport {\n  formatAgentDetail,\n  formatAgentList,\n  publicAgent,\n  validateParams as validateSubagentParams,\n} from '../subagentTool';\nimport { clearSuspendedRun, formatSuspendedRuns, isSuspendedRunResumable, listSuspendedRuns } from '../suspendedRuns';\nimport { createTeamExtensionRuntime } from '../teamRuntime';\n\nconst SUBAGENT_DESCRIPTION =\n  'Discover agents, start and manage persistent background subagent runs, and inspect suspended work.';\n\n/**\n * Every result carries the text the MODEL reads and the structured details the\n * cockpit card reads. The text is always given explicitly: a serialized detail\n * object is not a tool result a model can act on, and the old default made that\n * the easy mistake to make.\n */\nfunction result(text: string, details: unknown, isError = false): DoomHeadlessToolResult {\n  return { content: [{ type: 'text', text }], details, ...(isError ? { isError: true } : {}) };\n}\n\n/** The launch report, worded as the Pi path words it, next step included. */\nfunction formatSpawnPlan(plan: SpawnPlanResult): string {\n  const started = plan.outcomes.filter((outcome) => outcome.runId);\n  const failed = plan.outcomes.filter((outcome) => !outcome.runId);\n  const lines = plan.outcomes.map(\n    (outcome) =>\n      `- ${outcome.agent}: ${outcome.runId ? outcome.runId : `failed: ${outcome.error ?? 'unknown error'}`}${outcome.warning ? `\\n  Warning: ${outcome.warning}` : ''}`,\n  );\n  const label = plan.outcomes.length === 1 ? 'subagent' : 'subagents';\n  const summary =\n    failed.length === 0\n      ? `Started ${started.length} ${label}:`\n      : `Started ${started.length}/${plan.outcomes.length} ${label}; ${failed.length} failed:`;\n  const next =\n    failed.length === 0\n      ? 'Completion will arrive asynchronously. Continue only non-overlapping work, or end your turn.'\n      : 'Completion will arrive asynchronously for started runs. Do not resubmit them; retry only corrected failed entries.';\n  return [summary, ...lines, '', next].join('\\n');\n}\n\nfunction scopeOf(value: string | undefined): 'user' | 'project' | 'both' {\n  return value === 'user' || value === 'project' ? value : 'both';\n}\n\nexport function createHeadlessSubagentTool(\n  runtime: ReturnType<typeof createTeamExtensionRuntime>,\n  execution: DoomHeadlessExecutionContext,\n): DoomHeadlessTool<typeof SubagentToolSchema> {\n  const scope = createSessionScope(execution.sessionId);\n  const jobs = runtime.asyncJobTracker.forSession(execution.sessionId, scope);\n  const availableModels = execution.model ? [toModelInfo(execution.model)] : [];\n  return {\n    name: 'subagent',\n    label: 'Subagent',\n    description: SUBAGENT_DESCRIPTION,\n    parameters: SubagentToolSchema,\n    promptSnippet: 'Discover, run, inspect, steer, stop, and restore persistent subagents',\n    promptGuidelines: [\n      'Runs are persistent background work. Do not resubmit a run that already returned an id.',\n      'Use status or suspended before retrying a failed or interrupted operation.',\n    ],\n    executionMode: 'serial',\n    async execute(_toolCallId, parameters, signal, onUpdate) {\n      try {\n        const params: SubagentToolParams = validateSubagentParams(parameters);\n        if (params.action === SUBAGENT_ACTIONS.agents) {\n          const scope = scopeOf(params.scope);\n          const agents = runtime.discovery.discover(params.cwd ?? execution.cwd, scope).agents;\n          const selected = params.name\n            ? runtime.discovery.find(params.cwd ?? execution.cwd, scope, params.name)\n            : undefined;\n          if (params.name && !selected)\n            throw new DoomTeamExpectedError(\n              'agent_not_found',\n              `No executable agent matches '${params.name}'.`,\n              false,\n              'Call subagent({\"action\":\"agents\"}) and retry with an exact agent name.',\n            );\n          if (selected) return result(formatAgentDetail(selected), { agents: [publicAgent(selected)] });\n          return result(formatAgentList(agents), {\n            agents: agents.map((agent) => ({\n              name: agent.name,\n              source: agent.source,\n              description: agent.description,\n              runtime: agent.runtime ?? 'pi',\n            })),\n          });\n        }\n        if (params.action === SUBAGENT_ACTIONS.run) {\n          onUpdate?.(\n            result(`Starting ${params.requests.length} subagent${params.requests.length === 1 ? '' : 's'}...`, {\n              action: params.action,\n              partial: true,\n            }),\n          );\n          // An agent whose resolved default context is `fork` needs a parent\n          // branch here too, not only on the delegation path. Accessed\n          // defensively: a host that cannot offer a branch must degrade to a\n          // fresh child, never fail the launch.\n          const parentForkSource = await execution.session?.forkSource?.();\n          const plan = await runtime.spawnPlanner.spawn(\n            {\n              tasks: params.requests.map((request) => ({\n                agent: request.agent.trim(),\n                task: request.task.trim(),\n                ...(request.inlineAgent ? { inlineAgent: request.inlineAgent } : {}),\n                ...(request.cwd ? { cwd: request.cwd } : {}),\n                ...(request.model ? { model: request.model } : {}),\n                ...(request.runtime ? { runtime: request.runtime } : {}),\n              })),\n              cwd: execution.cwd,\n              agentScope: scopeOf(params.scope),\n              sessionScope: createSessionScope(execution.sessionId),\n              environment: execution.environment,\n              parentSessionId: execution.sessionId,\n              ...(params.concurrency === undefined ? {} : { concurrency: params.concurrency }),\n              ...(params.artifacts === undefined ? {} : { artifacts: params.artifacts }),\n              availableModels,\n              ...(execution.model ? { parentModel: execution.model } : {}),\n              ...(parentForkSource ? { parentForkSource } : {}),\n            },\n            loadConfig().config,\n          );\n          for (const outcome of plan.outcomes) {\n            if (outcome.runId) {\n              jobs.track(\n                outcome.runId,\n                outcome.identity ? { identity: outcome.identity, inline: outcome.inline ?? false } : undefined,\n              );\n            }\n          }\n          return result(formatSpawnPlan(plan), plan);\n        }\n        if (params.action === SUBAGENT_ACTIONS.status) {\n          if (!('id' in params)) {\n            const runs = jobs.list();\n            return result(formatFleetView(runs), { runs });\n          }\n          const status = runtime.management.statusAsync\n            ? await runtime.management.statusAsync(params.id)\n            : runtime.management.status(params.id);\n          const statusText = status.status\n            ? [\n                `Run '${status.runId}': ${status.status.state}`,\n                status.status.summary ? `Summary: ${status.status.summary}` : undefined,\n              ]\n                .filter((line): line is string => line !== undefined)\n                .join('\\n')\n            : `Run '${status.runId}' has no status yet.`;\n          const transcript =\n            params.transcriptLines === undefined\n              ? undefined\n              : formatRunTranscript(status.status, params.transcriptLines);\n          return result([statusText, transcript].filter((text): text is string => text !== undefined).join('\\n\\n'), {\n            runId: status.runId,\n            status: status.status,\n          });\n        }\n        if (params.action === SUBAGENT_ACTIONS.suspended) {\n          const suspended = listSuspendedRuns(createSessionScope(execution.sessionId));\n          const text = suspended.length ? formatSuspendedRuns(suspended) : 'No suspended subagents in this session.';\n          return result(text, { suspended, text });\n        }\n        const id = resolveTrackedRunId(jobs, params.id);\n        if (params.action === SUBAGENT_ACTIONS.stop) {\n          const control = await runtime.management.stop(id, params.reason);\n          return result(`Stop requested for '${id}'.`, { runId: id, control });\n        }\n        if (params.action === SUBAGENT_ACTIONS.steer) {\n          const steer = await runtime.management.steer(id, params.message, undefined, signal);\n          return result(`Steer request '${steer.requestId}' for '${id}' is ${steer.state}: ${steer.message}`, {\n            runId: id,\n            steer,\n          });\n        }\n        const suspended = listSuspendedRuns(createSessionScope(execution.sessionId)).find(\n          (item) => item.runId === params.id,\n        );\n        if (!suspended) throw new Error(`No suspended run matches '${params.id}'.`);\n        if (!isSuspendedRunResumable(suspended)) throw new Error(`Suspended run '${params.id}' is not resumable.`);\n        const restored = await runtime.spawnPlanner.spawn(\n          {\n            single: {\n              agent: suspended.agent,\n              ...(suspended.inlineAgent ? { inlineAgent: suspended.inlineAgent } : {}),\n              task: suspended.task,\n              cwd: suspended.cwd,\n              ...(suspended.model ? { model: suspended.model } : {}),\n              sessionFile: suspended.sessionFile,\n              ...(suspended.identity ? { identity: suspended.identity } : {}),\n            },\n            cwd: suspended.cwd,\n            agentScope: 'both',\n            sessionScope: createSessionScope(execution.sessionId),\n            environment: execution.environment,\n            runtime: 'pi',\n            parentSessionId: execution.sessionId,\n            availableModels,\n          },\n          loadConfig().config,\n        );\n        const outcome = restored.outcomes[0];\n        if (!outcome?.runId)\n          throw new Error(`Could not restore '${params.id}': ${outcome?.error ?? 'the spawn produced no run.'}`);\n        clearSuspendedRun(createSessionScope(execution.sessionId), params.id);\n        return result(`Restored '${params.id}' as '${outcome.runId}', continuing its transcript.`, {\n          restore: { ...outcome, restoredFrom: params.id },\n        });\n      } catch (error) {\n        const message = error instanceof Error ? error.message : String(error);\n        return result(message, message, true);\n      }\n    },\n  };\n}\n","import type { DoomHeadlessTool } from '@agimon-ai/doompi-core/headless';\nimport type { DoomMcpPluginContext } from '@agimon-ai/doompi-core/mcpFacet';\nimport type { Context } from '@deepseek-ai/cordis';\n\nexport const TEAM_MCP_TOOLS_SERVICE = 'doom/team-mcp-tools';\n\nexport interface McpToolCatalog {\n  get(name: string): DoomHeadlessTool | undefined;\n}\n\nexport function mountMcpTools(tools: readonly DoomHeadlessTool[]) {\n  return (context: Context): void => {\n    context.plugin((providerContext) => {\n      providerContext.provide(TEAM_MCP_TOOLS_SERVICE, {\n        get: (name) => tools.find((tool) => tool.name === name),\n      } satisfies McpToolCatalog);\n    });\n  };\n}\n\nexport function bindMcpTool(context: DoomMcpPluginContext, name: string): DoomHeadlessTool {\n  const tool = context.services.get<McpToolCatalog>(TEAM_MCP_TOOLS_SERVICE)?.get(name);\n  if (!tool) throw new Error(`Team tool is unavailable: ${name}`);\n  return {\n    ...tool,\n    execute(toolCallId, parameters, signal, onUpdate) {\n      const executionSignal = AbortSignal.any([context.signal, signal ?? context.signal]);\n      return tool.execute(toolCallId, parameters, executionSignal, onUpdate, context.execution);\n    },\n  };\n}\n","import type { NativeAsyncJobProjection } from '../asyncJobTracker';\n\nexport type NativeRunProjectionListener = (runs: readonly NativeAsyncJobProjection[]) => void;\n\nexport interface NativeRunProjectionSink {\n  publish(sessionId: string, projection: NativeAsyncJobProjection): void;\n  dispose(sessionId: string): void;\n}\n\ninterface SessionProjection {\n  readonly runs: Map<string, NativeAsyncJobProjection>;\n  readonly listeners: Set<NativeRunProjectionListener>;\n}\n\nconst sessions = new Map<string, SessionProjection>();\n\nfunction projectionFor(sessionId: string): SessionProjection {\n  let projection = sessions.get(sessionId);\n  if (!projection) {\n    projection = { runs: new Map(), listeners: new Set() };\n    sessions.set(sessionId, projection);\n  }\n  return projection;\n}\n\nfunction snapshot(projection: SessionProjection): readonly NativeAsyncJobProjection[] {\n  return [...projection.runs.values()];\n}\n\nexport const nativeRunProjection: NativeRunProjectionSink = {\n  publish(sessionId, run) {\n    const projection = projectionFor(sessionId);\n    projection.runs.set(run.runId, run);\n    const runs = snapshot(projection);\n    for (const listener of projection.listeners) listener(runs);\n  },\n  dispose(sessionId) {\n    const projection = sessions.get(sessionId);\n    if (!projection) return;\n    for (const listener of projection.listeners) listener([]);\n    projection.listeners.clear();\n    projection.runs.clear();\n    sessions.delete(sessionId);\n  },\n};\n\nexport function subscribeNativeRunProjection(sessionId: string, listener: NativeRunProjectionListener): () => void {\n  const projection = projectionFor(sessionId);\n  projection.listeners.add(listener);\n  if (projection.runs.size > 0) listener(snapshot(projection));\n\n  let closed = false;\n  return () => {\n    if (closed) return;\n    closed = true;\n    projection.listeners.delete(listener);\n    if (projection.listeners.size === 0 && projection.runs.size === 0) sessions.delete(sessionId);\n  };\n}\n","import type { SubagentCatalogAgent, SubagentCatalogSource } from '../../types/webSubagents';\n\n/** The fields the catalog reads off an agent definition; an AgentConfig satisfies it. */\nexport interface CatalogAgentInput {\n  name: string;\n  packageName?: string;\n  description: string;\n  model?: string;\n  fallbackModels?: string[];\n  tools?: string[];\n  skills?: string[];\n  extensions?: string[];\n  defaultContext?: 'fresh' | 'fork';\n  source: SubagentCatalogSource;\n  filePath: string;\n}\n\n/** Nearest definition first: the order shadowing resolves in. */\nconst SOURCE_ORDER: Readonly<Record<SubagentCatalogSource, number>> = { project: 0, user: 1, plugin: 2 };\nconst DEFAULT_CONTEXT = 'fresh';\n\nexport function catalogAgentOf(agent: CatalogAgentInput): SubagentCatalogAgent {\n  return {\n    name: agent.name,\n    source: agent.source,\n    ...(agent.packageName === undefined ? {} : { packageName: agent.packageName }),\n    description: agent.description,\n    ...(agent.model === undefined ? {} : { model: agent.model }),\n    fallbackModels: agent.fallbackModels ?? [],\n    tools: agent.tools ?? [],\n    skills: agent.skills ?? [],\n    extensions: agent.extensions ?? [],\n    defaultContext: agent.defaultContext ?? DEFAULT_CONTEXT,\n    filePath: agent.filePath,\n  };\n}\n\n/** The catalog's order: by source, nearest first, then by name. */\nexport function presentCatalog(agents: readonly CatalogAgentInput[]): SubagentCatalogAgent[] {\n  return agents\n    .map(catalogAgentOf)\n    .sort((a, b) => SOURCE_ORDER[a.source] - SOURCE_ORDER[b.source] || a.name.localeCompare(b.name));\n}\n\n/** Every model spec a launch could name: the team's offer plus whatever the definitions pin, deduplicated in order. */\nexport function catalogModels(agents: readonly CatalogAgentInput[], teamModels: readonly string[]): string[] {\n  const seen = new Set<string>();\n  const models: string[] = [];\n  for (const model of [\n    ...teamModels,\n    ...agents.flatMap((agent) => [agent.model ?? '', ...(agent.fallbackModels ?? [])]),\n  ]) {\n    if (model === '' || seen.has(model)) continue;\n    seen.add(model);\n    models.push(model);\n  }\n  return models;\n}\n","/**\n * Subagent run view types shared by this package's hub channel and its web\n * plugin. The shapes mirror the per-run status files this package's own\n * runtime writes; the cockpit renders them as 'subagent_runs' channel\n * payloads.\n */\n\n/** Coarse run state the cockpit renders; rawState keeps doom-team's exact word. */\nexport type SubagentRunState = 'queued' | 'running' | 'done' | 'failed' | 'stopped';\n\n/**\n * One subagent run of a session, read from doom-team's per-run status file.\n */\nexport interface SubagentRun {\n  runId: string;\n  agent: string;\n  /**\n   * Generated addressable identity, for example `alan-reviewer-3`.\n   *\n   * Additive and optional: a run projected before identities existed, and any\n   * run whose claim could not be written, still arrives without one.\n   */\n  identity?: string;\n  /** True when this run came from a one-shot inline agent definition. */\n  inline?: boolean;\n  state: SubagentRunState;\n  rawState: string;\n  /** The delegation prompt the main agent gave this run. */\n  task: string;\n  /** A doom-task binding, when the delegation named one; wins over task in the card. */\n  taskRef?: string;\n  model?: string;\n  cwd: string;\n  /** The child transcript path, when the session host exposes one. */\n  sessionFile?: string;\n  /** Epoch milliseconds, as doom-team writes them. */\n  startedAt: number;\n  endedAt?: number;\n  lastUpdate: number;\n  /** Live one-liner of what the run is doing right now. */\n  currentTool?: string;\n  toolCount?: number;\n  tokens?: number;\n  cost?: number;\n  /** Final report, present once the run finished. */\n  summary?: string;\n  /** Failure reason, present when the run failed. */\n  error?: string;\n  /** Recent output lines, oldest first, capped. */\n  tail: string[];\n}\n\nexport const SUBAGENT_RUNS_TYPE = 'subagent_runs';\n\n/** How the runtime answered one steer: delivered, refused by the run, or not yet acknowledged. */\nexport interface SubagentSteerResult {\n  state: 'delivered' | 'failed' | 'pending';\n  message: string;\n}\n/** Where an agent definition came from; the catalog groups by it, nearest first. */\nexport type SubagentCatalogSource = 'project' | 'user' | 'plugin';\n\n/** One launchable agent, as the catalog lists it. */\nexport interface SubagentCatalogAgent {\n  name: string;\n  source: SubagentCatalogSource;\n  /** The package that staged a plugin agent. */\n  packageName?: string;\n  description: string;\n  /** The model the definition pins; absent means the runtime's default. */\n  model?: string;\n  fallbackModels: string[];\n  /** Empty means the definition does not narrow the tool set. */\n  tools: string[];\n  skills: string[];\n  extensions: string[];\n  defaultContext: 'fresh' | 'fork';\n  filePath: string;\n}\n\n/** The 'subagent_catalog' channel payload: the agents a session's directory can launch. */\nexport interface SubagentCatalogPayload {\n  cwd: string;\n  agents: SubagentCatalogAgent[];\n  /** Model specs the active team package offers, for the launch dialog's picker. */\n  models: string[];\n  /** Why the list may be incomplete, when discovery failed. */\n  warning?: string;\n}\n\nexport const SUBAGENT_CATALOG_TYPE = 'subagent_catalog';\n","import { readDoomBackgroundWorkService } from '@agimon-ai/doompi-core/backgroundWork';\nimport { readDoomChildSessionService } from '@agimon-ai/doompi-core/childSession';\nimport { DOOM_DELEGATION_SERVICE } from '@agimon-ai/doompi-core/delegation';\nimport { defineRoot } from '@agimon-ai/doompi-core/extensionFile';\nimport type { DoomHeadlessActivity } from '@agimon-ai/doompi-core/headless';\nimport type { DoomDirectEventBus } from '@agimon-ai/doompi-core/hubChannel';\nimport type { DoomServerPluginContext } from '@agimon-ai/doompi-core/serverFacet';\nimport { provideBackgroundWorkService } from '@agimon-ai/doompi-session';\nimport type { Context } from '@deepseek-ai/cordis';\n\nimport { DOOM_SUBAGENT_POLICY_SERVICE } from '../../../../../schemas/subagentPolicy';\nimport { resolveActiveTeamModelSpecs } from '../../../../../services/agentDiscovery';\nimport type { NativeAsyncJobProjection, TrackedAsyncJob } from '../../../../../services/asyncJobTracker';\nimport { loadConfig } from '../../../../../services/config';\nimport { createDelegationBridge } from '../../../../../services/delegationBridge';\nimport { registerDirectRunBackgroundWork } from '../../../../../services/directRunBackgroundWork';\nimport { createHeadlessIntercomTool } from '../../../../../services/headlessIntercomTool';\nimport { createHeadlessSubagentTool } from '../../../../../services/headlessSubagentTool';\nimport { mountMcpTools } from '../../../../../services/mcpTools';\nimport { toModelInfo } from '../../../../../services/modelInfo';\nimport { nativeRunProjection } from '../../../../../services/nativeRunProjection';\nimport { subscribeNativeRunProjection } from '../../../../../services/nativeRunProjection';\nimport type { NativeTeamTransport } from '../../../../../services/nativeTeamChannel';\nimport { formatCompletionHeadline, SUBAGENT_NOTIFY_MESSAGE_TYPE } from '../../../../../services/notify';\nimport { openScopeAsync, suspendScopeRuns } from '../../../../../services/sessionLifecycle';\nimport { createSessionScope } from '../../../../../services/sessionPaths';\nimport { createSubagentPolicyService } from '../../../../../services/subagentPolicyService';\nimport { formatSuspendedRuns } from '../../../../../services/suspendedRuns';\nimport { createTeamExtensionRuntime } from '../../../../../services/teamRuntime';\nimport { catalogModels, presentCatalog } from '../../../../../services/webSubagentCatalog';\nimport {\n  SUBAGENT_CATALOG_TYPE,\n  SUBAGENT_RUNS_TYPE,\n  type SubagentRun,\n  type SubagentRunState,\n} from '../../../../../types/webSubagents';\n\ninterface SessionRunProjection extends SubagentRun {\n  /** Host-private child transcript path consumed by the hub, not the browser. */\n  sessionFile?: string;\n}\n\nconst TERMINAL_RUN_STATES = new Set(['completed', 'complete', 'failed', 'stopped', 'paused']);\n\nfunction runState(status: string): SubagentRunState {\n  if (status === 'completed' || status === 'complete') return 'done';\n  if (status === 'failed') return 'failed';\n  if (status === 'stopped' || status === 'paused') return 'stopped';\n  if (status === 'queued') return 'queued';\n  return 'running';\n}\n\nfunction presentTrackedRun(run: TrackedAsyncJob): SessionRunProjection | undefined {\n  if (!run.agent || !run.status || run.startedAt === undefined) return undefined;\n  const lastUpdate = run.updatedAt ?? run.startedAt;\n  return {\n    runId: run.runId,\n    agent: run.agent,\n    ...(run.identity === undefined ? {} : { identity: run.identity }),\n    ...(run.inline === undefined ? {} : { inline: run.inline }),\n    state: runState(run.status),\n    rawState: run.status,\n    task: run.task ?? '',\n    cwd: run.cwd ?? '',\n    startedAt: run.startedAt,\n    ...(TERMINAL_RUN_STATES.has(run.status) ? { endedAt: lastUpdate } : {}),\n    lastUpdate,\n    tail: [],\n    ...(run.sessionFile === undefined ? {} : { sessionFile: run.sessionFile }),\n    ...(run.summary === undefined ? {} : { summary: run.summary }),\n    ...(run.error === undefined ? {} : { error: run.error }),\n  };\n}\n\nfunction presentNativeRun(run: NativeAsyncJobProjection): SessionRunProjection {\n  return {\n    runId: run.runId,\n    agent: run.agent,\n    ...(run.identity === undefined ? {} : { identity: run.identity }),\n    ...(run.inline === undefined ? {} : { inline: run.inline }),\n    state: runState(run.status),\n    rawState: run.status,\n    task: run.task,\n    cwd: run.cwd,\n    startedAt: run.startedAt,\n    ...(TERMINAL_RUN_STATES.has(run.status) ? { endedAt: run.updatedAt } : {}),\n    lastUpdate: run.updatedAt,\n    tail: [],\n    ...(run.sessionFile === undefined ? {} : { sessionFile: run.sessionFile }),\n    ...(run.summary === undefined ? {} : { summary: run.summary }),\n    ...(run.error === undefined ? {} : { error: run.error }),\n  };\n}\n\nfunction publishRuns(\n  directEvents: DoomDirectEventBus,\n  sessionId: string,\n  jobs: readonly TrackedAsyncJob[],\n  nativeRuns: ReadonlyMap<string, NativeAsyncJobProjection>,\n): void {\n  const runs = jobs\n    .filter((job) => !job.native)\n    .map(presentTrackedRun)\n    .filter((run): run is SessionRunProjection => run !== undefined);\n  runs.push(...[...nativeRuns.values()].map(presentNativeRun));\n  directEvents.publish(SUBAGENT_RUNS_TYPE, sessionId, { runs });\n}\n\nconst TEAM_COST_STATUS = 'doom-team-cost';\nconst COST_DECIMALS = 6;\n\nfunction updateTeamCost(\n  client: { setStatus(source: string, text: string | undefined): void },\n  jobs: readonly TrackedAsyncJob[],\n  nativeRuns: ReadonlyMap<string, NativeAsyncJobProjection>,\n  costs: Map<string, number>,\n  previousText: string | undefined,\n  attached: boolean,\n  force = false,\n): string | undefined {\n  const trackedCosts = new Map<string, number>();\n  for (const job of jobs) {\n    if (job.cost !== undefined && Number.isFinite(job.cost)) trackedCosts.set(job.runId, job.cost);\n  }\n  for (const [runId, run] of nativeRuns) {\n    if (trackedCosts.has(runId) || run.cost === undefined || !Number.isFinite(run.cost)) continue;\n    costs.set(runId, run.cost);\n  }\n  for (const [runId, cost] of trackedCosts) costs.set(runId, cost);\n\n  let total = 0;\n  for (const cost of costs.values()) total += cost;\n  const text = total > 0 ? String(Number(total.toFixed(COST_DECIMALS))) : undefined;\n  if (!force && text === previousText) return previousText;\n  if (attached) client.setStatus(TEAM_COST_STATUS, text);\n  return text;\n}\n\nconst root = defineRoot(({ context, host: serverHost, agent: host }: DoomServerPluginContext) => {\n  if (!host) throw new Error('Team session requires the headless host.');\n  if (serverHost.context.environment === undefined) {\n    throw new Error('Team headless facet requires an admitted session environment.');\n  }\n  const directEvents = serverHost.context.directEvents;\n  if (directEvents === undefined) {\n    throw new Error('Team headless facet requires host-owned direct events.');\n  }\n  const execution = host.context;\n  const runtime = createTeamExtensionRuntime(undefined, {\n    environment: serverHost.context.environment,\n    childSessions: { get: () => readDoomChildSessionService(context) },\n    nativeRunProjection,\n  });\n  const scope = createSessionScope(execution.sessionId);\n  runtime.management.bindSessionScope(scope);\n  const jobs = runtime.asyncJobTracker.forSession(execution.sessionId, scope);\n  const bridge = createDelegationBridge({\n    planner: runtime.spawnPlanner,\n    management: runtime.management,\n    waiter: runtime.subagentWaiter,\n    scheduler: runtime.pollScheduler,\n    tracker: runtime.asyncJobTracker,\n    loadConfig: () => loadConfig().config,\n  });\n  const nativeRuns = new Map<string, NativeAsyncJobProjection>();\n  const childCosts = new Map<string, number>();\n  let costText: string | undefined;\n  let activityAttached = false;\n  const publishRunSnapshot = (): void => {\n    if (activityAttached) publishRuns(directEvents, execution.sessionId, jobs.list(), nativeRuns);\n  };\n  const publishCost = (force = false): void => {\n    costText = updateTeamCost(execution.client, jobs.list(), nativeRuns, childCosts, costText, activityAttached, force);\n  };\n  const unsubscribeCostTracker = runtime.asyncJobTracker.subscribe(execution.sessionId, () => {\n    publishCost();\n    publishRunSnapshot();\n  });\n  const unsubscribeCostNative = subscribeNativeRunProjection(execution.sessionId, (runs) => {\n    nativeRuns.clear();\n    for (const run of runs) nativeRuns.set(run.runId, run);\n    publishCost();\n    publishRunSnapshot();\n  });\n\n  // Three jobs the Pi facet gets from one `ExtensionAPI.sendMessage`, which a\n  // headless session has to do by hand:\n  //\n  //   toast      `client.notify` - operator-facing only. It writes a\n  //              `doom-notification` custom entry whose body is flattened to a\n  //              single line and capped at 4096 characters, and the model never\n  //              sees custom entries. So it gets a headline, not the result.\n  //   transcript `session.appendCustomEntry` - the durable record, under the\n  //              same custom type the TUI renderer uses, with the full\n  //              multi-line content and the structured details.\n  //   wake       `session.admitPrompt(content, 'steer')` - the only call that\n  //              puts the completion in front of the model. 'steer' means \"how\n  //              to deliver if a turn is running\"; an idle agent is woken\n  //              either way. `session.prompt(_, 'steer')` would NOT do this: it\n  //              is enqueue-only and parks the message on an idle lane.\n  //\n  // Serialised through one tail promise. Failures bypass the notifier's batcher\n  // (`services/notify`), so two runs failing in the same tick produce two\n  // deliveries; sequencing them keeps each one observing settled lane state.\n  let deliveries: Promise<void> = Promise.resolve();\n  runtime.completionNotifier.attachHost({\n    sendMessage: (message, options) => {\n      const details = message.details ?? [];\n      const headline = details.length > 0 ? formatCompletionHeadline(details) : message.content;\n      const failed = details.some((detail) => detail.status !== 'completed');\n      const delivery = deliveries.then(async () => {\n        await execution.client.notify({ body: headline, level: failed ? 'warning' : 'info' });\n        await execution.session.appendCustomEntry(SUBAGENT_NOTIFY_MESSAGE_TYPE, {\n          content: message.content,\n          details,\n        });\n        // `triggerTurn: false` has no faithful headless mapping: there is no\n        // way to put text in model context without starting or joining a turn\n        // (`appendCustomEntry` is journal-only). Keep today's behaviour - the\n        // operator sees it, the model does not wake - rather than guessing.\n        if (options?.triggerTurn === false) return;\n        // Matching the voice facet, which also refuses rather than degrading:\n        // `session.prompt(_, 'steer')` is NOT a fallback here, because it is\n        // enqueue-only and would park the completion on an idle lane - the\n        // original bug. Refusing surfaces as non-delivery, which keeps\n        // `ResultWatcher`'s claim alive for a retry.\n        if (!execution.session.admitPrompt) throw new Error('The session cannot admit a completion prompt.');\n        await execution.session.admitPrompt(message.content, 'steer');\n      });\n      // The notifier reports non-delivery on a rejection, which keeps\n      // `ResultWatcher`'s claim alive for a retry. The tail must not inherit\n      // that rejection, or one failed completion would poison every later one.\n      deliveries = delivery.catch(() => undefined);\n      return delivery;\n    },\n  });\n  const transport: NativeTeamTransport = {\n    sendMessage: ((message) =>\n      void execution.client.notify({\n        body:\n          typeof message.content === 'string'\n            ? message.content\n            : message.content.map((part) => ('text' in part ? part.text : '[image]')).join('\\n'),\n        level: 'info',\n      })) as NativeTeamTransport['sendMessage'],\n    sendUserMessage: ((message) =>\n      void execution.session.prompt(\n        typeof message === 'string'\n          ? message\n          : message.map((part) => ('text' in part ? part.text : '[image]')).join('\\n'),\n        'steer',\n      )) as NativeTeamTransport['sendUserMessage'],\n  };\n  const channel = runtime.teamChannel.createHeadlessRuntime(transport);\n  const serverService = (ctx: Context) => {\n    ctx.plugin((providerContext) => {\n      const availableModels = execution.model ? [toModelInfo(execution.model)] : [];\n      providerContext.provide(\n        DOOM_DELEGATION_SERVICE,\n        bridge.createService(providerContext, {\n          sessionId: execution.sessionId,\n          sessionScope: createSessionScope(execution.sessionId),\n          availableModels,\n          ...(execution.model ? { parentModel: execution.model } : {}),\n          // Read fresh per request, exactly as the Pi facet does at root.cli.ts.\n          // Omitting this is what made every headless `context: 'fork'`\n          // delegation report that the parent had no capturable branch.\n          captureForkSource: () => execution.session?.forkSource?.(),\n        }),\n      );\n      const backgroundWork = readDoomBackgroundWorkService(providerContext);\n      if (backgroundWork === undefined) throw new Error('Team requires the DoomPi Session foundation.');\n      registerDirectRunBackgroundWork(providerContext, backgroundWork, execution.sessionId, runtime.asyncJobTracker);\n      providerContext.provide(DOOM_SUBAGENT_POLICY_SERVICE, createSubagentPolicyService(runtime.capabilityPolicies));\n    });\n  };\n\n  const environment = serverHost.context.environment;\n  const activity: DoomHeadlessActivity = {\n    name: '@agimon-ai/doompi-team',\n    async start(activityContext) {\n      activityAttached = true;\n      publishCost(true);\n      publishRunSnapshot();\n      try {\n        const discovered = runtime.discovery.discover(execution.cwd, 'both').agents;\n        directEvents.publish(SUBAGENT_CATALOG_TYPE, execution.sessionId, {\n          cwd: execution.cwd,\n          agents: presentCatalog(discovered),\n          models: catalogModels(discovered, resolveActiveTeamModelSpecs(environment) ?? []),\n        });\n      } catch (error) {\n        directEvents.publish(SUBAGENT_CATALOG_TYPE, execution.sessionId, {\n          cwd: execution.cwd,\n          agents: [],\n          models: [],\n          warning: error instanceof Error ? error.message : String(error),\n        });\n      }\n      try {\n        const opened = await openScopeAsync(scope);\n        if (opened.suspended.length)\n          await activityContext.client.notify({ body: formatSuspendedRuns(opened.suspended), level: 'info' });\n        channel.bindMainSession(activityContext.sessionId);\n        return () => {\n          if (!activityAttached) return;\n          activityAttached = false;\n          channel.dispose();\n          execution.client.setStatus(TEAM_COST_STATUS, undefined);\n        };\n      } catch (error) {\n        activityAttached = false;\n        execution.client.setStatus(TEAM_COST_STATUS, undefined);\n        throw error;\n      }\n    },\n  };\n\n  return {\n    value: {\n      runtime,\n      execution,\n      scope,\n      jobs,\n      bridge,\n      channel,\n      directEvents,\n      environment: serverHost.context.environment,\n    },\n    services: [\n      (context: Context) => {\n        if (readDoomBackgroundWorkService(context) === undefined) provideBackgroundWorkService(context);\n      },\n      serverService,\n      mountMcpTools([createHeadlessIntercomTool(channel), createHeadlessSubagentTool(runtime, execution)]),\n    ],\n    activities: [activity],\n    // Mirrors `root.cli.ts`, which starts the scheduler in its own `onStart`.\n    // Without this the delegation bridge's progress subscription never ticks\n    // and `scheduler.wake()` is a no-op, so the pre-timeout nudge a long\n    // delegation gets in the TUI never fires headless. `onDispose` below\n    // already stops it; this is the missing half of that pair.\n    onStart() {\n      runtime.pollScheduler.start();\n    },\n    async onDispose() {\n      activityAttached = false;\n      execution.client.setStatus(TEAM_COST_STATUS, undefined);\n      channel.dispose();\n      runtime.completionNotifier.dispose();\n      const suspension = suspendScopeRuns({\n        scope,\n        reason: 'headless session ended',\n        jobs: jobs.list(),\n        stop: (runId, reason) => runtime.management.stop(runId, reason),\n      });\n      const nativeShutdown = runtime.nativeRuns.close().finally(() => nativeRunProjection.dispose(execution.sessionId));\n      const outcomes = await Promise.allSettled([suspension, nativeShutdown]);\n      for (const outcome of outcomes) {\n        if (outcome.status === 'rejected')\n          process.emitWarning(`Could not shut down headless Team runs: ${String(outcome.reason)}`);\n      }\n      unsubscribeCostTracker();\n      unsubscribeCostNative();\n      nativeRuns.clear();\n      childCosts.clear();\n      costText = undefined;\n      bridge.abandonAll();\n      runtime.dispose();\n      runtime.asyncJobTracker.stop();\n      runtime.pollScheduler.stop();\n    },\n  };\n});\n\nexport type TeamServerScope = Awaited<ReturnType<typeof root>>['value'];\nexport default root;\n","import { defineRoot } from '@agimon-ai/doompi-core/extensionFile';\n\nimport contribution from './_lib/root.server';\n\nexport default defineRoot(contribution);\n","import { defineChannel } from '@agimon-ai/doompi-core/extensionFile';\nimport type {\n  DoomHubChannelHost as HubChannelHost,\n  DoomHubChannelSource as HubChannelSource,\n  DoomHubSessionScope as HubSessionScope,\n  DoomHubChannel as WebHubChannel,\n} from '@agimon-ai/doompi-core/hubChannel';\n\nimport { SUBAGENT_CATALOG_TYPE, type SubagentCatalogPayload } from '../../../../types/webSubagents';\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isSubagentCatalogPayload(value: unknown): value is SubagentCatalogPayload {\n  return (\n    isRecord(value) &&\n    typeof value.cwd === 'string' &&\n    Array.isArray(value.agents) &&\n    Array.isArray(value.models) &&\n    value.models.every((model) => typeof model === 'string')\n  );\n}\n\n/**\n * The subagent catalog data channel consumes the session-owned catalog event.\n * The direct event bus retains a bounded latest snapshot for late subscribers.\n */\nexport function createSubagentCatalogChannel(): WebHubChannel {\n  return {\n    frameType: SUBAGENT_CATALOG_TYPE,\n    start(host: HubChannelHost) {\n      const scopes = new Map<string, HubSessionScope>();\n      const latest = new Map<string, SubagentCatalogPayload>();\n      const subscriptions = new Map<string, () => void>();\n      const publish = (scope: HubSessionScope, payload: SubagentCatalogPayload): void => {\n        if (scopes.get(scope.sessionId) !== scope || payload.cwd !== scope.cwd) return;\n        latest.set(scope.sessionId, payload);\n        host.publish(scope.sessionId, payload);\n      };\n      const source: HubChannelSource = {\n        payloadFor(scope) {\n          return scopes.has(scope.sessionId) ? latest.get(scope.sessionId) : undefined;\n        },\n        sessionAdded(scope) {\n          subscriptions.get(scope.sessionId)?.();\n          scopes.set(scope.sessionId, scope);\n          latest.delete(scope.sessionId);\n          const unsubscribe = host.directEvents.subscribe(\n            SUBAGENT_CATALOG_TYPE,\n            scope.sessionId,\n            (value) => {\n              if (isSubagentCatalogPayload(value)) publish(scope, value);\n            },\n            { replayLatest: true },\n          );\n          subscriptions.set(scope.sessionId, unsubscribe);\n        },\n        sessionRemoved(sessionId) {\n          subscriptions.get(sessionId)?.();\n          subscriptions.delete(sessionId);\n          scopes.delete(sessionId);\n          latest.delete(sessionId);\n        },\n        close() {\n          for (const unsubscribe of subscriptions.values()) unsubscribe();\n          subscriptions.clear();\n          scopes.clear();\n          latest.clear();\n        },\n      };\n      return source;\n    },\n  };\n}\n\nexport default defineChannel(createSubagentCatalogChannel);\n","import { defineChannel } from '@agimon-ai/doompi-core/extensionFile';\n\nimport contribution from './_lib/subagent-catalog';\n\nexport default defineChannel(contribution);\n","import { defineChannel } from '@agimon-ai/doompi-core/extensionFile';\nimport type {\n  DoomHubChannelSource as HubChannelSource,\n  DoomHubSessionScope,\n  DoomHubChannel as WebHubChannel,\n} from '@agimon-ai/doompi-core/hubChannel';\n\nimport { SUBAGENT_RUNS_TYPE, type SubagentRun } from '../../../../types/webSubagents';\n\nconst RUN_ID_PATTERN = /^[\\w.-]+$/;\n\ninterface SessionRunProjection extends SubagentRun {\n  /** Host-private child transcript path. Never published to the browser. */\n  sessionFile?: string;\n}\n\ntype SessionRunProjectionPayload = { runs: SessionRunProjection[] };\ntype SubagentRunsPayload = { runs: SubagentRun[] };\n\nfunction isSubagentRunsPayload(value: unknown): value is SessionRunProjectionPayload {\n  return typeof value === 'object' && value !== null && Array.isArray((value as { runs?: unknown }).runs);\n}\n\nfunction publicPayload(payload: SessionRunProjectionPayload): SubagentRunsPayload {\n  return { runs: payload.runs.map(({ sessionFile: _sessionFile, ...run }) => run) };\n}\n\n/**\n * The built-in subagents data channel consumes current state from the\n * host-owned direct event bus. Its bounded latest replay seeds late subscribers.\n */\nexport function createSubagentsChannel(): WebHubChannel {\n  return {\n    frameType: SUBAGENT_RUNS_TYPE,\n    start(host) {\n      const scopes = new Map<string, DoomHubSessionScope>();\n      const latest = new Map<string, SessionRunProjectionPayload>();\n      const subscriptions = new Map<string, () => void>();\n      const publish = (scope: DoomHubSessionScope, payload: SessionRunProjectionPayload): void => {\n        if (scopes.get(scope.sessionId) !== scope) return;\n        latest.set(scope.sessionId, payload);\n        host.publish(scope.sessionId, publicPayload(payload));\n      };\n      const source: HubChannelSource = {\n        payloadFor(scope) {\n          const payload = scopes.has(scope.sessionId) ? latest.get(scope.sessionId) : undefined;\n          return payload === undefined ? undefined : publicPayload(payload);\n        },\n        threadJournal(scope, runId) {\n          if (!RUN_ID_PATTERN.test(runId)) return undefined;\n          const projected = latest.get(scope.sessionId)?.runs.find((run) => run.runId === runId);\n          return projected?.sessionFile;\n        },\n        sessionAdded(scope) {\n          subscriptions.get(scope.sessionId)?.();\n          scopes.set(scope.sessionId, scope);\n          latest.delete(scope.sessionId);\n          const unsubscribe = host.directEvents.subscribe(\n            SUBAGENT_RUNS_TYPE,\n            scope.sessionId,\n            (value) => {\n              if (isSubagentRunsPayload(value)) publish(scope, value);\n            },\n            { replayLatest: true },\n          );\n          subscriptions.set(scope.sessionId, unsubscribe);\n        },\n        sessionRemoved(sessionId) {\n          subscriptions.get(sessionId)?.();\n          subscriptions.delete(sessionId);\n          scopes.delete(sessionId);\n          latest.delete(sessionId);\n        },\n        close() {\n          for (const unsubscribe of subscriptions.values()) unsubscribe();\n          subscriptions.clear();\n          scopes.clear();\n          latest.clear();\n        },\n      };\n      return source;\n    },\n  };\n}\n\nexport default defineChannel(createSubagentsChannel);\n","import { defineChannel } from '@agimon-ai/doompi-core/extensionFile';\n\nimport contribution from './_lib/subagent-runs';\n\nexport default defineChannel(contribution);\n","import type { WithRoot } from '@agimon-ai/doompi-core/extensionFile';\nimport type { DoomHeadlessExecutionContext } from '@agimon-ai/doompi-core/headless';\nimport type { DoomApi, DoomApiHandler } from '@agimon-ai/doompi-core/packageApi';\nimport type { DoomServerPluginContext } from '@agimon-ai/doompi-core/serverFacet';\n\nimport { AgentDiscoveryService, resolveActiveTeamModelSpecs } from '../../../../../../services/agentDiscovery';\nimport { loadConfig } from '../../../../../../services/config';\nimport { DoomTeamExpectedError } from '../../../../../../services/errors';\nimport type { ControlActionResult, SteerActionResult } from '../../../../../../services/managementActions';\nimport { toModelInfo } from '../../../../../../services/modelInfo';\nimport { createSessionScope } from '../../../../../../services/sessionPaths';\nimport type { TeamExtensionRuntime } from '../../../../../../services/teamRuntime';\nimport { catalogModels, presentCatalog, type CatalogAgentInput } from '../../../../../../services/webSubagentCatalog';\nimport type { TeamServerScope } from '../../_lib/root.server';\n\nexport const TEAM_API_BASE_PATH = 'team';\nexport const TEAM_CATALOG_ROUTE = '/catalog';\nexport const TEAM_RUN_ROUTE = '/run';\nexport const TEAM_STEER_ROUTE = '/steer';\nexport const TEAM_STOP_ROUTE = '/stop';\n\nexport interface TeamRunRequest {\n  agent: string;\n  task: string;\n  fork: boolean;\n  model?: string;\n}\n\nexport interface TeamSteerRequest {\n  runId: string;\n  message: string;\n}\n\nexport interface TeamStopRequest {\n  runId: string;\n}\n\nexport interface TeamCatalogSnapshot {\n  agents: CatalogAgentInput[];\n  models: string[];\n}\n\nexport interface TeamApiOptions {\n  cwd: string;\n  environment?: Readonly<NodeJS.ProcessEnv>;\n  read?: (cwd: string) => TeamCatalogSnapshot;\n  launch?: (request: TeamRunRequest) => Promise<{ runId: string }>;\n  steer?: (request: TeamSteerRequest, signal: AbortSignal) => Promise<SteerActionResult>;\n  stop?: (request: TeamStopRequest) => Promise<ControlActionResult>;\n}\n\nfunction isRunRequest(value: unknown): value is TeamRunRequest {\n  if (typeof value !== 'object' || value === null || Array.isArray(value)) return false;\n  const request = value as Record<string, unknown>;\n  return (\n    typeof request.agent === 'string' &&\n    request.agent.trim() !== '' &&\n    typeof request.task === 'string' &&\n    typeof request.fork === 'boolean' &&\n    (request.model === undefined || (typeof request.model === 'string' && request.model.trim() !== '')) &&\n    Object.keys(request).every((key) => ['agent', 'task', 'fork', 'model'].includes(key))\n  );\n}\n\nfunction isSteerRequest(value: unknown): value is TeamSteerRequest {\n  if (typeof value !== 'object' || value === null || Array.isArray(value)) return false;\n  const request = value as Record<string, unknown>;\n  return (\n    typeof request.runId === 'string' &&\n    request.runId.trim() !== '' &&\n    typeof request.message === 'string' &&\n    request.message.trim() !== '' &&\n    Object.keys(request).every((key) => ['runId', 'message'].includes(key))\n  );\n}\n\nfunction isStopRequest(value: unknown): value is TeamStopRequest {\n  if (typeof value !== 'object' || value === null || Array.isArray(value)) return false;\n  const request = value as Record<string, unknown>;\n  return (\n    typeof request.runId === 'string' &&\n    request.runId.trim() !== '' &&\n    Object.keys(request).every((key) => key === 'runId')\n  );\n}\n\n/** The typed error's text carries a recovery hint written for the model, so a missing run gets a sentence for people. */\nfunction controlFailure(error: unknown): Response {\n  if (error instanceof DoomTeamExpectedError && error.code === 'run_not_found')\n    return Response.json({ error: 'This run is not active.' }, { status: 404 });\n  return Response.json({ error: error instanceof Error ? error.message : String(error) }, { status: 409 });\n}\n\n/** Serves catalog discovery, run launch, and run steer and stop from the selected session process, never through a parent prompt. */\nexport function createTeamApiHandler(options: TeamApiOptions): DoomApiHandler {\n  const discovery = new AgentDiscoveryService(options.environment);\n  const read =\n    options.read ??\n    ((cwd: string): TeamCatalogSnapshot => ({\n      agents: discovery.discover(cwd, 'both').agents,\n      models: resolveActiveTeamModelSpecs(options.environment) ?? [],\n    }));\n\n  return {\n    async fetch(request) {\n      const url = new URL(request.url);\n      if (request.method === 'POST' && url.pathname === TEAM_RUN_ROUTE && options.launch) {\n        let input: unknown;\n        try {\n          input = await request.json();\n        } catch {\n          return Response.json({ error: 'Invalid run request.' }, { status: 400 });\n        }\n        if (!isRunRequest(input)) return Response.json({ error: 'Invalid run request.' }, { status: 400 });\n        try {\n          return Response.json(await options.launch(input), { status: 201 });\n        } catch (error) {\n          return Response.json({ error: error instanceof Error ? error.message : String(error) }, { status: 409 });\n        }\n      }\n      if (request.method === 'POST' && url.pathname === TEAM_STEER_ROUTE && options.steer) {\n        let input: unknown;\n        try {\n          input = await request.json();\n        } catch {\n          return Response.json({ error: 'Invalid steer request.' }, { status: 400 });\n        }\n        if (!isSteerRequest(input)) return Response.json({ error: 'Invalid steer request.' }, { status: 400 });\n        try {\n          return Response.json(\n            await options.steer({ runId: input.runId.trim(), message: input.message.trim() }, request.signal),\n          );\n        } catch (error) {\n          return controlFailure(error);\n        }\n      }\n      if (request.method === 'POST' && url.pathname === TEAM_STOP_ROUTE && options.stop) {\n        let input: unknown;\n        try {\n          input = await request.json();\n        } catch {\n          return Response.json({ error: 'Invalid stop request.' }, { status: 400 });\n        }\n        if (!isStopRequest(input)) return Response.json({ error: 'Invalid stop request.' }, { status: 400 });\n        try {\n          return Response.json(await options.stop({ runId: input.runId.trim() }));\n        } catch (error) {\n          return controlFailure(error);\n        }\n      }\n      if (request.method !== 'GET' || url.pathname !== TEAM_CATALOG_ROUTE) {\n        return Response.json({ error: 'Not found.' }, { status: 404 });\n      }\n      try {\n        discovery.invalidate();\n        const snapshot = read(options.cwd);\n        return Response.json({\n          cwd: options.cwd,\n          agents: presentCatalog(snapshot.agents),\n          models: catalogModels(snapshot.agents, snapshot.models),\n        });\n      } catch (error) {\n        const message = error instanceof Error ? error.message : String(error);\n        return Response.json({ error: message }, { status: 500 });\n      }\n    },\n    close: () => undefined,\n  };\n}\n\n/** One mounted session API, backed by the Team runtime that owns the subagent tool. */\nexport function createTeamSessionApi(runtime: TeamExtensionRuntime, execution: DoomHeadlessExecutionContext): DoomApi {\n  const scope = createSessionScope(execution.sessionId);\n  const jobs = runtime.asyncJobTracker.forSession(execution.sessionId, scope);\n\n  const launch = async (request: TeamRunRequest): Promise<{ runId: string }> => {\n    const parentForkSource = request.fork ? await execution.session.forkSource?.() : undefined;\n    if (request.fork && !parentForkSource) throw new Error('This session cannot capture a fork source.');\n    const plan = await runtime.spawnPlanner.spawn(\n      {\n        single: {\n          agent: request.agent.trim(),\n          task: request.task.trim(),\n          context: request.fork ? 'fork' : 'fresh',\n          ...(request.model ? { model: request.model } : {}),\n        },\n        cwd: execution.cwd,\n        agentScope: 'both',\n        sessionScope: scope,\n        environment: execution.environment,\n        parentSessionId: execution.sessionId,\n        ...(parentForkSource ? { parentForkSource } : {}),\n        availableModels: execution.model ? [toModelInfo(execution.model)] : [],\n        ...(execution.model ? { parentModel: execution.model } : {}),\n      },\n      loadConfig().config,\n    );\n    const outcome = plan.outcomes[0];\n    if (!outcome?.runId) throw new Error(outcome?.error ?? 'The agent did not start.');\n    jobs.track(\n      outcome.runId,\n      outcome.identity ? { identity: outcome.identity, inline: outcome.inline ?? false } : undefined,\n    );\n    return { runId: outcome.runId };\n  };\n\n  return {\n    basePath: TEAM_API_BASE_PATH,\n    start: () =>\n      createTeamApiHandler({\n        cwd: execution.cwd,\n        environment: execution.environment,\n        launch,\n        steer: (request, signal) => runtime.management.steer(request.runId, request.message, undefined, signal),\n        stop: (request) => runtime.management.stop(request.runId),\n      }),\n  };\n}\n\nexport default (context: WithRoot<DoomServerPluginContext, TeamServerScope>) =>\n  createTeamSessionApi(context.root.runtime, context.root.execution);\n","import { defineRoute } from '@agimon-ai/doompi-core/extensionFile';\n\nimport contribution from './_lib/route.server';\n\nexport default defineRoute(contribution);\n","import type { WithRoot } from '@agimon-ai/doompi-core/extensionFile';\nimport type { DoomServerPluginContext } from '@agimon-ai/doompi-core/serverFacet';\n\nimport { formatTeamContextSnapshot, readActiveTeamSnapshot } from '../../../../../../services/teamSnapshot';\nimport type { TeamServerScope } from '../../_lib/root.server';\n\n/**\n * The roster the model is allowed to see.\n *\n * Reads the public snapshot rather than `channel.current()`: the latter is the raw\n * `TeamMemberContext`, whose `token` is a session capability documented as never\n * leaving the direct context. A context resource is pasted into the system prompt,\n * sent to the provider and persisted, so the raw struct must not be serialized here.\n * `formatTeamContextSnapshot` is the same projection the Pi facet renders.\n */\nexport default (context: WithRoot<DoomServerPluginContext, TeamServerScope>) => ({\n  name: 'doompi/team',\n  kind: 'context' as const,\n  // A roster of nobody says nothing; '' is dropped from the prompt by composeSystemPrompt.\n  read: () => {\n    const rendered = formatTeamContextSnapshot(readActiveTeamSnapshot(context.root.channel));\n    return rendered === undefined || rendered === '(no active team members)' ? '' : rendered;\n  },\n});\n","import { defineResource } from '@agimon-ai/doompi-core/extensionFile';\n\nimport contribution from './_lib/team.server';\n\nexport default defineResource(contribution);\n","import { defineServerTool, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\nimport type { DoomServerPluginContext } from '@agimon-ai/doompi-core/serverFacet';\n\nimport { createHeadlessIntercomTool } from '../../../../../services/headlessIntercomTool';\nimport type { TeamServerScope } from '../_lib/root.server';\n\nexport default defineServerTool((context: WithRoot<DoomServerPluginContext, TeamServerScope>) =>\n  createHeadlessIntercomTool(context.root.channel),\n);\n","import { defineServerTool, type WithRoot } from '@agimon-ai/doompi-core/extensionFile';\nimport type { DoomServerPluginContext } from '@agimon-ai/doompi-core/serverFacet';\n\nimport { createHeadlessSubagentTool } from '../../../../../services/headlessSubagentTool';\nimport type { TeamServerScope } from '../_lib/root.server';\n\nexport default defineServerTool((context: WithRoot<DoomServerPluginContext, TeamServerScope>) =>\n  createHeadlessSubagentTool(context.root.runtime, context.root.execution),\n);\n","// Generated by @agimon-ai/doompi-build. Do not edit by hand.\nimport { defineServerPlugin, type DoomServerSessionPlugin } from '@agimon-ai/doompi-core/serverFacet';\nimport { composeRootHooks } from '@agimon-ai/doompi-core/extensionFile';\n\nimport rootSession from '../src/extensions/workspaces/sessions/(backend)/root.server';\nimport channelSubagentCatalog from '../src/extensions/(backend)/channel/subagent-catalog.server';\nimport channelSubagentRuns from '../src/extensions/(backend)/channel/subagent-runs.server';\nimport apiRoute from '../src/extensions/workspaces/sessions/(backend)/api/route.server';\nimport resourceTeam from '../src/extensions/workspaces/sessions/(backend)/resource/team.server';\nimport toolIntercom from '../src/extensions/workspaces/sessions/(backend)/tool/intercom.server';\nimport toolSubagent from '../src/extensions/workspaces/sessions/(backend)/tool/subagent.server';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n  typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n  (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const facet = defineServerPlugin({\n  name: '@agimon-ai/doompi-team',\n  global: () => ({\n    get channels(): DoomServerSessionPlugin['channels'] { return [() => via({ frameType: 'subagent_catalog' }, channelSubagentCatalog()), () => via({ frameType: 'subagent_runs' }, channelSubagentRuns())]; },\n  }),\n  workspace: () => ({\n    get channels(): DoomServerSessionPlugin['channels'] { return [() => via({ frameType: 'subagent_catalog' }, channelSubagentCatalog()), () => via({ frameType: 'subagent_runs' }, channelSubagentRuns())]; },\n  }),\n  session: async (context) => {\n    const scopeSession = await rootSession(context);\n    const contextSession = { ...context, root: scopeSession.value };\n    return {\n      ...composeRootHooks(scopeSession),\n      get api(): DoomServerSessionPlugin['api'] { return [at(apiRoute, contextSession)]; },\n      get channels(): DoomServerSessionPlugin['channels'] { return [() => via({ frameType: 'subagent_catalog' }, channelSubagentCatalog()), () => via({ frameType: 'subagent_runs' }, channelSubagentRuns())]; },\n      get resources(): DoomServerSessionPlugin['resources'] { return [at(resourceTeam, contextSession)]; },\n      get tools(): DoomServerSessionPlugin['tools'] { return [via({ name: 'intercom' }, at(toolIntercom, contextSession)), via({ name: 'subagent' }, at(toolSubagent, contextSession))]; },\n      services: [...(scopeSession.services ?? [])],\n      get activities(): DoomServerSessionPlugin['activities'] { return [...(scopeSession.activities ?? [])]; },\n    };\n  },\n});\n\nexport default facet;\n"],"mappings":"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"}