@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,108 @@
1
+ {
2
+ "$ref": "#/definitions/RAGQueryResponse",
3
+ "definitions": {
4
+ "RAGQueryResponse": {
5
+ "type": "object",
6
+ "properties": {
7
+ "query": {
8
+ "type": "string"
9
+ },
10
+ "results": {
11
+ "type": "array",
12
+ "items": {
13
+ "type": "object",
14
+ "properties": {
15
+ "content": {
16
+ "type": "string"
17
+ },
18
+ "score": {
19
+ "type": "number"
20
+ },
21
+ "metadata": {
22
+ "type": "object",
23
+ "properties": {
24
+ "source": {
25
+ "type": "string",
26
+ "description": "Document source (file path, URL, etc.)"
27
+ },
28
+ "sourceType": {
29
+ "type": "string",
30
+ "enum": [
31
+ "file",
32
+ "url",
33
+ "api",
34
+ "database",
35
+ "custom"
36
+ ]
37
+ },
38
+ "title": {
39
+ "type": "string"
40
+ },
41
+ "author": {
42
+ "type": "string"
43
+ },
44
+ "createdAt": {
45
+ "type": "string",
46
+ "description": "ISO timestamp"
47
+ },
48
+ "updatedAt": {
49
+ "type": "string",
50
+ "description": "ISO timestamp"
51
+ },
52
+ "tags": {
53
+ "type": "array",
54
+ "items": {
55
+ "type": "string"
56
+ }
57
+ },
58
+ "category": {
59
+ "type": "string"
60
+ },
61
+ "language": {
62
+ "type": "string",
63
+ "description": "Document language (ISO 639-1 code)"
64
+ },
65
+ "custom": {
66
+ "type": "object",
67
+ "additionalProperties": {},
68
+ "description": "Custom metadata fields"
69
+ }
70
+ },
71
+ "required": [
72
+ "source"
73
+ ],
74
+ "additionalProperties": false
75
+ },
76
+ "chunkId": {
77
+ "type": "string"
78
+ }
79
+ },
80
+ "required": [
81
+ "content",
82
+ "score"
83
+ ],
84
+ "additionalProperties": false
85
+ }
86
+ },
87
+ "context": {
88
+ "type": "string",
89
+ "description": "Assembled context for LLM"
90
+ },
91
+ "tokensUsed": {
92
+ "type": "integer"
93
+ },
94
+ "retrievalTime": {
95
+ "type": "number",
96
+ "description": "Retrieval time in milliseconds"
97
+ }
98
+ },
99
+ "required": [
100
+ "query",
101
+ "results",
102
+ "context"
103
+ ],
104
+ "additionalProperties": false
105
+ }
106
+ },
107
+ "$schema": "http://json-schema.org/draft-07/schema#"
108
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "$ref": "#/definitions/RerankingConfig",
3
+ "definitions": {
4
+ "RerankingConfig": {
5
+ "type": "object",
6
+ "properties": {
7
+ "enabled": {
8
+ "type": "boolean",
9
+ "default": false
10
+ },
11
+ "model": {
12
+ "type": "string",
13
+ "description": "Reranking model name"
14
+ },
15
+ "provider": {
16
+ "type": "string",
17
+ "enum": [
18
+ "cohere",
19
+ "huggingface",
20
+ "custom"
21
+ ]
22
+ },
23
+ "topK": {
24
+ "type": "integer",
25
+ "exclusiveMinimum": 0,
26
+ "default": 3,
27
+ "description": "Final number of results after reranking"
28
+ }
29
+ },
30
+ "additionalProperties": false
31
+ }
32
+ },
33
+ "$schema": "http://json-schema.org/draft-07/schema#"
34
+ }
@@ -0,0 +1,121 @@
1
+ {
2
+ "$ref": "#/definitions/RetrievalStrategy",
3
+ "definitions": {
4
+ "RetrievalStrategy": {
5
+ "anyOf": [
6
+ {
7
+ "type": "object",
8
+ "properties": {
9
+ "type": {
10
+ "type": "string",
11
+ "const": "similarity"
12
+ },
13
+ "topK": {
14
+ "type": "integer",
15
+ "exclusiveMinimum": 0,
16
+ "default": 5,
17
+ "description": "Number of results to retrieve"
18
+ },
19
+ "scoreThreshold": {
20
+ "type": "number",
21
+ "minimum": 0,
22
+ "maximum": 1,
23
+ "description": "Minimum similarity score"
24
+ }
25
+ },
26
+ "required": [
27
+ "type"
28
+ ],
29
+ "additionalProperties": false
30
+ },
31
+ {
32
+ "type": "object",
33
+ "properties": {
34
+ "type": {
35
+ "type": "string",
36
+ "const": "mmr"
37
+ },
38
+ "topK": {
39
+ "type": "integer",
40
+ "exclusiveMinimum": 0,
41
+ "default": 5
42
+ },
43
+ "fetchK": {
44
+ "type": "integer",
45
+ "exclusiveMinimum": 0,
46
+ "default": 20,
47
+ "description": "Initial fetch size"
48
+ },
49
+ "lambda": {
50
+ "type": "number",
51
+ "minimum": 0,
52
+ "maximum": 1,
53
+ "default": 0.5,
54
+ "description": "Diversity vs relevance (0=diverse, 1=relevant)"
55
+ }
56
+ },
57
+ "required": [
58
+ "type"
59
+ ],
60
+ "additionalProperties": false
61
+ },
62
+ {
63
+ "type": "object",
64
+ "properties": {
65
+ "type": {
66
+ "type": "string",
67
+ "const": "hybrid"
68
+ },
69
+ "topK": {
70
+ "type": "integer",
71
+ "exclusiveMinimum": 0,
72
+ "default": 5
73
+ },
74
+ "vectorWeight": {
75
+ "type": "number",
76
+ "minimum": 0,
77
+ "maximum": 1,
78
+ "default": 0.7,
79
+ "description": "Weight for vector search"
80
+ },
81
+ "keywordWeight": {
82
+ "type": "number",
83
+ "minimum": 0,
84
+ "maximum": 1,
85
+ "default": 0.3,
86
+ "description": "Weight for keyword search"
87
+ }
88
+ },
89
+ "required": [
90
+ "type"
91
+ ],
92
+ "additionalProperties": false
93
+ },
94
+ {
95
+ "type": "object",
96
+ "properties": {
97
+ "type": {
98
+ "type": "string",
99
+ "const": "parent_document"
100
+ },
101
+ "topK": {
102
+ "type": "integer",
103
+ "exclusiveMinimum": 0,
104
+ "default": 5
105
+ },
106
+ "retrieveParent": {
107
+ "type": "boolean",
108
+ "default": true,
109
+ "description": "Retrieve full parent document"
110
+ }
111
+ },
112
+ "required": [
113
+ "type"
114
+ ],
115
+ "additionalProperties": false
116
+ }
117
+ ]
118
+ }
119
+ },
120
+ "$schema": "http://json-schema.org/draft-07/schema#"
121
+ }
@@ -4,6 +4,10 @@
4
4
  "SAMLConfig": {
5
5
  "type": "object",
6
6
  "properties": {
7
+ "enabled": {
8
+ "type": "boolean",
9
+ "default": false
10
+ },
7
11
  "entryPoint": {
8
12
  "type": "string",
9
13
  "format": "uri",
@@ -11,7 +15,7 @@
11
15
  },
12
16
  "cert": {
13
17
  "type": "string",
14
- "description": "IdP Public Certificate"
18
+ "description": "IdP Public Certificate (PEM format)"
15
19
  },
16
20
  "issuer": {
17
21
  "type": "string",
@@ -23,13 +27,23 @@
23
27
  "sha256",
24
28
  "sha512"
25
29
  ],
26
- "default": "sha256"
30
+ "default": "sha256",
31
+ "description": "Signature algorithm"
27
32
  },
28
33
  "attributeMapping": {
29
34
  "type": "object",
30
35
  "additionalProperties": {
31
36
  "type": "string"
32
- }
37
+ },
38
+ "description": "Map SAML attributes to User fields"
39
+ },
40
+ "displayName": {
41
+ "type": "string",
42
+ "description": "Display name for the provider button"
43
+ },
44
+ "icon": {
45
+ "type": "string",
46
+ "description": "Icon URL or identifier"
33
47
  }
