@maka/maka-cli 5.59.2 → 5.60.1

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 (21) hide show
  1. package/bundle/typescript/package.json +1 -1
  2. package/bundle/typescript/src/commands/game/sideQuest/commands/backlog.d.ts +3 -2
  3. package/bundle/typescript/src/commands/game/sideQuest/commands/backlog.js +13 -6
  4. package/bundle/typescript/src/commands/game/sideQuest/commands/backlog.js.map +1 -1
  5. package/bundle/typescript/src/commands/game/sideQuest/commands/roles.d.ts +33 -0
  6. package/bundle/typescript/src/commands/game/sideQuest/commands/roles.js +93 -0
  7. package/bundle/typescript/src/commands/game/sideQuest/commands/roles.js.map +1 -0
  8. package/bundle/typescript/src/commands/game/sideQuest/game.d.ts +1 -0
  9. package/bundle/typescript/src/commands/game/sideQuest/game.js +4 -2
  10. package/bundle/typescript/src/commands/game/sideQuest/game.js.map +1 -1
  11. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-dump.js +5 -4
  12. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-dump.js.map +1 -1
  13. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog.d.ts +19 -1
  14. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog.js +46 -0
  15. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog.js.map +1 -1
  16. package/bundle/typescript/src/commands/game/sideQuest/utilities/shared-run.d.ts +5 -0
  17. package/bundle/typescript/src/commands/game/sideQuest/utilities/shared-run.js +5 -0
  18. package/bundle/typescript/src/commands/game/sideQuest/utilities/shared-run.js.map +1 -1
  19. package/bundle/typescript/src/tools/sdk-loader/relocate.js +18 -3
  20. package/bundle/typescript/src/tools/sdk-loader/relocate.js.map +1 -1
  21. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@maka/maka-cli",
3
- "version": "5.59.2",
3
+ "version": "5.60.1",
4
4
  "type": "module",
5
5
  "summary": "A command line tool for scaffolding Meteor 2.x applications using either React.",
6
6
  "description": "A command line tool for scaffolding Meteor 2.x applications using React.",
@@ -32,8 +32,9 @@ export declare class BacklogCommand extends Command implements ICommand {
32
32
  /** One item: what it says, where it stands, and what the books said. */
33
33
  private row;
34
34
  private statusMark;
35
- /** "contradicts" is the GOOD one -- it means canon disagrees with what
36
- * the game does, which usually means the reporter was right. */
35
+ /** The verdict is about the GAME, not the rulebooks (reframed
36
+ * 2026-08-27). Asking canon whether a stale map mattered graded every
37
+ * real defect out of scope and cited a zoo at it. */
37
38
  private verdictTag;
38
39
  private explain;
39
40
  }
@@ -62,6 +62,11 @@ export class BacklogCommand extends Command {
62
62
  // same id the uploaded logs are keyed by, so an item and its
63
63
  // transcript can be read side by side.
64
64
  sessionId: game?.sessionDir ? game.sessionDir.split(/[\\/]/).pop() : undefined,
65
+ // On a shared run each player stamps their OWN launcher session --
66
+ // different timestamps on different machines -- so without this
67
+ // two reports about the same moment cannot be tied together. Seen
68
+ // for real: one run produced items stamped 00-18-43 and 00-18-15.
69
+ sharedRunId: game?.remoteSession?.id,
65
70
  cliVersion: cliVersion(),
66
71
  engineVersion: engineVersion(),
67
72
  platform: process.platform,
@@ -126,14 +131,16 @@ export class BacklogCommand extends Command {
126
131
  default: return '{yellow-fg}[open]{/yellow-fg}';
127
132
  }
128
133
  }
129
- /** "contradicts" is the GOOD one -- it means canon disagrees with what
130
- * the game does, which usually means the reporter was right. */
134
+ /** The verdict is about the GAME, not the rulebooks (reframed
135
+ * 2026-08-27). Asking canon whether a stale map mattered graded every
136
+ * real defect out of scope and cited a zoo at it. */
131
137
  verdictTag(verdict) {
132
138
  switch (verdict) {
133
- case 'contradicts': return `{red-fg}canon disagrees:{/red-fg}`;
134
- case 'supported': return `{green-fg}canon agrees:{/green-fg}`;
135
- case 'out-of-scope': return `{cyan-fg}not a rules matter:{/cyan-fg}`;
136
- default: return `{cyan-fg}books are unclear:{/cyan-fg}`;
139
+ case 'canon-violation': return `{red-fg}breaks the rules:{/red-fg}`;
140
+ case 'bug': return `{red-fg}bug:{/red-fg}`;
141
+ case 'enhancement': return `{yellow-fg}wants building:{/yellow-fg}`;
142
+ case 'works-as-intended': return `{green-fg}working as meant:{/green-fg}`;
143
+ default: return `{cyan-fg}needs detail:{/cyan-fg}`;
137
144
  }
138
145
  }
