@almadar/std 16.218.0 → 16.220.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 (77) hide show
  1. package/behaviors/lolo/infra/atoms/std-data-import.lolo +56 -5
  2. package/behaviors/lolo/infra/atoms/std-global-search.lolo +9 -1
  3. package/behaviors/lolo/infra/atoms/std-notification-center.lolo +18 -18
  4. package/behaviors/lolo/infra/atoms/std-notification-preferences.lolo +5 -5
  5. package/behaviors/lolo/infra/atoms/std-notify-on-event.lolo +17 -18
  6. package/behaviors/lolo/ui/core/atoms/std-gantt-schedule.lolo +215 -0
  7. package/behaviors/lolo/ui/core/atoms/ui-textarea.lolo +2 -2
  8. package/behaviors/lolo/ui/core/molecules/ui-gantt.lolo +169 -0
  9. package/behaviors/lolo/ui/game/atoms/ui-canvas-2d.lolo +2 -2
  10. package/behaviors/lolo/ui/game/atoms/ui-canvas.lolo +2 -2
  11. package/behaviors/lolo/ui/learning/atoms/ui-math-canvas.lolo +2 -2
  12. package/behaviors/registry/infra/atoms/std-data-import.orb +329 -6
  13. package/behaviors/registry/infra/atoms/std-global-search.orb +86 -4
  14. package/behaviors/registry/infra/atoms/std-notification-center.orb +41 -33
  15. package/behaviors/registry/infra/atoms/std-notification-preferences.orb +10 -17
  16. package/behaviors/registry/infra/atoms/std-notify-on-event.orb +198 -195
  17. package/behaviors/registry/ui/core/atoms/std-gantt-schedule.orb +723 -0
  18. package/behaviors/registry/ui/core/molecules/ui-gantt.orb +508 -0
  19. package/canonical-operators.json +46 -1
  20. package/dist/behaviors/exports-reader.js +3212 -2818
  21. package/dist/behaviors/functions/index.d.ts +238 -5
  22. package/dist/behaviors/functions/index.js +3207 -2819
  23. package/dist/behaviors/index.d.ts +1 -1
  24. package/dist/behaviors/index.js +3213 -2819
  25. package/dist/behaviors/query.js +3212 -2818
  26. package/dist/behaviors-embeddings.hash.json +3 -3
  27. package/dist/behaviors-embeddings.json +19 -7
  28. package/dist/behaviors-registry.json +2220 -1041
  29. package/dist/index.d.ts +3 -3
  30. package/dist/index.js +3249 -2819
  31. package/dist/knob-embeddings.hash.json +3 -3
  32. package/dist/knob-embeddings.json +1 -1
  33. package/dist/modules/anim.d.ts +1 -1
  34. package/dist/modules/array.d.ts +1 -1
  35. package/dist/modules/async.d.ts +1 -1
  36. package/dist/modules/behavior.d.ts +1 -1
  37. package/dist/modules/browser.d.ts +1 -1
  38. package/dist/modules/composition.d.ts +1 -1
  39. package/dist/modules/contract.d.ts +1 -1
  40. package/dist/modules/core.d.ts +1 -1
  41. package/dist/modules/data.d.ts +1 -1
  42. package/dist/modules/ease.d.ts +1 -1
  43. package/dist/modules/format.d.ts +1 -1
  44. package/dist/modules/geo.d.ts +1 -1
  45. package/dist/modules/graph.d.ts +1 -1
  46. package/dist/modules/grid.d.ts +1 -1
  47. package/dist/modules/index.d.ts +2 -1
  48. package/dist/modules/index.js +30 -1
  49. package/dist/modules/integration.d.ts +1 -1
  50. package/dist/modules/json.d.ts +20 -0
  51. package/dist/modules/json.js +30 -0
  52. package/dist/modules/llm.d.ts +1 -1
  53. package/dist/modules/math.d.ts +1 -1
  54. package/dist/modules/memory.d.ts +1 -1
  55. package/dist/modules/nn.d.ts +1 -1
  56. package/dist/modules/noise.d.ts +1 -1
  57. package/dist/modules/object.d.ts +1 -1
  58. package/dist/modules/os.d.ts +1 -1
  59. package/dist/modules/path.d.ts +1 -1
  60. package/dist/modules/prob.d.ts +1 -1
  61. package/dist/modules/session.d.ts +1 -1
  62. package/dist/modules/str.d.ts +1 -1
  63. package/dist/modules/tensor.d.ts +1 -1
  64. package/dist/modules/time.d.ts +1 -1
  65. package/dist/modules/trace.d.ts +1 -1
  66. package/dist/modules/train.d.ts +1 -1
  67. package/dist/modules/validate.d.ts +1 -1
  68. package/dist/modules/vector.d.ts +1 -1
  69. package/dist/modules/workspace.d.ts +1 -1
  70. package/dist/registry/factory-signatures.json +1 -1
  71. package/dist/registry.d.ts +1 -1
  72. package/dist/registry.js +28 -0
  73. package/dist/{types-C-Yerb4-.d.ts → types-DpbKBJu8.d.ts} +3 -3
  74. package/i18n/ar.json +3 -1
  75. package/i18n/en.json +2 -0
  76. package/i18n/sl.json +3 -1
  77. package/package.json +2 -2
