@agent-native/creative-context 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/README.md +51 -9
  2. package/agent-native.package.json +4 -0
  3. package/dist/actions/index.d.ts.map +1 -1
  4. package/dist/actions/index.js +8 -0
  5. package/dist/actions/index.js.map +1 -1
  6. package/dist/actions/list-context-memberships.d.ts +11 -0
  7. package/dist/actions/list-context-memberships.d.ts.map +1 -0
  8. package/dist/actions/list-context-memberships.js +47 -0
  9. package/dist/actions/list-context-memberships.js.map +1 -0
  10. package/dist/actions/list-creative-contexts.d.ts +12 -0
  11. package/dist/actions/list-creative-contexts.d.ts.map +1 -0
  12. package/dist/actions/list-creative-contexts.js +28 -0
  13. package/dist/actions/list-creative-contexts.js.map +1 -0
  14. package/dist/actions/manage-context-membership.d.ts +64 -0
  15. package/dist/actions/manage-context-membership.d.ts.map +1 -0
  16. package/dist/actions/manage-context-membership.js +70 -0
  17. package/dist/actions/manage-context-membership.js.map +1 -0
  18. package/dist/actions/manage-context-pack.d.ts +3 -0
  19. package/dist/actions/manage-context-pack.js +6 -0
  20. package/dist/actions/manage-context-pack.js.map +1 -1
  21. package/dist/actions/manage-context-source.js +4 -11
  22. package/dist/actions/manage-context-source.js.map +1 -1
  23. package/dist/actions/manage-creative-context.d.ts +28 -0
  24. package/dist/actions/manage-creative-context.d.ts.map +1 -0
  25. package/dist/actions/manage-creative-context.js +65 -0
  26. package/dist/actions/manage-creative-context.js.map +1 -0
  27. package/dist/actions/process-context-purge.d.ts +16 -1
  28. package/dist/actions/process-context-purge.js +2 -1
  29. package/dist/actions/process-context-purge.js.map +1 -1
  30. package/dist/actions/search-creative-context.d.ts +1 -0
  31. package/dist/actions/search-creative-context.js +2 -1
  32. package/dist/actions/search-creative-context.js.map +1 -1
  33. package/dist/client/CreativeContextChip.d.ts +5 -1
  34. package/dist/client/CreativeContextChip.d.ts.map +1 -1
  35. package/dist/client/CreativeContextChip.js +36 -7
  36. package/dist/client/CreativeContextChip.js.map +1 -1
  37. package/dist/client/CreativeContextPanel.d.ts.map +1 -1
  38. package/dist/client/CreativeContextPanel.js +406 -89
  39. package/dist/client/CreativeContextPanel.js.map +1 -1
  40. package/dist/client/CreativeContextShareTab.d.ts +56 -0
  41. package/dist/client/CreativeContextShareTab.d.ts.map +1 -0
  42. package/dist/client/CreativeContextShareTab.js +213 -0
  43. package/dist/client/CreativeContextShareTab.js.map +1 -0
  44. package/dist/client/actions.d.ts +210 -0
  45. package/dist/client/actions.d.ts.map +1 -1
  46. package/dist/client/actions.js +318 -0
  47. package/dist/client/actions.js.map +1 -1
  48. package/dist/client/application-state.d.ts +2 -0
  49. package/dist/client/application-state.d.ts.map +1 -1
  50. package/dist/client/application-state.js +25 -2
  51. package/dist/client/application-state.js.map +1 -1
  52. package/dist/client/index.d.ts +4 -3
  53. package/dist/client/index.d.ts.map +1 -1
  54. package/dist/client/index.js +4 -3
  55. package/dist/client/index.js.map +1 -1
  56. package/dist/client/messages.d.ts +1 -1
  57. package/dist/client/messages.d.ts.map +1 -1
  58. package/dist/client/messages.js +77 -0
  59. package/dist/client/messages.js.map +1 -1
  60. package/dist/connectors/types.d.ts +2 -2
  61. package/dist/connectors/types.d.ts.map +1 -1
  62. package/dist/schema/index.d.ts +1592 -0
  63. package/dist/schema/index.d.ts.map +1 -1
  64. package/dist/schema/index.js +95 -0
  65. package/dist/schema/index.js.map +1 -1
  66. package/dist/schema/migrations.d.ts.map +1 -1
  67. package/dist/schema/migrations.js +80 -0
  68. package/dist/schema/migrations.js.map +1 -1
  69. package/dist/server/generation-artifact-access.js +2 -0
  70. package/dist/server/generation-artifact-access.js.map +1 -1
  71. package/dist/server/generation-context.d.ts +12 -4
  72. package/dist/server/generation-context.d.ts.map +1 -1
  73. package/dist/server/generation-context.js +129 -7
  74. package/dist/server/generation-context.js.map +1 -1
  75. package/dist/server/index.d.ts +4 -0
  76. package/dist/server/index.d.ts.map +1 -1
  77. package/dist/server/index.js +16 -0
  78. package/dist/server/index.js.map +1 -1
  79. package/dist/server/isolated-a2a.d.ts +3 -0
  80. package/dist/server/isolated-a2a.d.ts.map +1 -1
  81. package/dist/server/isolated-a2a.js +3 -1
  82. package/dist/server/isolated-a2a.js.map +1 -1
  83. package/dist/server/media.d.ts +1 -1
  84. package/dist/server/media.d.ts.map +1 -1
  85. package/dist/server/media.js +24 -9
  86. package/dist/server/media.js.map +1 -1
  87. package/dist/server/native-resource-capture.d.ts +78 -0
  88. package/dist/server/native-resource-capture.d.ts.map +1 -0
  89. package/dist/server/native-resource-capture.js +94 -0
  90. package/dist/server/native-resource-capture.js.map +1 -0
  91. package/dist/server/public-serialization.js +1 -1
  92. package/dist/server/public-serialization.js.map +1 -1
  93. package/dist/server/retrieval.d.ts +1 -0
  94. package/dist/server/retrieval.d.ts.map +1 -1
  95. package/dist/server/retrieval.js +2 -0
  96. package/dist/server/retrieval.js.map +1 -1
  97. package/dist/server/safe-native-preview.d.ts +15 -0
  98. package/dist/server/safe-native-preview.d.ts.map +1 -0
  99. package/dist/server/safe-native-preview.js +149 -0
  100. package/dist/server/safe-native-preview.js.map +1 -0
  101. package/dist/store/brand.d.ts.map +1 -1
  102. package/dist/store/brand.js +2 -16
  103. package/dist/store/brand.js.map +1 -1
  104. package/dist/store/content.d.ts +1 -0
  105. package/dist/store/content.d.ts.map +1 -1
  106. package/dist/store/content.js +84 -20
  107. package/dist/store/content.js.map +1 -1
  108. package/dist/store/contexts.d.ts +216 -0
  109. package/dist/store/contexts.d.ts.map +1 -0
  110. package/dist/store/contexts.js +1341 -0
  111. package/dist/store/contexts.js.map +1 -0
  112. package/dist/store/index.d.ts +1 -0
  113. package/dist/store/index.d.ts.map +1 -1
  114. package/dist/store/index.js +1 -0
  115. package/dist/store/index.js.map +1 -1
  116. package/dist/store/packs.d.ts +3 -0
  117. package/dist/store/packs.d.ts.map +1 -1
  118. package/dist/store/packs.js +126 -9
  119. package/dist/store/packs.js.map +1 -1
  120. package/dist/store/purge.d.ts.map +1 -1
  121. package/dist/store/purge.js +103 -6
  122. package/dist/store/purge.js.map +1 -1
  123. package/dist/store/sources.d.ts.map +1 -1
  124. package/dist/store/sources.js +2 -15
  125. package/dist/store/sources.js.map +1 -1
  126. package/dist/store/suggestions.d.ts.map +1 -1
  127. package/dist/store/suggestions.js +3 -1
  128. package/dist/store/suggestions.js.map +1 -1
  129. package/dist/types.d.ts +77 -0
  130. package/dist/types.d.ts.map +1 -1
  131. package/dist/types.js +9 -1
  132. package/dist/types.js.map +1 -1
  133. package/docs/skills/creative-context/SKILL.md +13 -5
  134. package/package.json +3 -3
  135. package/src/actions/index.ts +8 -0
  136. package/src/actions/job-public-serialization.spec.ts +21 -0
  137. package/src/actions/list-context-memberships.ts +56 -0
  138. package/src/actions/list-creative-contexts.spec.ts +38 -0
  139. package/src/actions/list-creative-contexts.ts +32 -0
  140. package/src/actions/manage-context-membership.ts +80 -0
  141. package/src/actions/manage-context-pack.ts +6 -0
  142. package/src/actions/manage-context-source.ts +8 -11
  143. package/src/actions/manage-creative-context.ts +73 -0
  144. package/src/actions/process-context-purge.ts +4 -1
  145. package/src/actions/search-creative-context.ts +2 -1
  146. package/src/client/CreativeContextChip.spec.ts +32 -0
  147. package/src/client/CreativeContextChip.tsx +83 -14
  148. package/src/client/CreativeContextPanel.tsx +1947 -885
  149. package/src/client/CreativeContextShareTab.spec.ts +70 -0
  150. package/src/client/CreativeContextShareTab.tsx +657 -0
  151. package/src/client/actions.spec.ts +177 -0
  152. package/src/client/actions.ts +566 -0
  153. package/src/client/application-state.spec.ts +5 -0
  154. package/src/client/application-state.ts +30 -2
  155. package/src/client/index.ts +33 -0
  156. package/src/client/messages.ts +95 -0
  157. package/src/connectors/types.ts +6 -8
  158. package/src/eval/library-flow.acceptance.spec.tsx +1 -0
  159. package/src/schema/index.ts +116 -0
  160. package/src/schema/migrations.ts +80 -0
  161. package/src/server/generation-artifact-access.ts +1 -0
  162. package/src/server/generation-context-a2a.spec.ts +133 -0
  163. package/src/server/generation-context.ts +153 -7
  164. package/src/server/index.spec.ts +15 -0
  165. package/src/server/index.ts +16 -0
  166. package/src/server/isolated-a2a.ts +4 -1
  167. package/src/server/media.spec.ts +30 -2
  168. package/src/server/media.ts +31 -12
  169. package/src/server/native-resource-capture.spec.ts +121 -0
  170. package/src/server/native-resource-capture.ts +198 -0
  171. package/src/server/public-serialization.spec.ts +1 -0
  172. package/src/server/public-serialization.ts +1 -1
  173. package/src/server/retrieval.ts +3 -0
  174. package/src/server/safe-native-preview.spec.ts +29 -0
  175. package/src/server/safe-native-preview.ts +200 -0
  176. package/src/store/access.integration.spec.ts +1116 -0
  177. package/src/store/brand.ts +2 -21
  178. package/src/store/content.ts +217 -17
  179. package/src/store/contexts.ts +1826 -0
  180. package/src/store/index.ts +1 -0
  181. package/src/store/packs.ts +279 -24
  182. package/src/store/purge.ts +139 -6
  183. package/src/store/sources.ts +2 -18
  184. package/src/store/suggestions.ts +3 -1
  185. package/src/types.ts +95 -0
