import type { TeamshareApi } from '../lib/api'; /** Session drivers accepted by the CLI/daemon (`openrouter` = headless loop). */ export type CliHarness = 'auto' | 'opencode' | 'claude' | 'codex' | 'gemini' | 'antigravity' | 'copilot' | 'goose' | 'openhands' | 'aider' | 'openrouter' | 'none'; /** Phase D agent settings snapshot. */ export interface AgentSettings { model?: string; temperature?: number; maxTokens?: number; reasoningEffort?: string; systemPrompt?: string | null; userId?: string | null; harness?: CliHarness | null; providerKey?: string | null; /** Per-provider BYOK keys (provider slug -> plaintext key; agent-key auth only). */ providerKeys?: Record | null; /** Default working folder (per-agent linked folder). */ folderPath?: string | null; } /** Best-effort fetch of the agent's stored settings. */ export declare function fetchAgentSettings(api: TeamshareApi, agentId: string, log: LogFn): Promise; /** * Resolve the agent's API key: --key flag > secret store (via --agent). * Daemon spawns no longer pass --key — the CLI resolves it itself from the * secret store (OS keyring / encrypted file). --key is a standalone-CLI-only * override for manual runs. */ export declare function resolveApiKey(flags: Map): string; export type LogFn = (text: string, level?: 'stdout' | 'stderr') => void; /** Console + live-stream logger. */ /** Minimal write interface shared by SessionStream and DaemonReporter. */ interface StreamWriter { line(text: string, stream?: 'stdout' | 'stderr'): void; } export declare function makeLog(stream: StreamWriter | null): LogFn; /** Session driver resolution: flag > agent setting > local config > auto. */ export declare function harnessOf(flags: Map, agent?: AgentSettings): CliHarness; /** * Route a self-loop harness (`openrouter`) into `--self` mode. OpenRouter is * an API gateway: there is no adapter binary to spawn, so the command runs the * built-in headless LLM loop instead. Returns the effective selfMode and logs * the routing decision once (plus a model warning when the model spec cannot * be sent to the gateway). */ export declare function routeSelfModeHarness(harness: string, selfMode: boolean, log: LogFn, model?: { spec: string; harnessOnly?: boolean; }): boolean; /** * API key for a self-mode (`--self` / openrouter harness) session. * * Precedence for `openrouter`: the agent's per-provider key > OPENROUTER_API_KEY * env > the agent's BYOK provider key - exactly the sources the error message * names (the bridge-GLOBAL key is deliberately not accepted: it is not "set on * the agent" and may belong to another provider). When nothing resolves, the * call FAILS FAST with the OpenRouter-specific message, before any API request * is attempted. Non-openrouter harnesses keep `sessionLlmApiKey` behavior. */ export declare function selfModeLlmApiKey(harness: string, agent: AgentSettings | undefined, log: LogFn): string; /** LLM provider key for self-loop / chat / doc sessions. */ export declare function sessionLlmApiKey(agent?: AgentSettings): string; /** Provider creds for model-written run reports (null when no key set). */ export declare function reportLlmOf(flags: Map, agent?: AgentSettings): { baseUrl: string; apiKey: string; model: string; } | null; /** Phase D settings resolution: CLI flag > agent settings > env > default. */ export declare function modelOf(flags: Map, agent?: AgentSettings, overrideModel?: string | null): string; /** Model spec -> { baseUrl, model } via the catalog. */ export declare function llmEndpoint(flags: Map, agent?: AgentSettings, overrideModel?: string | null): { baseUrl: string; model: string; harnessOnly: boolean; }; /** * Endpoint for a self-mode (`--self` / openrouter harness) session. On top of * `llmEndpoint`, it logs the model resolution for gateway harnesses: a model * spec that resolves AWAY from openrouter.ai means the harness selection and * the `provider:model` prefix disagree - the run would silently call another * provider with an OpenRouter key. */ export declare function selfLlmEndpoint(flags: Map, agent: AgentSettings | undefined, harness: string, log: LogFn, overrideModel?: string | null): { baseUrl: string; model: string; harnessOnly: boolean; }; /** Applies the LLM provider key for harness runs. */ export declare function applyOpenCodeKey(agentId: string, log: LogFn, settings?: AgentSettings): void; /** Harness kill-switch: max minutes a child may run. */ export declare function sessionTimeoutMin(flags: Map): number; export declare function temperatureOf(flags: Map, agent?: AgentSettings): number | undefined; export declare function maxTokensOf(flags: Map, agent?: AgentSettings): number | undefined; /** Reasoning effort resolution: CLI flag > agent settings > default "medium". */ export declare function effortOf(flags: Map, agent?: AgentSettings): string | undefined; /** Default effort for harnesses that support it when none is set. */ export declare function defaultEffort(harness: string): string | undefined; export declare function systemPromptOf(flags: Map, agent?: AgentSettings): string | null; export declare function need(flags: Map, name: string): string; export {};