/** * OpenCode 2.x 定义转换 * * cohub 内部用 v1 的配置词汇描述代理与权限(`mode` / `prompt` / `permission: { tool: 'deny' }`), * 而 v2 换成了另一套: * * | v1 | v2 | * |-----------------------------|-------------------------------------------| * | `prompt: string` | `system?: string` | * | `model: 'prov/variant'` | `model: { providerID, id, variant }` | * | `permission: { t: 'deny' }` | `permissions: [{ action, resource, effect }]` | * | `temperature: 0.1` | `request.body.temperature` | * * 这里只做单向转换(v1 → v2),保留 cohub 既有的配置表达能力,不引入第二套配置格式。 */ /** v1 的权限映射:工具名 → 效果 */ export type V1Permission = Record; /** v2 的权限条目 */ export interface V2PermissionRule { action: string; resource: string; effect: 'allow' | 'deny' | 'ask'; } /** v2 的模型引用 */ export interface V2ModelRef { providerID: string; id: string; variant?: string; } /** * 把 v1 的 `'provider/model'` 字符串解析成 v2 的模型引用。 * * v1 里模型有两种写法:`'provider/model'` 和单独的 `'model'`(继承默认 provider)。 * 后者在 v2 无法表达 provider,返回 undefined 让调用方保留 v2 已有的默认值。 */ export declare function toV2Model(model: unknown): V2ModelRef | undefined; /** * v1 的 `permission: { tool: 'deny' }` → v2 的规则数组。 * * v2 用 `action` 表达被判定的动作类别,用 `resource` 表达具体资源。 * cohub 目前只按工具粒度授权,因此 `action` 取工具名、`resource` 取 `'*'`。 * `'ask'` 在 v2 里仍是合法效果(交给宿主的交互门),原样保留。 */ export declare function toV2Permissions(permission: unknown): V2PermissionRule[]; /** cohub 代理定义在转换时需要保留的字段 */ export interface V1AgentLike { name: string; description?: string; /** 嵌套形态(工厂内部的 agents 数组用这个) */ config?: Record; /** 扁平形态(工厂返回的 `agent` 记录把 config 直接摊平在顶层) */ [key: string]: unknown; } /** * 取出代理定义里的配置字段。 * * 工厂内部两种形态并存,必须都支持: * - `agents` 数组:`{ name, config: { mode, prompt, ... } }` * - `hooks.agent` 记录:`{ name, mode, prompt, permission, ... }`(config 已摊平) */ export declare function resolveConfig(agent: V1AgentLike): Record; /** * 把 cohub 的 v1 代理定义套用到 v2 的 `Agent.Info` 上。 * * 采用"修改现有对象"的写法而不是返回新对象,因为 v2 的 `AgentEditor.update` * 给的是一个可变代理对象,语义就是就地改写。 * * 注意:**不写 `id`**。v2 的 `update(id, fn)` 已经按 id 定位, * 而 id 是带 brand 的类型,覆写会破坏宿主内部一致性。 * * variant 原样下发:若宿主目录里没有该 variant,由入口层提前把它补进 catalog, * 而不是在这里剔除(见 `v2/index.ts` 的补齐逻辑)。 */ export declare function applyAgentDefinition(target: Record, agent: V1AgentLike): void; /** zod 兼容层:只需要 `object()`,由调用方注入(见 `v2/index.ts` 的 `tool.schema`) */ export interface ZodLike { object: (shape: Record) => unknown; } /** 注入 zod 实现;不注入时工具参数原样下传(仅在无工具的纯代理场景安全) */ export declare function setZod(zod: ZodLike): void; /** * 把 zod 的 `ZodRawShape` 包成 v2 `Tool.Info.input` 需要的单值 schema。 * * v1 的 `tool({ args: shape })` 收的是字段表,v2 的 `tool.add({ input })` 要的是 * 完整 schema。zod 4 的实例满足 StandardSchemaV1,包一层 `object()` 即可直接交给 v2, * 无需再转 JSON Schema。 */ export declare function wrapToolInput(shape: unknown): unknown; //# sourceMappingURL=adapt.d.ts.map