@maka/maka-cli 5.1.31 → 5.1.33

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 (97) hide show
  1. package/bundle/typescript/package.json +1 -1
  2. package/bundle/typescript/src/commands/game/sideQuest/commands/command-registry.d.ts +1 -1
  3. package/bundle/typescript/src/commands/game/sideQuest/commands/command-registry.js +2 -2
  4. package/bundle/typescript/src/commands/game/sideQuest/commands/command-registry.js.map +1 -1
  5. package/bundle/typescript/src/commands/game/sideQuest/commands/command.d.ts +2 -2
  6. package/bundle/typescript/src/commands/game/sideQuest/commands/drop.d.ts +1 -1
  7. package/bundle/typescript/src/commands/game/sideQuest/commands/drop.js +8 -5
  8. package/bundle/typescript/src/commands/game/sideQuest/commands/drop.js.map +1 -1
  9. package/bundle/typescript/src/commands/game/sideQuest/commands/equip.d.ts +1 -1
  10. package/bundle/typescript/src/commands/game/sideQuest/commands/equip.js +44 -9
  11. package/bundle/typescript/src/commands/game/sideQuest/commands/equip.js.map +1 -1
  12. package/bundle/typescript/src/commands/game/sideQuest/commands/give.d.ts +1 -1
  13. package/bundle/typescript/src/commands/game/sideQuest/commands/give.js +10 -3
  14. package/bundle/typescript/src/commands/game/sideQuest/commands/give.js.map +1 -1
  15. package/bundle/typescript/src/commands/game/sideQuest/commands/go.d.ts +1 -1
  16. package/bundle/typescript/src/commands/game/sideQuest/commands/go.js +5 -2
  17. package/bundle/typescript/src/commands/game/sideQuest/commands/go.js.map +1 -1
  18. package/bundle/typescript/src/commands/game/sideQuest/commands/kill.d.ts +6 -0
  19. package/bundle/typescript/src/commands/game/sideQuest/commands/kill.js +36 -0
  20. package/bundle/typescript/src/commands/game/sideQuest/commands/kill.js.map +1 -0
  21. package/bundle/typescript/src/commands/game/sideQuest/commands/lock.d.ts +2 -1
  22. package/bundle/typescript/src/commands/game/sideQuest/commands/lock.js +54 -18
  23. package/bundle/typescript/src/commands/game/sideQuest/commands/lock.js.map +1 -1
  24. package/bundle/typescript/src/commands/game/sideQuest/commands/look.d.ts +2 -1
  25. package/bundle/typescript/src/commands/game/sideQuest/commands/look.js +58 -6
  26. package/bundle/typescript/src/commands/game/sideQuest/commands/look.js.map +1 -1
  27. package/bundle/typescript/src/commands/game/sideQuest/commands/read.d.ts +6 -0
  28. package/bundle/typescript/src/commands/game/sideQuest/commands/read.js +26 -0
  29. package/bundle/typescript/src/commands/game/sideQuest/commands/read.js.map +1 -0
  30. package/bundle/typescript/src/commands/game/sideQuest/commands/say.d.ts +1 -1
  31. package/bundle/typescript/src/commands/game/sideQuest/commands/say.js +12 -16
  32. package/bundle/typescript/src/commands/game/sideQuest/commands/say.js.map +1 -1
  33. package/bundle/typescript/src/commands/game/sideQuest/commands/search.d.ts +1 -1
  34. package/bundle/typescript/src/commands/game/sideQuest/commands/search.js +15 -11
  35. package/bundle/typescript/src/commands/game/sideQuest/commands/search.js.map +1 -1
  36. package/bundle/typescript/src/commands/game/sideQuest/commands/solve.d.ts +1 -1
  37. package/bundle/typescript/src/commands/game/sideQuest/commands/solve.js +1 -1
  38. package/bundle/typescript/src/commands/game/sideQuest/commands/solve.js.map +1 -1
  39. package/bundle/typescript/src/commands/game/sideQuest/commands/store.d.ts +1 -1
  40. package/bundle/typescript/src/commands/game/sideQuest/commands/store.js +1 -1
  41. package/bundle/typescript/src/commands/game/sideQuest/commands/store.js.map +1 -1
  42. package/bundle/typescript/src/commands/game/sideQuest/commands/take.d.ts +1 -1
  43. package/bundle/typescript/src/commands/game/sideQuest/commands/take.js +6 -4
  44. package/bundle/typescript/src/commands/game/sideQuest/commands/take.js.map +1 -1
  45. package/bundle/typescript/src/commands/game/sideQuest/commands/talk.d.ts +1 -1
  46. package/bundle/typescript/src/commands/game/sideQuest/commands/talk.js +4 -2
  47. package/bundle/typescript/src/commands/game/sideQuest/commands/talk.js.map +1 -1
  48. package/bundle/typescript/src/commands/game/sideQuest/commands/unequip.d.ts +1 -1
  49. package/bundle/typescript/src/commands/game/sideQuest/commands/unequip.js +1 -1
  50. package/bundle/typescript/src/commands/game/sideQuest/commands/unequip.js.map +1 -1
  51. package/bundle/typescript/src/commands/game/sideQuest/commands/unlock.d.ts +1 -1
  52. package/bundle/typescript/src/commands/game/sideQuest/commands/unlock.js +2 -2
  53. package/bundle/typescript/src/commands/game/sideQuest/commands/unlock.js.map +1 -1
  54. package/bundle/typescript/src/commands/game/sideQuest/commands/use.d.ts +1 -1
  55. package/bundle/typescript/src/commands/game/sideQuest/commands/use.js +1 -1
  56. package/bundle/typescript/src/commands/game/sideQuest/commands/use.js.map +1 -1
  57. package/bundle/typescript/src/commands/game/sideQuest/factories/item-factory.js +2 -1
  58. package/bundle/typescript/src/commands/game/sideQuest/factories/item-factory.js.map +1 -1
  59. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-factory.js +22 -11
  60. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-factory.js.map +1 -1
  61. package/bundle/typescript/src/commands/game/sideQuest/game.d.ts +17 -4
  62. package/bundle/typescript/src/commands/game/sideQuest/game.js +195 -4
  63. package/bundle/typescript/src/commands/game/sideQuest/game.js.map +1 -1
  64. package/bundle/typescript/src/commands/game/sideQuest/models/inventory.d.ts +1 -0
  65. package/bundle/typescript/src/commands/game/sideQuest/models/inventory.js +19 -6
  66. package/bundle/typescript/src/commands/game/sideQuest/models/inventory.js.map +1 -1
  67. package/bundle/typescript/src/commands/game/sideQuest/models/item.d.ts +5 -1
  68. package/bundle/typescript/src/commands/game/sideQuest/models/item.js +20 -0
  69. package/bundle/typescript/src/commands/game/sideQuest/models/item.js.map +1 -1
  70. package/bundle/typescript/src/commands/game/sideQuest/models/npc.d.ts +11 -2
  71. package/bundle/typescript/src/commands/game/sideQuest/models/npc.js +302 -96
  72. package/bundle/typescript/src/commands/game/sideQuest/models/npc.js.map +1 -1
  73. package/bundle/typescript/src/commands/game/sideQuest/models/player.d.ts +6 -2
  74. package/bundle/typescript/src/commands/game/sideQuest/models/player.js +142 -19
  75. package/bundle/typescript/src/commands/game/sideQuest/models/player.js.map +1 -1
  76. package/bundle/typescript/src/commands/game/sideQuest/models/room.d.ts +2 -1
  77. package/bundle/typescript/src/commands/game/sideQuest/models/room.js +24 -18
  78. package/bundle/typescript/src/commands/game/sideQuest/models/room.js.map +1 -1
  79. package/bundle/typescript/src/commands/game/sideQuest/models/scene.d.ts +6 -1
  80. package/bundle/typescript/src/commands/game/sideQuest/models/scene.js +28 -2
  81. package/bundle/typescript/src/commands/game/sideQuest/models/scene.js.map +1 -1
  82. package/bundle/typescript/src/commands/game/sideQuest/scenes/scene1.json +114 -0
  83. package/bundle/typescript/src/commands/game/sideQuest/scenes/scene2.json +323 -116
  84. package/bundle/typescript/src/commands/game/sideQuest/types/player-equipment.d.ts +16 -5
  85. package/bundle/typescript/src/commands/game/sideQuest/types/seed/item-seed.d.ts +1 -0
  86. package/bundle/typescript/src/commands/game/sideQuest/types/seed/player-seed.d.ts +2 -0
  87. package/bundle/typescript/src/commands/game/sideQuest/types/seed/scene-seed.d.ts +4 -0
  88. package/bundle/typescript/src/commands/game/sideQuest/types/shared/item-enum.d.ts +47 -12
  89. package/bundle/typescript/src/commands/game/sideQuest/types/shared/item-enum.js +53 -11
  90. package/bundle/typescript/src/commands/game/sideQuest/types/shared/item-enum.js.map +1 -1
  91. package/bundle/typescript/src/commands/game/sideQuest/ui.js +17 -161
  92. package/bundle/typescript/src/commands/game/sideQuest/ui.js.map +1 -1
  93. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js +5 -2
  94. package/bundle/typescript/src/commands/game/sideQuest.sub.cmd.js.map +1 -1
  95. package/bundle/typescript/src/templates/meteor/api/api.js +1 -1
  96. package/bundle/typescript/src/templates/meteor/api/api.js.ts +1 -1
  97. package/package.json +1 -1
