@jskit-ai/jskit-catalog 0.1.24 → 0.1.26

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 (2) hide show
  1. package/catalog/packages.json +386 -265
  2. package/package.json +1 -1
@@ -6,11 +6,12 @@
6
6
  "packages": [
7
7
  {
8
8
  "packageId": "@jskit-ai/assistant",
9
- "version": "0.1.24",
9
+ "version": "0.1.26",
10
10
  "descriptor": {
11
11
  "packageVersion": 1,
12
12
  "packageId": "@jskit-ai/assistant",
13
- "version": "0.1.24",
13
+ "version": "0.1.26",
14
+ "kind": "runtime",
14
15
  "description": "Unified assistant module with streaming chat, transcript persistence, service-aware tool execution, and workspace UI.",
15
16
  "options": {
16
17
  "ai-provider": {
@@ -104,11 +105,10 @@
104
105
  ],
105
106
  "containerTokens": {
106
107
  "server": [
107
- "assistant.chat.service",
108
- "assistant.settings.service",
109
- "assistant.transcript.service",
108
+ "assistant.ai.client",
110
109
  "assistant.conversation.repository",
111
110
  "assistant.message.repository",
111
+ "assistant.service.tool-catalog",
112
112
  "assistant.settings.repository"
113
113
  ],
114
114
  "client": [
@@ -121,14 +121,14 @@
121
121
  "mutations": {
122
122
  "dependencies": {
123
123
  "runtime": {
124
- "@jskit-ai/assistant": "0.1.24",
125
- "@jskit-ai/auth-core": "0.1.15",
126
- "@jskit-ai/database-runtime": "0.1.16",
127
- "@jskit-ai/http-runtime": "0.1.15",
128
- "@jskit-ai/kernel": "0.1.15",
129
- "@jskit-ai/realtime": "0.1.15",
130
- "@jskit-ai/users-core": "0.1.20",
131
- "@jskit-ai/users-web": "0.1.25",
124
+ "@jskit-ai/assistant": "0.1.26",
125
+ "@jskit-ai/auth-core": "0.1.17",
126
+ "@jskit-ai/database-runtime": "0.1.18",
127
+ "@jskit-ai/http-runtime": "0.1.17",
128
+ "@jskit-ai/kernel": "0.1.18",
129
+ "@jskit-ai/realtime": "0.1.17",
130
+ "@jskit-ai/users-core": "0.1.27",
131
+ "@jskit-ai/users-web": "0.1.32",
132
132
  "@tanstack/vue-query": "^5.90.5",
133
133
  "dompurify": "^3.3.3",
134
134
  "marked": "^17.0.4",
@@ -301,11 +301,12 @@
301
301
  },
302
302
  {
303
303
  "packageId": "@jskit-ai/auth-core",
304
- "version": "0.1.15",
304
+ "version": "0.1.17",
305
305
  "descriptor": {
306
306
  "packageVersion": 1,
307
307
  "packageId": "@jskit-ai/auth-core",
308
- "version": "0.1.15",
308
+ "version": "0.1.17",
309
+ "kind": "runtime",
309
310
  "dependsOn": [
310
311
  "@jskit-ai/value-app-config-shared"
311
312
  ],
@@ -372,7 +373,7 @@
372
373
  "mutations": {
373
374
  "dependencies": {
374
375
  "runtime": {
375
- "@jskit-ai/kernel": "0.1.15",
376
+ "@jskit-ai/kernel": "0.1.18",
376
377
  "@fastify/cookie": "^11.0.2",
377
378
  "@fastify/csrf-protection": "^7.1.0",
378
379
  "@fastify/rate-limit": "^10.3.0"
@@ -390,11 +391,12 @@
390
391
  },
391
392
  {
392
393
  "packageId": "@jskit-ai/auth-provider-supabase-core",
393
- "version": "0.1.15",
394
+ "version": "0.1.17",
394
395
  "descriptor": {
395
396
  "packageVersion": 1,
396
397
  "packageId": "@jskit-ai/auth-provider-supabase-core",
397
- "version": "0.1.15",
398
+ "version": "0.1.17",
399
+ "kind": "runtime",
398
400
  "options": {
399
401
  "auth-supabase-url": {
400
402
  "required": true,
@@ -466,8 +468,7 @@
466
468
  ],
467
469
  "containerTokens": {
468
470
  "server": [
469
- "authService",
470
- "auth.provider.supabase.actionContributor"
471
+ "authService"
471
472
  ],
472
473
  "client": []
473
474
  }
@@ -476,8 +477,8 @@
476
477
  "mutations": {
477
478
  "dependencies": {
478
479
  "runtime": {
479
- "@jskit-ai/auth-core": "0.1.15",
480
- "@jskit-ai/kernel": "0.1.15",
480
+ "@jskit-ai/auth-core": "0.1.17",
481
+ "@jskit-ai/kernel": "0.1.18",
481
482
  "dotenv": "^16.4.5",
482
483
  "@supabase/supabase-js": "^2.57.4",
483
484
  "jose": "^6.1.0"
@@ -542,11 +543,12 @@
542
543
  },
543
544
  {
544
545
  "packageId": "@jskit-ai/auth-web",
545
- "version": "0.1.17",
546
+ "version": "0.1.19",
546
547
  "descriptor": {
547
548
  "packageVersion": 1,
548
549
  "packageId": "@jskit-ai/auth-web",
549
- "version": "0.1.17",
550
+ "version": "0.1.19",
551
+ "kind": "runtime",
550
552
  "description": "Auth web module: Fastify auth routes plus web login/sign-out scaffolds.",
551
553
  "dependsOn": [
552
554
  "@jskit-ai/auth-core",
@@ -775,10 +777,10 @@
775
777
  "@tanstack/vue-query": "5.92.12",
776
778
  "@mdi/js": "^7.4.47",
777
779
  "@fastify/type-provider-typebox": "^6.1.0",
778
- "@jskit-ai/auth-core": "0.1.15",
779
- "@jskit-ai/http-runtime": "0.1.15",
780
- "@jskit-ai/kernel": "0.1.15",
781
- "@jskit-ai/shell-web": "0.1.15",
780
+ "@jskit-ai/auth-core": "0.1.17",
781
+ "@jskit-ai/http-runtime": "0.1.17",
782
+ "@jskit-ai/kernel": "0.1.18",
783
+ "@jskit-ai/shell-web": "0.1.17",
782
784
  "vuetify": "^4.0.0"
783
785
  },
784
786
  "dev": {}
@@ -847,14 +849,59 @@
847
849
  }
848
850
  },
849
851
  {
850
- "packageId": "@jskit-ai/crud",
851
- "version": "0.1.24",
852
+ "packageId": "@jskit-ai/crud-core",
853
+ "version": "0.1.26",
854
+ "descriptor": {
855
+ "packageVersion": 1,
856
+ "packageId": "@jskit-ai/crud-core",
857
+ "version": "0.1.26",
858
+ "kind": "runtime",
859
+ "description": "Shared CRUD helpers used by CRUD modules.",
860
+ "dependsOn": [
861
+ "@jskit-ai/kernel",
862
+ "@jskit-ai/realtime",
863
+ "@jskit-ai/shell-web",
864
+ "@jskit-ai/users-core",
865
+ "@jskit-ai/users-web"
866
+ ],
867
+ "capabilities": {
868
+ "provides": [
869
+ "crud.core"
870
+ ],
871
+ "requires": []
872
+ },
873
+ "runtime": {
874
+ "server": {
875
+ "providers": []
876
+ },
877
+ "client": {
878
+ "providers": []
879
+ }
880
+ },
881
+ "mutations": {
882
+ "dependencies": {
883
+ "runtime": {
884
+ "@jskit-ai/crud-core": "0.1.26"
885
+ },
886
+ "dev": {}
887
+ },
888
+ "packageJson": {
889
+ "scripts": {}
890
+ },
891
+ "procfile": {},
892
+ "files": []
893
+ }
894
+ }
895
+ },
896
+ {
897
+ "packageId": "@jskit-ai/crud-server-generator",
898
+ "version": "0.1.26",
852
899
  "descriptor": {
853
900
  "packageVersion": 1,
854
- "packageId": "@jskit-ai/crud",
855
- "version": "0.1.24",
856
- "installationMode": "clone-only",
857
- "description": "CRUD module with server routes, actions, persistence, and client pages.",
901
+ "packageId": "@jskit-ai/crud-server-generator",
902
+ "version": "0.1.26",
903
+ "kind": "generator",
904
+ "description": "CRUD server generator with routes, actions, and persistence scaffolding.",
858
905
  "options": {
859
906
  "namespace": {
860
907
  "required": true,
@@ -881,8 +928,22 @@
881
928
  "required": false,
882
929
  "inputType": "text",
883
930
  "defaultValue": "",
884
- "promptLabel": "Page directory prefix",
885
- "promptHint": "Optional subpath under the selected surface pages root (example: crm or ops/team-a)."
931
+ "promptLabel": "Route path prefix",
932
+ "promptHint": "Optional subpath prepended to the CRUD route path (example: crm or ops/team-a)."
933
+ },
934
+ "table-name": {
935
+ "required": true,
936
+ "inputType": "text",
937
+ "defaultValue": "",
938
+ "promptLabel": "Table name",
939
+ "promptHint": "Required existing MySQL table to introspect for CRUD schema generation."
940
+ },
941
+ "id-column": {
942
+ "required": false,
943
+ "inputType": "text",
944
+ "defaultValue": "id",
945
+ "promptLabel": "Id column",
946
+ "promptHint": "Primary key column used by CRUD endpoints (default: id)."
886
947
  }
887
948
  },
888
949
  "optionPolicies": {
@@ -896,9 +957,7 @@
896
957
  "@jskit-ai/database-runtime",
897
958
  "@jskit-ai/http-runtime",
898
959
  "@jskit-ai/realtime",
899
- "@jskit-ai/shell-web",
900
- "@jskit-ai/users-core",
901
- "@jskit-ai/users-web"
960
+ "@jskit-ai/users-core"
902
961
  ],
903
962
  "capabilities": {
904
963
  "provides": [
@@ -908,10 +967,7 @@
908
967
  "runtime.actions",
909
968
  "runtime.database",
910
969
  "auth.policy",
911
- "users.core",
912
- "users.web",
913
- "runtime.web-placement",
914
- "runtime.realtime.client"
970
+ "users.core"
915
971
  ]
916
972
  },
917
973
  "runtime": {
@@ -922,9 +978,6 @@
922
978
  "export": "CrudServiceProvider"
923
979
  }
924
980
  ]
925
- },
926
- "client": {
927
- "providers": []
928
981
  }
929
982
  },
930
983
  "metadata": {
@@ -940,30 +993,22 @@
940
993
  }
941
994
  ],
942
995
  "containerTokens": {
943
- "server": [
944
- "crud.<namespace>.repository",
945
- "crud.<namespace>.service"
946
- ],
947
- "client": []
996
+ "server": []
948
997
  }
949
998
  }
950
999
  },
951
1000
  "mutations": {
952
1001
  "dependencies": {
953
1002
  "runtime": {
954
- "@jskit-ai/auth-core": "0.1.15",
955
- "@jskit-ai/crud-core": "0.1.24",
956
- "@jskit-ai/database-runtime": "0.1.16",
957
- "@jskit-ai/http-runtime": "0.1.15",
958
- "@jskit-ai/kernel": "0.1.15",
959
- "@jskit-ai/realtime": "0.1.15",
960
- "@jskit-ai/shell-web": "0.1.15",
961
- "@jskit-ai/users-core": "0.1.20",
962
- "@jskit-ai/users-web": "0.1.25",
1003
+ "@jskit-ai/auth-core": "0.1.17",
1004
+ "@jskit-ai/crud-core": "0.1.26",
1005
+ "@jskit-ai/database-runtime": "0.1.18",
1006
+ "@jskit-ai/http-runtime": "0.1.17",
1007
+ "@jskit-ai/kernel": "0.1.18",
1008
+ "@jskit-ai/realtime": "0.1.17",
1009
+ "@jskit-ai/users-core": "0.1.27",
963
1010
  "@local/${option:namespace|kebab}": "file:packages/${option:namespace|kebab}",
964
- "@tanstack/vue-query": "5.92.12",
965
- "typebox": "^1.0.81",
966
- "vuetify": "^4.0.0"
1011
+ "typebox": "^1.0.81"
967
1012
  },
968
1013
  "dev": {}
969
1014
  },
@@ -979,7 +1024,11 @@
979
1024
  "extension": ".cjs",
980
1025
  "reason": "Install CRUD schema migration.",
981
1026
  "category": "crud",
982
- "id": "crud-initial-schema-${option:namespace|snake}"
1027
+ "id": "crud-initial-schema-${option:namespace|snake}",
1028
+ "templateContext": {
1029
+ "entrypoint": "src/server/buildTemplateContext.js",
1030
+ "export": "buildTemplateContext"
1031
+ }
983
1032
  },
984
1033
  {
985
1034
  "from": "templates/src/local-package/package.json",
@@ -995,26 +1044,16 @@
995
1044
  "category": "crud",
996
1045
  "id": "crud-local-package-descriptor-${option:namespace|snake}"
997
1046
  },
998
- {
999
- "from": "templates/src/local-package/client/index.js",
1000
- "to": "packages/${option:namespace|kebab}/src/client/index.js",
1001
- "reason": "Install app-local CRUD client package exports.",
1002
- "category": "crud",
1003
- "id": "crud-local-package-client-index-${option:namespace|snake}"
1004
- },
1005
- {
1006
- "from": "templates/src/local-package/server/diTokens.js",
1007
- "to": "packages/${option:namespace|kebab}/src/server/diTokens.js",
1008
- "reason": "Install app-local CRUD server DI token constants.",
1009
- "category": "crud",
1010
- "id": "crud-local-package-server-di-tokens-${option:namespace|snake}"
1011
- },
1012
1047
  {
1013
1048
  "from": "templates/src/local-package/server/CrudServiceProvider.js",
1014
1049
  "to": "packages/${option:namespace|kebab}/src/server/${option:namespace|pascal}ServiceProvider.js",
1015
1050
  "reason": "Install app-local CRUD server provider.",
1016
1051
  "category": "crud",
1017
- "id": "crud-local-package-server-provider-${option:namespace|snake}"
1052
+ "id": "crud-local-package-server-provider-${option:namespace|snake}",
1053
+ "templateContext": {
1054
+ "entrypoint": "src/server/buildTemplateContext.js",
1055
+ "export": "buildTemplateContext"
1056
+ }
1018
1057
  },
1019
1058
  {
1020
1059
  "from": "templates/src/local-package/server/actions.js",
@@ -1038,11 +1077,15 @@
1038
1077
  "id": "crud-local-package-server-routes-${option:namespace|snake}"
1039
1078
  },
1040
1079
  {
1041
- "from": "src/server/repository.js",
1080
+ "from": "templates/src/local-package/server/repository.js",
1042
1081
  "to": "packages/${option:namespace|kebab}/src/server/repository.js",
1043
1082
  "reason": "Install app-local CRUD repository.",
1044
1083
  "category": "crud",
1045
- "id": "crud-local-package-server-repository-${option:namespace|snake}"
1084
+ "id": "crud-local-package-server-repository-${option:namespace|snake}",
1085
+ "templateContext": {
1086
+ "entrypoint": "src/server/buildTemplateContext.js",
1087
+ "export": "buildTemplateContext"
1088
+ }
1046
1089
  },
1047
1090
  {
1048
1091
  "from": "templates/src/local-package/server/service.js",
@@ -1059,111 +1102,212 @@
1059
1102
  "id": "crud-local-package-shared-index-${option:namespace|snake}"
1060
1103
  },
1061
1104
  {
1062
- "from": "templates/src/local-package/shared/moduleConfig.js",
1063
- "to": "packages/${option:namespace|kebab}/src/shared/moduleConfig.js",
1064
- "reason": "Install app-local CRUD shared module config.",
1065
- "category": "crud",
1066
- "id": "crud-local-package-shared-module-config-${option:namespace|snake}"
1067
- },
1068
- {
1069
- "from": "src/shared/crud/crudResource.js",
1105
+ "from": "templates/src/local-package/shared/crudResource.js",
1070
1106
  "to": "packages/${option:namespace|kebab}/src/shared/${option:namespace|singular|camel}Resource.js",
1071
1107
  "reason": "Install app-local CRUD resource.",
1072
1108
  "category": "crud",
1073
- "id": "crud-local-package-shared-resource-${option:namespace|snake}"
1074
- },
1075
- {
1076
- "from": "templates/src/elements/clientSupport.js",
1077
- "to": "packages/${option:namespace|kebab}/src/client/clientSupport.js",
1078
- "reason": "Install app-local CRUD client support helpers.",
1079
- "category": "crud",
1080
- "id": "crud-local-package-client-support-${option:namespace|snake}"
1081
- },
1082
- {
1083
- "from": "templates/src/elements/ListElement.vue",
1084
- "to": "packages/${option:namespace|kebab}/src/client/List${option:namespace|plural|pascal}Element.vue",
1085
- "reason": "Install app-local CRUD list element.",
1086
- "category": "crud",
1087
- "id": "crud-local-package-client-list-${option:namespace|snake}"
1088
- },
1089
- {
1090
- "from": "templates/src/elements/ViewElement.vue",
1091
- "to": "packages/${option:namespace|kebab}/src/client/View${option:namespace|singular|pascal}Element.vue",
1092
- "reason": "Install app-local CRUD view element.",
1093
- "category": "crud",
1094
- "id": "crud-local-package-client-view-${option:namespace|snake}"
1095
- },
1096
- {
1097
- "from": "templates/src/elements/CreateElement.vue",
1098
- "to": "packages/${option:namespace|kebab}/src/client/Create${option:namespace|singular|pascal}Element.vue",
1099
- "reason": "Install app-local CRUD create element.",
1100
- "category": "crud",
1101
- "id": "crud-local-package-client-create-${option:namespace|snake}"
1102
- },
1103
- {
1104
- "from": "templates/src/elements/EditElement.vue",
1105
- "to": "packages/${option:namespace|kebab}/src/client/Edit${option:namespace|singular|pascal}Element.vue",
1106
- "reason": "Install app-local CRUD edit element.",
1107
- "category": "crud",
1108
- "id": "crud-local-package-client-edit-${option:namespace|snake}"
1109
+ "id": "crud-local-package-shared-resource-${option:namespace|snake}",
1110
+ "templateContext": {
1111
+ "entrypoint": "src/server/buildTemplateContext.js",
1112
+ "export": "buildTemplateContext"
1113
+ }
1114
+ }
1115
+ ],
1116
+ "text": []
1117
+ }
1118
+ }
1119
+ },
1120
+ {
1121
+ "packageId": "@jskit-ai/crud-ui-generator",
1122
+ "version": "0.1.1",
1123
+ "descriptor": {
1124
+ "packageVersion": 1,
1125
+ "packageId": "@jskit-ai/crud-ui-generator",
1126
+ "version": "0.1.1",
1127
+ "kind": "generator",
1128
+ "description": "Generate app-local CRUD UI scaffolds from resource validators.",
1129
+ "options": {
1130
+ "namespace": {
1131
+ "required": true,
1132
+ "inputType": "text",
1133
+ "defaultValue": "",
1134
+ "promptLabel": "UI namespace",
1135
+ "promptHint": "Required slug (example: contacts-alt, customers-ui, tickets-view)."
1136
+ },
1137
+ "surface": {
1138
+ "required": true,
1139
+ "inputType": "text",
1140
+ "defaultFromConfig": "surfaceDefaultId",
1141
+ "promptLabel": "Target surface",
1142
+ "promptHint": "Defaults to config.public.surfaceDefaultId. Must match an enabled surface id."
1143
+ },
1144
+ "resource-file": {
1145
+ "required": true,
1146
+ "inputType": "text",
1147
+ "defaultValue": "",
1148
+ "promptLabel": "Resource file",
1149
+ "promptHint": "Relative path from app root to the resource module."
1150
+ },
1151
+ "resource-export": {
1152
+ "required": false,
1153
+ "inputType": "text",
1154
+ "defaultValue": "",
1155
+ "promptLabel": "Resource export",
1156
+ "promptHint": "Named export in the resource module (defaults to resource-file basename, example: contactResource)."
1157
+ },
1158
+ "operations": {
1159
+ "required": true,
1160
+ "inputType": "text",
1161
+ "defaultValue": "",
1162
+ "promptLabel": "Operations",
1163
+ "promptHint": "Required comma-separated values from: list, view, new, edit."
1164
+ },
1165
+ "display-fields": {
1166
+ "required": false,
1167
+ "inputType": "text",
1168
+ "defaultValue": "",
1169
+ "promptLabel": "Display fields",
1170
+ "promptHint": "Optional comma-separated field keys to render (must exist in selected operation schemas)."
1171
+ },
1172
+ "api-path": {
1173
+ "required": true,
1174
+ "inputType": "text",
1175
+ "defaultValue": "",
1176
+ "promptLabel": "API path",
1177
+ "promptHint": "Base API path without trailing id (example: /crud/contacts)."
1178
+ },
1179
+ "route-path": {
1180
+ "required": true,
1181
+ "inputType": "text",
1182
+ "defaultValue": "",
1183
+ "promptLabel": "Route path",
1184
+ "promptHint": "List route path under the target surface (example: crm/contacts-alt)."
1185
+ },
1186
+ "id-param": {
1187
+ "required": false,
1188
+ "inputType": "text",
1189
+ "defaultValue": "recordId",
1190
+ "promptLabel": "Route id param",
1191
+ "promptHint": "Route param used by view and edit pages (default: recordId)."
1192
+ },
1193
+ "directory-prefix": {
1194
+ "required": false,
1195
+ "inputType": "text",
1196
+ "defaultValue": "",
1197
+ "promptLabel": "Page directory prefix",
1198
+ "promptHint": "Optional subpath under the selected surface pages root (example: crm or ops/team-a)."
1199
+ }
1200
+ },
1201
+ "dependsOn": [],
1202
+ "capabilities": {
1203
+ "provides": [
1204
+ "ui-generator"
1205
+ ],
1206
+ "requires": []
1207
+ },
1208
+ "runtime": {
1209
+ "server": {
1210
+ "providers": []
1211
+ },
1212
+ "client": {
1213
+ "providers": []
1214
+ }
1215
+ },
1216
+ "metadata": {
1217
+ "apiSummary": {
1218
+ "surfaces": [
1219
+ {
1220
+ "subpath": "./server/buildTemplateContext",
1221
+ "summary": "Builds deterministic template context values from selected resource operation validators."
1222
+ }
1223
+ ],
1224
+ "containerTokens": {
1225
+ "server": [],
1226
+ "client": []
1227
+ }
1228
+ }
1229
+ },
1230
+ "mutations": {
1231
+ "dependencies": {
1232
+ "runtime": {
1233
+ "@jskit-ai/users-web": "0.1.32"
1109
1234
  },
1235
+ "dev": {}
1236
+ },
1237
+ "packageJson": {
1238
+ "scripts": {}
1239
+ },
1240
+ "procfile": {},
1241
+ "files": [
1110
1242
  {
1111
- "from": "templates/src/pages/admin/crud/index.vue",
1243
+ "from": "templates/src/pages/admin/ui-generator/ListElement.vue",
1112
1244
  "toSurface": "${option:surface|lower}",
1113
- "toSurfacePath": "${option:directory-prefix|pathprefix}${option:namespace|kebab}/index.vue",
1114
- "reason": "Install CRUD list page scaffold.",
1115
- "category": "crud",
1116
- "id": "crud-page-surface-crud-index",
1245
+ "toSurfacePath": "${option:directory-prefix|pathprefix}${option:route-path|path}/index.vue",
1246
+ "reason": "Install generated list page.",
1247
+ "category": "ui-generator",
1248
+ "id": "ui-generator-page-list-${option:namespace|snake}",
1249
+ "templateContext": {
1250
+ "entrypoint": "src/server/buildTemplateContext.js",
1251
+ "export": "buildUiTemplateContext"
1252
+ },
1117
1253
  "when": {
1118
- "config": "tenancyMode",
1254
+ "option": "operations",
1119
1255
  "in": [
1120
- "personal",
1121
- "workspaces"
1256
+ "list"
1122
1257
  ]
1123
1258
  }
1124
1259
  },
1125
1260
  {
1126
- "from": "templates/src/pages/admin/crud/new.vue",
1261
+ "from": "templates/src/pages/admin/ui-generator/ViewElement.vue",
1127
1262
  "toSurface": "${option:surface|lower}",
1128
- "toSurfacePath": "${option:directory-prefix|pathprefix}${option:namespace|kebab}/new.vue",
1129
- "reason": "Install CRUD create page scaffold.",
1130
- "category": "crud",
1131
- "id": "crud-page-surface-crud-new",
1263
+ "toSurfacePath": "${option:directory-prefix|pathprefix}${option:route-path|path}/[${option:id-param|trim}]/index.vue",
1264
+ "reason": "Install generated view page.",
1265
+ "category": "ui-generator",
1266
+ "id": "ui-generator-page-view-${option:namespace|snake}",
1267
+ "templateContext": {
1268
+ "entrypoint": "src/server/buildTemplateContext.js",
1269
+ "export": "buildUiTemplateContext"
1270
+ },
1132
1271
  "when": {
1133
- "config": "tenancyMode",
1272
+ "option": "operations",
1134
1273
  "in": [
1135
- "personal",
1136
- "workspaces"
1274
+ "view"
1137
1275
  ]
1138
1276
  }
1139
1277
  },
1140
1278
  {
1141
- "from": "templates/src/pages/admin/crud/[recordId]/index.vue",
1279
+ "from": "templates/src/pages/admin/ui-generator/NewElement.vue",
1142
1280
  "toSurface": "${option:surface|lower}",
1143
- "toSurfacePath": "${option:directory-prefix|pathprefix}${option:namespace|kebab}/[recordId]/index.vue",
1144
- "reason": "Install CRUD detail page scaffold.",
1145
- "category": "crud",
1146
- "id": "crud-page-surface-crud-view",
1281
+ "toSurfacePath": "${option:directory-prefix|pathprefix}${option:route-path|path}/new.vue",
1282
+ "reason": "Install generated new page.",
1283
+ "category": "ui-generator",
1284
+ "id": "ui-generator-page-new-${option:namespace|snake}",
1285
+ "templateContext": {
1286
+ "entrypoint": "src/server/buildTemplateContext.js",
1287
+ "export": "buildUiTemplateContext"
1288
+ },
1147
1289
  "when": {
1148
- "config": "tenancyMode",
1290
+ "option": "operations",
1149
1291
  "in": [
1150
- "personal",
1151
- "workspaces"
1292
+ "new"
1152
1293
  ]
1153
1294
  }
1154
1295
  },
1155
1296
  {
1156
- "from": "templates/src/pages/admin/crud/[recordId]/edit.vue",
1297
+ "from": "templates/src/pages/admin/ui-generator/EditElement.vue",
1157
1298
  "toSurface": "${option:surface|lower}",
1158
- "toSurfacePath": "${option:directory-prefix|pathprefix}${option:namespace|kebab}/[recordId]/edit.vue",
1159
- "reason": "Install CRUD edit page scaffold.",
1160
- "category": "crud",
1161
- "id": "crud-page-surface-crud-edit",
1299
+ "toSurfacePath": "${option:directory-prefix|pathprefix}${option:route-path|path}/[${option:id-param|trim}]/edit.vue",
1300
+ "reason": "Install generated edit page.",
1301
+ "category": "ui-generator",
1302
+ "id": "ui-generator-page-edit-${option:namespace|snake}",
1303
+ "templateContext": {
1304
+ "entrypoint": "src/server/buildTemplateContext.js",
1305
+ "export": "buildUiTemplateContext"
1306
+ },
1162
1307
  "when": {
1163
- "config": "tenancyMode",
1308
+ "option": "operations",
1164
1309
  "in": [
1165
- "personal",
1166
- "workspaces"
1310
+ "edit"
1167
1311
  ]
1168
1312
  }
1169
1313
  }
@@ -1173,16 +1317,15 @@
1173
1317
  "op": "append-text",
1174
1318
  "file": "src/placement.js",
1175
1319
  "position": "bottom",
1176
- "skipIfContains": "jskit:crud.menu:${option:namespace|kebab}:${option:directory-prefix|path}",
1177
- "value": "\n// jskit:crud.menu:${option:namespace|kebab}:${option:directory-prefix|path}\nimport { crudModuleConfig as crud${option:namespace|pascal}ModuleConfig } from \"@local/${option:namespace|kebab}/shared\";\n{\n const crudNamespace = \"${option:namespace|kebab}\";\n\n addPlacement({\n id: \"crud.\" + crudNamespace + \".menu\",\n host: \"shell-layout\",\n position: \"primary-menu\",\n surfaces: [\"${option:surface|lower}\"],\n order: 150,\n componentToken: \"users.web.shell.surface-aware-menu-link-item\",\n props: {\n label: \"${option:namespace|plural|pascal}\",\n surface: \"${option:surface|lower}\",\n workspaceSuffix: crud${option:namespace|pascal}ModuleConfig.relativePath,\n nonWorkspaceSuffix: crud${option:namespace|pascal}ModuleConfig.relativePath\n },\n when: ({ auth }) => Boolean(auth?.authenticated)\n });\n}\n",
1178
- "reason": "Append CRUD menu placement into app-owned placement registry.",
1179
- "category": "crud",
1180
- "id": "crud-placement-menu",
1320
+ "skipIfContains": "jskit:ui-generator.menu:${option:namespace|kebab}:${option:directory-prefix|path}:${option:route-path|path}",
1321
+ "value": "\n// jskit:ui-generator.menu:${option:namespace|kebab}:${option:directory-prefix|path}:${option:route-path|path}\n{\n addPlacement({\n id: \"ui-generator.${option:namespace|kebab}.menu\",\n host: \"shell-layout\",\n position: \"primary-menu\",\n surfaces: [\"${option:surface|lower}\"],\n order: 155,\n componentToken: \"users.web.shell.surface-aware-menu-link-item\",\n props: {\n label: \"${option:namespace|plural|pascal}\",\n surface: \"${option:surface|lower}\",\n workspaceSuffix: \"/${option:directory-prefix|pathprefix}${option:route-path|path}\",\n nonWorkspaceSuffix: \"/${option:directory-prefix|pathprefix}${option:route-path|path}\"\n },\n when: ({ auth }) => Boolean(auth?.authenticated)\n });\n}\n",
1322
+ "reason": "Append generated UI menu placement.",
1323
+ "category": "ui-generator",
1324
+ "id": "ui-generator-placement-menu",
1181
1325
  "when": {
1182
- "config": "tenancyMode",
1326
+ "option": "operations",
1183
1327
  "in": [
1184
- "personal",
1185
- "workspaces"
1328
+ "list"
1186
1329
  ]
1187
1330
  }
1188
1331
  }
@@ -1190,56 +1333,14 @@
1190
1333
  }
1191
1334
  }
1192
1335
  },
1193
- {
1194
- "packageId": "@jskit-ai/crud-core",
1195
- "version": "0.1.24",
1196
- "descriptor": {
1197
- "packageVersion": 1,
1198
- "packageId": "@jskit-ai/crud-core",
1199
- "version": "0.1.24",
1200
- "description": "Shared CRUD helpers used by CRUD modules.",
1201
- "dependsOn": [
1202
- "@jskit-ai/kernel",
1203
- "@jskit-ai/realtime",
1204
- "@jskit-ai/shell-web",
1205
- "@jskit-ai/users-web"
1206
- ],
1207
- "capabilities": {
1208
- "provides": [
1209
- "crud.core"
1210
- ],
1211
- "requires": []
1212
- },
1213
- "runtime": {
1214
- "server": {
1215
- "providers": []
1216
- },
1217
- "client": {
1218
- "providers": []
1219
- }
1220
- },
1221
- "mutations": {
1222
- "dependencies": {
1223
- "runtime": {
1224
- "@jskit-ai/crud-core": "0.1.24"
1225
- },
1226
- "dev": {}
1227
- },
1228
- "packageJson": {
1229
- "scripts": {}
1230
- },
1231
- "procfile": {},
1232
- "files": []
1233
- }
1234
- }
1235
- },
1236
1336
  {
1237
1337
  "packageId": "@jskit-ai/database-runtime",
1238
- "version": "0.1.16",
1338
+ "version": "0.1.18",
1239
1339
  "descriptor": {
1240
1340
  "packageVersion": 1,
1241
1341
  "packageId": "@jskit-ai/database-runtime",
1242
- "version": "0.1.16",
1342
+ "version": "0.1.18",
1343
+ "kind": "runtime",
1243
1344
  "dependsOn": [
1244
1345
  "@jskit-ai/kernel"
1245
1346
  ],
@@ -1284,7 +1385,9 @@
1284
1385
  "containerTokens": {
1285
1386
  "server": [
1286
1387
  "runtime.database",
1287
- "runtime.database.driver"
1388
+ "runtime.database.driver",
1389
+ "jskit.database.knex",
1390
+ "jskit.database.transactionManager"
1288
1391
  ],
1289
1392
  "client": []
1290
1393
  }
@@ -1293,7 +1396,7 @@
1293
1396
  "mutations": {
1294
1397
  "dependencies": {
1295
1398
  "runtime": {
1296
- "@jskit-ai/kernel": "0.1.15",
1399
+ "@jskit-ai/kernel": "0.1.18",
1297
1400
  "dotenv": "^16.4.5",
1298
1401
  "knex": "^3.1.0"
1299
1402
  },
@@ -1328,11 +1431,12 @@
1328
1431
  },
1329
1432
  {
1330
1433
  "packageId": "@jskit-ai/database-runtime-mysql",
1331
- "version": "0.1.15",
1434
+ "version": "0.1.17",
1332
1435
  "descriptor": {
1333
1436
  "packageVersion": 1,
1334
1437
  "packageId": "@jskit-ai/database-runtime-mysql",
1335
- "version": "0.1.15",
1438
+ "version": "0.1.17",
1439
+ "kind": "runtime",
1336
1440
  "options": {
1337
1441
  "db-host": {
1338
1442
  "required": false,
@@ -1421,7 +1525,7 @@
1421
1525
  "mutations": {
1422
1526
  "dependencies": {
1423
1527
  "runtime": {
1424
- "@jskit-ai/database-runtime": "0.1.16",
1528
+ "@jskit-ai/database-runtime": "0.1.18",
1425
1529
  "mysql2": "^3.11.2"
1426
1530
  },
1427
1531
  "dev": {}
@@ -1492,11 +1596,12 @@
1492
1596
  },
1493
1597
  {
1494
1598
  "packageId": "@jskit-ai/database-runtime-postgres",
1495
- "version": "0.1.15",
1599
+ "version": "0.1.17",
1496
1600
  "descriptor": {
1497
1601
  "packageVersion": 1,
1498
1602
  "packageId": "@jskit-ai/database-runtime-postgres",
1499
- "version": "0.1.15",
1603
+ "version": "0.1.17",
1604
+ "kind": "runtime",
1500
1605
  "options": {
1501
1606
  "db-host": {
1502
1607
  "required": false,
@@ -1585,7 +1690,7 @@
1585
1690
  "mutations": {
1586
1691
  "dependencies": {
1587
1692
  "runtime": {
1588
- "@jskit-ai/database-runtime": "0.1.16",
1693
+ "@jskit-ai/database-runtime": "0.1.18",
1589
1694
  "pg": "^8.13.1"
1590
1695
  },
1591
1696
  "dev": {}
@@ -1656,11 +1761,12 @@
1656
1761
  },
1657
1762
  {
1658
1763
  "packageId": "@jskit-ai/http-runtime",
1659
- "version": "0.1.15",
1764
+ "version": "0.1.17",
1660
1765
  "descriptor": {
1661
1766
  "packageVersion": 1,
1662
1767
  "packageId": "@jskit-ai/http-runtime",
1663
- "version": "0.1.15",
1768
+ "version": "0.1.17",
1769
+ "kind": "runtime",
1664
1770
  "dependsOn": [],
1665
1771
  "capabilities": {
1666
1772
  "provides": [
@@ -1714,11 +1820,9 @@
1714
1820
  ],
1715
1821
  "containerTokens": {
1716
1822
  "server": [
1717
- "validators.http",
1718
1823
  "runtime.http-client"
1719
1824
  ],
1720
1825
  "client": [
1721
- "validators.http.client",
1722
1826
  "runtime.http-client.client"
1723
1827
  ]
1724
1828
  }
@@ -1727,7 +1831,7 @@
1727
1831
  "mutations": {
1728
1832
  "dependencies": {
1729
1833
  "runtime": {
1730
- "@jskit-ai/kernel": "0.1.15",
1834
+ "@jskit-ai/kernel": "0.1.18",
1731
1835
  "@fastify/type-provider-typebox": "^6.1.0",
1732
1836
  "typebox": "^1.0.81"
1733
1837
  },
@@ -1743,11 +1847,12 @@
1743
1847
  },
1744
1848
  {
1745
1849
  "packageId": "@jskit-ai/realtime",
1746
- "version": "0.1.15",
1850
+ "version": "0.1.17",
1747
1851
  "descriptor": {
1748
1852
  "packageVersion": 1,
1749
1853
  "packageId": "@jskit-ai/realtime",
1750
- "version": "0.1.15",
1854
+ "version": "0.1.17",
1855
+ "kind": "runtime",
1751
1856
  "description": "Thin, generic realtime runtime wrappers for socket.io server and client.",
1752
1857
  "options": {
1753
1858
  "realtime-redis-url": {
@@ -1810,7 +1915,8 @@
1810
1915
  ],
1811
1916
  "containerTokens": {
1812
1917
  "server": [
1813
- "runtime.realtime"
1918
+ "runtime.realtime",
1919
+ "runtime.realtime.io"
1814
1920
  ],
1815
1921
  "client": [
1816
1922
  "runtime.realtime.client",
@@ -1841,7 +1947,7 @@
1841
1947
  "mutations": {
1842
1948
  "dependencies": {
1843
1949
  "runtime": {
1844
- "@jskit-ai/kernel": "0.1.15",
1950
+ "@jskit-ai/kernel": "0.1.18",
1845
1951
  "@socket.io/redis-adapter": "^8.3.0",
1846
1952
  "redis": "^5.8.2",
1847
1953
  "socket.io": "^4.8.3",
@@ -1890,11 +1996,12 @@
1890
1996
  },
1891
1997
  {
1892
1998
  "packageId": "@jskit-ai/shell-web",
1893
- "version": "0.1.15",
1999
+ "version": "0.1.17",
1894
2000
  "descriptor": {
1895
2001
  "packageVersion": 1,
1896
2002
  "packageId": "@jskit-ai/shell-web",
1897
- "version": "0.1.15",
2003
+ "version": "0.1.17",
2004
+ "kind": "runtime",
1898
2005
  "description": "Web shell layout runtime with outlet-based placement contributions.",
1899
2006
  "dependsOn": [],
1900
2007
  "capabilities": {
@@ -1938,7 +2045,8 @@
1938
2045
  "client": [
1939
2046
  "runtime.web-placement.client",
1940
2047
  "runtime.web-error.client",
1941
- "runtime.web-error.presentation-store.client"
2048
+ "runtime.web-error.presentation-store.client",
2049
+ "shell.web.query-client"
1942
2050
  ]
1943
2051
  }
1944
2052
  },
@@ -1986,7 +2094,7 @@
1986
2094
  "dependencies": {
1987
2095
  "runtime": {
1988
2096
  "@tanstack/vue-query": "^5.90.5",
1989
- "@jskit-ai/kernel": "0.1.15",
2097
+ "@jskit-ai/kernel": "0.1.18",
1990
2098
  "vuetify": "^4.0.0"
1991
2099
  },
1992
2100
  "dev": {}
@@ -2067,11 +2175,12 @@
2067
2175
  },
2068
2176
  {
2069
2177
  "packageId": "@jskit-ai/storage-runtime",
2070
- "version": "0.1.15",
2178
+ "version": "0.1.17",
2071
2179
  "descriptor": {
2072
2180
  "packageVersion": 1,
2073
2181
  "packageId": "@jskit-ai/storage-runtime",
2074
- "version": "0.1.15",
2182
+ "version": "0.1.17",
2183
+ "kind": "runtime",
2075
2184
  "dependsOn": [
2076
2185
  "@jskit-ai/kernel"
2077
2186
  ],
@@ -2110,7 +2219,7 @@
2110
2219
  "containerTokens": {
2111
2220
  "server": [
2112
2221
  "runtime.storage",
2113
- "KERNEL_TOKENS.Storage"
2222
+ "jskit.storage"
2114
2223
  ],
2115
2224
  "client": []
2116
2225
  }
@@ -2119,7 +2228,7 @@
2119
2228
  "mutations": {
2120
2229
  "dependencies": {
2121
2230
  "runtime": {
2122
- "@jskit-ai/kernel": "0.1.15",
2231
+ "@jskit-ai/kernel": "0.1.18",
2123
2232
  "unstorage": "^1.17.3"
2124
2233
  },
2125
2234
  "dev": {}
@@ -2135,11 +2244,12 @@
2135
2244
  },
2136
2245
  {
2137
2246
  "packageId": "@jskit-ai/users-core",
2138
- "version": "0.1.20",
2247
+ "version": "0.1.27",
2139
2248
  "descriptor": {
2140
2249
  "packageVersion": 1,
2141
2250
  "packageId": "@jskit-ai/users-core",
2142
- "version": "0.1.20",
2251
+ "version": "0.1.27",
2252
+ "kind": "runtime",
2143
2253
  "description": "Users/workspace domain runtime plus HTTP routes for workspace, account, and console features.",
2144
2254
  "dependsOn": [
2145
2255
  "@jskit-ai/auth-core",
@@ -2190,15 +2300,7 @@
2190
2300
  }
2191
2301
  ],
2192
2302
  "containerTokens": {
2193
- "server": [
2194
- "users.core",
2195
- "users.profile.sync.service",
2196
- "users.workspace.service",
2197
- "users.workspace.members.service",
2198
- "users.workspace.settings.service",
2199
- "users.settings.service",
2200
- "users.console.settings.service"
2201
- ],
2303
+ "server": [],
2202
2304
  "client": []
2203
2305
  }
2204
2306
  },
@@ -2226,42 +2328,42 @@
2226
2328
  },
2227
2329
  {
2228
2330
  "method": "GET",
2229
- "path": "/api/w/:workspaceSlug/workspace/settings",
2331
+ "path": "/api/w/:workspaceSlug/settings",
2230
2332
  "summary": "Get workspace settings and role catalog by workspace slug."
2231
2333
  },
2232
2334
  {
2233
2335
  "method": "PATCH",
2234
- "path": "/api/w/:workspaceSlug/workspace/settings",
2336
+ "path": "/api/w/:workspaceSlug/settings",
2235
2337
  "summary": "Update workspace settings by workspace slug."
2236
2338
  },
2237
2339
  {
2238
2340
  "method": "GET",
2239
- "path": "/api/w/:workspaceSlug/workspace/roles",
2341
+ "path": "/api/w/:workspaceSlug/roles",
2240
2342
  "summary": "Get workspace role catalog by workspace slug."
2241
2343
  },
2242
2344
  {
2243
2345
  "method": "GET",
2244
- "path": "/api/w/:workspaceSlug/workspace/members",
2346
+ "path": "/api/w/:workspaceSlug/members",
2245
2347
  "summary": "List members by workspace slug."
2246
2348
  },
2247
2349
  {
2248
2350
  "method": "PATCH",
2249
- "path": "/api/w/:workspaceSlug/workspace/members/:memberUserId/role",
2351
+ "path": "/api/w/:workspaceSlug/members/:memberUserId/role",
2250
2352
  "summary": "Update workspace member role by workspace slug."
2251
2353
  },
2252
2354
  {
2253
2355
  "method": "GET",
2254
- "path": "/api/w/:workspaceSlug/workspace/invites",
2356
+ "path": "/api/w/:workspaceSlug/invites",
2255
2357
  "summary": "List workspace invites by workspace slug."
2256
2358
  },
2257
2359
  {
2258
2360
  "method": "POST",
2259
- "path": "/api/w/:workspaceSlug/workspace/invites",
2361
+ "path": "/api/w/:workspaceSlug/invites",
2260
2362
  "summary": "Create workspace invite by workspace slug."
2261
2363
  },
2262
2364
  {
2263
2365
  "method": "DELETE",
2264
- "path": "/api/w/:workspaceSlug/workspace/invites/:inviteId",
2366
+ "path": "/api/w/:workspaceSlug/invites/:inviteId",
2265
2367
  "summary": "Revoke workspace invite by workspace slug."
2266
2368
  },
2267
2369
  {
@@ -2340,10 +2442,10 @@
2340
2442
  "mutations": {
2341
2443
  "dependencies": {
2342
2444
  "runtime": {
2343
- "@jskit-ai/auth-core": "0.1.15",
2344
- "@jskit-ai/database-runtime": "0.1.16",
2345
- "@jskit-ai/http-runtime": "0.1.15",
2346
- "@jskit-ai/kernel": "0.1.15",
2445
+ "@jskit-ai/auth-core": "0.1.17",
2446
+ "@jskit-ai/database-runtime": "0.1.18",
2447
+ "@jskit-ai/http-runtime": "0.1.17",
2448
+ "@jskit-ai/kernel": "0.1.18",
2347
2449
  "@fastify/multipart": "^9.4.0",
2348
2450
  "@fastify/type-provider-typebox": "^6.1.0",
2349
2451
  "typebox": "^1.0.81"
@@ -2389,6 +2491,24 @@
2389
2491
  "category": "migration",
2390
2492
  "id": "users-core-console-owner-schema"
2391
2493
  },
2494
+ {
2495
+ "op": "install-migration",
2496
+ "from": "templates/migrations/users_core_workspace_settings_single_name_source.cjs",
2497
+ "toDir": "migrations",
2498
+ "extension": ".cjs",
2499
+ "reason": "Remove workspace_settings name/avatar fields so workspace identity data comes from workspaces only.",
2500
+ "category": "migration",
2501
+ "id": "users-core-workspace-settings-single-name-source"
2502
+ },
2503
+ {
2504
+ "op": "install-migration",
2505
+ "from": "templates/migrations/users_core_workspaces_drop_color.cjs",
2506
+ "toDir": "migrations",
2507
+ "extension": ".cjs",
2508
+ "reason": "Drop legacy workspaces.color now that workspace theme colors live in workspace_settings.",
2509
+ "category": "migration",
2510
+ "id": "users-core-workspaces-drop-color"
2511
+ },
2392
2512
  {
2393
2513
  "from": "templates/packages/main/src/shared/resources/workspaceSettingsFields.js",
2394
2514
  "to": "packages/main/src/shared/resources/workspaceSettingsFields.js",
@@ -2605,11 +2725,12 @@
2605
2725
  },
2606
2726
  {
2607
2727
  "packageId": "@jskit-ai/users-web",
2608
- "version": "0.1.25",
2728
+ "version": "0.1.32",
2609
2729
  "descriptor": {
2610
2730
  "packageVersion": 1,
2611
2731
  "packageId": "@jskit-ai/users-web",
2612
- "version": "0.1.25",
2732
+ "version": "0.1.32",
2733
+ "kind": "runtime",
2613
2734
  "description": "Users web module: workspace selector shell element plus workspace/profile/members UI elements.",
2614
2735
  "dependsOn": [
2615
2736
  "@jskit-ai/http-runtime",
@@ -2873,11 +2994,11 @@
2873
2994
  "@uppy/dashboard": "^5.1.1",
2874
2995
  "@uppy/image-editor": "^4.2.0",
2875
2996
  "@uppy/xhr-upload": "^5.1.1",
2876
- "@jskit-ai/http-runtime": "0.1.15",
2877
- "@jskit-ai/realtime": "0.1.15",
2878
- "@jskit-ai/kernel": "0.1.15",
2879
- "@jskit-ai/shell-web": "0.1.15",
2880
- "@jskit-ai/users-core": "0.1.20",
2997
+ "@jskit-ai/http-runtime": "0.1.17",
2998
+ "@jskit-ai/realtime": "0.1.17",
2999
+ "@jskit-ai/kernel": "0.1.18",
3000
+ "@jskit-ai/shell-web": "0.1.17",
3001
+ "@jskit-ai/users-core": "0.1.27",
2881
3002
  "vuetify": "^4.0.0"
2882
3003
  },
2883
3004
  "dev": {}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/jskit-catalog",
3
- "version": "0.1.24",
3
+ "version": "0.1.26",
4
4
  "description": "Published metadata catalog for JSKIT package descriptors.",
5
5
  "type": "module",
6
6
  "files": [