Commit Graph
100 Commits
Author SHA1 Message Date
Sameh Khamis 9560a6dcd1 Merge pull request #1599 from bilawalsidhu/fix/keyless-voice-key-hint
fix(voice): keyless mic says where to add the OpenAI key
2026-11-10 16:22:58 -08:00
Sameh Khamis 775e9df120 Merge pull request #835 from kvnloo/feat/viewport-context-decision-upstream
feat(voice): reason-code viewport context escalation
2026-11-10 16:04:54 -08:00
Sameh Khamis 49edc31879 Merge branch 'main' into feat/viewport-context-decision-upstream 2026-11-10 15:54:49 -08:00
Sameh Khamis 4442243749 Merge pull request #1659 from bilawalsidhu/sameh/detection-occlusion
Hide street-vehicle brackets and labels behind buildings and terrain
2026-11-10 15:45:56 -08:00
Sameh Khamis 126616ac6c Merge pull request #1657 from bilawalsidhu/sameh/photo-without-credit
feat(flights): show a Planespotters photo even when it names no photographer
2026-11-10 14:32:17 -08:00
Sameh Khamis c068dc2290 Merge branch 'main' into sameh/photo-without-credit 2026-11-10 14:23:06 -08:00
Sameh Khamis e5bf072f6c Merge pull request #1583 from IMBrandao/feat/shipwrecks
feat(layers): add shipwrecks layer (EMODnet + Wikidata)
2026-11-10 14:19:54 -08:00
Sameh Khamis 85b1694bad Merge pull request #1656 from bilawalsidhu/sameh/signal-lost-followups
fix(flights): a stalled feed dims the tracked aircraft as STALE
2026-11-10 13:13:14 -08:00
Sameh Khamis c87510fd2e Merge pull request #1574 from IMBrandao/feat/transit-icon-heading
feat(transit): give vehicle icons a readable front, and none without a course
2026-11-10 12:36:09 -08:00
Sameh Khamis 05daaf267a Merge branch 'main' into feat/transit-icon-heading 2026-11-10 12:24:46 -08:00
Sameh Khamis 3da4204e97 Merge pull request #1655 from bilawalsidhu/sameh/route-corridor
fix(flights): a long flight keeps its route up to 15% of its length off the great circle
2026-11-10 11:53:33 -08:00
Sameh Khamis d1cd7f63ef Merge branch 'main' into sameh/route-corridor 2026-11-10 11:45:29 -08:00
Sameh Khamis 9947c6b2e5 Merge pull request #1654 from bilawalsidhu/sameh/flight-trails
feat(flights): trails split at gaps and follow the aircraft; a lost aircraft coasts, then reads SIGNAL LOST
2026-11-10 11:43:22 -08:00
Sameh Khamis 66a8ff06cb Merge pull request #1650 from bilawalsidhu/sameh/firms-window-label
fix(firms): label a snapshot that ends at a set time with that time, not LIVE
2026-11-10 10:44:53 -08:00
Sameh Khamis bb45aacb24 Merge branch 'main' into sameh/firms-window-label 2026-11-10 10:27:01 -08:00
Sameh Khamis bb40ac5e54 Merge pull request #1647 from bilawalsidhu/sameh/flight-photo
Show the tracked aircraft's Planespotters photo in Contacts
2026-11-09 21:21:22 -08:00
Sameh Khamis 9fe27c2d75 Merge branch 'main' into sameh/flight-photo 2026-11-09 21:13:16 -08:00
Sameh Khamis c620fac9dc Merge pull request #1645 from bilawalsidhu/sameh/traffic-lines-one-build
perf(traffic): build road lines one set at a time
2026-11-09 20:41:55 -08:00
Sameh Khamis 78c5b6c245 Merge pull request #1641 from bilawalsidhu/sameh/draw-shape
Applications can take the pointer for their own tool
2026-11-09 17:38:26 -08:00
Sameh Khamis 28907caf7b Merge branch 'main' into sameh/draw-shape 2026-11-09 17:30:15 -08:00
Sameh Khamis da134328ef Merge pull request #1642 from bilawalsidhu/sameh/transit-floor-fix
Keep vehicles off rooftops and bridge decks by reading the 3D-tile surface where each vehicle is
2026-11-09 15:12:25 -08:00
Sameh Khamis 027c9616a5 Merge pull request #1637 from bilawalsidhu/sameh/orbital-followups
Orbital cockpit follow-ups: sensor strip through zoom, one owner-flag sheet, place names in the loading status
2026-11-08 20:21:29 -08:00
Sameh Khamis 1453794573 Merge pull request #1636 from bilawalsidhu/feat/draw-mark-actions
Draw rows take an application's own actions
2026-11-08 18:27:04 -08:00
Sameh Khamis eb1969e874 Merge branch 'main' into feat/draw-mark-actions 2026-11-08 18:20:47 -08:00
Sameh Khamis 4ee617cf42 Merge pull request #1580 from ZloyS/denis/gev-orbital-focus
feat(cockpit): keep the orbital camera on a ground target
2026-11-08 17:21:27 -08:00
Sameh Khamis 745c11969b Merge pull request #1560 from ZloyS/denis/gev-sensor-zoom
feat(cockpit): zoom the orbital view to the imaging sensor's swath
2026-11-08 16:53:41 -08:00
Sameh Khamis a274d10038 Merge pull request #1559 from ZloyS/denis/gev-orbital-view
feat(cockpit): ride a tracked satellite in an orbital view
2026-11-08 16:27:41 -08:00
Sameh Khamis e944f75275 Merge pull request #1558 from ZloyS/denis/gev-satellite-classes
feat(satellites): file satellites under six classes with a toggle each
2026-11-08 16:17:12 -08:00
Sameh Khamis 30fbfe238f Merge pull request #1557 from ZloyS/denis/gev-ship-bridge
feat(cockpit): ride the selected vessel from its bridge
2026-11-08 16:03:54 -08:00
Sameh Khamis 922712121c Merge pull request #1634 from bilawalsidhu/fix/layer-state-registered-only
Layer state keeps only layers the application registered
2026-11-08 14:28:48 -08:00
Sameh Khamis 7ee7dc26b8 Merge pull request #1513 from bilawalsidhu/sameh/world-timeline-launches
Move launches with the timeline, choose its speed, and wait for data while it plays
2026-11-08 12:32:37 -08:00
Sameh Khamis ff0b4d8449 Merge branch 'main' into sameh/world-timeline-launches 2026-11-08 12:24:39 -08:00
Sameh Khamis 424bcb0843 Merge pull request #1512 from bilawalsidhu/sameh/world-clock
Keep one world clock, with a timeline to move it
2026-11-08 12:23:12 -08:00
Sameh Khamis 6cadfc9583 Merge pull request #1620 from bilawalsidhu/fix/cctv-initial-nearest-camera
CCTV opens on the camera nearest the viewer, not the first in the catalog
2026-11-07 04:04:38 -08:00
Sameh Khamis c0a5d4141d Merge pull request #1616 from bilawalsidhu/fix/chat-tool-schema-patterns
fix(chat): send OpenAI chat tool schemas Chat Completions accepts
2026-11-06 22:21:05 -08:00
Sameh Khamis 6e4da23cf7 Merge pull request #1609 from bilawalsidhu/feat/traffic-lines-toggle
Street Traffic: Lines and Dots toggles; hosts choose which road modes they offer
2026-11-06 13:46:00 -08:00
Sameh Khamis a33bc379cb Merge pull request #1595 from bilawalsidhu/fix/traffic-flow-error-labels
Traffic: name an account's traffic limit instead of a daily budget
2026-11-05 21:29:09 -08:00
Sameh Khamis ad009ea1eb Merge pull request #1591 from lyehe/pr/wildlife-sightings
feat: Wildlife Sightings layer from iNaturalist and Acartia
2026-11-05 17:32:05 -08:00
Sameh Khamis 93d495b0e5 Merge branch 'main' into pr/wildlife-sightings 2026-11-05 17:24:06 -08:00
Sameh Khamis 3650dd818b Merge pull request #1532 from manjunath22466/fix/globe-free-look-orbit
fix(camera): keep the globe in view from orbit
2026-11-05 17:23:37 -08:00
Sameh Khamis d807c3007e Merge branch 'main' into pr/wildlife-sightings 2026-11-05 17:15:10 -08:00
Sameh Khamis d00ced38bf Merge pull request #1520 from manjunath22466/manjunath/hal-695-voice-tilt
Fix voice camera tilt from a top-down view
2026-11-05 17:07:42 -08:00
Sameh Khamis 2470b39f88 Merge pull request #1556 from ZloyS/denis/gev-cockpit-entry
feat(cockpit): enter Cockpit with only the ridden aircraft's layer on
2026-11-05 14:11:28 -08:00
Sameh Khamis e3f668831c Merge branch 'main' into denis/gev-cockpit-entry 2026-11-05 14:01:31 -08:00
Sameh Khamis 0ff48ba059 Merge pull request #1546 from manjunath22466/fix/chat-provider-switch-keeps-context
fix(voice): keep chat's view across a provider switch and clear stale errors
2026-11-05 13:50:48 -08:00
Sameh Khamis a75b495cf9 Merge branch 'main' into fix/chat-provider-switch-keeps-context 2026-11-05 13:43:40 -08:00
Sameh Khamis 73c14ac749 Merge pull request #1507 from manjunath22466/feat/typed-ai-chat
feat(voice): add typed AI chat beside voice
2026-11-03 16:14:58 -08:00
Sameh Khamis 7322ce5ebd Merge pull request #1125 from mvanhorn/fix/houston-cctv-pack
feat(cctv): add Houston TranStar camera pack
2026-11-03 15:17:33 -08:00
Sameh Khamis 6fd072bf79 Merge pull request #1086 from mvanhorn/fix/drone-airspace
feat(layers): add FAA drone restrictions airspace layer
2026-11-03 14:52:24 -08:00
Sameh Khamis 1facc09f8d Merge pull request #1519 from manjunath22466/manjunath/hal-769-gev-ux-improve-visibility-of-the-250-km-radius-circle
feat(awareness): add calm sonar pulses that flash the range ring and echo contacts
2026-11-03 11:13:29 -08:00
Sameh Khamis a4e1763b53 Merge pull request #1518 from manjunath22466/manjunath/hal-769-range-ring-visibility
fix(awareness): make the 250 km range ring readable on any ground
2026-11-03 10:59:48 -08:00
Sameh Khamis acc9531b3f Merge pull request #846 from bilawalsidhu/feat/voice-geometry
feat(voice): voice geometry — reusable areas, drawn-area counts, recent imagery by voice
2026-11-03 09:58:58 -08:00
Sameh Khamis 48146f8e5b Merge pull request #1522 from bilawalsidhu/fix/zoom-out-runaway
fix: keep the globe on screen when zooming out from a tilted view
2026-11-03 09:42:53 -08:00
Sameh Khamis 93804d5dbd Merge pull request #1527 from bilawalsidhu/sameh/restore-format-scope
fix(tooling): restore 97 format-scope entries dropped by a merge
2026-11-03 09:04:26 -08:00
Sameh Khamis 0e27d69fcc Merge pull request #1514 from bilawalsidhu/sameh/hud-honest-comment
Say which HUD readouts are real camera values and which are styling
2026-11-02 14:35:43 -08:00
Sameh Khamis b847ba5508 Merge pull request #842 from bilawalsidhu/feat/voice-outlines
feat(outlines): voice outlines without Overpass - bundled places, guarded Nominatim and shared OpenFreeMap tiles
2026-11-02 14:12:27 -08:00
Sameh Khamis 4c94f202d7 Merge pull request #210 from gaurav7902/main
docs: fix stale reference, document Shinjuku pilot pack, clarify test prerequisites
2026-11-02 08:05:35 -08:00
Sameh Khamis a61f6fb1bd Merge pull request #1457 from ZloyS/denis/hal-728-dock-icon-only-wings
fix(dock): show only icons on the narrow dock wings so labels stop covering the voice control
2026-11-02 07:54:57 -08:00
Sameh Khamis bab5157989 Merge pull request #1427 from Sunil56224972/security/cross-site-gate-overpass-military
fix(security): add cross-site gate to military-installations proxy
2026-11-02 07:45:16 -08:00
Sameh Khamis 0088df95ca Merge pull request #980 from johnleshan/docs/add-codespaces-deployment
docs(readme): add GitHub Codespaces setup path
2026-11-02 07:35:00 -08:00
Sameh Khamis ebd8439868 Merge pull request #1093 from Aliciawque/fix/multipart-cable-feature-ownership
fix(cables): preserve feature ownership across multipart geometry
2026-11-02 07:26:36 -08:00
Sameh Khamis 720260af58 Merge pull request #1462 from quanticsoul4772/upstream/voice-alias-hint-budget
fix(voice): leave aliases a layer id already spells out of the alias hint
2026-11-02 07:17:49 -08:00
Sameh Khamis fb06eab03f Merge pull request #1447 from Rohilalala/fix/e-bikeshare-derived-capacity
fix(bikeshare): re-derive a station's missing capacity on every poll
2026-11-02 07:06:39 -08:00
Sameh Khamis 151ce3dee7 Merge pull request #1448 from Rohilalala/fix/e-local-adsb-geom-rate
fix(local-adsb): show a decoder feed's GNSS-sourced vertical rate
2026-11-02 00:18:11 -08:00
Sameh Khamis abe138884e Merge pull request #1436 from Rohilalala/fix/d-military-geom-vertical-rate
fix(military): read a GNSS-sourced vertical rate when no baro rate is sent
2026-11-02 00:09:05 -08:00
Sameh Khamis dc261025ea Merge pull request #1453 from Rohilalala/fix/e-satellite-launch-year
fix(satellites): stop matching a mission to a namesake from another year
2026-11-02 00:01:39 -08:00
Sameh Khamis 5a2bd8d9f9 Merge pull request #1449 from Rohilalala/fix/e-cable-tool-duplicates
fix(tools): list a split submarine cable once in find_submarine_cables
2026-11-01 23:51:06 -08:00
Sameh Khamis bd4f10b225 Merge pull request #1442 from Rohilalala/fix/e-traffic-coverage-rounding
fix(traffic): stop a few matched roads reading as "no matches"
2026-11-01 23:42:28 -08:00
Sameh Khamis c40f67a345 Merge pull request #1434 from Rohilalala/fix/c-unknown-altitude-speech
fix(voice): leave out an unreported altitude instead of saying 0 feet
2026-11-01 23:35:07 -08:00
Sameh Khamis 7e952d031c Merge pull request #1444 from Rohilalala/fix/e-replay-speed-countdown
fix(missions): keep the replay countdown real-time when the speed changes
2026-11-01 23:25:32 -08:00
Sameh Khamis 0c67f54d2b Merge pull request #1443 from Rohilalala/fix/e-replay-countdown-ten
fix(missions): run the full T-10 replay countdown after the tile hold
2026-11-01 23:15:58 -08:00
Sameh Khamis a38c9a6b22 Merge pull request #1433 from Rohilalala/fix/b-awareness-marker-km
fix(awareness): show a 999.6 m contact marker as 1.0 km, not 1000 m
2026-11-01 23:06:33 -08:00
Sameh Khamis 4ef37d44c5 Merge pull request #1502 from bilawalsidhu/sameh/core-leftovers
Keep the timing test's Vite cache out of the package tree
2026-11-01 22:53:51 -08:00
Sameh Khamis e8d5e8793e Merge pull request #1501 from bilawalsidhu/sameh/rail-pills
Show the panel rails as labelled pills until a panel opens
2026-11-01 22:47:03 -08:00
Sameh Khamis 6acaa01ca8 Merge pull request #1445 from Rohilalala/fix/e-route-label-kilometre
fix(annotations): label a 996 m line or route as 1.0 km, not 1000 m
2026-11-01 22:40:05 -08:00
Sameh Khamis 561141fe55 Merge pull request #1450 from Rohilalala/fix/e-route-distance-ten-km
fix(directions): show a 9.96 km route as 10 km, not 10.0 km
2026-11-01 22:30:48 -08:00
Sameh Khamis 27000cf6da Merge pull request #1454 from Rohilalala/fix/e-context-heading-north
fix(flights): read a 359.6° track as 0° in the voice context, not 360°
2026-11-01 22:22:14 -08:00
Sameh Khamis 0c28dc78a5 Merge pull request #1500 from bilawalsidhu/sameh/vue-loader-cache
Cache compiled components and load them on the test thread
2026-11-01 21:56:55 -08:00
Sameh Khamis 13a04a8957 Merge pull request #1441 from Rohilalala/fix/e-cctv-heading-north
fix(cctv): show a camera facing 359.6° as HDG 0°, not HDG 360°
2026-11-01 21:41:39 -08:00
Sameh Khamis ebb726c03c Merge pull request #1432 from Rohilalala/fix/b-vessel-course-north
fix(vessels): show a 359.7° course as 0°, not 360°
2026-11-01 21:28:31 -08:00
Sameh Khamis 87e5cf3f93 Merge pull request #1451 from Rohilalala/fix/e-alpr-direction-360
fix(alpr): show a 359.6° camera bearing as 0°, not 360°
2026-11-01 21:16:18 -08:00
Sameh Khamis 07094d9be2 Merge pull request #1452 from Rohilalala/fix/e-transit-heading-north
fix(transit): show a reported 359.6° bearing as hdg 0°, not hdg 360°
2026-11-01 21:04:18 -08:00
Sameh Khamis 92bb1d6a89 Merge pull request #1479 from bilawalsidhu/german/hal-644-ar
i18n: Arabic (ar), the first right-to-left language
2026-11-01 20:44:13 -08:00
Sameh Khamis accfa1fa85 Merge pull request #1499 from bilawalsidhu/sameh/core-vue
Move the application UI to Vue and Pinia
2026-11-01 20:04:46 -08:00
Sameh Khamis 0d1a68160e Merge pull request #1494 from bilawalsidhu/sameh/weather-product-metadata
Let a weather source describe its own products
2026-10-31 23:07:08 -07:00
Sameh Khamis 3824a47df8 Merge pull request #1493 from bilawalsidhu/sameh/firms-test-localhost
test(firms): stop the all-addresses connect test depending on how localhost resolves
2026-10-31 17:58:29 -07:00
Sameh Khamis 8978801dfd Merge pull request #1491 from bilawalsidhu/sameh/gnss-source-window
Let a GNSS integrity source set the layer's evidence window
2026-10-31 16:48:51 -07:00
Sameh Khamis 423ca3ca5f Merge pull request #1485 from bilawalsidhu/sameh/cctv-view-lod
perf(cctv): draw only the cameras in view, thinned when zoomed out
2026-10-29 21:42:23 -07:00
Sameh Khamis 03201451c0 Merge pull request #1463 from bilawalsidhu/sameh/security-audit-fixes
chore(deps): update Vite and Puppeteer, and remove the unused screenshot helper
2026-10-28 22:44:07 -07:00
Sameh Khamis f2c6ff082d Merge pull request #1459 from bilawalsidhu/sameh/hud-google-lookups
Cut the Google requests the HUD summary makes on its own
2026-10-28 17:43:25 -07:00
Sameh Khamis 7914370b14 Merge branch 'main' into sameh/hud-google-lookups 2026-10-28 17:37:20 -07:00
Sameh Khamis 72eb3fdc73 Merge pull request #1439 from bilawalsidhu/release/v0.3.0
chore(release): prepare v0.3.0
2026-10-27 22:17:54 -07:00
Sameh Khamis 15de9d738c fix(i18n): mark style labels without loading the catalogs (#1421)
The style shaders and visualPresets imported msg() from src/i18n/index.js,
which loads every locale catalog. The share-view codec reads the styles'
defaults, so a server bundling the codec carried about 0.9 MB of
translations it never uses. They now import the catalog-free marker, as
other portable modules do; the codec's bundle drops from about 1 MB to
130 KB.
2026-10-26 16:54:01 -07:00
Sameh Khamis 6152f9f311 fix(search): keep a missed location query in the field so it can be corrected (#1420)
A location search that found nothing or failed now keeps its query, the open field and focus (text selected), and shows a persistent role=alert message under the search row instead of a toast. Typing, a new search or closing the emptied field clears it. HAL-727.
2026-10-26 16:44:34 -07:00
Sameh Khamis 3d9f153bc0 feat(share): export the share-view codec and link-path helpers (#1419)
* feat(share): export the share-view codec for host servers

Add `@gods-eye-view/core/share/view-codec` (src/share/viewCodec.js) as a
package export with its own boundary group. The codec is pure (no DOM, no
Cesium, no external dependencies), so a host's server can decode a
/share/<code> link, for example to describe the view in link previews.

* feat(share): export the share-link address helpers

Add `@gods-eye-view/core/share/link-path` (src/share/shareLinkPath.js), so a
host's server reads /share/<code> addresses the way the app does.
2026-10-26 16:20:23 -07:00
Sameh Khamis da02fd8645 feat(share): short /share/<code> links with a compact versioned view format (#1418)
* feat(share): add compact versioned share-view codec

Add a standalone codec for `#s=<base64url>` share links: a version byte
followed by protobuf-style tag-length-value fields. Settings equal to
their default are omitted and refilled from the same table on decode;
unknown fields are skipped by wire type, so new fields never break
older apps. Views are a place (camera) or a thing (an aircraft,
military aircraft, vessel or satellite to follow, with camera offset
and last-known fix); an unknown kind falls back to the camera.

The decoder bounds its input and rejects malformed payloads with a
reason instead of throwing. A converter maps the long form's parsed
state to and from the codec state; the long form is unchanged.

* fix(share): tighten codec decoding after review

Unknown detection mode and allocation names now fall back to their
defaults instead of reaching the lenient long-form migration. Future
panel values and style-parameter tokens are skipped rather than applied
or rejected, and layer options are accepted only under their owner
layer. Wrap longitudes before scaling, normalize negative zero, reuse
the layer-state tracking ID grammar, and align the format doc with the
decoder.

* feat(share): let a host share the link its own way

ShareLinkManager.buildLink() returns the current share link without
copying it, and copyLink() now copies exactly that. The share button
passes the link to an optional services.shareLink(url), which resolves
to 'shared', 'copied', 'cancelled' or false; 'cancelled' shows no toast
and 'shared' shows the new "Link shared" (es, ru, zh-CN). Without the
service the button copies as before.

* feat(share): open and make short /share/<code> links

The share button now makes `<app>/share/<code>` links with the compact
share-view code, and the app opens them at start-up through the same
restore pipeline as long links. Once the app next writes the address, the
share path is replaced (no new history entry) by the app's own address and
the live long-form hash, so a reload follows the live view. A host can pass
the code as `initialShareCode` instead. A code that fails to decode restores
nothing and shows "This share link can't be opened".

The code gains a trailing CRC-8 check byte, so any single mistyped
character is rejected instead of opening a different view. Thing views no
longer store a camera: it is derived from the entity's last-known fix and
the follow offset on a sphere, the entity kind is implied by the id's
field, and the followed entity's layer bit is implied; an aircraft followed
from the app's own camera is a 42-character code. The `#s=` hash form is
gone.

While the camera follows an aircraft, military aircraft or satellite, the
link is a thing view with the camera's offset and the entity's position.
Opening one turns the layer on and follows the entity through the existing
shared-follow restore, then swings the camera round to the shared offset; a
vessel view selects the vessel once the vessel feed has it. If the entity
is not reporting within its window, the view stays at its last-known fix
and says so. The panel and style-parameter tables now come from the codec,
and a host share hook that returns a plain value or throws still gets a
toast.

* fix(share): encode style settings against the style's own look

Settings a style applies when selected (bloom, sharpen, HUD, detection,
celestial ring and the style's shader parameters) now default, per field,
to what that style applies in a fresh session, read from the tables the
app applies (the first-load baseline, the style presets and the shader
defaults). The encoder compares against the view's style and the decoder
fills omitted settings from the decoded style, so a view that keeps its
style's look costs only its camera and style. The previous defaults did not
match a fresh session (sharpen, HUD and detection were off), so every link
paid for them, and a style's own shader parameters were always written.

A test pins the per-style defaults as frozen v1 meanings. A followed
aircraft in Noir is now 44 characters and the real long-link example 39.

* docs: changelog for #1418
2026-10-26 15:31:51 -07:00
Sameh Khamis fefd5cdcf1 fix(layers): make Clear All clear the saved and shared layer selection (#1417)
* fix(layers): make Clear All clear the saved and shared layer selection

After Clear All every layer control was off, but the share URL could keep
listing layers (for example l=e.f) and a reload switched them back on.

The URL and local preferences are written from the committed layer
state, which only explicit visibility changes update. Clear All issued an
explicit OFF only for layers it found on at the start of the batch and
whose turn was not superseded. A layer already off for a passive reason
(isolated by Contacts or another context mode, or released by Contacts'
own teardown while the batch ran) never received one, so it stayed in the
committed state. Clear All also discards the context snapshot that would
have restored those layers, leaving the screen and the URL out of step.

Clear All now publishes the set of layers still on once its batch
settles, and the layer-state coordinator commits that selection: every
saved layer not in it is dropped and its passive restore is cancelled,
while a layer a newer explicit request turned back on is kept. A context
restore interrupted by Clear All no longer brings its snapshot back after
Contacts settles.

* docs: changelog for #1417
2026-10-26 14:07:58 -07:00
Sameh Khamis b7ece1d4d1 fix(share): restore a share link opened in an already-open tab (#1416)
* fix(share): restore a share link opened by hash navigation

Opening a different share link in an already-open tab (pasting it into
the address bar, following a link, or Back/Forward) changed the URL but
left the camera, visual style, map, panels and layers on the old view
until a reload.

The share manager now listens for hashchange and popstate. A new hash
that parses as a share and differs from the last hash the app read or
wrote runs the start-up restore pipeline: lane authority is reserved, URL
writes are held (including a pending debounced write of the old view),
the camera restore takes a new navigation generation, and the layer
coordinator replaces any in-flight layer restore with the new share's
layers through the passive share origin. A newer navigation supersedes an
older restore end to end; only the newest one releases URL writes. The
app's own replaceState writes never restore. Listeners are removed on
destroy.

Returning to the Normal style and resetting an already-active preset now
also apply when a share is restored after start-up, so the result matches
a fresh load of the same link.

* docs: changelog for #1416
2026-10-26 13:56:19 -07:00
Sameh Khamis 301bc2e0b3 feat(voice): add preview and settings panel (#1299)
Add the shared Voice Preview and Settings panel with browser-local preferences, inactivity controls and visible cost warnings.

Contribution by @manjunath22466.
2026-10-26 09:03:04 -07:00
Sameh Khamis 2b2dad5bbe Harden Vite fs.deny for local logs and cache (#948)
Deny local logs, cache, and repository build output from Vite development file serving.

Contribution by @blowing-a-raspberry.
2026-10-25 19:00:20 -07:00