@bitmagic/cli 0.1.78-dev.0 → 0.1.79-dev.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.
Files changed (39) hide show
  1. package/README.md +48 -2
  2. package/assets/skills/building-ads/SKILL.md +5 -1
  3. package/assets/skills/joining-the-game-exchange/SKILL.md +134 -0
  4. package/dist/cli.d.ts +1 -0
  5. package/dist/cli.js +2 -0
  6. package/dist/cli.js.map +1 -1
  7. package/dist/commands/exchange.d.ts +48 -0
  8. package/dist/commands/exchange.js +227 -0
  9. package/dist/commands/exchange.js.map +1 -0
  10. package/dist/commands/publish.js +15 -0
  11. package/dist/commands/publish.js.map +1 -1
  12. package/dist/exchange/client.d.ts +25 -0
  13. package/dist/exchange/client.js +208 -0
  14. package/dist/exchange/client.js.map +1 -0
  15. package/dist/exchange/declaration.d.ts +29 -0
  16. package/dist/exchange/declaration.js +124 -0
  17. package/dist/exchange/declaration.js.map +1 -0
  18. package/dist/exchange/report.d.ts +23 -0
  19. package/dist/exchange/report.js +174 -0
  20. package/dist/exchange/report.js.map +1 -0
  21. package/dist/publish/client.d.ts +25 -0
  22. package/dist/publish/client.js +0 -10
  23. package/dist/publish/client.js.map +1 -1
  24. package/dist/publish/game-exchange.d.ts +43 -0
  25. package/dist/publish/game-exchange.js +139 -0
  26. package/dist/publish/game-exchange.js.map +1 -0
  27. package/dist/scaffold/blender-level-skill-files.js +1 -1
  28. package/dist/scaffold/claude-settings.js +3 -0
  29. package/dist/scaffold/claude-settings.js.map +1 -1
  30. package/dist/scaffold/exchange-skill-files.d.ts +2 -0
  31. package/dist/scaffold/exchange-skill-files.js +7 -0
  32. package/dist/scaffold/exchange-skill-files.js.map +1 -0
  33. package/dist/scaffold/project-files.js +2 -1
  34. package/dist/scaffold/project-files.js.map +1 -1
  35. package/dist/scaffold/project.js +2 -0
  36. package/dist/scaffold/project.js.map +1 -1
  37. package/dist/scaffold/skill-files.js +4 -3
  38. package/dist/scaffold/skill-files.js.map +1 -1
  39. package/package.json +4 -4
