Skip to content

Main 0.6#284

Open
zippy wants to merge 69 commits intodevelopfrom
main-0.6
Open

Main 0.6#284
zippy wants to merge 69 commits intodevelopfrom
main-0.6

Conversation

@zippy
Copy link
Copy Markdown
Collaborator

@zippy zippy commented Jan 20, 2026

Updates to Holochain 0.6.0, includes pinning shoelace to make it work with old UI.

zippy added 2 commits January 20, 2026 15:15
Upgrade mewsfeed from Holochain 0.4.1 to 0.6, including HDK/HDI API
changes, manifest updates, and dependency upgrades.

Rust changes:
- Update HDK to 0.6.0, HDI to 0.7.0
- Change agent_latest_pubkey to agent_initial_pubkey
- Add GetOptions parameter to all delete_link calls
- Change get_link_details to get_links_details
- Update profiles/elements libraries to 0.600.0 branch
- Add hc_zome_input crate for local/network optionality

UI changes:
- Update @holochain/client to 0.20.0
- Update @holochain-open-dev/profiles to 0.600.0
- Update @shoelace-style/shoelace to 2.20.0
- Add wrapInput() helper for zome calls with local/network option
- Add networkMode store for global local/network preference
- Update all zome calls to use wrapInput()

Manifest changes:
- Update manifest_version from "1" to "0"
- Rename bundled to path in DNA/hApp manifests

Nix changes:
- Update holonix ref to main-0.6
- Update to nodejs_22

Known issues:
- Profile dialog CSS styling not working correctly with profiles-context
  web component (buttons/inputs appear unstyled)
Shoelace 2.20.x causes DaisyUI component styles to not apply correctly
inside profiles-context web component slots. Pinning to 2.11.0 resolves
the issue with profile dialog form styling (inputs, buttons).

Uses npm overrides to ensure all dependencies use the pinned version.
@zippy zippy requested review from jost-s and mattyg January 20, 2026 21:26
@zippy zippy changed the base branch from main-0.4 to develop January 20, 2026 21:29
zippy added 25 commits January 20, 2026 16:43
…send button feedback

- Guard refetch calls in DiscoverCreators and RandomMewWithTagList to prevent
  calling get_batch_mews_with_context with null input
- Wrap reactive proxy with toRaw() in RandomMewWithTagList to fix structuredClone error
- Bump @holochain-open-dev/profiles to 0.601.3 (fixes AgentAvatar undefined .status)
- Add loading spinner to Send Mew button during publish
- Fix TypeScript error for profiles store subscription
Add FishyAppClient support for zero-arc browser extension nodes:
- Add @zippy/fishy-client dependency
- Create fishy/ module with ZeroArcProfilesClient
- Detect fishy extension in client.ts setup
- Use ZeroArcProfilesClient for profiles when running as fishy
- Force local:false in zomeCall wrapInput/getLocalOption for fishy
- Add __GATEWAY_URL__ vite define
Three calls in AgentProfile.vue incorrectly passed route.params.agentPubKey
(a base64 string) instead of agentPubKey.value (decoded Uint8Array) to
wrapInput(): get_joining_timestamp_for_agent, count_creators_for_follower,
count_followers_for_creator.
… of stores

Vue's ref() deeply wraps objects in reactive Proxies. The ProfilesStore
contains a LazyHoloHashMap (from @holochain/client@0.20.4-rc.0) which
uses HoloHashB64Map (extends Map) internally. When Lit's StoreSubscriber
called store.profiles.get(agentPubKey) through Vue's reactive proxy,
the proxy trap chain broke LazyHoloHashMap's internal method dispatch,
causing get() to return undefined instead of creating and returning the
lazy-fetched profile store. This meant the subscriber never subscribed,
and agent-avatar rendered as a permanent gray skeleton for all remote
agents.

The fix uses shallowRef() instead of ref() for profilesStore and client
in App.vue. shallowRef only tracks .value assignment without deeply
proxying the inner object, so Lit web components receive the raw
ProfilesStore with a working LazyHoloHashMap.

Additional changes:
- BaseSiteMenu: explicitly pass :store prop to agent-avatar and inject
  profilesStore (previously relied solely on Lit context propagation)
