@maka/maka-cli 5.108.0 → 5.110.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 (41) hide show
  1. package/bundle/typescript/package.json +1 -1
  2. package/bundle/typescript/src/command.js +13 -0
  3. package/bundle/typescript/src/command.js.map +1 -1
  4. package/bundle/typescript/src/commands/game/sideQuest/commands/container-verbs.d.ts +18 -0
  5. package/bundle/typescript/src/commands/game/sideQuest/commands/container-verbs.js +131 -0
  6. package/bundle/typescript/src/commands/game/sideQuest/commands/container-verbs.js.map +1 -0
  7. package/bundle/typescript/src/commands/game/sideQuest/commands/look.js +15 -0
  8. package/bundle/typescript/src/commands/game/sideQuest/commands/look.js.map +1 -1
  9. package/bundle/typescript/src/commands/game/sideQuest/commands/search.js +29 -1
  10. package/bundle/typescript/src/commands/game/sideQuest/commands/search.js.map +1 -1
  11. package/bundle/typescript/src/commands/game/sideQuest/commands/take.d.ts +2 -0
  12. package/bundle/typescript/src/commands/game/sideQuest/commands/take.js +47 -0
  13. package/bundle/typescript/src/commands/game/sideQuest/commands/take.js.map +1 -1
  14. package/bundle/typescript/src/commands/game/sideQuest/factories/room-factory.d.ts +30 -2
  15. package/bundle/typescript/src/commands/game/sideQuest/factories/room-factory.js +39 -0
  16. package/bundle/typescript/src/commands/game/sideQuest/factories/room-factory.js.map +1 -1
  17. package/bundle/typescript/src/commands/game/sideQuest/game.js +22 -2
  18. package/bundle/typescript/src/commands/game/sideQuest/game.js.map +1 -1
  19. package/bundle/typescript/src/commands/game/sideQuest/models/_index.d.ts +1 -0
  20. package/bundle/typescript/src/commands/game/sideQuest/models/_index.js +1 -0
  21. package/bundle/typescript/src/commands/game/sideQuest/models/_index.js.map +1 -1
  22. package/bundle/typescript/src/commands/game/sideQuest/models/container.d.ts +78 -0
  23. package/bundle/typescript/src/commands/game/sideQuest/models/container.js +57 -0
  24. package/bundle/typescript/src/commands/game/sideQuest/models/container.js.map +1 -0
  25. package/bundle/typescript/src/commands/game/sideQuest/models/room.d.ts +18 -0
  26. package/bundle/typescript/src/commands/game/sideQuest/models/room.js +38 -0
  27. package/bundle/typescript/src/commands/game/sideQuest/models/room.js.map +1 -1
  28. package/bundle/typescript/src/commands/game/sideQuest/utilities/condition-report.js +18 -0
  29. package/bundle/typescript/src/commands/game/sideQuest/utilities/condition-report.js.map +1 -1
  30. package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js +21 -3
  31. package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js.map +1 -1
  32. package/bundle/typescript/src/commands/registry.js +1 -1
  33. package/bundle/typescript/src/commands/registry.js.map +1 -1
  34. package/bundle/typescript/src/commands/update.js +29 -6
  35. package/bundle/typescript/src/commands/update.js.map +1 -1
  36. package/bundle/typescript/src/tool.d.ts +21 -0
  37. package/bundle/typescript/src/tool.js.map +1 -1
  38. package/bundle/typescript/src/tools/mpi/shared-verb.d.ts +20 -0
  39. package/bundle/typescript/src/tools/mpi/shared-verb.js +36 -0
  40. package/bundle/typescript/src/tools/mpi/shared-verb.js.map +1 -0
  41. package/package.json +1 -1
@@ -1,6 +1,34 @@
1
- import { Room } from '../models/_index.js';
1
+ import { Room, IRoomConstructorConfig } from '../models/_index.js';
2
2
  import { IRoomSeedJson } from '../types/seed/room-seed.js';
