@wix/himalaya-cli 0.1037.0 → 0.1038.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 (75) hide show
  1. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/genie-chat/src/index.d.ts +119 -0
  2. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-genie-chat.mjs +51 -1
  3. package/dist/cli.mjs +864 -400
  4. package/dist/preview-assets.generated.bin +0 -0
  5. package/guides/headless-loop.md +7 -0
  6. package/guides/himi-test.md +66 -1
  7. package/guides/sdk-reference.json +74 -2
  8. package/guides/trim-a-template.md +5 -0
  9. package/package.json +2 -2
  10. package/templates/beauty-salon-owner/dev/index.ts +2148 -1262
  11. package/templates/beauty-salon-owner/tier5-src/_shared/aria-chat.ts +338 -26
  12. package/templates/beauty-salon-owner/tier5-src/_shared/aria-mentions.ts +202 -0
  13. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-aria/index.ts +29 -0
  14. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-ask/index.ts +6 -0
  15. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-manage/index.ts +64 -6
  16. package/templates/community-club-owner/dev/index.ts +2151 -1265
  17. package/templates/community-club-owner/tier5-src/_shared/aria-chat.ts +338 -26
  18. package/templates/community-club-owner/tier5-src/_shared/aria-mentions.ts +202 -0
  19. package/templates/community-club-owner/tier5-src/himi-owner-lite-aria/index.ts +29 -0
  20. package/templates/community-club-owner/tier5-src/himi-owner-lite-ask/index.ts +6 -0
  21. package/templates/community-club-owner/tier5-src/himi-owner-lite-manage/index.ts +64 -6
  22. package/templates/events-meetups-owner/dev/index.ts +2151 -1265
  23. package/templates/events-meetups-owner/tier5-src/_shared/aria-chat.ts +338 -26
  24. package/templates/events-meetups-owner/tier5-src/_shared/aria-mentions.ts +202 -0
  25. package/templates/events-meetups-owner/tier5-src/himi-owner-lite-aria/index.ts +29 -0
  26. package/templates/events-meetups-owner/tier5-src/himi-owner-lite-ask/index.ts +6 -0
  27. package/templates/events-meetups-owner/tier5-src/himi-owner-lite-manage/index.ts +64 -6
  28. package/templates/gym-fitness-owner/dev/index.ts +2148 -1262
  29. package/templates/gym-fitness-owner/tier5-src/_shared/aria-chat.ts +338 -26
  30. package/templates/gym-fitness-owner/tier5-src/_shared/aria-mentions.ts +202 -0
  31. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-aria/index.ts +29 -0
  32. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-ask/index.ts +6 -0
  33. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-manage/index.ts +64 -6
  34. package/templates/nonprofit-cause-owner/dev/index.ts +2148 -1262
  35. package/templates/nonprofit-cause-owner/tier5-src/_shared/aria-chat.ts +338 -26
  36. package/templates/nonprofit-cause-owner/tier5-src/_shared/aria-mentions.ts +202 -0
  37. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-aria/index.ts +29 -0
  38. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-ask/index.ts +6 -0
  39. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-manage/index.ts +64 -6
  40. package/templates/owner-lite/dev/index.ts +2145 -1259
  41. package/templates/owner-lite/tier5-src/_shared/aria-chat.ts +338 -26
  42. package/templates/owner-lite/tier5-src/_shared/aria-mentions.ts +202 -0
  43. package/templates/owner-lite/tier5-src/himi-owner-lite-aria/index.ts +29 -0
  44. package/templates/owner-lite/tier5-src/himi-owner-lite-ask/index.ts +6 -0
  45. package/templates/owner-lite/tier5-src/himi-owner-lite-manage/index.ts +64 -6
  46. package/templates/podcast-creator-owner/dev/index.ts +2151 -1265
  47. package/templates/podcast-creator-owner/tier5-src/_shared/aria-chat.ts +338 -26
  48. package/templates/podcast-creator-owner/tier5-src/_shared/aria-mentions.ts +202 -0
  49. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-aria/index.ts +29 -0
  50. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-ask/index.ts +6 -0
  51. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-manage/index.ts +64 -6
  52. package/templates/portfolio-creative-owner/dev/index.ts +2148 -1262
  53. package/templates/portfolio-creative-owner/tier5-src/_shared/aria-chat.ts +338 -26
  54. package/templates/portfolio-creative-owner/tier5-src/_shared/aria-mentions.ts +202 -0
  55. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-aria/index.ts +29 -0
  56. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-ask/index.ts +6 -0
  57. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-manage/index.ts +64 -6
  58. package/templates/restaurant-owner/dev/index.ts +2148 -1262
  59. package/templates/restaurant-owner/tier5-src/_shared/aria-chat.ts +338 -26
  60. package/templates/restaurant-owner/tier5-src/_shared/aria-mentions.ts +202 -0
  61. package/templates/restaurant-owner/tier5-src/himi-owner-lite-aria/index.ts +29 -0
  62. package/templates/restaurant-owner/tier5-src/himi-owner-lite-ask/index.ts +6 -0
  63. package/templates/restaurant-owner/tier5-src/himi-owner-lite-manage/index.ts +64 -6
  64. package/templates/retail-store-owner/dev/index.ts +2151 -1265
  65. package/templates/retail-store-owner/tier5-src/_shared/aria-chat.ts +338 -26
  66. package/templates/retail-store-owner/tier5-src/_shared/aria-mentions.ts +202 -0
  67. package/templates/retail-store-owner/tier5-src/himi-owner-lite-aria/index.ts +29 -0
  68. package/templates/retail-store-owner/tier5-src/himi-owner-lite-ask/index.ts +6 -0
  69. package/templates/retail-store-owner/tier5-src/himi-owner-lite-manage/index.ts +64 -6
  70. package/templates/yoga-studio-owner/dev/index.ts +2148 -1262
  71. package/templates/yoga-studio-owner/tier5-src/_shared/aria-chat.ts +338 -26
  72. package/templates/yoga-studio-owner/tier5-src/_shared/aria-mentions.ts +202 -0
  73. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-aria/index.ts +29 -0
  74. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-ask/index.ts +6 -0
  75. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-manage/index.ts +64 -6
