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,122 @@
1
+ import { childPool } from '../../backends/child-pool.js';
2
+ import { logger } from '../../utils/logger.js';
3
+ import { session } from '../../core/session.js';
4
+ function delegateTool(name, description, inputSchema) {
5
+ return {
6
+ name,
7
+ description,
8
+ inputSchema,
9
+ handler: async (args) => {
10
+ const start = Date.now();
11
+ logger.toolStart(name, 'unreal-assets');
12
+ try {
13
+ const result = await childPool.call('unreal-assets', name, args);
14
+ const text = result.content.map(c => c.text).join('\n');
15
+ const duration = Date.now() - start;
16
+ logger.toolComplete(name, 'unreal-assets', duration, !result.isError);
17
+ session.recordToolCall({ tool: name, timestamp: start, duration, success: !result.isError, backend: 'unreal-assets' });
18
+ return text;
19
+ }
20
+ catch (err) {
21
+ const duration = Date.now() - start;
22
+ const msg = err instanceof Error ? err.message : String(err);
23
+ logger.toolComplete(name, 'unreal-assets', duration, false);
24
+ session.recordToolCall({ tool: name, timestamp: start, duration, success: false, backend: 'unreal-assets' });
25
+ return `ERROR: ${msg}`;
26
+ }
27
+ },
28
+ };
29
+ }
30
+ export function getUnrealDelegateTools() {
31
+ return [
32
+ delegateTool('open_game', 'Open a game directory for Unreal asset reading. Scans for .pak/.ucas/.utoc files.', {
33
+ type: 'object',
34
+ properties: {
35
+ game_path: { type: 'string', description: 'Path to game directory' },
36
+ ue_version: { type: 'string', description: 'Unreal Engine version (auto-detected if omitted)' },
37
+ aes_key: { type: 'string', description: 'AES decryption key if assets are encrypted' },
38
+ },
39
+ required: ['game_path'],
40
+ }),
41
+ delegateTool('list_assets', 'List assets in loaded game with file sizes.', {
42
+ type: 'object',
43
+ properties: {
44
+ path_filter: { type: 'string', description: 'Filter assets by path substring' },
45
+ type_filter: { type: 'string', description: 'Filter by asset type' },
46
+ limit: { type: 'number', description: 'Max results (default 200)' },
47
+ offset: { type: 'number', description: 'Skip first N results (default 0)' },
48
+ },
49
+ }),
50
+ delegateTool('search_assets', 'Search for assets by name (case-insensitive).', {
51
+ type: 'object',
52
+ properties: {
53
+ query: { type: 'string', description: 'Search query' },
54
+ limit: { type: 'number', description: 'Max results (default 100)' },
55
+ },
56
+ required: ['query'],
57
+ }),
58
+ delegateTool('unreal_game_status', 'Check current state of Unreal asset reader.', {
59
+ type: 'object',
60
+ properties: {},
61
+ }),
62
+ delegateTool('read_asset', 'Read all exports and properties from an asset.', {
63
+ type: 'object',
64
+ properties: {
65
+ asset_path: { type: 'string', description: 'Asset path (e.g. /Game/Maps/MainLevel)' },
66
+ max_depth: { type: 'number', description: 'Max property nesting depth (default 4)' },
67
+ },
68
+ required: ['asset_path'],
69
+ }),
70
+ delegateTool('read_asset_export', 'Read a specific named export from an asset.', {
71
+ type: 'object',
72
+ properties: {
73
+ asset_path: { type: 'string', description: 'Asset path' },
74
+ export_name: { type: 'string', description: 'Export name to read' },
75
+ max_depth: { type: 'number', description: 'Max depth (default 5)' },
76
+ },
77
+ required: ['asset_path', 'export_name'],
78
+ }),
79
+ delegateTool('read_blueprint', 'Read Blueprint class definition, components, and default properties.', {
80
+ type: 'object',
81
+ properties: {
82
+ asset_path: { type: 'string', description: 'Blueprint asset path' },
83
+ max_depth: { type: 'number', description: 'Max depth (default 3)' },
84
+ },
85
+ required: ['asset_path'],
86
+ }),
87
+ delegateTool('read_datatable', 'Read a DataTable asset with all rows and field values.', {
88
+ type: 'object',
89
+ properties: {
90
+ asset_path: { type: 'string', description: 'DataTable asset path' },
91
+ row_filter: { type: 'string', description: 'Optional row name filter' },
92
+ limit: { type: 'number', description: 'Max rows (default 100)' },
93
+ },
94
+ required: ['asset_path'],
95
+ }),
96
+ delegateTool('list_exports', 'List all exports in a package without reading full properties.', {
97
+ type: 'object',
98
+ properties: {
99
+ asset_path: { type: 'string', description: 'Asset path' },
100
+ },
101
+ required: ['asset_path'],
102
+ }),
103
+ delegateTool('get_class_hierarchy', 'Get inheritance chain for a Blueprint class.', {
104
+ type: 'object',
105
+ properties: {
106
+ asset_path: { type: 'string', description: 'Blueprint asset path' },
107
+ max_levels: { type: 'number', description: 'Max inheritance levels (default 10)' },
108
+ },
109
+ required: ['asset_path'],
110
+ }),
111
+ delegateTool('find_blueprints_of_type', 'Search for all Blueprint assets inheriting from a parent class.', {
112
+ type: 'object',
113
+ properties: {
114
+ parent_class: { type: 'string', description: 'Parent class name' },
115
+ path_filter: { type: 'string', description: 'Optional path filter' },
116
+ limit: { type: 'number', description: 'Max results (default 50)' },
117
+ },
118
+ required: ['parent_class'],
119
+ }),
120
+ ];
121
+ }
122
+ //# sourceMappingURL=unreal-assets.js.map
@@ -0,0 +1,2 @@
1
+ import { ToolDefinition } from './index.js';
2
+ export declare function getDetectionTools(): ToolDefinition[];
@@ -0,0 +1,164 @@
1
+ import { detectEngine } from '../core/engine-detector.js';
2
+ import { session } from '../core/session.js';
3
+ import { eventBus } from '../core/event-bus.js';
4
+ import { extractGameName } from '../utils/path-utils.js';
5
+ import { findSteamGames } from '../utils/steam-finder.js';
6
+ export function getDetectionTools() {
7
+ return [
8
+ {
9
+ name: 'detect_engine',
10
+ description: 'Scan a game directory and detect what engine it uses (Unity, Unreal, Godot, Java, etc.). Returns engine type, runtime, and primary assembly path.',
11
+ inputSchema: {
12
+ type: 'object',
13
+ properties: {
14
+ game_path: { type: 'string', description: 'Full path to the game directory' },
15
+ },
16
+ required: ['game_path'],
17
+ },
18
+ handler: async (args) => {
19
+ const gamePath = args.game_path;
20
+ const result = detectEngine(gamePath);
21
+ eventBus.emit('engine:detected', {
22
+ engine: result.engine || 'unknown',
23
+ runtime: result.runtime,
24
+ path: gamePath,
25
+ confidence: result.confidence,
26
+ });
27
+ return JSON.stringify(result, null, 2);
28
+ },
29
+ },
30
+ {
31
+ name: 'load_game',
32
+ description: 'Set a game as the active modding target. Auto-detects engine, sets up session state, and returns what tools are available for this game type.',
33
+ inputSchema: {
34
+ type: 'object',
35
+ properties: {
36
+ game_path: { type: 'string', description: 'Full path to the game directory' },
37
+ game_name: { type: 'string', description: 'Optional human-readable game name (auto-detected from path if omitted)' },
38
+ },
39
+ required: ['game_path'],
40
+ },
41
+ handler: async (args) => {
42
+ const gamePath = args.game_path;
43
+ const gameName = args.game_name || extractGameName(gamePath);
44
+ const detection = detectEngine(gamePath);
45
+ session.setGame(gamePath, gameName, detection.engine, detection.runtime);
46
+ // Suggest mod framework based on engine
47
+ let suggestedFramework = '';
48
+ switch (detection.engine) {
49
+ case 'unity-mono':
50
+ suggestedFramework = 'BepInEx 5 + Harmony';
51
+ session.setModFramework('bepinex5');
52
+ break;
53
+ case 'unity-il2cpp':
54
+ suggestedFramework = 'MelonLoader or BepInEx 6';
55
+ session.setModFramework('melonloader');
56
+ break;
57
+ case 'unreal':
58
+ suggestedFramework = 'UE4SS or binary patching';
59
+ break;
60
+ case 'java':
61
+ suggestedFramework = 'JAR editor (direct class modification)';
62
+ session.setModFramework('jar-edit');
63
+ break;
64
+ case 'godot':
65
+ suggestedFramework = 'PCK editor (GDScript modification)';
66
+ session.setModFramework('pck-edit');
67
+ break;
68
+ case 'native':
69
+ suggestedFramework = 'Binary patching / DLL injection';
70
+ session.setModFramework('binary-patch');
71
+ break;
72
+ case 'lua':
73
+ suggestedFramework = 'Direct Lua script editing';
74
+ session.setModFramework('lua-edit');
75
+ break;
76
+ case 'electron':
77
+ suggestedFramework = 'Direct JS source modification';
78
+ session.setModFramework('js-edit');
79
+ break;
80
+ }
81
+ const response = {
82
+ gameName,
83
+ gamePath,
84
+ engine: detection.engine,
85
+ runtime: detection.runtime,
86
+ confidence: detection.confidence,
87
+ details: detection.details,
88
+ primaryAssembly: detection.primaryAssembly || null,
89
+ metadataPath: detection.metadataPath || null,
90
+ suggestedFramework,
91
+ nextSteps: getNextSteps(detection),
92
+ };
93
+ return JSON.stringify(response, null, 2);
94
+ },
95
+ },
96
+ {
97
+ name: 'game_status',
98
+ description: 'Get the current session state including loaded game, engine type, cached analysis data, and mod build status.',
99
+ inputSchema: {
100
+ type: 'object',
101
+ properties: {},
102
+ },
103
+ handler: async () => {
104
+ return JSON.stringify(session.getSerializableState(), null, 2);
105
+ },
106
+ },
107
+ {
108
+ name: 'find_steam_games',
109
+ description: 'Search configured Steam library paths for installed games. Optionally filter by name.',
110
+ inputSchema: {
111
+ type: 'object',
112
+ properties: {
113
+ filter: { type: 'string', description: 'Optional name filter (case-insensitive partial match)' },
114
+ },
115
+ },
116
+ handler: async (args) => {
117
+ const filter = args.filter;
118
+ const games = findSteamGames(filter);
119
+ if (games.length === 0) {
120
+ return 'No Steam games found' + (filter ? ` matching "${filter}"` : '') + '. Check steamPaths in ugm.config.json.';
121
+ }
122
+ return JSON.stringify(games, null, 2);
123
+ },
124
+ },
125
+ ];
126
+ }
127
+ function getNextSteps(detection) {
128
+ const steps = [];
129
+ switch (detection.engine) {
130
+ case 'unity-mono':
131
+ steps.push(`Load the assembly: load_assembly("${detection.primaryAssembly}")`);
132
+ steps.push('List game types: list_types(assembly_key, filter)');
133
+ steps.push('Search for gameplay values: find_gameplay_values(search_terms)');
134
+ break;
135
+ case 'unity-il2cpp':
136
+ steps.push(`Dump IL2CPP metadata: unity_il2cpp_dump_metadata("${detection.metadataPath}")`);
137
+ steps.push('Search for classes: unity_il2cpp_find_class(metadata_path, class_name)');
138
+ steps.push('Check for anti-cheat: actk_scan_obscured_values(metadata_path)');
139
+ break;
140
+ case 'unreal':
141
+ steps.push(`Open game: open_game("${detection.primaryAssembly || ''}")`);
142
+ steps.push('List assets: list_assets(path_filter)');
143
+ steps.push('Search assets: search_assets(query)');
144
+ break;
145
+ case 'java':
146
+ steps.push(`Open JAR: jar_open("${detection.primaryAssembly}")`);
147
+ steps.push('List contents: jar_list(session_id)');
148
+ steps.push('Search classes: jar_search(session_id, query)');
149
+ break;
150
+ case 'godot':
151
+ steps.push(`Analyze PCK: analyze_godot_pck("${detection.primaryAssembly}")`);
152
+ break;
153
+ case 'native':
154
+ steps.push(`Analyze executable: analyze_pe_full("${detection.primaryAssembly}")`);
155
+ steps.push('Extract strings: extract_strings_advanced(path, filter)');
156
+ steps.push('Search patterns: pattern_scan(path, pattern)');
157
+ break;
158
+ default:
159
+ steps.push('Engine not detected. Try analyze_file_format on the main executable.');
160
+ break;
161
+ }
162
+ return steps;
163
+ }
164
+ //# sourceMappingURL=detection-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detection-tools.js","sourceRoot":"","sources":["../../src/tools/detection-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface ToolDefinition {
2
+ name: string;
3
+ description: string;
4
+ inputSchema: Record<string, unknown>;
5
+ handler: (args: Record<string, unknown>) => Promise<string>;
6
+ }
7
+ export declare function getAllTools(): ToolDefinition[];
8
+ export declare function getToolByName(name: string): ToolDefinition | undefined;
@@ -0,0 +1,30 @@
1
+ import { getDetectionTools } from './detection-tools.js';
2
+ import { getWorkflowTools } from './workflow-tools.js';
3
+ import { getNativeToolDefinitions } from './native/index.js';
4
+ import { getUnpackTools } from './unpack-tools.js';
5
+ import { getDecodeTools } from './decode-tools.js';
6
+ import { getNativeComprehensionTools } from './native-comprehension-tools.js';
7
+ import { getUnityDelegateTools } from './delegates/unity-decompiler.js';
8
+ import { getUnrealDelegateTools } from './delegates/unreal-assets.js';
9
+ import { getJarDelegateTools } from './delegates/jar-editor.js';
10
+ let allTools = null;
11
+ export function getAllTools() {
12
+ if (allTools)
13
+ return allTools;
14
+ allTools = [
15
+ ...getDetectionTools(),
16
+ ...getWorkflowTools(),
17
+ ...getNativeToolDefinitions(),
18
+ ...getUnpackTools(),
19
+ ...getDecodeTools(),
20
+ ...getNativeComprehensionTools(),
21
+ ...getUnityDelegateTools(),
22
+ ...getUnrealDelegateTools(),
23
+ ...getJarDelegateTools(),
24
+ ];
25
+ return allTools;
26
+ }
27
+ export function getToolByName(name) {
28
+ return getAllTools().find(t => t.name === name);
29
+ }
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAShE,IAAI,QAAQ,GAA4B,IAAI,CAAC;AAE7C,MAAM,UAAU,WAAW;IACzB,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9B,QAAQ,GAAG;QACT,GAAG,iBAAiB,EAAE;QACtB,GAAG,gBAAgB,EAAE;QACrB,GAAG,wBAAwB,EAAE;QAC7B,GAAG,cAAc,EAAE;QACnB,GAAG,cAAc,EAAE;QACnB,GAAG,2BAA2B,EAAE;QAChC,GAAG,qBAAqB,EAAE;QAC1B,GAAG,sBAAsB,EAAE;QAC3B,GAAG,mBAAmB,EAAE;KACzB,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAClD,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { ToolDefinition } from '../index.js';
2
+ export declare function getNativeToolDefinitions(): ToolDefinition[];