From dc75b71b5a94c37e475aeb90f8e0666d0d1607de Mon Sep 17 00:00:00 2001 From: lefarcen <935902669@qq.com> Date: Mon, 1 Jun 2026 17:10:17 +0800 Subject: [PATCH 1/6] fix(landing): keep auth redirects on AMR wallet --- apps/landing-page/public/_redirects | 46 +++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/apps/landing-page/public/_redirects b/apps/landing-page/public/_redirects index e8bff6f607..92c8dd4b43 100644 --- a/apps/landing-page/public/_redirects +++ b/apps/landing-page/public/_redirects @@ -10,6 +10,52 @@ /sitemap.xml /sitemap-index.xml 301 +# AMR wallet lives under `/amr`. Social auth callbacks from the wallet can +# return to locale-prefixed `/wallet` paths (for example `/zh/wallet`) after a +# logout/register flow; keep those callbacks on the wallet surface instead of +# falling through to the marketing site. +# Keep locale-prefixed entries in sync with `app/i18n.ts:LANDING_LOCALES`. +# Do not replace them with `/:locale/wallet`: that would also match +# `/amr/wallet` and redirect the wallet URL to itself. +/wallet /amr/wallet 302 +/wallet/ /amr/wallet 302 +/en/wallet /amr/wallet 302 +/en/wallet/ /amr/wallet 302 +/zh/wallet /amr/wallet 302 +/zh/wallet/ /amr/wallet 302 +/zh-tw/wallet /amr/wallet 302 +/zh-tw/wallet/ /amr/wallet 302 +/ja/wallet /amr/wallet 302 +/ja/wallet/ /amr/wallet 302 +/ko/wallet /amr/wallet 302 +/ko/wallet/ /amr/wallet 302 +/de/wallet /amr/wallet 302 +/de/wallet/ /amr/wallet 302 +/fr/wallet /amr/wallet 302 +/fr/wallet/ /amr/wallet 302 +/ru/wallet /amr/wallet 302 +/ru/wallet/ /amr/wallet 302 +/es/wallet /amr/wallet 302 +/es/wallet/ /amr/wallet 302 +/pt-br/wallet /amr/wallet 302 +/pt-br/wallet/ /amr/wallet 302 +/it/wallet /amr/wallet 302 +/it/wallet/ /amr/wallet 302 +/vi/wallet /amr/wallet 302 +/vi/wallet/ /amr/wallet 302 +/pl/wallet /amr/wallet 302 +/pl/wallet/ /amr/wallet 302 +/id/wallet /amr/wallet 302 +/id/wallet/ /amr/wallet 302 +/nl/wallet /amr/wallet 302 +/nl/wallet/ /amr/wallet 302 +/ar/wallet /amr/wallet 302 +/ar/wallet/ /amr/wallet 302 +/tr/wallet /amr/wallet 302 +/tr/wallet/ /amr/wallet 302 +/uk/wallet /amr/wallet 302 +/uk/wallet/ /amr/wallet 302 + # Locale-code migration: the previous OD landing-page stack used BCP-47 # region-qualified codes (zh-CN, zh-TW, pt-BR, es-ES) whereas the # current bundle adopts the simpler codes the @astrojs/sitemap plugin From 6266e98f5bf14d2489e12a79973a8d8d49e770ca Mon Sep 17 00:00:00 2001 From: audit Date: Tue, 9 Jun 2026 21:35:10 +0800 Subject: [PATCH 2/6] feat(amr): tag vela CLI launches with AMR_CLIENT_SOURCE + source on wallet links So vela analytics can attribute Open Design's command funnel and model spend back to this host (source=open_design), and the AMR wallet landing carries the source for the web page_view. - runtimes/env: set AMR_CLIENT_SOURCE=open_design for the amr agent spawn (not PII, so no telemetry-consent gate) - integrations/vela: spawnVelaLogin forwards OD_INSTALLATION_ID (consent-gated) - web/daemon: AMR wallet recharge URL gains ?source=open_design Co-Authored-By: Claude Opus 4.8 (1M context) --- apps/daemon/src/integrations/vela-errors.ts | 5 ++++- apps/daemon/src/integrations/vela.ts | 8 ++++++++ apps/daemon/src/runtimes/env.ts | 6 ++++++ apps/daemon/src/server.ts | 11 ++++++++++- apps/web/src/runtime/amr-guidance.ts | 6 ++++-- 5 files changed, 32 insertions(+), 4 deletions(-) diff --git a/apps/daemon/src/integrations/vela-errors.ts b/apps/daemon/src/integrations/vela-errors.ts index 348332a359..d870335656 100644 --- a/apps/daemon/src/integrations/vela-errors.ts +++ b/apps/daemon/src/integrations/vela-errors.ts @@ -7,7 +7,10 @@ export interface AmrAccountFailure { actionUrl?: string; } -export const DEFAULT_AMR_RECHARGE_URL = 'https://open-design.ai/amr/wallet'; +// `source=open_design` tags the wallet landing page_view so vela analytics can +// attribute the recharge visit to Open Design. +export const DEFAULT_AMR_RECHARGE_URL = + 'https://open-design.ai/amr/wallet?source=open_design'; const AMR_AUTH_REQUIRED_MESSAGE = 'AMR sign-in is required. Sign in to AMR Cloud again, then retry this run.'; diff --git a/apps/daemon/src/integrations/vela.ts b/apps/daemon/src/integrations/vela.ts index d6e9dd303f..781c2f6829 100644 --- a/apps/daemon/src/integrations/vela.ts +++ b/apps/daemon/src/integrations/vela.ts @@ -179,6 +179,11 @@ export function cancelVelaLogin(): CancelVelaLoginResult { export interface SpawnVelaLoginDeps { configuredEnv?: Record; baseEnv?: NodeJS.ProcessEnv; + // Open Design's installation id, forwarded to the vela CLI as + // OD_INSTALLATION_ID so it can correlate its analytics back to this + // installation and tag the events with source=open_design. Only pass it + // when the user has consented to telemetry; omit/null otherwise. + installationId?: string | null; } async function waitForImmediateLoginFailure(child: ChildProcess): Promise { @@ -246,6 +251,9 @@ export async function spawnVelaLogin( throw new Error('vela binary not found; install vela or configure VELA_BIN'); } const env = spawnEnvForAgent('amr', baseEnv, configuredEnv); + if (typeof deps.installationId === 'string' && deps.installationId) { + env.OD_INSTALLATION_ID = deps.installationId; + } // Route through createCommandInvocation so an npm/Node-style `vela.cmd` or // `vela.bat` shim on Windows gets wrapped under `cmd.exe /d /s /c …` with // verbatim args, matching what `execAgentFile` / chat-run spawning do. A diff --git a/apps/daemon/src/runtimes/env.ts b/apps/daemon/src/runtimes/env.ts index ea79d136ae..834b3c0bad 100644 --- a/apps/daemon/src/runtimes/env.ts +++ b/apps/daemon/src/runtimes/env.ts @@ -47,6 +47,12 @@ export function spawnEnvForAgent( ); if (agentId === 'amr') { Object.assign(env, amrVelaProfileEnv(env)); + // Identify Open Design as the host so the vela CLI tags its command + + // model_request analytics with source=open_design (revenue attribution). + // Not PII, so no telemetry-consent gate (unlike OD_INSTALLATION_ID). + if (!env.AMR_CLIENT_SOURCE?.trim()) { + env.AMR_CLIENT_SOURCE = 'open_design'; + } if (!env.OPENCODE_TEST_HOME?.trim() && env.OD_DATA_DIR?.trim()) { env.OPENCODE_TEST_HOME = path.join( env.OD_DATA_DIR.trim(), diff --git a/apps/daemon/src/server.ts b/apps/daemon/src/server.ts index 0b0b205015..2a3690e135 100644 --- a/apps/daemon/src/server.ts +++ b/apps/daemon/src/server.ts @@ -6084,7 +6084,16 @@ export async function startServer({ try { const appConfig = await readAppConfig(RUNTIME_DATA_DIR); const configuredEnv = agentCliEnvForAgent(appConfig.agentCliEnv, 'amr'); - const spawned = await spawnVelaLogin({ configuredEnv }); + // Forward the installation id to the vela CLI only when the user has + // consented to telemetry — it correlates CLI analytics to this + // installation and tags them source=open_design. + const installationId = + appConfig.telemetry?.metrics === true && + typeof appConfig.installationId === 'string' && + appConfig.installationId + ? appConfig.installationId + : null; + const spawned = await spawnVelaLogin({ configuredEnv, installationId }); res.status(202).json(spawned); } catch (err) { const message = err instanceof Error ? err.message : String(err); diff --git a/apps/web/src/runtime/amr-guidance.ts b/apps/web/src/runtime/amr-guidance.ts index 4928f1e902..640863f177 100644 --- a/apps/web/src/runtime/amr-guidance.ts +++ b/apps/web/src/runtime/amr-guidance.ts @@ -4,8 +4,10 @@ // its own module so ChatPane / ProjectView / AssistantMessage can import it // without a circular dependency. -// AMR model-gateway console wallet (recharge). -export const AMR_RECHARGE_URL = 'https://open-design.ai/amr/wallet'; +// AMR model-gateway console wallet (recharge). `source=open_design` tags the +// landing page_view so vela analytics can attribute the visit to Open Design. +export const AMR_RECHARGE_URL = + 'https://open-design.ai/amr/wallet?source=open_design'; // Codes that mean a non-AMR agent hit "the model service rejected or could not // serve the run" — auth missing/invalid, quota/rate exhausted, or the upstream From e0bcd73de82f1b96584a971052772646c986bbc2 Mon Sep 17 00:00:00 2001 From: audit Date: Tue, 9 Jun 2026 23:31:54 +0800 Subject: [PATCH 3/6] test(web): expect ?source=open_design on AMR console/recharge URLs The AMR console/recharge links the OD app opens into vela web now carry ?source=open_design so vela attributes the visit to Open Design. Update the console/recharge URL assertions accordingly. Co-Authored-By: Claude Opus 4.8 (1M context) --- apps/web/tests/components/AmrLoginPill.test.tsx | 6 +++--- apps/web/tests/components/AvatarMenu.test.tsx | 2 +- apps/web/tests/runtime/amr-guidance.test.ts | 16 ++++++++++++---- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/apps/web/tests/components/AmrLoginPill.test.tsx b/apps/web/tests/components/AmrLoginPill.test.tsx index 786eaa7df8..8cd3b932cf 100644 --- a/apps/web/tests/components/AmrLoginPill.test.tsx +++ b/apps/web/tests/components/AmrLoginPill.test.tsx @@ -199,7 +199,7 @@ describe('AmrLoginPill', () => { expect(screen.getByText('leaf@example.com')).toBeTruthy(); expect(screen.getByText('TEST')).toBeTruthy(); expect(screen.getByRole('link', { name: 'AMR Console' }).getAttribute('href')).toBe( - 'https://vela.powerformer.net/wallet', + 'https://vela.powerformer.net/wallet?source=open_design', ); }); @@ -214,7 +214,7 @@ describe('AmrLoginPill', () => { expect(screen.getByText('LOCAL')).toBeTruthy(); expect(screen.getByRole('link', { name: 'AMR Console' }).getAttribute('href')).toBe( - 'http://localhost:5173/wallet', + 'http://localhost:5173/wallet?source=open_design', ); }); @@ -229,7 +229,7 @@ describe('AmrLoginPill', () => { expect(screen.queryByText('PROD')).toBeNull(); expect(screen.getByRole('link', { name: 'AMR Console' }).getAttribute('href')).toBe( - 'https://open-design.ai/amr/wallet', + 'https://open-design.ai/amr/wallet?source=open_design', ); }); diff --git a/apps/web/tests/components/AvatarMenu.test.tsx b/apps/web/tests/components/AvatarMenu.test.tsx index ebb8857a9a..60a444f452 100644 --- a/apps/web/tests/components/AvatarMenu.test.tsx +++ b/apps/web/tests/components/AvatarMenu.test.tsx @@ -237,6 +237,6 @@ describe('AvatarMenu', () => { screen .getByRole('link', { name: 'avatar.amrConsoleavatar.amrConsoleMeta' }) .getAttribute('href'), - ).toBe('https://vela.powerformer.net/wallet'); + ).toBe('https://vela.powerformer.net/wallet?source=open_design'); }); }); diff --git a/apps/web/tests/runtime/amr-guidance.test.ts b/apps/web/tests/runtime/amr-guidance.test.ts index abd3010bd4..c734c16cfc 100644 --- a/apps/web/tests/runtime/amr-guidance.test.ts +++ b/apps/web/tests/runtime/amr-guidance.test.ts @@ -3,10 +3,18 @@ import { amrRechargeUrlForProfile, resolveRunFailureUi } from '../../src/runtime describe('amrRechargeUrlForProfile', () => { it('matches the selected AMR profile wallet origin', () => { - expect(amrRechargeUrlForProfile('prod')).toBe('https://open-design.ai/amr/wallet'); - expect(amrRechargeUrlForProfile('test')).toBe('https://vela.powerformer.net/wallet'); - expect(amrRechargeUrlForProfile('local')).toBe('http://localhost:5173/wallet'); - expect(amrRechargeUrlForProfile(' unknown ')).toBe('https://open-design.ai/amr/wallet'); + expect(amrRechargeUrlForProfile('prod')).toBe( + 'https://open-design.ai/amr/wallet?source=open_design', + ); + expect(amrRechargeUrlForProfile('test')).toBe( + 'https://vela.powerformer.net/wallet?source=open_design', + ); + expect(amrRechargeUrlForProfile('local')).toBe( + 'http://localhost:5173/wallet?source=open_design', + ); + expect(amrRechargeUrlForProfile(' unknown ')).toBe( + 'https://open-design.ai/amr/wallet?source=open_design', + ); }); }); From 44a2eeb07b72d264f43a47959ef9491dfadc25e7 Mon Sep 17 00:00:00 2001 From: audit Date: Tue, 9 Jun 2026 23:55:11 +0800 Subject: [PATCH 4/6] test(daemon): expect ?source=open_design on AMR insufficient-balance recharge URL DEFAULT_AMR_RECHARGE_URL now carries the source param for attribution. Co-Authored-By: Claude Opus 4.8 (1M context) --- apps/daemon/tests/amr-acp-integration.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/daemon/tests/amr-acp-integration.test.ts b/apps/daemon/tests/amr-acp-integration.test.ts index 9bd3054633..bcb899a247 100644 --- a/apps/daemon/tests/amr-acp-integration.test.ts +++ b/apps/daemon/tests/amr-acp-integration.test.ts @@ -582,7 +582,7 @@ describe('AMR ACP transport — end-to-end against fake vela stub', () => { expect(classifyAmrAccountFailure(message)).toMatchObject({ code: 'AMR_INSUFFICIENT_BALANCE', action: 'recharge', - actionUrl: 'https://open-design.ai/amr/wallet', + actionUrl: 'https://open-design.ai/amr/wallet?source=open_design', }); }); From dcb70c837299832bc0d4ca31b003079cb46a3306 Mon Sep 17 00:00:00 2001 From: audit Date: Wed, 10 Jun 2026 09:42:44 +0800 Subject: [PATCH 5/6] chore(amr): bump bundled vela CLI to 0.0.15 + fix e2e recharge URL assertion - tools/pack: bundle @powerformer/vela-cli 0.0.15 (the release carrying the source-attribution logic that reads AMR_CLIENT_SOURCE and tags model_request) - e2e: expect the insufficient-balance recharge URL to carry ?source=open_design (addresses review on DEFAULT_AMR_RECHARGE_URL) Co-Authored-By: Claude Opus 4.8 (1M context) --- e2e/tests/amr/insufficient-balance.test.ts | 4 +- pnpm-lock.yaml | 50 +++++++++++----------- tools/pack/package.json | 2 +- 3 files changed, 29 insertions(+), 27 deletions(-) diff --git a/e2e/tests/amr/insufficient-balance.test.ts b/e2e/tests/amr/insufficient-balance.test.ts index b4fb759704..13a2bb4ae8 100644 --- a/e2e/tests/amr/insufficient-balance.test.ts +++ b/e2e/tests/amr/insufficient-balance.test.ts @@ -51,7 +51,9 @@ describe('AMR insufficient balance run failures', () => { const events = await readRunEvents(webUrl, run.runId); expect(events).toContain('AMR_INSUFFICIENT_BALANCE'); - expect(events).toContain('https://open-design.ai/amr/wallet'); + expect(events).toContain( + 'https://open-design.ai/amr/wallet?source=open_design', + ); const messages = await listMessages(webUrl, project.project.id, project.conversationId); const assistant = messages.find((message) => message.id === assistantMessageId); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index eb2338f6df..c93ea4da91 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -706,8 +706,8 @@ importers: version: 4.1.6(@opentelemetry/api@1.9.1)(@types/node@24.12.2)(jsdom@29.1.1)(vite@7.3.3(@types/node@24.12.2)(jiti@2.6.1)(lightningcss@1.32.0)(tsx@4.22.3)(yaml@2.9.0)) optionalDependencies: '@powerformer/vela-cli': - specifier: 0.0.13 - version: 0.0.13 + specifier: 0.0.15 + version: 0.0.15 tools/serve: dependencies: @@ -1845,33 +1845,33 @@ packages: '@posthog/types@1.374.2': resolution: {integrity: sha512-ZghQSFMi+HFJNPvPjBoyY/jWQ+q6mSQVtWQxOHMSbBidUZjsyYbxYxBFbHy2qWLNe4mEpX+Wqir2Q4I/4AVvJQ==} - '@powerformer/vela-cli-darwin-arm64@0.0.13': - resolution: {integrity: sha512-/RfnxaW9aRsCMZ7GwpDK6uSRRvfbLu89qlv+BFBqJV13n+3Pu4d0H7pEaK/6vtAQdHBsQqU5MB/z3N51SWavWw==} + '@powerformer/vela-cli-darwin-arm64@0.0.15': + resolution: {integrity: sha512-rMRKBVIn/MESkWSYjTvJirSMVgwrvVswf0TV0ZZOQCYP3lzKto8fmAmzYXYPOXMNZ+b9cFVI+YdapDeaMBF1cA==} cpu: [arm64] os: [darwin] - '@powerformer/vela-cli-darwin-x64@0.0.13': - resolution: {integrity: sha512-dKgelyjmTK5BvatQAjn5mC5puRX0jMBVjYV63tGrmZHjCUSE8B4AduZkk0rkRmcrFrz2QJ0IGfTrCzybFA1MsA==} + '@powerformer/vela-cli-darwin-x64@0.0.15': + resolution: {integrity: sha512-ff1I3dcj/+7mIPCtUY2BzGZiydiqyzWEA2Izn4t9mFEmM1SiM5rsyWfXpsJEaHMEUBSxXyjlaSCwhOcRx2t/tQ==} cpu: [x64] os: [darwin] - '@powerformer/vela-cli-linux-arm64@0.0.13': - resolution: {integrity: sha512-HLByJGZedRYCFf5fUu1iStZP8BrNaLuBWj2NHQG1GM9pYTWIrDIn8XYBwupePT/p6gKQmsA7Rv4tWS2k0aGDXA==} + '@powerformer/vela-cli-linux-arm64@0.0.15': + resolution: {integrity: sha512-344QP1gS7hXWLKbIkBPciwB9JmiJ8YOI+VyD1RbaBES4ZhkY/yUdCPQiGD2d5LeWwErk11gtRMAK0zS3Fa+Zxw==} cpu: [arm64] os: [linux] - '@powerformer/vela-cli-linux-x64@0.0.13': - resolution: {integrity: sha512-YTgLFKlr0onbFKwsJT4DwzMfi7/Af5S/4iNAmq+hBEtmBxsgNnVEQZ1wD6JaiLtqsbwRhZYFpBNlxP2KRtnT2g==} + '@powerformer/vela-cli-linux-x64@0.0.15': + resolution: {integrity: sha512-BogFlbWRIHsCdyBQUq4KSF2oF4S10XLfp94nk2+cGn2cHvmyPFxlyTa7kp0X7h50IS+tg6uVfdcPLCb7+p0HJg==} cpu: [x64] os: [linux] - '@powerformer/vela-cli-win32-x64@0.0.13': - resolution: {integrity: sha512-vfnDc58qY5918SXBcdNdt8wIkdIDFOUXnGmTgLYQsU77QK6sR71rspuA1TRpjIOTZD/OkMADQfLePqvimI37hQ==} + '@powerformer/vela-cli-win32-x64@0.0.15': + resolution: {integrity: sha512-+x91P30Ae9drrWe8GvehKXbW29rbBIf+FtuCAq6tH/3gwQs5I6OZbQLibIoOVXfz5ObBQBd/onNXY7M6+K1Rkg==} cpu: [x64] os: [win32] - '@powerformer/vela-cli@0.0.13': - resolution: {integrity: sha512-Z8+DrsaWo9rUhjOvvCnSXzxW6832b/yQG27HwA60oW09evK3kaA41Eg1Ca1meujktoEaxAfn5u5M1toJVHV6Ig==} + '@powerformer/vela-cli@0.0.15': + resolution: {integrity: sha512-wosX3yF+XmCqEHEvMGH8XDahVcMCA1ZcT4Sa7ti/FuyfwnuTOO8mfXXBbauVOXb1glAX1HU2perAkfykTQ8/Wg==} hasBin: true '@preact/signals-core@1.14.2': @@ -6560,28 +6560,28 @@ snapshots: '@posthog/types@1.374.2': {} - '@powerformer/vela-cli-darwin-arm64@0.0.13': + '@powerformer/vela-cli-darwin-arm64@0.0.15': optional: true - '@powerformer/vela-cli-darwin-x64@0.0.13': + '@powerformer/vela-cli-darwin-x64@0.0.15': optional: true - '@powerformer/vela-cli-linux-arm64@0.0.13': + '@powerformer/vela-cli-linux-arm64@0.0.15': optional: true - '@powerformer/vela-cli-linux-x64@0.0.13': + '@powerformer/vela-cli-linux-x64@0.0.15': optional: true - '@powerformer/vela-cli-win32-x64@0.0.13': + '@powerformer/vela-cli-win32-x64@0.0.15': optional: true - '@powerformer/vela-cli@0.0.13': + '@powerformer/vela-cli@0.0.15': optionalDependencies: - '@powerformer/vela-cli-darwin-arm64': 0.0.13 - '@powerformer/vela-cli-darwin-x64': 0.0.13 - '@powerformer/vela-cli-linux-arm64': 0.0.13 - '@powerformer/vela-cli-linux-x64': 0.0.13 - '@powerformer/vela-cli-win32-x64': 0.0.13 + '@powerformer/vela-cli-darwin-arm64': 0.0.15 + '@powerformer/vela-cli-darwin-x64': 0.0.15 + '@powerformer/vela-cli-linux-arm64': 0.0.15 + '@powerformer/vela-cli-linux-x64': 0.0.15 + '@powerformer/vela-cli-win32-x64': 0.0.15 optional: true '@preact/signals-core@1.14.2': {} diff --git a/tools/pack/package.json b/tools/pack/package.json index b34d252bf8..b370b6a7bb 100644 --- a/tools/pack/package.json +++ b/tools/pack/package.json @@ -24,7 +24,7 @@ "resedit": "1.7.2" }, "optionalDependencies": { - "@powerformer/vela-cli": "0.0.13" + "@powerformer/vela-cli": "0.0.15" }, "devDependencies": { "@types/node": "24.12.2", From 5d56c770ae5ff41baea9b5d82f7cf23bf0d99e26 Mon Sep 17 00:00:00 2001 From: audit Date: Wed, 10 Jun 2026 09:47:42 +0800 Subject: [PATCH 6/6] chore(nix): refresh pnpm-deps hashes after vela CLI bump The tools/pack @powerformer/vela-cli bump changed pnpm-lock.yaml, invalidating the daemon/web fetchPnpmDeps fixed-output hashes. Update to the values the Nix flake check computed. Co-Authored-By: Claude Opus 4.8 (1M context) --- nix/pnpm-deps.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nix/pnpm-deps.nix b/nix/pnpm-deps.nix index 058209c25f..84262a366a 100644 --- a/nix/pnpm-deps.nix +++ b/nix/pnpm-deps.nix @@ -9,6 +9,6 @@ # 1. Temporarily set the consuming `hash = lib.fakeHash;` # 2. Run the relevant nix build/flake check # 3. Copy the expected hash printed by Nix into the matching field below - daemonHash = "sha256-cFElX3G4K+c581UW4F1/JvVI8GcZ4/ZKG6r50RYxKUU="; - webHash = "sha256-Rx/9yiacA2vOfYfWdMnstfdtURKLrWLkGua/64VPKQc="; + daemonHash = "sha256-bPYV6FtDZcUNnCpFbaT3cz07kAqy+2LEiHiwmCU7Qy8="; + webHash = "sha256-yT6dcsP6xPE+5ErNXOPZagj5+4gZVtX9DBcBilKZAm4="; }