From 138b10413df46e90566aa35a4621885f2bc3aa4e Mon Sep 17 00:00:00 2001 From: Eric Hauser Date: Sat, 15 Aug 2026 14:38:12 -0600 Subject: [PATCH] Add celld community world Signed-off-by: Eric Hauser --- .changeset/add-celld-world.md | 5 ++++ .../workflow-server-actions.server.test.ts | 30 ++++++++++++++++++- .../server/workflow-server-actions.server.ts | 7 +++++ worlds-manifest.json | 20 +++++++++++++ 4 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 .changeset/add-celld-world.md diff --git a/.changeset/add-celld-world.md b/.changeset/add-celld-world.md new file mode 100644 index 0000000000..03f6af92cd --- /dev/null +++ b/.changeset/add-celld-world.md @@ -0,0 +1,5 @@ +--- +'@workflow/web': patch +--- + +Add `@ewhauser/world-celld` to `worlds-manifest.json` as an experimental, self-hosted community World. Allow the web UI to report its connection metadata while redacting the shared secret. diff --git a/packages/web/app/server/workflow-server-actions.server.test.ts b/packages/web/app/server/workflow-server-actions.server.test.ts index b6fbf9cc39..cccd426f2d 100644 --- a/packages/web/app/server/workflow-server-actions.server.test.ts +++ b/packages/web/app/server/workflow-server-actions.server.test.ts @@ -1,7 +1,8 @@ import type { AnalyticsEvent, Hook } from '@workflow/world'; -import { describe, expect, it } from 'vitest'; +import { afterEach, describe, expect, it, vi } from 'vitest'; import { analyticsEventToEvent, + getPublicServerConfig, hookToListItem, } from './workflow-server-actions.server'; @@ -100,3 +101,30 @@ describe('hookToListItem', () => { expect('token' in listItem).toBe(false); }); }); + +describe('getPublicServerConfig', () => { + afterEach(() => { + vi.unstubAllEnvs(); + }); + + it('redacts the celld shared secret while exposing connection metadata', async () => { + vi.stubEnv('WORKFLOW_TARGET_WORLD', '@ewhauser/world-celld'); + vi.stubEnv('CELLD_FLEET_URL', 'http://fleet.internal:8080'); + vi.stubEnv('CELLD_WORLD_SECRET', 'super-secret'); + vi.stubEnv('WORKFLOW_BASE_URL', 'https://workflow.example.com'); + + const config = await getPublicServerConfig(); + + expect(config).toMatchObject({ + backendDisplayName: 'world-celld', + backendId: '@ewhauser/world-celld', + publicEnv: { + WORKFLOW_TARGET_WORLD: '@ewhauser/world-celld', + CELLD_FLEET_URL: 'http://fleet.internal:8080', + WORKFLOW_BASE_URL: 'https://workflow.example.com', + }, + sensitiveEnvKeys: ['CELLD_WORLD_SECRET'], + }); + expect(config.publicEnv).not.toHaveProperty('CELLD_WORLD_SECRET'); + }); +}); diff --git a/packages/web/app/server/workflow-server-actions.server.ts b/packages/web/app/server/workflow-server-actions.server.ts index 1387768f86..fa51f4e99b 100644 --- a/packages/web/app/server/workflow-server-actions.server.ts +++ b/packages/web/app/server/workflow-server-actions.server.ts @@ -224,6 +224,12 @@ const WORLD_ENV_ALLOWLIST_BY_TARGET_WORLD: Record = { 'JAZZ_WORKER_ACCOUNT', 'JAZZ_WORKER_SECRET', ], + '@ewhauser/world-celld': [ + 'WORKFLOW_TARGET_WORLD', + 'CELLD_FLEET_URL', + 'CELLD_WORLD_SECRET', + 'WORKFLOW_BASE_URL', + ], }; function getAllowedEnvKeysForBackend(backendId: string): string[] { @@ -247,6 +253,7 @@ const WORLD_SENSITIVE_ENV_KEYS = new Set([ 'WORKFLOW_REDIS_URI', 'JAZZ_API_KEY', 'JAZZ_WORKER_SECRET', + 'CELLD_WORLD_SECRET', ]); function isSet(value: string | undefined): value is string { diff --git a/worlds-manifest.json b/worlds-manifest.json index b6ad9af190..15f04c81c1 100644 --- a/worlds-manifest.json +++ b/worlds-manifest.json @@ -187,6 +187,26 @@ "requiresCredentials": true, "credentialsNote": "Requires JAZZ_API_KEY, JAZZ_WORKER_ACCOUNT, and JAZZ_WORKER_SECRET from Jazz Cloud" }, + { + "id": "celld", + "type": "community", + "package": "@ewhauser/world-celld", + "name": "celld", + "description": "Experimental self-hosted World backed by celld Durable Objects for durable workflow storage, queues, and streams", + "repository": "https://github.com/ewhauser/world-celld", + "docs": "https://github.com/ewhauser/world-celld#readme", + "features": [], + "env": { + "WORKFLOW_TARGET_WORLD": "@ewhauser/world-celld", + "CELLD_FLEET_URL": "http://fleet.internal:8080", + "CELLD_WORLD_SECRET": "", + "WORKFLOW_BASE_URL": "https://workflow.example.com" + }, + "services": [], + "requiresCredentials": true, + "credentialsNote": "Requires a deployed celld fleet and CELLD_WORLD_SECRET matching the fleet's WORLD_SECRET", + "requiresDeployment": true + }, { "id": "fantasticfour-redis", "type": "community",