34
48
  },
35
49
  "required": [
@@ -0,0 +1,63 @@
1
+ {
2
+ "$ref": "#/definitions/Session",
3
+ "definitions": {
4
+ "Session": {
5
+ "type": "object",
6
+ "properties": {
7
+ "id": {
8
+ "type": "string",
9
+ "description": "Unique session identifier"
10
+ },
11
+ "sessionToken": {
12
+ "type": "string",
13
+ "description": "Session token"
14
+ },
15
+ "userId": {
16
+ "type": "string",
17
+ "description": "Associated user ID"
18
+ },
19
+ "activeOrganizationId": {
20
+ "type": "string",
21
+ "description": "Active organization ID for context switching"
22
+ },
23
+ "expires": {
24
+ "type": "string",
25
+ "format": "date-time",
26
+ "description": "Session expiry timestamp"
27
+ },
28
+ "createdAt": {
29
+ "type": "string",
30
+ "format": "date-time",
31
+ "description": "Session creation timestamp"
32
+ },
33
+ "updatedAt": {
34
+ "type": "string",
35
+ "format": "date-time",
36
+ "description": "Last update timestamp"
37
+ },
38
+ "ipAddress": {
39
+ "type": "string",
40
+ "description": "IP address"
41
+ },
42
+ "userAgent": {
43
+ "type": "string",
44
+ "description": "User agent string"
45
+ },
46
+ "fingerprint": {
47
+ "type": "string",
48
+ "description": "Device fingerprint"
49
+ }
50
+ },
51
+ "required": [
52
+ "id",
53
+ "sessionToken",
54
+ "userId",
55
+ "expires",
56
+ "createdAt",
57
+ "updatedAt"
58
+ ],
59
+ "additionalProperties": false
60
+ }
61
+ },
62
+ "$schema": "http://json-schema.org/draft-07/schema#"
63
+ }
@@ -389,6 +389,199 @@
389
389
  },
