universal-game-modder 0.1.4

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 (92) hide show
  1. package/ACCEPTABLE_USE.md +49 -0
  2. package/CHANGELOG.md +119 -0
  3. package/LICENSE +21 -0
  4. package/LICENSE-EULA.md +62 -0
  5. package/README.md +162 -0
  6. package/VERIFICATION.md +132 -0
  7. package/dist/backends/child-pool.js +91 -0
  8. package/dist/backends/mcp-child.js +102 -0
  9. package/dist/backends/mcp-child.js.map +1 -0
  10. package/dist/core/config.d.ts +10 -0
  11. package/dist/core/config.js +48 -0
  12. package/dist/core/config.js.map +1 -0
  13. package/dist/core/engine-detector.d.ts +13 -0
  14. package/dist/core/engine-detector.js +247 -0
  15. package/dist/core/engine-detector.js.map +1 -0
  16. package/dist/core/event-bus.js +18 -0
  17. package/dist/core/file-classifier.js +394 -0
  18. package/dist/core/model-db.js +517 -0
  19. package/dist/core/model-db.js.map +1 -0
  20. package/dist/core/router.d.ts +6 -0
  21. package/dist/core/router.js +143 -0
  22. package/dist/core/router.js.map +1 -0
  23. package/dist/core/session.js +114 -0
  24. package/dist/decoders/audio-export.js +57 -0
  25. package/dist/decoders/mesh-export.d.ts +20 -0
  26. package/dist/decoders/mesh-export.js +174 -0
  27. package/dist/decoders/mesh-export.js.map +1 -0
  28. package/dist/decoders/native/disassembler.js +85 -0
  29. package/dist/decoders/native/disassembler.js.map +1 -0
  30. package/dist/decoders/png-encode.d.ts +17 -0
  31. package/dist/decoders/png-encode.js +33 -0
  32. package/dist/decoders/texture-decode.js +278 -0
  33. package/dist/decoders/texture-decode.js.map +1 -0
  34. package/dist/decoders/unity/audioclip.d.ts +55 -0
  35. package/dist/decoders/unity/audioclip.js +87 -0
  36. package/dist/decoders/unity/audioclip.js.map +1 -0
  37. package/dist/decoders/unity/binary-reader.d.ts +45 -0
  38. package/dist/decoders/unity/binary-reader.js +141 -0
  39. package/dist/decoders/unity/binary-reader.js.map +1 -0
  40. package/dist/decoders/unity/mesh.js +198 -0
  41. package/dist/decoders/unity/mesh.js.map +1 -0
  42. package/dist/decoders/unity/ress-reader.d.ts +33 -0
  43. package/dist/decoders/unity/ress-reader.js +82 -0
  44. package/dist/decoders/unity/ress-reader.js.map +1 -0
  45. package/dist/decoders/unity/serialized-file.d.ts +65 -0
  46. package/dist/decoders/unity/serialized-file.js +144 -0
  47. package/dist/decoders/unity/texture2d.js +185 -0
  48. package/dist/decoders/unity/vertex-data.d.ts +54 -0
  49. package/dist/decoders/unity/vertex-data.js +174 -0
  50. package/dist/decoders/unity/vertex-data.js.map +1 -0
  51. package/dist/index.d.ts +1 -0
  52. package/dist/index.js +23 -0
  53. package/dist/server.d.ts +1 -0
  54. package/dist/server.js +66 -0
  55. package/dist/tools/decode-tools.d.ts +29 -0
  56. package/dist/tools/decode-tools.js +441 -0
  57. package/dist/tools/delegates/jar-editor.d.ts +2 -0
  58. package/dist/tools/delegates/jar-editor.js +276 -0
  59. package/dist/tools/delegates/unity-decompiler.d.ts +2 -0
  60. package/dist/tools/delegates/unity-decompiler.js +291 -0
  61. package/dist/tools/delegates/unreal-assets.d.ts +2 -0
  62. package/dist/tools/delegates/unreal-assets.js +122 -0
  63. package/dist/tools/detection-tools.d.ts +2 -0
  64. package/dist/tools/detection-tools.js +164 -0
  65. package/dist/tools/detection-tools.js.map +1 -0
  66. package/dist/tools/index.d.ts +8 -0
  67. package/dist/tools/index.js +30 -0
  68. package/dist/tools/index.js.map +1 -0
  69. package/dist/tools/native/index.d.ts +2 -0
  70. package/dist/tools/native/index.js +1201 -0
  71. package/dist/tools/native-comprehension-tools.js +298 -0
  72. package/dist/tools/native-comprehension-tools.js.map +1 -0
  73. package/dist/tools/unpack-tools.d.ts +2 -0
  74. package/dist/tools/unpack-tools.js +382 -0
  75. package/dist/tools/workflow-tools.d.ts +2 -0
  76. package/dist/tools/workflow-tools.js +434 -0
  77. package/dist/utils/logger.d.ts +11 -0
  78. package/dist/utils/logger.js +49 -0
  79. package/dist/utils/logger.js.map +1 -0
  80. package/dist/utils/path-utils.d.ts +15 -0
  81. package/dist/utils/path-utils.js +24 -0
  82. package/dist/utils/path-utils.js.map +1 -0
  83. package/dist/utils/steam-finder.d.ts +8 -0
  84. package/dist/utils/steam-finder.js +32 -0
  85. package/dist/web/web-server.d.ts +1 -0
  86. package/dist/web/web-server.js +369 -0
  87. package/licenses/THIRD-PARTY-NOTICES.md +35 -0
  88. package/llms-install.md +34 -0
  89. package/package.json +69 -0
  90. package/server.json +20 -0
  91. package/setup.ps1 +34 -0
  92. package/ugm.config.json +9 -0
