@gnsx/genesys.sdk 4.2.9

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 (185) hide show
  1. package/README.md +60 -0
  2. package/dist/src/asset-pack/eslint.config.js +58 -0
  3. package/dist/src/asset-pack/scripts/post-install.js +64 -0
  4. package/dist/src/asset-pack/src/index.js +1 -0
  5. package/dist/src/core/cli.js +303 -0
  6. package/dist/src/core/common.js +325 -0
  7. package/dist/src/core/index.js +6 -0
  8. package/dist/src/core/tools/build-project.js +456 -0
  9. package/dist/src/core/tools/index.js +2 -0
  10. package/dist/src/core/tools/new-asset-pack.js +153 -0
  11. package/dist/src/core/tools/new-project.js +293 -0
  12. package/dist/src/core/types.js +1 -0
  13. package/dist/src/dependencies.js +84 -0
  14. package/dist/src/electron/IpcSerializableError.js +38 -0
  15. package/dist/src/electron/api.js +7 -0
  16. package/dist/src/electron/backend/actions.js +56 -0
  17. package/dist/src/electron/backend/handler.js +452 -0
  18. package/dist/src/electron/backend/logging.js +41 -0
  19. package/dist/src/electron/backend/main.js +369 -0
  20. package/dist/src/electron/backend/menu.js +196 -0
  21. package/dist/src/electron/backend/state.js +201 -0
  22. package/dist/src/electron/backend/telemetry.js +9 -0
  23. package/dist/src/electron/backend/tools/const.js +9 -0
  24. package/dist/src/electron/backend/tools/file-server.js +383 -0
  25. package/dist/src/electron/backend/tools/open-project.js +249 -0
  26. package/dist/src/electron/backend/window.js +161 -0
  27. package/dist/src/templates/eslint.config.js +58 -0
  28. package/dist/src/templates/scripts/genesys/build-project.js +42 -0
  29. package/dist/src/templates/scripts/genesys/calc-bounding-box.js +205 -0
  30. package/dist/src/templates/scripts/genesys/common.js +36 -0
  31. package/dist/src/templates/scripts/genesys/const.js +9 -0
  32. package/dist/src/templates/scripts/genesys/dev/dump-default-scene.js +8 -0
  33. package/dist/src/templates/scripts/genesys/dev/generate-manifest.js +116 -0
  34. package/dist/src/templates/scripts/genesys/dev/launcher.js +39 -0
  35. package/dist/src/templates/scripts/genesys/dev/storage-provider.js +188 -0
  36. package/dist/src/templates/scripts/genesys/dev/update-template-scenes.js +67 -0
  37. package/dist/src/templates/scripts/genesys/doc-server.js +12 -0
  38. package/dist/src/templates/scripts/genesys/genesys-mcp.js +413 -0
  39. package/dist/src/templates/scripts/genesys/mcp/doc-tools.js +70 -0
  40. package/dist/src/templates/scripts/genesys/mcp/editor-functions.js +123 -0
  41. package/dist/src/templates/scripts/genesys/mcp/editor-tools.js +51 -0
  42. package/dist/src/templates/scripts/genesys/mcp/get-scene-state.js +26 -0
  43. package/dist/src/templates/scripts/genesys/mcp/run-subprocess.js +23 -0
  44. package/dist/src/templates/scripts/genesys/mcp/search-actors.js +703 -0
  45. package/dist/src/templates/scripts/genesys/mcp/search-assets.js +296 -0
  46. package/dist/src/templates/scripts/genesys/mcp/utils.js +234 -0
  47. package/dist/src/templates/scripts/genesys/migrate-scenes-and-prefabs.js +252 -0
  48. package/dist/src/templates/scripts/genesys/misc.js +32 -0
  49. package/dist/src/templates/scripts/genesys/mock.js +5 -0
  50. package/dist/src/templates/scripts/genesys/place-actors.js +112 -0
  51. package/dist/src/templates/scripts/genesys/post-install.js +33 -0
  52. package/dist/src/templates/scripts/genesys/remove-engine-comments.js +113 -0
  53. package/dist/src/templates/scripts/genesys/storageProvider.js +146 -0
  54. package/dist/src/templates/scripts/genesys/validate-prefabs.js +115 -0
  55. package/dist/src/templates/src/index.js +20 -0
  56. package/dist/src/templates/src/templates/firstPerson/src/auto-imports.js +1 -0
  57. package/dist/src/templates/src/templates/firstPerson/src/game.js +30 -0
  58. package/dist/src/templates/src/templates/firstPerson/src/player.js +55 -0
  59. package/dist/src/templates/src/templates/fps/src/auto-imports.js +1 -0
  60. package/dist/src/templates/src/templates/fps/src/game.js +30 -0
  61. package/dist/src/templates/src/templates/fps/src/player.js +60 -0
  62. package/dist/src/templates/src/templates/fps/src/weapon.js +54 -0
  63. package/dist/src/templates/src/templates/freeCamera/src/auto-imports.js +1 -0
  64. package/dist/src/templates/src/templates/freeCamera/src/game.js +30 -0
  65. package/dist/src/templates/src/templates/freeCamera/src/player.js +38 -0
  66. package/dist/src/templates/src/templates/sideScroller/src/auto-imports.js +1 -0
  67. package/dist/src/templates/src/templates/sideScroller/src/const.js +43 -0
  68. package/dist/src/templates/src/templates/sideScroller/src/game.js +102 -0
  69. package/dist/src/templates/src/templates/sideScroller/src/level-generator.js +249 -0
  70. package/dist/src/templates/src/templates/sideScroller/src/player.js +100 -0
  71. package/dist/src/templates/src/templates/thirdPerson/src/auto-imports.js +1 -0
  72. package/dist/src/templates/src/templates/thirdPerson/src/game.js +30 -0
  73. package/dist/src/templates/src/templates/thirdPerson/src/player.js +58 -0
  74. package/dist/src/templates/src/templates/vehicle/src/auto-imports.js +1 -0
  75. package/dist/src/templates/src/templates/vehicle/src/base-vehicle.js +122 -0
  76. package/dist/src/templates/src/templates/vehicle/src/game.js +33 -0
  77. package/dist/src/templates/src/templates/vehicle/src/mesh-vehicle.js +188 -0
  78. package/dist/src/templates/src/templates/vehicle/src/player.js +97 -0
  79. package/dist/src/templates/src/templates/vehicle/src/primitive-vehicle.js +258 -0
  80. package/dist/src/templates/src/templates/vehicle/src/ui-hints.js +100 -0
  81. package/dist/src/templates/src/templates/vr-game/src/auto-imports.js +1 -0
  82. package/dist/src/templates/src/templates/vr-game/src/game.js +55 -0
  83. package/dist/src/templates/src/templates/vr-game/src/sample-vr-actor.js +29 -0
  84. package/dist/src/templates/vite.config.js +46 -0
  85. package/package.json +181 -0
  86. package/scripts/post-install.ts +143 -0
  87. package/src/asset-pack/.gitattributes +89 -0
  88. package/src/asset-pack/.github/workflows/publish.yml +90 -0
  89. package/src/asset-pack/eslint.config.js +59 -0
  90. package/src/asset-pack/gitignore +11 -0
  91. package/src/asset-pack/scripts/post-install.ts +81 -0
  92. package/src/asset-pack/src/index.ts +0 -0
  93. package/src/asset-pack/tsconfig.json +34 -0
  94. package/src/templates/.cursor/mcp.json +20 -0
  95. package/src/templates/.cursorignore +2 -0
  96. package/src/templates/.gitattributes +89 -0
  97. package/src/templates/.vscode/settings.json +6 -0
  98. package/src/templates/AGENTS.md +104 -0
  99. package/src/templates/CLAUDE.md +1 -0
  100. package/src/templates/README.md +24 -0
  101. package/src/templates/eslint.config.js +60 -0
  102. package/src/templates/gitignore +11 -0
  103. package/src/templates/index.html +34 -0
  104. package/src/templates/pnpm-lock.yaml +3676 -0
  105. package/src/templates/scripts/genesys/build-project.ts +51 -0
  106. package/src/templates/scripts/genesys/calc-bounding-box.ts +272 -0
  107. package/src/templates/scripts/genesys/common.ts +46 -0
  108. package/src/templates/scripts/genesys/const.ts +9 -0
  109. package/src/templates/scripts/genesys/dev/dump-default-scene.ts +11 -0
  110. package/src/templates/scripts/genesys/dev/generate-manifest.ts +146 -0
  111. package/src/templates/scripts/genesys/dev/launcher.ts +46 -0
  112. package/src/templates/scripts/genesys/dev/storage-provider.ts +229 -0
  113. package/src/templates/scripts/genesys/dev/update-template-scenes.ts +84 -0
  114. package/src/templates/scripts/genesys/doc-server.ts +16 -0
  115. package/src/templates/scripts/genesys/genesys-mcp.ts +526 -0
  116. package/src/templates/scripts/genesys/mcp/doc-tools.ts +86 -0
  117. package/src/templates/scripts/genesys/mcp/editor-functions.ts +151 -0
  118. package/src/templates/scripts/genesys/mcp/editor-tools.ts +73 -0
  119. package/src/templates/scripts/genesys/mcp/get-scene-state.ts +35 -0
  120. package/src/templates/scripts/genesys/mcp/run-subprocess.ts +30 -0
  121. package/src/templates/scripts/genesys/mcp/search-actors.ts +858 -0
  122. package/src/templates/scripts/genesys/mcp/search-assets.ts +380 -0
  123. package/src/templates/scripts/genesys/mcp/utils.ts +281 -0
  124. package/src/templates/scripts/genesys/migrate-scenes-and-prefabs.ts +301 -0
  125. package/src/templates/scripts/genesys/misc.ts +42 -0
  126. package/src/templates/scripts/genesys/mock.ts +6 -0
  127. package/src/templates/scripts/genesys/place-actors.ts +179 -0
  128. package/src/templates/scripts/genesys/post-install.ts +39 -0
  129. package/src/templates/scripts/genesys/prefab.schema.json +85 -0
  130. package/src/templates/scripts/genesys/remove-engine-comments.ts +135 -0
  131. package/src/templates/scripts/genesys/run-mcp-inspector.bat +5 -0
  132. package/src/templates/scripts/genesys/storageProvider.ts +182 -0
  133. package/src/templates/scripts/genesys/validate-prefabs.ts +138 -0
  134. package/src/templates/src/index.ts +22 -0
  135. package/src/templates/src/templates/firstPerson/assets/default.genesys-scene +166 -0
  136. package/src/templates/src/templates/firstPerson/src/auto-imports.ts +0 -0
  137. package/src/templates/src/templates/firstPerson/src/game.ts +39 -0
  138. package/src/templates/src/templates/firstPerson/src/player.ts +59 -0
  139. package/src/templates/src/templates/fps/assets/default.genesys-scene +9460 -0
  140. package/src/templates/src/templates/fps/assets/models/SM_Beam_400.glb +0 -0
  141. package/src/templates/src/templates/fps/assets/models/SM_ChamferCube.glb +0 -0
  142. package/src/templates/src/templates/fps/assets/models/SM_Floor_Thick_400x400.glb +0 -0
  143. package/src/templates/src/templates/fps/assets/models/SM_Floor_Thick_400x400_Orange.glb +0 -0
  144. package/src/templates/src/templates/fps/assets/models/SM_Floor_Thin_400x400.glb +0 -0
  145. package/src/templates/src/templates/fps/assets/models/SM_Floor_Thin_400x400_Orange.glb +0 -0
  146. package/src/templates/src/templates/fps/assets/models/SM_Ramp_400x400.glb +0 -0
  147. package/src/templates/src/templates/fps/assets/models/SM_Rifle.glb +0 -0
  148. package/src/templates/src/templates/fps/assets/models/SM_Wall_Thin_400x200.glb +0 -0
  149. package/src/templates/src/templates/fps/assets/models/SM_Wall_Thin_400x200_Orange.glb +0 -0
  150. package/src/templates/src/templates/fps/assets/models/SM_Wall_Thin_400x400.glb +0 -0
  151. package/src/templates/src/templates/fps/assets/models/SM_Wall_Thin_400x400_Orange.glb +0 -0
  152. package/src/templates/src/templates/fps/src/auto-imports.ts +0 -0
  153. package/src/templates/src/templates/fps/src/game.ts +39 -0
  154. package/src/templates/src/templates/fps/src/player.ts +66 -0
  155. package/src/templates/src/templates/fps/src/weapon.ts +47 -0
  156. package/src/templates/src/templates/freeCamera/assets/default.genesys-scene +166 -0
  157. package/src/templates/src/templates/freeCamera/src/auto-imports.ts +0 -0
  158. package/src/templates/src/templates/freeCamera/src/game.ts +39 -0
  159. package/src/templates/src/templates/freeCamera/src/player.ts +40 -0
  160. package/src/templates/src/templates/sideScroller/assets/default.genesys-scene +122 -0
  161. package/src/templates/src/templates/sideScroller/src/auto-imports.ts +0 -0
  162. package/src/templates/src/templates/sideScroller/src/const.ts +46 -0
  163. package/src/templates/src/templates/sideScroller/src/game.ts +121 -0
  164. package/src/templates/src/templates/sideScroller/src/level-generator.ts +361 -0
  165. package/src/templates/src/templates/sideScroller/src/player.ts +123 -0
  166. package/src/templates/src/templates/thirdPerson/assets/default.genesys-scene +166 -0
  167. package/src/templates/src/templates/thirdPerson/src/auto-imports.ts +0 -0
  168. package/src/templates/src/templates/thirdPerson/src/game.ts +39 -0
  169. package/src/templates/src/templates/thirdPerson/src/player.ts +58 -0
  170. package/src/templates/src/templates/vehicle/assets/default.genesys-scene +226 -0
  171. package/src/templates/src/templates/vehicle/assets/models/cyberTruck/chassis.glb +0 -0
  172. package/src/templates/src/templates/vehicle/assets/models/cyberTruck/wheel.glb +0 -0
  173. package/src/templates/src/templates/vehicle/src/auto-imports.ts +0 -0
  174. package/src/templates/src/templates/vehicle/src/base-vehicle.ts +145 -0
  175. package/src/templates/src/templates/vehicle/src/game.ts +43 -0
  176. package/src/templates/src/templates/vehicle/src/mesh-vehicle.ts +189 -0
  177. package/src/templates/src/templates/vehicle/src/player.ts +106 -0
  178. package/src/templates/src/templates/vehicle/src/primitive-vehicle.ts +264 -0
  179. package/src/templates/src/templates/vehicle/src/ui-hints.ts +101 -0
  180. package/src/templates/src/templates/vr-game/assets/default.genesys-scene +247 -0
  181. package/src/templates/src/templates/vr-game/src/auto-imports.ts +1 -0
  182. package/src/templates/src/templates/vr-game/src/game.ts +66 -0
  183. package/src/templates/src/templates/vr-game/src/sample-vr-actor.ts +26 -0
  184. package/src/templates/tsconfig.json +35 -0
  185. package/src/templates/vite.config.ts +52 -0
