// // Copyright 2025 DXOS.org // import { Schema } from 'effect'; import { Capabilities, Events } from '../../common'; import { contributes, defineEvent, defineCapability, defineModule, definePlugin } from '../../core'; import { createResolver, type IntentSchema } from '../../plugin-intent'; export const Number = defineCapability('dxos.org/test/generator/number'); export const CountEvent = defineEvent('dxos.org/test/generator/count'); export const createPluginId = (id: string) => `dxos.org/test/generator/${id}`; export const createGeneratorIntent = (id: string) => { class Alert extends Schema.TaggedClass()(`${createPluginId(id)}/action/alert`, { input: Schema.Void, output: Schema.Void, }) {} return Alert as unknown as IntentSchema; }; export const createNumberPlugin = (id: string) => { const number = Math.floor(Math.random() * 100); return definePlugin({ id, name: `Plugin ${id}` }, [ defineModule({ id: `${id}/main`, activatesOn: CountEvent, activate: () => contributes(Number, number), }), defineModule({ id: `${id}/intent-resolver`, activatesOn: Events.SetupIntentResolver, activate: () => contributes( Capabilities.IntentResolver, createResolver({ intent: createGeneratorIntent(id), resolve: () => window.alert(JSON.stringify({ number })), }), ), }), ]); };