modwright 0.1.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 (455) hide show
  1. package/LICENSE +35 -0
  2. package/README.md +212 -0
  3. package/assets/claude/agents/mw-explore.md +46 -0
  4. package/assets/claude/agents/mw-fixture.md +33 -0
  5. package/assets/claude/agents/mw-rule-author.md +51 -0
  6. package/assets/claude/agents/mw-scaffold-author.md +48 -0
  7. package/assets/claude/skills/mw-author.md +59 -0
  8. package/assets/claude/skills/mw-new-item.md +51 -0
  9. package/assets/claude/skills/mw-new-spell.md +50 -0
  10. package/assets/claude/skills/mw-scaffold.md +59 -0
  11. package/assets/claude/skills/mw-ship.md +57 -0
  12. package/assets/claude/skills/mw-validate.md +51 -0
  13. package/assets/claude/skills/mw-verify.md +59 -0
  14. package/assets/nivalisnights/extract_resources.py +177 -0
  15. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Config.json +5 -0
  16. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/BootstrapClient.lua +55 -0
  17. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/BootstrapServer.lua +81 -0
  18. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/ModWrightBridge/Log.lua +96 -0
  19. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/ModWrightBridge/Probes.lua +1038 -0
  20. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/ModWrightBridge/ProbesClient.lua +74 -0
  21. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/ModWrightBridge/Protocol.lua +985 -0
  22. package/bridges/bg3-se/Mods/ModWrightBridge/ScriptExtender/Lua/ModWrightBridge/Watch.lua +175 -0
  23. package/bridges/bg3-se/Mods/ModWrightBridge/meta.lsx +45 -0
  24. package/bridges/bg3-se/README.md +99 -0
  25. package/bridges/bg3-se/bridge.json +68 -0
  26. package/bridges/cp2077-cet/ModWrightBridge/init.lua +375 -0
  27. package/bridges/cp2077-cet/ModWrightBridge/probes.lua +1104 -0
  28. package/bridges/cp2077-cet/ModWrightBridge/protocol.lua +1306 -0
  29. package/bridges/cp2077-cet/README.md +165 -0
  30. package/bridges/cp2077-cet/bridge.json +53 -0
  31. package/dist/core/bridge/arm.js +175 -0
  32. package/dist/core/bridge/cet-console.js +26 -0
  33. package/dist/core/bridge/cet-log.js +362 -0
  34. package/dist/core/bridge/index.js +11 -0
  35. package/dist/core/bridge/locate.js +35 -0
  36. package/dist/core/bridge/paths.js +34 -0
  37. package/dist/core/bridge/pending.js +89 -0
  38. package/dist/core/bridge/poll.js +155 -0
  39. package/dist/core/bridge/stage.js +100 -0
  40. package/dist/core/bridge/status.js +97 -0
  41. package/dist/core/bridge/types.js +145 -0
  42. package/dist/core/bridge/validate.js +107 -0
  43. package/dist/core/build/index.js +6 -0
  44. package/dist/core/build/manifest.js +47 -0
  45. package/dist/core/build/paths.js +32 -0
  46. package/dist/core/build/run.js +342 -0
  47. package/dist/core/build/stage.js +265 -0
  48. package/dist/core/build/steps/bg3.js +129 -0
  49. package/dist/core/build/steps/core.js +195 -0
  50. package/dist/core/build/steps/cyberpunk.js +95 -0
  51. package/dist/core/build/steps/listing.js +35 -0
  52. package/dist/core/build/types.js +13 -0
  53. package/dist/core/build/zip.js +148 -0
  54. package/dist/core/compat/check.js +113 -0
  55. package/dist/core/compat/pe.js +220 -0
  56. package/dist/core/compat/types.js +1 -0
  57. package/dist/core/compat/version.js +70 -0
  58. package/dist/core/deploy/guards.js +292 -0
  59. package/dist/core/deploy/index.js +5 -0
  60. package/dist/core/deploy/plan.js +696 -0
  61. package/dist/core/deploy/reload-apply.js +361 -0
  62. package/dist/core/deploy/reload.js +358 -0
  63. package/dist/core/deploy/sources.js +169 -0
  64. package/dist/core/deploy/types.js +1 -0
  65. package/dist/core/epic.js +54 -0
  66. package/dist/core/fsutil.js +191 -0
  67. package/dist/core/home.js +70 -0
  68. package/dist/core/knowledge/facts.js +229 -0
  69. package/dist/core/knowledge/index.js +4 -0
  70. package/dist/core/knowledge/search.js +112 -0
  71. package/dist/core/knowledge/store.js +123 -0
  72. package/dist/core/knowledge/types.js +1 -0
  73. package/dist/core/ledger/check.js +42 -0
  74. package/dist/core/ledger/hooks.js +80 -0
  75. package/dist/core/ledger/index.js +7 -0
  76. package/dist/core/ledger/query.js +17 -0
  77. package/dist/core/ledger/record.js +84 -0
  78. package/dist/core/ledger/status.js +53 -0
  79. package/dist/core/ledger/store.js +98 -0
  80. package/dist/core/ledger/types.js +108 -0
  81. package/dist/core/logs/index.js +4 -0
  82. package/dist/core/logs/registry.js +50 -0
  83. package/dist/core/logs/scan.js +195 -0
  84. package/dist/core/logs/triage.js +160 -0
  85. package/dist/core/logs/types.js +1 -0
  86. package/dist/core/lsx.js +10 -0
  87. package/dist/core/lz4.js +66 -0
  88. package/dist/core/mods.js +229 -0
  89. package/dist/core/process.js +49 -0
  90. package/dist/core/project/build-steps.js +83 -0
  91. package/dist/core/project/describe.js +74 -0
  92. package/dist/core/project/index.js +5 -0
  93. package/dist/core/project/load.js +146 -0
  94. package/dist/core/project/schema.js +264 -0
  95. package/dist/core/project/types.js +3 -0
  96. package/dist/core/prompts.js +72 -0
  97. package/dist/core/registry.js +35 -0
  98. package/dist/core/safety/backup.js +206 -0
  99. package/dist/core/safety/execute.js +188 -0
  100. package/dist/core/safety/index.js +5 -0
  101. package/dist/core/safety/plan.js +122 -0
  102. package/dist/core/safety/restore.js +172 -0
  103. package/dist/core/safety/types.js +1 -0
  104. package/dist/core/scaffold/bootstrap.js +7 -0
  105. package/dist/core/scaffold/catalog.js +28 -0
  106. package/dist/core/scaffold/claude-assets.js +271 -0
  107. package/dist/core/scaffold/collisions.js +64 -0
  108. package/dist/core/scaffold/emit.js +356 -0
  109. package/dist/core/scaffold/engine.js +680 -0
  110. package/dist/core/scaffold/ids.js +78 -0
  111. package/dist/core/scaffold/index.js +10 -0
  112. package/dist/core/scaffold/jsonpath.js +121 -0
  113. package/dist/core/scaffold/load.js +81 -0
  114. package/dist/core/scaffold/render.js +85 -0
  115. package/dist/core/scaffold/sequence.js +396 -0
  116. package/dist/core/scaffold/types.js +309 -0
  117. package/dist/core/steam.js +63 -0
  118. package/dist/core/surfaceutil.js +36 -0
  119. package/dist/core/testplan/check.js +67 -0
  120. package/dist/core/testplan/index.js +5 -0
  121. package/dist/core/testplan/load.js +100 -0
  122. package/dist/core/testplan/registry.js +317 -0
  123. package/dist/core/testplan/run.js +389 -0
  124. package/dist/core/testplan/types.js +82 -0
  125. package/dist/core/text/converters/bg3.js +50 -0
  126. package/dist/core/text/converters/cyberpunk.js +36 -0
  127. package/dist/core/text/converters/index.js +261 -0
  128. package/dist/core/text/diff/cr2w.js +180 -0
  129. package/dist/core/text/diff/index.js +16 -0
  130. package/dist/core/text/diff/loca.js +43 -0
  131. package/dist/core/text/diff/lsx.js +126 -0
  132. package/dist/core/text/handles.js +86 -0
  133. package/dist/core/text/index.js +6 -0
  134. package/dist/core/text/json.js +46 -0
  135. package/dist/core/text/templates/cache.js +71 -0
  136. package/dist/core/text/templates/index.js +3 -0
  137. package/dist/core/text/templates/library.js +245 -0
  138. package/dist/core/text/templates/types.js +51 -0
  139. package/dist/core/text/toolchain.js +16 -0
  140. package/dist/core/text/types.js +1 -0
  141. package/dist/core/text/validate.js +149 -0
  142. package/dist/core/text/xml.js +58 -0
  143. package/dist/core/toolchain/datafetch.js +151 -0
  144. package/dist/core/toolchain/env.js +63 -0
  145. package/dist/core/toolchain/features.js +170 -0
  146. package/dist/core/toolchain/index.js +8 -0
  147. package/dist/core/toolchain/install.js +191 -0
  148. package/dist/core/toolchain/locate.js +275 -0
  149. package/dist/core/toolchain/remember.js +84 -0
  150. package/dist/core/toolchain/run.js +318 -0
  151. package/dist/core/toolchain/specs.js +351 -0
  152. package/dist/core/toolchain/types.js +1 -0
  153. package/dist/core/types.js +1 -0
  154. package/dist/core/userconfig.js +66 -0
  155. package/dist/core/validate/context.js +139 -0
  156. package/dist/core/validate/index.js +5 -0
  157. package/dist/core/validate/registry.js +58 -0
  158. package/dist/core/validate/run.js +131 -0
  159. package/dist/core/validate/suppressions.js +91 -0
  160. package/dist/core/validate/types.js +2 -0
  161. package/dist/core/yamledit.js +51 -0
  162. package/dist/index.js +389 -0
  163. package/dist/server.js +1914 -0
  164. package/dist/surfaces/baldursgate3/compat.js +164 -0
  165. package/dist/surfaces/baldursgate3/identity.js +110 -0
  166. package/dist/surfaces/baldursgate3/index/build.js +331 -0
  167. package/dist/surfaces/baldursgate3/index/index.js +17 -0
  168. package/dist/surfaces/baldursgate3/index/info.js +40 -0
  169. package/dist/surfaces/baldursgate3/index/parsers/loca.js +41 -0
  170. package/dist/surfaces/baldursgate3/index/parsers/lsx.js +137 -0
  171. package/dist/surfaces/baldursgate3/index/parsers/stats.js +45 -0
  172. package/dist/surfaces/baldursgate3/index/parsers/treasuretable.js +57 -0
  173. package/dist/surfaces/baldursgate3/index/parsers/xmlutil.js +142 -0
  174. package/dist/surfaces/baldursgate3/index/queries.js +327 -0
  175. package/dist/surfaces/baldursgate3/index/schema.js +62 -0
  176. package/dist/surfaces/baldursgate3/index.js +3 -0
  177. package/dist/surfaces/baldursgate3/logs.js +278 -0
  178. package/dist/surfaces/baldursgate3/modsettings.js +115 -0
  179. package/dist/surfaces/baldursgate3/pak.js +153 -0
  180. package/dist/surfaces/baldursgate3/settings.js +49 -0
  181. package/dist/surfaces/baldursgate3/surface.js +232 -0
  182. package/dist/surfaces/baldursgate3/validators/bridge.js +7 -0
  183. package/dist/surfaces/baldursgate3/validators/files.js +476 -0
  184. package/dist/surfaces/baldursgate3/validators/items.js +1001 -0
  185. package/dist/surfaces/baldursgate3/validators/progression.js +734 -0
  186. package/dist/surfaces/baldursgate3/validators/stats.js +1076 -0
  187. package/dist/surfaces/baldursgate3/validators/story.js +790 -0
  188. package/dist/surfaces/baldursgate3/validators/templates.js +7 -0
  189. package/dist/surfaces/cyberpunk2077/compat.js +223 -0
  190. package/dist/surfaces/cyberpunk2077/index/build.js +231 -0
  191. package/dist/surfaces/cyberpunk2077/index/index.js +17 -0
  192. package/dist/surfaces/cyberpunk2077/index/info.js +51 -0
  193. package/dist/surfaces/cyberpunk2077/index/model.js +52 -0
  194. package/dist/surfaces/cyberpunk2077/index/parsers/tweak.js +483 -0
  195. package/dist/surfaces/cyberpunk2077/index/parsers/tweakxl-yaml.js +183 -0
  196. package/dist/surfaces/cyberpunk2077/index/queries.js +504 -0
  197. package/dist/surfaces/cyberpunk2077/index/resource.js +135 -0
  198. package/dist/surfaces/cyberpunk2077/index/schema.js +90 -0
  199. package/dist/surfaces/cyberpunk2077/index.js +3 -0
  200. package/dist/surfaces/cyberpunk2077/logs.js +742 -0
  201. package/dist/surfaces/cyberpunk2077/paths.js +12 -0
  202. package/dist/surfaces/cyberpunk2077/surface.js +218 -0
  203. package/dist/surfaces/cyberpunk2077/validators/bridge.js +7 -0
  204. package/dist/surfaces/cyberpunk2077/validators/cr2w.js +349 -0
  205. package/dist/surfaces/cyberpunk2077/validators/garments.js +1181 -0
  206. package/dist/surfaces/cyberpunk2077/validators/mesh.js +338 -0
  207. package/dist/surfaces/cyberpunk2077/validators/modsettings.js +120 -0
  208. package/dist/surfaces/cyberpunk2077/validators/packaging.js +463 -0
  209. package/dist/surfaces/cyberpunk2077/validators/red4ext.js +318 -0
  210. package/dist/surfaces/cyberpunk2077/validators/redscript.js +193 -0
  211. package/dist/surfaces/cyberpunk2077/validators/templates.js +7 -0
  212. package/dist/surfaces/cyberpunk2077/validators/tweaks.js +768 -0
  213. package/dist/surfaces/cyberpunk2077/validators/vehicles.js +531 -0
  214. package/dist/surfaces/cyberpunk2077/validators/xl.js +308 -0
  215. package/dist/surfaces/eldenring/binders.js +111 -0
  216. package/dist/surfaces/eldenring/compat.js +166 -0
  217. package/dist/surfaces/eldenring/dcx.js +49 -0
  218. package/dist/surfaces/eldenring/index.js +13 -0
  219. package/dist/surfaces/eldenring/loaders.js +132 -0
  220. package/dist/surfaces/eldenring/logs.js +67 -0
  221. package/dist/surfaces/eldenring/paramdef.js +256 -0
  222. package/dist/surfaces/eldenring/params.js +129 -0
  223. package/dist/surfaces/eldenring/surface.js +121 -0
  224. package/dist/surfaces/eldenring/tools.js +52 -0
  225. package/dist/surfaces/eldenring/validators/binders.js +193 -0
  226. package/dist/surfaces/eldenring/validators/packages.js +159 -0
  227. package/dist/surfaces/eldenring/validators/params.js +334 -0
  228. package/dist/surfaces/eldenring/validators/profiles.js +287 -0
  229. package/dist/surfaces/index.js +34 -0
  230. package/dist/surfaces/nivalisnights/compat.js +229 -0
  231. package/dist/surfaces/nivalisnights/index/build.js +310 -0
  232. package/dist/surfaces/nivalisnights/index/index.js +5 -0
  233. package/dist/surfaces/nivalisnights/index/queries.js +231 -0
  234. package/dist/surfaces/nivalisnights/index.js +4 -0
  235. package/dist/surfaces/nivalisnights/logs.js +473 -0
  236. package/dist/surfaces/nivalisnights/surface.js +195 -0
  237. package/dist/surfaces/skyrimse/archives.js +229 -0
  238. package/dist/surfaces/skyrimse/compat.js +163 -0
  239. package/dist/surfaces/skyrimse/index.js +12 -0
  240. package/dist/surfaces/skyrimse/loadorder.js +174 -0
  241. package/dist/surfaces/skyrimse/logs.js +241 -0
  242. package/dist/surfaces/skyrimse/plugins.js +149 -0
  243. package/dist/surfaces/skyrimse/records.js +94 -0
  244. package/dist/surfaces/skyrimse/surface.js +240 -0
  245. package/dist/surfaces/skyrimse/validators/archive-records.js +165 -0
  246. package/dist/surfaces/skyrimse/validators/archives.js +110 -0
  247. package/dist/surfaces/skyrimse/validators/plugins.js +374 -0
  248. package/dist/surfaces/skyrimse/validators/records.js +117 -0
  249. package/dist/surfaces/stardewvalley/compat.js +190 -0
  250. package/dist/surfaces/stardewvalley/config.js +42 -0
  251. package/dist/surfaces/stardewvalley/contentpatcher.js +203 -0
  252. package/dist/surfaces/stardewvalley/index/index.js +229 -0
  253. package/dist/surfaces/stardewvalley/index/wiki.js +190 -0
  254. package/dist/surfaces/stardewvalley/index.js +12 -0
  255. package/dist/surfaces/stardewvalley/logs.js +307 -0
  256. package/dist/surfaces/stardewvalley/mods.js +182 -0
  257. package/dist/surfaces/stardewvalley/surface.js +244 -0
  258. package/dist/surfaces/stardewvalley/validators/content.js +321 -0
  259. package/dist/surfaces/stardewvalley/validators/fields.js +147 -0
  260. package/dist/surfaces/stardewvalley/validators/loadorder.js +69 -0
  261. package/dist/surfaces/stardewvalley/validators/manifest.js +221 -0
  262. package/dist/surfaces/subnautica2/compat.js +138 -0
  263. package/dist/surfaces/subnautica2/index.js +5 -0
  264. package/dist/surfaces/subnautica2/logs.js +129 -0
  265. package/dist/surfaces/subnautica2/paks.js +173 -0
  266. package/dist/surfaces/subnautica2/surface.js +151 -0
  267. package/dist/surfaces/subnautica2/validators/packaging.js +298 -0
  268. package/dist/surfaces/valheim/compat.js +171 -0
  269. package/dist/surfaces/valheim/index/index.js +301 -0
  270. package/dist/surfaces/valheim/index/tables.js +103 -0
  271. package/dist/surfaces/valheim/index.js +11 -0
  272. package/dist/surfaces/valheim/logs.js +197 -0
  273. package/dist/surfaces/valheim/packaging.js +131 -0
  274. package/dist/surfaces/valheim/plugins.js +270 -0
  275. package/dist/surfaces/valheim/references.js +121 -0
  276. package/dist/surfaces/valheim/surface.js +223 -0
  277. package/dist/surfaces/valheim/validators/packaging.js +218 -0
  278. package/dist/surfaces/valheim/validators/plugins.js +287 -0
  279. package/dist/surfaces/valheim/validators/references.js +169 -0
  280. package/knowledge/baldursgate3/animations.gr2.yaml +166 -0
  281. package/knowledge/baldursgate3/audio.voice.yaml +182 -0
  282. package/knowledge/baldursgate3/audio.wwise.yaml +104 -0
  283. package/knowledge/baldursgate3/charactercreation.heads-hair.yaml +193 -0
  284. package/knowledge/baldursgate3/communitylibrary.shared-content.yaml +129 -0
  285. package/knowledge/baldursgate3/compatibilityframework.api.yaml +176 -0
  286. package/knowledge/baldursgate3/crash.causes.yaml +90 -0
  287. package/knowledge/baldursgate3/dialogue.dialogbank.yaml +120 -0
  288. package/knowledge/baldursgate3/dialogue.files.yaml +236 -0
  289. package/knowledge/baldursgate3/dialogue.osiris-goals.yaml +386 -0
  290. package/knowledge/baldursgate3/dialogue.yaml +122 -0
  291. package/knowledge/baldursgate3/feats.classes.yaml +164 -0
  292. package/knowledge/baldursgate3/items.cloth-physics.yaml +167 -0
  293. package/knowledge/baldursgate3/items.roottemplates.yaml +320 -0
  294. package/knowledge/baldursgate3/items.visualbank.yaml +628 -0
  295. package/knowledge/baldursgate3/journal.quests.yaml +214 -0
  296. package/knowledge/baldursgate3/loadorder.modsettings.yaml +128 -0
  297. package/knowledge/baldursgate3/localization.handles.yaml +92 -0
  298. package/knowledge/baldursgate3/misc.encoding-and-practice.yaml +111 -0
  299. package/knowledge/baldursgate3/origins.companions.yaml +144 -0
  300. package/knowledge/baldursgate3/osiris.signatures.yaml +211 -0
  301. package/knowledge/baldursgate3/packaging.meta.yaml +155 -0
  302. package/knowledge/baldursgate3/packaging.paks.yaml +79 -0
  303. package/knowledge/baldursgate3/process.launch.yaml +34 -0
  304. package/knowledge/baldursgate3/progressions.yaml +92 -0
  305. package/knowledge/baldursgate3/publishing.modio-nexus.yaml +170 -0
  306. package/knowledge/baldursgate3/publishing.toolkit-modio.yaml +135 -0
  307. package/knowledge/baldursgate3/races.progression.yaml +228 -0
  308. package/knowledge/baldursgate3/scriptextender.console.yaml +257 -0
  309. package/knowledge/baldursgate3/scriptextender.yaml +252 -0
  310. package/knowledge/baldursgate3/stats.boosts.yaml +293 -0
  311. package/knowledge/baldursgate3/stats.equipment-kits.yaml +69 -0
  312. package/knowledge/baldursgate3/stats.interrupts.yaml +45 -0
  313. package/knowledge/baldursgate3/stats.itemcombos.yaml +65 -0
  314. package/knowledge/baldursgate3/stats.spells.yaml +293 -0
  315. package/knowledge/baldursgate3/stats.weapons.yaml +210 -0
  316. package/knowledge/baldursgate3/toolchain.divine.yaml +179 -0
  317. package/knowledge/baldursgate3/toolchain.lslib-formats.yaml +242 -0
  318. package/knowledge/baldursgate3/toolkit.levels.yaml +177 -0
  319. package/knowledge/baldursgate3/ui.icons-atlas.yaml +78 -0
  320. package/knowledge/baldursgate3/ui.icons.yaml +412 -0
  321. package/knowledge/baldursgate3/ui.mcm.yaml +161 -0
  322. package/knowledge/baldursgate3/vfx.materials.yaml +174 -0
  323. package/knowledge/baldursgate3/visuals.characterfix.yaml +73 -0
  324. package/knowledge/cyberpunk2077/animations.anims.yaml +118 -0
  325. package/knowledge/cyberpunk2077/anims.archivexl.yaml +163 -0
  326. package/knowledge/cyberpunk2077/anims.authoring.yaml +579 -0
  327. package/knowledge/cyberpunk2077/anims.encoder.yaml +156 -0
  328. package/knowledge/cyberpunk2077/anims.graph.yaml +629 -0
  329. package/knowledge/cyberpunk2077/anims.method.yaml +360 -0
  330. package/knowledge/cyberpunk2077/anims.pipeline.yaml +352 -0
  331. package/knowledge/cyberpunk2077/anims.roundtrip.yaml +222 -0
  332. package/knowledge/cyberpunk2077/anims.sets.yaml +176 -0
  333. package/knowledge/cyberpunk2077/archivexl.bodytypes.yaml +149 -0
  334. package/knowledge/cyberpunk2077/archivexl.dynamic-appearances.yaml +218 -0
  335. package/knowledge/cyberpunk2077/archivexl.manifest.yaml +214 -0
  336. package/knowledge/cyberpunk2077/audio.events.yaml +168 -0
  337. package/knowledge/cyberpunk2077/audio.sounds.yaml +164 -0
  338. package/knowledge/cyberpunk2077/audio.voicesets.yaml +146 -0
  339. package/knowledge/cyberpunk2077/cet.sandbox.yaml +219 -0
  340. package/knowledge/cyberpunk2077/clothing.garments.yaml +283 -0
  341. package/knowledge/cyberpunk2077/clothing.refits.yaml +215 -0
  342. package/knowledge/cyberpunk2077/codeware.overview.yaml +111 -0
  343. package/knowledge/cyberpunk2077/codeware.systems.yaml +192 -0
  344. package/knowledge/cyberpunk2077/drones.combat.yaml +416 -0
  345. package/knowledge/cyberpunk2077/drones.control.yaml +552 -0
  346. package/knowledge/cyberpunk2077/entities.appearance.yaml +166 -0
  347. package/knowledge/cyberpunk2077/equipmentex.slots.yaml +151 -0
  348. package/knowledge/cyberpunk2077/fx.effects.yaml +246 -0
  349. package/knowledge/cyberpunk2077/fx.lights.yaml +171 -0
  350. package/knowledge/cyberpunk2077/hair.modding.yaml +145 -0
  351. package/knowledge/cyberpunk2077/items.wiring.yaml +246 -0
  352. package/knowledge/cyberpunk2077/loadorder.archives.yaml +71 -0
  353. package/knowledge/cyberpunk2077/mesh.blender.yaml +209 -0
  354. package/knowledge/cyberpunk2077/nativedb.dump.yaml +98 -0
  355. package/knowledge/cyberpunk2077/npc.appearance.yaml +275 -0
  356. package/knowledge/cyberpunk2077/npc.behaviour.yaml +128 -0
  357. package/knowledge/cyberpunk2077/npc.locomotion.yaml +490 -0
  358. package/knowledge/cyberpunk2077/packaging.deploy.yaml +175 -0
  359. package/knowledge/cyberpunk2077/packaging.variants.yaml +176 -0
  360. package/knowledge/cyberpunk2077/player.control.yaml +918 -0
  361. package/knowledge/cyberpunk2077/process.assetbuild.yaml +154 -0
  362. package/knowledge/cyberpunk2077/process.lessons.yaml +276 -0
  363. package/knowledge/cyberpunk2077/quests.minor.yaml +46 -0
  364. package/knowledge/cyberpunk2077/quests.scenes.yaml +282 -0
  365. package/knowledge/cyberpunk2077/quickhacks.tiers.yaml +41 -0
  366. package/knowledge/cyberpunk2077/red4ext.api.yaml +645 -0
  367. package/knowledge/cyberpunk2077/red4ext.plugins.yaml +124 -0
  368. package/knowledge/cyberpunk2077/redhottools.hotreload.yaml +245 -0
  369. package/knowledge/cyberpunk2077/redscript.compile-log.yaml +76 -0
  370. package/knowledge/cyberpunk2077/redscript.modules.yaml +118 -0
  371. package/knowledge/cyberpunk2077/toolchain.wolvenkit.yaml +163 -0
  372. package/knowledge/cyberpunk2077/tweakdb.loot-recipes.yaml +184 -0
  373. package/knowledge/cyberpunk2077/tweakdb.melee.yaml +352 -0
  374. package/knowledge/cyberpunk2077/tweakdb.weapons.yaml +325 -0
  375. package/knowledge/cyberpunk2077/tweakxl.hotreload.yaml +151 -0
  376. package/knowledge/cyberpunk2077/tweakxl.yaml-syntax.yaml +208 -0
  377. package/knowledge/cyberpunk2077/ui.icons.yaml +259 -0
  378. package/knowledge/cyberpunk2077/ui.inkatlas.yaml +81 -0
  379. package/knowledge/cyberpunk2077/ui.modsettings.yaml +204 -0
  380. package/knowledge/cyberpunk2077/vehicles.control.yaml +475 -0
  381. package/knowledge/cyberpunk2077/vehicles.dashboard-ui.yaml +203 -0
  382. package/knowledge/cyberpunk2077/vehicles.entities.yaml +195 -0
  383. package/knowledge/cyberpunk2077/vehicles.wiring.yaml +137 -0
  384. package/knowledge/cyberpunk2077/wolvenkit.cli.yaml +167 -0
  385. package/knowledge/cyberpunk2077/workspot.system.yaml +55 -0
  386. package/knowledge/cyberpunk2077/world.interactions.yaml +41 -0
  387. package/knowledge/cyberpunk2077/world.loot-container.yaml +167 -0
  388. package/knowledge/cyberpunk2077/world.sectors.yaml +233 -0
  389. package/knowledge/eldenring/formats.binders.yaml +237 -0
  390. package/knowledge/eldenring/launcher.me3.yaml +230 -0
  391. package/knowledge/eldenring/launcher.modengine2.yaml +119 -0
  392. package/knowledge/eldenring/params.paramdef.yaml +149 -0
  393. package/knowledge/eldenring/params.regulation.yaml +142 -0
  394. package/knowledge/eldenring/saves.online.yaml +118 -0
  395. package/knowledge/eldenring/toolchain.cli.yaml +256 -0
  396. package/knowledge/nivalisnights/modding.runtime.yaml +157 -0
  397. package/knowledge/skyrimse/archives.bsa.yaml +212 -0
  398. package/knowledge/skyrimse/install.detection.yaml +41 -0
  399. package/knowledge/skyrimse/loadorder.files.yaml +242 -0
  400. package/knowledge/skyrimse/plugins.esl.yaml +189 -0
  401. package/knowledge/skyrimse/plugins.format.yaml +224 -0
  402. package/knowledge/skyrimse/skse.runtime.yaml +283 -0
  403. package/knowledge/skyrimse/toolchain.xedit-spriggit.yaml +336 -0
  404. package/knowledge/stardewvalley/contentpatcher.format.yaml +338 -0
  405. package/knowledge/stardewvalley/distribution.channels.yaml +236 -0
  406. package/knowledge/stardewvalley/game.versions.yaml +202 -0
  407. package/knowledge/stardewvalley/install.layout.yaml +277 -0
  408. package/knowledge/stardewvalley/smapi.loader.yaml +284 -0
  409. package/knowledge/stardewvalley/smapi.logs.yaml +329 -0
  410. package/knowledge/stardewvalley/smapi.manifest.yaml +293 -0
  411. package/knowledge/stardewvalley/toolchain.build.yaml +261 -0
  412. package/knowledge/stardewvalley/wiki.dataformat.yaml +130 -0
  413. package/knowledge/subnautica2/game.build.yaml +331 -0
  414. package/knowledge/subnautica2/modding.state.yaml +210 -0
  415. package/knowledge/subnautica2/ue5.containers.yaml +72 -0
  416. package/knowledge/subnautica2/ue5.paks.yaml +203 -0
  417. package/knowledge/subnautica2/ue5.tooling.yaml +175 -0
  418. package/knowledge/subnautica2/ue5.ue4ss.yaml +203 -0
  419. package/knowledge/valheim/bepinex.loader.yaml +247 -0
  420. package/knowledge/valheim/bepinex.plugins.yaml +251 -0
  421. package/knowledge/valheim/game.versions.yaml +321 -0
  422. package/knowledge/valheim/install.layout.yaml +216 -0
  423. package/knowledge/valheim/jotunn.library.yaml +334 -0
  424. package/knowledge/valheim/thunderstore.packaging.yaml +217 -0
  425. package/knowledge/valheim/toolchain.build.yaml +111 -0
  426. package/package.json +29 -0
  427. package/scaffolds/baldursgate3/new-class-injection.yaml +148 -0
  428. package/scaffolds/baldursgate3/new-item.yaml +264 -0
  429. package/scaffolds/baldursgate3/new-mod.yaml +174 -0
  430. package/scaffolds/baldursgate3/new-passive.yaml +100 -0
  431. package/scaffolds/baldursgate3/new-project.yaml +118 -0
  432. package/scaffolds/baldursgate3/new-quest-stub.yaml +159 -0
  433. package/scaffolds/baldursgate3/new-spell.yaml +102 -0
  434. package/scaffolds/baldursgate3/new-status.yaml +119 -0
  435. package/scaffolds/baldursgate3/sequences/subclass-kit.yaml +50 -0
  436. package/scaffolds/cyberpunk2077/edit-tweak.yaml +70 -0
  437. package/scaffolds/cyberpunk2077/mesh-export-preset.yaml +170 -0
  438. package/scaffolds/cyberpunk2077/new-entity-patch.yaml +255 -0
  439. package/scaffolds/cyberpunk2077/new-garment-refit.yaml +279 -0
  440. package/scaffolds/cyberpunk2077/new-item-chain.yaml +548 -0
  441. package/scaffolds/cyberpunk2077/new-localization.yaml +130 -0
  442. package/scaffolds/cyberpunk2077/new-mod-settings.yaml +133 -0
  443. package/scaffolds/cyberpunk2077/new-player-replacer.yaml +1003 -0
  444. package/scaffolds/cyberpunk2077/new-project.yaml +157 -0
  445. package/scaffolds/cyberpunk2077/new-sector-node.yaml +156 -0
  446. package/scaffolds/cyberpunk2077/new-tweak.yaml +121 -0
  447. package/scaffolds/cyberpunk2077/new-vehicle-livery.yaml +148 -0
  448. package/scaffolds/cyberpunk2077/new-workspot-entity.yaml +177 -0
  449. package/scaffolds/cyberpunk2077/sequences/iconic-weapon.yaml +72 -0
  450. package/scaffolds/cyberpunk2077/sequences/quickhack-takeover.yaml +213 -0
  451. package/scaffolds/stardewvalley/new-cp-patch.yaml +106 -0
  452. package/scaffolds/stardewvalley/new-csharp-mod.yaml +195 -0
  453. package/scaffolds/stardewvalley/new-project.yaml +184 -0
  454. package/scaffolds/stardewvalley/sequences/content-pack.yaml +31 -0
  455. package/scripts/mw-tool.mjs +184 -0
@@ -0,0 +1,203 @@
1
+ game: subnautica2
2
+ topic: ue5.ue4ss
3
+ title: UE4SS — the Unreal Engine scripting loader, its layout and its version problem
4
+ facts:
5
+ - id: subnautica2.ue4ss.live-repo-vs-archived-original
6
+ claim: The live UE4SS project is `UE4SS-RE/RE-UE4SS`. The similarly-named `ue4ss/ue4ss` is the
7
+ ARCHIVED original (archived 2023-01-02, last release 1.3.5, maximum UE 5.0) and must not be
8
+ cited or linked.
9
+ status: community
10
+ source: https://github.com/UE4SS-RE/RE-UE4SS and https://github.com/ue4ss/ue4ss (archive banner and
11
+ final release), read 2026-09-11
12
+ tags:
13
+ - ue4ss
14
+ - repo
15
+ - provenance
16
+ - archived
17
+ - generic
18
+ detail: Worth recording because the archived repo still ranks in search results and its
19
+ documentation describes an installation layout three major versions out of date.
20
+ - id: subnautica2.ue4ss.ue56-only-in-experimental
21
+ claim: UE 5.6 support exists ONLY in UE4SS's rolling `experimental-latest` prerelease. The latest
22
+ tagged stable, v3.0.1 (2025-02-14), descends from v3.0.0, whose notes claim support only for
23
+ UE 5.2 and 5.3. There has been no tagged stable release in roughly nineteen months.
24
+ status: community
25
+ source: https://github.com/UE4SS-RE/RE-UE4SS/releases/tag/experimental-latest (notes list, as
26
+ separate bullets, added support for UE 5.4, 5.5, 5.6, 5.7 and 5.8; last rebuilt 2026-09-11)
27
+ and https://github.com/UE4SS-RE/RE-UE4SS/releases/tag/v3.0.1, both read 2026-09-11
28
+ tags:
29
+ - ue4ss
30
+ - version
31
+ - ue5.6
32
+ - experimental
33
+ - compat
34
+ - generic
35
+ - blocker
36
+ detail: 'This is the single most consequential fact for any UE 5.4+ game. It has an awkward
37
+ consequence for a compat rule table: `experimental-latest` is a moving target under a fixed
38
+ tag, so there is no version to pin a `VersionRequirement` against. Model it as an `advisory:
39
+ true` rule with empty `requires` that fires whenever UE4SS is present — per
40
+ src/core/compat/types.ts, advisories exist for exactly this, "a standing reminder that should
41
+ show up whenever a component is present at all". A user who installed the stable release on a
42
+ 5.6 game has a loader that cannot work, and no version comparison would have told them.'
43
+ - id: subnautica2.ue4ss.install-layout-stable-vs-experimental
44
+ claim: "The two UE4SS lines install differently. Stable 3.0.x puts `dwmapi.dll`, `UE4SS.dll`,
45
+ `UE4SS-settings.ini` and `Mods/` all directly in the game's `Binaries/Win64/`. Experimental
46
+ moves everything except the proxy DLL into a `ue4ss` subfolder: `Binaries/Win64/dwmapi.dll`
47
+ plus `Binaries/Win64/ue4ss/{UE4SS.dll, UE4SS-settings.ini, Mods/}`."
48
+ status: community
49
+ source: "Stable: https://docs.ue4ss.com/dev/installation-guide.html. Experimental, verbatim from the
50
+ release notes: \"All UE4SS files (including UE4SS.dll, settings, and mods) now reside in a
51
+ `ue4ss` subfolder next to your game executable. Only the proxy DLL (dwmapi.dll) remains in the
52
+ game's Win64 directory.\"
53
+ (https://github.com/UE4SS-RE/RE-UE4SS/releases/tag/experimental-latest). Both read
54
+ 2026-09-11."
55
+ tags:
56
+ - ue4ss
57
+ - install
58
+ - layout
59
+ - paths
60
+ - modroot
61
+ - generic
62
+ detail: A surface must offer BOTH paths as candidates and report which exists rather than assuming,
63
+ since the choice of path is really a choice of UE4SS line. `dwmapi.dll` became the proxy DLL
64
+ in v3.0.0, replacing `xinput1_3.dll`; the docs note the proxy can be "a name of any DLL that
65
+ is loaded by the game engine or by its dependencies", so its name is not a reliable detection
66
+ key on its own.
67
+ - id: subnautica2.ue4ss.mod-folder-and-mods-txt
68
+ claim: "A UE4SS mod is one directory under `Mods/`, with `Scripts/main.lua` for a Lua mod and/or
69
+ `dlls/main.dll` for a C++ mod. Enablement is `Mods/mods.txt`, one `ModName : 1` line per mod
70
+ (1 enabled, 0 disabled); an `enabled.txt` file inside a mod folder is an alternative marker."
71
+ status: community
72
+ source: "https://docs.ue4ss.com/dev/installation-guide.html (folder tree) and
73
+ https://docs.ue4ss.com/dev/guides/creating-a-lua-mod.html (the verbatim `MyLuaMod : 1` line
74
+ and the `Mods\\MyLuaMod\\scripts\\main.lua` tree), read 2026-09-11"
75
+ tags:
76
+ - ue4ss
77
+ - mods
78
+ - modstxt
79
+ - loadorder
80
+ - lua
81
+ - generic
82
+ detail: "`mods.txt` is a genuine load-order file in the `plugins.txt` mould — ordered, one name per
83
+ line, with an enabled flag — and each entry resolves to a real directory under the same root,
84
+ so a surface can set `modId` on every entry with confidence. Note the docs are inconsistent
85
+ about the case of the scripts subfolder (`Scripts` in the install guide, `scripts` in the mod
86
+ guide); it is case-insensitive on Windows. The precedence of `enabled.txt` relative to
87
+ `mods.txt` is not spelled out anywhere in the docs — a mod directory present but listed in
88
+ neither is the most common cause of a mod silently doing nothing."
89
+ - id: subnautica2.ue4ss.usmap-dumper-keybind
90
+ claim: "UE4SS can generate the `.usmap` mappings file a UE5 game needs for external asset tooling:
91
+ the Dumpers feature writes `Mappings.usmap` next to the `*-Shipping.exe`, bound to `Ctrl +
92
+ Numpad 6`."
93
+ status: community
94
+ source: https://docs.ue4ss.com/dev/feature-overview/dumpers.html, read 2026-09-11
95
+ tags:
96
+ - ue4ss
97
+ - usmap
98
+ - mappings
99
+ - dumper
100
+ - tooling
101
+ - generic
102
+ detail: 'Verbatim from the page: "By default the dump includes Blueprint-generated classes, structs
103
+ and enums in addition to native types." The other dumpers are UHT-compatible headers (`CTRL +
104
+ Numpad 9`), a C++ header generator (`CTRL + H`), `.umap` recreation (`Ctrl + Numpad 7`) and
105
+ `DumpAllObjects()` → `UE4SS_ObjectDump.txt` (`CTRL + J`). This matters beyond UE4SS itself:
106
+ generating mappings requires running a dumper against the LIVE process, which is why no
107
+ asset-level tooling can be built or tested without the game installed
108
+ (subnautica2.ue5.usmap-requires-a-running-game).'
109
+ - id: subnautica2.ue4ss.per-game-config-files
110
+ claim: Games that "have altered the engine in ways that make UE4SS not work out of the box" get a
111
+ `Binaries/Win64/CustomGameConfigs/<GameName>/` folder holding `UE4SS-settings.ini`,
112
+ `MemberVariableLayout.ini` (struct offsets), `VTableLayout.ini` (vtable index overrides) and
113
+ `UE4SS_Signatures/*.lua` (AOB signatures for `FName::FName`, `FName::ToString` and
114
+ `StaticConstructObject`).
115
+ status: community
116
+ source: https://docs.ue4ss.com/dev/custom-game-configs.html and
117
+ https://github.com/UE4SS-RE/RE-UE4SS/blob/main/docs/custom-game-configs.md, read 2026-09-11
118
+ tags:
119
+ - ue4ss
120
+ - offsets
121
+ - aob
122
+ - signatures
123
+ - per-game
124
+ - config
125
+ - generic
126
+ detail: There is NO `VersionDefinitions` file and no per-game `Config.ini` in current RE-UE4SS; that
127
+ naming is stale and circulates widely. The need for hand-written AOB signatures dropped
128
+ sharply in v3.0.0, which replaced the built-in address scans with `patternsleuth`
129
+ (https://github.com/UE4SS-RE/RE-UE4SS/releases/tag/v3.0.0). A game needing no
130
+ CustomGameConfigs entry is the normal case now, not the exception.
131
+ - id: subnautica2.ue4ss.logicmods-blueprint-path
132
+ claim: UE4SS's bundled `BPModLoaderMod` loads blueprint mods from the game's
133
+ `Content/Paks/LogicMods/` directory; the pak's name must match the mod folder name used in the
134
+ editor, and the pak must contain a `ModActor` asset.
135
+ status: community
136
+ source: Community-documented, not on docs.ue4ss.com — the official page
137
+ (https://docs.ue4ss.com/dev/feature-overview/blueprint-modloader.html) is a stub pointing at a
138
+ video. Path and ModActor requirement from downstream modding wikis, e.g.
139
+ https://pwmodding.wiki/docs/developers/ue4ss-modding/logic-mods/introduction. Read 2026-09-11.
140
+ tags:
141
+ - ue4ss
142
+ - logicmods
143
+ - blueprint
144
+ - pak
145
+ - modloader
146
+ - generic
147
+ - community
148
+ detail: "Independently corroborated for at least one game by Nexus Mods' own Vortex extension, which
149
+ routes \"LogicMods\" to `Content/Paks/LogicMods/`
150
+ (https://github.com/Nexus-Mods/game-subnautica2). Note that the per-game shape can differ from
151
+ the generic description: Subnautica 2's modkit requires a FOLDER per mod inside LogicMods
152
+ holding the full IoStore triplet, not a bare `.pak`
153
+ (subnautica2.modding.logicmods-is-folder-per-mod)."
154
+ - id: subnautica2.ue4ss.log-and-console
155
+ claim: "UE4SS writes `UE4SS.log` beside its DLL, and exposes a console and a GUI console configured
156
+ in `UE4SS-settings.ini` under `[Debug]`: `ConsoleEnabled`, `GuiConsoleEnabled`,
157
+ `GuiConsoleVisible`, `GraphicsAPI` (default `opengl`; `dx11`/`d3d11` also valid) and
158
+ `ToggleGuiKey=O` with CTRL."
159
+ status: community
160
+ source: https://github.com/UE4SS-RE/RE-UE4SS/blob/main/assets/UE4SS-settings.ini and
161
+ https://docs.ue4ss.com, read 2026-09-11
162
+ tags:
163
+ - ue4ss
164
+ - log
165
+ - console
166
+ - settings
167
+ - triage
168
+ - generic
169
+ detail: "`UE4SS.log` is a natural second log source for a UE game's surface alongside the engine's
170
+ own `Saved/Logs` file, and is the log-line fallback transport a ModWright bridge would use if
171
+ file writes fail. The docs advise setting both GUI console keys to 0 for play because the GUI
172
+ console \"will severely impact game performance\". Other settings worth knowing: `[Overrides]
173
+ ModsFolderPath` / `ModsFolderPaths` relocate the Mods directory (so the mod root is not
174
+ guaranteed to be the default path), and `[General] EnableHotReloadSystem=1` with
175
+ `HotReloadKey=R` hot-reloads LUA mods only — nothing in the pak or IoStore path hot-reloads."
176
+ - id: subnautica2.ue4ss.shared-folder-and-enabled-txt
177
+ claim: "Not every folder under UE4SS's `Mods/` is a mod: `shared` is the shared Lua library a build
178
+ ships with, and a tool walking `Mods/` must exempt it rather than report it as a mod with no
179
+ entry point. Neither the Lua-mod guide nor the installation guide mentions `enabled.txt` at
180
+ all — the docs' only enablement mechanism is the `ModName : 1` line in `mods.txt`."
181
+ status: community
182
+ source: https://docs.ue4ss.com/dev/guides/creating-a-lua-mod.html — verbatim, "Make sure that your
183
+ build of UE4SS contains `Mods\shared\Types.lua` (a development build from Github releases
184
+ contains it)", and the enablement passage "The mod must be added and enabled in
185
+ `Mods\mods.txt` with a new line containing the name of your mod folder ... and `1` for
186
+ enabling or `0` for disabling the mod"; read 2026-09-11 together with
187
+ https://docs.ue4ss.com/dev/installation-guide.html, neither of which names enabled.txt
188
+ tags:
189
+ - ue4ss
190
+ - mods
191
+ - shared
192
+ - main.lua
193
+ - mods.txt
194
+ - enabled.txt
195
+ - validator
196
+ detail: "`subnautica2.ue4ss.mod-shape` exempts `shared`, accepts either entry point
197
+ (`scripts/main.lua` or `dlls/main.dll`, matched case-insensitively because the two doc pages
198
+ disagree on the case of `scripts` — see `subnautica2.ue4ss.mod-folder-and-mods-txt`), and
199
+ treats an `enabled.txt` as enabling a folder that mods.txt does not name, since ModWright
200
+ research recorded that convention; the docs do not back it, so if a real UE4SS build ignores
201
+ `enabled.txt` the rule's \"will not load\" warning is the one to revisit."
202
+ related:
203
+ - subnautica2.ue4ss.mod-folder-and-mods-txt
@@ -0,0 +1,247 @@
1
+ game: valheim
2
+ topic: bepinex.loader
3
+ title: BepInEx 5 as Valheim's plugin loader — folder layout, Doorstop, and the exact LogOutput.log
4
+ line formats
5
+ facts:
6
+ - id: valheim.bepinex.loader.folder-layout
7
+ claim: "A BepInEx install creates five folders under `BepInEx/`: `core` (the framework assemblies),
8
+ `plugins` (user plugins), `config` (per-plugin `.cfg` files), `patchers` (preloader patcher
9
+ plugins) and `cache`."
10
+ status: community
11
+ source: https://docs.bepinex.dev/articles/user_guide/installation/index.html
12
+ tags:
13
+ - bepinex
14
+ - layout
15
+ - plugins
16
+ - config
17
+ - patchers
18
+ - modroots
19
+ detail: "These map onto four distinct ModWright mod roots with different rules: `plugins` is
20
+ directory- or file-delimited and isolated, `config` is a merged tree of shared text files,
21
+ `patchers` is a separate load stage that runs before any plugin, and `cache` is derived state
22
+ that must never be deployed to."
23
+ - id: valheim.bepinex.loader.doorstop-files-beside-the-exe
24
+ claim: "On Windows x64 the loader is three files placed next to the game executable, not inside
25
+ `BepInEx/`: `winhttp.dll` (the Doorstop loader DLL), `doorstop_config.ini` and
26
+ `.doorstop_version`. On Linux and macOS the equivalent is a `run_bepinex.sh` script that must
27
+ be edited to name the executable and then made executable with `chmod u+x`."
28
+ status: community
29
+ source: https://docs.bepinex.dev/articles/user_guide/installation/index.html
30
+ tags:
31
+ - bepinex
32
+ - doorstop
33
+ - winhttp
34
+ - install
35
+ - detect
36
+ detail: Presence of `winhttp.dll` plus `doorstop_config.ini` in the game root is the cheapest "is
37
+ BepInEx installed at all" check available, and it needs no launch. It is also the check that
38
+ distinguishes a game-directory install from an r2modman profile install, where the same three
39
+ files live in the profile instead.
40
+ - id: valheim.bepinex.loader.doorstop-config-keys-renamed-at-5-4-23
41
+ claim: "`doorstop_config.ini`'s section and key names are not stable across BepInEx 5: up to 5.4.22
42
+ the file is `[UnityDoorstop]` with camelCase keys (`enabled`, `targetAssembly`,
43
+ `redirectOutputLog`, `ignoreDisableSwitch`, `dllSearchPathOverride`), and from 5.4.23 on it is
44
+ `[General]` + `[UnityMono]` with snake_case keys (`enabled`, `target_assembly`,
45
+ `redirect_output_log`, `boot_config_override`, `ignore_disable_switch`,
46
+ `dll_search_path_override`, `debug_enabled`, `debug_address`, `debug_suspend`)."
47
+ status: inferred
48
+ source: BepInEx `doorstop/doorstop_config.ini` at tags v5.4.22 and v5-lts / v5.4.23.5; the 5.4.23.2
49
+ release notes state it outright — "Settings in `doorstop_config.ini` were renamed, old config
50
+ files will no longer work" (https://github.com/BepInEx/BepInEx/releases/tag/v5.4.23.2)
51
+ tags:
52
+ - doorstop
53
+ - config
54
+ - ini
55
+ - version
56
+ - detect
57
+ - parser
58
+ detail: Both spellings are still in the wild, so a detector that greps for `target_assembly` alone
59
+ will silently fail to recognise an older install, and one that greps for `targetAssembly` will
60
+ fail on every current one. The value's whitespace is also inconsistent inside BepInEx's own
61
+ shipped file (`enabled = true` but `target_assembly=BepInEx\core\...`), so a parser must
62
+ tolerate optional spaces around `=`.
63
+ - id: valheim.bepinex.loader.logoutput-path-and-recreation
64
+ claim: BepInEx's `DiskLogListener` writes `LogOutput.log` into the BepInEx root
65
+ (`BepInEx/LogOutput.log`) and opens it with `FileMode.Create` unless the `AppendLog` config is
66
+ on — so by default the file is truncated and rewritten on every launch rather than appended
67
+ to.
68
+ status: inferred
69
+ source: "BepInEx v5-lts `BepInEx/Logging/DiskLogListener.cs` (the constructor's
70
+ `Path.Combine(Paths.BepInExRootPath, localPath)` and `appendLog ? FileMode.Append :
71
+ FileMode.Create`), and `BepInEx/Bootstrap/Chainloader.cs` which constructs it as `new
72
+ DiskLogListener(\"LogOutput.log\", ...)`"
73
+ tags:
74
+ - bepinex
75
+ - logoutput
76
+ - log
77
+ - run-scope
78
+ - truncation
79
+ detail: 'Good news for `core/logs` run scoping: one file per run means a plain whole-file read is
80
+ already run-scoped, with none of the Cyberpunk redscript `rCURRENT` in-place-truncation trap.
81
+ The Valheim-Modding wiki states the same behaviour in prose — the log "will be re-generated on
82
+ a successful startup by default".'
83
+ - id: valheim.bepinex.loader.logoutput-fallback-filenames
84
+ claim: If `LogOutput.log` cannot be opened for writing, BepInEx retries up to five times under the
85
+ names `LogOutput.log.1`, `LogOutput.log.2` and so on, and only then logs "Couldn't open a log
86
+ file for writing. Skipping log file creation" and gives up.
87
+ status: inferred
88
+ source: BepInEx v5-lts `BepInEx/Logging/DiskLogListener.cs`, the `while
89
+ (!Utility.TryOpenFileStream(...))` loop
90
+ tags:
91
+ - bepinex
92
+ - logoutput
93
+ - log
94
+ - candidates
95
+ - failure-mode
96
+ detail: "A log source for Valheim must therefore declare candidates, not one path: an antivirus or a
97
+ second running instance holding the handle silently moves the log to a numbered sibling. The
98
+ wiki's Bitdefender note is a real report of exactly this class of problem."
99
+ - id: valheim.bepinex.loader.log-line-format
100
+ claim: Every disk log line is formatted by `LogEventArgs.ToString()` as
101
+ `$"[{Level,-7}:{Source.SourceName,10}] {Data}"` — an opening bracket, the log level
102
+ left-aligned and space-padded to 7 characters, a colon, the source name right-aligned and
103
+ space-padded to 10 characters, a closing bracket, one space, then the message. There is no
104
+ timestamp.
105
+ status: inferred
106
+ source: BepInEx v5-lts `BepInEx/Logging/LogEventArgs.cs`, `ToString()`; written by
107
+ `DiskLogListener.LogEvent` via `LogWriter.WriteLine(eventArgs.ToString())`
108
+ tags:
109
+ - bepinex
110
+ - log
111
+ - format
112
+ - signature
113
+ - regex
114
+ detail: "Concretely, `[Info : BepInEx] ...`, `[Warning: HarmonyX] ...`, `[Error : Unity Log]
115
+ ...`. Two consequences for `logSignatures`: a pattern must tolerate variable internal
116
+ whitespace on both sides of the colon (the padding depends on the length of the level and
117
+ source names, and a source name longer than 10 characters is not truncated), and **there is no
118
+ timestamp**, so `RunScope.since` can never be applied line-by-line for this source —
119
+ `SourceStatus.timestamps` will be false and scoping must fall back to file mtime plus the
120
+ per-run truncation above."
121
+ - id: valheim.bepinex.loader.preloader-banner-lines
122
+ claim: "The preloader writes a fixed banner at the top of every run, in order: `BepInEx <version> -
123
+ <ProcessName> (<exe last write time>)`, then `Running under Unity v<version>`, `CLR runtime
124
+ version: <version>`, `Supports SRE: <bool>`, `System platform: <platform>`, then `Preloader
125
+ started`, `Loaded 1 patcher method from [BepInEx.Preloader <version>]`, `<N> patcher plugin(s)
126
+ loaded` and `Preloader finished`."
127
+ status: inferred
128
+ source: BepInEx v5-lts `BepInEx.Preloader/Preloader.cs`, the `Logger.LogMessage` / `Logger.LogInfo`
129
+ calls in `Run()`
130
+ tags:
131
+ - bepinex
132
+ - log
133
+ - banner
134
+ - version
135
+ - compat
136
+ - signature
137
+ detail: These four version numbers — BepInEx's own, the game exe's, the CLR's and (from the
138
+ chainloader, below) the detected Unity version — are the whole raw material for a Valheim
139
+ `compat` surface, and all four are readable from the log with no launch beyond the first.
140
+ - id: valheim.bepinex.loader.unity-version-is-the-exe-file-version
141
+ claim: "BepInEx's \"Running under Unity v...\" line does not read a Unity marker file:
142
+ `Preloader.GetUnityVersion()` returns
143
+ `FileVersionInfo.GetVersionInfo(Paths.ExecutablePath).FileVersion`, i.e. the PE FileVersion of
144
+ the game executable itself."
145
+ status: inferred
146
+ source: BepInEx v5-lts `BepInEx.Preloader/Preloader.cs`, `GetUnityVersion()`
147
+ tags:
148
+ - bepinex
149
+ - unity
150
+ - version
151
+ - pe
152
+ - compat
153
+ - detect
154
+ detail: ModWright already has `core/compat/pe.ts` `readPeFileVersion`, so a Valheim surface can
155
+ report the same number BepInEx reports without the game ever having been launched, by reading
156
+ `valheim.exe` directly. Treat it as the Unity player version axis, distinct from Iron Gate's
157
+ own `1.0.12`-style marketing version.
158
+ - id: valheim.bepinex.loader.chainloader-lines
159
+ claim: "The chainloader's own lines are `Detected Unity version: v<version>`, `Chainloader ready`,
160
+ `Chainloader started`, `<N> plugin(s) to load`, one `Loading [<Name> <Version>]` per plugin,
161
+ and finally `Chainloader startup complete`."
162
+ status: inferred
163
+ source: BepInEx v5-lts `BepInEx/Bootstrap/Chainloader.cs` (`Logger.LogMessage` and `Logger.LogInfo`
164
+ calls) with `PluginInfo.ToString()` defined in `BepInEx/Contract/PluginInfo.cs` as
165
+ `$"{Metadata?.Name} {Metadata?.Version}"`
166
+ tags:
167
+ - bepinex
168
+ - log
169
+ - chainloader
170
+ - plugin-loaded
171
+ - signature
172
+ - success
173
+ detail: "`Loading [Jotunn 2.26.0]` is the canonical per-plugin success line, and it carries name and
174
+ version but **not** GUID — so a log-derived inventory is keyed on the human-facing `Name` from
175
+ `[BepInPlugin]`, which is explicitly allowed to change between versions. Absence of
176
+ `Chainloader startup complete` at the end of a run is the signal that something aborted
177
+ mid-load."
178
+ - id: valheim.bepinex.loader.bepinex-cfg-keys
179
+ claim: Disk logging is controlled by `BepInEx/config/BepInEx.cfg` section `[Logging.Disk]` with keys
180
+ `Enabled` (default true), `AppendLog` (default false), `LogLevels` (default Fatal, Error,
181
+ Message, Info, Warning — note Debug is excluded) and `WriteUnityLog` (default false);
182
+ `[Logging]` `UnityLogListening` (default true) and `[Chainloader]` `HideManagerGameObject`
183
+ (default false) are the other two that matter.
184
+ status: inferred
185
+ source: BepInEx v5-lts `BepInEx/Bootstrap/Chainloader.cs`, the `ConfigFile.CoreConfig.Bind(...)`
186
+ declarations at the end of the file
187
+ tags:
188
+ - bepinex
189
+ - config
190
+ - bepinex-cfg
191
+ - logging
192
+ - explain-missing
193
+ detail: "`[Logging.Disk] Enabled = false` is exactly the kind of reason `GameSurface.explainMissing`
194
+ exists for: it turns a missing `LogOutput.log` from \"the loader never ran\" into \"logging is
195
+ switched off\", and those two demand opposite next actions. `WriteUnityLog = false` by default
196
+ also means the game's own Unity exceptions are in `Player.log` and not in `LogOutput.log`
197
+ unless someone turned it on."
198
+ - id: valheim.bepinex.loader.bepinexpack-valheim-is-the-distribution
199
+ claim: "Valheim does not use a stock BepInEx build: the community standard is
200
+ `denikson/BepInExPack_Valheim` on Thunderstore, currently version `5.4.2350`, which ships a
201
+ preconfigured `BepInEx.cfg` with the console enabled and the correct Valheim entry point,
202
+ Linux run scripts, an edited preloader, a forced `isModded` flag and support for semantic
203
+ versioning in plugin versions."
204
+ status: community
205
+ source: https://thunderstore.io/c/valheim/p/denikson/BepInExPack_Valheim/
206
+ tags:
207
+ - bepinex
208
+ - bepinexpack
209
+ - thunderstore
210
+ - version
211
+ - ismodded
212
+ - console
213
+ detail: Two consequences. The pack's version (`5.4.2350`) is not a stock BepInEx version number, so
214
+ a compat rule comparing it against BepInEx's own releases will read as nonsense — it must be
215
+ treated as its own component with its own axis. And the forced `isModded` flag means a BepInEx
216
+ install changes how the game advertises itself on the server list, which is a user-visible
217
+ side effect of merely installing the loader.
218
+ - id: valheim.bepinexpack-valheim-install-shape
219
+ claim: "Manual installation of BepInExPack_Valheim is: extract the archive, then copy the *contents*
220
+ of the inner `BepInExPack_Valheim` folder into the Valheim game directory, after which
221
+ `BepInEx`, `winhttp.dll` and `doorstop_config.ini` sit in the game root."
222
+ status: community
223
+ source: https://thunderstore.io/c/valheim/p/denikson/BepInExPack_Valheim/
224
+ tags:
225
+ - bepinex
226
+ - install
227
+ - doorstop
228
+ - winhttp
229
+ - detect
230
+ detail: "The nested-folder step is the single most common manual-install mistake: copying the
231
+ archive's top folder instead of its contents produces
232
+ `Valheim/BepInExPack_Valheim/BepInEx/...`, where Doorstop never loads and no log is ever
233
+ written."
234
+ - id: valheim.bepinex.loader.console-and-plugins-loaded-indicator
235
+ claim: With the Valheim pack's default config a BepInEx console window opens alongside the game, and
236
+ the in-game confirmation that plugins loaded is a "Plugins Loaded" message at the top left of
237
+ the main menu.
238
+ status: community
239
+ source: https://github.com/Valheim-Modding/Wiki/wiki/Client-Troubleshooting
240
+ tags:
241
+ - bepinex
242
+ - console
243
+ - main-menu
244
+ - plugins-loaded
245
+ - verification
246
+ detail: "This is the cheapest attended verification step for a test run: it needs the main menu
247
+ only, no save, no character."