@happyvertical/smrt-content 0.39.11 → 0.39.13

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.
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "version": "1.0.0",
3
- "timestamp": 1783963512796,
3
+ "timestamp": 1783987377996,
4
4
  "packageName": "@happyvertical/smrt-content",
5
- "packageVersion": "0.39.11",
5
+ "packageVersion": "0.39.13",
6
6
  "objects": {
7
7
  "@happyvertical/smrt-content:ContentAsset": {
8
8
  "name": "contentasset",
9
9
  "className": "ContentAsset",
10
10
  "qualifiedName": "@happyvertical/smrt-content:ContentAsset",
11
11
  "collection": "contentassets",
12
- "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-lct57/smrt/smrt/packages/content/src/content-asset.ts",
12
+ "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/content/src/content-asset.ts",
13
13
  "packageName": "@happyvertical/smrt-content",
14
14
  "fields": {
15
15
  "tenantId": {
@@ -180,7 +180,7 @@
180
180
  "className": "ContentAssetCollection",
181
181
  "qualifiedName": "@happyvertical/smrt-content:ContentAssetCollection",
182
182
  "collection": "contentassets",
183
- "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-lct57/smrt/smrt/packages/content/src/content-assets.ts",
183
+ "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/content/src/content-assets.ts",
184
184
  "packageName": "@happyvertical/smrt-content",
185
185
  "fields": {},
186
186
  "methods": {
@@ -359,7 +359,7 @@
359
359
  "className": "ContentContributionAttachment",
360
360
  "qualifiedName": "@happyvertical/smrt-content:ContentContributionAttachment",
361
361
  "collection": "contentcontributionattachments",
362
- "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-lct57/smrt/smrt/packages/content/src/content-contribution-attachment.ts",
362
+ "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/content/src/content-contribution-attachment.ts",
363
363
  "packageName": "@happyvertical/smrt-content",
364
364
  "fields": {
365
365
  "contributionId": {
@@ -604,7 +604,7 @@
604
604
  "className": "ContentContributionAttachmentCollection",
605
605
  "qualifiedName": "@happyvertical/smrt-content:ContentContributionAttachmentCollection",
606
606
  "collection": "contentcontributionattachments",
607
- "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-lct57/smrt/smrt/packages/content/src/content-contribution-attachments.ts",
607
+ "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/content/src/content-contribution-attachments.ts",
608
608
  "packageName": "@happyvertical/smrt-content",
609
609
  "fields": {},
610
610
  "methods": {
@@ -698,7 +698,7 @@
698
698
  "className": "ContentContributionRevision",
699
699
  "qualifiedName": "@happyvertical/smrt-content:ContentContributionRevision",
700
700
  "collection": "contentcontributionrevisions",
701
- "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-lct57/smrt/smrt/packages/content/src/content-contribution-revision.ts",
701
+ "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/content/src/content-contribution-revision.ts",
702
702
  "packageName": "@happyvertical/smrt-content",
703
703
  "fields": {
704
704
  "contributionId": {
@@ -934,7 +934,7 @@
934
934
  "className": "ContentContributionRevisionCollection",
935
935
  "qualifiedName": "@happyvertical/smrt-content:ContentContributionRevisionCollection",
936
936
  "collection": "contentcontributionrevisions",
937
- "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-lct57/smrt/smrt/packages/content/src/content-contribution-revisions.ts",
937
+ "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/content/src/content-contribution-revisions.ts",
938
938
  "packageName": "@happyvertical/smrt-content",
939
939
  "fields": {},
940
940
  "methods": {
@@ -1028,7 +1028,7 @@
1028
1028
  "className": "ContentContributionType",
1029
1029
  "qualifiedName": "@happyvertical/smrt-content:ContentContributionType",
1030
1030
  "collection": "contentcontributiontypes",
1031
- "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-lct57/smrt/smrt/packages/content/src/content-contribution-type.ts",
1031
+ "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/content/src/content-contribution-type.ts",
1032
1032
  "packageName": "@happyvertical/smrt-content",
1033
1033
  "fields": {
1034
1034
  "key": {
@@ -1382,7 +1382,7 @@
1382
1382
  "className": "ContentContributionTypeCollection",
1383
1383
  "qualifiedName": "@happyvertical/smrt-content:ContentContributionTypeCollection",
1384
1384
  "collection": "contentcontributiontypes",
1385
- "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-lct57/smrt/smrt/packages/content/src/content-contribution-types.ts",
1385
+ "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/content/src/content-contribution-types.ts",
1386
1386
  "packageName": "@happyvertical/smrt-content",
1387
1387
  "fields": {},
1388
1388
  "methods": {
@@ -1462,7 +1462,7 @@
1462
1462
  "className": "ContentContribution",
1463
1463
  "qualifiedName": "@happyvertical/smrt-content:ContentContribution",
1464
1464
  "collection": "contentcontributions",
1465
- "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-lct57/smrt/smrt/packages/content/src/content-contribution.ts",
1465
+ "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/content/src/content-contribution.ts",
1466
1466
  "packageName": "@happyvertical/smrt-content",
1467
1467
  "fields": {
1468
1468
  "contributorId": {
@@ -1987,7 +1987,7 @@
1987
1987
  "className": "ContentContributions",
1988
1988
  "qualifiedName": "@happyvertical/smrt-content:ContentContributions",
1989
1989
  "collection": "contentcontributions",
1990
- "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-lct57/smrt/smrt/packages/content/src/content-contributions.ts",
1990
+ "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/content/src/content-contributions.ts",
1991
1991
  "packageName": "@happyvertical/smrt-content",
1992
1992
  "fields": {},
1993
1993
  "methods": {
@@ -2161,7 +2161,7 @@
2161
2161
  "className": "ContentContributor",
2162
2162
  "qualifiedName": "@happyvertical/smrt-content:ContentContributor",
2163
2163
  "collection": "contentcontributors",
2164
- "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-lct57/smrt/smrt/packages/content/src/content-contributor.ts",
2164
+ "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/content/src/content-contributor.ts",
2165
2165
  "packageName": "@happyvertical/smrt-content",
2166
2166
  "fields": {
2167
2167
  "profileId": {
@@ -2364,7 +2364,7 @@
2364
2364
  "className": "ContentContributorCollection",
2365
2365
  "qualifiedName": "@happyvertical/smrt-content:ContentContributorCollection",
2366
2366
  "collection": "contentcontributors",
2367
- "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-lct57/smrt/smrt/packages/content/src/content-contributors.ts",
2367
+ "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/content/src/content-contributors.ts",
2368
2368
  "packageName": "@happyvertical/smrt-content",
2369
2369
  "fields": {},
2370
2370
  "methods": {
@@ -2472,7 +2472,7 @@
2472
2472
  "className": "ContentCorrection",
2473
2473
  "qualifiedName": "@happyvertical/smrt-content:ContentCorrection",
2474
2474
  "collection": "contentcorrections",
2475
- "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-lct57/smrt/smrt/packages/content/src/content-correction.ts",
2475
+ "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/content/src/content-correction.ts",
2476
2476
  "packageName": "@happyvertical/smrt-content",
2477
2477
  "fields": {
2478
2478
  "contentId": {
@@ -2728,7 +2728,7 @@
2728
2728
  "className": "ContentCorrectionCollection",
2729
2729
  "qualifiedName": "@happyvertical/smrt-content:ContentCorrectionCollection",
2730
2730
  "collection": "contentcorrections",
2731
- "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-lct57/smrt/smrt/packages/content/src/content-corrections.ts",
2731
+ "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/content/src/content-corrections.ts",
2732
2732
  "packageName": "@happyvertical/smrt-content",
2733
2733
  "fields": {},
2734
2734
  "methods": {
@@ -2836,7 +2836,7 @@
2836
2836
  "className": "ContentFeedSource",
2837
2837
  "qualifiedName": "@happyvertical/smrt-content:ContentFeedSource",
2838
2838
  "collection": "contentfeedsources",
2839
- "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-lct57/smrt/smrt/packages/content/src/content-feed-source.ts",
2839
+ "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/content/src/content-feed-source.ts",
2840
2840
  "packageName": "@happyvertical/smrt-content",
2841
2841
  "fields": {
2842
2842
  "tenantId": {
@@ -3198,7 +3198,7 @@
3198
3198
  "className": "ContentFeedSourceCollection",
3199
3199
  "qualifiedName": "@happyvertical/smrt-content:ContentFeedSourceCollection",
3200
3200
  "collection": "contentfeedsources",
3201
- "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-lct57/smrt/smrt/packages/content/src/content-feed-sources.ts",
3201
+ "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/content/src/content-feed-sources.ts",
3202
3202
  "packageName": "@happyvertical/smrt-content",
3203
3203
  "fields": {},
3204
3204
  "methods": {
@@ -3316,7 +3316,7 @@
3316
3316
  "className": "ContentGovernanceAssignment",
3317
3317
  "qualifiedName": "@happyvertical/smrt-content:ContentGovernanceAssignment",
3318
3318
  "collection": "contentgovernanceassignments",
3319
- "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-lct57/smrt/smrt/packages/content/src/content-governance-assignment.ts",
3319
+ "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/content/src/content-governance-assignment.ts",
3320
3320
  "packageName": "@happyvertical/smrt-content",
3321
3321
  "fields": {
3322
3322
  "key": {
@@ -3610,7 +3610,7 @@
3610
3610
  "className": "ContentGovernanceAssignmentCollection",
3611
3611
  "qualifiedName": "@happyvertical/smrt-content:ContentGovernanceAssignmentCollection",
3612
3612
  "collection": "contentgovernanceassignments",
3613
- "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-lct57/smrt/smrt/packages/content/src/content-governance-assignments.ts",
3613
+ "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/content/src/content-governance-assignments.ts",
3614
3614
  "packageName": "@happyvertical/smrt-content",
3615
3615
  "fields": {},
3616
3616
  "methods": {
@@ -3704,7 +3704,7 @@
3704
3704
  "className": "ContentGovernancePolicyCollection",
3705
3705
  "qualifiedName": "@happyvertical/smrt-content:ContentGovernancePolicyCollection",
3706
3706
  "collection": "contentgovernancepolicies",
3707
- "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-lct57/smrt/smrt/packages/content/src/content-governance-policies.ts",
3707
+ "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/content/src/content-governance-policies.ts",
3708
3708
  "packageName": "@happyvertical/smrt-content",
3709
3709
  "fields": {},
3710
3710
  "methods": {
@@ -3784,7 +3784,7 @@
3784
3784
  "className": "ContentGovernancePolicy",
3785
3785
  "qualifiedName": "@happyvertical/smrt-content:ContentGovernancePolicy",
3786
3786
  "collection": "contentgovernancepolicies",
3787
- "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-lct57/smrt/smrt/packages/content/src/content-governance-policy.ts",
3787
+ "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/content/src/content-governance-policy.ts",
3788
3788
  "packageName": "@happyvertical/smrt-content",
3789
3789
  "fields": {
3790
3790
  "key": {
@@ -4003,7 +4003,7 @@
4003
4003
  "className": "ContentGovernanceProfile",
4004
4004
  "qualifiedName": "@happyvertical/smrt-content:ContentGovernanceProfile",
4005
4005
  "collection": "contentgovernanceprofiles",
4006
- "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-lct57/smrt/smrt/packages/content/src/content-governance-profile.ts",
4006
+ "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/content/src/content-governance-profile.ts",
4007
4007
  "packageName": "@happyvertical/smrt-content",
4008
4008
  "fields": {
4009
4009
  "key": {
@@ -4228,7 +4228,7 @@
4228
4228
  "className": "ContentGovernanceProfileCollection",
4229
4229
  "qualifiedName": "@happyvertical/smrt-content:ContentGovernanceProfileCollection",
4230
4230
  "collection": "contentgovernanceprofiles",
4231
- "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-lct57/smrt/smrt/packages/content/src/content-governance-profiles.ts",
4231
+ "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/content/src/content-governance-profiles.ts",
4232
4232
  "packageName": "@happyvertical/smrt-content",
4233
4233
  "fields": {},
4234
4234
  "methods": {
@@ -4308,7 +4308,7 @@
4308
4308
  "className": "ContentReference",
4309
4309
  "qualifiedName": "@happyvertical/smrt-content:ContentReference",
4310
4310
  "collection": "contentreferences",
4311
- "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-lct57/smrt/smrt/packages/content/src/content-reference.ts",
4311
+ "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/content/src/content-reference.ts",
4312
4312
  "packageName": "@happyvertical/smrt-content",
4313
4313
  "fields": {
4314
4314
  "tenantId": {
@@ -4460,7 +4460,7 @@
4460
4460
  "className": "ContentReferences",
4461
4461
  "qualifiedName": "@happyvertical/smrt-content:ContentReferences",
4462
4462
  "collection": "contentreferences",
4463
- "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-lct57/smrt/smrt/packages/content/src/content-references.ts",
4463
+ "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/content/src/content-references.ts",
4464
4464
  "packageName": "@happyvertical/smrt-content",
4465
4465
  "fields": {},
4466
4466
  "methods": {
@@ -4683,7 +4683,7 @@
4683
4683
  "className": "ContentReview",
4684
4684
  "qualifiedName": "@happyvertical/smrt-content:ContentReview",
4685
4685
  "collection": "contentreviews",
4686
- "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-lct57/smrt/smrt/packages/content/src/content-review.ts",
4686
+ "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/content/src/content-review.ts",
4687
4687
  "packageName": "@happyvertical/smrt-content",
4688
4688
  "fields": {
4689
4689
  "contentId": {
@@ -4916,7 +4916,7 @@
4916
4916
  "className": "ContentReviewCollection",
4917
4917
  "qualifiedName": "@happyvertical/smrt-content:ContentReviewCollection",
4918
4918
  "collection": "contentreviews",
4919
- "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-lct57/smrt/smrt/packages/content/src/content-reviews.ts",
4919
+ "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/content/src/content-reviews.ts",
4920
4920
  "packageName": "@happyvertical/smrt-content",
4921
4921
  "fields": {},
4922
4922
  "methods": {
@@ -5072,7 +5072,7 @@
5072
5072
  "className": "Article",
5073
5073
  "qualifiedName": "@happyvertical/smrt-content:Article",
5074
5074
  "collection": "contents",
5075
- "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-lct57/smrt/smrt/packages/content/src/content-types.ts",
5075
+ "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/content/src/content-types.ts",
5076
5076
  "packageName": "@happyvertical/smrt-content",
5077
5077
  "fields": {
5078
5078
  "created_at": {
@@ -6687,7 +6687,7 @@
6687
6687
  "className": "ContentDocument",
6688
6688
  "qualifiedName": "@happyvertical/smrt-content:ContentDocument",
6689
6689
  "collection": "contents",
6690
- "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-lct57/smrt/smrt/packages/content/src/content-types.ts",
6690
+ "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/content/src/content-types.ts",
6691
6691
  "packageName": "@happyvertical/smrt-content",
6692
6692
  "fields": {
6693
6693
  "created_at": {
@@ -8302,7 +8302,7 @@
8302
8302
  "className": "Mirror",
8303
8303
  "qualifiedName": "@happyvertical/smrt-content:Mirror",
8304
8304
  "collection": "contents",
8305
- "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-lct57/smrt/smrt/packages/content/src/content-types.ts",
8305
+ "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/content/src/content-types.ts",
8306
8306
  "packageName": "@happyvertical/smrt-content",
8307
8307
  "fields": {
8308
8308
  "created_at": {
@@ -9975,7 +9975,7 @@
9975
9975
  "className": "ContentVersion",
9976
9976
  "qualifiedName": "@happyvertical/smrt-content:ContentVersion",
9977
9977
  "collection": "contentversions",
9978
- "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-lct57/smrt/smrt/packages/content/src/content-version.ts",
9978
+ "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/content/src/content-version.ts",
9979
9979
  "packageName": "@happyvertical/smrt-content",
9980
9980
  "fields": {
9981
9981
  "contentId": {
@@ -10245,7 +10245,7 @@
10245
10245
  "className": "ContentVersionCollection",
10246
10246
  "qualifiedName": "@happyvertical/smrt-content:ContentVersionCollection",
10247
10247
  "collection": "contentversions",
10248
- "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-lct57/smrt/smrt/packages/content/src/content-versions.ts",
10248
+ "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/content/src/content-versions.ts",
10249
10249
  "packageName": "@happyvertical/smrt-content",
10250
10250
  "fields": {},
10251
10251
  "methods": {
@@ -10424,7 +10424,7 @@
10424
10424
  "className": "Content",
10425
10425
  "qualifiedName": "@happyvertical/smrt-content:Content",
10426
10426
  "collection": "contents",
10427
- "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-lct57/smrt/smrt/packages/content/src/content.ts",
10427
+ "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/content/src/content.ts",
10428
10428
  "packageName": "@happyvertical/smrt-content",
10429
10429
  "fields": {
10430
10430
  "created_at": {
@@ -12186,7 +12186,7 @@
12186
12186
  "className": "Contents",
12187
12187
  "qualifiedName": "@happyvertical/smrt-content:Contents",
12188
12188
  "collection": "contents",
12189
- "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-lct57/smrt/smrt/packages/content/src/contents.ts",
12189
+ "filePath": "/home/runner/.local/share/pnpm/store/.workspaces/arc-happyvertical-node-8l5wt-runner-ks2xb/smrt/smrt/packages/content/src/contents.ts",
12190
12190
  "packageName": "@happyvertical/smrt-content",
12191
12191
  "fields": {
12192
12192
  "contentDir": {
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "generatedAt": "2026-07-13T17:25:19.473Z",
3
+ "generatedAt": "2026-07-14T00:03:04.591Z",
4
4
  "packageName": "@happyvertical/smrt-content",
5
- "packageVersion": "0.39.11",
5
+ "packageVersion": "0.39.13",
6
6
  "sourceManifestPath": "dist/manifest.json",
7
7
  "agentDocPath": "AGENTS.md",
8
8
  "sourceHashes": {
9
- "manifest": "5998486d05964591cfdcb162e59596ddc28eb960bb675b6ee1a7bcf307b18f3e",
10
- "packageJson": "a1534b2d0ca87e797639a28f18c37e81e2218a4e17763a7ae7ed47d46ab575a8",
11
- "agents": "d3e1fdba8cf8c8f393e682616c56fefcc789c44018407bbdf7332d5f06cfbb5c"
9
+ "manifest": "e00115445c8134aeeab0a5a5739e6a89a3104be8c7cd501555f1dc6d326a2aa5",
10
+ "packageJson": "07afc5498b7fd97788f91739310f4f75e1ba7bd6c2e4da6e78e98fcdba164be0",
11
+ "agents": "d0ec4d98a72a9a5167543515924e6b3c54a939597623858c9fa51e2678a47870"
12
12
  },
13
13
  "exports": [
14
14
  ".",
@@ -6138,5 +6138,5 @@
6138
6138
  "polymorphicAssociations": 0,
6139
6139
  "uuidColumns": 77
6140
6140
  },
6141
- "agentDoc": "# @happyvertical/smrt-content\n\nSTI content management with governance workflows, contribution intake, AI reviews, fact-checking, corrections, versioning, transparency reports, and thumbnail generation.\n\n## Models\n\n- **Content** (STI base): `type`, `variant` (generator:domain:specific format), `status` (published/draft/review/archived/deleted), `state`, `category` (hierarchical path with `/` separator), `metadata` JSON, `tags` array, `thumbnailAssetId`\n- **Article**, **ContentDocument**, **Mirror**: STI subclasses — all share `contents` table via `_meta_type`\n- **ContentReview**: AI review result tied to a governance policy. Fields: `contentId`, `policyKey`, `kind`, `status` (accepted/flagged/rejected), `findings`, `fingerprint`, `metadata`\n- **ContentCorrection**: Post-publication change record. Fields: `contentId`, `type` (correction/retraction/update/clarification), `summary`, `note`, `status`, `metadata`\n- **ContentVersion**: Content snapshot. Fields: `contentId`, `kind` (publication/manual), `versionNumber`, `summary`, `metadata` (includes `transparency` for publication versions)\n- **ContentReference**: Junction model for content-to-content links (`content_references` table). Nullable `targetVersion` pins a citation to a specific `ContentVersion.version` for drift detection.\n- **ContentGovernancePolicy**: Persisted review policy (key, label, kind, instructions)\n- **ContentGovernanceProfile**: Persisted review profile (key, label, requirements array)\n- **ContentGovernanceAssignment**: Governs content type/variant → profile mapping, feature flags\n- **ContentContribution**: Held inbound submission with status lifecycle (submitted → approved/rejected/withdrawn → promoted)\n- **ContentContributor**: Contributor profile resolved by email, with trust level (standard/trusted/blocked)\n- **ContentContributionType**: Configures intake channels, rules, and promotion mapping\n- **ContentContributionRevision**: Revision history for held submissions\n- **ContentContributionAttachment**: Held file metadata; becomes an `Asset` on promotion\n\n## Contents Collection\n\n| Method | Purpose |\n|--------|---------| \n| `mirror({ url })` | Downloads URL content, extracts text, creates `type: 'mirror'`. Idempotent. |\n| `syncContentDir({ contentDir })` | Batch exports articles as markdown with YAML frontmatter |\n| `generateMissingThumbnails(options)` | Bulk thumbnail generation for content missing `thumbnailAssetId` |\n| `findWithGlobals(tenantId)` | Returns tenant-specific + global (tenantId=null) content |\n| `getOrUpsert({ slug, context })` | Upsert by slug+context combination |\n| `browseFacts()` | Browse fact catalog linked to content |\n| `getGovernanceDefinitionsAction()` | Get all governance policy/profile/assignment definitions |\n| `resolveGovernanceAction({ type, variant })` | Resolve effective governance for a content type |\n\n## Content Instance Methods\n\n| Method | Purpose |\n|--------|---------|\n| `resolveGovernance()` | Resolve effective governance config for this content |\n| `runReviewAction(options)` | Run AI review against a policy; returns `ContentReview` |\n| `listReviews()` | List all reviews for this content |\n| `listReviewProfilesAction()` | Get readiness for all profiles |\n| `evaluateReviewProfile(key)` | Evaluate one profile's requirements |\n| `issueCorrectionAction(options)` | Issue a post-publication correction |\n| `listCorrections()` | List corrections for this content |\n| `listVersions()` | List version history |\n| `mutateVersionAction(options)` | Create a version snapshot |\n| `getPublishedTransparencyAction()` | Get frozen transparency from latest publication version |\n| `previewTransparencyAction()` | Preview live transparency state |\n| `addFact(factId, relationship)` | Link a fact (supports/contradicts/referenced_in) |\n| `getFacts(options)` | Get linked facts |\n| `getFactLinks()` | Get fact-content link records |\n| `getFactsState()` / `syncFactsState(options)` | API-level facts get/sync |\n| `addAsset(asset, relationship, sortOrder)` | Add asset association |\n| `setThumbnail(image)` | Convenience: adds asset + updates `thumbnailAssetId` |\n| `addReference(content, options?)` | Link to another content; `options.targetVersion` pins citation-time `ContentVersion.version` |\n| `getReferences()` | Get content references |\n| `getReferenceDrift()` | Per-edge `{ citedVersion, currentVersion, isDrifted }` for drift detection |\n\n## Governance Workflow\n\n1. `configureContentGovernance({ policies, profiles, assignments })` — static config\n2. Or persist `ContentGovernancePolicy/Profile/Assignment` objects — DB overrides static\n3. Effective config: DB layer merges over static defaults\n4. `content.resolveGovernance()` → `ResolvedContentGovernance` with `isGoverned`, `reviewPolicies`, profile keys, feature flags\n5. `content.runReviewAction()` creates a `ContentReview` with fingerprint for staleness detection\n6. `content.evaluateReviewProfile(key)` checks all requirements\n7. `content.save()` auto-validates publish readiness when `enforcePublishReadiness` is true\n8. Publication auto-creates a `ContentVersion` with frozen transparency data\n\n## Thumbnail Generation\n\nThree strategies via ThumbnailGenerator:\n- **headline-card**: title on branded background (via `@happyvertical/images`)\n- **static-map**: requires `metadata.latitude`/`longitude` (via `@happyvertical/geo`)\n- **ai-generate**: AI image generation (dynamic import of `@happyvertical/ai`)\n\n## Svelte Components\n\n### Content Management\n`ContentList`, `ContentEditor`, `GovernedContentEditor`, `ContentAgentChat`, `ContentTitleField`, `ContentStatusFields`, `ContentMetadataFields`, `ContentReferencesPanel`, `ContentImageBrowser`, `ContentReviewStatusTray`, `ArticleCard`, `ArticleList`, `ImageThumbnail`, `Markdown`\n\n### Governance\n`ContentGovernanceManager`, `ContentGovernancePanel`, `ContentGovernancePolicyEditor`, `ContentGovernanceProfileEditor`, `ContentGovernanceAssignmentEditor`, `ContentTransparencyReport`\n\n### Contributions\n`ContentContributionForm`, `ContentContributionInbox`, `ContentContributionPortal`, `ContentContributionTypeManager`, `ContentContributorManager`\n\n## Dev Server\n\n`npm run dev` starts SvelteKit at `localhost:5173` with 4 pages:\n\n- `/` — Content catalog (CRUD, search, filters, card/list views)\n- `/governance` — Policy/profile/assignment management\n- `/contributions` — Inbox, submit form, contributor/type management\n- `/api-explorer` — Browse 69 endpoints with try-it-live for GET\n\nOn startup, `hooks.server.ts` bootstraps schemas for all 13 local classes,\nloads cross-package manifests, and seeds 3 sample content items.\n\n## Chat Integration\n\nContent `GET/POST /api/v1/contents/{id}/chat` endpoint creates\nchat sessions via `@happyvertical/smrt-chat`. Gracefully handles\nmissing chat tables (returns `session: null` with notice).\n`ContentAgentChat` Svelte component provides the UI.\n\nFor global assistant shells, `ContentEditor` and `GovernedContentEditor`\nsupport `onAssistantContextChange`. The callback receives a serializable\n`ContentEditorAssistantContext` plus local editor actions, and still fires when\n`hideChat={true}`. `ContentAgentChat` can be mounted outside the editor with an\n`assistantContext` prop. Server-side consumers can reuse the exported\n`getOrCreateContentEditorChatSession`, `createContentEditorChatThread`,\n`listContentEditorChatThreadMessages`, and\n`sendContentEditorChatThreadMessage` helpers for app-specific tenancy/auth/AI\nroute wiring.\n\nThese handlers go exclusively through the tenant-bound `ChatService` facade\n(S5 #1392) — `getAgentSession`/`findActiveAgentSessions`/`getThread`/\n`listRoomThreads`/`getThreadMessages` for reads and `startThread`/`sendMessage`/\n`sendAgentReply` (internal agent-runtime subpath) for writes. They never reach\ninto the now-`#private` chat collections, so cross-tenant chat state can no\nlonger be selected by raw id before authorization.\n\nThe content-editor session is created with a content-scoped `sessionKey`\n(`contentChatSessionKey(contentId)` → `content:<id>`, S5 #1392). Without it,\n`createAgentSession` reuses ANY active `content_editor` session for the same\nprofile/tenant, so a request about a new content id would reuse — and the\nhandler would rewrite — a session created for a different content and return the\nother content's room/threads. Keying on the content id makes each content get a\ndistinct session/room.\n\n## Relationship Models\n\n- **ContentReference**: SMRT junction model backing `content_references` for content-to-content links\n- **ContentAsset**: dedicated SMRT junction model backing `content_assets` for content-owned asset links\n\n```typescript\nawait content.addAsset(image, 'thumbnail', 0); // relationship, sortOrder\nawait content.getAssets('attachment');\nawait content.setThumbnail(image); // convenience: adds asset + updates thumbnailAssetId\nawait content.addReference(otherContent); // unpinned\nawait content.addReference(otherContent, { targetVersion: 2 }); // pinned to v2\nawait content.getReferences();\nawait content.getReferenceDrift(); // → [{ targetId, citedVersion, currentVersion, isDrifted }, ...]\n```\n\n## API Contracts\n\n`Content` implements `AssetAssociable` and `MetadataAccessor` (issue #1162). Consumers can type their parameters as `Content` (or the interfaces directly) and rely on the methods existing without `typeof === 'function'` defensive checks:\n\n```typescript\nimport type { AssetAssociable, MetadataAccessor } from '@happyvertical/smrt-content';\n\nasync function attachThumbnail(doc: AssetAssociable, asset: Asset) {\n await doc.addAsset(asset, 'thumbnail', 0); // contract guaranteed\n}\n\nfunction bumpRevision(doc: MetadataAccessor) {\n const meta = doc.getMetadata();\n doc.updateMetadata({ revision: (meta.revision ?? 0) + 1 });\n}\n```\n\n## Category Navigation\n\n`getCategorySegments()`, `getParentCategory()`, `getRootCategory()`, `getAncestorPaths()`, `isInCategory(path, includeChildren?)`\n\n## Prompt Registry\n\nContent prompts are registered with `@happyvertical/smrt-prompts` so tenants can override template/profile/model/params at runtime:\n\n```typescript\nimport {\n smrtContentReviewPrompt, // key: 'smrtContent.review'\n smrtContentApplyCorrectionPrompt, // key: 'smrtContent.applyCorrection'\n smrtContentThumbnailAIGeneratePrompt, // key: 'smrtContent.thumbnail.aiGenerate'\n} from '@happyvertical/smrt-content';\n```\n\n`smrtContent.thumbnail.aiGenerate` powers the AI image-generation prompt used by `ThumbnailGenerator` (strategy `'ai-generate'`). Variables substituted into the template: `style`, `title`, `styleHint`, `descriptionClause`. Internal foreign-key fields (`id`, `tenantId`) and the freeform `metadata` blob are intentionally excluded — `metadata` may carry tenant-private configuration or coordinates unrelated to the visual prompt.\n\n## Gotchas\n\n- **STI discriminator**: qualified names like `@happyvertical/smrt-content:Article`\n- **Optional tenancy**: `@TenantScoped({ mode: 'optional' })` — null tenantId = global content\n- **Metadata is primary extension pattern**: use JSON `metadata` field, not additional class fields\n- **Static map coordinates**: uses unary `+` for strict parsing (rejects \"45invalid\" unlike parseFloat)\n- **Review fingerprints**: reviews track content state at review time; stale reviews are detected by fingerprint mismatch\n- **Publish readiness enforcement**: `save()` throws `ValidationError` if blocking requirements aren't met when setting status to `'published'`\n- **Transparency snapshots**: published transparency is frozen into `ContentVersion.metadata.transparency` — use published for public display, preview for editors\n- **Reference pinning**: `ContentReference` is keyed on `(source_id, target_id)`; `targetVersion` is an attribute of the edge, not part of identity. Re-calling `addReference(target, { targetVersion })` updates the pin in place. Unpinned references (`targetVersion: null`) report `isDrifted: false` regardless of how stale the target is — pin them only when you want drift to be detectable.\n- **Chat tables**: chat endpoint requires `@happyvertical/smrt-chat` tables; dev server handles missing tables gracefully\n- **Dev server bootstraps all classes**: `hooks.server.ts` generates schemas for all 13 local `@smrt()` classes plus cross-package manifests\n"
6141
+ "agentDoc": "# @happyvertical/smrt-content\n\nSTI content management with governance workflows, contribution intake, AI reviews, fact-checking, corrections, versioning, transparency reports, and thumbnail generation.\n\n## Models\n\n- **Content** (STI base): `type`, `variant` (generator:domain:specific format), `status` (published/draft/review/archived/deleted), `state`, `category` (hierarchical path with `/` separator), `metadata` JSON, `tags` array, `thumbnailAssetId`\n- **Article**, **ContentDocument**, **Mirror**: STI subclasses — all share `contents` table via `_meta_type`\n- **ContentReview**: AI review result tied to a governance policy. Fields: `contentId`, `policyKey`, `kind`, `status` (accepted/flagged/rejected), `findings`, `fingerprint`, `metadata`\n- **ContentCorrection**: Post-publication change record. Fields: `contentId`, `type` (correction/retraction/update/clarification), `summary`, `note`, `status`, `metadata`\n- **ContentVersion**: Content snapshot. Fields: `contentId`, `kind` (manual/draft/review/publication/correction/auto-generated), `versionNumber`, `summary`, `metadata` (includes `transparency` for publication versions)\n- **ContentReference**: Junction model for content-to-content links (`content_references` table). Nullable `targetVersion` pins a citation to a specific `ContentVersion.version` for drift detection.\n- **ContentGovernancePolicy**: Persisted review policy (key, label, kind, instructions)\n- **ContentGovernanceProfile**: Persisted review profile (key, label, requirements array)\n- **ContentGovernanceAssignment**: Governs content type/variant → profile mapping, feature flags\n- **ContentContribution**: Held inbound submission with status lifecycle (submitted → approved/rejected/withdrawn → promoted)\n- **ContentContributor**: Contributor profile resolved by email, with trust level (standard/trusted/blocked)\n- **ContentContributionType**: Configures intake channels, rules, and promotion mapping\n- **ContentContributionRevision**: Revision history for held submissions\n- **ContentContributionAttachment**: Held file metadata; becomes an `Asset` on promotion\n\n## Contents Collection\n\n| Method | Purpose |\n|--------|---------| \n| `mirror({ url })` | Downloads URL content, extracts text, creates `type: 'mirror'`. Idempotent. |\n| `syncContentDir({ contentDir })` | Batch exports articles as markdown with YAML frontmatter |\n| `generateMissingThumbnails(options)` | Bulk thumbnail generation for content missing `thumbnailAssetId` |\n| `findWithGlobals(tenantId)` | Returns tenant-specific + global (tenantId=null) content |\n| `getOrUpsert({ slug, context })` | Upsert by slug+context combination |\n| `browseFacts()` | Browse fact catalog linked to content |\n| `getGovernanceDefinitionsAction()` | Get all governance policy/profile/assignment definitions |\n| `resolveGovernanceAction({ type, variant })` | Resolve effective governance for a content type |\n\n## Content Instance Methods\n\n| Method | Purpose |\n|--------|---------|\n| `resolveGovernance()` | Resolve effective governance config for this content |\n| `runReviewAction(options)` | Run AI review against a policy; returns `ContentReview` |\n| `listReviews()` | List all reviews for this content |\n| `listReviewProfilesAction()` | Get readiness for all profiles |\n| `evaluateReviewProfile(key)` | Evaluate one profile's requirements |\n| `issueCorrectionAction(options)` | Issue a post-publication correction |\n| `listCorrections()` | List corrections for this content |\n| `listVersions()` | List version history |\n| `mutateVersionAction(options)` | Create a version snapshot |\n| `getPublishedTransparencyAction()` | Get frozen transparency from latest publication version |\n| `previewTransparencyAction()` | Preview live transparency state |\n| `addFact(factId, relationship)` | Link a fact (supports/contradicts/referenced_in) |\n| `getFacts(options)` | Get linked facts |\n| `getFactLinks()` | Get fact-content link records |\n| `getFactsState()` / `syncFactsState(options)` | API-level facts get/sync |\n| `addAsset(asset, relationship, sortOrder)` | Add asset association |\n| `setThumbnail(image)` | Convenience: adds asset + updates `thumbnailAssetId` |\n| `addReference(content, options?)` | Link to another content; `options.targetVersion` pins citation-time `ContentVersion.version` |\n| `getReferences()` | Get content references |\n| `getReferenceDrift()` | Per-edge `{ citedVersion, currentVersion, isDrifted }` for drift detection |\n\n## Governance Workflow\n\n1. `configureContentGovernance({ policies, profiles, assignments })` — static config\n2. Or persist `ContentGovernancePolicy/Profile/Assignment` objects — DB overrides static\n3. Effective config: DB layer merges over static defaults\n4. `content.resolveGovernance()` → `ResolvedContentGovernance` with `isGoverned`, `reviewPolicies`, profile keys, feature flags\n5. `content.runReviewAction()` creates a `ContentReview` with fingerprint for staleness detection\n6. `content.evaluateReviewProfile(key)` checks all requirements\n7. `content.save()` auto-validates publish readiness when `enforcePublishReadiness` is true\n8. Publication auto-creates a `ContentVersion` with frozen transparency data\n\n## Thumbnail Generation\n\nThree strategies via ThumbnailGenerator:\n- **headline-card**: title on branded background (via `@happyvertical/images`)\n- **static-map**: requires `metadata.latitude`/`longitude` (via `@happyvertical/geo`)\n- **ai-generate**: AI image generation (dynamic import of `@happyvertical/ai`)\n\n## Svelte Components\n\n### Content Management\n`ContentList`, `ContentEditor`, `GovernedContentEditor`, `ContentAgentChat`, `ContentTitleField`, `ContentStatusFields`, `ContentMetadataFields`, `ContentReferencesPanel`, `ContentImageBrowser`, `ContentReviewStatusTray`, `ArticleCard`, `ArticleList`, `ImageThumbnail`, `Markdown`\n\n### Governance\n`ContentGovernanceManager`, `ContentGovernancePanel`, `ContentGovernancePolicyEditor`, `ContentGovernanceProfileEditor`, `ContentGovernanceAssignmentEditor`, `ContentTransparencyReport`\n\n### Contributions\n`ContentContributionForm`, `ContentContributionInbox`, `ContentContributionPortal`, `ContentContributionTypeManager`, `ContentContributorManager`\n\n## Dev Server\n\n`npm run dev` starts SvelteKit at `localhost:5173` with 4 pages:\n\n- `/` — Content catalog (CRUD, search, filters, card/list views)\n- `/governance` — Policy/profile/assignment management\n- `/contributions` — Inbox, submit form, contributor/type management\n- `/api-explorer` — Browse 69 endpoints with try-it-live for GET\n\nOn startup, `hooks.server.ts` bootstraps schemas for all 13 local classes,\nloads cross-package manifests, and seeds 3 sample content items.\n\n## Chat Integration\n\nContent `GET/POST /api/v1/contents/{id}/chat` endpoint creates\nchat sessions via `@happyvertical/smrt-chat`. Gracefully handles\nmissing chat tables (returns `session: null` with notice).\n`ContentAgentChat` Svelte component provides the UI.\n\nFor global assistant shells, `ContentEditor` and `GovernedContentEditor`\nsupport `onAssistantContextChange`. The callback receives a serializable\n`ContentEditorAssistantContext` plus local editor actions, and still fires when\n`hideChat={true}`. `ContentAgentChat` can be mounted outside the editor with an\n`assistantContext` prop. Server-side consumers can reuse the exported\n`getOrCreateContentEditorChatSession`, `createContentEditorChatThread`,\n`listContentEditorChatThreadMessages`, and\n`sendContentEditorChatThreadMessage` helpers for app-specific tenancy/auth/AI\nroute wiring.\n\nThese handlers go exclusively through the tenant-bound `ChatService` facade\n(S5 #1392) — `getAgentSession`/`findActiveAgentSessions`/`getThread`/\n`listRoomThreads`/`getThreadMessages` for reads and `startThread`/`sendMessage`/\n`sendAgentReply` (internal agent-runtime subpath) for writes. They never reach\ninto the now-`#private` chat collections, so cross-tenant chat state can no\nlonger be selected by raw id before authorization.\n\nThe content-editor session is created with a content-scoped `sessionKey`\n(`contentChatSessionKey(contentId)` → `content:<id>`, S5 #1392). Without it,\n`createAgentSession` reuses ANY active `content_editor` session for the same\nprofile/tenant, so a request about a new content id would reuse — and the\nhandler would rewrite — a session created for a different content and return the\nother content's room/threads. Keying on the content id makes each content get a\ndistinct session/room.\n\n## Relationship Models\n\n- **ContentReference**: SMRT junction model backing `content_references` for content-to-content links\n- **ContentAsset**: dedicated SMRT junction model backing `content_assets` for content-owned asset links\n\n```typescript\nawait content.addAsset(image, 'thumbnail', 0); // relationship, sortOrder\nawait content.getAssets('attachment');\nawait content.setThumbnail(image); // convenience: adds asset + updates thumbnailAssetId\nawait content.addReference(otherContent); // unpinned\nawait content.addReference(otherContent, { targetVersion: 2 }); // pinned to v2\nawait content.getReferences();\nawait content.getReferenceDrift(); // → [{ targetId, citedVersion, currentVersion, isDrifted }, ...]\n```\n\n## API Contracts\n\n`Content` implements `AssetAssociable` and `MetadataAccessor` (issue #1162). Consumers can type their parameters as `Content` (or the interfaces directly) and rely on the methods existing without `typeof === 'function'` defensive checks:\n\n```typescript\nimport type { AssetAssociable, MetadataAccessor } from '@happyvertical/smrt-content';\n\nasync function attachThumbnail(doc: AssetAssociable, asset: Asset) {\n await doc.addAsset(asset, 'thumbnail', 0); // contract guaranteed\n}\n\nfunction bumpRevision(doc: MetadataAccessor) {\n const meta = doc.getMetadata();\n doc.updateMetadata({ revision: (meta.revision ?? 0) + 1 });\n}\n```\n\n## Category Navigation\n\n`getCategorySegments()`, `getParentCategory()`, `getRootCategory()`, `getAncestorPaths()`, `isInCategory(path, includeChildren?)`\n\n## Prompt Registry\n\nContent prompts are registered with `@happyvertical/smrt-prompts` so tenants can override template/profile/model/params at runtime:\n\n```typescript\nimport {\n smrtContentReviewPrompt, // key: 'smrtContent.review'\n smrtContentApplyCorrectionPrompt, // key: 'smrtContent.applyCorrection'\n smrtContentThumbnailAIGeneratePrompt, // key: 'smrtContent.thumbnail.aiGenerate'\n} from '@happyvertical/smrt-content';\n```\n\n`smrtContent.thumbnail.aiGenerate` powers the AI image-generation prompt used by `ThumbnailGenerator` (strategy `'ai-generate'`). Variables substituted into the template: `style`, `title`, `styleHint`, `descriptionClause`. Internal foreign-key fields (`id`, `tenantId`) and the freeform `metadata` blob are intentionally excluded — `metadata` may carry tenant-private configuration or coordinates unrelated to the visual prompt.\n\n## Gotchas\n\n- **STI discriminator**: qualified names like `@happyvertical/smrt-content:Article`\n- **Optional tenancy**: `@TenantScoped({ mode: 'optional' })` — null tenantId = global content\n- **Metadata is primary extension pattern**: use JSON `metadata` field, not additional class fields\n- **Static map coordinates**: uses unary `+` for strict parsing (rejects \"45invalid\" unlike parseFloat)\n- **Review fingerprints**: reviews track content state at review time; stale reviews are detected by fingerprint mismatch\n- **Publish readiness enforcement**: `save()` throws `ValidationError` if blocking requirements aren't met when setting status to `'published'`\n- **Transparency snapshots**: published transparency is frozen into `ContentVersion.metadata.transparency` — use published for public display, preview for editors\n- **Reference pinning**: `ContentReference` is keyed on `(source_id, target_id)`; `targetVersion` is an attribute of the edge, not part of identity. Re-calling `addReference(target, { targetVersion })` updates the pin in place. Unpinned references (`targetVersion: null`) report `isDrifted: false` regardless of how stale the target is — pin them only when you want drift to be detectable.\n- **Chat tables**: chat endpoint requires `@happyvertical/smrt-chat` tables; dev server handles missing tables gracefully\n- **Dev server bootstraps all classes**: `hooks.server.ts` generates schemas for all 13 local `@smrt()` classes plus cross-package manifests\n"
6142
6142
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@happyvertical/smrt-content",
3
- "version": "0.39.11",
3
+ "version": "0.39.13",
4
4
  "description": "Content processing module for SMRT framework - handles documents, web content, and media",
5
5
  "type": "module",
6
6
  "smrtRawPrimitives": "strict",
@@ -50,17 +50,17 @@
50
50
  "@happyvertical/utils": "^0.78.1",
51
51
  "fast-xml-parser": "^5.9.3",
52
52
  "yaml": "^2.9.0",
53
- "@happyvertical/smrt-assets": "0.39.11",
54
- "@happyvertical/smrt-images": "0.39.11",
55
- "@happyvertical/smrt-chat": "0.39.11",
56
- "@happyvertical/smrt-messages": "0.39.11",
57
- "@happyvertical/smrt-core": "0.39.11",
58
- "@happyvertical/smrt-facts": "0.39.11",
59
- "@happyvertical/smrt-prompts": "0.39.11",
60
- "@happyvertical/smrt-profiles": "0.39.11",
61
- "@happyvertical/smrt-types": "0.39.11",
62
- "@happyvertical/smrt-tenancy": "0.39.11",
63
- "@happyvertical/smrt-ui": "0.39.11"
53
+ "@happyvertical/smrt-assets": "0.39.13",
54
+ "@happyvertical/smrt-chat": "0.39.13",
55
+ "@happyvertical/smrt-facts": "0.39.13",
56
+ "@happyvertical/smrt-core": "0.39.13",
57
+ "@happyvertical/smrt-images": "0.39.13",
58
+ "@happyvertical/smrt-messages": "0.39.13",
59
+ "@happyvertical/smrt-prompts": "0.39.13",
60
+ "@happyvertical/smrt-profiles": "0.39.13",
61
+ "@happyvertical/smrt-tenancy": "0.39.13",
62
+ "@happyvertical/smrt-types": "0.39.13",
63
+ "@happyvertical/smrt-ui": "0.39.13"
64
64
  },
65
65
  "peerDependencies": {
66
66
  "svelte": "^5.56.4"
@@ -81,8 +81,8 @@
81
81
  "typescript": "^5.9.3",
82
82
  "vite": "^8.1.3",
83
83
  "vitest": "^4.1.9",
84
- "@happyvertical/smrt-playground": "0.39.11",
85
- "@happyvertical/smrt-vitest": "0.39.11"
84
+ "@happyvertical/smrt-playground": "0.39.13",
85
+ "@happyvertical/smrt-vitest": "0.39.13"
86
86
  },
87
87
  "keywords": [
88
88
  "ai",