@maka/maka-cli 5.157.0 → 5.159.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/backlog.js +2 -5
- package/bundle/typescript/src/commands/game/sideQuest/models/npc.js +12 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/web-character-generator.js +17 -0
- package/bundle/typescript/src/commands/game/sideQuest-backlog.sub.cmd.js +24 -1
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@maka/maka-cli",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.159.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"summary": "A command line tool for scaffolding Meteor 3.x applications using either React.",
|
|
6
6
|
"description": "A command line tool for scaffolding Meteor 3.x applications using React.",
|
|
@@ -133,14 +133,11 @@ export class BacklogCommand extends Command {
|
|
|
133
133
|
* empty, before any subcommand (this one included) could be reached.
|
|
134
134
|
*/
|
|
135
135
|
async webBoard() {
|
|
136
|
-
const { buildBacklogBoardUrl } = await import('../utilities/web-character-generator.js');
|
|
136
|
+
const { buildBacklogBoardUrl, backlogBoardHandoff } = await import('../utilities/web-character-generator.js');
|
|
137
137
|
const url = buildBacklogBoardUrl(authToken());
|
|
138
138
|
const { openBrowser } = await import('../../../../tools/browser/open-browser.js');
|
|
139
139
|
openBrowser(url);
|
|
140
|
-
return
|
|
141
|
-
`Your backlog board is opening in the browser -- the game keeps running right here.`,
|
|
142
|
-
` ${url}`,
|
|
143
|
-
].join('\n');
|
|
140
|
+
return backlogBoardHandoff(url, { gameRunning: true }).join('\n');
|
|
144
141
|
}
|
|
145
142
|
async file(text) {
|
|
146
143
|
const game = this.game;
|
|
@@ -1669,6 +1669,17 @@ ${worldEventsSummary}
|
|
|
1669
1669
|
const heatSummary = heat
|
|
1670
1670
|
? `The district's current HEAT on this run is ${heat}. If you would naturally reassure them that things are quiet, clean, or under control, that claim has to be TRUE against this -- never tell them the coast is clear, that nobody noticed, or that things went quiet if heat says otherwise. Speak honestly about how hot it actually is instead.`
|
|
1671
1671
|
: '';
|
|
1672
|
+
// A JOB ITEM IN THE WRONG HANDS (5Lq8wNX9szaA45u6b): the runner
|
|
1673
|
+
// handed the client the crate meant for Doc Wrench by mistake, and
|
|
1674
|
+
// she held it through three polite asks, yielding only to a threat.
|
|
1675
|
+
// Same shape as payoutSummary -- nothing told the model whose
|
|
1676
|
+
// delivery the thing in its pocket actually was, so "carry it to
|
|
1677
|
+
// the Stitch yourself" came out as a refusal instead of a handover.
|
|
1678
|
+
const wc = this._scene?.getWinCondition?.();
|
|
1679
|
+
const carriesPrize = !!wc?.item && this.inventory.getAllItems().some(i => i.name === wc.item);
|
|
1680
|
+
const jobItemSummary = carriesPrize && wc?.toNpc && wc.toNpc !== this.name
|
|
1681
|
+
? `You are currently HOLDING ${wc.item}, which the job needs delivered to ${wc.toNpc} -- not to you. It is the runner's cargo, not yours: if they ask for it back, hand it over in the SAME response with "[COMMAND] give ${wc.item} to <their name>" -- never make them argue or threaten for it, and never keep it as leverage.`
|
|
1682
|
+
: '';
|
|
1672
1683
|
// If nothing else has happened to/around this NPC yet this scene, this
|
|
1673
1684
|
// is the first time anyone's reached out -- nudge toward volunteering
|
|
1674
1685
|
// the job rather than waiting to be asked, which real playtesting
|
|
@@ -2113,6 +2124,7 @@ Your objective is to drive the story line.`}
|
|
|
2113
2124
|
${dialogueSummary}
|
|
2114
2125
|
${eph ? '' : payoutSummary}
|
|
2115
2126
|
${eph ? '' : heatSummary}
|
|
2127
|
+
${eph ? '' : jobItemSummary}
|
|
2116
2128
|
|
|
2117
2129
|
${roomDesc}${spotBlock}${combatSpatialBlock}
|
|
2118
2130
|
${formattedExitsStr}
|
|
@@ -94,6 +94,23 @@ const BACKLOG_PAGE = '/backlog';
|
|
|
94
94
|
export function buildBacklogBoardUrl(resumeToken) {
|
|
95
95
|
return `${cliLoginUrl()}?t=${Date.now()}#token=${encodeURIComponent(resumeToken)}&next=${BACKLOG_PAGE}`;
|
|
96
96
|
}
|
|
97
|
+
/**
|
|
98
|
+
* WHAT IS SAID WHEN THE BOARD OPENS -- one wording for both doors into
|
|
99
|
+
* it: the in-game "backlog web" (the game keeps running) and the
|
|
100
|
+
* launcher's `maka play:backlog --web` (user request, 2026-09-10: "can
|
|
101
|
+
* I get a maka play:backlog --web to view the backlog in the browser?").
|
|
102
|
+
* The URL is ALWAYS in the lines, for the same reason
|
|
103
|
+
* characterForgeHandoff spells out: openBrowser is fire-and-forget, so
|
|
104
|
+
* the printed URL is the only thing that works headless or over SSH.
|
|
105
|
+
*/
|
|
106
|
+
export function backlogBoardHandoff(url, opts) {
|
|
107
|
+
return [
|
|
108
|
+
opts.gameRunning
|
|
109
|
+
? `Your backlog board is opening in the browser -- the game keeps running right here.`
|
|
110
|
+
: `Your backlog board is opening in the browser.`,
|
|
111
|
+
` ${url}`,
|
|
112
|
+
];
|
|
113
|
+
}
|
|
97
114
|
/**
|
|
98
115
|
* WHAT THE CLI SAYS ON ITS WAY OUT of the chargen handoff. Extracted
|
|
99
116
|
* from the command handler so the two things that matter about it are
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import ShadowrunCommand, { ShadowrunCompat } from './sideQuest.sub.cmd.js';
|
|
2
2
|
import { Command } from '../../command.js';
|
|
3
|
+
import { Log } from '../../tools/log/log.class.js';
|
|
3
4
|
import { registerBacklogMcp } from './sideQuest-backlog-mcp.sub.cmd.js';
|
|
4
5
|
// Registered under BOTH the new spelling (play:backlog) and the compat
|
|
5
6
|
// sub (play:shadowrun:backlog) from ONE definition -- two commands, one
|
|
6
7
|
// options object, one handler, so the pair cannot drift.
|
|
7
8
|
const registerBacklog = (parent) => Command.create({
|
|
8
9
|
name: 'backlog',
|
|
9
|
-
usage: 'maka play:backlog [<item id>]',
|
|
10
|
+
usage: 'maka play:backlog [<item id>] [--web]',
|
|
10
11
|
shortDesc: 'Read the play-tester board without starting a game.',
|
|
11
12
|
description: `The play-tester backlog on maka-cli.com: what has been reported, what
|
|
12
13
|
the rulebooks made of it, what closed it, and which items ship a repro
|
|
@@ -21,9 +22,11 @@ const registerBacklog = (parent) => Command.create({
|
|
|
21
22
|
{ name: 'all', boolFlag: true, description: 'Include closed items, which are hidden by default.' },
|
|
22
23
|
{ name: 'close', boolFlag: true, description: 'With an item id: close it outright -- filed in error, duplicate, no longer real. Remaining words are the reason.' },
|
|
23
24
|
{ name: 'detach', description: 'With an item id: take a wrongly attached commit back off it (a full sha, or several separated by commas). Admin only. Remaining words say why.' },
|
|
25
|
+
{ name: 'web', boolFlag: true, description: 'Open the live board in your browser (the same handoff as "backlog web" in-game) instead of printing it here.' },
|
|
24
26
|
],
|
|
25
27
|
examples: [
|
|
26
28
|
'maka play:backlog',
|
|
29
|
+
'maka play:backlog --web',
|
|
27
30
|
'maka play:backlog --filter in-review',
|
|
28
31
|
'maka play:backlog --commit 359ad1fe',
|
|
29
32
|
'maka play:backlog b9YeNqTNBJuk9dbrk',
|
|
@@ -31,6 +34,26 @@ const registerBacklog = (parent) => Command.create({
|
|
|
31
34
|
'maka play:backlog b9YeNqTNBJuk9dbrk --detach 7ed04359 attached to the wrong row',
|
|
32
35
|
],
|
|
33
36
|
}, async function (args, opts) {
|
|
37
|
+
// `--web` (user request, 2026-09-10): the browser board, from the
|
|
38
|
+
// launcher. Same /cli-login handoff the in-game "backlog web" uses --
|
|
39
|
+
// one URL builder, one wording -- and nothing else below runs: opening
|
|
40
|
+
// a page is not a dump with extra steps. Checked FIRST so it never
|
|
41
|
+
// needs the board fetched to say where the board is.
|
|
42
|
+
if (opts.web === true) {
|
|
43
|
+
const { authToken } = await import('./sideQuest/utilities/cloud-saves.js');
|
|
44
|
+
const token = authToken();
|
|
45
|
+
if (!token) {
|
|
46
|
+
Log.error('The backlog runs on your maka-cli.com login -- run `maka login` first.');
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const { buildBacklogBoardUrl, backlogBoardHandoff } = await import('./sideQuest/utilities/web-character-generator.js');
|
|
50
|
+
const url = buildBacklogBoardUrl(token);
|
|
51
|
+
const { openBrowser } = await import('../../tools/browser/open-browser.js');
|
|
52
|
+
openBrowser(url);
|
|
53
|
+
for (const line of backlogBoardHandoff(url, { gameRunning: false }))
|
|
54
|
+
Log.info(line);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
34
57
|
const { dumpBacklog } = await import('./sideQuest/utilities/backlog-dump.js');
|
|
35
58
|
// `--close` STILL ARRIVES AS A STRING when a reason follows it, even
|
|
36
59
|
// here: minimist's boolean set is global to the CLI and teaching it
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@maka/maka-cli",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.159.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"summary": "A command line tool for scaffolding Meteor 3.x applications using either React.",
|
|
6
6
|
"description": "A command line tool for scaffolding Meteor 3.x applications using React.",
|