@objectstack/spec 0.2.0 → 0.3.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 (103) hide show
  1. package/README.md +127 -5
  2. package/dist/ai/index.d.ts +14 -0
  3. package/dist/ai/index.d.ts.map +1 -0
  4. package/dist/ai/index.js +29 -0
  5. package/dist/ai/model-registry.zod.d.ts +1389 -0
  6. package/dist/ai/model-registry.zod.d.ts.map +1 -0
  7. package/dist/ai/model-registry.zod.js +164 -0
  8. package/dist/ai/nlq.zod.d.ts +1126 -0
  9. package/dist/ai/nlq.zod.d.ts.map +1 -0
  10. package/dist/ai/nlq.zod.js +246 -0
  11. package/dist/ai/rag-pipeline.zod.d.ts +1034 -0
  12. package/dist/ai/rag-pipeline.zod.d.ts.map +1 -0
  13. package/dist/ai/rag-pipeline.zod.js +244 -0
  14. package/dist/api/index.d.ts +9 -0
  15. package/dist/api/index.d.ts.map +1 -0
  16. package/dist/api/index.js +24 -0
  17. package/dist/data/index.d.ts +21 -0
  18. package/dist/data/index.d.ts.map +1 -0
  19. package/dist/data/index.js +36 -0
  20. package/dist/data/query.zod.d.ts +386 -3
  21. package/dist/data/query.zod.d.ts.map +1 -1
  22. package/dist/data/query.zod.js +386 -3
  23. package/dist/data/validation.zod.d.ts +349 -0
  24. package/dist/data/validation.zod.d.ts.map +1 -1
  25. package/dist/data/validation.zod.js +395 -0
  26. package/dist/index.d.ts +36 -41
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +64 -49
  29. package/dist/system/auth-protocol.d.ts +175 -0
  30. package/dist/system/auth-protocol.d.ts.map +1 -0
  31. package/dist/system/auth-protocol.js +60 -0
  32. package/dist/system/auth.zod.d.ts +1097 -65
  33. package/dist/system/auth.zod.d.ts.map +1 -1
  34. package/dist/system/auth.zod.js +135 -1
  35. package/dist/system/identity.zod.d.ts +234 -180
  36. package/dist/system/identity.zod.d.ts.map +1 -1
  37. package/dist/system/identity.zod.js +168 -51
  38. package/dist/system/index.d.ts +28 -0
  39. package/dist/system/index.d.ts.map +1 -0
  40. package/dist/system/index.js +43 -0
  41. package/dist/system/manifest.zod.d.ts +10 -10
  42. package/dist/system/organization.zod.d.ts +179 -0
  43. package/dist/system/organization.zod.d.ts.map +1 -0
  44. package/dist/system/organization.zod.js +129 -0
  45. package/dist/ui/action.zod.d.ts +2 -2
  46. package/dist/ui/index.d.ts +17 -0
  47. package/dist/ui/index.d.ts.map +1 -0
  48. package/dist/ui/index.js +32 -0
  49. package/dist/ui/theme.zod.d.ts +6 -6
  50. package/json-schema/Account.json +87 -0
  51. package/json-schema/AuthConfig.json +235 -0
  52. package/json-schema/ChunkingStrategy.json +133 -0
  53. package/json-schema/DatabaseMapping.json +48 -0
  54. package/json-schema/DocumentChunk.json +97 -0
  55. package/json-schema/DocumentLoaderConfig.json +69 -0
  56. package/json-schema/DocumentMetadata.json +61 -0
  57. package/json-schema/EmbeddingModel.json +57 -0
  58. package/json-schema/EnterpriseAuthConfig.json +172 -0
  59. package/json-schema/Entity.json +55 -0
  60. package/json-schema/FieldSynonymConfig.json +39 -0
  61. package/json-schema/Invitation.json +69 -0
  62. package/json-schema/InvitationStatus.json +15 -0
  63. package/json-schema/LDAPConfig.json +22 -5
  64. package/json-schema/Member.json +46 -0
  65. package/json-schema/ModelCapability.json +47 -0
  66. package/json-schema/ModelConfig.json +181 -0
  67. package/json-schema/ModelLimits.json +45 -0
  68. package/json-schema/ModelPricing.json +28 -0
  69. package/json-schema/ModelProvider.json +19 -0
  70. package/json-schema/ModelRegistry.json +427 -0
  71. package/json-schema/ModelRegistryEntry.json +239 -0
  72. package/json-schema/ModelSelectionCriteria.json +50 -0
  73. package/json-schema/NLQAnalytics.json +106 -0
  74. package/json-schema/NLQFieldMapping.json +40 -0
  75. package/json-schema/NLQModelConfig.json +78 -0
  76. package/json-schema/NLQParseResult.json +252 -0
  77. package/json-schema/NLQRequest.json +110 -0
  78. package/json-schema/NLQResponse.json +288 -0
  79. package/json-schema/NLQTrainingExample.json +120 -0
  80. package/json-schema/OIDCConfig.json +18 -3
  81. package/json-schema/Organization.json +52 -0
  82. package/json-schema/PromptTemplate.json +163 -0
  83. package/json-schema/PromptVariable.json +56 -0
  84. package/json-schema/QueryContext.json +72 -0
  85. package/json-schema/QueryIntent.json +21 -0
  86. package/json-schema/QueryTemplate.json +81 -0
  87. package/json-schema/RAGPipelineConfig.json +552 -0
  88. package/json-schema/RAGPipelineStatus.json +66 -0
  89. package/json-schema/RAGQueryRequest.json +64 -0
  90. package/json-schema/RAGQueryResponse.json +108 -0
  91. package/json-schema/RerankingConfig.json +34 -0
  92. package/json-schema/RetrievalStrategy.json +121 -0
  93. package/json-schema/SAMLConfig.json +17 -3
  94. package/json-schema/Session.json +63 -0
  95. package/json-schema/StandardAuthProvider.json +235 -0
  96. package/json-schema/Timeframe.json +68 -0
  97. package/json-schema/User.json +51 -0
  98. package/json-schema/VectorStoreConfig.json +82 -0
  99. package/json-schema/VectorStoreProvider.json +21 -0
  100. package/json-schema/VerificationToken.json +36 -0
  101. package/package.json +27 -1
  102. package/json-schema/AuthProtocol.json +0 -17
  103. package/json-schema/AuthProvider.json +0 -171
