@wix/himalaya-cli 0.1597.0 → 0.1599.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 (27) hide show
  1. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/sdk/legacy-import/src/index.d.ts +30 -0
  2. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/sdk/sdk-types/src/capabilities.generated.d.ts +2 -1
  3. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/sdk/webview-page/src/capabilities.generated.d.ts +2 -0
  4. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/ts/src/define-app.d.ts +12 -1
  5. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/ts/src/legacy-import.d.ts +134 -0
  6. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/audio-record.mjs +1 -0
  7. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/calendar.mjs +1 -0
  8. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/calls.mjs +1 -0
  9. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/contacts.mjs +1 -0
  10. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/core.mjs +184 -16
  11. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/legacy-import.mjs +40 -0
  12. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/location.mjs +1 -0
  13. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/motion.mjs +1 -0
  14. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/photos.mjs +1 -0
  15. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/sdk-types.mjs +1 -0
  16. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/tasks.mjs +1 -0
  17. package/dist/authoring-runtime/node_modules/@wix/himalaya/package.json +4 -0
  18. package/dist/cli.mjs +641 -510
  19. package/dist/preview-assets.generated.bin +0 -0
  20. package/guides/app-config.md +1 -1
  21. package/guides/capabilities.md +1 -0
  22. package/guides/importable-sdks.md +1 -0
  23. package/guides/qa-builds.md +43 -1
  24. package/guides/sdk-reference.json +43 -0
  25. package/guides/web-page-native-sdk.md +1 -1
  26. package/guides/web-page-sdk-reference.md +1 -0
  27. package/package.json +2 -2
package/dist/cli.mjs CHANGED
@@ -38,8 +38,8 @@ var init_define_HHP_CATALOG = __esm({
38
38
  "<define:__HHP_CATALOG__>"() {
39
39
  define_HHP_CATALOG_default = {
40
40
  encoding: "gzip-base64",
41
- sha256: "1dced161ffad2e1eb2615f4ddd8f5706857643b02c0cfb67d9b6ff605155551a",
42
- data: "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"
41
+ sha256: "62f409944e6e4fc7356d2ce53520f71b4631dc67513c6f6671a01134c5808956",
42
+ data: "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"
43
43
  };
44
44
  }
45
45
  });
@@ -1821,7 +1821,7 @@ function sentinelizeIdentity(body, identity) {
1821
1821
  }
1822
1822
  if (identity.name) {
1823
1823
  const re2 = new RegExp(`\\b(${NAME_FIELDS.join("|")})(["']?\\s*[:=]\\s*)(["'])${escapeRe(identity.name)}\\3`, "g");
1824
- out2 = out2.replace(re2, (_m, key3, sep24, q3) => `${key3}${sep24}${q3}__HIMI_APP_NAME__${q3}`);
1824
+ out2 = out2.replace(re2, (_m, key3, sep26, q3) => `${key3}${sep26}${q3}__HIMI_APP_NAME__${q3}`);
1825
1825
  }
1826
1826
  return out2;
1827
1827
  }
@@ -3339,7 +3339,7 @@ function distJobSpec(req) {
3339
3339
  // not get to answer a per-shell question.
3340
3340
  ...req.provisioningEnv ? { HIMI_DIST_PROVISIONING_ENV: req.provisioningEnv } : {}
3341
3341
  };
