@stina/extension-api 0.36.0 → 0.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/schemas/manifest.schema.ts","../../src/schemas/permissions.schema.ts","../../src/schemas/contributions.schema.ts","../../src/schemas/components.schema.ts"],"sourcesContent":["/**\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 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// 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>\n"],"mappings":"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","names":["z","z","z","z","z"]}
1
+ {"version":3,"sources":["../../src/schemas/manifest.schema.ts","../../src/schemas/permissions.schema.ts","../../src/schemas/contributions.schema.ts","../../src/schemas/components.schema.ts"],"sourcesContent":["/**\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// 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>\n"],"mappings":"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","names":["z","z","z","z","z"]}
@@ -633,6 +633,17 @@ interface ProviderDefinition {
633
633
  * to call extension actions (e.g. OAuth, "Test connection").
634
634
  */
635
635
  configView?: ProviderConfigView;
636
+ /**
637
+ * Extra settings shown only for models that report
638
+ * `capabilities.voiceDuplex` — voice selection, transcription model, and
639
+ * whatever else is specific to this provider's realtime backend.
640
+ *
641
+ * Same DSL and same `$settings.<key>` binding as {@link configView}; the host
642
+ * renders it in its own section of the model editor and stores the values in
643
+ * the same settingsOverride. Keep general provider settings in `configView`
644
+ * so they stay visible for models without voice.
645
+ */
646
+ voiceConfigView?: ProviderConfigView;
636
647
  }
637
648
  /**
638
649
  * Component-tree-based configuration view for a provider.
@@ -741,6 +752,21 @@ interface AIProvider {
741
752
  * Optional: Generate embeddings
742
753
  */
743
754
  embed?(texts: string[]): Promise<number[][]>;
755
+ /**
756
+ * Optional: Open a duplex voice session for a model that reports
757
+ * `capabilities.voiceDuplex`.
758
+ *
759
+ * The provider is responsible for authenticating with its backend and
760
+ * returning everything the client needs to connect. Audio flows directly
761
+ * between the client and the provider — it never passes through Stina — but
762
+ * the session is configured here, on the server, so the instructions and
763
+ * tools cannot be tampered with client-side.
764
+ *
765
+ * Implementations must not put long-lived credentials in the returned
766
+ * descriptor. Either complete the handshake here (`webrtc`) or mint a
767
+ * short-lived secret (`websocket`).
768
+ */
769
+ createVoiceSession?(options: VoiceSessionOptions): Promise<VoiceSessionDescriptor>;
744
770
  }
745
771
  /**
746
772
  * Model information
@@ -754,6 +780,104 @@ interface ModelInfo {
754
780
  description?: string;
755
781
  /** Context window size */
756
782
  contextLength?: number;
