@agent-native/creative-context 0.4.0 → 0.5.1

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 +7 -2
  34. package/dist/client/CreativeContextChip.d.ts.map +1 -1
  35. package/dist/client/CreativeContextChip.js +42 -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 +2 -2
  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 +59 -0
  147. package/src/client/CreativeContextChip.tsx +95 -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
@@ -6,6 +6,9 @@ import {
6
6
  DropdownMenuItem,
7
7
  DropdownMenuLabel,
8
8
  DropdownMenuSeparator,
9
+ DropdownMenuSub,
10
+ DropdownMenuSubContent,
11
+ DropdownMenuSubTrigger,
9
12
  DropdownMenuTrigger,
10
13
  } from "@agent-native/toolkit/ui";
11
14
  import {
@@ -16,28 +19,68 @@ import {
16
19
  } from "@tabler/icons-react";
17
20
 
18
21
  import type { ContextPackSummary } from "../types.js";
19
- import { useCreativeContextPacks } from "./actions.js";
22
+ import {
23
+ parseCreativeContexts,
24
+ useCreativeContexts,
25
+ useCreativeContextPacks,
26
+ type CreativeContextSummary,
27
+ } from "./actions.js";
20
28
  import { useCreativeContextState } from "./application-state.js";
21
29
  import type { CreativeContextApplicationState } from "./application-state.js";
22
30
 
23
31
  export interface CreativeContextChipProps {
24
32
  state: CreativeContextApplicationState;
25
33
  packs?: ContextPackSummary[];
34
+ contexts?: CreativeContextSummary[];
26
35
  className?: string;
27
36
  }
28
37
 
38
+ export type CreativeContextChipSelection =
39
+ | "off"
40
+ | "pinned-pack"
41
+ | "selected-context"
42
+ | "automatic";
43
+
44
+ export function resolveCreativeContextChipSelection(
45
+ state: CreativeContextApplicationState,
46
+ ): CreativeContextChipSelection {
47
+ if (state.contextMode === "off") return "off";
48
+ if (state.pinnedPackId) return "pinned-pack";
49
+ if (state.selectedContextId) return "selected-context";
50
+ return "automatic";
51
+ }
52
+
53
+ export function hasCreativeContextConfiguration(
54
+ packs: ReadonlyArray<Pick<ContextPackSummary, "memberCount">>,
55
+ contexts: ReadonlyArray<Pick<CreativeContextSummary, "memberCount">>,
56
+ ): boolean {
57
+ return (
58
+ packs.some((pack) => pack.memberCount > 0) ||
59
+ contexts.some((context) => context.memberCount > 0)
60
+ );
61
+ }
62
+
29
63
  export function CreativeContextChip({
30
64
  state,
31
65
  packs = [],
66
+ contexts = [],
32
67
  className,
33
68
  }: CreativeContextChipProps) {
34
69
  const t = useT();
35
70
  const packId = state.pinnedPackId ?? state.currentPackId;
36
71
  const pack = packs.find((candidate) => candidate.id === packId);
72
+ const context = contexts.find(
73
+ (candidate) => candidate.id === state.selectedContextId,
74
+ );
75
+ const selection = resolveCreativeContextChipSelection(state);
37
76
  const label =
38
- state.contextMode === "off"
77
+ selection === "off"
39
78
  ? t("creativeContext.off")
40
- : pack?.name || (packId ? packId : t("creativeContext.automatic"));
79
+ : selection === "pinned-pack"
80
+ ? pack?.name || packId
81
+ : selection === "selected-context"
82
+ ? context?.name || state.selectedContextId
83
+ : t("creativeContext.automatic");
41
84
 
42
85
  return (
43
86
  <Badge
@@ -65,12 +108,17 @@ export function CreativeContextComposerChip({
65
108
  const t = useT();
66
109
  const contextState = useCreativeContextState();
67
110
  const packsQuery = useCreativeContextPacks();
111
+ const contextsQuery = useCreativeContexts();
68
112
  const packs = packsQuery.data?.packs ?? [];
113
+ const contexts = parseCreativeContexts(contextsQuery.data);
114
+
115
+ if (!hasCreativeContextConfiguration(packs, contexts)) return null;
69
116
 
70
117
  async function selectAutomatic() {
71
118
  await contextState.setState({
72
119
  ...contextState.state,
73
120
  contextMode: "auto",
121
+ selectedContextId: null,
74
122
  pinnedPackId: null,
75
123
  });
76
124
  }
@@ -78,6 +126,7 @@ export function CreativeContextComposerChip({
78
126
  async function selectOff() {
79
127
  await contextState.setState({
80
128
  contextMode: "off",
129
+ selectedContextId: null,
81
130
  currentPackId: null,
82
131
  pinnedPackId: null,
83
132
  });
@@ -87,10 +136,20 @@ export function CreativeContextComposerChip({
87
136
  await contextState.setState({
88
137
  ...contextState.state,
89
138
  contextMode: "auto",
139
+ selectedContextId: null,
90
140
  pinnedPackId: packId,
91
141
  });
92
142
  }
93
143
 
144
+ async function selectContext(contextId: string) {
145
+ await contextState.setState({
146
+ ...contextState.state,
147
+ contextMode: "auto",
148
+ selectedContextId: contextId,
149
+ pinnedPackId: null,
150
+ });
151
+ }
152
+
94
153
  return (
95
154
  <div className={className ?? "px-3 pb-1"}>
96
155
  <DropdownMenu>
@@ -102,6 +161,7 @@ export function CreativeContextComposerChip({
102
161
  <CreativeContextChip
103
162
  state={contextState.state}
104
163
  packs={packs}
164
+ contexts={contexts}
105
165
  className="max-w-full cursor-pointer bg-background/80"
106
166
  />
107
167
  </button>
@@ -112,7 +172,8 @@ export function CreativeContextComposerChip({
112
172
  </DropdownMenuLabel>
113
173
  <DropdownMenuItem onSelect={() => void selectAutomatic()}>
114
174
  {contextState.state.contextMode === "auto" &&
115
- !contextState.state.pinnedPackId ? (
175
+ !contextState.state.pinnedPackId &&
176
+ !contextState.state.selectedContextId ? (
116
177
  <IconCheck />
117
178
  ) : (
118
179
  <IconBrain />
@@ -127,27 +188,47 @@ export function CreativeContextComposerChip({
127
188
  )}
128
189
  {t("creativeContext.off")}
129
190
  </DropdownMenuItem>
130
- {packs.length ? (
191
+ {contexts.length ? (
131
192
  <>
132
193
  <DropdownMenuSeparator />
133
- <DropdownMenuLabel>
134
- {t("creativeContext.packsTitle")}
135
- </DropdownMenuLabel>
136
- {packs.slice(0, 8).map((pack) => (
194
+ <DropdownMenuLabel>Contexts</DropdownMenuLabel>
195
+ {contexts.slice(0, 8).map((context) => (
137
196
  <DropdownMenuItem
138
- key={pack.id}
139
- onSelect={() => void selectPack(pack.id)}
197
+ key={context.id}
198
+ onSelect={() => void selectContext(context.id)}
140
199
  >
141
- {contextState.state.pinnedPackId === pack.id ? (
200
+ {contextState.state.selectedContextId === context.id ? (
142
201
  <IconCheck />
143
202
  ) : (
144
- <IconPin />
203
+ <IconBrain />
145
204
  )}
146
- <span className="truncate">{pack.name}</span>
205
+ <span className="truncate">{context.name}</span>
147
206
  </DropdownMenuItem>
148
207
  ))}
149
208
  </>
150
209
  ) : null}
210
+ {packs.length ? (
211
+ <DropdownMenuSub>
212
+ <DropdownMenuSubTrigger>
213
+ Advanced: pin an exact pack
214
+ </DropdownMenuSubTrigger>
215
+ <DropdownMenuSubContent className="w-64">
216
+ {packs.slice(0, 8).map((pack) => (
217
+ <DropdownMenuItem
218
+ key={pack.id}
219
+ onSelect={() => void selectPack(pack.id)}
220
+ >
221
+ {contextState.state.pinnedPackId === pack.id ? (
222
+ <IconCheck />
223
+ ) : (
224
+ <IconPin />
225
+ )}
226
+ <span className="truncate">{pack.name}</span>
227
+ </DropdownMenuItem>
228
+ ))}
229
+ </DropdownMenuSubContent>
230
+ </DropdownMenuSub>
231
+ ) : null}
151
232
  <DropdownMenuSeparator />
152
233
  <DropdownMenuItem asChild>
153
234
  <a href={href}>