@@ -1,5 +1,5 @@
1
1
  {
2
- "description": "std-notify-on-event — cross-orbital wiring atom. Subscribes to events from another orbital (e.g. CheckoutOrbital emits OrderPlaced, OrderRecordOrbital reacts via this atom) and dispatches a notification. Use when one orbital needs to react to or be notified about events that happen in another orbital — the wiring goes through this atom's `EventOccurred` listener which the molecule renames via traitOverrides.events to the upstream event name. Dispatch gates on `guardOp`: `eq` (default) does string-equality on `triggerStatus` against the upstream event's `status` field; `gt`/`lt`/`gte`/`lte` instead numerically compare `guardField` (read from the event's `data` payload) against `guardValue`, for threshold-crossing asks such as low-stock alerts. Resolves recipient from `recipients` (first entry; multi-recipient fan-out is a future extension), falling back to `fallbackRecipient` when set, or `@user.id` otherwise. Skips dispatch when the recipient is in `suppressionList`. Delivery consults std-notification-center data before dispatching: per-user NotificationPreference rows (matched on `userId` = recipient and `eventType` = this listener's `eventKey`, blank = all) can mute (`mode: off`), defer to the digest drain (`mode: digest`), override the channel, or impose per-user quiet hours; the atom-level `quietStartHour`/`quietEndHour` window and the `frequencyCapPerWeek` rolling cap (counted against dispatched NotificationRecord audit rows for the same recipient + channel) suppress likewise. Every suppression persists an honest audit row (`dispatched: false` with the reason in `error`: quiet-hours / digest-deferred / muted-by-preference / frequency-cap / no-push-subscription) which std-notification-center's digest cycle drains later. Channels: `in-app` emits the `notify` toast; `email`/`sms`/`webhook` dispatch through call-service (email.send / twilio.sendSMS / webhook.send); `push` looks up the recipient's PushSubscription row (owned by std-notification-center) and dispatches web-push via push.send (`pushTitle` falls back to `template`; `pushDeepLink`/`pushIcon` optional). The audit row's `dispatched` flag is honest — true only once the service call succeeds.",
2
+ "description": "std-notify-on-event — cross-orbital wiring atom. Subscribes to events from another orbital (e.g. CheckoutOrbital emits OrderPlaced, OrderRecordOrbital reacts via this atom) and dispatches a notification. Use when one orbital needs to react to or be notified about events that happen in another orbital — the wiring goes through this atom's `EventOccurred` listener which the molecule renames via traitOverrides.events to the upstream event name. Dispatch gates on `guardOp`: `eq` (default) does string-equality on `triggerStatus` against the upstream event's `status` field; `gt`/`lt`/`gte`/`lte` instead numerically compare `guardField` (read from the event's `data` payload) against `guardValue`, for threshold-crossing asks such as low-stock alerts. Resolves recipient from `recipients` (first entry; multi-recipient fan-out is a future extension), falling back to `fallbackRecipient` when set, or `@user.id` otherwise. Skips dispatch when the recipient is in `suppressionList`. Delivery consults std-notification-center data before dispatching: per-person NotificationPreference rows (matched on `personId` = recipient and `eventKey` = this listener's `eventKey`, blank = all) can mute (`mode: off`), defer to the digest drain (`mode: digest`), override the channel, or impose per-user quiet hours (a 'HH:MM-HH:MM' window, blank = none); the atom-level `quietStartHour`/`quietEndHour` window and the `frequencyCapPerWeek` rolling cap (counted against dispatched NotificationRecord audit rows for the same recipient + channel) suppress likewise. Every suppression persists an honest audit row (`dispatched: false` with the reason in `error`: quiet-hours / digest-deferred / muted-by-preference / frequency-cap / no-push-subscription) which std-notification-center's digest cycle drains later. Channels: `in-app` emits the `notify` toast; `email`/`sms`/`webhook` dispatch through call-service (email.send / twilio.sendSMS / webhook.send); `push` looks up the recipient's PushSubscription row (owned by std-notification-center) and dispatches web-push via push.send (`pushTitle` falls back to `template`; `pushDeepLink`/`pushIcon` optional). The audit row's `dispatched` flag is honest — true only once the service call succeeds.",
3
3
  "ledger": {
4
4
  "entries": {
5
5
  "ent_01KXG04FE9SA0FVQV9VJC8915N": {
@@ -192,45 +192,65 @@
192
192
  "type": "string"
193
193
  },
194
194
  {
195
- "default": "",
196
195
  "description": "Owner of this preference row.",
197
- "name": "userId",
196
+ "name": "personId",
197
+ "required": true,
198
198
  "synonyms": "user, owner, account",
199
199
  "type": "string"
200
200
  },
201
201
  {
202
202
  "default": "",
203
203
  "description": "Event key this preference applies to (matches the listener's eventKey); blank = all events.",
204
- "name": "eventType",
204
+ "name": "eventKey",
205
205
  "synonyms": "event, trigger, subscription",
206
206
  "type": "string"
207
207
  },
208
+ {
209
+ "default": "in_app",
210
+ "description": "Channel override for this user.",
211
+ "name": "channel",
212
+ "synonyms": "preferred channel, delivery method",
213
+ "type": "string",
214
+ "values": [
215
+ "in_app",
216
+ "email",
217
+ "push",
218
+ "slack",
219
+ "sms",
220
+ "webhook"
221
+ ]
222
+ },
208
223
  {
209
224
  "default": "instant",
210
225
  "description": "Delivery mode: instant, digest, or off.",
211
226
  "name": "mode",
212
227
  "synonyms": "delivery mode, frequency, cadence",
213
- "type": "string"
228
+ "type": "string",
229
+ "values": [
230
+ "instant",
231
+ "digest",
232
+ "off"
233
+ ]
214
234
  },
215
235
  {
216
236
  "default": "",
217
- "description": "Channel override for this user (in-app/email/sms/push/webhook); blank = the listener's configured channel.",
218
- "name": "channel",
219
- "synonyms": "preferred channel, delivery method",
237
+ "description": "Per-user quiet-hours window as \"HH:MM-HH:MM\" (e.g. 22:00-07:00); blank = disabled.",
238
+ "name": "quietHours",
239
+ "synonyms": "do not disturb, quiet window, night mode",
220
240
  "type": "string"
221
241
  },
222
242
  {
223
243
  "default": 0.0,
224
- "description": "Per-user quiet-hours start (hour 0-23); equal to quietEndHour = disabled.",
225
- "name": "quietStartHour",
226
- "synonyms": "quiet start, do not disturb from",
244
+ "description": "Timestamp indicating when this preference row was created.",
245
+ "name": "createdAt",
246
+ "synonyms": "creation time, created",
227
247
  "type": "number"
228
248
  },
229
249
  {
230
250
  "default": 0.0,
231
- "description": "Per-user quiet-hours end (hour 0-23); equal to quietStartHour = disabled.",
232
- "name": "quietEndHour",
233
- "synonyms": "quiet end, do not disturb until",
251
+ "description": "Timestamp indicating when this preference row was last updated.",
252
+ "name": "updatedAt",
253
+ "synonyms": "modified, last updated",
234
254
  "type": "number"
235
255
  }
236
256
  ],
@@ -359,18 +379,11 @@
359
379
  "type": "string"
360
380
  },
361
381
  {
362
- "default": 0.0,
363
- "description": "Scratch: per-user quiet-hours start (hour 0-23) from the matched preference row.",
364
- "name": "prefQuietStart",
365
- "synonyms": "user quiet start",
366
- "type": "number"
367
- },
368
- {
369
- "default": 0.0,
370
- "description": "Scratch: per-user quiet-hours end (hour 0-23) from the matched preference row.",
371
- "name": "prefQuietEnd",
372
- "synonyms": "user quiet end",
373
- "type": "number"
382
+ "default": "",
383
+ "description": "Scratch: per-user quiet-hours window \"HH:MM-HH:MM\" from the matched preference row; blank = none.",
384
+ "name": "prefQuietHours",
385
+ "synonyms": "user quiet hours",
386
+ "type": "string"
374
387
  },
375
388
  {
376
389
  "default": "",
@@ -427,7 +440,7 @@
427
440
  },
428
441
  "eventKey": {
429
442
  "default": "",
430
- "description": "Stable key naming the upstream event this listener is bound to (e.g. 'OrderPlaced'). NotificationPreference rows (std-notification-center) whose eventType equals this key — or is blank — apply to this listener's dispatches.",
443
+ "description": "Stable key naming the upstream event this listener is bound to (e.g. 'OrderPlaced'). NotificationPreference rows (std-notification-center) whose eventKey equals this key — or is blank — apply to this listener's dispatches.",
431
444
  "label": "Event key for preferences",
432
445
  "synonyms": "preference key, event name, subscription key, notification topic",
433
446
  "tier": "policy",
@@ -493,7 +506,7 @@
493
506
  },
494
507
  "notifyChannel": {
495
508
  "default": "in-app",
496
- "description": "Delivery channel. `in-app` (default) emits the in-app `notify` toast. `email`/`sms`/`webhook` dispatch through call-service at event time (email.send / twilio.sendSMS / webhook.send) and persist a NotificationRecord audit row with an honest `dispatched` flag: true only once the service call succeeds, false plus the failure detail in `error` otherwise. `push` looks up the recipient's PushSubscription row (captured by std-notification-center's subscribe flow) and dispatches web-push via push.send — a recipient with no subscription records the audit row undispatched (`no-push-subscription`). `webhook` requires `webhookUrl` to actually dispatch; a blank `webhookUrl` still records the audit row undispatched rather than failing. A per-user NotificationPreference row with a non-blank `channel` overrides this value for that recipient.",
509
+ "description": "Delivery channel. `in-app` (default) emits the in-app `notify` toast. `email`/`sms`/`webhook` dispatch through call-service at event time (email.send / twilio.sendSMS / webhook.send) and persist a NotificationRecord audit row with an honest `dispatched` flag: true only once the service call succeeds, false plus the failure detail in `error` otherwise. `push` looks up the recipient's PushSubscription row (captured by std-notification-center's subscribe flow) and dispatches web-push via push.send — a recipient with no subscription records the audit row undispatched (`no-push-subscription`). `webhook` requires `webhookUrl` to actually dispatch; a blank `webhookUrl` still records the audit row undispatched rather than failing. A per-user NotificationPreference row's `channel` overrides this value for that recipient.",
497
510
  "label": "Channel",
498
511
  "synonyms": "delivery method, notification channel, send via, dispatch through, push notification, web push",
499
512
  "tier": "policy",
@@ -676,11 +689,7 @@
676
689
  },
677
690
  {
678
691
  "kind": "set",
679
- "resource": "@entity.prefQuietEnd"
680
- },
681
- {
682
- "kind": "set",
683
- "resource": "@entity.prefQuietStart"
692
+ "resource": "@entity.prefQuietHours"
684
693
  },
685
694
  {
686
695
  "kind": "set",
@@ -741,11 +750,11 @@
741
750
  "name": "data",
742
751
  "properties": [
743
752
  {
744
- "name": "userId",
753
+ "name": "personId",
745
754
  "type": "string"
746
755
  },
747
756
  {
748
- "name": "eventType",
757
+ "name": "eventKey",
749
758
  "type": "string"
750
759
  },
751
760
  {
@@ -757,12 +766,8 @@
757
766
  "type": "string"
758
767
  },
759
768
  {
760
- "name": "quietStartHour",
761
- "type": "number"
762
- },
763
- {
764
- "name": "quietEndHour",
765
- "type": "number"
769
+ "name": "quietHours",
770
+ "type": "string"
766
771
  }
767
772
  ],
768
773
  "type": "[object]"
@@ -1017,11 +1022,11 @@
1017
1022
  "name": "data",
1018
1023
  "properties": [
1019
1024
  {
1020
- "name": "userId",
1025
+ "name": "personId",
1021
1026
  "type": "string"
1022
1027
  },
1023
1028
  {
1024
- "name": "eventType",
1029
+ "name": "eventKey",
1025
1030
  "type": "string"
1026
1031
  },
1027
1032
  {
@@ -1033,12 +1038,8 @@
1033
1038
  "type": "string"
1034
1039
  },
1035
1040
  {
1036
- "name": "quietStartHour",
1037
- "type": "number"
1038
- },
1039
- {
1040
- "name": "quietEndHour",
1041
- "type": "number"
1041
+ "name": "quietHours",
1042
+ "type": "string"
1042
1043
  }
1043
1044
  ],
1044
1045
  "type": "[object]"
@@ -1570,7 +1571,7 @@
1570
1571
  [
1571
1572
  "object/get",
1572
1573
  "@p",
1573
- "userId"
1574
+ "personId"
1574
1575
  ],
1575
1576
  "@entity.recipient"
1576
1577
  ],
@@ -1581,7 +1582,7 @@
1581
1582
  [
1582
1583
  "object/get",
1583
1584
  "@p",
1584
- "eventType"
1585
+ "eventKey"
1585
1586
  ],
1586
1587
  ""
1587
1588
  ],