783
+ /** What this model can do beyond plain text chat */
784
+ capabilities?: ModelCapabilities;
785
+ }
786
+ /**
787
+ * Optional model capabilities.
788
+ *
789
+ * Absent or `false` means "not supported" — a provider that says nothing keeps
790
+ * behaving exactly as before.
791
+ */
792
+ interface ModelCapabilities {
793
+ /**
794
+ * The model can hold a real-time two-way voice conversation, with the user
795
+ * and the model able to speak at the same time.
796
+ *
797
+ * Report this per model *and* per auth mode: the same provider may support
798
+ * voice with one kind of credential and not another.
799
+ */
800
+ voiceDuplex?: boolean;
801
+ }
802
+ /**
803
+ * How the client wants to connect to the voice session.
804
+ *
805
+ * Clients ask for the transport they can actually implement — browsers do
806
+ * WebRTC, a native app may prefer a plain socket — and providers implement the
807
+ * ones their backend offers. A provider that is handed a transport it does not
808
+ * support should throw with a message naming the transports it does.
809
+ */
810
+ type VoiceTransportRequest =
811
+ /** Client has created an offer and wants the provider to complete the handshake. */
812
+ {
813
+ transport: 'webrtc';
814
+ sdpOffer: string;
815
+ }
816
+ /** Client will open a socket itself and needs a short-lived credential for it. */
817
+ | {
818
+ transport: 'websocket';
819
+ };
820
+ /**
821
+ * Everything the client needs to connect, and nothing it needs to decide.
822
+ *
823
+ * `sessionConfig` is the provider-shaped session object (instructions, tools,
824
+ * voice, transcription). The client forwards it verbatim once the connection is
825
+ * up — it is a transport, not a decision-maker.
826
+ */
827
+ type VoiceSessionDescriptor = {
828
+ transport: 'webrtc';
829
+ /** Answer to the client's offer. */
830
+ sdpAnswer: string;
831
+ sessionConfig: unknown;
832
+ /** Provider-side ID for the call, useful for logging and teardown. */
833
+ providerSessionId?: string;
834
+ } | {
835
+ transport: 'websocket';
836
+ /** Socket URL to connect to. */
837
+ url: string;
838
+ /** Short-lived credential. Must not be a long-lived API key. */
839
+ clientSecret: string;
840
+ /** ISO timestamp after which `clientSecret` stops working. */
841
+ expiresAt: string;
842
+ sessionConfig: unknown;
843
+ providerSessionId?: string;
844
+ };
845
+ /**
846
+ * Options for opening a voice session.
847
+ *
848
+ * Mirrors {@link ChatOptions} where it can, so a provider that already
849
+ * implements `chat` finds the same shapes here.
850
+ */
851
+ interface VoiceSessionOptions {
852
+ /** How the client wants to connect */
853
+ transport: VoiceTransportRequest;
854
+ /** Model to use — must be one that reported `capabilities.voiceDuplex` */
855
+ model?: string;
856
+ /**
857
+ * System instructions for the session. This is how the assistant keeps her
858
+ * identity in voice mode; providers must pass it through unchanged.
859
+ */
860
+ instructions?: string;
861
+ /** Tools the model may call during the conversation */
862
+ tools?: ToolDefinition[];
863
+ /**
864
+ * The user's language as an ISO-639-1 code, when known.
865
+ *
866
+ * Pass it to the transcription model rather than letting it detect the
867
+ * language per utterance. Detection is unreliable on short or quiet audio and
868
+ * fails in a way that looks like nonsense rather than an error — a Swedish
869
+ * "hej" coming back as Indonesian, for instance.
870
+ */
871
+ language?: string;
872
+ /** Provider-specific settings from model configuration */
873
+ settings?: Record<string, unknown>;
874
+ /** Request context (user info, session metadata — not provider config) */
875
+ context?: {
876
+ userId?: string;
877
+ [key: string]: unknown;
878
+ };
879
+ /** Abort signal for cancellation */
880
+ signal?: AbortSignal;
757
881
  }
