/**
 * AgentFactory — universal wiring of OODA agents from AgentFactoryConfig.
 *
 * Promoted from forge/src/agents/shared/agent-factory.ts (Vague 1.B.2).
 * Forge-specific business logic (Slack/Telegram HITL channels, buildRevenueSkills,
 * etc.) is NOT promoted — only the generic wiring pattern.
 *
 * Neutralized Forge couplings:
 * - HITL channels injected via deps.messaging (not hardcoded Telegram bot tokens)
 * - "FORGE.md" hardcoded string → parameterizable via loadAgentContext options
 * - Forge-specific metrics not promoted — consumers add via optional peer dep
 *
 * @public @since 0.17.0
 */
import type { OODAAgent, OODAAgentConfig, SessionGuard, RiskGuard, OutcomeRecord } from "../orchestration/ooda/types.js";
import type { AgentDependencies } from "../types/agent.js";
import type { AgentRegistryPort, AgentDescriptor } from "../ports/agent-registry.js";
import type { MessagingChannelPort } from "../ports/messaging.js";
/**
 * AgentDependencies extended with optional fields used by the factory.
 * Consumers may pass registry and messaging via this extension.
 *
 * @public
 */
export interface AgentFactoryDeps extends AgentDependencies {
    /** Optional AgentRegistryPort for auto-registration at boot. */
    readonly registry?: AgentRegistryPort;
    /** Optional messaging channel for HITL notifications. */
    readonly messaging?: MessagingChannelPort;
}
/**
 * Generic factory configuration. Type parameters chain OODA phase I/O.
 *
 * @public
 */
export interface AgentFactoryConfig<TConfig = unknown, TObs = unknown, TOrient = unknown, TDecision = unknown, TAction = unknown, TFeedback = unknown> {
    /** Agent identifier (e.g. "forge-revenue", "cc-sentinel"). */
    agentId: string;
    /** Agent semver string. */
    agentVersion: string;
    /** Cycle interval in milliseconds. */
    intervalMs: number;
    /** Default config merged with deps at boot. */
    defaults?: TConfig;
    /** OODA phase definitions. */
    phases: OODAAgentConfig<TConfig, TObs, TOrient, TDecision, TAction, TFeedback>["phases"];
    /** Session guards (defaults to [alwaysOn()]). */
    sessionGuards?: SessionGuard[];
    /** Risk guards. */
    riskGuards?: RiskGuard[];
    /** Outcome mapping: feedback → outcome record (null skips recording). */
    outcomeMapping?: (feedback: TFeedback) => OutcomeRecord | null;
    /** HITL escalation level for actions requiring human review. */
    hitlEscalationLevel?: "L1" | "L2" | "L3";
    /**
     * Registry descriptor for auto-registration in AgentRegistryPort.
     * When provided AND deps.registry is set, the agent registers itself on boot.
     */
    registryDescriptor?: Omit<AgentDescriptor, "id"> & {
        product: string;
    };
}
/**
 * Create an OODAAgent from a generic config + dependency bundle.
 *
 * Handles:
 * - Strict deps validation (SDK_STRICT_DEPS gate via createOODAAgent)
 * - Auto-registration in AgentRegistryPort when deps.registry is set
 * - HITL wiring via MessagingChannelPort (not Forge-specific Slack/Telegram)
 * - Resource limits with production-safe defaults
 *
 * @example
 * ```ts
 * const agent = await createAgentFromConfig(deps, {
 *   agentId: "my-agent",
 *   agentVersion: "1.0.0",
 *   intervalMs: 60_000,
 *   phases: { observe, orient, decide, act, feedback },
 * });
 * await agent.start();
 * ```
 *
 * @public
 */
export declare function createAgentFromConfig<TConfig = unknown, TObs = unknown, TOrient = unknown, TDecision = unknown, TAction = unknown, TFeedback = unknown>(deps: AgentFactoryDeps, config: AgentFactoryConfig<TConfig, TObs, TOrient, TDecision, TAction, TFeedback>): Promise<OODAAgent>;
//# sourceMappingURL=agent-factory.d.ts.map