# @fangorn-network/westmarch 中文文档

规范地址：https://npmcn.com/package/%40fangorn-network/westmarch/

版本：0\.3\.0
npm 元数据更新时间：2026-11-13T21:47:20.923Z
中文译文更新时间：2026-11-14T09:52:01.194Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40fangorn-network/westmarch
原文对照：https://npmcn.com/package/%40fangorn-network/westmarch/?lang=original
项目主页：https://github.com/fangorn-network/westmarch#readme
源码仓库：https://github.com/fangorn-network/westmarch

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：85.4 kB，23 个文件
- 模块格式：ES Module
- TypeScript 类型：未声明
- Node.js 要求：\>=22\.13
- 运行依赖：5 个
- 首次发布：2026-09-22T22:15:15.092Z
- 最新版本发布：2026-11-13T21:47:20.580Z
- 近 30 天下载量：4876（2026-10-15 至 2026-11-13，npm 官方下载统计）
- 已发布版本数：45（近 12 个月 45 个）

## 中文简介

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

## 安装

```sh
npm install @fangorn-network/westmarch
```

也可以使用：`pnpm add @fangorn-network/westmarch`、`yarn add @fangorn-network/westmarch`、`bun add @fangorn-network/westmarch`

## README

# 西马赫

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

如何运作:

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

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

## 运行它

```sh
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`数字 :

```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`在另一个终端:

```sh
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](https://npmcn.com/package/%40fangorn-network/westmarch/src/fold.js)),裁判员公布检查点(一针加一州散列),旁观者核查时不信任裁判员. `node examples/scale.js 8,32,128` 衡量作为出版商而成长的东西.

## 云浮上: [劳动者/](https://npmcn.com/package/%40fangorn-network/westmarch/worker/)

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

-   **克龙,每分钟.** 一个日志读取,通过链条上repo名过滤,询问是否有后续repo移动. 如果有的话,工人会从缝合缝缝缝缝出([src/stitcher.js (英语)](https://npmcn.com/package/%40fangorn-network/westmarch/src/stitcher.js)改为D1([src/d1.js (韩语)](https://npmcn.com/package/%40fangorn-network/westmarch/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](https://npmcn.com/package/%40fangorn-network/westmarch/worker/wrangler.example.json) 进入一个依赖于westmarch的项目,然后:

```sh
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工具,或用自己的工人来取名替换一个基础工具:

```js
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) 获取一个记录当前版本的活性. |

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

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

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

## 版式

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

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

## 测试

```sh
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 (中文(简体) )](https://npmcn.com/package/%40fangorn-network/westmarch/src/e2e.test.js) 覆盖整个路径:发布,然后跑者跟着它,然后代理搜索并获取MCP.

## 常见问题

### @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 和提交记录判断。

