@maka/maka-cli 5.90.0 → 5.92.0

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 (115) hide show
  1. package/bundle/typescript/package.json +1 -1
  2. package/bundle/typescript/src/commands/game/sideQuest/archetypes.js +9 -9
  3. package/bundle/typescript/src/commands/game/sideQuest/archetypes.js.map +1 -1
  4. package/bundle/typescript/src/commands/game/sideQuest/augmentations.d.ts +54 -3
  5. package/bundle/typescript/src/commands/game/sideQuest/augmentations.js +987 -53
  6. package/bundle/typescript/src/commands/game/sideQuest/augmentations.js.map +1 -1
  7. package/bundle/typescript/src/commands/game/sideQuest/commands/ask.d.ts +0 -14
  8. package/bundle/typescript/src/commands/game/sideQuest/commands/ask.js +23 -1
  9. package/bundle/typescript/src/commands/game/sideQuest/commands/ask.js.map +1 -1
  10. package/bundle/typescript/src/commands/game/sideQuest/commands/bluff.js +1 -1
  11. package/bundle/typescript/src/commands/game/sideQuest/commands/bluff.js.map +1 -1
  12. package/bundle/typescript/src/commands/game/sideQuest/commands/breach.d.ts +10 -2
  13. package/bundle/typescript/src/commands/game/sideQuest/commands/breach.js +11 -2
  14. package/bundle/typescript/src/commands/game/sideQuest/commands/breach.js.map +1 -1
  15. package/bundle/typescript/src/commands/game/sideQuest/commands/buy.js +14 -1
  16. package/bundle/typescript/src/commands/game/sideQuest/commands/buy.js.map +1 -1
  17. package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.js +30 -3
  18. package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.js.map +1 -1
  19. package/bundle/typescript/src/commands/game/sideQuest/commands/call.js +5 -1
  20. package/bundle/typescript/src/commands/game/sideQuest/commands/call.js.map +1 -1
  21. package/bundle/typescript/src/commands/game/sideQuest/commands/companions.js +5 -1
  22. package/bundle/typescript/src/commands/game/sideQuest/commands/companions.js.map +1 -1
  23. package/bundle/typescript/src/commands/game/sideQuest/commands/go.js +10 -1
  24. package/bundle/typescript/src/commands/game/sideQuest/commands/go.js.map +1 -1
  25. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js +2 -2
  26. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js.map +1 -1
  27. package/bundle/typescript/src/commands/game/sideQuest/commands/haggle.js +2 -2
  28. package/bundle/typescript/src/commands/game/sideQuest/commands/haggle.js.map +1 -1
  29. package/bundle/typescript/src/commands/game/sideQuest/commands/initiate.js +8 -1
  30. package/bundle/typescript/src/commands/game/sideQuest/commands/initiate.js.map +1 -1
  31. package/bundle/typescript/src/commands/game/sideQuest/commands/inv.js +3 -0
  32. package/bundle/typescript/src/commands/game/sideQuest/commands/inv.js.map +1 -1
  33. package/bundle/typescript/src/commands/game/sideQuest/commands/mark.js +2 -2
  34. package/bundle/typescript/src/commands/game/sideQuest/commands/mark.js.map +1 -1
  35. package/bundle/typescript/src/commands/game/sideQuest/commands/move.js +55 -17
  36. package/bundle/typescript/src/commands/game/sideQuest/commands/move.js.map +1 -1
  37. package/bundle/typescript/src/commands/game/sideQuest/commands/persuade.js +1 -1
  38. package/bundle/typescript/src/commands/game/sideQuest/commands/persuade.js.map +1 -1
  39. package/bundle/typescript/src/commands/game/sideQuest/commands/project.js +12 -0
  40. package/bundle/typescript/src/commands/game/sideQuest/commands/project.js.map +1 -1
  41. package/bundle/typescript/src/commands/game/sideQuest/commands/reload.js +1 -1
  42. package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js +14 -4
  43. package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js.map +1 -1
  44. package/bundle/typescript/src/commands/game/sideQuest/commands/use.js +3 -3
  45. package/bundle/typescript/src/commands/game/sideQuest/engine-version.d.ts +1 -1
  46. package/bundle/typescript/src/commands/game/sideQuest/engine-version.js +109 -1
  47. package/bundle/typescript/src/commands/game/sideQuest/engine-version.js.map +1 -1
  48. package/bundle/typescript/src/commands/game/sideQuest/factories/chargen-factory.d.ts +1 -1
  49. package/bundle/typescript/src/commands/game/sideQuest/factories/chargen-factory.js +62 -16
  50. package/bundle/typescript/src/commands/game/sideQuest/factories/chargen-factory.js.map +1 -1
  51. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js +26 -3
  52. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js.map +1 -1
  53. package/bundle/typescript/src/commands/game/sideQuest/game.d.ts +95 -3
  54. package/bundle/typescript/src/commands/game/sideQuest/game.js +237 -15
  55. package/bundle/typescript/src/commands/game/sideQuest/game.js.map +1 -1
  56. package/bundle/typescript/src/commands/game/sideQuest/headless-harness.js +5 -1
  57. package/bundle/typescript/src/commands/game/sideQuest/headless-harness.js.map +1 -1
  58. package/bundle/typescript/src/commands/game/sideQuest/models/inventory.d.ts +13 -0
  59. package/bundle/typescript/src/commands/game/sideQuest/models/inventory.js +45 -2
  60. package/bundle/typescript/src/commands/game/sideQuest/models/inventory.js.map +1 -1
  61. package/bundle/typescript/src/commands/game/sideQuest/models/item.d.ts +65 -1
  62. package/bundle/typescript/src/commands/game/sideQuest/models/item.js +83 -1
  63. package/bundle/typescript/src/commands/game/sideQuest/models/item.js.map +1 -1
  64. package/bundle/typescript/src/commands/game/sideQuest/models/player.d.ts +153 -3
  65. package/bundle/typescript/src/commands/game/sideQuest/models/player.js +197 -12
  66. package/bundle/typescript/src/commands/game/sideQuest/models/player.js.map +1 -1
  67. package/bundle/typescript/src/commands/game/sideQuest/models/scene.d.ts +73 -0
  68. package/bundle/typescript/src/commands/game/sideQuest/models/scene.js +97 -3
  69. package/bundle/typescript/src/commands/game/sideQuest/models/scene.js.map +1 -1
  70. package/bundle/typescript/src/commands/game/sideQuest/qualities.d.ts +33 -1
  71. package/bundle/typescript/src/commands/game/sideQuest/qualities.js +80 -2
  72. package/bundle/typescript/src/commands/game/sideQuest/qualities.js.map +1 -1
  73. package/bundle/typescript/src/commands/game/sideQuest/scenes/scene1.json +1 -1
  74. package/bundle/typescript/src/commands/game/sideQuest/scenes/scene2.json +4 -4
  75. package/bundle/typescript/src/commands/game/sideQuest/skill-groups.d.ts +120 -0
  76. package/bundle/typescript/src/commands/game/sideQuest/skill-groups.js +135 -0
  77. package/bundle/typescript/src/commands/game/sideQuest/skill-groups.js.map +1 -0
  78. package/bundle/typescript/src/commands/game/sideQuest/types/save-file.d.ts +34 -2
  79. package/bundle/typescript/src/commands/game/sideQuest/ui.js +36 -0
  80. package/bundle/typescript/src/commands/game/sideQuest/ui.js.map +1 -1
  81. package/bundle/typescript/src/commands/game/sideQuest/utilities/alarmed-staff.d.ts +116 -0
  82. package/bundle/typescript/src/commands/game/sideQuest/utilities/alarmed-staff.js +127 -0
  83. package/bundle/typescript/src/commands/game/sideQuest/utilities/alarmed-staff.js.map +1 -0
  84. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog-data.d.ts +1 -1
  85. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog-data.js +123 -2
  86. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog-data.js.map +1 -1
  87. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog.d.ts +131 -2
  88. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog.js +170 -12
  89. package/bundle/typescript/src/commands/game/sideQuest/utilities/catalog.js.map +1 -1
  90. package/bundle/typescript/src/commands/game/sideQuest/utilities/cloud-saves.d.ts +139 -1
  91. package/bundle/typescript/src/commands/game/sideQuest/utilities/cloud-saves.js +307 -5
  92. package/bundle/typescript/src/commands/game/sideQuest/utilities/cloud-saves.js.map +1 -1
  93. package/bundle/typescript/src/commands/game/sideQuest/utilities/ephemeral.d.ts +41 -0
  94. package/bundle/typescript/src/commands/game/sideQuest/utilities/ephemeral.js +41 -0
  95. package/bundle/typescript/src/commands/game/sideQuest/utilities/ephemeral.js.map +1 -1
  96. package/bundle/typescript/src/commands/game/sideQuest/utilities/input-history.d.ts +98 -0
  97. package/bundle/typescript/src/commands/game/sideQuest/utilities/input-history.js +137 -0
  98. package/bundle/typescript/src/commands/game/sideQuest/utilities/input-history.js.map +1 -0
  99. package/bundle/typescript/src/commands/game/sideQuest/utilities/perception.js +1 -0
  100. package/bundle/typescript/src/commands/game/sideQuest/utilities/perception.js.map +1 -1
  101. package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.d.ts +38 -0
  102. package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js +106 -0
  103. package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js.map +1 -1
  104. package/bundle/typescript/src/commands/game/sideQuest/utilities/session-lock.js +19 -3
  105. package/bundle/typescript/src/commands/game/sideQuest/utilities/session-lock.js.map +1 -1
  106. package/bundle/typescript/src/commands/game/sideQuest/utilities/sin.js +1 -1
  107. package/bundle/typescript/src/commands/game/sideQuest/utilities/sin.js.map +1 -1
  108. package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.js +2 -1
  109. package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.js.map +1 -1
  110. package/bundle/typescript/src/commands/game/sideQuest/utilities/web-character-generator.d.ts +22 -0
  111. package/bundle/typescript/src/commands/game/sideQuest/utilities/web-character-generator.js +27 -0
  112. package/bundle/typescript/src/commands/game/sideQuest/utilities/web-character-generator.js.map +1 -1
  113. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js +79 -44
  114. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js.map +1 -1
  115. package/package.json +1 -1
