@fluidframework/ai-collab 2.53.0-350190 → 2.53.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/CHANGELOG.md +4 -0
- package/dist/explicit-strategy/typeGeneration.js +1 -1
- package/dist/explicit-strategy/typeGeneration.js.map +1 -1
- package/lib/explicit-strategy/typeGeneration.js +1 -1
- package/lib/explicit-strategy/typeGeneration.js.map +1 -1
- package/package.json +9 -9
- package/src/explicit-strategy/typeGeneration.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -252,7 +252,7 @@ function getTypeForAllowedTypes(definitionMap, typeMap, insertSet, modifyFieldSe
|
|
|
252
252
|
return getOrCreateType(definitionMap, typeMap, insertSet, modifyFieldSet, modifyTypeSet, name);
|
|
253
253
|
}),
|
|
254
254
|
];
|
|
255
|
-
(0, internal_1.assert)(hasAtLeastTwo(types),
|
|
255
|
+
(0, internal_1.assert)(hasAtLeastTwo(types), 0xc1b /* Expected at least two types */);
|
|
256
256
|
return zod_1.z.union(types);
|
|
257
257
|
}
|
|
258
258
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typeGeneration.js","sourceRoot":"","sources":["../../src/explicit-strategy/typeGeneration.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport {\n\tFieldKind,\n\tgetSimpleSchema,\n\tNodeKind,\n\tTree,\n\tValueSchema,\n} from \"@fluidframework/tree/internal\";\nimport type {\n\tSimpleFieldSchema,\n\tSimpleNodeSchema,\n\tSimpleTreeSchema,\n\tTreeNode,\n} from \"@fluidframework/tree/internal\";\nimport { z, type ZodTypeAny } from \"zod\";\n\nimport { objectIdKey, typeField } from \"./agentEditTypes.js\";\nimport { fail, getOrCreate, mapIterable } from \"./utils.js\";\n\n/**\n * Zod Object type used to represent & validate the ObjectTarget type within a {@link TreeEdit}.\n * @remarks this is used as a component with {@link generateGenericEditTypes} to produce the final zod validation objects.\n */\nconst objectTarget = z\n\t.object({\n\t\ttarget: z\n\t\t\t.string()\n\t\t\t.describe(\n\t\t\t\t`The id of the object (as specified by the object's ${objectIdKey} property) that is being referenced`,\n\t\t\t),\n\t})\n\t.describe(\n\t\t\"A pointer to a specific object node in the tree, identified by the target object's Id.\",\n\t);\n/**\n * Zod Object type used to represent & validate the ObjectPlace type within a {@link TreeEdit}.\n * @remarks this is used as a component with {@link generateGenericEditTypes} to produce the final zod validation objects.\n */\nconst objectPlace = z\n\t.object({\n\t\ttype: z.enum([\"objectPlace\"]),\n\t\ttarget: z\n\t\t\t.string()\n\t\t\t.describe(\n\t\t\t\t`The id (${objectIdKey}) of the object that the new/moved object should be placed relative to. This must be the id of an object that already existed in the tree content that was originally supplied.`,\n\t\t\t),\n\t\tplace: z\n\t\t\t.enum([\"before\", \"after\"])\n\t\t\t.describe(\n\t\t\t\t\"Where the new/moved object will be relative to the target object - either just before or just after\",\n\t\t\t),\n\t})\n\t.describe(\n\t\t\"A pointer to a location either just before or just after an object that is in an array\",\n\t);\n/**\n * Zod Object type used to represent & validate the ArrayPlace type within a {@link TreeEdit}.\n * @remarks this is used as a component with {@link generateGenericEditTypes} to produce the final zod validation objects.\n */\nconst arrayPlace = z\n\t.object({\n\t\ttype: z.enum([\"arrayPlace\"]),\n\t\tparentId: z\n\t\t\t.string()\n\t\t\t.describe(\n\t\t\t\t`The id (${objectIdKey}) of the parent object of the array. This must be the id of an object that already existed in the tree content that was originally supplied.`,\n\t\t\t),\n\t\tfield: z.string().describe(\"The key of the array to insert into\"),\n\t\tlocation: z\n\t\t\t.enum([\"start\", \"end\"])\n\t\t\t.describe(\"Where to insert into the array - either the start or the end\"),\n\t})\n\t.describe(\n\t\t`either the \"start\" or \"end\" of an array, as specified by a \"parent\" ObjectTarget and a \"field\" name under which the array is stored (useful for prepending or appending)`,\n\t);\n/**\n * Zod Object type used to represent & validate the Range type within a {@link TreeEdit}.\n * @remarks this is used as a component with {@link generateGenericEditTypes} to produce the final zod validation objects.\n */\nconst range = z\n\t.object({\n\t\tfrom: objectPlace,\n\t\tto: objectPlace,\n\t})\n\t.describe(\n\t\t'A range of objects in the same array specified by a \"from\" and \"to\" Place. The \"to\" and \"from\" objects MUST be in the same array.',\n\t);\n/**\n * Cache used to prevent repeatedly generating the same Zod validation objects for the same {@link SimpleTreeSchema} as generate propts for repeated calls to an LLM\n */\nconst cache = new WeakMap<SimpleTreeSchema, ReturnType<typeof generateGenericEditTypes>>();\n\n/**\n * Generates a set of ZOD validation objects for the various types of data that can be put into the provided {@link SimpleTreeSchema}\n * and then uses those sets to generate an all-encompassing ZOD object for each type of {@link TreeEdit} that can validate any of the types of data that can be put into the tree.\n *\n * @returns a Record of schema names to Zod validation objects, and the name of the root schema used to encompass all of the other schemas.\n *\n * @remarks The return type of this function is designed to work with Typechat's createZodJsonValidator as well as be used as the JSON schema for OpenAi's structured output response format.\n */\nexport function generateGenericEditTypes(\n\tschema: SimpleTreeSchema,\n\tgenerateDomainTypes: boolean,\n): [Record<string, ZodTypeAny>, root: string] {\n\treturn getOrCreate(cache, schema, () => {\n\t\tconst insertSet = new Set<string>();\n\t\tconst modifyFieldSet = new Set<string>();\n\t\tconst modifyTypeSet = new Set<string>();\n\t\tconst typeMap = new Map<string, ZodTypeAny>();\n\n\t\tfor (const name of schema.definitions.keys()) {\n\t\t\tgetOrCreateType(\n\t\t\t\tschema.definitions,\n\t\t\t\ttypeMap,\n\t\t\t\tinsertSet,\n\t\t\t\tmodifyFieldSet,\n\t\t\t\tmodifyTypeSet,\n\t\t\t\tname,\n\t\t\t);\n\t\t}\n\t\tfunction getType(allowedTypes: ReadonlySet<string>): ZodTypeAny {\n\t\t\tswitch (allowedTypes.size) {\n\t\t\t\tcase 0: {\n\t\t\t\t\treturn z.never();\n\t\t\t\t}\n\t\t\t\tcase 1: {\n\t\t\t\t\treturn (\n\t\t\t\t\t\ttypeMap.get(tryGetSingleton(allowedTypes) ?? fail(\"Expected singleton\")) ??\n\t\t\t\t\t\tfail(\"Unknown type\")\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\tconst types = Array.from(\n\t\t\t\t\t\tallowedTypes,\n\t\t\t\t\t\t(name) => typeMap.get(name) ?? fail(\"Unknown type\"),\n\t\t\t\t\t);\n\t\t\t\t\tassert(hasAtLeastTwo(types), 0xa7d /* Expected at least two types */);\n\t\t\t\t\treturn z.union(types);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst doesSchemaHaveArray = insertSet.size > 0;\n\n\t\tconst modify = z\n\t\t\t.object({\n\t\t\t\ttype: z.enum([\"modify\"]),\n\t\t\t\texplanation: z.string().describe(editDescription),\n\t\t\t\ttarget: objectTarget,\n\t\t\t\tfield: z.enum([...modifyFieldSet] as [string, ...string[]]), // Modify with appropriate fields\n\t\t\t\tmodification: generateDomainTypes\n\t\t\t\t\t? getType(modifyTypeSet)\n\t\t\t\t\t: z.any().describe(\"Domain-specific content here\"),\n\t\t\t})\n\t\t\t.describe(\"Sets a field on a specific ObjectTarget.\");\n\n\t\tconst remove = z\n\t\t\t.object({\n\t\t\t\ttype: z.literal(\"remove\"),\n\t\t\t\texplanation: z.string().describe(editDescription),\n\t\t\t\tsource: z.union([objectTarget, range]),\n\t\t\t})\n\t\t\t.describe(\"Deletes an object or Range of objects from the tree.\");\n\n\t\tconst insert = z\n\t\t\t.object({\n\t\t\t\ttype: z.literal(\"insert\"),\n\t\t\t\texplanation: z.string().describe(editDescription),\n\t\t\t\tcontent: generateDomainTypes\n\t\t\t\t\t? getType(insertSet)\n\t\t\t\t\t: z.any().describe(\"Domain-specific content here\"),\n\t\t\t\tdestination: z.union([arrayPlace, objectPlace]),\n\t\t\t})\n\t\t\t.describe(\"Inserts a new object at a specific Place or ArrayPlace.\");\n\n\t\tconst move = z\n\t\t\t.object({\n\t\t\t\ttype: z.literal(\"move\"),\n\t\t\t\texplanation: z.string().describe(editDescription),\n\t\t\t\tsource: z.union([objectTarget, range]),\n\t\t\t\tdestination: z.union([arrayPlace, objectPlace]),\n\t\t\t})\n\t\t\t.describe(\"Moves an object or Range of objects to a new Place or ArrayPlace.\");\n\n\t\tconst typeRecord: Record<string, ZodTypeAny> = {\n\t\t\tObjectTarget: objectTarget,\n\t\t\tModify: modify,\n\t\t};\n\n\t\ttypeRecord.Modify = modify;\n\n\t\tif (doesSchemaHaveArray) {\n\t\t\ttypeRecord.ObjectPlace = objectPlace;\n\t\t\ttypeRecord.ArrayPlace = arrayPlace;\n\t\t\ttypeRecord.Range = range;\n\t\t\ttypeRecord.Insert = insert;\n\t\t\ttypeRecord.Remove = remove;\n\t\t\ttypeRecord.Move = move;\n\t\t}\n\n\t\tconst editTypes = doesSchemaHaveArray\n\t\t\t? ([insert, remove, move, modify, z.null()] as const)\n\t\t\t: ([modify, z.null()] as const);\n\n\t\tconst editWrapper = z.object({\n\t\t\tedit: z\n\t\t\t\t.union(editTypes)\n\t\t\t\t.describe(\"The next edit to apply to the tree, or null if the task is complete.\"),\n\t\t});\n\t\ttypeRecord.EditWrapper = editWrapper;\n\n\t\treturn [typeRecord, \"EditWrapper\"];\n\t});\n}\nconst editDescription =\n\t\"A description of what this edit is meant to accomplish in human readable English\";\nfunction getOrCreateType(\n\tdefinitionMap: ReadonlyMap<string, SimpleNodeSchema>,\n\ttypeMap: Map<string, ZodTypeAny>,\n\tinsertSet: Set<string>,\n\tmodifyFieldSet: Set<string>,\n\tmodifyTypeSet: Set<string>,\n\tdefinition: string,\n): ZodTypeAny {\n\treturn getOrCreate(typeMap, definition, () => {\n\t\tconst nodeSchema = definitionMap.get(definition) ?? fail(\"Unexpected definition\");\n\t\tswitch (nodeSchema.kind) {\n\t\t\tcase NodeKind.Object: {\n\t\t\t\tfor (const [key, field] of nodeSchema.fields) {\n\t\t\t\t\t// TODO: Remove when AI better\n\t\t\t\t\tif (\n\t\t\t\t\t\tArray.from(\n\t\t\t\t\t\t\tfield.allowedTypesIdentifiers,\n\t\t\t\t\t\t\t(n) => definitionMap.get(n) ?? fail(\"Unknown definition\"),\n\t\t\t\t\t\t).some((n) => n.kind === NodeKind.Array)\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tmodifyFieldSet.add(key);\n\t\t\t\t\tfor (const type of field.allowedTypesIdentifiers) {\n\t\t\t\t\t\tmodifyTypeSet.add(type);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\tconst properties = Object.fromEntries(\n\t\t\t\t\t[...nodeSchema.fields]\n\t\t\t\t\t\t.map(([key, field]) => {\n\t\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tgetOrCreateTypeForField(\n\t\t\t\t\t\t\t\t\tdefinitionMap,\n\t\t\t\t\t\t\t\t\ttypeMap,\n\t\t\t\t\t\t\t\t\tinsertSet,\n\t\t\t\t\t\t\t\t\tmodifyFieldSet,\n\t\t\t\t\t\t\t\t\tmodifyTypeSet,\n\t\t\t\t\t\t\t\t\tfield,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t];\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.filter(([, value]) => value !== undefined),\n\t\t\t\t);\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\t\tproperties[typeField] = z.enum([definition]);\n\t\t\t\treturn z.object(properties);\n\t\t\t}\n\t\t\tcase NodeKind.Array: {\n\t\t\t\tfor (const [name] of Array.from(\n\t\t\t\t\tnodeSchema.allowedTypesIdentifiers,\n\t\t\t\t\t(n): [string, SimpleNodeSchema] => [\n\t\t\t\t\t\tn,\n\t\t\t\t\t\tdefinitionMap.get(n) ?? fail(\"Unknown definition\"),\n\t\t\t\t\t],\n\t\t\t\t).filter(\n\t\t\t\t\t([_, schema]) => schema.kind === NodeKind.Object || schema.kind === NodeKind.Leaf,\n\t\t\t\t)) {\n\t\t\t\t\tinsertSet.add(name);\n\t\t\t\t}\n\t\t\t\treturn z.array(\n\t\t\t\t\tgetTypeForAllowedTypes(\n\t\t\t\t\t\tdefinitionMap,\n\t\t\t\t\t\ttypeMap,\n\t\t\t\t\t\tinsertSet,\n\t\t\t\t\t\tmodifyFieldSet,\n\t\t\t\t\t\tmodifyTypeSet,\n\t\t\t\t\t\tnodeSchema.allowedTypesIdentifiers,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\tcase NodeKind.Leaf: {\n\t\t\t\tswitch (nodeSchema.leafKind) {\n\t\t\t\t\tcase ValueSchema.Boolean: {\n\t\t\t\t\t\treturn z.boolean();\n\t\t\t\t\t}\n\t\t\t\t\tcase ValueSchema.Number: {\n\t\t\t\t\t\treturn z.number();\n\t\t\t\t\t}\n\t\t\t\t\tcase ValueSchema.String: {\n\t\t\t\t\t\treturn z.string();\n\t\t\t\t\t}\n\t\t\t\t\tcase ValueSchema.Null: {\n\t\t\t\t\t\treturn z.null();\n\t\t\t\t\t}\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\tthrow new Error(`Unsupported leaf kind ${NodeKind[nodeSchema.leafKind]}.`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tthrow new Error(`Unsupported node kind ${NodeKind[nodeSchema.kind]}.`);\n\t\t\t}\n\t\t}\n\t});\n}\nfunction getOrCreateTypeForField(\n\tdefinitionMap: ReadonlyMap<string, SimpleNodeSchema>,\n\ttypeMap: Map<string, ZodTypeAny>,\n\tinsertSet: Set<string>,\n\tmodifyFieldSet: Set<string>,\n\tmodifyTypeSet: Set<string>,\n\tfieldSchema: SimpleFieldSchema,\n): ZodTypeAny | undefined {\n\tswitch (fieldSchema.kind) {\n\t\tcase FieldKind.Required: {\n\t\t\treturn getTypeForAllowedTypes(\n\t\t\t\tdefinitionMap,\n\t\t\t\ttypeMap,\n\t\t\t\tinsertSet,\n\t\t\t\tmodifyFieldSet,\n\t\t\t\tmodifyTypeSet,\n\t\t\t\tfieldSchema.allowedTypesIdentifiers,\n\t\t\t);\n\t\t}\n\t\tcase FieldKind.Optional: {\n\t\t\treturn z.union([\n\t\t\t\tz.null(),\n\t\t\t\tgetTypeForAllowedTypes(\n\t\t\t\t\tdefinitionMap,\n\t\t\t\t\ttypeMap,\n\t\t\t\t\tinsertSet,\n\t\t\t\t\tmodifyFieldSet,\n\t\t\t\t\tmodifyTypeSet,\n\t\t\t\t\tfieldSchema.allowedTypesIdentifiers,\n\t\t\t\t),\n\t\t\t]);\n\t\t}\n\t\tcase FieldKind.Identifier: {\n\t\t\treturn undefined;\n\t\t}\n\t\tdefault: {\n\t\t\tthrow new Error(`Unsupported field kind ${NodeKind[fieldSchema.kind]}.`);\n\t\t}\n\t}\n}\n\nfunction getTypeForAllowedTypes(\n\tdefinitionMap: ReadonlyMap<string, SimpleNodeSchema>,\n\ttypeMap: Map<string, ZodTypeAny>,\n\tinsertSet: Set<string>,\n\tmodifyFieldSet: Set<string>,\n\tmodifyTypeSet: Set<string>,\n\tallowedTypes: ReadonlySet<string>,\n): ZodTypeAny {\n\tconst single = tryGetSingleton(allowedTypes);\n\tif (single === undefined) {\n\t\tconst types = [\n\t\t\t...mapIterable(allowedTypes, (name) => {\n\t\t\t\treturn getOrCreateType(\n\t\t\t\t\tdefinitionMap,\n\t\t\t\t\ttypeMap,\n\t\t\t\t\tinsertSet,\n\t\t\t\t\tmodifyFieldSet,\n\t\t\t\t\tmodifyTypeSet,\n\t\t\t\t\tname,\n\t\t\t\t);\n\t\t\t}),\n\t\t];\n\t\tassert(hasAtLeastTwo(types), 0xa7e /* Expected at least two types */);\n\t\treturn z.union(types);\n\t} else {\n\t\treturn getOrCreateType(\n\t\t\tdefinitionMap,\n\t\t\ttypeMap,\n\t\t\tinsertSet,\n\t\t\tmodifyFieldSet,\n\t\t\tmodifyTypeSet,\n\t\t\tsingle,\n\t\t);\n\t}\n}\n\nfunction tryGetSingleton<T>(set: ReadonlySet<T>): T | undefined {\n\tif (set.size === 1) {\n\t\tfor (const item of set) {\n\t\t\treturn item;\n\t\t}\n\t}\n}\n\nfunction hasAtLeastTwo<T>(array: T[]): array is [T, T, ...T[]] {\n\treturn array.length >= 2;\n}\n\n/**\n * Determines if the provided {@link TreeNode} contains an array schema.\n */\nexport function doesNodeContainArraySchema(node: TreeNode): boolean {\n\tconst schema = Tree.schema(node);\n\tconst simpleSchema = getSimpleSchema(schema);\n\tfor (const [, nodeSchema] of simpleSchema.definitions) {\n\t\tif (nodeSchema.kind === NodeKind.Array) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"typeGeneration.js","sourceRoot":"","sources":["../../src/explicit-strategy/typeGeneration.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport {\n\tFieldKind,\n\tgetSimpleSchema,\n\tNodeKind,\n\tTree,\n\tValueSchema,\n} from \"@fluidframework/tree/internal\";\nimport type {\n\tSimpleFieldSchema,\n\tSimpleNodeSchema,\n\tSimpleTreeSchema,\n\tTreeNode,\n} from \"@fluidframework/tree/internal\";\nimport { z, type ZodTypeAny } from \"zod\";\n\nimport { objectIdKey, typeField } from \"./agentEditTypes.js\";\nimport { fail, getOrCreate, mapIterable } from \"./utils.js\";\n\n/**\n * Zod Object type used to represent & validate the ObjectTarget type within a {@link TreeEdit}.\n * @remarks this is used as a component with {@link generateGenericEditTypes} to produce the final zod validation objects.\n */\nconst objectTarget = z\n\t.object({\n\t\ttarget: z\n\t\t\t.string()\n\t\t\t.describe(\n\t\t\t\t`The id of the object (as specified by the object's ${objectIdKey} property) that is being referenced`,\n\t\t\t),\n\t})\n\t.describe(\n\t\t\"A pointer to a specific object node in the tree, identified by the target object's Id.\",\n\t);\n/**\n * Zod Object type used to represent & validate the ObjectPlace type within a {@link TreeEdit}.\n * @remarks this is used as a component with {@link generateGenericEditTypes} to produce the final zod validation objects.\n */\nconst objectPlace = z\n\t.object({\n\t\ttype: z.enum([\"objectPlace\"]),\n\t\ttarget: z\n\t\t\t.string()\n\t\t\t.describe(\n\t\t\t\t`The id (${objectIdKey}) of the object that the new/moved object should be placed relative to. This must be the id of an object that already existed in the tree content that was originally supplied.`,\n\t\t\t),\n\t\tplace: z\n\t\t\t.enum([\"before\", \"after\"])\n\t\t\t.describe(\n\t\t\t\t\"Where the new/moved object will be relative to the target object - either just before or just after\",\n\t\t\t),\n\t})\n\t.describe(\n\t\t\"A pointer to a location either just before or just after an object that is in an array\",\n\t);\n/**\n * Zod Object type used to represent & validate the ArrayPlace type within a {@link TreeEdit}.\n * @remarks this is used as a component with {@link generateGenericEditTypes} to produce the final zod validation objects.\n */\nconst arrayPlace = z\n\t.object({\n\t\ttype: z.enum([\"arrayPlace\"]),\n\t\tparentId: z\n\t\t\t.string()\n\t\t\t.describe(\n\t\t\t\t`The id (${objectIdKey}) of the parent object of the array. This must be the id of an object that already existed in the tree content that was originally supplied.`,\n\t\t\t),\n\t\tfield: z.string().describe(\"The key of the array to insert into\"),\n\t\tlocation: z\n\t\t\t.enum([\"start\", \"end\"])\n\t\t\t.describe(\"Where to insert into the array - either the start or the end\"),\n\t})\n\t.describe(\n\t\t`either the \"start\" or \"end\" of an array, as specified by a \"parent\" ObjectTarget and a \"field\" name under which the array is stored (useful for prepending or appending)`,\n\t);\n/**\n * Zod Object type used to represent & validate the Range type within a {@link TreeEdit}.\n * @remarks this is used as a component with {@link generateGenericEditTypes} to produce the final zod validation objects.\n */\nconst range = z\n\t.object({\n\t\tfrom: objectPlace,\n\t\tto: objectPlace,\n\t})\n\t.describe(\n\t\t'A range of objects in the same array specified by a \"from\" and \"to\" Place. The \"to\" and \"from\" objects MUST be in the same array.',\n\t);\n/**\n * Cache used to prevent repeatedly generating the same Zod validation objects for the same {@link SimpleTreeSchema} as generate propts for repeated calls to an LLM\n */\nconst cache = new WeakMap<SimpleTreeSchema, ReturnType<typeof generateGenericEditTypes>>();\n\n/**\n * Generates a set of ZOD validation objects for the various types of data that can be put into the provided {@link SimpleTreeSchema}\n * and then uses those sets to generate an all-encompassing ZOD object for each type of {@link TreeEdit} that can validate any of the types of data that can be put into the tree.\n *\n * @returns a Record of schema names to Zod validation objects, and the name of the root schema used to encompass all of the other schemas.\n *\n * @remarks The return type of this function is designed to work with Typechat's createZodJsonValidator as well as be used as the JSON schema for OpenAi's structured output response format.\n */\nexport function generateGenericEditTypes(\n\tschema: SimpleTreeSchema,\n\tgenerateDomainTypes: boolean,\n): [Record<string, ZodTypeAny>, root: string] {\n\treturn getOrCreate(cache, schema, () => {\n\t\tconst insertSet = new Set<string>();\n\t\tconst modifyFieldSet = new Set<string>();\n\t\tconst modifyTypeSet = new Set<string>();\n\t\tconst typeMap = new Map<string, ZodTypeAny>();\n\n\t\tfor (const name of schema.definitions.keys()) {\n\t\t\tgetOrCreateType(\n\t\t\t\tschema.definitions,\n\t\t\t\ttypeMap,\n\t\t\t\tinsertSet,\n\t\t\t\tmodifyFieldSet,\n\t\t\t\tmodifyTypeSet,\n\t\t\t\tname,\n\t\t\t);\n\t\t}\n\t\tfunction getType(allowedTypes: ReadonlySet<string>): ZodTypeAny {\n\t\t\tswitch (allowedTypes.size) {\n\t\t\t\tcase 0: {\n\t\t\t\t\treturn z.never();\n\t\t\t\t}\n\t\t\t\tcase 1: {\n\t\t\t\t\treturn (\n\t\t\t\t\t\ttypeMap.get(tryGetSingleton(allowedTypes) ?? fail(\"Expected singleton\")) ??\n\t\t\t\t\t\tfail(\"Unknown type\")\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\tconst types = Array.from(\n\t\t\t\t\t\tallowedTypes,\n\t\t\t\t\t\t(name) => typeMap.get(name) ?? fail(\"Unknown type\"),\n\t\t\t\t\t);\n\t\t\t\t\tassert(hasAtLeastTwo(types), 0xa7d /* Expected at least two types */);\n\t\t\t\t\treturn z.union(types);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst doesSchemaHaveArray = insertSet.size > 0;\n\n\t\tconst modify = z\n\t\t\t.object({\n\t\t\t\ttype: z.enum([\"modify\"]),\n\t\t\t\texplanation: z.string().describe(editDescription),\n\t\t\t\ttarget: objectTarget,\n\t\t\t\tfield: z.enum([...modifyFieldSet] as [string, ...string[]]), // Modify with appropriate fields\n\t\t\t\tmodification: generateDomainTypes\n\t\t\t\t\t? getType(modifyTypeSet)\n\t\t\t\t\t: z.any().describe(\"Domain-specific content here\"),\n\t\t\t})\n\t\t\t.describe(\"Sets a field on a specific ObjectTarget.\");\n\n\t\tconst remove = z\n\t\t\t.object({\n\t\t\t\ttype: z.literal(\"remove\"),\n\t\t\t\texplanation: z.string().describe(editDescription),\n\t\t\t\tsource: z.union([objectTarget, range]),\n\t\t\t})\n\t\t\t.describe(\"Deletes an object or Range of objects from the tree.\");\n\n\t\tconst insert = z\n\t\t\t.object({\n\t\t\t\ttype: z.literal(\"insert\"),\n\t\t\t\texplanation: z.string().describe(editDescription),\n\t\t\t\tcontent: generateDomainTypes\n\t\t\t\t\t? getType(insertSet)\n\t\t\t\t\t: z.any().describe(\"Domain-specific content here\"),\n\t\t\t\tdestination: z.union([arrayPlace, objectPlace]),\n\t\t\t})\n\t\t\t.describe(\"Inserts a new object at a specific Place or ArrayPlace.\");\n\n\t\tconst move = z\n\t\t\t.object({\n\t\t\t\ttype: z.literal(\"move\"),\n\t\t\t\texplanation: z.string().describe(editDescription),\n\t\t\t\tsource: z.union([objectTarget, range]),\n\t\t\t\tdestination: z.union([arrayPlace, objectPlace]),\n\t\t\t})\n\t\t\t.describe(\"Moves an object or Range of objects to a new Place or ArrayPlace.\");\n\n\t\tconst typeRecord: Record<string, ZodTypeAny> = {\n\t\t\tObjectTarget: objectTarget,\n\t\t\tModify: modify,\n\t\t};\n\n\t\ttypeRecord.Modify = modify;\n\n\t\tif (doesSchemaHaveArray) {\n\t\t\ttypeRecord.ObjectPlace = objectPlace;\n\t\t\ttypeRecord.ArrayPlace = arrayPlace;\n\t\t\ttypeRecord.Range = range;\n\t\t\ttypeRecord.Insert = insert;\n\t\t\ttypeRecord.Remove = remove;\n\t\t\ttypeRecord.Move = move;\n\t\t}\n\n\t\tconst editTypes = doesSchemaHaveArray\n\t\t\t? ([insert, remove, move, modify, z.null()] as const)\n\t\t\t: ([modify, z.null()] as const);\n\n\t\tconst editWrapper = z.object({\n\t\t\tedit: z\n\t\t\t\t.union(editTypes)\n\t\t\t\t.describe(\"The next edit to apply to the tree, or null if the task is complete.\"),\n\t\t});\n\t\ttypeRecord.EditWrapper = editWrapper;\n\n\t\treturn [typeRecord, \"EditWrapper\"];\n\t});\n}\nconst editDescription =\n\t\"A description of what this edit is meant to accomplish in human readable English\";\nfunction getOrCreateType(\n\tdefinitionMap: ReadonlyMap<string, SimpleNodeSchema>,\n\ttypeMap: Map<string, ZodTypeAny>,\n\tinsertSet: Set<string>,\n\tmodifyFieldSet: Set<string>,\n\tmodifyTypeSet: Set<string>,\n\tdefinition: string,\n): ZodTypeAny {\n\treturn getOrCreate(typeMap, definition, () => {\n\t\tconst nodeSchema = definitionMap.get(definition) ?? fail(\"Unexpected definition\");\n\t\tswitch (nodeSchema.kind) {\n\t\t\tcase NodeKind.Object: {\n\t\t\t\tfor (const [key, field] of nodeSchema.fields) {\n\t\t\t\t\t// TODO: Remove when AI better\n\t\t\t\t\tif (\n\t\t\t\t\t\tArray.from(\n\t\t\t\t\t\t\tfield.allowedTypesIdentifiers,\n\t\t\t\t\t\t\t(n) => definitionMap.get(n) ?? fail(\"Unknown definition\"),\n\t\t\t\t\t\t).some((n) => n.kind === NodeKind.Array)\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tmodifyFieldSet.add(key);\n\t\t\t\t\tfor (const type of field.allowedTypesIdentifiers) {\n\t\t\t\t\t\tmodifyTypeSet.add(type);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\tconst properties = Object.fromEntries(\n\t\t\t\t\t[...nodeSchema.fields]\n\t\t\t\t\t\t.map(([key, field]) => {\n\t\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tgetOrCreateTypeForField(\n\t\t\t\t\t\t\t\t\tdefinitionMap,\n\t\t\t\t\t\t\t\t\ttypeMap,\n\t\t\t\t\t\t\t\t\tinsertSet,\n\t\t\t\t\t\t\t\t\tmodifyFieldSet,\n\t\t\t\t\t\t\t\t\tmodifyTypeSet,\n\t\t\t\t\t\t\t\t\tfield,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t];\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.filter(([, value]) => value !== undefined),\n\t\t\t\t);\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\t\tproperties[typeField] = z.enum([definition]);\n\t\t\t\treturn z.object(properties);\n\t\t\t}\n\t\t\tcase NodeKind.Array: {\n\t\t\t\tfor (const [name] of Array.from(\n\t\t\t\t\tnodeSchema.allowedTypesIdentifiers,\n\t\t\t\t\t(n): [string, SimpleNodeSchema] => [\n\t\t\t\t\t\tn,\n\t\t\t\t\t\tdefinitionMap.get(n) ?? fail(\"Unknown definition\"),\n\t\t\t\t\t],\n\t\t\t\t).filter(\n\t\t\t\t\t([_, schema]) => schema.kind === NodeKind.Object || schema.kind === NodeKind.Leaf,\n\t\t\t\t)) {\n\t\t\t\t\tinsertSet.add(name);\n\t\t\t\t}\n\t\t\t\treturn z.array(\n\t\t\t\t\tgetTypeForAllowedTypes(\n\t\t\t\t\t\tdefinitionMap,\n\t\t\t\t\t\ttypeMap,\n\t\t\t\t\t\tinsertSet,\n\t\t\t\t\t\tmodifyFieldSet,\n\t\t\t\t\t\tmodifyTypeSet,\n\t\t\t\t\t\tnodeSchema.allowedTypesIdentifiers,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\tcase NodeKind.Leaf: {\n\t\t\t\tswitch (nodeSchema.leafKind) {\n\t\t\t\t\tcase ValueSchema.Boolean: {\n\t\t\t\t\t\treturn z.boolean();\n\t\t\t\t\t}\n\t\t\t\t\tcase ValueSchema.Number: {\n\t\t\t\t\t\treturn z.number();\n\t\t\t\t\t}\n\t\t\t\t\tcase ValueSchema.String: {\n\t\t\t\t\t\treturn z.string();\n\t\t\t\t\t}\n\t\t\t\t\tcase ValueSchema.Null: {\n\t\t\t\t\t\treturn z.null();\n\t\t\t\t\t}\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\tthrow new Error(`Unsupported leaf kind ${NodeKind[nodeSchema.leafKind]}.`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tthrow new Error(`Unsupported node kind ${NodeKind[nodeSchema.kind]}.`);\n\t\t\t}\n\t\t}\n\t});\n}\nfunction getOrCreateTypeForField(\n\tdefinitionMap: ReadonlyMap<string, SimpleNodeSchema>,\n\ttypeMap: Map<string, ZodTypeAny>,\n\tinsertSet: Set<string>,\n\tmodifyFieldSet: Set<string>,\n\tmodifyTypeSet: Set<string>,\n\tfieldSchema: SimpleFieldSchema,\n): ZodTypeAny | undefined {\n\tswitch (fieldSchema.kind) {\n\t\tcase FieldKind.Required: {\n\t\t\treturn getTypeForAllowedTypes(\n\t\t\t\tdefinitionMap,\n\t\t\t\ttypeMap,\n\t\t\t\tinsertSet,\n\t\t\t\tmodifyFieldSet,\n\t\t\t\tmodifyTypeSet,\n\t\t\t\tfieldSchema.allowedTypesIdentifiers,\n\t\t\t);\n\t\t}\n\t\tcase FieldKind.Optional: {\n\t\t\treturn z.union([\n\t\t\t\tz.null(),\n\t\t\t\tgetTypeForAllowedTypes(\n\t\t\t\t\tdefinitionMap,\n\t\t\t\t\ttypeMap,\n\t\t\t\t\tinsertSet,\n\t\t\t\t\tmodifyFieldSet,\n\t\t\t\t\tmodifyTypeSet,\n\t\t\t\t\tfieldSchema.allowedTypesIdentifiers,\n\t\t\t\t),\n\t\t\t]);\n\t\t}\n\t\tcase FieldKind.Identifier: {\n\t\t\treturn undefined;\n\t\t}\n\t\tdefault: {\n\t\t\tthrow new Error(`Unsupported field kind ${NodeKind[fieldSchema.kind]}.`);\n\t\t}\n\t}\n}\n\nfunction getTypeForAllowedTypes(\n\tdefinitionMap: ReadonlyMap<string, SimpleNodeSchema>,\n\ttypeMap: Map<string, ZodTypeAny>,\n\tinsertSet: Set<string>,\n\tmodifyFieldSet: Set<string>,\n\tmodifyTypeSet: Set<string>,\n\tallowedTypes: ReadonlySet<string>,\n): ZodTypeAny {\n\tconst single = tryGetSingleton(allowedTypes);\n\tif (single === undefined) {\n\t\tconst types = [\n\t\t\t...mapIterable(allowedTypes, (name) => {\n\t\t\t\treturn getOrCreateType(\n\t\t\t\t\tdefinitionMap,\n\t\t\t\t\ttypeMap,\n\t\t\t\t\tinsertSet,\n\t\t\t\t\tmodifyFieldSet,\n\t\t\t\t\tmodifyTypeSet,\n\t\t\t\t\tname,\n\t\t\t\t);\n\t\t\t}),\n\t\t];\n\t\tassert(hasAtLeastTwo(types), 0xc1b /* Expected at least two types */);\n\t\treturn z.union(types);\n\t} else {\n\t\treturn getOrCreateType(\n\t\t\tdefinitionMap,\n\t\t\ttypeMap,\n\t\t\tinsertSet,\n\t\t\tmodifyFieldSet,\n\t\t\tmodifyTypeSet,\n\t\t\tsingle,\n\t\t);\n\t}\n}\n\nfunction tryGetSingleton<T>(set: ReadonlySet<T>): T | undefined {\n\tif (set.size === 1) {\n\t\tfor (const item of set) {\n\t\t\treturn item;\n\t\t}\n\t}\n}\n\nfunction hasAtLeastTwo<T>(array: T[]): array is [T, T, ...T[]] {\n\treturn array.length >= 2;\n}\n\n/**\n * Determines if the provided {@link TreeNode} contains an array schema.\n */\nexport function doesNodeContainArraySchema(node: TreeNode): boolean {\n\tconst schema = Tree.schema(node);\n\tconst simpleSchema = getSimpleSchema(schema);\n\tfor (const [, nodeSchema] of simpleSchema.definitions) {\n\t\tif (nodeSchema.kind === NodeKind.Array) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n"]}
|
|
@@ -248,7 +248,7 @@ function getTypeForAllowedTypes(definitionMap, typeMap, insertSet, modifyFieldSe
|
|
|
248
248
|
return getOrCreateType(definitionMap, typeMap, insertSet, modifyFieldSet, modifyTypeSet, name);
|
|
249
249
|
}),
|
|
250
250
|
];
|
|
251
|
-
assert(hasAtLeastTwo(types),
|
|
251
|
+
assert(hasAtLeastTwo(types), 0xc1b /* Expected at least two types */);
|
|
252
252
|
return z.union(types);
|
|
253
253
|
}
|
|
254
254
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typeGeneration.js","sourceRoot":"","sources":["../../src/explicit-strategy/typeGeneration.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;AAC7D,OAAO,EACN,SAAS,EACT,eAAe,EACf,QAAQ,EACR,IAAI,EACJ,WAAW,GACX,MAAM,+BAA+B,CAAC;AAOvC,OAAO,EAAE,CAAC,EAAmB,MAAM,KAAK,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE5D;;;GAGG;AACH,MAAM,YAAY,GAAG,CAAC;KACpB,MAAM,CAAC;IACP,MAAM,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,CACR,sDAAsD,WAAW,qCAAqC,CACtG;CACF,CAAC;KACD,QAAQ,CACR,wFAAwF,CACxF,CAAC;AACH;;;GAGG;AACH,MAAM,WAAW,GAAG,CAAC;KACnB,MAAM,CAAC;IACP,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC;IAC7B,MAAM,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,CACR,WAAW,WAAW,iLAAiL,CACvM;IACF,KAAK,EAAE,CAAC;SACN,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;SACzB,QAAQ,CACR,qGAAqG,CACrG;CACF,CAAC;KACD,QAAQ,CACR,wFAAwF,CACxF,CAAC;AACH;;;GAGG;AACH,MAAM,UAAU,GAAG,CAAC;KAClB,MAAM,CAAC;IACP,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC;IAC5B,QAAQ,EAAE,CAAC;SACT,MAAM,EAAE;SACR,QAAQ,CACR,WAAW,WAAW,8IAA8I,CACpK;IACF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IACjE,QAAQ,EAAE,CAAC;SACT,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;SACtB,QAAQ,CAAC,8DAA8D,CAAC;CAC1E,CAAC;KACD,QAAQ,CACR,0KAA0K,CAC1K,CAAC;AACH;;;GAGG;AACH,MAAM,KAAK,GAAG,CAAC;KACb,MAAM,CAAC;IACP,IAAI,EAAE,WAAW;IACjB,EAAE,EAAE,WAAW;CACf,CAAC;KACD,QAAQ,CACR,mIAAmI,CACnI,CAAC;AACH;;GAEG;AACH,MAAM,KAAK,GAAG,IAAI,OAAO,EAAiE,CAAC;AAE3F;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB,CACvC,MAAwB,EACxB,mBAA4B;IAE5B,OAAO,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE;QACtC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;QACpC,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;QACzC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;QACxC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAsB,CAAC;QAE9C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;YAC9C,eAAe,CACd,MAAM,CAAC,WAAW,EAClB,OAAO,EACP,SAAS,EACT,cAAc,EACd,aAAa,EACb,IAAI,CACJ,CAAC;QACH,CAAC;QACD,SAAS,OAAO,CAAC,YAAiC;YACjD,QAAQ,YAAY,CAAC,IAAI,EAAE,CAAC;gBAC3B,KAAK,CAAC,CAAC,CAAC,CAAC;oBACR,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;gBAClB,CAAC;gBACD,KAAK,CAAC,CAAC,CAAC,CAAC;oBACR,OAAO,CACN,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,oBAAoB,CAAC,CAAC;wBACxE,IAAI,CAAC,cAAc,CAAC,CACpB,CAAC;gBACH,CAAC;gBACD,OAAO,CAAC,CAAC,CAAC;oBACT,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CACvB,YAAY,EACZ,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,CACnD,CAAC;oBACF,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,iCAAiC,CAAC,CAAC;oBACtE,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACvB,CAAC;YACF,CAAC;QACF,CAAC;QAED,MAAM,mBAAmB,GAAG,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC;QAE/C,MAAM,MAAM,GAAG,CAAC;aACd,MAAM,CAAC;YACP,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;YACxB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;YACjD,MAAM,EAAE,YAAY;YACpB,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,cAAc,CAA0B,CAAC,EAAE,iCAAiC;YAC9F,YAAY,EAAE,mBAAmB;gBAChC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;gBACxB,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;SACnD,CAAC;aACD,QAAQ,CAAC,0CAA0C,CAAC,CAAC;QAEvD,MAAM,MAAM,GAAG,CAAC;aACd,MAAM,CAAC;YACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;YACzB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;YACjD,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;SACtC,CAAC;aACD,QAAQ,CAAC,sDAAsD,CAAC,CAAC;QAEnE,MAAM,MAAM,GAAG,CAAC;aACd,MAAM,CAAC;YACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;YACzB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;YACjD,OAAO,EAAE,mBAAmB;gBAC3B,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;gBACpB,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;YACnD,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;SAC/C,CAAC;aACD,QAAQ,CAAC,yDAAyD,CAAC,CAAC;QAEtE,MAAM,IAAI,GAAG,CAAC;aACZ,MAAM,CAAC;YACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;YACvB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;YACjD,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;YACtC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;SAC/C,CAAC;aACD,QAAQ,CAAC,mEAAmE,CAAC,CAAC;QAEhF,MAAM,UAAU,GAA+B;YAC9C,YAAY,EAAE,YAAY;YAC1B,MAAM,EAAE,MAAM;SACd,CAAC;QAEF,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;QAE3B,IAAI,mBAAmB,EAAE,CAAC;YACzB,UAAU,CAAC,WAAW,GAAG,WAAW,CAAC;YACrC,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC;YACnC,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC;YACzB,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;YAC3B,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;YAC3B,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC;QACxB,CAAC;QAED,MAAM,SAAS,GAAG,mBAAmB;YACpC,CAAC,CAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAW;YACrD,CAAC,CAAE,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAW,CAAC;QAEjC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;YAC5B,IAAI,EAAE,CAAC;iBACL,KAAK,CAAC,SAAS,CAAC;iBAChB,QAAQ,CAAC,sEAAsE,CAAC;SAClF,CAAC,CAAC;QACH,UAAU,CAAC,WAAW,GAAG,WAAW,CAAC;QAErC,OAAO,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACJ,CAAC;AACD,MAAM,eAAe,GACpB,kFAAkF,CAAC;AACpF,SAAS,eAAe,CACvB,aAAoD,EACpD,OAAgC,EAChC,SAAsB,EACtB,cAA2B,EAC3B,aAA0B,EAC1B,UAAkB;IAElB,OAAO,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE;QAC5C,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAClF,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;YACzB,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;gBACtB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;oBAC9C,8BAA8B;oBAC9B,IACC,KAAK,CAAC,IAAI,CACT,KAAK,CAAC,uBAAuB,EAC7B,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,oBAAoB,CAAC,CACzD,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,KAAK,CAAC,EACvC,CAAC;wBACF,SAAS;oBACV,CAAC;oBACD,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACxB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,uBAAuB,EAAE,CAAC;wBAClD,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBACzB,CAAC;gBACF,CAAC;gBACD,mEAAmE;gBACnE,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CACpC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;qBACpB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;oBACrB,OAAO;wBACN,GAAG;wBACH,uBAAuB,CACtB,aAAa,EACb,OAAO,EACP,SAAS,EACT,cAAc,EACd,aAAa,EACb,KAAK,CACL;qBACD,CAAC;gBACH,CAAC,CAAC;qBACD,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAC5C,CAAC;gBACF,sEAAsE;gBACtE,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;gBAC7C,OAAO,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC7B,CAAC;YACD,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;gBACrB,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAC9B,UAAU,CAAC,uBAAuB,EAClC,CAAC,CAAC,EAA8B,EAAE,CAAC;oBAClC,CAAC;oBACD,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,oBAAoB,CAAC;iBAClD,CACD,CAAC,MAAM,CACP,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CACjF,EAAE,CAAC;oBACH,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACrB,CAAC;gBACD,OAAO,CAAC,CAAC,KAAK,CACb,sBAAsB,CACrB,aAAa,EACb,OAAO,EACP,SAAS,EACT,cAAc,EACd,aAAa,EACb,UAAU,CAAC,uBAAuB,CAClC,CACD,CAAC;YACH,CAAC;YACD,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;gBACpB,QAAQ,UAAU,CAAC,QAAQ,EAAE,CAAC;oBAC7B,KAAK,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;wBAC1B,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;oBACpB,CAAC;oBACD,KAAK,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;wBACzB,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;oBACnB,CAAC;oBACD,KAAK,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;wBACzB,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;oBACnB,CAAC;oBACD,KAAK,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;wBACvB,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;oBACjB,CAAC;oBACD,OAAO,CAAC,CAAC,CAAC;wBACT,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;oBAC5E,CAAC;gBACF,CAAC;YACF,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACxE,CAAC;QACF,CAAC;IACF,CAAC,CAAC,CAAC;AACJ,CAAC;AACD,SAAS,uBAAuB,CAC/B,aAAoD,EACpD,OAAgC,EAChC,SAAsB,EACtB,cAA2B,EAC3B,aAA0B,EAC1B,WAA8B;IAE9B,QAAQ,WAAW,CAAC,IAAI,EAAE,CAAC;QAC1B,KAAK,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;YACzB,OAAO,sBAAsB,CAC5B,aAAa,EACb,OAAO,EACP,SAAS,EACT,cAAc,EACd,aAAa,EACb,WAAW,CAAC,uBAAuB,CACnC,CAAC;QACH,CAAC;QACD,KAAK,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;YACzB,OAAO,CAAC,CAAC,KAAK,CAAC;gBACd,CAAC,CAAC,IAAI,EAAE;gBACR,sBAAsB,CACrB,aAAa,EACb,OAAO,EACP,SAAS,EACT,cAAc,EACd,aAAa,EACb,WAAW,CAAC,uBAAuB,CACnC;aACD,CAAC,CAAC;QACJ,CAAC;QACD,KAAK,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;YAC3B,OAAO,SAAS,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1E,CAAC;IACF,CAAC;AACF,CAAC;AAED,SAAS,sBAAsB,CAC9B,aAAoD,EACpD,OAAgC,EAChC,SAAsB,EACtB,cAA2B,EAC3B,aAA0B,EAC1B,YAAiC;IAEjC,MAAM,MAAM,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;IAC7C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG;YACb,GAAG,WAAW,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE;gBACrC,OAAO,eAAe,CACrB,aAAa,EACb,OAAO,EACP,SAAS,EACT,cAAc,EACd,aAAa,EACb,IAAI,CACJ,CAAC;YACH,CAAC,CAAC;SACF,CAAC;QACF,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACtE,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;SAAM,CAAC;QACP,OAAO,eAAe,CACrB,aAAa,EACb,OAAO,EACP,SAAS,EACT,cAAc,EACd,aAAa,EACb,MAAM,CACN,CAAC;IACH,CAAC;AACF,CAAC;AAED,SAAS,eAAe,CAAI,GAAmB;IAC9C,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACpB,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC;QACb,CAAC;IACF,CAAC;AACF,CAAC;AAED,SAAS,aAAa,CAAI,KAAU;IACnC,OAAO,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,IAAc;IACxD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAC7C,KAAK,MAAM,CAAC,EAAE,UAAU,CAAC,IAAI,YAAY,CAAC,WAAW,EAAE,CAAC;QACvD,IAAI,UAAU,CAAC,IAAI,KAAK,QAAQ,CAAC,KAAK,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC;QACb,CAAC;IACF,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport {\n\tFieldKind,\n\tgetSimpleSchema,\n\tNodeKind,\n\tTree,\n\tValueSchema,\n} from \"@fluidframework/tree/internal\";\nimport type {\n\tSimpleFieldSchema,\n\tSimpleNodeSchema,\n\tSimpleTreeSchema,\n\tTreeNode,\n} from \"@fluidframework/tree/internal\";\nimport { z, type ZodTypeAny } from \"zod\";\n\nimport { objectIdKey, typeField } from \"./agentEditTypes.js\";\nimport { fail, getOrCreate, mapIterable } from \"./utils.js\";\n\n/**\n * Zod Object type used to represent & validate the ObjectTarget type within a {@link TreeEdit}.\n * @remarks this is used as a component with {@link generateGenericEditTypes} to produce the final zod validation objects.\n */\nconst objectTarget = z\n\t.object({\n\t\ttarget: z\n\t\t\t.string()\n\t\t\t.describe(\n\t\t\t\t`The id of the object (as specified by the object's ${objectIdKey} property) that is being referenced`,\n\t\t\t),\n\t})\n\t.describe(\n\t\t\"A pointer to a specific object node in the tree, identified by the target object's Id.\",\n\t);\n/**\n * Zod Object type used to represent & validate the ObjectPlace type within a {@link TreeEdit}.\n * @remarks this is used as a component with {@link generateGenericEditTypes} to produce the final zod validation objects.\n */\nconst objectPlace = z\n\t.object({\n\t\ttype: z.enum([\"objectPlace\"]),\n\t\ttarget: z\n\t\t\t.string()\n\t\t\t.describe(\n\t\t\t\t`The id (${objectIdKey}) of the object that the new/moved object should be placed relative to. This must be the id of an object that already existed in the tree content that was originally supplied.`,\n\t\t\t),\n\t\tplace: z\n\t\t\t.enum([\"before\", \"after\"])\n\t\t\t.describe(\n\t\t\t\t\"Where the new/moved object will be relative to the target object - either just before or just after\",\n\t\t\t),\n\t})\n\t.describe(\n\t\t\"A pointer to a location either just before or just after an object that is in an array\",\n\t);\n/**\n * Zod Object type used to represent & validate the ArrayPlace type within a {@link TreeEdit}.\n * @remarks this is used as a component with {@link generateGenericEditTypes} to produce the final zod validation objects.\n */\nconst arrayPlace = z\n\t.object({\n\t\ttype: z.enum([\"arrayPlace\"]),\n\t\tparentId: z\n\t\t\t.string()\n\t\t\t.describe(\n\t\t\t\t`The id (${objectIdKey}) of the parent object of the array. This must be the id of an object that already existed in the tree content that was originally supplied.`,\n\t\t\t),\n\t\tfield: z.string().describe(\"The key of the array to insert into\"),\n\t\tlocation: z\n\t\t\t.enum([\"start\", \"end\"])\n\t\t\t.describe(\"Where to insert into the array - either the start or the end\"),\n\t})\n\t.describe(\n\t\t`either the \"start\" or \"end\" of an array, as specified by a \"parent\" ObjectTarget and a \"field\" name under which the array is stored (useful for prepending or appending)`,\n\t);\n/**\n * Zod Object type used to represent & validate the Range type within a {@link TreeEdit}.\n * @remarks this is used as a component with {@link generateGenericEditTypes} to produce the final zod validation objects.\n */\nconst range = z\n\t.object({\n\t\tfrom: objectPlace,\n\t\tto: objectPlace,\n\t})\n\t.describe(\n\t\t'A range of objects in the same array specified by a \"from\" and \"to\" Place. The \"to\" and \"from\" objects MUST be in the same array.',\n\t);\n/**\n * Cache used to prevent repeatedly generating the same Zod validation objects for the same {@link SimpleTreeSchema} as generate propts for repeated calls to an LLM\n */\nconst cache = new WeakMap<SimpleTreeSchema, ReturnType<typeof generateGenericEditTypes>>();\n\n/**\n * Generates a set of ZOD validation objects for the various types of data that can be put into the provided {@link SimpleTreeSchema}\n * and then uses those sets to generate an all-encompassing ZOD object for each type of {@link TreeEdit} that can validate any of the types of data that can be put into the tree.\n *\n * @returns a Record of schema names to Zod validation objects, and the name of the root schema used to encompass all of the other schemas.\n *\n * @remarks The return type of this function is designed to work with Typechat's createZodJsonValidator as well as be used as the JSON schema for OpenAi's structured output response format.\n */\nexport function generateGenericEditTypes(\n\tschema: SimpleTreeSchema,\n\tgenerateDomainTypes: boolean,\n): [Record<string, ZodTypeAny>, root: string] {\n\treturn getOrCreate(cache, schema, () => {\n\t\tconst insertSet = new Set<string>();\n\t\tconst modifyFieldSet = new Set<string>();\n\t\tconst modifyTypeSet = new Set<string>();\n\t\tconst typeMap = new Map<string, ZodTypeAny>();\n\n\t\tfor (const name of schema.definitions.keys()) {\n\t\t\tgetOrCreateType(\n\t\t\t\tschema.definitions,\n\t\t\t\ttypeMap,\n\t\t\t\tinsertSet,\n\t\t\t\tmodifyFieldSet,\n\t\t\t\tmodifyTypeSet,\n\t\t\t\tname,\n\t\t\t);\n\t\t}\n\t\tfunction getType(allowedTypes: ReadonlySet<string>): ZodTypeAny {\n\t\t\tswitch (allowedTypes.size) {\n\t\t\t\tcase 0: {\n\t\t\t\t\treturn z.never();\n\t\t\t\t}\n\t\t\t\tcase 1: {\n\t\t\t\t\treturn (\n\t\t\t\t\t\ttypeMap.get(tryGetSingleton(allowedTypes) ?? fail(\"Expected singleton\")) ??\n\t\t\t\t\t\tfail(\"Unknown type\")\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\tconst types = Array.from(\n\t\t\t\t\t\tallowedTypes,\n\t\t\t\t\t\t(name) => typeMap.get(name) ?? fail(\"Unknown type\"),\n\t\t\t\t\t);\n\t\t\t\t\tassert(hasAtLeastTwo(types), 0xa7d /* Expected at least two types */);\n\t\t\t\t\treturn z.union(types);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst doesSchemaHaveArray = insertSet.size > 0;\n\n\t\tconst modify = z\n\t\t\t.object({\n\t\t\t\ttype: z.enum([\"modify\"]),\n\t\t\t\texplanation: z.string().describe(editDescription),\n\t\t\t\ttarget: objectTarget,\n\t\t\t\tfield: z.enum([...modifyFieldSet] as [string, ...string[]]), // Modify with appropriate fields\n\t\t\t\tmodification: generateDomainTypes\n\t\t\t\t\t? getType(modifyTypeSet)\n\t\t\t\t\t: z.any().describe(\"Domain-specific content here\"),\n\t\t\t})\n\t\t\t.describe(\"Sets a field on a specific ObjectTarget.\");\n\n\t\tconst remove = z\n\t\t\t.object({\n\t\t\t\ttype: z.literal(\"remove\"),\n\t\t\t\texplanation: z.string().describe(editDescription),\n\t\t\t\tsource: z.union([objectTarget, range]),\n\t\t\t})\n\t\t\t.describe(\"Deletes an object or Range of objects from the tree.\");\n\n\t\tconst insert = z\n\t\t\t.object({\n\t\t\t\ttype: z.literal(\"insert\"),\n\t\t\t\texplanation: z.string().describe(editDescription),\n\t\t\t\tcontent: generateDomainTypes\n\t\t\t\t\t? getType(insertSet)\n\t\t\t\t\t: z.any().describe(\"Domain-specific content here\"),\n\t\t\t\tdestination: z.union([arrayPlace, objectPlace]),\n\t\t\t})\n\t\t\t.describe(\"Inserts a new object at a specific Place or ArrayPlace.\");\n\n\t\tconst move = z\n\t\t\t.object({\n\t\t\t\ttype: z.literal(\"move\"),\n\t\t\t\texplanation: z.string().describe(editDescription),\n\t\t\t\tsource: z.union([objectTarget, range]),\n\t\t\t\tdestination: z.union([arrayPlace, objectPlace]),\n\t\t\t})\n\t\t\t.describe(\"Moves an object or Range of objects to a new Place or ArrayPlace.\");\n\n\t\tconst typeRecord: Record<string, ZodTypeAny> = {\n\t\t\tObjectTarget: objectTarget,\n\t\t\tModify: modify,\n\t\t};\n\n\t\ttypeRecord.Modify = modify;\n\n\t\tif (doesSchemaHaveArray) {\n\t\t\ttypeRecord.ObjectPlace = objectPlace;\n\t\t\ttypeRecord.ArrayPlace = arrayPlace;\n\t\t\ttypeRecord.Range = range;\n\t\t\ttypeRecord.Insert = insert;\n\t\t\ttypeRecord.Remove = remove;\n\t\t\ttypeRecord.Move = move;\n\t\t}\n\n\t\tconst editTypes = doesSchemaHaveArray\n\t\t\t? ([insert, remove, move, modify, z.null()] as const)\n\t\t\t: ([modify, z.null()] as const);\n\n\t\tconst editWrapper = z.object({\n\t\t\tedit: z\n\t\t\t\t.union(editTypes)\n\t\t\t\t.describe(\"The next edit to apply to the tree, or null if the task is complete.\"),\n\t\t});\n\t\ttypeRecord.EditWrapper = editWrapper;\n\n\t\treturn [typeRecord, \"EditWrapper\"];\n\t});\n}\nconst editDescription =\n\t\"A description of what this edit is meant to accomplish in human readable English\";\nfunction getOrCreateType(\n\tdefinitionMap: ReadonlyMap<string, SimpleNodeSchema>,\n\ttypeMap: Map<string, ZodTypeAny>,\n\tinsertSet: Set<string>,\n\tmodifyFieldSet: Set<string>,\n\tmodifyTypeSet: Set<string>,\n\tdefinition: string,\n): ZodTypeAny {\n\treturn getOrCreate(typeMap, definition, () => {\n\t\tconst nodeSchema = definitionMap.get(definition) ?? fail(\"Unexpected definition\");\n\t\tswitch (nodeSchema.kind) {\n\t\t\tcase NodeKind.Object: {\n\t\t\t\tfor (const [key, field] of nodeSchema.fields) {\n\t\t\t\t\t// TODO: Remove when AI better\n\t\t\t\t\tif (\n\t\t\t\t\t\tArray.from(\n\t\t\t\t\t\t\tfield.allowedTypesIdentifiers,\n\t\t\t\t\t\t\t(n) => definitionMap.get(n) ?? fail(\"Unknown definition\"),\n\t\t\t\t\t\t).some((n) => n.kind === NodeKind.Array)\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tmodifyFieldSet.add(key);\n\t\t\t\t\tfor (const type of field.allowedTypesIdentifiers) {\n\t\t\t\t\t\tmodifyTypeSet.add(type);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\tconst properties = Object.fromEntries(\n\t\t\t\t\t[...nodeSchema.fields]\n\t\t\t\t\t\t.map(([key, field]) => {\n\t\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tgetOrCreateTypeForField(\n\t\t\t\t\t\t\t\t\tdefinitionMap,\n\t\t\t\t\t\t\t\t\ttypeMap,\n\t\t\t\t\t\t\t\t\tinsertSet,\n\t\t\t\t\t\t\t\t\tmodifyFieldSet,\n\t\t\t\t\t\t\t\t\tmodifyTypeSet,\n\t\t\t\t\t\t\t\t\tfield,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t];\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.filter(([, value]) => value !== undefined),\n\t\t\t\t);\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\t\tproperties[typeField] = z.enum([definition]);\n\t\t\t\treturn z.object(properties);\n\t\t\t}\n\t\t\tcase NodeKind.Array: {\n\t\t\t\tfor (const [name] of Array.from(\n\t\t\t\t\tnodeSchema.allowedTypesIdentifiers,\n\t\t\t\t\t(n): [string, SimpleNodeSchema] => [\n\t\t\t\t\t\tn,\n\t\t\t\t\t\tdefinitionMap.get(n) ?? fail(\"Unknown definition\"),\n\t\t\t\t\t],\n\t\t\t\t).filter(\n\t\t\t\t\t([_, schema]) => schema.kind === NodeKind.Object || schema.kind === NodeKind.Leaf,\n\t\t\t\t)) {\n\t\t\t\t\tinsertSet.add(name);\n\t\t\t\t}\n\t\t\t\treturn z.array(\n\t\t\t\t\tgetTypeForAllowedTypes(\n\t\t\t\t\t\tdefinitionMap,\n\t\t\t\t\t\ttypeMap,\n\t\t\t\t\t\tinsertSet,\n\t\t\t\t\t\tmodifyFieldSet,\n\t\t\t\t\t\tmodifyTypeSet,\n\t\t\t\t\t\tnodeSchema.allowedTypesIdentifiers,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\tcase NodeKind.Leaf: {\n\t\t\t\tswitch (nodeSchema.leafKind) {\n\t\t\t\t\tcase ValueSchema.Boolean: {\n\t\t\t\t\t\treturn z.boolean();\n\t\t\t\t\t}\n\t\t\t\t\tcase ValueSchema.Number: {\n\t\t\t\t\t\treturn z.number();\n\t\t\t\t\t}\n\t\t\t\t\tcase ValueSchema.String: {\n\t\t\t\t\t\treturn z.string();\n\t\t\t\t\t}\n\t\t\t\t\tcase ValueSchema.Null: {\n\t\t\t\t\t\treturn z.null();\n\t\t\t\t\t}\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\tthrow new Error(`Unsupported leaf kind ${NodeKind[nodeSchema.leafKind]}.`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tthrow new Error(`Unsupported node kind ${NodeKind[nodeSchema.kind]}.`);\n\t\t\t}\n\t\t}\n\t});\n}\nfunction getOrCreateTypeForField(\n\tdefinitionMap: ReadonlyMap<string, SimpleNodeSchema>,\n\ttypeMap: Map<string, ZodTypeAny>,\n\tinsertSet: Set<string>,\n\tmodifyFieldSet: Set<string>,\n\tmodifyTypeSet: Set<string>,\n\tfieldSchema: SimpleFieldSchema,\n): ZodTypeAny | undefined {\n\tswitch (fieldSchema.kind) {\n\t\tcase FieldKind.Required: {\n\t\t\treturn getTypeForAllowedTypes(\n\t\t\t\tdefinitionMap,\n\t\t\t\ttypeMap,\n\t\t\t\tinsertSet,\n\t\t\t\tmodifyFieldSet,\n\t\t\t\tmodifyTypeSet,\n\t\t\t\tfieldSchema.allowedTypesIdentifiers,\n\t\t\t);\n\t\t}\n\t\tcase FieldKind.Optional: {\n\t\t\treturn z.union([\n\t\t\t\tz.null(),\n\t\t\t\tgetTypeForAllowedTypes(\n\t\t\t\t\tdefinitionMap,\n\t\t\t\t\ttypeMap,\n\t\t\t\t\tinsertSet,\n\t\t\t\t\tmodifyFieldSet,\n\t\t\t\t\tmodifyTypeSet,\n\t\t\t\t\tfieldSchema.allowedTypesIdentifiers,\n\t\t\t\t),\n\t\t\t]);\n\t\t}\n\t\tcase FieldKind.Identifier: {\n\t\t\treturn undefined;\n\t\t}\n\t\tdefault: {\n\t\t\tthrow new Error(`Unsupported field kind ${NodeKind[fieldSchema.kind]}.`);\n\t\t}\n\t}\n}\n\nfunction getTypeForAllowedTypes(\n\tdefinitionMap: ReadonlyMap<string, SimpleNodeSchema>,\n\ttypeMap: Map<string, ZodTypeAny>,\n\tinsertSet: Set<string>,\n\tmodifyFieldSet: Set<string>,\n\tmodifyTypeSet: Set<string>,\n\tallowedTypes: ReadonlySet<string>,\n): ZodTypeAny {\n\tconst single = tryGetSingleton(allowedTypes);\n\tif (single === undefined) {\n\t\tconst types = [\n\t\t\t...mapIterable(allowedTypes, (name) => {\n\t\t\t\treturn getOrCreateType(\n\t\t\t\t\tdefinitionMap,\n\t\t\t\t\ttypeMap,\n\t\t\t\t\tinsertSet,\n\t\t\t\t\tmodifyFieldSet,\n\t\t\t\t\tmodifyTypeSet,\n\t\t\t\t\tname,\n\t\t\t\t);\n\t\t\t}),\n\t\t];\n\t\tassert(hasAtLeastTwo(types), 0xa7e /* Expected at least two types */);\n\t\treturn z.union(types);\n\t} else {\n\t\treturn getOrCreateType(\n\t\t\tdefinitionMap,\n\t\t\ttypeMap,\n\t\t\tinsertSet,\n\t\t\tmodifyFieldSet,\n\t\t\tmodifyTypeSet,\n\t\t\tsingle,\n\t\t);\n\t}\n}\n\nfunction tryGetSingleton<T>(set: ReadonlySet<T>): T | undefined {\n\tif (set.size === 1) {\n\t\tfor (const item of set) {\n\t\t\treturn item;\n\t\t}\n\t}\n}\n\nfunction hasAtLeastTwo<T>(array: T[]): array is [T, T, ...T[]] {\n\treturn array.length >= 2;\n}\n\n/**\n * Determines if the provided {@link TreeNode} contains an array schema.\n */\nexport function doesNodeContainArraySchema(node: TreeNode): boolean {\n\tconst schema = Tree.schema(node);\n\tconst simpleSchema = getSimpleSchema(schema);\n\tfor (const [, nodeSchema] of simpleSchema.definitions) {\n\t\tif (nodeSchema.kind === NodeKind.Array) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"typeGeneration.js","sourceRoot":"","sources":["../../src/explicit-strategy/typeGeneration.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport {\n\tFieldKind,\n\tgetSimpleSchema,\n\tNodeKind,\n\tTree,\n\tValueSchema,\n} from \"@fluidframework/tree/internal\";\nimport type {\n\tSimpleFieldSchema,\n\tSimpleNodeSchema,\n\tSimpleTreeSchema,\n\tTreeNode,\n} from \"@fluidframework/tree/internal\";\nimport { z, type ZodTypeAny } from \"zod\";\n\nimport { objectIdKey, typeField } from \"./agentEditTypes.js\";\nimport { fail, getOrCreate, mapIterable } from \"./utils.js\";\n\n/**\n * Zod Object type used to represent & validate the ObjectTarget type within a {@link TreeEdit}.\n * @remarks this is used as a component with {@link generateGenericEditTypes} to produce the final zod validation objects.\n */\nconst objectTarget = z\n\t.object({\n\t\ttarget: z\n\t\t\t.string()\n\t\t\t.describe(\n\t\t\t\t`The id of the object (as specified by the object's ${objectIdKey} property) that is being referenced`,\n\t\t\t),\n\t})\n\t.describe(\n\t\t\"A pointer to a specific object node in the tree, identified by the target object's Id.\",\n\t);\n/**\n * Zod Object type used to represent & validate the ObjectPlace type within a {@link TreeEdit}.\n * @remarks this is used as a component with {@link generateGenericEditTypes} to produce the final zod validation objects.\n */\nconst objectPlace = z\n\t.object({\n\t\ttype: z.enum([\"objectPlace\"]),\n\t\ttarget: z\n\t\t\t.string()\n\t\t\t.describe(\n\t\t\t\t`The id (${objectIdKey}) of the object that the new/moved object should be placed relative to. This must be the id of an object that already existed in the tree content that was originally supplied.`,\n\t\t\t),\n\t\tplace: z\n\t\t\t.enum([\"before\", \"after\"])\n\t\t\t.describe(\n\t\t\t\t\"Where the new/moved object will be relative to the target object - either just before or just after\",\n\t\t\t),\n\t})\n\t.describe(\n\t\t\"A pointer to a location either just before or just after an object that is in an array\",\n\t);\n/**\n * Zod Object type used to represent & validate the ArrayPlace type within a {@link TreeEdit}.\n * @remarks this is used as a component with {@link generateGenericEditTypes} to produce the final zod validation objects.\n */\nconst arrayPlace = z\n\t.object({\n\t\ttype: z.enum([\"arrayPlace\"]),\n\t\tparentId: z\n\t\t\t.string()\n\t\t\t.describe(\n\t\t\t\t`The id (${objectIdKey}) of the parent object of the array. This must be the id of an object that already existed in the tree content that was originally supplied.`,\n\t\t\t),\n\t\tfield: z.string().describe(\"The key of the array to insert into\"),\n\t\tlocation: z\n\t\t\t.enum([\"start\", \"end\"])\n\t\t\t.describe(\"Where to insert into the array - either the start or the end\"),\n\t})\n\t.describe(\n\t\t`either the \"start\" or \"end\" of an array, as specified by a \"parent\" ObjectTarget and a \"field\" name under which the array is stored (useful for prepending or appending)`,\n\t);\n/**\n * Zod Object type used to represent & validate the Range type within a {@link TreeEdit}.\n * @remarks this is used as a component with {@link generateGenericEditTypes} to produce the final zod validation objects.\n */\nconst range = z\n\t.object({\n\t\tfrom: objectPlace,\n\t\tto: objectPlace,\n\t})\n\t.describe(\n\t\t'A range of objects in the same array specified by a \"from\" and \"to\" Place. The \"to\" and \"from\" objects MUST be in the same array.',\n\t);\n/**\n * Cache used to prevent repeatedly generating the same Zod validation objects for the same {@link SimpleTreeSchema} as generate propts for repeated calls to an LLM\n */\nconst cache = new WeakMap<SimpleTreeSchema, ReturnType<typeof generateGenericEditTypes>>();\n\n/**\n * Generates a set of ZOD validation objects for the various types of data that can be put into the provided {@link SimpleTreeSchema}\n * and then uses those sets to generate an all-encompassing ZOD object for each type of {@link TreeEdit} that can validate any of the types of data that can be put into the tree.\n *\n * @returns a Record of schema names to Zod validation objects, and the name of the root schema used to encompass all of the other schemas.\n *\n * @remarks The return type of this function is designed to work with Typechat's createZodJsonValidator as well as be used as the JSON schema for OpenAi's structured output response format.\n */\nexport function generateGenericEditTypes(\n\tschema: SimpleTreeSchema,\n\tgenerateDomainTypes: boolean,\n): [Record<string, ZodTypeAny>, root: string] {\n\treturn getOrCreate(cache, schema, () => {\n\t\tconst insertSet = new Set<string>();\n\t\tconst modifyFieldSet = new Set<string>();\n\t\tconst modifyTypeSet = new Set<string>();\n\t\tconst typeMap = new Map<string, ZodTypeAny>();\n\n\t\tfor (const name of schema.definitions.keys()) {\n\t\t\tgetOrCreateType(\n\t\t\t\tschema.definitions,\n\t\t\t\ttypeMap,\n\t\t\t\tinsertSet,\n\t\t\t\tmodifyFieldSet,\n\t\t\t\tmodifyTypeSet,\n\t\t\t\tname,\n\t\t\t);\n\t\t}\n\t\tfunction getType(allowedTypes: ReadonlySet<string>): ZodTypeAny {\n\t\t\tswitch (allowedTypes.size) {\n\t\t\t\tcase 0: {\n\t\t\t\t\treturn z.never();\n\t\t\t\t}\n\t\t\t\tcase 1: {\n\t\t\t\t\treturn (\n\t\t\t\t\t\ttypeMap.get(tryGetSingleton(allowedTypes) ?? fail(\"Expected singleton\")) ??\n\t\t\t\t\t\tfail(\"Unknown type\")\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\tconst types = Array.from(\n\t\t\t\t\t\tallowedTypes,\n\t\t\t\t\t\t(name) => typeMap.get(name) ?? fail(\"Unknown type\"),\n\t\t\t\t\t);\n\t\t\t\t\tassert(hasAtLeastTwo(types), 0xa7d /* Expected at least two types */);\n\t\t\t\t\treturn z.union(types);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst doesSchemaHaveArray = insertSet.size > 0;\n\n\t\tconst modify = z\n\t\t\t.object({\n\t\t\t\ttype: z.enum([\"modify\"]),\n\t\t\t\texplanation: z.string().describe(editDescription),\n\t\t\t\ttarget: objectTarget,\n\t\t\t\tfield: z.enum([...modifyFieldSet] as [string, ...string[]]), // Modify with appropriate fields\n\t\t\t\tmodification: generateDomainTypes\n\t\t\t\t\t? getType(modifyTypeSet)\n\t\t\t\t\t: z.any().describe(\"Domain-specific content here\"),\n\t\t\t})\n\t\t\t.describe(\"Sets a field on a specific ObjectTarget.\");\n\n\t\tconst remove = z\n\t\t\t.object({\n\t\t\t\ttype: z.literal(\"remove\"),\n\t\t\t\texplanation: z.string().describe(editDescription),\n\t\t\t\tsource: z.union([objectTarget, range]),\n\t\t\t})\n\t\t\t.describe(\"Deletes an object or Range of objects from the tree.\");\n\n\t\tconst insert = z\n\t\t\t.object({\n\t\t\t\ttype: z.literal(\"insert\"),\n\t\t\t\texplanation: z.string().describe(editDescription),\n\t\t\t\tcontent: generateDomainTypes\n\t\t\t\t\t? getType(insertSet)\n\t\t\t\t\t: z.any().describe(\"Domain-specific content here\"),\n\t\t\t\tdestination: z.union([arrayPlace, objectPlace]),\n\t\t\t})\n\t\t\t.describe(\"Inserts a new object at a specific Place or ArrayPlace.\");\n\n\t\tconst move = z\n\t\t\t.object({\n\t\t\t\ttype: z.literal(\"move\"),\n\t\t\t\texplanation: z.string().describe(editDescription),\n\t\t\t\tsource: z.union([objectTarget, range]),\n\t\t\t\tdestination: z.union([arrayPlace, objectPlace]),\n\t\t\t})\n\t\t\t.describe(\"Moves an object or Range of objects to a new Place or ArrayPlace.\");\n\n\t\tconst typeRecord: Record<string, ZodTypeAny> = {\n\t\t\tObjectTarget: objectTarget,\n\t\t\tModify: modify,\n\t\t};\n\n\t\ttypeRecord.Modify = modify;\n\n\t\tif (doesSchemaHaveArray) {\n\t\t\ttypeRecord.ObjectPlace = objectPlace;\n\t\t\ttypeRecord.ArrayPlace = arrayPlace;\n\t\t\ttypeRecord.Range = range;\n\t\t\ttypeRecord.Insert = insert;\n\t\t\ttypeRecord.Remove = remove;\n\t\t\ttypeRecord.Move = move;\n\t\t}\n\n\t\tconst editTypes = doesSchemaHaveArray\n\t\t\t? ([insert, remove, move, modify, z.null()] as const)\n\t\t\t: ([modify, z.null()] as const);\n\n\t\tconst editWrapper = z.object({\n\t\t\tedit: z\n\t\t\t\t.union(editTypes)\n\t\t\t\t.describe(\"The next edit to apply to the tree, or null if the task is complete.\"),\n\t\t});\n\t\ttypeRecord.EditWrapper = editWrapper;\n\n\t\treturn [typeRecord, \"EditWrapper\"];\n\t});\n}\nconst editDescription =\n\t\"A description of what this edit is meant to accomplish in human readable English\";\nfunction getOrCreateType(\n\tdefinitionMap: ReadonlyMap<string, SimpleNodeSchema>,\n\ttypeMap: Map<string, ZodTypeAny>,\n\tinsertSet: Set<string>,\n\tmodifyFieldSet: Set<string>,\n\tmodifyTypeSet: Set<string>,\n\tdefinition: string,\n): ZodTypeAny {\n\treturn getOrCreate(typeMap, definition, () => {\n\t\tconst nodeSchema = definitionMap.get(definition) ?? fail(\"Unexpected definition\");\n\t\tswitch (nodeSchema.kind) {\n\t\t\tcase NodeKind.Object: {\n\t\t\t\tfor (const [key, field] of nodeSchema.fields) {\n\t\t\t\t\t// TODO: Remove when AI better\n\t\t\t\t\tif (\n\t\t\t\t\t\tArray.from(\n\t\t\t\t\t\t\tfield.allowedTypesIdentifiers,\n\t\t\t\t\t\t\t(n) => definitionMap.get(n) ?? fail(\"Unknown definition\"),\n\t\t\t\t\t\t).some((n) => n.kind === NodeKind.Array)\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tmodifyFieldSet.add(key);\n\t\t\t\t\tfor (const type of field.allowedTypesIdentifiers) {\n\t\t\t\t\t\tmodifyTypeSet.add(type);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\tconst properties = Object.fromEntries(\n\t\t\t\t\t[...nodeSchema.fields]\n\t\t\t\t\t\t.map(([key, field]) => {\n\t\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tgetOrCreateTypeForField(\n\t\t\t\t\t\t\t\t\tdefinitionMap,\n\t\t\t\t\t\t\t\t\ttypeMap,\n\t\t\t\t\t\t\t\t\tinsertSet,\n\t\t\t\t\t\t\t\t\tmodifyFieldSet,\n\t\t\t\t\t\t\t\t\tmodifyTypeSet,\n\t\t\t\t\t\t\t\t\tfield,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t];\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.filter(([, value]) => value !== undefined),\n\t\t\t\t);\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\t\tproperties[typeField] = z.enum([definition]);\n\t\t\t\treturn z.object(properties);\n\t\t\t}\n\t\t\tcase NodeKind.Array: {\n\t\t\t\tfor (const [name] of Array.from(\n\t\t\t\t\tnodeSchema.allowedTypesIdentifiers,\n\t\t\t\t\t(n): [string, SimpleNodeSchema] => [\n\t\t\t\t\t\tn,\n\t\t\t\t\t\tdefinitionMap.get(n) ?? fail(\"Unknown definition\"),\n\t\t\t\t\t],\n\t\t\t\t).filter(\n\t\t\t\t\t([_, schema]) => schema.kind === NodeKind.Object || schema.kind === NodeKind.Leaf,\n\t\t\t\t)) {\n\t\t\t\t\tinsertSet.add(name);\n\t\t\t\t}\n\t\t\t\treturn z.array(\n\t\t\t\t\tgetTypeForAllowedTypes(\n\t\t\t\t\t\tdefinitionMap,\n\t\t\t\t\t\ttypeMap,\n\t\t\t\t\t\tinsertSet,\n\t\t\t\t\t\tmodifyFieldSet,\n\t\t\t\t\t\tmodifyTypeSet,\n\t\t\t\t\t\tnodeSchema.allowedTypesIdentifiers,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\tcase NodeKind.Leaf: {\n\t\t\t\tswitch (nodeSchema.leafKind) {\n\t\t\t\t\tcase ValueSchema.Boolean: {\n\t\t\t\t\t\treturn z.boolean();\n\t\t\t\t\t}\n\t\t\t\t\tcase ValueSchema.Number: {\n\t\t\t\t\t\treturn z.number();\n\t\t\t\t\t}\n\t\t\t\t\tcase ValueSchema.String: {\n\t\t\t\t\t\treturn z.string();\n\t\t\t\t\t}\n\t\t\t\t\tcase ValueSchema.Null: {\n\t\t\t\t\t\treturn z.null();\n\t\t\t\t\t}\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\tthrow new Error(`Unsupported leaf kind ${NodeKind[nodeSchema.leafKind]}.`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tthrow new Error(`Unsupported node kind ${NodeKind[nodeSchema.kind]}.`);\n\t\t\t}\n\t\t}\n\t});\n}\nfunction getOrCreateTypeForField(\n\tdefinitionMap: ReadonlyMap<string, SimpleNodeSchema>,\n\ttypeMap: Map<string, ZodTypeAny>,\n\tinsertSet: Set<string>,\n\tmodifyFieldSet: Set<string>,\n\tmodifyTypeSet: Set<string>,\n\tfieldSchema: SimpleFieldSchema,\n): ZodTypeAny | undefined {\n\tswitch (fieldSchema.kind) {\n\t\tcase FieldKind.Required: {\n\t\t\treturn getTypeForAllowedTypes(\n\t\t\t\tdefinitionMap,\n\t\t\t\ttypeMap,\n\t\t\t\tinsertSet,\n\t\t\t\tmodifyFieldSet,\n\t\t\t\tmodifyTypeSet,\n\t\t\t\tfieldSchema.allowedTypesIdentifiers,\n\t\t\t);\n\t\t}\n\t\tcase FieldKind.Optional: {\n\t\t\treturn z.union([\n\t\t\t\tz.null(),\n\t\t\t\tgetTypeForAllowedTypes(\n\t\t\t\t\tdefinitionMap,\n\t\t\t\t\ttypeMap,\n\t\t\t\t\tinsertSet,\n\t\t\t\t\tmodifyFieldSet,\n\t\t\t\t\tmodifyTypeSet,\n\t\t\t\t\tfieldSchema.allowedTypesIdentifiers,\n\t\t\t\t),\n\t\t\t]);\n\t\t}\n\t\tcase FieldKind.Identifier: {\n\t\t\treturn undefined;\n\t\t}\n\t\tdefault: {\n\t\t\tthrow new Error(`Unsupported field kind ${NodeKind[fieldSchema.kind]}.`);\n\t\t}\n\t}\n}\n\nfunction getTypeForAllowedTypes(\n\tdefinitionMap: ReadonlyMap<string, SimpleNodeSchema>,\n\ttypeMap: Map<string, ZodTypeAny>,\n\tinsertSet: Set<string>,\n\tmodifyFieldSet: Set<string>,\n\tmodifyTypeSet: Set<string>,\n\tallowedTypes: ReadonlySet<string>,\n): ZodTypeAny {\n\tconst single = tryGetSingleton(allowedTypes);\n\tif (single === undefined) {\n\t\tconst types = [\n\t\t\t...mapIterable(allowedTypes, (name) => {\n\t\t\t\treturn getOrCreateType(\n\t\t\t\t\tdefinitionMap,\n\t\t\t\t\ttypeMap,\n\t\t\t\t\tinsertSet,\n\t\t\t\t\tmodifyFieldSet,\n\t\t\t\t\tmodifyTypeSet,\n\t\t\t\t\tname,\n\t\t\t\t);\n\t\t\t}),\n\t\t];\n\t\tassert(hasAtLeastTwo(types), 0xc1b /* Expected at least two types */);\n\t\treturn z.union(types);\n\t} else {\n\t\treturn getOrCreateType(\n\t\t\tdefinitionMap,\n\t\t\ttypeMap,\n\t\t\tinsertSet,\n\t\t\tmodifyFieldSet,\n\t\t\tmodifyTypeSet,\n\t\t\tsingle,\n\t\t);\n\t}\n}\n\nfunction tryGetSingleton<T>(set: ReadonlySet<T>): T | undefined {\n\tif (set.size === 1) {\n\t\tfor (const item of set) {\n\t\t\treturn item;\n\t\t}\n\t}\n}\n\nfunction hasAtLeastTwo<T>(array: T[]): array is [T, T, ...T[]] {\n\treturn array.length >= 2;\n}\n\n/**\n * Determines if the provided {@link TreeNode} contains an array schema.\n */\nexport function doesNodeContainArraySchema(node: TreeNode): boolean {\n\tconst schema = Tree.schema(node);\n\tconst simpleSchema = getSimpleSchema(schema);\n\tfor (const [, nodeSchema] of simpleSchema.definitions) {\n\t\tif (nodeSchema.kind === NodeKind.Array) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fluidframework/ai-collab",
|
|
3
|
-
"version": "2.53.0
|
|
3
|
+
"version": "2.53.0",
|
|
4
4
|
"description": "Experimental package to simplify integrating AI into Fluid-based applications",
|
|
5
5
|
"homepage": "https://fluidframework.com",
|
|
6
6
|
"repository": {
|
|
@@ -69,10 +69,10 @@
|
|
|
69
69
|
"temp-directory": "nyc/.nyc_output"
|
|
70
70
|
},
|
|
71
71
|
"dependencies": {
|
|
72
|
-
"@fluidframework/core-utils": "2.53.0
|
|
73
|
-
"@fluidframework/runtime-utils": "2.53.0
|
|
74
|
-
"@fluidframework/telemetry-utils": "2.53.0
|
|
75
|
-
"@fluidframework/tree": "2.53.0
|
|
72
|
+
"@fluidframework/core-utils": "~2.53.0",
|
|
73
|
+
"@fluidframework/runtime-utils": "~2.53.0",
|
|
74
|
+
"@fluidframework/telemetry-utils": "~2.53.0",
|
|
75
|
+
"@fluidframework/tree": "~2.53.0",
|
|
76
76
|
"fastest-levenshtein": "^1.0.16",
|
|
77
77
|
"openai": "^4.67.3",
|
|
78
78
|
"typechat": "^0.1.1",
|
|
@@ -82,14 +82,14 @@
|
|
|
82
82
|
"devDependencies": {
|
|
83
83
|
"@arethetypeswrong/cli": "^0.17.1",
|
|
84
84
|
"@biomejs/biome": "~1.9.3",
|
|
85
|
-
"@fluid-internal/mocha-test-setup": "2.53.0
|
|
85
|
+
"@fluid-internal/mocha-test-setup": "~2.53.0",
|
|
86
86
|
"@fluid-tools/build-cli": "^0.57.0",
|
|
87
87
|
"@fluidframework/build-common": "^2.0.3",
|
|
88
88
|
"@fluidframework/build-tools": "^0.57.0",
|
|
89
89
|
"@fluidframework/eslint-config-fluid": "^5.7.4",
|
|
90
|
-
"@fluidframework/id-compressor": "2.53.0
|
|
91
|
-
"@fluidframework/runtime-utils": "2.53.0
|
|
92
|
-
"@fluidframework/test-runtime-utils": "2.53.0
|
|
90
|
+
"@fluidframework/id-compressor": "~2.53.0",
|
|
91
|
+
"@fluidframework/runtime-utils": "~2.53.0",
|
|
92
|
+
"@fluidframework/test-runtime-utils": "~2.53.0",
|
|
93
93
|
"@microsoft/api-extractor": "7.52.8",
|
|
94
94
|
"@types/mocha": "^10.0.10",
|
|
95
95
|
"@types/node": "^18.19.0",
|
|
@@ -379,7 +379,7 @@ function getTypeForAllowedTypes(
|
|
|
379
379
|
);
|
|
380
380
|
}),
|
|
381
381
|
];
|
|
382
|
-
assert(hasAtLeastTwo(types),
|
|
382
|
+
assert(hasAtLeastTwo(types), 0xc1b /* Expected at least two types */);
|
|
383
383
|
return z.union(types);
|
|
384
384
|
} else {
|
|
385
385
|
return getOrCreateType(
|