@bitmagic/cli 0.1.70-dev.2 → 0.1.70-dev.3

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 (40) hide show
  1. package/README.md +36 -2
  2. package/assets/skills/publishing-to-poki/SKILL.md +41 -1
  3. package/dist/cli.d.ts +4 -0
  4. package/dist/commands/publish.d.ts +5 -0
  5. package/dist/commands/publish.js +3 -0
  6. package/dist/commands/publish.js.map +1 -1
  7. package/dist/ios/transform.d.ts +0 -1
  8. package/dist/ios/transform.js +1 -1
  9. package/dist/ios/transform.js.map +1 -1
  10. package/dist/package/vendor.js +3 -2
  11. package/dist/package/vendor.js.map +1 -1
  12. package/dist/poki/assets.d.ts +5 -0
  13. package/dist/poki/assets.js +50 -41
  14. package/dist/poki/assets.js.map +1 -1
  15. package/dist/poki/check.d.ts +3 -0
  16. package/dist/poki/check.js +46 -12
  17. package/dist/poki/check.js.map +1 -1
  18. package/dist/poki/handoff.d.ts +22 -0
  19. package/dist/poki/handoff.js +56 -0
  20. package/dist/poki/handoff.js.map +1 -0
  21. package/dist/poki/playtest.d.ts +15 -0
  22. package/dist/poki/playtest.js +45 -0
  23. package/dist/poki/playtest.js.map +1 -0
  24. package/dist/poki/publish.d.ts +1 -0
  25. package/dist/poki/publish.js +61 -21
  26. package/dist/poki/publish.js.map +1 -1
  27. package/dist/poki/source-diagnostics.d.ts +14 -0
  28. package/dist/poki/source-diagnostics.js +40 -0
  29. package/dist/poki/source-diagnostics.js.map +1 -0
  30. package/dist/poki/transform.js +4 -3
  31. package/dist/poki/transform.js.map +1 -1
  32. package/dist/publish/bundle.d.ts +6 -1
  33. package/dist/publish/bundle.js +9 -3
  34. package/dist/publish/bundle.js.map +1 -1
  35. package/dist/verify/browser.d.ts +10 -0
  36. package/dist/verify/browser.js +12 -5
  37. package/dist/verify/browser.js.map +1 -1
  38. package/dist/verify/classify.js +6 -4
  39. package/dist/verify/classify.js.map +1 -1
  40. package/package.json +4 -4
@@ -9,6 +9,8 @@ import { DEFAULT_START_INTERACTION } from '../verify/start.js';
9
9
  import { withVerifyLock } from '../verify/lock.js';
10
10
  import { POKI_SDK_URL } from './transform.js';
11
11
  import { isStaticAsset } from './assets.js';
12
+ import { runPokiPlaytest } from './playtest.js';
13
+ import { readPokiSources, requestSourceFiles } from './source-diagnostics.js';
12
14
  // Only the intercepted SDK response uses this stub. It never enters the delivered ZIP.