3
+ import type { IRoomGrid } from '../utilities/room-grid.js';
3
4
  export declare class RoomFactory {
4
5
  createRoomFromJson(config: IRoomSeedJson): Promise<Room>;
5
- private convertToRoomConfigFromJson;
6
+ convertToRoomConfigFromJson(roomJson: IRoomSeedJson): IRoomConstructorConfig;
6
7
  }
8
+ /**
9
+ * THE ONE-ASSEMBLER GRID EXPORT (maka-cli.com contract, 2026-09-01).
10
+ *
11
+ * The web sheet renders a room's true geometry from the save's embedded
12
+ * hub seed. Grid synthesis is deterministic (room-grid.ts's contract),
13
+ * but the INPUT ASSEMBLY is not trivially so -- ensureGrid resolves
14
+ * declared exit bindings and kind-matched doorways, and this engine has
15
+ * already paid twice for a second assembler drifting (the direction-
16
+ * blind doorway bug, the centroid hub bug -- both documented in
17
+ * ensureGrid). So the web calls THIS, which builds the room from its
18
+ * seed exactly as the scene factory does -- same whitelist, same
19
+ * declared-binding rule (scene-factory.ts:202) -- and asks the room's
20
+ * OWN ensureGrid. One assembler; a wrapper, not a re-implementation.
21
+ *
22
+ * Exit values are the seed's target-room NAMES (Room.exits accepts
23
+ * strings; ensureGrid only reads the direction keys), so no Door
24
+ * machinery and no neighbor rooms are needed. terrainHints stay
25
+ * whatever the Room ctor derives -- a fresh-from-seed room has no
26
+ * device-opened regions, which matches a fresh boot; a mid-session
27
+ * device unlock changes walkability, not walls/spots/doors, so the
28
+ * rendered geometry stays honest either way.
29
+ *
30
+ * Caller must be inside a session context (Room construction resolves
31
+ * the ambient logger) -- the web's runInSession wrapper, as with the
32
+ * character factory.
33
+ */
34
+ export declare function roomGridFromSeed(seed: IRoomSeedJson): IRoomGrid | undefined;
@@ -5,6 +5,8 @@ export class RoomFactory {
5
5
  const room = new Room(roomConfig);
6
6
  return room;
7
7
  }
8
+ // Public since the roomGridFromSeed export below reuses it -- the same
9
+ // whitelist building the same config, which is the whole point.
8
10
  convertToRoomConfigFromJson(roomJson) {
9
11
  return {
10
12
  name: roomJson.name,
@@ -31,4 +33,41 @@ export class RoomFactory {
31
33
  };
32
34
  }
33
35
  }