@@ -6,14 +6,44 @@ export class NPC extends Player {
6
6
  _dialogue;
7
7
  _description;
8
8
  _scene;
9
+ _commandHelp;
9
10
  _history = [];
10
- _maxHistory = 10;
11
+ _maxHistory = 200;
11
12
  commandRegistry;
13
+ lastNpcHeardTime = 0;
14
+ static npcHearCooldownMs = 500; // 10 seconds. Adjust as you like!
15
+ lastNpcSeenTime = 0;
16
+ static npcSeeCooldownMs = 500; // 10 seconds (tune as you like)
17
+ _maxRecursion = 5;
18
+ waitingForPlayer = false;
12
19
  constructor(npcConfig, commandRegistry) {
13
20
  super(npcConfig.playerConstructorConfig);
14
21
  this._dialogue = npcConfig.dialog;
15
22
  this._description = npcConfig.description;
16
23
  this.commandRegistry = commandRegistry;
24
+ this._commandHelp = `
25
+ Available in-game commands (use with [COMMAND] prefix):
26
+
27
+ - go <direction> — move in a direction like north, south, east, west
28
+ - say <message> — speak a message
29
+ - take <item name> — pick up an item from the current room
30
+ - drop <item name> — drop an item
31
+ - use <item name> — use an item
32
+ - equip <item name> — equip an item (e.g., equip a weapon to use)
33
+ - equip all - equip all wearable items in inventory
34
+ - unequip <item name> — remove an equipped item
35
+ - unlock <door name> — unlock a door (if you have the key or solution)
36
+ - lock <door name> — lock a door
37
+ - solve <puzzle name> — attempt to solve a puzzle
38
+ - search — search the room for hidden things
39
+ - look — look around the current room
40
+ - look at <target> - looks at an item, player, or direction
41
+ - store <item name> — store an item (in bank, safe, etc.)
42
+ - give <item name> to <target> — give an item to someone
43
+ - talk-to <target> — initiate conversation with another character
44
+ - read <target> - Reads an item of Category "Book"
45
+ - kill <target> - Kills an actor, removing them from the game.
46
+ `.trim();
17
47
  }
18
48
  set scene(scene) {
19
49
  this._scene = scene;
@@ -21,46 +51,153 @@ export class NPC extends Player {
21
51
  get description() {
22
52
  return this._description;
23
53
  }
24
- act(commandString) {
25
- const command = this.commandRegistry.parse(commandString, this);
54
+ set description(description) {
55
+ this._description = description;
56
+ }
57
+ async act(commandString) {
58
+ const command = await this.commandRegistry.parse(commandString, this);
26
59
  if (command) {
27
- const response = command.execute(); // assume args already set
28
- this.respondTo(this, response);
60
+ // Capture the result of the command
61
+ const result = await command.execute();
62
+ await this.recursiveReflect(commandString, result);
29
63
  }
30
64
  else {
31
65
  this.logger.error(`${this.name} tried to perform unknown command: ${commandString}`);
32
66
  }
33
67
  }
34
68
  async hear(actor, message) {
35
- if (actor === this)
69
+ if (actor === this || actor.name === this.name)
36
70
  return;
71
+ // Player wakes us up
72
+ if (!(actor instanceof NPC)) {
73
+ if (this.waitingForPlayer)
74
+ this.logger.write(`[DEBUG] ${this.name} received player input, waking up.`);
75
+ this.waitingForPlayer = false;
76
+ }
77
+ // If another NPC tries to trigger us and we are waiting for a player, ignore
78
+ if (this.waitingForPlayer && actor instanceof NPC) {
79
+ this.logger.write(`[DEBUG] ${this.name} is waiting for player input, ignoring NPC.`);
80
+ return;
81
+ }
82
+ // If another NPC tries to trigger us and we are on cooldown, ignore
83
+ if (actor instanceof NPC) {
84
+ const now = Date.now();
85
+ if (now - this.lastNpcHeardTime < NPC.npcHearCooldownMs) {
86
+ this.logger.write(`[DEBUG] ${this.name} is on NPC hear cooldown.`);
87
+ return;
88
+ }
89
+ this.lastNpcHeardTime = now;
90
+ this.waitingForPlayer = true;
91
+ this.logger.write(`[DEBUG] ${this.name} heard NPC, entering waiting state.`);
92
+ }
93
+ // Process input
37
94
  const entry = `${actor.name} says: "${message}"`;
38
95
  this._addToHistory(entry);
39
96
  this.logger.write(`${this.name} heard from ${actor.name}`);
40
- await this.respondTo(actor, message);
97
+ this.respondTo(actor, message);
41
98
  }
42
99
  async see(actor, verb, details) {
43
- if (actor === this)
44
- return;
45
- const entry = `${actor.name} ${verb}${details ? ` ${details}` : ''}`;
46
- this._addToHistory(entry);
47
- this.logger.write(`${this.name} sees ${entry}`);
48
- await this.respondTo(actor, entry);
100
+ try {
101
+ if (actor === this || actor.name === this.name)
102
+ return;
103
+ if (!(actor instanceof NPC)) {
104
+ if (this.waitingForPlayer)
105
+ this.logger.write(`[DEBUG] ${this.name} received player action, waking up.`);
106
+ this.waitingForPlayer = false;
107
+ }
108
+ if (this.waitingForPlayer && actor instanceof NPC) {
109
+ this.logger.write(`[DEBUG] ${this.name} is waiting for player input, ignoring NPC action.`);
110
+ return;
111
+ }
112
+ if (actor instanceof NPC) {
113
+ const now = Date.now();
114
+ if (now - this.lastNpcSeenTime < NPC.npcSeeCooldownMs) {
115
+ this.logger.write(`[DEBUG] ${this.name} is on NPC see cooldown.`);
116
+ return;
117
+ }
118
+ this.lastNpcSeenTime = now;
119
+ this.waitingForPlayer = true;
120
+ this.logger.write(`[DEBUG] ${this.name} saw NPC, entering waiting state.`);
121
+ }
122
+ const entry = `${actor.name} ${verb}${details ? ` ${details}` : ''}`;
123
+ this._addToHistory(entry);
124
+ this.logger.write(`${this.name} sees ${entry}`);
125
+ this.respondTo(actor, entry);
126
+ }
127
+ catch (error) {
128
+ this.logger.error(`Error in see: ${error}`);
129
+ throw new Error(error);
130
+ }
49
131
  }
50
132
  _addToHistory(entry) {
51
133
  this._history.push(entry);
52
134
  if (this._history.length > this._maxHistory) {
53
135
  this._history.shift();
54
136
  }
55
- this.logger.write(`Added ${entry} to ${this.name} history`);
56
137
  }
57
138
  getHistorySummary() {
58
139
  if (this._history.length === 0)
59
140
  return `This NPC has not observed any recent activity.`;
60
- return `Recent activity around this NPC:\n${this._history.map((h, i) => ` ${i + 1}. ${h}`).join('\n')}`;
141
+ let history = `Recent activity around this NPC:\n${this._history.map((h, i) => ` ${i + 1}. ${h}`)?.join('\n')}`;
142
+ this.logger.write(history);
143
+ return history;
144
+ }
145
+ speak(message) {
146
+ return message || this._dialogue[Math.floor(Math.random() * this._dialogue.length)];
61
147
  }
62
- speak() {
63
- return this._dialogue[Math.floor(Math.random() * this._dialogue.length)];
148
+ async recursiveReflect(commandString, result, recursionDepth = 0, maxRecursion = this._maxRecursion) {
149
+ if (recursionDepth >= maxRecursion) {
150
+ this.logger.write('Max recursion reached.');
151
+ return;
152
+ }
153
+ const historySummary = this.getHistorySummary();
154
+ // Build the prompt context
155
+ const context = `
156
+ You are an NPC named ${this.name}.
157
+
158
+ You just performed the action: "${commandString}"
159
+ With the result: "${result}"
160
+
161
+ Based on this, what is the most logical next in-game command (from the following list)?
162
+ ${this._commandHelp}
163
+ - Only respond with: [COMMAND] <in-game command here>
164
+ - Do not respond on behalf of another player or NPC
165
+ - If there is nothing to do, respond with: wait
166
+ - Only respond with one [COMMAND]
167
+
168
+ This is what has already happened:
169
+ ${historySummary}
170
+ `;
171
+ // Send to GPT
172
+ const gptResult = await HTTPS.askGPT({
173
+ prompt: context,
174
+ openApiKey: process.env.OPENAI_API_KEY || '',
175
+ model: 'gpt-4.1'
176
+ });
177
+ const reply = JSON.parse(gptResult.data)?.choices?.[0]?.message?.content?.trim();
178
+ if (!reply || reply.toLowerCase().includes('wait')) {
179
+ this.logger.write(`${this.name} is finished reflecting for now.`);
180
+ return;
181
+ }
182
+ // Parse the next command, execute, and reflect again
183
+ const nextCommandMatch = reply.match(/^\[COMMAND\]\s*(.*)$/i);
184
+ if (nextCommandMatch && nextCommandMatch[1]) {
185
+ const nextCommand = nextCommandMatch[1];
186
+ const command = await this.commandRegistry.parse(nextCommand, this);
187
+ if (command) {
188
+ const nextResult = await command.execute();
189
+ if (nextResult) {
190
+ this._addToHistory(nextResult);
191
+ }
192
+ await this.recursiveReflect(nextCommand, nextResult, recursionDepth + 1, maxRecursion);
193
+ }
194
+ else {
195
+ this.logger.error(`NPC planned unknown command: ${nextCommand}`);
196
+ }
197
+ }
198
+ else {
199
+ this.logger.write('No valid command parsed from GPT reflection.');
200
+ }
64
201
  }
65
202
  async respondTo(actor, message) {
66
203
  this.logger.write('Attempting to respond');
@@ -69,76 +206,116 @@ export class NPC extends Player {
69
206
  actor.hear(this, this.speak());
70
207
  return;
71
208
  }
72
- const commandHelp = `
73
- Available in-game commands (use with [COMMAND] prefix):
74
-
75
- - go <direction> — move in a direction like north, south, east, west
76
- - say <message> speak a message
77
- - take <item name> — pick up an item
78
- - drop <item name> — drop an item
79
- - use <item name> — use an item
80
- - equip <item name> equip an item
81
- - unequip <item name> — remove an equipped item
82
- - unlock <door name> — unlock a door (if you have the key or solution)
83
- - lock <door name> — lock a door
84
- - solve <puzzle name> — attempt to solve a puzzle
85
- - search search the room for hidden things
86
- - look look around the current room
87
- - store <item name> store an item (in bank, safe, etc.)
88
- - give <item name> to <target> — give an item to someone
89
- - talk-to <target> — initiate conversation with another character
90
- `.trim();
209
+ // ---------- helpers ----------
210
+ const safeArray = (arr, label = 'unknown') => {
211
+ const ok = Array.isArray(arr) ? arr : [];
212
+ if (!Array.isArray(arr)) {
213
+ this.logger.write(`[DEBUG][${this.name}] ${label} was not an array, substituting []. Value: ${JSON.stringify(arr)}`);
214
+ }
215
+ return ok;
216
+ };
217
+ const toLines = (s) => {
218
+ if (typeof s !== 'string')
219
+ return [];
220
+ return s.split(/\r?\n/);
221
+ };
222
+ // ---------- scene + npc context ----------
223
+ const story = this._scene?.story
224
+ ? `The overall storyline for this scene is: ${this._scene.story}`
225
+ : `This scene has no overall storyline`;
91
226
  const historySummary = this.getHistorySummary();
92
- const lifestyleSummary = this.lifestyleChoices.length > 0
227
+ const npcDescription = this.description
228
+ ? `This NPC has the following characteristics: ${this._description}`
229
+ : `This NPC is non-descript.`;
230
+ this.logger.write(npcDescription);
231
+ const lifestyleSummary = Array.isArray(this.lifestyleChoices) && this.lifestyleChoices.length > 0
93
232
  ? `This NPC has the following lifestyle characteristics: ${this.lifestyleChoices.join(', ')}.`
94
233
  : `This NPC has no defined lifestyle preferences.`;
95
234
  const room = this.currentLocation;
235
+ if (!room) {
236
+ this.logger.error(`[ERROR][${this.name}] currentLocation is undefined in respondTo!`);
237
+ return;
238
+ }
96
239
  const roomDesc = `They are currently in: "${room.name}" — ${room.description}`;
97
- let exitList;
98
- if (room.exits && room.exits.size > 0) {
99
- const formattedExits = Array.from(room.exits.entries()).map(([direction, exit]) => {
100
- const directionLabel = capitalCase(direction);
101
- if (exit instanceof Door) {
102
- const targetRoom = exit.getOtherSideToName(room);
103
- const lockedStatus = exit.checkIfLocked()
104
- ? ' (Locked)'
105
- : (exit.checkIfLockable() ? ' (Unlocked)' : '');
106
- return `${directionLabel} → ${targetRoom}${lockedStatus}`;
107
- }
108
- else if (typeof exit === 'string') {
109
- return `${directionLabel} → ${exit}`;
110
- }
111
- else {
112
- return `${directionLabel} → Unknown`;
113
- }
114
- });
115
- exitList = `The room has the following exits:\n${formattedExits.map(e => ` - ${e}`).join('\n')}`;
240
+ // ---------- exits (fully defensive) ----------
241
+ let safeExits = [];
242
+ try {
243
+ if (room.exits && typeof room.exits.entries === 'function') {
244
+ safeExits = Array.from(room.exits.entries());
245
+ }
246
+ else {
247
+ this.logger.write(`[DEBUG][${this.name}] room.exits missing or not iterable; using empty exits.`);
248
+ }
116
249
  }
117
- else {
118
- exitList = `The room has no obvious exits.`;
250
+ catch (e) {
251
+ this.logger.error(`[ERROR][${this.name}] room.exits.entries() failed: ${e}`);
119
252
  }
120
- const visibleItems = room.inventory.getAllItems?.() ?? [];
121
- const roomInventoryDesc = visibleItems.length > 0
122
- ? `Items visible in the room: ${visibleItems.map(item => item.name).join(', ')}.`
123
- : `There are no visible items in the room.`;
124
- const npcItems = this.inventory?.getAllItems?.() ?? [];
125
- const npcInventoryDesc = npcItems.length > 0
126
- ? `This NPC is carrying the following items:\n${npcItems.map(item => `- ${item.getCharacteristics?.() ?? item.name}`).join('\n')}`
127
- : `This NPC is not carrying anything.`;
128
- const ownedRooms = this._scene?.getOwnedRoomsBy?.(this.name) ?? [];
253
+ const formattedExitsArr = safeExits.map(([direction, exit]) => {
254
+ const directionLabel = capitalCase(direction);
255
+ if (exit instanceof Door) {
256
+ const targetRoom = exit.getOtherSideToName(room);
257
+ const isLocked = exit.checkIfLocked();
258
+ const isLockable = exit.checkIfLockable();
259
+ let requirementDetail = '';
260
+ if (isLocked)
261
+ requirementDetail = ` Requires key: "${exit.unlockItemOrSolution}".`;
262
+ const status = isLocked ? ' (Locked)' : (isLockable ? ' (Unlocked)' : '');
263
+ return `${directionLabel} → ${targetRoom}${status}${requirementDetail}`;
264
+ }
265
+ if (typeof exit === 'string') {
266
+ return `${directionLabel} → ${exit}`;
267
+ }
268
+ return `${directionLabel} → Unknown`;
269
+ });
270
+ const formattedExitsStr = Array.isArray(formattedExitsArr) && formattedExitsArr.length > 0
271
+ ? formattedExitsArr.join('\n')
272
+ : '';
273
+ // ---------- ownership + inventories (defensive) ----------
274
+ const ownedRooms = safeArray(this._scene?.getOwnedRoomsBy?.(this.name), 'ownedRooms');
275
+ this.logger.write(`[DEBUG][${this.name}] ownedRooms: ${JSON.stringify(ownedRooms)}`);
129
276
  const ownedRoomsDesc = ownedRooms.length > 0
130
- ? `They own the following rooms: ${ownedRooms.map(r => `"${r.name}"`).join(', ')}.`
277
+ ? `They own the following rooms: ${ownedRooms.filter(r => r && r.name).map(r => `"${r.name}"`).join(', ')}.`
131
278
  : `They do not appear to own any rooms.`;
132
- const ownedItems = this._scene?.getOwnedItemsBy?.(this.name) ?? [];
279
+ const ownedItems = safeArray(this._scene?.getOwnedItemsBy?.(this.name), 'ownedItems');
280
+ this.logger.write(`[DEBUG][${this.name}] ownedItems: ${JSON.stringify(ownedItems)}`);
133
281
  const ownedItemsDesc = ownedItems.length > 0
134
- ? `They own the following items: ${ownedItems.map(i => `"${i.name}"`).join(', ')}.`
282
+ ? `They own the following items: ${ownedItems.filter(i => i && i.name).map(i => `"${i.name}"`).join(', ')}.`
135
283
  : `They do not appear to own any items.`;
136
- // GPT prompt with command instruction
284
+ const npcItems = safeArray(this.inventory?.getAllItems?.(), 'npcItems');
285
+ this.logger.write(`[DEBUG][${this.name}] npcItems: ${JSON.stringify(npcItems)}`);
286
+ const npcInventoryDesc = npcItems.length > 0
287
+ ? `This NPC is carrying the following items:\n${npcItems
288
+ .filter(item => !!item)
289
+ .map(item => `- ${item.getFormattedCharacteristics?.() ?? (item.name ?? '[unnamed item]')}`)
290
+ .join('\n')}`
291
+ : `This NPC is not carrying anything.`;
292
+ const visibleItems = safeArray(room.inventory?.getAllItems?.(), 'visibleItems');
293
+ this.logger.write(`[DEBUG][${this.name}] visibleItems: ${JSON.stringify(visibleItems)}`);
294
+ const roomInventoryDesc = visibleItems.length > 0
295
+ ? `Items visible in the room: ${visibleItems.filter(i => i && i.name).map(i => i.name).join(', ')}.`
296
+ : `There are no visible items in the room.`;
297
+ // ---------- prompt ----------
137
298
  const prompt = `
138
299
  You are an NPC named ${this.name} in a gritty cyberpunk text adventure game.
139
300
 
301
+ - Stay in character. Respond naturally based on your surroundings, personality, and the player’s message.
302
+ - Any exposition should be in 3rd person. Keep exposition to bare minimum.
303
+ - When speaking, use the "say" command. Syntax is "[COMMAND] say <message>"
304
+ - If you want to perform an action, include a separate line that starts with:
305
+ [COMMAND] <your in-game command here>
306
+ - Attempt to use [COMMAND] when appropriate for interacting with the environment. (e.g., "take <item>" when picking up)
307
+ - You should only provide one [COMMAND] at a time.
308
+ - Do not respond on behalf of another player or NPC
309
+
310
+ Your objective is to drive the story line.
311
+ ${story}
312
+
313
+ ${this._commandHelp}
314
+
315
+ ${npcDescription}
316
+
140
317
  ${roomDesc}
141
- ${exitList}
318
+ ${formattedExitsStr}
142
319
  ${roomInventoryDesc}
143
320
 
144
321
  ${lifestyleSummary}
@@ -149,52 +326,81 @@ You are an NPC named ${this.name} in a gritty cyberpunk text adventure game.
149
326
 
150
327
  ${historySummary}
151
328
 
152
- Stay in character. Respond naturally based on your surroundings, personality, and the player’s message.
153
- Any exposition should be in 3rd person.
154
-
155
- If you want to perform an action, include a separate line that starts with:
156
- [COMMAND] <your in-game command here>
157
-
158
- ${commandHelp}
159
-
160
- Player: ${message}
161
- ${this.name}:
329
+ ${actor.name}: ${message}
162
330
  `.trim();
331
+ // ---------- GPT call + parsing (defensive) ----------
163
332
  try {
164
333
  const result = await HTTPS.askGPT({
165
334
  prompt,
166
335
  openApiKey: process.env.OPENAI_API_KEY,
167
336
  model: 'gpt-4.1'
168
337
  });
169
- if (JSON.parse(result.data).error) {
170
- throw new Error(JSON.parse(result.data).error.message);
338
+ let parsed;
339
+ try {
340
+ parsed = JSON.parse(result?.data ?? '{}');
171
341
  }
172
- const reply = JSON.parse(result.data)?.choices?.[0]?.message?.content?.trim();
173
- if (!reply) {
174
- actor.hear(this, this.speak());
342
+ catch (e) {
343
+ this.logger.error(`[ERROR][${this.name}] JSON.parse failed on result.data: ${e}`);
344
+ return;
345
+ }
346
+ if (parsed?.error) {
347
+ throw new Error(parsed.error.message ?? 'Unknown GPT error');
348
+ }
349
+ const reply = parsed?.choices?.[0]?.message?.content?.trim?.();
350
+ if (!reply || typeof reply !== 'string') {
351
+ this.logger.write(`[DEBUG][${this.name}] Empty or invalid reply from GPT; no action taken.`);
175
352
  return;
176
353
  }
177
354
  this._addToHistory(reply);
178
- const lines = reply.split('\n');
179
- const spokenLines = lines.filter(line => !line.startsWith('[COMMAND]')).join('\n').trim();
180
- const commandLines = lines.filter(line => line.startsWith('[COMMAND]'));
181
- // Speak first
182
- actor.hear(this, spokenLines || this.speak());
183
- // Act on any commands
355
+ const lines = toLines(reply);
356
+ // Spoken lines
357
+ const spokenLines = lines.filter(line => line.startsWith('[COMMAND] say'));
358
+ // Commands (excluding say/talk-to)
359
+ const commandLines = lines.filter(line => line.startsWith('[COMMAND]') &&
360
+ !line.startsWith('[COMMAND] say') &&
361
+ !line.startsWith('[COMMAND] talk-to'));
362
+ // Exposition (non-command lines)
363
+ const expositionLines = lines.filter(line => !line.startsWith('[COMMAND]'));
364
+ // Speak each say command
365
+ for (const spokenText of spokenLines) {
366
+ const commandText = (spokenText ?? '').replace('[COMMAND]', '').trim();
367
+ this.logger.write(`${this.name} attempts to say: ${commandText}`);
368
+ try {
369
+ if (commandText.length > 0) {
370
+ this.act(commandText);
371
+ }
372
+ }
373
+ catch (err) {
374
+ this.logger.error(`${this.name} failed to say "${commandText}": ${err}`);
375
+ // continue; don't throw so we can process remaining lines
376
+ }
377
+ }
378
+ // Log exposition
379
+ for (const exposition of expositionLines) {
380
+ if (exposition?.length) {
381
+ this.logger.logWithColor(`${exposition}`, 'blue');
382
+ }
383
+ }
384
+ // Execute other commands
184
385
  for (const commandLine of commandLines) {
185
- const commandText = commandLine.replace('[COMMAND]', '').trim();
386
+ const commandText = (commandLine ?? '').replace('[COMMAND]', '').trim();
186
387
  this.logger.write(`${this.name} attempts to execute: ${commandText}`);
187
388
  try {
188
- this.act(commandText);
389
+ if (commandText.length > 0) {
390
+ this.act(commandText);
391
+ }
189
392
  }
190
393
  catch (err) {
191
394
  this.logger.error(`${this.name} failed to execute command "${commandText}": ${err}`);
395
+ // continue; don't throw so we can process remaining lines
192
396
  }
193
397
  }
194
398
  }
195
399
  catch (err) {
196
400
  this.logger.write(`GPT fallback due to error: ${err}`);
197
- actor.hear(this, this.speak());
401
+ // surface a consistent Error instance, but don't double-wrap Errors
402
+ const e = err instanceof Error ? err : new Error(String(err));
403
+ throw e;
198
404
  }
199
405
  }
200
406
  }
@@ -1 +1 @@
1
- {"version":3,"file":"npc.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/models/npc.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"npc.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/models/npc.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,7 @@ export declare class Player extends AbstractPlayer {
20
20
  protected logger: Logger;
21
21
  private _currency;
22
22
  constructor(config: IPlayerConstructorConfig);
23
+ private initializeEquipment;
23
24
  get name(): string;
24
25
  get currentLocation(): Room;
25
26
  set currentLocation(room: Room);
@@ -33,8 +34,11 @@ export declare class Player extends AbstractPlayer {
33
34
  removeInventory(item: Item): boolean;
34
35
  equip(item: Item): string;
35
36
  unequip(input: string): string;
36
- private determineEquipmentSlot;
37
- private canEquip;
37
+ determineEquipmentSlot(input: string): {
38
+ group: keyof PlayerEquipment;
39
+ slot: string;
40
+ } | null;
41
+ canEquip(item: Item): boolean;
38
42
  private unequipBySlot;
39
43
  hear(actor: Player, message: string): void;
40
44
  see(actor: Player, verb: string, details?: string): void;