@@ -6,11 +6,33 @@ import * as https from 'https';
6
6
  import { Logger } from './logger.js';
7
7
  import { saveSlug, readSave, writeSaveAtomic, tombstonePathFor } from './persistence.js';
8
8
  /**
9
- * CLOUD MIRROR for the save slots (rulings: LOCAL-FIRST -- the local
10
- * file is always written and always authoritative for play; the cloud
11
- * at www.maka-cli.com is a mirror kept fresh when the user is logged in
12
- * via `maka login`. Offline or logged out, everything here degrades to
13
- * a silent no-op and the game never notices).
9
+ * CLOUD STORAGE for the save slots, and the header this file carried
10
+ * for most of its life is no longer true of half its callers.
11
+ *
12
+ * IT SAID "LOCAL-FIRST -- the local file is always written and always
13
+ * authoritative for play; the cloud is a mirror". That still describes
14
+ * an ANONYMOUS runner exactly, and anonymous is deliberately untouched
15
+ * by all of this. It does NOT describe a BOUND one: the user's ruling
16
+ * is that an account-bound character lives ONLY on the server, because
17
+ * storing them twice produced a class of real bugs -- a deleted
18
+ * character resurrected from the cloud copy, a shared run loading a
19
+ * stale snapshot because the push was never awaited, and silent
20
+ * newest-wins resolution of divergences nobody was told about.
21
+ *
22
+ * So the model is now split, and every branch gates on bound:
23
+ *
24
+ * ANONYMOUS -- local file, authoritative, never leaves the machine.
25
+ * BOUND -- the server is the save. A synchronous local SPILL
26
+ * (persistence.spillPathFor) is a crash journal, not a
27
+ * second home: it exists only between a beat and its
28
+ * confirmed upload, and the next launch uploads and
29
+ * deletes it. Bound is online-only by ruling; an outage
30
+ * mid-session degrades to the spill rather than ending
31
+ * the session.
32
+ *
33
+ * PR1 NOTE: bound runners still write `<slug>.json` as well, so this
34
+ * change is a revert-trivial superset of the old behaviour. PR2 removes
35
+ * that write once the server contract is deployed.
14
36
  *
15
37
  * Auth rides the same rails as login/logout: the Meteor resume token
16
38
  * from global-config.json's `token` property, sent as `x-auth-token`.
@@ -127,6 +149,15 @@ export async function pushSave(saveFilePath, save) {
127
149
  noteUnauthorized();
128
150
  return 'unauthorized';
129
151
  }
152
+ // THE MONOTONIC GUARD (§8): the stored save is newer than ours, so
153
+ // this push would move the runner BACKWARDS. Reported distinctly
154
+ // because retrying it is exactly the wrong response -- see
155
+ // CloudResult. An equal savedAt is idempotent and answers 200, so a
156
+ // 409 always means genuinely behind.
157
+ if (res.statusCode === 409) {
158
+ logger.write(`Cloud sync: push refused as stale (server copy is newer than ${save.savedAt}).`);
159
+ return 'stale';
160
+ }
130
161
  logger.write(`Cloud sync: push got ${res.statusCode} -- staying local.`);
131
162
  return 'offline';
132
163
  }
@@ -275,4 +306,275 @@ export function reconcile(local, cloud) {
275
306
  return 'pull-cloud';
276
307
  return 'diverged';
277
308
  }
309
+ let pending;
310
+ let inFlight = false;
311
+ let retryTimer;
312
+ /** One notice per OUTAGE, not per failed beat -- see noteOutage. */
313
+ let outageAnnounced = false;
314
+ /** Set when a 409 says the server holds something newer than us. */
315
+ let staleAnnounced = false;
316
+ /** Retry cadence when the grid is down. Unref'd: a pending retry must
317
+ * never hold the process open at exit. */
318
+ const RETRY_MS = 60_000;
319
+ function noteOutage() {
320
+ if (outageAnnounced)
321
+ return;
322
+ outageAnnounced = true;
323
+ const logger = Logger.getInstance();
324
+ const line = `The grid dropped -- your progress is recording locally and will upload automatically next launch.`;
325
+ if (logger.hasScreen())
326
+ logger.logWithColor(line, 'yellow');
327
+ else
328
+ logger.write(`Cloud sync: outage -- ${line}`);
329
+ }
330
+ function noteRecovered() {
331
+ if (!outageAnnounced)
332
+ return;
333
+ outageAnnounced = false;
334
+ const logger = Logger.getInstance();
335
+ const line = `The grid's back -- your progress is synced.`;
336
+ if (logger.hasScreen())
337
+ logger.logWithColor(line, 'green');
338
+ else
339
+ logger.write('Cloud sync: recovered.');
340
+ }
341
+ /**
342
+ * A 409 means the SERVER is ahead of us: another machine pushed a newer
343
+ * save for this runner. Never overwrite play state from here -- this
344
+ * process is mid-session and its player is looking at the world it
345
+ * believes in. The spill survives, the warning fires once, and the
346
+ * launcher reconciles at the next launch where a human can be asked.
347
+ */
348
+ function noteStale() {
349
+ if (staleAnnounced)
350
+ return;
351
+ staleAnnounced = true;
352
+ const logger = Logger.getInstance();
353
+ const line = `This runner was saved from somewhere else more recently. Your progress is being kept locally -- sort it out at the next launch.`;
354
+ if (logger.hasScreen())
355
+ logger.logWithColor(line, 'yellow');
356
+ else
357
+ logger.write('Cloud sync: 409 stale -- server copy is newer.');
358
+ }
359
+ /** Test seam: the queue is module state, and a suite that ran two cases
360
+ * against one dirty queue would be testing the previous test. */
361
+ export function _resetPushQueue() {
362
+ pending = undefined;
363
+ inFlight = false;
364
+ if (retryTimer)
365
+ clearTimeout(retryTimer);
366
+ retryTimer = undefined;
367
+ outageAnnounced = false;
368
+ staleAnnounced = false;
369
+ }
370
+ function armRetry() {
371
+ if (retryTimer || !pending)
372
+ return;
373
+ retryTimer = setTimeout(() => {
374
+ retryTimer = undefined;
375
+ void drainQueue();
376
+ }, RETRY_MS);
377
+ // A save waiting to retry must not keep the game alive at exit; the
378
+ // spill on disk is the guarantee, not this timer.
379
+ retryTimer.unref?.();
380
+ }
381
+ async function drainQueue() {
382
+ if (inFlight)
383
+ return;
384
+ const next = pending;
385
+ if (!next)
386
+ return;
387
+ pending = undefined;
388
+ inFlight = true;
389
+ try {
390
+ const res = await next.push(next.saveFilePath, next.save);
391
+ if (res === 'ok') {
392
+ noteRecovered();
393
+ // THE SPILL DIES ONLY ON A CONFIRMED PUSH OF THIS EXACT SAVE.
394
+ // Deleting it on any 200 would drop a NEWER beat's journal when an
395
+ // older push confirmed late -- the out-of-order case single-flight
396
+ // mostly prevents and this makes impossible.
397
+ if (next.spillPath && !pending)
398
+ clearSpill(next.spillPath, next.save.savedAt);
399
+ }
400
+ else if (res === 'stale') {
401
+ noteStale();
402
+ }
403
+ else if (res !== 'unauthorized') {
404
+ noteOutage();
405
+ // Put it back ONLY if nothing newer arrived while we were away.
406
+ if (!pending)
407
+ pending = next;
408
+ }
409
+ }
410
+ finally {
411
+ inFlight = false;
412
+ }
413
+ if (pending) {
414
+ if (outageAnnounced || staleAnnounced)
415
+ armRetry();
416
+ else
417
+ await drainQueue();
418
+ }
419
+ }
420
+ /**
421
+ * Enqueue a bound save. Returns immediately -- requestSave's contract is
422
+ * synchronous (game.ts) and the spill has already been written by the
423
+ * time this is called, so nothing here is allowed to block a beat.
424
+ */
425
+ export function enqueueBoundPush(saveFilePath, save, spillPath, push = pushSave) {
426
+ pending = { saveFilePath, save, spillPath, push };
427
+ void drainQueue();
428
+ }
429
+ /**
430
+ * Drain to completion -- the QUIT SEAL and the job-accept handoff.
431
+ *
432
+ * These are the two places where "eventually" is not good enough: quit
433
+ * ends the process (nothing later will retry), and accepting a job hands
434
+ * this character to a shared run that loads it from the SERVER, so an
435
+ * unpushed beat is a stale snapshot the whole table then plays against.
436
+ * That race exists today and this is what closes it.
437
+ *
438
+ * Resolves true when the server has the newest save. False means the
439
+ * spill stands and the next launch will carry it.
440
+ */
441
+ export async function flushPushQueue() {
442
+ if (retryTimer) {
443
+ clearTimeout(retryTimer);
444
+ retryTimer = undefined;
445
+ }
446
+ // Bounded: each pass either lands the newest save or fails, and a
447
+ // failure stops the loop rather than spinning on a dead link.
448
+ for (let i = 0; i < 3 && pending; i++) {
449
+ const before = pending;
450
+ await drainQueue();
451
+ if (pending === before)
452
+ break;
453
+ }
454
+ return pending === undefined;
455
+ }
456
+ /** True while a bound save has not reached the server. */
457
+ export function hasPendingPush() {
458
+ return pending !== undefined;
459
+ }
460
+ /**
461
+ * Remove a spill whose contents the server has confirmed. Guarded on
462
+ * savedAt: a spill rewritten by a newer beat between the push and the
463
+ * confirmation is NOT the file we just uploaded, and deleting it would
464
+ * throw away the only copy of that beat.
465
+ */
466
+ export function clearSpill(spillPath, confirmedSavedAt) {
467
+ try {
468
+ if (!fs.existsSync(spillPath))
469
+ return;
470
+ const onDisk = readSave(spillPath);
471
+ if (onDisk.ok && onDisk.save.savedAt !== confirmedSavedAt)
472
+ return;
473
+ fs.rmSync(spillPath, { force: true });
474
+ Logger.getInstance().write(`Cloud sync: spill cleared (${confirmedSavedAt}).`);
475
+ }
476
+ catch (err) {
477
+ // A spill we cannot delete is a spill that gets uploaded again next
478
+ // launch and found to be identical -- harmless. Never fatal.
479
+ Logger.getInstance().write(`Cloud sync: could not clear spill -- ${err.message ?? err}`);
480
+ }
481
+ }
482
+ /**
483
+ * Write the spill, SYNCHRONOUSLY, and never throw.
484
+ *
485
+ * requestSave's signature is synchronous and that is load-bearing: it is
486
+ * called from `process.on('exit')`, where nothing asynchronous can run
487
+ * at all. For a bound runner the spill write IS the durability
488
+ * guarantee at that moment -- the push is best-effort and the process is
489
+ * already leaving.
490
+ *
491
+ * SWALLOWS ITS ERRORS ON PURPOSE, and this is the one place where that
492
+ * is right rather than lazy: a full disk or a permissions fault during
493
+ * the exit hook must not turn a clean quit into a crash on the way out.
494
+ * The player would lose the beat either way; throwing loses the exit
495
+ * too, and prints a stack trace over their last screen.
496
+ */
497
+ export function writeSpill(spillPath, save) {
498
+ try {
499
+ writeSaveAtomic(spillPath, save);
500
+ return true;
501
+ }
502
+ catch (err) {
503
+ Logger.getInstance().write(`Cloud sync: spill write FAILED (${err.message ?? err}).`);
504
+ return false;
505
+ }
506
+ }
507
+ async function leaseCall(slug, sessionId, action) {
508
+ const token = authToken();
509
+ if (!token)
510
+ return { ok: false, reason: 'unauthorized' };
511
+ try {
512
+ const res = await request('POST', `/${API_BASE}/${slug}/lease`, token, { sessionId, action });
513
+ if (res.statusCode === 200) {
514
+ const body = parseLease(res.data);
515
+ return { ok: true, ttlMs: body?.ttlMs };
516
+ }
517
+ if (res.statusCode === 401) {
518
+ noteUnauthorized();
519
+ return { ok: false, reason: 'unauthorized' };
520
+ }
521
+ if (res.statusCode === 409) {
522
+ const body = parseLease(res.data);
523
+ return { ok: false, reason: 'held', heldBy: body?.heldBy, since: body?.since };
524
+ }
525
+ // See the transitional note above: an unimplemented endpoint is not
526
+ // a free lease and is not an outage either.
527
+ if (res.statusCode === 404) {
528
+ Logger.getInstance().write(`Lease: server has no lease endpoint -- proceeding without cross-machine locking.`);
529
+ return { ok: false, reason: 'unsupported' };
530
+ }
531
+ return { ok: false, reason: 'offline' };
532
+ }
533
+ catch {
534
+ return { ok: false, reason: 'offline' };
535
+ }
536
+ }
537
+ function parseLease(raw) {
538
+ try {
539
+ const parsed = JSON.parse(raw);
540
+ const body = (parsed?.data ?? parsed);
541
+ return body;
542
+ }
543
+ catch {
544
+ return undefined;
545
+ }
546
+ }
547
+ export const acquireLease = (slug, sessionId) => leaseCall(slug, sessionId, 'acquire');
548
+ export const releaseLease = (slug, sessionId) => leaseCall(slug, sessionId, 'release');
549
+ /**
550
+ * Whether a lease failure should STOP the boot.
551
+ *
552
+ * ONLY a held lease does. Offline, unauthorized and unsupported all mean
553
+ * "we could not ask", and refusing to play because the lock server was
554
+ * unreachable would turn every outage into a lockout -- which is the
555
+ * opposite of ruling 2 (an outage degrades to the spill, it does not end
556
+ * the session). A HELD lease is the one case where we know the answer
557
+ * and the answer is no.
558
+ */
559
+ export function leaseRefusesBoot(result) {
560
+ return result.ok === false && result.reason === 'held';
561
+ }
562
+ let renewTimer;
563
+ /**
564
+ * Keep the lease alive while playing. Renewal FAILURES ARE TOLERATED:
565
+ * a dropped renew during an outage must not kill a live session -- the
566
+ * server's TTL expires it on its own, and a crash is exactly what the
567
+ * TTL is for.
568
+ */
569
+ export function startLeaseRenewal(slug, sessionId, everyMs = 30_000) {
570
+ stopLeaseRenewal();
571
+ renewTimer = setInterval(() => { void leaseCall(slug, sessionId, 'renew'); }, everyMs);
572
+ // Never hold the process open for a lock we are about to release.
573
+ renewTimer.unref?.();
574
+ }
575
+ export function stopLeaseRenewal() {
576
+ if (renewTimer)
577
+ clearInterval(renewTimer);
578
+ renewTimer = undefined;
579
+ }
278
580
  //# sourceMappingURL=cloud-saves.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cloud-saves.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/utilities/cloud-saves.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cloud-saves.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/utilities/cloud-saves.ts"],"names":[],"mappings":"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"}
