feat(mini-apps): serve apps from ~/.rowboat/apps via app://miniapp

Apps are now user data on disk, not bundled in the repo.

- MiniAppManifest schema + mini-apps:list/get-data/seed IPC channels
- main: mini-apps-handler (list/get-data + seed install primitive) and an
  app://miniapp/<id>/ protocol host serving ~/.rowboat/apps/<id>/dist
- renderer lists installed apps from disk and loads each via app://miniapp
  (real origin: remote images/fetch work); data sourced from data.json
- removed the bundled sample apps from source (they live in ~/.rowboat/apps)
This commit is contained in:
Gagan 2026-07-01 00:27:00 +05:30
parent 6cbf40b165
commit 924a93fa4a
14 changed files with 289 additions and 693 deletions

View file

@ -16,6 +16,7 @@ import {
import { UserMessageContent } from './message.js';
import { RowboatApiConfig } from './rowboat-account.js';
import { ZListToolkitsResponse } from './composio.js';
import { MiniAppManifest } from './mini-app.js';
import { BrowserStateSchema } from './browser-control.js';
import { BillingInfoSchema } from './billing.js';
import { EmailBlockSchema, GmailThreadSchema } from './blocks.js';
@ -1007,6 +1008,31 @@ const ipcSchemas = {
shouldShow: z.boolean(),
}),
},
// Mini Apps: seed built-in apps to ~/.rowboat/apps/<id>/ (idempotent).
'mini-apps:seed': {
req: z.object({
apps: z.array(z.object({
manifest: MiniAppManifest,
html: z.string(),
data: z.unknown().optional(),
})),
}),
res: z.object({
seeded: z.array(z.string()),
}),
},
// Mini Apps: list installed app manifests from ~/.rowboat/apps/.
'mini-apps:list': {
req: z.null(),
res: z.object({
manifests: z.array(MiniAppManifest),
}),
},
// Mini Apps: read an app's latest data.json (agent output).
'mini-apps:get-data': {
req: z.object({ id: z.string() }),
res: z.object({ data: z.unknown().nullable() }),
},
'composio:didConnect': {
req: z.object({
toolkitSlug: z.string(),