13
15
  export const POKI_SDK_STUB = `(() => {
14
16
  let playing = false, advertising = false;
@@ -33,6 +35,8 @@ export const POKI_SDK_STUB = `(() => {
33
35
  setDebug: () => {}
34
36
  };
35
37
  })();`;
38
+ /** Every healthy boot reaches all three, in any order. */
39
+ const REQUIRED_SDK_EVENTS = ['init', 'loaded', 'start'];
36
40
  /** Exercise the engine state contract after starting through actual UI, inside its iframe. */
37
41
  async function pauseAndResume(frame) {
38
42
  await frame.evaluate(async () => {
@@ -54,18 +58,34 @@ export async function runPokiCheck(options) {
54
58
  return withVerifyLock(options.root, 'publish --target poki', { info: options.log }, async () => {
55
59
  fs.mkdirSync(options.artifactDir, { recursive: true });
56
60
  const mountPath = options.nested ? '/poki/game/' : '/';
61
+ const sources = readPokiSources(options.root);
57
62
  const server = await startPayloadServer(options.payloadDir, { mountPath });
58
63
  const misses = new Set();
59
64
  const localFailures = new Set();
65
+ const nonAssetRequests = new Set();
66
+ const requests = new Map();
67
+ const recordRequest = (url, method, resourceType, status) => {
68
+ requests.set(`${method} ${url}`, { url, method, resourceType, ...(status === undefined ? {} : { status }), sourceFiles: requestSourceFiles(sources, url) });
69
+ if (new URL(url).origin !== server.origin && (method !== 'GET' || !isStaticAsset(url))) {
70
+ nonAssetRequests.add(`${method} ${url}`);
71
+ }
72
+ };
60
73
  const gameUrl = `${server.origin}${mountPath}index.html?platform=${options.platform}&renderer=webgl`;
61
74
  const harnessUrl = `${server.origin}/__poki_check__.html`;
62
75
  const routes = async (context) => {
63
76
  context.on('response', (response) => {
64
77
  if (new URL(response.url()).origin === server.origin && response.status() >= 400) {
65
- localFailures.add(`${response.status()} ${response.url()}`);
78
+ const request = response.request();
79
+ recordRequest(response.url(), request.method(), request.resourceType(), response.status());
80
+ const files = requestSourceFiles(sources, response.url());
81
+ localFailures.add(`${response.status()} ${response.url()}${files.length > 0 ? ` — source references: ${files.join(', ')}` : ''}`);
66
82
  }
67
83
  });
68
- await context.routeWebSocket('**', (socket) => { misses.add(socket.url()); socket.close(); });
84
+ await context.routeWebSocket('**', (socket) => {
85
+ misses.add(socket.url());
86
+ recordRequest(socket.url(), 'GET', 'websocket');
87
+ socket.close();
88
+ });
69
89
  await context.route('**/*', async (route) => {
70
90
  const request = route.request();
71
91
  const url = request.url();
@@ -83,6 +103,7 @@ export async function runPokiCheck(options) {
83
103
  }
84
104
  else {
85
105
  misses.add(url);
106
+ recordRequest(url, request.method(), request.resourceType());
86
107
  if (options.mode === 'record' && request.method() === 'GET' && isStaticAsset(url))
87
108
  await route.continue();
88
109
  else
@@ -90,6 +111,10 @@ export async function runPokiCheck(options) {
90
111
  }
91
112
  });
92
113
  };
114
+ const recordOutcome = (outcome) => {
115
+ fs.writeFileSync(path.join(options.artifactDir, 'result.json'), JSON.stringify(outcome, null, 2) + '\n');
116
+ return outcome;
117
+ };
93
118
  try {
94
119
  const observations = await runHeadlessCheck({
95
120
  url: harnessUrl, probeFrameUrlIncludes: `${server.origin}${mountPath}index.html`,
@@ -100,34 +125,43 @@ export async function runPokiCheck(options) {
100
125
  launch: browserLaunchPlan(process.env, 'webgl'),
101
126
  ...(options.platform === 'mobile' ? { device: mobileContextOptions(options.orientation ?? 'landscape') } : {}),
102
127
  routes, blockServiceWorkers: true,
103
- ...(options.mode === 'restricted' ? { afterSettle: pauseAndResume } : {}),
128
+ afterSettle: async (frame) => {
129
+ if (options.playtest) {
130
+ options.log(`Running ${options.platform} Poki playtest: ${options.playtest.file}`);
131
+ await runPokiPlaytest(options.playtest, { frame, platform: options.platform });
132
+ }
133
+ if (options.mode === 'restricted')
134
+ await pauseAndResume(frame);
135
+ },
104
136
  });
105
137
  const sdkEvents = observations.consoleLines.flatMap((line) => {
106
138
  const event = /BM_POKI_EVENT:(\S+)/.exec(line);
107
139
  return event ? [event[1]] : [];
108
140
  });
109
141
  const result = classifyVerifyRun(observations, { bundled: true, platform: options.platform });
110
- if (!sdkEvents.includes('init') || !sdkEvents.includes('loaded') || !sdkEvents.includes('start')) {
142
+ if (!REQUIRED_SDK_EVENTS.every((event) => sdkEvents.includes(event))) {
111
143
  result.failures.push('The Poki SDK did not initialize, finish loading, and report gameplay.');
112
144
  }
113
145
  if (options.mode === 'restricted' && !sdkEvents.includes('ad-end')) {
114
146
  result.failures.push('The Poki pause/resume advertisement was not observed.');
115
147
  }
116
148
  result.ok = result.failures.length === 0;
117
- const outcome = { result, misses: [...misses], localFailures: [...localFailures], sdkEvents };
118
- fs.writeFileSync(path.join(options.artifactDir, 'result.json'), JSON.stringify(outcome, null, 2) + '\n');
119
- return outcome;
149
+ return recordOutcome({ result, misses: [...misses], localFailures: [...localFailures], sdkEvents, nonAssetRequests: [...nonAssetRequests] });
120
150
  }
121
151
  catch (error) {
122
- const outcome = {
152
+ return recordOutcome({
123
153
  result: { ok: false, failures: [error instanceof Error ? error.message : String(error)], warnings: [] },
124
154
  misses: [...misses], localFailures: [...localFailures], sdkEvents: [],
125
- };
126
- fs.writeFileSync(path.join(options.artifactDir, 'result.json'), JSON.stringify(outcome, null, 2) + '\n');
127
- return outcome;
155
+ nonAssetRequests: [...nonAssetRequests],
156
+ });
128
157
  }
129
158
  finally {
130
- await server.close();
159
+ try {
160
+ fs.writeFileSync(path.join(options.artifactDir, 'requests.json'), JSON.stringify([...requests.values()], null, 2) + '\n');
161
+ }
162
+ finally {
163
+ await server.close();
164
+ }
131
165
  }
132
166
  });
133
167
  }
@@ -1 +1 @@
1
- {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/poki/check.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAqB,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,uFAAuF;AACvF,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;MAsBvB,CAAC;AAqBP,8FAA8F;AAC9F,KAAK,UAAU,cAAc,CAAC,KAAmB;IAC/C,MAAM,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;QAC9B,iDAAiD;QACjD,MAAM,CAAC,GAAG,MAIT,CAAC;QACF,MAAM,KAAK,GAAG,CAAC,CAAC,YAAY,EAAE,aAAa,EAAE,EAAE,CAAC,gBAAgB,CAAC;QACjE,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,eAAe,EAAE,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAChH,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAChC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QACvD,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACjC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QACzD,IAAI,KAAK,CAAC,eAAe,EAAE,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;QACvH,4BAA4B;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAyB;IAC1D,OAAO,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,uBAAuB,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,IAAI,EAAE;QAC7F,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC;QACvD,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3E,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;QACjC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;QACxC,MAAM,OAAO,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,SAAS,uBAAuB,OAAO,CAAC,QAAQ,iBAAiB,CAAC;QACrG,MAAM,UAAU,GAAG,GAAG,MAAM,CAAC,MAAM,sBAAsB,CAAC;QAC1D,MAAM,MAAM,GAAG,KAAK,EAAE,OAAuB,EAAiB,EAAE;YAC9D,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,EAAE;gBAClC,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;oBACjF,aAAa,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,IAAI,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBAC9D,CAAC;YACH,CAAC,CAAC,CAAC;YACH,MAAM,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9F,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;gBAChC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;gBAC1B,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;oBACzB,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,iBAAiB,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;gBAC/E,CAAC;qBAAM,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;oBAC9B,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAClD,wFAAwF;8BACtF,oEAAoE,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI;8BACtG,wFAAwF;qBAC3F,CAAC,CAAC;gBACL,CAAC;qBAAM,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;oBACjD,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACzB,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAChB,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,KAAK,KAAK,IAAI,aAAa,CAAC,GAAG,CAAC;wBAAE,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;;wBACrG,MAAM,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QACF,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC;gBAC1C,GAAG,EAAE,UAAU,EAAE,qBAAqB,EAAE,GAAG,MAAM,CAAC,MAAM,GAAG,SAAS,YAAY;gBAChF,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,gBAAgB,CAAC;gBAChE,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC;gBAC1D,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,MAAM;gBACpC,gBAAgB,EAAE,yBAAyB;gBAC3C,MAAM,EAAE,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC;gBAC/C,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,oBAAoB,CAAC,OAAO,CAAC,WAAW,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC9G,MAAM,EAAE,mBAAmB,EAAE,IAAI;gBACjC,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1E,CAAC,CAAC;YACH,MAAM,SAAS,GAAG,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC3D,MAAM,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC/C,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACjC,CAAC,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,iBAAiB,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC9F,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBACjG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;YAChG,CAAC;YACD,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACnE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;YAChF,CAAC;YACD,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;YACzC,MAAM,OAAO,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC,GAAG,aAAa,CAAC,EAAE,SAAS,EAAE,CAAC;YAC9F,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACzG,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAoB;gBAC/B,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;gBACvG,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC,GAAG,aAAa,CAAC,EAAE,SAAS,EAAE,EAAE;aACtE,CAAC;YACF,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACzG,OAAO,OAAO,CAAC;QACjB,CAAC;gBAAS,CAAC;YAAC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/poki/check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { PokiServiceRisk } from './source-diagnostics.js';
2
+ interface PokiHandoff {
3
+ zipPath: string;
4
+ payloadDir: string;
5
+ manifestPath: string;
6
+ checksDir: string;
7
+ sha256: string;
8
+ engineVersion: string;
9
+ cliVersion: string;
10
+ zipBytes: number;
11
+ unpackedBytes: number;
12
+ builtAt: string;
13
+ playtest: {
14
+ file: string;
15
+ sha256: string;
16
+ } | null;
17
+ serviceRisks: PokiServiceRisk[];
18
+ warnings: string[];
19
+ }
20
+ /** Generated separately from UPLOAD-HANDOFF.md so re-export never overwrites manual QA notes. */
21
+ export declare function renderPokiHandoff(result: PokiHandoff): string;
22
+ export {};
@@ -0,0 +1,56 @@
1
+ /** Generated separately from UPLOAD-HANDOFF.md so re-export never overwrites manual QA notes. */
2
+ export function renderPokiHandoff(result) {
3
+ return `# Poki export handoff
4
+
5
+ Export complete; upload pending. This command did not upload or release a Poki version.
6
+
7
+ - Built: ${result.builtAt}
8
+ - Engine: ${result.engineVersion}
9
+ - CLI: ${result.cliVersion}
10
+ - ZIP: ${JSON.stringify(result.zipPath)}
11
+ - ZIP SHA-256: ${result.sha256}
12
+ - Upload directory: ${JSON.stringify(result.payloadDir)}
13
+ - Manifest: ${JSON.stringify(result.manifestPath)}
14
+ - Diagnostics: ${JSON.stringify(result.checksDir)}
15
+ - Compressed: ${result.zipBytes} bytes; unpacked: ${result.unpackedBytes} bytes.
16
+
17
+ ## What was checked
18
+
19
+ The extracted ZIP passed desktop and mobile **emulation** at root and nested iframe paths,
20
+ with an SDK stub and a pause/ad/resume cycle. Network checks cover only the paths exercised.
21
+ ${result.playtest
22
+ ? `Game-specific playtest: ${JSON.stringify(result.playtest.file)} (SHA-256 ${result.playtest.sha256}).`
23
+ : 'No game-specific playtest was supplied. Custom menus, chapters, score submission, and later levels may be untested. Use --poki-playtest to exercise them during export.'}
24
+
25
+ Real SDK/Inspector QA, physical-phone QA, upload, moderation, and public release remain unverified.
26
+
27
+ ## External-service review
28
+
29
+ ${result.serviceRisks.length > 0
30
+ ? result.serviceRisks.map((risk) => `- ${risk.file}: ${risk.api}() may use an external service.`).join('\n')
31
+ : 'No known Bitmagic service calls were found by the source scan. This is not proof that the game has no external dependencies.'}
32
+
33
+ Exercise an actual session, chapter transitions, end screens, and leaderboards in Inspector.
34
+ Resolve blocked services with the creator: use an agreed offline design or seek Poki approval.
35
+ Do not silently remove features or claim that no external resources are used from a smoke pass.
36
+
37
+ ## Upload and real-device QA
38
+
39
+ When an upload is requested, use the [official Poki CLI](https://github.com/poki/poki-cli).
40
+ Read its upload help and supply the Poki UUID and only the upload directory above.
41
+ Preserve the validated assets by disabling image recompression; keep public release disabled
42
+ unless requested. Initial login opens the system browser, so arrange that browser handoff first.
43
+
44
+ Check the returned version ID, not only the uploader's exit code. Record it and check processing status before retrying an apparently missing
45
+ upload. Ready, moderation approval, and public release are separate states.
46
+
47
+ Test the real SDK using [Poki Inspector](https://developers.poki.com/guide/inspector).
48
+ Open the payload folder, or use the uploaded version's Inspector link. Check folder-selection
49
+ permissions before browser automation; if unavailable, use a manual selection or an already
50
+ authorized hosted upload. An HTTP 200 from a local server does not prove its iframe loaded.
51
+ Inspector Mobile mode requires a connected phone via QR; emulation is not physical-device QA.
52
+
53
+ Keep observed upload/QA results in a separate UPLOAD-HANDOFF.md; this file is regenerated on export.
54
+ ${result.warnings.length > 0 ? '\n## Export warnings\n\n' + result.warnings.map((warning) => `- ${warning}`).join('\n') + '\n' : ''}`;
55
+ }
56
+ //# sourceMappingURL=handoff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handoff.js","sourceRoot":"","sources":["../../src/poki/handoff.ts"],"names":[],"mappings":"AAkBA,iGAAiG;AACjG,MAAM,UAAU,iBAAiB,CAAC,MAAmB;IACnD,OAAO;;;;WAIE,MAAM,CAAC,OAAO;YACb,MAAM,CAAC,aAAa;SACvB,MAAM,CAAC,UAAU;SACjB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;iBACtB,MAAM,CAAC,MAAM;sBACR,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC;cACzC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC;iBAChC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC;gBACjC,MAAM,CAAC,QAAQ,qBAAqB,MAAM,CAAC,aAAa;;;;;;EAMtE,MAAM,CAAC,QAAQ;QACb,CAAC,CAAC,2BAA2B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI;QACxG,CAAC,CAAC,yKAAyK;;;;;;EAM7K,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;QAC5B,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,iCAAiC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5G,CAAC,CAAC,8HAA8H;;;;;;;;;;;;;;;;;;;;;;;EAuBlI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,0BAA0B,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACtI,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { Frame, Page } from 'playwright-core';
2
+ export interface PokiPlaytestContext {
3
+ frame: Page | Frame;
4
+ platform: 'desktop' | 'mobile';
5
+ }
6
+ export interface PokiPlaytest {
7
+ file: string;
8
+ sha256: string;
9
+ run: (context: PokiPlaytestContext) => Promise<void>;
10
+ }
11
+ export declare function playtestHash(file: string): string;
12
+ /** Explicit opt-in: game-specific UI actions run against every staged/extracted package check. */
13
+ export declare function loadPokiPlaytest(file: string | undefined, cwd: string): Promise<PokiPlaytest | undefined>;
14
+ /** A stalled selector must not hang an export. Closing the browser cancels outstanding actions. */
15
+ export declare function runPokiPlaytest(playtest: PokiPlaytest, context: PokiPlaytestContext, timeoutMs?: number): Promise<void>;
@@ -0,0 +1,45 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ import { createHash } from 'crypto';
4
+ import { pathToFileURL } from 'url';
5
+ import { CliError } from '../errors.js';
6
+ export function playtestHash(file) {
7
+ return createHash('sha256').update(fs.readFileSync(file)).digest('hex');
8
+ }
9
+ /** Explicit opt-in: game-specific UI actions run against every staged/extracted package check. */
10
+ export async function loadPokiPlaytest(file, cwd) {
11
+ if (file === undefined)
12
+ return undefined;
13
+ const resolved = path.resolve(cwd, file);
14
+ if (path.extname(resolved) !== '.mjs' || !fs.statSync(resolved, { throwIfNoEntry: false })?.isFile()) {
15
+ throw new CliError('--poki-playtest must name an existing .mjs file exporting a default async function.', 4);
16
+ }
17
+ const sha256 = playtestHash(resolved);
18
+ let loaded;
19
+ try {
20
+ loaded = await import(`${pathToFileURL(resolved).href}?sha256=${sha256}`);
21
+ }
22
+ catch (error) {
23
+ throw new CliError(`Cannot load Poki playtest ${resolved}: ${error instanceof Error ? error.message : String(error)}`, 4);
24
+ }
25
+ const run = loaded.default;
26
+ if (typeof run !== 'function')
27
+ throw new CliError('The Poki playtest must export a default async function receiving { frame, platform }.', 4);
28
+ return { file: resolved, sha256, run: async (context) => { await run(context); } };
29
+ }
30
+ /** A stalled selector must not hang an export. Closing the browser cancels outstanding actions. */
31
+ export async function runPokiPlaytest(playtest, context, timeoutMs = 30_000) {
32
+ let timer;
33
+ try {
34
+ await Promise.race([
35
+ Promise.resolve().then(() => playtest.run(context)),
36
+ new Promise((_, reject) => {
37
+ timer = setTimeout(() => reject(new Error(`Poki playtest timed out after ${timeoutMs} ms: ${playtest.file}`)), timeoutMs);
38
+ }),
39
+ ]);
40
+ }
41
+ finally {
42
+ clearTimeout(timer);
43
+ }
44
+ }
45
+ //# sourceMappingURL=playtest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playtest.js","sourceRoot":"","sources":["../../src/poki/playtest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAaxC,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1E,CAAC;AAED,kGAAkG;AAClG,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAwB,EAAE,GAAW;IAC1E,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACzC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;QACrG,MAAM,IAAI,QAAQ,CAAC,qFAAqF,EAAE,CAAC,CAAC,CAAC;IAC/G,CAAC;IACD,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,MAA6B,CAAC;IAClC,IAAI,CAAC;QAAC,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,IAAI,WAAW,MAAM,EAAE,CAA0B,CAAC;IAAC,CAAC;IAC3G,OAAO,KAAK,EAAE,CAAC;QAAC,MAAM,IAAI,QAAQ,CAAC,6BAA6B,QAAQ,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAAC,CAAC;IAC5I,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC;IAC3B,IAAI,OAAO,GAAG,KAAK,UAAU;QAAE,MAAM,IAAI,QAAQ,CAAC,uFAAuF,EAAE,CAAC,CAAC,CAAC;IAC9I,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACrF,CAAC;AAED,mGAAmG;AACnG,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAsB,EAAE,OAA4B,EAAE,SAAS,GAAG,MAAM;IAC5G,IAAI,KAAgD,CAAC;IACrD,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,IAAI,CAAC;YACjB,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACnD,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;gBAC/B,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,iCAAiC,SAAS,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YAC5H,CAAC,CAAC;SACH,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAAC,CAAC;AACpC,CAAC"}
@@ -5,6 +5,7 @@ import type { PokiCheckOptions, PokiCheckResult } from './check.js';
5
5
  export interface PokiPublishArgs {
6
6
  name?: string;
7
7
  output?: string;
8
+ 'poki-playtest'?: string;
8
9
  force?: boolean;
9
10
  json?: boolean;
10
11
  }
@@ -11,11 +11,17 @@ import { buildBundlePaths, readBuildManifest, runBuild, VITE_PUBLISH_STANDALONE_
11
11
  import { checkVerifyGate } from '../publish/meta-block.js';
12
12
  import { readVerifyRecord } from '../verify/result.js';
13
13
  import { collectUrls, readCompiledGameCode } from '../package/collect-urls.js';
14
- import { isStaticAsset, packageAssets, pokiAssetPath, scanAssetUrls, scanHtmlAssets } from './assets.js';
14
+ import { isStaticAsset, packageAssets, pokiBasePath, scanAssetUrls, scanHtmlAssets } from './assets.js';
15
15
  import { transformPokiHtml } from './transform.js';
16
+ import { loadPokiPlaytest, playtestHash } from './playtest.js';
17
+ import { findPokiServiceRisks, readPokiSources } from './source-diagnostics.js';
18
+ import { renderPokiHandoff } from './handoff.js';
19
+ import { currentCliVersion } from '../update/cli-version.js';
16
20
  function defaultDeps() {
17
21
  return {
18
- fetch: globalThis.fetch, build: runBuild, collect: collectUrls,
22
+ fetch: globalThis.fetch,
23
+ build: runBuild,
24
+ collect: collectUrls,
19
25
  check: async (options) => (await import('./check.js')).runPokiCheck(options),
20
26
  };
21
27
  }
@@ -36,27 +42,38 @@ export function requirePokiCapability(root) {
36
42
  throw new CliError('The engine Poki export capability is incompatible. Run `bitmagic self-update` and `bitmagic upgrade`.', 4);
37
43
  }
38
44
  }
45
+ /** Project inputs, build outputs and managed artifacts a `--output` path must never land in. */
46
+ const PROTECTED_DIRS = /^(src|engine|node_modules|dist|\.git|\.agents|\.claude|\.kiro)(\/|$)/;
47
+ const DEFAULT_ZIP_RELATIVE = '.bitmagic/poki/poki.zip';
48
+ function escapesIntoProjectInputs(root, target) {
49
+ const relative = path.relative(root, target).split(path.sep).join('/');
50
+ return PROTECTED_DIRS.test(relative)
51
+ || (relative.startsWith('.bitmagic/') && relative !== DEFAULT_ZIP_RELATIVE);
52
+ }
39
53
  export function pokiOutputPath(root, output, cwd) {
40
- const result = output === undefined ? path.join(root, '.bitmagic', 'poki', 'poki.zip') : path.resolve(cwd, output);
54
+ const result = output === undefined
55
+ ? path.join(root, ...DEFAULT_ZIP_RELATIVE.split('/'))
56
+ : path.resolve(cwd, output);
41
57
  if (path.extname(result).toLowerCase() !== '.zip')
42
58
  throw new CliError('--output must name a .zip file.');
43
- const relative = path.relative(root, result).split(path.sep).join('/');
44
- if (/^(src|engine|node_modules|dist|\.git|\.agents|\.claude|\.kiro)(\/|$)/.test(relative)
45
- || (relative.startsWith('.bitmagic/') && relative !== '.bitmagic/poki/poki.zip')) {
59
+ if (escapesIntoProjectInputs(root, result)) {
46
60
  throw new CliError('--output must not overwrite project inputs, build files, or managed artifacts. Use a release directory.');
47
61
  }
48
62
  // Resolve symlinked parents too: a release directory must not be an alias for src/ or engine/.
49
63
  let ancestor = path.dirname(result);
50
64
  while (!fs.existsSync(ancestor))
51
65
  ancestor = path.dirname(ancestor);
52
- const actualRelative = path.relative(fs.realpathSync(root), path.join(fs.realpathSync(ancestor), path.relative(ancestor, result))).split(path.sep).join('/');
53
- if (/^(src|engine|node_modules|dist|\.git|\.agents|\.claude|\.kiro)(\/|$)/.test(actualRelative)
54
- || (actualRelative.startsWith('.bitmagic/') && actualRelative !== '.bitmagic/poki/poki.zip')
66
+ const actual = path.join(fs.realpathSync(ancestor), path.relative(ancestor, result));
67
+ if (escapesIntoProjectInputs(fs.realpathSync(root), actual)
55
68
  || (fs.existsSync(result) && fs.lstatSync(result).isSymbolicLink())) {
56
69
  throw new CliError('--output must not use a symlinked file or parent directory.');
57
70
  }
58
71
  return result;
59
72
  }
73
+ /** Both checks run on both platforms; Poki serves the same ZIP to desktop and phone. */
74
+ const PLATFORMS = ['desktop', 'mobile'];
75
+ /** Each pass packages what the last one requested, so a short chain of them converges. */
76
+ const MAX_DISCOVERY_PASSES = 3;
60
77
  function payloadEntries(dir, prefix = '') {
61
78
  const entries = {};
62
79
  for (const entry of fs.readdirSync(path.join(dir, prefix), { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name))) {
@@ -86,6 +103,20 @@ export async function runPokiPublish(args, deps = defaultDeps()) {
86
103
  const gate = checkVerifyGate(readVerifyRecord(path.join(root, '.bitmagic', 'verify')), fingerprint, args.force === true);
87
104
  if (!gate.ok)
88
105
  throw new CliError(gate.message, 3);
106
+ const playtest = await loadPokiPlaytest(args['poki-playtest'], deps.startDir ?? process.cwd());
107
+ if (playtest) {
108
+ const relative = path.relative(path.join(fs.realpathSync(root), '.bitmagic/poki'), fs.realpathSync(playtest.file));
109
+ if (relative === '' || (!relative.startsWith(`..${path.sep}`) && relative !== '..' && !path.isAbsolute(relative))) {
110
+ throw new CliError('Keep --poki-playtest outside .bitmagic/poki: export replaces files in that directory. Use playtest/poki.mjs.', 4);
111
+ }
112
+ }
113
+ const serviceRisks = findPokiServiceRisks(readPokiSources(root));
114
+ const warnings = serviceRisks.map((risk) => `${risk.file}: ${risk.api}() may require an external service. Exercise this flow in --poki-playtest and review it in Poki Inspector.`);
115
+ if (!playtest)
116
+ warnings.push('No game-specific playtest supplied: custom menus, chapters, score submission, and later levels may be untested. Use --poki-playtest to extend validation.');
117
+ const announcedWarnings = new Set(warnings);
118
+ for (const warning of warnings)
119
+ output.info(`warning: ${warning}`);
89
120
  const paths = buildBundlePaths(root);
90
121
  const manifest = readBuildManifest(root);
91
122
  if (manifest?.fingerprint !== fingerprint || !manifest.singleFile || !fs.existsSync(paths.htmlPath)
@@ -101,7 +132,6 @@ export async function runPokiPublish(args, deps = defaultDeps()) {
101
132
  const checksDir = path.join(dir, 'checks', path.basename(stage));
102
133
  const cacheDir = path.join(dir, 'cache');
103
134
  fs.mkdirSync(payload);
104
- const warnings = [];
105
135
  try {
106
136
  const collected = await deps.collect(root);
107
137
  for (const note of collected.notes) {
@@ -116,9 +146,9 @@ export async function runPokiPublish(args, deps = defaultDeps()) {
116
146
  const assetMap = await packageAssets({ urls, payloadDir: payload, cacheDir, fetch: deps.fetch, log: output.info });
117
147
  const bases = new Map();
118
148
  for (const base of collected.bases) {
119
- const mapped = pokiAssetPath(base.endsWith('/') ? base : base + '/');
149
+ const mapped = pokiBasePath(base);
120
150
  if (mapped !== null)
121
- bases.set(base, mapped.replace(/\/index$/, ''));
151
+ bases.set(base, mapped);
122
152
  }
123
153
  const writePayload = () => {
124
154
  fs.writeFileSync(path.join(payload, 'index.html'), transformPokiHtml({
@@ -127,12 +157,12 @@ export async function runPokiPublish(args, deps = defaultDeps()) {
127
157
  };
128
158
  const orientation = readPlatformDeclaration(root).mobileOrientation;
129
159
  writePayload();
130
- for (const platform of ['desktop', 'mobile']) {
131
- for (let pass = 0; pass < 3; pass++) {
160
+ for (const platform of PLATFORMS) {
161
+ for (let pass = 0; pass < MAX_DISCOVERY_PASSES; pass++) {
132
162
  output.info(`Discovering ${platform} runtime assets (pass ${pass + 1})…`);
133
163
  const artifactDir = path.join(checksDir, `record-${platform}-${pass}`);
134
- const check = await deps.check({ root, payloadDir: payload, artifactDir, mode: 'record', platform, orientation, log: output.info });
135
- const unsupported = check.misses.filter((url) => !isStaticAsset(url));
164
+ const check = await deps.check({ root, payloadDir: payload, artifactDir, mode: 'record', platform, orientation, playtest, log: output.info });
165
+ const unsupported = check.nonAssetRequests ?? check.misses.filter((url) => !isStaticAsset(url));
136
166
  if (unsupported.length > 0) {
137
167
  throw new CliError(`This game requires external services that the Poki package cannot include:\n${unsupported.join('\n')}\nDiagnostics: ${artifactDir}`, 7);
138
168
  }
@@ -140,7 +170,7 @@ export async function runPokiPublish(args, deps = defaultDeps()) {
140
170
  assertPackagedCheck(check, artifactDir);
141
171
  break;
142
172
  }
143
- if (pass === 2)
173
+ if (pass === MAX_DISCOVERY_PASSES - 1)
144
174
  throw new CliError(`Runtime assets are still missing. See ${artifactDir}.`, 7);
145
175
  for (const [url, rel] of await packageAssets({ urls: check.misses, payloadDir: payload, cacheDir, fetch: deps.fetch, log: output.info })) {
146
176
  assetMap.set(url, rel);
@@ -159,11 +189,11 @@ export async function runPokiPublish(args, deps = defaultDeps()) {
159
189
  fs.writeFileSync(file, bytes);
160
190
  }
161
191
  const validation = [];
162
- for (const platform of ['desktop', 'mobile']) {
192
+ for (const platform of PLATFORMS) {
163
193
  for (const nested of [false, true]) {
164
194
  output.info(`Validating the ZIP on ${platform} (${nested ? 'nested' : 'root'} path)…`);
165
195
  const artifactDir = path.join(checksDir, `restricted-${platform}-${nested ? 'nested' : 'root'}`);
166
- const check = await deps.check({ root, payloadDir: extracted, artifactDir, mode: 'restricted', platform, orientation, nested, log: output.info });
196
+ const check = await deps.check({ root, payloadDir: extracted, artifactDir, mode: 'restricted', platform, orientation, nested, playtest, log: output.info });
167
197
  assertPackagedCheck(check, artifactDir);
168
198
  warnings.push(...check.result.warnings);
169
199
  validation.push({ platform, nested, sdkEvents: check.sdkEvents });
@@ -171,17 +201,24 @@ export async function runPokiPublish(args, deps = defaultDeps()) {
171
201
  }
172
202
  if (computeFingerprint(root) !== fingerprint)
173
203
  throw new CliError('The project changed during export. Run `bitmagic verify` and export again.', 3);
204
+ if (playtest && playtestHash(playtest.file) !== playtest.sha256)
205
+ throw new CliError('The Poki playtest changed during export. Export again with the finished playtest.', 3);
174
206
  const sizes = Object.entries(entries).map(([file, bytes]) => ({ file, bytes: bytes.byteLength, sha256: createHash('sha256').update(bytes).digest('hex') }));
175
207
  const payloadDir = path.join(dir, 'payload');
176
208
  const manifestPath = path.join(dir, 'manifest.json');
209
+ const handoffPath = path.join(dir, 'EXPORT-HANDOFF.md');
177
210
  const result = {
178
211
  ok: true, target: 'poki', packageFormatVersion: 1, zipPath, payloadDir, manifestPath, checksDir,
212
+ status: 'exported', uploaded: false, handoffPath, cliVersion: currentCliVersion(),
179
213
  fingerprint, engineVersion: metadata.engineVersion, sha256: createHash('sha256').update(zip).digest('hex'),
180
214
  zipBytes: zip.byteLength, unpackedBytes: sizes.reduce((total, file) => total + file.bytes, 0),
181
215
  assetCount: assetMap.size, validation, sdkValidation: 'stub', inspectorValidated: false,
216
+ validationScope: { mobile: 'emulated', network: 'exercised-paths-only' },
217
+ playtest: playtest ? { file: playtest.file, sha256: playtest.sha256 } : null, serviceRisks,
182
218
  warnings: [...new Set(warnings)], files: sizes, builtAt: new Date().toISOString(),
183
219
  };
184
220
  fs.mkdirSync(path.dirname(zipPath), { recursive: true });
221
+ fs.writeFileSync(path.join(stage, 'EXPORT-HANDOFF.md'), renderPokiHandoff(result));
185
222
  const zipTmp = `${zipPath}.tmp-${process.pid}`;
186
223
  try {
187
224
  fs.writeFileSync(zipTmp, zip);
@@ -194,9 +231,12 @@ export async function runPokiPublish(args, deps = defaultDeps()) {
194
231
  fs.renameSync(payload, payloadDir);
195
232
  fs.writeFileSync(path.join(stage, 'manifest.json'), JSON.stringify(result, null, 2) + '\n');
196
233
  fs.renameSync(path.join(stage, 'manifest.json'), manifestPath);
234
+ fs.renameSync(path.join(stage, 'EXPORT-HANDOFF.md'), handoffPath);
197
235
  for (const warning of result.warnings)
198
- output.info(`warning: ${warning}`);
199
- output.info(`Poki package ready: ${zipPath} (${result.zipBytes} bytes zipped; ${result.unpackedBytes} bytes unpacked).`);
236
+ if (!announcedWarnings.has(warning))
237
+ output.info(`warning: ${warning}`);
238
+ output.info(`Poki export complete; upload pending: ${zipPath} (${result.zipBytes} bytes zipped; ${result.unpackedBytes} bytes unpacked).`);
239
+ output.info(`Upload and QA handoff: ${handoffPath}`);
200
240
  output.info('Test the payload folder in https://inspector.poki.dev before submitting to Poki. Local checks use an SDK stub.');
201
241
  output.result(result);
202
242
  }
@@ -1 +1 @@
1
- {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/poki/publish.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,YAAY,EAAe,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,QAAQ,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;AACrH,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACzG,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAmBnD,SAAS,WAAW;IAClB,OAAO;QACL,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW;QAC9D,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC;KAC7E,CAAC;AACJ,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,8BAA8B,CAAC,CAAC,EAAE,CAAC;QACpE,MAAM,IAAI,QAAQ,CAAC,WAAW,8BAA8B,gDAAgD,EAAE,CAAC,CAAC,CAAC;IACnH,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,wBAAwB,CAAC,CAAC;IAC3E,IAAI,UAAmB,CAAC;IACxB,IAAI,CAAC;QAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAAC,CAAC;IAChE,MAAM,CAAC;QAAC,MAAM,IAAI,QAAQ,CAAC,qGAAqG,EAAE,CAAC,CAAC,CAAC;IAAC,CAAC;IACvI,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,IAAI,IAAI,CAAC,CAAC,eAAe,IAAI,UAAU,CAAC,IAAI,UAAU,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;QAChI,MAAM,IAAI,QAAQ,CAAC,uGAAuG,EAAE,CAAC,CAAC,CAAC;IACjI,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,MAA0B,EAAE,GAAW;IAClF,MAAM,MAAM,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACnH,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,KAAK,MAAM;QAAE,MAAM,IAAI,QAAQ,CAAC,iCAAiC,CAAC,CAAC;IACzG,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvE,IAAI,sEAAsE,CAAC,IAAI,CAAC,QAAQ,CAAC;WACpF,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,QAAQ,KAAK,yBAAyB,CAAC,EAAE,CAAC;QACnF,MAAM,IAAI,QAAQ,CAAC,yGAAyG,CAAC,CAAC;IAChI,CAAC;IACD,+FAA+F;IAC/F,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnE,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7J,IAAI,sEAAsE,CAAC,IAAI,CAAC,cAAc,CAAC;WAC1F,CAAC,cAAc,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,cAAc,KAAK,yBAAyB,CAAC;WACzF,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC;QACtE,MAAM,IAAI,QAAQ,CAAC,6DAA6D,CAAC,CAAC;IACpF,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,GAAW,EAAE,MAAM,GAAG,EAAE;IAC9C,MAAM,OAAO,GAA+B,EAAE,CAAC;IAC/C,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QACjI,MAAM,IAAI,GAAG,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC;QACjC,IAAI,KAAK,CAAC,cAAc,EAAE;YAAE,MAAM,IAAI,QAAQ,CAAC,uCAAuC,IAAI,EAAE,CAAC,CAAC;QAC9F,IAAI,KAAK,CAAC,WAAW,EAAE;YAAE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC,GAAG,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;;YAC5E,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAsB,EAAE,WAAmB;IACtE,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,aAAa,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC,CAAC;IAC9H,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,QAAQ,CAAC,oCAAoC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;IAChH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAqB,EAAE,OAAwB,WAAW,EAAE;IAC/F,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IACnC,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAClF,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,eAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;IACzH,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,QAAQ,EAAE,WAAW,KAAK,WAAW,IAAI,CAAC,QAAQ,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC;WAC9F,QAAQ,CAAC,MAAM,KAAK,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACpG,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,aAAa,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC;IAC7F,CAAC;IACD,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACtD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IACjD,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACzC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACtB,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3C,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;QAC/E,wFAAwF;QACxF,2FAA2F;QAC3F,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;aAC3D,MAAM,CAAC,aAAa,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5E,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,UAAU,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACnH,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;QACxC,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;YACrE,IAAI,MAAM,KAAK,IAAI;gBAAE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;QACvE,CAAC;QACD,MAAM,YAAY,GAAG,GAAS,EAAE;YAC9B,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE,iBAAiB,CAAC;gBACnE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI;aACrD,CAAC,CAAC,CAAC;QACN,CAAC,CAAC;QACF,MAAM,WAAW,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC,iBAAiB,CAAC;QACpE,YAAY,EAAE,CAAC;QACf,KAAK,MAAM,QAAQ,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAU,EAAE,CAAC;YACtD,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;gBACpC,MAAM,CAAC,IAAI,CAAC,eAAe,QAAQ,yBAAyB,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC1E,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,QAAQ,IAAI,IAAI,EAAE,CAAC,CAAC;gBACvE,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;gBACpI,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;gBACtE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC3B,MAAM,IAAI,QAAQ,CAAC,+EAA+E,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC9J,CAAC;gBACD,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAAC,mBAAmB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;oBAAC,MAAM;gBAAC,CAAC;gBAClF,IAAI,IAAI,KAAK,CAAC;oBAAE,MAAM,IAAI,QAAQ,CAAC,yCAAyC,WAAW,GAAG,EAAE,CAAC,CAAC,CAAC;gBAC/F,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,aAAa,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;oBACzI,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBACzB,CAAC;gBACD,YAAY,EAAE,CAAC;YACjB,CAAC;QACH,CAAC;QACD,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3C,gFAAgF;QAChF,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAChD,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACxB,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACxC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACtD,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;QACD,MAAM,UAAU,GAAsE,EAAE,CAAC;QACzF,KAAK,MAAM,QAAQ,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAU,EAAE,CAAC;YACtD,KAAK,MAAM,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;gBACnC,MAAM,CAAC,IAAI,CAAC,yBAAyB,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,CAAC;gBACvF,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,QAAQ,IAAI,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;gBACjG,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;gBAClJ,mBAAmB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;gBACxC,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACxC,UAAU,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QACD,IAAI,kBAAkB,CAAC,IAAI,CAAC,KAAK,WAAW;YAAE,MAAM,IAAI,QAAQ,CAAC,4EAA4E,EAAE,CAAC,CAAC,CAAC;QAClJ,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5J,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG;YACb,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS;YAC/F,WAAW,EAAE,aAAa,EAAE,QAAQ,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;YAC1G,QAAQ,EAAE,GAAG,CAAC,UAAU,EAAE,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAC7F,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,kBAAkB,EAAE,KAAK;YACvF,QAAQ,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SAClF,CAAC;QACF,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,GAAG,OAAO,QAAQ,OAAO,CAAC,GAAG,EAAE,CAAC;QAC/C,IAAI,CAAC;YAAC,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAAC,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,CAAC;gBAC9D,CAAC;YAAC,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAAC,CAAC;QAC/C,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACnC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAC5F,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,eAAe,CAAC,EAAE,YAAY,CAAC,CAAC;QAC/D,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ;YAAE,MAAM,CAAC,IAAI,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC;QAC1E,MAAM,CAAC,IAAI,CAAC,uBAAuB,OAAO,KAAK,MAAM,CAAC,QAAQ,kBAAkB,MAAM,CAAC,aAAa,mBAAmB,CAAC,CAAC;QACzH,MAAM,CAAC,IAAI,CAAC,gHAAgH,CAAC,CAAC;QAC9H,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;YAAS,CAAC;QAAC,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAAC,CAAC;AACnE,CAAC"}
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/poki/publish.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export interface PokiSourceFile {
2
+ file: string;
3
+ text: string;
4
+ }
5
+ export interface PokiServiceRisk {
6
+ file: string;
7
+ api: string;
8
+ }
9
+ /** Only creator-owned sources, never the dormant service implementations shipped in the engine. */
10
+ export declare function readPokiSources(root: string): PokiSourceFile[];
11
+ /** A conservative hint, not a reachability analysis or proof of online activity. */
12
+ export declare function findPokiServiceRisks(sources: readonly PokiSourceFile[]): PokiServiceRisk[];
13
+ /** Literal matches help locate a missing optional fetch without pretending to be a stack trace. */
14
+ export declare function requestSourceFiles(sources: readonly PokiSourceFile[], url: string): string[];