@jskit-ai/jskit-catalog 0.2.35 → 0.2.37

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.
@@ -6,54 +6,54 @@
6
6
  "release": {
7
7
  "packages": {
8
8
  "@jskit-ai/agent": "0.1.2",
9
- "@jskit-ai/agent-docs": "0.1.283",
10
- "@jskit-ai/agent-runtime": "0.1.3",
11
- "@jskit-ai/architecture-inspector": "0.1.11",
12
- "@jskit-ai/assistant-core": "0.2.27",
13
- "@jskit-ai/assistant-runtime": "0.2.29",
14
- "@jskit-ai/assistant-voice": "0.2.29",
15
- "@jskit-ai/assistant-voice-sherpa": "0.1.76",
16
- "@jskit-ai/auth-core": "0.2.13",
17
- "@jskit-ai/auth-provider-local-core": "0.2.16",
18
- "@jskit-ai/auth-provider-local-db-core": "0.1.157",
19
- "@jskit-ai/auth-provider-oidc-core": "0.2.20",
20
- "@jskit-ai/auth-provider-supabase-core": "0.2.15",
21
- "@jskit-ai/auth-web": "0.2.18",
22
- "@jskit-ai/config-eslint": "0.1.246",
23
- "@jskit-ai/connector-google-calendar": "0.2.14",
24
- "@jskit-ai/connectors-catalog": "0.2.14",
25
- "@jskit-ai/connectors-core": "0.2.14",
26
- "@jskit-ai/connectors-web": "0.2.14",
27
- "@jskit-ai/console-core": "0.2.15",
28
- "@jskit-ai/console-web": "0.1.240",
29
- "@jskit-ai/crud-core": "0.2.14",
30
- "@jskit-ai/database-runtime": "0.1.262",
31
- "@jskit-ai/database-runtime-mysql": "0.1.260",
32
- "@jskit-ai/database-runtime-postgres": "0.1.259",
33
- "@jskit-ai/http-runtime": "0.2.13",
34
- "@jskit-ai/http-web": "0.2.21",
35
- "@jskit-ai/jskit-catalog": "0.2.35",
36
- "@jskit-ai/json-rest-api-core": "0.2.14",
37
- "@jskit-ai/kernel": "0.2.13",
9
+ "@jskit-ai/agent-docs": "0.1.285",
10
+ "@jskit-ai/agent-runtime": "0.1.5",
11
+ "@jskit-ai/architecture-inspector": "0.1.13",
12
+ "@jskit-ai/assistant-core": "0.2.29",
13
+ "@jskit-ai/assistant-runtime": "0.2.31",
14
+ "@jskit-ai/assistant-voice": "0.2.31",
15
+ "@jskit-ai/assistant-voice-sherpa": "0.1.78",
16
+ "@jskit-ai/auth-core": "0.2.15",
17
+ "@jskit-ai/auth-provider-local-core": "0.2.18",
18
+ "@jskit-ai/auth-provider-local-db-core": "0.1.159",
19
+ "@jskit-ai/auth-provider-oidc-core": "0.2.22",
20
+ "@jskit-ai/auth-provider-supabase-core": "0.2.17",
21
+ "@jskit-ai/auth-web": "0.2.20",
22
+ "@jskit-ai/config-eslint": "0.1.248",
23
+ "@jskit-ai/connector-google-calendar": "0.2.16",
24
+ "@jskit-ai/connectors-catalog": "0.2.16",
25
+ "@jskit-ai/connectors-core": "0.2.16",
26
+ "@jskit-ai/connectors-web": "0.2.16",
27
+ "@jskit-ai/console-core": "0.2.17",
28
+ "@jskit-ai/console-web": "0.1.242",
29
+ "@jskit-ai/crud-core": "0.2.16",
30
+ "@jskit-ai/database-runtime": "0.1.264",
31
+ "@jskit-ai/database-runtime-mysql": "0.1.262",
32
+ "@jskit-ai/database-runtime-postgres": "0.1.261",
33
+ "@jskit-ai/http-runtime": "0.2.15",
34
+ "@jskit-ai/http-web": "0.2.23",
35
+ "@jskit-ai/jskit-catalog": "0.2.37",
36
+ "@jskit-ai/kernel": "0.2.15",
38
37
  "@jskit-ai/material-web": "0.1.3",
39
- "@jskit-ai/mobile-capacitor": "0.2.16",
40
- "@jskit-ai/oidc-issuer-core": "0.1.21",
41
- "@jskit-ai/payments-core": "0.2.2",
42
- "@jskit-ai/payments-web": "0.2.13",
43
- "@jskit-ai/realtime": "0.2.19",
44
- "@jskit-ai/release": "0.1.10",
45
- "@jskit-ai/resource-core": "0.1.204",
46
- "@jskit-ai/resource-crud-core": "0.1.204",
47
- "@jskit-ai/rewarded-core": "0.2.15",
48
- "@jskit-ai/rewarded-web": "0.2.18",
49
- "@jskit-ai/shell-web": "0.2.16",
50
- "@jskit-ai/storage-runtime": "0.1.259",
51
- "@jskit-ai/uploads-image-web": "0.2.13",
52
- "@jskit-ai/uploads-runtime": "0.2.13",
53
- "@jskit-ai/users-core": "0.2.15",
54
- "@jskit-ai/users-web": "0.2.23",
55
- "@jskit-ai/workspaces-core": "0.2.15",
56
- "@jskit-ai/workspaces-web": "0.2.23"
38
+ "@jskit-ai/mobile-capacitor": "0.2.18",
39
+ "@jskit-ai/oidc-issuer-core": "0.1.23",
40
+ "@jskit-ai/payments-core": "0.2.4",
41
+ "@jskit-ai/payments-web": "0.2.15",
42
+ "@jskit-ai/realtime": "0.2.21",
43
+ "@jskit-ai/release": "0.1.12",
44
+ "@jskit-ai/resource-core": "0.1.206",
45
+ "@jskit-ai/resource-crud-core": "0.1.206",
46
+ "@jskit-ai/resource-runtime": "0.2.13",
47
+ "@jskit-ai/rewarded-core": "0.2.17",
48
+ "@jskit-ai/rewarded-web": "0.2.20",
49
+ "@jskit-ai/shell-web": "0.2.18",
50
+ "@jskit-ai/storage-runtime": "0.1.261",
51
+ "@jskit-ai/uploads-image-web": "0.2.15",
52
+ "@jskit-ai/uploads-runtime": "0.2.15",
53
+ "@jskit-ai/users-core": "0.2.17",
54
+ "@jskit-ai/users-web": "0.2.25",
55
+ "@jskit-ai/workspaces-core": "0.2.17",
56
+ "@jskit-ai/workspaces-web": "0.2.25"
57
57
  },
58
58
  "singletonPackages": [
59
59
  "@jskit-ai/assistant-runtime",
@@ -112,7 +112,7 @@
112
112
  },
113
113
  {
114
114
  "packageId": "@jskit-ai/agent-runtime",
115
- "version": "0.1.3",
115
+ "version": "0.1.5",
116
116
  "description": "Opt-in parts of the agent: its own tables (saved runs, goals, summaries, commands) and coding tools (files, commands in gVisor or a local process, to-do list, notes, goals, asking the person). PostgreSQL.",
117
117
  "jskit": {
118
118
  "kind": "runtime",
@@ -173,13 +173,18 @@
173
173
  "packageJson": {
174
174
  "dependencies": {
175
175
  "@jskit-ai/agent": "0.1.2",
176
+ "@jskit-ai/resource-core": "0.1.206",
176
177
  "zod": "^4.6.7"
178
+ },
179
+ "peerDependencies": {
180
+ "@jskit-ai/database-runtime": "0.1.264",
181
+ "@jskit-ai/resource-runtime": "0.2.13"
177
182
  }
178
183
  }
179
184
  },
180
185
  {
181
186
  "packageId": "@jskit-ai/assistant-core",
182
- "version": "0.2.27",
187
+ "version": "0.2.29",
183
188
  "description": "Reusable assistant client/server/shared primitives without surface-specific routes or settings ownership.",
184
189
  "jskit": {
185
190
  "kind": "runtime",
@@ -346,8 +351,7 @@
346
351
  "@ai-sdk/togetherai": "^3.0.49",
347
352
  "@ai-sdk/xai": "^4.0.58",
348
353
  "@jskit-ai/agent": "0.1.2",
349
- "@jskit-ai/resource-core": "0.1.204",
350
- "@jskit-ai/resource-crud-core": "0.1.204",
354
+ "@jskit-ai/resource-core": "0.1.206",
351
355
  "@openrouter/ai-sdk-provider": "^3.0.0",
352
356
  "ai": "^7.0.152",
353
357
  "json-rest-schema": "^1.0.17",
@@ -355,8 +359,8 @@
355
359
  "ws": "^8.20.1"
356
360
  },
357
361
  "peerDependencies": {
358
- "@jskit-ai/http-runtime": "0.2.13",
359
- "@jskit-ai/kernel": "0.2.13",
362
+ "@jskit-ai/http-runtime": "0.2.15",
363
+ "@jskit-ai/kernel": "0.2.15",
360
364
  "vue": "^3.5.13",
361
365
  "vuetify": "^4.3.0"
362
366
  }
@@ -364,7 +368,7 @@
364
368
  },
365
369
  {
366
370
  "packageId": "@jskit-ai/assistant-runtime",
367
- "version": "0.2.29",
371
+ "version": "0.2.31",
368
372
  "description": "Capability-based assistant runtime with per-surface chat, transcripts, settings, and action tools.",
369
373
  "jskit": {
370
374
  "kind": "runtime",
@@ -439,7 +443,7 @@
439
443
  },
440
444
  {
441
445
  "subpath": "./server",
442
- "summary": "Provides conversation routes, authorized shared realtime subscriptions, explicit Fastify hosting shorthand, optional database integration, the per-surface assistant tool catalogue and the person-context prompt a host composes into its conversations' instructions."
446
+ "summary": "Provides conversation routes, authorized shared realtime subscriptions, explicit Fastify hosting shorthand, optional database integration (AssistantStoreFeature owns its tables through runtime.resources and provides assistant.repositories), the per-surface assistant tool catalogue and the person-context prompt a host composes into its conversations' instructions."
443
447
  },
444
448
  {
445
449
  "subpath": "./server/types",
@@ -462,25 +466,27 @@
462
466
  },
463
467
  "packageJson": {
464
468
  "dependencies": {
465
- "@jskit-ai/assistant-core": "0.2.27",
469
+ "@jskit-ai/assistant-core": "0.2.29",
470
+ "@jskit-ai/resource-core": "0.1.206",
466
471
  "json-rest-schema": "^1.0.17"
467
472
  },
468
473
  "peerDependencies": {
469
- "@jskit-ai/http-runtime": "0.2.13",
470
- "@jskit-ai/http-web": "0.2.21",
471
- "@jskit-ai/kernel": "0.2.13",
472
- "@jskit-ai/realtime": "0.2.19",
473
- "@jskit-ai/shell-web": "0.2.16",
474
+ "@jskit-ai/http-runtime": "0.2.15",
475
+ "@jskit-ai/http-web": "0.2.23",
476
+ "@jskit-ai/kernel": "0.2.15",
477
+ "@jskit-ai/realtime": "0.2.21",
478
+ "@jskit-ai/shell-web": "0.2.18",
474
479
  "@tanstack/vue-query": "^5.90.5",
475
480
  "vue": "^3.5.13",
476
481
  "vuetify": "^4.0.0",
477
- "@jskit-ai/database-runtime": "0.1.262"
482
+ "@jskit-ai/database-runtime": "0.1.264",
483
+ "@jskit-ai/resource-runtime": "0.2.13"
478
484
  }
479
485
  }
480
486
  },
481
487
  {
482
488
  "packageId": "@jskit-ai/assistant-voice",
483
- "version": "0.2.29",
489
+ "version": "0.2.31",
484
490
  "description": "Duplex voice conversations with application-owned targets, authorization and speech services.",
485
491
  "jskit": {
486
492
  "kind": "runtime",
@@ -522,11 +528,11 @@
522
528
  },
523
529
  "packageJson": {
524
530
  "dependencies": {
525
- "@jskit-ai/assistant-core": "0.2.27",
531
+ "@jskit-ai/assistant-core": "0.2.29",
526
532
  "ws": "^8.20.1"
527
533
  },
528
534
  "peerDependencies": {
529
- "@jskit-ai/kernel": "0.2.13",
535
+ "@jskit-ai/kernel": "0.2.15",
530
536
  "vue": "^3.5.13",
531
537
  "vuetify": "^4.3.0"
532
538
  }
@@ -534,7 +540,7 @@
534
540
  },
535
541
  {
536
542
  "packageId": "@jskit-ai/assistant-voice-sherpa",
537
- "version": "0.1.76",
543
+ "version": "0.1.78",
538
544
  "description": "Optional native Sherpa speech engine and explicit model preparation for assistant voice.",
539
545
  "jskit": {
540
546
  "kind": "runtime",
@@ -572,14 +578,14 @@
572
578
  },
573
579
  "packageJson": {
574
580
  "dependencies": {
575
- "@jskit-ai/assistant-voice": "0.2.29",
581
+ "@jskit-ai/assistant-voice": "0.2.31",
576
582
  "sherpa-onnx-node": "1.13.6"
577
583
  }
578
584
  }
579
585
  },
580
586
  {
581
587
  "packageId": "@jskit-ai/auth-core",
582
- "version": "0.2.13",
588
+ "version": "0.2.15",
583
589
  "jskit": {
584
590
  "kind": "runtime",
585
591
  "capabilities": {
@@ -662,13 +668,13 @@
662
668
  "json-rest-schema": "^1.0.17"
663
669
  },
664
670
  "peerDependencies": {
665
- "@jskit-ai/kernel": "0.2.13"
671
+ "@jskit-ai/kernel": "0.2.15"
666
672
  }
667
673
  }
668
674
  },
669
675
  {
670
676
  "packageId": "@jskit-ai/auth-provider-local-core",
671
- "version": "0.2.16",
677
+ "version": "0.2.18",
672
678
  "description": "Local auth provider with a file backend default, no database requirement, and optional Google, Microsoft and GitHub sign-in.",
673
679
  "jskit": {
674
680
  "kind": "runtime",
@@ -726,23 +732,28 @@
726
732
  "openid-client": "6.8.8"
727
733
  },
728
734
  "peerDependencies": {
729
- "@jskit-ai/auth-core": "0.2.13",
730
- "@jskit-ai/kernel": "0.2.13"
735
+ "@jskit-ai/auth-core": "0.2.15",
736
+ "@jskit-ai/kernel": "0.2.15"
731
737
  }
732
738
  }
733
739
  },
734
740
  {
735
741
  "packageId": "@jskit-ai/auth-provider-local-db-core",
736
- "version": "0.1.157",
742
+ "version": "0.1.159",
737
743
  "description": "Database-backed local auth storage backend for JSKIT local auth.",
738
744
  "jskit": {
739
745
  "kind": "runtime",
740
746
  "capabilities": {
741
747
  "provides": [
742
- "auth.local.backend"
748
+ "auth.local.backend",
749
+ "auth.local.accounts",
750
+ "auth.local.sessions",
751
+ "auth.local.recovery"
743
752
  ],
744
753
  "requires": [
745
- "runtime.database"
754
+ "runtime.actions",
755
+ "runtime.database",
756
+ "runtime.resources"
746
757
  ]
747
758
  },
748
759
  "runtime": {
@@ -790,14 +801,23 @@
790
801
  "surfaces": [
791
802
  {
792
803
  "subpath": "./server/providers/AuthLocalDatabaseBackendProvider",
793
- "summary": "Provides the database-backed local authentication repository contract."
804
+ "summary": "Provides the database-backed local authentication repository contract (auth.local.backend) and the owner APIs of its accounts, sessions and recovery tokens (auth.local.accounts, auth.local.sessions, auth.local.recovery)."
794
805
  },
795
806
  {
796
807
  "subpath": "./server/lib/index",
797
- "summary": "Exports the DB local auth backend factory."
808
+ "summary": "Exports the DB local auth backend and owner API factories."
809
+ },
810
+ {
811
+ "subpath": "./server/types",
812
+ "summary": "Types of the auth.local.accounts, auth.local.sessions and auth.local.recovery capabilities, for features that require them."
798
813
  }
799
814
  ],
800
- "capability": "auth.local.backend"
815
+ "capabilities": [
816
+ "auth.local.backend",
817
+ "auth.local.accounts",
818
+ "auth.local.sessions",
819
+ "auth.local.recovery"
820
+ ]
801
821
  }
802
822
  },
803
823
  "migrations": {
@@ -808,17 +828,20 @@
808
828
  },
809
829
  "packageJson": {
810
830
  "dependencies": {
811
- "@jskit-ai/auth-provider-local-core": "0.2.16",
812
- "@jskit-ai/database-runtime": "0.1.262"
831
+ "@jskit-ai/auth-provider-local-core": "0.2.18",
832
+ "@jskit-ai/resource-core": "0.1.206"
813
833
  },
814
834
  "peerDependencies": {
815
- "@jskit-ai/kernel": "0.2.13"
835
+ "@jskit-ai/auth-core": "0.2.15",
836
+ "@jskit-ai/database-runtime": "0.1.264",
837
+ "@jskit-ai/kernel": "0.2.15",
838
+ "@jskit-ai/resource-runtime": "0.2.13"
816
839
  }
817
840
  }
818
841
  },
819
842
  {
820
843
  "packageId": "@jskit-ai/auth-provider-oidc-core",
821
- "version": "0.2.20",
844
+ "version": "0.2.22",
822
845
  "description": "Sign in through any OpenID Connect issuer: self-registration or a static client, app-owned sessions, and back-channel logout.",
823
846
  "jskit": {
824
847
  "kind": "runtime",
@@ -892,14 +915,14 @@
892
915
  "openid-client": "6.8.8"
893
916
  },
894
917
  "peerDependencies": {
895
- "@jskit-ai/auth-core": "0.2.13",
896
- "@jskit-ai/kernel": "0.2.13"
918
+ "@jskit-ai/auth-core": "0.2.15",
919
+ "@jskit-ai/kernel": "0.2.15"
897
920
  }
898
921
  }
899
922
  },
900
923
  {
901
924
  "packageId": "@jskit-ai/auth-provider-supabase-core",
902
- "version": "0.2.15",
925
+ "version": "0.2.17",
903
926
  "jskit": {
904
927
  "kind": "runtime",
905
928
  "capabilities": {
@@ -950,14 +973,14 @@
950
973
  "ws": "^8.21.1"
951
974
  },
952
975
  "peerDependencies": {
953
- "@jskit-ai/auth-core": "0.2.13",
954
- "@jskit-ai/kernel": "0.2.13"
976
+ "@jskit-ai/auth-core": "0.2.15",
977
+ "@jskit-ai/kernel": "0.2.15"
955
978
  }
956
979
  }
957
980
  },
958
981
  {
959
982
  "packageId": "@jskit-ai/auth-web",
960
- "version": "0.2.18",
983
+ "version": "0.2.20",
961
984
  "description": "Auth web module: Fastify auth routes plus web login/sign-out scaffolds.",
962
985
  "jskit": {
963
986
  "kind": "runtime",
@@ -1229,10 +1252,10 @@
1229
1252
  },
1230
1253
  "packageJson": {
1231
1254
  "peerDependencies": {
1232
- "@jskit-ai/auth-core": "0.2.13",
1233
- "@jskit-ai/http-runtime": "0.2.13",
1234
- "@jskit-ai/kernel": "0.2.13",
1235
- "@jskit-ai/shell-web": "0.2.16",
1255
+ "@jskit-ai/auth-core": "0.2.15",
1256
+ "@jskit-ai/http-runtime": "0.2.15",
1257
+ "@jskit-ai/kernel": "0.2.15",
1258
+ "@jskit-ai/shell-web": "0.2.18",
1236
1259
  "@tanstack/vue-query": "^5.90.5",
1237
1260
  "pinia": "^4.0.3",
1238
1261
  "vue": "^3.5.44",
@@ -1243,7 +1266,7 @@
1243
1266
  },
1244
1267
  {
1245
1268
  "packageId": "@jskit-ai/connector-google-calendar",
1246
- "version": "0.2.14",
1269
+ "version": "0.2.16",
1247
1270
  "description": "Google Calendar account configuration and event operations for JSKIT connectors.",
1248
1271
  "jskit": {
1249
1272
  "kind": "runtime",
@@ -1262,17 +1285,17 @@
1262
1285
  },
1263
1286
  "packageJson": {
1264
1287
  "dependencies": {
1265
- "@jskit-ai/connectors-core": "0.2.14",
1288
+ "@jskit-ai/connectors-core": "0.2.16",
1266
1289
  "json-rest-schema": "^1.0.17"
1267
1290
  },
1268
1291
  "peerDependencies": {
1269
- "@jskit-ai/kernel": "0.2.13"
1292
+ "@jskit-ai/kernel": "0.2.15"
1270
1293
  }
1271
1294
  }
1272
1295
  },
1273
1296
  {
1274
1297
  "packageId": "@jskit-ai/connectors-catalog",
1275
- "version": "0.2.14",
1298
+ "version": "0.2.16",
1276
1299
  "description": "Provider definitions and focused API operations for JSKIT connectors.",
1277
1300
  "jskit": {
1278
1301
  "kind": "runtime",
@@ -1295,20 +1318,20 @@
1295
1318
  "@aws-sdk/client-redshift-data": "3.1128.0",
1296
1319
  "@aws-sdk/client-s3": "3.1128.0",
1297
1320
  "@aws-sdk/s3-request-presigner": "3.1128.0",
1298
- "@jskit-ai/connectors-core": "0.2.14",
1321
+ "@jskit-ai/connectors-core": "0.2.16",
1299
1322
  "@modelcontextprotocol/sdk": "1.32.1",
1300
1323
  "@smithy/fetch-http-handler": "5.8.0",
1301
1324
  "jose": "^6.1.3",
1302
1325
  "json-rest-schema": "^1.0.17"
1303
1326
  },
1304
1327
  "peerDependencies": {
1305
- "@jskit-ai/kernel": "0.2.13"
1328
+ "@jskit-ai/kernel": "0.2.15"
1306
1329
  }
1307
1330
  }
1308
1331
  },
1309
1332
  {
1310
1333
  "packageId": "@jskit-ai/connectors-core",
1311
- "version": "0.2.14",
1334
+ "version": "0.2.16",
1312
1335
  "description": "Portable integration configuration and server-side account connection runtime.",
1313
1336
  "jskit": {
1314
1337
  "kind": "runtime",
@@ -1346,20 +1369,23 @@
1346
1369
  },
1347
1370
  "packageJson": {
1348
1371
  "dependencies": {
1372
+ "@jskit-ai/resource-core": "0.1.206",
1349
1373
  "jose": "^6.1.3",
1350
1374
  "json-rest-schema": "^1.0.17",
1351
1375
  "oauth4webapi": "3.8.8",
1352
1376
  "proper-lockfile": "4.1.2"
1353
1377
  },
1354
1378
  "peerDependencies": {
1355
- "@jskit-ai/http-runtime": "0.2.13",
1356
- "@jskit-ai/kernel": "0.2.13"
1379
+ "@jskit-ai/database-runtime": "0.1.264",
1380
+ "@jskit-ai/http-runtime": "0.2.15",
1381
+ "@jskit-ai/kernel": "0.2.15",
1382
+ "@jskit-ai/resource-runtime": "0.2.13"
1357
1383
  }
1358
1384
  }
1359
1385
  },
1360
1386
  {
1361
1387
  "packageId": "@jskit-ai/connectors-web",
1362
- "version": "0.2.14",
1388
+ "version": "0.2.16",
1363
1389
  "description": "Shared Vue fields for portable application integration configuration.",
1364
1390
  "jskit": {
1365
1391
  "kind": "runtime",
@@ -1378,10 +1404,10 @@
1378
1404
  },
1379
1405
  "packageJson": {
1380
1406
  "dependencies": {
1381
- "@jskit-ai/connectors-core": "0.2.14"
1407
+ "@jskit-ai/connectors-core": "0.2.16"
1382
1408
  },
1383
1409
  "peerDependencies": {
1384
- "@jskit-ai/kernel": "0.2.13",
1410
+ "@jskit-ai/kernel": "0.2.15",
1385
1411
  "vue": "^3.5.13",
1386
1412
  "vuetify": "^4.0.0"
1387
1413
  }
@@ -1389,20 +1415,21 @@
1389
1415
  },
1390
1416
  {
1391
1417
  "packageId": "@jskit-ai/console-core",
1392
- "version": "0.2.15",
1418
+ "version": "0.2.17",
1393
1419
  "description": "Console runtime: console settings schema, bootstrap flags, actions, and HTTP routes.",
1394
1420
  "jskit": {
1395
1421
  "kind": "runtime",
1396
1422
  "capabilities": {
1397
1423
  "provides": [
1398
- "console.core"
1424
+ "console.core",
1425
+ "console.settings"
1399
1426
  ],
1400
1427
  "requires": [
1401
1428
  "auth.extensions",
1402
1429
  "runtime.actions",
1403
1430
  "runtime.bootstrap",
1404
- "runtime.database",
1405
- "runtime.http"
1431
+ "runtime.http",
1432
+ "runtime.resources"
1406
1433
  ]
1407
1434
  },
1408
1435
  "runtime": {
@@ -1432,7 +1459,7 @@
1432
1459
  "surfaces": [
1433
1460
  {
1434
1461
  "subpath": "./server/ConsoleFeature",
1435
- "summary": "Exports ConsoleFeature, which provides console.core: owner access, the console settings actions and routes, and the console bootstrap."
1462
+ "summary": "Exports ConsoleFeature, which provides console.core (owner access, the console settings actions and routes, and the console bootstrap) and console.settings (the console's settings record, read with getSingleton)."
1436
1463
  },
1437
1464
  {
1438
1465
  "subpath": "./shared/resources/consoleSettingsResource",
@@ -1440,11 +1467,12 @@
1440
1467
  },
1441
1468
  {
1442
1469
  "subpath": "./server/types",
1443
- "summary": "Type of the console.core capability, for features that require it."
1470
+ "summary": "Types of the console.core and console.settings capabilities, for features that require them."
1444
1471
  }
1445
1472
  ],
1446
1473
  "capabilities": [
1447
- "console.core"
1474
+ "console.core",
1475
+ "console.settings"
1448
1476
  ]
1449
1477
  },
1450
1478
  "server": {
@@ -1470,21 +1498,22 @@
1470
1498
  },
1471
1499
  "packageJson": {
1472
1500
  "dependencies": {
1473
- "@jskit-ai/database-runtime": "0.1.262",
1474
- "@jskit-ai/resource-crud-core": "0.1.204",
1475
- "@jskit-ai/users-core": "0.2.15",
1501
+ "@jskit-ai/resource-core": "0.1.206",
1502
+ "@jskit-ai/users-core": "0.2.17",
1476
1503
  "json-rest-schema": "^1.0.17"
1477
1504
  },
1478
1505
  "peerDependencies": {
1479
- "@jskit-ai/auth-core": "0.2.13",
1480
- "@jskit-ai/http-runtime": "0.2.13",
1481
- "@jskit-ai/kernel": "0.2.13"
1506
+ "@jskit-ai/auth-core": "0.2.15",
1507
+ "@jskit-ai/database-runtime": "0.1.264",
1508
+ "@jskit-ai/http-runtime": "0.2.15",
1509
+ "@jskit-ai/kernel": "0.2.15",
1510
+ "@jskit-ai/resource-runtime": "0.2.13"
1482
1511
  }
1483
1512
  }
1484
1513
  },
1485
1514
  {
1486
1515
  "packageId": "@jskit-ai/console-web",
1487
- "version": "0.1.240",
1516
+ "version": "0.1.242",
1488
1517
  "description": "Authenticated console surface scaffold and surface policy wiring.",
1489
1518
  "jskit": {
1490
1519
  "kind": "runtime",
@@ -1505,14 +1534,6 @@
1505
1534
  }
1506
1535
  },
1507
1536
  "metadata": {
1508
- "apiSummary": {
1509
- "surfaces": [
1510
- {
1511
- "subpath": "./client",
1512
- "summary": "Exports no runtime API today (reserved console surface package entrypoint)."
1513
- }
1514
- ]
1515
- },
1516
1537
  "ui": {
1517
1538
  "placements": {
1518
1539
  "outlets": [
@@ -1586,27 +1607,34 @@
1586
1607
  },
1587
1608
  "packageJson": {
1588
1609
  "dependencies": {
1589
- "@jskit-ai/console-core": "0.2.15"
1610
+ "@jskit-ai/console-core": "0.2.17"
1590
1611
  },
1591
1612
  "peerDependencies": {
1592
- "@jskit-ai/auth-web": "0.2.18",
1593
- "@jskit-ai/shell-web": "0.2.16"
1613
+ "@jskit-ai/auth-web": "0.2.20",
1614
+ "@jskit-ai/shell-web": "0.2.18"
1594
1615
  }
1595
1616
  }
1596
1617
  },
1597
1618
  {
1598
1619
  "packageId": "@jskit-ai/crud-core",
1599
- "version": "0.2.14",
1620
+ "version": "0.2.16",
1600
1621
  "description": "Shared server-side CRUD service, repository, route, and query helpers.",
1601
1622
  "jskit": {
1602
1623
  "kind": "runtime",
1603
1624
  "capabilities": {
1604
- "provides": [],
1625
+ "provides": [
1626
+ "crud.contracts"
1627
+ ],
1605
1628
  "requires": []
1606
1629
  },
1607
1630
  "runtime": {
1608
1631
  "server": {
1609
- "providers": []
1632
+ "providers": [
1633
+ {
1634
+ "entrypoint": "src/server/crudContracts.js",
1635
+ "export": "CrudContractsProvider"
1636
+ }
1637
+ ]
1610
1638
  },
1611
1639
  "client": {
1612
1640
  "providers": []
@@ -1615,21 +1643,21 @@
1615
1643
  },
1616
1644
  "packageJson": {
1617
1645
  "dependencies": {
1618
- "@jskit-ai/database-runtime": "0.1.262",
1619
- "@jskit-ai/json-rest-api-core": "0.2.14",
1620
- "@jskit-ai/resource-crud-core": "0.1.204",
1621
- "json-rest-schema": "^1.0.17",
1622
- "json-rest-api": "2.4.0"
1646
+ "@jskit-ai/resource-core": "0.1.206",
1647
+ "@jskit-ai/resource-crud-core": "0.1.206",
1648
+ "json-rest-api": "3.1.0",
1649
+ "json-rest-schema": "^1.0.17"
1623
1650
  },
1624
1651
  "peerDependencies": {
1625
- "@jskit-ai/http-runtime": "0.2.13",
1626
- "@jskit-ai/kernel": "0.2.13"
1652
+ "@jskit-ai/http-runtime": "0.2.15",
1653
+ "@jskit-ai/kernel": "0.2.15",
1654
+ "@jskit-ai/resource-runtime": "0.2.13"
1627
1655
  }
1628
1656
  }
1629
1657
  },
1630
1658
  {
1631
1659
  "packageId": "@jskit-ai/database-runtime",
1632
- "version": "0.1.262",
1660
+ "version": "0.1.264",
1633
1661
  "jskit": {
1634
1662
  "kind": "runtime",
1635
1663
  "capabilities": {
@@ -1671,15 +1699,15 @@
1671
1699
  },
1672
1700
  {
1673
1701
  "subpath": "./server/foreignKeyMigrations",
1674
- "summary": "Adds a single-column foreign key only when it is missing, refusing rows without a parent, for constraints migrations on fresh and already-migrated databases."
1702
+ "summary": "Adds a single-column foreign key only when it is missing, refusing rows without a parent, for constraints migrations on fresh and already-migrated databases, and lists every foreign key the connected database holds."
1675
1703
  },
1676
1704
  {
1677
1705
  "subpath": "./server/testDatabases",
1678
- "summary": "Gives each test file or browser worker running at once its own disposable copy of TEST_DB_NAME or BROWSER_TEST_DB_NAME, restored from a schema snapshot keyed by the migrations' names and contents (MySQL, MariaDB and PostgreSQL), and counts the statements a piece of work sends, for query-count guards."
1706
+ "summary": "Gives each test file or browser worker running at once its own disposable copy of TEST_DB_NAME or BROWSER_TEST_DB_NAME, restored from a schema snapshot keyed by the migrations' names and contents (MySQL, MariaDB and PostgreSQL), counts the statements a piece of work sends, for query-count guards, and gives a package's own data test its Knex: SQLite in memory, or a PostgreSQL schema of its own on a DB_CLIENT=pg run (createPackageTestKnex)."
1679
1707
  },
1680
1708
  {
1681
1709
  "subpath": "./shared",
1682
- "summary": "Exports shared repository helpers (transactions, record ids, JSON columns, visibility, duplicate-entry detection and date/time serialization)."
1710
+ "summary": "Exports shared database helpers (deadlock retries, record ids, JSON columns, duplicate-entry detection and date/time serialization)."
1683
1711
  },
1684
1712
  {
1685
1713
  "subpath": "./server/types",
@@ -1694,13 +1722,13 @@
1694
1722
  "knex": "^3.1.0"
1695
1723
  },
1696
1724
  "peerDependencies": {
1697
- "@jskit-ai/kernel": "0.2.13"
1725
+ "@jskit-ai/kernel": "0.2.15"
1698
1726
  }
1699
1727
  }
1700
1728
  },
1701
1729
  {
1702
1730
  "packageId": "@jskit-ai/database-runtime-mysql",
1703
- "version": "0.1.260",
1731
+ "version": "0.1.262",
1704
1732
  "jskit": {
1705
1733
  "kind": "runtime",
1706
1734
  "capabilities": {
@@ -1743,17 +1771,17 @@
1743
1771
  },
1744
1772
  "packageJson": {
1745
1773
  "dependencies": {
1746
- "@jskit-ai/database-runtime": "0.1.262",
1747
1774
  "mysql2": "^3.11.2"
1748
1775
  },
1749
1776
  "peerDependencies": {
1750
- "@jskit-ai/kernel": "0.2.13"
1777
+ "@jskit-ai/database-runtime": "0.1.264",
1778
+ "@jskit-ai/kernel": "0.2.15"
1751
1779
  }
1752
1780
  }
1753
1781
  },
1754
1782
  {
1755
1783
  "packageId": "@jskit-ai/database-runtime-postgres",
1756
- "version": "0.1.259",
1784
+ "version": "0.1.261",
1757
1785
  "jskit": {
1758
1786
  "kind": "runtime",
1759
1787
  "capabilities": {
@@ -1796,17 +1824,17 @@
1796
1824
  },
1797
1825
  "packageJson": {
1798
1826
  "dependencies": {
1799
- "@jskit-ai/database-runtime": "0.1.262",
1800
1827
  "pg": "^8.13.1"
1801
1828
  },
1802
1829
  "peerDependencies": {
1803
- "@jskit-ai/kernel": "0.2.13"
1830
+ "@jskit-ai/database-runtime": "0.1.264",
1831
+ "@jskit-ai/kernel": "0.2.15"
1804
1832
  }
1805
1833
  }
1806
1834
  },
1807
1835
  {
1808
1836
  "packageId": "@jskit-ai/http-runtime",
1809
- "version": "0.2.13",
1837
+ "version": "0.2.15",
1810
1838
  "jskit": {
1811
1839
  "kind": "runtime",
1812
1840
  "capabilities": {
@@ -1844,13 +1872,13 @@
1844
1872
  "json-rest-schema": "^1.0.17"
1845
1873
  },
1846
1874
  "peerDependencies": {
1847
- "@jskit-ai/kernel": "0.2.13"
1875
+ "@jskit-ai/kernel": "0.2.15"
1848
1876
  }
1849
1877
  }
1850
1878
  },
1851
1879
  {
1852
1880
  "packageId": "@jskit-ai/http-web",
1853
- "version": "0.2.21",
1881
+ "version": "0.2.23",
1854
1882
  "description": "Neutral Vue request, command, resource, and CRUD UI runtime for JSKIT web applications.",
1855
1883
  "jskit": {
1856
1884
  "kind": "runtime",
@@ -1924,13 +1952,13 @@
1924
1952
  },
1925
1953
  "packageJson": {
1926
1954
  "dependencies": {
1927
- "@jskit-ai/resource-crud-core": "0.1.204"
1955
+ "@jskit-ai/resource-crud-core": "0.1.206"
1928
1956
  },
1929
1957
  "peerDependencies": {
1930
- "@jskit-ai/http-runtime": "0.2.13",
1931
- "@jskit-ai/kernel": "0.2.13",
1932
- "@jskit-ai/realtime": "0.2.19",
1933
- "@jskit-ai/shell-web": "0.2.16",
1958
+ "@jskit-ai/http-runtime": "0.2.15",
1959
+ "@jskit-ai/kernel": "0.2.15",
1960
+ "@jskit-ai/realtime": "0.2.21",
1961
+ "@jskit-ai/shell-web": "0.2.18",
1934
1962
  "@tanstack/vue-query": "^5.90.5",
1935
1963
  "vue": "^3.5.13",
1936
1964
  "vue-router": "^5.0.4",
@@ -1938,60 +1966,6 @@
1938
1966
  }
1939
1967
  }
1940
1968
  },
1941
- {
1942
- "packageId": "@jskit-ai/json-rest-api-core",
1943
- "version": "0.2.14",
1944
- "description": "Shared internal json-rest-api host runtime with autofilter, query-projection, and row-policy support.",
1945
- "jskit": {
1946
- "kind": "runtime",
1947
- "capabilities": {
1948
- "provides": [
1949
- "runtime.json-rest-api"
1950
- ],
1951
- "requires": [
1952
- "runtime.database",
1953
- "runtime.logger"
1954
- ]
1955
- },
1956
- "runtime": {
1957
- "server": {
1958
- "providers": [
1959
- {
1960
- "entrypoint": "src/server/JsonRestApiProvider.js",
1961
- "export": "JsonRestApiProvider"
1962
- }
1963
- ]
1964
- },
1965
- "client": {
1966
- "providers": []
1967
- }
1968
- },
1969
- "metadata": {
1970
- "apiSummary": {
1971
- "surfaces": [
1972
- {
1973
- "subpath": "./server",
1974
- "summary": "Provides runtime.json-rest-api and exports focused resource/query helpers, including server-only row policies."
1975
- },
1976
- {
1977
- "subpath": "./server/types",
1978
- "summary": "Type of the runtime.json-rest-api capability, for features that require it."
1979
- }
1980
- ]
1981
- }
1982
- }
1983
- },
1984
- "packageJson": {
1985
- "dependencies": {
1986
- "@jskit-ai/database-runtime": "0.1.262",
1987
- "@jskit-ai/resource-crud-core": "0.1.204",
1988
- "json-rest-api": "2.4.0"
1989
- },
1990
- "peerDependencies": {
1991
- "@jskit-ai/kernel": "0.2.13"
1992
- }
1993
- }
1994
- },
1995
1969
  {
1996
1970
  "packageId": "@jskit-ai/material-web",
1997
1971
  "version": "0.1.3",
@@ -2023,7 +1997,7 @@
2023
1997
  },
2024
1998
  {
2025
1999
  "packageId": "@jskit-ai/mobile-capacitor",
2026
- "version": "0.2.16",
2000
+ "version": "0.2.18",
2027
2001
  "description": "Thin Capacitor client integration for JSKIT mobile-shell launch routing and auth callback completion.",
2028
2002
  "jskit": {
2029
2003
  "kind": "runtime",
@@ -2074,14 +2048,14 @@
2074
2048
  "@capacitor/core": "^8.5.3"
2075
2049
  },
2076
2050
  "peerDependencies": {
2077
- "@jskit-ai/kernel": "0.2.13",
2078
- "@jskit-ai/shell-web": "0.2.16"
2051
+ "@jskit-ai/kernel": "0.2.15",
2052
+ "@jskit-ai/shell-web": "0.2.18"
2079
2053
  }
2080
2054
  }
2081
2055
  },
2082
2056
  {
2083
2057
  "packageId": "@jskit-ai/oidc-issuer-core",
2084
- "version": "0.1.21",
2058
+ "version": "0.1.23",
2085
2059
  "description": "OpenID Connect accounts hub: one sign-in for all of an owner's apps, with approval of every production app.",
2086
2060
  "jskit": {
2087
2061
  "kind": "runtime",
@@ -2174,20 +2148,20 @@
2174
2148
  },
2175
2149
  "packageJson": {
2176
2150
  "dependencies": {
2177
- "@jskit-ai/database-runtime": "0.1.262",
2178
2151
  "jose": "6.2.12",
2179
2152
  "knex": "^3.1.0",
2180
2153
  "nodemailer": "10.2.1",
2181
2154
  "oidc-provider": "9.12.2"
2182
2155
  },
2183
2156
  "peerDependencies": {
2184
- "@jskit-ai/kernel": "0.2.13"
2157
+ "@jskit-ai/database-runtime": "0.1.264",
2158
+ "@jskit-ai/kernel": "0.2.15"
2185
2159
  }
2186
2160
  }
2187
2161
  },
2188
2162
  {
2189
2163
  "packageId": "@jskit-ai/payments-core",
2190
- "version": "0.2.2",
2164
+ "version": "0.2.4",
2191
2165
  "description": "Application-owned payment configuration, subscription access and transactional usage credits.",
2192
2166
  "jskit": {
2193
2167
  "kind": "runtime",
@@ -2231,15 +2205,21 @@
2231
2205
  },
2232
2206
  "packageJson": {
2233
2207
  "dependencies": {
2208
+ "@jskit-ai/resource-core": "0.1.206",
2234
2209
  "@paddle/paddle-node-sdk": "3.10.0",
2235
2210
  "ajv": "8.20.0",
2236
2211
  "stripe": "22.6.2"
2212
+ },
2213
+ "peerDependencies": {
2214
+ "@jskit-ai/database-runtime": "0.1.264",
2215
+ "@jskit-ai/kernel": "0.2.15",
2216
+ "@jskit-ai/resource-runtime": "0.2.13"
2237
2217
  }
2238
2218
  }
2239
2219
  },
2240
2220
  {
2241
2221
  "packageId": "@jskit-ai/payments-web",
2242
- "version": "0.2.13",
2222
+ "version": "0.2.15",
2243
2223
  "description": "Application-owned billing views for JSKIT Vue applications.",
2244
2224
  "jskit": {
2245
2225
  "kind": "runtime",
@@ -2258,7 +2238,7 @@
2258
2238
  },
2259
2239
  "packageJson": {
2260
2240
  "peerDependencies": {
2261
- "@jskit-ai/kernel": "0.2.13",
2241
+ "@jskit-ai/kernel": "0.2.15",
2262
2242
  "vue": "^3.5.13",
2263
2243
  "vuetify": "^4.0.0"
2264
2244
  }
@@ -2266,7 +2246,7 @@
2266
2246
  },
2267
2247
  {
2268
2248
  "packageId": "@jskit-ai/realtime",
2269
- "version": "0.2.19",
2249
+ "version": "0.2.21",
2270
2250
  "description": "Thin, generic realtime runtime wrappers for socket.io server and client.",
2271
2251
  "jskit": {
2272
2252
  "kind": "runtime",
@@ -2316,6 +2296,10 @@
2316
2296
  "subpath": "./server/RealtimeProvider",
2317
2297
  "summary": "Exports the explicit RealtimeProvider capability provider."
2318
2298
  },
2299
+ {
2300
+ "subpath": "./server/RealtimeAudienceScopeFeature",
2301
+ "summary": "Exports RealtimeAudienceScopeFeature, which provides realtime.audience-scope: the contexts scoped to an event's workspace, user or workspace user that an audience's audienceUsers reads in. Applications whose audiences read owned tables register it."
2302
+ },
2319
2303
  {
2320
2304
  "subpath": "./server/runtime",
2321
2305
  "summary": "Exports the Socket.IO server and Redis adapter runtime helpers."
@@ -2394,15 +2378,15 @@
2394
2378
  "socket.io-client": "^4.8.3"
2395
2379
  },
2396
2380
  "peerDependencies": {
2397
- "@jskit-ai/kernel": "0.2.13",
2381
+ "@jskit-ai/kernel": "0.2.15",
2398
2382
  "vue": "^3.5.13"
2399
2383
  }
2400
2384
  }
2401
2385
  },
2402
2386
  {
2403
2387
  "packageId": "@jskit-ai/resource-core",
2404
- "version": "0.1.204",
2405
- "description": "Generic resource-definition helpers and schema-definition normalization.",
2388
+ "version": "0.1.206",
2389
+ "description": "Table resources (one per table: fields, columns, ownership) and API contracts (HTTP operations), with schema-definition normalization.",
2406
2390
  "jskit": {
2407
2391
  "kind": "runtime",
2408
2392
  "capabilities": {
@@ -2422,14 +2406,14 @@
2422
2406
  },
2423
2407
  "packageJson": {
2424
2408
  "peerDependencies": {
2425
- "@jskit-ai/kernel": "0.2.13"
2409
+ "@jskit-ai/kernel": "0.2.15"
2426
2410
  }
2427
2411
  }
2428
2412
  },
2429
2413
  {
2430
2414
  "packageId": "@jskit-ai/resource-crud-core",
2431
- "version": "0.1.204",
2432
- "description": "Shared CRUD resource, field, lookup, filter, and namespace contracts.",
2415
+ "version": "0.1.206",
2416
+ "description": "CRUD contracts on table resources, with their field, lookup, filter, and namespace support.",
2433
2417
  "jskit": {
2434
2418
  "kind": "runtime",
2435
2419
  "capabilities": {
@@ -2449,16 +2433,75 @@
2449
2433
  },
2450
2434
  "packageJson": {
2451
2435
  "dependencies": {
2452
- "@jskit-ai/resource-core": "0.1.204"
2436
+ "@jskit-ai/resource-core": "0.1.206"
2437
+ },
2438
+ "peerDependencies": {
2439
+ "@jskit-ai/kernel": "0.2.15"
2440
+ }
2441
+ }
2442
+ },
2443
+ {
2444
+ "packageId": "@jskit-ai/resource-runtime",
2445
+ "version": "0.2.13",
2446
+ "description": "The resource runtime: features own their tables through it and read and write them with scoped handles on json-rest-api.",
2447
+ "jskit": {
2448
+ "kind": "runtime",
2449
+ "capabilities": {
2450
+ "provides": [
2451
+ "runtime.resources"
2452
+ ],
2453
+ "requires": [
2454
+ "runtime.database",
2455
+ "runtime.logger"
2456
+ ]
2457
+ },
2458
+ "runtime": {
2459
+ "server": {
2460
+ "providers": [
2461
+ {
2462
+ "entrypoint": "src/server/ResourceRuntimeProvider.js",
2463
+ "export": "ResourceRuntimeProvider"
2464
+ }
2465
+ ]
2466
+ },
2467
+ "client": {
2468
+ "providers": []
2469
+ }
2470
+ },
2471
+ "metadata": {
2472
+ "apiSummary": {
2473
+ "surfaces": [
2474
+ {
2475
+ "subpath": "./server",
2476
+ "summary": "Provides runtime.resources (ResourceRuntimeProvider): own(featureId, owns) registers a feature's tables and answers their scoped handles, and declareSystemScope(featureId, systemScope) answers the feature's systemContext(reason) for work across every workspace and user. Exports createStandaloneResources, passedOn, withoutHiddenFields, isSystemContext, buildJsonRestQueryParams, the workspace and user scope resolvers, the default row limit and page size, and the runtime's error classes."
2477
+ },
2478
+ {
2479
+ "subpath": "./server/types",
2480
+ "summary": "Types of runtime.resources, its handles, call options and system contexts."
2481
+ },
2482
+ {
2483
+ "subpath": "./test",
2484
+ "summary": "Data test helpers on a real test database: createTestResourceRuntime, startTestFeatures, expectScoped, expectFlatQueries, expectEveryTableOwned, createPackageTestKnex, requireTestDatabase and TestDatabaseMissingError."
2485
+ }
2486
+ ]
2487
+ }
2488
+ }
2489
+ },
2490
+ "packageJson": {
2491
+ "dependencies": {
2492
+ "@jskit-ai/resource-core": "0.1.206",
2493
+ "@jskit-ai/resource-crud-core": "0.1.206",
2494
+ "json-rest-api": "3.1.0"
2453
2495
  },
2454
2496
  "peerDependencies": {
2455
- "@jskit-ai/kernel": "0.2.13"
2497
+ "@jskit-ai/database-runtime": "0.1.264",
2498
+ "@jskit-ai/kernel": "0.2.15"
2456
2499
  }
2457
2500
  }
2458
2501
  },
2459
2502
  {
2460
2503
  "packageId": "@jskit-ai/rewarded-core",
2461
- "version": "0.2.15",
2504
+ "version": "0.2.17",
2462
2505
  "description": "Rewarded workflow runtime plus internal CRUD providers for rules, provider configs, watch sessions, and unlock receipts.",
2463
2506
  "jskit": {
2464
2507
  "kind": "runtime",
@@ -2471,11 +2514,11 @@
2471
2514
  "rewarded.core"
2472
2515
  ],
2473
2516
  "requires": [
2517
+ "crud.contracts",
2474
2518
  "runtime.actions",
2475
- "runtime.database",
2476
2519
  "runtime.http",
2477
- "runtime.json-rest-api",
2478
- "rewarded.grant-policy"
2520
+ "rewarded.grant-policy",
2521
+ "runtime.resources"
2479
2522
  ],
2480
2523
  "applicationRequires": [
2481
2524
  "rewarded.grant-policy"
@@ -2573,24 +2616,25 @@
2573
2616
  },
2574
2617
  "packageJson": {
2575
2618
  "dependencies": {
2576
- "@jskit-ai/crud-core": "0.2.14",
2577
- "@jskit-ai/database-runtime": "0.1.262",
2578
- "@jskit-ai/json-rest-api-core": "0.2.14",
2579
- "@jskit-ai/resource-crud-core": "0.1.204",
2580
- "@jskit-ai/users-core": "0.2.15",
2581
- "@jskit-ai/workspaces-core": "0.2.15",
2619
+ "@jskit-ai/crud-core": "0.2.16",
2620
+ "@jskit-ai/resource-core": "0.1.206",
2621
+ "@jskit-ai/resource-crud-core": "0.1.206",
2622
+ "@jskit-ai/users-core": "0.2.17",
2623
+ "@jskit-ai/workspaces-core": "0.2.17",
2582
2624
  "json-rest-schema": "^1.0.17"
2583
2625
  },
2584
2626
  "peerDependencies": {
2585
- "@jskit-ai/auth-core": "0.2.13",
2586
- "@jskit-ai/http-runtime": "0.2.13",
2587
- "@jskit-ai/kernel": "0.2.13"
2627
+ "@jskit-ai/auth-core": "0.2.15",
2628
+ "@jskit-ai/database-runtime": "0.1.264",
2629
+ "@jskit-ai/http-runtime": "0.2.15",
2630
+ "@jskit-ai/kernel": "0.2.15",
2631
+ "@jskit-ai/resource-runtime": "0.2.13"
2588
2632
  }
2589
2633
  }
2590
2634
  },
2591
2635
  {
2592
2636
  "packageId": "@jskit-ai/rewarded-web",
2593
- "version": "0.2.18",
2637
+ "version": "0.2.20",
2594
2638
  "description": "Rewarded gate client workflow with explicitly composed application delivery.",
2595
2639
  "jskit": {
2596
2640
  "kind": "runtime",
@@ -2639,19 +2683,19 @@
2639
2683
  },
2640
2684
  "packageJson": {
2641
2685
  "dependencies": {
2642
- "@jskit-ai/rewarded-core": "0.2.15"
2686
+ "@jskit-ai/rewarded-core": "0.2.17"
2643
2687
  },
2644
2688
  "peerDependencies": {
2645
- "@jskit-ai/http-runtime": "0.2.13",
2646
- "@jskit-ai/kernel": "0.2.13",
2647
- "@jskit-ai/shell-web": "0.2.16",
2689
+ "@jskit-ai/http-runtime": "0.2.15",
2690
+ "@jskit-ai/kernel": "0.2.15",
2691
+ "@jskit-ai/shell-web": "0.2.18",
2648
2692
  "vue": "^3.5.13"
2649
2693
  }
2650
2694
  }
2651
2695
  },
2652
2696
  {
2653
2697
  "packageId": "@jskit-ai/shell-web",
2654
- "version": "0.2.16",
2698
+ "version": "0.2.18",
2655
2699
  "description": "Web shell layout runtime with outlet-based placement contributions.",
2656
2700
  "jskit": {
2657
2701
  "kind": "runtime",
@@ -3008,10 +3052,10 @@
3008
3052
  },
3009
3053
  "packageJson": {
3010
3054
  "dependencies": {
3011
- "@jskit-ai/architecture-inspector": "0.1.11"
3055
+ "@jskit-ai/architecture-inspector": "0.1.13"
3012
3056
  },
3013
3057
  "peerDependencies": {
3014
- "@jskit-ai/kernel": "0.2.13",
3058
+ "@jskit-ai/kernel": "0.2.15",
3015
3059
  "pinia": "^4.0.3",
3016
3060
  "vue": "^3.5.44",
3017
3061
  "vue-router": "^5.3.1",
@@ -3021,7 +3065,7 @@
3021
3065
  },
3022
3066
  {
3023
3067
  "packageId": "@jskit-ai/storage-runtime",
3024
- "version": "0.1.259",
3068
+ "version": "0.1.261",
3025
3069
  "jskit": {
3026
3070
  "kind": "runtime",
3027
3071
  "capabilities": {
@@ -3070,13 +3114,13 @@
3070
3114
  "unstorage": "^1.17.5"
3071
3115
  },
3072
3116
  "peerDependencies": {
3073
- "@jskit-ai/kernel": "0.2.13"
3117
+ "@jskit-ai/kernel": "0.2.15"
3074
3118
  }
3075
3119
  }
3076
3120
  },
3077
3121
  {
3078
3122
  "packageId": "@jskit-ai/uploads-image-web",
3079
- "version": "0.2.13",
3123
+ "version": "0.2.15",
3080
3124
  "description": "Reusable client-side image upload runtime with pre-upload image editing.",
3081
3125
  "jskit": {
3082
3126
  "kind": "runtime",
@@ -3138,7 +3182,7 @@
3138
3182
  },
3139
3183
  "packageJson": {
3140
3184
  "dependencies": {
3141
- "@jskit-ai/uploads-runtime": "0.2.13",
3185
+ "@jskit-ai/uploads-runtime": "0.2.15",
3142
3186
  "@uppy/compressor": "^3.1.0",
3143
3187
  "@uppy/core": "^5.2.0",
3144
3188
  "@uppy/dashboard": "^5.1.1",
@@ -3146,14 +3190,14 @@
3146
3190
  "@uppy/xhr-upload": "^5.1.1"
3147
3191
  },
3148
3192
  "peerDependencies": {
3149
- "@jskit-ai/kernel": "0.2.13",
3193
+ "@jskit-ai/kernel": "0.2.15",
3150
3194
  "vue": "^3.5.13"
3151
3195
  }
3152
3196
  }
3153
3197
  },
3154
3198
  {
3155
3199
  "packageId": "@jskit-ai/uploads-runtime",
3156
- "version": "0.2.13",
3200
+ "version": "0.2.15",
3157
3201
  "description": "Reusable upload runtime primitives for multipart parsing, policy validation, and blob storage.",
3158
3202
  "jskit": {
3159
3203
  "kind": "runtime",
@@ -3222,20 +3266,21 @@
3222
3266
  "@fastify/multipart": "^10.1.1"
3223
3267
  },
3224
3268
  "peerDependencies": {
3225
- "@jskit-ai/kernel": "0.2.13"
3269
+ "@jskit-ai/kernel": "0.2.15"
3226
3270
  }
3227
3271
  }
3228
3272
  },
3229
3273
  {
3230
3274
  "packageId": "@jskit-ai/users-core",
3231
- "version": "0.2.15",
3275
+ "version": "0.2.17",
3232
3276
  "description": "Users/account runtime plus HTTP routes for account features.",
3233
3277
  "jskit": {
3234
3278
  "kind": "runtime",
3235
3279
  "capabilities": {
3236
3280
  "provides": [
3237
3281
  "users.core",
3238
- "users.identity",
3282
+ "users.profiles",
3283
+ "users.settings",
3239
3284
  "users.extensions",
3240
3285
  "auth.profile.projector"
3241
3286
  ],
@@ -3245,7 +3290,7 @@
3245
3290
  "runtime.bootstrap",
3246
3291
  "runtime.database",
3247
3292
  "runtime.http",
3248
- "runtime.json-rest-api",
3293
+ "runtime.resources",
3249
3294
  "runtime.storage",
3250
3295
  "runtime.uploads"
3251
3296
  ]
@@ -3289,7 +3334,7 @@
3289
3334
  },
3290
3335
  {
3291
3336
  "subpath": "./server/UsersIdentityProvider",
3292
- "summary": "Exports UsersIdentityProvider, which provides users.identity (the user profile and settings repositories) and auth.profile.projector."
3337
+ "summary": "Exports UsersIdentityProvider, which provides users.profiles (the users table's records, with createWithSettings and countUsers), users.settings (the users' settings records) and auth.profile.projector."
3293
3338
  },
3294
3339
  {
3295
3340
  "subpath": "./server/usersExtensions",
@@ -3301,11 +3346,11 @@
3301
3346
  },
3302
3347
  {
3303
3348
  "subpath": "./shared/resources/userProfileResource",
3304
- "summary": "Exports the shared user profile resource."
3349
+ "summary": "Exports the users table resource (userProfileTableResource), the account profile's CRUD contract (userProfileCrud) and the profile API contract (userProfileContract)."
3305
3350
  },
3306
3351
  {
3307
3352
  "subpath": "./shared/resources/userSettingsResource",
3308
- "summary": "Exports the shared user settings resource."
3353
+ "summary": "Exports the user_settings table resource (userSettingsTableResource), the account settings' CRUD contract (userSettingsCrud), the settings API contract (userSettingsContract) and the settings keys and output schemas."
3309
3354
  },
3310
3355
  {
3311
3356
  "subpath": "./shared/settings",
@@ -3313,12 +3358,17 @@
3313
3358
  },
3314
3359
  {
3315
3360
  "subpath": "./server/types",
3316
- "summary": "Types of the users.core, users.identity and users.extensions capabilities, for features that require them."
3361
+ "summary": "Types of the users.core, users.profiles, users.settings and users.extensions capabilities, for features that require them."
3362
+ },
3363
+ {
3364
+ "subpath": "./server/UsersExtensionsProvider",
3365
+ "summary": "Exports UsersExtensionsProvider, which provides users.extensions, for a test that starts UsersIdentityProvider."
3317
3366
  }
3318
3367
  ],
3319
3368
  "capabilities": [
3320
3369
  "users.core",
3321
- "users.identity",
3370
+ "users.profiles",
3371
+ "users.settings",
3322
3372
  "users.extensions",
3323
3373
  "auth.profile.projector"
3324
3374
  ]
@@ -3396,24 +3446,24 @@
3396
3446
  },
3397
3447
  "packageJson": {
3398
3448
  "dependencies": {
3399
- "@jskit-ai/database-runtime": "0.1.262",
3400
- "@jskit-ai/json-rest-api-core": "0.2.14",
3401
- "@jskit-ai/resource-core": "0.1.204",
3402
- "@jskit-ai/resource-crud-core": "0.1.204",
3403
- "@jskit-ai/storage-runtime": "0.1.259",
3404
- "@jskit-ai/uploads-runtime": "0.2.13",
3449
+ "@jskit-ai/resource-core": "0.1.206",
3450
+ "@jskit-ai/resource-crud-core": "0.1.206",
3451
+ "@jskit-ai/storage-runtime": "0.1.261",
3452
+ "@jskit-ai/uploads-runtime": "0.2.15",
3405
3453
  "json-rest-schema": "^1.0.17"
3406
3454
  },
3407
3455
  "peerDependencies": {
3408
- "@jskit-ai/auth-core": "0.2.13",
3409
- "@jskit-ai/http-runtime": "0.2.13",
3410
- "@jskit-ai/kernel": "0.2.13"
3456
+ "@jskit-ai/auth-core": "0.2.15",
3457
+ "@jskit-ai/database-runtime": "0.1.264",
3458
+ "@jskit-ai/http-runtime": "0.2.15",
3459
+ "@jskit-ai/kernel": "0.2.15",
3460
+ "@jskit-ai/resource-runtime": "0.2.13"
3411
3461
  }
3412
3462
  }
3413
3463
  },
3414
3464
  {
3415
3465
  "packageId": "@jskit-ai/users-web",
3416
- "version": "0.2.23",
3466
+ "version": "0.2.25",
3417
3467
  "description": "Users web module with account, profile, and user-specific shell UI.",
3418
3468
  "jskit": {
3419
3469
  "kind": "runtime",
@@ -3618,15 +3668,15 @@
3618
3668
  },
3619
3669
  "packageJson": {
3620
3670
  "dependencies": {
3621
- "@jskit-ai/uploads-image-web": "0.2.13",
3622
- "@jskit-ai/users-core": "0.2.15"
3671
+ "@jskit-ai/uploads-image-web": "0.2.15",
3672
+ "@jskit-ai/users-core": "0.2.17"
3623
3673
  },
3624
3674
  "peerDependencies": {
3625
- "@jskit-ai/auth-web": "0.2.18",
3626
- "@jskit-ai/http-runtime": "0.2.13",
3627
- "@jskit-ai/http-web": "0.2.21",
3628
- "@jskit-ai/kernel": "0.2.13",
3629
- "@jskit-ai/shell-web": "0.2.16",
3675
+ "@jskit-ai/auth-web": "0.2.20",
3676
+ "@jskit-ai/http-runtime": "0.2.15",
3677
+ "@jskit-ai/http-web": "0.2.23",
3678
+ "@jskit-ai/kernel": "0.2.15",
3679
+ "@jskit-ai/shell-web": "0.2.18",
3630
3680
  "@tanstack/vue-query": "^5.90.5",
3631
3681
  "vue": "^3.5.13",
3632
3682
  "vue-router": "^5.0.4",
@@ -3636,13 +3686,15 @@
3636
3686
  },
3637
3687
  {
3638
3688
  "packageId": "@jskit-ai/workspaces-core",
3639
- "version": "0.2.15",
3689
+ "version": "0.2.17",
3640
3690
  "description": "Workspace tenancy runtime plus HTTP routes, role catalog, and workspace config scaffolding.",
3641
3691
  "jskit": {
3642
3692
  "kind": "runtime",
3643
3693
  "capabilities": {
3644
3694
  "provides": [
3645
- "workspaces.core"
3695
+ "workspaces.core",
3696
+ "workspaces",
3697
+ "workspaces.memberships"
3646
3698
  ],
3647
3699
  "requires": [
3648
3700
  "auth.extensions",
@@ -3653,9 +3705,10 @@
3653
3705
  "runtime.database",
3654
3706
  "runtime.env",
3655
3707
  "runtime.http",
3656
- "runtime.json-rest-api",
3657
- "users.core",
3658
- "users.extensions"
3708
+ "runtime.resources",
3709
+ "users.extensions",
3710
+ "users.profiles",
3711
+ "users.settings"
3659
3712
  ]
3660
3713
  },
3661
3714
  "runtime": {
@@ -3698,7 +3751,7 @@
3698
3751
  "surfaces": [
3699
3752
  {
3700
3753
  "subpath": "./server/WorkspacesFeature",
3701
- "summary": "Exports WorkspacesFeature, which provides workspaces.core (directory, members, pending invitations and settings services, their actions and routes), and the optional tokens' defaults."
3754
+ "summary": "Exports WorkspacesFeature, which provides workspaces.core (directory, members, pending invitations and settings services, their actions and routes), workspaces (the workspaces' records, with findBySlug and lock) and workspaces.memberships (the memberships' records, with addMember and activeMemberIds), and the optional tokens' defaults."
3702
3755
  },
3703
3756
  {
3704
3757
  "subpath": "./server/WorkspacesIntegrationsProvider",
@@ -3722,11 +3775,17 @@
3722
3775
  },
3723
3776
  {
3724
3777
  "subpath": "./server/types",
3725
- "summary": "Type of the workspaces.core capability, for features that require it."
3778
+ "summary": "Types of the workspaces.core, workspaces and workspaces.memberships capabilities, for features that require them."
3779
+ },
3780
+ {
3781
+ "subpath": "./test/WorkspaceRecordsFeature",
3782
+ "summary": "For an application's tests: WorkspaceRecordsFeature owns the workspaces tables and provides only workspaces and workspaces.memberships, the records workspaces.core provides, without its routes, settings or invitations."
3726
3783
  }
3727
3784
  ],
3728
3785
  "capabilities": [
3729
- "workspaces.core"
3786
+ "workspaces.core",
3787
+ "workspaces",
3788
+ "workspaces.memberships"
3730
3789
  ]
3731
3790
  },
3732
3791
  "server": {
@@ -3807,23 +3866,23 @@
3807
3866
  },
3808
3867
  "packageJson": {
3809
3868
  "dependencies": {
3810
- "@jskit-ai/database-runtime": "0.1.262",
3811
- "@jskit-ai/json-rest-api-core": "0.2.14",
3812
- "@jskit-ai/resource-core": "0.1.204",
3813
- "@jskit-ai/resource-crud-core": "0.1.204",
3814
- "@jskit-ai/users-core": "0.2.15",
3869
+ "@jskit-ai/resource-core": "0.1.206",
3870
+ "@jskit-ai/resource-crud-core": "0.1.206",
3871
+ "@jskit-ai/users-core": "0.2.17",
3815
3872
  "json-rest-schema": "^1.0.17"
3816
3873
  },
3817
3874
  "peerDependencies": {
3818
- "@jskit-ai/auth-core": "0.2.13",
3819
- "@jskit-ai/http-runtime": "0.2.13",
3820
- "@jskit-ai/kernel": "0.2.13"
3875
+ "@jskit-ai/auth-core": "0.2.15",
3876
+ "@jskit-ai/database-runtime": "0.1.264",
3877
+ "@jskit-ai/http-runtime": "0.2.15",
3878
+ "@jskit-ai/kernel": "0.2.15",
3879
+ "@jskit-ai/resource-runtime": "0.2.13"
3821
3880
  }
3822
3881
  }
3823
3882
  },
3824
3883
  {
3825
3884
  "packageId": "@jskit-ai/workspaces-web",
3826
- "version": "0.2.23",
3885
+ "version": "0.2.25",
3827
3886
  "description": "Workspace web module: workspace selector, tools widget, workspace surfaces, members UI, and settings hosts.",
3828
3887
  "jskit": {
3829
3888
  "kind": "runtime",
@@ -4071,15 +4130,15 @@
4071
4130
  },
4072
4131
  "packageJson": {
4073
4132
  "dependencies": {
4074
- "@jskit-ai/users-core": "0.2.15",
4075
- "@jskit-ai/workspaces-core": "0.2.15"
4133
+ "@jskit-ai/users-core": "0.2.17",
4134
+ "@jskit-ai/workspaces-core": "0.2.17"
4076
4135
  },
4077
4136
  "peerDependencies": {
4078
- "@jskit-ai/auth-web": "0.2.18",
4079
- "@jskit-ai/http-web": "0.2.21",
4080
- "@jskit-ai/kernel": "0.2.13",
4081
- "@jskit-ai/shell-web": "0.2.16",
4082
- "@jskit-ai/users-web": "0.2.23",
4137
+ "@jskit-ai/auth-web": "0.2.20",
4138
+ "@jskit-ai/http-web": "0.2.23",
4139
+ "@jskit-ai/kernel": "0.2.15",
4140
+ "@jskit-ai/shell-web": "0.2.18",
4141
+ "@jskit-ai/users-web": "0.2.25",
4083
4142
  "@tanstack/vue-query": "^5.90.5",
4084
4143
  "vue": "^3.5.13",
4085
4144
  "vue-router": "^5.0.4",
@@ -4111,7 +4170,7 @@
4111
4170
  "@jskit-ai/shell-web"
4112
4171
  ],
4113
4172
  "packageId": "@jskit-ai/assistant-runtime",
4114
- "packageVersion": "0.2.29",
4173
+ "packageVersion": "0.2.31",
4115
4174
  "documentPath": "patterns/assistant-surface/PATTERN.md",
4116
4175
  "examplePath": "patterns/assistant-surface/example",
4117
4176
  "files": [
@@ -4143,7 +4202,7 @@
4143
4202
  "@jskit-ai/oidc-issuer-core"
4144
4203
  ],
4145
4204
  "packageId": "@jskit-ai/oidc-issuer-core",
4146
- "packageVersion": "0.1.21",
4205
+ "packageVersion": "0.1.23",
4147
4206
  "documentPath": "patterns/accounts-hub/PATTERN.md",
4148
4207
  "examplePath": "patterns/accounts-hub/example",
4149
4208
  "files": [
@@ -4173,7 +4232,7 @@
4173
4232
  "@jskit-ai/shell-web"
4174
4233
  ],
4175
4234
  "packageId": "@jskit-ai/auth-web",
4176
- "packageVersion": "0.2.18",
4235
+ "packageVersion": "0.2.20",
4177
4236
  "documentPath": "patterns/auth-surface/PATTERN.md",
4178
4237
  "examplePath": "patterns/auth-surface/example",
4179
4238
  "files": [
@@ -4212,7 +4271,7 @@
4212
4271
  "@jskit-ai/auth-web"
4213
4272
  ],
4214
4273
  "packageId": "@jskit-ai/auth-provider-oidc-core",
4215
- "packageVersion": "0.2.20",
4274
+ "packageVersion": "0.2.22",
4216
4275
  "documentPath": "patterns/oidc-sign-in/PATTERN.md",
4217
4276
  "examplePath": "patterns/oidc-sign-in/example",
4218
4277
  "files": [
@@ -4235,7 +4294,7 @@
4235
4294
  "@jskit-ai/auth-provider-supabase-core"
4236
4295
  ],
4237
4296
  "packageId": "@jskit-ai/auth-provider-supabase-core",
4238
- "packageVersion": "0.2.15",
4297
+ "packageVersion": "0.2.17",
4239
4298
  "documentPath": "patterns/supabase-auth/PATTERN.md",
4240
4299
  "examplePath": "patterns/supabase-auth/example",
4241
4300
  "files": [
@@ -4264,7 +4323,7 @@
4264
4323
  "@jskit-ai/connectors-core"
4265
4324
  ],
4266
4325
  "packageId": "@jskit-ai/connectors-catalog",
4267
- "packageVersion": "0.2.14",
4326
+ "packageVersion": "0.2.16",
4268
4327
  "documentPath": "patterns/ai-connections/PATTERN.md",
4269
4328
  "examplePath": "patterns/ai-connections/example",
4270
4329
  "files": [
@@ -4299,7 +4358,7 @@
4299
4358
  "@jskit-ai/connectors-core"
4300
4359
  ],
4301
4360
  "packageId": "@jskit-ai/connectors-catalog",
4302
- "packageVersion": "0.2.14",
4361
+ "packageVersion": "0.2.16",
4303
4362
  "documentPath": "patterns/api-key-connection/PATTERN.md",
4304
4363
  "examplePath": "patterns/api-key-connection/example",
4305
4364
  "files": [
@@ -4326,7 +4385,7 @@
4326
4385
  "@jskit-ai/connectors-core"
4327
4386
  ],
4328
4387
  "packageId": "@jskit-ai/connectors-catalog",
4329
- "packageVersion": "0.2.14",
4388
+ "packageVersion": "0.2.16",
4330
4389
  "documentPath": "patterns/assistant-mcp/PATTERN.md",
4331
4390
  "examplePath": "patterns/assistant-mcp/example",
4332
4391
  "files": [
@@ -4359,7 +4418,7 @@
4359
4418
  "@jskit-ai/connectors-core"
4360
4419
  ],
4361
4420
  "packageId": "@jskit-ai/connectors-catalog",
4362
- "packageVersion": "0.2.14",
4421
+ "packageVersion": "0.2.16",
4363
4422
  "documentPath": "patterns/assistant-mcp-oauth/PATTERN.md",
4364
4423
  "examplePath": "patterns/assistant-mcp-oauth/example",
4365
4424
  "files": [
@@ -4387,7 +4446,7 @@
4387
4446
  "@jskit-ai/connectors-core"
4388
4447
  ],
4389
4448
  "packageId": "@jskit-ai/connectors-catalog",
4390
- "packageVersion": "0.2.14",
4449
+ "packageVersion": "0.2.16",
4391
4450
  "documentPath": "patterns/aws-storage-queries/PATTERN.md",
4392
4451
  "examplePath": "patterns/aws-storage-queries/example",
4393
4452
  "files": [
@@ -4418,7 +4477,7 @@
4418
4477
  "@jskit-ai/database-runtime-mysql"
4419
4478
  ],
4420
4479
  "packageId": "@jskit-ai/connector-google-calendar",
4421
- "packageVersion": "0.2.14",
4480
+ "packageVersion": "0.2.16",
4422
4481
  "documentPath": "patterns/calendar-cli/PATTERN.md",
4423
4482
  "examplePath": "patterns/calendar-cli/example",
4424
4483
  "files": [
@@ -4448,7 +4507,7 @@
4448
4507
  "@jskit-ai/connectors-core"
4449
4508
  ],
4450
4509
  "packageId": "@jskit-ai/connectors-catalog",
4451
- "packageVersion": "0.2.14",
4510
+ "packageVersion": "0.2.16",
4452
4511
  "documentPath": "patterns/event-delivery/PATTERN.md",
4453
4512
  "examplePath": "patterns/event-delivery/example",
4454
4513
  "files": [
@@ -4477,7 +4536,7 @@
4477
4536
  "@jskit-ai/connectors-core"
4478
4537
  ],
4479
4538
  "packageId": "@jskit-ai/connectors-catalog",
4480
- "packageVersion": "0.2.14",
4539
+ "packageVersion": "0.2.16",
4481
4540
  "documentPath": "patterns/firebase-messaging/PATTERN.md",
4482
4541
  "examplePath": "patterns/firebase-messaging/example",
4483
4542
  "files": [
@@ -4502,7 +4561,7 @@
4502
4561
  "@jskit-ai/connectors-core"
4503
4562
  ],
4504
4563
  "packageId": "@jskit-ai/connectors-catalog",
4505
- "packageVersion": "0.2.14",
4564
+ "packageVersion": "0.2.16",
4506
4565
  "documentPath": "patterns/google-ads-search/PATTERN.md",
4507
4566
  "examplePath": "patterns/google-ads-search/example",
4508
4567
  "files": [
@@ -4553,7 +4612,7 @@
4553
4612
  "@jskit-ai/connectors-core"
4554
4613
  ],
4555
4614
  "packageId": "@jskit-ai/connectors-catalog",
4556
- "packageVersion": "0.2.14",
4615
+ "packageVersion": "0.2.16",
4557
4616
  "documentPath": "patterns/oauth-connection/PATTERN.md",
4558
4617
  "examplePath": "patterns/oauth-connection/example",
4559
4618
  "files": [
@@ -4576,7 +4635,7 @@
4576
4635
  "@jskit-ai/connectors-core"
4577
4636
  ],
4578
4637
  "packageId": "@jskit-ai/connectors-catalog",
4579
- "packageVersion": "0.2.14",
4638
+ "packageVersion": "0.2.16",
4580
4639
  "documentPath": "patterns/paddle-catalogue/PATTERN.md",
4581
4640
  "examplePath": "patterns/paddle-catalogue/example",
4582
4641
  "files": [
@@ -4601,7 +4660,7 @@
4601
4660
  "@jskit-ai/connectors-core"
4602
4661
  ],
4603
4662
  "packageId": "@jskit-ai/connectors-catalog",
4604
- "packageVersion": "0.2.14",
4663
+ "packageVersion": "0.2.16",
4605
4664
  "documentPath": "patterns/public-image/PATTERN.md",
4606
4665
  "examplePath": "patterns/public-image/example",
4607
4666
  "files": [
@@ -4630,7 +4689,7 @@
4630
4689
  "@jskit-ai/connectors-core"
4631
4690
  ],
4632
4691
  "packageId": "@jskit-ai/connectors-catalog",
4633
- "packageVersion": "0.2.14",
4692
+ "packageVersion": "0.2.16",
4634
4693
  "documentPath": "patterns/redshift-queries/PATTERN.md",
4635
4694
  "examplePath": "patterns/redshift-queries/example",
4636
4695
  "files": [
@@ -4657,7 +4716,7 @@
4657
4716
  "@jskit-ai/connectors-core"
4658
4717
  ],
4659
4718
  "packageId": "@jskit-ai/connectors-catalog",
4660
- "packageVersion": "0.2.14",
4719
+ "packageVersion": "0.2.16",
4661
4720
  "documentPath": "patterns/source-scanning/PATTERN.md",
4662
4721
  "examplePath": "patterns/source-scanning/example",
4663
4722
  "files": [
@@ -4683,7 +4742,7 @@
4683
4742
  "@jskit-ai/shell-web"
4684
4743
  ],
4685
4744
  "packageId": "@jskit-ai/console-web",
4686
- "packageVersion": "0.1.240",
4745
+ "packageVersion": "0.1.242",
4687
4746
  "documentPath": "patterns/console-surface/PATTERN.md",
4688
4747
  "examplePath": "patterns/console-surface/example",
4689
4748
  "files": [
@@ -4695,64 +4754,57 @@
4695
4754
  ]
4696
4755
  },
4697
4756
  {
4698
- "id": "crud/crud-screen-set",
4699
- "title": "CRUD list, view, create, and edit screens",
4700
- "summary": "Build a routed CRUD user interface as thin application pages over JSKIT's shared screen components and composables.",
4757
+ "id": "crud/crud-contract",
4758
+ "title": "Owner-scoped CRUD contract",
4759
+ "summary": "Define an application table resource whose records belong to the current user, and the authenticated CRUD contract that serves it.",
4701
4760
  "keywords": [
4702
- "actions",
4703
- "add",
4761
+ "authenticated",
4704
4762
  "crud",
4705
- "delete",
4706
- "edit",
4707
- "filters",
4708
- "list",
4709
- "material",
4710
- "routes",
4711
- "view",
4712
- "vue"
4763
+ "database",
4764
+ "owner-scoped",
4765
+ "resource",
4766
+ "table",
4767
+ "user"
4713
4768
  ],
4714
4769
  "requires": [
4715
- "@jskit-ai/http-web",
4770
+ "@jskit-ai/resource-core",
4716
4771
  "@jskit-ai/resource-crud-core"
4717
4772
  ],
4718
- "packageId": "@jskit-ai/http-web",
4719
- "packageVersion": "0.2.21",
4720
- "documentPath": "patterns/crud-screen-set/PATTERN.md",
4721
- "examplePath": "patterns/crud-screen-set/example",
4773
+ "packageId": "@jskit-ai/resource-crud-core",
4774
+ "packageVersion": "0.1.206",
4775
+ "documentPath": "patterns/crud-contract/PATTERN.md",
4776
+ "examplePath": "patterns/crud-contract/example",
4722
4777
  "files": [
4723
- "books/BookEditPage.vue",
4724
- "books/BookFormFields.vue",
4725
- "books/BookListPage.vue",
4726
- "books/BookNewPage.vue",
4727
- "books/BookViewPage.vue",
4728
- "books/formFields.js",
4729
- "books/listExtensions.js"
4778
+ "bookResource.js"
4730
4779
  ]
4731
4780
  },
4732
4781
  {
4733
- "id": "crud/json-api-resource-package",
4734
- "title": "JSON API CRUD resource package",
4735
- "summary": "Build a complete application-owned CRUD server package from a migration, resource contract, and one framework module declaration.",
4782
+ "id": "crud/crud-feature-package",
4783
+ "title": "CRUD feature package",
4784
+ "summary": "Build a complete application-owned CRUD server package from a migration, a table resource with its CRUD contract, and one framework module declaration.",
4736
4785
  "keywords": [
4737
4786
  "actions",
4738
4787
  "crud",
4739
4788
  "database",
4789
+ "defineCrudFeature",
4740
4790
  "json-api",
4741
4791
  "migration",
4792
+ "owns",
4742
4793
  "permissions",
4743
- "provider",
4744
4794
  "repository",
4745
4795
  "routes",
4746
- "service"
4796
+ "service",
4797
+ "table resource"
4747
4798
  ],
4748
4799
  "requires": [
4749
4800
  "@jskit-ai/crud-core",
4801
+ "@jskit-ai/resource-core",
4750
4802
  "@jskit-ai/resource-crud-core"
4751
4803
  ],
4752
4804
  "packageId": "@jskit-ai/crud-core",
4753
- "packageVersion": "0.2.14",
4754
- "documentPath": "patterns/json-api-resource-package/PATTERN.md",
4755
- "examplePath": "patterns/json-api-resource-package/example",
4805
+ "packageVersion": "0.2.16",
4806
+ "documentPath": "patterns/crud-feature-package/PATTERN.md",
4807
+ "examplePath": "patterns/crud-feature-package/example",
4756
4808
  "files": [
4757
4809
  "migrations/20260815000000_books.cjs",
4758
4810
  "packages/books/package.json",
@@ -4763,26 +4815,39 @@
4763
4815
  ]
4764
4816
  },
4765
4817
  {
4766
- "id": "crud/resource-contract",
4767
- "title": "Owner-scoped CRUD resource contract",
4768
- "summary": "Define an authenticated application resource whose records belong to the current user.",
4818
+ "id": "crud/crud-screen-set",
4819
+ "title": "CRUD list, view, create, and edit screens",
4820
+ "summary": "Build a routed CRUD user interface as thin application pages over JSKIT's shared screen components and composables.",
4769
4821
  "keywords": [
4770
- "authenticated",
4822
+ "actions",
4823
+ "add",
4771
4824
  "crud",
4772
- "database",
4773
- "owner-scoped",
4774
- "resource",
4775
- "user"
4825
+ "delete",
4826
+ "edit",
4827
+ "filters",
4828
+ "list",
4829
+ "material",
4830
+ "routes",
4831
+ "view",
4832
+ "vue"
4776
4833
  ],
4777
4834
  "requires": [
4835
+ "@jskit-ai/http-web",
4836
+ "@jskit-ai/resource-core",
4778
4837
  "@jskit-ai/resource-crud-core"
4779
4838
  ],
4780
- "packageId": "@jskit-ai/resource-crud-core",
4781
- "packageVersion": "0.1.204",
4782
- "documentPath": "patterns/resource-contract/PATTERN.md",
4783
- "examplePath": "patterns/resource-contract/example",
4839
+ "packageId": "@jskit-ai/http-web",
4840
+ "packageVersion": "0.2.23",
4841
+ "documentPath": "patterns/crud-screen-set/PATTERN.md",
4842
+ "examplePath": "patterns/crud-screen-set/example",
4784
4843
  "files": [
4785
- "bookResource.js"
4844
+ "books/BookEditPage.vue",
4845
+ "books/BookFormFields.vue",
4846
+ "books/BookListPage.vue",
4847
+ "books/BookNewPage.vue",
4848
+ "books/BookViewPage.vue",
4849
+ "books/formFields.js",
4850
+ "books/listExtensions.js"
4786
4851
  ]
4787
4852
  },
4788
4853
  {
@@ -4801,7 +4866,7 @@
4801
4866
  "@jskit-ai/database-runtime-mysql"
4802
4867
  ],
4803
4868
  "packageId": "@jskit-ai/database-runtime-mysql",
4804
- "packageVersion": "0.1.260",
4869
+ "packageVersion": "0.1.262",
4805
4870
  "documentPath": "patterns/mysql-application/PATTERN.md",
4806
4871
  "examplePath": "patterns/mysql-application/example",
4807
4872
  "files": [
@@ -4829,7 +4894,7 @@
4829
4894
  "@jskit-ai/database-runtime-postgres"
4830
4895
  ],
4831
4896
  "packageId": "@jskit-ai/database-runtime-postgres",
4832
- "packageVersion": "0.1.259",
4897
+ "packageVersion": "0.1.261",
4833
4898
  "documentPath": "patterns/postgres-application/PATTERN.md",
4834
4899
  "examplePath": "patterns/postgres-application/example",
4835
4900
  "files": [
@@ -4841,6 +4906,34 @@
4841
4906
  "tests/e2e/databases.js"
4842
4907
  ]
4843
4908
  },
4909
+ {
4910
+ "id": "database/table-resource",
4911
+ "title": "Table resource",
4912
+ "summary": "Describe one database table once (its fields, columns, ownership, search and sort) so its owner feature reads and writes it through a scoped handle.",
4913
+ "keywords": [
4914
+ "database",
4915
+ "defaultTo",
4916
+ "defineTableResource",
4917
+ "lockVersionField",
4918
+ "lookup",
4919
+ "ownership",
4920
+ "owns",
4921
+ "resource",
4922
+ "system",
4923
+ "table",
4924
+ "workspace_or_shared"
4925
+ ],
4926
+ "requires": [
4927
+ "@jskit-ai/resource-core"
4928
+ ],
4929
+ "packageId": "@jskit-ai/resource-core",
4930
+ "packageVersion": "0.1.206",
4931
+ "documentPath": "patterns/table-resource/PATTERN.md",
4932
+ "examplePath": "patterns/table-resource/example",
4933
+ "files": [
4934
+ "orderResource.js"
4935
+ ]
4936
+ },
4844
4937
  {
4845
4938
  "id": "mobile/android-application",
4846
4939
  "title": "Capacitor Android application",
@@ -4861,7 +4954,7 @@
4861
4954
  "@jskit-ai/mobile-capacitor"
4862
4955
  ],
4863
4956
  "packageId": "@jskit-ai/mobile-capacitor",
4864
- "packageVersion": "0.2.16",
4957
+ "packageVersion": "0.2.18",
4865
4958
  "documentPath": "patterns/android-application/PATTERN.md",
4866
4959
  "examplePath": "patterns/android-application/example",
4867
4960
  "files": [
@@ -4885,7 +4978,7 @@
4885
4978
  "@jskit-ai/shell-web"
4886
4979
  ],
4887
4980
  "packageId": "@jskit-ai/realtime",
4888
- "packageVersion": "0.2.19",
4981
+ "packageVersion": "0.2.21",
4889
4982
  "documentPath": "patterns/realtime-application/PATTERN.md",
4890
4983
  "examplePath": "patterns/realtime-application/example",
4891
4984
  "files": [
@@ -4909,7 +5002,7 @@
4909
5002
  "@jskit-ai/rewarded-web"
4910
5003
  ],
4911
5004
  "packageId": "@jskit-ai/rewarded-web",
4912
- "packageVersion": "0.2.18",
5005
+ "packageVersion": "0.2.20",
4913
5006
  "documentPath": "patterns/google-rewarded/PATTERN.md",
4914
5007
  "examplePath": "patterns/google-rewarded/example",
4915
5008
  "files": [
@@ -4936,7 +5029,7 @@
4936
5029
  "@jskit-ai/shell-web"
4937
5030
  ],
4938
5031
  "packageId": "@jskit-ai/shell-web",
4939
- "packageVersion": "0.2.16",
5032
+ "packageVersion": "0.2.18",
4940
5033
  "documentPath": "patterns/application-shell/PATTERN.md",
4941
5034
  "examplePath": "patterns/application-shell/example",
4942
5035
  "files": [
@@ -4982,7 +5075,7 @@
4982
5075
  "@jskit-ai/shell-web"
4983
5076
  ],
4984
5077
  "packageId": "@jskit-ai/shell-web",
4985
- "packageVersion": "0.2.16",
5078
+ "packageVersion": "0.2.18",
4986
5079
  "documentPath": "patterns/page-and-placement/PATTERN.md",
4987
5080
  "examplePath": "patterns/page-and-placement/example",
4988
5081
  "files": [
@@ -5018,7 +5111,7 @@
5018
5111
  "@jskit-ai/users-web"
5019
5112
  ],
5020
5113
  "packageId": "@jskit-ai/users-web",
5021
- "packageVersion": "0.2.23",
5114
+ "packageVersion": "0.2.25",
5022
5115
  "documentPath": "patterns/account-settings/PATTERN.md",
5023
5116
  "examplePath": "patterns/account-settings/example",
5024
5117
  "files": [
@@ -5051,7 +5144,7 @@
5051
5144
  "@jskit-ai/users-core"
5052
5145
  ],
5053
5146
  "packageId": "@jskit-ai/users-core",
5054
- "packageVersion": "0.2.15",
5147
+ "packageVersion": "0.2.17",
5055
5148
  "documentPath": "patterns/user-administration-server/PATTERN.md",
5056
5149
  "examplePath": "patterns/user-administration-server/example",
5057
5150
  "files": [
@@ -5059,12 +5152,13 @@
5059
5152
  "packages/users/src/server/types.js",
5060
5153
  "packages/users/src/server/UsersFeature.js",
5061
5154
  "packages/users/src/shared/index.js",
5062
- "packages/users/src/shared/userResource.js",
5155
+ "packages/users/src/shared/userCrud.js",
5063
5156
  "packages/users-workspace/package.json",
5064
5157
  "packages/users-workspace/src/server/types.js",
5065
5158
  "packages/users-workspace/src/server/UsersWorkspaceFeature.js",
5159
+ "packages/users-workspace/src/server/workspaceMembersOnly.js",
5066
5160
  "packages/users-workspace/src/shared/index.js",
5067
- "packages/users-workspace/src/shared/userResource.js"
5161
+ "packages/users-workspace/src/shared/userCrud.js"
5068
5162
  ]
5069
5163
  },
5070
5164
  {
@@ -5086,7 +5180,7 @@
5086
5180
  "@jskit-ai/workspaces-core"
5087
5181
  ],
5088
5182
  "packageId": "@jskit-ai/workspaces-core",
5089
- "packageVersion": "0.2.15",
5183
+ "packageVersion": "0.2.17",
5090
5184
  "documentPath": "patterns/workspace-server/PATTERN.md",
5091
5185
  "examplePath": "patterns/workspace-server/example",
5092
5186
  "files": [
@@ -5116,7 +5210,7 @@
5116
5210
  "@jskit-ai/workspaces-web"
5117
5211
  ],
5118
5212
  "packageId": "@jskit-ai/workspaces-web",
5119
- "packageVersion": "0.2.23",
5213
+ "packageVersion": "0.2.25",
5120
5214
  "documentPath": "patterns/workspace-surfaces/PATTERN.md",
5121
5215
  "examplePath": "patterns/workspace-surfaces/example",
5122
5216
  "files": [