@helix3/helix-cli 0.1.20-helix3.399 → 0.1.21-helix3.402

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.
package/README.md CHANGED
@@ -346,11 +346,16 @@ A published world ships only its **built bundle**, so there is nothing on the se
346
346
  channel for exactly that reason.
347
347
  - **Limit**: 128 MiB compressed, checked locally before anything is uploaded.
348
348
 
349
- Before upload, module-based multiplayer worlds are checked for server realizability: every bank must
350
- be published with the declared checksum and the shared manifest validator must accept all module
351
- budgets under the 100,000 tick-node ceiling. Fix the named module/bank when this gate refuses a
352
- publish. For exceptional recovery only, `--skip-realizability-check` bypasses this check; flat-v0
353
- worlds are unaffected.
349
+ Before upload, multiplayer worlds that install modules are checked for server realizability. A
350
+ module with a `bank` reference must name a bank that is published with the declared checksum (bank
351
+ modules belong to the default `multiplayer` block; the manifest validator refuses one inside a room
352
+ type). A module without `bank` is inline: its rules are in the manifest, so there is nothing to
353
+ resolve. The modules of every program (the default block and each `multiplayer.roomTypes` entry)
354
+ must then fit the 100,000 tick-node ceiling at the number of players that program's room holds: 24
355
+ for a standard default block, a room type's own `maxPlayers` up to 24, and the declared `maxPlayers`
356
+ up to 64 with `capacityClass: "large"`, never fewer than 2. Fix the named module or bank when this
357
+ gate refuses a publish. For exceptional recovery only, `--skip-realizability-check` bypasses this
358
+ check; worlds without modules are unaffected.
354
359
 
355
360
  The programmatic surface (`publishWorld`, `checkBundle`, `whoAmI`, …) is exported for other CLI
356
361
  modules. Agent integrations should instruct or delegate to the `helix` commands above rather than
@@ -9,7 +9,12 @@ export type PublishedBank = {
9
9
  };
10
10
  export type RealizabilityDeps = {
11
11
  resolveBank(ref: string): Promise<PublishedBank>;
12
- validateBudgets(modules: ModuleDeclaration[], ceiling: number): string[];
12
+ /**
13
+ * `playerCap` is the number of players a room of the modules' program can hold, which is what
14
+ * every per-player budget term is charged at: 24 for a standard default block, a room type's own
15
+ * seats for a type, and up to 64 for a `capacityClass: "large"` program.
16
+ */
17
+ validateBudgets(modules: ModuleDeclaration[], ceiling: number, playerCap: number): string[];
13
18
  };