36
+ /**
37
+ * THE ONE-ASSEMBLER GRID EXPORT (maka-cli.com contract, 2026-09-01).
38
+ *
39
+ * The web sheet renders a room's true geometry from the save's embedded
40
+ * hub seed. Grid synthesis is deterministic (room-grid.ts's contract),
41
+ * but the INPUT ASSEMBLY is not trivially so -- ensureGrid resolves
42
+ * declared exit bindings and kind-matched doorways, and this engine has
43
+ * already paid twice for a second assembler drifting (the direction-
44
+ * blind doorway bug, the centroid hub bug -- both documented in
45
+ * ensureGrid). So the web calls THIS, which builds the room from its
46
+ * seed exactly as the scene factory does -- same whitelist, same
47
+ * declared-binding rule (scene-factory.ts:202) -- and asks the room's
48
+ * OWN ensureGrid. One assembler; a wrapper, not a re-implementation.
49
+ *
50
+ * Exit values are the seed's target-room NAMES (Room.exits accepts
51
+ * strings; ensureGrid only reads the direction keys), so no Door
52
+ * machinery and no neighbor rooms are needed. terrainHints stay
53
+ * whatever the Room ctor derives -- a fresh-from-seed room has no
54
+ * device-opened regions, which matches a fresh boot; a mid-session
55
+ * device unlock changes walkability, not walls/spots/doors, so the
56
+ * rendered geometry stays honest either way.
57
+ *
58
+ * Caller must be inside a session context (Room construction resolves
59
+ * the ambient logger) -- the web's runInSession wrapper, as with the
60
+ * character factory.
61
+ */
62
+ export function roomGridFromSeed(seed) {
63
+ const room = new Room(new RoomFactory().convertToRoomConfigFromJson(seed));
64
+ for (const exit of seed.exits ?? []) {
65
+ const dir = exit.direction.toLowerCase();
66
+ room.exits.set(dir, exit.targetRoom);
67
+ const atSpot = exit.atSpot;
68
+ if (atSpot)
69
+ room.exitSpots.set(dir, atSpot);
70
+ }
71
+ return room.ensureGrid();
72
+ }
34
73
  //# sourceMappingURL=room-factory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"room-factory.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/factories/room-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAA0B,MAAM,qBAAqB,CAAC;AAGnE,MAAM,OAAO,WAAW;IACtB,KAAK,CAAC,kBAAkB,CAAC,MAAqB;QAC5C,MAAM,UAAU,GAA2B,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC;QACpF,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,2BAA2B,CAAC,QAAuB;QACzD,OAAO;YACL,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,EAAE;YACzB,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,gEAAgE;YAChE,+DAA+D;YAC/D,iCAAiC;YACjC,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,+DAA+D;YAC/D,6DAA6D;YAC7D,2CAA2C;YAC3C,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB;SAClD,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"room-factory.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/factories/room-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAA0B,MAAM,qBAAqB,CAAC;AAKnE,MAAM,OAAO,WAAW;IACtB,KAAK,CAAC,kBAAkB,CAAC,MAAqB;QAC5C,MAAM,UAAU,GAA2B,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC;QACpF,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uEAAuE;IACvE,gEAAgE;IAChE,2BAA2B,CAAC,QAAuB;QACjD,OAAO;YACL,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,EAAE;YACzB,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,gEAAgE;YAChE,+DAA+D;YAC/D,iCAAiC;YACjC,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,+DAA+D;YAC/D,6DAA6D;YAC7D,2CAA2C;YAC3C,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,mBAAmB,EAAE,QAAQ,CAAC,mBAAmB;SAClD,CAAC;IACJ,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAmB;IAClD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,WAAW,EAAE,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3E,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAe,CAAC;QACtD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACrC,MAAM,MAAM,GAAI,IAA4B,CAAC,MAAM,CAAC;QACpD,IAAI,MAAM;YAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;AAC3B,CAAC"}
@@ -4,7 +4,7 @@ import { dirname } from 'path';
4
4
  import { capitalCase } from 'change-case';
5
5
  import { Category, Size, Rating } from './types/shared/item-enum.js';
6
6
  import { Item } from './models/item.js';
7
- import { Room } from './models/_index.js';
7
+ import { Room, Container } from './models/_index.js';
8
8
  import { Door } from './models/door.js';
9
9
  import { SAVE_VERSION } from './types/save-file.js';
10
10
  import { serializePlayer, restorePlayer, captureHubOverlay, applyHubOverlay, writeSaveAtomic, deleteSave, restoreItem, readSave, serializeItem, saveSlug, spillPathFor, } from './utilities/persistence.js';
@@ -51,6 +51,7 @@ import { SearchCommand } from './commands/search.js';
51
51
  import { SayCommand } from './commands/say.js';
52
52
  import { TalkCommand } from './commands/talk.js';
53
53
  import { StoreCommand } from './commands/store.js';
54
+ import { OpenCommand, CloseCommand, PutCommand } from './commands/container-verbs.js';
54
55
  import { GiveCommand } from './commands/give.js';
55
56
  import { ReadCommand } from './commands/read.js';
56
57
  import { KillCommand } from './commands/kill.js';
@@ -2225,6 +2226,12 @@ ${client.name} won't be remembering anything. Dead Johnsons pay nothing -- and t
2225
2226
  CommandFactory.registerCommand('search', SearchCommand);
