@wix/himalaya-cli 0.1318.0 → 0.1320.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 (84) hide show
  1. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/sdk/sdk-types/src/capabilities.generated.d.ts +2 -1
  2. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/sdk/theme/src/index.d.ts +21 -0
  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/brand-color-math.d.ts +98 -0
  5. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/ts/src/define-app.d.ts +1 -1
  6. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/ts/src/schema.d.ts +9 -0
  7. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/audio-record.mjs +1 -0
  8. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/calendar.mjs +1 -0
  9. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/calls.mjs +1 -0
  10. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/contacts.mjs +1 -0
  11. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/core/brand-color-math.mjs +183 -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/dist/theme.mjs +189 -0
  18. package/dist/authoring-runtime/node_modules/@wix/himalaya/package.json +8 -0
  19. package/dist/cli.mjs +574 -404
  20. package/dist/preview-assets.generated.bin +0 -0
  21. package/guides/app-config.md +1 -1
  22. package/guides/capabilities.md +17 -0
  23. package/guides/designing-himi-screens.md +2 -0
  24. package/guides/importable-sdks.md +1 -0
  25. package/guides/qa-builds.md +34 -8
  26. package/guides/sdk-reference.json +39 -2
  27. package/guides/web-page-sdk-reference.md +1 -0
  28. package/package.json +2 -2
  29. package/templates/beauty-salon-owner/config.ts +1 -1
  30. package/templates/beauty-salon-owner/dev/index.ts +125 -24
  31. package/templates/beauty-salon-owner/tier5-src/_shared/aria-attachments.ts +41 -2
  32. package/templates/beauty-salon-owner/tier5-src/_shared/aria-chat.ts +59 -31
  33. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-aria/index.ts +154 -13
  34. package/templates/brandy/README.md +5 -3
  35. package/templates/community-club-owner/config.ts +1 -1
  36. package/templates/community-club-owner/dev/index.ts +125 -24
  37. package/templates/community-club-owner/tier5-src/_shared/aria-attachments.ts +41 -2
  38. package/templates/community-club-owner/tier5-src/_shared/aria-chat.ts +59 -31
  39. package/templates/community-club-owner/tier5-src/himi-owner-lite-aria/index.ts +154 -13
  40. package/templates/events-meetups-owner/config.ts +1 -1
  41. package/templates/events-meetups-owner/dev/index.ts +125 -24
  42. package/templates/events-meetups-owner/tier5-src/_shared/aria-attachments.ts +41 -2
  43. package/templates/events-meetups-owner/tier5-src/_shared/aria-chat.ts +59 -31
  44. package/templates/events-meetups-owner/tier5-src/himi-owner-lite-aria/index.ts +154 -13
  45. package/templates/gym-fitness-owner/config.ts +1 -1
  46. package/templates/gym-fitness-owner/dev/index.ts +125 -24
  47. package/templates/gym-fitness-owner/tier5-src/_shared/aria-attachments.ts +41 -2
  48. package/templates/gym-fitness-owner/tier5-src/_shared/aria-chat.ts +59 -31
  49. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-aria/index.ts +154 -13
  50. package/templates/nonprofit-cause-owner/config.ts +1 -1
  51. package/templates/nonprofit-cause-owner/dev/index.ts +125 -24
  52. package/templates/nonprofit-cause-owner/tier5-src/_shared/aria-attachments.ts +41 -2
  53. package/templates/nonprofit-cause-owner/tier5-src/_shared/aria-chat.ts +59 -31
  54. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-aria/index.ts +154 -13
  55. package/templates/owner-lite/config.ts +1 -1
  56. package/templates/owner-lite/dev/index.ts +125 -24
  57. package/templates/owner-lite/tier5-src/_shared/aria-attachments.ts +41 -2
  58. package/templates/owner-lite/tier5-src/_shared/aria-chat.ts +59 -31
  59. package/templates/owner-lite/tier5-src/himi-owner-lite-aria/index.ts +154 -13
  60. package/templates/podcast-creator-owner/config.ts +1 -1
  61. package/templates/podcast-creator-owner/dev/index.ts +125 -24
  62. package/templates/podcast-creator-owner/tier5-src/_shared/aria-attachments.ts +41 -2
  63. package/templates/podcast-creator-owner/tier5-src/_shared/aria-chat.ts +59 -31
  64. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-aria/index.ts +154 -13
  65. package/templates/portfolio-creative-owner/config.ts +1 -1
  66. package/templates/portfolio-creative-owner/dev/index.ts +125 -24
  67. package/templates/portfolio-creative-owner/tier5-src/_shared/aria-attachments.ts +41 -2
  68. package/templates/portfolio-creative-owner/tier5-src/_shared/aria-chat.ts +59 -31
  69. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-aria/index.ts +154 -13
  70. package/templates/restaurant-owner/config.ts +1 -1
  71. package/templates/restaurant-owner/dev/index.ts +125 -24
  72. package/templates/restaurant-owner/tier5-src/_shared/aria-attachments.ts +41 -2
  73. package/templates/restaurant-owner/tier5-src/_shared/aria-chat.ts +59 -31
  74. package/templates/restaurant-owner/tier5-src/himi-owner-lite-aria/index.ts +154 -13
  75. package/templates/retail-store-owner/config.ts +1 -1
  76. package/templates/retail-store-owner/dev/index.ts +125 -24
  77. package/templates/retail-store-owner/tier5-src/_shared/aria-attachments.ts +41 -2
  78. package/templates/retail-store-owner/tier5-src/_shared/aria-chat.ts +59 -31
  79. package/templates/retail-store-owner/tier5-src/himi-owner-lite-aria/index.ts +154 -13
  80. package/templates/yoga-studio-owner/config.ts +1 -1
  81. package/templates/yoga-studio-owner/dev/index.ts +125 -24
  82. package/templates/yoga-studio-owner/tier5-src/_shared/aria-attachments.ts +41 -2
  83. package/templates/yoga-studio-owner/tier5-src/_shared/aria-chat.ts +59 -31
  84. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-aria/index.ts +154 -13
