@wix/himalaya-cli 0.1186.0 → 0.1188.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 (60) hide show
  1. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/dev-server/src/app-config.d.ts +1 -0
  2. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/dev-server/src/app-module.d.ts +2 -0
  3. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/sdk/sdk-types/src/capabilities.generated.d.ts +3 -0
  4. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/ts/src/define-app.d.ts +8 -0
  5. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/core/ts/src/site-shell.d.ts +10 -0
  6. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/core.mjs +4 -0
  7. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/sdui.mjs +1 -0
  8. package/dist/cli.mjs +1647 -719
  9. package/dist/preview-assets.generated.bin +0 -0
  10. package/guides/app-config.md +11 -1
  11. package/guides/capabilities.md +141 -0
  12. package/guides/himi-test.md +31 -0
  13. package/guides/index.json +7 -1
  14. package/guides/qa-builds.md +1 -1
  15. package/package.json +2 -2
  16. package/templates/beauty-salon/dev/index.ts +6 -3
  17. package/templates/beauty-salon/himalaya.content.json +2 -1
  18. package/templates/beauty-salon-owner/dev/index.ts +2 -1
  19. package/templates/beauty-salon-owner/himalaya.content.json +2 -1
  20. package/templates/branded-lite/dev/index.ts +10 -5
  21. package/templates/branded-lite/himalaya.content.json +2 -1
  22. package/templates/brandy/himalaya.content.json +2 -1
  23. package/templates/community-club/dev/index.ts +2 -1
  24. package/templates/community-club/himalaya.content.json +2 -1
  25. package/templates/community-club-owner/dev/index.ts +2 -1
  26. package/templates/community-club-owner/himalaya.content.json +2 -1
  27. package/templates/events-meetups/dev/index.ts +2 -1
  28. package/templates/events-meetups/himalaya.content.json +2 -1
  29. package/templates/events-meetups-owner/dev/index.ts +2 -1
  30. package/templates/events-meetups-owner/himalaya.content.json +2 -1
  31. package/templates/gym-fitness/dev/index.ts +8 -4
  32. package/templates/gym-fitness/himalaya.content.json +2 -1
  33. package/templates/gym-fitness-owner/dev/index.ts +2 -1
  34. package/templates/gym-fitness-owner/himalaya.content.json +2 -1
  35. package/templates/nonprofit-cause/dev/index.ts +4 -2
  36. package/templates/nonprofit-cause/himalaya.content.json +2 -1
  37. package/templates/nonprofit-cause-owner/dev/index.ts +2 -1
  38. package/templates/nonprofit-cause-owner/himalaya.content.json +2 -1
  39. package/templates/owner-lite/dev/index.ts +2 -1
  40. package/templates/owner-lite/himalaya.content.json +2 -1
  41. package/templates/podcast-creator/dev/index.ts +4 -2
  42. package/templates/podcast-creator/himalaya.content.json +2 -1
  43. package/templates/podcast-creator-owner/dev/index.ts +2 -1
  44. package/templates/podcast-creator-owner/himalaya.content.json +2 -1
  45. package/templates/portfolio-creative/dev/index.ts +4 -2
  46. package/templates/portfolio-creative/himalaya.content.json +2 -1
  47. package/templates/portfolio-creative-owner/dev/index.ts +2 -1
  48. package/templates/portfolio-creative-owner/himalaya.content.json +2 -1
  49. package/templates/restaurant/dev/index.ts +2 -1
  50. package/templates/restaurant/himalaya.content.json +2 -1
  51. package/templates/restaurant-owner/dev/index.ts +2 -1
  52. package/templates/restaurant-owner/himalaya.content.json +2 -1
  53. package/templates/retail-store/dev/index.ts +2 -1
  54. package/templates/retail-store/himalaya.content.json +2 -1
  55. package/templates/retail-store-owner/dev/index.ts +2 -1
  56. package/templates/retail-store-owner/himalaya.content.json +2 -1
  57. package/templates/yoga-studio/dev/index.ts +8 -4
  58. package/templates/yoga-studio/himalaya.content.json +2 -1
  59. package/templates/yoga-studio-owner/dev/index.ts +2 -1
  60. package/templates/yoga-studio-owner/himalaya.content.json +2 -1