Binary file
@@ -220,6 +220,13 @@ and every worker `_nav` directive is harvested, and each baked target is booted
220
220
  params the source sends — the input a real router push delivers. Detail screens stop being
221
221
  tested input-less; findings from edge boots arrive as errors tagged `edge:<source>`.
222
222
 
223
+ It also lists what the app **writes to Wix** — `writes[]` in `--json`, a `Writes to Wix`
224
+ section in the report: per screen and action, every call that is not a proven read and every
225
+ native write verb (member signup, payment), none of them sent anywhere. With a `## Data access`
226
+ table in `SPEC.md` (`Screen` + `Wix writes` columns), each write the table does not approve is a
227
+ `write-not-approved` warning. Reconcile that list with the owner-approved matrix before
228
+ publishing; see `himi docs himi-test` → "Writes to Wix".
229
+
223
230
  The run ends with a **gap ledger**: every place the crawl is blind or unproven, each paired
224
231
  with the himi command or source edit that closes it — empty lists that gate row taps ("declare
225
232
  cms seed rows / add a net-mocks rule"), actions whose effect never reaches observable state,
@@ -91,7 +91,9 @@ in order, ending in a rendered result — add a short screen-local journey to `h
91
91
  ```
92
92
 
93
93
  Every step must name a worker action already declared by that screen; `expectText` is
94
- mandatory and is checked against the final resolved render tree. Keep cross-screen
94
+ mandatory and is checked against the final resolved render tree. A detail screen that loads
95
+ nothing without an id takes an optional `"input": { "id": "svc-0001" }` — the screen input a nav
96
+ edge would hand it — so the journey boots the way a real tap into it would. Keep cross-screen
95
97
  navigation in the ordinary edge pass, which boots the destination with real source
96
98
  parameters. Pair dynamic journeys with app-specific `dev/net-mocks.json` fixtures.
97
99
 
@@ -229,6 +231,69 @@ went unproven, it names the gap and pairs it with a himi command or a source edi
229
231
  derived from what actually ran, never homework. Assembly:
230
232
  `tools/himi-cli/src/coverage.ts`.
231
233
 
234
+ ## Writes to Wix
235
+
236
+ Every run lists what the app **writes** to the Wix site, per screen and action — the inventory an
237
+ owner-approved plan is checked against. `writes[]` in `--json`, and a `Writes to Wix` section in the
238
+ pretty report:
239
+
240
+ ```jsonc
241
+ "writes": [
242
+ { "screen": "himi_blog_post", "action": "tier5.himiBlogPost.like", "via": "wix", "method": "POST", "path": "/blog/v3/posts/post-0001/like" },
243
+ { "screen": "himi_time", "action": "tier5.himiBookingTime.register", "via": "native", "capability": "himi.wix.registerDirect", "kind": "member-signup", "what": "creates a site member" },
244
+ { "screen": "himi_time", "action": "tier5.himiBookingTime.bookSelected", "via": "wix", "method": "POST", "path": "/ecom/v1/checkouts" }
245
+ ],
246
+ "unreachedWrites": [
247
+ { "screen": "himi_time", "action": "unreached", "via": "native", "capability": "capability.wix_cashier.proceedToPayment", "kind": "payment" }
248
+ ]
249
+ ```
250
+
251
+ - **What counts as a write.** Any Wix call that is not a *proven read* — a read is `GET`, or a `POST`
252
+ whose last path segment is `/query`, `/search`, `/list*`, `/get*`, `/count`, `/aggregate`,
253
+ `/facets` or `/connections` (the same classifier `--record` uses to decide what it may send to the
254
+ live site). Plus the native verbs that change the site without the REST transport: member signup
255
+ (`himi.wix.registerDirect` — or the same verb under another `<ns>.wix` namespace), password
256
+ reset (`himi.wix.resetPassword`) and payment
257
+ (`capability.wix_cashier.proceedToPayment`). Sign-in and sign-out open a session and are not writes.
258
+ - **Nothing is sent.** The crawl's transport is hermetic and the host answers native verbs itself; a
259
+ write is recorded as *attempted*, which is exactly what the worker would send on a device.
260
+ - **Every axis feeds it** — boot, each tap, deep chains, journeys, nav-edge boots and the
261
+ capability-success pass.
262
+ - **Reach.** A write behind a form or a selection (type an email and a password, then register; pick
263
+ a slot, then book) is only reached by `--deep` or a typed journey — a single tap from a fresh boot
264
+ is refused by the worker's own validation. Native write verbs the screen's bundle names but the
265
+ crawl never reached are listed under `unreachedWrites`, so a signup or a payment is still in front
266
+ of you. REST writes get no such static pass: their paths are built at run time.
267
+
268
+ ### Checking the writes against the approved plan
269
+
270
+ Put the owner-approved data-access matrix in `SPEC.md` (or `MOBILE-UX.md`) as a table under a
271
+ `## Data access` heading with a `Screen` column and a `Wix writes` column — other columns are yours:
272
+
273
+ ```markdown
274
+ ## Data access
275
+ | Screen | Role | Reads | Wix writes | Prohibited |
276
+ | --- | --- | --- | --- | --- |
277
+ | himi_blog_post | visitor | posts, comments | none | like, comment |
278
+ | himi_time | visitor | services, slots | `bookSelected`, `POST /bookings/v2/bookings` | signup, payment |
279
+ | * | visitor | published content | none | |
280
+ ```
281
+
282
+ A `Wix writes` cell is `none` (or empty, `-`, `read-only`), or a comma list naming each approved
283
+ write by its **action** (`bookSelected` or `tier5.himiBookingTime.bookSelected`), its **endpoint**
284
+ (`POST /bookings/v2/bookings` — exact, with `*` for one path segment such as an id:
285
+ `POST /blog/v3/posts/*/like`), its **capability** (`registerDirect`) or its
286
+ **kind** (`payment`, `signup`). Prose such as "create a booking" approves nothing: it cannot say
287
+ whether the checkout and the payment after it were approved. A `*` row covers every screen without
288
+ its own row. Several rows for one screen (one per role) are combined.
289
+
290
+ Each write the table does not approve — including an `unreachedWrites` entry — is a
291
+ `write-not-approved` **warning** (warning so a naming slip never fails a run; silence a deliberate
292
+ one in `himi-test.json` like any other finding). With no filled table the writes are listed and
293
+ the report says nothing checked them. **Before publishing**, reconcile the list with the approved
294
+ plan: remove the action, or trim the screen (`himi template trim`), for every write the owner did
295
+ not approve.
296
+
232
297
  ## How agents should use it
233
298
 
234
299
  **build → test → close the top gap → repeat.** No setup, no session, no simulator, no
@@ -16760,7 +16760,7 @@
16760
16760
  "name": "ConversationMessage",
16761
16761
  "kind": "interface",
16762
16762
  "jsdoc": "",
16763
- "decl": "export interface ConversationMessage {\n id?: string;\n content?: string;\n role?: MessageRole;\n createdDate?: string;\n status?: MessageStatus;\n /** Files the owner attached to this turn, as the service stored them. */\n attachments?: Attachment[];\n /** Client tools this assistant turn asks the CALLER to run — see `FunctionCall`. */\n functionCalls?: FunctionCall[];\n}"
16763
+ "decl": "export interface ConversationMessage {\n id?: string;\n content?: string;\n role?: MessageRole;\n createdDate?: string;\n status?: MessageStatus;\n /** Files the owner attached to this turn, as the service stored them. */\n attachments?: Attachment[];\n /** Client tools this assistant turn asks the CALLER to run — see `FunctionCall`. */\n functionCalls?: FunctionCall[];\n /** What the owner attached to this turn — a mentioned product, contact,\n * page — stored by the service BESIDE the text rather than inside it. The\n * transcript echoes them back under this key (the `wix.genie.v1` message\n * entity's `references`), which is the only way a reloaded conversation\n * can still say what a turn was about. */\n references?: MessageReference[];\n}"
16764
16764
  },