@@ -1590,7 +1591,7 @@
1590
1591
  [
1591
1592
  "object/get",
1592
1593
  "@p",
1593
- "eventType"
1594
+ "eventKey"
1594
1595
  ],
1595
1596
  "@config.eventKey"
1596
1597
  ]
@@ -1619,7 +1620,7 @@
1619
1620
  [
1620
1621
  "object/get",
1621
1622
  "@p",
1622
- "userId"
1623
+ "personId"
1623
1624
  ],
1624
1625
  "@entity.recipient"
1625
1626
  ],
@@ -1630,7 +1631,7 @@
1630
1631
  [
1631
1632
  "object/get",
1632
1633
  "@p",
1633
- "eventType"
1634
+ "eventKey"
1634
1635
  ],
1635
1636
  ""
1636
1637
  ],
@@ -1639,7 +1640,7 @@
1639
1640
  [
1640
1641
  "object/get",
1641
1642
  "@p",
1642
- "eventType"
1643
+ "eventKey"
1643
1644
  ],
1644
1645
  "@config.eventKey"
1645
1646
  ]
@@ -1674,7 +1675,7 @@
1674
1675
  [
1675
1676
  "object/get",
1676
1677
  "@p",
1677
- "userId"
1678
+ "personId"
1678
1679
  ],