Binary file
@@ -109,6 +109,12 @@ worker may use. Enforcement is **fail-closed** at two layers (SDK import + nativ
109
109
  undeclared `capability.*` call is blocked at runtime. A worker hitting the Wix transport must
110
110
  declare `wix_api`; the Wix Platform facade needs `wix_platform`.
111
111
 
112
+ Every id a screen declares belongs in `config.ts` `capabilities` too: that app-level list is
113
+ what a binary for the app is built with (usage strings, entitlements, permissions), and a capability
114
+ with a native footprint only arrives with a new binary. `himi docs capabilities` walks the whole
115
+ loop — discover, declare, validate, ship — and `himi capabilities <id>` shows the import and which
116
+ shells' binaries serve it.
117
+
112
118
  App-level capability vocabulary: `camera`, `barcode_scanner`, `biometrics`, `secure_storage`, `share`, `push`, `file_picker`, `files`, `open_url`, `pdf`, `clipboard`, `photos`, `presigned_upload`, `ui`, `calendar`, `contacts`, `tasks`, `audio_record`, `audio_record_background`, `calls`, `location`, `location_background`, `motion`, `media_playback`, `webview`, `browser_auth`, `haptic`, `himi_apps`, `iap`, `keyboard`, `wix_cashier`, `live_activity`, `local_database`, `speech`, `speaker_diarization`, `system_intents`, `on_device_ai`, `app_info`, `release_control`, `godot`, `base44`.
113
119
 
114
120
  ## What `himi validate` checks (7 passes)
@@ -119,7 +125,11 @@ App-level capability vocabulary: `camera`, `barcode_scanner`, `biometrics`, `sec
119
125
  2. **bindings** — every `$service:<svc>.<path>` must resolve to a service the worker exports.
120
126
  3. **strict-enum** — a `$service`/`$flag`/`$item` placeholder in an enum-typed field is ALWAYS
121
127
  an error (native decode fails before substitution and kills the screen).
122
- 4. **capabilities** — a worker using the Wix transport must declare `wix_api`.
128
+ 4. **capabilities** — a worker using the Wix transport must declare `wix_api`; an unknown id is an
129
+ error; a bundle calling a capability its screen does not declare, a screen-declared id missing
130
+ from `config.ts` `capabilities`, and (with `shell` in himalaya.content.json) an id that shell's
131
+ binary does not serve are warnings; `--strict` promotes only the undeclared call (the binary
132
+ checks stay warnings), and a mismatch with the shared Player binary is always an error.
123
133
  5. **dynamic-structure governance** — at most one `WorkerSubtree` per screen, and only when that
124
134
  screen is listed in `workerSubtreeScreens`; the component's policy/fallback validation remains
125
135
  fail-closed.
@@ -0,0 +1,141 @@
1
+ # Native capabilities — camera, location, push, and the rest
2
+
3
+ A worker reaches the device through **capabilities**: `@himalaya/camera` takes a photo,
4
+ `@himalaya/location` reads a position, `@himalaya/push` asks for notification permission. Each
5
+ capability has two halves, and only one of them ships over the air:
6
+
7
+ | Half | Lives in | Changes with |
8
+ |---|---|---|
9
+ | The **worker** half — the import and the call | your content package | `himi push` (seconds) |
10
+ | The **binary** half — the native handler, plus the OS usage strings, entitlements and permissions | the installed app | a new binary (`himi dist`) |
11
+
12
+ So adding a capability is three questions: what do I import, where do I declare it, and was the
13
+ binary this app runs in built for it? `himi capabilities` answers all three.
14
+
15
+ ## 1. Discover
16
+
17
+ ```bash
18
+ himi capabilities # every id: import, native footprint, which shells serve it
19
+ himi capabilities camera # one id in full
20
+ himi capabilities --shell branded-lite # what that one binary serves
21
+ ```
22
+
23
+ ```
24
+ camera — import from @himalaya/camera
25
+ exports: capturePhoto, pickDocument, scanQR
26
+ declare: config.ts `capabilities` AND each calling screen's `logicBundle.declaredCapabilities`
27
+ binary: needs a NATIVE build — iOS NSCameraUsageDescription; Android android.permission.CAMERA …
28
+ shells: served by owner-lite, player; `himi dist` adds it to base44, branded-lite, brandy; NOT in the demo-app binary
29
+ ```
30
+
31
+ Agents: the same data is the `himi_capabilities` MCP tool. `himi sdk <name>` also prints the
32
+ capability a package dispatches.
33
+
34
+ A capability marked **native** (camera, location, photos, contacts, calendar, push, …) puts a
35
+ usage string, entitlement or permission into the binary. No over-the-air push can add one — only
36
+ a new binary can. A capability with no native footprint (share, clipboard, open_url,
37
+ local_database, …) works in any binary that registers its handler.
38
+
39
+ ## 2. Declare — in two places
40
+
41
+ ```ts
42
+ // tier5-src/notes/index.ts
43
+ import { capturePhoto } from "@himalaya/camera";
44
+ import { getCurrent } from "@himalaya/location";
45
+ ```
46
+
47
+ ```ts
48
+ // config.ts — the app-level list: what a binary for this app is built with
49
+ capabilities: ["push", "camera", "location"],
50
+ ```
51
+
52
+ ```jsonc
53
+ // the screen that runs the bundle — the runtime gate
54
+ "logicBundle": { "url": "…/v1/bundles/notes", "declaredCapabilities": ["camera", "location"] }
55
+ ```
56
+
57
+ The screen list is enforced at runtime: a call the screen did not declare is **denied**, and a
58
+ `try/catch` in the worker hides the denial. The app-level list is what the binary is built with,
59
+ so it must name every capability the app uses. A background variant (`location_background`,
60
+ `audio_record_background`) is declared instead of — and grants — its foreground capability.
61
+
62
+ ## 3. Check
63
+
64
+ ```bash
65
+ himi validate
66
+ ```
67
+
68
+ The `capabilities` pass reports:
69
+
70
+ - an **unknown id** (a typo such as `camara`) — an error, with a suggestion;
71
+ - a bundle that **calls a capability its screen does not declare**;
72
+ - a capability a screen declares that **`config.ts` `capabilities` is missing**;
73
+ - when the app names its shell, a capability **that shell's binary does not serve**.
74
+
75
+ An undeclared call is a warning, and an error under `--strict`. The last two describe the binary
76
+ rather than your content, so they stay warnings — except a mismatch with the shared Himi Player
77
+ binary, which is always an error: one binary hosts every app, and no content change can add to it.
78
+
79
+ Name the shell your app ships in once, in `himalaya.content.json`, and both `himi validate` and
80
+ `himi dist` use it:
81
+
82
+ ```json
83
+ { "name": "field-notes", "shell": "branded-lite" }
84
+ ```
85
+
86
+ (`--shell <name>` on either command overrides it for one run.)
87
+
88
+ ## 4. Test and preview
89
+
90
+ `himi test` boots every screen's real worker and dispatches its actions. A declared capability
91
+ answers with its "unavailable" result there, so the crawl checks that your worker handles a
92
+ declined camera or a missing position without breaking; a second pass then answers the modelled
93
+ ones (camera, location, photos, speech, …) with a SUCCESS result, so the code behind a granted
94
+ permission runs too. Two things in the `--json` report are about capabilities:
95
+
96
+ - a **`capability-undeclared`** finding for every call the screen's gate denied — even one your
97
+ worker caught, which on device looks like a dead button rather than an error;
98
+ - **`capabilityCoverage`**: each `capability.<id>.<verb>` your workers call, and what the crawl
99
+ answers it with — `success` (modelled), `store` (a real session store: `local_database`,
100
+ `secure_storage`), `unavailable-only` (no model yet, so only the declined path runs), or `denied`.
101
+ See [himi-test → Capabilities](himi-test.md#capabilities).
102
+
103
+ The bundle scan only ever **reports**: it never adds a capability to a screen's declaration. The
104
+ per-screen list is the authorization boundary, so a worker shared by two screens cannot widen the
105
+ one that never makes the call.
106
+
107
+ In the web preview, camera capture and geolocation use the browser's own file picker and location
108
+ prompt.
109
+
110
+ ## 5. Ship it
111
+
112
+ - **Worker-side changes** — a new call to a capability the installed binary already serves — go
113
+ out with `himi push`.
114
+ - **A capability the binary does not serve** needs a new binary, and on most shells `himi dist`
115
+ builds it for you. The per-app shells — `branded-lite`, `owner-lite`, `brandy`, `base44` — are
116
+ **extensible**: the build reads what your release declares (`config.ts` `capabilities` plus every
117
+ screen's `declaredCapabilities`), bakes their native config into the shell (iOS usage strings /
118
+ entitlements, Android permissions / features) and registers their handlers at boot.
119
+ `himi capabilities --shell <s>` shows such an id as `yes → dist`, and `himi validate` warns that
120
+ it "needs a new `himi dist`" — the installed binary cannot call it until you rebuild.
121
+ - **"needs a new binary".** A successful `himi dist` remembers what its binary was built with —
122
+ on the job (`buildCapabilities`) and in your package (`.himi/last-dist.json`). From then on
123
+ `himi push` prints `needs a new binary: <ids> — run himi dist` when the release declares an id
124
+ that build lacks, a following device's draft offer says the same, and `himi validate` compares
125
+ against that build rather than the committed shell.
126
+ - **Never a silent strip.** On iOS, a capability whose entitlement the signing profile cannot grant
127
+ fails the dist job, naming the capability — the binary would otherwise build green and fail on
128
+ the first call. The minted profile's Apple capabilities are derived from the build's own set.
129
+ - **Preview before you build:** `himi dist --plan` prints what the release declares, what the shell
130
+ already serves, what the build would add and the exact native delta. No job is started.
131
+ - **Write the permission prompt.** The OS shows a sentence when the app asks for camera, location,
132
+ photos, … Set it per capability in `config.ts` — `permissionCopy: { camera: "Scan a receipt to
133
+ attach it to an expense." }` — or the build uses a generic one, which App Review often rejects.
134
+ - **What a build cannot add.** `player` (Himi Player — one binary for every app) and `demo-app` are
135
+ fixed: a release declaring an id they do not serve is refused with `shell_capability_mismatch`,
136
+ naming shells that can carry it. On an extensible shell, an id with no core handler, or one that
137
+ needs wiring a build cannot do (`local_database` needs the app's data schema installed first,
138
+ `live_activity` a widget extension target, `base44` / `godot` an opt-in SDK, `wix_platform` boot
139
+ configuration), is refused with `unsupported_capability` and the reason. A shell that does not
140
+ carry a capability's usage string can crash the app at the permission prompt, which is why both
141
+ the build and `himi validate` check before you ship.
@@ -125,6 +125,7 @@ Only **unambiguous** defects, so a green run stays worth trusting:
125
125
  | `poll-action-missing` | error | A `_poll` directive every host will silently ignore — an action the bundle never declares, a malformed `action`, a missing `id`, or a non-positive `intervalMs`. Each ends the same way: a screen that never refreshes, with nothing saying why. Nothing in the descriptor names the polled action, so no static check can see it. (A merely too-small interval is legal — the host clamps it.) |
126
126
  | `no-request-issued` | **warning** | A worker that uses the Wix transport but never fetches — "the screen loaded with sample data." A warning: a conditional or tap-triggered fetch is legitimate. |
127
127
  | `native-decode-failed` | error | Under `--native`, the real Swift/Kotlin decoder rejected the baked descriptor bytes (one bad enum blanks the whole screen on device). |
128
+ | `capability-undeclared` | error | A `capability.<id>.<verb>` call the screen's gate denied — reported from the gate itself, so it is raised **even when the worker catches the rejection** (which on device leaves a control that silently does nothing). Fix: declare the id on that screen's `logicBundle.declaredCapabilities` and in `config.ts` `capabilities`. One per capability per screen. See [Capabilities](#capabilities). |
128
129
  | `journey-failed` | error | A `himi-test.json` journey named an action the screen lacks, threw, or never rendered its `expectText`. |
129
130
  | `inverse-pair-diverges` | **warning** | An action and the action that undoes it do not return to the state the boot settled on — `add` then `remove` leaving a different list, or a counter it forgot to put back. |
130
131
  | `refresh-not-idempotent` | **warning** | `refresh` from a fresh boot settles somewhere other than the boot did, on identical data — usually a refresh that appends instead of replacing. |
@@ -267,6 +268,36 @@ went unproven, it names the gap and pairs it with a himi command or a source edi
267
268
  derived from what actually ran, never homework. Assembly:
268
269
  `tools/himi-cli/src/coverage.ts`.
269
270
 
271
+ ## Capabilities
272
+
273
+ A `capability.*` call is answered twice. The main pass answers every granted one with `null` — the
274
+ device's "unavailable" arm — so a screen's declined-camera / no-position path is checked. The
275
+ capability-success pass then re-crawls each screen whose bundle calls a **modelled** capability
276
+ (audio-record, speech, on-device-ai, calls, media-playback, calendar, files, photos, pdf, share,
277
+ open-url, camera, location) with a success answer shaped exactly like the one its SDK binding
278
+ destructures, so the code behind a granted permission runs too. `local_database` and
279
+ `secure_storage` are served from a real session store on both passes.
280
+
281
+ `--json` carries what each call got as `capabilityCoverage`:
282
+
283
+ ```jsonc
284
+ "capabilityCoverage": {
285
+ "counts": { "success": 2, "store": 1, "unavailable-only": 1, "denied": 0 },
286
+ "calls": {
287
+ "capability.camera.capture": { "arm": "success", "screens": ["notes"] },
288
+ "capability.local_database.getAll": { "arm": "store", "screens": ["notes"] },
289
+ "capability.location.getCurrent": { "arm": "success", "screens": ["notes"] },
290
+ "capability.haptic.play": { "arm": "unavailable-only", "screens": ["notes"] }
291
+ }
292
+ }
293
+ ```
294
+
295
+ `unavailable-only` means no model exists yet, so only the declined path of that call has run;
296
+ `denied` means no screen running the call grants its id (each denial is also a
297
+ `capability-undeclared` finding), and `deniedOn` lists screens that deny a call others allow. The
298
+ map is static — it says what a call would be answered with, not that a tap reached it; the gap
299
+ ledger says that.
300
+
270
301
  ## Writes to Wix
271
302
 
272
303
  Every run lists what the app **writes** to the Wix site, per screen and action — the inventory an
package/guides/index.json CHANGED
@@ -23,7 +23,7 @@
23
23
  "Keep structure descriptor-authored: use FragmentSlot for enumerable variants and bound list/grid templates for repetition. Use WorkerSubtree only for runtime-unknowable structure, with an explicit screen allowlist, policy budgets, and shipped fallback.",
24
24
  "Bindings ($service:<svc>.<path>, $item.<field>, $flag:<key>) are plain strings in ANY prop — INCLUDING Modifiers token refs (background, color, tint), so a worker can drive per-item theming, not just text. They CANNOT target strict-enum fields (style, size, alignment, severity, presentation, …) — those fail at render, not validation.",
25
25
  "Workers are sandboxed: no DOM, no timers, no raw fetch. Produce state synchronously in actions; do not rely on an ambient refresh tick.",
26
- "Declare every capability a worker uses in logicBundle.declaredCapabilities (wix_platform, stream, camera, location, …) — undeclared calls are blocked. EXCEPTION: the Wix REST bridge (wix_api — the @himalaya/wix-* clients / wixApi.call) is ungated today (installed unconditionally), so it works WITHOUT a declaration; declaring wix_api is still recommended — it is where the platform is heading, and it documents what your worker touches.",
26
+ "Declare every capability a worker uses in TWO places: the calling screen's logicBundle.declaredCapabilities (wix_platform, stream, camera, location, …) — undeclared calls are blocked — AND config.ts `capabilities`, the app-level list a binary is built with. The `capabilities` guide shows each id's import, what the binary needs and which shells serve it; validate flags an unknown id, an undeclared call, and (with `shell` in himalaya.content.json) an id that shell's binary does not serve. A capability with a native footprint (camera, location, push, …) only arrives with a new binary — an over-the-air push cannot add it. EXCEPTION: the Wix REST bridge (wix_api — the @himalaya/wix-* clients / wixApi.call) is ungated today (installed unconditionally), so it works WITHOUT a declaration; declaring wix_api is still recommended — it is where the platform is heading, and it documents what your worker touches.",
27
27
  "`validate`/`render` prove a screen is WELL-FORMED and, by default, paint its INITIAL state — NOT that the app's LOGIC is correct. A wrong reducer (a game that never ends, a bad total) passes both with ok:true. Run `himi test`: it needs NO test files — it boots each screen's real worker and dispatches every action your descriptor already declares, then reports anything that threw, stayed stuck on `loading`, or leaked a NaN/undefined/`$service:` token into visible text. It crawls on HERMETIC DATA by default (zero network): your `dev/net-mocks.json` first, then your config's CMS `seed:` rows, then a canned fixture of frozen real vertical responses shipped with the CLI — so the fetch-SUCCESS mapping path runs too, where data-shape bugs actually live (canned data exercises code paths, not API-contract truth). Two boot-only HOSTILE passes (every list empty; every request 500) then check the empty/outage day — their findings are errors, not warnings. It also runs the worker in a DEVICE-PARITY sandbox (no setTimeout/setInterval, as on JSC/WebView), so a bundle that would only die on the device fails locally instead — e.g. `svc.actions.load(…)` (actions are DIRECT methods; `.actions` is undefined on device). (You are NOT limited to the crawled states either: rendering with `--live` runs the worker's REAL fetches against live Wix — a minted anonymous visitor token from the app's clientId — so a render CAN prove real-data binding locally with no VPN/push; and injecting `state` (`{\"<svc>\":{…}}`) renders a specific mid-flow state without the network.)",
28
28
  "User-facing copy is CONFIGURATION, never hardcoded in a descriptor: route every string through a copy key with a stock fallback — `copyOf(key, fallback)` — and feed worker-emitted strings in as descriptor params, so any app/template consumer can retheme ALL copy without touching descriptors. Wire the seam yourself: declare a local `const COPY: Record<string,string> = {…}` in your content package plus `export const copyOf = (k, fallback) => COPY[k] ?? fallback;`, keyed `<screen>.<element>` so a later template publish is mechanical. Either way the rule is the same: no user-facing string baked into a descriptor literal."
29
29
  ],
@@ -172,6 +172,12 @@
172
172
  "category": "App Config",
173
173
  "file": "app-config.md"
174
174
  },
175
+ {
176
+ "id": "capabilities",
177
+ "title": "Native capabilities (camera, location, push, …)",
178
+ "category": "Workers & SDKs",
179
+ "file": "capabilities.md"
180
+ },
175
181
  {
176
182
  "id": "wix-api-usage",
177
183
  "title": "Call Wix APIs from a worker",
@@ -326,7 +326,7 @@ one never blocks a rollout — the dist routes just `501` with the reason.
326
326
  | `HIMI_DIST_ALLOWED_XCODE_VERSIONS` | comma-separated Xcode versions a caller may pin (`xcodeVersion` in the request body); unset ⇒ the built-in list. Nothing upstream constrains this field — the Job Service client validates it as `z.string().max(50)` — so without the allow-list it is caller-supplied text choosing a toolchain on a shared pool. A blank value reads as unset (the built-in list), never as "allow anything". |
327
327
  | `HIMI_DIST_APPLE_SIGNING` | **Minted iOS signing is ON by default** — set `0`/`false`/`off` to disable it and go back to scavenging a profile off the pool. Rarely what you want: minting ships the profile and the certificate with the job, so nothing has to pre-exist on the machine. (Earlier text here cited `0 profile(s) available` on four machines as a reason to keep minting on — that reading came from a TRUNCATED survey and is retracted below; build 992367 logged 352 profiles. The recommendation is unchanged, the evidence for it was wrong.) |
328
328
  | `HIMI_DIST_APPLE_API_KEY_NAME` | Apple account the identity is minted under; unset ⇒ `wix-enterprise` |
329
- | `HIMI_DIST_APPLE_CAPABILITIES` | COMPLETE capability set for a minted id (the sync call replaces rather than merges); unset ⇒ push + associated domains |
329
+ | `HIMI_DIST_APPLE_CAPABILITIES` | Apple capability types to ADD to every minted id. The set itself is derived per job: push + associated domains (the template baseline) plus the Apple capability of every entitlement in the iOS plan of the job's `buildCapabilities` (`appleCapabilitiesForBuild`). This variable only **widens** that derived set (e.g. `APP_GROUPS` for a widget) — it can never remove a derived capability, because the sync call replaces rather than merges and a narrower list would switch off what the content asked for. Unset ⇒ the derived set alone |
330
330
  | `QA_DIST_SLACK_CHANNEL` | Post QA build results to a channel instead of DMing the requester. Worth setting: a DM is unreadable by anything but that person, so a channel is what makes build results scriptable (and visible to the team). |
331
331
 
332
332
  Both per-credential caps are **clamped into the range that can be enforced**, and the two ranges
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wix/himalaya-cli",
3
- "version": "0.1186.0",
3
+ "version": "0.1188.0",
4
4
  "type": "module",
5
5
  "description": "himi — the Himalaya authoring CLI. Build a Tier-5 content package on your own machine, push it to the production serve as a draft, preview it on web + Himi Player, and read worker logs back — the remote dev loop. Wraps @himalaya/serve-cli for transport.",
6
6
  "keywords": [
@@ -67,5 +67,5 @@
67
67
  "artifactId": "himalaya-cli"
68
68
  }
69
69
  },
70
- "falconPackageHash": "2aaa1abf6cad136550ece952d740ab0c8ae91df8a9668c15ecfa739e"
70
+ "falconPackageHash": "67d96922cd1adeed2becc3bef5c4d027397fd441f83346cd018cb252"
71
71
  }
