@rizom/brain 0.2.0-alpha.46 → 0.2.0-alpha.48

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,62 +1,302 @@
1
- import type { z } from "./utils";
1
+ import { z } from 'zod';
2
+ import { VNode } from 'preact';
2
3
 
3
- export type ComponentType<P = Record<string, unknown>> = (props: P) => unknown;
4
- export interface RuntimeScript {
5
- src: string;
6
- type?: "module" | "text/javascript";
7
- defer?: boolean;
4
+ /**
5
+ * Progress notification for long-running operations
6
+ */
7
+ interface ProgressNotification {
8
+ progress: number;
9
+ total?: number;
10
+ message?: string;
11
+ rate?: number;
12
+ eta?: number;
8
13
  }
9
- export interface TemplateInput<T = unknown> {
10
- name: string;
11
- schema?: z.ZodType<T>;
12
- formatter?: (data: T) => string;
13
- parser?: (content: string) => T;
14
- component?: ComponentType<{ data: T }>;
15
- runtimeScripts?: RuntimeScript[];
16
- }
17
- export interface Template<T = unknown> extends TemplateInput<T> {
18
- name: string;
14
+ /**
15
+ * Progress callback type
16
+ */
17
+ type ProgressCallback = (notification: ProgressNotification) => Promise<void>;
18
+
19
+ /**
20
+ * Interface for content formatters (human-editable content formatting)
21
+ *
22
+ * ContentFormatters handle bidirectional transformation between structured data
23
+ * and human-editable markdown templates. Unlike SchemaFormatters which are for
24
+ * one-way API response formatting, ContentFormatters support parsing edited
25
+ * content back into structured data.
26
+ */
27
+ interface ContentFormatter<T = unknown> {
28
+ /**
29
+ * Format structured data into human-editable markdown
30
+ * @param data - The structured data to format
31
+ * @returns Human-editable markdown representation
32
+ */
33
+ format(data: T): string;
34
+ /**
35
+ * Parse human-editable markdown back into structured data
36
+ * @param content - The markdown content to parse
37
+ * @returns Structured data parsed from the markdown
38
+ * @throws Error if the content cannot be parsed
39
+ */
40
+ parse(content: string): T;
19
41
  }
20
- export const TemplateSchema: z.ZodSchema<Template>;
21
- export function createTemplate<T = unknown>(
22
- input: TemplateInput<T>,
23
- ): Template<T>;
24
- export function createTypedComponent<P>(
25
- component: ComponentType<P>,
26
- ): ComponentType<P>;
27
42
 
28
- export type OutputFormat = "html" | "markdown" | "text" | string;
29
- export type WebRenderer<T = unknown> = (props: {
30
- data: T;
31
- [key: string]: unknown;
32
- }) => unknown;
33
- export interface ViewTemplate<T = unknown> {
34
- name: string;
35
- schema?: z.ZodType<T>;
36
- renderers?: Record<string, WebRenderer<T>>;
37
- runtimeScripts?: RuntimeScript[];
43
+ /**
44
+ * Component type for layouts - using Preact
45
+ * Returns a Preact VNode
46
+ */
47
+ type ComponentType<P = unknown> = (props: P) => VNode;
48
+ /**
49
+ * A runtime script that a template depends on. Site-builder collects
50
+ * these per route across all templates rendered on the page, dedupes
51
+ * by `src`, and injects them as <script> tags.
52
+ *
53
+ * Use this for non-hydration runtime scripts (background canvases,
54
+ * scroll observers, decorative animations) that should ONLY load on
55
+ * pages where the template actually renders — unlike the plugin-level
56
+ * head-script registration which fires on every page.
57
+ */
58
+ interface RuntimeScript {
59
+ src: string;
60
+ defer?: boolean;
61
+ module?: boolean;
38
62
  }
39
- export interface ViewTemplateRegistry {
40
- get<T = unknown>(name: string): ViewTemplate<T> | undefined;
41
- list(): ViewTemplate[];
63
+ /**
64
+ * Helper function to create a type-safe component that automatically parses props
65
+ * using the provided Zod schema
66
+ *
67
+ * Supports transformation between schema type and component type (e.g., enrichment)
68
+ * @param TSchema - Type validated by schema (e.g., with optional url/typeLabel)
69
+ * @param TComponent - Type expected by component (e.g., with required url/typeLabel)
70
+ */
71
+ declare function createTypedComponent<TSchema, TComponent = TSchema>(schema: z.ZodType<TSchema>, component: ComponentType<TComponent>): ComponentType<unknown>;
72
+ /**
73
+ * Unified template interface that bundles content generation and view rendering
74
+ * This is the single source of truth for what constitutes a template
75
+ */
76
+ interface Template extends Omit<z.infer<typeof TemplateSchema>, "schema" | "layout" | "formatter"> {
77
+ schema: z.ZodSchema;
78
+ layout?: {
79
+ component?: ComponentType<unknown>;
80
+ fullscreen?: boolean;
81
+ };
82
+ formatter?: ContentFormatter<unknown>;
83
+ /**
84
+ * Whether to retrieve relevant entities from the knowledge base
85
+ * and inject them as context before AI generation. Default: false.
86
+ */
87
+ useKnowledgeContext?: boolean;
88
+ /**
89
+ * Runtime script dependencies. Loaded only on routes where this
90
+ * template actually renders — site-builder collects from all
91
+ * templates on a route, dedupes by src, and injects into <head>.
92
+ */
93
+ runtimeScripts?: RuntimeScript[];
42
94
  }
43
- export const ViewTemplateSchema: z.ZodSchema<ViewTemplate>;
95
+ /**
96
+ * Helper to create a template with automatic component wrapping
97
+ *
98
+ * Supports transformation between schema type and component type (e.g., enrichment)
99
+ * @param TSchema - Type validated by schema (datasource output)
100
+ * @param TComponent - Type expected by component (after enrichment)
101
+ */
102
+ declare function createTemplate<TSchema = unknown, TComponent = TSchema>(template: Omit<Template, "layout" | "schema"> & {
103
+ schema: z.ZodType<TSchema>;
104
+ layout?: {
105
+ component?: ComponentType<TComponent>;
106
+ fullscreen?: boolean;
107
+ };
108
+ runtimeScripts?: RuntimeScript[];
109
+ }): Template;
110
+ /**
111
+ * Template schema for validation
112
+ */
113
+ declare const TemplateSchema: z.ZodObject<{
114
+ name: z.ZodString;
115
+ description: z.ZodString;
116
+ schema: z.ZodAny;
117
+ basePrompt: z.ZodOptional<z.ZodString>;
118
+ useKnowledgeContext: z.ZodOptional<z.ZodBoolean>;
119
+ requiredPermission: z.ZodEnum<["anchor", "trusted", "public"]>;
120
+ formatter: z.ZodOptional<z.ZodAny>;
121
+ layout: z.ZodOptional<z.ZodObject<{
122
+ component: z.ZodAny;
123
+ fullscreen: z.ZodOptional<z.ZodBoolean>;
124
+ }, "strip", z.ZodTypeAny, {
125
+ component?: any;
126
+ fullscreen?: boolean | undefined;
127
+ }, {
128
+ component?: any;
129
+ fullscreen?: boolean | undefined;
130
+ }>>;
131
+ dataSourceId: z.ZodOptional<z.ZodString>;
132
+ }, "strip", z.ZodTypeAny, {
133
+ name: string;
134
+ description: string;
135
+ requiredPermission: "anchor" | "trusted" | "public";
136
+ schema?: any;
137
+ basePrompt?: string | undefined;
138
+ useKnowledgeContext?: boolean | undefined;
139
+ formatter?: any;
140
+ layout?: {
141
+ component?: any;
142
+ fullscreen?: boolean | undefined;
143
+ } | undefined;
144
+ dataSourceId?: string | undefined;
145
+ }, {
146
+ name: string;
147
+ description: string;
148
+ requiredPermission: "anchor" | "trusted" | "public";
149
+ schema?: any;
150
+ basePrompt?: string | undefined;
151
+ useKnowledgeContext?: boolean | undefined;
152
+ formatter?: any;
153
+ layout?: {
154
+ component?: any;
155
+ fullscreen?: boolean | undefined;
156
+ } | undefined;
157
+ dataSourceId?: string | undefined;
158
+ }>;
159
+ type TemplateInput = z.infer<typeof TemplateSchema>;
44
160
 
45
- export interface SiteBuilderOptions {
46
- outputDir?: string;
47
- baseUrl?: string;
48
- [key: string]: unknown;
161
+ /**
162
+ * Site content entity types
163
+ */
164
+ declare const SiteContentEntityTypeSchema: z.ZodEnum<["site-content-preview", "site-content-production"]>;
165
+ type SiteContentEntityType = z.infer<typeof SiteContentEntityTypeSchema>;
166
+ /**
167
+ * View template schema
168
+ */
169
+ declare const ViewTemplateSchema: z.ZodObject<{
170
+ name: z.ZodString;
171
+ schema: z.ZodAny;
172
+ description: z.ZodOptional<z.ZodString>;
173
+ pluginId: z.ZodString;
174
+ renderers: z.ZodObject<{
175
+ web: z.ZodOptional<z.ZodUnion<[z.ZodFunction<z.ZodTuple<[], z.ZodUnknown>, z.ZodUnknown>, z.ZodString]>>;
176
+ }, "strip", z.ZodTypeAny, {
177
+ web?: string | ((...args: unknown[]) => unknown) | undefined;
178
+ }, {
179
+ web?: string | ((...args: unknown[]) => unknown) | undefined;
180
+ }>;
181
+ }, "strip", z.ZodTypeAny, {
182
+ name: string;
183
+ pluginId: string;
184
+ renderers: {
185
+ web?: string | ((...args: unknown[]) => unknown) | undefined;
186
+ };
187
+ description?: string | undefined;
188
+ schema?: any;
189
+ }, {
190
+ name: string;
191
+ pluginId: string;
192
+ renderers: {
193
+ web?: string | ((...args: unknown[]) => unknown) | undefined;
194
+ };
195
+ description?: string | undefined;
196
+ schema?: any;
197
+ }>;
198
+ /**
199
+ * Renderer types for different output formats
200
+ */
201
+ type WebRenderer<T = unknown> = ComponentType<T> | string;
202
+ /**
203
+ * Output format types
204
+ */
205
+ type OutputFormat = "web";
206
+ /**
207
+ * View template with support for multiple output formats
208
+ */
209
+ interface ViewTemplate<T = unknown> {
210
+ name: string;
211
+ schema: z.ZodType<T>;
212
+ description?: string;
213
+ pluginId: string;
214
+ renderers: {
215
+ web?: WebRenderer<T>;
216
+ };
217
+ fullscreen?: boolean;
218
+ providerId?: string;
219
+ formatter?: ContentFormatter<T>;
220
+ /** Runtime script dependencies (see Template.runtimeScripts). */
221
+ runtimeScripts?: RuntimeScript[];
49
222
  }
50
- export interface BuildResult {
51
- success: boolean;
52
- outputDir?: string;
53
- pages?: number;
54
- errors?: string[];
223
+ /**
224
+ * View template registry interface
225
+ */
226
+ interface ViewTemplateRegistry {
227
+ get(name: string): ViewTemplate<unknown> | undefined;
228
+ list(): ViewTemplate<unknown>[];
229
+ validate(templateName: string, content: unknown): boolean;
55
230
  }
56
- export type SiteContentEntityType = string;
57
- export interface SiteBuilder {
58
- build(options?: SiteBuilderOptions): Promise<BuildResult>;
231
+ /**
232
+ * Site builder options
233
+ */
234
+ declare const SiteBuilderOptionsSchema: z.ZodObject<{
235
+ enableContentGeneration: z.ZodDefault<z.ZodBoolean>;
236
+ outputDir: z.ZodString;
237
+ workingDir: z.ZodOptional<z.ZodString>;
238
+ environment: z.ZodDefault<z.ZodEnum<["preview", "production"]>>;
239
+ siteConfig: z.ZodOptional<z.ZodObject<{
240
+ title: z.ZodString;
241
+ description: z.ZodString;
242
+ url: z.ZodOptional<z.ZodString>;
243
+ }, "strip", z.ZodTypeAny, {
244
+ description: string;
245
+ title: string;
246
+ url?: string | undefined;
247
+ }, {
248
+ description: string;
249
+ title: string;
250
+ url?: string | undefined;
251
+ }>>;
252
+ }, "strip", z.ZodTypeAny, {
253
+ enableContentGeneration: boolean;
254
+ outputDir: string;
255
+ environment: "preview" | "production";
256
+ workingDir?: string | undefined;
257
+ siteConfig?: {
258
+ description: string;
259
+ title: string;
260
+ url?: string | undefined;
261
+ } | undefined;
262
+ }, {
263
+ outputDir: string;
264
+ enableContentGeneration?: boolean | undefined;
265
+ workingDir?: string | undefined;
266
+ environment?: "preview" | "production" | undefined;
267
+ siteConfig?: {
268
+ description: string;
269
+ title: string;
270
+ url?: string | undefined;
271
+ } | undefined;
272
+ }>;
273
+ type SiteBuilderOptions = z.infer<typeof SiteBuilderOptionsSchema>;
274
+ /**
275
+ * Build result schema
276
+ */
277
+ declare const BuildResultSchema: z.ZodObject<{
278
+ success: z.ZodBoolean;
279
+ routesBuilt: z.ZodNumber;
280
+ errors: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
281
+ warnings: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
282
+ }, "strip", z.ZodTypeAny, {
283
+ success: boolean;
284
+ routesBuilt: number;
285
+ errors?: string[] | undefined;
286
+ warnings?: string[] | undefined;
287
+ }, {
288
+ success: boolean;
289
+ routesBuilt: number;
290
+ errors?: string[] | undefined;
291
+ warnings?: string[] | undefined;
292
+ }>;
293
+ type BuildResult = z.infer<typeof BuildResultSchema>;
294
+ /**
295
+ * Site builder interface
296
+ */
297
+ interface SiteBuilder {
298
+ build(options: SiteBuilderOptions, progress?: ProgressCallback): Promise<BuildResult>;
59
299
  }
60
- export const SiteBuilderOptionsSchema: z.ZodSchema<SiteBuilderOptions>;
61
- export const BuildResultSchema: z.ZodSchema<BuildResult>;
62
- export const SiteContentEntityTypeSchema: z.ZodSchema<SiteContentEntityType>;
300
+
301
+ export { BuildResultSchema, SiteBuilderOptionsSchema, SiteContentEntityTypeSchema, TemplateSchema, ViewTemplateSchema, createTemplate, createTypedComponent };
302
+ export type { BuildResult, ComponentType, OutputFormat, RuntimeScript, SiteBuilder, SiteBuilderOptions, SiteContentEntityType, Template, TemplateInput, ViewTemplate, ViewTemplateRegistry, WebRenderer };
package/dist/themes.d.ts CHANGED
@@ -1,48 +1,9 @@
1
1
  /**
2
- * ⚠️ TEMPORARY HAND-WRITTEN PUBLIC API SURFACE ⚠️
2
+ * Compose a complete theme by prepending shared base utilities.
3
3
  *
4
- * Public API contract for `@rizom/brain/themes`. Hand-maintained
5
- * as a stopgap because the auto-bundlers choke on the size and
6
- * edge cases of the `@brains/*` type graph. See
7
- * `docs/plans/external-plugin-api.md` for the replacement plan.
8
- *
9
- * **Sync rules:**
10
- * - When `composeTheme`'s signature changes in `@brains/theme-base`,
11
- * update this file in the same commit.
12
- * - The runtime side (`../entries/themes.ts`) re-exports the real
13
- * implementation from `@brains/theme-base`. The .js bundle
14
- * produced by `scripts/build.ts` is what consumers execute.
15
- * This .d.ts file is what their tsc sees.
4
+ * Base utilities live in @layer theme-base; theme-specific styles
5
+ * should use @layer theme-override to guarantee correct cascade order.
16
6
  */
7
+ declare function composeTheme(themeCSS: string): string;
17
8
 
18
- /**
19
- * Prepend the shared base theme utilities to a raw theme CSS string
20
- * and return the combined result.
21
- *
22
- * The base utilities layer contains:
23
- *
24
- * - Palette tokens (`--palette-*`) for neutral colors, status colors,
25
- * and universal UI signals
26
- * - `@theme inline` declarations that expose the semantic color
27
- * tokens (`--color-brand`, `--color-bg`, `--color-text`, etc.) to
28
- * Tailwind v4's JIT so utilities like `bg-brand`, `text-brand`,
29
- * `border-brand`, `focus-visible:ring-brand` auto-generate
30
- * - Layer ordering (`@layer theme-base, theme-override`) so theme
31
- * overrides cascade correctly regardless of concat order
32
- * - Universal gradient, status, selection, and warning utilities
33
- * - Prose color slots for `@tailwindcss/typography`
34
- *
35
- * The framework resolver uses this helper when it loads a raw theme
36
- * package or inline theme CSS. Advanced consumers can use the same
37
- * helper when they need a fully composed CSS string outside the
38
- * resolver.
39
- *
40
- * @example
41
- * ```ts
42
- * import { composeTheme } from "@rizom/brain/themes";
43
- * import themeCSS from "./theme.css" with { type: "text" };
44
- *
45
- * const fullThemeCSS = composeTheme(themeCSS);
46
- * ```
47
- */
48
- export function composeTheme(themeCSS: string): string;
9
+ export { composeTheme };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rizom/brain",
3
- "version": "0.2.0-alpha.46",
3
+ "version": "0.2.0-alpha.48",
4
4
  "description": "Brain runtime + CLI — scaffold, run, and manage AI brain instances",
5
5
  "type": "module",
6
6
  "bin": {
@@ -32,10 +32,6 @@
32
32
  "types": "./dist/templates.d.ts",
33
33
  "import": "./dist/templates.js"
34
34
  },
35
- "./utils": {
36
- "types": "./dist/utils.d.ts",
37
- "import": "./dist/utils.js"
38
- },
39
35
  "./site": {
40
36
  "types": "./dist/site.d.ts",
41
37
  "import": "./dist/site.js"
@@ -99,6 +95,8 @@
99
95
  "@brains/typescript-config": "workspace:*",
100
96
  "@brains/utils": "workspace:*",
101
97
  "@types/bun": "latest",
98
+ "rollup": "^4.60.2",
99
+ "rollup-plugin-dts": "^6.4.1",
102
100
  "typescript": "^5.3.3"
103
101
  },
104
102
  "publishConfig": {
package/dist/utils.d.ts DELETED
@@ -1,133 +0,0 @@
1
- export namespace z {
2
- export interface SafeParseSuccess<T> {
3
- success: true;
4
- data: T;
5
- }
6
- export interface SafeParseError {
7
- success: false;
8
- error: ZodError;
9
- }
10
- export type SafeParseReturnType<T> = SafeParseSuccess<T> | SafeParseError;
11
- export interface ZodType<T = unknown> {
12
- parse(data: unknown): T;
13
- safeParse(data: unknown): SafeParseReturnType<T>;
14
- }
15
- export type ZodSchema<T = unknown> = ZodType<T>;
16
- export type ZodTypeAny = ZodType<unknown>;
17
- export type ZodRawShape = Record<string, ZodTypeAny>;
18
- export type infer<T extends ZodTypeAny> =
19
- T extends ZodType<infer Output> ? Output : never;
20
- export type input<T extends ZodTypeAny> =
21
- T extends ZodType<infer Output> ? Output : never;
22
- export type output<T extends ZodTypeAny> =
23
- T extends ZodType<infer Output> ? Output : never;
24
- export interface ZodObject<
25
- TShape extends ZodRawShape = ZodRawShape,
26
- > extends ZodType<Record<keyof TShape, unknown>> {
27
- shape: TShape;
28
- }
29
- }
30
-
31
- export const z: {
32
- object<TShape extends z.ZodRawShape>(shape: TShape): z.ZodObject<TShape>;
33
- string(): z.ZodType<string>;
34
- number(): z.ZodType<number>;
35
- boolean(): z.ZodType<boolean>;
36
- unknown(): z.ZodType<unknown>;
37
- array<T extends z.ZodTypeAny>(schema: T): z.ZodType<Array<z.infer<T>>>;
38
- record<T extends z.ZodTypeAny>(
39
- schema: T,
40
- ): z.ZodType<Record<string, z.infer<T>>>;
41
- enum<T extends readonly [string, ...string[]]>(
42
- values: T,
43
- ): z.ZodType<T[number]>;
44
- optional<T extends z.ZodTypeAny>(
45
- schema: T,
46
- ): z.ZodType<z.infer<T> | undefined>;
47
- };
48
- export class ZodError extends Error {}
49
- export type ZodType<T = unknown> = z.ZodType<T>;
50
- export type ZodSchema<T = unknown> = z.ZodSchema<T>;
51
- export type ZodRawShape = z.ZodRawShape;
52
- export type ZodTypeAny = z.ZodTypeAny;
53
- export type ZodInfer<T extends z.ZodTypeAny> = z.infer<T>;
54
- export type ZodInput<T extends z.ZodTypeAny> = z.input<T>;
55
- export type ZodOutput<T extends z.ZodTypeAny> = z.output<T>;
56
-
57
- export enum LogLevel {
58
- DEBUG = "debug",
59
- INFO = "info",
60
- WARN = "warn",
61
- ERROR = "error",
62
- }
63
- export type LogFormat = "pretty" | "json";
64
- export interface LoggerOptions {
65
- context?: string;
66
- level?: LogLevel | string;
67
- format?: LogFormat;
68
- }
69
- export class Logger {
70
- static createFresh(options?: LoggerOptions): Logger;
71
- debug(message: string, data?: unknown): void;
72
- info(message: string, data?: unknown): void;
73
- warn(message: string, data?: unknown): void;
74
- error(message: string, data?: unknown): void;
75
- }
76
-
77
- export function getErrorMessage(error: unknown): string;
78
- export function toError(error: unknown): Error;
79
- export function createId(): string;
80
- export function createPrefixedId(prefix: string): string;
81
- export function createBatchId(): string;
82
- export function slugify(text: string): string;
83
- export function generateIdFromText(text: string): string;
84
- export function pluralize(word: string): string;
85
- export function toDisplayName(value: string): string;
86
- export function formatLabel(value: string): string;
87
- export function truncateText(text: string, maxLength: number): string;
88
- export function calculateReadingTime(text: string): number;
89
- export function interpolateEnvVar(
90
- value: string,
91
- env?: Record<string, string | undefined>,
92
- ): string;
93
- export function interpolateEnv<T>(
94
- value: T,
95
- env?: Record<string, string | undefined>,
96
- ): T;
97
-
98
- export interface ParsedMarkdown {
99
- content: string;
100
- data: Record<string, unknown>;
101
- }
102
- export function parseMarkdown(markdown: string): ParsedMarkdown;
103
- export function generateMarkdown(
104
- content: string,
105
- data?: Record<string, unknown>,
106
- ): string;
107
- export function extractTitle(markdown: string): string | undefined;
108
- export function markdownToHtml(markdown: string): string | Promise<string>;
109
- export function stripMarkdown(markdown: string): string;
110
- export function toYaml(value: unknown): string;
111
- export function fromYaml<T = unknown>(yaml: string): T;
112
- export function isValidYaml(yaml: string): boolean;
113
- export function parseYamlDocument<T = unknown>(yaml: string): T;
114
-
115
- export interface ProgressNotification {
116
- progress?: number;
117
- total?: number;
118
- message?: string;
119
- }
120
- export type ProgressCallback = (
121
- notification: ProgressNotification,
122
- ) => void | Promise<void>;
123
- export interface IJobProgressMonitor {
124
- report(notification: ProgressNotification): Promise<void>;
125
- }
126
- export class ProgressReporter {
127
- static from(callback: ProgressCallback): ProgressReporter;
128
- report(notification: ProgressNotification): Promise<void>;
129
- }
130
- export class JobResult {
131
- static success<T = unknown>(data?: T): T;
132
- static failure(message: string): never;
133
- }