@k2b/cloud 0.45.0 → 0.46.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 (71) hide show
  1. package/package.json +5 -2
  2. package/src/_internal/app-queries.ts +73 -0
  3. package/src/_internal/capabilities.ts +137 -9
  4. package/src/_internal/define-app.ts +2 -0
  5. package/src/_internal/registry-validation.ts +17 -4
  6. package/src/_internal/registry.ts +32 -4
  7. package/src/_internal/resource-principals.ts +36 -0
  8. package/src/ai/capabilities.ts +4 -2
  9. package/src/ai/chat/map-messages.ts +270 -0
  10. package/src/ai/chat/map-notebook.browser-harness.tsx +28 -0
  11. package/src/ai/chat/map-notebook.tsx +301 -0
  12. package/src/ai/chat/map-widget.browser-harness.tsx +71 -0
  13. package/src/ai/chat/map-widget.css +107 -0
  14. package/src/ai/chat/map-widget.tsx +1279 -0
  15. package/src/ai/chat/message-utils.ts +1 -0
  16. package/src/ai/chat/tool-names.ts +2 -0
  17. package/src/ai/chat/turn-layout.ts +2 -1
  18. package/src/ai/chat/turn-view.tsx +17 -1
  19. package/src/ai/default-tools.ts +3 -0
  20. package/src/ai/executor.ts +13 -1
  21. package/src/ai/map-contracts.ts +209 -0
  22. package/src/ai/map-execution.ts +14 -0
  23. package/src/ai/map-notebook-save.ts +276 -0
  24. package/src/ai/map-notebook.ts +32 -0
  25. package/src/ai/map-opening-hours.ts +40 -0
  26. package/src/ai/map-routes.ts +84 -0
  27. package/src/ai/map-service.ts +288 -0
  28. package/src/ai/map-store.ts +137 -0
  29. package/src/ai/map-tool.ts +73 -0
  30. package/src/ai/migrate.ts +3 -0
  31. package/src/ai/protocol.ts +3 -1
  32. package/src/ai/routes.ts +2 -0
  33. package/src/ai/store.ts +19 -6
  34. package/src/ai/tools.ts +14 -0
  35. package/src/ai/types.ts +3 -0
  36. package/src/api/capabilities.ts +90 -12
  37. package/src/api/mcp.ts +4 -2
  38. package/src/browser/notifications.ts +25 -8
  39. package/src/capabilities/discussion-providers.ts +99 -0
  40. package/src/capabilities/executions.ts +2 -2
  41. package/src/capabilities/migrate.ts +10 -1
  42. package/src/capabilities/resource-readers.ts +58 -0
  43. package/src/capabilities/server-invoke.ts +23 -13
  44. package/src/capabilities/server.ts +17 -6
  45. package/src/capabilities/testing.ts +13 -0
  46. package/src/contracts/capabilities.ts +137 -4
  47. package/src/contracts/discussions.ts +91 -0
  48. package/src/contracts/geo-document.ts +60 -0
  49. package/src/contracts/geo-snapshot.ts +86 -0
  50. package/src/contracts/geo.ts +14 -0
  51. package/src/contracts/index.ts +2 -0
  52. package/src/contracts/outgoing-mail.ts +1 -1
  53. package/src/contracts/resource-types.ts +21 -0
  54. package/src/geo/AddressAutocomplete.tsx +213 -0
  55. package/src/geo/messages.ts +29 -0
  56. package/src/geo/navigation.ts +25 -0
  57. package/src/geo/ui.ts +2 -0
  58. package/src/services/accounts/app.ts +28 -6
  59. package/src/services/accounts/entities.ts +11 -4
  60. package/src/services/accounts/groups.ts +10 -4
  61. package/src/services/accounts/local-groups.ts +87 -38
  62. package/src/services/accounts/machine-group-management.ts +94 -0
  63. package/src/services/geo/cache.ts +2 -1
  64. package/src/services/geo/geoapify.ts +3 -0
  65. package/src/services/identity/invocation-token.ts +110 -0
  66. package/src/services/pdf/geo-snapshot.ts +107 -0
  67. package/src/services/pdf/index.ts +2 -0
  68. package/src/ssr/AdminArea.tsx +2 -2
  69. package/src/ssr/AdminLayout.tsx +1 -1
  70. package/src/ssr/AdminSidebar.tsx +1 -1
  71. package/src/styles/global.css +2 -0
