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,124 @@
1
+ game: cyberpunk2077
2
+ topic: red4ext.plugins
3
+ title: RED4ext plugin loading contract — exported functions, install paths, logging
4
+ facts:
5
+ - id: cp2077.red4ext.plugins.two-project-split
6
+ claim: "RED4ext is split into two separate projects: `RED4ext` itself (the loader, responsible only
7
+ for managing plugins) and `RED4ext.SDK` (the reversed types/helpers used to extend the engine,
8
+ usable independently); a new plugin should depend only on `RED4ext.SDK`, not on the `RED4ext`
9
+ loader project."
10
+ status: community
11
+ source: WopsS/RED4ext@c52c8d8 README.md:16-21, section "About this library"
12
+ tags:
13
+ - red4ext
14
+ - sdk
15
+ - loader
16
+ - project-structure
17
+ - id: cp2077.red4ext.plugins.three-required-exports
18
+ claim: "A RED4ext plugin DLL must export three `RED4EXT_C_EXPORT` functions: `Supports() ->
19
+ uint32_t` (the plugin's supported API version, e.g. `RED4EXT_API_VERSION_LATEST`),
20
+ `Query(RED4ext::PluginInfo*)` (fills in name, author, `version`, `runtime` and `sdk` fields)
21
+ and `Main(RED4ext::PluginHandle, RED4ext::EMainReason, const RED4ext::Sdk*)` (the entry point,
22
+ called for both Load and Unload reasons)."
23
+ status: community
24
+ source: CDPR-Modding-Documentation/Red4Ext-Wiki/mod-developers/creating-a-plugin.md, section
25
+ "Exported functions" and the worked "Example"
26
+ tags:
27
+ - red4ext
28
+ - plugin
29
+ - exports
30
+ - supports
31
+ - query
32
+ - main
33
+ - id: cp2077.red4ext.plugins.runtime-field-pins-game-version
34
+ claim: "`PluginInfo::runtime`, set inside a plugin's `Query` function, controls which game version
35
+ the plugin will load against: an explicit value like `1.21` means RED4ext loads the plugin
36
+ only when the running game's version is exactly `1.21`; setting it to `RED4EXT_RUNTIME_LATEST`
37
+ (the recommended default) targets whatever the latest game version the installed SDK defines
38
+ is; `RED4EXT_RUNTIME_INDEPENDENT` opts out of the version check entirely when the plugin only
39
+ uses RED4ext as a loader."
40
+ status: community
41
+ source: CDPR-Modding-Documentation/Red4Ext-Wiki/mod-developers/creating-a-plugin.md, warning hint
42
+ under "Query"
43
+ tags:
44
+ - red4ext
45
+ - plugin
46
+ - runtime
47
+ - version-gate
48
+ - plugininfo
49
+ detail: 'A plugin whose `runtime` is pinned to an old exact version stops being loaded after a game
50
+ update unless it is rebuilt with a new pin or switched to `RED4EXT_RUNTIME_LATEST`. Checked
51
+ against the source (2026-09-08): the page says only "it would not be loaded" — whether that is
52
+ reported to the user (red4ext.log line, dialog, nothing at all) is not stated there, so do not
53
+ promise a silent failure either way.'
54
+ - id: cp2077.red4ext.plugins.main-return-false-triggers-immediate-unload
55
+ claim: If a plugin's `Main` entry point returns `false` in response to a `Load` reason, RED4ext
56
+ immediately sends it an `Unload` notification and unloads the plugin; however, if the
57
+ `Load`-handling code throws an exception instead of returning `false`, the plugin does NOT
58
+ receive the `Unload` notification.
59
+ status: community
60
+ source: CDPR-Modding-Documentation/Red4Ext-Wiki/mod-developers/creating-a-plugin.md, section "Main >
61
+ Remarks"
62
+ tags:
63
+ - red4ext
64
+ - plugin
65
+ - main
66
+ - unload
67
+ - exception
68
+ - failure-mode
69
+ - id: cp2077.red4ext.plugins.main-called-before-memory-allocators-ready
70
+ claim: A plugin's `Main` function is called before RED4ext's memory allocators are initialized; a
71
+ plugin that needs to touch the game's RTTI system (e.g. call functions) from startup must
72
+ instead register a custom game state and defer that work to when the RTTI system is ready,
73
+ rather than doing it directly in `Main`.
74
+ status: community
75
+ source: CDPR-Modding-Documentation/Red4Ext-Wiki/mod-developers/creating-a-plugin.md, warning under
76
+ "Main"
77
+ tags:
78
+ - red4ext
79
+ - plugin
80
+ - main
81
+ - initialization-order
82
+ - rtti
83
+ detail: "RELATED: this is the reason custom-game-states.md exists — its
84
+ `OnEnter`/`OnUpdate`/`OnExit` state callbacks are the documented way to hook a later point in
85
+ the game's life cycle than `Main` provides."
86
+ - id: cp2077.red4ext.plugins.install-paths-and-logs
87
+ claim: RED4ext itself installs by extracting into the game's root directory and logs to
88
+ `<game_directory>/red4ext/logs/red4ext.log`; a plugin installs into
89
+ `<game_directory>/red4ext/plugins` (or a named sub-directory there) and its load status is
90
+ checked in `<game_directory>/red4ext/logs/game.log`.
91
+ status: community
92
+ source: CDPR-Modding-Documentation/Red4Ext-Wiki/getting-started/installing-red4ext.md and
93
+ getting-started/installing-a-plugin.md
94
+ tags:
95
+ - red4ext
96
+ - install-path
97
+ - log-file
98
+ - plugins-directory
99
+ - id: cp2077.red4ext.plugins.per-plugin-log-file-created-lazily
100
+ claim: RED4ext's SDK gives every plugin its own logger (`aSdk->logger`, with `Trace`/`TraceF`
101
+ methods shown in the docs); the log file named after the plugin is only created in
102
+ `<game_directory>/red4ext/logs` the first time that plugin actually logs a message, not at
103
+ load time unconditionally.
104
+ status: community
105
+ source: CDPR-Modding-Documentation/Red4Ext-Wiki/mod-developers/logging.md
106
+ tags:
107
+ - red4ext
108
+ - logging
109
+ - plugin
110
+ - lazy-file-creation
111
+ - id: cp2077.red4ext.plugins.abi-is-fastcall-x86-64
112
+ claim: A RED4ext plugin must be built for the x86-64 architecture with the `__fastcall` calling
113
+ convention; the SDK provides `RED4EXT_C_EXPORT` (expands to `extern "C"
114
+ __declspec(dllexport)`) and `RED4EXT_CALL` (expands to `__fastcall`) helper macros to export
115
+ functions with the correct linkage and convention.
116
+ status: community
117
+ source: CDPR-Modding-Documentation/Red4Ext-Wiki/mod-developers/creating-a-plugin.md, opening
118
+ paragraph and "Exported functions" intro
119
+ tags:
120
+ - red4ext
121
+ - plugin
122
+ - abi
123
+ - fastcall
124
+ - x86-64
@@ -0,0 +1,245 @@
1
+ game: cyberpunk2077
2
+ topic: redhottools.hotreload
3
+ title: Red Hot Tools hot-reload scope, integrations and version floors
4
+ facts:
5
+ - id: cp2077.redhottools.hotreload.version-floors
6
+ claim: Red Hot Tools' README lists its compatibility as Cyberpunk 2077 2.21, ArchiveXL 1.21.0+,
7
+ Cyber Engine Tweaks 1.35.0+ and redscript 0.5.25+, and its installation step 1 requires
8
+ RED4ext 1.27.0+ before extracting `RedHotTools-x.x.x.zip` into the Cyberpunk 2077 directory.
9
+ status: community
10
+ source: cp2077-red-hot-tools README.md, sections "Getting Started > Compatibility" (game, ArchiveXL,
11
+ CET, redscript) and "Getting Started > Installation" (RED4ext)
12
+ tags:
13
+ - redhottools
14
+ - version-floor
15
+ - archivexl
16
+ - cet
17
+ - redscript
18
+ - red4ext
19
+ detail: 'Source corrected 2026-09-07: RED4ext is under Installation, not Compatibility. Re-verified
20
+ against the master branch (there is no main branch). Framework versions stay in the claim;
21
+ "Cyberpunk 2077 2.21" is the game version this release targets, not an observation date, so
22
+ there is no `verified_on`.'
23
+ - id: cp2077.redhottools.hotreload.core-feature-scope
24
+ claim: "Red Hot Tools' stated features are: \"Inspect game entities and world nodes\"; \"Inspect ink
25
+ layers and widgets (user interface)\"; \"Hot reload archives, scripts and tweaks\"; \"Prevent
26
+ game from starting if scripts compilation fails\"."
27
+ status: community
28
+ source: cp2077-red-hot-tools README.md, opening feature list
29
+ tags:
30
+ - redhottools
31
+ - feature
32
+ - hot-reload
33
+ - compile-guard
34
+ - id: cp2077.redhottools.hotreload.wolvenkit-pack-and-reload-button
35
+ claim: '"WolvenKit: Pack & reload archives from the editor with a press of a button" — packing and
36
+ the hot-reload trigger are one action.'
37
+ status: community
38
+ source: cp2077-red-hot-tools README.md, the integration list under "For greater convenience it
39
+ integrates with other tools"
40
+ tags:
41
+ - redhottools
42
+ - wolvenkit
43
+ - hot-reload
44
+ - archive
45
+ detail: TENSION with two other verified facts in this knowledge base, which are not changed by this.
46
+ cp2077.loadorder.rht-watches-hot-directory-only records that the live depot mount watches
47
+ `archive\pc\hot` ONLY, so a one-button reload presupposes the archive landing there;
48
+ cp2077.process.assetbuild.rht-hot-folder-banned-for-whole-mesh-archives records that
49
+ whole-archive hot ingest of an archive containing a mounted weapon mesh explodes geometry and
50
+ must be deployed cold. The README states neither caveat, so a scaffold should not offer
51
+ pack-and-reload for a mesh-carrying archive on the strength of this fact alone.
52
+ - id: cp2077.redhottools.hotreload.vscode-extension-reload-commands
53
+ claim: "\"With extension installed, when editing scripts or tweaks files in VS Code, you'll get new
54
+ editor commands in the menu to hot reload the scripts or tweaks. As any other command they can
55
+ also be bound to hotkeys.\" The extension is installed by dragging `red-hot-vscode-x.x.x.vsix`
56
+ onto the VS Code extension bar."
57
+ status: community
58
+ source: cp2077-red-hot-tools README.md, section "Visual Studio Code" and "Getting Started >
59
+ Installation" (optional step 4)
60
+ tags:
61
+ - redhottools
62
+ - vscode
63
+ - hot-reload
64
+ - hotkey
65
+ detail: 'Corrected 2026-09-07: the README says "extension bar", not "extensions bar".'
66
+ - id: cp2077.redhottools.hotreload.cet-menu-integration
67
+ claim: '"Cyber Engine Tweaks: Reload assets using in-game menu and inspect world nodes and entities"
68
+ — available with the optional CET UI, installed by extracting `RedHotTools-x.x.x-Overlay.zip`
69
+ into the Cyberpunk 2077 directory.'
70
+ status: community
71
+ source: cp2077-red-hot-tools README.md, the integration list under "For greater convenience it
72
+ integrates with other tools" and "Getting Started > Installation" (optional step 3)
73
+ tags:
74
+ - redhottools
75
+ - cet
76
+ - in-game-menu
77
+ - inspect
78
+ - id: cp2077.redhottools.hotreload.optional-artifacts-are-separate-zips
79
+ claim: 'Three separate artifacts ship: `RedHotTools-x.x.x.zip` (the base plugin, installation step
80
+ 2), `RedHotTools-x.x.x-Overlay.zip` (the CET UI) and `red-hot-vscode-x.x.x.vsix` (the VS Code
81
+ extension). The README marks the latter two steps "_(Optional)_".'
82
+ status: community
83
+ source: cp2077-red-hot-tools README.md, section "Getting Started > Installation"
84
+ tags:
85
+ - redhottools
86
+ - installation
87
+ - optional-dependency
88
+ - id: cp2077.redhottools.hotreload.struct-fields-not-reinitialized
89
+ claim: 'Documented limitation: "Struct fields are not reinitialized (if you change the fields of a
90
+ struct and an instance of that struct exists during hot reload, this can lead to issues)."'
91
+ status: community
92
+ source: cp2077-red-hot-tools README.md, section "Limitations"
93
+ tags:
94
+ - redhottools
95
+ - struct
96
+ - hot-reload
97
+ - limitation
98
+ - id: cp2077.redhottools.hotreload.new-scriptable-system-handler-needs-session-reload
99
+ claim: "Documented limitation: \"Handlers for scriptable systems requests aren't registered on
100
+ scripts load, if you add a new handler you have to reload the game session.\""
101
+ status: community
102
+ source: cp2077-red-hot-tools README.md, section "Limitations"
103
+ tags:
104
+ - redhottools
105
+ - scriptablesystem
106
+ - handler
107
+ - hot-reload
108
+ - limitation
109
+ detail: "Corrected 2026-09-07: the previous claim inverted the README's mechanism, stating that
110
+ handlers \"are registered only at scripts-load time\" where the README says they are NOT
111
+ registered on scripts load. The practical consequence — a new handler needs a full session
112
+ reload, not just a script reload — is the same either way, but the stated mechanism was
113
+ wrong."
114
+ - id: cp2077.redhottools.hotreload.hot-folder-moves-into-mods
115
+ claim: "Placing an `.archive` inside `archive/pc/hot` (not `archive/pc/mod/hot` as the CDPR docs
116
+ page says) is not a permanent location: RHT's ArchiveWatcher moves a new file into
117
+ `archive/pc/mod` (an existing archive of the same name is replaced in place, in
118
+ `archive/pc/mod` or `mods/*/archives`), unloads and reloads the game archives, resets the
119
+ resource cache and reloads archive extensions; the `hot` folder appearing empty right after a
120
+ drop is expected, not a failure."
121
+ status: verified
122
+ verified_on: "2.31"
123
+ source: CDPR-Modding-Documentation/Cyberpunk-Modding-Docs
124
+ for-mod-creators-theory/modding-tools/redhottools/rht-hot-reload.md, sections "The theory" and
125
+ "But the folder is always empty!"
126
+ tags:
127
+ - redhottools
128
+ - hot-reload
129
+ - hot-folder
130
+ - archive
131
+ detail: 'RELATED: sharpens cp2077.redhottools.hotreload.wolvenkit-pack-and-reload-button and
132
+ cp2077.loadorder.rht-watches-hot-directory-only — "watches" means RHT actively relocates the
133
+ file out of `hot`, it does not reload the archive in place.'
134
+ - id: cp2077.redhottools.hotreload.already-spawned-instances-unaffected
135
+ claim: Hot Reload invalidates the game's cached resources and will apply changes to newly-spawned
136
+ content, but anything already spawned in the world keeps using what it loaded originally; the
137
+ page's documented ways to force an already-spawned instance to pick up a change are (in
138
+ decreasing reliability) loading a save, spawning and equipping a new copy of the item via CET,
139
+ despawning/respawning the entity, respawning the UI widget, or unequipping and re-equipping
140
+ the item.
141
+ status: community
142
+ source: CDPR-Modding-Documentation/Cyberpunk-Modding-Docs
143
+ for-mod-creators-theory/modding-tools/redhottools/rht-hot-reload.md, section "But my changes
144
+ don't show up!"
145
+ tags:
146
+ - redhottools
147
+ - hot-reload
148
+ - limitation
149
+ - cache-invalidation
150
+ - id: cp2077.redhottools.hotreload.archive-reload-is-automatic-xl-reload-is-manual
151
+ claim: RHT's overlay window ("Hot Reload", Archives tab) has one manual button, "Reload extensions",
152
+ which re-runs ArchiveXL's extension discovery over `archive/pc/mod` and `mods/*/archives` and
153
+ nothing else; `.archive` files are reloaded automatically by the hot-folder watcher, and that
154
+ automatic path already ends with an extension reload of its own, so the button is only needed
155
+ after editing an `.xl` without dropping an archive. The button gives no feedback in the
156
+ window; ArchiveXL.log ("Discovering archive extensions..." then one "Loading ..." line per
157
+ .xl) is where it shows.
158
+ status: verified
159
+ verified_on: "2.31"
160
+ source: CDPR-Modding-Documentation/Cyberpunk-Modding-Docs
161
+ for-mod-creators-theory/modding-tools/redhottools/rht-hot-reload.md, section "The CET overlay
162
+ > Archives"
163
+ tags:
164
+ - redhottools
165
+ - hot-reload
166
+ - cet-overlay
167
+ - .xl
168
+ - archive
169
+ detail: "Direct quote: \"Pushing the button will not reload `.archive` files.\" The page adds that
170
+ RHT does that automatically by watching the `hot` folder. RELATED: this is the asymmetry that
171
+ cp2077.archivexl.manifest-registers-at-init describes from ArchiveXL's side (archives need a
172
+ restart to register, `.xl` entries do not) — RHT's hot-reload path narrows but does not
173
+ eliminate that asymmetry, since it still needs a manual button press for `.xl` changes
174
+ specifically."
175
+ - id: cp2077.redhottools.hotreload.triggers-are-sentinel-files
176
+ claim: "Red Hot Tools' three hot-reload triggers are file drops, not console or overlay actions:
177
+ creating an empty `red4ext/plugins/RedHotTools/.hot-scripts` makes the ScriptWatcher delete it
178
+ and run `ScriptLoader::ReloadScripts()`; writing anything to
179
+ `red4ext/plugins/RedHotTools/.hot-tweaks` makes the TweakWatcher delete it and call
180
+ `TweakXL.Reload()` on the next main-loop tick; and copying an `.archive` (with any `.xl`) into
181
+ `archive/pc/hot` makes the ArchiveWatcher ingest it. ModWright can therefore drive all three
182
+ through its own file-writing transport (deploy --reload apply)."
183
+ status: inferred
184
+ source: psiberx/cp2077-red-hot-tools src/App/Environment.hpp (the sentinel paths) and
185
+ src/App/Scripts/ScriptWatcher.cpp, src/App/Tweaks/TweakWatcher.cpp,
186
+ src/App/Archives/ArchiveWatcher.cpp (the watchers), read 2026-09-13; the support/vscode
187
+ extension issues the same triggers
188
+ tags:
189
+ - redhottools
190
+ - hot-reload
191
+ - sentinel
192
+ - hot-scripts
193
+ - hot-tweaks
194
+ - hot-folder
195
+ - deploy
196
+ detail: 'Status: the mechanism is VERIFIED from RHT source; its EFFECT in the engine splits by
197
+ trigger, per an in-game test (2026-09-13, RHT 1.3.0.33690, on a live game): the
198
+ `archive/pc/hot` half is VERIFIED WORKING (RHT moved the archive out and logged "Archives
199
+ reload completed" after the trigger — see the archives read-back and
200
+ hot-folder-moves-into-mods); the `.hot-tweaks` half is VERIFIED INEFFECTIVE — the sentinel is
201
+ deleted/consumed but no TweakXL.Reload follows (see hot-tweaks-consumed-without-reload-1.3.0);
202
+ `.hot-scripts` is still untested. So "ModWright can drive all three" holds only for archives;
203
+ tweaks must go through TweakXL.Reload() via cp2077.lua.eval. RELATED:
204
+ cp2077.redhottools.hotreload.hot-folder-moves-into-mods (the archive half) and
205
+ cp2077.process.assetbuild.rht-hot-folder-banned-for-whole-mesh-archives.'
206
+ - id: cp2077.redhottools.hotreload.hot-tweaks-consumed-without-reload-1.3.0
207
+ claim: "In Red Hot Tools 1.3.0.33690, dropping `red4ext/plugins/RedHotTools/.hot-tweaks` is consumed
208
+ (RHT deletes the file) but does NOT drive a TweakXL reload: after an edited `r6/tweaks` file
209
+ was deployed and `.hot-tweaks` written and deleted, TweakXL.log showed no import after the
210
+ launch-time one and the changed flat was unchanged in TweakDB. A direct `TweakXL.Reload()`
211
+ (via cp2077.lua.eval) on the same session then DID apply the change. So the working tweak
212
+ hot-reload path is `TweakXL.Reload()` through the bridge, not the `.hot-tweaks` sentinel."
213
+ status: verified
214
+ verified_on: "2.31"
215
+ source: ModWright field verification
216
+ tags:
217
+ - redhottools
218
+ - hot-tweaks
219
+ - tweakxl
220
+ - hot-reload
221
+ - negative-result
222
+ detail: The `archive/pc/hot` watcher works in the same build and session, so this is specific to the
223
+ `.hot-tweaks` path, not a dead RHT. deploy --reload apply should reload tweaks via
224
+ TweakXL.Reload() through the bridge rather than (or in addition to) the sentinel; the sentinel
225
+ is kept only because it is harmless and may work in other RHT builds.
226
+ - id: cp2077.redhottools.hotreload.presence-not-version-floor
227
+ claim: "Whether the hot-reload path is available is decided by presence, not a version floor: the
228
+ `RedHotTools.dll` is installed AND the current `RedHotTools*.log` carries this launch's
229
+ `[ArchiveWatcher] Watching` line. `scc.exe` carries no redscript version (gap 12), so a floor
230
+ check on redscript cannot be evaluated and would refuse a working install; the README's
231
+ framework floors stay an advisory only."
232
+ status: verified
233
+ verified_on: "2.31"
234
+ source: ModWright field verification
235
+ tags:
236
+ - redhottools
237
+ - presence-detection
238
+ - version-floor
239
+ - archivewatcher
240
+ - deploy
241
+ detail: "Supersedes the reliance on cp2077.redhottools.hotreload.version-floors as a gate: those
242
+ framework versions are reported for information, but ModWright's reload classifier
243
+ (src/core/deploy/reload.ts detectRedHotTools) now gates the RHT-dependent rows on the DLL +
244
+ the watcher line instead. RHT 1.3.0 is installed and current while the README floors read
245
+ 2.21, so a floor check would have refused it."
@@ -0,0 +1,76 @@
1
+ game: cyberpunk2077
2
+ topic: redscript.compile-log
3
+ title: redscript's startup log line, log/script/cache file locations
4
+ facts:
5
+ - id: cp2077.redscript.compile-log.startup-log-line-format
6
+ claim: On every compile, `scc` (the redscript compiler) logs `"Running REDscript {version}"` via
7
+ `log::info!`, where `{version}` is `env!("CARGO_PKG_VERSION")` — the compiling crate's own
8
+ Cargo package version, not the game's version.
9
+ status: verified
10
+ source: jac3km4/redscript@3ca666c crates/scc/core/src/lib.rs:34 (`log::info!("Running REDscript {}",
11
+ env!("CARGO_PKG_VERSION"));`, inside `pub fn compile`)
12
+ tags:
13
+ - redscript
14
+ - compile-log
15
+ - version
16
+ - startup
17
+ detail: "At the snapshot under refs/, the workspace `Cargo.toml` pins `version =
18
+ \"1.0.0-preview.22\"` (Cargo.toml:21), so a log parser matching this exact source tree would
19
+ see \"Running REDscript 1.0.0-preview.22\" — but the log line itself always reflects whatever
20
+ version the installed `scc` binary was built from, not a fixed string. Offline check
21
+ 2026-09-09: the installed build does NOT write this line. `engine/tools/scc.exe` and
22
+ `scc_lib.dll` (both dated 2025-08-28, no PE FileVersion resource) produce a
23
+ `r6/logs/redscript_rCURRENT.log` whose first line is `[INFO - Wed, 9 Sep 2026 07:52:43 -0700]
24
+ Compiling files in <game>\\r6\\scripts:` followed by one `.reds` path per line, and no line
25
+ containing \"REDscript\" appears anywhere in the 509-line log; the dated copies from
26
+ 2026-09-08 have the same shape. So the claim holds for the cited source tree
27
+ (1.0.0-preview.22) but not for every shipped `scc`; the 2025-08-28 build predates or omits the
28
+ banner. Consequence for ModWright: `check_compat`'s banner fallback
29
+ (src/surfaces/cyberpunk2077/compat.ts) cannot read a version on this install and reports
30
+ redscript undetermined, so every framework floor on redscript is a warning rather than a
31
+ check."
32
+ - id: cp2077.redscript.compile-log.log-file-location
33
+ claim: On Windows, a successful redscript setup is confirmed by log output appearing in `Cyberpunk
34
+ 2077/r6/logs/redscript_rCURRENT.log`.
35
+ status: community
36
+ source: jac3km4/redscript@3ca666c README.md:15, section "Windows"
37
+ tags:
38
+ - redscript
39
+ - log-file
40
+ - windows
41
+ - id: cp2077.redscript.compile-log.default-scripts-dir-is-r6-scripts
42
+ claim: "`scc`'s default script source directory, relative to the game's root directory, is
43
+ `r6/scripts` (`R6_DIR` = \"r6\", `SCRIPTS_DIR` = \"scripts\"); additional script paths can be
44
+ layered on top of this default via `SccSettings`, but the default is always included."
45
+ status: verified
46
+ source: jac3km4/redscript@3ca666c crates/scc/core/src/settings.rs:11-13 (the `R6_DIR`/`SCRIPTS_DIR`
47
+ constants) and :59-66 (`default_scripts_dir_path` joins `root_dir/r6/scripts`, and
48
+ `script_paths()` always yields it first before any `additional_script_paths`)
49
+ tags:
50
+ - redscript
51
+ - r6-scripts
52
+ - layout
53
+ - compiler
54
+ - id: cp2077.redscript.compile-log.compiled-cache-bundle-path
55
+ claim: "`scc` writes its compiled script bundle by default to `r6/cache/final.redscripts` (relative
56
+ to the game root), with a backup of the previous bundle kept alongside as
57
+ `final.redscripts.bk`; a custom output cache file path can override this default."
58
+ status: verified
59
+ source: jac3km4/redscript@3ca666c crates/scc/core/src/settings.rs:8-9
60
+ (`BUNDLE_FILE`/`BACKUP_BUNDLE_FILE` constants), :55-57 (`default_cache_file_path` joining
61
+ `root_dir/r6/cache/final.redscripts`) and :80-85 (`default_backup_cache_file_path` joining
62
+ `root_dir/r6/cache/final.redscripts.bk`)
63
+ tags:
64
+ - redscript
65
+ - cache
66
+ - final.redscripts
67
+ - layout
68
+ - id: cp2077.redscript.compile-log.user-hints-dir
69
+ claim: "`scc` reads user-authored compiler hints from `r6/config/redsUserHints` under the game root."
70
+ status: verified
71
+ source: jac3km4/redscript@3ca666c crates/scc/core/src/settings.rs:15 (`USER_HINTS_DIR` =
72
+ "redsUserHints") and :48-53 (`user_hints_dir()` joins `root_dir/r6/config/redsUserHints`)
73
+ tags:
74
+ - redscript
75
+ - user-hints
76
+ - layout
@@ -0,0 +1,118 @@
1
+ game: cyberpunk2077
2
+ topic: redscript.modules
3
+ title: redscript's module declaration, import forms and item qualifiers, from the parser grammar
4
+ facts:
5
+ - id: cp2077.redscript.modules.module-declaration-is-optional-dotted-path
6
+ claim: A `.reds` file's `module` declaration is optional and, when present, takes a dotted path of
7
+ one or more identifiers (e.g. `module Test.Module`); the parser accepts a file with no
8
+ `module` line at all (the module path is `Option`-typed in the grammar) — module scoping is
9
+ not mandatory for every script file.
10
+ status: verified
11
+ source: 'jac3km4/redscript@3ca666c crates/syntax/parser/src/parser.rs:123-140 (the `module` parser:
12
+ `just(Token::Ident("module"))` followed by a dot-separated identifier path with
13
+ `.at_least(1)`, wrapped in `.or_not()`)'
14
+ tags:
15
+ - redscript
16
+ - module
17
+ - parser
18
+ - grammar
19
+ detail: Confirmed against the formatter's own test fixture
20
+ crates/syntax/formatter/tests/data/module.reds, whose first non-blank line is `module
21
+ Test.Module` followed by an `import Dummy.*` line and then item declarations — matching the
22
+ grammar's module-then-imports-then-items shape.
23
+ - id: cp2077.redscript.modules.three-import-forms
24
+ claim: "redscript's import grammar accepts three forms of a dotted path after `import`: `import
25
+ A.B.C` (exact import of a single path), `import A.B.*` (wildcard import of everything under a
26
+ path) and `import A.B.{X, Y}` (a selector list of specific names under a path); the AST
27
+ records these as `Import::Exact`, `Import::All` and `Import::Select` respectively."
28
+ status: verified
29
+ source: jac3km4/redscript@3ca666c crates/syntax/parser/src/parser/item.rs:196-211 (the `import`
30
+ parser building `Import::Select(path, idents)` at :207, `Import::All(path)` at :208 or
31
+ `Import::Exact(path)` at :209 depending on whether an import selector follows the path)
32
+ tags:
33
+ - redscript
34
+ - import
35
+ - module
36
+ - parser
37
+ - grammar
38
+ - id: cp2077.redscript.modules.item-qualifier-keywords
39
+ claim: "redscript's item-qualifier keywords, i.e. the modifiers a class/function/field declaration
40
+ can carry before its body, are: `abstract`, `cb` (marks a callback), `const`, `exec`, `final`,
41
+ `importonly`, `native`, `persistent`, `quest` and `static` — each is parsed into a distinct
42
+ `ItemQualifiers` bit flag."
43
+ status: verified
44
+ source: jac3km4/redscript@3ca666c crates/syntax/parser/src/parser/item.rs:240-249, function
45
+ `item_qualifier` (the `select!` match listing all ten keyword-to-flag pairs)
46
+ tags:
47
+ - redscript
48
+ - qualifier
49
+ - keyword
50
+ - grammar
51
+ - id: cp2077.redscript.modules.exec-qualifier-sets-is-exec-flag
52
+ claim: The `exec` qualifier on a global function is threaded through the compiler as a boolean
53
+ `is_exec` flag on the function's resolved metadata
54
+ (`.with_is_exec(qs.take_flag(ast::ItemQualifiers::EXEC))`); the parser and frontend resolution
55
+ stage both handle `exec` as a distinct qualifier from `static`/`native`/etc., but neither of
56
+ those two source locations documents what `is_exec` changes about how the function can be
57
+ invoked (e.g. from the game's console) — that runtime behavior is not covered by this source.
58
+ status: verified
59
+ source: jac3km4/redscript@3ca666c crates/syntax/parser/src/parser/item.rs:243 (`Token::Ident("exec")
60
+ => ItemQualifiers::EXEC`); crates/compiler/frontend/src/stages/resolution.rs:816
61
+ (`.with_is_exec(qs.take_flag(ast::ItemQualifiers::EXEC))`, building `FreeFunctionFlags`)
62
+ tags:
63
+ - redscript
64
+ - exec
65
+ - qualifier
66
+ - gap
67
+ detail: "Left deliberately narrow per the transcription-lesson rule: the compiler plumbing for
68
+ `exec` is confirmed, but its actual observable effect (console-exposure, if any) is not
69
+ asserted here because neither cited file states it."
70
+ - id: cp2077.redscript.modules.duplicate-global-func-crashes-the-script-load
71
+ claim: "Two module-less global functions with the same name and the same parameter types but
72
+ different parameter names and return types (`Mod_Possess(target: ref<GameObject>) -> Bool` in
73
+ one file, `Mod_Possess(body: ref<GameObject>) -> String` in another) compile: redscript
74
+ reports \"Output successfully saved\" and RED4ext registers the blob. The 2.31 engine then
75
+ crashes at launch, right after \"Scripts blob path was updated\", with an access violation
76
+ reading 0x28 at exe+0x5C61A4. The crashing routine (fn_5C60F8) copies one function definition
77
+ onto another. It looks up each parameter by name in the other definition's parameter array
78
+ (fn_5C5B88) and reads the result's +0x28 unchecked; the missing name was \"body\" (hash
79
+ CD4DE79BC6C93295 in rdx)."
80
+ status: verified
81
+ verified_on: "2.31"
82
+ source: ModWright field verification
83
+ tags:
84
+ - redscript
85
+ - global
86
+ - module-less
87
+ - duplicate
88
+ - crash
89
+ - script-load
90
+ detail: The hash was matched by FNV-1a 64 against every identifier in the deployed r6/scripts tree;
91
+ "body" was the only match. A validator rule (cp2077.history.redscript-duplicate-global-func)
92
+ reports the shape before a launch.
93
+ - id: cp2077.redscript.modules.module-name-with-a-space-does-not-compile
94
+ claim: "A module declaration must be a dotted identifier path: `module FTR Settings` fails the whole
95
+ script compile with a syntax error at the space, and the game starts with no mod scripts
96
+ active."
97
+ status: verified
98
+ verified_on: "2.31"
99
+ source: ModWright field verification
100
+ tags:
101
+ - redscript
102
+ - module
103
+ - syntax
104
+ - scaffold
105
+ related:
106
+ - cp2077.redscript.modules.module-declaration-is-optional-dotted-path
107
+ - id: cp2077.redscript.modules.scriptable-system-registered-under-module-qualified-name
108
+ claim: A ScriptableSystem declared inside `module M` is registered in the scriptable systems
109
+ container under its module-qualified name `M.<Class>`; looking it up by the bare class name
110
+ finds nothing.
111
+ status: verified
112
+ verified_on: "2.31"
113
+ source: ModWright field verification
114
+ tags:
115
+ - redscript
116
+ - module
117
+ - scriptablesystem
118
+ - cet