{"_id":"@57blocks_agb/ab-knowledge","_rev":"3-64f1d6241025a729373e1634c79e4cc0","name":"@57blocks_agb/ab-knowledge","dist-tags":{"latest":"0.0.3"},"versions":{"0.0.1":{"name":"@57blocks_agb/ab-knowledge","version":"0.0.1","license":"UNLICENSED","_id":"@57blocks_agb/ab-knowledge@0.0.1","maintainers":[{"name":"evanliu57","email":"evan@57blocks.com"}],"bin":{"ab-knowledge":"dist/cli.js","ab-knowledge-mcp":"dist/mcp-bin.js"},"dist":{"shasum":"4ec383f96aac151891375eb30591705b76a39db0","tarball":"https://registry.npmjs.org/@57blocks_agb/ab-knowledge/-/ab-knowledge-0.0.1.tgz","fileCount":45,"integrity":"sha512-7r2+h2YEuarTTlyEY7Nksz0eAdcl1C7BkTa8mS/jbi5gr8g+VPcWcjoA6bojtAvA7hCjdQFeOVhGa23/PdZCUQ==","signatures":[{"sig":"MEUCICzpy3sLJbjw5yntNPy2r/6D23/FwvGFq9mB1NTZY/lpAiEAhQ8Qx7bLV6Ey31spOqE/GGQumTnQ6SqWw654dSmfOXQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":252061},"main":"./dist/index.js","type":"module","_from":"file:57blocks_agb-ab-knowledge-0.0.1.tgz","types":"./dist/index.d.ts","scripts":{"test":"vitest run --passWithNoTests","build":"tsc -b","typecheck":"tsc -b"},"_npmUser":{"name":"evanliu57","email":"evan@57blocks.com"},"_resolved":"/private/var/folders/nz/j1h1h9wd01sggb8x9jtbjzr00000gn/T/0b7983401872b4d0d201c261c665398b/57blocks_agb-ab-knowledge-0.0.1.tgz","_integrity":"sha512-7r2+h2YEuarTTlyEY7Nksz0eAdcl1C7BkTa8mS/jbi5gr8g+VPcWcjoA6bojtAvA7hCjdQFeOVhGa23/PdZCUQ==","_npmVersion":"11.16.0","description":"**L2 领域知识的语料库 + MCP server。**","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","@57blocks_agb/ab-core":"0.0.1","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/ab-knowledge_0.0.1_1788141338004_0.21174348434827817","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@57blocks_agb/ab-knowledge","version":"0.0.2","license":"UNLICENSED","_id":"@57blocks_agb/ab-knowledge@0.0.2","maintainers":[{"name":"evanliu57","email":"evan@57blocks.com"}],"bin":{"ab-knowledge":"dist/cli.js","ab-knowledge-mcp":"dist/mcp-bin.js"},"dist":{"shasum":"b86353e47db2b3390c015324662767733e6329b6","tarball":"https://registry.npmjs.org/@57blocks_agb/ab-knowledge/-/ab-knowledge-0.0.2.tgz","fileCount":45,"integrity":"sha512-psCm54iY3d/CItdY9DJyAJlrL9DE3DT7mbW7g6guiCkeHpypFpWHrmbPhFGkAKAcAS/MzMWvTLv34Cb/JdA25A==","signatures":[{"sig":"MEQCIFgkyjoY6osZ4JoP5QWiIY3RmqxlmSolYKC1mrNwQMQ2AiAfEVo3jPdtiOQJyAaYPlvzI/vAq3WSDdFptPjFES+Ulw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":252069},"main":"./dist/index.js","type":"module","_from":"file:57blocks_agb-ab-knowledge-0.0.2.tgz","types":"./dist/index.d.ts","scripts":{"test":"vitest run --passWithNoTests","build":"tsc -b","typecheck":"tsc -b"},"_npmUser":{"name":"evanliu57","email":"evan@57blocks.com"},"_resolved":"/private/var/folders/nz/j1h1h9wd01sggb8x9jtbjzr00000gn/T/716358d6c7ddc6532e4faa820d77d47a/57blocks_agb-ab-knowledge-0.0.2.tgz","_integrity":"sha512-psCm54iY3d/CItdY9DJyAJlrL9DE3DT7mbW7g6guiCkeHpypFpWHrmbPhFGkAKAcAS/MzMWvTLv34Cb/JdA25A==","_npmVersion":"11.16.0","description":"**L2 领域知识的语料库 + MCP server。**","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.4.3","@57blocks_agb/ab-core":"0.0.2","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/ab-knowledge_0.0.2_1788229872438_0.018371209991352888","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@57blocks_agb/ab-knowledge","version":"0.0.3","license":"UNLICENSED","type":"module","main":"./dist/index.js","publishConfig":{"access":"public"},"bin":{"ab-knowledge":"dist/cli.js","ab-knowledge-mcp":"dist/mcp-bin.js"},"dependencies":{"@modelcontextprotocol/sdk":"^1.30.0","zod":"^4.4.3","@57blocks_agb/ab-core":"0.0.3"},"scripts":{"typecheck":"tsc -b","test":"vitest run --passWithNoTests","build":"tsc -b"},"types":"./dist/index.d.ts","_id":"@57blocks_agb/ab-knowledge@0.0.3","description":"**L2 领域知识的语料库 + MCP server。**","_integrity":"sha512-ZHCh0LDc8/pOY9VVJBtErQV7+HNyXznFBqbLwMExBdlAN08/2X3bTExBcFppLs1iOPFbILeFpacrUgAgf+hcLQ==","_resolved":"/private/var/folders/nz/j1h1h9wd01sggb8x9jtbjzr00000gn/T/51a2d8c827bc2bf630ba6cbd475f924c/57blocks_agb-ab-knowledge-0.0.3.tgz","_from":"file:57blocks_agb-ab-knowledge-0.0.3.tgz","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-ZHCh0LDc8/pOY9VVJBtErQV7+HNyXznFBqbLwMExBdlAN08/2X3bTExBcFppLs1iOPFbILeFpacrUgAgf+hcLQ==","shasum":"855e8bf486e0640eed2451123dd150d4e066cc1c","tarball":"https://registry.npmjs.org/@57blocks_agb/ab-knowledge/-/ab-knowledge-0.0.3.tgz","fileCount":45,"unpackedSize":253156,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHwmzLeM1rGpSKONyRvzp+6XLmAzdCZDX8TSt4qv8txeAiEAzeRx6Q2UnTfe2IgMUv25dK0DNaqHvtk0DTTXjWbB11c="}]},"_npmUser":{"name":"evanliu57","email":"evan@57blocks.com"},"directories":{},"maintainers":[{"name":"evanliu57","email":"evan@57blocks.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ab-knowledge_0.0.3_1788494265584_0.9102197055890631"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-31T01:55:37.822Z","modified":"2026-09-04T03:57:45.934Z","0.0.1":"2026-08-31T01:55:38.147Z","0.0.2":"2026-09-01T02:31:12.569Z","0.0.3":"2026-09-04T03:57:45.733Z"},"license":"UNLICENSED","description":"**L2 领域知识的语料库 + MCP server。**","maintainers":[{"name":"evanliu57","email":"evan@57blocks.com"}],"readme":"# ab-knowledge\n\n**L2 领域知识的语料库 + MCP server。**\n\n层 1 是「怎么写代码」（通用工程约束，写在 Skill 里）。这个包管**层 2**：\n「这个垂直领域里，这类需求有哪些真实项目踩出来的约束」—— 幂等键该怎么定、\n账本为什么不能只记净额、webhook 重放窗口取多久。\n\n## 装\n\n```bash\nnpm i -D @57blocks_agb/ab-knowledge\n```\n\n> **为什么是 `pnpm exec` 而不是 `npx`。** `npx` 在本地找不到这个 bin 时会**去 registry\n> 下载一个同名的包然后跑它** —— 而 `ab-knowledge` 这种短名字谁都能在 npm 上注册。\n> 同一套包里 `agb` 那个名字**已经是别人的了**（`agb@0.0.0`，与我们无关）。\n> `npm exec --no` 也拦不住（实测仍然打 404，说明它去过 registry）。\n>\n> 用 npm / yarn 的话，只看本地的写法是：写进 `package.json` 的 scripts，\n> 或直接敲 `./node_modules/.bin/ab-knowledge`。\n\n## 用\n\n### 当 MCP server（主要用法）\n\n```json\n{\n  \"mcpServers\": {\n    \"ab-knowledge\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"-p\", \"@57blocks_agb/ab-knowledge\", \"ab-knowledge-mcp\"]\n    }\n  }\n}\n```\n\n**`-p` 不能省。** `ab-knowledge-mcp` 是这个包的一个 bin,不是一个包 ——\n`npx @57blocks_agb/ab-knowledge-mcp` 会去 registry 上找一个叫那个名字的包,\n拿到 E404。bin 名和包名不一致时,包用 `-p` 给,命令另外给。\n\n而这里没有「先装一下」那一步兜底:这段配置是粘进别人仓库的 `.mcp.json` 的,\n`npx` 每次都从 registry 取。\n\n四个 tool：\n\n| tool | 做什么 | 留下什么痕迹 |\n|---|---|---|\n| `recall` | 按场景取语料 | `knowledge.recall` 事件 |\n| `record` | 记一条候选知识 | 写 candidates / reviewed 文件 |\n| `attribute` | 标记某条知识起没起作用 | `knowledge.attribution` 事件 |\n| `promote_candidates` | 把够格的候选升为正式条目 | **什么都不留** —— 调用过与没调用过在数据上一样 |\n\n最后一行不是笔误,是这个包已知的一个洞：`agb report` 会把\n`promote_candidates` 显示成「未探测」而不是「从没跑过」,因为**确实探测不到**。\n\n### 当 CLI\n\n```bash\npnpm exec ab-knowledge            # 看用法\n```\n\n## 语料\n\n`knowledge/entries/<垂直>/<场景>.md`,随包发布。\n\n**条目只带 engagement id(`E-###`),不带客户名** —— id 到客户的映射不在这个仓库里,\n也不在这个包里。\n\n**语料是空的会明说。** server 起来时如果 `knowledge/entries` 找不到,stderr 上会打\n「警告：语料是空的」。这件事必须和「recall 匹配不上」分开 —— 后者是\n「我们没沉淀过这类场景」,前者是「语料压根没加载」,而两者对使用者的下一步动作\n完全不同。\n\n## 铁律\n\n**领域知识必须由真实项目催生。** 没有真实项目做依据的条目不进语料 ——\n凭想象写的领域约束读起来和真的一样,而它错的时候没有任何东西会报错。\n","readmeFilename":"README.md"}