@fluidframework/tree-agent 2.63.0-359461 → 2.63.0-359734
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/api-report/tree-agent.alpha.api.md +9 -2
- package/dist/agent.d.ts +0 -3
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +21 -49
- package/dist/agent.js.map +1 -1
- package/dist/alpha.d.ts +1 -0
- package/dist/api.d.ts +18 -7
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/langchain.d.ts.map +1 -1
- package/dist/langchain.js +2 -3
- package/dist/langchain.js.map +1 -1
- package/dist/prompt.d.ts.map +1 -1
- package/dist/prompt.js +15 -17
- package/dist/prompt.js.map +1 -1
- package/dist/ses.d.ts +21 -0
- package/dist/ses.d.ts.map +1 -0
- package/dist/ses.js +64 -0
- package/dist/ses.js.map +1 -0
- package/dist/utils.d.ts +4 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +16 -1
- package/dist/utils.js.map +1 -1
- package/lib/agent.d.ts +0 -3
- package/lib/agent.d.ts.map +1 -1
- package/lib/agent.js +22 -50
- package/lib/agent.js.map +1 -1
- package/lib/alpha.d.ts +1 -0
- package/lib/api.d.ts +18 -7
- package/lib/api.d.ts.map +1 -1
- package/lib/api.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/langchain.d.ts.map +1 -1
- package/lib/langchain.js +2 -3
- package/lib/langchain.js.map +1 -1
- package/lib/prompt.d.ts.map +1 -1
- package/lib/prompt.js +15 -17
- package/lib/prompt.js.map +1 -1
- package/lib/ses.d.ts +21 -0
- package/lib/ses.d.ts.map +1 -0
- package/lib/ses.js +60 -0
- package/lib/ses.js.map +1 -0
- package/lib/utils.d.ts +4 -0
- package/lib/utils.d.ts.map +1 -1
- package/lib/utils.js +14 -0
- package/lib/utils.js.map +1 -1
- package/package.json +10 -10
- package/src/agent.ts +29 -61
- package/src/api.ts +19 -12
- package/src/index.ts +1 -0
- package/src/langchain.ts +2 -3
- package/src/prompt.ts +15 -17
- package/src/ses.ts +73 -0
- package/src/utils.ts +14 -0
- package/dist/functionParsing.d.ts +0 -13
- package/dist/functionParsing.d.ts.map +0 -1
- package/dist/functionParsing.js +0 -215
- package/dist/functionParsing.js.map +0 -1
- package/lib/functionParsing.d.ts +0 -13
- package/lib/functionParsing.d.ts.map +0 -1
- package/lib/functionParsing.js +0 -210
- package/lib/functionParsing.js.map +0 -1
- package/src/functionParsing.ts +0 -268
package/lib/utils.d.ts
CHANGED
|
@@ -124,4 +124,8 @@ export declare function findNamedSchemas(schema: ImplicitFieldSchema, schemas?:
|
|
|
124
124
|
* De-capitalize (the first letter of) a string.
|
|
125
125
|
*/
|
|
126
126
|
export declare function communize(str: string): string;
|
|
127
|
+
/**
|
|
128
|
+
* Stringify an unknown error value
|
|
129
|
+
*/
|
|
130
|
+
export declare function toErrorString(error: unknown): string;
|
|
127
131
|
//# sourceMappingURL=utils.d.ts.map
|
package/lib/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,KAAK,EACX,iBAAiB,EACjB,UAAU,EACV,QAAQ,EACR,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,MAAM,4BAA4B,CAAC;AASpC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;;;GAIG;AACH,MAAM,WAAW,SAAS,CAAC,CAAC,EAAE,CAAC;IAC9B,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAC3B,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAE3C;AAED;;;;;;;GAOG;AACH,wBAAiB,WAAW,CAAC,CAAC,EAAE,CAAC,EAChC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EACrB,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GACd,gBAAgB,CAAC,CAAC,CAAC,CAIrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,CAAC,EAC/B,GAAG,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EACpB,GAAG,EAAE,CAAC,EACN,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GACzB,CAAC,CAOH;AAED;;;;GAIG;AACH,MAAM,MAAM,QAAQ,CAAC,KAAK,SAAS,mBAAmB,GAAG,mBAAmB,IAAI,IAAI,CACnF,aAAa,CAAC,KAAK,CAAC,EACpB,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,YAAY,GAAG,QAAQ,GAAG,QAAQ,CAC9D,GACA,UAAU,CAAC;AAEZ;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,CAMrE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAEpE;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,UAAU,eAAkC,CAAC;AAI1D;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAEhD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,iBAAiB,GAAG,QAAQ,CAOxF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAoB9D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAU/D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAOhE;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,gBAAgB,EAAE,OAAO,CAAC;CAC1B;AAOD;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACvC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EACjC,OAAO,CAAC,EAAE,aAAa,GACrB,MAAM,CAuSR;AA6CD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,mBAAmB,EACvD,MAAM,EAAE,CAAC,GACP,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAO3D;AAID;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC/B,MAAM,EAAE,mBAAmB,EAC3B,OAAO,sBAA4B,GACjC,GAAG,CAAC,cAAc,CAAC,CAWrB;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C"}
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/lib/utils.js
CHANGED
|
@@ -501,4 +501,18 @@ export function findNamedSchemas(schema, schemas = new Set()) {
|
|
|
501
501
|
export function communize(str) {
|
|
502
502
|
return str.charAt(0).toLowerCase() + str.slice(1);
|
|
503
503
|
}
|
|
504
|
+
/**
|
|
505
|
+
* Stringify an unknown error value
|
|
506
|
+
*/
|
|
507
|
+
export function toErrorString(error) {
|
|
508
|
+
if (error instanceof Error) {
|
|
509
|
+
return error.message;
|
|
510
|
+
}
|
|
511
|
+
try {
|
|
512
|
+
return JSON.stringify(error);
|
|
513
|
+
}
|
|
514
|
+
catch {
|
|
515
|
+
return String(error);
|
|
516
|
+
}
|
|
517
|
+
}
|
|
504
518
|
//# sourceMappingURL=utils.js.map
|
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\tTreeBranch,\n\tTreeNode,\n\tTreeNodeSchema,\n\tTreeViewAlpha,\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\";\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 * @alpha\n * @privateRemarks This is a subset of the TreeViewAlpha functionality because if take it wholesale, it causes problems with invariance of the generic parameters.\n */\nexport type TreeView<TRoot extends ImplicitFieldSchema | UnsafeUnknownSchema> = Pick<\n\tTreeViewAlpha<TRoot>,\n\t\"root\" | \"fork\" | \"merge\" | \"rebaseOnto\" | \"schema\" | \"events\"\n> &\n\tTreeBranch;\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 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\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\tconst comment = type.description;\n\t\t\t\tif (comment !== undefined && comment !== \"\") append(` // ${comment}`);\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 named object, map, array, and record schemas reachable from the given schema to the given set.\n * @remarks This includes transitive child/descendant schemas.\n * It does not include primitive schemas or inlined array/map/record schemas.\n * @returns The set of named schemas added (same as the `schemas` parameter, if supplied).\n */\nexport function findNamedSchemas(\n\tschema: ImplicitFieldSchema,\n\tschemas = new Set<TreeNodeSchema>(),\n): Set<TreeNodeSchema> {\n\tconst set = schemas ?? new Set();\n\tfor (const nodeSchema of normalizeFieldSchema(schema).allowedTypeSet) {\n\t\tif (!set.has(nodeSchema)) {\n\t\t\tif (isNamedSchema(nodeSchema.identifier)) {\n\t\t\t\tset.add(nodeSchema);\n\t\t\t}\n\t\t\tfindNamedSchemas([...nodeSchema.childTypes], set);\n\t\t}\n\t}\n\treturn set;\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"]}
|
|
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\tTreeBranch,\n\tTreeNode,\n\tTreeNodeSchema,\n\tTreeViewAlpha,\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\";\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 * @alpha\n * @privateRemarks This is a subset of the TreeViewAlpha functionality because if take it wholesale, it causes problems with invariance of the generic parameters.\n */\nexport type TreeView<TRoot extends ImplicitFieldSchema | UnsafeUnknownSchema> = Pick<\n\tTreeViewAlpha<TRoot>,\n\t\"root\" | \"fork\" | \"merge\" | \"rebaseOnto\" | \"schema\" | \"events\"\n> &\n\tTreeBranch;\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 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\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\tconst comment = type.description;\n\t\t\t\tif (comment !== undefined && comment !== \"\") append(` // ${comment}`);\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 named object, map, array, and record schemas reachable from the given schema to the given set.\n * @remarks This includes transitive child/descendant schemas.\n * It does not include primitive schemas or inlined array/map/record schemas.\n * @returns The set of named schemas added (same as the `schemas` parameter, if supplied).\n */\nexport function findNamedSchemas(\n\tschema: ImplicitFieldSchema,\n\tschemas = new Set<TreeNodeSchema>(),\n): Set<TreeNodeSchema> {\n\tconst set = schemas ?? new Set();\n\tfor (const nodeSchema of normalizeFieldSchema(schema).allowedTypeSet) {\n\t\tif (!set.has(nodeSchema)) {\n\t\t\tif (isNamedSchema(nodeSchema.identifier)) {\n\t\t\t\tset.add(nodeSchema);\n\t\t\t}\n\t\t\tfindNamedSchemas([...nodeSchema.childTypes], set);\n\t\t}\n\t}\n\treturn set;\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.63.0-
|
|
3
|
+
"version": "2.63.0-359734",
|
|
4
4
|
"description": "Experimental package to simplify integrating AI into Fluid-based applications",
|
|
5
5
|
"homepage": "https://fluidframework.com",
|
|
6
6
|
"repository": {
|
|
@@ -70,27 +70,27 @@
|
|
|
70
70
|
},
|
|
71
71
|
"dependencies": {
|
|
72
72
|
"@anthropic-ai/sdk": "^0.39.0",
|
|
73
|
-
"@fluidframework/core-utils": "2.63.0-
|
|
74
|
-
"@fluidframework/runtime-utils": "2.63.0-
|
|
75
|
-
"@fluidframework/telemetry-utils": "2.63.0-
|
|
76
|
-
"@fluidframework/tree": "2.63.0-
|
|
73
|
+
"@fluidframework/core-utils": "2.63.0-359734",
|
|
74
|
+
"@fluidframework/runtime-utils": "2.63.0-359734",
|
|
75
|
+
"@fluidframework/telemetry-utils": "2.63.0-359734",
|
|
76
|
+
"@fluidframework/tree": "2.63.0-359734",
|
|
77
77
|
"@langchain/core": "^0.3.66",
|
|
78
|
-
"acorn": "^8.15.0",
|
|
79
78
|
"langchain": "^0.3.30",
|
|
79
|
+
"ses": "^1.14.0",
|
|
80
80
|
"uuid": "^11.1.0",
|
|
81
81
|
"zod": "^3.25.32"
|
|
82
82
|
},
|
|
83
83
|
"devDependencies": {
|
|
84
84
|
"@arethetypeswrong/cli": "^0.17.1",
|
|
85
85
|
"@biomejs/biome": "~1.9.3",
|
|
86
|
-
"@fluid-internal/mocha-test-setup": "2.63.0-
|
|
86
|
+
"@fluid-internal/mocha-test-setup": "2.63.0-359734",
|
|
87
87
|
"@fluid-tools/build-cli": "^0.58.3",
|
|
88
88
|
"@fluidframework/build-common": "^2.0.3",
|
|
89
89
|
"@fluidframework/build-tools": "^0.58.3",
|
|
90
90
|
"@fluidframework/eslint-config-fluid": "^6.0.0",
|
|
91
|
-
"@fluidframework/id-compressor": "2.63.0-
|
|
92
|
-
"@fluidframework/runtime-utils": "2.63.0-
|
|
93
|
-
"@fluidframework/test-runtime-utils": "2.63.0-
|
|
91
|
+
"@fluidframework/id-compressor": "2.63.0-359734",
|
|
92
|
+
"@fluidframework/runtime-utils": "2.63.0-359734",
|
|
93
|
+
"@fluidframework/test-runtime-utils": "2.63.0-359734",
|
|
94
94
|
"@langchain/anthropic": "^0.3.24",
|
|
95
95
|
"@langchain/google-genai": "^0.2.16",
|
|
96
96
|
"@langchain/openai": "^0.6.12",
|
package/src/agent.ts
CHANGED
|
@@ -17,14 +17,7 @@ import type {
|
|
|
17
17
|
} from "@fluidframework/tree/alpha";
|
|
18
18
|
import { ObjectNodeSchema, Tree } from "@fluidframework/tree/alpha";
|
|
19
19
|
|
|
20
|
-
import type {
|
|
21
|
-
SharedTreeChatModel,
|
|
22
|
-
EditFunction,
|
|
23
|
-
EditResult,
|
|
24
|
-
SemanticAgentOptions,
|
|
25
|
-
Logger,
|
|
26
|
-
} from "./api.js";
|
|
27
|
-
import { findInvocableFunctionName, stripExportSyntax } from "./functionParsing.js";
|
|
20
|
+
import type { SharedTreeChatModel, EditResult, SemanticAgentOptions, Logger } from "./api.js";
|
|
28
21
|
import { getPrompt, stringifyTree } from "./prompt.js";
|
|
29
22
|
import { Subtree } from "./subtree.js";
|
|
30
23
|
import {
|
|
@@ -33,6 +26,7 @@ import {
|
|
|
33
26
|
llmDefault,
|
|
34
27
|
type TreeView,
|
|
35
28
|
findNamedSchemas,
|
|
29
|
+
toErrorString,
|
|
36
30
|
} from "./utils.js";
|
|
37
31
|
|
|
38
32
|
/**
|
|
@@ -41,11 +35,6 @@ import {
|
|
|
41
35
|
*/
|
|
42
36
|
const defaultMaxSequentialEdits = 20;
|
|
43
37
|
|
|
44
|
-
/**
|
|
45
|
-
* The name of the parameter passed to the edit function.
|
|
46
|
-
*/
|
|
47
|
-
const paramsName = "params";
|
|
48
|
-
|
|
49
38
|
/**
|
|
50
39
|
* An agent that uses a {@link SharedTreeChatModel} to interact with a SharedTree.
|
|
51
40
|
* @remarks This class forwards user queries to the chat model, and handles the application of any edits to the tree that the model requests.
|
|
@@ -123,7 +112,7 @@ export class SharedTreeSemanticAgent<TSchema extends ImplicitFieldSchema> {
|
|
|
123
112
|
let editCount = 0;
|
|
124
113
|
let editFailed = false;
|
|
125
114
|
const { editToolName } = this.client;
|
|
126
|
-
const edit = async (
|
|
115
|
+
const edit = async (editCode: string): Promise<EditResult> => {
|
|
127
116
|
if (editToolName === undefined) {
|
|
128
117
|
return {
|
|
129
118
|
type: "disabledError",
|
|
@@ -147,8 +136,9 @@ export class SharedTreeSemanticAgent<TSchema extends ImplicitFieldSchema> {
|
|
|
147
136
|
|
|
148
137
|
const editResult = await applyTreeFunction(
|
|
149
138
|
queryTree,
|
|
150
|
-
|
|
151
|
-
this.options?.
|
|
139
|
+
editCode,
|
|
140
|
+
this.options?.validateEdit ?? defaultValidateEdit,
|
|
141
|
+
this.options?.executeEdit ?? defaultExecuteEdit,
|
|
152
142
|
this.options?.logger,
|
|
153
143
|
);
|
|
154
144
|
|
|
@@ -208,18 +198,22 @@ function constructTreeNode(schema: TreeNodeSchema, value: FactoryContentObject):
|
|
|
208
198
|
*/
|
|
209
199
|
async function applyTreeFunction<TSchema extends ImplicitFieldSchema>(
|
|
210
200
|
tree: Subtree<TSchema>,
|
|
211
|
-
|
|
212
|
-
|
|
201
|
+
editCode: string,
|
|
202
|
+
validateEdit: Required<SemanticAgentOptions>["validateEdit"],
|
|
203
|
+
executeEdit: Required<SemanticAgentOptions>["executeEdit"],
|
|
213
204
|
logger: Logger | undefined,
|
|
214
205
|
): Promise<EditResult> {
|
|
215
206
|
logger?.log(`### Editing Tool Invoked\n\n`);
|
|
216
|
-
logger?.log(`#### Generated Code\n\n\`\`\`javascript\n${
|
|
207
|
+
logger?.log(`#### Generated Code\n\n\`\`\`javascript\n${editCode}\n\`\`\`\n\n`);
|
|
217
208
|
|
|
218
|
-
|
|
209
|
+
try {
|
|
210
|
+
await validateEdit(editCode);
|
|
211
|
+
} catch (error: unknown) {
|
|
219
212
|
logger?.log(`#### Code Validation Failed\n\n`);
|
|
213
|
+
logger?.log(`\`\`\`JSON\n${toErrorString(error)}\n\`\`\`\n\n`);
|
|
220
214
|
return {
|
|
221
215
|
type: "validationError",
|
|
222
|
-
message:
|
|
216
|
+
message: `The generated code did not pass validation: ${toErrorString(error)}`,
|
|
223
217
|
};
|
|
224
218
|
}
|
|
225
219
|
|
|
@@ -232,7 +226,7 @@ async function applyTreeFunction<TSchema extends ImplicitFieldSchema>(
|
|
|
232
226
|
|
|
233
227
|
// Fork a branch to edit. If the edit fails or produces an error, we discard this branch, otherwise we merge it.
|
|
234
228
|
const editTree = tree.fork();
|
|
235
|
-
const
|
|
229
|
+
const context = {
|
|
236
230
|
get root(): ReadableField<TSchema> {
|
|
237
231
|
return editTree.field;
|
|
238
232
|
},
|
|
@@ -242,34 +236,15 @@ async function applyTreeFunction<TSchema extends ImplicitFieldSchema>(
|
|
|
242
236
|
create,
|
|
243
237
|
};
|
|
244
238
|
|
|
245
|
-
let editFunction: EditFunction<TSchema>;
|
|
246
|
-
if (typeof fn === "string") {
|
|
247
|
-
try {
|
|
248
|
-
editFunction = processLlmCode(fn);
|
|
249
|
-
} catch (error) {
|
|
250
|
-
logger?.log(`#### Error\n\n`);
|
|
251
|
-
const errorMessage = error instanceof Error ? error.message : JSON.stringify(error);
|
|
252
|
-
logger?.log(`\`\`\`JSON\n${errorMessage}\n\`\`\`\n\n`);
|
|
253
|
-
editTree.branch.dispose();
|
|
254
|
-
return {
|
|
255
|
-
type: "compileError",
|
|
256
|
-
message: `The supplied JavaScript function is not valid: ${errorMessage}`,
|
|
257
|
-
};
|
|
258
|
-
}
|
|
259
|
-
} else {
|
|
260
|
-
editFunction = fn;
|
|
261
|
-
}
|
|
262
|
-
|
|
263
239
|
try {
|
|
264
|
-
await
|
|
240
|
+
await executeEdit(context, editCode);
|
|
265
241
|
} catch (error: unknown) {
|
|
266
242
|
logger?.log(`#### Error\n\n`);
|
|
267
|
-
|
|
268
|
-
logger?.log(`\`\`\`JSON\n${errorMessage}\n\`\`\`\n\n`);
|
|
243
|
+
logger?.log(`\`\`\`JSON\n${toErrorString(error)}\n\`\`\`\n\n`);
|
|
269
244
|
editTree.branch.dispose();
|
|
270
245
|
return {
|
|
271
|
-
type: "
|
|
272
|
-
message: `Running the
|
|
246
|
+
type: "executionError",
|
|
247
|
+
message: `Running the generated code produced an error. The state of the tree will be reset to its previous state as it was before the code ran. Please try again. Here is the error: ${toErrorString(error)}`,
|
|
273
248
|
};
|
|
274
249
|
}
|
|
275
250
|
|
|
@@ -278,24 +253,17 @@ async function applyTreeFunction<TSchema extends ImplicitFieldSchema>(
|
|
|
278
253
|
logger?.log(`${`\`\`\`JSON\n${stringifyTree(tree.field)}\n\`\`\``}\n\n`);
|
|
279
254
|
return {
|
|
280
255
|
type: "success",
|
|
281
|
-
message: `After running the
|
|
256
|
+
message: `After running the code, the new state of the tree is:\n\n\`\`\`JSON\n${stringifyTree(tree.field)}\n\`\`\``,
|
|
282
257
|
};
|
|
283
258
|
}
|
|
284
259
|
|
|
285
|
-
|
|
286
|
-
code: string,
|
|
287
|
-
): EditFunction<TSchema> {
|
|
288
|
-
const functionName = findInvocableFunctionName(code);
|
|
289
|
-
if (functionName === undefined) {
|
|
290
|
-
throw new Error("Generated code does not contain an invokable function");
|
|
291
|
-
}
|
|
260
|
+
const defaultValidateEdit: Required<SemanticAgentOptions>["validateEdit"] = () => {};
|
|
292
261
|
|
|
293
|
-
|
|
262
|
+
const defaultExecuteEdit: Required<SemanticAgentOptions>["executeEdit"] = async (
|
|
263
|
+
context,
|
|
264
|
+
code,
|
|
265
|
+
) => {
|
|
294
266
|
// eslint-disable-next-line no-new-func, @typescript-eslint/no-implied-eval
|
|
295
|
-
const fn = new Function(
|
|
296
|
-
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
/**
|
|
300
|
-
* Finds the name of the first invocable function in the given code.
|
|
301
|
-
*/
|
|
267
|
+
const fn = new Function("context", code);
|
|
268
|
+
await fn(context);
|
|
269
|
+
};
|
package/src/api.ts
CHANGED
|
@@ -4,11 +4,8 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import type { ImplicitFieldSchema, TreeNode } from "@fluidframework/tree";
|
|
7
|
-
import type { FactoryContentObject, ReadableField } from "@fluidframework/tree/alpha";
|
|
8
|
-
|
|
9
7
|
// This is used for doc links
|
|
10
|
-
|
|
11
|
-
import type { SharedTreeSemanticAgent } from "./agent.js";
|
|
8
|
+
import type { FactoryContentObject, ReadableField } from "@fluidframework/tree/alpha";
|
|
12
9
|
|
|
13
10
|
/**
|
|
14
11
|
* Logger interface for logging events from a {@link SharedTreeSemanticAgent}.
|
|
@@ -31,10 +28,22 @@ export interface SemanticAgentOptions {
|
|
|
31
28
|
*/
|
|
32
29
|
domainHints?: string;
|
|
33
30
|
/**
|
|
34
|
-
* Validates any generated JavaScript created by the {@link SharedTreeChatModel.editToolName | model's editing tool}
|
|
35
|
-
* @remarks
|
|
31
|
+
* Validates any generated JavaScript created by the {@link SharedTreeChatModel.editToolName | model's editing tool}.
|
|
32
|
+
* @remarks This happens before the code is executed - execution can be intercepted by using the {@link SemanticAgentOptions.executeEdit | executeEdit} callback.
|
|
33
|
+
* @param code - The generated JavaScript code as a string.
|
|
34
|
+
* @throws If the code is invalid, this function should throw an error with a human-readable message describing why it is invalid.
|
|
35
|
+
*/
|
|
36
|
+
validateEdit?: (code: string) => void | Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Evaluates (executes) any generated JavaScript created by the {@link SharedTreeChatModel.editToolName | model's editing tool}.
|
|
39
|
+
* @remarks This happens only after the code has been successfully validated by the optional {@link SemanticAgentOptions.validateEdit | validateEdit} function.
|
|
40
|
+
* @param context - An object that must be provided to the generated code as a variable named "context" in its top-level scope.
|
|
41
|
+
* @param code - The generated JavaScript code as a string.
|
|
42
|
+
* @throws If an error is thrown while evaluating the code, it will be caught and the message will be forwarded to the model for debugging.
|
|
43
|
+
* @remarks If this function is not provided, the generated code will be executed using a simple `eval` call, which may not provide sufficient security guarantees for some environments.
|
|
44
|
+
* Use a library such as SES to provide a more secure implementation - see {@link createSesEditEvaluator} for a drop-in option.
|
|
36
45
|
*/
|
|
37
|
-
|
|
46
|
+
executeEdit?: (context: Record<string, unknown>, code: string) => void | Promise<void>;
|
|
38
47
|
/**
|
|
39
48
|
* The maximum number of sequential edits the LLM can make before we assume it's stuck in a loop.
|
|
40
49
|
*/
|
|
@@ -50,9 +59,8 @@ export interface SemanticAgentOptions {
|
|
|
50
59
|
* @remarks
|
|
51
60
|
* - `success`: The edit was successfully applied.
|
|
52
61
|
* - `disabledError`: The model is not allowed to edit the tree (i.e. {@link SharedTreeChatModel.editToolName} was not provided).
|
|
53
|
-
* - `validationError`: The provided JavaScript did not pass the optional {@link SemanticAgentOptions.
|
|
54
|
-
* - `
|
|
55
|
-
* - `runtimeError`: An error was thrown while executing the provided JavaScript.
|
|
62
|
+
* - `validationError`: The provided JavaScript did not pass the optional {@link SemanticAgentOptions.validateEdit} function.
|
|
63
|
+
* - `executionError`: An error was thrown while parsing or executing the provided JavaScript.
|
|
56
64
|
* - `tooManyEditsError`: The {@link SharedTreeChatQuery.edit} function has been called more than the number of times specified by {@link SemanticAgentOptions.maximumSequentialEdits} for the same message.
|
|
57
65
|
* - `expiredError`: The {@link SharedTreeChatQuery.edit} function was called after the issuing query has already completed.
|
|
58
66
|
* @alpha
|
|
@@ -62,8 +70,7 @@ export interface EditResult {
|
|
|
62
70
|
| "success"
|
|
63
71
|
| "disabledError"
|
|
64
72
|
| "validationError"
|
|
65
|
-
| "
|
|
66
|
-
| "runtimeError"
|
|
73
|
+
| "executionError"
|
|
67
74
|
| "tooManyEditsError"
|
|
68
75
|
| "expiredError";
|
|
69
76
|
|
package/src/index.ts
CHANGED
package/src/langchain.ts
CHANGED
|
@@ -59,10 +59,9 @@ export class LangchainChatModel implements SharedTreeChatModel {
|
|
|
59
59
|
},
|
|
60
60
|
{
|
|
61
61
|
name: this.editToolName,
|
|
62
|
-
description: `Invokes a JavaScript
|
|
62
|
+
description: `Invokes a JavaScript code snippet to edit a tree of application data.`,
|
|
63
63
|
schema: z.object({
|
|
64
|
-
functionCode: z.string().describe(`The
|
|
65
|
-
For example: "function editTree({ root, create }) { /* your code here */ }"`),
|
|
64
|
+
functionCode: z.string().describe(`The JavaScript snippet code.`),
|
|
66
65
|
}),
|
|
67
66
|
},
|
|
68
67
|
);
|
package/src/prompt.ts
CHANGED
|
@@ -69,7 +69,7 @@ export function getPrompt<TRoot extends ImplicitFieldSchema>(args: {
|
|
|
69
69
|
const details: SchemaDetails = { hasHelperMethods: false };
|
|
70
70
|
const typescriptSchemaTypes = getZodSchemaAsTypeScript(domainTypes, details);
|
|
71
71
|
const helperMethodExplanation = details.hasHelperMethods
|
|
72
|
-
? `Manipulating the data using the APIs described below is allowed, but when possible ALWAYS prefer to use
|
|
72
|
+
? `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.
|
|
73
73
|
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.`
|
|
74
74
|
: "";
|
|
75
75
|
|
|
@@ -77,16 +77,14 @@ It will often not be possible to fully accomplish the goal using those helpers.
|
|
|
77
77
|
exampleObjectName === undefined
|
|
78
78
|
? ""
|
|
79
79
|
: `When constructing new objects, you should wrap them in the appropriate builder function rather than simply making a javascript object.
|
|
80
|
-
The builders are available on the
|
|
80
|
+
The builders are available on the \`create\` property on the context object and are named according to the type that they create.
|
|
81
81
|
For example:
|
|
82
82
|
|
|
83
83
|
\`\`\`javascript
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
// const ${communize(exampleObjectName)} = { /* ...properties... */ };
|
|
89
|
-
}
|
|
84
|
+
// This creates a new ${exampleObjectName} object:
|
|
85
|
+
const ${communize(exampleObjectName)} = context.create.${exampleObjectName}({ /* ...properties... */ });
|
|
86
|
+
// Don't do this:
|
|
87
|
+
// const ${communize(exampleObjectName)} = { /* ...properties... */ };
|
|
90
88
|
\`\`\`\n\n`;
|
|
91
89
|
|
|
92
90
|
const arrayEditing = `#### Editing Arrays
|
|
@@ -120,20 +118,20 @@ ${getTreeMapNodeDocumentation(mapInterfaceName)}
|
|
|
120
118
|
`;
|
|
121
119
|
|
|
122
120
|
const rootTypes = normalizeFieldSchema(schema).allowedTypeSet;
|
|
123
|
-
const editing = `If the user asks you to edit the tree, you should author a JavaScript
|
|
124
|
-
You must use the "${editToolName}" tool to
|
|
121
|
+
const editing = `If the user asks you to edit the tree, you should author a snippet of JavaScript code to accomplish the user-specified goal, following the instructions for editing detailed below.
|
|
122
|
+
You must use the "${editToolName}" tool to run the generated code.
|
|
125
123
|
After editing the tree, review the latest state of the tree to see if it satisfies the user's request.
|
|
126
124
|
If it does not, or if you receive an error, you may try again with a different approach.
|
|
127
125
|
Once the tree is in the desired state, you should inform the user that the request has been completed.
|
|
128
126
|
|
|
129
127
|
### Editing
|
|
130
128
|
|
|
131
|
-
If the user asks you to edit the document, you will write a JavaScript
|
|
132
|
-
The
|
|
133
|
-
The
|
|
134
|
-
This \`
|
|
135
|
-
You may mutate any part of the tree as necessary, taking into account the caveats around arrays and maps detailed below.
|
|
136
|
-
You may also set the \`root\` property to be an entirely new value as long as it is one of the types allowed at the root of the tree (\`${Array.from(rootTypes.values(), (t) => getFriendlyName(t)).join(" | ")}\`).
|
|
129
|
+
If the user asks you to edit the document, you will write a snippet of JavaScript code that mutates the data in-place to achieve the user's goal.
|
|
130
|
+
The snippet may be synchronous or asynchronous (i.e. it may \`await\` functions if necessary).
|
|
131
|
+
The snippet has a \`context\` variable in its scope.
|
|
132
|
+
This \`context\` variable holds the current state of the tree in the \`root\` property.
|
|
133
|
+
You may mutate any part of the root tree as necessary, taking into account the caveats around${hasArrays ? ` arrays${hasMaps ? " and" : ""}` : ""}${hasMaps ? " maps" : ""} detailed below.
|
|
134
|
+
You may also set the \`root\` property of the context to be an entirely new value as long as it is one of the types allowed at the root of the tree (\`${Array.from(rootTypes.values(), (t) => getFriendlyName(t)).join(" | ")}\`).
|
|
137
135
|
${helperMethodExplanation}
|
|
138
136
|
|
|
139
137
|
${hasArrays ? arrayEditing : ""}${hasMaps ? mapEditing : ""}#### Additional Notes
|
|
@@ -163,7 +161,7 @@ ${
|
|
|
163
161
|
? ""
|
|
164
162
|
: `\nThe application supplied the following additional instructions: ${domainHints}`
|
|
165
163
|
}
|
|
166
|
-
The current state of
|
|
164
|
+
The current state of \`context.root\` (a \`${field === undefined ? "undefined" : getFriendlyName(Tree.schema(field))}\`) is:
|
|
167
165
|
|
|
168
166
|
\`\`\`JSON
|
|
169
167
|
${stringified}
|