@maka/maka-cli 5.17.16 → 5.17.18

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 (55) hide show
  1. package/bundle/typescript/package.json +1 -1
  2. package/bundle/typescript/src/commands/game/sideQuest/archetypes.js +1 -1
  3. package/bundle/typescript/src/commands/game/sideQuest/archetypes.js.map +1 -1
  4. package/bundle/typescript/src/commands/game/sideQuest/commands/call.d.ts +2 -0
  5. package/bundle/typescript/src/commands/game/sideQuest/commands/call.js +35 -0
  6. package/bundle/typescript/src/commands/game/sideQuest/commands/call.js.map +1 -1
  7. package/bundle/typescript/src/commands/game/sideQuest/commands/command.d.ts +16 -0
  8. package/bundle/typescript/src/commands/game/sideQuest/commands/command.js +10 -0
  9. package/bundle/typescript/src/commands/game/sideQuest/commands/command.js.map +1 -1
  10. package/bundle/typescript/src/commands/game/sideQuest/commands/compile.d.ts +27 -0
  11. package/bundle/typescript/src/commands/game/sideQuest/commands/compile.js +8 -1
  12. package/bundle/typescript/src/commands/game/sideQuest/commands/compile.js.map +1 -1
  13. package/bundle/typescript/src/commands/game/sideQuest/commands/crew.d.ts +12 -2
  14. package/bundle/typescript/src/commands/game/sideQuest/commands/crew.js +69 -79
  15. package/bundle/typescript/src/commands/game/sideQuest/commands/crew.js.map +1 -1
  16. package/bundle/typescript/src/commands/game/sideQuest/commands/end-call.js +4 -1
  17. package/bundle/typescript/src/commands/game/sideQuest/commands/end-call.js.map +1 -1
  18. package/bundle/typescript/src/commands/game/sideQuest/commands/players.d.ts +4 -6
  19. package/bundle/typescript/src/commands/game/sideQuest/commands/players.js +6 -9
  20. package/bundle/typescript/src/commands/game/sideQuest/commands/players.js.map +1 -1
  21. package/bundle/typescript/src/commands/game/sideQuest/commands/register.d.ts +16 -0
  22. package/bundle/typescript/src/commands/game/sideQuest/commands/register.js +74 -0
  23. package/bundle/typescript/src/commands/game/sideQuest/commands/register.js.map +1 -0
  24. package/bundle/typescript/src/commands/game/sideQuest/commands/say.js +18 -9
  25. package/bundle/typescript/src/commands/game/sideQuest/commands/say.js.map +1 -1
  26. package/bundle/typescript/src/commands/game/sideQuest/commands/thread.d.ts +17 -0
  27. package/bundle/typescript/src/commands/game/sideQuest/commands/thread.js +165 -0
  28. package/bundle/typescript/src/commands/game/sideQuest/commands/thread.js.map +1 -0
  29. package/bundle/typescript/src/commands/game/sideQuest/engine-version.d.ts +19 -0
  30. package/bundle/typescript/src/commands/game/sideQuest/engine-version.js +22 -0
  31. package/bundle/typescript/src/commands/game/sideQuest/engine-version.js.map +1 -0
  32. package/bundle/typescript/src/commands/game/sideQuest/game.d.ts +19 -4
  33. package/bundle/typescript/src/commands/game/sideQuest/game.js +149 -49
  34. package/bundle/typescript/src/commands/game/sideQuest/game.js.map +1 -1
  35. package/bundle/typescript/src/commands/game/sideQuest/models/player.d.ts +10 -1
  36. package/bundle/typescript/src/commands/game/sideQuest/models/player.js +20 -4
  37. package/bundle/typescript/src/commands/game/sideQuest/models/player.js.map +1 -1
  38. package/bundle/typescript/src/commands/game/sideQuest/types/save-file.d.ts +15 -0
  39. package/bundle/typescript/src/commands/game/sideQuest/ui.d.ts +6 -0
  40. package/bundle/typescript/src/commands/game/sideQuest/ui.js.map +1 -1
  41. package/bundle/typescript/src/commands/game/sideQuest/utilities/cloud-saves.d.ts +4 -0
  42. package/bundle/typescript/src/commands/game/sideQuest/utilities/cloud-saves.js +13 -0
  43. package/bundle/typescript/src/commands/game/sideQuest/utilities/cloud-saves.js.map +1 -1
  44. package/bundle/typescript/src/commands/game/sideQuest/utilities/session-telemetry.js +9 -0
  45. package/bundle/typescript/src/commands/game/sideQuest/utilities/session-telemetry.js.map +1 -1
  46. package/bundle/typescript/src/commands/game/sideQuest/utilities/shared-run.d.ts +12 -7
  47. package/bundle/typescript/src/commands/game/sideQuest/utilities/shared-run.js +29 -17
  48. package/bundle/typescript/src/commands/game/sideQuest/utilities/shared-run.js.map +1 -1
  49. package/bundle/typescript/src/commands/game/sideQuest/utilities/social.d.ts +1 -30
  50. package/bundle/typescript/src/commands/game/sideQuest/utilities/social.js +4 -89
  51. package/bundle/typescript/src/commands/game/sideQuest/utilities/social.js.map +1 -1
  52. package/package.json +1 -1
  53. package/bundle/typescript/src/commands/game/sideQuest/utilities/crew-ledger.d.ts +0 -21
  54. package/bundle/typescript/src/commands/game/sideQuest/utilities/crew-ledger.js +0 -25
  55. package/bundle/typescript/src/commands/game/sideQuest/utilities/crew-ledger.js.map +0 -1
