OpenCode 插件示例,将 OpenViking 记忆作为显式工具暴露,并自动同步对话会话到 OpenViking。
安装指南:INSTALL-ZH.md
本示例使用 OpenCode 的工具机制将 OpenViking 功能暴露为agent可调用的显式工具。
实际上,这意味着:
memcommit 触发后台记忆提取本示例专注于 OpenCode 中的显式记忆访问、文件系统风格的浏览和会话到记忆的同步。
memsearchmemreadmembrowsememcommitcommit 任务避免重复的同步导致超时失败本示例包含:
openviking-memory.ts:OpenCode 使用的插件实现openviking-config.example.json:配置模板.gitignore:复制到工作区后忽略本地运行时文件如果服务器尚未运行,请先启动:
openviking-server --config ~/.openviking/ov.conf
OpenCode 文档推荐的安装位置:
~/.config/opencode/plugins
使用以下命令安装:
mkdir -p ~/.config/opencode/plugins
cp examples/opencode-memory-plugin/openviking-memory.ts ~/.config/opencode/plugins/openviking-memory.ts
cp examples/opencode-memory-plugin/openviking-config.example.json ~/.config/opencode/plugins/openviking-config.json
cp examples/opencode-memory-plugin/.gitignore ~/.config/opencode/plugins/.gitignore
然后编辑 ~/.config/opencode/plugins/openviking-config.json。
OpenCode 会自动发现 ~/.config/opencode/plugins 下一级目录中的 *.ts 和 *.js 文件,因此不需要在 ~/.config/opencode/opencode.json 中显式配置 plugin 条目。
如果您有意将插件放置在工作区本地插件目录中,此插件也可以使用,因为它会将配置和运行时文件存储在插件文件旁边。
推荐:通过环境变量提供 API 密钥,而不是将其写入配置文件:
export OPENVIKING_API_KEY="your-api-key-here"
配置示例:
{
"endpoint": "http://localhost:1933",
"apiKey": "",
"enabled": true,
"timeoutMs": 30000,
"autoCommit": {
"enabled": true,
"intervalMinutes": 10
}
}
环境变量 OPENVIKING_API_KEY 优先于配置文件。
安装后,插件会在插件文件旁边创建这些本地文件:
openviking-config.jsonopenviking-memory.logopenviking-session-map.json这些是运行时生成的文件,不应提交到版本控制。
在记忆、资源和技能中进行统一搜索。
参数:
query:搜索查询target_uri?:将搜索限制在 URI 前缀,如 viking://user/memories/mode?:auto | fast | deeplimit?:最大结果数score_threshold?:可选的最小分数从特定的 viking:// URI 读取内容。
参数:
uri:目标 URIlevel?:auto | abstract | overview | read浏览 OpenViking 文件系统布局。
参数:
uri:目标 URIview?:list | tree | statrecursive?:仅用于 view: "list"simple?:仅用于 view: "list"触发当前会话的立即记忆提取。
参数:
session_id?:可选的显式 OpenViking 会话 ID返回后台任务进度或完成详情,包括 task_id、memories_extracted 和 archived。
搜索然后读取:
const results = await memsearch({
query: "user coding preferences",
target_uri: "viking://user/memories/",
mode: "auto"
})
const content = await memread({
uri: results[0].uri,
level: "auto"
})
先浏览:
const tree = await membrowse({
uri: "viking://resources/",
view: "tree"
})
强制进行会话中期提交:
const result = await memcommit({})
*.ts 文件运行~/.config/opencode/plugins/openviking-memory.tsopenviking-server 正在运行并且在配置的端点可访问OPENVIKING_API_KEY 或 openviking-config.jsonvlm 和 embedding 配置