{"_id":"@aeon-memory/opencode","_rev":"6-bb24df88d1dc7a0cc685e0834c448144","name":"@aeon-memory/opencode","dist-tags":{"latest":"0.7.2"},"versions":{"0.6.0":{"name":"@aeon-memory/opencode","version":"0.6.0","keywords":["opencode","memory","agent","tencentdb","aeon-memory"],"license":"MIT","_id":"@aeon-memory/opencode@0.6.0","maintainers":[{"name":"huchundong","email":"gycm520@gmail.com"}],"bin":{"aeon-memory-opencode":"dist/cli.js"},"dist":{"shasum":"7fff3c77da4e0f871f6966ba12a14634dae68354","tarball":"https://registry.npmjs.org/@aeon-memory/opencode/-/opencode-0.6.0.tgz","fileCount":5,"integrity":"sha512-NXXcu9DsUzpiwtgzkf+nzutmJ8mwNKSQSey9Uptn7KTN4elCK6Zy2Vw7MUOyGcn1crvlo344Rp5ca5ADwPGsgA==","signatures":[{"sig":"MEUCIF0XGkirMPS22FRCXNeAY0DYpWuwx+OViqMcA07yWHBTAiEAlQVe5DW7c8CbzoXrwbc/7qeCTvtQ+otqv3XMMciLjRw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":503346},"type":"module","engines":{"node":">=22"},"exports":{".":"./dist/aeon-memory.js"},"gitHead":"1193c380780447e4d60fc8a1d48d94e04cec099e","scripts":{"test":"npm run build && tsx --test test/*.test.ts","build":"npm run clean && esbuild src/aeon-memory.ts src/cli.ts --bundle --platform=node --format=esm --target=node22 --outdir=dist --outbase=src","clean":"node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"","prepack":"npm run build","typecheck":"tsc --noEmit","pack:check":"npm run build && npm pack --dry-run"},"_npmUser":{"name":"huchundong","email":"gycm520@gmail.com"},"opencode":{"minimumVersion":"1.17.18"},"_npmVersion":"11.11.0","description":"Automatic TencentDB Agent Memory lifecycle integration for OpenCode","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","esbuild":"^0.25.0","typescript":"^5.8.0","@types/node":"^22.15.0","@opencode-ai/plugin":"1.17.18"},"_npmOperationalInternal":{"tmp":"tmp/opencode_0.6.0_1784029708130_0.0886985654095811","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"@aeon-memory/opencode","version":"0.6.2","keywords":["opencode","memory","agent","aeon-memory"],"license":"MIT","_id":"@aeon-memory/opencode@0.6.2","maintainers":[{"name":"huchundong","email":"gycm520@gmail.com"}],"homepage":"https://github.com/HuChundong/aeon-memory#opencode-集成","bugs":{"url":"https://github.com/HuChundong/aeon-memory/issues"},"bin":{"aeon-memory-opencode":"dist/cli.js"},"dist":{"shasum":"3fa121be4b8ec5ce6e51f581c5d58c82eb33fedc","tarball":"https://registry.npmjs.org/@aeon-memory/opencode/-/opencode-0.6.2.tgz","fileCount":6,"integrity":"sha512-4MtCqrzAXWM8L/UUV/uoD8VdpxXXSyfAAk/FHJJCVeGxsPNAQVcF2UuipPn7iXqbPVthyu/b4cljPCedpMQHlQ==","signatures":[{"sig":"MEUCIHnrsTkK0Fdz/R3lMGptk+x15FgCqqc+E4mJIsOroaSyAiEAwhi5AzhulidX6gyFNMyEBXRue8OKGFOA2EXyhsSyThU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aeon-memory%2fopencode@0.6.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":508284},"type":"module","engines":{"node":">=22"},"exports":{".":"./dist/aeon-memory.js"},"gitHead":"d56132ef58fee8d5ad35f8d4959b3a2f06cb02f3","scripts":{"test":"npm run build && tsx --test test/*.test.ts","build":"npm run clean && esbuild src/aeon-memory.ts src/cli.ts --bundle --platform=node --format=esm --target=node22 --outdir=dist --outbase=src","clean":"node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"","prepack":"npm run build","typecheck":"tsc --noEmit","pack:check":"npm run build && npm pack --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a4913ff-e17a-4773-b7f4-ecc04d5555f9"}},"opencode":{"minimumVersion":"1.17.18"},"repository":{"url":"git+https://github.com/HuChundong/aeon-memory.git","type":"git","directory":"integrations/opencode"},"_npmVersion":"12.0.1","description":"Automatic Aeon Memory lifecycle integration for OpenCode","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","esbuild":"^0.25.0","typescript":"^5.8.0","@types/node":"^22.15.0","@opencode-ai/plugin":"1.17.18"},"_npmOperationalInternal":{"tmp":"tmp/opencode_0.6.2_1784033831882_0.1818471984703116","host":"s3://npm-registry-packages-npm-production"}},"0.6.3":{"name":"@aeon-memory/opencode","version":"0.6.3","keywords":["opencode","memory","agent","aeon-memory"],"license":"MIT","_id":"@aeon-memory/opencode@0.6.3","maintainers":[{"name":"huchundong","email":"gycm520@gmail.com"}],"homepage":"https://github.com/HuChundong/aeon-memory#opencode-集成","bugs":{"url":"https://github.com/HuChundong/aeon-memory/issues"},"bin":{"aeon-memory-opencode":"dist/cli.js"},"dist":{"shasum":"1d723de57c765dc42250e4f45b110871ae460996","tarball":"https://registry.npmjs.org/@aeon-memory/opencode/-/opencode-0.6.3.tgz","fileCount":6,"integrity":"sha512-34y3/K8leWZE80f4nPyFdwb93Qbj2dU1moiQAGTSwIWBmPG+F9UVh2Qg2izLULlK6R0YyBnn+s8C568/alEh2A==","signatures":[{"sig":"MEUCIQDLWDmqbdXz4ZSjNnA1nIrylQI2riKRgde8cccdw5o8oQIgFuQbRAUzcbLD5AQbHPR3LL1l8zgE/YZpDGMApYrjHYY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aeon-memory%2fopencode@0.6.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":556346},"type":"module","engines":{"node":">=22"},"exports":{".":"./dist/aeon-memory.js"},"gitHead":"70495c5ad4893ca1e04e9d5e524c0d49508ec9f4","scripts":{"test":"npm run build && tsx --test test/*.test.ts","build":"npm run clean && esbuild src/aeon-memory.ts src/cli.ts --bundle --platform=node --format=esm --target=node22 --outdir=dist --outbase=src","clean":"node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"","prepack":"npm run build","typecheck":"tsc --noEmit","pack:check":"npm run build && npm pack --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a4913ff-e17a-4773-b7f4-ecc04d5555f9"}},"opencode":{"minimumVersion":"1.17.18"},"repository":{"url":"git+https://github.com/HuChundong/aeon-memory.git","type":"git","directory":"integrations/opencode"},"_npmVersion":"12.0.1","description":"Automatic Aeon Memory lifecycle integration for OpenCode","directories":{},"_nodeVersion":"24.18.0","dependencies":{"jsonc-parser":"3.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","esbuild":"^0.28.1","typescript":"^7.0.2","@types/node":"^26.1.1","@opencode-ai/plugin":"1.17.20"},"_npmOperationalInternal":{"tmp":"tmp/opencode_0.6.3_1784039266511_0.6383930787794694","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@aeon-memory/opencode","version":"0.7.0","keywords":["opencode","memory","agent","aeon-memory"],"license":"MIT","_id":"@aeon-memory/opencode@0.7.0","maintainers":[{"name":"huchundong","email":"gycm520@gmail.com"}],"homepage":"https://github.com/HuChundong/aeon-memory#opencode-集成","bugs":{"url":"https://github.com/HuChundong/aeon-memory/issues"},"bin":{"aeon-memory-opencode":"dist/cli.js"},"dist":{"shasum":"00473dd7f40424760771ef86aa1bef6fedbe82d3","tarball":"https://registry.npmjs.org/@aeon-memory/opencode/-/opencode-0.7.0.tgz","fileCount":6,"integrity":"sha512-c8wLQ5sm0Q15q2JK/wr/rTYKC9eGtQdnzblO7SGZ5nRXVp+e6W6zsy5fyVcuQViOhySX3wgKMO3vtezab8hpLQ==","signatures":[{"sig":"MEQCIBqKjkFkTkXFOWlyONqDhiskCIFUR7f8Xcy/Kxr7pgIWAiAnzuQW9vZ/W800A1GXifKJ/RAqv1EBj5PeB1efPbgkFA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aeon-memory%2fopencode@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":559381},"type":"module","engines":{"node":">=22"},"exports":{".":"./dist/aeon-memory.js"},"gitHead":"c75830a6d4c409cafb636ff4ae616ffb14b946cc","scripts":{"test":"npm run build && tsx --test test/*.test.ts","build":"npm run clean && esbuild src/aeon-memory.ts src/cli.ts --bundle --platform=node --format=esm --target=node22 --outdir=dist --outbase=src","clean":"node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"","prepack":"npm run build","typecheck":"tsc --noEmit","pack:check":"npm run build && npm pack --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a4913ff-e17a-4773-b7f4-ecc04d5555f9"}},"opencode":{"minimumVersion":"1.17.18","testedThroughVersion":"1.17.20"},"repository":{"url":"git+https://github.com/HuChundong/aeon-memory.git","type":"git","directory":"integrations/opencode"},"_npmVersion":"12.0.1","description":"Automatic Aeon Memory lifecycle integration for OpenCode","directories":{},"_nodeVersion":"24.18.0","dependencies":{"jsonc-parser":"3.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","esbuild":"^0.28.1","typescript":"^7.0.2","@types/node":"^26.1.1","@opencode-ai/plugin":"1.17.20"},"_npmOperationalInternal":{"tmp":"tmp/opencode_0.7.0_1784046250947_0.28690986256793805","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@aeon-memory/opencode","version":"0.7.1","keywords":["opencode","memory","agent","aeon-memory"],"license":"MIT","_id":"@aeon-memory/opencode@0.7.1","maintainers":[{"name":"huchundong","email":"gycm520@gmail.com"}],"homepage":"https://github.com/HuChundong/aeon-memory#opencode-集成","bugs":{"url":"https://github.com/HuChundong/aeon-memory/issues"},"bin":{"aeon-memory-opencode":"dist/cli.js"},"dist":{"shasum":"d74742e44181c2ef3a75854f80c3d282166ef932","tarball":"https://registry.npmjs.org/@aeon-memory/opencode/-/opencode-0.7.1.tgz","fileCount":6,"integrity":"sha512-MFrsvJdBgkki//E1IGeP9vOwVPz/Zowk8y9sNFL5Ylota55LUbQ1gq172gJrK2XL2l5pKs2n9akJUGp6r+nCdQ==","signatures":[{"sig":"MEQCIFrjSGqhcJ76yDB5oE5F668lCp51J87oZbZqEKp12yXDAiBDXBmFIcFFPtnmBiWZ62lQdI4U4twMvVShxCMmOZbfHQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aeon-memory%2fopencode@0.7.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":559421},"type":"module","engines":{"node":">=22"},"exports":{".":"./dist/aeon-memory.js","./server":"./dist/aeon-memory.js"},"gitHead":"6f7b4251c967d9896c1146debcc4272cbbab8ee7","scripts":{"test":"npm run build && tsx --test test/*.test.ts","build":"npm run clean && esbuild src/aeon-memory.ts src/cli.ts --bundle --platform=node --format=esm --target=node22 --outdir=dist --outbase=src","clean":"node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"","prepack":"npm run build","typecheck":"tsc --noEmit","pack:check":"npm run build && npm pack --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a4913ff-e17a-4773-b7f4-ecc04d5555f9"}},"opencode":{"minimumVersion":"1.17.18","testedThroughVersion":"1.17.20"},"repository":{"url":"git+https://github.com/HuChundong/aeon-memory.git","type":"git","directory":"integrations/opencode"},"_npmVersion":"12.0.1","description":"Automatic Aeon Memory lifecycle integration for OpenCode","directories":{},"_nodeVersion":"24.18.0","dependencies":{"jsonc-parser":"3.3.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.0","esbuild":"^0.28.1","typescript":"^7.0.2","@types/node":"^26.1.1","@opencode-ai/plugin":"1.18.1"},"_npmOperationalInternal":{"tmp":"tmp/opencode_0.7.1_1784083895054_0.2781633679145672","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"@aeon-memory/opencode","version":"0.7.2","description":"Automatic Aeon Memory lifecycle integration for OpenCode","type":"module","license":"MIT","exports":{".":"./dist/aeon-memory.js","./server":"./dist/aeon-memory.js"},"bin":{"aeon-memory-opencode":"dist/cli.js"},"repository":{"type":"git","url":"git+https://github.com/HuChundong/aeon-memory.git","directory":"integrations/opencode"},"homepage":"https://github.com/HuChundong/aeon-memory#opencode-集成","bugs":{"url":"https://github.com/HuChundong/aeon-memory/issues"},"publishConfig":{"access":"public"},"scripts":{"clean":"node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"","typecheck":"tsc --noEmit","build":"npm run clean && esbuild src/aeon-memory.ts src/cli.ts --bundle --platform=node --format=esm --target=node22 --outdir=dist --outbase=src","test":"npm run build && tsx --test test/*.test.ts","pack:check":"npm run build && npm pack --dry-run","prepack":"npm run build"},"engines":{"node":">=22"},"opencode":{"minimumVersion":"1.17.18","testedThroughVersion":"1.17.20"},"keywords":["opencode","memory","agent","aeon-memory"],"devDependencies":{"@opencode-ai/plugin":"1.18.1","@types/node":"^26.1.1","esbuild":"^0.28.1","tsx":"^4.20.0","typescript":"^7.0.2"},"dependencies":{"jsonc-parser":"3.3.1"},"gitHead":"e8e0f3dca894dd871db23ba046ed1eee66a61656","_id":"@aeon-memory/opencode@0.7.2","_nodeVersion":"24.18.0","_npmVersion":"12.0.1","dist":{"integrity":"sha512-rVbU2RZzO2I0MIpzlGSOQ+8PYmPFkHLPuizhMPJPpB/39CYqjWEuL6hBlu3t7qee8QS45lD1TbxhCCd2pEwFrA==","shasum":"19ab57cc1cc964894e9ef009991e332bff5213ec","tarball":"https://registry.npmjs.org/@aeon-memory/opencode/-/opencode-0.7.2.tgz","fileCount":6,"unpackedSize":562710,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aeon-memory%2fopencode@0.7.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICN5dw/aWWk9gmTNPapB8OjPaJe9XH+jTwQkD1ell36dAiEAieDFDLg4YkxndfqixZE5AYnEVdJvy/q2GS42JwlKx4I="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:6a4913ff-e17a-4773-b7f4-ecc04d5555f9"}},"directories":{},"maintainers":[{"name":"huchundong","email":"gycm520@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/opencode_0.7.2_1784187573897_0.6509467085521334"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-14T11:48:27.920Z","modified":"2026-07-16T07:39:34.399Z","0.6.0":"2026-07-14T11:48:28.268Z","0.6.2":"2026-07-14T12:57:12.034Z","0.6.3":"2026-07-14T14:27:46.675Z","0.7.0":"2026-07-14T16:24:11.093Z","0.7.1":"2026-07-15T02:51:35.162Z","0.7.2":"2026-07-16T07:39:34.042Z"},"bugs":{"url":"https://github.com/HuChundong/aeon-memory/issues"},"license":"MIT","homepage":"https://github.com/HuChundong/aeon-memory#opencode-集成","keywords":["opencode","memory","agent","aeon-memory"],"repository":{"type":"git","url":"git+https://github.com/HuChundong/aeon-memory.git","directory":"integrations/opencode"},"description":"Automatic Aeon Memory lifecycle integration for OpenCode","maintainers":[{"name":"huchundong","email":"gycm520@gmail.com"}],"readme":"# @aeon-memory/opencode\n\n[![npm](https://img.shields.io/npm/v/%40aeon-memory%2Fopencode)](https://www.npmjs.com/package/@aeon-memory/opencode)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n\nAeon Memory 的 OpenCode 自动集成插件。它使用 OpenCode 官方插件事件和配置格式，将\nOpenCode 会话连接到独立运行的 `aeon-memory-server`，自动完成召回、记录与会话排空。\n\n主项目与服务端安装说明：<https://github.com/HuChundong/aeon-memory>\n\n## 前置条件\n\n- OpenCode `1.17.18` 或更高版本（当前测试至 `1.17.20`；更高版本会提示 experimental hook 尚待验证）；\n- Node.js 22 或更高版本（用于安装器）；\n- 已启动且 `/health` 正常的 Aeon Memory HTTP 服务。\n\n```bash\ncurl http://127.0.0.1:8420/health\n```\n\n## 安装\n\n```bash\nnpx @aeon-memory/opencode@latest install\nnpx @aeon-memory/opencode@latest status\n```\n\n重启 OpenCode 后生效。发布包安装器会把当前发布版本作为精确的 npm registry 依赖写入\n`~/.config/opencode/package.json`、`package-lock.json` 与 `node_modules`，并注册标准 OpenCode\n`plugin` tuple。它会自动选择已有的 `opencode.jsonc` 或 `opencode.json`；两者同时存在时会安全\n停止并要求用 `--config FILE` 明确选择。没有配置文件时默认创建 `opencode.jsonc`。已有的其他插件、\n配置和 JSONC 注释会被保留。\n\n卸载：\n\n```bash\nnpx @aeon-memory/opencode@latest uninstall\n```\n\n可用的安装器选项：\n\n```text\n--target DIR  指定 OpenCode 配置目录，适合隔离测试\n--config FILE 指定确切的 OpenCode JSON/JSONC 配置文件\n--local       从当前源码目录安装，仅用于开发测试\n--dry-run     仅显示将执行的操作\n--force       在低于最低验证版本时强制安装\n```\n\n## 配置\n\n安装器会生成以下配置；请按服务端设置修改 `gatewayUrl` 和 `apiKey`：\n\n```json\n{\n  \"$schema\": \"https://opencode.ai/config.json\",\n  \"plugin\": [\n    [\n      \"@aeon-memory/opencode\",\n      {\n        \"enabled\": true,\n        \"recallEnabled\": true,\n        \"captureEnabled\": true,\n        \"toolsEnabled\": true,\n        \"gatewayUrl\": \"http://127.0.0.1:8420\",\n        \"apiKey\": \"\",\n        \"userId\": \"\",\n        \"recallTimeoutMs\": 5000,\n        \"captureTimeoutMs\": 10000,\n        \"sessionEndTimeoutMs\": 120000,\n        \"offloadTimeoutMs\": 30000,\n        \"recallMaxChars\": 12000,\n        \"captureMaxChars\": 40000,\n        \"offloadEnabled\": false,\n        \"contextWindow\": 200000,\n        \"systemContextUserTextModelPatterns\": [\"*qwen3.6*\"]\n      }\n    ]\n  ]\n}\n```\n\n| 配置项 | 默认值 | 说明 |\n|---|---:|---|\n| `enabled` | `true` | 完全启用或停用插件 |\n| `recallEnabled` | `true` | 自动召回并注入本轮上下文 |\n| `captureEnabled` | `true` | 自动记录完成轮次并在会话结束时排空 |\n| `toolsEnabled` | `true` | 注册两个显式记忆搜索工具 |\n| `gatewayUrl` | `http://127.0.0.1:8420` | Aeon Memory 服务地址 |\n| `apiKey` | 空 | 与服务端 `server.apiKey` 相同的 Bearer token |\n| `userId` | 空 | 转发给兼容网关的元数据；当前本地存储不按此字段隔离 |\n| `recallTimeoutMs` | `5000` | 召回与搜索请求超时 |\n| `captureTimeoutMs` | `10000` | 对话记录请求超时 |\n| `sessionEndTimeoutMs` | `120000` | 最终排空管线超时 |\n| `offloadTimeoutMs` | `30000` | 上下文卸载请求超时 |\n| `recallMaxChars` | `12000` | 召回查询与注入字符上限 |\n| `captureMaxChars` | `40000` | 单条捕获文本字符上限 |\n| `offloadEnabled` | `false` | 启用三类上下文卸载 Hook |\n| `contextWindow` | `200000` | Offload DTO 的上下文窗口 |\n| `systemContextUserTextModelPatterns` | `[\"*qwen3.6*\"]` | 大小写不敏感的模型 ID glob；命中时将稳定 system context 改为 synthetic user text，以兼容只接受单条 system message 的模型网关；设为 `[]` 可关闭 |\n\n插件只读取上述配置对象，不读取 Provider 密钥或运行时环境变量。未知字段、错误类型或越界\n值会在加载时直接报错。网络错误采用 fail-open 策略：记录警告但不会阻断 Agent。\n\n## 生命周期\n\n- 用户消息开始时调用 `/recall`，直接使用同一次召回返回的 `prepend_context`；仅旧服务端需要兼容调用 `/search/memories`；\n- 召回内容只写入送模前的临时消息副本，不污染持久化 OpenCode 历史；\n- 助手消息完成时读取稳定的 user/assistant 文本并调用 `/capture`；\n- `session.idle` 只作为 capture 兜底，不会错误结束会话；\n- 只有 `session.deleted` 或当前实例 `server.instance.disposed` 才调用 `/session/end`；\n- 自动压缩、标题请求和重复 transform 均有隔离与去重处理；\n- `session_key` 包含工作区哈希与 OpenCode session ID，防止项目之间串线；\n- reasoning、tool、synthetic、ignored part 不会被当作用户对话采集；常见凭据会被过滤；\n- 召回内容始终标注为不可信历史数据，不能作为命令执行。\n\n插件注册 `aeon-memory_memory_search` 与 `aeon-memory_conversation_search` 两个工具，允许\nAgent 在需要证据时主动下钻 L1 和 L0。\n\n## 源码开发\n\n```bash\ngit clone https://github.com/HuChundong/aeon-memory.git\ncd aeon-memory/integrations/opencode\nnpm ci\nnpm run typecheck\nnpm test\nnpm run pack:check\n```\n\n源码安装：\n\n```bash\ncd ../..\n./integrations/opencode/install.sh\n```\n\n问题反馈请前往 <https://github.com/HuChundong/aeon-memory/issues>；安全问题请勿公开提交，\n请遵循主仓库的 [安全策略](https://github.com/HuChundong/aeon-memory/security/policy)。\n\n本插件和 Aeon Memory 采用 MIT 许可证。项目代码来源与完整致谢见主仓库 README。\n","readmeFilename":"README.md"}