Render blueprint - #86
Merged
Merged
Conversation
The API does not serve the Expo bundle, so the Blueprint is a Standard Node service with a persistent disk plus a static site. Deploy buttons point at CopilotKit/OpenMuse.
Put sign-in steps and the env var table ahead of plan, disk, and live-mode limits, and say which features this Blueprint does not start.
The API already runs without it. Removing the service and its two env vars leaves chat and tasks working, and skips Chromium.
Collaborator
|
Thanks @ojusave, this is great. It covers everything from the Slack thread, and adding the browser worker was a nice bonus. I checked One fix before merge:
Optional:
The |
The intro and first-run step still described only the API and web app, so someone could sign in before the browser service was up. The default model now matches the gpt-5 id used elsewhere in the repo.
jerelvelarde
approved these changes
Sep 29, 2026
sunshaoan0808
pushed a commit
to sunshaoan0808/openmuse
that referenced
this pull request
Sep 30, 2026
上游 5 个提交:JEV(CopilotKit#42)、无 scheme worker 地址(CopilotKit#92)、web 输入框焦点(CopilotKit#89)、 worker 测试健壮性(CopilotKit#90)、render 蓝图(CopilotKit#86)。 冲突解决(4 文件 9 块)与本地适配: - conversation.ts:以上游 JEV 结构(runInternal/choices 分支/noteEvidence)为基座, 换回我们的中性工具层(forAgUi + chatTools),并把 noteEvidence 改成经 ChatToolContext 回调; prompt 用我们的 chatInstructions() + JEV 段 + computerInstructions;恢复 maxSteps=10 与 sample 分支的 threadId 注入 - agent.ts:保留我们的 mastra 引擎分支,两处 ConversationAgent 注入 sharedJevAdapter() - chat.tsx:我们的卡片(搜索/浏览器操作/审批)与 JEV 卡片并存,去重 delegate_task 渲染器 - config.ts:去掉 cherry-pick 造成的 browserWorkerUrl 重复定义 - mastra-engine.ts:JEV 工具与指令补到 mastra 路径(上游只挂自带引擎,我们线上跑 mastra) - jev/tools.ts:抽出 presentChoicesSpec 中性规格,两条引擎共用同一份校验逻辑 验证:pnpm test 321/321 通过(含上游 JEV 全部测试)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changed
Adds a Render Blueprint so OpenMuse can be deployed with 1 click.
render.yamldefines three services:openmuse-api: Node web service on Standard, with a 1 GB disk at/var/data(DATA_DIR=/var/data/openmuse). Live mode, because sample mode rejects the non-loopback host Render binds. Render generatesOPENMUSE_ACCESS_KEYandTOKEN_ENCRYPTION_KEY. The deploy form asks forOPENAI_API_KEYandCPK_INTELLIGENCE_API_KEY.openmuse-web: static site from the Expo web export, with an SPA rewrite to/index.html.EXPO_PUBLIC_API_URLis taken from the API service at build time.openmuse-browser: private Docker service fromapps/worker/Dockerfile, with a 1 GB disk at/data. The API calls it athttp://openmuse-browser:8790with a generatedWORKER_TOKEN. To deploy without browsing, delete this service and theBROWSER_WORKER_URLandWORKER_TOKENentries on the API.The README Deploy section covers the button, first run (copy the access key, sign in, send a message), and the env vars. It also notes why the API is on Standard: at 512 MB the process runs out of memory while PGlite loads. The disk holds the database, PDFs, and the signing key. Chat threads stay on CopilotKit Intelligence. The Docker computer and Google mail or calendar are unchanged and are not started by this Blueprint.
Verification
Deployed this commit in a Render workspace as new services, including both disks:
GET /api/healthreturnedok: true,mode: live,agentConfigured: true,browserConfigured: true.OPENMUSE_ACCESS_KEY. The workspace reported the browser connection as connected.openmuse-api, and the same session still authenticated.GET /api/draftsreturned that draft.https://example.com, closed the session, and redeployedopenmuse-browser. The same session id came back with its title and URL, and reopen returned it active on example.com./and for a client route through the rewrite.render blueprints validate render.yamlpassed.These services were created from this
render.yamlthrough the Render API. The Deploy button readsrender.yamlfrom the default branch, so it works after this merges.Integration limits
CPK_INTELLIGENCE_API_KEY(npx copilotkit@latest login, thenproject select) andOPENAI_API_KEY. Another provider means changingMODELand supplying that key.openmuse-browser(this happened in the test workspace), setBROWSER_WORKER_URLtohttp://<that-host>:8790.