@@ -0,0 +1,174 @@
1
+ import { exchangeCredits } from '../publish/game-exchange.js';
2
+ const PLACEMENT_WORDS = {
3
+ end: 'end screen',
4
+ pause: 'pause screen',
5
+ };
6
+ const SOURCE_WORDS = {
7
+ publish: 'by a publish',
8
+ cli: 'by `bitmagic exchange`',
9
+ admin: 'by the Bitmagic team',
10
+ };
11
+ /**
12
+ * Why an impression earned nothing (the server's `uncredited_reason`): the cap it ran into, or the
13
+ * check it failed. An impression past the per-network cap is not stored at all, so it never arrives.
14
+ */
15
+ const UNCREDITED_WORDS = {
16
+ v: 'the player reached their daily limit',
17
+ vg: 'the player reached their daily limit in this game',
18
+ va: 'the player had already seen that game today',
19
+ pub: 'this game reached its daily limit',
20
+ cr: 'your games reached their daily earning limit',
21
+ publisher: 'this game could not show tiles at that moment (switched off, blocked, or not public)',
22
+ same_creator: 'the tile was for another game of yours',
23
+ };
24
+ const VIDEO_WORDS = {
25
+ ready: 'ready',
26
+ none: 'none: the game page has no trailer to cut one from (`bitmagic trailer`), so the tile shows the banner',
27
+ failed: 'could not be built from the trailer, so the tile shows the banner; a new trailer retries it',
28
+ pending: 'being built',
29
+ };
30
+ function describeRoles(roles) {
31
+ if (!roles.shows && !roles.listed)
32
+ return 'switched off';
33
+ const parts = [];
34
+ if (roles.shows) {
35
+ const where = roles.placements.map((placement) => PLACEMENT_WORDS[placement]).join(' and ');
36
+ parts.push(`shows tiles${where ? ` on the ${where}` : ''}${roles.houseOnly ? " (Bitmagic's picks only)" : ''}`);
37
+ }
38
+ else {
39
+ parts.push('shows no tiles');
40
+ }
41
+ parts.push(roles.listed ? 'listed in other games' : 'not listed in other games');
42
+ return parts.join(', ');
43
+ }
44
+ const declaredRoles = (declaration) => ({
45
+ shows: declaration.enabled,
46
+ listed: declaration.listed,
47
+ houseOnly: declaration.houseOnly,
48
+ placements: declaration.placements,
49
+ });
50
+ function sameList(a, b) {
51
+ return a.length === b.length && a.every((item) => b.includes(item));
52
+ }
53
+ /**
54
+ * Whether what the project declares is what the server has. A declaration that switches tiles off
55
+ * is compared on the two switches alone: its placements no longer mean anything.
56
+ */
57
+ export function declarationMatchesEnrollment(declaration, enrollment) {
58
+ if (enrollment === null)
59
+ return !declaration.enabled && !declaration.listed;
60
+ if (declaration.enabled !== enrollment.shows || declaration.listed !== enrollment.listed)
61
+ return false;
62
+ if (!declaration.enabled)
63
+ return true;
64
+ return declaration.houseOnly === enrollment.houseOnly
65
+ && sameList(declaration.placements, enrollment.placements)
66
+ && sameList(declaration.formats, enrollment.formats);
67
+ }
68
+ /** `2026-10-02 14:03 UTC`, or nothing for a time the server did not send. */
69
+ function when(ms) {
70
+ if (ms <= 0)
71
+ return '';
72
+ const iso = new Date(ms).toISOString();
73
+ return ` on ${iso.slice(0, 10)} ${iso.slice(11, 16)} UTC`;
74
+ }
75
+ function projectLine(local, enrollment, engineSupportsExchange) {
76
+ const live = enrollment !== null && (enrollment.shows || enrollment.listed);
77
+ if (local.kind === 'unreadable')
78
+ return 'cannot be read (src/work/world.json)';
79
+ if (local.kind === 'rejected')
80
+ return `not usable, so publishing leaves the server as it is. ${local.note}`;
81
+ if (local.kind === 'undeclared') {
82
+ if (!live)
83
+ return 'declares nothing (`bitmagic exchange enable` declares it)';
84
+ // A publish that declares nothing only switches off what a publish or the CLI switched on.
85
+ return enrollment.source === 'admin'
86
+ ? 'declares nothing. This differs from the server: the enrolment was set by the Bitmagic team, so a publish leaves it alone (`bitmagic exchange disable` switches it off)'
87
+ : 'declares nothing. This differs from the server: the next publish switches it off there (`bitmagic exchange enable` declares it)';
88
+ }
89
+ const said = describeRoles(declaredRoles(local.value));
90
+ if (declarationMatchesEnrollment(local.value, enrollment))
91
+ return `${said}. The same as the server`;
92
+ // Publish skips a declaration that switches tiles on when the vendored engine cannot show one.
93
+ return local.value.enabled && !engineSupportsExchange
94
+ ? `${said}. This differs from the server, and this project's engine predates the Game Exchange, so a publish leaves the server as it is: run \`bitmagic upgrade\` first, then \`bitmagic verify\` and \`bitmagic publish\``
95
+ : `${said}. This differs from the server: republish to apply (\`bitmagic verify\`, then \`bitmagic publish\`)`;
96
+ }
97
+ function reviewLine(enrollment) {
98
+ if (enrollment.blocked) {
99
+ return `blocked by the Bitmagic team${enrollment.blockedNote ? `: ${enrollment.blockedNote}` : ''}. It shows no tiles and is not listed`;
100
+ }
101
+ if (enrollment.suitability === 'restricted')
102
+ return 'reviewed: restricted, so it is not listed in other games (it can still show tiles)';
103
+ if (enrollment.suitability === 'all_audiences')
104
+ return 'reviewed: fine for all audiences';
105
+ return 'not reviewed yet';
106
+ }
107
+ function percent(part, whole) {
108
+ return whole > 0 ? ` (${Math.round((part / whole) * 100)}%)` : '';
109
+ }
110
+ function row(label, value) {
111
+ return ` ${label.padEnd(15)}${value}`;
112
+ }
113
+ /**
114
+ * The whole report. `local` is what `readGameExchangeDeclaration` found in the project, and
115
+ * `engineSupportsExchange` whether the project's vendored engine has the exchange module.
116
+ */
117
+ export function formatExchangeReport(status, local, engineSupportsExchange = true) {
118
+ const { enrollment, wallet, rates, stats, creative, eligibility } = status;
119
+ const lines = ['Game Exchange'];
120
+ lines.push(row('Network', status.available
121
+ ? 'on'
122
+ : 'off in this environment: no tiles are served, and nothing is earned or spent'));
123
+ lines.push(row('On the server', enrollment === null
124
+ ? 'not enrolled'
125
+ : `${describeRoles(enrollment)} · set ${SOURCE_WORDS[enrollment.source]}${when(enrollment.updatedAt)}`));
126
+ lines.push(row('In the project', projectLine(local, enrollment, engineSupportsExchange)));
127
+ if (enrollment !== null)
128
+ lines.push(row('Review', reviewLine(enrollment)));
129
+ lines.push('');
130
+ lines.push(wallet.games > 1
131
+ ? `Exchange credits (one balance shared across your ${wallet.games} enrolled games)`
132
+ : 'Exchange credits (one balance for all of your games)');
133
+ lines.push(row('Balance', `${exchangeCredits(wallet.balanceMilli)}${wallet.frozen ? ' · FROZEN by the Bitmagic team: nothing is earned or spent' : ''}`));
134
+ lines.push(row('So far', `earned ${exchangeCredits(wallet.earnedMilli)} · spent ${exchangeCredits(wallet.spentMilli)} · granted ${exchangeCredits(wallet.grantedMilli)}`));
135
+ if (rates.starterGrantMilli > 0) {
136
+ lines.push(row('Starter grant', rates.starterGranted
137
+ ? `${exchangeCredits(rates.starterGrantMilli)}, received`
138
+ : `${exchangeCredits(rates.starterGrantMilli)}, paid once after your games have shown their first tiles`));
139
+ }
140
+ const days = stats.windowDays > 0 ? `last ${stats.windowDays} days` : 'recent';
141
+ const { shown, advertised } = stats;
142
+ lines.push('');
143
+ lines.push(`This game showing tiles (${days})`);
144
+ lines.push(row('Asked for', `${shown.requests} tiles · ${shown.filled} filled${percent(shown.filled, shown.requests)}`));
145
+ lines.push(row('Shown', `${shown.impressions} · ${shown.credited} credited · ${shown.uncredited} not credited`));
146
+ const reasons = Object.entries(stats.uncreditedByReason).filter(([, count]) => count > 0).sort((a, b) => b[1] - a[1]);
147
+ for (const [reason, count] of reasons) {
148
+ lines.push(row('', `${count} not credited: ${UNCREDITED_WORDS[reason] ?? reason}`));
149
+ }
150
+ lines.push(row('Clicks', String(shown.clicks)));
151
+ lines.push(row('Earned', exchangeCredits(shown.earnedMilli)));
152
+ const rank = rates.publisherPercentile === null
153
+ ? 'no ranking yet, so the base rate applies'
154
+ : `this game ranks above ${Math.round(rates.publisherPercentile * 100)}% of the games that show tiles`;
155
+ lines.push(row('Earn rate', `${rates.earnPct}% of what a credited tile costs (base ${rates.earnPctBase}%) · ${rank}`));
156
+ lines.push('');
157
+ lines.push(`This game listed in other games (${days})`);
158
+ lines.push(row('Shown', `${advertised.impressions} · ${advertised.charged} paid for · ${advertised.unfunded} unfunded · ${advertised.house} as a Bitmagic pick (free)`));
159
+ lines.push(row('Clicks', `${advertised.clicks} · ${advertised.visits} arrived · ${advertised.plays} started playing · ${advertised.engaged} stayed`));
160
+ lines.push(row('Spent', `${exchangeCredits(advertised.spentMilli)} (${exchangeCredits(rates.impressionCostMilli)} per tile shown, ${exchangeCredits(rates.clickCostMilli)} per click that arrives)`));
161
+ lines.push(row('Stays listed', `while the balance is at least ${exchangeCredits(rates.minBalanceMilli)}`));
162
+ lines.push('');
163
+ lines.push('The tile other games show for this game (made automatically)');
164
+ lines.push(row('Banner', creative.banner ? 'ready, from the cover' : 'missing: the game has no cover (`bitmagic cover`)'));
165
+ lines.push(row('Video', `${VIDEO_WORDS[creative.video]}${creative.video === 'ready' && creative.videoUrl ? ` · ${creative.videoUrl}` : ''}`));
166
+ lines.push('');
167
+ lines.push('Right now');
168
+ lines.push(row('Can show tiles', eligibility.canShow ? 'yes' : 'no'));
169
+ lines.push(row('Can be listed', eligibility.canBeListed ? 'yes' : 'no'));
170
+ for (const reason of eligibility.reasons)
171
+ lines.push(` - ${reason}`);
172
+ return lines.join('\n');
173
+ }
174
+ //# sourceMappingURL=report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../../src/exchange/report.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,14 @@
1
+ /**
2
+ * The HTTP client for `bitmagic publish`: the two authorizing calls to api-server
3
+ * (`publish/begin`, `publish/complete`), the thumbnail's signed-upload lane
4
+ * (`uploads/signed-url`, the same route `forge/upload-proxy.ts` bridges for the browser and
5
+ * `bitmagic assets add` uploads through), and the raw PUTs against the signed GCS URLs those calls
6
+ * mint — which go through `http/signed-upload.ts`, pinned to this lane's exit code.
7
+ *
8
+ * `publishExitCode` is the one status→exit-code mapping every call above shares, so `publish.ts`
9
+ * never has to duplicate the 401/403/409 distinctions per call site.
10
+ */
11
+ import type { PublishGameExchangeRequest, PublishGameExchangeResult } from '@bitmagic/asset-core/game-exchange';
1
12
  import type { Environment } from '../config/environments.js';