1679
1680
  "@entity.recipient"
1680
1681
  ],
@@ -1685,7 +1686,7 @@
1685
1686
  [
1686
1687
  "object/get",
1687
1688
  "@p",
1688
- "eventType"
1689
+ "eventKey"
1689
1690
  ],
1690
1691
  ""
1691
1692
  ],
@@ -1694,7 +1695,7 @@
1694
1695
  [
1695
1696
  "object/get",
1696
1697
  "@p",
1697
- "eventType"
1698
+ "eventKey"
1698
1699
  ],
1699
1700
  "@config.eventKey"
1700
1701
  ]
@@ -1723,7 +1724,7 @@
1723
1724
  [
1724
1725
  "object/get",
1725
1726
  "@p",
1726
- "userId"
1727
+ "personId"
1727
1728
  ],
1728
1729
  "@entity.recipient"
1729
1730
  ],
@@ -1734,7 +1735,7 @@
1734
1735
  [
1735
1736
  "object/get",
1736
1737
  "@p",
1737
- "eventType"
1738
+ "eventKey"
1738
1739
  ],
1739
1740
  ""
1740
1741
  ],
@@ -1743,7 +1744,7 @@
1743
1744
  [
1744
1745
  "object/get",
1745
1746
  "@p",
1746
- "eventType"
1747
+ "eventKey"
1747
1748
  ],
