demobite 1.8.0 → 1.8.2

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "demobite",
3
- "version": "1.8.0",
3
+ "version": "1.8.2",
4
4
  "description": "The DemoBites agentic recorder — you prompt, it films a real browser, and DemoBites turns the take into an editable demo bite.",
5
5
  "bin": {
6
6
  "demobite": "launcher/index.mjs"
@@ -30,7 +30,12 @@ try {
30
30
  const pkg = { ...base, name, bin: { [name]: "launcher/index.mjs" } };
31
31
  fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + "\n");
32
32
  console.log(`\n── ${name}@${base.version}${dryRun ? " (dry run)" : ""}`);
33
- const r = spawnSync("npm", ["publish", "--access", "public", ...(dryRun ? ["--dry-run"] : [])], { cwd: root, stdio: "inherit", env: { ...process.env, DEMOBITE_RELEASE: "1" } });
33
+ // Publish under a HOLDING tag (founder's test 2026-10-14: `npx demobite@latest`
34
+ // failed with "No matching version found" a minute after a publish — npm
35
+ // moved `latest` before the tarball had propagated, and a customer in that
36
+ // window gets the error). `latest` moves below, once the tarball is
37
+ // actually downloadable.
38
+ const r = spawnSync("npm", ["publish", "--access", "public", "--tag", "pending", ...(dryRun ? ["--dry-run"] : [])], { cwd: root, stdio: "inherit", env: { ...process.env, DEMOBITE_RELEASE: "1" } });
34
39
  if (r.status !== 0) { console.error(`\n${name}@${base.version} did not publish (exit ${r.status}). Published so far: ${published.join(", ") || "none"}. Fix and rerun; npm refuses to republish a version that already landed, so bump the patch if some names went out.`); process.exit(r.status ?? 1); }
35
40
  published.push(name);
36
41
  }
@@ -38,7 +43,21 @@ try {
38
43
  fs.writeFileSync(pkgPath, original);
39
44
  }
40
45
  if (dryRun) { console.log(`\nDry run ok for ${NAMES.join(", ")} at ${base.version}.`); process.exit(0); }
41
- console.log(`\nPublished ${NAMES.join(", ")} at ${base.version}. Verifying the registry…`);
46
+ console.log(`\nPublished ${NAMES.join(", ")} at ${base.version} under the holding tag. Waiting for the tarballs, then moving latest…`);
47
+ const sleep = (ms) => new Promise((res) => setTimeout(res, ms));
48
+ for (const name of NAMES) {
49
+ const url = `https://registry.npmjs.org/${name}/${base.version}`;
50
+ let ok = false;
51
+ for (let i = 0; i < 36 && !ok; i++) {
52
+ try { ok = (await fetch(url + `?t=${Date.now()}`, { cache: "no-store" })).status === 200; } catch { ok = false; }
53
+ if (!ok) await sleep(10000);
54
+ }
55
+ if (!ok) { console.error(` ✗ ${name}@${base.version} not downloadable after 6 minutes — latest NOT moved. Check the registry, then: npm dist-tag add ${name}@${base.version} latest`); process.exitCode = 1; continue; }
56
+ const t = spawnSync("npm", ["dist-tag", "add", `${name}@${base.version}`, "latest"], { cwd: root, stdio: "inherit" });
57
+ if (t.status !== 0) { console.error(` ✗ could not move latest for ${name}; run: npm dist-tag add ${name}@${base.version} latest`); process.exitCode = 1; }
58
+ else console.log(` ✓ ${name}@${base.version} downloadable — latest moved`);
59
+ }
60
+ console.log(`Verifying the registry…`);
42
61
  let bad = false;
43
62
  for (const name of NAMES) {
44
63
  const v = spawnSync("npm", ["view", `${name}@${base.version}`, "version"], { encoding: "utf8" }).stdout.trim();
package/skill/SKILL.md CHANGED
@@ -88,6 +88,8 @@ Write the answers to `.recorder/config.json` and never ask again:
88
88
 
89
89
  ## Phase 1a: The address and the sign-in — in the FIRST reply
90
90
 
91
+ The plugin's record door does this step BEFORE loading this file (so the window opens within seconds, not after you have read these pages). If `signin.mjs --check <url>` already says "session", or the window is already open, skip this phase — never ask the sign-in question twice.
92
+
91
93
  Work out the starting address yourself, in seconds: the person's words if they named one, else `url` in `.recorder/config.json`, else the codebase (the app's dev server, the route the brief points at). Then:
92
94
 
93
95
  ```bash