diff --git a/apps/studio/mocks/node-polyfills.ts b/apps/studio/mocks/node-polyfills.ts index af56daddc..3df043e89 100644 --- a/apps/studio/mocks/node-polyfills.ts +++ b/apps/studio/mocks/node-polyfills.ts @@ -98,4 +98,6 @@ export const watch = () => new EventEmitter(); export const readFile = async () => ''; export const writeFile = async () => {}; export const rename = async () => {}; +export const renameSync = () => {}; export const createHash = () => ({ update: () => ({ digest: () => '' }) }); +export const randomUUID = () => '00000000-0000-0000-0000-000000000000'; diff --git a/apps/studio/package.json b/apps/studio/package.json index f0fd533ce..b84c871ba 100644 --- a/apps/studio/package.json +++ b/apps/studio/package.json @@ -30,8 +30,11 @@ "@objectstack/plugin-auth": "workspace:*", "@objectstack/plugin-msw": "workspace:*", "@objectstack/plugin-security": "workspace:*", + "@objectstack/plugin-setup": "workspace:*", "@objectstack/runtime": "workspace:*", "@objectstack/service-ai": "workspace:*", + "@objectstack/service-analytics": "workspace:*", + "@objectstack/service-automation": "workspace:*", "@objectstack/service-feed": "workspace:*", "@objectstack/spec": "workspace:*", "@radix-ui/react-avatar": "^1.1.11", diff --git a/apps/studio/server/index.ts b/apps/studio/server/index.ts index a34eb9761..9e764ed8c 100644 --- a/apps/studio/server/index.ts +++ b/apps/studio/server/index.ts @@ -31,9 +31,12 @@ import { createHonoApp } from '@objectstack/hono'; import { AuthPlugin } from '@objectstack/plugin-auth'; import { SecurityPlugin } from '@objectstack/plugin-security'; import { AuditPlugin } from '@objectstack/plugin-audit'; +import { SetupPlugin } from '@objectstack/plugin-setup'; import { FeedServicePlugin } from '@objectstack/service-feed'; import { MetadataPlugin } from '@objectstack/metadata'; import { AIServicePlugin } from '@objectstack/service-ai'; +import { AutomationServicePlugin } from '@objectstack/service-automation'; +import { AnalyticsServicePlugin } from '@objectstack/service-analytics'; import { handle } from '@hono/node-server/vercel'; import { Hono } from 'hono'; import { cors } from 'hono/cors'; @@ -127,6 +130,9 @@ async function ensureKernel(): Promise { await kernel.use(new FeedServicePlugin()); await kernel.use(new MetadataPlugin({ watch: false })); await kernel.use(new AIServicePlugin()); + await kernel.use(new AutomationServicePlugin()); + await kernel.use(new AnalyticsServicePlugin()); + await kernel.use(new SetupPlugin()); // Broker shim — bridges HttpDispatcher → ObjectQL engine (kernel as any).broker = createBrokerShim(kernel); diff --git a/apps/studio/src/mocks/createKernel.ts b/apps/studio/src/mocks/createKernel.ts index f663273dc..a412b9b02 100644 --- a/apps/studio/src/mocks/createKernel.ts +++ b/apps/studio/src/mocks/createKernel.ts @@ -4,6 +4,12 @@ import { ObjectKernel, DriverPlugin, AppPlugin } from '@objectstack/runtime'; import { ObjectQLPlugin } from '@objectstack/objectql'; import { InMemoryDriver } from '@objectstack/driver-memory'; import { MSWPlugin } from '@objectstack/plugin-msw'; +import { SetupPlugin } from '@objectstack/plugin-setup'; +import { AutomationServicePlugin } from '@objectstack/service-automation'; +import { AnalyticsServicePlugin } from '@objectstack/service-analytics'; +import { MetadataPlugin } from '@objectstack/metadata'; +import { AIServicePlugin } from '@objectstack/service-ai'; +import { FeedServicePlugin } from '@objectstack/service-feed'; import { createBrokerShim } from '../lib/create-broker-shim'; // System object definitions — resolved via Vite aliases to plugin source (no runtime deps) @@ -75,6 +81,14 @@ export async function createKernel(options: KernelOptions) { await kernel.use(new AppPlugin(appConfig)); } + // Register services and plugins + await kernel.use(new FeedServicePlugin()); + await kernel.use(new MetadataPlugin({ watch: false })); + await kernel.use(new AIServicePlugin()); + await kernel.use(new AutomationServicePlugin()); + await kernel.use(new AnalyticsServicePlugin()); + await kernel.use(new SetupPlugin()); + // Protocol service is registered automatically by ObjectQLPlugin.init() // via ObjectStackProtocolImplementation (which uses SchemaRegistry internally). // Do NOT manually set 'protocol' on kernel.services — it would conflict with diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d88dd933e..60bb3d185 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -166,12 +166,21 @@ importers: '@objectstack/plugin-security': specifier: workspace:* version: link:../../packages/plugins/plugin-security + '@objectstack/plugin-setup': + specifier: workspace:* + version: link:../../packages/plugins/plugin-setup '@objectstack/runtime': specifier: workspace:* version: link:../../packages/runtime '@objectstack/service-ai': specifier: workspace:* version: link:../../packages/services/service-ai + '@objectstack/service-analytics': + specifier: workspace:* + version: link:../../packages/services/service-analytics + '@objectstack/service-automation': + specifier: workspace:* + version: link:../../packages/services/service-automation '@objectstack/service-feed': specifier: workspace:* version: link:../../packages/services/service-feed