parley-live 0.5.0 → 0.6.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.
@@ -4,6 +4,7 @@
4
4
  import fs from 'node:fs';
5
5
  import path from 'node:path';
6
6
  import { LENS_VERSION } from './training/compile.mjs';
7
+ import { readSubmissionState, SNAP_LENS_NAME_MAX } from './lib/submission.mjs';
7
8
 
8
9
  const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
9
10
  const TAG = '[ParleyTG]';
@@ -30,7 +31,7 @@ async function printsSince(bridge, sinceDate) {
30
31
  return printsOf(tail).filter((p) => { const t = timeOfDayMs(p); return t !== null && t >= since; });
31
32
  }
32
33
 
33
- export async function verify({ bridge, plan, form, runDir, iteration, projectDir }) {
34
+ export async function verify({ bridge, plan, form, runDir, iteration, projectDir, submission }) {
34
35
  const checks = [];
35
36
  const add = (item, status, detail, extra = {}) => checks.push({ item, status, detail, ...extra });
36
37
  const n = form.steps.length;
@@ -98,11 +99,26 @@ export async function verify({ bridge, plan, form, runDir, iteration, projectDir
98
99
  const bytes = dirSize(path.join(projectDir, 'Assets')) + dirSize(path.join(projectDir, 'Packages'));
99
100
  add('Lens size within the 25 MB limit Snap sets for a published Spectacles Lens', bytes < 25 * 1024 * 1024 ? 'pass' : 'fail', `${(bytes / 1048576).toFixed(1)} MB of project assets + packages on disk (upper bound; the published Lens is compressed)`);
100
101
 
101
- // 9. Items preview cannot judge
102
+ // 9. What Snap requires of a submittable Lens, read back from the project rather than assumed.
103
+ const snap = await readSubmissionState(bridge).catch((e) => ({ error: e.message }));
104
+ if (snap.error) {
105
+ add('Ready for Snap submission (name, icon, signing key)', 'fail', snap.error.slice(0, 300));
106
+ } else {
107
+ const nameOk = snap.lensNameValid && snap.lensName.length <= SNAP_LENS_NAME_MAX;
108
+ add(`Lens name Snap accepts (at most ${SNAP_LENS_NAME_MAX} characters, not the template default)`, nameOk ? 'pass' : 'fail',
109
+ nameOk ? `"${snap.lensName}" (${snap.lensName.length} characters)` : `"${snap.lensName}" would be rejected at publish`);
110
+ add('Lens icon set on the project', snap.iconPresent ? 'pass' : 'fail', snap.iconPresent ? '320x320 PNG: ' + String(snap.iconPath).split(/[\\/]/).pop() : 'no icon; Snap requires one');
111
+ add('Production signing key attached', snap.productionKeySet ? 'pass' : 'fail', snap.productionKeySet ? 'ed25519 key set on the project' : 'no signing key; the SnapOS Package cannot be exported without one');
112
+ }
113
+
114
+ // 10. Items preview cannot judge
102
115
  if (form.voiceShortcuts !== false) add('Voice shortcuts ("done", "next", "back") recognized reliably', 'hardware', (voiceEnv.length ? 'preview could not start speech recognition (Lens Studio is not logged in to My Lenses); the Lens fell back to buttons as designed. ' : '') + 'ASR needs a microphone and real speech; Snap advises buttons as the dependable path, which the checks above exercised');
103
116
  add('Panel comfort and legibility in the real workspace', 'hardware', 'distance, glare and hand reach depend on the wearer and the room');
104
117
  add('60 FPS, power and thermal budget', 'hardware', 'Snap requires checking the Lens Performance Overlay and Spectacles Monitor on a real device; the preview cannot measure this');
105
- add('Submission metadata (custom icon, preview image or video)', 'hardware', 'description, release notes and the test list are written into the build report; icon and preview capture are manual in Lens Studio');
118
+ add('Signed in to Lens Studio, so the Lens can be exported and submitted', snap.signedIn ? 'pass' : 'hardware',
119
+ snap.signedIn === true ? 'signed in: Snap\'s preflight, the SnapOS Package export and the upload can run'
120
+ : 'not signed in. This is Snap\'s gate, not a missing piece of the build: it blocks their preflight, the package export and the upload. Everything on this side of it (name, icon, signing key) is done.');
121
+ add('Preview image or video for the store listing', 'hardware', 'captured from the Lens running on real glasses; the description, release notes and test list are already written into this report');
106
122
 
107
123
  const pass = checks.every((c) => c.status !== 'fail');
108
124
  return { pass, iteration, checks };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "parley-live",
3
- "version": "0.5.0",
4
- "description": "Generate images, video clips with named camera moves, narration, YouTube thumbnails, product ads, complete videos and Studio films, deploy static sites, and build Snap Specs Lenses through Lens Studio, from the terminal with Parley. Built for coding agents: every command has a --json mode.",
3
+ "version": "0.6.0",
4
+ "description": "Generate images, video clips with named camera moves, narration, YouTube thumbnails, product ads, complete videos and Studio films, reuse them from your account library, deploy static sites, and build Snap Specs Lenses through Lens Studio, from the terminal with Parley. Built for coding agents: every command has a --json mode.",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "bin": {