cyclops-clientdevbridge-cli 0.1.1

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 (112) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/LICENSE +21 -0
  3. package/README.md +218 -0
  4. package/dist/artifacts.d.ts +56 -0
  5. package/dist/artifacts.d.ts.map +1 -0
  6. package/dist/artifacts.js +58 -0
  7. package/dist/artifacts.js.map +1 -0
  8. package/dist/cli.d.ts +3 -0
  9. package/dist/cli.d.ts.map +1 -0
  10. package/dist/cli.js +348 -0
  11. package/dist/cli.js.map +1 -0
  12. package/dist/commands/compare.d.ts +27 -0
  13. package/dist/commands/compare.d.ts.map +1 -0
  14. package/dist/commands/compare.js +209 -0
  15. package/dist/commands/compare.js.map +1 -0
  16. package/dist/commands/context.d.ts +25 -0
  17. package/dist/commands/context.d.ts.map +1 -0
  18. package/dist/commands/context.js +36 -0
  19. package/dist/commands/context.js.map +1 -0
  20. package/dist/commands/doctor.d.ts +31 -0
  21. package/dist/commands/doctor.d.ts.map +1 -0
  22. package/dist/commands/doctor.js +234 -0
  23. package/dist/commands/doctor.js.map +1 -0
  24. package/dist/commands/hotswap.d.ts +7 -0
  25. package/dist/commands/hotswap.d.ts.map +1 -0
  26. package/dist/commands/hotswap.js +76 -0
  27. package/dist/commands/hotswap.js.map +1 -0
  28. package/dist/commands/input.d.ts +53 -0
  29. package/dist/commands/input.d.ts.map +1 -0
  30. package/dist/commands/input.js +204 -0
  31. package/dist/commands/input.js.map +1 -0
  32. package/dist/commands/inspect.d.ts +19 -0
  33. package/dist/commands/inspect.d.ts.map +1 -0
  34. package/dist/commands/inspect.js +90 -0
  35. package/dist/commands/inspect.js.map +1 -0
  36. package/dist/commands/lifecycle.d.ts +29 -0
  37. package/dist/commands/lifecycle.d.ts.map +1 -0
  38. package/dist/commands/lifecycle.js +201 -0
  39. package/dist/commands/lifecycle.js.map +1 -0
  40. package/dist/commands/snapshot.d.ts +37 -0
  41. package/dist/commands/snapshot.d.ts.map +1 -0
  42. package/dist/commands/snapshot.js +133 -0
  43. package/dist/commands/snapshot.js.map +1 -0
  44. package/dist/commands/world.d.ts +27 -0
  45. package/dist/commands/world.d.ts.map +1 -0
  46. package/dist/commands/world.js +203 -0
  47. package/dist/commands/world.js.map +1 -0
  48. package/dist/detect.d.ts +58 -0
  49. package/dist/detect.d.ts.map +1 -0
  50. package/dist/detect.js +185 -0
  51. package/dist/detect.js.map +1 -0
  52. package/dist/errors.d.ts +24 -0
  53. package/dist/errors.d.ts.map +1 -0
  54. package/dist/errors.js +37 -0
  55. package/dist/errors.js.map +1 -0
  56. package/dist/hotswap.d.ts +58 -0
  57. package/dist/hotswap.d.ts.map +1 -0
  58. package/dist/hotswap.js +284 -0
  59. package/dist/hotswap.js.map +1 -0
  60. package/dist/index.d.ts +11 -0
  61. package/dist/index.d.ts.map +1 -0
  62. package/dist/index.js +11 -0
  63. package/dist/index.js.map +1 -0
  64. package/dist/initscript.d.ts +49 -0
  65. package/dist/initscript.d.ts.map +1 -0
  66. package/dist/initscript.js +202 -0
  67. package/dist/initscript.js.map +1 -0
  68. package/dist/java.d.ts +47 -0
  69. package/dist/java.d.ts.map +1 -0
  70. package/dist/java.js +114 -0
  71. package/dist/java.js.map +1 -0
  72. package/dist/launcher.d.ts +104 -0
  73. package/dist/launcher.d.ts.map +1 -0
  74. package/dist/launcher.js +609 -0
  75. package/dist/launcher.js.map +1 -0
  76. package/dist/loopback.d.ts +17 -0
  77. package/dist/loopback.d.ts.map +1 -0
  78. package/dist/loopback.js +19 -0
  79. package/dist/loopback.js.map +1 -0
  80. package/dist/output.d.ts +21 -0
  81. package/dist/output.d.ts.map +1 -0
  82. package/dist/output.js +41 -0
  83. package/dist/output.js.map +1 -0
  84. package/dist/paths.d.ts +23 -0
  85. package/dist/paths.d.ts.map +1 -0
  86. package/dist/paths.js +47 -0
  87. package/dist/paths.js.map +1 -0
  88. package/dist/protocol/client.d.ts +35 -0
  89. package/dist/protocol/client.d.ts.map +1 -0
  90. package/dist/protocol/client.js +170 -0
  91. package/dist/protocol/client.js.map +1 -0
  92. package/dist/protocol/types.d.ts +114 -0
  93. package/dist/protocol/types.d.ts.map +1 -0
  94. package/dist/protocol/types.js +38 -0
  95. package/dist/protocol/types.js.map +1 -0
  96. package/dist/session.d.ts +77 -0
  97. package/dist/session.d.ts.map +1 -0
  98. package/dist/session.js +79 -0
  99. package/dist/session.js.map +1 -0
  100. package/dist/snapshot/model.d.ts +327 -0
  101. package/dist/snapshot/model.d.ts.map +1 -0
  102. package/dist/snapshot/model.js +91 -0
  103. package/dist/snapshot/model.js.map +1 -0
  104. package/dist/snapshot/outline.d.ts +35 -0
  105. package/dist/snapshot/outline.d.ts.map +1 -0
  106. package/dist/snapshot/outline.js +135 -0
  107. package/dist/snapshot/outline.js.map +1 -0
  108. package/dist/xvfb.d.ts +30 -0
  109. package/dist/xvfb.d.ts.map +1 -0
  110. package/dist/xvfb.js +66 -0
  111. package/dist/xvfb.js.map +1 -0
  112. package/package.json +66 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect.js","sourceRoot":"","sources":["../src/detect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Exit codes are part of the CLI's contract with the agent driving it:
