跳转到内容

Capability Runtime

头文件:claw_cap.h

claw_capCapability 运行时:所有面向「可被调用的一段能力」——无论是给模型当 tool、给控制台当 cap call、还是被 Event Router 直接 call_cap——都先登记成带元数据的描述符,再经统一入口执行。

claw_cap_descriptor_t 描述单个能力,核心字段包括:

  • id / name:标识与展示名(调用时通常用 name 或 id,以实现为准)。
  • family:逻辑分组(列表输出时会带上)。
  • descriptioninput_schema_json:给人和给模型看的说明与参数 schema。
  • kindCALLABLEEVENT_SOURCEHYBRID 等,表达该能力是否以调用为主、是否会产事件、或两者兼有。
  • cap_flags:例如是否允许被大语言模型调用(CLAW_CAP_FLAG_CALLABLE_BY_LLM)、是否支持生命周期等。
  • init / start / stop:可选的生命周期钩子。
  • execute:真正执行时收到 JSON 字符串输入调用上下文 claw_cap_call_context_t(含 session、channel、caller 等),输出写入调用方提供的缓冲区。

一批相关描述符可以放在 claw_cap_group_t,通过 claw_cap_register_group 注册为 Group,便于统一 start/stop 与按 group 启停。

常见调用路径:

  1. Agentclaw_core → 配置的 call_capclaw_cap_call_from_core(会把 claw_core_request_t 映射成 claw_cap_call_context_t)。
  2. Consolecap call <name> <json>(见 Console 交互)。
  3. Event Router:规则动作 call_cap(见 数据流与自动化)。

claw_cap_call_context_t.caller 区分 SYSTEM / AGENT / CONSOLE,Capability 实现可据此区分调用方。

claw_cap_build_llm_tools_json 会根据当前上下文生成工具列表;claw_cap_tools_provider 把它作为 TOOLS 类上下文交给 claw_core

claw_cap_set_llm_visible_groupsgroup_id 白名单 限制暴露范围。 basic_demo 里默认对大语言模型暴露 cap_filescap_skillcap_systemcap_lua,完整结构化记忆模式还会暴露 claw_memory, 见 app_claw.c 中的 BASIC_DEMO_LLM_VISIBLE_GROUPS

  • claw_cap_list / claw_cap_list_groups:枚举能力与 group。
  • claw_cap_enable_group / claw_cap_disable_group:按组启用或禁用。
  • claw_cap_unregister_group / claw_cap_unregister:卸载(带超时等待活跃调用结束)。