@@ -0,0 +1,298 @@
1
+ /**
2
+ * native-comprehension-tools.ts — PR-3.1 (V3 "Native Comprehension", the moat).
3
+ *
4
+ * The engine's FIRST sight of native code. Two tools:
5
+ * - disassemble_range(binary_path, rva, length): decode an arbitrary byte range.
6
+ * - disassemble_function(binary_path, rva): decode from an entry RVA to the first
7
+ * terminal (ret/jmp-tail) — a linear-sweep function bound (PR-3.1 heuristic;
8
+ * CFG-accurate bounds arrive with the call-graph in PR-3.2).
9
+ *
10
+ * Disassembly is capstone-wasm (chosen by the 3-way probe; see .forge/pr_log.md).
11
+ * PE section/RVA resolution is a small self-contained parser here (mirrors the
12
+ * proven mko/disasm_at.py: RVA -> section -> file offset -> VA = imageBase + rva).
13
+ *
14
+ * RAILS (honored — protected_behaviors):
15
+ * - READ-ONLY on the game binary: the only fs call against it is readFileSync.
16
+ * - The ONLY writes are optional rows into The Model (.autopsy.db), and each is
17
+ * read back (verify-after-write). Pass db_path/game_path to enable writeback;
18
+ * omit them to get pure read-only disassembly with no side effects at all.
19
+ * - PROVENANCE: a byte-level decoded instruction is 'verified'. A function whose
20
+ * extent is a linear-sweep heuristic (not yet CFG-proven) is 'inferred'.
21
+ * - [VERIFIED]/[INFERRED] discipline: instructions are verified facts; the
22
+ * function's *boundary* in PR-3.1 is inferred and tagged as such.
23
+ */
24
+ import { existsSync, readFileSync } from 'fs';
25
+ import { basename, join } from 'path';
26
+ import Database from 'better-sqlite3';
27
+ import { AutopsyModel } from '../core/model-db.js';
28
+ import { disassembleX64, capstoneVersion } from '../decoders/native/disassembler.js';
29
+ /** Parse just enough PE header to resolve RVAs. Read-only; throws on non-PE. */
30
+ function parsePe(buf) {
31
+ if (buf.length < 64 || buf.readUInt16LE(0) !== 0x5a4d)
32
+ throw new Error('not a PE (missing MZ)');
33
+ const peOff = buf.readUInt32LE(60);
34
+ if (peOff + 24 > buf.length || buf.readUInt32LE(peOff) !== 0x00004550)
35
+ throw new Error('not a PE (bad signature)');
36
+ const coff = peOff + 4;
37
+ const nSec = buf.readUInt16LE(coff + 2);
38
+ const sizeOpt = buf.readUInt16LE(coff + 16);
39
+ const optOff = coff + 20;
40
+ const magic = buf.readUInt16LE(optOff);
41
+ const is64 = magic === 0x20b;
42
+ const imageBase = is64 ? Number(buf.readBigUInt64LE(optOff + 24)) : buf.readUInt32LE(optOff + 28);
43
+ const secOff = optOff + sizeOpt;
44
+ const sections = [];
45
+ for (let i = 0; i < nSec; i++) {
46
+ const off = secOff + i * 40;
47
+ if (off + 40 > buf.length)
48
+ break;
49
+ sections.push({
50
+ name: buf.subarray(off, off + 8).toString('ascii').replace(/\0+$/, ''),
51
+ vsize: buf.readUInt32LE(off + 8),
52
+ va: buf.readUInt32LE(off + 12),
53
+ rawSize: buf.readUInt32LE(off + 16),
54
+ rawPtr: buf.readUInt32LE(off + 20),
55
+ });
56
+ }
57
+ return { is64, imageBase, sections };
58
+ }
59
+ /** The section containing an RVA, or null. */
60
+ function sectionForRva(pe, rva) {
61
+ for (const s of pe.sections) {
62
+ if (rva >= s.va && rva < s.va + Math.max(s.vsize, s.rawSize))
63
+ return s;
64
+ }
65
+ return null;
66
+ }
67
+ /** Resolve an RVA to a file offset using its section. Throws if unmapped. */
68
+ function rvaToOffset(pe, rva, section) {
69
+ return section.rawPtr + (rva - section.va);
70
+ }
71
+ /** Read a bounded, section-clamped code slice for an RVA. Read-only. */
72
+ function readCodeSlice(buf, pe, rva, length) {
73
+ const section = sectionForRva(pe, rva);
74
+ if (!section)
75
+ throw new Error(`RVA 0x${rva.toString(16)} is not inside any PE section`);
76
+ const fileOff = rvaToOffset(pe, rva, section);
77
+ // Clamp to the section's raw data so we never read past it into another section.
78
+ const sectionRawEnd = section.rawPtr + section.rawSize;
79
+ const end = Math.min(fileOff + length, sectionRawEnd, buf.length);
80
+ const bytes = buf.subarray(fileOff, Math.max(fileOff, end));
81
+ return { bytes, runtimeVA: pe.imageBase + rva, section: section.name };
82
+ }
83
+ /** Resolve a db path from explicit db_path or a game_path's default .autopsy dir. */
84
+ function resolveDbPath(dbPath, gamePath) {
85
+ if (dbPath)
86
+ return dbPath;
87
+ if (!gamePath)
88
+ return null;
89
+ const name = basename(gamePath).replace(/[^A-Za-z0-9._-]+/g, '_') || 'game';
90
+ return join(gamePath, '.autopsy', `${name}.autopsy.db`);
91
+ }
92
+ /**
93
+ * Find the binary row id for a given binary path in an existing Model, so we can
94
+ * attach function/xref rows. Returns null if the DB or row isn't present — the
95
+ * tool then reports read-only results without writeback (never invents a binary).
96
+ */
97
+ function lookupBinaryId(dbPath, binaryPath) {
98
+ if (!existsSync(dbPath))
99
+ return null;
100
+ const db = new Database(dbPath, { readonly: true });
101
+ try {
102
+ const norm = binaryPath.replace(/\\/g, '/').toLowerCase();
103
+ const rows = db.prepare('SELECT id, game_id, path FROM binary').all();
104
+ const hit = rows.find((r) => r.path.replace(/\\/g, '/').toLowerCase() === norm);
105
+ return hit ? { gameId: hit.game_id, binaryId: hit.id } : null;
106
+ }
107
+ finally {
108
+ db.close();
109
+ }
110
+ }
111
+ /** True if a mnemonic ends a linear function sweep (PR-3.1 heuristic). */
112
+ function isTerminal(mnemonic) {
113
+ // ret/retf end the function; int3 padding after a ret marks the gap to the next.
114
+ return mnemonic === 'ret' || mnemonic === 'retf' || mnemonic === 'iret' || mnemonic === 'iretd' || mnemonic === 'iretq';
115
+ }
116
+ /** Shape the per-insn JSON. */
117
+ function insnJson(i) {
118
+ return {
119
+ rva: `0x${i.rva.toString(16)}`,
120
+ va: `0x${i.va.toString(16)}`,
121
+ bytes: i.bytes,
122
+ mnemonic: i.mnemonic,
123
+ op_str: i.opStr,
124
+ };
125
+ }
126
+ export function getNativeComprehensionTools() {
127
+ return [
128
+ {
129
+ name: 'disassemble_range',
130
+ description: "Disassemble an arbitrary byte range of a native PE (x86-64) starting at an RVA. Resolves the RVA to its section and file offset, reads ONLY that slice (read-only on the binary), and decodes it with Capstone. Returns the instruction listing. If db_path or game_path is given AND the binary is catalogued in that autopsy DB, the decoded instructions are also summarized into The Model as a 'function' row spanning the range (provenance=verified for the bytes). Pure read-only when no DB is supplied.",
131
+ inputSchema: {
132
+ type: 'object',
133
+ properties: {
134
+ binary_path: { type: 'string', description: 'Path to the PE (.exe/.dll) to disassemble.' },
135
+ rva: { type: 'number', description: 'Relative virtual address to start at (e.g. 0x1000).' },
136
+ length: { type: 'number', description: 'Number of bytes to disassemble (default 256, clamped to the section).' },
137
+ db_path: { type: 'string', description: 'Optional .autopsy.db for writeback.' },
138
+ game_path: { type: 'string', description: 'Optional game dir; its default .autopsy DB is used if db_path is omitted.' },
139
+ },
140
+ required: ['binary_path', 'rva'],
141
+ },
142
+ handler: async (args) => {
143
+ const binaryPath = args.binary_path;
144
+ const rva = args.rva;
145
+ const length = typeof args.length === 'number' ? args.length : 256;
146
+ if (!existsSync(binaryPath))
147
+ return JSON.stringify({ error: `binary not found: ${binaryPath}` }, null, 2);
148
+ const buf = readFileSync(binaryPath); // READ-ONLY
149
+ let pe;
150
+ try {
151
+ pe = parsePe(buf);
152
+ }
153
+ catch (e) {
154
+ return JSON.stringify({ error: `PE parse failed: ${e.message}` }, null, 2);
155
+ }
156
+ if (!pe.is64) {
157
+ return JSON.stringify({ error: 'PR-3.1 supports x86-64 only; this PE is 32-bit (x86). Deferred to a later slice.' }, null, 2);
158
+ }
159
+ let slice;
160
+ try {
161
+ slice = readCodeSlice(buf, pe, rva, length);
162
+ }
163
+ catch (e) {
164
+ return JSON.stringify({ error: e.message }, null, 2);
165
+ }
166
+ const insns = await disassembleX64(slice.bytes, { runtimeVA: slice.runtimeVA, imageBase: pe.imageBase });
167
+ // Optional writeback into The Model.
168
+ const writeback = await maybeWriteFunction(args, binaryPath, rva, insns, slice.bytes.length, 'disassemble_range', false);
169
+ return JSON.stringify({
170
+ binary: basename(binaryPath),
171
+ capstone: await capstoneVersion(),
172
+ section: slice.section,
173
+ start_rva: `0x${rva.toString(16)}`,
174
+ bytes_read: slice.bytes.length,
175
+ insn_count: insns.length,
176
+ writeback,
177
+ instructions: insns.map(insnJson),
178
+ }, null, 2);
179
+ },
180
+ },
181
+ {
182
+ name: 'disassemble_function',
183
+ description: "Disassemble a function starting at an RVA in a native PE (x86-64). Linear sweep from the entry RVA to the first terminal instruction (ret/iret) or max_bytes, whichever comes first — a PR-3.1 boundary heuristic (CFG-accurate bounds arrive with the call-graph in PR-3.2), so the function EXTENT is tagged provenance=inferred while the decoded bytes themselves are verified. Read-only on the binary. Writes a 'function' row into The Model when db_path/game_path is supplied and the binary is catalogued.",
184
+ inputSchema: {
185
+ type: 'object',
186
+ properties: {
187
+ binary_path: { type: 'string', description: 'Path to the PE (.exe/.dll).' },
188
+ rva: { type: 'number', description: 'Entry RVA of the function.' },
189
+ max_bytes: { type: 'number', description: 'Safety cap on sweep length (default 4096).' },
190
+ db_path: { type: 'string', description: 'Optional .autopsy.db for writeback.' },
191
+ game_path: { type: 'string', description: 'Optional game dir; default .autopsy DB used if db_path omitted.' },
192
+ },
193
+ required: ['binary_path', 'rva'],
194
+ },
195
+ handler: async (args) => {
196
+ const binaryPath = args.binary_path;
197
+ const rva = args.rva;
198
+ const maxBytes = typeof args.max_bytes === 'number' ? args.max_bytes : 4096;
199
+ if (!existsSync(binaryPath))
200
+ return JSON.stringify({ error: `binary not found: ${binaryPath}` }, null, 2);
201
+ const buf = readFileSync(binaryPath); // READ-ONLY
202
+ let pe;
203
+ try {
204
+ pe = parsePe(buf);
205
+ }
206
+ catch (e) {
207
+ return JSON.stringify({ error: `PE parse failed: ${e.message}` }, null, 2);
208
+ }
209
+ if (!pe.is64) {
210
+ return JSON.stringify({ error: 'PR-3.1 supports x86-64 only; this PE is 32-bit (x86). Deferred to a later slice.' }, null, 2);
211
+ }
212
+ let slice;
213
+ try {
214
+ slice = readCodeSlice(buf, pe, rva, maxBytes);
215
+ }
216
+ catch (e) {
217
+ return JSON.stringify({ error: e.message }, null, 2);
218
+ }
219
+ const all = await disassembleX64(slice.bytes, { runtimeVA: slice.runtimeVA, imageBase: pe.imageBase });
220
+ // Truncate the sweep at the first terminal instruction (inclusive).
221
+ let end = all.length;
222
+ for (let k = 0; k < all.length; k++) {
223
+ if (isTerminal(all[k].mnemonic)) {
224
+ end = k + 1;
225
+ break;
226
+ }
227
+ }
228
+ const insns = all.slice(0, end);
229
+ const byteLen = insns.reduce((n, i) => n + i.size, 0);
230
+ const hitTerminal = end < all.length || (insns.length > 0 && isTerminal(insns[insns.length - 1].mnemonic));
231
+ const writeback = await maybeWriteFunction(args, binaryPath, rva, insns, byteLen, 'disassemble_function', true);
232
+ return JSON.stringify({
233
+ binary: basename(binaryPath),
234
+ capstone: await capstoneVersion(),
235
+ section: slice.section,
236
+ entry_rva: `0x${rva.toString(16)}`,
237
+ insn_count: insns.length,
238
+ byte_length: byteLen,
239
+ terminated_on_ret: hitTerminal,
240
+ boundary_provenance: 'inferred (linear sweep; CFG bounds in PR-3.2)',
241
+ writeback,
242
+ instructions: insns.map(insnJson),
243
+ }, null, 2);
244
+ },
245
+ },
246
+ ];
247
+ }
248
+ /**
249
+ * If a DB is supplied and the binary is catalogued there, write a 'function' row
250
+ * covering [rva, rva+byteLen) and verify it read back. Returns a small status
251
+ * object for the tool summary. Never throws into the caller — writeback is
252
+ * best-effort and its failure is reported, not fatal (the disasm still returns).
253
+ */
254
+ async function maybeWriteFunction(args, binaryPath, rva, insns, byteLen, sourceTool, boundaryInferred) {
255
+ const dbPath = resolveDbPath(args.db_path, args.game_path);
256
+ if (!dbPath)
257
+ return { attempted: false, reason: 'no db_path/game_path supplied — pure read-only run' };
258
+ if (!existsSync(dbPath))
259
+ return { attempted: false, reason: `autopsy DB not found: ${dbPath}` };
260
+ const found = lookupBinaryId(dbPath, binaryPath);
261
+ if (!found)
262
+ return { attempted: false, reason: 'binary not catalogued in this DB (run unpack_game first) — not inventing a row' };
263
+ try {
264
+ const model = new AutopsyModel(dbPath);
265
+ let fnId;
266
+ try {
267
+ fnId = model.addFunction({
268
+ binary_id: found.binaryId,
269
+ rva,
270
+ size: byteLen,
271
+ insn_count: insns.length,
272
+ name: null,
273
+ label: null,
274
+ notes: `${insns.length} insns; extent by ${boundaryInferred ? 'linear-sweep heuristic' : 'explicit range'}; ${sourceTool}`,
275
+ // Bytes are verified; a heuristic boundary makes the ROW inferred.
276
+ provenance: boundaryInferred ? 'inferred' : 'verified',
277
+ source_tool: sourceTool,
278
+ });
279
+ }
280
+ finally {
281
+ model.close();
282
+ }
283
+ // VERIFY-AFTER-WRITE: read the row back.
284
+ const rdb = new Database(dbPath, { readonly: true });
285
+ try {
286
+ const row = rdb.prepare('SELECT rva, size, insn_count FROM "function" WHERE id = ?').get(fnId);
287
+ const ok = !!row && row.rva === rva && row.size === byteLen && row.insn_count === insns.length;
288
+ return { attempted: true, ok, function_id: fnId, binary_id: found.binaryId, verified: ok };
289
+ }
290
+ finally {
291
+ rdb.close();
292
+ }
293
+ }
294
+ catch (e) {
295
+ return { attempted: true, ok: false, error: e.message };
296
+ }
297
+ }
298
+ //# sourceMappingURL=native-comprehension-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-comprehension-tools.js","sourceRoot":"","sources":["../../src/tools/native-comprehension-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { ToolDefinition } from './index.js';
2
+ export declare function getUnpackTools(): ToolDefinition[];