@maka/maka-cli 5.148.0 → 5.149.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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@maka/maka-cli",
3
- "version": "5.148.0",
3
+ "version": "5.149.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.",
@@ -38,10 +38,11 @@ export class BacklogCommand extends Command {
38
38
  static verb = "backlog";
39
39
  // Writes to the player OWN board over their auth token -- never an NPC.
40
40
  static humanOnly = true;
41
- static description = 'File a play-tester item that somebody acts on -- it goes to maka-cli.com, keeps a link to this session, and comes back checked against the rulebooks. "backlog <what you noticed>" files one; "backlog list [status]" reads the board. For private scribbles, use "note".';
41
+ static description = 'File a play-tester item that somebody acts on -- it goes to maka-cli.com, keeps a link to this session, and comes back checked against the rulebooks. "backlog <what you noticed>" files one; "backlog list [status]" reads the board; "backlog web" opens the live board in your browser. For private scribbles, use "note".';
42
42
  static subcommands = [
43
43
  { usage: 'backlog <text>', short: 'File an item against this session.' },
44
44
  { usage: 'backlog list', short: 'The whole board, what needs you last.' },
45
+ { usage: 'backlog web', short: 'Open the live backlog board in your browser.' },
45
46
  { usage: 'backlog <n>', short: 'Read board item n in full.' },
46
47
  { usage: 'backlog repro <n>', short: 'Play the repro bench for board item n.' },
47
48
  { usage: 'backlog close <n> [why]', short: 'Close item n outright -- filed in error, duplicate, no longer real.' },
@@ -71,6 +72,12 @@ export class BacklogCommand extends Command {
71
72
  if (args.length === 0 || sub === 'list') {
72
73
  return this.list(args[1]);
73
74
  }
75
+ // Claimed here, same reason "accept"/"reject"/"repro"/"close" are:
76
+ // every unclaimed word past this point is report text, and "backlog
77
+ // web" must open the board, not file an item whose text is "web".
78
+ if (sub === 'web') {
79
+ return this.webBoard();
80
+ }
74
81
  // A BARE NUMBER READS THAT ROW OF THE BOARD, and it has to be caught
75
82
  // here for the same reason `list` and `review` are: everything that
76
83
  // reaches the bottom of this method FILES AN ITEM. Without this,
@@ -118,6 +125,23 @@ export class BacklogCommand extends Command {
118
125
  }
119
126
  return this.file(args.join(' '));
120
127
  }
128
+ /**
129
+ * "backlog web" (user request, 2026-09-10): the same /cli-login
130
+ * handoff as "sheet web" (sheet.ts), landing on the shared board --
131
+ * /backlog, already on the NEXT_ALLOWLIST. The token is guaranteed
132
+ * present here: execute() already refused above if authToken() was
133
+ * empty, before any subcommand (this one included) could be reached.
134
+ */
135
+ async webBoard() {
136
+ const { buildBacklogBoardUrl } = await import('../utilities/web-character-generator.js');
137
+ const url = buildBacklogBoardUrl(authToken());
138
+ const { openBrowser } = await import('../../../../tools/browser/open-browser.js');
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');
144
+ }
121
145
  async file(text) {
122
146
  const game = this.game;
123
147
  // LAZY, and not for speed: shared-run.ts pulls in tools/version/
@@ -82,6 +82,18 @@ export function buildCharacterSheetUrl(resumeToken, slug) {
82
82
  const next = `${CHARACTERS_PAGE}/${encodeURIComponent(slug)}`;
83
83
  return `${cliLoginUrl()}?t=${Date.now()}#token=${encodeURIComponent(resumeToken)}&next=${next}`;
84
84
  }
85
+ const BACKLOG_PAGE = '/backlog';
86
+ /**
87
+ * "backlog web" (user request, 2026-09-10): the same /cli-login handoff
88
+ * as the live sheet, landing on the shared backlog board -- /backlog,
89
+ * already on cli-login-next.ts's NEXT_ALLOWLIST as a bare path. Unlike
90
+ * buildCharacterSheetUrl/buildDossierUrl there is no per-item deep link
91
+ * to validate here: the board itself is the destination, not a row on
92
+ * it.
93
+ */
94
+ export function buildBacklogBoardUrl(resumeToken) {
95
+ return `${cliLoginUrl()}?t=${Date.now()}#token=${encodeURIComponent(resumeToken)}&next=${BACKLOG_PAGE}`;
96
+ }
85
97
  /**
86
98
  * WHAT THE CLI SAYS ON ITS WAY OUT of the chargen handoff. Extracted
87
99
  * from the command handler so the two things that matter about it are
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@maka/maka-cli",
3
- "version": "5.148.0",
3
+ "version": "5.149.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.",