1748
1749
  "@config.eventKey"
1749
1750
  ]
@@ -1758,111 +1759,7 @@
1758
1759
  ],
1759
1760
  [
1760
1761
  "set",
1761
- "@entity.prefQuietStart",
1762
- [
1763
- "if",
1764
- [
1765
- "=",
1766
- [
1767
- "array/len",
1768
- [
1769
- "array/filter",
1770
- "@payload.data",
1771
- [
1772
- "fn",
1773
- "p",
1774
- [
1775
- "and",
1776
- [
1777
- "=",
1778
- [
1779
- "object/get",
1780
- "@p",
1781
- "userId"
1782
- ],
1783
- "@entity.recipient"
1784
- ],
1785
- [
1786
- "or",
1787
- [
1788
- "=",
1789
- [
1790
- "object/get",
1791
- "@p",
1792
- "eventType"
1793
- ],
1794
- ""
1795
- ],
1796
- [
1797
- "=",
1798
- [
1799
- "object/get",
1800
- "@p",
1801
- "eventType"
1802
- ],
1803
- "@config.eventKey"
1804
- ]
1805
- ]
1806
- ]
1807
- ]
1808
- ]
1809
- ],
1810
- 0.0
1811
- ],
1812
- 0.0,
1813
- [
1814
- "object/get",
1815
- [
1816
- "array/first",
1817
- [
1818
- "array/filter",
1819
- "@payload.data",
1820
- [
1821
- "fn",
1822
- "p",
1823
- [
1824
- "and",
1825
- [
1826
- "=",
1827
- [
1828
- "object/get",
1829
- "@p",
1830
- "userId"
1831
- ],
1832
- "@entity.recipient"
1833
- ],
1834
- [
1835
- "or",
1836
- [
1837
- "=",
1838
- [
1839
- "object/get",
1840
- "@p",
1841
- "eventType"
1842
- ],
1843
- ""
1844
- ],
1845
- [
1846
- "=",
1847
- [
1848
- "object/get",
1849
- "@p",
1850
- "eventType"
1851
- ],
1852
- "@config.eventKey"
1853
- ]
1854
- ]
1855
- ]
1856
- ]
1857
- ]
1858
- ],
1859
- "quietStartHour"
1860
- ]
1861
- ]
1862
- ],
1863
- [
1864
- "set",
1865
- "@entity.prefQuietEnd",
1762
+ "@entity.prefQuietHours",
1866
1763
  [
1867
1764
  "if",
1868
1765
  [
@@ -1882,7 +1779,7 @@
1882
1779
  [
1883
1780
  "object/get",
1884
1781
  "@p",
1885
- "userId"
1782
+ "personId"
1886
1783
  ],
1887
1784
  "@entity.recipient"
1888
1785
  ],
@@ -1893,7 +1790,7 @@
1893
1790
  [
1894
1791
  "object/get",
1895
1792
  "@p",
1896
- "eventType"
1793
+ "eventKey"
1897
1794
  ],
1898
1795
  ""
1899
1796
  ],
@@ -1902,7 +1799,7 @@
1902
1799
  [
1903
1800
  "object/get",
1904
1801
  "@p",
1905
- "eventType"
1802
+ "eventKey"
1906
1803
  ],
1907
1804
  "@config.eventKey"
1908
1805
  ]