2226
2227
  CommandFactory.registerCommand('say', SayCommand);
2227
2228
  CommandFactory.registerCommand('store', StoreCommand);
2229
+ // CONTAINERS (increment 1, 2026-09-01): open/close/put claimed --
2230
+ // unclaimed, they fell to the typo-matcher (the jackpoint lesson).
2231
+ // "take <x> from <c>" rides the take verb; `stow` belongs to holster.
2232
+ CommandFactory.registerCommand('open', OpenCommand);
2233
+ CommandFactory.registerCommand('close', CloseCommand);
2234
+ CommandFactory.registerCommand('put', PutCommand);
2228
2235
  CommandFactory.registerCommand('talk-to', TalkCommand);
2229
2236
  CommandFactory.registerCommand('give', GiveCommand);
2230
2237
  CommandFactory.registerCommand('read', ReadCommand);
@@ -2637,6 +2644,19 @@ ${client.name} won't be remembering anything. Dead Johnsons pay nothing -- and t
2637
2644
  description: this.lifestyle.homeDescription,
2638
2645
  roomType: 'Residence',
2639
2646
  });
2647
+ // THE FOOTLOCKER (containers increment 1, 2026-09-01): the secure
2648
+ // stash's tangible face. secureFor makes it the player's alone; its
2649
+ // contents persist as ISavedHub.home.secureStash (the key that
2650
+ // round-tripped empty for every save ever written -- the stash was
2651
+ // dead code until this furniture arrived to be its body). Boots
2652
+ // SHUT each session, like a fresh Device. Game-created beside the
2653
+ // room, never seeded -- the room is code-owned, its contents are
2654
+ // save-owned.
2655
+ this._homeRoom.containers.push(new Container({
2656
+ name: 'Footlocker',
2657
+ description: 'A battered steel footlocker, bolted to the floor -- the one place in the sprawl that answers to you alone.',
2658
+ secureFor: this.player.name,
2659
+ }));
2640
2660
  // SHARED RUNS (server-hosted, headless.ts): the crew RODE to the
2641
2661
  // jobsite -- nobody's cot is stapled to it, and the leader arrives
2642
2662
  // AT the job like every joiner (2026-08-24 playtest: the leader
@@ -5403,7 +5423,7 @@ ${client.name} won't be remembering anything. Dead Johnsons pay nothing -- and t
5403
5423
  */
5404
5424
  static HELP_CATEGORIES = [
5405
5425
  { title: 'moving', entries: [['look'], ['go'], ['move', 'walk', 'approach'], ['run'], ['sprint'], ['climb', 'mantle', 'scale', 'clamber'], ['descend'], ['sit', 'kneel'], ['lie', 'prone'], ['stand'], ['follow'], ['unfollow'], ['map', 'exits'], ['search'], ['sneak']] },
5406
- { title: 'gear', entries: [['inv', 'inventory'], ['equipment', 'eq'], ['take'], ['loot'], ['drop'], ['give'], ['store'], ['equip'], ['unequip'], ['brandish', 'draw'], ['holster', 'stow'], ['reload'], ['use'], ['read']] },
5426
+ { title: 'gear', entries: [['inv', 'inventory'], ['equipment', 'eq'], ['take'], ['loot'], ['drop'], ['give'], ['store'], ['open'], ['close'], ['put'], ['equip'], ['unequip'], ['brandish', 'draw'], ['holster', 'stow'], ['reload'], ['use'], ['read']] },
5407
5427
  { title: 'combat', entries: [['attack'], ['kill'], ['subdue'], ['grapple', 'restrain', 'clinch'], ['struggle'], ['release'], ['cover'], ['stance'], ['surrender'], ['edge'], ['rest'], ['heal', 'firstaid', 'bandage', 'patch']] },
5408
5428
  // The party layer: everyone who walks (or flies, or manifests) at
5409
5429
  // your side answers to these.