Skip to content

Latest commit

 

History

History
74 lines (54 loc) · 2.29 KB

File metadata and controls

74 lines (54 loc) · 2.29 KB

你可以在 clice 中实现一个 server plugin 来扩展 clice 的功能。

用例

当你使用 clice 作为 LLM 代理的 LSP 后端时,比如 claude code,你可以添加插件来提供一些额外功能。

编写插件

当一个插件被服务器加载时,它会调用 clice_get_server_plugin_info 来获取关于这个插件的信息以及如何注册它的定制点。

这个函数需要由插件实现,请参考下面的示例:

extern "C" ::clice::PluginInfo LLVM_ATTRIBUTE_WEAK
clice_get_server_plugin_info() {
  return {
    CLICE_PLUGIN_API_VERSION, "MyPlugin", "v0.1", CLICE_PLUGIN_DEF_HASH,
    [](ServerPluginBuilder builder) {  ... }
  };
}

请参考 PluginDef.h 了解更多细节。

编译插件

插件必须使用与 clice 一致的依赖和编译器选项来编译,否则会导致 undefined behavior。config/llvm-manifest.json 中定义了 clice 使用的构建信息。

加载插件

为了安全考虑,clice 不允许通过配置文件来加载插件,而必须通过命令行选项来指定插件的路径。

clice 启动时,它会加载所有在命令行中指定的插件。你可以通过 --plugin-path 选项来指定插件的路径。

$ clice --plugin-path /path/to/my-plugin.so

获取 CLICE_PLUGIN_DEF_HASH 的内容

clice_get_server_plugin_info 函数中需要返回两个值。

  • CLICE_PLUGIN_API_VERSION 用于确保插件和服务器之间的 clice_get_server_plugin_info 函数的一致性。
  • CLICE_PLUGIN_DEF_HASH 用于确保插件和服务器之间的 C++ 声明的一致性。

要调试 CLICE_PLUGIN_DEF_HASH 的内容,你可以运行以下命令:

$ git clone https://github.com/clice-io/clice.git
$ cd clice
$ git checkout `clice --version --git-describe`
$ python scripts/plugin-def.py content > /tmp/plugin-proto.h

你将会得到一个 C 源码格式的文件,内容大致如下:

#if 0
// begin of config/llvm-manifest.json
[
  {
    "version": "21.1.4+r1",
    "filename": "arm64-macos-clang-debug-asan.tar.xz",
    "sha256": "7da4b7d63edefecaf11773e7e701c575140d1a07329bbbb038673b6ee4516ff5",
    "lto": false,
    "asan": true,
    "platform": "macosx",
    "build_type": "Debug"
  },
  ...
]
...
#endif