14
19
  export type RealizabilityFailure = {
15
20
  moduleId: string;
@@ -93,6 +93,13 @@ function asModule(value) {
93
93
  // and `sha256` — none of which is the published field. Guessing is strictly worse than failing
94
94
  // here: if a near-miss field happens to exist, the gate passes on a digest nobody ever agreed on,
95
95
  // which is the exact failure this gate exists to prevent.
96
+ // A module with no `bank` key is INLINE: its rules are in the manifest (helix-manifest refuses a
97
+ // module that has both, and refuses a bank ref inside a room type). A `bank` that is present but
98
+ // unreadable is still a malformed ref, never an inline module.
99
+ const INLINE = '<inline>';
100
+ function isInline(module) {
101
+ return module.bank === undefined || module.bank === null;
102
+ }
96
103
  function checksumOf(value) {
97
104
  if (!value || typeof value !== 'object')
98
105
  return null;
@@ -124,13 +131,14 @@ function registryRealizabilityDeps(apiUrl) {
124
131
  throw err;
125
132
  }
126
133
  },
127
- validateBudgets(modules, ceiling) {
134
+ validateBudgets(modules, ceiling, playerCap) {
128
135
  const contract = manifestContract;
129
136
  const validator = contract.validateModuleBudgets ?? contract.validateMultiplayerBudgets;
130
137
  if (typeof validator !== 'function') {
131
138
  throw new Error('installed helix-manifest does not provide multiplayer budget validation');
132
139
  }
133
- const result = validator(modules, ceiling);
140
+ // A helix-manifest from before large rooms takes two arguments and ignores the third.
141
+ const result = validator(modules, ceiling, playerCap);
134
142
  if (Array.isArray(result))
135
143
  return result.map(String);
136
144
  if (result && typeof result === 'object' && Array.isArray(result.errors)) {
@@ -140,20 +148,77 @@ function registryRealizabilityDeps(apiUrl) {
140
148
  },
141
149
  };
142
150
  }
151
+ // The seat caps the room server clamps a room to. Read from the installed helix-manifest so the gate
152
+ // charges what the validator charges; the literals cover a manifest package that predates the
153
+ // exports, and are the values those constants have.
154
+ function seatCap(name, fallback) {
155
+ const value = manifestContract[name];
156
+ return typeof value === 'number' && Number.isInteger(value) && value > 0 ? value : fallback;
157
+ }
158
+ function declaredMaxPlayers(value, fallback) {
159
+ return typeof value === 'number' && Number.isFinite(value) && value >= 1 ? Math.floor(value) : fallback;
160
+ }
161
+ // The room server never seats fewer than this (helix-colyseus-server tuning, MIN_MAX_CLIENTS), so a
162
+ // program that declares maxPlayers 1 still runs in a room of two.
163
+ const MIN_ROOM_SEATS = 2;
164
+ // Every program of the world that carries modules, with the number of players its room can hold.
165
+ // The default block is a standard room of 24 whatever the world's maxPlayers says, unless it
166
+ // declares `capacityClass: "large"`, which is a room of the declared maxPlayers up to 64. A room
167
+ // type is a room of its own: its own maxPlayers, clamped to 24, or to 64 when the type is large.
168
+ // These are helix-manifest's own numbers (`programPlayerCap`), raised to the server's floor of 2.
169
+ // Room-type modules are inline (helix-manifest refuses a bank ref there), so for a room type this
170
+ // is a budget check; a bank ref that reaches here anyway is resolved like any other.
171
+ function modulePrograms(manifest, multiplayer) {
172
+ const standard = seatCap('PLATFORM_MAX_PLAYERS_PER_ROOM', 24);
173
+ const large = seatCap('PLATFORM_MAX_PLAYERS_PER_LARGE_ROOM', 64);
174
+ const programs = [];
175
+ if (Array.isArray(multiplayer.modules)) {
176
+ programs.push({
177
+ label: '',
178
+ modules: multiplayer.modules,
179
+ playerCap: multiplayer.capacityClass === 'large'
180
+ ? Math.max(MIN_ROOM_SEATS, Math.min(declaredMaxPlayers(manifest.maxPlayers, standard), large))
181
+ : standard,
182
+ });
183
+ }
184
+ const roomTypes = multiplayer.roomTypes;
185
+ if (roomTypes && typeof roomTypes === 'object' && !Array.isArray(roomTypes)) {
186
+ for (const [name, raw] of Object.entries(roomTypes)) {
187
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw))
188
+ continue;
189
+ const type = raw;
190
+ if (!Array.isArray(type.modules))
191
+ continue;
192
+ // Absent, a room type's maxPlayers is 10 (helix-manifest, HelixRoomType).
193
+ const declared = declaredMaxPlayers(type.maxPlayers, 10);
194
+ programs.push({
195
+ label: `roomTypes.${name}: `,
196
+ modules: type.modules,
197
+ playerCap: Math.max(MIN_ROOM_SEATS, Math.min(declared, type.capacityClass === 'large' ? large : standard)),
198
+ });
199
+ }
200
+ }
201
+ return programs;
202
+ }
143
203
  async function checkRealizability(manifest, deps) {
144
204
  if (!manifest || typeof manifest !== 'object')
145
205
  return [];
146
206
  const multiplayer = manifest.multiplayer;
147
207
  if (!multiplayer || typeof multiplayer !== 'object' || Array.isArray(multiplayer))
148
208
  return [];
149
- const modules = multiplayer.modules;
150
- if (!Array.isArray(modules))
151
- return []; // flat-v0 and pre-module multiplayer are deliberately unchanged.
209
+ // flat-v0 and pre-module multiplayer are deliberately unchanged: no program with modules, no work.
210
+ const programs = modulePrograms(manifest, multiplayer);
211
+ if (!programs.length)
212
+ return [];
152
213
  const failures = [];
153
214
  const resolved = new Map();
154
- await Promise.all(modules.map(async (raw, index) => {
215
+ await Promise.all(programs.flatMap((program) => program.modules.map(async (raw, index) => {
155
216
  const module = asModule(raw);
156
- const id = moduleName(module, index);
217
+ const id = program.label + moduleName(module, index);
218
+ // An inline module carries its program in the manifest, so there is no bank for the server to
219
+ // resolve. Only its budget is checked, below.
220
+ if (isInline(module))
221
+ return;
157
222
  const bank = parseBankRef(module.bank);
158
223
  const shown = typeof module.bank === 'string' ? module.bank : JSON.stringify(module.bank);
159
224
  if (!bank) {
@@ -173,29 +238,30 @@ async function checkRealizability(manifest, deps) {
173
238
  catch (err) {
174
239
  failures.push({ moduleId: id, bankRef: bank.ref, reason: err instanceof Error ? err.message : String(err) });
175
240
  }
176
- }));
177
- try {
178
- for (const reason of deps.validateBudgets(modules, exports.TICK_NODE_CEILING)) {
179
- failures.push({
180
- moduleId: modules.map((module, index) => moduleName(asModule(module), index)).join(', '),
181
- bankRef: modules.map((module) => parseBankRef(asModule(module).bank)?.ref ?? '<malformed>').join(', '),
182
- reason,
183
- });
241
+ })));
242
+ // Budgets are a property of one program in one room, so each program is checked on its own, at
243
+ // the number of players its room can hold.
244
+ for (const program of programs) {
245
+ const modules = program.modules;
246
+ const moduleId = modules.map((module, index) => program.label + moduleName(asModule(module), index)).join(', ');
247
+ const bankRef = modules.map((module) => (isInline(asModule(module)) ? INLINE : parseBankRef(asModule(module).bank)?.ref ?? '<malformed>')).join(', ');
248
+ try {
249
+ for (const reason of deps.validateBudgets(modules, exports.TICK_NODE_CEILING, program.playerCap)) {
250
+ failures.push({ moduleId, bankRef, reason });
251
+ }
252
+ }
253
+ catch (err) {
254
+ failures.push({ moduleId, bankRef, reason: err instanceof Error ? err.message : String(err) });
184
255
  }
185
- }
186
- catch (err) {
187
- failures.push({
188
- moduleId: modules.map((module, index) => moduleName(asModule(module), index)).join(', '),
189
- bankRef: modules.map((module) => parseBankRef(asModule(module).bank)?.ref ?? '<malformed>').join(', '),
190
- reason: err instanceof Error ? err.message : String(err),
191
- });
192
256
  }
193
257
  return failures;
194
258
  }
195
259
  function renderRealizabilityRefusal(failures) {
196
260
  return [
197
261
  'Refusing to publish: the server cannot realize this multiplayer world.',
198
- ...failures.map((f) => ` - module "${f.moduleId}", bank "${f.bankRef}": ${f.reason}`),
262
+ ...failures.map((f) => (f.bankRef.split(', ').every((ref) => ref === INLINE)
263
+ ? ` - module "${f.moduleId}" (inline): ${f.reason}`
264
+ : ` - module "${f.moduleId}", bank "${f.bankRef}": ${f.reason}`)),
199
265
  'Publish the referenced bank (or correct its version/checksum and module budgets), then retry.',
200
266
  'To bypass this safety gate intentionally, pass --skip-realizability-check.',
201
267
  ].join('\n');
@@ -1 +1 @@
1
- {"version":3,"file":"realizability.js","sourceRoot":"","sources":["../src/realizability.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"realizability.js","sourceRoot":"","sources":["../src/realizability.ts"],"names":[],"mappings":"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"}