@maka/maka-cli 5.67.0 → 5.69.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 (137) hide show
  1. package/bundle/typescript/package.json +1 -1
  2. package/bundle/typescript/src/commands/game/sideQuest/archetypes.js +6 -1
  3. package/bundle/typescript/src/commands/game/sideQuest/archetypes.js.map +1 -1
  4. package/bundle/typescript/src/commands/game/sideQuest/commands/abandon.d.ts +30 -0
  5. package/bundle/typescript/src/commands/game/sideQuest/commands/abandon.js +54 -0
  6. package/bundle/typescript/src/commands/game/sideQuest/commands/abandon.js.map +1 -0
  7. package/bundle/typescript/src/commands/game/sideQuest/commands/ar.js +4 -1
  8. package/bundle/typescript/src/commands/game/sideQuest/commands/ar.js.map +1 -1
  9. package/bundle/typescript/src/commands/game/sideQuest/commands/bluff.js +5 -1
  10. package/bundle/typescript/src/commands/game/sideQuest/commands/bluff.js.map +1 -1
  11. package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.js +12 -4
  12. package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.js.map +1 -1
  13. package/bundle/typescript/src/commands/game/sideQuest/commands/call.d.ts +28 -0
  14. package/bundle/typescript/src/commands/game/sideQuest/commands/call.js +105 -1
  15. package/bundle/typescript/src/commands/game/sideQuest/commands/call.js.map +1 -1
  16. package/bundle/typescript/src/commands/game/sideQuest/commands/climb.d.ts +48 -0
  17. package/bundle/typescript/src/commands/game/sideQuest/commands/climb.js +107 -0
  18. package/bundle/typescript/src/commands/game/sideQuest/commands/climb.js.map +1 -0
  19. package/bundle/typescript/src/commands/game/sideQuest/commands/companions.d.ts +39 -3
  20. package/bundle/typescript/src/commands/game/sideQuest/commands/companions.js +89 -4
  21. package/bundle/typescript/src/commands/game/sideQuest/commands/companions.js.map +1 -1
  22. package/bundle/typescript/src/commands/game/sideQuest/commands/compile.d.ts +37 -17
  23. package/bundle/typescript/src/commands/game/sideQuest/commands/compile.js +53 -115
  24. package/bundle/typescript/src/commands/game/sideQuest/commands/compile.js.map +1 -1
  25. package/bundle/typescript/src/commands/game/sideQuest/commands/decompile.d.ts +55 -0
  26. package/bundle/typescript/src/commands/game/sideQuest/commands/decompile.js +203 -0
  27. package/bundle/typescript/src/commands/game/sideQuest/commands/decompile.js.map +1 -0
  28. package/bundle/typescript/src/commands/game/sideQuest/commands/go.d.ts +23 -0
  29. package/bundle/typescript/src/commands/game/sideQuest/commands/go.js +44 -9
  30. package/bundle/typescript/src/commands/game/sideQuest/commands/go.js.map +1 -1
  31. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.d.ts +24 -0
  32. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js +70 -12
  33. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js.map +1 -1
  34. package/bundle/typescript/src/commands/game/sideQuest/commands/lock.js +17 -4
  35. package/bundle/typescript/src/commands/game/sideQuest/commands/lock.js.map +1 -1
  36. package/bundle/typescript/src/commands/game/sideQuest/commands/look.js +12 -2
  37. package/bundle/typescript/src/commands/game/sideQuest/commands/look.js.map +1 -1
  38. package/bundle/typescript/src/commands/game/sideQuest/commands/map.js +12 -1
  39. package/bundle/typescript/src/commands/game/sideQuest/commands/map.js.map +1 -1
  40. package/bundle/typescript/src/commands/game/sideQuest/commands/mark.js +8 -6
  41. package/bundle/typescript/src/commands/game/sideQuest/commands/mark.js.map +1 -1
  42. package/bundle/typescript/src/commands/game/sideQuest/commands/move.d.ts +11 -0
  43. package/bundle/typescript/src/commands/game/sideQuest/commands/move.js +107 -14
  44. package/bundle/typescript/src/commands/game/sideQuest/commands/move.js.map +1 -1
  45. package/bundle/typescript/src/commands/game/sideQuest/commands/order.js +69 -1
  46. package/bundle/typescript/src/commands/game/sideQuest/commands/order.js.map +1 -1
  47. package/bundle/typescript/src/commands/game/sideQuest/commands/overwatch.js +5 -4
  48. package/bundle/typescript/src/commands/game/sideQuest/commands/overwatch.js.map +1 -1
  49. package/bundle/typescript/src/commands/game/sideQuest/commands/register.d.ts +15 -2
  50. package/bundle/typescript/src/commands/game/sideQuest/commands/register.js +32 -6
  51. package/bundle/typescript/src/commands/game/sideQuest/commands/register.js.map +1 -1
  52. package/bundle/typescript/src/commands/game/sideQuest/commands/search.js +33 -2
  53. package/bundle/typescript/src/commands/game/sideQuest/commands/search.js.map +1 -1
  54. package/bundle/typescript/src/commands/game/sideQuest/commands/sprites.d.ts +35 -0
  55. package/bundle/typescript/src/commands/game/sideQuest/commands/sprites.js +108 -0
  56. package/bundle/typescript/src/commands/game/sideQuest/commands/sprites.js.map +1 -0
  57. package/bundle/typescript/src/commands/game/sideQuest/commands/standby.d.ts +40 -0
  58. package/bundle/typescript/src/commands/game/sideQuest/commands/standby.js +91 -0
  59. package/bundle/typescript/src/commands/game/sideQuest/commands/standby.js.map +1 -0
  60. package/bundle/typescript/src/commands/game/sideQuest/commands/tap.js +10 -11
  61. package/bundle/typescript/src/commands/game/sideQuest/commands/tap.js.map +1 -1
  62. package/bundle/typescript/src/commands/game/sideQuest/commands/thread.d.ts +27 -0
  63. package/bundle/typescript/src/commands/game/sideQuest/commands/thread.js +7 -2
  64. package/bundle/typescript/src/commands/game/sideQuest/commands/thread.js.map +1 -1
  65. package/bundle/typescript/src/commands/game/sideQuest/commands/unlock.js +4 -2
  66. package/bundle/typescript/src/commands/game/sideQuest/commands/unlock.js.map +1 -1
  67. package/bundle/typescript/src/commands/game/sideQuest/commands/unravel.d.ts +57 -0
  68. package/bundle/typescript/src/commands/game/sideQuest/commands/unravel.js +162 -0
  69. package/bundle/typescript/src/commands/game/sideQuest/commands/unravel.js.map +1 -0
  70. package/bundle/typescript/src/commands/game/sideQuest/commands/use.js +12 -5
  71. package/bundle/typescript/src/commands/game/sideQuest/commands/use.js.map +1 -1
  72. package/bundle/typescript/src/commands/game/sideQuest/engine-version.d.ts +1 -1
  73. package/bundle/typescript/src/commands/game/sideQuest/engine-version.js +17 -1
  74. package/bundle/typescript/src/commands/game/sideQuest/engine-version.js.map +1 -1
  75. package/bundle/typescript/src/commands/game/sideQuest/factories/repro-scene.js +41 -1
  76. package/bundle/typescript/src/commands/game/sideQuest/factories/repro-scene.js.map +1 -1
  77. package/bundle/typescript/src/commands/game/sideQuest/factories/room-factory.js +4 -0
  78. package/bundle/typescript/src/commands/game/sideQuest/factories/room-factory.js.map +1 -1
  79. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.d.ts +2 -0
  80. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js +91 -6
  81. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js.map +1 -1
  82. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-factory.js +6 -0
  83. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-factory.js.map +1 -1
  84. package/bundle/typescript/src/commands/game/sideQuest/game.d.ts +135 -11
  85. package/bundle/typescript/src/commands/game/sideQuest/game.js +361 -30
  86. package/bundle/typescript/src/commands/game/sideQuest/game.js.map +1 -1
  87. package/bundle/typescript/src/commands/game/sideQuest/headless-harness.d.ts +24 -12
  88. package/bundle/typescript/src/commands/game/sideQuest/headless-harness.js +53 -13
  89. package/bundle/typescript/src/commands/game/sideQuest/headless-harness.js.map +1 -1
  90. package/bundle/typescript/src/commands/game/sideQuest/models/item.d.ts +25 -0
  91. package/bundle/typescript/src/commands/game/sideQuest/models/item.js +31 -0
  92. package/bundle/typescript/src/commands/game/sideQuest/models/item.js.map +1 -1
  93. package/bundle/typescript/src/commands/game/sideQuest/models/npc.d.ts +98 -1
  94. package/bundle/typescript/src/commands/game/sideQuest/models/npc.js +98 -4
  95. package/bundle/typescript/src/commands/game/sideQuest/models/npc.js.map +1 -1
  96. package/bundle/typescript/src/commands/game/sideQuest/models/player.d.ts +95 -4
  97. package/bundle/typescript/src/commands/game/sideQuest/models/player.js +179 -20
  98. package/bundle/typescript/src/commands/game/sideQuest/models/player.js.map +1 -1
  99. package/bundle/typescript/src/commands/game/sideQuest/models/room.d.ts +90 -0
  100. package/bundle/typescript/src/commands/game/sideQuest/models/room.js +114 -5
  101. package/bundle/typescript/src/commands/game/sideQuest/models/room.js.map +1 -1
  102. package/bundle/typescript/src/commands/game/sideQuest/resonance-actions.d.ts +108 -0
  103. package/bundle/typescript/src/commands/game/sideQuest/resonance-actions.js +186 -0
  104. package/bundle/typescript/src/commands/game/sideQuest/resonance-actions.js.map +1 -0
  105. package/bundle/typescript/src/commands/game/sideQuest/scenes/scene1.json +1 -0
  106. package/bundle/typescript/src/commands/game/sideQuest/scenes/scene2.json +2 -0
  107. package/bundle/typescript/src/commands/game/sideQuest/sprite-powers.d.ts +88 -0
  108. package/bundle/typescript/src/commands/game/sideQuest/sprite-powers.js +137 -0
  109. package/bundle/typescript/src/commands/game/sideQuest/sprite-powers.js.map +1 -0
  110. package/bundle/typescript/src/commands/game/sideQuest/types/repro.d.ts +42 -0
  111. package/bundle/typescript/src/commands/game/sideQuest/types/save-file.d.ts +32 -1
  112. package/bundle/typescript/src/commands/game/sideQuest/types/seed/player-seed.d.ts +12 -0
  113. package/bundle/typescript/src/commands/game/sideQuest/types/seed/room-seed.d.ts +1 -0
  114. package/bundle/typescript/src/commands/game/sideQuest/ui.js +3 -0
  115. package/bundle/typescript/src/commands/game/sideQuest/ui.js.map +1 -1
  116. package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js +5 -1
  117. package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js.map +1 -1
  118. package/bundle/typescript/src/commands/game/sideQuest/utilities/dice.d.ts +41 -1
  119. package/bundle/typescript/src/commands/game/sideQuest/utilities/dice.js +52 -4
  120. package/bundle/typescript/src/commands/game/sideQuest/utilities/dice.js.map +1 -1
  121. package/bundle/typescript/src/commands/game/sideQuest/utilities/grid-view.d.ts +14 -2
  122. package/bundle/typescript/src/commands/game/sideQuest/utilities/grid-view.js +78 -7
  123. package/bundle/typescript/src/commands/game/sideQuest/utilities/grid-view.js.map +1 -1
  124. package/bundle/typescript/src/commands/game/sideQuest/utilities/outdoors.d.ts +7 -0
  125. package/bundle/typescript/src/commands/game/sideQuest/utilities/outdoors.js +24 -0
  126. package/bundle/typescript/src/commands/game/sideQuest/utilities/outdoors.js.map +1 -1
  127. package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js +14 -0
  128. package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js.map +1 -1
  129. package/bundle/typescript/src/commands/game/sideQuest/utilities/room-grid.d.ts +46 -0
  130. package/bundle/typescript/src/commands/game/sideQuest/utilities/room-grid.js +90 -5
  131. package/bundle/typescript/src/commands/game/sideQuest/utilities/room-grid.js.map +1 -1
  132. package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.d.ts +70 -0
  133. package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.js +168 -22
  134. package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.js.map +1 -1
  135. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js +83 -0
  136. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js.map +1 -1
  137. package/package.json +1 -1
