@databricks/appkit 0.5.4 → 0.6.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.
Files changed (195) hide show
  1. package/CLAUDE.md +12 -1
  2. package/NOTICE.md +2 -0
  3. package/bin/appkit.js +0 -0
  4. package/dist/appkit/package.js +1 -1
  5. package/dist/cache/index.js +2 -2
  6. package/dist/cache/index.js.map +1 -1
  7. package/dist/cache/storage/persistent.js.map +1 -1
  8. package/dist/cli/commands/plugins-sync.js +369 -0
  9. package/dist/cli/commands/plugins-sync.js.map +1 -0
  10. package/dist/cli/commands/plugins.js +19 -0
  11. package/dist/cli/commands/plugins.js.map +1 -0
  12. package/dist/cli/index.js +2 -0
  13. package/dist/cli/index.js.map +1 -1
  14. package/dist/connectors/index.js +2 -2
  15. package/dist/connectors/{lakebase → lakebase-v1}/client.js +31 -17
  16. package/dist/connectors/lakebase-v1/client.js.map +1 -0
  17. package/dist/connectors/lakebase-v1/defaults.js +18 -0
  18. package/dist/connectors/lakebase-v1/defaults.js.map +1 -0
  19. package/dist/connectors/lakebase-v1/index.js +3 -0
  20. package/dist/core/appkit.d.ts.map +1 -1
  21. package/dist/core/appkit.js +5 -1
  22. package/dist/core/appkit.js.map +1 -1
  23. package/dist/index.d.ts +4 -1
  24. package/dist/index.js +5 -1
  25. package/dist/index.js.map +1 -1
  26. package/dist/plugin/plugin.d.ts +95 -3
  27. package/dist/plugin/plugin.d.ts.map +1 -1
  28. package/dist/plugin/plugin.js +94 -6
  29. package/dist/plugin/plugin.js.map +1 -1
  30. package/dist/plugins/analytics/analytics.d.ts +3 -1
  31. package/dist/plugins/analytics/analytics.d.ts.map +1 -1
  32. package/dist/plugins/analytics/analytics.js +3 -1
  33. package/dist/plugins/analytics/analytics.js.map +1 -1
  34. package/dist/plugins/analytics/index.js +1 -0
  35. package/dist/plugins/analytics/manifest.js +21 -0
  36. package/dist/plugins/analytics/manifest.js.map +1 -0
  37. package/dist/plugins/analytics/manifest.json +36 -0
  38. package/dist/plugins/index.js +2 -0
  39. package/dist/plugins/server/index.d.ts +3 -1
  40. package/dist/plugins/server/index.d.ts.map +1 -1
  41. package/dist/plugins/server/index.js +3 -1
  42. package/dist/plugins/server/index.js.map +1 -1
  43. package/dist/plugins/server/manifest.js +21 -0
  44. package/dist/plugins/server/manifest.js.map +1 -0
  45. package/dist/plugins/server/manifest.json +36 -0
  46. package/dist/registry/index.js +5 -0
  47. package/dist/registry/manifest-loader.d.ts +44 -0
  48. package/dist/registry/manifest-loader.d.ts.map +1 -0
  49. package/dist/registry/manifest-loader.js +97 -0
  50. package/dist/registry/manifest-loader.js.map +1 -0
  51. package/dist/registry/resource-registry.d.ts +133 -0
  52. package/dist/registry/resource-registry.d.ts.map +1 -0
  53. package/dist/registry/resource-registry.js +297 -0
  54. package/dist/registry/resource-registry.js.map +1 -0
  55. package/dist/registry/types.d.ts +181 -0
  56. package/dist/registry/types.d.ts.map +1 -0
  57. package/dist/registry/types.js +89 -0
  58. package/dist/registry/types.js.map +1 -0
  59. package/dist/shared/src/plugin.d.ts +66 -1
  60. package/dist/shared/src/plugin.d.ts.map +1 -1
  61. package/docs/docs/api/appkit/Class.AppKitError/index.html +5 -5
  62. package/docs/docs/api/appkit/Class.AuthenticationError/index.html +4 -4
  63. package/docs/docs/api/appkit/Class.ConfigurationError/index.html +4 -4
  64. package/docs/docs/api/appkit/Class.ConnectionError/index.html +4 -4
  65. package/docs/docs/api/appkit/Class.ExecutionError/index.html +4 -4
  66. package/docs/docs/api/appkit/Class.InitializationError/index.html +4 -4
  67. package/docs/docs/api/appkit/Class.Plugin/index.html +28 -16
  68. package/docs/docs/api/appkit/Class.Plugin.md +90 -30
  69. package/docs/docs/api/appkit/Class.ResourceRegistry/index.html +150 -0
  70. package/docs/docs/api/appkit/Class.ResourceRegistry.md +301 -0
  71. package/docs/docs/api/appkit/Class.ServerError/index.html +5 -5
  72. package/docs/docs/api/appkit/Class.TunnelError/index.html +4 -4
  73. package/docs/docs/api/appkit/Class.ValidationError/index.html +4 -4
  74. package/docs/docs/api/appkit/Enumeration.ResourceType/index.html +66 -0
  75. package/docs/docs/api/appkit/Enumeration.ResourceType.md +135 -0
  76. package/docs/docs/api/appkit/Function.appKitTypesPlugin/index.html +4 -4
  77. package/docs/docs/api/appkit/Function.createApp/index.html +4 -4
  78. package/docs/docs/api/appkit/Function.getExecutionContext/index.html +5 -5
  79. package/docs/docs/api/appkit/Function.getPluginManifest/index.html +26 -0
  80. package/docs/docs/api/appkit/Function.getPluginManifest.md +24 -0
  81. package/docs/docs/api/appkit/Function.getResourceRequirements/index.html +28 -0
  82. package/docs/docs/api/appkit/Function.getResourceRequirements.md +42 -0
  83. package/docs/docs/api/appkit/Function.isSQLTypeMarker/index.html +5 -5
  84. package/docs/docs/api/appkit/Interface.BasePluginConfig/index.html +4 -4
  85. package/docs/docs/api/appkit/Interface.CacheConfig/index.html +4 -4
  86. package/docs/docs/api/appkit/Interface.ITelemetry/index.html +5 -5
  87. package/docs/docs/api/appkit/Interface.PluginManifest/index.html +63 -0
  88. package/docs/docs/api/appkit/Interface.PluginManifest.md +135 -0
  89. package/docs/docs/api/appkit/Interface.ResourceEntry/index.html +83 -0
  90. package/docs/docs/api/appkit/Interface.ResourceEntry.md +156 -0
  91. package/docs/docs/api/appkit/Interface.ResourceFieldEntry/index.html +26 -0
  92. package/docs/docs/api/appkit/Interface.ResourceFieldEntry.md +25 -0
  93. package/docs/docs/api/appkit/Interface.ResourceRequirement/index.html +51 -0
  94. package/docs/docs/api/appkit/Interface.ResourceRequirement.md +84 -0
  95. package/docs/docs/api/appkit/Interface.StreamExecutionSettings/index.html +5 -5
  96. package/docs/docs/api/appkit/Interface.TelemetryConfig/index.html +5 -5
  97. package/docs/docs/api/appkit/Interface.ValidationResult/index.html +29 -0
  98. package/docs/docs/api/appkit/Interface.ValidationResult.md +36 -0
  99. package/docs/docs/api/appkit/TypeAlias.ConfigSchema/index.html +21 -0
  100. package/docs/docs/api/appkit/TypeAlias.ConfigSchema.md +12 -0
  101. package/docs/docs/api/appkit/TypeAlias.IAppRouter/index.html +5 -5
  102. package/docs/docs/api/appkit/TypeAlias.ResourcePermission/index.html +18 -0
  103. package/docs/docs/api/appkit/TypeAlias.ResourcePermission.md +20 -0
  104. package/docs/docs/api/appkit/Variable.sql/index.html +5 -5
  105. package/docs/docs/api/appkit/index.html +10 -8
  106. package/docs/docs/api/appkit-ui/data/AreaChart/index.html +3 -3
  107. package/docs/docs/api/appkit-ui/data/BarChart/index.html +3 -3
  108. package/docs/docs/api/appkit-ui/data/DataTable/index.html +3 -3
  109. package/docs/docs/api/appkit-ui/data/DonutChart/index.html +3 -3
  110. package/docs/docs/api/appkit-ui/data/HeatmapChart/index.html +3 -3
  111. package/docs/docs/api/appkit-ui/data/LineChart/index.html +3 -3
  112. package/docs/docs/api/appkit-ui/data/PieChart/index.html +3 -3
  113. package/docs/docs/api/appkit-ui/data/RadarChart/index.html +3 -3
  114. package/docs/docs/api/appkit-ui/data/ScatterChart/index.html +3 -3
  115. package/docs/docs/api/appkit-ui/index.html +3 -3
  116. package/docs/docs/api/appkit-ui/styling/index.html +3 -3
  117. package/docs/docs/api/appkit-ui/ui/Accordion/index.html +3 -3
  118. package/docs/docs/api/appkit-ui/ui/Alert/index.html +3 -3
  119. package/docs/docs/api/appkit-ui/ui/AlertDialog/index.html +3 -3
  120. package/docs/docs/api/appkit-ui/ui/AspectRatio/index.html +3 -3
  121. package/docs/docs/api/appkit-ui/ui/Avatar/index.html +3 -3
  122. package/docs/docs/api/appkit-ui/ui/Badge/index.html +3 -3
  123. package/docs/docs/api/appkit-ui/ui/Breadcrumb/index.html +3 -3
  124. package/docs/docs/api/appkit-ui/ui/Button/index.html +3 -3
  125. package/docs/docs/api/appkit-ui/ui/ButtonGroup/index.html +3 -3
  126. package/docs/docs/api/appkit-ui/ui/Calendar/index.html +3 -3
  127. package/docs/docs/api/appkit-ui/ui/Card/index.html +3 -3
  128. package/docs/docs/api/appkit-ui/ui/Carousel/index.html +3 -3
  129. package/docs/docs/api/appkit-ui/ui/ChartContainer/index.html +3 -3
  130. package/docs/docs/api/appkit-ui/ui/Checkbox/index.html +3 -3
  131. package/docs/docs/api/appkit-ui/ui/Collapsible/index.html +3 -3
  132. package/docs/docs/api/appkit-ui/ui/Command/index.html +3 -3
  133. package/docs/docs/api/appkit-ui/ui/ContextMenu/index.html +3 -3
  134. package/docs/docs/api/appkit-ui/ui/Dialog/index.html +3 -3
  135. package/docs/docs/api/appkit-ui/ui/Drawer/index.html +3 -3
  136. package/docs/docs/api/appkit-ui/ui/DropdownMenu/index.html +3 -3
  137. package/docs/docs/api/appkit-ui/ui/Empty/index.html +3 -3
  138. package/docs/docs/api/appkit-ui/ui/Field/index.html +3 -3
  139. package/docs/docs/api/appkit-ui/ui/FormControl/index.html +3 -3
  140. package/docs/docs/api/appkit-ui/ui/HoverCard/index.html +3 -3
  141. package/docs/docs/api/appkit-ui/ui/Input/index.html +3 -3
  142. package/docs/docs/api/appkit-ui/ui/InputGroup/index.html +3 -3
  143. package/docs/docs/api/appkit-ui/ui/InputOTP/index.html +3 -3
  144. package/docs/docs/api/appkit-ui/ui/Item/index.html +3 -3
  145. package/docs/docs/api/appkit-ui/ui/Kbd/index.html +3 -3
  146. package/docs/docs/api/appkit-ui/ui/Label/index.html +3 -3
  147. package/docs/docs/api/appkit-ui/ui/Menubar/index.html +3 -3
  148. package/docs/docs/api/appkit-ui/ui/NavigationMenu/index.html +3 -3
  149. package/docs/docs/api/appkit-ui/ui/Pagination/index.html +3 -3
  150. package/docs/docs/api/appkit-ui/ui/Popover/index.html +3 -3
  151. package/docs/docs/api/appkit-ui/ui/Progress/index.html +3 -3
  152. package/docs/docs/api/appkit-ui/ui/RadioGroup/index.html +3 -3
  153. package/docs/docs/api/appkit-ui/ui/ResizableHandle/index.html +3 -3
  154. package/docs/docs/api/appkit-ui/ui/ScrollArea/index.html +3 -3
  155. package/docs/docs/api/appkit-ui/ui/Select/index.html +3 -3
  156. package/docs/docs/api/appkit-ui/ui/Separator/index.html +3 -3
  157. package/docs/docs/api/appkit-ui/ui/Sheet/index.html +3 -3
  158. package/docs/docs/api/appkit-ui/ui/Sidebar/index.html +3 -3
  159. package/docs/docs/api/appkit-ui/ui/Skeleton/index.html +3 -3
  160. package/docs/docs/api/appkit-ui/ui/Slider/index.html +3 -3
  161. package/docs/docs/api/appkit-ui/ui/Spinner/index.html +3 -3
  162. package/docs/docs/api/appkit-ui/ui/Switch/index.html +3 -3
  163. package/docs/docs/api/appkit-ui/ui/Table/index.html +3 -3
  164. package/docs/docs/api/appkit-ui/ui/Tabs/index.html +3 -3
  165. package/docs/docs/api/appkit-ui/ui/Textarea/index.html +3 -3
  166. package/docs/docs/api/appkit-ui/ui/Toaster/index.html +3 -3
  167. package/docs/docs/api/appkit-ui/ui/Toggle/index.html +3 -3
  168. package/docs/docs/api/appkit-ui/ui/ToggleGroup/index.html +3 -3
  169. package/docs/docs/api/appkit-ui/ui/Tooltip/index.html +3 -3
  170. package/docs/docs/api/appkit.md +44 -28
  171. package/docs/docs/api/index.html +3 -3
  172. package/docs/docs/app-management/index.html +3 -3
  173. package/docs/docs/architecture/index.html +4 -4
  174. package/docs/docs/architecture.md +1 -1
  175. package/docs/docs/category/development/index.html +3 -3
  176. package/docs/docs/configuration/index.html +3 -3
  177. package/docs/docs/core-principles/index.html +3 -3
  178. package/docs/docs/development/ai-assisted-development/index.html +3 -3
  179. package/docs/docs/development/index.html +3 -3
  180. package/docs/docs/development/llm-guide/index.html +3 -3
  181. package/docs/docs/development/local-development/index.html +3 -3
  182. package/docs/docs/development/project-setup/index.html +3 -3
  183. package/docs/docs/development/remote-bridge/index.html +3 -3
  184. package/docs/docs/development/type-generation/index.html +3 -3
  185. package/docs/docs/index.html +3 -3
  186. package/docs/docs/plugins/index.html +18 -8
  187. package/docs/docs/plugins.md +82 -4
  188. package/llms.txt +12 -1
  189. package/package.json +4 -1
  190. package/dist/connectors/lakebase/client.js.map +0 -1
  191. package/dist/connectors/lakebase/defaults.js +0 -13
  192. package/dist/connectors/lakebase/defaults.js.map +0 -1
  193. package/dist/connectors/lakebase/index.js +0 -3
  194. package/dist/utils/env-validator.js +0 -14
  195. package/dist/utils/env-validator.js.map +0 -1