3
+ * 0 success, 1 a protocol-level failure, 2 a session or connection failure.
4
+ */
5
+ export declare const EXIT_OK = 0;
6
+ export declare const EXIT_PROTOCOL = 1;
7
+ export declare const EXIT_SESSION = 2;
8
+ /** A failure that should be reported with a specific exit code, without a stack trace. */
9
+ export declare class CliError extends Error {
10
+ readonly exitCode: number;
11
+ readonly hint: string | undefined;
12
+ constructor(message: string, exitCode?: number, hint?: string);
13
+ }
14
+ /** The mod answered with a JSON-RPC error object. */
15
+ export declare class ProtocolError extends CliError {
16
+ readonly code: number;
17
+ readonly data: unknown;
18
+ constructor(code: number, message: string, data?: unknown);
19
+ }
20
+ /** Nothing is listening, or the session is stale. Always carries the same actionable hint. */
21
+ export declare class SessionError extends CliError {
22
+ constructor(message: string, hint?: string);
23
+ }
24
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,OAAO,IAAI,CAAC;AACzB,eAAO,MAAM,aAAa,IAAI,CAAC;AAC/B,eAAO,MAAM,YAAY,IAAI,CAAC;AAE9B,0FAA0F;AAC1F,qBAAa,QAAS,SAAQ,KAAK;IACjC,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;gBAEtB,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAqB,EAAE,IAAI,CAAC,EAAE,MAAM;CAMnF;AAED,qDAAqD;AACrD,qBAAa,aAAc,SAAQ,QAAQ;IACzC,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,IAAI,EAAE,OAAO,CAAC;gBAEX,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO;CAMjE;AAED,8FAA8F;AAC9F,qBAAa,YAAa,SAAQ,QAAQ;gBACrB,OAAO,EAAE,MAAM,EAAE,IAAI,SAAuG;CAIhJ"}
package/dist/errors.js ADDED
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Exit codes are part of the CLI's contract with the agent driving it:
3
+ * 0 success, 1 a protocol-level failure, 2 a session or connection failure.
4
+ */
5
+ export const EXIT_OK = 0;
6
+ export const EXIT_PROTOCOL = 1;
7
+ export const EXIT_SESSION = 2;
8
+ /** A failure that should be reported with a specific exit code, without a stack trace. */
9
+ export class CliError extends Error {
10
+ exitCode;
11
+ hint;
12
+ constructor(message, exitCode = EXIT_SESSION, hint) {
13
+ super(message);
14
+ this.name = 'CliError';
15
+ this.exitCode = exitCode;
16
+ this.hint = hint;
17
+ }
18
+ }
19
+ /** The mod answered with a JSON-RPC error object. */
20
+ export class ProtocolError extends CliError {
21
+ code;
22
+ data;
23
+ constructor(code, message, data) {
24
+ super(message, EXIT_PROTOCOL);
25
+ this.name = 'ProtocolError';
26
+ this.code = code;
27
+ this.data = data;
28
+ }
29
+ }
30
+ /** Nothing is listening, or the session is stale. Always carries the same actionable hint. */
31
+ export class SessionError extends CliError {
32
+ constructor(message, hint = "Run 'clientdevbridge status' to see the session state, or 'clientdevbridge logs' for the game log.") {
33
+ super(message, EXIT_SESSION, hint);
34
+ this.name = 'SessionError';
35
+ }
36
+ }
37
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC;AACzB,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC;AAC/B,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC;AAE9B,0FAA0F;AAC1F,MAAM,OAAO,QAAS,SAAQ,KAAK;IACjB,QAAQ,CAAS;IACjB,IAAI,CAAqB;IAEzC,YAAmB,OAAe,EAAE,WAAmB,YAAY,EAAE,IAAa;QAChF,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,qDAAqD;AACrD,MAAM,OAAO,aAAc,SAAQ,QAAQ;IACzB,IAAI,CAAS;IACb,IAAI,CAAU;IAE9B,YAAmB,IAAY,EAAE,OAAe,EAAE,IAAc;QAC9D,KAAK,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,8FAA8F;AAC9F,MAAM,OAAO,YAAa,SAAQ,QAAQ;IACxC,YAAmB,OAAe,EAAE,IAAI,GAAG,oGAAoG;QAC7I,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF"}
@@ -0,0 +1,58 @@
1
+ export interface ClassFile {
2
+ readonly binaryName: string;
3
+ readonly file: string;
4
+ readonly hash: string;
5
+ }
6
+ /**
7
+ * Finds every compiled class under a project's build output, keyed by its binary name.
8
+ *
9
+ * Both loaders compile the shared sources into each loader module, so the same binary name can
10
+ * appear more than once; the first one found wins, which matches what the running JVM loaded.
11
+ */
12
+ export declare function scanClasses(projectDir: string): Map<string, ClassFile>;
13
+ export interface SnapshotFile {
14
+ version: 1;
15
+ takenAt: string;
16
+ classes: Record<string, string>;
17
+ }
18
+ export declare function readPreviousSnapshot(stateDir: string): SnapshotFile | null;
19
+ export declare function writeSnapshot(stateDir: string, classes: Map<string, ClassFile>): void;
20
+ /**
21
+ * Which classes changed since the last hotswap or start.
22
+ *
23
+ * With no previous snapshot nothing is reported as changed: swapping every class in the project
24
+ * on the first run would be slow and would mostly fail, and the useful baseline is "since I last
25
+ * looked", not "since the JVM started".
26
+ */
27
+ export declare function diffClasses(previous: SnapshotFile | null, current: Map<string, ClassFile>): {
28
+ changed: ClassFile[];
29
+ added: string[];
30
+ };
31
+ export interface SwapResult {
32
+ readonly swapped: string[];
33
+ /** Classes the JVM refused to redefine, which is what actually forces a restart. */
34
+ readonly failed: {
35
+ name: string;
36
+ reason: string;
37
+ }[];
38
+ /**
39
+ * Classes not loaded in the client yet. These are not failures: the new definition is simply
40
+ * picked up the first time the class is used, so reporting them as needing a restart would send
41
+ * the caller off to do something pointless.
42
+ */
43
+ readonly pending: string[];
44
+ readonly needsRestart: boolean;
45
+ }
46
+ /**
47
+ * Redefines classes in the running client over JDWP.
48
+ *
49
+ * The JDI classes live in the `jdk.jdi` module, which is not on a plain `java` command's module
50
+ * path, so rather than shipping a Java helper jar the swap is driven by a small Java source file
51
+ * compiled and run on demand with `java --add-modules jdk.jdi`. That keeps the npm package free of
52
+ * a compiled Java artifact, which would otherwise have to be rebuilt and re-signed on every release.
53
+ */
54
+ export declare function redefineClasses(jdwpPort: number, classes: readonly ClassFile[]): SwapResult;
55
+ /** True when the running JVM is a JetBrains Runtime, which can redefine far more than stock HotSpot. */
56
+ export declare function detectJetBrainsRuntime(): boolean;
57
+ export declare function gradleCompile(projectDir: string, gradleWrapper: string, javaVersion?: number): string;
58
+ //# sourceMappingURL=hotswap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hotswap.d.ts","sourceRoot":"","sources":["../src/hotswap.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CA+BtE;AAiBD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,CAAC,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAU1E;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAI,CAQrF;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,YAAY,GAAG,IAAI,EAC7B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,GAC9B;IAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAe3C;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAC3B,oFAAoF;IACpF,QAAQ,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACpD;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,SAAS,EAAE,GAAG,UAAU,CAsD3F;AAaD,wGAAwG;AACxG,wBAAgB,sBAAsB,IAAI,OAAO,CAQhD;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,SAAK,GAAG,MAAM,CAkBjG"}
@@ -0,0 +1,284 @@
1
+ import { execFileSync, spawnSync } from 'node:child_process';
2
+ import * as crypto from 'node:crypto';
3
+ import * as fs from 'node:fs';
4
+ import * as os from 'node:os';
5
+ import * as path from 'node:path';
6
+ import { CliError } from './errors.js';
7
+ import { resolveJavaHome } from './java.js';
8
+ /**
9
+ * Finds every compiled class under a project's build output, keyed by its binary name.
10
+ *
11
+ * Both loaders compile the shared sources into each loader module, so the same binary name can
12
+ * appear more than once; the first one found wins, which matches what the running JVM loaded.
13
+ */
14
+ export function scanClasses(projectDir) {
15
+ const classes = new Map();
16
+ const roots = [];
17
+ for (const entry of fs.readdirSync(projectDir, { withFileTypes: true })) {
18
+ if (!entry.isDirectory()) {
19
+ continue;
20
+ }
21
+ const candidate = path.join(projectDir, entry.name, 'build', 'classes', 'java', 'main');
22
+ if (fs.existsSync(candidate)) {
23
+ roots.push(candidate);
24
+ }
25
+ }
26
+ const single = path.join(projectDir, 'build', 'classes', 'java', 'main');
27
+ if (fs.existsSync(single)) {
28
+ roots.push(single);
29
+ }
30
+ for (const root of roots) {
31
+ for (const file of walkClassFiles(root)) {
32
+ const binaryName = path
33
+ .relative(root, file)
34
+ .replace(/\.class$/, '')
35
+ .split(path.sep)
36
+ .join('.');
37
+ if (!classes.has(binaryName)) {
38
+ classes.set(binaryName, { binaryName, file, hash: hashFile(file) });
39
+ }
40
+ }
41
+ }
42
+ return classes;
43
+ }
44
+ function* walkClassFiles(directory) {
45
+ for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {
46
+ const full = path.join(directory, entry.name);
47
+ if (entry.isDirectory()) {
48
+ yield* walkClassFiles(full);
49
+ }
50
+ else if (entry.name.endsWith('.class')) {
51
+ yield full;
52
+ }
53
+ }
54
+ }
55
+ function hashFile(file) {
56
+ return crypto.createHash('sha256').update(fs.readFileSync(file)).digest('hex');
57
+ }
58
+ export function readPreviousSnapshot(stateDir) {
59
+ const file = path.join(stateDir, 'classes.json');
60
+ if (!fs.existsSync(file)) {
61
+ return null;
62
+ }
63
+ try {
64
+ return JSON.parse(fs.readFileSync(file, 'utf8'));
65
+ }
66
+ catch {
67
+ return null;
68
+ }
69
+ }
70
+ export function writeSnapshot(stateDir, classes) {
71
+ fs.mkdirSync(stateDir, { recursive: true });
72
+ const record = {};
73
+ for (const [name, entry] of classes) {
74
+ record[name] = entry.hash;
75
+ }
76
+ const snapshot = { version: 1, takenAt: new Date().toISOString(), classes: record };
77
+ fs.writeFileSync(path.join(stateDir, 'classes.json'), `${JSON.stringify(snapshot, null, 2)}\n`, 'utf8');
78
+ }
79
+ /**
80
+ * Which classes changed since the last hotswap or start.
81
+ *
82
+ * With no previous snapshot nothing is reported as changed: swapping every class in the project
83
+ * on the first run would be slow and would mostly fail, and the useful baseline is "since I last
84
+ * looked", not "since the JVM started".
85
+ */
86
+ export function diffClasses(previous, current) {
87
+ if (previous === null) {
88
+ return { changed: [], added: [] };
89
+ }
90
+ const changed = [];
91
+ const added = [];
92
+ for (const [name, entry] of current) {
93
+ const before = previous.classes[name];
94
+ if (before === undefined) {
95
+ added.push(name);
96
+ }
97
+ else if (before !== entry.hash) {
98
+ changed.push(entry);
99
+ }
100
+ }
101
+ return { changed, added };
102
+ }
103
+ /**
104
+ * Redefines classes in the running client over JDWP.
105
+ *
106
+ * The JDI classes live in the `jdk.jdi` module, which is not on a plain `java` command's module
107
+ * path, so rather than shipping a Java helper jar the swap is driven by a small Java source file
108
+ * compiled and run on demand with `java --add-modules jdk.jdi`. That keeps the npm package free of
109
+ * a compiled Java artifact, which would otherwise have to be rebuilt and re-signed on every release.
110
+ */
111
+ export function redefineClasses(jdwpPort, classes) {
112
+ if (classes.length === 0) {
113
+ return { swapped: [], failed: [], pending: [], needsRestart: false };
114
+ }
115
+ const workDir = fs.mkdtempSync(path.join(os.tmpdir(), 'clientdevbridge-hotswap-'));
116
+ try {
117
+ const helper = path.join(workDir, 'HotSwap.java');
118
+ fs.writeFileSync(helper, HOT_SWAP_SOURCE, 'utf8');
119
+ const payload = path.join(workDir, 'classes.txt');
120
+ fs.writeFileSync(payload, classes.map((entry) => `${entry.binaryName}\t${entry.file}`).join('\n'), 'utf8');
121
+ const result = spawnSync(javaExecutable(), ['--add-modules', 'jdk.jdi', helper, String(jdwpPort), payload], { encoding: 'utf8', timeout: 120_000 });
122
+ if (result.error !== undefined) {
123
+ throw new CliError(`Could not run the hotswap helper: ${result.error.message}`, 2);
124
+ }
125
+ const stdout = result.stdout ?? '';
126
+ const swapped = [];
127
+ const failed = [];
128
+ const pending = [];
129
+ for (const rawLine of stdout.split('\n')) {
130
+ const okMatch = /^OK\t(.+)$/.exec(rawLine);
131
+ if (okMatch !== null) {
132
+ swapped.push(okMatch[1]);
133
+ continue;
134
+ }
135
+ const pendingMatch = /^PENDING\t(.+)$/.exec(rawLine);
136
+ if (pendingMatch !== null) {
137
+ pending.push(pendingMatch[1]);
138
+ continue;
139
+ }
140
+ const failMatch = /^FAIL\t([^\t]+)\t(.*)$/.exec(rawLine);
141
+ if (failMatch !== null) {
142
+ failed.push({ name: failMatch[1], reason: failMatch[2] });
143
+ }
144
+ }
145
+ if (swapped.length === 0 && failed.length === 0 && pending.length === 0) {
146
+ throw new CliError(`The hotswap helper produced no result.\n${result.stderr ?? ''}`, 2, `Check that the client was started with --jdwp-port ${jdwpPort}.`);
147
+ }
148
+ return { swapped, failed, pending, needsRestart: failed.length > 0 };
149
+ }
150
+ finally {
151
+ fs.rmSync(workDir, { recursive: true, force: true });
152
+ }
153
+ }
154
+ function javaExecutable() {
155
+ const javaHome = process.env['JAVA_HOME'];
156
+ if (javaHome !== undefined && javaHome.length > 0) {
157
+ const candidate = path.join(javaHome, 'bin', process.platform === 'win32' ? 'java.exe' : 'java');
158
+ if (fs.existsSync(candidate)) {
159
+ return candidate;
160
+ }
161
+ }
162
+ return 'java';
163
+ }
164
+ /** True when the running JVM is a JetBrains Runtime, which can redefine far more than stock HotSpot. */
165
+ export function detectJetBrainsRuntime() {
166
+ try {
167
+ const output = spawnSync(javaExecutable(), ['-version'], { encoding: 'utf8' }).stderr ?? '';
168
+ return /jetbrains/i.test(output) || /JBR/.test(output);
169
+ }
170
+ catch {
171
+ return false;
172
+ }
173
+ }
174
+ export function gradleCompile(projectDir, gradleWrapper, javaVersion = 21) {
175
+ // Same reason as in the launcher: Gradle runs on JAVA_HOME, and the loader plugins refuse to
176
+ // configure at all when that JDK is older than the Minecraft version needs.
177
+ const java = resolveJavaHome(javaVersion);
178
+ try {
179
+ return execFileSync(gradleWrapper, ['compileJava', '--console=plain', '--no-daemon'], {
180
+ cwd: projectDir,
181
+ encoding: 'utf8',
182
+ timeout: 600_000,
183
+ env: { ...process.env, ...(java.javaHome === null ? {} : { JAVA_HOME: java.javaHome }) },
184
+ });
185
+ }
186
+ catch (error) {
187
+ const failure = error;
188
+ throw new CliError(`Compilation failed, so nothing was swapped.\n${failure.stdout ?? ''}${failure.stderr ?? ''}`, 1);
189
+ }
190
+ }
191
+ /**
192
+ * A single-file Java program run with `java HotSwap.java`, which the launcher compiles in memory.
193
+ */
194
+ const HOT_SWAP_SOURCE = `import com.sun.jdi.VirtualMachine;
195
+ import com.sun.jdi.ReferenceType;
196
+ import com.sun.jdi.connect.AttachingConnector;
197
+ import com.sun.jdi.connect.Connector;
198
+ import com.sun.jdi.Bootstrap;
199
+
200
+ import java.nio.file.Files;
201
+ import java.nio.file.Path;
202
+ import java.util.ArrayList;
203
+ import java.util.HashMap;
204
+ import java.util.List;
205
+ import java.util.Map;
206
+
207
+ /**
208
+ * Attaches to the running client and redefines the classes listed in the given file.
209
+ *
210
+ * Each class is redefined on its own, so one rejected class (a schema change HotSpot cannot apply)
211
+ * does not stop the rest from going through.
212
+ */
213
+ public class HotSwap {
214
+
215
+ public static void main(String[] args) throws Exception {
216
+ int port = Integer.parseInt(args[0]);
217
+ List<String[]> entries = new ArrayList<>();
218
+ for (String line : Files.readAllLines(Path.of(args[1]))) {
219
+ if (!line.isBlank()) {
220
+ entries.add(line.split("\\\\t", 2));
221
+ }
222
+ }
223
+
224
+ AttachingConnector connector = null;
225
+ for (Connector candidate : Bootstrap.virtualMachineManager().attachingConnectors()) {
226
+ if ("com.sun.jdi.SocketAttach".equals(candidate.name())) {
227
+ connector = (AttachingConnector) candidate;
228
+ break;
229
+ }
230
+ }
231
+ if (connector == null) {
232
+ System.err.println("No SocketAttach connector is available in this JDK.");
233
+ System.exit(2);
234
+ }
235
+
236
+ Map<String, Connector.Argument> arguments = connector.defaultArguments();
237
+ arguments.get("hostname").setValue("127.0.0.1");
238
+ arguments.get("port").setValue(String.valueOf(port));
239
+
240
+ VirtualMachine vm;
241
+ try {
242
+ vm = connector.attach(arguments);
243
+ } catch (Exception e) {
244
+ System.err.println("Could not attach to 127.0.0.1:" + port + ": " + e.getMessage());
245
+ System.exit(2);
246
+ return;
247
+ }
248
+
249
+ try {
250
+ if (!vm.canRedefineClasses()) {
251
+ System.err.println("This JVM does not support class redefinition.");
252
+ System.exit(2);
253
+ }
254
+ for (String[] entry : entries) {
255
+ String binaryName = entry[0];
256
+ Path classFile = Path.of(entry[1]);
257
+ List<ReferenceType> loaded = vm.classesByName(binaryName);
258
+ if (loaded.isEmpty()) {
259
+ // Not loaded yet: the new definition is picked up on first use, so this is
260
+ // not a failure and must not send the caller off to restart.
261
+ System.out.println("PENDING\\t" + binaryName);
262
+ continue;
263
+ }
264
+ byte[] bytes = Files.readAllBytes(classFile);
265
+ Map<ReferenceType, byte[]> redefinition = new HashMap<>();
266
+ for (ReferenceType type : loaded) {
267
+ redefinition.put(type, bytes);
268
+ }
269
+ try {
270
+ vm.redefineClasses(redefinition);
271
+ System.out.println("OK\\t" + binaryName);
272
+ } catch (UnsupportedOperationException e) {
273
+ System.out.println("FAIL\\t" + binaryName + "\\tschema change: " + e.getMessage());
274
+ } catch (Exception e) {
275
+ System.out.println("FAIL\\t" + binaryName + "\\t" + e.getClass().getSimpleName() + ": " + e.getMessage());
276
+ }
277
+ }
278
+ } finally {
279
+ vm.dispose();
280
+ }
281
+ }
282
+ }
283
+ `;
284
+ //# sourceMappingURL=hotswap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hotswap.js","sourceRoot":"","sources":["../src/hotswap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export * from './artifacts.js';
2
+ export * from './detect.js';
3
+ export * from './errors.js';
4
+ export * from './initscript.js';
5
+ export * from './launcher.js';
6
+ export * from './paths.js';
7
+ export * from './protocol/client.js';
8
+ export * from './protocol/types.js';
9
+ export * from './session.js';
10
+ export * from './xvfb.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,11 @@
1
+ export * from './artifacts.js';
2
+ export * from './detect.js';
3
+ export * from './errors.js';
4
+ export * from './initscript.js';
5
+ export * from './launcher.js';
6
+ export * from './paths.js';
7
+ export * from './protocol/client.js';
8
+ export * from './protocol/types.js';
9
+ export * from './session.js';
10
+ export * from './xvfb.js';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC"}
@@ -0,0 +1,49 @@
1
+ import type { Loader } from './detect.js';
2
+ export interface InitScriptOptions {
3
+ readonly minecraftVersion: string;
4
+ readonly loader: Loader;
5
+ readonly bridgeVersion: string;
6
+ readonly port: number;
7
+ readonly evalEnabled: boolean;
8
+ readonly world: string | null;
9
+ readonly username: string;
10
+ readonly width: number;
11
+ readonly height: number;
12
+ readonly jdwpPort: number | null;
13
+ /** The consumer project root, so the mod can resolve committed world templates. */
14
+ readonly projectDir: string;
15
+ /**
16
+ * The Gradle path of the module whose client is being launched, e.g. `:loader-neoforge`, or an
17
+ * empty string for a single-module project.
18
+ */
19
+ readonly targetProjectPath: string;
20
+ /** Extra `-D` properties, exposed for tests and for `--gradle-args` style overrides. */
21
+ readonly extraJvmArgs?: readonly string[];
22
+ }
23
+ /**
24
+ * Generates the init script the CLI injects at launch, so that a consumer repository never has to
25
+ * be edited to be driveable (plan §4).
26
+ *
27
+ * The run task is configured through `JavaExec` rather than through Loom's or NeoGradle's own run
28
+ * DSL: both plugins' `runClient` tasks are `JavaExec` subclasses, so one code path covers both
29
+ * loaders and does not break when either plugin reshuffles its extensions.
30
+ */
31
+ export declare function renderInitScript(options: InitScriptOptions): string;
32
+ /**
33
+ * The client options that make screenshots reproducible from one run to the next.
34
+ *
35
+ * Anything that animates, adapts to the machine, or depends on focus is turned off; without this,
36
+ * `compare` against a golden image is noise.
37
+ */
38
+ export declare const DETERMINISM_OPTIONS: Readonly<Record<string, string>>;
39
+ export interface PinResult {
40
+ readonly created: boolean;
41
+ readonly changed: readonly string[];
42
+ }
43
+ /**
44
+ * Writes the determinism options into the run directory's `options.txt`.
45
+ *
46
+ * Keys the caller did not ask about are preserved, so a hand-tuned dev options file survives.
47
+ */
48
+ export declare function pinOptions(runDir: string): PinResult;
49
+ //# sourceMappingURL=initscript.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initscript.d.ts","sourceRoot":"","sources":["../src/initscript.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,mFAAmF;IACnF,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,wFAAwF;IACxF,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3C;AAMD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAkInE;AAED;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAmBhE,CAAC;AAEF,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAiCpD"}