Skip to content

Commit bb8cc9c

Browse files
Claudehotlong
andauthored
Integrate User Preferences Service into Studio and CLI
- Add UserPreferencesServicePlugin to Studio server bootstrap - Add auto-registration in CLI serve command - Add service to Studio mock kernel for testing - Add workspace dependency to Studio package.json Agent-Logs-Url: https://github.com/objectstack-ai/framework/sessions/6c82c1b8-239c-4a91-8794-7e22d1fb5fdc Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
1 parent b93ba10 commit bb8cc9c

4 files changed

Lines changed: 21 additions & 0 deletions

File tree

apps/studio/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
"@objectstack/service-analytics": "workspace:*",
4141
"@objectstack/service-automation": "workspace:*",
4242
"@objectstack/service-feed": "workspace:*",
43+
"@objectstack/service-user-preferences": "workspace:*",
4344
"@objectstack/spec": "workspace:*",
4445
"@radix-ui/react-avatar": "^1.1.11",
4546
"@radix-ui/react-checkbox": "^1.3.3",

apps/studio/server/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import { MetadataPlugin } from '@objectstack/metadata';
3535
import { AIServicePlugin } from '@objectstack/service-ai';
3636
import { AutomationServicePlugin } from '@objectstack/service-automation';
3737
import { AnalyticsServicePlugin } from '@objectstack/service-analytics';
38+
import { UserPreferencesServicePlugin } from '@objectstack/service-user-preferences';
3839
import { getRequestListener } from '@hono/node-server';
3940
import type { Hono } from 'hono';
4041
import { createBrokerShim } from '../src/lib/create-broker-shim.js';
@@ -129,6 +130,7 @@ async function ensureKernel(): Promise<ObjectKernel> {
129130
await kernel.use(new SecurityPlugin());
130131
await kernel.use(new AuditPlugin());
131132
await kernel.use(new FeedServicePlugin());
133+
await kernel.use(new UserPreferencesServicePlugin());
132134
await kernel.use(new MetadataPlugin({ watch: false }));
133135
await kernel.use(new AIServicePlugin());
134136
await kernel.use(new AutomationServicePlugin());

apps/studio/src/mocks/createKernel.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { AnalyticsServicePlugin } from '@objectstack/service-analytics';
1010
import { MetadataPlugin } from '@objectstack/metadata';
1111
import { AIServicePlugin } from '@objectstack/service-ai';
1212
import { FeedServicePlugin } from '@objectstack/service-feed';
13+
import { UserPreferencesServicePlugin } from '@objectstack/service-user-preferences';
1314
import { createBrokerShim } from '../lib/create-broker-shim';
1415

1516
// System object definitions — resolved via Vite aliases to plugin source (no runtime deps)
@@ -86,6 +87,7 @@ export async function createKernel(options: KernelOptions) {
8687
// so that the setupNav service is available during their init() phase
8788
await kernel.use(new SetupPlugin());
8889
await kernel.use(new FeedServicePlugin());
90+
await kernel.use(new UserPreferencesServicePlugin());
8991
await kernel.use(new MetadataPlugin({ watch: false }));
9092
await kernel.use(new AIServicePlugin());
9193
await kernel.use(new AutomationServicePlugin());

packages/cli/src/commands/serve.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -356,6 +356,22 @@ export default class Serve extends Command {
356356
}
357357
}
358358

359+
// 5. Auto-register UserPreferencesServicePlugin if not already loaded by config plugins.
360+
const hasUserPrefsPlugin = plugins.some(
361+
(p: any) => p.name === 'com.objectstack.service-user-preferences'
362+
|| p.constructor?.name === 'UserPreferencesServicePlugin'
363+
);
364+
if (!hasUserPrefsPlugin) {
365+
try {
366+
const userPrefsPkg = '@objectstack/service-user-preferences';
367+
const { UserPreferencesServicePlugin } = await import(/* webpackIgnore: true */ userPrefsPkg);
368+
await kernel.use(new UserPreferencesServicePlugin());
369+
trackPlugin('UserPreferences');
370+
} catch {
371+
// @objectstack/service-user-preferences not installed — preferences features unavailable
372+
}
373+
}
374+
359375
// ── Studio UI ─────────────────────────────────────────────────
360376
// In dev mode, Studio UI is enabled by default (use --no-ui to disable).
361377
// Always serves the pre-built dist/ — no Vite dev server, no extra port.

0 commit comments

Comments
 (0)