@@ -1,6 +1,11 @@
1
1
  export {
2
2
  CREATIVE_CONTEXT_ACTIONS,
3
+ parseContextMemberships,
4
+ parseContextMembershipsForResource,
5
+ parseCreativeContexts,
6
+ useContextMemberships,
3
7
  useCreativeContextBrandProfile,
8
+ useCreativeContexts,
4
9
  useCreativeContextGooglePickerSession,
5
10
  useCreativeContextImportStatus,
6
11
  useCreativeContextPack,
@@ -8,16 +13,30 @@ export {
8
13
  useCreativeContextSearch,
9
14
  useCreativeContextSources,
10
15
  useManageCreativeContextSource,
16
+ useManageCreativeContext,
17
+ useManageContextMembership,
11
18
  usePreviewCreativeContextImport,
12
19
  usePublishCreativeContextBrandDna,
13
20
  useRefreshCreativeContextSource,
14
21
  useReviewCreativeContextItems,
15
22
  useStartCreativeContextImport,
16
23
  type GetBrandProfileResult,
24
+ type CreativeContextMembership,
25
+ type CreativeContextMembershipRank,
26
+ type CreativeContextPolicy,
27
+ type CreativeContextSummary,
17
28
  type GetContextImportStatusResult,
18
29
  type GetContextPackResult,
19
30
  type GetGooglePickerSessionResult,
20
31
  type ListContextPacksResult,
32
+ type ListContextMembershipsParams,
33
+ type ListContextMembershipsResult,
34
+ type ListCreativeContextsParams,
35
+ type ListCreativeContextsResult,
36
+ type ManageContextMembershipParams,
37
+ type ManageContextMembershipResult,
38
+ type ManageCreativeContextParams,
39
+ type ManageCreativeContextResult,
21
40
  type ListContextSourcesParams,
22
41
  type ListContextSourcesResult,
23
42
  type ManageContextSourceParams,
@@ -38,6 +57,7 @@ export {
38
57
  normalizeCreativeContextState,
39
58
  readCreativeContextState,
40
59
  setCreativeContextMode,
60
+ setSelectedCreativeContext,
41
61
  setCreativeContextState,
42
62
  setPinnedCreativeContextPack,
43
63
  useCreativeContextState,
@@ -47,12 +67,25 @@ export {
47
67
  export {
48
68
  CreativeContextChip,
49
69
  CreativeContextComposerChip,
70
+ resolveCreativeContextChipSelection,
50
71
  type CreativeContextChipProps,
72
+ type CreativeContextChipSelection,
51
73
  } from "./CreativeContextChip.js";
52
74
  export {
53
75
  CreativeContextPanel,
54
76
  type CreativeContextPanelProps,
55
77
  } from "./CreativeContextPanel.js";
78
+ export {
79
+ CreativeContextShareSheet,
80
+ CreativeContextShareTab,
81
+ creativeContextSafePreviewUrl,
82
+ normalizeCreativeContextResources,
83
+ requiresBroaderPublication,
84
+ submitCreativeContextResources,
85
+ type CreativeContextResourceDescriptor,
86
+ type CreativeContextResourcePreview,
87
+ type CreativeContextShareTabProps,
88
+ } from "./CreativeContextShareTab.js";
56
89
  export { CreativeContextSettingsLink } from "./CreativeContextSettingsLink.js";
57
90
  export {
58
91
  createCreativeContextAgentTab,
@@ -53,6 +53,7 @@ export type CreativeContextMessageKey =
53
53
  | "personal"
54
54
  | "organization"
55
55
  | "addSource"
56
+ | "addToContext"
56
57
  | "sourceName"
57
58
  | "sourceReference"
58
59
  | "preview"
@@ -74,6 +75,12 @@ export type CreativeContextMessageKey =
74
75
  | "influence"
75
76
  | "cancel"
76
77
  | "saveFailed"
78
+ | "updateAvailable"
79
+ | "submitUpdate"
80
+ | "submittingUpdate"
81
+ | "submitUpdateTitle"
82
+ | "submitUpdateDescription"
83
+ | "submitUpdateFailed"
77
84
  | "chooseFiles"
78
85
  | "chooseFolder"
79
86
  | "dropFiles"
@@ -162,6 +169,7 @@ export const creativeContextMessagesByLocale: Record<
162
169
  personal: "Personal",
163
170
  organization: "Organization",
164
171
  addSource: "Add a source",
172
+ addToContext: "Add to context…",
165
173
  sourceName: "Source name",
166
174
  sourceReference: "Source reference",
167
175
  preview: "Preview",
@@ -183,6 +191,13 @@ export const creativeContextMessagesByLocale: Record<
183
191
  influence: "Influence",
184
192
  cancel: "Close",
185
193
  saveFailed: "Could not save these changes.",
194
+ updateAvailable: "Update available",
195
+ submitUpdate: "Submit update",
196
+ submittingUpdate: "Submitting…",
197
+ submitUpdateTitle: "Submit the latest version?",
198
+ submitUpdateDescription:
199
+ 'Capture the current version of "{{name}}" and send it through this context’s approval policy. This may publish it to a broader audience.',
200
+ submitUpdateFailed: "Could not submit the latest version.",
186
201
  chooseFiles: "Choose files",
187
202
  chooseFolder: "Choose folder",
188
203
  dropFiles: "Drop PPTX, DOCX, PDF, or image files here.",
@@ -263,6 +278,7 @@ export const creativeContextMessagesByLocale: Record<
263
278
  personal: "個人",
264
279
  organization: "組織",
265
280
  addSource: "新增來源",
281
+ addToContext: "新增至脈絡…",
266
282
  sourceName: "來源名稱",
267
283
  sourceReference: "來源參考",
268
284
  preview: "預覽",
@@ -284,6 +300,13 @@ export const creativeContextMessagesByLocale: Record<
284
300
  influence: "影響",
285
301
  cancel: "關閉",
286
302
  saveFailed: "無法儲存這些變更。",
303
+ updateAvailable: "有可用更新",
304
+ submitUpdate: "提交更新",
305
+ submittingUpdate: "提交中…",
306
+ submitUpdateTitle: "提交最新版本?",
307
+ submitUpdateDescription:
308
+ "擷取「{{name}}」的目前版本,並依此內容環境的核准政策提交。這可能會將其發布給更廣泛的對象。",
309
+ submitUpdateFailed: "無法提交最新版本。",
287
310
  chooseFiles: "選擇檔案",
288
311
  chooseFolder: "選擇資料夾",
289
312
  dropFiles: "將 PPTX、DOCX、PDF 或圖片檔案拖放到這裡。",
@@ -362,6 +385,7 @@ export const creativeContextMessagesByLocale: Record<
362
385
  personal: "个人",
363
386
  organization: "组织",
364
387
  addSource: "添加来源",
388
+ addToContext: "添加到上下文…",
365
389
  sourceName: "来源名称",
366
390
  sourceReference: "来源引用",
367
391
  preview: "预览",
@@ -383,6 +407,13 @@ export const creativeContextMessagesByLocale: Record<
383
407
  influence: "影响",
384
408
  cancel: "关闭",
385
409
  saveFailed: "无法保存这些更改。",
410
+ updateAvailable: "有可用更新",
411
+ submitUpdate: "提交更新",
412
+ submittingUpdate: "正在提交…",
413
+ submitUpdateTitle: "提交最新版本?",
414
+ submitUpdateDescription:
415
+ "捕获“{{name}}”的当前版本,并按此上下文的审批策略提交。这可能会将其发布给更广泛的受众。",
416
+ submitUpdateFailed: "无法提交最新版本。",
386
417
  chooseFiles: "选择文件",
387
418
  chooseFolder: "选择文件夹",
388
419
  dropFiles: "将 PPTX、DOCX、PDF 或图片文件拖放到此处。",
@@ -467,6 +498,7 @@ export const creativeContextMessagesByLocale: Record<
467
498
  personal: "Personal",
468
499
  organization: "Organización",
469
500
  addSource: "Añadir una fuente",
501
+ addToContext: "Añadir al contexto…",
470
502
  sourceName: "Nombre de la fuente",
471
503
  sourceReference: "Referencia de la fuente",
472
504
  preview: "Vista previa",
@@ -488,6 +520,13 @@ export const creativeContextMessagesByLocale: Record<
488
520
  influence: "Influencia",
489
521
  cancel: "Cerrar",
490
522
  saveFailed: "No se pudieron guardar estos cambios.",
523
+ updateAvailable: "Actualización disponible",
524
+ submitUpdate: "Enviar actualización",
525
+ submittingUpdate: "Enviando…",
526
+ submitUpdateTitle: "¿Enviar la versión más reciente?",
527
+ submitUpdateDescription:
528
+ "Captura la versión actual de «{{name}}» y envíala mediante la política de aprobación de este contexto. Esto puede publicarla para una audiencia más amplia.",
529
+ submitUpdateFailed: "No se pudo enviar la versión más reciente.",
491
530
  chooseFiles: "Elegir archivos",
492
531
  chooseFolder: "Elegir carpeta",
493
532
  dropFiles: "Suelta aquí archivos PPTX, DOCX, PDF o imágenes.",
@@ -575,6 +614,7 @@ export const creativeContextMessagesByLocale: Record<
575
614
  personal: "Personnel",
576
615
  organization: "Organisation",
577
616
  addSource: "Ajouter une source",
617
+ addToContext: "Ajouter au contexte…",
578
618
  sourceName: "Nom de la source",
579
619
  sourceReference: "Référence de la source",
580
620
  preview: "Aperçu",
@@ -596,6 +636,13 @@ export const creativeContextMessagesByLocale: Record<
596
636
  influence: "Influence",
597
637
  cancel: "Fermer",
598
638
  saveFailed: "Impossible d’enregistrer ces modifications.",
639
+ updateAvailable: "Mise à jour disponible",
640
+ submitUpdate: "Envoyer la mise à jour",
641
+ submittingUpdate: "Envoi…",
642
+ submitUpdateTitle: "Envoyer la dernière version ?",
643
+ submitUpdateDescription:
644
+ "Capturez la version actuelle de « {{name}} » et soumettez-la à la politique d’approbation de ce contexte. Elle peut être publiée auprès d’un public plus large.",
645
+ submitUpdateFailed: "Impossible d’envoyer la dernière version.",
599
646
  chooseFiles: "Choisir des fichiers",
600
647
  chooseFolder: "Choisir un dossier",
601
648
  dropFiles: "Déposez ici des fichiers PPTX, DOCX, PDF ou image.",
@@ -683,6 +730,7 @@ export const creativeContextMessagesByLocale: Record<
683
730
  personal: "Persönlich",
684
731
  organization: "Organisation",
685
732
  addSource: "Quelle hinzufügen",
733
+ addToContext: "Zum Kontext hinzufügen…",
686
734
  sourceName: "Quellenname",
687
735
  sourceReference: "Quellenreferenz",
688
736
  preview: "Vorschau",
@@ -704,6 +752,13 @@ export const creativeContextMessagesByLocale: Record<
704
752
  influence: "Einfluss",
705
753
  cancel: "Schließen",
706
754
  saveFailed: "Diese Änderungen konnten nicht gespeichert werden.",
755
+ updateAvailable: "Aktualisierung verfügbar",
756
+ submitUpdate: "Aktualisierung einreichen",
757
+ submittingUpdate: "Wird eingereicht…",
758
+ submitUpdateTitle: "Neueste Version einreichen?",
759
+ submitUpdateDescription:
760
+ "Erfassen Sie die aktuelle Version von „{{name}}“ und reichen Sie sie gemäß der Freigaberichtlinie dieses Kontexts ein. Dadurch kann sie für ein größeres Publikum veröffentlicht werden.",
761
+ submitUpdateFailed: "Die neueste Version konnte nicht eingereicht werden.",
707
762
  chooseFiles: "Dateien auswählen",
708
763
  chooseFolder: "Ordner auswählen",
709
764
  dropFiles: "PPTX-, DOCX-, PDF- oder Bilddateien hier ablegen.",
@@ -791,6 +846,7 @@ export const creativeContextMessagesByLocale: Record<
791
846
  personal: "個人",
792
847
  organization: "組織",
793
848
  addSource: "ソースを追加",
849
+ addToContext: "コンテキストに追加…",
794
850
  sourceName: "ソース名",
795
851
  sourceReference: "ソース参照",
796
852
  preview: "プレビュー",
@@ -812,6 +868,13 @@ export const creativeContextMessagesByLocale: Record<
812
868
  influence: "影響",
813
869
  cancel: "閉じる",
814
870
  saveFailed: "変更を保存できませんでした。",
871
+ updateAvailable: "更新があります",
872
+ submitUpdate: "更新を送信",
873
+ submittingUpdate: "送信中…",
874
+ submitUpdateTitle: "最新バージョンを送信しますか?",
875
+ submitUpdateDescription:
876
+ "「{{name}}」の現在のバージョンを取得し、このコンテキストの承認ポリシーに従って送信します。より広い対象に公開される場合があります。",
877
+ submitUpdateFailed: "最新バージョンを送信できませんでした。",
815
878
  chooseFiles: "ファイルを選択",
816
879
  chooseFolder: "フォルダを選択",
817
880
  dropFiles: "PPTX、DOCX、PDF、画像ファイルをここにドロップします。",
@@ -898,6 +961,7 @@ export const creativeContextMessagesByLocale: Record<
898
961
  personal: "개인",
899
962
  organization: "조직",
900
963
  addSource: "소스 추가",
964
+ addToContext: "컨텍스트에 추가…",
901
965
  sourceName: "소스 이름",
902
966
  sourceReference: "소스 참조",
903
967
  preview: "미리보기",
@@ -919,6 +983,13 @@ export const creativeContextMessagesByLocale: Record<
919
983
  influence: "영향",
920
984
  cancel: "닫기",
921
985
  saveFailed: "변경 사항을 저장할 수 없습니다.",
986
+ updateAvailable: "업데이트 있음",
987
+ submitUpdate: "업데이트 제출",
988
+ submittingUpdate: "제출 중…",
989
+ submitUpdateTitle: "최신 버전을 제출할까요?",
990
+ submitUpdateDescription:
991
+ "“{{name}}”의 현재 버전을 캡처하여 이 컨텍스트의 승인 정책에 따라 제출합니다. 더 넓은 대상에게 게시될 수 있습니다.",
992
+ submitUpdateFailed: "최신 버전을 제출할 수 없습니다.",
922
993
  chooseFiles: "파일 선택",
923
994
  chooseFolder: "폴더 선택",
924
995
  dropFiles: "PPTX, DOCX, PDF 또는 이미지 파일을 여기에 놓으세요.",
@@ -1005,6 +1076,7 @@ export const creativeContextMessagesByLocale: Record<
1005
1076
  personal: "Pessoal",
1006
1077
  organization: "Organização",
1007
1078
  addSource: "Adicionar uma fonte",
1079
+ addToContext: "Adicionar ao contexto…",
1008
1080
  sourceName: "Nome da fonte",
1009
1081
  sourceReference: "Referência da fonte",
1010
1082
  preview: "Prévia",
@@ -1026,6 +1098,13 @@ export const creativeContextMessagesByLocale: Record<
1026
1098
  influence: "Influência",
1027
1099
  cancel: "Fechar",
1028
1100
  saveFailed: "Não foi possível salvar estas alterações.",
1101
+ updateAvailable: "Atualização disponível",
1102
+ submitUpdate: "Enviar atualização",
1103
+ submittingUpdate: "Enviando…",
1104
+ submitUpdateTitle: "Enviar a versão mais recente?",
1105
+ submitUpdateDescription:
1106
+ "Capture a versão atual de “{{name}}” e envie-a pela política de aprovação deste contexto. Isso pode publicá-la para um público mais amplo.",
1107
+ submitUpdateFailed: "Não foi possível enviar a versão mais recente.",
1029
1108
  chooseFiles: "Escolher arquivos",
1030
1109
  chooseFolder: "Escolher pasta",
1031
1110
  dropFiles: "Solte arquivos PPTX, DOCX, PDF ou imagens aqui.",
@@ -1109,6 +1188,7 @@ export const creativeContextMessagesByLocale: Record<
1109
1188
  personal: "व्यक्तिगत",
1110
1189
  organization: "संगठन",
1111
1190
  addSource: "स्रोत जोड़ें",
1191
+ addToContext: "कॉन्टेक्स्ट में जोड़ें…",
1112
1192
  sourceName: "स्रोत का नाम",
1113
1193
  sourceReference: "स्रोत संदर्भ",
1114
1194
  preview: "पूर्वावलोकन",
@@ -1130,6 +1210,13 @@ export const creativeContextMessagesByLocale: Record<
1130
1210
  influence: "प्रभाव",
1131
1211
  cancel: "बंद करें",
1132
1212
  saveFailed: "इन बदलावों को सहेजा नहीं जा सका।",
1213
+ updateAvailable: "अपडेट उपलब्ध है",
1214
+ submitUpdate: "अपडेट सबमिट करें",
1215
+ submittingUpdate: "सबमिट हो रहा है…",
1216
+ submitUpdateTitle: "नवीनतम संस्करण सबमिट करें?",
1217
+ submitUpdateDescription:
1218
+ "“{{name}}” का मौजूदा संस्करण कैप्चर करके इस कॉन्टेक्स्ट की स्वीकृति नीति के अनुसार सबमिट करें। यह बड़े दर्शक वर्ग के लिए प्रकाशित हो सकता है।",
1219
+ submitUpdateFailed: "नवीनतम संस्करण सबमिट नहीं किया जा सका।",
1133
1220
  chooseFiles: "फ़ाइलें चुनें",
1134
1221
  chooseFolder: "फ़ोल्डर चुनें",
1135
1222
  dropFiles: "PPTX, DOCX, PDF या इमेज फ़ाइलें यहाँ छोड़ें।",
@@ -1213,6 +1300,7 @@ export const creativeContextMessagesByLocale: Record<
1213
1300
  personal: "شخصي",
1214
1301
  organization: "المؤسسة",
1215
1302
  addSource: "إضافة مصدر",
1303
+ addToContext: "إضافة إلى السياق…",
1216
1304
  sourceName: "اسم المصدر",
1217
1305
  sourceReference: "مرجع المصدر",
1218
1306
  preview: "معاينة",
@@ -1234,6 +1322,13 @@ export const creativeContextMessagesByLocale: Record<
1234
1322
  influence: "التأثير",
1235
1323
  cancel: "إغلاق",
1236
1324
  saveFailed: "تعذّر حفظ هذه التغييرات.",
1325
+ updateAvailable: "يتوفر تحديث",
1326
+ submitUpdate: "إرسال التحديث",
1327
+ submittingUpdate: "جارٍ الإرسال…",
1328
+ submitUpdateTitle: "إرسال أحدث إصدار؟",
1329
+ submitUpdateDescription:
1330
+ 'التقط الإصدار الحالي من "{{name}}" وأرسله وفق سياسة الموافقة لهذا السياق. قد يؤدي ذلك إلى نشره لجمهور أوسع.',
1331
+ submitUpdateFailed: "تعذّر إرسال أحدث إصدار.",
1237
1332
  chooseFiles: "اختيار ملفات",
1238
1333
  chooseFolder: "اختيار مجلد",
1239
1334
  dropFiles: "أفلت ملفات PPTX أو DOCX أو PDF أو الصور هنا.",
@@ -5,16 +5,14 @@ import type {
5
5
  } from "@agent-native/core/private-blob";
6
6
  import type { ProviderApiRuntime } from "@agent-native/core/provider-api";
7
7
 
8
- import type { NormalizedContextItem, UpstreamAccess } from "../types.js";
8
+ import type {
9
+ ContextSourceKind,
10
+ NormalizedContextItem,
11
+ UpstreamAccess,
12
+ } from "../types.js";
9
13
  import type { RenderedPageProvider } from "./rendered-page.js";
10
14
 
11
- export type ContextConnectorKind =
12
- | "manual"
13
- | "upload"
14
- | "google-slides"
15
- | "figma"
16
- | "notion"
17
- | "website";
15
+ export type ContextConnectorKind = Exclude<ContextSourceKind, "native-app">;
18
16
 
19
17
  export interface ContextConnectorInventoryItem {
20
18
  externalId: string;
@@ -131,6 +131,7 @@ describe("credential-free Library acceptance", () => {
131
131
  contextMode: "off",
132
132
  currentPackId: null,
133
133
  pinnedPackId: null,
134
+ selectedContextId: null,
134
135
  });
135
136
  const offMarkup = renderToStaticMarkup(
136
137
  <CreativeContextChip state={off} packs={[pack]} />,
@@ -293,6 +293,9 @@ export const contextPacks = table("creative_context_packs", {
293
293
  derivedFromPackId: text("derived_from_pack_id"),
294
294
  brandDnaVersionId: text("brand_dna_version_id"),
295
295
  contextMode: text("context_mode").notNull().default("manual"),
296
+ baseContextId: text("base_context_id"),
297
+ specialtyContextId: text("specialty_context_id"),
298
+ selectionReason: text("selection_reason"),
296
299
  request: text("request").notNull().default("{}"),
297
300
  archivedAt: text("archived_at"),
298
301
  createdAt: text("created_at").notNull(),
@@ -323,6 +326,119 @@ export const contextPackPins = table("creative_context_pack_pins", {
323
326
  ...scopedColumns(),
324
327
  });
325
328
 
329
+ /** A governed, shareable collection of published creative artifacts. */
330
+ export const creativeContexts = table("creative_contexts", {
331
+ id: text("id").primaryKey(),
332
+ name: text("name").notNull(),
333
+ description: text("description"),
334
+ kind: text("kind", { enum: ["default", "specialty"] }).notNull(),
335
+ defaultScopeKey: text("default_scope_key"),
336
+ brandProfileId: text("brand_profile_id"),
337
+ stagingSourceId: text("staging_source_id").notNull(),
338
+ // This source is owned by the context and is intentionally not a library source.
339
+ publishedSourceId: text("published_source_id").notNull(),
340
+ approvalPolicy: text("approval_policy", {
341
+ enum: ["open", "review", "admins-only"],
342
+ })
343
+ .notNull()
344
+ .default("open"),
345
+ archivedAt: text("archived_at"),
346
+ createdAt: text("created_at").notNull(),
347
+ updatedAt: text("updated_at").notNull(),
348
+ ...ownableColumns(),
349
+ });
350
+
351
+ export const creativeContextShares = createSharesTable(
352
+ "creative_context_shares",
353
+ );
354
+
355
+ export const creativeContextAudit = table("creative_context_audit", {
356
+ id: text("id").primaryKey(),
357
+ contextId: text("context_id").notNull(),
358
+ operation: text("operation").notNull(),
359
+ actorEmail: text("actor_email").notNull(),
360
+ details: text("details").notNull().default("{}"),
361
+ createdAt: text("created_at").notNull(),
362
+ ...scopedColumns(),
363
+ });
364
+
365
+ /** One stable row per context/artifact identity; published pointers are mutable. */
366
+ export const creativeContextMemberships = table(
367
+ "creative_context_memberships",
368
+ {
369
+ id: text("id").primaryKey(),
370
+ contextId: text("context_id").notNull(),
371
+ artifactKey: text("artifact_key").notNull(),
372
+ publishedItemId: text("published_item_id"),
373
+ publishedItemVersionId: text("published_item_version_id"),
374
+ pendingSubmissionId: text("pending_submission_id"),
375
+ rank: text("rank", { enum: ["canonical", "exemplar", "normal"] })
376
+ .notNull()
377
+ .default("normal"),
378
+ purpose: text("purpose"),
379
+ status: text("status", { enum: ["active", "removed"] })
380
+ .notNull()
381
+ .default("active"),
382
+ createdAt: text("created_at").notNull(),
383
+ updatedAt: text("updated_at").notNull(),
384
+ ...scopedColumns(),
385
+ },
386
+ );
387
+
388
+ /** Submission rows track workflow state; immutable version pins and audit rows preserve evidence. */
389
+ export const creativeContextSubmissions = table(
390
+ "creative_context_submissions",
391
+ {
392
+ id: text("id").primaryKey(),
393
+ contextId: text("context_id").notNull(),
394
+ membershipId: text("membership_id").notNull(),
395
+ artifactKey: text("artifact_key").notNull(),
396
+ stagingItemId: text("staging_item_id"),
397
+ stagingItemVersionId: text("staging_item_version_id"),
398
+ publishedItemId: text("published_item_id"),
399
+ publishedItemVersionId: text("published_item_version_id"),
400
+ note: text("note"),
401
+ privateMetadata: text("private_metadata").notNull().default("{}"),
402
+ status: text("status", {
403
+ enum: ["pending", "approved", "rejected", "withdrawn", "superseded"],
404
+ }).notNull(),
405
+ submittedBy: text("submitted_by").notNull(),
406
+ reviewedBy: text("reviewed_by"),
407
+ reviewNote: text("review_note"),
408
+ createdAt: text("created_at").notNull(),
409
+ reviewedAt: text("reviewed_at"),
410
+ ...scopedColumns(),
411
+ },
412
+ );
413
+
414
+ export const creativeContextAppBindings = table(
415
+ "creative_context_app_bindings",
416
+ {
417
+ id: text("id").primaryKey(),
418
+ appId: text("app_id").notNull(),
419
+ contextId: text("context_id").notNull(),
420
+ createdAt: text("created_at").notNull(),
421
+ updatedAt: text("updated_at").notNull(),
422
+ ...scopedColumns(),
423
+ },
424
+ );
425
+
426
+ /** Internal history of publish/materialization operations; never public API. */
427
+ export const creativeContextPublishedSnapshots = table(
428
+ "creative_context_published_snapshots",
429
+ {
430
+ id: text("id").primaryKey(),
431
+ contextId: text("context_id").notNull(),
432
+ sourceId: text("source_id").notNull(),
433
+ membershipId: text("membership_id").notNull(),
434
+ itemId: text("item_id").notNull(),
435
+ itemVersionId: text("item_version_id").notNull(),
436
+ submissionId: text("submission_id").notNull(),
437
+ createdAt: text("created_at").notNull(),
438
+ ...scopedColumns(),
439
+ },
440
+ );
441
+
326
442
  export const contextJobs = table("creative_context_jobs", {
327
443
  id: text("id").primaryKey(),
328
444
  dedupeKey: text("dedupe_key"),
@@ -255,4 +255,84 @@ export const creativeContextMigrations: CreativeContextMigration[] = [
255
255
  ON creative_context_jobs (dedupe_scope, scoped_dedupe_key);
256
256
  `,
257
257
  },
258
+ {
259
+ version: 6,
260
+ name: "creative-context-governed-collections",
261
+ sql: `
262
+ CREATE TABLE IF NOT EXISTS creative_contexts (
263
+ id TEXT PRIMARY KEY, name TEXT NOT NULL, description TEXT,
264
+ kind TEXT NOT NULL, brand_profile_id TEXT, staging_source_id TEXT NOT NULL, published_source_id TEXT NOT NULL,
265
+ approval_policy TEXT NOT NULL DEFAULT 'open', archived_at TEXT,
266
+ created_at TEXT NOT NULL, updated_at TEXT NOT NULL,
267
+ owner_email TEXT NOT NULL DEFAULT 'local@localhost', org_id TEXT,
268
+ visibility TEXT NOT NULL DEFAULT 'private'
269
+ );
270
+ CREATE TABLE IF NOT EXISTS creative_context_shares (
271
+ id TEXT PRIMARY KEY, resource_id TEXT NOT NULL, principal_type TEXT NOT NULL,
272
+ principal_id TEXT NOT NULL, role TEXT NOT NULL DEFAULT 'viewer',
273
+ created_by TEXT NOT NULL, created_at TEXT NOT NULL
274
+ );
275
+ CREATE TABLE IF NOT EXISTS creative_context_audit (
276
+ id TEXT PRIMARY KEY, context_id TEXT NOT NULL, operation TEXT NOT NULL,
277
+ actor_email TEXT NOT NULL, details TEXT NOT NULL DEFAULT '{}', created_at TEXT NOT NULL,
278
+ owner_email TEXT NOT NULL, org_id TEXT
279
+ );
280
+ CREATE TABLE IF NOT EXISTS creative_context_memberships (
281
+ id TEXT PRIMARY KEY, context_id TEXT NOT NULL, artifact_key TEXT NOT NULL,
282
+ published_item_id TEXT, published_item_version_id TEXT, pending_submission_id TEXT,
283
+ rank TEXT NOT NULL DEFAULT 'normal', purpose TEXT, status TEXT NOT NULL DEFAULT 'active',
284
+ created_at TEXT NOT NULL, updated_at TEXT NOT NULL, owner_email TEXT NOT NULL, org_id TEXT
285
+ );
286
+ CREATE TABLE IF NOT EXISTS creative_context_submissions (
287
+ id TEXT PRIMARY KEY, context_id TEXT NOT NULL, membership_id TEXT NOT NULL,
288
+ artifact_key TEXT NOT NULL, staging_item_id TEXT, staging_item_version_id TEXT,
289
+ published_item_id TEXT, published_item_version_id TEXT, note TEXT,
290
+ private_metadata TEXT NOT NULL DEFAULT '{}', status TEXT NOT NULL,
291
+ submitted_by TEXT NOT NULL, reviewed_by TEXT, review_note TEXT,
292
+ created_at TEXT NOT NULL, reviewed_at TEXT, owner_email TEXT NOT NULL, org_id TEXT
293
+ );
294
+ CREATE TABLE IF NOT EXISTS creative_context_app_bindings (
295
+ id TEXT PRIMARY KEY, app_id TEXT NOT NULL, context_id TEXT NOT NULL,
296
+ created_at TEXT NOT NULL, updated_at TEXT NOT NULL,
297
+ owner_email TEXT NOT NULL, org_id TEXT
298
+ );
299
+ CREATE TABLE IF NOT EXISTS creative_context_published_snapshots (
300
+ id TEXT PRIMARY KEY, context_id TEXT NOT NULL, source_id TEXT NOT NULL,
301
+ membership_id TEXT NOT NULL, item_id TEXT NOT NULL, item_version_id TEXT NOT NULL,
302
+ submission_id TEXT NOT NULL, created_at TEXT NOT NULL, owner_email TEXT NOT NULL, org_id TEXT
303
+ );
304
+ ALTER TABLE creative_context_packs ADD COLUMN base_context_id TEXT;
305
+ ALTER TABLE creative_context_packs ADD COLUMN specialty_context_id TEXT;
306
+ ALTER TABLE creative_context_packs ADD COLUMN selection_reason TEXT;
307
+ CREATE UNIQUE INDEX IF NOT EXISTS creative_context_membership_artifact_uidx
308
+ ON creative_context_memberships (context_id, artifact_key);
309
+ CREATE INDEX IF NOT EXISTS creative_context_memberships_context_status_idx
310
+ ON creative_context_memberships (context_id, status, updated_at);
311
+ CREATE INDEX IF NOT EXISTS creative_context_submissions_context_status_idx
312
+ ON creative_context_submissions (context_id, status, created_at);
313
+ CREATE INDEX IF NOT EXISTS creative_context_app_bindings_lookup_idx
314
+ ON creative_context_app_bindings (app_id, owner_email, org_id, updated_at);
315
+ CREATE INDEX IF NOT EXISTS creative_context_memberships_published_item_idx
316
+ ON creative_context_memberships (published_item_id, published_item_version_id);
317
+ CREATE INDEX IF NOT EXISTS creative_context_published_snapshots_source_item_idx
318
+ ON creative_context_published_snapshots (source_id, item_id, item_version_id);
319
+ CREATE INDEX IF NOT EXISTS creative_context_shares_lookup_idx
320
+ ON creative_context_shares (resource_id, principal_type, principal_id);
321
+ `,
322
+ },
323
+ {
324
+ version: 7,
325
+ name: "creative-context-default-scope-uniqueness",
326
+ sql: `
327
+ ALTER TABLE creative_contexts ADD COLUMN default_scope_key TEXT;
328
+ UPDATE creative_contexts
329
+ SET default_scope_key = CASE
330
+ WHEN kind = 'default' AND org_id IS NOT NULL THEN 'org:' || org_id
331
+ WHEN kind = 'default' THEN 'user:' || owner_email
332
+ ELSE NULL
333
+ END;
334
+ CREATE UNIQUE INDEX IF NOT EXISTS creative_context_default_scope_uidx
335
+ ON creative_contexts (default_scope_key);
336
+ `,
337
+ },
258
338
  ];
@@ -197,6 +197,7 @@ async function verifyCapabilitySignature(
197
197
  let bytes: Uint8Array;
198
198
  try {
199
199
  bytes = Buffer.from(signature, "base64url");
200
+ if (Buffer.from(bytes).toString("base64url") !== signature) return false;
200
201
  } catch {
201
202
  return false;
202
203
  }