@@ -1913,7 +1810,7 @@
1913
1810
  ],
1914
1811
  0.0
1915
1812
  ],
1916
- 0.0,
1813
+ "",
1917
1814
  [
1918
1815
  "object/get",
1919
1816
  [
@@ -1931,7 +1828,7 @@
1931
1828
  [
1932
1829
  "object/get",
1933
1830
  "@p",
1934
- "userId"
1831
+ "personId"
1935
1832
  ],
1936
1833
  "@entity.recipient"
1937
1834
  ],
@@ -1942,7 +1839,7 @@
1942
1839
  [
1943
1840
  "object/get",
1944
1841
  "@p",
1945
- "eventType"
1842
+ "eventKey"
1946
1843
  ],
1947
1844
  ""
1948
1845
  ],
@@ -1951,7 +1848,7 @@
1951
1848
  [
1952
1849
  "object/get",
1953
1850
  "@p",
1954
- "eventType"
1851
+ "eventKey"
1955
1852
  ],
1956
1853
  "@config.eventKey"
1957
1854
  ]
@@ -1960,7 +1857,7 @@
1960
1857
  ]
1961
1858
  ]
1962
1859
  ],
1963
- "quietEndHour"
1860
+ "quietHours"
1964
1861
  ]
1965
1862
  ]