- BaseAgentProfileLinkAvatar: add v-if="profilesStore" guard to prevent
  rendering before store is available
- Upgrade @holochain-open-dev/profiles to 0.601.3 which adds a null
  guard in AgentAvatar.render to prevent crash on undefined store value
- Switch from @zippy/fishy-client to @holo-host/web-conductor-client
- Rename ui/src/fishy/ directory to ui/src/hwc/
- FishyAppClient -> WebConductorAppClient
- waitForFishy -> waitForHolochain, isFishy -> isWebConductor
- IS_FISHY -> IS_HWC, gatewayUrl -> linkerUrl
- __GATEWAY_URL__ -> __LINKER_URL__ build constant
Remove @holo-host/web-sdk (old Chaperone-based Holo hosting) and wire up
the joining service from HWC's feat/joining-client branch. When the
JOINING_SERVICE_URL env var is set at build time, WebConductorAppClient
will use it to join via the service (obtaining linker URLs, membrane
proofs, and hApp bundle). When unset, the existing direct-linker flow
is used unchanged.

- Remove setupHolo(), IS_HOLO_HOSTED, WebSdkApi imports, start:holo script
- Add @holo-host/joining-service dependency
- Re-export JoiningClient, JoiningError, GatewayProxy from hwc/index.ts
- Add __JOINING_SERVICE_URL__ vite define
- Clean up env.d.ts (remove VITE_IS_HOLO_HOSTED, VITE_CHAPERONE_SERVER_URL)
Wire onChallenge callback through setupHolochain to
WebConductorAppClient so the joining service can present
verification challenges (email code, invite code, etc.)
to the user via a modal dialog.
Add deploy/ directory with orchestration script for full end-to-end
mewsfeed deployment: UI on Cloudflare Pages, joining service on
Cloudflare Worker (invite_code auth), linker with white_list auth
tunneled via ngrok, and two always-on conductors.

- deploy.sh: subcommands for setup, build, deploy-cloud, start-local,
  stop-local, seed-kv, status, all
- Cloudflare worker entry with KvUrlProvider wired up for linker URL
  resolution from Workers KV
- Config template with all deployment parameters
- Replace outdated Holo Hosting README section with link to DEPLOY.md
…nnel support

- Add JoiningClaimsDialog to collect invite codes before joining
- Update App.vue with HWC extension detection gate and claims flow
- Overhaul NetworkInfo to show linker connection status (HTTP/WS/Auth)
- Switch web-conductor-client to joining-client package
- Replace ngrok with cloudflared as default tunnel provider
- Add restart-tunnel command and conductor already-running check
- Convert wrangler.toml to wrangler.example.toml template (gitignored)
- Fix wrangler CLI v3 syntax and add workers subdomain config
Prevent UI components from flooding the conductor with zome calls
before cells are confirmed responsive. Adds a cellsReady composable
that gates all TanStack Query calls via the enabled option, showing
skeletons until the ping check succeeds. NetworkInfo is now visible
immediately without waiting for cells.
Add start:hwc and start:hwc:joining npm scripts for local HWC browser
extension development. Includes local-dev.sh orchestration script that
starts local bootstrap/relay, conductors, and linker. Fix web-conductor
client dependency path and add linkerUrl query param support for direct
connections.
Replace JoiningClaimsDialog.vue and JoiningChallengeDialog.vue with
connectWithJoiningUI() from @holo-host/web-conductor-client/ui, which
uses Shoelace-styled Lit web components from @holo-host/joining-service.

- Remove 290 lines of Vue dialog code
- Simplify App.vue setup (no more manual claims retry logic)
- Switch tsconfig moduleResolution to "bundler" for exports map support
- Add lit as dependency (peer dep of joining-service UI components)
Add LOCAL_DEV_CONFIG_FILE env var to local-dev.sh so a custom
joining-service config JSON can be passed directly, skipping the
auto-generated config from env vars. Resolves relative paths to
absolute before passing to the joining service subprocess.

Also add a sample config (local-dev.config.example.json) for
email_code auth with SendGrid + hc_auth.
zippy and others added 30 commits March 20, 2026 22:04
Fetch functions now return empty values when route params are not yet
resolved, preventing deserialization errors from sending null agent
keys or action hashes to the zome.
…ueries