758
882
  /**
759
883
  * Chat message
@@ -1395,6 +1519,78 @@ interface UserAPI {
1395
1519
  getProfile(): Promise<UserProfile>;
1396
1520
  listIds(): Promise<string[]>;
1397
1521
  }
1522
+ /**
1523
+ * Visual presentation for a conversation Stina starts proactively in response to
1524
+ * an event reported by an extension.
1525
+ *
1526
+ * The extension owns the *chrome* of the list entry — icon, label, framing,
1527
+ * accent and badge — while Stina authors the *content* (title and opening
1528
+ * message). Every field is optional: omitted fields fall back to sensible
1529
+ * defaults, and `icon` falls back to the reporting extension's manifest icon.
1530
+ *
1531
+ * Colour is intentionally a small set of theme tokens rather than free-form so
1532
+ * the conversation list stays visually coherent across light/dark themes.
1533
+ */
1534
+ interface ConversationPresentation {
1535
+ /**
1536
+ * Structural shape of the list entry — *what kind of thing* this is, not how
1537
+ * urgent it is. Urgency is Stina's call alone (see `severityGuidance`).
1538
+ * Defaults to `note`. Each variant renders a different set of fields:
1539
+ * - `note` — icon, title and a two-line preview. The general-purpose default.
1540
+ * - `event` — something happening at a point in time; renders `at` as a time
1541
+ * block with a countdown. Meetings, reminders, deadlines.
1542
+ * - `message` — something a person or system sent; renders `sender` on its own
1543
+ * line with the subject as the title. Mail, chat, comments.
1544
+ * - `digest` — several things collected into one entry; renders `items` as a
1545
+ * short bullet list with a count. Morning briefs, weekly summaries.
1546
+ * - `status` — a transactional outcome; renders `statusLabel` as a pill and no
1547
+ * preview. Finished builds, deliveries, completed jobs.
1548
+ * - `insight` — Stina's own observation or suggestion rather than an extension's
1549
+ * report. Rendered in her own voice with a soft accent panel.
1550
+ */
1551
+ variant?: 'note' | 'event' | 'message' | 'digest' | 'status' | 'insight';
1552
+ /**
1553
+ * Leading icon, as a Hugeicons name in lower case with hyphens (`sun-03`,
1554
+ * `cloud-angled-rain`). Hugeicons documents its names in PascalCase; those are
1555
+ * accepted and translated, but the hyphenated form is what the icon set uses.
1556
+ * An unknown name falls back to a default rather than rendering blank.
1557
+ * Falls back to the extension's manifest icon when omitted.
1558
+ */
1559
+ icon?: HugeIconName;
1560
+ /** Small eyebrow label above the content, e.g. "Mail" or "Reminder". */
1561
+ label?: LocalizedString;
1562
+ /** Accent colour as a theme token. Defaults to `default`. */
1563
+ accent?: 'default' | 'info' | 'warning' | 'success' | 'danger';
1564
+ /** Optional short badge, e.g. the account a mail arrived in. */
1565
+ badge?: LocalizedString;
1566
+ /**
1567
+ * When the event happens (ISO 8601). Only used by `variant: 'event'`, which
1568
+ * renders it as a time block and derives a relative countdown from it.
1569
+ */
1570
+ at?: string;
1571
+ /** Who sent it. Only used by `variant: 'message'`. */
1572
+ sender?: LocalizedString;
1573
+ /**
1574
+ * The collected items. Only used by `variant: 'digest'`; at most three are
1575
+ * rendered, and `count` reports the true total when there are more.
1576
+ */
1577
+ items?: LocalizedString[];
1578
+ /** Total number of collected items, when it exceeds what `items` lists. */
1579
+ count?: number;
1580
+ /** Short outcome label for the pill, e.g. "Delivered". Only used by `variant: 'status'`. */
1581
+ statusLabel?: LocalizedString;
1582
+ /**
1583
+ * Guidance to Stina on how to judge how much this deserves the user's attention
1584
+ * — *not* a severity value. Extensions describe what would make an event
1585
+ * important ("urgent when the sender is on the user's team, or the deadline is
1586
+ * today"); Stina weighs that against everything else she knows and picks the
1587
+ * level herself. She may disregard it entirely.
1588
+ *
1589
+ * Plain text in any language, one or two sentences. It is shown to Stina during
1590
+ * her deliberation and never to the user.
1591
+ */
1592
+ severityGuidance?: string;
1593
+ }
1398
1594
  /**
1399
1595
  * Chat instruction message
1400
1596
  */
@@ -1402,6 +1598,24 @@ interface ChatInstructionMessage {
1402
1598
  text: string;
1403
1599
  conversationId?: string;
1404
1600
  userId?: string;
1601
+ /**
1602
+ * When true, the message is treated as a system event reported by the extension
1603
+ * rather than a plain instruction. Instead of being appended to a conversation,
1604
+ * Stina runs a hidden deliberation over it and decides herself whether to notify
1605
+ * the user (by starting a new conversation via the `core_init_chat_session` tool).
1606
+ */
1607
+ deliberate?: boolean;
1608
+ /**
1609
+ * Identifier of the source that reported the event (typically the extension id).
1610
+ * Used for logging/tracing of proactive decisions.
1611
+ */
1612
+ source?: string;
1613
+ /**
1614
+ * Optional visual presentation for the conversation Stina may start from this
1615
+ * event. Only meaningful together with `deliberate: true`; ignored if Stina
1616
+ * decides not to notify the user.
1617
+ */
1618
+ presentation?: ConversationPresentation;
1405
1619
  }
1406
1620
  /**
1407
1621
  * Chat API for appending instructions
@@ -1434,11 +1648,14 @@ interface ExtensionModule {
1434
1648
  /**
1435
1649
  * Restart policy for background tasks.
1436
1650
  * Controls how tasks are restarted after failures.
1651
+ *
1652
+ * A task that returns from its callback without having been aborted is
1653
+ * considered finished on purpose and is never restarted, regardless of policy.
1437
1654
  */
