/** * Agent 协议配置的类型契约 —— linkque-agent-protocol 包的协议事实源。 * * 描述一份完整 agent 声明的结构:身份标识、模型与系统提示词、多模态开关, * 以及挂载在其上的"资源"集合(技能 / MCP / 知识 / 卡片 / 内置工具)。 * 后续 agent 协议类型在此维护,linkque-agent-runtime 经 dependencies 消费。 * * 资源采用可辨识联合(discriminated union):统一基类 {@link IResource} * 携带公共字段,具体子类型通过 `resourceType` 判别,并各自携带专属 config。 * * 本文件为纯类型层声明(无运行时逻辑);枚举均为字符串枚举,序列化为 JSON * 时值与原字面量完全一致,可直接作为跨进程协议对象传输。 * * 命名约定:interface 加 `I` 前缀、enum 加 `E` 前缀。 */ import type { A2UICardResourceConfig } from '../agent-a2ui-card-contract/index.js'; /** Agent 协议顶层结构,一份完整 agent 声明的根容器。 */ export interface IAgentProtocol { /** Agent 唯一标识。 */ agentId: string; /** Agent 展示名。 */ name: string; /** Agent 声明版本。 */ version: string; /** Agent 主体声明。 */ agent: IAgent; } /** Agent 主体:模型、系统提示词、多模态开关与挂载资源集合。 */ export interface IAgent { model: IModel; systemPrompt: ISystemPrompt; multimodel: IMultimodel; /** 挂载在该 agent 上的资源列表(技能 / MCP / 知识 / 卡片 / 工具)。 */ resources: IResource[]; } /** 系统提示词。 */ export interface ISystemPrompt { content: string; } /** * Agent 运行时模型提供商标识。由配置层({@link IModel.provider})直接给出, * 决定 provider 实现(进而决定请求入口 URL、认证方式与协议)。 * * 字符串枚举:运行时值与字面量一致,JSON 序列化不变。 * - LINKQUE:基于 Anthropic 协议的 Linkque 模型服务(生产)。 * - TEST:仅供单测使用的离线 provider,固定预设响应,不联网。 */ export declare enum EModelProvider { /** Linkque 模型服务(Anthropic Messages 协议,入口 /api/anthropic)。 */ LINKQUE = "LINKQUE", /** 单测专用离线 provider(固定预设响应,不联网;切勿用于生产)。 */ TEST = "TEST" } /** * Agent 协议层的模型声明:只含"模型调用必需"信息——provider + defaultModel + 模型调用参数。 * * baseURL/apiKey/secretName 这类传输层与凭据配置**不在 protocol 里**:baseURL 由 * provider 实现硬编码(`impl/agent/pi/provider/*Provider.ts` 的 `*_BASE_URL`), * apiKey 经 {@link IAgentAuth.apiKey} 运行时注入。enable(启用开关)/isInternal/ * modelName 属配置层/控制台语义,非模型调用参数,不进 protocol。 */ export interface IModel { /** * 模型提供商标识(对齐 {@link EModelProvider})。运行时据此选 provider 实现。 * 取代旧 `gateway`(旧字段是字符串、需归一化;现直接用枚举)。 * 与 {@link IAgentAuth.provider} 一致(运行时凭 IAgentAuth.provider 选 provider)。 */ provider: EModelProvider; /** * 默认模型 id(如 "Kimi-K2.5"):运行时不显式指定 model 时用此。 * 运行时若经 `IAgentRuntimeRunOptions.model` 指定,则覆盖此默认。 * 统一旧 `modelValue`/`modelId` 两个字段为单一 `defaultModel`。 */ defaultModel: string; /** * 模型调用参数(可选):temperature / topP / topK / maxTokens / thinkingLevel 等 * 影响"怎么调模型"的运行时参数。由消费方(chat/agentdev)按需透传给 * `IAgentStreamOptions`。不含 baseURL/apiKey/enable/isInternal/secretName —— 那些不是 * 模型调用参数(归 provider 实现 / 凭据注入 / 配置层控制台)。 */ callParams?: { temperature?: number; topP?: number; topK?: number; maxTokens?: number; thinkingLevel?: 'off' | 'low' | 'medium' | 'high'; }; } /** 多模态开关。 */ export interface IMultimodel { enabled: boolean; } /** * 资源类型判别字段。作为可辨识联合的 discriminant,决定 {@link IResource} * 实际收敛为哪个具体子类型。 * * 字符串枚举:运行时值与字面量一致,JSON 序列化不变。 */ export declare enum EResourceType { /** 支付宝开放平台技能(open skill)。 */ SKILL = "SKILL", /** MCP 服务。 */ MCP = "MCP", /** MCP 单工具:server 内某一个 tool 的声明(按 serverName 与 MCP 聚合,收敛 allowedTools)。 */ MCP_TOOL = "MCP_TOOL", /** 知识库。 */ KNOWLEDGE = "KNOWLEDGE", /** 卡片(LinkQue a2ui 模板)。 */ CARD = "CARD", /** 内置工具。 */ TOOL = "TOOL" } /** * 资源提供方标识。配合 {@link EResourceType} 进一步说明资源由哪个平台供给 * (支付宝开放平台 / LinkQue 自有 / 运行时内置)。 * * 字符串枚举:运行时值与字面量一致,JSON 序列化不变。 */ export declare enum EResourceProviderType { /** 支付宝开放平台。 */ ALIPAY_OPEN = "ALIPAY_OPEN", /** LinkQue 自有。 */ LINK_QUE = "LINK_QUE", /** 运行时内置。 */ BUILTIN = "BUILTIN" } /** 资源配置的空基接口,供具体 config 类型 extends 以收敛 config 形状。 */ export interface IResourceConfig { } /** * 资源统一基类(可辨识联合的公共面)。 * * 具体子类型 extends 它,并把 `resourceType` / `providerType` 收窄为对应枚举值, * 以形成判别分支。 */ export interface IResource { /** 资源唯一标识。 */ resourceId: string; /** 资源类型判别字段(收敛为具体枚举值以区分子类型)。 */ resourceType: EResourceType; /** 资源提供方。 */ providerType: EResourceProviderType; /** 资源专属配置,随子类型而异。 */ config: TConfig; } /** * 支付宝开放技能资源 config。 * * `skillZipUrl` 是技能包的唯一来源(必填),由 WebSkillLoader 按协议分发加载: * - `http(s)://`:远端 zip 包,fetch 字节 → 解压 → 识别 `SKILL.md` 正文。 * - `file://`:本地路径(目录或 zip 文件)。解析成绝对路径后须落在 loader 的 `root` * (工作区 cwd)内,否则视为越界拒绝;目录则读其下 `SKILL.md`,zip 文件则解压取正文。 */ export interface IAlipayOpenSkillResourceConfig extends IResourceConfig { /** * 技能 zip 包 URL(必填)。支持 `http(s)://`(远端 fetch+解压)与 `file://`(本地路径, * 须落在 WebSkillLoader 构造时传入的 root 内)。其它协议被拒绝。 */ skillZipUrl: string; } /** 技能资源:providerType 固定 ALIPAY_OPEN,携带技能 ossId。 */ export interface ISkillResource extends IResource { resourceType: EResourceType.SKILL; providerType: EResourceProviderType.ALIPAY_OPEN; config: IAlipayOpenSkillResourceConfig; } /** 支付宝开放 MCP 资源 config:私钥 mistId + MCP server 名。 */ export interface IAlipayOpenMcpResourceConfig extends IResourceConfig { /** agent Id */ agentId: string; /** mcp 服务名称 */ serverName: string; /** mcp 工具入参映射规则 */ argsMappingRules: ArgsMappingRule[]; /** * 允许调用的工具名白名单(可选)。声明后,该 server 仅这些 tool 对 LLM 可见可调; * 缺省表示该 server 全量 tool 均放行。与 {@link IMcpToolResource} 按 serverName * 聚合时取并集,任一来源声明即收敛为白名单。 */ allowedTools?: string[]; } export interface ArgsMappingRule { mcpToolName: string; /** 参数名称 */ argJsonPath: string; /** 是否禁用该参数 */ disabled: boolean; /** 参数值类型 */ valueType: EArgsMappingValueType; /** 参数值 */ value?: string; } /** * MCP 单工具入参映射规则(简版):相比 {@link ArgsMappingRule} 省略 `mcpToolName`, * 因为 {@link IMcpToolResource} 已绑定单个 `toolName`,规则无需再重复带工具名。 * 聚合时由消费方回填 `mcpToolName = toolResource.config.toolName` 还原为完整规则。 */ export type McpToolArgMappingRule = Omit; /** 参数值类型枚举 */ export declare enum EArgsMappingValueType { /** 默认值 */ DEFAULT = "DEFAULT", /** 固定值 */ CONST = "CONST" } /** MCP 资源:providerType 固定 ALIPAY_OPEN。 */ export interface IMcpResource extends IResource { resourceType: EResourceType.MCP; providerType: EResourceProviderType.ALIPAY_OPEN; config: IAlipayOpenMcpResourceConfig; } /** * 支付宝开放 MCP 单工具资源 config:声明 server 内某个可调 tool。 * * 与 {@link IMcpResource}(server 级,连整个 server)不同,本资源只声明**单个 tool**, * 用于「按 serverName 聚合,收敛 allowedTools」:消费侧把同 serverName 的 MCP + * MCP_TOOL 资源合并为一次连接,凡经 MCP_TOOL 声明(或 MCP.allowedTools 列出)的 * tool 才在 listTool 层透出,其余不暴露。`agentId/serverName` 提供连接信息, * 与 {@link IMcpResource} 同构,故纯 tool 声明也能独立连 server。 */ export interface IAlipayOpenMcpToolResourceConfig extends IResourceConfig { /** agent Id(与同 server 的 IMcpResource 应一致)。 */ agentId: string; /** mcp 服务名称(聚合 key)。 */ serverName: string; /** 声明可调用的单个工具名(聚合后纳入该 server 的 allowedTools 白名单)。 */ toolName: string; /** 该工具入参映射规则(可选;简版无 mcpToolName,聚合时回填本资源 toolName)。 */ argsMappingRules?: McpToolArgMappingRule[]; } /** MCP 单工具资源:providerType 固定 ALIPAY_OPEN。 */ export interface IMcpToolResource extends IResource { resourceType: EResourceType.MCP_TOOL; providerType: EResourceProviderType.ALIPAY_OPEN; config: IAlipayOpenMcpToolResourceConfig; } /** 支付宝开放知识资源 config:知识库 id。 */ export interface IAlipayOpenKnowledgeResourceConfig extends IResourceConfig { knowledgeId: string; } /** 知识资源:providerType 固定 ALIPAY_OPEN。 */ export interface IKnowledgeResource extends IResource { resourceType: EResourceType.KNOWLEDGE; providerType: EResourceProviderType.ALIPAY_OPEN; config: IAlipayOpenKnowledgeResourceConfig; } /** a2ui 模板:参数 schema + 模板内容,用于卡片渲染。 */ export type IA2uiTemplate = A2UICardResourceConfig['a2uiTemplate']; /** LinkQue 卡片资源 config:完整卡片描述、确定性 Resolver 与 a2ui 模板。 */ export interface ILinkQueCardResourceConfig extends IResourceConfig, A2UICardResourceConfig { } /** 卡片资源:providerType 固定 LINK_QUE。 */ export interface ICardResource extends IResource { resourceType: EResourceType.CARD; providerType: EResourceProviderType.LINK_QUE; config: ILinkQueCardResourceConfig; } /** 内置工具资源 config:联网搜索 / 预置问题两个开关。 */ export interface IBuiltinToolResourceConfig extends IResourceConfig { websearch: { enable: boolean; }; presetQuestions: { enable: boolean; }; } /** 内置工具资源:providerType 固定 BUILTIN。 */ export interface IToolResource extends IResource { resourceType: EResourceType.TOOL; providerType: EResourceProviderType.BUILTIN; config: IBuiltinToolResourceConfig; }