3342
- const command = `dist:${req.platform} ${DIST_PARAMS_FLAG} ${encodeDistParams(envVars)}`;
3342
+ const command = `${req.runner === "linux" ? "linux:" : ""}dist:${req.platform} ${DIST_PARAMS_FLAG} ${encodeDistParams(envVars)}`;
3343
3343
  if (command.length > MAX_COMMAND_CHARS) {
3344
3344
  throw new Error(
3345
3345
  `dist command is ${command.length} chars (cap ${MAX_COMMAND_CHARS}); shrink the job env \u2014 pass large values as a URL the Mac job fetches, as the brand contract does`
@@ -3547,7 +3547,7 @@ var init_dist_jobs = __esm({
3547
3547
  DEFAULT_DIST_SIGNING = "wix-managed";
3548
3548
  WIX_MANAGED_SIGNING_ALIASES = ["wix-managed", "wix", "pool-enterprise"];
3549
3549
  DEFAULT_ANDROID_SIGNING = "qa-keystore";
3550
- ANDROID_SIGNING_POLICIES = ["qa-keystore", "wix-keystore", "debug", "oneapp-debug"];
3550
+ ANDROID_SIGNING_POLICIES = ["qa-keystore", "wix-keystore", "debug", "oneapp-debug", "unsigned"];
3551
3551
  ANDROID_SIGNING_ALIASES = {
3552
3552
  // The canonical spellings, derived so the two lists cannot drift apart.
3553
3553
  ...Object.fromEntries(ANDROID_SIGNING_POLICIES.map((p2) => [p2, p2])),
@@ -3556,7 +3556,9 @@ var init_dist_jobs = __esm({
3556
3556
  wix: "wix-keystore",
3557
3557
  oneapp: "wix-keystore",
3558
3558
  "one-app-debug": "oneapp-debug",
3559
- oneappdebug: "oneapp-debug"
3559
+ oneappdebug: "oneapp-debug",
3560
+ // The CLI's word for an owner bundle. `unsigned` is the fact about the file, which the pool reports.
3561
+ owner: "unsigned"
3560
3562
  };
3561
3563
  DEFAULT_ANDROID_FORMAT = "apk";
3562
3564
  ANDROID_FORMATS = ["apk", "aab"];
@@ -3595,8 +3597,8 @@ function committedProvisioningPath(name) {
3595
3597
  function committedShellFor(path2) {
3596
3598
  const normalized = path2.replace(/\\/g, "/");
3597
3599
  return SHELL_NAMES.find((name) => {
3598
- const relative26 = committedProvisioningPath(name);
3599
- return normalized === relative26 || normalized.endsWith(`/${relative26}`);
3600
+ const relative27 = committedProvisioningPath(name);
3601
+ return normalized === relative27 || normalized.endsWith(`/${relative27}`);
3600
3602
  });
3601
3603
  }
3602
3604
  function isBrandable(repoRoot2, name) {
@@ -4993,8 +4995,8 @@ var init_catalog_cache = __esm({
4993
4995
 
4994
4996
  // ../authoring-kit/ensure-authoring-client.mjs
4995
4997
  import { spawnSync as spawnSync2 } from "node:child_process";
4996
- import { existsSync as existsSync5, readdirSync as readdirSync4, readFileSync as readFileSync6, renameSync as renameSync2, rmSync as rmSync2, writeFileSync as writeFileSync4 } from "node:fs";
4997
- import { basename as basename2, dirname as dirname6, join as join7, resolve as resolve4 } from "node:path";
4998
+ import { existsSync as existsSync5, lstatSync as lstatSync3, mkdirSync as mkdirSync4, readdirSync as readdirSync4, readFileSync as readFileSync6, renameSync as renameSync2, rmSync as rmSync2, writeFileSync as writeFileSync4 } from "node:fs";
4999
+ import { basename as basename2, dirname as dirname6, join as join7, relative, resolve as resolve4, sep as sep3 } from "node:path";
4998
5000
  import { fileURLToPath as fileURLToPath3 } from "node:url";
4999
5001
  function aggregatesStamp(root = REPO) {
5000
5002
  return resolve4(root, "tools/authoring-kit/aggregates.stamp.json");
@@ -5063,7 +5065,7 @@ __export(guides_exports, {
5063
5065
  withReferenceCache: () => withReferenceCache,
5064
5066
  writeAgentContext: () => writeAgentContext
5065
5067
  });
5066
- import { readFileSync as readFileSync7, existsSync as existsSync6, mkdirSync as mkdirSync4, writeFileSync as writeFileSync5, lstatSync as lstatSync3, readdirSync as readdirSync5, renameSync as renameSync3, rmdirSync } from "node:fs";
5068
+ import { readFileSync as readFileSync7, existsSync as existsSync6, mkdirSync as mkdirSync5, writeFileSync as writeFileSync5, lstatSync as lstatSync4, readdirSync as readdirSync5, renameSync as renameSync3, rmdirSync } from "node:fs";
5067
5069
  import { fileURLToPath as fileURLToPath4 } from "node:url";
5068
5070
  import { dirname as dirname7, join as join8, resolve as resolve5 } from "node:path";
5069
5071
  import { AsyncLocalStorage } from "node:async_hooks";
@@ -5283,8 +5285,8 @@ function removeLegacyRootCopies(targetDir) {
5283
5285
  for (const rel of legacy) {
5284
5286
  const p2 = linkFreeTarget(targetDir, rel);
5285
5287
  const dest = linkFreeTarget(targetDir, `.himi/legacy-agent-files/${rel}`);
5286
- if (p2 && dest && existsSync6(p2) && lstatSync3(p2).isFile()) {
5287
- mkdirSync4(dirname7(dest), { recursive: true });
5288
+ if (p2 && dest && existsSync6(p2) && lstatSync4(p2).isFile()) {
5289
+ mkdirSync5(dirname7(dest), { recursive: true });
5288
5290
  renameSync3(p2, existsSync6(dest) ? `${dest}.${Date.now()}` : dest);
5289
5291
  removed.push(rel);
5290
5292
  }
@@ -5298,7 +5300,7 @@ function linkFreeTarget(dir, rel) {
5298
5300
  for (const part4 of rel.split(/[\\/]+/).filter(Boolean)) {
5299
5301
  at2 = join8(at2, part4);
5300
5302
  try {
5301
- if (lstatSync3(at2).isSymbolicLink()) return null;
5303
+ if (lstatSync4(at2).isSymbolicLink()) return null;
5302
5304
  } catch (e2) {
5303
5305
  if (e2.code === "ENOENT") break;
5304
5306
  return null;
@@ -5327,20 +5329,20 @@ function writeAgentContext(targetDir, opts = {}) {
5327
5329
  const write2 = (rel, body) => {
5328
5330
  const p2 = target(rel);
5329
5331
  if (!p2) return;
5330
- mkdirSync4(dirname7(p2), { recursive: true });
5332
+ mkdirSync5(dirname7(p2), { recursive: true });
5331
5333
  writeFileSync5(p2, body);
5332
5334
  files.push(rel);
5333
5335
  };
5334
5336
  const copy = (srcRel, destRel) => {
5335
5337
  const p2 = target(destRel);
5336
5338
  if (!p2) return;
5337
- mkdirSync4(dirname7(p2), { recursive: true });
5339
+ mkdirSync5(dirname7(p2), { recursive: true });
5338
5340
  writeFileSync5(p2, readReference(srcRel));
5339
5341
  files.push(destRel);
5340
5342
  };
5341
5343
  const writeIfMissing = (rel, body) => {
5342
5344
  try {
5343
- lstatSync3(join8(targetDir, rel));
5345
+ lstatSync4(join8(targetDir, rel));
5344
5346
  return;
5345
5347
  } catch {
5346
5348
  write2(rel, body);
@@ -6761,9 +6763,9 @@ function compileV2(html, profile, options) {
6761
6763
  if (!row2) error(el2, "HHP-BINDING-SCOPE", "Item bindings require a keyed list template.");
6762
6764
  return raw;
6763
6765
  }
6764
- const relative26 = statePath(raw);
6765
- if (!info4?.paths.has(relative26)) error(el2, "HHP-BINDING-PATH", `Unknown controller state path ${relative26}.`);
6766
- return `$service:${serviceName}.${relative26}`;
6766
+ const relative27 = statePath(raw);
6767
+ if (!info4?.paths.has(relative27)) error(el2, "HHP-BINDING-PATH", `Unknown controller state path ${relative27}.`);
6768
+ return `$service:${serviceName}.${relative27}`;
6767
6769
  }
6768
6770
  const read = (value2, dotted) => dotted.split(".").reduce((current, key3) => current && typeof current === "object" && Object.hasOwn(current, key3) ? current[key3] : void 0, value2);
6769
6771
  function rowValues(row2, raw) {
@@ -7403,8 +7405,8 @@ __export(progress_exports, {
7403
7405
  import { spawn } from "node:child_process";
7404
7406
  import { createHash as createHash4 } from "node:crypto";
7405
7407
  import { randomUUID as randomUUID2 } from "node:crypto";
7406
- import { appendFileSync, closeSync, existsSync as existsSync7, lstatSync as lstatSync4, mkdirSync as mkdirSync5, openSync, readdirSync as readdirSync6, readFileSync as readFileSync9, readSync, renameSync as renameSync4, rmSync as rmSync3, statSync as statSync2, writeFileSync as writeFileSync6 } from "node:fs";
7407
- import { isAbsolute, join as join9, relative, resolve as resolve6, sep as sep3 } from "node:path";
7408
+ import { appendFileSync, closeSync, existsSync as existsSync7, lstatSync as lstatSync5, mkdirSync as mkdirSync6, openSync, readdirSync as readdirSync6, readFileSync as readFileSync9, readSync, renameSync as renameSync4, rmSync as rmSync3, statSync as statSync2, writeFileSync as writeFileSync6 } from "node:fs";
7409
+ import { isAbsolute, join as join9, relative as relative2, resolve as resolve6, sep as sep4 } from "node:path";
7408
7410
  function agentCovers(agent, cli) {
7409
7411
  if (isCliEntry(agent)) return false;
7410
7412
  const agentShas = shasOf(agent.images);
@@ -7458,11 +7460,11 @@ function realDirIn(dir, rel) {
7458
7460
  for (const part4 of rel.split(/[\\/]+/).filter(Boolean)) {
7459
7461
  at2 = join9(at2, part4);
7460
7462
  try {
7461
- if (!lstatSync4(at2).isDirectory()) return null;
7463
+ if (!lstatSync5(at2).isDirectory()) return null;
7462
7464
  } catch (e2) {
7463
7465
  if (e2.code !== "ENOENT") return null;
7464
- mkdirSync5(at2);
7465
- if (!lstatSync4(at2).isDirectory()) return null;
7466
+ mkdirSync6(at2);
7467
+ if (!lstatSync5(at2).isDirectory()) return null;
7466
7468
  }
7467
7469
  }
7468
7470
  return at2;
@@ -7479,7 +7481,7 @@ function writeFileAtomic(file2, content) {
7479
7481
  }
7480
7482
  function isSymlink(file2) {
7481
7483
  try {
7482
- return lstatSync4(file2).isSymbolicLink();
7484
+ return lstatSync5(file2).isSymbolicLink();
7483
7485
  } catch {
7484
7486
  return false;
7485
7487
  }
@@ -7521,7 +7523,7 @@ function appendProgress(dir, input) {
7521
7523
  return entry;
7522
7524
  }
7523
7525
  function packageRelative(dir, p2) {
7524
- const rel = relative(dir, resolve6(p2));
7526
+ const rel = relative2(dir, resolve6(p2));
7525
7527
  return rel && !rel.startsWith("..") && !isAbsolute(rel) ? toPosix(rel) : null;
7526
7528
  }
7527
7529
  function endsWithNewline(file2) {
@@ -7683,7 +7685,7 @@ function carryPlanningJournal(parentDir, appDir3) {
7683
7685
  if (existsSync7(join9(parentDir, "himalaya.content.json"))) return [];
7684
7686
  const src = join9(parentDir, ".himi");
7685
7687
  try {
7686
- if (!lstatSync4(src).isDirectory()) return [];
7688
+ if (!lstatSync5(src).isDirectory()) return [];
7687
7689
  } catch {
7688
7690
  return [];
7689
7691
  }
@@ -7700,12 +7702,12 @@ function carryPlanningJournal(parentDir, appDir3) {
7700
7702
  const hist = join9(parentDir, HISTORY_DIR);
7701
7703
  let names2 = [];
7702
7704
  try {
7703
- if (lstatSync4(hist).isDirectory()) names2 = readdirSync6(hist);
7705
+ if (lstatSync5(hist).isDirectory()) names2 = readdirSync6(hist);
7704
7706
  } catch {
7705
7707
  }
7706
7708
  for (const name of names2) {
7707
7709
  const from = join9(hist, name);
7708
- if (isSymlink(from) || !lstatSync4(from).isFile()) continue;
7710
+ if (isSymlink(from) || !lstatSync5(from).isFile()) continue;
7709
7711
  const bytes2 = readFileSync9(from);
7710
7712
  archiveBytes(appDir3, bytes2);
7711
7713
  }
@@ -7717,7 +7719,7 @@ function formatBrief(input) {
7717
7719
  const who = `himi \u2014 ${input.appName ?? "this folder"}`;
7718
7720
  const lines = [];
7719
7721
  if (!summary2.count) {
7720
- lines.push(`${who}: no journey journal yet (${PROGRESS_FILE.split(sep3).join("/")}).`);
7722
+ lines.push(`${who}: no journey journal yet (${PROGRESS_FILE.split(sep4).join("/")}).`);
7721
7723
  lines.push(
7722
7724
  'A new app starts with discovery (step 1). An app built before journaling existed continues from its current state instead: confirm with the customer that its SPEC.md was approved rather than re-running discovery. Either way, journal each milestone with `himi progress "<what changed>" --step <n>` so the next session can pick up from it.'
7723
7725
  );
@@ -7799,7 +7801,7 @@ function appLabel(dir) {
7799
7801
  }
7800
7802
  function journalPath(dir) {
7801
7803
  const abs = join9(dir, PROGRESS_FILE);
7802
- const rel = relative(process.cwd(), abs);
7804
+ const rel = relative2(process.cwd(), abs);
7803
7805
  return rel && !rel.startsWith("..") ? rel : abs;
7804
7806
  }
7805
7807
  var JOURNEY_STEPS, CLI_AUTHOR, AUTO_MILESTONES, MILESTONE_STEP, AGENT_WINS_WITHIN_MS, isCliEntry, shasOf, PROGRESS_FILE, HISTORY_DIR, APPROVALS_FILE, APPROVAL_GATES, MAX_MESSAGE_CHARS, MAX_IMAGE_BYTES, ProgressError, toPosix, UnsafeHimiDirError, SECRET_SHAPES, looksSecret, REF_SHAPE, gateLabel, minute, NOTIFY_TIMEOUT_MS;
@@ -7833,7 +7835,7 @@ var init_progress = __esm({
7833
7835
  this.code = code;
7834
7836
  }
7835
7837
  };
7836
- toPosix = (p2) => p2.split(sep3).join("/");
7838
+ toPosix = (p2) => p2.split(sep4).join("/");
7837
7839
  UnsafeHimiDirError = class extends Error {
7838
7840
  constructor(rel) {
7839
7841
  super(`${rel} is not a real directory inside the content package (a symlink?) \u2014 refusing to write through it`);
@@ -8520,7 +8522,7 @@ var init_run_identity = __esm({
8520
8522
 
8521
8523
  // src/mcp/preview.ts
8522
8524
  import { spawn as nodeSpawn } from "node:child_process";
8523
- import { closeSync as closeSync2, constants as fsc, existsSync as existsSync8, lstatSync as lstatSync5, mkdirSync as mkdirSync6, openSync as openSync2, readFileSync as readFileSync10, rmSync as rmSync4 } from "node:fs";
8525
+ import { closeSync as closeSync2, constants as fsc, existsSync as existsSync8, lstatSync as lstatSync6, mkdirSync as mkdirSync7, openSync as openSync2, readFileSync as readFileSync10, rmSync as rmSync4 } from "node:fs";
8524
8526
  import { createServer } from "node:net";
8525
8527
  import { basename as basename3, join as join10 } from "node:path";
8526
8528
  function previewPortFor(appName2) {
@@ -8570,14 +8572,14 @@ async function recordState(dir, r3, deps) {
8570
8572
  }
8571
8573
  function openPreviewLog(dir, name = "preview.log") {
8572
8574
  const himiDir2 = join10(dir, ".himi");
8573
- if (existsSync8(himiDir2) && !lstatSync5(himiDir2).isDirectory()) {
8575
+ if (existsSync8(himiDir2) && !lstatSync6(himiDir2).isDirectory()) {
8574
8576
  throw new PreviewStartError(`${himiDir2} is not a real directory (a symlink?) \u2014 refusing to write the preview log through it`, "");
8575
8577
  }
8576
- mkdirSync6(himiDir2, { recursive: true });
8578
+ mkdirSync7(himiDir2, { recursive: true });
8577
8579
  const path2 = join10(himiDir2, name);
8578
8580
  let existing;
8579
8581
  try {
8580
- existing = lstatSync5(path2);
8582
+ existing = lstatSync6(path2);
8581
8583
  } catch {
8582
8584
  }
8583
8585
  if (existing?.isDirectory()) {
@@ -8745,7 +8747,7 @@ var init_preview = __esm({
8745
8747
  });
8746
8748
 
8747
8749
  // src/mcp/client-configs.ts
8748
- import { dirname as dirname8, relative as relative2, resolve as resolve8, sep as sep4 } from "node:path";
8750
+ import { dirname as dirname8, relative as relative3, resolve as resolve8, sep as sep5 } from "node:path";
8749
8751
  import { fileURLToPath as fileURLToPath5 } from "node:url";
8750
8752
  function sourceCheckout(moduleUrl = import.meta.url) {
8751
8753
  if (!moduleUrl.endsWith(".ts")) return null;
@@ -8843,8 +8845,8 @@ var init_client_configs = __esm({
8843
8845
  NPM_PACKAGE = HIMI_NPM_PACKAGE;
8844
8846
  HERE2 = dirname8(fileURLToPath5(import.meta.url));
8845
8847
  inside = (child, parent) => {
8846
- const rel = relative2(parent, child);
8847
- return rel === "" || !rel.startsWith("..") && !rel.startsWith(sep4) && !/^[A-Za-z]:/.test(rel);
8848
+ const rel = relative3(parent, child);
8849
+ return rel === "" || !rel.startsWith("..") && !rel.startsWith(sep5) && !/^[A-Za-z]:/.test(rel);
8848
8850
  };
8849
8851
  same = (a2, b2) => JSON.stringify(a2) === JSON.stringify(b2);
8850
8852
  out = (o2) => `${JSON.stringify(o2, null, 2)}
@@ -8875,7 +8877,7 @@ __export(agent_context_exports, {
8875
8877
  withoutBlock: () => withoutBlock,
8876
8878
  writeAgentLayer: () => writeAgentLayer
8877
8879
  });
8878
- import { existsSync as existsSync9, lstatSync as lstatSync6, mkdirSync as mkdirSync7, readFileSync as readFileSync11, realpathSync as realpathSync2, writeFileSync as writeFileSync7 } from "node:fs";
8880
+ import { existsSync as existsSync9, lstatSync as lstatSync7, mkdirSync as mkdirSync8, readFileSync as readFileSync11, realpathSync as realpathSync2, writeFileSync as writeFileSync7 } from "node:fs";
8879
8881
  import { dirname as dirname9, join as join11 } from "node:path";
8880
8882
  function beginMarker(version5) {
8881
8883
  return `${BLOCK_BEGIN} v=${version5} \u2014 written by \`himi agent-init\`; edit OUTSIDE this block, it is replaced on refresh -->`;
@@ -8962,7 +8964,7 @@ perform the step. Reading the pages of a site the customer already published nee
8962
8964
  }
8963
8965
  function claudeLinksToAgents(dir) {
8964
8966
  try {
8965
- if (!lstatSync6(join11(dir, "CLAUDE.md")).isSymbolicLink()) return false;
8967
+ if (!lstatSync7(join11(dir, "CLAUDE.md")).isSymbolicLink()) return false;
8966
8968
  return realpathSync2(join11(dir, "CLAUDE.md")) === realpathSync2(join11(dir, "AGENTS.md"));
8967
8969
  } catch {
8968
8970
  return false;
@@ -9052,7 +9054,7 @@ function writeAgentLayer(dir, opts) {
9052
9054
  skipped.push({ file: posix(rel), reason: LINKED_PATH_REASON });
9053
9055
  return;
9054
9056
  }
9055
- mkdirSync7(dirname9(p2), { recursive: true });
9057
+ mkdirSync8(dirname9(p2), { recursive: true });
9056
9058
  if (readOrNull(p2) !== body) writeFileSync7(p2, body);
9057
9059
  files.push(posix(rel));
9058
9060
  };
@@ -9225,8 +9227,8 @@ __export(build_lib_exports, {
9225
9227
  umbrellaRewritePlugin: () => umbrellaRewritePlugin
9226
9228
  });
9227
9229
  import { fileURLToPath as fileURLToPath6, pathToFileURL } from "node:url";
9228
- import { basename as basename4, dirname as dirname10, join as join12, resolve as resolve9, sep as sep5 } from "node:path";
9229
- import { readdirSync as readdirSync7, existsSync as existsSync10, mkdirSync as mkdirSync8, readFileSync as readFileSync12, realpathSync as realpathSync3, statSync as statSync3, writeFileSync as writeFileSync8 } from "node:fs";
9230
+ import { basename as basename4, dirname as dirname10, join as join12, resolve as resolve9, sep as sep6 } from "node:path";
9231
+ import { readdirSync as readdirSync7, existsSync as existsSync10, mkdirSync as mkdirSync9, readFileSync as readFileSync12, realpathSync as realpathSync3, statSync as statSync3, writeFileSync as writeFileSync8 } from "node:fs";
9230
9232
  async function loadCompiler() {
9231
9233
  try {
9232
9234
  const nativeCompiler = ["es", "build"].join("");
@@ -9273,7 +9275,7 @@ function realpathOrSelf(p2) {
9273
9275
  }
9274
9276
  }
9275
9277
  function isUnder(p2, root) {
9276
- return p2 === root || p2.startsWith(root + sep5);
9278
+ return p2 === root || p2.startsWith(root + sep6);
9277
9279
  }
9278
9280
  function confinementRoots(contentRoot2) {
9279
9281
  const roots2 = /* @__PURE__ */ new Set();
@@ -9563,7 +9565,7 @@ function tsExtResolvePlugin() {
9563
9565
  }
9564
9566
  function importMetaUrlPlugin({ scope: scope2 } = {}) {
9565
9567
  const scopes = scope2 ? [.../* @__PURE__ */ new Set([realpathOrSelf(scope2), resolve9(scope2)])] : [];
9566
- const inScope = (p2) => scopes.some((r3) => p2 === r3 || p2.startsWith(r3 + sep5));
9568
+ const inScope = (p2) => scopes.some((r3) => p2 === r3 || p2.startsWith(r3 + sep6));
9567
9569
  return {
9568
9570
  name: "himalaya-import-meta-url",
9569
9571
  setup(b2) {
@@ -9624,7 +9626,7 @@ async function buildBundle(name, opts = {}) {
9624
9626
  } catch {
9625
9627
  }
9626
9628
  if (same3) continue;
9627
- mkdirSync8(dirname10(file2.path), { recursive: true });
9629
+ mkdirSync9(dirname10(file2.path), { recursive: true });
9628
9630
  writeFileSync8(file2.path, file2.contents);
9629
9631
  }
9630
9632
  return name;
@@ -10276,7 +10278,7 @@ var init_tier5_dir = __esm({
10276
10278
 
10277
10279
  // src/tier5-typecheck.ts
10278
10280
  import { existsSync as existsSync11, readFileSync as readFileSync13 } from "node:fs";
10279
- import { relative as relative3, resolve as resolve11, sep as sep6 } from "node:path";
10281
+ import { relative as relative4, resolve as resolve11, sep as sep7 } from "node:path";
10280
10282
  import { pathToFileURL as pathToFileURL2 } from "node:url";
10281
10283
  async function loadTypeScript() {
10282
10284
  const runtime = process.env.HIMI_AUTHORING_RUNTIME_DIR;
@@ -10315,7 +10317,7 @@ function pathsFor(options) {
10315
10317
  return declarationPaths(options.umbrellaDir);
10316
10318
  }
10317
10319
  function relativeFile(contentDir2, fileName) {
10318
- return relative3(contentDir2, fileName).split(sep6).join("/");
10320
+ return relative4(contentDir2, fileName).split(sep7).join("/");
10319
10321
  }
10320
10322
  function belongsToContentWorkers(contentDir2, diagnostic) {
10321
10323
  if (!diagnostic.file) return true;
@@ -10501,8 +10503,8 @@ var init_provisioning_facts = __esm({
10501
10503
 
10502
10504
  // ../../core/dev-server/src/app-assets.ts
10503
10505
  import { createHash as createHash6 } from "node:crypto";
10504
- import { existsSync as existsSync12, lstatSync as lstatSync7, readFileSync as readFileSync15, readdirSync as readdirSync9, realpathSync as realpathSync4, statSync as statSync4 } from "node:fs";
10505
- import { join as join13, resolve as resolve13, sep as sep7 } from "node:path";
10506
+ import { existsSync as existsSync12, lstatSync as lstatSync8, readFileSync as readFileSync15, readdirSync as readdirSync9, realpathSync as realpathSync4, statSync as statSync4 } from "node:fs";
10507
+ import { join as join13, resolve as resolve13, sep as sep8 } from "node:path";
10506
10508
  function contentTypeFor(name) {
10507
10509
  const ext = name.includes(".") ? name.slice(name.lastIndexOf(".") + 1).toLowerCase() : "";
10508
10510
  return CONTENT_TYPES[ext] ?? "application/octet-stream";
@@ -10523,7 +10525,7 @@ function findAssetsDir(appDir3) {
10523
10525
  const rel = typeof declared === "string" && declared ? declared : "assets";
10524
10526
  const abs = resolve13(appDir3, rel);
10525
10527
  const base = resolve13(appDir3);
10526
- if (abs !== base && !abs.startsWith(base + sep7)) return null;
10528
+ if (abs !== base && !abs.startsWith(base + sep8)) return null;
10527
10529
  return existsSync12(abs) && statSync4(abs).isDirectory() ? abs : null;
10528
10530
  }
10529
10531
  function readOtaOnlyPatterns(appDir3) {
@@ -10579,9 +10581,9 @@ function collectBrandFonts(appDir3) {
10579
10581
  if (rel.startsWith("/") || rel.split("/").includes("..")) continue;
10580
10582
  const path2 = join13(appDir3, rel);
10581
10583
  try {
10582
- if (!lstatSync7(path2).isFile()) continue;
10584
+ if (!lstatSync8(path2).isFile()) continue;
10583
10585
  const root = realpathSync4(appDir3);
10584
- if (!realpathSync4(path2).startsWith(root + sep7)) continue;
10586
+ if (!realpathSync4(path2).startsWith(root + sep8)) continue;
10585
10587
  } catch {
10586
10588
  continue;
10587
10589
  }
@@ -15063,6 +15065,7 @@ function webViewOriginAllowed(url, origins) {
15063
15065
  }
15064
15066
  var init_webview_origin = __esm({
15065
15067
  "../../core/ts/src/webview-origin.ts"() {
15068
+ "use strict";
15066
15069
  init_define_HHP_CATALOG();
15067
15070
  }
15068
15071
  });
@@ -15701,8 +15704,8 @@ function textOf(node) {
15701
15704
  function plainText(node) {
15702
15705
  if (typeOf2(node) === "TEXT") return str(at(node, "textData", "text"));
15703
15706
  const children = kids(node).filter(isObj);
15704
- const sep24 = children.every((c2) => typeOf2(c2) === "TEXT") ? "" : "\n";
15705
- return children.map(plainText).join(sep24);
15707
+ const sep26 = children.every((c2) => typeOf2(c2) === "TEXT") ? "" : "\n";
15708
+ return children.map(plainText).join(sep26);
15706
15709
  }
15707
15710
  function alignOf(v2) {
15708
15711
  switch (v2) {
@@ -21588,16 +21591,83 @@ var init_contained_dev_module = __esm({
21588
21591
  // ../authoring-kit/ensure-templates.mjs
21589
21592
  import { spawnSync as spawnSync3 } from "node:child_process";
21590
21593
  import { randomUUID as randomUUID3 } from "node:crypto";
21591
- import { existsSync as existsSync15, mkdirSync as mkdirSync9, readFileSync as readFileSync16, readdirSync as readdirSync11, renameSync as renameSync5, rmSync as rmSync5, rmdirSync as rmdirSync2, statSync as statSync5, writeFileSync as writeFileSync9 } from "node:fs";
21592
- import { dirname as dirname11, join as join14, relative as relative4, resolve as resolve15 } from "node:path";
21594
+ import { existsSync as existsSync15, lstatSync as lstatSync9, mkdirSync as mkdirSync10, readFileSync as readFileSync16, readdirSync as readdirSync11, renameSync as renameSync5, rmSync as rmSync5, rmdirSync as rmdirSync2, statSync as statSync5, writeFileSync as writeFileSync9 } from "node:fs";
21595
+ import { dirname as dirname11, isAbsolute as isAbsolute2, join as join14, relative as relative5, resolve as resolve15, sep as sep9 } from "node:path";
21593
21596
  import { fileURLToPath as fileURLToPath9 } from "node:url";
21597
+ function generationBase(outRoot) {
21598
+ const out2 = resolve15(outRoot);
21599
+ const tree = join14(sep9, TEMPLATES_REL);
21600
+ return out2.endsWith(tree) ? join14(out2.slice(0, -tree.length), GENERATION_REL, "templates") : out2;
21601
+ }
21594
21602
  function stampPath(outRoot) {
21595
- return `${outRoot}.stamp.json`;
21603
+ return `${generationBase(outRoot)}.stamp.json`;
21596
21604
  }
21597
21605
  function head(root) {
21598
21606
  const r3 = spawnSync3("git", ["rev-parse", "HEAD"], { cwd: root, encoding: "utf8" });
21599
21607
  return r3.status === 0 ? r3.stdout.trim() : null;
21600
21608
  }
21609
+ function isLink(path2) {
21610
+ try {
21611
+ return lstatSync9(path2).isSymbolicLink();
21612
+ } catch (e2) {
21613
+ if (e2.code === "ENOENT" || e2.code === "ENOTDIR") return false;
21614
+ throw e2;
21615
+ }
21616
+ }
21617
+ function replaceLinkedRoot(path2, root = REPO2) {
21618
+ const out2 = resolve15(path2);
21619
+ const rel = relative5(root, out2);
21620
+ const outside = rel === ".." || rel.startsWith(`..${sep9}`) || isAbsolute2(rel);
21621
+ if (!outside && rel.split(sep9)[0] !== "node_modules") {
21622
+ for (let dir = dirname11(out2); dir !== root; dir = dirname11(dir)) {
21623
+ if (isLink(dir)) throw new Error(`${relative5(root, dir)} is a symlink: refusing to generate ${rel} through it`);
21624
+ }
21625
+ }
21626
+ if (isLink(out2)) rmSync5(out2);
21627
+ }
21628
+ function sweepLegacyGeneration(out2) {
21629
+ rmSync5(`${out2}.stamp.json`, { force: true });
21630
+ const lock = `${out2}.lock`;
21631
+ let held = false;
21632
+ try {
21633
+ held = lockAlive(lock, readOwner(lock));
21634
+ } catch {
21635
+ }
21636
+ if (!held) rmSync5(lock, { recursive: true, force: true });
21637
+ const mutex = `${lock}.takeover`;
21638
+ try {
21639
+ if (isLink(mutex) || Date.now() - statSync5(mutex).mtimeMs > PIDLESS_LOCK_GRACE_MS) rmSync5(mutex, { recursive: true, force: true });
21640
+ } catch {
21641
+ }
21642
+ const staging = `${out2}.staging`;
21643
+ if (isLink(staging)) return void rmSync5(staging);
21644
+ let staged;
21645
+ try {
21646
+ staged = readdirSync11(staging);
21647
+ } catch {
21648
+ return;
21649
+ }
21650
+ for (const name of staged) {
21651
+ const run2 = /\.build-(\d+)$/.exec(name);
21652
+ if (run2 && processAlive(Number(run2[1]))) continue;
21653
+ rmSync5(join14(staging, name), { recursive: true, force: true });
21654
+ }
21655
+ try {
21656
+ rmdirSync2(staging);
21657
+ } catch (e2) {
21658
+ if (!["ENOENT", "ENOTEMPTY", "EEXIST"].includes(e2.code)) throw e2;
21659
+ }
21660
+ }
21661
+ function prepareGeneration(outRoot, root = REPO2) {
21662
+ const out2 = resolve15(outRoot);
21663
+ replaceLinkedRoot(out2, root);
21664
+ const real = generationBase(out2) !== out2;
21665
+ if (real) replaceLinkedRoot(dirname11(generationBase(out2)), root);
21666
+ for (const path2 of [stagingRoot(out2), lockPath(out2), `${lockPath(out2)}.takeover`, stampPath(out2)]) {
21667
+ if (isLink(path2)) rmSync5(path2);
21668
+ }
21669
+ if (real) sweepLegacyGeneration(out2);
21670
+ }
21601
21671
  function templatesReady(root = REPO2) {
21602
21672
  const out2 = resolve15(root, TEMPLATES_REL);
21603
21673
  if (!existsSync15(out2) || !existsSync15(stampPath(out2))) return false;
@@ -21610,8 +21680,11 @@ function templatesReady(root = REPO2) {
21610
21680
  const now = head(root);
21611
21681
  return now === null || stamp.head === now;
21612
21682
  }
21683
+ function stagingRoot(outRoot) {
21684
+ return `${generationBase(outRoot)}.staging`;
21685
+ }
21613
21686
  function lockPath(outRoot) {
21614
- return `${outRoot}.lock`;
21687
+ return `${generationBase(outRoot)}.lock`;
21615
21688
  }
21616
21689
  function processAlive(pid) {
21617
21690
  if (!Number.isInteger(pid) || pid <= 0) return false;
@@ -21637,7 +21710,7 @@ function lockAlive(lock, owner) {
21637
21710
  function tryLock(lock, token) {
21638
21711
  for (; ; ) {
21639
21712
  try {
21640
- mkdirSync9(lock);
21713
+ mkdirSync10(lock);
21641
21714
  writeFileSync9(join14(lock, "pid"), token);
21642
21715
  return true;
21643
21716
  } catch (e2) {
@@ -21653,7 +21726,7 @@ function tryLock(lock, token) {
21653
21726
  if (alive) return false;
21654
21727
  const mutex = `${lock}.takeover`;
21655
21728
  try {
21656
- mkdirSync9(mutex);
21729
+ mkdirSync10(mutex);
21657
21730
  } catch (e2) {
21658
21731
  if (e2.code !== "EEXIST") throw e2;
21659
21732
  try {
@@ -21687,7 +21760,7 @@ ${randomUUID3()}`;
21687
21760
  let waited = false;
21688
21761
  while (!tryLock(lock, token)) {
21689
21762
  if (Date.now() > deadline) {
21690
- throw new Error(`another process has held ${relative4(root, lock)} for over ${Math.round(waitMs / 1e3)}s \u2014 remove it if no generation is running`);
21763
+ throw new Error(`another process has held ${relative5(root, lock)} for over ${Math.round(waitMs / 1e3)}s \u2014 remove it if no generation is running`);
21691
21764
  }
21692
21765
  waited = true;
21693
21766
  sleepSync(LOCK_POLL_MS);
@@ -21706,8 +21779,9 @@ function ensureTemplates({
21706
21779
  if (env[TEMPLATES_FRESH]) return false;
21707
21780
  if (!refresh && templatesReady(root)) return false;
21708
21781
  const out2 = resolve15(root, TEMPLATES_REL);
21709
- mkdirSync9(dirname11(out2), { recursive: true });
21782
+ prepareGeneration(out2, root);
21710
21783
  const lock = lockPath(out2);
21784
+ mkdirSync10(dirname11(lock), { recursive: true });
21711
21785
  const { token, waited } = acquireLock(lock, { root, waitMs });
21712
21786
  try {
21713
21787
  if (waited && templatesReady(root)) return false;
@@ -21729,12 +21803,13 @@ ${(r3.stderr || r3.stdout || "").trim()}`);
21729
21803
  releaseLock(lock, token);
21730
21804
  }
21731
21805
  }
21732
- var REPO2, TEMPLATES_REL, GENERATOR, TEMPLATES_FRESH, PIDLESS_LOCK_GRACE_MS, LOCK_POLL_MS, isMain;
21806
+ var REPO2, TEMPLATES_REL, GENERATION_REL, GENERATOR, TEMPLATES_FRESH, PIDLESS_LOCK_GRACE_MS, LOCK_POLL_MS, isMain;
21733
21807
  var init_ensure_templates = __esm({
21734
21808
  "../authoring-kit/ensure-templates.mjs"() {
21735
21809
  init_define_HHP_CATALOG();
21736
21810
  REPO2 = resolve15(dirname11(fileURLToPath9(import.meta.url)), "../..");
21737
21811
  TEMPLATES_REL = "tools/himi-cli/templates";
21812
+ GENERATION_REL = "tools/.himi-templates";
21738
21813
  GENERATOR = "tools/authoring-kit/gen-templates.mts";
21739
21814
  TEMPLATES_FRESH = "HIMI_TEMPLATES_FRESH";
21740
21815
  PIDLESS_LOCK_GRACE_MS = 3e4;
@@ -21754,8 +21829,8 @@ var init_ensure_templates = __esm({
21754
21829
 
21755
21830
  // ../../core/dev-server/tier5-bundles-src/ensure-bundles.mjs
21756
21831
  import { spawnSync as spawnSync4 } from "node:child_process";
21757
- import { existsSync as existsSync16, mkdirSync as mkdirSync10, readFileSync as readFileSync17, rmSync as rmSync6 } from "node:fs";
21758
- import { dirname as dirname12, relative as relative5, resolve as resolve16 } from "node:path";
21832
+ import { existsSync as existsSync16, mkdirSync as mkdirSync11, readFileSync as readFileSync17, rmSync as rmSync6 } from "node:fs";
21833
+ import { dirname as dirname12, relative as relative6, resolve as resolve16 } from "node:path";
21759
21834
  import { fileURLToPath as fileURLToPath10 } from "node:url";
21760
21835
  function head2(root) {
21761
21836
  const r3 = spawnSync4("git", ["rev-parse", "HEAD"], { cwd: root, encoding: "utf8" });
@@ -21785,7 +21860,7 @@ function ensureBundles({
21785
21860
  if (!existsSync16(resolve16(root, GENERATOR2))) return false;
21786
21861
  if (!refresh && bundlesReady(root)) return false;
21787
21862
  const out2 = resolve16(root, BUNDLES_REL);
21788
- mkdirSync10(dirname12(out2), { recursive: true });
21863
+ mkdirSync11(dirname12(out2), { recursive: true });
21789
21864
  const lock = lockPath(out2);
21790
21865
  const { token, waited } = acquireLock(lock, { root, waitMs });
21791
21866
  try {
@@ -21803,7 +21878,7 @@ function ensureBundles({
21803
21878
  ${(r3.stderr || r3.stdout || "").trim()}`);
21804
21879
  }
21805
21880
  if (!existsSync16(stampPath(out2))) {
21806
- throw new Error(`${GENERATOR2} exited 0 but did not record a complete build in ${relative5(root, stampPath(out2))}`);
21881
+ throw new Error(`${GENERATOR2} exited 0 but did not record a complete build in ${relative6(root, stampPath(out2))}`);
21807
21882
  }
21808
21883
  return true;
21809
21884
  } finally {
@@ -21851,7 +21926,7 @@ __export(loader_exports, {
21851
21926
  });
21852
21927
  import { resolve as resolve17, basename as basename7, dirname as dirname13 } from "node:path";
21853
21928
  import { randomUUID as randomUUID4 } from "node:crypto";
21854
- import { existsSync as existsSync17, readdirSync as readdirSync12, readFileSync as readFileSync18, mkdirSync as mkdirSync11, rmSync as rmSync7 } from "node:fs";
21929
+ import { existsSync as existsSync17, readdirSync as readdirSync12, readFileSync as readFileSync18, mkdirSync as mkdirSync12, rmSync as rmSync7 } from "node:fs";
21855
21930
  import { pathToFileURL as pathToFileURL3, fileURLToPath as fileURLToPath11 } from "node:url";
21856
21931
  function resolveWixWebAuthConfig(app) {
21857
21932
  const auth = app?.meta.auth;
@@ -21894,7 +21969,7 @@ async function devModuleUrl(entry, dir, fresh = false, sourceCopy = false) {
21894
21969
  const direct = !isOffRepo() && hasTypeScriptLoader;
21895
21970
  if (direct && !fresh && !sourceCopy) return { url: pathToFileURL3(entry).href };
21896
21971
  const out2 = resolve17(dir, sourceCopy ? `dist/.himi/dev-source-${randomUUID4()}.mjs` : fresh ? `dist/.himi/dev-${process.pid}-${++freshLoads}.mjs` : "dist/.himi/dev.mjs");
21897
- mkdirSync11(dirname13(out2), { recursive: true });
21972
+ mkdirSync12(dirname13(out2), { recursive: true });
21898
21973
  const buildOptions2 = direct ? { confineTo: dir } : {
21899
21974
  // Plain Node must resolve the published-style umbrella entry points for
21900
21975
  // both standalone and in-repo CLI content. In-repo workspace packages
@@ -22586,6 +22661,7 @@ var init_player_host_manifest = __esm({
22586
22661
  "himi_apps",
22587
22662
  "iap",
22588
22663
  "keyboard",
22664
+ "legacy_import",
22589
22665
  "live_activity",
22590
22666
  "local_database",
22591
22667
  "location",
@@ -22697,7 +22773,7 @@ __export(config_exports2, {
22697
22773
  serializeRolloutYaml: () => serializeRolloutYaml,
22698
22774
  validateOverlayPatch: () => validateOverlayPatch
22699
22775
  });
22700
- import { mkdirSync as mkdirSync12, readFileSync as readFileSync19, writeFileSync as writeFileSync10 } from "node:fs";
22776
+ import { mkdirSync as mkdirSync13, readFileSync as readFileSync19, writeFileSync as writeFileSync10 } from "node:fs";
22701
22777
  import { dirname as dirname14, join as join15, resolve as resolve18 } from "node:path";
22702
22778
  import { fileURLToPath as fileURLToPath12 } from "node:url";
22703
22779
  function strip(line) {
@@ -22825,7 +22901,7 @@ function readJsonAt(app, file2, root) {
22825
22901
  }
22826
22902
  function writeJsonAt(app, file2, root, value2) {
22827
22903
  const path2 = appConfigPath(app, file2, root);
22828
- mkdirSync12(dirname14(path2), { recursive: true });
22904
+ mkdirSync13(dirname14(path2), { recursive: true });
22829
22905
  writeFileSync10(path2, JSON.stringify(value2, null, 2) + "\n");
22830
22906
  return path2;
22831
22907
  }
@@ -23272,19 +23348,19 @@ var init_hhp_command = __esm({
23272
23348
  });
23273
23349
 
23274
23350
  // src/hhp.ts
23275
- import { existsSync as existsSync20, readFileSync as readFileSync21, writeFileSync as writeFileSync11, mkdirSync as mkdirSync13, renameSync as renameSync6, rmSync as rmSync8, lstatSync as lstatSync8, readdirSync as readdirSync14 } from "node:fs";
23276
- import { basename as basename8, dirname as dirname16, resolve as resolve21, relative as relative6, sep as sep8, join as join17 } from "node:path";
23351
+ import { existsSync as existsSync20, readFileSync as readFileSync21, writeFileSync as writeFileSync11, mkdirSync as mkdirSync14, renameSync as renameSync6, rmSync as rmSync8, lstatSync as lstatSync10, readdirSync as readdirSync14 } from "node:fs";
23352
+ import { basename as basename8, dirname as dirname16, resolve as resolve21, relative as relative7, sep as sep10, join as join17 } from "node:path";
23277
23353
  import { createHash as createHash7, randomUUID as randomUUID5 } from "node:crypto";
23278
23354
  import ts3 from "typescript";
23279
23355
  function localPath(root, path2, from = join17(root, "hhp.json")) {
23280
23356
  if (/^[a-z]+:|^\/\//i.test(path2)) throw new Error("HHP source dependencies must be local files.");
23281
- const target = resolve21(dirname16(from), path2), rel = relative6(resolve21(root), target);
23282
- if (rel.startsWith(`..${sep8}`) || rel === ".." || !rel || target === resolve21(root)) throw new Error("HHP source path escapes the app.");
23283
- const components2 = rel.split(sep8);
23357
+ const target = resolve21(dirname16(from), path2), rel = relative7(resolve21(root), target);
23358
+ if (rel.startsWith(`..${sep10}`) || rel === ".." || !rel || target === resolve21(root)) throw new Error("HHP source path escapes the app.");
23359
+ const components2 = rel.split(sep10);
23284
23360
  let current = resolve21(root);
23285
23361
  for (const component of components2) {
23286
23362
  current = join17(current, component);
23287
- if (existsSync20(current) && lstatSync8(current).isSymbolicLink()) throw new Error("HHP paths cannot traverse symlinks.");
23363
+ if (existsSync20(current) && lstatSync10(current).isSymbolicLink()) throw new Error("HHP paths cannot traverse symlinks.");
23288
23364
  }
23289
23365
  return target;
23290
23366
  }
@@ -23417,13 +23493,13 @@ async function compileContentHhp(root, opts = {}) {
23417
23493
  for (const dependency of result2.dependencies.filter((f2) => /\.tsx?$/.test(f2))) inspect2(dependency);
23418
23494
  result2.manifest.requiredCapabilities = [...requiredCapabilities2].sort();
23419
23495
  outputs.set(`dev/hhp/${id}.descriptor.json`, JSON.stringify(result2.descriptor, null, 2) + "\n");
23420
- outputs.set(`dev/hhp/${id}.map.json`, JSON.stringify({ ...result2.manifest, nodes: Object.fromEntries(Object.entries(result2.sourceMap).map(([key3, node]) => [key3, { ...node, file: relative6(root, node.file).split(sep8).join("/") }])) }, null, 2) + "\n");
23496
+ outputs.set(`dev/hhp/${id}.map.json`, JSON.stringify({ ...result2.manifest, nodes: Object.fromEntries(Object.entries(result2.sourceMap).map(([key3, node]) => [key3, { ...node, file: relative7(root, node.file).split(sep10).join("/") }])) }, null, 2) + "\n");
23421
23497
  if (result2.worker && result2.bundleName) {
23422
23498
  if (results.some((r3) => r3 !== result2 && r3.bundleName === result2.bundleName)) diagnostics.push({ code: "HHP-BUNDLE-ID", severity: "error", file: file2, line: 1, column: 1, message: "Screen ids normalize to the same bundle name." });
23423
23499
  const workerRel = `tier5-src/${result2.bundleName}/index.ts`;
23424
23500
  let worker = result2.worker;
23425
23501
  for (const dependency of result2.dependencies.filter((f2) => /\.(controller|service)\.tsx?$/.test(f2)))
23426
- worker = worker.replace(JSON.stringify(dependency), JSON.stringify(relative6(dirname16(join17(root, workerRel)), dependency).split(sep8).join("/").replace(/\.tsx?$/, ".js")));
23502
+ worker = worker.replace(JSON.stringify(dependency), JSON.stringify(relative7(dirname16(join17(root, workerRel)), dependency).split(sep10).join("/").replace(/\.tsx?$/, ".js")));
23427
23503
  outputs.set(workerRel, worker);
23428
23504
  }
23429
23505
  }
@@ -23477,13 +23553,13 @@ async function compileContentHhp(root, opts = {}) {
23477
23553
  for (const [path2, png] of rasters) {
23478
23554
  if (!png) continue;
23479
23555
  if (existsExact(path2) && readFileSync21(path2).equals(png)) continue;
23480
- mkdirSync13(dirname16(path2), { recursive: true });
23556
+ mkdirSync14(dirname16(path2), { recursive: true });
23481
23557
  writeFileSync11(`${path2}.tmp`, png);
23482
23558
  rmSync8(path2, { force: true });
23483
23559
  renameSync6(`${path2}.tmp`, path2);
23484
23560
  }
23485
23561
  const target = localPath(root, "dev/hhp"), stage = localPath(root, `dev/.hhp-${randomUUID5()}`), backup = `${stage}-old`;
23486
- mkdirSync13(stage, { recursive: true });
23562
+ mkdirSync14(stage, { recursive: true });
23487
23563
  try {
23488
23564
  for (const [rel, source] of outputs) if (rel.startsWith("dev/hhp/")) writeFileSync11(join17(stage, rel.slice(8)), source);
23489
23565
  const workers = [...outputs].filter(([rel]) => rel.startsWith("tier5-src/"));
@@ -23496,7 +23572,7 @@ async function compileContentHhp(root, opts = {}) {
23496
23572
  try {
23497
23573
  for (const [rel, source] of workers) {
23498
23574
  const path2 = localPath(root, rel);
23499
- mkdirSync13(dirname16(path2), { recursive: true });
23575
+ mkdirSync14(dirname16(path2), { recursive: true });
23500
23576
  writeFileSync11(`${path2}.tmp`, source);
23501
23577
  renameSync6(`${path2}.tmp`, path2);
23502
23578
  }
@@ -23513,7 +23589,7 @@ async function compileContentHhp(root, opts = {}) {
23513
23589
  for (const [path2, source] of oldWorkers) {
23514
23590
  if (source === null) rmSync8(path2, { force: true });
23515
23591
  else {
23516
- mkdirSync13(dirname16(path2), { recursive: true });
23592
+ mkdirSync14(dirname16(path2), { recursive: true });
23517
23593
  writeFileSync11(path2, source);
23518
23594
  }
23519
23595
  }
@@ -23570,7 +23646,7 @@ export default defineController({
23570
23646
  if ((await loadContent(root)).module.screens.exact[id]) throw new Error(`Screen id ${id} is already registered.`);
23571
23647
  for (const [rel, body] of Object.entries(files)) {
23572
23648
  const path2 = localPath(root, rel);
23573
- mkdirSync13(dirname16(path2), { recursive: true });
23649
+ mkdirSync14(dirname16(path2), { recursive: true });
23574
23650
  writeFileSync11(path2, body);
23575
23651
  }
23576
23652
  manifest2.screens[id] = { html: `screens/${id}.html` };
@@ -23583,7 +23659,7 @@ export default defineController({
23583
23659
  const originalSettings = existsSync20(settings) ? readFileSync21(settings, "utf8") : "{}";
23584
23660
  const updated = hhpEditorSettings(originalSettings);
23585
23661
  if (originalSettings !== updated) {
23586
- mkdirSync13(dirname16(settings), { recursive: true });
23662
+ mkdirSync14(dirname16(settings), { recursive: true });
23587
23663
  writeFileSync11(settings, updated);
23588
23664
  }
23589
23665
  built.outputs.push(".vscode/settings.json");
@@ -23625,7 +23701,7 @@ var init_hhp = __esm({
23625
23701
  });
23626
23702
 
23627
23703
  // src/shared-drift.ts
23628
- import { existsSync as existsSync21, lstatSync as lstatSync9, readdirSync as readdirSync15, readFileSync as readFileSync22 } from "node:fs";
23704
+ import { existsSync as existsSync21, lstatSync as lstatSync11, readdirSync as readdirSync15, readFileSync as readFileSync22 } from "node:fs";
23629
23705
  import { spawnSync as spawnSync5 } from "node:child_process";
23630
23706
  import { basename as basename9, dirname as dirname17, join as join18, resolve as resolve22 } from "node:path";
23631
23707
  import { fileURLToPath as fileURLToPath13 } from "node:url";
@@ -23677,7 +23753,7 @@ function missingSiblings(shippedFile, sharedDir) {
23677
23753
  }
23678
23754
  function hasEntry(p2) {
23679
23755
  try {
23680
- lstatSync9(p2);
23756
+ lstatSync11(p2);
23681
23757
  return true;
23682
23758
  } catch {
23683
23759
  return false;
@@ -23729,7 +23805,7 @@ function scanSharedDrift(contentDir2, templatesRoot) {
23729
23805
  if (!templatesRoot || !existsSync21(templatesRoot)) return null;
23730
23806
  const sharedDir = join18(contentDir2, SHARED_REL);
23731
23807
  try {
23732
- if (!lstatSync9(sharedDir).isDirectory()) return null;
23808
+ if (!lstatSync11(sharedDir).isDirectory()) return null;
23733
23809
  } catch {
23734
23810
  return null;
23735
23811
  }
@@ -23789,7 +23865,7 @@ var init_shared_drift = __esm({
23789
23865
  SIBLING_IMPORT = /(?:from\s+|import\s+)(["'])\.\/([A-Za-z0-9_-]+)(?:\.js|\.ts)?\1/g;
23790
23866
  isRealFile = (p2) => {
23791
23867
  try {
23792
- return lstatSync9(p2).isFile();
23868
+ return lstatSync11(p2).isFile();
23793
23869
  } catch {
23794
23870
  return false;
23795
23871
  }
@@ -23817,7 +23893,7 @@ __export(build_exports, {
23817
23893
  umbrellaVersion: () => umbrellaVersion,
23818
23894
  umbrellaVersionIssue: () => umbrellaVersionIssue
23819
23895
  });
23820
- import { existsSync as existsSync22, readdirSync as readdirSync16, mkdirSync as mkdirSync14, statSync as statSync6, symlinkSync, readFileSync as readFileSync23 } from "node:fs";
23896
+ import { existsSync as existsSync22, readdirSync as readdirSync16, mkdirSync as mkdirSync15, statSync as statSync6, symlinkSync, readFileSync as readFileSync23 } from "node:fs";
23821
23897
  import { resolve as resolve23, join as join19, dirname as dirname18 } from "node:path";
23822
23898
  import { fileURLToPath as fileURLToPath14 } from "node:url";
23823
23899
  import { execFileSync } from "node:child_process";
@@ -23865,7 +23941,7 @@ function ensureUmbrella(contentDir2, globalPath = globalUmbrella()) {
23865
23941
  if (!globalPath) return false;
23866
23942
  try {
23867
23943
  const scope2 = join19(contentDir2, "node_modules", "@wix");
23868
- mkdirSync14(scope2, { recursive: true });
23944
+ mkdirSync15(scope2, { recursive: true });
23869
23945
  const link = join19(scope2, "himalaya");
23870
23946
  if (!existsSync22(link)) symlinkSync(globalPath, link, "dir");
23871
23947
  return existsSync22(join19(link, "package.json"));
@@ -23968,7 +24044,7 @@ async function buildContentBundles(contentDir2, opts = {}) {
23968
24044
  return { built, outDir, compileErrors: [{ bundle: "hhp", errors: [{ text: e2.message }] }], ...advisories };
23969
24045
  }
23970
24046
  if (!existsSync22(srcDir)) return { built, outDir, compileErrors, ...advisories };
23971
- mkdirSync14(outDir, { recursive: true });
24047
+ mkdirSync15(outDir, { recursive: true });
23972
24048
  for (const name of readdirSync16(srcDir).sort()) {
23973
24049
  const entry = join19(srcDir, name, "index.ts");
23974
24050
  if (!statSync6(join19(srcDir, name)).isDirectory() || !existsSync22(entry)) continue;
@@ -24027,7 +24103,7 @@ __export(app_config_loader_exports, {
24027
24103
  makeBuildMemo: () => makeBuildMemo,
24028
24104
  uninstallContainedAppConfigRealm: () => uninstallContainedAppConfigRealm
24029
24105
  });
24030
- import { existsSync as existsSync23, mkdirSync as mkdirSync15 } from "node:fs";
24106
+ import { existsSync as existsSync23, mkdirSync as mkdirSync16 } from "node:fs";
24031
24107
  import { dirname as dirname19, join as join20, resolve as resolve24 } from "node:path";
24032
24108
  import { pathToFileURL as pathToFileURL4 } from "node:url";
24033
24109
  function configEntry(dir) {
@@ -24043,7 +24119,7 @@ async function buildConfigModuleUrl(entry, dir) {
24043
24119
  const { bundledRuntimeDir: bundledRuntimeDir2 } = await Promise.resolve().then(() => (init_build(), build_exports));
24044
24120
  bundledRuntimeDir2();
24045
24121
  const out2 = resolve24(dir, "dist/.himi/config.mjs");
24046
- mkdirSync15(dirname19(out2), { recursive: true });
24122
+ mkdirSync16(dirname19(out2), { recursive: true });
24047
24123
  await buildAppEntry(entry, out2, { umbrella: true, resolveTsExtensions: true, absWorkingDir: dir, confineTo: dir });
24048
24124
  return pathToFileURL4(out2).href;
24049
24125
  }
@@ -24540,6 +24616,15 @@ var init_native_requirements = __esm({
24540
24616
  ]
24541
24617
  }
24542
24618
  },
24619
+ legacy_import: {
24620
+ // #4653 — reads the app's OWN container (an update of the same bundle id shares it) and its
24621
+ // own staging; no permission, entitlement or usage string on any platform.
24622
+ privacy: {
24623
+ reviewNotes: [
24624
+ "legacy-import: on the first launch after an update, reads data the PREVIOUS version of this same app left in its own container, keeps it in the app's protected Application Support (excluded from backup) and applies it only to the account that owned it. Nothing new is collected; nothing leaves the device through this capability. Telemetry records counts and durations, never values. No usage string / required-reason API."
24625
+ ]
24626
+ }
24627
+ },
24543
24628
  release_control: {
24544
24629
  // No permission, entitlement, or usage string: the picker reads serve-control's PUBLIC
24545
24630
  // release history and writes a local preference. Its risk is a PRODUCT risk (a user
@@ -25383,6 +25468,9 @@ var init_builtins = __esm({
25383
25468
  "himi_apps",
25384
25469
  "iap",
25385
25470
  "keyboard",
25471
+ // #4653 — the legacy-import report. iOS is real; Android answers null until H12b; web is
25472
+ // always null (nothing to import in a browser).
25473
+ "legacy_import",
25386
25474
  "live_activity",
25387
25475
  "local_database",
25388
25476
  "location",
@@ -25842,6 +25930,9 @@ var init_known = __esm({
25842
25930
  app_info: "needs the shell's boot to configure it with the app id it reports, which a dist build's generic registration does not do",
25843
25931
  system_intents: "needs the shell to wire a SystemIntentsHost (app identity, deep-link routing and refresh), which no extensible shell does",
25844
25932
  release_control: "needs the shell's boot to configure it with the app id whose releases it switches, which a dist build's generic registration does not do",
25933
+ // #4653 — the report is only ever non-null if the shell's boot RUNS the importer (before auth)
25934
+ // and feeds it the signed-in principal; a generic registration does neither.
25935
+ legacy_import: "needs the shell's boot to run LegacyImporter before auth and feed it the signed-in principal, which a dist build's generic registration does not do",
25845
25936
  // Linked generically since #4066, but the module is only the backend: which Base44 app it talks
25846
25937
  // to is the shell's binding (`Base44Capability.bind`, from its contract), which a build cannot add.
25847
25938
  base44: "needs the shell's boot to bind the Base44 app id it talks to (Base44Capability.bind), which a dist build's generic registration does not do",
@@ -27315,7 +27406,7 @@ var init_plan_fonts = __esm({
27315
27406
 
27316
27407
  // ../font-bake/face-source.ts
27317
27408
  import { createHash as createHash9 } from "node:crypto";
27318
- import { existsSync as existsSync28, mkdirSync as mkdirSync16, readFileSync as readFileSync27, renameSync as renameSync7, rmSync as rmSync9, writeFileSync as writeFileSync12 } from "node:fs";
27409
+ import { existsSync as existsSync28, mkdirSync as mkdirSync17, readFileSync as readFileSync27, renameSync as renameSync7, rmSync as rmSync9, writeFileSync as writeFileSync12 } from "node:fs";
27319
27410
  import { homedir as homedir3 } from "node:os";
27320
27411
  import { basename as basename10, join as join23 } from "node:path";
27321
27412
  import { fileURLToPath as fileURLToPath19 } from "node:url";
@@ -27349,7 +27440,7 @@ async function fetchUpstreamBytes(url) {
27349
27440
  }
27350
27441
  function writeCachedFace(bytes2) {
27351
27442
  const hash3 = sha256Hex3(bytes2);
27352
- mkdirSync16(CACHE_DIR, { recursive: true });
27443
+ mkdirSync17(CACHE_DIR, { recursive: true });
27353
27444
  const tmp = join23(CACHE_DIR, `.${hash3}.${process.pid}.${Date.now()}.tmp`);
27354
27445
  try {
27355
27446
  writeFileSync12(tmp, bytes2);
@@ -28224,7 +28315,7 @@ var init_inject = __esm({
28224
28315
  });
28225
28316
 
28226
28317
  // ../../core/dev-server/src/store.ts
28227
- import { mkdirSync as mkdirSync17 } from "node:fs";
28318
+ import { mkdirSync as mkdirSync18 } from "node:fs";
28228
28319
  import { dirname as dirname21, resolve as resolve27 } from "node:path";
28229
28320
  import { fileURLToPath as fileURLToPath20 } from "node:url";
28230
28321
  import { createRequire as createRequire2 } from "node:module";
@@ -28244,7 +28335,7 @@ var init_store2 = __esm({
28244
28335
  /** The node:sqlite handle — opened, bootstrapped, and seeded on first access. */
28245
28336
  get db() {
28246
28337
  if (this._db) return this._db;
28247
- mkdirSync17(dirname21(this.dbPath), { recursive: true });
28338
+ mkdirSync18(dirname21(this.dbPath), { recursive: true });
28248
28339
  const { DatabaseSync } = nodeRequire("node:sqlite");
28249
28340
  this._db = new DatabaseSync(this.dbPath, { timeout: 5e3 });
28250
28341
  this.bootstrap();
@@ -28871,6 +28962,13 @@ var init_store_adopt = __esm({
28871
28962
  }
28872
28963
  });
28873
28964
 
28965
+ // ../../core/ts/src/legacy-import.ts
28966
+ var init_legacy_import = __esm({
28967
+ "../../core/ts/src/legacy-import.ts"() {
28968
+ init_define_HHP_CATALOG();
28969
+ }
28970
+ });
28971
+
28874
28972
  // ../../core/ts/src/base44-entities.ts
28875
28973
  var init_base44_entities = __esm({
28876
28974
  "../../core/ts/src/base44-entities.ts"() {
@@ -29015,10 +29113,12 @@ var init_define_app = __esm({
29015
29113
  init_distribution();
29016
29114
  init_store_adopt();
29017
29115
  init_auth_gate_screen();
29116
+ init_legacy_import();
29018
29117
  init_schema2();
29019
29118
  init_base44_entities();
29020
29119
  init_src3();
29021
29120
  init_cms();
29121
+ init_legacy_import();
29022
29122
  init_base44_entities();
29023
29123
  ALL_ORIENTATIONS = [
29024
29124
  "portrait",
@@ -33178,7 +33278,7 @@ function redactBodyString(body) {
33178
33278
  } catch {
33179
33279
  }
33180
33280
  }
33181
- return body.replace(FORM_ASSIGNMENT_RE, (m2, name) => isSensitiveBodyName(name) ? `${name}=${REDACTED}` : m2).replace(JSON_FIELD_RE, (m2, name, sep24) => isSensitiveBodyName(name) ? `"${name}"${sep24}"${REDACTED}"` : m2).replace(JSON_FIELD_UNTERMINATED_RE, (m2, name, sep24) => isSensitiveBodyName(name) ? `"${name}"${sep24}"${REDACTED}` : m2).replace(BEARER_RE, (_m, s2) => `${s2} ${REDACTED}`);
33281
+ return body.replace(FORM_ASSIGNMENT_RE, (m2, name) => isSensitiveBodyName(name) ? `${name}=${REDACTED}` : m2).replace(JSON_FIELD_RE, (m2, name, sep26) => isSensitiveBodyName(name) ? `"${name}"${sep26}"${REDACTED}"` : m2).replace(JSON_FIELD_UNTERMINATED_RE, (m2, name, sep26) => isSensitiveBodyName(name) ? `"${name}"${sep26}"${REDACTED}` : m2).replace(BEARER_RE, (_m, s2) => `${s2} ${REDACTED}`);
33182
33282
  }
33183
33283
  function createWixGatewayState() {
33184
33284
  return { mode: "record", rules: [], traffic: [], clients: /* @__PURE__ */ new Set(), seq: 0, ruleSeq: 0 };
@@ -38741,10 +38841,10 @@ async function runRicosImageUpload(o2) {
38741
38841
  } catch {
38742
38842
  return fail7("read");
38743
38843
  }
38744
- const sep24 = entry.uploadUrl.includes("?") ? "&" : "?";
38844
+ const sep26 = entry.uploadUrl.includes("?") ? "&" : "?";
38745
38845
  let res;
38746
38846
  try {
38747
- res = await deps.fetch(`${entry.uploadUrl}${sep24}filename=${encodeURIComponent(file2.fileName)}`, { method: "PUT", headers: { "Content-Type": file2.mimeType }, body });
38847
+ res = await deps.fetch(`${entry.uploadUrl}${sep26}filename=${encodeURIComponent(file2.fileName)}`, { method: "PUT", headers: { "Content-Type": file2.mimeType }, body });
38748
38848
  } catch {
38749
38849
  return fail7("put");
38750
38850
  }
@@ -39387,10 +39487,10 @@ async function runMediaFieldUpload(o2) {
39387
39487
  } catch (e2) {
39388
39488
  return { ok: false, reason: e2 instanceof Deadline ? "timeout" : "read" };
39389
39489
  }
39390
- const sep24 = uploadUrl.includes("?") ? "&" : "?";
39490
+ const sep26 = uploadUrl.includes("?") ? "&" : "?";
39391
39491
  let res;
39392
39492
  try {
39393
- res = await bounded2(deps.fetch(`${uploadUrl}${sep24}filename=${encodeURIComponent(file2.fileName)}`, {
39493
+ res = await bounded2(deps.fetch(`${uploadUrl}${sep26}filename=${encodeURIComponent(file2.fileName)}`, {
39394
39494
  method: "PUT",
39395
39495
  headers: { "Content-Type": file2.mimeType },
39396
39496
  body,
@@ -123073,8 +123173,8 @@ function ensureCountUpRuntime() {
123073
123173
  const neg = fixed.startsWith("-");
123074
123174
  const body = neg ? fixed.slice(1) : fixed;
123075
123175
  const [int2, frac] = body.split(".");
123076
- const sep24 = int2.replace(/\B(?=(\d{3})+(?!\d))/g, ",");
123077
- return (neg ? "-" : "") + sep24 + (frac ? "." + frac : "");
123176
+ const sep26 = int2.replace(/\B(?=(\d{3})+(?!\d))/g, ",");
123177
+ return (neg ? "-" : "") + sep26 + (frac ? "." + frac : "");
123078
123178
  };
123079
123179
  const animateEl = (el2) => {
123080
123180
  const node = el2;
@@ -133783,7 +133883,7 @@ __export(widgets_exports, {
133783
133883
  widgetScanRunCount: () => widgetScanRunCount
133784
133884
  });
133785
133885
  import { createHash as createHash15 } from "node:crypto";
133786
- import { lstatSync as lstatSync10, readdirSync as readdirSync19, statSync as statSync8 } from "node:fs";
133886
+ import { lstatSync as lstatSync12, readdirSync as readdirSync19, statSync as statSync8 } from "node:fs";
133787
133887
  import { join as join27 } from "node:path";
133788
133888
  import { inspect } from "node:util";
133789
133889
  async function widgetRealm() {
@@ -133910,7 +134010,7 @@ function bundleDirFingerprint(roots2) {
133910
134010
  } catch (err) {
133911
134011
  const code = err.code;
133912
134012
  if (code !== "ENOENT" && code !== "ENOTDIR" && code !== "ELOOP") throw err;
133913
- st2 = lstatSync10(path2, { bigint: true });
134013
+ st2 = lstatSync12(path2, { bigint: true });
133914
134014
  hash3.update(`${root}\0${entry}\0unresolved\0${st2.ino}\0${st2.mtimeNs}\0${st2.ctimeNs}
133915
134015
  `);
133916
134016
  continue;
@@ -134534,8 +134634,8 @@ var init_widgets = __esm({
134534
134634
  // ../../core/dev-server/src/index.ts
134535
134635
  import { createServer as createServer2 } from "node:http";
134536
134636
  import { readFile, stat } from "node:fs/promises";
134537
- import { readFileSync as readFileSync37, existsSync as existsSync33, watch, mkdirSync as mkdirSync18, rmSync as rmSync10 } from "node:fs";
134538
- import { basename as basename11, dirname as dirname24, extname as extname2, join as join28, relative as relative7, resolve as resolve32, normalize as normalize4, sep as sep9 } from "node:path";
134637
+ import { readFileSync as readFileSync37, existsSync as existsSync33, watch, mkdirSync as mkdirSync19, rmSync as rmSync10 } from "node:fs";
134638
+ import { basename as basename11, dirname as dirname24, extname as extname2, join as join28, relative as relative8, resolve as resolve32, normalize as normalize4, sep as sep11 } from "node:path";
134539
134639
  import { createHash as createHash16, randomUUID as randomUUID6 } from "node:crypto";
134540
134640
  import { fileURLToPath as fileURLToPath24, pathToFileURL as pathToFileURL5 } from "node:url";
134541
134641
  function readLogicBundle(read, tier5Dir, name) {
@@ -135362,7 +135462,7 @@ function startBundleArtifactWatcher(state) {
135362
135462
  });
135363
135463
  };
135364
135464
  try {
135365
- mkdirSync18(TIER5_ROOT2, { recursive: true });
135465
+ mkdirSync19(TIER5_ROOT2, { recursive: true });
135366
135466
  const watcher2 = watch(TIER5_ROOT2, { persistent: false }, (_event, filename) => {
135367
135467
  const bundle = builtBundleName(filename);
135368
135468
  if (!bundle) return;
@@ -135411,7 +135511,7 @@ function startBundleSourceWatcher(state) {
135411
135511
  try {
135412
135512
  const watcher2 = watch(TIER5_SRC_ROOT, { persistent: false, recursive: true }, (_event, filename) => {
135413
135513
  if (!filename || !/\.(ts|tsx)$/.test(filename)) return;
135414
- const name = filename.split(sep9)[0];
135514
+ const name = filename.split(sep11)[0];
135415
135515
  if (!name || name.startsWith(".")) return;
135416
135516
  pending.add(name);
135417
135517
  if (timer) clearTimeout(timer);
@@ -135490,7 +135590,7 @@ async function reloadAppModuleNow(state, opts) {
135490
135590
  const current = state.app;
135491
135591
  if (!current) return { ok: false, error: "no_app" };
135492
135592
  const entry = resolve32(current.dir, "dev/index.ts");
135493
- mkdirSync18(HMR_TMP_DIR, { recursive: true });
135593
+ mkdirSync19(HMR_TMP_DIR, { recursive: true });
135494
135594
  const outfile = resolve32(HMR_TMP_DIR, `${current.name}-${++appReloadSeq}.mjs`);
135495
135595
  try {
135496
135596
  const lib = await import(pathToFileURL5(resolve32(TIER5_SRC_ROOT, "build-lib.mjs")).href);
@@ -135559,12 +135659,12 @@ function servedTokensHash(app) {
135559
135659
  }
135560
135660
  }
135561
135661
  function appDependencyFiles(inputs, appDir3) {
135562
- const inside2 = (root, p2) => p2 === root || p2.startsWith(root + sep9);
135662
+ const inside2 = (root, p2) => p2 === root || p2.startsWith(root + sep11);
135563
135663
  const out2 = /* @__PURE__ */ new Set();
135564
135664
  for (const raw of inputs) {
135565
135665
  const p2 = resolve32(raw);
135566
135666
  if (!inside2(ROOT6, p2) || inside2(resolve32(appDir3), p2) || inside2(HMR_TMP_DIR, p2)) continue;
135567
- if (p2.split(sep9).includes("node_modules")) continue;
135667
+ if (p2.split(sep11).includes("node_modules")) continue;
135568
135668
  out2.add(p2);
135569
135669
  }
135570
135670
  return [...out2].sort();
@@ -135594,7 +135694,7 @@ function syncAppDependencyWatchers(state, inputs) {
135594
135694
  if (timer) clearTimeout(timer);
135595
135695
  timer = setTimeout(() => {
135596
135696
  timer = void 0;
135597
- const files = [...changed].map((f2) => relative7(ROOT6, f2));
135697
+ const files = [...changed].map((f2) => relative8(ROOT6, f2));
135598
135698
  changed.clear();
135599
135699
  console.log(`[himalaya-dev] app dependency changed: ${files.join(", ")}`);
135600
135700
  void reloadAppModule(state, { reason: "dependency_changed" });
@@ -135613,7 +135713,7 @@ async function primeAppDependencyWatchers(state) {
135613
135713
  if (!current) return;
135614
135714
  const entry = resolve32(current.dir, "dev/index.ts");
135615
135715
  if (!existsSync33(entry)) return;
135616
- mkdirSync18(HMR_TMP_DIR, { recursive: true });
135716
+ mkdirSync19(HMR_TMP_DIR, { recursive: true });
135617
135717
  const outfile = resolve32(HMR_TMP_DIR, `${current.name}-deps-${++appReloadSeq}.mjs`);
135618
135718
  try {
135619
135719
  const lib = await import(pathToFileURL5(resolve32(TIER5_SRC_ROOT, "build-lib.mjs")).href);
@@ -135682,7 +135782,7 @@ function startAppSourceWatcher(state) {
135682
135782
  try {
135683
135783
  const watcher2 = watch(appDir3, { persistent: false, recursive: true }, (_event, filename) => {
135684
135784
  if (!filename) return;
135685
- const rel = String(filename).split(sep9).join("/");
135785
+ const rel = String(filename).split(sep11).join("/");
135686
135786
  if (!classifyAppPath(rel)) return;
135687
135787
  pending.add(rel);
135688
135788
  if (timer) clearTimeout(timer);
@@ -137277,8 +137377,8 @@ async function handleActionHandlerBundleGet(res, app) {
137277
137377
  }
137278
137378
  async function serveStatic(req, res, root, prefix) {
137279
137379
  const requested = decodeURIComponent((req.url ?? "").split("?")[0]);
137280
- const relative26 = requested.replace(prefix, "").replace(/^\//, "");
137281
- const safe = normalize4(relative26).replace(/^(\.\.[\/\\])+/, "");
137380
+ const relative27 = requested.replace(prefix, "").replace(/^\//, "");
137381
+ const safe = normalize4(relative27).replace(/^(\.\.[\/\\])+/, "");
137282
137382
  const fullPath = resolve32(root, safe);
137283
137383
  if (!fullPath.startsWith(root)) {
137284
137384
  return send(res, 403, "forbidden");
@@ -138074,8 +138174,8 @@ var init_src6 = __esm({
138074
138174
  });
138075
138175
 
138076
138176
  // ../../core/serve-storage/src/file-store.ts
138077
- import { mkdirSync as mkdirSync19, readFileSync as readFileSync38, rmSync as rmSync11, writeFileSync as writeFileSync13, readdirSync as readdirSync20, existsSync as existsSync34 } from "node:fs";
138078
- import { join as join29, resolve as resolve33, sep as sep10 } from "node:path";
138177
+ import { mkdirSync as mkdirSync20, readFileSync as readFileSync38, rmSync as rmSync11, writeFileSync as writeFileSync13, readdirSync as readdirSync20, existsSync as existsSync34 } from "node:fs";
138178
+ import { join as join29, resolve as resolve33, sep as sep12 } from "node:path";
138079
138179
  var FileReleaseStore;
138080
138180
  var init_file_store = __esm({
138081
138181
  "../../core/serve-storage/src/file-store.ts"() {
@@ -138113,7 +138213,7 @@ var init_file_store = __esm({
138113
138213
  */
138114
138214
  appDir(app) {
138115
138215
  const dir = resolve33(this.root, this.safe(app));
138116
- if (!dir.startsWith(this.root + sep10)) {
138216
+ if (!dir.startsWith(this.root + sep12)) {
138117
138217
  throw new Error(`unsafe app id ${JSON.stringify(app)}: ${dir} is not inside the store root`);
138118
138218
  }
138119
138219
  return dir;
@@ -138125,58 +138225,58 @@ var init_file_store = __esm({
138125
138225
  async reset(app) {
138126
138226
  const dir = this.appDir(app);
138127
138227
  rmSync11(dir, { recursive: true, force: true });
138128
- mkdirSync19(join29(dir, "screens"), { recursive: true });
138129
- mkdirSync19(join29(dir, "bundles"), { recursive: true });
138228
+ mkdirSync20(join29(dir, "screens"), { recursive: true });
138229
+ mkdirSync20(join29(dir, "bundles"), { recursive: true });
138130
138230
  }
138131
138231
  async remove(app) {
138132
138232
  rmSync11(this.appDir(app), { recursive: true, force: true });
138133
138233
  }
138134
138234
  async putManifest(app, manifest2) {
138135
138235
  validateFunctionManifest(manifest2);
138136
- mkdirSync19(this.appDir(app), { recursive: true });
138236
+ mkdirSync20(this.appDir(app), { recursive: true });
138137
138237
  writeFileSync13(join29(this.appDir(app), "release-manifest.json"), JSON.stringify(manifest2, null, 2));
138138
138238
  }
138139
138239
  async putScreen(app, screenId, json8) {
138140
138240
  const dir = join29(this.appDir(app), "screens");
138141
- mkdirSync19(dir, { recursive: true });
138241
+ mkdirSync20(dir, { recursive: true });
138142
138242
  writeFileSync13(join29(dir, `${this.safe(screenId)}.json`), json8);
138143
138243
  }
138144
138244
  async putBundle(app, sha2567, bytes2) {
138145
138245
  const dir = join29(this.appDir(app), "bundles");
138146
- mkdirSync19(dir, { recursive: true });
138246
+ mkdirSync20(dir, { recursive: true });
138147
138247
  writeFileSync13(join29(dir, `${this.safe(sha2567)}.bundle.js`), bytes2);
138148
138248
  }
138149
138249
  async putTokens(app, json8) {
138150
- mkdirSync19(this.appDir(app), { recursive: true });
138250
+ mkdirSync20(this.appDir(app), { recursive: true });
138151
138251
  writeFileSync13(join29(this.appDir(app), "tokens.json"), json8);
138152
138252
  }
138153
138253
  async putDoc(app, sha2567, json8) {
138154
138254
  const dir = join29(this.appDir(app), "docs");
138155
- mkdirSync19(dir, { recursive: true });
138255
+ mkdirSync20(dir, { recursive: true });
138156
138256
  writeFileSync13(join29(dir, `${this.safe(sha2567)}.json`), json8);
138157
138257
  }
138158
138258
  async putAppConfig(app, json8) {
138159
- mkdirSync19(this.appDir(app), { recursive: true });
138259
+ mkdirSync20(this.appDir(app), { recursive: true });
138160
138260
  writeFileSync13(join29(this.appDir(app), "app-config.json"), json8);
138161
138261
  }
138162
138262
  async putIcon(app, bytes2) {
138163
- mkdirSync19(this.appDir(app), { recursive: true });
138263
+ mkdirSync20(this.appDir(app), { recursive: true });
138164
138264
  writeFileSync13(join29(this.appDir(app), "icon.png"), bytes2);
138165
138265
  }
138166
138266
  async putWidget(app, widgetId, json8) {
138167
138267
  const dir = join29(this.appDir(app), "widgets");
138168
- mkdirSync19(dir, { recursive: true });
138268
+ mkdirSync20(dir, { recursive: true });
138169
138269
  writeFileSync13(join29(dir, `${this.safe(widgetId)}.json`), json8);
138170
138270
  }
138171
138271
  // Per-app settings (registry visibility) — release-independent, so it lives beside the
138172
138272
  // manifest, not inside it. NOTE: listApps() keys on release-manifest.json/ledger presence,
138173
138273
  // so a settings-only dir never lists an app.
138174
138274
  async putAppSettings(app, settings) {
138175
- mkdirSync19(this.appDir(app), { recursive: true });
138275
+ mkdirSync20(this.appDir(app), { recursive: true });
138176
138276
  writeFileSync13(join29(this.appDir(app), "settings.json"), JSON.stringify(settings, null, 2));
138177
138277
  }
138178
138278
  async putOneAppEnrollment(app) {
138179
- mkdirSync19(this.appDir(app), { recursive: true });
138279
+ mkdirSync20(this.appDir(app), { recursive: true });
138180
138280
  writeFileSync13(join29(this.appDir(app), "one-app-enrollment"), "one-app-to-himi-app");
138181
138281
  }
138182
138282
  // Template scaffold source archive — a content-addressed JSON doc, so it rides the same
@@ -138189,7 +138289,7 @@ var init_file_store = __esm({
138189
138289
  // bundles/<sha>.bundle.js, which bakes ".bundle.js" into the filename).
138190
138290
  async putAsset(app, sha2567, bytes2) {
138191
138291
  const dir = join29(this.appDir(app), "assets");
138192
- mkdirSync19(dir, { recursive: true });
138292
+ mkdirSync20(dir, { recursive: true });
138193
138293
  writeFileSync13(join29(dir, this.safe(sha2567)), bytes2);
138194
138294
  }
138195
138295
  async getManifest(app) {
@@ -138259,7 +138359,7 @@ var init_file_store = __esm({
138259
138359
  async putManifestVersioned(app, releaseId, manifest2) {
138260
138360
  validateFunctionManifest(manifest2);
138261
138361
  const dir = join29(this.appDir(app), "manifests");
138262
- mkdirSync19(dir, { recursive: true });
138362
+ mkdirSync20(dir, { recursive: true });
138263
138363
  writeFileSync13(join29(dir, `${this.safe(releaseId)}.json`), JSON.stringify(manifest2, null, 2));
138264
138364
  }
138265
138365
  async getManifestById(app, releaseId) {
@@ -138280,7 +138380,7 @@ var init_file_store = __esm({
138280
138380
  }
138281
138381
  }
138282
138382
  async appendRelease(app, entry) {
138283
- mkdirSync19(this.appDir(app), { recursive: true });
138383
+ mkdirSync20(this.appDir(app), { recursive: true });
138284
138384
  const ledger = await this.listReleases(app);
138285
138385
  const i2 = ledger.findIndex((e2) => e2.releaseId === entry.releaseId);
138286
138386
  if (i2 >= 0) ledger[i2] = entry;
@@ -138307,7 +138407,7 @@ var init_file_store = __esm({
138307
138407
  async updateWipRecord(app, fn2) {
138308
138408
  const next = fn2(this.readWipSync(app));
138309
138409
  if (next === void 0) return false;
138310
- mkdirSync19(this.appDir(app), { recursive: true });
138410
+ mkdirSync20(this.appDir(app), { recursive: true });
138311
138411
  writeFileSync13(join29(this.appDir(app), "_wip.json"), JSON.stringify(next, null, 2));
138312
138412
  return true;
138313
138413
  }
@@ -140587,8 +140687,8 @@ async function crawlScreenInner(opts) {
140587
140687
  if (linkable.has(target)) return true;
140588
140688
  for (const base of linkable) {
140589
140689
  if (target.length > base.length + 1 && target.startsWith(base)) {
140590
- const sep24 = target[base.length];
140591
- if (sep24 === "_" || sep24 === "/") return true;
140690
+ const sep26 = target[base.length];
140691
+ if (sep26 === "_" || sep26 === "/") return true;
140592
140692
  }
140593
140693
  }
140594
140694
  return false;
@@ -144510,13 +144610,13 @@ __export(studio_exports, {
144510
144610
  });
144511
144611
  import { createHash as createHash21 } from "node:crypto";
144512
144612
  import { existsSync as existsSync38, readdirSync as readdirSync23, readFileSync as readFileSync42, realpathSync as realpathSync6, statSync as statSync9 } from "node:fs";
144513
- import { basename as basename12, extname as extname3, join as join33, relative as relative8, resolve as resolve35, sep as sep11 } from "node:path";
144613
+ import { basename as basename12, extname as extname3, join as join33, relative as relative9, resolve as resolve35, sep as sep13 } from "node:path";
144514
144614
  import { pathToFileURL as pathToFileURL6 } from "node:url";
144515
144615
  function realInside(dir, abs) {
144516
144616
  try {
144517
144617
  const root = realpathSync6(dir);
144518
144618
  const real = realpathSync6(abs);
144519
- return real.startsWith(root + sep11) ? real : null;
144619
+ return real.startsWith(root + sep13) ? real : null;
144520
144620
  } catch {
144521
144621
  return null;
144522
144622
  }
@@ -144533,7 +144633,7 @@ function archiveFile(dir, memory, abs) {
144533
144633
  return null;
144534
144634
  }
144535
144635
  if (size === 0) return null;
144536
- const key3 = relative8(dir, abs);
144636
+ const key3 = relative9(dir, abs);
144537
144637
  const hit = memory.files?.[key3];
144538
144638
  if (hit && hit.size === size && hit.mtimeMs === mtimeMs && hit.ino === ino && existsSync38(join33(dir, HISTORY_DIR, `${hit.sha}.${hit.ext}`))) {
144539
144639
  return { sha: hit.sha, ext: hit.ext, file: `${hit.sha}.${hit.ext}` };
@@ -144954,7 +145054,7 @@ __export(cli_shared_exports, {
144954
145054
  visibilityFlag: () => visibilityFlag,
144955
145055
  writePngFile: () => writePngFile
144956
145056
  });
144957
- import { mkdtempSync, readFileSync as readFileSync43, mkdirSync as mkdirSync20, writeFileSync as writeFileSync14, existsSync as existsSync39, rmSync as rmSync12, readdirSync as readdirSync24, lstatSync as lstatSync11 } from "node:fs";
145057
+ import { mkdtempSync, readFileSync as readFileSync43, mkdirSync as mkdirSync21, writeFileSync as writeFileSync14, existsSync as existsSync39, rmSync as rmSync12, readdirSync as readdirSync24, lstatSync as lstatSync13 } from "node:fs";
144958
145058
  import { AsyncLocalStorage as AsyncLocalStorage2 } from "node:async_hooks";
144959
145059
  import { tmpdir as tmpdir2 } from "node:os";
144960
145060
  import { join as join34, resolve as resolve36, basename as basename13, dirname as dirname26 } from "node:path";
@@ -145107,7 +145207,7 @@ function nativeConfigTokenNotice(configSource, optedIn) {
145107
145207
  return `launch-screen token ${list2} also feeds the BUILD-TIME native launch screen (tools/native-config) \u2014 an OTA-only change to its value updates the live app but NOT the baked launch screen until the next native build (regenerate: npm run native-config -- <app>)`;
145108
145208
  }
145109
145209
  function writePngFile(path2, base64) {
145110
- mkdirSync20(dirname26(path2), { recursive: true });
145210
+ mkdirSync21(dirname26(path2), { recursive: true });
145111
145211
  writeFileSync14(path2, Buffer.from(base64, "base64"));
145112
145212
  return path2;
145113
145213
  }
@@ -145150,7 +145250,7 @@ function renameRestoredSource(restored, declaredApp, renamed) {
145150
145250
  function symlinkDestinationIssue(dest) {
145151
145251
  let kind;
145152
145252
  try {
145153
- kind = lstatSync11(dest);
145253
+ kind = lstatSync13(dest);
145154
145254
  } catch {
145155
145255
  return null;
145156
145256
  }
@@ -145214,7 +145314,7 @@ function materializeForPreview(appDir3, slug, displayName3) {
145214
145314
  }
145215
145315
  const dest = join34(root, `${slug}-${process.pid}`);
145216
145316
  rmSync12(dest, { recursive: true, force: true });
145217
- mkdirSync20(dest, { recursive: true });
145317
+ mkdirSync21(dest, { recursive: true });
145218
145318
  try {
145219
145319
  materializeSource(forBuild, displayName3, dest, slug);
145220
145320
  } catch (e2) {
@@ -145225,8 +145325,8 @@ function materializeForPreview(appDir3, slug, displayName3) {
145225
145325
  }
145226
145326
  async function appId(dir) {
145227
145327
  try {
145228
- const { readFileSync: readFileSync138 } = await import("node:fs");
145229
- const m2 = JSON.parse(readFileSync138(join34(dir, "himalaya.content.json"), "utf8"));
145328
+ const { readFileSync: readFileSync139 } = await import("node:fs");
145329
+ const m2 = JSON.parse(readFileSync139(join34(dir, "himalaya.content.json"), "utf8"));
145230
145330
  if (m2.name) return m2.name;
145231
145331
  } catch {
145232
145332
  }
@@ -145459,7 +145559,7 @@ var init_cli_shared = __esm({
145459
145559
  });
145460
145560
 
145461
145561
  // src/self-update.ts
145462
- import { readFileSync as readFileSync44, mkdirSync as mkdirSync21, writeFileSync as writeFileSync15, existsSync as existsSync40, rmSync as rmSync13, statSync as statSync10, accessSync, constants } from "node:fs";
145562
+ import { readFileSync as readFileSync44, mkdirSync as mkdirSync22, writeFileSync as writeFileSync15, existsSync as existsSync40, rmSync as rmSync13, statSync as statSync10, accessSync, constants } from "node:fs";
145463
145563
  import { execFile, execFileSync as execFileSync3, spawnSync as spawnSync6 } from "node:child_process";
145464
145564
  import { randomUUID as randomUUID7 } from "node:crypto";
145465
145565
  import { homedir as homedir8, hostname } from "node:os";
@@ -145646,7 +145746,7 @@ function readUpdateCache(path2) {
145646
145746
  }
145647
145747
  function writeUpdateCache(path2, cache2) {
145648
145748
  try {
145649
- mkdirSync21(dirname27(path2), { recursive: true, mode: 448 });
145749
+ mkdirSync22(dirname27(path2), { recursive: true, mode: 448 });
145650
145750
  writeFileSync15(path2, JSON.stringify(cache2, null, 2) + "\n", { mode: 384 });
145651
145751
  } catch {
145652
145752
  }
@@ -145800,7 +145900,7 @@ function acquireUpdateLock(cachePath, now, hooks = {}) {
145800
145900
  };
145801
145901
  const release2 = () => removeIfMine(lockPath2);
145802
145902
  try {
145803
- mkdirSync21(dirname27(lockPath2), { recursive: true, mode: 448 });
145903
+ mkdirSync22(dirname27(lockPath2), { recursive: true, mode: 448 });
145804
145904
  } catch {
145805
145905
  return () => {
145806
145906
  };
@@ -147081,10 +147181,10 @@ __export(preflight_exports, {
147081
147181
  requireEnv: () => requireEnv
147082
147182
  });
147083
147183
  import { existsSync as existsSync43, readFileSync as readFileSync47 } from "node:fs";
147084
- import { isAbsolute as isAbsolute2, relative as relative9, resolve as resolve39 } from "node:path";
147184
+ import { isAbsolute as isAbsolute3, relative as relative10, resolve as resolve39 } from "node:path";
147085
147185
  function isInsideRepo(p2) {
147086
- const rel = relative9(REPO_ROOT, resolve39(p2));
147087
- return rel !== "" && !rel.startsWith("..") && !isAbsolute2(rel);
147186
+ const rel = relative10(REPO_ROOT, resolve39(p2));
147187
+ return rel !== "" && !rel.startsWith("..") && !isAbsolute3(rel);
147088
147188
  }
147089
147189
  function assertCredentialOutsideRepo(label3, p2) {
147090
147190
  if (isInsideRepo(p2)) {
@@ -150690,21 +150790,21 @@ var init_Matcher = __esm({
150690
150790
  * @returns {string}
150691
150791
  */
150692
150792
  toString(separator, includeNamespace = true) {
150693
- const sep24 = separator || this.separator;
150694
- const isDefault = sep24 === this.separator && includeNamespace === true;
150793
+ const sep26 = separator || this.separator;
150794
+ const isDefault = sep26 === this.separator && includeNamespace === true;
150695
150795
  if (isDefault) {
150696
150796
  if (this._pathStringCache !== null) {
150697
150797
  return this._pathStringCache;
150698
150798
  }
150699
150799
  const result = this.path.map(
150700
150800
  (n2) => n2.namespace ? `${n2.namespace}:${n2.tag}` : n2.tag
150701
- ).join(sep24);
150801
+ ).join(sep26);
150702
150802
  this._pathStringCache = result;
150703
150803
  return result;
150704
150804
  }
150705
150805
  return this.path.map(
150706
150806
  (n2) => includeNamespace && n2.namespace ? `${n2.namespace}:${n2.tag}` : n2.tag
150707
- ).join(sep24);
150807
+ ).join(sep26);
150708
150808
  }
150709
150809
  /**
150710
150810
  * Get path as array of tag names.
@@ -151414,77 +151514,77 @@ var init_redos = __esm({
151414
151514
  });
151415
151515
 
151416
151516
  // ../../node_modules/is-unsafe/src/contexts/nosql.js
151417
- var sep12, NOSQL_PATTERNS, nosql_default;
151517
+ var sep14, NOSQL_PATTERNS, nosql_default;
151418
151518
  var init_nosql = __esm({
151419
151519
  "../../node_modules/is-unsafe/src/contexts/nosql.js"() {
151420
151520
  init_define_HHP_CATALOG();
151421
- sep12 = `["'\\s]*:`;
151521
+ sep14 = `["'\\s]*:`;
151422
151522
  NOSQL_PATTERNS = [
151423
151523
  // ─── MongoDB $ operator injection ────────────────────────────────────────
151424
151524
  {
151425
151525
  id: "nosql-where-operator",
151426
151526
  description: "$where \u2014 executes arbitrary JavaScript server-side in MongoDB",
151427
- pattern: new RegExp(`\\$where${sep12}`, "i")
151527
+ pattern: new RegExp(`\\$where${sep14}`, "i")
151428
151528
  },
151429
151529
  {
151430
151530
  id: "nosql-ne-operator",
151431
151531
  description: '$ne \u2014 "not equal" operator used to bypass equality checks',
151432
- pattern: new RegExp(`\\$ne${sep12}`, "i")
151532
+ pattern: new RegExp(`\\$ne${sep14}`, "i")
151433
151533
  },
151434
151534
  {
151435
151535
  id: "nosql-gt-operator",
151436
151536
  description: '$gt \u2014 "greater than" used to bypass password/value checks',
151437
- pattern: new RegExp(`\\$gte?${sep12}`, "i")
151537
+ pattern: new RegExp(`\\$gte?${sep14}`, "i")
151438
151538
  },
151439
151539
  {
151440
151540
  id: "nosql-lt-operator",
151441
151541
  description: '$lt / $lte \u2014 "less than" bypass variants',
151442
- pattern: new RegExp(`\\$lte?${sep12}`, "i")
151542
+ pattern: new RegExp(`\\$lte?${sep14}`, "i")
151443
151543
  },
151444
151544
  {
151445
151545
  id: "nosql-regex-operator",
151446
151546
  description: "$regex \u2014 can be used to extract data character by character (blind injection)",
151447
- pattern: new RegExp(`\\$regex${sep12}`, "i")
151547
+ pattern: new RegExp(`\\$regex${sep14}`, "i")
151448
151548
  },
151449
151549
  {
151450
151550
  id: "nosql-or-operator",
151451
151551
  description: "$or \u2014 logical OR; used to create always-true conditions",
151452
- pattern: new RegExp(`\\$or${sep12}\\s*\\[`, "i")
151552
+ pattern: new RegExp(`\\$or${sep14}\\s*\\[`, "i")
151453
151553
  },
151454
151554
  {
151455
151555
  id: "nosql-and-operator",
151456
151556
  description: "$and \u2014 logical AND operator injection",
151457
- pattern: new RegExp(`\\$and${sep12}\\s*\\[`, "i")
151557
+ pattern: new RegExp(`\\$and${sep14}\\s*\\[`, "i")
151458
151558
  },
151459
151559
  {
151460
151560
  id: "nosql-nor-operator",
151461
151561
  description: "$nor \u2014 logical NOR operator injection",
151462
- pattern: new RegExp(`\\$nor${sep12}\\s*\\[`, "i")
151562
+ pattern: new RegExp(`\\$nor${sep14}\\s*\\[`, "i")
151463
151563
  },
151464
151564
  {
151465
151565
  id: "nosql-exists-operator",
151466
151566
  description: "$exists \u2014 can enumerate fields to determine schema",
151467
- pattern: new RegExp(`\\$exists${sep12}`, "i")
151567
+ pattern: new RegExp(`\\$exists${sep14}`, "i")
151468
151568
  },
151469
151569
  {
151470
151570
  id: "nosql-in-operator",
151471
151571
  description: "$in \u2014 matches any value in a list; can enumerate values",
151472
- pattern: new RegExp(`\\$in${sep12}\\s*\\[`, "i")
151572
+ pattern: new RegExp(`\\$in${sep14}\\s*\\[`, "i")
151473
151573
  },
151474
151574
  {
151475
151575
  id: "nosql-expr-operator",
151476
151576
  description: "$expr \u2014 allows aggregation expressions in queries (MongoDB 3.6+)",
151477
- pattern: new RegExp(`\\$expr${sep12}`, "i")
151577
+ pattern: new RegExp(`\\$expr${sep14}`, "i")
151478
151578
  },
151479
151579
  {
151480
151580
  id: "nosql-function-operator",
151481
151581
  description: "$function \u2014 executes arbitrary JavaScript in MongoDB 4.4+",
151482
- pattern: new RegExp(`\\$function${sep12}`, "i")
151582
+ pattern: new RegExp(`\\$function${sep14}`, "i")
151483
151583
  },
151484
151584
  {
151485
151585
  id: "nosql-accumulator-operator",
151486
151586
  description: "$accumulator \u2014 custom aggregation with arbitrary JS execution",
151487
- pattern: new RegExp(`\\$accumulator${sep12}`, "i")
151587
+ pattern: new RegExp(`\\$accumulator${sep14}`, "i")
151488
151588
  },
151489
151589
  // ─── Prototype pollution ─────────────────────────────────────────────────
151490
151590
  {
@@ -153915,7 +154015,7 @@ var init_customer_signing_inspect = __esm({
153915
154015
  });
153916
154016
 
153917
154017
  // src/push-onboarding.ts
153918
- import { existsSync as existsSync44, mkdirSync as mkdirSync22, readFileSync as readFileSync48, statSync as statSync11, writeFileSync as writeFileSync16, chmodSync as chmodSync2 } from "node:fs";
154018
+ import { existsSync as existsSync44, mkdirSync as mkdirSync23, readFileSync as readFileSync48, statSync as statSync11, writeFileSync as writeFileSync16, chmodSync as chmodSync2 } from "node:fs";
153919
154019
  import { basename as basename14, dirname as dirname28, join as join36, resolve as resolve40 } from "node:path";
153920
154020
  function readJson4(path2) {
153921
154021
  try {
@@ -154065,7 +154165,7 @@ function readPushOnboarding(dir) {
154065
154165
  }
154066
154166
  function writeFile(dir, file2) {
154067
154167
  const path2 = join36(resolve40(dir), PUSH_ONBOARDING_PATH);
154068
- mkdirSync22(dirname28(path2), { recursive: true, mode: 448 });
154168
+ mkdirSync23(dirname28(path2), { recursive: true, mode: 448 });
154069
154169
  writeFileSync16(path2, JSON.stringify(file2, null, 2) + "\n", { mode: 384 });
154070
154170
  try {
154071
154171
  chmodSync2(path2, 384);
@@ -154164,7 +154264,7 @@ __export(signing_inspect_exports, {
154164
154264
  runSigningInspect: () => runSigningInspect
154165
154265
  });
154166
154266
  import { existsSync as existsSync45, readFileSync as readFileSync49, statSync as statSync12 } from "node:fs";
154167
- import { isAbsolute as isAbsolute3, resolve as resolve41 } from "node:path";
154267
+ import { isAbsolute as isAbsolute4, resolve as resolve41 } from "node:path";
154168
154268
  function fail5(io2, code, fields = {}) {
154169
154269
  io2.error(JSON.stringify({ ok: false, code, ...fields }));
154170
154270
  return code.endsWith("_required") || code.endsWith("_usage") ? 2 : 1;
@@ -154220,7 +154320,7 @@ async function runSigningInspect(pos, flags, io2, deps = {}) {
154220
154320
  hint: "Pass --bundle-id --team-id and ASC key flags, or set ASC_KEY_PATH / ASC_KEY_ID / ASC_ISSUER_ID."
154221
154321
  });
154222
154322
  }
154223
- const resolvedKey = isAbsolute3(keyFile) ? keyFile : resolve41(process.cwd(), keyFile);
154323
+ const resolvedKey = isAbsolute4(keyFile) ? keyFile : resolve41(process.cwd(), keyFile);
154224
154324
  try {
154225
154325
  assertCredentialOutsideRepo("asc-key-file", resolvedKey);
154226
154326
  } catch (error) {
@@ -154245,8 +154345,8 @@ async function runSigningInspect(pos, flags, io2, deps = {}) {
154245
154345
  error: "local asset check needs --cert-file, --cert-password, and --profile-file together"
154246
154346
  });
154247
154347
  }
154248
- const certPath = isAbsolute3(certFile) ? certFile : resolve41(process.cwd(), certFile);
154249
- const profilePath2 = isAbsolute3(profileFile) ? profileFile : resolve41(process.cwd(), profileFile);
154348
+ const certPath = isAbsolute4(certFile) ? certFile : resolve41(process.cwd(), certFile);
154349
+ const profilePath2 = isAbsolute4(profileFile) ? profileFile : resolve41(process.cwd(), profileFile);
154250
154350
  try {
154251
154351
  assertCredentialOutsideRepo("cert-file", certPath);
154252
154352
  assertCredentialOutsideRepo("profile-file", profilePath2);
@@ -154301,12 +154401,12 @@ __export(content_manifest_exports, {
154301
154401
  writeContentManifest: () => writeContentManifest
154302
154402
  });
154303
154403
  import { randomUUID as randomUUID8 } from "node:crypto";
154304
- import { constants as constants2, lstatSync as lstatSync12, readFileSync as readFileSync50, realpathSync as realpathSync7, writeFileSync as writeFileSync17, renameSync as renameSync9, openSync as openSync3, closeSync as closeSync3, unlinkSync as unlinkSync2 } from "node:fs";
154404
+ import { constants as constants2, lstatSync as lstatSync14, readFileSync as readFileSync50, realpathSync as realpathSync7, writeFileSync as writeFileSync17, renameSync as renameSync9, openSync as openSync3, closeSync as closeSync3, unlinkSync as unlinkSync2 } from "node:fs";
154305
154405
  import { join as join37 } from "node:path";
154306
154406
  function contentManifestPath(dir) {
154307
154407
  const path2 = join37(realpathSync7(dir), "himalaya.content.json");
154308
154408
  try {
154309
- if (lstatSync12(path2).isSymbolicLink()) throw new Error("himalaya.content.json is a symlink \u2014 refusing to read or write through it");
154409
+ if (lstatSync14(path2).isSymbolicLink()) throw new Error("himalaya.content.json is a symlink \u2014 refusing to read or write through it");
154310
154410
  } catch (error) {
154311
154411
  if (error.code !== "ENOENT") throw error;
154312
154412
  }
@@ -154823,7 +154923,7 @@ __export(template_trim_exports, {
154823
154923
  runTemplateTrim: () => runTemplateTrim,
154824
154924
  trimCapabilities: () => trimCapabilities
154825
154925
  });
154826
- import { cpSync, existsSync as existsSync46, mkdirSync as mkdirSync23, readdirSync as readdirSync25, readFileSync as readFileSync51, renameSync as renameSync10, rmSync as rmSync14, statSync as statSync13, writeFileSync as writeFileSync18 } from "node:fs";
154926
+ import { cpSync, existsSync as existsSync46, mkdirSync as mkdirSync24, readdirSync as readdirSync25, readFileSync as readFileSync51, renameSync as renameSync10, rmSync as rmSync14, statSync as statSync13, writeFileSync as writeFileSync18 } from "node:fs";
154827
154927
  import { dirname as dirname29, join as join38 } from "node:path";
154828
154928
  import ts5 from "typescript";
154829
154929
  function routeMatcher(pattern) {
@@ -155855,9 +155955,9 @@ async function runTemplateTrim(req, deps) {
155855
155955
  return { code: 1, result: { ok: false, error: `${error} (${message2}); every file was restored`, rolledBack: true, ...base(validate6) } };
155856
155956
  };
155857
155957
  try {
155858
- mkdirSync23(join38(backup, "dev"), { recursive: true });
155958
+ mkdirSync24(join38(backup, "dev"), { recursive: true });
155859
155959
  for (const [path2, rel] of originals) cpSync(path2, join38(backup, rel));
155860
- if (plan.removedWorkers.length) mkdirSync23(join38(backup, "tier5-src"), { recursive: true });
155960
+ if (plan.removedWorkers.length) mkdirSync24(join38(backup, "tier5-src"), { recursive: true });
155861
155961
  } catch (e2) {
155862
155962
  dropBackup();
155863
155963
  return { code: 1, result: { ok: false, error: `could not back up the app before trimming it (${e2.message}); nothing was changed`, rolledBack: true, ...base() } };
@@ -156155,7 +156255,7 @@ __export(template_adopt_exports, {
156155
156255
  workerReach: () => workerReach,
156156
156256
  writeInventory: () => writeInventory
156157
156257
  });
156158
- import { existsSync as existsSync47, lstatSync as lstatSync13, mkdirSync as mkdirSync24, readdirSync as readdirSync26, readFileSync as readFileSync52, renameSync as renameSync11, statSync as statSync14, writeFileSync as writeFileSync19 } from "node:fs";
156258
+ import { existsSync as existsSync47, lstatSync as lstatSync15, mkdirSync as mkdirSync25, readdirSync as readdirSync26, readFileSync as readFileSync52, renameSync as renameSync11, statSync as statSync14, writeFileSync as writeFileSync19 } from "node:fs";
156159
156259
  import { dirname as dirname30, join as join39, posix as posix2 } from "node:path";
156160
156260
  import ts6 from "typescript";
156161
156261
  function readAppSources(dir) {
@@ -156499,9 +156599,9 @@ function inventorySummary(inv) {
156499
156599
  function writeNoFollow(dir, rel, body) {
156500
156600
  const p2 = join39(dir, rel);
156501
156601
  const parent = dirname30(p2);
156502
- if (existsSync47(parent) && lstatSync13(parent).isSymbolicLink()) throw new TrimRefusal(`${dirname30(rel)} is a symlink \u2014 refusing to write through it`);
156503
- mkdirSync24(parent, { recursive: true });
156504
- if (existsSync47(p2) && lstatSync13(p2).isSymbolicLink()) throw new TrimRefusal(`${rel} is a symlink \u2014 refusing to write through it`);
156602
+ if (existsSync47(parent) && lstatSync15(parent).isSymbolicLink()) throw new TrimRefusal(`${dirname30(rel)} is a symlink \u2014 refusing to write through it`);
156603
+ mkdirSync25(parent, { recursive: true });
156604
+ if (existsSync47(p2) && lstatSync15(p2).isSymbolicLink()) throw new TrimRefusal(`${rel} is a symlink \u2014 refusing to write through it`);
156505
156605
  const tmp = `${p2}.${process.pid}.${Date.now()}.tmp`;
156506
156606
  writeFileSync19(tmp, body, { flag: "wx" });
156507
156607
  renameSync11(tmp, p2);
@@ -156555,7 +156655,7 @@ function replaceScreen(dir, id, entry) {
156555
156655
  }
156556
156656
  for (const rel of ["dev", "dev/index.ts"]) {
156557
156657
  const p2 = join39(dir, rel);
156558
- if (existsSync47(p2) && lstatSync13(p2).isSymbolicLink()) throw new TrimRefusal(`${rel} is a symlink \u2014 refusing to write through it (dev/index.ts left unchanged)`);
156658
+ if (existsSync47(p2) && lstatSync15(p2).isSymbolicLink()) throw new TrimRefusal(`${rel} is a symlink \u2014 refusing to write through it (dev/index.ts left unchanged)`);
156559
156659
  }
156560
156660
  writeNoFollow(dir, "dev/index.ts", next);
156561
156661
  return { ok: true, screen: id, bytes: body.length };
@@ -156619,7 +156719,7 @@ function addScreen(dir, id, entry, opts = {}) {
156619
156719
  }
156620
156720
  for (const rel of ["dev", "dev/index.ts", ...config !== src.config ? ["config.ts"] : [], ...contentWithView !== void 0 ? ["himalaya.content.json"] : []]) {
156621
156721
  const p2 = join39(dir, rel);
156622
- if (existsSync47(p2) && lstatSync13(p2).isSymbolicLink()) throw new TrimRefusal(`${rel} is a symlink \u2014 refusing to write through it (nothing written)`);
156722
+ if (existsSync47(p2) && lstatSync15(p2).isSymbolicLink()) throw new TrimRefusal(`${rel} is a symlink \u2014 refusing to write through it (nothing written)`);
156623
156723
  }
156624
156724
  writeNoFollow(dir, "dev/index.ts", dev);
156625
156725
  if (config !== src.config) writeNoFollow(dir, "config.ts", config);
@@ -156918,7 +157018,7 @@ var init_hosted_owner = __esm({
156918
157018
  });
156919
157019
 
156920
157020
  // src/config-source-edit.ts
156921
- import { lstatSync as lstatSync14 } from "node:fs";
157021
+ import { lstatSync as lstatSync16 } from "node:fs";
156922
157022
  import { join as join40 } from "node:path";
156923
157023
  import ts7 from "typescript";
156924
157024
  function defineAppLiteral(file2) {
@@ -157024,7 +157124,7 @@ function backUpConfig(dir, folder, fileName, original) {
157024
157124
  }
157025
157125
  function isSymlink2(path2) {
157026
157126
  try {
157027
- return lstatSync14(path2).isSymbolicLink();
157127
+ return lstatSync16(path2).isSymbolicLink();
157028
157128
  } catch {
157029
157129
  return false;
157030
157130
  }
@@ -157511,7 +157611,7 @@ __export(pack_exports, {
157511
157611
  });
157512
157612
  import { createHash as createHash24 } from "node:crypto";
157513
157613
  import { deflateRawSync, inflateRawSync } from "node:zlib";
157514
- import { existsSync as existsSync48, mkdirSync as mkdirSync25, readFileSync as readFileSync54, readdirSync as readdirSync27, rmSync as rmSync15, statSync as statSync15, writeFileSync as writeFileSync20 } from "node:fs";
157614
+ import { existsSync as existsSync48, mkdirSync as mkdirSync26, readFileSync as readFileSync54, readdirSync as readdirSync27, rmSync as rmSync15, statSync as statSync15, writeFileSync as writeFileSync20 } from "node:fs";
157515
157615
  import { dirname as dirname31, join as join41, resolve as resolve43 } from "node:path";
157516
157616
  function writeZip(entries) {
157517
157617
  const sorted2 = entries.slice().sort((a2, b2) => a2.path < b2.path ? -1 : a2.path > b2.path ? 1 : 0);
@@ -157690,7 +157790,7 @@ function packRelease(releaseRoot, app, out2, opts = {}) {
157690
157790
  const buf = writeZip(all);
157691
157791
  const isDir2 = existsSync48(out2) && statSync15(out2).isDirectory();
157692
157792
  const outFile = isDir2 ? join41(resolve43(out2), packageFileName(app, header.releaseId)) : resolve43(out2);
157693
- mkdirSync25(dirname31(outFile), { recursive: true });
157793
+ mkdirSync26(dirname31(outFile), { recursive: true });
157694
157794
  writeFileSync20(outFile, buf);
157695
157795
  return { app, releaseId: header.releaseId, header, out: outFile, bytes: buf.length, entryCount: all.length, skipped };
157696
157796
  }
@@ -157734,7 +157834,7 @@ function packReleaseToDir(releaseRoot, app, outDir, opts = {}) {
157734
157834
  let bytes2 = 0;
157735
157835
  for (const entry of all) {
157736
157836
  const target = join41(dest, entry.path);
157737
- mkdirSync25(dirname31(target), { recursive: true });
157837
+ mkdirSync26(dirname31(target), { recursive: true });
157738
157838
  writeFileSync20(target, entry.bytes);
157739
157839
  bytes2 += entry.bytes.length;
157740
157840
  }
@@ -157816,7 +157916,7 @@ function unpackTo(buf, dest, appFallback) {
157816
157916
  rmSync15(appDir3, { recursive: true, force: true });
157817
157917
  for (const [rel, bytes2] of entries) {
157818
157918
  const target = join41(appDir3, rel);
157819
- mkdirSync25(dirname31(target), { recursive: true });
157919
+ mkdirSync26(dirname31(target), { recursive: true });
157820
157920
  writeFileSync20(target, bytes2);
157821
157921
  }
157822
157922
  return { root, appDir: appDir3, app };
@@ -157856,8 +157956,8 @@ __export(app_source_exports, {
157856
157956
  zipAppSource: () => zipAppSource
157857
157957
  });
157858
157958
  import { createHash as createHash25 } from "node:crypto";
157859
- import { readdirSync as readdirSync28, lstatSync as lstatSync15, readFileSync as readFileSync55, mkdirSync as mkdirSync26, writeFileSync as writeFileSync21, existsSync as existsSync49, rmSync as rmSync16, rmdirSync as rmdirSync3, unlinkSync as unlinkSync3 } from "node:fs";
157860
- import { join as join42, resolve as resolve44, sep as sep13 } from "node:path";
157959
+ import { readdirSync as readdirSync28, lstatSync as lstatSync17, readFileSync as readFileSync55, mkdirSync as mkdirSync27, writeFileSync as writeFileSync21, existsSync as existsSync49, rmSync as rmSync16, rmdirSync as rmdirSync3, unlinkSync as unlinkSync3 } from "node:fs";
157960
+ import { join as join42, resolve as resolve44, sep as sep15 } from "node:path";
157861
157961
  import { createRequire as createRequire4 } from "node:module";
157862
157962
  import { deflateRawSync as deflateRawSync2 } from "node:zlib";
157863
157963
  function walkSourceTree(dir, file2, skip, enter = () => {
@@ -157866,7 +157966,7 @@ function walkSourceTree(dir, file2, skip, enter = () => {
157866
157966
  enter(relDir);
157867
157967
  for (const name of readdirSync28(join42(dir, relDir))) {
157868
157968
  const rel = relDir ? join42(relDir, name) : name;
157869
- const st2 = lstatSync15(join42(dir, rel));
157969
+ const st2 = lstatSync17(join42(dir, rel));
157870
157970
  if (st2.isSymbolicLink()) {
157871
157971
  skip(rel);
157872
157972
  continue;
@@ -157880,7 +157980,7 @@ function walkSourceTree(dir, file2, skip, enter = () => {
157880
157980
  skip(rel);
157881
157981
  continue;
157882
157982
  }
157883
- file2(rel.split(sep13).join("/"), rel);
157983
+ file2(rel.split(sep15).join("/"), rel);
157884
157984
  }
157885
157985
  };
157886
157986
  walk2("");
@@ -157940,14 +158040,14 @@ function renderInputRootDirs(dir) {
157940
158040
  }
157941
158041
  function newestSourceChangeMs(dir) {
157942
158042
  const roots2 = renderInputRootDirs(dir);
157943
- const inRead = (hostRel) => !roots2 || roots2.has(hostRel.split(sep13)[0]);
157944
- const counts = (hostRel) => !hostRel.includes(sep13) || inRead(hostRel);
158043
+ const inRead = (hostRel) => !roots2 || roots2.has(hostRel.split(sep15)[0]);
158044
+ const counts = (hostRel) => !hostRel.includes(sep15) || inRead(hostRel);
157945
158045
  let newest = 0;
157946
158046
  walkSourceTree(
157947
158047
  dir,
157948
158048
  (archivePath, hostRel) => {
157949
158049
  if (/\.md$/i.test(archivePath) || !counts(hostRel)) return;
157950
- const m2 = lstatSync15(join42(dir, hostRel)).mtimeMs;
158050
+ const m2 = lstatSync17(join42(dir, hostRel)).mtimeMs;
157951
158051
  if (m2 > newest) newest = m2;
157952
158052
  },
157953
158053
  () => {
@@ -157959,7 +158059,7 @@ function newestSourceChangeMs(dir) {
157959
158059
  // Nor a root directory the render does not read: creating a file in `_qa/` moves `_qa/`.
157960
158060
  (hostRel) => {
157961
158061
  if (hostRel === "" || !inRead(hostRel)) return;
157962
- const m2 = lstatSync15(join42(dir, hostRel)).mtimeMs;
158062
+ const m2 = lstatSync17(join42(dir, hostRel)).mtimeMs;
157963
158063
  if (m2 > newest) newest = m2;
157964
158064
  }
157965
158065
  );
@@ -158007,7 +158107,7 @@ function readAppSource(zip) {
158007
158107
  }
158008
158108
  function pathKind(p2) {
158009
158109
  try {
158010
- return lstatSync15(p2);
158110
+ return lstatSync17(p2);
158011
158111
  } catch {
158012
158112
  return null;
158013
158113
  }
@@ -158019,7 +158119,7 @@ function writeAppSource(entries, destDir) {
158019
158119
  `refusing to restore into ${root}: the destination itself is a symlink, so every file would be written outside it. Remove it, or pass --out/--name somewhere else.`
158020
158120
  );
158021
158121
  }
158022
- mkdirSync26(root, { recursive: true });
158122
+ mkdirSync27(root, { recursive: true });
158023
158123
  const written = [];
158024
158124
  for (const entry of entries) {
158025
158125
  if (isDeniedSourcePath(entry.path)) continue;
@@ -158030,7 +158130,7 @@ function writeAppSource(entries, destDir) {
158030
158130
  const kind = pathKind(dir);
158031
158131
  if (kind?.isSymbolicLink()) unlinkSync3(dir);
158032
158132
  else if (kind) continue;
158033
- mkdirSync26(dir);
158133
+ mkdirSync27(dir);
158034
158134
  }
158035
158135
  const target = join42(root, ...segments);
158036
158136
  if (pathKind(target)?.isSymbolicLink()) unlinkSync3(target);
@@ -158103,8 +158203,8 @@ function pruneEmptyDirs(root, rel, needed, removed) {
158103
158203
  let empty2 = true;
158104
158204
  for (const name of readdirSync28(rel ? join42(root, rel) : root)) {
158105
158205
  const childRel = rel ? join42(rel, name) : name;
158106
- const posix5 = childRel.split(sep13).join("/");
158107
- const kind = lstatSync15(join42(root, childRel));
158206
+ const posix5 = childRel.split(sep15).join("/");
158207
+ const kind = lstatSync17(join42(root, childRel));
158108
158208
  if (kind.isSymbolicLink() || !kind.isDirectory() || isDeniedSourceDir(name, rel)) {
158109
158209
  empty2 = false;
158110
158210
  continue;
@@ -158186,9 +158286,9 @@ __export(run_watch_exports, {
158186
158286
  watchedContentDir: () => watchedContentDir,
158187
158287
  writeRunRecord: () => writeRunRecord
158188
158288
  });
158189
- import { closeSync as closeSync4, constants as constants3, existsSync as existsSync50, fstatSync, lstatSync as lstatSync16, statSync as statSync16, readdirSync as readdirSync29, mkdirSync as mkdirSync27, openSync as openSync4, readFileSync as readFileSync56, realpathSync as realpathSync8, renameSync as renameSync12, rmSync as rmSync17, writeFileSync as writeFileSync22, watch as fsWatch } from "node:fs";
158289
+ import { closeSync as closeSync4, constants as constants3, existsSync as existsSync50, fstatSync, lstatSync as lstatSync18, statSync as statSync16, readdirSync as readdirSync29, mkdirSync as mkdirSync28, openSync as openSync4, readFileSync as readFileSync56, realpathSync as realpathSync8, renameSync as renameSync12, rmSync as rmSync17, writeFileSync as writeFileSync22, watch as fsWatch } from "node:fs";
158190
158290
  import { randomUUID as randomUUID9 } from "node:crypto";
158191
- import { extname as extname4, join as join43, relative as relative10, resolve as resolve45, sep as sep14 } from "node:path";
158291
+ import { extname as extname4, join as join43, relative as relative11, resolve as resolve45, sep as sep16 } from "node:path";
158192
158292
  function diffReleases(prev, next) {
158193
158293
  const bundles = Object.keys(next.bundles).filter((b2) => prev.bundles[b2]?.sha256 !== next.bundles[b2].sha256).sort();
158194
158294
  const changedBundles = new Set(bundles);
@@ -158216,7 +158316,7 @@ function reloadEvents(d2) {
158216
158316
  function hhpRasterDir(dir) {
158217
158317
  const assets = findAssetsDir(dir);
158218
158318
  if (!assets) return null;
158219
- const rel = relative10(dir, assets).split(sep14).join("/");
158319
+ const rel = relative11(dir, assets).split(sep16).join("/");
158220
158320
  return rel ? `${rel}/hhp-raster` : "hhp-raster";
158221
158321
  }
158222
158322
  function ignoredChange(relPath, isDirectory = () => false, rasterDir = "assets/hhp-raster") {
@@ -158266,7 +158366,7 @@ function watchContent(dir, onChange, opts = {}) {
158266
158366
  for (const name of entries) {
158267
158367
  const path2 = join43(directory, String(name)), rel = prefix ? `${prefix}/${name}` : String(name);
158268
158368
  try {
158269
- const stat2 = lstatSync16(path2);
158369
+ const stat2 = lstatSync18(path2);
158270
158370
  if (stat2.isSymbolicLink() || ignoredChange(rel, () => stat2.isDirectory(), rasterDir)) continue;
158271
158371
  if (stat2.isDirectory()) visit(path2, rel);
158272
158372
  else if (stat2.isFile()) files.set(rel, `${stat2.mtimeMs}:${stat2.ctimeMs}:${stat2.size}`);
@@ -158364,11 +158464,11 @@ function serialize(task) {
158364
158464
  function himiDir(dir) {
158365
158465
  const root = join43(dir, ".himi");
158366
158466
  try {
158367
- return lstatSync16(root).isDirectory() ? root : null;
158467
+ return lstatSync18(root).isDirectory() ? root : null;
158368
158468
  } catch (e2) {
158369
158469
  if (e2.code !== "ENOENT") return null;
158370
- mkdirSync27(root, { recursive: true });
158371
- return lstatSync16(root).isDirectory() ? root : null;
158470
+ mkdirSync28(root, { recursive: true });
158471
+ return lstatSync18(root).isDirectory() ? root : null;
158372
158472
  }
158373
158473
  }
158374
158474
  function writeRunRecord(dir, record3) {
@@ -158388,7 +158488,7 @@ function writeRunRecord(dir, record3) {
158388
158488
  function removeRunRecord(dir, owner) {
158389
158489
  const root = join43(dir, ".himi");
158390
158490
  try {
158391
- if (!lstatSync16(root).isDirectory()) return;
158491
+ if (!lstatSync18(root).isDirectory()) return;
158392
158492
  } catch {
158393
158493
  return;
158394
158494
  }
@@ -158406,7 +158506,7 @@ function removeRunRecord(dir, owner) {
158406
158506
  function removeInitWatchRecord(dir, owner) {
158407
158507
  const root = join43(dir, ".himi");
158408
158508
  try {
158409
- if (!lstatSync16(root).isDirectory()) return;
158509
+ if (!lstatSync18(root).isDirectory()) return;
158410
158510
  } catch {
158411
158511
  return;
158412
158512
  }
@@ -158443,16 +158543,16 @@ function boardFile(dir, pathname) {
158443
158543
  }
158444
158544
  function readConfined(root, rel) {
158445
158545
  try {
158446
- if (!lstatSync16(root).isDirectory()) return null;
158447
- const parts = rel.split(sep14);
158546
+ if (!lstatSync18(root).isDirectory()) return null;
158547
+ const parts = rel.split(sep16);
158448
158548
  let at2 = root;
158449
158549
  for (let i2 = 0; i2 < parts.length; i2++) {
158450
158550
  at2 = join43(at2, parts[i2]);
158451
- const st2 = lstatSync16(at2);
158551
+ const st2 = lstatSync18(at2);
158452
158552
  if (st2.isSymbolicLink() || !(i2 === parts.length - 1 ? st2.isFile() : st2.isDirectory())) return null;
158453
158553
  }
158454
158554
  const canonicalRoot = realpathSync8(root);
158455
- if (!realpathSync8(at2).startsWith(canonicalRoot + sep14)) return null;
158555
+ if (!realpathSync8(at2).startsWith(canonicalRoot + sep16)) return null;
158456
158556
  const fd = openSync4(at2, constants3.O_RDONLY | (constants3.O_NOFOLLOW ?? 0));
158457
158557
  try {
158458
158558
  if (!fstatSync(fd).isFile()) return null;
@@ -158516,7 +158616,7 @@ __export(screen_state_exports, {
158516
158616
  withHomeCaveat: () => withHomeCaveat
158517
158617
  });
158518
158618
  import { createHash as createHash26 } from "node:crypto";
158519
- import { lstatSync as lstatSync17, readFileSync as readFileSync57 } from "node:fs";
158619
+ import { lstatSync as lstatSync19, readFileSync as readFileSync57 } from "node:fs";
158520
158620
  import { join as join44 } from "node:path";
158521
158621
  function quotableLine(text13) {
158522
158622
  if (!text13) return void 0;
@@ -158575,7 +158675,7 @@ function screenStateOf(services, html, opts = {}) {
158575
158675
  function readRecord(dir) {
158576
158676
  const file2 = join44(dir, SHOT_STATES_FILE);
158577
158677
  try {
158578
- if (!lstatSync17(file2).isFile()) return {};
158678
+ if (!lstatSync19(file2).isFile()) return {};
158579
158679
  const r3 = JSON.parse(readFileSync57(file2, "utf8"));
158580
158680
  return r3.v === 1 && r3.shots && typeof r3.shots === "object" ? r3.shots : {};
158581
158681
  } catch {
@@ -158652,7 +158752,7 @@ __export(studio_reel_exports, {
158652
158752
  utcDay: () => utcDay
158653
158753
  });
158654
158754
  import { createHash as createHash27 } from "node:crypto";
158655
- import { lstatSync as lstatSync18, readFileSync as readFileSync58 } from "node:fs";
158755
+ import { lstatSync as lstatSync20, readFileSync as readFileSync58 } from "node:fs";
158656
158756
  import { basename as basename16, join as join45 } from "node:path";
158657
158757
  function loadMemory2(dir) {
158658
158758
  const m2 = readJson5(join45(dir, ".himi", "studio", "memory.json"));
@@ -158737,7 +158837,7 @@ function inlineImages(dir, plan, budget = REEL_BUDGET_BYTES) {
158737
158837
  if (!HISTORY_NAME.test(f2)) return null;
158738
158838
  try {
158739
158839
  const path2 = join45(dir, HISTORY_DIR, f2);
158740
- const st2 = lstatSync18(path2);
158840
+ const st2 = lstatSync20(path2);
158741
158841
  if (!st2.isFile() || st2.nlink !== 1) return null;
158742
158842
  const bytes2 = readFileSync58(path2);
158743
158843
  return createHash27("sha256").update(bytes2).digest("hex") === f2.slice(0, 64) && imageExtension(bytes2) === f2.slice(65) ? bytes2 : null;
@@ -158987,25 +159087,25 @@ __export(milestones_exports, {
158987
159087
  });
158988
159088
  import { createHash as createHash28, randomUUID as randomUUID10 } from "node:crypto";
158989
159089
  import { spawn as spawn4 } from "node:child_process";
158990
- import { closeSync as closeSync5, existsSync as existsSync51, lstatSync as lstatSync19, readFileSync as readFileSync60, statSync as statSync17 } from "node:fs";
159090
+ import { closeSync as closeSync5, existsSync as existsSync51, lstatSync as lstatSync21, readFileSync as readFileSync60, statSync as statSync17 } from "node:fs";
158991
159091
  import { createServer as createServer3 } from "node:net";
158992
- import { basename as basename17, dirname as dirname33, isAbsolute as isAbsolute4, join as join48, relative as relative11, resolve as resolve46, sep as sep15 } from "node:path";
159092
+ import { basename as basename17, dirname as dirname33, isAbsolute as isAbsolute5, join as join48, relative as relative12, resolve as resolve46, sep as sep17 } from "node:path";
158993
159093
  function homeShotPath(dir, home) {
158994
159094
  const root = resolve46(dir);
158995
159095
  const base = resolve46(root, ".himi", "shots");
158996
159096
  const shot = resolve46(base, `${home}.png`);
158997
- if (!shot.startsWith(base + sep15)) return null;
158998
- for (let p2 = shot; p2 !== root && p2.startsWith(root + sep15); p2 = dirname33(p2)) {
159097
+ if (!shot.startsWith(base + sep17)) return null;
159098
+ for (let p2 = shot; p2 !== root && p2.startsWith(root + sep17); p2 = dirname33(p2)) {
158999
159099
  try {
159000
- if (lstatSync19(p2).isSymbolicLink()) return null;
159100
+ if (lstatSync21(p2).isSymbolicLink()) return null;
159001
159101
  } catch {
159002
159102
  }
159003
159103
  }
159004
159104
  return shot;
159005
159105
  }
159006
159106
  function displayPath(p2, cwd = process.cwd()) {
159007
- const rel = relative11(cwd, p2);
159008
- return rel && !rel.startsWith("..") && !isAbsolute4(rel) ? rel : p2;
159107
+ const rel = relative12(cwd, p2);
159108
+ return rel && !rel.startsWith("..") && !isAbsolute5(rel) ? rel : p2;
159009
159109
  }
159010
159110
  function progressCommand(opts) {
159011
159111
  return `himi progress "<${opts.what}>"${opts.step ? ` --step ${opts.step}` : ""}${opts.image ? ` --image ${shellQuote(opts.image)}` : ""}${contentArg(opts.content)}`;
@@ -159145,8 +159245,8 @@ async function openBoardForSession(dir, cwd = process.cwd()) {
159145
159245
  try {
159146
159246
  const { openStudio: openStudio2 } = await Promise.resolve().then(() => (init_studio(), studio_exports));
159147
159247
  const { page, url } = openStudio2(dir);
159148
- const rel = relative11(cwd, page);
159149
- return { page: rel && !rel.startsWith("..") && !isAbsolute4(rel) ? rel : page, url, opened: false };
159248
+ const rel = relative12(cwd, page);
159249
+ return { page: rel && !rel.startsWith("..") && !isAbsolute5(rel) ? rel : page, url, opened: false };
159150
159250
  } catch (e2) {
159151
159251
  return { opened: false, error: `the build board was not created: ${e2.message} \u2014 \`himi studio --no-open\` in the app retries it` };
159152
159252
  }
@@ -159332,7 +159432,7 @@ function rememberDraft(dir, releaseId, m2) {
159332
159432
  function lastDraft(dir) {
159333
159433
  try {
159334
159434
  const file2 = join48(dir, LAST_DRAFT_FILE);
159335
- if (!lstatSync19(file2).isFile()) return null;
159435
+ if (!lstatSync21(file2).isFile()) return null;
159336
159436
  const r3 = JSON.parse(readFileSync60(file2, "utf8"));
159337
159437
  const m2 = r3.manifest;
159338
159438
  if (r3.v !== 1 || typeof r3.releaseId !== "string" || !m2 || typeof m2.screens !== "object" || !m2.screens || typeof m2.bundles !== "object" || !m2.bundles) return null;
@@ -159394,7 +159494,7 @@ function recordInitSource(dir, opts = {}) {
159394
159494
  function readInitSource(dir) {
159395
159495
  const file2 = join48(dir, INIT_SOURCE_FILE);
159396
159496
  try {
159397
- if (!lstatSync19(file2).isFile()) return null;
159497
+ if (!lstatSync21(file2).isFile()) return null;
159398
159498
  const r3 = JSON.parse(readFileSync60(file2, "utf8"));
159399
159499
  if (r3.v !== 1 || typeof r3.fingerprint !== "string" || !/^[0-9a-f]{64}$/.test(r3.fingerprint) || typeof r3.newestMs !== "number") return null;
159400
159500
  return {
@@ -159469,7 +159569,7 @@ function contentHomePictures(dir, home) {
159469
159569
  if (r3.state.state !== "content") continue;
159470
159570
  for (const file2 of [shot, hist && join48(hist, `${r3.sha256}.png`)]) {
159471
159571
  try {
159472
- if (!file2 || !lstatSync19(file2).isFile() || sha256Of2(file2) !== r3.sha256) continue;
159572
+ if (!file2 || !lstatSync21(file2).isFile() || sha256Of2(file2) !== r3.sha256) continue;
159473
159573
  } catch {
159474
159574
  continue;
159475
159575
  }
@@ -159482,7 +159582,7 @@ function contentHomePictures(dir, home) {
159482
159582
  function readInitWatch(dir) {
159483
159583
  const file2 = join48(dir, INIT_WATCH_FILE);
159484
159584
  try {
159485
- if (!lstatSync19(file2).isFile()) return null;
159585
+ if (!lstatSync21(file2).isFile()) return null;
159486
159586
  const r3 = JSON.parse(readFileSync60(file2, "utf8"));
159487
159587
  if (r3.v !== 1 || typeof r3.pid !== "number" || !Number.isInteger(r3.pid) || r3.pid < 1) return null;
159488
159588
  if (typeof r3.url !== "string" || !/^http:\/\/127\.0\.0\.1:\d+\//.test(r3.url) || typeof r3.board !== "string" || typeof r3.log !== "string" || typeof r3.startedAt !== "string") return null;
@@ -159515,7 +159615,7 @@ function watchReminder(dir, opts = {}) {
159515
159615
  const file2 = join48(dir, REMINDERS_FILE);
159516
159616
  let last = Number.NaN;
159517
159617
  try {
159518
- if (lstatSync19(file2).isFile()) last = Date.parse(JSON.parse(readFileSync60(file2, "utf8")).watch ?? "");
159618
+ if (lstatSync21(file2).isFile()) last = Date.parse(JSON.parse(readFileSync60(file2, "utf8")).watch ?? "");
159519
159619
  } catch {
159520
159620
  }
159521
159621
  if (Number.isFinite(last) && now - last >= 0 && now - last < WATCH_REMINDER_EVERY_MS) return void 0;
@@ -159638,7 +159738,7 @@ function afterHandoverPostcard(dir, opts = {}) {
159638
159738
  const file2 = join48(dir, ".himi", "making-of.html");
159639
159739
  let fresh = false;
159640
159740
  try {
159641
- const st2 = lstatSync19(file2);
159741
+ const st2 = lstatSync21(file2);
159642
159742
  fresh = st2.isFile() && !st2.isSymbolicLink() && st2.mtimeMs >= statSync17(join48(dir, ".himi", "progress.jsonl")).mtimeMs;
159643
159743
  } catch {
159644
159744
  fresh = false;
@@ -161428,6 +161528,7 @@ var init_capabilities_generated = __esm({
161428
161528
  "himi_apps": ["canOpen", "current", "hostInfo", "open"],
161429
161529
  "iap": ["appBinding", "consume", "entitlements", "finishTransaction", "getPaywallConfig", "getProducts", "getUnfinishedTransactions", "purchase", "purchaseForVerification", "restore"],
161430
161530
  "keyboard": ["dismiss"],
161531
+ "legacy_import": ["ack", "read"],
161431
161532
  "live_activity": ["end", "start", "update"],
161432
161533
  "local_database": ["availability", "count", "get", "getAll", "purge", "query", "queueDepth", "queueDrain", "queueEnqueue", "remove", "upsert"],
161433
161534
  "location": ["backgroundStart", "backgroundStop", "getCurrent", "getPermissionStatus", "regionAdd", "regionClear", "regionList", "regionNext", "regionRemove", "regionSupport", "requestPermission", "watchNext", "watchStart", "watchStop"],
@@ -161475,6 +161576,7 @@ var init_capabilities_generated = __esm({
161475
161576
  "himi_apps": ["@himalaya/himi-apps"],
161476
161577
  "iap": ["@himalaya/iap"],
161477
161578
  "keyboard": ["@himalaya/keyboard"],
161579
+ "legacy_import": ["@himalaya/legacy-import"],
161478
161580
  "live_activity": ["@himalaya/live-activity"],
161479
161581
  "local_database": ["@himalaya/local-db"],
161480
161582
  "location": ["@himalaya/location"],
@@ -161551,7 +161653,7 @@ var init_shell_capabilities_generated = __esm({
161551
161653
  shared: true,
161552
161654
  extensible: false,
161553
161655
  built: ["animation", "audio_record_background", "base44", "biometrics", "calendar", "calls", "camera", "clipboard", "contacts", "haptic", "health", "iap", "live_activity", "location", "media_playback", "motion", "on_device_ai", "photos", "push", "speech"],
161554
- serves: ["animation", "app_info", "audio_record", "audio_record_background", "base44", "biometrics", "browser_auth", "calendar", "calls", "camera", "clipboard", "contacts", "file_picker", "files", "haptic", "health", "himi_apps", "iap", "keyboard", "live_activity", "local_database", "location", "media_playback", "motion", "network", "on_device_ai", "open_url", "pdf", "photos", "presigned_upload", "push", "release_control", "secure_storage", "share", "speaker_diarization", "speech", "stream", "theme", "torch", "ui", "wix_api", "wix_cashier", "wix_chat", "wix_platform"]
161656
+ serves: ["animation", "app_info", "audio_record", "audio_record_background", "base44", "biometrics", "browser_auth", "calendar", "calls", "camera", "clipboard", "contacts", "file_picker", "files", "haptic", "health", "himi_apps", "iap", "keyboard", "legacy_import", "live_activity", "local_database", "location", "media_playback", "motion", "network", "on_device_ai", "open_url", "pdf", "photos", "presigned_upload", "push", "release_control", "secure_storage", "share", "speaker_diarization", "speech", "stream", "theme", "torch", "ui", "wix_api", "wix_cashier", "wix_chat", "wix_platform"]
161555
161657
  }
161556
161658
  };
161557
161659
  }
@@ -163256,7 +163358,7 @@ __export(gen_native_config_exports, {
163256
163358
  xmlAttr: () => xmlAttr2,
163257
163359
  yamlScalar: () => yamlScalar
163258
163360
  });
163259
- import { existsSync as existsSync61, mkdirSync as mkdirSync28, readFileSync as readFileSync71, readdirSync as readdirSync33, rmSync as rmSync18, statSync as statSync19, writeFileSync as writeFileSync25 } from "node:fs";
163361
+ import { existsSync as existsSync61, mkdirSync as mkdirSync29, readFileSync as readFileSync71, readdirSync as readdirSync33, rmSync as rmSync18, statSync as statSync19, writeFileSync as writeFileSync25 } from "node:fs";
163260
163362
  import { dirname as dirname36, join as join59 } from "node:path";
163261
163363
  import { fileURLToPath as fileURLToPath28 } from "node:url";
163262
163364
  function withoutComments(src) {
@@ -163778,7 +163880,7 @@ function applyWholeFile(path2, content, check) {
163778
163880
  const current = existsSync61(path2) ? readFileSync71(path2, "utf8") : null;
163779
163881
  if (current === content) return { path: path2, outcome: "unchanged" };
163780
163882
  if (check) return { path: path2, outcome: "drift" };
163781
- mkdirSync28(dirname36(path2), { recursive: true });
163883
+ mkdirSync29(dirname36(path2), { recursive: true });
163782
163884
  writeFileSync25(path2, content);
163783
163885
  return { path: path2, outcome: "written" };
163784
163886
  }
@@ -164179,7 +164281,7 @@ __export(capabilities_exports, {
164179
164281
  shellSupport: () => shellSupport,
164180
164282
  writeLastDist: () => writeLastDist
164181
164283
  });
164182
- import { existsSync as existsSync62, lstatSync as lstatSync20, readFileSync as readFileSync72 } from "node:fs";
164284
+ import { existsSync as existsSync62, lstatSync as lstatSync22, readFileSync as readFileSync72 } from "node:fs";
164183
164285
  import { join as join60 } from "node:path";
164184
164286
  function declareHintFor(id) {
164185
164287
  return catalogKey(id) === "app_services" ? "each calling screen's `logicBundle.declaredCapabilities` (the runtime gate) \u2014 an app need not list app_services in config.ts `capabilities`, which only a shell that hosts app services must (an HHP app declares it there, since HHP copies that list onto every screen)" : DECLARE_HINT;
@@ -164281,7 +164383,7 @@ async function writeLastDist(dir, rec) {
164281
164383
  function readLastDist(dir) {
164282
164384
  const path2 = join60(dir, LAST_DIST_FILE);
164283
164385
  try {
164284
- if (lstatSync20(join60(dir, ".himi")).isSymbolicLink() || lstatSync20(path2).isSymbolicLink()) return null;
164386
+ if (lstatSync22(join60(dir, ".himi")).isSymbolicLink() || lstatSync22(path2).isSymbolicLink()) return null;
164285
164387
  } catch {
164286
164388
  return null;
164287
164389
  }
@@ -165125,7 +165227,7 @@ __export(base44_types_exports, {
165125
165227
  renderBase44Types: () => renderBase44Types,
165126
165228
  writeBase44Types: () => writeBase44Types
165127
165229
  });
165128
- import { existsSync as existsSync63, mkdirSync as mkdirSync29, readFileSync as readFileSync73, writeFileSync as writeFileSync26 } from "node:fs";
165230
+ import { existsSync as existsSync63, mkdirSync as mkdirSync30, readFileSync as readFileSync73, writeFileSync as writeFileSync26 } from "node:fs";
165129
165231
  import { dirname as dirname37, join as join61 } from "node:path";
165130
165232
  function logicalName(spec) {
165131
165233
  return (isAdoptedEntity(spec) ? spec.base44Name : spec.name) ?? "";
@@ -165207,7 +165309,7 @@ async function writeBase44Types(dir, app) {
165207
165309
  const path2 = join61(dir, BASE44_TYPES_PATH);
165208
165310
  const changed = !existsSync63(path2) || readFileSync73(path2, "utf8") !== text13;
165209
165311
  if (changed) {
165210
- mkdirSync29(dirname37(path2), { recursive: true });
165312
+ mkdirSync30(dirname37(path2), { recursive: true });
165211
165313
  writeFileSync26(path2, text13);
165212
165314
  }
165213
165315
  return { path: path2, changed, entities: text13.split("\nexport const ").length - 1 };
@@ -165359,8 +165461,8 @@ __export(eject_exports, {
165359
165461
  EJECTABLE: () => EJECTABLE,
165360
165462
  ejectModule: () => ejectModule
165361
165463
  });
165362
- import { existsSync as existsSync65, mkdirSync as mkdirSync30, readFileSync as readFileSync75, writeFileSync as writeFileSync27 } from "node:fs";
165363
- import { dirname as dirname38, join as join63, relative as relative12, resolve as resolve51, sep as sep16 } from "node:path";
165464
+ import { existsSync as existsSync65, mkdirSync as mkdirSync31, readFileSync as readFileSync75, writeFileSync as writeFileSync27 } from "node:fs";
165465
+ import { dirname as dirname38, join as join63, relative as relative13, resolve as resolve51, sep as sep18 } from "node:path";
165364
165466
  function locate(repoRootOrCwd, mod) {
165365
165467
  const inRepo = resolve51(repoRootOrCwd, `stdlib/flows/${mod}/src/index.ts`);
165366
165468
  if (existsSync65(inRepo)) return { path: inRepo, form: "source" };
@@ -165390,7 +165492,7 @@ function ejectModule(opts) {
165390
165492
  }
165391
165493
  const ext = found.form === "source" ? "ts" : "mjs";
165392
165494
  const target = join63(contentDir2, "tier5-src", "_ejected", `${mod}.${ext}`);
165393
- mkdirSync30(dirname38(target), { recursive: true });
165495
+ mkdirSync31(dirname38(target), { recursive: true });
165394
165496
  const banner = `// EJECTED from @wix/himalaya/${mod}. This app owns this file now.
165395
165497
  //
165396
165498
  // Central fixes to @wix/himalaya/${mod} NO LONGER REACH THIS APP \u2014 including any
@@ -165413,7 +165515,7 @@ function ejectModule(opts) {
165413
165515
  if (!existsSync65(f2)) continue;
165414
165516
  const before = readFileSync75(f2, "utf8");
165415
165517
  let after = before;
165416
- let rel = relative12(dirname38(f2), target).split(sep16).join("/").replace(/\.tsx?$/, ".js");
165518
+ let rel = relative13(dirname38(f2), target).split(sep18).join("/").replace(/\.tsx?$/, ".js");
165417
165519
  if (!rel.startsWith(".")) rel = `./${rel}`;
165418
165520
  for (const spec of specifiersFor(mod)) {
165419
165521
  const q3 = spec.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
@@ -165594,8 +165696,8 @@ __export(icon_exports, {
165594
165696
  writePreparedIcon: () => writePreparedIcon
165595
165697
  });
165596
165698
  import { createHash as createHash31 } from "node:crypto";
165597
- import { accessSync as accessSync2, constants as constants4, existsSync as existsSync66, mkdirSync as mkdirSync31, readFileSync as readFileSync76, statSync as statSync20, writeFileSync as writeFileSync28 } from "node:fs";
165598
- import { basename as basename19, dirname as dirname39, join as join64, resolve as resolve52, sep as sep17 } from "node:path";
165699
+ import { accessSync as accessSync2, constants as constants4, existsSync as existsSync66, mkdirSync as mkdirSync32, readFileSync as readFileSync76, statSync as statSync20, writeFileSync as writeFileSync28 } from "node:fs";
165700
+ import { basename as basename19, dirname as dirname39, join as join64, resolve as resolve52, sep as sep19 } from "node:path";
165599
165701
  function readManifest(dir) {
165600
165702
  try {
165601
165703
  return JSON.parse(readFileSync76(join64(dir, MANIFEST), "utf8"));
@@ -165612,12 +165714,12 @@ function declaredIconName(dir) {
165612
165714
  function iconDest(dir, name) {
165613
165715
  const base = resolve52(dir);
165614
165716
  const abs = resolve52(base, name);
165615
- if (!abs.startsWith(base + sep17)) {
165717
+ if (!abs.startsWith(base + sep19)) {
165616
165718
  throw new Error(
165617
165719
  `himi icon: himalaya.content.json declares "icon": "${name}", which resolves outside the package (${abs}). Declare a path inside it, e.g. "${DEFAULT_CONTENT_ICON}".`
165618
165720
  );
165619
165721
  }
165620
- mkdirSync31(dirname39(abs), { recursive: true });
165722
+ mkdirSync32(dirname39(abs), { recursive: true });
165621
165723
  return abs;
165622
165724
  }
165623
165725
  function templateIconMatch(png) {
@@ -165973,8 +166075,8 @@ function baseOf(target, linkable, known) {
165973
166075
  let best = null;
165974
166076
  for (const base of linkable ?? []) {
165975
166077
  if (!known.has(base) || target.length <= base.length + 1 || !target.startsWith(base)) continue;
165976
- const sep24 = target[base.length];
165977
- if ((sep24 === "_" || sep24 === "/") && (!best || base.length > best.length)) best = base;
166078
+ const sep26 = target[base.length];
166079
+ if ((sep26 === "_" || sep26 === "/") && (!best || base.length > best.length)) best = base;
165978
166080
  }
165979
166081
  return best;
165980
166082
  }
@@ -166347,7 +166449,7 @@ __export(test_exports, {
166347
166449
  scopeDescriptors: () => scopeDescriptors,
166348
166450
  writeRecordedMocks: () => writeRecordedMocks
166349
166451
  });
166350
- import { existsSync as existsSync69, mkdirSync as mkdirSync32, readFileSync as readFileSync79, writeFileSync as writeFileSync29 } from "node:fs";
166452
+ import { existsSync as existsSync69, mkdirSync as mkdirSync33, readFileSync as readFileSync79, writeFileSync as writeFileSync29 } from "node:fs";
166351
166453
  import { join as join68, resolve as resolve53 } from "node:path";
166352
166454
  function readTestConfig(dir) {
166353
166455
  const p2 = resolve53(dir, TEST_CONFIG_FILE);
@@ -166525,7 +166627,7 @@ function writeRecordedMocks(opts) {
166525
166627
  };
166526
166628
  }
166527
166629
  const fs2 = opts.io ?? {
166528
- mkdir: (p2) => mkdirSync32(p2, { recursive: true }),
166630
+ mkdir: (p2) => mkdirSync33(p2, { recursive: true }),
166529
166631
  write: (p2, s2) => writeFileSync29(p2, s2)
166530
166632
  };
166531
166633
  fs2.mkdir(join68(opts.dir, "dev"));
@@ -167130,7 +167232,7 @@ var init_policy = __esm({
167130
167232
  // ../pre-pr-review/scope.mjs
167131
167233
  import { execFileSync as execFileSync4 } from "node:child_process";
167132
167234
  import { createHash as createHash32 } from "node:crypto";
167133
- import { resolve as resolve55, dirname as dirname41, isAbsolute as isAbsolute5, join as join69 } from "node:path";
167235
+ import { resolve as resolve55, dirname as dirname41, isAbsolute as isAbsolute6, join as join69 } from "node:path";
167134
167236
  import { fileURLToPath as fileURLToPath30 } from "node:url";
167135
167237
  function resolveRepoRoot2(cwd = process.cwd()) {
167136
167238
  let top;
@@ -167175,8 +167277,8 @@ var init_scope = __esm({
167175
167277
 
167176
167278
  // ../verify-gate/diff-hash.mjs
167177
167279
  import {
167178
- lstatSync as lstatSync21,
167179
- mkdirSync as mkdirSync33,
167280
+ lstatSync as lstatSync23,
167281
+ mkdirSync as mkdirSync34,
167180
167282
  mkdtempSync as mkdtempSync3,
167181
167283
  readFileSync as readFileSync80,
167182
167284
  readlinkSync,
@@ -167289,7 +167391,7 @@ function validationDiffHash(cwd = process.cwd()) {
167289
167391
  const deletedRecord = () => [`${Buffer.byteLength(path2)}:${path2}`, "deleted", stagedIdentity(headEntry, indexEntry, void 0), ""].join("\0");
167290
167392
  let stat2;
167291
167393
  try {
167292
- stat2 = lstatSync21(absolute);
167394
+ stat2 = lstatSync23(absolute);
167293
167395
  } catch (error) {
167294
167396
  if (error?.code === "ENOENT") return deletedRecord();
167295
167397
  throw error;
@@ -167325,7 +167427,7 @@ function validationDiffHash(cwd = process.cwd()) {
167325
167427
  }
167326
167428
  } catch (error) {
167327
167429
  try {
167328
- lstatSync21(absolute);
167430
+ lstatSync23(absolute);
167329
167431
  } catch (recheck) {
167330
167432
  if (recheck?.code === "ENOENT") return deletedRecord();
167331
167433
  }
@@ -167351,7 +167453,7 @@ function seed(repo, commands) {
167351
167453
  }
167352
167454
  function write(repo, rel, body) {
167353
167455
  const absolute = resolve56(repo, rel);
167354
- mkdirSync33(dirname42(absolute), { recursive: true });
167456
+ mkdirSync34(dirname42(absolute), { recursive: true });
167355
167457
  writeFileSync30(absolute, body);
167356
167458
  }
167357
167459
  function selfTestRepo({ withBase }) {
@@ -167523,8 +167625,8 @@ import { execFileSync as execFileSync5 } from "node:child_process";
167523
167625
  import { createHash as createHash35, randomBytes as randomBytes2 } from "node:crypto";
167524
167626
  import {
167525
167627
  existsSync as existsSync70,
167526
- lstatSync as lstatSync22,
167527
- mkdirSync as mkdirSync34,
167628
+ lstatSync as lstatSync24,
167629
+ mkdirSync as mkdirSync35,
167528
167630
  realpathSync as realpathSync9,
167529
167631
  readlinkSync as readlinkSync2,
167530
167632
  readFileSync as readFileSync81,
@@ -167532,7 +167634,7 @@ import {
167532
167634
  unlinkSync as unlinkSync4,
167533
167635
  writeFileSync as writeFileSync31
167534
167636
  } from "node:fs";
167535
- import { basename as basename21, join as join71, relative as relative13, resolve as resolve57 } from "node:path";
167637
+ import { basename as basename21, join as join71, relative as relative14, resolve as resolve57 } from "node:path";
167536
167638
  function attestationVersionOf(value2) {
167537
167639
  if (!value2 || typeof value2 !== "object" || Array.isArray(value2)) return null;
167538
167640
  const version5 = value2.attestation;
@@ -167582,7 +167684,7 @@ function repoRoot(contentDir2) {
167582
167684
  function storedContentDir(contentDir2) {
167583
167685
  const absolute = resolve57(contentDir2);
167584
167686
  const root = repoRoot(absolute);
167585
- return root ? relative13(root, absolute) || "." : ".";
167687
+ return root ? relative14(root, absolute) || "." : ".";
167586
167688
  }
167587
167689
  function currentGitDiffHash(contentDir2) {
167588
167690
  const root = repoRoot(resolve57(contentDir2));
@@ -167594,20 +167696,20 @@ function currentGitUntrackedHash(contentDir2) {
167594
167696
  const absolute = realpathSync9.native(unresolved);
167595
167697
  const root = repoRoot(absolute);
167596
167698
  if (!root) return sourceTreeHash(absolute);
167597
- const scope2 = relative13(root, absolute) || ".";
167699
+ const scope2 = relative14(root, absolute) || ".";
167598
167700
  const listed = execFileSync5("git", ["-C", root, "ls-files", "--others", "--exclude-standard", "-z", "--", scope2], {
167599
167701
  encoding: "utf8",
167600
167702
  maxBuffer: GIT_HASH_MAX_BUFFER
167601
167703
  });
167602
167704
  const hash3 = createHash35("sha256");
167603
167705
  for (const path2 of listed.split("\0").filter(Boolean).sort()) {
167604
- const local = relative13(absolute, join71(root, path2));
167706
+ const local = relative14(absolute, join71(root, path2));
167605
167707
  const segs = local.split(/[\\/]/);
167606
167708
  if (NOT_ATTESTED_DIRS.has(segs[0])) continue;
167607
167709
  if (segs.length === 1 && AGENT_TOOLING_ROOT_FILES.includes(segs[0])) continue;
167608
167710
  if (MCP_HOST_CONFIG_FILES.includes(segs.join("/"))) continue;
167609
167711
  const full = join71(root, path2);
167610
- const stats = lstatSync22(full, { throwIfNoEntry: false });
167712
+ const stats = lstatSync24(full, { throwIfNoEntry: false });
167611
167713
  if (!stats) continue;
167612
167714
  const kind = stats.isSymbolicLink() ? "link" : stats.isDirectory() ? "dir" : stats.isFile() ? "file" : null;
167613
167715
  if (!kind) continue;
@@ -167624,7 +167726,7 @@ function sourceTreeHash(root) {
167624
167726
  for (const entry of readdirSync34(dir, { withFileTypes: true }).sort((a2, b2) => a2.name < b2.name ? -1 : a2.name > b2.name ? 1 : 0)) {
167625
167727
  if (entry.isDirectory() && (entry.name === ".git" || entry.name === "node_modules" || NOT_ATTESTED_DIRS.has(entry.name))) continue;
167626
167728
  const path2 = join71(dir, entry.name);
167627
- const local = relative13(root, path2);
167729
+ const local = relative14(root, path2);
167628
167730
  if (dir === root && entry.isFile() && AGENT_TOOLING_ROOT_FILES.includes(entry.name)) continue;
167629
167731
  if (MCP_HOST_CONFIG_FILES.includes(local.split(/[\\/]/).join("/"))) continue;
167630
167732
  if (entry.isDirectory()) visit(path2);
@@ -167742,7 +167844,7 @@ function summaryOf2(attestation) {
167742
167844
  function writeAttestation(input, opts = {}) {
167743
167845
  const contentDir2 = resolve57(input.contentDir);
167744
167846
  const dir = join71(contentDir2, ".himi", "attestations");
167745
- mkdirSync34(dir, { recursive: true });
167847
+ mkdirSync35(dir, { recursive: true });
167746
167848
  const previous = readLatestAttestation(contentDir2);
167747
167849
  const runId2 = `${(opts.now ?? (() => /* @__PURE__ */ new Date()))().toISOString()}-${(opts.randomSuffix ?? (() => randomBytes2(3).toString("hex")))()}`;
167748
167850
  const descriptorHashes = Object.fromEntries(
@@ -167755,7 +167857,7 @@ function writeAttestation(input, opts = {}) {
167755
167857
  const screenshots = Object.fromEntries(screenshotEntries.map(({ screen, hash: hash3 }) => [screen, hash3]));
167756
167858
  for (const { bytes: bytes2, hash: hash3 } of screenshotEntries) {
167757
167859
  const artifact = screenshotArtifactPath(contentDir2, hash3);
167758
- mkdirSync34(join71(dir, "artifacts"), { recursive: true });
167860
+ mkdirSync35(join71(dir, "artifacts"), { recursive: true });
167759
167861
  if (!existsSync70(artifact)) writeFileSync31(artifact, bytes2);
167760
167862
  }
167761
167863
  const unsigned = {
@@ -167902,8 +168004,8 @@ var init_attestation = __esm({
167902
168004
  });
167903
168005
 
167904
168006
  // src/ux-evidence.ts
167905
- import { existsSync as existsSync71, mkdirSync as mkdirSync35, readFileSync as readFileSync82, writeFileSync as writeFileSync32 } from "node:fs";
167906
- import { dirname as dirname43, isAbsolute as isAbsolute6, join as join72, relative as relative14, resolve as resolve58 } from "node:path";
168007
+ import { existsSync as existsSync71, mkdirSync as mkdirSync36, readFileSync as readFileSync82, writeFileSync as writeFileSync32 } from "node:fs";
168008
+ import { dirname as dirname43, isAbsolute as isAbsolute7, join as join72, relative as relative15, resolve as resolve58 } from "node:path";
167907
168009
  function isNativePlatform(value2) {
167908
168010
  return typeof value2 === "string" && NATIVE_PLATFORMS.includes(value2);
167909
168011
  }
@@ -167947,12 +168049,12 @@ function recordedRenderWidths(content) {
167947
168049
  return renderEvidenceEntries(evidence).map((entry) => entry.width);
167948
168050
  }
167949
168051
  function writeEvidence(path2, evidence) {
167950
- mkdirSync35(dirname43(path2), { recursive: true });
168052
+ mkdirSync36(dirname43(path2), { recursive: true });
167951
168053
  writeFileSync32(path2, JSON.stringify(evidence, null, 2) + "\n");
167952
168054
  }
167953
168055
  function recordedFilePath(dir, file2) {
167954
- const rel = relative14(dir, resolve58(file2));
167955
- return rel && !rel.startsWith("..") && !isAbsolute6(rel) ? rel : file2;
168056
+ const rel = relative15(dir, resolve58(file2));
168057
+ return rel && !rel.startsWith("..") && !isAbsolute7(rel) ? rel : file2;
167956
168058
  }
167957
168059
  function recordRenderWidth(content, entry) {
167958
168060
  try {
@@ -170003,12 +170105,12 @@ var init_cli_bridge = __esm({
170003
170105
  });
170004
170106
 
170005
170107
  // src/mcp/file-tools.ts
170006
- import { closeSync as closeSync6, constants as constants5, lstatSync as lstatSync23, mkdirSync as mkdirSync36, openSync as openSync5, readdirSync as readdirSync35, readFileSync as readFileSync88, realpathSync as realpathSync10, renameSync as renameSync13, rmSync as rmSync21, statSync as statSync21, writeSync, existsSync as existsSync76 } from "node:fs";
170108
+ import { closeSync as closeSync6, constants as constants5, lstatSync as lstatSync25, mkdirSync as mkdirSync37, openSync as openSync5, readdirSync as readdirSync35, readFileSync as readFileSync88, realpathSync as realpathSync10, renameSync as renameSync13, rmSync as rmSync21, statSync as statSync21, writeSync, existsSync as existsSync76 } from "node:fs";
170007
170109
  import { randomBytes as randomBytes3 } from "node:crypto";
170008
- import { dirname as dirname44, isAbsolute as isAbsolute7, join as join77, relative as relative15, resolve as resolve60, sep as sep18 } from "node:path";
170110
+ import { dirname as dirname44, isAbsolute as isAbsolute8, join as join77, relative as relative16, resolve as resolve60, sep as sep20 } from "node:path";
170009
170111
  import * as z2 from "zod";
170010
170112
  function within(root, p2) {
170011
- return p2 === root || p2.startsWith(root.endsWith(sep18) ? root : root + sep18);
170113
+ return p2 === root || p2.startsWith(root.endsWith(sep20) ? root : root + sep20);
170012
170114
  }
170013
170115
  function realish(p2) {
170014
170116
  let cur = p2;
@@ -170016,17 +170118,17 @@ function realish(p2) {
170016
170118
  while (!existsSync76(cur)) {
170017
170119
  const up = dirname44(cur);
170018
170120
  if (up === cur) break;
170019
- tail.unshift(cur.slice(up.length + (up.endsWith(sep18) ? 0 : 1)));
170121
+ tail.unshift(cur.slice(up.length + (up.endsWith(sep20) ? 0 : 1)));
170020
170122
  cur = up;
170021
170123
  }
170022
170124
  return join77(realpathSync10(cur), ...tail);
170023
170125
  }
170024
170126
  function symlinkComponent(base, abs) {
170025
170127
  let cur = base;
170026
- for (const part4 of relative15(base, abs).split(sep18).filter(Boolean)) {
170128
+ for (const part4 of relative16(base, abs).split(sep20).filter(Boolean)) {
170027
170129
  cur = join77(cur, part4);
170028
170130
  try {
170029
- if (lstatSync23(cur).isSymbolicLink()) return relative15(base, cur);
170131
+ if (lstatSync25(cur).isSymbolicLink()) return relative16(base, cur);
170030
170132
  } catch {
170031
170133
  return void 0;
170032
170134
  }
@@ -170049,7 +170151,7 @@ async function confinedAppDir(args, deps) {
170049
170151
  if (!within(root, dir) || !within(realpathSync10(root), realish(dir))) return refuse5("outside_workspace", `"${String(args.dir)}" is outside the workspace folder`);
170050
170152
  const link = symlinkComponent(root, dir);
170051
170153
  if (link) return refuse5("outside_workspace", `"${link}" is a symlink \u2014 the app folder must be a real folder in the workspace`);
170052
- const rel = relative15(root, dir);
170154
+ const rel = relative16(root, dir);
170053
170155
  if (rel && (isDeniedSourcePath(`${rel}/x`) || isDeniedSourcePath(`${rel.toLowerCase()}/x`))) return refuse5("denied", `"${rel}" is a folder this tool does not touch`);
170054
170156
  if (!existsSync76(join77(dir, CONTENT_MARKER))) {
170055
170157
  return refuse5("not_an_app", `"${rel || "."}" is not an app folder (no ${CONTENT_MARKER}) \u2014 see himi_list_apps, or create one with himi_init`);
@@ -170062,16 +170164,16 @@ function onDiskSpelling(abs) {
170062
170164
  while (!existsSync76(cur)) {
170063
170165
  const up = dirname44(cur);
170064
170166
  if (up === cur) break;
170065
- tail.unshift(cur.slice(up.length + (up.endsWith(sep18) ? 0 : 1)));
170167
+ tail.unshift(cur.slice(up.length + (up.endsWith(sep20) ? 0 : 1)));
170066
170168
  cur = up;
170067
170169
  }
170068
170170
  return join77(realpathSync10.native(cur), ...tail);
170069
170171
  }
170070
170172
  function denied(appDir3, abs) {
170071
- const rel = relative15(appDir3, abs);
170173
+ const rel = relative16(appDir3, abs);
170072
170174
  if (isDeniedSourcePath(rel) || isDeniedSourcePath(rel.toLowerCase())) return true;
170073
170175
  try {
170074
- return isDeniedSourcePath(relative15(realpathSync10.native(appDir3), onDiskSpelling(abs)));
170176
+ return isDeniedSourcePath(relative16(realpathSync10.native(appDir3), onDiskSpelling(abs)));
170075
170177
  } catch {
170076
170178
  return true;
170077
170179
  }
@@ -170079,7 +170181,7 @@ function denied(appDir3, abs) {
170079
170181
  function confinedPath(appDir3, rel) {
170080
170182
  if (typeof rel !== "string" || !rel.trim()) return { error: "a path is required" };
170081
170183
  if (rel.includes("\0")) return { error: "a path may not contain NUL" };
170082
- if (isAbsolute7(rel)) return { error: `"${rel}" is absolute \u2014 give a path inside the app folder` };
170184
+ if (isAbsolute8(rel)) return { error: `"${rel}" is absolute \u2014 give a path inside the app folder` };
170083
170185
  const abs = resolve60(appDir3, rel);
170084
170186
  if (!within(appDir3, abs) || abs === appDir3) return { error: `"${rel}" is outside the app folder` };
170085
170187
  const real = realish(abs);
@@ -170091,7 +170193,7 @@ function confinedPath(appDir3, rel) {
170091
170193
  return abs;
170092
170194
  }
170093
170195
  function writeNoFollow2(appDir3, abs, content) {
170094
- mkdirSync36(dirname44(abs), { recursive: true });
170196
+ mkdirSync37(dirname44(abs), { recursive: true });
170095
170197
  const before = symlinkComponent(appDir3, abs);
170096
170198
  if (before) throw new Error(`"${before}" became a symlink`);
170097
170199
  const tmp = join77(dirname44(abs), `.himi-write-${process.pid}-${randomBytes3(6).toString("hex")}.tmp`);
@@ -170104,14 +170206,14 @@ function writeNoFollow2(appDir3, abs, content) {
170104
170206
  const link = symlinkComponent(appDir3, abs);
170105
170207
  if (link || !within(realpathSync10(appDir3), realpathSync10(dirname44(abs)))) {
170106
170208
  rmSync21(tmp, { force: true });
170107
- throw new Error(`"${link ?? relative15(appDir3, dirname44(abs))}" changed into a link while writing`);
170209
+ throw new Error(`"${link ?? relative16(appDir3, dirname44(abs))}" changed into a link while writing`);
170108
170210
  }
170109
170211
  renameSync13(tmp, abs);
170110
170212
  }
170111
170213
  function listFiles(appDir3) {
170112
170214
  const files = [];
170113
170215
  const walk2 = (d2) => {
170114
- const parentRel = relative15(appDir3, d2);
170216
+ const parentRel = relative16(appDir3, d2);
170115
170217
  for (const e2 of readdirSync35(d2, { withFileTypes: true }).sort((a2, b2) => a2.name.localeCompare(b2.name))) {
170116
170218
  if (e2.isSymbolicLink()) continue;
170117
170219
  const p2 = join77(d2, e2.name);
@@ -170119,10 +170221,10 @@ function listFiles(appDir3) {
170119
170221
  if (isDeniedSourceDir(e2.name, parentRel) || isDeniedSourceDir(e2.name.toLowerCase(), parentRel)) continue;
170120
170222
  if (!walk2(p2)) return false;
170121
170223
  } else if (e2.isFile()) {
170122
- const rel = relative15(appDir3, p2);
170224
+ const rel = relative16(appDir3, p2);
170123
170225
  if (isDeniedSourcePath(rel) || isDeniedSourcePath(rel.toLowerCase())) continue;
170124
170226
  if (files.length >= MAX_LISTED) return false;
170125
- files.push({ path: rel.split(sep18).join("/"), bytes: statSync21(p2).size });
170227
+ files.push({ path: rel.split(sep20).join("/"), bytes: statSync21(p2).size });
170126
170228
  }
170127
170229
  }
170128
170230
  return true;
@@ -170173,7 +170275,7 @@ function fileTools() {
170173
170275
  if (typeof app !== "string") return app;
170174
170276
  const p2 = confinedPath(app, a2.path);
170175
170277
  if (typeof p2 !== "string") return refuse5("bad_path", p2.error);
170176
- if (!existsSync76(p2) || !lstatSync23(p2).isFile()) return refuse5("not_found", `no file "${String(a2.path)}"`);
170278
+ if (!existsSync76(p2) || !lstatSync25(p2).isFile()) return refuse5("not_found", `no file "${String(a2.path)}"`);
170177
170279
  const size = statSync21(p2).size;
170178
170280
  if (size > MAX_FILE_BYTES) return refuse5("too_large", `"${String(a2.path)}" is ${size} bytes \u2014 over the ${MAX_FILE_BYTES}-byte read limit`);
170179
170281
  return ok({ ok: true, path: a2.path, bytes: size, content: readFileSync88(p2, "utf8") });
@@ -170200,7 +170302,7 @@ function fileTools() {
170200
170302
  if (typeof p2 !== "string") refused2.push({ path: f2.path, error: p2.error });
170201
170303
  else if (typeof f2.content !== "string") refused2.push({ path: f2.path, error: "content must be text" });
170202
170304
  else if (Buffer.byteLength(f2.content) > MAX_FILE_BYTES) refused2.push({ path: f2.path, error: `over the ${MAX_FILE_BYTES}-byte limit` });
170203
- else if (existsSync76(p2) && !lstatSync23(p2).isFile()) refused2.push({ path: f2.path, error: "not a regular file" });
170305
+ else if (existsSync76(p2) && !lstatSync25(p2).isFile()) refused2.push({ path: f2.path, error: "not a regular file" });
170204
170306
  else if (planned2.some((q3) => q3.abs === p2)) refused2.push({ path: f2.path, error: "the same file twice in one call" });
170205
170307
  else planned2.push({ abs: p2, rel: String(f2.path), content: f2.content });
170206
170308
  }
@@ -170234,7 +170336,7 @@ function fileTools() {
170234
170336
  const p2 = confinedPath(app, rel);
170235
170337
  if (typeof p2 !== "string") refused2.push({ path: rel, error: p2.error });
170236
170338
  else if (!existsSync76(p2)) refused2.push({ path: rel, error: "no such file" });
170237
- else if (!lstatSync23(p2).isFile()) refused2.push({ path: rel, error: "not a regular file" });
170339
+ else if (!lstatSync25(p2).isFile()) refused2.push({ path: rel, error: "not a regular file" });
170238
170340
  else if (!planned2.includes(p2)) {
170239
170341
  planned2.push(p2);
170240
170342
  deleted.push(rel);
@@ -170265,7 +170367,7 @@ var init_file_tools = __esm({
170265
170367
 
170266
170368
  // src/mcp/iap-tools.ts
170267
170369
  import * as z3 from "zod";
170268
- import { dirname as dirname45, relative as relative16, resolve as resolve61 } from "node:path";
170370
+ import { dirname as dirname45, relative as relative17, resolve as resolve61 } from "node:path";
170269
170371
  async function paths(args, deps) {
170270
170372
  const base = await deps.defaultDir();
170271
170373
  const result = { ...args, workspaceDir: base };
@@ -170281,7 +170383,7 @@ function workspaceInputRefusal(args, deps, context) {
170281
170383
  const why = workspaceRefusal(context.boundary, args[key3]);
170282
170384
  if (why) return `${key3} ${why}`;
170283
170385
  if (key3 !== "dir" && key3 !== "plist") {
170284
- const confined = confinedPath(context.boundary, relative16(context.boundary, args[key3]));
170386
+ const confined = confinedPath(context.boundary, relative17(context.boundary, args[key3]));
170285
170387
  if (typeof confined !== "string") return `${key3} ${confined.error}`;
170286
170388
  }
170287
170389
  }
@@ -170915,7 +171017,7 @@ __export(server_exports, {
170915
171017
  protectStdout: () => protectStdout,
170916
171018
  startMcpServer: () => startMcpServer
170917
171019
  });
170918
- import { mkdirSync as mkdirSync37, readFileSync as readFileSync89 } from "node:fs";
171020
+ import { mkdirSync as mkdirSync38, readFileSync as readFileSync89 } from "node:fs";
170919
171021
  import { fileURLToPath as fileURLToPath31 } from "node:url";
170920
171022
  import { McpServer } from "@modelcontextprotocol/server";
170921
171023
  import { serveStdio, StdioServerTransport } from "@modelcontextprotocol/server/stdio";
@@ -170954,7 +171056,7 @@ async function startMcpServer(opts) {
170954
171056
  const runCli = createCliBridge(opts.run);
170955
171057
  if (opts.workspace) {
170956
171058
  try {
170957
- mkdirSync37(opts.workspace, { recursive: true });
171059
+ mkdirSync38(opts.workspace, { recursive: true });
170958
171060
  } catch (e2) {
170959
171061
  console.error(`[himi mcp] could not create the workspace folder ${opts.workspace}: ${e2.message}`);
170960
171062
  }
@@ -171035,7 +171137,7 @@ var init_open_url = __esm({
171035
171137
 
171036
171138
  // src/ux-audit.ts
171037
171139
  import { existsSync as existsSync79, readFileSync as readFileSync90, readdirSync as readdirSync36 } from "node:fs";
171038
- import { join as join81, relative as relative17, resolve as resolve65 } from "node:path";
171140
+ import { join as join81, relative as relative18, resolve as resolve65 } from "node:path";
171039
171141
  function issue(issues, strict, code, message2, path2) {
171040
171142
  issues.push({ code, message: message2, ...path2 ? { path: path2 } : {}, severity: strict ? "error" : "warning" });
171041
171143
  }
@@ -171057,7 +171159,7 @@ function walkSource(dir, root = dir) {
171057
171159
  if (!SOURCE_EXTENSIONS.has(ext)) continue;
171058
171160
  const absolute = join81(dir, entry.name);
171059
171161
  const text13 = readText2(absolute);
171060
- if (text13 !== null) found.push({ path: relative17(root, absolute), text: text13 });
171162
+ if (text13 !== null) found.push({ path: relative18(root, absolute), text: text13 });
171061
171163
  }
171062
171164
  return found;
171063
171165
  }
@@ -171190,7 +171292,7 @@ __export(native_decode_exports, {
171190
171292
  runNativeDecode: () => runNativeDecode
171191
171293
  });
171192
171294
  import { execFileSync as execFileSync6, spawnSync as spawnSync8 } from "node:child_process";
171193
- import { existsSync as existsSync80, mkdirSync as mkdirSync40, mkdtempSync as mkdtempSync5, readFileSync as readFileSync91, rmSync as rmSync23, writeFileSync as writeFileSync35 } from "node:fs";
171295
+ import { existsSync as existsSync80, mkdirSync as mkdirSync41, mkdtempSync as mkdtempSync5, readFileSync as readFileSync91, rmSync as rmSync23, writeFileSync as writeFileSync35 } from "node:fs";
171194
171296
  import { homedir as homedir10, tmpdir as tmpdir6 } from "node:os";
171195
171297
  import { join as join83 } from "node:path";
171196
171298
  import { fileURLToPath as fileURLToPath32 } from "node:url";
@@ -171353,7 +171455,7 @@ function writeDecodeInputs(descriptorDir, descriptors, tokensJson) {
171353
171455
  writeFileSync35(join83(descriptorDir, `${encodeURIComponent(descriptor.screenId)}.json`), descriptor.descriptorJson);
171354
171456
  }
171355
171457
  if (tokensJson === void 0) return void 0;
171356
- mkdirSync40(join83(descriptorDir, "tokens"));
171458
+ mkdirSync41(join83(descriptorDir, "tokens"));
171357
171459
  const tokensPath = join83(descriptorDir, "tokens", NATIVE_TOKENS_DOCUMENT);
171358
171460
  writeFileSync35(tokensPath, tokensJson);
171359
171461
  return tokensPath;
@@ -171512,7 +171614,7 @@ __export(browser_authoring_exports, {
171512
171614
  import { createServer as createServer4 } from "node:http";
171513
171615
  import { createHash as createHash38, randomBytes as randomBytes4 } from "node:crypto";
171514
171616
  import { existsSync as existsSync81, readdirSync as readdirSync37, readFileSync as readFileSync92, realpathSync as realpathSync11, statSync as statSync22 } from "node:fs";
171515
- import { join as join84, posix as posix3, relative as relative18, sep as sep19 } from "node:path";
171617
+ import { join as join84, posix as posix3, relative as relative19, sep as sep21 } from "node:path";
171516
171618
  function humanMs(ms2) {
171517
171619
  return ms2 < 1e3 ? `${ms2}ms` : `${Math.round(ms2 / 1e3)}s`;
171518
171620
  }
@@ -171562,7 +171664,7 @@ function collectRelativeSiblings(files, tier5SrcDir) {
171562
171664
  ];
171563
171665
  for (const abs of candidates) {
171564
171666
  if (!existsSync81(abs) || statSync22(abs).isDirectory()) continue;
171565
- const key3 = `/tier5-src/${relative18(tier5SrcDir, abs).split(sep19).join(posix3.sep)}`;
171667
+ const key3 = `/tier5-src/${relative19(tier5SrcDir, abs).split(sep21).join(posix3.sep)}`;
171566
171668
  if (key3 in files) break;
171567
171669
  files[key3] = readFileSync92(abs, "utf8");
171568
171670
  queue.push(key3);
@@ -171772,7 +171874,7 @@ __export(coverage_exports, {
171772
171874
  suppressedNativeKeys: () => suppressedNativeKeys,
171773
171875
  trendAndStore: () => trendAndStore
171774
171876
  });
171775
- import { existsSync as existsSync82, mkdirSync as mkdirSync41, readFileSync as readFileSync93, writeFileSync as writeFileSync36 } from "node:fs";
171877
+ import { existsSync as existsSync82, mkdirSync as mkdirSync42, readFileSync as readFileSync93, writeFileSync as writeFileSync36 } from "node:fs";
171776
171878
  import { dirname as dirname48, join as join85 } from "node:path";
171777
171879
  function suppressedNativeKeys(oracle) {
171778
171880
  return [...oracle.ios ? [] : ["native-decode|ios"], ...oracle.android ? [] : ["native-decode|android"]];
@@ -171965,7 +172067,7 @@ function trendAndStore(dir, entries, suppressed) {
171965
172067
  const current = entries.map((e2) => e2.key);
171966
172068
  const stored = [.../* @__PURE__ */ new Set([...current, ...(previous ?? []).filter((key3) => (suppressed ?? []).includes(key3))])];
171967
172069
  try {
171968
- mkdirSync41(dirname48(p2), { recursive: true });
172070
+ mkdirSync42(dirname48(p2), { recursive: true });
171969
172071
  writeFileSync36(p2, JSON.stringify({ keys: stored, ts: (/* @__PURE__ */ new Date()).toISOString() }, null, 2));
171970
172072
  } catch {
171971
172073
  return null;
@@ -172010,7 +172112,7 @@ function diffAndStoreObservations(dir, current) {
172010
172112
  } catch {
172011
172113
  }
172012
172114
  try {
172013
- mkdirSync41(dirname48(p2), { recursive: true });
172115
+ mkdirSync42(dirname48(p2), { recursive: true });
172014
172116
  writeFileSync36(p2, JSON.stringify({ screens: current, ts: (/* @__PURE__ */ new Date()).toISOString() }, null, 2));
172015
172117
  } catch {
172016
172118
  return null;
@@ -174604,7 +174706,7 @@ var init_brand_font = __esm({
174604
174706
  });
174605
174707
 
174606
174708
  // src/site-analyze/write-artifacts.ts
174607
- import { mkdirSync as mkdirSync42, rmSync as rmSync25, writeFileSync as writeFileSync37 } from "node:fs";
174709
+ import { mkdirSync as mkdirSync43, rmSync as rmSync25, writeFileSync as writeFileSync37 } from "node:fs";
174608
174710
  import { join as join89 } from "node:path";
174609
174711
  function attachVeloSources(book, sources, put) {
174610
174712
  const byPath = new Map((sources ?? []).map((s2) => [s2.path, s2.text]));
@@ -174760,12 +174862,12 @@ async function downloadMedia(book, fetchImpl, put) {
174760
174862
  }
174761
174863
  async function writeBusinessBook(result, opts) {
174762
174864
  const out2 = opts.outDir;
174763
- mkdirSync42(join89(out2, "evidence/pages"), { recursive: true });
174764
- mkdirSync42(join89(out2, "media/catalog"), { recursive: true });
174865
+ mkdirSync43(join89(out2, "evidence/pages"), { recursive: true });
174866
+ mkdirSync43(join89(out2, "media/catalog"), { recursive: true });
174765
174867
  const files = [];
174766
174868
  const put = (rel, body) => {
174767
174869
  const p2 = join89(out2, rel);
174768
- mkdirSync42(join89(p2, ".."), { recursive: true });
174870
+ mkdirSync43(join89(p2, ".."), { recursive: true });
174769
174871
  writeFileSync37(p2, body);
174770
174872
  files.push(rel);
174771
174873
  };
@@ -175364,7 +175466,7 @@ __export(coverage_exports2, {
175364
175466
  });
175365
175467
  import { createHash as createHash39 } from "node:crypto";
175366
175468
  import { existsSync as existsSync85, readFileSync as readFileSync96, writeFileSync as writeFileSync38 } from "node:fs";
175367
- import { isAbsolute as isAbsolute8, join as join90, resolve as resolve67 } from "node:path";
175469
+ import { isAbsolute as isAbsolute9, join as join90, resolve as resolve67 } from "node:path";
175368
175470
  function verifiedEvidence(evidenceDir) {
175369
175471
  const manifest2 = obj4(JSON.parse(readFileSync96(join90(evidenceDir, "manifest.json"), "utf8")));
175370
175472
  if (manifest2.workflow !== "one-app-to-himi-app" || manifest2.stage !== "collected") throw Error("One App evidence is not collected.");
@@ -175535,7 +175637,7 @@ function verifyNativeProof(contentDir2, releaseHash, requirementIds) {
175535
175637
  continue;
175536
175638
  }
175537
175639
  const artifact = record3.artifact;
175538
- if (typeof artifact !== "string" || !artifact.trim() || isAbsolute8(artifact) || artifact.split(/[\\/]/).includes("..") || !existsSync85(join90(root, artifact))) {
175640
+ if (typeof artifact !== "string" || !artifact.trim() || isAbsolute9(artifact) || artifact.split(/[\\/]/).includes("..") || !existsSync85(join90(root, artifact))) {
175539
175641
  issues.push(`Native walkthrough check ${id} needs a reviewable artifact file.`);
175540
175642
  }
175541
175643
  }
@@ -175652,7 +175754,7 @@ function verifyCoverage(evidenceDir, contentDir2, releaseHash, builtScreenIds) {
175652
175754
  }
175653
175755
  for (const check of matching) {
175654
175756
  const path2 = check.evidence;
175655
- if (typeof path2 !== "string" || !path2.trim() || isAbsolute8(path2) || path2.split(/[\\/]/).includes("..")) {
175757
+ if (typeof path2 !== "string" || !path2.trim() || isAbsolute9(path2) || path2.split(/[\\/]/).includes("..")) {
175656
175758
  issues.push({ id, message: `Check ${required3} needs a safe relative evidence path.` });
175657
175759
  } else if (!existsSync85(join90(resolve67(contentDir2), path2))) {
175658
175760
  issues.push({ id, message: `Check ${required3} evidence file is absent: ${path2}.` });
@@ -175665,14 +175767,14 @@ function verifyCoverage(evidenceDir, contentDir2, releaseHash, builtScreenIds) {
175665
175767
  issues.push({ id, message: `Check ${required3} has no latest passed record for this requirement and target.` });
175666
175768
  } else {
175667
175769
  const artifact = record3.artifact;
175668
- if (typeof artifact !== "string" || !artifact.trim() || isAbsolute8(artifact) || artifact.split(/[\\/]/).includes("..") || !existsSync85(join90(resolve67(contentDir2), artifact))) {
175770
+ if (typeof artifact !== "string" || !artifact.trim() || isAbsolute9(artifact) || artifact.split(/[\\/]/).includes("..") || !existsSync85(join90(resolve67(contentDir2), artifact))) {
175669
175771
  issues.push({ id, message: `Check ${required3} needs a reviewable artifact file.` });
175670
175772
  }
175671
175773
  if (kind === "native-widget") {
175672
175774
  const baseline = obj4(record3.sourceBaseline);
175673
175775
  const context = obj4(record3.targetContext);
175674
175776
  const sourceArtifact = baseline.artifact;
175675
- if (baseline.kind !== "native-device" || typeof sourceArtifact !== "string" || !sourceArtifact.trim() || isAbsolute8(sourceArtifact) || sourceArtifact.split(/[\\/]/).includes("..") || !existsSync85(join90(resolve67(contentDir2), sourceArtifact))) {
175777
+ if (baseline.kind !== "native-device" || typeof sourceArtifact !== "string" || !sourceArtifact.trim() || isAbsolute9(sourceArtifact) || sourceArtifact.split(/[\\/]/).includes("..") || !existsSync85(join90(resolve67(contentDir2), sourceArtifact))) {
175676
175778
  issues.push({ id, message: "Native widget behavior needs a source-device baseline artifact; editor-only observations are unverified." });
175677
175779
  }
175678
175780
  if (!["siteId", "identityContext"].every((key3) => typeof baseline[key3] === "string" && String(baseline[key3]).trim() && baseline[key3] === context[key3]) || typeof sourceSiteId !== "string" || baseline.siteId !== sourceSiteId) {
@@ -176527,8 +176629,8 @@ __export(validate_design_exports, {
176527
176629
  validateDesign: () => validateDesign
176528
176630
  });
176529
176631
  import { randomBytes as randomBytes5 } from "node:crypto";
176530
- import { closeSync as closeSync7, constants as constants6, existsSync as existsSync89, lstatSync as lstatSync24, openSync as openSync6, readFileSync as readFileSync100, realpathSync as realpathSync12, renameSync as renameSync14, unlinkSync as unlinkSync5, writeFileSync as writeFileSync40 } from "node:fs";
176531
- import { dirname as dirname49, isAbsolute as isAbsolute9, join as join94, relative as relative19, resolve as resolve70, sep as sep20, win32 } from "node:path";
176632
+ import { closeSync as closeSync7, constants as constants6, existsSync as existsSync89, lstatSync as lstatSync26, openSync as openSync6, readFileSync as readFileSync100, realpathSync as realpathSync12, renameSync as renameSync14, unlinkSync as unlinkSync5, writeFileSync as writeFileSync40 } from "node:fs";
176633
+ import { dirname as dirname49, isAbsolute as isAbsolute10, join as join94, relative as relative20, resolve as resolve70, sep as sep22, win32 } from "node:path";
176532
176634
  import ts12 from "typescript";
176533
176635
  function readColorToken(tokens2, name) {
176534
176636
  const entry = obj5(tokens2.colors)?.[name];
@@ -176747,33 +176849,33 @@ function activeIdiomNames(contentDir2, tokens2) {
176747
176849
  return /* @__PURE__ */ new Set();
176748
176850
  }
176749
176851
  function writableTokensPath(contentDir2, location) {
176750
- if (isAbsolute9(location) || win32.isAbsolute(location) || location.split(/[\\/]/).includes("..")) {
176852
+ if (isAbsolute10(location) || win32.isAbsolute(location) || location.split(/[\\/]/).includes("..")) {
176751
176853
  throw new Error("--fix requires a token path inside the content directory without traversal.");
176752
176854
  }
176753
176855
  const root = realpathSync12(contentDir2);
176754
176856
  const path2 = resolve70(root, location);
176755
- const rel = relative19(root, path2);
176756
- if (!rel || rel === ".." || rel.startsWith(`..${sep20}`) || isAbsolute9(rel)) {
176857
+ const rel = relative20(root, path2);
176858
+ if (!rel || rel === ".." || rel.startsWith(`..${sep22}`) || isAbsolute10(rel)) {
176757
176859
  throw new Error("--fix requires a token path inside the content directory.");
176758
176860
  }
176759
176861
  let current = root;
176760
- const parts = rel.split(sep20);
176862
+ const parts = rel.split(sep22);
176761
176863
  for (const [index, part4] of parts.entries()) {
176762
176864
  current = join94(current, part4);
176763
- const stat2 = lstatSync24(current);
176865
+ const stat2 = lstatSync26(current);
176764
176866
  if (stat2.isSymbolicLink() || (index === parts.length - 1 ? !stat2.isFile() : !stat2.isDirectory())) {
176765
176867
  throw new Error("--fix requires a regular token file under directories without symlinks.");
176766
176868
  }
176767
176869
  }
176768
- const real = relative19(root, realpathSync12(path2));
176769
- if (!real || real === ".." || real.startsWith(`..${sep20}`) || isAbsolute9(real)) {
176870
+ const real = relative20(root, realpathSync12(path2));
176871
+ if (!real || real === ".." || real.startsWith(`..${sep22}`) || isAbsolute10(real)) {
176770
176872
  throw new Error("--fix cannot write outside the content directory.");
176771
176873
  }
176772
176874
  return path2;
176773
176875
  }
176774
176876
  function writeFixedTokens(contentDir2, location, path2, tokens2) {
176775
176877
  const temp = join94(dirname49(path2), `.himi-design-${process.pid}-${randomBytes5(6).toString("hex")}.tmp`);
176776
- const mode = lstatSync24(path2).mode & 511;
176878
+ const mode = lstatSync26(path2).mode & 511;
176777
176879
  const fd = openSync6(temp, constants6.O_WRONLY | constants6.O_CREAT | constants6.O_EXCL | (constants6.O_NOFOLLOW ?? 0), mode);
176778
176880
  try {
176779
176881
  try {
@@ -176965,12 +177067,12 @@ function safeEvidencePath(contentDir2, name) {
176965
177067
  const root = realpathSync12(contentDir2);
176966
177068
  const dir = realDirIn(root, ".himi/one-app");
176967
177069
  if (!dir) throw new Error("The design evidence directory is not a regular directory.");
176968
- const real = relative19(root, realpathSync12(dir));
176969
- if (!real || real === ".." || real.startsWith(`..${sep20}`) || isAbsolute9(real)) {
177070
+ const real = relative20(root, realpathSync12(dir));
177071
+ if (!real || real === ".." || real.startsWith(`..${sep22}`) || isAbsolute10(real)) {
176970
177072
  throw new Error("The design evidence directory is outside the content directory.");
176971
177073
  }
176972
177074
  const path2 = join94(dir, name);
176973
- const stat2 = lstatSync24(path2, { throwIfNoEntry: false });
177075
+ const stat2 = lstatSync26(path2, { throwIfNoEntry: false });
176974
177076
  if (stat2 && !stat2.isFile()) throw new Error("The design evidence file is not a regular file.");
176975
177077
  return path2;
176976
177078
  }
@@ -180052,44 +180154,44 @@ var init_preview_assets_generated = __esm({
180052
180154
  init_define_HHP_CATALOG();
180053
180155
  init_preview_assets_format();
180054
180156
  PREVIEW_ASSET_MANIFEST = [
180055
- { key: "assets/DashboardHost-CJdVFWfX.js", contentType: "application/javascript; charset=utf-8", offset: 8, length: 2971, sha256: "d9db67f0620697f569646ef1bf49b7e93bc42338ef85728c2fc4787696019e7b" },
180056
- { key: "assets/DevDrawer-BHTenbKq.js", contentType: "application/javascript; charset=utf-8", offset: 2979, length: 16783, sha256: "e43fc5b2348e21515f6cbd0d2e88773483f141b84f403a039d5dcf5b04331d14" },
180057
- { key: "assets/IdiomCompare-BfQiu0n9.js", contentType: "application/javascript; charset=utf-8", offset: 19762, length: 1926, sha256: "e5755d88a11bd931cc579feea75db84953488f8ccbfee9995d12dcfd0e86b1ee" },
180058
- { key: "assets/LightboxViewer-CK0jwU-2.js", contentType: "application/javascript; charset=utf-8", offset: 21688, length: 8171, sha256: "1e49ad7cc008c67e05df0de1588ef6451e0cc16b507c09f8e31a687f0cdaef97" },
180059
- { key: "assets/OfflineReadingBar-KWSixiCC.js", contentType: "application/javascript; charset=utf-8", offset: 29859, length: 1707, sha256: "8e7918719713c2161bed17b9fbc3fa1245cbf9bf829ebe127a4b04dbd3c02bd4" },
180060
- { key: "assets/PhonePreviewControl-CyP4yxlI.js", contentType: "application/javascript; charset=utf-8", offset: 31566, length: 37768, sha256: "1e71259d4df2d15d3d514c5829e0c8951050fcd185b47310b7846cb5442814b5" },
180061
- { key: "assets/SchemeCompare-BOQuq2NT.js", contentType: "application/javascript; charset=utf-8", offset: 69334, length: 1858, sha256: "069fe166e1750b4b206337fd4654cd2ff455f2159e808de19de322e0989a570a" },
180062
- { key: "assets/WixFrogTelemetrySink-COYeyGUg.js", contentType: "application/javascript; charset=utf-8", offset: 71192, length: 3165, sha256: "df4aee9699464b84b232e25dc64fddae7de688d9d436bcea4411baa7e96633bf" },
180157
+ { key: "assets/DashboardHost--Wo75MEb.js", contentType: "application/javascript; charset=utf-8", offset: 8, length: 2971, sha256: "9f16ff8813c75250b296c2f7fd5904148408ec882daade74dfd7256ab841116f" },
180158
+ { key: "assets/DevDrawer-CUUhA_4k.js", contentType: "application/javascript; charset=utf-8", offset: 2979, length: 16783, sha256: "d7379d5435e1f42d653f1dbc15f5584f9aa3cae7eabf8d5779342ab59af8f064" },
180159
+ { key: "assets/IdiomCompare-BQ8xaS9X.js", contentType: "application/javascript; charset=utf-8", offset: 19762, length: 1926, sha256: "3c3ad7cb21733554a1029f317f5d17498648aa5bbe4d9ad654128299bda12985" },
180160
+ { key: "assets/LightboxViewer-DXIIycZi.js", contentType: "application/javascript; charset=utf-8", offset: 21688, length: 8171, sha256: "f97499f47911dcf2f19f6199c12236559e32df337994b61edb72cd9f0f73743d" },
180161
+ { key: "assets/OfflineReadingBar-DaSjhw5H.js", contentType: "application/javascript; charset=utf-8", offset: 29859, length: 1707, sha256: "cc0ced6ae7a34d34c90dbd765a9018880aa9657f1de7e38f4839ef494b68aaf8" },
180162
+ { key: "assets/PhonePreviewControl-D8MpZ148.js", contentType: "application/javascript; charset=utf-8", offset: 31566, length: 37768, sha256: "d6837187711fb89cb762beccb1f23289a45b7c0adf56023c623893b82d5c64db" },
180163
+ { key: "assets/SchemeCompare-C08F_1NC.js", contentType: "application/javascript; charset=utf-8", offset: 69334, length: 1858, sha256: "d24db4000236629dfe6191f91dab56421421477e2dda5a423d3766065a1107d9" },
180164
+ { key: "assets/WixFrogTelemetrySink-D2Lk2X2m.js", contentType: "application/javascript; charset=utf-8", offset: 71192, length: 3165, sha256: "7a8b798af6b0900a8e925bfdb9ec62b378380975cf5c00af25d0cf33b39ba12f" },
180063
180165
  { key: "assets/calendar-ics-BvfIYWjG.js", contentType: "application/javascript; charset=utf-8", offset: 74357, length: 2192, sha256: "1636167041e9829ceccd3544297b86b8475c38bd2f759c4dbc17c813dc6e9254" },
180064
- { key: "assets/files-transfer-BC3gbCng.js", contentType: "application/javascript; charset=utf-8", offset: 76549, length: 6446, sha256: "ac40ca4687209bb75c27105686eb5acd07469d8eeac48ef71d9589d3bebf8a4a" },
180166
+ { key: "assets/files-transfer-DJkAGGn4.js", contentType: "application/javascript; charset=utf-8", offset: 76549, length: 6446, sha256: "d2d71e724ad7e8cc0f2511625a605232762cc613e14a328b5192ac4163b902f8" },
180065
180167
  { key: "assets/glassPreviewBrowser-DONaOehd.js", contentType: "application/javascript; charset=utf-8", offset: 82995, length: 6578, sha256: "4402c4cddd2a564e7466cdf1e12a0e0277c0400b288e1e5eda1d23e797599d31" },
180066
180168
  { key: "assets/image-preparation-Cj4gldm6.js", contentType: "application/javascript; charset=utf-8", offset: 89573, length: 2704, sha256: "32944ea587c2f3b84389b66b50a850437560238f1c8d33b6275973ee04eee865" },
180067
- { key: "assets/index-B5JSupQS.js", contentType: "application/javascript; charset=utf-8", offset: 92277, length: 1494187, sha256: "ab21d9f2fcab760f72740d26fba2d4b0fd44568b53b8d1b768061f31832b458b" },
180068
- { key: "assets/jsx-runtime-CY_jTiqj.js", contentType: "application/javascript; charset=utf-8", offset: 1586464, length: 7624, sha256: "29dfba5b56f79a0b84d6b04d84d87617454baeba03c225f682ab2ab7ae2d5016" },
180069
- { key: "assets/pdf-RVU11R9r.js", contentType: "application/javascript; charset=utf-8", offset: 1594088, length: 488199, sha256: "c71a2b69988b2471a7636bd45b5ba9b480b90474b42b8b801157210fd8fa2c47" },
180070
- { key: "assets/pdf.worker.min-BQa_JDET.js", contentType: "application/javascript; charset=utf-8", offset: 2082287, length: 73, sha256: "41bcfda4f3c8c0a81c785ea87c69afc8e7d0ed8c333324aee94c273d881bb6aa" },
180071
- { key: "assets/pdf.worker.min-BmVo14Nb.mjs", contentType: "application/javascript; charset=utf-8", offset: 2082360, length: 1317034, sha256: "a33cfe728c584fdba4fcc1fd54bcdc2f9f2f13889ddbb5b2bd1d0f8cbe49b84e" },
180072
- { key: "assets/pdfDocument-DDrNcoOB.js", contentType: "application/javascript; charset=utf-8", offset: 3399394, length: 3453, sha256: "2e88d366f7ffcfe61938de71ce5115da2b26c718d5b387c09a7d09ea177138ee" },
180073
- { key: "assets/pdfFetch-Cc8i1I1h.js", contentType: "application/javascript; charset=utf-8", offset: 3402847, length: 2266, sha256: "1d21ad008921942217c9eac0c35b1713773b9d89c71e3ab4412781f7bb88f463" },
180074
- { key: "assets/webviewBridgeHost-Dmru7034.js", contentType: "application/javascript; charset=utf-8", offset: 3405113, length: 9888, sha256: "18fc2db4c8470791fee8808fcc168bd5ae385cfea15d70b15cd1cf01979a856e" },
180075
- { key: "fonts/Roboto-LICENSE.txt", contentType: "application/octet-stream", offset: 3415001, length: 4610, sha256: "994062dd7af4186a739de55dd9e151c63b6301f8e2cbafc608d35c2e87da0cd2" },
180076
- { key: "fonts/Roboto-Variable.ttf", contentType: "font/ttf", offset: 3419611, length: 488584, sha256: "d7598e12c5dbef095ff8272cfc55da0250bd07fbdecbac8a530b9b277872a134" },
180077
- { key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset: 3908195, length: 90924, sha256: "ec4c7d63772d980d6e147b2df6215fd2737e4b04cebe0cf7e11dc695fb63cdcf" },
180078
- { key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset: 3999119, length: 90984, sha256: "bf4c16a2774edd38a921edf3099469866cd74c094fd596f3fa4e81f54a04dfaa" },
180079
- { key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset: 4090103, length: 90980, sha256: "368faca44fb9f7207e4af784e94750b1ee59c1098b8689e0f4a918926f244fb5" },
180080
- { key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset: 4181083, length: 90872, sha256: "97ed8f1a6772abe26e3d8af5cecfc4b02faa94497d585b0398b5053b739a70c1" },
180081
- { key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset: 4271955, length: 90980, sha256: "642feab8a48ddf6c7a89d7c2a7c0edfa0e6e773f671287e460e222703563191e" },
180082
- { key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset: 4362935, length: 108636, sha256: "37c179b4fefb63ea9637322b84583a2df53aa226c150294eea1675c14b1b8e29" },
180083
- { key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset: 4471571, length: 109084, sha256: "62e2fe4718129f36ecdb0ae4de385bd6b81ecc876146447167c6c140fad699a9" },
180084
- { key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset: 4580655, length: 109048, sha256: "4ecf270136af928612c76fe4ebade91d8156975e5ea4c0cf9225501dd1788e02" },
180085
- { key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset: 4689703, length: 107700, sha256: "dee56f09fd3efc127c1ea95557edc74110c1460a46287da36e0af25efd341ef5" },
180086
- { key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset: 4797403, length: 88108, sha256: "dced97a77624bc5f8b1ae65850360908297f4588e09feb6f22792d29dc7e765b" },
180087
- { key: "himi-sw.js", contentType: "application/javascript; charset=utf-8", offset: 4885511, length: 6818, sha256: "835250c3d8004f27c2b67f9b471984351ba6df07b916d97e33b43c691200a18c" },
180088
- { key: "index.html", contentType: "text/html; charset=utf-8", offset: 4892329, length: 5037, sha256: "96f03f83bf1540ec2edfadac9a78f49224300ac5eb76cb9bd450e961a4c921eb" },
180089
- { key: "ios-glass-preview.css", contentType: "text/css; charset=utf-8", offset: 4897366, length: 11457, sha256: "6cb2b75264fa5fa2b4d28851878a5eab0712900e8b3a6c2370cc661d6d820805" },
180090
- { key: "kit-tab-bar.css", contentType: "text/css; charset=utf-8", offset: 4908823, length: 1171, sha256: "9e2c3a0faaf05d5471badf167a4d3bdf1c4e6dd65c432eea6d254158bfd99585" },
180091
- { key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset: 4909994, length: 23047, sha256: "20d1459e3f896f344e478e613d0c979a0de02e81a929a45d3a0ef6a53af36441" },
180092
- { key: "t5-worker-frame.html", contentType: "text/html; charset=utf-8", offset: 4933041, length: 23064, sha256: "8655cfe9c74212ec5dafecb49d2fdeb48b19f1bd8a710091e3e55631f9b4ab06" }
180169
+ { key: "assets/index-BoMtgO1j.js", contentType: "application/javascript; charset=utf-8", offset: 92277, length: 1494558, sha256: "eb0deba70b04f12f7a35e248bbe05e7adab4f655f596f2eb4bf501b2ff49f201" },
180170
+ { key: "assets/jsx-runtime-CY_jTiqj.js", contentType: "application/javascript; charset=utf-8", offset: 1586835, length: 7624, sha256: "29dfba5b56f79a0b84d6b04d84d87617454baeba03c225f682ab2ab7ae2d5016" },
180171
+ { key: "assets/pdf-TmaMTLyU.js", contentType: "application/javascript; charset=utf-8", offset: 1594459, length: 488199, sha256: "41a8a6ab79e3465a7b955a596951fac14aed11cd2108b294ae1028aa25cd9ea5" },
180172
+ { key: "assets/pdf.worker.min-BQa_JDET.js", contentType: "application/javascript; charset=utf-8", offset: 2082658, length: 73, sha256: "41bcfda4f3c8c0a81c785ea87c69afc8e7d0ed8c333324aee94c273d881bb6aa" },
180173
+ { key: "assets/pdf.worker.min-BmVo14Nb.mjs", contentType: "application/javascript; charset=utf-8", offset: 2082731, length: 1317034, sha256: "a33cfe728c584fdba4fcc1fd54bcdc2f9f2f13889ddbb5b2bd1d0f8cbe49b84e" },
180174
+ { key: "assets/pdfDocument-BzqLjXka.js", contentType: "application/javascript; charset=utf-8", offset: 3399765, length: 3453, sha256: "8c22a0d303cdc014532f5c98c74d9e16ad688c9c04b7b3c597205810311d8968" },
180175
+ { key: "assets/pdfFetch-Cc8i1I1h.js", contentType: "application/javascript; charset=utf-8", offset: 3403218, length: 2266, sha256: "1d21ad008921942217c9eac0c35b1713773b9d89c71e3ab4412781f7bb88f463" },
180176
+ { key: "assets/webviewBridgeHost-BmEurjBq.js", contentType: "application/javascript; charset=utf-8", offset: 3405484, length: 9888, sha256: "b8e03f5a683914103f1084c9e03038167716065647b2280a57a99d548cad9d1f" },
180177
+ { key: "fonts/Roboto-LICENSE.txt", contentType: "application/octet-stream", offset: 3415372, length: 4610, sha256: "994062dd7af4186a739de55dd9e151c63b6301f8e2cbafc608d35c2e87da0cd2" },
180178
+ { key: "fonts/Roboto-Variable.ttf", contentType: "font/ttf", offset: 3419982, length: 488584, sha256: "d7598e12c5dbef095ff8272cfc55da0250bd07fbdecbac8a530b9b277872a134" },
180179
+ { key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset: 3908566, length: 90924, sha256: "ec4c7d63772d980d6e147b2df6215fd2737e4b04cebe0cf7e11dc695fb63cdcf" },
180180
+ { key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset: 3999490, length: 90984, sha256: "bf4c16a2774edd38a921edf3099469866cd74c094fd596f3fa4e81f54a04dfaa" },
180181
+ { key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset: 4090474, length: 90980, sha256: "368faca44fb9f7207e4af784e94750b1ee59c1098b8689e0f4a918926f244fb5" },
180182
+ { key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset: 4181454, length: 90872, sha256: "97ed8f1a6772abe26e3d8af5cecfc4b02faa94497d585b0398b5053b739a70c1" },
180183
+ { key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset: 4272326, length: 90980, sha256: "642feab8a48ddf6c7a89d7c2a7c0edfa0e6e773f671287e460e222703563191e" },
180184
+ { key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset: 4363306, length: 108636, sha256: "37c179b4fefb63ea9637322b84583a2df53aa226c150294eea1675c14b1b8e29" },
180185
+ { key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset: 4471942, length: 109084, sha256: "62e2fe4718129f36ecdb0ae4de385bd6b81ecc876146447167c6c140fad699a9" },
180186
+ { key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset: 4581026, length: 109048, sha256: "4ecf270136af928612c76fe4ebade91d8156975e5ea4c0cf9225501dd1788e02" },
180187
+ { key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset: 4690074, length: 107700, sha256: "dee56f09fd3efc127c1ea95557edc74110c1460a46287da36e0af25efd341ef5" },
180188
+ { key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset: 4797774, length: 88108, sha256: "dced97a77624bc5f8b1ae65850360908297f4588e09feb6f22792d29dc7e765b" },
180189
+ { key: "himi-sw.js", contentType: "application/javascript; charset=utf-8", offset: 4885882, length: 6818, sha256: "835250c3d8004f27c2b67f9b471984351ba6df07b916d97e33b43c691200a18c" },
180190
+ { key: "index.html", contentType: "text/html; charset=utf-8", offset: 4892700, length: 5037, sha256: "d3bd185a4b68f1301c35db67d6b2020c0cf1eaa67b335a1269c34babf3c46f6f" },
180191
+ { key: "ios-glass-preview.css", contentType: "text/css; charset=utf-8", offset: 4897737, length: 11457, sha256: "6cb2b75264fa5fa2b4d28851878a5eab0712900e8b3a6c2370cc661d6d820805" },
180192
+ { key: "kit-tab-bar.css", contentType: "text/css; charset=utf-8", offset: 4909194, length: 1171, sha256: "9e2c3a0faaf05d5471badf167a4d3bdf1c4e6dd65c432eea6d254158bfd99585" },
180193
+ { key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset: 4910365, length: 23047, sha256: "20d1459e3f896f344e478e613d0c979a0de02e81a929a45d3a0ef6a53af36441" },
180194
+ { key: "t5-worker-frame.html", contentType: "text/html; charset=utf-8", offset: 4933412, length: 23064, sha256: "8655cfe9c74212ec5dafecb49d2fdeb48b19f1bd8a710091e3e55631f9b4ab06" }
180093
180195
  ];
180094
180196
  }
180095
180197
  });
@@ -180108,7 +180210,7 @@ __export(run_exports, {
180108
180210
  runPackage: () => runPackage,
180109
180211
  withoutProdServe: () => withoutProdServe
180110
180212
  });
180111
- import { cpSync as cpSync2, existsSync as existsSync92, mkdirSync as mkdirSync43, mkdtempSync as mkdtempSync8, readFileSync as readFileSync102, rmSync as rmSync28, statSync as statSync26 } from "node:fs";
180213
+ import { cpSync as cpSync2, existsSync as existsSync92, mkdirSync as mkdirSync44, mkdtempSync as mkdtempSync8, readFileSync as readFileSync102, rmSync as rmSync28, statSync as statSync26 } from "node:fs";
180112
180214
  import { networkInterfaces as osNetworkInterfaces, tmpdir as tmpdir9 } from "node:os";
180113
180215
  import { dirname as dirname50, join as join97 } from "node:path";
180114
180216
  import { fileURLToPath as fileURLToPath34 } from "node:url";
@@ -180154,7 +180256,7 @@ async function resolvePackage(source, workDir) {
180154
180256
  const root2 = workDir ?? mkdtempSync8(join97(tmpdir9(), "himi-run-"));
180155
180257
  const target = join97(root2, app2);
180156
180258
  if (join97(source) !== target) {
180157
- mkdirSync43(root2, { recursive: true });
180259
+ mkdirSync44(root2, { recursive: true });
180158
180260
  rmSync28(target, { recursive: true, force: true });
180159
180261
  cpSync2(source, target, { recursive: true });
180160
180262
  }
@@ -184476,7 +184578,7 @@ var init_store_iap_connect = __esm({
184476
184578
  });
184477
184579
 
184478
184580
  // src/store-iap-screenshots.ts
184479
- import { dirname as dirname52, join as join103, relative as relative21 } from "node:path";
184581
+ import { dirname as dirname52, join as join103, relative as relative22 } from "node:path";
184480
184582
  function purchaseScreensFor(item) {
184481
184583
  const screen = item.wix && PURCHASE_SCREENS[item.wix.entityType];
184482
184584
  if (!screen || !item.wix) return [];
@@ -184604,7 +184706,7 @@ async function shoot(selected, run2, outDir) {
184604
184706
  } catch (e2) {
184605
184707
  return { ...report3, skipped: `could not save the screenshot: ${e2.message}` };
184606
184708
  }
184607
- return { ...report3, screenshot: relative21(dirname52(run2.manifestPath), path2) };
184709
+ return { ...report3, screenshot: relative22(dirname52(run2.manifestPath), path2) };
184608
184710
  }
184609
184711
  function visibleText2(html) {
184610
184712
  return html.replace(/&nbsp;|&#160;|&#xa0;/gi, "\xA0").replace(/&amp;/g, "&");
@@ -184802,7 +184904,7 @@ __export(store_iap_exports, {
184802
184904
  });
184803
184905
  import { execFileSync as execFileSync8 } from "node:child_process";
184804
184906
  import { randomUUID as randomUUID11 } from "node:crypto";
184805
- import { appendFileSync as appendFileSync2, mkdirSync as mkdirSync44, readFileSync as readFileSync115, realpathSync as realpathSync15, renameSync as renameSync16, rmSync as rmSync31, writeFileSync as writeFileSync41 } from "node:fs";
184907
+ import { appendFileSync as appendFileSync2, mkdirSync as mkdirSync45, readFileSync as readFileSync115, realpathSync as realpathSync15, renameSync as renameSync16, rmSync as rmSync31, writeFileSync as writeFileSync41 } from "node:fs";
184806
184908
  import { homedir as homedir13, hostname as hostname2 } from "node:os";
184807
184909
  import { dirname as dirname53, join as join105, resolve as resolve76 } from "node:path";
184808
184910
  function scrubDeep(value2, scrub) {
@@ -185432,7 +185534,7 @@ async function screenshotsCommand(flags, deps, out2) {
185432
185534
  return report3.complete ? 0 : 1;
185433
185535
  }
185434
185536
  function writeBinaryFile(path2, bytes2) {
185435
- mkdirSync44(dirname53(path2), { recursive: true });
185537
+ mkdirSync45(dirname53(path2), { recursive: true });
185436
185538
  const partial = `${path2}.${process.pid}.partial`;
185437
185539
  writeFileSync41(partial, bytes2);
185438
185540
  renameSync16(partial, path2);
@@ -185494,7 +185596,7 @@ function acquireApplyLock(dir, appleAppId) {
185494
185596
  }
185495
185597
  function stateDir(appleAppId) {
185496
185598
  const dir = join105(homedir13(), ".himalaya", "store-iap", appleAppId);
185497
- mkdirSync44(dir, { recursive: true, mode: 448 });
185599
+ mkdirSync45(dir, { recursive: true, mode: 448 });
185498
185600
  return dir;
185499
185601
  }
185500
185602
  async function confirmOnTerminal(question) {
@@ -186941,7 +187043,7 @@ __export(secrets_exports, {
186941
187043
  runRemoteSecretsCommand: () => runRemoteSecretsCommand,
186942
187044
  runSecretsCommand: () => runSecretsCommand
186943
187045
  });
186944
- import { readFileSync as readFileSync119 } from "node:fs";
187046
+ import { readFileSync as readFileSync120 } from "node:fs";
186945
187047
  function environment(value2) {
186946
187048
  if (value2 === "preview" || value2 === "production") return value2;
186947
187049
  throw new Error("--environment must be preview or production");
@@ -186972,7 +187074,7 @@ async function runSecretsCommand(operation, flags, io2, options = {}) {
186972
187074
  io2.log(JSON.stringify(await vault.list({ app, environment: env })));
186973
187075
  return 0;
186974
187076
  }
186975
- const value2 = options.readValue ? options.readValue() : readFileSync119(0, "utf8").replace(/\r?\n$/, "");
187077
+ const value2 = options.readValue ? options.readValue() : readFileSync120(0, "utf8").replace(/\r?\n$/, "");
186976
187078
  if (operation === "set") await vault.set({ app, environment: env, name, value: value2 });
186977
187079
  else if (operation === "rotate") await vault.rotate({ app, environment: env, name, value: value2 });
186978
187080
  else throw new Error(`unknown secrets operation ${operation}`);
@@ -187001,7 +187103,7 @@ async function runRemoteSecretsCommand(operation, flags, io2, options) {
187001
187103
  }
187002
187104
  let body;
187003
187105
  if (operation !== "list") {
187004
- const value2 = options.readValue ? options.readValue() : readFileSync119(0, "utf8").replace(/\r?\n$/, "");
187106
+ const value2 = options.readValue ? options.readValue() : readFileSync120(0, "utf8").replace(/\r?\n$/, "");
187005
187107
  body = JSON.stringify({ value: value2 });
187006
187108
  }
187007
187109
  const response = await (options.fetchImpl ?? fetch)(url, { method: operation === "list" ? "GET" : operation === "set" ? "PUT" : "POST", headers: headers2, body });
@@ -187509,7 +187611,7 @@ __export(notify_exports, {
187509
187611
  runNotify: () => runNotify,
187510
187612
  saveAdminSession: () => saveAdminSession
187511
187613
  });
187512
- import { chmodSync as chmodSync3, mkdirSync as mkdirSync45, readFileSync as readFileSync122, writeFileSync as writeFileSync43 } from "node:fs";
187614
+ import { chmodSync as chmodSync3, mkdirSync as mkdirSync46, readFileSync as readFileSync123, writeFileSync as writeFileSync43 } from "node:fs";
187513
187615
  import { homedir as homedir14 } from "node:os";
187514
187616
  import { dirname as dirname56, join as join111 } from "node:path";
187515
187617
  function defaultSessionsPath() {
@@ -187517,7 +187619,7 @@ function defaultSessionsPath() {
187517
187619
  }
187518
187620
  function loadSessionsFile(path2 = defaultSessionsPath()) {
187519
187621
  try {
187520
- return JSON.parse(readFileSync122(path2, "utf8"));
187622
+ return JSON.parse(readFileSync123(path2, "utf8"));
187521
187623
  } catch {
187522
187624
  return {};
187523
187625
  }
@@ -187525,7 +187627,7 @@ function loadSessionsFile(path2 = defaultSessionsPath()) {
187525
187627
  function saveAdminSession(adminUrl, session, path2 = defaultSessionsPath()) {
187526
187628
  const file2 = loadSessionsFile(path2);
187527
187629
  file2.sessions = { ...file2.sessions, [adminUrl]: session };
187528
- mkdirSync45(dirname56(path2), { recursive: true, mode: 448 });
187630
+ mkdirSync46(dirname56(path2), { recursive: true, mode: 448 });
187529
187631
  writeFileSync43(path2, JSON.stringify(file2, null, 2) + "\n", { mode: 384 });
187530
187632
  try {
187531
187633
  chmodSync3(dirname56(path2), 448);
@@ -187822,8 +187924,8 @@ __export(auth_gate_copy_exports, {
187822
187924
  scanThrownMessages: () => scanThrownMessages
187823
187925
  });
187824
187926
  import { createHash as createHash50 } from "node:crypto";
187825
- import { existsSync as existsSync104, readdirSync as readdirSync43, readFileSync as readFileSync123, writeFileSync as writeFileSync44 } from "node:fs";
187826
- import { dirname as dirname57, join as join112, relative as relative22, resolve as resolve79 } from "node:path";
187927
+ import { existsSync as existsSync104, readdirSync as readdirSync43, readFileSync as readFileSync124, writeFileSync as writeFileSync44 } from "node:fs";
187928
+ import { dirname as dirname57, join as join112, relative as relative23, resolve as resolve79 } from "node:path";
187827
187929
  import { fileURLToPath as fileURLToPath36 } from "node:url";
187828
187930
  function discoverMessageSources() {
187829
187931
  const roots2 = [
@@ -187843,7 +187945,7 @@ function discoverMessageSources() {
187843
187945
  if (/^(?:test|tests|Tests|androidTest|build|node_modules|\.build)$/.test(name.name)) continue;
187844
187946
  visit(child);
187845
187947
  } else if (/\.(?:swift|kt)$/.test(name.name) && !GATE_SOURCES.includes(child)) {
187846
- if (MESSAGE_FILE.test(readFileSync123(join112(REPO_ROOT8, child), "utf8"))) out2.push(child);
187948
+ if (MESSAGE_FILE.test(readFileSync124(join112(REPO_ROOT8, child), "utf8"))) out2.push(child);
187847
187949
  }
187848
187950
  }
187849
187951
  };
@@ -187851,7 +187953,7 @@ function discoverMessageSources() {
187851
187953
  return out2.sort();
187852
187954
  }
187853
187955
  function loadTable(path2 = TABLE_PATH) {
187854
- const raw = JSON.parse(readFileSync123(path2, "utf8"));
187956
+ const raw = JSON.parse(readFileSync124(path2, "utf8"));
187855
187957
  const out2 = {};
187856
187958
  for (const [k2, v2] of Object.entries(raw)) {
187857
187959
  if (k2.startsWith("_")) continue;
@@ -187925,7 +188027,7 @@ function nativeKeysPath(appDir3) {
187925
188027
  function loadNativeKeys(appDir3) {
187926
188028
  const p2 = nativeKeysPath(appDir3);
187927
188029
  if (!existsSync104(p2)) return void 0;
187928
- const raw = JSON.parse(readFileSync123(p2, "utf8"));
188030
+ const raw = JSON.parse(readFileSync124(p2, "utf8"));
187929
188031
  if (!Array.isArray(raw.keys) || raw.keys.some((k2) => typeof k2 !== "string")) {
187930
188032
  throw new Error(`${p2}: expected { "keys": string[] }`);
187931
188033
  }
@@ -187934,7 +188036,7 @@ function loadNativeKeys(appDir3) {
187934
188036
  function loadAppTable(appDir3) {
187935
188037
  const p2 = join112(appDir3, "strings", "en.json");
187936
188038
  if (!existsSync104(p2)) return {};
187937
- const raw = JSON.parse(readFileSync123(p2, "utf8"));
188039
+ const raw = JSON.parse(readFileSync124(p2, "utf8"));
187938
188040
  const out2 = {};
187939
188041
  for (const [k2, v2] of Object.entries(raw)) if (!k2.startsWith("_") && typeof v2 === "string") out2[k2] = v2;
187940
188042
  return out2;
@@ -188123,14 +188225,14 @@ function looksLikeCopy(text13) {
188123
188225
  return /^[A-Z][a-z]/.test(t2);
188124
188226
  }
188125
188227
  function loadAllow(section3, path2 = ALLOW_PATH) {
188126
- const raw = JSON.parse(readFileSync123(path2, "utf8"));
188228
+ const raw = JSON.parse(readFileSync124(path2, "utf8"));
188127
188229
  const list2 = raw[section3] ?? [];
188128
188230
  for (const e2 of list2) {
188129
188231
  if (!e2.file || !e2.text || !e2.reason) throw new Error(`allowlist entry missing file/text/reason: ${JSON.stringify(e2)}`);
188130
188232
  }
188131
188233
  return list2;
188132
188234
  }
188133
- function scanProse(files, allow = [], read = (rel) => readFileSync123(join112(REPO_ROOT8, rel), "utf8")) {
188235
+ function scanProse(files, allow = [], read = (rel) => readFileSync124(join112(REPO_ROOT8, rel), "utf8")) {
188134
188236
  const hits = [];
188135
188237
  const usedAllow = /* @__PURE__ */ new Set();
188136
188238
  for (const file2 of files) {
@@ -188154,12 +188256,12 @@ function expectedOutputs(table = loadTable()) {
188154
188256
  { path: KOTLIN_OUT, content: renderKotlin(table) }
188155
188257
  ];
188156
188258
  for (const p2 of appSourceCatalogs()) {
188157
- const committed = JSON.parse(readFileSync123(p2, "utf8"));
188259
+ const committed = JSON.parse(readFileSync124(p2, "utf8"));
188158
188260
  out2.push({ path: p2, content: serializeCatalog(injectAllNativeRows(committed, dirname57(dirname57(p2)), table)) });
188159
188261
  }
188160
188262
  return out2;
188161
188263
  }
188162
- function scanThrownMessages(files, read = (rel) => readFileSync123(join112(REPO_ROOT8, rel), "utf8")) {
188264
+ function scanThrownMessages(files, read = (rel) => readFileSync124(join112(REPO_ROOT8, rel), "utf8")) {
188163
188265
  const out2 = [];
188164
188266
  for (const file2 of files) {
188165
188267
  const src = read(file2);
@@ -188255,7 +188357,7 @@ var init_auth_gate_copy = __esm({
188255
188357
  });
188256
188358
 
188257
188359
  // ../l10n/extract.ts
188258
- import { resolve as resolve80, join as join113, relative as relative23, dirname as dirname58 } from "node:path";
188360
+ import { resolve as resolve80, join as join113, relative as relative24, dirname as dirname58 } from "node:path";
188259
188361
  import { createHash as createHash51 } from "node:crypto";
188260
188362
  import { fileURLToPath as fileURLToPath37 } from "node:url";
188261
188363
  function keyOf(source) {
@@ -188640,7 +188742,7 @@ __export(base44_adopt_exports, {
188640
188742
  renderAdoptModule: () => renderAdoptModule,
188641
188743
  runBase44Adopt: () => runBase44Adopt
188642
188744
  });
188643
- import { existsSync as existsSync106, readFileSync as readFileSync125, writeFileSync as writeFileSync46 } from "node:fs";
188745
+ import { existsSync as existsSync106, readFileSync as readFileSync126, writeFileSync as writeFileSync46 } from "node:fs";
188644
188746
  import { join as join115, resolve as resolve82 } from "node:path";
188645
188747
  function prop(entity, key3) {
188646
188748
  const props2 = entity.schema?.properties;
@@ -188735,7 +188837,7 @@ function runBase44Adopt(opts) {
188735
188837
  const bookPath = join115(bookDir, "book.json");
188736
188838
  let book;
188737
188839
  try {
188738
- book = JSON.parse(readFileSync125(bookPath, "utf8"));
188840
+ book = JSON.parse(readFileSync126(bookPath, "utf8"));
188739
188841
  if (!book || typeof book !== "object" || !Array.isArray(book.entities)) throw new Error("not a Base44 app book (no entities[])");
188740
188842
  } catch (e2) {
188741
188843
  throw new AdoptError("book_unreadable", `could not read ${bookPath}: ${e2.message}. Run \`himi base44 analyze --app-id <id>\` first.`);
@@ -189000,7 +189102,7 @@ __export(generate_exports, {
189000
189102
  writeGenerated: () => writeGenerated
189001
189103
  });
189002
189104
  import { createHash as createHash52 } from "node:crypto";
189003
- import { existsSync as existsSync107, mkdirSync as mkdirSync47, readdirSync as readdirSync45, readFileSync as readFileSync126, writeFileSync as writeFileSync47 } from "node:fs";
189105
+ import { existsSync as existsSync107, mkdirSync as mkdirSync48, readdirSync as readdirSync45, readFileSync as readFileSync127, writeFileSync as writeFileSync47 } from "node:fs";
189004
189106
  import { dirname as dirname60, join as join116 } from "node:path";
189005
189107
  function withHeader(body) {
189006
189108
  return `${GENERATED_HEADER}${sha2566(body)}
@@ -189129,13 +189231,13 @@ function writeGenerated(dir, files, opts = {}) {
189129
189231
  let outcome;
189130
189232
  if (!existsSync107(abs)) outcome = "written";
189131
189233
  else {
189132
- const cur = readFileSync126(abs, "utf8");
189234
+ const cur = readFileSync127(abs, "utf8");
189133
189235
  if (cur === next) outcome = "unchanged";
189134
189236
  else if (isEdited(cur) && !opts.force) outcome = "skipped-edited";
189135
189237
  else outcome = "written";
189136
189238
  }
189137
189239
  if (outcome === "written" && !opts.dryRun) {
189138
- mkdirSync47(dirname60(abs), { recursive: true });
189240
+ mkdirSync48(dirname60(abs), { recursive: true });
189139
189241
  writeFileSync47(abs, next);
189140
189242
  }
189141
189243
  out2.push({ path: f2.path, outcome });
@@ -189154,7 +189256,7 @@ function orphanedFiles(dir, current) {
189154
189256
  }
189155
189257
  for (const rel of candidates.sort()) {
189156
189258
  if (keep.has(rel) || !existsSync107(join116(dir, rel))) continue;
189157
- if (readFileSync126(join116(dir, rel), "utf8").startsWith(GENERATED_HEADER)) found.push(rel);
189259
+ if (readFileSync127(join116(dir, rel), "utf8").startsWith(GENERATED_HEADER)) found.push(rel);
189158
189260
  }
189159
189261
  return found;
189160
189262
  }
@@ -189193,7 +189295,7 @@ __export(base44_auth_exports, {
189193
189295
  usableBase44Auth: () => usableBase44Auth,
189194
189296
  writeBase44Session: () => writeBase44Session
189195
189297
  });
189196
- import { chmodSync as chmodSync4, existsSync as existsSync108, mkdirSync as mkdirSync48, readFileSync as readFileSync127, rmSync as rmSync33, writeFileSync as writeFileSync48 } from "node:fs";
189298
+ import { chmodSync as chmodSync4, existsSync as existsSync108, mkdirSync as mkdirSync49, readFileSync as readFileSync128, rmSync as rmSync33, writeFileSync as writeFileSync48 } from "node:fs";
189197
189299
  import { homedir as homedir15 } from "node:os";
189198
189300
  import { dirname as dirname61, join as join117 } from "node:path";
189199
189301
  function base44ApiBase(env = process.env) {
@@ -189206,7 +189308,7 @@ function readBase44Session(home) {
189206
189308
  const p2 = base44SessionPath(home);
189207
189309
  if (!existsSync108(p2)) return void 0;
189208
189310
  try {
189209
- const s2 = JSON.parse(readFileSync127(p2, "utf8"));
189311
+ const s2 = JSON.parse(readFileSync128(p2, "utf8"));
189210
189312
  return typeof s2.accessToken === "string" && s2.accessToken ? s2 : void 0;
189211
189313
  } catch {
189212
189314
  return void 0;
@@ -189214,7 +189316,7 @@ function readBase44Session(home) {
189214
189316
  }
189215
189317
  function writeBase44Session(session, home) {
189216
189318
  const p2 = base44SessionPath(home);
189217
- mkdirSync48(dirname61(p2), { recursive: true, mode: 448 });
189319
+ mkdirSync49(dirname61(p2), { recursive: true, mode: 448 });
189218
189320
  writeFileSync48(p2, `${JSON.stringify(session, null, 2)}
189219
189321
  `, { mode: 384 });
189220
189322
  chmodSync4(p2, 384);
@@ -189326,7 +189428,7 @@ function hasBase44WriteScope(auth) {
189326
189428
  function importBase44CliSession(home = homedir15(), env = process.env) {
189327
189429
  const src = join117(home, ".base44", "auth", "auth.json");
189328
189430
  if (!existsSync108(src)) throw new Error(`no Base44 CLI session at ${src} \u2014 run \`npx base44 login\` first, or use \`himi base44 login\``);
189329
- const a2 = JSON.parse(readFileSync127(src, "utf8"));
189431
+ const a2 = JSON.parse(readFileSync128(src, "utf8"));
189330
189432
  if (typeof a2.accessToken !== "string" || !a2.accessToken) throw new Error(`${src} holds no access token`);
189331
189433
  const session = {
189332
189434
  accessToken: a2.accessToken,
@@ -189425,14 +189527,14 @@ __export(seed_exports, {
189425
189527
  seedBase44Entities: () => seedBase44Entities,
189426
189528
  writeBase44SeedRows: () => writeBase44SeedRows
189427
189529
  });
189428
- import { existsSync as existsSync109, readFileSync as readFileSync128, writeFileSync as writeFileSync49 } from "node:fs";
189530
+ import { existsSync as existsSync109, readFileSync as readFileSync129, writeFileSync as writeFileSync49 } from "node:fs";
189429
189531
  import { join as join118 } from "node:path";
189430
189532
  function readBase44SeedFile(dir) {
189431
189533
  const file2 = join118(dir, BASE44_SEED_FILE);
189432
189534
  if (!existsSync109(file2)) return {};
189433
189535
  let parsed;
189434
189536
  try {
189435
- parsed = JSON.parse(readFileSync128(file2, "utf8"));
189537
+ parsed = JSON.parse(readFileSync129(file2, "utf8"));
189436
189538
  } catch (e2) {
189437
189539
  throw new SeedFileError(`${BASE44_SEED_FILE} is not valid JSON (${e2.message}). Fix or delete it.`);
189438
189540
  }
@@ -189592,7 +189694,7 @@ function writeBase44SeedRows(opts) {
189592
189694
  if (existsSync109(path2)) {
189593
189695
  let parsed;
189594
189696
  try {
189595
- parsed = JSON.parse(readFileSync128(path2, "utf8"));
189697
+ parsed = JSON.parse(readFileSync129(path2, "utf8"));
189596
189698
  } catch (e2) {
189597
189699
  throw new SeedFileError(`${BASE44_SEED_FILE} is not valid JSON (${e2.message}). Refusing to regenerate, because overwriting it would discard the rows already in it.`);
189598
189700
  }
@@ -189946,7 +190048,7 @@ __export(functions_exports2, {
189946
190048
  markerContent: () => markerContent,
189947
190049
  readFunctionSource: () => readFunctionSource
189948
190050
  });
189949
- import { existsSync as existsSync110, lstatSync as lstatSync26 } from "node:fs";
190051
+ import { existsSync as existsSync110, lstatSync as lstatSync28 } from "node:fs";
189950
190052
  import { join as join119 } from "node:path";
189951
190053
  function markerContent(app) {
189952
190054
  return `${JSON.stringify({ app, by: "himi" })}
@@ -189955,7 +190057,7 @@ function markerContent(app) {
189955
190057
  function readFunctionSource(appDir3, name, app) {
189956
190058
  const rel = `base44/functions/${name}/`;
189957
190059
  const folder = join119(appDir3, "base44", "functions", name);
189958
- if (!existsSync110(folder) || !lstatSync26(folder).isDirectory()) throw new FunctionSourceError("function_source_missing", `no source folder at ${rel}`);
190060
+ if (!existsSync110(folder) || !lstatSync28(folder).isDirectory()) throw new FunctionSourceError("function_source_missing", `no source folder at ${rel}`);
189959
190061
  const { entries, skipped } = collectAppSource(folder);
189960
190062
  if (skipped.length) throw new FunctionSourceError("function_source_unsafe", `${rel} holds paths himi will not upload (symlinks or denied names): ${skipped.join(", ")} \u2014 remove them`);
189961
190063
  const secrets = secretFindings(entries);
@@ -190296,7 +190398,7 @@ __export(apply_exports, {
190296
190398
  createBase44Entities: () => createBase44Entities,
190297
190399
  fileLedger: () => fileLedger
190298
190400
  });
190299
- import { existsSync as existsSync111, readFileSync as readFileSync129, writeFileSync as writeFileSync50 } from "node:fs";
190401
+ import { existsSync as existsSync111, readFileSync as readFileSync130, writeFileSync as writeFileSync50 } from "node:fs";
190300
190402
  import { join as join120 } from "node:path";
190301
190403
  function fileLedger(dir, appId2) {
190302
190404
  const path2 = join120(dir, LEDGER_FILE2);
@@ -190304,7 +190406,7 @@ function fileLedger(dir, appId2) {
190304
190406
  if (!existsSync111(path2)) return {};
190305
190407
  let v2;
190306
190408
  try {
190307
- v2 = JSON.parse(readFileSync129(path2, "utf8"));
190409
+ v2 = JSON.parse(readFileSync130(path2, "utf8"));
190308
190410
  } catch (e2) {
190309
190411
  throw new LedgerError(`${LEDGER_FILE2} is not valid JSON (${e2.message}) \u2014 fix it (a merge conflict?) rather than let himi rewrite it`);
190310
190412
  }
@@ -190956,11 +191058,11 @@ var init_analyze = __esm({
190956
191058
  });
190957
191059
 
190958
191060
  // src/base44-analyze/write-artifacts.ts
190959
- import { existsSync as existsSync112, mkdirSync as mkdirSync49, readFileSync as readFileSync130, rmSync as rmSync34, writeFileSync as writeFileSync51 } from "node:fs";
190960
- import { dirname as dirname62, join as join121, resolve as resolve83, sep as sep21 } from "node:path";
191061
+ import { existsSync as existsSync112, mkdirSync as mkdirSync50, readFileSync as readFileSync131, rmSync as rmSync34, writeFileSync as writeFileSync51 } from "node:fs";
191062
+ import { dirname as dirname62, join as join121, resolve as resolve83, sep as sep23 } from "node:path";
190961
191063
  function isBookFolder(dir) {
190962
191064
  try {
190963
- return JSON.parse(readFileSync130(join121(dir, "book.json"), "utf8")).kind === "base44-app-book";
191065
+ return JSON.parse(readFileSync131(join121(dir, "book.json"), "utf8")).kind === "base44-app-book";
190964
191066
  } catch {
190965
191067
  return false;
190966
191068
  }
@@ -191052,12 +191154,12 @@ function writeBase44Book(result, outDir, opts = {}) {
191052
191154
  if (!isBookFolder(out2)) throw new Error(`refusing to write the app book into ${out2}: it already has ${owned.join(", ")} that ${owned.length === 1 ? "is" : "are"} not from an app book \u2014 pick an empty --out`);
191053
191155
  for (const d2 of ["source", "screenshots"]) rmSync34(join121(out2, d2), { recursive: true, force: true });
191054
191156
  }
191055
- mkdirSync49(out2, { recursive: true });
191157
+ mkdirSync50(out2, { recursive: true });
191056
191158
  writeFileSync51(join121(out2, "book.json"), json8);
191057
191159
  writeFileSync51(join121(out2, "BOOK.md"), md);
191058
191160
  files.push("book.json", "BOOK.md");
191059
191161
  for (const s2 of shots) {
191060
- mkdirSync49(join121(out2, "screenshots"), { recursive: true });
191162
+ mkdirSync50(join121(out2, "screenshots"), { recursive: true });
191061
191163
  writeFileSync51(join121(out2, "screenshots", s2.filename), s2.bytes);
191062
191164
  files.push(`screenshots/${s2.filename}`);
191063
191165
  }
@@ -191065,8 +191167,8 @@ function writeBase44Book(result, outDir, opts = {}) {
191065
191167
  for (const f2 of result.sourceFiles) {
191066
191168
  if (!safeRel(f2.path)) continue;
191067
191169
  const dest = join121(sourceRoot, ...f2.path.split("/"));
191068
- if (!dest.startsWith(sourceRoot + sep21)) continue;
191069
- mkdirSync49(dirname62(dest), { recursive: true });
191170
+ if (!dest.startsWith(sourceRoot + sep23)) continue;
191171
+ mkdirSync50(dirname62(dest), { recursive: true });
191070
191172
  writeFileSync51(dest, f2.bytes);
191071
191173
  }
191072
191174
  if (result.sourceFiles.length) files.push(`source/ (${result.sourceFiles.length} files)`);
@@ -194613,7 +194715,7 @@ __export(cli_exports, {
194613
194715
  systemTar: () => systemTar
194614
194716
  });
194615
194717
  import { execFile as execFile2 } from "node:child_process";
194616
- import { mkdirSync as mkdirSync50, mkdtempSync as mkdtempSync11, rmSync as rmSync35, writeFileSync as writeFileSync52 } from "node:fs";
194718
+ import { mkdirSync as mkdirSync51, mkdtempSync as mkdtempSync11, rmSync as rmSync35, writeFileSync as writeFileSync52 } from "node:fs";
194617
194719
  import { tmpdir as tmpdir12 } from "node:os";
194618
194720
  import { join as join122, resolve as resolve84 } from "node:path";
194619
194721
  import { promisify } from "node:util";
@@ -194634,7 +194736,7 @@ function projectDownloader(apiFetch, apiBase, token, extract = systemTar) {
194634
194736
  const archive = join122(root, "project.tar");
194635
194737
  const dir = join122(root, "project");
194636
194738
  writeFileSync52(archive, bytes2);
194637
- mkdirSync50(dir);
194739
+ mkdirSync51(dir);
194638
194740
  await extract(archive, dir);
194639
194741
  return { dir, cleanup };
194640
194742
  } catch (e2) {
@@ -195878,7 +195980,7 @@ var init_invite_plan = __esm({
195878
195980
  });
195879
195981
 
195880
195982
  // src/one-app/payment-review.ts
195881
- import { readFileSync as readFileSync131 } from "node:fs";
195983
+ import { readFileSync as readFileSync132 } from "node:fs";
195882
195984
  import { join as join124, resolve as resolve86 } from "node:path";
195883
195985
  function initialPaymentReview(metaSiteId) {
195884
195986
  return {
@@ -195952,7 +196054,7 @@ function runPaymentReview(args, io2) {
195952
196054
  const { manifest: manifest2 } = verifiedEvidence(evidenceDir);
195953
196055
  const metaSiteId = obj6(manifest2.source).metaSiteId;
195954
196056
  if (typeof metaSiteId !== "string") throw Error("Missing site binding");
195955
- const review = JSON.parse(readFileSync131(join124(evidenceDir, "payment-review.json"), "utf8"));
196057
+ const review = JSON.parse(readFileSync132(join124(evidenceDir, "payment-review.json"), "utf8"));
195956
196058
  const issues = paymentReviewIssues(review, metaSiteId);
195957
196059
  if (issues.length) return fail7("payment_decision_required", issues, 1);
195958
196060
  io2.log(JSON.stringify({ ok: true, stage: "payment-decisions-reviewed", evidenceDir, verification: "Recorded evidence and decisions checked; merchant readiness is not independently verified by this command." }));
@@ -196136,7 +196238,7 @@ __export(validate_identity_exports, {
196136
196238
  runOneAppIdentityValidation: () => runOneAppIdentityValidation
196137
196239
  });
196138
196240
  import { createHash as createHash55 } from "node:crypto";
196139
- import { existsSync as existsSync114, readFileSync as readFileSync132 } from "node:fs";
196241
+ import { existsSync as existsSync114, readFileSync as readFileSync133 } from "node:fs";
196140
196242
  import { join as join125, resolve as resolve87 } from "node:path";
196141
196243
  function ricosTexts(documentJson) {
196142
196244
  let root;
@@ -196193,7 +196295,7 @@ function literalSlugFindings(slug, displayName3, screens, authoredText = []) {
196193
196295
  }
196194
196296
  function sourceIdentity(evidenceDir) {
196195
196297
  const { manifest: manifest2, raw } = verifiedEvidence(evidenceDir);
196196
- const bytes2 = readFileSync132(join125(evidenceDir, "business-context.json"));
196298
+ const bytes2 = readFileSync133(join125(evidenceDir, "business-context.json"));
196197
196299
  const hash3 = createHash55("sha256").update(bytes2).digest("hex");
196198
196300
  if (obj7(manifest2.sha256)["business-context.json"] !== hash3) throw Error("business-context.json differs from the collected evidence.");
196199
196301
  const name = obj7(JSON.parse(bytes2.toString("utf8"))).displayName;
@@ -196214,7 +196316,7 @@ function sourceIdentity(evidenceDir) {
196214
196316
  }
196215
196317
  const pagesPath = join125(evidenceDir, "pages-content.json");
196216
196318
  if (existsSync114(pagesPath)) {
196217
- const pagesBytes = readFileSync132(pagesPath);
196319
+ const pagesBytes = readFileSync133(pagesPath);
196218
196320
  if (obj7(manifest2.sha256)["pages-content.json"] !== createHash55("sha256").update(pagesBytes).digest("hex")) throw Error("pages-content.json differs from the collected evidence.");
196219
196321
  for (const document2 of obj7(JSON.parse(pagesBytes.toString("utf8"))).documents ?? []) authoredText.push(...ricosTexts(obj7(obj7(document2).page).documentJson));
196220
196322
  }
@@ -196308,7 +196410,7 @@ __export(cli_exports2, {
196308
196410
  ONE_APP_WORKFLOW: () => ONE_APP_WORKFLOW,
196309
196411
  runOneAppCommand: () => runOneAppCommand
196310
196412
  });
196311
- import { closeSync as closeSync9, constants as constants9, lstatSync as lstatSync27, mkdirSync as mkdirSync51, openSync as openSync8, readFileSync as readFileSync133, realpathSync as realpathSync17, writeFileSync as writeFileSync53 } from "node:fs";
196413
+ import { closeSync as closeSync9, constants as constants9, lstatSync as lstatSync29, mkdirSync as mkdirSync52, openSync as openSync8, readFileSync as readFileSync134, realpathSync as realpathSync17, writeFileSync as writeFileSync53 } from "node:fs";
196312
196414
  import { createHash as createHash56 } from "node:crypto";
196313
196415
  import { isIP as isIP2 } from "node:net";
196314
196416
  import { dirname as dirname63, join as join126, parse as parse3, resolve as resolve88 } from "node:path";
@@ -196379,9 +196481,9 @@ function readOptions(argv, cwd, commandIncluded) {
196379
196481
  if (flags["prompt-file"] !== void 0) {
196380
196482
  try {
196381
196483
  const file2 = resolve88(cwd, flags["prompt-file"]);
196382
- const stat2 = lstatSync27(file2);
196484
+ const stat2 = lstatSync29(file2);
196383
196485
  if (!stat2.isFile() || stat2.size > MAX_PROMPT_BYTES) throw new Error("invalid prompt file");
196384
- prompt = readFileSync133(file2, "utf8");
196486
+ prompt = readFileSync134(file2, "utf8");
196385
196487
  } catch {
196386
196488
  throw new OneAppError("invalid_prompt", "Use a readable text file of at most 64 KiB for --prompt-file.");
196387
196489
  }
@@ -196404,7 +196506,7 @@ function readOptions(argv, cwd, commandIncluded) {
196404
196506
  }
196405
196507
  function pathExists(path2) {
196406
196508
  try {
196407
- lstatSync27(path2);
196509
+ lstatSync29(path2);
196408
196510
  return true;
196409
196511
  } catch (error) {
196410
196512
  if (error.code === "ENOENT") return false;
@@ -196416,7 +196518,7 @@ function assertSafeParents(path2) {
196416
196518
  let current = path2;
196417
196519
  while (current !== root) {
196418
196520
  try {
196419
- const stat2 = lstatSync27(current);
196521
+ const stat2 = lstatSync29(current);
196420
196522
  if (stat2.isSymbolicLink() || !stat2.isDirectory()) {
196421
196523
  throw new OneAppError("invalid_output_path", "Choose an output parent without symlinks or non-directory components.");
196422
196524
  }
@@ -196537,12 +196639,12 @@ validate-payments checks site-bound payment evidence and explicit paid-flow deci
196537
196639
  }
196538
196640
  stage = "input";
196539
196641
  try {
196540
- mkdirSync51(options.parentDir, { recursive: true, mode: 448 });
196642
+ mkdirSync52(options.parentDir, { recursive: true, mode: 448 });
196541
196643
  assertSafeParents(options.parentDir);
196542
- mkdirSync51(options.workspace, { mode: 448 });
196644
+ mkdirSync52(options.workspace, { mode: 448 });
196543
196645
  if (realpathSync17(options.workspace) !== options.workspace) throw new Error("destination changed");
196544
196646
  evidenceDir = join126(options.workspace, ".himi", "one-app");
196545
- mkdirSync51(evidenceDir, { recursive: true, mode: 448 });
196647
+ mkdirSync52(evidenceDir, { recursive: true, mode: 448 });
196546
196648
  } catch (error) {
196547
196649
  if (error.code === "EEXIST") {
196548
196650
  throw new OneAppError("output_exists", "The destination already exists. Choose a new --name or --dir.");
@@ -196708,6 +196810,7 @@ var init_spaces_host_manifest = __esm({
196708
196810
  "himi_apps",
196709
196811
  "iap",
196710
196812
  "keyboard",
196813
+ "legacy_import",
196711
196814
  "live_activity",
196712
196815
  "local_database",
196713
196816
  "media_playback",
@@ -196740,6 +196843,7 @@ var init_spaces_host_manifest = __esm({
196740
196843
  "godot",
196741
196844
  "himi_apps",
196742
196845
  "keyboard",
196846
+ "legacy_import",
196743
196847
  "network",
196744
196848
  "on_device_ai",
196745
196849
  "pdf",
@@ -196760,6 +196864,7 @@ var init_spaces_host_manifest = __esm({
196760
196864
  "himi_apps",
196761
196865
  "iap",
196762
196866
  "keyboard",
196867
+ "legacy_import",
196763
196868
  "live_activity",
196764
196869
  "motion",
196765
196870
  "network",
@@ -196781,6 +196886,7 @@ var init_spaces_host_manifest = __esm({
196781
196886
  "godot",
196782
196887
  "himi_apps",
196783
196888
  "keyboard",
196889
+ "legacy_import",
196784
196890
  "network",
196785
196891
  "on_device_ai",
196786
196892
  "pdf",
@@ -198687,8 +198793,8 @@ var init_customer_build = __esm({
198687
198793
  });
198688
198794
 
198689
198795
  // src/site-analyze/apply.ts
198690
- import { existsSync as existsSync115, readFileSync as readFileSync134, writeFileSync as writeFileSync54, copyFileSync as copyFileSync2, mkdirSync as mkdirSync52, realpathSync as realpathSync18, statSync as statSync31 } from "node:fs";
198691
- import { dirname as dirname64, isAbsolute as isAbsolute10, join as join127, resolve as resolve89, sep as sep22 } from "node:path";
198796
+ import { existsSync as existsSync115, readFileSync as readFileSync135, writeFileSync as writeFileSync54, copyFileSync as copyFileSync2, mkdirSync as mkdirSync53, realpathSync as realpathSync18, statSync as statSync31 } from "node:fs";
198797
+ import { dirname as dirname64, isAbsolute as isAbsolute11, join as join127, resolve as resolve89, sep as sep24 } from "node:path";
198692
198798
  import { spawnSync as spawnSync10 } from "node:child_process";
198693
198799
  function unpairedRedirectNote(overlay) {
198694
198800
  if (!overlay.wix?.clientId || overlay.wix.redirectUri) return void 0;
@@ -198822,12 +198928,12 @@ function buildMergedContract(options) {
198822
198928
  if (!existsSync115(committedPath)) {
198823
198929
  throw new Error(`shell has no committed provisioning.json at ${committedPath} to build a contract from`);
198824
198930
  }
198825
- const committed = JSON.parse(readFileSync134(committedPath, "utf8"));
198931
+ const committed = JSON.parse(readFileSync135(committedPath, "utf8"));
198826
198932
  const previousPath = join127(appDir3, LOCAL_CONTRACT_REL);
198827
198933
  let evidenceOverlay = overlay;
198828
198934
  if ((overlay.businessContact === void 0 || overlay.loyalty === void 0 || overlay.businessTimeZone === void 0) && existsSync115(previousPath)) {
198829
198935
  try {
198830
- const previous = JSON.parse(readFileSync134(previousPath, "utf8"));
198936
+ const previous = JSON.parse(readFileSync135(previousPath, "utf8"));
198831
198937
  if (previous && typeof previous === "object" && !Array.isArray(previous) && sameKnownSite(previous, overlay)) {
198832
198938
  evidenceOverlay = {
198833
198939
  ...overlay,
@@ -198844,9 +198950,9 @@ function buildMergedContract(options) {
198844
198950
  const branding = merged.branding ?? {};
198845
198951
  const staged = [];
198846
198952
  const contained = (root, rel) => {
198847
- if (isAbsolute10(rel)) return void 0;
198953
+ if (isAbsolute11(rel)) return void 0;
198848
198954
  const full = resolve89(root, rel);
198849
- return full.startsWith(resolve89(root) + sep22) ? full : void 0;
198955
+ return full.startsWith(resolve89(root) + sep24) ? full : void 0;
198850
198956
  };
198851
198957
  const stage = (fromRel, toRel) => {
198852
198958
  const from = contained(packageDir, fromRel);
@@ -198860,10 +198966,10 @@ function buildMergedContract(options) {
198860
198966
  } catch {
198861
198967
  return void 0;
198862
198968
  }
198863
- if (!real.startsWith(realRoot + sep22)) return void 0;
198969
+ if (!real.startsWith(realRoot + sep24)) return void 0;
198864
198970
  try {
198865
198971
  if (!statSync31(real).isFile()) return void 0;
198866
- mkdirSync52(dirname64(to2), { recursive: true });
198972
+ mkdirSync53(dirname64(to2), { recursive: true });
198867
198973
  copyFileSync2(real, to2);
198868
198974
  } catch {
198869
198975
  return void 0;
@@ -198877,7 +198983,7 @@ function buildMergedContract(options) {
198877
198983
  if (existsSync115(facesPath)) {
198878
198984
  let faces = [];
198879
198985
  try {
198880
- const parsed = JSON.parse(readFileSync134(facesPath, "utf8"));
198986
+ const parsed = JSON.parse(readFileSync135(facesPath, "utf8"));
198881
198987
  faces = Array.isArray(parsed) ? parsed : [];
198882
198988
  } catch {
198883
198989
  faces = [];
@@ -198901,7 +199007,7 @@ function buildMergedContract(options) {
198901
199007
  const path2 = join127(packageDir, "provisioning.contract.json");
198902
199008
  writeFileSync54(path2, body);
198903
199009
  const localPath2 = join127(appDir3, LOCAL_CONTRACT_REL);
198904
- mkdirSync52(dirname64(localPath2), { recursive: true });
199010
+ mkdirSync53(dirname64(localPath2), { recursive: true });
198905
199011
  writeFileSync54(localPath2, body);
198906
199012
  staged.push(localPath2);
198907
199013
  return { path: path2, staged };
@@ -198938,7 +199044,7 @@ function staticFaqFor(overlay, overlayPath) {
198938
199044
  const bookPath = join127(dirname64(resolve89(overlayPath)), "book.json");
198939
199045
  if (!existsSync115(bookPath)) return void 0;
198940
199046
  try {
198941
- const book = JSON.parse(readFileSync134(bookPath, "utf8"));
199047
+ const book = JSON.parse(readFileSync135(bookPath, "utf8"));
198942
199048
  const copy = book?.copy;
198943
199049
  if (!copy || typeof copy !== "object" || copy.unavailable) return void 0;
198944
199050
  const pairs = deriveStaticFaq(copy.faq);
@@ -198955,7 +199061,7 @@ function staticGalleriesFor(overlay, overlayPath) {
198955
199061
  const bookPath = join127(dirname64(resolve89(overlayPath)), "book.json");
198956
199062
  if (!existsSync115(bookPath)) return void 0;
198957
199063
  try {
198958
- const book = JSON.parse(readFileSync134(bookPath, "utf8"));
199064
+ const book = JSON.parse(readFileSync135(bookPath, "utf8"));
198959
199065
  if (!book.look || book.look.unavailable || !Array.isArray(book.look.pages)) return void 0;
198960
199066
  const galleries = deriveStaticGalleries(book.look.pages);
198961
199067
  return galleries.length || book.look.complete === true ? galleries : void 0;
@@ -198967,8 +199073,8 @@ async function applyOverlays(input) {
198967
199073
  const cwd = resolve89(input.cwd);
198968
199074
  const shell = input.shell ?? DEFAULT_BRANDABLE_SHELL;
198969
199075
  assertKnownShell(shell);
198970
- const overlay = JSON.parse(readFileSync134(input.overlayPath, "utf8"));
198971
- const tokens2 = JSON.parse(readFileSync134(input.tokensPath, "utf8"));
199076
+ const overlay = JSON.parse(readFileSync135(input.overlayPath, "utf8"));
199077
+ const tokens2 = JSON.parse(readFileSync135(input.tokensPath, "utf8"));
198972
199078
  const faq = staticFaqFor(overlay, input.overlayPath);
198973
199079
  if (faq !== void 0) overlay.faq = faq;
198974
199080
  const galleries = staticGalleriesFor(overlay, input.overlayPath);
@@ -198987,7 +199093,7 @@ async function applyOverlays(input) {
198987
199093
  }
198988
199094
  const appDir3 = join127(repoRoot2, shellAppDir(shell));
198989
199095
  const committedPath = join127(appDir3, "provisioning.json");
198990
- const committedSite = existsSync115(committedPath) ? JSON.parse(readFileSync134(committedPath, "utf8")).site : void 0;
199096
+ const committedSite = existsSync115(committedPath) ? JSON.parse(readFileSync135(committedPath, "utf8")).site : void 0;
198991
199097
  if (committedSite !== void 0 && overlay.site === void 0) {
198992
199098
  throw new Error(
198993
199099
  `shell "${shell}" is a site shell: its contract names the customer's website (a \`site\` block), and this overlay has none. Re-run \`himi site analyze --url <site> --shell ${shell}\` to derive the site's page map (edit \`site.pages\` in provisioning.overlay.json if needed), then --apply.`
@@ -199029,7 +199135,7 @@ async function applyOverlays(input) {
199029
199135
  let packageFaq = faq;
199030
199136
  let packageGalleries = galleries;
199031
199137
  if (existsSync115(pkgProv)) {
199032
- const cur = JSON.parse(readFileSync134(pkgProv, "utf8"));
199138
+ const cur = JSON.parse(readFileSync135(pkgProv, "utf8"));
199033
199139
  if (galleries === void 0 && !sameKnownSite(cur, overlay)) overlay.galleries = [];
199034
199140
  const merged = deepMerge4(cur, overlay);
199035
199141
  if (overlay.businessContact !== void 0) merged.businessContact = overlay.businessContact;
@@ -199053,7 +199159,7 @@ async function applyOverlays(input) {
199053
199159
  }
199054
199160
  const pkgTokens = join127(cwd, "tokens.json");
199055
199161
  if (existsSync115(pkgTokens) && (tokens2.colors || tokens2.typography)) {
199056
- const cur = JSON.parse(readFileSync134(pkgTokens, "utf8"));
199162
+ const cur = JSON.parse(readFileSync135(pkgTokens, "utf8"));
199057
199163
  let tokensIn = tokens2;
199058
199164
  if (tokens2.typography) {
199059
199165
  const fonts = catalogTypography(tokens2.typography, cur.typography);
@@ -199080,7 +199186,7 @@ async function applyOverlays(input) {
199080
199186
  const homeAction = homeRefreshActionId(shell);
199081
199187
  const homeSrc = join127(cwd, "dev/index.ts");
199082
199188
  if (homeAction && existsSync115(homeSrc)) {
199083
- const prev = readFileSync134(homeSrc, "utf8");
199189
+ const prev = readFileSync135(homeSrc, "utf8");
199084
199190
  const patched = patchBrandParams(prev, overlay, homeAction);
199085
199191
  let next = patched.src;
199086
199192
  if (!patched.foreign && faq?.length && prev.includes('"tier5.himiBrandedFaq.load"') && !prev.includes('"staticFaq"')) {
@@ -200083,7 +200189,7 @@ __export(cli_exports3, {
200083
200189
  runSiteAnalyze: () => runSiteAnalyze,
200084
200190
  runSiteFunctionCli: () => runSiteFunctionCli
200085
200191
  });
200086
- import { existsSync as existsSync116, readFileSync as readFileSync135 } from "node:fs";
200192
+ import { existsSync as existsSync116, readFileSync as readFileSync136 } from "node:fs";
200087
200193
  import { resolve as resolve90 } from "node:path";
200088
200194
  function applyNeedsClient(shell) {
200089
200195
  if (shell === void 0 || !SHELL_NAMES.includes(shell)) return true;
@@ -200153,7 +200259,7 @@ async function runSiteAnalyze(opts) {
200153
200259
  const prevOverlayPath = resolve90(outDir, "provisioning.overlay.json");
200154
200260
  const prevSite = existsSync116(prevOverlayPath) ? (() => {
200155
200261
  try {
200156
- return JSON.parse(readFileSync135(prevOverlayPath, "utf8")).site;
200262
+ return JSON.parse(readFileSync136(prevOverlayPath, "utf8")).site;
200157
200263
  } catch {
200158
200264
  return void 0;
200159
200265
  }
@@ -200172,7 +200278,7 @@ async function runSiteAnalyze(opts) {
200172
200278
  }
200173
200279
  const previousOverlay = resolve90(outDir, "provisioning.overlay.json");
200174
200280
  carryOverGoals(
200175
- existsSync116(previousOverlay) ? readFileSync135(previousOverlay, "utf8") : void 0,
200281
+ existsSync116(previousOverlay) ? readFileSync136(previousOverlay, "utf8") : void 0,
200176
200282
  result.provisioningOverlay
200177
200283
  );
200178
200284
  const ownerCall = ownerAuth ? ownerTransportFrom(fetchImpl, ownerAuth) : void 0;
@@ -200230,7 +200336,7 @@ async function runSiteFunctionCli(opts) {
200230
200336
  let source;
200231
200337
  if (opts.sourcePath) {
200232
200338
  const p2 = resolve90(opts.cwd ?? process.cwd(), opts.sourcePath);
200233
- source = readFileSync135(p2, "utf8");
200339
+ source = readFileSync136(p2, "utf8");
200234
200340
  }
200235
200341
  let body;
200236
200342
  if (opts.bodyRaw != null) {
@@ -200260,7 +200366,7 @@ async function runSiteFunctionCli(opts) {
200260
200366
  function base44BookRoutes(bookPath, siteUrl) {
200261
200367
  if (!existsSync116(bookPath)) return void 0;
200262
200368
  try {
200263
- const book = JSON.parse(readFileSync135(bookPath, "utf8"));
200369
+ const book = JSON.parse(readFileSync136(bookPath, "utf8"));
200264
200370
  if (book.kind !== "base44-app-book" || !Array.isArray(book.routes)) return void 0;
200265
200371
  const host = (u2) => {
200266
200372
  try {
@@ -200518,7 +200624,7 @@ __export(site_create_exports, {
200518
200624
  runSiteList: () => runSiteList,
200519
200625
  writeProvisioningBinding: () => writeProvisioningBinding
200520
200626
  });
200521
- import { existsSync as existsSync117, readFileSync as readFileSync136, writeFileSync as writeFileSync55 } from "node:fs";
200627
+ import { existsSync as existsSync117, readFileSync as readFileSync137, writeFileSync as writeFileSync55 } from "node:fs";
200522
200628
  import { resolve as resolvePath2 } from "node:path";
200523
200629
  function oauthClientName(projectName) {
200524
200630
  return `${projectName} client`;
@@ -200667,7 +200773,7 @@ async function runSiteCreate(opts) {
200667
200773
  if (!wantOauthApp) return { ...base, nextSteps: nextSteps(metaSiteId) };
200668
200774
  return { ...base, clientId, redirectUri, nextSteps: nextSteps(metaSiteId, clientId) };
200669
200775
  }
200670
- function writeProvisioningBinding(target, binding2, fs2 = { existsSync: existsSync117, readFileSync: readFileSync136, writeFileSync: writeFileSync55 }) {
200776
+ function writeProvisioningBinding(target, binding2, fs2 = { existsSync: existsSync117, readFileSync: readFileSync137, writeFileSync: writeFileSync55 }) {
200671
200777
  const msid = binding2.siteId;
200672
200778
  const path2 = resolvePath2(target);
200673
200779
  const committed = committedShellProvisioning(path2);
@@ -201451,14 +201557,14 @@ __export(capture_exports, {
201451
201557
  nativeNotConfigured: () => nativeNotConfigured,
201452
201558
  variantWidth: () => variantWidth
201453
201559
  });
201454
- import { existsSync as existsSync118, mkdirSync as mkdirSync53, rmSync as rmSync36, writeFileSync as writeFileSync56 } from "node:fs";
201560
+ import { existsSync as existsSync118, mkdirSync as mkdirSync54, rmSync as rmSync36, writeFileSync as writeFileSync56 } from "node:fs";
201455
201561
  import { join as join128 } from "node:path";
201456
201562
  import { pathToFileURL as pathToFileURL10 } from "node:url";
201457
201563
  function variantWidth(variant) {
201458
201564
  return variant === "tablet" ? renderDeviceWidths().tablet : PHONE_WIDTH;
201459
201565
  }
201460
201566
  function frameFile(outDir, screen, variant, surface) {
201461
- mkdirSync53(outDir, { recursive: true });
201567
+ mkdirSync54(outDir, { recursive: true });
201462
201568
  return join128(outDir, `${screen}.${variant}.${surface}.png`);
201463
201569
  }
201464
201570
  async function captureMockup(root, screen, entry, variant, outDir, session) {
@@ -201603,7 +201709,7 @@ var init_capture = __esm({
201603
201709
 
201604
201710
  // src/fidelity/judge.ts
201605
201711
  import { spawn as spawn7 } from "node:child_process";
201606
- import { copyFileSync as copyFileSync3, mkdtempSync as mkdtempSync12, readFileSync as readFileSync137, rmSync as rmSync37 } from "node:fs";
201712
+ import { copyFileSync as copyFileSync3, mkdtempSync as mkdtempSync12, readFileSync as readFileSync138, rmSync as rmSync37 } from "node:fs";
201607
201713
  import { tmpdir as tmpdir13 } from "node:os";
201608
201714
  import { basename as basename29, dirname as dirname65, join as join129, resolve as resolve91 } from "node:path";
201609
201715
  import { fileURLToPath as fileURLToPath38 } from "node:url";
@@ -201639,8 +201745,8 @@ async function judgeStrip(strip3, screen, variant, opts = {}) {
201639
201745
  const judgeDir = opts.judgeDir ?? SOURCE_JUDGE_DIR;
201640
201746
  let prompt, schema;
201641
201747
  try {
201642
- prompt = readFileSync137(resolve91(judgeDir, "JUDGE.md"), "utf8");
201643
- schema = readFileSync137(resolve91(judgeDir, "verdict.schema.json"), "utf8");
201748
+ prompt = readFileSync138(resolve91(judgeDir, "JUDGE.md"), "utf8");
201749
+ schema = readFileSync138(resolve91(judgeDir, "verdict.schema.json"), "utf8");
201644
201750
  } catch (e2) {
201645
201751
  return cannotTell(`the judge prompt could not be read from ${judgeDir}: ${e2.message}`);
201646
201752
  }
@@ -201864,7 +201970,7 @@ __export(run_exports2, {
201864
201970
  runFidelity: () => runFidelity,
201865
201971
  runId: () => runId
201866
201972
  });
201867
- import { mkdirSync as mkdirSync54, writeFileSync as writeFileSync57 } from "node:fs";
201973
+ import { mkdirSync as mkdirSync55, writeFileSync as writeFileSync57 } from "node:fs";
201868
201974
  import { basename as basename30, join as join132 } from "node:path";
201869
201975
  function runId(now = /* @__PURE__ */ new Date()) {
201870
201976
  return now.toISOString().replace(/[-:]/g, "").replace(/\..*/, "").replace("T", "-");
@@ -201899,7 +202005,7 @@ async function runFidelity(root, opts = {}) {
201899
202005
  const run2 = opts.run ?? runId();
201900
202006
  const dir = join132(opts.outRoot ?? join132(root, ".himi", "fidelity"), run2);
201901
202007
  const framesDir = join132(dir, "frames");
201902
- mkdirSync54(framesDir, { recursive: true });
202008
+ mkdirSync55(framesDir, { recursive: true });
201903
202009
  const session = opts.capture?.mockup ? void 0 : new MockupSession();
201904
202010
  const mockup = opts.capture?.mockup ?? ((r3, s2, e2, v2, o2) => captureMockup(r3, s2, e2, v2, o2, session));
201905
202011
  const web = opts.capture?.web ?? captureWebVariant;
@@ -202035,7 +202141,7 @@ __export(fidelity_exports, {
202035
202141
  });
202036
202142
  import { execFileSync as execFileSync10 } from "node:child_process";
202037
202143
  import { existsSync as existsSync120, realpathSync as realpathSync19 } from "node:fs";
202038
- import { join as join133, relative as relative25, sep as sep23 } from "node:path";
202144
+ import { join as join133, relative as relative26, sep as sep25 } from "node:path";
202039
202145
  function himalayaRepoRoot(dir) {
202040
202146
  let top;
202041
202147
  try {
@@ -202044,8 +202150,8 @@ function himalayaRepoRoot(dir) {
202044
202150
  return null;
202045
202151
  }
202046
202152
  if (!existsSync120(join133(top, "tools/judges/fidelity/JUDGE.md"))) return null;
202047
- const rel = relative25(realpathSync19(top), realpathSync19(dir));
202048
- return rel.startsWith(`..${sep23}`) || rel === ".." ? null : top;
202153
+ const rel = relative26(realpathSync19(top), realpathSync19(dir));
202154
+ return rel.startsWith(`..${sep25}`) || rel === ".." ? null : top;
202049
202155
  }
202050
202156
  function fidelityEnvelope(report3) {
202051
202157
  return report3.status === "fail" ? { ok: false, code: "fidelity_rows_failed", ...report3 } : { ok: true, ...report3 };
@@ -202893,7 +202999,8 @@ var USAGE = `himi \u2014 the Himalaya authoring CLI (remote dev loop)
202893
202999
  minBinaryVersion \u2014 all named in the output.
202894
203000
  himi dist [--app <a>] [--platform ios,android] [--release <id>] [--allow-draft] [--target <t>]
202895
203001
  [--shell branded-lite|owner-lite|brandy|base44|player|demo-app] [--signing wix-managed|byo]
202896
- [--android-signing qa-keystore|wix-keystore|debug] [--aab]
203002
+ [--android-signing qa-keystore|wix-keystore|debug|owner] [--aab]
203003
+ [--package-name <id> --google-services <file>]
202897
203004
  [--app-name <name> --app-icon-url <url>]
202898
203005
  [--borrow-ios-id <bundleId>] [--no-wait] [--force] [--plan]
202899
203006
  build an INSTALLABLE QA binary (signed IPA / APK) on
@@ -202939,10 +203046,16 @@ var USAGE = `himi \u2014 the Himalaya authoring CLI (remote dev loop)
202939
203046
  link and QR for the APK. Android only. The bundle is
202940
203047
  signed with the Wix production key (wix-keystore, the
202941
203048
  upload key Branded apps use; any other
202942
- --android-signing is refused), the APK with the QA
203049
+ --android-signing but owner is refused), the APK with the QA
202943
203050
  key. The default stays an APK only. For a Containers
202944
203051
  app, --aab --version <x.y.z> makes that the bundle's
202945
203052
  versionName, which Google Play shows.
203053
+ --aab --android-signing owner --package-name <id>
203054
+ --google-services <file> builds an UNSIGNED bundle
203055
+ under your own package name and Firebase project,
203056
+ for an app bound to no Wix site, with no APK beside
203057
+ it. Sign it before uploading. Off until a plane
203058
+ switches it on (501 owner_bundles_unconfigured).
202946
203059
  --app-name / --app-icon-url (together) give the binary
202947
203060
  a name and icon in place of the release's; the icon is
202948
203061
  a https://static.wixstatic.com/media/<file> URL. A
@@ -204733,7 +204846,7 @@ async function functionsCommand(ctx) {
204733
204846
  // src/commands/mcp.ts
204734
204847
  init_define_HHP_CATALOG();
204735
204848
  init_guides();
204736
- import { mkdirSync as mkdirSync38, writeFileSync as writeFileSync33 } from "node:fs";
204849
+ import { mkdirSync as mkdirSync39, writeFileSync as writeFileSync33 } from "node:fs";
204737
204850
  import { join as join78, resolve as resolve63, dirname as dirname46 } from "node:path";
204738
204851
  init_cli_shared();
204739
204852
  async function mcpCommand(ctx) {
@@ -204750,7 +204863,7 @@ async function mcpCommand(ctx) {
204750
204863
  const dir2 = resolve63(out2);
204751
204864
  const files2 = himiStudioPluginFiles2();
204752
204865
  for (const f2 of files2) {
204753
- mkdirSync38(dirname46(join78(dir2, f2.path)), { recursive: true });
204866
+ mkdirSync39(dirname46(join78(dir2, f2.path)), { recursive: true });
204754
204867
  writeFileSync33(join78(dir2, f2.path), f2.text);
204755
204868
  }
204756
204869
  print({ ok: true, dir: dir2, files: files2.map((f2) => f2.path), next: [`claude plugin validate ${dir2}`, `claude --plugin-dir ${dir2}`] });
@@ -204766,7 +204879,7 @@ async function mcpCommand(ctx) {
204766
204879
  const dir = resolve63(out2);
204767
204880
  const files = himiPluginFiles2(skills.skillMd);
204768
204881
  for (const f2 of files) {
204769
- mkdirSync38(dirname46(join78(dir, f2.path)), { recursive: true });
204882
+ mkdirSync39(dirname46(join78(dir, f2.path)), { recursive: true });
204770
204883
  writeFileSync33(join78(dir, f2.path), f2.text);
204771
204884
  }
204772
204885
  print({ ok: true, dir, files: files.map((f2) => f2.path), next: [`claude plugin validate ${dir}`, `claude --plugin-dir ${dir}`] });
@@ -204785,7 +204898,7 @@ async function mcpCommand(ctx) {
204785
204898
  // src/commands/studio.ts
204786
204899
  init_define_HHP_CATALOG();
204787
204900
  init_cli_shared();
204788
- import { mkdirSync as mkdirSync39, writeFileSync as writeFileSync34, existsSync as existsSync77 } from "node:fs";
204901
+ import { mkdirSync as mkdirSync40, writeFileSync as writeFileSync34, existsSync as existsSync77 } from "node:fs";
204789
204902
  import { join as join79, resolve as resolve64, basename as basename22, dirname as dirname47 } from "node:path";
204790
204903
  async function studioCommand(ctx) {
204791
204904
  const { io: io2, pos, flags, print } = ctx;
@@ -204799,7 +204912,7 @@ async function studioCommand(ctx) {
204799
204912
  const { buildReel: buildReel2 } = await Promise.resolve().then(() => (init_studio_reel(), studio_reel_exports));
204800
204913
  const out2 = resolve64(str3(flags.out) ?? join79(dir, ".himi", "making-of.html"));
204801
204914
  const { html, plan } = buildReel2(dir);
204802
- mkdirSync39(dirname47(out2), { recursive: true });
204915
+ mkdirSync40(dirname47(out2), { recursive: true });
204803
204916
  writeFileSync34(out2, html);
204804
204917
  const { pathToFileURL: pathToFileURL11 } = await import("node:url");
204805
204918
  const url2 = pathToFileURL11(out2).href;
@@ -205902,7 +206015,7 @@ init_preview_surfaces();
205902
206015
  init_lint_report();
205903
206016
  import { createHash as createHash41 } from "node:crypto";
205904
206017
  import { existsSync as existsSync90 } from "node:fs";
205905
- import { join as join95, relative as relative20 } from "node:path";
206018
+ import { join as join95, relative as relative21 } from "node:path";
205906
206019
  init_owner_claim();
205907
206020
  init_surface_lint();
205908
206021
  init_token_lint();
@@ -205924,8 +206037,8 @@ function pushAuthHint(status, token, target, hasOwnerIssuer = true) {
205924
206037
  }
205925
206038
  async function contentVisibility(dir) {
205926
206039
  try {
205927
- const { readFileSync: readFileSync138 } = await import("node:fs");
205928
- const m2 = JSON.parse(readFileSync138(join95(dir, "himalaya.content.json"), "utf8"));
206040
+ const { readFileSync: readFileSync139 } = await import("node:fs");
206041
+ const m2 = JSON.parse(readFileSync139(join95(dir, "himalaya.content.json"), "utf8"));
205929
206042
  if (m2.visibility === "public" || m2.visibility === "unlisted") return m2.visibility;
205930
206043
  } catch {
205931
206044
  }
@@ -206119,7 +206232,7 @@ async function pushCommand(ctx) {
206119
206232
  }
206120
206233
  }
206121
206234
  const { shellQuote: shellQuote3 } = await Promise.resolve().then(() => (init_shell_quote(), shell_quote_exports));
206122
- const contentRel = relative20(process.cwd(), dir) || ".";
206235
+ const contentRel = relative21(process.cwd(), dir) || ".";
206123
206236
  const contentArg2 = shellQuote3(contentRel);
206124
206237
  if (onlyRaw !== void 0) {
206125
206238
  const onlyDraft = flags.draft === true;
@@ -208622,7 +208735,7 @@ async function testflightCommand(ctx) {
208622
208735
 
208623
208736
  // src/commands/dist.ts
208624
208737
  init_define_HHP_CATALOG();
208625
- import { existsSync as existsSync101 } from "node:fs";
208738
+ import { existsSync as existsSync101, readFileSync as readFileSync118 } from "node:fs";
208626
208739
  import { join as join107 } from "node:path";
208627
208740
  init_wix_owner();
208628
208741
  init_cli_shared();
@@ -208951,6 +209064,21 @@ ${label3}`);
208951
209064
  }
208952
209065
  }
208953
209066
  }
209067
+ let googleServicesJson;
209068
+ const googleServicesPath = str3(flags["google-services"]);
209069
+ if (googleServicesPath) {
209070
+ try {
209071
+ googleServicesJson = readFileSync118(googleServicesPath, "utf8");
209072
+ } catch {
209073
+ print({
209074
+ ok: false,
209075
+ error: "google_services_unreadable",
209076
+ code: "google_services_unreadable",
209077
+ message: `could not read ${googleServicesPath}`
209078
+ });
209079
+ return 1;
209080
+ }
209081
+ }
208954
209082
  let wixAuthorization;
208955
209083
  const testflight = str3(flags.destination) === "testflight";
208956
209084
  const customerTestflight = str3(flags.signing)?.trim().toLowerCase() === "byo" && testflight;
@@ -208966,7 +209094,7 @@ ${label3}`);
208966
209094
  });
208967
209095
  return 1;
208968
209096
  }
208969
- } else if (flags.aab === true || testflight && app !== "himi-player") {
209097
+ } else if (flags.aab === true && !["owner", "unsigned"].includes(str3(flags["android-signing"])?.trim().toLowerCase() ?? "") || testflight && app !== "himi-player") {
208970
209098
  try {
208971
209099
  c2.assertWixAuthorizationTarget();
208972
209100
  wixAuthorization = await accountToken();
@@ -209020,6 +209148,9 @@ ${label3}`);
209020
209148
  // A Play bundle instead of an APK. The plane validates it (Android only, link destination,
209021
209149
  // a stable key) so every caller of the route gets the same refusal.
209022
209150
  ...flags.aab === true ? { androidFormat: "aab" } : {},
209151
+ // An owner bundle (--android-signing owner): the plane leaves it unsigned, under this name.
209152
+ ...str3(flags["package-name"]) ? { androidPackageName: str3(flags["package-name"]) } : {},
209153
+ ...googleServicesJson !== void 0 ? { googleServicesJson } : {},
209023
209154
  // The App name and icon (a Wix Media file) a Containers app's store build ships under, in place
209024
209155
  // of the release's; a store build needs both. Sent as typed, so the plane gives the refusals.
209025
209156
  ...str3(flags["app-name"]) !== void 0 ? { appName: str3(flags["app-name"]) } : {},
@@ -209106,7 +209237,7 @@ ${label3}`);
209106
209237
  const installUrl = rec.platform === "ios" ? artifact?.installPageUrl : artifact?.downloadUrl ?? artifact?.installLink;
209107
209238
  const handoff = rec.customerAppStore;
209108
209239
  const handoffText = typeof handoff?.status === "string" ? ` testflight ${handoff.status}${handoff.error ? ` (${handoff.error})` : ""}` : "";
209109
- io2.log(` ${rec.platform} ${rec.status}${handoffText}${installUrl ? isAab ? ` .aab for Google Play (not installable) \u2192 ${installUrl}` : ` install \u2192 ${installUrl}` : ""}`);
209240
+ io2.log(` ${rec.platform} ${rec.status}${handoffText}${installUrl ? isAab ? ` .aab for Google Play (${rec.ownerBundle ? "UNSIGNED: sign it before uploading" : "not installable"}) \u2192 ${installUrl}` : ` install \u2192 ${installUrl}` : ""}`);
209110
209241
  if (isAab && artifact?.apk?.downloadUrl) io2.log(` ${rec.platform} install APK (same build, QA key) \u2192 ${artifact.apk.downloadUrl}`);
209111
209242
  if (artifact?.caveat) io2.log(` \u26A0 ${artifact.caveat}`);
209112
209243
  }
@@ -209128,7 +209259,7 @@ ${label3}`);
209128
209259
  // src/commands/login.ts
209129
209260
  init_define_HHP_CATALOG();
209130
209261
  init_config();
209131
- import { readFileSync as readFileSync118 } from "node:fs";
209262
+ import { readFileSync as readFileSync119 } from "node:fs";
209132
209263
  init_browser_login();
209133
209264
  init_wix_owner();
209134
209265
  init_owner_claim();
@@ -209349,7 +209480,7 @@ async function loginCommand(ctx) {
209349
209480
  const dpxPath = dpxSessionTokenPath();
209350
209481
  let dpx;
209351
209482
  try {
209352
- dpx = readFileSync118(dpxPath, "utf8").trim();
209483
+ dpx = readFileSync119(dpxPath, "utf8").trim();
209353
209484
  } catch {
209354
209485
  io2.error(JSON.stringify({ error: `no dpx session at ${dpxPath} \u2014 run \`dpx auth login\` then \`dpx auth token > ${dpxPath}\` (dpx 2.x keeps its own state in ~/.dpx/auth.json and does NOT write the legacy session file), or omit --dpx` }));
209355
209486
  return 1;
@@ -210219,7 +210350,7 @@ async function guideCommand(ctx) {
210219
210350
 
210220
210351
  // src/commands/secrets.ts
210221
210352
  init_define_HHP_CATALOG();
210222
- import { readFileSync as readFileSync120 } from "node:fs";
210353
+ import { readFileSync as readFileSync121 } from "node:fs";
210223
210354
  init_cli_shared();
210224
210355
  async function secretsCommand(ctx) {
210225
210356
  const { io: io2, pos, flags } = ctx;
@@ -210240,7 +210371,7 @@ async function secretsCommand(ctx) {
210240
210371
  const path2 = dpxSessionTokenPath();
210241
210372
  let raw;
210242
210373
  try {
210243
- raw = readFileSync120(path2, "utf8");
210374
+ raw = readFileSync121(path2, "utf8");
210244
210375
  } catch {
210245
210376
  io2.error(JSON.stringify({ error: `no DPX BO session at ${path2}` }));
210246
210377
  return 1;
@@ -210263,7 +210394,7 @@ init_schema2();
210263
210394
  init_define_HHP_CATALOG();
210264
210395
  init_cms_schema();
210265
210396
  init_wix_owner();
210266
- import { existsSync as existsSync103, readFileSync as readFileSync121, writeFileSync as writeFileSync42 } from "node:fs";
210397
+ import { existsSync as existsSync103, readFileSync as readFileSync122, writeFileSync as writeFileSync42 } from "node:fs";
210267
210398
  import { join as join110 } from "node:path";
210268
210399
  var FOREIGN_DETAIL_LIMIT = 25;
210269
210400
  var MAX_COLLECTION_PAGES = 40;
@@ -210788,7 +210919,7 @@ function readSeedFile(dir) {
210788
210919
  if (!existsSync103(file2)) return {};
210789
210920
  let parsed;
210790
210921
  try {
210791
- parsed = JSON.parse(readFileSync121(file2, "utf8"));
210922
+ parsed = JSON.parse(readFileSync122(file2, "utf8"));
210792
210923
  } catch (e2) {
210793
210924
  throw new Error(`cms-seed.json is not valid JSON (${e2.message}). Fix or delete it.`);
210794
210925
  }
@@ -210850,7 +210981,7 @@ async function writeSeedRows(opts) {
210850
210981
  if (existsSync103(file2)) {
210851
210982
  let parsed;
210852
210983
  try {
210853
- parsed = JSON.parse(readFileSync121(file2, "utf8"));
210984
+ parsed = JSON.parse(readFileSync122(file2, "utf8"));
210854
210985
  } catch (e2) {
210855
210986
  throw new Error(
210856
210987
  `cms-seed.json is not valid JSON (${e2.message}). Refusing to regenerate, because overwriting it would discard the rows already in it. Fix the JSON, or delete the file if you want a fresh set.`
@@ -211176,10 +211307,10 @@ import {
211176
211307
  constants as constants8,
211177
211308
  existsSync as existsSync105,
211178
211309
  fstatSync as fstatSync2,
211179
- lstatSync as lstatSync25,
211180
- mkdirSync as mkdirSync46,
211310
+ lstatSync as lstatSync27,
211311
+ mkdirSync as mkdirSync47,
211181
211312
  openSync as openSync7,
211182
- readFileSync as readFileSync124,
211313
+ readFileSync as readFileSync125,
211183
211314
  readdirSync as readdirSync44,
211184
211315
  realpathSync as realpathSync16,
211185
211316
  renameSync as renameSync17,
@@ -211187,20 +211318,20 @@ import {
211187
211318
  statSync as statSync30,
211188
211319
  writeFileSync as writeFileSync45
211189
211320
  } from "node:fs";
211190
- import { basename as basename28, dirname as dirname59, join as join114, relative as relative24, resolve as resolve81 } from "node:path";
211321
+ import { basename as basename28, dirname as dirname59, join as join114, relative as relative25, resolve as resolve81 } from "node:path";
211191
211322
  var L10N_USAGE = "usage: himi l10n import --format oneapp <dir> (--app <slug> | --content <app dir>) [--locales en,he] [--source en] [--overwrite] [--json]";
211192
211323
  var MESSAGES_FILE = /^messages_(.+)\.json$/;
211193
211324
  var UnsafePath = class extends Error {
211194
211325
  };
211195
211326
  var isUnsafe2 = (e2) => e2 instanceof UnsafePath || e2?.code === "ELOOP";
211196
211327
  function readRegularFile(path2) {
211197
- const st2 = lstatSync25(path2);
211328
+ const st2 = lstatSync27(path2);
211198
211329
  if (st2.isSymbolicLink()) throw new UnsafePath(`${path2} is a symbolic link`);
211199
211330
  if (!st2.isFile()) throw new Error(`${path2} is not a regular file`);
211200
211331
  const fd = openSync7(path2, constants8.O_RDONLY | (constants8.O_NOFOLLOW ?? 0));
211201
211332
  try {
211202
211333
  if (!fstatSync2(fd).isFile()) throw new Error(`${path2} is not a regular file`);
211203
- return readFileSync124(fd);
211334
+ return readFileSync125(fd);
211204
211335
  } finally {
211205
211336
  closeSync8(fd);
211206
211337
  }
@@ -211209,7 +211340,7 @@ function unsafeDestination(appDir3, tags) {
211209
211340
  const l10nDir = join114(appDir3, "l10n");
211210
211341
  for (const path2 of [l10nDir, ...tags.map((t2) => join114(l10nDir, `${t2}.json`))]) {
211211
211342
  try {
211212
- if (lstatSync25(path2).isSymbolicLink()) return `${relative24(process.cwd(), path2)} is a symbolic link`;
211343
+ if (lstatSync27(path2).isSymbolicLink()) return `${relative25(process.cwd(), path2)} is a symbolic link`;
211213
211344
  } catch (e2) {
211214
211345
  const code = e2.code;
211215
211346
  if (code !== "ENOENT" && code !== "ENOTDIR") throw e2;
@@ -211314,27 +211445,27 @@ async function l10nCommand(ctx) {
211314
211445
  buf = readRegularFile(path2);
211315
211446
  } catch (e2) {
211316
211447
  if (isUnsafe2(e2)) {
211317
- return fail7("unsafe_path", { error: `${relative24(process.cwd(), path2)} is a symbolic link \u2014 the import does not follow links in the messages directory`, file: path2, hint: "copy the real file into the directory, or point <dir> at where the files actually live" }, 1);
211448
+ return fail7("unsafe_path", { error: `${relative25(process.cwd(), path2)} is a symbolic link \u2014 the import does not follow links in the messages directory`, file: path2, hint: "copy the real file into the directory, or point <dir> at where the files actually live" }, 1);
211318
211449
  }
211319
- return fail7("messages_unreadable", { error: `${relative24(process.cwd(), path2)}: ${e2.message}`, file: path2 }, 1);
211450
+ return fail7("messages_unreadable", { error: `${relative25(process.cwd(), path2)}: ${e2.message}`, file: path2 }, 1);
211320
211451
  }
211321
211452
  const text13 = buf.toString("utf8");
211322
211453
  const utf16Bom = buf.length >= 2 && (buf[0] === 255 && buf[1] === 254 || buf[0] === 254 && buf[1] === 255);
211323
211454
  if (utf16Bom || buf.includes(0) || Buffer.compare(Buffer.from(text13, "utf8"), buf) !== 0) {
211324
- return fail7("messages_not_utf8", { error: `${relative24(process.cwd(), path2)} is not valid UTF-8`, file: path2, hint: "re-encode the file as UTF-8 (UTF-16 exports are the usual cause)" }, 1);
211455
+ return fail7("messages_not_utf8", { error: `${relative25(process.cwd(), path2)} is not valid UTF-8`, file: path2, hint: "re-encode the file as UTF-8 (UTF-16 exports are the usual cause)" }, 1);
211325
211456
  }
211326
211457
  let parsed;
211327
211458
  try {
211328
211459
  parsed = JSON.parse(text13.replace(/^\uFEFF/, ""));
211329
211460
  } catch (e2) {
211330
- return fail7("messages_unreadable", { error: `${relative24(process.cwd(), path2)}: ${e2.message}`, file: path2 }, 1);
211461
+ return fail7("messages_unreadable", { error: `${relative25(process.cwd(), path2)}: ${e2.message}`, file: path2 }, 1);
211331
211462
  }
211332
211463
  if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
211333
- return fail7("messages_unreadable", { error: `${relative24(process.cwd(), path2)} is not an object of key \u2192 message`, file: path2 }, 1);
211464
+ return fail7("messages_unreadable", { error: `${relative25(process.cwd(), path2)} is not an object of key \u2192 message`, file: path2 }, 1);
211334
211465
  }
211335
211466
  const bad2 = Object.entries(parsed).filter(([, v2]) => typeof v2 !== "string").map(([k2]) => k2);
211336
211467
  if (bad2.length > 0) {
211337
- return fail7("messages_unreadable", { error: `${relative24(process.cwd(), path2)} has non-string values`, file: path2, keys: bad2.slice(0, 5) }, 1);
211468
+ return fail7("messages_unreadable", { error: `${relative25(process.cwd(), path2)} has non-string values`, file: path2, keys: bad2.slice(0, 5) }, 1);
211338
211469
  }
211339
211470
  files[tag] = parsed;
211340
211471
  }
@@ -211344,7 +211475,7 @@ async function l10nCommand(ctx) {
211344
211475
  try {
211345
211476
  unsafe2 = unsafeDestination(appDir3, requested);
211346
211477
  } catch (e2) {
211347
- return fail7("catalog_write_failed", { error: `cannot inspect ${relative24(process.cwd(), join114(appDir3, "l10n"))}: ${e2.message}`, written: [] }, 1);
211478
+ return fail7("catalog_write_failed", { error: `cannot inspect ${relative25(process.cwd(), join114(appDir3, "l10n"))}: ${e2.message}`, written: [] }, 1);
211348
211479
  }
211349
211480
  if (unsafe2 !== void 0) {
211350
211481
  return fail7("unsafe_path", { error: `${unsafe2} \u2014 the import does not read or write through links`, hint: "replace the link with a real directory/file inside the app, then re-run" }, 1);
@@ -211360,7 +211491,7 @@ async function l10nCommand(ctx) {
211360
211491
  existing[tag] = parsed;
211361
211492
  } catch (e2) {
211362
211493
  return fail7("catalog_unreadable", {
211363
- error: `existing catalog ${relative24(process.cwd(), path2)} cannot be parsed \u2014 refusing to overwrite it`,
211494
+ error: `existing catalog ${relative25(process.cwd(), path2)} cannot be parsed \u2014 refusing to overwrite it`,
211364
211495
  file: path2,
211365
211496
  cause: e2.message
211366
211497
  }, 1);
@@ -211419,7 +211550,7 @@ async function l10nCommand(ctx) {
211419
211550
  }
211420
211551
  const written = [];
211421
211552
  try {
211422
- mkdirSync46(join114(appDir3, "l10n"), { recursive: true });
211553
+ mkdirSync47(join114(appDir3, "l10n"), { recursive: true });
211423
211554
  const swapped = unsafeDestination(appDir3, requested);
211424
211555
  const l10nReal = realpathSync16(join114(appDir3, "l10n"));
211425
211556
  if (swapped !== void 0 || l10nReal !== join114(realpathSync16(appDir3), "l10n")) {
@@ -211428,7 +211559,7 @@ async function l10nCommand(ctx) {
211428
211559
  for (const tag of requested) {
211429
211560
  const path2 = join114(appDir3, "l10n", `${tag}.json`);
211430
211561
  writeCatalog(path2, JSON.stringify(catalogs[tag], null, 2) + "\n");
211431
- written.push({ tag, path: relative24(process.cwd(), path2), count: Object.keys(catalogs[tag].messages).length });
211562
+ written.push({ tag, path: relative25(process.cwd(), path2), count: Object.keys(catalogs[tag].messages).length });
211432
211563
  }
211433
211564
  } catch (e2) {
211434
211565
  if (isUnsafe2(e2)) return fail7("unsafe_path", { error: `${e2.message} \u2014 nothing more was written`, written }, 1);