390
390
  "additionalProperties": false
391
391
  },
392
+ "organization": {
393
+ "type": "object",
394
+ "properties": {
395
+ "enabled": {
396
+ "type": "boolean",
397
+ "default": false,
398
+ "description": "Enable organization/multi-tenant features"
399
+ },
400
+ "allowUserToCreateOrg": {
401
+ "type": "boolean",
402
+ "default": true,
403
+ "description": "Allow users to create organizations"
404
+ },
405
+ "defaultRole": {
406
+ "type": "string",
407
+ "default": "member",
408
+ "description": "Default role for new members"
409
+ },
410
+ "creatorRole": {
411
+ "type": "string",
412
+ "default": "owner",
413
+ "description": "Role assigned to organization creator"
414
+ }
415
+ },
416
+ "additionalProperties": false,
417
+ "description": "Organization/multi-tenant configuration"
418
+ },
419
+ "enterprise": {
420
+ "type": "object",
421
+ "properties": {
422
+ "oidc": {
423
+ "type": "object",
424
+ "properties": {
425
+ "enabled": {
426
+ "type": "boolean",
427
+ "default": false
428
+ },
429
+ "issuer": {
430
+ "type": "string",
431
+ "format": "uri",
432
+ "description": "OIDC Issuer URL (.well-known/openid-configuration)"
433
+ },
434
+ "clientId": {
435
+ "type": "string",
436
+ "description": "OIDC client ID"
437
+ },
438
+ "clientSecret": {
439
+ "type": "string",
440
+ "description": "OIDC client secret"
441
+ },
442
+ "scopes": {
443
+ "type": "array",
444
+ "items": {
445
+ "type": "string"
446
+ },
447
+ "default": [
448
+ "openid",
449
+ "profile",
450
+ "email"
451
+ ],
452
+ "description": "OIDC scopes"
453
+ },
454
+ "attributeMapping": {
455
+ "type": "object",
456
+ "additionalProperties": {
457
+ "type": "string"
458
+ },
459
+ "description": "Map IdP claims to User fields"
460
+ },
461
+ "displayName": {
462
+ "type": "string",
463
+ "description": "Display name for the provider button"
464
+ },
465
+ "icon": {
466
+ "type": "string",
467
+ "description": "Icon URL or identifier"
468
+ }
469
+ },
470
+ "required": [
471
+ "issuer",
472
+ "clientId",
473
+ "clientSecret"
474
+ ],
475
+ "additionalProperties": false,
476
+ "description": "OpenID Connect configuration"
477
+ },
478
+ "saml": {
479
+ "type": "object",
480
+ "properties": {
481
+ "enabled": {
482
+ "type": "boolean",
483
+ "default": false
484
+ },
485
+ "entryPoint": {
486
+ "type": "string",
487
+ "format": "uri",
488
+ "description": "IdP SSO URL"
489
+ },
490
+ "cert": {
491
+ "type": "string",
492
+ "description": "IdP Public Certificate (PEM format)"
493
+ },
494
+ "issuer": {
495
+ "type": "string",
496
+ "description": "Entity ID of the IdP"
497
+ },
498
+ "signatureAlgorithm": {
499
+ "type": "string",
500
+ "enum": [
501
+ "sha256",
502
+ "sha512"
503
+ ],
504
+ "default": "sha256",
505
+ "description": "Signature algorithm"
506
+ },
507
+ "attributeMapping": {
508
+ "type": "object",
509
+ "additionalProperties": {
510
+ "type": "string"
511
+ },
512
+ "description": "Map SAML attributes to User fields"
513
+ },
514
+ "displayName": {
515
+ "type": "string",
516
+ "description": "Display name for the provider button"
517
+ },
518
+ "icon": {
519
+ "type": "string",
520
+ "description": "Icon URL or identifier"
521
+ }
522
+ },
523
+ "required": [
524
+ "entryPoint",
525
+ "cert",
526
+ "issuer"
527
+ ],
528
+ "additionalProperties": false,
529
+ "description": "SAML 2.0 configuration"
530
+ },
531
+ "ldap": {
532
+ "type": "object",
533
+ "properties": {
534
+ "enabled": {
535
+ "type": "boolean",
536
+ "default": false
537
+ },
538
+ "url": {
539
+ "type": "string",
540
+ "format": "uri",
541
+ "description": "LDAP Server URL (ldap:// or ldaps://)"
542
+ },
543
+ "bindDn": {
544
+ "type": "string",
545
+ "description": "Bind DN for LDAP authentication"
546
+ },
547
+ "bindCredentials": {
548
+ "type": "string",
549
+ "description": "Bind credentials"
550
+ },
551
+ "searchBase": {
552
+ "type": "string",
553
+ "description": "Search base DN"
554
+ },
555
+ "searchFilter": {
556
+ "type": "string",
557
+ "description": "Search filter"
558
+ },
559
+ "groupSearchBase": {
560
+ "type": "string",
561
+ "description": "Group search base DN"
562
+ },
563
+ "displayName": {
564
+ "type": "string",
565
+ "description": "Display name for the provider button"
566
+ },
567
+ "icon": {
568
+ "type": "string",
569
+ "description": "Icon URL or identifier"
570
+ }
571
+ },
572
+ "required": [
573
+ "url",
574
+ "bindDn",
575
+ "bindCredentials",
576
+ "searchBase",
577
+ "searchFilter"
578
+ ],
579
+ "additionalProperties": false,
580
+ "description": "LDAP/Active Directory configuration"
581
+ }
582
+ },
583
+ "additionalProperties": false
584
+ },
392
585
  "userFieldMapping": {
393
586
  "type": "object",
394
587
  "properties": {
@@ -463,6 +656,48 @@
463
656
  ],
464
657
  "additionalProperties": false
465
658
  },