1438
1655
  interface BackgroundRestartPolicy {
1439
1656
  /**
1440
1657
  * When to restart the task:
1441
- * - 'always': Always restart, regardless of exit reason
1658
+ * - 'always': Restart if the task threw, or stopped without anyone asking it to
1442
1659
  * - 'on-failure': Only restart if the task threw an error
1443
1660
  * - 'never': Never restart automatically
1444
1661
  */
@@ -1519,6 +1736,11 @@ interface BackgroundTaskContext extends ExecutionContext {
1519
1736
  * Callback function for background tasks.
1520
1737
  * The function should run until the signal is aborted, then clean up and return.
1521
1738
  *
1739
+ * Returning before the signal is aborted means the task has finished on purpose:
1740
+ * it is marked as completed and is not restarted, whatever the restart policy says.
1741
+ * A task that has nothing to do right now but wants to be retried later should
1742
+ * therefore keep running (and wait on the signal) rather than return early.
1743
+ *
1522
1744
  * @example
1523
1745
  * ```typescript
1524
1746
  * const callback: BackgroundTaskCallback = async (ctx) => {
@@ -1554,8 +1776,10 @@ interface BackgroundTaskHealth {
1554
1776
  userId: string;
1555
1777
  /**
1556
1778
  * Current task status.
1779
+ * 'completed' means the task returned on its own and will not be restarted,
1780
+ * while 'stopped' means someone asked it to stop.
1557
1781
  */
1558
- status: 'pending' | 'running' | 'stopped' | 'failed' | 'restarting';
1782
+ status: 'pending' | 'running' | 'stopped' | 'completed' | 'failed' | 'restarting';
1559
1783
  /**
1560
1784
  * Number of times the task has been restarted.
1561
1785
  */
@@ -1681,4 +1905,4 @@ interface ActionResult {
1681
1905
  error?: string;
1682
1906
  }
1683
1907
 
1684
- export { type StorageAPI as $, type ActionResult as A, type SchedulerAPI as B, type ChatMessage as C, type Disposable as D, type ExtensionContributions as E, type SchedulerJobRequest as F, type GetModelsOptions as G, type SchedulerSchedule as H, type UserProfile as I, type ChatAPI as J, type ChatInstructionMessage as K, type LocalizedString as L, type ModelInfo as M, type NetworkAPI as N, type LogAPI as O, type PanelDefinition as P, type BackgroundWorkersAPI as Q, type BackgroundTaskConfig as R, type SchedulerFirePayload as S, type ToolResult as T, type UserAPI as U, type BackgroundTaskCallback as V, type BackgroundTaskContext as W, type BackgroundTaskHealth as X, type BackgroundRestartPolicy as Y, type Query as Z, type QueryOptions as _, type ChatOptions as a, type SecretsAPI as a0, type StorageCollectionConfig as a1, type StorageContributions as a2, type AIProvider as a3, type ToolCall as a4, type Tool as a5, type Action as a6, type ExtensionModule as a7, type HugeIconName as a8, type AllowedCSSProperty as a9, type PanelAction as aA, type PanelProps as aB, type ToggleProps as aC, type CollapsibleProps as aD, type FrameVariant as aE, type FrameProps as aF, type ListProps as aG, type PillVariant as aH, type PillProps as aI, type CheckboxProps as aJ, type MarkdownProps as aK, type TextPreviewProps as aL, type ModalProps as aM, type ConditionalGroupProps as aN, type ExecutionContext as aO, type ExtensionComponentStyle as aa, type ExtensionComponentData as ab, type ExtensionComponentIterator as ac, type ExtensionComponentChildren as ad, type ExtensionActionCall as ae, type ExtensionActionRef as af, type ExtensionDataSource as ag, type ExtensionPanelDefinition as ah, type HeaderProps as ai, type LabelProps as aj, type ParagraphProps as ak, type ButtonProps as al, type TextInputProps as am, type PasswordInputProps as an, type NumberInputProps as ao, type TextAreaProps as ap, type DateTimeInputProps as aq, type SelectProps as ar, type IconPickerProps as as, type VerticalStackProps as at, type HorizontalStackProps as au, type GridProps as av, type DividerProps as aw, type IconProps as ax, type IconButtonType as ay, type IconButtonProps as az, type StreamEvent as b, type ToolSettingsViewDefinition as c, type ToolSettingsView as d, type ToolSettingsListView as e, type ToolSettingsListMapping as f, type ToolSettingsComponentView as g, type ToolSettingsActionDataSource as h, type PanelView as i, type PanelComponentView as j, type PanelActionDataSource as k, type PanelUnknownView as l, type ProviderDefinition as m, type ProviderConfigView as n, type PromptContribution as o, type PromptSection as p, type ToolDefinition as q, resolveLocalizedString as r, type ToolConfirmationConfig as s, type CommandDefinition as t, type ExtensionContext as u, type SettingsAPI as v, type ProvidersAPI as w, type ToolsAPI as x, type ActionsAPI as y, type EventsAPI as z };
1908
+ export { type BackgroundTaskHealth as $, type ActionResult as A, type EventsAPI as B, type ChatMessage as C, type Disposable as D, type ExtensionContributions as E, type SchedulerAPI as F, type GetModelsOptions as G, type HugeIconName as H, type SchedulerJobRequest as I, type SchedulerSchedule as J, type UserProfile as K, type LocalizedString as L, type ModelInfo as M, type NetworkAPI as N, type ChatAPI as O, type PanelDefinition as P, type ChatInstructionMessage as Q, type ConversationPresentation as R, type SchedulerFirePayload as S, type ToolResult as T, type UserAPI as U, type VoiceSessionOptions as V, type LogAPI as W, type BackgroundWorkersAPI as X, type BackgroundTaskConfig as Y, type BackgroundTaskCallback as Z, type BackgroundTaskContext as _, type ChatOptions as a, type BackgroundRestartPolicy as a0, type Query as a1, type QueryOptions as a2, type StorageAPI as a3, type SecretsAPI as a4, type StorageCollectionConfig as a5, type StorageContributions as a6, type AIProvider as a7, type ModelCapabilities as a8, type ToolCall as a9, type GridProps as aA, type DividerProps as aB, type IconProps as aC, type IconButtonType as aD, type IconButtonProps as aE, type PanelAction as aF, type PanelProps as aG, type ToggleProps as aH, type CollapsibleProps as aI, type FrameVariant as aJ, type FrameProps as aK, type ListProps as aL, type PillVariant as aM, type PillProps as aN, type CheckboxProps as aO, type MarkdownProps as aP, type TextPreviewProps as aQ, type ModalProps as aR, type ConditionalGroupProps as aS, type ExecutionContext as aT, type VoiceTransportRequest as aa, type Tool as ab, type Action as ac, type ExtensionModule as ad, type AllowedCSSProperty as ae, type ExtensionComponentStyle as af, type ExtensionComponentData as ag, type ExtensionComponentIterator as ah, type ExtensionComponentChildren as ai, type ExtensionActionCall as aj, type ExtensionActionRef as ak, type ExtensionDataSource as al, type ExtensionPanelDefinition as am, type HeaderProps as an, type LabelProps as ao, type ParagraphProps as ap, type ButtonProps as aq, type TextInputProps as ar, type PasswordInputProps as as, type NumberInputProps as at, type TextAreaProps as au, type DateTimeInputProps as av, type SelectProps as aw, type IconPickerProps as ax, type VerticalStackProps as ay, type HorizontalStackProps as az, type StreamEvent as b, type VoiceSessionDescriptor as c, type ToolSettingsViewDefinition as d, type ToolSettingsView as e, type ToolSettingsListView as f, type ToolSettingsListMapping as g, type ToolSettingsComponentView as h, type ToolSettingsActionDataSource as i, type PanelView as j, type PanelComponentView as k, type PanelActionDataSource as l, type PanelUnknownView as m, type ProviderDefinition as n, type ProviderConfigView as o, type PromptContribution as p, type PromptSection as q, resolveLocalizedString as r, type ToolDefinition as s, type ToolConfirmationConfig as t, type CommandDefinition as u, type ExtensionContext as v, type SettingsAPI as w, type ProvidersAPI as x, type ToolsAPI as y, type ActionsAPI as z };