2
13
  export interface ApiDeps {
3
14
  fetch: typeof globalThis.fetch;
@@ -149,6 +160,14 @@ export interface CompletePublishRequest {
149
160
  * server keep or auto-classify, and an older server ignores the unknown key.
150
161
  */
151
162
  categories?: string[];
163
+ /**
164
+ * The project's Game Exchange declaration (`worldProfileData.gameExchange`) — see
165
+ * `publish/game-exchange.ts` for the three messages: the normalised declaration enrols the
166
+ * game, an explicit `null` says the project declares nothing (an enrolment made by a publish or
167
+ * by `bitmagic exchange enable` is switched off), and an absent key keeps what is stored.
168
+ * Forward-compatible like the fields above: an older server ignores the unknown key.
169
+ */
170
+ gameExchange?: PublishGameExchangeRequest;
152
171
  }
153
172
  /** Per-check outcome from the server's source audit. Advisory: none of it changes the exit code. */
154
173
  export interface SourceCheckResult {
@@ -186,6 +205,12 @@ export interface CompletePublishResponse {
186
205
  manageUrl?: string;
187
206
  /** Absent from an older server; the CLI then prints nothing. */
188
207
  sourceChecks?: SourceCheckResult;
208
+ /**
209
+ * What the publish did to the game's Game Exchange enrolment. Absent from an older server and
210
+ * from a publish that did not touch it; read through `parsePublishGameExchangeResult`, never
211
+ * trusted as typed.
212
+ */
213
+ gameExchange?: PublishGameExchangeResult;
189
214
  }
190
215
  export declare function completePublish(environment: Environment, accessToken: string, body: CompletePublishRequest, deps: ApiDeps): Promise<CompletePublishResponse>;
191
216
  /**
@@ -1,13 +1,3 @@
1
- /**
2
- * The HTTP client for `bitmagic publish`: the two authorizing calls to api-server
3
- * (`publish/begin`, `publish/complete`), the thumbnail's signed-upload lane
4
- * (`uploads/signed-url`, the same route `forge/upload-proxy.ts` bridges for the browser and
5
- * `bitmagic assets add` uploads through), and the raw PUTs against the signed GCS URLs those calls
6
- * mint — which go through `http/signed-upload.ts`, pinned to this lane's exit code.
7
- *
8
- * `publishExitCode` is the one status→exit-code mapping every call above shares, so `publish.ts`
9
- * never has to duplicate the 401/403/409 distinctions per call site.
10
- */
11
1
  import { CliError } from '../errors.js';
12
2
  import { apiServerHeaders } from '../telemetry/request-headers.js';
13
3
  import { putSignedUrl as putSignedUrlShared, putSignedUpload } from '../http/signed-upload.js';
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/publish/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/publish/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { type GameExchangeDeclaration, type PublishGameExchangeRequest, type PublishGameExchangeResult } from '@bitmagic/asset-core/game-exchange';
2
+ /**
3
+ * Whether the engine vendored into this project can show exchange tiles at all. A project's engine
4
+ * only moves on `bitmagic upgrade`, so a current CLI regularly meets an engine without the module.
5
+ */
6
+ export declare function vendoredEngineSupportsExchange(root: string): boolean;
7
+ export type GameExchangeRead = {
8
+ kind: 'declared';
9
+ value: GameExchangeDeclaration;
10
+ file: 'world.json' | 'game.json';
11
+ } | {
12
+ kind: 'undeclared';
13
+ } | {
14
+ kind: 'rejected';
15
+ note: string;
16
+ file: 'world.json' | 'game.json';
17
+ } | {
18
+ kind: 'unreadable';
19
+ };
20
+ /** What `src/work/` declares about the Game Exchange. See the file header for the four states. */
21
+ export declare function readGameExchangeDeclaration(root: string): GameExchangeRead;
22
+ export interface GameExchangePublishField {
23
+ /** Spread straight into the `publish/complete` body. An absent key means "keep what is stored". */
24
+ fields: {
25
+ gameExchange?: PublishGameExchangeRequest;
26
+ };
27
+ /** Creator-facing lines: why something in the project files was not sent. */
28
+ notes: string[];
29
+ }
30
+ /**
31
+ * The `gameExchange` key of this publish, or no key, with the lines that explain an omission.
32
+ *
33
+ * A declaration that turns tiles on is NOT sent from a project whose engine has no exchange module:
34
+ * the bundle being published cannot show a tile, and enrolling it would promise the creator
35
+ * something the game does not do. A declaration that only switches things off is sent either way.
36
+ */
37
+ export declare function gameExchangePublishField(root: string): GameExchangePublishField;
38
+ /** `publish/complete`'s `gameExchange` response key, checked: an older server sends none. */
39
+ export declare function parsePublishGameExchangeResult(raw: unknown): PublishGameExchangeResult | null;
40
+ /** Milli-credits as a creator reads them: `112.4 exchange credits`, `1 exchange credit`. */
41
+ export declare function exchangeCredits(milli: number): string;
42
+ /** The one line a publish prints when the server says the game is enrolled, or null. */
43
+ export declare function gameExchangePublishLine(result: PublishGameExchangeResult | null): string | null;
@@ -0,0 +1,139 @@
1
+ /**
2
+ * The project's Game Exchange declaration (`worldProfileData.gameExchange`, docs/game-exchange.md)
3
+ * and what a publish does with it.
4
+ *
5
+ * Four states, because the server reads three different messages off `publish/complete`:
6
+ *
7
+ * - `declared`: the normalised declaration is sent, and the game is enrolled as it says.
8
+ * - `undeclared`: the work copy is readable and says nothing, so an explicit `null` is sent. That
9
+ * is what makes deleting the declaration take effect: an enrolment made by an earlier publish or
10
+ * by `bitmagic exchange enable` is switched off. The same reasoning as `mobileOrientation`.
11
+ * - `rejected`: the key is there but is not a declaration. The key is omitted (the server keeps
12
+ * what it has) and the reason is printed, in the words api-server would use for the same value.
13
+ * - `unreadable`: neither work-copy file could be read as far as the key. The key is omitted: a
14
+ * broken world.json must not un-enrol a live game.
15
+ *
16
+ * world.json first, game.json second: the declaration's home is world.json, where
17
+ * `bitmagic exchange enable` writes it, and the split format allows `worldProfileData` in either.
18
+ *
19
+ * Best effort throughout, like every other reader beside this one: nothing here can fail a publish.
20
+ */
21
+ import * as fs from 'node:fs';
22
+ import * as path from 'node:path';
23
+ import { parseGameExchangeDeclaration, } from '@bitmagic/asset-core/game-exchange';
24
+ /** The file the engine's exchange module is installed from; absent in an engine that predates it. */
25
+ const ENGINE_EXCHANGE_MODULE = ['engine', 'engine', 'exchange', 'installGameExchange.ts'];
26
+ /**
27
+ * Whether the engine vendored into this project can show exchange tiles at all. A project's engine
28
+ * only moves on `bitmagic upgrade`, so a current CLI regularly meets an engine without the module.
29
+ */
30
+ export function vendoredEngineSupportsExchange(root) {
31
+ return fs.existsSync(path.join(root, ...ENGINE_EXCHANGE_MODULE));
32
+ }
33
+ function readWorkFile(filePath) {
34
+ let parsed;
35
+ try {
36
+ if (!fs.existsSync(filePath))
37
+ return 'missing';
38
+ parsed = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
39
+ }
40
+ catch {
41
+ return 'broken';
42
+ }
43
+ return typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)
44
+ ? parsed
45
+ : 'broken';
46
+ }
47
+ function declaredIn(file) {
48
+ if (typeof file === 'string')
49
+ return undefined;
50
+ const profile = file.worldProfileData;
51
+ if (typeof profile !== 'object' || profile === null || Array.isArray(profile))
52
+ return undefined;
53
+ return profile.gameExchange;
54
+ }
55
+ /** What `src/work/` declares about the Game Exchange. See the file header for the four states. */
56
+ export function readGameExchangeDeclaration(root) {
57
+ const workDir = path.join(root, 'src', 'work');
58
+ const world = readWorkFile(path.join(workDir, 'world.json'));
59
+ const game = readWorkFile(path.join(workDir, 'game.json'));
60
+ for (const [file, contents] of [['world.json', world], ['game.json', game]]) {
61
+ const raw = declaredIn(contents);
62
+ if (raw === undefined)
63
+ continue;
64
+ const parsed = parseGameExchangeDeclaration(raw);
65
+ return parsed.ok
66
+ ? { kind: 'declared', value: parsed.value, file }
67
+ : { kind: 'rejected', note: parsed.error, file };
68
+ }
69
+ // A file that is there but cannot be parsed may be the one holding the declaration, so "says
70
+ // nothing" is only true when everything that exists was read.
71
+ const readable = typeof world !== 'string' || typeof game !== 'string';
72
+ if (!readable || world === 'broken' || game === 'broken')
73
+ return { kind: 'unreadable' };
74
+ return { kind: 'undeclared' };
75
+ }
76
+ /**
77
+ * The `gameExchange` key of this publish, or no key, with the lines that explain an omission.
78
+ *
79
+ * A declaration that turns tiles on is NOT sent from a project whose engine has no exchange module:
80
+ * the bundle being published cannot show a tile, and enrolling it would promise the creator
81
+ * something the game does not do. A declaration that only switches things off is sent either way.
82
+ */
83
+ export function gameExchangePublishField(root) {
84
+ const read = readGameExchangeDeclaration(root);
85
+ if (read.kind === 'unreadable')
86
+ return { fields: {}, notes: [] };
87
+ if (read.kind === 'undeclared')
88
+ return { fields: { gameExchange: null }, notes: [] };
89
+ if (read.kind === 'rejected') {
90
+ return {
91
+ fields: {},
92
+ notes: [`${read.note} (${read.file}) Leaving the game's Game Exchange enrolment alone.`],
93
+ };
94
+ }
95
+ if (read.value.enabled && !vendoredEngineSupportsExchange(root)) {
96
+ return {
97
+ fields: {},
98
+ notes: [
99
+ 'warning: this project declares the Game Exchange, but its engine predates it, so the '
100
+ + 'published game cannot show a tile. Run `bitmagic upgrade`, then `bitmagic verify` and '
101
+ + 'publish again. Leaving the game\'s enrolment alone.',
102
+ ],
103
+ };
104
+ }
105
+ return { fields: { gameExchange: read.value }, notes: [] };
106
+ }
107
+ /** `publish/complete`'s `gameExchange` response key, checked: an older server sends none. */
108
+ export function parsePublishGameExchangeResult(raw) {
109
+ if (typeof raw !== 'object' || raw === null || Array.isArray(raw))
110
+ return null;
111
+ const value = raw;
112
+ if (typeof value.enrolled !== 'boolean')
113
+ return null;
114
+ return {
115
+ enrolled: value.enrolled,
116
+ shows: value.shows === true,
117
+ listed: value.listed === true,
118
+ balanceMilli: typeof value.balanceMilli === 'number' && Number.isFinite(value.balanceMilli) ? value.balanceMilli : 0,
119
+ };
120
+ }
121
+ /** Milli-credits as a creator reads them: `112.4 exchange credits`, `1 exchange credit`. */
122
+ export function exchangeCredits(milli) {
123
+ const amount = Number((milli / 1000).toFixed(3));
124
+ return `${amount} exchange ${amount === 1 ? 'credit' : 'credits'}`;
125
+ }
126
+ /** The one line a publish prints when the server says the game is enrolled, or null. */
127
+ export function gameExchangePublishLine(result) {
128
+ if (result === null || !result.enrolled)
129
+ return null;
130
+ const roles = result.shows && result.listed
131
+ ? 'this game shows "Up next" tiles and is listed in other games'
132
+ : result.shows
133
+ ? 'this game shows "Up next" tiles'
134
+ : result.listed
135
+ ? 'this game is listed in other games'
136
+ : 'this game is enrolled but switched off';
137
+ return `Game Exchange: ${roles}. Balance: ${exchangeCredits(result.balanceMilli)}. \`bitmagic exchange status\` shows the rest.`;
138
+ }
139
+ //# sourceMappingURL=game-exchange.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"game-exchange.js","sourceRoot":"","sources":["../../src/publish/game-exchange.ts"],"names":[],"mappings":"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"}
@@ -29,7 +29,7 @@
29
29
  export function renderBlenderLevelsSkill() {
30
30
  return `---
31
31
  name: building-levels-in-blender
32
- description: Build a hand-designed low-poly 3D world — an interior, a space station, a house and its garden, a stylised set — in Blender from a short Python script instead of voxel terrain, and load it through the engine's MeshLevel: one GLB plus the collider, door, light and landmark JSON, audited with ray casts and reviewed from rendered stills before the game ever runs it. Use it when a creator asks for "low poly", "stylised 3D", a "hand-built level", an enclosed interior, "not voxels", or "in Blender" — and when such a level has walls you fall through, doors that do not open, z-fighting seams, or shows an empty world after publish.
32
+ description: Build a hand-designed low-poly 3D world — an interior, a space station, a house and its garden, a stylised set — in Blender from a short Python script instead of voxel terrain, and load it through the engine's MeshLevel — one GLB plus the collider, door, light and landmark JSON, audited with ray casts and reviewed from rendered stills before the game ever runs it. Use it when a creator asks for "low poly", "stylised 3D", a "hand-built level", an enclosed interior, "not voxels", or "in Blender" — and when such a level has walls you fall through, doors that do not open, z-fighting seams, or shows an empty world after publish.
33
33
  ---
34
34
 
35
35
  # Building a level in Blender
@@ -76,6 +76,9 @@ const ALLOWED_COMMANDS = [
76
76
  'Bash(bitmagic forge:*)',
77
77
  // Copies script bundles the CLI ships into the project's tools/. Local, no network.
78
78
  'Bash(bitmagic tools:*)',
79
+ // Read-only: the Game Exchange enrolment and the exchange credits. `exchange enable` and
80
+ // `exchange disable` are deliberately not here: they change what players see in the live game.
81
+ 'Bash(bitmagic exchange status:*)',
79
82
  ];
80
83
  /**
81
84
  * The settings a project with no `.claude/settings.json` at all gets.
@@ -1 +1 @@
1
- {"version":3,"file":"claude-settings.js","sourceRoot":"","sources":["../../src/scaffold/claude-settings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-settings.js","sourceRoot":"","sources":["../../src/scaffold/claude-settings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ /** `joining-the-game-exchange/SKILL.md`: one shipped Markdown source, readable directly by the skill validator as well. */
2
+ export declare function renderExchangeSkill(): string;
@@ -0,0 +1,7 @@
1
+ import * as fs from 'fs';
2
+ import { fileURLToPath } from 'url';
3
+ /** `joining-the-game-exchange/SKILL.md`: one shipped Markdown source, readable directly by the skill validator as well. */
4
+ export function renderExchangeSkill() {
5
+ return fs.readFileSync(fileURLToPath(new URL('../../assets/skills/joining-the-game-exchange/SKILL.md', import.meta.url)), 'utf-8');
6
+ }
7
+ //# sourceMappingURL=exchange-skill-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exchange-skill-files.js","sourceRoot":"","sources":["../../src/scaffold/exchange-skill-files.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,2HAA2H;AAC3H,MAAM,UAAU,mBAAmB;IACjC,OAAO,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,wDAAwD,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACrI,CAAC"}
@@ -817,7 +817,7 @@ If you are unsure whether one is already running, \`bitmagic reload\` says so an
817
817
  \`${PRIMARY_SKILLS_DIR}/<name>/SKILL.md\`, readable whether or not your harness loads skills by
818
818
  itself: \`planning-a-game/\` (what to build first), \`finding-engine-apis/\` (engine docs),
819
819
  \`generating-assets/\`, \`choosing-asset-pipelines/\`, \`working-with-the-creator/\`, \`theming-the-hud/\`,
820
- \`publishing-a-game/\`, \`publishing-to-poki/\`, \`${PRIMARY_SKILLS_DIR}/publishing-to-roblox/SKILL.md\` (Roblox Studio), \`judging-quality/\`, \`checking-usage/\`, \`making-a-trailer/\`, \`building-ads/\`, \`deciding-with-a-model/\`,
820
+ \`publishing-a-game/\`, \`publishing-to-poki/\`, \`${PRIMARY_SKILLS_DIR}/publishing-to-roblox/SKILL.md\` (Roblox Studio), \`judging-quality/\`, \`checking-usage/\`, \`making-a-trailer/\`, \`building-ads/\`, \`joining-the-game-exchange/\`, \`deciding-with-a-model/\`,
821
821
  \`converting-unity-levels/\`, \`building-levels-in-blender/\`, \`importing-metahumans/\`, \`optimizing-assets/\`.${mirrorClause}
822
822
  \`upgrade\` rewrites every copy, so edits to them are lost; skills you add yourself are never
823
823
  touched.
@@ -1423,6 +1423,7 @@ tier 2.
1423
1423
  | Controls and input — mobile buttons, joystick, touch-to-move, fire buttons, key/button parity | \`control-system.md\` |
1424
1424
  | Combat — weapons, damage, hit detection | \`combat-system.md\` |
1425
1425
  | Any win / lose / you-died / victory / time-up / game-over screen | \`end-game.md\` |
1426
+ | The "Up next" tile — mounting the Game Exchange on a custom end screen, \`engine.gameExchange\` | \`game-exchange.md\` |
1426
1427
  | Achievements and XP — \`engine.unlockAchievement('<id>')\` | \`achievements.md\` |
1427
1428
  | HUD elements — bars, scores, counters, timers | \`HUD_ELEMENTS.md\` |
1428
1429
  | HUD visual style and themes | \`HUD_STYLE_GUIDE.md\`, \`HUD_THEMES.md\` |
@@ -1 +1 @@
1
- {"version":3,"file":"project-files.js","sourceRoot":"","sources":["../../src/scaffold/project-files.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project-files.js","sourceRoot":"","sources":["../../src/scaffold/project-files.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ import { renderCreatorCollaborationSkill, renderPublishingSkill, renderKiroSteer
7
7
  import { renderAssetPipelinesSkill } from './asset-pipeline-skill-files.js';
8
8
  import { renderPokiPublishingSkill } from './poki-skill-files.js';
9
9
  import { renderAdsSkill } from './ads-skill-files.js';
10
+ import { renderExchangeSkill } from './exchange-skill-files.js';
10
11
  import { renderMetaHumanSkill } from './metahuman-skill-files.js';
11
12
  import { renderUnityLevelsSkill, renderUnityLevelsTrapsReference, renderUnityLevelsFbxReference, renderUnityLevelsPhysicsReference, renderUnityLevelsVerificationReference, } from './unity-skill-files.js';
12
13
  import { renderBlenderLevelsSkill, renderBlenderConventionsReference, renderBlenderAuditsReference, renderBlenderPassesReference, renderBlenderEngineHandoffReference, } from './blender-level-skill-files.js';
@@ -184,6 +185,7 @@ export const SHIPPED_SKILLS = [
184
185
  ['making-a-trailer/SKILL.md', renderTrailerSkill],
185
186
  ['making-a-trailer/references/trailer-craft.md', renderTrailerCraftReference],
186
187
  ['building-ads/SKILL.md', renderAdsSkill],
188
+ ['joining-the-game-exchange/SKILL.md', renderExchangeSkill],
187
189
  ['publishing-a-game/SKILL.md', renderPublishingSkill],
188
190
  ['publishing-to-poki/SKILL.md', renderPokiPublishingSkill],
189
191
  ['working-with-the-creator/SKILL.md', renderCreatorCollaborationSkill],