@wix/himalaya-cli 0.1038.0 → 0.1040.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 (89) hide show
  1. package/dist/cli.mjs +1950 -1220
  2. package/dist/preview-assets.generated.bin +0 -0
  3. package/guides/designing-himi-screens.md +3 -2
  4. package/guides/getting-started.md +3 -2
  5. package/guides/headless-loop.md +4 -3
  6. package/guides/himi-skill.md +381 -0
  7. package/guides/index.json +4 -0
  8. package/guides/recipe-dynamic-list.md +3 -3
  9. package/guides/recipe-form-submit.md +3 -3
  10. package/guides/recipe-onboarding.md +3 -3
  11. package/guides/recipe-search.md +3 -3
  12. package/guides/skill.md +122 -0
  13. package/guides/wix-site-to-himi-app.md +4 -2
  14. package/package.json +2 -2
  15. package/templates/beauty-salon/dev/index.ts +58 -22
  16. package/templates/beauty-salon/tier5-src/himi-booking-time/index.ts +144 -29
  17. package/templates/beauty-salon-owner/config.ts +1 -1
  18. package/templates/beauty-salon-owner/dev/index.ts +507 -35
  19. package/templates/beauty-salon-owner/tier5-src/_shared/aria-chat.ts +237 -4
  20. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-aria/index.ts +28 -0
  21. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-drawer/index.ts +34 -48
  22. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-drawer/logic.ts +102 -0
  23. package/templates/branded-lite/dev/index.ts +61 -25
  24. package/templates/branded-lite/tier5-src/himi-booking-time/index.ts +144 -29
  25. package/templates/community-club-owner/config.ts +1 -1
  26. package/templates/community-club-owner/dev/index.ts +507 -35
  27. package/templates/community-club-owner/tier5-src/_shared/aria-chat.ts +237 -4
  28. package/templates/community-club-owner/tier5-src/himi-owner-lite-aria/index.ts +28 -0
  29. package/templates/community-club-owner/tier5-src/himi-owner-lite-drawer/index.ts +34 -48
  30. package/templates/community-club-owner/tier5-src/himi-owner-lite-drawer/logic.ts +102 -0
  31. package/templates/events-meetups-owner/config.ts +1 -1
  32. package/templates/events-meetups-owner/dev/index.ts +507 -35
  33. package/templates/events-meetups-owner/tier5-src/_shared/aria-chat.ts +237 -4
  34. package/templates/events-meetups-owner/tier5-src/himi-owner-lite-aria/index.ts +28 -0
  35. package/templates/events-meetups-owner/tier5-src/himi-owner-lite-drawer/index.ts +34 -48
  36. package/templates/events-meetups-owner/tier5-src/himi-owner-lite-drawer/logic.ts +102 -0
  37. package/templates/gym-fitness/dev/index.ts +58 -22
  38. package/templates/gym-fitness/tier5-src/himi-booking-time/index.ts +144 -29
  39. package/templates/gym-fitness-owner/config.ts +1 -1
  40. package/templates/gym-fitness-owner/dev/index.ts +507 -35
  41. package/templates/gym-fitness-owner/tier5-src/_shared/aria-chat.ts +237 -4
  42. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-aria/index.ts +28 -0
  43. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-drawer/index.ts +34 -48
  44. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-drawer/logic.ts +102 -0
  45. package/templates/nonprofit-cause-owner/config.ts +1 -1
  46. package/templates/nonprofit-cause-owner/dev/index.ts +507 -35
  47. package/templates/nonprofit-cause-owner/tier5-src/_shared/aria-chat.ts +237 -4
  48. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-aria/index.ts +28 -0
  49. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-drawer/index.ts +34 -48
  50. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-drawer/logic.ts +102 -0
  51. package/templates/owner-lite/config.ts +1 -1
  52. package/templates/owner-lite/dev/index.ts +507 -35
  53. package/templates/owner-lite/tier5-src/_shared/aria-chat.ts +237 -4
  54. package/templates/owner-lite/tier5-src/himi-owner-lite-aria/index.ts +28 -0
  55. package/templates/owner-lite/tier5-src/himi-owner-lite-drawer/index.ts +34 -48
  56. package/templates/owner-lite/tier5-src/himi-owner-lite-drawer/logic.ts +102 -0
  57. package/templates/podcast-creator-owner/config.ts +1 -1
  58. package/templates/podcast-creator-owner/dev/index.ts +507 -35
  59. package/templates/podcast-creator-owner/tier5-src/_shared/aria-chat.ts +237 -4
  60. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-aria/index.ts +28 -0
  61. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-drawer/index.ts +34 -48
  62. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-drawer/logic.ts +102 -0
  63. package/templates/portfolio-creative-owner/config.ts +1 -1
  64. package/templates/portfolio-creative-owner/dev/index.ts +507 -35
  65. package/templates/portfolio-creative-owner/tier5-src/_shared/aria-chat.ts +237 -4
  66. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-aria/index.ts +28 -0
  67. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-drawer/index.ts +34 -48
  68. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-drawer/logic.ts +102 -0
  69. package/templates/restaurant-owner/config.ts +1 -1
  70. package/templates/restaurant-owner/dev/index.ts +507 -35
  71. package/templates/restaurant-owner/tier5-src/_shared/aria-chat.ts +237 -4
  72. package/templates/restaurant-owner/tier5-src/himi-owner-lite-aria/index.ts +28 -0
  73. package/templates/restaurant-owner/tier5-src/himi-owner-lite-drawer/index.ts +34 -48
  74. package/templates/restaurant-owner/tier5-src/himi-owner-lite-drawer/logic.ts +102 -0
  75. package/templates/retail-store/dev/index.ts +1 -1
  76. package/templates/retail-store-owner/config.ts +1 -1
  77. package/templates/retail-store-owner/dev/index.ts +507 -35
  78. package/templates/retail-store-owner/tier5-src/_shared/aria-chat.ts +237 -4
  79. package/templates/retail-store-owner/tier5-src/himi-owner-lite-aria/index.ts +28 -0
  80. package/templates/retail-store-owner/tier5-src/himi-owner-lite-drawer/index.ts +34 -48
  81. package/templates/retail-store-owner/tier5-src/himi-owner-lite-drawer/logic.ts +102 -0
  82. package/templates/yoga-studio/dev/index.ts +58 -22
  83. package/templates/yoga-studio/tier5-src/himi-booking-time/index.ts +144 -29
  84. package/templates/yoga-studio-owner/config.ts +1 -1
  85. package/templates/yoga-studio-owner/dev/index.ts +507 -35
  86. package/templates/yoga-studio-owner/tier5-src/_shared/aria-chat.ts +237 -4
  87. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-aria/index.ts +28 -0
  88. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-drawer/index.ts +34 -48
  89. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-drawer/logic.ts +102 -0
