@maka/maka-cli 5.64.0 → 5.65.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 (167) hide show
  1. package/bundle/typescript/package.json +4 -3
  2. package/bundle/typescript/src/commands/game/sideQuest/commands/backlog.d.ts +29 -2
  3. package/bundle/typescript/src/commands/game/sideQuest/commands/backlog.js +165 -1
  4. package/bundle/typescript/src/commands/game/sideQuest/commands/backlog.js.map +1 -1
  5. package/bundle/typescript/src/commands/game/sideQuest/commands/bluff.d.ts +40 -13
  6. package/bundle/typescript/src/commands/game/sideQuest/commands/bluff.js +107 -25
  7. package/bundle/typescript/src/commands/game/sideQuest/commands/bluff.js.map +1 -1
  8. package/bundle/typescript/src/commands/game/sideQuest/commands/breach.d.ts +11 -15
  9. package/bundle/typescript/src/commands/game/sideQuest/commands/breach.js +13 -16
  10. package/bundle/typescript/src/commands/game/sideQuest/commands/breach.js.map +1 -1
  11. package/bundle/typescript/src/commands/game/sideQuest/commands/buy.d.ts +8 -0
  12. package/bundle/typescript/src/commands/game/sideQuest/commands/buy.js +30 -2
  13. package/bundle/typescript/src/commands/game/sideQuest/commands/buy.js.map +1 -1
  14. package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.d.ts +40 -49
  15. package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.js +121 -160
  16. package/bundle/typescript/src/commands/game/sideQuest/commands/bypass-command.js.map +1 -1
  17. package/bundle/typescript/src/commands/game/sideQuest/commands/cast.d.ts +7 -8
  18. package/bundle/typescript/src/commands/game/sideQuest/commands/cast.js +13 -13
  19. package/bundle/typescript/src/commands/game/sideQuest/commands/cast.js.map +1 -1
  20. package/bundle/typescript/src/commands/game/sideQuest/commands/cover.d.ts +30 -0
  21. package/bundle/typescript/src/commands/game/sideQuest/commands/cover.js +65 -0
  22. package/bundle/typescript/src/commands/game/sideQuest/commands/cover.js.map +1 -0
  23. package/bundle/typescript/src/commands/game/sideQuest/commands/dispel.d.ts +1 -1
  24. package/bundle/typescript/src/commands/game/sideQuest/commands/dispel.js +2 -2
  25. package/bundle/typescript/src/commands/game/sideQuest/commands/dispel.js.map +1 -1
  26. package/bundle/typescript/src/commands/game/sideQuest/commands/go.js +25 -3
  27. package/bundle/typescript/src/commands/game/sideQuest/commands/go.js.map +1 -1
  28. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.d.ts +2 -3
  29. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js +2 -2
  30. package/bundle/typescript/src/commands/game/sideQuest/commands/hack.js.map +1 -1
  31. package/bundle/typescript/src/commands/game/sideQuest/commands/job-offer.js +9 -1
  32. package/bundle/typescript/src/commands/game/sideQuest/commands/job-offer.js.map +1 -1
  33. package/bundle/typescript/src/commands/game/sideQuest/commands/jobs.js +2 -1
  34. package/bundle/typescript/src/commands/game/sideQuest/commands/jobs.js.map +1 -1
  35. package/bundle/typescript/src/commands/game/sideQuest/commands/look.js +58 -2
  36. package/bundle/typescript/src/commands/game/sideQuest/commands/look.js.map +1 -1
  37. package/bundle/typescript/src/commands/game/sideQuest/commands/map.js +18 -4
  38. package/bundle/typescript/src/commands/game/sideQuest/commands/map.js.map +1 -1
  39. package/bundle/typescript/src/commands/game/sideQuest/commands/move.js +1 -1
  40. package/bundle/typescript/src/commands/game/sideQuest/commands/pick.d.ts +2 -3
  41. package/bundle/typescript/src/commands/game/sideQuest/commands/pick.js +2 -2
  42. package/bundle/typescript/src/commands/game/sideQuest/commands/pick.js.map +1 -1
  43. package/bundle/typescript/src/commands/game/sideQuest/commands/posture.d.ts +45 -0
  44. package/bundle/typescript/src/commands/game/sideQuest/commands/posture.js +115 -0
  45. package/bundle/typescript/src/commands/game/sideQuest/commands/posture.js.map +1 -0
  46. package/bundle/typescript/src/commands/game/sideQuest/commands/say.d.ts +1 -0
  47. package/bundle/typescript/src/commands/game/sideQuest/commands/say.js +80 -9
  48. package/bundle/typescript/src/commands/game/sideQuest/commands/say.js.map +1 -1
  49. package/bundle/typescript/src/commands/game/sideQuest/commands/search.js +35 -24
  50. package/bundle/typescript/src/commands/game/sideQuest/commands/search.js.map +1 -1
  51. package/bundle/typescript/src/commands/game/sideQuest/commands/take.js +12 -0
  52. package/bundle/typescript/src/commands/game/sideQuest/commands/take.js.map +1 -1
  53. package/bundle/typescript/src/commands/game/sideQuest/commands/unlock.js +1 -1
  54. package/bundle/typescript/src/commands/game/sideQuest/commands/unlock.js.map +1 -1
  55. package/bundle/typescript/src/commands/game/sideQuest/commands/use.d.ts +17 -0
  56. package/bundle/typescript/src/commands/game/sideQuest/commands/use.js +158 -1
  57. package/bundle/typescript/src/commands/game/sideQuest/commands/use.js.map +1 -1
  58. package/bundle/typescript/src/commands/game/sideQuest/engine-version.d.ts +1 -1
  59. package/bundle/typescript/src/commands/game/sideQuest/engine-version.js +15 -1
  60. package/bundle/typescript/src/commands/game/sideQuest/engine-version.js.map +1 -1
  61. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.d.ts +82 -43
  62. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js +419 -263
  63. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js.map +1 -1
  64. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-factory.js +82 -84
  65. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-factory.js.map +1 -1
  66. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-seed-generator.d.ts +23 -4
  67. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-seed-generator.js +95 -79
  68. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-seed-generator.js.map +1 -1
  69. package/bundle/typescript/src/commands/game/sideQuest/factories/seed-migration.d.ts +30 -0
  70. package/bundle/typescript/src/commands/game/sideQuest/factories/seed-migration.js +176 -0
  71. package/bundle/typescript/src/commands/game/sideQuest/factories/seed-migration.js.map +1 -0
  72. package/bundle/typescript/src/commands/game/sideQuest/game.d.ts +10 -0
  73. package/bundle/typescript/src/commands/game/sideQuest/game.js +21 -5
  74. package/bundle/typescript/src/commands/game/sideQuest/game.js.map +1 -1
  75. package/bundle/typescript/src/commands/game/sideQuest/headless.js +24 -0
  76. package/bundle/typescript/src/commands/game/sideQuest/headless.js.map +1 -1
  77. package/bundle/typescript/src/commands/game/sideQuest/models/_index.d.ts +0 -1
  78. package/bundle/typescript/src/commands/game/sideQuest/models/_index.js +0 -1
  79. package/bundle/typescript/src/commands/game/sideQuest/models/_index.js.map +1 -1
  80. package/bundle/typescript/src/commands/game/sideQuest/models/device.d.ts +121 -0
  81. package/bundle/typescript/src/commands/game/sideQuest/models/device.js +145 -0
  82. package/bundle/typescript/src/commands/game/sideQuest/models/device.js.map +1 -0
  83. package/bundle/typescript/src/commands/game/sideQuest/models/door.d.ts +27 -8
  84. package/bundle/typescript/src/commands/game/sideQuest/models/door.js +15 -10
  85. package/bundle/typescript/src/commands/game/sideQuest/models/door.js.map +1 -1
  86. package/bundle/typescript/src/commands/game/sideQuest/models/npc.d.ts +81 -0
  87. package/bundle/typescript/src/commands/game/sideQuest/models/npc.js +138 -21
  88. package/bundle/typescript/src/commands/game/sideQuest/models/npc.js.map +1 -1
  89. package/bundle/typescript/src/commands/game/sideQuest/models/player.d.ts +68 -0
  90. package/bundle/typescript/src/commands/game/sideQuest/models/player.js +102 -0
  91. package/bundle/typescript/src/commands/game/sideQuest/models/player.js.map +1 -1
  92. package/bundle/typescript/src/commands/game/sideQuest/models/room.d.ts +72 -43
  93. package/bundle/typescript/src/commands/game/sideQuest/models/room.js +82 -59
  94. package/bundle/typescript/src/commands/game/sideQuest/models/room.js.map +1 -1
  95. package/bundle/typescript/src/commands/game/sideQuest/models/scene.d.ts +1 -4
  96. package/bundle/typescript/src/commands/game/sideQuest/models/scene.js +0 -22
  97. package/bundle/typescript/src/commands/game/sideQuest/models/scene.js.map +1 -1
  98. package/bundle/typescript/src/commands/game/sideQuest/scenes/scene1.json +78 -109
  99. package/bundle/typescript/src/commands/game/sideQuest/scenes/scene2.json +4 -101
  100. package/bundle/typescript/src/commands/game/sideQuest/types/save-file.d.ts +24 -0
  101. package/bundle/typescript/src/commands/game/sideQuest/types/seed/device-seed.d.ts +52 -0
  102. package/bundle/typescript/src/commands/game/sideQuest/types/seed/device-seed.js +2 -0
  103. package/bundle/typescript/src/commands/game/sideQuest/types/seed/device-seed.js.map +1 -0
  104. package/bundle/typescript/src/commands/game/sideQuest/types/seed/legacy-puzzle-seed.d.ts +63 -0
  105. package/bundle/typescript/src/commands/game/sideQuest/types/seed/legacy-puzzle-seed.js +2 -0
  106. package/bundle/typescript/src/commands/game/sideQuest/types/seed/legacy-puzzle-seed.js.map +1 -0
  107. package/bundle/typescript/src/commands/game/sideQuest/types/seed/player-seed.d.ts +6 -0
  108. package/bundle/typescript/src/commands/game/sideQuest/types/seed/room-seed.d.ts +4 -0
  109. package/bundle/typescript/src/commands/game/sideQuest/types/seed/scene-seed.d.ts +3 -2
  110. package/bundle/typescript/src/commands/game/sideQuest/types/shared/abstracts.d.ts +2 -28
  111. package/bundle/typescript/src/commands/game/sideQuest/types/shared/abstracts.js +1 -14
  112. package/bundle/typescript/src/commands/game/sideQuest/types/shared/abstracts.js.map +1 -1
  113. package/bundle/typescript/src/commands/game/sideQuest/ui.js +24 -0
  114. package/bundle/typescript/src/commands/game/sideQuest/ui.js.map +1 -1
  115. package/bundle/typescript/src/commands/game/sideQuest/utilities/affordances.d.ts +55 -0
  116. package/bundle/typescript/src/commands/game/sideQuest/utilities/affordances.js +36 -0
  117. package/bundle/typescript/src/commands/game/sideQuest/utilities/affordances.js.map +1 -0
  118. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-review.d.ts +65 -0
  119. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-review.js +137 -0
  120. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-review.js.map +1 -0
  121. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog.d.ts +90 -1
  122. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog.js +103 -1
  123. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog.js.map +1 -1
  124. package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js +37 -4
  125. package/bundle/typescript/src/commands/game/sideQuest/utilities/combat-exchange.js.map +1 -1
  126. package/bundle/typescript/src/commands/game/sideQuest/utilities/credentials.d.ts +26 -0
  127. package/bundle/typescript/src/commands/game/sideQuest/utilities/credentials.js +48 -0
  128. package/bundle/typescript/src/commands/game/sideQuest/utilities/credentials.js.map +1 -0
  129. package/bundle/typescript/src/commands/game/sideQuest/utilities/devices.d.ts +23 -0
  130. package/bundle/typescript/src/commands/game/sideQuest/utilities/devices.js +55 -0
  131. package/bundle/typescript/src/commands/game/sideQuest/utilities/devices.js.map +1 -0
  132. package/bundle/typescript/src/commands/game/sideQuest/utilities/fuzzy-match.d.ts +57 -2
  133. package/bundle/typescript/src/commands/game/sideQuest/utilities/fuzzy-match.js +46 -3
  134. package/bundle/typescript/src/commands/game/sideQuest/utilities/fuzzy-match.js.map +1 -1
  135. package/bundle/typescript/src/commands/game/sideQuest/utilities/log-style.d.ts +16 -0
  136. package/bundle/typescript/src/commands/game/sideQuest/utilities/log-style.js +18 -0
  137. package/bundle/typescript/src/commands/game/sideQuest/utilities/log-style.js.map +1 -1
  138. package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js +68 -38
  139. package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js.map +1 -1
  140. package/bundle/typescript/src/commands/game/sideQuest/utilities/room-grid.d.ts +3 -3
  141. package/bundle/typescript/src/commands/game/sideQuest/utilities/room-grid.js +3 -3
  142. package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.d.ts +36 -12
  143. package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.js +101 -27
  144. package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.js.map +1 -1
  145. package/bundle/typescript/src/commands/game/sideQuest/utilities/use-target.d.ts +106 -0
  146. package/bundle/typescript/src/commands/game/sideQuest/utilities/use-target.js +184 -0
  147. package/bundle/typescript/src/commands/game/sideQuest/utilities/use-target.js.map +1 -0
  148. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js +54 -5
  149. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js.map +1 -1
  150. package/bundle/typescript/src/maka.js +1 -1
  151. package/bundle/typescript/src/maka.js.map +1 -1
  152. package/bundle/typescript/src/tools/sdk-loader/relocate.d.ts +19 -2
  153. package/bundle/typescript/src/tools/sdk-loader/relocate.js +22 -2
  154. package/bundle/typescript/src/tools/sdk-loader/relocate.js.map +1 -1
  155. package/package.json +4 -3
  156. package/bundle/typescript/src/commands/game/sideQuest/commands/solve.d.ts +0 -6
  157. package/bundle/typescript/src/commands/game/sideQuest/commands/solve.js +0 -72
  158. package/bundle/typescript/src/commands/game/sideQuest/commands/solve.js.map +0 -1
  159. package/bundle/typescript/src/commands/game/sideQuest/factories/puzzle-factory.d.ts +0 -6
  160. package/bundle/typescript/src/commands/game/sideQuest/factories/puzzle-factory.js +0 -26
  161. package/bundle/typescript/src/commands/game/sideQuest/factories/puzzle-factory.js.map +0 -1
  162. package/bundle/typescript/src/commands/game/sideQuest/models/puzzle.d.ts +0 -152
  163. package/bundle/typescript/src/commands/game/sideQuest/models/puzzle.js +0 -393
  164. package/bundle/typescript/src/commands/game/sideQuest/models/puzzle.js.map +0 -1
  165. package/bundle/typescript/src/commands/game/sideQuest/types/seed/puzzle-seed.d.ts +0 -28
  166. package/bundle/typescript/src/commands/game/sideQuest/types/seed/puzzle-seed.js +0 -2
  167. package/bundle/typescript/src/commands/game/sideQuest/types/seed/puzzle-seed.js.map +0 -1