@@ -0,0 +1,97 @@
1
+ {
2
+ "$ref": "#/definitions/DocumentChunk",
3
+ "definitions": {
4
+ "DocumentChunk": {
5
+ "type": "object",
6
+ "properties": {
7
+ "id": {
8
+ "type": "string",
9
+ "description": "Unique chunk identifier"
10
+ },
11
+ "content": {
12
+ "type": "string",
13
+ "description": "Chunk text content"
14
+ },
15
+ "embedding": {
16
+ "type": "array",
17
+ "items": {
18
+ "type": "number"
19
+ },
20
+ "description": "Embedding vector"
21
+ },
22
+ "metadata": {
23
+ "type": "object",
24
+ "properties": {
25
+ "source": {
26
+ "type": "string",
27
+ "description": "Document source (file path, URL, etc.)"
28
+ },
29
+ "sourceType": {
30
+ "type": "string",
31
+ "enum": [
32
+ "file",
33
+ "url",
34
+ "api",
35
+ "database",
36
+ "custom"
37
+ ]
38
+ },
39
+ "title": {
40
+ "type": "string"
41
+ },
42
+ "author": {
43
+ "type": "string"
44
+ },
45
+ "createdAt": {
46
+ "type": "string",
47
+ "description": "ISO timestamp"
48
+ },
49
+ "updatedAt": {
50
+ "type": "string",
51
+ "description": "ISO timestamp"
52
+ },
53
+ "tags": {
54
+ "type": "array",
55
+ "items": {
56
+ "type": "string"
57
+ }
58
+ },
59
+ "category": {
60
+ "type": "string"
61
+ },
62
+ "language": {
63
+ "type": "string",
64
+ "description": "Document language (ISO 639-1 code)"
65
+ },
66
+ "custom": {
67
+ "type": "object",
68
+ "additionalProperties": {},
69
+ "description": "Custom metadata fields"
70
+ }
71
+ },
72
+ "required": [
73
+ "source"
74
+ ],
75
+ "additionalProperties": false
76
+ },
77
+ "chunkIndex": {
78
+ "type": "integer",
79
+ "minimum": 0,
80
+ "description": "Chunk position in document"
81
+ },
82
+ "tokens": {
83
+ "type": "integer",
84
+ "description": "Token count"
85
+ }
86
+ },
87
+ "required": [
88
+ "id",
89
+ "content",
90
+ "metadata",
91
+ "chunkIndex"
92
+ ],
93
+ "additionalProperties": false
94
+ }
95
+ },
96
+ "$schema": "http://json-schema.org/draft-07/schema#"
97
+ }
@@ -0,0 +1,69 @@
1
+ {
2
+ "$ref": "#/definitions/DocumentLoaderConfig",
3
+ "definitions": {
4
+ "DocumentLoaderConfig": {
5
+ "type": "object",
6
+ "properties": {
7
+ "type": {
8
+ "type": "string",
9
+ "enum": [
10
+ "file",
11
+ "directory",
12
+ "url",
13
+ "api",
14
+ "database",
15
+ "custom"
16
+ ]
17
+ },
18
+ "source": {
19
+ "type": "string",
20
+ "description": "Source path, URL, or identifier"
21
+ },
22
+ "fileTypes": {
23
+ "type": "array",
24
+ "items": {
25
+ "type": "string"
26
+ },
27
+ "description": "Accepted file extensions (e.g., [\".pdf\", \".md\"])"
28
+ },
29
+ "recursive": {
30
+ "type": "boolean",
31
+ "default": false,
32
+ "description": "Process directories recursively"
33
+ },
34
+ "maxFileSize": {
35
+ "type": "integer",
36
+ "description": "Maximum file size in bytes"
37
+ },
38
+ "excludePatterns": {
39
+ "type": "array",
40
+ "items": {
41
+ "type": "string"
42
+ },
43
+ "description": "Patterns to exclude"
44
+ },
45
+ "extractImages": {
46
+ "type": "boolean",
47
+ "default": false,
48
+ "description": "Extract text from images (OCR)"
49
+ },
50
+ "extractTables": {
51
+ "type": "boolean",
52
+ "default": false,
53
+ "description": "Extract and format tables"
54
+ },
55
+ "loaderConfig": {
56
+ "type": "object",
57
+ "additionalProperties": {},
58
+ "description": "Custom loader-specific config"
59
+ }
60
+ },
61
+ "required": [
62
+ "type",
63
+ "source"
64
+ ],
65
+ "additionalProperties": false
66
+ }
67
+ },
68
+ "$schema": "http://json-schema.org/draft-07/schema#"
69
+ }
@@ -0,0 +1,61 @@
1
+ {
2
+ "$ref": "#/definitions/DocumentMetadata",
3
+ "definitions": {
4
+ "DocumentMetadata": {
5
+ "type": "object",
6
+ "properties": {
7
+ "source": {
8
+ "type": "string",
9
+ "description": "Document source (file path, URL, etc.)"
10
+ },
11
+ "sourceType": {
12
+ "type": "string",
13
+ "enum": [
14
+ "file",
15
+ "url",
16
+ "api",
17
+ "database",
18
+ "custom"
19
+ ]
20
+ },
21
+ "title": {
22
+ "type": "string"
23
+ },
24
+ "author": {
25
+ "type": "string"
26
+ },
27
+ "createdAt": {
28
+ "type": "string",
29
+ "description": "ISO timestamp"
30
+ },
31
+ "updatedAt": {
32
+ "type": "string",
33
+ "description": "ISO timestamp"
34
+ },
35
+ "tags": {
36
+ "type": "array",
37
+ "items": {
38
+ "type": "string"
39
+ }
40
+ },
41
+ "category": {
42
+ "type": "string"
43
+ },
44
+ "language": {
45
+ "type": "string",
46
+ "description": "Document language (ISO 639-1 code)"
47
+ },
48
+ "custom": {
49
+ "type": "object",
50
+ "additionalProperties": {},
51
+ "description": "Custom metadata fields"
52
+ }
53
+ },
54
+ "required": [
55
+ "source"
56
+ ],
57
+ "additionalProperties": false
58
+ }
59
+ },
60
+ "$schema": "http://json-schema.org/draft-07/schema#"
61
+ }
@@ -0,0 +1,57 @@
1
+ {
2
+ "$ref": "#/definitions/EmbeddingModel",
3
+ "definitions": {
4
+ "EmbeddingModel": {
5
+ "type": "object",
6
+ "properties": {
7
+ "provider": {
8
+ "type": "string",
9
+ "enum": [
10
+ "openai",
11
+ "cohere",
12
+ "huggingface",
13
+ "azure_openai",
14
+ "local",
15
+ "custom"
16
+ ]
17
+ },
18
+ "model": {
19
+ "type": "string",
20
+ "description": "Model name (e.g., \"text-embedding-3-large\")"
21
+ },
22
+ "dimensions": {
23
+ "type": "integer",
24
+ "exclusiveMinimum": 0,
25
+ "description": "Embedding vector dimensions"
26
+ },
27
+ "maxTokens": {
28
+ "type": "integer",
29
+ "exclusiveMinimum": 0,
30
+ "description": "Maximum tokens per embedding"
31
+ },
32
+ "batchSize": {
33
+ "type": "integer",
34
+ "exclusiveMinimum": 0,
35
+ "default": 100,
36
+ "description": "Batch size for embedding"
37
+ },
38
+ "endpoint": {
39
+ "type": "string",
40
+ "format": "uri",
41
+ "description": "Custom endpoint URL"
42
+ },
43
+ "apiKey": {
44
+ "type": "string",
45
+ "description": "API key or reference to secret"
46
+ }
47
+ },
48
+ "required": [
49
+ "provider",
50
+ "model",
51
+ "dimensions"
52
+ ],
53
+ "additionalProperties": false
54
+ }
55
+ },
56
+ "$schema": "http://json-schema.org/draft-07/schema#"
57
+ }
@@ -0,0 +1,172 @@
1
+ {
2
+ "$ref": "#/definitions/EnterpriseAuthConfig",
3
+ "definitions": {
4
+ "EnterpriseAuthConfig": {
5
+ "type": "object",
6
+ "properties": {
7
+ "oidc": {
8
+ "type": "object",
9
+ "properties": {
10
+ "enabled": {
11
+ "type": "boolean",
12
+ "default": false
13
+ },
14
+ "issuer": {
15
+ "type": "string",
16
+ "format": "uri",
17
+ "description": "OIDC Issuer URL (.well-known/openid-configuration)"
18
+ },
19
+ "clientId": {
20
+ "type": "string",
21
+ "description": "OIDC client ID"
22
+ },
23
+ "clientSecret": {
24
+ "type": "string",
25
+ "description": "OIDC client secret"
26
+ },
27
+ "scopes": {
28
+ "type": "array",
29
+ "items": {
30
+ "type": "string"
31
+ },
32
+ "default": [
33
+ "openid",
34
+ "profile",
35
+ "email"
36
+ ],
37
+ "description": "OIDC scopes"
38
+ },
39
+ "attributeMapping": {
40
+ "type": "object",
41
+ "additionalProperties": {
42
+ "type": "string"
43
+ },
44
+ "description": "Map IdP claims to User fields"
45
+ },
46
+ "displayName": {
47
+ "type": "string",
48
+ "description": "Display name for the provider button"
49
+ },
50
+ "icon": {
51
+ "type": "string",
52
+ "description": "Icon URL or identifier"
53
+ }
54
+ },
55
+ "required": [
56
+ "issuer",
57
+ "clientId",
58
+ "clientSecret"
59
+ ],
60
+ "additionalProperties": false,
61
+ "description": "OpenID Connect configuration"
62
+ },
63
+ "saml": {
64
+ "type": "object",
65
+ "properties": {
66
+ "enabled": {
67
+ "type": "boolean",
68
+ "default": false
69
+ },
70
+ "entryPoint": {
71
+ "type": "string",
72
+ "format": "uri",
73
+ "description": "IdP SSO URL"
74
+ },
75
+ "cert": {
76
+ "type": "string",
77
+ "description": "IdP Public Certificate (PEM format)"
78
+ },
79
+ "issuer": {
80
+ "type": "string",
81
+ "description": "Entity ID of the IdP"
82
+ },
83
+ "signatureAlgorithm": {
84
+ "type": "string",
85
+ "enum": [
86
+ "sha256",
87
+ "sha512"
88
+ ],
89
+ "default": "sha256",
90
+ "description": "Signature algorithm"
91
+ },
92
+ "attributeMapping": {
93
+ "type": "object",
94
+ "additionalProperties": {
95
+ "type": "string"
96
+ },
97
+ "description": "Map SAML attributes to User fields"
98
+ },
99
+ "displayName": {
100
+ "type": "string",
101
+ "description": "Display name for the provider button"
102
+ },
103
+ "icon": {
104
+ "type": "string",
105
+ "description": "Icon URL or identifier"
106
+ }
107
+ },
108
+ "required": [
109
+ "entryPoint",
110
+ "cert",
111
+ "issuer"
112
+ ],
113
+ "additionalProperties": false,
114
+ "description": "SAML 2.0 configuration"
115
+ },
116
+ "ldap": {
117
+ "type": "object",
118
+ "properties": {
119
+ "enabled": {
120
+ "type": "boolean",
121
+ "default": false
122
+ },
123
+ "url": {
124
+ "type": "string",
125
+ "format": "uri",
126
+ "description": "LDAP Server URL (ldap:// or ldaps://)"
127
+ },
128
+ "bindDn": {
129
+ "type": "string",
130
+ "description": "Bind DN for LDAP authentication"
131
+ },
132
+ "bindCredentials": {
133
+ "type": "string",
134
+ "description": "Bind credentials"
135
+ },
136
+ "searchBase": {
137
+ "type": "string",
138
+ "description": "Search base DN"
139
+ },
140
+ "searchFilter": {
141
+ "type": "string",
142
+ "description": "Search filter"
143
+ },
144
+ "groupSearchBase": {
145
+ "type": "string",
146
+ "description": "Group search base DN"
147
+ },
148
+ "displayName": {
149
+ "type": "string",
150
+ "description": "Display name for the provider button"
151
+ },
152
+ "icon": {
153
+ "type": "string",
154
+ "description": "Icon URL or identifier"
155
+ }
156
+ },
157
+ "required": [
158
+ "url",
159
+ "bindDn",
160
+ "bindCredentials",
161
+ "searchBase",
162
+ "searchFilter"
163
+ ],
164
+ "additionalProperties": false,
165
+ "description": "LDAP/Active Directory configuration"
166
+ }
167
+ },
168
+ "additionalProperties": false
169
+ }
170
+ },
171
+ "$schema": "http://json-schema.org/draft-07/schema#"
172
+ }
@@ -0,0 +1,55 @@
1
+ {
2
+ "$ref": "#/definitions/Entity",
3
+ "definitions": {
4
+ "Entity": {
5
+ "type": "object",
6
+ "properties": {
7
+ "type": {
8
+ "type": "string",
9
+ "enum": [
10
+ "object",
11
+ "field",
12
+ "value",
13
+ "operator",
14
+ "function",
15
+ "timeframe"
16
+ ]
17
+ },
18
+ "text": {
19
+ "type": "string",
20
+ "description": "Original text from query"
21
+ },
22
+ "value": {
23
+ "description": "Normalized value"
24
+ },
25
+ "confidence": {
26
+ "type": "number",
27
+ "minimum": 0,
28
+ "maximum": 1,
29
+ "description": "Confidence score"
30
+ },
31
+ "span": {
32
+ "type": "array",
33
+ "minItems": 2,
34
+ "maxItems": 2,
35
+ "items": [
36
+ {
37
+ "type": "number"
38
+ },
39
+ {
40
+ "type": "number"
41
+ }
42
+ ],
43
+ "description": "Character span in query"
44
+ }
45
+ },
46
+ "required": [
47
+ "type",
48
+ "text",
49
+ "confidence"
50
+ ],
51
+ "additionalProperties": false
52
+ }
53
+ },
54
+ "$schema": "http://json-schema.org/draft-07/schema#"
55
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "$ref": "#/definitions/FieldSynonymConfig",
3
+ "definitions": {
4
+ "FieldSynonymConfig": {
5
+ "type": "object",
6
+ "properties": {
7
+ "object": {
8
+ "type": "string",
9
+ "description": "Object name"
10
+ },
11
+ "field": {
12
+ "type": "string",
13
+ "description": "Field name"
14
+ },
15
+ "synonyms": {
16
+ "type": "array",
17
+ "items": {
18
+ "type": "string"
19
+ },
20
+ "description": "Natural language synonyms"
21
+ },
22
+ "examples": {
23
+ "type": "array",
24
+ "items": {
25
+ "type": "string"
26
+ },
27
+ "description": "Example queries using synonyms"
28
+ }
29
+ },
30
+ "required": [
31
+ "object",
32
+ "field",
33
+ "synonyms"
34
+ ],
35
+ "additionalProperties": false
36
+ }
37
+ },
38
+ "$schema": "http://json-schema.org/draft-07/schema#"
39
+ }
@@ -0,0 +1,69 @@
1
+ {
2
+ "$ref": "#/definitions/Invitation",
3
+ "definitions": {
4
+ "Invitation": {
5
+ "type": "object",
6
+ "properties": {
7
+ "id": {
8
+ "type": "string",
9
+ "description": "Unique invitation identifier"
10
+ },
11
+ "organizationId": {
12
+ "type": "string",
13
+ "description": "Organization ID"
14
+ },
15
+ "email": {
16
+ "type": "string",
17
+ "format": "email",
18
+ "description": "Invitee email address"
19
+ },
20
+ "role": {
21
+ "type": "string",
22
+ "description": "Role to assign upon acceptance"
23
+ },
24
+ "status": {
25
+ "type": "string",
26
+ "enum": [
27
+ "pending",
28
+ "accepted",
29
+ "rejected",
30
+ "expired"
31
+ ],
32
+ "default": "pending",
33
+ "description": "Invitation status"
34
+ },
35
+ "expiresAt": {
36
+ "type": "string",
37
+ "format": "date-time",
38
+ "description": "Invitation expiry timestamp"
39
+ },
40
+ "inviterId": {
41
+ "type": "string",
42
+ "description": "User ID of the inviter"
43
+ },
44
+ "createdAt": {
45
+ "type": "string",
46
+ "format": "date-time",
47
+ "description": "Invitation creation timestamp"
48
+ },
49
+ "updatedAt": {
50
+ "type": "string",
51
+ "format": "date-time",
52
+ "description": "Last update timestamp"
53
+ }
54
+ },
55
+ "required": [
56
+ "id",
57
+ "organizationId",
58
+ "email",
59
+ "role",
60
+ "expiresAt",
61
+ "inviterId",
62
+ "createdAt",
63
+ "updatedAt"
64
+ ],
65
+ "additionalProperties": false
66
+ }
67
+ },
68
+ "$schema": "http://json-schema.org/draft-07/schema#"
69
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "$ref": "#/definitions/InvitationStatus",
3
+ "definitions": {
4
+ "InvitationStatus": {
5
+ "type": "string",
6
+ "enum": [
7
+ "pending",
8
+ "accepted",
9
+ "rejected",
10
+ "expired"
11
+ ]
12
+ }
13
+ },
14
+ "$schema": "http://json-schema.org/draft-07/schema#"
15
+ }
@@ -4,25 +4,42 @@
4
4
  "LDAPConfig": {
5
5
  "type": "object",
6
6
  "properties": {
7
+ "enabled": {
8
+ "type": "boolean",
9
+ "default": false
10
+ },
7
11
  "url": {
8
12
  "type": "string",
9
13
  "format": "uri",
10
14
  "description": "LDAP Server URL (ldap:// or ldaps://)"
11
15
  },
12
16
  "bindDn": {
13
- "type": "string"
17
+ "type": "string",
18
+ "description": "Bind DN for LDAP authentication"
14
19
  },
15
20
  "bindCredentials": {
16
- "type": "string"
21
+ "type": "string",
22
+ "description": "Bind credentials"
17
23
  },
18
24
  "searchBase": {
19
- "type": "string"
25
+ "type": "string",
26
+ "description": "Search base DN"
20
27
  },
21
28
  "searchFilter": {
22
- "type": "string"
29
+ "type": "string",
30
+ "description": "Search filter"
23
31
  },
24
32
  "groupSearchBase": {
25
- "type": "string"
33
+ "type": "string",
34
+ "description": "Group search base DN"
35
+ },
36
+ "displayName": {
37
+ "type": "string",
38
+ "description": "Display name for the provider button"
39
+ },
40
+ "icon": {
41
+ "type": "string",
42
+ "description": "Icon URL or identifier"
26
43
  }
27
44
  },
28
45
  "required": [