@fangorn-network/westmarch

中文文档
0.3.0发布于 2026/11/14MITES Module构建来源已验证近 30 天下载 4876

跟着Fangorn重新定位到一个可搜索的索引, 本地或作为Cloudflare Worker, 并为MCP的代理服务

中文使用文档
文档目录6 节
  1. 运行它
  2. 沙盒:全部放在你的机器上
  3. 云浮上: 劳动者/
  4. 把它给经纪人
  5. 版式
  6. 测试

西马赫

遵循一组Fangorn重置为本地可搜索索引,让代理通过MCP搜索.

如何运作:

  1. 索引员保持 缝 超过每个 publisher/repo 跟着你 缝合是一个单块,记录每个重置者的头部.
  2. 每次随行的头部移动,索引器:
    • 重建更新日志中的缝合, 只读自上次缝合以来的条目;
    • diff 每一个头动了的回波,并用本地模型嵌入新的和已更改的记录;
    • 将记录和新缝合到一个交易中的 SQLite 文件 .
  3. 特工搜索文件 从Fangorn那里获取记录.

所有东西都在你的机器上运行:没有服务器可以运行,也没有API密钥可以提供. 你需要22.13+节点. npm i @fangorn-network/westmarch,或者从这次检查中运行它.

运行它

npm install
cp app.example.json app.json      # then put your publishers and repos in it
npm start                         # follow app.json into index.db, live (Ctrl-C to stop)
node src/run.js app.json --once   # or: catch up once, then exit

app.json数字 :

{ "publishers": ["0x…"], "repos": ["shop"], "network": "baseSepolia", "db": "index.db" }
  • 每个出版商都与每个回波名称相配.
  • network 实值 baseSepolia (默认)或 arbitrumSepolia。 。 。 .
  • 可选字段 : fromBlock, (中文(简体) ), rpcUrl, (中文(简体) ), gateway, (中文(简体) ), deployment, (中文(简体) ), view (每个记录和缝合的本地JSON文件,在每个新根上重写)和 publishView (索引器的回放,以发布该视图:存储,加 a view 记录指向它)。 别管了 publishers 追踪每个出版商的名次.
  • 环境变量 RPC_URL 财务报告和审定财务报表 IPFS_GATEWAY 覆盖配置 .
  • INDEXER_KEY 签名缝合屏蔽索引器上传。 如果不设置一个,每个运行都会生成一个新密钥. 没关系,因为索引员的状态 index.db而不是用钥匙.

第一次运行下载了EmbeddingGemma-300m(约300 MB)并索引了一切. 稍后运行恢复自 index.db 而只嵌入改变的东西。 如果你改变了 publishers 或者说 repos,指数重建自己。 如果您切换到不同的模型, 它会拒绝运行; 启动新的 db 文档代替.

沙盒:全部放在你的机器上

npm run sandbox 启动一个 Fangorn , 不写到一个真正的链条或 IPFS :

  • 一份新鲜的广告,合同从 ../contracts (单位:千美元)FANGORN_CONTRACTS_DIR 在其他地方指出这一点);
  • 上传工人和IPFS网关的本地站点,区块储存在 .sandbox/ipfs· ;
  • 给艾利斯、bob、carol和索引器的钥匙.

这需要 anvil 财务报告和审定财务报表 forge在另一个终端:

mkdir -p /tmp/shop && cd /tmp/shop
echo '[{"id":"t1","name":"oak table"}]' > items.json
~/fangorn/indexer/.sandbox/fangorn repo init shop    # the real fangorn CLI, on the sandbox, as alice
~/fangorn/indexer/.sandbox/fangorn add items.json && ~/fangorn/indexer/.sandbox/fangorn commit && ~/fangorn/indexer/.sandbox/fangorn push
AS=bob ~/fangorn/indexer/.sandbox/fangorn …          # as bob

cd ~/fangorn/indexer
node src/run.js .sandbox/app.json                     # index alice's and bob's "shop"
claude mcp add fangorn-sandbox -- node "$PWD/src/mcp.js" "$PWD/.sandbox/app.json" --watch
  • .sandbox/fangorn 使用它自己运行 CLI HOME,所以它从来没有读 ~/.fangorn (你的真钥匙和存储).
  • .sandbox/app.json 是一个开始配置。 任何应用Json与 "network": "sandbox" 在沙盒上运行; 设置 "sandbox" 如果不是沙盒的目录 .sandbox。 。 。 .
  • 每个开始都是有新密钥的新链,所以删除 index.db 当你重新开始时.

node examples/memory.js 在运行的沙盒上运行一个实验:互不相识的特工共享内存,并在其中形成应用. 没有ETH的特工通过中继器写入. 两个应用跟随不同的出版商,一个陌生人重放并验证其中之一,一个引用会变得呆滞. 它会打印出tx,气体,字节并嵌入到每一步后.

node examples/game.js 玩没有游戏服务器的游戏。 每个玩家会写到自己的repo,而棋盘是链条日志上的纯还原器(src/个数.js),裁判员公布检查点(一针加一州散列),旁观者核查时不信任裁判员. node examples/scale.js 8,32,128 衡量作为出版商而成长的东西.

云浮上: 劳动者/

与“工人”相同的索引器 CONFIG var:它所遵循的,在哪个网络上,以及它发表它的观点的地方. 一个代码库,许多部署在不同级别:fangorn. 网络跟随各出版商的再投放,使其可以被发现,而一个应用程序跟随自己的再投放,以索引其内部的记录.

  • 克龙,每分钟. 一个日志读取,通过链条上repo名过滤,询问是否有后续repo移动. 如果有的话,工人会从缝合缝缝缝缝出(src/stitcher.js (英语)改为D1(src/d1.js (韩语)) (中文(简体) ). 记录无向量土地,以及工人AI(EmbeddingGemma-300m,当地指数使用的模型)嵌入了高达每跑100个.
  • 出版取景. 与 CONFIG.publishView,每个新根的视图也会去到 Fangorn: 存储,加一个 view 记录在雷波。 任何地点的静态页面都会被锁上 任何人都可以检查它的缝合 verifyStitch。 。 。 .
  • GET /view.json 这是风景. GET /search?q= 按含义排列记录,将查询嵌入同一种模式,所以一个页面不需要浏览器模式. 其他一切都会去 ASSETS 当一个被绑定时(一个应用的静态站点).
  • POST /mcp mCP 超过可流的 HTTP, 无国籍 : claude mcp add --transport http <name> https://<worker>/mcp它的工具是: search, (中文(简体) ), repos 财务报告和审定财务报表 get。 。 。 .
  • INDEXER_KEY (一个秘密)在工人上传的缝线和视图上签字,并支付他们的毒气费.

按原样部署,没有密码: 复制 工人/wrangler.example.json 互联网档案馆的存檔,存档日期2013-12-02 进入一个依赖于westmarch的项目,然后:

wrangler d1 create my-indexer                      # put its id in wrangler.json
node node_modules/@fangorn-network/westmarch/worker/seed.js index.db > seed.sql && wrangler d1 execute my-indexer --remote --file seed.sql
wrangler deploy
node -e 'import("viem/accounts").then(m => process.stdout.write(m.generatePrivateKey()))' | wrangler secret put INDEXER_KEY   # then fund its address

种子是当地指数的缝合和记录,没有向量. 它保存了“工人”对整个更新日志的首次更新,该日志需要的请求多于允许的运行.

应用程序增加了自己的MCP工具,或用自己的工人来取名替换一个基础工具:

import { indexer } from "@fangorn-network/westmarch/worker";
import { BASE } from "@fangorn-network/westmarch/worker/mcp";
import { publishAs, grantOf, signerFor } from "@fangorn-network/westmarch/worker/publisher";

export default indexer({
    name: "my-app",
    instructions: (gateway) => `How an agent should use my app. Files load from ${gateway}/ipfs/<src>.`,
    tools: [{ name: "publish", description: "…", inputSchema: { … }, async run(args, ctx) { /* ctx: index, fangorn, gateway, auth, origin, env */ } }],
});

worker/publisher.js 在他们签名时,通过他们在fangorn公司给予的赠款,将记录公布在一个人自己的回购中。 腾讯网. 应用中继承诺, 没有他们的钥匙.

把它给经纪人

src/mcp.js 是一个在stdio上说话的MCP服务器. 它有三个工具:

工具
search按含义查找记录( N)semantic),用词:lexical, BM25),或两者兼有(hybrid,默认,由对等等级合并. 它可以通过过滤 publisher, (中文(简体) ), repo 财务报告和审定财务报表 type。每个击中 publisher, repo, id, cid, type, payload, score。 。 。 .
repos列出索引中的内容:每个出版商,repo名和记录计数.
get从 Fangorn (chain and IPFS) 获取一个记录当前版本的活性.

要在一个过程中运行索引器和服务器, 这是最简单的设置 :

claude mcp add westmarch -- node "$PWD/src/mcp.js" "$PWD/app.json" --watch

无 --watch,服务器只读取 index.db和单独的 npm start 不断更新 SQLite的WAL模式让两个进程同时使用文件.

版式

文件
src/stitcher.js (英语)stitcher数字 : update 编号 : trigger 注射剂 store 财务报告和审定财务报表 lens· ; watchHeads: 订阅更新日志
锡克/锡克利特.jssqliteIndex商店 镜头 还有 search,所有文件
市场/商店其他存储 : fangornStore (在Fangorn上缝针)和 memoryStore
src/embed.js (英语)localEmbedder (EmbeddingGemma,在进程中)和 textOf
src/run.js (韩语) 编号 : 缩写/mcp.js运行器和 MCP 服务器,每个都可以用作模块或CLI
src/客户端.js从配置创建 SDK 客户端
src/个数.jsfold: 共享应用程序状态, 相对于 repos 的更新日志, 一个纯的减少器
src/d1.js (韩语) 编号 : 劳动者/cloudflare D1上的索引(商店、镜头、视图、按意义搜索),以及用工人AI、其MCP工具运行该索引的工人,以及个人出版
src/gemma.js (英语)嵌入Gemma:模型、提示、matryoshka分流和向量包装
src/ sandbox.js (中文(简体) )当地沙盒:anvil、合同和 storageServer (上传工人和网关,当地)

镜片什么的 apply(changes)时 changes 实值 [{ publisher, repo, from, to }]一个嵌入器是 { id, embed(texts), query(text) }。 。 。 .

测试

npm test                    # in memory: an in-memory chain, a fake embedder, :memory: SQLite
EMBED_LOCAL=1 npm test      # also runs the real model

src/e2e.test.js (中文(简体) ) 覆盖整个路径:发布,然后跑者跟着它,然后代理搜索并获取MCP.

版本与发布记录

@fangorn-network/westmarch 共发布 45 个版本,首次发布于 2026/09/23;过去 12 个月发布了 45 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.3.0latest2026/11/14今天
0.1.4-dev2026/11/077 天前
0.1.32026/11/077 天前
0.1.3-dev2026/11/077 天前
0.1.22026/11/068 天前
0.1.12026/11/068 天前

关于 @fangorn-network/westmarch 的常见问题

@fangorn-network/westmarch 是什么?

跟着Fangorn重新定位到一个可搜索的索引, 本地或作为Cloudflare Worker, 并为MCP的代理服务

如何安装 @fangorn-network/westmarch?

在项目目录运行 npm install @fangorn-network/westmarch,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 westmarch、westmarch-mcp,可以用 npx westmarch 直接运行。

@fangorn-network/westmarch 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/fangorn-network__westmarch 是否存在。

@fangorn-network/westmarch 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@fangorn-network/westmarch 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22.13。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@fangorn-network/westmarch 可以商用吗?

@fangorn-network/westmarch 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@fangorn-network/westmarch 的下载量有多少?

根据 npm 官方下载统计,@fangorn-network/westmarch 在 2026/10/15 – 2026/11/13 这 30 天内被下载 4,876 次,日均约 163 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@fangorn-network/westmarch 还在维护吗?

最新版本 0.3.0 发布于 2026/11/14(今天);至今共发布 45 个版本,其中过去 12 个月发布了 45 个;首次发布于 2026/09/23。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。