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.
Files changed (287) hide show
  1. package/GAME_ASSETS.md +26 -0
  2. package/LICENSE +21 -0
  3. package/README.en.md +274 -0
  4. package/README.md +423 -0
  5. package/THIRD_PARTY_NOTICES.md +61 -0
  6. package/bin/bake-rhine-details.mjs +34 -0
  7. package/bin/install.js +273 -0
  8. package/bin/pack-map-assets.mjs +110 -0
  9. package/bin/preview-rhine.mjs +71 -0
  10. package/bin/rhine-detail-baker.ts +84 -0
  11. package/contracts/cloud_tools_v1.schema.json +243 -0
  12. package/contracts/corpus_i18n_v1.schema.json +179 -0
  13. package/contracts/corpus_tools_v1.schema.json +1801 -0
  14. package/cordis.patch.yml +32 -0
  15. package/docs/endfield-official-i18n.md +103 -0
  16. package/lib/client.js +3912 -0
  17. package/lib/endfield-map/map.js.br +0 -0
  18. package/lib/endfield-map/map.js.gz +0 -0
  19. package/lib/endfield-map/resources/map-00b0d0744a1b4404.json.br +0 -0
  20. package/lib/endfield-map/resources/map-00b0d0744a1b4404.json.gz +0 -0
  21. package/lib/endfield-map/resources/map-01616f534aaaeca1.png +0 -0
  22. package/lib/endfield-map/resources/map-1562e0dff4be3d23.png +0 -0
  23. package/lib/endfield-map/resources/map-160fe040f080f6a3.png +0 -0
  24. package/lib/endfield-map/resources/map-17b9d8be25dc2b39.json.br +0 -0
  25. package/lib/endfield-map/resources/map-17b9d8be25dc2b39.json.gz +0 -0
  26. package/lib/endfield-map/resources/map-1c4245c4e8b80c43.json.br +0 -0
  27. package/lib/endfield-map/resources/map-1c4245c4e8b80c43.json.gz +0 -0
  28. package/lib/endfield-map/resources/map-1d30baaaef3e29cc.png +0 -0
  29. package/lib/endfield-map/resources/map-21a61386af79cd12.json.br +0 -0
  30. package/lib/endfield-map/resources/map-21a61386af79cd12.json.gz +0 -0
  31. package/lib/endfield-map/resources/map-24b920b8dab49b44.json.br +0 -0
  32. package/lib/endfield-map/resources/map-24b920b8dab49b44.json.gz +0 -0
  33. package/lib/endfield-map/resources/map-26caf8d71247abb7.png +0 -0
  34. package/lib/endfield-map/resources/map-2729942c89545e73.json.br +0 -0
  35. package/lib/endfield-map/resources/map-2729942c89545e73.json.gz +0 -0
  36. package/lib/endfield-map/resources/map-29063a9802f67014.json.br +0 -0
  37. package/lib/endfield-map/resources/map-29063a9802f67014.json.gz +0 -0
  38. package/lib/endfield-map/resources/map-2f35d09a3ab60a63.json.br +0 -0
  39. package/lib/endfield-map/resources/map-2f35d09a3ab60a63.json.gz +0 -0
  40. package/lib/endfield-map/resources/map-2f98a873da81425e.json.br +0 -0
  41. package/lib/endfield-map/resources/map-2f98a873da81425e.json.gz +0 -0
  42. package/lib/endfield-map/resources/map-3ab978ae44190f80.json.br +0 -0
  43. package/lib/endfield-map/resources/map-3ab978ae44190f80.json.gz +0 -0
  44. package/lib/endfield-map/resources/map-3b62c80d14208902.json.br +0 -0
  45. package/lib/endfield-map/resources/map-3b62c80d14208902.json.gz +0 -0
  46. package/lib/endfield-map/resources/map-3d486e887ae121ac.png +0 -0
  47. package/lib/endfield-map/resources/map-418dc4865608fce5.png +0 -0
  48. package/lib/endfield-map/resources/map-4366b84607335f76.json.br +0 -0
  49. package/lib/endfield-map/resources/map-4366b84607335f76.json.gz +0 -0
  50. package/lib/endfield-map/resources/map-4371259d3ab7aac7.png +0 -0
  51. package/lib/endfield-map/resources/map-48dcc0fd55e13f7f.png +0 -0
  52. package/lib/endfield-map/resources/map-4aabda0e41197570.json.br +0 -0
  53. package/lib/endfield-map/resources/map-4aabda0e41197570.json.gz +0 -0
  54. package/lib/endfield-map/resources/map-505f5687b287043c.json.br +0 -0
  55. package/lib/endfield-map/resources/map-505f5687b287043c.json.gz +0 -0
  56. package/lib/endfield-map/resources/map-5177e9d1d46f47e2.png +0 -0
  57. package/lib/endfield-map/resources/map-51baeb59b7f8c28d.png +0 -0
  58. package/lib/endfield-map/resources/map-549561b46e621874.png +0 -0
  59. package/lib/endfield-map/resources/map-56c6a0bef799c8dc.json.br +0 -0
  60. package/lib/endfield-map/resources/map-56c6a0bef799c8dc.json.gz +0 -0
  61. package/lib/endfield-map/resources/map-5a6963909423b674.png +0 -0
  62. package/lib/endfield-map/resources/map-5a9c533c0552d7b7.png +0 -0
  63. package/lib/endfield-map/resources/map-5d20ae9ffa9a02b0.png +0 -0
  64. package/lib/endfield-map/resources/map-626c8847393f60bf.png +0 -0
  65. package/lib/endfield-map/resources/map-63d43cbec3bed3b8.png +0 -0
  66. package/lib/endfield-map/resources/map-661b6ec56e722574.png +0 -0
  67. package/lib/endfield-map/resources/map-6ddd384eca190828.png +0 -0
  68. package/lib/endfield-map/resources/map-6fc1aa9144f8156c.json.br +0 -0
  69. package/lib/endfield-map/resources/map-6fc1aa9144f8156c.json.gz +0 -0
  70. package/lib/endfield-map/resources/map-738ebaa002c33cfc.png +0 -0
  71. package/lib/endfield-map/resources/map-758c13be6085ec07.json.br +0 -0
  72. package/lib/endfield-map/resources/map-758c13be6085ec07.json.gz +0 -0
  73. package/lib/endfield-map/resources/map-78929f26d6844509.png +0 -0
  74. package/lib/endfield-map/resources/map-7f09c142950a0f74.png +0 -0
  75. package/lib/endfield-map/resources/map-8385e11f39e1a51c.json.br +0 -0
  76. package/lib/endfield-map/resources/map-8385e11f39e1a51c.json.gz +0 -0
  77. package/lib/endfield-map/resources/map-881343926a568f27.json.br +0 -0
  78. package/lib/endfield-map/resources/map-881343926a568f27.json.gz +0 -0
  79. package/lib/endfield-map/resources/map-8d1ade3f01d952b0.png +0 -0
  80. package/lib/endfield-map/resources/map-8fef3495bb7ed60f.png +0 -0
  81. package/lib/endfield-map/resources/map-907a7ecf8a0ce352.png +0 -0
  82. package/lib/endfield-map/resources/map-9113d5951c4db903.json.br +0 -0
  83. package/lib/endfield-map/resources/map-9113d5951c4db903.json.gz +0 -0
  84. package/lib/endfield-map/resources/map-94ad6634436224e3.json.br +0 -0
  85. package/lib/endfield-map/resources/map-94ad6634436224e3.json.gz +0 -0
  86. package/lib/endfield-map/resources/map-99722e61da5f3e53.png +0 -0
  87. package/lib/endfield-map/resources/map-9be9596cc059abe3.png +0 -0
  88. package/lib/endfield-map/resources/map-a4db9a4763e47fbf.png +0 -0
  89. package/lib/endfield-map/resources/map-a4e8ef07159997e7.json.br +0 -0
  90. package/lib/endfield-map/resources/map-a4e8ef07159997e7.json.gz +0 -0
  91. package/lib/endfield-map/resources/map-ab35d06875ee418f.png +0 -0
  92. package/lib/endfield-map/resources/map-ac51bb3e7623cd8b.png +0 -0
  93. package/lib/endfield-map/resources/map-ac830a66296bc83a.png +0 -0
  94. package/lib/endfield-map/resources/map-b3fd04209718e55e.json.br +0 -0
  95. package/lib/endfield-map/resources/map-b3fd04209718e55e.json.gz +0 -0
  96. package/lib/endfield-map/resources/map-b8164f1af7c5d895.png +0 -0
  97. package/lib/endfield-map/resources/map-b8cde93b965384d8.json.br +0 -0
  98. package/lib/endfield-map/resources/map-b8cde93b965384d8.json.gz +0 -0
  99. package/lib/endfield-map/resources/map-b8e48511502e0e8d.json.br +0 -0
  100. package/lib/endfield-map/resources/map-b8e48511502e0e8d.json.gz +0 -0
  101. package/lib/endfield-map/resources/map-bfc58277d5ba649d.png +0 -0
  102. package/lib/endfield-map/resources/map-c013f82048c6891a.png +0 -0
  103. package/lib/endfield-map/resources/map-c49c947841ae4ab5.json.br +0 -0
  104. package/lib/endfield-map/resources/map-c49c947841ae4ab5.json.gz +0 -0
  105. package/lib/endfield-map/resources/map-c4d1b1c6d6706c81.json.br +0 -0
  106. package/lib/endfield-map/resources/map-c4d1b1c6d6706c81.json.gz +0 -0
  107. package/lib/endfield-map/resources/map-c607f8b4c8ad8967.png +0 -0
  108. package/lib/endfield-map/resources/map-c6f20276b8781326.json.br +0 -0
  109. package/lib/endfield-map/resources/map-c6f20276b8781326.json.gz +0 -0
  110. package/lib/endfield-map/resources/map-d51adf5952af1e8e.png +0 -0
  111. package/lib/endfield-map/resources/map-d695eface22f8b74.json.br +0 -0
  112. package/lib/endfield-map/resources/map-d695eface22f8b74.json.gz +0 -0
  113. package/lib/endfield-map/resources/map-db11d394456a7465.png +0 -0
  114. package/lib/endfield-map/resources/map-dcc4d218581e3dc6.png +0 -0
  115. package/lib/endfield-map/resources/map-ddd43dbb8ab8a4e3.json.br +0 -0
  116. package/lib/endfield-map/resources/map-ddd43dbb8ab8a4e3.json.gz +0 -0
  117. package/lib/endfield-map/resources/map-defe5db7dabf748a.png +0 -0
  118. package/lib/endfield-map/resources/map-e1aeb833e22520aa.json.br +0 -0
  119. package/lib/endfield-map/resources/map-e1aeb833e22520aa.json.gz +0 -0
  120. package/lib/endfield-map/resources/map-e25ee9af6e493500.png +0 -0
  121. package/lib/endfield-map/resources/map-e3824082cd6f747d.json.br +0 -0
  122. package/lib/endfield-map/resources/map-e3824082cd6f747d.json.gz +0 -0
  123. package/lib/endfield-map/resources/map-e694a91e630b1bd6.png +0 -0
  124. package/lib/endfield-map/resources/map-eaa93af79d12a87d.png +0 -0
  125. package/lib/endfield-map/resources/map-ec9575ee65d7766f.json.br +0 -0
  126. package/lib/endfield-map/resources/map-ec9575ee65d7766f.json.gz +0 -0
  127. package/lib/endfield-map/resources/map-ede421a329dc78a4.png +0 -0
  128. package/lib/endfield-map/resources/map-eff3bce8f6888fc5.json.br +0 -0
  129. package/lib/endfield-map/resources/map-eff3bce8f6888fc5.json.gz +0 -0
  130. package/lib/endfield-map/resources/map-fb5f4a59a181452c.png +0 -0
  131. package/lib/endfield-map/resources/map-fdeaa17eeba90d8e.json.br +0 -0
  132. package/lib/endfield-map/resources/map-fdeaa17eeba90d8e.json.gz +0 -0
  133. package/lib/rhine/assets/archive-assembly.glb +0 -0
  134. package/lib/rhine/assets/archive-cassette.glb +0 -0
  135. package/lib/rhine/fonts/MiSans-Bold.woff2 +0 -0
  136. package/lib/rhine/fonts/MiSans-Demibold.woff2 +0 -0
  137. package/lib/rhine/fonts/MiSans-Light.woff2 +0 -0
  138. package/lib/rhine/fonts/MiSans-Regular.woff2 +0 -0
  139. package/lib/rhine/fonts/MiSans-license.pdf +0 -0
  140. package/lib/rhine/fonts/NOTICE.txt +6 -0
  141. package/lib/rhine/licenses/RhineLabUI-MIT.txt +21 -0
  142. package/lib/rhine/licenses/entities-BSD-2-Clause.txt +11 -0
  143. package/lib/rhine/licenses/linkify-it-MIT.txt +22 -0
  144. package/lib/rhine/licenses/markdown-it-MIT.txt +22 -0
  145. package/lib/rhine/licenses/mdurl-MIT.txt +45 -0
  146. package/lib/rhine/licenses/punycode.js-MIT.txt +20 -0
  147. package/lib/rhine/licenses/rolling-number-MIT.txt +21 -0
  148. package/lib/rhine/licenses/three-MIT.txt +21 -0
  149. package/lib/rhine/licenses/uc.micro-MIT.txt +20 -0
  150. package/lib/rhine/rhine.css +1 -0
  151. package/lib/rhine/rhine.js +5106 -0
  152. package/lib/skins/common.css +31 -0
  153. package/lib/skins/endfield-aic.css +141 -0
  154. package/lib/skins/prts-agent.css +136 -0
  155. package/lib/skins/rhine-lab.css +70 -0
  156. package/package.json +112 -0
  157. package/presets/definition.js +26 -0
  158. package/presets/prts/agent.cordis.yml +25 -0
  159. package/presets/prts/preset.yml +3 -0
  160. package/presets/register.js +86 -0
  161. package/resources/entity-routing.json +21 -0
  162. package/skills/prts-investigation/SKILL.md +121 -0
  163. package/skills/prts-retrieval/SKILL.md +35 -0
  164. package/skills/prts-retrieval/references/cloud-tools.md +13 -0
  165. package/skills/prts-retrieval/references/diagnostics.md +15 -0
  166. package/skills/prts-retrieval/references/local-tools.md +24 -0
  167. package/skills/prts-retrieval/references/module-arknights.md +23 -0
  168. package/skills/prts-retrieval/references/module-dual.md +15 -0
  169. package/skills/prts-retrieval/references/module-endfield.md +21 -0
  170. package/skills/prts-retrieval/references/retrieval-process.md +44 -0
  171. package/skills/prts-retrieval/references/retrieval-recipes-dual.md +34 -0
  172. package/skills/prts-retrieval/references/retrieval-recipes-endfield.md +37 -0
  173. package/skills/prts-retrieval/references/retrieval-recipes.md +39 -0
  174. package/skills/prts-retrieval/references/tools-runtime.md +48 -0
  175. package/skills/prts-retrieval/references/wiki-schema.md +38 -0
  176. package/src/archive-presentation.js +287 -0
  177. package/src/cloud-projection.js +124 -0
  178. package/src/cloud.js +498 -0
  179. package/src/entity-recognizer.js +311 -0
  180. package/src/entity-routing.js +82 -0
  181. package/src/evidence-state.js +332 -0
  182. package/src/i18n.js +365 -0
  183. package/src/index.js +1261 -0
  184. package/src/installer.js +1362 -0
  185. package/src/investigation-review.js +87 -0
  186. package/src/investigation-store.js +579 -0
  187. package/src/investigation-tools.js +113 -0
  188. package/src/localization-format.js +23 -0
  189. package/src/manual-search.js +103 -0
  190. package/src/read.js +1097 -0
  191. package/src/release-compatibility.js +73 -0
  192. package/src/release-watch.js +40 -0
  193. package/src/search-projection.js +139 -0
  194. package/src/search.js +1522 -0
  195. package/src/skill.js +98 -0
  196. package/src/source-map.js +348 -0
  197. package/src/state.js +314 -0
  198. package/src/store.js +1569 -0
  199. package/src/timeline.js +386 -0
  200. package/src/ui.js +1353 -0
  201. package/src/wiki.js +111 -0
  202. package/tsconfig.rhine.json +15 -0
  203. package/ui/rhine/archive-navigation-limit.ts +31 -0
  204. package/ui/rhine/archive-rack.ts +83 -0
  205. package/ui/rhine/assets/evidence-observatory.webp +0 -0
  206. package/ui/rhine/board-plane-transform.ts +24 -0
  207. package/ui/rhine/catalogue.ts +72 -0
  208. package/ui/rhine/deferred-preparation.ts +146 -0
  209. package/ui/rhine/evidence-board-controls.css +22 -0
  210. package/ui/rhine/evidence-board-history.ts +73 -0
  211. package/ui/rhine/evidence-board-model.ts +189 -0
  212. package/ui/rhine/evidence-board-panel.ts +762 -0
  213. package/ui/rhine/evidence-board-scene.ts +548 -0
  214. package/ui/rhine/evidence-board.css +191 -0
  215. package/ui/rhine/evidence-card-art.ts +470 -0
  216. package/ui/rhine/evidence-card-style.ts +17 -0
  217. package/ui/rhine/evidence-inbox-scene.ts +43 -0
  218. package/ui/rhine/evidence-inbox.css +29 -0
  219. package/ui/rhine/evidence-inbox.ts +104 -0
  220. package/ui/rhine/index.ts +12 -0
  221. package/ui/rhine/interaction.css +20 -0
  222. package/ui/rhine/investigation-board-plane.ts +5 -0
  223. package/ui/rhine/investigation-board.css +34 -0
  224. package/ui/rhine/investigation-board.ts +348 -0
  225. package/ui/rhine/investigation-edits.ts +46 -0
  226. package/ui/rhine/investigation-layout.ts +29 -0
  227. package/ui/rhine/label-prefetch.ts +34 -0
  228. package/ui/rhine/looping-title.ts +40 -0
  229. package/ui/rhine/manual-search.css +41 -0
  230. package/ui/rhine/manual-search.ts +89 -0
  231. package/ui/rhine/original/appearance.ts +180 -0
  232. package/ui/rhine/original/archive-label.ts +84 -0
  233. package/ui/rhine/original/archive-lighting.ts +39 -0
  234. package/ui/rhine/original/archive-loop.ts +82 -0
  235. package/ui/rhine/original/archive-refill.ts +64 -0
  236. package/ui/rhine/original/array-detail-data.ts +2 -0
  237. package/ui/rhine/original/array-detail.ts +41 -0
  238. package/ui/rhine/original/array-interior.ts +411 -0
  239. package/ui/rhine/original/array-occlusion.ts +166 -0
  240. package/ui/rhine/original/array-shell.ts +38 -0
  241. package/ui/rhine/original/array-visibility.ts +309 -0
  242. package/ui/rhine/original/asset-url.ts +4 -0
  243. package/ui/rhine/original/brand.ts +12 -0
  244. package/ui/rhine/original/cassette-lod.ts +81 -0
  245. package/ui/rhine/original/data.ts +21 -0
  246. package/ui/rhine/original/decryption.ts +185 -0
  247. package/ui/rhine/original/detail-signature.ts +18 -0
  248. package/ui/rhine/original/glass-reveal.ts +45 -0
  249. package/ui/rhine/original/internal-optics.ts +70 -0
  250. package/ui/rhine/original/label-renderer.ts +119 -0
  251. package/ui/rhine/original/label-textures.ts +117 -0
  252. package/ui/rhine/original/model-viewer.ts +658 -0
  253. package/ui/rhine/original/motion.ts +116 -0
  254. package/ui/rhine/original/opaque-backfaces.ts +64 -0
  255. package/ui/rhine/original/program-preparation.ts +111 -0
  256. package/ui/rhine/original/quality-renderer.ts +97 -0
  257. package/ui/rhine/original/quality-settings.ts +111 -0
  258. package/ui/rhine/original/render-quality.ts +163 -0
  259. package/ui/rhine/original/scene.ts +2051 -0
  260. package/ui/rhine/original/shelf-interior.ts +142 -0
  261. package/ui/rhine/original/ui-transitions.ts +111 -0
  262. package/ui/rhine/original/viewer-camera.ts +92 -0
  263. package/ui/rhine/original/viewport-layout.ts +41 -0
  264. package/ui/rhine/original-ui.css +2334 -0
  265. package/ui/rhine/readability.css +46 -0
  266. package/ui/rhine/reading-object.ts +96 -0
  267. package/ui/rhine/reading-origin.ts +28 -0
  268. package/ui/rhine/reading-room.css +55 -0
  269. package/ui/rhine/report-markdown.ts +98 -0
  270. package/ui/rhine/scene-edge-navigation.ts +84 -0
  271. package/ui/rhine/scene.ts +1726 -0
  272. package/ui/rhine/shelf-layout.ts +38 -0
  273. package/ui/rhine/snapshot-update-gate.ts +22 -0
  274. package/ui/rhine/source-reading.ts +15 -0
  275. package/ui/rhine/source-selection.css +164 -0
  276. package/ui/rhine/temporary-performance-observers.ts +163 -0
  277. package/ui/rhine/temporary-performance-panel.ts +124 -0
  278. package/ui/rhine/temporary-performance.css +19 -0
  279. package/ui/rhine/temporary-performance.ts +552 -0
  280. package/ui/rhine/temporary-render-diagnostics.ts +105 -0
  281. package/ui/rhine/tool-activity.ts +69 -0
  282. package/ui/rhine/types.ts +219 -0
  283. package/ui/rhine/visible-scene-hit.ts +13 -0
  284. package/ui/rhine/workbench.css +818 -0
  285. package/ui/rhine/workbench.ts +2245 -0
  286. package/ui/rhine/workspace-travel.ts +32 -0
  287. package/vite.rhine.config.ts +19 -0