Binary file
@@ -14,8 +14,9 @@ prescriptive layer that sits **above** the wiring guide: `himi docs tier-5-add-a
14
14
  > This is the *composition* layer: how to build a screen well out of the vocabulary. The *values*
15
15
  > layer — swapping a look-and-feel kit, editing token values — is a separate job; they compose.
16
16
  >
17
- > **Want a worked example?** `himi agent-init` writes `examples/stocks-dashboard.descriptor.json`
18
- > next to you — a fully-composed screen to study.
17
+ > **Want a worked example?** `himi init` (and `himi agent-init`) write
18
+ > `.agents/skills/himalaya/examples/stocks-dashboard.descriptor.json` into the app — a
19
+ > fully-composed screen to study.
19
20
 
20
21
  ---
21
22
 
@@ -42,7 +42,6 @@ account, no corporate network. Append `/<topic>.md` for the raw markdown an agen
42
42
  # works from anywhere — no Wix network, no VPN.
43
43
  npm i -g @wix/himalaya-cli@latest
44
44
  himi --version # MUST print a version (>= 0.200). If it prints the help banner, your himi is ancient — re-run the install above.
45
- himi agent-init # seeds HIMALAYA.md + component-reference.md + examples/ here
46
45
  himi guide # this page + the headless dev loop
47
46
  himi docs # list the guides embedded in THIS CLI before naming a topic
48
47
  himi components # the native UI components you can use + their props
@@ -53,6 +52,8 @@ himi --help # capability preflight: verify the commands thi
53
52
  (On a Wix machine whose `~/.npmrc` points `@wix` at the internal registry this still works —
54
53
  that registry proxies npmjs.com.)
55
54
 
55
+ **The agent files come with the app.** `himi init <app>` writes them **inside the new app**: `AGENTS.md` and `CLAUDE.md` (loaded by coding agents at every session start), the `himalaya` skill (`.agents/skills/himalaya/` with its `references/` and `examples/`, plus `.claude/skills/himalaya/`), the `HIMALAYA.md` primer and a Claude Code session-start hook that runs `himi progress --brief`. Start later sessions in that folder and they pick the work up by themselves. `himi agent-init`, run inside the app, refreshes them after a CLI upgrade (`himi doctor` says when they are stale); on an older CLI, run it there by hand.
56
+
56
57
  ### Installed-CLI capability gate
57
58
 
58
59
  Do not assume every published CLI contains every guide or verification verb named in this
@@ -194,7 +195,7 @@ is the entire value** of a prop — `text: "$service:home.total"`, never `text:
194
195
  (mid-string renders the raw token); put a label and its value in separate `Text`s. (A state string that
195
196
  itself starts with `$` collides with the binding sigil — don't prefix values with `$`.) Don't worry
196
197
  about the syntax yet:
197
- copy the `examples/counter.*` pair that `himi agent-init` writes (it shows the wiring), study
198
+ copy the `examples/counter.*` pair (in `.agents/skills/himalaya/examples/`, which `himi init` and `himi agent-init` write; it shows the wiring), study
198
199
  `examples/stocks-dashboard.descriptor.json` to see a well-composed real screen; then start
199
200
  from the recipe that matches your screen — each ships as a doc + a runnable example pair:
200
201
  a data-backed list `examples/dynamic-list.*` (`himi docs recipe-dynamic-list`, incl.
@@ -450,6 +450,7 @@ failure.
450
450
 
451
451
  ## Bootstrap your coding agent
452
452
 
453
- Run `himi agent-init` in your working directory to drop a `HIMALAYA.md` primer, the
454
- component reference, and the counter example so your own coding assistant discovers how to
455
- author Himi screens.
453
+ `himi init <app>` writes the agent files into the new app — `AGENTS.md`, `CLAUDE.md`, a
454
+ `HIMALAYA.md` primer and the `himalaya` skill with the component reference and the examples —
455
+ so your own coding assistant discovers how to author Himi screens, and a later session picks the
456
+ work back up. Run `himi agent-init` inside the app to refresh them after a CLI upgrade.
@@ -0,0 +1,381 @@
1
+ ---
2
+ name: himalaya-technical
3
+ description: Technical implementation reference for Himalaya native iOS, Android, and web apps—CLI setup, screen authoring, Wix bindings, validation, preview, release, and QA distribution.
4
+ ---
5
+
6
+ <!-- Himalaya technical reference — hosted at https://apps.wix.com/_api/himi-serve/himi-skill.md. Start customer work at https://apps.wix.com/_api/himi-serve/skill.md; it defines discovery, approval, and handoff behavior. -->
7
+
8
+ > Fetching this page through a **summarizing** fetcher (some WebFetch tools paraphrase) drops the
9
+ > exact commands. It is served as raw `text/markdown` — fetch the URL **verbatim** (e.g. `curl` it)
10
+ > so the commands below arrive unaltered.
11
+
12
+ > **Two other doors** reach the same authoring surface with **no install at all**, because the
13
+ > server does the compiling: an **MCP server** whose tool list your client enumerates for you
14
+ > (https://apps.wix.com/_api/himi-serve/skill-mcp.md), or the same loop in raw `curl`
15
+ > (https://apps.wix.com/_api/himi-serve/skill-http.md). Both pages are public and worth reading, but
16
+ > the endpoints they drive are reachable **only from the Wix network** (`bo.wix.com`), since
17
+ > a server-side compile must not be internet-reachable. The CLI below is the one that works
18
+ > from anywhere.
19
+
20
+ > **Every guide referenced below is also fetchable**, with no install and from anywhere:
21
+ > https://apps.wix.com/_api/himi-serve/docs is the index and `https://apps.wix.com/_api/himi-serve/docs/<id>.md` is one guide — the same set
22
+ > `himi docs` ships, so use whichever door you already have open.
23
+ >
24
+ > **Two URLs, one guide.** `/docs/<id>.md` is YOUR url: the `.md` suffix is an unconditional
25
+ > markdown override, so it stays markdown no matter what `Accept` you send. `/docs/<id>`,
26
+ > with no suffix, is the one to hand a HUMAN: it negotiates on `Accept` and answers a browser
27
+ > with a rendered page (and anything else with the same markdown). Do not paste a `.md` link
28
+ > to a person — they will get raw markdown.
29
+
30
+ # Start here
31
+
32
+ With Himalaya you build **real native apps — iOS and Android first, plus the web, desktop
33
+ (macOS), and the wrist (Apple Watch / Wear OS)** — that update **instantly over-the-air**:
34
+ ship a new screen or a fix without an App Store / Play release. One project serves every
35
+ surface it declares (`himi docs app-config` → Surfaces); start phone-first and add
36
+ surfaces when you want them.
37
+
38
+ You don't write Swift or Kotlin. A **screen is just data** — a layout of native UI components —
39
+ plus, optionally, a little logic (a small JavaScript *worker* that holds state and handles taps).
40
+ The `himi` CLI turns that into the live app. (In the deeper docs this "screen as data + worker"
41
+ model is called a **Tier-5 screen** — but you don't need the jargon to start.)
42
+
43
+ This is the technical starting point for a developer or coding agent building on Wix.
44
+ For a business customer who begins with an app idea, start at https://apps.wix.com/_api/himi-serve/skill.md; it owns
45
+ discovery, plan approval, consent, browser review, and the handoff to this technical loop.
46
+
47
+ ## Business-customer handoff
48
+
49
+ Do not use the commands below to jump straight into a template when a customer has not yet
50
+ approved their plan. The customer entry skill produces approved `SPEC.md` and `MOBILE-UX.md`,
51
+ then sends you here to choose a template, implement, validate, and prepare an owner-private draft
52
+ preview. For Wix Headless / Back Office work without a public site, use the approved plan's role/data
53
+ matrix and read `himi docs headless-business-to-himi-app` **only if it appears in `himi docs`**;
54
+ for a published site, read `himi docs wix-site-to-himi-app` only after permission to inspect live data
55
+ and only if that topic is installed. A missing embedded guide is a tooling-version fact, never a reason
56
+ to guess the customer's data model.
57
+
58
+ ## Two ways to begin
59
+
60
+ **A. Read the guides in your browser** — https://apps.wix.com/_api/himi-serve/docs
61
+ Every guide, the component reference and the importable SDKs, as readable pages. Public: no Wix
62
+ account, no corporate network. Append `/<topic>.md` for the raw markdown an agent should fetch.
63
+
64
+ **B. From your terminal / coding agent:**
65
+
66
+ ```sh
67
+ # Step 0 — install the LATEST CLI and VERIFY it. Use @latest: a plain
68
+ # `npm i -g @wix/himalaya-cli` is a no-op if an OLD himi is already on PATH, and an
69
+ # out-of-date CLI reports authoring as "not available standalone" — a stale build, not
70
+ # a platform limit. No registry flag: the CLI publishes to public npm, so the install
71
+ # works from anywhere — no Wix network, no VPN.
72
+ npm i -g @wix/himalaya-cli@latest
73
+ himi --version # MUST print a version (>= 0.200). If it prints the help banner, your himi is ancient — re-run the install above.
74
+ himi guide # this page + the headless dev loop
75
+ himi docs # list the guides embedded in THIS CLI before naming a topic
76
+ himi components # the native UI components you can use + their props
77
+ himi sdk # importable @himalaya/* SDKs + their typed API
78
+ himi --help # capability preflight: verify the commands this installed CLI actually has
79
+ ```
80
+
81
+ (On a Wix machine whose `~/.npmrc` points `@wix` at the internal registry this still works —
82
+ that registry proxies npmjs.com.)
83
+
84
+ **The agent files come with the app.** `himi init <app>` writes them **inside the new app**: `AGENTS.md` and `CLAUDE.md` (loaded by coding agents at every session start), the `himalaya` skill (`.agents/skills/himalaya/` with its `references/` and `examples/`, plus `.claude/skills/himalaya/`), the `HIMALAYA.md` primer and a Claude Code session-start hook that runs `himi progress --brief`. Start later sessions in that folder and they pick the work up by themselves. `himi agent-init`, run inside the app, refreshes them after a CLI upgrade (`himi doctor` says when they are stale); on an older CLI, run it there by hand.
85
+
86
+ ### Installed-CLI capability gate
87
+
88
+ Do not assume every published CLI contains every guide or verification verb named in this
89
+ reference. In particular, check whether `himi --help` lists `test` and whether `himi docs`
90
+ lists the topic you want **before** making either a required acceptance check. If either is absent
91
+ after a fresh `@latest` install, record a tooling block and continue only with the supported
92
+ local evidence (build, strict validate, and labelled state renders). That is not equivalent to a
93
+ behavioral crawl: do not call the app fully validated or release-ready, and do not invent an
94
+ unsupported command. The customer-facing skill owns the plan; its approved `MOBILE-UX.md` remains
95
+ the UX source of truth even if that guide is absent from the installed CLI.
96
+
97
+ ## Author your first screen
98
+
99
+ **Building a real app? Start from a full template**, not the blank scaffold:
100
+ `himi init my-shop --template branded-lite` (a full consumer reference over a Wix
101
+ site — store/bookings/events/blog/cart/CMS, wired to `@himalaya/wix-*` + a visitor session)
102
+ or `--template owner-lite` (owner CRUD/management: lists, details, forms). That reference is
103
+ **dozens of screens** in one megabytes-long `dev/index.ts` of raw descriptors. Keep its
104
+ worker layer — trim it or mine it (`himi docs trim-a-template`): **trim** to the approved
105
+ `SPEC.md` when most of its screens fit, or **mine** it when few do — keep the
106
+ `tier5-src/_shared/` helpers and Wix worker chains and write your own screens. Do not delete
107
+ `tier5-src/` + `dev/` and start from blank. For a small **non-Wix** pattern, `himi init --template chat-bot --remote`. `himi template
108
+ list --remote` shows the full catalog (title/description/tags) — including templates published
109
+ to Wix — and `--remote` on `himi init` fetches one from there (the bundled copy is
110
+ the offline fallback). Publish any app of your own as a template with `himi template publish` —
111
+ see `himi docs templates`.
112
+
113
+ **When the blank scaffold IS the right call.** It is a deliberate starting point, not only the
114
+ thing you settle for when no template fits. Choose it when the app is **small and already
115
+ understood** — a handful of screens you can name — because a dozens-of-screens reference is then
116
+ more to delete than you would have written; when it **binds no Wix site or vertical**, so a
117
+ template's identity, fixtures and boot-time worker calls would all have to be torn out anyway;
118
+ when consent is **synthetic/local-only** and you need something that cannot auto-fetch (see the
119
+ preflight below); or when you are **learning the wiring** and want one screen and one worker with
120
+ nothing else in the file. The recipes below are written for exactly these cases. What blank is
121
+ NOT good for is a real customer app whose shape a published template already has — trimming or
122
+ mining that template (`himi docs trim-a-template`) beats rebuilding its Wix wiring from scratch.
123
+
124
+ **A template is a SHOWCASE APP, so look at it before you pick it.** Each one is a real published
125
+ release running on the plane: `GET /v1/templates.md` gives every row a `preview/a/<id>` URL that
126
+ boots the actual app in a browser, and the public landing page shows the same catalog as live
127
+ phones. Every row also carries a **start prompt** — the sentence a customer pastes to begin from
128
+ that template — which is what a customer arriving with "starting from the … template" has already
129
+ done. Print one yourself with `himi template prompt <name>`.
130
+
131
+ **Consent preflight before a template preview.** `branded-lite` and `owner-lite` are Wix-integrated
132
+ full apps; their workers can request Wix data when they boot. Do not start their worker or web
133
+ host under a synthetic/local-only authorization unless you have first removed or mocked every such
134
+ startup path and verified the network log is empty of Wix/external requests. Prefer a blank,
135
+ local-only scaffold for that stage. A browser render that causes an unapproved request is a failed
136
+ consent gate, not a harmless preview.
137
+
138
+ **Preview boundary:** local `himi render` evidence is a rendered state artifact, not an interactive,
139
+ authenticated owner preview. The interactive `himi preview` URLs exist for a **draft release** after
140
+ `himi push --draft`; obtain the separate draft-publish approval first. Do not start an arbitrary local
141
+ web host and call it owner-private, and do not let a template worker boot there until its startup
142
+ network paths are authorized and preflighted.
143
+
144
+ **Adopt, don't just rename, a template.** The approved `SPEC.md` and `MOBILE-UX.md` are the
145
+ plan, and the plan wins over anything `himi init` seeds. `init` seeds placeholder copies of
146
+ both and can overwrite plan files already in the package root, so keep a copy of the approved
147
+ plan until `init` has run. After `init`, open both files:
148
+ if either holds `init`'s boilerplate rather than the approved plan, put the approved plan back in
149
+ its place — never the reverse — and finish it with the actual customer, data/auth assumptions,
150
+ placeholder copy, flow/state matrix, and compact/phone/expanded + device evidence before calling
151
+ the app ready. Keep scenario switches out of customer UI. A labelled preview fallback is acceptable
152
+ only when the host cannot perform the task and it cannot write customer data.
153
+
154
+ Before authoring a multi-screen mobile app, ensure the customer-approved `SPEC.md` and
155
+ `MOBILE-UX.md` are in the content-package root. Use `himi docs <topic>` only after `himi docs`
156
+ shows that topic for the installed CLI.
157
+ The contract ships with a release when it contains public-safe material, so later agents can
158
+ retrieve and extend the rationale.
159
+
160
+ ## From a Wix website (the usual real-app path)
161
+
162
+ **No site yet?** `himi site create` provisions one, and what you pass decides what you get:
163
+
164
+ ```sh
165
+ himi site create <name> --type headless \
166
+ --template <guid> --verticals stores,bookings \
167
+ --redirect-uri himalaya-<your-app>://oauth/callback --yes
168
+ ```
169
+
170
+ `--type` defaults to `wix`, so pass `headless` for an app that binds a Headless client.
171
+ **Without `--template` you get a BLANK project, not a usable site** — and `--verticals` is
172
+ refused without it, because a blank project has no site for a vertical to attach to (the
173
+ install reports success with `requiredActions: CREATE_SITE` while the vertical's API answers
174
+ 428 forever). **Pass `--redirect-uri` with your own app's scheme:** it defaults to
175
+ `himalaya-demo-app://oauth/callback`, and a scaffolded template authenticates with
176
+ `himalaya-<your-app>://oauth/callback` — mint a client that does not allowlist yours and
177
+ sign-in fails at redirect-session with "no auth code".
178
+
179
+ The minted client's id IS the `WIX_CLIENT_ID` below. The **`WIX_SITE_URL` half of the binding
180
+ is not minted with it**: a just-created site is unpublished, so it has no public URL to read
181
+ (`himi site list` reports `viewUrl` empty until you publish). `--site-url` is read **only
182
+ during this one create call** — there is no rebind verb, and re-running `site create` bills you
183
+ a second site — so if the site is not published yet, bind the URL **after** publishing by setting
184
+ `WIX_SITE_URL` (the app resolves env first) or by editing `wix.siteUrl` in its
185
+ `provisioning.json`. Otherwise the app keeps its placeholder URL and reads nothing.
186
+ `--write-provisioning [path]` records the binding into an **existing** `provisioning.json` (it
187
+ updates a manifest, it does not create one, and it refuses the committed branded-lite manifest).
188
+
189
+ It creates a **real, billable** site on the signed-in Wix account and is not cleanly reversible,
190
+ which is why `--yes` is mandatory: get the customer's explicit go-ahead first. Full procedure,
191
+ including the Catalog-V3 and inherited-locale traps: `himi docs creating-wix-sites`.
192
+
193
+ If the user has a **published Wix site** (URL + Headless `clientId`), **stop following the
194
+ counter recipe.** Read `himi docs wix-site-to-himi-app` and follow it end to end: analyze
195
+ (`himi site analyze`) → screen plan (words from `book.copy`, not stock phrases) →
196
+ `himi init --template <overlay>` → bind
197
+ `WIX_CLIENT_ID` / `WIX_SITE_URL` → rewrite verticals / CMS / Velo / forms / pages as
198
+ **native mobile** screens (phone IA and UX, not a WebView or a shrunk desktop).
199
+ `--apply` bakes name/colors/tabs — it is a start, not the product. It maps a handful of scraped
200
+ CSS variables and picks the design kit from **installed verticals**, so it cannot tell a brand
201
+ colour from a background wash and it has never seen the site. **Open `<out>/evidence/pages/*.png`
202
+ and judge the look yourself**: pick the kit from the character you see there, take the accent from
203
+ a colour actually present (a scraped theme value, or the logo in `<out>/media/`) rather than
204
+ inventing one, treat a near-white/cream value as a surface, and verify BOTH colour schemes — the
205
+ mapper writes the site's light colour into the dark arm too, so dark mode is where it fails first.
206
+ To create/publish/invoke the site's Velo HTTP functions, `himi docs wix-site-http-functions`
207
+ and `himi site function` (not analyze, and not `himi functions`).
208
+
209
+ After `himi init … --template branded-lite` (or a vertical overlay), **point the app at your
210
+ Wix site** before expecting live catalog data:
211
+
212
+ ```sh
213
+ export WIX_CLIENT_ID="<headless-oauth-client-id>"
214
+ export WIX_SITE_URL="https://your-site.wixsite.com/…"
215
+ ```
216
+
217
+ The Headless `clientId` is the site binding (no separate MSID flag). Details:
218
+ `himi docs branded-lite-site-binding`.
219
+
220
+ A screen is a **layout** (a tree of native components) plus an optional **worker** —
221
+ `defineService(name, { state, actions })` — wired together with bindings like `$service:<service>.<path>`,
222
+ and a Button triggers an action via `tier5.<service>.<action>`. A binding is substituted **only when it
223
+ is the entire value** of a prop — `text: "$service:home.total"`, never `text: "Total: $service:home.total"`
224
+ (mid-string renders the raw token); put a label and its value in separate `Text`s. (A state string that
225
+ itself starts with `$` collides with the binding sigil — don't prefix values with `$`.) Don't worry
226
+ about the syntax yet:
227
+ copy the `examples/counter.*` pair (in `.agents/skills/himalaya/examples/`, which `himi init` and `himi agent-init` write; it shows the wiring), study
228
+ `examples/stocks-dashboard.descriptor.json` to see a well-composed real screen; then start
229
+ from the recipe that matches your screen — each ships as a doc + a runnable example pair:
230
+ a data-backed list `examples/dynamic-list.*` (`himi docs recipe-dynamic-list`, incl.
231
+ pull-to-refresh + load-more), a create/edit form `examples/form-submit.*`
232
+ (`himi docs recipe-form-submit`), a searchable list `examples/search-list.*`
233
+ (`himi docs recipe-search`), a first-run onboarding card `examples/onboarding.*`
234
+ (`himi docs recipe-onboarding`), and the loading/empty/error/ready idiom they all share
235
+ (`himi docs recipe-four-state`). Then — **before you
236
+ design** — read the UX guide (`himi docs designing-himi-screens`) and, for a multi-screen app,
237
+ the mobile contract guide (`himi docs mobile-ux`), then follow
238
+ *Author a Tier-5 screen*.
239
+
240
+ Keep structural choices reviewable: use `FragmentSlot` when a finite set of shipped component
241
+ trees is selected by worker state. Use the gated `WorkerSubtree` only when structure is genuinely
242
+ unknowable at descriptor-authoring time; it requires explicit type/action/budget policy, a
243
+ descriptor-shipped fallback, and `workerSubtreeScreens` allowlisting. The Tier-5 guide contains
244
+ the complete decision order and examples.
245
+
246
+ ## What works off-repo — and what still needs VPN
247
+
248
+ - ✅ **From `npm i -g @wix/himalaya-cli` alone:** the supported
249
+ author → check → iterate loop, with **nothing to check out and no simulator** — `guide`, `docs`,
250
+ `components`, `sdk`, `skills`, `agent-init`, `init`, and **`build` / `validate` / `render` /
251
+ `preview`**, plus `test` **only when the capability gate above lists it**. These compile a Tier-5
252
+ worker, lint a screen against schema/tokens/components/`$service` + a worker boot dry-run, and
253
+ headless-render it. When available, **`himi test` needs no test files** — it derives the checks from the actions your descriptors already
254
+ declare: it boots each screen's real worker, dispatches each action from a fresh boot, and reports
255
+ anything that threw, stayed stuck on `loading`, or leaked a `NaN`/`undefined`/`$service:` token into
256
+ visible text. It is the only local check that catches a WRONG REDUCER, and it runs the worker in a
257
+ device-parity sandbox (no `setTimeout`/`setInterval`, as on JSC/WebView) so a bundle that would only
258
+ die on the device fails locally instead. **`himi render --live` is
259
+ the sanctioned way to prove real-data binding with NO VPN and NO push** — it mints an anonymous
260
+ visitor token from the app's Wix `clientId` and **awaits the worker's real fetches** against live
261
+ Wix, so the render shows LIVE data (not just the empty initial state) and catches live-only binding
262
+ bugs locally. The CLI **ships its own `@wix/himalaya` runtime**, so it resolves `@himalaya/*`
263
+ on its own — `build` / `validate` / `render` work with **no per-app `node_modules` at all**. A
264
+ per-app `npm i @wix/himalaya` is **optional** (it only lets your editor / `tsc` resolve
265
+ `@himalaya/*` types locally) and is the one install still **VPN-gated** — that SDK package
266
+ publishes to the internal registry `npm.dev.wixpress.com`, which is unreachable off-VPN. The
267
+ CLI itself is not: it comes from public npm.
268
+ - ⛔ **Needs a Wix sign-in:** `himi push` / `promote` publish and activate your release.
269
+ To change **part** of a release instead of republishing it, `push --only <selector>` publishes
270
+ just the named items — same build + lint gate, derived from the live release — and `himi patch`
271
+ does the same from a raw file on a machine with no content package. Both require an explicit
272
+ `--draft` or `--live`: a partial publish has no safe default, and neither carries an attestation
273
+ or refreshes the source archive (the output names both). Prefer `push` for anything you would
274
+ want restorable.
275
+ After a push, **`context` / `screens` / `diagnose` / `deeplinks` / `render --remote` /
276
+ `telemetry` / `logs`** read back from what you published (over `/v1/preview/…`,
277
+ `/v1/telemetry/events`, `/v1/telemetry/logs`), and so does **`himi dist`**
278
+ (a QA binary — see *Shipping* below), which you rarely need. Authenticate once with
279
+ **`himi login --browser`**: it signs you in with your own Wix account and stores a scoped
280
+ token, so nothing is ever hand-pasted. (`--wix` uses the machine's own Wix CLI credential
281
+ instead — the mode a CI container can satisfy. Wix employees can use `--dpx`.)
282
+ Everything up to the push runs locally.
283
+
284
+ ## Optional push notifications
285
+
286
+ Interactive `himi init my-app` offers **Set up now / Later — continue building** after
287
+ creating the project, with or without a template. Missing credentials or failed setup do not
288
+ fail app creation. Use `--no-push-setup` to defer deliberately. Non-interactive runs,
289
+ `--json`, and `init --yes` do not prompt or configure push unless `--push-setup` is
290
+ explicitly supplied. Never combine `--push-setup` and `--no-push-setup`.
291
+
292
+ Resume when the customer has a Wix site and the required keys:
293
+
294
+ ```sh
295
+ himi login --browser --target wix
296
+ wix login
297
+ himi notify setup --content ./my-app --target wix
298
+ himi notify status --content ./my-app --target wix --refresh --json
299
+ ```
300
+
301
+ **Browser login alone is not sufficient for site authorization today.** Setup and status
302
+ also use the Wix CLI account credential; use the same customer account for both logins.
303
+ The CLI verifies app ownership and site access. A new app can be claimed as part of confirmed
304
+ setup. Existing public bindings are reused and the prompts collect missing values.
305
+
306
+ Supply the APNs key by local file path, its Key ID, Apple Team ID, bundle ID and environment;
307
+ align the Android application ID with Firebase. The current wizard requires APNs input and
308
+ has no separate Android-only mode. For automatic Apple signing, choose that option or use
309
+ `--apple-signing` with a separate App Store Connect key file, Key ID and Issuer ID.
310
+ Review the public plan before confirmation; agents use `--yes` only for authorized setup.
311
+ Keys are transmitted to the authenticated backend for Branded/Ping custody, not copied into
312
+ project settings or output. Enter Later to defer and continue building.
313
+
314
+ `notify status` is read-only and needs no key files; `--refresh` checks providers live.
315
+ Backend readiness does not prove notification delivery. This setup does not rewrite native
316
+ configuration, select a Ping family, build a binary, register a device or send a notification.
317
+ Continue building and publishing app content. Customer iOS push testing through `himi dist`
318
+ is blocked until the hosted build service supports customer signing keys; the current Wix-managed QA
319
+ binary cannot test the customer's saved push configuration. After an uncertain setup response, inspect status before
320
+ retrying; the CLI does not automatically repeat provisioning.
321
+
322
+ Full inputs, script flags and status meanings: `himi docs push-cli-onboarding`
323
+ (https://apps.wix.com/_api/himi-serve/docs/push-cli-onboarding.md). The guide is bundled with the public npm package
324
+ and is also served at that public URL. No repository access is required. This is notification setup; `himi push` publishes
325
+ app content. Existing `notify send|tokens|doctor` commands use the local notification server.
326
+
327
+ ## Shipping — over the air by default, a binary only for a native delta
328
+
329
+ `himi push` → `himi promote` ships screens, Tier-5 bundles, tokens and app-config in **seconds**,
330
+ with no App Store / Play release. That is the normal path and it covers almost every change.
331
+
332
+ You need an actual **binary** only for a *native* delta: a new SDUI component, a newly declared
333
+ capability/entitlement, a new bundle id, or a `minBinaryVersion` floor bump. For that there is
334
+ `himi dist` — Wix builds and signs a
335
+ real IPA/APK for you and hands back an install link:
336
+
337
+ ```sh
338
+ himi dist --app my-app --platform ios,android --target wix # waits, prints the install link
339
+ himi dist --app my-app --platform ios --no-wait --target wix # returns a jobId instead
340
+ himi dist status <jobId> --app my-app --target wix # or: list --app my-app | cancel <jobId>
341
+ ```
342
+
343
+ The binary is **offline-capable**: the pool bakes the serve release into it — every screen and
344
+ Tier-5 bundle, plus tokens, app-config and the icon — so a fresh install paints with no network.
345
+ iOS returns an **https install page** whose button carries the `itms-services:` URL (chat clients
346
+ won't linkify that scheme, so the page is what you share); open it in Safari on the device.
347
+
348
+ **Wix-managed QA signing needs no customer signing files.** The pool MINTS a provisioning profile for the app's own
349
+ bundle id per job — there is no profile to pre-provision and nothing to borrow. `--borrow-ios-id
350
+ <bundleId>` still exists as an escape hatch (the binary then installs under *that* id, which is
351
+ fine for QA and wrong for anything else), but it is rarely what you want.
352
+ For customer push credentials, the binary's Apple team, bundle ID and APNs environment must
353
+ match the saved delivery configuration. The current self-serve `himi dist` path uses Wix's
354
+ Apple team and a `com.wix.himi.<app>` bundle ID, so its QA binary cannot test customer iOS
355
+ push. `--signing byo` is not supported. Testing through `himi dist` must wait for the hosted build service
356
+ to support customer signing keys. Notification setup can verify backend configuration now,
357
+ but does not make a matching customer-signed build available.
358
+
359
+ **Android signing needs nothing either.** `--android-signing` defaults to `qa-keystore` — the
360
+ repo's committed QA key, identical on every pool machine, so a new build installs *over* the last
361
+ one. `--android-signing wix-keystore` signs with the Wix key the pool machine carries and fails
362
+ loudly if it carries none; `debug` is the old per-machine key, where QA must uninstall first.
363
+
364
+ `--release` is optional: omit it and the plane builds whatever is **live** for the app, recording
365
+ the concrete id it chose. A build takes roughly **4 minutes** (iOS) or **3.5** (Android), and the
366
+ pool parallelises, so dispatching many at once costs about the same as dispatching one.
367
+
368
+ Full pipeline, signing constraints and how to read a failure: `himi docs qa-builds`.
369
+
370
+ ## Bootstrap a coding agent
371
+
372
+ Paste this into your coding agent (Claude Code, Cursor, …):
373
+
374
+ ```
375
+ I want to create a mobile app for my business. Follow this skill:
376
+ https://apps.wix.com/_api/himi-serve/skill.md
377
+ ```
378
+
379
+ ## Native UX evidence gate
380
+
381
+ Before declaring a multi-screen app ready, run `himi ux audit --content . --strict` and resolve its findings. After driving each available native shell, persist the actual checks with `himi ux record`; record an unavailable platform with its reason rather than claiming coverage.
package/guides/index.json CHANGED
@@ -289,6 +289,10 @@
289
289
  ],
290
290
  "componentReferenceFile": "component-reference.json",
291
291
  "sdkReferenceFile": "sdk-reference.json",
292
+ "skills": {
293
+ "customer": "skill.md",
294
+ "technical": "himi-skill.md"
295
+ },
292
296
  "example": {
293
297
  "serviceFile": "counter.service.ts",
294
298
  "descriptorFile": "counter-t5.descriptor.json",
@@ -6,8 +6,8 @@ stitches together three pieces that are each documented separately but easy to m
6
6
  a unit: worker array state → `itemsPath` → an `$item.` row template.
7
7
 
8
8
  Mined from the in-repo reference apps: `apps/himi-owner-lite` (products/services/events/posts
9
- lists) and `apps/family-cart` (cart list). The `examples/dynamic-list.*` pair that
10
- `himi agent-init` writes is a distilled, runnable version of this recipe.
9
+ lists) and `apps/family-cart` (cart list). The `examples/dynamic-list.*` pair in
10
+ the app's `.agents/skills/himalaya/examples/` (written by `himi init` and `himi agent-init`) is a distilled, runnable version of this recipe.
11
11
 
12
12
  **Which components?** `LazyList` (vertical list, swipe actions, virtualized) or
13
13
  `Grid` with `columns: 1` (simple stacked rows; bump `columns`/`columnsMedium` for
@@ -251,4 +251,4 @@ Mechanics and the prod caveat in full: `himi docs tier-5-add-a-screen`.
251
251
  - `himi docs tier-5-add-a-screen` — the full worker/descriptor authoring loop.
252
252
  - `himi docs designing-himi-screens` — layout idioms + screen-state patterns.
253
253
  - `himi components LazyList` / `himi components Grid` — the full prop surface.
254
- - `examples/dynamic-list.*` (written by `himi agent-init`) — this recipe, runnable.
254
+ - `.agents/skills/himalaya/examples/dynamic-list.*` (written into the app by `himi init` / `himi agent-init`) — this recipe, runnable.
@@ -7,8 +7,8 @@ half of CRUD (new product, edit post, contact form…). The load-bearing contrac
7
7
  per-keystroke state.
8
8
 
9
9
  Mined from `apps/himi-owner-lite` (product/post/service/event forms — `buildForm` +
10
- the `himi-owner-lite-*-form` workers). The `examples/form-submit.*` pair that
11
- `himi agent-init` writes is a distilled, runnable version.
10
+ the `himi-owner-lite-*-form` workers). The `examples/form-submit.*` pair in
11
+ the app's `.agents/skills/himalaya/examples/` (written by `himi init` and `himi agent-init`) is a distilled, runnable version.
12
12
 
13
13
  ## 1. The descriptor: `Form` + `FormField`s + a submit `Button`
14
14
 
@@ -171,4 +171,4 @@ shape (heading swap, `savedScreenId`, back-navigation).
171
171
  - `himi docs recipe-four-state` — the state-machine idiom this recipe leans on.
172
172
  - `himi docs recipe-dynamic-list` — the list the created entity lands in.
173
173
  - `himi components Form` / `FormField` / `TextField` / `Toggle` / `Picker`.
174
- - `examples/form-submit.*` (written by `himi agent-init`) — this recipe, runnable.
174
+ - `.agents/skills/himalaya/examples/form-submit.*` (written into the app by `himi init` / `himi agent-init`) — this recipe, runnable.
@@ -8,8 +8,8 @@ separate onboarding screen to route around, works identically on iOS, Android
8
8
  and web.
9
9
 
10
10
  Mined from `apps/himi-branded-lite` (the home screen's first-run card). The
11
- `examples/onboarding.*` pair that `himi agent-init` writes is a distilled,
12
- runnable version.
11
+ `examples/onboarding.*` pair in the app's `.agents/skills/himalaya/examples/` (written by `himi init` and `himi agent-init`)
12
+ is a distilled, runnable version.
13
13
 
14
14
  ## 1. The worker: read the flag at boot, persist on dismiss
15
15
 
@@ -128,4 +128,4 @@ const svc = defineService<State, {
128
128
 
129
129
  - `himi docs recipe-four-state` — the same `hiddenWhen`/display-string idiom.
130
130
  - `himi docs designing-himi-screens` — copy + hierarchy guidance for the card.
131
- - `examples/onboarding.*` (written by `himi agent-init`) — this recipe, runnable.
131
+ - `.agents/skills/himalaya/examples/onboarding.*` (written into the app by `himi init` / `himi agent-init`) — this recipe, runnable.
@@ -6,8 +6,8 @@ network round-trip per keystroke, instant results, and the empty state can say
6
6
  *why* it's empty.
7
7
 
8
8
  Mined from the Himi Blog app's `himi-blog-feed` worker (search + category chips
9
- over posts). The `examples/search-list.*` pair that `himi agent-init` writes is a
10
- distilled, runnable version. Builds on `himi docs recipe-dynamic-list` — read that
9
+ over posts). The `examples/search-list.*` pair in the app's `.agents/skills/himalaya/examples/` (written by `himi init`
10
+ and `himi agent-init`) is a distilled, runnable version. Builds on `himi docs recipe-dynamic-list` — read that
11
11
  first; this recipe only adds the query layer.
12
12
 
13
13
  ## 1. The descriptor: `SearchField` → one debounced action
@@ -108,4 +108,4 @@ change — only the action's body.
108
108
  - `himi docs recipe-dynamic-list` — the list this recipe filters.
109
109
  - `himi docs recipe-four-state` — the emptyText/error/loading strings.
110
110
  - `himi components SearchField` / `FilterChips` / `Tabs`.
111
- - `examples/search-list.*` (written by `himi agent-init`) — this recipe, runnable.
111
+ - `.agents/skills/himalaya/examples/search-list.*` (written into the app by `himi init` / `himi agent-init`) — this recipe, runnable.