@@ -0,0 +1,17 @@
1
+ import { Command, ICommand } from './command.js';
2
+ export declare class ThreadCommand extends Command implements ICommand {
3
+ protected static verb: string;
4
+ protected static description: string;
5
+ protected static subcommands: ({
6
+ usage: string;
7
+ short: string;
8
+ long?: undefined;
9
+ } | {
10
+ usage: string;
11
+ short: string;
12
+ long: string;
13
+ })[];
14
+ execute(args?: string[]): Promise<string>;
15
+ /** Per-form resolution once the weave holds (hits >= 1). */
16
+ private resolveForm;
17
+ }
@@ -0,0 +1,165 @@
1
+ import { Command } from './command.js';
2
+ import { rollPool, formatRoll } from '../utilities/dice.js';
3
+ import { hint } from '../utilities/hints.js';
4
+ import { fuzzyPickName } from '../utilities/fuzzy-match.js';
5
+ import { NPC } from '../models/npc.js';
6
+ const FORMS = [
7
+ { key: 'resonance-spike', name: 'Resonance Spike', blurb: 'raw Resonance as a weapon -- boxes of Matrix damage, no marks, no mercy', fvDelta: -1, kind: 'instant' },
8
+ { key: 'stitches', name: 'Stitches', blurb: 'rethread a damaged sprite -- repairs its condition monitor', fvDelta: 0, kind: 'instant' },
9
+ { key: 'diagnostics', name: 'Diagnostics', blurb: 'the code shows you its seams -- +2 to your Matrix pools while held', fvDelta: -1, kind: 'sustained' },
10
+ { key: 'static-veil', name: 'Static Veil', blurb: 'you read as background noise -- +2 Matrix defense while held', fvDelta: -1, kind: 'sustained' },
11
+ ];
12
+ export class ThreadCommand extends Command {
13
+ static verb = 'thread';
14
+ static description = 'Thread a complex form (technomancers): "thread <form> <level>" -- Resonance + software vs the weave; fading resisted with Resonance + Willpower (PHYSICAL past your Resonance). Sustained forms hold at -2 dice each. "thread" lists; "thread drop <form>" releases.';
15
+ static subcommands = [
16
+ { usage: 'thread', short: 'list the forms you can weave' },
17
+ { usage: 'thread <form> <level>', short: 'weave one (level defaults to your Resonance)',
18
+ long: 'Resonance + software [Level] shapes the form; hits are capped by the Level. Fading = the form\'s value off the Level (min 2), resisted with Resonance + Willpower -- PHYSICAL when the Level exceeds your Resonance. Level caps at twice your Resonance.' },
19
+ { usage: 'thread drop <form>', short: 'release a sustained form',
20
+ long: 'Lets a sustained form unravel -- its bonus ends, its -2 sustaining burden lifts.' },
21
+ ];
22
+ async execute(args = []) {
23
+ const actor = this.actor;
24
+ if (!actor.isTechnomancer()) {
25
+ return `The Resonance doesn't know your voice. Complex forms answer technomancers.`;
26
+ }
27
+ if (actor.plane === 'astral') {
28
+ return `The astral and the Resonance don't touch. "return" first.`;
29
+ }
30
+ const words = args.map(w => w.toLowerCase());
31
+ // "thread drop <form>": release a sustained working.
32
+ if (words[0] === 'drop' || words[0] === 'release') {
33
+ const query = words.slice(1).join(' ');
34
+ const held = actor.sustainedForms;
35
+ if (held.length === 0)
36
+ return `You hold no threaded forms.`;
37
+ const pick = query
38
+ ? fuzzyPickName(query, held.map(f => f.key))
39
+ : held[held.length - 1].key;
40
+ const idx = pick ? held.findIndex(f => f.key === pick) : -1;
41
+ if (idx < 0)
42
+ return `You hold no form matching "${query}". (${held.map(f => f.key).join(', ')})`;
43
+ const [dropped] = held.splice(idx, 1);
44
+ this.scene.updateStatus();
45
+ return `You let ${FORMS.find(f => f.key === dropped.key)?.name ?? dropped.key} unravel -- the weave releases, your focus comes back.`;
46
+ }
47
+ // Bare "thread": the catalog.
48
+ if (words.length === 0) {
49
+ const lines = [`=== COMPLEX FORMS === (thread <form> <level>)`];
50
+ for (const f of FORMS) {
51
+ const held = actor.sustainedForms.some(s => s.key === f.key);
52
+ lines.push(` ${f.name.padEnd(16)} ${f.kind === 'sustained' ? '[sustained]' : '[instant] '} ${f.blurb}${held ? ' {cyan-fg}(HELD){/cyan-fg}' : ''}`);
53
+ }
54
+ if (actor.sustainedForms.length > 0) {
55
+ lines.push('', ` Holding ${actor.sustainedForms.length} form${actor.sustainedForms.length === 1 ? '' : 's'} (-${actor.sustainedForms.length * 2} dice).${hint(` ("thread drop <form>" releases.)`)}`);
56
+ }
57
+ return lines.join('\n');
58
+ }
59
+ // "thread <form> [level]"
60
+ const numArg = words.find(w => /^\d+$/.test(w));
61
+ const nameWords = words.filter(w => !/^\d+$/.test(w)).join(' ');
62
+ const pickedKey = fuzzyPickName(nameWords, FORMS.map(f => f.key))
63
+ ?? fuzzyPickName(nameWords, FORMS.map(f => f.name));
64
+ const form = FORMS.find(f => f.key === pickedKey || f.name === pickedKey);
65
+ if (!form) {
66
+ return `No form by that name. The Resonance weaves: ${FORMS.map(f => f.name).join(', ')}. ("thread" lists them.)`;
67
+ }
68
+ const level = numArg ? parseInt(numArg, 10) : Math.max(1, actor.resonance);
69
+ if (level < 1)
70
+ return `Level below 1 threads nothing at all.`;
71
+ if (level > actor.resonance * 2) {
72
+ return `A Level ${level} weave would thread YOU -- twice your Resonance (${actor.resonance * 2}) is the hard ceiling.`;
73
+ }
74
+ if (form.kind === 'sustained' && actor.sustainedForms.some(f => f.key === form.key)) {
75
+ return `${form.name} is already woven and held. ("thread drop ${form.key}" releases it first.)`;
76
+ }
77
+ const overreach = level > actor.resonance;
78
+ // The threading test: Resonance + software [Level] -- hits capped
79
+ // by the Level, unskilled defaults at -1 (the conjuring school).
80
+ const software = actor.skillRating('software');
81
+ const roll = rollPool(Math.max(1, actor.resonance + (software > 0 ? software : -1) + actor.woundModifier - actor.sustainingPenalty));
82
+ const hits = Math.min(roll.hits, level);
83
+ // Fading: the form's value off the Level, min 2 -- resisted with
84
+ // Resonance + Willpower, physical on overreach.
85
+ const fadingValue = Math.max(2, level + form.fvDelta);
86
+ const resist = rollPool(Math.max(1, actor.willpower + actor.resonance));
87
+ const fadingTaken = Math.max(0, fadingValue - resist.hits);
88
+ actor.performAction('threads a complex form', form.name);
89
+ this.logger.write(`ThreadCommand: ${actor.name} ${form.key} level ${level} -- ${roll.hits} hits (capped ${hits}), fading ${fadingValue} (took ${fadingTaken}${overreach ? ' physical' : ''}).`);
90
+ const poolParts = [`Resonance ${actor.resonance}`, software > 0 ? `software ${software}` : `no software -1`];
91
+ if (actor.woundModifier < 0)
92
+ poolParts.push(`wounds ${actor.woundModifier}`);
93
+ if (actor.sustainingPenalty > 0)
94
+ poolParts.push(`sustaining -${actor.sustainingPenalty}`);
95
+ this.logger.meta(`Threading (${poolParts.join(', ')}) [Level ${level}]: ${formatRoll(roll)}`);
96
+ const lines = [
97
+ `You reach into the code behind the code and THREAD ${form.name} at Level ${level}${overreach ? ' (past your Resonance -- the fading will be PHYSICAL)' : ''}:`,
98
+ ];
99
+ if (hits === 0) {
100
+ lines.push(` The weave slips through your fingers -- nothing holds.`);
101
+ }
102
+ else {
103
+ lines.push(...this.resolveForm(form, level, hits));
104
+ }
105
+ this.logger.meta(`Fading (${fadingValue}${overreach ? ', OVERREACH -- physical' : ''}): resist ${formatRoll(resist)}`);
106
+ if (fadingTaken === 0) {
107
+ lines.push(` The fading washes past you.`);
108
+ }
109
+ else if (overreach) {
110
+ actor.takeDamage(fadingTaken);
111
+ lines.push(` The weave burns on the way out -- ${fadingTaken} PHYSICAL: ${actor.conditionSummary()}`);
112
+ }
113
+ else {
114
+ const { stun, overflow } = actor.takeStun(fadingTaken);
115
+ lines.push(` The fading bites -- ${stun} stun: ${actor.stunSummary()}`);
116
+ if (overflow > 0) {
117
+ lines.push(` It's more than your mind can hold -- ${overflow} box${overflow === 1 ? '' : 'es'} spill into your body: ${actor.conditionSummary()}`);
118
+ }
119
+ }
120
+ this.scene.updateStatus();
121
+ return lines.join('\n');
122
+ }
123
+ /** Per-form resolution once the weave holds (hits >= 1). */
124
+ resolveForm(form, level, hits) {
125
+ const actor = this.actor;
126
+ switch (form.key) {
127
+ case 'resonance-spike': {
128
+ // Raw damage to a Matrix opponent: your engaged foe, or the
129
+ // nearest hostile icon in the room. Resonance actions need no
130
+ // marks and grant no defense from hardware.
131
+ const target = (actor.combatOpponent instanceof NPC && actor.combatOpponent.plane === 'matrix')
132
+ ? actor.combatOpponent
133
+ : actor.currentLocation.getActors().find((a) => a instanceof NPC && a.plane === 'matrix' && !a.deathClaimed);
134
+ if (!target || actor.plane !== 'matrix') {
135
+ return [` The spike arcs and grounds out -- no hostile icon in reach.${actor.plane !== 'matrix' ? ` ("jack in" -- the Resonance strikes on the grid.)` : ''}`];
136
+ }
137
+ const dmg = hits + 2;
138
+ target.takeDamage(dmg);
139
+ this.logger.meta(`Resonance Spike: ${dmg} boxes to ${target.name}.`);
140
+ const fell = target.isDown() || target.deathClaimed;
141
+ return [` The spike lands SQUARE -- ${dmg} boxes of raw Resonance tear through ${target.name}${fell ? `, and its code shears apart` : ` (${target.conditionSummary()})`}.`];
142
+ }
143
+ case 'stitches': {
144
+ const sprite = this.game?.companions.find(c => c.kind === 'sprite');
145
+ if (!sprite)
146
+ return [` Stitches finds nothing to mend -- no sprite rides with you.`];
147
+ const before = sprite.npc.damageTaken;
148
+ sprite.npc.healDamage(hits);
149
+ const healed = before - sprite.npc.damageTaken;
150
+ return healed > 0
151
+ ? [` The weave knits ${sprite.npc.name} back together -- ${healed} box${healed === 1 ? '' : 'es'} restored (${sprite.npc.conditionSummary()}).`]
152
+ : [` ${sprite.npc.name} runs clean already -- the stitches find nothing torn.`];
153
+ }
154
+ case 'diagnostics':
155
+ case 'static-veil': {
156
+ actor.sustainedForms.push({ key: form.key, level });
157
+ const effect = form.key === 'diagnostics' ? '+2 to your Matrix pools' : '+2 Matrix defense';
158
+ return [` ${form.name} settles over your persona and HOLDS -- ${effect} while you sustain it (-2 dice to everything else).${hint(` ("thread drop ${form.key}" releases.)`)}`];
159
+ }
160
+ default:
161
+ return [` The form resolves and fades.`];
162
+ }
163
+ }
164
+ }
165
+ //# sourceMappingURL=thread.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thread.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/thread.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * THE ENGINE'S OWN VERSION (M4.14, player ruling: "maka-cli can update
3
+ * outside of the sidequest") -- the shared-run compatibility gate
4
+ * compares THIS, not the CLI package version. A chalk swap, a help-text
5
+ * tweak, or any release that doesn't change shared-session semantics no
6
+ * longer invalidates multiplayer or forces a lockstep server pin.
7
+ *
8
+ * BUMP DISCIPLINE: raise this when -- and only when -- a change under
9
+ * sideQuest/ alters behavior a SERVER-HOSTED session shares with
10
+ * clients: command semantics in shared scenes, the event envelope,
11
+ * save-shape fields the server writes back, DDP method/page payload
12
+ * shapes. Pure client-side polish (help copy, launcher flows, HUD
13
+ * lines) never bumps it. When it bumps, the server pin must be updated
14
+ * and redeployed before clients on the new engine can share runs.
15
+ *
16
+ * No import.meta here (engine-graph law) -- this file is loaded by the
17
+ * server.
18
+ */
19
+ export declare const ENGINE_VERSION = "1.1.0";
@@ -0,0 +1,22 @@
1
+ /**
2
+ * THE ENGINE'S OWN VERSION (M4.14, player ruling: "maka-cli can update
3
+ * outside of the sidequest") -- the shared-run compatibility gate
4
+ * compares THIS, not the CLI package version. A chalk swap, a help-text
5
+ * tweak, or any release that doesn't change shared-session semantics no
6
+ * longer invalidates multiplayer or forces a lockstep server pin.
7
+ *
8
+ * BUMP DISCIPLINE: raise this when -- and only when -- a change under
9
+ * sideQuest/ alters behavior a SERVER-HOSTED session shares with
10
+ * clients: command semantics in shared scenes, the event envelope,
11
+ * save-shape fields the server writes back, DDP method/page payload
12
+ * shapes. Pure client-side polish (help copy, launcher flows, HUD
13
+ * lines) never bumps it. When it bumps, the server pin must be updated
14
+ * and redeployed before clients on the new engine can share runs.
15
+ *
16
+ * No import.meta here (engine-graph law) -- this file is loaded by the
17
+ * server.
18
+ */
19
+ // 1.1.0 (2026-08-23): threading + sprite registration verbs in shared
20
+ // scenes; ghost mechanic removed; one-table-at-a-time party rules.
21
+ export const ENGINE_VERSION = '1.1.0';
22
+ //# sourceMappingURL=engine-version.js.map
@@ -0,0 +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,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC"}
@@ -52,6 +52,8 @@ export default class Game {
52
52
  private _inputBox;
53
53
  private _useAi;
54
54
  private _aiRefusalAnnounced;
55
+ private _owner?;
56
+ private _anonymous;
55
57
  private _logFilePath;
56
58
  private _tier;
57
59
  private _draftInProgress;
@@ -106,10 +108,6 @@ export default class Game {
106
108
  */
107
109
  pushPresenceNow(): Promise<'ok' | 'logged-out' | 'offline'>;
108
110
  startPresenceHeartbeat(): void;
109
- /** Ghost earnings home delivery: what YOUR runner made riding in
110
- * other players' crews since last time. Fire-and-forget from hub
111
- * arrival beats; pays onto the job credstick when anything landed. */
112
- collectGhostEarnings(): Promise<void>;
113
111
  private static readonly HIRE_NAMES;
114
112
  /** Deal 2-3 fresh candidates. Names dodge the live cast and roster. */
115
113
  rollHireCandidates(): void;
@@ -212,7 +210,16 @@ export default class Game {
212
210
  services?: number;
213
211
  force: number;
214
212
  boundDevice?: Item;
213
+ /** Sprites only: which SPRITE_TYPES entry built the shell -- needed
214
+ * to re-shell a REGISTERED sprite after travel or a resume. */
215
+ spriteType?: string;
216
+ /** REGISTERED (commands/register.ts): the sprite persists -- it
217
+ * survives travel and rides the save file. */
218
+ registered?: boolean;
215
219
  }[];
220
+ /** A registered sprite folded for travel, waiting to re-shell at the
221
+ * destination (the drone _pendingRedeploys school). */
222
+ private _pendingSpriteRedeploy?;
216
223
  private _pendingRedeploys;
217
224
  private _saveFilePath?;
218
225
  private _dead;
@@ -268,6 +275,14 @@ export default class Game {
268
275
  foldCompanionsForTravel(): string[];
269
276
  /** Post-arrival: re-shell what was deployed when you left (drones). */
270
277
  unfoldCompanionsOnArrival(): string[];
278
+ /** Re-shell a registered sprite (travel arrival, or a resumed save).
279
+ * Returns the arrival line, or undefined when the shell can't land
280
+ * (name collision -- vanishingly rare). */
281
+ respawnRegisteredSprite(spec: {
282
+ spriteType: string;
283
+ level: number;
284
+ tasks: number;
285
+ }): string | undefined;
271
286
  /**
272
287
  * Records a real transaction with a hub NPC: first contact opens the
273
288
  * relationship at Loyalty 1 (a safeguard -- the hub cast is pre-seeded