1966
1863
  ],
@@ -2025,19 +1922,71 @@
2025
1922
  [
2026
1923
  "and",
2027
1924
  [
2028
- "not",
1925
+ "str/includes",
1926
+ "@entity.prefQuietHours",
1927
+ "-"
1928
+ ],
1929
+ [
1930
+ "!=",
2029
1931
  [
2030
- "=",
2031
- "@entity.prefQuietStart",
2032
- "@entity.prefQuietEnd"
1932
+ "str/slice",
1933
+ [
1934
+ "array/first",
1935
+ [
1936
+ "str/split",
1937
+ "@entity.prefQuietHours",
1938
+ "-"
1939
+ ]
1940
+ ],
1941
+ 0.0,
1942
+ 2.0
1943
+ ],
1944
+ [
1945
+ "str/slice",
1946
+ [
1947
+ "array/nth",
1948
+ [
1949
+ "str/split",
1950
+ "@entity.prefQuietHours",
1951
+ "-"
1952
+ ],
1953
+ 1.0
1954
+ ],
1955
+ 0.0,
1956
+ 2.0
2033
1957
  ]
2034
1958
  ],
2035
1959
  [
2036
1960
  "if",
2037
1961
  [
2038
1962
  "<",
2039
- "@entity.prefQuietStart",
2040
- "@entity.prefQuietEnd"
1963
+ [
1964
+ "str/slice",
1965
+ [
1966
+ "array/first",
1967
+ [
1968
+ "str/split",
1969
+ "@entity.prefQuietHours",
1970
+ "-"
1971
+ ]
1972
+ ],
1973
+ 0.0,
1974
+ 2.0
1975
+ ],
1976
+ [
1977
+ "str/slice",
1978
+ [
1979
+ "array/nth",
1980
+ [
1981
+ "str/split",
1982
+ "@entity.prefQuietHours",
1983
+ "-"
1984
+ ],
1985
+ 1.0
1986
+ ],
1987
+ 0.0,
1988
+ 2.0
1989
+ ]
2041
1990
  ],
2042
1991
  [
2043
1992
  "and",
@@ -2047,7 +1996,19 @@
2047
1996
  "time/hour",
2048
1997
  "@now"
2049
1998
  ],
2050
- "@entity.prefQuietStart"
1999
+ [
2000
+ "str/slice",
2001
+ [
2002
+ "array/first",
2003
+ [
2004
+ "str/split",
2005
+ "@entity.prefQuietHours",
2006
+ "-"
2007
+ ]
2008
+ ],
2009
+ 0.0,
2010
+ 2.0
2011
+ ]
2051
2012
  ],
2052
2013
  [
2053
2014
  "<",
@@ -2055,7 +2016,20 @@
2055
2016
  "time/hour",
2056
2017
  "@now"
2057
2018
  ],
2058
- "@entity.prefQuietEnd"
2019
+ [
2020
+ "str/slice",
2021
+ [
2022
+ "array/nth",
2023
+ [
2024
+ "str/split",
2025
+ "@entity.prefQuietHours",
2026
+ "-"
2027
+ ],
2028
+ 1.0
2029
+ ],
2030
+ 0.0,
2031
+ 2.0
2032
+ ]
2059
2033
  ]