@@ -9732,7 +9732,8 @@ const SCREENS = runtimeSetting({
9732
9732
  "wix_api",
9733
9733
  "wix_cashier",
9734
9734
  "open_url",
9735
- "local_database"
9735
+ "local_database",
9736
+ "wix_platform"
9736
9737
  ],
9737
9738
  "minBinaryVersion": "0.1.0",
9738
9739
  "bundleVersion": "0.0.1"
@@ -20494,7 +20495,8 @@ const SCREENS = runtimeSetting({
20494
20495
  "declaredCapabilities": [
20495
20496
  "wix_api",
20496
20497
  "wix_cashier",
20497
- "open_url"
20498
+ "open_url",
20499
+ "wix_platform"
20498
20500
  ],
20499
20501
  "minBinaryVersion": "0.1.0",
20500
20502
  "bundleVersion": "0.0.1"
@@ -28197,7 +28199,8 @@ const TEMPLATED: { pattern: string; display: string; liveSeed?: LiveSeed; static
28197
28199
  "wix_api",
28198
28200
  "local_database",
28199
28201
  "wix_cashier",
28200
- "open_url"
28202
+ "open_url",
28203
+ "wix_platform"
28201
28204
  ],
28202
28205
  "minBinaryVersion": "0.1.0",
28203
28206
  "bundleVersion": "0.0.1"
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "name": "__HIMI_APP_NAME__",
3
3
  "icon": "icon.png",
4
- "target": "prod"
4
+ "target": "prod",
5
+ "shell": "branded-lite"
5
6
  }
@@ -61946,7 +61946,8 @@ const SCREENS = runtimeSetting({
61946
61946
  "contentType": "application/javascript+ts-bundle",
61947
61947
  "declaredCapabilities": [
61948
61948
  "wix_api",
61949
- "wix_platform"
61949
+ "wix_platform",
61950
+ "local_database"
61950
61951
  ],
61951
61952
  "minBinaryVersion": "0.1.0",
61952
61953
  "bundleVersion": "0.0.1"
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "name": "__HIMI_APP_NAME__",
3
3
  "icon": "icon.png",
4
- "target": "prod"
4
+ "target": "prod",
5
+ "shell": "owner-lite"
5
6
  }
@@ -10753,7 +10753,8 @@ const SCREENS = runtimeSetting({
10753
10753
  "wix_api",
10754
10754
  "wix_cashier",
10755
10755
  "open_url",
10756
- "local_database"
10756
+ "local_database",
10757
+ "wix_platform"
10757
10758
  ],
10758
10759
  "minBinaryVersion": "0.1.0",
10759
10760
  "bundleVersion": "0.0.1"
@@ -26984,7 +26985,8 @@ const SCREENS = runtimeSetting({
26984
26985
  "declaredCapabilities": [
26985
26986
  "wix_api",
26986
26987
  "wix_cashier",
26987
- "open_url"
26988
+ "open_url",
26989
+ "wix_platform"
26988
26990
  ],
26989
26991
  "minBinaryVersion": "0.1.0",
26990
26992
  "bundleVersion": "0.0.1"
@@ -82982,7 +82984,8 @@ const TEMPLATED: { pattern: string; display: string; liveSeed?: LiveSeed; static
82982
82984
  "wix_api",
82983
82985
  "local_database",
82984
82986
  "wix_cashier",
82985
- "open_url"
82987
+ "open_url",
82988
+ "wix_platform"
82986
82989
  ],
82987
82990
  "minBinaryVersion": "0.1.0",
82988
82991
  "bundleVersion": "0.0.1"
@@ -84102,7 +84105,8 @@ const TEMPLATED: { pattern: string; display: string; liveSeed?: LiveSeed; static
84102
84105
  "declaredCapabilities": [
84103
84106
  "wix_api",
84104
84107
  "wix_cashier",
84105
- "open_url"
84108
+ "open_url",
84109
+ "wix_platform"
84106
84110
  ],
84107
84111
  "minBinaryVersion": "0.1.0",
84108
84112
  "bundleVersion": "0.0.1"
@@ -85051,7 +85055,8 @@ const TEMPLATED: { pattern: string; display: string; liveSeed?: LiveSeed; static
85051
85055
  "calendar",
85052
85056
  "share",
85053
85057
  "wix_cashier",
85054
- "local_database"
85058
+ "local_database",
85059
+ "wix_platform"
85055
85060
  ],
85056
85061
  "minBinaryVersion": "0.1.0",
85057
85062
  "bundleVersion": "0.0.1"
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "name": "__HIMI_APP_NAME__",
3
3
  "icon": "icon.png",
4
- "target": "prod"
4
+ "target": "prod",
5
+ "shell": "branded-lite"
5
6
  }
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "name": "__HIMI_APP_NAME__",
3
3
  "icon": "icon.png",
4
- "target": "prod"
4
+ "target": "prod",
5
+ "shell": "brandy"
5
6
  }
@@ -18065,7 +18065,8 @@ const TEMPLATED: { pattern: string; display: string; liveSeed?: LiveSeed; static
18065
18065
  "calendar",
18066
18066
  "share",
18067
18067
  "wix_cashier",
18068
- "local_database"
18068
+ "local_database",
18069
+ "wix_platform"
18069
18070
  ],
18070
18071
  "minBinaryVersion": "0.1.0",
18071
18072
  "bundleVersion": "0.0.1"
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "name": "__HIMI_APP_NAME__",
3
3
  "icon": "icon.png",
4
- "target": "prod"
4
+ "target": "prod",
5
+ "shell": "branded-lite"
5
6
  }
@@ -61946,7 +61946,8 @@ const SCREENS = runtimeSetting({
61946
61946
  "contentType": "application/javascript+ts-bundle",
61947
61947
  "declaredCapabilities": [
61948
61948
  "wix_api",
61949
- "wix_platform"
61949
+ "wix_platform",
61950
+ "local_database"
61950
61951
  ],
61951
61952
  "minBinaryVersion": "0.1.0",
61952
61953
  "bundleVersion": "0.0.1"
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "name": "__HIMI_APP_NAME__",
3
3
  "icon": "icon.png",
4
- "target": "prod"
4
+ "target": "prod",
5
+ "shell": "owner-lite"
5
6
  }
@@ -16063,7 +16063,8 @@ const TEMPLATED: { pattern: string; display: string; liveSeed?: LiveSeed; static
16063
16063
  "calendar",
16064
16064
  "share",
16065
16065
  "wix_cashier",
16066
- "local_database"
16066
+ "local_database",
16067
+ "wix_platform"
16067
16068
  ],
16068
16069
  "minBinaryVersion": "0.1.0",
16069
16070
  "bundleVersion": "0.0.1"
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "name": "__HIMI_APP_NAME__",
3
3
  "icon": "icon.png",
4
- "target": "prod"
4
+ "target": "prod",
5
+ "shell": "branded-lite"
5
6
  }
@@ -61578,7 +61578,8 @@ const SCREENS = runtimeSetting({
61578
61578
  "contentType": "application/javascript+ts-bundle",
61579
61579
  "declaredCapabilities": [
61580
61580
  "wix_api",
61581
- "wix_platform"
61581
+ "wix_platform",
61582
+ "local_database"
61582
61583
  ],
61583
61584
  "minBinaryVersion": "0.1.0",
61584
61585
  "bundleVersion": "0.0.1"
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "name": "__HIMI_APP_NAME__",
3
3
  "icon": "icon.png",
4
- "target": "prod"
4
+ "target": "prod",
5
+ "shell": "owner-lite"
5
6
  }
@@ -9908,7 +9908,8 @@ const SCREENS = runtimeSetting({
9908
9908
  "wix_api",
9909
9909
  "wix_cashier",
9910
9910
  "open_url",
9911
- "local_database"
9911
+ "local_database",
9912
+ "wix_platform"
9912
9913
  ],
9913
9914
  "minBinaryVersion": "0.1.0",
9914
9915
  "bundleVersion": "0.0.1"
@@ -20670,7 +20671,8 @@ const SCREENS = runtimeSetting({
20670
20671
  "declaredCapabilities": [
20671
20672
  "wix_api",
20672
20673
  "wix_cashier",
20673
- "open_url"
20674
+ "open_url",
20675
+ "wix_platform"
20674
20676
  ],
20675
20677
  "minBinaryVersion": "0.1.0",
20676
20678
  "bundleVersion": "0.0.1"
@@ -31713,7 +31715,8 @@ const TEMPLATED: { pattern: string; display: string; liveSeed?: LiveSeed; static
31713
31715
  "wix_api",
31714
31716
  "local_database",
31715
31717
  "wix_cashier",
31716
- "open_url"
31718
+ "open_url",
31719
+ "wix_platform"
31717
31720
  ],
31718
31721
  "minBinaryVersion": "0.1.0",
31719
31722
  "bundleVersion": "0.0.1"
@@ -32662,7 +32665,8 @@ const TEMPLATED: { pattern: string; display: string; liveSeed?: LiveSeed; static
32662
32665
  "calendar",
32663
32666
  "share",
32664
32667
  "wix_cashier",
32665
- "local_database"
32668
+ "local_database",
32669
+ "wix_platform"
32666
32670
  ],
32667
32671
  "minBinaryVersion": "0.1.0",
32668
32672
  "bundleVersion": "0.0.1"
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "name": "__HIMI_APP_NAME__",
3
3
  "icon": "icon.png",
4
- "target": "prod"
4
+ "target": "prod",
5
+ "shell": "branded-lite"
5
6
  }
@@ -62017,7 +62017,8 @@ const SCREENS = runtimeSetting({
62017
62017
  "contentType": "application/javascript+ts-bundle",
62018
62018
  "declaredCapabilities": [
62019
62019
  "wix_api",
62020
- "wix_platform"
62020
+ "wix_platform",
62021
+ "local_database"
62021
62022
  ],
62022
62023
  "minBinaryVersion": "0.1.0",
62023
62024
  "bundleVersion": "0.0.1"
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "name": "__HIMI_APP_NAME__",
3
3
  "icon": "icon.png",
4
- "target": "prod"
4
+ "target": "prod",
5
+ "shell": "owner-lite"
5
6
  }
@@ -7700,7 +7700,8 @@ const SCREENS = runtimeSetting({
7700
7700
  "declaredCapabilities": [
7701
7701
  "wix_api",
7702
7702
  "wix_cashier",
7703
- "open_url"
7703
+ "open_url",
7704
+ "wix_platform"
7704
7705
  ],
7705
7706
  "minBinaryVersion": "0.1.0",
7706
7707
  "bundleVersion": "0.0.1"
@@ -19349,7 +19350,8 @@ const TEMPLATED: { pattern: string; display: string; liveSeed?: LiveSeed; static
19349
19350
  "calendar",
19350
19351
  "share",
19351
19352
  "wix_cashier",
19352
- "local_database"
19353
+ "local_database",
19354
+ "wix_platform"
19353
19355
  ],
19354
19356
  "minBinaryVersion": "0.1.0",
19355
19357
  "bundleVersion": "0.0.1"
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "name": "__HIMI_APP_NAME__",
3
3
  "icon": "icon.png",
4
- "target": "prod"
4
+ "target": "prod",
5
+ "shell": "branded-lite"
5
6
  }
@@ -61649,7 +61649,8 @@ const SCREENS = runtimeSetting({
61649
61649
  "contentType": "application/javascript+ts-bundle",
61650
61650
  "declaredCapabilities": [
61651
61651
  "wix_api",
61652
- "wix_platform"
61652
+ "wix_platform",
61653
+ "local_database"
61653
61654
  ],
61654
61655
  "minBinaryVersion": "0.1.0",
61655
61656
  "bundleVersion": "0.0.1"
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "name": "__HIMI_APP_NAME__",
3
3
  "icon": "icon.png",
4
- "target": "prod"
4
+ "target": "prod",
5
+ "shell": "owner-lite"
5
6
  }
@@ -62011,7 +62011,8 @@ const SCREENS = runtimeSetting({
62011
62011
  "contentType": "application/javascript+ts-bundle",
62012
62012
  "declaredCapabilities": [
62013
62013
  "wix_api",
62014
- "wix_platform"
62014
+ "wix_platform",
62015
+ "local_database"
62015
62016
  ],
62016
62017
  "minBinaryVersion": "0.1.0",
62017
62018
  "bundleVersion": "0.0.1"
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "name": "__HIMI_APP_NAME__",
3
3
  "icon": "icon.png",
4
- "target": "prod"
4
+ "target": "prod",
5
+ "shell": "owner-lite"
5
6
  }