# @fleetmesh/textile 中文文档

规范地址：https://npmcn.com/package/%40fleetmesh/textile/

版本：0\.2\.1
npm 元数据更新时间：2026-11-01T02:12:34.391Z
中文译文更新时间：2026-11-01T04:11:00.705Z
软件包许可：CC0-1\.0

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

原始 npm 页面：https://www.npmjs.com/package/%40fleetmesh/textile
原文对照：https://npmcn.com/package/%40fleetmesh/textile/?lang=original

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

- 包体积（解压后）：1.1 MB，165 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：5 个
- 首次发布：2026-10-31T17:10:45.476Z
- 最新版本发布：2026-11-01T02:12:34.224Z
- 已发布版本数：4（近 12 个月 4 个）

## 中文简介

FleetMesh 8层内容寻址纺织品层次结构（纤维，股线，线轴，织物，被子，西服，Fit, Tombstone）， 1,024字节BLAKE3-Bao Merkle树，BIP-340/NIP-07声明签名，以及@fleetmesh/leaf neg熵桥

## 安装

```sh
npm install @fleetmesh/textile
```

也可以使用：`pnpm add @fleetmesh/textile`、`yarn add @fleetmesh/textile`、`bun add @fleetmesh/textile`

## README

# @fleetmesh /纺织

的FleetMesh **纺织** TypeScript中的8层内容寻址数据平面：

`Fiber` → `Strand` → `Spool` → `Fabric` → `Quilt` → `Suit` → `Fit` → `Tombstone`