@@ -0,0 +1,181 @@
1
+ import { JSONSchema7 } from "json-schema";
2
+
3
+ //#region src/registry/types.d.ts
4
+
5
+ /**
6
+ * Resource Registry Type System
7
+ *
8
+ * This module defines the type system for the AppKit Resource Registry,
9
+ * which enables plugins to declare their Databricks resource requirements
10
+ * in a machine-readable format.
11
+ *
12
+ * Resource types are exposed as first-class citizens with their specific
13
+ * permissions, making it simple for users to declare dependencies.
14
+ * Internal tooling handles conversion to Databricks app.yaml format.
15
+ */
16
+ /**
17
+ * Supported resource types that plugins can depend on.
18
+ * Each type has its own set of valid permissions.
19
+ */
20
+ declare enum ResourceType {
21
+ /** Secret scope for secure credential storage */
22
+ SECRET = "secret",
23
+ /** Databricks Job for scheduled or triggered workflows */
24
+ JOB = "job",
25
+ /** Databricks SQL Warehouse for query execution */
26
+ SQL_WAREHOUSE = "sql_warehouse",
27
+ /** Model serving endpoint for ML inference */
28
+ SERVING_ENDPOINT = "serving_endpoint",
29
+ /** Unity Catalog Volume for file storage */
30
+ VOLUME = "volume",
31
+ /** Vector Search Index for similarity search */
32
+ VECTOR_SEARCH_INDEX = "vector_search_index",
33
+ /** Unity Catalog Function */
34
+ UC_FUNCTION = "uc_function",
35
+ /** Unity Catalog Connection for external data sources */
36
+ UC_CONNECTION = "uc_connection",
37
+ /** Database (Lakebase) for persistent storage */
38
+ DATABASE = "database",
39
+ /** Genie Space for AI assistant */
40
+ GENIE_SPACE = "genie_space",
41
+ /** MLflow Experiment for ML tracking */
42
+ EXPERIMENT = "experiment",
43
+ /** Databricks App dependency */
44
+ APP = "app",
45
+ }
46
+ /** Permissions for SECRET resources */
47
+ type SecretPermission = "MANAGE" | "READ" | "WRITE";
48
+ /** Permissions for JOB resources */
49
+ type JobPermission = "CAN_MANAGE" | "CAN_MANAGE_RUN" | "CAN_VIEW";
50
+ /** Permissions for SQL_WAREHOUSE resources */
51
+ type SqlWarehousePermission = "CAN_MANAGE" | "CAN_USE";
52
+ /** Permissions for SERVING_ENDPOINT resources */
53
+ type ServingEndpointPermission = "CAN_MANAGE" | "CAN_QUERY" | "CAN_VIEW";
54
+ /** Permissions for VOLUME resources */
55
+ type VolumePermission = "READ_VOLUME" | "WRITE_VOLUME";
56
+ /** Permissions for VECTOR_SEARCH_INDEX resources */
57
+ type VectorSearchIndexPermission = "SELECT";
58
+ /** Permissions for UC_FUNCTION resources */
59
+ type UcFunctionPermission = "EXECUTE";
60
+ /** Permissions for UC_CONNECTION resources */
61
+ type UcConnectionPermission = "USE_CONNECTION";
62
+ /** Permissions for DATABASE resources */
63
+ type DatabasePermission = "CAN_CONNECT_AND_CREATE";
64
+ /** Permissions for GENIE_SPACE resources */
65
+ type GenieSpacePermission = "CAN_EDIT" | "CAN_VIEW" | "CAN_RUN" | "CAN_MANAGE";
66
+ /** Permissions for EXPERIMENT resources */
67
+ type ExperimentPermission = "CAN_READ" | "CAN_EDIT" | "CAN_MANAGE";
68
+ /** Permissions for APP resources */
69
+ type AppPermission = "CAN_USE";
70
+ /**
71
+ * Union of all possible permission levels across all resource types.
72
+ */
73
+ type ResourcePermission = SecretPermission | JobPermission | SqlWarehousePermission | ServingEndpointPermission | VolumePermission | VectorSearchIndexPermission | UcFunctionPermission | UcConnectionPermission | DatabasePermission | GenieSpacePermission | ExperimentPermission | AppPermission;
74
+ /**
75
+ * Defines a single field for a resource. Each field has its own environment variable and optional description.
76
+ * Single-value types use one key (e.g. id); multi-value types (database, secret) use multiple (e.g. instance_name, database_name or scope, key).
77
+ */
78
+ interface ResourceFieldEntry {
79
+ /** Environment variable name for this field */
80
+ env: string;
81
+ /** Human-readable description for this field */
82
+ description?: string;
83
+ }
84
+ /**
85
+ * Declares a resource requirement for a plugin.
86
+ * Can be defined statically in a manifest or dynamically via getResourceRequirements().
87
+ */
88
+ interface ResourceRequirement {
89
+ /** Type of Databricks resource required */
90
+ type: ResourceType;
91
+ /** Unique alias for this resource within the plugin (e.g., 'warehouse', 'secrets'). Used for UI/display. */
92
+ alias: string;
93
+ /** Stable key for machine use (env naming, composite keys, app.yaml). Required. */
94
+ resourceKey: string;
95
+ /** Human-readable description of why this resource is needed */
96
+ description: string;
97
+ /** Required permission level for the resource */
98
+ permission: ResourcePermission;
99
+ /**
100
+ * Map of field name to env and optional description.
101
+ * Single-value types use one key (e.g. id); multi-value (database, secret) use multiple keys.
102
+ */
103
+ fields: Record<string, ResourceFieldEntry>;
104
+ /** Whether this resource is required (true) or optional (false) */
105
+ required: boolean;
106
+ }
107
+ /**
108
+ * Internal representation of a resource in the registry.
109
+ * Extends ResourceRequirement with resolution state and plugin ownership.
110
+ */
111
+ interface ResourceEntry extends ResourceRequirement {
112
+ /** Plugin(s) that require this resource (comma-separated if multiple) */
113
+ plugin: string;
114
+ /** Whether the resource has been resolved (all field env vars set) */
115
+ resolved: boolean;
116
+ /** Resolved value per field name. Populated by validate() when all field env vars are set. */
117
+ values?: Record<string, string>;
118
+ /**
119
+ * Per-plugin permission tracking.
120
+ * Maps plugin name to the permission it originally requested.
121
+ * Populated when multiple plugins share the same resource.
122
+ */
123
+ permissionSources?: Record<string, ResourcePermission>;
124
+ }
125
+ /**
126
+ * Result of validating all registered resources against the environment.
127
+ */
128
+ interface ValidationResult {
129
+ /** Whether all required resources are available */
130
+ valid: boolean;
131
+ /** List of missing required resources */
132
+ missing: ResourceEntry[];
133
+ /** Complete list of all registered resources (required and optional) */
134
+ all: ResourceEntry[];
135
+ }
136
+ /**
137
+ * Configuration schema definition for plugin config.
138
+ * Re-exported from the standard JSON Schema Draft 7 types.
139
+ *
140
+ * @see {@link https://json-schema.org/draft-07/json-schema-release-notes | JSON Schema Draft 7}
141
+ */
142
+ type ConfigSchema = JSONSchema7;
143
+ /**
144
+ * Plugin manifest that declares metadata and resource requirements.
145
+ * Attached to plugin classes as a static property.
146
+ */
147
+ interface PluginManifest {
148
+ /** Plugin identifier (matches plugin.name) */
149
+ name: string;
150
+ /** Human-readable display name for UI/CLI */
151
+ displayName: string;
152
+ /** Brief description of what the plugin does */
153
+ description: string;
154
+ /**
155
+ * Resource requirements declaration
156
+ */
157
+ resources: {
158
+ /** Resources that must be available for the plugin to function */
159
+ required: Omit<ResourceRequirement, "required">[];
160
+ /** Resources that enhance functionality but are not mandatory */
161
+ optional: Omit<ResourceRequirement, "required">[];
162
+ };
163
+ /**
164
+ * Configuration schema for the plugin.
165
+ * Defines the shape and validation rules for plugin config.
166
+ */
167
+ config?: {
168
+ schema: ConfigSchema;
169
+ };
170
+ /**
171
+ * Optional metadata for community plugins
172
+ */
173
+ author?: string;
174
+ version?: string;
175
+ repository?: string;
176
+ keywords?: string[];
177
+ license?: string;
178
+ }
179
+ //#endregion
180
+ export { ConfigSchema, PluginManifest, ResourceEntry, ResourceFieldEntry, ResourcePermission, ResourceRequirement, ResourceType, ValidationResult };
181
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","names":[],"sources":["../../src/registry/types.ts"],"sourcesContent":[],"mappings":";;;;;;;AAgBA;AA2CA;AAGA;AAGA;AAGA;AAGA;AAGA;AAGA;AAGA;AAGA;AAGA;AAOA;AAGY,aAhFA,YAAA;EAqFA;EAAkB,MAAA,GAAA,QAAA;;KAE1B,GAAA,KAAA;;eAEA,GAAA,eAAA;;kBAEA,GAAA,kBAAA;;QAEA,GAAA,QAAA;;qBAEA,GAAA,qBAAA;;aAEA,GAAA,aAAA;EAAa;EAmCA,aAAA,GAAA,eAAkB;EAWlB;EAAmB,QAAA,GAAA,UAAA;;aActB,GAAA,aAAA;;YAMJ,GAAA,YAAA;EAAM;EAUC,GAAA,GAAA,KAAA;;;AAeoB,KAjJzB,gBAAA,GAiJyB,QAAA,GAAA,MAAA,GAAA,OAAA;;AAfE,KA/H3B,aAAA,GA+H2B,YAAA,GAAA,gBAAA,GAAA,UAAA;;AAqBtB,KAjJL,sBAAA,GAiJqB,YAAA,GAAA,SAAA;;AAKtB,KAnJC,yBAAA,GAmJD,YAAA,GAAA,WAAA,GAAA,UAAA;;AAGS,KAnJR,gBAAA,GAmJQ,aAAA,GAAA,cAAA;AAWpB;AAMiB,KAjKL,2BAAA,GAiKmB,QAAA;;AAeZ,KA7KP,oBAAA,GA6KO,SAAA;;AAGA,KA7KP,sBAAA,GA6KO,gBAAA;;AAQP,KAlLA,kBAAA,GAkLA,wBAAA;;KA/KA,oBAAA;;KAOA,oBAAA;;KAGA,aAAA;;;;KAKA,kBAAA,GACR,mBACA,gBACA,yBACA,4BACA,mBACA,8BACA,uBACA,yBACA,qBACA,uBACA,uBACA;;;;;UAmCa,kBAAA;;;;;;;;;;UAWA,mBAAA;;QAET;;;;;;;;cAYM;;;;;UAMJ,eAAe;;;;;;;;UAUR,aAAA,SAAsB;;;;;;WAQ5B;;;;;;sBAOW,eAAe;;;;;UAMpB,gBAAA;;;;WAKN;;OAGJ;;;;;;;;KAWK,YAAA,GAAe;;;;;UAMV,cAAA;;;;;;;;;;;;cAeH,KAAK;;cAGL,KAAK;;;;;;;YAQP"}
@@ -0,0 +1,89 @@
1
+ //#region src/registry/types.ts
2
+ /**
3
+ * Resource Registry Type System
4
+ *
5
+ * This module defines the type system for the AppKit Resource Registry,
6
+ * which enables plugins to declare their Databricks resource requirements
7
+ * in a machine-readable format.
8
+ *
9
+ * Resource types are exposed as first-class citizens with their specific
10
+ * permissions, making it simple for users to declare dependencies.
11
+ * Internal tooling handles conversion to Databricks app.yaml format.
12
+ */
13
+ /**
14
+ * Supported resource types that plugins can depend on.
15
+ * Each type has its own set of valid permissions.
16
+ */
17
+ let ResourceType = /* @__PURE__ */ function(ResourceType) {
18
+ /** Secret scope for secure credential storage */
19
+ ResourceType["SECRET"] = "secret";
20
+ /** Databricks Job for scheduled or triggered workflows */
21
+ ResourceType["JOB"] = "job";
22
+ /** Databricks SQL Warehouse for query execution */
23
+ ResourceType["SQL_WAREHOUSE"] = "sql_warehouse";
24
+ /** Model serving endpoint for ML inference */
25
+ ResourceType["SERVING_ENDPOINT"] = "serving_endpoint";
26
+ /** Unity Catalog Volume for file storage */
27
+ ResourceType["VOLUME"] = "volume";
28
+ /** Vector Search Index for similarity search */
29
+ ResourceType["VECTOR_SEARCH_INDEX"] = "vector_search_index";
30
+ /** Unity Catalog Function */
31
+ ResourceType["UC_FUNCTION"] = "uc_function";
32
+ /** Unity Catalog Connection for external data sources */
33
+ ResourceType["UC_CONNECTION"] = "uc_connection";
34
+ /** Database (Lakebase) for persistent storage */
35
+ ResourceType["DATABASE"] = "database";
36
+ /** Genie Space for AI assistant */
37
+ ResourceType["GENIE_SPACE"] = "genie_space";
38
+ /** MLflow Experiment for ML tracking */
39
+ ResourceType["EXPERIMENT"] = "experiment";
40
+ /** Databricks App dependency */
41
+ ResourceType["APP"] = "app";
42
+ return ResourceType;
43
+ }({});
44
+ /**
45
+ * Permission hierarchy per resource type (weakest to strongest).
46
+ * Used to compare permissions when merging; higher index = more permissive.
47
+ * Unknown permissions are treated as less than any known permission.
48
+ */
49
+ const PERMISSION_HIERARCHY_BY_TYPE = {
50
+ [ResourceType.SECRET]: [
51
+ "READ",
52
+ "WRITE",
53
+ "MANAGE"
54
+ ],
55
+ [ResourceType.JOB]: [
56
+ "CAN_VIEW",
57
+ "CAN_MANAGE_RUN",
58
+ "CAN_MANAGE"
59
+ ],
60
+ [ResourceType.SQL_WAREHOUSE]: ["CAN_USE", "CAN_MANAGE"],
61
+ [ResourceType.SERVING_ENDPOINT]: [
62
+ "CAN_VIEW",
63
+ "CAN_QUERY",
64
+ "CAN_MANAGE"
65
+ ],
66
+ [ResourceType.VOLUME]: ["READ_VOLUME", "WRITE_VOLUME"],
67
+ [ResourceType.VECTOR_SEARCH_INDEX]: ["SELECT"],
68
+ [ResourceType.UC_FUNCTION]: ["EXECUTE"],
69
+ [ResourceType.UC_CONNECTION]: ["USE_CONNECTION"],
70
+ [ResourceType.DATABASE]: ["CAN_CONNECT_AND_CREATE"],
71
+ [ResourceType.GENIE_SPACE]: [
72
+ "CAN_VIEW",
73
+ "CAN_RUN",
74
+ "CAN_EDIT",
75
+ "CAN_MANAGE"
76
+ ],
77
+ [ResourceType.EXPERIMENT]: [
78
+ "CAN_READ",
79
+ "CAN_EDIT",
80
+ "CAN_MANAGE"
81
+ ],
82
+ [ResourceType.APP]: ["CAN_USE"]
83
+ };
84
+ /** Set of valid permissions per type (for validation). */
85
+ const PERMISSIONS_BY_TYPE = PERMISSION_HIERARCHY_BY_TYPE;
86
+
87
+ //#endregion
88
+ export { PERMISSIONS_BY_TYPE, PERMISSION_HIERARCHY_BY_TYPE, ResourceType };
89
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../src/registry/types.ts"],"sourcesContent":["/**\n * Resource Registry Type System\n *\n * This module defines the type system for the AppKit Resource Registry,\n * which enables plugins to declare their Databricks resource requirements\n * in a machine-readable format.\n *\n * Resource types are exposed as first-class citizens with their specific\n * permissions, making it simple for users to declare dependencies.\n * Internal tooling handles conversion to Databricks app.yaml format.\n */\n\n/**\n * Supported resource types that plugins can depend on.\n * Each type has its own set of valid permissions.\n */\nexport enum ResourceType {\n /** Secret scope for secure credential storage */\n SECRET = \"secret\",\n\n /** Databricks Job for scheduled or triggered workflows */\n JOB = \"job\",\n\n /** Databricks SQL Warehouse for query execution */\n SQL_WAREHOUSE = \"sql_warehouse\",\n\n /** Model serving endpoint for ML inference */\n SERVING_ENDPOINT = \"serving_endpoint\",\n\n /** Unity Catalog Volume for file storage */\n VOLUME = \"volume\",\n\n /** Vector Search Index for similarity search */\n VECTOR_SEARCH_INDEX = \"vector_search_index\",\n\n /** Unity Catalog Function */\n UC_FUNCTION = \"uc_function\",\n\n /** Unity Catalog Connection for external data sources */\n UC_CONNECTION = \"uc_connection\",\n\n /** Database (Lakebase) for persistent storage */\n DATABASE = \"database\",\n\n /** Genie Space for AI assistant */\n GENIE_SPACE = \"genie_space\",\n\n /** MLflow Experiment for ML tracking */\n EXPERIMENT = \"experiment\",\n\n /** Databricks App dependency */\n APP = \"app\",\n}\n\n// ============================================================================\n// Permissions per resource type\n// ============================================================================\n\n/** Permissions for SECRET resources */\nexport type SecretPermission = \"MANAGE\" | \"READ\" | \"WRITE\";\n\n/** Permissions for JOB resources */\nexport type JobPermission = \"CAN_MANAGE\" | \"CAN_MANAGE_RUN\" | \"CAN_VIEW\";\n\n/** Permissions for SQL_WAREHOUSE resources */\nexport type SqlWarehousePermission = \"CAN_MANAGE\" | \"CAN_USE\";\n\n/** Permissions for SERVING_ENDPOINT resources */\nexport type ServingEndpointPermission = \"CAN_MANAGE\" | \"CAN_QUERY\" | \"CAN_VIEW\";\n\n/** Permissions for VOLUME resources */\nexport type VolumePermission = \"READ_VOLUME\" | \"WRITE_VOLUME\";\n\n/** Permissions for VECTOR_SEARCH_INDEX resources */\nexport type VectorSearchIndexPermission = \"SELECT\";\n\n/** Permissions for UC_FUNCTION resources */\nexport type UcFunctionPermission = \"EXECUTE\";\n\n/** Permissions for UC_CONNECTION resources */\nexport type UcConnectionPermission = \"USE_CONNECTION\";\n\n/** Permissions for DATABASE resources */\nexport type DatabasePermission = \"CAN_CONNECT_AND_CREATE\";\n\n/** Permissions for GENIE_SPACE resources */\nexport type GenieSpacePermission =\n | \"CAN_EDIT\"\n | \"CAN_VIEW\"\n | \"CAN_RUN\"\n | \"CAN_MANAGE\";\n\n/** Permissions for EXPERIMENT resources */\nexport type ExperimentPermission = \"CAN_READ\" | \"CAN_EDIT\" | \"CAN_MANAGE\";\n\n/** Permissions for APP resources */\nexport type AppPermission = \"CAN_USE\";\n\n/**\n * Union of all possible permission levels across all resource types.\n */\nexport type ResourcePermission =\n | SecretPermission\n | JobPermission\n | SqlWarehousePermission\n | ServingEndpointPermission\n | VolumePermission\n | VectorSearchIndexPermission\n | UcFunctionPermission\n | UcConnectionPermission\n | DatabasePermission\n | GenieSpacePermission\n | ExperimentPermission\n | AppPermission;\n\n/**\n * Permission hierarchy per resource type (weakest to strongest).\n * Used to compare permissions when merging; higher index = more permissive.\n * Unknown permissions are treated as less than any known permission.\n */\nexport const PERMISSION_HIERARCHY_BY_TYPE: Record<\n ResourceType,\n readonly ResourcePermission[]\n> = {\n [ResourceType.SECRET]: [\"READ\", \"WRITE\", \"MANAGE\"],\n [ResourceType.JOB]: [\"CAN_VIEW\", \"CAN_MANAGE_RUN\", \"CAN_MANAGE\"],\n [ResourceType.SQL_WAREHOUSE]: [\"CAN_USE\", \"CAN_MANAGE\"],\n [ResourceType.SERVING_ENDPOINT]: [\"CAN_VIEW\", \"CAN_QUERY\", \"CAN_MANAGE\"],\n [ResourceType.VOLUME]: [\"READ_VOLUME\", \"WRITE_VOLUME\"],\n [ResourceType.VECTOR_SEARCH_INDEX]: [\"SELECT\"],\n [ResourceType.UC_FUNCTION]: [\"EXECUTE\"],\n [ResourceType.UC_CONNECTION]: [\"USE_CONNECTION\"],\n [ResourceType.DATABASE]: [\"CAN_CONNECT_AND_CREATE\"],\n [ResourceType.GENIE_SPACE]: [\"CAN_VIEW\", \"CAN_RUN\", \"CAN_EDIT\", \"CAN_MANAGE\"],\n [ResourceType.EXPERIMENT]: [\"CAN_READ\", \"CAN_EDIT\", \"CAN_MANAGE\"],\n [ResourceType.APP]: [\"CAN_USE\"],\n} as const;\n\n/** Set of valid permissions per type (for validation). */\nexport const PERMISSIONS_BY_TYPE: Record<\n ResourceType,\n readonly ResourcePermission[]\n> = PERMISSION_HIERARCHY_BY_TYPE;\n\n/**\n * Defines a single field for a resource. Each field has its own environment variable and optional description.\n * Single-value types use one key (e.g. id); multi-value types (database, secret) use multiple (e.g. instance_name, database_name or scope, key).\n */\nexport interface ResourceFieldEntry {\n /** Environment variable name for this field */\n env: string;\n /** Human-readable description for this field */\n description?: string;\n}\n\n/**\n * Declares a resource requirement for a plugin.\n * Can be defined statically in a manifest or dynamically via getResourceRequirements().\n */\nexport interface ResourceRequirement {\n /** Type of Databricks resource required */\n type: ResourceType;\n\n /** Unique alias for this resource within the plugin (e.g., 'warehouse', 'secrets'). Used for UI/display. */\n alias: string;\n\n /** Stable key for machine use (env naming, composite keys, app.yaml). Required. */\n resourceKey: string;\n\n /** Human-readable description of why this resource is needed */\n description: string;\n\n /** Required permission level for the resource */\n permission: ResourcePermission;\n\n /**\n * Map of field name to env and optional description.\n * Single-value types use one key (e.g. id); multi-value (database, secret) use multiple keys.\n */\n fields: Record<string, ResourceFieldEntry>;\n\n /** Whether this resource is required (true) or optional (false) */\n required: boolean;\n}\n\n/**\n * Internal representation of a resource in the registry.\n * Extends ResourceRequirement with resolution state and plugin ownership.\n */\nexport interface ResourceEntry extends ResourceRequirement {\n /** Plugin(s) that require this resource (comma-separated if multiple) */\n plugin: string;\n\n /** Whether the resource has been resolved (all field env vars set) */\n resolved: boolean;\n\n /** Resolved value per field name. Populated by validate() when all field env vars are set. */\n values?: Record<string, string>;\n\n /**\n * Per-plugin permission tracking.\n * Maps plugin name to the permission it originally requested.\n * Populated when multiple plugins share the same resource.\n */\n permissionSources?: Record<string, ResourcePermission>;\n}\n\n/**\n * Result of validating all registered resources against the environment.\n */\nexport interface ValidationResult {\n /** Whether all required resources are available */\n valid: boolean;\n\n /** List of missing required resources */\n missing: ResourceEntry[];\n\n /** Complete list of all registered resources (required and optional) */\n all: ResourceEntry[];\n}\n\nimport type { JSONSchema7 } from \"json-schema\";\n\n/**\n * Configuration schema definition for plugin config.\n * Re-exported from the standard JSON Schema Draft 7 types.\n *\n * @see {@link https://json-schema.org/draft-07/json-schema-release-notes | JSON Schema Draft 7}\n */\nexport type ConfigSchema = JSONSchema7;\n\n/**\n * Plugin manifest that declares metadata and resource requirements.\n * Attached to plugin classes as a static property.\n */\nexport interface PluginManifest {\n /** Plugin identifier (matches plugin.name) */\n name: string;\n\n /** Human-readable display name for UI/CLI */\n displayName: string;\n\n /** Brief description of what the plugin does */\n description: string;\n\n /**\n * Resource requirements declaration\n */\n resources: {\n /** Resources that must be available for the plugin to function */\n required: Omit<ResourceRequirement, \"required\">[];\n\n /** Resources that enhance functionality but are not mandatory */\n optional: Omit<ResourceRequirement, \"required\">[];\n };\n\n /**\n * Configuration schema for the plugin.\n * Defines the shape and validation rules for plugin config.\n */\n config?: {\n schema: ConfigSchema;\n };\n\n /**\n * Optional metadata for community plugins\n */\n author?: string;\n version?: string;\n repository?: string;\n keywords?: string[];\n license?: string;\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAgBA,IAAY,sDAAL;;AAEL;;AAGA;;AAGA;;AAGA;;AAGA;;AAGA;;AAGA;;AAGA;;AAGA;;AAGA;;AAGA;;AAGA;;;;;;;;AAqEF,MAAa,+BAGT;EACD,aAAa,SAAS;EAAC;EAAQ;EAAS;EAAS;EACjD,aAAa,MAAM;EAAC;EAAY;EAAkB;EAAa;EAC/D,aAAa,gBAAgB,CAAC,WAAW,aAAa;EACtD,aAAa,mBAAmB;EAAC;EAAY;EAAa;EAAa;EACvE,aAAa,SAAS,CAAC,eAAe,eAAe;EACrD,aAAa,sBAAsB,CAAC,SAAS;EAC7C,aAAa,cAAc,CAAC,UAAU;EACtC,aAAa,gBAAgB,CAAC,iBAAiB;EAC/C,aAAa,WAAW,CAAC,yBAAyB;EAClD,aAAa,cAAc;EAAC;EAAY;EAAW;EAAY;EAAa;EAC5E,aAAa,aAAa;EAAC;EAAY;EAAY;EAAa;EAChE,aAAa,MAAM,CAAC,UAAU;CAChC;;AAGD,MAAa,sBAGT"}
@@ -1,11 +1,11 @@
1
1
  import express from "express";
