/**
 * @module        services/CardService
 * @description   卡片 CRUD + 状态流转 service
 *
 * @layer         services
 *
 * 职责：
 *   - list / get（结构化 CardSummary + CardDetail）
 *   - create（通过 TaskBackend.create）
 *   - update（title / description / skills / labels 按需）
 *   - move（state transitions）
 *   - delete（物理删 md 文件）
 *   - reset（清理 frontmatter 运行字段 + 移回初始态）
 *
 * 不负责：
 *   - worker 派发（是 WorkerService 职责）
 *   - checklist 写入（Phase 2 暂不做；Phase 3 追加）
 */
import type { Clock } from '../infra/clock.js';
import type { DomainEventBus } from '../shared/domainEvents.js';
import { type Result } from '../shared/result.js';
import type { ChecklistStats } from '../shared/types.js';
import type { TaskBackendFactory } from './ports.js';
export interface CardSummary {
    readonly seq: number;
    readonly title: string;
    readonly state: string;
    readonly skills: string[];
    readonly labels: string[];
    readonly branch: string | null;
    readonly createdAt: string | null;
    readonly updatedAt: string | null;
    /** 检查清单进度摘要（Kanban 卡片用）—— 无 checklist 的卡片该字段也存在，total=0 */
    readonly checklist: ChecklistStats;
}
export interface CardDetail extends CardSummary {
    readonly body: string;
    readonly checklist: ChecklistStats;
    readonly activeWorkerSlot: number | null;
}
export interface CreateCardInput {
    title: string;
    description?: string;
    skills?: string[];
    /** 初始 labels —— 例如 `['AI-PIPELINE']` 让卡走流水线，空数组/缺省则不走 */
    labels?: string[];
    initialState?: string;
}
export interface UpdateCardPatch {
    title?: string;
    description?: string;
    skills?: string[];
    labels?: string[];
    state?: string;
}
export interface ListCardsFilter {
    state?: string;
}
export interface CardServiceDeps {
    readonly backendFactory: TaskBackendFactory;
    readonly events: DomainEventBus;
    readonly clock: Clock;
}
export declare class CardService {
    private readonly deps;
    constructor(deps: CardServiceDeps);
    /** 列出卡片（可选 state 过滤）。按 seq 倒序（新卡在前）。 */
    list(project: string, filter?: ListCardsFilter): Promise<Result<CardSummary[]>>;
    /** 获取单卡详情（含 body + checklist）。 */
    get(project: string, seq: number): Promise<Result<CardDetail>>;
    /** 新建卡片。state 缺省 'Planning'。 */
    create(project: string, input: CreateCardInput): Promise<Result<CardSummary>>;
    /**
     * 更新卡片 —— 任意字段子集。
     * 字段相互独立应用，最后 emit 单次 card.updated + 如 state 变则额外 card.moved。
     */
    update(project: string, seq: number, patch: UpdateCardPatch): Promise<Result<CardSummary>>;
    /** 仅状态变更（无其它字段）。等价于 update({state}) 但更语义化。 */
    move(project: string, seq: number, newState: string): Promise<Result<CardSummary>>;
    /** 删除卡片。Inprogress 拒绝（前置条件） */
    delete(project: string, seq: number): Promise<Result<void>>;
    /**
     * 重置卡片 —— 清 frontmatter 运行字段（claimed_by / claimed_at / retry_count）
     * 同时清掉系统 labels（`AI-PIPELINE`、`STARTED-<stage>`、`COMPLETED-<stage>`、`NEEDS-FIX`）
     * 并移回初始态（Planning）。调用方负责先 kill 对应 worker。
     */
    reset(project: string, seq: number): Promise<Result<CardSummary>>;
    private backendOr404;
}
//# sourceMappingURL=CardService.d.ts.map