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
@@ -0,0 +1,1801 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://prts.chat/schemas/corpus-tools-v1.schema.json",
4
+ "title": "PRTS.chat local corpus tool contracts v1",
5
+ "description": "Packaged Agent-subproject request and response contracts for corpus_search and corpus_read over official-game-corpus-index-v1.",
6
+ "$defs": {
7
+ "intentId": {
8
+ "type": "string",
9
+ "minLength": 1,
10
+ "maxLength": 128,
11
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
12
+ },
13
+ "requestId": {
14
+ "type": "string",
15
+ "minLength": 1,
16
+ "maxLength": 128,
17
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
18
+ },
19
+ "sha256": {
20
+ "type": "string",
21
+ "pattern": "^[0-9a-f]{64}$"
22
+ },
23
+ "identifier": {
24
+ "type": "string",
25
+ "minLength": 1,
26
+ "maxLength": 512,
27
+ "pattern": ".*\\S.*"
28
+ },
29
+ "documentUid": {
30
+ "type": "string",
31
+ "pattern": "^doc_[A-Za-z0-9_-]{16}$"
32
+ },
33
+ "identifierList": {
34
+ "type": "array",
35
+ "minItems": 1,
36
+ "maxItems": 100,
37
+ "uniqueItems": true,
38
+ "items": {
39
+ "$ref": "#/$defs/identifier"
40
+ }
41
+ },
42
+ "cursor": {
43
+ "type": "string",
44
+ "minLength": 1,
45
+ "maxLength": 65536
46
+ },
47
+ "searchPageAnchor": {
48
+ "description": "corpus_search 的自然标题续页锚点;必须与原搜索条件一起原样提交,且只对签发它的资料版本有效。",
49
+ "type": "object",
50
+ "additionalProperties": false,
51
+ "required": [
52
+ "data_version",
53
+ "resource_type",
54
+ "title",
55
+ "position"
56
+ ],
57
+ "properties": {
58
+ "data_version": {
59
+ "$ref": "#/$defs/sha256"
60
+ },
61
+ "resource_type": {
62
+ "type": "string",
63
+ "minLength": 1
64
+ },
65
+ "title": {
66
+ "type": "string",
67
+ "minLength": 1
68
+ },
69
+ "position": {
70
+ "type": "integer",
71
+ "minimum": 0,
72
+ "maximum": 10000000
73
+ }
74
+ }
75
+ },
76
+ "corpusSearchRequest": {
77
+ "description": "corpus_search 请求(v4 扁平参数面):query 与各过滤数组均位于顶层;query 缺省时至少需要一个过滤条件;after 与原条件一起提交,旧 cursor 兼容路径必须单独提交。过滤值为 NFKC 归一化后的展示名。",
78
+ "type": "object",
79
+ "additionalProperties": false,
80
+ "properties": {
81
+ "query": {
82
+ "description": "搜索词(≤512 码点)。优先使用实体名、篇名、活动名或原句片段,不要提交整句研究问题;match_mode=regex 时仅支持线性安全子集(≤256 字符;字面量、锚点、点号、字符类、转义和固定次数 {n})。匹配在 NFKC 归一化 + 小写后的文本上进行。",
83
+ "type": "string",
84
+ "maxLength": 2048
85
+ },
86
+ "match_mode": {
87
+ "type": "string",
88
+ "enum": [
89
+ "literal",
90
+ "regex"
91
+ ],
92
+ "default": "literal"
93
+ },
94
+ "resource_types": {
95
+ "description": "资料类型过滤(数组内 OR)。original_story=两款游戏的官方剧情原文;archive=终末地官方档案库;character_profile/character_voice=官方角色档案与语音;character_bundle=角色官方资料合集;character_wiki/story_wiki/knowledge=审校整理资料;其余旧类型保持兼容。",
96
+ "type": "array",
97
+ "minItems": 1,
98
+ "maxItems": 20,
99
+ "uniqueItems": true,
100
+ "items": {
101
+ "type": "string",
102
+ "enum": [
103
+ "story",
104
+ "character_profile",
105
+ "character_module",
106
+ "character_voice",
107
+ "character_skin",
108
+ "operator_record",
109
+ "character_bundle",
110
+ "character_wiki",
111
+ "story_wiki",
112
+ "character_activity_wiki",
113
+ "reviewed_wiki",
114
+ "terra_journey",
115
+ "entity_profile",
116
+ "reference",
117
+ "original_story",
118
+ "archive",
119
+ "knowledge",
120
+ "wiki",
121
+ "character_story",
122
+ "timeline"
123
+ ]
124
+ }
125
+ },
126
+ "character_names": {
127
+ "description": "角色展示名过滤,如“凯尔希”。",
128
+ "type": "array",
129
+ "minItems": 1,
130
+ "maxItems": 16,
131
+ "items": {
132
+ "type": "string",
133
+ "minLength": 1,
134
+ "maxLength": 512,
135
+ "pattern": ".*\\S.*"
136
+ }
137
+ },
138
+ "story_names": {
139
+ "description": "剧情篇章展示名过滤;不要填写内部 story_id 或路径。",
140
+ "type": "array",
141
+ "minItems": 1,
142
+ "maxItems": 16,
143
+ "items": {
144
+ "type": "string",
145
+ "minLength": 1,
146
+ "maxLength": 512,
147
+ "pattern": ".*\\S.*"
148
+ }
149
+ },
150
+ "activity_names": {
151
+ "description": "活动展示名过滤。",
152
+ "type": "array",
153
+ "minItems": 1,
154
+ "maxItems": 16,
155
+ "items": {
156
+ "type": "string",
157
+ "minLength": 1,
158
+ "maxLength": 512,
159
+ "pattern": ".*\\S.*"
160
+ }
161
+ },
162
+ "entity_names": {
163
+ "description": "只返回出现指定实体的行(自动展开别名)。",
164
+ "type": "array",
165
+ "minItems": 1,
166
+ "maxItems": 16,
167
+ "items": {
168
+ "type": "string",
169
+ "minLength": 1,
170
+ "maxLength": 512,
171
+ "pattern": ".*\\S.*"
172
+ }
173
+ },
174
+ "speakers": {
175
+ "description": "结构化说话人过滤,只匹配亲口台词。",
176
+ "type": "array",
177
+ "minItems": 1,
178
+ "maxItems": 16,
179
+ "items": {
180
+ "type": "string",
181
+ "minLength": 1,
182
+ "maxLength": 512,
183
+ "pattern": ".*\\S.*"
184
+ }
185
+ },
186
+ "wiki_sections": {
187
+ "description": "Wiki 标签字段过滤(可与资料类型、角色、活动、query 组合);无 query 的完整字段查询一次只能选一个值。",
188
+ "type": "array",
189
+ "minItems": 1,
190
+ "maxItems": 16,
191
+ "uniqueItems": true,
192
+ "items": {
193
+ "type": "string",
194
+ "enum": [
195
+ "简要介绍",
196
+ "相关角色",
197
+ "详细介绍",
198
+ "剧情高光",
199
+ "战斗表现",
200
+ "相关活动",
201
+ "trivia",
202
+ "角色点评",
203
+ "剧情总结",
204
+ "关键人物",
205
+ "角色剧情概括",
206
+ "所有相关的活动剧情总结",
207
+ "相关剧情总结",
208
+ "相关剧情高光",
209
+ "相关trivia",
210
+ "相关角色总结"
211
+ ]
212
+ }
213
+ },
214
+ "context_terms": {
215
+ "description": "要求命中附近同时出现的语境词;需要 query、speakers 或 entity_names 作为主条件。",
216
+ "type": "array",
217
+ "minItems": 1,
218
+ "maxItems": 8,
219
+ "items": {
220
+ "type": "string",
221
+ "minLength": 1,
222
+ "maxLength": 512
223
+ }
224
+ },
225
+ "after": {
226
+ "description": "与原 query 和过滤条件一起原样提交上一页的 page.next_after。",
227
+ "$ref": "#/$defs/searchPageAnchor"
228
+ },
229
+ "cursor": {
230
+ "description": "下一页原样复制上一页返回的 page.next_cursor;必须单独提交。",
231
+ "$ref": "#/$defs/cursor"
232
+ }
233
+ },
234
+ "anyOf": [
235
+ {
236
+ "required": [
237
+ "query"
238
+ ]
239
+ },
240
+ {
241
+ "required": [
242
+ "resource_types"
243
+ ]
244
+ },
245
+ {
246
+ "required": [
247
+ "character_names"
248
+ ]
249
+ },
250
+ {
251
+ "required": [
252
+ "story_names"
253
+ ]
254
+ },
255
+ {
256
+ "required": [
257
+ "activity_names"
258
+ ]
259
+ },
260
+ {
261
+ "required": [
262
+ "entity_names"
263
+ ]
264
+ },
265
+ {
266
+ "required": [
267
+ "speakers"
268
+ ]
269
+ },
270
+ {
271
+ "required": [
272
+ "wiki_sections"
273
+ ]
274
+ },
275
+ {
276
+ "required": [
277
+ "cursor"
278
+ ]
279
+ }
280
+ ],
281
+ "allOf": [
282
+ {
283
+ "if": {
284
+ "required": [
285
+ "cursor"
286
+ ]
287
+ },
288
+ "then": {
289
+ "not": {
290
+ "anyOf": [
291
+ {
292
+ "required": [
293
+ "query"
294
+ ]
295
+ },
296
+ {
297
+ "required": [
298
+ "match_mode"
299
+ ]
300
+ },
301
+ {
302
+ "required": [
303
+ "resource_types"
304
+ ]
305
+ },
306
+ {
307
+ "required": [
308
+ "character_names"
309
+ ]
310
+ },
311
+ {
312
+ "required": [
313
+ "story_names"
314
+ ]
315
+ },
316
+ {
317
+ "required": [
318
+ "activity_names"
319
+ ]
320
+ },
321
+ {
322
+ "required": [
323
+ "entity_names"
324
+ ]
325
+ },
326
+ {
327
+ "required": [
328
+ "speakers"
329
+ ]
330
+ },
331
+ {
332
+ "required": [
333
+ "wiki_sections"
334
+ ]
335
+ },
336
+ {
337
+ "required": [
338
+ "context_terms"
339
+ ]
340
+ },
341
+ {
342
+ "required": [
343
+ "after"
344
+ ]
345
+ }
346
+ ]
347
+ }
348
+ }
349
+ }
350
+ ]
351
+ },
352
+ "sourceRef": {
353
+ "type": "string",
354
+ "maxLength": 1024,
355
+ "pattern": "^(?:(?:official_game:(?:story:[^:]+|character:[^:]+:[^:]+)|client_data:(?:reviewed_wiki|terra_journey|entities|references):[0-9a-f]{24})|prts:(?:arknights|endfield):[A-Za-z0-9._:%/-]+):L[1-9][0-9]*$"
356
+ },
357
+ "documentSummary": {
358
+ "type": "object",
359
+ "additionalProperties": false,
360
+ "required": [
361
+ "document_uid",
362
+ "game",
363
+ "resource_type",
364
+ "content_type",
365
+ "collection_name",
366
+ "collection_type",
367
+ "document_id",
368
+ "document_type",
369
+ "document_category",
370
+ "document_kind",
371
+ "display_title",
372
+ "collection_id",
373
+ "activity_id",
374
+ "activity_name",
375
+ "source_story_id",
376
+ "story_id",
377
+ "story_code",
378
+ "story_name",
379
+ "part_type",
380
+ "part_label",
381
+ "char_id",
382
+ "character_name",
383
+ "path",
384
+ "text_sha256",
385
+ "line_count",
386
+ "sequence_index",
387
+ "sequence_source",
388
+ "sequence_confidence",
389
+ "previous_document_id",
390
+ "next_document_id",
391
+ "source_ref_prefix",
392
+ "entity_id"
393
+ ],
394
+ "properties": {
395
+ "document_uid": {
396
+ "type": "string"
397
+ },
398
+ "game": {
399
+ "type": "string",
400
+ "enum": [
401
+ "arknights",
402
+ "endfield"
403
+ ]
404
+ },
405
+ "resource_type": {
406
+ "type": "string"
407
+ },
408
+ "content_type": {
409
+ "type": "string"
410
+ },
411
+ "collection_name": {
412
+ "type": "string"
413
+ },
414
+ "collection_type": {
415
+ "type": "string"
416
+ },
417
+ "document_id": {
418
+ "$ref": "#/$defs/identifier"
419
+ },
420
+ "document_type": {
421
+ "type": "string",
422
+ "enum": [
423
+ "story",
424
+ "character",
425
+ "knowledge",
426
+ "entity",
427
+ "reference"
428
+ ]
429
+ },
430
+ "document_category": {
431
+ "type": "string"
432
+ },
433
+ "document_kind": {
434
+ "type": "string",
435
+ "enum": [
436
+ "story",
437
+ "synopsis",
438
+ "tutorial",
439
+ "character_material",
440
+ "official_archive",
441
+ "profiles",
442
+ "voices",
443
+ "wiki",
444
+ "terra_journey",
445
+ "entity_profile",
446
+ "reference"
447
+ ]
448
+ },
449
+ "display_title": {
450
+ "type": "string"
451
+ },
452
+ "collection_id": {
453
+ "type": "string"
454
+ },
455
+ "activity_id": {
456
+ "type": "string"
457
+ },
458
+ "activity_name": {
459
+ "type": "string"
460
+ },
461
+ "source_story_id": {
462
+ "type": "string"
463
+ },
464
+ "story_id": {
465
+ "type": "string"
466
+ },
467
+ "story_code": {
468
+ "type": "string"
469
+ },
470
+ "story_name": {
471
+ "type": "string"
472
+ },
473
+ "part_type": {
474
+ "type": "string",
475
+ "enum": [
476
+ "before",
477
+ "interlude",
478
+ "after",
479
+ "body",
480
+ "synopsis",
481
+ "profiles",
482
+ "voices"
483
+ ]
484
+ },
485
+ "part_label": {
486
+ "type": "string"
487
+ },
488
+ "char_id": {
489
+ "type": "string"
490
+ },
491
+ "character_name": {
492
+ "type": "string"
493
+ },
494
+ "path": {
495
+ "type": "string"
496
+ },
497
+ "text_sha256": {
498
+ "$ref": "#/$defs/sha256"
499
+ },
500
+ "line_count": {
501
+ "type": "integer",
502
+ "minimum": 1
503
+ },
504
+ "sequence_index": {
505
+ "type": "integer",
506
+ "minimum": 1
507
+ },
508
+ "sequence_source": {
509
+ "type": "string"
510
+ },
511
+ "sequence_confidence": {
512
+ "type": "string",
513
+ "enum": [
514
+ "official",
515
+ "derived",
516
+ "source_order",
517
+ "catalog_order"
518
+ ]
519
+ },
520
+ "previous_document_id": {
521
+ "type": "string"
522
+ },
523
+ "next_document_id": {
524
+ "type": "string"
525
+ },
526
+ "source_ref_prefix": {
527
+ "type": "string"
528
+ },
529
+ "entity_id": {
530
+ "type": "string"
531
+ }
532
+ }
533
+ },
534
+ "lineEntry": {
535
+ "type": "object",
536
+ "additionalProperties": false,
537
+ "required": [
538
+ "line_number",
539
+ "line_type",
540
+ "speaker_raw",
541
+ "text",
542
+ "source_ref"
543
+ ],
544
+ "properties": {
545
+ "line_number": {
546
+ "type": "integer",
547
+ "minimum": 1
548
+ },
549
+ "source_line_id": {
550
+ "type": "string"
551
+ },
552
+ "line_type": {
553
+ "type": "string",
554
+ "enum": [
555
+ "dialogue",
556
+ "narration",
557
+ "heading",
558
+ "knowledge",
559
+ "archive",
560
+ "voice"
561
+ ]
562
+ },
563
+ "speaker_raw": {
564
+ "type": "string"
565
+ },
566
+ "speaker_id": {
567
+ "type": "string"
568
+ },
569
+ "text": {
570
+ "type": "string"
571
+ },
572
+ "source_ref": {
573
+ "$ref": "#/$defs/sourceRef"
574
+ },
575
+ "audio": {
576
+ "type": "string"
577
+ },
578
+ "hint": {
579
+ "type": "string"
580
+ },
581
+ "document_title": {
582
+ "description": "activity/collection 模式中该行所属的自然篇章标题。",
583
+ "type": "string"
584
+ },
585
+ "document_id": {
586
+ "description": "activity/collection 执行层用于逐篇覆盖与展示卡的内部稳定 ID。",
587
+ "$ref": "#/$defs/identifier"
588
+ },
589
+ "document_uid": {
590
+ "description": "activity/collection 模式中该行所属篇章的公开同名消歧定位。",
591
+ "$ref": "#/$defs/documentUid"
592
+ },
593
+ "stream_position": {
594
+ "description": "activity/collection 合集中的一基连续位置。",
595
+ "type": "integer",
596
+ "minimum": 1
597
+ }
598
+ }
599
+ },
600
+ "warning": {
601
+ "type": "object",
602
+ "additionalProperties": false,
603
+ "required": [
604
+ "code",
605
+ "message"
606
+ ],
607
+ "properties": {
608
+ "code": {
609
+ "type": "string"
610
+ },
611
+ "message": {
612
+ "type": "string"
613
+ }
614
+ }
615
+ },
616
+ "pageInfo": {
617
+ "type": "object",
618
+ "additionalProperties": false,
619
+ "required": [
620
+ "limit",
621
+ "returned",
622
+ "has_more",
623
+ "next_cursor",
624
+ "total",
625
+ "total_relation"
626
+ ],
627
+ "properties": {
628
+ "limit": {
629
+ "type": "integer",
630
+ "minimum": 1
631
+ },
632
+ "returned": {
633
+ "type": "integer",
634
+ "minimum": 0
635
+ },
636
+ "has_more": {
637
+ "type": "boolean"
638
+ },
639
+ "next_cursor": {
640
+ "anyOf": [
641
+ {
642
+ "$ref": "#/$defs/cursor"
643
+ },
644
+ {
645
+ "type": "null"
646
+ }
647
+ ]
648
+ },
649
+ "total": {
650
+ "type": [
651
+ "integer",
652
+ "null"
653
+ ],
654
+ "minimum": 0
655
+ },
656
+ "total_relation": {
657
+ "type": "string",
658
+ "enum": [
659
+ "eq",
660
+ "gte",
661
+ "unknown"
662
+ ]
663
+ }
664
+ }
665
+ },
666
+ "searchPageInfo": {
667
+ "description": "corpus_search 的扫描进度;新查询使用 next_after,旧排序分页链仅使用 next_cursor。has_more 为 false 时没有下一页。",
668
+ "type": "object",
669
+ "additionalProperties": false,
670
+ "required": [
671
+ "returned_documents",
672
+ "total_relation",
673
+ "has_more",
674
+ "exhausted",
675
+ "next_after"
676
+ ],
677
+ "properties": {
678
+ "returned_documents": {
679
+ "type": "integer",
680
+ "minimum": 0
681
+ },
682
+ "total_documents": {
683
+ "type": "integer",
684
+ "minimum": 0
685
+ },
686
+ "total_relation": {
687
+ "type": "string",
688
+ "enum": [
689
+ "eq",
690
+ "unknown"
691
+ ]
692
+ },
693
+ "has_more": {
694
+ "type": "boolean"
695
+ },
696
+ "exhausted": {
697
+ "type": "boolean"
698
+ },
699
+ "next_after": {
700
+ "oneOf": [
701
+ {
702
+ "$ref": "#/$defs/searchPageAnchor"
703
+ },
704
+ {
705
+ "type": "null"
706
+ }
707
+ ]
708
+ },
709
+ "next_cursor": {
710
+ "type": "string",
711
+ "description": "仅旧会话排序分页链返回;单独作为 cursor 续查。"
712
+ }
713
+ }
714
+ },
715
+ "corpusSearchOkResponse": {
716
+ "type": "object",
717
+ "additionalProperties": false,
718
+ "required": [
719
+ "result_kind",
720
+ "documents",
721
+ "page",
722
+ "truncated",
723
+ "truncation_reasons"
724
+ ],
725
+ "properties": {
726
+ "result_kind": {
727
+ "type": "string",
728
+ "enum": [
729
+ "text_matches",
730
+ "structured_matches",
731
+ "complete_sections",
732
+ "documents"
733
+ ]
734
+ },
735
+ "documents": {
736
+ "type": "array",
737
+ "items": {
738
+ "type": "object"
739
+ }
740
+ },
741
+ "page": {
742
+ "$ref": "#/$defs/searchPageInfo"
743
+ },
744
+ "truncated": {
745
+ "type": "boolean"
746
+ },
747
+ "truncation_reasons": {
748
+ "type": "array",
749
+ "items": {
750
+ "type": "string"
751
+ }
752
+ },
753
+ "warnings": {
754
+ "type": "array",
755
+ "items": {
756
+ "type": "object"
757
+ }
758
+ },
759
+ "retraveler_relations": {
760
+ "type": "array",
761
+ "items": {
762
+ "type": "object"
763
+ }
764
+ }
765
+ }
766
+ },
767
+ "executionStats": {
768
+ "type": "object",
769
+ "additionalProperties": false,
770
+ "required": [
771
+ "elapsed_ms",
772
+ "scanned_documents",
773
+ "scanned_lines",
774
+ "returned_chars",
775
+ "estimated_input_tokens",
776
+ "truncated"
777
+ ],
778
+ "properties": {
779
+ "elapsed_ms": {
780
+ "type": "integer",
781
+ "minimum": 0
782
+ },
783
+ "scanned_documents": {
784
+ "type": "integer",
785
+ "minimum": 0
786
+ },
787
+ "scanned_lines": {
788
+ "type": "integer",
789
+ "minimum": 0
790
+ },
791
+ "returned_chars": {
792
+ "type": "integer",
793
+ "minimum": 0
794
+ },
795
+ "estimated_input_tokens": {
796
+ "type": "integer",
797
+ "minimum": 0
798
+ },
799
+ "truncated": {
800
+ "type": "boolean"
801
+ },
802
+ "truncation_reason": {
803
+ "type": "string"
804
+ }
805
+ }
806
+ },
807
+ "readLocator": {
808
+ "description": "读取定位器:单篇文档、明日方舟活动或终末地剧情集合必须三选一。",
809
+ "oneOf": [
810
+ {
811
+ "type": "object",
812
+ "additionalProperties": false,
813
+ "required": [
814
+ "source_ref"
815
+ ],
816
+ "properties": {
817
+ "source_ref": {
818
+ "description": "完整稳定行引用;around 模式的中心行直接取自这里。",
819
+ "$ref": "#/$defs/sourceRef"
820
+ }
821
+ }
822
+ },
823
+ {
824
+ "type": "object",
825
+ "additionalProperties": false,
826
+ "required": [
827
+ "document_id"
828
+ ],
829
+ "properties": {
830
+ "document_id": {
831
+ "description": "稳定文档 ID;around 模式配合它使用时必须提供 center_line。",
832
+ "$ref": "#/$defs/identifier"
833
+ }
834
+ }
835
+ },
836
+ {
837
+ "type": "object",
838
+ "additionalProperties": false,
839
+ "required": [
840
+ "document_uid"
841
+ ],
842
+ "properties": {
843
+ "document_uid": {
844
+ "description": "搜索结果返回的稳定短定位;可读取单篇,也可配合 activity/collection 选择所属合集。",
845
+ "$ref": "#/$defs/documentUid"
846
+ }
847
+ }
848
+ },
849
+ {
850
+ "type": "object",
851
+ "additionalProperties": false,
852
+ "required": [
853
+ "display_title"
854
+ ],
855
+ "properties": {
856
+ "display_title": {
857
+ "description": "资料中的完整展示标题;资料层将直接解析,无需预先搜索。",
858
+ "type": "string",
859
+ "minLength": 1
860
+ }
861
+ }
862
+ },
863
+ {
864
+ "description": "按活动通读:定位到某个活动(活动 ID 或展示名),读取该活动全部剧情原文。",
865
+ "type": "object",
866
+ "additionalProperties": false,
867
+ "anyOf": [
868
+ {
869
+ "required": [
870
+ "activity_id"
871
+ ]
872
+ },
873
+ {
874
+ "required": [
875
+ "activity_name"
876
+ ]
877
+ }
878
+ ],
879
+ "properties": {
880
+ "activity_id": {
881
+ "description": "活动内部 ID(如 event:main_6,即 story 文档的 collection_id)。",
882
+ "$ref": "#/$defs/identifier"
883
+ },
884
+ "activity_name": {
885
+ "description": "活动展示名,如“局部坏死”“孤星”;活动 ID 与展示名至少给一个。",
886
+ "type": "string",
887
+ "minLength": 1
888
+ }
889
+ }
890
+ },
891
+ {
892
+ "description": "按终末地任务或剧情集合展示名连续读取全部官方剧情碎片。",
893
+ "type": "object",
894
+ "additionalProperties": false,
895
+ "required": [
896
+ "collection_name"
897
+ ],
898
+ "properties": {
899
+ "collection_name": {
900
+ "type": "string",
901
+ "minLength": 1
902
+ }
903
+ }
904
+ }
905
+ ]
906
+ },
907
+ "readSelection": {
908
+ "description": "读取范围:around 看锚点上下文,range 读已知行区间,section 精确读 Wiki 字段,document 分页读整篇。",
909
+ "oneOf": [
910
+ {
911
+ "type": "object",
912
+ "additionalProperties": false,
913
+ "required": [
914
+ "mode",
915
+ "section"
916
+ ],
917
+ "properties": {
918
+ "mode": {
919
+ "const": "section",
920
+ "description": "精确读取一篇 Wiki 中指定标签字段,不包含标签行。"
921
+ },
922
+ "section": {
923
+ "type": "string",
924
+ "enum": [
925
+ "简要介绍",
926
+ "相关角色",
927
+ "详细介绍",
928
+ "剧情高光",
929
+ "战斗表现",
930
+ "相关活动",
931
+ "trivia",
932
+ "角色点评",
933
+ "剧情总结",
934
+ "关键人物",
935
+ "角色剧情概括",
936
+ "所有相关的活动剧情总结",
937
+ "相关剧情总结",
938
+ "相关剧情高光",
939
+ "相关trivia",
940
+ "相关角色总结"
941
+ ]
942
+ }
943
+ }
944
+ },
945
+ {
946
+ "type": "object",
947
+ "additionalProperties": false,
948
+ "required": [
949
+ "mode"
950
+ ],
951
+ "properties": {
952
+ "mode": {
953
+ "const": "around",
954
+ "description": "读取中心行前后的上下文。"
955
+ },
956
+ "center_line": {
957
+ "type": "integer",
958
+ "minimum": 1,
959
+ "description": "仅 locator 使用 document_id 时必填;locator 使用 source_ref 时省略。"
960
+ },
961
+ "before_lines": {
962
+ "type": "integer",
963
+ "minimum": 0,
964
+ "maximum": 100,
965
+ "default": 3
966
+ },
967
+ "after_lines": {
968
+ "type": "integer",
969
+ "minimum": 0,
970
+ "maximum": 100,
971
+ "default": 3
972
+ }
973
+ }
974
+ },
975
+ {
976
+ "type": "object",
977
+ "additionalProperties": false,
978
+ "required": [
979
+ "mode",
980
+ "start_line",
981
+ "end_line"
982
+ ],
983
+ "properties": {
984
+ "mode": {
985
+ "const": "range",
986
+ "description": "读取包含起止行的闭区间。"
987
+ },
988
+ "start_line": {
989
+ "type": "integer",
990
+ "minimum": 1
991
+ },
992
+ "end_line": {
993
+ "type": "integer",
994
+ "minimum": 1
995
+ }
996
+ }
997
+ },
998
+ {
999
+ "type": "object",
1000
+ "additionalProperties": false,
1001
+ "required": [
1002
+ "mode"
1003
+ ],
1004
+ "properties": {
1005
+ "mode": {
1006
+ "const": "document",
1007
+ "description": "分页读取整篇文档。"
1008
+ },
1009
+ "cursor": {
1010
+ "description": "下一页使用上一页响应的 next_cursor;首次省略。",
1011
+ "anyOf": [
1012
+ {
1013
+ "$ref": "#/$defs/cursor"
1014
+ },
1015
+ {
1016
+ "type": "null"
1017
+ }
1018
+ ],
1019
+ "default": null
1020
+ },
1021
+ "start_line": {
1022
+ "description": "公开自然续页定位器换算出的篇内起始行;与 cursor 不同时使用。",
1023
+ "type": "integer",
1024
+ "minimum": 1
1025
+ }
1026
+ }
1027
+ },
1028
+ {
1029
+ "type": "object",
1030
+ "additionalProperties": false,
1031
+ "required": [
1032
+ "mode"
1033
+ ],
1034
+ "properties": {
1035
+ "mode": {
1036
+ "const": "activity",
1037
+ "description": "按活动通读:配合 activity locator,按篇章顺序读取该活动全部剧情原文,跨多篇文档分页。"
1038
+ },
1039
+ "cursor": {
1040
+ "description": "下一页使用上一页响应的 next_cursor;首次省略。",
1041
+ "anyOf": [
1042
+ {
1043
+ "$ref": "#/$defs/cursor"
1044
+ },
1045
+ {
1046
+ "type": "null"
1047
+ }
1048
+ ],
1049
+ "default": null
1050
+ },
1051
+ "start_position": {
1052
+ "description": "公开自然续页定位器换算出的活动连续位置;与 cursor 不同时使用。",
1053
+ "type": "integer",
1054
+ "minimum": 1
1055
+ }
1056
+ }
1057
+ },
1058
+ {
1059
+ "type": "object",
1060
+ "additionalProperties": false,
1061
+ "required": [
1062
+ "mode"
1063
+ ],
1064
+ "properties": {
1065
+ "mode": {
1066
+ "const": "collection",
1067
+ "description": "按终末地任务/剧情集合的资料顺序跨文档连续读取。"
1068
+ },
1069
+ "cursor": {
1070
+ "description": "旧客户端下一页游标;Agent 使用 start_position。",
1071
+ "anyOf": [
1072
+ {
1073
+ "$ref": "#/$defs/cursor"
1074
+ },
1075
+ {
1076
+ "type": "null"
1077
+ }
1078
+ ],
1079
+ "default": null
1080
+ },
1081
+ "start_position": {
1082
+ "type": "integer",
1083
+ "minimum": 1
1084
+ },
1085
+ "content_types": {
1086
+ "type": "array",
1087
+ "uniqueItems": true,
1088
+ "items": {
1089
+ "type": "string",
1090
+ "enum": [
1091
+ "dialogue",
1092
+ "cutscene",
1093
+ "radio",
1094
+ "remote_comm",
1095
+ "black_screen",
1096
+ "environment_talk",
1097
+ "sns_topic",
1098
+ "sns_chat",
1099
+ "narration"
1100
+ ]
1101
+ }
1102
+ }
1103
+ }
1104
+ }
1105
+ ]
1106
+ },
1107
+ "readLimits": {
1108
+ "description": "单次本地读取的行数和字符硬上限;大范围请求可能触发用户审批。",
1109
+ "type": "object",
1110
+ "additionalProperties": false,
1111
+ "properties": {
1112
+ "max_lines": {
1113
+ "type": "integer",
1114
+ "minimum": 1,
1115
+ "maximum": 500,
1116
+ "default": 100
1117
+ },
1118
+ "max_chars": {
1119
+ "type": "integer",
1120
+ "minimum": 100,
1121
+ "maximum": 100000,
1122
+ "default": 12000
1123
+ }
1124
+ }
1125
+ },
1126
+ "corpusReadRequest": {
1127
+ "description": "读取本地资料正文并获得可引用的逐行 source_ref。搜索预览或云端候选不能替代本工具的原文核验。",
1128
+ "type": "object",
1129
+ "additionalProperties": false,
1130
+ "required": [
1131
+ "intent_id",
1132
+ "locator",
1133
+ "selection"
1134
+ ],
1135
+ "properties": {
1136
+ "intent_id": {
1137
+ "description": "当前用户检索意图的稳定 ID,由运行时注入。",
1138
+ "$ref": "#/$defs/intentId"
1139
+ },
1140
+ "request_id": {
1141
+ "$ref": "#/$defs/requestId"
1142
+ },
1143
+ "expected_data_version": {
1144
+ "$ref": "#/$defs/sha256"
1145
+ },
1146
+ "locator": {
1147
+ "description": "定位单篇文档、明日方舟活动或终末地剧情集合。",
1148
+ "$ref": "#/$defs/readLocator"
1149
+ },
1150
+ "selection": {
1151
+ "description": "选择 around、range、section、document、activity 或 collection 读取方式。",
1152
+ "$ref": "#/$defs/readSelection"
1153
+ },
1154
+ "format": {
1155
+ "description": "lines 保留每行 source_ref 并可引用;plain_text 仅适合连续阅读。",
1156
+ "type": "string",
1157
+ "enum": [
1158
+ "lines",
1159
+ "plain_text"
1160
+ ],
1161
+ "default": "lines"
1162
+ },
1163
+ "include_adjacent_documents": {
1164
+ "type": "boolean",
1165
+ "default": true
1166
+ },
1167
+ "limits": {
1168
+ "$ref": "#/$defs/readLimits"
1169
+ }
1170
+ },
1171
+ "allOf": [
1172
+ {
1173
+ "if": {
1174
+ "properties": {
1175
+ "locator": {
1176
+ "anyOf": [
1177
+ { "required": ["document_id"] },
1178
+ { "required": ["document_uid"] }
1179
+ ]
1180
+ },
1181
+ "selection": {
1182
+ "properties": {
1183
+ "mode": {
1184
+ "const": "around"
1185
+ }
1186
+ },
1187
+ "required": [
1188
+ "mode"
1189
+ ]
1190
+ }
1191
+ },
1192
+ "required": [
1193
+ "locator",
1194
+ "selection"
1195
+ ]
1196
+ },
1197
+ "then": {
1198
+ "properties": {
1199
+ "selection": {
1200
+ "required": [
1201
+ "center_line"
1202
+ ]
1203
+ }
1204
+ }
1205
+ }
1206
+ },
1207
+ {
1208
+ "if": {
1209
+ "properties": {
1210
+ "locator": {
1211
+ "required": [
1212
+ "source_ref"
1213
+ ]
1214
+ },
1215
+ "selection": {
1216
+ "properties": {
1217
+ "mode": {
1218
+ "const": "around"
1219
+ }
1220
+ },
1221
+ "required": [
1222
+ "mode"
1223
+ ]
1224
+ }
1225
+ },
1226
+ "required": [
1227
+ "locator",
1228
+ "selection"
1229
+ ]
1230
+ },
1231
+ "then": {
1232
+ "properties": {
1233
+ "selection": {
1234
+ "not": {
1235
+ "required": [
1236
+ "center_line"
1237
+ ]
1238
+ }
1239
+ }
1240
+ }
1241
+ }
1242
+ }
1243
+ ]
1244
+ },
1245
+ "actualSelection": {
1246
+ "type": "object",
1247
+ "additionalProperties": false,
1248
+ "required": [
1249
+ "mode",
1250
+ "line_start",
1251
+ "line_end",
1252
+ "line_count",
1253
+ "character_count",
1254
+ "truncated"
1255
+ ],
1256
+ "properties": {
1257
+ "mode": {
1258
+ "type": "string",
1259
+ "enum": [
1260
+ "around",
1261
+ "range",
1262
+ "section",
1263
+ "document",
1264
+ "activity",
1265
+ "collection"
1266
+ ]
1267
+ },
1268
+ "line_start": {
1269
+ "type": "integer",
1270
+ "minimum": 1
1271
+ },
1272
+ "line_end": {
1273
+ "type": "integer",
1274
+ "minimum": 1
1275
+ },
1276
+ "line_count": {
1277
+ "type": "integer",
1278
+ "minimum": 0
1279
+ },
1280
+ "character_count": {
1281
+ "type": "integer",
1282
+ "minimum": 0
1283
+ },
1284
+ "truncated": {
1285
+ "type": "boolean"
1286
+ },
1287
+ "truncation_reason": {
1288
+ "type": "string"
1289
+ },
1290
+ "wiki_section": {
1291
+ "description": "section 模式实际读取的 Wiki 字段名。",
1292
+ "type": "string"
1293
+ }
1294
+ }
1295
+ },
1296
+ "linesContent": {
1297
+ "type": "object",
1298
+ "additionalProperties": false,
1299
+ "required": [
1300
+ "format",
1301
+ "lines"
1302
+ ],
1303
+ "properties": {
1304
+ "format": {
1305
+ "const": "lines"
1306
+ },
1307
+ "lines": {
1308
+ "type": "array",
1309
+ "maxItems": 500,
1310
+ "items": {
1311
+ "$ref": "#/$defs/lineEntry"
1312
+ }
1313
+ }
1314
+ }
1315
+ },
1316
+ "plainTextContent": {
1317
+ "type": "object",
1318
+ "additionalProperties": false,
1319
+ "required": [
1320
+ "format",
1321
+ "text"
1322
+ ],
1323
+ "properties": {
1324
+ "format": {
1325
+ "const": "plain_text"
1326
+ },
1327
+ "text": {
1328
+ "type": "string",
1329
+ "maxLength": 100000
1330
+ }
1331
+ }
1332
+ },
1333
+ "corpusReadOkResponse": {
1334
+ "type": "object",
1335
+ "additionalProperties": false,
1336
+ "required": [
1337
+ "contract_version",
1338
+ "status",
1339
+ "request_id",
1340
+ "data_version",
1341
+ "package_schema_version",
1342
+ "index_schema_version",
1343
+ "normalized_request",
1344
+ "document",
1345
+ "selection",
1346
+ "content",
1347
+ "page",
1348
+ "integrity",
1349
+ "stats",
1350
+ "warnings"
1351
+ ],
1352
+ "properties": {
1353
+ "contract_version": {
1354
+ "const": "prts-corpus-tools-v1"
1355
+ },
1356
+ "status": {
1357
+ "const": "ok"
1358
+ },
1359
+ "request_id": {
1360
+ "$ref": "#/$defs/requestId"
1361
+ },
1362
+ "data_version": {
1363
+ "$ref": "#/$defs/sha256"
1364
+ },
1365
+ "package_schema_version": {
1366
+ "type": "integer",
1367
+ "minimum": 1
1368
+ },
1369
+ "index_schema_version": {
1370
+ "type": "integer",
1371
+ "minimum": 1
1372
+ },
1373
+ "normalized_request": {
1374
+ "$ref": "#/$defs/corpusReadRequest"
1375
+ },
1376
+ "document": {
1377
+ "$ref": "#/$defs/documentSummary"
1378
+ },
1379
+ "selection": {
1380
+ "$ref": "#/$defs/actualSelection"
1381
+ },
1382
+ "content": {
1383
+ "oneOf": [
1384
+ {
1385
+ "$ref": "#/$defs/linesContent"
1386
+ },
1387
+ {
1388
+ "$ref": "#/$defs/plainTextContent"
1389
+ }
1390
+ ]
1391
+ },
1392
+ "page": {
1393
+ "$ref": "#/$defs/pageInfo"
1394
+ },
1395
+ "activity": {
1396
+ "description": "仅 activity 模式返回:当前读取活动的汇总。",
1397
+ "type": "object",
1398
+ "additionalProperties": false,
1399
+ "required": [
1400
+ "activity_id",
1401
+ "activity_name",
1402
+ "story_count",
1403
+ "total_lines"
1404
+ ],
1405
+ "properties": {
1406
+ "activity_id": {
1407
+ "type": "string"
1408
+ },
1409
+ "activity_name": {
1410
+ "type": "string"
1411
+ },
1412
+ "story_count": {
1413
+ "type": "integer",
1414
+ "minimum": 1
1415
+ },
1416
+ "total_lines": {
1417
+ "type": "integer",
1418
+ "minimum": 1
1419
+ }
1420
+ }
1421
+ },
1422
+ "stream": {
1423
+ "description": "仅 activity/collection 模式返回的自然连续位置信息。",
1424
+ "type": "object",
1425
+ "additionalProperties": false,
1426
+ "required": [
1427
+ "mode",
1428
+ "game",
1429
+ "name",
1430
+ "document_count",
1431
+ "total_lines",
1432
+ "position_start",
1433
+ "position_end",
1434
+ "next_position",
1435
+ "order_kind",
1436
+ "order_confidence",
1437
+ "order_note",
1438
+ "anchor_document_uid",
1439
+ "sources"
1440
+ ],
1441
+ "properties": {
1442
+ "mode": {
1443
+ "type": "string",
1444
+ "enum": [
1445
+ "activity",
1446
+ "collection"
1447
+ ]
1448
+ },
1449
+ "game": {
1450
+ "type": "string",
1451
+ "enum": [
1452
+ "arknights",
1453
+ "endfield"
1454
+ ]
1455
+ },
1456
+ "name": {
1457
+ "type": "string"
1458
+ },
1459
+ "document_count": {
1460
+ "type": "integer",
1461
+ "minimum": 1
1462
+ },
1463
+ "total_lines": {
1464
+ "type": "integer",
1465
+ "minimum": 1
1466
+ },
1467
+ "position_start": {
1468
+ "type": "integer",
1469
+ "minimum": 1
1470
+ },
1471
+ "position_end": {
1472
+ "type": "integer",
1473
+ "minimum": 1
1474
+ },
1475
+ "next_position": {
1476
+ "oneOf": [
1477
+ {
1478
+ "type": "integer",
1479
+ "minimum": 1
1480
+ },
1481
+ {
1482
+ "type": "null"
1483
+ }
1484
+ ]
1485
+ },
1486
+ "order_kind": {
1487
+ "type": "string",
1488
+ "enum": ["source_sequence", "derived_content_grouping"]
1489
+ },
1490
+ "order_confidence": {
1491
+ "type": "string",
1492
+ "enum": ["source_backed", "derived"]
1493
+ },
1494
+ "order_note": {
1495
+ "type": "string"
1496
+ },
1497
+ "anchor_document_uid": {
1498
+ "$ref": "#/$defs/documentUid"
1499
+ },
1500
+ "sources": {
1501
+ "type": "array",
1502
+ "items": {
1503
+ "type": "object",
1504
+ "additionalProperties": false,
1505
+ "required": ["document_id", "document_uid", "title", "line_start", "line_end"],
1506
+ "properties": {
1507
+ "document_id": { "$ref": "#/$defs/identifier" },
1508
+ "document_uid": { "$ref": "#/$defs/documentUid" },
1509
+ "title": { "type": "string" },
1510
+ "line_start": { "type": "integer", "minimum": 1 },
1511
+ "line_end": { "type": "integer", "minimum": 1 }
1512
+ }
1513
+ }
1514
+ },
1515
+ "content_types": {
1516
+ "type": "array",
1517
+ "items": {
1518
+ "type": "string"
1519
+ }
1520
+ }
1521
+ }
1522
+ },
1523
+ "adjacent_documents": {
1524
+ "type": "object",
1525
+ "additionalProperties": false,
1526
+ "properties": {
1527
+ "previous": {
1528
+ "oneOf": [
1529
+ {
1530
+ "$ref": "#/$defs/documentSummary"
1531
+ },
1532
+ {
1533
+ "type": "null"
1534
+ }
1535
+ ]
1536
+ },
1537
+ "next": {
1538
+ "oneOf": [
1539
+ {
1540
+ "$ref": "#/$defs/documentSummary"
1541
+ },
1542
+ {
1543
+ "type": "null"
1544
+ }
1545
+ ]
1546
+ }
1547
+ }
1548
+ },
1549
+ "integrity": {
1550
+ "type": "object",
1551
+ "additionalProperties": false,
1552
+ "required": [
1553
+ "verified",
1554
+ "expected_text_sha256",
1555
+ "actual_text_sha256"
1556
+ ],
1557
+ "properties": {
1558
+ "verified": {
1559
+ "type": "boolean"
1560
+ },
1561
+ "expected_text_sha256": {
1562
+ "$ref": "#/$defs/sha256"
1563
+ },
1564
+ "actual_text_sha256": {
1565
+ "$ref": "#/$defs/sha256"
1566
+ }
1567
+ }
1568
+ },
1569
+ "stats": {
1570
+ "$ref": "#/$defs/executionStats"
1571
+ },
1572
+ "warnings": {
1573
+ "type": "array",
1574
+ "items": {
1575
+ "$ref": "#/$defs/warning"
1576
+ }
1577
+ }
1578
+ }
1579
+ },
1580
+ "approvalRequiredResponse": {
1581
+ "type": "object",
1582
+ "additionalProperties": false,
1583
+ "required": [
1584
+ "contract_version",
1585
+ "status",
1586
+ "request_id",
1587
+ "data_version",
1588
+ "normalized_request",
1589
+ "approval"
1590
+ ],
1591
+ "properties": {
1592
+ "contract_version": {
1593
+ "const": "prts-corpus-tools-v1"
1594
+ },
1595
+ "status": {
1596
+ "const": "approval_required"
1597
+ },
1598
+ "request_id": {
1599
+ "$ref": "#/$defs/requestId"
1600
+ },
1601
+ "data_version": {
1602
+ "$ref": "#/$defs/sha256"
1603
+ },
1604
+ "normalized_request": {
1605
+ "$ref": "#/$defs/corpusReadRequest"
1606
+ },
1607
+ "approval": {
1608
+ "type": "object",
1609
+ "additionalProperties": false,
1610
+ "required": [
1611
+ "approval_request_id",
1612
+ "request_sha256",
1613
+ "reason",
1614
+ "requested_documents",
1615
+ "requested_lines",
1616
+ "requested_characters",
1617
+ "intent_cumulative_characters",
1618
+ "estimated_input_tokens",
1619
+ "estimated_cost",
1620
+ "allowed_actions"
1621
+ ],
1622
+ "properties": {
1623
+ "approval_request_id": {
1624
+ "$ref": "#/$defs/requestId"
1625
+ },
1626
+ "request_sha256": {
1627
+ "$ref": "#/$defs/sha256"
1628
+ },
1629
+ "reason": {
1630
+ "type": "string",
1631
+ "enum": [
1632
+ "raw_text_count",
1633
+ "raw_text_characters",
1634
+ "estimated_input_tokens",
1635
+ "estimated_cost"
1636
+ ]
1637
+ },
1638
+ "requested_documents": {
1639
+ "type": "integer",
1640
+ "minimum": 1
1641
+ },
1642
+ "requested_lines": {
1643
+ "type": "integer",
1644
+ "minimum": 1
1645
+ },
1646
+ "requested_characters": {
1647
+ "type": "integer",
1648
+ "minimum": 1
1649
+ },
1650
+ "intent_cumulative_characters": {
1651
+ "type": "integer",
1652
+ "minimum": 0
1653
+ },
1654
+ "intent_cumulative_records": {
1655
+ "type": "integer",
1656
+ "minimum": 0
1657
+ },
1658
+ "intent_cumulative_lines": {
1659
+ "type": "integer",
1660
+ "minimum": 0
1661
+ },
1662
+ "intent_cumulative_tokens": {
1663
+ "type": "integer",
1664
+ "minimum": 0
1665
+ },
1666
+ "estimated_input_tokens": {
1667
+ "type": "integer",
1668
+ "minimum": 0
1669
+ },
1670
+ "estimated_cost": {
1671
+ "type": [
1672
+ "number",
1673
+ "null"
1674
+ ],
1675
+ "minimum": 0
1676
+ },
1677
+ "currency": {
1678
+ "type": "string"
1679
+ },
1680
+ "allowed_actions": {
1681
+ "type": "array",
1682
+ "minItems": 3,
1683
+ "uniqueItems": true,
1684
+ "items": {
1685
+ "type": "string",
1686
+ "enum": [
1687
+ "approve_once",
1688
+ "increase_intent_budget",
1689
+ "reject"
1690
+ ]
1691
+ }
1692
+ }
1693
+ }
1694
+ }
1695
+ }
1696
+ },
1697
+ "toolError": {
1698
+ "type": "object",
1699
+ "additionalProperties": false,
1700
+ "required": [
1701
+ "code",
1702
+ "message",
1703
+ "retryable"
1704
+ ],
1705
+ "properties": {
1706
+ "code": {
1707
+ "type": "string",
1708
+ "enum": [
1709
+ "INVALID_REQUEST",
1710
+ "PACKAGE_NOT_INSTALLED",
1711
+ "PACKAGE_VERSION_MISMATCH",
1712
+ "INDEX_UNAVAILABLE",
1713
+ "INDEX_CORRUPT",
1714
+ "DOCUMENT_NOT_FOUND",
1715
+ "SOURCE_REF_INVALID",
1716
+ "LINE_RANGE_INVALID",
1717
+ "CURSOR_INVALID",
1718
+ "CURSOR_VERSION_MISMATCH",
1719
+ "CURSOR_POLICY_MISMATCH",
1720
+ "PAGE_ANCHOR_INVALID",
1721
+ "PAGE_ANCHOR_MISMATCH",
1722
+ "PAGE_ANCHOR_NOT_FOUND",
1723
+ "PAGE_ANCHOR_VERSION_MISMATCH",
1724
+ "REGEX_REJECTED",
1725
+ "TIMEOUT",
1726
+ "BUDGET_EXCEEDED",
1727
+ "CANCELLED",
1728
+ "INTERNAL_ERROR"
1729
+ ]
1730
+ },
1731
+ "message": {
1732
+ "type": "string"
1733
+ },
1734
+ "retryable": {
1735
+ "type": "boolean"
1736
+ },
1737
+ "details": {
1738
+ "type": "object"
1739
+ }
1740
+ }
1741
+ },
1742
+ "errorResponse": {
1743
+ "type": "object",
1744
+ "additionalProperties": false,
1745
+ "required": [
1746
+ "contract_version",
1747
+ "status",
1748
+ "request_id",
1749
+ "data_version",
1750
+ "error"
1751
+ ],
1752
+ "properties": {
1753
+ "contract_version": {
1754
+ "const": "prts-corpus-tools-v1"
1755
+ },
1756
+ "status": {
1757
+ "const": "error"
1758
+ },
1759
+ "request_id": {
1760
+ "$ref": "#/$defs/requestId"
1761
+ },
1762
+ "data_version": {
1763
+ "oneOf": [
1764
+ {
1765
+ "$ref": "#/$defs/sha256"
1766
+ },
1767
+ {
1768
+ "type": "null"
1769
+ }
1770
+ ]
1771
+ },
1772
+ "error": {
1773
+ "$ref": "#/$defs/toolError"
1774
+ }
1775
+ }
1776
+ },
1777
+ "corpusSearchResponse": {
1778
+ "oneOf": [
1779
+ {
1780
+ "$ref": "#/$defs/corpusSearchOkResponse"
1781
+ },
1782
+ {
1783
+ "$ref": "#/$defs/errorResponse"
1784
+ }
1785
+ ]
1786
+ },
1787
+ "corpusReadResponse": {
1788
+ "oneOf": [
1789
+ {
1790
+ "$ref": "#/$defs/corpusReadOkResponse"
1791
+ },
1792
+ {
1793
+ "$ref": "#/$defs/approvalRequiredResponse"
1794
+ },
1795
+ {
1796
+ "$ref": "#/$defs/errorResponse"
1797
+ }
1798
+ ]
1799
+ }
1800
+ }
1801
+ }