prts-terrarchive 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/GAME_ASSETS.md +26 -0
- package/LICENSE +21 -0
- package/README.en.md +274 -0
- package/README.md +423 -0
- package/THIRD_PARTY_NOTICES.md +61 -0
- package/bin/bake-rhine-details.mjs +34 -0
- package/bin/install.js +273 -0
- package/bin/pack-map-assets.mjs +110 -0
- package/bin/preview-rhine.mjs +71 -0
- package/bin/rhine-detail-baker.ts +84 -0
- package/contracts/cloud_tools_v1.schema.json +243 -0
- package/contracts/corpus_i18n_v1.schema.json +179 -0
- package/contracts/corpus_tools_v1.schema.json +1801 -0
- package/cordis.patch.yml +32 -0
- package/docs/endfield-official-i18n.md +103 -0
- package/lib/client.js +3912 -0
- package/lib/endfield-map/map.js.br +0 -0
- package/lib/endfield-map/map.js.gz +0 -0
- package/lib/endfield-map/resources/map-00b0d0744a1b4404.json.br +0 -0
- package/lib/endfield-map/resources/map-00b0d0744a1b4404.json.gz +0 -0
- package/lib/endfield-map/resources/map-01616f534aaaeca1.png +0 -0
- package/lib/endfield-map/resources/map-1562e0dff4be3d23.png +0 -0
- package/lib/endfield-map/resources/map-160fe040f080f6a3.png +0 -0
- package/lib/endfield-map/resources/map-17b9d8be25dc2b39.json.br +0 -0
- package/lib/endfield-map/resources/map-17b9d8be25dc2b39.json.gz +0 -0
- package/lib/endfield-map/resources/map-1c4245c4e8b80c43.json.br +0 -0
- package/lib/endfield-map/resources/map-1c4245c4e8b80c43.json.gz +0 -0
- package/lib/endfield-map/resources/map-1d30baaaef3e29cc.png +0 -0
- package/lib/endfield-map/resources/map-21a61386af79cd12.json.br +0 -0
- package/lib/endfield-map/resources/map-21a61386af79cd12.json.gz +0 -0
- package/lib/endfield-map/resources/map-24b920b8dab49b44.json.br +0 -0
- package/lib/endfield-map/resources/map-24b920b8dab49b44.json.gz +0 -0
- package/lib/endfield-map/resources/map-26caf8d71247abb7.png +0 -0
- package/lib/endfield-map/resources/map-2729942c89545e73.json.br +0 -0
- package/lib/endfield-map/resources/map-2729942c89545e73.json.gz +0 -0
- package/lib/endfield-map/resources/map-29063a9802f67014.json.br +0 -0
- package/lib/endfield-map/resources/map-29063a9802f67014.json.gz +0 -0
- package/lib/endfield-map/resources/map-2f35d09a3ab60a63.json.br +0 -0
- package/lib/endfield-map/resources/map-2f35d09a3ab60a63.json.gz +0 -0
- package/lib/endfield-map/resources/map-2f98a873da81425e.json.br +0 -0
- package/lib/endfield-map/resources/map-2f98a873da81425e.json.gz +0 -0
- package/lib/endfield-map/resources/map-3ab978ae44190f80.json.br +0 -0
- package/lib/endfield-map/resources/map-3ab978ae44190f80.json.gz +0 -0
- package/lib/endfield-map/resources/map-3b62c80d14208902.json.br +0 -0
- package/lib/endfield-map/resources/map-3b62c80d14208902.json.gz +0 -0
- package/lib/endfield-map/resources/map-3d486e887ae121ac.png +0 -0
- package/lib/endfield-map/resources/map-418dc4865608fce5.png +0 -0
- package/lib/endfield-map/resources/map-4366b84607335f76.json.br +0 -0
- package/lib/endfield-map/resources/map-4366b84607335f76.json.gz +0 -0
- package/lib/endfield-map/resources/map-4371259d3ab7aac7.png +0 -0
- package/lib/endfield-map/resources/map-48dcc0fd55e13f7f.png +0 -0
- package/lib/endfield-map/resources/map-4aabda0e41197570.json.br +0 -0
- package/lib/endfield-map/resources/map-4aabda0e41197570.json.gz +0 -0
- package/lib/endfield-map/resources/map-505f5687b287043c.json.br +0 -0
- package/lib/endfield-map/resources/map-505f5687b287043c.json.gz +0 -0
- package/lib/endfield-map/resources/map-5177e9d1d46f47e2.png +0 -0
- package/lib/endfield-map/resources/map-51baeb59b7f8c28d.png +0 -0
- package/lib/endfield-map/resources/map-549561b46e621874.png +0 -0
- package/lib/endfield-map/resources/map-56c6a0bef799c8dc.json.br +0 -0
- package/lib/endfield-map/resources/map-56c6a0bef799c8dc.json.gz +0 -0
- package/lib/endfield-map/resources/map-5a6963909423b674.png +0 -0
- package/lib/endfield-map/resources/map-5a9c533c0552d7b7.png +0 -0
- package/lib/endfield-map/resources/map-5d20ae9ffa9a02b0.png +0 -0
- package/lib/endfield-map/resources/map-626c8847393f60bf.png +0 -0
- package/lib/endfield-map/resources/map-63d43cbec3bed3b8.png +0 -0
- package/lib/endfield-map/resources/map-661b6ec56e722574.png +0 -0
- package/lib/endfield-map/resources/map-6ddd384eca190828.png +0 -0
- package/lib/endfield-map/resources/map-6fc1aa9144f8156c.json.br +0 -0
- package/lib/endfield-map/resources/map-6fc1aa9144f8156c.json.gz +0 -0
- package/lib/endfield-map/resources/map-738ebaa002c33cfc.png +0 -0
- package/lib/endfield-map/resources/map-758c13be6085ec07.json.br +0 -0
- package/lib/endfield-map/resources/map-758c13be6085ec07.json.gz +0 -0
- package/lib/endfield-map/resources/map-78929f26d6844509.png +0 -0
- package/lib/endfield-map/resources/map-7f09c142950a0f74.png +0 -0
- package/lib/endfield-map/resources/map-8385e11f39e1a51c.json.br +0 -0
- package/lib/endfield-map/resources/map-8385e11f39e1a51c.json.gz +0 -0
- package/lib/endfield-map/resources/map-881343926a568f27.json.br +0 -0
- package/lib/endfield-map/resources/map-881343926a568f27.json.gz +0 -0
- package/lib/endfield-map/resources/map-8d1ade3f01d952b0.png +0 -0
- package/lib/endfield-map/resources/map-8fef3495bb7ed60f.png +0 -0
- package/lib/endfield-map/resources/map-907a7ecf8a0ce352.png +0 -0
- package/lib/endfield-map/resources/map-9113d5951c4db903.json.br +0 -0
- package/lib/endfield-map/resources/map-9113d5951c4db903.json.gz +0 -0
- package/lib/endfield-map/resources/map-94ad6634436224e3.json.br +0 -0
- package/lib/endfield-map/resources/map-94ad6634436224e3.json.gz +0 -0
- package/lib/endfield-map/resources/map-99722e61da5f3e53.png +0 -0
- package/lib/endfield-map/resources/map-9be9596cc059abe3.png +0 -0
- package/lib/endfield-map/resources/map-a4db9a4763e47fbf.png +0 -0
- package/lib/endfield-map/resources/map-a4e8ef07159997e7.json.br +0 -0
- package/lib/endfield-map/resources/map-a4e8ef07159997e7.json.gz +0 -0
- package/lib/endfield-map/resources/map-ab35d06875ee418f.png +0 -0
- package/lib/endfield-map/resources/map-ac51bb3e7623cd8b.png +0 -0
- package/lib/endfield-map/resources/map-ac830a66296bc83a.png +0 -0
- package/lib/endfield-map/resources/map-b3fd04209718e55e.json.br +0 -0
- package/lib/endfield-map/resources/map-b3fd04209718e55e.json.gz +0 -0
- package/lib/endfield-map/resources/map-b8164f1af7c5d895.png +0 -0
- package/lib/endfield-map/resources/map-b8cde93b965384d8.json.br +0 -0
- package/lib/endfield-map/resources/map-b8cde93b965384d8.json.gz +0 -0
- package/lib/endfield-map/resources/map-b8e48511502e0e8d.json.br +0 -0
- package/lib/endfield-map/resources/map-b8e48511502e0e8d.json.gz +0 -0
- package/lib/endfield-map/resources/map-bfc58277d5ba649d.png +0 -0
- package/lib/endfield-map/resources/map-c013f82048c6891a.png +0 -0
- package/lib/endfield-map/resources/map-c49c947841ae4ab5.json.br +0 -0
- package/lib/endfield-map/resources/map-c49c947841ae4ab5.json.gz +0 -0
- package/lib/endfield-map/resources/map-c4d1b1c6d6706c81.json.br +0 -0
- package/lib/endfield-map/resources/map-c4d1b1c6d6706c81.json.gz +0 -0
- package/lib/endfield-map/resources/map-c607f8b4c8ad8967.png +0 -0
- package/lib/endfield-map/resources/map-c6f20276b8781326.json.br +0 -0
- package/lib/endfield-map/resources/map-c6f20276b8781326.json.gz +0 -0
- package/lib/endfield-map/resources/map-d51adf5952af1e8e.png +0 -0
- package/lib/endfield-map/resources/map-d695eface22f8b74.json.br +0 -0
- package/lib/endfield-map/resources/map-d695eface22f8b74.json.gz +0 -0
- package/lib/endfield-map/resources/map-db11d394456a7465.png +0 -0
- package/lib/endfield-map/resources/map-dcc4d218581e3dc6.png +0 -0
- package/lib/endfield-map/resources/map-ddd43dbb8ab8a4e3.json.br +0 -0
- package/lib/endfield-map/resources/map-ddd43dbb8ab8a4e3.json.gz +0 -0
- package/lib/endfield-map/resources/map-defe5db7dabf748a.png +0 -0
- package/lib/endfield-map/resources/map-e1aeb833e22520aa.json.br +0 -0
- package/lib/endfield-map/resources/map-e1aeb833e22520aa.json.gz +0 -0
- package/lib/endfield-map/resources/map-e25ee9af6e493500.png +0 -0
- package/lib/endfield-map/resources/map-e3824082cd6f747d.json.br +0 -0
- package/lib/endfield-map/resources/map-e3824082cd6f747d.json.gz +0 -0
- package/lib/endfield-map/resources/map-e694a91e630b1bd6.png +0 -0
- package/lib/endfield-map/resources/map-eaa93af79d12a87d.png +0 -0
- package/lib/endfield-map/resources/map-ec9575ee65d7766f.json.br +0 -0
- package/lib/endfield-map/resources/map-ec9575ee65d7766f.json.gz +0 -0
- package/lib/endfield-map/resources/map-ede421a329dc78a4.png +0 -0
- package/lib/endfield-map/resources/map-eff3bce8f6888fc5.json.br +0 -0
- package/lib/endfield-map/resources/map-eff3bce8f6888fc5.json.gz +0 -0
- package/lib/endfield-map/resources/map-fb5f4a59a181452c.png +0 -0
- package/lib/endfield-map/resources/map-fdeaa17eeba90d8e.json.br +0 -0
- package/lib/endfield-map/resources/map-fdeaa17eeba90d8e.json.gz +0 -0
- package/lib/rhine/assets/archive-assembly.glb +0 -0
- package/lib/rhine/assets/archive-cassette.glb +0 -0
- package/lib/rhine/fonts/MiSans-Bold.woff2 +0 -0
- package/lib/rhine/fonts/MiSans-Demibold.woff2 +0 -0
- package/lib/rhine/fonts/MiSans-Light.woff2 +0 -0
- package/lib/rhine/fonts/MiSans-Regular.woff2 +0 -0
- package/lib/rhine/fonts/MiSans-license.pdf +0 -0
- package/lib/rhine/fonts/NOTICE.txt +6 -0
- package/lib/rhine/licenses/RhineLabUI-MIT.txt +21 -0
- package/lib/rhine/licenses/entities-BSD-2-Clause.txt +11 -0
- package/lib/rhine/licenses/linkify-it-MIT.txt +22 -0
- package/lib/rhine/licenses/markdown-it-MIT.txt +22 -0
- package/lib/rhine/licenses/mdurl-MIT.txt +45 -0
- package/lib/rhine/licenses/punycode.js-MIT.txt +20 -0
- package/lib/rhine/licenses/rolling-number-MIT.txt +21 -0
- package/lib/rhine/licenses/three-MIT.txt +21 -0
- package/lib/rhine/licenses/uc.micro-MIT.txt +20 -0
- package/lib/rhine/rhine.css +1 -0
- package/lib/rhine/rhine.js +5106 -0
- package/lib/skins/common.css +31 -0
- package/lib/skins/endfield-aic.css +141 -0
- package/lib/skins/prts-agent.css +136 -0
- package/lib/skins/rhine-lab.css +70 -0
- package/package.json +112 -0
- package/presets/definition.js +26 -0
- package/presets/prts/agent.cordis.yml +25 -0
- package/presets/prts/preset.yml +3 -0
- package/presets/register.js +86 -0
- package/resources/entity-routing.json +21 -0
- package/skills/prts-investigation/SKILL.md +121 -0
- package/skills/prts-retrieval/SKILL.md +35 -0
- package/skills/prts-retrieval/references/cloud-tools.md +13 -0
- package/skills/prts-retrieval/references/diagnostics.md +15 -0
- package/skills/prts-retrieval/references/local-tools.md +24 -0
- package/skills/prts-retrieval/references/module-arknights.md +23 -0
- package/skills/prts-retrieval/references/module-dual.md +15 -0
- package/skills/prts-retrieval/references/module-endfield.md +21 -0
- package/skills/prts-retrieval/references/retrieval-process.md +44 -0
- package/skills/prts-retrieval/references/retrieval-recipes-dual.md +34 -0
- package/skills/prts-retrieval/references/retrieval-recipes-endfield.md +37 -0
- package/skills/prts-retrieval/references/retrieval-recipes.md +39 -0
- package/skills/prts-retrieval/references/tools-runtime.md +48 -0
- package/skills/prts-retrieval/references/wiki-schema.md +38 -0
- package/src/archive-presentation.js +287 -0
- package/src/cloud-projection.js +124 -0
- package/src/cloud.js +498 -0
- package/src/entity-recognizer.js +311 -0
- package/src/entity-routing.js +82 -0
- package/src/evidence-state.js +332 -0
- package/src/i18n.js +365 -0
- package/src/index.js +1261 -0
- package/src/installer.js +1362 -0
- package/src/investigation-review.js +87 -0
- package/src/investigation-store.js +579 -0
- package/src/investigation-tools.js +113 -0
- package/src/localization-format.js +23 -0
- package/src/manual-search.js +103 -0
- package/src/read.js +1097 -0
- package/src/release-compatibility.js +73 -0
- package/src/release-watch.js +40 -0
- package/src/search-projection.js +139 -0
- package/src/search.js +1522 -0
- package/src/skill.js +98 -0
- package/src/source-map.js +348 -0
- package/src/state.js +314 -0
- package/src/store.js +1569 -0
- package/src/timeline.js +386 -0
- package/src/ui.js +1353 -0
- package/src/wiki.js +111 -0
- package/tsconfig.rhine.json +15 -0
- package/ui/rhine/archive-navigation-limit.ts +31 -0
- package/ui/rhine/archive-rack.ts +83 -0
- package/ui/rhine/assets/evidence-observatory.webp +0 -0
- package/ui/rhine/board-plane-transform.ts +24 -0
- package/ui/rhine/catalogue.ts +72 -0
- package/ui/rhine/deferred-preparation.ts +146 -0
- package/ui/rhine/evidence-board-controls.css +22 -0
- package/ui/rhine/evidence-board-history.ts +73 -0
- package/ui/rhine/evidence-board-model.ts +189 -0
- package/ui/rhine/evidence-board-panel.ts +762 -0
- package/ui/rhine/evidence-board-scene.ts +548 -0
- package/ui/rhine/evidence-board.css +191 -0
- package/ui/rhine/evidence-card-art.ts +470 -0
- package/ui/rhine/evidence-card-style.ts +17 -0
- package/ui/rhine/evidence-inbox-scene.ts +43 -0
- package/ui/rhine/evidence-inbox.css +29 -0
- package/ui/rhine/evidence-inbox.ts +104 -0
- package/ui/rhine/index.ts +12 -0
- package/ui/rhine/interaction.css +20 -0
- package/ui/rhine/investigation-board-plane.ts +5 -0
- package/ui/rhine/investigation-board.css +34 -0
- package/ui/rhine/investigation-board.ts +348 -0
- package/ui/rhine/investigation-edits.ts +46 -0
- package/ui/rhine/investigation-layout.ts +29 -0
- package/ui/rhine/label-prefetch.ts +34 -0
- package/ui/rhine/looping-title.ts +40 -0
- package/ui/rhine/manual-search.css +41 -0
- package/ui/rhine/manual-search.ts +89 -0
- package/ui/rhine/original/appearance.ts +180 -0
- package/ui/rhine/original/archive-label.ts +84 -0
- package/ui/rhine/original/archive-lighting.ts +39 -0
- package/ui/rhine/original/archive-loop.ts +82 -0
- package/ui/rhine/original/archive-refill.ts +64 -0
- package/ui/rhine/original/array-detail-data.ts +2 -0
- package/ui/rhine/original/array-detail.ts +41 -0
- package/ui/rhine/original/array-interior.ts +411 -0
- package/ui/rhine/original/array-occlusion.ts +166 -0
- package/ui/rhine/original/array-shell.ts +38 -0
- package/ui/rhine/original/array-visibility.ts +309 -0
- package/ui/rhine/original/asset-url.ts +4 -0
- package/ui/rhine/original/brand.ts +12 -0
- package/ui/rhine/original/cassette-lod.ts +81 -0
- package/ui/rhine/original/data.ts +21 -0
- package/ui/rhine/original/decryption.ts +185 -0
- package/ui/rhine/original/detail-signature.ts +18 -0
- package/ui/rhine/original/glass-reveal.ts +45 -0
- package/ui/rhine/original/internal-optics.ts +70 -0
- package/ui/rhine/original/label-renderer.ts +119 -0
- package/ui/rhine/original/label-textures.ts +117 -0
- package/ui/rhine/original/model-viewer.ts +658 -0
- package/ui/rhine/original/motion.ts +116 -0
- package/ui/rhine/original/opaque-backfaces.ts +64 -0
- package/ui/rhine/original/program-preparation.ts +111 -0
- package/ui/rhine/original/quality-renderer.ts +97 -0
- package/ui/rhine/original/quality-settings.ts +111 -0
- package/ui/rhine/original/render-quality.ts +163 -0
- package/ui/rhine/original/scene.ts +2051 -0
- package/ui/rhine/original/shelf-interior.ts +142 -0
- package/ui/rhine/original/ui-transitions.ts +111 -0
- package/ui/rhine/original/viewer-camera.ts +92 -0
- package/ui/rhine/original/viewport-layout.ts +41 -0
- package/ui/rhine/original-ui.css +2334 -0
- package/ui/rhine/readability.css +46 -0
- package/ui/rhine/reading-object.ts +96 -0
- package/ui/rhine/reading-origin.ts +28 -0
- package/ui/rhine/reading-room.css +55 -0
- package/ui/rhine/report-markdown.ts +98 -0
- package/ui/rhine/scene-edge-navigation.ts +84 -0
- package/ui/rhine/scene.ts +1726 -0
- package/ui/rhine/shelf-layout.ts +38 -0
- package/ui/rhine/snapshot-update-gate.ts +22 -0
- package/ui/rhine/source-reading.ts +15 -0
- package/ui/rhine/source-selection.css +164 -0
- package/ui/rhine/temporary-performance-observers.ts +163 -0
- package/ui/rhine/temporary-performance-panel.ts +124 -0
- package/ui/rhine/temporary-performance.css +19 -0
- package/ui/rhine/temporary-performance.ts +552 -0
- package/ui/rhine/temporary-render-diagnostics.ts +105 -0
- package/ui/rhine/tool-activity.ts +69 -0
- package/ui/rhine/types.ts +219 -0
- package/ui/rhine/visible-scene-hit.ts +13 -0
- package/ui/rhine/workbench.css +818 -0
- package/ui/rhine/workbench.ts +2245 -0
- package/ui/rhine/workspace-travel.ts +32 -0
- package/vite.rhine.config.ts +19 -0
package/README.md
ADDED
|
@@ -0,0 +1,423 @@
|
|
|
1
|
+
# prts-terrarchive
|
|
2
|
+
|
|
3
|
+
PRTS.chat 为 DeepSeek Harness(DSH)提供的资料插件:把《明日方舟》与
|
|
4
|
+
《明日方舟:终末地》的游戏原文、档案,以及社区审校 Wiki、实体图鉴与《泰拉年表》
|
|
5
|
+
装进本地资料包,为 Agent 提供带原文行号的检索与引用工具,并可按需接入
|
|
6
|
+
PRTS.chat 云端混合检索与 DSH 原生网页工具。
|
|
7
|
+
|
|
8
|
+
[中文](README.md) | [English](README.en.md)
|
|
9
|
+
|
|
10
|
+
## 这是什么
|
|
11
|
+
|
|
12
|
+
本插件为 DSH 提供明日方舟与终末地联合资料检索能力。插件先从 PRTS.chat 取得已批准的
|
|
13
|
+
最新 release 与逐文件摘要,再从 ModelScope 镜像或 PRTS.chat 下载本地语料;
|
|
14
|
+
Agent 可以离线检索并按原文行号阅读材料;可选的 PRTS.chat 云端混合检索用于发现
|
|
15
|
+
候选材料,并将结果映射回本地原文核验。由于云端服务承载能力有限,当前为每个用户
|
|
16
|
+
每日提供 1000 次 DSH 匿名云端检索调用额度;额度策略可能根据实际运行情况调整。
|
|
17
|
+
|
|
18
|
+
- **本地检索**:`corpus_search` 用同一组参数同时检索两款游戏,
|
|
19
|
+
支持游戏、资料类型、内容形式、角色、活动/任务、Wiki 字段等结构化过滤;
|
|
20
|
+
- **原文阅读**:`corpus_read` 可按关卡代号、密录名、角色资料类别直接定位,
|
|
21
|
+
并可连续阅读整个明日方舟活动或终末地任务;引用格式统一为《篇章名》第 N 行;
|
|
22
|
+
- **活动时间线**:`timeline_search` 检索 PRTS Wiki《泰拉年表》本地投影,
|
|
23
|
+
支持实体别名自动裂变与出处标记反查;
|
|
24
|
+
- **云端混合检索**:双模块模式下一次 `cloud_search` 默认并行查询两款游戏的图谱、档案、
|
|
25
|
+
原文与 Wiki,联合排序后映射回本地篇章;
|
|
26
|
+
|
|
27
|
+
## 数据来源声明
|
|
28
|
+
|
|
29
|
+
- **自建 Wiki 数据**:来源于 [littlepangding/arknights_lore_wiki](https://github.com/littlepangding/arknights_lore_wiki)。
|
|
30
|
+
- **《泰拉年表》数据**:来源于 [PRTS Wiki《泰拉年表》](https://prts.wiki/w/%E6%B3%B0%E6%8B%89%E5%B9%B4%E8%A1%A8),供本插件的时间线检索使用。
|
|
31
|
+
|
|
32
|
+
## 核心特性
|
|
33
|
+
|
|
34
|
+
| 特性 | 说明 |
|
|
35
|
+
| --- | --- |
|
|
36
|
+
| 按需加载 | 工具只挂在「PRTS 模式」预设下,标准/极简等模式不受污染 |
|
|
37
|
+
| 双游戏资料 | 明日方舟与终末地原文、档案、审校 Wiki、实体与时间线使用统一工具检索 |
|
|
38
|
+
| 读取去重 | 会话级证据状态跟踪已进入模型上下文的原文,重复/重叠读取自动回放或只补读新行 |
|
|
39
|
+
| 自带皮肤 | Harness 默认 / PRTS Agent / Endfield AIC / 莱茵生命资料馆 |
|
|
40
|
+
|
|
41
|
+
## 莱茵生命资料馆
|
|
42
|
+
|
|
43
|
+
在 **设置 → 插件 → PRTS 语料 → 界面皮肤** 选择「莱茵生命资料馆」,然后在会话中打开
|
|
44
|
+
「资料馆」。检索阵列、调查板、重点证据盒和双层档案架位于同一个三维场景。
|
|
45
|
+
可用底部导航、边缘入口或点击可见模型切换,镜头连续移动。
|
|
46
|
+
|
|
47
|
+
- **检索阵列**保留候选资料;**档案架**收录 Agent 实际读过或用户主动收藏的资料,每页上下两层、每层十二份。
|
|
48
|
+
- **重点证据盒**属于指定调查板,用于暂存待核对、待整理的材料;放入盒子不会自动标成已读,也不必先收藏。
|
|
49
|
+
- **调查板**由 Agent 持续添加线索与关系,中央保留带版本的报告。新建还是延续调查由 LLM 通过调查工具决定,追问不会机械地创建新板。
|
|
50
|
+
- 纸片支持拖动、缩放、红绳连线与手动编辑。编辑沿用同款纸色和编号,自动保存并支持撤销;板面数据由 Host 持久化。
|
|
51
|
+
- 手动检索支持本地与云端模式及高级设置。阅读器支持 Markdown、来源版本、命中位置与实际已读范围;返回时恢复原入口、筛选和阅读位置。
|
|
52
|
+
- 手动浏览会暂停 Agent 自动跟随,点击「恢复跟随」后继续。用户查看的板、Agent 工作板和证据盒目标分别管理。
|
|
53
|
+
|
|
54
|
+
长文分页、档案架分页、减少动态效果和无 WebGL 时的文字阅读模式均可用。
|
|
55
|
+
操作细节见 [资料馆说明](docs/rhine-lab.md) 与 [交互与资料分层](docs/rhine-interaction-flow.md)。
|
|
56
|
+
|
|
57
|
+
前端沿用 Three.js + TypeScript + Vite。三维主体、档案循环导航与渲染使用原项目实现和
|
|
58
|
+
默认画质;主界面按调查用途重新设计,原版演示档案已全部移除。开发预览读取本地真实资料包,不连接 Agent:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
npm ci
|
|
62
|
+
npm run build:rhine
|
|
63
|
+
npm run preview:rhine
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
打开 `http://127.0.0.1:4177`。可通过 `PRTS_RHINE_RELEASES=/path/to/releases` 指定只读资料包目录。
|
|
67
|
+
直接预览证据白板:`http://127.0.0.1:4177/?rhineView=board`。
|
|
68
|
+
语法检查使用 `npm run check`,测试使用 `npm test`;浏览器检查使用 `npm run test:rhine:browser`(需要 Playwright)。
|
|
69
|
+
|
|
70
|
+
## 环境要求
|
|
71
|
+
|
|
72
|
+
- Web:Node.js **≥ 22.19**,DSH 运行时 **≥ 0.1.2-alpha.2**;当前适配目标为 **0.1.7-rc.2**
|
|
73
|
+
- 官方 Electron Desktop:使用与插件兼容的 DSH 桌面版本;桌面自带运行时
|
|
74
|
+
- 磁盘空间:语料大小以设置页与 release 清单为准,下载前不会自动占用完整语料空间
|
|
75
|
+
|
|
76
|
+
## 安装
|
|
77
|
+
|
|
78
|
+
### Web 本地安装
|
|
79
|
+
|
|
80
|
+
可以从本地源码安装,或使用已内置插件的 PRTS Portable:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
npm install --global @deepseek-ai/dsh@0.1.7-rc.2
|
|
84
|
+
git clone https://github.com/HTian-qwq/prts-terrarchive.git
|
|
85
|
+
cd prts-terrarchive
|
|
86
|
+
node bin/install.js web
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
本地安装器把插件加入指定 profile。DSH `0.1.7` 起由插件直接注册「PRTS 模式」;
|
|
90
|
+
旧版 DSH 仍创建或迁移 `$DSH_HOME/.agent-presets/prts` 中的兼容预设。省略第二个参数时使用当前插件目录,也可以传入另一个本地目录或压缩包:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
node bin/install.js web /path/to/prts-terrarchive
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Web:从 npm 安装
|
|
97
|
+
|
|
98
|
+
可直接从 npm 安装插件 bundle,无需额外运行安装脚本:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
dsh plugin --profile web add prts-terrarchive@0.2.0
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
重启 `dsh web` 后,DSH `0.1.7` 起由插件注册「PRTS 模式」,禁用或卸载插件时
|
|
105
|
+
自动撤销;默认模式和正在运行的普通会话保持不变。新版不读取旧的
|
|
106
|
+
`$DSH_HOME/.agent-presets/prts` 文件。若曾自定义旧预设,请在新版的模式配置中手动迁移;
|
|
107
|
+
旧文件会保留。旧版 DSH 继续使用文件模板,已有用户修改不会被覆盖。npm 安装不执行 `postinstall`。
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
dsh plugin --profile web remove prts-terrarchive
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### 官方 Electron Desktop
|
|
114
|
+
|
|
115
|
+
适用于兼容 DSH `0.1.7` 插件接口的 Electron Desktop。在 **桌面应用的插件管理窗口** 输入
|
|
116
|
+
`prts-terrarchive@0.2.0` 安装,随后选用「PRTS 模式」。官方桌面只接受 npm registry
|
|
117
|
+
包名和版本,不接受 GitHub 地址、本地目录或 tarball;其 `desktop` profile 由应用管理,
|
|
118
|
+
不要运行 `node bin/install.js desktop` 或 `dsh plugin --profile desktop`。
|
|
119
|
+
|
|
120
|
+
Web 与官方桌面共享默认的 `$DSH_HOME` 用户资料,但各自安装插件。插件包包含界面、地图
|
|
121
|
+
模型、贴图、技能和预设,**不包含语料、Node/DSH 运行库或用户数据**。首次使用请在
|
|
122
|
+
「设置 → 插件 → PRTS 语料」自行下载语料,切换皮肤无需另下模型和贴图。
|
|
123
|
+
|
|
124
|
+
PRTS Portable 发行包预装插件、预设和完整语料,解压后无需另行下载语料。
|
|
125
|
+
官方 Electron 便携版使用 `build-electron.ps1` 构建,原 WebView2 构建入口继续保留,
|
|
126
|
+
详见 [Portable 仓库](https://github.com/HTian-qwq/prts-terrarchive-portable)。
|
|
127
|
+
|
|
128
|
+
Portable 打包器已放置插件时,仍可使用 `node bin/install.js web --preset-only` 生成或迁移
|
|
129
|
+
兼容预设;该选项不调用 DSH CLI。
|
|
130
|
+
|
|
131
|
+
### Windows
|
|
132
|
+
|
|
133
|
+
Web 本地安装需要可用的 `dsh.cmd`。安装器经 cmd.exe 调用它,插件路径含换行或
|
|
134
|
+
`%` `!` `&` `|` `<` `>` `^` `"` 时会明确报错,请改用不含这些字符的目录。
|
|
135
|
+
`DSH` 环境变量可指定 `dsh.cmd` 的绝对路径。官方 DSH 的语料默认保存到
|
|
136
|
+
`%USERPROFILE%\.dsh\prts-corpus\releases`;Portable 的会话和设置保存在发行目录的
|
|
137
|
+
`userdata`,语料及后续资料更新保存在 `corpus/releases`。
|
|
138
|
+
|
|
139
|
+
## 安装后:五步上手
|
|
140
|
+
|
|
141
|
+
1. **重启** `dsh web` 或所用桌面应用;
|
|
142
|
+
2. **设置 → 插件 →「PRTS 语料」**:选择皮肤(Harness 默认 / PRTS Agent / Endfield AIC / 莱茵生命资料馆);皮肤模型、贴图与字体已随插件包安装;
|
|
143
|
+
3. **版本管理**:Portable 已附带完整语料;其他安装方式下载双游戏资料(优先 ModelScope 镜像;大小以设置页与当前 release
|
|
144
|
+
清单为准)。未安装资料时
|
|
145
|
+
PRTS 模式仍可进入;调用本地工具会提醒前往本设置页安装;
|
|
146
|
+
4. **新建会话,顶部模式下拉选「PRTS 模式」**;
|
|
147
|
+
5. 直接用自然语言提问,或让模型调用下列工具。
|
|
148
|
+
|
|
149
|
+
## PRTS 模式的工具面
|
|
150
|
+
|
|
151
|
+
| 来源 | 工具 | 用途 |
|
|
152
|
+
| --- | --- | --- |
|
|
153
|
+
| dsh-base(所有模式共有) | bash/sandbox 等 | 常规 Agent 能力,本插件不裁剪 |
|
|
154
|
+
| 本插件 | `corpus_search` | 本地语料 grep 检索与目录浏览 |
|
|
155
|
+
| 本插件 | `corpus_read` | 按玩家可见定位器或自然标题读取官方行号原文 |
|
|
156
|
+
| 本插件 | `corpus_i18n` | 终末地官方多语言原文查询、名称与档案对照 |
|
|
157
|
+
| 本插件 | `timeline_search` | 活动时间线检索 / 出处反查 |
|
|
158
|
+
| 本插件 | `cloud_search` / `cloud_inspect` | PRTS.chat 云端混合检索(默认匿名会话) |
|
|
159
|
+
| `@deepseek-ai/dsh-tool-web` | `web_search` / `web_fetch` | 公网检索与已知 URL 精读核验 |
|
|
160
|
+
| `@deepseek-ai/dsh-tool-skill` | skill 加载器 | 按需加载检索策略技能 |
|
|
161
|
+
| 本插件 | `prts-retrieval` 技能 | 检索配方与字段语义(按需注入,不占 system prompt) |
|
|
162
|
+
|
|
163
|
+
## 工具详解
|
|
164
|
+
|
|
165
|
+
### corpus_i18n — 终末地官方多语言查询
|
|
166
|
+
|
|
167
|
+
使用带本地化附件的终末地资料包(插件 0.2.0 起支持):
|
|
168
|
+
|
|
169
|
+
```js
|
|
170
|
+
corpus_i18n({query: "管理员,你来了。", languages: ["EN", "JP", "KR"]})
|
|
171
|
+
corpus_i18n({title: "<检索结果的完整标题>", line: 1, languages: ["EN"]})
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
也可用已有 `document_uid` 替代标题。名称/原句默认精确匹配,片段可加 `match_mode:"literal"`;外语反查加 `source_language:"EN"`。返回官方字典中的文本及来源,默认不显示内部文本 ID;显式设 `include_ids:true` 才返回字符串 ID,供 `text_ids` 精确复查。空译文、未映射来源、未安装附件分别报告,不自动生成译文。
|
|
175
|
+
|
|
176
|
+
角色档案按整条记录、档案库按内容块返回,中文行号只是来源定位,不表示各语言分段相同。长记录会分页,原样提交 `page.continuation` 即可续查。旧资料包仍可搜索和阅读;多语言附件须随新资料版本安装。
|
|
177
|
+
|
|
178
|
+
构建方式和数据格式见 [官方多语言工具](docs/endfield-official-i18n.md)。
|
|
179
|
+
|
|
180
|
+
### corpus_search — 本地语料检索
|
|
181
|
+
|
|
182
|
+
像 grep 一样搜索本地语料;命中立即返回原行及上下各一行,按文档归并。`query` 使用
|
|
183
|
+
短实体名、篇章展示名或原句片段;也可省略 `query`,仅按过滤条件列出资料入口。
|
|
184
|
+
|
|
185
|
+
| 参数 | 说明 |
|
|
186
|
+
| --- | --- |
|
|
187
|
+
| `query` | 搜索词(≤512 码点);在 NFKC 归一化 + 小写后的文本上匹配 |
|
|
188
|
+
| `games` | 可选游戏过滤;省略时同时搜索 `arknights` 与 `endfield` |
|
|
189
|
+
| `resource_types` | 资料类型过滤(数组内 OR);明日方舟与终末地可选值见下文 |
|
|
190
|
+
| `content_types` | 内容形式,例如 `dialogue`、`cutscene`、`radio`、`sns_chat` |
|
|
191
|
+
| `collection_names` | 明日方舟活动名或终末地任务名,使用同一个字段 |
|
|
192
|
+
| `match_mode` | `literal`(默认,连续字面匹配)/ `regex`(线性安全子集:字面量、`^`/`$`、`.`、字符类、转义和固定次数 `{n}`;不支持分组、分支及可变量词) |
|
|
193
|
+
| `character_names` / `story_names` / `activity_names` | 角色 / 篇章 / 活动展示名过滤 |
|
|
194
|
+
| `entity_names` | 只返回出现指定实体的行(自动展开别名) |
|
|
195
|
+
| `speakers` | 结构化说话人过滤,只匹配亲口台词 |
|
|
196
|
+
| `wiki_sections` | Wiki 标签字段过滤(相关活动、剧情总结、角色剧情概括等 16 种) |
|
|
197
|
+
| `context_terms` | 要求命中附近(±3 行)同时出现的语境词,≤8 个 |
|
|
198
|
+
| `after` | 下一页的版本绑定可读锚点 `{ data_version, resource_type, title, position }`;与原搜索条件一起原样提交 |
|
|
199
|
+
|
|
200
|
+
约束:过滤数组每项非空、最多 16 项、单项最长 512 码点。结果预算固定,
|
|
201
|
+
保留原搜索条件,并把返回的 `next_after` 原样放入 `after`,可确定性扫描到
|
|
202
|
+
`exhausted=true`。锚点使用完整 `data_version`、资料类型和自然标题;资料版本切换后
|
|
203
|
+
旧锚点会被拒绝,必须重新搜索。分页不向模型暴露内部签名串。
|
|
204
|
+
|
|
205
|
+
**明日方舟资料类型(resource_types)**:`story` 官方剧情原文;`character_profile` 档案/招聘/
|
|
206
|
+
潜能;`character_module` 模组;`character_voice` 语音;`character_skin` 时装;
|
|
207
|
+
`operator_record` 干员密录;`character_bundle` 指定角色的档案+模组+语音+密录;
|
|
208
|
+
`character_wiki` 规范角色 Wiki;`story_wiki` 活动/密录 Wiki;
|
|
209
|
+
`character_activity_wiki` 角色×活动辅助 Wiki;`reviewed_wiki` 全部自建 Wiki;
|
|
210
|
+
`terra_journey` 大地巡旅;`entity_profile` 实体资料;`reference` 时间线等引用资料。
|
|
211
|
+
|
|
212
|
+
**终末地资料类型**:`original_story` 官方剧情原文;`archive` 官方档案;
|
|
213
|
+
`knowledge` 知识资料;`wiki` 整理性 Wiki;`character_story` 角色故事;
|
|
214
|
+
`timeline` 时间线资料;`entity_profile` 实体资料。可配合 `content_types` 区分对话、
|
|
215
|
+
过场、广播、通讯、环境对话、SNS 等内容形式。
|
|
216
|
+
|
|
217
|
+
### corpus_read — 原文阅读
|
|
218
|
+
|
|
219
|
+
优先使用游戏内关卡代号、密录名、角色名、活动名或任务名;无法稳定定位时再使用搜索返回的完整标题。
|
|
220
|
+
不使用内部 `document_id`、ref 或路径。搜索结果只在同名歧义时给出公开稳定的 `document_uid`;它替代 `title`,不得同时提交两者。同名多合集不会自动合并。
|
|
221
|
+
|
|
222
|
+
| 用法 | 参数 |
|
|
223
|
+
| --- | --- |
|
|
224
|
+
| 明日方舟关卡 | `stage_code`;同代号多篇时加 `story_part`:`before` / `after` / `story`;加 `line` 可定点读上下文 |
|
|
225
|
+
| 干员密录 | `character_name` + `record_name`;多段密录加 `segment` |
|
|
226
|
+
| 角色官方资料 | `character_name` + `material`,类别为 `profile/module/voice/skin/recruitment/potential` |
|
|
227
|
+
| 双模块同名角色消歧 | 在角色定位参数之外加 `game: "arknights"` 或 `game: "endfield"`;无同名歧义时不填 |
|
|
228
|
+
| 整活动连续阅读 | `activity_name` + `mode: "activity"` |
|
|
229
|
+
| 终末地任务连续阅读 | `collection_name` + `mode: "collection"`,可选 `content_types` |
|
|
230
|
+
| 其他资料定点上下文 | `title` + `line` |
|
|
231
|
+
| 读 Wiki 字段 | `title` + `section`(精确读取标签字段,不含标签行) |
|
|
232
|
+
| 分页读其他全文 | `title` + `mode: "document"`(`max_lines` 默认 100、上限 500;`max_chars` 默认 12000、上限 100000) |
|
|
233
|
+
| 同名单篇 | `document_uid` + `line`,或 `document_uid` + `mode: "document"`;不再提交 `title` |
|
|
234
|
+
| 续读 | 原样提交 `page.continuation`;单篇使用 `line`,活动/任务使用版本绑定的 `position`;旧 `cursor` 仅兼容历史会话 |
|
|
235
|
+
|
|
236
|
+
每次读取只选一种主定位方式。`max_lines/max_chars` 只限制输出量,不能代替 `line`、`section` 或 `mode`。
|
|
237
|
+
|
|
238
|
+
重复读取与部分补读保持正常的预算和续页位置。部分补读会用 `coverage` 标明本页复用的上文行及新返回行;全文是否读完仍以 `page.has_more` 为准。
|
|
239
|
+
|
|
240
|
+
引用格式统一为「《篇章名》第 N 行」。剧情文档只返回请求的原文;剧情总结与活动
|
|
241
|
+
时间线必须通过 `timeline_search` 或 Wiki 字段显式检索,不自动夹带。
|
|
242
|
+
|
|
243
|
+
### timeline_search — 活动时间线
|
|
244
|
+
|
|
245
|
+
按活动名、年份及自动展开的实体别名检索活动时间线(PRTS Wiki《泰拉年表》本地投影)。
|
|
246
|
+
|
|
247
|
+
| 参数 | 说明 |
|
|
248
|
+
| --- | --- |
|
|
249
|
+
| `query` | 可选的事件正文短语(≤200 字符) |
|
|
250
|
+
| `activity_names` | 活动展示名(≤20 项,如「孤星」;接受主线章节号常见写法) |
|
|
251
|
+
| `entity_names` | 角色/实体展示名(≤20 项,自动经别名图鉴裂变后检索) |
|
|
252
|
+
| `year_start` / `year_end` | 年份范围(含端点,可单独使用) |
|
|
253
|
+
| `source_marker` | 反查模式:原样传回结果中的「年表出处:tle_…」标记,返回该事件完整来源 |
|
|
254
|
+
| `max_results` | 最多返回事件数,默认 20、上限 100 |
|
|
255
|
+
|
|
256
|
+
### cloud_search / cloud_inspect — 云端混合检索(可选)
|
|
257
|
+
|
|
258
|
+
用自然语言查询 PRTS.chat 云端的图谱、档案、原文、自建 Wiki 和时间线组合索引。
|
|
259
|
+
默认走**匿名会话**(内置 PoW 挑战,无需账号),也可在设置页配置静态 token。
|
|
260
|
+
返回末尾的「## 可读取原文」列出已映射到本地篇章的完整标题与行号,直接按
|
|
261
|
+
`title + line` 调用 `corpus_read` 核验。`cloud_inspect` 用于复查最近一次云端
|
|
262
|
+
检索的状态(回答材料、候选、诊断),`request_id` 由运行时自动注入。
|
|
263
|
+
|
|
264
|
+
本地资料尚未安装或无法读取时,云端答案仍会返回,并提示本地原文映射不可用;安装或修复资料包后可继续核验原文。
|
|
265
|
+
|
|
266
|
+
### web_search / web_fetch — DSH 原生网页工具
|
|
267
|
+
|
|
268
|
+
由 PRTS 模式挂载:`web_search` 发现网页候选,`web_fetch` 读取已知 URL 正文,
|
|
269
|
+
用于语料之外的历史沿革、词源、民俗等公网信息核验。DSH `0.1.2-alpha.1` 起的匿名
|
|
270
|
+
HTTP provider 只允许公网 HTTP(S),并包含 DNS 解析校验、连接地址固定、同源重定向
|
|
271
|
+
以及响应大小和超时限制。
|
|
272
|
+
|
|
273
|
+
## 检索配方
|
|
274
|
+
|
|
275
|
+
Wiki 资料不是无差别文本池:工具会区分规范角色页、活动/密录页和角色×活动辅助页。
|
|
276
|
+
常见问题的组合方式:
|
|
277
|
+
|
|
278
|
+
```text
|
|
279
|
+
凯尔希参加过哪些活动?
|
|
280
|
+
→ corpus_search({ resource_types: ["character_wiki"],
|
|
281
|
+
character_names: ["凯尔希"], wiki_sections: ["相关活动"] })
|
|
282
|
+
|
|
283
|
+
凯尔希在《孤星》里做了什么?
|
|
284
|
+
→ corpus_search({ resource_types: ["story_wiki"], activity_names: ["孤星"],
|
|
285
|
+
wiki_sections: ["角色剧情概括"], query: "凯尔希" })
|
|
286
|
+
|
|
287
|
+
1102 年 1 月发生了什么?
|
|
288
|
+
→ timeline_search({ year_start: 1102, year_end: 1102 })
|
|
289
|
+
|
|
290
|
+
某人亲口说过什么?
|
|
291
|
+
→ corpus_search({ speakers: ["阿米娅"], query: "博士" })
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
完整字段语义与更多配方见 `skills/prts-retrieval/references/wiki-schema.md`
|
|
295
|
+
与 `retrieval-recipes.md`(模型通过 `prts-retrieval` 技能按需读取)。
|
|
296
|
+
|
|
297
|
+
## 资料与配置
|
|
298
|
+
|
|
299
|
+
- 默认资料目录:`$DSH_HOME/prts-corpus/releases`;用户配置:`$DSH_HOME/prts-corpus.json`
|
|
300
|
+
- 配置分三层:内置默认值 ← `cordis.patch.yml` 行内 config ← 用户文件(设置页写入,立即生效)
|
|
301
|
+
- 版本检查固定请求 `https://prts.chat` 的 `current`;release、pack 和逐分片摘要均以
|
|
302
|
+
PRTS.chat 为信任源,不能被配置改到其他站点。ModelScope 与可配置回退站点只提供
|
|
303
|
+
该固定 release 的压缩字节;
|
|
304
|
+
文件写入前校验大小和 SHA-256,同一 release 的并发准备由跨进程锁合并
|
|
305
|
+
- 设置页通过 Harness Connection 认证 RPC 访问 Host;修改配置后云端工具热注册/注销
|
|
306
|
+
|
|
307
|
+
读取或搜索期间切换资料版本时,请求会返回可重试的 `PACKAGE_VERSION_MISMATCH`,
|
|
308
|
+
重新定位到当前版本后再调用即可。旧任务不会回写新版本的正文或倒排缓存,缓存复用
|
|
309
|
+
及跨篇章读取也受同一版本检查约束。
|
|
310
|
+
|
|
311
|
+
**可配置项**(`$DSH_HOME/prts-corpus.json`,设置页可视化编辑):
|
|
312
|
+
|
|
313
|
+
| 键 | 默认 | 说明 |
|
|
314
|
+
| --- | --- | --- |
|
|
315
|
+
| `uiSkin` | `harness` | 皮肤:`harness` / `prts-agent` / `endfield-aic` / `rhine-lab` |
|
|
316
|
+
| `cloudEnabled` | 裸插件 `false`;官方 PRTS preset `true` | 云端工具开关;安装器生成的 PRTS 模式默认启用匿名云端检索 |
|
|
317
|
+
| `cloudBaseUrl` | `https://prts.chat` | 云端地址(https,或仅环回主机的 http) |
|
|
318
|
+
| `cloudToken` | 空 | 静态 Bearer token;留空使用匿名 PoW 会话 |
|
|
319
|
+
| `cloudGame` | `all` | `all`(一次检索两款游戏)/ `arknights` / `endfield` |
|
|
320
|
+
| `enabledGames` | `["arknights","endfield"]` | 本地与云端工具允许检索的模块;单模块可只保留其中一项,新会话会装配对应 Skill |
|
|
321
|
+
| `cloudUserId` | 空 | 匿名会话的稳定用户标识 |
|
|
322
|
+
| `cloudTimeoutMs` | `90000` | 云端请求超时(1000–600000) |
|
|
323
|
+
| `cloudMaxResponseBytes` | 32 MiB | 云端响应上限(1 KiB–64 MiB) |
|
|
324
|
+
| `downloadSiteBaseUrl` | `https://prts.chat` | 仅作为校验哈希后的字节回退站点;不参与选版或签发摘要 |
|
|
325
|
+
| `downloadOrder` | `["modelscope","site"]` | 下载源顺序 |
|
|
326
|
+
| `cacheShards` | `24` | 正文分片 LRU 缓存大小(1–128) |
|
|
327
|
+
|
|
328
|
+
静态 token 绑定保存时的服务源(协议、主机和端口),不会随基础配置或用户配置中的地址变化发送给其他源。旧用户配置若尚无源绑定,请在设置页的令牌框重新输入并保存一次;旧值保留在文件中,重新保存前不会用于请求。只改同源 URL 路径不影响已绑定 token。
|
|
329
|
+
|
|
330
|
+
若在 preset 的 `prts-corpus.config.enabledGames` 设置基础范围,也应把相同数组传给相邻的 `prts-terrarchive/skill` entry;安装器生成和迁移的官方 PRTS preset 已自动保持两者一致。用户配置文件中的 `enabledGames` 会同时覆盖两边,修改后请新建会话以装配新的模块说明。
|
|
331
|
+
|
|
332
|
+
实体检索提示会在 `prts-retrieval` Skill 加载后,按当前用户问题写入 DSH 动态上下文快照;新快照会取代旧快照。PRTS 段只列出当前搭载的资料模块、当前问题命中的规范实体与游戏归属,以及与本轮实体相关的再旅者关系。工具调用标题会同时标明本地或云端资料及检索的游戏范围。
|
|
333
|
+
|
|
334
|
+
**内存说明**:新版资料包附带轻量 `document_catalog`,启动只从目录建立篇章定位、
|
|
335
|
+
标题、别名和检索元数据;正文分片在读取或命中后才解压,并由 `cacheShards` 限制缓存
|
|
336
|
+
数量。旧资料包仍兼容,但首次初始化需要扫描其正文分片。Node/V8 可能保留已申请的
|
|
337
|
+
堆页,因此操作系统看到的常驻内存不会在查询结束后立即回落。
|
|
338
|
+
|
|
339
|
+
## 皮肤
|
|
340
|
+
|
|
341
|
+
设置 → 插件 → PRTS 语料中选择:
|
|
342
|
+
|
|
343
|
+
- **Harness 默认**:不改动宿主外观;
|
|
344
|
+
- **PRTS Agent**:PRTS 终端风格界面;
|
|
345
|
+
- **Endfield AIC**:明日方舟:终末地终端风格,含 3D 地图。所需运行代码、模型与贴图已预压缩并随插件包安装,切换皮肤不会触发额外下载。
|
|
346
|
+
- **莱茵生命资料馆**:保留 RhineLabUI 原版循环档案阵列,加入 Agent 调查板、重点证据盒、双层分页档案架、本地/云端检索、阅读和摘录。开发时运行 `npm run build:rhine` 和 `npm run preview:rhine`。
|
|
347
|
+
- **Agent 回看与协作提醒**:`investigation_get` 可以分页回看线索正文、报告、档案架和重点证据盒,也能按来源 ID 读取保存的正文。手动收藏会同步到会话存储,旧浏览器收藏自动补入。用户新增或修改材料后,运行中的 Agent 在下一次推理时收到提醒,空闲时留到下次对话;只有成功读取对应内容才标为已查看,浏览器查看不会消除提醒。用法见 [调查工作流](skills/prts-investigation/SKILL.md)。
|
|
348
|
+
|
|
349
|
+
Endfield AIC 的插件代码、UI 集成与地图渲染实现采用 MIT License;其中使用的游戏衍生模型与贴图不属于 MIT 授权范围,仅作为该可选皮肤的组成部分随包提供。具体文件范围见 [GAME_ASSETS.md](GAME_ASSETS.md)。这与「版本管理」下载的语料相互独立:语料按需从 ModelScope 下载,皮肤资源无需另行下载。
|
|
350
|
+
|
|
351
|
+
## 开发
|
|
352
|
+
|
|
353
|
+
```bash
|
|
354
|
+
npm run check # 全部源码语法检查
|
|
355
|
+
npm test # node --test 全量测试;语料集成用例需本地 data/releases,否则自动跳过
|
|
356
|
+
git diff --check # 检查待提交文本
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
真实网络下载脚本 `test/real-download.mjs` 不在默认测试集中,避免单元测试意外
|
|
360
|
+
下载大型资料。
|
|
361
|
+
|
|
362
|
+
**目录结构**:
|
|
363
|
+
|
|
364
|
+
```text
|
|
365
|
+
src/
|
|
366
|
+
index.js 插件入口:工具注册、配置装配、云端热重载
|
|
367
|
+
search.js corpus_search 执行层(候选预筛、扫描、签名游标分页)
|
|
368
|
+
search-projection.js 搜索结果的模型可见投影与渲染
|
|
369
|
+
read.js corpus_read 执行层(单篇/活动/终末地任务连续阅读)
|
|
370
|
+
timeline.js timeline_search 执行层(别名裂变、年份交集、出处反查)
|
|
371
|
+
store.js 资料包只读访问层(1/2/3-gram 倒排、旧包短词回退、分片 LRU)
|
|
372
|
+
wiki.js Wiki 文档角色与标签字段解析
|
|
373
|
+
entity-recognizer.js 实体别名 Aho-Corasick 自动机
|
|
374
|
+
evidence-state.js 会话级证据状态(读取覆盖去重、上下文可见性判定)
|
|
375
|
+
cloud.js 云端客户端(匿名 PoW 会话、静态 token、限流)
|
|
376
|
+
cloud-projection.js 云端结果的模型可见投影
|
|
377
|
+
source-map.js 云端证据 → 本地篇章映射
|
|
378
|
+
installer.js 资料下载器(双源回退、SHA-256 校验、跨进程锁)
|
|
379
|
+
state.js 三层配置与共享状态
|
|
380
|
+
ui.js 设置页 API(Connection RPC)与静态资源
|
|
381
|
+
skill.js prts-retrieval 技能注册
|
|
382
|
+
lib/
|
|
383
|
+
client.js Web 客户端入口(皮肤生命周期、设置 UI 席位)
|
|
384
|
+
skins/common.css 插件公共控件样式(始终加载)
|
|
385
|
+
skins/prts-agent.css PRTS Agent 独立皮肤(仅启用时加载)
|
|
386
|
+
skins/endfield-aic.css Endfield AIC 独立皮肤(仅启用时加载)
|
|
387
|
+
endfield-map/ 终末地皮肤地图资源(brotli/gzip 预压缩)
|
|
388
|
+
bin/
|
|
389
|
+
install.js 一键安装器
|
|
390
|
+
pack-map-assets.mjs 地图资源压缩打包脚本
|
|
391
|
+
contracts/ 工具请求/响应 JSON Schema
|
|
392
|
+
skills/prts-retrieval/ 检索策略技能(字段语义、检索配方)
|
|
393
|
+
presets/ PRTS 模式声明及旧版用户预设初始化
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
## 兼容性
|
|
397
|
+
|
|
398
|
+
DSH `0.1.2-alpha.1` 与 `0.1.2-alpha.2`(web profile)已完成历史真机验证;其中
|
|
399
|
+
`alpha.1` 通过官方 tag 构建并完成安装、预设解析、宿主启动、设置路由和客户端 bundle
|
|
400
|
+
加载检查。当前插件适配目标为 DSH `0.1.7-rc.2`,共享 Connection Fetch 通道支持
|
|
401
|
+
Web 与官方 Electron 源码实现;Web 同时保留 HTTP 路由。新版声明式预设与
|
|
402
|
+
旧版文件预设均通过本项目单元测试;`0.1.7-rc.2` 的完整 Host 启动及 Windows Electron 实机端到端验证仍待完成。
|
|
403
|
+
Electron 便携版默认固定 `0.1.7-rc.2` 官方 tag;旧 Electron 构建入口仍固定
|
|
404
|
+
`0.1.5-alpha.1`,原 WebView2 构建固定 `0.1.3-alpha.1`。发行版仍需通过 Windows 上的真实 Host 冒烟。
|
|
405
|
+
|
|
406
|
+
旧版自定义部署若关闭 `includeUserRoot` 且没有其它 `trust: user` 的预设目录,插件不会写入
|
|
407
|
+
预设或更改 roots;部署者需先启用用户预设功能。插件依赖宿主内部接口(`ctx.tools`、
|
|
408
|
+
`agent/pre-step`、Connection Fetch、agent 预设、客户端 slots/theme);DSH 大版本升级后
|
|
409
|
+
请按「安装 → 重启 → 设置页 → PRTS 模式 → 语料工具 → 网页工具 → 皮肤 → 版本热切换」
|
|
410
|
+
过一遍冒烟。
|
|
411
|
+
|
|
412
|
+
## 许可证与第三方内容
|
|
413
|
+
|
|
414
|
+
本项目按以下边界提供和授权内容:
|
|
415
|
+
|
|
416
|
+
- **原创代码与文档**:采用 [MIT License](LICENSE)。
|
|
417
|
+
- **游戏相关内容**:《明日方舟》《明日方舟:终末地》相关名称、商标、图像、模型、贴图、游戏数据及其他游戏素材不属于 MIT 授权范围,其权利归各自权利人所有。终末地皮肤所携带资源的具体范围见 [GAME_ASSETS.md](GAME_ASSETS.md)。
|
|
418
|
+
- **语料数据**:完整语料不随 Git 仓库或插件代码分发;用户通过插件下载的 PRTS.chat
|
|
419
|
+
资料集适用 [明日方舟资料集](https://modelscope.cn/datasets/HTiantian/prts-agent-corpus-arknights)
|
|
420
|
+
与 [终末地资料集](https://modelscope.cn/datasets/HTiantian/prts-agent-corpus-endfield)
|
|
421
|
+
页面标明的许可证、来源声明和使用条款,不因本项目采用 MIT License 而改变。
|
|
422
|
+
|
|
423
|
+
本项目为非官方社区项目,与相关游戏的开发商、发行商及其关联方不存在隶属、赞助或背书关系。完整声明见 [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md)。
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Third-Party Notices
|
|
2
|
+
|
|
3
|
+
## Scope of the MIT License
|
|
4
|
+
|
|
5
|
+
Unless otherwise stated, the original source code and documentation in this repository are licensed under the MIT License in [`LICENSE`](LICENSE).
|
|
6
|
+
|
|
7
|
+
The MIT License does not apply to third-party names, trademarks, artwork, images, models, textures, game data, corpus data, or other materials identified below. Nothing in this repository grants permission to use those materials beyond rights granted by their respective rights holders or by applicable law.
|
|
8
|
+
|
|
9
|
+
## Arknights and Arknights: Endfield
|
|
10
|
+
|
|
11
|
+
Arknights, Arknights: Endfield, their names, trademarks, characters, artwork, images, models, textures, game data, and other game-related materials belong to their respective rights holders.
|
|
12
|
+
|
|
13
|
+
The game-derived models and textures used by the optional Arknights: Endfield skin are excluded from this repository's MIT License. The affected packaged files are listed in [`GAME_ASSETS.md`](GAME_ASSETS.md). The original plugin source code, UI code, and map-rendering implementation remain licensed under the MIT License unless a file states otherwise.
|
|
14
|
+
|
|
15
|
+
PRTS.chat and prts-terrarchive are unofficial community projects. They are not affiliated with, endorsed by, sponsored by, or otherwise officially connected with the developers or publishers of Arknights or Arknights: Endfield.
|
|
16
|
+
|
|
17
|
+
## Corpus datasets
|
|
18
|
+
|
|
19
|
+
The complete corpus datasets are not included in this Git repository or in the bundled plugin code. The plugin first obtains the current release identity and file digests from PRTS.chat; users may then explicitly download the digest-bound bytes from the listed ModelScope mirrors, with PRTS.chat as a fallback byte source:
|
|
20
|
+
|
|
21
|
+
- [PRTS.chat Arknights corpus](https://modelscope.cn/datasets/HTiantian/prts-agent-corpus-arknights)
|
|
22
|
+
- [PRTS Arknights: Endfield corpus](https://modelscope.cn/datasets/HTiantian/prts-agent-corpus-endfield)
|
|
23
|
+
|
|
24
|
+
Downloaded datasets retain their upstream licenses and notices, including the source declarations below and those on the corresponding ModelScope dataset pages. This repository's MIT License does not relicense corpus data.
|
|
25
|
+
|
|
26
|
+
## PRTS Wiki: Terra timeline (泰拉年表)
|
|
27
|
+
|
|
28
|
+
Timeline data comes from [PRTS Wiki's 泰拉年表](https://prts.wiki/w/%E6%B3%B0%E6%8B%89%E5%B9%B4%E8%A1%A8), authored by the editors identified in its [revision history](https://prts.wiki/index.php?title=%E6%B3%B0%E6%8B%89%E5%B9%B4%E8%A1%A8&action=history), under [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/). PRTS.chat extracts and structures event data and groups it by activity for retrieval. The source chronology is inferred from game stories and may contain errors or unfinished content; that limitation also applies to the processed data. This use does not imply endorsement by PRTS Wiki.
|
|
29
|
+
|
|
30
|
+
The PRTS-authored timeline material retains its CC BY-NC-SA 4.0 license; the independent plugin code remains under this repository's MIT License. Quoted game-original content retains its respective rights, as described above.
|
|
31
|
+
|
|
32
|
+
## Self-built Wiki: arknights_lore_wiki
|
|
33
|
+
|
|
34
|
+
Self-built Wiki data is sourced from [littlepangding/arknights_lore_wiki](https://github.com/littlepangding/arknights_lore_wiki). Its original material is covered by the [upstream MIT License](https://github.com/littlepangding/arknights_lore_wiki/blob/main/LICENSE), Copyright (c) 2025 littlepangding. Quoted game text and other third-party material retain their respective rights.
|
|
35
|
+
|
|
36
|
+
## Other third-party software and assets
|
|
37
|
+
|
|
38
|
+
Dependencies and other third-party components remain subject to their own licenses. Their inclusion or use does not change those licenses.
|
|
39
|
+
|
|
40
|
+
## Rhine Lab archive browser
|
|
41
|
+
|
|
42
|
+
The optional `rhine-lab` skin adapts the archive interaction and uses the original
|
|
43
|
+
`archive-cassette.glb` and `archive-assembly.glb` from [LBEILC/RhineLabUI](https://github.com/LBEILC/RhineLabUI)
|
|
44
|
+
(source revision `e313777`). Its program code is MIT, Copyright (c) 2026 LBEILC;
|
|
45
|
+
the notice is preserved in `lib/rhine/licenses/RhineLabUI-MIT.txt`.
|
|
46
|
+
The upstream README explicitly excludes GLB models and original-work visual
|
|
47
|
+
materials from that MIT grant. `lib/rhine/assets/*.glb` retain
|
|
48
|
+
those upstream restrictions and the rights of the original rights holders.
|
|
49
|
+
This package does not relicense that model, the Rhine Lab identity, or game lore.
|
|
50
|
+
The packaged skin does not include upstream audio or PV footage. Four unmodified MiSans fonts
|
|
51
|
+
are included with their upstream copyright notice and license in `lib/rhine/fonts/NOTICE.txt`
|
|
52
|
+
and `lib/rhine/fonts/MiSans-license.pdf`. Rolling Number 0.4.1 retains its MIT license
|
|
53
|
+
in `lib/rhine/licenses/rolling-number-MIT.txt`.
|
|
54
|
+
|
|
55
|
+
The bundled Three.js runtime is MIT, Copyright © 2010–2026 three.js authors;
|
|
56
|
+
its license is preserved in `lib/rhine/licenses/three-MIT.txt`.
|
|
57
|
+
|
|
58
|
+
Research report formatting uses [markdown-it](https://github.com/markdown-it/markdown-it)
|
|
59
|
+
15.0.1 and its bundled dependencies. Their MIT and BSD notices are preserved in
|
|
60
|
+
`lib/rhine/licenses/markdown-it-MIT.txt`, `entities-BSD-2-Clause.txt`, `linkify-it-MIT.txt`,
|
|
61
|
+
`mdurl-MIT.txt`, `punycode.js-MIT.txt`, and `uc.micro-MIT.txt` in that directory.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// Run with .node22/bin/node. Produces version-bound normal/coverage data, no GL.
|
|
2
|
+
import { readFile, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
|
|
4
|
+
import { createArrayDetail } from './rhine-detail-baker.ts';
|
|
5
|
+
import { detailSignature } from '../ui/rhine/original/detail-signature.ts';
|
|
6
|
+
const bytes = await readFile(new URL('../lib/rhine/assets/archive-cassette.glb', import.meta.url));
|
|
7
|
+
const asset = await new GLTFLoader().parseAsync(bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength), '');
|
|
8
|
+
asset.scene.updateMatrixWorld(true);
|
|
9
|
+
const mesh = asset.scene.getObjectsByProperty('isMesh', true).find(mesh => mesh.material.name.startsWith('Internal_Ceramic'));
|
|
10
|
+
const source = mesh.geometry.clone().applyMatrix4(mesh.matrixWorld).scale(1, 1, 1), indices = [], position = source.attributes.position;
|
|
11
|
+
for (let i = 0; i < source.index.count; i += 3) {
|
|
12
|
+
const vertices = [source.index.getX(i), source.index.getX(i + 1), source.index.getX(i + 2)];
|
|
13
|
+
if (vertices.every(v => position.getZ(v) > 0.22)) indices.push(...vertices);
|
|
14
|
+
}
|
|
15
|
+
source.setIndex(indices);
|
|
16
|
+
const bake = createArrayDetail('Array_Interior_Lettering', source, mesh.material);
|
|
17
|
+
if (!bake) throw new Error('The shallow lettering could not be baked');
|
|
18
|
+
const { width, height, data } = bake.texture.image;
|
|
19
|
+
const runs = [];
|
|
20
|
+
let previous = -1, count = 0;
|
|
21
|
+
for (let i = 0; i < data.length; i += 4) {
|
|
22
|
+
const value = (data[i] + data[i + 1] * 256 + data[i + 2] * 65536 + data[i + 3] * 16777216) >>> 0;
|
|
23
|
+
if (value !== previous && count) { runs.push(count, previous); count = 0; }
|
|
24
|
+
previous = value; count++;
|
|
25
|
+
}
|
|
26
|
+
if (count) runs.push(count, previous);
|
|
27
|
+
bake.geometry.computeBoundingBox();
|
|
28
|
+
const bounds = bake.geometry.boundingBox;
|
|
29
|
+
const payload = { signature: detailSignature(source), width, height, sourceTriangles: indices.length / 3,
|
|
30
|
+
min: bounds.min.toArray(), max: bounds.max.toArray(), runs };
|
|
31
|
+
await writeFile(new URL('../ui/rhine/original/array-detail-data.ts', import.meta.url),
|
|
32
|
+
'// Generated by bin/bake-rhine-details.mjs from archive-cassette.glb.\nexport default ' + JSON.stringify(payload) + ';\n');
|
|
33
|
+
console.log({ signature: payload.signature, width, height, textureBytes: data.byteLength, encodedRuns: runs.length / 2 });
|
|
34
|
+
bake.geometry.dispose(); bake.material.dispose(); bake.texture.dispose(); source.dispose();
|