package/dist/cli.mjs CHANGED
@@ -5031,6 +5031,10 @@ var init_build_lib = __esm({
5031
5031
  "@himalaya/share": resolve8(REPO_ROOT4, "core/sdk/share/src/index.ts"),
5032
5032
  "@himalaya/open-url": resolve8(REPO_ROOT4, "core/sdk/open-url/src/index.ts"),
5033
5033
  "@himalaya/clipboard": resolve8(REPO_ROOT4, "core/sdk/clipboard/src/index.ts"),
5034
+ // RFC 0070 §3 — runtime brand overlay; and the brand colour rules it derives with, so a worker
5035
+ // can import the ONE implementation (filesystem-free, pinned by a test).
5036
+ "@himalaya/theme": resolve8(REPO_ROOT4, "core/sdk/theme/src/index.ts"),
5037
+ "@himalaya/core/brand-color-math": resolve8(REPO_ROOT4, "core/ts/src/brand-color-math.ts"),
5034
5038
  "@himalaya/photos": resolve8(REPO_ROOT4, "core/sdk/photos/src/index.ts"),
5035
5039
  // Credential-free raw binary PUT to a pre-signed upload URL (RFC 0002 capability).
5036
5040
  "@himalaya/presigned-upload": resolve8(REPO_ROOT4, "core/sdk/presigned-upload/src/index.ts"),
@@ -5571,8 +5575,8 @@ var init_catalog_v2 = __esm({
5571
5575
  "../html-to-t5/catalog.v2.json"() {
5572
5576
  catalog_v2_default = {
5573
5577
  encoding: "gzip-base64",
5574
- sha256: "6a0d15071955c9294aa10c4341cd562bcdb168fb147bb4bf8c677f87f3bae63b",
5575
- data: "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"
5578
+ sha256: "b746ae7d0ac398820517a135cfbb704eb89a7f866295a30cafd3a9a3eef54038",
5579
+ data: "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"
5576
5580
  };
5577
5581
  }
5578
5582
  });
@@ -13418,6 +13422,7 @@ var init_player_host_manifest = __esm({
13418
13422
  "speaker_diarization",
13419
13423
  "speech",
13420
13424
  "stream",
13425
+ "theme",
13421
13426
  "ui",
13422
13427
  "wix_api",
13423
13428
  "wix_cashier",
@@ -16624,7 +16629,6 @@ function resolveIdiom(tokens2, ctx = {}) {
16624
16629
  var IDIOM_CONTEXTS, UNSAFE_KEYS;
16625
16630
  var init_idiom = __esm({
16626
16631
  "../../core/ts/src/idiom.ts"() {
16627
- "use strict";
16628
16632
  IDIOM_CONTEXTS = {
16629
16633
  ios: { native: ["ios"] },
16630
16634
  android: { native: ["material"] },
@@ -20700,6 +20704,14 @@ var init_native_requirements = __esm({
20700
20704
  ]
20701
20705
  }
20702
20706
  },
20707
+ theme: {
20708
+ // RFC 0070 §3 — an in-memory token overlay in the shell. No OS permission, no framework.
20709
+ privacy: {
20710
+ reviewNotes: [
20711
+ "theme: recolours the app's accent tokens in memory for the hosted site \u2014 an on-device UI operation only. Nothing collected or transmitted; no usage string / required-reason API."
20712
+ ]
20713
+ }
20714
+ },
20703
20715
  presigned_upload: {
20704
20716
  // No OS permission and no new native dependency: an HTTPS request on a
20705
20717
  // credential-free URLSession / HttpURLConnection. INTERNET is already implied by
@@ -20839,15 +20851,19 @@ var init_native_requirements = __esm({
20839
20851
  // WebRTC itself needs no permission, and Stage 1 is audio-only on purpose so an
20840
20852
  // audio-only calling app never ships NSCameraUsageDescription (a real App Review
20841
20853
  // liability). Video is the `calls_video` superset id, Stage 3.
20842
- ios: { usageStrings: [{ key: "NSMicrophoneUsageDescription", suggested: "Talk to people with your microphone during a call." }] },
20854
+ // The WebRTC engine is the opt-in HimalayaCoreCalls / :himalaya-core-calls module (RFC 0044
20855
+ // Phase 2): linked only when the build set has `calls`, so no other binary carries libwebrtc.
20856
+ // Unlinked, the core's verbs answer unavailable / media_engine_unlinked.
20857
+ ios: {
20858
+ usageStrings: [{ key: "NSMicrophoneUsageDescription", suggested: "Talk to people with your microphone during a call." }],
20859
+ spmProducts: ["HimalayaCoreCalls"]
20860
+ },
20843
20861
  macos: {
20844
20862
  usageStrings: [{ key: "NSMicrophoneUsageDescription", suggested: "Talk to people with your microphone during a call." }],
20845
20863
  entitlements: { "com.apple.security.device.audio-input": true }
20846
20864
  },
20847
- // The Player-linked Android WebRTC arm opens the same microphone surface as iOS.
20848
- // Core's fallback remains unavailable when an app has not linked that optional
20849
- // engine, but an app declaring calls must be able to request RECORD_AUDIO.
20850
- android: { permissions: ["android.permission.RECORD_AUDIO"] },
20865
+ // The Android WebRTC arm opens the same microphone surface as iOS.
20866
+ android: { permissions: ["android.permission.RECORD_AUDIO"], gradleDeps: [":himalaya-core-calls"] },
20851
20867
  privacy: {
20852
20868
  reviewNotes: [
20853
20869
  "calls: 1:1 real-time audio over WebRTC. The microphone stream is peer-to-peer and is NOT recorded or uploaded by the capability \u2014 it is encoded and sent directly to the other participant (DTLS-SRTP).",
@@ -21157,9 +21173,11 @@ var init_native_requirements = __esm({
21157
21173
  base44: {
21158
21174
  // A Base44 app's backend over HTTPS (@himalaya/base44) — no OS permission; INTERNET is a
21159
21175
  // base manifest permission. The access token is stored in the Keychain / encrypted
21160
- // prefs, which needs no entitlement. The SDK linkage is opt-in per app
21161
- // (HimalayaCoreBase44 / :core-runtime-base44), hand-wired like Sentry and Godot, so
21162
- // `spmProducts` / `gradleDeps` stay empty for the same reason godot's do.
21176
+ // prefs, which needs no entitlement. The backend is the opt-in HimalayaCoreBase44 /
21177
+ // :core-runtime-base44 module (RFC 0044 Phase 2), linked only when the build set has `base44`;
21178
+ // the shell binds its own Base44 app id at boot (`Base44Capability.bind`).
21179
+ ios: { spmProducts: ["HimalayaCoreBase44"] },
21180
+ android: { gradleDeps: [":core-runtime-base44"] },
21163
21181
  privacy: {
21164
21182
  collectedDataTypes: [
21165
21183
  { type: "NSPrivacyCollectedDataTypeUserID", linked: true, tracking: false, purposes: [APP_FUNCTIONALITY] },
@@ -21294,13 +21312,11 @@ var init_native_requirements = __esm({
21294
21312
  // OpenGL ES / WebGL, all of which are permissionless, and INTERNET is already a base
21295
21313
  // manifest permission (not per-capability), so OTA pack download adds nothing either.
21296
21314
  //
21297
- // ⚠️ `ios.spmProducts` / `android.gradleDeps` are deliberately LEFT EMPTY even though this
21298
- // capability has the largest native footprint of any in the catalog. Since RFC 0044 Phase 2
21299
- // those fields are live — tools/native-config links whatever they name (modules.ts) — but
21300
- // godot's linkage is still hand-wired per app (the Sentry pattern) and reconciled against
21301
- // this declaration by core/ts/tests/godot-optin-reconcile.test.ts. Filling them in before
21302
- // the shells drop their hand-wiring would link the engine twice. Moving godot onto the
21303
- // generic module markers is the Phase 2 follow-up for the hand-wired modules.
21315
+ // The engine is the opt-in HimalayaCoreGodot / :core-runtime-godot module (RFC 0044 Phase 2) —
21316
+ // the largest native footprint in the catalog (~72 MB iOS bundle / ~68 MB Android installed),
21317
+ // linked only when the build set has `godot`.
21318
+ ios: { spmProducts: ["HimalayaCoreGodot"] },
21319
+ android: { gradleDeps: [":core-runtime-godot"] },
21304
21320
  privacy: {
21305
21321
  reviewNotes: [
21306
21322
  "godot: the game engine runs ENTIRELY on device and collects nothing \u2014 no identifiers, no analytics, no network egress of its own. There is therefore no collected-data type or required-reason API to declare. What the app itself reports about gameplay (score, progression) travels through the app's ordinary telemetry and is declared there, not here.",
@@ -21463,6 +21479,7 @@ var init_builtins = __esm({
21463
21479
  "speech",
21464
21480
  "system_intents",
21465
21481
  "tasks",
21482
+ "theme",
21466
21483
  "wix_cashier",
21467
21484
  "wix_platform"
21468
21485
  ];
@@ -21491,9 +21508,26 @@ function capabilitiesOfModule(module) {
21491
21508
  }
21492
21509
  return { ios: ios.sort(), android: android.sort() };
21493
21510
  }
21494
- function modulesFor(buildSet2) {
21511
+ function distributionOptIns(distributionJson) {
21512
+ if (!distributionJson) return [];
21513
+ let d2;
21514
+ try {
21515
+ d2 = JSON.parse(distributionJson);
21516
+ } catch {
21517
+ return [];
21518
+ }
21519
+ const at2 = (path2) => path2.split(".").reduce((o2, k2) => o2 && typeof o2 === "object" ? o2[k2] : void 0, d2);
21520
+ return NATIVE_MODULES.filter((m2) => m2.distributionOptIn && at2(m2.distributionOptIn) === true).map((m2) => m2.id).sort();
21521
+ }
21522
+ function modulesFor(buildSet2, optIns = []) {
21495
21523
  const spm = /* @__PURE__ */ new Set();
21496
21524
  const gradle = /* @__PURE__ */ new Set();
21525
+ for (const id of optIns) {
21526
+ const m2 = NATIVE_MODULES.find((x2) => x2.id === id);
21527
+ if (!m2?.distributionOptIn) throw new Error(`capability-catalog: ${id} is not a module an app opts into outside its build set`);
21528
+ if (m2.ios) spm.add(m2.ios.product);
21529
+ if (m2.android) gradle.add(m2.android.project);
21530
+ }
21497
21531
  for (const raw of buildSet2) {
21498
21532
  const req = CAPABILITY_NATIVE[catalogKey(raw)];
21499
21533
  for (const p2 of req?.ios?.spmProducts ?? []) {
@@ -21535,7 +21569,7 @@ function componentModuleRequirements(components2, have, map = COMPONENT_MODULES,
21535
21569
  }
21536
21570
  return [...out2].sort();
21537
21571
  }
21538
- var NATIVE_MODULES, HAND_WIRED_MODULES, COMPONENT_MODULES;
21572
+ var NATIVE_MODULES, COMPONENT_MODULES;
21539
21573
  var init_modules = __esm({
21540
21574
  "../../core/sdk/capability-catalog/src/modules.ts"() {
21541
21575
  init_native_requirements();
@@ -21561,6 +21595,18 @@ var init_modules = __esm({
21561
21595
  id: "audio",
21562
21596
  ios: { product: "HimalayaCoreAudio", path: "core/runtime/ios/HimalayaCoreAudio", macos: true }
21563
21597
  },
21598
+ {
21599
+ // A Base44 app backend (base44/swift-sdk on Apple; a REST client on Android). The shell binds
21600
+ // its own Base44 app id through the core (`Base44Capability.bind`); the module only supplies
21601
+ // the backend, so the binding and the link are independent and order-free.
21602
+ id: "base44",
21603
+ ios: { product: "HimalayaCoreBase44", path: "core/runtime/ios/HimalayaCoreBase44", macos: true },
21604
+ android: {
21605
+ project: ":core-runtime-base44",
21606
+ dir: "core/runtime/android/io/himalaya/base44",
21607
+ installer: "io.himalaya.base44.Base44Sdk"
21608
+ }
21609
+ },
21564
21610
  {
21565
21611
  // LocalAuthentication / androidx.biometric (biometrics). The same backend answers the native
21566
21612
  // login gate's BiometricAuthenticator, which keeps a core seam and degrades to no biometric
@@ -21586,6 +21632,16 @@ var init_modules = __esm({
21586
21632
  installer: "io.himalaya.calendar.CalendarStore"
21587
21633
  }
21588
21634
  },
21635
+ {
21636
+ // The WebRTC media engine for `calls` (stasel/WebRTC on Apple, webrtc-sdk on Android).
21637
+ id: "calls",
21638
+ ios: { product: "HimalayaCoreCalls", path: "core/runtime/ios/HimalayaCoreCalls", macos: true },
21639
+ android: {
21640
+ project: ":himalaya-core-calls",
21641
+ dir: "core/runtime/android/io/himalaya/core-calls",
21642
+ installer: "io.himalaya.core.calls.HimalayaCoreCalls"
21643
+ }
21644
+ },
21589
21645
  {
21590
21646
  // Contacts / ContactsUI (contacts) / ContactsContract. macOS links it too (AppKit picker).
21591
21647
  id: "contacts",
@@ -21596,6 +21652,16 @@ var init_modules = __esm({
21596
21652
  installer: "io.himalaya.contacts.ContactsStore"
21597
21653
  }
21598
21654
  },
21655
+ {
21656
+ // The Godot engine behind the core's GameSurfaceRegistry (SwiftGodotKit / org.godotengine).
21657
+ id: "godot",
21658
+ ios: { product: "HimalayaCoreGodot", path: "core/runtime/ios/HimalayaCoreGodot", macos: true },
21659
+ android: {
21660
+ project: ":core-runtime-godot",
21661
+ dir: "core/runtime/android/io/himalaya/godot",
21662
+ installer: "io.himalaya.godot.GodotModule"
21663
+ }
21664
+ },
21599
21665
  {
21600
21666
  id: "health",
21601
21667
  // macOS links it too and installs the honest UnavailableHealthBackend (no Health store on a Mac).
@@ -21682,6 +21748,19 @@ var init_modules = __esm({
21682
21748
  installer: "io.himalaya.push.FirebasePush"
21683
21749
  }
21684
21750
  },
21751
+ {
21752
+ // Crash / error monitoring (sentry-cocoa / sentry-android) behind the core telemetry sink
21753
+ // builder's Sentry seam. Not a capability — no worker verb reaches it — so an app opts in
21754
+ // through distribution.json `monitoring.sentry`, not a build set.
21755
+ id: "sentry",
21756
+ ios: { product: "HimalayaCoreSentry", path: "core/runtime/ios/HimalayaCoreSentry", macos: true },
21757
+ android: {
21758
+ project: ":core-runtime-sentry",
21759
+ dir: "core/runtime/android/io/himalaya/sentry",
21760
+ installer: "io.himalaya.sentry.SentryModule"
21761
+ },
21762
+ distributionOptIn: "monitoring.sentry"
21763
+ },
21685
21764
  {
21686
21765
  // The Speech-framework engine (speech): SFSpeechRecognizer over AVAudioEngine capture, and
21687
21766
  // AVSpeechSynthesizer. Split from the `audio` recorder (RFC 0044 Phase 2 grouped them) because
@@ -21701,11 +21780,6 @@ var init_modules = __esm({
21701
21780
  ios: { product: "HimalayaCoreReminders", path: "core/runtime/ios/HimalayaCoreReminders" }
21702
21781
  }
21703
21782
  ]);
21704
- HAND_WIRED_MODULES = Object.freeze({
21705
- base44: "HimalayaCoreBase44 / :core-runtime-base44 SDK",
21706
- calls: "HimalayaCoreCalls / :himalaya-core-calls WebRTC engine",
21707
- godot: "Godot SPM product / :core-runtime-godot engine"
21708
- });
21709
21783
  COMPONENT_MODULES = Object.freeze({
21710
21784
  Video: "media",
21711
21785
  MediaPlayer: "media",
@@ -21780,7 +21854,7 @@ function usageStringCopyFor(permissionCopy) {
21780
21854
  }
21781
21855
  return out2;
21782
21856
  }
21783
- var BRIDGE_CAPABILITY_IDS, KNOWN_CAPABILITY_IDS, CAPABILITY_LITERAL, BRIDGE_MARKERS, NEEDS_BOOT_WIRING, NOT_DIST_ADDABLE;
21857
+ var BRIDGE_CAPABILITY_IDS, KNOWN_CAPABILITY_IDS, CAPABILITY_LITERAL, BRIDGE_MARKERS, NEEDS_BOOT_WIRING, AWAITING_THIRD_PARTY_SIGN_OFF, NOT_DIST_ADDABLE;
21784
21858
  var init_known = __esm({
21785
21859
  "../../core/sdk/capability-catalog/src/known.ts"() {
21786
21860
  init_builtins();
@@ -21814,16 +21888,20 @@ var init_known = __esm({
21814
21888
  // and a shell's Android boot passes its own name — so an added one would report the wrong app.
21815
21889
  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",
21816
21890
  system_intents: "needs the shell to wire a SystemIntentsHost (app identity, deep-link routing and refresh), which no extensible shell does",
21817
- 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"
21891
+ 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",
21892
+ // Linked generically since #4066, but the module is only the backend: which Base44 app it talks
21893
+ // to is the shell's binding (`Base44Capability.bind`, from its contract), which a build cannot add.
21894
+ 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",
21895
+ // Linked generically since #4066, but the engine draws into the shell's own GameSurface view, and
21896
+ // on Android the shell must pick Godot's libc++_shared over the core's (himi-game's godotStl).
21897
+ godot: "needs the shell's GameSurface view and, on Android, its libc++_shared pick for the engine, which a build cannot add"
21898
+ });
21899
+ AWAITING_THIRD_PARTY_SIGN_OFF = Object.freeze({
21900
+ calls: "links the community libwebrtc engine (HimalayaCoreCalls / :himalaya-core-calls), whose third-party sign-off for store-shipping apps is still open, so a dist build does not add it to a customer binary"
21818
21901
  });
21819
21902
  NOT_DIST_ADDABLE = Object.freeze({
21820
21903
  ...NEEDS_BOOT_WIRING,
21821
- ...Object.fromEntries(
21822
- Object.entries(HAND_WIRED_MODULES).map(([id, module]) => [
21823
- id,
21824
- `needs the opt-in ${module} linked into the shell, which is still hand-wired (RFC 0044 Phase 2 follow-up), so a dist build cannot link it`
21825
- ])
21826
- )
21904
+ ...AWAITING_THIRD_PARTY_SIGN_OFF
21827
21905
  });
21828
21906
  }
21829
21907
  });
@@ -22954,8 +23032,11 @@ function genNativeConfig(app, opts = {}) {
22954
23032
  const dist = opts.extraCapabilities?.length ? resolveDistBake(app, ownIds, opts.extraCapabilities) : void 0;
22955
23033
  const ids = dist ? dist.build : ownIds;
22956
23034
  const healthLinked = ids.includes("health");
22957
- const binaryCore = isBinaryCore(configTs, existsSync33(join33(appDir(app), "distribution.json")) ? readFileSync32(join33(appDir(app), "distribution.json"), "utf8") : void 0);
22958
- const modules = binaryCore ? { spm: [], gradle: [], macos: [] } : modulesFor(ids);
23035
+ const distJsonPath = join33(appDir(app), "distribution.json");
23036
+ const distJsonText = existsSync33(distJsonPath) ? readFileSync32(distJsonPath, "utf8") : void 0;
23037
+ const optIns = distributionOptIns(distJsonText);
23038
+ const binaryCore = isBinaryCore(configTs, distJsonText);
23039
+ const modules = binaryCore ? { spm: [], gradle: [], macos: [] } : modulesFor(ids, optIns);
22959
23040
  const healthCopy = opts.permissionCopy?.health;
22960
23041
  const distCopy = usageStringCopyFor(opts.permissionCopy);
22961
23042
  const withCopy = (o2) => ({ ...o2 ?? {}, infoPlistCopy: { ...o2?.infoPlistCopy ?? {}, ...distCopy } });
@@ -23075,7 +23156,7 @@ function genNativeConfig(app, opts = {}) {
23075
23156
  throw new Error(`${app}: dist capabilities need the ${LABEL_ANDROID_SERVICES} markers inside <application> in ${manifestPath}`);
23076
23157
  }
23077
23158
  const added = modulesFor(dist.added);
23078
- const ownModules = modulesFor(ownIds);
23159
+ const ownModules = modulesFor(ownIds, optIns);
23079
23160
  const addsSpm = added.spm.some((p2) => !ownModules.spm.includes(p2));
23080
23161
  const addsGradle = added.gradle.some((p2) => !ownModules.gradle.includes(p2));
23081
23162
  if (addsSpm || addsGradle) {
@@ -27291,6 +27372,7 @@ var init_capabilities_generated = __esm({
27291
27372
  "speech": ["availability", "recognizeOnce", "speak", "stop", "streamNext", "streamStart", "streamStop", "transcribeFile"],
27292
27373
  "system_intents": ["donate", "refreshShortcuts"],
27293
27374
  "tasks": ["backend", "create", "getPermissionStatus", "list", "remove", "requestPermission", "setCompleted"],
27375
+ "theme": ["applyOverlay", "clearOverlay", "surfaces"],
27294
27376
  "ui": ["alert", "snackbar"],
27295
27377
  "wix_cashier": ["isAvailable", "proceedToPayment"]
27296
27378
  };
@@ -27334,6 +27416,7 @@ var init_capabilities_generated = __esm({
27334
27416
  "speech": ["@himalaya/speech"],
27335
27417
  "system_intents": ["@himalaya/system-intents"],
27336
27418
  "tasks": ["@himalaya/tasks"],
27419
+ "theme": ["@himalaya/theme"],
27337
27420
  "ui": ["@himalaya/ui"],
27338
27421
  "webview": ["@himalaya/webview"],
27339
27422
  "wix_cashier": ["@himalaya/wix-cashier"],
@@ -27379,15 +27462,15 @@ var init_shell_capabilities_generated = __esm({
27379
27462
  appDir: "apps/himi-owner-lite",
27380
27463
  shared: false,
27381
27464
  extensible: true,
27382
- built: ["app_info", "biometrics", "camera", "clipboard", "live_activity", "local_database", "open_url", "presigned_upload", "push", "secure_storage", "share", "speech", "ui"],
27383
- serves: ["app_info", "biometrics", "camera", "clipboard", "live_activity", "local_database", "open_url", "presigned_upload", "push", "secure_storage", "share", "speech", "ui"]
27465
+ built: ["app_info", "biometrics", "camera", "clipboard", "live_activity", "local_database", "open_url", "presigned_upload", "push", "secure_storage", "share", "speech", "ui", "wix_platform"],
27466
+ serves: ["app_info", "biometrics", "camera", "clipboard", "live_activity", "local_database", "open_url", "presigned_upload", "push", "secure_storage", "share", "speech", "ui", "wix_platform"]
27384
27467
  },
27385
27468
  "player": {
27386
27469
  appDir: "apps/himi-player",
27387
27470
  shared: true,
27388
27471
  extensible: false,
27389
27472
  built: ["animation", "audio_record_background", "biometrics", "calendar", "calls", "camera", "clipboard", "contacts", "haptic", "iap", "location", "media_playback", "motion", "on_device_ai", "photos", "push", "speech"],
27390
- serves: ["animation", "app_info", "audio_record", "audio_record_background", "biometrics", "browser_auth", "calendar", "calls", "camera", "clipboard", "contacts", "file_picker", "files", "haptic", "himi_apps", "iap", "keyboard", "local_database", "location", "media_playback", "motion", "on_device_ai", "open_url", "pdf", "photos", "presigned_upload", "push", "release_control", "secure_storage", "share", "speaker_diarization", "speech", "stream", "ui", "wix_api", "wix_cashier", "wix_platform"]
27473
+ serves: ["animation", "app_info", "audio_record", "audio_record_background", "biometrics", "browser_auth", "calendar", "calls", "camera", "clipboard", "contacts", "file_picker", "files", "haptic", "himi_apps", "iap", "keyboard", "local_database", "location", "media_playback", "motion", "on_device_ai", "open_url", "pdf", "photos", "presigned_upload", "push", "release_control", "secure_storage", "share", "speaker_diarization", "speech", "stream", "theme", "ui", "wix_api", "wix_cashier", "wix_platform"]
27391
27474
  }
27392
27475
  };
27393
27476
  }
@@ -42293,7 +42376,7 @@ var init_pdf = __esm({
42293
42376
  var defineProperty = Object.defineProperty;
42294
42377
  var stringSlice = uncurryThis("".slice);
42295
42378
  var replace = uncurryThis("".replace);
42296
- var join82 = uncurryThis([].join);
42379
+ var join83 = uncurryThis([].join);
42297
42380
  var CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function() {
42298
42381
  return defineProperty(function() {
42299
42382
  }, "length", { value: 8 }).length !== 8;
@@ -42320,7 +42403,7 @@ var init_pdf = __esm({
42320
42403
  }
42321
42404
  var state = enforceInternalState(value);
42322
42405
  if (!hasOwn(state, "source")) {
42323
- state.source = join82(TEMPLATE, typeof name == "string" ? name : "");
42406
+ state.source = join83(TEMPLATE, typeof name == "string" ? name : "");
42324
42407
  }
42325
42408
  return value;
42326
42409
  };
@@ -44843,7 +44926,7 @@ var init_pdf = __esm({
44843
44926
  var charAt = uncurryThis("".charAt);
44844
44927
  var Uint8Array2 = globalThis2.Uint8Array;
44845
44928
  var $Array = globalThis2.Array;
44846
- var join82 = uncurryThis([].join);
44929
+ var join83 = uncurryThis([].join);
44847
44930
  var INCORRECT_BEHAVIOR_OR_DOESNT_EXISTS = !Uint8Array2 || !Uint8Array2.prototype.toBase64 || !(function() {
44848
44931
  try {
44849
44932
  var target = new Uint8Array2();
@@ -44889,7 +44972,7 @@ var init_pdf = __esm({
44889
44972
  result[written++] = "=";
44890
44973
  }
44891
44974
  }
44892
- return join82(result, "");
44975
+ return join83(result, "");
44893
44976
  }
44894
44977
  });
44895
44978
  },
@@ -44901,7 +44984,7 @@ var init_pdf = __esm({
44901
44984
  var anUint8Array = __webpack_require__3(4154);
44902
44985
  var notDetached = __webpack_require__3(5169);
44903
44986
  var numberToString2 = uncurryThis(1.1.toString);
44904
- var join82 = uncurryThis([].join);
44987
+ var join83 = uncurryThis([].join);
44905
44988
  var $Array = Array;
44906
44989
  var Uint8Array2 = globalThis2.Uint8Array;
44907
44990
  var INCORRECT_BEHAVIOR_OR_DOESNT_EXISTS = !Uint8Array2 || !Uint8Array2.prototype.toHex || !(function() {
@@ -44921,7 +45004,7 @@ var init_pdf = __esm({
44921
45004
  var hex2 = numberToString2(this[i2], 16);
44922
45005
  result[i2] = hex2.length === 1 ? "0" + hex2 : hex2;
44923
45006
  }
44924
- return join82(result, "");
45007
+ return join83(result, "");
44925
45008
  }
44926
45009
  });
44927
45010
  },
@@ -147709,6 +147792,25 @@ var init_studio_reel = __esm({
147709
147792
  }
147710
147793
  });
147711
147794
 
147795
+ // src/home-screen-id.ts
147796
+ import { readFileSync as readFileSync64 } from "node:fs";
147797
+ import { join as join56 } from "node:path";
147798
+ function homeScreenIdOf(dir) {
147799
+ let src;
147800
+ try {
147801
+ src = readFileSync64(join56(dir, "dev", "index.ts"), "utf8");
147802
+ } catch {
147803
+ return null;
147804
+ }
147805
+ const m2 = /^[ \t]*homeScreenId[ \t]*:[ \t]*(?:"((?:[^"\\\n]|\\.)*)"|'((?:[^'\\\n]|\\.)*)')/m.exec(src);
147806
+ const id = m2 ? m2[1] ?? m2[2] : void 0;
147807
+ return id && /^[A-Za-z0-9_.\-/{}]+$/.test(id) ? id : null;
147808
+ }
147809
+ var init_home_screen_id = __esm({
147810
+ "src/home-screen-id.ts"() {
147811
+ }
147812
+ });
147813
+
147712
147814
  // src/milestones.ts
147713
147815
  var milestones_exports = {};
147714
147816
  __export(milestones_exports, {
@@ -147764,20 +147866,9 @@ __export(milestones_exports, {
147764
147866
  });
147765
147867
  import { createHash as createHash32, randomUUID as randomUUID7 } from "node:crypto";
147766
147868
  import { spawn as spawn5 } from "node:child_process";
147767
- import { closeSync as closeSync5, existsSync as existsSync56, lstatSync as lstatSync19, readFileSync as readFileSync64, statSync as statSync15 } from "node:fs";
147869
+ import { closeSync as closeSync5, existsSync as existsSync56, lstatSync as lstatSync19, readFileSync as readFileSync65, statSync as statSync15 } from "node:fs";
147768
147870
  import { createServer as createServer4 } from "node:net";
147769
- import { basename as basename15, dirname as dirname32, isAbsolute as isAbsolute6, join as join56, relative as relative11, resolve as resolve48, sep as sep15 } from "node:path";
147770
- function homeScreenIdOf(dir) {
147771
- let src;
147772
- try {
147773
- src = readFileSync64(join56(dir, "dev", "index.ts"), "utf8");
147774
- } catch {
147775
- return null;
147776
- }
147777
- const m2 = /^[ \t]*homeScreenId[ \t]*:[ \t]*(?:"((?:[^"\\\n]|\\.)*)"|'((?:[^'\\\n]|\\.)*)')/m.exec(src);
147778
- const id = m2 ? m2[1] ?? m2[2] : void 0;
147779
- return id && /^[A-Za-z0-9_.\-/{}]+$/.test(id) ? id : null;
147780
- }
147871
+ import { basename as basename15, dirname as dirname32, isAbsolute as isAbsolute6, join as join57, relative as relative11, resolve as resolve48, sep as sep15 } from "node:path";
147781
147872
  function homeShotPath(dir, home) {
147782
147873
  const root = resolve48(dir);
147783
147874
  const base = resolve48(root, ".himi", "shots");
@@ -147888,7 +147979,7 @@ function autoPictureGate(dir) {
147888
147979
  }
147889
147980
  async function homePictureAtValidate(dir, opts) {
147890
147981
  if (!opts.ok) return { skipped: "validate found errors, so the picture was left as it is" };
147891
- if (!existsSync56(join56(dir, "himalaya.content.json"))) return { skipped: "not a content package" };
147982
+ if (!existsSync56(join57(dir, "himalaya.content.json"))) return { skipped: "not a content package" };
147892
147983
  const env = opts.env ?? process.env;
147893
147984
  if (ciSet(env)) return { skipped: "the CI environment variable is set" };
147894
147985
  if (env.NODE_TEST_CONTEXT) return { skipped: "running under `node --test`" };
@@ -148112,16 +148203,16 @@ function rememberDraft(dir, releaseId, m2) {
148112
148203
  ...m2.tokensHash ? { tokensHash: m2.tokensHash } : {},
148113
148204
  ...m2.appConfigHash ? { appConfigHash: m2.appConfigHash } : {}
148114
148205
  };
148115
- writeFileAtomic(join56(dir, LAST_DRAFT_FILE), `${JSON.stringify({ v: 1, releaseId, manifest })}
148206
+ writeFileAtomic(join57(dir, LAST_DRAFT_FILE), `${JSON.stringify({ v: 1, releaseId, manifest })}
148116
148207
  `);
148117
148208
  } catch {
148118
148209
  }
148119
148210
  }
148120
148211
  function lastDraft(dir) {
148121
148212
  try {
148122
- const file2 = join56(dir, LAST_DRAFT_FILE);
148213
+ const file2 = join57(dir, LAST_DRAFT_FILE);
148123
148214
  if (!lstatSync19(file2).isFile()) return null;
148124
- const r2 = JSON.parse(readFileSync64(file2, "utf8"));
148215
+ const r2 = JSON.parse(readFileSync65(file2, "utf8"));
148125
148216
  const m2 = r2.manifest;
148126
148217
  if (r2.v !== 1 || typeof r2.releaseId !== "string" || !m2 || typeof m2.screens !== "object" || !m2.screens || typeof m2.bundles !== "object" || !m2.bundles) return null;
148127
148218
  return { releaseId: r2.releaseId, manifest: m2 };
@@ -148172,7 +148263,7 @@ function recordInitSource(dir, opts = {}) {
148172
148263
  template: opts.template && TEMPLATE_NAME.test(opts.template) ? opts.template : null,
148173
148264
  ...opts.source ? { source: opts.source } : {}
148174
148265
  };
148175
- writeFileAtomic(join56(dir, INIT_SOURCE_FILE), `${JSON.stringify(record2, null, 2)}
148266
+ writeFileAtomic(join57(dir, INIT_SOURCE_FILE), `${JSON.stringify(record2, null, 2)}
148176
148267
  `);
148177
148268
  return true;
148178
148269
  } catch {
@@ -148180,10 +148271,10 @@ function recordInitSource(dir, opts = {}) {
148180
148271
  }
148181
148272
  }
148182
148273
  function readInitSource(dir) {
148183
- const file2 = join56(dir, INIT_SOURCE_FILE);
148274
+ const file2 = join57(dir, INIT_SOURCE_FILE);
148184
148275
  try {
148185
148276
  if (!lstatSync19(file2).isFile()) return null;
148186
- const r2 = JSON.parse(readFileSync64(file2, "utf8"));
148277
+ const r2 = JSON.parse(readFileSync65(file2, "utf8"));
148187
148278
  if (r2.v !== 1 || typeof r2.fingerprint !== "string" || !/^[0-9a-f]{64}$/.test(r2.fingerprint) || typeof r2.newestMs !== "number") return null;
148188
148279
  return {
148189
148280
  v: 1,
@@ -148252,10 +148343,10 @@ function homeShotForPostcard(dir, opts = {}) {
148252
148343
  function contentHomePictures(dir, home) {
148253
148344
  const out2 = [];
148254
148345
  const shot = homeShotPath(dir, home);
148255
- const hist = realDirIn(dir, HISTORY_DIR) ? join56(dir, HISTORY_DIR) : null;
148346
+ const hist = realDirIn(dir, HISTORY_DIR) ? join57(dir, HISTORY_DIR) : null;
148256
148347
  for (const r2 of recordedShots(dir, home)) {
148257
148348
  if (r2.state.state !== "content") continue;
148258
- for (const file2 of [shot, hist && join56(hist, `${r2.sha256}.png`)]) {
148349
+ for (const file2 of [shot, hist && join57(hist, `${r2.sha256}.png`)]) {
148259
148350
  try {
148260
148351
  if (!file2 || !lstatSync19(file2).isFile() || sha256Of2(file2) !== r2.sha256) continue;
148261
148352
  } catch {
@@ -148268,10 +148359,10 @@ function contentHomePictures(dir, home) {
148268
148359
  return out2;
148269
148360
  }
148270
148361
  function readInitWatch(dir) {
148271
- const file2 = join56(dir, INIT_WATCH_FILE);
148362
+ const file2 = join57(dir, INIT_WATCH_FILE);
148272
148363
  try {
148273
148364
  if (!lstatSync19(file2).isFile()) return null;
148274
- const r2 = JSON.parse(readFileSync64(file2, "utf8"));
148365
+ const r2 = JSON.parse(readFileSync65(file2, "utf8"));
148275
148366
  if (r2.v !== 1 || typeof r2.pid !== "number" || !Number.isInteger(r2.pid) || r2.pid < 1) return null;
148276
148367
  if (typeof r2.url !== "string" || !/^http:\/\/127\.0\.0\.1:\d+\//.test(r2.url) || typeof r2.board !== "string" || typeof r2.log !== "string" || typeof r2.startedAt !== "string") return null;
148277
148368
  if (r2.root !== runRootId(dir)) return null;
@@ -148296,14 +148387,14 @@ function liveWatchRunning(dir, isAlive = pidAlive, now) {
148296
148387
  }
148297
148388
  function watchReminder(dir, opts = {}) {
148298
148389
  try {
148299
- if (!existsSync56(join56(dir, "himalaya.content.json"))) return void 0;
148390
+ if (!existsSync56(join57(dir, "himalaya.content.json"))) return void 0;
148300
148391
  const nowDate = opts.now ?? /* @__PURE__ */ new Date();
148301
148392
  const live3 = liveWatch(dir, opts.isAlive, nowDate);
148302
148393
  const now = nowDate.getTime();
148303
- const file2 = join56(dir, REMINDERS_FILE);
148394
+ const file2 = join57(dir, REMINDERS_FILE);
148304
148395
  let last = Number.NaN;
148305
148396
  try {
148306
- if (lstatSync19(file2).isFile()) last = Date.parse(JSON.parse(readFileSync64(file2, "utf8")).watch ?? "");
148397
+ if (lstatSync19(file2).isFile()) last = Date.parse(JSON.parse(readFileSync65(file2, "utf8")).watch ?? "");
148307
148398
  } catch {
148308
148399
  }
148309
148400
  if (Number.isFinite(last) && now - last >= 0 && now - last < WATCH_REMINDER_EVERY_MS) return void 0;
@@ -148315,7 +148406,7 @@ function watchReminder(dir, opts = {}) {
148315
148406
  }
148316
148407
  const content = opts.content ?? displayPath(dir);
148317
148408
  const remote = readInitSource(dir)?.source === "remote" ? "init did not start it because this template came off the serve plane \u2014 once you have read its code, " : "";
148318
- return `${remote}start the live preview and leave it running: \`himi run --watch --content ${shellQuote(content)} &\` (the consent preflight first, if a worker or config calls Wix at boot) \u2014 it repaints on every save; the build board is ${shellQuote(join56(content, ".himi", "studio", "index.html"))}, or /__himi/studio/ on the preview`;
148409
+ return `${remote}start the live preview and leave it running: \`himi run --watch --content ${shellQuote(content)} &\` (the consent preflight first, if a worker or config calls Wix at boot) \u2014 it repaints on every save; the build board is ${shellQuote(join57(content, ".himi", "studio", "index.html"))}, or /__himi/studio/ on the preview`;
148319
148410
  } catch {
148320
148411
  return void 0;
148321
148412
  }
@@ -148381,7 +148472,7 @@ async function startWatchAtInit(dir, opts) {
148381
148472
  child.unref();
148382
148473
  if (!child.pid) return { skipped: "the live preview did not start (no process) \u2014 start it yourself: `himi run --watch --content <dir> &`", ...note };
148383
148474
  const record2 = { v: 1, pid: child.pid, root: runRootId(dir), url, board, log: WATCH_LOG, startedAt: now.toISOString() };
148384
- if (realDirIn(dir, ".himi")) writeFileAtomic(join56(dir, INIT_WATCH_FILE), `${JSON.stringify(record2, null, 2)}
148475
+ if (realDirIn(dir, ".himi")) writeFileAtomic(join57(dir, INIT_WATCH_FILE), `${JSON.stringify(record2, null, 2)}
148385
148476
  `);
148386
148477
  return { started: true, pid: child.pid, url, board, log: WATCH_LOG, ...note };
148387
148478
  } catch (e2) {
@@ -148396,7 +148487,7 @@ function watchRunning(w2) {
148396
148487
  function doNowBlock(opts) {
148397
148488
  const content = displayPath(opts.dir, opts.cwd);
148398
148489
  const home = opts.home ?? "<homeScreenId>";
148399
- const board = join56(content, ".himi", "studio", "index.html");
148490
+ const board = join57(content, ".himi", "studio", "index.html");
148400
148491
  const running = watchRunning(opts.watch);
148401
148492
  const who = running?.by === "init" ? "init started it" : "already running";
148402
148493
  const watch2 = running ? `${running.url} (${who}; the board: ${running.board}) \u2014 leave it running, and do not start another` : `\`himi run --watch${contentArg(content)} &\` and leave it running (the board: ${shellQuote(board)}, or /__himi/studio/ on the preview)`;
@@ -148415,7 +148506,7 @@ function writeHandoverReel(dir) {
148415
148506
  try {
148416
148507
  if (!realDirIn(dir, ".himi")) return { skipped: ".himi is not a real directory inside the package (a symlink?), so no making-of was written" };
148417
148508
  const { html } = buildReel(dir);
148418
- const file2 = join56(dir, ".himi", "making-of.html");
148509
+ const file2 = join57(dir, ".himi", "making-of.html");
148419
148510
  writeFileAtomic(file2, html);
148420
148511
  return { file: file2, hint: `hand ${basename15(file2)} to the owner at the handover \u2014 one self-contained page of their app taking shape; send it beside the preview link, never instead of it` };
148421
148512
  } catch (e2) {
@@ -148423,11 +148514,11 @@ function writeHandoverReel(dir) {
148423
148514
  }
148424
148515
  }
148425
148516
  function afterHandoverPostcard(dir, opts = {}) {
148426
- const file2 = join56(dir, ".himi", "making-of.html");
148517
+ const file2 = join57(dir, ".himi", "making-of.html");
148427
148518
  let fresh = false;
148428
148519
  try {
148429
148520
  const st2 = lstatSync19(file2);
148430
- fresh = st2.isFile() && !st2.isSymbolicLink() && st2.mtimeMs >= statSync15(join56(dir, ".himi", "progress.jsonl")).mtimeMs;
148521
+ fresh = st2.isFile() && !st2.isSymbolicLink() && st2.mtimeMs >= statSync15(join57(dir, ".himi", "progress.jsonl")).mtimeMs;
148431
148522
  } catch {
148432
148523
  fresh = false;
148433
148524
  }
@@ -148446,6 +148537,7 @@ var init_milestones = __esm({
148446
148537
  init_screen_state();
148447
148538
  init_shell_quote();
148448
148539
  init_studio_reel();
148540
+ init_home_screen_id();
148449
148541
  contentArg = (content) => content ? ` --content ${shellQuote(content)}` : "";
148450
148542
  CONSENT_PREFLIGHT = "Consent preflight before a template preview";
148451
148543
  CONSENT_PREFLIGHT_STEP = `consent preflight (skill: "${CONSENT_PREFLIGHT}"): if any worker or config can make Wix or external requests at boot, authorize or mock them first; if none can, go straight on`;
@@ -148458,13 +148550,13 @@ var init_milestones = __esm({
148458
148550
  STILL_BUILDING_MESSAGE = "Still building: here's the home screen now.";
148459
148551
  yourFirstLookMessage = (dir) => `First look at your app: ${appName(dir)}'s home screen, with your changes.`;
148460
148552
  homeCaveat = (dir, image) => homeStateCaveat(shotStateFor(dir, image));
148461
- LAST_DRAFT_FILE = join56(".himi", "last-draft.json");
148462
- INIT_SOURCE_FILE = join56(".himi", "init-source.json");
148553
+ LAST_DRAFT_FILE = join57(".himi", "last-draft.json");
148554
+ INIT_SOURCE_FILE = join57(".himi", "init-source.json");
148463
148555
  STARTING_POINT_REF = "starting-point";
148464
148556
  TEMPLATE_NAME = /^[A-Za-z0-9._-]{1,64}$/;
148465
- sha256Of2 = (file2) => createHash32("sha256").update(readFileSync64(file2)).digest("hex");
148557
+ sha256Of2 = (file2) => createHash32("sha256").update(readFileSync65(file2)).digest("hex");
148466
148558
  WATCH_REMINDER_EVERY_MS = 10 * 60 * 1e3;
148467
- REMINDERS_FILE = join56(".himi", "reminders.json");
148559
+ REMINDERS_FILE = join57(".himi", "reminders.json");
148468
148560
  pidAlive = (pid) => {
148469
148561
  try {
148470
148562
  process.kill(pid, 0);
@@ -148473,7 +148565,7 @@ var init_milestones = __esm({
148473
148565
  return e2.code === "EPERM";
148474
148566
  }
148475
148567
  };
148476
- INIT_WATCH_FILE = join56(".himi", "watch.json");
148568
+ INIT_WATCH_FILE = join57(".himi", "watch.json");
148477
148569
  INIT_WATCH_STARTING_MS = 5 * 60 * 1e3;
148478
148570
  INIT_WATCH_IDLE_MINUTES = 30;
148479
148571
  WATCH_LOG = ".himi/watch.log";
@@ -148509,8 +148601,8 @@ __export(template_sweep_exports, {
148509
148601
  sweepCopy: () => sweepCopy,
148510
148602
  sweepPairs: () => sweepPairs
148511
148603
  });
148512
- import { readFileSync as readFileSync65, writeFileSync as writeFileSync24 } from "node:fs";
148513
- import { join as join57 } from "node:path";
148604
+ import { readFileSync as readFileSync66, writeFileSync as writeFileSync24 } from "node:fs";
148605
+ import { join as join58 } from "node:path";
148514
148606
  import ts7 from "typescript";
148515
148607
  function isCopy(node, file2) {
148516
148608
  const parent = node.parent;
@@ -148551,7 +148643,7 @@ function sweepCopy(dir, pairs, dryRun) {
148551
148643
  const next = /* @__PURE__ */ new Map();
148552
148644
  const replaced = pairs.map(([from, to2]) => ({ from, to: to2, files: {} }));
148553
148645
  for (const f2 of files) {
148554
- const text9 = readFileSync65(join57(dir, f2), "utf8");
148646
+ const text9 = readFileSync66(join58(dir, f2), "utf8");
148555
148647
  if (!pairs.some(([from]) => text9.includes(from) || text9.includes(JSON.stringify(from).slice(1, -1)))) continue;
148556
148648
  const kind = f2.endsWith(".json") ? ts7.ScriptKind.JSON : f2.endsWith("x") ? ts7.ScriptKind.TSX : ts7.ScriptKind.TS;
148557
148649
  const sf2 = ts7.createSourceFile(f2, text9, ts7.ScriptTarget.Latest, true, kind);
@@ -148580,16 +148672,16 @@ function sweepCopy(dir, pairs, dryRun) {
148580
148672
  if (errors.length) throw new TrimRefusal(`the sweep would break ${f2} \u2014 nothing written: ${errors[0]}`);
148581
148673
  next.set(f2, out2);
148582
148674
  }
148583
- const dev = next.get("dev/index.ts") ?? readFileSync65(join57(dir, "dev", "index.ts"), "utf8");
148584
- const config = next.get("config.ts") ?? readFileSync65(join57(dir, "config.ts"), "utf8");
148675
+ const dev = next.get("dev/index.ts") ?? readFileSync66(join58(dir, "dev", "index.ts"), "utf8");
148676
+ const config = next.get("config.ts") ?? readFileSync66(join58(dir, "config.ts"), "utf8");
148585
148677
  try {
148586
148678
  parseApp(dev, config);
148587
148679
  } catch (e2) {
148588
148680
  throw new TrimRefusal(`the sweep would leave dev/index.ts or config.ts unparseable \u2014 nothing written: ${e2.message}`);
148589
148681
  }
148590
- if (!dryRun) for (const [f2, t2] of next) writeFileSync24(join57(dir, f2), t2);
148682
+ if (!dryRun) for (const [f2, t2] of next) writeFileSync24(join58(dir, f2), t2);
148591
148683
  const g2 = new RegExp(PLACEHOLDER.source, `${PLACEHOLDER.flags.replace("g", "")}g`);
148592
- const placeholdersLeft = all.reduce((n2, f2) => n2 + [...(next.get(f2) ?? readFileSync65(join57(dir, f2), "utf8")).matchAll(g2)].length, 0);
148684
+ const placeholdersLeft = all.reduce((n2, f2) => n2 + [...(next.get(f2) ?? readFileSync66(join58(dir, f2), "utf8")).matchAll(g2)].length, 0);
148593
148685
  return {
148594
148686
  ok: true,
148595
148687
  dryRun,
@@ -148606,7 +148698,7 @@ function sweepPairs(set, mapFile) {
148606
148698
  pairs.push([s2.slice(0, at2), s2.slice(at2 + 2)]);
148607
148699
  }
148608
148700
  if (mapFile) {
148609
- const map = JSON.parse(readFileSync65(mapFile, "utf8"));
148701
+ const map = JSON.parse(readFileSync66(mapFile, "utf8"));
148610
148702
  for (const [k2, v2] of Object.entries(map)) {
148611
148703
  if (typeof v2 !== "string") throw new TrimRefusal(`--map ${mapFile}: "${k2}" must map to a string`);
148612
148704
  pairs.push([k2, v2]);
@@ -148851,18 +148943,18 @@ __export(template_recommend_exports, {
148851
148943
  recommendTemplates: () => recommendTemplates,
148852
148944
  verticalsFromBook: () => verticalsFromBook
148853
148945
  });
148854
- import { existsSync as existsSync57, readFileSync as readFileSync66 } from "node:fs";
148855
- import { join as join58 } from "node:path";
148946
+ import { existsSync as existsSync57, readFileSync as readFileSync67 } from "node:fs";
148947
+ import { join as join59 } from "node:path";
148856
148948
  function verticalsFromBook(path2) {
148857
- const dir = existsSync57(join58(path2, "book.json")) || existsSync57(join58(path2, "provisioning.overlay.json")) ? path2 : join58(path2, ".himi", "business-book");
148858
- const overlay = join58(dir, "provisioning.overlay.json");
148949
+ const dir = existsSync57(join59(path2, "book.json")) || existsSync57(join59(path2, "provisioning.overlay.json")) ? path2 : join59(path2, ".himi", "business-book");
148950
+ const overlay = join59(dir, "provisioning.overlay.json");
148859
148951
  if (existsSync57(overlay)) {
148860
- const v2 = JSON.parse(readFileSync66(overlay, "utf8")).installedVerticals;
148952
+ const v2 = JSON.parse(readFileSync67(overlay, "utf8")).installedVerticals;
148861
148953
  if (Array.isArray(v2) && v2.length) return v2.filter((x2) => typeof x2 === "string");
148862
148954
  }
148863
- const book = join58(dir, "book.json");
148955
+ const book = join59(dir, "book.json");
148864
148956
  if (existsSync57(book)) {
148865
- const probes = JSON.parse(readFileSync66(book, "utf8")).probes;
148957
+ const probes = JSON.parse(readFileSync67(book, "utf8")).probes;
148866
148958
  if (Array.isArray(probes)) return installedFromProbes(probes);
148867
148959
  }
148868
148960
  throw new Error(`no book.json / provisioning.overlay.json under ${path2} \u2014 run \`himi site analyze\` first, or pass --verticals`);
@@ -148922,6 +149014,78 @@ var init_template_recommend = __esm({
148922
149014
  }
148923
149015
  });
148924
149016
 
149017
+ // ../../core/ts/src/nav-slots.ts
149018
+ function navPathError(raw) {
149019
+ if (raw === void 0 || raw === null || raw === "") return null;
149020
+ if (typeof raw !== "string") return `${JSON.stringify(raw)} is not a $service: binding ($service:<service>.<path>)`;
149021
+ const t2 = raw.trim();
149022
+ if (t2.startsWith("$item.")) return `"${raw}": $item. means nothing outside a list row \u2014 nav chrome binds $service:<service>.<path>`;
149023
+ if (!t2.startsWith("$service:")) return `"${raw}" is not a $service: binding ($service:<service>.<path>)`;
149024
+ const path2 = t2.slice("$service:".length);
149025
+ if (path2.includes("/")) return `"${raw}": the separator is a dot, not a slash ($service:<service>.<path>)`;
149026
+ if (!/^[^.\s]+(\.[^.\s]+)+$/.test(path2)) return `"${raw}" must be $service:<service>.<dot.path>`;
149027
+ return null;
149028
+ }
149029
+ function navConfigPathErrors(config) {
149030
+ const errors = [];
149031
+ const list = (v2) => Array.isArray(v2) ? v2.flatMap((x2, i2) => x2 !== null && typeof x2 === "object" ? [[x2, i2]] : []) : [];
149032
+ const obj3 = (v2) => v2 !== null && typeof v2 === "object" && !Array.isArray(v2) ? v2 : void 0;
149033
+ const check = (where, raw) => {
149034
+ const e2 = navPathError(raw);
149035
+ if (e2) errors.push(`${where}: ${e2}`);
149036
+ };
149037
+ const item = (where, it2) => {
149038
+ check(`${where}.hiddenPath`, it2.hiddenPath);
149039
+ check(`${where}.labelPath`, it2.labelPath);
149040
+ check(`${where}.iconPath`, it2.iconPath);
149041
+ check(`${where}.badge.valuePath`, obj3(it2.badge)?.valuePath);
149042
+ if (it2.hiddenUntilResolved && !it2.hiddenPath) {
149043
+ errors.push(`${where}: hiddenUntilResolved without hiddenPath can never resolve, so the item would never show`);
149044
+ }
149045
+ };
149046
+ const header = (where, h2) => {
149047
+ if (!h2) return;
149048
+ check(`${where}.titlePath`, h2.titlePath);
149049
+ check(`${where}.subtitlePath`, h2.subtitlePath);
149050
+ check(`${where}.imageUrlPath`, h2.imageUrlPath);
149051
+ };
149052
+ for (const [it2, i2] of list(obj3(config.tabBar)?.items)) item(`tabBar.items[${i2}] "${it2.id}"`, it2);
149053
+ for (const [it2, i2] of list(obj3(config.sidebar)?.items)) item(`sidebar.items[${i2}] "${it2.id}"`, it2);
149054
+ for (const [it2, i2] of list(obj3(config.drawer)?.items)) item(`drawer.items[${i2}] "${it2.id}"`, it2);
149055
+ for (const [it2, i2] of list(obj3(config.topBarDefault)?.actions)) item(`topBarDefault.actions[${i2}] "${it2.id}"`, it2);
149056
+ header("drawer.header", obj3(obj3(config.drawer)?.header));
149057
+ const sidebarHeader = obj3(obj3(config.sidebar)?.header);
149058
+ header("sidebar.header", sidebarHeader);
149059
+ for (const key2 of ["titlePath", "subtitlePath", "imageUrlPath"]) {
149060
+ if (sidebarHeader?.[key2]) {
149061
+ errors.push(`sidebar.header.${key2}: sidebar header bindings are not rendered yet (#4116) \u2014 bind drawer.header, which the sidebar shows`);
149062
+ }
149063
+ }
149064
+ const firstOf = (v2, skip = false) => list(v2).find(([it2]) => !skip || it2.role !== "section" && it2.role !== "note");
149065
+ const tabs = firstOf(obj3(config.tabBar)?.items);
149066
+ const kind = typeof config.navKind === "string" ? config.navKind : "";
149067
+ const rail = kind === "drawer" ? void 0 : firstOf(obj3(config.sidebar)?.items);
149068
+ const homes = [];
149069
+ if (tabs && !(kind === "sidebar" && rail)) homes.push(["tabBar.items", tabs]);
149070
+ if (rail && (kind === "sidebar" || kind === "responsive" || !tabs)) homes.push(["sidebar.items", rail]);
149071
+ if (!tabs && !rail) {
149072
+ const home = typeof config.homeScreenId === "string" && config.homeScreenId.length > 0 ? config.homeScreenId : void 0;
149073
+ const rows = list(obj3(config.drawer)?.items);
149074
+ const row = home !== void 0 ? rows.find(([it2]) => it2.screenId === home) : firstOf(obj3(config.drawer)?.items, true);
149075
+ homes.push(["drawer.items", row]);
149076
+ }
149077
+ for (const [where, first] of homes) {
149078
+ if (first && first[0].hiddenUntilResolved) {
149079
+ errors.push(`${where}[${first[1]}] "${first[0].id}": the home destination cannot be hiddenUntilResolved \u2014 the boot route, deep links and push taps root on it; gate a later item instead`);
149080
+ }
149081
+ }
149082
+ return errors;
149083
+ }
149084
+ var init_nav_slots = __esm({
149085
+ "../../core/ts/src/nav-slots.ts"() {
149086
+ }
149087
+ });
149088
+
148925
149089
  // src/nav-lint.ts
148926
149090
  var nav_lint_exports = {};
148927
149091
  __export(nav_lint_exports, {
@@ -149002,6 +149166,10 @@ async function navIssues(dir, strict) {
149002
149166
  `navigation.navKind: unknown value ${JSON.stringify(nav.navKind)} \u2014 the client coalesces an unrecognized kind to "bottomTabs" (invariant 6) rather than failing, so this silently selects chrome you did not ask for. Valid kinds: ${[...NAV_KINDS].sort().join(", ")}.`
149003
149167
  );
149004
149168
  }
149169
+ const servedHome = homeScreenIdOf(dir) ?? void 0;
149170
+ for (const message of navConfigPathErrors({ ...nav, homeScreenId: servedHome })) {
149171
+ error("nav-path-malformed", `navigation.${message}`);
149172
+ }
149005
149173
  const navKind = nav.navKind;
149006
149174
  const effectiveBottomTabs = navKind === void 0 || navKind === "bottomTabs" || typeof navKind !== "string" || !NAV_KINDS.has(navKind);
149007
149175
  const declaresOtherChrome = itemCount(nav.drawer) > 0 || itemCount(nav.sidebar) > 0;
@@ -149114,6 +149282,8 @@ var init_nav_lint = __esm({
149114
149282
  "src/nav-lint.ts"() {
149115
149283
  init_app_config_loader();
149116
149284
  init_provisioning_facts();
149285
+ init_nav_slots();
149286
+ init_home_screen_id();
149117
149287
  init_wix_push_links();
149118
149288
  NAVIGATION_KEYS = /* @__PURE__ */ new Set([
149119
149289
  "tabBar",
@@ -149169,8 +149339,8 @@ __export(eject_exports, {
149169
149339
  EJECTABLE: () => EJECTABLE,
149170
149340
  ejectModule: () => ejectModule
149171
149341
  });
149172
- import { existsSync as existsSync58, mkdirSync as mkdirSync28, readFileSync as readFileSync67, writeFileSync as writeFileSync25 } from "node:fs";
149173
- import { dirname as dirname33, join as join59, relative as relative12, resolve as resolve49, sep as sep16 } from "node:path";
149342
+ import { existsSync as existsSync58, mkdirSync as mkdirSync28, readFileSync as readFileSync68, writeFileSync as writeFileSync25 } from "node:fs";
149343
+ import { dirname as dirname33, join as join60, relative as relative12, resolve as resolve49, sep as sep16 } from "node:path";
149174
149344
  function locate(repoRootOrCwd, mod) {
149175
149345
  const inRepo = resolve49(repoRootOrCwd, `stdlib/flows/${mod}/src/index.ts`);
149176
149346
  if (existsSync58(inRepo)) return { path: inRepo, form: "source" };
@@ -149199,7 +149369,7 @@ function ejectModule(opts) {
149199
149369
  };
149200
149370
  }
149201
149371
  const ext = found.form === "source" ? "ts" : "mjs";
149202
- const target = join59(contentDir2, "tier5-src", "_ejected", `${mod}.${ext}`);
149372
+ const target = join60(contentDir2, "tier5-src", "_ejected", `${mod}.${ext}`);
149203
149373
  mkdirSync28(dirname33(target), { recursive: true });
149204
149374
  const banner = `// EJECTED from @wix/himalaya/${mod}. This app owns this file now.
149205
149375
  //
@@ -149213,7 +149383,7 @@ function ejectModule(opts) {
149213
149383
  // gate still applies. Ejecting buys layout and flow, never the floor.
149214
149384
 
149215
149385
  `;
149216
- const normalized = readFileSync67(found.path, "utf8").replace(
149386
+ const normalized = readFileSync68(found.path, "utf8").replace(
149217
149387
  /(["'])@himalaya\/([a-z0-9-]+(?:\/[a-z0-9-]+)?)\1/g,
149218
149388
  (_m, q2, sub) => `${q2}@wix/himalaya/${sub}${q2}`
149219
149389
  );
@@ -149221,7 +149391,7 @@ function ejectModule(opts) {
149221
149391
  const rewired = [];
149222
149392
  for (const f2 of files) {
149223
149393
  if (!existsSync58(f2)) continue;
149224
- const before = readFileSync67(f2, "utf8");
149394
+ const before = readFileSync68(f2, "utf8");
149225
149395
  let after = before;
149226
149396
  let rel = relative12(dirname33(f2), target).split(sep16).join("/").replace(/\.tsx?$/, ".js");
149227
149397
  if (!rel.startsWith(".")) rel = `./${rel}`;
@@ -149341,8 +149511,8 @@ var init_app_map = __esm({
149341
149511
  });
149342
149512
 
149343
149513
  // src/wix-writes.ts
149344
- import { existsSync as existsSync59, readFileSync as readFileSync68 } from "node:fs";
149345
- import { join as join60 } from "node:path";
149514
+ import { existsSync as existsSync59, readFileSync as readFileSync69 } from "node:fs";
149515
+ import { join as join61 } from "node:path";
149346
149516
  function isProvenRead(method, path2) {
149347
149517
  if (/[#\x00-\x1F\x7F]/.test(path2)) return false;
149348
149518
  const verb = method.toUpperCase();
@@ -149460,11 +149630,11 @@ function parseDataAccess(text9, from) {
149460
149630
  }
149461
149631
  function readDataAccess(dir) {
149462
149632
  for (const name of ["SPEC.md", "MOBILE-UX.md"]) {
149463
- const p2 = join60(dir, name);
149633
+ const p2 = join61(dir, name);
149464
149634
  if (!existsSync59(p2)) continue;
149465
149635
  let text9;
149466
149636
  try {
149467
- text9 = readFileSync68(p2, "utf8");
149637
+ text9 = readFileSync69(p2, "utf8");
149468
149638
  } catch {
149469
149639
  continue;
149470
149640
  }
@@ -149578,14 +149748,14 @@ __export(test_exports, {
149578
149748
  scopeDescriptors: () => scopeDescriptors,
149579
149749
  writeRecordedMocks: () => writeRecordedMocks
149580
149750
  });
149581
- import { existsSync as existsSync60, mkdirSync as mkdirSync29, readFileSync as readFileSync69, writeFileSync as writeFileSync26 } from "node:fs";
149582
- import { join as join61, resolve as resolve50 } from "node:path";
149751
+ import { existsSync as existsSync60, mkdirSync as mkdirSync29, readFileSync as readFileSync70, writeFileSync as writeFileSync26 } from "node:fs";
149752
+ import { join as join62, resolve as resolve50 } from "node:path";
149583
149753
  function readTestConfig(dir) {
149584
149754
  const p2 = resolve50(dir, TEST_CONFIG_FILE);
149585
149755
  if (!existsSync60(p2)) return {};
149586
149756
  let parsed;
149587
149757
  try {
149588
- parsed = JSON.parse(readFileSync69(p2, "utf8"));
149758
+ parsed = JSON.parse(readFileSync70(p2, "utf8"));
149589
149759
  } catch (e2) {
149590
149760
  throw new Error(`${TEST_CONFIG_FILE} is not valid JSON \u2014 ${e2.message}`);
149591
149761
  }
@@ -149632,7 +149802,7 @@ function readTestConfig(dir) {
149632
149802
  function readNetRules(path2) {
149633
149803
  let parsed;
149634
149804
  try {
149635
- parsed = JSON.parse(readFileSync69(path2, "utf8"));
149805
+ parsed = JSON.parse(readFileSync70(path2, "utf8"));
149636
149806
  } catch (e2) {
149637
149807
  throw new Error(`--net ${path2} could not be read as JSON \u2014 ${e2.message}`);
149638
149808
  }
@@ -149669,7 +149839,7 @@ function readCannedResponses() {
149669
149839
  ];
149670
149840
  for (const url of candidates) {
149671
149841
  try {
149672
- const parsed = JSON.parse(readFileSync69(url, "utf8"));
149842
+ const parsed = JSON.parse(readFileSync70(url, "utf8"));
149673
149843
  const byKey = {};
149674
149844
  for (const [k2, v2] of Object.entries(parsed)) {
149675
149845
  if (!k2.startsWith("//")) byKey[k2] = v2;
@@ -149759,8 +149929,8 @@ function writeRecordedMocks(opts) {
149759
149929
  mkdir: (p2) => mkdirSync29(p2, { recursive: true }),
149760
149930
  write: (p2, s2) => writeFileSync26(p2, s2)
149761
149931
  };
149762
- fs2.mkdir(join61(opts.dir, "dev"));
149763
- fs2.write(join61(opts.dir, "dev", "net-mocks.json"), JSON.stringify(opts.mocks, null, 2) + "\n");
149932
+ fs2.mkdir(join62(opts.dir, "dev"));
149933
+ fs2.write(join62(opts.dir, "dev", "net-mocks.json"), JSON.stringify(opts.mocks, null, 2) + "\n");
149764
149934
  return { ok: true, rules, to: "dev/net-mocks.json" };
149765
149935
  }
149766
149936
  function scopeDescriptors(descriptors, requestedIds, invalidScreens) {
@@ -150306,14 +150476,14 @@ var mobile_ux_lint_exports = {};
150306
150476
  __export(mobile_ux_lint_exports, {
150307
150477
  mobileUxIssues: () => mobileUxIssues
150308
150478
  });
150309
- import { existsSync as existsSync61, readFileSync as readFileSync70 } from "node:fs";
150310
- import { join as join62 } from "node:path";
150479
+ import { existsSync as existsSync61, readFileSync as readFileSync71 } from "node:fs";
150480
+ import { join as join63 } from "node:path";
150311
150481
  function mobileUxIssues(dir, strict) {
150312
- const file2 = join62(dir, "MOBILE-UX.md");
150482
+ const file2 = join63(dir, "MOBILE-UX.md");
150313
150483
  if (!existsSync61(file2)) return [];
150314
150484
  let text9;
150315
150485
  try {
150316
- text9 = readFileSync70(file2, "utf8");
150486
+ text9 = readFileSync71(file2, "utf8");
150317
150487
  } catch {
150318
150488
  return [];
150319
150489
  }
@@ -151994,8 +152164,8 @@ __export(functions_exports, {
151994
152164
  resolveFunctionsTarget: () => resolveFunctionsTarget,
151995
152165
  runRemoteFunctionOperation: () => runRemoteFunctionOperation
151996
152166
  });
151997
- import { readFileSync as readFileSync71, existsSync as existsSync62 } from "node:fs";
151998
- import { join as join63, resolve as resolve51 } from "node:path";
152167
+ import { readFileSync as readFileSync72, existsSync as existsSync62 } from "node:fs";
152168
+ import { join as join64, resolve as resolve51 } from "node:path";
151999
152169
  function resolveFunctionsTarget(input) {
152000
152170
  const explicitUrl = input.functionsUrl?.trim();
152001
152171
  if (explicitUrl) return { mode: "remote", baseUrl: explicitUrl };
@@ -152014,9 +152184,9 @@ async function loadFunctionsApp(dir) {
152014
152184
  }
152015
152185
  const sources = {};
152016
152186
  for (const definition of config.functions.functions) {
152017
- const source = [".ts", ".js", ".mts", ".mjs"].map((extension) => join63(loaded.dir, "functions", `${definition.name}${extension}`)).find(existsSync62);
152187
+ const source = [".ts", ".js", ".mts", ".mjs"].map((extension) => join64(loaded.dir, "functions", `${definition.name}${extension}`)).find(existsSync62);
152018
152188
  if (!source) throw new Error(`missing source for function ${definition.name}; expected functions/${definition.name}.ts`);
152019
- sources[definition.name] = readFileSync71(source, "utf8");
152189
+ sources[definition.name] = readFileSync72(source, "utf8");
152020
152190
  }
152021
152191
  const data = config.cms || config.data ? mergeDataResources(config) : void 0;
152022
152192
  const dataErrors = validateDataResources(data, loaded.name).filter((issue2) => issue2.severity === "error");
@@ -152204,9 +152374,9 @@ var init_cli_bridge = __esm({
152204
152374
  });
152205
152375
 
152206
152376
  // src/mcp/file-tools.ts
152207
- import { closeSync as closeSync6, constants as constants3, lstatSync as lstatSync20, mkdirSync as mkdirSync30, openSync as openSync5, readdirSync as readdirSync30, readFileSync as readFileSync72, realpathSync as realpathSync10, renameSync as renameSync11, rmSync as rmSync15, statSync as statSync16, writeSync, existsSync as existsSync63 } from "node:fs";
152377
+ import { closeSync as closeSync6, constants as constants3, lstatSync as lstatSync20, mkdirSync as mkdirSync30, openSync as openSync5, readdirSync as readdirSync30, readFileSync as readFileSync73, realpathSync as realpathSync10, renameSync as renameSync11, rmSync as rmSync15, statSync as statSync16, writeSync, existsSync as existsSync63 } from "node:fs";
152208
152378
  import { randomBytes as randomBytes4 } from "node:crypto";
152209
- import { dirname as dirname34, isAbsolute as isAbsolute7, join as join64, relative as relative13, resolve as resolve52, sep as sep17 } from "node:path";
152379
+ import { dirname as dirname34, isAbsolute as isAbsolute7, join as join65, relative as relative13, resolve as resolve52, sep as sep17 } from "node:path";
152210
152380
  import * as z2 from "zod";
152211
152381
  function within(root, p2) {
152212
152382
  return p2 === root || p2.startsWith(root.endsWith(sep17) ? root : root + sep17);
@@ -152220,12 +152390,12 @@ function realish(p2) {
152220
152390
  tail.unshift(cur.slice(up.length + (up.endsWith(sep17) ? 0 : 1)));
152221
152391
  cur = up;
152222
152392
  }
152223
- return join64(realpathSync10(cur), ...tail);
152393
+ return join65(realpathSync10(cur), ...tail);
152224
152394
  }
152225
152395
  function symlinkComponent(base, abs) {
152226
152396
  let cur = base;
152227
152397
  for (const part of relative13(base, abs).split(sep17).filter(Boolean)) {
152228
- cur = join64(cur, part);
152398
+ cur = join65(cur, part);
152229
152399
  try {
152230
152400
  if (lstatSync20(cur).isSymbolicLink()) return relative13(base, cur);
152231
152401
  } catch {
@@ -152252,7 +152422,7 @@ async function confinedAppDir(args, deps) {
152252
152422
  if (link) return refuse5("outside_workspace", `"${link}" is a symlink \u2014 the app folder must be a real folder in the workspace`);
152253
152423
  const rel = relative13(root, dir);
152254
152424
  if (rel && (isDeniedSourcePath(`${rel}/x`) || isDeniedSourcePath(`${rel.toLowerCase()}/x`))) return refuse5("denied", `"${rel}" is a folder this tool does not touch`);
152255
- if (!existsSync63(join64(dir, CONTENT_MARKER))) {
152425
+ if (!existsSync63(join65(dir, CONTENT_MARKER))) {
152256
152426
  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`);
152257
152427
  }
152258
152428
  return dir;
@@ -152266,7 +152436,7 @@ function onDiskSpelling(abs) {
152266
152436
  tail.unshift(cur.slice(up.length + (up.endsWith(sep17) ? 0 : 1)));
152267
152437
  cur = up;
152268
152438
  }
152269
- return join64(realpathSync10.native(cur), ...tail);
152439
+ return join65(realpathSync10.native(cur), ...tail);
152270
152440
  }
152271
152441
  function denied(appDir3, abs) {
152272
152442
  const rel = relative13(appDir3, abs);
@@ -152295,7 +152465,7 @@ function writeNoFollow2(appDir3, abs, content) {
152295
152465
  mkdirSync30(dirname34(abs), { recursive: true });
152296
152466
  const before = symlinkComponent(appDir3, abs);
152297
152467
  if (before) throw new Error(`"${before}" became a symlink`);
152298
- const tmp = join64(dirname34(abs), `.himi-write-${process.pid}-${randomBytes4(6).toString("hex")}.tmp`);
152468
+ const tmp = join65(dirname34(abs), `.himi-write-${process.pid}-${randomBytes4(6).toString("hex")}.tmp`);
152299
152469
  const fd = openSync5(tmp, constants3.O_WRONLY | constants3.O_CREAT | constants3.O_EXCL | (constants3.O_NOFOLLOW ?? 0), 420);
152300
152470
  try {
152301
152471
  writeSync(fd, content);
@@ -152315,7 +152485,7 @@ function listFiles(appDir3) {
152315
152485
  const parentRel = relative13(appDir3, d2);
152316
152486
  for (const e2 of readdirSync30(d2, { withFileTypes: true }).sort((a2, b2) => a2.name.localeCompare(b2.name))) {
152317
152487
  if (e2.isSymbolicLink()) continue;
152318
- const p2 = join64(d2, e2.name);
152488
+ const p2 = join65(d2, e2.name);
152319
152489
  if (e2.isDirectory()) {
152320
152490
  if (isDeniedSourceDir(e2.name, parentRel) || isDeniedSourceDir(e2.name.toLowerCase(), parentRel)) continue;
152321
152491
  if (!walk2(p2)) return false;
@@ -152343,9 +152513,9 @@ function fileTools() {
152343
152513
  const root = resolve52(await d2.defaultDir());
152344
152514
  if (!existsSync63(root)) return ok({ ok: true, workspace: root, apps: [] });
152345
152515
  const apps = [];
152346
- if (existsSync63(join64(root, CONTENT_MARKER))) apps.push(".");
152516
+ if (existsSync63(join65(root, CONTENT_MARKER))) apps.push(".");
152347
152517
  for (const e2 of readdirSync30(root, { withFileTypes: true })) {
152348
- if (e2.isDirectory() && !e2.name.startsWith(".") && existsSync63(join64(root, e2.name, CONTENT_MARKER))) apps.push(e2.name);
152518
+ if (e2.isDirectory() && !e2.name.startsWith(".") && existsSync63(join65(root, e2.name, CONTENT_MARKER))) apps.push(e2.name);
152349
152519
  }
152350
152520
  return ok({ ok: true, workspace: root, apps: apps.sort() });
152351
152521
  }
@@ -152377,7 +152547,7 @@ function fileTools() {
152377
152547
  if (!existsSync63(p2) || !lstatSync20(p2).isFile()) return refuse5("not_found", `no file "${String(a2.path)}"`);
152378
152548
  const size = statSync16(p2).size;
152379
152549
  if (size > MAX_FILE_BYTES) return refuse5("too_large", `"${String(a2.path)}" is ${size} bytes \u2014 over the ${MAX_FILE_BYTES}-byte read limit`);
152380
- return ok({ ok: true, path: a2.path, bytes: size, content: readFileSync72(p2, "utf8") });
152550
+ return ok({ ok: true, path: a2.path, bytes: size, content: readFileSync73(p2, "utf8") });
152381
152551
  }
152382
152552
  },
152383
152553
  {
@@ -152989,7 +153159,7 @@ __export(server_exports, {
152989
153159
  protectStdout: () => protectStdout,
152990
153160
  startMcpServer: () => startMcpServer
152991
153161
  });
152992
- import { mkdirSync as mkdirSync31, readFileSync as readFileSync73 } from "node:fs";
153162
+ import { mkdirSync as mkdirSync31, readFileSync as readFileSync74 } from "node:fs";
152993
153163
  import { fileURLToPath as fileURLToPath22 } from "node:url";
152994
153164
  import { McpServer } from "@modelcontextprotocol/server";
152995
153165
  import { serveStdio, StdioServerTransport } from "@modelcontextprotocol/server/stdio";
@@ -153049,7 +153219,7 @@ async function startMcpServer(opts) {
153049
153219
  status: (dir) => previewStatus(dir, previewDeps),
153050
153220
  stop: (dir) => stopPreview(dir, previewDeps)
153051
153221
  },
153052
- readFile: (p2) => readFileSync73(p2),
153222
+ readFile: (p2) => readFileSync74(p2),
153053
153223
  login: createLoginSession({ ...defaultLoginDeps, selfCommand: previewDeps.selfCommand, ...opts.login }),
153054
153224
  ...opts.workspace ? { workspaceBoundary: opts.workspace } : {}
153055
153225
  };
@@ -153093,9 +153263,9 @@ __export(native_decode_exports, {
153093
153263
  runNativeDecode: () => runNativeDecode
153094
153264
  });
153095
153265
  import { execFileSync as execFileSync5, spawnSync as spawnSync2 } from "node:child_process";
153096
- import { existsSync as existsSync64, mkdtempSync as mkdtempSync2, readFileSync as readFileSync74, rmSync as rmSync16, writeFileSync as writeFileSync27 } from "node:fs";
153266
+ import { existsSync as existsSync64, mkdtempSync as mkdtempSync2, readFileSync as readFileSync75, rmSync as rmSync16, writeFileSync as writeFileSync27 } from "node:fs";
153097
153267
  import { tmpdir as tmpdir3 } from "node:os";
153098
- import { join as join65 } from "node:path";
153268
+ import { join as join66 } from "node:path";
153099
153269
  import { fileURLToPath as fileURLToPath23 } from "node:url";
153100
153270
  function nativeDecodePackageDir() {
153101
153271
  return fileURLToPath23(new URL("../../../core/runtime/ios/HimalayaCore/", import.meta.url));
@@ -153105,8 +153275,8 @@ function nativeDecodeAndroidHarnessDir() {
153105
153275
  }
153106
153276
  function nativeOracleShipped() {
153107
153277
  return {
153108
- ios: existsSync64(join65(nativeDecodePackageDir(), "Package.swift")),
153109
- android: existsSync64(join65(nativeDecodeAndroidHarnessDir(), "gradlew"))
153278
+ ios: existsSync64(join66(nativeDecodePackageDir(), "Package.swift")),
153279
+ android: existsSync64(join66(nativeDecodeAndroidHarnessDir(), "gradlew"))
153110
153280
  };
153111
153281
  }
153112
153282
  function detectNativeDecode(options = {}) {
@@ -153117,7 +153287,7 @@ function detectNativeDecode(options = {}) {
153117
153287
  return { platform: "ios", available: false, reason: `the iOS decoder oracle requires macOS (darwin); this host is ${hostPlatform}` };
153118
153288
  }
153119
153289
  if (!swiftAvailable) return { platform: "ios", available: false, reason: "swift is not on PATH" };
153120
- const packageAvailable = options.packageAvailable ?? existsSync64(join65(packageDir, "Package.swift"));
153290
+ const packageAvailable = options.packageAvailable ?? existsSync64(join66(packageDir, "Package.swift"));
153121
153291
  if (!packageAvailable) {
153122
153292
  return {
153123
153293
  platform: "ios",
@@ -153129,7 +153299,7 @@ function detectNativeDecode(options = {}) {
153129
153299
  }
153130
153300
  function localPropertiesSdk(harnessDir) {
153131
153301
  try {
153132
- const match = readFileSync74(join65(harnessDir, "local.properties"), "utf8").match(/^sdk\.dir\s*=\s*(.+)$/m);
153302
+ const match = readFileSync75(join66(harnessDir, "local.properties"), "utf8").match(/^sdk\.dir\s*=\s*(.+)$/m);
153133
153303
  return match?.[1]?.trim().replace(/\\([ :\\])/g, "$1") ?? null;
153134
153304
  } catch {
153135
153305
  return null;
@@ -153137,7 +153307,7 @@ function localPropertiesSdk(harnessDir) {
153137
153307
  }
153138
153308
  function detectAndroidNativeDecode(options = {}) {
153139
153309
  const harnessDir = options.harnessDir ?? nativeDecodeAndroidHarnessDir();
153140
- const gradlew = join65(harnessDir, "gradlew");
153310
+ const gradlew = join66(harnessDir, "gradlew");
153141
153311
  const gradlewAvailable = options.gradlewAvailable ?? existsSync64(gradlew);
153142
153312
  if (!gradlewAvailable) {
153143
153313
  return {
@@ -153220,14 +153390,14 @@ function parseNativeDecodeOutput(stdout, expectedScreenIds, platform = "ios") {
153220
153390
  return verdicts;
153221
153391
  }
153222
153392
  function runNativeDecode(options) {
153223
- const descriptorDir = mkdtempSync2(join65(tmpdir3(), "himi-native-decode-"));
153393
+ const descriptorDir = mkdtempSync2(join66(tmpdir3(), "himi-native-decode-"));
153224
153394
  const startedAt = Date.now();
153225
153395
  try {
153226
153396
  for (const descriptor of options.descriptors) {
153227
153397
  if (typeof descriptor.descriptorJson !== "string") {
153228
153398
  throw new Error(`native decode cannot judge ${descriptor.screenId}: the release builder did not return its exact baked JSON bytes`);
153229
153399
  }
153230
- writeFileSync27(join65(descriptorDir, `${encodeURIComponent(descriptor.screenId)}.json`), descriptor.descriptorJson);
153400
+ writeFileSync27(join66(descriptorDir, `${encodeURIComponent(descriptor.screenId)}.json`), descriptor.descriptorJson);
153231
153401
  }
153232
153402
  options.progress?.("building cached Swift oracle");
153233
153403
  execFileSync5("swift", ["build", "--package-path", options.packageDir, "--product", "himi-decode-oracle"], {
@@ -153239,7 +153409,7 @@ function runNativeDecode(options) {
153239
153409
  encoding: "utf8"
153240
153410
  }).trim();
153241
153411
  options.progress?.(`running real Swift decoder over ${options.descriptors.length} screen${options.descriptors.length === 1 ? "" : "s"}`);
153242
- const stdout = execFileSync5(join65(binPath, "himi-decode-oracle"), ["--dir", descriptorDir], {
153412
+ const stdout = execFileSync5(join66(binPath, "himi-decode-oracle"), ["--dir", descriptorDir], {
153243
153413
  stdio: ["ignore", "pipe", "pipe"],
153244
153414
  encoding: "utf8"
153245
153415
  });
@@ -153257,15 +153427,15 @@ function runNativeDecode(options) {
153257
153427
  }
153258
153428
  }
153259
153429
  function runAndroidNativeDecode(options) {
153260
- const descriptorDir = mkdtempSync2(join65(tmpdir3(), "himi-native-decode-android-"));
153261
- const outputPath = join65(descriptorDir, "verdicts.ndjson");
153430
+ const descriptorDir = mkdtempSync2(join66(tmpdir3(), "himi-native-decode-android-"));
153431
+ const outputPath = join66(descriptorDir, "verdicts.ndjson");
153262
153432
  const startedAt = Date.now();
153263
153433
  try {
153264
153434
  for (const descriptor of options.descriptors) {
153265
153435
  if (typeof descriptor.descriptorJson !== "string") {
153266
153436
  throw new Error(`native decode cannot judge ${descriptor.screenId}: the release builder did not return its exact baked JSON bytes`);
153267
153437
  }
153268
- writeFileSync27(join65(descriptorDir, `${encodeURIComponent(descriptor.screenId)}.json`), descriptor.descriptorJson);
153438
+ writeFileSync27(join66(descriptorDir, `${encodeURIComponent(descriptor.screenId)}.json`), descriptor.descriptorJson);
153269
153439
  }
153270
153440
  options.progress?.(`running real Kotlin decoder over ${options.descriptors.length} screen${options.descriptors.length === 1 ? "" : "s"}`);
153271
153441
  execFileSync5(options.gradlew, [
@@ -153280,7 +153450,7 @@ function runAndroidNativeDecode(options) {
153280
153450
  stdio: ["ignore", "ignore", "pipe"],
153281
153451
  encoding: "utf8"
153282
153452
  });
153283
- const stdout = readFileSync74(outputPath, "utf8");
153453
+ const stdout = readFileSync75(outputPath, "utf8");
153284
153454
  return {
153285
153455
  platform: "android",
153286
153456
  verdicts: parseNativeDecodeOutput(stdout, options.descriptors.map((descriptor) => descriptor.screenId), "android"),
@@ -153350,13 +153520,13 @@ __export(browser_authoring_exports, {
153350
153520
  });
153351
153521
  import { createServer as createServer5 } from "node:http";
153352
153522
  import { createHash as createHash35, randomBytes as randomBytes5 } from "node:crypto";
153353
- import { existsSync as existsSync65, readdirSync as readdirSync31, readFileSync as readFileSync75, realpathSync as realpathSync11, statSync as statSync17 } from "node:fs";
153354
- import { join as join66, posix as posix3, relative as relative14, sep as sep18 } from "node:path";
153523
+ import { existsSync as existsSync65, readdirSync as readdirSync31, readFileSync as readFileSync76, realpathSync as realpathSync11, statSync as statSync17 } from "node:fs";
153524
+ import { join as join67, posix as posix3, relative as relative14, sep as sep18 } from "node:path";
153355
153525
  function humanMs(ms2) {
153356
153526
  return ms2 < 1e3 ? `${ms2}ms` : `${Math.round(ms2 / 1e3)}s`;
153357
153527
  }
153358
153528
  function collectWorkerSources(tier5SrcDir, bundleName) {
153359
- const root = join66(tier5SrcDir, bundleName);
153529
+ const root = join67(tier5SrcDir, bundleName);
153360
153530
  const files = {};
153361
153531
  const visitedDirs = /* @__PURE__ */ new Set();
153362
153532
  const walk2 = (abs, rel) => {
@@ -153364,12 +153534,12 @@ function collectWorkerSources(tier5SrcDir, bundleName) {
153364
153534
  if (visitedDirs.has(real)) return;
153365
153535
  visitedDirs.add(real);
153366
153536
  for (const name of readdirSync31(abs).sort()) {
153367
- const childAbs = join66(abs, name);
153537
+ const childAbs = join67(abs, name);
153368
153538
  const childRel = posix3.join(rel, name);
153369
153539
  if (statSync17(childAbs).isDirectory()) {
153370
153540
  walk2(childAbs, childRel);
153371
153541
  } else if (/\.(ts|tsx|js|mjs|json)$/.test(name)) {
153372
- files[childRel] = readFileSync75(childAbs, "utf8");
153542
+ files[childRel] = readFileSync76(childAbs, "utf8");
153373
153543
  }
153374
153544
  }
153375
153545
  };
@@ -153390,20 +153560,20 @@ function collectRelativeSiblings(files, tier5SrcDir) {
153390
153560
  const spec = m2[1];
153391
153561
  const virtual = posix3.normalize(posix3.join(dir, spec));
153392
153562
  if (!virtual.startsWith("/tier5-src/")) continue;
153393
- const onDisk = join66(tier5SrcDir, virtual.slice("/tier5-src/".length));
153563
+ const onDisk = join67(tier5SrcDir, virtual.slice("/tier5-src/".length));
153394
153564
  const candidates = [
153395
153565
  onDisk,
153396
153566
  `${onDisk}.ts`,
153397
153567
  `${onDisk}.js`,
153398
153568
  onDisk.replace(/\.js$/, ".ts"),
153399
- join66(onDisk, "index.ts"),
153400
- join66(onDisk, "index.js")
153569
+ join67(onDisk, "index.ts"),
153570
+ join67(onDisk, "index.js")
153401
153571
  ];
153402
153572
  for (const abs of candidates) {
153403
153573
  if (!existsSync65(abs) || statSync17(abs).isDirectory()) continue;
153404
153574
  const key2 = `/tier5-src/${relative14(tier5SrcDir, abs).split(sep18).join(posix3.sep)}`;
153405
153575
  if (key2 in files) break;
153406
- files[key2] = readFileSync75(abs, "utf8");
153576
+ files[key2] = readFileSync76(abs, "utf8");
153407
153577
  queue.push(key2);
153408
153578
  break;
153409
153579
  }
@@ -153438,7 +153608,7 @@ function collectSdkModules(files, resolveSubpath) {
153438
153608
  function sdkSubpathReader(resolve61) {
153439
153609
  return (sub) => {
153440
153610
  try {
153441
- return readFileSync75(resolve61(`@wix/himalaya/${sub}`), "utf8");
153611
+ return readFileSync76(resolve61(`@wix/himalaya/${sub}`), "utf8");
153442
153612
  } catch {
153443
153613
  return null;
153444
153614
  }
@@ -153610,8 +153780,8 @@ __export(coverage_exports, {
153610
153780
  suppressedNativeKeys: () => suppressedNativeKeys,
153611
153781
  trendAndStore: () => trendAndStore
153612
153782
  });
153613
- import { existsSync as existsSync66, mkdirSync as mkdirSync32, readFileSync as readFileSync76, writeFileSync as writeFileSync28 } from "node:fs";
153614
- import { dirname as dirname35, join as join67 } from "node:path";
153783
+ import { existsSync as existsSync66, mkdirSync as mkdirSync32, readFileSync as readFileSync77, writeFileSync as writeFileSync28 } from "node:fs";
153784
+ import { dirname as dirname35, join as join68 } from "node:path";
153615
153785
  function suppressedNativeKeys(oracle) {
153616
153786
  return [...oracle.ios ? [] : ["native-decode|ios"], ...oracle.android ? [] : ["native-decode|android"]];
153617
153787
  }
@@ -153791,11 +153961,11 @@ function assembleLedger(r2, options = {}) {
153791
153961
  return out2;
153792
153962
  }
153793
153963
  function trendAndStore(dir, entries, suppressed) {
153794
- const p2 = join67(dir, LEDGER_FILE);
153964
+ const p2 = join68(dir, LEDGER_FILE);
153795
153965
  let previous = null;
153796
153966
  try {
153797
153967
  if (existsSync66(p2)) {
153798
- const parsed = JSON.parse(readFileSync76(p2, "utf8"));
153968
+ const parsed = JSON.parse(readFileSync77(p2, "utf8"));
153799
153969
  if (Array.isArray(parsed.keys)) previous = parsed.keys.filter((k2) => typeof k2 === "string");
153800
153970
  }
153801
153971
  } catch {
@@ -153834,11 +154004,11 @@ function formatLedger(entries, trend) {
153834
154004
  return out2.join("\n");
153835
154005
  }
153836
154006
  function diffAndStoreObservations(dir, current) {
153837
- const p2 = join67(dir, OBS_FILE);
154007
+ const p2 = join68(dir, OBS_FILE);
153838
154008
  let previous = null;
153839
154009
  try {
153840
154010
  if (existsSync66(p2)) {
153841
- const parsed = JSON.parse(readFileSync76(p2, "utf8"));
154011
+ const parsed = JSON.parse(readFileSync77(p2, "utf8"));
153842
154012
  if (parsed.screens && typeof parsed.screens === "object" && !Array.isArray(parsed.screens) && Object.values(parsed.screens).every(
153843
154013
  (v2) => Array.isArray(v2) && v2.every((l2) => typeof l2 === "string")
153844
154014
  )) {
@@ -153887,8 +154057,8 @@ var LEDGER_FILE, OBS_FILE;
153887
154057
  var init_coverage = __esm({
153888
154058
  "src/coverage.ts"() {
153889
154059
  init_native_decode();
153890
- LEDGER_FILE = join67(".himi", "test-ledger.json");
153891
- OBS_FILE = join67(".himi", "test-observations.json");
154060
+ LEDGER_FILE = join68(".himi", "test-ledger.json");
154061
+ OBS_FILE = join68(".himi", "test-observations.json");
153892
154062
  }
153893
154063
  });
153894
154064
 
@@ -153899,8 +154069,8 @@ __export(design_kits_exports, {
153899
154069
  kitsDir: () => kitsDir,
153900
154070
  listKits: () => listKits2
153901
154071
  });
153902
- import { existsSync as existsSync67, readFileSync as readFileSync77, readdirSync as readdirSync32 } from "node:fs";
153903
- import { join as join68, basename as basename16 } from "node:path";
154072
+ import { existsSync as existsSync67, readFileSync as readFileSync78, readdirSync as readdirSync32 } from "node:fs";
154073
+ import { join as join69, basename as basename16 } from "node:path";
153904
154074
  import { fileURLToPath as fileURLToPath24 } from "node:url";
153905
154075
  function kitsDir() {
153906
154076
  return KIT_DIR_CANDIDATES.find((p2) => existsSync67(p2));
@@ -153927,7 +154097,7 @@ In a published @wix/himalaya-cli this is a packaging bug \u2014 the kits should
153927
154097
  if (!kits.includes(name)) {
153928
154098
  return { ok: false, kit: name, kits, problems: [`no design kit named "${name}". Available: ${kits.join(", ")}`] };
153929
154099
  }
153930
- const raw = readFileSync77(join68(dir, `${name}.json`), "utf8");
154100
+ const raw = readFileSync78(join69(dir, `${name}.json`), "utf8");
153931
154101
  let parsed;
153932
154102
  try {
153933
154103
  parsed = JSON.parse(raw);
@@ -153951,9 +154121,9 @@ var init_design_kits = __esm({
153951
154121
  "src/design-kits.ts"() {
153952
154122
  KIT_DIR_CANDIDATES = [
153953
154123
  // in-repo: tools/himi-cli/src/design-kits.ts → <repo>/stdlib/design-kits/
153954
- join68(fileURLToPath24(new URL("../../..", import.meta.url)), "stdlib", "design-kits"),
154124
+ join69(fileURLToPath24(new URL("../../..", import.meta.url)), "stdlib", "design-kits"),
153955
154125
  // published CLI: <pkg>/dist/cli.mjs → <pkg>/stdlib/design-kits/
153956
- join68(fileURLToPath24(new URL("..", import.meta.url)), "stdlib", "design-kits")
154126
+ join69(fileURLToPath24(new URL("..", import.meta.url)), "stdlib", "design-kits")
153957
154127
  ];
153958
154128
  }
153959
154129
  });
@@ -153967,11 +154137,11 @@ __export(assets_exports, {
153967
154137
  removeAssetPayload: () => removeAssetPayload,
153968
154138
  verifyReport: () => verifyReport
153969
154139
  });
153970
- import { readFileSync as readFileSync78 } from "node:fs";
154140
+ import { readFileSync as readFileSync79 } from "node:fs";
153971
154141
  import { basename as basename17 } from "node:path";
153972
154142
  function declaredAssets(dir) {
153973
154143
  return collectAssets(dir).map((a2) => {
153974
- const bytes2 = readFileSync78(a2.path);
154144
+ const bytes2 = readFileSync79(a2.path);
153975
154145
  return {
153976
154146
  name: a2.name,
153977
154147
  sha256: assetSha256(bytes2),
@@ -154048,7 +154218,7 @@ function verifyReport(dir, app, manifest) {
154048
154218
  };
154049
154219
  }
154050
154220
  function addAssetPayload(manifest, filePath, opts) {
154051
- const bytes2 = readFileSync78(filePath);
154221
+ const bytes2 = readFileSync79(filePath);
154052
154222
  const name = opts.name ?? basename17(filePath);
154053
154223
  const sha2566 = assetSha256(bytes2);
154054
154224
  const record2 = {
@@ -155803,25 +155973,25 @@ var init_preview_assets_generated = __esm({
155803
155973
  "../../packages/serve/src/preview-assets.generated.ts"() {
155804
155974
  init_preview_assets_format();
155805
155975
  PREVIEW_ASSET_MANIFEST = [
155806
- { key: "assets/index-BIlXpj1h.js", contentType: "application/javascript; charset=utf-8", offset: 8, length: 1257735, sha256: "6d808a71fd48dfe402d9cdace4e2a6ce1a8d686068d1812eb08ef418f2284533" },
155807
- { key: "assets/pdf-DKCzctsR.js", contentType: "application/javascript; charset=utf-8", offset: 1257743, length: 488199, sha256: "580e24333dcc9b041e8720577be50a8da5a50800f4d5e948e28edf9c8dd7d9e0" },
155808
- { key: "assets/pdf.worker.min-BQa_JDET.js", contentType: "application/javascript; charset=utf-8", offset: 1745942, length: 73, sha256: "41bcfda4f3c8c0a81c785ea87c69afc8e7d0ed8c333324aee94c273d881bb6aa" },
155809
- { key: "assets/pdf.worker.min-BmVo14Nb.mjs", contentType: "application/javascript; charset=utf-8", offset: 1746015, length: 1317034, sha256: "a33cfe728c584fdba4fcc1fd54bcdc2f9f2f13889ddbb5b2bd1d0f8cbe49b84e" },
155810
- { key: "assets/pdfDocument-DCdoA9nd.js", contentType: "application/javascript; charset=utf-8", offset: 3063049, length: 2858, sha256: "ea99eb8d79920cd5c7ca2c83faa495c5287ff04d1c96bbfe3d034b8925075ad2" },
155811
- { key: "fonts/Roboto-LICENSE.txt", contentType: "application/octet-stream", offset: 3065907, length: 4610, sha256: "994062dd7af4186a739de55dd9e151c63b6301f8e2cbafc608d35c2e87da0cd2" },
155812
- { key: "fonts/Roboto-Variable.ttf", contentType: "font/ttf", offset: 3070517, length: 488584, sha256: "d7598e12c5dbef095ff8272cfc55da0250bd07fbdecbac8a530b9b277872a134" },
155813
- { key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset: 3559101, length: 90924, sha256: "ec4c7d63772d980d6e147b2df6215fd2737e4b04cebe0cf7e11dc695fb63cdcf" },
155814
- { key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset: 3650025, length: 90984, sha256: "bf4c16a2774edd38a921edf3099469866cd74c094fd596f3fa4e81f54a04dfaa" },
155815
- { key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset: 3741009, length: 90980, sha256: "368faca44fb9f7207e4af784e94750b1ee59c1098b8689e0f4a918926f244fb5" },
155816
- { key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset: 3831989, length: 90872, sha256: "97ed8f1a6772abe26e3d8af5cecfc4b02faa94497d585b0398b5053b739a70c1" },
155817
- { key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset: 3922861, length: 90980, sha256: "642feab8a48ddf6c7a89d7c2a7c0edfa0e6e773f671287e460e222703563191e" },
155818
- { key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset: 4013841, length: 108636, sha256: "37c179b4fefb63ea9637322b84583a2df53aa226c150294eea1675c14b1b8e29" },
155819
- { key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset: 4122477, length: 109084, sha256: "62e2fe4718129f36ecdb0ae4de385bd6b81ecc876146447167c6c140fad699a9" },
155820
- { key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset: 4231561, length: 109048, sha256: "4ecf270136af928612c76fe4ebade91d8156975e5ea4c0cf9225501dd1788e02" },
155821
- { key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset: 4340609, length: 107700, sha256: "dee56f09fd3efc127c1ea95557edc74110c1460a46287da36e0af25efd341ef5" },
155822
- { key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset: 4448309, length: 88108, sha256: "dced97a77624bc5f8b1ae65850360908297f4588e09feb6f22792d29dc7e765b" },
155823
- { key: "index.html", contentType: "text/html; charset=utf-8", offset: 4536417, length: 4947, sha256: "31a68c99003ad579052a0dccccfa5d861146fe209bbc6ea0c264162026d7b35f" },
155824
- { key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset: 4541364, length: 17344, sha256: "d057298d75e7373e5e2c4d11b7d1bcbea88e03af555ba63d97641c78509c58e4" }
155976
+ { key: "assets/index-CJyExZmR.js", contentType: "application/javascript; charset=utf-8", offset: 8, length: 1267377, sha256: "23b413452a6e70028fb774416f3f4b9bf13ee3a8cebbb190a40b093ebe35b317" },
155977
+ { key: "assets/pdf-QU1lIzr-.js", contentType: "application/javascript; charset=utf-8", offset: 1267385, length: 488199, sha256: "337584d4ea08ba90a996f31eb8f2ca7c903ebadf9460770b940c07d07765d350" },
155978
+ { key: "assets/pdf.worker.min-BQa_JDET.js", contentType: "application/javascript; charset=utf-8", offset: 1755584, length: 73, sha256: "41bcfda4f3c8c0a81c785ea87c69afc8e7d0ed8c333324aee94c273d881bb6aa" },
155979
+ { key: "assets/pdf.worker.min-BmVo14Nb.mjs", contentType: "application/javascript; charset=utf-8", offset: 1755657, length: 1317034, sha256: "a33cfe728c584fdba4fcc1fd54bcdc2f9f2f13889ddbb5b2bd1d0f8cbe49b84e" },
155980
+ { key: "assets/pdfDocument-B-0h9-5Z.js", contentType: "application/javascript; charset=utf-8", offset: 3072691, length: 2858, sha256: "2e074889c84270b40b4b4788861ee57871f825c4eb5a502662491dfe43756439" },
155981
+ { key: "fonts/Roboto-LICENSE.txt", contentType: "application/octet-stream", offset: 3075549, length: 4610, sha256: "994062dd7af4186a739de55dd9e151c63b6301f8e2cbafc608d35c2e87da0cd2" },
155982
+ { key: "fonts/Roboto-Variable.ttf", contentType: "font/ttf", offset: 3080159, length: 488584, sha256: "d7598e12c5dbef095ff8272cfc55da0250bd07fbdecbac8a530b9b277872a134" },
155983
+ { key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset: 3568743, length: 90924, sha256: "ec4c7d63772d980d6e147b2df6215fd2737e4b04cebe0cf7e11dc695fb63cdcf" },
155984
+ { key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset: 3659667, length: 90984, sha256: "bf4c16a2774edd38a921edf3099469866cd74c094fd596f3fa4e81f54a04dfaa" },
155985
+ { key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset: 3750651, length: 90980, sha256: "368faca44fb9f7207e4af784e94750b1ee59c1098b8689e0f4a918926f244fb5" },
155986
+ { key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset: 3841631, length: 90872, sha256: "97ed8f1a6772abe26e3d8af5cecfc4b02faa94497d585b0398b5053b739a70c1" },
155987
+ { key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset: 3932503, length: 90980, sha256: "642feab8a48ddf6c7a89d7c2a7c0edfa0e6e773f671287e460e222703563191e" },
155988
+ { key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset: 4023483, length: 108636, sha256: "37c179b4fefb63ea9637322b84583a2df53aa226c150294eea1675c14b1b8e29" },
155989
+ { key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset: 4132119, length: 109084, sha256: "62e2fe4718129f36ecdb0ae4de385bd6b81ecc876146447167c6c140fad699a9" },
155990
+ { key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset: 4241203, length: 109048, sha256: "4ecf270136af928612c76fe4ebade91d8156975e5ea4c0cf9225501dd1788e02" },
155991
+ { key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset: 4350251, length: 107700, sha256: "dee56f09fd3efc127c1ea95557edc74110c1460a46287da36e0af25efd341ef5" },
155992
+ { key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset: 4457951, length: 88108, sha256: "dced97a77624bc5f8b1ae65850360908297f4588e09feb6f22792d29dc7e765b" },
155993
+ { key: "index.html", contentType: "text/html; charset=utf-8", offset: 4546059, length: 4947, sha256: "74acaa1d5ec20a866e7617de37033e3f3147a56814f0f73f445fa8e1bd570ea0" },
155994
+ { key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset: 4551006, length: 17344, sha256: "d057298d75e7373e5e2c4d11b7d1bcbea88e03af555ba63d97641c78509c58e4" }
155825
155995
  ];
155826
155996
  }
155827
155997
  });
@@ -155839,9 +156009,9 @@ __export(run_exports, {
155839
156009
  runPackage: () => runPackage,
155840
156010
  withoutProdServe: () => withoutProdServe
155841
156011
  });
155842
- import { cpSync as cpSync2, existsSync as existsSync68, mkdirSync as mkdirSync33, mkdtempSync as mkdtempSync3, readFileSync as readFileSync79, rmSync as rmSync17, statSync as statSync18 } from "node:fs";
156012
+ import { cpSync as cpSync2, existsSync as existsSync68, mkdirSync as mkdirSync33, mkdtempSync as mkdtempSync3, readFileSync as readFileSync80, rmSync as rmSync17, statSync as statSync18 } from "node:fs";
155843
156013
  import { networkInterfaces as osNetworkInterfaces, tmpdir as tmpdir4 } from "node:os";
155844
- import { dirname as dirname36, join as join69 } from "node:path";
156014
+ import { dirname as dirname36, join as join70 } from "node:path";
155845
156015
  import { fileURLToPath as fileURLToPath25 } from "node:url";
155846
156016
  function makePackageRunHandler(opts) {
155847
156017
  const store = new FileReleaseStore(opts.releaseRoot);
@@ -155870,7 +156040,7 @@ async function fetchBytes(url) {
155870
156040
  async function resolvePackage(source, workDir) {
155871
156041
  const isUrl2 = /^https?:\/\//i.test(source);
155872
156042
  if (!isUrl2 && existsSync68(source) && statSync18(source).isDirectory()) {
155873
- const appDirManifest = join69(source, "release-manifest.json");
156043
+ const appDirManifest = join70(source, "release-manifest.json");
155874
156044
  if (existsSync68(appDirManifest)) {
155875
156045
  const opened2 = openPackageDir(source);
155876
156046
  if (!opened2.validation.ok) {
@@ -155880,9 +156050,9 @@ async function resolvePackage(source, workDir) {
155880
156050
  const app2 = opened2.header?.app ?? opened2.manifest?.app;
155881
156051
  if (!app2) throw new Error(`${source} has no app id (no himi-package.json and no manifest.app)`);
155882
156052
  if (!isSafeAppId(app2)) throw new Error(`${source} declares an unsafe app id ${JSON.stringify(app2)} \u2014 refusing to open it`);
155883
- const root2 = workDir ?? mkdtempSync3(join69(tmpdir4(), "himi-run-"));
155884
- const target = join69(root2, app2);
155885
- if (join69(source) !== target) {
156053
+ const root2 = workDir ?? mkdtempSync3(join70(tmpdir4(), "himi-run-"));
156054
+ const target = join70(root2, app2);
156055
+ if (join70(source) !== target) {
155886
156056
  mkdirSync33(root2, { recursive: true });
155887
156057
  rmSync17(target, { recursive: true, force: true });
155888
156058
  cpSync2(source, target, { recursive: true });
@@ -155899,8 +156069,8 @@ async function resolvePackage(source, workDir) {
155899
156069
  }
155900
156070
  throw new Error(`${source} is a directory but has no release-manifest.json \u2014 is it a package?`);
155901
156071
  }
155902
- const bytes2 = isUrl2 ? await fetchBytes(source) : readFileSync79(source);
155903
- const root = workDir ?? mkdtempSync3(join69(tmpdir4(), "himi-run-"));
156072
+ const bytes2 = isUrl2 ? await fetchBytes(source) : readFileSync80(source);
156073
+ const root = workDir ?? mkdtempSync3(join70(tmpdir4(), "himi-run-"));
155904
156074
  const { app, appDir: appDir3 } = unpackTo(bytes2, root);
155905
156075
  const opened = openPackageDir(appDir3);
155906
156076
  if (!opened.validation.ok) {
@@ -155923,14 +156093,14 @@ async function loadPreviewAssets() {
155923
156093
  const mod = await Promise.resolve().then(() => (init_preview_assets_generated(), preview_assets_generated_exports));
155924
156094
  const here = dirname36(fileURLToPath25(import.meta.url));
155925
156095
  const candidates = [
155926
- join69(here, "preview-assets.generated.bin"),
156096
+ join70(here, "preview-assets.generated.bin"),
155927
156097
  // published: copied next to the bundled CLI
155928
- join69(here, "../../../packages/serve/src/preview-assets.generated.bin")
156098
+ join70(here, "../../../packages/serve/src/preview-assets.generated.bin")
155929
156099
  // in-repo checkout
155930
156100
  ];
155931
156101
  for (const path2 of candidates) {
155932
156102
  if (!existsSync68(path2)) continue;
155933
- const blob = readFileSync79(path2);
156103
+ const blob = readFileSync80(path2);
155934
156104
  return mod.assemblePreviewAssetsFromBlob(new Uint8Array(blob.buffer, blob.byteOffset, blob.byteLength));
155935
156105
  }
155936
156106
  return /* @__PURE__ */ new Map();
@@ -156067,7 +156237,7 @@ __export(run_browser_exports, {
156067
156237
  runInBrowser: () => runInBrowser
156068
156238
  });
156069
156239
  import { createServer as createServer7 } from "node:http";
156070
- import { existsSync as existsSync69, readFileSync as readFileSync80 } from "node:fs";
156240
+ import { existsSync as existsSync69, readFileSync as readFileSync81 } from "node:fs";
156071
156241
  import { spawnSync as spawnSync3 } from "node:child_process";
156072
156242
  import { dirname as dirname37, resolve as resolve54 } from "node:path";
156073
156243
  import { fileURLToPath as fileURLToPath26 } from "node:url";
@@ -156175,7 +156345,7 @@ async function runInBrowser(releaseRoot, app, header, opts = {}) {
156175
156345
  }
156176
156346
  let bytes2;
156177
156347
  try {
156178
- bytes2 = readFileSync80(resolve54(stagedDir(), name));
156348
+ bytes2 = readFileSync81(resolve54(stagedDir(), name));
156179
156349
  } catch (e2) {
156180
156350
  res.writeHead(503, { "content-type": "application/json" });
156181
156351
  res.end(JSON.stringify({ error: "browser_plane_unstaged", file: name, detail: String(e2) }));
@@ -156228,14 +156398,14 @@ var hhp_preview_exports = {};
156228
156398
  __export(hhp_preview_exports, {
156229
156399
  hhpPreviewResponse: () => hhpPreviewResponse
156230
156400
  });
156231
- import { existsSync as existsSync70, readFileSync as readFileSync81 } from "node:fs";
156232
- import { join as join70 } from "node:path";
156401
+ import { existsSync as existsSync70, readFileSync as readFileSync82 } from "node:fs";
156402
+ import { join as join71 } from "node:path";
156233
156403
  function hhpPreviewResponse(root, request) {
156234
- if (new URL(request.url).pathname !== "/__himi/hhp-preview" || !existsSync70(join70(root, "hhp.json"))) return null;
156404
+ if (new URL(request.url).pathname !== "/__himi/hhp-preview" || !existsSync70(join71(root, "hhp.json"))) return null;
156235
156405
  if (request.method !== "GET") return new Response(null, { status: 405 });
156236
156406
  try {
156237
156407
  const file2 = localPath(root, ".himi/hhp-preview.json");
156238
- const authored2 = existsSync70(file2) ? JSON.parse(readFileSync81(file2, "utf8")) : {};
156408
+ const authored2 = existsSync70(file2) ? JSON.parse(readFileSync82(file2, "utf8")) : {};
156239
156409
  if (authored2.mockCapabilities && (!Array.isArray(authored2.mockCapabilities) || authored2.mockCapabilities.some((v2) => typeof v2 !== "string"))) throw new Error("mockCapabilities must be a string array.");
156240
156410
  const fixtures = authored2.fixtures ?? {};
156241
156411
  if (typeof fixtures !== "object" || Array.isArray(fixtures) || fixtures === null) throw new Error("fixtures must be an object.");
@@ -156385,7 +156555,7 @@ var init_embedded_bundles = __esm({
156385
156555
  });
156386
156556
 
156387
156557
  // ../store-release/register-bundle.ts
156388
- import { readFileSync as readFileSync82 } from "node:fs";
156558
+ import { readFileSync as readFileSync83 } from "node:fs";
156389
156559
  import { createPrivateKey as createPrivateKey4, sign as sign2 } from "node:crypto";
156390
156560
  function b64url2(b2) {
156391
156561
  return Buffer.from(b2).toString("base64").replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
@@ -156403,7 +156573,7 @@ function bundleIdBody(identifier, name, platform = "IOS") {
156403
156573
  async function registerBundleId(opts) {
156404
156574
  const env = requireEnv(["ASC_KEY_ID", "ASC_ISSUER_ID", "ASC_KEY_PATH"]);
156405
156575
  assertCredentialOutsideRepo("ASC_KEY_PATH", env.ASC_KEY_PATH);
156406
- const jwt = ascJwt(env.ASC_KEY_ID, env.ASC_ISSUER_ID, readFileSync82(env.ASC_KEY_PATH, "utf8"), Math.floor(Date.now() / 1e3));
156576
+ const jwt = ascJwt(env.ASC_KEY_ID, env.ASC_ISSUER_ID, readFileSync83(env.ASC_KEY_PATH, "utf8"), Math.floor(Date.now() / 1e3));
156407
156577
  const res = await fetch(`${ASC_API}/v1/bundleIds`, {
156408
156578
  method: "POST",
156409
156579
  headers: { Authorization: `Bearer ${jwt}`, "Content-Type": "application/json" },
@@ -156433,7 +156603,7 @@ async function main() {
156433
156603
  }
156434
156604
  const ni2 = rest.indexOf("--name");
156435
156605
  const name = ni2 >= 0 ? rest[ni2 + 1] : cfg.app ?? app;
156436
- const yml = readFileSync82(iosProjectYml(app), "utf8");
156606
+ const yml = readFileSync83(iosProjectYml(app), "utf8");
156437
156607
  for (const { id, label: label2 } of [{ id: identifier, label: name }, ...embeddedBundles(yml).map((b2) => ({
156438
156608
  id: embeddedBundleId(identifier, b2),
156439
156609
  label: `${name} ${embeddedAppIdLabel(b2)}`
@@ -157842,19 +158012,19 @@ __export(credential_profile_exports, {
157842
158012
  profilePath: () => profilePath,
157843
158013
  resolveStoreCredentials: () => resolveStoreCredentials
157844
158014
  });
157845
- import { existsSync as existsSync71, readFileSync as readFileSync83 } from "node:fs";
158015
+ import { existsSync as existsSync71, readFileSync as readFileSync84 } from "node:fs";
157846
158016
  import { homedir as homedir6 } from "node:os";
157847
- import { join as join71 } from "node:path";
158017
+ import { join as join72 } from "node:path";
157848
158018
  function credentialsDir(home = homedir6()) {
157849
- return join71(home, ".himalaya", "store-credentials");
158019
+ return join72(home, ".himalaya", "store-credentials");
157850
158020
  }
157851
158021
  function profilePath(name, home = homedir6()) {
157852
158022
  if (!PROFILE_NAME.test(name)) {
157853
158023
  throw new Error(
157854
- `credential profile ${JSON.stringify(name)} is not a profile name \u2014 use letters, digits, ".", "_" or "-" starting with a letter or digit. It names ${join71(credentialsDir(home), "<name>.json")}; it is never a path.`
158024
+ `credential profile ${JSON.stringify(name)} is not a profile name \u2014 use letters, digits, ".", "_" or "-" starting with a letter or digit. It names ${join72(credentialsDir(home), "<name>.json")}; it is never a path.`
157855
158025
  );
157856
158026
  }
157857
- return join71(credentialsDir(home), `${name}.json`);
158027
+ return join72(credentialsDir(home), `${name}.json`);
157858
158028
  }
157859
158029
  function parseProfile(text9, label2) {
157860
158030
  let doc;
@@ -157885,7 +158055,7 @@ function resolveStoreCredentials(opts) {
157885
158055
  const { app, cfg } = opts;
157886
158056
  const env = opts.env ?? process.env;
157887
158057
  const home = opts.home ?? homedir6();
157888
- const read = opts.readProfile ?? ((p2) => readFileSync83(p2, "utf8"));
158058
+ const read = opts.readProfile ?? ((p2) => readFileSync84(p2, "utf8"));
157889
158059
  const exists = opts.profileExists ?? existsSync71;
157890
158060
  const ios = cfg.ios ?? {};
157891
158061
  const flagName = opts.profileFlag?.trim();
@@ -157952,7 +158122,7 @@ var init_credential_profile = __esm({
157952
158122
 
157953
158123
  // ../store-release/iap-credentials.ts
157954
158124
  import { createHash as createHash37 } from "node:crypto";
157955
- import { existsSync as existsSync72, readFileSync as readFileSync84, realpathSync as realpathSync12 } from "node:fs";
158125
+ import { existsSync as existsSync72, readFileSync as readFileSync85, realpathSync as realpathSync12 } from "node:fs";
157956
158126
  import { homedir as homedir7 } from "node:os";
157957
158127
  function accountFingerprint(keyId, issuerId) {
157958
158128
  return `sha256:${createHash37("sha256").update(`${issuerId}:${keyId}`).digest("hex").slice(0, 16)}`;
@@ -157986,7 +158156,7 @@ function canonicalKeyPath(path2, profile, realpath) {
157986
158156
  function resolveIapCredentials(options) {
157987
158157
  const { target } = options;
157988
158158
  const home = options.home ?? homedir7();
157989
- const readFile3 = options.readFile ?? ((p2) => readFileSync84(p2, "utf8"));
158159
+ const readFile3 = options.readFile ?? ((p2) => readFileSync85(p2, "utf8"));
157990
158160
  const realpath = options.realpath ?? realpathSync12;
157991
158161
  const profile = requireExplicitProfile(options.profileFlag, target);
157992
158162
  const creds = resolveStoreCredentials({
@@ -158307,7 +158477,7 @@ __export(version_exports, {
158307
158477
  stampTargetVersion: () => stampTargetVersion,
158308
158478
  stampVersionKeys: () => stampVersionKeys
158309
158479
  });
158310
- import { readFileSync as readFileSync85, writeFileSync as writeFileSync29 } from "node:fs";
158480
+ import { readFileSync as readFileSync86, writeFileSync as writeFileSync29 } from "node:fs";
158311
158481
  function readIosVersion(projectYml) {
158312
158482
  const marketing = matchScalar(projectYml, "CFBundleShortVersionString");
158313
158483
  const build3 = matchScalar(projectYml, "CFBundleVersion");
@@ -158454,8 +158624,8 @@ function setAndroidVersion(gradle, v2) {
158454
158624
  function bumpVersion(app, opts) {
158455
158625
  const iosPath = iosProjectYml(app);
158456
158626
  const gradlePath = androidGradle(app);
158457
- const iosYml = readFileSync85(iosPath, "utf8");
158458
- const gradle = readFileSync85(gradlePath, "utf8");
158627
+ const iosYml = readFileSync86(iosPath, "utf8");
158628
+ const gradle = readFileSync86(gradlePath, "utf8");
158459
158629
  const current = readIosVersion(iosYml);
158460
158630
  const next = {
158461
158631
  marketing: opts.marketing ?? current.marketing,
@@ -158485,8 +158655,8 @@ var init_store_spec = __esm({
158485
158655
  });
158486
158656
 
158487
158657
  // src/iap-config-edit.ts
158488
- import { existsSync as existsSync73, readFileSync as readFileSync86 } from "node:fs";
158489
- import { basename as basename18, join as join72 } from "node:path";
158658
+ import { existsSync as existsSync73, readFileSync as readFileSync87 } from "node:fs";
158659
+ import { basename as basename18, join as join73 } from "node:path";
158490
158660
  import ts8 from "typescript";
158491
158661
  function bindPurchasesAppInConfig(source, options) {
158492
158662
  const fileName = options.fileName ?? "config.ts";
@@ -158565,16 +158735,16 @@ function capabilityFinding(app, fileName) {
158565
158735
  }
158566
158736
  function withStoreBundle(dir, options) {
158567
158737
  if (options.storeBundleId) return options;
158568
- const path2 = join72(dir, "store", "store.config.yaml");
158738
+ const path2 = join73(dir, "store", "store.config.yaml");
158569
158739
  if (!existsSync73(path2)) return options;
158570
- const storeBundleId = parseStoreConfig(readFileSync86(path2, "utf8")).ios?.bundleId;
158740
+ const storeBundleId = parseStoreConfig(readFileSync87(path2, "utf8")).ios?.bundleId;
158571
158741
  return storeBundleId ? { ...options, storeBundleId } : options;
158572
158742
  }
158573
158743
  function previewIapConfigEdit(dir, options) {
158574
158744
  const path2 = configEntry(dir);
158575
158745
  if (!path2) return void 0;
158576
158746
  if (isSymlink2(path2)) return { path: path2, changed: false, applied: [], conflicts: [], instructions: [`${basename18(path2)} is a symlink, so it would not be edited: add the purchases app in the file it points to.`] };
158577
- const { changed, applied, conflicts, instructions } = bindPurchasesAppInConfig(readFileSync86(path2, "utf8"), { ...withStoreBundle(dir, options), fileName: basename18(path2) });
158747
+ const { changed, applied, conflicts, instructions } = bindPurchasesAppInConfig(readFileSync87(path2, "utf8"), { ...withStoreBundle(dir, options), fileName: basename18(path2) });
158578
158748
  return { path: path2, changed, applied, conflicts, instructions };
158579
158749
  }
158580
158750
  async function applyIapConfigEdit(dir, options, validate4) {
@@ -158583,7 +158753,7 @@ async function applyIapConfigEdit(dir, options, validate4) {
158583
158753
  const fileName = basename18(path2);
158584
158754
  const refuse7 = (why) => ({ path: path2, changed: false, applied: [], conflicts: [], instructions: [why] });
158585
158755
  if (isSymlink2(path2)) return refuse7(`${fileName} is a symlink, so it was not edited: add the purchases app in the file it points to.`);
158586
- const original = readFileSync86(path2, "utf8");
158756
+ const original = readFileSync87(path2, "utf8");
158587
158757
  const edit = bindPurchasesAppInConfig(original, { ...withStoreBundle(dir, options), fileName });
158588
158758
  const { applied, conflicts, instructions } = edit;
158589
158759
  if (!edit.changed) return { path: path2, changed: false, applied, conflicts, instructions };
@@ -159056,9 +159226,9 @@ __export(store_iap_exports, {
159056
159226
  runStoreIap: () => runStoreIap
159057
159227
  });
159058
159228
  import { randomUUID as randomUUID8 } from "node:crypto";
159059
- import { appendFileSync as appendFileSync2, mkdirSync as mkdirSync34, readFileSync as readFileSync87, realpathSync as realpathSync13, rmSync as rmSync18, writeFileSync as writeFileSync30 } from "node:fs";
159229
+ import { appendFileSync as appendFileSync2, mkdirSync as mkdirSync34, readFileSync as readFileSync88, realpathSync as realpathSync13, rmSync as rmSync18, writeFileSync as writeFileSync30 } from "node:fs";
159060
159230
  import { homedir as homedir8, hostname } from "node:os";
159061
- import { join as join73 } from "node:path";
159231
+ import { join as join74 } from "node:path";
159062
159232
  function scrubDeep(value, scrub) {
159063
159233
  if (typeof value === "string") return scrub(value);
159064
159234
  if (Array.isArray(value)) return value.map((v2) => scrubDeep(v2, scrub));
@@ -159514,14 +159684,14 @@ function fileJournal(path2) {
159514
159684
  }
159515
159685
  function readLockSummary(path2) {
159516
159686
  try {
159517
- const { pid, host, at: at2 } = JSON.parse(readFileSync87(path2, "utf8"));
159687
+ const { pid, host, at: at2 } = JSON.parse(readFileSync88(path2, "utf8"));
159518
159688
  return `pid ${pid} on ${host} since ${at2}`;
159519
159689
  } catch {
159520
159690
  return "unreadable lock";
159521
159691
  }
159522
159692
  }
159523
159693
  function acquireApplyLock(dir, appleAppId) {
159524
- const path2 = join73(dir, "apply.lock");
159694
+ const path2 = join74(dir, "apply.lock");
159525
159695
  const stamp = JSON.stringify({ pid: process.pid, host: hostname(), at: (/* @__PURE__ */ new Date()).toISOString(), token: randomUUID8() });
159526
159696
  try {
159527
159697
  writeFileSync30(path2, stamp, { flag: "wx", mode: 384 });
@@ -159534,7 +159704,7 @@ function acquireApplyLock(dir, appleAppId) {
159534
159704
  return () => {
159535
159705
  let current = "";
159536
159706
  try {
159537
- current = readFileSync87(path2, "utf8");
159707
+ current = readFileSync88(path2, "utf8");
159538
159708
  } catch {
159539
159709
  return;
159540
159710
  }
@@ -159542,7 +159712,7 @@ function acquireApplyLock(dir, appleAppId) {
159542
159712
  };
159543
159713
  }
159544
159714
  function stateDir(appleAppId) {
159545
- const dir = join73(homedir8(), ".himalaya", "store-iap", appleAppId);
159715
+ const dir = join74(homedir8(), ".himalaya", "store-iap", appleAppId);
159546
159716
  mkdirSync34(dir, { recursive: true, mode: 448 });
159547
159717
  return dir;
159548
159718
  }
@@ -159558,11 +159728,11 @@ async function confirmOnTerminal(question) {
159558
159728
  }
159559
159729
  function defaultStoreIapDeps() {
159560
159730
  return {
159561
- readFile: (path2) => readFileSync87(path2, "utf8"),
159731
+ readFile: (path2) => readFileSync88(path2, "utf8"),
159562
159732
  writeFileAtomic,
159563
159733
  resolveCredentials: ({ profileFlag, target }) => resolveIapCredentials({ profileFlag, target }),
159564
159734
  createApi: (key2) => createIapApi(createAscClient({ key: key2 })),
159565
- openJournal: (appleAppId) => fileJournal(join73(stateDir(appleAppId), "journal.jsonl")),
159735
+ openJournal: (appleAppId) => fileJournal(join74(stateDir(appleAppId), "journal.jsonl")),
159566
159736
  acquireLock: (appleAppId) => acquireApplyLock(stateDir(appleAppId), appleAppId),
159567
159737
  canPrompt: () => process.stdin.isTTY === true,
159568
159738
  wixTransport: (siteId) => ownerTransport(siteId),
@@ -160040,9 +160210,9 @@ __export(preflight_app_exports, {
160040
160210
  preflightApp: () => preflightApp,
160041
160211
  profileAccount: () => profileAccount
160042
160212
  });
160043
- import { readFileSync as readFileSync88, existsSync as existsSync74, readdirSync as readdirSync33, statSync as statSync19 } from "node:fs";
160213
+ import { readFileSync as readFileSync89, existsSync as existsSync74, readdirSync as readdirSync33, statSync as statSync19 } from "node:fs";
160044
160214
  import { createHash as createHash39 } from "node:crypto";
160045
- import { join as join74 } from "node:path";
160215
+ import { join as join75 } from "node:path";
160046
160216
  function analyze(projectYml, storeConfig, icon, account) {
160047
160217
  const f2 = [];
160048
160218
  const has = (re2, s2) => re2.test(s2);
@@ -160106,13 +160276,13 @@ function profileAccount(app, storeConfig, opts = {}) {
160106
160276
  }
160107
160277
  }
160108
160278
  async function preflightApp(app, opts = {}) {
160109
- const projectYml = existsSync74(iosProjectYml(app)) ? readFileSync88(iosProjectYml(app), "utf8") : "";
160110
- const storeConfig = existsSync74(storeConfigPath(app)) ? readFileSync88(storeConfigPath(app), "utf8") : "";
160279
+ const projectYml = existsSync74(iosProjectYml(app)) ? readFileSync89(iosProjectYml(app), "utf8") : "";
160280
+ const storeConfig = existsSync74(storeConfigPath(app)) ? readFileSync89(storeConfigPath(app), "utf8") : "";
160111
160281
  if (!storeConfig) return [{ level: "error", message: `no apps/${app}/store/store.config.yaml \u2014 run /setup-store-signing first.` }];
160112
160282
  const findings = analyze(
160113
160283
  projectYml,
160114
160284
  storeConfig,
160115
- await appIconState(join74(appDir(app), "ios")),
160285
+ await appIconState(join75(appDir(app), "ios")),
160116
160286
  profileAccount(app, storeConfig, opts)
160117
160287
  );
160118
160288
  findings.push(...analyzeListing(metadataFilesPresent(app), listScreenshots(app)));
@@ -160141,16 +160311,16 @@ function analyzeSubmissionRecord(appLevel, review, opts) {
160141
160311
  return f2;
160142
160312
  }
160143
160313
  function appLevelMetadataFiles(app, locale = "en-US") {
160144
- const root = join74(storeDir(app), "metadata");
160314
+ const root = join75(storeDir(app), "metadata");
160145
160315
  const out2 = /* @__PURE__ */ new Set();
160146
160316
  if (existsSync74(root)) {
160147
160317
  for (const n2 of readdirSync33(root)) if (n2.endsWith(".txt")) out2.add(n2);
160148
160318
  }
160149
- if (existsSync74(join74(root, locale, "privacy_url.txt"))) out2.add("privacy_url.txt");
160319
+ if (existsSync74(join75(root, locale, "privacy_url.txt"))) out2.add("privacy_url.txt");
160150
160320
  return out2;
160151
160321
  }
160152
160322
  function reviewInfoFiles(app) {
160153
- const dir = join74(storeDir(app), "review_information");
160323
+ const dir = join75(storeDir(app), "review_information");
160154
160324
  if (!existsSync74(dir)) return /* @__PURE__ */ new Set();
160155
160325
  return new Set(readdirSync33(dir).filter((n2) => n2.endsWith(".txt")));
160156
160326
  }
@@ -160261,12 +160431,12 @@ function analyzePlayListing(assets) {
160261
160431
  return f2;
160262
160432
  }
160263
160433
  function playListingAssets(app, locale = "en-US") {
160264
- const dir = join74(storeDir(app), "play", locale, "images");
160434
+ const dir = join75(storeDir(app), "play", locale, "images");
160265
160435
  const read = (names) => {
160266
160436
  for (const name of names) {
160267
- const p2 = join74(dir, name);
160437
+ const p2 = join75(dir, name);
160268
160438
  try {
160269
- if (statSync19(p2).isFile()) return { name, bytes: readFileSync88(p2) };
160439
+ if (statSync19(p2).isFile()) return { name, bytes: readFileSync89(p2) };
160270
160440
  } catch {
160271
160441
  }
160272
160442
  }
@@ -160297,26 +160467,26 @@ function analyzeListing(metaFiles, shots) {
160297
160467
  return f2;
160298
160468
  }
160299
160469
  function metadataFilesPresent(app, locale = "en-US") {
160300
- const dir = join74(storeDir(app), "metadata", locale);
160470
+ const dir = join75(storeDir(app), "metadata", locale);
160301
160471
  if (!existsSync74(dir)) return /* @__PURE__ */ new Set();
160302
160472
  return new Set(readdirSync33(dir).filter((n2) => n2.endsWith(".txt")));
160303
160473
  }
160304
160474
  function listScreenshots(app, locale = "en-US") {
160305
160475
  const out2 = [];
160306
- const flat = join74(storeDir(app), "screenshots", locale);
160476
+ const flat = join75(storeDir(app), "screenshots", locale);
160307
160477
  if (existsSync74(flat)) {
160308
160478
  for (const png of readdirSync33(flat).filter((n2) => n2.endsWith(".png"))) {
160309
- const sz = pngSize(readFileSync88(join74(flat, png)));
160479
+ const sz = pngSize(readFileSync89(join75(flat, png)));
160310
160480
  if (sz) out2.push({ name: png, w: sz.w, h: sz.h });
160311
160481
  }
160312
160482
  }
160313
- const legacy = join74(storeDir(app), "metadata", locale, "screenshots");
160483
+ const legacy = join75(storeDir(app), "metadata", locale, "screenshots");
160314
160484
  if (existsSync74(legacy)) {
160315
160485
  for (const deviceDir of readdirSync33(legacy)) {
160316
- const d2 = join74(legacy, deviceDir);
160486
+ const d2 = join75(legacy, deviceDir);
160317
160487
  if (!statSync19(d2).isDirectory()) continue;
160318
160488
  for (const png of readdirSync33(d2).filter((n2) => n2.endsWith(".png"))) {
160319
- const sz = pngSize(readFileSync88(join74(d2, png)));
160489
+ const sz = pngSize(readFileSync89(join75(d2, png)));
160320
160490
  if (sz) out2.push({ name: `${deviceDir}/${png}`, w: sz.w, h: sz.h });
160321
160491
  }
160322
160492
  }
@@ -160324,13 +160494,13 @@ function listScreenshots(app, locale = "en-US") {
160324
160494
  return out2;
160325
160495
  }
160326
160496
  function placeholderHashes2() {
160327
- const templateIos = join74(appDir("_template"), "ios");
160497
+ const templateIos = join75(appDir("_template"), "ios");
160328
160498
  if (!existsSync74(templateIos)) return [LEGACY_PLACEHOLDER_SHA2562];
160329
160499
  for (const target of readdirSync33(templateIos)) {
160330
- const p2 = join74(templateIos, target, "Assets.xcassets", "AppIcon.appiconset", "icon_1024.png");
160500
+ const p2 = join75(templateIos, target, "Assets.xcassets", "AppIcon.appiconset", "icon_1024.png");
160331
160501
  try {
160332
160502
  if (!statSync19(p2).isFile()) continue;
160333
- return [LEGACY_PLACEHOLDER_SHA2562, createHash39("sha256").update(readFileSync88(p2)).digest("hex")];
160503
+ return [LEGACY_PLACEHOLDER_SHA2562, createHash39("sha256").update(readFileSync89(p2)).digest("hex")];
160334
160504
  } catch {
160335
160505
  }
160336
160506
  }
@@ -160363,10 +160533,10 @@ async function pixelIssues(bytes2) {
160363
160533
  async function appIconState(iosDir) {
160364
160534
  if (!existsSync74(iosDir)) return { exists: false, isPlaceholder: false, storeIssues: [] };
160365
160535
  for (const target of readdirSync33(iosDir)) {
160366
- const p2 = join74(iosDir, target, "Assets.xcassets", "AppIcon.appiconset", "icon_1024.png");
160536
+ const p2 = join75(iosDir, target, "Assets.xcassets", "AppIcon.appiconset", "icon_1024.png");
160367
160537
  try {
160368
160538
  if (!statSync19(p2).isFile()) continue;
160369
- const bytes2 = readFileSync88(p2);
160539
+ const bytes2 = readFileSync89(p2);
160370
160540
  const hash2 = createHash39("sha256").update(bytes2).digest("hex");
160371
160541
  const pixels = await pixelIssues(bytes2);
160372
160542
  return {
@@ -160433,7 +160603,7 @@ __export(asc_status_exports, {
160433
160603
  ascStatus: () => ascStatus,
160434
160604
  buildVerdict: () => buildVerdict
160435
160605
  });
160436
- import { readFileSync as readFileSync89 } from "node:fs";
160606
+ import { readFileSync as readFileSync90 } from "node:fs";
160437
160607
  function buildVerdict(builds) {
160438
160608
  if (!builds.length) {
160439
160609
  return "NO builds registered \u2014 if you uploaded recently and it's been >15 min, the binary was REJECTED IN PROCESSING (reason is email-only; run validate-binary.ts / scan-purpose-strings.ts to reproduce it).";
@@ -160447,7 +160617,7 @@ function buildVerdict(builds) {
160447
160617
  function client(creds) {
160448
160618
  const env = creds ?? requireEnv(["ASC_KEY_ID", "ASC_ISSUER_ID", "ASC_KEY_PATH"]);
160449
160619
  assertCredentialOutsideRepo("ASC_KEY_PATH", env.ASC_KEY_PATH);
160450
- const jwt = ascJwt(env.ASC_KEY_ID, env.ASC_ISSUER_ID, readFileSync89(env.ASC_KEY_PATH, "utf8"), Math.floor(Date.now() / 1e3));
160620
+ const jwt = ascJwt(env.ASC_KEY_ID, env.ASC_ISSUER_ID, readFileSync90(env.ASC_KEY_PATH, "utf8"), Math.floor(Date.now() / 1e3));
160451
160621
  return async (path2) => {
160452
160622
  const r2 = await fetch(`${ASC}${path2}`, { headers: { Authorization: `Bearer ${jwt}` } });
160453
160623
  return { status: r2.status, json: await r2.json().catch(() => ({})) };
@@ -160607,7 +160777,7 @@ __export(secrets_exports, {
160607
160777
  runRemoteSecretsCommand: () => runRemoteSecretsCommand,
160608
160778
  runSecretsCommand: () => runSecretsCommand
160609
160779
  });
160610
- import { readFileSync as readFileSync90 } from "node:fs";
160780
+ import { readFileSync as readFileSync91 } from "node:fs";
160611
160781
  function environment(value) {
160612
160782
  if (value === "preview" || value === "production") return value;
160613
160783
  throw new Error("--environment must be preview or production");
@@ -160638,7 +160808,7 @@ async function runSecretsCommand(operation, flags, io2, options = {}) {
160638
160808
  io2.log(JSON.stringify(await vault.list({ app, environment: env })));
160639
160809
  return 0;
160640
160810
  }
160641
- const value = options.readValue ? options.readValue() : readFileSync90(0, "utf8").replace(/\r?\n$/, "");
160811
+ const value = options.readValue ? options.readValue() : readFileSync91(0, "utf8").replace(/\r?\n$/, "");
160642
160812
  if (operation === "set") await vault.set({ app, environment: env, name, value });
160643
160813
  else if (operation === "rotate") await vault.rotate({ app, environment: env, name, value });
160644
160814
  else throw new Error(`unknown secrets operation ${operation}`);
@@ -160667,7 +160837,7 @@ async function runRemoteSecretsCommand(operation, flags, io2, options) {
160667
160837
  }
160668
160838
  let body;
160669
160839
  if (operation !== "list") {
160670
- const value = options.readValue ? options.readValue() : readFileSync90(0, "utf8").replace(/\r?\n$/, "");
160840
+ const value = options.readValue ? options.readValue() : readFileSync91(0, "utf8").replace(/\r?\n$/, "");
160671
160841
  body = JSON.stringify({ value });
160672
160842
  }
160673
160843
  const response = await (options.fetchImpl ?? fetch)(url, { method: operation === "list" ? "GET" : operation === "set" ? "PUT" : "POST", headers: headers2, body });
@@ -161165,15 +161335,15 @@ __export(notify_exports, {
161165
161335
  runNotify: () => runNotify,
161166
161336
  saveAdminSession: () => saveAdminSession
161167
161337
  });
161168
- import { chmodSync as chmodSync3, mkdirSync as mkdirSync35, readFileSync as readFileSync91, writeFileSync as writeFileSync31 } from "node:fs";
161338
+ import { chmodSync as chmodSync3, mkdirSync as mkdirSync35, readFileSync as readFileSync92, writeFileSync as writeFileSync31 } from "node:fs";
161169
161339
  import { homedir as homedir9 } from "node:os";
161170
- import { dirname as dirname39, join as join75 } from "node:path";
161340
+ import { dirname as dirname39, join as join76 } from "node:path";
161171
161341
  function defaultSessionsPath() {
161172
- return process.env.HIMI_ADMIN_SESSIONS_FILE ?? join75(homedir9(), ".himalaya", "admin-sessions.json");
161342
+ return process.env.HIMI_ADMIN_SESSIONS_FILE ?? join76(homedir9(), ".himalaya", "admin-sessions.json");
161173
161343
  }
161174
161344
  function loadSessionsFile(path2 = defaultSessionsPath()) {
161175
161345
  try {
161176
- return JSON.parse(readFileSync91(path2, "utf8"));
161346
+ return JSON.parse(readFileSync92(path2, "utf8"));
161177
161347
  } catch {
161178
161348
  return {};
161179
161349
  }
@@ -161550,20 +161720,20 @@ __export(base44_auth_exports, {
161550
161720
  usableBase44Auth: () => usableBase44Auth,
161551
161721
  writeBase44Session: () => writeBase44Session
161552
161722
  });
161553
- import { chmodSync as chmodSync4, existsSync as existsSync75, mkdirSync as mkdirSync36, readFileSync as readFileSync92, rmSync as rmSync19, writeFileSync as writeFileSync32 } from "node:fs";
161723
+ import { chmodSync as chmodSync4, existsSync as existsSync75, mkdirSync as mkdirSync36, readFileSync as readFileSync93, rmSync as rmSync19, writeFileSync as writeFileSync32 } from "node:fs";
161554
161724
  import { homedir as homedir10 } from "node:os";
161555
- import { dirname as dirname40, join as join76 } from "node:path";
161725
+ import { dirname as dirname40, join as join77 } from "node:path";
161556
161726
  function base44ApiBase(env = process.env) {
161557
161727
  return (env.BASE44_API_URL?.trim() || "https://app.base44.com").replace(/\/+$/, "");
161558
161728
  }
161559
161729
  function base44SessionPath(home = homedir10()) {
161560
- return join76(home, ".himi", "base44", "session.json");
161730
+ return join77(home, ".himi", "base44", "session.json");
161561
161731
  }
161562
161732
  function readBase44Session(home) {
161563
161733
  const p2 = base44SessionPath(home);
161564
161734
  if (!existsSync75(p2)) return void 0;
161565
161735
  try {
161566
- const s2 = JSON.parse(readFileSync92(p2, "utf8"));
161736
+ const s2 = JSON.parse(readFileSync93(p2, "utf8"));
161567
161737
  return typeof s2.accessToken === "string" && s2.accessToken ? s2 : void 0;
161568
161738
  } catch {
161569
161739
  return void 0;
@@ -161674,9 +161844,9 @@ async function base44DeviceLogin(opts) {
161674
161844
  throw new Error("the Base44 sign-in code expired before it was approved \u2014 run `himi base44 login` again");
161675
161845
  }
161676
161846
  function importBase44CliSession(home = homedir10(), env = process.env) {
161677
- const src = join76(home, ".base44", "auth", "auth.json");
161847
+ const src = join77(home, ".base44", "auth", "auth.json");
161678
161848
  if (!existsSync75(src)) throw new Error(`no Base44 CLI session at ${src} \u2014 run \`npx base44 login\` first, or use \`himi base44 login\``);
161679
- const a2 = JSON.parse(readFileSync92(src, "utf8"));
161849
+ const a2 = JSON.parse(readFileSync93(src, "utf8"));
161680
161850
  if (typeof a2.accessToken !== "string" || !a2.accessToken) throw new Error(`${src} holds no access token`);
161681
161851
  const session = {
161682
161852
  accessToken: a2.accessToken,
@@ -163811,7 +163981,7 @@ var init_brand_font = __esm({
163811
163981
 
163812
163982
  // src/site-analyze/write-artifacts.ts
163813
163983
  import { mkdirSync as mkdirSync37, writeFileSync as writeFileSync33 } from "node:fs";
163814
- import { join as join77 } from "node:path";
163984
+ import { join as join78 } from "node:path";
163815
163985
  function attachVeloSources(book, sources, put) {
163816
163986
  const byPath = new Map((sources ?? []).map((s2) => [s2.path, s2.text]));
163817
163987
  for (const f2 of book.velo.files) {
@@ -163966,12 +164136,12 @@ async function downloadMedia(book, fetchImpl, put) {
163966
164136
  }
163967
164137
  async function writeBusinessBook(result, opts) {
163968
164138
  const out2 = opts.outDir;
163969
- mkdirSync37(join77(out2, "evidence/pages"), { recursive: true });
163970
- mkdirSync37(join77(out2, "media/catalog"), { recursive: true });
164139
+ mkdirSync37(join78(out2, "evidence/pages"), { recursive: true });
164140
+ mkdirSync37(join78(out2, "media/catalog"), { recursive: true });
163971
164141
  const files = [];
163972
164142
  const put = (rel, body) => {
163973
- const p2 = join77(out2, rel);
163974
- mkdirSync37(join77(p2, ".."), { recursive: true });
164143
+ const p2 = join78(out2, rel);
164144
+ mkdirSync37(join78(p2, ".."), { recursive: true });
163975
164145
  writeFileSync33(p2, body);
163976
164146
  files.push(rel);
163977
164147
  };
@@ -164875,11 +165045,11 @@ var init_analyze = __esm({
164875
165045
  });
164876
165046
 
164877
165047
  // src/base44-analyze/write-artifacts.ts
164878
- import { existsSync as existsSync76, mkdirSync as mkdirSync38, readFileSync as readFileSync93, rmSync as rmSync20, writeFileSync as writeFileSync34 } from "node:fs";
164879
- import { dirname as dirname41, join as join78, resolve as resolve56, sep as sep19 } from "node:path";
165048
+ import { existsSync as existsSync76, mkdirSync as mkdirSync38, readFileSync as readFileSync94, rmSync as rmSync20, writeFileSync as writeFileSync34 } from "node:fs";
165049
+ import { dirname as dirname41, join as join79, resolve as resolve56, sep as sep19 } from "node:path";
164880
165050
  function isBookFolder(dir) {
164881
165051
  try {
164882
- return JSON.parse(readFileSync93(join78(dir, "book.json"), "utf8")).kind === "base44-app-book";
165052
+ return JSON.parse(readFileSync94(join79(dir, "book.json"), "utf8")).kind === "base44-app-book";
164883
165053
  } catch {
164884
165054
  return false;
164885
165055
  }
@@ -164966,24 +165136,24 @@ function writeBase44Book(result, outDir, opts = {}) {
164966
165136
  const md = renderBookMd(book);
164967
165137
  assertNoSecrets(json6);
164968
165138
  assertNoSecrets(md);
164969
- const owned = ["book.json", "BOOK.md", "source", "screenshots"].filter((n2) => existsSync76(join78(out2, n2)));
165139
+ const owned = ["book.json", "BOOK.md", "source", "screenshots"].filter((n2) => existsSync76(join79(out2, n2)));
164970
165140
  if (owned.length) {
164971
165141
  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`);
164972
- for (const d2 of ["source", "screenshots"]) rmSync20(join78(out2, d2), { recursive: true, force: true });
165142
+ for (const d2 of ["source", "screenshots"]) rmSync20(join79(out2, d2), { recursive: true, force: true });
164973
165143
  }
164974
165144
  mkdirSync38(out2, { recursive: true });
164975
- writeFileSync34(join78(out2, "book.json"), json6);
164976
- writeFileSync34(join78(out2, "BOOK.md"), md);
165145
+ writeFileSync34(join79(out2, "book.json"), json6);
165146
+ writeFileSync34(join79(out2, "BOOK.md"), md);
164977
165147
  files.push("book.json", "BOOK.md");
164978
165148
  for (const s2 of shots) {
164979
- mkdirSync38(join78(out2, "screenshots"), { recursive: true });
164980
- writeFileSync34(join78(out2, "screenshots", s2.filename), s2.bytes);
165149
+ mkdirSync38(join79(out2, "screenshots"), { recursive: true });
165150
+ writeFileSync34(join79(out2, "screenshots", s2.filename), s2.bytes);
164981
165151
  files.push(`screenshots/${s2.filename}`);
164982
165152
  }
164983
- const sourceRoot = join78(out2, "source");
165153
+ const sourceRoot = join79(out2, "source");
164984
165154
  for (const f2 of result.sourceFiles) {
164985
165155
  if (!safeRel(f2.path)) continue;
164986
- const dest = join78(sourceRoot, ...f2.path.split("/"));
165156
+ const dest = join79(sourceRoot, ...f2.path.split("/"));
164987
165157
  if (!dest.startsWith(sourceRoot + sep19)) continue;
164988
165158
  mkdirSync38(dirname41(dest), { recursive: true });
164989
165159
  writeFileSync34(dest, f2.bytes);
@@ -168529,7 +168699,7 @@ __export(cli_exports, {
168529
168699
  import { execFile } from "node:child_process";
168530
168700
  import { mkdirSync as mkdirSync39, mkdtempSync as mkdtempSync4, rmSync as rmSync21, writeFileSync as writeFileSync35 } from "node:fs";
168531
168701
  import { tmpdir as tmpdir5 } from "node:os";
168532
- import { join as join79, resolve as resolve57 } from "node:path";
168702
+ import { join as join80, resolve as resolve57 } from "node:path";
168533
168703
  import { promisify } from "node:util";
168534
168704
  function projectDownloader(apiFetch, apiBase, token, extract = systemTar) {
168535
168705
  return async (appId2) => {
@@ -168542,11 +168712,11 @@ function projectDownloader(apiFetch, apiBase, token, extract = systemTar) {
168542
168712
  }
168543
168713
  const bytes2 = await readCapped(res, MAX_TARBALL_BYTES);
168544
168714
  if (!bytes2) throw new Error(`project download is over the ${MAX_TARBALL_BYTES}-byte cap`);
168545
- const root = mkdtempSync4(join79(tmpdir5(), "himi-base44-"));
168715
+ const root = mkdtempSync4(join80(tmpdir5(), "himi-base44-"));
168546
168716
  const cleanup = () => rmSync21(root, { recursive: true, force: true });
168547
168717
  try {
168548
- const archive = join79(root, "project.tar");
168549
- const dir = join79(root, "project");
168718
+ const archive = join80(root, "project.tar");
168719
+ const dir = join80(root, "project");
168550
168720
  writeFileSync35(archive, bytes2);
168551
168721
  mkdirSync39(dir);
168552
168722
  await extract(archive, dir);
@@ -169841,8 +170011,8 @@ var init_customer_build = __esm({
169841
170011
  });
169842
170012
 
169843
170013
  // src/site-analyze/apply.ts
169844
- import { existsSync as existsSync77, readFileSync as readFileSync94, writeFileSync as writeFileSync36, copyFileSync as copyFileSync2, mkdirSync as mkdirSync40, realpathSync as realpathSync14, statSync as statSync20 } from "node:fs";
169845
- import { dirname as dirname42, isAbsolute as isAbsolute8, join as join80, resolve as resolve58, sep as sep20 } from "node:path";
170014
+ import { existsSync as existsSync77, readFileSync as readFileSync95, writeFileSync as writeFileSync36, copyFileSync as copyFileSync2, mkdirSync as mkdirSync40, realpathSync as realpathSync14, statSync as statSync20 } from "node:fs";
170015
+ import { dirname as dirname42, isAbsolute as isAbsolute8, join as join81, resolve as resolve58, sep as sep20 } from "node:path";
169846
170016
  import { spawnSync as spawnSync4 } from "node:child_process";
169847
170017
  function unpairedRedirectNote(overlay) {
169848
170018
  if (!overlay.wix?.clientId || overlay.wix.redirectUri) return void 0;
@@ -169857,7 +170027,7 @@ function committedShellProvisioning(path2) {
169857
170027
  function findRepoRoot(cwd) {
169858
170028
  let dir = cwd;
169859
170029
  for (let i2 = 0; i2 < 8; i2++) {
169860
- if (SHELL_NAMES2.some((name) => existsSync77(join80(dir, shellAppDir(name), "package.json")))) return dir;
170030
+ if (SHELL_NAMES2.some((name) => existsSync77(join81(dir, shellAppDir(name), "package.json")))) return dir;
169861
170031
  const next = dirname42(dir);
169862
170032
  if (next === dir) break;
169863
170033
  dir = next;
@@ -169960,11 +170130,11 @@ function sameKnownSite(previous, next) {
169960
170130
  }
169961
170131
  function buildMergedContract(options) {
169962
170132
  const { appDir: appDir3, packageDir, overlay } = options;
169963
- const committedPath = join80(appDir3, "provisioning.json");
170133
+ const committedPath = join81(appDir3, "provisioning.json");
169964
170134
  if (!existsSync77(committedPath)) {
169965
170135
  throw new Error(`shell has no committed provisioning.json at ${committedPath} to build a contract from`);
169966
170136
  }
169967
- const committed = JSON.parse(readFileSync94(committedPath, "utf8"));
170137
+ const committed = JSON.parse(readFileSync95(committedPath, "utf8"));
169968
170138
  const merged = mergeCustomerOwned(committed, overlay);
169969
170139
  const overlayFontFamily = (overlay.branding ?? {}).fontFamily;
169970
170140
  const branding = merged.branding ?? {};
@@ -169976,7 +170146,7 @@ function buildMergedContract(options) {
169976
170146
  };
169977
170147
  const stage = (fromRel, toRel) => {
169978
170148
  const from = contained(packageDir, fromRel);
169979
- const to2 = contained(join80(appDir3, STAGED), toRel.slice(STAGED.length + 1));
170149
+ const to2 = contained(join81(appDir3, STAGED), toRel.slice(STAGED.length + 1));
169980
170150
  if (!from || !to2 || !existsSync77(from)) return void 0;
169981
170151
  let real;
169982
170152
  let realRoot;
@@ -169999,11 +170169,11 @@ function buildMergedContract(options) {
169999
170169
  };
170000
170170
  const icon = stage("media/icon.png", `${STAGED}/icon.png`);
170001
170171
  if (icon) branding.appIconPath = icon;
170002
- const facesPath = join80(packageDir, "media/fonts/faces.json");
170172
+ const facesPath = join81(packageDir, "media/fonts/faces.json");
170003
170173
  if (existsSync77(facesPath)) {
170004
170174
  let faces = [];
170005
170175
  try {
170006
- const parsed = JSON.parse(readFileSync94(facesPath, "utf8"));
170176
+ const parsed = JSON.parse(readFileSync95(facesPath, "utf8"));
170007
170177
  faces = Array.isArray(parsed) ? parsed : [];
170008
170178
  } catch {
170009
170179
  faces = [];
@@ -170024,9 +170194,9 @@ function buildMergedContract(options) {
170024
170194
  merged.branding = branding;
170025
170195
  const body = `${JSON.stringify(merged, null, 2)}
170026
170196
  `;
170027
- const path2 = join80(packageDir, "provisioning.contract.json");
170197
+ const path2 = join81(packageDir, "provisioning.contract.json");
170028
170198
  writeFileSync36(path2, body);
170029
- const localPath2 = join80(appDir3, LOCAL_CONTRACT_REL);
170199
+ const localPath2 = join81(appDir3, LOCAL_CONTRACT_REL);
170030
170200
  mkdirSync40(dirname42(localPath2), { recursive: true });
170031
170201
  writeFileSync36(localPath2, body);
170032
170202
  staged.push(localPath2);
@@ -170061,10 +170231,10 @@ function catalogTypography(overlay, template) {
170061
170231
  function staticFaqFor(overlay, overlayPath) {
170062
170232
  const own4 = overlay.faq;
170063
170233
  if (own4 !== void 0) return deriveStaticFaq(own4);
170064
- const bookPath = join80(dirname42(resolve58(overlayPath)), "book.json");
170234
+ const bookPath = join81(dirname42(resolve58(overlayPath)), "book.json");
170065
170235
  if (!existsSync77(bookPath)) return void 0;
170066
170236
  try {
170067
- const book = JSON.parse(readFileSync94(bookPath, "utf8"));
170237
+ const book = JSON.parse(readFileSync95(bookPath, "utf8"));
170068
170238
  const copy = book?.copy;
170069
170239
  if (!copy || typeof copy !== "object" || copy.unavailable) return void 0;
170070
170240
  const pairs = deriveStaticFaq(copy.faq);
@@ -170078,10 +170248,10 @@ function staticGalleriesFor(overlay, overlayPath) {
170078
170248
  if (overlay.galleries !== void 0) return deriveStaticGalleries(
170079
170249
  overlay.galleries.map((gallery) => ({ role: "gallery", title: gallery.title, galleryImageUrls: gallery.photos }))
170080
170250
  );
170081
- const bookPath = join80(dirname42(resolve58(overlayPath)), "book.json");
170251
+ const bookPath = join81(dirname42(resolve58(overlayPath)), "book.json");
170082
170252
  if (!existsSync77(bookPath)) return void 0;
170083
170253
  try {
170084
- const book = JSON.parse(readFileSync94(bookPath, "utf8"));
170254
+ const book = JSON.parse(readFileSync95(bookPath, "utf8"));
170085
170255
  if (!book.look || book.look.unavailable || !Array.isArray(book.look.pages)) return void 0;
170086
170256
  const galleries = deriveStaticGalleries(book.look.pages);
170087
170257
  return galleries.length || book.look.complete === true ? galleries : void 0;
@@ -170093,8 +170263,8 @@ async function applyOverlays(input) {
170093
170263
  const cwd = resolve58(input.cwd);
170094
170264
  const shell = input.shell ?? DEFAULT_BRANDABLE_SHELL;
170095
170265
  assertKnownShell(shell);
170096
- const overlay = JSON.parse(readFileSync94(input.overlayPath, "utf8"));
170097
- const tokens2 = JSON.parse(readFileSync94(input.tokensPath, "utf8"));
170266
+ const overlay = JSON.parse(readFileSync95(input.overlayPath, "utf8"));
170267
+ const tokens2 = JSON.parse(readFileSync95(input.tokensPath, "utf8"));
170098
170268
  const faq = staticFaqFor(overlay, input.overlayPath);
170099
170269
  if (faq !== void 0) overlay.faq = faq;
170100
170270
  const galleries = staticGalleriesFor(overlay, input.overlayPath);
@@ -170111,9 +170281,9 @@ async function applyOverlays(input) {
170111
170281
  `shell "${shell}" cannot bake a customer brand \u2014 it ships no prepare:customer script`
170112
170282
  );
170113
170283
  }
170114
- const appDir3 = join80(repoRoot2, shellAppDir(shell));
170115
- const committedPath = join80(appDir3, "provisioning.json");
170116
- const committedSite = existsSync77(committedPath) ? JSON.parse(readFileSync94(committedPath, "utf8")).site : void 0;
170284
+ const appDir3 = join81(repoRoot2, shellAppDir(shell));
170285
+ const committedPath = join81(appDir3, "provisioning.json");
170286
+ const committedSite = existsSync77(committedPath) ? JSON.parse(readFileSync95(committedPath, "utf8")).site : void 0;
170117
170287
  if (committedSite !== void 0 && overlay.site === void 0) {
170118
170288
  throw new Error(
170119
170289
  `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.`
@@ -170140,9 +170310,9 @@ async function applyOverlays(input) {
170140
170310
  note: `prepare:customer --contract with a merged contract (committed provisioning.json untouched)${unpairedInRepo ? ` \xB7 ${unpairedInRepo}` : ""}`
170141
170311
  };
170142
170312
  }
170143
- const pkgProv = join80(cwd, "provisioning.json");
170313
+ const pkgProv = join81(cwd, "provisioning.json");
170144
170314
  assertNotCommitted(pkgProv, input.forbiddenProvisioning);
170145
- const contentPath = join80(cwd, "himalaya.content.json");
170315
+ const contentPath = join81(cwd, "himalaya.content.json");
170146
170316
  const syncViewNames = (before, after) => {
170147
170317
  const content = readContentManifest(cwd);
170148
170318
  if (!content) return;
@@ -170155,7 +170325,7 @@ async function applyOverlays(input) {
170155
170325
  let packageFaq = faq;
170156
170326
  let packageGalleries = galleries;
170157
170327
  if (existsSync77(pkgProv)) {
170158
- const cur = JSON.parse(readFileSync94(pkgProv, "utf8"));
170328
+ const cur = JSON.parse(readFileSync95(pkgProv, "utf8"));
170159
170329
  if (galleries === void 0 && !sameKnownSite(cur, overlay)) overlay.galleries = [];
170160
170330
  const merged = deepMerge4(cur, overlay);
170161
170331
  packageFaq = merged.faq;
@@ -170171,9 +170341,9 @@ async function applyOverlays(input) {
170171
170341
  if (Array.isArray(packageGalleries) && packageGalleries.length && !overlay.installedVerticals.includes("galleries")) {
170172
170342
  overlay.installedVerticals.push("galleries");
170173
170343
  }
170174
- const pkgTokens = join80(cwd, "tokens.json");
170344
+ const pkgTokens = join81(cwd, "tokens.json");
170175
170345
  if (existsSync77(pkgTokens) && (tokens2.colors || tokens2.typography)) {
170176
- const cur = JSON.parse(readFileSync94(pkgTokens, "utf8"));
170346
+ const cur = JSON.parse(readFileSync95(pkgTokens, "utf8"));
170177
170347
  let tokensIn = tokens2;
170178
170348
  if (tokens2.typography) {
170179
170349
  const fonts = catalogTypography(tokens2.typography, cur.typography);
@@ -170198,9 +170368,9 @@ async function applyOverlays(input) {
170198
170368
  wrote.push(pkgTokens);
170199
170369
  }
170200
170370
  const homeAction = homeRefreshActionId(shell);
170201
- const homeSrc = join80(cwd, "dev/index.ts");
170371
+ const homeSrc = join81(cwd, "dev/index.ts");
170202
170372
  if (homeAction && existsSync77(homeSrc)) {
170203
- const prev = readFileSync94(homeSrc, "utf8");
170373
+ const prev = readFileSync95(homeSrc, "utf8");
170204
170374
  const patched = patchBrandParams(prev, overlay, homeAction);
170205
170375
  let next = patched.src;
170206
170376
  if (!patched.foreign && faq?.length && prev.includes('"tier5.himiBrandedFaq.load"') && !prev.includes('"staticFaq"')) {
@@ -171199,7 +171369,7 @@ __export(cli_exports2, {
171199
171369
  runSiteAnalyze: () => runSiteAnalyze,
171200
171370
  runSiteFunctionCli: () => runSiteFunctionCli
171201
171371
  });
171202
- import { existsSync as existsSync78, readFileSync as readFileSync95 } from "node:fs";
171372
+ import { existsSync as existsSync78, readFileSync as readFileSync96 } from "node:fs";
171203
171373
  import { resolve as resolve59 } from "node:path";
171204
171374
  function applyNeedsClient(shell) {
171205
171375
  if (shell === void 0 || !SHELL_NAMES2.includes(shell)) return true;
@@ -171258,7 +171428,7 @@ async function runSiteAnalyze(opts) {
171258
171428
  const prevOverlayPath = resolve59(outDir, "provisioning.overlay.json");
171259
171429
  const prevSite = existsSync78(prevOverlayPath) ? (() => {
171260
171430
  try {
171261
- return JSON.parse(readFileSync95(prevOverlayPath, "utf8")).site;
171431
+ return JSON.parse(readFileSync96(prevOverlayPath, "utf8")).site;
171262
171432
  } catch {
171263
171433
  return void 0;
171264
171434
  }
@@ -171277,7 +171447,7 @@ async function runSiteAnalyze(opts) {
171277
171447
  }
171278
171448
  const previousOverlay = resolve59(outDir, "provisioning.overlay.json");
171279
171449
  carryOverGoals(
171280
- existsSync78(previousOverlay) ? readFileSync95(previousOverlay, "utf8") : void 0,
171450
+ existsSync78(previousOverlay) ? readFileSync96(previousOverlay, "utf8") : void 0,
171281
171451
  result.provisioningOverlay
171282
171452
  );
171283
171453
  const ownerCall = ownerAuth ? ownerTransportFrom(fetchImpl, ownerAuth) : void 0;
@@ -171335,7 +171505,7 @@ async function runSiteFunctionCli(opts) {
171335
171505
  let source;
171336
171506
  if (opts.sourcePath) {
171337
171507
  const p2 = resolve59(opts.cwd ?? process.cwd(), opts.sourcePath);
171338
- source = readFileSync95(p2, "utf8");
171508
+ source = readFileSync96(p2, "utf8");
171339
171509
  }
171340
171510
  let body;
171341
171511
  if (opts.bodyRaw != null) {
@@ -171365,7 +171535,7 @@ async function runSiteFunctionCli(opts) {
171365
171535
  function base44BookRoutes(bookPath, siteUrl) {
171366
171536
  if (!existsSync78(bookPath)) return void 0;
171367
171537
  try {
171368
- const book = JSON.parse(readFileSync95(bookPath, "utf8"));
171538
+ const book = JSON.parse(readFileSync96(bookPath, "utf8"));
171369
171539
  if (book.kind !== "base44-app-book" || !Array.isArray(book.routes)) return void 0;
171370
171540
  const host = (u2) => {
171371
171541
  try {
@@ -171620,7 +171790,7 @@ __export(site_create_exports, {
171620
171790
  runSiteList: () => runSiteList,
171621
171791
  writeProvisioningBinding: () => writeProvisioningBinding
171622
171792
  });
171623
- import { existsSync as existsSync79, readFileSync as readFileSync96, writeFileSync as writeFileSync37 } from "node:fs";
171793
+ import { existsSync as existsSync79, readFileSync as readFileSync97, writeFileSync as writeFileSync37 } from "node:fs";
171624
171794
  import { resolve as resolvePath2 } from "node:path";
171625
171795
  function oauthClientName(projectName) {
171626
171796
  return `${projectName} client`;
@@ -171769,7 +171939,7 @@ async function runSiteCreate(opts) {
171769
171939
  if (!wantOauthApp) return { ...base, nextSteps: nextSteps(metaSiteId) };
171770
171940
  return { ...base, clientId, redirectUri, nextSteps: nextSteps(metaSiteId, clientId) };
171771
171941
  }
171772
- function writeProvisioningBinding(target, binding2, fs2 = { existsSync: existsSync79, readFileSync: readFileSync96, writeFileSync: writeFileSync37 }) {
171942
+ function writeProvisioningBinding(target, binding2, fs2 = { existsSync: existsSync79, readFileSync: readFileSync97, writeFileSync: writeFileSync37 }) {
171773
171943
  const msid = binding2.siteId;
171774
171944
  const path2 = resolvePath2(target);
171775
171945
  const committed = committedShellProvisioning(path2);
@@ -172445,12 +172615,12 @@ var init_context = __esm({
172445
172615
  });
172446
172616
 
172447
172617
  // src/cli.ts
172448
- import { mkdtempSync as mkdtempSync5, readFileSync as readFileSync97, mkdirSync as mkdirSync41, writeFileSync as writeFileSync38, existsSync as existsSync80, rmSync as rmSync22, readdirSync as readdirSync34, statSync as statSync21, lstatSync as lstatSync21, accessSync, constants as constants4, renameSync as renameSync12, cpSync as cpSync3 } from "node:fs";
172618
+ import { mkdtempSync as mkdtempSync5, readFileSync as readFileSync98, mkdirSync as mkdirSync41, writeFileSync as writeFileSync38, existsSync as existsSync80, rmSync as rmSync22, readdirSync as readdirSync34, statSync as statSync21, lstatSync as lstatSync21, accessSync, constants as constants4, renameSync as renameSync12, cpSync as cpSync3 } from "node:fs";
172449
172619
  import { execFile as execFile2, execFileSync as execFileSync7, spawnSync as spawnSync5, spawn as spawn7 } from "node:child_process";
172450
172620
  import { AsyncLocalStorage as AsyncLocalStorage2 } from "node:async_hooks";
172451
172621
  import { createHash as createHash41, randomUUID as randomUUID11 } from "node:crypto";
172452
172622
  import { tmpdir as tmpdir6, homedir as homedir11, hostname as hostname2 } from "node:os";
172453
- import { join as join81, resolve as resolve60, relative as relative15, basename as basename19, dirname as dirname43 } from "node:path";
172623
+ import { join as join82, resolve as resolve60, relative as relative15, basename as basename19, dirname as dirname43 } from "node:path";
172454
172624
  import { fileURLToPath as fileURLToPath27 } from "node:url";
172455
172625
 
172456
172626
  // ../serve-cli/src/client.ts
@@ -174604,8 +174774,8 @@ var str9 = (v2) => typeof v2 === "string" ? v2 : void 0;
174604
174774
  var num3 = (v2) => typeof v2 === "string" && v2 !== "" && Number.isFinite(Number(v2)) ? Number(v2) : void 0;
174605
174775
  function embeddedTemplateCatalog() {
174606
174776
  return availableTemplates().map((name) => {
174607
- const path2 = join81(templateSourceDir(name), TEMPLATE_META_FILE);
174608
- const meta = JSON.parse(readFileSync97(path2, "utf8"));
174777
+ const path2 = join82(templateSourceDir(name), TEMPLATE_META_FILE);
174778
+ const meta = JSON.parse(readFileSync98(path2, "utf8"));
174609
174779
  if (!meta || typeof meta.title !== "string" || typeof meta.description !== "string" || !Array.isArray(meta.tags)) {
174610
174780
  throw new Error(`${path2} must be { title: string, description: string, tags: string[], category?: string }`);
174611
174781
  }
@@ -175476,7 +175646,7 @@ var COMMANDS2 = [
175476
175646
  ];
175477
175647
  function cliVersion() {
175478
175648
  try {
175479
- return JSON.parse(readFileSync97(new URL("../package.json", import.meta.url), "utf8")).version ?? "unknown";
175649
+ return JSON.parse(readFileSync98(new URL("../package.json", import.meta.url), "utf8")).version ?? "unknown";
175480
175650
  } catch {
175481
175651
  return "unknown";
175482
175652
  }
@@ -175601,7 +175771,7 @@ function ageInDays(publishedAt, now = Date.now()) {
175601
175771
  }
175602
175772
  function packageVersion(path2) {
175603
175773
  try {
175604
- const version4 = JSON.parse(readFileSync97(path2, "utf8")).version;
175774
+ const version4 = JSON.parse(readFileSync98(path2, "utf8")).version;
175605
175775
  return typeof version4 === "string" && version4 ? version4 : void 0;
175606
175776
  } catch {
175607
175777
  return void 0;
@@ -175610,7 +175780,7 @@ function packageVersion(path2) {
175610
175780
  function resolvedSdkVersion(fromDir = process.cwd(), bundledManifest = new URL("./authoring-runtime/node_modules/@wix/himalaya/package.json", import.meta.url)) {
175611
175781
  let dir = resolve60(fromDir);
175612
175782
  for (; ; ) {
175613
- const version4 = packageVersion(join81(dir, "node_modules", "@wix", "himalaya", "package.json"));
175783
+ const version4 = packageVersion(join82(dir, "node_modules", "@wix", "himalaya", "package.json"));
175614
175784
  if (version4) return { version: version4, source: "local" };
175615
175785
  const parent = dirname43(dir);
175616
175786
  if (parent === dir) break;
@@ -175620,7 +175790,7 @@ function resolvedSdkVersion(fromDir = process.cwd(), bundledManifest = new URL("
175620
175790
  if (bundled) return { version: bundled, source: "bundled" };
175621
175791
  try {
175622
175792
  const root = execFileSync7("npm", ["root", "-g"], { stdio: ["ignore", "pipe", "ignore"] }).toString().trim();
175623
- const version4 = root ? packageVersion(join81(root, "@wix", "himalaya", "package.json")) : void 0;
175793
+ const version4 = root ? packageVersion(join82(root, "@wix", "himalaya", "package.json")) : void 0;
175624
175794
  return version4 ? { version: version4, source: "global" } : {};
175625
175795
  } catch {
175626
175796
  return {};
@@ -175667,11 +175837,11 @@ var UPDATE_RETRY_AFTER_FAILURE_MS = 60 * 60 * 1e3;
175667
175837
  var UPDATE_SNOOZE_MS = 24 * 60 * 60 * 1e3;
175668
175838
  var UPDATE_REEXEC_ENV = "HIMI_UPDATED_ONCE";
175669
175839
  function updateCachePath(env = process.env) {
175670
- return env.HIMI_UPDATE_CACHE_FILE ?? join81(homedir11(), ".himalaya", "update-check.json");
175840
+ return env.HIMI_UPDATE_CACHE_FILE ?? join82(homedir11(), ".himalaya", "update-check.json");
175671
175841
  }
175672
175842
  function readUpdateCache(path2) {
175673
175843
  try {
175674
- const parsed = JSON.parse(readFileSync97(path2, "utf8"));
175844
+ const parsed = JSON.parse(readFileSync98(path2, "utf8"));
175675
175845
  return parsed && typeof parsed === "object" ? parsed : {};
175676
175846
  } catch {
175677
175847
  return {};
@@ -175740,11 +175910,11 @@ function createUpdateRunner(spawn8 = spawnSync5) {
175740
175910
  },
175741
175911
  installedVersion: () => {
175742
175912
  const root = globalNodeModulesRoot();
175743
- return root ? packageVersion(join81(root, "@wix", "himalaya-cli", "package.json")) : void 0;
175913
+ return root ? packageVersion(join82(root, "@wix", "himalaya-cli", "package.json")) : void 0;
175744
175914
  },
175745
175915
  reexec: (argv) => {
175746
175916
  const root = globalNodeModulesRoot();
175747
- const entry = root ? join81(root, "@wix", "himalaya-cli", "dist", "cli.mjs") : void 0;
175917
+ const entry = root ? join82(root, "@wix", "himalaya-cli", "dist", "cli.mjs") : void 0;
175748
175918
  if (!entry || !existsSync80(entry)) return void 0;
175749
175919
  const result = spawnSync5(process.execPath, [entry, ...argv], {
175750
175920
  // inherit keeps PIPED STDIN working — commands that read stdin must survive a re-exec.
@@ -175792,7 +175962,7 @@ function staleUpdateLockFile(cachePath, now) {
175792
175962
  for (const path2 of [`${cachePath}.lock.break`, `${cachePath}.lock`]) {
175793
175963
  let content;
175794
175964
  try {
175795
- content = readFileSync97(path2, "utf8");
175965
+ content = readFileSync98(path2, "utf8");
175796
175966
  } catch {
175797
175967
  continue;
175798
175968
  }
@@ -175815,7 +175985,7 @@ function acquireUpdateLock(cachePath, now, hooks = {}) {
175815
175985
  const mine = lockStamp(now);
175816
175986
  const readLock = (path2) => {
175817
175987
  try {
175818
- return readFileSync97(path2, "utf8");
175988
+ return readFileSync98(path2, "utf8");
175819
175989
  } catch {
175820
175990
  return void 0;
175821
175991
  }
@@ -176407,7 +176577,7 @@ function executableOnPath(name, env = process.env) {
176407
176577
  const suffixes = process.platform === "win32" ? (env.PATHEXT ?? ".COM;.EXE;.BAT;.CMD").split(";").filter(Boolean) : [""];
176408
176578
  for (const dir of entries) {
176409
176579
  for (const suffix of suffixes) {
176410
- const candidate = join81(dir, `${name}${suffix}`);
176580
+ const candidate = join82(dir, `${name}${suffix}`);
176411
176581
  try {
176412
176582
  if (!statSync21(candidate).isFile()) continue;
176413
176583
  if (process.platform !== "win32") accessSync(candidate, constants4.X_OK);
@@ -176516,7 +176686,7 @@ async function nativeConfigAdvisories(app, configSource) {
176516
176686
  const { iosProjectYml: iosProjectYml2 } = await Promise.resolve().then(() => (init_paths2(), paths_exports));
176517
176687
  const { androidOptedIn: androidOptedIn3, LABEL_IOS_SPLASH: LABEL_IOS_SPLASH2 } = await Promise.resolve().then(() => (init_splash(), splash_exports));
176518
176688
  const iosYmlPath = iosProjectYml2(app);
176519
- const iosYml = existsSync80(iosYmlPath) ? readFileSync97(iosYmlPath, "utf8") : "";
176689
+ const iosYml = existsSync80(iosYmlPath) ? readFileSync98(iosYmlPath, "utf8") : "";
176520
176690
  let optedIn = iosYml.includes(LABEL_IOS_SPLASH2);
176521
176691
  if (!optedIn) {
176522
176692
  const { androidManifestPath: androidManifestPath3 } = await Promise.resolve().then(() => (init_gen_native_config(), gen_native_config_exports));
@@ -176530,7 +176700,7 @@ async function nativeConfigAdvisories(app, configSource) {
176530
176700
  }
176531
176701
  function readConfigSource(dir) {
176532
176702
  try {
176533
- return readFileSync97(join81(dir, "config.ts"), "utf8");
176703
+ return readFileSync98(join82(dir, "config.ts"), "utf8");
176534
176704
  } catch {
176535
176705
  return null;
176536
176706
  }
@@ -176584,7 +176754,7 @@ var NoBase44SlotError = class extends Error {
176584
176754
  };
176585
176755
  async function initFromRemoteTemplate(name, parentDir, template, c2, opts = {}) {
176586
176756
  const dir = resolve60(parentDir, name);
176587
- if (existsSync80(join81(dir, "himalaya.content.json"))) {
176757
+ if (existsSync80(join82(dir, "himalaya.content.json"))) {
176588
176758
  throw new Error(`content package already exists at ${dir}`);
176589
176759
  }
176590
176760
  const r2 = await c2.fetchTemplateSource(TEMPLATE_APP_PREFIX + template);
@@ -176645,7 +176815,7 @@ function restoreDestinationIssue(dest, force) {
176645
176815
  function isHimalayaMonorepoCheckout(start) {
176646
176816
  let dir = resolve60(start);
176647
176817
  for (; ; ) {
176648
- if (existsSync80(join81(dir, "tools", "himi-cli", "src", "cli.ts")) && existsSync80(join81(dir, "core", "serve", "src", "server.ts"))) return true;
176818
+ if (existsSync80(join82(dir, "tools", "himi-cli", "src", "cli.ts")) && existsSync80(join82(dir, "core", "serve", "src", "server.ts"))) return true;
176649
176819
  const parent = dirname43(dir);
176650
176820
  if (parent === dir) return false;
176651
176821
  dir = parent;
@@ -176706,7 +176876,7 @@ function materializeForPreview(appDir3, slug, displayName2) {
176706
176876
  Object.entries(files).map(([rel, body]) => [rel, rel === "himalaya.content.json" ? substituteIdentity(body, slug) : body])
176707
176877
  );
176708
176878
  const repoRoot2 = resolve60(fileURLToPath27(new URL("../../..", import.meta.url)));
176709
- const root = join81(repoRoot2, "node_modules", ".cache", "himi-template-preview");
176879
+ const root = join82(repoRoot2, "node_modules", ".cache", "himi-template-preview");
176710
176880
  const stillRunning = (pid) => {
176711
176881
  try {
176712
176882
  process.kill(pid, 0);
@@ -176720,12 +176890,12 @@ function materializeForPreview(appDir3, slug, displayName2) {
176720
176890
  if (!entry.isDirectory()) continue;
176721
176891
  const pid = Number(entry.name.startsWith(`${slug}-`) ? entry.name.slice(slug.length + 1) : NaN);
176722
176892
  if (Number.isInteger(pid) && pid > 0 && pid !== process.pid && !stillRunning(pid)) {
176723
- rmSync22(join81(root, entry.name), { recursive: true, force: true });
176893
+ rmSync22(join82(root, entry.name), { recursive: true, force: true });
176724
176894
  }
176725
176895
  }
176726
176896
  } catch {
176727
176897
  }
176728
- const dest = join81(root, `${slug}-${process.pid}`);
176898
+ const dest = join82(root, `${slug}-${process.pid}`);
176729
176899
  rmSync22(dest, { recursive: true, force: true });
176730
176900
  mkdirSync41(dest, { recursive: true });
176731
176901
  try {
@@ -176738,8 +176908,8 @@ function materializeForPreview(appDir3, slug, displayName2) {
176738
176908
  }
176739
176909
  async function appId(dir) {
176740
176910
  try {
176741
- const { readFileSync: readFileSync98 } = await import("node:fs");
176742
- const m2 = JSON.parse(readFileSync98(join81(dir, "himalaya.content.json"), "utf8"));
176911
+ const { readFileSync: readFileSync99 } = await import("node:fs");
176912
+ const m2 = JSON.parse(readFileSync99(join82(dir, "himalaya.content.json"), "utf8"));
176743
176913
  if (m2.name) return m2.name;
176744
176914
  } catch {
176745
176915
  }
@@ -176747,8 +176917,8 @@ async function appId(dir) {
176747
176917
  }
176748
176918
  async function contentVisibility(dir) {
176749
176919
  try {
176750
- const { readFileSync: readFileSync98 } = await import("node:fs");
176751
- const m2 = JSON.parse(readFileSync98(join81(dir, "himalaya.content.json"), "utf8"));
176920
+ const { readFileSync: readFileSync99 } = await import("node:fs");
176921
+ const m2 = JSON.parse(readFileSync99(join82(dir, "himalaya.content.json"), "utf8"));
176752
176922
  if (m2.visibility === "public" || m2.visibility === "unlisted") return m2.visibility;
176753
176923
  } catch {
176754
176924
  }
@@ -177037,7 +177207,7 @@ Seed your coding agent with \`himi agent-init\`. Guides: ${idx.portalUrl}`);
177037
177207
  ...res.removed.length ? { removed: res.removed, note: "older copies at the app root, moved to .himi/legacy-agent-files/ (a backup, in case one became app code) \u2014 the current ones live in .agents/skills/himalaya/" } : {},
177038
177208
  // In a git repo the refresh moves the diff identity an earlier `himi test` attested (that
177039
177209
  // hash is shared with the repo gates and deliberately exempts nothing but its own metadata).
177040
- ...existsSync80(join81(dir, ".himi", "attestations", "latest.json")) ? { next: "if `himi push` then refuses the attestation as stale, re-run `himi test` \u2014 in a git checkout this refresh changed the tree it covered" } : {},
177210
+ ...existsSync80(join82(dir, ".himi", "attestations", "latest.json")) ? { next: "if `himi push` then refuses the attestation as stale, re-run `himi test` \u2014 in a git checkout this refresh changed the tree it covered" } : {},
177041
177211
  ...res.skipped.length ? { skipped: res.skipped } : {},
177042
177212
  portalUrl: idx.portalUrl
177043
177213
  });
@@ -177060,7 +177230,7 @@ async function recordedReleaseForContentQuietly(dir, resolution, onDrift) {
177060
177230
  try {
177061
177231
  const { buildContentForValidation: buildContentForValidation2, buildReleaseFromContent: buildReleaseFromContent2, bundleOutDir: bundleOutDir2 } = await loadAuthoring();
177062
177232
  const bres = await buildContentForValidation2(dir, { resolution });
177063
- out2 = mkdtempSync5(join81(tmpdir6(), "himi-ux-record-"));
177233
+ out2 = mkdtempSync5(join82(tmpdir6(), "himi-ux-record-"));
177064
177234
  const hasWorkers = bres.built.length > 0 || bres.compileErrors.length > 0;
177065
177235
  const outcome = await buildReleaseFromContent2(dir, out2, { ...hasWorkers ? { tier5Dir: bundleOutDir2(dir) } : {}, collect: { lint: true } });
177066
177236
  const releaseId = outcome.manifest.releaseId;
@@ -177239,7 +177409,7 @@ async function producedWidgetFamilies(dir) {
177239
177409
  let js2;
177240
177410
  for (const candidate of [`${name}.bundle.js`, `${name}.js`, name]) {
177241
177411
  try {
177242
- js2 = readFileSync97(join81(outDir, candidate), "utf8");
177412
+ js2 = readFileSync98(join82(outDir, candidate), "utf8");
177243
177413
  break;
177244
177414
  } catch {
177245
177415
  }
@@ -177270,7 +177440,7 @@ async function producedWidgetFamilies(dir) {
177270
177440
  }
177271
177441
  return { families, source: "dist/bundles" };
177272
177442
  }
177273
- var boardOpen = (dir) => existsSync80(join81(dir, ".himi", "studio", "index.html"));
177443
+ var boardOpen = (dir) => existsSync80(join82(dir, ".himi", "studio", "index.html"));
177274
177444
  var BOARD_REFRESHERS = /* @__PURE__ */ new Set(["render", "test", "validate", "build", "push", "icon", "site", "ux", "progress"]);
177275
177445
  async function leaveForBoard(dir, record2, value) {
177276
177446
  if (!boardOpen(dir)) return;
@@ -177294,7 +177464,7 @@ async function liveMapFor(dir) {
177294
177464
  }
177295
177465
  var commandScratch = new AsyncLocalStorage2();
177296
177466
  function commandScratchDir(prefix) {
177297
- const dir = mkdtempSync5(join81(tmpdir6(), prefix));
177467
+ const dir = mkdtempSync5(join82(tmpdir6(), prefix));
177298
177468
  commandScratch.getStore()?.push(dir);
177299
177469
  return dir;
177300
177470
  }
@@ -177648,7 +177818,7 @@ himi v${cliVersion()} \u2014 run \`himi --version\`. If authoring commands fail
177648
177818
  const owed = openApprovals2(readApprovals2(dir).events).length;
177649
177819
  next.push(`carried the planning journal into the app (${carried.join(", ")}${owed ? `; ${owed} approval${owed === 1 ? "" : "s"} still owed` : ""}) \u2014 \`himi progress --brief\` there shows it`);
177650
177820
  }
177651
- const planInParent = ["SPEC.md", "MOBILE-UX.md"].filter((f2) => existsSync80(join81(parentDir, f2)));
177821
+ const planInParent = ["SPEC.md", "MOBILE-UX.md"].filter((f2) => existsSync80(join82(parentDir, f2)));
177652
177822
  if (planInParent.length) {
177653
177823
  next.push(`${planInParent.join(" and ")} in ${parentDir} ${planInParent.length > 1 ? "are" : "is"} not the app's \u2014 if that is the approved plan, move it over the template's boilerplate in ${dir}`);
177654
177824
  }
@@ -177809,13 +177979,13 @@ ${doNow.map((l2) => ` ${l2}`).join("\n")}`);
177809
177979
  if (adding) {
177810
177980
  const from = str9(flags.from);
177811
177981
  if (!from) throw new TrimRefusal2('--add <id> needs --from <file> holding the whole new SCREENS entry (` "<id>": { "screenId": "<id>", \u2026 },`)');
177812
- print(adopt.addScreen(dir, adding, readFileSync97(from, "utf8"), { parent: str9(flags.parent), tab: str9(flags.tab), displayName: str9(flags["display-name"]) }));
177982
+ print(adopt.addScreen(dir, adding, readFileSync98(from, "utf8"), { parent: str9(flags.parent), tab: str9(flags.tab), displayName: str9(flags["display-name"]) }));
177813
177983
  return 0;
177814
177984
  }
177815
177985
  if (target) {
177816
177986
  const from = str9(flags.from);
177817
177987
  if (!from) throw new TrimRefusal2("--write <id> needs --from <file> holding the whole entry, as --show prints it");
177818
- print(adopt.replaceScreen(dir, target, readFileSync97(from, "utf8")));
177988
+ print(adopt.replaceScreen(dir, target, readFileSync98(from, "utf8")));
177819
177989
  return 0;
177820
177990
  }
177821
177991
  if (show) {
@@ -177897,7 +178067,7 @@ ${doNow.map((l2) => ` ${l2}`).join("\n")}`);
177897
178067
  const { keepFromSpec: keepFromSpec2 } = await Promise.resolve().then(() => (init_template_adopt(), template_adopt_exports));
177898
178068
  const dir = contentDir(flags);
177899
178069
  try {
177900
- const spec = keepFromSpec2(dir, str9(flags["from-spec"]) ?? join81(dir, "SPEC.md"));
178070
+ const spec = keepFromSpec2(dir, str9(flags["from-spec"]) ?? join82(dir, "SPEC.md"));
177901
178071
  const own4 = typeof keep === "string" ? keep.split(",").map((k2) => k2.trim()).filter(Boolean) : [];
177902
178072
  keep = [.../* @__PURE__ */ new Set([...spec.keep, ...own4])].join(",");
177903
178073
  fromSpec = { fromSpec: {
@@ -177938,7 +178108,7 @@ ${doNow.map((l2) => ` ${l2}`).join("\n")}`);
177938
178108
  const result = { ...outcome.result, ...fromSpec };
177939
178109
  const adoptDir = contentDir(flags);
177940
178110
  const kept = flags["dry-run"] !== true && (outcome.code === 0 || outcome.result.forcedKeep === true);
177941
- if (kept && existsSync80(join81(adoptDir, adoptBits.ADOPT_FILE))) {
178111
+ if (kept && existsSync80(join82(adoptDir, adoptBits.ADOPT_FILE))) {
177942
178112
  try {
177943
178113
  const inv = adoptBits.inspectApp(adoptDir);
177944
178114
  adoptBits.writeInventory(adoptDir, inv, { companions: "if-missing" });
@@ -177967,7 +178137,7 @@ ${doNow.map((l2) => ` ${l2}`).join("\n")}`);
177967
178137
  const sourceDir = resolve60(str9(flags["source-dir"]) ?? appDir3);
177968
178138
  let meta;
177969
178139
  try {
177970
- meta = JSON.parse(readFileSync97(join81(sourceDir, TEMPLATE_META_FILE), "utf8"));
178140
+ meta = JSON.parse(readFileSync98(join82(sourceDir, TEMPLATE_META_FILE), "utf8"));
177971
178141
  } catch {
177972
178142
  io2.error(JSON.stringify({ error: `no ${TEMPLATE_META_FILE} in ${sourceDir} \u2014 a template must declare { title, description, tags } to be published`, hint: `add ${TEMPLATE_META_FILE} next to himalaya.content.json (or pass --source-dir <dir>)` }));
177973
178143
  return 2;
@@ -177977,7 +178147,7 @@ ${doNow.map((l2) => ` ${l2}`).join("\n")}`);
177977
178147
  return 2;
177978
178148
  }
177979
178149
  try {
177980
- const appearance = extractTemplateAppearance(JSON.parse(readFileSync97(join81(sourceDir, "tokens.json"), "utf8")));
178150
+ const appearance = extractTemplateAppearance(JSON.parse(readFileSync98(join82(sourceDir, "tokens.json"), "utf8")));
177981
178151
  meta = { ...appearance, ...meta };
177982
178152
  } catch {
177983
178153
  }
@@ -177999,7 +178169,7 @@ ${doNow.map((l2) => ` ${l2}`).join("\n")}`);
177999
178169
  const force = flags.force === true;
178000
178170
  const { buildContentForValidation: buildContentForValidation2, buildReleaseFromContent: buildReleaseFromContent2, bundleOutDir: bundleOutDir2 } = await loadAuthoring();
178001
178171
  const bres = await buildContentForValidation2(buildDir, { resolution: resolutionFlag(flags) });
178002
- const out2 = mkdtempSync5(join81(tmpdir6(), "himi-template-"));
178172
+ const out2 = mkdtempSync5(join82(tmpdir6(), "himi-template-"));
178003
178173
  publishScratch.push(out2);
178004
178174
  const hasWorkers = bres.built.length > 0 || bres.compileErrors.length > 0;
178005
178175
  const outcome = await buildReleaseFromContent2(buildDir, out2, {
@@ -178056,7 +178226,7 @@ ${doNow.map((l2) => ` ${l2}`).join("\n")}`);
178056
178226
  let iconHash;
178057
178227
  if (iconPath) {
178058
178228
  try {
178059
- const bytes2 = readFileSync97(iconPath);
178229
+ const bytes2 = readFileSync98(iconPath);
178060
178230
  payload.icon = bytes2.toString("base64");
178061
178231
  iconHash = createHash41("sha256").update(bytes2).digest("hex");
178062
178232
  } catch {
@@ -178355,7 +178525,7 @@ ${doNow.map((l2) => ` ${l2}`).join("\n")}`);
178355
178525
  const path2 = dpxSessionTokenPath();
178356
178526
  let raw;
178357
178527
  try {
178358
- raw = readFileSync97(path2, "utf8");
178528
+ raw = readFileSync98(path2, "utf8");
178359
178529
  } catch {
178360
178530
  throw new Error(`no DPX BO session at ${path2}; run dpx auth login, write dpx auth token to that path, then himi login --dpx --target bo`);
178361
178531
  }
@@ -178489,8 +178659,8 @@ ${doNow.map((l2) => ` ${l2}`).join("\n")}`);
178489
178659
  const dir = resolve60(out2);
178490
178660
  const files = himiPluginFiles2(skills.skillMd);
178491
178661
  for (const f2 of files) {
178492
- mkdirSync41(dirname43(join81(dir, f2.path)), { recursive: true });
178493
- writeFileSync38(join81(dir, f2.path), f2.text);
178662
+ mkdirSync41(dirname43(join82(dir, f2.path)), { recursive: true });
178663
+ writeFileSync38(join82(dir, f2.path), f2.text);
178494
178664
  }
178495
178665
  print({ ok: true, dir, files: files.map((f2) => f2.path), next: [`claude plugin validate ${dir}`, `claude --plugin-dir ${dir}`] });
178496
178666
  return 0;
@@ -178507,13 +178677,13 @@ ${doNow.map((l2) => ` ${l2}`).join("\n")}`);
178507
178677
  case "studio": {
178508
178678
  const { openStudio: openStudio2 } = await Promise.resolve().then(() => (init_studio(), studio_exports));
178509
178679
  const dir = contentDir(flags);
178510
- if (!existsSync80(join81(dir, "himalaya.content.json"))) {
178680
+ if (!existsSync80(join82(dir, "himalaya.content.json"))) {
178511
178681
  io2.error(JSON.stringify({ ok: false, error: "not_a_content_package", dir, hint: "run from the app directory (or pass --content <dir>) \u2014 the board reads that package's .himi/" }));
178512
178682
  return 2;
178513
178683
  }
178514
178684
  if (pos[1] === "reel") {
178515
178685
  const { buildReel: buildReel2 } = await Promise.resolve().then(() => (init_studio_reel(), studio_reel_exports));
178516
- const out2 = resolve60(str9(flags.out) ?? join81(dir, ".himi", "making-of.html"));
178686
+ const out2 = resolve60(str9(flags.out) ?? join82(dir, ".himi", "making-of.html"));
178517
178687
  const { html, plan } = buildReel2(dir);
178518
178688
  mkdirSync41(dirname43(out2), { recursive: true });
178519
178689
  writeFileSync38(out2, html);
@@ -178585,7 +178755,7 @@ ${handover.hint[0].toUpperCase()}${handover.hint.slice(1)}.`);
178585
178755
  } = await Promise.resolve().then(() => (init_progress(), progress_exports));
178586
178756
  const dir = contentDir(flags);
178587
178757
  const journal2 = journalPath2(dir);
178588
- const isContentPackage = existsSync80(join81(dir, "himalaya.content.json"));
178758
+ const isContentPackage = existsSync80(join82(dir, "himalaya.content.json"));
178589
178759
  const hint = isContentPackage ? {} : { hint: "no himalaya.content.json here \u2014 run from the app directory (or pass --content <dir>) so the build board finds this journal" };
178590
178760
  const message = pos.slice(1).join(" ").trim();
178591
178761
  const approvalFlags = ["approve", "done", "drop"].filter((f2) => flags[f2] !== void 0);
@@ -178737,7 +178907,7 @@ ${handover.hint[0].toUpperCase()}${handover.hint.slice(1)}.`);
178737
178907
  case "test": {
178738
178908
  const dir = contentDir(flags);
178739
178909
  const structuredOutput = flags.json === true || io2.isTTY !== true;
178740
- if (existsSync80(join81(dir, "functions"))) {
178910
+ if (existsSync80(join82(dir, "functions"))) {
178741
178911
  const { invokeLocalFunction: invokeLocalFunction2, loadFunctionsApp: loadFunctionsApp2 } = await Promise.resolve().then(() => (init_functions(), functions_exports));
178742
178912
  const loaded = await loadFunctionsApp2(dir);
178743
178913
  const results = [];
@@ -178869,7 +179039,7 @@ ${handover.hint[0].toUpperCase()}${handover.hint.slice(1)}.`);
178869
179039
  io2.error(JSON.stringify({ error: `screen "${screen.screenId}" has no Tier-5 worker, so there is nothing for the browser loop to build` }));
178870
179040
  return 2;
178871
179041
  }
178872
- const sources = collectWorkerSources2(join81(dir, "tier5-src"), screen.bundleName);
179042
+ const sources = collectWorkerSources2(join82(dir, "tier5-src"), screen.bundleName);
178873
179043
  if (!sources) {
178874
179044
  io2.error(JSON.stringify({ error: `no worker source found at tier5-src/${screen.bundleName} \u2014 the browser loop compiles SOURCE, not the built bundle` }));
178875
179045
  return 2;
@@ -179047,7 +179217,7 @@ ${handover.hint[0].toUpperCase()}${handover.hint.slice(1)}.`);
179047
179217
  const sp = await runShotsPass2({
179048
179218
  descriptors: scopeDescriptors2(outcome.descriptors ?? [], pos.slice(1), invalidScreens),
179049
179219
  tokens: outcome.tokens,
179050
- outDir: join81(dir, ".himi", "shots"),
179220
+ outDir: join82(dir, ".himi", "shots"),
179051
179221
  width: 390,
179052
179222
  layers: { rules: shotRules, ...cmsSeed ? { cmsSeed } : {}, ...canned ? { canned: canned.byKey } : {} },
179053
179223
  ...budgetMs ? { budgetMs } : {},
@@ -179087,7 +179257,7 @@ ${handover.hint[0].toUpperCase()}${handover.hint.slice(1)}.`);
179087
179257
  releaseId: result.releaseId,
179088
179258
  releasePayload: release2,
179089
179259
  descriptors: attestedDescriptors,
179090
- screenshots: Object.fromEntries(writtenShots.filter((name) => crawledScreens.has(name.replace(/\.png$/, ""))).map((name) => [name.replace(/\.png$/, ""), join81(dir, ".himi", "shots", name)])),
179260
+ screenshots: Object.fromEntries(writtenShots.filter((name) => crawledScreens.has(name.replace(/\.png$/, ""))).map((name) => [name.replace(/\.png$/, ""), join82(dir, ".himi", "shots", name)])),
179091
179261
  coverage: {
179092
179262
  screens: crawledScreens.size,
179093
179263
  actionsDispatched: result.actions.exercised,
@@ -179212,7 +179382,7 @@ ${[...afterRun.next, ...testReminder ? [testReminder] : []].join("\n")}`);
179212
179382
  return 2;
179213
179383
  }
179214
179384
  try {
179215
- const raw = stateArg.trim().startsWith("{") ? stateArg : readFileSync97(stateArg.replace(/^@/, ""), "utf8");
179385
+ const raw = stateArg.trim().startsWith("{") ? stateArg : readFileSync98(stateArg.replace(/^@/, ""), "utf8");
179216
179386
  injectedState = JSON.parse(raw);
179217
179387
  } catch (e2) {
179218
179388
  io2.error(JSON.stringify({ error: `--state must be inline JSON or a path to a .json file \u2014 ${e2.message}` }));
@@ -179227,7 +179397,7 @@ ${[...afterRun.next, ...testReminder ? [testReminder] : []].join("\n")}`);
179227
179397
  return 2;
179228
179398
  }
179229
179399
  try {
179230
- const raw = inputArg.trim().startsWith("{") ? inputArg : readFileSync97(inputArg.replace(/^@/, ""), "utf8");
179400
+ const raw = inputArg.trim().startsWith("{") ? inputArg : readFileSync98(inputArg.replace(/^@/, ""), "utf8");
179231
179401
  const parsed = JSON.parse(raw);
179232
179402
  if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) throw new Error("must be a JSON object");
179233
179403
  injectedInput = parsed;
@@ -179309,7 +179479,7 @@ ${[...afterRun.next, ...testReminder ? [testReminder] : []].join("\n")}`);
179309
179479
  const diagnostics = (outcome.lint ?? []).find((s2) => s2.screenId === screenId)?.issues ?? [];
179310
179480
  let pngFile;
179311
179481
  let attestationPngFile;
179312
- const shotPath = join81(dir, ".himi", "shots", `${screenId}.png`);
179482
+ const shotPath = join82(dir, ".himi", "shots", `${screenId}.png`);
179313
179483
  const pngTarget = typeof flags.png === "string" ? str9(flags.png) : flags.png === true ? shotPath : void 0;
179314
179484
  if (pngTarget && r2.pngBase64) {
179315
179485
  pngFile = writePngFile(pngTarget, r2.pngBase64);
@@ -179681,7 +179851,7 @@ default (no --glyph): ${DEFAULT_GLYPH2} \u2014 a mark that claims nothing, so th
179681
179851
  io2.error(JSON.stringify({ error: `${dest} already exists and is not empty`, hint: "pass --force to write into it anyway (merging, and naming what it keeps), --replace to restore exactly what was archived, or --out/--name to land somewhere else" }));
179682
179852
  return 1;
179683
179853
  }
179684
- if (replace && occupied && !existsSync80(join81(dest, "himalaya.content.json"))) {
179854
+ if (replace && occupied && !existsSync80(join82(dest, "himalaya.content.json"))) {
179685
179855
  io2.error(JSON.stringify({
179686
179856
  error: `${dest} is not a content package \u2014 refusing to --replace it`,
179687
179857
  hint: "--replace only clears a directory that holds himalaya.content.json. Check --out/--name, or pass --force to merge into it instead."
@@ -180389,7 +180559,7 @@ default (no --glyph): ${DEFAULT_GLYPH2} \u2014 a mark that claims nothing, so th
180389
180559
  }
180390
180560
  const { buildContentForValidation: buildContentForValidation2, buildReleaseFromContent: buildReleaseFromContent2, bundleOutDir: bundleOutDir2 } = await loadAuthoring();
180391
180561
  const bres = await buildContentForValidation2(dir, { resolution: resolutionFlag(flags) });
180392
- const built = mkdtempSync5(join81(tmpdir6(), "himi-pack-"));
180562
+ const built = mkdtempSync5(join82(tmpdir6(), "himi-pack-"));
180393
180563
  const hasWorkers = bres.built.length > 0 || bres.compileErrors.length > 0;
180394
180564
  const outcome = await buildReleaseFromContent2(dir, built, {
180395
180565
  ...hasWorkers ? { tier5Dir: bundleOutDir2(dir) } : {},
@@ -180596,7 +180766,7 @@ default (no --glyph): ${DEFAULT_GLYPH2} \u2014 a mark that claims nothing, so th
180596
180766
  }));
180597
180767
  return 1;
180598
180768
  }
180599
- const archive = readFileSync97(resolve60(file2));
180769
+ const archive = readFileSync98(resolve60(file2));
180600
180770
  const result = await client2().createPackageShare({
180601
180771
  app: opened.header.app,
180602
180772
  releaseId: opened.header.releaseId,
@@ -180693,11 +180863,11 @@ default (no --glyph): ${DEFAULT_GLYPH2} \u2014 a mark that claims nothing, so th
180693
180863
  const app = await appId(dir2);
180694
180864
  const { buildContentBundles: buildContentBundles2, buildReleaseFromContent: buildReleaseFromContent2, bundleOutDir: bundleOutDir2 } = await loadAuthoring();
180695
180865
  const bres = await buildContentBundles2(dir2, { resolution: resolutionFlag(flags) });
180696
- temp = mkdtempSync5(join81(tmpdir6(), "himi-run-build-"));
180866
+ temp = mkdtempSync5(join82(tmpdir6(), "himi-run-build-"));
180697
180867
  const hasWorkers = bres.built.length > 0 || bres.compileErrors.length > 0;
180698
180868
  const initial = await buildReleaseFromContent2(dir2, temp, { ...hasWorkers ? { tier5Dir: bundleOutDir2(dir2) } : {} });
180699
180869
  servedMissing = initial.missingBundles;
180700
- source = join81(temp, app);
180870
+ source = join82(temp, app);
180701
180871
  }
180702
180872
  const chromeArg = str9(flags.chrome) ?? "preview";
180703
180873
  if (chromeArg !== "preview" && chromeArg !== "app") {
@@ -180736,7 +180906,7 @@ default (no --glyph): ${DEFAULT_GLYPH2} \u2014 a mark that claims nothing, so th
180736
180906
  if (!recordKit) return;
180737
180907
  startedAt = (/* @__PURE__ */ new Date()).toISOString();
180738
180908
  const failure = record2(served2, { ok: true, at: startedAt });
180739
- if (!recorded) io2.error(JSON.stringify({ run: "run_record_skipped", message: `${failure ?? `${join81(dir, ".himi")} is not a real directory`}, so the build board will not frame this preview.` }));
180909
+ if (!recorded) io2.error(JSON.stringify({ run: "run_record_skipped", message: `${failure ?? `${join82(dir, ".himi")} is not a real directory`}, so the build board will not frame this preview.` }));
180740
180910
  await refreshBoard();
180741
180911
  };
180742
180912
  const retract = async () => {
@@ -180772,7 +180942,7 @@ default (no --glyph): ${DEFAULT_GLYPH2} \u2014 a mark that claims nothing, so th
180772
180942
  const watchKit = watch2 ? await Promise.resolve().then(() => (init_run_watch(), run_watch_exports)) : null;
180773
180943
  const hhpPreviewRoute = watch2 ? (await Promise.resolve().then(() => (init_hhp_preview(), hhp_preview_exports))).hhpPreviewResponse : null;
180774
180944
  const bus = watchKit ? new watchKit.ReloadBus() : void 0;
180775
- if (watch2) served = mkdtempSync5(join81(tmpdir6(), "himi-run-served-"));
180945
+ if (watch2) served = mkdtempSync5(join82(tmpdir6(), "himi-run-served-"));
180776
180946
  const running = await runPackage2(source, {
180777
180947
  port,
180778
180948
  chrome: chromeArg,
@@ -180801,8 +180971,8 @@ default (no --glyph): ${DEFAULT_GLYPH2} \u2014 a mark that claims nothing, so th
180801
180971
  await announce(running);
180802
180972
  if (watchKit && bus) {
180803
180973
  const { buildContentBundles: buildContentBundles2, buildReleaseFromContent: buildReleaseFromContent2, bundleOutDir: bundleOutDir2 } = await loadAuthoring();
180804
- const live3 = join81(running.releaseRoot, running.app);
180805
- const manifestOf = (tree) => JSON.parse(readFileSync97(join81(tree, "release-manifest.json"), "utf8"));
180974
+ const live3 = join82(running.releaseRoot, running.app);
180975
+ const manifestOf = (tree) => JSON.parse(readFileSync98(join82(tree, "release-manifest.json"), "utf8"));
180806
180976
  let current = manifestOf(live3);
180807
180977
  const failed3 = async (message) => {
180808
180978
  if (stopping) return;
@@ -180813,7 +180983,7 @@ default (no --glyph): ${DEFAULT_GLYPH2} \u2014 a mark that claims nothing, so th
180813
180983
  };
180814
180984
  rebuild = watchKit.serialize(async () => {
180815
180985
  const t0 = Date.now();
180816
- const next = mkdtempSync5(join81(tmpdir6(), "himi-run-build-"));
180986
+ const next = mkdtempSync5(join82(tmpdir6(), "himi-run-build-"));
180817
180987
  try {
180818
180988
  const bres = await buildContentBundles2(dir, { resolution: resolutionFlag(flags) });
180819
180989
  if (bres.compileErrors.length) {
@@ -180830,16 +181000,16 @@ default (no --glyph): ${DEFAULT_GLYPH2} \u2014 a mark that claims nothing, so th
180830
181000
  return;
180831
181001
  }
180832
181002
  if (stopping) return;
180833
- const fresh = manifestOf(join81(next, running.app));
181003
+ const fresh = manifestOf(join82(next, running.app));
180834
181004
  const diff = watchKit.diffReleases(current, fresh);
180835
181005
  const { describeChanges: describeChanges2, headline: headline2 } = await Promise.resolve().then(() => (init_build_changes(), build_changes_exports));
180836
- const changes = describeChanges2(live3, join81(next, running.app), diff);
181006
+ const changes = describeChanges2(live3, join82(next, running.app), diff);
180837
181007
  const retired = `${live3}.retired-${Date.now()}`;
180838
181008
  renameSync12(live3, retired);
180839
181009
  try {
180840
- renameSync12(join81(next, running.app), live3);
181010
+ renameSync12(join82(next, running.app), live3);
180841
181011
  } catch {
180842
- cpSync3(join81(next, running.app), live3, { recursive: true });
181012
+ cpSync3(join82(next, running.app), live3, { recursive: true });
180843
181013
  }
180844
181014
  rmSync22(retired, { recursive: true, force: true });
180845
181015
  current = fresh;
@@ -181522,7 +181692,7 @@ default (no --glyph): ${DEFAULT_GLYPH2} \u2014 a mark that claims nothing, so th
181522
181692
  lintNote: "`himi patch` sends a raw file. Nothing here built or linted your app \u2014 `himi push --only <selector>` is the same edit with the full lint gate in front of it."
181523
181693
  };
181524
181694
  if (kind === "tokens" || kind === "app-config") {
181525
- const body = readFileSync97(file2, "utf8");
181695
+ const body = readFileSync98(file2, "utf8");
181526
181696
  const patch2 = kind === "tokens" ? { tokens: body } : { appConfig: body };
181527
181697
  return runReleasePatch({
181528
181698
  ...common,
@@ -181537,7 +181707,7 @@ default (no --glyph): ${DEFAULT_GLYPH2} \u2014 a mark that claims nothing, so th
181537
181707
  io2.error(JSON.stringify({ error: "patch screen needs a <screenId>", usage: PATCH_USAGE }));
181538
181708
  return 2;
181539
181709
  }
181540
- const descriptor = readFileSync97(file2, "utf8");
181710
+ const descriptor = readFileSync98(file2, "utf8");
181541
181711
  try {
181542
181712
  JSON.parse(descriptor);
181543
181713
  } catch (e2) {
@@ -181577,7 +181747,7 @@ default (no --glyph): ${DEFAULT_GLYPH2} \u2014 a mark that claims nothing, so th
181577
181747
  extra: { kind, screen: id, file: { path: file2, bytes: Buffer.byteLength(descriptor, "utf8") } }
181578
181748
  });
181579
181749
  }
181580
- const bytes2 = readFileSync97(file2);
181750
+ const bytes2 = readFileSync98(file2);
181581
181751
  const sha2 = createHash41("sha256").update(bytes2).digest("hex");
181582
181752
  const forScreens = (str9(flags["for-screen"]) ?? "").split(",").map((s2) => s2.trim()).filter(Boolean);
181583
181753
  if (flags["no-rebind"] !== void 0 && flags["no-rebind"] !== true) {
@@ -181721,7 +181891,7 @@ default (no --glyph): ${DEFAULT_GLYPH2} \u2014 a mark that claims nothing, so th
181721
181891
  }
181722
181892
  let def;
181723
181893
  try {
181724
- const parsed = JSON.parse(arg.startsWith("@") ? readFileSync97(arg.slice(1), "utf8") : arg);
181894
+ const parsed = JSON.parse(arg.startsWith("@") ? readFileSync98(arg.slice(1), "utf8") : arg);
181725
181895
  if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
181726
181896
  io2.error(JSON.stringify({ error: "invalid_definition", problems: [`--definition must be a JSON object, got ${Array.isArray(parsed) ? "an array" : parsed === null ? "null" : typeof parsed}`] }));
181727
181897
  return 2;
@@ -182003,7 +182173,7 @@ default (no --glyph): ${DEFAULT_GLYPH2} \u2014 a mark that claims nothing, so th
182003
182173
  const rememberLastDist = async (jobs2) => {
182004
182174
  try {
182005
182175
  const dir = contentDir(flags);
182006
- if (!existsSync80(join81(dir, "himalaya.content.json"))) return;
182176
+ if (!existsSync80(join82(dir, "himalaya.content.json"))) return;
182007
182177
  const { lastDistFromJob: lastDistFromJob2, writeLastDist: writeLastDist2 } = await Promise.resolve().then(() => (init_capabilities(), capabilities_exports));
182008
182178
  const own4 = await appId(dir);
182009
182179
  for (const job of jobs2) {
@@ -182241,7 +182411,7 @@ ${label2}`);
182241
182411
  const platform = str9(flags.platform)?.split(",").map((p2) => p2.trim()).filter(Boolean);
182242
182412
  {
182243
182413
  const distDir = contentDir(flags);
182244
- if (existsSync80(join81(distDir, "himalaya.content.json"))) {
182414
+ if (existsSync80(join82(distDir, "himalaya.content.json"))) {
182245
182415
  const issues = await iconIssues(distDir, flags.strict === true, { requireDeclared: true, requireVerified: true });
182246
182416
  const errors = issues.filter((i2) => i2.severity === "error");
182247
182417
  for (const i2 of issues.filter((i3) => i3.severity === "warning")) {
@@ -182580,7 +182750,7 @@ ${label2}`);
182580
182750
  const dpxPath = dpxSessionTokenPath();
182581
182751
  let dpx;
182582
182752
  try {
182583
- dpx = readFileSync97(dpxPath, "utf8").trim();
182753
+ dpx = readFileSync98(dpxPath, "utf8").trim();
182584
182754
  } catch {
182585
182755
  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` }));
182586
182756
  return 1;
@@ -183001,7 +183171,7 @@ ${report3.ok ? "OK \u2014 data + serve plane reachable." : typeof report3.hint =
183001
183171
  const path2 = dpxSessionTokenPath();
183002
183172
  let raw;
183003
183173
  try {
183004
- raw = readFileSync97(path2, "utf8");
183174
+ raw = readFileSync98(path2, "utf8");
183005
183175
  } catch {
183006
183176
  io2.error(JSON.stringify({ error: `no DPX BO session at ${path2}` }));
183007
183177
  return 1;