@@ -2,7 +2,7 @@ import blessed from 'blessed';
2
2
  import { ISceneSeedJson } from './types/seed/scene-seed.js';
3
3
  import { Item } from './models/item.js';
4
4
  import { Player, Inventory, Room, Scene } from './models/_index.js';
5
- import { ISaveFileV1, ISavedItem, SaveReason } from './types/save-file.js';
5
+ import { ISaveFileV1, ISavedItem, SaveReason, IRegisteredSprite } from './types/save-file.js';
6
6
  /**
7
7
  * One crew slot (see THE CREW block below): the persistent record a
8
8
  * live 'ally' shell is rebuilt from each run. `ghost` marks a slot held
@@ -33,6 +33,7 @@ import { IDocwagonContract } from './utilities/docwagon.js';
33
33
  import { ILifestyleTier } from './utilities/commerce.js';
34
34
  import { CommandQueue } from './utilities/command-queue.js';
35
35
  import { NPC } from './models/npc.js';
36
+ import type { CompanionKind } from './models/npc.js';
36
37
  import { AutoFight } from './utilities/auto-fight.js';
37
38
  import { IMainGameConfig } from './ui.js';
38
39
  import { PlayerEquipment } from './types/player-equipment.js';
@@ -329,7 +330,7 @@ export default class Game {
329
330
  private seedHomeTurfContacts;
330
331
  companions: {
331
332
  npc: NPC;
332
- kind: 'spirit' | 'sprite' | 'agent' | 'drone' | 'ally';
333
+ kind: CompanionKind;
333
334
  services?: number;
334
335
  force: number;
335
336
  boundDevice?: Item;
@@ -340,9 +341,70 @@ export default class Game {
340
341
  * survives travel and rides the save file. */
