@maka/maka-cli 5.63.0 → 5.64.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.
- package/bundle/typescript/package.json +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/ar.js +29 -8
- package/bundle/typescript/src/commands/game/sideQuest/commands/ar.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/ask.d.ts +42 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/ask.js +86 -3
- package/bundle/typescript/src/commands/game/sideQuest/commands/ask.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/backlog.js +5 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/backlog.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/call.js +29 -5
- package/bundle/typescript/src/commands/game/sideQuest/commands/call.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/contacts.js +22 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/contacts.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/jobs.js +16 -9
- package/bundle/typescript/src/commands/game/sideQuest/commands/jobs.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/journal.d.ts +44 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/journal.js +136 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/journal.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/look.d.ts +20 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/look.js +99 -3
- package/bundle/typescript/src/commands/game/sideQuest/commands/look.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/players.js +8 -2
- package/bundle/typescript/src/commands/game/sideQuest/commands/players.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/search.js +27 -4
- package/bundle/typescript/src/commands/game/sideQuest/commands/search.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js +30 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/silent.js +11 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/silent.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/talk.d.ts +47 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/talk.js +91 -5
- package/bundle/typescript/src/commands/game/sideQuest/commands/talk.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/commands/time.d.ts +20 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/time.js +61 -0
- package/bundle/typescript/src/commands/game/sideQuest/commands/time.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.d.ts +45 -0
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js +150 -9
- package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/game.d.ts +104 -0
- package/bundle/typescript/src/commands/game/sideQuest/game.js +257 -11
- package/bundle/typescript/src/commands/game/sideQuest/game.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/headless-harness.d.ts +78 -0
- package/bundle/typescript/src/commands/game/sideQuest/headless-harness.js +188 -0
- package/bundle/typescript/src/commands/game/sideQuest/headless-harness.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/headless.d.ts +5 -0
- package/bundle/typescript/src/commands/game/sideQuest/headless.js +54 -0
- package/bundle/typescript/src/commands/game/sideQuest/headless.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/npc.d.ts +62 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/npc.js +121 -9
- package/bundle/typescript/src/commands/game/sideQuest/models/npc.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/puzzle.d.ts +9 -0
- package/bundle/typescript/src/commands/game/sideQuest/models/puzzle.js +28 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/puzzle.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/room.d.ts +67 -7
- package/bundle/typescript/src/commands/game/sideQuest/models/room.js +116 -19
- package/bundle/typescript/src/commands/game/sideQuest/models/room.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/ar.d.ts +22 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/ar.js +26 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/ar.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-dump.js +6 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-dump.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog.d.ts +6 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/log-style.d.ts +22 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/log-style.js +24 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/log-style.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js +30 -5
- package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/playtester.d.ts +50 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/playtester.js +43 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/playtester.js.map +1 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/room-grid.d.ts +11 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/room-grid.js +42 -28
- package/bundle/typescript/src/commands/game/sideQuest/utilities/room-grid.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/room-view.js +66 -8
- package/bundle/typescript/src/commands/game/sideQuest/utilities/room-view.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.d.ts +45 -3
- package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.js +41 -6
- package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.js.map +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/utilities/world-clock.d.ts +83 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/world-clock.js +106 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/world-clock.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { HeadlessSession } from './headless.js';
|
|
2
|
+
import type { GameEvent } from './utilities/emitter.js';
|
|
3
|
+
import type { ISceneSeedJson } from './types/seed/scene-seed.js';
|
|
4
|
+
import type { ISaveFileV1, ISavedPlayer } from './types/save-file.js';
|
|
5
|
+
/**
|
|
6
|
+
* STANDING UP A REAL HEADLESS BOOT, cheaply.
|
|
7
|
+
*
|
|
8
|
+
* This exists because of how the two worst bugs of 2026-08-27 escaped.
|
|
9
|
+
* `Game.currentClient` was set only on the SOLO arrival path, so on a
|
|
10
|
+
* shared run there was no meet, no haggle, and -- since the wrap-up
|
|
11
|
+
* settlement rides the same method -- a table could finish an entire job
|
|
12
|
+
* and nobody would be paid. The `contacts` "THIS JOB" row was blank for
|
|
13
|
+
* the same reason.
|
|
14
|
+
*
|
|
15
|
+
* Both had tests. Both tests passed. They STUBBED the state they were
|
|
16
|
+
* checking, so they pinned the rendering and never touched the wiring --
|
|
17
|
+
* a test that sets `game.currentClient` itself cannot discover that
|
|
18
|
+
* nothing else ever does. That is not a mistake either author made
|
|
19
|
+
* carelessly; it is what you write when standing up a real boot is
|
|
20
|
+
* expensive. So the fix for the class is to make it cheap.
|
|
21
|
+
*
|
|
22
|
+
* Deliberately NOT a *.test.ts file: jest's testMatch is `**''/*.test.ts`
|
|
23
|
+
* and a helper named that way becomes an empty failing suite.
|
|
24
|
+
*
|
|
25
|
+
* Two fixture facts that cost two sessions an hour between them, and are
|
|
26
|
+
* baked in here so nobody pays a third time:
|
|
27
|
+
* - saved items use enum KEYS, not values: 'Tiny' and 'Commlink',
|
|
28
|
+
* never 'tiny' and 'commlink'.
|
|
29
|
+
* - saved equipment is keyed by FLATTENED path -- 'head.commlink' --
|
|
30
|
+
* not nested objects.
|
|
31
|
+
* And one that used to be here and is now gone: there is no `currency`
|
|
32
|
+
* field on a save. Money rides credstick items. The old fixtures carried
|
|
33
|
+
* `currency: 500`, which read as meaningful and did exactly nothing.
|
|
34
|
+
*/
|
|
35
|
+
/** A commlink as a SAVED item -- enum keys, per the note above. */
|
|
36
|
+
export declare const SAVED_COMMLINK: {
|
|
37
|
+
name: string;
|
|
38
|
+
description: string;
|
|
39
|
+
size: string;
|
|
40
|
+
category: string;
|
|
41
|
+
shape: string;
|
|
42
|
+
color: string;
|
|
43
|
+
texture: string;
|
|
44
|
+
rating: string;
|
|
45
|
+
weight: number;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* The smallest save the boot path actually reads: buildPlayerFromSave
|
|
49
|
+
* needs the attribute/skill block, restorePlayer needs the replay arrays
|
|
50
|
+
* to iterate.
|
|
51
|
+
*/
|
|
52
|
+
export declare function savedPlayer(name: string, overrides?: Record<string, unknown>): ISavedPlayer;
|
|
53
|
+
export declare function save(name: string, overrides?: Record<string, unknown>): ISaveFileV1;
|
|
54
|
+
/**
|
|
55
|
+
* The smallest scene the engine will boot AND that carries the things
|
|
56
|
+
* run-scoped state is about: a client, a payout, and a hand-off win
|
|
57
|
+
* condition. Hand-authored rather than read from a session folder -- a
|
|
58
|
+
* test that depends on one machine's saved games protects nothing on any
|
|
59
|
+
* other machine.
|
|
60
|
+
*/
|
|
61
|
+
export declare function paritySeed(overrides?: Partial<ISceneSeedJson>): ISceneSeedJson;
|
|
62
|
+
export interface BootOptions {
|
|
63
|
+
seed?: ISceneSeedJson;
|
|
64
|
+
/** players[0] is the host/primary. Defaults to a single 'Maka'. */
|
|
65
|
+
players?: ISaveFileV1[];
|
|
66
|
+
/** Saves to bring in through addPlayer -- the JOINER path, which is a
|
|
67
|
+
* different code path from players[0] and is where host/joiner
|
|
68
|
+
* asymmetries live. */
|
|
69
|
+
join?: ISaveFileV1[];
|
|
70
|
+
events?: GameEvent[];
|
|
71
|
+
/** The tier the scene was generated at, as the hosting server knows it. */
|
|
72
|
+
tier?: number;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Boots a real headless session. The env flags keep it off the network
|
|
76
|
+
* and off telemetry, which is most of what made this expensive before.
|
|
77
|
+
*/
|
|
78
|
+
export declare function bootSession(opts?: BootOptions): Promise<HeadlessSession>;
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { createHeadlessSession } from './headless.js';
|
|
2
|
+
/**
|
|
3
|
+
* STANDING UP A REAL HEADLESS BOOT, cheaply.
|
|
4
|
+
*
|
|
5
|
+
* This exists because of how the two worst bugs of 2026-08-27 escaped.
|
|
6
|
+
* `Game.currentClient` was set only on the SOLO arrival path, so on a
|
|
7
|
+
* shared run there was no meet, no haggle, and -- since the wrap-up
|
|
8
|
+
* settlement rides the same method -- a table could finish an entire job
|
|
9
|
+
* and nobody would be paid. The `contacts` "THIS JOB" row was blank for
|
|
10
|
+
* the same reason.
|
|
11
|
+
*
|
|
12
|
+
* Both had tests. Both tests passed. They STUBBED the state they were
|
|
13
|
+
* checking, so they pinned the rendering and never touched the wiring --
|
|
14
|
+
* a test that sets `game.currentClient` itself cannot discover that
|
|
15
|
+
* nothing else ever does. That is not a mistake either author made
|
|
16
|
+
* carelessly; it is what you write when standing up a real boot is
|
|
17
|
+
* expensive. So the fix for the class is to make it cheap.
|
|
18
|
+
*
|
|
19
|
+
* Deliberately NOT a *.test.ts file: jest's testMatch is `**''/*.test.ts`
|
|
20
|
+
* and a helper named that way becomes an empty failing suite.
|
|
21
|
+
*
|
|
22
|
+
* Two fixture facts that cost two sessions an hour between them, and are
|
|
23
|
+
* baked in here so nobody pays a third time:
|
|
24
|
+
* - saved items use enum KEYS, not values: 'Tiny' and 'Commlink',
|
|
25
|
+
* never 'tiny' and 'commlink'.
|
|
26
|
+
* - saved equipment is keyed by FLATTENED path -- 'head.commlink' --
|
|
27
|
+
* not nested objects.
|
|
28
|
+
* And one that used to be here and is now gone: there is no `currency`
|
|
29
|
+
* field on a save. Money rides credstick items. The old fixtures carried
|
|
30
|
+
* `currency: 500`, which read as meaningful and did exactly nothing.
|
|
31
|
+
*/
|
|
32
|
+
/** A commlink as a SAVED item -- enum keys, per the note above. */
|
|
33
|
+
export const SAVED_COMMLINK = {
|
|
34
|
+
name: 'Renraku Sensei',
|
|
35
|
+
description: 'A commlink that has seen a few owners.',
|
|
36
|
+
size: 'Tiny',
|
|
37
|
+
category: 'Commlink',
|
|
38
|
+
shape: 'Rectangle',
|
|
39
|
+
color: 'Gray',
|
|
40
|
+
texture: 'Plastic',
|
|
41
|
+
rating: 'Common',
|
|
42
|
+
weight: 0.1,
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* The smallest save the boot path actually reads: buildPlayerFromSave
|
|
46
|
+
* needs the attribute/skill block, restorePlayer needs the replay arrays
|
|
47
|
+
* to iterate.
|
|
48
|
+
*/
|
|
49
|
+
export function savedPlayer(name, overrides = {}) {
|
|
50
|
+
return {
|
|
51
|
+
name,
|
|
52
|
+
archetypeName: 'Street Samurai',
|
|
53
|
+
attributes: {
|
|
54
|
+
body: 4, agility: 5, reaction: 4, combatSkill: 3,
|
|
55
|
+
magic: 0, strength: 4, willpower: 3, logic: 3,
|
|
56
|
+
intuition: 4, charisma: 3, edge: 3, resonance: 0,
|
|
57
|
+
adept: false,
|
|
58
|
+
},
|
|
59
|
+
baseMagic: 0,
|
|
60
|
+
baseResonance: 0,
|
|
61
|
+
skills: { firearms: 4, perception: 3 },
|
|
62
|
+
karma: 0,
|
|
63
|
+
careerKarma: 0,
|
|
64
|
+
notorietyReasons: [],
|
|
65
|
+
metamagics: [],
|
|
66
|
+
initiationGrade: 0,
|
|
67
|
+
qualities: [],
|
|
68
|
+
augmentations: [],
|
|
69
|
+
augmentationGrades: [],
|
|
70
|
+
damageTaken: 0,
|
|
71
|
+
stunTaken: 0,
|
|
72
|
+
needs: {
|
|
73
|
+
hungerFatigue: 0, sleepFatigue: 0,
|
|
74
|
+
ateThisCycle: true, sleptThisCycle: true,
|
|
75
|
+
hungerStreak: 0, sleepStreak: 0,
|
|
76
|
+
},
|
|
77
|
+
edgeRemaining: 3,
|
|
78
|
+
haggledThisJob: false,
|
|
79
|
+
autoStance: 'manual',
|
|
80
|
+
visitedRooms: [],
|
|
81
|
+
inventory: [],
|
|
82
|
+
equipment: {},
|
|
83
|
+
...overrides,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
export function save(name, overrides = {}) {
|
|
87
|
+
return {
|
|
88
|
+
version: 1,
|
|
89
|
+
playerName: name,
|
|
90
|
+
player: savedPlayer(name, overrides),
|
|
91
|
+
game: {},
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* The smallest scene the engine will boot AND that carries the things
|
|
96
|
+
* run-scoped state is about: a client, a payout, and a hand-off win
|
|
97
|
+
* condition. Hand-authored rather than read from a session folder -- a
|
|
98
|
+
* test that depends on one machine's saved games protects nothing on any
|
|
99
|
+
* other machine.
|
|
100
|
+
*/
|
|
101
|
+
export function paritySeed(overrides = {}) {
|
|
102
|
+
return {
|
|
103
|
+
name: 'Parity Job',
|
|
104
|
+
story: 'A short walk and a long memory.',
|
|
105
|
+
currency: { type: 'nuyen', authorityRoomTags: [] },
|
|
106
|
+
residenceTiers: ['Street', 'Squatter', 'Low'],
|
|
107
|
+
rooms: [
|
|
108
|
+
{
|
|
109
|
+
name: 'Curbside Drop',
|
|
110
|
+
description: 'Wet asphalt under a dead streetlamp.',
|
|
111
|
+
roomType: 'Street',
|
|
112
|
+
isStartRoom: true,
|
|
113
|
+
exits: [{ direction: 'north', targetRoom: 'Back Office' }],
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
name: 'Back Office',
|
|
117
|
+
description: 'A desk, a dead plant, and a chair nobody sits in.',
|
|
118
|
+
exits: [{ direction: 'south', targetRoom: 'Curbside Drop' }],
|
|
119
|
+
},
|
|
120
|
+
],
|
|
121
|
+
npcs: [
|
|
122
|
+
{
|
|
123
|
+
description: 'A Johnson who never touches the goods.',
|
|
124
|
+
dialogue: ['The job is simple. That is what worries me.'],
|
|
125
|
+
player: {
|
|
126
|
+
name: 'Ms. Dovetail',
|
|
127
|
+
startLocation: 'Curbside Drop',
|
|
128
|
+
lifestyleChoices: [],
|
|
129
|
+
combat: { body: 3, agility: 3, reaction: 3, willpower: 3, logic: 3, intuition: 3, charisma: 5, strength: 3, edge: 2 },
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
],
|
|
133
|
+
items: [
|
|
134
|
+
{
|
|
135
|
+
name: 'The Ledger',
|
|
136
|
+
description: 'A slab of a datapad, warm from somebody else pocket.',
|
|
137
|
+
size: 'Small',
|
|
138
|
+
category: 'Electronics',
|
|
139
|
+
shape: 'slab',
|
|
140
|
+
color: 'black',
|
|
141
|
+
texture: 'smooth',
|
|
142
|
+
rating: 'Common',
|
|
143
|
+
weight: 1,
|
|
144
|
+
transferable: true,
|
|
145
|
+
room: 'Back Office',
|
|
146
|
+
},
|
|
147
|
+
],
|
|
148
|
+
puzzles: [],
|
|
149
|
+
winCondition: {
|
|
150
|
+
type: 'give',
|
|
151
|
+
item: 'The Ledger',
|
|
152
|
+
toNpc: 'Ms. Dovetail',
|
|
153
|
+
payout: 3000,
|
|
154
|
+
completionMessage: 'The ledger changes hands and nobody says a word about it.',
|
|
155
|
+
},
|
|
156
|
+
client: 'Ms. Dovetail',
|
|
157
|
+
player: {
|
|
158
|
+
name: 'Maka',
|
|
159
|
+
startLocation: 'Curbside Drop',
|
|
160
|
+
lifestyleChoices: [{ type: 'residence', metadata: { tier: 'Street', location: 'Curbside Drop' } }],
|
|
161
|
+
startingItems: [],
|
|
162
|
+
},
|
|
163
|
+
...overrides,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Boots a real headless session. The env flags keep it off the network
|
|
168
|
+
* and off telemetry, which is most of what made this expensive before.
|
|
169
|
+
*/
|
|
170
|
+
export async function bootSession(opts = {}) {
|
|
171
|
+
process.env.MAKA_NO_DDP = '1';
|
|
172
|
+
process.env.MAKA_NO_LORE = '1';
|
|
173
|
+
process.env.MAKA_NO_TELEMETRY = '1';
|
|
174
|
+
const events = opts.events;
|
|
175
|
+
const session = await createHeadlessSession({
|
|
176
|
+
sessionId: `harness-${Math.random().toString(36).slice(2, 8)}`,
|
|
177
|
+
seed: opts.seed ?? paritySeed(),
|
|
178
|
+
players: opts.players ?? [save('Maka')],
|
|
179
|
+
tier: opts.tier,
|
|
180
|
+
useAi: false,
|
|
181
|
+
sink: (ev) => { events?.push(ev); },
|
|
182
|
+
});
|
|
183
|
+
for (const joiner of opts.join ?? []) {
|
|
184
|
+
await session.addPlayer(joiner);
|
|
185
|
+
}
|
|
186
|
+
return session;
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=headless-harness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headless-harness.js","sourceRoot":"","sources":["../../../../../../src/commands/game/sideQuest/headless-harness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAmB,MAAM,eAAe,CAAC;AAKvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,mEAAmE;AACnE,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE,wCAAwC;IACrD,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,MAAM;IACb,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,GAAG;CACZ,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,YAAqC,EAAE;IAC/E,OAAO;QACL,IAAI;QACJ,aAAa,EAAE,gBAAgB;QAC/B,UAAU,EAAE;YACV,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC;YAChD,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;YAC7C,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC;YAChD,KAAK,EAAE,KAAK;SACb;QACD,SAAS,EAAE,CAAC;QACZ,aAAa,EAAE,CAAC;QAChB,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE;QACtC,KAAK,EAAE,CAAC;QACR,WAAW,EAAE,CAAC;QACd,gBAAgB,EAAE,EAAE;QACpB,UAAU,EAAE,EAAE;QACd,eAAe,EAAE,CAAC;QAClB,SAAS,EAAE,EAAE;QACb,aAAa,EAAE,EAAE;QACjB,kBAAkB,EAAE,EAAE;QACtB,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,CAAC;QACZ,KAAK,EAAE;YACL,aAAa,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC;YACjC,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI;YACxC,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC;SAChC;QACD,aAAa,EAAE,CAAC;QAChB,cAAc,EAAE,KAAK;QACrB,UAAU,EAAE,QAAQ;QACpB,YAAY,EAAE,EAAE;QAChB,SAAS,EAAE,EAAE;QACb,SAAS,EAAE,EAAE;QACb,GAAG,SAAS;KACc,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,IAAY,EAAE,YAAqC,EAAE;IACxE,OAAO;QACL,OAAO,EAAE,CAAC;QACV,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC;QACpC,IAAI,EAAE,EAAE;KACiB,CAAC;AAC9B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,YAAqC,EAAE;IAChE,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,iCAAiC;QACxC,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,EAAE;QAClD,cAAc,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC;QAC7C,KAAK,EAAE;YACL;gBACE,IAAI,EAAE,eAAe;gBACrB,WAAW,EAAE,sCAAsC;gBACnD,QAAQ,EAAE,QAAQ;gBAClB,WAAW,EAAE,IAAI;gBACjB,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC;aAC3D;YACD;gBACE,IAAI,EAAE,aAAa;gBACnB,WAAW,EAAE,mDAAmD;gBAChE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC;aAC7D;SACF;QACD,IAAI,EAAE;YACJ;gBACE,WAAW,EAAE,wCAAwC;gBACrD,QAAQ,EAAE,CAAC,6CAA6C,CAAC;gBACzD,MAAM,EAAE;oBACN,IAAI,EAAE,cAAc;oBACpB,aAAa,EAAE,eAAe;oBAC9B,gBAAgB,EAAE,EAAE;oBACpB,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;iBACtH;aACF;SACF;QACD,KAAK,EAAE;YACL;gBACE,IAAI,EAAE,YAAY;gBAClB,WAAW,EAAE,sDAAsD;gBACnE,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,aAAa;gBACvB,KAAK,EAAE,MAAM;gBACb,KAAK,EAAE,OAAO;gBACd,OAAO,EAAE,QAAQ;gBACjB,MAAM,EAAE,QAAQ;gBAChB,MAAM,EAAE,CAAC;gBACT,YAAY,EAAE,IAAI;gBAClB,IAAI,EAAE,aAAa;aACpB;SACF;QACD,OAAO,EAAE,EAAE;QACX,YAAY,EAAE;YACZ,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,cAAc;YACrB,MAAM,EAAE,IAAI;YACZ,iBAAiB,EAAE,2DAA2D;SAC/E;QACD,MAAM,EAAE,cAAc;QACtB,MAAM,EAAE;YACN,IAAI,EAAE,MAAM;YACZ,aAAa,EAAE,eAAe;YAC9B,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE,EAAE,CAAC;YAClG,aAAa,EAAE,EAAE;SAClB;QACD,GAAG,SAAS;KACgB,CAAC;AACjC,CAAC;AAeD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAoB,EAAE;IACtD,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC;IAC9B,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,GAAG,CAAC;IAEpC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC;QAC1C,SAAS,EAAE,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;QAC9D,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,UAAU,EAAE;QAC/B,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;KACpC,CAAC,CAAC;IAEH,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;QACrC,MAAM,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -61,6 +61,11 @@ export interface HeadlessOptions {
|
|
|
61
61
|
seed: ISceneSeedJson;
|
|
62
62
|
/** Save docs, one per human; players[0] is the leader/primary. */
|
|
63
63
|
players: ISaveFileV1[];
|
|
64
|
+
/** The tier this scene was GENERATED at. The solo arrival path sets
|
|
65
|
+
* it from the same number; a headless boot had no way to say it and
|
|
66
|
+
* sat at the default 1, which then rode into the save snapshot and
|
|
67
|
+
* the next draft (audit 2026-08-27). Omitted keeps the old default. */
|
|
68
|
+
tier?: number;
|
|
64
69
|
useAi?: boolean;
|
|
65
70
|
sink: (ev: GameEvent) => void;
|
|
66
71
|
debug?: (line: string) => void;
|
|
@@ -19,6 +19,7 @@ import { restorePlayer, serializePlayer } from './utilities/persistence.js';
|
|
|
19
19
|
import { renderMapViewport } from './utilities/map-view.js';
|
|
20
20
|
import { renderRoomLayoutCompact } from './utilities/room-view.js';
|
|
21
21
|
import { entrySpotFor, spotOf } from './utilities/spots.js';
|
|
22
|
+
import { equipIntoEmptySlots } from './archetypes.js';
|
|
22
23
|
/**
|
|
23
24
|
* The session's Logger: same shape the whole engine already talks to,
|
|
24
25
|
* but every player-visible line becomes a GameEvent through `sink`.
|
|
@@ -132,6 +133,33 @@ export function buildPlayerFromSave(save) {
|
|
|
132
133
|
});
|
|
133
134
|
player.archetypeName = save.player.archetypeName;
|
|
134
135
|
restorePlayer(player, save.player);
|
|
136
|
+
// GEAR UP EVERY RUNNER, NOT JUST THE FIRST ONE (audit 2026-08-27,
|
|
137
|
+
// found by backlog-session-2).
|
|
138
|
+
//
|
|
139
|
+
// `Game.initEngine` ends with `equipIntoEmptySlots(this.player)` --
|
|
140
|
+
// singular, once, for the PRIMARY runner: wearables and the commlink
|
|
141
|
+
// slot into empty slots so no session starts with an "equip all"
|
|
142
|
+
// ritual. A save brought in through `addPlayer` never passed through
|
|
143
|
+
// that line, so a joiner carrying an unworn commlink stayed carrying
|
|
144
|
+
// it.
|
|
145
|
+
//
|
|
146
|
+
// The consequence is not cosmetic: call.ts requires a WORN commlink,
|
|
147
|
+
// so the joiner could neither call nor be called, and their HUD read
|
|
148
|
+
// "Link offline" from a save byte-identical to the host's.
|
|
149
|
+
//
|
|
150
|
+
// Doing it HERE rather than at the addPlayer call site is deliberate:
|
|
151
|
+
// this function is the one path both the host and every joiner
|
|
152
|
+
// actually share, so the two cannot drift apart again. It is also
|
|
153
|
+
// idempotent -- only EMPTY slots are filled -- so initEngine's own
|
|
154
|
+
// call on the primary remains harmless.
|
|
155
|
+
//
|
|
156
|
+
// Why it survived: the asymmetry is HOST vs JOINER, not solo vs
|
|
157
|
+
// shared. Every solo test passes. Every single-player shared test
|
|
158
|
+
// passes. It takes two runners in one session to see it at all, and
|
|
159
|
+
// it only bites gear that is carried-but-unworn -- a save made after
|
|
160
|
+
// picking something up mid-run, since character creation equips at
|
|
161
|
+
// creation time.
|
|
162
|
+
equipIntoEmptySlots(player);
|
|
135
163
|
return player;
|
|
136
164
|
}
|
|
137
165
|
export async function createHeadlessSession(opts) {
|
|
@@ -140,6 +168,10 @@ export async function createHeadlessSession(opts) {
|
|
|
140
168
|
return runInSession(ctx, async () => {
|
|
141
169
|
const primary = buildPlayerFromSave(opts.players[0]);
|
|
142
170
|
const game = new Game(primary, opts.seed);
|
|
171
|
+
// The run's tier, stated rather than defaulted -- see
|
|
172
|
+
// HeadlessOptions.tier and Game.tier.
|
|
173
|
+
if (typeof opts.tier === 'number')
|
|
174
|
+
game.tier = opts.tier;
|
|
143
175
|
logger.bindGame(() => game);
|
|
144
176
|
game.onPlayerDeath = (p) => {
|
|
145
177
|
logger.system(`${p.name} is dead. The street keeps the change.`, 'all', 'death', { player: p.name });
|
|
@@ -172,6 +204,28 @@ export async function createHeadlessSession(opts) {
|
|
|
172
204
|
// that they're waiting.
|
|
173
205
|
const clientName = opts.seed.client;
|
|
174
206
|
if (clientName) {
|
|
207
|
+
// THE MEET HAS TO BE ARMED, NOT JUST ANNOUNCED (playtest
|
|
208
|
+
// 2026-08-27: "THE MEET didn't happen when I met Mr. Osprey").
|
|
209
|
+
//
|
|
210
|
+
// Game.onClientInteraction is what turns talking to the Johnson
|
|
211
|
+
// into the terms, the one haggle, and -- at the other end of the
|
|
212
|
+
// run -- the WRAP-UP SETTLEMENT that actually pays the runner.
|
|
213
|
+
// Every one of those rides `currentClient`, and its first line is
|
|
214
|
+
// `if (!client ...) return null`.
|
|
215
|
+
//
|
|
216
|
+
// `currentClient` was set in exactly one place: activateRunScene,
|
|
217
|
+
// the SOLO arrival path. A headless session boots through
|
|
218
|
+
// initEngine and then hand-rolled the Johnson's page just below --
|
|
219
|
+
// announcing a meet that the engine had no idea was pending. So on
|
|
220
|
+
// a shared run the terms never landed, the haggle was unreachable,
|
|
221
|
+
// and at completion the settlement silently never fired: the table
|
|
222
|
+
// finished the job and nobody got paid.
|
|
223
|
+
//
|
|
224
|
+
// Deliberately identical in shape to the solo arrival, because the
|
|
225
|
+
// two paths diverging is the whole bug. Not saved and not meant to
|
|
226
|
+
// be -- mid-run state never is; it is rebuilt on boot, which is
|
|
227
|
+
// precisely what this line does for the shared path.
|
|
228
|
+
game.currentClient = { name: clientName, met: false, reported: false };
|
|
175
229
|
const clientActor = game.scene.allActors.find(a => a.name === clientName);
|
|
176
230
|
const room = clientActor?.currentLocation?.name;
|
|
177
231
|
// ROOM GRIDS (spatial wave 2026-08-25, included shared-run fix):
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headless.js","sourceRoot":"","sources":["../../../../../../src/commands/game/sideQuest/headless.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"headless.js","sourceRoot":"","sources":["../../../../../../src/commands/game/sideQuest/headless.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,6 +30,68 @@ export declare function castPin(names: string[]): string;
|
|
|
30
30
|
* notice.
|
|
31
31
|
*/
|
|
32
32
|
export declare function credentialHonestyNote(passesHeld: number): string;
|
|
33
|
+
/**
|
|
34
|
+
* WHAT YOU KNOW ENDS AT THIS ROOM -- audit findings #9 and #10, the last
|
|
35
|
+
* two unpinned facts from the credential sweep, and the same shape as
|
|
36
|
+
* the credential hole: pinned for the NPC's own room, invented for
|
|
37
|
+
* anywhere else.
|
|
38
|
+
*
|
|
39
|
+
* #9 an NPC asked where something is names a REAL room the item is
|
|
40
|
+
* not in. Real, because geography is pinned -- which makes it
|
|
41
|
+
* worse, not better. A vague answer costs a player nothing; a
|
|
42
|
+
* plausible, checkable, wrong one costs them the walk there, the
|
|
43
|
+
* search, and their trust in the next true thing they hear.
|
|
44
|
+
* #10 an NPC asked what a door ELSEWHERE needs invents a requirement.
|
|
45
|
+
* They only ever see their own room's exits.
|
|
46
|
+
*
|
|
47
|
+
* Deliberately NOT an index of the world's items and doors: that would
|
|
48
|
+
* spoil the game and cost prompt budget to do it. Pin what the NPC can
|
|
49
|
+
* legitimately know, deny the rest, index nothing.
|
|
50
|
+
*
|
|
51
|
+
* The scoping matters and is the whole difficulty. An NPC absolutely may
|
|
52
|
+
* say where things are when they were TOLD -- the client's briefing, the
|
|
53
|
+
* legwork facts ask.ts hands over, their own scripted talking points are
|
|
54
|
+
* all real knowledge, engine-supplied, and a blanket denial would gag
|
|
55
|
+
* the Johnson mid-brief. What is banned is GUESSING TO BE HELPFUL, which
|
|
56
|
+
* is the specific thing a model does when it has no answer and wants to
|
|
57
|
+
* give one.
|
|
58
|
+
*/
|
|
59
|
+
export declare function localKnowledgeNote(roomName?: string): string;
|
|
60
|
+
/**
|
|
61
|
+
* OUT-OF-CHARACTER LEAKAGE on the exposition channel.
|
|
62
|
+
*
|
|
63
|
+
* Playtest 2026-08-27 (Sherry): "The response from Mr. Krow was OOC" --
|
|
64
|
+
* Krow answered in the game's own voice instead of in his.
|
|
65
|
+
*
|
|
66
|
+
* This is the SAME SEAM as splitSpokenLines, one layer up, and widening
|
|
67
|
+
* it was the right move rather than building a second mechanism. The
|
|
68
|
+
* exposition channel is the only place a model's non-fiction voice can
|
|
69
|
+
* reach the screen: `say` lines are attributed dialogue and [COMMAND]
|
|
70
|
+
* lines are parsed, so anything that is neither prints as narration in
|
|
71
|
+
* narration blue. A filter for exactly this already existed and was
|
|
72
|
+
* built from ONE report -- the first-person director ("I'll have Deacon
|
|
73
|
+
* Ruy stay guarded but crack slightly under the pressure...") -- so it
|
|
74
|
+
* only ever matched that one shape.
|
|
75
|
+
*
|
|
76
|
+
* The shapes it missed are the ordinary ones: the assistant preamble
|
|
77
|
+
* ("Certainly! Here's how he responds"), the frame ("As Mr. Krow, I'd
|
|
78
|
+
* say..."), the explicit marker ("OOC:", "Note:"), and talk about the
|
|
79
|
+
* player rather than to them ("The player is trying to...").
|
|
80
|
+
*
|
|
81
|
+
* SUPPRESSED, not restyled. The player also asked for OOC to be visibly
|
|
82
|
+
* distinct from fiction, and that is a real and separate feature -- but
|
|
83
|
+
* "Certainly! Here's what he'd say" is not out-of-character INFORMATION,
|
|
84
|
+
* it is the model failing to stay in the fiction, and there is nothing
|
|
85
|
+
* in it worth showing in any colour. The genuine OOC channels
|
|
86
|
+
* (logger.meta for mechanics, hint() for coaching) already exist and are
|
|
87
|
+
* already visibly distinct; routing leakage into them would fill the
|
|
88
|
+
* player's straight-talk channel with noise.
|
|
89
|
+
*
|
|
90
|
+
* Exported and PURE because it fails silently in the usual way: nothing
|
|
91
|
+
* throws when a pattern stops matching, the line just prints, and the
|
|
92
|
+
* only detector is a player watching their fixer break character.
|
|
93
|
+
*/
|
|
94
|
+
export declare function isOutOfCharacter(line: string, npcName?: string): boolean;
|
|
33
95
|
/**
|
|
34
96
|
* SPEECH REPAIR: turns a model reply's raw lines into lines the
|
|
35
97
|
* classifier below can actually read. Exported and PURE so the rules
|