16765
16765
  {
16766
16766
  "name": "Attachment",
@@ -16792,6 +16792,18 @@
16792
16792
  "jsdoc": "/** The answer to one `FunctionCall`. Note the wire spells the flag `success`. */",
16793
16793
  "decl": "export interface FunctionCallResult {\n id?: string;\n name?: string;\n /** Text for the model — the error text when `success` is false. */\n content?: string;\n success?: boolean;\n /** A JSON-ENCODED object carrying the tool's structured answer. */\n widgetResponse?: string;\n}"
16794
16794
  },
16795
+ {
16796
+ "name": "MessageReference",
16797
+ "kind": "interface",
16798
+ "jsdoc": "/** One reference riding on a user turn (`messageReferences` on the persist\n * call, `references` on the stored message).\n *\n * Field meanings are the chat-service's own, from the\n * `@wix/ambassador-genie-chat-service-v1-no-entity` `MessageReference` type the\n * native Aria app sends: `data` is the context handed to the model, `source`\n * a low-cardinality feature tag, and `type` how a client renders it\n * (\"inline\" | \"global\" | \"hidden\"). Build a mention's with `mentionReference`\n * rather than by hand, so the one shape the service is known to accept is\n * spelled in one place. */",
16799
+ "decl": "export interface MessageReference {\n id?: string;\n /** Shown to the owner (a chip label). */\n label?: string;\n /** The context the assistant receives — for a mention, a JSON string\n * `{\"id\":…,\"type\":…}` naming the item and its category. */\n data?: string;\n /** Feature tag, e.g. \"mention\". */\n source?: string;\n /** Render scope, e.g. \"global\" — a chip above the text, not a token in it. */\n type?: string;\n}"
16800
+ },
16801
+ {
16802
+ "name": "mentionReference",
16803
+ "kind": "function",
16804
+ "jsdoc": "/** A mention of one item, in the exact shape the native Aria app sends: a\n * `global` reference (a chip, not a token in the text) whose `data` names the\n * item and the category it came from.\n *\n * `category` is the category's ENGLISH label (\"Products\", \"Contacts\") — it is\n * what the model reads, so it is not localized. Newlines in the label are\n * folded to spaces; `JSON.stringify` does the escaping the native client does\n * by hand. */",
16805
+ "decl": "export function mentionReference(item: { id: string; title: string }, category: string): MessageReference;"
16806
+ },
16795
16807
  {
16796
16808
  "name": "AssistantConfig",
16797
16809
  "kind": "interface",
@@ -16850,7 +16862,7 @@
16850
16862
  "name": "SendMessageOptions",
16851
16863
  "kind": "interface",
16852
16864
  "jsdoc": "/** Optional wire flags on `sendMessage`. `communicationMode` /\n * `enableRealtimeEvents` were in the original captured payload; only POLLING is\n * verified end-to-end. The rest were added from the 2026-09-19 re-capture. */",
16853
- "decl": "export interface SendMessageOptions {\n communicationMode?: CommunicationMode;\n enableRealtimeEvents?: boolean;\n metadata?: UserMessageMetadata;\n /** The dashboard sends `true`. Optional: verified to answer either way. */\n enforceAccountScopedConversations?: boolean;\n /** Tag the turn with the same origin the conversation was created under. */\n origin?: string;\n /** Files already UPLOADED (see `createFileUpload`) to store with the turn.\n * Rides step 1 only — the trigger names the stored turn, which carries them. */\n attachments?: Attachment[];\n}"
16865
+ "decl": "export interface SendMessageOptions {\n communicationMode?: CommunicationMode;\n enableRealtimeEvents?: boolean;\n metadata?: UserMessageMetadata;\n /** The dashboard sends `true`. Optional: verified to answer either way. */\n enforceAccountScopedConversations?: boolean;\n /** Tag the turn with the same origin the conversation was created under. */\n origin?: string;\n /** References stored WITH the turn (step 1 only — the trigger names a turn\n * that already carries them). Omitted, the persist call sends `[]`, which is\n * what it always sent. */\n messageReferences?: MessageReference[];\n /** Files already UPLOADED (see `createFileUpload`) to store with the turn.\n * Rides step 1 only — the trigger names the stored turn, which carries them. */\n attachments?: Attachment[];\n}"
16854
16866
  },