@@ -137,6 +137,47 @@ export declare function despawnEphemerals(host: IEphemeralHost, opts: {
137
137
  /** Ends everything regardless of scope (scene teardown). */
138
138
  all?: boolean;
139
139
  }): string[];
140
+ /**
141
+ * IS THIS BODY ONE OF MINE? The question every OTHER driver has to ask,
142
+ * given one home so there is only ever one answer.
143
+ *
144
+ * THE OVERLAP IS REAL, and it is not obvious from either side.
145
+ * spawnEphemeral calls `scene.addActor`, which writes into the same Map
146
+ * that `Scene.allActors` enumerates -- so every ephemeral is in the
147
+ * scene's actor list right now. Any driver that walks the scene and
148
+ * filters `instanceof NPC` picks up the officer, the gangers and the
149
+ * bystanders along with the cast.
150
+ *
151
+ * WHOSE GUARD, stated as a rule rather than a preference (agreed with
152
+ * backlog-session-2 for the alarm driver, TRqb): this governor iterates
153
+ * the REGISTRY and can never reach a scene NPC, so a narrow enumerator
154
+ * needs no guard. A BROAD enumerator can reach mine. The guard belongs
155
+ * to whoever holds the superset, because that is the only side where
156
+ * the mistake is possible -- and the mistake is one body taking two
157
+ * beats per player action, which nothing visibly fails on.
158
+ *
159
+ * EXPORTED RATHER THAN LEFT AS `if (npc.ephemeral)` AT EACH CALLER, for
160
+ * the reason that decides most of this file: if the marking ever moves
161
+ * off that field, one place changes instead of N, and the ones that did
162
+ * not change would fail SILENTLY. A hand-rolled copy of a one-line
163
+ * predicate is exactly the shape that survives a refactor while
164
+ * quietly meaning nothing.
165
+ */
166
+ /**
167
+ * THE UNION IS DELIBERATE and cost a build to learn. Typed only as
168
+ * `{ ephemeral?: unknown }`, TypeScript's WEAK TYPE check rejects
169
+ * `isEphemeral(player)` outright -- "Player has no properties in common"
170
+ * -- because every property of that shape is optional and Player carries
171
+ * none of them. A predicate a caller cannot pass a Player to is useless
172
+ * to the exact driver it was written for, since walking the scene hands
173
+ * you `Player | NPC`. Naming both members makes each an exact match and
174
+ * leaves the structural form for anything else.
175
+ *
176
+ * Jest was green on this; only `npm run build` caught it.
177
+ */
178
+ export declare function isEphemeral(actor: Player | NPC | {
179
+ ephemeral?: unknown;
180
+ } | undefined | null): boolean;
140
181
  /**
141
182
  * THE ONE NAMING PATH, for the same reason there is one spawn path: two
142
183
  * naming helpers is how two of them end up called Ravi.
@@ -72,6 +72,47 @@ export function despawnEphemerals(host, opts) {
72
72
  }
73
73
  return removed;
74
74
  }
75
+ /**
76
+ * IS THIS BODY ONE OF MINE? The question every OTHER driver has to ask,
77
+ * given one home so there is only ever one answer.
78
+ *
79
+ * THE OVERLAP IS REAL, and it is not obvious from either side.
80
+ * spawnEphemeral calls `scene.addActor`, which writes into the same Map
81
+ * that `Scene.allActors` enumerates -- so every ephemeral is in the
82
+ * scene's actor list right now. Any driver that walks the scene and
83
+ * filters `instanceof NPC` picks up the officer, the gangers and the
84
+ * bystanders along with the cast.
85
+ *
86
+ * WHOSE GUARD, stated as a rule rather than a preference (agreed with
87
+ * backlog-session-2 for the alarm driver, TRqb): this governor iterates
88
+ * the REGISTRY and can never reach a scene NPC, so a narrow enumerator
89
+ * needs no guard. A BROAD enumerator can reach mine. The guard belongs
90
+ * to whoever holds the superset, because that is the only side where
91
+ * the mistake is possible -- and the mistake is one body taking two
92
+ * beats per player action, which nothing visibly fails on.
93
+ *
94
+ * EXPORTED RATHER THAN LEFT AS `if (npc.ephemeral)` AT EACH CALLER, for
95
+ * the reason that decides most of this file: if the marking ever moves
96
+ * off that field, one place changes instead of N, and the ones that did
97
+ * not change would fail SILENTLY. A hand-rolled copy of a one-line
98
+ * predicate is exactly the shape that survives a refactor while
99
+ * quietly meaning nothing.
100
+ */
101
+ /**
102
+ * THE UNION IS DELIBERATE and cost a build to learn. Typed only as
103
+ * `{ ephemeral?: unknown }`, TypeScript's WEAK TYPE check rejects
104
+ * `isEphemeral(player)` outright -- "Player has no properties in common"
105
+ * -- because every property of that shape is optional and Player carries
106
+ * none of them. A predicate a caller cannot pass a Player to is useless
107
+ * to the exact driver it was written for, since walking the scene hands
108
+ * you `Player | NPC`. Naming both members makes each an exact match and
109
+ * leaves the structural form for anything else.
110
+ *
111
+ * Jest was green on this; only `npm run build` caught it.
112
+ */
113
+ export function isEphemeral(actor) {
114
+ return actor?.ephemeral != null;
115
+ }
75
116
  /**
76
117
  * THE ONE NAMING PATH, for the same reason there is one spawn path: two
77
118
  * naming helpers is how two of them end up called Ravi.
@@ -1 +1 @@
1
- {"version":3,"file":"ephemeral.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/utilities/ephemeral.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ephemeral.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/utilities/ephemeral.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * COMMAND HISTORY FOR THE INPUT BOX (gcCNQShcTSa9zyPGd: "better text
3
+ * input -- Up arrow for previous submissions").
4
+ *
5
+ * PURE ON PURPOSE, and that is the whole design decision here. Keystroke
6
+ * handling is the one thing a headless test cannot see -- blessed's
7
+ * reader, focus, and the terminal are all in the way -- so everything
8
+ * that can be decided WITHOUT a terminal is decided here, where it can
9
+ * be tested properly. What is left in ui.ts is three lines of wiring
10
+ * that a human verifies by pressing the key.
11
+ *
12
+ * SHELL SEMANTICS, because that is what the request means by "like a
13
+ * shell" and because anything else is a surprise:
14
+ *
15
+ * - Up walks BACKWARD through submissions, newest first, and stops at
16
+ * the oldest rather than wrapping. Wrapping puts your oldest command
17
+ * in the box when you meant to keep going back, and you cannot tell
18
+ * it happened.
19
+ * - Down walks forward and, past the newest, returns to what you were
20
+ * TYPING. That draft is the thing people lose: type half a command,
21
+ * glance back at an earlier one, come down again -- a shell gives
22
+ * the half-typed line back, and losing it is the bug report.
23
+ * - A consecutive repeat is not recorded twice. Pressing Up should
24
+ * step through what you DID, not count how many times you did it.
25
+ * - Blank submissions are not history. The box is cleared and
26
+ * re-submitted often (a nervous Enter is already a no-op upstream).
27
+ */
28
+ /** How much to keep. A session is a few hundred commands at most, and
29
+ * the whole point of a cap is that this lives for the process. */
30
+ export declare const HISTORY_LIMIT = 200;
31
+ export declare class InputHistory {
32
+ private readonly limit;
33
+ /** Oldest first, so `push` is the cheap end and index 0 is the start. */
34
+ private entries;
35
+ /**
36
+ * Where Up/Down currently sit. `entries.length` means "not browsing --
37
+ * the box holds live text", which is why it is an index one PAST the
38
+ * end rather than -1: every other value indexes an entry directly, and
39
+ * the arithmetic below never needs a special case.
40
+ */
41
+ private cursor;
42
+ /** What was in the box when browsing started, restored on the way back
43
+ * down. Undefined while not browsing. */
44
+ private draft?;
45
+ constructor(limit?: number);
46
+ /** Everything remembered, oldest first. For tests and for a future
47
+ * "history" verb; nothing in the UI needs it. */
48
+ get all(): readonly string[];
49
+ get browsing(): boolean;
50
+ /**
51
+ * Record a submitted command and leave browsing mode.
52
+ *
53
+ * Called on EVERY submit, including ones this refuses to store, so the
54
+ * cursor and draft are reset either way -- a blank Enter should still
55
+ * put you back at the live line.
56
+ */
57
+ remember(command: string): void;
58
+ /**
59
+ * One step back. `current` is what the box holds right now, captured
60
+ * so the draft can be handed back on the way down.
61
+ *
62
+ * Returns the text to put in the box, or undefined when there is
63
+ * nothing to go back to -- the caller leaves the box untouched, which
64
+ * is what makes the oldest entry a floor rather than a wrap.
65
+ */
66
+ up(current: string): string | undefined;
67
+ /**
68
+ * One step forward. Past the newest entry this returns the draft (or
69
+ * '' if there was none) and leaves browsing mode.
70
+ *
71
+ * Returns undefined only when not browsing at all -- pressing Down on
72
+ * a live line does nothing, rather than clearing what you typed.
73
+ */
74
+ down(): string | undefined;
75
+ }
76
+ /**
77
+ * THE WIRING, exported so the TEST DRIVES IT rather than a copy of it.
78
+ *
79
+ * This began as three lines inline in ui.ts, on the assumption that
80
+ * keystroke handling is the part a headless test cannot reach. That
81
+ * assumption is FALSE and was worth checking before designing around
82
+ * it: blessed runs perfectly well against a pair of PassThrough streams
83
+ * with `isTTY` set, and a `keypress` emitted on `screen.program.input`
84
+ * reaches an element's `key()` handler exactly as a real terminal's
85
+ * would. So the binding is testable end to end, and inline wiring would
86
+ * have meant the test re-implementing it -- which is how a mutation
87
+ * ends up accusing the wrong file.
88
+ *
89
+ * `render` is passed rather than the screen so this file never imports
90
+ * blessed: it needs `key`, `getValue` and `setValue`, and naming exactly
91
+ * those keeps the seam honest about what it touches.
92
+ */
93
+ export interface IHistoryBox {
94
+ key(keys: string[], handler: () => void): void;
95
+ getValue(): string;
96
+ setValue(value: string): void;
97
+ }
98
+ export declare function attachInputHistory(box: IHistoryBox, render: () => void, history?: InputHistory): InputHistory;