659
+ "mapping": {
660
+ "type": "object",
661
+ "properties": {
662
+ "user": {
663
+ "type": "object",
664
+ "additionalProperties": {
665
+ "type": "string"
666
+ },
667
+ "description": "User field mapping (e.g., { \"emailVerified\": \"email_verified\" })"
668
+ },
669
+ "session": {
670
+ "type": "object",
671
+ "additionalProperties": {
672
+ "type": "string"
673
+ },
674
+ "default": {
675
+ "sessionToken": "token",
676
+ "expires": "expiresAt"
677
+ },
678
+ "description": "Session field mapping"
679
+ },
680
+ "account": {
681
+ "type": "object",
682
+ "additionalProperties": {
683
+ "type": "string"
684
+ },
685
+ "default": {
686
+ "providerAccountId": "accountId",
687
+ "provider": "providerId"
688
+ },
689
+ "description": "Account field mapping"
690
+ },
691
+ "verificationToken": {
692
+ "type": "object",
693
+ "additionalProperties": {
694
+ "type": "string"
695
+ },
696
+ "description": "VerificationToken field mapping"
697
+ }
698
+ },
699
+ "additionalProperties": false
700
+ },
466
701
  "plugins": {
467
702
  "type": "array",
468
703
  "items": {
@@ -0,0 +1,68 @@
1
+ {
2
+ "$ref": "#/definitions/Timeframe",
3
+ "definitions": {
4
+ "Timeframe": {
5
+ "type": "object",
6
+ "properties": {
7
+ "type": {
8
+ "type": "string",
9
+ "enum": [
10
+ "absolute",
11
+ "relative"
12
+ ]
13
+ },
14
+ "start": {
15
+ "type": "string",
16
+ "description": "Start date (ISO format)"
17
+ },
18
+ "end": {
19
+ "type": "string",
20
+ "description": "End date (ISO format)"
21
+ },
22
+ "relative": {
23
+ "type": "object",
24
+ "properties": {
25
+ "unit": {
26
+ "type": "string",
27
+ "enum": [
28
+ "hour",
29
+ "day",
30
+ "week",
31
+ "month",
32
+ "quarter",
33
+ "year"
34
+ ]
35
+ },
36
+ "value": {
37
+ "type": "integer"
38
+ },
39
+ "direction": {
40
+ "type": "string",
41
+ "enum": [
42
+ "past",
43
+ "future",
44
+ "current"
45
+ ],
46
+ "default": "past"
47
+ }
48
+ },
49
+ "required": [
50
+ "unit",
51
+ "value"
52
+ ],
53
+ "additionalProperties": false
54
+ },
55
+ "text": {
56
+ "type": "string",
57
+ "description": "Original timeframe text"
58
+ }
59
+ },
60
+ "required": [
61
+ "type",
62
+ "text"
63
+ ],
64
+ "additionalProperties": false
65
+ }
66
+ },
67
+ "$schema": "http://json-schema.org/draft-07/schema#"
68
+ }