2
+ import { JSONSchema7 } from "json-schema";
2
3
 
3
4
  //#region ../shared/src/plugin.d.ts
4
5
  /** Base plugin interface. */
5
6
  interface BasePlugin {
6
7
  name: string;
7
8
  abortActiveOperations?(): void;
8
- validateEnv(): void;
9
9
  setup(): Promise<void>;
10
10
  injectRoutes(router: express.Router): void;
11
11
  getEndpoints(): PluginEndpointMap;
@@ -24,10 +24,75 @@ type TelemetryOptions = boolean | {
24
24
  logs?: boolean;
25
25
  };
26
26
  type PluginPhase = "core" | "normal" | "deferred";
27
+ /**
28
+ * Plugin constructor with required manifest declaration.
29
+ * All plugins must declare a manifest with their metadata and resource requirements.
30
+ */
27
31
  type PluginConstructor<C = BasePluginConfig, I extends BasePlugin = BasePlugin> = (new (config: C) => I) & {
28
32
  DEFAULT_CONFIG?: Record<string, unknown>;
29
33
  phase?: PluginPhase;
34
+ /**
35
+ * Static manifest declaring plugin metadata and resource requirements.
36
+ * Required for all plugins.
37
+ */
38
+ manifest: PluginManifest;
39
+ /**
40
+ * Optional runtime resource requirements based on config.
41
+ * Use this when resource requirements depend on plugin configuration.
42
+ */
43
+ getResourceRequirements?(config: C): ResourceRequirement[];
30
44
  };
45
+ /**
46
+ * Manifest declaration for plugins (imported from registry types).
47
+ * Re-exported here to avoid circular dependencies.
48
+ */
49
+ interface PluginManifest {
50
+ name: string;
51
+ displayName: string;
52
+ description: string;
53
+ resources: {
54
+ required: Omit<ResourceRequirement, "required">[];
55
+ optional: Omit<ResourceRequirement, "required">[];
56
+ };
57
+ config?: {
58
+ schema: JSONSchema7;
59
+ };
60
+ author?: string;
61
+ version?: string;
62
+ repository?: string;
63
+ keywords?: string[];
64
+ license?: string;
65
+ }
66
+ /**
67
+ * Defines a single field for a resource.
68
+ * Each field maps to its own environment variable and optional description.
69
+ * Single-value types use one key (e.g. id); multi-value types (database, secret)
70
+ * use multiple (e.g. instance_name, database_name or scope, key).
71
+ */
72
+ interface ResourceFieldEntry {
73
+ /** Environment variable name for this field */
74
+ env: string;
75
+ /** Human-readable description for this field */
76
+ description?: string;
77
+ }
78
+ /**
79
+ * Resource requirement declaration (imported from registry types).
80
+ * Re-exported here to avoid circular dependencies.
81
+ */
82
+ interface ResourceRequirement {
83
+ type: string;
84
+ alias: string;
85
+ /** Stable key for machine use (env naming, composite keys, app.yaml). */
86
+ resourceKey: string;
87
+ description: string;
88
+ permission: string;
89
+ /**
90
+ * Map of field name to env and optional description.
91
+ * Single-value types use one key (e.g. id); multi-value (database, secret) use multiple keys.
92
+ */
93
+ fields: Record<string, ResourceFieldEntry>;
94
+ required: boolean;
95
+ }
31
96
  /**
32
97
  * Extracts the exports type from a plugin.
33
98
  * This is the return type of the plugin's exports() method.
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","names":[],"sources":["../../../../shared/src/plugin.ts"],"sourcesContent":[],"mappings":";;;;UAGiB,UAAA;EAAA,IAAA,EAAA,MAAA;EAAU,qBAAA,GAAA,EAAA,IAAA;aAOhB,EAAA,EAAA,IAAA;OAEY,EAAA,EAFZ,OAEoB,CAAA,IAAA,CAAA;cAEb,CAAA,MAAA,EAFK,OAAA,CAAQ,MAEb,CAAA,EAAA,IAAA;EAAiB,YAAA,EAAA,EAAjB,iBAAiB;EAMlB,OAAA,GAAA,EAAA,OAAgB;AAajC;AAaA;AAEY,UA5BK,gBAAA,CA4BY;EAAA,IAAA,CAAA,EAAA,MAAA;MACvB,CAAA,EAAA,MAAA;MACM,EAAA,MAAA,CAAA,EAAA,OAAA;WAAa,CAAA,EApBX,gBAoBW;;AAGpB,KApBO,gBAAA,GAoBP,OAAA,GAAA;QACc,CAAA,EAAA,OAAA;SACT,CAAA,EAAA,OAAA;EAAW,IAAA,CAAA,EAAA,OAAA;AAoCrB,CAAA;AAC2C,KA9C/B,WAAA,GA8C+B,MAAA,GAAA,QAAA,GAAA,UAAA;AAAM,KA5CrC,iBA4CqC,CAAA,IA3C3C,gBA2C2C,EAAA,UA1CrC,UA0CqC,GA1CxB,UA0CwB,CAAA,GAAA,CAAA,KAAA,MAAA,EAxCvC,CAwCuC,EAAA,GAvC5C,CAuC4C,CAAA,GAAA;EAMrC,cAAU,CAAA,EA5CH,MA4CG,CAAA,MAAA,EAAA,OAAA,CAAA;EAAA,KAAA,CAAA,EA3CZ,WA2CY;;;;;AAuBtB;;AACW,KA/BC,aA+BD,CAAA,UA/ByB,UA+BzB,CAAA,GA9BT,CA8BS,CAAA,SAAA,CAAA,UAAA,GAAA,GAAA,KAAA,EAAA,IA9B4B,CA8B5B,GA9BgC,MA8BhC,CAAA,MAAA,EAAA,KAAA,CAAA;;;;;AACI,KAzBH,UAyBG,CAAA,GAAA,CAAA,GAzBe,GAyBf,GAAA;EAGH;AACZ;AACA;AAEA;AAEA;EAAuB,MAAA,EAAA,CAAA,GAAA,EA5BP,WA4BO,EAAA,GA5BS,GA4BT;;;;;;AASvB;KA7BY,6BACS,WAAW,iDAExB,aAAa,YAAY,WAC7B,cAAc,aAAa;KAInB;UAAgC;UAAW;QAAS;;KACpD,6CACD,MACN,WAAW,GAAG,GAAG;;KAGV,UAAA,GAAa,OAAA,CAAQ;KACrB,YAAA,GAAe,OAAA,CAAQ;KACvB,WAAA,GAAc,OAAA,CAAQ;KAEtB,UAAA;KAEA,WAAA;;;UAGF;;iBAEO,kBAAkB,iBAAiB;;;KAIxC,iBAAA,GAAoB"}
1
+ {"version":3,"file":"plugin.d.ts","names":[],"sources":["../../../../shared/src/plugin.ts"],"sourcesContent":[],"mappings":";;;;;UAIiB,UAAA;EAAA,IAAA,EAAA,MAAA;EAAU,qBAAA,GAAA,EAAA,IAAA;OAKhB,EAAA,EAAA,OAAA,CAAA,IAAA,CAAA;cAEoB,CAAA,MAAA,EAAR,OAAA,CAAQ,MAAA,CAAA,EAAA,IAAA;cAEb,EAAA,EAAA,iBAAA;EAAiB,OAAA,GAAA,EAAA,OAAA;AAMnC;AAaA;AAaY,UA1BK,gBAAA,CA0BM;EAMX,IAAA,CAAA,EAAA,MAAA;EAAiB,IAAA,CAAA,EAAA,MAAA;MACvB,EAAA,MAAA,CAAA,EAAA,OAAA;WACM,CAAA,EAxBE,gBAwBF;;AAEF,KAvBE,gBAAA,GAuBF,OAAA,GAAA;QACL,CAAA,EAAA,OAAA;SACc,CAAA,EAAA,OAAA;MACT,CAAA,EAAA,OAAA;;AAiBqB,KA9BnB,WAAA,GA8BmB,MAAA,GAAA,QAAA,GAAA,UAAA;;;;;AASnB,KAjCA,iBAiCA,CAAA,IAhCN,gBAgCM,EAAA,UA/BA,UA+BA,GA/Ba,UA+Bb,CAAA,GAAA,CAAA,KAAA,MAAA,EA7BF,CA6BE,EAAA,GA5BP,CA4BO,CAAA,GAAA;EAAW,cAAA,CAAA,EA3BJ,MA2BI,CAAA,MAAA,EAAA,OAAA,CAAA;EAeN,KAAA,CAAA,EAzCP,WAyCO;EAWA;;;;EAWD,QAAA,EA1DJ,cA0DI;EAqCJ;;;;yBAC2B,EAAA,MAAA,EA3FJ,CA2FI,CAAA,EA3FA,mBA2FA,EAAA;;;AAMvC;;;AAMgB,UAhGC,cAAA,CAgGD;MAAgB,EAAA,MAAA;EAAG,WAAA,EAAA,MAAA;EAQvB,WAAA,EAAS,MAAA;EAAA,SAAA,EAAA;IACW,QAAA,EApGlB,IAoGkB,CApGb,mBAoGa,EAAA,UAAA,CAAA,EAAA;IAAX,QAAA,EAnGP,IAmGO,CAnGF,mBAmGE,EAAA,UAAA,CAAA,EAAA;;QAEA,CAAA,EAAA;IACU,MAAA,EAnGnB,WAmGmB;;QAA3B,CAAA,EAAA,MAAA;SAD6B,CAAA,EAAA,MAAA;EAAU,UAAA,CAAA,EAAA,MAAA;EAK/B,QAAA,CAAA,EAAA,MAAU,EAAA;EAAA,OAAA,CAAA,EAAA,MAAA;;;;;AACtB;;;AAEgB,UA3FC,kBAAA,CA2FD;;KAAM,EAAA,MAAA;;EAAP,WAAA,CAAA,EAAA,MAAA;AAGf;AACA;AACA;AAEA;AAEA;AAAuB,UAzFN,mBAAA,CAyFM;MAGb,EAAA,MAAA;OAEO,EAAA,MAAA;;aAAmC,EAAA,MAAA;EAAO,WAAA,EAAA,MAAA;EAI/C,UAAA,EAAA,MAAA;;;;;UAvFF,eAAe;;;;;;;;KAqCb,wBAAwB,cAClC,uCAAqC,IAAI;;;;;KAM/B,kBAAkB;;;;;;gBAMd,gBAAgB;;;;;;;KAQpB,6BACS,WAAW,iDAExB,aAAa,YAAY,WAC7B,cAAc,aAAa;KAInB;UAAgC;UAAW;QAAS;;KACpD,6CACD,MACN,WAAW,GAAG,GAAG;;KAGV,UAAA,GAAa,OAAA,CAAQ;KACrB,YAAA,GAAe,OAAA,CAAQ;KACvB,WAAA,GAAc,OAAA,CAAQ;KAEtB,UAAA;KAEA,WAAA;;;UAGF;;iBAEO,kBAAkB,iBAAiB;;;KAIxC,iBAAA,GAAoB"}
@@ -3,15 +3,15 @@
3
3
  <head>
4
4
  <meta charset="UTF-8">
5
5
  <meta name="generator" content="Docusaurus v3.9.2">
6
- <title data-rh="true">Abstract Class: AppKitError | AppKit</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://databricks.github.io/appkit/docs/api/appkit/Class.AppKitError"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="keywords" content="Databricks Apps, Node.js, React.js, SDK, TypeScript, SQL, Databricks, AI, full-stack, development"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Abstract Class: AppKitError | AppKit"><meta data-rh="true" name="description" content="Base error class for all AppKit errors."><meta data-rh="true" property="og:description" content="Base error class for all AppKit errors."><link data-rh="true" rel="icon" href="/appkit/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://databricks.github.io/appkit/docs/api/appkit/Class.AppKitError"><link data-rh="true" rel="alternate" href="https://databricks.github.io/appkit/docs/api/appkit/Class.AppKitError" hreflang="en"><link data-rh="true" rel="alternate" href="https://databricks.github.io/appkit/docs/api/appkit/Class.AppKitError" hreflang="x-default"><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"API reference","item":"https://databricks.github.io/appkit/docs/api/"},{"@type":"ListItem","position":2,"name":"@databricks/appkit","item":"https://databricks.github.io/appkit/docs/api/appkit/"},{"@type":"ListItem","position":3,"name":"AppKitError","item":"https://databricks.github.io/appkit/docs/api/appkit/Class.AppKitError"}]}</script><link rel="stylesheet" href="/appkit/assets/css/styles.80363e45.css">
7
- <script src="/appkit/assets/js/runtime~main.1638dd61.js" defer="defer"></script>
8
- <script src="/appkit/assets/js/main.e55aba4f.js" defer="defer"></script>
6
+ <title data-rh="true">Abstract Class: AppKitError | AppKit</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://databricks.github.io/appkit/docs/api/appkit/Class.AppKitError"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="keywords" content="Databricks Apps, Node.js, React.js, SDK, TypeScript, SQL, Databricks, AI, full-stack, development"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="Abstract Class: AppKitError | AppKit"><meta data-rh="true" name="description" content="Base error class for all AppKit errors."><meta data-rh="true" property="og:description" content="Base error class for all AppKit errors."><link data-rh="true" rel="icon" href="/appkit/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://databricks.github.io/appkit/docs/api/appkit/Class.AppKitError"><link data-rh="true" rel="alternate" href="https://databricks.github.io/appkit/docs/api/appkit/Class.AppKitError" hreflang="en"><link data-rh="true" rel="alternate" href="https://databricks.github.io/appkit/docs/api/appkit/Class.AppKitError" hreflang="x-default"><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"API reference","item":"https://databricks.github.io/appkit/docs/api/"},{"@type":"ListItem","position":2,"name":"@databricks/appkit","item":"https://databricks.github.io/appkit/docs/api/appkit/"},{"@type":"ListItem","position":3,"name":"AppKitError","item":"https://databricks.github.io/appkit/docs/api/appkit/Class.AppKitError"}]}</script><link rel="stylesheet" href="/appkit/assets/css/styles.36a38b99.css">
7
+ <script src="/appkit/assets/js/runtime~main.2bcde09d.js" defer="defer"></script>
8
+ <script src="/appkit/assets/js/main.84fbe5b6.js" defer="defer"></script>
9
9
  </head>
10
10
  <body class="navigation-with-keyboard">
11
11
  <svg style="display: none;"><defs>
12
12
  <symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
13
13
  </defs></svg>
14
- <script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||(window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light")),document.documentElement.setAttribute("data-theme-choice",t||"system")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}(),document.documentElement.setAttribute("data-announcement-bar-initially-dismissed",function(){try{return"true"===localStorage.getItem("docusaurus.announcement.dismiss")}catch(t){}return!1}())</script><div id="__docusaurus"><link rel="preload" as="image" href="/appkit/img/logo.png"><div role="region" aria-label="Skip to main content"><a class="skipToContent_R3I2" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><div class="theme-announcement-bar announcementBar_Upl7" style="background-color:#f0f0f0;color:#000000" role="banner"><div class="announcementBarPlaceholder_Lvio"></div><div class="content_vq0X announcementBarContent_FIMQ">⚠️ AppKit is in an early development phase and is subject to change without notice. <strong>DO NOT</strong> use in production environments.</div><button type="button" aria-label="Close" class="clean-btn close closeButton_J8WU announcementBarClose_jD94"><svg viewBox="0 0 15 15" width="14" height="14"><g stroke="currentColor" stroke-width="3.1"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></button></div><nav aria-label="Main" class="theme-layout-navbar navbar navbar--fixed-top"><div class="navbar__inner"><div class="theme-layout-navbar-left navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/appkit/"><div class="navbar__logo"><img src="/appkit/img/logo.png" alt="AppKit" class="themedComponent_hkXO themedComponent--light_BgK8"><img src="/appkit/img/logo.png" alt="AppKit" class="themedComponent_hkXO themedComponent--dark_RKPt"></div><b class="navbar__title text--truncate">AppKit</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/appkit/docs/">Documentation</a><a class="navbar__item navbar__link" href="/appkit/contributing">Contributing</a></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><a href="https://github.com/databricks/appkit" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_miaU"><use href="#theme-svg-external-link"></use></svg></a><div class="toggle_eFYw colorModeToggle_EPbi"><button class="clean-btn toggleButton_HRKp toggleButtonDisabled_bICu" type="button" disabled="" title="system mode" aria-label="Switch between dark and light mode (currently system mode)"><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_brDO lightToggleIcon_vxPA"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_brDO darkToggleIcon_PZNO"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_brDO systemToggleIcon_A7x6"><path fill="currentColor" d="m12 21c4.971 0 9-4.029 9-9s-4.029-9-9-9-9 4.029-9 9 4.029 9 9 9zm4.95-13.95c1.313 1.313 2.05 3.093 2.05 4.95s-0.738 3.637-2.05 4.95c-1.313 1.313-3.093 2.05-4.95 2.05v-14c1.857 0 3.637 0.737 4.95 2.05z"></path></svg></button></div><div class="navbarSearchContainer_cVhq"><div class="navbar__search"><span aria-label="expand searchbar" role="button" class="search-icon" tabindex="0"></span><input id="search_input_react" type="search" placeholder="Loading..." aria-label="Search" class="navbar__search-input search-bar" disabled=""></div></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="theme-layout-main main-wrapper mainWrapper__Y_W"><div class="docsWrapper_cIfN"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_xQFv" type="button"></button><div class="docRoot_FHtD"><aside class="theme-doc-sidebar-container docSidebarContainer_dvCd"><div class="sidebarViewport_GeRf"><div class="sidebar_T8N1"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_uyE9 menuWithAnnouncementBar_Bucd"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/appkit/docs/"><span title="Getting started" class="linkLabel_hZzm">Getting started</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/appkit/docs/app-management"><span title="App management" class="linkLabel_hZzm">App management</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/appkit/docs/plugins"><span title="Plugins" class="linkLabel_hZzm">Plugins</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/appkit/docs/architecture"><span title="Architecture" class="linkLabel_hZzm">Architecture</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/appkit/docs/configuration"><span title="Configuration" class="linkLabel_hZzm">Configuration</span></a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="categoryLink_P6CU menu__link menu__link--sublist" href="/appkit/docs/category/development"><span title="Development" class="categoryLinkLabel_ShmP">Development</span></a><button aria-label="Collapse sidebar category &#x27;Development&#x27;" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/development/local-development"><span title="Local development" class="linkLabel_hZzm">Local development</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/development/ai-assisted-development"><span title="AI-Assisted development" class="linkLabel_hZzm">AI-Assisted development</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/development/"><span title="Development" class="linkLabel_hZzm">Development</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/development/remote-bridge"><span title="Remote Bridge" class="linkLabel_hZzm">Remote Bridge</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/development/project-setup"><span title="Project setup" class="linkLabel_hZzm">Project setup</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/development/type-generation"><span title="Type generation" class="linkLabel_hZzm">Type generation</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/development/llm-guide"><span title="LLM Guide" class="linkLabel_hZzm">LLM Guide</span></a></li></ul></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/appkit/docs/core-principles"><span title="Core principles" class="linkLabel_hZzm">Core principles</span></a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="categoryLink_P6CU menu__link menu__link--sublist menu__link--active" href="/appkit/docs/api/"><span title="API reference" class="categoryLinkLabel_ShmP">API reference</span></a><button aria-label="Collapse sidebar category &#x27;API reference&#x27;" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul class="menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="categoryLink_P6CU menu__link menu__link--sublist menu__link--active" tabindex="0" href="/appkit/docs/api/appkit/"><span title="@databricks/appkit" class="categoryLinkLabel_ShmP">@databricks/appkit</span></a><button aria-label="Collapse sidebar category &#x27;@databricks/appkit&#x27;" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/appkit/docs/api/appkit/Class.AppKitError"><span title="AppKitError" class="linkLabel_hZzm">AppKitError</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Class.AuthenticationError"><span title="AuthenticationError" class="linkLabel_hZzm">AuthenticationError</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Class.ConfigurationError"><span title="ConfigurationError" class="linkLabel_hZzm">ConfigurationError</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Class.ConnectionError"><span title="ConnectionError" class="linkLabel_hZzm">ConnectionError</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Class.ExecutionError"><span title="ExecutionError" class="linkLabel_hZzm">ExecutionError</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Class.InitializationError"><span title="InitializationError" class="linkLabel_hZzm">InitializationError</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Class.Plugin"><span title="Plugin" class="linkLabel_hZzm">Plugin</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Class.ServerError"><span title="ServerError" class="linkLabel_hZzm">ServerError</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Class.TunnelError"><span title="TunnelError" class="linkLabel_hZzm">TunnelError</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Class.ValidationError"><span title="ValidationError" class="linkLabel_hZzm">ValidationError</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-interface"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Interface.BasePluginConfig"><span title="BasePluginConfig" class="linkLabel_hZzm">BasePluginConfig</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-interface"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Interface.CacheConfig"><span title="CacheConfig" class="linkLabel_hZzm">CacheConfig</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-interface"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Interface.ITelemetry"><span title="ITelemetry" class="linkLabel_hZzm">ITelemetry</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-interface"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Interface.StreamExecutionSettings"><span title="StreamExecutionSettings" class="linkLabel_hZzm">StreamExecutionSettings</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-interface"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Interface.TelemetryConfig"><span title="TelemetryConfig" class="linkLabel_hZzm">TelemetryConfig</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-typealias"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/TypeAlias.IAppRouter"><span title="IAppRouter" class="linkLabel_hZzm">IAppRouter</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-variable"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Variable.sql"><span title="sql" class="linkLabel_hZzm">sql</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-function"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Function.appKitTypesPlugin"><span title="appKitTypesPlugin" class="linkLabel_hZzm">appKitTypesPlugin</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-function"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Function.createApp"><span title="createApp" class="linkLabel_hZzm">createApp</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-function"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Function.getExecutionContext"><span title="getExecutionContext" class="linkLabel_hZzm">getExecutionContext</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-function"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Function.isSQLTypeMarker"><span title="isSQLTypeMarker" class="linkLabel_hZzm">isSQLTypeMarker</span></a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="categoryLink_P6CU menu__link menu__link--sublist" tabindex="0" href="/appkit/docs/api/appkit-ui/"><span title="@databricks/appkit-ui" class="categoryLinkLabel_ShmP">@databricks/appkit-ui</span></a><button aria-label="Expand sidebar category &#x27;@databricks/appkit-ui&#x27;" aria-expanded="false" type="button" class="clean-btn menu__caret"></button></div></li></ul></li></ul></nav></div></div></aside><main class="docMainContainer_P5br"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_poBZ"><div class="docItemContainer_TdBg"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_bEIa" aria-label="Breadcrumbs"><ul class="breadcrumbs"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/appkit/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_sma7"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item"><a class="breadcrumbs__link" href="/appkit/docs/api/"><span>API reference</span></a></li><li class="breadcrumbs__item"><a class="breadcrumbs__link" href="/appkit/docs/api/appkit/"><span>@databricks/appkit</span></a></li><li class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link">AppKitError</span></li></ul></nav><div class="tocCollapsible_gJxE theme-doc-toc-mobile tocMobile_ZHYV"><button type="button" class="clean-btn tocCollapsibleButton_uxuR">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Abstract Class: AppKitError</h1></header>
14
+ <script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||(window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light")),document.documentElement.setAttribute("data-theme-choice",t||"system")}(),function(){try{const n=new URLSearchParams(window.location.search).entries();for(var[t,e]of n)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}(),document.documentElement.setAttribute("data-announcement-bar-initially-dismissed",function(){try{return"true"===localStorage.getItem("docusaurus.announcement.dismiss")}catch(t){}return!1}())</script><div id="__docusaurus"><link rel="preload" as="image" href="/appkit/img/logo.png"><div role="region" aria-label="Skip to main content"><a class="skipToContent_R3I2" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><div class="theme-announcement-bar announcementBar_Upl7" style="background-color:#f0f0f0;color:#000000" role="banner"><div class="announcementBarPlaceholder_Lvio"></div><div class="content_vq0X announcementBarContent_FIMQ">⚠️ AppKit is in an early development phase and is subject to change without notice. <strong>DO NOT</strong> use in production environments.</div><button type="button" aria-label="Close" class="clean-btn close closeButton_J8WU announcementBarClose_jD94"><svg viewBox="0 0 15 15" width="14" height="14"><g stroke="currentColor" stroke-width="3.1"><path d="M.75.75l13.5 13.5M14.25.75L.75 14.25"></path></g></svg></button></div><nav aria-label="Main" class="theme-layout-navbar navbar navbar--fixed-top"><div class="navbar__inner"><div class="theme-layout-navbar-left navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/appkit/"><div class="navbar__logo"><img src="/appkit/img/logo.png" alt="AppKit" class="themedComponent_hkXO themedComponent--light_BgK8"><img src="/appkit/img/logo.png" alt="AppKit" class="themedComponent_hkXO themedComponent--dark_RKPt"></div><b class="navbar__title text--truncate">AppKit</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/appkit/docs/">Documentation</a><a class="navbar__item navbar__link" href="/appkit/contributing">Contributing</a></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><a href="https://github.com/databricks/appkit" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_miaU"><use href="#theme-svg-external-link"></use></svg></a><div class="toggle_eFYw colorModeToggle_EPbi"><button class="clean-btn toggleButton_HRKp toggleButtonDisabled_bICu" type="button" disabled="" title="system mode" aria-label="Switch between dark and light mode (currently system mode)"><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_brDO lightToggleIcon_vxPA"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_brDO darkToggleIcon_PZNO"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_brDO systemToggleIcon_A7x6"><path fill="currentColor" d="m12 21c4.971 0 9-4.029 9-9s-4.029-9-9-9-9 4.029-9 9 4.029 9 9 9zm4.95-13.95c1.313 1.313 2.05 3.093 2.05 4.95s-0.738 3.637-2.05 4.95c-1.313 1.313-3.093 2.05-4.95 2.05v-14c1.857 0 3.637 0.737 4.95 2.05z"></path></svg></button></div><div class="navbarSearchContainer_cVhq"><div class="navbar__search"><span aria-label="expand searchbar" role="button" class="search-icon" tabindex="0"></span><input id="search_input_react" type="search" placeholder="Loading..." aria-label="Search" class="navbar__search-input search-bar" disabled=""></div></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="theme-layout-main main-wrapper mainWrapper__Y_W"><div class="docsWrapper_cIfN"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_xQFv" type="button"></button><div class="docRoot_FHtD"><aside class="theme-doc-sidebar-container docSidebarContainer_dvCd"><div class="sidebarViewport_GeRf"><div class="sidebar_T8N1"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_uyE9 menuWithAnnouncementBar_Bucd"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/appkit/docs/"><span title="Getting started" class="linkLabel_hZzm">Getting started</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/appkit/docs/app-management"><span title="App management" class="linkLabel_hZzm">App management</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/appkit/docs/plugins"><span title="Plugins" class="linkLabel_hZzm">Plugins</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/appkit/docs/architecture"><span title="Architecture" class="linkLabel_hZzm">Architecture</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/appkit/docs/configuration"><span title="Configuration" class="linkLabel_hZzm">Configuration</span></a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="categoryLink_P6CU menu__link menu__link--sublist" href="/appkit/docs/category/development"><span title="Development" class="categoryLinkLabel_ShmP">Development</span></a><button aria-label="Collapse sidebar category &#x27;Development&#x27;" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/development/local-development"><span title="Local development" class="linkLabel_hZzm">Local development</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/development/ai-assisted-development"><span title="AI-Assisted development" class="linkLabel_hZzm">AI-Assisted development</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/development/"><span title="Development" class="linkLabel_hZzm">Development</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/development/remote-bridge"><span title="Remote Bridge" class="linkLabel_hZzm">Remote Bridge</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/development/project-setup"><span title="Project setup" class="linkLabel_hZzm">Project setup</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/development/type-generation"><span title="Type generation" class="linkLabel_hZzm">Type generation</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/appkit/docs/development/llm-guide"><span title="LLM Guide" class="linkLabel_hZzm">LLM Guide</span></a></li></ul></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/appkit/docs/core-principles"><span title="Core principles" class="linkLabel_hZzm">Core principles</span></a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="categoryLink_P6CU menu__link menu__link--sublist menu__link--active" href="/appkit/docs/api/"><span title="API reference" class="categoryLinkLabel_ShmP">API reference</span></a><button aria-label="Collapse sidebar category &#x27;API reference&#x27;" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul class="menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class="menu__list-item-collapsible"><a class="categoryLink_P6CU menu__link menu__link--sublist menu__link--active" tabindex="0" href="/appkit/docs/api/appkit/"><span title="@databricks/appkit" class="categoryLinkLabel_ShmP">@databricks/appkit</span></a><button aria-label="Collapse sidebar category &#x27;@databricks/appkit&#x27;" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-enumeration"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Enumeration.ResourceType"><span title="ResourceType" class="linkLabel_hZzm">ResourceType</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/appkit/docs/api/appkit/Class.AppKitError"><span title="AppKitError" class="linkLabel_hZzm">AppKitError</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Class.AuthenticationError"><span title="AuthenticationError" class="linkLabel_hZzm">AuthenticationError</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Class.ConfigurationError"><span title="ConfigurationError" class="linkLabel_hZzm">ConfigurationError</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Class.ConnectionError"><span title="ConnectionError" class="linkLabel_hZzm">ConnectionError</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Class.ExecutionError"><span title="ExecutionError" class="linkLabel_hZzm">ExecutionError</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Class.InitializationError"><span title="InitializationError" class="linkLabel_hZzm">InitializationError</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Class.Plugin"><span title="Plugin" class="linkLabel_hZzm">Plugin</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Class.ResourceRegistry"><span title="ResourceRegistry" class="linkLabel_hZzm">ResourceRegistry</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Class.ServerError"><span title="ServerError" class="linkLabel_hZzm">ServerError</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Class.TunnelError"><span title="TunnelError" class="linkLabel_hZzm">TunnelError</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-class"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Class.ValidationError"><span title="ValidationError" class="linkLabel_hZzm">ValidationError</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-interface"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Interface.BasePluginConfig"><span title="BasePluginConfig" class="linkLabel_hZzm">BasePluginConfig</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-interface"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Interface.CacheConfig"><span title="CacheConfig" class="linkLabel_hZzm">CacheConfig</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-interface"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Interface.ITelemetry"><span title="ITelemetry" class="linkLabel_hZzm">ITelemetry</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-interface"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Interface.PluginManifest"><span title="PluginManifest" class="linkLabel_hZzm">PluginManifest</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-interface"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Interface.ResourceEntry"><span title="ResourceEntry" class="linkLabel_hZzm">ResourceEntry</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-interface"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Interface.ResourceFieldEntry"><span title="ResourceFieldEntry" class="linkLabel_hZzm">ResourceFieldEntry</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-interface"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Interface.ResourceRequirement"><span title="ResourceRequirement" class="linkLabel_hZzm">ResourceRequirement</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-interface"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Interface.StreamExecutionSettings"><span title="StreamExecutionSettings" class="linkLabel_hZzm">StreamExecutionSettings</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-interface"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Interface.TelemetryConfig"><span title="TelemetryConfig" class="linkLabel_hZzm">TelemetryConfig</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-interface"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Interface.ValidationResult"><span title="ValidationResult" class="linkLabel_hZzm">ValidationResult</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-typealias"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/TypeAlias.ConfigSchema"><span title="ConfigSchema" class="linkLabel_hZzm">ConfigSchema</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-typealias"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/TypeAlias.IAppRouter"><span title="IAppRouter" class="linkLabel_hZzm">IAppRouter</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-typealias"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/TypeAlias.ResourcePermission"><span title="ResourcePermission" class="linkLabel_hZzm">ResourcePermission</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-variable"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Variable.sql"><span title="sql" class="linkLabel_hZzm">sql</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-function"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Function.appKitTypesPlugin"><span title="appKitTypesPlugin" class="linkLabel_hZzm">appKitTypesPlugin</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-function"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Function.createApp"><span title="createApp" class="linkLabel_hZzm">createApp</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-function"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Function.getExecutionContext"><span title="getExecutionContext" class="linkLabel_hZzm">getExecutionContext</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-function"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Function.getPluginManifest"><span title="getPluginManifest" class="linkLabel_hZzm">getPluginManifest</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-function"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Function.getResourceRequirements"><span title="getResourceRequirements" class="linkLabel_hZzm">getResourceRequirements</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item api-kind-function"><a class="menu__link" tabindex="0" href="/appkit/docs/api/appkit/Function.isSQLTypeMarker"><span title="isSQLTypeMarker" class="linkLabel_hZzm">isSQLTypeMarker</span></a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="categoryLink_P6CU menu__link menu__link--sublist" tabindex="0" href="/appkit/docs/api/appkit-ui/"><span title="@databricks/appkit-ui" class="categoryLinkLabel_ShmP">@databricks/appkit-ui</span></a><button aria-label="Expand sidebar category &#x27;@databricks/appkit-ui&#x27;" aria-expanded="false" type="button" class="clean-btn menu__caret"></button></div></li></ul></li></ul></nav></div></div></aside><main class="docMainContainer_P5br"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_poBZ"><div class="docItemContainer_TdBg"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_bEIa" aria-label="Breadcrumbs"><ul class="breadcrumbs"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/appkit/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_sma7"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item"><a class="breadcrumbs__link" href="/appkit/docs/api/"><span>API reference</span></a></li><li class="breadcrumbs__item"><a class="breadcrumbs__link" href="/appkit/docs/api/appkit/"><span>@databricks/appkit</span></a></li><li class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link">AppKitError</span></li></ul></nav><div class="tocCollapsible_gJxE theme-doc-toc-mobile tocMobile_ZHYV"><button type="button" class="clean-btn tocCollapsibleButton_uxuR">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>Abstract Class: AppKitError</h1></header>
15
15
  <p>Base error class for all AppKit errors.
16
16
  Provides a consistent structure for error handling across the framework.</p>
17
17
  <h2 class="anchor anchorTargetStickyNavbar_scV4" id="example">Example<a href="#example" class="hash-link" aria-label="Direct link to Example" title="Direct link to Example" translate="no">​</a></h2>
@@ -74,6 +74,6 @@ Sensitive values in context are automatically redacted.</p>
74
74
  <div class="language-ts codeBlockContainer_crgn theme-code-block" style="--prism-color:#000000;--prism-background-color:#ffffff"><div class="codeBlockContent__42J"><pre tabindex="0" class="prism-code language-ts codeBlock_CnLD thin-scrollbar" style="color:#000000;background-color:#ffffff"><code class="codeBlockLines_sJEA"><span class="token-line" style="color:#000000"><span class="token function" style="color:rgb(0, 0, 255)">toString</span><span class="token punctuation" style="color:rgb(4, 81, 165)">(</span><span class="token punctuation" style="color:rgb(4, 81, 165)">)</span><span class="token operator" style="color:rgb(0, 0, 0)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(0, 112, 193)">string</span><span class="token punctuation" style="color:rgb(4, 81, 165)">;</span><br></span></code></pre></div></div>
75
75
  <p>Create a human-readable string representation</p>
76
76
  <h4 class="anchor anchorTargetStickyNavbar_scV4" id="returns-2">Returns<a href="#returns-2" class="hash-link" aria-label="Direct link to Returns" title="Direct link to Returns" translate="no">​</a></h4>
77
- <p><code>string</code></p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col noPrint_Z6Q_"><a href="https://github.com/databricks/appkit/edit/main/docs/docs/api/appkit/Class.AppKitError.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_kMm5" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_mnLK"></div></div></footer></article><nav class="docusaurus-mt-lg pagination-nav" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/appkit/docs/api/appkit/"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">@databricks/appkit</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/appkit/docs/api/appkit/Class.AuthenticationError"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">AuthenticationError</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_xfIk thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#example" class="table-of-contents__link toc-highlight">Example</a></li><li><a href="#extends" class="table-of-contents__link toc-highlight">Extends</a></li><li><a href="#extended-by" class="table-of-contents__link toc-highlight">Extended by</a></li><li><a href="#constructors" class="table-of-contents__link toc-highlight">Constructors</a><ul><li><a href="#constructor" class="table-of-contents__link toc-highlight">Constructor</a></li></ul></li><li><a href="#properties" class="table-of-contents__link toc-highlight">Properties</a><ul><li><a href="#cause" class="table-of-contents__link toc-highlight">cause?</a></li><li><a href="#code" class="table-of-contents__link toc-highlight">code</a></li><li><a href="#context" class="table-of-contents__link toc-highlight">context?</a></li><li><a href="#isretryable" class="table-of-contents__link toc-highlight">isRetryable</a></li><li><a href="#statuscode" class="table-of-contents__link toc-highlight">statusCode</a></li></ul></li><li><a href="#methods" class="table-of-contents__link toc-highlight">Methods</a><ul><li><a href="#tojson" class="table-of-contents__link toc-highlight">toJSON()</a></li><li><a href="#tostring" class="table-of-contents__link toc-highlight">toString()</a></li></ul></li></ul></div></div></div></div></main></div></div></div><footer class="theme-layout-footer footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/appkit/docs/">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/appkit/docs/api/">API reference</a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/appkit/contributing">Contributing</a></li><li class="footer__item"><a href="https://github.com/databricks/appkit" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_miaU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://docs.databricks.com/aws/en/dev-tools/databricks-apps/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Databricks Apps docs<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_miaU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://github.com/databricks/cli" target="_blank" rel="noopener noreferrer" class="footer__link-item">Databricks CLI<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_miaU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2026 Databricks, Inc.</div></div></div></footer></div>
77
+ <p><code>string</code></p></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col noPrint_Z6Q_"><a href="https://github.com/databricks/appkit/edit/main/docs/docs/api/appkit/Class.AppKitError.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_kMm5" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_mnLK"></div></div></footer></article><nav class="docusaurus-mt-lg pagination-nav" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/appkit/docs/api/appkit/Enumeration.ResourceType"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">ResourceType</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/appkit/docs/api/appkit/Class.AuthenticationError"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">AuthenticationError</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_xfIk thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#example" class="table-of-contents__link toc-highlight">Example</a></li><li><a href="#extends" class="table-of-contents__link toc-highlight">Extends</a></li><li><a href="#extended-by" class="table-of-contents__link toc-highlight">Extended by</a></li><li><a href="#constructors" class="table-of-contents__link toc-highlight">Constructors</a><ul><li><a href="#constructor" class="table-of-contents__link toc-highlight">Constructor</a></li></ul></li><li><a href="#properties" class="table-of-contents__link toc-highlight">Properties</a><ul><li><a href="#cause" class="table-of-contents__link toc-highlight">cause?</a></li><li><a href="#code" class="table-of-contents__link toc-highlight">code</a></li><li><a href="#context" class="table-of-contents__link toc-highlight">context?</a></li><li><a href="#isretryable" class="table-of-contents__link toc-highlight">isRetryable</a></li><li><a href="#statuscode" class="table-of-contents__link toc-highlight">statusCode</a></li></ul></li><li><a href="#methods" class="table-of-contents__link toc-highlight">Methods</a><ul><li><a href="#tojson" class="table-of-contents__link toc-highlight">toJSON()</a></li><li><a href="#tostring" class="table-of-contents__link toc-highlight">toString()</a></li></ul></li></ul></div></div></div></div></main></div></div></div><footer class="theme-layout-footer footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/appkit/docs/">Getting started</a></li><li class="footer__item"><a class="footer__link-item" href="/appkit/docs/api/">API reference</a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/appkit/contributing">Contributing</a></li><li class="footer__item"><a href="https://github.com/databricks/appkit" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_miaU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://docs.databricks.com/aws/en/dev-tools/databricks-apps/" target="_blank" rel="noopener noreferrer" class="footer__link-item">Databricks Apps docs<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_miaU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://github.com/databricks/cli" target="_blank" rel="noopener noreferrer" class="footer__link-item">Databricks CLI<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_miaU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2026 Databricks, Inc.</div></div></div></footer></div>
78
78
  </body>
79
79
  </html>