package/GAME_ASSETS.md ADDED
@@ -0,0 +1,26 @@
1
+ # Game Asset Inventory
2
+
3
+ This file identifies game-derived resources packaged for the Arknights: Endfield map and skin experience. These resources are not covered by the MIT License in [`LICENSE`](LICENSE).
4
+
5
+ ## Excluded paths
6
+
7
+ - `lib/endfield-map/resources/*.png`
8
+ - `lib/endfield-map/resources/*.json.br`
9
+ - `lib/endfield-map/resources/*.json.gz`
10
+ - `lib/rhine/assets/archive-cassette.glb` — from LBEILC/RhineLabUI;
11
+ the upstream model is not covered by its code's MIT license. See
12
+ [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md#rhine-lab-archive-browser).
13
+ - `lib/rhine/assets/archive-assembly.glb` — the same upstream's assembly model,
14
+ under the same exclusions.
15
+
16
+ The Brotli (`.br`) and gzip (`.gz`) files are alternate compressed representations of map data and may include serialized geometry, materials, textures, or related presentation data used by the skin.
17
+
18
+ The following project-authored implementation files are not part of this exclusion and remain covered by the MIT License:
19
+
20
+ - `lib/endfield-map/map.js.br`
21
+ - `lib/endfield-map/map.js.gz`
22
+ - the source code that loads, renders, and integrates the map and skin
23
+
24
+ Arknights: Endfield and all related names, trademarks, artwork, models, textures, game data, and other game materials belong to their respective rights holders. Their presence in this package does not grant permission to extract, reuse, modify, sublicense, or redistribute them independently.
25
+
26
+ This is an unofficial community project and is not affiliated with or endorsed by the game's developers or publishers.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 PRTS.chat contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.en.md ADDED
@@ -0,0 +1,274 @@
1
+ # prts-terrarchive (English)
2
+
3
+ The optional **Rhine Lab Archive** skin combines a continuous 3D retrieval array,
4
+ persistent investigation boards, a per-board evidence inbox, and a two-level archive rack
5
+ with 24 sources per page. The Agent adds clues and relationships and publishes versioned
6
+ reports; it decides whether a follow-up continues an investigation or starts a new one.
7
+ Candidates stay in the array, while actually read or manually saved sources enter the rack.
8
+ Users can stage important material in a chosen board's inbox, edit matching paper cards,
9
+ and connect clues with red strings.
10
+
11
+ `investigation_get` recalls clue text, versioned reports, the archive rack, evidence inboxes,
12
+ and saved source bodies. Manual bookmarks now persist in session storage; existing browser
13
+ bookmarks are imported automatically. User additions and edits appear in the Agent's next
14
+ model context, or its next conversation when idle, without starting a new turn. Reminders
15
+ remain pending until the corresponding content is successfully returned to the Agent;
16
+ browser reads and unrelated pages do not acknowledge them.
17
+
18
+ Enable it in Settings → Plugins → PRTS Corpus → Skin, then open the archive from
19
+ a session header. Local and cloud search, Markdown reading, excerpts and tool activity
20
+ share the workspace. Returning from a source restores the previous view and position.
21
+ Manual browsing pauses automatic Agent following until explicitly resumed. Visible room
22
+ models also navigate between stations. A text reader remains available without WebGL.
23
+
24
+ For local development, use Node.js 22.19 or newer, then run `npm ci`,
25
+ `npm run build:rhine`, and `npm run preview:rhine`. See the
26
+ [workspace guide](docs/rhine-lab.md) and [interaction rules](docs/rhine-interaction-flow.md).
27
+
28
+ PRTS.chat corpus plugin for DeepSeek Harness (DSH). Provides local corpus
29
+ search, source reading and an activity-timeline tool, plus optional
30
+ PRTS.cloud hybrid retrieval. The plugin first obtains the approved current
31
+ release and per-file digests from the fixed `https://prts.chat` trust origin,
32
+ then downloads the local corpus from ModelScope or a configurable byte-only fallback;
33
+ the optional cloud service discovers candidates that can be mapped back to
34
+ local source text for verification. Anonymous cloud retrieval currently has an
35
+ allowance of 1,000 calls per user per day for DSH clients; this policy may
36
+ change as service capacity evolves.
37
+
38
+ - Registers DSH `ToolDefinition`s through the host plugin interface.
39
+ - Host-resident instance (settings UI + data manager) + per-session "PRTS
40
+ mode" preset that mounts the tools only for sessions that select it.
41
+ - The fixed `https://prts.chat` origin is the trust source for latest-release
42
+ resolution and manifests; ModelScope and the configurable fallback only serve
43
+ bytes for that fixed release and cannot select or attest a version.
44
+ - Three optional skins (PRTS Agent, Endfield AIC terminal, Rhine Lab Archive) on top of the
45
+ native Harness UI.
46
+
47
+ ## Data sources
48
+
49
+ - **Self-built Wiki data**: sourced from [littlepangding/arknights_lore_wiki](https://github.com/littlepangding/arknights_lore_wiki).
50
+ - **Terra timeline data**: sourced from [PRTS Wiki's Terra timeline (泰拉年表)](https://prts.wiki/w/%E6%B3%B0%E6%8B%89%E5%B9%B4%E8%A1%A8) for the plugin's timeline search.
51
+
52
+ ## Install
53
+
54
+ Web requires Node.js >= 22.19 and DSH >= 0.1.2-alpha.2. The current compatibility
55
+ target is DSH 0.1.7-rc.2. An official Electron Desktop installation supplies
56
+ its own runtime. Corpus disk usage is shown in Settings before download.
57
+
58
+ ### Local Web installation
59
+
60
+ Install from a local checkout, or use PRTS Portable with the plugin already included:
61
+
62
+ ```bash
63
+ npm install --global @deepseek-ai/dsh@0.1.7-rc.2
64
+ git clone https://github.com/HTian-qwq/prts-terrarchive.git
65
+ cd prts-terrarchive
66
+ node bin/install.js web
67
+ ```
68
+
69
+ The local installer adds the package to the selected profile. DSH 0.1.7 and
70
+ later register PRTS mode directly; older DSH versions still create or migrate
71
+ the compatibility preset in `$DSH_HOME/.agent-presets/prts`. With no
72
+ second argument it uses its own checkout. Another local directory or archive
73
+ can be supplied explicitly:
74
+
75
+ ```bash
76
+ node bin/install.js web /path/to/prts-terrarchive
77
+ ```
78
+
79
+ ### Web: install from npm
80
+
81
+ Install the bundle directly from npm; no additional installer command
82
+ or npm lifecycle hook is needed:
83
+
84
+ ```bash
85
+ dsh plugin --profile web add prts-terrarchive@0.2.0
86
+ ```
87
+
88
+ Restart `dsh web`. On DSH 0.1.7 and later the plugin registers PRTS mode
89
+ directly and removes it when disabled or uninstalled. The default mode and
90
+ ordinary running sessions stay intact. The new registry does not read old
91
+ `$DSH_HOME/.agent-presets/prts` files. Migrate any customized old preset
92
+ through the new mode configuration; the old files remain untouched. Older DSH
93
+ releases continue using the file template, preserving user edits. npm does not
94
+ run `postinstall`.
95
+
96
+ ```bash
97
+ dsh plugin --profile web remove prts-terrarchive
98
+ ```
99
+
100
+ ### Official Electron Desktop
101
+
102
+ For Electron Desktop builds compatible with the DSH 0.1.7 plugin interface, enter
103
+ `prts-terrarchive@0.2.0` in the **desktop application's plugin manager**.
104
+ The manager accepts npm registry package names and versions, not GitHub URLs,
105
+ local directories, or tarballs. Electron exclusively manages the `desktop`
106
+ profile: do not run `node bin/install.js desktop` or
107
+ `dsh plugin --profile desktop`.
108
+
109
+ Web and official Desktop share the default `$DSH_HOME` product data while
110
+ installing their plugins separately. The plugin package includes its UI,
111
+ map models, textures, skills, and presets. It does **not** bundle corpus data,
112
+ Node/DSH runtimes, or user data. Open Settings → Plugins → PRTS 语料 and download
113
+ the corpus explicitly before using local retrieval. Switching skins does not
114
+ start a separate model or texture download.
115
+
116
+ PRTS Portable distributions include the plugin, presets, and the complete corpus,
117
+ so no separate corpus download is needed after extraction. Build the official
118
+ Electron portable target with `build-electron.ps1`; the original WebView2 build
119
+ entry remains available. See the [Portable repository](https://github.com/HTian-qwq/prts-terrarchive-portable).
120
+
121
+ Portable builders that already placed the plugin can continue running
122
+ `node bin/install.js web --preset-only` to create or migrate the compatibility
123
+ preset without invoking the DSH CLI.
124
+
125
+ ### Windows
126
+
127
+ Local Web installation requires `dsh.cmd`. The installer invokes it through
128
+ cmd.exe, so plugin paths containing a line break or `%` `!` `&` `|` `<` `>` `^`
129
+ `"` are rejected. Use a directory without these characters. The `DSH`
130
+ environment variable can locate an absolute `dsh.cmd` path. Official DSH stores
131
+ the corpus under `%USERPROFILE%\.dsh\prts-corpus\releases` by default;
132
+ Portable stores sessions and settings in its own `userdata` directory, and the
133
+ bundled corpus and subsequent corpus updates in `corpus/releases`.
134
+
135
+ ### Retrieval settings
136
+
137
+ Select PRTS mode in new sessions to load the corpus tools, DSH's native
138
+ `web_search` and `web_fetch`, and the retrieval Skill. The preset enables both
139
+ `arknights` and `endfield`; Settings stores the effective modules as
140
+ `enabledGames` in `$DSH_HOME/prts-corpus.json`. Start a new session after changing
141
+ them. The preset enables anonymous cloud retrieval by default. A raw plugin
142
+ instance without the cloud configuration keeps it disabled.
143
+
144
+ Static tokens are bound to the saved service origin. Changing the URL cannot
145
+ forward a token to another origin. Re-enter legacy tokens that lack an origin
146
+ binding in Settings; they remain unsent until saved again.
147
+
148
+ After the retrieval Skill loads, matched entities and relationships enter DSH's
149
+ dynamic context for the current question. Each new snapshot supersedes the
150
+ previous one. Tool titles identify local/cloud retrieval and the game scope.
151
+
152
+ ## Skins and assets
153
+
154
+ - **Harness default** keeps the native DSH interface.
155
+ - **PRTS Agent** provides the PRTS.chat terminal-style interface.
156
+ - **Endfield AIC** provides an optional Arknights: Endfield-inspired terminal
157
+ and 3D map. Its runtime code, models, and textures are pre-compressed and
158
+ installed with the plugin; switching skins does not start another download.
159
+
160
+ The two optional skins have separate stylesheets. The client keeps only the
161
+ active skin stylesheet mounted, plus a small shared stylesheet for plugin
162
+ controls, so neither optional skin depends on the other's CSS.
163
+
164
+ The Endfield AIC plugin code, UI integration, and map-rendering implementation
165
+ are licensed under the MIT License. Game-derived models and textures used by
166
+ that skin are not covered by the MIT License and are packaged only as parts of
167
+ the optional skin. See [GAME_ASSETS.md](GAME_ASSETS.md) for the exact paths.
168
+ These assets are independent of corpus version management: corpus datasets are
169
+ downloaded from a verified ModelScope mirror or PRTS.chat on request, while skin assets require no separate
170
+ download.
171
+
172
+ ## Tools
173
+
174
+ - `corpus_search` — grep-style search over the local corpus: literal or a
175
+ linear regex subset (anchors, dot, character classes, escapes and fixed
176
+ `{n}` repetitions; no grouping, alternation or variable quantifiers) on NFKC-normalized text, with resource-type /
177
+ character / story / activity / entity / speaker / Wiki-field filters;
178
+ keep the original conditions and pass `page.next_after` back unchanged as
179
+ `after` to continue, because the readable anchor includes the full
180
+ `data_version` and becomes invalid after a corpus release switch
181
+ - `corpus_read` — read Arknights stages by `stage_code` (adding `story_part`
182
+ only when needed), operator records by character/name/segment, and character
183
+ materials by category; it can stream a whole Arknights activity or Endfield
184
+ mission collection with readable, version-bound continuation positions;
185
+ it can also read a tagged Wiki field or page through a whole document; story
186
+ documents return requested text only (self-built summaries and the
187
+ activity timeline must be fetched explicitly, e.g. via `timeline_search`).
188
+ In a dual-module session, add `game: "arknights"` or `game: "endfield"` only
189
+ when a character locator needs same-name disambiguation.
190
+ Use exactly one primary locator per call. If search returns `document_uid`, it
191
+ replaces `title`; use `{document_uid, line}` or
192
+ `{document_uid, mode:"document"}`, never both locators. `max_lines` and
193
+ `max_chars` only cap output and do not select a read mode
194
+ - `timeline_search` — query the Terra calendar timeline; source markers can
195
+ be resolved back to full provenance
196
+ - `cloud_search` / `cloud_inspect` — optional PRTS.cloud hybrid retrieval
197
+ (enabled via settings; results are mapped back to local documents)
198
+ - `web_search` — native DSH web discovery for external history, etymology,
199
+ folklore, and other non-PRTS sources
200
+ - `web_fetch` — read a known public URL for close reading and cross-checking
201
+
202
+ Repeated and partially reused reads retain the normal page limits and
203
+ continuation. Partial reads include `coverage` identifying previously visible
204
+ lines and newly returned lines; `page.has_more` still determines whether the
205
+ document has more content. Cloud answers remain available when local corpus
206
+ mapping fails, with a warning to install or repair the corpus before verifying
207
+ the original text.
208
+
209
+ If the corpus changes during a read or search, the request returns a retryable
210
+ `PACKAGE_VERSION_MISMATCH`; resolve the locator against the current version
211
+ before retrying. Old operations cannot populate the new version's document or
212
+ search caches. Reused reads and reads spanning multiple documents enforce the
213
+ same version check.
214
+
215
+ Wiki documents are typed as canonical character pages, story/operator-record
216
+ pages, or character-by-activity auxiliary pages. `corpus_search.wiki_sections`
217
+ combines those types with character/activity filters, while
218
+ `corpus_read({title, section})` reads the exact tagged field. See
219
+ `skills/prts-retrieval/references/wiki-schema.md` and `retrieval-recipes.md`
220
+ for field semantics and query recipes.
221
+
222
+ ## Compatibility
223
+
224
+ DSH 0.1.2-alpha.1 and 0.1.2-alpha.2 have completed historical real-host tests
225
+ with the web profile. Alpha.1 was built from the official tag and passed
226
+ installation, preset resolution, host startup, settings-route, and
227
+ client-bundle checks. The current plugin compatibility target is DSH
228
+ 0.1.7-rc.2. The shared Connection Fetch transport supports Web and the official
229
+ Electron source implementation; Web also retains HTTP routes. Declarative
230
+ registration and legacy file seeding pass this project's unit tests. A full
231
+ 0.1.7-rc.2 Host launch and Windows Electron end-to-end test remain to be run.
232
+ The default Electron portable builder pins the official 0.1.7-rc.2 tag; the legacy
233
+ Electron entry pins 0.1.5-alpha.1 and the original WebView2 builder pins
234
+ 0.1.3-alpha.1. Release builds still require a real Windows Host smoke test.
235
+
236
+ Older custom deployments with `includeUserRoot: false` and no other preset root with
237
+ `trust: user` receive no generated preset or root changes; their operator must
238
+ first enable user preset authoring. The plugin relies on internal host surfaces
239
+ (`ctx.tools`, `agent/pre-step`, Connection Fetch, agent presets, client
240
+ slots/theme); after a DSH major upgrade, re-run the smoke checklist below.
241
+
242
+ ## Development
243
+
244
+ `presets/` contains the PRTS composition, declarative definition, and legacy user-preset initializer.
245
+
246
+ ```bash
247
+ npm run check # syntax check
248
+ npm test # node --test suite
249
+ git diff --check
250
+ ```
251
+
252
+ `bin/pack-map-assets.mjs` pre-compresses the Endfield map assets
253
+ (brotli q9 + gzip 9, the same scheme as endfield.prts.chat); the bundled
254
+ plugin only carries compressed variants. `npm run pack:map:restore`
255
+ restores plaintext for development.
256
+
257
+ ## License
258
+
259
+ This project uses the following licensing boundaries:
260
+
261
+ - **Original code and documentation:** licensed under the [MIT License](LICENSE).
262
+ - **Game-related content:** names, trademarks, images, models, textures, game data, and other materials relating to Arknights or Arknights: Endfield are not covered by the MIT License and belong to their respective rights holders. See [GAME_ASSETS.md](GAME_ASSETS.md) for the exact packaged paths.
263
+ - **Corpus datasets:** full datasets are not distributed in this Git repository
264
+ or bundled plugin code. Downloaded PRTS.chat datasets remain subject to the
265
+ licenses, source declarations, and terms on the
266
+ [Arknights dataset](https://modelscope.cn/datasets/HTiantian/prts-agent-corpus-arknights)
267
+ and [Endfield dataset](https://modelscope.cn/datasets/HTiantian/prts-agent-corpus-endfield)
268
+ pages.
269
+
270
+ This is an unofficial community project and is not affiliated with or endorsed by the games' developers or publishers. See [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md) for the complete notice.
271
+
272
+ ### Official Endfield localization lookup
273
+
274
+ `corpus_i18n({query: "管理员,你来了。", languages: ["EN", "JP", "KR"]})` returns official localized text with source references. Existing search results can be passed as `title` or `document_uid`, optionally with `line`. Raw text IDs remain hidden unless `include_ids: true` is requested. Missing translations are explicit; profile records are aligned as a whole, not by Chinese paragraph number. Requires plugin 0.2.0 and a corpus release containing localization attachments. See [format and build instructions](docs/endfield-official-i18n.md).