139
146
  explain(outcome) {
@@ -1 +1 @@
1
- {"version":3,"file":"backlog.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/backlog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"backlog.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/backlog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { Command, ICommand } from './command.js';
2
+ /**
3
+ * ROLES -- who gets to do what, for the operator.
4
+ *
5
+ * Purely out-of-fiction, like `note` and `backlog`: nothing in the
6
+ * Sixth World knows what a play-tester is. It exists because the
7
+ * play-tester role could otherwise only be handed out by editing
8
+ * GAME_ADMIN_EMAILS-style config and redeploying the site, which is a
9
+ * heavy way to say "yes, you can file bugs" -- and impossible for an
10
+ * account that registered after the last restart.
11
+ *
12
+ * GATED SERVER-SIDE, and only there. The CLI has no idea what roles an
13
+ * account holds and must not pretend to: it asks, and turns a 403 into
14
+ * a sentence. A client that decided its own permissions would be
15
+ * deciding nothing at all.
16
+ *
17
+ * `game-admin` is not grantable through this command. Granting
18
+ * play-tester widens who can file bugs; granting admin widens who can
19
+ * grant. The server owns that line (GRANTABLE_ROLES) -- this command
20
+ * just relays the refusal, so the rule lives in one place.
21
+ */
22
+ export declare class RolesCommand extends Command implements ICommand {
23
+ protected static verb: string;
24
+ protected static description: string;
25
+ protected static subcommands: {
26
+ usage: string;
27
+ short: string;
28
+ }[];
29
+ execute(args?: string[]): Promise<string>;
30
+ private change;
31
+ private list;
32
+ private explain;
33
+ }
@@ -0,0 +1,93 @@
1
+ import { Command } from './command.js';
2
+ import { hint } from '../utilities/hints.js';
3
+ import { authToken } from '../utilities/cloud-saves.js';
4
+ import { fetchRoles, setRole } from '../utilities/backlog.js';
5
+ /**
6
+ * ROLES -- who gets to do what, for the operator.
7
+ *
8
+ * Purely out-of-fiction, like `note` and `backlog`: nothing in the
9
+ * Sixth World knows what a play-tester is. It exists because the
10
+ * play-tester role could otherwise only be handed out by editing
11
+ * GAME_ADMIN_EMAILS-style config and redeploying the site, which is a
12
+ * heavy way to say "yes, you can file bugs" -- and impossible for an
13
+ * account that registered after the last restart.
14
+ *
15
+ * GATED SERVER-SIDE, and only there. The CLI has no idea what roles an
16
+ * account holds and must not pretend to: it asks, and turns a 403 into
17
+ * a sentence. A client that decided its own permissions would be
18
+ * deciding nothing at all.
19
+ *
20
+ * `game-admin` is not grantable through this command. Granting
21
+ * play-tester widens who can file bugs; granting admin widens who can
22
+ * grant. The server owns that line (GRANTABLE_ROLES) -- this command
23
+ * just relays the refusal, so the rule lives in one place.
24
+ */
25
+ export class RolesCommand extends Command {
26
+ static verb = 'roles';
27
+ static description = 'Operator tool: who holds which role on maka-cli.com, and hand them out. "roles" lists, "roles grant <email>" makes someone a play-tester, "roles revoke <email>" takes it back. Admin only.';
28
+ static subcommands = [
29
+ { usage: 'roles', short: 'Who holds what.' },
30
+ { usage: 'roles grant <email> [role]', short: 'Give someone a role (default play-tester).' },
31
+ { usage: 'roles revoke <email> [role]', short: 'Take one back.' },
32
+ ];
33
+ async execute(args = []) {
34
+ if (this.game?.isAnonymous) {
35
+ return `You're running anonymous -- this runner has no account, so there's nobody to hand a role to.`;
36
+ }
37
+ if (!authToken()) {
38
+ return `Roles live on your maka-cli.com login -- \`maka login\` first.`;
39
+ }
40
+ const sub = (args[0] ?? '').toLowerCase();
41
+ if (sub === 'grant' || sub === 'revoke') {
42
+ return this.change(sub, args[1], args[2]);
43
+ }
44
+ if (args.length > 0 && sub !== 'list') {
45
+ return `"roles" lists; "roles grant <email>" and "roles revoke <email>" change things.`;
46
+ }
47
+ return this.list();
48
+ }
49
+ async change(action, email, role) {
50
+ if (!email) {
51
+ return `Which account? "roles ${action} <email>" -- an email address, not a street name.`;
52
+ }
53
+ const { outcome, message } = await setRole(action, email, role ?? 'play-tester');
54
+ if (outcome === 'ok') {
55
+ const what = role ?? 'play-tester';
56
+ return action === 'grant'
57
+ ? `${email} is a ${what} now.${hint(` They'll need to restart the game to pick it up.`)}`
58
+ : `${email} is no longer a ${what}.`;
59
+ }
60
+ // The server's own reason wins when it has one -- that's how "game-admin
61
+ // isn't grantable from in-game" reaches the player rather than a
62
+ // generic refusal that teaches nothing.
63
+ if (outcome === 'rejected' && message)
64
+ return message;
65
+ return this.explain(outcome);
66
+ }
67
+ async list() {
68
+ const { outcome, grantable, holders } = await fetchRoles();
69
+ if (outcome !== 'ok' || !holders)
70
+ return this.explain(outcome);
71
+ if (holders.length === 0)
72
+ return `Nobody holds a role yet.`;
73
+ const lines = [`=== ROLES === (via maka-cli.com)`];
74
+ const width = Math.max(...holders.map(h => (h.email ?? '').length), 8);
75
+ for (const h of holders) {
76
+ lines.push(` ${(h.email ?? '?').padEnd(width)} ${h.roles.join(', ')}`);
77
+ }
78
+ const footer = hint(`"roles grant <email>" hands out: ${(grantable ?? []).join(', ') || 'nothing'}. game-admin isn't grantable here -- it lives in the server's config.`);
79
+ if (footer)
80
+ lines.push('', footer);
81
+ return lines.join('\n');
82
+ }
83
+ explain(outcome) {
84
+ switch (outcome) {
85
+ case 'no-login': return `Roles live on your maka-cli.com login -- \`maka login\` first.`;
86
+ case 'expired': return `Your login's expired -- \`maka login\` again.`;
87
+ case 'forbidden': return `Handing out roles is an admin's job, and this account isn't one.`;
88
+ case 'rejected': return `The server wouldn't take that one.`;
89
+ default: return `The grid isn't answering -- roles are offline right now.`;
90
+ }
91
+ }
92
+ }
93
+ //# sourceMappingURL=roles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roles.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/roles.ts"],"names":[],"mappings":"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"}
@@ -449,6 +449,7 @@ export default class Game {
449
449
  */
450
450
  remoteSession?: {
451
451
  command(input: string): Promise<string | null>;
452
+ readonly id?: string;
452
453
  };
453
454
  /**
454
455
  * THE STREET TRANSPORT (M4.5.1): how this engine reaches real players
@@ -27,6 +27,7 @@ import { TakeCommand } from './commands/take.js';
27
27
  import { LootCommand } from './commands/loot.js';
28
28
  import { NoteCommand } from './commands/note.js';
29
29
  import { BacklogCommand } from './commands/backlog.js';
30
+ import { RolesCommand } from './commands/roles.js';
30
31
  import { SinCommand } from './commands/sin.js';
31
32
  import { GoCommand } from './commands/go.js';
32
33
  import { UseCommand } from './commands/use.js';
@@ -197,7 +198,7 @@ export default class Game {
197
198
  /** Verbs that must run on the player's OWN machine even mid-shared-run:
198
199
  * they write local files or read local state, and mean nothing to the
199
200
  * table. See the guard in handleInput. */
200
- static LOCAL_ONLY_VERBS = new Set(['note', 'backlog']);
201
+ static LOCAL_ONLY_VERBS = new Set(['note', 'backlog', 'roles']);
201
202
  /** An account-less runner: nothing about them leaves this machine.
202
203
  * Read by anything that would otherwise push to maka-cli.com -- the
203
204
  * backlog command among them. */
@@ -1643,6 +1644,7 @@ ${client.name} won't be remembering anything. Dead Johnsons pay nothing -- and t
1643
1644
  CommandFactory.registerCommand('loot', LootCommand);
1644
1645
  CommandFactory.registerCommand('note', NoteCommand);
1645
1646
  CommandFactory.registerCommand('backlog', BacklogCommand);
1647
+ CommandFactory.registerCommand('roles', RolesCommand);
1646
1648
  CommandFactory.registerCommand('sin', SinCommand);
1647
1649
  CommandFactory.registerCommand('sins', SinCommand);
1648
1650
  CommandFactory.registerCommand('papers', SinCommand);
@@ -3868,7 +3870,7 @@ ${client.name} won't be remembering anything. Dead Johnsons pay nothing -- and t
3868
3870
  { title: 'street', entries: [['browse', 'buy'], ['sell'], ['catalog'], ['source', 'procure'], ['work', 'gig'], ['jobs'], ['perform'], ['palm'], ['docwagon'], ['treat'], ['eat'], ['drink'], ['lifestyle'], ['pay']] },
3869
3871
  { title: 'barriers', entries: [['solve'], ['pick'], ['breach'], ['dispel', 'dispell'], ['bluff'], ['unlock'], ['lock']] },
3870
3872
  { title: 'character', entries: [['sheet', 'stats'], ['advance'], ['qualities', 'quality'], ['sin', 'sins', 'papers'], ['initiate', 'submerge'], ['install', 'chrome']] },
3871
- { title: 'session', entries: [['help'], ['hints'], ['note'], ['backlog'], ['clear'], ['quit', 'exit']] },
3873
+ { title: 'session', entries: [['help'], ['hints'], ['note'], ['backlog'], ['roles'], ['clear'], ['quit', 'exit']] },
3872
3874
  ];
3873
3875
  /** Registered but deliberately UNLISTED: reachable as subcommands or
3874
3876
  * muscle-memory ("players" folded back under crew after playtesting