2060
2034
  ],
2061
2035
  [
@@ -2066,7 +2040,19 @@
2066
2040
  "time/hour",
2067
2041
  "@now"
2068
2042
  ],
2069
- "@entity.prefQuietStart"
2043
+ [
2044
+ "str/slice",
2045
+ [
2046
+ "array/first",
2047
+ [
2048
+ "str/split",
2049
+ "@entity.prefQuietHours",
2050
+ "-"
2051
+ ]
2052
+ ],
2053
+ 0.0,
2054
+ 2.0
2055
+ ]
2070
2056
  ],
2071
2057
  [
2072
2058
  "<",
@@ -2074,7 +2060,20 @@
2074
2060
  "time/hour",
2075
2061
  "@now"
2076
2062
  ],
2077
- "@entity.prefQuietEnd"
2063
+ [
2064
+ "str/slice",
2065
+ [
2066
+ "array/nth",
2067
+ [
2068
+ "str/split",
2069
+ "@entity.prefQuietHours",
2070
+ "-"
2071
+ ],
2072
+ 1.0
2073
+ ],
2074
+ 0.0,
2075
+ 2.0
2076
+ ]
2078
2077
  ]
2079
2078
  ]
2080
2079
  ]
@@ -2096,9 +2095,17 @@
2096
2095
  [
2097
2096
  "if",
2098
2097
  [
2099
- "=",
2100
- "@entity.channel",
2101
- "in-app"
2098
+ "or",
2099
+ [
2100
+ "=",
2101
+ "@entity.channel",
2102
+ "in-app"
2103
+ ],
2104
+ [
2105
+ "=",
2106
+ "@entity.channel",
2107
+ "in_app"
2108
+ ]
2102
2109
  ],
2103
2110
  [
2104
2111
  "do",
@@ -2939,11 +2946,11 @@
2939
2946
  ],
2940
2947
  "PrefRow": [
2941
2948
  {
2942
- "name": "userId",
2949
+ "name": "personId",
2943
2950
  "type": "string"
2944
2951
  },
2945
2952
  {
2946
- "name": "eventType",
2953
+ "name": "eventKey",
2947
2954
  "type": "string"
2948
2955
  },
2949
2956
  {
@@ -2955,12 +2962,8 @@
2955
2962
  "type": "string"
2956
2963
  },
2957
2964
  {
2958
- "name": "quietStartHour",
2959
- "type": "number"
2960
- },
2961
- {
2962
- "name": "quietEndHour",
2963
- "type": "number"
2965
+ "name": "quietHours",
2966
+ "type": "string"
2964
2967
  }
2965
2968
  ],
2966
2969
  "SubRow": [