import { type DipclawConfig } from "../config/types.js";
export interface OrgTask {
    id: string;
    instruction: string;
    assignedBy: string;
    assignedAt: string;
    status: "pending" | "running" | "completed" | "failed";
    result?: string;
    targetDepartment?: string;
}
export interface AgentStatus {
    name: string;
    role: "boss" | "worker";
    department: string;
    lastSeen: string;
    status: "idle" | "busy";
}
/**
 * 组织管理器 (OrgManager)
 * 负责处理跨 Agent 的通信、任务派发、状态汇报。
 * 它采用“信箱模式”(Mailbox Pattern)，通过在共享目录读写 JSON 文件实现解耦和高可靠的通信。
 */
export declare class OrgManager {
    private config;
    private heartbeatInterval;
    constructor(config: DipclawConfig);
    /** Get the primary department for this agent (used for registry/inbox) */
    getPrimaryDepartment(): string;
    /** Get all departments this agent can manage/view */
    getManagedDepartments(): string[];
    /**
     * 初始化组织环境
     * - 如果尚未注册，会在 registry 目录下创建该 Agent 的心跳文件。
     * - 如果是员工，会为其建立专属的收件箱文件夹。
     * - 启动定时器，定期更新自己的心跳状态（在线时间、忙闲状态），并清理过期历史任务。
     */
    init(): Promise<void>;
    /**
     * 定期清理和归档逻辑
     * 1. 将收件箱里超过 24 小时的已完成/已失败任务转移到历史库 (history) 目录。
     * 2. 将卡在 running 状态超过 24 小时的死锁任务强行标记为 failed（防止 Agent 崩溃导致的僵尸任务）。
     * 3. 删除历史库中存放超过 7 天的文件，释放磁盘空间。
     */
    private cleanup;
    private updateStatus;
    setStatus(status: "idle" | "busy"): void;
    /**
     * 获取团队名单 (仅老板常用)
     * 老板会扫描自己所管辖的部门注册表，读取所有员工的心跳文件。
     */
    listTeam(): AgentStatus[];
    /**
     * 指派任务 (核心方法)
     * @param target 目标员工名称，可以带前缀如 "dept:推广部"，或者填 "all" 广播全员。
     * @param instruction 具体的操作指令文本。
     * @returns 分发成功的任务 ID 列表。
     */
    assignTask(target: string, instruction: string): string[];
    /**
     * 轮询查收新任务 (仅员工常用)
     * 员工读取自己收件箱下的所有 JSON 文件，筛选出状态为 pending 的任务。
     */
    pollTasks(): OrgTask[];
    /**
     * 更新任务状态与回传结果
     * 员工在接单、完成、报错时，都会调用此方法覆盖修改收件箱里的同一个 JSON 文件。
     */
    updateTask(taskId: string, status: OrgTask["status"], result?: string): void;
    stop(): void;
}
