@stina/extension-api 0.58.0 → 1.3.1
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.
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/runtime.cjs +10 -2
- package/dist/runtime.cjs.map +1 -1
- package/dist/runtime.d.cts +2 -2
- package/dist/runtime.d.ts +2 -2
- package/dist/runtime.js +10 -2
- package/dist/runtime.js.map +1 -1
- package/dist/schemas/index.cjs +67 -0
- package/dist/schemas/index.cjs.map +1 -1
- package/dist/schemas/index.d.cts +469 -6
- package/dist/schemas/index.d.ts +469 -6
- package/dist/schemas/index.js +61 -0
- package/dist/schemas/index.js.map +1 -1
- package/dist/{types.tools-DtYAgtto.d.cts → types.tools-C0GqXQlu.d.cts} +117 -1
- package/dist/{types.tools-DtYAgtto.d.ts → types.tools-C0GqXQlu.d.ts} +117 -1
- package/package.json +1 -1
- package/schema/extension-manifest.schema.json +58 -0
- package/src/index.ts +6 -0
- package/src/runtime.ts +29 -3
- package/src/schemas/card.schema.ts +43 -0
- package/src/schemas/components.schema.ts +38 -0
- package/src/schemas/contributions.schema.ts +26 -0
- package/src/schemas/index.ts +9 -0
- package/src/schemas/permissions.schema.ts +2 -0
- package/src/types.components.ts +60 -0
- package/src/types.contributions.ts +35 -0
- package/src/types.permissions.ts +1 -0
- package/src/types.tools.ts +28 -0
- package/src/types.ts +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/schemas/index.ts","../../src/schemas/manifest.schema.ts","../../src/schemas/permissions.schema.ts","../../src/schemas/contributions.schema.ts","../../src/schemas/components.schema.ts","../../src/schemas/card.schema.ts"],"sourcesContent":["/**\n * Extension API Schemas\n *\n * Zod schemas for extension manifest validation and JSON Schema generation.\n */\n\n// Manifest schema (main export)\nexport {\n ExtensionManifestSchema,\n PlatformSchema,\n AuthorSchema,\n EnginesSchema,\n type ExtensionManifest,\n type Platform,\n type Author,\n type Engines,\n} from './manifest.schema.js'\n\n// Permission schemas\nexport {\n PermissionSchema,\n NetworkPermissionSchema,\n StoragePermissionSchema,\n UserDataPermissionSchema,\n CapabilityPermissionSchema,\n SystemPermissionSchema,\n isValidPermission,\n VALID_PERMISSIONS,\n PERMISSION_PATTERNS,\n type Permission,\n type NetworkPermission,\n type StoragePermission,\n type UserDataPermission,\n type CapabilityPermission,\n type SystemPermission,\n} from './permissions.schema.js'\n\n// Contribution schemas\nexport {\n ExtensionContributionsSchema,\n LocalizedStringSchema,\n ToolSettingsViewDefinitionSchema,\n ToolSettingsViewSchema,\n ToolSettingsListViewSchema,\n ToolSettingsListGroupBySchema,\n ToolSettingsComponentViewSchema,\n ToolSettingsListMappingSchema,\n ToolSettingsActionDataSourceSchema,\n PanelDefinitionSchema,\n PanelViewSchema,\n PanelComponentViewSchema,\n PanelUnknownViewSchema,\n PanelActionDataSourceSchema,\n ProviderDefinitionSchema,\n ProviderConfigViewSchema,\n ToolDefinitionSchema,\n CommandDefinitionSchema,\n PromptContributionSchema,\n PromptSectionSchema,\n type ExtensionContributions,\n type LocalizedString,\n type ToolSettingsViewDefinition,\n type ToolSettingsView,\n type ToolSettingsListView,\n type ToolSettingsListGroupBy,\n type ToolSettingsComponentView,\n type ToolSettingsListMapping,\n type ToolSettingsActionDataSource,\n type PanelDefinition,\n type PanelView,\n type PanelComponentView,\n type PanelUnknownView,\n type PanelActionDataSource,\n type ProviderDefinition,\n type ProviderConfigView,\n type ToolDefinition,\n type CommandDefinition,\n type PromptContribution,\n type PromptSection,\n} from './contributions.schema.js'\n\n// Component schemas\nexport {\n ExtensionComponentDataSchema,\n ExtensionComponentStyleSchema,\n ExtensionActionCallSchema,\n ExtensionActionRefSchema,\n ExtensionComponentIteratorSchema,\n ExtensionComponentChildrenSchema,\n ExtensionDataSourceSchema,\n AllowedCSSPropertySchema,\n IconButtonTypeSchema,\n PillVariantSchema,\n PanelActionSchema,\n HeaderPropsSchema,\n LabelPropsSchema,\n ParagraphPropsSchema,\n ButtonPropsSchema,\n TextInputPropsSchema,\n DateTimeInputPropsSchema,\n SelectPropsSchema,\n IconPickerPropsSchema,\n VerticalStackPropsSchema,\n HorizontalStackPropsSchema,\n GridPropsSchema,\n DividerPropsSchema,\n IconPropsSchema,\n IconButtonPropsSchema,\n PanelPropsSchema,\n TogglePropsSchema,\n CollapsiblePropsSchema,\n FrameVariantSchema,\n FramePropsSchema,\n TextPreviewPropsSchema,\n ListPropsSchema,\n PillPropsSchema,\n CheckboxPropsSchema,\n MarkdownPropsSchema,\n ModalPropsSchema,\n ConditionalGroupPropsSchema,\n WeatherConditionSchema,\n WeatherWindSchema,\n WeatherNowPropsSchema,\n WeatherForecastStepSchema,\n WeatherForecastPropsSchema,\n ChartKindSchema,\n ChartSeriesSchema,\n ChartPropsSchema,\n StatTrendSchema,\n StatTilePropsSchema,\n KeyValueRowSchema,\n KeyValueListPropsSchema,\n TimelineVariantSchema,\n TimelineEntrySchema,\n TimelinePropsSchema,\n NoteVariantSchema,\n NotePropsSchema,\n CalendarEventStatusSchema,\n CalendarEventPropsSchema,\n type ExtensionComponentData,\n type ExtensionComponentStyle,\n type ExtensionActionCall,\n type ExtensionActionRef,\n type ExtensionComponentIterator,\n type ExtensionComponentChildren,\n type ExtensionDataSource,\n type AllowedCSSProperty,\n type IconButtonType,\n type PillVariant,\n type PanelAction,\n type HeaderProps,\n type LabelProps,\n type ParagraphProps,\n type ButtonProps,\n type TextInputProps,\n type DateTimeInputProps,\n type SelectProps,\n type IconPickerProps,\n type VerticalStackProps,\n type HorizontalStackProps,\n type GridProps,\n type DividerProps,\n type IconProps,\n type IconButtonProps,\n type PanelProps,\n type ToggleProps,\n type CollapsibleProps,\n type FrameVariant,\n type FrameProps,\n type TextPreviewProps,\n type ListProps,\n type PillProps,\n type CheckboxProps,\n type MarkdownProps,\n type ModalProps,\n type ConditionalGroupProps,\n} from './components.schema.js'\n\n// Chat card profile - the subset of the DSL a tool may put in a conversation\nexport {\n ChatCardSchema,\n ChatCardComponentSchema,\n CHAT_CARD_COMPONENTS,\n validateChatCard,\n describeChatCardProfile,\n type ChatCardComponent,\n type ChatCardValidation,\n} from './card.schema.js'\n","/**\n * Manifest Schema\n *\n * Zod schema for extension manifest files (manifest.json).\n * This is the main schema that combines all sub-schemas.\n */\n\nimport { z } from 'zod'\nimport { PermissionSchema } from './permissions.schema.js'\nimport { ExtensionContributionsSchema } from './contributions.schema.js'\n\n/**\n * Platform schema\n */\nexport const PlatformSchema = z\n .enum(['web', 'electron', 'tui'])\n .describe('Supported platform')\n\n/**\n * Author schema\n */\nexport const AuthorSchema = z\n .object({\n name: z.string().min(1).describe('Author name'),\n url: z.string().url().optional().describe('Author URL'),\n })\n .describe('Author information')\n\n/**\n * Engines schema\n */\nexport const EnginesSchema = z\n .object({\n stina: z.string().describe('Minimum Stina version required'),\n })\n .describe('Engine requirements')\n\n/**\n * Extension manifest schema\n */\nexport const ExtensionManifestSchema = z\n .object({\n id: z\n .string()\n .regex(/^[a-z0-9-]+$/, 'ID must be lowercase alphanumeric with hyphens')\n .describe('Unique identifier (e.g., \"ollama-provider\")'),\n name: z.string().min(1).describe('Human-readable name'),\n version: z\n .string()\n .regex(/^\\d+\\.\\d+\\.\\d+/, 'Must be semver format (e.g., \"1.0.0\")')\n .describe('Version string (semver)'),\n description: z.string().min(1).describe('Short description'),\n // Optional icon (Hugeicons name) used as the default icon for proactive\n // conversation list entries this extension triggers. Kept optional so the\n // field is preserved (not stripped) when a manifest is parsed at load time.\n icon: z.string().optional().describe('Icon (Hugeicons name) representing the extension'),\n author: AuthorSchema.describe('Author information'),\n repository: z.string().url().optional().describe('Repository URL'),\n license: z.string().optional().describe('License identifier'),\n engines: EnginesSchema.optional().describe('Minimum Stina version required'),\n platforms: z.array(PlatformSchema).optional().describe('Supported platforms'),\n main: z.string().describe('Entry point file (relative to extension root)'),\n permissions: z.array(PermissionSchema).describe('Required permissions'),\n contributes: ExtensionContributionsSchema.optional().describe('What the extension contributes'),\n })\n .describe('Extension manifest format')\n\n// =============================================================================\n// Type Exports\n// =============================================================================\n\nexport type Platform = z.infer<typeof PlatformSchema>\nexport type Author = z.infer<typeof AuthorSchema>\nexport type Engines = z.infer<typeof EnginesSchema>\nexport type ExtensionManifest = z.infer<typeof ExtensionManifestSchema>\n","/**\n * Permission Schema\n *\n * Zod schema for extension permission strings.\n * Generates both TypeScript types and JSON Schema.\n */\n\nimport { z } from 'zod'\n\n/**\n * Valid exact permission values\n */\nexport const VALID_PERMISSIONS = [\n 'network:*',\n 'network:localhost',\n 'storage.collections',\n 'secrets.manage',\n 'user.profile.read',\n 'user.list',\n 'user.location.read',\n 'chat.history.read',\n 'chat.current.read',\n 'chat.message.write',\n 'provider.register',\n 'tools.register',\n 'tools.list',\n 'tools.execute',\n 'actions.register',\n 'settings.register',\n 'commands.register',\n 'panels.register',\n 'events.emit',\n 'scheduler.register',\n 'background.workers',\n 'files.read',\n 'files.write',\n 'clipboard.read',\n 'clipboard.write',\n] as const\n\n/**\n * Permission patterns for dynamic permissions (network with host/port)\n */\nexport const PERMISSION_PATTERNS = [\n /^network:localhost:\\d+$/, // network:localhost:11434\n /^network:[a-zA-Z0-9.-]+$/, // network:api.example.com\n /^network:[a-zA-Z0-9.-]+:\\d+$/, // network:api.example.com:8080\n]\n\n/**\n * Network permission schema - matches exact values and patterns\n */\nconst NetworkPermissionSchema = z\n .string()\n .refine(\n (val) => {\n // Check exact matches first\n if (val === 'network:*' || val === 'network:localhost') {\n return true\n }\n // Check dynamic patterns\n return PERMISSION_PATTERNS.some((pattern) => pattern.test(val))\n },\n { message: 'Invalid network permission format' }\n )\n .describe('Network access permission (e.g., \"network:*\", \"network:localhost:11434\")')\n\n/**\n * Storage permission schema\n */\nconst StoragePermissionSchema = z.enum(['storage.collections', 'secrets.manage']).describe('Storage permission')\n\n/**\n * User data permission schema\n */\nconst UserDataPermissionSchema = z\n .enum(['user.profile.read', 'user.list', 'user.location.read', 'chat.history.read', 'chat.current.read'])\n .describe('User data access permission')\n\n/**\n * Capability permission schema\n */\nconst CapabilityPermissionSchema = z\n .enum([\n 'provider.register',\n 'tools.register',\n 'tools.list',\n 'tools.execute',\n 'actions.register',\n 'settings.register',\n 'commands.register',\n 'panels.register',\n 'events.emit',\n 'scheduler.register',\n 'chat.message.write',\n 'background.workers',\n ])\n .describe('Capability permission')\n\n/**\n * System permission schema\n */\nconst SystemPermissionSchema = z\n .enum(['files.read', 'files.write', 'clipboard.read', 'clipboard.write'])\n .describe('System permission')\n\n/**\n * Regex pattern for dynamic network permissions (host with optional port)\n * Matches: network:api.example.com, network:localhost:11434, network:api.example.com:8080\n */\nconst NETWORK_PERMISSION_REGEX = /^network:[a-zA-Z0-9.-]+(:\\d+)?$/\n\n/**\n * Combined permission schema - validates against all permission types\n * Uses z.union with z.enum and z.string().regex() for better JSON Schema generation\n */\nexport const PermissionSchema = z\n .union([\n z.enum(VALID_PERMISSIONS),\n z.string().regex(NETWORK_PERMISSION_REGEX, 'Invalid network permission format'),\n ])\n .describe('Extension permission')\n\n/**\n * Check if a permission string is valid\n */\nexport function isValidPermission(permission: string): boolean {\n return PermissionSchema.safeParse(permission).success\n}\n\n// Re-export individual schemas for more specific validation if needed\nexport {\n NetworkPermissionSchema,\n StoragePermissionSchema,\n UserDataPermissionSchema,\n CapabilityPermissionSchema,\n SystemPermissionSchema,\n}\n\n// Type exports\nexport type Permission = z.infer<typeof PermissionSchema>\nexport type NetworkPermission = 'network:*' | `network:localhost` | `network:localhost:${number}` | `network:${string}`\nexport type StoragePermission = z.infer<typeof StoragePermissionSchema>\nexport type UserDataPermission = z.infer<typeof UserDataPermissionSchema>\nexport type CapabilityPermission = z.infer<typeof CapabilityPermissionSchema>\nexport type SystemPermission = z.infer<typeof SystemPermissionSchema>\n","/**\n * Contributions Schema\n *\n * Zod schemas for extension contributions: settings, panels, providers, tools, commands, prompts.\n */\n\nimport { z } from 'zod'\nimport { ExtensionComponentDataSchema } from './components.schema.js'\n\n// =============================================================================\n// Localization\n// =============================================================================\n\n/**\n * Localized string - either a simple string or a map of language codes to strings\n */\nexport const LocalizedStringSchema = z\n .union([z.string(), z.record(z.string())])\n .describe('String or localized string map')\n\n// =============================================================================\n// Tool Settings Views\n// =============================================================================\n\n/**\n * Tool settings list mapping\n */\nexport const ToolSettingsListMappingSchema = z\n .object({\n itemsKey: z.string().describe('Key for items array in tool result data'),\n countKey: z.string().optional().describe('Key for total count'),\n idKey: z.string().describe('Key for item ID'),\n labelKey: z.string().describe('Key for item label'),\n descriptionKey: z.string().optional().describe('Key for item description'),\n secondaryKey: z.string().optional().describe('Key for secondary label'),\n })\n .describe('Mapping from tool list data to UI fields')\n\n/**\n * Action-based data source for tool settings\n */\nexport const ToolSettingsActionDataSourceSchema = z\n .object({\n action: z.string().describe('Action ID to call for fetching data'),\n params: z.record(z.unknown()).optional().describe('Parameters to pass to the action'),\n refreshOn: z.array(z.string()).optional().describe('Event names that trigger refresh'),\n })\n .describe('Action-based data source')\n\n/**\n * Grouping configuration for a list view\n */\nexport const ToolSettingsListGroupBySchema = z\n .object({\n key: z.string().describe('Key in each item used to determine group membership'),\n order: z\n .array(z.string())\n .optional()\n .describe('Explicit ordering of group values; unlisted groups appear afterwards alphabetically'),\n labels: z\n .record(z.string())\n .optional()\n .describe('Human-friendly labels per group value (rendered as section headers)'),\n })\n .describe('List view grouping configuration')\n\n/**\n * List view backed by tools\n */\nexport const ToolSettingsListViewSchema = z\n .object({\n kind: z.literal('list').describe('View kind'),\n listToolId: z.string().describe('Tool ID for listing items'),\n getToolId: z.string().optional().describe('Tool ID for fetching details'),\n upsertToolId: z.string().optional().describe('Tool ID for creating/updating items'),\n deleteToolId: z.string().optional().describe('Tool ID for deleting items'),\n mapping: ToolSettingsListMappingSchema.describe('Mapping from tool data to UI'),\n searchParam: z.string().optional().describe('Param name for search query'),\n limitParam: z.string().optional().describe('Param name for limit'),\n idParam: z.string().optional().describe('Param name for get/delete ID'),\n listParams: z.record(z.unknown()).optional().describe('Static params for list tool'),\n editView: z\n .object({\n content: ExtensionComponentDataSchema.describe('Root component for the create/edit modal'),\n })\n .optional()\n .describe('Component-tree create/edit form bound to $item.<key>'),\n groupBy: ToolSettingsListGroupBySchema.optional().describe(\n 'Optional grouping configuration; when set, items are visually grouped by this field',\n ),\n })\n .describe('List view backed by tools')\n\n/**\n * Component-based tool settings view\n */\nexport const ToolSettingsComponentViewSchema = z\n .object({\n kind: z.literal('component').describe('View kind'),\n data: z.record(ToolSettingsActionDataSourceSchema).optional().describe('Data sources'),\n content: ExtensionComponentDataSchema.describe('Root component to render'),\n })\n .describe('Component-based tool settings view')\n\n/**\n * Tool settings view types\n */\nexport const ToolSettingsViewSchema = z\n .union([ToolSettingsListViewSchema, ToolSettingsComponentViewSchema])\n .describe('Tool settings view')\n\n/**\n * Tool settings view definition\n */\nexport const ToolSettingsViewDefinitionSchema = z\n .object({\n id: z.string().describe('Unique view ID within the extension'),\n title: z.string().describe('Display title'),\n description: z.string().optional().describe('Help text'),\n view: ToolSettingsViewSchema.describe('View configuration'),\n })\n .describe('Tool settings view definition')\n\n// =============================================================================\n// Panels\n// =============================================================================\n\n/**\n * Action-based data source for panels\n */\nexport const PanelActionDataSourceSchema = z\n .object({\n action: z.string().describe('Action ID to call for fetching data'),\n params: z.record(z.unknown()).optional().describe('Parameters to pass to the action'),\n refreshOn: z.array(z.string()).optional().describe('Event names that trigger refresh'),\n })\n .describe('Panel data source')\n\n/**\n * Component-based panel view\n */\nexport const PanelComponentViewSchema = z\n .object({\n kind: z.literal('component').describe('View kind'),\n data: z.record(PanelActionDataSourceSchema).optional().describe('Data sources'),\n content: ExtensionComponentDataSchema.describe('Root component to render'),\n })\n .describe('Component-based panel view')\n\n/**\n * Unknown panel view (for extensibility)\n */\nexport const PanelUnknownViewSchema = z\n .object({\n kind: z.string().describe('View kind'),\n })\n .passthrough()\n .describe('Unknown panel view')\n\n/**\n * Panel view schema\n */\nexport const PanelViewSchema = z\n .union([PanelComponentViewSchema, PanelUnknownViewSchema])\n .describe('Panel view')\n\n/**\n * Panel definition\n */\nexport const PanelDefinitionSchema = z\n .object({\n id: z.string().describe('Unique panel ID within the extension'),\n title: z.string().describe('Display title'),\n icon: z.string().optional().describe('Icon name (from huge-icons)'),\n view: PanelViewSchema.describe('Panel view schema'),\n })\n .describe('Panel definition')\n\n// =============================================================================\n// Providers\n// =============================================================================\n\n/**\n * Component-tree-based provider config view.\n */\nexport const ProviderConfigViewSchema = z\n .object({\n content: ExtensionComponentDataSchema.describe('Root component to render'),\n })\n .describe('Provider configuration view (component tree)')\n\n/**\n * Provider definition\n */\nexport const ProviderDefinitionSchema = z\n .object({\n id: z.string().describe('Provider ID'),\n name: z.string().describe('Display name'),\n description: z.string().optional().describe('Description'),\n suggestedDefaultModel: z.string().optional().describe('Suggested default model'),\n defaultSettings: z.record(z.unknown()).optional().describe('Default settings'),\n configView: ProviderConfigViewSchema.optional().describe('Component-tree configuration view'),\n })\n .describe('Provider definition')\n\n// =============================================================================\n// Tools\n// =============================================================================\n\n/**\n * Tool definition\n */\nexport const ToolDefinitionSchema = z\n .object({\n id: z.string().describe('Tool ID'),\n name: LocalizedStringSchema.describe('Display name'),\n description: LocalizedStringSchema.describe('Description for Stina'),\n parameters: z.record(z.unknown()).optional().describe('Parameter schema (JSON Schema)'),\n requiresConfirmation: z.boolean().optional().describe('Whether this tool requires user confirmation before execution (default: true)'),\n confirmationPrompt: LocalizedStringSchema.optional().describe('Custom confirmation prompt'),\n })\n .describe('Tool definition')\n\n// =============================================================================\n// Commands\n// =============================================================================\n\n/**\n * Command definition\n */\nexport const CommandDefinitionSchema = z\n .object({\n id: z.string().describe('Command ID (e.g., \"weather\" for /weather)'),\n name: z.string().describe('Display name'),\n description: z.string().describe('Description'),\n })\n .describe('Command definition')\n\n// =============================================================================\n// Prompts\n// =============================================================================\n\n/**\n * Prompt section\n */\nexport const PromptSectionSchema = z\n .enum(['system', 'behavior', 'tools'])\n .describe('Prompt section placement')\n\n/**\n * Prompt contribution\n */\nexport const PromptContributionSchema = z\n .object({\n id: z.string().describe('Unique ID within the extension'),\n title: z.string().optional().describe('Optional title for the prompt chunk'),\n section: PromptSectionSchema.optional().describe('Prompt section placement'),\n text: z.string().optional().describe('Plain text prompt content'),\n i18n: z.record(z.string()).optional().describe('Localized prompt content'),\n order: z.number().optional().describe('Ordering hint (lower comes first)'),\n })\n .describe('Prompt contribution')\n\n// =============================================================================\n// Storage\n// =============================================================================\n\n/**\n * Storage collection config schema\n */\nexport const StorageCollectionConfigSchema = z\n .object({\n indexes: z.array(z.string()).optional().describe('Fields to index for fast queries'),\n })\n .describe('Collection configuration')\n\n/**\n * Storage contributions schema\n */\nexport const StorageContributionsSchema = z\n .object({\n collections: z.record(StorageCollectionConfigSchema).describe('Collection definitions'),\n })\n .describe('Storage contributions')\n\n// =============================================================================\n// Extension Contributions\n// =============================================================================\n\n/**\n * Extension contributions\n */\nexport const ExtensionContributionsSchema = z\n .object({\n toolSettings: z.array(ToolSettingsViewDefinitionSchema).optional().describe('Tool settings views'),\n panels: z.array(PanelDefinitionSchema).optional().describe('Right panel contributions'),\n providers: z.array(ProviderDefinitionSchema).optional().describe('AI providers'),\n tools: z.array(ToolDefinitionSchema).optional().describe('Tools for Stina to use'),\n commands: z.array(CommandDefinitionSchema).optional().describe('Slash commands'),\n prompts: z.array(PromptContributionSchema).optional().describe('Prompt contributions'),\n storage: StorageContributionsSchema.optional().describe('Storage collection declarations'),\n })\n .describe('What an extension can contribute to Stina')\n\n// =============================================================================\n// Type Exports\n// =============================================================================\n\nexport type LocalizedString = z.infer<typeof LocalizedStringSchema>\nexport type ToolSettingsListMapping = z.infer<typeof ToolSettingsListMappingSchema>\nexport type ToolSettingsActionDataSource = z.infer<typeof ToolSettingsActionDataSourceSchema>\nexport type ToolSettingsListView = z.infer<typeof ToolSettingsListViewSchema>\nexport type ToolSettingsListGroupBy = z.infer<typeof ToolSettingsListGroupBySchema>\nexport type ToolSettingsComponentView = z.infer<typeof ToolSettingsComponentViewSchema>\nexport type ToolSettingsView = z.infer<typeof ToolSettingsViewSchema>\nexport type ToolSettingsViewDefinition = z.infer<typeof ToolSettingsViewDefinitionSchema>\nexport type PanelActionDataSource = z.infer<typeof PanelActionDataSourceSchema>\nexport type PanelComponentView = z.infer<typeof PanelComponentViewSchema>\nexport type PanelUnknownView = z.infer<typeof PanelUnknownViewSchema>\nexport type PanelView = z.infer<typeof PanelViewSchema>\nexport type PanelDefinition = z.infer<typeof PanelDefinitionSchema>\nexport type ProviderConfigView = z.infer<typeof ProviderConfigViewSchema>\nexport type ProviderDefinition = z.infer<typeof ProviderDefinitionSchema>\nexport type ToolDefinition = z.infer<typeof ToolDefinitionSchema>\nexport type CommandDefinition = z.infer<typeof CommandDefinitionSchema>\nexport type PromptSection = z.infer<typeof PromptSectionSchema>\nexport type PromptContribution = z.infer<typeof PromptContributionSchema>\nexport type StorageCollectionConfig = z.infer<typeof StorageCollectionConfigSchema>\nexport type StorageContributions = z.infer<typeof StorageContributionsSchema>\nexport type ExtensionContributions = z.infer<typeof ExtensionContributionsSchema>\n","/**\n * Component Schema\n *\n * Zod schemas for extension UI components.\n */\n\nimport { z } from 'zod'\n\n// =============================================================================\n// CSS Properties\n// =============================================================================\n\n/**\n * Allowed CSS property names for extension component styling.\n */\nexport const AllowedCSSPropertySchema = z.enum([\n // Colors\n 'color',\n 'background-color',\n 'background',\n 'border-color',\n // Borders\n 'border',\n 'border-width',\n 'border-style',\n 'border-radius',\n 'border-top',\n 'border-right',\n 'border-bottom',\n 'border-left',\n 'border-top-left-radius',\n 'border-top-right-radius',\n 'border-bottom-left-radius',\n 'border-bottom-right-radius',\n // Spacing\n 'padding',\n 'padding-top',\n 'padding-right',\n 'padding-bottom',\n 'padding-left',\n 'margin',\n 'margin-top',\n 'margin-right',\n 'margin-bottom',\n 'margin-left',\n 'gap',\n 'row-gap',\n 'column-gap',\n // Typography\n 'font-size',\n 'font-weight',\n 'font-style',\n 'text-align',\n 'text-decoration',\n 'line-height',\n 'letter-spacing',\n 'white-space',\n 'word-break',\n 'overflow-wrap',\n // Layout (safe properties)\n 'width',\n 'height',\n 'min-width',\n 'min-height',\n 'max-width',\n 'max-height',\n 'flex',\n 'flex-grow',\n 'flex-shrink',\n 'flex-basis',\n 'flex-wrap',\n 'align-self',\n 'justify-self',\n 'align-items',\n 'justify-content',\n // Visual\n 'opacity',\n 'visibility',\n 'overflow',\n 'overflow-x',\n 'overflow-y',\n 'box-shadow',\n 'outline',\n 'cursor',\n 'border-collapse',\n 'border-spacing',\n])\n\n/**\n * Style object for extension components.\n */\nexport const ExtensionComponentStyleSchema = z\n .record(AllowedCSSPropertySchema, z.string())\n .describe('Safe CSS styles for the component')\n\n// =============================================================================\n// Base Component\n// =============================================================================\n\n/**\n * Base component data schema - allows additional properties\n */\nexport const ExtensionComponentDataSchema: z.ZodType<{\n component: string\n style?: Record<string, string>\n [key: string]: unknown\n}> = z.lazy(() =>\n z\n .object({\n component: z.string().describe('Component type name'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Extension component definition')\n)\n\n// =============================================================================\n// Action References\n// =============================================================================\n\n/**\n * Action call with parameters\n */\nexport const ExtensionActionCallSchema = z\n .object({\n action: z.string().describe('Name of the registered action'),\n params: z.record(z.unknown()).optional().describe('Parameters to pass'),\n })\n .describe('Action call with parameters')\n\n/**\n * Action reference - can be a simple string or full action call\n */\nexport const ExtensionActionRefSchema = z\n .union([z.string(), ExtensionActionCallSchema])\n .describe('Action reference')\n\n// =============================================================================\n// Iterator & Children\n// =============================================================================\n\n/**\n * Iterator for rendering a list of components from data\n */\nexport const ExtensionComponentIteratorSchema = z\n .object({\n each: z.union([z.string(), z.array(z.unknown())]).describe('Data source to iterate over'),\n as: z.string().describe('Variable name for current item in scope'),\n items: z.array(ExtensionComponentDataSchema).describe('Components to render for each item'),\n })\n .describe('Iterator for rendering lists')\n\n/**\n * Children can be either a static array of components or an iterator\n */\nexport const ExtensionComponentChildrenSchema = z\n .union([z.array(ExtensionComponentDataSchema), ExtensionComponentIteratorSchema])\n .describe('Child components or iterator')\n\n// =============================================================================\n// Data Source\n// =============================================================================\n\n/**\n * Data source definition for fetching data via an action\n */\nexport const ExtensionDataSourceSchema = z\n .object({\n action: z.string().describe('Action to call for fetching data'),\n params: z.record(z.unknown()).optional().describe('Parameters to pass to the action'),\n refreshOn: z.array(z.string()).optional().describe('Event names that trigger a refresh'),\n })\n .describe('Data source definition')\n\n// =============================================================================\n// Component Props Schemas\n// =============================================================================\n\nexport const HeaderPropsSchema = z\n .object({\n component: z.literal('Header'),\n level: z.number().min(1).max(6).describe('Heading level (1-6)'),\n title: z.string().describe('Header title'),\n description: z.union([z.string(), z.array(z.string())]).optional().describe('Description text'),\n icon: z.string().optional().describe('Icon name'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Header component')\n\nexport const LabelPropsSchema = z\n .object({\n component: z.literal('Label'),\n text: z.string().describe('Label text'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Label component')\n\nexport const ParagraphPropsSchema = z\n .object({\n component: z.literal('Paragraph'),\n text: z.string().describe('Paragraph text'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Paragraph component')\n\nexport const ButtonPropsSchema = z\n .object({\n component: z.literal('Button'),\n text: z.string().describe('Button text'),\n type: z.enum(['normal', 'primary', 'danger', 'accent']).optional().describe('Visual style'),\n title: z.string().optional().describe('Tooltip shown on hover'),\n disabled: z.boolean().optional().describe('Disable the button'),\n onClickAction: ExtensionActionRefSchema.describe('Action to call on click'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Button component')\n\nexport const TextInputPropsSchema = z\n .object({\n component: z.literal('TextInput'),\n label: z.string().describe('Input label'),\n placeholder: z.string().optional().describe('Placeholder text'),\n value: z.string().optional().describe('Current value'),\n onChangeAction: ExtensionActionRefSchema.optional().describe('Action to call on change'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('TextInput component')\n\nexport const PasswordInputPropsSchema = z\n .object({\n component: z.literal('PasswordInput'),\n label: z.string().describe('Input label'),\n placeholder: z.string().optional().describe('Placeholder text'),\n value: z.string().optional().describe('Current value'),\n onChangeAction: ExtensionActionRefSchema.optional().describe('Action to call on change'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Password input component (text is masked)')\n\nexport const NumberInputPropsSchema = z\n .object({\n component: z.literal('NumberInput'),\n label: z.string().describe('Input label'),\n placeholder: z.string().optional().describe('Placeholder text'),\n value: z.union([z.string(), z.number()]).optional().describe('Current value'),\n min: z.number().optional().describe('Minimum value'),\n max: z.number().optional().describe('Maximum value'),\n step: z.number().optional().describe('Step'),\n onChangeAction: ExtensionActionRefSchema.optional().describe('Action to call on change'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Numeric input component')\n\nexport const TextAreaPropsSchema = z\n .object({\n component: z.literal('TextArea'),\n label: z.string().describe('Input label'),\n placeholder: z.string().optional().describe('Placeholder text'),\n value: z.string().optional().describe('Current value'),\n rows: z.number().int().positive().optional().describe('Number of visible text rows'),\n onChangeAction: ExtensionActionRefSchema.optional().describe('Action to call on change'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('TextArea component for multi-line text input')\n\nexport const DateTimeInputPropsSchema = z\n .object({\n component: z.literal('DateTimeInput'),\n label: z.string().describe('Input label'),\n value: z.string().optional().describe('Current value'),\n onChangeAction: ExtensionActionRefSchema.optional().describe('Action to call on change'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('DateTimeInput component')\n\nexport const SelectPropsSchema = z\n .object({\n component: z.literal('Select'),\n label: z.string().describe('Select label'),\n options: z.array(z.object({ label: z.string(), value: z.string() })).describe('Available options'),\n selectedValue: z.string().optional().describe('Currently selected value'),\n onChangeAction: ExtensionActionRefSchema.optional().describe('Action to call on change'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Select component')\n\nexport const IconPickerPropsSchema = z\n .object({\n component: z.literal('IconPicker'),\n label: z.string().optional().describe('Picker label'),\n value: z.string().optional().describe('Currently selected icon name'),\n onChangeAction: ExtensionActionRefSchema.optional().describe('Action to call on change'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('IconPicker component')\n\nexport const VerticalStackPropsSchema = z\n .object({\n component: z.literal('VerticalStack'),\n gap: z.number().optional().describe('Gap between children'),\n children: ExtensionComponentChildrenSchema.describe('Child components'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('VerticalStack layout component')\n\nexport const HorizontalStackPropsSchema = z\n .object({\n component: z.literal('HorizontalStack'),\n gap: z.number().optional().describe('Gap between children'),\n children: ExtensionComponentChildrenSchema.describe('Child components'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('HorizontalStack layout component')\n\nexport const GridPropsSchema = z\n .object({\n component: z.literal('Grid'),\n columns: z.number().describe('Number of columns'),\n gap: z.number().optional().describe('Gap between items'),\n children: ExtensionComponentChildrenSchema.describe('Child components'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Grid layout component')\n\nexport const DividerPropsSchema = z\n .object({\n component: z.literal('Divider'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Divider component')\n\nexport const IconPropsSchema = z\n .object({\n component: z.literal('Icon'),\n name: z.string().describe('Icon name'),\n title: z.string().optional().describe('Icon title'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Icon component')\n\nexport const IconButtonTypeSchema = z\n .enum(['normal', 'primary', 'danger', 'accent'])\n .describe('Button type')\n\nexport const IconButtonPropsSchema = z\n .object({\n component: z.literal('IconButton'),\n icon: z.string().describe('Icon name'),\n tooltip: z.string().describe('Tooltip text'),\n active: z.boolean().optional().describe('Whether the button is active'),\n disabled: z.boolean().optional().describe('Whether the button is disabled'),\n type: IconButtonTypeSchema.optional().describe('Button style type'),\n onClickAction: ExtensionActionRefSchema.describe('Action to call on click'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('IconButton component')\n\nexport const PanelActionSchema = z\n .object({\n icon: z.string().describe('Icon name'),\n tooltip: z.string().describe('Tooltip text'),\n action: ExtensionActionRefSchema.describe('Action to call'),\n type: IconButtonTypeSchema.optional().describe('Button style type'),\n })\n .describe('Panel action button')\n\nexport const PanelPropsSchema = z\n .object({\n component: z.literal('Panel'),\n title: z.string().describe('Panel title'),\n description: z.union([z.string(), z.array(z.string())]).optional().describe('Description text'),\n icon: z.string().optional().describe('Icon name'),\n actions: z.array(PanelActionSchema).optional().describe('Action buttons'),\n content: ExtensionComponentDataSchema.optional().describe('Panel content'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Panel component')\n\nexport const TogglePropsSchema = z\n .object({\n component: z.literal('Toggle'),\n label: z.string().optional().describe('Toggle label'),\n description: z.string().optional().describe('Description text'),\n checked: z.boolean().optional().describe('Whether the toggle is checked'),\n disabled: z.boolean().optional().describe('Whether the toggle is disabled'),\n onChangeAction: ExtensionActionRefSchema.optional().describe('Action to call on change'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Toggle component')\n\nexport const CollapsiblePropsSchema = z\n .object({\n component: z.literal('Collapsible'),\n title: z.string().describe('Title displayed in the header'),\n description: z.union([z.string(), z.array(z.string())]).optional().describe('Description text'),\n icon: z.string().optional().describe('Icon name'),\n defaultExpanded: z.boolean().optional().describe('Whether expanded by default'),\n content: ExtensionComponentDataSchema.optional().describe('Content when expanded'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Collapsible component')\n\nexport const PillVariantSchema = z\n .enum(['default', 'primary', 'success', 'warning', 'danger', 'accent'])\n .describe('Pill color variant')\n\nexport const PillPropsSchema = z\n .object({\n component: z.literal('Pill'),\n text: z.string().describe('Pill text'),\n icon: z.string().optional().describe('Icon name'),\n variant: PillVariantSchema.optional().describe('Color variant'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Pill component')\n\nexport const CheckboxPropsSchema = z\n .object({\n component: z.literal('Checkbox'),\n label: z.string().describe('Checkbox label'),\n checked: z.boolean().optional().describe('Whether the checkbox is checked'),\n disabled: z.boolean().optional().describe('Whether the checkbox is disabled'),\n strikethrough: z.boolean().optional().describe('Strike through label when checked'),\n onChangeAction: ExtensionActionRefSchema.optional().describe('Action to call on change'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Checkbox component')\n\nexport const MarkdownPropsSchema = z\n .object({\n component: z.literal('Markdown'),\n content: z.string().describe('Markdown content'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Markdown component')\n\nexport const TextPreviewPropsSchema = z\n .object({\n component: z.literal('TextPreview'),\n content: z.string().describe('Markdown content'),\n maxLines: z.number().optional().describe('Max visible lines before truncating (default 5)'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('TextPreview component')\n\nexport const ModalPropsSchema = z\n .object({\n component: z.literal('Modal'),\n title: z.string().describe('Modal title'),\n open: z.boolean().optional().describe('Whether the modal is open'),\n maxWidth: z.string().optional().describe('Max width of the modal'),\n body: ExtensionComponentDataSchema.optional().describe('Modal body content'),\n footer: ExtensionComponentDataSchema.optional().describe('Modal footer content'),\n onCloseAction: ExtensionActionRefSchema.optional().describe('Action to call on close'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Modal component')\n\nexport const ConditionalGroupPropsSchema = z\n .object({\n component: z.literal('ConditionalGroup'),\n condition: z.string().describe('Condition expression to evaluate'),\n children: ExtensionComponentChildrenSchema.describe('Children to render when condition is true'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('ConditionalGroup component')\n\nexport const FrameVariantSchema = z\n .enum(['border', 'solid'])\n .describe('Frame visual variant')\n\nexport const FramePropsSchema = z\n .object({\n component: z.literal('Frame'),\n title: z.union([z.string(), ExtensionComponentChildrenSchema]).optional().describe('Optional title (string or components)'),\n icon: z.string().optional().describe('Icon name'),\n collapsible: z.boolean().optional().describe('Whether content can be toggled'),\n defaultExpanded: z.boolean().optional().describe('Whether expanded by default'),\n variant: FrameVariantSchema.optional().describe('Visual variant'),\n children: ExtensionComponentChildrenSchema.describe('Child components'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Frame container component')\n\nexport const ListPropsSchema = z\n .object({\n component: z.literal('List'),\n children: ExtensionComponentChildrenSchema.describe('Child components rendered as list items'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('List component')\n\n// =============================================================================\n// Purpose-built Display Components\n// =============================================================================\n\n/**\n * The skies the weather components know how to draw. Closed on purpose: the\n * icon is chosen from this list, and a string outside it has no picture.\n */\nexport const WeatherConditionSchema = z\n .enum([\n 'clear',\n 'partly-cloudy',\n 'cloudy',\n 'overcast',\n 'fog',\n 'light-rain',\n 'rain',\n 'heavy-rain',\n 'sleet',\n 'light-snow',\n 'snow',\n 'heavy-snow',\n 'thunderstorm',\n 'hail',\n 'windy',\n ])\n .describe('Weather condition')\n\nexport const WeatherWindSchema = z\n .object({\n speed: z.number().describe('Sustained wind speed'),\n unit: z.string().optional().describe('Unit written after the speed. Defaults to m/s'),\n direction: z.string().optional().describe('Compass direction, in the caller\\'s own words'),\n gust: z.number().optional().describe('Gust speed, in the same unit'),\n })\n .passthrough()\n .describe('Wind reading')\n\nexport const WeatherNowPropsSchema = z\n .object({\n component: z.literal('WeatherNow'),\n place: z.string().describe('Where the reading is from'),\n condition: WeatherConditionSchema,\n conditionLabel: z.string().optional().describe('The condition in the user\\'s own language'),\n temperature: z.number().describe('Current temperature'),\n feelsLike: z.number().optional().describe('Apparent temperature'),\n unit: z.string().optional().describe('Written after every temperature. Defaults to °'),\n wind: WeatherWindSchema.optional(),\n night: z.boolean().optional().describe('Draw the night variant of the icon'),\n summary: z.string().optional().describe('One line of context under the numbers'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Current weather component')\n\nexport const WeatherForecastStepSchema = z\n .object({\n label: z.string().describe('Short step label, e.g. 14 or Tors'),\n condition: WeatherConditionSchema,\n conditionLabel: z.string().optional(),\n high: z.number().describe('The warmer temperature, or the only one'),\n low: z.number().optional().describe('The colder temperature'),\n night: z.boolean().optional(),\n precipitation: z.number().min(0).max(100).optional().describe('Chance of precipitation, 0-100'),\n current: z.boolean().optional().describe('The step the reader is at; drawn larger'),\n })\n .passthrough()\n .describe('One forecast step')\n\nexport const WeatherForecastPropsSchema = z\n .object({\n component: z.literal('WeatherForecast'),\n title: z.string().optional().describe('Heading above the row'),\n icon: z.string().optional().describe('Icon shown to the left of the title'),\n unit: z.string().optional().describe('Written after every temperature. Defaults to °'),\n steps: z.array(WeatherForecastStepSchema).min(1).describe('Steps, hourly or daily'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Weather forecast component')\n\nexport const ChartKindSchema = z.enum(['line', 'bar', 'area']).describe('How the chart draws')\n\nexport const ChartSeriesSchema = z\n .object({\n name: z.string().optional().describe('Named in the legend'),\n points: z\n .array(z.number().nullable())\n .describe('One value per label. null is a gap, drawn as one'),\n })\n .passthrough()\n .describe('One chart series')\n\n/**\n * Eight series is the ceiling because the host palette has eight slots, assigned\n * in a fixed order so a series keeps its colour wherever it appears. A ninth\n * would need a generated hue, and a generated hue is how a chart stops being\n * readable to colour-blind viewers.\n */\nexport const ChartPropsSchema = z\n .object({\n component: z.literal('Chart'),\n chart: ChartKindSchema.optional().describe('Defaults to line'),\n series: z.array(ChartSeriesSchema).min(1).max(8).describe('At most eight series'),\n labels: z.array(z.string()).optional().describe('One per point, along the horizontal axis'),\n title: z.string().optional().describe('Heading above the plot'),\n icon: z.string().optional().describe('Icon shown to the left of the title'),\n unit: z.string().optional().describe('Written after every value'),\n zeroBaseline: z.boolean().optional().describe('Force the value axis to include zero'),\n height: z.number().min(4).max(24).optional().describe('Plot height in rem. Defaults to 9'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Chart component')\n\nexport const StatTrendSchema = z.enum(['up', 'down', 'flat']).describe('Direction of change')\n\nexport const StatTilePropsSchema = z\n .object({\n component: z.literal('StatTile'),\n label: z.string().describe('What the number is'),\n value: z.union([z.string(), z.number()]).describe('The number itself'),\n unit: z.string().optional().describe('Written after the value in smaller type'),\n caption: z.string().optional().describe('One quiet line under the number'),\n icon: z.string().optional().describe('Icon name'),\n trend: StatTrendSchema.optional(),\n trendLabel: z.string().optional().describe('The change in words'),\n trendIsGood: z.boolean().optional().describe('Whether up is the good direction. Defaults to true'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Single-number stat tile component')\n\nexport const KeyValueRowSchema = z\n .object({\n label: z.string(),\n value: z.string(),\n icon: z.string().optional().describe('Icon name'),\n })\n .passthrough()\n .describe('One key/value row')\n\nexport const KeyValueListPropsSchema = z\n .object({\n component: z.literal('KeyValueList'),\n rows: z.array(KeyValueRowSchema).min(1).describe('Facts in two aligned columns'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Key/value list component')\n\nexport const TimelineVariantSchema = z\n .enum(['default', 'accent', 'success', 'warning', 'danger'])\n .describe('How much a timeline entry stands out')\n\nexport const TimelineEntrySchema = z\n .object({\n time: z.string().describe('When it happens, worded as it should be read'),\n title: z.string(),\n description: z.string().optional().describe('A line under the title'),\n icon: z.string().optional().describe('Icon name'),\n duration: z.string().optional().describe('How long it lasts, in words'),\n badge: z.string().optional().describe('Trailing badge'),\n current: z.boolean().optional().describe('The entry the reader is at'),\n past: z.boolean().optional().describe('Already behind us; drawn recessive'),\n variant: TimelineVariantSchema.optional(),\n })\n .passthrough()\n .describe('One timeline entry')\n\nexport const TimelinePropsSchema = z\n .object({\n component: z.literal('Timeline'),\n title: z.string().optional().describe('Heading above the rail'),\n icon: z.string().optional().describe('Icon shown to the left of the title'),\n entries: z.array(TimelineEntrySchema).min(1).describe('Entries, in the order they happen'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Vertical timeline component')\n\nexport const NoteVariantSchema = z\n .enum(['default', 'accent', 'success', 'warning', 'danger'])\n .describe('How much a note stands out')\n\nexport const NotePropsSchema = z\n .object({\n component: z.literal('Note'),\n title: z.string().optional(),\n icon: z.string().optional().describe('Icon shown to the left of the title'),\n badge: z.string().optional().describe('Trailing badge next to the title'),\n content: z.string().describe('The body, as markdown'),\n footer: z.string().optional().describe('One quiet line at the bottom'),\n variant: NoteVariantSchema.optional(),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Titled block of prose component')\n\nexport const CalendarEventStatusSchema = z\n .enum(['confirmed', 'tentative', 'cancelled'])\n .describe('Whether an event is going ahead')\n\nexport const CalendarEventPropsSchema = z\n .object({\n component: z.literal('CalendarEvent'),\n title: z.string(),\n start: z.string().describe('ISO 8601 with an offset'),\n end: z.string().optional().describe('ISO 8601 with an offset'),\n allDay: z.boolean().optional(),\n location: z.string().optional(),\n organizer: z.string().optional(),\n attendees: z.array(z.string()).optional(),\n calendar: z.string().optional().describe('Which calendar it sits in; shown as a badge'),\n status: CalendarEventStatusSchema.optional(),\n recurrence: z.string().optional().describe('How it repeats, in words'),\n notes: z.string().optional(),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Single calendar event component')\n\n// =============================================================================\n// Type Exports\n// =============================================================================\n\nexport type AllowedCSSProperty = z.infer<typeof AllowedCSSPropertySchema>\nexport type ExtensionComponentStyle = z.infer<typeof ExtensionComponentStyleSchema>\nexport type ExtensionComponentData = z.infer<typeof ExtensionComponentDataSchema>\nexport type ExtensionActionCall = z.infer<typeof ExtensionActionCallSchema>\nexport type ExtensionActionRef = z.infer<typeof ExtensionActionRefSchema>\nexport type ExtensionComponentIterator = z.infer<typeof ExtensionComponentIteratorSchema>\nexport type ExtensionComponentChildren = z.infer<typeof ExtensionComponentChildrenSchema>\nexport type ExtensionDataSource = z.infer<typeof ExtensionDataSourceSchema>\nexport type IconButtonType = z.infer<typeof IconButtonTypeSchema>\nexport type PillVariant = z.infer<typeof PillVariantSchema>\nexport type PanelAction = z.infer<typeof PanelActionSchema>\nexport type HeaderProps = z.infer<typeof HeaderPropsSchema>\nexport type LabelProps = z.infer<typeof LabelPropsSchema>\nexport type ParagraphProps = z.infer<typeof ParagraphPropsSchema>\nexport type ButtonProps = z.infer<typeof ButtonPropsSchema>\nexport type TextInputProps = z.infer<typeof TextInputPropsSchema>\nexport type PasswordInputProps = z.infer<typeof PasswordInputPropsSchema>\nexport type NumberInputProps = z.infer<typeof NumberInputPropsSchema>\nexport type TextAreaProps = z.infer<typeof TextAreaPropsSchema>\nexport type DateTimeInputProps = z.infer<typeof DateTimeInputPropsSchema>\nexport type SelectProps = z.infer<typeof SelectPropsSchema>\nexport type IconPickerProps = z.infer<typeof IconPickerPropsSchema>\nexport type VerticalStackProps = z.infer<typeof VerticalStackPropsSchema>\nexport type HorizontalStackProps = z.infer<typeof HorizontalStackPropsSchema>\nexport type GridProps = z.infer<typeof GridPropsSchema>\nexport type DividerProps = z.infer<typeof DividerPropsSchema>\nexport type IconProps = z.infer<typeof IconPropsSchema>\nexport type IconButtonProps = z.infer<typeof IconButtonPropsSchema>\nexport type PanelProps = z.infer<typeof PanelPropsSchema>\nexport type ToggleProps = z.infer<typeof TogglePropsSchema>\nexport type CollapsibleProps = z.infer<typeof CollapsiblePropsSchema>\nexport type PillProps = z.infer<typeof PillPropsSchema>\nexport type CheckboxProps = z.infer<typeof CheckboxPropsSchema>\nexport type MarkdownProps = z.infer<typeof MarkdownPropsSchema>\nexport type TextPreviewProps = z.infer<typeof TextPreviewPropsSchema>\nexport type ModalProps = z.infer<typeof ModalPropsSchema>\nexport type ConditionalGroupProps = z.infer<typeof ConditionalGroupPropsSchema>\nexport type FrameVariant = z.infer<typeof FrameVariantSchema>\nexport type FrameProps = z.infer<typeof FramePropsSchema>\nexport type ListProps = z.infer<typeof ListPropsSchema>\nexport type WeatherCondition = z.infer<typeof WeatherConditionSchema>\nexport type WeatherWind = z.infer<typeof WeatherWindSchema>\nexport type WeatherNowProps = z.infer<typeof WeatherNowPropsSchema>\nexport type WeatherForecastStep = z.infer<typeof WeatherForecastStepSchema>\nexport type WeatherForecastProps = z.infer<typeof WeatherForecastPropsSchema>\nexport type ChartKind = z.infer<typeof ChartKindSchema>\nexport type ChartSeries = z.infer<typeof ChartSeriesSchema>\nexport type ChartProps = z.infer<typeof ChartPropsSchema>\nexport type StatTrend = z.infer<typeof StatTrendSchema>\nexport type StatTileProps = z.infer<typeof StatTilePropsSchema>\nexport type KeyValueRow = z.infer<typeof KeyValueRowSchema>\nexport type KeyValueListProps = z.infer<typeof KeyValueListPropsSchema>\nexport type TimelineVariant = z.infer<typeof TimelineVariantSchema>\nexport type TimelineEntry = z.infer<typeof TimelineEntrySchema>\nexport type TimelineProps = z.infer<typeof TimelinePropsSchema>\nexport type NoteVariant = z.infer<typeof NoteVariantSchema>\nexport type NoteProps = z.infer<typeof NotePropsSchema>\nexport type CalendarEventStatus = z.infer<typeof CalendarEventStatusSchema>\nexport type CalendarEventProps = z.infer<typeof CalendarEventPropsSchema>\n","/**\n * Chat Card Schema\n *\n * The subset of the component DSL that may appear *in a conversation*, as\n * opposed to in a panel or a settings form.\n *\n * A panel is a place the user went to; a card arrives unbidden in the middle of\n * a reply, and it is composed by a language model rather than by an extension\n * author who tested it. So the card profile is narrower than the DSL in three\n * ways, and each one is a rule about what a card *is*:\n *\n * - **No interaction.** No buttons, no inputs, no modals. A card shows; it does\n * not offer. Everything the user might want to do next, they ask for in\n * words — which is the whole premise of talking to Stina rather than\n * operating her.\n * - **No data binding.** Panels pull from actions and iterate over the result;\n * a card is a finished value, written out in full. There is no scope for a\n * `$reference` to resolve against, so one is rejected rather than silently\n * rendered as nothing — see `findScopeReference`.\n * - **Strict props.** The panel schemas pass unknown properties through, on the\n * theory that a newer extension may know something this build does not. Cards\n * have no such future to protect: an unknown property here is a model that\n * invented one, and saying so is more useful than dropping it.\n *\n * The check runs where the card enters the system — in `core_show_card`, and in\n * anything else that accepts a card from a tool — so a rejection comes back to\n * the model as an error it can act on, in the same turn.\n */\n\nimport { z } from 'zod'\nimport { ExtensionComponentStyleSchema } from './components.schema.js'\nimport {\n WeatherConditionSchema,\n WeatherWindSchema,\n ChartKindSchema,\n StatTrendSchema,\n TimelineVariantSchema,\n NoteVariantSchema,\n CalendarEventStatusSchema,\n PillVariantSchema,\n FrameVariantSchema,\n} from './components.schema.js'\n\n/** A card component and, recursively, everything it may contain. */\nexport type ChatCardComponent = {\n component: string\n style?: Record<string, string>\n [key: string]: unknown\n}\n\nconst style = ExtensionComponentStyleSchema.optional()\n\n/**\n * Children of a card component.\n *\n * An array only. The iterator form (`{ each, as, items }`) exists to expand a\n * data source, and a card has none — the caller writes the rows out.\n */\nconst children: z.ZodType<ChatCardComponent[]> = z.lazy(() =>\n z.array(ChatCardComponentSchema).max(40)\n)\n\n// -----------------------------------------------------------------------------\n// Layout\n// -----------------------------------------------------------------------------\n\n/*\n * None of the three layouts takes a `gap`.\n *\n * A panel's author sets one and looks at the result; a model writes a number\n * into a field described as `gap?: number` and never sees what it did. The unit\n * is rem, which is not a thing anyone guesses — the first card written against\n * this profile asked for `gap: 14`, meaning pixels, and the second asked for the\n * 8 the validator allowed, which is 128 of them. Both were reasonable readings\n * of a number with no unit on it.\n *\n * So the spacing is the profile's, not the caller's: `applyCardSpacing` stamps\n * the same rhythm onto every stack and grid after validation. One less field to\n * describe, and every card in the conversation is spaced alike.\n */\n\nconst VerticalStackCardSchema = z\n .object({\n component: z.literal('VerticalStack'),\n children,\n style,\n })\n .strict()\n\nconst HorizontalStackCardSchema = z\n .object({\n component: z.literal('HorizontalStack'),\n children,\n style,\n })\n .strict()\n\nconst GridCardSchema = z\n .object({\n component: z.literal('Grid'),\n columns: z.number().min(1).max(6),\n children,\n style,\n })\n .strict()\n\nconst FrameCardSchema = z\n .object({\n component: z.literal('Frame'),\n // Only the string form: the components form of a title is for panels that\n // put controls in their header, which a card has no business doing.\n title: z.string().optional(),\n collapsible: z.boolean().optional(),\n defaultExpanded: z.boolean().optional(),\n variant: FrameVariantSchema.optional(),\n children,\n style,\n })\n .strict()\n\nconst ListCardSchema = z.object({ component: z.literal('List'), children, style }).strict()\n\nconst DividerCardSchema = z.object({ component: z.literal('Divider'), style }).strict()\n\n// -----------------------------------------------------------------------------\n// Text\n// -----------------------------------------------------------------------------\n\nconst HeaderCardSchema = z\n .object({\n component: z.literal('Header'),\n level: z.number().min(1).max(6),\n title: z.string(),\n description: z.union([z.string(), z.array(z.string())]).optional(),\n icon: z.string().optional(),\n style,\n })\n .strict()\n\nconst LabelCardSchema = z\n .object({ component: z.literal('Label'), text: z.string(), style })\n .strict()\n\nconst ParagraphCardSchema = z\n .object({ component: z.literal('Paragraph'), text: z.string(), style })\n .strict()\n\nconst MarkdownCardSchema = z\n .object({ component: z.literal('Markdown'), content: z.string(), style })\n .strict()\n\n// -----------------------------------------------------------------------------\n// Visual\n// -----------------------------------------------------------------------------\n\nconst IconCardSchema = z\n .object({\n component: z.literal('Icon'),\n name: z.string(),\n title: z.string().optional(),\n style,\n })\n .strict()\n\nconst PillCardSchema = z\n .object({\n component: z.literal('Pill'),\n text: z.string(),\n icon: z.string().optional(),\n variant: PillVariantSchema.optional(),\n style,\n })\n .strict()\n\n// -----------------------------------------------------------------------------\n// Purpose-built\n// -----------------------------------------------------------------------------\n\nconst WeatherNowCardSchema = z\n .object({\n component: z.literal('WeatherNow'),\n place: z.string(),\n condition: WeatherConditionSchema,\n conditionLabel: z.string().optional(),\n temperature: z.number(),\n feelsLike: z.number().optional(),\n unit: z.string().optional(),\n wind: WeatherWindSchema.optional(),\n night: z.boolean().optional(),\n summary: z.string().optional(),\n style,\n })\n .strict()\n\nconst WeatherForecastCardSchema = z\n .object({\n component: z.literal('WeatherForecast'),\n title: z.string().optional(),\n icon: z.string().optional(),\n unit: z.string().optional(),\n steps: z\n .array(\n z\n .object({\n label: z.string(),\n condition: WeatherConditionSchema,\n conditionLabel: z.string().optional(),\n high: z.number(),\n low: z.number().optional(),\n night: z.boolean().optional(),\n precipitation: z.number().min(0).max(100).optional(),\n current: z.boolean().optional(),\n })\n .strict()\n )\n .min(1)\n .max(24),\n style,\n })\n .strict()\n\nconst ChartCardSchema = z\n .object({\n component: z.literal('Chart'),\n chart: ChartKindSchema.optional(),\n series: z\n .array(\n z\n .object({\n name: z.string().optional(),\n points: z.array(z.number().nullable()).min(1).max(200),\n })\n .strict()\n )\n .min(1)\n .max(8),\n labels: z.array(z.string()).max(200).optional(),\n title: z.string().optional(),\n icon: z.string().optional(),\n unit: z.string().optional(),\n zeroBaseline: z.boolean().optional(),\n height: z.number().min(4).max(24).optional(),\n style,\n })\n .strict()\n\nconst StatTileCardSchema = z\n .object({\n component: z.literal('StatTile'),\n label: z.string(),\n value: z.union([z.string(), z.number()]),\n unit: z.string().optional(),\n caption: z.string().optional(),\n icon: z.string().optional(),\n trend: StatTrendSchema.optional(),\n trendLabel: z.string().optional(),\n trendIsGood: z.boolean().optional(),\n style,\n })\n .strict()\n\nconst KeyValueListCardSchema = z\n .object({\n component: z.literal('KeyValueList'),\n rows: z\n .array(\n z\n .object({ label: z.string(), value: z.string(), icon: z.string().optional() })\n .strict()\n )\n .min(1)\n .max(40),\n style,\n })\n .strict()\n\nconst TimelineCardSchema = z\n .object({\n component: z.literal('Timeline'),\n title: z.string().optional(),\n icon: z.string().optional(),\n entries: z\n .array(\n z\n .object({\n time: z.string(),\n title: z.string(),\n description: z.string().optional(),\n icon: z.string().optional(),\n duration: z.string().optional(),\n badge: z.string().optional(),\n current: z.boolean().optional(),\n past: z.boolean().optional(),\n variant: TimelineVariantSchema.optional(),\n })\n .strict()\n )\n .min(1)\n .max(40),\n style,\n })\n .strict()\n\nconst NoteCardSchema = z\n .object({\n component: z.literal('Note'),\n title: z.string().optional(),\n icon: z.string().optional(),\n badge: z.string().optional(),\n content: z.string(),\n footer: z.string().optional(),\n variant: NoteVariantSchema.optional(),\n style,\n })\n .strict()\n\nconst CalendarEventCardSchema = z\n .object({\n component: z.literal('CalendarEvent'),\n title: z.string(),\n start: z.string(),\n end: z.string().optional(),\n allDay: z.boolean().optional(),\n location: z.string().optional(),\n organizer: z.string().optional(),\n attendees: z.array(z.string()).max(40).optional(),\n calendar: z.string().optional(),\n status: CalendarEventStatusSchema.optional(),\n recurrence: z.string().optional(),\n notes: z.string().optional(),\n style,\n })\n .strict()\n\n/** Every component name a card may use. Exported so the docs and the tool description stay in step. */\nexport const CHAT_CARD_COMPONENTS = [\n 'VerticalStack',\n 'HorizontalStack',\n 'Grid',\n 'Frame',\n 'List',\n 'Divider',\n 'Header',\n 'Label',\n 'Paragraph',\n 'Markdown',\n 'Icon',\n 'Pill',\n 'WeatherNow',\n 'WeatherForecast',\n 'Chart',\n 'StatTile',\n 'KeyValueList',\n 'Timeline',\n 'Note',\n 'CalendarEvent',\n] as const\n\n/**\n * Every component of the card profile, in the order they are documented.\n *\n * One list, used twice: it is what the union validates against and what\n * `describeChatCardProfile` reads to write the vocabulary out. A component\n * added here is legal *and* documented, in one edit — the alternative is a\n * prose list that drifts, and a model reading a drifted list writes cards the\n * validator then rejects.\n */\nconst CARD_MEMBERS = [\n VerticalStackCardSchema,\n HorizontalStackCardSchema,\n GridCardSchema,\n FrameCardSchema,\n ListCardSchema,\n DividerCardSchema,\n HeaderCardSchema,\n LabelCardSchema,\n ParagraphCardSchema,\n MarkdownCardSchema,\n IconCardSchema,\n PillCardSchema,\n WeatherNowCardSchema,\n WeatherForecastCardSchema,\n ChartCardSchema,\n StatTileCardSchema,\n KeyValueListCardSchema,\n TimelineCardSchema,\n NoteCardSchema,\n CalendarEventCardSchema,\n] as const\n\n/**\n * One component of a chat card.\n *\n * Discriminated on `component` so a wrong property is reported against the\n * component the author actually named, rather than as \"no union member matched\"\n * across eighteen alternatives.\n */\nexport const ChatCardComponentSchema: z.ZodType<ChatCardComponent> = z.lazy(\n () =>\n z.discriminatedUnion(\n 'component',\n CARD_MEMBERS as unknown as [(typeof CARD_MEMBERS)[number], (typeof CARD_MEMBERS)[number]]\n ) as unknown as z.ZodType<ChatCardComponent>\n)\n\n/** The root of a card. Same profile as any component within it. */\nexport const ChatCardSchema = ChatCardComponentSchema\n\n/** How deeply components may nest inside a card, root included. */\nconst MAX_CARD_DEPTH = 8\n\n/**\n * Rejects `$`-prefixed strings anywhere in the card.\n *\n * In a panel a leading `$` means \"look this up in scope\". A card has no scope,\n * so the lookup would return nothing and the value would render as an empty\n * space — a price written `$120` would simply disappear. Zod cannot see this,\n * because to it the value is a perfectly good string; so it is checked\n * separately, and the caller is told to write the value without the prefix.\n *\n * @returns The offending path, or null when the card is clean.\n */\nfunction findScopeReference(value: unknown, path: string): string | null {\n if (typeof value === 'string') {\n return value.startsWith('$') ? path : null\n }\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n const found = findScopeReference(value[i], `${path}[${i}]`)\n if (found) return found\n }\n return null\n }\n if (value && typeof value === 'object') {\n for (const [key, child] of Object.entries(value as Record<string, unknown>)) {\n const found = findScopeReference(child, path ? `${path}.${key}` : key)\n if (found) return found\n }\n }\n return null\n}\n\n/** Depth of the deepest `children` chain, counting the root as 1. */\nfunction cardDepth(value: unknown): number {\n if (!value || typeof value !== 'object') return 0\n const kids = (value as { children?: unknown }).children\n if (!Array.isArray(kids) || kids.length === 0) return 1\n let deepest = 0\n for (const child of kids) {\n const depth = cardDepth(child)\n if (depth > deepest) deepest = depth\n }\n return deepest + 1\n}\n\n/**\n * Catch a chart whose series do not line up with its labels.\n *\n * Points map to labels by position, so a series one short does not fail to\n * render — it renders the wrong reading against every label after the gap,\n * which is worse than not drawing at all. Zod cannot express the relationship\n * between two sibling arrays, so it is checked here.\n *\n * @returns A message naming the mismatch, or null when everything lines up.\n */\nfunction findMisalignedChart(value: unknown): string | null {\n if (!value || typeof value !== 'object') return null\n\n if (Array.isArray(value)) {\n for (const item of value) {\n const found = findMisalignedChart(item)\n if (found) return found\n }\n return null\n }\n\n const node = value as { component?: string; labels?: unknown; series?: unknown }\n if (node.component === 'Chart' && Array.isArray(node.labels) && Array.isArray(node.series)) {\n const expected = node.labels.length\n for (let i = 0; i < node.series.length; i++) {\n const points = (node.series[i] as { points?: unknown[] })?.points\n if (Array.isArray(points) && points.length !== expected) {\n return (\n `Chart series ${i} has ${points.length} points but there are ${expected} labels. ` +\n `Points line up with labels by position — use null for a reading you do not have.`\n )\n }\n }\n }\n\n for (const child of Object.values(node as Record<string, unknown>)) {\n const found = findMisalignedChart(child)\n if (found) return found\n }\n return null\n}\n\n/**\n * The space between a card's components, in rem.\n *\n * One value for every stack and every grid: a card is read at a glance, and a\n * rhythm that changes between two of them reads as a mistake rather than as\n * emphasis. It matches what the components' own padding already assumes.\n */\nconst CARD_GAP_REM = 0.75\n\n/**\n * Stamp the profile's spacing onto every layout in a validated card.\n *\n * Done here rather than in each client's renderer: the same card object goes to\n * the web, to Electron and to the phone, so a number written once is a rhythm\n * they cannot disagree about. The renderers keep their own default of no gap,\n * which is what an extension panel means by leaving it out.\n *\n * Mutates the parsed copy, which zod built for us and nothing else holds.\n */\nfunction applyCardSpacing(card: ChatCardComponent): ChatCardComponent {\n if (card.component === 'VerticalStack' || card.component === 'HorizontalStack' || card.component === 'Grid') {\n card['gap'] = CARD_GAP_REM\n }\n\n if (Array.isArray(card['children'])) {\n for (const child of card['children'] as ChatCardComponent[]) applyCardSpacing(child)\n }\n\n return card\n}\n\n/** What came back from validating a card. */\nexport type ChatCardValidation =\n | { ok: true; card: ChatCardComponent }\n | { ok: false; error: string }\n\n/**\n * Validate a card against the chat profile.\n *\n * Returns a message rather than throwing, because the caller is almost always a\n * tool that has to hand the reason back to the model — an exception would become\n * \"the tool failed\", which is not something anyone can fix.\n */\nexport function validateChatCard(card: unknown): ChatCardValidation {\n const parsed = ChatCardSchema.safeParse(card)\n if (!parsed.success) {\n const issue = parsed.error.issues[0]\n const where = issue?.path.length ? ` at ${issue.path.join('.')}` : ''\n return { ok: false, error: `${issue?.message ?? 'Invalid card'}${where}` }\n }\n\n const depth = cardDepth(parsed.data)\n if (depth > MAX_CARD_DEPTH) {\n return {\n ok: false,\n error: `Card nests ${depth} levels deep; at most ${MAX_CARD_DEPTH} are allowed. Flatten it.`,\n }\n }\n\n const misaligned = findMisalignedChart(parsed.data)\n if (misaligned) {\n return { ok: false, error: misaligned }\n }\n\n const reference = findScopeReference(parsed.data, '')\n if (reference) {\n return {\n ok: false,\n error:\n `The value at ${reference} starts with \"$\", which the component system reads as a ` +\n `reference to data that a card does not have, so it would render as nothing. ` +\n `Write the value without the leading \"$\".`,\n }\n }\n\n return { ok: true, card: applyCardSpacing(parsed.data) }\n}\n\n// -----------------------------------------------------------------------------\n// Describing the profile\n// -----------------------------------------------------------------------------\n\n/**\n * Render one field's type compactly: `line|bar|area`, `number?`, `{a, b?}[≤24]`.\n *\n * Enough for a reader to write a valid value, and short enough that the whole\n * vocabulary fits in a tool description without crowding out everything else\n * the model has to hold. Anything this cannot name falls back to the value's\n * own kind rather than to nothing.\n */\nfunction describeType(schema: z.ZodTypeAny): string {\n const def = schema._def as { typeName?: string; [key: string]: unknown }\n\n switch (def.typeName) {\n case 'ZodOptional':\n case 'ZodNullable':\n case 'ZodDefault':\n return describeType((schema as unknown as { unwrap(): z.ZodTypeAny }).unwrap())\n case 'ZodLazy':\n return 'component[]'\n case 'ZodArray': {\n const inner = describeType((def as { type: z.ZodTypeAny }).type)\n // The cap belongs in the vocabulary. A model writing a card from a tool's\n // data has no other way to learn that a forecast takes 24 steps and not\n // the 48 hours it is holding, and finds out by having the whole card\n // refused — which is the expensive way to be told.\n const max = (def as { maxLength?: { value: number } | null }).maxLength?.value\n return typeof max === 'number' ? `${inner}[≤${max}]` : `${inner}[]`\n }\n case 'ZodObject': {\n const shape = (schema as unknown as z.AnyZodObject).shape\n const fields = Object.entries(shape).map(\n ([key, value]) => `${key}${(value as z.ZodTypeAny).isOptional() ? '?' : ''}`\n )\n return `{${fields.join(', ')}}`\n }\n case 'ZodEnum':\n return ((def as { values: readonly string[] }).values ?? []).join('|')\n case 'ZodUnion':\n return ((def as { options: z.ZodTypeAny[] }).options ?? []).map(describeType).join('|')\n case 'ZodLiteral':\n return String((def as { value: unknown }).value)\n case 'ZodString':\n return 'string'\n case 'ZodNumber':\n return 'number'\n case 'ZodBoolean':\n return 'boolean'\n case 'ZodRecord':\n return 'object'\n default:\n return 'value'\n }\n}\n\n/**\n * The card vocabulary, written out from the schemas themselves.\n *\n * This is what a language model is given as documentation, so it is generated\n * rather than kept by hand: a description that has drifted from the validator\n * teaches the model to write cards that are then rejected, and the model has no\n * way to tell which of the two was wrong.\n *\n * `style` is left out of every line. It is legal everywhere and interesting\n * almost nowhere — the components carry their own look, and a card that reaches\n * for CSS is usually one that should have picked a different component.\n */\nexport function describeChatCardProfile(): string {\n return CARD_MEMBERS.map((member) => {\n const shape = (member as unknown as z.AnyZodObject).shape as Record<string, z.ZodTypeAny>\n const name = (shape['component']!._def as { value: string }).value\n const fields = Object.entries(shape)\n .filter(([key]) => key !== 'component' && key !== 'style')\n .map(([key, value]) => `${key}${value.isOptional() ? '?' : ''}: ${describeType(value)}`)\n return fields.length ? `${name} — ${fields.join('; ')}` : name\n }).join('\\n')\n}\n"],"mappings":"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","names":["import_zod","import_zod","import_zod","import_zod"]}
|
|
1
|
+
{"version":3,"sources":["../../src/schemas/index.ts","../../src/schemas/manifest.schema.ts","../../src/schemas/permissions.schema.ts","../../src/schemas/contributions.schema.ts","../../src/schemas/components.schema.ts","../../src/schemas/card.schema.ts"],"sourcesContent":["/**\n * Extension API Schemas\n *\n * Zod schemas for extension manifest validation and JSON Schema generation.\n */\n\n// Manifest schema (main export)\nexport {\n ExtensionManifestSchema,\n PlatformSchema,\n AuthorSchema,\n EnginesSchema,\n type ExtensionManifest,\n type Platform,\n type Author,\n type Engines,\n} from './manifest.schema.js'\n\n// Permission schemas\nexport {\n PermissionSchema,\n NetworkPermissionSchema,\n StoragePermissionSchema,\n UserDataPermissionSchema,\n CapabilityPermissionSchema,\n SystemPermissionSchema,\n isValidPermission,\n VALID_PERMISSIONS,\n PERMISSION_PATTERNS,\n type Permission,\n type NetworkPermission,\n type StoragePermission,\n type UserDataPermission,\n type CapabilityPermission,\n type SystemPermission,\n} from './permissions.schema.js'\n\n// Contribution schemas\nexport {\n ExtensionContributionsSchema,\n LocalizedStringSchema,\n ToolSettingsViewDefinitionSchema,\n ToolSettingsViewSchema,\n ToolSettingsListViewSchema,\n ToolSettingsListGroupBySchema,\n ToolSettingsComponentViewSchema,\n ToolSettingsListMappingSchema,\n ToolSettingsActionDataSourceSchema,\n PanelDefinitionSchema,\n StatusCardDefinitionSchema,\n PanelViewSchema,\n PanelComponentViewSchema,\n PanelUnknownViewSchema,\n PanelActionDataSourceSchema,\n ProviderDefinitionSchema,\n ProviderConfigViewSchema,\n ToolDefinitionSchema,\n CommandDefinitionSchema,\n PromptContributionSchema,\n PromptSectionSchema,\n type ExtensionContributions,\n type LocalizedString,\n type ToolSettingsViewDefinition,\n type ToolSettingsView,\n type ToolSettingsListView,\n type ToolSettingsListGroupBy,\n type ToolSettingsComponentView,\n type ToolSettingsListMapping,\n type ToolSettingsActionDataSource,\n type PanelDefinition,\n type StatusCardDefinition,\n type PanelView,\n type PanelComponentView,\n type PanelUnknownView,\n type PanelActionDataSource,\n type ProviderDefinition,\n type ProviderConfigView,\n type ToolDefinition,\n type CommandDefinition,\n type PromptContribution,\n type PromptSection,\n} from './contributions.schema.js'\n\n// Component schemas\nexport {\n ExtensionComponentDataSchema,\n ExtensionComponentStyleSchema,\n ExtensionActionCallSchema,\n ExtensionActionRefSchema,\n ExtensionComponentIteratorSchema,\n ExtensionComponentChildrenSchema,\n ExtensionDataSourceSchema,\n AllowedCSSPropertySchema,\n IconButtonTypeSchema,\n PillVariantSchema,\n PanelActionSchema,\n HeaderPropsSchema,\n LabelPropsSchema,\n ClockPropsSchema,\n ParagraphPropsSchema,\n ButtonPropsSchema,\n TextInputPropsSchema,\n DateTimeInputPropsSchema,\n SelectPropsSchema,\n IconPickerPropsSchema,\n VerticalStackPropsSchema,\n HorizontalStackPropsSchema,\n GridPropsSchema,\n DividerPropsSchema,\n IconPropsSchema,\n IconButtonPropsSchema,\n PanelPropsSchema,\n TogglePropsSchema,\n CollapsiblePropsSchema,\n FrameVariantSchema,\n FramePropsSchema,\n TextPreviewPropsSchema,\n ListPropsSchema,\n PillPropsSchema,\n CheckboxPropsSchema,\n MarkdownPropsSchema,\n ModalPropsSchema,\n ConditionalGroupPropsSchema,\n WeatherConditionSchema,\n WeatherWindSchema,\n WeatherNowPropsSchema,\n WeatherForecastStepSchema,\n WeatherForecastPropsSchema,\n ChartKindSchema,\n ChartSeriesSchema,\n ChartPropsSchema,\n StatTrendSchema,\n StatTilePropsSchema,\n ProgressShapeSchema,\n ProgressColorSchema,\n ProgressBarPropsSchema,\n KeyValueRowSchema,\n KeyValueListPropsSchema,\n TimelineVariantSchema,\n TimelineEntrySchema,\n TimelinePropsSchema,\n NoteVariantSchema,\n NotePropsSchema,\n CalendarEventStatusSchema,\n CalendarEventPropsSchema,\n type ExtensionComponentData,\n type ExtensionComponentStyle,\n type ExtensionActionCall,\n type ExtensionActionRef,\n type ExtensionComponentIterator,\n type ExtensionComponentChildren,\n type ExtensionDataSource,\n type AllowedCSSProperty,\n type IconButtonType,\n type PillVariant,\n type PanelAction,\n type HeaderProps,\n type LabelProps,\n type ClockProps,\n type ParagraphProps,\n type ButtonProps,\n type TextInputProps,\n type DateTimeInputProps,\n type SelectProps,\n type IconPickerProps,\n type VerticalStackProps,\n type HorizontalStackProps,\n type GridProps,\n type DividerProps,\n type IconProps,\n type IconButtonProps,\n type PanelProps,\n type ToggleProps,\n type CollapsibleProps,\n type FrameVariant,\n type FrameProps,\n type TextPreviewProps,\n type ListProps,\n type PillProps,\n type CheckboxProps,\n type MarkdownProps,\n type ModalProps,\n type ConditionalGroupProps,\n} from './components.schema.js'\n\n// Chat card profile - the subset of the DSL a tool may put in a conversation\nexport {\n ChatCardSchema,\n ChatCardComponentSchema,\n CHAT_CARD_COMPONENTS,\n CHAT_CARD_PROPS,\n validateChatCard,\n describeChatCardProfile,\n type ChatCardComponent,\n type ChatCardValidation,\n} from './card.schema.js'\n\n","/**\n * Manifest Schema\n *\n * Zod schema for extension manifest files (manifest.json).\n * This is the main schema that combines all sub-schemas.\n */\n\nimport { z } from 'zod'\nimport { PermissionSchema } from './permissions.schema.js'\nimport { ExtensionContributionsSchema } from './contributions.schema.js'\n\n/**\n * Platform schema\n */\nexport const PlatformSchema = z\n .enum(['web', 'electron', 'tui'])\n .describe('Supported platform')\n\n/**\n * Author schema\n */\nexport const AuthorSchema = z\n .object({\n name: z.string().min(1).describe('Author name'),\n url: z.string().url().optional().describe('Author URL'),\n })\n .describe('Author information')\n\n/**\n * Engines schema\n */\nexport const EnginesSchema = z\n .object({\n stina: z.string().describe('Minimum Stina version required'),\n })\n .describe('Engine requirements')\n\n/**\n * Extension manifest schema\n */\nexport const ExtensionManifestSchema = z\n .object({\n id: z\n .string()\n .regex(/^[a-z0-9-]+$/, 'ID must be lowercase alphanumeric with hyphens')\n .describe('Unique identifier (e.g., \"ollama-provider\")'),\n name: z.string().min(1).describe('Human-readable name'),\n version: z\n .string()\n .regex(/^\\d+\\.\\d+\\.\\d+/, 'Must be semver format (e.g., \"1.0.0\")')\n .describe('Version string (semver)'),\n description: z.string().min(1).describe('Short description'),\n // Optional icon (Hugeicons name) used as the default icon for proactive\n // conversation list entries this extension triggers. Kept optional so the\n // field is preserved (not stripped) when a manifest is parsed at load time.\n icon: z.string().optional().describe('Icon (Hugeicons name) representing the extension'),\n author: AuthorSchema.describe('Author information'),\n repository: z.string().url().optional().describe('Repository URL'),\n license: z.string().optional().describe('License identifier'),\n engines: EnginesSchema.optional().describe('Minimum Stina version required'),\n platforms: z.array(PlatformSchema).optional().describe('Supported platforms'),\n main: z.string().describe('Entry point file (relative to extension root)'),\n permissions: z.array(PermissionSchema).describe('Required permissions'),\n contributes: ExtensionContributionsSchema.optional().describe('What the extension contributes'),\n })\n .describe('Extension manifest format')\n\n// =============================================================================\n// Type Exports\n// =============================================================================\n\nexport type Platform = z.infer<typeof PlatformSchema>\nexport type Author = z.infer<typeof AuthorSchema>\nexport type Engines = z.infer<typeof EnginesSchema>\nexport type ExtensionManifest = z.infer<typeof ExtensionManifestSchema>\n","/**\n * Permission Schema\n *\n * Zod schema for extension permission strings.\n * Generates both TypeScript types and JSON Schema.\n */\n\nimport { z } from 'zod'\n\n/**\n * Valid exact permission values\n */\nexport const VALID_PERMISSIONS = [\n 'network:*',\n 'network:localhost',\n 'storage.collections',\n 'secrets.manage',\n 'user.profile.read',\n 'user.list',\n 'user.location.read',\n 'chat.history.read',\n 'chat.current.read',\n 'chat.message.write',\n 'provider.register',\n 'tools.register',\n 'tools.list',\n 'tools.execute',\n 'actions.register',\n 'settings.register',\n 'commands.register',\n 'panels.register',\n 'statusCards.register',\n 'events.emit',\n 'scheduler.register',\n 'background.workers',\n 'files.read',\n 'files.write',\n 'clipboard.read',\n 'clipboard.write',\n] as const\n\n/**\n * Permission patterns for dynamic permissions (network with host/port)\n */\nexport const PERMISSION_PATTERNS = [\n /^network:localhost:\\d+$/, // network:localhost:11434\n /^network:[a-zA-Z0-9.-]+$/, // network:api.example.com\n /^network:[a-zA-Z0-9.-]+:\\d+$/, // network:api.example.com:8080\n]\n\n/**\n * Network permission schema - matches exact values and patterns\n */\nconst NetworkPermissionSchema = z\n .string()\n .refine(\n (val) => {\n // Check exact matches first\n if (val === 'network:*' || val === 'network:localhost') {\n return true\n }\n // Check dynamic patterns\n return PERMISSION_PATTERNS.some((pattern) => pattern.test(val))\n },\n { message: 'Invalid network permission format' }\n )\n .describe('Network access permission (e.g., \"network:*\", \"network:localhost:11434\")')\n\n/**\n * Storage permission schema\n */\nconst StoragePermissionSchema = z.enum(['storage.collections', 'secrets.manage']).describe('Storage permission')\n\n/**\n * User data permission schema\n */\nconst UserDataPermissionSchema = z\n .enum(['user.profile.read', 'user.list', 'user.location.read', 'chat.history.read', 'chat.current.read'])\n .describe('User data access permission')\n\n/**\n * Capability permission schema\n */\nconst CapabilityPermissionSchema = z\n .enum([\n 'provider.register',\n 'tools.register',\n 'tools.list',\n 'tools.execute',\n 'actions.register',\n 'settings.register',\n 'commands.register',\n 'panels.register',\n 'statusCards.register',\n 'events.emit',\n 'scheduler.register',\n 'chat.message.write',\n 'background.workers',\n ])\n .describe('Capability permission')\n\n/**\n * System permission schema\n */\nconst SystemPermissionSchema = z\n .enum(['files.read', 'files.write', 'clipboard.read', 'clipboard.write'])\n .describe('System permission')\n\n/**\n * Regex pattern for dynamic network permissions (host with optional port)\n * Matches: network:api.example.com, network:localhost:11434, network:api.example.com:8080\n */\nconst NETWORK_PERMISSION_REGEX = /^network:[a-zA-Z0-9.-]+(:\\d+)?$/\n\n/**\n * Combined permission schema - validates against all permission types\n * Uses z.union with z.enum and z.string().regex() for better JSON Schema generation\n */\nexport const PermissionSchema = z\n .union([\n z.enum(VALID_PERMISSIONS),\n z.string().regex(NETWORK_PERMISSION_REGEX, 'Invalid network permission format'),\n ])\n .describe('Extension permission')\n\n/**\n * Check if a permission string is valid\n */\nexport function isValidPermission(permission: string): boolean {\n return PermissionSchema.safeParse(permission).success\n}\n\n// Re-export individual schemas for more specific validation if needed\nexport {\n NetworkPermissionSchema,\n StoragePermissionSchema,\n UserDataPermissionSchema,\n CapabilityPermissionSchema,\n SystemPermissionSchema,\n}\n\n// Type exports\nexport type Permission = z.infer<typeof PermissionSchema>\nexport type NetworkPermission = 'network:*' | `network:localhost` | `network:localhost:${number}` | `network:${string}`\nexport type StoragePermission = z.infer<typeof StoragePermissionSchema>\nexport type UserDataPermission = z.infer<typeof UserDataPermissionSchema>\nexport type CapabilityPermission = z.infer<typeof CapabilityPermissionSchema>\nexport type SystemPermission = z.infer<typeof SystemPermissionSchema>\n","/**\n * Contributions Schema\n *\n * Zod schemas for extension contributions: settings, panels, providers, tools, commands, prompts.\n */\n\nimport { z } from 'zod'\nimport { ExtensionComponentDataSchema } from './components.schema.js'\n\n// =============================================================================\n// Localization\n// =============================================================================\n\n/**\n * Localized string - either a simple string or a map of language codes to strings\n */\nexport const LocalizedStringSchema = z\n .union([z.string(), z.record(z.string())])\n .describe('String or localized string map')\n\n// =============================================================================\n// Tool Settings Views\n// =============================================================================\n\n/**\n * Tool settings list mapping\n */\nexport const ToolSettingsListMappingSchema = z\n .object({\n itemsKey: z.string().describe('Key for items array in tool result data'),\n countKey: z.string().optional().describe('Key for total count'),\n idKey: z.string().describe('Key for item ID'),\n labelKey: z.string().describe('Key for item label'),\n descriptionKey: z.string().optional().describe('Key for item description'),\n secondaryKey: z.string().optional().describe('Key for secondary label'),\n })\n .describe('Mapping from tool list data to UI fields')\n\n/**\n * Action-based data source for tool settings\n */\nexport const ToolSettingsActionDataSourceSchema = z\n .object({\n action: z.string().describe('Action ID to call for fetching data'),\n params: z.record(z.unknown()).optional().describe('Parameters to pass to the action'),\n refreshOn: z.array(z.string()).optional().describe('Event names that trigger refresh'),\n })\n .describe('Action-based data source')\n\n/**\n * Grouping configuration for a list view\n */\nexport const ToolSettingsListGroupBySchema = z\n .object({\n key: z.string().describe('Key in each item used to determine group membership'),\n order: z\n .array(z.string())\n .optional()\n .describe('Explicit ordering of group values; unlisted groups appear afterwards alphabetically'),\n labels: z\n .record(z.string())\n .optional()\n .describe('Human-friendly labels per group value (rendered as section headers)'),\n })\n .describe('List view grouping configuration')\n\n/**\n * List view backed by tools\n */\nexport const ToolSettingsListViewSchema = z\n .object({\n kind: z.literal('list').describe('View kind'),\n listToolId: z.string().describe('Tool ID for listing items'),\n getToolId: z.string().optional().describe('Tool ID for fetching details'),\n upsertToolId: z.string().optional().describe('Tool ID for creating/updating items'),\n deleteToolId: z.string().optional().describe('Tool ID for deleting items'),\n mapping: ToolSettingsListMappingSchema.describe('Mapping from tool data to UI'),\n searchParam: z.string().optional().describe('Param name for search query'),\n limitParam: z.string().optional().describe('Param name for limit'),\n idParam: z.string().optional().describe('Param name for get/delete ID'),\n listParams: z.record(z.unknown()).optional().describe('Static params for list tool'),\n editView: z\n .object({\n content: ExtensionComponentDataSchema.describe('Root component for the create/edit modal'),\n })\n .optional()\n .describe('Component-tree create/edit form bound to $item.<key>'),\n groupBy: ToolSettingsListGroupBySchema.optional().describe(\n 'Optional grouping configuration; when set, items are visually grouped by this field',\n ),\n })\n .describe('List view backed by tools')\n\n/**\n * Component-based tool settings view\n */\nexport const ToolSettingsComponentViewSchema = z\n .object({\n kind: z.literal('component').describe('View kind'),\n data: z.record(ToolSettingsActionDataSourceSchema).optional().describe('Data sources'),\n content: ExtensionComponentDataSchema.describe('Root component to render'),\n })\n .describe('Component-based tool settings view')\n\n/**\n * Tool settings view types\n */\nexport const ToolSettingsViewSchema = z\n .union([ToolSettingsListViewSchema, ToolSettingsComponentViewSchema])\n .describe('Tool settings view')\n\n/**\n * Tool settings view definition\n */\nexport const ToolSettingsViewDefinitionSchema = z\n .object({\n id: z.string().describe('Unique view ID within the extension'),\n title: z.string().describe('Display title'),\n description: z.string().optional().describe('Help text'),\n view: ToolSettingsViewSchema.describe('View configuration'),\n })\n .describe('Tool settings view definition')\n\n// =============================================================================\n// Panels\n// =============================================================================\n\n/**\n * Action-based data source for panels\n */\nexport const PanelActionDataSourceSchema = z\n .object({\n action: z.string().describe('Action ID to call for fetching data'),\n params: z.record(z.unknown()).optional().describe('Parameters to pass to the action'),\n refreshOn: z.array(z.string()).optional().describe('Event names that trigger refresh'),\n })\n .describe('Panel data source')\n\n/**\n * Component-based panel view\n */\nexport const PanelComponentViewSchema = z\n .object({\n kind: z.literal('component').describe('View kind'),\n data: z.record(PanelActionDataSourceSchema).optional().describe('Data sources'),\n content: ExtensionComponentDataSchema.describe('Root component to render'),\n })\n .describe('Component-based panel view')\n\n/**\n * Unknown panel view (for extensibility)\n */\nexport const PanelUnknownViewSchema = z\n .object({\n kind: z.string().describe('View kind'),\n })\n .passthrough()\n .describe('Unknown panel view')\n\n/**\n * Panel view schema\n */\nexport const PanelViewSchema = z\n .union([PanelComponentViewSchema, PanelUnknownViewSchema])\n .describe('Panel view')\n\n/**\n * Panel definition\n */\nexport const PanelDefinitionSchema = z\n .object({\n id: z.string().describe('Unique panel ID within the extension'),\n title: z.string().describe('Display title'),\n icon: z.string().optional().describe('Icon name (from huge-icons)'),\n view: PanelViewSchema.describe('Panel view schema'),\n })\n .describe('Panel definition')\n\n/**\n * A card for the strip above the conversation list.\n *\n * Deliberately the panel's component view rather than a profile of its own: a\n * card and a panel are the same declarative idea at two sizes, and a second\n * vocabulary would be a second thing to keep in step. `size` is what makes it a\n * card, and it is checked rather than suggested because the sidebar is a few\n * hundred pixels wide.\n */\nexport const StatusCardDefinitionSchema = z\n .object({\n id: z.string().describe('Unique card ID within the extension'),\n title: z.string().describe('What it is called where the user picks it'),\n icon: z.string().optional().describe('Icon name (from huge-icons)'),\n size: z\n .enum(['line', 'block'])\n .describe('How much room it may take: one row, or up to three'),\n view: PanelComponentViewSchema.describe('What it draws, and where the data comes from'),\n })\n .describe('Status card definition')\n\n// =============================================================================\n// Providers\n// =============================================================================\n\n/**\n * Component-tree-based provider config view.\n */\nexport const ProviderConfigViewSchema = z\n .object({\n content: ExtensionComponentDataSchema.describe('Root component to render'),\n })\n .describe('Provider configuration view (component tree)')\n\n/**\n * Provider definition\n */\nexport const ProviderDefinitionSchema = z\n .object({\n id: z.string().describe('Provider ID'),\n name: z.string().describe('Display name'),\n description: z.string().optional().describe('Description'),\n suggestedDefaultModel: z.string().optional().describe('Suggested default model'),\n defaultSettings: z.record(z.unknown()).optional().describe('Default settings'),\n configView: ProviderConfigViewSchema.optional().describe('Component-tree configuration view'),\n })\n .describe('Provider definition')\n\n// =============================================================================\n// Tools\n// =============================================================================\n\n/**\n * Tool definition\n */\nexport const ToolDefinitionSchema = z\n .object({\n id: z.string().describe('Tool ID'),\n name: LocalizedStringSchema.describe('Display name'),\n description: LocalizedStringSchema.describe('Description for Stina'),\n parameters: z.record(z.unknown()).optional().describe('Parameter schema (JSON Schema)'),\n requiresConfirmation: z.boolean().optional().describe('Whether this tool requires user confirmation before execution (default: true)'),\n confirmationPrompt: LocalizedStringSchema.optional().describe('Custom confirmation prompt'),\n })\n .describe('Tool definition')\n\n// =============================================================================\n// Commands\n// =============================================================================\n\n/**\n * Command definition\n */\nexport const CommandDefinitionSchema = z\n .object({\n id: z.string().describe('Command ID (e.g., \"weather\" for /weather)'),\n name: z.string().describe('Display name'),\n description: z.string().describe('Description'),\n })\n .describe('Command definition')\n\n// =============================================================================\n// Prompts\n// =============================================================================\n\n/**\n * Prompt section\n */\nexport const PromptSectionSchema = z\n .enum(['system', 'behavior', 'tools'])\n .describe('Prompt section placement')\n\n/**\n * Prompt contribution\n */\nexport const PromptContributionSchema = z\n .object({\n id: z.string().describe('Unique ID within the extension'),\n title: z.string().optional().describe('Optional title for the prompt chunk'),\n section: PromptSectionSchema.optional().describe('Prompt section placement'),\n text: z.string().optional().describe('Plain text prompt content'),\n i18n: z.record(z.string()).optional().describe('Localized prompt content'),\n order: z.number().optional().describe('Ordering hint (lower comes first)'),\n })\n .describe('Prompt contribution')\n\n// =============================================================================\n// Storage\n// =============================================================================\n\n/**\n * Storage collection config schema\n */\nexport const StorageCollectionConfigSchema = z\n .object({\n indexes: z.array(z.string()).optional().describe('Fields to index for fast queries'),\n })\n .describe('Collection configuration')\n\n/**\n * Storage contributions schema\n */\nexport const StorageContributionsSchema = z\n .object({\n collections: z.record(StorageCollectionConfigSchema).describe('Collection definitions'),\n })\n .describe('Storage contributions')\n\n// =============================================================================\n// Extension Contributions\n// =============================================================================\n\n/**\n * Extension contributions\n */\nexport const ExtensionContributionsSchema = z\n .object({\n toolSettings: z.array(ToolSettingsViewDefinitionSchema).optional().describe('Tool settings views'),\n panels: z.array(PanelDefinitionSchema).optional().describe('Right panel contributions'),\n statusCards: z\n .array(StatusCardDefinitionSchema)\n .optional()\n .describe('Cards for the strip above the conversation list'),\n providers: z.array(ProviderDefinitionSchema).optional().describe('AI providers'),\n tools: z.array(ToolDefinitionSchema).optional().describe('Tools for Stina to use'),\n commands: z.array(CommandDefinitionSchema).optional().describe('Slash commands'),\n prompts: z.array(PromptContributionSchema).optional().describe('Prompt contributions'),\n storage: StorageContributionsSchema.optional().describe('Storage collection declarations'),\n })\n .describe('What an extension can contribute to Stina')\n\n// =============================================================================\n// Type Exports\n// =============================================================================\n\nexport type StatusCardDefinition = z.infer<typeof StatusCardDefinitionSchema>\nexport type LocalizedString = z.infer<typeof LocalizedStringSchema>\nexport type ToolSettingsListMapping = z.infer<typeof ToolSettingsListMappingSchema>\nexport type ToolSettingsActionDataSource = z.infer<typeof ToolSettingsActionDataSourceSchema>\nexport type ToolSettingsListView = z.infer<typeof ToolSettingsListViewSchema>\nexport type ToolSettingsListGroupBy = z.infer<typeof ToolSettingsListGroupBySchema>\nexport type ToolSettingsComponentView = z.infer<typeof ToolSettingsComponentViewSchema>\nexport type ToolSettingsView = z.infer<typeof ToolSettingsViewSchema>\nexport type ToolSettingsViewDefinition = z.infer<typeof ToolSettingsViewDefinitionSchema>\nexport type PanelActionDataSource = z.infer<typeof PanelActionDataSourceSchema>\nexport type PanelComponentView = z.infer<typeof PanelComponentViewSchema>\nexport type PanelUnknownView = z.infer<typeof PanelUnknownViewSchema>\nexport type PanelView = z.infer<typeof PanelViewSchema>\nexport type PanelDefinition = z.infer<typeof PanelDefinitionSchema>\nexport type ProviderConfigView = z.infer<typeof ProviderConfigViewSchema>\nexport type ProviderDefinition = z.infer<typeof ProviderDefinitionSchema>\nexport type ToolDefinition = z.infer<typeof ToolDefinitionSchema>\nexport type CommandDefinition = z.infer<typeof CommandDefinitionSchema>\nexport type PromptSection = z.infer<typeof PromptSectionSchema>\nexport type PromptContribution = z.infer<typeof PromptContributionSchema>\nexport type StorageCollectionConfig = z.infer<typeof StorageCollectionConfigSchema>\nexport type StorageContributions = z.infer<typeof StorageContributionsSchema>\nexport type ExtensionContributions = z.infer<typeof ExtensionContributionsSchema>\n","/**\n * Component Schema\n *\n * Zod schemas for extension UI components.\n */\n\nimport { z } from 'zod'\n\n// =============================================================================\n// CSS Properties\n// =============================================================================\n\n/**\n * Allowed CSS property names for extension component styling.\n */\nexport const AllowedCSSPropertySchema = z.enum([\n // Colors\n 'color',\n 'background-color',\n 'background',\n 'border-color',\n // Borders\n 'border',\n 'border-width',\n 'border-style',\n 'border-radius',\n 'border-top',\n 'border-right',\n 'border-bottom',\n 'border-left',\n 'border-top-left-radius',\n 'border-top-right-radius',\n 'border-bottom-left-radius',\n 'border-bottom-right-radius',\n // Spacing\n 'padding',\n 'padding-top',\n 'padding-right',\n 'padding-bottom',\n 'padding-left',\n 'margin',\n 'margin-top',\n 'margin-right',\n 'margin-bottom',\n 'margin-left',\n 'gap',\n 'row-gap',\n 'column-gap',\n // Typography\n 'font-size',\n 'font-weight',\n 'font-style',\n 'text-align',\n 'text-decoration',\n 'line-height',\n 'letter-spacing',\n 'white-space',\n 'word-break',\n 'overflow-wrap',\n // Layout (safe properties)\n 'width',\n 'height',\n 'min-width',\n 'min-height',\n 'max-width',\n 'max-height',\n 'flex',\n 'flex-grow',\n 'flex-shrink',\n 'flex-basis',\n 'flex-wrap',\n 'align-self',\n 'justify-self',\n 'align-items',\n 'justify-content',\n // Visual\n 'opacity',\n 'visibility',\n 'overflow',\n 'overflow-x',\n 'overflow-y',\n 'box-shadow',\n 'outline',\n 'cursor',\n 'border-collapse',\n 'border-spacing',\n])\n\n/**\n * Style object for extension components.\n */\nexport const ExtensionComponentStyleSchema = z\n .record(AllowedCSSPropertySchema, z.string())\n .describe('Safe CSS styles for the component')\n\n// =============================================================================\n// Base Component\n// =============================================================================\n\n/**\n * Base component data schema - allows additional properties\n */\nexport const ExtensionComponentDataSchema: z.ZodType<{\n component: string\n style?: Record<string, string>\n [key: string]: unknown\n}> = z.lazy(() =>\n z\n .object({\n component: z.string().describe('Component type name'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Extension component definition')\n)\n\n// =============================================================================\n// Action References\n// =============================================================================\n\n/**\n * Action call with parameters\n */\nexport const ExtensionActionCallSchema = z\n .object({\n action: z.string().describe('Name of the registered action'),\n params: z.record(z.unknown()).optional().describe('Parameters to pass'),\n })\n .describe('Action call with parameters')\n\n/**\n * Action reference - can be a simple string or full action call\n */\nexport const ExtensionActionRefSchema = z\n .union([z.string(), ExtensionActionCallSchema])\n .describe('Action reference')\n\n// =============================================================================\n// Iterator & Children\n// =============================================================================\n\n/**\n * Iterator for rendering a list of components from data\n */\nexport const ExtensionComponentIteratorSchema = z\n .object({\n each: z.union([z.string(), z.array(z.unknown())]).describe('Data source to iterate over'),\n as: z.string().describe('Variable name for current item in scope'),\n items: z.array(ExtensionComponentDataSchema).describe('Components to render for each item'),\n })\n .describe('Iterator for rendering lists')\n\n/**\n * Children can be either a static array of components or an iterator\n */\nexport const ExtensionComponentChildrenSchema = z\n .union([z.array(ExtensionComponentDataSchema), ExtensionComponentIteratorSchema])\n .describe('Child components or iterator')\n\n// =============================================================================\n// Data Source\n// =============================================================================\n\n/**\n * Data source definition for fetching data via an action\n */\nexport const ExtensionDataSourceSchema = z\n .object({\n action: z.string().describe('Action to call for fetching data'),\n params: z.record(z.unknown()).optional().describe('Parameters to pass to the action'),\n refreshOn: z.array(z.string()).optional().describe('Event names that trigger a refresh'),\n })\n .describe('Data source definition')\n\n// =============================================================================\n// Component Props Schemas\n// =============================================================================\n\nexport const HeaderPropsSchema = z\n .object({\n component: z.literal('Header'),\n level: z.number().min(1).max(6).describe('Heading level (1-6)'),\n title: z.string().describe('Header title'),\n description: z.union([z.string(), z.array(z.string())]).optional().describe('Description text'),\n icon: z.string().optional().describe('Icon name'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Header component')\n\nexport const LabelPropsSchema = z\n .object({\n component: z.literal('Label'),\n text: z.string().describe('Label text'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Label component')\n\nexport const ClockPropsSchema = z\n .object({\n component: z.literal('Clock'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Clock component: the current date and time where the user is')\n\nexport const ParagraphPropsSchema = z\n .object({\n component: z.literal('Paragraph'),\n text: z.string().describe('Paragraph text'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Paragraph component')\n\nexport const ButtonPropsSchema = z\n .object({\n component: z.literal('Button'),\n text: z.string().describe('Button text'),\n type: z.enum(['normal', 'primary', 'danger', 'accent']).optional().describe('Visual style'),\n title: z.string().optional().describe('Tooltip shown on hover'),\n disabled: z.boolean().optional().describe('Disable the button'),\n onClickAction: ExtensionActionRefSchema.describe('Action to call on click'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Button component')\n\nexport const TextInputPropsSchema = z\n .object({\n component: z.literal('TextInput'),\n label: z.string().describe('Input label'),\n placeholder: z.string().optional().describe('Placeholder text'),\n value: z.string().optional().describe('Current value'),\n onChangeAction: ExtensionActionRefSchema.optional().describe('Action to call on change'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('TextInput component')\n\nexport const PasswordInputPropsSchema = z\n .object({\n component: z.literal('PasswordInput'),\n label: z.string().describe('Input label'),\n placeholder: z.string().optional().describe('Placeholder text'),\n value: z.string().optional().describe('Current value'),\n onChangeAction: ExtensionActionRefSchema.optional().describe('Action to call on change'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Password input component (text is masked)')\n\nexport const NumberInputPropsSchema = z\n .object({\n component: z.literal('NumberInput'),\n label: z.string().describe('Input label'),\n placeholder: z.string().optional().describe('Placeholder text'),\n value: z.union([z.string(), z.number()]).optional().describe('Current value'),\n min: z.number().optional().describe('Minimum value'),\n max: z.number().optional().describe('Maximum value'),\n step: z.number().optional().describe('Step'),\n onChangeAction: ExtensionActionRefSchema.optional().describe('Action to call on change'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Numeric input component')\n\nexport const TextAreaPropsSchema = z\n .object({\n component: z.literal('TextArea'),\n label: z.string().describe('Input label'),\n placeholder: z.string().optional().describe('Placeholder text'),\n value: z.string().optional().describe('Current value'),\n rows: z.number().int().positive().optional().describe('Number of visible text rows'),\n onChangeAction: ExtensionActionRefSchema.optional().describe('Action to call on change'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('TextArea component for multi-line text input')\n\nexport const DateTimeInputPropsSchema = z\n .object({\n component: z.literal('DateTimeInput'),\n label: z.string().describe('Input label'),\n value: z.string().optional().describe('Current value'),\n onChangeAction: ExtensionActionRefSchema.optional().describe('Action to call on change'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('DateTimeInput component')\n\nexport const SelectPropsSchema = z\n .object({\n component: z.literal('Select'),\n label: z.string().describe('Select label'),\n options: z.array(z.object({ label: z.string(), value: z.string() })).describe('Available options'),\n selectedValue: z.string().optional().describe('Currently selected value'),\n onChangeAction: ExtensionActionRefSchema.optional().describe('Action to call on change'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Select component')\n\nexport const IconPickerPropsSchema = z\n .object({\n component: z.literal('IconPicker'),\n label: z.string().optional().describe('Picker label'),\n value: z.string().optional().describe('Currently selected icon name'),\n onChangeAction: ExtensionActionRefSchema.optional().describe('Action to call on change'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('IconPicker component')\n\nexport const VerticalStackPropsSchema = z\n .object({\n component: z.literal('VerticalStack'),\n gap: z.number().optional().describe('Gap between children'),\n children: ExtensionComponentChildrenSchema.describe('Child components'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('VerticalStack layout component')\n\nexport const HorizontalStackPropsSchema = z\n .object({\n component: z.literal('HorizontalStack'),\n gap: z.number().optional().describe('Gap between children'),\n children: ExtensionComponentChildrenSchema.describe('Child components'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('HorizontalStack layout component')\n\nexport const GridPropsSchema = z\n .object({\n component: z.literal('Grid'),\n columns: z.number().describe('Number of columns'),\n gap: z.number().optional().describe('Gap between items'),\n children: ExtensionComponentChildrenSchema.describe('Child components'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Grid layout component')\n\nexport const DividerPropsSchema = z\n .object({\n component: z.literal('Divider'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Divider component')\n\nexport const IconPropsSchema = z\n .object({\n component: z.literal('Icon'),\n name: z.string().describe('Icon name'),\n title: z.string().optional().describe('Icon title'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Icon component')\n\nexport const IconButtonTypeSchema = z\n .enum(['normal', 'primary', 'danger', 'accent'])\n .describe('Button type')\n\nexport const IconButtonPropsSchema = z\n .object({\n component: z.literal('IconButton'),\n icon: z.string().describe('Icon name'),\n tooltip: z.string().describe('Tooltip text'),\n active: z.boolean().optional().describe('Whether the button is active'),\n disabled: z.boolean().optional().describe('Whether the button is disabled'),\n type: IconButtonTypeSchema.optional().describe('Button style type'),\n onClickAction: ExtensionActionRefSchema.describe('Action to call on click'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('IconButton component')\n\nexport const PanelActionSchema = z\n .object({\n icon: z.string().describe('Icon name'),\n tooltip: z.string().describe('Tooltip text'),\n action: ExtensionActionRefSchema.describe('Action to call'),\n type: IconButtonTypeSchema.optional().describe('Button style type'),\n })\n .describe('Panel action button')\n\nexport const PanelPropsSchema = z\n .object({\n component: z.literal('Panel'),\n title: z.string().describe('Panel title'),\n description: z.union([z.string(), z.array(z.string())]).optional().describe('Description text'),\n icon: z.string().optional().describe('Icon name'),\n actions: z.array(PanelActionSchema).optional().describe('Action buttons'),\n content: ExtensionComponentDataSchema.optional().describe('Panel content'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Panel component')\n\nexport const TogglePropsSchema = z\n .object({\n component: z.literal('Toggle'),\n label: z.string().optional().describe('Toggle label'),\n description: z.string().optional().describe('Description text'),\n checked: z.boolean().optional().describe('Whether the toggle is checked'),\n disabled: z.boolean().optional().describe('Whether the toggle is disabled'),\n onChangeAction: ExtensionActionRefSchema.optional().describe('Action to call on change'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Toggle component')\n\nexport const CollapsiblePropsSchema = z\n .object({\n component: z.literal('Collapsible'),\n title: z.string().describe('Title displayed in the header'),\n description: z.union([z.string(), z.array(z.string())]).optional().describe('Description text'),\n icon: z.string().optional().describe('Icon name'),\n defaultExpanded: z.boolean().optional().describe('Whether expanded by default'),\n content: ExtensionComponentDataSchema.optional().describe('Content when expanded'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Collapsible component')\n\nexport const PillVariantSchema = z\n .enum(['default', 'primary', 'success', 'warning', 'danger', 'accent'])\n .describe('Pill color variant')\n\nexport const PillPropsSchema = z\n .object({\n component: z.literal('Pill'),\n text: z.string().describe('Pill text'),\n icon: z.string().optional().describe('Icon name'),\n variant: PillVariantSchema.optional().describe('Color variant'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Pill component')\n\nexport const CheckboxPropsSchema = z\n .object({\n component: z.literal('Checkbox'),\n label: z.string().describe('Checkbox label'),\n checked: z.boolean().optional().describe('Whether the checkbox is checked'),\n disabled: z.boolean().optional().describe('Whether the checkbox is disabled'),\n strikethrough: z.boolean().optional().describe('Strike through label when checked'),\n onChangeAction: ExtensionActionRefSchema.optional().describe('Action to call on change'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Checkbox component')\n\nexport const MarkdownPropsSchema = z\n .object({\n component: z.literal('Markdown'),\n content: z.string().describe('Markdown content'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Markdown component')\n\nexport const TextPreviewPropsSchema = z\n .object({\n component: z.literal('TextPreview'),\n content: z.string().describe('Markdown content'),\n maxLines: z.number().optional().describe('Max visible lines before truncating (default 5)'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('TextPreview component')\n\nexport const ModalPropsSchema = z\n .object({\n component: z.literal('Modal'),\n title: z.string().describe('Modal title'),\n open: z.boolean().optional().describe('Whether the modal is open'),\n maxWidth: z.string().optional().describe('Max width of the modal'),\n body: ExtensionComponentDataSchema.optional().describe('Modal body content'),\n footer: ExtensionComponentDataSchema.optional().describe('Modal footer content'),\n onCloseAction: ExtensionActionRefSchema.optional().describe('Action to call on close'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Modal component')\n\nexport const ConditionalGroupPropsSchema = z\n .object({\n component: z.literal('ConditionalGroup'),\n condition: z.string().describe('Condition expression to evaluate'),\n children: ExtensionComponentChildrenSchema.describe('Children to render when condition is true'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('ConditionalGroup component')\n\nexport const FrameVariantSchema = z\n .enum(['border', 'solid'])\n .describe('Frame visual variant')\n\nexport const FramePropsSchema = z\n .object({\n component: z.literal('Frame'),\n title: z.union([z.string(), ExtensionComponentChildrenSchema]).optional().describe('Optional title (string or components)'),\n icon: z.string().optional().describe('Icon name'),\n collapsible: z.boolean().optional().describe('Whether content can be toggled'),\n defaultExpanded: z.boolean().optional().describe('Whether expanded by default'),\n variant: FrameVariantSchema.optional().describe('Visual variant'),\n children: ExtensionComponentChildrenSchema.describe('Child components'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Frame container component')\n\nexport const ListPropsSchema = z\n .object({\n component: z.literal('List'),\n children: ExtensionComponentChildrenSchema.describe('Child components rendered as list items'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('List component')\n\n// =============================================================================\n// Purpose-built Display Components\n// =============================================================================\n\n/**\n * The skies the weather components know how to draw. Closed on purpose: the\n * icon is chosen from this list, and a string outside it has no picture.\n */\nexport const WeatherConditionSchema = z\n .enum([\n 'clear',\n 'partly-cloudy',\n 'cloudy',\n 'overcast',\n 'fog',\n 'light-rain',\n 'rain',\n 'heavy-rain',\n 'sleet',\n 'light-snow',\n 'snow',\n 'heavy-snow',\n 'thunderstorm',\n 'hail',\n 'windy',\n ])\n .describe('Weather condition')\n\nexport const WeatherWindSchema = z\n .object({\n speed: z.number().describe('Sustained wind speed'),\n unit: z.string().optional().describe('Unit written after the speed. Defaults to m/s'),\n direction: z.string().optional().describe('Compass direction, in the caller\\'s own words'),\n gust: z.number().optional().describe('Gust speed, in the same unit'),\n })\n .passthrough()\n .describe('Wind reading')\n\nexport const WeatherNowPropsSchema = z\n .object({\n component: z.literal('WeatherNow'),\n place: z.string().describe('Where the reading is from'),\n condition: WeatherConditionSchema,\n conditionLabel: z.string().optional().describe('The condition in the user\\'s own language'),\n temperature: z.number().describe('Current temperature'),\n feelsLike: z.number().optional().describe('Apparent temperature'),\n unit: z.string().optional().describe('Written after every temperature. Defaults to °'),\n wind: WeatherWindSchema.optional(),\n night: z.boolean().optional().describe('Draw the night variant of the icon'),\n summary: z.string().optional().describe('One line of context under the numbers'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Current weather component')\n\nexport const WeatherForecastStepSchema = z\n .object({\n label: z.string().describe('Short step label, e.g. 14 or Tors'),\n condition: WeatherConditionSchema,\n conditionLabel: z.string().optional(),\n high: z.number().describe('The warmer temperature, or the only one'),\n low: z.number().optional().describe('The colder temperature'),\n night: z.boolean().optional(),\n precipitation: z.number().min(0).max(100).optional().describe('Chance of precipitation, 0-100'),\n current: z.boolean().optional().describe('The step the reader is at; drawn larger'),\n })\n .passthrough()\n .describe('One forecast step')\n\nexport const WeatherForecastPropsSchema = z\n .object({\n component: z.literal('WeatherForecast'),\n title: z.string().optional().describe('Heading above the row'),\n icon: z.string().optional().describe('Icon shown to the left of the title'),\n unit: z.string().optional().describe('Written after every temperature. Defaults to °'),\n steps: z.array(WeatherForecastStepSchema).min(1).describe('Steps, hourly or daily'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Weather forecast component')\n\nexport const ChartKindSchema = z.enum(['line', 'bar', 'area']).describe('How the chart draws')\n\nexport const ChartSeriesSchema = z\n .object({\n name: z.string().optional().describe('Named in the legend'),\n points: z\n .array(z.number().nullable())\n .describe('One value per label. null is a gap, drawn as one'),\n })\n .passthrough()\n .describe('One chart series')\n\n/**\n * Eight series is the ceiling because the host palette has eight slots, assigned\n * in a fixed order so a series keeps its colour wherever it appears. A ninth\n * would need a generated hue, and a generated hue is how a chart stops being\n * readable to colour-blind viewers.\n */\nexport const ChartPropsSchema = z\n .object({\n component: z.literal('Chart'),\n chart: ChartKindSchema.optional().describe('Defaults to line'),\n series: z.array(ChartSeriesSchema).min(1).max(8).describe('At most eight series'),\n labels: z.array(z.string()).optional().describe('One per point, along the horizontal axis'),\n title: z.string().optional().describe('Heading above the plot'),\n icon: z.string().optional().describe('Icon shown to the left of the title'),\n unit: z.string().optional().describe('Written after every value'),\n zeroBaseline: z.boolean().optional().describe('Force the value axis to include zero'),\n height: z.number().min(4).max(24).optional().describe('Plot height in rem. Defaults to 9'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Chart component')\n\nexport const StatTrendSchema = z.enum(['up', 'down', 'flat']).describe('Direction of change')\n\nexport const StatTilePropsSchema = z\n .object({\n component: z.literal('StatTile'),\n label: z.string().describe('What the number is'),\n value: z.union([z.string(), z.number()]).describe('The number itself'),\n unit: z.string().optional().describe('Written after the value in smaller type'),\n caption: z.string().optional().describe('One quiet line under the number'),\n icon: z.string().optional().describe('Icon name'),\n trend: StatTrendSchema.optional(),\n trendLabel: z.string().optional().describe('The change in words'),\n trendIsGood: z.boolean().optional().describe('Whether up is the good direction. Defaults to true'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Single-number stat tile component')\n\nexport const ProgressShapeSchema = z\n .enum(['bar', 'circle'])\n .describe('Drawn as a rail or as a ring')\n\nexport const ProgressColorSchema = z\n .enum(['accent', 'success', 'warning', 'danger', 'info', 'neutral'])\n .describe('One of the theme colours')\n\nexport const ProgressBarPropsSchema = z\n .object({\n component: z.literal('ProgressBar'),\n label: z.string().describe('What is being measured'),\n value: z.number().describe('Where the reading sits. Clamped to the range'),\n min: z.number().optional().describe('Bottom of the range. Defaults to 0'),\n max: z.number().optional().describe('Top of the range. Defaults to 100'),\n shape: ProgressShapeSchema.optional().describe('Defaults to bar'),\n color: ProgressColorSchema.optional().describe('Defaults to accent'),\n unit: z.string().optional().describe('Written after the value'),\n valueLabel: z.string().optional().describe('The readout in words, replacing value and unit'),\n caption: z.string().optional().describe('One quiet line under the reading'),\n icon: z.string().optional().describe('Icon name'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Progress component')\n\nexport const KeyValueRowSchema = z\n .object({\n label: z.string(),\n value: z.string(),\n icon: z.string().optional().describe('Icon name'),\n })\n .passthrough()\n .describe('One key/value row')\n\nexport const KeyValueListPropsSchema = z\n .object({\n component: z.literal('KeyValueList'),\n rows: z.array(KeyValueRowSchema).min(1).describe('Facts in two aligned columns'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Key/value list component')\n\nexport const TimelineVariantSchema = z\n .enum(['default', 'accent', 'success', 'warning', 'danger'])\n .describe('How much a timeline entry stands out')\n\nexport const TimelineEntrySchema = z\n .object({\n time: z.string().describe('When it happens, worded as it should be read'),\n title: z.string(),\n description: z.string().optional().describe('A line under the title'),\n icon: z.string().optional().describe('Icon name'),\n duration: z.string().optional().describe('How long it lasts, in words'),\n badge: z.string().optional().describe('Trailing badge'),\n current: z.boolean().optional().describe('The entry the reader is at'),\n past: z.boolean().optional().describe('Already behind us; drawn recessive'),\n variant: TimelineVariantSchema.optional(),\n })\n .passthrough()\n .describe('One timeline entry')\n\nexport const TimelinePropsSchema = z\n .object({\n component: z.literal('Timeline'),\n title: z.string().optional().describe('Heading above the rail'),\n icon: z.string().optional().describe('Icon shown to the left of the title'),\n entries: z.array(TimelineEntrySchema).min(1).describe('Entries, in the order they happen'),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Vertical timeline component')\n\nexport const NoteVariantSchema = z\n .enum(['default', 'accent', 'success', 'warning', 'danger'])\n .describe('How much a note stands out')\n\nexport const NotePropsSchema = z\n .object({\n component: z.literal('Note'),\n title: z.string().optional(),\n icon: z.string().optional().describe('Icon shown to the left of the title'),\n badge: z.string().optional().describe('Trailing badge next to the title'),\n content: z.string().describe('The body, as markdown'),\n footer: z.string().optional().describe('One quiet line at the bottom'),\n variant: NoteVariantSchema.optional(),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Titled block of prose component')\n\nexport const CalendarEventStatusSchema = z\n .enum(['confirmed', 'tentative', 'cancelled'])\n .describe('Whether an event is going ahead')\n\nexport const CalendarEventPropsSchema = z\n .object({\n component: z.literal('CalendarEvent'),\n title: z.string(),\n start: z.string().describe('ISO 8601 with an offset'),\n end: z.string().optional().describe('ISO 8601 with an offset'),\n allDay: z.boolean().optional(),\n location: z.string().optional(),\n organizer: z.string().optional(),\n attendees: z.array(z.string()).optional(),\n calendar: z.string().optional().describe('Which calendar it sits in; shown as a badge'),\n status: CalendarEventStatusSchema.optional(),\n recurrence: z.string().optional().describe('How it repeats, in words'),\n notes: z.string().optional(),\n style: ExtensionComponentStyleSchema.optional(),\n })\n .passthrough()\n .describe('Single calendar event component')\n\n// =============================================================================\n// Type Exports\n// =============================================================================\n\nexport type AllowedCSSProperty = z.infer<typeof AllowedCSSPropertySchema>\nexport type ExtensionComponentStyle = z.infer<typeof ExtensionComponentStyleSchema>\nexport type ExtensionComponentData = z.infer<typeof ExtensionComponentDataSchema>\nexport type ExtensionActionCall = z.infer<typeof ExtensionActionCallSchema>\nexport type ExtensionActionRef = z.infer<typeof ExtensionActionRefSchema>\nexport type ExtensionComponentIterator = z.infer<typeof ExtensionComponentIteratorSchema>\nexport type ExtensionComponentChildren = z.infer<typeof ExtensionComponentChildrenSchema>\nexport type ExtensionDataSource = z.infer<typeof ExtensionDataSourceSchema>\nexport type IconButtonType = z.infer<typeof IconButtonTypeSchema>\nexport type PillVariant = z.infer<typeof PillVariantSchema>\nexport type PanelAction = z.infer<typeof PanelActionSchema>\nexport type HeaderProps = z.infer<typeof HeaderPropsSchema>\nexport type LabelProps = z.infer<typeof LabelPropsSchema>\nexport type ParagraphProps = z.infer<typeof ParagraphPropsSchema>\nexport type ButtonProps = z.infer<typeof ButtonPropsSchema>\nexport type TextInputProps = z.infer<typeof TextInputPropsSchema>\nexport type PasswordInputProps = z.infer<typeof PasswordInputPropsSchema>\nexport type NumberInputProps = z.infer<typeof NumberInputPropsSchema>\nexport type TextAreaProps = z.infer<typeof TextAreaPropsSchema>\nexport type DateTimeInputProps = z.infer<typeof DateTimeInputPropsSchema>\nexport type SelectProps = z.infer<typeof SelectPropsSchema>\nexport type IconPickerProps = z.infer<typeof IconPickerPropsSchema>\nexport type VerticalStackProps = z.infer<typeof VerticalStackPropsSchema>\nexport type HorizontalStackProps = z.infer<typeof HorizontalStackPropsSchema>\nexport type GridProps = z.infer<typeof GridPropsSchema>\nexport type DividerProps = z.infer<typeof DividerPropsSchema>\nexport type IconProps = z.infer<typeof IconPropsSchema>\nexport type IconButtonProps = z.infer<typeof IconButtonPropsSchema>\nexport type PanelProps = z.infer<typeof PanelPropsSchema>\nexport type ToggleProps = z.infer<typeof TogglePropsSchema>\nexport type CollapsibleProps = z.infer<typeof CollapsiblePropsSchema>\nexport type PillProps = z.infer<typeof PillPropsSchema>\nexport type CheckboxProps = z.infer<typeof CheckboxPropsSchema>\nexport type MarkdownProps = z.infer<typeof MarkdownPropsSchema>\nexport type TextPreviewProps = z.infer<typeof TextPreviewPropsSchema>\nexport type ModalProps = z.infer<typeof ModalPropsSchema>\nexport type ConditionalGroupProps = z.infer<typeof ConditionalGroupPropsSchema>\nexport type FrameVariant = z.infer<typeof FrameVariantSchema>\nexport type FrameProps = z.infer<typeof FramePropsSchema>\nexport type ListProps = z.infer<typeof ListPropsSchema>\nexport type WeatherCondition = z.infer<typeof WeatherConditionSchema>\nexport type WeatherWind = z.infer<typeof WeatherWindSchema>\nexport type WeatherNowProps = z.infer<typeof WeatherNowPropsSchema>\nexport type WeatherForecastStep = z.infer<typeof WeatherForecastStepSchema>\nexport type WeatherForecastProps = z.infer<typeof WeatherForecastPropsSchema>\nexport type ChartKind = z.infer<typeof ChartKindSchema>\nexport type ChartSeries = z.infer<typeof ChartSeriesSchema>\nexport type ChartProps = z.infer<typeof ChartPropsSchema>\nexport type StatTrend = z.infer<typeof StatTrendSchema>\nexport type StatTileProps = z.infer<typeof StatTilePropsSchema>\nexport type ClockProps = z.infer<typeof ClockPropsSchema>\nexport type ProgressShape = z.infer<typeof ProgressShapeSchema>\nexport type ProgressColor = z.infer<typeof ProgressColorSchema>\nexport type ProgressBarProps = z.infer<typeof ProgressBarPropsSchema>\nexport type KeyValueRow = z.infer<typeof KeyValueRowSchema>\nexport type KeyValueListProps = z.infer<typeof KeyValueListPropsSchema>\nexport type TimelineVariant = z.infer<typeof TimelineVariantSchema>\nexport type TimelineEntry = z.infer<typeof TimelineEntrySchema>\nexport type TimelineProps = z.infer<typeof TimelinePropsSchema>\nexport type NoteVariant = z.infer<typeof NoteVariantSchema>\nexport type NoteProps = z.infer<typeof NotePropsSchema>\nexport type CalendarEventStatus = z.infer<typeof CalendarEventStatusSchema>\nexport type CalendarEventProps = z.infer<typeof CalendarEventPropsSchema>\n","/**\n * Chat Card Schema\n *\n * The subset of the component DSL that may appear *in a conversation*, as\n * opposed to in a panel or a settings form.\n *\n * A panel is a place the user went to; a card arrives unbidden in the middle of\n * a reply, and it is composed by a language model rather than by an extension\n * author who tested it. So the card profile is narrower than the DSL in three\n * ways, and each one is a rule about what a card *is*:\n *\n * - **No interaction.** No buttons, no inputs, no modals. A card shows; it does\n * not offer. Everything the user might want to do next, they ask for in\n * words — which is the whole premise of talking to Stina rather than\n * operating her.\n * - **No data binding.** Panels pull from actions and iterate over the result;\n * a card is a finished value, written out in full. There is no scope for a\n * `$reference` to resolve against, so one is rejected rather than silently\n * rendered as nothing — see `findScopeReference`.\n * - **Strict props.** The panel schemas pass unknown properties through, on the\n * theory that a newer extension may know something this build does not. Cards\n * have no such future to protect: an unknown property here is a model that\n * invented one, and saying so is more useful than dropping it.\n *\n * The check runs where the card enters the system — in `core_show_card`, and in\n * anything else that accepts a card from a tool — so a rejection comes back to\n * the model as an error it can act on, in the same turn.\n */\n\nimport { z } from 'zod'\nimport { ExtensionComponentStyleSchema } from './components.schema.js'\nimport {\n WeatherConditionSchema,\n WeatherWindSchema,\n ChartKindSchema,\n StatTrendSchema,\n ProgressShapeSchema,\n ProgressColorSchema,\n TimelineVariantSchema,\n NoteVariantSchema,\n CalendarEventStatusSchema,\n PillVariantSchema,\n FrameVariantSchema,\n} from './components.schema.js'\n\n/** A card component and, recursively, everything it may contain. */\nexport type ChatCardComponent = {\n component: string\n style?: Record<string, string>\n [key: string]: unknown\n}\n\nconst style = ExtensionComponentStyleSchema.optional()\n\n/**\n * Children of a card component.\n *\n * An array only. The iterator form (`{ each, as, items }`) exists to expand a\n * data source, and a card has none — the caller writes the rows out.\n */\nconst children: z.ZodType<ChatCardComponent[]> = z.lazy(() =>\n z.array(ChatCardComponentSchema).max(40)\n)\n\n// -----------------------------------------------------------------------------\n// Layout\n// -----------------------------------------------------------------------------\n\n/*\n * None of the three layouts takes a `gap`.\n *\n * A panel's author sets one and looks at the result; a model writes a number\n * into a field described as `gap?: number` and never sees what it did. The unit\n * is rem, which is not a thing anyone guesses — the first card written against\n * this profile asked for `gap: 14`, meaning pixels, and the second asked for the\n * 8 the validator allowed, which is 128 of them. Both were reasonable readings\n * of a number with no unit on it.\n *\n * So the spacing is the profile's, not the caller's: `applyCardSpacing` stamps\n * the same rhythm onto every stack and grid after validation. One less field to\n * describe, and every card in the conversation is spaced alike.\n */\n\nconst VerticalStackCardSchema = z\n .object({\n component: z.literal('VerticalStack'),\n children,\n style,\n })\n .strict()\n\nconst HorizontalStackCardSchema = z\n .object({\n component: z.literal('HorizontalStack'),\n children,\n style,\n })\n .strict()\n\nconst GridCardSchema = z\n .object({\n component: z.literal('Grid'),\n columns: z.number().min(1).max(6),\n children,\n style,\n })\n .strict()\n\nconst FrameCardSchema = z\n .object({\n component: z.literal('Frame'),\n // Only the string form: the components form of a title is for panels that\n // put controls in their header, which a card has no business doing.\n title: z.string().optional(),\n collapsible: z.boolean().optional(),\n defaultExpanded: z.boolean().optional(),\n variant: FrameVariantSchema.optional(),\n children,\n style,\n })\n .strict()\n\nconst ListCardSchema = z.object({ component: z.literal('List'), children, style }).strict()\n\nconst DividerCardSchema = z.object({ component: z.literal('Divider'), style }).strict()\n\n// -----------------------------------------------------------------------------\n// Text\n// -----------------------------------------------------------------------------\n\nconst HeaderCardSchema = z\n .object({\n component: z.literal('Header'),\n level: z.number().min(1).max(6),\n title: z.string(),\n description: z.union([z.string(), z.array(z.string())]).optional(),\n icon: z.string().optional(),\n style,\n })\n .strict()\n\nconst LabelCardSchema = z\n .object({ component: z.literal('Label'), text: z.string(), style })\n .strict()\n\nconst ParagraphCardSchema = z\n .object({ component: z.literal('Paragraph'), text: z.string(), style })\n .strict()\n\nconst MarkdownCardSchema = z\n .object({ component: z.literal('Markdown'), content: z.string(), style })\n .strict()\n\n// -----------------------------------------------------------------------------\n// Visual\n// -----------------------------------------------------------------------------\n\nconst IconCardSchema = z\n .object({\n component: z.literal('Icon'),\n name: z.string(),\n title: z.string().optional(),\n style,\n })\n .strict()\n\nconst PillCardSchema = z\n .object({\n component: z.literal('Pill'),\n text: z.string(),\n icon: z.string().optional(),\n variant: PillVariantSchema.optional(),\n style,\n })\n .strict()\n\n// -----------------------------------------------------------------------------\n// Purpose-built\n// -----------------------------------------------------------------------------\n\nconst WeatherNowCardSchema = z\n .object({\n component: z.literal('WeatherNow'),\n place: z.string(),\n condition: WeatherConditionSchema,\n conditionLabel: z.string().optional(),\n temperature: z.number(),\n feelsLike: z.number().optional(),\n unit: z.string().optional(),\n wind: WeatherWindSchema.optional(),\n night: z.boolean().optional(),\n summary: z.string().optional(),\n style,\n })\n .strict()\n\nconst WeatherForecastCardSchema = z\n .object({\n component: z.literal('WeatherForecast'),\n title: z.string().optional(),\n icon: z.string().optional(),\n unit: z.string().optional(),\n steps: z\n .array(\n z\n .object({\n label: z.string(),\n condition: WeatherConditionSchema,\n conditionLabel: z.string().optional(),\n high: z.number(),\n low: z.number().optional(),\n night: z.boolean().optional(),\n precipitation: z.number().min(0).max(100).optional(),\n current: z.boolean().optional(),\n })\n .strict()\n )\n .min(1)\n .max(24),\n style,\n })\n .strict()\n\nconst ChartCardSchema = z\n .object({\n component: z.literal('Chart'),\n chart: ChartKindSchema.optional(),\n series: z\n .array(\n z\n .object({\n name: z.string().optional(),\n points: z.array(z.number().nullable()).min(1).max(200),\n })\n .strict()\n )\n .min(1)\n .max(8),\n labels: z.array(z.string()).max(200).optional(),\n title: z.string().optional(),\n icon: z.string().optional(),\n unit: z.string().optional(),\n zeroBaseline: z.boolean().optional(),\n height: z.number().min(4).max(24).optional(),\n style,\n })\n .strict()\n\nconst StatTileCardSchema = z\n .object({\n component: z.literal('StatTile'),\n label: z.string(),\n value: z.union([z.string(), z.number()]),\n unit: z.string().optional(),\n caption: z.string().optional(),\n icon: z.string().optional(),\n trend: StatTrendSchema.optional(),\n trendLabel: z.string().optional(),\n trendIsGood: z.boolean().optional(),\n style,\n })\n .strict()\n\nconst ProgressBarCardSchema = z\n .object({\n component: z.literal('ProgressBar'),\n label: z.string(),\n value: z.number(),\n min: z.number().optional(),\n max: z.number().optional(),\n shape: ProgressShapeSchema.optional(),\n color: ProgressColorSchema.optional(),\n unit: z.string().optional(),\n valueLabel: z.string().optional(),\n caption: z.string().optional(),\n icon: z.string().optional(),\n style,\n })\n .strict()\n\nconst KeyValueListCardSchema = z\n .object({\n component: z.literal('KeyValueList'),\n rows: z\n .array(\n z\n .object({ label: z.string(), value: z.string(), icon: z.string().optional() })\n .strict()\n )\n .min(1)\n .max(40),\n style,\n })\n .strict()\n\nconst TimelineCardSchema = z\n .object({\n component: z.literal('Timeline'),\n title: z.string().optional(),\n icon: z.string().optional(),\n entries: z\n .array(\n z\n .object({\n time: z.string(),\n title: z.string(),\n description: z.string().optional(),\n icon: z.string().optional(),\n duration: z.string().optional(),\n badge: z.string().optional(),\n current: z.boolean().optional(),\n past: z.boolean().optional(),\n variant: TimelineVariantSchema.optional(),\n })\n .strict()\n )\n .min(1)\n .max(40),\n style,\n })\n .strict()\n\nconst NoteCardSchema = z\n .object({\n component: z.literal('Note'),\n title: z.string().optional(),\n icon: z.string().optional(),\n badge: z.string().optional(),\n content: z.string(),\n footer: z.string().optional(),\n variant: NoteVariantSchema.optional(),\n style,\n })\n .strict()\n\nconst CalendarEventCardSchema = z\n .object({\n component: z.literal('CalendarEvent'),\n title: z.string(),\n start: z.string(),\n end: z.string().optional(),\n allDay: z.boolean().optional(),\n location: z.string().optional(),\n organizer: z.string().optional(),\n attendees: z.array(z.string()).max(40).optional(),\n calendar: z.string().optional(),\n status: CalendarEventStatusSchema.optional(),\n recurrence: z.string().optional(),\n notes: z.string().optional(),\n style,\n })\n .strict()\n\n/** Every component name a card may use. Exported so the docs and the tool description stay in step. */\nexport const CHAT_CARD_COMPONENTS = [\n 'VerticalStack',\n 'HorizontalStack',\n 'Grid',\n 'Frame',\n 'List',\n 'Divider',\n 'Header',\n 'Label',\n 'Paragraph',\n 'Markdown',\n 'Icon',\n 'Pill',\n 'WeatherNow',\n 'WeatherForecast',\n 'Chart',\n 'StatTile',\n 'ProgressBar',\n 'KeyValueList',\n 'Timeline',\n 'Note',\n 'CalendarEvent',\n] as const\n\n/**\n * Every component of the card profile, in the order they are documented.\n *\n * One list, used twice: it is what the union validates against and what\n * `describeChatCardProfile` reads to write the vocabulary out. A component\n * added here is legal *and* documented, in one edit — the alternative is a\n * prose list that drifts, and a model reading a drifted list writes cards the\n * validator then rejects.\n */\nconst CARD_MEMBERS = [\n VerticalStackCardSchema,\n HorizontalStackCardSchema,\n GridCardSchema,\n FrameCardSchema,\n ListCardSchema,\n DividerCardSchema,\n HeaderCardSchema,\n LabelCardSchema,\n ParagraphCardSchema,\n MarkdownCardSchema,\n IconCardSchema,\n PillCardSchema,\n WeatherNowCardSchema,\n WeatherForecastCardSchema,\n ChartCardSchema,\n StatTileCardSchema,\n ProgressBarCardSchema,\n KeyValueListCardSchema,\n TimelineCardSchema,\n NoteCardSchema,\n CalendarEventCardSchema,\n] as const\n\n/**\n * The properties each card component accepts, read off the schemas themselves.\n *\n * Derived rather than listed, for the same reason `describeChatCardProfile`\n * is: a hand-kept copy of this drifts, and a drifted copy rejects components\n * that are in fact legal.\n *\n * Used by profiles that validate a card *template* rather than a finished card\n * — the status card, whose leaves are references to data that does not exist\n * yet and so cannot be type-checked by these schemas. They can still be held to\n * this vocabulary, which is what catches a property the model invented.\n */\nexport const CHAT_CARD_PROPS: Readonly<Record<string, readonly string[]>> = Object.freeze(\n Object.fromEntries(\n CARD_MEMBERS.map((member) => {\n const shape = (member as unknown as z.AnyZodObject).shape as Record<string, z.ZodTypeAny>\n const name = (shape['component']!._def as { value: string }).value\n return [name, Object.freeze(Object.keys(shape))]\n })\n )\n)\n\n/**\n * One component of a chat card.\n *\n * Discriminated on `component` so a wrong property is reported against the\n * component the author actually named, rather than as \"no union member matched\"\n * across eighteen alternatives.\n */\nexport const ChatCardComponentSchema: z.ZodType<ChatCardComponent> = z.lazy(\n () =>\n z.discriminatedUnion(\n 'component',\n CARD_MEMBERS as unknown as [(typeof CARD_MEMBERS)[number], (typeof CARD_MEMBERS)[number]]\n ) as unknown as z.ZodType<ChatCardComponent>\n)\n\n/** The root of a card. Same profile as any component within it. */\nexport const ChatCardSchema = ChatCardComponentSchema\n\n/** How deeply components may nest inside a card, root included. */\nconst MAX_CARD_DEPTH = 8\n\n/**\n * Rejects `$`-prefixed strings anywhere in the card.\n *\n * In a panel a leading `$` means \"look this up in scope\". A card has no scope,\n * so the lookup would return nothing and the value would render as an empty\n * space — a price written `$120` would simply disappear. Zod cannot see this,\n * because to it the value is a perfectly good string; so it is checked\n * separately, and the caller is told to write the value without the prefix.\n *\n * @returns The offending path, or null when the card is clean.\n */\nfunction findScopeReference(value: unknown, path: string): string | null {\n if (typeof value === 'string') {\n return value.startsWith('$') ? path : null\n }\n if (Array.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n const found = findScopeReference(value[i], `${path}[${i}]`)\n if (found) return found\n }\n return null\n }\n if (value && typeof value === 'object') {\n for (const [key, child] of Object.entries(value as Record<string, unknown>)) {\n const found = findScopeReference(child, path ? `${path}.${key}` : key)\n if (found) return found\n }\n }\n return null\n}\n\n/** Depth of the deepest `children` chain, counting the root as 1. */\nfunction cardDepth(value: unknown): number {\n if (!value || typeof value !== 'object') return 0\n const kids = (value as { children?: unknown }).children\n if (!Array.isArray(kids) || kids.length === 0) return 1\n let deepest = 0\n for (const child of kids) {\n const depth = cardDepth(child)\n if (depth > deepest) deepest = depth\n }\n return deepest + 1\n}\n\n/**\n * Catch a chart whose series do not line up with its labels.\n *\n * Points map to labels by position, so a series one short does not fail to\n * render — it renders the wrong reading against every label after the gap,\n * which is worse than not drawing at all. Zod cannot express the relationship\n * between two sibling arrays, so it is checked here.\n *\n * @returns A message naming the mismatch, or null when everything lines up.\n */\nfunction findMisalignedChart(value: unknown): string | null {\n if (!value || typeof value !== 'object') return null\n\n if (Array.isArray(value)) {\n for (const item of value) {\n const found = findMisalignedChart(item)\n if (found) return found\n }\n return null\n }\n\n const node = value as { component?: string; labels?: unknown; series?: unknown }\n if (node.component === 'Chart' && Array.isArray(node.labels) && Array.isArray(node.series)) {\n const expected = node.labels.length\n for (let i = 0; i < node.series.length; i++) {\n const points = (node.series[i] as { points?: unknown[] })?.points\n if (Array.isArray(points) && points.length !== expected) {\n return (\n `Chart series ${i} has ${points.length} points but there are ${expected} labels. ` +\n `Points line up with labels by position — use null for a reading you do not have.`\n )\n }\n }\n }\n\n for (const child of Object.values(node as Record<string, unknown>)) {\n const found = findMisalignedChart(child)\n if (found) return found\n }\n return null\n}\n\n/**\n * The space between a card's components, in rem.\n *\n * One value for every stack and every grid: a card is read at a glance, and a\n * rhythm that changes between two of them reads as a mistake rather than as\n * emphasis. It matches what the components' own padding already assumes.\n */\nconst CARD_GAP_REM = 0.75\n\n/**\n * Stamp the profile's spacing onto every layout in a validated card.\n *\n * Done here rather than in each client's renderer: the same card object goes to\n * the web, to Electron and to the phone, so a number written once is a rhythm\n * they cannot disagree about. The renderers keep their own default of no gap,\n * which is what an extension panel means by leaving it out.\n *\n * Mutates the parsed copy, which zod built for us and nothing else holds.\n */\nfunction applyCardSpacing(card: ChatCardComponent): ChatCardComponent {\n if (card.component === 'VerticalStack' || card.component === 'HorizontalStack' || card.component === 'Grid') {\n card['gap'] = CARD_GAP_REM\n }\n\n if (Array.isArray(card['children'])) {\n for (const child of card['children'] as ChatCardComponent[]) applyCardSpacing(child)\n }\n\n return card\n}\n\n/** What came back from validating a card. */\nexport type ChatCardValidation =\n | { ok: true; card: ChatCardComponent }\n | { ok: false; error: string }\n\n/**\n * Validate a card against the chat profile.\n *\n * Returns a message rather than throwing, because the caller is almost always a\n * tool that has to hand the reason back to the model — an exception would become\n * \"the tool failed\", which is not something anyone can fix.\n */\nexport function validateChatCard(card: unknown): ChatCardValidation {\n const parsed = ChatCardSchema.safeParse(card)\n if (!parsed.success) {\n const issue = parsed.error.issues[0]\n const where = issue?.path.length ? ` at ${issue.path.join('.')}` : ''\n return { ok: false, error: `${issue?.message ?? 'Invalid card'}${where}` }\n }\n\n const depth = cardDepth(parsed.data)\n if (depth > MAX_CARD_DEPTH) {\n return {\n ok: false,\n error: `Card nests ${depth} levels deep; at most ${MAX_CARD_DEPTH} are allowed. Flatten it.`,\n }\n }\n\n const misaligned = findMisalignedChart(parsed.data)\n if (misaligned) {\n return { ok: false, error: misaligned }\n }\n\n const reference = findScopeReference(parsed.data, '')\n if (reference) {\n return {\n ok: false,\n error:\n `The value at ${reference} starts with \"$\", which the component system reads as a ` +\n `reference to data that a card does not have, so it would render as nothing. ` +\n `Write the value without the leading \"$\".`,\n }\n }\n\n return { ok: true, card: applyCardSpacing(parsed.data) }\n}\n\n// -----------------------------------------------------------------------------\n// Describing the profile\n// -----------------------------------------------------------------------------\n\n/**\n * Render one field's type compactly: `line|bar|area`, `number?`, `{a, b?}[≤24]`.\n *\n * Enough for a reader to write a valid value, and short enough that the whole\n * vocabulary fits in a tool description without crowding out everything else\n * the model has to hold. Anything this cannot name falls back to the value's\n * own kind rather than to nothing.\n */\nfunction describeType(schema: z.ZodTypeAny): string {\n const def = schema._def as { typeName?: string; [key: string]: unknown }\n\n switch (def.typeName) {\n case 'ZodOptional':\n case 'ZodNullable':\n case 'ZodDefault':\n return describeType((schema as unknown as { unwrap(): z.ZodTypeAny }).unwrap())\n case 'ZodLazy':\n return 'component[]'\n case 'ZodArray': {\n const inner = describeType((def as { type: z.ZodTypeAny }).type)\n // The cap belongs in the vocabulary. A model writing a card from a tool's\n // data has no other way to learn that a forecast takes 24 steps and not\n // the 48 hours it is holding, and finds out by having the whole card\n // refused — which is the expensive way to be told.\n const max = (def as { maxLength?: { value: number } | null }).maxLength?.value\n return typeof max === 'number' ? `${inner}[≤${max}]` : `${inner}[]`\n }\n case 'ZodObject': {\n const shape = (schema as unknown as z.AnyZodObject).shape\n const fields = Object.entries(shape).map(\n ([key, value]) => `${key}${(value as z.ZodTypeAny).isOptional() ? '?' : ''}`\n )\n return `{${fields.join(', ')}}`\n }\n case 'ZodEnum':\n return ((def as { values: readonly string[] }).values ?? []).join('|')\n case 'ZodUnion':\n return ((def as { options: z.ZodTypeAny[] }).options ?? []).map(describeType).join('|')\n case 'ZodLiteral':\n return String((def as { value: unknown }).value)\n case 'ZodString':\n return 'string'\n case 'ZodNumber':\n return 'number'\n case 'ZodBoolean':\n return 'boolean'\n case 'ZodRecord':\n return 'object'\n default:\n return 'value'\n }\n}\n\n/**\n * The card vocabulary, written out from the schemas themselves.\n *\n * This is what a language model is given as documentation, so it is generated\n * rather than kept by hand: a description that has drifted from the validator\n * teaches the model to write cards that are then rejected, and the model has no\n * way to tell which of the two was wrong.\n *\n * `style` is left out of every line. It is legal everywhere and interesting\n * almost nowhere — the components carry their own look, and a card that reaches\n * for CSS is usually one that should have picked a different component.\n */\nexport function describeChatCardProfile(): string {\n return CARD_MEMBERS.map((member) => {\n const shape = (member as unknown as z.AnyZodObject).shape as Record<string, z.ZodTypeAny>\n const name = (shape['component']!._def as { value: string }).value\n const fields = Object.entries(shape)\n .filter(([key]) => key !== 'component' && key !== 'style')\n .map(([key, value]) => `${key}${value.isOptional() ? '?' : ''}: ${describeType(value)}`)\n return fields.length ? `${name} — ${fields.join('; ')}` : name\n }).join('\\n')\n}\n"],"mappings":"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","names":["import_zod","import_zod","import_zod","import_zod"]}
|