341
342
  registered?: boolean;
342
343
  }[];
343
- /** A registered sprite folded for travel, waiting to re-shell at the
344
- * destination (the drone _pendingRedeploys school). */
345
- private _pendingSpriteRedeploy?;
344
+ /** REGISTERED SPRITES WAITING IN THE RESONANCE (SR5 p.254-256):
345
+ * folded for travel, or staged from a resumed save, waiting to
346
+ * re-shell (the drone _pendingRedeploys school).
347
+ *
348
+ * An ARRAY since 2026-08-28. It was a single slot back when one
349
+ * sprite was the hard maximum; the canon cap is one COMPILED sprite
350
+ * with registered ones exempt, up to LOGIC of them (register.ts), so
351
+ * a single slot would have quietly dropped every registered sprite
352
+ * but one at the next save or journey -- the same "your permanent
353
+ * companion vanished" the fix is for, moved one step downstream. */
354
+ private _pendingSpriteRedeploy;
355
+ /** How many registrations are spent: the ones standing here plus the
356
+ * ones waiting in the Resonance. register.ts bills this against
357
+ * Logic. */
358
+ registeredSpriteCount(): number;
359
+ /** Registered sprites waiting in the Resonance, for the surfaces that
360
+ * have to tell a player what they still have. A copy: the stash is
361
+ * maintained by the movers above and nowhere else. */
362
+ registeredSpritesWaiting(): IRegisteredSprite[];
363
+ /**
364
+ * DISMISS half of Call/Dismiss Sprite (SR5 p.250, Simple Action):
365
+ * "send a sprite back to the Resonance, releasing it from any tasks it
366
+ * still owes you."
367
+ *
368
+ * The task release is canon and it is the expensive part -- p.256
369
+ * offers STANDBY (costs 1 task, keeps the rest) precisely because
370
+ * dismissing burns them all. So tasks go to 0 here rather than being
371
+ * carried, and the command that calls this says so out loud before a
372
+ * player spends a companion's usefulness to tidy the grid.
373
+ *
374
+ * Only a REGISTERED sprite has anywhere to go. A compiled one that is
375
+ * sent away is simply gone, which is decompile's job, not this one --
376
+ * so this refuses it rather than quietly destroying it.
377
+ */
378
+ dismissSpriteToResonance(entry: (typeof this.companions)[number]): boolean;
379
+ /**
380
+ * STANDBY (SR5 p.256, a registered sprite TASK): "tells the sprite to
381
+ * return to the Resonance but come when you call it. This keeps the
382
+ * sprite from giving away your presence or getting in harm's way."
383
+ * Costs ONE task.
384
+ *
385
+ * The middle option dismissal made visible. Dismissing is free at the
386
+ * door and costs everything the sprite owes you (p.250); standby
387
+ * costs one and keeps the rest, which is the whole reason the book
388
+ * sells it. Without this the only way to park a sprite was to spend
389
+ * its entire usefulness, and a player who wanted it out of sight for
390
+ * one room paid for that with every favour it had left.
391
+ *
392
+ * Returns false when there is no task to spend with. A registered
393
+ * sprite that owes you nothing cannot pay for standby -- and does not
394
+ * need to, because dismissing it releases nothing it still had. The
395
+ * caller says that out loud rather than silently doing the other one.
396
+ */
397
+ standbySpriteToResonance(entry: (typeof this.companions)[number]): boolean;
398
+ /**
399
+ * CALL half of Call/Dismiss Sprite (p.250): "You call a registered
400
+ * sprite you have waiting in the Resonance."
401
+ *
402
+ * `name` picks one when several wait; without it, the first. Returns
403
+ * the arrival line, or undefined when nothing answered -- the caller
404
+ * owns the refusal wording, because "you have none" and "you have
405
+ * some but not that one" are different things to be told.
406
+ */
407
+ callSpriteFromResonance(name?: string): string | undefined;
346
408
  private _pendingRedeploys;