@@ -0,0 +1,107 @@
1
+ .ai-map-host { container: assistant-map / inline-size; min-width:0; width:100%; }
2
+ .ai-map { --map-second: #0f766e; display:flex; flex-direction:column; gap:14px; width:100%; min-width:0; color:var(--k2b-text); font-size:14px; line-height:1.45; scroll-margin-top:24px; }
3
+ .ai-map p { margin:0; }
4
+ .ai-map a,.ai-map__jump { color:var(--k2b-action); }
5
+ .ai-map__head { display:flex; align-items:center; gap:6px; height:29px; overflow:hidden; white-space:nowrap; font-size:18px; }
6
+ .ai-map__chip { display:inline-flex; align-items:center; flex:none; height:28px; border-radius:7px; padding:0 9px; background:var(--ui-field); font-size:14px; }
7
+ .ai-map__split { display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); gap:20px; height:344px; }
8
+ .ai-map__info { grid-column:2; grid-row:1; height:232px; min-width:0; display:flex; flex-direction:column; gap:8px; padding:4px 4px 0; overflow:hidden; font-size:13.5px; }
9
+ .ai-map__info h4 { margin:0; font-size:17px; font-weight:600; line-height:1.3; }
10
+ .ai-map__info>div { overflow:hidden; text-overflow:ellipsis; }
11
+ .ai-map__info small,.ai-map__provenance { color:var(--ui-text-dimmed); font-size:12.5px; }
12
+ .ai-map__description { display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; flex-shrink:0; }
13
+ .ai-map__list { grid-column:1; grid-row:1; display:flex; flex-direction:column; gap:2px; height:344px; overflow:auto; }
14
+ .ai-map__list:focus-visible { outline:2px solid var(--k2b-focus-ring); outline-offset:2px; border-radius:10px; }
15
+ .ai-map__place { display:grid; grid-template-columns:26px minmax(0,1fr) auto; gap:10px; align-items:center; min-height:52px; flex:none; padding:6px 10px; border-radius:10px; cursor:pointer; }
16
+ .ai-map__place:hover { background:var(--ui-hover); }
17
+ .ai-map__place[aria-selected=true] { background:color-mix(in srgb,var(--k2b-action-solid) 12%,transparent); }
18
+ .ai-map__place[data-second=true][aria-selected=true] { background:color-mix(in srgb,var(--map-second) 12%,transparent); }
19
+ .ai-map__mark { width:24px; height:24px; border-radius:50%; display:grid; place-items:center; font-size:12px; font-weight:600; box-shadow:inset 0 0 0 2px var(--k2b-action-solid); }
20
+ .ai-map__place[data-second=true] .ai-map__mark { box-shadow:inset 0 0 0 2px var(--map-second); }
21
+ .ai-map__place-text { display:flex; flex-direction:column; min-width:0; }
22
+ .ai-map__place-text>span,.ai-map__place-text>small { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
23
+ .ai-map__place-text>span { font-weight:500; }
24
+ .ai-map__place-text>small { font-size:12.5px; color:var(--ui-text-dimmed); }
25
+ .ai-map__distance { font-size:13px; font-variant-numeric:tabular-nums; }
26
+ .ai-map__actions { display:flex; gap:8px; align-items:center; flex-wrap:wrap; }
27
+ .ai-map__actions>.k2b-field { flex:1; min-width:100px; }
28
+ .ai-map__zone { min-height:34px; }
29
+ .ai-map__provenance { height:18px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
30
+ .ai-map__facts { display:flex; gap:32px; align-items:baseline; height:53px; font-variant-numeric:tabular-nums; }
31
+ .ai-map__facts>div { display:flex; flex-direction:column; }
32
+ .ai-map__facts strong { font-size:24px; font-weight:600; line-height:1.2; }
33
+ .ai-map__facts [data-gain=true] { color:var(--k2b-success-text); }
34
+ .ai-map__facts small { font-size:13px; }
35
+ .ai-map__stages { height:241px; overflow:auto; display:flex; flex-direction:column; gap:0; }
36
+ .ai-map__leg { display:grid; grid-template-columns:56px minmax(0,1fr) 76px 76px; align-items:center; gap:10px; min-height:40px; padding:0 10px; border-radius:9px; font-size:13.5px; flex:none; }
37
+ .ai-map__leg>span { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
38
+ .ai-map__leg>span:nth-last-child(-n+2) { text-align:right; font-variant-numeric:tabular-nums; }
39
+ .ai-map__leg small { margin-left:6px; color:var(--ui-text-dimmed); font-size:12px; }
40
+ .ai-map__leg[data-changed=true] { background:color-mix(in srgb,var(--map-second) 10%,transparent); }
41
+ .ai-map[data-kind=route] .ai-map__zone { min-height:128px; }
42
+ .ai-map__confirm,.ai-map__opts,.ai-map__search,.ai-map__save { display:flex; flex-direction:column; gap:8px; }
43
+ .ai-map__confirm>p { font-size:17px; line-height:1.6; }
44
+ .ai-map__receipt { display:flex; align-items:center; gap:10px; min-height:40px; }
45
+ .ai-map__receipt time { margin-left:auto; color:var(--ui-text-dimmed); font-size:12.5px; }
46
+ .ai-map__state { padding:14px 10px; display:flex; flex-direction:column; gap:8px; }
47
+ .ai-map__state>p { color:var(--ui-text-dimmed); }
48
+ .ai-map__error { display:flex; align-items:center; flex-wrap:wrap; gap:8px; font-size:13px; }
49
+ .ai-map__more { align-self:flex-start; min-height:40px; }
50
+ @container assistant-map (max-width:599px) {
51
+ .ai-map[data-kind=places] .ai-map__zone { min-height:76px; }
52
+ .ai-map__head { height:36px; font-size:16px; }
53
+ .ai-map__split { display:flex; flex-direction:column; gap:6px; height:544px; }
54
+ .ai-map__info { height:228px; flex:none; padding:0 2px; }
55
+ .ai-map__list { height:310px; flex:none; overflow:hidden; padding-top:14px; }
56
+ .ai-map__list .ai-map__place:nth-child(n+6) { display:none; }
57
+ .ai-map__list[data-expanded=true] .ai-map__place { display:grid; }
58
+ .ai-map[data-expanded=true] .ai-map__list,.ai-map[data-expanded=true] .ai-map__split { height:auto; overflow:visible; }
59
+ .ai-map[data-kind=places] .k2b-map-view { height:230px !important; }
60
+ .ai-map[data-kind=places] .ai-map__zone>.ai-map__actions { display:grid; grid-template-columns:1fr 1fr; }
61
+ .ai-map[data-kind=places] .ai-map__zone>.ai-map__actions>:nth-child(3) { grid-column:1 / -1; grid-row:2; }
62
+ .ai-map[data-kind=route] .k2b-map-view { height:240px !important; }
63
+ .ai-map__stages { height:286px; overflow:visible; }
64
+ .ai-map__leg { grid-template-columns:42px minmax(0,1fr) 54px 48px; gap:6px; padding:0 4px; font-size:12px; }
65
+ .ai-map__leg small { display:block; margin:0; }
66
+ .ai-map[data-kind=route] .ai-map__zone { min-height:150px; }
67
+ .ai-map__facts { gap:14px; }
68
+ .ai-map__facts strong { font-size:21px; }
69
+ .ai-map__opts { font-size:12px; }
70
+ }
71
+ @media (min-width:800px) { @container assistant-map (max-width:368px) {
72
+ .ai-map[data-kind=places] .k2b-map-view { height:200px !important; }
73
+ }
74
+
75
+ }
76
+
77
+ .ai-map__placeholder { min-height:811px; justify-content:center; align-items:center; }
78
+ .ai-map__placeholder[data-kind=route] { min-height:869px; }
79
+ .ai-map__skeleton { display:flex; flex-direction:column; gap:18px; padding:14px 10px; width:100%; }
80
+ .ai-map__skeleton span { height:34px; border-radius:8px; background:var(--ui-field); }
81
+ .ai-map__route-place { padding:10px; font-size:12px; color:var(--ui-text-dimmed); }
82
+ .ai-map__stages { overflow:visible; }
83
+ .ai-map__stages:has(.ai-map__leg:nth-child(n+7)) { height:auto; }
84
+ @container assistant-map (max-width:599px) { .ai-map__placeholder { min-height:960px; } .ai-map__placeholder[data-kind=route] { min-height:853px; } }
85
+
86
+ :where(.dark,[data-theme="dark"]) .ai-map { --map-second:#14b8a6; }
87
+
88
+ .ai-map__candidate { flex:none; height:40px; justify-content:flex-start; text-align:left; }
89
+ .ai-map__candidate span { white-space:nowrap; text-overflow:ellipsis; overflow:hidden; }
90
+ .ai-map__saved-stops { list-style:none; margin:0; padding:0 10px; display:grid; gap:8px; }
91
+ .ai-map__order { display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); gap:20px; padding:8px 10px; }
92
+ .ai-map__order ol { margin:8px 0 0; padding-left:22px; }
93
+ .ai-map__order li { line-height:1.8; overflow-wrap:anywhere; }
94
+ .ai-map__order>div:first-child ol { color:var(--ui-text-dimmed); }
95
+ .ai-map__stages:has(.ai-map__order li:nth-child(n+7)) { height:auto; }
96
+
97
+ .ai-map__group { height:24px; flex:none; display:flex; align-items:center; gap:6px; padding:0 10px; font-size:12.5px; font-weight:500; color:var(--k2b-action-solid); }
98
+ .ai-map__group::before { content:""; width:7px; height:7px; border-radius:50%; background:currentColor; }
99
+ .ai-map__group[data-second=true] { color:var(--map-second); }
100
+ .ai-map__chip[data-second=true] { color:var(--map-second); background:color-mix(in srgb,var(--map-second) 12%,transparent); }
101
+ .ai-map__place[aria-selected=true] .ai-map__mark { background:var(--k2b-action-solid); color:var(--k2b-surface); box-shadow:none; }
102
+ .ai-map__place[data-second=true][aria-selected=true] .ai-map__mark { background:var(--map-second); }
103
+ .ai-map__zone>.ai-map__actions>.k2b-button { min-height:34px; height:34px; }
104
+ .ai-map__actions[data-quiet=true] { visibility:hidden; }
105
+ .ai-map__receipt { min-height:24px; height:24px; }
106
+ .ai-map__receipt>span { min-width:0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
107
+ .ai-map__receipt time,.ai-map__receipt .k2b-button { flex:none; }