@@ -0,0 +1,55 @@
1
+ import * as ENGINE from '@gnsx/genesys.js';
2
+ import * as THREE from 'three';
3
+ import './auto-imports.js';
4
+ class MyGame extends ENGINE.BaseGameLoop {
5
+ pawn = null;
6
+ controller = null;
7
+ createLoadingScreen() {
8
+ // enable the default loading screen
9
+ return new ENGINE.DefaultLoadingScreen();
10
+ }
11
+ static get DEFAULT_OPTIONS() {
12
+ return {
13
+ ...ENGINE.BaseGameLoop.DEFAULT_OPTIONS,
14
+ xrEnabled: true,
15
+ vrSessionOptions: {
16
+ optionalFeatures: ['hand-tracking', 'local-floor'],
17
+ requiredFeatures: []
18
+ }
19
+ };
20
+ }
21
+ async preStart() {
22
+ // Disable tone mapping for VR because it breaks VR
23
+ this.world.postProcessManager.disablePasses(ENGINE.PostProcessPass.ToneMapping);
24
+ // create the vr pawn
25
+ this.pawn = ENGINE.VRPawn.create({
26
+ position: new THREE.Vector3(0, 0, 0),
27
+ movementComponent: null,
28
+ camera: new THREE.PerspectiveCamera(ENGINE.CAMERA_FOV, 1, ENGINE.CAMERA_NEAR, ENGINE.CAMERA_FAR),
29
+ controllerOptions: {
30
+ rayVisualizationEnabled: true,
31
+ maxRayDistance: 10
32
+ },
33
+ enableTeleportation: true,
34
+ enableSnapTurn: true,
35
+ snapTurnAngle: 30,
36
+ maxTeleportDistance: 15
37
+ });
38
+ // create the controller and possess the pawn
39
+ this.controller = ENGINE.PlayerController.create();
40
+ this.controller.possess(this.pawn);
41
+ this.pawn.addComponent(ENGINE.VRGrabComponent.create());
42
+ this.pawn.addComponent(ENGINE.VRSnapTurnComponent.create({ angleDeg: this.pawn.getSnapTurnAngleDegrees() }));
43
+ this.pawn.addComponent(ENGINE.VRInteractComponent.create({ button: ENGINE.XRButton.Trigger }));
44
+ this.pawn.addComponent(ENGINE.VRTeleportComponent.create({ maxDistance: 15 }));
45
+ // add both to the world
46
+ this.world.addActors(this.pawn, this.controller);
47
+ }
48
+ }
49
+ export function main(container, gameId) {
50
+ const game = new MyGame(container, {
51
+ ...MyGame.DEFAULT_OPTIONS,
52
+ gameId
53
+ });
54
+ return game;
55
+ }
@@ -0,0 +1,29 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import * as ENGINE from '@gnsx/genesys.js';
8
+ /**
9
+ * Sample VR Actor - A simple actor that can be picked up and manipulated in VR
10
+ */
11
+ let SampleVRActor = class SampleVRActor extends ENGINE.Actor {
12
+ meshComponent = null;
13
+ grabbable = null;
14
+ doBeginPlay() {
15
+ super.doBeginPlay();
16
+ this.meshComponent = this.getComponent(ENGINE.MeshComponent);
17
+ this.grabbable = this.getComponent(ENGINE.VRGrabbableComponent);
18
+ this.grabbable?.onGrabStart.add((_hand) => {
19
+ this.meshComponent?.setPhysicsEnabled(false);
20
+ });
21
+ this.grabbable?.onGrabEnd.add((_hand, _dropVelocity) => {
22
+ this.meshComponent?.setPhysicsEnabled(true);
23
+ });
24
+ }
25
+ };
26
+ SampleVRActor = __decorate([
27
+ ENGINE.GameClass()
28
+ ], SampleVRActor);
29
+ export { SampleVRActor };
@@ -0,0 +1,46 @@
1
+ import { defineConfig } from 'vite';
2
+ import mkcert from 'vite-plugin-mkcert';
3
+ import { nodePolyfills } from 'vite-plugin-node-polyfills';
4
+ export default defineConfig({
5
+ // Enable TypeScript support
6
+ esbuild: {
7
+ target: 'es2021',
8
+ },
9
+ plugins: [
10
+ nodePolyfills({
11
+ include: ['path'],
12
+ }),
13
+ mkcert(),
14
+ ],
15
+ // Configure module resolution
16
+ resolve: {
17
+ extensions: ['.ts', '.tsx', '.js', '.jsx', '.json'],
18
+ },
19
+ // Configure the dev server
20
+ server: {
21
+ port: 3000,
22
+ host: '0.0.0.0',
23
+ open: true,
24
+ // Enable CORS for asset loading
25
+ cors: true,
26
+ // Serve source maps for debugging
27
+ fs: {
28
+ allow: ['..', '.']
29
+ }
30
+ },
31
+ // Configure build options
32
+ build: {
33
+ target: 'es2021',
34
+ outDir: 'dist',
35
+ sourcemap: true,
36
+ rollupOptions: {
37
+ input: {
38
+ main: 'index.html',
39
+ },
40
+ },
41
+ },
42
+ // Enable source maps for debugging in development
43
+ css: {
44
+ devSourcemap: true,
45
+ },
46
+ });
package/package.json ADDED
@@ -0,0 +1,181 @@
1
+ {
2
+ "name": "@gnsx/genesys.sdk",
3
+ "version": "4.2.9",
4
+ "description": "Genesys SDK - A development toolkit for game development",
5
+ "author": "Directive Games",
6
+ "main": "index.js",
7
+ "type": "module",
8
+ "pnpm": {
9
+ "onlyBuiltDependencies": [
10
+ "electron"
11
+ ]
12
+ },
13
+ "publishConfig": {
14
+ "access": "public"
15
+ },
16
+ "files": [
17
+ "dist/src",
18
+ "src/templates",
19
+ "src/asset-pack",
20
+ "scripts"
21
+ ],
22
+ "bin": {
23
+ "genesys-sdk": "./dist/src/core/cli.js"
24
+ },
25
+ "scripts": {
26
+ "postinstall": "pnpm exec tsx scripts/post-install.ts",
27
+ "dev:main": "tsc --watch -p tsconfig.json",
28
+ "dev:preload": "tsc --watch -p tsconfig.preload.json",
29
+ "dev:electron": "electron dist/src/electron/backend/main.js",
30
+ "dev:watch": "pnpm compile && concurrently -k -n MAIN,PRELOAD \"pnpm dev:main\" \"pnpm dev:preload\" nodemon",
31
+ "dev": "pnpm compile && concurrently -k -n MAIN,PRELOAD \"pnpm dev:main\" \"pnpm dev:preload\" \"pnpm dev:electron\"",
32
+ "dev:hosted": "pnpm compile && concurrently -k -n MAIN,PRELOAD \"pnpm dev:main\" \"pnpm dev:preload\" \"dotenv -v DEV_HOSTED=true pnpm dev:electron\"",
33
+ "dev:vite-old": "vite",
34
+ "dev-old": "pnpm compile && concurrently -k -n MAIN,PRELOAD,VITE \"pnpm dev:main\" \"pnpm dev:preload\" \"pnpm dev:vite-old\" \"pnpm dev:electron-old\"",
35
+ "compile": "tsc -p tsconfig.json && tsc -p tsconfig.preload.json",
36
+ "build": "vite build && pnpm compile && pnpm lint",
37
+ "dist": "pnpm build && electron-builder",
38
+ "lint": "eslint . --fix --ext .ts,.tsx",
39
+ "pack": "pnpm build && pnpm pack",
40
+ "cli": "pnpm exec tsx src/core/cli.ts",
41
+ "cli:new": "pnpm exec tsx src/core/cli.ts new",
42
+ "cli:build": "pnpm exec tsx src/core/cli.ts build",
43
+ "cli:new-asset-pack": "pnpm exec tsx src/core/cli.ts new-asset-pack"
44
+ },
45
+ "build": {
46
+ "artifactName": "Genesys-Setup-${version}.${ext}",
47
+ "publish": [
48
+ {
49
+ "provider": "github",
50
+ "releaseType": "release",
51
+ "owner": "directivegames",
52
+ "repo": "genesys.sdk-release",
53
+ "private": true
54
+ }
55
+ ],
56
+ "asar": true,
57
+ "asarUnpack": [
58
+ "node_modules/@esbuild/**/*",
59
+ "node_modules/esbuild/**/*"
60
+ ],
61
+ "appId": "com.directivegames.genesys.sdk",
62
+ "productName": "Genesys",
63
+ "files": [
64
+ "dist/**/*",
65
+ {
66
+ "from": "node_modules/.pnpm/three@0.182.0/node_modules/three/examples",
67
+ "to": "node_modules/three/examples"
68
+ }
69
+ ],
70
+ "extraResources": [
71
+ {
72
+ "from": "src/templates",
73
+ "to": "vendor/src/templates"
74
+ },
75
+ {
76
+ "from": "src/asset-pack",
77
+ "to": "vendor/src/asset-pack"
78
+ }
79
+ ],
80
+ "directories": {
81
+ "buildResources": "build"
82
+ },
83
+ "extraMetadata": {
84
+ "main": "dist/src/electron/backend/main.js"
85
+ },
86
+ "protocols": [
87
+ {
88
+ "name": "genesys",
89
+ "schemes": [
90
+ "genesys"
91
+ ]
92
+ },
93
+ {
94
+ "name": "genesys-dev",
95
+ "schemes": [
96
+ "genesys-dev"
97
+ ]
98
+ }
99
+ ],
100
+ "win": {
101
+ "target": "nsis"
102
+ },
103
+ "mac": {
104
+ "target": "dmg",
105
+ "hardenedRuntime": true,
106
+ "gatekeeperAssess": false,
107
+ "entitlements": "build/entitlements.mac.plist",
108
+ "entitlementsInherit": "build/entitlements.mac.plist"
109
+ }
110
+ },
111
+ "dependencies": {
112
+ "@gnsx/genesys.js": "^4.2.11",
113
+ "@electron/rebuild": "^4.0.2",
114
+ "@emotion/react": "^11.14.0",
115
+ "@emotion/styled": "^11.14.0",
116
+ "@mui/icons-material": "^7.1.0",
117
+ "@mui/lab": "^7.0.0-beta.12",
118
+ "@mui/material": "^7.1.0",
119
+ "@sentry/electron": "^7.5.0",
120
+ "chokidar": "^4.0.3",
121
+ "commander": "^14.0.2",
122
+ "core-util-is": "^1.0.3",
123
+ "cors": "^2.8.5",
124
+ "electron-devtools-installer": "^4.0.0",
125
+ "electron-is-dev": "^3.0.1",
126
+ "electron-log": "^5.4.3",
127
+ "electron-store": "^11.0.2",
128
+ "electron-updater": "^6.7.3",
129
+ "esbuild": "^0.25.11",
130
+ "express": "^5.1.0",
131
+ "fix-path": "^4.0.0",
132
+ "jsdom": "^27.0.0",
133
+ "minimatch": "^10.0.1",
134
+ "multer": "^2.0.2",
135
+ "node-abi": "^4.14.0",
136
+ "react": "^19.2.0",
137
+ "react-dom": "^19.2.0",
138
+ "three": "^0.182.0",
139
+ "upath": "^2.0.1",
140
+ "ws": "^8.18.2",
141
+ "zod": "^3.24.4"
142
+ },
143
+ "devDependencies": {
144
+ "@electron/notarize": "^3.1.0",
145
+ "@modelcontextprotocol/sdk": "^1.22.0",
146
+ "@types/cors": "^2.8.18",
147
+ "@types/electron-store": "^3.2.2",
148
+ "@types/express": "^5.0.2",
149
+ "@types/jsdom": "^27.0.0",
150
+ "@types/minimatch": "^5.1.2",
151
+ "@types/multer": "^1.4.12",
152
+ "@types/node": "^22.15.21",
153
+ "@types/react": "^19.2.0",
154
+ "@types/react-dom": "^19.2.0",
155
+ "@types/three": "^0.182.0",
156
+ "@types/ws": "^8.18.1",
157
+ "@typescript-eslint/eslint-plugin": "^8.29.1",
158
+ "@typescript-eslint/parser": "^8.29.1",
159
+ "@vitejs/plugin-react": "^4.4.1",
160
+ "ajv": "^8.17.1",
161
+ "concurrently": "^9.1.2",
162
+ "dotenv-cli": "^8.0.0",
163
+ "electron": "^39.2.7",
164
+ "electron-builder": "^26.4.0",
165
+ "eslint": "^9.24.0",
166
+ "eslint-plugin-import": "^2.31.0",
167
+ "get-port": "^7.1.0",
168
+ "nanoid": "^5.1.6",
169
+ "nodemon": "^3.1.10",
170
+ "ts-morph": "^27.0.2",
171
+ "tsc-watch": "^7.1.0",
172
+ "tsx": "^4.20.6",
173
+ "typescript": "^5.8.3",
174
+ "vite": "^6.3.5",
175
+ "vite-plugin-mkcert": "^1.17.9",
176
+ "vite-plugin-node-polyfills": "^0.24.0",
177
+ "wait-on": "^8.0.4",
178
+ "yaml": "^2.6.1",
179
+ "zod-to-json-schema": "^3.25.0"
180
+ }
181
+ }
@@ -0,0 +1,143 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+
4
+ import YAML from 'yaml';
5
+
6
+ interface PackageJson {
7
+ dependencies?: Record<string, string>;
8
+ devDependencies?: Record<string, string>;
9
+ name?: string;
10
+ }
11
+
12
+ interface PnpmLockFile {
13
+ importers?: Record<string, {
14
+ dependencies?: Record<string, {
15
+ specifier: string;
16
+ version: string;
17
+ }>;
18
+ devDependencies?: Record<string, {
19
+ specifier: string;
20
+ version: string;
21
+ }>;
22
+ }>;
23
+ }
24
+
25
+ function generateDependenciesFile(): void {
26
+ try {
27
+ // Read main package.json to get dependency lists
28
+ const packageJsonPath = path.join(process.cwd(), 'package.json');
29
+ const packageJsonContent = fs.readFileSync(packageJsonPath, 'utf-8');
30
+ const packageJson: PackageJson = JSON.parse(packageJsonContent);
31
+
32
+ // Read pnpm-lock.yaml to get exact versions
33
+ const pnpmLockPath = path.join(process.cwd(), 'pnpm-lock.yaml');
34
+ if (!fs.existsSync(pnpmLockPath)) {
35
+ // this is a valid case when this package is installed as a dependency of another package
36
+ console.log('⚠️ Could not read pnpm-lock.yaml, skipping dependency versions');
37
+ return;
38
+ }
39
+ const pnpmLockContent = fs.readFileSync(pnpmLockPath, 'utf-8');
40
+ const pnpmLock: PnpmLockFile = YAML.parse(pnpmLockContent);
41
+
42
+ // Extract dependency lists from both package.json files
43
+ const mainDependencyNames = Object.keys(packageJson.dependencies ?? {});
44
+ const mainDevDependencyNames = Object.keys(packageJson.devDependencies ?? {});
45
+
46
+ // Merge all dependency names, removing duplicates
47
+ const allDependencyNames = [...new Set([...mainDependencyNames])];
48
+ const allDevDependencyNames = [...new Set([...mainDevDependencyNames])];
49
+
50
+ // Helper function to extract version from pnpm lock entry
51
+ const extractVersion = (versionString: string): string => {
52
+ // pnpm versions can include peer dependency info in parentheses, e.g., "11.14.0(@types/react@19.2.7)(react@19.2.0)"
53
+ // We only want the base version number
54
+ return versionString.split('(')[0];
55
+ };
56
+
57
+ // Get exact versions from pnpm-lock.yaml
58
+ const dependencies: Record<string, string> = {};
59
+ const devDependencies: Record<string, string> = {};
60
+
61
+ // Get importers (root workspace)
62
+ const rootImporter = pnpmLock.importers?.['.'];
63
+
64
+ // Process production dependencies
65
+ for (const depName of allDependencyNames) {
66
+ // Check root workspace first
67
+ let version = rootImporter?.dependencies?.[depName]?.version;
68
+ if (version) {
69
+ dependencies[depName] = extractVersion(version);
70
+ }
71
+ }
72
+
73
+ // Process dev dependencies
74
+ for (const depName of allDevDependencyNames) {
75
+ // Check root workspace first
76
+ let version = rootImporter?.devDependencies?.[depName]?.version;
77
+ if (version) {
78
+ devDependencies[depName] = extractVersion(version);
79
+ }
80
+ }
81
+
82
+ // Generate TypeScript content
83
+ const tsContent = `/**
84
+ * Auto-generated file containing all package dependencies and their exact installed versions.
85
+ * This file is generated by the post-install script.
86
+ * Do not edit manually - it will be overwritten on next install.
87
+ *
88
+ * Versions are extracted from pnpm-lock.yaml to show exact installed versions,
89
+ * not the version ranges from package.json.
90
+ *
91
+ * Includes dependencies from the main package.
92
+ */
93
+
94
+ export const DEPENDENCIES = {
95
+ ${Object.entries(dependencies)
96
+ .map(([name, version]) => ` '${name}': '${version}',`)
97
+ .join('\n')}
98
+ } as const;
99
+
100
+ export const DEV_DEPENDENCIES = {
101
+ ${Object.entries(devDependencies)
102
+ .map(([name, version]) => ` '${name}': '${version}',`)
103
+ .join('\n')}
104
+ } as const;
105
+
106
+ export const ALL_DEPENDENCIES = {
107
+ ...DEPENDENCIES,
108
+ ...DEV_DEPENDENCIES,
109
+ } as const;
110
+
111
+ export type DependencyName = keyof typeof ALL_DEPENDENCIES;
112
+ `;
113
+
114
+ // Write the TypeScript file
115
+ if (!fs.existsSync(path.join(process.cwd(), 'src'))) {
116
+ console.log('⚠️ src directory not found, skipping dependencies.ts file generation');
117
+ return;
118
+ }
119
+ const outputPath = path.join(process.cwd(), 'src', 'dependencies.ts');
120
+ fs.writeFileSync(outputPath, tsContent, 'utf-8');
121
+
122
+ console.log('✅ Dependencies file generated successfully at src/dependencies.ts');
123
+ console.log(`📦 Found ${Object.keys(dependencies).length} production dependencies with exact versions`);
124
+ console.log(`🔧 Found ${Object.keys(devDependencies).length} development dependencies with exact versions`);
125
+ } catch (error) {
126
+ console.error('❌ Error generating dependencies file:', error);
127
+ process.exit(1);
128
+ }
129
+ }
130
+
131
+ function deleteEngineAssets(): void {
132
+ const engineAssetsPath = path.join(process.cwd(), 'node_modules', 'genesys.js', 'assets');
133
+ if (fs.existsSync(engineAssetsPath)) {
134
+ fs.rmSync(engineAssetsPath, { recursive: true });
135
+ console.log('✅ Engine assets deleted successfully');
136
+ } else {
137
+ console.log('⚠️ Engine assets not found, skipping deletion');
138
+ }
139
+ }
140
+
141
+ // Run the script
142
+ generateDependenciesFile();
143
+ deleteEngineAssets();
@@ -0,0 +1,89 @@
1
+ # Git LFS tracking for common large file types
2
+
3
+ # 3D Models
4
+ *.fbx filter=lfs diff=lfs merge=lfs -text
5
+ *.obj filter=lfs diff=lfs merge=lfs -text
6
+ *.dae filter=lfs diff=lfs merge=lfs -text
7
+ *.3ds filter=lfs diff=lfs merge=lfs -text
8
+ *.blend filter=lfs diff=lfs merge=lfs -text
9
+ *.max filter=lfs diff=lfs merge=lfs -text
10
+ *.maya filter=lfs diff=lfs merge=lfs -text
11
+ *.mb filter=lfs diff=lfs merge=lfs -text
12
+ *.ma filter=lfs diff=lfs merge=lfs -text
13
+ *.glb filter=lfs diff=lfs merge=lfs -text
14
+ *.gltf filter=lfs diff=lfs merge=lfs -text
15
+
16
+ # Textures and Images
17
+ *.png filter=lfs diff=lfs merge=lfs -text
18
+ *.jpg filter=lfs diff=lfs merge=lfs -text
19
+ *.jpeg filter=lfs diff=lfs merge=lfs -text
20
+ *.tga filter=lfs diff=lfs merge=lfs -text
21
+ *.tiff filter=lfs diff=lfs merge=lfs -text
22
+ *.tif filter=lfs diff=lfs merge=lfs -text
23
+ *.bmp filter=lfs diff=lfs merge=lfs -text
24
+ *.psd filter=lfs diff=lfs merge=lfs -text
25
+ *.exr filter=lfs diff=lfs merge=lfs -text
26
+ *.hdr filter=lfs diff=lfs merge=lfs -text
27
+ *.dds filter=lfs diff=lfs merge=lfs -text
28
+ *.ktx filter=lfs diff=lfs merge=lfs -text
29
+ *.ktx2 filter=lfs diff=lfs merge=lfs -text
30
+
31
+ # Audio Files
32
+ *.wav filter=lfs diff=lfs merge=lfs -text
33
+ *.mp3 filter=lfs diff=lfs merge=lfs -text
34
+ *.ogg filter=lfs diff=lfs merge=lfs -text
35
+ *.flac filter=lfs diff=lfs merge=lfs -text
36
+ *.aac filter=lfs diff=lfs merge=lfs -text
37
+ *.m4a filter=lfs diff=lfs merge=lfs -text
38
+ *.wma filter=lfs diff=lfs merge=lfs -text
39
+ *.aiff filter=lfs diff=lfs merge=lfs -text
40
+
41
+ # Video Files
42
+ *.mp4 filter=lfs diff=lfs merge=lfs -text
43
+ *.mov filter=lfs diff=lfs merge=lfs -text
44
+ *.avi filter=lfs diff=lfs merge=lfs -text
45
+ *.mkv filter=lfs diff=lfs merge=lfs -text
46
+ *.webm filter=lfs diff=lfs merge=lfs -text
47
+ *.wmv filter=lfs diff=lfs merge=lfs -text
48
+ *.flv filter=lfs diff=lfs merge=lfs -text
49
+
50
+ # Fonts
51
+ *.ttf filter=lfs diff=lfs merge=lfs -text
52
+ *.otf filter=lfs diff=lfs merge=lfs -text
53
+ *.woff filter=lfs diff=lfs merge=lfs -text
54
+ *.woff2 filter=lfs diff=lfs merge=lfs -text
55
+
56
+ # Archives and Packages
57
+ *.zip filter=lfs diff=lfs merge=lfs -text
58
+ *.rar filter=lfs diff=lfs merge=lfs -text
59
+ *.7z filter=lfs diff=lfs merge=lfs -text
60
+ *.tar filter=lfs diff=lfs merge=lfs -text
61
+ *.gz filter=lfs diff=lfs merge=lfs -text
62
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
63
+
64
+ # Game Engine Specific Files
65
+ *.unity filter=lfs diff=lfs merge=lfs -text
66
+ *.unitypackage filter=lfs diff=lfs merge=lfs -text
67
+ *.asset filter=lfs diff=lfs merge=lfs -text
68
+ *.prefab filter=lfs diff=lfs merge=lfs -text
69
+
70
+ # Document Files (large ones)
71
+ *.pdf filter=lfs diff=lfs merge=lfs -text
72
+ *.doc filter=lfs diff=lfs merge=lfs -text
73
+ *.docx filter=lfs diff=lfs merge=lfs -text
74
+ *.ppt filter=lfs diff=lfs merge=lfs -text
75
+ *.pptx filter=lfs diff=lfs merge=lfs -text
76
+
77
+ # Binary executables and libraries
78
+ *.exe filter=lfs diff=lfs merge=lfs -text
79
+ *.dll filter=lfs diff=lfs merge=lfs -text
80
+ *.so filter=lfs diff=lfs merge=lfs -text
81
+ *.dylib filter=lfs diff=lfs merge=lfs -text
82
+ *.a filter=lfs diff=lfs merge=lfs -text
83
+ *.lib filter=lfs diff=lfs merge=lfs -text
84
+
85
+ # Data files
86
+ *.dat filter=lfs diff=lfs merge=lfs -text
87
+ *.data filter=lfs diff=lfs merge=lfs -text
88
+ *.cache filter=lfs diff=lfs merge=lfs -text
89
+ *.tmp filter=lfs diff=lfs merge=lfs -text
@@ -0,0 +1,90 @@
1
+ name: Publish to npm
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ version_type:
7
+ description: 'Version bump type'
8
+ required: true
9
+ type: choice
10
+ options:
11
+ - patch
12
+ - minor
13
+ - major
14
+ default: 'patch'
15
+
16
+ permissions:
17
+ id-token: write # Required for OIDC
18
+ contents: write
19
+
20
+ jobs:
21
+ publish:
22
+ runs-on: ubuntu-latest
23
+ steps:
24
+ - name: Checkout repository
25
+ uses: actions/checkout@v4
26
+ with:
27
+ token: ${{ secrets.GITHUB_TOKEN }}
28
+ lfs: true
29
+
30
+ - name: Setup pnpm
31
+ uses: pnpm/action-setup@v4
32
+ with:
33
+ version: 9
34
+
35
+ - name: Setup Node.js
36
+ uses: actions/setup-node@v4
37
+ with:
38
+ node-version: '20'
39
+ registry-url: 'https://registry.npmjs.org'
40
+ cache: 'pnpm'
41
+
42
+ - name: Update npm to latest
43
+ run: npm install -g npm@latest
44
+
45
+ - name: Install dependencies
46
+ run: pnpm install
47
+
48
+ - name: Configure git
49
+ run: |
50
+ git config user.name "github-actions[bot]"
51
+ git config user.email "github-actions[bot]@users.noreply.github.com"
52
+
53
+ - name: Bump version
54
+ id: version
55
+ run: |
56
+ # Get current version
57
+ CURRENT_VERSION=$(node -p "require('./package.json').version")
58
+ echo "Current version: $CURRENT_VERSION"
59
+
60
+ # Bump version using npm (doesn't require npm auth)
61
+ npm version ${{ github.event.inputs.version_type }} --no-git-tag-version
62
+
63
+ # Get new version
64
+ NEW_VERSION=$(node -p "require('./package.json').version")
65
+ echo "New version: $NEW_VERSION"
66
+ echo "new_version=$NEW_VERSION" >> $GITHUB_OUTPUT
67
+
68
+ - name: Build
69
+ run: pnpm build
70
+
71
+ - name: Publish to npm
72
+ run: pnpm publish --no-git-checks
73
+
74
+ - name: Commit and push version bump
75
+ run: |
76
+ git add package.json
77
+ git commit -m "chore: bump version to ${{ steps.version.outputs.new_version }}"
78
+ git tag "v${{ steps.version.outputs.new_version }}"
79
+ git push
80
+ git push --tags
81
+
82
+ - name: Create GitHub Release
83
+ uses: softprops/action-gh-release@v2
84
+ with:
85
+ tag_name: v${{ steps.version.outputs.new_version }}
86
+ name: v${{ steps.version.outputs.new_version }}
87
+ generate_release_notes: true
88
+ env:
89
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
90
+