347
409
  private _saveFilePath?;
348
410
  private _dead;
@@ -390,7 +452,7 @@ export default class Game {
390
452
  spawnCompanionShell(opts: {
391
453
  name: string;
392
454
  description: string;
393
- kind: 'spirit' | 'sprite' | 'agent' | 'drone' | 'ally';
455
+ kind: CompanionKind;
394
456
  combat: Partial<import('./models/player.js').ICombatAttributes>;
395
457
  room: Room;
396
458
  plane: 'meat' | 'matrix' | 'astral';
@@ -433,11 +495,7 @@ export default class Game {
433
495
  /** Re-shell a registered sprite (travel arrival, or a resumed save).
434
496
  * Returns the arrival line, or undefined when the shell can't land
435
497
  * (name collision -- vanishingly rare). */
436
- respawnRegisteredSprite(spec: {
437
- spriteType: string;
438
- level: number;
439
- tasks: number;
440
- }): string | undefined;
498
+ respawnRegisteredSprite(spec: IRegisteredSprite): string | undefined;
441
499
  /**
442
500
  * Records a real transaction with a hub NPC: first contact opens the
443
501
  * relationship at Loyalty 1 (a safeguard -- the hub cast is pre-seeded
@@ -654,6 +712,12 @@ export default class Game {
654
712
  */
655
713
  runStartedAt?: Date;
656
714
  forfeitArmed: boolean;
715
+ /** Set by "abandon": the next taxi WALKS OUT instead of running an
716
+ * errand (mYTCzJbsdZxYsTsZo). The reversible trip is the default and
717
+ * the irreversible one is asked for -- Notoriety, a forfeited payout
718
+ * and a destroyed scene should require the deliberate word, and a
719
+ * round trip you can undo by getting back in the cab should not. */
720
+ walkOutArmed: boolean;
657
721
  /**
658
722
  * The meet and the wrap-up, triggered by the player's first/next real
659
723
  * interaction with the client (talk-to, a connected call, a give).
@@ -772,6 +836,66 @@ export default class Game {
772
836
  * state (a persona still jacked in, an astral projection, a sneak,
773
837
  * open combat bookkeeping) is settled on the way home.
774
838
  */
839
+ /**
840
+ * THE JOB YOU LEFT STANDING (mYTCzJbsdZxYsTsZo: "I'd like it to not
841
+ * fail the run -- I should be able to come and go to the job as I
842
+ * need (to get new gear)").
843
+ *
844
+ * Held in memory only, and deliberately NOT saved. Mid-run state
845
+ * never is -- "runs are disposable, a quit resumes to the hub with
846
+ * the job back on offer" -- so an errand is SESSION-SCOPED and needs
847
+ * no save-schema change. Quit mid-errand and you get exactly today's
848
+ * behaviour rather than a half-restored scene from a save that was
849
+ * never designed to hold one.
850
+ *
851
+ * The rooms survive because something finally holds them: returnToHub
852
+ * orphans a run "wholesale" only because nothing kept a reference.
853
+ */
854
+ private _openRun?;
855
+ /** Is there a job waiting for the runner to come back to it? */
856
+ get hasOpenRun(): boolean;
857
+ /** The room an open run is waiting in, for the surfaces that say so. */
858
+ get openRunSceneName(): string | undefined;
859
+ /**
860
+ * AN ERRAND IS NOT A HOMECOMING, and that is the whole design.
861
+ *
862
+ * returnToHub is a RITUAL, not a journey. Walking its full length
863
+ * twice per gear run would hand a player, free and on demand: a full
864
+ * stun heal at High lifestyle ("the shower runs hot until the run is
865
+ * a rumor"), every vendor's shelves restocked, a fresh legwork pull
866
+ * from every contact, the busking cycle reset, and a rerolled
867
+ * for-hire board -- while ALSO charging rent again and burning a
868
+ * twelfth of the DocWagon contract, whose year "ticks in homecomings".
869
+ * Wrong in both directions at once: the exploit and the punishment
870
+ * are the same line of code.
871
+ *
872
+ * So this is its own path rather than a flag on that one. Written as
873
+ * a separate method ON PURPOSE: parameterising the ritual would mean
874
+ * every future line added to it silently joins the errand too, and
875
+ * the failure would be invisible -- a restock nobody notices is not a
876
+ * crash. Here, anything an errand should do has to be written here.
877
+ *
878
+ * WHAT IT DOES: state hygiene the cab demands (a persona cannot ride
879
+ * in a taxi), companions fold and unfold as on any trip, and the
880
+ * scene swaps. Nothing else.
881
+ *
882
+ * WHAT IT DOES NOT DO, all of it deliberate: no client settlement, no
883
+ * crew settlement or disband, no jobsRun tally, no lifestyle upkeep,
884
+ * no restock, no rumor, no gig advance, no hire reroll, no DocWagon
885
+ * tick, no legwork refresh -- and NO per-job reset. A RETURN LEG IS
886
+ * NOT A NEW JOB: Edge does not refill, haggledThisJob does not clear,
887
+ * First Impression does not re-arm. You come back as you left, which
888
+ * is the difference between fetching a gun and starting over.
889
+ */
890
+ leaveRunForErrand(): string | undefined;
891
+ /** Back to the job you left standing. */
892
+ resumeOpenRun(): string | undefined;
893
+ /** Cross-plane and combat state that must not ride in a cab, shared
894
+ * by both legs of an errand. A persona has no body to put in a taxi
895
+ * and a fight does not travel. */
896
+ private settleTravelState;
897
+ /** The panel refresh both errand legs need. */
898
+ private refreshHubUi;
775
899
  private returnToHub;
776
900
  /**
777
901
  * KNIGHT ERRANT CHECKPOINT (SINs & getting caught, ruling 2026-08-24;