UNPKG

@sema-agent/core

Version:

Stateless, task-oriented AI agent core

37 lines (36 loc) • 2.68 kB
import { type BackgroundAgentStore } from "../background-agent-store.js"; import { type ContractAssertionRunner } from "./contract-harness.js"; /** * design/159 — the cross-backend {@link BackgroundAgentStore} contract kit (vitest-free; see * `contract-harness.ts` for the runner seam and `contract-kit-version.ts` for version lockstep). * `make()` must return a FRESH, empty store each call; a store a case creates is closed (`close?.()`) * when the case ends, so a backend holding a file descriptor does not leak one per case. * * 为什么这个家族需要一份共跑资产:这个 store 的两个捆绑后端是逐方法手写的孪生实现,而本仓在它上面 * 已经连续吃过四次「一份修了、另一份没修」——RB-60 / RB-74 / RB-87 / RB-111,其中 RB-87 与 RB-111 * 是同一个 reap 重复计数缺陷在两个后端里分别被发现、相隔一个版本。REF-A3/REF-D18 之后共享形状收敛 * 到了单一构造点,但**语义**仍然只由每个后端各自的测试看住;第三方后端更是完全在射程之外。这份 * 试剂盒把语义变成全后端共跑的验收底线:任何后端在这里变红 = 该后端违约,**不许通过放宽契约让它 * 变绿**。 * * 断言只描述已落地的行为(权威文本 = `src/core/background-agent-store.ts` 的接口契约段),不引入 * 任何新义务。 * * 分层: * - 核心层 {@link backgroundAgentStoreContract}:每个后端都必须过。 * - 可选能力层 {@link backgroundAgentStoreScopesContract}:只挂实现了可选方法 `listScopes` 的后端 * (接口把它标为可选——把它折进核心层就会变成「没实现的后端静默跳过」,而静默跳过正是假绿的 * 来源)。两个捆绑后端都实现了它,都挂。 */ /** 契约统一用的租户 scope(核心层的多租户用例会另外显式构造第二个)。 */ export declare const BACKGROUND_AGENT_CONTRACT_SCOPE = "tenant-A"; /** * 核心不变量层 —— 每个 {@link BackgroundAgentStore} 后端都必须过。 */ export declare function backgroundAgentStoreContract(mk: () => BackgroundAgentStore, runAssertion?: ContractAssertionRunner): Promise<void>; /** * 可选能力层 —— 只挂实现了 {@link BackgroundAgentStore.listScopes} 的后端。接口把该方法标为可选 * (一个把租户清单记在别处的部署可以省略它),所以它不能进核心层:核心层里的「没实现就跳过」等于 * 给不合规后端发一张假绿通行证。两个捆绑后端都实现了它。 */ export declare function backgroundAgentStoreScopesContract(mk: () => BackgroundAgentStore, runAssertion?: ContractAssertionRunner): Promise<void>;