@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
@@ -0,0 +1,177 @@
1
+ import { describe, expect, it } from "vitest";
2
+
3
+ import {
4
+ parseContextMemberships,
5
+ parseContextMembershipsForResource,
6
+ parseCreativeContextSafePreview,
7
+ parseCreativeContexts,
8
+ } from "./actions.js";
9
+
10
+ describe("creative context client action contracts", () => {
11
+ it("accepts the canonical list result and tolerates an array result", () => {
12
+ const context = {
13
+ id: "context-1",
14
+ name: "Campaign",
15
+ kind: "specialty",
16
+ memberCount: 2,
17
+ approvalPolicy: "review",
18
+ };
19
+ expect(parseCreativeContexts({ contexts: [context] })).toEqual([
20
+ expect.objectContaining(context),
21
+ ]);
22
+ expect(parseCreativeContexts([context])).toEqual([
23
+ expect.objectContaining(context),
24
+ ]);
25
+ });
26
+
27
+ it("normalizes the server membership result without disclosing opaque handles", () => {
28
+ const memberships = parseContextMemberships({
29
+ memberships: [
30
+ {
31
+ id: "membership-1",
32
+ contextId: "context-1",
33
+ artifactKey: "private://provider/opaque-handle",
34
+ privateMetadata: { token: "secret" },
35
+ rank: "canonical",
36
+ status: "active",
37
+ pendingSubmission: {
38
+ id: "submission-1",
39
+ status: "pending",
40
+ proposedItem: {
41
+ id: "staged-item",
42
+ itemVersionId: "staged-version",
43
+ title: "Proposed deck",
44
+ kind: "slides-deck",
45
+ preview: {
46
+ type: "slides",
47
+ slides: [{ title: "Preview", cloneHandle: "opaque-handle" }],
48
+ },
49
+ privateMetadata: { handle: "secret" },
50
+ },
51
+ },
52
+ },
53
+ ],
54
+ });
55
+ expect(memberships).toEqual([
56
+ expect.objectContaining({
57
+ rank: "canonical",
58
+ status: "active",
59
+ pendingSubmission: expect.objectContaining({
60
+ id: "submission-1",
61
+ status: "pending",
62
+ proposedItem: expect.objectContaining({ title: "Proposed deck" }),
63
+ }),
64
+ }),
65
+ ]);
66
+ expect(JSON.stringify(memberships)).not.toMatch(/opaque-handle|secret/);
67
+ });
68
+
69
+ it("filters resource memberships by the generic artifact identity without returning it", () => {
70
+ const memberships = parseContextMembershipsForResource(
71
+ {
72
+ memberships: [
73
+ {
74
+ id: "keep",
75
+ contextId: "context-1",
76
+ artifactKey: "slides:presentation:deck-1",
77
+ rank: "normal",
78
+ status: "active",
79
+ },
80
+ {
81
+ id: "drop",
82
+ contextId: "context-1",
83
+ artifactKey: "slides:presentation:deck-2",
84
+ rank: "normal",
85
+ status: "active",
86
+ },
87
+ ],
88
+ },
89
+ { appId: "slides", resourceType: "presentation", resourceId: "deck-1" },
90
+ );
91
+ expect(memberships.map((membership) => membership.id)).toEqual(["keep"]);
92
+ expect(JSON.stringify(memberships)).not.toContain(
93
+ "slides:presentation:deck-1",
94
+ );
95
+ });
96
+
97
+ it("keeps only bounded structured safe previews from membership results", () => {
98
+ const preview = parseCreativeContextSafePreview({
99
+ type: "slides",
100
+ slideCount: 2,
101
+ slides: [
102
+ {
103
+ index: 1,
104
+ title: "Launch overview",
105
+ excerpt: "A concise first-slide preview.",
106
+ cloneReference: "private-blob:should-not-cross",
107
+ },
108
+ ],
109
+ privateMetadata: { handle: "opaque" },
110
+ });
111
+ expect(preview).toEqual({
112
+ type: "slides",
113
+ slideCount: 2,
114
+ slides: [
115
+ {
116
+ index: 1,
117
+ title: "Launch overview",
118
+ excerpt: "A concise first-slide preview.",
119
+ },
120
+ ],
121
+ });
122
+ expect(JSON.stringify(preview)).not.toMatch(/private-blob|opaque/);
123
+ });
124
+
125
+ it("preserves the approved source timestamp used to flag newer app versions", () => {
126
+ const [membership] = parseContextMemberships({
127
+ memberships: [
128
+ {
129
+ id: "membership-1",
130
+ contextId: "context-1",
131
+ publishedItemId: "item-1",
132
+ publishedItemVersionId: "version-1",
133
+ publishedItem: {
134
+ id: "item-1",
135
+ itemVersionId: "version-1",
136
+ title: "Launch deck",
137
+ kind: "slides-deck",
138
+ sourceModifiedAt: "2026-07-17T12:00:00.000Z",
139
+ },
140
+ nativeUpdateStatus: { state: "update-available" },
141
+ },
142
+ ],
143
+ });
144
+ expect(membership?.publishedItem?.sourceModifiedAt).toBe(
145
+ "2026-07-17T12:00:00.000Z",
146
+ );
147
+ expect(membership?.nativeUpdateStatus).toEqual({
148
+ state: "update-available",
149
+ });
150
+ });
151
+
152
+ it("keeps a bounded inert document block model for read-only rendering", () => {
153
+ const preview = parseCreativeContextSafePreview({
154
+ type: "document",
155
+ headings: ["Launch"],
156
+ excerpt: "A launch plan.",
157
+ blocks: [
158
+ { kind: "heading", level: 2, text: "Launch" },
159
+ { kind: "paragraph", text: "Ship it", html: "<script>bad()</script>" },
160
+ { kind: "unsupported", text: "Still plain text" },
161
+ ],
162
+ html: "<script>bad()</script>",
163
+ });
164
+
165
+ expect(preview).toEqual({
166
+ type: "document",
167
+ headings: ["Launch"],
168
+ excerpt: "A launch plan.",
169
+ blocks: [
170
+ { kind: "heading", level: 2, text: "Launch" },
171
+ { kind: "paragraph", text: "Ship it" },
172
+ { kind: "paragraph", text: "Still plain text" },
173
+ ],
174
+ });
175
+ expect(JSON.stringify(preview)).not.toContain("script");
176
+ });
177
+ });