Return null instead of undefined in query guards (TanStack Query rejects
undefined returns), narrow route watcher to only agentPubKey param, and
remove stale profile prop from MewsListAuthor.
UI fixes:
- Fix prop mutation in BaseMewListItem onCreateMewmew (use spread)
- Fix setInterval memory leak in NetworkInfo (move to onMounted, clean up)
- Add default to useCellsReady to prevent undefined outside provider
- Remove debug console.log statements from BaseAgentProfileName
- Add comment noting TanStack query key sharing in BaseAgentProfileLinkName

Rust fixes:
- Use get_options consistently in get_joining_timestamp_for_agent
- Remove duplicate GetAgentMewsWithContextInput, reuse GetAgentMewsInput
- Accept GetStrategy parameter in get_all_mew_hashes, propagate from caller
- Replace hardcoded ZomeIndex/LinkType magic numbers in notifications with
  named constants documenting the dna.yaml zome ordering

Config/test fixes:
- Restore mew_characters_max: 200 in workdir/dna.yaml
- Fix wrong zome function in mentions pagination test (was cashtag)
- Fix wrong page index variables in hashtag pagination cursor tests
Ensure SANDBOX_DIR exists before cloud deploy, add &runtime=hwc to
status URL, and keep local-dev start alive with tail so concurrently
sees the process as running.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace dual profile sources (TanStack Query + LazyHoloHashMap) with a
single useProfile composable that subscribes to ProfilesStore.profiles.
Profiles are only refreshed from the network when visiting an agent's
profile page; cached data is reused everywhere else.

- Add useProfile composable wrapping LazyHoloHashMap subscription
- Add BaseAgentAvatar component using sl-avatar/holo-identicon with
  profile data from props (no independent data fetching)
- Replace agent-avatar web component usage across all UI components
- Remove TanStack Query profile fetches from all components
- Use toPromise(profiles.get()) for one-shot fetches in dialogs

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Removes making a cross-zome call to get the profile of a mews agent for every constructed mew.  Instead mews just return agentPubKey and UI is responsible for rendering from a cache.
Consolidates 5 integrity zomes and 6 coordinator zomes down to
2 integrity (profiles_integrity, mews_integrity) and 2 coordinator
(profiles, mews) zomes. This eliminates cross-zome serialization
overhead and reduces WASM module count from 11 to 4.

- Merge follows/likes/agent_pins link types into mews_integrity LinkTypes enum
- Move coordinator logic into mews, replacing call_local_zome() with direct calls
- Merge ping health check into mews coordinator
- Update hardcoded zome indices in agent_to_notifications.rs
- Update all UI and test zome_name references
- Remove follows_types and hc_call_utils crates

DNA-breaking change: incompatible with networks running the old DNA.
refactor: merge zomes into unified mews zome
get_agent_activity was an expensive call for a simple lookup. A direct
get() on the agent pubkey achieves the same result more cheaply. Also
cache the result with infinite staleTime in the UI since an agent's
join time never changes.
Extract BasePageHeader component with cat logo that shows version and
GeekGene link on hover. Used on feed, explore, and notifications pages.
Replace error propagation with graceful skipping in notifications,
feed, and random mew queries. Uses filter_map and match to log
warnings and continue when individual link details or responses
are temporarily unavailable on the DHT.
Remove blocking v-if that hid entire profile page until profile loaded.
Each section now renders independently with skeleton placeholders while
its data loads, eliminating the blank page during zome calls.
When get(agent_pub_key) returns None for agents whose data hasn't
been gossiped yet, the null value was rendered as epoch (56 years ago).
Fix the null check and add refetchInterval to retry until data arrives.
ProfilesStore immediately fires network calls on subscription, which
raced ahead of the ping check when cells weren't ready yet. Move ping
before ProfilesStore creation to ensure cells are responsive first.
Add GitHub Actions release workflow that triggers on v* tags,
builds .happ and .webhapp artifacts, and publishes them to
GitHub releases with SHA256 checksums.
Show peerCount from HWC connection state in both the collapsed
badge and expanded linker status panel when available.
…rvice

Replace file: references with ^0.1.0 npm packages.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants