@sanity/assist 4.3.2 → 4.4.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.
package/README.md CHANGED
@@ -999,6 +999,9 @@ prop can be used to parameterize Agent Actions on sanity client.
999
999
 
1000
1000
  #### Agent Action examples
1001
1001
 
1002
+ Below are some examples of agent action integration.
1003
+ For more, see [HOW-TO_USE](../studio/examples/agentActions/HOW-TO-USE.md)
1004
+
1002
1005
  ##### Fix spelling
1003
1006
 
1004
1007
  The following example adds a "Fix spelling" action to all fields and the document itself.
package/dist/index.d.mts CHANGED
@@ -157,6 +157,8 @@ export declare interface AssistFieldActionProps {
157
157
  * },
158
158
  * //...
159
159
  * })
160
+ *
161
+ * ```
160
162
  */
161
163
  schemaId: string
162
164
  /**
@@ -205,6 +207,15 @@ export declare interface AssistFieldActionProps {
205
207
  * ```
206
208
  */
207
209
  schemaType: SchemaType_2
210
+ /**
211
+ * Schema type of the parent field or array item holding this field.
212
+ *
213
+ * This can be undefined if the action was unable to resolve the parent type is excluded from AI Assist.
214
+ *
215
+ * @see schemaType
216
+ * @see documentSchemaType
217
+ */
218
+ parentSchemaType?: SchemaType_2
208
219
  }
209
220
 
210
221
  export declare interface AssistOptions {
@@ -532,7 +543,7 @@ declare interface PresetInstruction {
532
543
  prompt?: PromptTextBlock[]
533
544
  title?: string
534
545
  /**
535
- * String key from @sanity/icons IconMap
546
+ * String key from `@sanity/icons` IconMap
536
547
  */
537
548
  icon?: string
538
549
  /**
package/dist/index.d.ts CHANGED
@@ -157,6 +157,8 @@ export declare interface AssistFieldActionProps {
157
157
  * },
158
158
  * //...
159
159
  * })
160
+ *
161
+ * ```
160
162
  */
161
163
  schemaId: string
162
164
  /**
@@ -205,6 +207,15 @@ export declare interface AssistFieldActionProps {
205
207
  * ```
206
208
  */
207
209
  schemaType: SchemaType_2
210
+ /**
211
+ * Schema type of the parent field or array item holding this field.
212
+ *
213
+ * This can be undefined if the action was unable to resolve the parent type is excluded from AI Assist.
214
+ *
215
+ * @see schemaType
216
+ * @see documentSchemaType
217
+ */
218
+ parentSchemaType?: SchemaType_2
208
219
  }
209
220
 
210
221
  export declare interface AssistOptions {
@@ -532,7 +543,7 @@ declare interface PresetInstruction {
532
543
  prompt?: PromptTextBlock[]
533
544
  title?: string
534
545
  /**
535
- * String key from @sanity/icons IconMap
546
+ * String key from `@sanity/icons` IconMap
536
547
  */
537
548
  icon?: string
538
549
  /**
package/dist/index.esm.js CHANGED
@@ -400,6 +400,12 @@ function getTypeIcon(schemaType) {
400
400
  }
401
401
  return isType(schemaType, "slug") ? LinkIcon : isType(schemaType, "image") ? ImageIcon : schemaType.jsonType === "array" && isPortableTextArray(schemaType) ? BlockContentIcon : schemaType.jsonType === "array" ? OlistIcon : schemaType.jsonType === "object" ? BlockquoteIcon : schemaType.jsonType === "string" ? StringIcon : DocumentIcon;
402
402
  }
403
+ function asFieldRefsByTypePath(fieldRefs) {
404
+ return fieldRefs.reduce(
405
+ (acc, ref) => ({ ...acc, [ref.key]: ref }),
406
+ {}
407
+ );
408
+ }
403
409
  function getFieldRefsWithDocument(schemaType) {
404
410
  const fields = getFieldRefs(schemaType);
405
411
  return [
@@ -1029,7 +1035,7 @@ function useAssistDocumentContextValue(documentId, documentType) {
1029
1035
  } = useDocumentPane(), { draft, published, version } = editState || {}, assistableDocumentId = selectedReleaseId ? getVersionId(documentId, selectedReleaseId) : documentSchemaType.liveEdit ? documentId : getDraftId(documentId), documentIsNew = selectedReleaseId ? !version?._id : !draft?._id && !published?._id, documentIsAssistable = selectedReleaseId ? !!version : isDocAssistable(documentSchemaType, published, draft), { params } = useAiPaneRouter(), selectedPath = params[fieldPathParam], assistDocument = useStudioAssistDocument({
1030
1036
  documentId: assistableDocumentId,
1031
1037
  schemaType: documentSchemaType
1032
- }), { syntheticTasks, addSyntheticTask, removeSyntheticTask } = useSyntheticTasks(assistableDocumentId);
1038
+ }), { syntheticTasks, addSyntheticTask, removeSyntheticTask } = useSyntheticTasks(assistableDocumentId), fieldRefs = getFieldRefs(documentSchemaType), fieldRefsByTypePath = asFieldRefsByTypePath(fieldRefs);
1033
1039
  return useMemo(() => {
1034
1040
  const base = {
1035
1041
  assistableDocumentId,
@@ -1043,7 +1049,9 @@ function useAssistDocumentContextValue(documentId, documentType) {
1043
1049
  selectedPath,
1044
1050
  syntheticTasks,
1045
1051
  addSyntheticTask,
1046
- removeSyntheticTask
1052
+ removeSyntheticTask,
1053
+ fieldRefs,
1054
+ fieldRefsByTypePath
1047
1055
  };
1048
1056
  return assistDocument ? {
1049
1057
  ...base,
@@ -2959,7 +2967,8 @@ const assistFieldActions = {
2959
2967
  documentOnChange,
2960
2968
  documentSchemaType,
2961
2969
  selectedPath,
2962
- assistableDocumentId
2970
+ assistableDocumentId,
2971
+ fieldRefsByTypePath
2963
2972
  } = useAssistDocumentContext(), { value: docValue, formState } = useDocumentPane(), docValueRef = useRef(docValue), formStateRef = useRef(formState);
2964
2973
  formStateRef.current = formState;
2965
2974
  const currentUser = useCurrentUser(), isHidden = !assistDocument, pathKey = usePathKey(props.path), typePath = useTypePath(docValue, pathKey), assistDocumentId2 = assistDocument?._id, { requestRunInstruction } = useRequestRunInstruction({
@@ -3047,14 +3056,22 @@ const assistFieldActions = {
3047
3056
  path
3048
3057
  };
3049
3058
  }
3050
- ), []), customActions = useCustomFieldActions({
3059
+ ), []), parentSchemaType = useMemo(() => {
3060
+ if (props.path.length) {
3061
+ if (props.path.length === 1)
3062
+ return documentSchemaType;
3063
+ } else return;
3064
+ const parentPath = props.path.slice(0, -1), typePath2 = getTypePath(docValueRef.current, pathToString(parentPath));
3065
+ return typePath2 ? fieldRefsByTypePath[typePath2]?.schemaType : void 0;
3066
+ }, [fieldRefsByTypePath, props.path, documentSchemaType]), customActions = useCustomFieldActions({
3051
3067
  actionType: props.path.length ? "field" : "document",
3052
3068
  documentIdForAction: assistableDocumentId,
3053
3069
  schemaType,
3054
3070
  documentSchemaType,
3055
3071
  path: props.path,
3056
3072
  getDocumentValue,
3057
- getConditionalPaths
3073
+ getConditionalPaths,
3074
+ parentSchemaType
3058
3075
  }), manageInstructionsItem = useMemo(
3059
3076
  () => ({
3060
3077
  type: "action",