而 [`@fleetmesh/leaf`](https://www.npmjs.com/package/@fleetmesh/leaf) 提供了介导的WebSocket传输、礼品包装的DIDComm v2消息传递和NIP-77 Negentropy wire协议； `@fleetmesh/textile` 提供了通用的内容寻址数据结构，1024字节的叶子包Merkle dag，确定性CRDT合并，6级隐私阶梯强制执行，XChaCha20-Poly1305分片密封，可插拔存储库和NIP-77 Negentropy集对调，跨任何FleetMesh应用程序(`MeshTube`， `MeshDrive`， `MeshDocs`， `MeshChat`， `MeshGit`）。

依赖项限制为 `@fleetmesh/leaf` 被审计的人 `@noble/*` 和 `@scure/base` 密码库，完全固定。

* * *

## 安装

```sh
npm install @fleetmesh/textile @fleetmesh/leaf
```

顶级命名导入和 `@fleetmesh/leaf`支持style命名空间导入：

```ts
import {
  MediaFiber,
  MetadataFiber,
  MediaStrand,
  PlaylistFabric,
  SovereignQuilt,
  FiberVaultRepository,
  reconcileTextileVaults,
  utf8,
} from '@fleetmesh/textile';

// Or via modular namespaces:
import { bao, canonical, primitives, sealing, signatures, storage, leafBridge } from '@fleetmesh/textile';
```

* * *

## 快速入门

```ts
import {
  createSchnorrTextileSigner,
  FiberVaultRepository,
  IdentityFiber,
  MediaFiber,
  MediaStrand,
  MetadataFiber,
  PlaylistFabric,
  reconcileTextileVaults,
  SealedShardFiber,
  SovereignQuilt,
  TextileQuilt,
  utf8,
} from '@fleetmesh/textile';

const skHex = '11'.repeat(32);
const signer = createSchnorrTextileSigner(skHex);
const alice = { identity_id: 'alice', did: signer.signerDid, handle: 'alice' };

// 1. Layer 1 (Fiber): Content-addressed atomic byte sequences (1024B leaf Bao Merkle root)
const videoFiber = MediaFiber.fromBytes(utf8('video-payload'), 'video/mp4', { author: alice });
const metaFiber = new MetadataFiber({ title: 'Hello Mesh', synopsis: 'Intro video', content_domain: 'video' });

// 2. Layer 2 (Strand): Role-tagged Fiber references spun into a versioned asset
const strand = new MediaStrand({
  id: 'strand-hello-mesh',
  title: 'Hello Mesh',
  author: alice,
  fibers: [videoFiber.toStrandRef('primary'), metaFiber.toStrandRef('metadata')],
});

// 3. Layer 4 (Fabric): Deterministic CRDT collection of Strands
const playlist = PlaylistFabric.create({
  fabricId: 'fabric-featured',
  owner: alice,
  title: 'Featured Videos',
  strands: [strand.toManifest()],
});

// 4. Layer 5 (Quilt): Stitch Fabrics, IdentityFibers, and XChaCha20-Poly1305 SealedShardFibers
const vaultKey = new Uint8Array(32).fill(0x42);
const sealedHistory = SealedShardFiber.sealWithKey(
  'watch_history',
  utf8(JSON.stringify({ watched: [strand.id] })),
  vaultKey,
);
const idFiber = IdentityFiber.fromProfilePayload(alice.did, { handle: 'alice' });

const sovereignQuilt = new SovereignQuilt({
  id: 'quilt-alice',
  author: alice,
  identityFibers: [idFiber.toStrandRef('primary_asset')],
  fabrics: [playlist],
  shardFibers: [sealedHistory.toQuiltShardRef()],
});

// Project a public Quilt view (automatically strips private fabrics and sealed shards)
const publicQuilt = sovereignQuilt.projectForAudience('public');
const sigEnvelope = publicQuilt.signWithKey(skHex);

// 5. Persist primitives into a content-addressed Vault and reconcile with a remote peer via NIP-77
const aliceVault = new FiberVaultRepository();
const bobVault = new FiberVaultRepository();

await aliceVault.putPrimitive(videoFiber);
await aliceVault.putPrimitive(metaFiber);
await aliceVault.putPrimitive(strand);
await aliceVault.putPrimitive(playlist);
await aliceVault.putPrimitive(publicQuilt);

const diff = await reconcileTextileVaults(bobVault, aliceVault);
for (const root of diff.needRoots) {
  const bytes = await aliceVault.getFiber(root);
  if (bytes) await bobVault.putFiber(bytes, { expectedRoot: root });
}

// Rehydrate and verify typed primitives from the vault
const hydratedQuilt = await bobVault.getPrimitive(publicQuilt.root, TextileQuilt.fromManifest);
console.log(hydratedQuilt?.verify(), hydratedQuilt?.verifySignature(sigEnvelope)); // true, true
```

* * *

## 八层纺织层次结构

| 层 | 基类 | 规范MIME类型 | 子类&角色 |
| :-- | :-- | :-- | :-- |
| **1\. 纤维** | `TextileFiber` | `application/vnd.fleetmesh.fiber+octet-stream` | 原子内容寻址字节序列(`1024`\-字节叶包默克尔树)。子类: `MediaFiber`， `RawBlobFiber`， `MetadataFiber` （`JsonMetadataFiber`)， `TimedFiber` （`MTF1`)， `InteractionFiber`， `IdentityFiber`， `SealedShardFiber` （`MTS1` XChaCha20-Poly1305), `ChunkedFiber` (高度10 `1 MiB` macro-chunk子树)。 |
| **2\. 链** | `TextileStrand` | `application/vnd.fleetmesh.strand+json` | 旋转role-tagged `TextileFiber` 引用(`FiberRefCollection`)转化为版本化的语义资产(`strand_root`）. 子类: `MediaStrand`， `SubtitleStrand`， `CommentStrand`， `InteractionStrand`， `ScrobbleStrand`， `DocumentStrand`， `CodeRepoStrand`， `ArcadeRomStrand`， `ProductStrand`， `GroupStrand`， `TombstoneNoticeStrand`. |
| **3\. 线轴** | `TextileSpool` | `application/vnd.fleetmesh.spool+json` | 的实时追加缓冲区 `TimedFiber`s (`MTF1`)，由BIP-340签署的操作链(`SignedSpoolOp`）. 调用 `.cut()` 将活动窗口压缩成 `FilamentStrand`， `SpoolLengthStrand`, `SpoolCutFabric`. |
| **4\. 织物** | `TextileFabric` | `application/vnd.fleetmesh.fabric+json` | 命令(`append`)或键索引(`key`)的CRDT集合 `TextileStrand`年代, `FabricDelimiter`年代, `FabricInteraction`s (`fabric_root`）. 子类: `PlaylistFabric`， `FeedFabric`， `CatalogFabric`， `SubtitleLocalizationFabric`， `ViewLedgerFabric`， `TombstoneLedgerFabric`， `VaultFabric`， `CircleFeedFabric`， `ActivityFabric`. |
| **5\. 被子** | `TextileQuilt` | `application/vnd.fleetmesh.quilt+json` | 缝合一个身份或圆圈 `TextileFabric`年代, `IdentityFiber`年代, `SealedShardFiber`S，和生活 `Spindle` 指向观众范围内的投影(`self`， `circle`， `public`)由 `quilt_root`． 子类: `SovereignQuilt`， `PublishedQuiltView`， `GroupQuilt`. |
| **6\. 西装** | `TextileSuit` | `application/vnd.fleetmesh.suit+json` | 自包含的 `.fiberpack` v2 (`MTFP1\n`)可移植的主权身份包(`suit_root`)用于跨设备同步和Sneakernet / BLE / QR / USB传输。子类: `SovereignIdentitySuit`. |
| **7\. 适合** | `TextileFit` | `application/vnd.fleetmesh.fit+json` | 内容寻址运行时策略引擎(`fit_root`)管理存储配额、自动固定、墓碑边界强制执行和密封碎片泄漏预防。 |
| **8\. 墓碑上** | `TextileTombstone` | `application/vnd.fleetmesh.tombstone+json` | 跨层收放原语(`PreemptiveTombstone`， `RetroactiveTombstone`， `LocalCacheTombstone`， `EphemeralTtlTombstone`， `FederatedQuarantineTombstone`， `SupersededRevisionTombstone`， `KeyRevocationTombstone`)索引为 `TombstoneLedgerRepository`. |

* * *

## 跨层对称和核心不变量

每个层类都继承自 `AbstractTextilePrimitive<TManifest>` (和容器层继承自 `CompositeTextilePrimitive<TManifest>`):

-   **对称序列化和水化**：每一层提供 `.toManifest()`， `.toCanonicalBytes()`， `.toCanonicalJson()`，静态 `Class.fromManifest(manifest)` 水合作用,加上 `vault.putPrimitive(primitive)` 和 `vault.getPrimitive(root, Class.fromManifest)`.
-   **Everything-is-a-Fiber投影**： `primitive.toManifestFiber()` 和 `TextileFiber.fromPrimitive(primitive)` 将任何更高层的清单投影到内容寻址的 `TextileFiber` 谁的 `root === primitive.root`.
-   **递归默克尔DAG遍历**： `composite.childRefs()`， `composite.childRoots()`， `composite.collectClosureRoots(resolver)`， `composite.verifySubtree(resolver)`， `composite.findTombstonedChildren(predicate)`, `composite.evaluateClosureFit(fit)`.
-   **单调的6级隐私梯**： `public` → `peer` → `circle` → `mutual` → `link` → `private`． 调用 `primitive.escalatePrivacyRung(next)` 棘轮隐私向上和投掷 `PrivacyEscalationError` 任何缓和局势的企图。
-   **确定性CRDT合并**： `strand.merge(remote)`， `fabric.merge(remote)`, `quilt.merge(remote)` 满足交换性、结合性和幂等性(`merge(A, B).root === merge(B, A).root`）。
-   **双域BIP-340 Schnorr签名**： `primitive.signWithKey(skHex)`， `primitive.sign(signer)`, `primitive.verifySignature(envelope)` 同时支持 `fleetmesh.textile/v1` 和 `meshtube.textile/v1` 域以及NIP-01类`30899` 可替换的事件。
-   **类型错误层次结构**：所有域错误继承自 `TextileError` （`BaoVerificationError`， `PrivacyEscalationError`， `SchemaValidationError`， `SpoolStateError`）。

* * *

## 一致性和多引擎测试

每一个原语 `@fleetmesh/textile` 对冻结的跨语言载体进行测试 `vectors/textile-v1.json` 并针对Python 3参考实现进行了字节对字节的验证，以及跨 **node . js**， **铬**， **火狐**, **WebKit** 通过Vitest浏览器模式在剧作家：

```sh
npm install
npm run typecheck      # Strict TypeScript (erasableSyntaxOnly, noUncheckedIndexedAccess)
npm run build          # Emit dist/*.js and dist/*.d.ts
npm test               # Node.js unit, conformance, audit-guard & integration suites
npm run test:coverage  # V8 coverage report across src/ (97%+ line coverage)
```

要同时在Node.js、Chromium、Firefox和WebKit上运行完整的套件：

```sh
npm run browsers       # Once: install Chromium, Firefox, and WebKit
npm run test:all       # Run all suites across Node + 3 browser engines
```

## 常见问题

### @fleetmesh/textile 是什么？

FleetMesh 8层内容寻址纺织品层次结构（纤维，股线，线轴，织物，被子，西服，Fit, Tombstone）， 1,024字节BLAKE3-Bao Merkle树，BIP-340/NIP-07声明签名，以及@fleetmesh/leaf neg熵桥

### 如何安装 @fleetmesh/textile？

在项目目录运行 npm install @fleetmesh/textile，或使用 pnpm add / yarn add / bun add。

### @fleetmesh/textile 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @fleetmesh/textile 支持 ESM 还是 CommonJS？

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

### @fleetmesh/textile 可以商用吗？

@fleetmesh/textile 使用 CC0-1\.0 许可。作者放弃著作权，可不受限制地使用。以上为概括，不构成法律意见，请以许可原文为准。

### @fleetmesh/textile 还在维护吗？

最新版本 0\.2\.1 发布于 2026/11/01（2 天前）；至今共发布 4 个版本，其中过去 12 个月发布了 4 个；首次发布于 2026/11/01。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

