feat:moonair K9a+K9b+M3a tracker 词面/真缝与磁力词面(三役合笔:共享件 spec/README/CHANGELOG/.mbti 三役漂移交缠,分笔须内容手术故合笔如实记)——K9a tracker 词面纯面:protocol tracker.mbt(announce query 构造/解析 + BEP 23 compact 回包编解码,failure reason 原文上抛,RFC 3986 unreserved 字母表=aria2 1.36.0 实录同款)+ 双 oracle 金罐(记录式 tracker 台捕 aria2 真 announce 二十轮 + python 参照逐字节)+ 变异(端口字节序翻 LE)咬中;K9b tracker 真缝与本机 seeder 回环:TrackerSwarm 群册律(announce 刷新/stopped 摘除/自身异排/counts 随 left 翻转)+ TrackerFixture 服务面(对任何请求都回话,解析错走 failure reason;回环政策 ip 恒环回 interval 1)+ bt_announce client(GET→词面解码)——aria2 双侧经本仓 tracker 相认对传落盘字节守恒,K8c 直拨对同场复绿(吸血 torrent 钉死 announce 防直拉破独供语义),变异(异排翻面)当场红;M3a 磁力与 metaurl torrent 词面:parse_magnet(xt 恰一 urn:btih 前缀显式核/btih 40 hex 或 32 RFC 4648 base32 手滚收 20 字节/dn 百分号解码后到者赢/tr 保真累计/越形全拒)+ MetalinkFile::torrent_metaurl 选拿(文档序首个 torrent mediatype),变异(base32 小写折算翻位)咬中。门:check –deny-warn 净 / protocol 51 四后端同数 / 域门清单 188 / native 195(bt 四罐 oracle 罐,驱动 N=3 连绿+双对传字节守恒) / fmt –check 净 / 去敏 0 / 乱码 0
aria2 协议核的 MoonBit 验证实现:下载任务生命周期状态机(aria2 六态)+ 分段续传纯核(随役立)——Bring Your Own Transport:核只出「任务该处 何态、该记什么账」,传输 / 落盘 / RPC 服务随役以缝包接入。目标是验证 MoonBit 在状态机、异步并发、FFI 与持久化上的综合能力,不以一比一复刻或 替代 aria2 为目标。
aria2 思想与公开 RPC 词表致敬(状态词 waiting / active / paused / complete / error / removed)——代码 clean-room 零借鉴:只承接口语义,不承实现 (aria2 为 GPL 系许可,本仓 Apache-2.0)。分层体例承 moonswim(纯核 / 文法 / sim / 缝)。
thy1016/moonair/core
download_fsm.toml
DigestProvider
DigestStream
digest_vocab.toml
PieceCheck
strongest_supported
PieceLedger
SourcePool
Download::new
step(download, event, download_laws())
SegmentMan::new
allocate
mark_persisted
PieceCheck::new
verify
hex_lower
PieceLedger::new
receive_block
record_judged
export_check
SourcePool::new
acquire
succeed
fail
exhausted
thy1016/moonair/core/digest_mooncry
MooncryDigest::new()
&DigestProvider
thy1016/moonair/protocol
metalink_fsm.toml
Metainfo
peer_message_vocab.toml
parse_range
resolve_range
parse_disposition
encode_control_file
decode_control_file
parse_session
parse_metalink_from
metalink_law
decode_bencode
encode_bencode
parse_metainfo
info_hash
encode_handshake
decode_handshake
encode_peer_message
decode_peer_message
PeerFrameBuffer
encode_bitfield
decode_bitfield
PeerSessionFace::new
apply_inbound
may_request
may_serve
tracker_announce_query
parse_tracker_announce
decode_tracker_reply
encode_tracker_reply
TrackerSwarm::new
announce
counts
parse_magnet
MetalinkFile::torrent_metaurl
thy1016/moonair/sim
sim://<号>
drive
persisted_covered
FakeSource::new
FakeSource::open_log
FakeStore::new
bt_drive_pipeline
thy1016/moonair/io
StoragePort
FileStore::open
&StoragePort
thy1016/moonair/bt
bt_download
bt_serve
bt_serve_to
bt_announce
TrackerFixture::new
serve
serve_with
thy1016/moonair/engine
download(spec~, store, sources~, digests~, pieces~, file_hash~)
DownloadSpec::new
DownloadError::Failed(code~, reason~)
plan_metalink_file
DownloadPlan::single
thy1016/moonair/engine/cmd
moonair <url> <out> [connections] [piece_length]
thy1016/moonair/examples/testsrv
testsrv <file> [port] [mode]
thy1016/moonair/rpc
decode_request
encode_result
encode_error
encode_rpc_error
encode_tell_status
gid_form_ok
thy1016/moonair/rpc/server
ServiceConfig::new
contain_path
thy1016/moonair/protocol/xml_milky
parse_metalink
MilkyPull::open
metalink_doc_gate
read_all_events
gen 链(大 gen 宪法):五表——download_fsm.toml(生命周期,满表 吸收)、protocol/metalink_fsm.toml(Metalink 抽取,非满表即拒,N3 解析机律)、core/digest_vocab.toml(摘要算法词表:IANA 名 ↔ 摘要长度 ↔ 择强序)、core/error_code_vocab.toml(aria2 errorCode 词表:原名 ↔ 实录码值)与 protocol/peer_message_vocab.toml(BT 消息词表:ID ↔ 原名 ↔ 定长负载)是唯一事实源 → 主仓 skelgen/airgen(moonair 方言户)发 core/gen.mbt / protocol/metalink_gen.mbt / core/digest_vocab_gen.mbt / core/error_code_vocab_gen.mbt / protocol/peer_message_vocab_gen.mbt(禁手编);印章住 core/types.mbt,律法动作住 core/download_law.mbt / protocol/metalink_law.mbt。 黄金门 = regen 原始形 + fmt ≡ 入库逐字节(主仓仓根 moon test skelgen/airgen, 一表一罐;scratch 目录按表分家——async test 并发互扫)。
protocol/metalink_fsm.toml
core/digest_vocab.toml
core/error_code_vocab.toml
protocol/peer_message_vocab.toml
skelgen/airgen
core/gen.mbt
protocol/metalink_gen.mbt
core/digest_vocab_gen.mbt
core/error_code_vocab_gen.mbt
protocol/peer_message_vocab_gen.mbt
core/types.mbt
core/download_law.mbt
protocol/metalink_law.mbt
moon test skelgen/airgen
核心零依赖:core 无 async、无传输、无存储、无摘要实现(port 住 core, mooncry 住 adapter 子包);时间 = tick 显式入参,钟在核外;全后端 (wasm-gc / wasm / js / native)。
tick
moon check --deny-warn # 零错零警 moon test # native 195 罐:生命周期律 9 + 段账律 8 + 摘要 port 9 + 多源调度 8 + mooncry 合规 3 + 持久化文法 13 + bencode·元信息(K7)12 + 线协议(K8a)7 + 片管线(K8b)12 + tracker 词面(K9a)10 + 群册(K9b)2 + 磁力(M3a)5 + sim 27 + io 4 + bt 真缝(K8c)2 + tracker 回环(K9b)2 + engine 15 + rpc 12 + rpc/server 8 + XML port(M0)7 + metalink 抽取(M1)25(bt 四罐为 oracle 罐:须 aria2 台先行——K8c 直拨对 18901/18902 + K9b 相认对 18903/18904 经罐内 tracker 夹具 18910,整模门经 oracle 驱动跑 bt,见 spec §3.17/§3.19) moon test core --target wasm-gc # 纯包 39 罐(路径形不含子包;wasm / js 同数) moon test core/digest_mooncry --target wasm-gc # 纯包 3 罐(wasm / js 同数) moon test sim --target wasm-gc # 纯包 27 罐(wasm / js 同数) moon test protocol --target wasm-gc # 纯包 51 罐(路径形;wasm / js 同数) moon test protocol/xml_milky --target wasm-gc # 纯包 32 罐(wasm / js 同数) moon test rpc --target wasm-gc # 纯包 12 罐(wasm / js 同数) moon fmt && moon info # 格式与接口面漂移门
路线见 spec §五:阶段 1 最小下载核(HTTP/HTTPS 分段 + 断点续传)→ 阶段 2 RPC 控制面 → 阶段 3 BT 子集 → 阶段 4 BT 扩展 → 阶段 5 FFI 边界。
Apache-2.0(Apache License 2.0),全文见 LICENSE。
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
moonair
aria2 协议核的 MoonBit 验证实现:下载任务生命周期状态机(aria2 六态)+ 分段续传纯核(随役立)——Bring Your Own Transport:核只出「任务该处 何态、该记什么账」,传输 / 落盘 / RPC 服务随役以缝包接入。目标是验证 MoonBit 在状态机、异步并发、FFI 与持久化上的综合能力,不以一比一复刻或 替代 aria2 为目标。
血统明示
aria2 思想与公开 RPC 词表致敬(状态词 waiting / active / paused / complete / error / removed)——代码 clean-room 零借鉴:只承接口语义,不承实现 (aria2 为 GPL 系许可,本仓 Apache-2.0)。分层体例承 moonswim(纯核 / 文法 / sim / 缝)。
包结构
thy1016/moonair/coredownload_fsm.toml生成,36 格显式穷尽)+ 律法动作(touch / record_error)+ 段账纯核 SegmentMan(拆段 / 分配 / 回收 / 置位账本律)+ 摘要 port(M2a:DigestProvider/DigestStream,算法词表digest_vocab.toml生成,含择强序列)+ 分片校验律PieceCheck+ 择强strongest_supported(M2d:多 hash / 多 pieces 取支持中最强,aria2 实录序)+ BT 分片账PieceLedger(K8b:覆盖装配 / 判片回收 / 可外发律)+ 多源调度池SourcePool(M2b:priority / 地点偏好单档提升 / scheme 跳过记账 / 降级换源 / 段 → 源指派)Download::new→step(download, event, download_laws());SegmentMan::new→allocate/mark_persisted;PieceCheck::new→verify/hex_lower;strongest_supported;PieceLedger::new→receive_block/record_judged/export_check;SourcePool::new→acquire/succeed/fail/exhaustedthy1016/moonair/core/digest_mooncryMooncryDigest::new()→&DigestProviderthy1016/moonair/protocolmetalink_fsm.toml生成 + 律法 22 动作 + 类型墙 MetalinkDoc + 泛型驱动)+ bencode 编解码与 BT 元信息(K7:BEP 3 严格面 + 正典编码 +Metainfo类型墙 + info_hash 取原始子串禁重编码,SHA-1 经摘要 port)+ BT 线协议(K8a:握手 / 九种消息编解码 / 分帧缓冲帧长帽 / 位图两律,消息词表peer_message_vocab.toml生成)+ 会话面(K8b:BEP 3 初态互 choke,请求只发自未被抓,服务门 = 未掐 + interested + 可外发片)+ tracker 词面(K9a:BEP 3 announce query 构造 / 解析 + BEP 23 compact 回包编解码,failure reason 原文上抛)+ 群册(K9b:TrackerSwarm 记账律——announce 刷新 / stopped 摘除 / 自身异排 / counts 随 left 翻转)+ 磁力与 metaurl torrent 词面(M3a:parse_magnet——xt 恰一 urn:btih / hex·base32 双形 / dn 百分号解码 / tr 累计;torrent_metaurl 选拿)parse_range/resolve_range/parse_disposition/encode_control_file/decode_control_file/parse_session/parse_metalink_from/metalink_law/decode_bencode/encode_bencode/parse_metainfo/info_hash/encode_handshake/decode_handshake/encode_peer_message/decode_peer_message/PeerFrameBuffer/encode_bitfield/decode_bitfield/PeerSessionFace::new→apply_inbound/may_request/may_serve/tracker_announce_query/parse_tracker_announce/decode_tracker_reply/encode_tracker_reply/TrackerSwarm::new→announce/counts/parse_magnet/MetalinkFile::torrent_metaurlthy1016/moonair/simsim://<号>)+ BT 片管线参照驱动(K8b:做种/吸血 + 坏块回收重下 + 部分种 / choked 敌形,无进展停轮)drive/persisted_covered/FakeSource::new/FakeSource::open_log/FakeStore::new/bt_drive_pipelinethy1016/moonair/ioStoragePort参考实现 FileStore(@fs 定位写 / 刷穿 / 定位恰读(终验读回)/ 控制文件 v1 原子持久;OpenOrCreate 续传语义)FileStore::open→&StoragePortthy1016/moonair/btbt_download(拨连下载:握手核 info_hash、interested 立即发、文档序逐块请求等覆盖、边写边验判败回收)+ 服务内核一体两形bt_serve(听连)/bt_serve_to(拨连;aria2 出站 MSE-first 降级随机,上传 e2e 方向反转拨其监听口)+ tracker 真缝(K9b:TrackerFixture 夹具——@http.Server,对任何请求都回话,回环政策 ip 恒 127.0.0.1 / interval 1;bt_announceclient——GET tracker → 词面解码)bt_download/bt_serve/bt_serve_to/TrackerFixture::new→serve/serve_with/bt_announcethy1016/moonair/enginedownload(spec~, store, sources~, digests~, pieces~, file_hash~)/DownloadSpec::new/DownloadError::Failed(code~, reason~)/plan_metalink_file/DownloadPlan::singlethy1016/moonair/engine/cmdmoonair <url> <out> [connections] [piece_length]thy1016/moonair/examples/testsrvtestsrv <file> [port] [mode]thy1016/moonair/rpcdecode_request/encode_result/encode_error/encode_rpc_error/encode_tell_status/gid_form_okthy1016/moonair/rpc/serverServiceConfig::new/serve/contain_paththy1016/moonair/protocol/xml_milkyparse_metalink(文本 → 类型化下载描述)MilkyPull::open/metalink_doc_gate/read_all_events/parse_metalinkgen 链(大 gen 宪法):五表——
download_fsm.toml(生命周期,满表 吸收)、protocol/metalink_fsm.toml(Metalink 抽取,非满表即拒,N3 解析机律)、core/digest_vocab.toml(摘要算法词表:IANA 名 ↔ 摘要长度 ↔ 择强序)、core/error_code_vocab.toml(aria2 errorCode 词表:原名 ↔ 实录码值)与protocol/peer_message_vocab.toml(BT 消息词表:ID ↔ 原名 ↔ 定长负载)是唯一事实源 → 主仓skelgen/airgen(moonair 方言户)发core/gen.mbt/protocol/metalink_gen.mbt/core/digest_vocab_gen.mbt/core/error_code_vocab_gen.mbt/protocol/peer_message_vocab_gen.mbt(禁手编);印章住core/types.mbt,律法动作住core/download_law.mbt/protocol/metalink_law.mbt。 黄金门 = regen 原始形 + fmt ≡ 入库逐字节(主仓仓根moon test skelgen/airgen, 一表一罐;scratch 目录按表分家——async test 并发互扫)。核心零依赖:core 无 async、无传输、无存储、无摘要实现(port 住 core, mooncry 住 adapter 子包);时间 =
tick显式入参,钟在核外;全后端 (wasm-gc / wasm / js / native)。测试门
演进位
路线见 spec §五:阶段 1 最小下载核(HTTP/HTTPS 分段 + 断点续传)→ 阶段 2 RPC 控制面 → 阶段 3 BT 子集 → 阶段 4 BT 扩展 → 阶段 5 FFI 边界。
许可证
Apache-2.0(Apache License 2.0),全文见 LICENSE。