16855
16867
  {
16856
16868
  "name": "ConversationUserMessageResponse",
@@ -16930,6 +16942,66 @@
16930
16942
  "jsdoc": "/** Fetch the messages of a conversation (poll after sendMessage). */",
16931
16943
  "decl": "export function getConversationMessages(conversationId: string): Promise<GetConversationMessagesResponse>;"
16932
16944
  },
16945
+ {
16946
+ "name": "ItemsPaginationMode",
16947
+ "kind": "type",
16948
+ "jsdoc": "/** How a provider pages its items. Any other value, or none, means unpaged:\n * `providersOf` reports it as \"NONE\" and such a provider is asked for one\n * page with no paging block. */",
16949
+ "decl": "export type ItemsPaginationMode = \"CURSOR\" | \"OFFSET\" | \"UNKNOWN_PAGINATION_MODE\";"
16950
+ },
16951
+ {
16952
+ "name": "ItemsSelectionProvider",
16953
+ "kind": "interface",
16954
+ "jsdoc": "/** An installed item provider. Only the fields a picker needs are typed. */",
16955
+ "decl": "export interface ItemsSelectionProvider {\n /** The handle `queryItems` is addressed by. */\n key?: string;\n appId?: string;\n contentData?: { providerName?: string; iconKey?: string; title?: string };\n paginationMode?: ItemsPaginationMode | string;\n}"
16956
+ },
16957
+ {
16958
+ "name": "ListInstalledProvidersResponse",
16959
+ "kind": "interface",
16960
+ "jsdoc": "",
16961
+ "decl": "export interface ListInstalledProvidersResponse { providers?: ItemsSelectionProvider[] }"
16962
+ },
16963
+ {
16964
+ "name": "ItemsSelectionItem",
16965
+ "kind": "interface",
16966
+ "jsdoc": "/** One item a provider returned. */",
16967
+ "decl": "export interface ItemsSelectionItem {\n id?: string;\n name?: string;\n description?: string;\n image?: { url?: string };\n /** Additional information, e.g. a price. */\n note?: string;\n}"
16968
+ },
16969
+ {
16970
+ "name": "QueryItemsResponse",
16971
+ "kind": "interface",
16972
+ "jsdoc": "",
16973
+ "decl": "export interface QueryItemsResponse {\n items?: ItemsSelectionItem[];\n pagingMetadata?: { hasNext?: boolean; cursors?: { next?: string } };\n}"
16974
+ },
16975
+ {
16976
+ "name": "ItemsQuery",
16977
+ "kind": "interface",
16978
+ "jsdoc": "/** The query `queryItems` sends. Set `cursorPaging` OR `paging` to match the\n * provider's `paginationMode`, or neither for an unpaged provider. */",
16979
+ "decl": "export interface ItemsQuery {\n search?: string;\n paging?: { limit: number; offset?: number };\n cursorPaging?: { limit: number; cursor?: string };\n}"
16980
+ },
16981
+ {
16982
+ "name": "listInstalledProviders",
16983
+ "kind": "function",
16984
+ "jsdoc": "/** The item providers installed on the CURRENT site — the categories a mention\n * picker offers. The site is the one whose signed instance authorizes the\n * call, so a caller that can switch business must re-list after a switch. */",
16985
+ "decl": "export function listInstalledProviders(): Promise<ListInstalledProvidersResponse>;"
16986
+ },
16987
+ {
16988
+ "name": "queryItems",
16989
+ "kind": "function",
16990
+ "jsdoc": "/** Query one provider's items. `providerKey` is a provider's `key`, never its\n * display name. */",
16991
+ "decl": "export function queryItems(providerKey: string, query: ItemsQuery = {}): Promise<QueryItemsResponse>;"
16992
+ },
16993
+ {
16994
+ "name": "providersOf",
16995
+ "kind": "function",
16996
+ "jsdoc": "/** The provider list from a `listInstalledProviders` response, with every\n * entry that has no key or no name dropped — neither can be offered or\n * queried. */",
16997
+ "decl": "export function providersOf(res: ListInstalledProvidersResponse | null | undefined): Array<{ key: string; name: string; paging: \"CURSOR\" | \"OFFSET\" | \"NONE\" }>;"
16998
+ },
16999
+ {
17000
+ "name": "itemsOf",
17001
+ "kind": "function",
17002
+ "jsdoc": "/** The items from a `queryItems` response, with every entry that has no id or\n * no name dropped — an item with neither cannot be referenced or shown. */",
17003
+ "decl": "export function itemsOf(res: QueryItemsResponse | null | undefined): Array<{ id: string; title: string; subtitle: string; imageUrl: string }>;"
17004
+ },
16933
17005
  {
16934
17006
  "name": "messagesOf",
16935
17007
  "kind": "function",
@@ -70,6 +70,11 @@ footer's target; both are listed under `implicit`. It prints one JSON report and
70
70
  sit in `.himi/trim-backup/`, which is deleted once the trim validates (and kept under
71
71
  `--force`). A failure while *writing* the trim (a worker directory it cannot move, say) is
72
72
  always put back, `--force` or not — `--force` keeps a finished trim, never a half-done one.
73
+ A validate failure is only blamed on the trim if the trim caused it: the untrimmed app is
74
+ validated too, and when every error was already there (a font `site analyze --apply` wrote
75
+ that the catalog lacks, say) the trim is kept, exits `0`, and lists those errors under
76
+ `preExistingErrors` ("trimmed; N errors were already present before trim: …"). Any error the
77
+ trim introduced still puts everything back, and is named under `introducedErrors`.
73
78
 
74
79
  **Links between screens.** A kept screen that opens a removed one (a `himi.open` whose
75
80
  `screenId` is a literal) would be a dead tap, so by default the trim is **refused** — and the
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wix/himalaya-cli",
3
- "version": "0.1037.0",
3
+ "version": "0.1038.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": [
@@ -65,5 +65,5 @@
65
65
  "artifactId": "himalaya-cli"
66
66
  }
67
67
  },
68
- "falconPackageHash": "e35236017e826d4e25212e7448f29f8004d84cec687b348a8231366e"
68
+ "falconPackageHash": "9cdd57a20df8f0a031d3306a62fee19f8378bdacaa6701a74ba4bb59"
69
69
  }