@fluidframework/tree-agent 2.73.0 → 2.74.0-368706

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 (68) hide show
  1. package/api-report/tree-agent.alpha.api.md +1 -3
  2. package/dist/agent.d.ts.map +1 -1
  3. package/dist/agent.js +2 -0
  4. package/dist/agent.js.map +1 -1
  5. package/dist/methodBinding.d.ts +7 -4
  6. package/dist/methodBinding.d.ts.map +1 -1
  7. package/dist/methodBinding.js +14 -3
  8. package/dist/methodBinding.js.map +1 -1
  9. package/dist/prompt.d.ts.map +1 -1
  10. package/dist/prompt.js +2 -12
  11. package/dist/prompt.js.map +1 -1
  12. package/dist/propertyBinding.d.ts.map +1 -1
  13. package/dist/propertyBinding.js +2 -2
  14. package/dist/propertyBinding.js.map +1 -1
  15. package/dist/renderSchemaTypeScript.d.ts +18 -0
  16. package/dist/renderSchemaTypeScript.d.ts.map +1 -0
  17. package/dist/renderSchemaTypeScript.js +399 -0
  18. package/dist/renderSchemaTypeScript.js.map +1 -0
  19. package/dist/renderZodTypeScript.d.ts +21 -0
  20. package/dist/renderZodTypeScript.d.ts.map +1 -0
  21. package/dist/renderZodTypeScript.js +272 -0
  22. package/dist/renderZodTypeScript.js.map +1 -0
  23. package/dist/typeGeneration.d.ts +3 -5
  24. package/dist/typeGeneration.d.ts.map +1 -1
  25. package/dist/typeGeneration.js +21 -254
  26. package/dist/typeGeneration.js.map +1 -1
  27. package/dist/utils.d.ts +10 -27
  28. package/dist/utils.d.ts.map +1 -1
  29. package/dist/utils.js +20 -364
  30. package/dist/utils.js.map +1 -1
  31. package/lib/agent.d.ts.map +1 -1
  32. package/lib/agent.js +2 -0
  33. package/lib/agent.js.map +1 -1
  34. package/lib/methodBinding.d.ts +7 -4
  35. package/lib/methodBinding.d.ts.map +1 -1
  36. package/lib/methodBinding.js +11 -1
  37. package/lib/methodBinding.js.map +1 -1
  38. package/lib/prompt.d.ts.map +1 -1
  39. package/lib/prompt.js +3 -13
  40. package/lib/prompt.js.map +1 -1
  41. package/lib/propertyBinding.d.ts.map +1 -1
  42. package/lib/propertyBinding.js +1 -1
  43. package/lib/propertyBinding.js.map +1 -1
  44. package/lib/renderSchemaTypeScript.d.ts +18 -0
  45. package/lib/renderSchemaTypeScript.d.ts.map +1 -0
  46. package/lib/renderSchemaTypeScript.js +395 -0
  47. package/lib/renderSchemaTypeScript.js.map +1 -0
  48. package/lib/renderZodTypeScript.d.ts +21 -0
  49. package/lib/renderZodTypeScript.d.ts.map +1 -0
  50. package/lib/renderZodTypeScript.js +267 -0
  51. package/lib/renderZodTypeScript.js.map +1 -0
  52. package/lib/typeGeneration.d.ts +3 -5
  53. package/lib/typeGeneration.d.ts.map +1 -1
  54. package/lib/typeGeneration.js +24 -257
  55. package/lib/typeGeneration.js.map +1 -1
  56. package/lib/utils.d.ts +10 -27
  57. package/lib/utils.d.ts.map +1 -1
  58. package/lib/utils.js +20 -362
  59. package/lib/utils.js.map +1 -1
  60. package/package.json +10 -10
  61. package/src/agent.ts +2 -0
  62. package/src/methodBinding.ts +17 -5
  63. package/src/prompt.ts +6 -22
  64. package/src/propertyBinding.ts +2 -1
  65. package/src/renderSchemaTypeScript.ts +523 -0
  66. package/src/renderZodTypeScript.ts +314 -0
  67. package/src/typeGeneration.ts +32 -414
  68. package/src/utils.ts +20 -414
package/lib/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.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\n/* eslint-disable @typescript-eslint/no-unsafe-argument */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\n\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport { isFluidHandle } from \"@fluidframework/runtime-utils\";\nimport { UsageError } from \"@fluidframework/telemetry-utils/internal\";\nimport type { ImplicitFieldSchema, TreeNodeSchemaClass } from \"@fluidframework/tree\";\nimport type {\n\tInsertableContent,\n\tTreeNode,\n\tTreeNodeSchema,\n\tUnsafeUnknownSchema,\n} from \"@fluidframework/tree/alpha\";\nimport {\n\tArrayNodeSchema,\n\tMapNodeSchema,\n\tObjectNodeSchema,\n\tRecordNodeSchema,\n\tTreeAlpha,\n} from \"@fluidframework/tree/alpha\";\nimport { NodeKind, normalizeFieldSchema } from \"@fluidframework/tree/internal\";\nimport { z } from \"zod\";\n\nimport { FunctionWrapper } from \"./methodBinding.js\";\nimport { PropertyDef } from \"./propertyBinding.js\";\n\n/**\n * Subset of Map interface.\n *\n * @remarks originally from tree/src/util/utils.ts\n */\nexport interface MapGetSet<K, V> {\n\tget(key: K): V | undefined;\n\tset(key: K, value: V): void;\n}\n\n/**\n * TBD\n */\nexport function fail(message: string): never {\n\tthrow new Error(message);\n}\n\n/**\n * Map one iterable to another by transforming each element one at a time\n * @param iterable - the iterable to transform\n * @param map - the transformation function to run on each element of the iterable\n * @returns a new iterable of elements which have been transformed by the `map` function\n *\n * @remarks originally from tree/src/util/utils.ts\n */\nexport function* mapIterable<T, U>(\n\titerable: Iterable<T>,\n\tmap: (t: T) => U,\n): IterableIterator<U> {\n\tfor (const t of iterable) {\n\t\tyield map(t);\n\t}\n}\n\n/**\n * Retrieve a value from a map with the given key, or create a new entry if the key is not in the map.\n * @param map - The map to query/update\n * @param key - The key to lookup in the map\n * @param defaultValue - a function which returns a default value. This is called and used to set an initial value for the given key in the map if none exists\n * @returns either the existing value for the given key, or the newly-created value (the result of `defaultValue`)\n *\n * @remarks originally from tree/src/util/utils.ts\n */\nexport function getOrCreate<K, V>(\n\tmap: MapGetSet<K, V>,\n\tkey: K,\n\tdefaultValue: (key: K) => V,\n): V {\n\tlet value = map.get(key);\n\tif (value === undefined) {\n\t\tvalue = defaultValue(key);\n\t\tmap.set(key, value);\n\t}\n\treturn value;\n}\n\n/**\n * TODO\n */\nexport function 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\n/**\n * Does it have at least two elements?\n */\nexport function hasAtLeastTwo<T>(array: T[]): array is [T, T, ...T[]] {\n\treturn array.length >= 2;\n}\n\n/**\n * Include this property in a field's schema metadata to indicate that the field's value should be generated via a provided function rather than by the LLM.\n * @example\n * ```ts\n * class Object extends schemaFactory.object(\"Object\", {\n * created: sf.required(sf.number, {\n * custom: {\n * // The LLM will ignore this field, and instead it will be populated with the result of the function\n * [llmDefault]: () => Date.now(),\n * },\n * }),\n * }) {};\n * ```\n * @alpha\n */\nexport const llmDefault = Symbol(\"tree-agent/llmDefault\");\n// TODO: make this a wrapper function instead, and hide the symbol.\n// function llmDefault<T extends FieldSchemaMetadata>(metadata: T): T { ... }\n\n/**\n * Usage fail\n */\nexport function failUsage(message: string): never {\n\tthrow new UsageError(message);\n}\n\n/**\n * Construct an object node from a schema and value.\n */\nexport function constructNode(schema: TreeNodeSchema, value: InsertableContent): TreeNode {\n\tconst node = TreeAlpha.create<UnsafeUnknownSchema>(schema, value);\n\tassert(\n\t\tnode !== undefined && node !== null && typeof node === \"object\" && !isFluidHandle(node),\n\t\t0xc1e /* Expected a constructed node to be an object */,\n\t);\n\treturn node;\n}\n\n/**\n * Returns the unqualified name of a tree value's schema (e.g. a node with schema identifier `\"my.scope.MyNode\"` returns `\"MyNode\"`).\n * @remarks If the schema is an inlined array, map, or record type, then it has no name and this function will return a string representation of the type (e.g., `\"MyNode[]\"` or `\"Map<string, MyNode>\"`).\n */\nexport function getFriendlyName(schema: TreeNodeSchema): string {\n\tif (schema.kind === NodeKind.Leaf || isNamedSchema(schema.identifier)) {\n\t\treturn unqualifySchema(schema.identifier);\n\t}\n\n\tconst childNames = Array.from(schema.childTypes, (t) => getFriendlyName(t));\n\tif (schema instanceof ArrayNodeSchema) {\n\t\treturn childNames.length > 1 ? `(${childNames.join(\" | \")})[]` : `${childNames[0]}[]`;\n\t}\n\tif (schema instanceof MapNodeSchema) {\n\t\treturn childNames.length > 1\n\t\t\t? `Map<string, (${childNames.join(\" | \")})>`\n\t\t\t: `Map<string, ${childNames[0]}>`;\n\t}\n\tif (schema instanceof RecordNodeSchema) {\n\t\treturn childNames.length > 1\n\t\t\t? `Record<string, (${childNames.join(\" | \")})>`\n\t\t\t: `Record<string, ${childNames[0]}>`;\n\t}\n\tfail(\"Unexpected node schema\");\n}\n\n/**\n * Returns true if the schema identifier represents a named schema (object, named array, named map, or named record).\n * @remarks This does not include primitive schemas or inlined array/map/record schemas.\n */\nexport function isNamedSchema(schemaIdentifier: string): boolean {\n\tif (\n\t\t[\"string\", \"number\", \"boolean\", \"null\", \"handle\"].includes(\n\t\t\tunqualifySchema(schemaIdentifier),\n\t\t)\n\t) {\n\t\treturn false;\n\t}\n\n\treturn schemaIdentifier.match(/(?:Array|Map|Record)<\\[\"(.*)\"]>/) === null;\n}\n\n/**\n * Returns the unqualified name of a schema (e.g. `\"my.scope.MyNode\"` returns `\"MyNode\"`).\n * @remarks This works by removing all characters before the last dot in the schema name.\n * If there is a dot in a user's schema name, this might produce unexpected results.\n */\nexport function unqualifySchema(schemaIdentifier: string): string {\n\t// Get the unqualified name by removing the scope (everything before the last dot).\n\tconst matches = schemaIdentifier.match(/[^.]+$/);\n\tif (matches === null) {\n\t\treturn schemaIdentifier; // Return the original name if it is unscoped.\n\t}\n\treturn matches[0];\n}\n\n/**\n * Details about the properties of a TypeScript schema represented as Zod.\n */\nexport interface SchemaDetails {\n\thasHelperMethods: boolean;\n}\n\n// TODO: yuck, this entire file has too many statics. we should rewrite it as a generic zod schema walk.\nlet detailsI: SchemaDetails = {\n\thasHelperMethods: false,\n};\n\n/**\n * Returns the TypeScript source code corresponding to a Zod schema. The schema is supplied as an object where each\n * property provides a name for an associated Zod type. The return value is a string containing the TypeScript source\n * code corresponding to the schema. Each property of the schema object is emitted as a named `interface` or `type`\n * declaration for the associated type and is referenced by that name in the emitted type declarations. Other types\n * referenced in the schema are emitted in their structural form.\n * @param schema - A schema object where each property provides a name for an associated Zod type.\n * @param details - Optional details about the schema. The fields will be set according to the details in the given schema.\n * @returns The TypeScript source code corresponding to the schema.\n */\nexport function getZodSchemaAsTypeScript(\n\tschema: Record<string, z.ZodType>,\n\tdetails?: SchemaDetails,\n): string {\n\tdetailsI = details ?? { hasHelperMethods: false };\n\tlet result = \"\";\n\tlet startOfLine = true;\n\tlet indent = 0;\n\tconst entries = [...Object.entries(schema)];\n\tconst namedTypes = new Map<object, string>(\n\t\tentries.map(([name, type]) => [getTypeIdentity(type), name]),\n\t);\n\tfor (const [name, type] of entries) {\n\t\tif (result) {\n\t\t\tappendNewLine();\n\t\t}\n\t\tconst description = type._def.description;\n\t\tif (description !== undefined && description !== \"\") {\n\t\t\tfor (const comment of description.split(\"\\n\")) {\n\t\t\t\tappend(`// ${comment}`);\n\t\t\t\tappendNewLine();\n\t\t\t}\n\t\t}\n\t\tif (getTypeKind(type) === z.ZodFirstPartyTypeKind.ZodObject) {\n\t\t\tappend(`interface ${name} `);\n\t\t\tappendObjectType(type as z.ZodObject<z.ZodRawShape>);\n\t\t} else {\n\t\t\tappend(`type ${name} = `);\n\t\t\tappendTypeDefinition(type);\n\t\t\tappend(\";\");\n\t\t}\n\t\tappendNewLine();\n\t}\n\treturn result;\n\n\tfunction append(s: string) {\n\t\tif (startOfLine) {\n\t\t\tresult += \" \".repeat(indent);\n\t\t\tstartOfLine = false;\n\t\t}\n\t\tresult += s;\n\t}\n\n\tfunction appendNewLine() {\n\t\tappend(\"\\n\");\n\t\tstartOfLine = true;\n\t}\n\n\tfunction appendType(type: z.ZodType, minPrecedence = TypePrecedence.Object) {\n\t\tconst name = namedTypes.get(getTypeIdentity(type));\n\t\tif (name === undefined) {\n\t\t\tconst parenthesize = getTypePrecendece(type) < minPrecedence;\n\t\t\tif (parenthesize) append(\"(\");\n\t\t\tappendTypeDefinition(type);\n\t\t\tif (parenthesize) append(\")\");\n\t\t} else {\n\t\t\tappend(name);\n\t\t}\n\t}\n\n\tfunction appendTypeDefinition(type: z.ZodType) {\n\t\tswitch (getTypeKind(type)) {\n\t\t\tcase z.ZodFirstPartyTypeKind.ZodString: {\n\t\t\t\treturn append(\"string\");\n\t\t\t}\n\t\t\tcase z.ZodFirstPartyTypeKind.ZodNumber: {\n\t\t\t\treturn append(\"number\");\n\t\t\t}\n\t\t\tcase z.ZodFirstPartyTypeKind.ZodBoolean: {\n\t\t\t\treturn append(\"boolean\");\n\t\t\t}\n\t\t\tcase z.ZodFirstPartyTypeKind.ZodDate: {\n\t\t\t\treturn append(\"Date\");\n\t\t\t}\n\t\t\tcase z.ZodFirstPartyTypeKind.ZodUndefined: {\n\t\t\t\treturn append(\"undefined\");\n\t\t\t}\n\t\t\tcase z.ZodFirstPartyTypeKind.ZodNull: {\n\t\t\t\treturn append(\"null\");\n\t\t\t}\n\t\t\tcase z.ZodFirstPartyTypeKind.ZodUnknown: {\n\t\t\t\treturn append(\"unknown\");\n\t\t\t}\n\t\t\tcase z.ZodFirstPartyTypeKind.ZodArray: {\n\t\t\t\treturn appendArrayType(type);\n\t\t\t}\n\t\t\tcase z.ZodFirstPartyTypeKind.ZodObject: {\n\t\t\t\treturn appendObjectType(type);\n\t\t\t}\n\t\t\tcase z.ZodFirstPartyTypeKind.ZodUnion: {\n\t\t\t\treturn appendUnionOrIntersectionTypes(\n\t\t\t\t\t(type._def as z.ZodUnionDef).options,\n\t\t\t\t\tTypePrecedence.Union,\n\t\t\t\t);\n\t\t\t}\n\t\t\tcase z.ZodFirstPartyTypeKind.ZodDiscriminatedUnion: {\n\t\t\t\treturn appendUnionOrIntersectionTypes(\n\t\t\t\t\t[...(type._def as z.ZodDiscriminatedUnionDef<string>).options.values()],\n\t\t\t\t\tTypePrecedence.Union,\n\t\t\t\t);\n\t\t\t}\n\t\t\tcase z.ZodFirstPartyTypeKind.ZodIntersection: {\n\t\t\t\treturn appendUnionOrIntersectionTypes(\n\t\t\t\t\t[\n\t\t\t\t\t\t(type._def as z.ZodIntersectionDef).left,\n\t\t\t\t\t\t(type._def as z.ZodIntersectionDef).right,\n\t\t\t\t\t],\n\t\t\t\t\tTypePrecedence.Intersection,\n\t\t\t\t);\n\t\t\t}\n\t\t\tcase z.ZodFirstPartyTypeKind.ZodTuple: {\n\t\t\t\treturn appendTupleType(type);\n\t\t\t}\n\t\t\tcase z.ZodFirstPartyTypeKind.ZodRecord: {\n\t\t\t\treturn appendRecordType(type);\n\t\t\t}\n\t\t\tcase z.ZodFirstPartyTypeKind.ZodMap: {\n\t\t\t\treturn appendMapType(type);\n\t\t\t}\n\t\t\tcase z.ZodFirstPartyTypeKind.ZodLiteral: {\n\t\t\t\treturn appendLiteral((type._def as z.ZodLiteralDef).value);\n\t\t\t}\n\t\t\tcase z.ZodFirstPartyTypeKind.ZodEnum: {\n\t\t\t\treturn append(\n\t\t\t\t\t(type._def as z.ZodEnumDef).values.map((value) => JSON.stringify(value)).join(\" | \"),\n\t\t\t\t);\n\t\t\t}\n\t\t\tcase z.ZodFirstPartyTypeKind.ZodOptional: {\n\t\t\t\treturn appendUnionOrIntersectionTypes(\n\t\t\t\t\t[(type._def as z.ZodOptionalDef).innerType, z.undefined()],\n\t\t\t\t\tTypePrecedence.Union,\n\t\t\t\t);\n\t\t\t}\n\t\t\tcase z.ZodFirstPartyTypeKind.ZodReadonly: {\n\t\t\t\treturn appendReadonlyType(type);\n\t\t\t}\n\t\t\tcase z.ZodFirstPartyTypeKind.ZodEffects: {\n\t\t\t\t// Currently, this only handles schema class instances, but there are other cases in which a ZodEffects could theoretically be used.\n\t\t\t\tif (instanceOfs.has(type)) {\n\t\t\t\t\tconst objectNodeSchema = instanceOfs.get(type);\n\t\t\t\t\tif (objectNodeSchema === undefined) {\n\t\t\t\t\t\tthrow new UsageError(\n\t\t\t\t\t\t\t`Unsupported zod effects type when transforming class method: ${getTypeKind(type)}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn append(getFriendlyName(objectNodeSchema));\n\t\t\t\t}\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Unsupported zod effects type. Did you use z.instanceOf? Use ExposedMethods.instanceOf function to reference schema classes in methods.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tcase z.ZodFirstPartyTypeKind.ZodVoid: {\n\t\t\t\treturn append(\"void\");\n\t\t\t}\n\t\t\tcase z.ZodFirstPartyTypeKind.ZodLazy: {\n\t\t\t\treturn appendType((type._def as z.ZodLazyDef).getter());\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tthrow new UsageError(\n\t\t\t\t\t`Unsupported type when transforming class method: ${getTypeKind(type)}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction appendBoundMethods(boundType: z.ZodType): void {\n\t\t// eslint-disable-next-line prefer-const\n\t\tfor (let [name, type] of Object.entries((boundType._def as z.ZodObjectDef).shape())) {\n\t\t\t// Special handling of methods on objects\n\t\t\tconst method = (type as unknown as { method: object | undefined }).method;\n\t\t\tif (method !== undefined && method instanceof FunctionWrapper) {\n\t\t\t\tdetailsI.hasHelperMethods = true;\n\t\t\t\tappend(name);\n\t\t\t\tappend(\"(\");\n\t\t\t\tlet first = true;\n\t\t\t\tfor (const [argName, argType] of method.args) {\n\t\t\t\t\tif (!first) append(\", \");\n\t\t\t\t\tif (getTypeKind(argType) === z.ZodFirstPartyTypeKind.ZodOptional) {\n\t\t\t\t\t\tappend(`${argName}?: `);\n\t\t\t\t\t\tappendType((argType._def as z.ZodOptionalDef).innerType, TypePrecedence.Object);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tappend(`${argName}: `);\n\t\t\t\t\t\tappendType(argType);\n\t\t\t\t\t}\n\t\t\t\t\tfirst = false;\n\t\t\t\t}\n\t\t\t\tif (method.rest !== null) {\n\t\t\t\t\tif (!first) append(\", \");\n\t\t\t\t\tappend(\"...rest: \");\n\t\t\t\t\tappendType(method.rest, TypePrecedence.Object);\n\t\t\t\t\tappend(\"[]\");\n\t\t\t\t}\n\t\t\t\tappend(`): `);\n\t\t\t\tappendType(method.returns, TypePrecedence.Object);\n\t\t\t\tappend(\";\");\n\t\t\t\tif (method.description !== undefined) {\n\t\t\t\t\tappend(` // ${method.description}`);\n\t\t\t\t}\n\t\t\t\tappendNewLine();\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction appendBoundProperties(type: z.ZodType): void {\n\t\tconst property = (type as unknown as { property?: PropertyDef }).property;\n\n\t\tif (!(property instanceof PropertyDef)) {\n\t\t\tif (type.description !== undefined && type.description !== \"\") {\n\t\t\t\tappend(` // ${type.description}`);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (property.readOnly === true) {\n\t\t\tappend(\" // readonly\");\n\t\t}\n\t\tif (property.description !== undefined && property.description !== \"\") {\n\t\t\tappend(` - ${property.description}`);\n\t\t}\n\t}\n\n\tfunction appendArrayType(arrayType: z.ZodType) {\n\t\tappendType((arrayType._def as z.ZodArrayDef).type, TypePrecedence.Object);\n\t\tappend(\"[]\");\n\t}\n\n\tfunction appendObjectType(objectType: z.ZodType) {\n\t\tappend(\"{\");\n\t\tappendNewLine();\n\t\tindent++;\n\t\t// eslint-disable-next-line prefer-const\n\t\tfor (let [name, type] of Object.entries((objectType._def as z.ZodObjectDef).shape())) {\n\t\t\tconst method = (type as unknown as { method: object | undefined }).method;\n\n\t\t\tif (method === undefined || !(method instanceof FunctionWrapper)) {\n\t\t\t\tappend(name);\n\t\t\t\tif (getTypeKind(type) === z.ZodFirstPartyTypeKind.ZodOptional) {\n\t\t\t\t\tappend(\"?\");\n\t\t\t\t\ttype = (type._def as z.ZodOptionalDef).innerType;\n\t\t\t\t}\n\t\t\t\tappend(\": \");\n\t\t\t\tappendType(type);\n\t\t\t\tappend(\";\");\n\t\t\t\tappendBoundProperties(type);\n\t\t\t\tappendNewLine();\n\t\t\t}\n\t\t}\n\t\tappendBoundMethods(objectType);\n\t\tindent--;\n\t\tappend(\"}\");\n\t}\n\n\tfunction appendUnionOrIntersectionTypes(\n\t\ttypes: readonly z.ZodType[],\n\t\tminPrecedence: TypePrecedence,\n\t) {\n\t\tlet first = true;\n\t\tfor (const type of types) {\n\t\t\tif (!first) append(minPrecedence === TypePrecedence.Intersection ? \" & \" : \" | \");\n\t\t\tappendType(type, minPrecedence);\n\t\t\tfirst = false;\n\t\t}\n\t}\n\n\tfunction appendTupleType(tupleType: z.ZodType) {\n\t\tappend(\"[\");\n\t\tlet first = true;\n\t\tfor (const type of (tupleType._def as z.ZodTupleDef<z.ZodTupleItems, z.ZodType>).items) {\n\t\t\tif (!first) append(\", \");\n\t\t\tif (getTypeKind(type) === z.ZodFirstPartyTypeKind.ZodOptional) {\n\t\t\t\tappendType((type._def as z.ZodOptionalDef).innerType, TypePrecedence.Object);\n\t\t\t\tappend(\"?\");\n\t\t\t} else {\n\t\t\t\tappendType(type);\n\t\t\t}\n\t\t\tfirst = false;\n\t\t}\n\t\tconst rest = (tupleType._def as z.ZodTupleDef<z.ZodTupleItems, z.ZodType | null>).rest;\n\t\tif (rest !== null) {\n\t\t\tif (!first) append(\", \");\n\t\t\tappend(\"...\");\n\t\t\tappendType(rest, TypePrecedence.Object);\n\t\t\tappend(\"[]\");\n\t\t}\n\t\tappend(\"]\");\n\t}\n\n\tfunction appendRecordType(recordType: z.ZodType) {\n\t\tappend(\"Record<\");\n\t\tappendType((recordType._def as z.ZodRecordDef).keyType);\n\t\tappend(\", \");\n\t\tappendType((recordType._def as z.ZodRecordDef).valueType);\n\t\tappend(\">\");\n\t}\n\n\tfunction appendMapType(mapType: z.ZodType) {\n\t\tappend(\"Map<\");\n\t\tappendType((mapType._def as z.ZodMapDef).keyType);\n\t\tappend(\", \");\n\t\tappendType((mapType._def as z.ZodMapDef).valueType);\n\t\tappend(\">\");\n\t}\n\n\tfunction appendLiteral(value: unknown) {\n\t\tappend(\n\t\t\ttypeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\"\n\t\t\t\t? JSON.stringify(value)\n\t\t\t\t: \"any\",\n\t\t);\n\t}\n\n\tfunction appendReadonlyType(readonlyType: z.ZodType) {\n\t\tappend(\"Readonly<\");\n\t\tappendType((readonlyType._def as z.ZodReadonlyDef).innerType);\n\t\tappend(\">\");\n\t}\n}\n\nfunction getTypeKind(type: z.ZodType): z.ZodFirstPartyTypeKind {\n\treturn (type._def as z.ZodTypeDef & { typeName: z.ZodFirstPartyTypeKind }).typeName;\n}\n\nfunction getTypeIdentity(type: z.ZodType): object {\n\tswitch (getTypeKind(type)) {\n\t\tcase z.ZodFirstPartyTypeKind.ZodObject: {\n\t\t\treturn (type._def as z.ZodObjectDef).shape();\n\t\t}\n\t\tcase z.ZodFirstPartyTypeKind.ZodEnum: {\n\t\t\treturn (type._def as z.ZodEnumDef).values;\n\t\t}\n\t\tcase z.ZodFirstPartyTypeKind.ZodUnion: {\n\t\t\treturn (type._def as z.ZodUnionDef).options;\n\t\t}\n\t\tdefault: {\n\t\t\treturn type;\n\t\t}\n\t}\n}\n\nconst enum TypePrecedence {\n\tUnion = 0,\n\tIntersection = 1,\n\tObject = 2,\n}\n\nfunction getTypePrecendece(type: z.ZodType): TypePrecedence {\n\tswitch (getTypeKind(type)) {\n\t\tcase z.ZodFirstPartyTypeKind.ZodEnum:\n\t\tcase z.ZodFirstPartyTypeKind.ZodUnion:\n\t\tcase z.ZodFirstPartyTypeKind.ZodDiscriminatedUnion: {\n\t\t\treturn TypePrecedence.Union;\n\t\t}\n\t\tcase z.ZodFirstPartyTypeKind.ZodIntersection: {\n\t\t\treturn TypePrecedence.Intersection;\n\t\t}\n\t\tdefault: {\n\t\t\treturn TypePrecedence.Object;\n\t\t}\n\t}\n}\n\n/**\n * Create a Zod schema for a SharedTree schema class.\n * @alpha\n */\nexport function instanceOf<T extends TreeNodeSchemaClass>(\n\tschema: T,\n): z.ZodType<InstanceType<T>, z.ZodTypeDef, InstanceType<T>> {\n\tif (!(schema instanceof ObjectNodeSchema)) {\n\t\tthrow new UsageError(`${schema.identifier} must be an instance of ObjectNodeSchema.`);\n\t}\n\tconst effect = z.instanceof(schema);\n\tinstanceOfs.set(effect, schema);\n\treturn effect;\n}\n\nconst instanceOfs = new WeakMap<z.ZodTypeAny, ObjectNodeSchema>();\n\n/**\n * Adds all (optionally filtered) schemas reachable from the given schema to the given set.\n * @returns The set of schemas added (same as the `schemas` parameter, if supplied).\n */\nexport function findSchemas(\n\tschema: ImplicitFieldSchema,\n\tfilter: (schema: TreeNodeSchema) => boolean = () => true,\n\tschemas = new Set<TreeNodeSchema>(),\n): Set<TreeNodeSchema> {\n\tfor (const nodeSchema of normalizeFieldSchema(schema).allowedTypeSet) {\n\t\tif (!schemas.has(nodeSchema)) {\n\t\t\tif (filter(nodeSchema)) {\n\t\t\t\tschemas.add(nodeSchema);\n\t\t\t}\n\t\t\tfindSchemas([...nodeSchema.childTypes], filter, schemas);\n\t\t}\n\t}\n\treturn schemas;\n}\n\n/**\n * De-capitalize (the first letter of) a string.\n */\nexport function communize(str: string): string {\n\treturn str.charAt(0).toLowerCase() + str.slice(1);\n}\n\n/**\n * Stringify an unknown error value\n */\nexport function toErrorString(error: unknown): string {\n\tif (error instanceof Error) {\n\t\treturn error.message;\n\t}\n\ttry {\n\t\treturn JSON.stringify(error);\n\t} catch {\n\t\treturn String(error);\n\t}\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.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 { isFluidHandle } from \"@fluidframework/runtime-utils\";\nimport { UsageError } from \"@fluidframework/telemetry-utils/internal\";\nimport type { ImplicitFieldSchema } from \"@fluidframework/tree\";\nimport type {\n\tInsertableContent,\n\tTreeNode,\n\tTreeNodeSchema,\n\tUnsafeUnknownSchema,\n} from \"@fluidframework/tree/alpha\";\nimport {\n\tArrayNodeSchema,\n\tMapNodeSchema,\n\tRecordNodeSchema,\n\tTreeAlpha,\n} from \"@fluidframework/tree/alpha\";\nimport { NodeKind, normalizeFieldSchema } from \"@fluidframework/tree/internal\";\n\n/**\n * Subset of Map interface.\n *\n * @remarks originally from tree/src/util/utils.ts\n */\nexport interface MapGetSet<K, V> {\n\tget(key: K): V | undefined;\n\tset(key: K, value: V): void;\n}\n\n/**\n * TBD\n */\nexport function fail(message: string): never {\n\tthrow new Error(message);\n}\n\n/**\n * Map one iterable to another by transforming each element one at a time\n * @param iterable - the iterable to transform\n * @param map - the transformation function to run on each element of the iterable\n * @returns a new iterable of elements which have been transformed by the `map` function\n *\n * @remarks originally from tree/src/util/utils.ts\n */\nexport function* mapIterable<T, U>(\n\titerable: Iterable<T>,\n\tmap: (t: T) => U,\n): IterableIterator<U> {\n\tfor (const t of iterable) {\n\t\tyield map(t);\n\t}\n}\n\n/**\n * Retrieve a value from a map with the given key, or create a new entry if the key is not in the map.\n * @param map - The map to query/update\n * @param key - The key to lookup in the map\n * @param defaultValue - a function which returns a default value. This is called and used to set an initial value for the given key in the map if none exists\n * @returns either the existing value for the given key, or the newly-created value (the result of `defaultValue`)\n *\n * @remarks originally from tree/src/util/utils.ts\n */\nexport function getOrCreate<K, V>(\n\tmap: MapGetSet<K, V>,\n\tkey: K,\n\tdefaultValue: (key: K) => V,\n): V {\n\tlet value = map.get(key);\n\tif (value === undefined) {\n\t\tvalue = defaultValue(key);\n\t\tmap.set(key, value);\n\t}\n\treturn value;\n}\n\n/**\n * TODO\n */\nexport function 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\n/**\n * Does it have at least two elements?\n */\nexport function hasAtLeastTwo<T>(array: T[]): array is [T, T, ...T[]] {\n\treturn array.length >= 2;\n}\n\n/**\n * Include this property in a field's schema metadata to indicate that the field's value should be generated via a provided function rather than by the LLM.\n * @example\n * ```ts\n * class Object extends schemaFactory.object(\"Object\", {\n * created: sf.required(sf.number, {\n * custom: {\n * // The LLM will ignore this field, and instead it will be populated with the result of the function\n * [llmDefault]: () => Date.now(),\n * },\n * }),\n * }) {};\n * ```\n * @alpha\n */\nexport const llmDefault = Symbol(\"tree-agent/llmDefault\");\n// TODO: make this a wrapper function instead, and hide the symbol.\n// function llmDefault<T extends FieldSchemaMetadata>(metadata: T): T { ... }\n\n/**\n * Usage fail\n */\nexport function failUsage(message: string): never {\n\tthrow new UsageError(message);\n}\n\n/**\n * Construct an object node from a schema and value.\n */\nexport function constructNode(schema: TreeNodeSchema, value: InsertableContent): TreeNode {\n\tconst node = TreeAlpha.create<UnsafeUnknownSchema>(schema, value);\n\tassert(\n\t\tnode !== undefined && node !== null && typeof node === \"object\" && !isFluidHandle(node),\n\t\t0xc1e /* Expected a constructed node to be an object */,\n\t);\n\treturn node;\n}\n\n/**\n * Returns the unqualified name of a tree value's schema (e.g. a node with schema identifier `\"my.scope.MyNode\"` returns `\"MyNode\"`).\n * @remarks If the schema is an inlined array, map, or record type, then it has no name and this function will return a string representation of the type (e.g., `\"MyNode[]\"` or `\"Map<string, MyNode>\"`).\n */\nexport function getFriendlyName(schema: TreeNodeSchema): string {\n\tif (schema.kind === NodeKind.Leaf || isNamedSchema(schema.identifier)) {\n\t\treturn unqualifySchema(schema.identifier);\n\t}\n\n\tconst childNames = Array.from(schema.childTypes, (t) => getFriendlyName(t));\n\tif (schema instanceof ArrayNodeSchema) {\n\t\treturn childNames.length > 1 ? `(${childNames.join(\" | \")})[]` : `${childNames[0]}[]`;\n\t}\n\tif (schema instanceof MapNodeSchema) {\n\t\treturn childNames.length > 1\n\t\t\t? `Map<string, (${childNames.join(\" | \")})>`\n\t\t\t: `Map<string, ${childNames[0]}>`;\n\t}\n\tif (schema instanceof RecordNodeSchema) {\n\t\treturn childNames.length > 1\n\t\t\t? `Record<string, (${childNames.join(\" | \")})>`\n\t\t\t: `Record<string, ${childNames[0]}>`;\n\t}\n\tfail(\"Unexpected node schema\");\n}\n\n/**\n * Returns true if the schema identifier represents a named schema (object, named array, named map, or named record).\n * @remarks This does not include primitive schemas or inlined array/map/record schemas.\n */\nexport function isNamedSchema(schemaIdentifier: string): boolean {\n\tif (\n\t\t[\"string\", \"number\", \"boolean\", \"null\", \"handle\"].includes(\n\t\t\tunqualifySchema(schemaIdentifier),\n\t\t)\n\t) {\n\t\treturn false;\n\t}\n\n\treturn /(?:Array|Map|Record)<\\[\"(.*)\"]>/.exec(schemaIdentifier) === null;\n}\n\n/**\n * Returns the unqualified, sanitized Typescript-safe name of a schema\n * Examples:\n * - `\"my.scope.MyNode\"` returns `\"MyNode\"`\n * - `\"my.scope.MyNode-2\"` returns `\"MyNode_2\"`\n * - `\"my.scope.MyNode!\"` returns `\"MyNode_\"`\n * @remarks\n * - Removes all characters before the last dot in the schema name.\n * - Sanitizes the remainder into a valid Typescript identifier\n * - If there is a dot in a user's schema name, this might produce unexpected results.\n */\nexport function unqualifySchema(schemaIdentifier: string): string {\n\t// Get the unqualified name by removing the scope (everything before the last dot).\n\tconst matches = /[^.]+$/.exec(schemaIdentifier);\n\tconst unqualifiedName = matches === null ? schemaIdentifier : matches[0];\n\n\tlet sanitizedName = unqualifiedName;\n\n\t// Replace invalid characters with \"_\".\n\tsanitizedName = sanitizedName.replace(/[^\\w$]/g, \"_\");\n\n\t// If the first character is a number, prefix it with \"_\".\n\tif (!/^[$A-Z_a-z]/.test(sanitizedName)) {\n\t\tsanitizedName = `_${sanitizedName}`;\n\t}\n\treturn sanitizedName;\n}\n\n/**\n * Adds all (optionally filtered) schemas reachable from the given schema to the given set.\n * @returns The set of schemas added (same as the `schemas` parameter, if supplied).\n */\nexport function findSchemas(\n\tschema: ImplicitFieldSchema,\n\tfilter: (schema: TreeNodeSchema) => boolean = () => true,\n\tschemas = new Set<TreeNodeSchema>(),\n): Set<TreeNodeSchema> {\n\tfor (const nodeSchema of normalizeFieldSchema(schema).allowedTypeSet) {\n\t\tif (!schemas.has(nodeSchema)) {\n\t\t\tif (filter(nodeSchema)) {\n\t\t\t\tschemas.add(nodeSchema);\n\t\t\t}\n\t\t\tfindSchemas([...nodeSchema.childTypes], filter, schemas);\n\t\t}\n\t}\n\treturn schemas;\n}\n\n/**\n * De-capitalize (the first letter of) a string.\n */\nexport function communize(str: string): string {\n\treturn str.charAt(0).toLowerCase() + str.slice(1);\n}\n\n/**\n * Stringify an unknown error value\n */\nexport function toErrorString(error: unknown): string {\n\tif (error instanceof Error) {\n\t\treturn error.message;\n\t}\n\ttry {\n\t\treturn JSON.stringify(error);\n\t} catch {\n\t\treturn String(error);\n\t}\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluidframework/tree-agent",
3
- "version": "2.73.0",
3
+ "version": "2.74.0-368706",
4
4
  "description": "Experimental package to simplify integrating AI into Fluid-based applications",
5
5
  "homepage": "https://fluidframework.com",
6
6
  "repository": {
@@ -70,24 +70,24 @@
70
70
  },
71
71
  "dependencies": {
72
72
  "@anthropic-ai/sdk": "^0.39.0",
73
- "@fluidframework/core-utils": "~2.73.0",
74
- "@fluidframework/runtime-utils": "~2.73.0",
75
- "@fluidframework/telemetry-utils": "~2.73.0",
76
- "@fluidframework/tree": "~2.73.0",
73
+ "@fluidframework/core-utils": "2.74.0-368706",
74
+ "@fluidframework/runtime-utils": "2.74.0-368706",
75
+ "@fluidframework/telemetry-utils": "2.74.0-368706",
76
+ "@fluidframework/tree": "2.74.0-368706",
77
77
  "uuid": "^11.1.0",
78
78
  "zod": "^3.25.32"
79
79
  },
80
80
  "devDependencies": {
81
81
  "@arethetypeswrong/cli": "^0.17.1",
82
82
  "@biomejs/biome": "~1.9.3",
83
- "@fluid-internal/mocha-test-setup": "~2.73.0",
83
+ "@fluid-internal/mocha-test-setup": "2.74.0-368706",
84
84
  "@fluid-tools/build-cli": "^0.60.0",
85
85
  "@fluidframework/build-common": "^2.0.3",
86
86
  "@fluidframework/build-tools": "^0.60.0",
87
- "@fluidframework/eslint-config-fluid": "~2.73.0",
88
- "@fluidframework/id-compressor": "~2.73.0",
89
- "@fluidframework/runtime-utils": "~2.73.0",
90
- "@fluidframework/test-runtime-utils": "~2.73.0",
87
+ "@fluidframework/eslint-config-fluid": "2.74.0-368706",
88
+ "@fluidframework/id-compressor": "2.74.0-368706",
89
+ "@fluidframework/runtime-utils": "2.74.0-368706",
90
+ "@fluidframework/test-runtime-utils": "2.74.0-368706",
91
91
  "@langchain/anthropic": "^0.3.24",
92
92
  "@langchain/core": "^0.3.78",
93
93
  "@langchain/google-genai": "^0.2.16",
package/src/agent.ts CHANGED
@@ -188,6 +188,7 @@ function constructTreeNode(schema: TreeNodeSchema, content: FactoryContentObject
188
188
  ) {
189
189
  const defaulter = field.metadata.custom[llmDefault];
190
190
  if (typeof defaulter === "function") {
191
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call
191
192
  const defaultValue: unknown = defaulter();
192
193
  if (defaultValue !== undefined) {
193
194
  contentWithDefaults[key] = defaultValue;
@@ -247,6 +248,7 @@ function createDefaultEditor<
247
248
  const context = createContext(tree);
248
249
  // eslint-disable-next-line no-new-func, @typescript-eslint/no-implied-eval
249
250
  const fn = new Function("context", code);
251
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call
250
252
  await fn(context);
251
253
  };
252
254
  }
@@ -4,10 +4,10 @@
4
4
  */
5
5
 
6
6
  /* eslint-disable @typescript-eslint/no-explicit-any */
7
- import type { NodeKind, TreeNodeSchema, TreeNodeSchemaClass } from "@fluidframework/tree";
7
+ import type { TreeNodeSchema, TreeNodeSchemaClass } from "@fluidframework/tree";
8
+ import { NodeKind } from "@fluidframework/tree";
8
9
  import type { z } from "zod";
9
-
10
- import { instanceOf } from "./utils.js";
10
+ import { instanceOf } from "./renderZodTypeScript.js";
11
11
 
12
12
  /**
13
13
  * A utility type that extracts the method keys from a given type.
@@ -33,6 +33,18 @@ export type BindableSchema =
33
33
  | TreeNodeSchema<string, NodeKind.Array>
34
34
  | TreeNodeSchema<string, NodeKind.Map>;
35
35
 
36
+ /**
37
+ * A type guard to check if a schema is {@link BindableSchema | bindable}.
38
+ */
39
+ export function isBindableSchema(schema: TreeNodeSchema): schema is BindableSchema {
40
+ return (
41
+ schema.kind === NodeKind.Object ||
42
+ schema.kind === NodeKind.Record ||
43
+ schema.kind === NodeKind.Array ||
44
+ schema.kind === NodeKind.Map
45
+ );
46
+ }
47
+
36
48
  /**
37
49
  * Get the exposed methods of a schema class.
38
50
  * @param schemaClass - The schema class to extract methods from.
@@ -127,7 +139,7 @@ export type Infer<T> = T extends FunctionDef<infer Args, infer Return, infer Res
127
139
  export interface ExposedMethods {
128
140
  expose<
129
141
  const K extends string & keyof MethodKeys<InstanceType<S>>,
130
- S extends BindableSchema & Ctor<{ [P in K]: Infer<Z> }> & IExposedMethods,
142
+ S extends BindableSchema & Ctor<Record<K, Infer<Z>>> & IExposedMethods,
131
143
  Z extends FunctionDef<any, any, any>,
132
144
  >(schema: S, methodName: K, zodFunction: Z): void;
133
145
 
@@ -173,7 +185,7 @@ class ExposedMethodsI implements ExposedMethods {
173
185
 
174
186
  public expose<
175
187
  const K extends string & keyof MethodKeys<InstanceType<S>>,
176
- S extends BindableSchema & Ctor<{ [P in K]: Infer<Z> }> & IExposedMethods,
188
+ S extends BindableSchema & Ctor<Record<K, Infer<Z>>> & IExposedMethods,
177
189
  Z extends FunctionDef<readonly Arg[], z.ZodTypeAny, z.ZodTypeAny | null>,
178
190
  >(schema: S, methodName: K, functionDef: Z): void {
179
191
  if (schema !== this.schemaClass) {
package/src/prompt.ts CHANGED
@@ -12,15 +12,7 @@ import { normalizeFieldSchema } from "@fluidframework/tree/internal";
12
12
 
13
13
  import type { Subtree } from "./subtree.js";
14
14
  import { generateEditTypesForPrompt } from "./typeGeneration.js";
15
- import {
16
- getFriendlyName,
17
- getZodSchemaAsTypeScript,
18
- isNamedSchema,
19
- communize,
20
- unqualifySchema,
21
- type SchemaDetails,
22
- findSchemas,
23
- } from "./utils.js";
15
+ import { getFriendlyName, communize, findSchemas } from "./utils.js";
24
16
 
25
17
  /**
26
18
  * Produces a "system" prompt for the tree agent, based on the provided subtree.
@@ -66,19 +58,11 @@ export function getPrompt(args: {
66
58
  }
67
59
  }
68
60
 
69
- const { domainTypes } = generateEditTypesForPrompt(schema, getSimpleSchema(schema));
70
- for (const [key, value] of Object.entries(domainTypes)) {
71
- // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
72
- delete domainTypes[key];
73
- if (isNamedSchema(key)) {
74
- const friendlyKey = unqualifySchema(key);
75
- domainTypes[friendlyKey] = value;
76
- }
77
- }
78
-
79
61
  const stringified = stringifyTree(field);
80
- const details: SchemaDetails = { hasHelperMethods: false };
81
- const typescriptSchemaTypes = getZodSchemaAsTypeScript(domainTypes, details);
62
+ const { schemaText: typescriptSchemaTypes, hasHelperMethods } = generateEditTypesForPrompt(
63
+ schema,
64
+ getSimpleSchema(schema),
65
+ );
82
66
  const exampleTypeName =
83
67
  nodeTypeUnion === undefined
84
68
  ? undefined
@@ -179,7 +163,7 @@ export function getPrompt(args: {
179
163
  }
180
164
  \`\`\``;
181
165
 
182
- const helperMethodExplanation = details.hasHelperMethods
166
+ const helperMethodExplanation = hasHelperMethods
183
167
  ? `Manipulating the data using the APIs described below is allowed, but when possible ALWAYS prefer to use any application helper methods exposed on the schema TypeScript types if the goal can be accomplished that way.
184
168
  It will often not be possible to fully accomplish the goal using those helpers. When this is the case, mutate the objects as normal, taking into account the following guidance.`
185
169
  : "";
@@ -8,7 +8,7 @@ import type { TreeNodeSchema, TreeNodeSchemaClass } from "@fluidframework/tree";
8
8
  import type { ZodType, ZodTypeAny, ZodTypeDef, infer as ZodInfer } from "zod";
9
9
 
10
10
  import type { BindableSchema, Ctor } from "./methodBinding.js";
11
- import { instanceOf } from "./utils.js";
11
+ import { instanceOf } from "./renderZodTypeScript.js";
12
12
 
13
13
  /**
14
14
  * A symbol used to expose properties to the LLM.
@@ -43,6 +43,7 @@ export type IfEquals<X, Y, A = true, B = false> = (<T>() => T extends X ? 1 : 2)
43
43
  * @alpha
44
44
  */
45
45
  export type ReadonlyKeys<T> = {
46
+ // eslint-disable-next-line @typescript-eslint/consistent-indexed-object-style
46
47
  [P in keyof T]-?: IfEquals<{ [Q in P]: T[P] }, { -readonly [Q in P]: T[P] }, never, P>;
47
48
  }[keyof T];
48
49