@@ -1,9 +1,12 @@
1
1
  import { Command } from './command.js';
2
2
  import { Category } from '../types/shared/item-enum.js';
3
3
  import { rollPool, formatRoll } from '../utilities/dice.js';
4
+ import { resolveUseTarget } from '../utilities/use-target.js';
5
+ import { exitSpot, ensureAtSpot } from '../utilities/spots.js';
6
+ import { applyDeviceOpened } from '../utilities/devices.js';
4
7
  export class UseCommand extends Command {
5
8
  static verb = 'use';
6
- static description = 'Use an item. A Medical item (medkit, stim patch) heals your wounds and is consumed.';
9
+ static description = 'Use a thing: an item from your pack (a medkit, a stim patch), or a device in the room -- "use keypad 4471" offers a code, "use safe" tries it with what you are carrying. With one device here, a bare code works too.';
7
10
  /** Set by the eat/drink subclasses: what the verb is FOR. Lets "eat
8
11
  * noodles" find the Bowl of Laksa -- a real session ordered noodles,
9
12
  * got served the bowl, then couldn't eat it because "noodles" isn't
@@ -43,6 +46,20 @@ export class UseCommand extends Command {
43
46
  }
44
47
  return { error: `You don't have the ${itemName} to use.` };
45
48
  }
49
+ /**
50
+ * Does this string plausibly mean something in the pack? A
51
+ * CLASSIFIER, not a resolver -- see the call site in use() for why
52
+ * the distinction is load-bearing.
53
+ */
54
+ looksLikeCarried(whole) {
55
+ const w = whole.toLowerCase().trim();
56
+ if (!w)
57
+ return false;
58
+ return this.actor.inventory.getAllItems().some(i => {
59
+ const n = i.name.toLowerCase();
60
+ return n === w || n.includes(w) || w.includes(n);
61
+ });
62
+ }
46
63
  use(args) {
47
64
  // Using gear is hands-and-mouth work: the pack, the patches, and the
48
65
  // noodles are all wherever the BODY is (a jumped-in drone "eating"
@@ -52,6 +69,67 @@ export class UseCommand extends Command {
52
69
  ? `The ${this.actor.riggedDrone?.name ?? 'drone'} doesn't have a mouth or hands -- your gear is with your body. "jump" back first.`
53
70
  : `Your gear is with your body. Come back to it first.`;
54
71
  }
72
+ // DEVICES BEFORE THE GENEROUS ITEM LADDER (see
73
+ // utilities/use-target.ts, which owns the reasoning and the rung
74
+ // order). `use` was inventory-only; with barriers becoming
75
+ // room-owned devices it serves two populations that were never in
76
+ // the same namespace, and the item matcher's generosity -- correct
77
+ // for gear -- would otherwise swallow `use keypad 4471` whole for a
78
+ // carried "key".
79
+ //
80
+ // openableDevices(), never allDevices(): an opened device is
81
+ // furniture, and including it would break the two rungs that guard
82
+ // on `devices.length === 1` -- the generic noun and the bare code
83
+ // would silently stop resolving in a room with one thing left to
84
+ // act on.
85
+ const devices = this.actor.currentLocation?.openableDevices?.() ?? [];
86
+ const target = resolveUseTarget(args, this.actor.inventory.getAllItems(), devices,
87
+ // CLASSIFIES, and deliberately NOT resolveItem(). The two agree
88
+ // everywhere except AMBIGUITY, and that is exactly where it
89
+ // matters: carrying a stim patch and a trauma patch, resolveItem
90
+ // ("which item is it?") returns NO item for "patch" and asks
91
+ // which -- so a string that obviously means gear would read as
92
+ // "not gear", rung 4 would fire, and "patch" would be typed into
93
+ // the keypad as a code. Ambiguity is MORE evidence this is an
94
+ // item, not less. Verified against a live inventory before the
95
+ // fix, not reasoned at.
96
+ //
97
+ // Yes, this restates resolveKey's substring rules. It is a
98
+ // different QUESTION -- "could this conceivably be gear?" rather
99
+ // than "which gear is it?" -- and wiring the two together is
100
+ // what produced the bug.
101
+ (whole) => this.looksLikeCarried(whole));
102
+ if (target.kind === 'device') {
103
+ return this.useDevice(target.device, target.rest);
104
+ }
105
+ if (target.kind === 'ambiguous') {
106
+ return `That could mean more than one thing here -- be more specific: ${target.devices.map(d => d.name).join(', ')}.`;
107
+ }
108
+ // `use <item> on <device>` (item YYqbif44PFSZrc2JH). This form used
109
+ // to evaporate: nothing matched it, so the fuzzy ladder below
110
+ // resolved "keycard on panel" to the keycard and used it on
111
+ // nothing, while the panel never heard. The player watched their
112
+ // keycard get spent and concluded it was the wrong card.
113
+ //
114
+ // The resolver hands back the item's NAME rather than an item,
115
+ // because resolveItem below already owns both refusals this needs:
116
+ // "you don't have one" and "which one -- stim patch, trauma
117
+ // patch?". Resolving it up there would have been a second item
118
+ // matcher, which is how this file got its bugs in the first place.
119
+ if (target.kind === 'apply') {
120
+ const held = this.resolveItem(target.itemName);
121
+ if (!held.item) {
122
+ return held.error ?? `You're not carrying ${target.itemName}.`;
123
+ }
124
+ // The item's NAME is the offer. Device.offer already treats
125
+ // carrying the keyItem as the offer regardless of the words, so
126
+ // no new path is needed here -- and inventing one would put a
127
+ // second copy of "what opens this" outside the model.
128
+ return this.useDevice(target.device, held.item.name);
129
+ }
130
+ // 'item' and 'fall-through' both continue below: the existing
131
+ // ladder owns the "no such thing" prose, and re-running it for an
132
+ // exact hit costs nothing.
55
133
  const itemName = args.join(' ').toLowerCase();
56
134
  const resolved = this.resolveItem(itemName);
57
135
  if (!resolved.item) {
@@ -83,6 +161,85 @@ export class UseCommand extends Command {
83
161
  return `You can't use the ${itemName} in this way.`;
84
162
  }
85
163
  }
164
+ /**
165
+ * OFFER something to a device: a code, or whatever you are carrying.
166
+ *
167
+ * The reach check is lifted VERBATIM from the forcing commands
168
+ * (bypass-command) rather than re-derived -- a device has a PLACE,
169
+ * and "you can't work a keypad from across the room" has to mean the
170
+ * same thing whichever verb you reached for.
171
+ */
172
+ useDevice(device, rest) {
173
+ const room = this.actor.currentLocation;
174
+ // ATSPOT FIRST -- coordinator ruling 2026-08-27, reversing the
175
+ // original spec (`exitSpot(...) ?? atSpot`).
176
+ //
177
+ // atSpot is an AUTHOR'S EXPLICIT PLACEMENT; exitSpot is INFERRED.
178
+ // The migration only fills a device's atSpot from its exit's when
179
+ // the device had none of its own, so a device carrying BOTH means
180
+ // the seed said two different things -- and preferring the
181
+ // inference over the statement inverts the point of having the
182
+ // field. Generation starts emitting both once the generator moves
183
+ // to devices, so this is a decision about the future, not about
184
+ // the three seeds that exist today.
185
+ //
186
+ // It also keeps the refusal and the walk from contradicting each
187
+ // other: a locked door's refusal names WHERE THE MECHANISM IS, so
188
+ // walking the player somewhere else to touch it would say two
189
+ // things in one breath.
190
+ //
191
+ // NOT the pre-flip code's rule. bypass-command used to branch on
192
+ // door-ness (`door && direction ? exitSpot(...) : atSpot`); both
193
+ // call sites now ??-chain and agree with EACH OTHER, and with
194
+ // neither the old code nor the original spec. Do not "fix" one to
195
+ // match something older.
196
+ const where = device.atSpot
197
+ ?? (device.opensExit ? exitSpot(room, device.opensExit) : undefined);
198
+ const reach = ensureAtSpot(this.actor, where);
199
+ if (reach.refusal)
200
+ return reach.refusal;
201
+ const crossNote = reach.line ? `${reach.line}\n` : '';
202
+ // NOTHING TYPED AFTER THE NAME. Say what this particular thing
203
+ // wants, which depends on what it IS.
204
+ if (!rest) {
205
+ if (device.keyItem && this.actor.inventory.hasItem(device.keyItem.name)) {
206
+ // They are carrying what opens it -- that IS the offer.
207
+ return crossNote + this.openWith(device, '', 'use');
208
+ }
209
+ const ways = device.verbs().map(v => `"${v} ${device.name}"`).join(' or ');
210
+ if (device.code) {
211
+ return crossNote + `${device.name} wants a code: "use ${device.name.toLowerCase()} <the code>". Or force it -- ${ways}.`;
212
+ }
213
+ // A LOCK IS NEVER TOLD IT HAS A CODE. User ruling: "you can't
214
+ // talk at a _mechanical_ lock." Offering "<the code>" here would
215
+ // send a player hunting a credential that does not exist.
216
+ //
217
+ // Branching on KIND, not on the absence of a code: a codeless
218
+ // PANEL is a real shape (it wants its keyItem), and telling its
219
+ // owner it "has no keyhole for words" would describe a console
220
+ // as a mechanism.
221
+ if (device.kind === 'lock') {
222
+ return crossNote + `${device.name} has no keyhole for words -- it wants a key or force: ${ways}.`;
223
+ }
224
+ return crossNote + (device.keyItem
225
+ ? `${device.name} wants ${device.keyItem.name} -- or force it: ${ways}.`
226
+ : `${device.name} doesn't answer to anything you can say. Force it: ${ways}.`);
227
+ }
228
+ return crossNote + this.openWith(device, rest, 'use');
229
+ }
230
+ /** The offer itself, and everything that follows a thing opening. */
231
+ openWith(device, offered, how) {
232
+ const result = device.offer(offered, this.actor.inventory);
233
+ this.logger.write(`UseCommand: ${this.actor.name} offered "${offered}" to ${device.name}: ${result.success}`);
234
+ this.actor.performAction(how, result.message);
235
+ if (!result.success)
236
+ return result.message;
237
+ const room = this.actor.currentLocation;
238
+ // ONE HOME for what happens when a device opens (see
239
+ // utilities/devices.ts) -- the same call the forcing verbs make.
240
+ const lines = applyDeviceOpened(this.scene, this.actor, room, device, how);
241
+ return [result.message, ...lines].join('\n');
242
+ }
86
243
  /**
87
244
  * Healing, matching combat's texture (see commands/attack.ts): a visible
88
245
  * first-aid dice pool scaled by the item's quality, applied to the
@@ -1 +1 @@
1
- {"version":3,"file":"use.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/use.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/use.ts"],"names":[],"mappings":"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"}
@@ -16,4 +16,4 @@
16
16
  * No import.meta here (engine-graph law) -- this file is loaded by the
17
17
  * server.
18
18
  */
19
- export declare const ENGINE_VERSION = "1.13.0";
19
+ export declare const ENGINE_VERSION = "1.14.0";
@@ -41,5 +41,19 @@
41
41
  // per-identity outcomes, all banking heat.
42
42
  // 1.13.0 (2026-08-24): canon three-band SIN checks (p.364) -- under/
43
43
  // odd/busted at the checkpoint, the counter, and sweeps.
44
- export const ENGINE_VERSION = '1.13.0';
44
+ // 1.14.0 (2026-08-27): THE PUZZLE MECHANIC IS GONE. Barriers are
45
+ // room-owned Devices worked by the verb that suits the thing: a lock
46
+ // picked/breached or opened by its key, a panel given a code through
47
+ // "use", a ward cast at or dispelled, and a person in a doorway talked
48
+ // round rather than solved. Three shared-session surfaces move with it:
49
+ // - COMMAND SEMANTICS: "solve" is deleted with no redirect; "use"
50
+ // gained a device form ("use keypad 4471", and a bare code when one
51
+ // device is present); every barrier refusal is reworded.
52
+ // - SAVE-SHAPE FIELDS the server writes back: hub overlays now carry
53
+ // devices[]; puzzles[] survives as an always-empty tombstone that
54
+ // keeps v5.64.0's unguarded for-of from throwing (see
55
+ // types/save-file.ts).
56
+ // - The engine no longer accepts a seed's puzzles[] as live content;
57
+ // it migrates them on load (factories/seed-migration.ts).
58
+ export const ENGINE_VERSION = '1.14.0';
45
59
  //# sourceMappingURL=engine-version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"engine-version.js","sourceRoot":"","sources":["../../../../../../src/commands/game/sideQuest/engine-version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,sEAAsE;AACtE,mEAAmE;AACnE,oEAAoE;AACpE,sEAAsE;AACtE,6CAA6C;AAC7C,iEAAiE;AACjE,qCAAqC;AACrC,oEAAoE;AACpE,6DAA6D;AAC7D,uEAAuE;AACvE,kDAAkD;AAClD,iEAAiE;AACjE,mEAAmE;AACnE,gEAAgE;AAChE,8DAA8D;AAC9D,kEAAkE;AAClE,kDAAkD;AAClD,kEAAkE;AAClE,4DAA4D;AAC5D,qEAAqE;AACrE,yDAAyD;AACzD,sEAAsE;AACtE,2CAA2C;AAC3C,qEAAqE;AACrE,yDAAyD;AACzD,MAAM,CAAC,MAAM,cAAc,GAAG,QAAQ,CAAC"}
1
+ {"version":3,"file":"engine-version.js","sourceRoot":"","sources":["../../../../../../src/commands/game/sideQuest/engine-version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,sEAAsE;AACtE,mEAAmE;AACnE,oEAAoE;AACpE,sEAAsE;AACtE,6CAA6C;AAC7C,iEAAiE;AACjE,qCAAqC;AACrC,oEAAoE;AACpE,6DAA6D;AAC7D,uEAAuE;AACvE,kDAAkD;AAClD,iEAAiE;AACjE,mEAAmE;AACnE,gEAAgE;AAChE,8DAA8D;AAC9D,kEAAkE;AAClE,kDAAkD;AAClD,kEAAkE;AAClE,4DAA4D;AAC5D,qEAAqE;AACrE,yDAAyD;AACzD,sEAAsE;AACtE,2CAA2C;AAC3C,qEAAqE;AACrE,yDAAyD;AACzD,iEAAiE;AACjE,qEAAqE;AACrE,qEAAqE;AACrE,uEAAuE;AACvE,wEAAwE;AACxE,oEAAoE;AACpE,wEAAwE;AACxE,6DAA6D;AAC7D,uEAAuE;AACvE,sEAAsE;AACtE,0DAA0D;AAC1D,2BAA2B;AAC3B,uEAAuE;AACvE,8DAA8D;AAC9D,MAAM,CAAC,MAAM,cAAc,GAAG,QAAQ,CAAC"}
@@ -32,7 +32,15 @@ export interface ISkeletonExit {
32
32
  direction: string;
33
33
  targetRoom: string;
34
34
  keyRequired?: string;
35
- puzzle?: string;
35
+ /** A devices[].name that holds this door shut. That device lives in
36
+ * THIS room -- the one you must stand in to reach it. */
37
+ device?: string;
38
+ /** An npcs[].name who STANDS in this doorway and will not move.
39
+ * Mutually exclusive with `device`: an exit is gated by a person or
40
+ * by a mechanism, never both. The guard's position is DERIVED from
41
+ * the exit they hold (see assembleScene), so the two cannot disagree
42
+ * about where they are standing. */
43
+ guard?: string;
36
44
  }
37
45
  export interface ISkeletonRoom {
38
46
  name: string;
@@ -53,14 +61,21 @@ export interface ISkeletonNpc {
53
61
  plane?: 'meat' | 'matrix' | 'astral';
54
62
  startLocation: string;
55
63
  }
56
- export interface ISkeletonPuzzle {
64
+ export interface ISkeletonDevice {
57
65
  name: string;
58
- /** Room-anchored placement; omit for a door puzzle (referenced from exits[].puzzle). */
59
- room?: string;
66
+ /** REQUIRED. A device is always room-owned -- a keypad beside a grate
67
+ * physically stands in one room, the one you must be in to reach it.
68
+ * An exit it holds is declared FROM that same room. */
69
+ room: string;
60
70
  concept: string;
61
- bypassType?: 'lockpick' | 'hack' | 'spell' | 'con';
62
- requiresPuzzle?: string;
63
- rewardItem?: string;
71
+ /** lock (a mechanism -- picked, breached, or opened by its key),
72
+ * panel (an interface -- a code, or hacked), ward (a working -- cast
73
+ * at or dispelled). Anything unrecognised CLAMPS to 'panel' rather
74
+ * than throwing: a device whose kind we cannot read is still a
75
+ * device, and rejecting a whole draft over one word is a worse
76
+ * outcome than a keypad where the model meant something else. */
77
+ kind?: 'lock' | 'panel' | 'ward';
78
+ grantsItem?: string;
64
79
  }
65
80
  export type SkeletonItemRole = 'winCondition' | 'reward' | 'key' | 'clue' | 'loot' | 'starting';
66
81
  export interface ISkeletonItem {
@@ -70,8 +85,8 @@ export interface ISkeletonItem {
70
85
  room?: string;
71
86
  heldBy?: string;
72
87
  plane?: 'meat' | 'matrix';
73
- /** clue items only: which puzzle's requiredPhrase this clue reveals. */
74
- forPuzzle?: string;
88
+ /** clue items only: which device's code this clue reveals. */
89
+ forDevice?: string;
75
90
  }
76
91
  export interface ISceneSkeleton {
77
92
  name: string;
@@ -79,7 +94,7 @@ export interface ISceneSkeleton {
79
94
  completionMessage: string;
80
95
  rooms: ISkeletonRoom[];
81
96
  npcs: ISkeletonNpc[];
82
- puzzles: ISkeletonPuzzle[];
97
+ devices: ISkeletonDevice[];
83
98
  items: ISkeletonItem[];
84
99
  winCondition: {
85
100
  item: string;
@@ -123,13 +138,15 @@ export interface INpcDetail {
123
138
  dialogue: string[];
124
139
  combat?: Record<string, unknown>;
125
140
  }
126
- export interface IPuzzleDetail {
141
+ export interface IDeviceDetail {
127
142
  name: string;
128
- riddle: string;
129
- requiredPhrase: string;
130
- successMessage: string;
131
- failureMessage: string;
132
- lockedMessage?: string;
143
+ description: string;
144
+ /** ONLY meaningful on a 'panel'. You cannot talk at a mechanical
145
+ * lock, and a ward answers to the Art -- neither has anything to
146
+ * hear a phrase with. */
147
+ code?: string;
148
+ openMessage: string;
149
+ refuseMessage: string;
133
150
  guardsExit?: string;
134
151
  footprint?: 'small' | 'medium' | 'large';
135
152
  }
@@ -150,7 +167,7 @@ export interface IItemDetail {
150
167
  export interface ISceneDetails {
151
168
  rooms: IRoomDetail[];
152
169
  npcs: INpcDetail[];
153
- puzzles: IPuzzleDetail[];
170
+ devices: IDeviceDetail[];
154
171
  items: IItemDetail[];
155
172
  }
156
173
  /**
@@ -159,20 +176,21 @@ export interface ISceneDetails {
159
176
  * Returns '' when no player is available.
160
177
  */
161
178
  /**
162
- * SPELL OUT THE CLUE RULE, IN THIS RUNNER'S TERMS. The dossier already
163
- * hints at it in prose ("con"-bypass barriers for a talker), and the
164
- * model still missed it: the single most common generation failure on
165
- * record is a barrier this runner can't open with no clue written for
166
- * it. It's character-dependent, which is what made it look like random
167
- * flakiness -- a Face satisfies exactly ONE of the four bypass types, so
168
- * three quarters of the barriers the model naturally reaches for demand
169
- * a clue item, and it keeps forgetting.
179
+ * THE ONE BARRIER RULE THAT STILL DEPENDS ON WHO IS PLAYING.
180
+ *
181
+ * This used to name all three barrier types the runner could and could
182
+ * not force, and demand a clue for each one they could not -- the
183
+ * single most common generation failure on record, and one that looked
184
+ * like random flakiness precisely because it varied with the character.
170
185
  *
171
- * So state it mechanically instead of hinting: name the types they can
172
- * and can't do, and name the consequence. normalizeSkeleton repairs this
173
- * anyway -- this is the half that stops the fault being authored at all.
186
+ * It shrank to this because the clue/key rule became UNCONDITIONAL for
187
+ * panels and locks (see partyCanDispel): a code is findable and a key
188
+ * is placeable, so both are openable by ANY runner and there is nothing
189
+ * character-dependent left to state. A ward is the exception that
190
+ * cannot be written away -- no clue rescues it for a mundane team -- so
191
+ * it is the only thing this still says.
174
192
  */
175
- export declare function bypassBrief(player: Player): string;
193
+ export declare function wardBrief(player: Player): string;
176
194
  export declare function buildPlayerDossier(player?: Player): string;
177
195
  /** The crew summary generation scales opposition against (Phase A of
178
196
  * the party system): name, archetype, and the statline headline. */
@@ -196,20 +214,34 @@ export declare function partyHeadcount(crew?: ICrewDossierEntry[]): number;
196
214
  export declare function buildSkeletonPrompt(tier: number, player?: Player, previousError?: string, rumor?: string, crew?: ICrewDossierEntry[], canonBlock?: string): string;
197
215
  export declare function buildRoomsPrompt(skeleton: ISceneSkeleton, previousError?: string): string;
198
216
  export declare function buildNpcsPrompt(skeleton: ISceneSkeleton, previousError?: string): string;
199
- export declare function buildPuzzlesPrompt(skeleton: ISceneSkeleton, previousError?: string): string;
200
- export declare function buildItemsPrompt(skeleton: ISceneSkeleton, puzzles: IPuzzleDetail[], previousError?: string): string;
217
+ export declare function buildDevicesPrompt(skeleton: ISceneSkeleton, previousError?: string): string;
218
+ export declare function buildItemsPrompt(skeleton: ISceneSkeleton, devices: IDeviceDetail[], previousError?: string): string;
201
219
  /**
202
- * Whether THIS runner can reliably work a barrier of the given bypassType
203
- * with their own hands -- no written-down credential required. This is
204
- * what loosens the "every puzzle needs a discoverable clue" rule when the
205
- * scene is generated against a dossier: a lockpick maglock in a scene
206
- * built for a master locksmith doesn't need its code lying in a book --
207
- * the pick IS their route. Deliberately conservative: EXPLICIT skill
208
- * ratings only (the combatSkill fallback would let any bruiser "qualify"
209
- * as a hacker), threshold 3 (trained professional), and with no dossier
210
- * at all the strict clue rule stays.
220
+ * Can anyone at this table unweave a WARD?
221
+ *
222
+ * The last surviving branch of what used to be canBypassUnaided, which
223
+ * asked the same question of all three barrier kinds. The other two are
224
+ * gone because their answers stopped mattering (ruling 2026-08-27):
225
+ *
226
+ * A PANEL takes a code, and a code is FINDABLE. Write it down and any
227
+ * runner can type it; a decker who did not need it loses nothing.
228
+ * A LOCK takes a key, and a key is FINDABLE. Place it and any runner
229
+ * can carry it to the door; picking becomes the SHORTCUT for someone
230
+ * with locksmith, not the requirement.
231
+ *
232
+ * So for those two the clue/key rule is UNCONDITIONAL now, and the
233
+ * character-dependent waiver is gone with the condition it rested on.
234
+ *
235
+ * A WARD is irreducible. There is no findable answer to a ward; it takes
236
+ * Magic. A mundane team cannot dispel one however much is written down,
237
+ * so a ward generated for a party with nobody awakened is an unopenable
238
+ * barrier no clue can rescue. That is where the character dependence is
239
+ * REAL rather than incidental, and it is the only place this survives.
240
+ *
241
+ * Named for what it now is: a one-case function still called
242
+ * canBypassUnaided would attract the other two cases back.
211
243
  */
212
- export declare function canBypassUnaided(player: Player | undefined, bypassType?: string): boolean;
244
+ export declare function partyCanDispel(player: Player | undefined): boolean;
213
245
  /** Strips accidental markdown fences and parses; throws with a useful message. */
214
246
  export declare function parseJsonReply<T>(reply: string): T;
215
247
  /**
@@ -218,7 +250,14 @@ export declare function parseJsonReply<T>(reply: string): T;
218
250
  * matrix defense...) are still enforced by the assembled-scene validators.
219
251
  */
220
252
  export declare function validateSkeleton(skeleton: ISceneSkeleton, player?: Player, crew?: ICrewDossierEntry[]): void;
221
- export declare function normalizeSkeleton(skeleton: ISceneSkeleton, player?: Player): string[];
253
+ /**
254
+ * `player` is GONE from this signature, not underscored. Its only
255
+ * consumer was the character-dependent clue waiver, and with the
256
+ * clue/key rule unconditional there is nothing here that varies with
257
+ * who is playing. A parameter kept "just in case" is an invitation to
258
+ * make normalization character-dependent again.
259
+ */
260
+ export declare function normalizeSkeleton(skeleton: ISceneSkeleton): string[];
222
261
  /**
223
262
  * THE ANSWER HAS TO BE WRITTEN DOWN. The other half of the clue problem,
224
263
  * and the more expensive half.
@@ -290,7 +329,7 @@ export declare function resolveSpotName(declared: string, spotNames: string[]):
290
329
  */
291
330
  export declare function ensureCredentialKindAgrees(details: ISceneDetails): string[];
292
331
  export declare function assembleScene(skeleton: ISceneSkeleton, details: ISceneDetails, playerName: string): ISceneSeedJson;
293
- export type RepairTarget = 'rooms' | 'npcs' | 'puzzles' | 'items' | 'skeleton';
332
+ export type RepairTarget = 'rooms' | 'npcs' | 'devices' | 'items' | 'skeleton';
294
333
  /**
295
334
  * Maps a validation failure to the chunk that owns the broken content, so
296
335
  * a repair regenerates ONE pass instead of the whole scene. Anything